konva
Version:
HTML5 2d canvas library for interactive graphics, design editors, whiteboards, and diagrams.
54 lines • 198 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Konva=e()}(this,function(){"use strict";
/*
* Konva JavaScript Framework v10.9.1
* http://konvajs.org/
* Licensed under the MIT
* Date: Sat Oct 31 2026
*
* Original work Copyright (C) 2011 - 2013 by Eric Rowell (KineticJS)
* Modified work Copyright (C) 2014 - present by Anton Lavrenov (Konva)
*
* @license
*/const t=Math.PI/180;const e="undefined"!=typeof global?global:"undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope?self:{},i={_global:e,version:"10.9.1",isBrowser:"undefined"!=typeof window&&("[object Window]"==={}.toString.call(window)||"[object global]"==={}.toString.call(window)),isUnminified:/param/.test(function(t){}.toString()),dblClickWindow:400,getAngle:e=>i.angleDeg?e*t:e,enableTrace:!1,pointerEventsEnabled:!0,autoDrawEnabled:!0,hitOnDragEnabled:!1,capturePointerEventsEnabled:!1,_renderBackend:"web",legacyTextRendering:!1,pixelRatio:"undefined"!=typeof window&&window.devicePixelRatio||1,dragDistance:3,angleDeg:!0,showWarnings:!0,dragButtons:[0,1],isDragging:()=>i.DD.isDragging,isTransforming(){var t,e;return null!==(e=null===(t=i.Transformer)||void 0===t?void 0:t.isTransforming())&&void 0!==e&&e},isDragReady:()=>!!i.DD.node,releaseCanvasOnDestroy:!0,document:e.document,_injectGlobal(t){void 0!==e.Konva&&console.error("Several Konva instances detected. It is not recommended to use multiple Konva instances in the same environment."),e.Konva=t}},n=new Set,s=(t,e=!1)=>{i[t.prototype.getClassName()]=t,e&&n.add(t)};i._injectGlobal(i);const r=()=>{if("undefined"==typeof document)throw new Error('Konva.js unsupported environment.\n\nLooks like you are trying to use Konva.js in Node.js environment (or in a Web Worker), because "document" object is undefined.\n\nTo use Konva.js in Node.js environment, you need to use the "canvas-backend" or "skia-backend" module.\n\nbash: npm install canvas\njs: import "konva/canvas-backend";\n\nor\n\nbash: npm install skia-canvas\njs: import "konva/skia-backend";\n')};class a{constructor(t){this.dirty=!1,this.m=t?t.slice():[1,0,0,1,0,0]}reset(){this.m[0]=1,this.m[1]=0,this.m[2]=0,this.m[3]=1,this.m[4]=0,this.m[5]=0}copy(){return new a(this.m)}copyInto(t){t.m[0]=this.m[0],t.m[1]=this.m[1],t.m[2]=this.m[2],t.m[3]=this.m[3],t.m[4]=this.m[4],t.m[5]=this.m[5]}point(t){const e=this.m;return{x:e[0]*t.x+e[2]*t.y+e[4],y:e[1]*t.x+e[3]*t.y+e[5]}}_getTransformedRect(t){const[e,i,n,s,r,a]=this.m,o=t.x,h=t.y,l=t.x+t.width,d=t.y+t.height,c=[e*o+n*h+r,e*l+n*h+r,e*l+n*d+r,e*o+n*d+r],g=[i*o+s*h+a,i*l+s*h+a,i*l+s*d+a,i*o+s*d+a],u=Math.min(c[0],c[1],c[2],c[3]),f=Math.min(g[0],g[1],g[2],g[3]);return{x:u,y:f,width:Math.max(c[0],c[1],c[2],c[3])-u,height:Math.max(g[0],g[1],g[2],g[3])-f}}translate(t,e){return this.m[4]+=this.m[0]*t+this.m[2]*e,this.m[5]+=this.m[1]*t+this.m[3]*e,this}scale(t,e){return this.m[0]*=t,this.m[1]*=t,this.m[2]*=e,this.m[3]*=e,this}rotate(t){const e=Math.cos(t),i=Math.sin(t),n=this.m[0]*e+this.m[2]*i,s=this.m[1]*e+this.m[3]*i,r=this.m[0]*-i+this.m[2]*e,a=this.m[1]*-i+this.m[3]*e;return this.m[0]=n,this.m[1]=s,this.m[2]=r,this.m[3]=a,this}getTranslation(){return{x:this.m[4],y:this.m[5]}}skew(t,e){const i=this.m[0]+this.m[2]*e,n=this.m[1]+this.m[3]*e,s=this.m[2]+this.m[0]*t,r=this.m[3]+this.m[1]*t;return this.m[0]=i,this.m[1]=n,this.m[2]=s,this.m[3]=r,this}multiply(t){const e=this.m[0]*t.m[0]+this.m[2]*t.m[1],i=this.m[1]*t.m[0]+this.m[3]*t.m[1],n=this.m[0]*t.m[2]+this.m[2]*t.m[3],s=this.m[1]*t.m[2]+this.m[3]*t.m[3],r=this.m[0]*t.m[4]+this.m[2]*t.m[5]+this.m[4],a=this.m[1]*t.m[4]+this.m[3]*t.m[5]+this.m[5];return this.m[0]=e,this.m[1]=i,this.m[2]=n,this.m[3]=s,this.m[4]=r,this.m[5]=a,this}isInvertible(){return this.m[0]*this.m[3]-this.m[1]*this.m[2]!==0}invert(){const t=1/(this.m[0]*this.m[3]-this.m[1]*this.m[2]),e=this.m[3]*t,i=-this.m[1]*t,n=-this.m[2]*t,s=this.m[0]*t,r=t*(this.m[2]*this.m[5]-this.m[3]*this.m[4]),a=t*(this.m[1]*this.m[4]-this.m[0]*this.m[5]);return this.m[0]=e,this.m[1]=i,this.m[2]=n,this.m[3]=s,this.m[4]=r,this.m[5]=a,this}getMatrix(){return this.m}decompose(){const t=this.m[0],e=this.m[1],i=this.m[2],n=this.m[3],s=t*n-e*i,r={x:this.m[4],y:this.m[5],rotation:0,scaleX:0,scaleY:0,skewX:0,skewY:0};if(0!=t||0!=e){const a=Math.sqrt(t*t+e*e);r.rotation=e>0?Math.acos(t/a):-Math.acos(t/a),r.scaleX=a,r.scaleY=s/a,r.skewX=s&&(t*i+e*n)/s,r.skewY=0}else if(0!=i||0!=n){const a=Math.sqrt(i*i+n*n);r.rotation=Math.PI/2-(n>0?Math.acos(-i/a):-Math.acos(i/a)),r.scaleX=s/a,r.scaleY=a,r.skewX=0,r.skewY=s&&(t*i+e*n)/s}return r.rotation=C._getRotation(r.rotation),r}}const o=Math.PI/180,h=180/Math.PI,l="Konva error: ",d={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,134,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,250,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,221],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:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],transparent:[0,0,0,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,50]};let c=null;const g="undefined"!=typeof window?window:{},u=new WeakMap,f=new Map,p=Object.getPrototypeOf(Int8Array),_=t=>{const e=t.trim();return-1===e.indexOf(",")?e.split(/\s*\/\s*|\s+/):e.split(/\s*,\s*/)},m="[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?",v=new RegExp(`^(${m})(%?)$`,"i"),y=(t,e)=>{const i=v.exec(t);if(!i)return NaN;const n=i[2]?Number(i[1])/100*e:Number(i[1]);return Math.min(Math.max(n,0),e)},S=/^#[0-9a-f]+$/i,x=new RegExp(`^(${m})(deg|grad|rad|turn)?$`,"i"),b={deg:1,grad:.9,rad:h,turn:360};function w(t,e){return Math.min(Math.max(t||0,0),e)}const C={_isElement:t=>!(!t||1!=t.nodeType),_isFunction:t=>!!(t&&t.constructor&&t.call&&t.apply),_isPlainObject:t=>!!t&&t.constructor===Object,_isArray:t=>"[object Array]"===Object.prototype.toString.call(t),_isNumber:t=>"[object Number]"===Object.prototype.toString.call(t)&&!isNaN(t)&&isFinite(t),_isString:t=>"[object String]"===Object.prototype.toString.call(t),_isBoolean:t=>"[object Boolean]"===Object.prototype.toString.call(t),isObject:t=>t instanceof Object,isValidSelector(t){if("string"!=typeof t)return!1;const e=t[0];return"#"===e||"."===e||e===e.toUpperCase()},_sign:t=>0===t||t>0?1:-1,requestAnimFrame(t,e){const i=e&&!e.closed&&e||g;let n=u.get(i);n||(n=[],u.set(i,n),((t,e)=>{"function"==typeof t.requestAnimationFrame?t.requestAnimationFrame(e):"undefined"!=typeof requestAnimationFrame?requestAnimationFrame(e):setTimeout(e,16)})(i,function(){u.delete(i),n.forEach(function(t){t()})})),n.push(t)},createCanvasElement(){r();const t=document.createElement("canvas");try{t.style=t.style||{}}catch(t){}return t},createImageElement:()=>(r(),document.createElement("img")),_urlToImage(t,e,i){const n=C.createImageElement();n.onload=function(){e(n)},n.onerror=t=>{null==i||i(t instanceof Error?t:new Error("Unable to load image."))},n.src=t},_rgbToHex:(t,e,i)=>((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1),_hexToRgb(t){t=t.replace("#","");const e=parseInt(t,16);return{r:e>>16&255,g:e>>8&255,b:255&e}},getRandomColor(){let t=(16777215*Math.random()|0).toString(16);for(;t.length<6;)t="0"+t;return"#"+t},isCanvasFarblingActive(){if(null!==c)return c;if("undefined"==typeof document)return c=!1,!1;const t=this.createCanvasElement();t.width=10,t.height=10;const e=t.getContext("2d",{willReadFrequently:!0});e.clearRect(0,0,10,10),e.fillStyle="#282828",e.fillRect(0,0,10,10);const i=e.getImageData(0,0,10,10).data;let n=!1;for(let t=0;t<100;t++)if(40!==i[4*t]||40!==i[4*t+1]||40!==i[4*t+2]||255!==i[4*t+3]){n=!0;break}return c=n,this.releaseCanvas(t),c},getHitColor(){const t=()=>256*Math.random()|0;return this.getHitColorKey(t(),t(),t())},getHitColorKey(t,e,i){const n=this.isCanvasFarblingActive()?5:3,s=t=>Math.round(t/n)*n;return"#"+this._rgbToHex(s(t),s(e),s(i))},getSnappedHexColor(t){const{r:e,g:i,b:n}=this._hexToRgb(t);return this.getHitColorKey(e,i,n)},getRGB(t){var e;const{r:i=0,g:n=0,b:s=0}=null!==(e=C.colorToRGBA(t))&&void 0!==e?e:{};return{r:i,g:n,b:s}},colorToRGBA(t){t=(t||"").trim()||"black";const e=C._namedColorToRBA(t)||C._hex3ColorToRGBA(t)||C._hex4ColorToRGBA(t)||C._hex6ColorToRGBA(t)||C._hex8ColorToRGBA(t)||C._rgbColorToRGBA(t)||C._hslColorToRGBA(t);if(e&&[e.r,e.g,e.b,e.a].every(C._isNumber))return e},_namedColorToRBA(t){const e=d[t.toLowerCase()];return e?{r:e[0],g:e[1],b:e[2],a:e.length>3?e[3]:1}:null},_rgbColorToRGBA(t){const e=/^rgba?\(([^)]*)\)$/i.exec(t);if(!e)return;const i=_(e[1]);return i.length<3||i.length>4?void 0:{r:y(i[0],255),g:y(i[1],255),b:y(i[2],255),a:i.length>3?y(i[3],1):1}},_hex8ColorToRGBA(t){if(9===t.length&&S.test(t))return{r:parseInt(t.slice(1,3),16),g:parseInt(t.slice(3,5),16),b:parseInt(t.slice(5,7),16),a:parseInt(t.slice(7,9),16)/255}},_hex6ColorToRGBA(t){if(7===t.length&&S.test(t))return{r:parseInt(t.slice(1,3),16),g:parseInt(t.slice(3,5),16),b:parseInt(t.slice(5,7),16),a:1}},_hex4ColorToRGBA(t){if(5===t.length&&S.test(t))return{r:parseInt(t[1]+t[1],16),g:parseInt(t[2]+t[2],16),b:parseInt(t[3]+t[3],16),a:parseInt(t[4]+t[4],16)/255}},_hex3ColorToRGBA(t){if(4===t.length&&S.test(t))return{r:parseInt(t[1]+t[1],16),g:parseInt(t[2]+t[2],16),b:parseInt(t[3]+t[3],16),a:1}},_hslColorToRGBA(t){const e=/^hsla?\(([^)]*)\)$/i.exec(t);if(!e)return;const i=_(e[1]);if(i.length<3||i.length>4)return;const n=x.exec(i[0]);if(!n)return;const s=n[2],r=Number(n[1])*(s?b[s.toLowerCase()]:1);if(!isFinite(r))return;const a=(r%360+360)%360/360,o=y(i[1],100)/100,h=y(i[2],100)/100,l=i.length>3?y(i[3],1):1,d=h<.5?h*(1+o):h+o-h*o,c=2*h-d,g=[0,0,0];for(let t=0;t<3;t++){let e,i=a+1/3*-(t-1);i<0&&i++,i>1&&i--,e=6*i<1?c+6*(d-c)*i:2*i<1?d:3*i<2?c+(d-c)*(2/3-i)*6:c,g[t]=255*e}return{r:Math.round(g[0]),g:Math.round(g[1]),b:Math.round(g[2]),a:l}},_getPointsRect(t){let e=1/0,i=1/0,n=-1/0,s=-1/0;for(let r=0;r<t.length;r+=2){const a=t[r],o=t[r+1];isNaN(a)||(e=Math.min(e,a),n=Math.max(n,a)),isNaN(o)||(i=Math.min(i,o),s=Math.max(s,o))}return isFinite(e+i)?{x:e,y:i,width:n-e,height:s-i}:{x:0,y:0,width:0,height:0}},haveIntersection:(t,e)=>!(e.x>t.x+t.width||e.x+e.width<t.x||e.y>t.y+t.height||e.y+e.height<t.y),cloneObject(t){const e={};for(const i in t)e[i]=C._cloneValue(t[i]);return e},_cloneValue:t=>C._isArray(t)?t.some(t=>"object"==typeof t)?t.map(C._cloneValue):t.slice():C._isPlainObject(t)?C.cloneObject(t):t instanceof p?t.slice():t,cloneArray:t=>t.slice(0),degToRad:t=>t*o,radToDeg:t=>t*h,_getRotation:t=>i.angleDeg?C.radToDeg(t):t,_capitalize(t){const e=f.get(t);if(void 0!==e)return e;const i=t.charAt(0).toUpperCase()+t.slice(1);return f.set(t,i),i},throw(t){throw new Error(l+t)},error(t){console.error(l+t)},warn(t){i.showWarnings&&console.warn("Konva warning: "+t)},_batchEvents(t,e){if(!t)return e();let i=!1,n=!0;try{t(()=>{!i&&n?(i=!0,e()):C.warn("eventBatchFunc must call its argument exactly once, synchronously.")})}finally{n=!1,i||C.warn("eventBatchFunc must call its argument synchronously.")}},each(t,e){for(const i in t)e(i,t[i])},_inRange:(t,e,i)=>e<=t&&t<i,_getProjectionToSegment(t,e,i,n,s,r){let a,o,h;const l=(t-i)*(t-i)+(e-n)*(e-n);if(0==l)a=t,o=e,h=(s-i)*(s-i)+(r-n)*(r-n);else{const d=((s-t)*(i-t)+(r-e)*(n-e))/l;d<0?(a=t,o=e,h=(t-s)*(t-s)+(e-r)*(e-r)):d>1?(a=i,o=n,h=(i-s)*(i-s)+(n-r)*(n-r)):(a=t+d*(i-t),o=e+d*(n-e),h=(a-s)*(a-s)+(o-r)*(o-r))}return[a,o,h]},_getProjectionToLine(t,e,i){const n=C.cloneObject(t);let s=Number.MAX_VALUE;return e.forEach(function(r,a){if(!i&&a===e.length-1)return;const o=e[(a+1)%e.length],h=C._getProjectionToSegment(r.x,r.y,o.x,o.y,t.x,t.y),l=h[0],d=h[1],c=h[2];c<s&&(n.x=l,n.y=d,s=c)}),n},_prepareArrayForTween(t,e,i){const n=[],s=[];if(t.length>e.length){const i=e;e=t,t=i}for(let e=0;e<t.length;e+=2)n.push({x:t[e],y:t[e+1]});for(let t=0;t<e.length;t+=2)s.push({x:e[t],y:e[t+1]});const r=[];return s.forEach(function(t){const e=C._getProjectionToLine(t,n,i);r.push(e.x),r.push(e.y)}),r},_prepareToStringify(t,e=new Set){const i=C._isArray(t)?[]:{};e.add(t);for(const n of Object.keys(t)){const s=t[n];C._isElement(s)||e.has(s)||(i[n]=C._isPlainObject(s)||C._isArray(s)?C._prepareToStringify(s,e):s)}return e.delete(t),i},_assign(t,e){for(const i in e)t[i]=e[i];return t},_getEventType:t=>t.indexOf("pointer")>=0?"pointer":t.indexOf("touch")>=0?"touch":"mouse",_getFirstPointerId(t){var e;return t.touches?t.changedTouches[0].identifier:null!==(e=t.pointerId)&&void 0!==e?e:999},releaseCanvas(...t){i.releaseCanvasOnDestroy&&t.forEach(t=>{t.width=0,t.height=0})},_cornerRadii(t,e,i){const n=Math.min(e,i)/2;if("number"==typeof t){const e=w(t,n);return[e,e,e,e]}return[w(t[0],n),w(t[1],n),w(t[2],n),w(t[3],n)]},drawRoundedRectPath(t,e,i,n){let s=e<0?e:0,r=i<0?i:0;e=Math.abs(e),i=Math.abs(i);const[a,o,h,l]=C._cornerRadii(n,e,i);t.moveTo(s+a,r),t.lineTo(s+e-o,r),t.arc(s+e-o,r+o,o,3*Math.PI/2,0,!1),t.lineTo(s+e,r+i-h),t.arc(s+e-h,r+i-h,h,0,Math.PI/2,!1),t.lineTo(s+l,r+i),t.arc(s+l,r+i-l,l,Math.PI/2,Math.PI,!1),t.lineTo(s,r+a),t.arc(s+a,r+a,a,Math.PI,3*Math.PI/2,!1)},drawRoundedPolygonPath(t,e,i,n,s){n=Math.abs(n);for(let r=0;r<i;r++){const a=e[(r-1+i)%i],o=e[r],h=e[(r+1)%i],l={x:o.x-a.x,y:o.y-a.y},d={x:h.x-o.x,y:h.y-o.y},c=Math.hypot(l.x,l.y),g=Math.hypot(d.x,d.y);let u;u="number"==typeof s?s:r<s.length?s[r]:0,u=Math.max(u,0);u=n*Math.cos(Math.PI/i)*Math.min(1,u/n*2);const f={x:l.x/c,y:l.y/c},p={x:d.x/g,y:d.y/g},_={x:o.x-f.x*u,y:o.y-f.y*u},m={x:o.x+p.x*u,y:o.y+p.y*u};0===r?t.moveTo(_.x,_.y):t.lineTo(_.x,_.y),t.arcTo(o.x,o.y,m.x,m.y,u)}}};const k=["arc","arcTo","beginPath","bezierCurveTo","clearRect","clip","closePath","createLinearGradient","createPattern","createRadialGradient","drawImage","ellipse","fill","fillText","getImageData","createImageData","lineTo","moveTo","putImageData","quadraticCurveTo","rect","roundRect","restore","rotate","save","scale","setLineDash","setTransform","stroke","strokeText","transform","translate"];let P=null;function M(){if(null!==P)return P;try{const t=C.createCanvasElement(),e=t.getContext("2d");P=!!e&&"filter"in e,C.releaseCanvas(t)}catch(t){P=!1}return P}class T{constructor(t){this.canvas=t,i.enableTrace&&(this.traceArr=[],this._enableTrace())}fillShape(t){t.fillEnabled()&&this._fill(t)}_fill(t){}strokeShape(t){t.hasStroke()&&this._stroke(t)}_stroke(t){}fillStrokeShape(t){t.attrs.fillAfterStrokeEnabled?(this.strokeShape(t),this.fillShape(t)):(this.fillShape(t),this.strokeShape(t))}getTrace(t,e){let i,n,s,r,a=this.traceArr,o=a.length,h="";for(i=0;i<o;i++)n=a[i],s=n.method,s?(r=n.args,h+=s,t?h+="()":(e&&(r=r.map(t=>"number"==typeof t?Math.floor(t):t)),h+="("+r.join(",")+")")):(h+=n.property,t||(h+="="+n.val)),h+=";";return h}clearTrace(){this.traceArr=[]}_trace(t){let e,i=this.traceArr;i.push(t),e=i.length,e>=100&&i.shift()}reset(){const t=this.getCanvas().getPixelRatio();this.setTransform(1*t,0,0,1*t,0,0)}getCanvas(){return this.canvas}clear(t){const e=this.getCanvas();t?this.clearRect(t.x||0,t.y||0,t.width||0,t.height||0):this.clearRect(0,0,e.getWidth()/e.pixelRatio,e.getHeight()/e.pixelRatio)}_drawDeviceBuffer(t){const{x:e,y:i,width:n,height:s}=t._isolationRect;this.setTransform(1,0,0,1,0,0),this.imageSmoothingEnabled=!1,this.drawImage(t._canvas,0,0,n,s,e,i,n,s)}_applyLineCap(t){const e=t.attrs.lineCap;e&&this.setAttr("lineCap",e)}_getOpacity(t){if(!this._opacityRoot)return t.getAbsoluteOpacity();let e=t.opacity(),i=t.parent;for(;i&&i!==this._opacityRoot;)e*=i.opacity(),i=i.parent;return e}_applyOpacity(t){const e=this._getOpacity(t);1!==e&&this.setAttr("globalAlpha",e)}_applyLineJoin(t){const e=t.attrs.lineJoin;e&&this.setAttr("lineJoin",e)}_applyMiterLimit(t){const e=t.attrs.miterLimit;null!=e&&this.setAttr("miterLimit",e)}setAttr(t,e){this._context[t]=e}arc(t,e,i,n,s,r){this._context.arc(t,e,i,n,s,r)}arcTo(t,e,i,n,s){this._context.arcTo(t,e,i,n,s)}beginPath(){this._context.beginPath()}bezierCurveTo(t,e,i,n,s,r){this._context.bezierCurveTo(t,e,i,n,s,r)}clearRect(t,e,i,n){this._context.clearRect(t,e,i,n)}clip(...t){this._context.clip.apply(this._context,t)}closePath(){this._context.closePath()}createImageData(t,e){const i=arguments;return 2===i.length?this._context.createImageData(t,e):1===i.length?this._context.createImageData(t):void 0}createLinearGradient(t,e,i,n){return this._context.createLinearGradient(t,e,i,n)}createPattern(t,e){return this._context.createPattern(t,e)}createRadialGradient(t,e,i,n,s,r){return this._context.createRadialGradient(t,e,i,n,s,r)}drawImage(t,e,i,n,s,r,a,o,h){const l=arguments,d=this._context;3===l.length?d.drawImage(t,e,i):5===l.length?d.drawImage(t,e,i,n,s):9===l.length&&d.drawImage(t,e,i,n,s,r,a,o,h)}ellipse(t,e,i,n,s,r,a,o){this._context.ellipse(t,e,i,n,s,r,a,o)}isPointInPath(t,e,i,n){return i?this._context.isPointInPath(i,t,e,n):this._context.isPointInPath(t,e,n)}fill(...t){this._context.fill.apply(this._context,t)}fillRect(t,e,i,n){this._context.fillRect(t,e,i,n)}strokeRect(t,e,i,n){this._context.strokeRect(t,e,i,n)}fillText(t,e,i,n){n?this._context.fillText(t,e,i,n):this._context.fillText(t,e,i)}measureText(t){return this._context.measureText(t)}getImageData(t,e,i,n){return this._context.getImageData(t,e,i,n)}lineTo(t,e){this._context.lineTo(t,e)}moveTo(t,e){this._context.moveTo(t,e)}rect(t,e,i,n){this._context.rect(t,e,i,n)}roundRect(t,e,i,n,s){this._context.roundRect(t,e,i,n,s)}putImageData(t,e,i){this._context.putImageData(t,e,i)}quadraticCurveTo(t,e,i,n){this._context.quadraticCurveTo(t,e,i,n)}restore(){this._context.restore()}rotate(t){this._context.rotate(t)}save(){this._context.save()}scale(t,e){this._context.scale(t,e)}setLineDash(t){this._context.setLineDash(t)}getLineDash(){return this._context.getLineDash()}setTransform(t,e,i,n,s,r){this._context.setTransform(t,e,i,n,s,r)}stroke(t){t?this._context.stroke(t):this._context.stroke()}strokeText(t,e,i,n){this._context.strokeText(t,e,i,n)}transform(t,e,i,n,s,r){this._context.transform(t,e,i,n,s,r)}translate(t,e){this._context.translate(t,e)}_enableTrace(){let t,e,i=this,n=k.length,s=this.setAttr;const r=function(t){let n,s=i[t];i[t]=function(){return e=function(t){const e=[],i=t.length,n=C;for(let s=0;s<i;s++){let i=t[s];n._isNumber(i)?i=Math.round(1e3*i)/1e3:n._isString(i)||(i+=""),e.push(i)}return e}(Array.prototype.slice.call(arguments,0)),n=s.apply(i,arguments),i._trace({method:t,args:e}),n}};for(t=0;t<n;t++)r(k[t]);i.setAttr=function(){s.apply(i,arguments);const t=arguments[0];let e=arguments[1];"shadowOffsetX"!==t&&"shadowOffsetY"!==t&&"shadowBlur"!==t||(e/=this.canvas.getPixelRatio()),i._trace({property:t,val:e})}}_applyGlobalCompositeOperation(t){const e=t.attrs.globalCompositeOperation;!e||"source-over"===e||this.setAttr("globalCompositeOperation",e)}}["fillStyle","strokeStyle","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","letterSpacing","lineCap","lineDashOffset","lineJoin","lineWidth","miterLimit","direction","font","textAlign","textBaseline","globalAlpha","globalCompositeOperation","imageSmoothingEnabled","imageSmoothingQuality","filter"].forEach(function(t){Object.defineProperty(T.prototype,t,{get(){return this._context[t]},set(e){this._context[t]=e}})});class A extends T{constructor(t,{willReadFrequently:e=!1}={}){super(t),this._context=t._canvas.getContext("2d",{willReadFrequently:e})}_getFillPattern(t){const e=this._context;return"patternQuality"in e&&(e.patternQuality=e.imageSmoothingEnabled?"good":"nearest"),t._getFillPattern()}_getFillStyle(t){const e=t.fill(),i=t.fillPriority();if(e&&"color"===i)return e;const n=t.fillPatternImage();if(n&&"pattern"===i)return this._getFillPattern(t);const s=t.fillLinearGradientColorStops();if(s&&"linear-gradient"===i)return t._getLinearGradient();const r=t.fillRadialGradientColorStops();return r&&"radial-gradient"===i?t._getRadialGradient():e||(n?this._getFillPattern(t):s?t._getLinearGradient():r?t._getRadialGradient():void 0)}_fill(t){const e=this._getFillStyle(t);void 0!==e&&(this.setAttr("fillStyle",e),t._fillFunc(this))}_strokeLinearGradient(t){let e=t._toStyleSpace(t.getStrokeLinearGradientStartPoint()),i=t._toStyleSpace(t.getStrokeLinearGradientEndPoint());if(!t.getStrokeScaleEnabled()){const{a:t,b:n,c:s,d:r,e:o,f:h}=this._context.getTransform(),l=new a([t,n,s,r,o,h]),d=this.canvas.getPixelRatio(),c=i.x-e.x,g=i.y-e.y,u=r*c-n*g,f=t*g-s*c,p=u*u+f*f,_=p?(c*c+g*g)*(t*r-n*s)/p:0;e=l.point(e),i={x:e.x+u*_,y:e.y+f*_},e={x:e.x/d,y:e.y/d},i={x:i.x/d,y:i.y/d}}const n=t.getStrokeLinearGradientColorStops(),s=this.createLinearGradient(e.x,e.y,i.x,i.y);if(n){for(let t=0;t<n.length;t+=2)s.addColorStop(n[t],n[t+1]);this.setAttr("strokeStyle",s)}}_applyStrokeStyle(t){t.strokeLinearGradientColorStops()?this._strokeLinearGradient(t):this.setAttr("strokeStyle",t.stroke())}_applyDecorationStyle(t){if(t.hasFill())this.strokeStyle=this._getFillStyle(t);else{if(!t.hasStroke())return!1;this._applyStrokeStyle(t)}return!0}_stroke(t){const e=t.dash(),i=t.getStrokeScaleEnabled();i||this.save(),this._applyLineCap(t),e&&t.dashEnabled()&&(this.setLineDash(e),this.setAttr("lineDashOffset",t.dashOffset())),this.setAttr("lineWidth",t.strokeWidth());const n=this.shadowColor,s=t.getShadowForStrokeEnabled();if(s||this.setAttr("shadowColor","rgba(0,0,0,0)"),this._applyStrokeStyle(t),!i){const t=this.getCanvas().getPixelRatio();this.setTransform(t,0,0,t,0,0)}try{t._strokeFunc(this)}finally{s||this.setAttr("shadowColor",n),i||this.restore()}}_applyShadow(t){var e;const i=null!==(e=t.getShadowRGBA())&&void 0!==e?e:"black",n=t.getShadowBlur(),s=t.getShadowOffset(),r=t.getAbsoluteScale(),a=this.canvas.getPixelRatio(),o=r.x*a,h=r.y*a;this.setAttr("shadowColor",i),this.setAttr("shadowBlur",n*Math.min(Math.abs(o),Math.abs(h))),this.setAttr("shadowOffsetX",s.x*o),this.setAttr("shadowOffsetY",s.y*h)}}class E extends T{constructor(t){super(t),this._context=t._canvas.getContext("2d",{willReadFrequently:!0})}_fill(t){this.save(),this.setAttr("fillStyle",t.colorKey),t._fillFuncHit(this),this.restore()}strokeShape(t){t.hasHitStroke()&&this._stroke(t)}_stroke(t){const e=t.getStrokeScaleEnabled();if(!e){this.save();const t=this.getCanvas().getPixelRatio();this.setTransform(t,0,0,t,0,0)}this._applyLineCap(t);const i=t.hitStrokeWidth(),n="auto"===i?t.strokeWidth():i;this.setAttr("lineWidth",n),this.setAttr("strokeStyle",t.colorKey),t._strokeFuncHit(this),e||this.restore()}}class R{constructor(t){this.pixelRatio=1,this.width=0,this.height=0,this._logicalWidth=0,this._logicalHeight=0,this.isCache=!1;const e=(t||{}).pixelRatio||i.pixelRatio||i._global.devicePixelRatio||1;this.pixelRatio=e,this._canvas=C.createCanvasElement(),this._canvas.style.padding="0",this._canvas.style.margin="0",this._canvas.style.border="0",this._canvas.style.background="transparent",this._canvas.style.position="absolute",this._canvas.style.top="0",this._canvas.style.left="0"}getContext(){return this.context}getPixelRatio(){return this.pixelRatio}setPixelRatio(t){this.pixelRatio=t,this.setSize(this._logicalWidth,this._logicalHeight)}setWidth(t){this.setSize(t,this._logicalHeight)}setHeight(t){this.setSize(this._logicalWidth,t)}getWidth(){return this.width}getHeight(){return this.height}_bitmapSize(t){return Math.floor((t||0)*this.pixelRatio)}setSize(t,e){isFinite(null!=t?t:0)&&isFinite(null!=e?e:0)||(C.error(`Canvas size must be finite numbers, got ${t}x${e}. The canvas is left empty.`),t=e=0),t=t||0,e=e||0;const i=this.pixelRatio,n=this.getContext()._context,s=n.imageSmoothingEnabled;this._logicalWidth=t,this._logicalHeight=e,this.width=this._canvas.width=this._bitmapSize(t),this.height=this._canvas.height=this._bitmapSize(e),this._canvas.style.width=t+"px",this._canvas.style.height=e+"px",n.scale(i,i),n.imageSmoothingEnabled=s}setSizeIfChanged(t,e){this.width===this._bitmapSize(t)&&this.height===this._bitmapSize(e)||this.setSize(t,e)}toDataURL(t,e){try{return this._canvas.toDataURL(t,e)}catch(t){try{return this._canvas.toDataURL()}catch(t){throw C.error("Unable to get data URL. "+t.message+" For more info read https://konvajs.org/docs/posts/Tainted_Canvas.html."),t}}}}class G extends R{_prepareIsolationCanvas(t){const{a:e,b:i,c:n,d:s,e:r,f:o}=this.getContext()._context.getTransform(),h=this._isolationRect||this;let l=0,d=0,c=h.width,g=h.height;if(t){const h=new a([e,i,n,s,r,o])._getTransformedRect(t);l=Math.max(0,Math.floor(h.x)-1),d=Math.max(0,Math.floor(h.y)-1),c=Math.min(c,Math.ceil(h.x+h.width)+1)-l,g=Math.min(g,Math.ceil(h.y+h.height)+1)-d}c>0&&g>0||(l=d=0,c=g=1);const u=this._isolationCanvas||(this._isolationCanvas=new G({width:0,height:0,pixelRatio:this.pixelRatio}));if(u.width<c||u.height<g){const t=this.pixelRatio,e=(e,i,n)=>Math.min(n,Math.ceil((i<e?Math.max(e,1.5*i):i)/t));u.setSize(e(c,u.width,this._logicalWidth),e(g,u.height,this._logicalHeight))}u._isolationRect={x:l,y:d,width:c,height:g};const f=u._isolationPeak;f.width=Math.max(f.width,c),f.height=Math.max(f.height,g);const p=u.getContext();p.setTransform(1,0,0,1,0,0),p.clearRect(0,0,c,g),p.setTransform(e,i,n,s,r-l,o-d);const _=this.getContext();return p.imageSmoothingEnabled=_.imageSmoothingEnabled,p.imageSmoothingQuality=_.imageSmoothingQuality,p.direction=_.direction,u}_trimIsolationCanvas(){const t=this._isolationCanvas;if(!t)return;const e=t._isolationPeak,i=t.width*t.height>4*e.width*e.height;t._isolationLowFrames=i?t._isolationLowFrames+1:0,t._isolationLowFrames>=10?this._releaseIsolationCanvas():(e.width=e.height=0,t._trimIsolationCanvas())}_releaseIsolationCanvas(){const t=this._isolationCanvas;t&&(t._releaseIsolationCanvas(),C.releaseCanvas(t._canvas),this._isolationCanvas=void 0)}setSize(t,e){this._releaseIsolationCanvas(),super.setSize(t,e)}constructor(t={width:0,height:0,willReadFrequently:!1}){super(t),this._isolationPeak={width:0,height:0},this._isolationLowFrames=0,this.context=new A(this,{willReadFrequently:t.willReadFrequently}),this.setSize(t.width,t.height)}}class L extends R{constructor(t={width:0,height:0}){super(t),this.hitCanvas=!0,this.context=new E(this),this.context.imageSmoothingEnabled=!1,this.setSize(t.width,t.height)}}const D={get isDragging(){let t=!1;return D._dragElements.forEach(e=>{"dragging"===e.dragStatus&&(t=!0)}),t},get node(){let t;for(const e of D._dragElements.values()){if("dragging"===e.dragStatus)return e.node;t=e.node}return t},_dragElements:new Map,_listenToWindow(t){const e=e=>D._endDragBefore(e,t),i=e=>D._batchEvents(()=>D._drag(e,t),t),n=t=>D._batchEvents(()=>D._endDragAfter(t));t.addEventListener("mouseup",e,!0),t.addEventListener("touchend",e,!0),t.addEventListener("touchcancel",e,!0),t.addEventListener("mousemove",i),t.addEventListener("touchmove",i),t.addEventListener("mouseup",n,!1),t.addEventListener("touchend",n,!1),t.addEventListener("touchcancel",n,!1)},_batchEvents(t,e){if(!D._dragElements.size)return;const i=new Set;for(const{node:t}of D._dragElements.values()){const n=t.getStage();if(!n||e&&n._getOwnerWindow()!==e)continue;const s=n.eventBatchFunc();s&&i.add(s)}let n=t;for(const t of i){const e=n;n=()=>C._batchEvents(t,e)}n()},_drag(t,e){const i=[],n=new Set;D._dragElements.forEach((s,r)=>{const{node:a}=s,o=a.getStage();if(e&&o._getOwnerWindow()!==e)return;if(n.has(o)||(o.setPointersPositions(t),n.add(o)),s.pointerEventType&&s.pointerEventType!==o._pointerEventType)return;void 0===s.pointerId&&(s.pointerId=C._getFirstPointerId(t),s.pointerEventType=o._pointerEventType,"dragging"===s.dragStatus&&o._cancelClick(s.pointerId,s.pointerEventType));const h=o._changedPointerPositions.find(t=>t.id===s.pointerId);if(h){if("dragging"!==s.dragStatus){const e=a.dragDistance();if(Math.max(Math.abs(h.x-s.startPointerPos.x),Math.abs(h.y-s.startPointerPos.y))<e)return;if(a.startDrag({evt:t}),!a.isDragging())return}a._setDragPosition(t,s),i.push(a)}}),i.forEach(e=>{e.getStage()&&e.fire("dragmove",{type:"dragmove",target:e,evt:t},!0)})},_endDragBefore(t,e,i){const n=[],s=new Set;D._dragElements.forEach((r,a)=>{const{node:o}=r;if(i&&r!==i&&r.pointerId!==i.pointerId)return;const h=o.getStage();if(!t||s.has(h)||e&&h._getOwnerWindow()!==e||(h.setPointersPositions(t),s.add(h)),!i){if(t&&r.pointerEventType&&r.pointerEventType!==C._getEventType(t.type))return;if(!(void 0===r.pointerId||h._changedPointerPositions.some(t=>t.id===r.pointerId)))return}if("ready"===r.dragStatus)D._dragElements.delete(a);else{h._cancelClick(r.pointerId,r.pointerEventType),r.dragStatus="stopped";const t=o.getLayer()||h;t&&-1===n.indexOf(t)&&n.push(t)}}),n.forEach(t=>{t.draw()})},_endDragAfter(t,e){D._dragElements.forEach((i,n)=>{"stopped"!==i.dragStatus||e&&i!==e&&i.pointerId!==e.pointerId||(i.node.fire("dragend",{type:"dragend",target:i.node,evt:t},!0),"dragging"!==i.dragStatus&&D._dragElements.delete(n))})}},I=new Map,F=void 0!==i._global.PointerEvent;function O(t,e){const i=I.get(t);return!i||e&&i.stage!==e?void 0:i.shape}function B(t,e,i){t._fire(e,{evt:new PointerEvent(e,{pointerId:i}),pointerId:i})}function N(t,e){var i;return(null===(i=I.get(t))||void 0===i?void 0:i.shape)===e}function W(t,e){var i;z(t);const n=e.getStage();if(n&&(I.set(t,{shape:e,stage:n}),F)){try{null===(i=n.content)||void 0===i||i.setPointerCapture(t)}catch(t){}B(e,"gotpointercapture",t)}}function z(t,e){var i;const n=I.get(t);if(!n||e&&n.shape!==e)return;const{shape:s,stage:r}=n;if(I.delete(t),F){try{null===(i=r.content)||void 0===i||i.releasePointerCapture(t)}catch(t){}B(s,"lostpointercapture",t)}}function H(t){return C._isString(t)?'"'+t+'"':"[object Number]"===Object.prototype.toString.call(t)||C._isBoolean(t)?t:Object.prototype.toString.call(t)}function Y(t){return t>255?255:t<0?0:Math.round(t)}function U(){if(i.isUnminified)return function(t,e){return C._isNumber(t)||C.warn(H(t)+' is a not valid value for "'+e+'" attribute. The value should be a number.'),t}}function X(t){if(i.isUnminified)return function(e,i){let n=C._isNumber(e),s=C._isArray(e)&&e.length==t;return n||s||C.warn(H(e)+' is a not valid value for "'+i+'" attribute. The value should be a number or Array<number>('+t+")"),e}}function j(){if(i.isUnminified)return function(t,e){return C._isNumber(t)||"auto"===t||C.warn(H(t)+' is a not valid value for "'+e+'" attribute. The value should be a number or "auto".'),t}}function q(){if(i.isUnminified)return function(t,e){return C._isString(t)||C.warn(H(t)+' is a not valid value for "'+e+'" attribute. The value should be a string.'),t}}function $(){if(i.isUnminified)return function(t,e){const i=C._isString(t),n="[object CanvasGradient]"===Object.prototype.toString.call(t)||t&&t.addColorStop;return i||n||C.warn(H(t)+' is a not valid value for "'+e+'" attribute. The value should be a string or a native gradient.'),t}}function V(){if(i.isUnminified)return function(t,e){return!0===t||!1===t||C.warn(H(t)+' is a not valid value for "'+e+'" attribute. The value should be a boolean.'),t}}const K="get",Q="set",J={addGetterSetter(t,e,i,n,s){J.addGetter(t,e,i),J.addSetter(t,e,n,s),J.addOverloadedGetterSetter(t,e)},addGetter(t,e,i){const n=K+C._capitalize(e),s=Array.isArray(i),r=function(){const t=this.attrs[e];return void 0===t?s?i.slice():i:t};r._def=i,t.prototype[n]=t.prototype[n]||r},addSetter(t,e,i,n){const s=Q+C._capitalize(e);t.prototype[s]||J.overWriteSetter(t,e,i,n)},overWriteSetter(t,e,i,n){const s=Q+C._capitalize(e);t.prototype[s]=function(t){return i&&null!=t&&(t=i.call(this,t,e)),this._setAttr(e,t),n&&n.call(this),this}},addComponentsGetterSetter(t,e,n,s,r){const a=n.length,o=C._capitalize,h=K+o(e),l=Q+o(e),d=n.map(t=>e+o(t)),c=d.map(t=>K+o(t));t.prototype[h]=function(){const t={};for(let e=0;e<a;e++){const i=this[c[e]];t[n[e]]=i?i.call(this):this.attrs[d[e]]}return t};const g=function(t){if(i.isUnminified)return function(e,i){return null==e||C.isObject(e)||C.warn(H(e)+' is a not valid value for "'+i+'" attribute. The value should be an object with properties '+t),e}}(n);t.prototype[l]=function(t){const i=this[h]();s&&(t=s.call(this,t,e)),g&&g.call(this,t,e);for(const i in t)t.hasOwnProperty(i)&&this._setAttr(e+o(i),t[i]);return t||n.forEach(t=>{this._setAttr(e+o(t),void 0)}),this._fireChangeEvent(e,i,t),r&&r.call(this),this},J.addOverloadedGetterSetter(t,e)},addOverloadedGetterSetter(t,e){const i=C._capitalize(e),n=Q+i,s=K+i;t.prototype[e]=function(){return arguments.length?(this[n](arguments[0]),this):this[s]()}},backCompat(t,e){C.each(e,function(e,i){const n=t.prototype[i],s=K+C._capitalize(e),r=Q+C._capitalize(e);function a(){return C.error('"'+e+'" method is deprecated and will be removed soon. Use ""'+i+'" instead.'),n.apply(this,arguments)}t.prototype[e]=a,t.prototype[s]=a,t.prototype[r]=a})},afterSetFilter(){this._filterUpToDate=!1}};function Z(t){const e=[],i=/(\w+)\(([^)]*)\)/g;let n;for(;null!==(n=i.exec(t));){const[,t,i]=n,s=tt[t];if(!s){C.warn(`CSS filter "${t}" is not supported in fallback mode. Consider using function filters for better compatibility.`);continue}const r=""===i.trim()?"blur"===t?0:1:parseFloat(i)/(i.includes("%")?100:1);e.push({fallback:s,value:r})}return function(t,i=1){for(const{fallback:n,value:s}of e)n(t,s,i)}}const tt={};function et(t,e){tt[t]=e}for(const t of["grayscale","sepia","invert"])et(t,(e,i)=>{const n=Math.min(1,Math.max(0,i)),s=e.data;for(let e=0;e<s.length;e+=4){const i=s[e],r=s[e+1],a=s[e+2];let o,h,l;"grayscale"===t?o=h=l=.2126*i+.7152*r+.0722*a:"sepia"===t?(o=.393*i+.769*r+.189*a,h=.349*i+.686*r+.168*a,l=.272*i+.534*r+.131*a):(o=255-i,h=255-r,l=255-a),s[e]=i+(o-i)*n,s[e+1]=r+(h-r)*n,s[e+2]=a+(l-a)*n}});const it="absoluteOpacity",nt="absoluteTransform",st="listening",rt=["mouseenter","mouseleave","pointerenter","pointerleave","touchenter","touchleave"],at="Shape",ot="stage",ht="transform",lt="visible",dt=["xChange.konva","yChange.konva","scaleXChange.konva","scaleYChange.konva","skewXChange.konva","skewYChange.konva","rotationChange.konva","offsetXChange.konva","offsetYChange.konva","transformsEnabledChange.konva"].join(" ");let ct=1;class gt{constructor(t){this._id=ct++,this.eventListeners={},this.attrs={},this.index=0,this.parent=null,this._cache={},this._canvasCache=null,this._batchingTransformChange=!1,this._needClearTransformCache=!1,this._filterUpToDate=!1,this._isUnderCache=!1,this._dragEventId=null,this._shouldFireChangeEvents=!1,this.setAttrs(t),this._shouldFireChangeEvents=!0}hasChildren(){return!1}_clearCache(t){t!==ht&&t!==nt||!this._cache[t]?t?this._cache[t]=void 0:(this._cache={},void 0!==this._attrsVersion&&this._attrsVersion++):this._cache[t].dirty=!0}_releaseCanvasCache(){const t=this._canvasCache;t&&(C.releaseCanvas(t.scene._canvas,t.filter._canvas,...t.hit?[t.hit._canvas]:[]),this._canvasCache=null)}_getCache(t,e){let i=this._cache[t];return(void 0===i||(t===ht||t===nt)&&!0===i.dirty)&&(i=e.call(this),this._cache[t]=i),i}_getCanvasCache(){return this._canvasCache}_clearSelfAndDescendantCache(t){this._clearCache(t),void 0!==t&&t!==nt||this.fire("absoluteTransformChange")}static _runAfterUpdateBatch(t){gt._updateBatchDepth>0?gt._pendingUpdates.add(t):t()}static _flushUpdateBatch(){if(gt._updateBatchDepth>0)return;const t=gt._pendingUpdates;t.size&&(gt._pendingUpdates=new Set,t.forEach(t=>t()))}static _updateBatch(t){gt._updateBatchDepth++;try{return t()}finally{gt._updateBatchDepth--,gt._flushUpdateBatch()}}static _beginUpdateBatch(){gt._updateBatchDepth++;let t=!1;return()=>{t||(t=!0,gt._updateBatchDepth--,gt._flushUpdateBatch())}}clearCache(){return this._releaseCanvasCache(),this._clearSelfAndDescendantCache(),this._requestDraw(),this}cache(t){const e=t||{};let i={};if(void 0===e.x||void 0===e.y||void 0===e.width||void 0===e.height){const t=this._isUnderCache;this._isUnderCache=!0,i=this.getClientRect({skipTransform:!0,relativeTo:this.getParent()||void 0}),this._isUnderCache=t}let n=void 0===e.x?Math.floor(i.x):e.x,s=void 0===e.y?Math.floor(i.y):e.y,r=Math.ceil(e.width||i.x+i.width-n),a=Math.ceil(e.height||i.y+i.height-s),o=e.pixelRatio,h=e.offset||0,l=e.drawBorder||!1,d=e.hitCanvasPixelRatio||1;if(r<=0||a<=0||!isFinite(n+s+r+a))return C.error(`Can not cache the node. Its size is 0 or its bounds are not finite numbers (${n}, ${s}, ${r}x${a}). Caching is skipped.`),this;r+=2*h,a+=2*h,n-=h,s-=h;const c=new G({pixelRatio:o,width:r,height:a}),g=new G({pixelRatio:o,width:0,height:0,willReadFrequently:!0}),u=c.getContext();c.isCache=!0,this._releaseCanvasCache(),this._filterUpToDate=!1,!1===e.imageSmoothingEnabled&&(c.getContext()._context.imageSmoothingEnabled=!1,g.getContext()._context.imageSmoothingEnabled=!1),u.save(),u.translate(-n,-s),this._isUnderCache=!0,this._clearSelfAndDescendantCache(it);try{this.drawScene(c,this)}catch(t){throw C.releaseCanvas(c._canvas),t}finally{this._isUnderCache=!1,this._clearSelfAndDescendantCache(it),u.restore(),c._releaseIsolationCanvas()}return l&&(u.save(),u.beginPath(),u.rect(0,0,r,a),u.closePath(),u.setAttr("strokeStyle","red"),u.setAttr("lineWidth",5),u.stroke(),u.restore()),this._canvasCache={scene:c,filter:g,hit:null,hitConfig:{pixelRatio:d,width:r,height:a},x:n,y:s},this._clearSelfAndDescendantCache(),this._requestDraw(),this}_getCachedHitCanvas(t){if(t===this)return null;const e=this._getCanvasCache();if(!e)return null;if(e.hit)return e.hit;const i=new L(e.hitConfig);i.isCache=!0;const n=i.getContext();return n.save(),n.translate(-e.x,-e.y),this.drawHit(i,this),n.restore(),e.hit=i,i}isCached(){return!!this._canvasCache}getClientRect(t){throw new Error('abstract "getClientRect" method call')}_getCachedSceneRect(t){const e=t._forDrawing&&!this._isUnderCache&&this._getCanvasCache();if(!e)return;const i={x:e.x,y:e.y,width:e.scene.width/e.scene.pixelRatio,height:e.scene.height/e.scene.pixelRatio};return t.skipTransform?i:this._transformedRect(i,t.relativeTo)}_transformedRect(t,e){return this.getAbsoluteTransform(e)._getTransformedRect(t)}_drawCachedSceneCanvas(t){t.save(),t._applyOpacity(this),t._applyGlobalCompositeOperation(this);const e=this._getCanvasCache();t.translate(e.x,e.y);const i=this._getCachedSceneCanvas(),n=i.pixelRatio;t.drawImage(i._canvas,0,0,i.width/n,i.height/n),t.restore()}_drawCachedHitCanvas(t,e){const i=this._getCanvasCache();t.save(),t.translate(i.x,i.y),t.drawImage(e._canvas,0,0,e.width/e.pixelRatio,e.height/e.pixelRatio),t.restore()}_getCachedSceneCanvas(){let t,e,i,n,s=this.filters(),r=this._getCanvasCache(),a=r.scene,o=r.filter,h=o.getContext();if(!s||0===s.length)return a;if(this._filterUpToDate)return o;let l=!0;for(let t=0;t<s.length;t++)if("string"!=typeof s[t]||!M()){l=!1;break}const d=a.pixelRatio;if(o.setSizeIfChanged(a._logicalWidth,a._logicalHeight),l){const t=s.join(" ").replace(/url\((?:[^()"']|"[^"]*"|'[^']*')*\)|"[^"]*"|'[^']*'|([-+]?(?:\d*\.)?\d+(?:e[-+]?\d+)?)(px|em|rem|ex|ch|cap|ic|lh|rlh|vw|vh|vmin|vmax|cm|mm|q|in|pt|pc)\b/gi,(t,e,i)=>void 0===e?t:`${Number(e)*d}${i}`);return h.clear(),h.save(),h.setAttr("filter",t),h.drawImage(a._canvas,0,0,a.getWidth()/d,a.getHeight()/d),h.restore(),this._filterUpToDate=!0,o}try{for(t=s.length,h.clear(),h.drawImage(a._canvas,0,0,a.getWidth()/d,a.getHeight()/d),e=h.getImageData(0,0,o.getWidth(),o.getHeight()),i=0;i<t;i++)n=s[i],"string"==typeof n&&(n=Z(n)),n.call(this,e,d);h.putImageData(e,0,0)}catch(t){C.error("Unable to apply filter. "+t.message+" This post my help you https://konvajs.org/docs/posts/Tainted_Canvas.html.")}return this._filterUpToDate=!0,o}on(...t){this._prepareListeners();const e=t[0],i=t[1];if(t[2],3===t.length)return this._delegate.apply(this,t);const n=e.split(" ");for(let t=0;t<n.length;t++){const e=n[t].split("."),s=e[0],r=e[1]||"";this.eventListeners[s]||(this.eventListeners[s]=[]),this.eventListeners[s].push({name:r,handler:i})}return this}_prepareListeners(){this===this.constructor.prototype&&(this.hasOwnProperty("eventListeners")||(this.eventListeners={}),gt.protoListenerMap=new WeakMap)}off(t,e){this._prepareListeners();let i,n,s,r,a,o,h=(t||"").split(" "),l=h.length;if(!t)for(n in this.eventListeners)this._off(n);for(i=0;i<l;i++)if(s=h[i],r=s.split("."),a=r[0],o=r[1],a)this.eventListeners[a]&&this._off(a,o,e);else for(n in this.eventListeners)this._off(n,o,e);return this}dispatchEvent(t){const e={target:this,type:t.type,evt:t};return this.fire(t.type,e),this}addEventListener(t,e){return this.on(t,function(t){e.call(this,t.evt)}),this}removeEventListener(t){return this.off(t),this}_delegate(t,e,i){const n=this;return this.on(t,function(t){const s=t,r=t.target.findAncestors(e,!0,n);for(let e=0;e<r.length;e++)(t=C.cloneObject(t)).currentTarget=r[e],i.call(r[e],t);t.cancelBubble&&(s.cancelBubble=!0)}),this}remove(){return this.isDragging()&&this.stopDrag(),D._dragElements.delete(this._id),D._dragElements.forEach((t,e)=>{this.isAncestorOf(t.node)&&D._dragElements.delete(e)}),this._remove(),this}_clearCaches(){this._clearSelfAndDescendantCache(nt),this._clearSelfAndDescendantCache(it),this._clearSelfAndDescendantCache(ot),this._clearSelfAndDescendantCache(lt),this._clearSelfAndDescendantCache(st)}_remove(){const t=this.getParent();t&&t.children&&(t.children.splice(this.index,1),t._setChildrenIndices(),this.parent=null),this._clearCaches()}destroy(){var t;return this._fire("destroy",{target:this}),t=this,I.forEach(({shape:e,stage:i},n)=>{e!==t&&i!==t||z(n)}),this.remove(),this.clearCache(),this}getAttr(t){const e="get"+C._capitalize(t);return C._isFunction(this[e])?this[e]():this.attrs[t]}getAncestors(){let t=this.getParent(),e=[];for(;t;)e.push(t),t=t.getParent();return e}getAttrs(){return this.attrs||{}}setAttrs(t){return this._batchTransformChanges(()=>{let e,i;if(!t)return this;for(e in t)"children"!==e&&(i="set"+C._capitalize(e),C._isFunction(this[i])?this[i](t[e]):this._setAttr(e,t[e]))}),this}isListening(){return this._getCache(st,this._isListening)}_isListening(t){if(!this.listening())return!1;const e=this.getParent();return!e||e===t||this===t||e._isListening(t)}isVisible(){return this._getCache(lt,this._isVisible)}_isVisible(t){if(!this.visible())return!1;const e=this.getParent();return!e||e===t||this===t||e._isVisible(t)}shouldDrawHit(t){return t?this._isVisible(t)&&this._isListening(t):this.isListening()&&this.isVisible()}show(){return this.visible(!0),this}hide(){return this.visible(!1),this}getZIndex(){return this.index||0}getAbsoluteZIndex(){let t,e,i,n,s=this.getDepth(),r=this,a=0;const o=this.getStage();return"Stage"!==r.nodeType&&o&&function o(h){for(t=[],e=h.length,i=0;i<e;i++)n=h[i],a++,n.nodeType!==at&&(t=t.concat(n.children)),n._id===r._id&&(i=e);t.length>0&&t[0].getDepth()<=s&&o(t)}(o.children),a}getDepth(){let t=0,e=this.parent;for(;e;)t++,e=e.parent;return t}_batchTransformChanges(t){this._batchingTransformChange?t():gt._updateBatch(()=>{this._batchingTransformChange=!0;try{t()}finally{this._batchingTransformChange=!1,this._needClearTransformCache&&(this._needClearTransformCache=!1,this._clearCache(ht),this._clearSelfAndDescendantCache(nt))}})}setPosition(t){return this._batchTransformChanges(()=>{this.x(t.x),this.y(t.y)}),this}getPosition(){return{x:this.x(),y:this.y()}}getRelativePointerPosition(){const t=this.getStage();if(!t)return null;const e=t.getPointerPosition();if(!e)return null;const i=this.getAbsoluteTransform().copy();return i.invert(),i.point(e)}getAbsolutePosition(t){const e=this.getAbsoluteTransform(t).getMatrix(),i=new a,n=this.offset();return i.m=e.slice(),i.translate(n.x,n.y),i.getTranslation()}setAbsolutePosition(t){const{x:e,y:i,...n}=this._clearTransform();this.attrs.x=e,this.attrs.y=i,this._clearCache(ht);const s=this._getAbsoluteTransform().copy(),r=s.isInvertible();s.invert(),s.translate(t.x,t.y);const{x:a,y:o}=s.getTranslation();return this._setTransform(n),r?this.setPosition({x:this.attrs.x+a,y:this.attrs.y+o}):C.warn("Cannot set the absolute position: the absolute transform is not invertible (an ancestor has a zero scale)."),this._clearCache(ht),this._clearSelfAndDescendantCache(nt),this}_setTransform(t){let e;for(e in t)this.attrs[e]=t[e]}_clearTransform(){const t={x:this.x(),y:this.y(),rotation:this.rotation(),scaleX:this.scaleX(),scaleY:this.scaleY(),offsetX:this.offsetX(),offsetY:this.offsetY(),skewX:this.skewX(),skewY:this.skewY()};return this.attrs.x=0,this.attrs.y=0,this.attrs.rotation=0,this.attrs.scaleX=1,this.attrs.scaleY=1,this.attrs.offsetX=0,this.attrs.offsetY=0,this.attrs.skewX=0,this.attrs.skewY=0,t}move(t){let e=t.x,i=t.y,n=this.x(),s=this.y();return void 0!==e&&(n+=e),void 0!==i&&(s+=i),this.setPosition({x:n,y:s}),this}rotate(t){return this.rotation(this.rotation()+t),this}moveToTop(){if(!this.parent)return C.warn("Node has no parent. moveToTop function is ignored."),!1;const t=this.index;return t<this.parent.children.length-1&&(this.parent.children.splice(t,1),this.parent.children.push(this),this.parent._setChildrenIndices(),!0)}moveUp(){if(!this.parent)return C.warn("Node has no parent. moveUp function is ignored."),!1;const t=this.index;return t<this.parent.children.length-1&&(this.parent.children.splice(t,1),this.parent.children.splice(t+1,0,this),this.parent._setChildrenIndices(),!0)}moveDown(){if(!this.parent)return C.warn("Node has no parent. moveDown function is ignored."),!1;const t=this.index;return t>0&&(this.parent.children.splice(t,1),this.parent.children.splice(t-1,0,this),this.parent._setChildrenIndices(),!0)}moveToBottom(){if(!this.parent)return C.warn("Node has no parent. moveToBottom function is ignored."),!1;const t=this.index;return t>0&&(this.parent.children.splice(t,1),this.parent.children.unshift(this),this.parent._setChildrenIndices(),!0)}setZIndex(t){if(!this.parent)return C.warn("Node has no parent. zIndex parameter is ignored."),this;(t<0||t>=this.parent.children.length)&&C.warn("Unexpected value "+t+" for zIndex property. zIndex is just index of a node in children of its parent. Expected value is from 0 to "+(this.parent.children.length-1)+".");const e=this.index;return this.parent.children.splice(e,1),this.parent.children.splice(t,0,this),this.parent._setChildrenIndices(),this}getAbsoluteOpacity(){return this._getCache(it,this._getAbsoluteOpacity)}_getAbsoluteOpacity(){let t=this.opacity();const e=this.getParent();return e&&!e._isUnderCache&&(t*=e.getAbsoluteOpacity()),t}moveTo(t){return this.getParent()!==t&&(this._remove(),t.add(this)),this}toObject(){var t;const e=this.getAttrs();let i,n,s;const r={attrs:{},className:this.getClassName()};for(i in e)n=e[i],n instanceof p&&(n=Array.from(n)),s=C.isObject(n)&&!C._isPlainObject(n)&&!C._isArray(n),s||(null===(t=this["get"+C._capitalize(i)])||void 0===t?void 0:t._def)===n&&"brightness"!==i&&"threshold"!==i||(r.attrs[i]="filters"===i&&C._isArray(n)?n.filter(t=>"string"==typeof t):C.isObject(n)?C._prepareToStringify(n):n);return r}toJSON(){return JSON.stringify(this.toObject())}getParent(){return this.parent}findAncestors(t,e,i){const n=[];e&&this._isMatch(t)&&n.push(this);let s=this.parent;for(;s;){if(s===i)return n;s._isMatch(t)&&n.push(s),s=s.parent}return n}isAncestorOf(t){return!1}findAncestor(t,e,i){return this.findAncestors(t,e,i)[0]}_isMatch(t){if(!t)return!1;if("function"==typeof t)return t(this);let e,i,n=t.replace(/ /g,"").split(","),s=n.length;for(e=0;e<s;e++)if(i=n[e],C.isValidSelector(i)||(C.warn('Selector "'+i+'" is invalid. Allowed selectors examples are "#foo", ".bar" or "Group".'),C.warn('If you have a custom shape with such className, please change it to start with upper letter like "Triangle".'),C.warn("Konva is awesome, right?")),"#"===i.charAt(0)){if(this.id()===i.slice(1))return!0}else if("."===i.charAt(0)){if(this.hasName(i.slice(1)))return!0}else if(this.className===i||this.nodeType===i)return!0;return!1}getLayer(){const t=this.getParent();return t?t.getLayer():null}getStage(){return this._getCache(ot,this._getStage)}_getStage(){const t=this.getParent();return t?t.getStage():null}fire(t,e,i){return(e=e||{}).target=e.target||this,i?this._fireAndBubble(t,e):this._fire(t,e),this}getAbsoluteTransform(t){return t||this._hasCachedAncestor()?this._getAbsoluteTransform(t):this._getCache(nt,this._getCachedAbsoluteTransform)}_hasCachedAncestor(){let t=this.parent;for(;t;){if(t.isCached())return!0;t=t.parent}return!1}_getAbsoluteTransform(t){const e=new a;return this===t?e:(this.parent&&this.parent!==t&&this.parent.getAbsoluteTransform(t).copyInto(e),this._multiplyOwnTransform(e))}_getCachedAbsoluteTransform(){const t=this._cache[nt]||new a;return this.parent?this.parent.getAbsoluteTransform().copyInto(t):t.reset(),this._multiplyOwnTransform(t),t.dirty=!1,t}_multiplyOwnTransform(t){const e=this.transformsEnabled();if("all"===e)t.multiply(this.getTransform());else if("position"===e){const e=this.attrs.x||0,i=this.attrs.y||0,n=this.attrs.offsetX||0,s=this.attrs.offsetY||0;t.translate(e-n,i-s)}return t}getAbsoluteScale(t){let e=this;for(;e;)e._isUnderCache&&(t=e),e=e.getParent();const i=this.getAbsoluteTransform(t).decompose();return{x:i.scaleX,y:i.scaleY}}getAbsoluteRotation(){return this.getAbsoluteTransform().decompose().rotation}getTransform(){return this._getCache(ht,this._getTransform)}_getTransform(){var t,e;const n=this._cache[ht]||new a;n.reset();const s=this.x(),r=this.y(),o=i.getAngle(this.rotation()),h=null!==(t=this.attrs.scaleX)&&void 0!==t?t:1,l=null!==(e=this.attrs.scaleY)&&void 0!==e?e:1,d=this.attrs.skewX||0,c=this.attrs.skewY||0,g=this.attrs.offsetX||0,u=this.attrs.offsetY||0;return 0===s&&0===r||n.translate(s,r),0!==o&&n.rotate(o),0===d&&0===c||n.skew(d,c),1===h&&1===l||n.scale(h,l),0===g&&0===u||n.translate(-1*g,-1*u),n.dirty=!1,n}clone(t){let e,i,n,s,r,a=C.cloneObject(this.attrs);for(e in t)a[e]=t[e];const o=new this.constructor(a);for(e in this.eventListeners)for(i=this.eventListeners[e],n=i.length,s=0;s<n;s++)r=i[s],r.name.indexOf("konva")<0&&(o.eventListeners[e]||(o.eventListeners[e]=[]),o.eventListeners[e].push(r));return o}_toKonvaCanvas(t){const e=void 0===(t=t||{}).x||void 0===t.y||!t.width||!t.height?this.getClientRect():{x:0,y:0,width:0,height:0};isFinite(e.x+e.y+e.width+e.height)||C.error(`Cannot find the bounds of the node to export, its client rect is ${e.x}, ${e.y}, ${e.width}x${e.height}. Check its position, size and points.`);const i=this.getStage(),n=void 0!==t.x?t.x:Math.floor(e.x),s=void 0!==t.y?t.y:Math.floor(e.y),r=t.pixelRatio||1,a=new G({width:t.width||Math.max(0,Math.ceil(e.x+e.width-n))||(i?i.width():0),height:t.height||Math.max(0,Math.ceil(e.y+e.height-s))||(i?i.height():0),pixelRatio:r}),o=a.getContext();return!1===t.imageSmoothingEnabled&&(o._context.imageSmoothingEnabled=!1),o.save(),(n||s)&&o.translate(-1*n,-1*s),this.drawScene(a),o.restore(),a._releaseIsolationCanvas(),a}toCanvas(t){return this._toKonvaCanvas(t)._canvas}toDataURL(t){var e;const i=(t=t||{}).mimeType||null,n=null!==(e=t.quality)&&void 0!==e?e:null,s=this._toKonvaCanvas(t).toDataURL(i,n);return t.callback&&t.callback(s),s}toImage(t){return new Promise((e,i)=>{try{const{callback:n,...s}=t||{};C._urlToImage(this.toDataURL(s),function(t){e(t),null==n||n(t)},i)}catch(t){i(t)}})}toBlob(t){return new Promise((e,i)=>{try{this.toCanvas(t).toBlob(n=>{var s;n?(e(n),null===(s=null==t?void 0:t.callback)||void 0===s||s.call(t,n)):i(new Error("Konva: toBlob() failed, the canvas was not encoded"))},null==t?void 0:t.mimeType,null==t?void 0:t.quality)}catch(t){i(t)}})}setSize(t){return this.width(t.width),this.height(t.height),this}getSize(){return{width:this.width(),height:this.height()}}getClassName(){return this.className||this.nodeType}getType(){return this.nodeType}getDragDistance(){return void 0!==this.attrs.dragDistance?this.attrs.dragDistance:this.parent?this.parent.getDragDistance():i.dragDistance}_off(t,e,i){let n,s,r,a=this.eventListeners[t];for(n=0;n<a.length;n++)if(s=a[n].name,r=a[n].handler,!("konva"===s&&"konva"!==e||e&&s!==e||i&&i!==r)){if(a.splice(n,1),0===a.length){delete this.eventListeners[t];break}n--}}_fireChangeEvent(t,e,i){this._fire(t+"Change",{oldVal:e,newVal:i})}addName(t){if(!this.hasName(t)){const e=this.name(),i=e?e+" "+t:t;this.name(i)}return this}hasName(t){if(!t)return!1;const e=this.name();if(!e)return!1;return-1!==(e||"").split(/\s/g).indexOf(t)}removeName(t){const e=(this.name()||"").split(/\s/g),i=e.indexOf(t);return-1!==i&&(e.splice(i,1),this.name(e.join(" "))),this}setAttr(t,e){const i=this["set"+C._capitalize(t)];return C._isFunction(i)?i.call(this,e):this._setAttr(t,e),this}_addSubtreeObserver(t){var e;(null!==(e=this._subtreeObservers)&&void 0!==e?e:this._subtreeObservers=new Set).add(t),gt._subtreeObserverCount++}_removeSubtreeObserver(t){var e;(null===(e=this._subtreeObservers)||void 0===e?void 0:e.delete(t))&>._subtreeObserverCount--}_notifySubtreeChange(){if(gt._subtreeObserverCount)for(let t=this;t;t=t.parent){const e=t._subtreeObservers;if(e)for(const i of e)i._onSubtreeChange(t)}}_requestDraw(){var t;if(null===(t=this.parent)||void 0===t||t._notifySubtreeChange(),i.autoDrawEnabled){const t=this.getLayer()||this.getStage();null==t||t.batchDraw()}}_setAttr(t,e){const i=this.attrs[t];(i!==e||C.isObject(e))&&(null==e?delete this.attrs[t]:this.attrs[t]=e,void 0!==this._attrsVersion&&this._attrsVersion++,this._shouldFireChangeEvents&&this._fireChangeEvent(t,i,e),this._requestDraw())}_fireAndBubble(t,e,i){e&&this.nodeType===at&&(e.target=this);const n=-1!==rt.indexOf(t);if(!(n&&(i&&(this===i||this.isAncestorOf&&this.isAncestorOf(i))||"Stage"===this.nodeType&&!i))){this._fire(t,e);const s=n&&i&&i.isAncestorOf&&i.isAncestorOf(this)&&!i.isAncestorOf(this.parent);(e&&!e.cancelBubble||!e)&&this.parent&&this.parent.isListening()&&!s&&(i&&i.parent?this._fireAndBubble.call(this.parent,t,e,i):this._fireAndBubble.call(this.parent,t,e))}}_getProtoListeners(t){var e,i;const n=Object.getPrototypeOf(this);let s=gt.protoListenerMap.get(n);s||(s={},gt.protoListenerMap.set(n,s));let r=s[t];if(void 0===r){r=[];const n=new Set;let a=Object.getPrototypeOf(this);for(;a;){const s=null!==(i=null===(e=a.eventListeners)||void 0===e?void 0:e[t])&&void 0!==i?i:[];for(let t=0;t<s.length;t++){const e=s[t];n.has(e)||(n.add(e),r.push(e))}a=Object.getPrototypeOf(a)}s[t]=r}return r}_fire(t,e){(e=e||{}).currentTarget=this,e.type=t;const i=this._getProtoListeners(t);if(i)for(let t=0;t<i.length;t++)i[t].handler.call(this,e);const n=this.eventListeners[t];if(n){const i=n.slice(),s=i.length;for(let t=0;t<i.length;t++)i[t].handler.call(this,e);const r=this.eventListeners[t];if(r)for(let t=s;t<r.length;t++)r[t].handler.call(this,e)}}draw(){return this.drawScene(),this.drawHit(),this}_createDragElement(t){var e;const i=t?t.pointerId:void 0,n=this.getStage(),s=this.getAbsolutePosition();if(!n)return;const r=n._getPointerById(i)||n._changedPointerPositions[0]||s,a=(null===(e=null==t?void 0:t.evt)||void 0===e?void 0:e.type)?C._getEventType(t.evt.type):n._pointerEventType,o="pointer"!==a;D._dragElements.set(this._id,{node:this,startPointerPos:r,offset:{x:r.x-s.x,y:r.y-s.y},dragStatus:"ready",pointerId:o?null!=i?i:"id"in r?r.id:void 0:void 0,pointerEventType:o?a:void 0,startEvent:t})}startDrag(t,e=!0){var i;D._dragElements.has(this._id)||this._createDragElement(t);const n=D._dragElements.get(this._id);n&&(n.dragStatus="dragging",null===(i=this.getStage())||void 0===i||i._cancelClick(n.pointerId,n.pointerEventType),this.fire("dragstart",{type:"dragstart",target:this,evt:n.startEvent&&n.startEvent.evt||t&&t.evt},e))}_setDragPosition(t,e){const i=this.getStage()._getPointerById(e.pointerId);if(!i)return;let n={x:i.x-e.offset.x,y:i.y-e.offset.y};const s=this.dragBoundFunc();if(void 0!==s){const e=s.call(this,n,t);if(e){if(!C._isNumber(e.x)||!C._isNumber(e.y))return void C.warn(`dragBoundFunc returned a position with a non-finite x or y (${e.x}, ${e.y}). The node was not moved.`);n=e}else C.warn("dragBoundFunc did not return any value. That is unexpected behavior. You must return new absolute position from dragBoundFunc.")}const r=e.lastPos;r&&r.x===n.x&&r.y===n.y||(this.setAbsolutePosition(n),this._requestDraw()),e.lastPos=n}stopDrag(t){const e=D._dragElements.get(this._id);e&&(e.dragStatus="stopped",D._endDragBefore(t,void 0,e),D._endDragAfter(t,e))}setDraggable(t){this._setAttr("draggable",t),this._dragChange()}isDragging(){const t=D._dragElements.get(this._id);return!!t&&"dragging"===t.dragStatus}_listenDrag(){this._dragCleanup(),this.on("mousedown.konva touchstart.konva",function(t){if(!(!(void 0!==t.evt.button)||i.dragButtons.indexOf(t.evt.button)>=0))return;if(D._dragElements.has(this._id))return;let e=!1;D._dragElements.forEach(t=>{this.isAncestorOf(t.node)&&(e=!0)}),e||this._createDragElement(t)})}_dragChange(){if(this.attrs.draggable)this._listenDrag();else{this._dragCleanup();if(!this.getStage())return;const t=D._dragElements.get(this._id),e=t&&"dragging"===t.dragStatus,i=t&&"ready"===t.dragStatus;e?this.stopDrag():i&&D._dragElements.delete(this._id)}}_dragCleanup(){this.off("mousedown.konva"),this.off("touchstart.konva")}isClientRectOnScreen(t={x:0,y:0}){const e=this.getStage();if(!e)return!1;const i={x:-t.x,y:-t.y,width:e.width()+2*t.x,height:e.height()+2*t.y};return C.haveIntersection(i,this.getClientRect())}static create(t,e){return C._isString(t)&&(t=JSON.parse(t)),this._createNode(t,e)}static _createNode(t,e){let n,s,r,a=gt.prototype.getClassName.call(t),o=t.children;if(e&&(t.attrs.container=e),!i[a]){const t=o?"Group":"Shape";C.warn('Can not find a node with class name "'+a+`". Fallback to "${t}".`),a=t}if(n=new(0,i[a])(t.attrs),o)for(s=o.length,r=0;r<s;r++)n.add(gt._createNode(o[r]));return n}}gt._subtreeObserverCount=0,gt._updateBatchDepth=0,gt._pendingUpdates=new Set,gt.protoListenerMap=new WeakMap,gt.prototype.nodeType="Node",gt.prototype._attrsAffectingSize=[],gt.prototype.on(dt,function(){this._batchingTransformChange?this._needClearTransformCache=!0:(this._clearCache(ht),this._clearSelfAndDescendantCache(nt))}),gt.prototype.on("visibleChange.konva",function(){this._clearSelfAndDescendantCache(lt)}),gt.prototype.on("listeningChange.konva",function(){this._clearSelfAndDescendantCache(st);for(let t=this.getParent();t;t=t.getParent()){const e=t._getCanvasCache();(null==e?void 0:e.hit)&&(C.releaseCanvas(e.hit._canvas),e.hit=null)}}),gt.prototype.on("opacityChange.konva",function(){this._clearSelfAndDescendantCache(it)});const ut=J.addGetterSetter;ut(gt,"zIndex"),ut(gt,"absolutePosition"),ut(gt,"position"),ut(gt,"x",0,U()),ut(gt,"y",0,U()),ut(gt,"globalCompositeOperation","source-over",q()),ut(gt,"opacity",1,U()),ut(gt,"name","",q()),ut(gt,"id","",q()),ut(gt,"rotation",0,U()),J.addComponentsGetterSetter(gt,"scale",["x","y"]),ut(gt,"scaleX",1,U()),ut(gt,"scaleY",1,U()),J.addComponentsGetterSetter(gt,"skew",["x","y"]),ut(gt,"skewX",0,U()),ut(gt,"skewY",0,U()),J.addComponentsGetterSetter(gt,"offset",["x","y"]),ut(gt,"offsetX",0,U()),ut(gt,"offsetY",0,U()),ut(gt,"dragDistance",void 0,U()),ut(gt,"width",0,U()),ut(gt,"height",0,U()),ut(gt,"listening",!0,V()),ut(gt,"preventDefault",!0,V()),ut(gt,"filters",void 0,function(t){return this._filterUpToDate=!1,t}),ut(gt,"visible",!0,V()),ut(gt,"transformsEnabled","all",q()),ut(gt,"size"),ut(gt,"dragBoundFunc"),ut(gt,"draggable",!1,V()),J.backCompat(gt,{rotateDeg:"rotate",setRotationDeg:"setRotation",getRotationDeg:"getRotation"});class ft extends gt{constructor(){super(...arguments),this.children=[]}getChildren(t){const e=this.children||[];return t?e.filter(t):e.slice()}hasChildren(){return this.children.length>0}removeChildren(){return this._clearChildren("remove")}destroyChildren(){return this._clearChildren("destroy")}_clearChildren(t){return gt._updateBatch(()=>(this.children.forEach(e=>{e.parent=null,e.index=0,e[t]()}),this.children=[],this._notifySubtreeChange(),this._requestDraw(),this))}add(...t){if(0===t.length)return this;if(t.length>1){for(let e=0;e<t.length;e++)this.add(t[e]);return this}const e=t[0];return e.getParent()?(e.moveTo(this),this):(this._validateAdd(e),e.index=this.children.length,e.parent=this,e._clearCaches(),this.children.push(e),this._fire("add",{child:e}),this._notifySubtreeChange(),this._requestDraw(),this)}destroy(){return this.hasChildren()&&this.destroyChildren(),super.destroy(),this}find(t){return this._generalFind(t,!1)}findOne(t){const e=this._generalFind(t,!0);return e.length>0?e[0]:void 0}_generalFind(t,e){const i=[];return this._descendants(n=>{const s=n._isMatch(t);return s&&i.push(n),!(!s||!e)}),i}_descendants(t){let e=!1;for(const i of this.children){if(e=t(i),e)return!0;if(i.hasChildren()&&(e=i._descendants(t),e))return!0}return!1}toObject(){const t=gt.prototype.toObject.call(this);return t.children=[],this.children.forEach(e=>{t.children.push(e.toObject())}),t}isAncestorOf(t){let e=t.getParent();for(;e;){if(e._id===this._id)return!0;e=e.getParent()}return!1}clone(t){const e=gt.prototype.clone.call(this,t);return this.children.forEach(function(t){e.add(t.clone())}),e}getAllIntersections(t){const e=[];return this.find("Shape").forEach(i=>{i.isVisible()&&i.intersects(t)&&e.push(i)}),e}_clearSelfAndDescendantCache(t){var e;const i=void 0===t||"absoluteTransform"===t;i&>._updateBatchDepth++;try{if(super._clearSelfAndDescendantCache(t),"absoluteTransform"===t&&this.isCached())return;null===(e=this.children)||void 0===e||e.forEach(function(e){e._clearSelfAndDescendantCache(t)})}finally{i&&0===--gt._updateBatchDepth&>._flushUpdateBatch()}}_setChildrenIndices(){var t;null===(t=this.children)||void 0===t||t.forEach(function(t,e){t.index=e}),this._notifySubtreeChange(),this._requestDraw()}drawScene(t,e){const i=this.getLayer(),n=t||i&&i.getCanvas(),s=n&&n.getContext(),r=this._getCanvasCache(),a=r&&r.scene,o=e===this;if(!(e?this._isVisible(e):this.isVisible())&&!o)return this;if(a){s.save();const t=this.getAbsoluteTransform(e).getMatrix();s.transform(t[0],t[1],t[2],t[3],t[4],t[5]),this._drawCachedSceneCanvas(s),s.restore()}else this._drawChildren("drawScene",n,e);return this}drawHit(t,e){if(!this.shouldDrawHit(e))return this;const i=this.getLayer(),n=t||i&&i.hitCanvas,s=n&&n.getContext(),r=this._getCachedHitCanvas(e);if(r){s.save();const t=this.getAbsoluteTransform(e).getMatrix();s.transform(t[0],t[1],t[2],t[3],t[4],t[5]),this._drawCachedHitCanvas(s,r),s.restore()}else this._drawChildren("drawHit",n,e);return this}_drawChildren(t,e,i){const n=e&&e.getContext(),s=this.clipWidth(),r=this.clipHeight(),a=this.clipFunc(),o="number"==typeof s&&"number"==typeof r||a,h=i===this;if(o){n.save();const t=this.getAbsoluteTransform(i);let e,o=t.getMatrix();if(n.transform(o[0],o[1],o[2],o[3],o[4],o[5]),n.beginPath(),a)e=a.call(this,n,this);else{const t=this.clipX(),e=this.clipY();n.rect(t||0,e||0,s,r)}n.clip.apply(n,e),o=t.copy().invert().getMatrix(),n.transform(o[0],o[1],o[2],o[3],o[4],o[5])}const l=!h&&"source-over"!==this.globalCompositeOperation()&&"drawScene"===t;l&&(n.save(),n._applyGlobalCompositeOperation(this));try{this._drawChildNodes(t,e,i)}finally{l&&n.restore(),o&&n.restore()}}_drawChildNodes(t,e,i){var n;null===(n=this.children)||void 0===n||n.forEach(function(n){n[t](e,i)})}getClientRect(t={}){var e;const i=this._getCachedSceneRect(t);if(i)return i;const n=t.skipTransform,s=t.relativeTo,[r,a,o,h]=this.getAbsoluteTransform().getMatrix(),l=!n&&(t._forDrawing||r*h-a*o===0);let d,c,g,u,f={x:1/0,y:1/0,width:0,height:0};const p=this;return null===(e=this.children)||void 0===e||e.forEach(function(e){if(!e.visible())return;const i=e.getClientRect({relativeTo:l?s:p,_forDrawing:t._forDrawing,skipShadow:t.skipShadow,skipStroke:t.skipStroke});0===i.width&&0===i.height||!isFinite(i.x+i.y+i.width+i.height)||(void 0===d?(d=i.x,c=i.y,g=i.x+i.width,u=i.y+i.height):(d=Math.min(d,i.x),c=Math.min(c,i.y),g=Math.max(g,i.x+i.width),u=Math.max(u,i.y+i.height)))}),f=void 0!==d?{x:d,y:c,width:g-d,height:u-c}:{x:0,y:0,width:0,height:0},n||l?f:this._transformedRect(f,s)}}J.addComponentsGetterSetter(ft,"clip",["x","y","width","height"]),J.addGetterSetter(ft,"clipX",void 0,U()),J.addGetterSetter(ft,"clipY",void 0,U()),J.addGetterSetter(ft,"clipWidth",void 0,U()),J.addGetterSetter(ft,"clipHeight",void 0,U()),J.addGetterSetter(ft,"clipFunc");const pt="mouseleave",_t="mouseover",mt="mouseenter",vt="mousemove",yt="mousedown",St="mouseup",xt="pointermove",bt="pointerdown",wt="pointerup",Ct="pointercancel",kt="pointerout",Pt="pointerleave",Mt="pointerover",Tt="pointerenter",At="contextmenu",Et="touchstart",Rt="touchend",Gt="touchmove",Lt="touchcancel",Dt="wheel",It=[[mt,"_pointerenter"],[yt,"_pointerdown"],[vt,"_pointermove"],[St,"_pointerup"],[pt,"_pointerleave"],[Et,"_pointerdown"],[Gt,"_pointermove"],[Rt,"_pointerup"],[Lt,"_pointercancel"],[_t,"_pointerover"],[Dt,"_wheel"],[At,"_contextmenu"],[bt,"_pointerdown"],[xt,"_pointermove"],[wt,"_pointerup"],[Ct,"_pointercancel"],[Pt,"_pointerleave"],["lostpointercapture","_lostpointercapture"]],Ft={mouse:{[kt]:"mouseout",[Pt]:pt,[Mt]:_t,[Tt]:mt,[xt]:vt,[bt]:yt,[wt]:St,[Ct]:"mousecancel",pointerclick:"click",pointerdblclick:"dblclick"},touch:{[kt]:"touchout",[Pt]:"touchleave",[Mt]:"touchover",[Tt]:"touchenter",[xt]:Gt,[bt]:Et,[wt]:Rt,[Ct]:Lt,pointerclick:"tap",pointerdblclick:"dbltap"},pointer:{[kt]:kt,[Pt]:Pt,[Mt]:Mt,[Tt]:Tt,[xt]:xt,[bt]:bt,[wt]:wt,[Ct]:Ct,pointerclick:"pointerclick",pointerdblclick:"pointerdblclick"}},Ot=t=>{const e=C._getEventType(t);return"pointer"===e?i.pointerEventsEnabled&&Ft.pointer:"touch"===e?Ft.touch:"mouse"===e?Ft.mouse:void 0};function Bt(t={}){return(t.clipFunc||t.clipWidth||t.clipHeight)&&C.warn("Stage does not support clipping. Please use clip for Layers or Groups."),t}const Nt=[],Wt=new WeakSet,zt=t=>{t&&!Wt.has(t)&&(Wt.add(t),D._listenToWindow(t),t.document.addEventListener("visibilitychange",()=>{Nt.forEach(t=>{t.batchDraw()})}))};class Ht extends ft{constructor(t){super(Bt(t)),this._pointerPositions=[],this._changedPointerPositions=[],this._pointerStates=new Map,this._lastClicks={},this._buildDOM(),this._bindContentEvents(),Nt.push(this),this.on("widthChange.konva heightChange.konva",this._resizeDOM),this.on("visibleChange.konva",this._checkVisibility),this.on("clipWidthChange.konva clipHeightChange.konva clipFuncChange.konva",()=>{Bt(this.attrs)}),this._checkVisibility()}_validateAdd(t){const e="Layer"===t.getType(),i="FastLayer"===t.getType();e||i||C.throw("You may only add layers to the stage.")}_checkVisibility(){if(!this.content)return;const t=this.visible()?"":"none";this.content.style.display=t}_getOwnerWindow(){var t;const e=this.content||this.container();return(null===(t=null==e?void 0:e.ownerDocument)||void 0===t?void 0:t.defaultView)||(i.isBrowser?window:null)}setContainer(t){if("string"==typeof t){let e;if("."===t.charAt(0)){const e=t.slice(1);t=document.getElementsByClassName(e)[0]}else e="#"!==t.charAt(0)?t:t.slice(1),t=document.getElementById(e);if(!t)throw"Can not find container in document with id "+e}return this._setAttr("container",t),this.content&&(this.content.parentElement&&this.content.parentElement.removeChild(this.content),t.appendChild(this.content),zt(this._getOwnerWindow())),this}shouldDrawHit(){return!0}clear(){const t=this.children,e=t.length;for(let i=0;i<e;i++)t[i].clear();return this}clone(t){return t||(t={}),t.container="undefined"!=typeof document&&document.createElement("div"),ft.prototype.clone.call(this,t)}destroy(){var t;super.destroy(),this._pointerStates.clear(),this._lastClicks={};const e=this.content;null===(t=null==e?void 0:e.parentNode)||void 0===t||t.removeChild(e);const i=Nt.indexOf(this);return i>-1&&Nt.splice(i,1),C.releaseCanvas(this.bufferHitCanvas._canvas),this}getPointerPosition(){const t=this._pointerPositions[0]||this._changedPointerPositions[0];return t?{x:t.x,y:t.y}:(C.warn("Pointer position is missing and not registered by the stage. Looks like it is outside of the stage container. You can set it manually from event: stage.setPointersPositions(event);"),null)}_getPointerById(t){return this._pointerPositions.find(e=>e.id===t)}getPointersPositions(){return this._pointerPositions}getStage(){return this}getContent(){return this.content}_toKonvaCanvas(t){(t={...t}).x=t.x||0,t.y=t.y||0,t.width=t.width||this.width(),t.height=t.height||this.height();const e=new G({width:t.width,height:t.height,pixelRatio:t.pixelRatio||1}),i=e.getContext()._context,n=this.children;return(t.x||t.y)&&i.translate(-1*t.x,-1*t.y),n.forEach(function(e){if(!e.isVisible())return;const n=e._toKonvaCanvas(t);i.drawImage(n._canvas,t.x,t.y,n.getWidth()/n.getPixelRatio(),n.getHeight()/n.getPixelRatio()),C.releaseCanvas(n._canvas)}),e}getIntersection(t){if(!t)return null;const e=this.children;for(let i=e.length-1;i>=0;i--){const n=e[i].getIntersection(t);if(n)return n}return null}_resizeDOM(){const t=this.width(),e=this.height();this.content&&(this.content.style.width=t+"px",this.content.style.height=e+"px"),this.children.forEach(i=>{i._setSize({width:t,height:e}),i.draw()})}add(t,...e){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.add(arguments[t]);return this}super.add(t);const n=this.children.length;return n>5&&C.warn("The stage has "+n+" layers. Recommended maximum number of layers is 3-5. Adding more layers into the stage may drop the performance. Rethink your tree structure, you can use Konva.Group."),t._setSize({width:this.width(),height:this.height()}),t.draw(),i.isBrowser&&this.content.appendChild(t.canvas._canvas),this}getParent(){return null}getLayer(){return null}hasPointerCapture(t){return N(t,this)}setPointerCapture(t){W(t,this)}releaseCapture(t){z(t,this)}getLayers(){return this.getChildren()}_bindContentEvents(){i.isBrowser&&It.forEach(([t,e])=>{this.content.addEventListener(t,t=>{this._batchEvents(()=>this[e](t))},{passive:!1})})}_batchEvents(t){C._batchEvents(this.eventBatchFunc(),t)}_pointerenter(t){this.setPointersPositions(t);const e=Ot(t.type);e&&this._fire(e.pointerenter,{evt:t,target:this,currentTarget:this})}_pointerover(t){this.setPointersPositions(t);const e=Ot(t.type);e&&this._fire(e.pointerover,{evt:t,target:this,currentTarget:this})}_pointerEventsEnabled(){if(i.hitOnDragEnabled)return!0;for(const{node:t,dragStatus:e}of D._dragElements.values())if("dragging"===e&&t.getStage()===this)return!1;return!this.getLayers().some(t=>{var e;return null===(e=i.Transformer)||void 0===e?void 0:e._isLayerTransforming(t)})}_cancelClick(t,e){const i=e?[e]:["mouse","touch","pointer"];for(const e of i){const i=this._pointerStates.get(`${e}:${t}`);i&&(i.clickStartShape=void 0,i.relatedPointer&&(i.relatedPointer.clickStartShape=void 0))}}_pointerleave(t){var e,i;const n=Ot(t.type),s=C._getEventType(t.type);if(!n)return;this.setPointersPositions(t);const r=null===(e=this._changedPointerPositions[0])||void 0===e?void 0:e.id,a=`${s}:${r}`,o=this._pointerStates.get(a),h=(null===(i=null==o?void 0:o.targetShape)||void 0===i?void 0:i.getStage())===this?o.targetShape:void 0,l=this._pointerEventsEnabled()||"touch"===t.pointerType&&!(null==o?void 0:o.downPosition);l&&(void 0!==(null==o?void 0:o.clickStartShape)?o.targetShape=void 0:this._pointerStates.delete(a)),h&&l?(h._fireAndBubble(n.pointerout,{evt:t,pointerId:r}),h._fireAndBubble(n.pointerleave,{evt:t,pointerId:r}),this._fire(n.pointerleave,{evt:t,target:this,currentTarget:this})):l&&(this._fire(n.pointerleave,{evt:t,target:this,currentTarget:this}),this._fire(n.pointerout,{evt:t,target:this,currentTarget:this})),this.pointerPos=null,this._pointerPositions=[],this._changedPointerPositions=[],this._pointerEventType=void 0}_pointerdown(t){const e=Ot(t.type),n=C._getEventType(t.type);if(!e)return;this.setPointersPositions(t);let s=!1;this._changedPointerPositions.forEach(r=>{var a;const o=this.getIntersection(r),h=`${n}:${r.id}`,l={targetShape:null===(a=this._pointerStates.get(h))||void 0===a?void 0:a.targetShape,clickStartShape:o&&o.isListening()?o:null,lastClick:this._lastClicks[n],downPosition:r,pointerType:t.pointerType};if(this._pointerStates.delete(h),"pointer"!==n)for(const[t,e]of[...this._pointerStates].reverse()){if(!t.startsWith("pointer:")||!e.downPosition||"touch"===n&&e.relatedPointer)continue;if("mouse"===n?"touch"!==e.pointerType:"touch"===e.pointerType&&e.downPosition.x===r.x&&e.downPosition.y===r.y){l.relatedPointer=e,e.relatedPointer=l,void 0===e.clickStartShape&&(l.clickStartShape=void 0);break}}this._pointerStates.set(h,l);for(const t of D._dragElements.values())"dragging"===t.dragStatus&&(void 0===t.pointerId||t.pointerEventType===n&&t.pointerId===r.id||"mouse"===t.pointerEventType&&"pointer"===n&&"touch"!==l.pointerType)&&t.node.getStage()===this&&(void 0===t.pointerId&&"pointer"!==n&&(t.pointerId=r.id,t.pointerEventType=n),this._cancelClick(r.id,n));if(!o||!o.isListening())return;i.capturePointerEventsEnabled&&o.setPointerCapture(r.id),o._fireAndBubble(e.pointerdown,{evt:t,pointerId:r.id}),s=!0;const d=t.type.indexOf("touch")>=0;o.preventDefault()&&t.cancelable&&d&&t.preventDefault()}),s||this._fire(e.pointerdown,{evt:t,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id})}_pointermove(t){const e=Ot(t.type),i=C._getEventType(t.type);if(!e)return;const n=t.type.indexOf("touch")>=0||"touch"===t.pointerType;if(t.cancelable&&n)for(const{node:e,dragStatus:i}of D._dragElements.values())if("dragging"===i&&e.getStage()===this&&e.preventDefault()){t.preventDefault();break}this.setPointersPositions(t);if(!this._pointerEventsEnabled())return;const s={};let r=!1;this._changedPointerPositions.forEach(n=>{var a;const o=`${i}:${n.id}`;let h=this._pointerStates.get(o);h||(h={},this._pointerStates.set(o,h));const l=O(n.id)||this.getIntersection(n),d=h.targetShape===l||(null===(a=h.targetShape)||void 0===a?void 0:a.getStage())===this?h.targetShape:void 0,c=n.id,g={evt:t,pointerId:c},u=d!==l;h.targetShape=l&&l.isListening()?l:void 0,u&&d&&(d._fireAndBubble(e.pointerout,{...g},l),d._fireAndBubble(e.pointerleave,{...g},l)),l&&l.isListening()?(r=!0,u&&(l._fireAndBubble(e.pointerover,{...g},d),l._fireAndBubble(e.pointerenter,{...g},d)),s[l._id]||(s[l._id]=!0,l._fireAndBubble(e.pointermove,{...g}))):d&&this._fire(e.pointerover,{evt:t,target:this,currentTarget:this,pointerId:c})}),r||this._fire(e.pointermove,{evt:t,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id})}_pointerup(t){const e=Ot(t.type),n=C._getEventType(t.type);if(!e)return;this.setPointersPositions(t);const s={};let r=!1;this._changedPointerPositions.forEach(a=>{var o;const h=`${n}:${a.id}`,l=this._pointerStates.get(h),d=void 0!==(null==l?void 0:l.clickStartShape),c=null==l?void 0:l.clickStartShape;(null==l?void 0:l.targetShape)&&"touch"!==n?this._pointerStates.set(h,{targetShape:l.targetShape}):this._pointerStates.delete(h);const g=O(a.id)||this.getIntersection(a),u=g&&s[g._id];g&&(g.releaseCapture(a.id),s[g._id]=!0);const f=a.id,p={evt:t,pointerId:f},_=g&&g.isListening()?g:null,m=this._lastClicks[n],v=d&&(!_||c===_),y=v&&m&&(null==l?void 0:l.lastClick)===m&&m.shape===_&&Date.now()-m.time<i.dblClickWindow;v&&(this._lastClicks[n]=y?void 0:{shape:_,time:Date.now()}),g&&g.isListening()?(r=!0,u||g._fireAndBubble(e.pointerup,{...p}),d&&c===g&&(g._fireAndBubble(e.pointerclick,{...p}),y&&g._fireAndBubble(e.pointerdblclick,{...p}))):(r||(this._fire(e.pointerup,{evt:t,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),r=!0),d&&this._fire(e.pointerclick,{evt:t,target:this,currentTarget:this,pointerId:f}),y&&this._fire(e.pointerdblclick,{evt:t,target:this,currentTarget:this,pointerId:f})),"touch"===n&&(null===(o=null==l?void 0:l.targetShape)||void 0===o?void 0:o.getStage())===this&&(l.targetShape._fireAndBubble(e.pointerout,{...p}),l.targetShape._fireAndBubble(e.pointerleave,{...p}))}),r||this._fire(e.pointerup,{evt:t,target:this,currentTarget:this,pointerId:this._changedPointerPositions[0].id}),t.cancelable&&"touch"!==n&&"pointer"!==n&&t.preventDefault()}_contextmenu(t){this.setPointersPositions(t);const e=this.getIntersection(this.getPointerPosition());e&&e.isListening()?e._fireAndBubble(At,{evt:t}):this._fire(At,{evt:t,target:this,currentTarget:this})}_wheel(t){this.setPointersPositions(t);const e=this.getIntersection(this.getPointerPosition());e&&e.isListening()?e._fireAndBubble(Dt,{evt:t}):this._fire(Dt,{evt:t,target:this,currentTarget:this})}_pointercancel(t){this.setPointersPositions(t);const e=Ot(t.type);this._changedPointerPositions.forEach(i=>{var n;const s=C._getEventType(t.type),r=`${s}:${i.id}`;this._cancelClick(i.id,s);const a=null===(n=this._pointerStates.get(r))||void 0===n?void 0:n.targetShape;a&&"touch"!==s?this._pointerStates.set(r,{targetShape:a}):this._pointerStates.delete(r);const o=O(i.id)||this.getIntersection(i),h={evt:t,pointerId:i.id};o?(e&&o._fireAndBubble(e.pointercancel,{...h}),o._fireAndBubble(wt,{...h})):e&&this._fire(e.pointercancel,{...h,target:this,currentTarget:this}),z(i.id),e&&"touch"===s&&(null==a?void 0:a.getStage())===this&&(a._fireAndBubble(e.pointerout,{...h}),a._fireAndBubble(e.pointerleave,{...h}))})}_lostpointercapture(t){O(t.pointerId,this)&&z(t.pointerId)}setPointersPositions(t){const e=this._getContentPosition();let i=null,n=null;void 0!==(t=t||window.event).touches?(this._pointerEventType="touch",this._pointerPositions=[],this._changedPointerPositions=[],Array.prototype.forEach.call(t.touches,t=>{this._pointerPositions.push({id:t.identifier,x:(t.clientX-e.left)/e.scaleX,y:(t.clientY-e.top)/e.scaleY})}),Array.prototype.forEach.call(t.changedTouches||t.touches,t=>{this._changedPointerPositions.push({id:t.identifier,x:(t.clientX-e.left)/e.scaleX,y:(t.clientY-e.top)/e.scaleY})})):(this._pointerEventType=void 0===t.pointerId?"mouse":"pointer",i=(t.clientX-e.left)/e.scaleX,n=(t.clientY-e.top)/e.scaleY,this.pointerPos={x:i,y:n},this._pointerPositions=[{x:i,y:n,id:C._getFirstPointerId(t)}],this._changedPointerPositions=[{x:i,y:n,id:C._getFirstPointerId(t)}])}_setPointerPosition(t){C.warn('Method _setPointerPosition is deprecated. Use "stage.setPointersPositions(event)" instead.'),this.setPointersPositions(t)}_getContentPosition(){if(!this.content||!this.content.getBoundingClientRect)return{top:0,left:0,scaleX:1,scaleY:1};const t=this.content.getBoundingClientRect();return{top:t.top,left:t.left,scaleX:t.width/this.content.clientWidth||1,scaleY:t.height/this.content.clientHeight||1}}_buildDOM(){if(this.bufferHitCanvas=new L({pixelRatio:1,width:0,height:0}),!i.isBrowser)return;const t=this.container();if(!t)throw"Stage has no container. A container is required.";t.innerHTML="",this.content=t.ownerDocument.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),zt(this._getOwnerWindow()),this._resizeDOM()}cache(){return C.warn("Cache function is not allowed for stage. You may use cache only for layers, groups and shapes."),this}clearCache(){return this}batchDraw(){var t;return null===(t=this.children)||void 0===t||t.forEach(function(t){t.batchDraw()}),this}}Ht.prototype.nodeType="Stage",s(Ht),J.addGetterSetter(Ht,"container"),J.addGetterSetter(Ht,"eventBatchFunc");const Yt="hasShadow",Ut="hasFill",Xt="hasStroke",jt="shadowRGBA",qt="patternImage",$t="linearGradient",Vt="radialGradient";let Kt;function Qt(){return Kt||(Kt=C.createCanvasElement().getContext("2d"),Kt)}const Jt={};function Zt(t){const e=this.attrs.fillRule;e?t.fill(e):t.fill()}function te(t){t.stroke()}class ee extends gt{constructor(t){let e;super(t);let i=0;for(;e=C.getHitColor(),!e||e in Jt;)if(i++,i>=1e4){C.warn("Failed to find a unique color key for a shape. Konva may work incorrectly. Most likely your browser is using canvas farbling. Consider disabling it."),e=C.getRandomColor();break}this.colorKey=e,Jt[e]=this}getContext(){return C.warn("shape.getContext() method is deprecated. Please do not use it."),this.getLayer().getContext()}getCanvas(){return C.warn("shape.getCanvas() method is deprecated. Please do not use it."),this.getLayer().getCanvas()}getSceneFunc(){return this.attrs.sceneFunc||this._sceneFunc}getHitFunc(){return this.attrs.hitFunc||this._hitFunc}hasShadow(){return this._getCache(Yt,this._hasShadow)}_hasShadow(){return this.shadowEnabled()&&0!==this.shadowOpacity()&&!!(this.shadowColor()||this.shadowBlur()||this.shadowOffsetX()||this.shadowOffsetY())}_toStyleSpace(t){return this._styleTransform?this._styleTransform.point(t):t}_getFillPattern(){const t=this._getCache(qt,this._createFillPattern);return t&&this._setFillPatternTransform(t)}_createFillPattern(){if(this.fillPatternImage())return Qt().createPattern(this.fillPatternImage(),this.fillPatternRepeat()||"repeat")}_setFillPatternTransform(t){var e;if(t.setTransform){const n=(null===(e=this._styleTransform)||void 0===e?void 0:e.copy())||new a;n.translate(this.fillPatternX(),this.fillPatternY()),n.rotate(i.getAngle(this.fillPatternRotation())),n.scale(this.fillPatternScaleX(),this.fillPatternScaleY()),n.translate(-1*this.fillPatternOffsetX(),-1*this.fillPatternOffsetY());const s=n.getMatrix(),r="undefined"==typeof DOMMatrix?{a:s[0],b:s[1],c:s[2],d:s[3],e:s[4],f:s[5]}:new DOMMatrix(s);t.setTransform(r)}return t}_getLinearGradient(){return this._styleTransform?this.__getLinearGradient():this._getCache($t,this.__getLinearGradient)}__getLinearGradient(){const t=this.fillLinearGradientColorStops();if(t){const e=Qt(),i=this._toStyleSpace(this.fillLinearGradientStartPoint()),n=this._toStyleSpace(this.fillLinearGradientEndPoint()),s=e.createLinearGradient(i.x,i.y,n.x,n.y);for(let e=0;e<t.length;e+=2)s.addColorStop(t[e],t[e+1]);return s}}_getRadialGradient(){return this._styleTransform?this.__getRadialGradient():this._getCache(Vt,this.__getRadialGradient)}__getRadialGradient(){const t=this.fillRadialGradientColorStops();if(t){const e=Qt(),i=this._toStyleSpace(this.fillRadialGradientStartPoint()),n=this._toStyleSpace(this.fillRadialGradientEndPoint()),s=e.createRadialGradient(i.x,i.y,this.fillRadialGradientStartRadius(),n.x,n.y,this.fillRadialGradientEndRadius());for(let e=0;e<t.length;e+=2)s.addColorStop(t[e],t[e+1]);return s}}getShadowRGBA(){return this._getCache(jt,this._getShadowRGBA)}_getShadowRGBA(){if(!this.hasShadow())return;const t=C.colorToRGBA(this.shadowColor());return t?"rgba("+t.r+","+t.g+","+t.b+","+t.a*(this.shadowOpacity()||1)+")":void 0}hasFill(){return this._getCache(Ut,this._hasFill)}_hasFill(){return this.fillEnabled()&&!!(this.fill()||this.fillPatternImage()||this.fillLinearGradientColorStops()||this.fillRadialGradientColorStops())}hasStroke(){return this._getCache(Xt,this._hasStroke)}_hasStroke(){return this.strokeEnabled()&&!(!this.strokeWidth()||!this.stroke()&&!this.strokeLinearGradientColorStops())}hasHitStroke(){const t=this.hitStrokeWidth();return"auto"===t?this.hasStroke():this.strokeEnabled()&&!!t}intersects(t){const e=this.getStage();if(!e)return!1;const i=e.bufferHitCanvas;i.setSizeIfChanged(e.width(),e.height()),i.getContext().clear(),this.drawHit(i);return i.context.getImageData(Math.floor(t.x),Math.floor(t.y),1,1).data[3]>0}destroy(){return gt.prototype.destroy.call(this),delete Jt[this.colorKey],delete this.colorKey,this}_useBufferCanvas(t,e=this.getAbsoluteOpacity()){var i;if(!(null===(i=this.attrs.perfectDrawEnabled)||void 0===i||i))return!1;const n=t||this.hasFill(),s=this.hasStroke(),r=!this._isUnderCache&&1!==e;if(n&&s&&r)return!0;const a=this.hasShadow(),o=this.shadowForStrokeEnabled();return!!(n&&s&&a&&o)}setStrokeHitEnabled(t){C.warn("strokeHitEnabled property is deprecated. Please use hitStrokeWidth instead."),t?this.hitStrokeWidth("auto"):this.hitStrokeWidth(0)}getStrokeHitEnabled(){return 0!==this.hitStrokeWidth()}getSelfRect(){const t=this.attrs.selfRectFunc;if(t)return{...t.call(this,this)};const e=this.size();return{x:this._centroid?-e.width/2:0,y:this._centroid?-e.height/2:0,width:e.width,height:e.height}}_getSelfRectForDrawing(){return this.getSelfRect()}getClientRect(t={}){const e=this._getCachedSceneRect(t);if(e)return e;const i=t.skipTransform,n=t.relativeTo,s=t._forDrawing;let r=s?this._getSelfRectForDrawing():this.getSelfRect();s&&!this.strokeScaleEnabled()?r=this._transformedRect(r,n):(r.width<0||r.height<0)&&(r=(new a)._getTransformedRect(r));const o=!t.skipStroke&&this.hasStroke()?s?2*this._getStrokePadding():this.strokeWidth():0;let h,l=o,d=o;if(!s&&o&&!this.strokeScaleEnabled()){let t=this;for(;t&&!t.isCached()&&!t._isUnderCache;)t=t.parent;const[e,s,r,o]=this.getAbsoluteTransform(t).getMatrix(),c=Math.abs(e*o-s*r);if(c)l*=Math.hypot(r,o)/c,d*=Math.hypot(e,s)/c;else if(!i&&(l=d=0,h=t?t.getAbsoluteTransform().copy():new a,n)){const t=n.getAbsoluteTransform(),[e,i,s,r]=t.getMatrix();h=e*r-i*s?t.copy().invert().multiply(h):new a}}let c={x:r.x-l/2,y:r.y-d/2,width:r.width+l,height:r.height+d};if(s&&this.strokeScaleEnabled()&&(c=this._transformedRect(c,n)),!t.skipShadow&&this.hasShadow()){const t=s?this.getAbsoluteScale():{x:1,y:1},e=this.shadowOffsetX()*t.x,i=this.shadowOffsetY()*t.y,n=this.shadowBlur()*(s?2*Math.min(Math.abs(t.x),Math.abs(t.y)):1);c.x+=Math.min(0,e)-n,c.y+=Math.min(0,i)-n,c.width+=Math.abs(e)+2*n,c.height+=Math.abs(i)+2*n}if(s)return c;if(!i){const t=this._transformedRect(c,n);if(h){const[e,i,n,s]=h.getMatrix(),r=o*Math.hypot(e,n)/2,a=o*Math.hypot(i,s)/2;t.x-=r,t.y-=a,t.width+=2*r,t.height+=2*a}return t}return c}_getStrokePadding(t=this.miterLimit()||10){return this.attrs.sceneFunc&&(t=this.miterLimit()||10),Math.abs(this.strokeWidth())/2*Math.max("square"===this.lineCap()?Math.SQRT2:1,"miter"===(this.lineJoin()||"miter")?t:1)}drawScene(t,e){const i=this.getLayer(),s=t||i.getCanvas(),r=s.getContext(),a=this._getCanvasCache(),o=this.getSceneFunc(),h=this.hasShadow(),l=e===this;if(!(e?this._isVisible(e):this.isVisible())&&!l)return this;if(a){r.save();const t=this.getAbsoluteTransform(e).getMatrix();return r.transform(t[0],t[1],t[2],t[3],t[4],t[5]),this._drawCachedSceneCanvas(r),r.restore(),this}if(!o)return this;r.save();try{if(s.width&&s.height&&this._useBufferCanvas(void 0,r._getOpacity(this))){const t=!!r._opacityRoot||!!this.attrs.selfRectFunc&&this.getSelfRect===ee.prototype.getSelfRect||!this.attrs.sceneFunc&&!this.attrs.charRenderFunc&&n.has(this.constructor),i=s._prepareIsolationCanvas(t?this.getClientRect({_forDrawing:!0,relativeTo:e,skipShadow:!0}):void 0),a=i.getContext();a.save(),a._applyLineJoin(this),a._applyMiterLimit(this);const d=this.getAbsoluteTransform(e).getMatrix();a.transform(d[0],d[1],d[2],d[3],d[4],d[5]),o.call(this,a,this),a.restore(),h&&r._applyShadow(this),l||(r._applyOpacity(this),r._applyGlobalCompositeOperation(this)),r._drawDeviceBuffer(i)}else{if(r._applyLineJoin(this),r._applyMiterLimit(this),!l){const t=this.getAbsoluteTransform(e).getMatrix();r.transform(t[0],t[1],t[2],t[3],t[4],t[5]),r._applyOpacity(this),r._applyGlobalCompositeOperation(this)}h&&r._applyShadow(this),o.call(this,r,this)}}catch(t){throw s._releaseIsolationCanvas(),t}finally{r.restore()}return this}drawHit(t,e){if(!this.shouldDrawHit(e))return this;const i=this.getLayer(),n=t||i.hitCanvas,s=n&&n.getContext(),r=this.hitFunc()||this.sceneFunc(),a=this._getCachedHitCanvas(e);if(this.colorKey||C.warn("Looks like your canvas has a destroyed shape in it. Do not reuse shape after you destroyed it. If you want to reuse shape you should call remove() instead of destroy()"),a){s.save();const t=this.getAbsoluteTransform(e).getMatrix();return s.transform(t[0],t[1],t[2],t[3],t[4],t[5]),this._drawCachedHitCanvas(s,a),s.restore(),this}if(!r)return this;s.save(),s._applyLineJoin(this),s._applyMiterLimit(this);if(!(this===e)){const t=this.getAbsoluteTransform(e).getMatrix();s.transform(t[0],t[1],t[2],t[3],t[4],t[5])}try{r.call(this,s,this)}finally{s.restore()}return this}drawHitFromCache(t=0){const e=this._getCachedSceneCanvas(),i=this._getCachedHitCanvas(),n=i.getContext(),s=i.getWidth(),r=i.getHeight();n.clear(),n.drawImage(e._canvas,0,0,s/i.pixelRatio,r/i.pixelRatio);try{const e=n.getImageData(0,0,s,r),i=e.data,a=i.length,o=C._hexToRgb(this.colorKey);for(let e=0;e<a;e+=4){i[e+3]>t?(i[e]=o.r,i[e+1]=o.g,i[e+2]=o.b,i[e+3]=255):i[e+3]=0}n.putImageData(e,0,0)}catch(t){C.error("Unable to draw hit graph from cached scene canvas. "+t.message)}return this}hasPointerCapture(t){return N(t,this)}setPointerCapture(t){W(t,this)}releaseCapture(t){z(t,this)}}ee.prototype._fillFunc=Zt,ee.prototype._strokeFunc=te,ee.prototype._fillFuncHit=Zt,ee.prototype._strokeFuncHit=te,ee.prototype._centroid=!1,ee.prototype.nodeType="Shape",s(ee),ee.prototype.on("shadowColorChange.konva shadowBlurChange.konva shadowOffsetXChange.konva shadowOffsetYChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",function(){this._clearCache(Yt)}),ee.prototype.on("shadowColorChange.konva shadowOpacityChange.konva shadowEnabledChange.konva",function(){this._clearCache(jt)}),ee.prototype.on("fillEnabledChange.konva fillChange.konva fillPatternImageChange.konva fillLinearGradientColorStopsChange.konva fillRadialGradientColorStopsChange.konva",function(){this._clearCache(Ut)}),ee.prototype.on("strokeEnabledChange.konva strokeWidthChange.konva strokeChange.konva strokeLinearGradientColorStopsChange.konva",function(){this._clearCache(Xt)}),ee.prototype.on("fillPriorityChange.konva fillPatternImageChange.konva fillPatternRepeatChange.konva fillPatternScaleXChange.konva fillPatternScaleYChange.konva fillPatternOffsetXChange.konva fillPatternOffsetYChange.konva fillPatternXChange.konva fillPatternYChange.konva fillPatternRotationChange.konva",function(){this._clearCache(qt)}),ee.prototype.on("fillPriorityChange.konva fillLinearGradientColorStopsChange.konva fillLinearGradientStartPointXChange.konva fillLinearGradientStartPointYChange.konva fillLinearGradientEndPointXChange.konva fillLinearGradientEndPointYChange.konva",function(){this._clearCache($t)}),ee.prototype.on("fillPriorityChange.konva fillRadialGradientColorStopsChange.konva fillRadialGradientStartPointXChange.konva fillRadialGradientStartPointYChange.konva fillRadialGradientEndPointXChange.konva fillRadialGradientEndPointYChange.konva fillRadialGradientStartRadiusChange.konva fillRadialGradientEndRadiusChange.konva",function(){this._clearCache(Vt)}),J.addGetterSetter(ee,"stroke",void 0,$()),J.addGetterSetter(ee,"strokeWidth",2,U()),J.addGetterSetter(ee,"fillAfterStrokeEnabled",!1),J.addGetterSetter(ee,"hitStrokeWidth","auto",j()),J.addGetterSetter(ee,"strokeHitEnabled",!0,V()),J.addGetterSetter(ee,"perfectDrawEnabled",!0,V()),J.addGetterSetter(ee,"shadowForStrokeEnabled",!0,V()),J.addGetterSetter(ee,"lineJoin"),J.addGetterSetter(ee,"lineCap"),J.addGetterSetter(ee,"miterLimit"),J.addGetterSetter(ee,"sceneFunc"),J.addGetterSetter(ee,"hitFunc"),J.addGetterSetter(ee,"selfRectFunc"),J.addGetterSetter(ee,"dash"),J.addGetterSetter(ee,"dashOffset",0,U()),J.addGetterSetter(ee,"shadowColor",void 0,q()),J.addGetterSetter(ee,"shadowBlur",0,U()),J.addGetterSetter(ee,"shadowOpacity",1,U()),J.addComponentsGetterSetter(ee,"shadowOffset",["x","y"]),J.addGetterSetter(ee,"shadowOffsetX",0,U()),J.addGetterSetter(ee,"shadowOffsetY",0,U()),J.addGetterSetter(ee,"fillPatternImage"),J.addGetterSetter(ee,"fill",void 0,$()),J.addGetterSetter(ee,"fillPatternX",0,U()),J.addGetterSetter(ee,"fillPatternY",0,U()),J.addGetterSetter(ee,"fillLinearGradientColorStops"),J.addGetterSetter(ee,"strokeLinearGradientColorStops"),J.addGetterSetter(ee,"fillRadialGradientStartRadius",0),J.addGetterSetter(ee,"fillRadialGradientEndRadius",0),J.addGetterSetter(ee,"fillRadialGradientColorStops"),J.addGetterSetter(ee,"fillPatternRepeat","repeat"),J.addGetterSetter(ee,"fillEnabled",!0),J.addGetterSetter(ee,"strokeEnabled",!0),J.addGetterSetter(ee,"shadowEnabled",!0),J.addGetterSetter(ee,"dashEnabled",!0),J.addGetterSetter(ee,"strokeScaleEnabled",!0),J.addGetterSetter(ee,"fillPriority","color"),J.addComponentsGetterSetter(ee,"fillPatternOffset",["x","y"]),J.addGetterSetter(ee,"fillPatternOffsetX",0,U()),J.addGetterSetter(ee,"fillPatternOffsetY",0,U()),J.addComponentsGetterSetter(ee,"fillPatternScale",["x","y"]),J.addGetterSetter(ee,"fillPatternScaleX",1,U()),J.addGetterSetter(ee,"fillPatternScaleY",1,U()),J.addComponentsGetterSetter(ee,"fillLinearGradientStartPoint",["x","y"]),J.addComponentsGetterSetter(ee,"strokeLinearGradientStartPoint",["x","y"]),J.addGetterSetter(ee,"fillLinearGradientStartPointX",0),J.addGetterSetter(ee,"strokeLinearGradientStartPointX",0),J.addGetterSetter(ee,"fillLinearGradientStartPointY",0),J.addGetterSetter(ee,"strokeLinearGradientStartPointY",0),J.addComponentsGetterSetter(ee,"fillLinearGradientEndPoint",["x","y"]),J.addComponentsGetterSetter(ee,"strokeLinearGradientEndPoint",["x","y"]),J.addGetterSetter(ee,"fillLinearGradientEndPointX",0),J.addGetterSetter(ee,"strokeLinearGradientEndPointX",0),J.addGetterSetter(ee,"fillLinearGradientEndPointY",0),J.addGetterSetter(ee,"strokeLinearGradientEndPointY",0),J.addComponentsGetterSetter(ee,"fillRadialGradientStartPoint",["x","y"]),J.addGetterSetter(ee,"fillRadialGradientStartPointX",0),J.addGetterSetter(ee,"fillRadialGradientStartPointY",0),J.addComponentsGetterSetter(ee,"fillRadialGradientEndPoint",["x","y"]),J.addGetterSetter(ee,"fillRadialGradientEndPointX",0),J.addGetterSetter(ee,"fillRadialGradientEndPointY",0),J.addGetterSetter(ee,"fillPatternRotation",0),J.addGetterSetter(ee,"fillRule",void 0,q()),J.backCompat(ee,{dashArray:"dash",getDashArray:"getDash",setDashArray:"setDash",drawFunc:"sceneFunc",getDrawFunc:"getSceneFunc",setDrawFunc:"setSceneFunc",drawHitFunc:"hitFunc",getDrawHitFunc:"getHitFunc",setDrawHitFunc:"setHitFunc"});function ie(t,e){return t[e+3]>=128?Jt[C.getHitColorKey(t[e],t[e+1],t[e+2])]:void 0}class ne extends ft{constructor(t){super(t),this.canvas=new G,this.hitCanvas=new L({pixelRatio:1}),this._waitingForDraw=!1,this.on("visibleChange.konva",this._checkVisibility),this._checkVisibility(),this.on("imageSmoothingEnabledChange.konva",this._setSmoothEnabled),this._setSmoothEnabled()}createPNGStream(){return this.canvas._canvas.createPNGStream()}getCanvas(){return this.canvas}getNativeCanvasElement(){return this.canvas._canvas}getHitCanvas(){return this.hitCanvas}getContext(){return this.getCanvas().getContext()}clear(t){return this.getContext().clear(t),this.getHitCanvas().getContext().clear(t),this}setZIndex(t){super.setZIndex(t);const e=this.getStage();return e&&e.content&&(e.content.removeChild(this.getNativeCanvasElement()),t<e.children.length-1?e.content.insertBefore(this.getNativeCanvasElement(),e.children[t+1].getCanvas()._canvas):e.content.appendChild(this.getNativeCanvasElement())),this}moveToTop(){gt.prototype.moveToTop.call(this);const t=this.getStage();return t&&t.content&&(t.content.removeChild(this.getNativeCanvasElement()),t.content.appendChild(this.getNativeCanvasElement())),!0}moveUp(){if(!gt.prototype.moveUp.call(this))return!1;const t=this.getStage();return!(!t||!t.content)&&(t.content.removeChild(this.getNativeCanvasElement()),this.index<t.children.length-1?t.content.insertBefore(this.getNativeCanvasElement(),t.children[this.index+1].getCanvas()._canvas):t.content.appendChild(this.getNativeCanvasElement()),!0)}moveDown(){if(gt.prototype.moveDown.call(this)){const t=this.getStage();if(t){const e=t.children;t.content&&(t.content.removeChild(this.getNativeCanvasElement()),t.content.insertBefore(this.getNativeCanvasElement(),e[this.index+1].getCanvas()._canvas))}return!0}return!1}moveToBottom(){if(gt.prototype.moveToBottom.call(this)){const t=this.getStage();if(t){const e=t.children;t.content&&(t.content.removeChild(this.getNativeCanvasElement()),t.content.insertBefore(this.getNativeCanvasElement(),e[1].getCanvas()._canvas))}return!0}return!1}getLayer(){return this}remove(){var t,e;super.remove();const i=this.getNativeCanvasElement(),n=this.getHitCanvas()._canvas;return null===(t=i.parentNode)||void 0===t||t.removeChild(i),null===(e=n.parentNode)||void 0===e||e.removeChild(n),this}getStage(){return this.parent}_setSize({width:t,height:e}){return this.canvas.setSize(t,e),this._syncHitCanvasSize(),this._setSmoothEnabled(),this}_syncHitCanvasSize(){const t=this.isListening();this.hitCanvas.setSizeIfChanged((t?this.getWidth():0)||0,(t?this.getHeight():0)||0)}_validateAdd(t){const e=t.getType();"Group"!==e&&"Shape"!==e&&C.throw("You may only add groups and shapes to a layer.")}_toKonvaCanvas(t){return(t={...t}).width=t.width||this.getWidth(),t.height=t.height||this.getHeight(),t.x=void 0!==t.x?t.x:this.x(),t.y=void 0!==t.y?t.y:this.y(),gt.prototype._toKonvaCanvas.call(this,t)}_checkVisibility(){const t=this.visible();this.canvas._canvas.style.display=t?"block":"none"}_setSmoothEnabled(){this.getContext()._context.imageSmoothingEnabled=this.imageSmoothingEnabled()}getWidth(){if(this.parent)return this.parent.width()}setWidth(){C.warn('Can not change width of layer. Use "stage.width(value)" function instead.')}getHeight(){if(this.parent)return this.parent.height()}setHeight(){C.warn('Can not change height of layer. Use "stage.height(value)" function instead.')}batchDraw(){var t;return this._waitingForDraw||(this._waitingForDraw=!0,C.requestAnimFrame(()=>{this._waitingForDraw=!1,this.draw()},null===(t=this.getStage())||void 0===t?void 0:t._getOwnerWindow())),this}getIntersection(t){if(!this.isListening()||!this.isVisible())return null;const e=this._getIntersection(t);if(e.shape)return e.shape;if(!e.antialiased)return null;const i=this.hitCanvas.pixelRatio,n=Math.floor(t.x*i),s=Math.floor(t.y*i),r=t=>this.hitCanvas.context.getImageData(n-t,s-t,2*t+1,2*t+1).data;let a=10,o=2*a+1,h=r(a),l=h[4*(a*o+a)+3];for(let t=1;t<=256;t++){t>a&&(a=Math.min(256,2*a),o=2*a+1,h=r(a));let e=0;for(let i=-t;i<=t;i++){const n=Math.abs(i)===t?1:2*t;for(let s=-t;s<=t;s+=n){const t=4*((i+a)*o+s+a),n=ie(h,t);if(n)return n;e=Math.max(e,h[t+3])}}if(e<=l&&255!==e)return null;l=e}return null}_getIntersection(t){if(!this.hitCanvas.width||!this.hitCanvas.height)return{};const e=this.hitCanvas.pixelRatio,i=this.hitCanvas.context.getImageData(Math.floor(t.x*e),Math.floor(t.y*e),1,1).data,n=ie(i,0);return n?{shape:n}:i[3]>0?{antialiased:!0}:{}}drawScene(t,e){const i=this.getLayer(),n=t||i&&i.getCanvas();return this._fire("beforeDraw",{node:this}),this.clearBeforeDraw()&&n.getContext().clear(),ft.prototype.drawScene.call(this,n,e),n._trimIsolationCanvas(),this._fire("draw",{node:this}),this}shouldDrawHit(t){var e;if(!super.shouldDrawHit(t))return!1;if(t||i.hitOnDragEnabled)return!0;let n=!1;return D._dragElements.forEach(t=>{"dragging"!==t.dragStatus||t.node!==this.getStage()&&t.node.getLayer()!==this||(n=!0)}),!n&&!(null===(e=i.Transformer)||void 0===e?void 0:e._isLayerTransforming(this))}drawHit(t,e){const i=this.getLayer(),n=t||i&&i.hitCanvas;return!t&&i&&(i._syncHitCanvasSize(),i.clearBeforeDraw()&&i.getHitCanvas().getContext().clear()),ft.prototype.drawHit.call(this,n,e),this}enableHitGraph(){return this.hitGraphEnabled(!0),this}disableHitGraph(){return this.hitGraphEnabled(!1),this}setHitGraphEnabled(t){C.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening(t)}getHitGraphEnabled(t){return C.warn("hitGraphEnabled method is deprecated. Please use layer.listening() instead."),this.listening()}toggleHitCanvas(){if(!this.parent||!this.parent.content)return;const t=this.parent;!!this.hitCanvas._canvas.parentNode?t.content.removeChild(this.hitCanvas._canvas):t.content.appendChild(this.hitCanvas._canvas)}destroy(){return this.getCanvas()._releaseIsolationCanvas(),C.releaseCanvas(this.getNativeCanvasElement(),this.getHitCanvas()._canvas),super.destroy()}}ne.prototype.nodeType="Layer",s(ne),J.addGetterSetter(ne,"imageSmoothingEnabled",!0),J.addGetterSetter(ne,"clearBeforeDraw",!0),J.addOverloadedGetterSetter(ne,"hitGraphEnabled");class se extends ne{constructor(t){super(t),this.listening(!1),C.warn('Konva.FastLayer is deprecated. Please use "new Konva.Layer({ listening: false })" instead.')}}se.prototype.nodeType="FastLayer",s(se);class re extends ft{_validateAdd(t){const e=t.getType();"Group"!==e&&"Shape"!==e&&C.throw("You may only add groups and shapes to groups.")}_drawChildNodes(t,e,i){if("drawScene"!==t||!this.isolated()||i===this)return super._drawChildNodes(t,e,i);if(!e.width||!e.height)return;const n=e.getContext(),s=e._prepareIsolationCanvas(this.getClientRect({_forDrawing:!0,relativeTo:i})),r=s.getContext();r._opacityRoot=this,n.save();try{super._drawChildNodes(t,s,i),n._applyOpacity(this),n._drawDeviceBuffer(s)}catch(t){throw e._releaseIsolationCanvas(),t}finally{n.restore(),r._opacityRoot=void 0}}}var ae;J.addGetterSetter(re,"isolated",!1,V()),re.prototype.nodeType="Group",s(re);const oe=(null===(ae=e.performance)||void 0===ae?void 0:ae.now)?()=>e.performance.now():Date.now;class he{constructor(t,e){this.id=he.animIdCounter++,this.frame={time:0,timeDiff:0,lastTime:oe(),frameRate:0},this.func=t,this.setLayers(e)}setLayers(t){return this.layers=t?[].concat(t):[],this}getLayers(){return this.layers}addLayer(t){const e=this.layers,i=e.length;for(let n=0;n<i;n++)if(e[n]._id===t._id)return!1;return this.layers.push(t),!0}isRunning(){return he.animations.has(this)}start(){return this.stop(),this.frame.timeDiff=0,this.frame.lastTime=oe(),he._addAnimation(this),this}stop(){return he._removeAnimation(this),this}_updateFrameObject(t){this.frame.timeDiff=t-this.frame.lastTime,this.frame.lastTime=t,this.frame.time+=this.frame.timeDiff,this.frame.frameRate=1e3/this.frame.timeDiff}static _addAnimation(t){this.animations.add(t),this._handleAnimation()}static _removeAnimation(t){this.animations.delete(t)}static _runFrames(){const t=new Set;gt._updateBatch(()=>{Array.from(this.animations).forEach(e=>{this.animations.has(e)&&(e._updateFrameObject(oe()),e.func&&!1===e.func.call(e,e.frame)||e.layers.forEach(e=>e&&t.add(e)))})}),t.forEach(t=>t.batchDraw())}static _animationLoop(){const t=he;t.animations.size?(t._runFrames(),C.requestAnimFrame(t._animationLoop)):t.animRunning=!1}static _handleAnimation(){this.animRunning||(this.animRunning=!0,C.requestAnimFrame(this._animationLoop))}}he.animations=new Set,he.animIdCounter=0,he.animRunning=!1;const le={node:1,duration:1,easing:1,onFinish:1,onUpdate:1,onReset:1,yoyo:1},de=["fill","stroke","shadowColor"];let ce=0;function ge(t){return C.colorToRGBA(t)||C.throw('can not tween the color "'+t+'", because it is not a valid color.')}function ue(t,e){return{r:e.r-t.r,g:e.g-t.g,b:e.b-t.b,a:e.a-t.a}}function fe(t,e,i){return"rgba("+Math.round(t.r+e.r*i)+","+Math.round(t.g+e.g*i)+","+Math.round(t.b+e.b*i)+","+(t.a+e.a*i)+")"}class pe{constructor(t,e,i,n,s,r,a){this.prop=t,this.propFunc=e,this.begin=n,this._pos=n,this.duration=r,this._change=0,this.prevPos=0,this.yoyo=a,this._time=0,this._position=0,this._startTime=0,this._finish=0,this.func=i,this._change=s-this.begin,this.pause()}fire(t){const e=this[t];e&&e()}setTime(t){t>this.duration?this.yoyo?(this._time=this.duration,this.reverse()):this.finish():t<0?this.yoyo?(this._time=0,this.play()):this.reset():(this._time=t,this.update())}getTime(){return this._time}setPosition(t){this.prevPos=this._pos,this.propFunc(t),this._pos=t}getPosition(t){return void 0===t&&(t=this._time),this.func(t,this.begin,this._change,this.duration)}play(){this.state=2,this._startTime=this.getTimer()-this._time,this.fire("onPlay"),this.onEnterFrame()}reverse(){this.state=3,this._time=this.duration-this._time,this._startTime=this.getTimer()-this._time,this.fire("onReverse"),this.onEnterFrame()}seek(t){this.pause(),this._time=t,this.update(),this.fire("onSeek")}reset(){this.pause(),this._time=0,this.update(),this.fire("onReset")}finish(){this.pause(),this._time=this.duration,this.update(),this.fire("onFinish")}update(){this.setPosition(this.getPosition(this._time)),this.fire("onUpdate")}onEnterFrame(){const t=this.getTimer()-this._startTime;2===this.state?this.setTime(t):3===this.state&&this.setTime(this.duration-t)}pause(){this.state=1,this.fire("onPause")}getTimer(){return Date.now()}}class _e{constructor(t){const e=this,n=t.node,s=n._id,r=t.easing||me.Linear,a=!!t.yoyo;let o,h;o=void 0===t.duration?.3:0===t.duration?.001:t.duration,this.node=n,this._id=ce++;const l=n.getLayer()||(n instanceof i.Stage?n.getLayers():null);for(h in l||C.error("Tween constructor have `node` that is not in a layer. Please add node into layer first."),this.anim=new he(function(){e.tween.onEnterFrame()},l),this.tween=new pe(h,function(t){e._tweenFunc(t)},r,0,1,1e3*o,a),this._addListeners(),_e.attrs[s]||(_e.attrs[s]={}),_e.attrs[s][this._id]||(_e.attrs[s][this._id]={}),_e.tweens[s]||(_e.tweens[s]={}),t)void 0===le[h]&&this._addAttr(h,t[h]);this.reset(),this.onFinish=t.onFinish,this.onReset=t.onReset,this.onUpdate=t.onUpdate}_addAttr(t,e){if(C._isPlainObject(e)){for(const i in e)this._addAttr(t+C._capitalize(i),e[i]);return}const i=this.node,n=i._id;let s,r,a,o;const h=_e.tweens[n][t];void 0!==h&&delete _e.attrs[n][h][t];let l=i.getAttr(t);if(C._isArray(e)||C._isArray(l))if(s=[],o=l,a=e,l=C._isArray(l)?l.slice():new Array(e.length).fill(l||0),C._isArray(e)||(e=new Array(l.length).fill(e)),r=Math.max(e.length,l.length),"points"===t&&e.length!==l.length&&(e.length>l.length?l=C._prepareArrayForTween(l,e,i.closed()):e=C._prepareArrayForTween(e,l,i.closed())),t.endsWith("ColorStops"))for(let t=0;t<r;t++)if(t%2==0)s.push((e[t]||0)-(l[t]||0));else{const i=ge(l[t]);l[t]=i,s.push(ue(i,ge(e[t])))}else for(let t=0;t<r;t++)s.push((e[t]||0)-(l[t]||0));else-1!==de.indexOf(t)?(l=ge(l),s=ue(l,ge(e))):s=e-l;_e.attrs[n][this._id][t]={start:l,diff:s,end:e,trueEnd:a,trueStart:o},_e.tweens[n][t]=this._id}_tweenFunc(t){var e;const i=this.node,n=null===(e=_e.attrs[i._id])||void 0===e?void 0:e[this._id];let s,r,a,o,h,l,d,c;for(s in n){if(r=n[s],a=r.start,o=r.diff,c=r.end,C._isArray(a))if(h=[],d=Math.max(a.length,c.length),s.endsWith("ColorStops"))for(l=0;l<d;l++)l%2==0?h.push((a[l]||0)+o[l]*t):h.push(fe(a[l],o[l],t));else for(l=0;l<d;l++)h.push((a[l]||0)+o[l]*t);else h=-1!==de.indexOf(s)?fe(a,o,t):a+o*t;i.setAttr(s,h)}}_addListeners(){const t=`destroy.konva-tween${this._id}`,e=()=>this.destroy(),i=()=>{this.node.off(t).on(t,e),this.anim.start()};this.tween.onPlay=i,this.tween.onReverse=i,this.tween.onPause=()=>{this.node.off(t),this.anim.stop()};const n=(t,e)=>{var i;const n=null===(i=_e.attrs[this.node._id])||void 0===i?void 0:i[this._id];if(n){for(const e in n)void 0!==n[e][t]&&this.node.setAttr(e,n[e][t]);null==e||e.call(this)}};this.tween.onFinish=()=>n("trueEnd",this.onFinish),this.tween.onReset=()=>n("trueStart",this.onReset),this.tween.onUpdate=()=>{this.onUpdate&&this.onUpdate.call(this)}}play(){return this.tween.play(),this}reverse(){return this.tween.reverse(),this}reset(){return this.tween.reset(),this}seek(t){return this.tween.seek(1e3*t),this}pause(){return this.tween.pause(),this}finish(){return this.tween.finish(),this}destroy(){var t;const e=this.node._id,i=this._id,n=null===(t=_e.attrs[e])||void 0===t?void 0:t[i],s=_e.tweens[e];if(this.pause(),this.anim&&this.anim.stop(),n){if(s){for(const t in n)delete s[t];0===Object.keys(s).length&&delete _e.tweens[e]}delete _e.attrs[e][i],0===Object.keys(_e.attrs[e]).length&&delete _e.attrs[e]}}}_e.attrs={},_e.tweens={},gt.prototype.to=function(t){const e=t.onFinish,i=new _e({...t,node:this,onFinish(){i.destroy(),e&&e()}});return i.play(),i};const me={BackEaseIn(t,e,i,n){const s=1.70158;return i*(t/=n)*t*((s+1)*t-s)+e},BackEaseOut(t,e,i,n){const s=1.70158;return i*((t=t/n-1)*t*((s+1)*t+s)+1)+e},BackEaseInOut(t,e,i,n){let s=1.70158;return(t/=n/2)<1?i/2*(t*t*((1+(s*=1.525))*t-s))+e:i/2*((t-=2)*t*((1+(s*=1.525))*t+s)+2)+e},ElasticEaseIn(t,e,i,n,s,r){let a=0;return 0===t?e:1===(t/=n)?e+i:(r||(r=.3*n),!s||s<Math.abs(i)?(s=i,a=r/4):a=r/(2*Math.PI)*Math.asin(i/s),-s*Math.pow(2,10*(t-=1))*Math.sin((t*n-a)*(2*Math.PI)/r)+e)},ElasticEaseOut(t,e,i,n,s,r){let a=0;return 0===t?e:1===(t/=n)?e+i:(r||(r=.3*n),!s||s<Math.abs(i)?(s=i,a=r/4):a=r/(2*Math.PI)*Math.asin(i/s),s*Math.pow(2,-10*t)*Math.sin((t*n-a)*(2*Math.PI)/r)+i+e)},ElasticEaseInOut(t,e,i,n,s,r){let a=0;return 0===t?e:2==(t/=n/2)?e+i:(r||(r=n*(.3*1.5)),!s||s<Math.abs(i)?(s=i,a=r/4):a=r/(2*Math.PI)*Math.asin(i/s),t<1?s*Math.pow(2,10*(t-=1))*Math.sin((t*n-a)*(2*Math.PI)/r)*-.5+e:s*Math.pow(2,-10*(t-=1))*Math.sin((t*n-a)*(2*Math.PI)/r)*.5+i+e)},BounceEaseOut:(t,e,i,n)=>(t/=n)<1/2.75?i*(7.5625*t*t)+e:t<2/2.75?i*(7.5625*(t-=1.5/2.75)*t+.75)+e:t<2.5/2.75?i*(7.5625*(t-=2.25/2.75)*t+.9375)+e:i*(7.5625*(t-=2.625/2.75)*t+.984375)+e,BounceEaseIn:(t,e,i,n)=>i-me.BounceEaseOut(n-t,0,i,n)+e,BounceEaseInOut:(t,e,i,n)=>t<n/2?.5*me.BounceEaseIn(2*t,0,i,n)+e:.5*me.BounceEaseOut(2*t-n,0,i,n)+.5*i+e,EaseIn:(t,e,i,n)=>i*(t/=n)*t+e,EaseOut:(t,e,i,n)=>-i*(t/=n)*(t-2)+e,EaseInOut:(t,e,i,n)=>(t/=n/2)<1?i/2*t*t+e:-i/2*(--t*(t-2)-1)+e,StrongEaseIn:(t,e,i,n)=>i*(t/=n)*t*t*t*t+e,StrongEaseOut:(t,e,i,n)=>i*((t=t/n-1)*t*t*t*t+1)+e,StrongEaseInOut:(t,e,i,n)=>(t/=n/2)<1?i/2*t*t*t*t*t+e:i/2*((t-=2)*t*t*t*t+2)+e,Linear:(t,e,i,n)=>i*t/n+e},ve=C._assign(i,{beginUpdateBatch:gt._beginUpdateBatch,Util:C,Transform:a,Node:gt,Container:ft,Stage:Ht,stages:Nt,Layer:ne,FastLayer:se,Group:re,DD:D,Shape:ee,shapes:Jt,Animation:he,Tween:_e,Easings:me,Context:T,Canvas:R});class ye extends ee{_sceneFunc(t){const e=i.getAngle(this.angle()),n=this.clockwise();t.beginPath(),t.arc(0,0,Math.abs(this.outerRadius()),0,e,n),t.arc(0,0,Math.abs(this.innerRadius()),e,0,!n),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*Math.abs(this.outerRadius())}getHeight(){return 2*Math.abs(this.outerRadius())}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}getSelfRect(){const t=Math.abs(this.innerRadius()),e=Math.abs(this.outerRadius()),n=Math.min(t,e),s=Math.max(t,e),r=this.clockwise(),a=i.getAngle(this.angle());if(a%(2*Math.PI)==0)return 0!==a?{x:-s,y:-s,width:2*s,height:2*s}:{x:n,y:0,width:s-n,height:0};const o=2*Math.PI,h=r?-a:a,l=h>=o?o:(h%o+o)%o,d=Math.cos(Math.min(l,Math.PI)),c=Math.sin(Math.min(Math.max(Math.PI,l),3*Math.PI/2)),g=Math.sin(Math.min(l,Math.PI/2)),u=d*(d>0?n:s),f=c*(c>0?n:s),p=g*(g>0?s:n);return{x:u,y:r?-1*p:f,width:1*s-u,height:p-f}}}ye.prototype._centroid=!0,ye.prototype.className="Arc",ye.prototype._attrsAffectingSize=["innerRadius","outerRadius","angle","clockwise"],s(ye,!0),J.addGetterSetter(ye,"innerRadius",0,U()),J.addGetterSetter(ye,"outerRadius",0,U()),J.addGetterSetter(ye,"angle",0,U()),J.addGetterSetter(ye,"clockwise",!1,V());const Se=[-.07652652113349734,.07652652113349734,-.22778585114164507,.22778585114164507,-.37370608871541955,.37370608871541955,-.5108670019508271,.5108670019508271,-.636053680726515,.636053680726515,-.7463319064601508,.7463319064601508,-.8391169718222188,.8391169718222188,-.912234428251326,.912234428251326,-.9639719272779138,.9639719272779138,-.9931285991850949,.9931285991850949],xe=[.15275338713072584,.15275338713072584,.14917298647260374,.14917298647260374,.14209610931838204,.14209610931838204,.13168863844917664,.13168863844917664,.11819453196151841,.11819453196151841,.10193011981724044,.10193011981724044,.08327674157670475,.08327674157670475,.06267204833410907,.06267204833410907,.04060142980038694,.04060142980038694,.017614007139152118,.017614007139152118],be=(t,e,i)=>{const n=i/2;let s=0;for(let i=0;i<Se.length;i++){s+=xe[i]*Ce(t,e,n*Se[i]+n)}return n*s},we=(t,e,i=1)=>be([t[0],t[0]+2/3*(t[1]-t[0]),t[2]+2/3*(t[1]-t[2]),t[2]],[e[0],e[0]+2/3*(e[1]-e[0]),e[2]+2/3*(e[1]-e[2]),e[2]],i);function Ce(t,e,i){const n=1-i,s=n*n,r=2*n*i,a=i*i,o=s*(3*(t[1]-t[0]))+r*(3*(t[2]-t[1]))+a*(3*(t[3]-t[2])),h=s*(3*(e[1]-e[0]))+r*(3*(e[2]-e[1]))+a*(3*(e[3]-e[2]));return Math.sqrt(o*o+h*h)}const ke=(t,e,i)=>{let n=1,s=t/e,r=(t-i(s))/e,a=0;for(;n>.001;){const o=i(s+r),h=Math.abs(t-o)/e;if(h<n)n=h,s+=r;else{const a=i(s-r),o=Math.abs(t-a)/e;o<n?(n=o,s-=r):r/=2}if(a++,a>500)break}return s},Pe=(t,e,i,n)=>{const s=1-n;return s*s*t+2*s*n*e+n*n*i},Me=(t,e,i,n,s,r)=>{const a=[];for(const o of[[t,i,s],[e,n,r]]){const h=(o[0]-o[1])/(o[0]-2*o[1]+o[2]);h>0&&h<1&&a.push(Pe(t,i,s,h),Pe(e,n,r,h))}return a},Te=(t,e,i,n,s)=>{const r=1-s;return r*r*r*t+3*r*r*s*e+3*r*s*s*i+s*s*s*n},Ae=(t,e,i,n,s,r,a,o)=>{const h=[];for(const l of[[t,i,s,a],[e,n,r,o]]){const d=-3*l[0]+9*l[1]-9*l[2]+3*l[3],c=6*l[0]-12*l[1]+6*l[2],g=-3*l[0]+3*l[1],u=c*c-4*d*g;if(u<0)continue;const f=-(c+(c<0?-1:1)*Math.sqrt(u))/2;for(const l of[f/d,g/f])l>0&&l<1&&h.push(Te(t,i,s,a,l),Te(e,n,r,o,l))}return h};function Ee(t,e,i,n,s,r,a){const o=Math.sqrt(Math.pow(i-t,2)+Math.pow(n-e,2)),h=Math.sqrt(Math.pow(s-i,2)+Math.pow(r-n,2)),l=o+h;if(0===l)return[i,n,i,n];const d=a*o/l,c=a*h/l;return[i-d*(s-t),n-d*(r-e),i+c*(s-t),n+c*(r-e)]}function Re(t,e){const i=t.length,n=[];for(let s=2;s<i-2;s+=2){const i=Ee(t[s-2],t[s-1],t[s],t[s+1],t[s+2],t[s+3],e);isNaN(i[0])||(n.push(i[0]),n.push(i[1]),n.push(t[s]),n.push(t[s+1]),n.push(i[2]),n.push(i[3]))}return n}function Ge(t){const e=[];for(let i=0;i+7<t.length;i+=6)e.push(t[i+6],t[i+7],...Ae(t[i],t[i+1],t[i+2],t[i+3],t[i+4],t[i+5],t[i+6],t[i+7]));return e}class Le extends ee{constructor(t){super(t),this.on("pointsChange.konva tensionChange.konva closedChange.konva bezierChange.konva",function(){this._clearCache("tensionPoints")})}_hasTension(){return 0!==this.tension()&&this.points().length>4}_eachTensionSegment(t,e){const i=this.points(),n=i.length,s=this.closed(),r=this.getTensionPoints(),a=r.length;let o=i[0],h=i[1],l=s?0:4;for(s||(t(o,h,r[0],r[1],r[2],r[3]),o=r[2],h=r[3]);l<a-2;){const t=r[l++],i=r[l++],n=r[l++],s=r[l++],a=r[l++],d=r[l++];e(o,h,t,i,n,s,a,d),o=a,h=d}s||t(o,h,r[a-2],r[a-1],i[n-2],i[n-1])}_getStrokePadding(t=(4!==this.points().length||this.closed()?void 0:1)){return super._getStrokePadding(t)}_sceneFunc(t){const e=this.points(),i=e.length,n=this.closed(),s=this.bezier();if(!i)return;let r=0;if(t.beginPath(),t.moveTo(e[0],e[1]),this._hasTension())this._eachTensionSegment((e,i,n,s,r,a)=>t.quadraticCurveTo(n,s,r,a),(e,i,n,s,r,a,o,h)=>t.bezierCurveTo(n,s,r,a,o,h));else if(s)for(r=2;r<i;)t.bezierCurveTo(e[r++],e[r++],e[r++],e[r++],e[r++],e[r++]);else for(r=2;r<i;r+=2)t.lineTo(e[r],e[r+1]);n?(t.closePath(),t.fillStrokeShape(this)):t.strokeShape(this)}getTensionPoints(){return this._getCache("tensionPoints",this._getTensionPoints)}_getTensionPoints(){return this.closed()?this._getTensionPointsClosed():Re(this.points(),this.tension())}_getTensionPointsClosed(){const t=this.points(),e=t.length,i=this.tension(),n=Ee(t[e-2],t[e-1],t[0],t[1],t[2],t[3],i),s=Ee(t[e-4],t[e-3],t[e-2],t[e-1],t[0],t[1],i),r=Re(t,i);return[n[2],n[3]].concat(r).concat([s[0],s[1],t[e-2],t[e-1],s[2],s[3],n[0],n[1],t[0],t[1]])}getWidth(){return this.getSelfRect().width}getHeight(){return this.getSelfRect().height}getSelfRect(){let t=this.points();if(t.length<4)return{x:t[0]||0,y:t[1]||0,width:0,height:0};if(this._hasTension()){const e=[t[0],t[1]];this._eachTensionSegment((t,i,n,s,r,a)=>e.push(r,a,...Me(t,i,n,s,r,a)),(t,i,n,s,r,a,o,h)=>e.push(o,h,...Ae(t,i,n,s,r,a,o,h))),t=e}else this.bezier()&&(t=[t[0],t[1],...Ge(t)]);return C._getPointsRect(t)}}Le.prototype.className="Line",Le.prototype._attrsAffectingSize=["points","bezier","tension","closed"],s(Le,!0),J.addGetterSetter(Le,"closed",!1),J.addGetterSetter(Le,"bezier",!1),J.addGetterSetter(Le,"tension",0,U()),J.addGetterSetter(Le,"points",[],function(){if(i.isUnminified)return function(t,e){return t instanceof p||(C._isArray(t)?t.forEach(function(t){C._isNumber(t)||C.warn('"'+e+'" attribute has non numeric element '+t+". Make sure that all elements are numbers.")}):C.warn(H(t)+' is a not valid value for "'+e+'" attribute. The value should be a array of numbers.')),t}}());const De={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7,z:0},Ie=2*Math.PI;class Fe extends ee{constructor(t){super(t),this.dataArray=[],this.pathLength=0,this._readDataAttribute(),this.on("dataChange.konva",function(){this._readDataAttribute()})}_readDataAttribute(){this.dataArray=Fe.parsePathData(this.data()),this.pathLength=Fe.getPathLength(this.dataArray)}_sceneFunc(t){const e=this.dataArray;t.beginPath();let i=!1;for(let n=0;n<e.length;n++){const s=e[n].command,r=e[n].points;switch(s){case"L":t.lineTo(r[0],r[1]);break;case"M":t.moveTo(r[0],r[1]);break;case"C":t.bezierCurveTo(r[0],r[1],r[2],r[3],r[4],r[5]);break;case"Q":t.quadraticCurveTo(r[0],r[1],r[2],r[3]);break;case"A":t.ellipse(r[0],r[1],r[2],r[3],r[6],r[4],r[4]+r[5],!r[7]);break;case"z":i=!0,t.closePath()}}i||this.hasFill()?t.fillStrokeShape(this):t.strokeShape(this)}getWidth(){return this.getSelfRect().width}getHeight(){return this.getSelfRect().height}getSelfRect(){const t=[];return this.dataArray.forEach(function(e){if("A"===e.command){const[i,n,s,r,a,o,h]=e.points,l=Math.cos(h),d=Math.sin(h),c=Fe.getPointOnEllipticalArc(i,n,s,r,a+o,h);t.push(e.start.x,e.start.y,c.x,c.y);const g=Math.atan2(-r*d,s*l),u=Math.atan2(r*l,s*d);[g,g+Math.PI,u,u+Math.PI].forEach(e=>{if(((e-a)*Math.sign(o)%Ie+Ie)%Ie<Math.abs(o)){const a=Fe.getPointOnEllipticalArc(i,n,s,r,e,h);t.push(a.x,a.y)}})}else"C"===e.command?t.push(e.start.x,e.start.y,e.points[4],e.points[5],...Ae(e.start.x,e.start.y,e.points[0],e.points[1],e.points[2],e.points[3],e.points[4],e.points[5])):"Q"===e.command?t.push(e.start.x,e.start.y,e.points[2],e.points[3],...Me(e.start.x,e.start.y,e.points[0],e.points[1],e.points[2],e.points[3])):t.push(...e.points)}),C._getPointsRect(t)}getLength(){return this.pathLength}getPointAtLength(t){return Fe.getPointAtLengthOfDataArray(t,this.dataArray)}static getLineLength(t,e,i,n){return Math.sqrt((i-t)*(i-t)+(n-e)*(n-e))}static getPathLength(t){let e=0;for(let i=0;i<t.length;++i)e+=t[i].pathLength;return e}static getPointAtLengthOfDataArray(t,e,i){var n,s;let r,a=null!==(n=null==i?void 0:i.index)&&void 0!==n?n:0,o=null!==(s=null==i?void 0:i.offset)&&void 0!==s?s:0,h=e.length;if(!h)return null;for(;a>0&&t<=o;)o-=e[--a].pathLength;for(t-=o;a<h&&t>e[a].pathLength;){const i=e[a].pathLength;t-=i,o+=i,++a}if(i&&a<h&&(i.index=a,i.offset=o),a===h&&(a--,t=e[a].pathLength),t<.01){return"M"===e[a].command?(r=e[a].points.slice(0,2),{x:r[0],y:r[1]}):{x:e[a].start.x,y:e[a].start.y}}const l=e[a],d=l.points;switch(l.command){case"L":case"z":return Fe.getPointOnLine(t,l.start.x,l.start.y,d[0],d[1]);case"C":return Fe.getPointOnCubicBezier(ke(t,l.pathLength,t=>be([l.start.x,d[0],d[2],d[4]],[l.start.y,d[1],d[3],d[5]],t)),l.start.x,l.start.y,d[0],d[1],d[2],d[3],d[4],d[5]);case"Q":return Fe.getPointOnQuadraticBezier(ke(t,l.pathLength,t=>we([l.start.x,d[0],d[2]],[l.start.y,d[1],d[3]],t)),l.start.x,l.start.y,d[0],d[1],d[2],d[3]);case"A":return Fe.getPointOnEllipticalArc(d[0],d[1],d[2],d[3],d[2]===d[3]?d[4]+d[5]*t/l.pathLength:Fe._walkArc(d,t).theta,d[6])}return null}static getPointOnLine(t,e,i,n,s,r,a){r=null!=r?r:e,a=null!=a?a:i;const o=this.getLineLength(e,i,n,s);if(o<1e-10)return{x:e,y:i};if(n===e)return{x:r,y:a+(s>i?t:-t)};const h=(s-i)/(n-e),l=Math.sqrt(t*t/(1+h*h))*(n<e?-1:1),d=h*l;if(Math.abs(a-i-h*(r-e))<1e-10)return{x:r+l,y:a+d};const c=((r-e)*(n-e)+(a-i)*(s-i))/(o*o),g=e+c*(n-e),u=i+c*(s-i),f=this.getLineLength(r,a,g,u),p=Math.sqrt(t*t-f*f),_=Math.sqrt(p*p/(1+h*h))*(n<e?-1:1);return{x:g+_,y:u+h*_}}static getPointOnCubicBezier(t,e,i,n,s,r,a,o,h){function l(t){return t*t*t}function d(t){return 3*t*t*(1-t)}function c(t){return 3*t*(1-t)*(1-t)}function g(t){return(1-t)*(1-t)*(1-t)}return{x:o*l(t)+r*d(t)+n*c(t)+e*g(t),y:h*l(t)+a*d(t)+s*c(t)+i*g(t)}}static getPointOnQuadraticBezier(t,e,i,n,s,r,a){function o(t){return t*t}function h(t){return 2*t*(1-t)}function l(t){return(1-t)*(1-t)}return{x:r*o(t)+n*h(t)+e*l(t),y:a*o(t)+s*h(t)+i*l(t)}}static getPointOnEllipticalArc(t,e,i,n,s,r){const a=Math.cos(r),o=Math.sin(r),h=i*Math.cos(s),l=n*Math.sin(s);return{x:t+(h*a-l*o),y:e+(h*o+l*a)}}static parsePathData(t){if(!t)return[];let e=t;const i=["m","M","l","L","v","V","h","H","z","Z","c","C","q","Q","t","T","s","S","a","A"];e=e.replace(new RegExp(" ","g"),",");for(let t=0;t<i.length;t++)e=e.replace(new RegExp(i[t],"g"),"|"+i[t]);const n=e.split("|"),s=[],r=[];let a=0,o=0,h=0,l=0;const d=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/gi;let c;for(let t=1;t<n.length;t++){let e=n[t],i=e.charAt(0);for(e=e.slice(1),r.length=0;c=d.exec(e);)r.push(c[0]);const g=[];let u="A"===i||"a"===i?0:-1;for(let t=0,e=r.length;t<e;t++){let e=r[t];for(;(3===u||4===u)&&e.length>1&&("0"===e[0]||"1"===e[0]);)g.push(+e[0]),u++,e=e.slice(1);const i=parseFloat(e);g.push(isNaN(i)?0:i),u>=0&&(u=(u+1)%7)}let f=0;for(;f<g.length&&!(g.length-f<De[i.toLowerCase()]||"z"===i||"Z"===i);){let t="",e=[];const n=a,r=o;let d,c,u,p,_,m,v,y,S,x;switch(i){case"l":a+=g[f++],o+=g[f++],t="L",e.push(a,o);break;case"L":a=g[f++],o=g[f++],e.push(a,o);break;case"m":a+=g[f++],o+=g[f++],t="M",h=a,l=o,e.push(a,o),i="l";break;case"M":a=g[f++],o=g[f++],t="M",h=a,l=o,e.push(a,o),i="L";break;case"h":a+=g[f++],t="L",e.push(a,o);break;case"H":a=g[f++],t="L",e.push(a,o);break;case"v":o+=g[f++],t="L",e.push(a,o);break;case"V":o=g[f++],t="L",e.push(a,o);break;case"C":e.push(g[f++],g[f++],g[f++],g[f++]),a=g[f++],o=g[f++],e.push(a,o);break;case"c":e.push(a+g[f++],o+g[f++],a+g[f++],o+g[f++]),a+=g[f++],o+=g[f++],t="C",e.push(a,o);break;case"S":c=a,u=o,d=s[s.length-1],"C"===(null==d?void 0:d.command)&&(c=a+(a-d.points[2]),u=o+(o-d.points[3])),e.push(c,u,g[f++],g[f++]),a=g[f++],o=g[f++],t="C",e.push(a,o);break;case"s":c=a,u=o,d=s[s.length-1],"C"===(null==d?void 0:d.command)&&(c=a+(a-d.points[2]),u=o+(o-d.points[3])),e.push(c,u,a+g[f++],o+g[f++]),a+=g[f++],o+=g[f++],t="C",e.push(a,o);break;case"Q":e.push(g[f++],g[f++]),a=g[f++],o=g[f++],e.push(a,o);break;case"q":e.push(a+g[f++],o+g[f++]),a+=g[f++],o+=g[f++],t="Q",e.push(a,o);break;case"T":c=a,u=o,d=s[s.length-1],"Q"===(null==d?void 0:d.command)&&(c=a+(a-d.points[0]),u=o+(o-d.points[1])),a=g[f++],o=g[f++],t="Q",e.push(c,u,a,o);break;case"t":c=a,u=o,d=s[s.length-1],"Q"===(null==d?void 0:d.command)&&(c=a+(a-d.points[0]),u=o+(o-d.points[1])),a+=g[f++],o+=g[f++],t="Q",e.push(c,u,a,o);break;case"A":case"a":if(p=Math.abs(g[f++]),_=Math.abs(g[f++]),m=g[f++],v=g[f++],y=g[f++],S=a,x=o,"a"===i?(a+=g[f++],o+=g[f++]):(a=g[f++],o=g[f++]),t="A",a===S&&o===x)continue;p&&_?e=this.convertEndpointToCenterParameterization(S,x,a,o,v,y,p,_,m):(t="L",e.push(a,o))}s.push({command:t||i,points:e,start:{x:n,y:r},pathLength:this.calcLength(n,r,t||i,e)})}"z"!==i&&"Z"!==i||(s.push({command:"z",points:[h,l],start:{x:a,y:o},pathLength:this.getLineLength(a,o,h,l)}),a=h,o=l)}return s}static _walkArc(t,e){const[i,n,s,r,a,o]=t,h=Math.max(1,Math.ceil(Math.abs(o)/(Math.PI/180)));let l=Fe.getPointOnEllipticalArc(i,n,s,r,a,0),d=a,c=0;for(let t=1;t<=h;t++){const g=a+o*t/h,u=Fe.getPointOnEllipticalArc(i,n,s,r,g,0),f=Fe.getLineLength(l.x,l.y,u.x,u.y);if(c+f>=e)return{theta:d+(e-c)/f*(g-d),length:e};c+=f,l=u,d=g}return{theta:d,length:c}}static calcLength(t,e,i,n){const s=Fe;switch(i){case"L":return s.getLineLength(t,e,n[0],n[1]);case"C":return be([t,n[0],n[2],n[4]],[e,n[1],n[3],n[5]],1);case"Q":return we([t,n[0],n[2]],[e,n[1],n[3]],1);case"A":return s._walkArc(n,1/0).length}return 0}static convertEndpointToCenterParameterization(t,e,i,n,s,r,a,o,h){const l=h*(Math.PI/180),d=Math.cos(l)*(t-i)/2+Math.sin(l)*(e-n)/2,c=-1*Math.sin(l)*(t-i)/2+Math.cos(l)*(e-n)/2,g=d*d/(a*a)+c*c/(o*o);g>1&&(a*=Math.sqrt(g),o*=Math.sqrt(g));let u=Math.sqrt((a*a*(o*o)-a*a*(c*c)-o*o*(d*d))/(a*a*(c*c)+o*o*(d*d)));s===r&&(u*=-1),isNaN(u)&&(u=0);const f=u*a*c/o,p=u*-o*d/a,_=(t+i)/2+Math.cos(l)*f-Math.sin(l)*p,m=(e+n)/2+Math.sin(l)*f+Math.cos(l)*p,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])/(v(t)*v(e))},S=function(t,e){return(t[0]*e[1]<t[1]*e[0]?-1:1)*Math.acos(y(t,e))},x=S([1,0],[(d-f)/a,(c-p)/o]),b=[(d-f)/a,(c-p)/o],w=[(-1*d-f)/a,(-1*c-p)/o];let C=S(b,w);return y(b,w)<=-1&&(C=Math.PI),y(b,w)>=1&&(C=0),0===r&&C>0&&(C-=2*Math.PI),1===r&&C<0&&(C+=2*Math.PI),[_,m,a,o,x,C,l,r]}}Fe.prototype.className="Path",Fe.prototype._attrsAffectingSize=["data"],s(Fe,!0),J.addGetterSetter(Fe,"data");class Oe extends Le{_getStrokePadding(){return super._getStrokePadding(this.pointerAtBeginning()||this.pointerAtEnding()?this.miterLimit()||10:void 0)}_sceneFunc(t){super._sceneFunc(t);const e=this.points(),i=e.length;if(i<4)return;const n=this.pointerLength(),s=this.pointerWidth();this.pointerAtEnding()&&(t.save(),t.beginPath(),t.translate(e[i-2],e[i-1]),t.rotate(this._getPointerAngle(!1)),t.moveTo(0,0),t.lineTo(-n,s/2),t.lineTo(-n,-s/2),t.closePath(),t.restore(),this.__fillStroke(t)),this.pointerAtBeginning()&&(t.save(),t.beginPath(),t.translate(e[0],e[1]),t.rotate(this._getPointerAngle(!0)),t.moveTo(0,0),t.lineTo(-n,s/2),t.lineTo(-n,-s/2),t.closePath(),t.restore(),this.__fillStroke(t))}_getPointerAngle(t){const e=this.points(),i=e.length,n=0!==this.tension()&&i>4,s=n?this.getTensionPoints():e,r=t?e[0]:e[i-2],a=t?e[1]:e[i-1];let o=0,h=0;if(n&&t)o=r-(s[0]+s[2])/2,h=a-(s[1]+s[3])/2;else if(n){const t=s[s.length-4],e=s[s.length-3],i=s[s.length-2],n=s[s.length-1],l=Fe.calcLength(t,e,"Q",[i,n,r,a]),d=Fe.getPointOnQuadraticBezier(l?Math.max(0,1-this.pointerLength()/l):0,t,e,i,n,r,a);o=r-d.x,h=a-d.y}for(let e=t?0:s.length-2;!o&&!h&&e>=0&&e<s.length;e+=t?2:-2)o=r-s[e],h=a-s[e+1];const l=2*Math.PI;return(Math.atan2(h,o)+l)%l}__fillStroke(t){const e=this.dashEnabled();e&&(this.attrs.dashEnabled=!1,t.setLineDash([])),t.fillStrokeShape(this),e&&(this.attrs.dashEnabled=!0)}getSelfRect(){const t=super.getSelfRect(),e=this.points();if(e.length<4)return t;let i=t.x,n=t.y,s=i+t.width,r=n+t.height;for(const t of[!1,!0]){if(!(t?this.pointerAtBeginning():this.pointerAtEnding()))continue;const a=t?0:e.length-2,o=this._getPointerAngle(t),h=Math.cos(o),l=Math.sin(o),d=e[a]-this.pointerLength()*h,c=e[a+1]-this.pointerLength()*l,g=Math.abs(this.pointerWidth()*l/2),u=Math.abs(this.pointerWidth()*h/2);i=Math.min(i,d-g),n=Math.min(n,c-u),s=Math.max(s,d+g),r=Math.max(r,c+u)}return{x:i,y:n,width:s-i,height:r-n}}}Oe.prototype.className="Arrow",Oe.prototype._attrsAffectingSize=[...Le.prototype._attrsAffectingSize,"pointerLength","pointerWidth","pointerAtBeginning","pointerAtEnding"],s(Oe,!0),J.addGetterSetter(Oe,"pointerLength",10,U()),J.addGetterSetter(Oe,"pointerWidth",10,U()),J.addGetterSetter(Oe,"pointerAtBeginning",!1),J.addGetterSetter(Oe,"pointerAtEnding",!0);class Be extends ee{_getStrokePadding(){return super._getStrokePadding(1)}_sceneFunc(t){t.beginPath(),t.arc(0,0,Math.abs(this.attrs.radius||0),0,2*Math.PI,!1),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*Math.abs(this.radius())}getHeight(){return 2*Math.abs(this.radius())}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}Be.prototype._centroid=!0,Be.prototype.className="Circle",Be.prototype._attrsAffectingSize=["radius"],s(Be,!0),J.addGetterSetter(Be,"radius",0,U());class Ne extends ee{_getStrokePadding(){return super._getStrokePadding(1)}_sceneFunc(t){const e=Math.abs(this.radiusX()),i=Math.abs(this.radiusY());t.beginPath(),t.ellipse(0,0,e,i,0,0,2*Math.PI,!1),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*Math.abs(this.radiusX())}getHeight(){return 2*Math.abs(this.radiusY())}setWidth(t){this.radiusX(t/2)}setHeight(t){this.radiusY(t/2)}}Ne.prototype.className="Ellipse",Ne.prototype._centroid=!0,Ne.prototype._attrsAffectingSize=["radiusX","radiusY"],s(Ne,!0),J.addComponentsGetterSetter(Ne,"radius",["x","y"]),J.addGetterSetter(Ne,"radiusX",0,U()),J.addGetterSetter(Ne,"radiusY",0,U());class We extends ee{constructor(t){super(t),this._loadListener=()=>{this._requestDraw()},this.on("imageChange.konva",t=>{this._removeImageLoad(t.oldVal),this._setImageLoad()}),this._setImageLoad()}_setImageLoad(){var t;const e=this.image();(null==e?void 0:e.complete)&&e.src||(null==e?void 0:e.readyState)>=2||null===(t=null==e?void 0:e.addEventListener)||void 0===t||t.call(e,"videoWidth"in e?"loadeddata":"load",this._loadListener)}_removeImageLoad(t){var e;null===(e=null==t?void 0:t.removeEventListener)||void 0===e||e.call(t,"videoWidth"in t?"loadeddata":"load",this._loadListener)}destroy(){return this._removeImageLoad(this.image()),super.destroy(),this}_useBufferCanvas(t,e=this.getAbsoluteOpacity()){if(!1===this.attrs.perfectDrawEnabled)return!1;const i=!!this.cornerRadius(),n=this.hasShadow();return!(!i||!n)||super._useBufferCanvas(!0,e)}_getStrokePadding(){return super._getStrokePadding(this.strokeScaleEnabled()?1:void 0)}_sceneFunc(t){const e=this.getWidth(),i=this.getHeight(),n=this.cornerRadius(),s=this.attrs.image;if((this.hasFill()||this.hasStroke()||n)&&(t.beginPath(),n?C.drawRoundedRectPath(t,e,i,n):t.rect(0,0,e,i),t.closePath(),t.fillStrokeShape(this)),s){n&&t.clip();const r=this.attrs.cropWidth,a=this.attrs.cropHeight;r&&a?t.drawImage(s,this.cropX(),this.cropY(),r,a,0,0,e,i):t.drawImage(s,0,0,e,i)}}_hitFunc(t){const e=this.width(),i=this.height(),n=this.cornerRadius();t.beginPath(),n?C.drawRoundedRectPath(t,e,i,n):t.rect(0,0,e,i),t.closePath(),t.fillStrokeShape(this)}getWidth(){var t,e,i;const n=this.image();return null!==(i=null!==(e=null!==(t=this.attrs.width)&&void 0!==t?t:null==n?void 0:n.videoWidth)&&void 0!==e?e:null==n?void 0:n.width)&&void 0!==i?i:0}getHeight(){var t,e,i;const n=this.image();return null!==(i=null!==(e=null!==(t=this.attrs.height)&&void 0!==t?t:null==n?void 0:n.videoHeight)&&void 0!==e?e:null==n?void 0:n.height)&&void 0!==i?i:0}static fromURL(t,e,i=null){const n=C.createImageElement();n.onload=()=>{n.onload=n.onerror=null,e(new We({image:n}))},n.onerror=i,n.crossOrigin="Anonymous",n.src=t}}We.prototype.className="Image",We.prototype._attrsAffectingSize=["image"],s(We,!0),J.addGetterSetter(We,"cornerRadius",0,X(4)),J.addGetterSetter(We,"image"),J.addComponentsGetterSetter(We,"crop",["x","y","width","height"]),J.addGetterSetter(We,"cropX",0,U()),J.addGetterSetter(We,"cropY",0,U()),J.addGetterSetter(We,"cropWidth",0,U()),J.addGetterSetter(We,"cropHeight",0,U());const ze="undefined"!=typeof Intl&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"grapheme"}):null;function He(t){return t/15}function Ye(t){return ze?Array.from(ze.segment(t),t=>t.segment):t.match(/\p{RI}\p{RI}|\P{M}(?:\p{M}|\p{Emoji_Modifier}|\uFE0F|\u200D\P{M})*|\p{M}+/gu)||[]}const Ue="auto",Xe="center",je="inherit",qe="justify",$e="left",Ve="middle",Ke="normal",Qe="right",Je="none",Ze=["direction","fontFamily","fontSize","fontStyle","fontVariant","padding","align","verticalAlign","lineHeight","text","width","height","wrap","ellipsis","letterSpacing"];let ti,ei=null;function ii(){return ti||(ti=C.createCanvasElement().getContext("2d"),ti)}class ni extends ee{constructor(t){super(function(t){return(t=t||{}).fill||t.fillLinearGradientColorStops||t.fillRadialGradientColorStops||t.fillPatternImage?t:{...t,fill:"black"}}(t)),this._partialTextX=0,this._partialTextY=0,this._baselineShift=0,this._setTextData()}_sceneFunc(t){var e,n;const s=this.textArr,r=s.length;if(!this.text())return;let a,o=this.padding(),h=this.fontSize(),l=this.lineHeight()*h,d=this.direction(),c=this.align(),g=this.getWidth(),u=this.letterSpacing(),f=this.charRenderFunc(),p=this.textDecoration(),_=-1!==p.indexOf("underline"),m=-1!==p.indexOf("line-through"),v=l/2,y=Ve;if(!i.legacyTextRendering){const t=this.measureSize("M");y="alphabetic";v=((null!==(e=t.fontBoundingBoxAscent)&&void 0!==e?e:t.actualBoundingBoxAscent)-(null!==(n=t.fontBoundingBoxDescent)&&void 0!==n?n:t.actualBoundingBoxDescent))/2+l/2}if(d!==je?t.setAttr("direction",d):d=t.direction,t.setAttr("font",this._getContextFont()),t.setAttr("textBaseline",y),t.setAttr("textAlign",$e),t.translate(o,this._getTextTop()),f){const e=t._getFillStyle(this);void 0!==e&&(t.fillStyle=e),this.hasStroke()&&t._applyStrokeStyle(this)}const S=f?t.fillStyle:void 0,x=f?t.strokeStyle:void 0;let b=0;for(a=0;a<r;a++){let e=0,n=0;const p=s[a],y=p.text,w=p.width,C=p.lastInParagraph;if(t.save(),c===Qe?e+=g-w-2*o:c===Xe&&(e+=(g-w-2*o)/2),_){t.save(),t.beginPath();const i=e,s=v+n+this._getUnderlineOffset();t.moveTo(i,s);const r=c!==qe||C?w:g-2*o;t.lineTo(i+Math.round(r),s),t.lineWidth=He(h),t._applyDecorationStyle(this)&&t.stroke(),t.restore()}const k=e;if("rtl"===d||0===u&&c!==qe&&!f)0!==u&&t.setAttr("letterSpacing",`${u}px`),this._partialTextX=e,this._partialTextY=v+n,this._partialText=y,t.fillStrokeShape(this);else{const i=y.split(" ").length-1,s=Ye(y);for(let r=0;r<s.length;r++){const h=s[r];" "!==h||C||c!==qe||(e+=(g-2*o-w)/i),this._partialTextX=e,this._partialTextY=v+n,this._partialText=h;const l=t.measureText(h).width;if(f){t.save(),f({char:h,index:b,x:e,y:v+n,lineIndex:a,column:r,isLastInLine:r===s.length-1,width:l,context:t});const i=t.fillStyle;i!==S&&(this._partialFillStyle=i);const o=t.strokeStyle;o!==x&&(this._partialStrokeStyle=o)}t.fillStrokeShape(this),f&&(this._partialFillStyle=void 0,this._partialStrokeStyle=void 0,t.restore()),e+=l+u,b++}}if(m){t.save(),t.beginPath();const e=i.legacyTextRendering?0:-Math.round(h/4),s=k;t.moveTo(s,v+n+e);const r=c!==qe||C?w:g-2*o;t.lineTo(s+Math.round(r),v+n+e),t.lineWidth=He(h),t._applyDecorationStyle(this)&&t.stroke(),t.restore()}t.restore(),r>1&&(v+=l)}}_getTextTop(){const t=this.padding(),e=this.getHeight()-this.textArr.length*this.lineHeight()*this.fontSize()-2*t,i=this.verticalAlign();return i===Ve?t+e/2:"bottom"===i?t+e:t}_getUnderlineOffset(){var t;return null!==(t=this.underlineOffset())&&void 0!==t?t:Math.round(this.fontSize()/(i.legacyTextRendering?2:4))}getSelfRect(){const t=super.getSelfRect(),e=this.textArr.length;if(!e||-1===this.textDecoration().indexOf("underline"))return t;const n=this.fontSize(),s=this.lineHeight()*n;let r=this._getTextTop()+e*s-s/2;return i.legacyTextRendering||(r+=this._baselineShift),r+=this._getUnderlineOffset()+He(n)/2,t.height=Math.max(t.y+t.height,r)-t.y,t}_getSelfRectForDrawing(){const t=this.getSelfRect(),e=this.fontSize(),i=this.padding(),n=this.lineHeight()*e,s=this.getWidth()-2*i,r=this.align(),a=this.textArr.length*n,o=this._getTextTop();let h=t.x,l=t.x+t.width;for(const{text:t,width:e}of this.textArr){const n=i+(r===Qe?s-e:r===Xe?(s-e)/2:0),a=Math.min(0,this.letterSpacing())*t.length;h=Math.min(h,n+a),l=Math.max(l,n+e-a)}const d=this.textDecoration().includes("underline"),c=Math.min(t.y,o+(d?Math.min(0,this._getUnderlineOffset()):0));return{x:h-e,y:c-e,width:l-h+2*e,height:Math.max(t.y+t.height,o+a)-c+2*e}}_hitFunc(t){const e=this.getWidth(),i=this.getHeight();t.beginPath(),t.rect(0,0,e,i),t.closePath(),t.fillStrokeShape(this)}setText(t){const e=C._isString(t)?t:null==t?"":t+"";return this._setAttr("text",e),this}getWidth(){return this.attrs.width===Ue||void 0===this.attrs.width?this.getTextWidth()+2*this.padding():this.attrs.width}getHeight(){return this.attrs.height===Ue||void 0===this.attrs.height?this.fontSize()*this.textArr.length*this.lineHeight()+2*this.padding():this.attrs.height}getTextWidth(){return this.textWidth}getTextHeight(){return C.warn("text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height."),this.textHeight}measureSize(t){var e,i,n,s,r,a,o,h,l,d,c;let g,u=ii(),f=this.fontSize();u.save(),u.font=this._getContextFont(),g=u.measureText(t),u.restore();const p=f/100;return{actualBoundingBoxAscent:null!==(e=g.actualBoundingBoxAscent)&&void 0!==e?e:71.58203125*p,actualBoundingBoxDescent:null!==(i=g.actualBoundingBoxDescent)&&void 0!==i?i:0,actualBoundingBoxLeft:null!==(n=g.actualBoundingBoxLeft)&&void 0!==n?n:-7.421875*p,actualBoundingBoxRight:null!==(s=g.actualBoundingBoxRight)&&void 0!==s?s:75.732421875*p,alphabeticBaseline:null!==(r=g.alphabeticBaseline)&&void 0!==r?r:0,emHeightAscent:null!==(a=g.emHeightAscent)&&void 0!==a?a:100*p,emHeightDescent:null!==(o=g.emHeightDescent)&&void 0!==o?o:-20*p,fontBoundingBoxAscent:null!==(h=g.fontBoundingBoxAscent)&&void 0!==h?h:91*p,fontBoundingBoxDescent:null!==(l=g.fontBoundingBoxDescent)&&void 0!==l?l:21*p,hangingBaseline:null!==(d=g.hangingBaseline)&&void 0!==d?d:72.80000305175781*p,ideographicBaseline:null!==(c=g.ideographicBaseline)&&void 0!==c?c:-21*p,width:g.width,height:f}}_getContextFont(){return this.fontStyle()+" "+this.fontVariant()+" "+this.fontSize()+"px "+this.fontFamily().split(",").map(t=>{const e=(t=t.trim()).indexOf(" ")>=0,i=t.indexOf('"')>=0||t.indexOf("'")>=0;return e&&!i&&(t=`"${t}"`),t}).join(", ")}_addTextLine(t){this.align()===qe&&(t=t.trim());const e=this._getTextWidth(t);return this.textArr.push({text:t,width:e,lastInParagraph:!1})}_getTextWidth(t,e){const i=this.letterSpacing(),n=i?i*(null!=e?e:Ye(t).length):0;return ii().measureText(t).width+n}_setTextData(){let t=this.text().split("\n"),e=+this.fontSize(),i=this.lineHeight()*e,n=this.attrs.width,s=this.attrs.height,r=n!==Ue&&void 0!==n,a=s!==Ue&&void 0!==s,o=this.padding(),h=n-2*o,l=s-2*o,d=0,c=this.wrap(),g="char"!==c&&c!==Je,u=this.ellipsis();const f=this.measureSize("M");this._baselineShift=(f.fontBoundingBoxAscent-f.fontBoundingBoxDescent)/2,this.textArr=[];const p=ii();p.font=this._getContextFont(),p.fontKerning="rtl"===this.direction()||0===this.letterSpacing()&&this.align()!==qe&&!this.charRenderFunc()?"auto":"none";const _=u?this._getTextWidth("…"):0;for(let e=0,n=t.length;e<n;++e){let s=t[e],o=this._getTextWidth(s);if(r&&o>h){const t=Ye(s),r=t.length;let c=0;const f=e=>t.slice(c,e).join(""),p=t=>" "===t||"-"===t,m=Math.max(1,Math.ceil(r*h/o));for(;c<r;){const s=u&&a&&d+i>l?_:0,o=t=>!(this._getTextWidth(f(t),t-c)+s>h);let v=c,y=Math.min(r,c+m);for(;o(y)&&(v=y,y!==r);)y=Math.min(r,y+(y-c));for(;y-v>1;){const t=v+y>>>1;o(t)?v=t:y=t}if(v===c)break;if(v===r){this._addTextLine(f(r)),d+=i,a&&d+i>l&&e<n-1&&this._tryToAddEllipsisToLastLine();break}if(g&&!p(t[v])){let e=v-1;for(;e>=c&&!p(t[e]);)e--;e>=c&&(v=e+1)}if(this._addTextLine(f(v).trimRight()),d+=i,this._shouldHandleEllipsis(d)){this._tryToAddEllipsisToLastLine();break}for(c=v;c<r&&!t[c].trim();)c++}}else this._addTextLine(s),d+=i,a&&d+i>l&&e<n-1&&this._tryToAddEllipsisToLastLine();if(this.textArr[this.textArr.length-1]&&(this.textArr[this.textArr.length-1].lastInParagraph=!0),a&&d+i>l)break}this.textHeight=e,this.textWidth=this.textArr.reduce((t,e)=>Math.max(t,e.width),0)}_shouldHandleEllipsis(t){const e=+this.fontSize(),i=this.lineHeight()*e,n=this.attrs.height,s=n!==Ue&&void 0!==n,r=n-2*this.padding();return!(this.wrap()!==Je)||s&&t+i>r}_tryToAddEllipsisToLastLine(){const t=this.attrs.width,e=t!==Ue&&void 0!==t,i=t-2*this.padding(),n=this.ellipsis(),s=this.textArr[this.textArr.length-1];if(!s||!n)return;let r=s.text+"…";if(e){const t=Ye(s.text);for(;t.length&&this._getTextWidth(r)>i;)t.pop(),r=t.join("")+"…";this._getTextWidth(r)>i&&(r="")}s.text=r,s.width=this._getTextWidth(r)}getStrokeScaleEnabled(){return!0}_getStrokePadding(){return super._getStrokePadding(2)}_useBufferCanvas(t,e=this.getAbsoluteOpacity()){if(!1===this.attrs.perfectDrawEnabled)return!1;const i=-1!==this.textDecoration().indexOf("underline")||-1!==this.textDecoration().indexOf("line-through"),n=this.hasShadow();return!(!i||!n)||(!(!n||1===e||!function(){if(null!==ei)return ei;let t;ei=!1;try{t=C.createCanvasElement(),t.width=10,t.height=10;const e=t.getContext("2d");if(e){e.globalAlpha=0,e.shadowColor="black",e.shadowBlur=5,e.shadowOffsetX=5,e.shadowOffsetY=5,e.fillStyle="black",e.font="10px Arial",e.fillText("X",0,10);const t=e.getImageData(0,0,10,10).data;for(let e=3;e<t.length;e+=4)if(t[e]>0){ei=!0;break}}}catch(t){}finally{t&&C.releaseCanvas(t)}return ei}())||super._useBufferCanvas(t,e))}}ni.prototype._fillFunc=function(t){this._partialFillStyle&&t.setAttr("fillStyle",this._partialFillStyle),t.fillText(this._partialText,this._partialTextX,this._partialTextY)},ni.prototype._strokeFunc=function(t){t.setAttr("miterLimit",2),this._partialStrokeStyle&&t.setAttr("strokeStyle",this._partialStrokeStyle),t.strokeText(this._partialText,this._partialTextX,this._partialTextY)},ni.prototype.className="Text",ni.prototype._attrsAffectingSize=Ze.filter(t=>"width"!==t&&"height"!==t).concat(["textDecoration","underlineOffset"]),s(ni,!0),ni.prototype.on(Ze.map(t=>t+"Change.konva").join(" "),function(){this._setTextData()}),J.overWriteSetter(ni,"width",j()),J.overWriteSetter(ni,"height",j()),J.addGetterSetter(ni,"direction",je),J.addGetterSetter(ni,"fontFamily","Arial"),J.addGetterSetter(ni,"fontSize",12,U()),J.addGetterSetter(ni,"fontStyle",Ke),J.addGetterSetter(ni,"fontVariant",Ke),J.addGetterSetter(ni,"padding",0,U()),J.addGetterSetter(ni,"align",$e),J.addGetterSetter(ni,"verticalAlign","top"),J.addGetterSetter(ni,"lineHeight",1,U()),J.addGetterSetter(ni,"wrap","word"),J.addGetterSetter(ni,"ellipsis",!1,V()),J.addGetterSetter(ni,"letterSpacing",0,U()),J.addGetterSetter(ni,"text","",q()),J.addGetterSetter(ni,"textDecoration",""),J.addGetterSetter(ni,"underlineOffset",void 0,U()),J.addGetterSetter(ni,"charRenderFunc",void 0);const si=[...ni.prototype._attrsAffectingSize,"width","height","pointerDirection","pointerWidth","pointerHeight"].map(t=>t+"Change.konva").join(" "),ri="up",ai="right",oi="down",hi="left";class li extends re{constructor(t){super(t),this._sync=this._sync.bind(this),this.on("add.konva",function(t){t.child.off(si,this._sync).on(si,this._sync),this._sync()})}getText(){return this.find("Text")[0]}getTag(){return this.find("Tag")[0]}getWidth(){return this.getText().width()}getHeight(){return this.getText().height()}_sync(){let t,e,i,n,s,r,a,o=this.getText(),h=this.getTag();if(o&&h){switch(t=o.width(),e=o.height(),i=h.pointerDirection(),n=h.pointerWidth(),a=h.pointerHeight(),s=0,r=0,i){case ri:s=t/2,r=-1*a;break;case ai:s=t+n,r=e/2;break;case oi:s=t/2,r=e+a;break;case hi:s=-1*n,r=e/2}h.setAttrs({x:-1*s,y:-1*r,width:t,height:e}),o.setAttrs({x:-1*s,y:-1*r})}}}li.prototype.className="Label",s(li);class di extends ee{_sceneFunc(t){const e=this.width(),i=this.height(),n=this.pointerDirection(),s=this.pointerWidth(),r=this.pointerHeight(),a=this.cornerRadius(),[o,h,l,d]=C._cornerRadii(a,e,i);t.beginPath(),t.moveTo(o,0),n===ri&&(t.lineTo((e-s)/2,0),t.lineTo(e/2,-1*r),t.lineTo((e+s)/2,0)),t.lineTo(e-h,0),t.arc(e-h,h,h,3*Math.PI/2,0,!1),n===ai&&(t.lineTo(e,(i-r)/2),t.lineTo(e+s,i/2),t.lineTo(e,(i+r)/2)),t.lineTo(e,i-l),t.arc(e-l,i-l,l,0,Math.PI/2,!1),n===oi&&(t.lineTo((e+s)/2,i),t.lineTo(e/2,i+r),t.lineTo((e-s)/2,i)),t.lineTo(d,i),t.arc(d,i-d,d,Math.PI/2,Math.PI,!1),n===hi&&(t.lineTo(0,(i+r)/2),t.lineTo(-1*s,i/2),t.lineTo(0,(i-r)/2)),t.lineTo(0,o),t.arc(o,o,o,Math.PI,3*Math.PI/2,!1),t.closePath(),t.fillStrokeShape(this)}getSelfRect(){const t=this.pointerWidth(),e=this.pointerHeight(),i=this.pointerDirection(),n=this.width(),s=this.height();return i===ri||i===oi?{x:Math.min(0,(n-t)/2),y:i===ri?-e:0,width:Math.max(n,t),height:s+e}:i===hi||i===ai?{x:i===hi?-t:0,y:Math.min(0,(s-e)/2),width:n+t,height:Math.max(s,e)}:{x:0,y:0,width:n,height:s}}}di.prototype.className="Tag",s(di,!0),J.addGetterSetter(di,"pointerDirection","none"),J.addGetterSetter(di,"pointerWidth",0,U()),J.addGetterSetter(di,"pointerHeight",0,U()),J.addGetterSetter(di,"cornerRadius",0,X(4));class ci extends ee{_getStrokePadding(){return super._getStrokePadding(this.strokeScaleEnabled()?1:void 0)}_sceneFunc(t){const e=this.cornerRadius(),i=this.width(),n=this.height();t.beginPath(),e?C.drawRoundedRectPath(t,i,n,e):t.rect(0,0,i,n),t.closePath(),t.fillStrokeShape(this)}}ci.prototype.className="Rect",s(ci,!0),J.addGetterSetter(ci,"cornerRadius",0,X(4));class gi extends ee{_sceneFunc(t){const e=this._getPoints(),i=this.radius(),n=this.sides(),s=this.cornerRadius();if(e.length){if(t.beginPath(),s)C.drawRoundedPolygonPath(t,e,n,i,s);else{t.moveTo(e[0].x,e[0].y);for(let i=1;i<e.length;i++)t.lineTo(e[i].x,e[i].y)}t.closePath(),t.fillStrokeShape(this)}}_getPoints(){const t=this.attrs.sides,e=this.attrs.radius||0,i=[];for(let n=0;n<t;n++)i.push({x:e*Math.sin(2*n*Math.PI/t),y:-1*e*Math.cos(2*n*Math.PI/t)});return i}getSelfRect(){const t=this._getPoints();if(!t.length)return{x:0,y:0,width:0,height:0};let e=t[0].x,i=t[0].x,n=t[0].y,s=t[0].y;return t.forEach(t=>{e=Math.min(e,t.x),i=Math.max(i,t.x),n=Math.min(n,t.y),s=Math.max(s,t.y)}),{x:e,y:n,width:i-e,height:s-n}}getWidth(){return 2*this.radius()}getHeight(){return 2*this.radius()}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}gi.prototype.className="RegularPolygon",gi.prototype._centroid=!0,gi.prototype._attrsAffectingSize=["radius","sides"],s(gi,!0),J.addGetterSetter(gi,"radius",0,U()),J.addGetterSetter(gi,"sides",0,U()),J.addGetterSetter(gi,"cornerRadius",0,X(4));const ui=2*Math.PI;class fi extends ee{_getStrokePadding(){return super._getStrokePadding(1)}_sceneFunc(t){const e=Math.abs(this.innerRadius()),i=Math.abs(this.outerRadius());t.beginPath(),t.arc(0,0,e,0,ui,!1),t.moveTo(i,0),t.arc(0,0,i,ui,0,!0),t.closePath(),t.fillStrokeShape(this)}getSelfRect(){const t=Math.max(Math.abs(this.innerRadius()),Math.abs(this.outerRadius()));return{x:-t,y:-t,width:2*t,height:2*t}}getWidth(){return 2*Math.abs(this.outerRadius())}getHeight(){return 2*Math.abs(this.outerRadius())}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}}fi.prototype.className="Ring",fi.prototype._centroid=!0,fi.prototype._attrsAffectingSize=["innerRadius","outerRadius"],s(fi,!0),J.addGetterSetter(fi,"innerRadius",0,U()),J.addGetterSetter(fi,"outerRadius",0,U());class pi extends ee{constructor(t){super(t),this._updated=!0,this.anim=new he(()=>{const t=this._updated;return this._updated=!1,t}),this.on("animationChange.konva",function(){this.frameIndex(0)}),this.on("frameIndexChange.konva",function(){this._updated=!0}),this.on("frameRateChange.konva",function(){this.anim.isRunning()&&(clearInterval(this.interval),this._setInterval())})}_getFrame(){var t,e;const i=this.animation(),n=null===(t=this.animations())||void 0===t?void 0:t[i],s=this.frameIndex(),r=4*s;if(!n||!Number.isInteger(s)||r<0||r+4>n.length)return;const a=(null===(e=this.frameOffsets())||void 0===e?void 0:e[i])||[];return{x:n[r],y:n[r+1],width:n[r+2],height:n[r+3],offsetX:a[2*s]||0,offsetY:a[2*s+1]||0}}_getStrokePadding(){return super._getStrokePadding(this.strokeScaleEnabled()?1:void 0)}_sceneFunc(t){const e=this._getFrame();if(!e)return;const{x:i,y:n,width:s,height:r,offsetX:a,offsetY:o}=e,h=this.image();(this.hasFill()||this.hasStroke())&&(t.beginPath(),t.rect(a,o,s,r),t.closePath(),t.fillStrokeShape(this)),h&&t.drawImage(h,i,n,s,r,a,o,s,r)}_hitFunc(t){const{x:e,y:i,width:n,height:s}=this.getSelfRect();t.beginPath(),t.rect(e,i,n,s),t.closePath(),t.fillShape(this)}getSelfRect(){const t=this._getFrame();return t?{x:t.offsetX,y:t.offsetY,width:t.width,height:t.height}:{x:0,y:0,width:0,height:0}}_useBufferCanvas(t,e=this.getAbsoluteOpacity()){return super._useBufferCanvas(!0,e)}_setInterval(){const t=this;this.interval=setInterval(function(){t._updateIndex()},1e3/this.frameRate())}start(){if(this.isRunning())return;const t=this.getLayer();this.anim.setLayers(t),this._setInterval(),this.anim.start()}stop(){this.anim.stop(),clearInterval(this.interval)}destroy(){return this.stop(),super.destroy()}isRunning(){return this.anim.isRunning()}_updateIndex(){var t;const e=this.frameIndex(),i=null===(t=this.animations())||void 0===t?void 0:t[this.animation()],n=i?i.length/4:0;this.frameIndex(e<n-1?e+1:0)}}pi.prototype.className="Sprite",s(pi,!0),J.addGetterSetter(pi,"animation"),J.addGetterSetter(pi,"animations"),J.addGetterSetter(pi,"frameOffsets"),J.addGetterSetter(pi,"image"),J.addGetterSetter(pi,"frameIndex",0,U()),J.addGetterSetter(pi,"frameRate",17,U()),J.backCompat(pi,{index:"frameIndex",getIndex:"getFrameIndex",setIndex:"setFrameIndex"});class _i extends ee{_sceneFunc(t){const e=this.innerRadius(),i=this.outerRadius(),n=this.numPoints();t.beginPath(),t.moveTo(0,0-i);for(let s=1;s<2*n;s++){const r=s%2==0?i:e,a=r*Math.sin(s*Math.PI/n),o=-1*r*Math.cos(s*Math.PI/n);t.lineTo(a,o)}t.closePath(),t.fillStrokeShape(this)}getSelfRect(){const t=Math.max(Math.abs(this.innerRadius()),Math.abs(this.outerRadius()));return{x:-t,y:-t,width:2*t,height:2*t}}getWidth(){return 2*this.outerRadius()}getHeight(){return 2*this.outerRadius()}setWidth(t){this.outerRadius(t/2)}setHeight(t){this.outerRadius(t/2)}}_i.prototype.className="Star",_i.prototype._centroid=!0,_i.prototype._attrsAffectingSize=["innerRadius","outerRadius"],s(_i,!0),J.addGetterSetter(_i,"numPoints",5,U()),J.addGetterSetter(_i,"innerRadius",0,U()),J.addGetterSetter(_i,"outerRadius",0,U());const mi="normal";function vi(t){t.fillText(this.partialText,0,0)}function yi(t){t.strokeText(this.partialText,0,0)}class Si extends ee{constructor(t){super(t),this.dataArray=[],this._readDataAttribute(),this._setTextData()}_getTextPathLength(){return Fe.getPathLength(this.dataArray)}_getPointAtLength(t,e){if(!this.attrs.data)return null;return t>this.pathLength?null:Fe.getPointAtLengthOfDataArray(t,this.dataArray,e)}_readDataAttribute(){this.dataArray=Fe.parsePathData(this.attrs.data),this.pathLength=this._getTextPathLength()}_sceneFunc(t){t.setAttr("font",this._getContextFont()),t.setAttr("textBaseline",this.textBaseline()),t.setAttr("textAlign","left"),t.save();const e=this.textDecoration(),i=this.fontSize(),n=this._getUnderlineOffset(),s=this.glyphInfo,r=-1!==e.indexOf("underline"),o=-1!==e.indexOf("line-through");r&&t.beginPath();try{for(let e=0;e<s.length;e++){t.save();const i=s[e].p0,o=s[e].rotation;t.translate(i.x,i.y),t.rotate(o),this.partialText=s[e].text,this._styleTransform=(new a).rotate(-o).translate(-i.x,-i.y),t.fillStrokeShape(this),r&&(0===e&&t.moveTo(0,n),t.lineTo(s[e].width,n)),t.restore()}}finally{this._styleTransform=void 0}if(t.lineWidth=He(i),r&&t._applyDecorationStyle(this)&&t.stroke(),o){t.beginPath();for(let e=0;e<s.length;e++){t.save();const i=s[e].p0;t.translate(i.x,i.y),t.rotate(s[e].rotation),0===e&&t.moveTo(0,0),t.lineTo(s[e].width,0),t.restore()}t._applyDecorationStyle(this)&&t.stroke()}t.restore()}_hitFunc(t){t.beginPath();const e=this.glyphInfo;if(e.length>=1){const i=e[0].p0;t.moveTo(i.x,i.y)}for(let i=0;i<e.length;i++){const n=e[i].p1;t.lineTo(n.x,n.y)}t.setAttr("lineWidth",this.fontSize()),t.setAttr("strokeStyle",this.colorKey),t.stroke()}getTextWidth(){return this.textWidth}getTextHeight(){return C.warn("text.getTextHeight() method is deprecated. Use text.height() - for full height and text.fontSize() - for one line height."),this.textHeight}setText(t){return ni.prototype.setText.call(this,t)}_getContextFont(){return ni.prototype._getContextFont.call(this)}_getTextSize(t){const e=ii();e.save(),e.font=this._getContextFont(),e.fontKerning="auto";const i=e.measureText(t);return e.restore(),{width:i.width,height:parseInt(`${this.fontSize()}`,10)}}_setTextData(){const t=Ye(this.text());"rtl"===this.direction()&&t.reverse();const e=this.kerningFunc(),i=[];let n=0;for(let s=0;s<t.length;s++){let r=0;if(e&&s>0)try{r=e(t[s-1],t[s])*this.fontSize()}catch(t){}i.push({char:t[s],width:this._getTextSize(t[s]).width,kern:r}),n+=i[s].width+r}const{width:s,height:r}=this._getTextSize(this.attrs.text);if(this.textWidth=n,this.textHeight=r,this.glyphInfo=[],!this.attrs.data)return null;const a=this.letterSpacing(),o=this.align(),h="justify"===o?this.text().split(" ").length-1:0,l=Math.max(0,n-s),d=Math.max(this.textWidth+(t.length-1)*a,0);let c=0;"center"===o&&(c=Math.max(0,this.pathLength/2-d/2)),"right"===o&&(c=Math.max(0,this.pathLength-d));let g=c;const u=this.dataArray.some((t,e)=>e>0&&"M"===t.command)?void 0:{index:0,offset:0};for(let e=0;e<i.length;e++){g+=i[e].kern;const n=this._getPointAtLength(g,u);if(!n)return;const s=i[e].char;let r=i[e].width+(e<i.length-1?a:0);" "===s&&"justify"===o&&(r+=(this.pathLength-d)/h);const c=g+r,f=this._getPointAtLength(c>this.pathLength&&c-this.pathLength<=l?this.pathLength:c,u);if(!f)return;const p=Fe.getLineLength(n.x,n.y,f.x,f.y),_=Math.atan2(f.y-n.y,f.x-n.x);this.glyphInfo.push({text:t[e],rotation:_,p0:n,p1:f,width:p}),g+=r}}getSelfRect(){if(!this.glyphInfo.length)return{x:0,y:0,width:0,height:0};const t=[];this.glyphInfo.forEach(function(e){t.push(e.p0.x),t.push(e.p0.y),t.push(e.p1.x),t.push(e.p1.y)});const e=C._getPointsRect(t),i=this.fontSize();let n=e.x-i/2,s=e.y-i/2,r=e.x+e.width+i/2,o=e.y+e.height+i/2;if(-1!==this.textDecoration().indexOf("underline")){const t=He(i),e=this._getUnderlineOffset()-t/2;this.glyphInfo.forEach(function(i){const h=(new a).translate(i.p0.x,i.p0.y).rotate(i.rotation)._getTransformedRect({x:0,y:e,width:i.width,height:t});n=Math.min(n,h.x),s=Math.min(s,h.y),r=Math.max(r,h.x+h.width),o=Math.max(o,h.y+h.height)})}return{x:n,y:s,width:r-n,height:o-s}}_getUnderlineOffset(){return this.fontSize()/2+1}getStrokeScaleEnabled(){return!0}_getSelfRectForDrawing(){const t=this.getSelfRect(),e=this.fontSize();return{x:t.x-e,y:t.y-e,width:t.width+2*e,height:t.height+2*e}}}Si.prototype._fillFunc=vi,Si.prototype._strokeFunc=yi,Si.prototype._fillFuncHit=vi,Si.prototype._strokeFuncHit=yi,Si.prototype.className="TextPath";const xi=["text","fontSize","align","letterSpacing","kerningFunc","fontFamily","fontStyle","fontVariant","direction"];Si.prototype._attrsAffectingSize=xi.concat("data","textDecoration"),s(Si,!0),Si.prototype.on("dataChange.konva",function(){this._readDataAttribute(),this._setTextData()}),Si.prototype.on(xi.map(t=>t+"Change.konva").join(" "),function(){this._setTextData()}),J.addGetterSetter(Si,"data"),J.addGetterSetter(Si,"fontFamily","Arial"),J.addGetterSetter(Si,"fontSize",12,U()),J.addGetterSetter(Si,"fontStyle",mi),J.addGetterSetter(Si,"align","left"),J.addGetterSetter(Si,"letterSpacing",0,U()),J.addGetterSetter(Si,"textBaseline","middle"),J.addGetterSetter(Si,"fontVariant",mi),J.addGetterSetter(Si,"text",""),J.addGetterSetter(Si,"textDecoration",""),J.addGetterSetter(Si,"kerningFunc",void 0),J.addGetterSetter(Si,"direction","inherit");const bi="tr-konva",wi=["resizeEnabledChange","rotateAnchorOffsetChange","rotateAnchorAngleChange","rotateEnabledChange","rotateModeChange","enabledAnchorsChange","anchorSizeChange","borderEnabledChange","shouldOverdrawWholeAreaChange","borderStrokeChange","borderStrokeWidthChange","borderDashChange","anchorStrokeChange","anchorStrokeWidthChange","anchorFillChange","anchorCornerRadiusChange","ignoreStrokeChange","anchorStyleFuncChange","paddingChange"].map(t=>t+`.${bi}`).join(" "),Ci="nodesRect",ki=["widthChange","heightChange","scaleXChange","scaleYChange","skewXChange","skewYChange","rotationChange","offsetXChange","offsetYChange","transformsEnabledChange","strokeWidthChange","strokeChange","selfRectFuncChange","strokeLinearGradientColorStopsChange","strokeScaleEnabledChange","strokeEnabledChange","draggableChange"],Pi={"top-left":-45,"top-center":0,"top-right":45,"middle-right":-90,"middle-left":90,"bottom-left":-135,"bottom-center":180,"bottom-right":135},Mi="ontouchstart"in i._global,Ti=["rotater-top-left","rotater-top-right","rotater-bottom-left","rotater-bottom-right"];function Ai(t){return t.startsWith("rotater")}const Ei=Math.PI/12;function Ri(t,e,i){if("rotater"===t)return i;if(Ai(t)){const n=t.slice(8);return function(t,e){return`url("data:image/svg+xml,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><g transform="rotate(${t} 12 12)" stroke-linejoin="round"><path d="M5 8 A11 11 0 0 1 16 19" fill="none" stroke="white" stroke-width="4"/><path d="M2 8 L6 4.5 L6 11.5 Z M16 22 L12.5 18 L19.5 18 Z" fill="black" stroke="white"/><path d="M5 8 A11 11 0 0 1 16 19" fill="none" stroke="black" stroke-width="1.5"/></g></svg>`)}") 12 12, ${e}`}(Math.round(C.radToDeg(e)+Pi[n]-45),i)}e+=C.degToRad(Pi[t]||0);const n=(C.radToDeg(e)%360+360)%360;return C._inRange(n,337.5,360)||C._inRange(n,0,22.5)?"ns-resize":C._inRange(n,22.5,67.5)?"nesw-resize":C._inRange(n,67.5,112.5)?"ew-resize":C._inRange(n,112.5,157.5)?"nwse-resize":C._inRange(n,157.5,202.5)?"ns-resize":C._inRange(n,202.5,247.5)?"nesw-resize":C._inRange(n,247.5,292.5)?"ew-resize":C._inRange(n,292.5,337.5)?"nwse-resize":(C.error("Transformer has unknown angle for cursor detection: "+n),"pointer")}const Gi=["top-left","top-center","top-right","middle-right","middle-left","bottom-left","bottom-center","bottom-right"];function Li(t){return{x:t.x+t.width/2*Math.cos(t.rotation)+t.height/2*Math.sin(-t.rotation),y:t.y+t.height/2*Math.cos(t.rotation)+t.width/2*Math.sin(t.rotation)}}function Di(t,e){return function(t,e,i){const n=i.x+(t.x-i.x)*Math.cos(e)-(t.y-i.y)*Math.sin(e),s=i.y+(t.x-i.x)*Math.sin(e)+(t.y-i.y)*Math.cos(e);return{...t,rotation:t.rotation+e,x:n,y:s}}(t,e,Li(t))}function Ii(t,e,i){const n=C.degToRad(t.rotateAnchorAngle()),s=Math.sin(n),r=-Math.cos(n),a=e/2,o=i/2;let h=1/0;r<0?h=Math.min(h,-o/r):r>0&&(h=Math.min(h,(i-o)/r)),s<0?h=Math.min(h,-a/s):s>0&&(h=Math.min(h,(e-a)/s));const l=a+s*h,d=o+r*h,c=t.rotateAnchorOffset()+t.padding();return{edgeX:l,edgeY:d,endX:l+s*c,endY:d+r*c}}const Fi=new Set;class Oi extends re{static _isLayerTransforming(t){for(const e of Fi)if(e.getLayer()===t||e._nodes.some(e=>e.getLayer()===t))return!0;return!1}constructor(t){super(t),this._movingAnchorName=null,this._anchors={},this._transforming=!1,this._fitting=!1,this._transformWindow=null,this._elementsCreated=!1,this._updatePending=!1,this._createElements(),this._handleMouseMove=this._handleMouseMove.bind(this),this._handleMouseUp=this._handleMouseUp.bind(this),this.update=this.update.bind(this),this._syncUpdate=this._syncUpdate.bind(this),this.on(wi,t=>{"ignoreStrokeChange"===t.type&&this._resetTransformCache(),this.update()}),this.on(`rotationChange.${bi}`,()=>this._clearCache(Ci)),this.getNode()&&this.update()}attachTo(t){return this.setNode(t),this}setNode(t){return C.warn("tr.setNode(shape), tr.node(shape) and tr.attachTo(shape) methods are deprecated. Please use tr.nodes(nodesArray) instead."),this.setNodes([t])}getNode(){return this._nodes&&this._nodes[0]}_getEventNamespace(){return bi+this._id}setNodes(t=[]){this._nodes&&this._nodes.length&&this.detach();const e=new Set(t);for(const t of e)t.isAncestorOf(this)&&(C.error("Konva.Transformer cannot be an a child of the node you are trying to attach"),e.delete(t));const i=Array.from(e).filter(t=>{for(let i=t.getParent();i;i=i.getParent())if(e.has(i))return!1;return!0});return this._nodes=t=i,this._resetRotation(),this._nodes.forEach(t=>{const e=()=>{var e;this._fitting?null===(e=this._nodeRectCache)||void 0===e||e.delete(t):(1===this.nodes().length&&this.useSingleNodeRotation()&&this.rotation(this.nodes()[0].getAbsoluteRotation()),this._resetTransformCache(t),this.isDragging()||this._scheduleUpdate())};if(t._attrsAffectingSize.length){const i=t._attrsAffectingSize.map(t=>t+"Change."+this._getEventNamespace()).join(" ");t.on(i,e)}t.on(ki.map(t=>t+`.${this._getEventNamespace()}`).join(" "),e),t.on(`absoluteTransformChange.${this._getEventNamespace()}`,e),t instanceof ft&&t._addSubtreeObserver(this),t.on(`destroy.${this._getEventNamespace()}`,()=>{this._removeNode(t)}),this._proxyDrag(t)}),this._resetTransformCache(),this._elementsCreated&&this.update(),this}_proxyDrag(t){let e;t.on(`dragstart.${this._getEventNamespace()}`,i=>{e=t.getAbsolutePosition(),this.isDragging()||t===this._back||this.startDrag(i,!1)}),t.on(`dragmove.${this._getEventNamespace()}`,i=>{if(!e)return;const n=t.getAbsolutePosition(),s=n.x-e.x,r=n.y-e.y;this.nodes().forEach(e=>{if(e===t)return;if(e.isDragging())return;const n=e.getAbsolutePosition();e.setAbsolutePosition({x:n.x+s,y:n.y+r}),e.startDrag(i)}),e=null})}_detachNode(t){t.off("."+this._getEventNamespace()),t._removeSubtreeObserver(this)}_resetRotation(){const t=1===this._nodes.length&&this.useSingleNodeRotation();this.rotation(t?this._nodes[0].getAbsoluteRotation():0)}_removeNode(t){this._detachNode(t),this._nodes=this._nodes.filter(e=>e!==t),this._resetRotation(),this._resetTransformCache(t),this._scheduleUpdate()}getNodes(){return this._nodes||[]}getActiveAnchor(){return this._movingAnchorName}detach(){var t,e;null===(t=this._nodes)||void 0===t||t.forEach(t=>this._detachNode(t)),this._nodes=[],this._updatePending=!1,this._resetTransformCache(),null===(e=this.getLayer())||void 0===e||e.batchDraw()}_resetTransformCache(t){var e,i;t?null===(e=this._nodeRectCache)||void 0===e||e.delete(t):null===(i=this._nodeRectCache)||void 0===i||i.clear(),this._clearCache(Ci),this._clearCache("transform"),this._clearSelfAndDescendantCache("absoluteTransform")}_onSubtreeChange(t){var e,i;if(this._fitting)return;(!this._updatePending||!!this._cache[Ci])&&this._resetTransformCache(t),gt._updateBatchDepth>0?this._scheduleUpdate():this._updatePending||(this._updatePending=!0,C.requestAnimFrame(this._syncUpdate,null===(e=this.getStage())||void 0===e?void 0:e._getOwnerWindow()),null===(i=this.getLayer())||void 0===i||i.batchDraw())}_syncUpdate(){!this._updatePending||this._fitting||this.isDragging()||this._update()}drawScene(t,e){return this._syncUpdate(),super.drawScene(t,e)}drawHit(t,e){return this._syncUpdate(),super.drawHit(t,e)}_getNodeRect(){return this._getCache(Ci,this.__getNodeRect)}__getNodeRect(){var t;if(!this.getNode())return{x:-1e8,y:-1e8,width:0,height:0,rotation:0};const e=i.getAngle(this.rotation()),n=this.ignoreStroke(),s=new a;s.rotate(-e);const r=this._nodeRectCache||(this._nodeRectCache=new Map);let o=1/0,h=1/0,l=-1/0,d=-1/0;for(const i of this.nodes()){const c=i instanceof ee&&i.getSelfRect===ee.prototype.getSelfRect&&!i.attrs.selfRectFunc&&!i._hasCachedAncestor(),g=c?i.width():0,u=c?i.height():0;c&&(null!==(t=i._attrsVersion)&&void 0!==t||(i._attrsVersion=0));let f=c?r.get(i):void 0;if(!f||f.rotation!==e||f.ignoreStroke!==n||f.version!==i._attrsVersion||f.width!==g||f.height!==u){let t=i.getAbsoluteTransform();const[o,h,l,d]=t.getMatrix(),p=o*d-h*l===0,_=i.getClientRect({skipTransform:!p,skipShadow:!0,skipStroke:n}),m=[{x:_.x,y:_.y},{x:_.x+_.width,y:_.y},{x:_.x+_.width,y:_.y+_.height},{x:_.x,y:_.y+_.height}];p&&(t=new a),f={rotation:e,ignoreStroke:n,width:g,height:u,version:i._attrsVersion||0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};for(const e of m){const i=s.point(t.point(e));f.minX=Math.min(f.minX,i.x),f.minY=Math.min(f.minY,i.y),f.maxX=Math.max(f.maxX,i.x),f.maxY=Math.max(f.maxY,i.y)}c&&r.set(i,f)}o=Math.min(o,f.minX),h=Math.min(h,f.minY),l=Math.max(l,f.maxX),d=Math.max(d,f.maxY)}s.invert();const c=s.point({x:o,y:h});return{x:c.x,y:c.y,width:l-o,height:d-h,rotation:i.getAngle(this.rotation())}}getX(){return this._getNodeRect().x}getY(){return this._getNodeRect().y}getWidth(){return this._getNodeRect().width}getHeight(){return this._getNodeRect().height}_createElements(){this._createBack(),Ti.forEach(t=>{this._createAnchor(t,"_rotate-zone").setAttrs({fill:"transparent",strokeEnabled:!1,visible:!1})}),Gi.forEach(t=>{this._createAnchor(t)}),this._createAnchor("rotater"),this._elementsCreated=!0}_createAnchor(t,e="_anchor"){const i=new ci({stroke:"rgb(0, 161, 255)",fill:"white",strokeWidth:1,name:t+" "+e,dragDistance:0,draggable:!0,hitStrokeWidth:Mi?10:"auto"});this._anchors[t]=i;const n=this;return i.on("mousedown touchstart",function(t){n._handleMouseDown(t)}),i.on("dragstart",t=>{i.stopDrag(),t.cancelBubble=!0}),i.on("dragend",t=>{t.cancelBubble=!0}),i.on("mouseenter",()=>{this.isTransforming()||(this._setAnchorCursor(t),this._cursorChange=!0)}),i.on("mouseout",()=>{this._cursorChange=!1,this.isTransforming()||i.getStage().content&&(i.getStage().content.style.cursor="")}),this.add(i),i}_setAnchorCursor(t,e=i.getAngle(this.rotation())){var n;const s=null===(n=this.getStage())||void 0===n?void 0:n.content;s&&(s.style.cursor=Ri(t,e,this.rotateAnchorCursor()))}_createBack(){const t=new ee({name:"back",width:0,height:0,sceneFunc(t,e){const i=e.getParent();if(!i.borderEnabled())return;const n=i.padding(),s=e.width(),r=e.height();if(t.beginPath(),t.rect(-n,-n,s+2*n,r+2*n),i.rotateEnabled()&&i.rotateLineVisible()&&"corners"!==i.rotateMode()){const e=Ii(i,s,r);t.moveTo(e.edgeX,e.edgeY),t.lineTo(e.endX,e.endY)}t.fillStrokeShape(e)},hitFunc:(t,e)=>{if(!this.shouldOverdrawWholeArea())return;const i=this.padding();t.beginPath(),t.rect(-i,-i,e.width()+2*i,e.height()+2*i),t.fillStrokeShape(e)}});this._back=t,this.add(t),this._proxyDrag(t),t.on("dragstart",t=>{t.cancelBubble=!0}),t.on("dragmove",t=>{t.cancelBubble=!0}),t.on("dragend",t=>{t.cancelBubble=!0}),this.on("dragmove",t=>{this.update()})}_handleMouseDown(t){var e,n;if(void 0!==t.evt.button&&!i.dragButtons.includes(t.evt.button))return;if(this._transforming)return;this._movingAnchorName=t.target.name().split(" ")[0];const s=this._getNodeRect(),r=s.width,a=s.height,o=Math.sqrt(Math.pow(r,2)+Math.pow(a,2));this.sin=Math.abs(a/o),this.cos=Math.abs(r/o);const h=null===(e=this.getStage())||void 0===e?void 0:e._getOwnerWindow();this._transformWindow=h||null,h&&(h.addEventListener("mousemove",this._handleMouseMove),h.addEventListener("touchmove",this._handleMouseMove),h.addEventListener("mouseup",this._handleMouseUp,!0),h.addEventListener("touchend",this._handleMouseUp,!0),h.addEventListener("touchcancel",this._handleMouseUp,!0)),this._transforming=!0,this._pointerId=null!==(n=t.pointerId)&&void 0!==n?n:C._getFirstPointerId(t.evt);const l=t.target.getAbsolutePosition(),d=t.target.getStage()._getPointerById(this._pointerId);if(this._anchorDragOffset={x:d.x-l.x,y:d.y-l.y},Ai(this._movingAnchorName)){const t=Li(s);this._rotateStart={pointerAngle:Math.atan2(d.y-t.y,d.x-t.x),rotation:s.rotation}}Fi.add(this),this._fire("transformstart",{evt:t.evt,target:this.getNode()}),this._nodes.forEach(e=>{e._fire("transformstart",{evt:t.evt,target:e})})}_handleMouseMove(t){var e;null===(e=this.getStage())||void 0===e||e._batchEvents(()=>this._moveTransform(t))}_moveTransform(t){let e,n,s;this._syncUpdate();const r=this._anchors[this._movingAnchorName],a=r.getStage();a.setPointersPositions(t);const o=a._getPointerById(this._pointerId);if(!o)return;let h={x:o.x-this._anchorDragOffset.x,y:o.y-this._anchorDragOffset.y};const l=r.getAbsolutePosition();this.anchorDragBoundFunc()&&(h=this.anchorDragBoundFunc()(l,h,t)),r.setAbsolutePosition(h);const d=r.getAbsolutePosition();if(l.x===d.x&&l.y===d.y)return;if(Ai(this._movingAnchorName)){const e=this._getNodeRect(),n=Li(e),s=this._rotateStart,r={x:d.x+this._anchorDragOffset.x,y:d.y+this._anchorDragOffset.y},a=Math.atan2(r.y-n.y,r.x-n.x),o=s.rotation+a-s.pointerAngle;let h;if(t.shiftKey&&"none"!==this.shiftBehavior())h=Math.round(o/Ei)*Ei;else{const t=i.getAngle(this.rotationSnapTolerance());h=function(t,e,n){let s=e,r=n;for(let n=0;n<t.length;n++){const a=i.getAngle(t[n]),o=Math.abs(a-e)%(2*Math.PI),h=Math.min(o,2*Math.PI-o);h<r&&(r=h,s=a)}return s}(this.rotationSnaps(),o,t)}"rotater"!==this._movingAnchorName&&this._setAnchorCursor(this._movingAnchorName,h);const l=Di(e,h-e.rotation);return void this._fitNodesInto(l,t)}const c=this.shiftBehavior();let g;g="inverted"===c?this.keepRatio()&&!t.shiftKey:"none"===c?this.keepRatio():this.keepRatio()||t.shiftKey;let u=this.centeredScaling()||t.altKey,f=!1;if("top-left"===this._movingAnchorName){if(g){f=!0;const t=u?{x:this.width()/2,y:this.height()/2}:{x:this._anchors["bottom-right"].x(),y:this._anchors["bottom-right"].y()};s=Math.sqrt(Math.pow(t.x-r.x(),2)+Math.pow(t.y-r.y(),2));const i=this._anchors["top-left"].x()>t.x?-1:1,a=this._anchors["top-left"].y()>t.y?-1:1;e=s*this.cos*i,n=s*this.sin*a,this._anchors["top-left"].x(t.x-e),this._anchors["top-left"].y(t.y-n)}}else if("top-center"===this._movingAnchorName)this._anchors["top-left"].y(r.y());else if("top-right"===this._movingAnchorName){if(g){f=!0;const t=u?{x:this.width()/2,y:this.height()/2}:{x:this._anchors["bottom-left"].x(),y:this._anchors["bottom-left"].y()};s=Math.sqrt(Math.pow(r.x()-t.x,2)+Math.pow(t.y-r.y(),2));const i=this._anchors["top-right"].x()<t.x?-1:1,a=this._anchors["top-right"].y()>t.y?-1:1;e=s*this.cos*i,n=s*this.sin*a,this._anchors["top-right"].x(t.x+e),this._anchors["top-right"].y(t.y-n)}var p=r.position();this._anchors["top-left"].y(p.y),this._anchors["bottom-right"].x(p.x)}else if("middle-left"===this._movingAnchorName)this._anchors["top-left"].x(r.x());else if("middle-right"===this._movingAnchorName)this._anchors["bottom-right"].x(r.x());else if("bottom-left"===this._movingAnchorName){if(g){f=!0;const t=u?{x:this.width()/2,y:this.height()/2}:{x:this._anchors["top-right"].x(),y:this._anchors["top-right"].y()};s=Math.sqrt(Math.pow(t.x-r.x(),2)+Math.pow(r.y()-t.y,2));const i=t.x<r.x()?-1:1,a=r.y()<t.y?-1:1;e=s*this.cos*i,n=s*this.sin*a,r.x(t.x-e),r.y(t.y+n)}p=r.position(),this._anchors["top-left"].x(p.x),this._anchors["bottom-right"].y(p.y)}else if("bottom-center"===this._movingAnchorName)this._anchors["bottom-right"].y(r.y());else if("bottom-right"===this._movingAnchorName){if(g){f=!0;const t=u?{x:this.width()/2,y:this.height()/2}:{x:this._anchors["top-left"].x(),y:this._anchors["top-left"].y()};s=Math.sqrt(Math.pow(r.x()-t.x,2)+Math.pow(r.y()-t.y,2));const i=this._anchors["bottom-right"].x()<t.x?-1:1,a=this._anchors["bottom-right"].y()<t.y?-1:1;e=s*this.cos*i,n=s*this.sin*a,this._anchors["bottom-right"].x(t.x+e),this._anchors["bottom-right"].y(t.y+n)}}else console.error(new Error("Wrong position argument of selection resizer: "+this._movingAnchorName));if(u=this.centeredScaling()||t.altKey,u){const t=this._anchors["top-left"],e=this._anchors["bottom-right"],i=t.x(),n=t.y(),s=this.getWidth()-e.x(),r=this.getHeight()-e.y();e.move({x:-i,y:-n}),t.move({x:s,y:r})}const _=this._anchors["top-left"].getAbsolutePosition();e=_.x,n=_.y;const m=this._anchors["bottom-right"].x()-this._anchors["top-left"].x(),v=this._anchors["bottom-right"].y()-this._anchors["top-left"].y();this._fitNodesInto({x:e,y:n,width:m,height:v,rotation:i.getAngle(this.rotation())},t,f)}_handleMouseUp(t){const e=this.getStage();e&&(e.setPointersPositions(t),!e._changedPointerPositions.some(t=>t.id===this._pointerId))||(e?e._batchEvents(()=>this._removeEvents(t)):this._removeEvents(t))}getAbsoluteTransform(t){const e=this.getTransform();return t?t.getAbsoluteTransform().copy().invert().multiply(e):e}_removeEvents(t){var e,i;if(this._transforming){this._transforming=!1;const n=null===(e=this.getStage())||void 0===e?void 0:e.content;n&&!this._cursorChange&&(n.style.cursor="");const s=this._transformWindow;this._transformWindow=null,s&&(s.removeEventListener("mousemove",this._handleMouseMove),s.removeEventListener("touchmove",this._handleMouseMove),s.removeEventListener("mouseup",this._handleMouseUp,!0),s.removeEventListener("touchend",this._handleMouseUp,!0),s.removeEventListener("touchcancel",this._handleMouseUp,!0));const r=this.getNode();Fi.delete(this),this._fire("transformend",{evt:t,target:r}),null===(i=this.getLayer())||void 0===i||i.batchDraw(),r&&this._nodes.forEach(e=>{var i;e._fire("transformend",{evt:t,target:e}),null===(i=e.getLayer())||void 0===i||i.batchDraw()}),this._movingAnchorName=null}}_fitNodesInto(t,e,i=!1){this._fitting=!0;try{return this._doFitNodesInto(t,e,i)}finally{this._fitting=!1}}_doFitNodesInto(t,e,n=!1){const s=this._getNodeRect();if(!s.width||!s.height||C._inRange(t.width,2*-this.padding()-1,1)||C._inRange(t.height,2*-this.padding()-1,1))return void this.update();const r=new a;r.rotate(i.getAngle(this.rotation()));const o=n?0:2*this.padding();let h=null,l=null;if(this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("left")>=0){const e=r.point({x:-o,y:0});t.x+=e.x,t.y+=e.y,t.width+=o,h={axis:"width",from:"left",to:"right",offset:e}}else if(this._movingAnchorName&&t.width<0&&this._movingAnchorName.indexOf("right")>=0){const e=r.point({x:o,y:0});t.width+=o,h={axis:"width",from:"right",to:"left",offset:e}}if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("top")>=0){const e=r.point({x:0,y:-o});t.x+=e.x,t.y+=e.y,t.height+=o,l={axis:"height",from:"top",to:"bottom",offset:e}}else if(this._movingAnchorName&&t.height<0&&this._movingAnchorName.indexOf("bottom")>=0){const e=r.point({x:0,y:o});t.height+=o,l={axis:"height",from:"bottom",to:"top",offset:e}}if(this.boundBoxFunc()){const e=this.boundBoxFunc()(s,t);e?t=e:C.warn("boundBoxFunc returned falsy. You should return new bound rect from it!")}for(const e of[h,l])e&&t[e.axis]<0&&this._movingAnchorName&&(this._movingAnchorName=this._movingAnchorName.replace(e.from,e.to),this._anchorDragOffset.x-=e.offset.x,this._anchorDragOffset.y-=e.offset.y);const d=1e7,c=new a;c.translate(s.x,s.y),c.rotate(s.rotation),c.scale(s.width/d,s.height/d);const g=new a,u=t.width/d,f=t.height/d;!1===this.flipEnabled()?(g.translate(t.x,t.y),g.rotate(t.rotation),g.translate(t.width<0?t.width:0,t.height<0?t.height:0),g.scale(Math.abs(u),Math.abs(f))):(g.translate(t.x,t.y),g.rotate(t.rotation),g.scale(u,f));const p=g.multiply(c.invert()),_=new Set;this._nodes.forEach(t=>{if(!t.getStage())return;const e=t.getParent().getAbsoluteTransform(),i=t.getTransform().copy();i.translate(t.offsetX(),t.offsetY());const n=new a;n.multiply(e.copy().invert()).multiply(p).multiply(e).multiply(i);const s=n.decompose();t.setAttrs(s);const r=t.getLayer();r&&_.add(r)}),this.rotation(C._getRotation(t.rotation)),this._nodes.forEach(t=>{this._fire("transform",{evt:e,target:t}),t._fire("transform",{evt:e,target:t})}),this._resetTransformCache(),this.update(),_.add(this.getLayer()),_.forEach(t=>t&&t.batchDraw())}_scheduleUpdate(){this._updatePending=!0,gt._runAfterUpdateBatch(this._syncUpdate)}forceUpdate(){this._resetTransformCache(),this.update()}update(){this._lastNodeRect=void 0,this._update()}_update(){var t;this._updatePending=!1;const e=this._getNodeRect();this._updateElements(e);const i=this.nodes().some(t=>t.draggable());this._back.draggable()!==i&&this._back.draggable(i);const n=this.anchorStyleFunc();n&&Object.values(this._anchors).forEach(t=>t.hasName("_anchor")&&n(t)),null===(t=this.getLayer())||void 0===t||t.batchDraw()}_updateElements(t){const e=this._lastNodeRect;if(e&&!this.anchorStyleFunc()&&t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height&&t.rotation===e.rotation)return;this._lastNodeRect={...t};const i=t.width,n=t.height,s=this.enabledAnchors(),r=this.resizeEnabled(),a=this.padding(),o=this.anchorSize();Object.values(this._anchors).filter(t=>t.hasName("_anchor")).forEach(t=>{t.setAttrs({width:o,height:o,offsetX:o/2,offsetY:o/2,stroke:this.anchorStroke(),strokeWidth:this.anchorStrokeWidth(),fill:this.anchorFill(),cornerRadius:this.anchorCornerRadius()})}),this._anchors["top-left"].setAttrs({x:0,y:0,offsetX:o/2+a,offsetY:o/2+a,visible:r&&s.indexOf("top-left")>=0}),this._anchors["top-center"].setAttrs({x:i/2,y:0,offsetY:o/2+a,visible:r&&s.indexOf("top-center")>=0}),this._anchors["top-right"].setAttrs({x:i,y:0,offsetX:o/2-a,offsetY:o/2+a,visible:r&&s.indexOf("top-right")>=0}),this._anchors["middle-left"].setAttrs({x:0,y:n/2,offsetX:o/2+a,visible:r&&s.indexOf("middle-left")>=0}),this._anchors["middle-right"].setAttrs({x:i,y:n/2,offsetX:o/2-a,visible:r&&s.indexOf("middle-right")>=0}),this._anchors["bottom-left"].setAttrs({x:0,y:n,offsetX:o/2+a,offsetY:o/2-a,visible:r&&s.indexOf("bottom-left")>=0}),this._anchors["bottom-center"].setAttrs({x:i/2,y:n,offsetY:o/2-a,visible:r&&s.indexOf("bottom-center")>=0}),this._anchors["bottom-right"].setAttrs({x:i,y:n,offsetX:o/2-a,offsetY:o/2-a,visible:r&&s.indexOf("bottom-right")>=0});const h=this.rotateMode(),l=Ii(this,i,n);this._anchors.rotater.setAttrs({x:l.endX,y:l.endY,visible:this.rotateEnabled()&&"corners"!==h});const d=2*o,c=this.rotateEnabled()&&"handle"!==h,g=-a-d;Ti.forEach(t=>{this._anchors[t].setAttrs({x:t.includes("left")?g:i+a,y:t.includes("top")?g:n+a,width:d,height:d,visible:c})}),this._back.setAttrs({width:i,height:n,visible:this.borderEnabled()||this.shouldOverdrawWholeArea(),stroke:this.borderStroke(),strokeWidth:this.borderStrokeWidth(),dash:this.borderDash(),x:0,y:0})}isTransforming(){return this._transforming}stopTransform(){this._transforming&&this._removeEvents()}destroy(){return this.getStage()&&this._cursorChange&&this.getStage().content&&(this.getStage().content.style.cursor=""),re.prototype.destroy.call(this),this.detach(),this._removeEvents(),this}add(...t){return this._elementsCreated?(C.error("You cannot add external nodes to the Transformer. Use tr.nodes([node]) instead."),this):super.add(...t)}toObject(){return gt.prototype.toObject.call(this)}clone(t){return gt.prototype.clone.call(this,t)}getClientRect(t){return this._syncUpdate(),this.nodes().length>0?super.getClientRect(t):{x:0,y:0,width:0,height:0}}}Oi.isTransforming=()=>Fi.size>0,Oi.prototype.className="Transformer",s(Oi),J.addGetterSetter(Oi,"enabledAnchors",Gi,function(t){return t instanceof Array||C.warn("enabledAnchors value should be an array"),t instanceof Array&&t.forEach(function(t){-1===Gi.indexOf(t)&&C.warn("Unknown anchor name: "+t+". Available names are: "+Gi.join(", "))}),t||[]}),J.addGetterSetter(Oi,"flipEnabled",!0,V()),J.addGetterSetter(Oi,"resizeEnabled",!0),J.addGetterSetter(Oi,"anchorSize",10,U()),J.addGetterSetter(Oi,"rotateEnabled",!0),J.addGetterSetter(Oi,"rotateLineVisible",!0),J.addGetterSetter(Oi,"rotationSnaps",[]),J.addGetterSetter(Oi,"rotateAnchorOffset",50,U()),J.addGetterSetter(Oi,"rotateAnchorAngle",0,U()),J.addGetterSetter(Oi,"rotateAnchorCursor","crosshair"),J.addGetterSetter(Oi,"rotateMode","handle"),J.addGetterSetter(Oi,"rotationSnapTolerance",5,U()),J.addGetterSetter(Oi,"borderEnabled",!0),J.addGetterSetter(Oi,"anchorStroke","rgb(0, 161, 255)"),J.addGetterSetter(Oi,"anchorStrokeWidth",1,U()),J.addGetterSetter(Oi,"anchorFill","white"),J.addGetterSetter(Oi,"anchorCornerRadius",0,U()),J.addGetterSetter(Oi,"borderStroke","rgb(0, 161, 255)"),J.addGetterSetter(Oi,"borderStrokeWidth",1,U()),J.addGetterSetter(Oi,"borderDash"),J.addGetterSetter(Oi,"keepRatio",!0),J.addGetterSetter(Oi,"shiftBehavior","default"),J.addGetterSetter(Oi,"centeredScaling",!1),J.addGetterSetter(Oi,"ignoreStroke",!1),J.addGetterSetter(Oi,"padding",0,U()),J.addGetterSetter(Oi,"nodes"),J.addGetterSetter(Oi,"node"),J.addGetterSetter(Oi,"boundBoxFunc"),J.addGetterSetter(Oi,"anchorDragBoundFunc"),J.addGetterSetter(Oi,"anchorStyleFunc"),J.addGetterSetter(Oi,"shouldOverdrawWholeArea",!1),J.addGetterSetter(Oi,"useSingleNodeRotation",!0),J.backCompat(Oi,{lineEnabled:"borderEnabled",rotateHandlerOffset:"rotateAnchorOffset",enabledHandlers:"enabledAnchors"});class Bi extends ee{_sceneFunc(t){t.beginPath(),t.arc(0,0,Math.abs(this.radius()),0,i.getAngle(this.angle()),this.clockwise()),t.lineTo(0,0),t.closePath(),t.fillStrokeShape(this)}getWidth(){return 2*Math.abs(this.radius())}getHeight(){return 2*Math.abs(this.radius())}setWidth(t){this.radius(t/2)}setHeight(t){this.radius(t/2)}}
/*
StackBlur - a fast almost Gaussian Blur For Canvas
Version: 0.5
Author: Mario Klingemann
Contact: mario@quasimondo.com
Website: http://www.quasimondo.com/StackBlurForCanvas
Twitter: @quasimondo
In case you find this class useful - especially in commercial projects -
I am not totally unhappy for a small donation to my PayPal account
mario@quasimondo.de
Or support me on flattr:
https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript
Copyright (c) 2010 Mario Klingemann
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
* @license MIT
*/
function Ni(){this.r=0,this.g=0,this.b=0,this.a=0,this.next=null}Bi.prototype.className="Wedge",Bi.prototype._centroid=!0,Bi.prototype._attrsAffectingSize=["radius"],s(Bi,!0),J.addGetterSetter(Bi,"radius",0,U()),J.addGetterSetter(Bi,"angle",0,U()),J.addGetterSetter(Bi,"clockwise",!1),J.backCompat(Bi,{angleDeg:"angle",getAngleDeg:"getAngle",setAngleDeg:"setAngle"});const Wi=[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],zi=[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];function Hi(t,e){return 255===e?t:t*e/255}function Yi(t,e){const i=t.data,n=t.width,s=t.height;let r,a,o,h,l,d,c,g,u,f,p,_,m,v,y,S,x,b,w,C;const k=e+e+1,P=n-1,M=s-1,T=e+1,A=T*(T+1)/2,E=new Ni,R=e<=180?Wi[e]/2**zi[e]:1/(T*T);let G=null,L=E,D=null,I=null;for(let t=1;t<k;t++)L=L.next=new Ni,t===T&&(G=L);L.next=E,o=a=0;for(let t=0;t<s;t++){_=m=v=y=h=l=d=c=0,w=i[a+3],S=Hi(i[a],w),x=Hi(i[a+1],w),b=Hi(i[a+2],w),g=T*S,u=T*x,f=T*b,p=T*w,h+=A*S,l+=A*x,d+=A*b,c+=A*w,L=E;for(let t=0;t<T;t++)L.r=S,L.g=x,L.b=b,L.a=w,L=L.next;for(let t=1;t<T;t++)r=a+((P<t?P:t)<<2),w=i[r+3],h+=(L.r=S=Hi(i[r],w))*(C=T-t),l+=(L.g=x=Hi(i[r+1],w))*C,d+=(L.b=b=Hi(i[r+2],w))*C,c+=(L.a=w)*C,_+=S,m+=x,v+=b,y+=w,L=L.next;D=E,I=G;for(let t=0;t<n;t++)i[a]=Math.floor(h*R),i[a+1]=Math.floor(l*R),i[a+2]=Math.floor(d*R),i[a+3]=Math.floor(c*R),h-=g,l-=u,d-=f,c-=p,g-=D.r,u-=D.g,f-=D.b,p-=D.a,r=o+((r=t+e+1)<P?r:P)<<2,w=i[r+3],_+=D.r=Hi(i[r],w),m+=D.g=Hi(i[r+1],w),v+=D.b=Hi(i[r+2],w),y+=D.a=w,h+=_,l+=m,d+=v,c+=y,D=D.next,g+=S=I.r,u+=x=I.g,f+=b=I.b,p+=w=I.a,_-=S,m-=x,v-=b,y-=w,I=I.next,a+=4;o+=n}for(let t=0;t<n;t++){m=v=y=_=l=d=c=h=0,a=t<<2,g=T*(S=i[a]),u=T*(x=i[a+1]),f=T*(b=i[a+2]),p=T*(w=i[a+3]),h+=A*S,l+=A*x,d+=A*b,c+=A*w,L=E;for(let t=0;t<T;t++)L.r=S,L.g=x,L.b=b,L.a=w,L=L.next;let o=Math.min(1,M)*n;for(let s=1;s<=e;s++)a=o+t<<2,h+=(L.r=S=i[a])*(C=T-s),l+=(L.g=x=i[a+1])*C,d+=(L.b=b=i[a+2])*C,c+=(L.a=w=i[a+3])*C,_+=S,m+=x,v+=b,y+=w,L=L.next,s<M&&(o+=n);a=t,D=E,I=G;for(let e=0;e<s;e++)r=a<<2,i[r+3]=w=Math.floor(c*R),w>0?(w=255/w,i[r]=Math.floor(h*R)*w,i[r+1]=Math.floor(l*R)*w,i[r+2]=Math.floor(d*R)*w):i[r]=i[r+1]=i[r+2]=0,h-=g,l-=u,d-=f,c-=p,g-=D.r,u-=D.g,f-=D.b,p-=D.a,r=t+((r=e+T)<M?r:M)*n<<2,h+=_+=D.r=i[r],l+=m+=D.g=i[r+1],d+=v+=D.b=i[r+2],c+=y+=D.a=i[r+3],D=D.next,g+=S=I.r,u+=x=I.g,f+=b=I.b,p+=w=I.a,_-=S,m-=x,v-=b,y-=w,I=I.next,a+=n}}et("blur",(t,e,i)=>{const n=Math.round(2*e*i);if(n<=0)return;const{width:s,height:r,data:a}=t,o=4*s,h=o+8,l={width:s+2,height:r+2,data:new Uint8ClampedArray(h*(r+2))};for(let t=0;t<r;t++)l.data.set(a.subarray(t*o,t*o+o),(t+1)*h+4);Yi(l,n);for(let t=0;t<r;t++){const e=(t+1)*h+4;a.set(l.data.subarray(e,e+o),t*o)}}),J.addGetterSetter(gt,"blurRadius",0,U(),J.afterSetFilter);J.addGetterSetter(gt,"brightness",0,U(),J.afterSetFilter);function Ui(t,e){const i=t.data,n=i.length;for(let t=0;t<n;t+=4)i[t]=Math.min(255,i[t]*e),i[t+1]=Math.min(255,i[t+1]*e),i[t+2]=Math.min(255,i[t+2]*e)}et("brightness",Ui);function Xi(t,e){const i=t.data,n=i.length;let s=150,r=150,a=150;for(let t=0;t<n;t+=4)s=i[t],r=i[t+1],a=i[t+2],s/=255,s-=.5,s*=e,s+=.5,s*=255,r/=255,r-=.5,r*=e,r+=.5,r*=255,a/=255,a-=.5,a*=e,a+=.5,a*=255,s=s<0?0:s>255?255:s,r=r<0?0:r>255?255:r,a=a<0?0:a>255?255:a,i[t]=s,i[t+1]=r,i[t+2]=a}et("contrast",Xi),J.addGetterSetter(gt,"contrast",0,U(),J.afterSetFilter);function ji(t,e,i,n,s){const r=i-e,a=s-n;if(0===r)return n+a/2;if(0===a)return n;let o=(t-e)/r;return o=a*o+n,o}J.addGetterSetter(gt,"embossStrength",.5,U(),J.afterSetFilter),J.addGetterSetter(gt,"embossWhiteLevel",.5,U(),J.afterSetFilter),J.addGetterSetter(gt,"embossDirection","top-left",void 0,J.afterSetFilter),J.addGetterSetter(gt,"embossBlend",!1,void 0,J.afterSetFilter);J.addGetterSetter(gt,"enhance",0,U(),J.afterSetFilter);J.addGetterSetter(gt,"hue",0,U(),J.afterSetFilter),J.addGetterSetter(gt,"saturation",0,U(),J.afterSetFilter),J.addGetterSetter(gt,"luminance",0,U(),J.afterSetFilter);J.addGetterSetter(gt,"hue",0,U(),J.afterSetFilter),J.addGetterSetter(gt,"saturation",0,U(),J.afterSetFilter),J.addGetterSetter(gt,"value",0,U(),J.afterSetFilter);function qi(t,e,i){let n=4*(i*t.width+e);const s=[];return s.push(t.data[n++],t.data[n++],t.data[n++],t.data[n++]),s}function $i(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))}J.addGetterSetter(gt,"kaleidoscopePower",2,U(),J.afterSetFilter),J.addGetterSetter(gt,"kaleidoscopeAngle",0,U(),J.afterSetFilter);J.addGetterSetter(gt,"threshold",.5,U(),J.afterSetFilter);J.addGetterSetter(gt,"noise",.2,U(),J.afterSetFilter);J.addGetterSetter(gt,"pixelSize",8,U(),J.afterSetFilter);J.addGetterSetter(gt,"levels",.5,U(),J.afterSetFilter);J.addGetterSetter(gt,"red",0,Y,J.afterSetFilter),J.addGetterSetter(gt,"green",0,Y,J.afterSetFilter),J.addGetterSetter(gt,"blue",0,Y,J.afterSetFilter);J.addGetterSetter(gt,"alpha",1,t=>Math.min(1,Math.max(0,t)),J.afterSetFilter);J.addGetterSetter(gt,"threshold",.5,U(),J.afterSetFilter);const Vi=ve.Util._assign(ve,{Arc:ye,Arrow:Oe,Circle:Be,Ellipse:Ne,Image:We,Label:li,Tag:di,Line:Le,Path:Fe,Rect:ci,RegularPolygon:gi,Ring:fi,Sprite:pi,Star:_i,Text:ni,TextPath:Si,Transformer:Oi,Wedge:Bi,Filters:{Blur:function(t,e=1){const i=Math.round(Math.min(this.blurRadius(),180)*e);i>0&&Yi(t,i)},Brightness:function(t){Ui(t,void 0===this.attrs.brightness?1:this.brightness())},Brighten:function(t){const e=255*this.brightness(),i=t.data,n=i.length;for(let t=0;t<n;t+=4)i[t]+=e,i[t+1]+=e,i[t+2]+=e},Contrast:function(t){Xi(t,Math.pow((this.contrast()+100)/100,2))},Emboss:function(t){var e,i,n,s,r,a,o,h;const l=t.data,d=t.width,c=t.height,g=Math.min(1,Math.max(0,null!==(i=null===(e=this.embossStrength)||void 0===e?void 0:e.call(this))&&void 0!==i?i:.5)),u=Math.min(1,Math.max(0,null!==(s=null===(n=this.embossWhiteLevel)||void 0===n?void 0:n.call(this))&&void 0!==s?s:.5)),f={"top-left":315,top:270,"top-right":225,right:180,"bottom-right":135,bottom:90,"bottom-left":45,left:0},p=null!==(a=null===(r=this.embossDirection)||void 0===r?void 0:r.call(this))&&void 0!==a?a:"top-left";let _=f[p];void 0===_&&(C.warn('Unknown emboss direction: "'+p+'". Using "top-left".'),_=f["top-left"]);const m=!(null===(h=null===(o=this.embossBlend)||void 0===o?void 0:o.call(this))||void 0===h||!h),v=10*g,y=255*u,S=_*Math.PI/180,x=Math.cos(S),b=-Math.sin(S),w=128/1020*v,k=new Float32Array(d*c);for(let t=0,e=0;e<l.length;e+=4,t++)k[t]=.2126*l[e]+.7152*l[e+1]+.0722*l[e+2];const P=[-1,0,1,-2,0,2,-1,0,1],M=[-1,-2,-1,0,0,0,1,2,1],T=t=>t<0?0:t>255?255:t;for(let t=0;t<c;t++)for(let e=0;e<d;e++){let i=0,n=0,s=0;for(let r=-1;r<=1;r++){const a=Math.max(0,Math.min(c-1,t+r))*d;for(let t=-1;t<=1;t++,s++){const r=k[a+Math.max(0,Math.min(d-1,e+t))];i+=r*P[s],n+=r*M[s]}}const r=t*d+e,a=T(y+(x*i+b*n)*w),o=4*r;if(m){const t=a-y;l[o]=T(l[o]+t),l[o+1]=T(l[o+1]+t),l[o+2]=T(l[o+2]+t)}else l[o]=l[o+1]=l[o+2]=a}return t},Enhance:function(t){const e=t.data,i=e.length;let n,s,r,a=e[0],o=a,h=e[1],l=h,d=e[2],c=d;const g=this.enhance();if(0===g)return;for(let t=0;t<i;t+=4)n=e[t+0],n<a?a=n:n>o&&(o=n),s=e[t+1],s<h?h=s:s>l&&(l=s),r=e[t+2],r<d?d=r:r>c&&(c=r);let u,f,p,_,m,v;if(o===a&&(o=255,a=0),l===h&&(l=255,h=0),c===d&&(c=255,d=0),g>0)u=o+g*(255-o),f=a-g*(a-0),p=l+g*(255-l),_=h-g*(h-0),m=c+g*(255-c),v=d-g*(d-0);else{const t=.5*(o+a);u=o+g*(o-t),f=a+g*(a-t);const e=.5*(l+h);p=l+g*(l-e),_=h+g*(h-e);const i=.5*(c+d);m=c+g*(c-i),v=d+g*(d-i)}for(let t=0;t<i;t+=4)e[t+0]=ji(e[t+0],a,o,f,u),e[t+1]=ji(e[t+1],h,l,_,p),e[t+2]=ji(e[t+2],d,c,v,m)},Grayscale:function(t){const e=t.data,i=e.length;for(let t=0;t<i;t+=4){const i=.34*e[t]+.5*e[t+1]+.16*e[t+2];e[t]=i,e[t+1]=i,e[t+2]=i}},HSL:function(t){const e=t.data,i=e.length,n=Math.pow(2,this.saturation()),s=(this.hue()%360+360)%360,r=127*this.luminance(),a=1*n*Math.cos(s*Math.PI/180),o=1*n*Math.sin(s*Math.PI/180),h=.299+.701*a+.168*o,l=.587-.587*a+.33*o,d=.114-.114*a-.497*o,c=.299-.299*a-.328*o,g=.587+.413*a+.035*o,u=.114-.114*a+.292*o,f=.299-.3*a+1.25*o,p=.587-.588*a-1.05*o,_=.114+.886*a-.203*o;let m,v,y,S;for(let t=0;t<i;t+=4)m=e[t+0],v=e[t+1],y=e[t+2],S=e[t+3],e[t+0]=h*m+l*v+d*y+r,e[t+1]=c*m+g*v+u*y+r,e[t+2]=f*m+p*v+_*y+r,e[t+3]=S},HSV:function(t){const e=t.data,i=e.length,n=Math.pow(2,this.value()),s=Math.pow(2,this.saturation()),r=(this.hue()%360+360)%360,a=n*s*Math.cos(r*Math.PI/180),o=n*s*Math.sin(r*Math.PI/180),h=.299*n+.701*a+.168*o,l=.587*n-.587*a+.33*o,d=.114*n-.114*a-.497*o,c=.299*n-.299*a-.328*o,g=.587*n+.413*a+.035*o,u=.114*n-.114*a+.292*o,f=.299*n-.3*a+1.25*o,p=.587*n-.588*a-1.05*o,_=.114*n+.886*a-.203*o;for(let t=0;t<i;t+=4){const i=e[t+0],n=e[t+1],s=e[t+2],r=e[t+3];e[t+0]=h*i+l*n+d*s,e[t+1]=c*i+g*n+u*s,e[t+2]=f*i+p*n+_*s,e[t+3]=r}},Invert:function(t){const e=t.data,i=e.length;for(let t=0;t<i;t+=4)e[t]=255-e[t],e[t+1]=255-e[t+1],e[t+2]=255-e[t+2]},Kaleidoscope:function(t){const e=t.width,i=t.height;let n,s,r,a,o,h,l,d,c,g,u=Math.round(this.kaleidoscopePower());const f=Math.round(this.kaleidoscopeAngle()),p=Math.floor(e*((f%360+360)%360)/360);if(u<1)return;const _={width:e,height:i,data:new Uint8ClampedArray(e*i*4)};!function(t,e,i){const n=t.data,s=e.data,r=t.width,a=t.height,o=i.polarCenterX||r/2,h=i.polarCenterY||a/2;let l=Math.sqrt(o*o+h*h),d=r-o,c=a-h;const g=Math.sqrt(d*d+c*c);l=g>l?g:l;const u=a,f=r,p=360/f*Math.PI/180;for(let t=0;t<f;t+=1){const e=Math.sin(t*p),i=Math.cos(t*p);for(let a=0;a<u;a+=1){d=Math.floor(o+l*a/u*i),c=Math.floor(h+l*a/u*e);let g=4*(c*r+d);const f=n[g+0],p=n[g+1],_=n[g+2],m=n[g+3];g=4*(t+a*r),s[g+0]=f,s[g+1]=p,s[g+2]=_,s[g+3]=m}}}(t,_,{polarCenterX:e/2,polarCenterY:i/2});let m=e/Math.pow(2,u);for(;m<=8;)m*=2,u-=1;m=Math.ceil(m);let v=m,y=0,S=v,x=1;for(p+m>e&&(y=v,S=0,x=-1),s=0;s<i;s+=1)for(n=y;n!==S;n+=x)r=Math.round(n+p)%e,c=4*(e*s+r),o=_.data[c+0],h=_.data[c+1],l=_.data[c+2],d=_.data[c+3],g=4*(e*s+n),_.data[g+0]=o,_.data[g+1]=h,_.data[g+2]=l,_.data[g+3]=d;for(s=0;s<i;s+=1)for(v=Math.floor(m),a=0;a<u;a+=1){for(n=0;n<v+1;n+=1)c=4*(e*s+n),o=_.data[c+0],h=_.data[c+1],l=_.data[c+2],d=_.data[c+3],g=4*(e*s+2*v-n-1),_.data[g+0]=o,_.data[g+1]=h,_.data[g+2]=l,_.data[g+3]=d;v*=2}!function(t,e,i){const n=t.data,s=e.data,r=t.width,a=t.height,o=i.polarCenterX||r/2,h=i.polarCenterY||a/2;let l=Math.sqrt(o*o+h*h),d=r-o,c=a-h;const g=Math.sqrt(d*d+c*c);l=g>l?g:l;const u=a,f=r;let p,_;for(d=0;d<r;d+=1)for(c=0;c<a;c+=1){const t=d-o,e=c-h,i=Math.sqrt(t*t+e*e)*u/l;let a=(180*Math.atan2(e,t)/Math.PI+360+0)%360;a=a*f/360,p=Math.floor(a),_=Math.floor(i);let g=4*(_*r+p);const m=n[g+0],v=n[g+1],y=n[g+2],S=n[g+3];g=4*(c*r+d),s[g+0]=m,s[g+1]=v,s[g+2]=y,s[g+3]=S}}(_,t,{})},Mask:function(t){var e;let i=function(t,e){const i=qi(t,0,0),n=qi(t,t.width-1,0),s=qi(t,0,t.height-1),r=qi(t,t.width-1,t.height-1);if($i(i,n)<e&&$i(n,r)<e&&$i(r,s)<e&&$i(s,i)<e){const a=function(t){const e=[0,0,0];for(let i=0;i<t.length;i++)e[0]+=t[i][0],e[1]+=t[i][1],e[2]+=t[i][2];return e[0]/=t.length,e[1]/=t.length,e[2]/=t.length,e}([n,i,r,s]),o=[];for(let i=0;i<t.width*t.height;i++){const n=$i(a,[t.data[4*i],t.data[4*i+1],t.data[4*i+2]]);o[i]=n<e?0:255}return o}}(t,null!==(e=this.attrs.threshold)&&void 0!==e?e:10);return i&&(i=function(t,e,i){const n=[1,1,1,1,0,1,1,1,1],s=Math.round(Math.sqrt(n.length)),r=Math.floor(s/2),a=[];for(let o=0;o<i;o++)for(let h=0;h<e;h++){const l=o*e+h;let d=0;for(let a=0;a<s;a++)for(let l=0;l<s;l++){const c=o+a-r,g=h+l-r;if(c>=0&&c<i&&g>=0&&g<e){const i=n[a*s+l];d+=t[c*e+g]*i}}a[l]=2040===d?255:0}return a}(i,t.width,t.height),i=function(t,e,i){const n=[1,1,1,1,1,1,1,1,1],s=Math.round(Math.sqrt(n.length)),r=Math.floor(s/2),a=[];for(let o=0;o<i;o++)for(let h=0;h<e;h++){const l=o*e+h;let d=0;for(let a=0;a<s;a++)for(let l=0;l<s;l++){const c=o+a-r,g=h+l-r;if(c>=0&&c<i&&g>=0&&g<e){const i=n[a*s+l];d+=t[c*e+g]*i}}a[l]=d>=1020?255:0}return a}(i,t.width,t.height),i=function(t,e,i){const n=[1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9],s=Math.round(Math.sqrt(n.length)),r=Math.floor(s/2),a=[];for(let o=0;o<i;o++)for(let h=0;h<e;h++){const l=o*e+h;let d=0;for(let a=0;a<s;a++)for(let l=0;l<s;l++){const c=o+a-r,g=h+l-r;if(c>=0&&c<i&&g>=0&&g<e){const i=n[a*s+l];d+=t[c*e+g]*i}}a[l]=d}return a}(i,t.width,t.height),function(t,e){for(let i=0;i<t.width*t.height;i++)t.data[4*i+3]=e[i]}(t,i)),t},Noise:function(t){const e=255*this.noise(),i=t.data,n=i.length,s=e/2;for(let t=0;t<n;t+=4)i[t+0]+=s-2*s*Math.random(),i[t+1]+=s-2*s*Math.random(),i[t+2]+=s-2*s*Math.random()},Pixelate:function(t,e=1){let i=Math.ceil(this.pixelSize()*e),n=t.width,s=t.height,r=Math.ceil(n/i),a=Math.ceil(s/i),o=t.data;if(i<=0)C.error("pixelSize value can not be <= 0");else for(let t=0;t<r;t+=1)for(let e=0;e<a;e+=1){let r=0,a=0,h=0,l=0;const d=t*i,c=Math.min(d+i,n),g=e*i,u=Math.min(g+i,s);for(let t=d;t<c;t+=1)for(let e=g;e<u;e+=1){const i=4*(n*e+t),s=o[i+3];r+=o[i+0]*s,a+=o[i+1]*s,h+=o[i+2]*s,l+=s}l&&(r/=l,a/=l,h/=l),l/=(c-d)*(u-g);for(let t=d;t<c;t+=1)for(let e=g;e<u;e+=1){const i=4*(n*e+t);o[i+0]=r,o[i+1]=a,o[i+2]=h,o[i+3]=l}}},Posterize:function(t){const e=Math.round(254*this.levels())+1,i=t.data,n=i.length,s=255/e;for(let t=0;t<n;t+=1)i[t]=Math.floor(i[t]/s)*s},RGB:function(t){const e=t.data,i=e.length,n=this.red(),s=this.green(),r=this.blue();for(let t=0;t<i;t+=4){const i=(.34*e[t]+.5*e[t+1]+.16*e[t+2])/255;e[t]=i*n,e[t+1]=i*s,e[t+2]=i*r,e[t+3]=e[t+3]}},RGBA:function(t){const e=t.data,i=e.length,n=this.red(),s=this.green(),r=this.blue(),a=this.alpha();for(let t=0;t<i;t+=4){const i=1-a;e[t]=n*a+e[t]*i,e[t+1]=s*a+e[t+1]*i,e[t+2]=r*a+e[t+2]*i}},Sepia:function(t){const e=t.data,i=e.length;for(let t=0;t<i;t+=4){const i=e[t+0],n=e[t+1],s=e[t+2];e[t+0]=Math.min(255,.393*i+.769*n+.189*s),e[t+1]=Math.min(255,.349*i+.686*n+.168*s),e[t+2]=Math.min(255,.272*i+.534*n+.131*s)}},Solarize:function(t){const e=t.data;for(let t=0;t<e.length;t+=4){const i=e[t],n=e[t+1],s=e[t+2];.2126*i+.7152*n+.0722*s>=128&&(e[t]=255-i,e[t+1]=255-n,e[t+2]=255-s)}return t},Threshold:function(t){const e=255*this.threshold(),i=t.data,n=i.length;for(let t=0;t<n;t+=1)i[t]=i[t]<e?0:255}}});return Vi});