PageSourceSearch

https://socialmonster.org/assets/MoodBoardEditor-BamwS4VW.js

js socialmonster.org collected 2026-10-07 13:31:07 UTC 358,088 bytes, 437 lines download raw bytes

1import{D as Di,q as P,l as Jt,f as ji}from"./index-D10rljXA.js";import{g as Mi,f as Fi,j as Li,k as Ii,i as Ri,h as st}from"./react-vendor-BDGRZpCk.js";import"./firebase-B1bfOdnZ.js";function Bi(R,f){for(var K=0;K<f.length;K++){const $=f[K];if(typeof $!="string"&&!Array.isArray($)){for(const at in $)if(at!=="default"&&!(at in R)){const q=Object.getOwnPropertyDescriptor($,at);q&&Object.defineProperty(R,at,q.get?q:{enumerable:!0,get:()=>$[at]})}}}return Object.freeze(Object.defineProperty(R,Symbol.toStringTag,{value:"Module"}))}var $t={};const Xi={},Wi=Object.freeze(Object.defineProperty({__proto__:null,default:Xi},Symbol.toStringTag,{value:"Module"})),ce=Mi(Wi);(function(R){/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */var f=f||{version:"5.5.2"};if(R.fabric=f,typeof document<"u"&&typeof window<"u")document instanceof(typeof HTMLDocument<"u"?HTMLDocument:Document)?f.document=document:f.document=document.implementation.createHTMLDocument(""),f.window=window;else{var K=ce,$=new K.JSDOM(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;f.document=$.document,f.jsdomImplForWrapper=ce.implForWrapper,f.nodeCanvas=ce.Canvas,f.window=$,DOMParser=f.window.DOMParser}f.isTouchSupported="ontouchstart"in f.window||"ontouchstart"in f.document||f.window&&f.window.navigator&&f.window.navigator.maxTouchPoints>0,f.isLikelyNode=typeof Buffer<"u"&&typeof window>"u",f.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"],f.DPI=96,f.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",f.commaWsp="(?:\\s+,?\\s*|,\\s*)",f.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/ig,f.reNonWord=/[ \n\.,;!\?\-]/,f.fontPaths={},f.iMatrix=[1,0,0,1,0,0],f.svgNS="http://www.w3.org/2000/svg",f.perfLimitSizeTotal=2097152,f.maxCacheSideLimit=4096,f.minCacheSideLimit=256,f.charWidthsCache={},f.textureSize=2048,f.disableStyleCopyPaste=!1,f.enableGLFiltering=!0,f.devicePixelRatio=f.window.devicePixelRatio||f.window.webkitDevicePixelRatio||f.window.mozDevicePixelRatio||1,f.browserShadowBlurConstant=1,f.arcToSegmentsCache={},f.boundsOfCurveCache={},f.cachesBoundsOfCurve=!0,f.forceGLPutImageData=!1,f.initFilterBackend=function(){if(f.enableGLFiltering&&f.isWebglSupported&&f.isWebglSupported(f.textureSize))return console.log("max texture size: "+f.maxTextureSize),new f.WebglFilterBackend({tileSize:f.textureSize});if(f.Canvas2dFilterBackend)return new f.Canvas2dFilterBackend},typeof document<"u"&&typeof window<"u"&&(window.fabric=f),function(){function c(t,n){if(this.__eventListeners[t]){var a=this.__eventListeners[t];n?a[a.indexOf(n)]=!1:f.util.array.fill(a,!1)}}function s(t,n){if(this.__eventListeners||(this.__eventListeners={}),arguments.length===1)for(var a in t)this.on(a,t[a]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(n);return this}function l(t,n){var a=(function(){n.apply(this,arguments),this.off(t,a)}).bind(this);this.on(t,a)}function o(t,n){if(arguments.length===1)for(var a in t)l.call(this,a,t[a]);else l.call(this,t,n);return this}function e(t,n){if(!this.__eventListeners)return this;if(arguments.length===0)for(t in this.__eventListeners)c.call(this,t);else if(arguments.length===1&&typeof arguments[0]=="object")for(var a in t)c.call(this,a,t[a]);else c.call(this,t,n);return this}function r(t,n){if(!this.__eventListeners)return this;var a=this.__eventListeners[t];if(!a)return this;for(var i=0,h=a.length;i<h;i++)a[i]&&a[i].call(this,n||{});return this.__eventListeners[t]=a.filter(function(u){return u!==!1}),this}f.Observable={fire:r,on:s,once:o,off:e}}(),f.Collection={_objects:[],add:function(){if(this._objects.push.apply(this._objects,arguments),this._onObjectAdded)for(var c=0,s=arguments.length;c<s;c++)this._onObjectAdded(arguments[c]);return this.renderOnAddRemove&&this.requestRenderAll(),this},insertAt:function(c,s,l){var o=this._objects;return l?o[s]=c:o.splice(s,0,c),this._onObjectAdded&&this._onObjectAdded(c),this.renderOnAddRemove&&this.requestRenderAll(),this},remove:function(){for(var c=this._objects,s,l=!1,o=0,e=arguments.length;o<e;o++)s=c.indexOf(arguments[o]),s!==-1&&(l=!0,c.splice(s,1),this._onObjectRemoved&&this._onObjectRemoved(arguments[o]));return this.renderOnAddRemove&&l&&this.requestRenderAll(),this}
vendor: 19,165 bytes, lines 1-3
1,forEachObject:function(c,s){for(var l=this.getObjects(),o=0,e=l.length;o<e;o++)c.call(s,l[o],o,l);return this},getObjects:function(c){return typeof c>"u"?this._objects.concat():this._objects.filter(function(s){return s.type===c})},item:function(c){return this._objects[c]},isEmpty:function(){return this._objects.length===0},size:function(){return this._objects.length},contains:function(c,s){return this._objects.indexOf(c)>-1?!0:s?this._objects.some(function(l){return typeof l.contains=="function"&&l.contains(c,!0)}):!1},complexity:function(){return this._objects.reduce(function(c,s){return c+=s.complexity?s.complexity():0,c},0)}},f.CommonMethods={_setOptions:function(c){for(var s in c)this.set(s,c[s])},_initGradient:function(c,s){c&&c.colorStops&&!(c instanceof f.Gradient)&&this.set(s,new f.Gradient(c))},_initPattern:function(c,s,l){c&&c.source&&!(c instanceof f.Pattern)?this.set(s,new f.Pattern(c,l)):l&&l()},_setObject:function(c){for(var s in c)this._set(s,c[s])},set:function(c,s){return typeof c=="object"?this._setObject(c):this._set(c,s),this},_set:function(c,s){this[c]=s},toggle:function(c){var s=this.get(c);return typeof s=="boolean"&&this.set(c,!s),this},get:function(c){return this[c]}},function(c){var s=Math.sqrt,l=Math.atan2,o=Math.pow,e=Math.PI/180,r=Math.PI/2;f.util={cos:function(t){if(t===0)return 1;t<0&&(t=-t);var n=t/r;switch(n){case 1:case 3:return 0;case 2:return-1}return Math.cos(t)},sin:function(t){if(t===0)return 0;var n=t/r,a=1;switch(t<0&&(a=-1),n){case 1:return a;case 2:return 0;case 3:return-a}return Math.sin(t)},removeFromArray:function(t,n){var a=t.indexOf(n);return a!==-1&&t.splice(a,1),t},getRandomInt:function(t,n){return Math.floor(Math.random()*(n-t+1))+t},degreesToRadians:function(t){return t*e},radiansToDegrees:function(t){return t/e},rotatePoint:function(t,n,a){var i=new f.Point(t.x-n.x,t.y-n.y),h=f.util.rotateVector(i,a);return new f.Point(h.x,h.y).addEquals(n)},rotateVector:function(t,n){var a=f.util.sin(n),i=f.util.cos(n),h=t.x*i-t.y*a,u=t.x*a+t.y*i;return{x:h,y:u}},createVector:function(t,n){return new f.Point(n.x-t.x,n.y-t.y)},calcAngleBetweenVectors:function(t,n){return Math.acos((t.x*n.x+t.y*n.y)/(Math.hypot(t.x,t.y)*Math.hypot(n.x,n.y)))},getHatVector:function(t){return new f.Point(t.x,t.y).multiply(1/Math.hypot(t.x,t.y))},getBisector:function(t,n,a){var i=f.util.createVector(t,n),h=f.util.createVector(t,a),u=f.util.calcAngleBetweenVectors(i,h),d=f.util.calcAngleBetweenVectors(f.util.rotateVector(i,u),h),g=u*(d===0?1:-1)/2;return{vector:f.util.getHatVector(f.util.rotateVector(i,g)),angle:u}},projectStrokeOnPoints:function(t,n,a){var i=[],h=n.strokeWidth/2,u=n.strokeUniform?new f.Point(1/n.scaleX,1/n.scaleY):new f.Point(1,1),d=function(g){var m=h/Math.hypot(g.x,g.y);return new f.Point(g.x*m*u.x,g.y*m*u.y)};return t.length<=1||t.forEach(function(g,m){var p=new f.Point(g.x,g.y),C,T;m===0?(T=t[m+1],C=a?d(f.util.createVector(T,p)).addEquals(p):t[t.length-1]):m===t.length-1?(C=t[m-1],T=a?d(f.util.createVector(C,p)).addEquals(p):t[0]):(C=t[m-1],T=t[m+1]);var j=f.util.getBisector(p,C,T),W=j.vector,V=j.angle,et,nt;if(n.strokeLineJoin==="miter"&&(et=-h/Math.sin(V/2),nt=new f.Point(W.x*et*u.x,W.y*et*u.y),Math.hypot(nt.x,nt.y)/h<=n.strokeMiterLimit)){i.push(p.add(nt)),i.push(p.subtract(nt));return}et=-h*Math.SQRT2,nt=new f.Point(W.x*et*u.x,W.y*et*u.y),i.push(p.add(nt)),i.push(p.subtract(nt))}),i},transformPoint:function(t,n,a){return a?new f.Point(n[0]*t.x+n[2]*t.y,n[1]*t.x+n[3]*t.y):new f.Point(n[0]*t.x+n[2]*t.y+n[4],n[1]*t.x+n[3]*t.y+n[5])},makeBoundingBoxFromPoints:function(t,n){if(n)for(var a=0;a<t.length;a++)t[a]=f.util.transformPoint(t[a],n);var i=[t[0].x,t[1].x,t[2].x,t[3].x],h=f.util.array.min(i),u=f.util.array.max(i),d=u-h,g=[t[0].y,t[1].y,t[2].y,t[3].y],m=f.util.array.min(g),p=f.util.array.max(g),C=p-m;return{left:h,top:m,width:d,height:C}},invertTransform:function(t){var n=1/(t[0]*t[3]-t[1]*t[2]),a=[n*t[3],-n*t[1],-n*t[2],n*t[0]],i=f.util.transformPoint({x:t[4],y:t[5]},a,!0);return a[4]=-i.x,a[5]=-i.y,a},toFixed:function(t,n){return parseFloat(Number(t).toFixed(n))},parseUnit:function(t,n){var a=/\D{0,2}$/.exec(t),i=parseFloat(t);switch(n||(n=f.Text.DEFAULT_SVG_FONT_SIZE),a[0]){case"mm":return i*f.DPI/25.4;case"cm":return i*f.DPI/2.54;case"in":return i*f.DPI;case"pt":return i*f.DPI/72;case"pc":return i*f.DPI/72*12;case"em":return i*n;default:return i}},falseFunction:function(){return!1},getKlass:function(t,n){return t=f.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),f.util.resolveNamespace(n)[t]},getSvgAttributes:function(t){var n=["instantiated_by_use","style","id","class"];switch(t){case"linearGradient":n=n.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);break;case"radialGradient":n=n.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);break;case"stop":n=n.concat(["offset","stop-color","stop-opacity"]);break}return n},resolveNamespace:function(t){if(!t)return f;var n=t.split("."),a=n.length,i,h=c||f.window;for(i=0;i<a;++i)h=h[n[i]];return h},loadImage:function(t,n,a,i){if(!t){n&&n.call(a,t);return}var h=f.util.createImage(),u=function(){n&&n.call(a,h,!1),h=h.onload=h.onerror=null};h.onload=u,h.onerror=function(){f.log("Error loading "+h.src),n&&n.call(a,null,!0),h=h.onload=h.onerror=null},t.indexOf("data")!==0&&i!==void 0&&i!==null&&(h.crossOrigin=i),t.substring(0,14)==="data:image/svg"&&(h.onload=null,f.util.loadImageInDom(h,u)),h.src=t},loadImageInDom:function(t,n){var a=f.document.createElement("div");a.style.width=a.style.height="1px",a.style.left=a.style.top="-100%",a.style.position="absolute",a.appendChild(t),f.document.querySelector("body").appendChild(a),t.onload=function(){n(),a.parentNode.removeChild(a),a=null}},enlivenObjects:function(t,n,a,i){t=t||[];var h=[],u=0,d=t.length;function g(){++u===d&&n&&n(h.filter(function(m){return m}))}if(!d){n&&n(h);return}t.forEach(function(m,p){if(!m||!m.type){g();return}var C=f.util.getKlass(m.type,a);C.fromObject(m,function(T,j){j||(h[p]=T),i&&i(m,T,j),g()})})},enlivenObjectEnlivables:function(t,n,a){var i=f.Object.ENLIVEN_PROPS.filter(function(h){return!!t[h]});f.util.enlivenObjects(i.map(function(h){return t[h]}),function(h){var u={};i.forEach(function(d,g){u[d]=h[g],n&&(n[d]=h[g])}),a&&a(u)})},enlivenPatterns:function(t,n){t=t||[];function a(){++h===u&&n&&n(i)}var i=[],h=0,u=t.length;if(!u){n&&n(i);return}t.forEach(function(d,g){d&&d.source?new f.Pattern(d,function(m){i[g]=m,a()}):(i[g]=d,a())})},groupSVGElements:function(t,n,a){var i;return t&&t.length===1?(typeof a<"u"&&(t[0].sourcePath=a),t[0]):(n&&(n.width&&n.height?n.centerPoint={x:n.width/2,y:n.height/2}:(delete n.width,delete n.height)),i=new f.Group(t,n),typeof a<"u"&&(i.sourcePath=a),i)},populateWithProperties:function(t,n,a){if(a&&Array.isArray(a))for(var i=0,h=a.length;i<h;i++)a[i]in t&&(n[a[i]]=t[a[i]])},createCanvasElement:function(){return f.document.createElement("canvas")},copyCanvasElement:function(t){var n=f.util.createCanvasElement();return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0),n},toDataURL:function(t,n,a){return t.toDataURL("image/"+n,a)},createImage:function(){return f.document.createElement("img")},multiplyTransformMatrices:function(t,n,a){return[t[0]*n[0]+t[2]*n[1],t[1]*n[0]+t[3]*n[1],t[0]*n[2]+t[2]*n[3],t[1]*n[2]+t[3]*n[3],a?0:t[0]*n[4]+t[2]*n[5]+t[4],a?0:t[1]*n[4]+t[3]*n[5]+t[5]]},qrDecompose:function(t){var n=l(t[1],t[0]),a=o(t[0],2)+o(t[1],2),i=s(a),h=(t[0]*t[3]-t[2]*t[1])/i,u=l(t[0]*t[2]+t[1]*t[3],a);return{angle:n/e,scaleX:i,scaleY:h,skewX:u/e,skewY:0,translateX:t[4],translateY:t[5]}},calcRotateMatrix:function(t){if(!t.angle)return f.iMatrix.concat();var n=f.util.degreesToRadians(t.angle),a=f.util.cos(n),i=f.util.sin(n);return[a,i,-i,a,0,0]},calcDimensionsMatrix:function(t){var n=typeof t.scaleX>"u"?1:t.scaleX,a=typeof t.scaleY>"u"?1:t.scaleY,i=[t.flipX?-n:n,0,0,t.flipY?-a:a,0,0],h=f.util.multiplyTransformMatrices,u=f.util.degreesToRadians;return t.skewX&&(i=h(i,[1,0,Math.tan(u(t.skewX)),1],!0)),t.skewY&&(i=h(i,[1,Math.tan(u(t.skewY)),0,1],!0)),i},composeMatrix:function(t){var n=[1,0,0,1,t.translateX||0,t.translateY||0],a=f.util.multiplyTransformMatrices;return t.angle&&(n=a(n,f.util.calcRotateMatrix(t))),(t.scaleX!==1||t.scaleY!==1||t.skewX||t.skewY||t.flipX||t.flipY)&&(n=a(n,f.util.calcDimensionsMatrix(t))),n},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.rotate(0)},saveObjectTransform:function(t){return{scaleX:t.scaleX,scaleY:t.scaleY,skewX:t.skewX,skewY:t.skewY,angle:t.angle,left:t.left,flipX:t.flipX,flipY:t.flipY,top:t.top}},isTransparent:function(t,n,a,i){i>0&&(n>i?n-=i:n=0,a>i?a-=i:a=0);var h=!0,u,d,g=t.getImageData(n,a,i*2||1,i*2||1),m=g.data.length;for(u=3;u<m&&(d=g.data[u],h=d<=0,h!==!1);u+=4);return g=null,h},parsePreserveAspectRatioAttribute:function(t){var n="meet",a="Mid",i="Mid",h=t.split(" "),u;return h&&h.length&&(n=h.pop(),n!=="meet"&&n!=="slice"?(u=n,n="meet"):h.length&&(u=h.pop())),a=u!=="none"?u.slice(1,4):"none",i=u!=="none"?u.slice(5,8):"none",{meetOrSlice:n,alignX:a,alignY:i}},clearFabricFontCache:function(t){t=(t||"").toLowerCase(),t?f.charWidthsCache[t]&&delete f.charWidthsCache[t]:f.charWidthsCache={}},limitDimsByArea:function(t,n){var a=Math.sqrt(n*t),i=Math.floor(n/a);return{x:Math.floor(a),y:i}},capValue:function(t,n,a){return Math.max(t,Math.min(n,a))},findScaleToFit:function(t,n){return Math.min(n.width/t.width,n.height/t.height)},findScaleToCover:function(t,n){return Math.max(n.width/t.width,n.height/t.height)},matrixToSVG:function(t){return"matrix("+t.map(function(n){return f.util.toFixed(n,f.Object.NUM_FRACTION_DIGITS)}).join(" ")+")"},removeTransformFromObject:function(t,n){var a=f.util.invertTransform(n),i=f.util.multiplyTransformMatrices(a,t.calcOwnMatrix());f.util.applyTransformToObject(t,i)},addTransformToObject:function(t,n){f.util.applyTransformToObject(t,f.util.multiplyTransformMatrices(n,t.calcOwnMatrix()))},applyTransformToObject:function(t,n){var a=f.util.qrDecompose(n),i=new f.Point(a.translateX,a.translateY);t.flipX=!1,t.flipY=!1,t.set("scaleX",a.scaleX),t.set("scaleY",a.scaleY),t.skewX=a.skewX,t.skewY=a.skewY,t.angle=a.angle,t.setPositionByOrigin(i,"center","center")},sizeAfterTransform:function(t,n,a){var i=t/2,h=n/2,u=[{x:-i,y:-h},{x:i,y:-h},{x:-i,y:h},{x:i,y:h}],d=f.util.calcDimensionsMatrix(a),g=f.util.makeBoundingBoxFromPoints(u,d);return{x:g.width,y:g.height}},mergeClipPaths:function(t,n){var a=t,i=n;a.inverted&&!i.inverted&&(a=n,i=t),f.util.applyTransformToObject(i,f.util.multiplyTransformMatrices(f.util.invertTransform(a.calcTransformMatrix()),i.calcTransformMatrix()));var h=a.inverted&&i.inverted;return h&&(a.inverted=i.inverted=!1),new f.Group([a],{clipPath:i,inverted:h})},hasStyleChanged:function(t,n,a){return a=a||!1,t.fill!==n.fill||t.stroke!==n.stroke||t.strokeWidth!==n.strokeWidth||t.fontSize!==n.fontSize||t.fontFamily!==n.fontFamily||t.fontWeight!==n.fontWeight||t.fontStyle!==n.fontStyle||t.textBackgroundColor!==n.textBackgroundColor||t.deltaY!==n.deltaY||a&&(t.overline!==n.overline||t.underline!==n.underline||t.linethrough!==n.linethrough)},stylesToArray:function(a,n){for(var a=f.util.object.clone(a,!0),i=n.split(`
2`),h=-1,u={},d=[],g=0;g<i.length;g++){if(!a[g]){h+=i[g].length;continue}for(var m=0;m<i[g].length;m++){h++;var p=a[g][m];if(p&&Object.keys(p).length>0){var C=f.util.hasStyleChanged(u,p,!0);C?d.push({start:h,end:h+1,style:p}):d[d.length-1].end++}u=p||{}}}return d},stylesFromArray:function(t,n){if(!Array.isArray(t))return t;for(var a=n.split(`
3`),i=-1,h=0,u={},d=0;d<a.length;d++)for(var g=0;g<a[d].length;g++)i++,t[h]&&t[h].start<=i&&i<t[h].end&&(u[d]=u[d]||{},u[d][g]=Object.assign({},t[h].style),i===t[h].end-1&&h++);return u}}}(R),function(){var c=Array.prototype.join,s={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},l={m:"l",M:"L"};function o(v,S,w,b,D,x,y,k,E,B,M){var U=f.util.cos(v),G=f.util.sin(v),J=f.util.cos(S),F=f.util.sin(S),A=w*D*J-b*x*F+y,z=b*D*J+w*x*F+k,Y=B+E*(-w*D*G-b*x*U),L=M+E*(-b*D*G+w*x*U),H=A+E*(w*D*F+b*x*J),Q=z+E*(b*D*F-w*x*J);return["C",Y,L,H,Q,A,z]}function e(v,S,w,b,D,x,y){var k=Math.PI,E=y*k/180,B=f.util.sin(E),M=f.util.cos(E),U=0,G=0;w=Math.abs(w),b=Math.abs(b);var J=-M*v*.5-B*S*.5,F=-M*S*.5+B*v*.5,A=w*w,z=b*b,Y=F*F,L=J*J,H=A*z-A*Y-z*L,Q=0;if(H<0){var gt=Math.sqrt(1-H/(A*z));w*=gt,b*=gt}else Q=(D===x?-1:1)*Math.sqrt(H/(A*Y+z*L));var ct=Q*w*F/b,I=-Q*b*J/w,ut=M*ct-B*I+v*.5,mt=B*ct+M*I+S*.5,vt=r(1,0,(J-ct)/w,(F-I)/b),xt=r((J-ct)/w,(F-I)/b,(-J-ct)/w,(-F-I)/b);x===0&&xt>0?xt-=2*k:x===1&&xt<0&&(xt+=2*k);for(var _t=Math.ceil(Math.abs(xt/k*2)),Ot=[],bt=xt/_t,Dt=8/3*Math.sin(bt/4)*Math.sin(bt/4)/Math.sin(bt/2),jt=vt+bt,Et=0;Et<_t;Et++)Ot[Et]=o(vt,jt,M,B,w,b,ut,mt,Dt,U,G),U=Ot[Et][5],G=Ot[Et][6],vt=jt,jt+=bt;return Ot}function r(v,S,w,b){var D=Math.atan2(S,v),x=Math.atan2(b,w);return x>=D?x-D:2*Math.PI-(D-x)}function t(v,S,w,b,D,x,y,k){var E;if(f.cachesBoundsOfCurve&&(E=c.call(arguments),f.boundsOfCurveCache[E]))return f.boundsOfCurveCache[E];var B=Math.sqrt,M=Math.min,U=Math.max,G=Math.abs,J=[],F=[[],[]],A,z,Y,L,H,Q,gt,ct;z=6*v-12*w+6*D,A=-3*v+9*w-9*D+3*y,Y=3*w-3*v;for(var I=0;I<2;++I){if(I>0&&(z=6*S-12*b+6*x,A=-3*S+9*b-9*x+3*k,Y=3*b-3*S),G(A)<1e-12){if(G(z)<1e-12)continue;L=-Y/z,0<L&&L<1&&J.push(L);continue}gt=z*z-4*Y*A,!(gt<0)&&(ct=B(gt),H=(-z+ct)/(2*A),0<H&&H<1&&J.push(H),Q=(-z-ct)/(2*A),0<Q&&Q<1&&J.push(Q))}for(var ut,mt,vt=J.length,xt=vt,_t;vt--;)L=J[vt],_t=1-L,ut=_t*_t*_t*v+3*_t*_t*L*w+3*_t*L*L*D+L*L*L*y,F[0][vt]=ut,mt=_t*_t*_t*S+3*_t*_t*L*b+3*_t*L*L*x+L*L*L*k,F[1][vt]=mt;F[0][xt]=v,F[1][xt]=S,F[0][xt+1]=y,F[1][xt+1]=k;var Ot=[{x:M.apply(null,F[0]),y:M.apply(null,F[1])},{x:U.apply(null,F[0]),y:U.apply(null,F[1])}];return f.cachesBoundsOfCurve&&(f.boundsOfCurveCache[E]=Ot),Ot}function n(v,S,w){for(var b=w[1],D=w[2],x=w[3],y=w[4],k=w[5],E=w[6],B=w[7],M=e(E-v,B-S,b,D,y,k,x),U=0,G=M.length;U<G;U++)M[U][1]+=v,M[U][2]+=S,M[U][3]+=v,M[U][4]+=S,M[U][5]+=v,M[U][6]+=S;return M}function a(v){var S=0,w=0,b=v.length,D=0,x=0,y,k,E,B=[],M,U,G;for(k=0;k<b;++k){switch(E=!1,y=v[k].slice(0),y[0]){case"l":y[0]="L",y[1]+=S,y[2]+=w;case"L":S=y[1],w=y[2];break;case"h":y[1]+=S;case"H":y[0]="L",y[2]=w,S=y[1];break;case"v":y[1]+=w;case"V":y[0]="L",w=y[1],y[1]=S,y[2]=w;break;case"m":y[0]="M",y[1]+=S,y[2]+=w;case"M":S=y[1],w=y[2],D=y[1],x=y[2];break;case"c":y[0]="C",y[1]+=S,y[2]+=w,y[3]+=S,y[4]+=w,y[5]+=S,y[6]+=w;case"C":U=y[3],G=y[4],S=y[5],w=y[6];break;case"s":y[0]="S",y[1]+=S,y[2]+=w,y[3]+=S,y[4]+=w;case"S":M==="C"?(U=2*S-U,G=2*w-G):(U=S,G=w),S=y[3],w=y[4],y[0]="C",y[5]=y[3],y[6]=y[4],y[3]=y[1],y[4]=y[2],y[1]=U,y[2]=G,U=y[3],G=y[4];break;case"q":y[0]="Q",y[1]+=S,y[2]+=w,y[3]+=S,y[4]+=w;case"Q":U=y[1],G=y[2],S=y[3],w=y[4];break;case"t":y[0]="T",y[1]+=S,y[2]+=w;case"T":M==="Q"?(U=2*S-U,G=2*w-G):(U=S,G=w),y[0]="Q",S=y[1],w=y[2],y[1]=U,y[2]=G,y[3]=S,y[4]=w;break;case"a":y[0]="A",y[6]+=S,y[7]+=w;case"A":E=!0,B=B.concat(n(S,w,y)),S=y[6],w=y[7];break;case"z":case"Z":S=D,w=x;break}E||B.push(y),M=y[0]}return B}function i(v,S,w,b){return Math.sqrt((w-v)*(w-v)+(b-S)*(b-S))}function h(v){return v*v*v}function u(v){return 3*v*v*(1-v)}function d(v){return 3*v*(1-v)*(1-v)}function g(v){return(1-v)*(1-v)*(1-v)}function m(v,S,w,b,D,x,y,k){return function(E){var B=h(E),M=u(E),U=d(E),G=g(E);return{x:y*B+D*M+w*U+v*G,y:k*B+x*M+b*U+S*G}}}function p(v,S,w,b,D,x,y,k){return function(E){var B=1-E,M=3*B*B*(w-v)+6*B*E*(D-w)+3*E*E*(y-D),U=3*B*B*(b-S)+6*B*E*(x-b)+3*E*E*(k-x);return Math.atan2(U,M)}}function C(v){return v*v}function T(v){return 2*v*(1-v)}function j(v){return(1-v)*(1-v)}function W(v,S,w,b,D,x){return function(y){var k=C(y),E=T(y),B=j(y);return{x:D*k+w*E+v*B,y:x*k+b*E+S*B}}}function V(v,S,w,b,D,x){return function(y){var k=1-y,E=2*k*(w-v)+2*y*(D-w),B=2*k*(b-S)+2*y*(x-b);return Math.atan2(B,E)}}function et(v,S,w){var b={x:S,y:w},D,x=0,y;for(y=1;y<=100;y+=1)D=v(y/100),x+=i(b.x,b.y,D.x,D.y),b=D;return x}function nt(v,S){for(var w=0,b=0,D=v.iterator,x={x:v.x,y:v.y},y,k,E=.01,B=v.angleFinder,M;b<S&&E>1e-4;)y=D(w),M=w,k=i(x.x,x.y,y.x,y.y),k+b>S?(w-=E,E/=2):(x=y,w+=E,b+=k);return y.angle=B(M),y}function Z(v){for(var S=0,w=v.length,b,D=0,x=0,y=0,k=0,E=[],B,M,U,G=0;G<w;G++){switch(b=v[G],M={x:D,y:x,command:b[0]},b[0]){case"M":M.length=0,y=D=b[1],k=x=b[2];break;case"L":M.length=i(D,x,b[1],b[2]),D=b[1],x=b[2];break;case"C":B=m(D,x,b[1],b[2],b[3],b[4],b[5],b[6]),U=p(D,x,b[1],b[2],b[3],b[4],b[5],b[6]),M.iterator=B,M.angleFinder=U,M.length=et(B,D,x),D=b[5],x=b[6];break;case"Q":B=W(D,x,b[1],b[2],b[3],b[4]),U=V(D,x,b[1],b[2],b[3],b[4]),M.iterator=B,M.angleFinder=U,M.length=et(B,D,x),D=b[3],x=b[4];break;case"Z":case"z":M.destX=y,M.destY=k,M.length=i(D,x,y,k),D=y,x=k;break}S+=M.length,E.push(M)}return E.push({length:S,x:D,y:x}),E}function tt(v,S,w){w||(w=Z(v));for(var b=0;S-w[b].length>0&&b<w.length-2;)S-=w[b].length,b++;var D=w[b],x=S/D.length,y=D.command,k=v[b],E;switch(y){case"M":return{x:D.x,y:D.y,angle:0};case"Z":case"z":return E=new f.Point(D.x,D.y).lerp(new f.Point(D.destX,D.destY),x),E.angle=Math.atan2(D.destY-D.y,D.destX-D.x),E;case"L":return E=new f.Point(D.x,D.y).lerp(new f.Point(k[1],k[2]),x),E.angle=Math.atan2(k[2]-D.y,k[1]-D.x),E;case"C":return nt(D,S);case"Q":return nt(D,S)}}function lt(v){var S=[],w=[],b,D,x=f.rePathCommand,y="[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?\\s*",k="("+y+")"+f.commaWsp,E="([01])"+f.commaWsp+"?",B=k+"?"+k+"?"+k+E+E+k+"?("+y+")",M=new RegExp(B,"g"),U,G,J;if(!v||!v.match)return S;J=v.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);for(var F=0,A,z=J.length;F<z;F++){b=J[F],G=b.slice(1).trim(),w.length=0;var Y=b.charAt(0);if(A=[Y],Y.toLowerCase()==="a")for(var L;L=M.exec(G);)for(var H=1;H<L.length;H++)w.push(L[H]);else for(;U=x.exec(G);)w.push(U[0]);for(var H=0,Q=w.length;H<Q;H++)D=parseFloat(w[H]),isNaN(D)||A.push(D);var gt=s[Y.toLowerCase()],ct=l[Y]||Y;if(A.length-1>gt)for(var I=1,ut=A.length;I<ut;I+=gt)S.push([Y].concat(A.slice(I,I+gt))),Y=ct;else S.push(A)}return S}function ht(v,S){var w=[],b,D=new f.Point(v[0].x,v[0].y),x=new f.Point(v[1].x,v[1].y),y=v.length,k=1,E=0,B=y>2;for(S=S||0,B&&(k=v[2].x<x.x?-1:v[2].x===x.x?0:1,E=v[2].y<x.y?-1:v[2].y===x.y?0:1),w.push(["M",D.x-k*S,D.y-E*S]),b=1;b<y;b++){if(!D.eq(x)){var M=D.midPointFrom(x);w.push(["Q",D.x,D.y,M.x,M.y])}D=v[b],b+1<v.length&&(x=v[b+1])}return B&&(k=D.x>v[b-2].x?1:D.x===v[b-2].x?0:-1,E=D.y>v[b-2].y?1:D.y===v[b-2].y?0:-1),w.push(["L",D.x+k*S,D.y+E*S]),w}function it(v,S,w){return w&&(S=f.util.multiplyTransformMatrices(S,[1,0,0,1,-w.x,-w.y])),v.map(function(b){for(var D=b.slice(0),x={},y=1;y<b.length-1;y+=2)x.x=b[y],x.y=b[y+1],x=f.util.transformPoint(x,S),D[y]=x.x,D[y+1]=x.y;return D})}f.util.joinPath=function(v){return v.map(function(S){return S.join(" ")}).join(" ")},f.util.parsePath=lt,f.util.makePathSimpler=a,f.util.getSmoothPathFromPoints=ht,f.util.getPathSegmentsInfo=Z,f.util.getBoundsOfCurve=t,f.util.getPointOnPath=tt,f.util.transformPath=it}(),function(){var c=Array.prototype.slice;function s(t,n){for(var a=c.call(arguments,2),i=[],h=0,u=t.length;h<u;h++)i[h]=a.length?t[h][n].apply(t[h],a):t[h][n].call(t[h]);return i}function l(t,n){return r(t,n,function(a,i){return a>=i})}function o(t,n){return r(t,n,function(a,i){return a<i})}function e(t,n){for(var a=t.length;a--;
3)t[a]=n;return t}function r(t,n,a){if(!(!t||t.length===0)){var i=t.length-1,h=n?t[i][n]:t[i];if(n)for(;i--;)a(t[i][n],h)&&(h=t[i][n]);else for(;i--;)a(t[i],h)&&(h=t[i]);return h}}f.util.array={fill:e,invoke:s,min:o,max:l}}(),function(){function c(l,o,e){if(e)if(!f.isLikelyNode&&o instanceof Element)l=o;else if(o instanceof Array){l=[];for(var r=0,t=o.length;r<t;r++)l[r]=c({},o[r],e)}else if(o&&typeof o=="object")for(var n in o)n==="canvas"||n==="group"?l[n]=null:o.hasOwnProperty(n)&&(l[n]=c({},o[n],e));else l=o;else for(var n in o)l[n]=o[n];return l}function s(l,o){return c({},l,o)}f.util.object={extend:c,clone:s},f.util.object.extend(f.util,f.Observable)}(),function(){function c(r){return r.replace(/-+(.)?/g,function(t,n){return n?n.toUpperCase():""})}function s(r,t){return r.charAt(0).toUpperCase()+(t?r.slice(1):r.slice(1).toLowerCase())}function l(r){return r.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&apos;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function o(r){var t=0,n,a=[];for(t=0,n;t<r.length;t++)(n=e(r,t))!==!1&&a.push(n);return a}function e(r,t){var n=r.charCodeAt(t);if(isNaN(n))return"";if(n<55296||n>57343)return r.charAt(t);if(55296<=n&&n<=56319){if(r.length<=t+1)throw"High surrogate without following low surrogate";var a=r.charCodeAt(t+1);if(56320>a||a>57343)throw"High surrogate without following low surrogate";return r.charAt(t)+r.charAt(t+1)}if(t===0)throw"Low surrogate without preceding high surrogate";var i=r.charCodeAt(t-1);if(55296>i||i>56319)throw"Low surrogate without preceding high surrogate";return!1}f.util.string={camelize:c,capitalize:s,escapeXml:l,graphemeSplit:o}}(),function(){var c=Array.prototype.slice,s=function(){},l=function(){for(var n in{toString:1})if(n==="toString")return!1;return!0}(),o=function(n,a,i){for(var h in a)h in n.prototype&&typeof n.prototype[h]=="function"&&(a[h]+"").indexOf("callSuper")>-1?n.prototype[h]=function(u){return function(){var d=this.constructor.superclass;this.constructor.superclass=i;var g=a[u].apply(this,arguments);if(this.constructor.superclass=d,u!=="initialize")return g}}(h):n.prototype[h]=a[h],l&&(a.toString!==Object.prototype.toString&&(n.prototype.toString=a.toString),a.valueOf!==Object.prototype.valueOf&&(n.prototype.valueOf=a.valueOf))};function e(){}function r(n){for(var a=null,i=this;i.constructor.superclass;){var h=i.constructor.superclass.prototype[n];if(i[n]!==h){a=h;break}i=i.constructor.superclass.prototype}return a?arguments.length>1?a.apply(this,c.call(arguments,1)):a.call(this):console.log("tried to callSuper "+n+", method not found in prototype chain",this)}function t(){var n=null,a=c.call(arguments,0);typeof a[0]=="function"&&(n=a.shift());function i(){this.initialize.apply(this,arguments)}i.superclass=n,i.subclasses=[],n&&(e.prototype=n.prototype,i.prototype=new e,n.subclasses.push(i));for(var h=0,u=a.length;h<u;h++)o(i,a[h],n);return i.prototype.initialize||(i.prototype.initialize=s),i.prototype.constructor=i,i.prototype.callSuper=r,i}f.util.createClass=t}(),function(){var c=!!f.document.createElement("div").attachEvent,s=["touchstart","touchmove","touchend"];f.util.addListener=function(o,e,r,t){o&&o.addEventListener(e,r,c?!1:t)},f.util.removeListener=function(o,e,r,t){o&&o.removeEventListener(e,r,c?!1:t)};function l(o){var e=o.changedTouches;return e&&e[0]?e[0]:o}f.util.getPointer=function(o){var e=o.target,r=f.util.getScrollLeftTop(e),t=l(o);return{x:t.clientX+r.left,y:t.clientY+r.top}},f.util.isTouchEvent=function(o){return s.indexOf(o.type)>-1||o.pointerType==="touch"}}(),function(){function c(t,n){var a=t.style;if(!a)return t;if(typeof n=="string")return t.style.cssText+=";"+n,n.indexOf("opacity")>-1?r(t,n.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var i in n)if(i==="opacity")r(t,n[i]);else{var h=i==="float"||i==="cssFloat"?typeof a.styleFloat>"u"?"cssFloat":"styleFloat":i;a.setProperty(h,n[i])}return t}var s=f.document.createElement("div"),l=typeof s.style.opacity=="string",o=typeof s.style.filter=="string",e=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,r=function(t){return t};l?r=function(t,n){return t.style.opacity=n,t}:o&&(r=function(t,n){var a=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(a.zoom=1),e.test(a.filter)?(n=n>=.9999?"":"alpha(opacity="+n*100+")",a.filter=a.filter.replace(e,n)):a.filter+=" alph
3a(opacity="+n*100+")",t}),f.util.setStyle=c}(),function(){var c=Array.prototype.slice;function s(g){return typeof g=="string"?f.document.getElementById(g):g}var l,o=function(g){return c.call(g,0)};try{l=o(f.document.childNodes)instanceof Array}catch{}l||(o=function(g){for(var m=new Array(g.length),p=g.length;p--;)m[p]=g[p];return m});function e(g,m){var p=f.document.createElement(g);for(var C in m)C==="class"?p.className=m[C]:C==="for"?p.htmlFor=m[C]:p.setAttribute(C,m[C]);return p}function r(g,m){g&&(" "+g.className+" ").indexOf(" "+m+" ")===-1&&(g.className+=(g.className?" ":"")+m)}function t(g,m,p){return typeof m=="string"&&(m=e(m,p)),g.parentNode&&g.parentNode.replaceChild(m,g),m.appendChild(g),m}function n(g){for(var m=0,p=0,C=f.document.documentElement,T=f.document.body||{scrollLeft:0,scrollTop:0};g&&(g.parentNode||g.host)&&(g=g.parentNode||g.host,g===f.document?(m=T.scrollLeft||C.scrollLeft||0,p=T.scrollTop||C.scrollTop||0):(m+=g.scrollLeft||0,p+=g.scrollTop||0),!(g.nodeType===1&&g.style.position==="fixed")););return{left:m,top:p}}function a(g){var m,p=g&&g.ownerDocument,C={left:0,top:0},T={left:0,top:0},j,W={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!p)return T;for(var V in W)T[W[V]]+=parseInt(i(g,V),10)||0;return m=p.documentElement,typeof g.getBoundingClientRect<"u"&&(C=g.getBoundingClientRect()),j=n(g),{left:C.left+j.left-(m.clientLeft||0)+T.left,top:C.top+j.top-(m.clientTop||0)+T.top}}var i;f.document.defaultView&&f.document.defaultView.getComputedStyle?i=function(g,m){var p=f.document.defaultView.getComputedStyle(g,null);return p?p[m]:void 0}:i=function(g,m){var p=g.style[m];return!p&&g.currentStyle&&(p=g.currentStyle[m]),p},function(){var g=f.document.documentElement.style,m="userSelect"in g?"userSelect":"MozUserSelect"in g?"MozUserSelect":"WebkitUserSelect"in g?"WebkitUserSelect":"KhtmlUserSelect"in g?"KhtmlUserSelect":"";function p(T){return typeof T.onselectstart<"u"&&(T.onselectstart=f.util.falseFunction),m?T.style[m]="none":typeof T.unselectable=="string"&&(T.unselectable="on"),T}function C(T){return typeof T.onselectstart<"u"&&(T.onselectstart=null),m?T.style[m]="":typeof T.unselectable=="string"&&(T.unselectable=""),T}f.util.makeElementUnselectable=p,f.util.makeElementSelectable=C}();function h(g){var m=f.jsdomImplForWrapper(g);return m._canvas||m._image}function u(g){if(f.isLikelyNode){var m=f.jsdomImplForWrapper(g);m&&(m._image=null,m._canvas=null,m._currentSrc=null,m._attributes=null,m._classList=null)}}function d(g,m){g.imageSmoothingEnabled=g.imageSmoothingEnabled||g.webkitImageSmoothingEnabled||g.mozImageSmoothingEnabled||g.msImageSmoothingEnabled||g.oImageSmoothingEnabled,g.imageSmoothingEnabled=m}f.util.setImageSmoothing=d,f.util.getById=s,f.util.toArray=o,f.util.addClass=r,f.util.makeElement=e,f.util.wrapElement=t,f.util.getScrollLeftTop=n,f.util.getElementOffset=a,f.util.getNodeCanvas=h,f.util.cleanUpJsdomNode=u}(),function(){function c(o,e){return o+(/\?/.test(o)?"&":"?")+e}function s(){}function l(o,e){e||(e={});var r=e.method?e.method.toUpperCase():"GET",t=e.onComplete||function(){},n=new f.window.XMLHttpRequest,a=e.body||e.parameters;return n.onreadystatechange=function(){n.readyState===4&&(t(n),n.onreadystatechange=s)},r==="GET"&&(a=null,typeof e.parameters=="string"&&(o=c(o,e.parameters))),n.open(r,o,!0),(r==="POST"||r==="PUT")&&n.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),n.send(a),n}f.util.request=l}(),f.log=console.log,f.warn=console.warn,function(){var c=f.util.object.extend,s=f.util.object.clone,l=[];f.util.object.extend(l,{cancelAll:function(){var h=this.splice(0);return h.forEach(function(u){u.cancel()}),h},cancelByCanvas:function(h){if(!h)return[];var u=this.filter(function(d){return typeof d.target=="object"&&d.target.canvas===h});return u.forEach(function(d){d.cancel()}),u},cancelByTarget:function(h){var u=this.findAnimationsByTarget(h);return u.forEach(function(d){d.cancel()}),u},findAnimationIndex:function(h){return this.indexOf(this.findAnimation(h))},findAnimation:function(h){return this.find(function(u){return u.cancel===h})},findAnimationsByTarget:function(h){return h?this.filter(function(u){return u.target===h}):[]}});function o(){return!1}function e(h,u,d,g){return-d*Math.cos(h/g*(Math.PI/2))+d+u}function r(h){h||(h={});var u=!1,d,g=function(){var m=f.runningAnimations.indexOf(d);return m>-1&&f.runningAnimations.splice(m,1)[0]};return d=c(s(h),{cancel:function(){return u=!0,g()},currentValue:"startValue"in h?h.startValue:0,completionRate:0,durationRate:0}),f.runningAnimations.push(d),a(function(m){var p=m||+new Date,C=h.duration||500,T=p+C,j,W=h.onChange||o,V=h.abort||o,et=h.onComplete||o,nt=h.easing||e,Z="startValue"in h?h.startValue.length>
30:!1,tt="startValue"in h?h.startValue:0,lt="endValue"in h?h.endValue:100,ht=h.byValue||(Z?tt.map(function(it,v){return lt[v]-tt[v]}):lt-tt);h.onStart&&h.onStart(),function it(v){j=v||+new Date;var S=j>T?C:j-p,w=S/C,b=Z?tt.map(function(x,y){return nt(S,tt[y],ht[y],C)}):nt(S,tt,ht,C),D=Math.abs(Z?(b[0]-tt[0])/ht[0]:(b-tt)/ht);if(d.currentValue=Z?b.slice():b,d.completionRate=D,d.durationRate=w,!u){if(V(b,D,w)){g();return}if(j>T){d.currentValue=Z?lt.slice():lt,d.completionRate=1,d.durationRate=1,W(Z?lt.slice():lt,1,1),et(lt,1,1),g();return}else W(b,D,w),a(it)}}(p)}),d.cancel}var t=f.window.requestAnimationFrame||f.window.webkitRequestAnimationFrame||f.window.mozRequestAnimationFrame||f.window.oRequestAnimationFrame||f.window.msRequestAnimationFrame||function(h){return f.window.setTimeout(h,1e3/60)},n=f.window.cancelAnimationFrame||f.window.clearTimeout;function a(){return t.apply(f.window,arguments)}function i(){return n.apply(f.window,arguments)}f.util.animate=r,f.util.requestAnimFrame=a,f.util.cancelAnimFrame=i,f.runningAnimations=l}(),function(){function c(l,o,e){var r="rgba("+parseInt(l[0]+e*(o[0]-l[0]),10)+","+parseInt(l[1]+e*(o[1]-l[1]),10)+","+parseInt(l[2]+e*(o[2]-l[2]),10);return r+=","+(l&&o?parseFloat(l[3]+e*(o[3]-l[3])):1),r+=")",r}function s(l,o,e,r){var t=new f.Color(l).getSource(),n=new f.Color(o).getSource(),a=r.onComplete,i=r.onChange;return r=r||{},f.util.animate(f.util.object.extend(r,{duration:e||500,startValue:t,endValue:n,byValue:n,easing:function(h,u,d,g){var m=r.colorEasing?r.colorEasing(h,g):1-Math.cos(h/g*(Math.PI/2));return c(u,d,m)},onComplete:function(h,u,d){if(a)return a(c(n,n,0),u,d)},onChange:function(h,u,d){if(i){if(Array.isArray(h))return i(c(h,h,0),u,d);i(h,u,d)}}}))}f.util.animateColor=s}(),function(){function c(v,S,w,b){return v<Math.abs(S)?(v=S,b=w/4):S===0&&v===0?b=w/(2*Math.PI)*Math.asin(1):b=w/(2*Math.PI)*Math.asin(S/v),{a:v,c:S,p:w,s:b}}function s(v,S,w){return v.a*Math.pow(2,10*(S-=1))*Math.sin((S*w-v.s)*(2*Math.PI)/v.p)}function l(v,S,w,b){return w*((v=v/b-1)*v*v+1)+S}function o(v,S,w,b){return v/=b/2,v<1?w/2*v*v*v+S:w/2*((v-=2)*v*v+2)+S}function e(v,S,w,b){return w*(v/=b)*v*v*v+S}function r(v,S,w,b){return-w*((v=v/b-1)*v*v*v-1)+S}function t(v,S,w,b){return v/=b/2,v<1?w/2*v*v*v*v+S:-w/2*((v-=2)*v*v*v-2)+S}function n(v,S,w,b){return w*(v/=b)*v*v*v*v+S}function a(v,S,w,b){return w*((v=v/b-1)*v*v*v*v+1)+S}function i(v,S,w,b){return v/=b/2,v<1?w/2*v*v*v*v*v+S:w/2*((v-=2)*v*v*v*v+2)+S}function h(v,S,w,b){return-w*Math.cos(v/b*(Math.PI/2))+w+S}function u(v,S,w,b){return w*Math.sin(v/b*(Math.PI/2))+S}function d(v,S,w,b){return-w/2*(Math.cos(Math.PI*v/b)-1)+S}function g(v,S,w,b){return v===0?S:w*Math.pow(2,10*(v/b-1))+S}function m(v,S,w,b){return v===b?S+w:w*(-Math.pow(2,-10*v/b)+1)+S}function p(v,S,w,b){return v===0?S:v===b?S+w:(v/=b/2,v<1?w/2*Math.pow(2,10*(v-1))+S:w/2*(-Math.pow(2,-10*--v)+2)+S)}function C(v,S,w,b){return-w*(Math.sqrt(1-(v/=b)*v)-1)+S}function T(v,S,w,b){return w*Math.sqrt(1-(v=v/b-1)*v)+S}function j(v,S,w,b){return v/=b/2,v<1?-w/2*(Math.sqrt(1-v*v)-1)+S:w/2*(Math.sqrt(1-(v-=2)*v)+1)+S}function W(v,S,w,b){var D=1.70158,x=0,y=w;if(v===0)return S;if(v/=b,v===1)return S+w;x||(x=b*.3);var k=c(y,w,x,D);return-s(k,v,b)+S}function V(v,S,w,b){var D=1.70158,x=0,y=w;if(v===0)return S;if(v/=b,v===1)return S+w;x||(x=b*.3);var k=c(y,w,x,D);return k.a*Math.pow(2,-10*v)*Math.sin((v*b-k.s)*(2*Math.PI)/k.p)+k.c+S}function et(v,S,w,b){var D=1.70158,x=0,y=w;if(v===0)return S;if(v/=b/2,v===2)return S+w;x||(x=b*(.3*1.5));var k=c(y,w,x,D);return v<1?-.5*s(k,v,b)+S:k.a*Math.pow(2,-10*(v-=1))*Math.sin((v*b-k.s)*(2*Math.PI)/k.p)*.5+k.c+S}function nt(v,S,w,b,D){return D===void 0&&(D=1.70158),w*(v/=b)*v*((D+1)*v-D)+S}function Z(v,S,w,b,D){return D===void 0&&(D=1.70158),w*((v=v/b-1)*v*((D+1)*v+D)+1)+S}function tt(v,S,w,b,D){return D===void 0&&(D=1.70158),v/=b/2,v<1?w/2*(v*v*(((D*=1.525)+1)*v-D))+S:w/2*((v-=2)*v*(((D*=1.525)+1)*v+D)+2)+S}function lt(v,S,w,b){return w-ht(b-v,0,w,b)+S}function ht(v,S,w,b){return(v/=b)<1/2.75?w*(7.5625*v*v)+S:v<2/2.75?w*(7.5625*(v-=1.5/2.75)*v+.75)+S:v<2.5/2.75?w*(7.5625*(v-=2.25/2.75)*v+.9375)+S:w*(7.5625*(v-=2.625/2.75)*v+.984375)+S}
3function it(v,S,w,b){return v<b/2?lt(v*2,0,w,b)*.5+S:ht(v*2-b,0,w,b)*.5+w*.5+S}f.util.ease={easeInQuad:function(v,S,w,b){return w*(v/=b)*v+S},easeOutQuad:function(v,S,w,b){return-w*(v/=b)*(v-2)+S},easeInOutQuad:function(v,S,w,b){return v/=b/2,v<1?w/2*v*v+S:-w/2*(--v*(v-2)-1)+S},easeInCubic:function(v,S,w,b){return w*(v/=b)*v*v+S},easeOutCubic:l,easeInOutCubic:o,easeInQuart:e,easeOutQuart:r,easeInOutQuart:t,easeInQuint:n,easeOutQuint:a,easeInOutQuint:i,easeInSine:h,easeOutSine:u,easeInOutSine:d,easeInExpo:g,easeOutExpo:m,easeInOutExpo:p,easeInCirc:C,easeOutCirc:T,easeInOutCirc:j,easeInElastic:W,easeOutElastic:V,easeInOutElastic:et,easeInBack:nt,easeOutBack:Z,easeInOutBack:tt,easeInBounce:lt,easeOutBounce:ht,easeInOutBounce:it}}(),function(c){var s=c.fabric||(c.fabric={}),l=s.util.object.extend,o=s.util.object.clone,e=s.util.toFixed,r=s.util.parseUnit,t=s.util.multiplyTransformMatrices,n=["path","circle","polygon","polyline","ellipse","rect","line","image","text"],a=["symbol","image","marker","pattern","view","svg"],i=["pattern","defs","symbol","metadata","clipPath","mask","desc"],h=["symbol","g","a","svg","clipPath","defs"],u={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","letter-spacing":"charSpacing","paint-order":"paintFirst","stroke-dasharray":"strokeDashArray","stroke-dashoffset":"strokeDashOffset","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"textAnchor",opacity:"opacity","clip-path":"clipPath","clip-rule":"clipRule","vector-effect":"strokeUniform","image-rendering":"imageSmoothing"},d={stroke:"strokeOpacity",fill:"fillOpacity"},g="font-size",m="clip-path";
3s.svgValidTagNamesRegEx=T(n),s.svgViewBoxElementsRegEx=T(a),s.svgInvalidAncestorsRegEx=T(i),s.svgValidParentsRegEx=T(h),s.cssRules={},s.gradientDefs={},s.clipPaths={};function p(x){return x in u?u[x]:x}function C(x,y,k,E){var B=Array.isArray(y),M;if((x==="fill"||x==="stroke")&&y==="none")y="";else{if(x==="strokeUniform")return y==="non-scaling-stroke";if(x==="strokeDashArray")y==="none"?y=null:y=y.replace(/,/g," ").split(/\s+/).map(parseFloat);else if(x==="transformMatrix")k&&k.transformMatrix?y=t(k.transformMatrix,s.parseTransformAttribute(y)):y=s.parseTransformAttribute(y);else if(x==="visible")y=y!=="none"&&y!=="hidden",k&&k.visible===!1&&(y=!1);else if(x==="opacity")y=parseFloat(y),k&&typeof k.opacity<"u"&&(y*=k.opacity);else if(x==="textAnchor")y=y==="start"?"left":y==="end"?"right":"center";else if(x==="charSpacing")M=r(y,E)/E*1e3;else if(x==="paintFirst"){var U=y.indexOf("fill"),G=y.indexOf("stroke"),y="fill";(U>-1&&G>-1&&G<U||U===-1&&G>-1)&&(y="stroke")}else{if(x==="href"||x==="xlink:href"||x==="font")return y;if(x==="imageSmoothing")return y==="optimizeQuality";M=B?y.map(r):r(y,E)}}return!B&&isNaN(M)?y:M}function T(x){return new RegExp("^("+x.join("|")+")\\b","i")}function j(x){for(var y in d)if(!(typeof x[d[y]]>"u"||x[y]==="")){if(typeof x[y]>"u"){if(!s.Object.prototype[y])continue;x[y]=s.Object.prototype[y]}if(x[y].indexOf("url(")!==0){var k=new s.Color(x[y]);x[y]=k.setAlpha(e(k.getAlpha()*x[d[y]],2)).toRgba()}}return x}function W(x,y){var k,E=[],B,M,U;for(M=0,U=y.length;M<U;M++)k=y[M],B=x.getElementsByTagName(k),E=E.concat(Array.prototype.slice.call(B));return E}s.parseTransformAttribute=function(){function x(I,ut){var mt=s.util.cos(ut[0]),vt=s.util.sin(ut[0]),xt=0,_t=0;ut.length===3&&(xt=ut[1],_t=ut[2]),I[0]=mt,I[1]=vt,I[2]=-vt,I[3]=mt,I[4]=xt-(mt*xt-vt*_t),I[5]=_t-(vt*xt+mt*_t)}function y(I,ut){var mt=ut[0],vt=ut.length===2?ut[1]:ut[0];I[0]=mt,I[3]=vt}function k(I,ut,mt){I[mt]=Math.tan(s.util.degreesToRadians(ut[0]))}function E(I,ut){I[4]=ut[0],ut.length===2&&(I[5]=ut[1])}var B=s.iMatrix,M=s.reNum,U=s.commaWsp,G="(?:(skewX)\\s*\\(\\s*("+M+")\\s*\\))",J="(?:(skewY)\\s*\\(\\s*("+M+")\\s*\\))",F="(?:(rotate)\\s*\\(\\s*("+M+")(?:"+U+"("+M+")"+U+"("+M+"))?\\s*\\))",A="(?:(scale)\\s*\\(\\s*("+M+")(?:"+U+"("+M+"))?\\s*\\))",z="(?:(translate)\\s*\\(\\s*("+M+")(?:"+U+"("+M+"))?\\s*\\))",Y="(?:(matrix)\\s*\\(\\s*("+M+")"+U+"("+M+")"+U+"("+M+")"+U+"("+M+")"+U+"("+M+")"+U+"("+M+")\\s*\\))",L="(?:"+Y+"|"+z+"|"+A+"|"+F+"|"+G+"|"+J+")",H="(?:"+L+"(?:"+U+"*"+L+")*)",Q="^\\s*(?:"+H+"?)\\s*$",gt=new RegExp(Q),ct=new RegExp(L,"g");return function(I){var ut=B.concat(),mt=[];if(!I||I&&!gt.test(I))return ut;I.replace(ct,function(xt){var _t=new RegExp(L).exec(xt).filter(function(Dt){return!!Dt}),Ot=_t[1],bt=_t.slice(2).map(parseFloat);switch(Ot){case"translate":E(ut,bt);break;case"rotate":bt[0]=s.util.degreesToRadians(bt[0]),x(ut,bt);break;case"scale":y(ut,bt);break;case"skewX":k(ut,bt,2);break;case"skewY":k(ut,bt,1);break;case"matrix":ut=bt;break}mt.push(ut.concat()),ut=B.concat()});for(var vt=mt[0];mt.length>1;)mt.shift(),vt=s.util.multiplyTransformMatrices(vt,mt[0]);return vt}}();function V(x,y){var k,E;x.replace(/;\s*$/,"").split(";").forEach(function(B){var M=B.split(":");k=M[0].trim().toLowerCase(),E=M[1].trim(),y[k]=E})}function et(x,y){var k,E;for(var B in x)typeof x[B]>"u"||(k=B.toLowerCase(),E=x[B],y[k]=E)}function nt(x,y){var k={};for(var E in s.cssRules[y])if(Z(x,E.split(" ")))for(var B in s.cssRules[y][E])k[B]=s.cssRules[y][E][B];return k}function Z(x,y){var k,E=!0;return k=lt(x,y.pop()),k&&y.length&&(E=tt(x,y)),k&&E&&y.length===0}function tt(x,y){for(var k,E=!0;x.parentNode&&x.parentNode.nodeType===1&&y.length;)E&&(k=y.pop()),x=x.parentNode,E=lt(x,k);return y.length===0}function lt(x,y){var k=x.nodeName,E=x.getAttribute("class"),B=x.getAttribute("id"),M,U;if(M=new RegExp("^"+k,"i"),y=y.replace(M,""),B&&y.length&&(M=new RegExp("#"+B+"(?![a-zA-Z\\-]+)","i"),y=y.replace(M,"")),E&&y.length)for(E=E.split(" "),U=E.length;U--;)M=new RegExp("\\."+E[U]+"(?![a-zA-Z\\-]+)","i"),y=y.replace(M,"");return y.length===0}function ht(x,y){var k;if(x.getElementById&&(k=x.getElementById(y)),k)return k;var E,B,M,U=x.getElementsByTagName("*");for(B=0,M=U.length;B<M;B++)if(E=U[B],y===E.getAttribute("id"))return E}function it(x){for(var y=W(x,["use","svg:use"]),k=0;y.length&&k<y.length;){var E=y[k],B=E.getAttribute("xlink:href")||E.getAttribute("href");if(B===null)return;var M=B.slice(1),U=E.getAttribute("x")||0,G=E.getAttribute("y")||0,J=ht(x,M).cloneNode(!0),F=(J.getAttribute("transform")||"")+" translate("+U+", "+G+")",A,z=y.length,Y,L,H,Q,gt=s.svgNS;if(S(J),/^svg$/i.test(J.nodeName)){var ct=J.ownerDocument.createElementNS(gt,"g");for(L=0,H=J.attributes,Q=H.length;L<Q;L++)Y=H.item(L),ct.setAttributeNS(gt,Y.nodeName,Y.nodeValue);for(;J.firstChild;)ct.appendChild(J.firstChild);J=ct}for(L=0,H=E.attributes,Q=H.length;L<Q;L++)Y=H.item(L),!(Y.nodeName==="x"||Y.nodeName==="y"||Y.nodeName==="xlink:href"||Y.nodeName==="href")&&(Y.nodeName==="transform"?F=Y.nodeValue+" "+F:J.setAttribute(Y.nodeName,Y.nodeValue));J.setAttribute("transform",F),J.setAttribute("instantiated_by_use","1"),J.removeAttribute("id"),A=E.parentNode,A.replaceChild(J,E),y.length===z&&k++}}var v=new RegExp("^\\s*("+s.reNum+"+)\\s*,?\\s*("+s.reNum+"+)\\s*,?\\s*("+s.reNum+"+)\\s*,?\\s*("+s.reNum+"+)\\s*$");function S(x){if(!s.svgViewBoxElementsRegEx.test(x.nodeName))return{};
vendor: 10,621 bytes, line 3
3var y=x.getAttribute("viewBox"),k=1,E=1,B=0,M=0,U,G,J,F,A=x.getAttribute("width"),z=x.getAttribute("height"),Y=x.getAttribute("x")||0,L=x.getAttribute("y")||0,H=x.getAttribute("preserveAspectRatio")||"",Q=!y||!(y=y.match(v)),gt=!A||!z||A==="100%"||z==="100%",ct=Q&&gt,I={},ut="",mt=0,vt=0;if(I.width=0,I.height=0,I.toBeParsed=ct,Q&&(Y||L)&&x.parentNode&&x.parentNode.nodeName!=="#document"&&(ut=" translate("+r(Y)+" "+r(L)+") ",J=(x.getAttribute("transform")||"")+ut,x.setAttribute("transform",J),x.removeAttribute("x"),x.removeAttribute("y")),ct)return I;if(Q)return I.width=r(A),I.height=r(z),I;if(B=-parseFloat(y[1]),M=-parseFloat(y[2]),U=parseFloat(y[3]),G=parseFloat(y[4]),I.minX=B,I.minY=M,I.viewBoxWidth=U,I.viewBoxHeight=G,gt?(I.width=U,I.height=G):(I.width=r(A),I.height=r(z),k=I.width/U,E=I.height/G),H=s.util.parsePreserveAspectRatioAttribute(H),H.alignX!=="none"&&(H.meetOrSlice==="meet"&&(E=k=k>E?E:k),H.meetOrSlice==="slice"&&(E=k=k>E?k:E),mt=I.width-U*k,vt=I.height-G*k,H.alignX==="Mid"&&(mt/=2),H.alignY==="Mid"&&(vt/=2),H.alignX==="Min"&&(mt=0),H.alignY==="Min"&&(vt=0)),k===1&&E===1&&B===0&&M===0&&Y===0&&L===0)return I;if((Y||L)&&x.parentNode.nodeName!=="#document"&&(ut=" translate("+r(Y)+" "+r(L)+") "),J=ut+" matrix("+k+" 0 0 "+E+" "+(B*k+mt)+" "+(M*E+vt)+") ",x.nodeName==="svg"){for(F=x.ownerDocument.createElementNS(s.svgNS,"g");x.firstChild;)F.appendChild(x.firstChild);x.appendChild(F)}else F=x,F.removeAttribute("x"),F.removeAttribute("y"),J=F.getAttribute("transform")+J;return F.setAttribute("transform",J),I}function w(x,y){for(;x&&(x=x.parentNode);)if(x.nodeName&&y.test(x.nodeName.replace("svg:",""))&&!x.getAttribute("instantiated_by_use"))return!0;return!1}s.parseSVGDocument=function(x,y,k,E){if(x){it(x);var B=s.Object.__uid++,M,U,G=S(x),J=s.util.toArray(x.getElementsByTagName("*"));if(G.crossOrigin=E&&E.crossOrigin,G.svgUid=B,J.length===0&&s.isLikelyNode){J=x.selectNodes('//*[name(.)!="svg"]');var F=[];for(M=0,U=J.length;M<U;M++)F[M]=J[M];J=F}var A=J.filter(function(Y){return S(Y),s.svgValidTagNamesRegEx.test(Y.nodeName.replace("svg:",""))&&!w(Y,s.svgInvalidAncestorsRegEx)});if(!A||A&&!A.length){y&&y([],{});return}var z={};J.filter(function(Y){return Y.nodeName.replace("svg:","")==="clipPath"}).forEach(function(Y){var L=Y.getAttribute("id");z[L]=s.util.toArray(Y.getElementsByTagName("*")).filter(function(H){return s.svgValidTagNamesRegEx.test(H.nodeName.replace("svg:",""))})}),s.gradientDefs[B]=s.getGradientDefs(x),s.cssRules[B]=s.getCSSRules(x),s.clipPaths[B]=z,s.parseElements(A,function(Y,L){y&&(y(Y,G,L,J),delete s.gradientDefs[B],delete s.cssRules[B],delete s.clipPaths[B])},o(G),k,E)}};function b(x,y){var k=["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"],E="xlink:href",B=y.getAttribute(E).slice(1),M=ht(x,B);if(M&&M.getAttribute(E)&&b(x,M),k.forEach(function(G){M&&!y.hasAttribute(G)&&M.hasAttribute(G)&&y.setAttribute(G,M.getAttribute(G))}),!y.children.length)for(var U=M.cloneNode(!0);U.firstChild;)y.appendChild(U.firstChild);y.removeAttribute(E)}var D=new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+s.reNum+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+s.reNum+"))?\\s+(.*)");l(s,{parseFontDeclaration:function(x,y){var k=x.match(D);if(k){var E=k[1],B=k[3],M=k[4],U=k[5],G=k[6];E&&(y.fontStyle=E),B&&(y.fontWeight=isNaN(parseFloat(B))?B:parseFloat(B)),M&&(y.fontSize=r(M)),G&&(y.fontFamily=G),U&&(y.lineHeight=U==="normal"?1:U)}},getGradientDefs:function(x){var y=["linearGradient","radialGradient","svg:linearGradient","svg:radialGradient"],k=W(x,y),E,B=0,M={};for(B=k.length;B--;)E=k[B],E.getAttribute("xlink:href")&&b(x,E),M[E.getAttribute("id")]=E;return M},parseAttributes:function(x,y,k){if(x){var E,B={},M,U;typeof k>"u"&&(k=x.getAttribute("svgUid")),x.parentNode&&s.svgValidParentsRegEx.test(x.parentNode.nodeName)&&(B=s.parseAttributes(x.parentNode,y,k));var G=y.reduce(function(H,Q){return E=x.getAttribute(Q),E&&(H[Q]=E),H},{}),J=l(nt(x,k),s.parseStyleAttribute(x));G=l(G,J),J[m]&&x.setAttribute(m,J[m]),M=U=B.fontSize||s.Text.DEFAULT_SVG_FONT_SIZE,G[g]&&(G[g]=M=r(G[g],U));var F,A,z={};for(var Y in G)F=p(Y),A=C(F,G[Y],B,M),z[F]=A;z&&z.font&&s.parseFontDeclaration(z.font,z);var L=l(B,z);return s.svgValidParentsRegEx.test(x.nodeName)?L:j(L)}},parseElements:function(x,y,k,E,B){new s.ElementsParser(x,y,k,E,B).parse()},parseStyleAttribute:function(x){var y={},k=x.getAttribute("style");return k&&(typeof k=="string"?V(k,y):et(k,y)),y},parsePointsAttribute:function(x){if(!x)return null;x=x.replace(/,/g," ").trim(),x=x.split(/\s+/);var y=[],k,E;for(k=0,E=x.length;k<E;k+=2)y.push({x:parseFloat(x[k]),y:parseFloat(x[k+1])});return y},getCSSRules:function(x){var y=x.getElementsByTagName("style"),k,E,B={},M;for(k=0,E=y.length;k<E;k++){var U=y[k].textContent;U=U.replace(/\/\*[\s\S]*?\*\//g,""),U.trim()!==""&&(M=U.split("}"),M=M.filter(function(G){return G.trim()}),M.forEach(function(G){var J=G.split("{"),F={},A=J[1].trim(),z=A.split(";").filter(function(Q){return Q.trim()});for(k=0,E=z.length;k<E;k++){var Y=z[k].split(":"),L=Y[0].trim(),H=Y[1].trim();F[L]=H}G=J[0].trim(),G.split(",").forEach(function(Q){Q=Q.replace(/^svg/i,"").trim(),Q!==""&&(B[Q]?s.util.object.extend(B[Q],F):B[Q]=s.util.object.clone(F))})}))}return B},loadSVGFromURL:function(x,y,k,E){x=x.replace(/^\n\s*/,"").trim(),new s.util.request(x,{method:"get",onComplete:B});function B(M){var U=M.responseXML;if(!U||!U.documentElement)return y&&y(null),!1;s.parseSVGDocument(U.documentElement,function(G,J,F,A){y&&y(G,J,F,A)},k,E)}},loadSVGFromString:function(x,y,k,E){var B=new s.window.DOMParser,M=B.parseFromString(x.trim(),"text/xml");s.parseSVGDocument(M.documentElement,function(U,G,J,F){y(U,G,J,F)},k,E)}})}(R),f.ElementsParser=function(c,s,l,o,e,r){this.elements=c,this.callback=s,this.options=l,this.reviver=o,this.svgUid=l&&l.svgUid||0,this.parsingOptions=e,this.regexUrl=/^url\(['"]?#([^'"]+)['"]?\)/g,this.doc=r},function(c){c.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},c.createObjects=function(){var s=this;this.elements.forEach(function(l,o){l.setAttribute("svgUid",s.svgUid),s.createObject(l,o)})},c.findTag=function(s){return f[f.util.string.capitalize(s.tagName.replace("svg:",""))]},c.createObject=function(s,l){var o=this.findTag(s);if(o&&o.fromElement)try{o.fromElement(s,this.createCallback(l,s),this.options)}catch(e){f.log(e)}else this.checkIfDone()},c.createCallback=function(s,l){var o=this;return function(e){var r;o.resolveGradient(e,l,"fill"),o.resolveGradient(e,l,"stroke"),e instanceof f.Image&&e._originalElement&&(r=e.parsePreserveAspectRatioAttribute(l)),e._removeTransformMatrix(r),o.resolveClipPath(e,l),o.reviver&&o.reviver(l,e),o.instances[s]=e,o.checkIfDone()}},c.extractPropertyDefinition=function(s,l,o){var e=s[l],r=this.regexUrl;if(r.test(e)){r.lastIndex=0;var t=r.exec(e)[1];return r.lastIndex=0,f[o][this.svgUid][t]}},c.resolveGradient=function(s,l,o){var e=this.extractPropertyDefinition(s,o,"gradientDefs");if(e){var r=l.getAttribute(o+"-opacity"),t=f.Gradient.fromElement(e,s,r,this.options);s.set(o,t)}},c.createClipPathCallback=function(s,l){return function(o){o._removeTransformMatrix(),o.fillRule=o.clipRule,l.push(o)}},c.resolveClipPath=function(s,l){var o=this.extractPropertyDefinition(s,"clipPath","clipPaths"),e,r,t,n,a,i;if(o){n=[],t=f.util.invertTransform(s.calcTransformMatrix());for(var h=o[0].parentNode,u=l;u.parentNode&&u.getAttribute("clip-path")!==s.clipPath;)u=u.parentNode;u.parentNode.appendChild(h);for(var d=0;d<o.length;d++)e=o[d],r=this.findTag(e),r.fromElement(e,this.createClipPathCallback(s,n),this.options);n.length===1?o=n[0]:o=new f.Group(n),a=f.util.multiplyTransformMatrices(t,o.calcTransformMatrix()),o.clipPath&&this.resolveClipPath(o,u);var i=f.util.qrDecompose(a);o.flipX=!1,o.flipY=!1,o.set("scaleX",i.scaleX),o.set("scaleY",i.scaleY),o.angle=i.angle,o.skewX=i.skewX,o.skewY=0,o.setPositionByOrigin({x:i.translateX,y:i.translateY},"center","center"),s.clipPath=o}else delete s.clipPath},c.checkIfDone=function(){--this.numElements===0&&(this.instances=this.instances.filter(function(s){return s!=null}),this.callback(this.instances,this.elements))}}(f.ElementsParser.prototype),function(c){var s=c.fabric||(c.fabric={});if(s.Point){s.warn("fabric.Point is already defined");return}s.Point=l;function l(o,e){this.x=o,this.y=e}l.prototype={type:"point",constructor:l,add:function(o){return new l(this.x+o.x,this.y+o.y)},addEquals:function(o){return this.x+=o.x,this.y+=o.y,this},scalarAdd:function(o){return new l(this.x+o,this.y+o)},scalarAddEquals:function(o){return this.x+=o,this.y+=o,this},subtract:function(o){return new l(this.x-o.x,this.y-o.y)},subtractEquals:function(o){return this.x-=o.x,this.y-=o.y,this},scalarSubtract:function(o){return new l(this.x-o,this.y-o)},scalarSubtractEquals:function(o){return this.x-=o,this.y-=o,this},multiply:function(o){return new l(this.x*o,this.y*o)},multiplyEquals:function(o){return this.x*=o,this.y*=o,this},divide:function(o){return new l(this.x/o,this.y/o)},divideEquals:function(o){return this.x/=o,this.y/=o,this},eq:function(o){return this.x===o.x&&this.y===o.y},lt:function(o){return this.x<o.x&&this.y<o.y},lte:function(o){return this.x<=o.x&&this.y<=o.y},gt:function(o){return this.x>o.x&&this.y>o.y},gte:function(o){return this.x>=o.x&&this.y>=o.y},lerp:function(o,e){return typeof e>"u"&&(e=.5),e=Math.max(Math.min(1,e),0),new l(this.x+(o.x-this.x)*e,this.y+(o.y-this.y)*e)},distanceFrom:function(o){var e=this.x-o.x,r=this.y-o.y;return Math.sqrt(e*e+r*r)},midPointFrom:function(o){return this.lerp(o)},min:function(o){return new l(Math.min(this.x,o.x),Math.min(this.y,o.y))},max:function(o){return new l(Math.max(this.x,o.x),Math.max(this.y,o.y))},toString:function(){return this.x+","+this.y},setXY:function(o,e){return this.x=o,this.y=e,this},setX:function(o){return this.x=o,this},setY:function(o){return this.y=o,this},setFromPoint:function(o){return this.x=o.x,this.y=o.y,this},swap:function(o){var e=this.x,r=this.y;this.x=o.x,this.y=o.y,o.x=e,o.y=r},clone:function(){return new l(this.x,this.y)}}}(R),function(c){var s=c.fabric||(c.fabric={});if(s.Intersection){s.warn("fabric.Intersection is already defined");return}function l(o){this.status=o,this.points=[]}s.Intersection=l,s.Intersection.prototype={constructor:l,appendPoint:function(o){return this.points.push(o),this},appendPoints:function(o){return this.points=this.points.concat(o),this}},s.Intersection.intersectLineLine=function(o,e,r,t){var n,a=(t.x-r.x)*(o.y-r.y)-(t.y-r.y
3)*(o.x-r.x),i=(e.x-o.x)*(o.y-r.y)-(e.y-o.y)*(o.x-r.x),h=(t.y-r.y)*(e.x-o.x)-(t.x-r.x)*(e.y-o.y);if(h!==0){var u=a/h,d=i/h;0<=u&&u<=1&&0<=d&&d<=1?(n=new l("Intersection"),n.appendPoint(new s.Point(o.x+u*(e.x-o.x),o.y+u*(e.y-o.y)))):n=new l}else a===0||i===0?n=new l("Coincident"):n=new l("Parallel");return n},s.Intersection.intersectLinePolygon=function(o,e,r){var t=new l,n=r.length,a,i,h,u;for(u=0;u<n;u++)a=r[u],i=r[(u+1)%n],h=l.intersectLineLine(o,e,a,i),t.appendPoints(h.points);return t.points.length>0&&(t.status="Intersection"),t},s.Intersection.intersectPolygonPolygon=function(o,e){var r=new l,t=o.length,n;for(n=0;n<t;n++){var a=o[n],i=o[(n+1)%t],h=l.intersectLinePolygon(a,i,e);r.appendPoints(h.points)}return r.points.length>0&&(r.status="Intersection"),r},s.Intersection.intersectPolygonRectangle=function(o,e,r){var t=e.min(r),n=e.max(r),a=new s.Point(n.x,t.y),i=new s.Point(t.x,n.y),h=l.intersectLinePolygon(t,a,o),u=l.intersectLinePolygon(a,n,o),d=l.intersectLinePolygon(n,i,o),g=l.intersectLinePolygon(i,t,o),m=new l;return m.appendPoints(h.points),m.appendPoints(u.points),m.appendPoints(d.points),m.appendPoints(g.points),m.points.length>0&&(m.status="Intersection"),m}}(R),function(c){var s=c.fabric||(c.fabric={});if(s.Color){s.warn("fabric.Color is already defined.");return}function l(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}s.Color=l,s.Color.prototype={_tryParsingColor:function(e){var r;e in l.colorNameMap&&(e=l.colorNameMap[e]),e==="transparent"&&(r=[255,255,255,0]),r||(r=l.sourceFromHex(e)),r||(r=l.sourceFromRgb(e)),r||(r=l.sourceFromHsl(e)),r||(r=[0,0,0,1]),r&&this.setSource(r)},_rgbToHsl:function(e,r,t){e/=255,r/=255,t/=255;var n,a,i,h=s.util.array.max([e,r,t]),u=s.util.array.min([e,r,t]);if(i=(h+u)/2,h===u)n=a=0;else{var d=h-u;switch(a=i>.5?d/(2-h-u):d/(h+u),h){case e:n=(r-t)/d+(r<t?6:0);break;case r:n=(t-e)/d+2;break;case t:n=(e-r)/d+4;break}n/=6}return[Math.round(n*360),Math.round(a*100),Math.round(i*100)]},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHsl:function(){var e=this.getSource(),r=this._rgbToHsl(e[0],e[1],e[2]);return"hsl("+r[0]+","+r[1]+"%,"+r[2]+"%)"},toHsla:function(){var e=this.getSource(),r=this._rgbToHsl(e[0],e[1],e[2]);return"hsla("+r[0]+","+r[1]+"%,"+r[2]+"%,"+e[3]+")"},toHex:function(){var e=this.getSource(),r,t,n;return r=e[0].toString(16),r=r.length===1?"0"+r:r,t=e[1].toString(16),t=t.length===1?"0"+t:t,n=e[2].toString(16),n=n.length===1?"0"+n:n,r.toUpperCase()+t.toUpperCase()+n.toUpperCase()},toHexa:function(){var e=this.getSource(),r;return r=Math.round(e[3]*255),r=r.toString(16),r=r.length===1?"0"+r:r,this.toHex()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var r=this.getSource();return r[3]=e,this.setSource(r),this},toGrayscale:function(){var e=this.getSource(),r=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),t=e[3];return this.setSource([r,r,r,t]),this},toBlackWhite:function(e){var r=this.getSource(),t=(r[0]*.3+r[1]*.59+r[2]*.11).toFixed(0),n=r[3];return e=e||127,t=Number(t)<Number(e)?0:255,this.setSource([t,t,t,n]),this},overlayWith:function(e){e instanceof l||(e=new l(e));var r=[],t=this.getAlpha(),n=.5,a=this.getSource(),i=e.getSource(),h;for(h=0;h<3;h++)r.push(Math.round(a[h]*(1-n)+i[h]*n));return r[3]=t,this.setSource(r),this}},s.Color.reRGBa=/^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*((?:\d*\.?\d+)?)\s*)?\)$/i,s.Color.reHSLa=/^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/i,s.Color.reHex=/^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i,s.Color.colorNameMap={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",darkgreen:"#006400",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",lightgreen:"#90EE90",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA5
35D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"};function o(e,r,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?e+(r-e)*6*t:t<1/2?r:t<2/3?e+(r-e)*(2/3-t)*6:e}s.Color.fromRgb=function(e){return l.fromSource(l.sourceFromRgb(e))},s.Color.sourceFromRgb=function(e){var r=e.match(l.reRGBa);if(r){var t=parseInt(r[1],10)/(/%$/.test(r[1])?100:1)*(/%$/.test(r[1])?255:1),n=parseInt(r[2],10)/(/%$/.test(r[2])?100:1)*(/%$/.test(r[2])?255:1),a=parseInt(r[3],10)/(/%$/.test(r[3])?100:1)*(/%$/.test(r[3])?255:1);return[parseInt(t,10),parseInt(n,10),parseInt(a,10),r[4]?parseFloat(r[4]):1]}},s.Color.fromRgba=l.fromRgb,s.Color.fromHsl=function(e){return l.fromSource(l.sourceFromHsl(e))},s.Color.sourceFromHsl=function(e){var r=e.match(l.reHSLa);if(r){var t=(parseFloat(r[1])%360+360)%360/360,n=parseFloat(r[2])/(/%$/.test(r[2])?100:1),a=parseFloat(r[3])/(/%$/.test(r[3])?100:1),i,h,u;if(n===0)i=h=u=a;else{var d=a<=.5?a*(n+1):a+n-a*n,g=a*2-d;i=o(g,d,t+1/3),h=o(g,d,t),u=o(g,d,t-1/3)}return[Math.round(i*255),Math.round(h*255),Math.round(u*255),r[4]?parseFloat(r[4]):1]}},s.Color.fromHsla=l.fromHsl,s.Color.fromHex=function(e){return l.fromSource(l.sourceFromHex(e))},s.Color.sourceFromHex=function(e){if(e.match(l.reHex)){var r=e.slice(e.indexOf("#")+1),t=r.length===3||r.length===4,n=r.length===8||r.length===4,a=t?r.charAt(0)+r.charAt(0):r.substring(0,2),i=t?r.charAt(1)+r.charAt(1):r.substring(2,4),h=t?r.charAt(2)+r.charAt(2):r.substring(4,6),u=n?t?r.charAt(3)+r.charAt(3):r.substring(6,8):"FF";return[parseInt(a,16),parseInt(i,16),parseInt(h,16),parseFloat((parseInt(u,16)/255).toFixed(2))]}},s.Color.fromSource=function(e){var r=new l;return r.setSource(e),r}}(R),function(c){var s=c.fabric||(c.fabric={}),l=["e","se","s","sw","w","nw","n","ne","e"],o=["ns","nesw","ew","nwse"],e={},r="left",t="top",n="right",a="bottom",i="center",h={top:a,bottom:t,left:n,right:r,center:i},u=s.util.radiansToDegrees,d=Math.sign||function(F){return(F>0)-(F<0)||+F};function g(F,A){var z=F.angle+u(Math.atan2(A.y,A.x))+360;return Math.round(z%360/45)}function m(F,A){var z=A.transform.target,Y=z.canvas,L=s.util.object.clone(A);L.target=z,Y&&Y.fire("object:"+F,L),z.fire(F,A)}function p(F,A){var z=A.canvas,Y=z.uniScaleKey,L=F[Y];return z.uniformScaling&&!L||!z.uniformScaling&&L}function C(F){return F.originX===i&&F.originY===i}function T(F,A,z){var Y=F.lockScalingX,L=F.lockScalingY;
3return!!(Y&&L||!A&&(Y||L)&&z||Y&&A==="x"||L&&A==="y")}function j(F,A,z){var Y="not-allowed",L=p(F,z),H="";if(A.x!==0&&A.y===0?H="x":A.x===0&&A.y!==0&&(H="y"),T(z,H,L))return Y;var Q=g(z,A);return l[Q]+"-resize"}function W(F,A,z){var Y="not-allowed";if(A.x!==0&&z.lockSkewingY||A.y!==0&&z.lockSkewingX)return Y;var L=g(z,A)%4;return o[L]+"-resize"}function V(F,A,z){return F[z.canvas.altActionKey]?e.skewCursorStyleHandler(F,A,z):e.scaleCursorStyleHandler(F,A,z)}function et(F,A,z){var Y=F[z.canvas.altActionKey];if(A.x===0)return Y?"skewX":"scaleY";if(A.y===0)return Y?"skewY":"scaleX"}function nt(F,A,z){return z.lockRotation?"not-allowed":A.cursorStyle}function Z(F,A,z,Y){return{e:F,transform:A,pointer:{x:z,y:Y}}}function tt(F){return function(A,z,Y,L){var H=z.target,Q=H.getCenterPoint(),gt=H.translateToOriginPoint(Q,z.originX,z.originY),ct=F(A,z,Y,L);return H.setPositionByOrigin(gt,z.originX,z.originY),ct}}function lt(F,A){return function(z,Y,L,H){var Q=A(z,Y,L,H);return Q&&m(F,Z(z,Y,L,H)),Q}}function ht(F,A,z,Y,L){var H=F.target,Q=H.controls[F.corner],gt=H.canvas.getZoom(),ct=H.padding/gt,I=H.toLocalPoint(new s.Point(Y,L),A,z);return I.x>=ct&&(I.x-=ct),I.x<=-ct&&(I.x+=ct),I.y>=ct&&(I.y-=ct),I.y<=ct&&(I.y+=ct),I.x-=Q.offsetX,I.y-=Q.offsetY,I}function it(F){return F.flipX!==F.flipY}function v(F,A,z,Y,L){if(F[A]!==0){var H=F._getTransformedDimensions()[Y],Q=L/H*F[z];F.set(z,Q)}}function S(F,A,z,Y){var L=A.target,H=L._getTransformedDimensions(0,L.skewY),Q=ht(A,A.originX,A.originY,z,Y),gt=Math.abs(Q.x*2)-H.x,ct=L.skewX,I;gt<2?I=0:(I=u(Math.atan2(gt/L.scaleX,H.y/L.scaleY)),A.originX===r&&A.originY===a&&(I=-I),A.originX===n&&A.originY===t&&(I=-I),it(L)&&(I=-I));var ut=ct!==I;if(ut){var mt=L._getTransformedDimensions().y;L.set("skewX",I),v(L,"skewY","scaleY","y",mt)}return ut}function w(F,A,z,Y){var L=A.target,H=L._getTransformedDimensions(L.skewX,0),Q=ht(A,A.originX,A.originY,z,Y),gt=Math.abs(Q.y*2)-H.y,ct=L.skewY,I;gt<2?I=0:(I=u(Math.atan2(gt/L.scaleY,H.x/L.scaleX)),A.originX===r&&A.originY===a&&(I=-I),A.originX===n&&A.originY===t&&(I=-I),it(L)&&(I=-I));var ut=ct!==I;if(ut){var mt=L._getTransformedDimensions().x;L.set("skewY",I),v(L,"skewX","scaleX","x",mt)}return ut}function b(F,A,z,Y){var L=A.target,H=L.skewX,Q,gt=A.originY;if(L.lockSkewingX)return!1;if(H===0){var ct=ht(A,i,i,z,Y);ct.x>0?Q=r:Q=n}else H>0&&(Q=gt===t?r:n),H<0&&(Q=gt===t?n:r),it(L)&&(Q=Q===r?n:r);A.originX=Q;var I=lt("skewing",tt(S));return I(F,A,z,Y)}function D(F,A,z,Y){var L=A.target,H=L.skewY,Q,gt=A.originX;if(L.lockSkewingY)return!1;if(H===0){var ct=ht(A,i,i,z,Y);ct.y>0?Q=t:Q=a}else H>0&&(Q=gt===r?t:a),H<0&&(Q=gt===r?a:t),it(L)&&(Q=Q===t?a:t);A.originY=Q;var I=lt("skewing",tt(w));return I(F,A,z,Y)}function x(F,A,z,Y){var L=A,H=L.target,Q=H.translateToOriginPoint(H.getCenterPoint(),L.originX,L.originY);if(H.lockRotation)return!1;var gt=Math.atan2(L.ey-Q.y,L.ex-Q.x),ct=Math.atan2(Y-Q.y,z-Q.x),I=u(ct-gt+L.theta),ut=!0;if(H.snapAngle>0){var mt=H.snapAngle,vt=H.snapThreshold||mt,xt=Math.ceil(I/mt)*mt,_t=Math.floor(I/mt)*mt;Math.abs(I-_t)<vt?I=_t:Math.abs(I-xt)<vt&&(I=xt)}return I<0&&(I=360+I),I%=360,ut=H.angle!==I,H.angle=I,ut}function y(F,A,z,Y,L){L=L||{};var H=A.target,Q=H.lockScalingX,gt=H.lockScalingY,ct=L.by,I,ut,mt,vt,xt=p(F,H),_t=T(H,ct,xt),Ot,bt,Dt=A.gestureScale;if(_t)return!1;if(Dt)ut=A.scaleX*Dt,mt=A.scaleY*Dt;else{if(I=ht(A,A.originX,A.originY,z,Y),Ot=ct!=="y"?d(I.x):1,bt=ct!=="x"?d(I.y):1,A.signX||(A.signX=Ot),A.signY||(A.signY=bt),H.lockScalingFlip&&(A.signX!==Ot||A.signY!==bt))return!1;if(vt=H._getTransformedDimensions(),xt&&!ct){var jt=Math.abs(I.x)+Math.abs(I.y),Et=A.original,Bt=Math.abs(vt.x*Et.scaleX/H.scaleX)+Math.abs(vt.y*Et.scaleY/H.scaleY),Xt=jt/Bt;ut=Et.scaleX*Xt,mt=Et.scaleY*Xt}else ut=Math.abs(I.x*H.scaleX/vt.x),mt=Math.abs(I.y*H.scaleY/vt.y);C(A)&&(ut*=2,mt*=2),A.signX!==Ot&&ct!=="y"&&(A.originX=h[A.originX],ut*=-1,A.signX=Ot),A.signY!==bt&&ct!=="x"&&(A.originY=h[A.originY],mt*=-1,A.signY=bt)}var Wt=H.scaleX,Zt=H.scaleY;return ct?(ct==="x"&&H.set("scaleX",ut),ct==="y"&&H.set("scaleY",mt)):(!Q&&H.set("scaleX",ut),!gt&&H.set("scaleY",mt)),Wt!==H.scaleX||Zt!==H.scaleY}function k(F,A,z,Y){return y(F,A,z,Y)}function E(F,A,z,Y){return y(F,A,z,Y,{by:"x"})}function B(F,A,z,Y){return y(F,A,z,Y,{by:"y"})}function M(F,A,z,Y){return F[A.target.canvas.altActionKey]?e.skewHandlerX(F,A,z,Y):e.scalingY(F,A,z,Y)}function U(F,A,z,Y){return F[A.target.canvas.altActionKey]?e.skewHandlerY(F,A,z,Y):e.scalingX(F,A,z,Y)}function G(F,A,z,Y){var L=A.target,H=ht(A,A.originX,A.originY,z,Y),Q=L.strokeWidth/(L.strokeUniform?L.scaleX:1),gt=C(A)?2:1,ct=L.width,I=Math.abs(H.x*gt/L.scaleX)-Q;return L.set("width",Math.max(I,0)),ct!==I}function J(F,A,z,Y){var L=A.target,H=z-A.offsetX,Q=Y-A.offsetY,gt=!L.get("lockMovementX")&&L.left!==H,ct=!L.get("lockMovementY")&&L.top!==Q;
3return gt&&L.set("left",H),ct&&L.set("top",Q),(gt||ct)&&m("moving",Z(F,A,z,Y)),gt||ct}e.scaleCursorStyleHandler=j,e.skewCursorStyleHandler=W,e.scaleSkewCursorStyleHandler=V,e.rotationWithSnapping=lt("rotating",tt(x)),e.scalingEqually=lt("scaling",tt(k)),e.scalingX=lt("scaling",tt(E)),e.scalingY=lt("scaling",tt(B)),e.scalingYOrSkewingX=M,e.scalingXOrSkewingY=U,e.changeWidth=lt("resizing",tt(G)),e.skewHandlerX=b,e.skewHandlerY=D,e.dragHandler=J,e.scaleOrSkewActionName=et,e.rotationStyleHandler=nt,e.fireEvent=m,e.wrapWithFixedAnchor=tt,e.wrapWithFireEvent=lt,e.getLocalPoint=ht,s.controlsUtils=e}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.util.degreesToRadians,o=s.controlsUtils;function e(t,n,a,i,h){i=i||{};var u=this.sizeX||i.cornerSize||h.cornerSize,d=this.sizeY||i.cornerSize||h.cornerSize,g=typeof i.transparentCorners<"u"?i.transparentCorners:h.transparentCorners,m=g?"stroke":"fill",p=!g&&(i.cornerStrokeColor||h.cornerStrokeColor),C=n,T=a,j;t.save(),t.fillStyle=i.cornerColor||h.cornerColor,t.strokeStyle=i.cornerStrokeColor||h.cornerStrokeColor,u>d?(j=u,t.scale(1,d/u),T=a*u/d):d>u?(j=d,t.scale(u/d,1),C=n*d/u):j=u,t.lineWidth=1,t.beginPath(),t.arc(C,T,j/2,0,2*Math.PI,!1),t[m](),p&&t.stroke(),t.restore()}function r(t,n,a,i,h){i=i||{};var u=this.sizeX||i.cornerSize||h.cornerSize,d=this.sizeY||i.cornerSize||h.cornerSize,g=typeof i.transparentCorners<"u"?i.transparentCorners:h.transparentCorners,m=g?"stroke":"fill",p=!g&&(i.cornerStrokeColor||h.cornerStrokeColor),C=u/2,T=d/2;t.save(),t.fillStyle=i.cornerColor||h.cornerColor,t.strokeStyle=i.cornerStrokeColor||h.cornerStrokeColor,t.lineWidth=1,t.translate(n,a),t.rotate(l(h.angle)),t[m+"Rect"](-C,-T,u,d),p&&t.strokeRect(-C,-T,u,d),t.restore()}o.renderCircleControl=e,o.renderSquareControl=r}(R),function(c){var s=c.fabric||(c.fabric={});function l(o){for(var e in o)this[e]=o[e]}s.Control=l,s.Control.prototype={visible:!0,actionName:"scale",angle:0,x:0,y:0,offsetX:0,offsetY:0,sizeX:null,sizeY:null,touchSizeX:null,touchSizeY:null,cursorStyle:"crosshair",withConnection:!1,actionHandler:function(){},mouseDownHandler:function(){},mouseUpHandler:function(){},getActionHandler:function(){return this.actionHandler},getMouseDownHandler:function(){return this.mouseDownHandler},getMouseUpHandler:function(){return this.mouseUpHandler},cursorStyleHandler:function(o,e){return e.cursorStyle},getActionName:function(o,e){return e.actionName},getVisibility:function(o,e){var r=o._controlsVisibility;return r&&typeof r[e]<"u"?r[e]:this.visible},setVisibility:function(o){this.visible=o},positionHandler:function(o,e){var r=s.util.transformPoint({x:this.x*o.x+this.offsetX,y:this.y*o.y+this.offsetY},e);return r},calcCornerCoords:function(o,e,r,t,n){var a,i,h,u,d=n?this.touchSizeX:this.sizeX,g=n?this.touchSizeY:this.sizeY;if(d&&g&&d!==g){var m=Math.atan2(g,d),p=Math.sqrt(d*d+g*g)/2,C=m-s.util.degreesToRadians(o),T=Math.PI/2-m-s.util.degreesToRadians(o);a=p*s.util.cos(C),i=p*s.util.sin(C),h=p*s.util.cos(T),u=p*s.util.sin(T)}else{var j=d&&g?d:e;p=j*.7071067812;var C=s.util.degreesToRadians(45-o);a=h=p*s.util.cos(C),i=u=p*s.util.sin(C)}return{tl:{x:r-u,y:t-h},tr:{x:r+a,y:t-i},bl:{x:r-a,y:t+i},br:{x:r+u,y:t+h}}},render:function(o,e,r,t,n){switch(t=t||{},t.cornerStyle||n.cornerStyle){case"circle":s.controlsUtils.renderCircleControl.call(this,o,e,r,t,n);break;default:s.controlsUtils.renderSquareControl.call(this,o,e,r,t,n)}}}}(R),function(){function c(r,t){var n=r.getAttribute("style"),a=r.getAttribute("offset")||0,i,h,u,d;if(a=parseFloat(a)/(/%$/.test(a)?100:1),a=a<0?0:a>1?1:a,n){var g=n.split(/\s*;\s*/);for(g[g.length-1]===""&&g.pop(),d=g.length;d--;){var m=g[d].split(/\s*:\s*/),p=m[0].trim(),C=m[1].trim();p==="stop-color"?i=C:p==="stop-opacity"&&(u=C)}}return i||(i=r.getAttribute("stop-color")||"rgb(0,0,0)"),u||(u=r.getAttribute("stop-opacity")),i=new f.Color(i),h=i.getAlpha(),u=isNaN(parseFloat(u))?1:parseFloat(u),u*=h*t,{offset:a,color:i.toRgb(),opacity:u}}function s(r){return{x1:r.getAttribute("x1")||0,y1:r.getAttribute("y1")||0,x2:r.getAttribute("x2")||"100%",y2:r.getAttribute("y2")||0}}function l(r){return{x1:r.getAttribute("fx")||r.getAttribute("cx")||"50%",y1:r.getAttribute("fy")||r.getAttribute("cy")||"50%",r1:0,x2:r.getAttribute("cx")||"50%",y2:r.getAttribute("cy")||"50%",r2:r.getAttribute("r")||"50%"}}var o=f.util.object.clone;f.Gradient=f.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(r){r||(r={}),r.coords||(r.coords={});var t,n=this;Object.keys(r).forEach(function(a){n[a]=r[a]}),this.id?this.id+="_"+f.Object.__uid++:this.id=f.Object.__uid++,t={x1:r.coords.x1||0,y1:r.coords.y1||0,x2:r.coords.x2||0,y2:r.coords.y2||0},this.type==="radial"&&(t.r1=r.coords.r1||0,t.r2=r.coords.r2||0),this.coords=t,this.colorStops=r.colorStops.slice()},addColorStop:function(r){for(var t in r){var n=new f.Color(r[t]);this.colorStops.push({offset:parseFloat(t),color:n.toRgb(),opacity:n.getAlpha()})}return this}
vendor: 4,723 bytes, lines 3-11
3,toObject:function(r){var t={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return f.util.populateWithProperties(this,t,r),t},toSVG:function(r,h){var n=o(this.coords,!0),a,i,h=h||{},u,d,g=o(this.colorStops,!0),m=n.r1>n.r2,p=this.gradientTransform?this.gradientTransform.concat():f.iMatrix.concat(),C=-this.offsetX,T=-this.offsetY,j=!!h.additionalTransform,W=this.gradientUnits==="pixels"?"userSpaceOnUse":"objectBoundingBox";if(g.sort(function(tt,lt){return tt.offset-lt.offset}),W==="objectBoundingBox"?(C/=r.width,T/=r.height):(C+=r.width/2,T+=r.height/2),r.type==="path"&&this.gradientUnits!=="percentage"&&(C-=r.pathOffset.x,T-=r.pathOffset.y),p[4]-=C,p[5]-=T,d='id="SVGID_'+this.id+'" gradientUnits="'+W+'"',d+=' gradientTransform="'+(j?h.additionalTransform+" ":"")+f.util.matrixToSVG(p)+'" ',this.type==="linear"?u=["<linearGradient ",d,' x1="',n.x1,'" y1="',n.y1,'" x2="',n.x2,'" y2="',n.y2,`">
4`]:this.type==="radial"&&(u=["<radialGradient ",d,' cx="',m?n.x1:n.x2,'" cy="',m?n.y1:n.y2,'" r="',m?n.r1:n.r2,'" fx="',m?n.x2:n.x1,'" fy="',m?n.y2:n.y1,`">
5`]),this.type==="radial"){if(m)for(g=g.concat(),g.reverse(),a=0,i=g.length;a<i;a++)g[a].offset=1-g[a].offset;var V=Math.min(n.r1,n.r2);if(V>0){var et=Math.max(n.r1,n.r2),nt=V/et;for(a=0,i=g.length;a<i;a++)g[a].offset+=nt*(1-g[a].offset)}}for(a=0,i=g.length;a<i;a++){var Z=g[a];u.push("<stop ",'offset="',Z.offset*100+"%",'" style="stop-color:',Z.color,typeof Z.opacity<"u"?";stop-opacity: "+Z.opacity:";",`"/>
6`)}return u.push(this.type==="linear"?`</linearGradient>
7`:`</radialGradient>
8`),u.join("")},toLive:function(r){var t,n=f.util.object.clone(this.coords),a,i;if(this.type){for(this.type==="linear"?t=r.createLinearGradient(n.x1,n.y1,n.x2,n.y2):this.type==="radial"&&(t=r.createRadialGradient(n.x1,n.y1,n.r1,n.x2,n.y2,n.r2)),a=0,i=this.colorStops.length;a<i;a++){var h=this.colorStops[a].color,u=this.colorStops[a].opacity,d=this.colorStops[a].offset;typeof u<"u"&&(h=new f.Color(h).setAlpha(u).toRgba()),t.addColorStop(d,h)}return t}}}),f.util.object.extend(f.Gradient,{fromElement:function(r,t,n,a){var i=parseFloat(n)/(/%$/.test(n)?100:1);i=i<0?0:i>1?1:i,isNaN(i)&&(i=1);var h=r.getElementsByTagName("stop"),u,d=r.getAttribute("gradientUnits")==="userSpaceOnUse"?"pixels":"percentage",g=r.getAttribute("gradientTransform")||"",m=[],p,C,T=0,j=0,W;for(r.nodeName==="linearGradient"||r.nodeName==="LINEARGRADIENT"?(u="linear",p=s(r)):(u="radial",p=l(r)),C=h.length;C--;)m.push(c(h[C],i));W=f.parseTransformAttribute(g),e(t,p,a,d),d==="pixels"&&(T=-t.left,j=-t.top);var V=new f.Gradient({id:r.getAttribute("id"),type:u,coords:p,colorStops:m,gradientUnits:d,gradientTransform:W,offsetX:T,offsetY:j});return V}});function e(r,t,n,a){var i,h;Object.keys(t).forEach(function(u){i=t[u],i==="Infinity"?h=1:i==="-Infinity"?h=0:(h=parseFloat(t[u],10),typeof i=="string"&&/^(\d+\.\d+)%|(\d+)%$/.test(i)&&(h*=.01,a==="pixels"&&((u==="x1"||u==="x2"||u==="r2")&&(h*=n.viewBoxWidth||n.width),(u==="y1"||u==="y2")&&(h*=n.viewBoxHeight||n.height)))),t[u]=h})}}(),function(){var c=f.util.toFixed;f.Pattern=f.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(s,l){if(s||(s={}),this.id=f.Object.__uid++,this.setOptions(s),!s.source||s.source&&typeof s.source!="string"){l&&l(this);return}else{var o=this;this.source=f.util.createImage(),f.util.loadImage(s.source,function(e,r){o.source=e,l&&l(o,r)},null,this.crossOrigin)}},toObject:function(s){var l=f.Object.NUM_FRACTION_DIGITS,o,e;return typeof this.source.src=="string"?o=this.source.src:typeof this.source=="object"&&this.source.toDataURL&&(o=this.source.toDataURL()),e={type:"pattern",source:o,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:c(this.offsetX,l),offsetY:c(this.offsetY,l),patternTransform:this.patternTransform?this.patternTransform.concat():null},f.util.populateWithProperties(this,e,s),e},toSVG:function(s){var l=typeof this.source=="function"?this.source():this.source,o=l.width/s.width,e=l.height/s.height,r=this.offsetX/s.width,t=this.offsetY/s.height,n="";return(this.repeat==="repeat-x"||this.repeat==="no-repeat")&&(e=1,t&&(e+=Math.abs(t))),(this.repeat==="repeat-y"||this.repeat==="no-repeat")&&(o=1,r&&(o+=Math.abs(r))),l.src?n=l.src:l.toDataURL&&(n=l.toDataURL()),'<pattern id="SVGID_'+this.id+'" x="'+r+'" y="'+t+'" width="'+o+'" height="'+e+`">
9<image x="0" y="0" width="`+l.width+'" height="'+l.height+'" xlink:href="'+n+`"></image>
10</pattern>
11`},setOptions:function(s){for(var l in s)this[l]=s[l]},toLive:function(s){var l=this.source;
11return!l||typeof l.src<"u"&&(!l.complete||l.naturalWidth===0||l.naturalHeight===0)?"":s.createPattern(l,this.repeat)}})}(),function(c){var s=c.fabric||(c.fabric={}),l=s.util.toFixed;if(s.Shadow){s.warn("fabric.Shadow is already defined.");return}s.Shadow=s.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(o){typeof o=="string"&&(o=this._parseShadow(o));for(var e in o)this[e]=o[e];this.id=s.Object.__uid++},_parseShadow:function(o){var e=o.trim(),r=s.Shadow.reOffsetsAndBlur.exec(e)||[],t=e.replace(s.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:t.trim(),offsetX:parseFloat(r[1],10)||0,offsetY:parseFloat(r[2],10)||0,blur:parseFloat(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(o){var e=40,r=40,t=s.Object.NUM_FRACTION_DIGITS,n=s.util.rotateVector({x:this.offsetX,y:this.offsetY},s.util.degreesToRadians(-o.angle)),a=20,i=new s.Color(this.color);return o.width&&o.height&&(e=l((Math.abs(n.x)+this.blur)/o.width,t)*100+a,r=l((Math.abs(n.y)+this.blur)/o.height,t)*100+a),o.flipX&&(n.x*=-1),o.flipY&&(n.y*=-1),'<filter id="SVGID_'+this.id+'" y="-'+r+'%" height="'+(100+2*r)+'%" x="-'+e+'%" width="'+(100+2*e)+`%" >
12	<feGaussianBlur in="SourceAlpha" stdDeviation="`+l(this.blur?this.blur/2:0,t)+`"></feGaussianBlur>
13	<feOffset dx="`+l(n.x,t)+'" dy="'+l(n.y,t)+`" result="oBlur" ></feOffset>
14	<feFlood flood-color="`+i.toRgb()+'" flood-opacity="'+i.getAlpha()+`"/>
15	<feComposite in2="oBlur" operator="in" />
16	<feMerge>
17		<feMergeNode></feMergeNode>
18		<feMergeNode in="SourceGraphic"></feMergeNode>
19	</feMerge>
20</filter>
21`},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var o={},e=s.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach(function(r){this[r]!==e[r]&&(o[r]=this[r])},this),o}}),s.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/}(R),function(){if(f.StaticCanvas){f.warn("fabric.StaticCanvas is already defined.");return}var c=f.util.object.extend,s=f.util.getElementOffset,l=f.util.removeFromArray,o=f.util.toFixed,e=f.util.transformPoint,r=f.util.invertTransform,t=f.util.getNodeCanvas,n=f.util.createCanvasElement,a=new Error("Could not initialize `canvas` element");f.StaticCanvas=f.util.createClass(f.CommonMethods,{initialize:function(i,h){h||(h={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(i,h)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:f.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(i,h){var u=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(i),this._initOptions(h),this.interactive||this._initRetinaScaling(),h.overlayImage&&this.setOverlayImage(h.overlayImage,u),h.backgroundImage&&this.setBackgroundImage(h.backgroundImage,u),h.backgroundColor&&this.setBackgroundColor(h.backgroundColor,u),h.overlayColor&&this.setOverlayColor(h.overlayColor,u),this.calcOffset()},_isRetinaScaling:function(){return f.devicePixelRatio>1&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?Math.max(1,f.devicePixelRatio):1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var i=f.devicePixelRatio;this.__initRetinaScaling(i,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(i,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(i,h,u){h.setAttribute("width",this.width*i),h.setAttribute("height",this.height*i),u.scale(i,i)},calcOffset:function(){return this._offset=s(this.lowerCanvasEl),this},setOverlayImage:function(i,h,u){return this.__setBgOverlayImage("overlayImage",i,h,u)}
vendor: 2,148 bytes, line 21
21,setBackgroundImage:function(i,h,u){return this.__setBgOverlayImage("backgroundImage",i,h,u)},setOverlayColor:function(i,h){return this.__setBgOverlayColor("overlayColor",i,h)},setBackgroundColor:function(i,h){return this.__setBgOverlayColor("backgroundColor",i,h)},__setBgOverlayImage:function(i,h,u,d){return typeof h=="string"?f.util.loadImage(h,function(g,m){if(g){var p=new f.Image(g,d);this[i]=p,p.canvas=this}u&&u(g,m)},this,d&&d.crossOrigin):(d&&h.setOptions(d),this[i]=h,h&&(h.canvas=this),u&&u(h,!1)),this},__setBgOverlayColor:function(i,h,u){return this[i]=h,this._initGradient(h,i),this._initPattern(h,i,u),this},_createCanvasElement:function(){var i=n();if(!i||(i.style||(i.style={}),typeof i.getContext>"u"))throw a;return i},_initOptions:function(i){var h=this.lowerCanvasEl;this._setOptions(i),this.width=this.width||parseInt(h.width,10)||0,this.height=this.height||parseInt(h.height,10)||0,this.lowerCanvasEl.style&&(h.width=this.width,h.height=this.height,h.style.width=this.width+"px",h.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(i){i&&i.getContext?this.lowerCanvasEl=i:this.lowerCanvasEl=f.util.getById(i)||this._createCanvasElement(),f.util.addClass(this.lowerCanvasEl,"lower-canvas"),this._originalCanvasStyle=this.lowerCanvasEl.style,this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(i,h){return this.setDimensions({width:i},h)},setHeight:function(i,h){return this.setDimensions({height:i},h)},setDimensions:function(i,h){var u;h=h||{};for(var d in i)u=i[d],h.cssOnly||(this._setBackstoreDimension(d,i[d]),u+="px",this.hasLostContext=!0),h.backstoreOnly||this._setCssDimension(d,u);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop),this._initRetinaScaling(),this.calcOffset(),h.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(i,h){return this.lowerCanvasEl[i]=h,this.upperCanvasEl&&(this.upperCanvasEl[
vendor: 4,195 bytes, line 21
21i]=h),this.cacheCanvasEl&&(this.cacheCanvasEl[i]=h),this[i]=h,this},_setCssDimension:function(i,h){return this.lowerCanvasEl.style[i]=h,this.upperCanvasEl&&(this.upperCanvasEl.style[i]=h),this.wrapperEl&&(this.wrapperEl.style[i]=h),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(i){var h=this._activeObject,u=this.backgroundImage,d=this.overlayImage,g,m,p;for(this.viewportTransform=i,m=0,p=this._objects.length;m<p;m++)g=this._objects[m],g.group||g.setCoords(!0);return h&&h.setCoords(),u&&u.setCoords(!0),d&&d.setCoords(!0),this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll(),this},zoomToPoint:function(i,h){var u=i,d=this.viewportTransform.slice(0);i=e(i,r(this.viewportTransform)),d[0]=h,d[3]=h;var g=e(i,d);return d[4]+=u.x-g.x,d[5]+=u.y-g.y,this.setViewportTransform(d)},setZoom:function(i){return this.zoomToPoint(new f.Point(0,0),i),this},absolutePan:function(i){var h=this.viewportTransform.slice(0);return h[4]=-i.x,h[5]=-i.y,this.setViewportTransform(h)},relativePan:function(i){return this.absolutePan(new f.Point(-i.x-this.viewportTransform[4],-i.y-this.viewportTransform[5]))},getElement:function(){return this.lowerCanvasEl},_onObjectAdded:function(i){this.stateful&&i.setupState(),i._set("canvas",this),i.setCoords(),this.fire("object:added",{target:i}),i.fire("added")},_onObjectRemoved:function(i){this.fire("object:removed",{target:i}),i.fire("removed"),delete i.canvas},clearContext:function(i){return i.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this.remove.apply(this,this.getObjects()),this.backgroundImage=null,this.overlayImage=null,this.backgroundColor="",this.overlayColor="",this._hasITextHandlers&&(this.off("mouse:up",this._mouseUpITextHandler),this._iTextInstances=null,this._hasITextHandlers=!1),this.clearContext(this.contextContainer),this.fire("canvas:cleared"),this.renderOnAddRemove&&this.requestRenderAll(),this},renderAll:function(){var i=this.contextContainer;return this.renderCanvas(i,this._objects),this},renderAndReset:function(){this.isRendering=0,this.renderAll()},requestRenderAll:function(){return this.isRendering||(this.isRendering=f.util.requestAnimFrame(this.renderAndResetBound)),this},calcViewportBoundaries:function(){var i={},h=this.width,u=this.height,d=r(this.viewportTransform);return i.tl=e({x:0,y:0},d),i.br=e({x:h,y:u},d),i.tr=new f.Point(i.br.x,i.tl.y),i.bl=new f.Point(i.tl.x,i.br.y),this.vptCoords=i,i},cancelRequestedRender:function(){this.isRendering&&(f.util.cancelAnimFrame(this.isRendering),this.isRendering=0)},renderCanvas:function(i,h){var u=this.viewportTransform,d=this.clipPath;this.cancelRequestedRender(),this.calcViewportBoundaries(),this.clearContext(i),f.util.setImageSmoothing(i,this.imageSmoothingEnabled),this.fire("before:render",{ctx:i}),this._renderBackground(i),i.save(),i.transform(u[0],u[1],u[2],u[3],u[4],u[5]),this._renderObjects(i,h),i.restore(),!this.controlsAboveOverlay&&this.interactive&&this.drawControls(i),d&&(d.canvas=this,d.shouldCache(),d._transformDone=!0,d.renderCache({forClipping:!0}),this.drawClipPathOnCanvas(i)),this._renderOverlay(i),this.controlsAboveOverlay&&this.interactive&&this.drawControls(i),this.fire("after:render",{ctx:i})},drawClipPathOnCanvas:function(i){var h=this.viewportTransform,u=this.clipPath;i.save(),i.transform(h[0],h[1],h[2],h[3],h[4],h[5]),i.globalCompositeOperation="destination-in",u.transform(i),i.scale(1/u.zoomX,1/u.zoomY),i.drawImage(u._cacheCanvas,-u.cacheTranslationX,-u.cacheTranslationY),i.restore()},_renderObjects:function(i,h){var u,d;for(u=0,d=h.length;u<d;++u)h[u]&&h[u].render(i)},_renderBackgroundOrOverlay:function(i,h){var u=this[h+"Color"],d=this[h+"Image"],g=this.viewportTransform,m=this[h+"Vpt"];if(!(!u&&!d)){if(u){i.save(),i.beginPath(),i.moveTo(0,0),i.lineTo(this.width,0),i.lineTo(this.width,this.height),i.lineTo(0,this.height),i.closePath(),i.fillStyle=u.toLive?u.toLive(i,this):u,m&&i.transform(g[0],g[1],g[2],g[3],g[4],g[5]),i.transform(1,0,0,1,u.offsetX||0,u.offsetY||0);var p=u.gradientTransform||u.patternTransform;p&&i.transform(p[0],p[1],p[2],p[3],p[4],p[5]),i.fill(),i.restore(
vendor: 4,645 bytes, lines 21-31
21)}if(d){i.save();var C=this.skipOffscreen;this.skipOffscreen=m,m&&i.transform(g[0],g[1],g[2],g[3],g[4],g[5]),d.render(i),this.skipOffscreen=C,i.restore()}}},_renderBackground:function(i){this._renderBackgroundOrOverlay(i,"background")},_renderOverlay:function(i){this._renderBackgroundOrOverlay(i,"overlay")},getCenter:function(){return{top:this.height/2,left:this.width/2}},getCenterPoint:function(){return new f.Point(this.width/2,this.height/2)},centerObjectH:function(i){return this._centerObject(i,new f.Point(this.getCenterPoint().x,i.getCenterPoint().y))},centerObjectV:function(i){return this._centerObject(i,new f.Point(i.getCenterPoint().x,this.getCenterPoint().y))},centerObject:function(i){var h=this.getCenterPoint();return this._centerObject(i,h)},viewportCenterObject:function(i){var h=this.getVpCenter();return this._centerObject(i,h)},viewportCenterObjectH:function(i){var h=this.getVpCenter();return this._centerObject(i,new f.Point(h.x,i.getCenterPoint().y)),this},viewportCenterObjectV:function(i){var h=this.getVpCenter();return this._centerObject(i,new f.Point(i.getCenterPoint().x,h.y))},getVpCenter:function(){var i=this.getCenterPoint(),h=r(this.viewportTransform);return e(i,h)},_centerObject:function(i,h){return i.setPositionByOrigin(h,"center","center"),i.setCoords(),this.renderOnAddRemove&&this.requestRenderAll(),this},toDatalessJSON:function(i){return this.toDatalessObject(i)},toObject:function(i){return this._toObjectMethod("toObject",i)},toDatalessObject:function(i){return this._toObjectMethod("toDatalessObject",i)},_toObjectMethod:function(i,h){var u=this.clipPath,d={version:f.version,objects:this._toObjects(i,h)};return u&&!u.excludeFromExport&&(d.clipPath=this._toObject(this.clipPath,i,h)),c(d,this.__serializeBgOverlay(i,h)),f.util.populateWithProperties(this,d,h),d},_toObjects:function(i,h){return this._objects.filter(function(u){return!u.excludeFromExport}).map(function(u){return this._toObject(u,i,h)},this)},_toObject:function(i,h,u){var d;this.includeDefaultValues||(d=i.includeDefaultValues,i.includeDefaultValues=!1);var g=i[h](u);return this.includeDefaultValues||(i.includeDefaultValues=d),g},__serializeBgOverlay:function(i,h){var u={},d=this.backgroundImage,g=this.overlayImage,m=this.backgroundColor,p=this.overlayColor;return m&&m.toObject?m.excludeFromExport||(u.background=m.toObject(h)):m&&(u.background=m),p&&p.toObject?p.excludeFromExport||(u.overlay=p.toObject(h)):p&&(u.overlay=p),d&&!d.excludeFromExport&&(u.backgroundImage=this._toObject(d,i,h)),g&&!g.excludeFromExport&&(u.overlayImage=this._toObject(g,i,h)),u},svgViewportTransformation:!0,toSVG:function(i,h){i||(i={}),i.reviver=h;var u=[];return this._setSVGPreamble(u,i),this._setSVGHeader(u,i),this.clipPath&&u.push('<g clip-path="url(#'+this.clipPath.clipPathId+`)" >
22`),this._setSVGBgOverlayColor(u,"background"),this._setSVGBgOverlayImage(u,"backgroundImage",h),this._setSVGObjects(u,h),this.clipPath&&u.push(`</g>
23`),this._setSVGBgOverlayColor(u,"overlay"),this._setSVGBgOverlayImage(u,"overlayImage",h),u.push("</svg>"),u.join("")},_setSVGPreamble:function(i,h){h.suppressPreamble||i.push('<?xml version="1.0" encoding="',h.encoding||"UTF-8",`" standalone="no" ?>
24`,'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ',`"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
25`)},_setSVGHeader:function(i,h){var u=h.width||this.width,d=h.height||this.height,g,m='viewBox="0 0 '+this.width+" "+this.height+'" ',p=f.Object.NUM_FRACTION_DIGITS;h.viewBox?m='viewBox="'+h.viewBox.x+" "+h.viewBox.y+" "+h.viewBox.width+" "+h.viewBox.height+'" ':this.svgViewportTransformation&&(g=this.viewportTransform,m='viewBox="'+o(-g[4]/g[0],p)+" "+o(-g[5]/g[3],p)+" "+o(this.width/g[0],p)+" "+o(this.height/g[3],p)+'" '),i.push("<svg ",'xmlns="http://www.w3.org/2000/svg" ','xmlns:xlink="http://www.w3.org/1999/xlink" ','version="1.1" ','width="',u,'" ','height="',d,'" ',m,`xml:space="preserve">
26`,"<desc>Created with Fabric.js ",f.version,`</desc>
27`,`<defs>
28`,this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(h),`</defs>
29`)},createSVGClipPathMarkup:function(i){var h=this.clipPath;return h?(h.clipPathId="CLIPPATH_"+f.Object.__uid++,'<clipPath id="'+h.clipPathId+`" >
30`+this.clipPath.toClipPathSVG(i.reviver)+`</clipPath>
31`):""},createSVGRefElementsMarkup:function(){var i=this,h=["background","overlay"].map(function(u){var d=i[u+"Color"];if(d&&d.toLive){var g=i[u+"Vpt"],m=i.viewportTransform,p={width:i.width/(g?m[0]:1),height:i.height/(g?m[3]:1)};return d.toSVG(p,{additionalTransform:g?f.util.matrixToSVG(m):""})}});return h.join("")},createSVGFontFacesMarkup:function(){var i="",h={}
31,u,d,g,m,p,C,T,j,W,V=f.fontPaths,et=[];for(this._objects.forEach(function Z(tt){et.push(tt),tt._objects&&tt._objects.forEach(Z)}),j=0,W=et.length;j<W;j++)if(u=et[j],d=u.fontFamily,!(u.type.indexOf("text")===-1||h[d]||!V[d])&&(h[d]=!0,!!u.styles)){g=u.styles;for(p in g){m=g[p];for(T in m)C=m[T],d=C.fontFamily,!h[d]&&V[d]&&(h[d]=!0)}}for(var nt in h)i+=[`		@font-face {
32`,"			font-family: '",nt,`';
33`,"			src: url('",V[nt],`');
34`,`		}
35`].join("");return i&&(i=['	<style type="text/css">',`<![CDATA[
36`,i,"]]>",`</style>
37`].join("")),i},_setSVGObjects:function(i,h){var u,d,g,m=this._objects;for(d=0,g=m.length;d<g;d++)u=m[d],!u.excludeFromExport&&this._setSVGObject(i,u,h)},_setSVGObject:function(i,h,u){i.push(h.toSVG(u))},_setSVGBgOverlayImage:function(i,h,u){this[h]&&!this[h].excludeFromExport&&this[h].toSVG&&i.push(this[h].toSVG(u))},_setSVGBgOverlayColor:function(i,h){var u=this[h+"Color"],d=this.viewportTransform,g=this.width,m=this.height;if(u)if(u.toLive){var p=u.repeat,C=f.util.invertTransform(d),T=this[h+"Vpt"],j=T?f.util.matrixToSVG(C):"";i.push('<rect transform="'+j+" translate(",g/2,",",m/2,')"',' x="',u.offsetX-g/2,'" y="',u.offsetY-m/2,'" ','width="',p==="repeat-y"||p==="no-repeat"?u.source.width:g,'" height="',p==="repeat-x"||p==="no-repeat"?u.source.height:m,'" fill="url(#SVGID_'+u.id+')"',`></rect>
38`)}else i.push('<rect x="0" y="0" width="100%" height="100%" ','fill="',u,'"',`></rect>
39`)},sendToBack:function(i){if(!i)return this;var h=this._activeObject,u,d,g;if(i===h&&i.type==="activeSelection")for(g=h._objects,u=g.length;u--;)d=g[u],l(this._objects,d),this._objects.unshift(d);else l(this._objects,i),this._objects.unshift(i);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(i){if(!i)return this;var h=this._activeObject,u,d,g;if(i===h&&i.type==="activeSelection")for(g=h._objects,u=0;u<g.length;u++)d=g[u],l(this._objects,d),this._objects.push(d);else l(this._objects,i),this._objects.push(i);return this.renderOnAddRemove&&this.requestRenderAll(),this},sendBackwards:function(i,h){if(!i)return this;var u=this._activeObject,d,g,m,p,C,T=0;if(i===u&&i.type==="activeSelection")for(C=u._objects,d=0;d<C.length;d++)g=C[d],m=this._objects.indexOf(g),m>0+T&&(p=m-1,l(this._objects,g),this._objects.splice(p,0,g)),T++;else m=this._objects.indexOf(i),m!==0&&(p=this._findNewLowerIndex(i,m,h),l(this._objects,i),this._objects.splice(p,0,i));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(i,h,u){var d,g;if(u)for(d=h,g=h-1;g>=0;--g){var m=i.intersectsWithObject(this._objects[g])||i.isContainedWithinObject(this._objects[g])||this._objects[g].isContainedWithinObject(i);if(m){d=g;break}}else d=h-1;return d},bringForward:function(i,h){if(!i)return this;var u=this._activeObject,d,g,m,p,C,T=0;if(i===u&&i.type==="activeSelection")for(C=u._objects,d=C.length;d--;)g=C[d],m=this._objects.indexOf(g),m<this._objects.length-1-T&&(p=m+1,l(this._objects,g),this._objects.splice(p,0,g)),T++;else m=this._objects.indexOf(i),m!==this._objects.length-1&&(p=this._findNewUpperIndex(i,m,h),l(this._objects,i),this._objects.splice(p,0,i));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewUpperIndex:function(i,h,u){var d,g,m;if(u)for(d=h,g=h+1,m=this._objects.length;g<m;++g){var p=i.intersectsWithObject(this._objects[g])||i.isContainedWithinObject(this._objects[g])||this._objects[g].isContainedWithinObject(i);if(p){d=g;break}}else d=h+1;return d},moveTo:function(i,h){return l(this._objects,i),this._objects.splice(h,0,i),this.renderOnAddRemove&&this.requestRenderAll()},dispose:function(){return this.isRendering&&(f.util.cancelAnimFrame(this.isRendering),this.isRendering=0),this.forEachObject(function(i){i.dispose&&i.dispose()}),this._objects=[],this.backgroundImage&&this.backgroundImage.dispose&&this.backgroundImage.dispose(),this.backgroundImage=null,this.overlayImage&&this.overlayImage.dispose&&this.overlayImage.dispose(),this.overlayImage=null,this._iTextInstances=null,this.contextContainer=null,this.lowerCanvasEl.classList.remove("lower-canvas"),f.util.setStyle(this.lowerCanvasEl,this._originalCanvasStyle),delete this._originalCanvasStyle,this.lowerCanvasEl.setAttribute("width",this.width),this.lowerCanvasEl.setAttribute("height",this.height),f.util.cleanUpJsdomNode(this.lowerCanvasEl),this.lowerCanvasEl=void 0,this},toString:function(){return"#<fabric.Canvas ("+this.complexity()+"): { objects: "+this._objects.length+" }>"}}),c(f.StaticCanvas.prototype,f.Observable),c(f.StaticCanvas.prototype,f.Collection),c(f.StaticCanvas.prototype,f.DataURLExporter),c(f.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}
39',supports:function(i){var h=n();if(!h||!h.getContext)return null;var u=h.getContext("2d");if(!u)return null;switch(i){case"setLineDash":return typeof u.setLineDash<"u";default:return null}}}),f.StaticCanvas.prototype.toJSON=f.StaticCanvas.prototype.toObject,f.isLikelyNode&&(f.StaticCanvas.prototype.createPNGStream=function(){var i=t(this.lowerCanvasEl);return i&&i.createPNGStream()},f.StaticCanvas.prototype.createJPEGStream=function(i){var h=t(this.lowerCanvasEl);return h&&h.createJPEGStream(i)})}(),f.BaseBrush=f.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(c){c.strokeStyle=this.color,c.lineWidth=this.width,c.lineCap=this.strokeLineCap,c.miterLimit=this.strokeMiterLimit,c.lineJoin=this.strokeLineJoin,c.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(c){var s=this.canvas.viewportTransform;c.save(),c.transform(s[0],s[1],s[2],s[3],s[4],s[5])},_setShadow:function(){if(this.shadow){var c=this.canvas,s=this.shadow,l=c.contextTop,o=c.getZoom();c&&c._isRetinaScaling()&&(o*=f.devicePixelRatio),l.shadowColor=s.color,l.shadowBlur=s.blur*o,l.shadowOffsetX=s.offsetX*o,l.shadowOffsetY=s.offsetY*o}},needsFullRender:function(){var c=new f.Color(this.color);return c.getAlpha()<1||!!this.shadow},_resetShadow:function(){var c=this.canvas.contextTop;c.shadowColor="",c.shadowBlur=c.shadowOffsetX=c.shadowOffsetY=0},_isOutSideCanvas:function(c){return c.x<0||c.x>this.canvas.getWidth()||c.y<0||c.y>this.canvas.getHeight()}}),function(){f.PencilBrush=f.util.createClass(f.BaseBrush,{decimate:.4,drawStraightLine:!1,straightLineKey:"shiftKey",initialize:function(c){this.canvas=c,this._points=[]},needsFullRender:function(){return this.callSuper("needsFullRender")||this._hasStraightLine},_drawSegment:function(c,s,l){var o=s.midPointFrom(l);return c.quadraticCurveTo(s.x,s.y,o.x,o.y),o},onMouseDown:function(c,s){this.canvas._isMainEvent(s.e)&&(this.drawStraightLine=s.e[this.straightLineKey],this._prepareForDrawing(c),this._captureDrawingPath(c),this._render())},onMouseMove:function(c,s){if(this.canvas._isMainEvent(s.e)&&(this.drawStraightLine=s.e[this.straightLineKey],!(this.limitedToCanvasSize===!0&&this._isOutSideCanvas(c))&&this._captureDrawingPath(c)&&this._points.length>1))if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var l=this._points,o=l.length,e=this.canvas.contextTop;this._saveAndTransform(e),this.oldEnd&&(e.beginPath(),e.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(e,l[o-2],l[o-1],!0),e.stroke(),e.restore()}},onMouseUp:function(c){return this.canvas._isMainEvent(c.e)?(this.drawStraightLine=!1,this.oldEnd=void 0,this._finalizeAndAddPath(),!1):!0},_prepareForDrawing:function(c){var s=new f.Point(c.x,c.y);this._reset(),this._addPoint(s),this.canvas.contextTop.moveTo(s.x,s.y)},_addPoint:function(c){return this._points.length>1&&c.eq(this._points[this._points.length-1])?!1:(this.drawStraightLine&&this._points.length>1&&(this._hasStraightLine=!0,this._points.pop()),this._points.push(c),!0)},_reset:function(){this._points=[],this._setBrushStyles(this.canvas.contextTop),this._setShadow(),this._hasStraightLine=!1},_captureDrawingPath:function(c){var s=new f.Point(c.x,c.y);return this._addPoint(s)},_render:function(c){var s,l,o=this._points[0],e=this._points[1];if(c=c||this.canvas.contextTop,this._saveAndTransform(c),c.beginPath(),this._points.length===2&&o.x===e.x&&o.y===e.y){var r=this.width/1e3;o=new f.Point(o.x,o.y),e=new f.Point(e.x,e.y),o.x-=r,e.x+=r}for(c.moveTo(o.x,o.y),s=1,l=this._points.length;s<l;s++)this._drawSegment(c,o,e),o=this._points[s],e=this._points[s+1];c.lineTo(o.x,o.y),c.stroke(),c.restore()},convertPointsToSVGPath:function(c){var s=this.width/1e3;return f.util.getSmoothPathFromPoints(c,s)},_isEmptySVGPath:function(c){var s=f.util.joinPath(c);return s==="M 0 0 Q 0 0 0 0 L 0 0"},createPath:function(c){var s=new f.Path(c,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeMiterLimit:this.strokeMiterLimit,strokeLineJoin:this.strokeLineJoin,strokeDashArray:this.strokeDashArray});return this.shadow&&(this.shadow.affectStroke=!0,s.shadow=new f.Shadow(this.shadow)),s}
39,decimatePoints:function(c,s){if(c.length<=2)return c;var l=this.canvas.getZoom(),o=Math.pow(s/l,2),e,r=c.length-1,t=c[0],n=[t],a;for(e=1;e<r-1;e++)a=Math.pow(t.x-c[e].x,2)+Math.pow(t.y-c[e].y,2),a>=o&&(t=c[e],n.push(t));return n.push(c[r]),n},_finalizeAndAddPath:function(){var c=this.canvas.contextTop;c.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var s=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(s)){this.canvas.requestRenderAll();return}var l=this.createPath(s);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:l}),this.canvas.add(l),this.canvas.requestRenderAll(),l.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:l})}})}(),f.CircleBrush=f.util.createClass(f.BaseBrush,{width:10,initialize:function(c){this.canvas=c,this.points=[]},drawDot:function(c){var s=this.addPoint(c),l=this.canvas.contextTop;this._saveAndTransform(l),this.dot(l,s),l.restore()},dot:function(c,s){c.fillStyle=s.fill,c.beginPath(),c.arc(s.x,s.y,s.radius,0,Math.PI*2,!1),c.closePath(),c.fill()},onMouseDown:function(c){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(c)},_render:function(){var c=this.canvas.contextTop,s,l,o=this.points;for(this._saveAndTransform(c),s=0,l=o.length;s<l;s++)this.dot(c,o[s]);c.restore()},onMouseMove:function(c){this.limitedToCanvasSize===!0&&this._isOutSideCanvas(c)||(this.needsFullRender()?(this.canvas.clearContext(this.canvas.contextTop),this.addPoint(c),this._render()):this.drawDot(c))},onMouseUp:function(){var c=this.canvas.renderOnAddRemove,s,l;this.canvas.renderOnAddRemove=!1;var o=[];for(s=0,l=this.points.length;s<l;s++){var e=this.points[s],r=new f.Circle({radius:e.radius,left:e.x,top:e.y,originX:"center",originY:"center",fill:e.fill});this.shadow&&(r.shadow=new f.Shadow(this.shadow)),o.push(r)}var t=new f.Group(o);t.canvas=this.canvas,this.canvas.fire("before:path:created",{path:t}),this.canvas.add(t),this.canvas.fire("path:created",{path:t}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=c,this.canvas.requestRenderAll()},addPoint:function(c){var s=new f.Point(c.x,c.y),l=f.util.getRandomInt(Math.max(0,this.width-20),this.width+20)/2,o=new f.Color(this.color).setAlpha(f.util.getRandomInt(0,100)/100).toRgba();return s.radius=l,s.fill=o,this.points.push(s),s}}),f.SprayBrush=f.util.createClass(f.BaseBrush,{width:10,density:20,dotWidth:1,dotWidthVariance:1,randomOpacity:!1,optimizeOverlapping:!0,initialize:function(c){this.canvas=c,this.sprayChunks=[]},onMouseDown:function(c){this.sprayChunks.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(c),this.render(this.sprayChunkPoints)},onMouseMove:function(c){this.limitedToCanvasSize===!0&&this._isOutSideCanvas(c)||(this.addSprayChunk(c),this.render(this.sprayChunkPoints))},onMouseUp:function(){var c=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;for(var s=[],l=0,o=this.sprayChunks.length;l<o;l++)for(var e=this.sprayChunks[l],r=0,t=e.length;r<t;r++){var n=new f.Rect({width:e[r].width,height:e[r].width,left:e[r].x+1,top:e[r].y+1,originX:"center",originY:"center",fill:this.color});s.push(n)}this.optimizeOverlapping&&(s=this._getOptimizedRects(s));var a=new f.Group(s);this.shadow&&a.set("shadow",new f.Shadow(this.shadow)),this.canvas.fire("before:path:created",{path:a}),this.canvas.add(a),this.canvas.fire("path:created",{path:a}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=c,this.canvas.requestRenderAll()},_getOptimizedRects:function(c){var s={},l,o,e;for(o=0,e=c.length;o<e;o++)l=c[o].left+""+c[o].top,s[l]||(s[l]=c[o]);var r=[];for(l in s)r.push(s[l]);return r},render:function(c){var s=this.canvas.contextTop,l,o;for(s.fillStyle=this.color,this._saveAndTransform(s),l=0,o=c.length;l<o;l++){var e=c[l];typeof e.opacity<"u"&&(s.globalAlpha=e.opacity),s.fillRect(e.x,e.y,e.width,e.width)}s.restore()},_render:function(){var c=this.canvas.contextTop,s,l;for(c.fillStyle=this.color,this._saveAndTransform(c),s=0,l=this.sprayChunks.length;s<l;s++)this.render(this.sprayChunks[s]);
39c.restore()},addSprayChunk:function(c){this.sprayChunkPoints=[];var s,l,o,e=this.width/2,r;for(r=0;r<this.density;r++){s=f.util.getRandomInt(c.x-e,c.x+e),l=f.util.getRandomInt(c.y-e,c.y+e),this.dotWidthVariance?o=f.util.getRandomInt(Math.max(1,this.dotWidth-this.dotWidthVariance),this.dotWidth+this.dotWidthVariance):o=this.dotWidth;var t=new f.Point(s,l);t.width=o,this.randomOpacity&&(t.opacity=f.util.getRandomInt(0,100)/100),this.sprayChunkPoints.push(t)}this.sprayChunks.push(this.sprayChunkPoints)}}),f.PatternBrush=f.util.createClass(f.PencilBrush,{getPatternSrc:function(){var c=20,s=5,l=f.util.createCanvasElement(),o=l.getContext("2d");return l.width=l.height=c+s,o.fillStyle=this.color,o.beginPath(),o.arc(c/2,c/2,c/2,0,Math.PI*2,!1),o.closePath(),o.fill(),l},getPatternSrcFunction:function(){return String(this.getPatternSrc).replace("this.color",'"'+this.color+'"')},getPattern:function(c){return c.createPattern(this.source||this.getPatternSrc(),"repeat")},_setBrushStyles:function(c){this.callSuper("_setBrushStyles",c),c.strokeStyle=this.getPattern(c)},createPath:function(c){var s=this.callSuper("createPath",c),l=s._getLeftTopCoords().scalarAdd(s.strokeWidth/2);return s.stroke=new f.Pattern({source:this.source||this.getPatternSrcFunction(),offsetX:-l.x,offsetY:-l.y}),s}}),function(){var c=f.util.getPointer,s=f.util.degreesToRadians,l=f.util.isTouchEvent;f.Canvas=f.util.createClass(f.StaticCanvas,{initialize:function(e,r){r||(r={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(e,r),this._initInteractive(),this._createCacheCanvas()},uniformScaling:!0,uniScaleKey:"shiftKey",centeredScaling:!1,centeredRotation:!1,centeredKey:"altKey",altActionKey:"shiftKey",interactive:!0,selection:!0,selectionKey:"shiftKey",altSelectionKey:null,selectionColor:"rgba(100, 100, 255, 0.3)",selectionDashArray:[],selectionBorderColor:"rgba(255, 255, 255, 0.3)",selectionLineWidth:1,selectionFullyContained:!1,hoverCursor:"move",moveCursor:"move",defaultCursor:"default",freeDrawingCursor:"crosshair",notAllowedCursor:"not-allowed",containerClass:"canvas-container",perPixelTargetFind:!1,targetFindTolerance:0,skipTargetFind:!1,isDrawingMode:!1,preserveObjectStacking:!1,snapAngle:0,snapThreshold:null,stopContextMenu:!1,fireRightClick:!1,fireMiddleClick:!1,targets:[],enablePointerEvents:!1,_hoveredTarget:null,_hoveredTargets:[],_initInteractive:function(){this._currentTransform=null,this._groupSelector=null,this._initWrapperElement(),this._createUpperCanvas(),this._initEventListeners(),this._initRetinaScaling(),this.freeDrawingBrush=f.PencilBrush&&new f.PencilBrush(this),this.calcOffset()},_chooseObjectsToRender:function(){var e=this.getActiveObjects(),r,t,n;if(e.length>0&&!this.preserveObjectStacking){t=[],n=[];for(var a=0,i=this._objects.length;a<i;a++)r=this._objects[a],e.indexOf(r)===-1?t.push(r):n.push(r);e.length>1&&(this._activeObject._objects=n),t.push.apply(t,n)}else t=this._objects;return t},renderAll:function(){this.contextTopDirty&&!this._groupSelector&&!this.isDrawingMode&&(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1);var e=this.contextContainer;return this.renderCanvas(e,this._chooseObjectsToRender()),this},renderTopLayer:function(e){e.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(e),this.contextTopDirty=!0),e.restore()},renderTop:function(){var e=this.contextTop;return this.clearContext(e),this.renderTopLayer(e),this.fire("after:render"),this},_normalizePointer:function(e,r){var t=e.calcTransformMatrix(),n=f.util.invertTransform(t),a=this.restorePointerVpt(r);return f.util.transformPoint(a,n)},isTargetTransparent:function(e,r,t){if(e.shouldCache()&&e._cacheCanvas&&e!==this._activeObject){var n=this._normalizePointer(e,{x:r,y:t}),a=Math.max(e.cacheTranslationX+n.x*e.zoomX,0),i=Math.max(e.cacheTranslationY+n.y*e.zoomY,0),g=f.util.isTransparent
39(e._cacheContext,Math.round(a),Math.round(i),this.targetFindTolerance);return g}var h=this.contextCache,u=e.selectionBackgroundColor,d=this.viewportTransform;e.selectionBackgroundColor="",this.clearContext(h),h.save(),h.transform(d[0],d[1],d[2],d[3],d[4],d[5]),e.render(h),h.restore(),e.selectionBackgroundColor=u;var g=f.util.isTransparent(h,r,t,this.targetFindTolerance);return g},_isSelectionKeyPressed:function(e){var r=!1;return Array.isArray(this.selectionKey)?r=!!this.selectionKey.find(function(t){return e[t]===!0}):r=e[this.selectionKey],r},_shouldClearSelection:function(e,r){var t=this.getActiveObjects(),n=this._activeObject;return!r||r&&n&&t.length>1&&t.indexOf(r)===-1&&n!==r&&!this._isSelectionKeyPressed(e)||r&&!r.evented||r&&!r.selectable&&n&&n!==r},_shouldCenterTransform:function(e,r,t){if(e){var n;return r==="scale"||r==="scaleX"||r==="scaleY"||r==="resizing"?n=this.centeredScaling||e.centeredScaling:r==="rotate"&&(n=this.centeredRotation||e.centeredRotation),n?!t:t}},_getOriginFromCorner:function(e,r){var t={x:e.originX,y:e.originY};return r==="ml"||r==="tl"||r==="bl"?t.x="right":(r==="mr"||r==="tr"||r==="br")&&(t.x="left"),r==="tl"||r==="mt"||r==="tr"?t.y="bottom":(r==="bl"||r==="mb"||r==="br")&&(t.y="top"),t},_getActionFromCorner:function(e,r,t,n){if(!r||!e)return"drag";var a=n.controls[r];return a.getActionName(t,a,n)},_setupCurrentTransform:function(e,r,t){if(r){var n=this.getPointer(e),a=r.__corner,i=r.controls[a],h=t&&a?i.getActionHandler(e,r,i):f.controlsUtils.dragHandler,u=this._getActionFromCorner(t,a,e,r),d=this._getOriginFromCorner(r,a),g=e[this.centeredKey],m={target:r,action:u,actionHandler:h,corner:a,scaleX:r.scaleX,scaleY:r.scaleY,skewX:r.skewX,skewY:r.skewY,offsetX:n.x-r.left,offsetY:n.y-r.top,originX:d.x,originY:d.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:s(r.angle),width:r.width*r.scaleX,shiftKey:e.shiftKey,altKey:g,original:f.util.saveObjectTransform(r)};this._shouldCenterTransform(r,u,g)&&(m.originX="center",m.originY="center"),m.original.originX=d.x,m.original.originY=d.y,this._currentTransform=m,this._beforeTransform(e)}},setCursor:function(e){this.upperCanvasEl.style.cursor=e},_drawSelection:function(e){var r=this._groupSelector,t=new f.Point(r.ex,r.ey),n=f.util.transformPoint(t,this.viewportTransform),a=new f.Point(r.ex+r.left,r.ey+r.top),i=f.util.transformPoint(a,this.viewportTransform),h=Math.min(n.x,i.x),u=Math.min(n.y,i.y),d=Math.max(n.x,i.x),g=Math.max(n.y,i.y),m=this.selectionLineWidth/2;this.selectionColor&&(e.fillStyle=this.selectionColor,e.fillRect(h,u,d-h,g-u)),!(!this.selectionLineWidth||!this.selectionBorderColor)&&(e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor,h+=m,u+=m,d-=m,g-=m,f.Object.prototype._setLineDash.call(this,e,this.selectionDashArray),e.strokeRect(h,u,d-h,g-u))},findTarget:function(e,r){if(!this.skipTargetFind){var t=!0,n=this.getPointer(e,t),a=this._activeObject,i=this.getActiveObjects(),h,u,d=l(e),g=i.length>1&&!r||i.length===1;if(this.targets=[],g&&a._findTargetCorner(n,d)||i.length>1&&!r&&a===this._searchPossibleTargets([a],n))return a;if(i.length===1&&a===this._searchPossibleTargets([a],n))if(this.preserveObjectStacking)h=a,u=this.targets,this.targets=[];else return a;var m=this._searchPossibleTargets(this._objects,n);return e[this.altSelectionKey]&&m&&h&&m!==h&&(m=h,this.targets=u),m}},_checkTarget:function(e,r,t){if(r&&r.visible&&r.evented&&r.containsPoint(e))if((this.perPixelTargetFind||r.perPixelTargetFind)&&!r.isEditing){var n=this.isTargetTransparent
39(r,t.x,t.y);if(!n)return!0}else return!0},_searchPossibleTargets:function(e,r){for(var t,n=e.length,a;n--;){var i=e[n],h=i.group?this._normalizePointer(i.group,r):r;if(this._checkTarget(h,i,r)){t=e[n],t.subTargetCheck&&t instanceof f.Group&&(a=this._searchPossibleTargets(t._objects,r),a&&this.targets.push(a));break}}return t},restorePointerVpt:function(e){return f.util.transformPoint(e,f.util.invertTransform(this.viewportTransform))},getPointer:function(e,r){if(this._absolutePointer&&!r)return this._absolutePointer;if(this._pointer&&r)return this._pointer;var t=c(e),n=this.upperCanvasEl,a=n.getBoundingClientRect(),i=a.width||0,h=a.height||0,u;(!i||!h)&&("top"in a&&"bottom"in a&&(h=Math.abs(a.top-a.bottom)),"right"in a&&"left"in a&&(i=Math.abs(a.right-a.left))),this.calcOffset(),t.x=t.x-this._offset.left,t.y=t.y-this._offset.top,r||(t=this.restorePointerVpt(t));var d=this.getRetinaScaling();return d!==1&&(t.x/=d,t.y/=d),i===0||h===0?u={width:1,height:1}:u={width:n.width/i,height:n.height/h},{x:t.x*u.width,y:t.y*u.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),r=this.lowerCanvasEl,t=this.upperCanvasEl;t?t.className="":(t=this._createCanvasElement(),this.upperCanvasEl=t),f.util.addClass(t,"upper-canvas "+e),this.wrapperEl.appendChild(t),this._copyCanvasStyle(r,t),this._applyCanvasStyle(t),this.contextTop=t.getContext("2d")},getTopContext:function(){return this.contextTop},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=f.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),f.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),f.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var r=this.width||e.width,t=this.height||e.height;f.util.setStyle(e,{position:"absolute",width:r+"px",height:t+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),e.width=r,e.height=t,f.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,r){r.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop}
vendor: 1,027 bytes, line 39
39,getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var e=this._activeObject;return e?e.type==="activeSelection"&&e._objects?e._objects.slice(0):[e]:[]},_onObjectRemoved:function(e){e===this._activeObject&&(this.fire("before:selection:cleared",{target:e}),this._discardActiveObject(),this.fire("selection:cleared",{target:e}),e.fire("deselected")),e===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",e)},_fireSelectionEvents:function(e,r){var t=!1,n=this.getActiveObjects(),a=[],i=[];e.forEach(function(h){n.indexOf(h)===-1&&(t=!0,h.fire("deselected",{e:r,target:h}),i.push(h))}),n.forEach(function(h){e.indexOf(h)===-1&&(t=!0,h.fire("selected",{e:r,target:h}),a.push(h))}),e.length>0&&n.length>0?t&&this.fire("selection:updated",{e:r,selected:a,deselected:i}):n.length>0?this.fire("selection:created",{e:r,selected:a}):e.length>0&&this.fire("selection:cleared",{e:r,deselected:i}
vendor: 35,600 bytes, line 39
39)},setActiveObject:function(e,r){var t=this.getActiveObjects();return this._setActiveObject(e,r),this._fireSelectionEvents(t,r),this},_setActiveObject:function(e,r){return this._activeObject===e||!this._discardActiveObject(r,e)||e.onSelect({e:r})?!1:(this._activeObject=e,!0)},_discardActiveObject:function(e,r){var t=this._activeObject;if(t){if(t.onDeselect({e,object:r}))return!1;this._activeObject=null}return!0},discardActiveObject:function(e){var r=this.getActiveObjects(),t=this.getActiveObject();return r.length&&this.fire("before:selection:cleared",{target:t,e}),this._discardActiveObject(e),this._fireSelectionEvents(r,e),this},dispose:function(){var e=this.wrapperEl;return this.removeListeners(),e.removeChild(this.upperCanvasEl),e.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach((function(r){f.util.cleanUpJsdomNode(this[r]),this[r]=void 0}).bind(this)),e.parentNode&&e.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,f.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(e){var r=this._activeObject;r&&r._renderControls(e)},_toObject:function(e,r,t){var n=this._realizeGroupTransformOnObject(e),a=this.callSuper("_toObject",e,r,t);return this._unwindGroupTransformOnObject(e,n),a},_realizeGroupTransformOnObject:function(e){if(e.group&&e.group.type==="activeSelection"&&this._activeObject===e.group){var r=["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"],t={};return r.forEach(function(n){t[n]=e[n]}),f.util.addTransformToObject(e,this._activeObject.calcOwnMatrix()),t}else return null},_unwindGroupTransformOnObject:function(e,r){r&&e.set(r)},_setSVGObject:function(e,r,t){var n=this._realizeGroupTransformOnObject(r);this.callSuper("_setSVGObject",e,r,t),this._unwindGroupTransformOnObject(r,n)},setViewportTransform:function(e){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),f.StaticCanvas.prototype.setViewportTransform.call(this,e)}});for(var o in f.StaticCanvas)o!=="prototype"&&(f.Canvas[o]=f.StaticCanvas[o])}(),function(){var c=f.util.addListener,s=f.util.removeListener,l=3,o=2,e=1,r={passive:!1};function t(n,a){return n.button&&n.button===a-1}f.util.object.extend(f.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(c,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(n,a){var i=this.upperCanvasEl,h=this._getEventPrefix();n(f.window,"resize",this._onResize),n(i,h+"down",this._onMouseDown),n(i,h+"move",this._onMouseMove,r),n(i,h+"out",this._onMouseOut),n(i,h+"enter",this._onMouseEnter),n(i,"wheel",this._onMouseWheel),n(i,"contextmenu",this._onContextMenu),n(i,"dblclick",this._onDoubleClick),n(i,"dragover",this._onDragOver),n(i,"dragenter",this._onDragEnter),n(i,"dragleave",this._onDragLeave),n(i,"drop",this._onDrop),this.enablePointerEvents||n(i,"touchstart",this._onTouchStart,r),typeof eventjs<"u"&&a in eventjs&&(eventjs[a](i,"gesture",this._onGesture),eventjs[a](i,"drag",this._onDrag),eventjs[a](i,"orientation",this._onOrientationChange),eventjs[a](i,"shake",this._onShake),eventjs[a](i,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(s,"remove");var n=this._getEventPrefix();s(f.document,n+"up",this._onMouseUp),s(f.document,"touchend",this._onTouchEnd,r),s(f.document,n+"move",this._onMouseMove,r),s(f.document,"touchmove",this._onMouseMove,r)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._onDrop.bind(this),this.eventsBound=!0)},_onGesture:function(n,a){this.__onTransformGesture&&this.__onTransformGesture(n,a)},_onDrag:function(n,a){this.__onDrag&&this.__onDrag(n,a)},_onMouseWheel:function(n){this.__onMouseWheel(n)},_onMouseOut:function(n){var a=this._hoveredTarget;this.fire("mouse:out",{target:a,e:n}),this._hoveredTarget=null,a&&a.fire("mouseout",{e:n});var i=this;this._hoveredTargets.forEach(function(h){i.fire("mouse:out",{target:h,e:n}),h&&h.fire("mouseout",{e:n})}),this._hoveredTargets=[]},_onMouseEnter:function(n){!this._currentTransform&&!this.findTarget(n)&&(this.fire("mouse:over",{target:null,e:n}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(n,a){this.__onOrientationChange&&this.__onOrientationChange(n,a)},_onShake:function(n,a){this.__onShake&&this.__onShake(n,a)},_onLongPress:function(n,a){this.__onLongPress&&this.__onLongPress(n,a)},_onDragOver:function(n){n.preventDefault();var a=this._simpleEventHandler("dragover",n);this._fireEnterLeaveEvents(a,n)},_onDrop:function(n){return this._simpleEventHandler("drop:before",n),this._simpleEventHandler("drop",n)},_onContextMenu:function(n){return this.stopContextMenu&&(n.stopPropagation(),n.preventDefault()),!1},_onDoubleClick:function(n){this._cacheTransformEventData(n),this._handleEvent(n,"dblclick"),this._resetTransformEventData(n)},getPointerId:function(n){var a=n.changedTouches;return a?a[0]&&a[0].identifier:this.enablePointerEvents?n.pointerId:-1},_isMainEvent:function(n){return n.isPrimary===!0?!0:n.isPrimary===!1?!1:n.type==="touchend"&&n.touches.length===0?!0:n.changedTouches?n.changedTouches[0].identifier===this.mainTouchId:!0},_onTouchStart:function(n){n.preventDefault(),this.mainTouchId===null&&(this.mainTouchId=this.getPointerId(n)),this.__onMouseDown(n),this._resetTransformEventData();var a=this.upperCanvasEl,i=this._getEventPrefix();c(f.document,"touchend",this._onTouchEnd,r),c(f.document,"touchmove",this._onMouseMove,r),s(a,i+"down",this._onMouseDown)},_onMouseDown:function(n){this.__onMouseDown(n),this._resetTransformEventData();var a=this.upperCanvasEl,i=this._getEventPrefix();s(a,i+"move",this._onMouseMove,r),c(f.document,i+"up",this._onMouseUp),c(f.document,i+"move",this._onMouseMove,r)},_onTouchEnd:function(n){if(!(n.touches.length>0)){this.__onMouseUp(n),this._resetTransformEventData(),this.mainTouchId=null;var a=this._getEventPrefix();s(f.document,"touchend",this._onTouchEnd,r),s(f.document,"touchmove",this._onMouseMove,r);var i=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(function(){c(i.upperCanvasEl,a+"down",i._onMouseDown),i._willAddMouseDown=0},400)}},_onMouseUp:function(n){this.__onMouseUp(n),this._resetTransformEventData();var a=this.upperCanvasEl,i=this._getEventPrefix();this._isMainEvent(n)&&(s(f.document,i+"up",this._onMouseUp),s(f.document,i+"move",this._onMouseMove,r),c(a,i+"move",this._onMouseMove,r))},_onMouseMove:function(n){!this.allowTouchScrolling&&n.preventDefault&&n.preventDefault(),this.__onMouseMove(n)},_onResize:function(){this.calcOffset()},_shouldRender:function(n){var a=this._activeObject;return!!a!=!!n||a&&n&&a!==n?!0:(a&&a.isEditing,!1)},__onMouseUp:function(n){var a,i=this._currentTransform,h=this._groupSelector,u=!1,d=!h||h.left===0&&h.top===0;if(this._cacheTransformEventData(n),a=this._target,this._handleEvent(n,"up:before"),t(n,l)){this.fireRightClick&&this._handleEvent(n,"up",l,d);return}if(t(n,o)){this.fireMiddleClick&&this._handleEvent(n,"up",o,d),this._resetTransformEventData();return}if(this.isDrawingMode&&this._isCurrentlyDrawing){this._onMouseUpInDrawingMode(n);return}if(this._isMainEvent(n)){if(i&&(this._finalizeCurrentTransform(n),u=i.actionPerformed),!d){var g=a===this._activeObject;this._maybeGroupObjects(n),u||(u=this._shouldRender(a)||!g&&a===this._activeObject)}var m,p;if(a){if(m=a._findTargetCorner(this.getPointer(n,!0),f.util.isTouchEvent(n)),a.selectable&&a!==this._activeObject&&a.activeOn==="up")this.setActiveObject(a,n),u=!0;else{var C=a.controls[m],T=C&&C.getMouseUpHandler(n,a,C);T&&(p=this.getPointer(n),T(n,i,p.x,p.y))}a.isMoving=!1}if(i&&(i.target!==a||i.corner!==m)){var j=i.target&&i.target.controls[i.corner],W=j&&j.getMouseUpHandler(n,a,C);p=p||this.getPointer(n),W&&W(n,i,p.x,p.y)}this._setCursorFromEvent(n,a),this._handleEvent(n,"up",e,d),this._groupSelector=null,this._currentTransform=null,a&&(a.__corner=0),u?this.requestRenderAll():d||this.renderTop()}},_simpleEventHandler:function(n,a){var i=this.findTarget(a),h=this.targets,u={e:a,target:i,subTargets:h};if(this.fire(n,u),i&&i.fire(n,u),!h)return i;for(var d=0;d<h.length;d++)h[d].fire(n,u);return i},_handleEvent:function(n,a,i,h){var u=this._target,d=this.targets||[],g={e:n,target:u,subTargets:d,button:i||e,isClick:h||!1,pointer:this._pointer,absolutePointer:this._absolutePointer,transform:this._currentTransform};a==="up"&&(g.currentTarget=this.findTarget(n),g.currentSubTargets=this.targets),this.fire("mouse:"+a,g),u&&u.fire("mouse"+a,g);for(var m=0;m<d.length;m++)d[m].fire("mouse"+a,g)},_finalizeCurrentTransform:function(n){var a=this._currentTransform,i=a.target,h={e:n,target:i,transform:a,action:a.action};i._scaling&&(i._scaling=!1),i.setCoords(),(a.actionPerformed||this.stateful&&i.hasStateChanged())&&this._fire("modified",h)},_onMouseDownInDrawingMode:function(n){this._isCurrentlyDrawing=!0,this.getActiveObject()&&this.discardActiveObject(n).requestRenderAll();var a=this.getPointer(n);this.freeDrawingBrush.onMouseDown(a,{e:n,pointer:a}),this._handleEvent(n,"down")},_onMouseMoveInDrawingMode:function(n){if(this._isCurrentlyDrawing){var a=this.getPointer(n);this.freeDrawingBrush.onMouseMove(a,{e:n,pointer:a})}this.setCursor(this.freeDrawingCursor),this._handleEvent(n,"move")},_onMouseUpInDrawingMode:function(n){var a=this.getPointer(n);this._isCurrentlyDrawing=this.freeDrawingBrush.onMouseUp({e:n,pointer:a}),this._handleEvent(n,"up")},__onMouseDown:function(n){this._cacheTransformEventData(n),this._handleEvent(n,"down:before");var a=this._target;if(t(n,l)){this.fireRightClick&&this._handleEvent(n,"down",l);return}if(t(n,o)){this.fireMiddleClick&&this._handleEvent(n,"down",o);return}if(this.isDrawingMode){this._onMouseDownInDrawingMode(n);return}if(this._isMainEvent(n)&&!this._currentTransform){var i=this._pointer;this._previousPointer=i;var h=this._shouldRender(a),u=this._shouldGroup(n,a);if(this._shouldClearSelection(n,a)?this.discardActiveObject(n):u&&(this._handleGrouping(n,a),a=this._activeObject),this.selection&&(!a||!a.selectable&&!a.isEditing&&a!==this._activeObject)&&(this._groupSelector={ex:this._absolutePointer.x,ey:this._absolutePointer.y,top:0,left:0}),a){var d=a===this._activeObject;a.selectable&&a.activeOn==="down"&&this.setActiveObject(a,n);var g=a._findTargetCorner(this.getPointer(n,!0),f.util.isTouchEvent(n));if(a.__corner=g,a===this._activeObject&&(g||!u)){this._setupCurrentTransform(n,a,d);var m=a.controls[g],i=this.getPointer(n),p=m&&m.getMouseDownHandler(n,a,m);p&&p(n,this._currentTransform,i.x,i.y)}}this._handleEvent(n,"down"),(h||u)&&this.requestRenderAll()}},_resetTransformEventData:function(){this._target=null,this._pointer=null,this._absolutePointer=null},_cacheTransformEventData:function(n){this._resetTransformEventData(),this._pointer=this.getPointer(n,!0),this._absolutePointer=this.restorePointerVpt(this._pointer),this._target=this._currentTransform?this._currentTransform.target:this.findTarget(n)||null},_beforeTransform:function(n){var a=this._currentTransform;this.stateful&&a.target.saveState(),this.fire("before:transform",{e:n,transform:a})},__onMouseMove:function(n){this._handleEvent(n,"move:before"),this._cacheTransformEventData(n);var a,i;if(this.isDrawingMode){this._onMouseMoveInDrawingMode(n);return}if(this._isMainEvent(n)){var h=this._groupSelector;h?(i=this._absolutePointer,h.left=i.x-h.ex,h.top=i.y-h.ey,this.renderTop()):this._currentTransform?this._transformObject(n):(a=this.findTarget(n)||null,this._setCursorFromEvent(n,a),this._fireOverOutEvents(a,n)),this._handleEvent(n,"move"),this._resetTransformEventData()}},_fireOverOutEvents:function(n,a){var i=this._hoveredTarget,h=this._hoveredTargets,u=this.targets,d=Math.max(h.length,u.length);this.fireSyntheticInOutEvents(n,a,{oldTarget:i,evtOut:"mouseout",canvasEvtOut:"mouse:out",evtIn:"mouseover",canvasEvtIn:"mouse:over"});for(var g=0;g<d;g++)this.fireSyntheticInOutEvents(u[g],a,{oldTarget:h[g],evtOut:"mouseout",evtIn:"mouseover"});this._hoveredTarget=n,this._hoveredTargets=this.targets.concat()},_fireEnterLeaveEvents:function(n,a){var i=this._draggedoverTarget,h=this._hoveredTargets,u=this.targets,d=Math.max(h.length,u.length);this.fireSyntheticInOutEvents(n,a,{oldTarget:i,evtOut:"dragleave",evtIn:"dragenter"});for(var g=0;g<d;g++)this.fireSyntheticInOutEvents(u[g],a,{oldTarget:h[g],evtOut:"dragleave",evtIn:"dragenter"});this._draggedoverTarget=n},fireSyntheticInOutEvents:function(n,a,i){var h,u,d=i.oldTarget,g,m,p=d!==n,C=i.canvasEvtIn,T=i.canvasEvtOut;p&&(h={e:a,target:n,previousTarget:d},u={e:a,target:d,nextTarget:n}),m=n&&p,g=d&&p,g&&(T&&this.fire(T,u),d.fire(i.evtOut,u)),m&&(C&&this.fire(C,h),n.fire(i.evtIn,h))},__onMouseWheel:function(n){this._cacheTransformEventData(n),this._handleEvent(n,"wheel"),this._resetTransformEventData()},_transformObject:function(n){var a=this.getPointer(n),i=this._currentTransform;i.reset=!1,i.shiftKey=n.shiftKey,i.altKey=n[this.centeredKey],this._performTransformAction(n,i,a),i.actionPerformed&&this.requestRenderAll()},_performTransformAction:function(n,a,i){var h=i.x,u=i.y,d=a.action,g=!1,m=a.actionHandler;m&&(g=m(n,a,h,u)),d==="drag"&&g&&(a.target.isMoving=!0,this.setCursor(a.target.moveCursor||this.moveCursor)),a.actionPerformed=a.actionPerformed||g},_fire:f.controlsUtils.fireEvent,_setCursorFromEvent:function(n,a){if(!a)return this.setCursor(this.defaultCursor),!1;var i=a.hoverCursor||this.hoverCursor,h=this._activeObject&&this._activeObject.type==="activeSelection"?this._activeObject:null,u=(!h||!h.contains(a))&&a._findTargetCorner(this.getPointer(n,!0));u?this.setCursor(this.getCornerCursor(u,a,n)):(a.subTargetCheck&&this.targets.concat().reverse().map(function(d){i=d.hoverCursor||i}),this.setCursor(i))},getCornerCursor:function(n,a,i){var h=a.controls[n];return h.cursorStyleHandler(i,h,a)}})}(),function(){var c=Math.min,s=Math.max;f.util.object.extend(f.Canvas.prototype,{_shouldGroup:function(l,o){var e=this._activeObject;return e&&this._isSelectionKeyPressed(l)&&o&&o.selectable&&this.selection&&(e!==o||e.type==="activeSelection")&&!o.onSelect({e:l})},_handleGrouping:function(l,o){var e=this._activeObject;e.__corner||o===e&&(o=this.findTarget(l,!0),!o||!o.selectable)||(e&&e.type==="activeSelection"?this._updateActiveSelection(o,l):this._createActiveSelection(o,l))},_updateActiveSelection:function(l,o){var e=this._activeObject,r=e._objects.slice(0);e.contains(l)?(e.removeWithUpdate(l),this._hoveredTarget=l,this._hoveredTargets=this.targets.concat(),e.size()===1&&this._setActiveObject(e.item(0),o)):(e.addWithUpdate(l),this._hoveredTarget=e,this._hoveredTargets=this.targets.concat()),this._fireSelectionEvents(r,o)},_createActiveSelection:function(l,o){var e=this.getActiveObjects(),r=this._createGroup(l);this._hoveredTarget=r,this._setActiveObject(r,o),this._fireSelectionEvents(e,o)},_createGroup:function(l){var o=this._objects,e=o.indexOf(this._activeObject)<o.indexOf(l),r=e?[this._activeObject,l]:[l,this._activeObject];return this._activeObject.isEditing&&this._activeObject.exitEditing(),new f.ActiveSelection(r,{canvas:this})},_groupSelectedObjects:function(l){var o=this._collectObjects(l),e;o.length===1?this.setActiveObject(o[0],l):o.length>1&&(e=new f.ActiveSelection(o.reverse(),{canvas:this}),this.setActiveObject(e,l))},_collectObjects:function(l){for(var o=[],e,r=this._groupSelector.ex,t=this._groupSelector.ey,n=r+this._groupSelector.left,a=t+this._groupSelector.top,i=new f.Point(c(r,n),c(t,a)),h=new f.Point(s(r,n),s(t,a)),u=!this.selectionFullyContained,d=r===n&&t===a,g=this._objects.length;g--&&(e=this._objects[g],!(!(!e||!e.selectable||!e.visible)&&(u&&e.intersectsWithRect(i,h,!0)||e.isContainedWithinRect(i,h,!0)||u&&e.containsPoint(i,null,!0)||u&&e.containsPoint(h,null,!0))&&(o.push(e),d))););return o.length>1&&(o=o.filter(function(m){return!m.onSelect({e:l})})),o},_maybeGroupObjects:function(l){this.selection&&this._groupSelector&&this._groupSelectedObjects(l),this.setCursor(this.defaultCursor),this._groupSelector=null}})}(),function(){f.util.object.extend(f.StaticCanvas.prototype,{toDataURL:function(c){c||(c={});var s=c.format||"png",l=c.quality||1,o=(c.multiplier||1)*(c.enableRetinaScaling?this.getRetinaScaling():1),e=this.toCanvasElement(o,c);return f.util.toDataURL(e,s,l)},toCanvasElement:function(c,s){c=c||1,s=s||{};var l=(s.width||this.width)*c,o=(s.height||this.height)*c,e=this.getZoom(),r=this.width,t=this.height,n=e*c,a=this.viewportTransform,i=(a[4]-(s.left||0))*c,h=(a[5]-(s.top||0))*c,u=this.interactive,d=[n,0,0,n,i,h],g=this.enableRetinaScaling,m=f.util.createCanvasElement(),p=this.contextTop;return m.width=l,m.height=o,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=d,this.width=l,this.height=o,this.calcViewportBoundaries(),this.renderCanvas(m.getContext("2d"),this._objects),this.viewportTransform=a,this.width=r,this.height=t,this.calcViewportBoundaries(),this.interactive=u,this.enableRetinaScaling=g,this.contextTop=p,m}})}(),f.util.object.extend(f.StaticCanvas.prototype,{loadFromJSON:function(c,s,l){if(c){var o=typeof c=="string"?JSON.parse(c):f.util.object.clone(c),e=this,r=o.clipPath,t=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete o.clipPath,this._enlivenObjects(o.objects,function(n){e.clear(),e._setBgOverlay(o,function(){r?e._enlivenObjects([r],function(a){e.clipPath=a[0],e.__setupCanvas.call(e,o,n,t,s)}):e.__setupCanvas.call(e,o,n,t,s)})},l),this}},__setupCanvas:function(c,s,l,o){var e=this;s.forEach(function(r,t){e.insertAt(r,t)}),this.renderOnAddRemove=l,delete c.objects,delete c.backgroundImage,delete c.overlayImage,delete c.background,delete c.overlay,this._setOptions(c),this.renderAll(),o&&o()},_setBgOverlay:function(c,s){var l={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!c.backgroundImage&&!c.overlayImage&&!c.background&&!c.overlay){s&&s();return}var o=function(){l.backgroundImage&&l.overlayImage&&l.backgroundColor&&l.overlayColor&&s&&s()};this.__setBgOverlay("backgroundImage",c.backgroundImage,l,o),this.__setBgOverlay("overlayImage",c.overlayImage,l,o),this.__setBgOverlay("backgroundColor",c.background,l,o),this.__setBgOverlay("overlayColor",c.overlay,l,o)},__setBgOverlay:function(c,s,l,o){var e=this;if(!s){l[c]=!0,o&&o();return}c==="backgroundImage"||c==="overlayImage"?f.util.enlivenObjects([s],function(r){e[c]=r[0],l[c]=!0,o&&o()}):this["set"+f.util.string.capitalize(c,!0)](s,function(){l[c]=!0,o&&o()})},_enlivenObjects:function(c,s,l){if(!c||c.length===0){s&&s([]);return}f.util.enlivenObjects(c,function(o){s&&s(o)},null,l)},_toDataURL:function(c,s){this.clone(function(l){s(l.toDataURL(c))})},_toDataURLWithMultiplier:function(c,s,l){this.clone(function(o){l(o.toDataURLWithMultiplier(c,s))})},clone:function(c,s){var l=JSON.stringify(this.toJSON(s));this.cloneWithoutData(function(o){o.loadFromJSON(l,function(){c&&c(o)})})},cloneWithoutData:function(c){var s=f.util.createCanvasElement();s.width=this.width,s.height=this.height;var l=new f.Canvas(s);this.backgroundImage?(l.setBackgroundImage(this.backgroundImage.src,function(){l.renderAll(),c&&c(l)}),l.backgroundImageOpacity=this.backgroundImageOpacity,l.backgroundImageStretch=this.backgroundImageStretch):c&&c(l)}}),function(c){var s=c.fabric||(c.fabric={}),l=s.util.object.extend,o=s.util.object.clone,e=s.util.toFixed,r=s.util.string.capitalize,t=s.util.degreesToRadians,n=!s.isLikelyNode,a=2;s.Object||(s.Object=s.util.createClass(s.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,touchCornerSize:24,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgb(178,204,255)",borderDashArray:null,cornerColor:"rgb(178,204,255)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,perPixelTargetFind:!1,includeDefaultValues:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:n,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",activeOn:"down",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),colorProperties:"fill stroke backgroundColor".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(i){i&&this.setOptions(i)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=s.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(i){var h=s.perfLimitSizeTotal,u=i.width,d=i.height,g=s.maxCacheSideLimit,m=s.minCacheSideLimit;if(u<=g&&d<=g&&u*d<=h)return u<m&&(i.width=m),d<m&&(i.height=m),i;var p=u/d,C=s.util.limitDimsByArea(p,h),T=s.util.capValue,j=T(m,C.x,g),W=T(m,C.y,g);return u>j&&(i.zoomX/=u/j,i.width=j,i.capped=!0),d>W&&(i.zoomY/=d/W,i.height=W,i.capped=!0),i},_getCacheCanvasDimensions:function(){var i=this.getTotalObjectScaling(),h=this._getTransformedDimensions(0,0),u=h.x*i.scaleX/this.scaleX,d=h.y*i.scaleY/this.scaleY;return{width:Math.ceil(u+a),height:Math.ceil(d+a),zoomX:i.scaleX,zoomY:i.scaleY,x:u,y:d}},_updateCacheCanvas:function(){var i=this.canvas;if(this.noScaleCache&&i&&i._currentTransform){var h=i._currentTransform.target,u=i._currentTransform.action;if(this===h&&u.slice&&u.slice(0,5)==="scale")return!1}var d=this._cacheCanvas,g=this._limitCacheSize(this._getCacheCanvasDimensions()),m=g.width,p=g.height,C,T,j=g.zoomX,W=g.zoomY,V=m!==this.cacheWidth||p!==this.cacheHeight,et=this.zoomX!==j||this.zoomY!==W,nt=V||et;return nt?(V?(d.width=m,d.height=p):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,d.width,d.height)),C=g.x/2,T=g.y/2,this.cacheTranslationX=Math.round(d.width/2-C)+C,this.cacheTranslationY=Math.round(d.height/2-T)+T,this.cacheWidth=m,this.cacheHeight=p,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(j,W),this.zoomX=j,this.zoomY=W,!0):!1},setOptions:function(i){this._setOptions(i),this._initGradient(i.fill,"fill"),this._initGradient(i.stroke,"stroke"),this._initPattern(i.fill,"fill"),this._initPattern(i.stroke,"stroke")},transform:function(i){var h=this.group&&!this.group._transformDone||this.group&&this.canvas&&i===this.canvas.contextTop,u=this.calcTransformMatrix(!h);i.transform(u[0],u[1],u[2],u[3],u[4],u[5])},toObject:function(i){var h=s.Object.NUM_FRACTION_DIGITS,u={type:this.type,version:s.version,originX:this.originX,originY:this.originY,left:e(this.left,h),top:e(this.top,h),width:e(this.width,h),height:e(this.height,h),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:e(this.strokeWidth,h),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:e(this.strokeMiterLimit,h),scaleX:e(this.scaleX,h),scaleY:e(this.scaleY,h),angle:e(this.angle,h),flipX:this.flipX,flipY:this.flipY,opacity:e(this.opacity,h),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,skewX:e(this.skewX,h),skewY:e(this.skewY,h)};return this.clipPath&&!this.clipPath.excludeFromExport&&(u.clipPath=this.clipPath.toObject(i),u.clipPath.inverted=this.clipPath.inverted,u.clipPath.absolutePositioned=this.clipPath.absolutePositioned),s.util.populateWithProperties(this,u,i),this.includeDefaultValues||(u=this._removeDefaultValues(u)),u},toDatalessObject:function(i){return this.toObject(i)},_removeDefaultValues:function(i){var h=s.util.getKlass(i.type).prototype,u=h.stateProperties;return u.forEach(function(d){d==="left"||d==="top"||(i[d]===h[d]&&delete i[d],Array.isArray(i[d])&&Array.isArray(h[d])&&i[d].length===0&&h[d].length===0&&delete i[d])}),i},toString:function(){return"#<fabric."+r(this.type)+">"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var i=s.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(i.scaleX),scaleY:Math.abs(i.scaleY)}},getTotalObjectScaling:function(){var i=this.getObjectScaling(),h=i.scaleX,u=i.scaleY;if(this.canvas){var d=this.canvas.getZoom(),g=this.canvas.getRetinaScaling();h*=d*g,u*=d*g}return{scaleX:h,scaleY:u}},getObjectOpacity:function(){var i=this.opacity;return this.group&&(i*=this.group.getObjectOpacity()),i},_set:function(i,h){var u=i==="scaleX"||i==="scaleY",d=this[i]!==h,g=!1;return u&&(h=this._constrainScale(h)),i==="scaleX"&&h<0?(this.flipX=!this.flipX,h*=-1):i==="scaleY"&&h<0?(this.flipY=!this.flipY,h*=-1):i==="shadow"&&h&&!(h instanceof s.Shadow)?h=new s.Shadow(h):i==="dirty"&&this.group&&this.group.set("dirty",h),this[i]=h,d&&(g=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(i)>-1?(this.dirty=!0,g&&this.group.set("dirty",!0)):g&&this.stateProperties.indexOf(i)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:s.iMatrix.concat()},isNotVisible:function(){return this.opacity===0||!this.width&&!this.height&&this.strokeWidth===0||!this.visible},render:function(i){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(i.save(),this._setupCompositeOperation(i),this.drawSelectionBackground(i),this.transform(i),this._setOpacity(i),this._setShadow(i,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(i)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(i),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),i.restore())},renderCache:function(i){i=i||{},(!this._cacheCanvas||!this._cacheContext)&&this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,i.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this._cacheContext=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&this.stroke!=="transparent"&&this.strokeWidth!==0},hasFill:function(){return this.fill&&this.fill!=="transparent"},needsItsOwnCache:function(){return!!(this.paintFirst==="stroke"&&this.hasFill()&&this.hasStroke()&&typeof this.shadow=="object"||this.clipPath)},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(this.shadow.offsetX!==0||this.shadow.offsetY!==0)},drawClipPathOnCache:function(i,h){if(i.save(),h.inverted?i.globalCompositeOperation="destination-out":i.globalCompositeOperation="destination-in",h.absolutePositioned){var u=s.util.invertTransform(this.calcTransformMatrix());i.transform(u[0],u[1],u[2],u[3],u[4],u[5])}h.transform(i),i.scale(1/h.zoomX,1/h.zoomY),i.drawImage(h._cacheCanvas,-h.cacheTranslationX,-h.cacheTranslationY),i.restore()},drawObject:function(i,h){var u=this.fill,d=this.stroke;h?(this.fill="black",this.stroke="",this._setClippingProperties(i)):this._renderBackground(i),this._render(i),this._drawClipPath(i,this.clipPath),this.fill=u,this.stroke=d},_drawClipPath:function(i,h){h&&(h.canvas=this.canvas,h.shouldCache(),h._transformDone=!0,h.renderCache({forClipping:!0}),this.drawClipPathOnCache(i,h))},drawCacheOnCanvas:function(i){i.scale(1/this.zoomX,1/this.zoomY),i.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(i){if(this.isNotVisible())return!1;if(this._cacheCanvas&&this._cacheContext&&!i&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&this._cacheContext&&!i){var h=this.cacheWidth/this.zoomX,u=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-h/2,-u/2,h,u)}return!0}return!1},_renderBackground:function(i){if(this.backgroundColor){var h=this._getNonTransformedDimensions();i.fillStyle=this.backgroundColor,i.fillRect(-h.x/2,-h.y/2,h.x,h.y),this._removeShadow(i)}},_setOpacity:function(i){this.group&&!this.group._transformDone?i.globalAlpha=this.getObjectOpacity():i.globalAlpha*=this.opacity},_setStrokeStyles:function(i,h){var u=h.stroke;u&&(i.lineWidth=h.strokeWidth,i.lineCap=h.strokeLineCap,i.lineDashOffset=h.strokeDashOffset,i.lineJoin=h.strokeLineJoin,i.miterLimit=h.strokeMiterLimit,u.toLive?u.gradientUnits==="percentage"||u.gradientTransform||u.patternTransform?this._applyPatternForTransformedGradient(i,u):(i.strokeStyle=u.toLive(i,this),this._applyPatternGradientTransform(i,u)):i.strokeStyle=h.stroke)},_setFillStyles:function(i,h){var u=h.fill;u&&(u.toLive?(i.fillStyle=u.toLive(i,this),this._applyPatternGradientTransform(i,h.fill)):i.fillStyle=u)},_setClippingProperties:function(i){i.globalAlpha=1,i.strokeStyle="transparent",i.fillStyle="#000000"},_setLineDash:function(i,h){!h||h.length===0||(1&h.length&&h.push.apply(h,h),i.setLineDash(h))},_renderControls:function(i,h){var u=this.getViewportTransform(),d=this.calcTransformMatrix(),g,m,p;h=h||{},m=typeof h.hasBorders<"u"?h.hasBorders:this.hasBorders,p=typeof h.hasControls<"u"?h.hasControls:this.hasControls,d=s.util.multiplyTransformMatrices(u,d),g=s.util.qrDecompose(d),i.save(),i.translate(g.translateX,g.translateY),i.lineWidth=1*this.borderScaleFactor,this.group||(i.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(g.angle-=180),i.rotate(t(this.group?g.angle:this.angle)),h.forActiveSelection||this.group?m&&this.drawBordersInGroup(i,g,h):m&&this.drawBorders(i,h),p&&this.drawControls(i,h),i.restore()},_setShadow:function(i){if(this.shadow){var h=this.shadow,u=this.canvas,d,g=u&&u.viewportTransform[0]||1,m=u&&u.viewportTransform[3]||1;h.nonScaling?d={scaleX:1,scaleY:1}:d=this.getObjectScaling(),u&&u._isRetinaScaling()&&(g*=s.devicePixelRatio,m*=s.devicePixelRatio),i.shadowColor=h.color,i.shadowBlur=h.blur*s.browserShadowBlurConstant*(g+m)*(d.scaleX+d.scaleY)/4,i.shadowOffsetX=h.offsetX*g*d.scaleX,i.shadowOffsetY=h.offsetY*m*d.scaleY}},_removeShadow:function(i){this.shadow&&(i.shadowColor="",i.shadowBlur=i.shadowOffsetX=i.shadowOffsetY=0)},_applyPatternGradientTransform:function(i,h){if(!h||!h.toLive)return{offsetX:0,offsetY:0};var u=h.gradientTransform||h.patternTransform,d=-this.width/2+h.offsetX||0,g=-this.height/2+h.offsetY||0;return h.gradientUnits==="percentage"?i.transform(this.width,0,0,this.height,d,g):i.transform(1,0,0,1,d,g),u&&i.transform(u[0],u[1],u[2],u[3],u[4],u[5]),{offsetX:d,offsetY:g}},_renderPaintInOrder:function(i){this.paintFirst==="stroke"?(this._renderStroke(i),this._renderFill(i)):(this._renderFill(i),this._renderStroke(i))},_render:function(){},_renderFill:function(i){this.fill&&(i.save(),this._setFillStyles(i,this),this.fillRule==="evenodd"?i.fill("evenodd"):i.fill(),i.restore())},_renderStroke:function(i){if(!(!this.stroke||this.strokeWidth===0)){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(i),i.save(),this.strokeUniform&&this.group){var h=this.getObjectScaling();i.scale(1/h.scaleX,1/h.scaleY)}else this.strokeUniform&&i.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(i,this.strokeDashArray),this._setStrokeStyles(i,this),i.stroke(),i.restore()}},_applyPatternForTransformedGradient:function(i,h){var u=this._limitCacheSize(this._getCacheCanvasDimensions()),d=s.util.createCanvasElement(),g,m=this.canvas.getRetinaScaling(),p=u.x/this.scaleX/m,C=u.y/this.scaleY/m;d.width=Math.ceil(p),d.height=Math.ceil(C),g=d.getContext("2d"),g.beginPath(),g.moveTo(0,0),g.lineTo(p,0),g.lineTo(p,C),g.lineTo(0,C),g.closePath(),g.translate(p/2,C/2),g.scale(u.zoomX/this.scaleX/m,u.zoomY/this.scaleY/m),this._applyPatternGradientTransform(g,h),g.fillStyle=h.toLive(i),g.fill(),i.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),i.scale(m*this.scaleX/u.zoomX,m*this.scaleY/u.zoomY),i.strokeStyle=g.createPattern(d,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var i=s.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",i.scaleX),this.set("scaleY",i.scaleY),this.angle=i.angle,this.skewX=i.skewX,this.skewY=0}},_removeTransformMatrix:function(i){var h=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),h=s.util.transformPoint(h,this.transformMatrix)),this.transformMatrix=null,i&&(this.scaleX*=i.scaleX,this.scaleY*=i.scaleY,this.cropX=i.cropX,this.cropY=i.cropY,h.x+=i.offsetLeft,h.y+=i.offsetTop,this.width=i.width,this.height=i.height),this.setPositionByOrigin(h,"center","center")},clone:function(i,h){var u=this.toObject(h);this.constructor.fromObject?this.constructor.fromObject(u,i):s.Object._fromObject("Object",u,i)},cloneAsImage:function(i,h){var u=this.toCanvasElement(h);return i&&i(new s.Image(u)),this},toCanvasElement:function(i){i||(i={});var h=s.util,u=h.saveObjectTransform(this),d=this.group,g=this.shadow,m=Math.abs,p=(i.multiplier||1)*(i.enableRetinaScaling?s.devicePixelRatio:1);delete this.group,i.withoutTransform&&h.resetObjectTransform(this),i.withoutShadow&&(this.shadow=null);
39var C=s.util.createCanvasElement(),T=this.getBoundingRect(!0,!0),j=this.shadow,W,V={x:0,y:0},et,nt,Z;j&&(et=j.blur,j.nonScaling?W={scaleX:1,scaleY:1}:W=this.getObjectScaling(),V.x=2*Math.round(m(j.offsetX)+et)*m(W.scaleX),V.y=2*Math.round(m(j.offsetY)+et)*m(W.scaleY)),nt=T.width+V.x,Z=T.height+V.y,C.width=Math.ceil(nt),C.height=Math.ceil(Z);var tt=new s.StaticCanvas(C,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});i.format==="jpeg"&&(tt.backgroundColor="#fff"),this.setPositionByOrigin(new s.Point(tt.width/2,tt.height/2),"center","center");var lt=this.canvas;tt.add(this);var ht=tt.toCanvasElement(p||1,i);return this.shadow=g,this.set("canvas",lt),d&&(this.group=d),this.set(u).setCoords(),tt._objects=[],tt.dispose(),tt=null,ht},toDataURL:function(i){return i||(i={}),s.util.toDataURL(this.toCanvasElement(i),i.format||"png",i.quality||1)},isType:function(i){return arguments.length>1?Array.from(arguments).includes(this.type):this.type===i},complexity:function(){return 1},toJSON:function(i){return this.toObject(i)},rotate:function(i){var h=(this.originX!=="center"||this.originY!=="center")&&this.centeredRotation;return h&&this._setOriginToCenter(),this.set("angle",i),h&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(i,h){h=h||this.canvas.getPointer(i);var u=new s.Point(h.x,h.y),d=this._getLeftTopCoords();return this.angle&&(u=s.util.rotatePoint(u,d,t(-this.angle))),{x:u.x-d.x,y:u.y-d.y}},_setupCompositeOperation:function(i){this.globalCompositeOperation&&(i.globalCompositeOperation=this.globalCompositeOperation)},dispose:function(){s.runningAnimations&&s.runningAnimations.cancelByTarget(this)}}),s.util.createAccessors&&s.util.createAccessors(s.Object),l(s.Object.prototype,s.Observable),s.Object.NUM_FRACTION_DIGITS=2,s.Object.ENLIVEN_PROPS=["clipPath"],s.Object._fromObject=function(i,h,u,d){var g=s[i];h=o(h,!0),s.util.enlivenPatterns([h.fill,h.stroke],function(m){typeof m[0]<"u"&&(h.fill=m[0]),typeof m[1]<"u"&&(h.stroke=m[1]),s.util.enlivenObjectEnlivables(h,h,function(){var p=d?new g(h[d],h):new g(h);u&&u(p)})})},s.Object.__uid=0)}(R),function(){var c=f.util.degreesToRadians,s={left:-.5,center:0,right:.5},l={top:-.5,center:0,bottom:.5};f.util.object.extend(f.Object.prototype,{translateToGivenOrigin:function(o,e,r,t,n){var a=o.x,i=o.y,h,u,d;return typeof e=="string"?e=s[e]:e-=.5,typeof t=="string"?t=s[t]:t-=.5,h=t-e,typeof r=="string"?r=l[r]:r-=.5,typeof n=="string"?n=l[n]:n-=.5,u=n-r,(h||u)&&(d=this._getTransformedDimensions(),a=o.x+h*d.x,i=o.y+u*d.y),new f.Point(a,i)},translateToCenterPoint:function(o,e,r){var t=this.translateToGivenOrigin(o,e,r,"center","center");return this.angle?f.util.rotatePoint(t,o,c(this.angle)):t},translateToOriginPoint:function(o,e,r){var t=this.translateToGivenOrigin(o,"center","center",e,r);return this.angle?f.util.rotatePoint(t,o,c(this.angle)):t},getCenterPoint:function(){var o=new f.Point(this.left,this.top);return this.translateToCenterPoint(o,this.originX,this.originY)},getPointByOrigin:function(o,e){var r=this.getCenterPoint();return this.translateToOriginPoint(r,o,e)},toLocalPoint:function(o,e,r){var t=this.getCenterPoint(),n,a;return typeof e<"u"&&typeof r<"u"?n=this.translateToGivenOrigin(t,"center","center",e,r):n=new f.Point(this.left,this.top),a=new f.Point(o.x,o.y),this.angle&&(a=f.util.rotatePoint(a,t,-c(this.angle))),a.subtractEquals(n)},setPositionByOrigin:function(o,e,r){var t=this.translateToCenterPoint(o,e,r),n=this.translateToOriginPoint(t,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(o){var e=c(this.angle),r=this.getScaledWidth(),t=f.util.cos(e)*r,n=f.util.sin(e)*r,a,i;
39typeof this.originX=="string"?a=s[this.originX]:a=this.originX-.5,typeof o=="string"?i=s[o]:i=o-.5,this.left+=t*(i-a),this.top+=n*(i-a),this.setCoords(),this.originX=o},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var o=this.getCenterPoint();this.originX="center",this.originY="center",this.left=o.x,this.top=o.y},_resetOrigin:function(){var o=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=o.x,this.top=o.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})}(),function(){function c(r){return[new f.Point(r.tl.x,r.tl.y),new f.Point(r.tr.x,r.tr.y),new f.Point(r.br.x,r.br.y),new f.Point(r.bl.x,r.bl.y)]}var s=f.util,l=s.degreesToRadians,o=s.multiplyTransformMatrices,e=s.transformPoint;s.object.extend(f.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(r,t){return t?r?this.calcACoords():this.calcLineCoords():((!this.aCoords||!this.lineCoords)&&this.setCoords(!0),r?this.aCoords:this.lineCoords)},getCoords:function(r,t){return c(this._getCoords(r,t))},intersectsWithRect:function(r,t,n,a){var i=this.getCoords(n,a),h=f.Intersection.intersectPolygonRectangle(i,r,t);return h.status==="Intersection"},intersectsWithObject:function(r,t,n){var a=f.Intersection.intersectPolygonPolygon(this.getCoords(t,n),r.getCoords(t,n));return a.status==="Intersection"||r.isContainedWithinObject(this,t,n)||this.isContainedWithinObject(r,t,n)},isContainedWithinObject:function(r,t,n){for(var a=this.getCoords(t,n),i=t?r.aCoords:r.lineCoords,h=0,u=r._getImageLines(i);h<4;h++)if(!r.containsPoint(a[h],u))return!1;return!0},isContainedWithinRect:function(r,t,n,a){var i=this.getBoundingRect(n,a);return i.left>=r.x&&i.left+i.width<=t.x&&i.top>=r.y&&i.top+i.height<=t.y},containsPoint:function(r,h,n,a){var i=this._getCoords(n,a),h=h||this._getImageLines(i),u=this._findCrossPoints(r,h);return u!==0&&u%2===1},isOnScreen:function(r){if(!this.canvas)return!1;var t=this.canvas.vptCoords.tl,n=this.canvas.vptCoords.br,a=this.getCoords(!0,r);return a.some(function(i){return i.x<=n.x&&i.x>=t.x&&i.y<=n.y&&i.y>=t.y})||this.intersectsWithRect(t,n,!0,r)?!0:this._containsCenterOfCanvas(t,n,r)},_containsCenterOfCanvas:function(r,t,n){var a={x:(r.x+t.x)/2,y:(r.y+t.y)/2};return!!this.containsPoint(a,null,!0,n)},isPartiallyOnScreen:function(r){if(!this.canvas)return!1;var t=this.canvas.vptCoords.tl,n=this.canvas.vptCoords.br;if(this.intersectsWithRect(t,n,!0,r))return!0;var a=this.getCoords(!0,r).every(function(i){return(i.x>=n.x||i.x<=t.x)&&(i.y>=n.y||i.y<=t.y)});return a&&this._containsCenterOfCanvas(t,n,r)},_getImageLines:function(r){var t={topline:{o:r.tl,d:r.tr},rightline:{o:r.tr,d:r.br},bottomline:{o:r.br,d:r.bl},leftline:{o:r.bl,d:r.tl}};return t},_findCrossPoints:function(r,t){var n,a,i,h,u,d=0,g;for(var m in t)if(g=t[m],!(g.o.y<r.y&&g.d.y<r.y)&&!(g.o.y>=r.y&&g.d.y>=r.y)&&(g.o.x===g.d.x&&g.o.x>=r.x?u=g.o.x:(n=0,a=(g.d.y-g.o.y)/(g.d.x-g.o.x),i=r.y-n*r.x,h=g.o.y-a*g.o.x,u=-(i-h)/(n-a)),u>=r.x&&(d+=1),d===2))break;return d},getBoundingRect:function(r,t){var n=this.getCoords(r,t);return s.makeBoundingBoxFromPoints(n)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(r){return Math.abs(r)<this.minScaleLimit?r<0?-this.minScaleLimit:this.minScaleLimit:r===0?1e-4:r},scale:function(r){return this._set("scaleX",r),this._set("scaleY",r),this.setCoords()},scaleToWidth:function(r,t){var n=this.getBoundingRect(t).width/this.getScaledWidth();return this.scale(r/this.width/n)},scaleToHeight:function(r,t){var n=this.getBoundingRect(t).height/this.getScaledHeight();return this.scale(r/this.height/n)},calcLineCoords:function(){var r=this.getViewportTransform(),t=this.padding,n=l(this.angle),a=s.cos(n),i=s.sin(n),h=a*t,u=i*t,d=h+u,g=h-u,m=this.calcACoords(),p={tl:e(m.tl,r),tr:e(m.tr,r),bl:e(m.bl,r),br:e(m.br,r)};return t&&(p.tl.x-=g,p.tl.y-=d,p.tr.x+=d,p.tr.y-=g,p.bl.x-=d,p.bl.y+=g,p.br.x+=g,p.br.y+=d),p},calcOCoords:function(){var r=this._calcRotateMatrix(),t=this._calcTranslateMatrix(),n=this.getViewportTransform(),a=o(n,t),i=o(a,r),i=o(i,[1/n[0],0,0,1/n[3],0,0]),h=this._calculateCurrentDimensions(),u={};return this.forEachControl(function(d,g,m){u[g]=d.positionHandler(h,i,m)}),u},calcACoords:function(){var r=this._calcRotateMatrix(),t=this._calcTranslateMatrix(),n=o(t,r),a=this._getTransformedDimensions(),i=a.x/2,h=a.y/2;return{tl:e({x:-i,y:-h},n),tr:e({x:i,y:-h},n),bl:e({x:-i,y:h},n),br:e({x:i,y:h},n)}}
39,setCoords:function(r){return this.aCoords=this.calcACoords(),this.lineCoords=this.group?this.aCoords:this.calcLineCoords(),r?this:(this.oCoords=this.calcOCoords(),this._setCornerCoords&&this._setCornerCoords(),this)},_calcRotateMatrix:function(){return s.calcRotateMatrix(this)},_calcTranslateMatrix:function(){var r=this.getCenterPoint();return[1,0,0,1,r.x,r.y]},transformMatrixKey:function(r){var t="_",n="";return!r&&this.group&&(n=this.group.transformMatrixKey(r)+t),n+this.top+t+this.left+t+this.scaleX+t+this.scaleY+t+this.skewX+t+this.skewY+t+this.angle+t+this.originX+t+this.originY+t+this.width+t+this.height+t+this.strokeWidth+this.flipX+this.flipY},calcTransformMatrix:function(r){var t=this.calcOwnMatrix();if(r||!this.group)return t;var n=this.transformMatrixKey(r),a=this.matrixCache||(this.matrixCache={});return a.key===n?a.value:(this.group&&(t=o(this.group.calcTransformMatrix(!1),t)),a.key=n,a.value=t,t)},calcOwnMatrix:function(){var r=this.transformMatrixKey(!0),t=this.ownMatrixCache||(this.ownMatrixCache={});if(t.key===r)return t.value;var n=this._calcTranslateMatrix(),a={angle:this.angle,translateX:n[4],translateY:n[5],scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY};return t.key=r,t.value=s.composeMatrix(a),t.value},_getNonTransformedDimensions:function(){var r=this.strokeWidth,t=this.width+r,n=this.height+r;return{x:t,y:n}},_getTransformedDimensions:function(r,t){typeof r>"u"&&(r=this.skewX),typeof t>"u"&&(t=this.skewY);var n,a,i,h=r===0&&t===0;if(this.strokeUniform?(a=this.width,i=this.height):(n=this._getNonTransformedDimensions(),a=n.x,i=n.y),h)return this._finalizeDimensions(a*this.scaleX,i*this.scaleY);var u=s.sizeAfterTransform(a,i,{scaleX:this.scaleX,scaleY:this.scaleY,skewX:r,skewY:t});return this._finalizeDimensions(u.x,u.y)},_finalizeDimensions:function(r,t){return this.strokeUniform?{x:r+this.strokeWidth,y:t+this.strokeWidth}:{x:r,y:t}},_calculateCurrentDimensions:function(){var r=this.getViewportTransform(),t=this._getTransformedDimensions(),n=e(t,r,!0);return n.scalarAdd(2*this.padding)}})}(),f.util.object.extend(f.Object.prototype,{sendToBack:function(){return this.group?f.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas&&this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?f.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas&&this.canvas.bringToFront(this),this},sendBackwards:function(c){return this.group?f.StaticCanvas.prototype.sendBackwards.call(this.group,this,c):this.canvas&&this.canvas.sendBackwards(this,c),this},bringForward:function(c){return this.group?f.StaticCanvas.prototype.bringForward.call(this.group,this,c):this.canvas&&this.canvas.bringForward(this,c),this},moveTo:function(c){return this.group&&this.group.type!=="activeSelection"?f.StaticCanvas.prototype.moveTo.call(this.group,this,c):this.canvas&&this.canvas.moveTo(this,c),this}}),function(){function c(l,o){if(o){if(o.toLive)return l+": url(#SVGID_"+o.id+"); ";var e=new f.Color(o),r=l+": "+e.toRgb()+"; ",t=e.getAlpha();return t!==1&&(r+=l+"-opacity: "+t.toString()+"; "),r}else return l+": none; "}var s=f.util.toFixed;f.util.object.extend(f.Object.prototype,{getSvgStyles:function(l){var o=this.fillRule?this.fillRule:"nonzero",e=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"none",t=this.strokeDashOffset?this.strokeDashOffset:"0",n=this.strokeLineCap?this.strokeLineCap:"butt",a=this.strokeLineJoin?this.strokeLineJoin:"miter",i=this.strokeMiterLimit?this.strokeMiterLimit:"4",h=typeof this.opacity<"u"?this.opacity:"1",u=this.visible?"":" visibility: hidden;",d=l?"":this.getSvgFilter(),g=c("fill",this.fill),m=c("stroke",this.stroke);return[m,"stroke-width: ",e,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",n,"; ","stroke-dashoffset: ",t,"; ","stroke-linejoin: ",a,"; ","stroke-miterlimit: ",i,"; ",g,"fill-rule: ",o,"; ","opacity: ",h,";",d,u].join("")},getSvgSpanStyles:function(l,o){var e="; ",t=l.fontFamily?"font-family: "+(l.fontFamily.indexOf("'")===-1&&l.fontFamily.indexOf('"')===-1?"'"+l.fontFamily+"'":l.fontFamily)+e:"",r=l.strokeWidth?"stroke-width: "+l.strokeWidth+e:"",t=t,n=l.fontSize?"font-size: "+l.fontSize+"px"+e:"",a=l.fontStyle?"font-style: "+l.fontStyle+e:"",i=l.fontWeight?"font-weight: "+l.fontWeight+e:"",h=l.fill?c("fill",l.fill):"",u=l.stroke?c("stroke",l.stroke):"",d=this.getSvgTextDecoration(l),g=l.deltaY?"baseline-shift: "+-l.deltaY+"; ":"";return d&&(d="text-decoration: "+d+e),[u,r,t,n,a,i,d,h,g,o?"white-space: pre; ":""].join("")},getSvgTextDecoration:function(l){return["overline","underline","line-through"].filter(function(o){return l[o.replace("-","")]}).join(" ")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""}
39,getSvgCommons:function(){return[this.id?'id="'+this.id+'" ':"",this.clipPath?'clip-path="url(#'+this.clipPath.clipPathId+')" ':""].join("")},getSvgTransform:function(l,o){var e=l?this.calcTransformMatrix():this.calcOwnMatrix(),r='transform="'+f.util.matrixToSVG(e);return r+(o||"")+'" '},_setSVGBg:function(l){if(this.backgroundColor){var o=f.Object.NUM_FRACTION_DIGITS;l.push("		<rect ",this._getFillAttributes(this.backgroundColor),' x="',s(-this.width/2,o),'" y="',s(-this.height/2,o),'" width="',s(this.width,o),'" height="',s(this.height,o),`"></rect>
40`)}},toSVG:function(l){return this._createBaseSVGMarkup(this._toSVG(l),{reviver:l})},toClipPathSVG:function(l){return"	"+this._createBaseClipPathSVGMarkup(this._toSVG(l),{reviver:l})},_createBaseClipPathSVGMarkup:function(l,o){o=o||{};var e=o.reviver,r=o.additionalTransform||"",t=[this.getSvgTransform(!0,r),this.getSvgCommons()].join(""),n=l.indexOf("COMMON_PARTS");return l[n]=t,e?e(l.join("")):l.join("")},_createBaseSVGMarkup:function(l,o){o=o||{};var e=o.noStyle,r=o.reviver,t=e?"":'style="'+this.getSvgStyles()+'" ',n=o.withShadow?'style="'+this.getSvgFilter()+'" ':"",a=this.clipPath,i=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",h=a&&a.absolutePositioned,u=this.stroke,d=this.fill,g=this.shadow,m,p=[],C,T=l.indexOf("COMMON_PARTS"),j=o.additionalTransform;return a&&(a.clipPathId="CLIPPATH_"+f.Object.__uid++,C='<clipPath id="'+a.clipPathId+`" >
41`+a.toClipPathSVG(r)+`</clipPath>
42`),h&&p.push("<g ",n,this.getSvgCommons(),` >
43`),p.push("<g ",this.getSvgTransform(!1),h?"":n+this.getSvgCommons(),` >
44`),m=[t,i,e?"":this.addPaintOrder()," ",j?'transform="'+j+'" ':""].join(""),l[T]=m,d&&d.toLive&&p.push(d.toSVG(this)),u&&u.toLive&&p.push(u.toSVG(this)),g&&p.push(g.toSVG(this)),a&&p.push(C),p.push(l.join("")),p.push(`</g>
45`),h&&p.push(`</g>
46`),r?r(p.join("")):p.join("")},addPaintOrder:function(){return this.paintFirst!=="fill"?' paint-order="'+this.paintFirst+'" ':""}})}(),function(){var c=f.util.object.extend,s="stateProperties";function l(e,r,t){var n={},a=!0;t.forEach(function(i){n[i]=e[i]}),c(e[r],n,a)}function o(e,r,t){if(e===r)return!0;if(Array.isArray(e)){if(!Array.isArray(r)||e.length!==r.length)return!1;for(var n=0,a=e.length;n<a;n++)if(!o(e[n],r[n]))return!1;return!0}else if(e&&typeof e=="object"){var i=Object.keys(e),h;if(!r||typeof r!="object"||!t&&i.length!==Object.keys(r).length)return!1;for(var n=0,a=i.length;n<a;n++)if(h=i[n],!(h==="canvas"||h==="group")&&!o(e[h],r[h]))return!1;return!0}}f.util.object.extend(f.Object.prototype,{hasStateChanged:function(e){e=e||s;var r="_"+e;return Object.keys(this[r]).length<this[e].length?!0:!o(this[r],this,!0)},saveState:function(e){var r=e&&e.propertySet||s,t="_"+r;return this[t]?(l(this,t,this[r]),e&&e.stateProperties&&l(this,t,e.stateProperties),this):this.setupState(e)},setupState:function(e){e=e||{};var r=e.propertySet||s;return e.propertySet=r,this["_"+r]={},this.saveState(e),this}})}(),function(){var c=f.util.degreesToRadians;f.util.object.extend(f.Object.prototype,{_findTargetCorner:function(s,l){if(!this.hasControls||this.group||!this.canvas||this.canvas._activeObject!==this)return!1;var o=s.x,e=s.y,r,t,n=Object.keys(this.oCoords),a=n.length-1,i;for(this.__corner=0;a>=0;a--)if(i=n[a],!!this.isControlVisible(i)&&(t=this._getImageLines(l?this.oCoords[i].touchCorner:this.oCoords[i].corner),r=this._findCrossPoints({x:o,y:e},t),r!==0&&r%2===1))return this.__corner=i,i;return!1},forEachControl:function(s){for(var l in this.controls)s(this.controls[l],l,this)},_setCornerCoords:function(){var s=this.oCoords;for(var l in s){var o=this.controls[l];s[l].corner=o.calcCornerCoords(this.angle,this.cornerSize,s[l].x,s[l].y,!1),s[l].touchCorner=o.calcCornerCoords(this.angle,this.touchCornerSize,s[l].x,s[l].y,!0)}},drawSelectionBackground:function(s){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;s.save();var l=this.getCenterPoint(),o=this._calculateCurrentDimensions(),e=this.canvas.viewportTransform;return s.translate(l.x,l.y),s.scale(1/e[0],1/e[3]),s.rotate(c(this.angle)),s.fillStyle=this.selectionBackgroun
46dColor,s.fillRect(-o.x/2,-o.y/2,o.x,o.y),s.restore(),this},drawBorders:function(s,l){l=l||{};var o=this._calculateCurrentDimensions(),e=this.borderScaleFactor,r=o.x+e,t=o.y+e,n=typeof l.hasControls<"u"?l.hasControls:this.hasControls,a=!1;return s.save(),s.strokeStyle=l.borderColor||this.borderColor,this._setLineDash(s,l.borderDashArray||this.borderDashArray),s.strokeRect(-r/2,-t/2,r,t),n&&(s.beginPath(),this.forEachControl(function(i,h,u){i.withConnection&&i.getVisibility(u,h)&&(a=!0,s.moveTo(i.x*r,i.y*t),s.lineTo(i.x*r+i.offsetX,i.y*t+i.offsetY))}),a&&s.stroke()),s.restore(),this},drawBordersInGroup:function(s,l,o){o=o||{};var e=f.util.sizeAfterTransform(this.width,this.height,l),r=this.strokeWidth,t=this.strokeUniform,n=this.borderScaleFactor,a=e.x+r*(t?this.canvas.getZoom():l.scaleX)+n,i=e.y+r*(t?this.canvas.getZoom():l.scaleY)+n;return s.save(),this._setLineDash(s,o.borderDashArray||this.borderDashArray),s.strokeStyle=o.borderColor||this.borderColor,s.strokeRect(-a/2,-i/2,a,i),s.restore(),this},drawControls:function(s,l){l=l||{},s.save();var o=1,e,r;return this.canvas&&(o=this.canvas.getRetinaScaling()),s.setTransform(o,0,0,o,0,0),s.strokeStyle=s.fillStyle=l.cornerColor||this.cornerColor,this.transparentCorners||(s.strokeStyle=l.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(s,l.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(e=this.group.calcTransformMatrix()),this.forEachControl(function(t,n,a){r=a.oCoords[n],t.getVisibility(a,n)&&(e&&(r=f.util.transformPoint(r,e)),t.render(s,r.x,r.y,l,a))}),s.restore(),this},isControlVisible:function(s){return this.controls[s]&&this.controls[s].getVisibility(this,s)},setControlVisible:function(s,l){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[s]=l,this},setControlsVisibility:function(s){s||(s={});for(var l in s)this.setControlVisible(l,s[l]);return this},onDeselect:function(){},onSelect:function(){}})}(),f.util.object.extend(f.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(c,s){s=s||{};var l=function(){},o=s.onComplete||l,e=s.onChange||l,r=this;return f.util.animate({target:this,startValue:c.left,endValue:this.getCenterPoint().x,duration:this.FX_DURATION,onChange:function(t){c.set("left",t),r.requestRenderAll(),e()},onComplete:function(){c.setCoords(),o()}})},fxCenterObjectV:function(c,s){s=s||{};var l=function(){},o=s.onComplete||l,e=s.onChange||l,r=this;return f.util.animate({target:this,startValue:c.top,endValue:this.getCenterPoint().y,duration:this.FX_DURATION,onChange:function(t){c.set("top",t),r.requestRenderAll(),e()},onComplete:function(){c.setCoords(),o()}})},fxRemove:function(c,s){s=s||{};var l=function(){},o=s.onComplete||l,e=s.onChange||l,r=this;return f.util.animate({target:this,startValue:c.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(t){c.set("opacity",t),r.requestRenderAll(),e()},onComplete:function(){r.remove(c),o()}})}}),f.util.object.extend(f.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var c=[],s,l,o=[];for(s in arguments[0])c.push(s);for(var e=0,r=c.length;e<r;e++)s=c[e],l=e!==r-1,o.push(this._animate(s,arguments[0][s],arguments[1],l));return o}else return this._animate.apply(this,arguments)},_animate:function(c,s,l,o){var e=this,r;s=s.toString(),l?l=f.util.object.clone(l):l={},~c.indexOf(".")&&(r=c.split("."));var t=e.colorProperties.indexOf(c)>-1||r&&e.colorProperties.indexOf(r[1])>-1,n=r?this.get(r[0])[r[1]]:this.get(c);"from"in l||(l.from=n),t||(~s.indexOf("=")?s=n+parseFloat(s.replace("=","")):s=parseFloat(s));var a={target:this,startValue:l.from,endValue:s,byValue:l.by,easing:l.easing,duration:l.duration,abort:l.abort&&function(i,h,u){return l.abort.call(e,i,h,u)},onChange:function(i,h,u){r?e[r[0]][r[1]]=i:e.set(c,i),!o&&l.onChange&&l.onChange(i,h,u)},onComplete:function(i,h,u){o||(e.setCoords(),l.onComplete&&l.onComplete(i,h,u))}};return t?f.util.animateColor(a.startValue,a.endValue,a.duration,a):f.util.animate(a)}}),function(c){var s=c.fabric||(c.fabric={}),l=s.util.object.extend,o=s.util.object.clone,e={x1:1,x2:1,y1:1,y2:1};if(s.Line){s.warn("fabric.Line is already defined");return}s.Line=s.util.createClass(s.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:s.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(t,n){t||(t=[0,0,0,0]),this.callSuper("initialize",n),this.set("x1",t[0]),this.set("y1",t[1]),this.set("x2",t[2]),this.set("y2",t[3]),this._setWi
46dthHeight(n)},_setWidthHeight:function(t){t||(t={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in t?t.left:this._getLeftToOriginX(),this.top="top"in t?t.top:this._getTopToOriginY()},_set:function(t,n){return this.callSuper("_set",t,n),typeof e[t]<"u"&&this._setWidthHeight(),this},_getLeftToOriginX:r({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:r({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(t){t.beginPath();var n=this.calcLinePoints();t.moveTo(n.x1,n.y1),t.lineTo(n.x2,n.y2),t.lineWidth=this.strokeWidth;var a=t.strokeStyle;t.strokeStyle=this.stroke||t.fillStyle,this.stroke&&this._renderStroke(t),t.strokeStyle=a},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(t){return l(this.callSuper("toObject",t),this.calcLinePoints())},_getNonTransformedDimensions:function(){var t=this.callSuper("_getNonTransformedDimensions");return this.strokeLineCap==="butt"&&(this.width===0&&(t.y-=this.strokeWidth),this.height===0&&(t.x-=this.strokeWidth)),t},calcLinePoints:function(){var t=this.x1<=this.x2?-1:1,n=this.y1<=this.y2?-1:1,a=t*this.width*.5,i=n*this.height*.5,h=t*this.width*-.5,u=n*this.height*-.5;return{x1:a,x2:h,y1:i,y2:u}}
vendor: 5,986 bytes, lines 46-51
46,_toSVG:function(){var t=this.calcLinePoints();return["<line ","COMMON_PARTS",'x1="',t.x1,'" y1="',t.y1,'" x2="',t.x2,'" y2="',t.y2,`" />
47`]}}),s.Line.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),s.Line.fromElement=function(t,n,a){a=a||{};var i=s.parseAttributes(t,s.Line.ATTRIBUTE_NAMES),h=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];n(new s.Line(h,l(i,a)))},s.Line.fromObject=function(t,n){function a(h){delete h.points,n&&n(h)}var i=o(t,!0);i.points=[t.x1,t.y1,t.x2,t.y2],s.Object._fromObject("Line",i,a,"points")};function r(t,n){var a=t.origin,i=t.axis1,h=t.axis2,u=t.dimension,d=n.nearest,g=n.center,m=n.farthest;return function(){switch(this.get(a)){case d:return Math.min(this.get(i),this.get(h));case g:return Math.min(this.get(i),this.get(h))+.5*this.get(u);case m:return Math.max(this.get(i),this.get(h))}}}}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.util.degreesToRadians;if(s.Circle){s.warn("fabric.Circle is already defined.");return}s.Circle=s.util.createClass(s.Object,{type:"circle",radius:0,startAngle:0,endAngle:360,cacheProperties:s.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(e,r){return this.callSuper("_set",e,r),e==="radius"&&this.setRadius(r),this},toObject:function(e){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(e))},_toSVG:function(){var e,r=0,t=0,n=(this.endAngle-this.startAngle)%360;if(n===0)e=["<circle ","COMMON_PARTS",'cx="'+r+'" cy="'+t+'" ','r="',this.radius,`" />
48`];else{var a=l(this.startAngle),i=l(this.endAngle),h=this.radius,u=s.util.cos(a)*h,d=s.util.sin(a)*h,g=s.util.cos(i)*h,m=s.util.sin(i)*h,p=n>180?"1":"0";e=['<path d="M '+u+" "+d," A "+h+" "+h," 0 ",+p+" 1"," "+g+" "+m,'" ',"COMMON_PARTS",` />
49`]}return e},_render:function(e){e.beginPath(),e.arc(0,0,this.radius,l(this.startAngle),l(this.endAngle),!1),this._renderPaintInOrder(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){return this.radius=e,this.set("width",e*2).set("height",e*2)}}),s.Circle.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),s.Circle.fromElement=function(e,r){var t=s.parseAttributes(e,s.Circle.ATTRIBUTE_NAMES);if(!o(t))throw new Error("value of `r` attribute is required and can not be negative");t.left=(t.left||0)-t.radius,t.top=(t.top||0)-t.radius,r(new s.Circle(t))};function o(e){return"radius"in e&&e.radius>=0}s.Circle.fromObject=function(e,r){s.Object._fromObject("Circle",e,r)}}(R),function(c){var s=c.fabric||(c.fabric={});if(s.Triangle){s.warn("fabric.Triangle is already defined");return}s.Triangle=s.util.createClass(s.Object,{type:"triangle",width:100,height:100,_render:function(l){var o=this.width/2,e=this.height/2;l.beginPath(),l.moveTo(-o,e),l.lineTo(0,-e),l.lineTo(o,e),l.closePath(),this._renderPaintInOrder(l)},_toSVG:function(){var l=this.width/2,o=this.height/2,e=[-l+" "+o,"0 "+-o,l+" "+o].join(",");return["<polygon ","COMMON_PARTS",'points="',e,'" />']}}),s.Triangle.fromObject=function(l,o){return s.Object._fromObject("Triangle",l,o)}}(R),function(c){var s=c.fabric||(c.fabric={}),l=Math.PI*2;if(s.Ellipse){s.warn("fabric.Ellipse is already defined.");return}s.Ellipse=s.util.createClass(s.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:s.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(o){this.callSuper("initialize",o),this.set("rx",o&&o.rx||0),this.set("ry",o&&o.ry||0)},_set:function(o,e){switch(this.callSuper("_set",o,e),o){case"rx":this.rx=e,this.set("width",e*2);break;case"ry":this.ry=e,this.set("height",e*2);break}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(o){return this.callSuper("toObject",["rx","ry"].concat(o))},_toSVG:function(){return["<ellipse ","COMMON_PARTS",'cx="0" cy="0" ','rx="',this.rx,'" ry="',this.ry,`" />
50`]},_render:function(o){o.beginPath(),o.save(),o.transform(1,0,0,this.ry/this.rx,0,0),o.arc(0,0,this.rx,0,l,!1),o.restore(),this._renderPaintInOrder(o)}}),s.Ellipse.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),s.Ellipse.fromElement=function(o,e){var r=s.parseAttributes(o,s.Ellipse.ATTRIBUTE_NAMES);r.left=(r.left||0)-r.rx,r.top=(r.top||0)-r.ry,e(new s.Ellipse(r))},s.Ellipse.fromObject=function(o,e){s.Object._fromObject("Ellipse",o,e)}}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.util.object.extend;if(s.Rect){s.warn("fabric.Rect is already defined");return}s.Rect=s.util.createClass(s.Object,{stateProperties:s.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:s.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(o){this.callSuper("initialize",o),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(o){var e=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,t=this.width,n=this.height,a=-this.width/2,i=-this.height/2,h=e!==0||r!==0,u=1-.5522847498;o.beginPath(),o.moveTo(a+e,i),o.lineTo(a+t-e,i),h&&o.bezierCurveTo(a+t-u*e,i,a+t,i+u*r,a+t,i+r),o.lineTo(a+t,i+n-r),h&&o.bezierCurveTo(a+t,i+n-u*r,a+t-u*e,i+n,a+t-e,i+n),o.lineTo(a+e,i+n),h&&o.bezierCurveTo(a+u*e,i+n,a,i+n-u*r,a,i+n-r),o.lineTo(a,i+r),h&&o.bezierCurveTo(a,i+u*r,a+u*e,i,a+e,i),o.closePath(),this._renderPaintInOrder(o)},toObject:function(o){return this.callSuper("toObject",["rx","ry"].concat(o))},_toSVG:function(){var o=-this.width/2,e=-this.height/2;return["<rect ","COMMON_PARTS",'x="',o,'" y="',e,'" rx="',this.rx,'" ry="',this.ry,'" width="',this.width,'" height="',this.height,`" />
51`]}}),s.Rect.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),s.Rect.fromElement=function(o,e,r){if(!o)return e(null);r=r||{};var t=s.parseAttributes(o,s.Rect.ATTRIBUTE_NAMES);t.left=t.left||0,t.top=t.top||0,t.height=t.height||0,t.width=t.width||0;
51var n=new s.Rect(l(r?s.util.object.clone(r):{},t));n.visible=n.visible&&n.width>0&&n.height>0,e(n)},s.Rect.fromObject=function(o,e){return s.Object._fromObject("Rect",o,e)}}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.util.object.extend,o=s.util.array.min,e=s.util.array.max,r=s.util.toFixed,t=s.util.projectStrokeOnPoints;if(s.Polyline){s.warn("fabric.Polyline is already defined");return}s.Polyline=s.util.createClass(s.Object,{type:"polyline",points:null,exactBoundingBox:!1,cacheProperties:s.Object.prototype.cacheProperties.concat("points"),initialize:function(n,a){a=a||{},this.points=n||[],this.callSuper("initialize",a),this._setPositionDimensions(a)},_projectStrokeOnPoints:function(){return t(this.points,this,!0)},_setPositionDimensions:function(n){var a=this._calcDimensions(n),i,h=this.exactBoundingBox?this.strokeWidth:0;this.width=a.width-h,this.height=a.height-h,n.fromSVG||(i=this.translateToGivenOrigin({x:a.left-this.strokeWidth/2+h/2,y:a.top-this.strokeWidth/2+h/2},"left","top",this.originX,this.originY)),typeof n.left>"u"&&(this.left=n.fromSVG?a.left:i.x),typeof n.top>"u"&&(this.top=n.fromSVG?a.top:i.y),this.pathOffset={x:a.left+this.width/2+h/2,y:a.top+this.height/2+h/2}},_calcDimensions:function(){var n=this.exactBoundingBox?this._projectStrokeOnPoints():this.points,a=o(n,"x")||0,i=o(n,"y")||0,h=e(n,"x")||0,u=e(n,"y")||0,d=h-a,g=u-i;return{left:a,top:i,width:d,height:g}},toObject:function(n){return l(this.callSuper("toObject",n),{points:this.points.concat()})},_toSVG:function(){for(var n=[],a=this.pathOffset.x,i=this.pathOffset.y,h=s.Object.NUM_FRACTION_DIGITS,u=0,d=this.points.length;u<d;u++)n.push(r(this.points[u].x-a,h),",",r(this.points[u].y-i,h)," ");
vendor: 17,889 bytes, lines 51-60
51return["<"+this.type+" ","COMMON_PARTS",'points="',n.join(""),`" />
52`]},commonRender:function(n){var a,i=this.points.length,h=this.pathOffset.x,u=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;n.beginPath(),n.moveTo(this.points[0].x-h,this.points[0].y-u);for(var d=0;d<i;d++)a=this.points[d],n.lineTo(a.x-h,a.y-u);return!0},_render:function(n){this.commonRender(n)&&this._renderPaintInOrder(n)},complexity:function(){return this.get("points").length}}),s.Polyline.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat(),s.Polyline.fromElementGenerator=function(n){return function(a,i,h){if(!a)return i(null);h||(h={});var u=s.parsePointsAttribute(a.getAttribute("points")),d=s.parseAttributes(a,s[n].ATTRIBUTE_NAMES);d.fromSVG=!0,i(new s[n](u,l(d,h)))}},s.Polyline.fromElement=s.Polyline.fromElementGenerator("Polyline"),s.Polyline.fromObject=function(n,a){return s.Object._fromObject("Polyline",n,a,"points")}}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.util.projectStrokeOnPoints;if(s.Polygon){s.warn("fabric.Polygon is already defined");return}s.Polygon=s.util.createClass(s.Polyline,{type:"polygon",_projectStrokeOnPoints:function(){return l(this.points,this)},_render:function(o){this.commonRender(o)&&(o.closePath(),this._renderPaintInOrder(o))}}),s.Polygon.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat(),s.Polygon.fromElement=s.Polyline.fromElementGenerator("Polygon"),s.Polygon.fromObject=function(o,e){s.Object._fromObject("Polygon",o,e,"points")}}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.util.array.min,o=s.util.array.max,e=s.util.object.extend,r=s.util.object.clone,t=s.util.toFixed;if(s.Path){s.warn("fabric.Path is already defined");return}s.Path=s.util.createClass(s.Object,{type:"path",path:null,cacheProperties:s.Object.prototype.cacheProperties.concat("path","fillRule"),stateProperties:s.Object.prototype.stateProperties.concat("path"),initialize:function(n,a){a=r(a||{}),delete a.path,this.callSuper("initialize",a),this._setPath(n||[],a)},_setPath:function(n,a){this.path=s.util.makePathSimpler(Array.isArray(n)?n:s.util.parsePath(n)),s.Polyline.prototype._setPositionDimensions.call(this,a||{})},_renderPathCommands:function(n){var a,i=0,h=0,u=0,d=0,g=0,m=0,p=-this.pathOffset.x,C=-this.pathOffset.y;n.beginPath();for(var T=0,j=this.path.length;T<j;++T)switch(a=this.path[T],a[0]){case"L":u=a[1],d=a[2],n.lineTo(u+p,d+C);break;case"M":u=a[1],d=a[2],i=u,h=d,n.moveTo(u+p,d+C);break;case"C":u=a[5],d=a[6],g=a[3],m=a[4],n.bezierCurveTo(a[1]+p,a[2]+C,g+p,m+C,u+p,d+C);break;case"Q":n.quadraticCurveTo(a[1]+p,a[2]+C,a[3]+p,a[4]+C),u=a[3],d=a[4],g=a[1],m=a[2];break;case"z":case"Z":u=i,d=h,n.closePath();break}},_render:function(n){this._renderPathCommands(n),this._renderPaintInOrder(n)},toString:function(){return"#<fabric.Path ("+this.complexity()+'): { "top": '+this.top+', "left": '+this.left+" }>"},toObject:function(n){return e(this.callSuper("toObject",n),{path:this.path.map(function(a){return a.slice()})})},toDatalessObject:function(n){var a=this.toObject(["sourcePath"].concat(n));return a.sourcePath&&delete a.path,a},_toSVG:function(){var n=s.util.joinPath(this.path);return["<path ","COMMON_PARTS",'d="',n,'" stroke-linecap="round" ',`/>
53`]},_getOffsetTransform:function(){var n=s.Object.NUM_FRACTION_DIGITS;return" translate("+t(-this.pathOffset.x,n)+", "+t(-this.pathOffset.y,n)+")"},toClipPathSVG:function(n){var a=this._getOffsetTransform();return"	"+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:n,additionalTransform:a})},toSVG:function(n){var a=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:n,additionalTransform:a})},complexity:function(){return this.path.length},_calcDimensions:function(){for(var n=[],a=[],i,h=0,u=0,d=0,g=0,m,p=0,C=this.path.length;p<C;++p){switch(i=this.path[p],i[0]){case"L":d=i[1],g=i[2],m=[];break;case"M":d=i[1],g=i[2],h=d,u=g,m=[];break;case"C":m=s.util.getBoundsOfCurve(d,g,i[1],i[2],i[3],i[4],i[5],i[6]),d=i[5],g=i[6];break;case"Q":m=s.util.getBoundsOfCurve(d,g,i[1],i[2],i[1],i[2],i[3],i[4]),d=i[3],g=i[4];break;case"z":case"Z":d=h,g=u;break}m.forEach(function(Z){n.push(Z.x),a.push(Z.y)}),n.push(d),a.push(g)}var T=l(n)||0,j=l(a)||0,W=o(n)||0,V=o(a)||0,et=W-T,nt=V-j;return{left:T,top:j,width:et,height:nt}}}),s.Path.fromObject=function(n,a){if(typeof n.sourcePath=="string"){var i=n.sourcePath;s.loadSVGFromURL(i,function(h){var u=h[0];u.setOptions(n),n.clipPath?s.util.enlivenObjects([n.clipPath],function(d){u.clipPath=d[0],a&&a(u)}):a&&a(u)})}else s.Object._fromObject("Path",n,a,"path")},s.Path.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat(["d"]),s.Path.fromElement=function(n,a,i){var h=s.parseAttributes(n,s.Path.ATTRIBUTE_NAMES);h.fromSVG=!0,a(new s.Path(h.d,e(h,i)))}}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.util.array.min,o=s.util.array.max;s.Group||(s.Group=s.util.createClass(s.Object,s.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,cacheProperties:[],useSetOnGroup:!1,initialize:function(e,r,t){r=r||{},this._objects=[],t&&this.callSuper("initialize",r),this._objects=e||[];for(var n=this._objects.length;n--;)this._objects[n].group=this;if(t)this._updateObjectsACoords();else{var a=r&&r.centerPoint;r.originX!==void 0&&(this.originX=r.originX),r.originY!==void 0&&(this.originY=r.originY),a||this._calcBounds(),this._updateObjectsCoords(a),delete r.centerPoint,this.callSuper("initialize",r)}this.setCoords()},_updateObjectsACoords:function(){for(var e=!0,r=this._objects.length;r--;)this._objects[r].setCoords(e)},_updateObjectsCoords:function(r){for(var r=r||this.getCenterPoint(),t=this._objects.length;t--;)this._updateObjectCoords(this._objects[t],r)},_updateObjectCoords:function(e,r){var t=e.left,n=e.top,a=!0;e.set({left:t-r.x,top:n-r.y}),e.group=this,e.setCoords(a)},toString:function(){return"#<fabric.Group: ("+this.complexity()+")>"},addWithUpdate:function(e){var r=!!this.group;return this._restoreObjectsState(),s.util.resetObjectTransform(this),e&&(r&&s.util.removeTransformFromObject(e,this.group.calcTransformMatrix()),this._objects.push(e),e.group=this,e._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,r?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),s.util.resetObjectTransform(this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(e){this.dirty=!0,e.group=this,e._set("canvas",this.canvas)},_onObjectRemoved:function(e){this.dirty=!0,delete e.group},_set:function(e,r){var t=this._objects.length;if(this.useSetOnGroup)for(;t--;)this._objects[t].setOnGroup(e,r);if(e==="canvas")for(;t--;)this._objects[t]._set(e,r);s.Object.prototype._set.call(this,e,r)},toObject:function(e){var r=this.includeDefaultValues,t=this._objects.filter(function(a){return!a.excludeFromExport}).map(function(a){var i=a.includeDefaultValues;a.includeDefaultValues=r;var h=a.toObject(e);return a.includeDefaultValues=i,h}),n=s.Object.prototype.toObject.call(this,e);return n.objects=t,n},toDatalessObject:function(e){var r,t=this.sourcePath;if(t)r=t;else{var n=this.includeDefaultValues;r=this._objects.map(function(i){var h=i.includeDefaultValues;i.includeDefaultValues=n;var u=i.toDatalessObject(e);return i.includeDefaultValues=h,u})}var a=s.Object.prototype.toDatalessObject.call(this,e);return a.objects=r,a},render:function(e){this._transformDone=!0,this.callSuper("render",e),this._transformDone=!1},shouldCache:function(){var e=s.Object.prototype.shouldCache.call(this);if(e){for(var r=0,t=this._objects.length;r<t;r++)if(this._objects[r].willDrawShadow())return this.ownCaching=!1,!1}return e},willDrawShadow:function(){if(s.Object.prototype.willDrawShadow.call(this))return!0;for(var e=0,r=this._objects.length;e<r;e++)if(this._objects[e].willDrawShadow())return!0;return!1},isOnACache:function(){return this.ownCaching||this.group&&this.group.isOnACache()},drawObject:function(e){for(var r=0,t=this._objects.length;r<t;r++)this._objects[r].render(e);this._drawClipPath(e,this.clipPath)},isCacheDirty:function(e){if(this.callSuper("isCacheDirty",e))return!0;if(!this.statefullCache)return!1;for(var r=0,t=this._objects.length;r<t;r++)if(this._objects[r].isCacheDirty(!0)){if(this._cacheCanvas){var n=this.cacheWidth/this.zoomX,a=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-n/2,-a/2,n,a)}return!0}return!1},_restoreObjectsState:function(){var e=this.calcOwnMatrix();return this._objects.forEach(function(r){s.util.addTransformToObject(r,e),delete r.group,r.setCoords()}),this},destroy:function(){return this._objects.forEach(function(e){e.set("dirty",!0)}),this._restoreObjectsState()},dispose:function(){this.callSuper("dispose"),this.forEachObject(function(e){e.dispose&&e.dispose()}),this._objects=[]},toActiveSelection:function(){if(this.canvas){var e=this._objects,r=this.canvas;this._objects=[];var t=this.toObject();delete t.objects;var n=new s.ActiveSelection([]);return n.set(t),n.type="activeSelection",r.remove(this),e.forEach(function(a){a.group=n,a.dirty=!0,r.add(a)}),n.canvas=r,n._objects=e,r._activeObject=n,n.setCoords(),n}},ungroupOnCanvas:function(){return this._restoreObjectsState()},setObjectsCoords:function(){var e=!0;return this.forEachObject(function(r){r.setCoords(e)}),this},_calcBounds:function(e){for(var r=[],t=[],n,a,i,h=["tr","br","bl","tl"],u=0,d=this._objects.length,g,m=h.length;u<d;++u){for(n=this._objects[u],i=n.calcACoords(),g=0;g<m;g++)a=h[g],r.push(i[a].x),t.push(i[a].y);n.aCoords=i}this._getBounds(r,t,e)},_getBounds:function(e,r,t){var n=new s.Point(l(e),l(r)),a=new s.Point(o(e),o(r)),i=n.y||0,h=n.x||0,u=a.x-n.x||0,d=a.y-n.y||0;this.width=u,this.height=d,t||this.setPositionByOrigin({x:h,y:i},"left","top")},_toSVG:function(e){for(var r=["<g ","COMMON_PARTS",` >
54`],t=0,n=this._objects.length;t<n;t++)r.push("		",this._objects[t].toSVG(e));return r.push(`</g>
55`),r},getSvgStyles:function(){var e=typeof this.opacity<"u"&&this.opacity!==1?"opacity: "+this.opacity+";":"",r=this.visible?"":" visibility: hidden;";return[e,this.getSvgFilter(),r].join("")},toClipPathSVG:function(e){for(var r=[],t=0,n=this._objects.length;t<n;t++)r.push("	",this._objects[t].toClipPathSVG(e));return this._createBaseClipPathSVGMarkup(r,{reviver:e})}}),s.Group.fromObject=function(e,r){var t=e.objects,n=s.util.object.clone(e,!0);if(delete n.objects,typeof t=="string"){s.loadSVGFromURL(t,function(a){var i=s.util.groupSVGElements(a,e,t),h=n.clipPath;delete n.clipPath,i.set(n),h?s.util.enlivenObjects([h],function(u){i.clipPath=u[0],r&&r(i)}):r&&r(i)});return}s.util.enlivenObjects(t,function(a){s.util.enlivenObjectEnlivables(e,n,function(){r&&r(new s.Group(a,n,!0))})})})}(R),function(c){var s=c.fabric||(c.fabric={});s.ActiveSelection||(s.ActiveSelection=s.util.createClass(s.Group,{type:"activeSelection",initialize:function(l,o){o=o||{},this._objects=l||[];for(var e=this._objects.length;e--;)this._objects[e].group=this;o.originX&&(this.originX=o.originX),o.originY&&(this.originY=o.originY),this._calcBounds(),this._updateObjectsCoords(),s.Object.prototype.initialize.call(this,o),this.setCoords()},toGroup:function(){var l=this._objects.concat();this._objects=[];var o=s.Object.prototype.toObject.call(this),e=new s.Group([]);if(delete o.type,e.set(o),l.forEach(function(t){t.canvas.remove(t),t.group=e}),e._objects=l,!this.canvas)return e;var r=this.canvas;return r.add(e),r._activeObject=e,e.setCoords(),e},onDeselect:function(){return this.destroy(),!1},toString:function(){return"#<fabric.ActiveSelection: ("+this.complexity()+")>"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(l,o,e){l.save(),l.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e=e||{},typeof e.hasControls>"u"&&(e.hasControls=!1),e.forActiveSelection=!0;for(var r=0,t=this._objects.length;r<t;r++)this._objects[r]._renderControls(l,e);this.callSuper("_renderControls",l,o),l.restore()}}),s.ActiveSelection.fromObject=function(l,o){s.util.enlivenObjects(l.objects,function(e){delete l.objects,o&&o(new s.ActiveSelection(e,l,!0))})})}(R),function(c){var s=f.util.object.extend;if(c.fabric||(c.fabric={}),c.fabric.Image){f.warn("fabric.Image is already defined.");return}f.Image=f.util.createClass(f.Object,{type:"image",strokeWidth:0,srcFromAttribute:!1,_lastScaleX:1,_lastScaleY:1,_filterScalingX:1,_filterScalingY:1,minimumScaleTrigger:.5,stateProperties:f.Object.prototype.stateProperties.concat("cropX","cropY"),cacheProperties:f.Object.prototype.cacheProperties.concat("cropX","cropY"),cacheKey:"",cropX:0,cropY:0,imageSmoothing:!0,initialize:function(l,o){o||(o={}),this.filters=[],this.cacheKey="texture"+f.Object.__uid++,this.callSuper("initialize",o),this._initElement(l,o)},getElement:function(){return this._element||{}},setElement:function(l,o){return this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._element=l,this._originalElement=l,this._initConfig(o),this.filters.length!==0&&this.applyFilters(),this.resizeFilter&&this.applyResizeFilters(),this},removeTexture:function(l){var o=f.filterBackend;o&&o.evictCachesForKey&&o.evictCachesForKey(l)},dispose:function(){this.callSuper("dispose"),this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._cacheContext=void 0,["_originalElement","_element","_filteredEl","_cacheCanvas"].forEach((function(l){f.util.cleanUpJsdomNode(this[l]),this[l]=void 0}).bind(this))},getCrossOrigin:function(){return this._originalElement&&(this._originalElement.crossOrigin||null)},getOriginalSize:function(){var l=this.getElement();return{width:l.naturalWidth||l.width,height:l.naturalHeight||l.height}},_stroke:function(l){if(!(!this.stroke||this.strokeWidth===0)){var o=this.width/2,e=this.height/2;l.beginPath(),l.moveTo(-o,-e),l.lineTo(o,-e),l.lineTo(o,e),l.lineTo(-o,e),l.lineTo(-o,-e),l.closePath()}},toObject:function(l){var o=[];this.filters.forEach(function(r){r&&o.push(r.toObject())});var e=s(this.callSuper("toObject",["cropX","cropY"].concat(l)),{src:this.getSrc(),crossOrigin:this.getCrossOrigin(),filters:o});return this.resizeFilter&&(e.resizeFilter=this.resizeFilter.toObject()),e},hasCrop:function(){return this.cropX||this.cropY||this.width<this._element.width||this.height<this._element.height},_toSVG:function(){var l=[],o=[],e,r=this._element,t=-this.width/2,n=-this.height/2,a="",i="";if(!r)return[];if(this.hasCrop()){var h=f.Object.__uid++;l.push('<clipPath id="imageCrop_'+h+`">
56`,'	<rect x="'+t+'" y="'+n+'" width="'+this.width+'" height="'+this.height+`" />
57`,`</clipPath>
58`),a=' clip-path="url(#imageCrop_'+h+')" '}if(this.imageSmoothing||(i='" image-rendering="optimizeSpeed'),o.push("	<image ","COMMON_PARTS",'xlink:href="',this.getSvgSrc(!0),'" x="',t-this.cropX,'" y="',n-this.cropY,'" width="',r.width||r.naturalWidth,'" height="',r.height||r.height,i,'"',a,`></image>
59`),this.stroke||this.strokeDashArray){var u=this.fill;this.fill=null,e=["	<rect ",'x="',t,'" y="',n,'" width="',this.width,'" height="',this.height,'" style="',this.getSvgStyles(),`"/>
60`],this.fill=u}return this.paintFirst!=="fill"?l=l.concat(e,o):l=l.concat(o,e),l},getSrc:function(l){var o=l?this._element:this._originalElement;return o?o.toDataURL?o.toDataURL():this.srcFromAttribute?o.getAttribute("src"):o.src:this.src||""},setSrc:function(l,o,e){return f.util.loadImage(l,function(r,t){this.setElement(r,e),this._setWidthHeight(),o&&o(this,t)},this,e&&e.crossOrigin),this},toString:function(){return'#<fabric.Image: { src: "'+this.getSrc()+'" }>'},applyResizeFilters:function(){var l=this.resizeFilter,o=this.minimumScaleTrigger,e=this.getTotalObjectScaling(),r=e.scaleX,t=e.scaleY,n=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!l||r>o&&t>o){this._element=n,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=r,this._lastScaleY=t;return}f.filterBackend||(f.filterBackend=f.initFilterBackend());var a=f.util.createCanvasElement(),i=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,h=n.width,u=n.height;a.width=h,a.height=u,this._element=a,this._lastScaleX=l.scaleX=r,this._lastScaleY=l.scaleY=t,f.filterBackend.applyFilters([l],n,h,u,this._element,i),this._filterScalingX=a.width/this._originalElement.width,this._filterScalingY=a.height/this._originalElement.height},applyFilters:function(l){if(l=l||this.filters||[],l=l.filter(function(n){return n&&!n.isNeutralState()}),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),l.length===0)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var o=this._originalElement,e=o.naturalWidth||o.width,r=o.naturalHeight||o.height;if(this._element===this._originalElement){var t=f.util.createCanvasElement();t.width=e,t.height=r,this._element=t,this._filteredEl=t}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,e,r),this._lastScaleX=1,this._lastScaleY=1;return f.filterBackend||(f.filterBackend=f.initFilterBackend()),f.filterBackend.applyFilters(l,this._originalElement,e,r,this._element,this.cacheKey),(this._originalElement.width!==this._element.width||this._originalElement.height!==this._element.height)&&(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(l){f.util.setImageSmoothing(l,this.imageSmoothing),this.isMoving!==!0&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(l),this._renderPaintInOrder(l)},drawCacheOnCanvas:function(l){f.util.setImageSmoothing(l,this.imageSmoothing),f.Object.prototype.drawCacheOnCanvas.call(this,l)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(l){var o=this._element;if(o){var e=this._filterScalingX,r=this._filterScalingY,t=this.width,n=this.height,a=Math.min,i=Math.max,h=i(this.cropX,0),u=i(this.cropY,0),d=o.naturalWi
60dth||o.width,g=o.naturalHeight||o.height,m=h*e,p=u*r,C=a(t*e,d-m),T=a(n*r,g-p),j=-t/2,W=-n/2,V=a(t,d/e-h),et=a(n,g/r-u);o&&l.drawImage(o,m,p,C,T,j,W,V,et)}},_needsResize:function(){var l=this.getTotalObjectScaling();return l.scaleX!==this._lastScaleX||l.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(l,o){this.setElement(f.util.getById(l),o),f.util.addClass(this.getElement(),f.Image.CSS_CANVAS)},_initConfig:function(l){l||(l={}),this.setOptions(l),this._setWidthHeight(l)},_initFilters:function(l,o){l&&l.length?f.util.enlivenObjects(l,function(e){o&&o(e)},"fabric.Image.filters"):o&&o()},_setWidthHeight:function(l){l||(l={});var o=this.getElement();this.width=l.width||o.naturalWidth||o.width||0,this.height=l.height||o.naturalHeight||o.height||0},parsePreserveAspectRatioAttribute:function(){var l=f.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),o=this._element.width,e=this._element.height,r=1,t=1,n=0,a=0,i=0,h=0,u,d=this.width,g=this.height,m={width:d,height:g};return l&&(l.alignX!=="none"||l.alignY!=="none")?(l.meetOrSlice==="meet"&&(r=t=f.util.findScaleToFit(this._element,m),u=(d-o*r)/2,l.alignX==="Min"&&(n=-u),l.alignX==="Max"&&(n=u),u=(g-e*t)/2,l.alignY==="Min"&&(a=-u),l.alignY==="Max"&&(a=u)),l.meetOrSlice==="slice"&&(r=t=f.util.findScaleToCover(this._element,m),u=o-d/r,l.alignX==="Mid"&&(i=u/2),l.alignX==="Max"&&(i=u),u=e-g/t,l.alignY==="Mid"&&(h=u/2),l.alignY==="Max"&&(h=u),o=d/r,e=g/t)):(r=d/o,t=g/e),{width:o,height:e,scaleX:r,scaleY:t,offsetLeft:n,offsetTop:a,cropX:i,cropY:h}}}),f.Image.CSS_CANVAS="canvas-img",f.Image.prototype.getSvgSrc=f.Image.prototype.getSrc,f.Image.fromObject=function(l,o){var e=f.util.object.clone(l);f.util.loadImage(e.src,function(r,t){if(t){o&&o(null,!0);return}f.Image.prototype._initFilters.call(e,e.filters,function(n){e.filters=n||[],f.Image.prototype._initFilters.call(e,[e.resizeFilter],function(a){e.resizeFilter=a[0],f.util.enlivenObjectEnlivables(e,e,function(){var i=new f.Image(r,e);o(i,!1)})})})},null,e.crossOrigin)},f.Image.fromURL=function(l,o,e){f.util.loadImage(l,function(r,t){o&&o(new f.Image(r,e),t)},null,e&&e.crossOrigin)},f.Image.ATTRIBUTE_NAMES=f.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")),f.Image.fromElement=function(l,o,e){var r=f.parseAttributes(l,f.Image.ATTRIBUTE_NAMES);f.Image.fromURL(r["xlink:href"],o,s(e?f.util.object.clone(e):{},r))}}(R),f.util.object.extend(f.Object.prototype,{_getAngleValueForStraighten:function(){var c=this.angle%360;return c>0?Math.round((c-1)/90)*90:Math.round(c/90)*90},straighten:function(){return this.rotate(this._getAngleValueForStraighten())},fxStraighten:function(c){c=c||{};var s=function(){},l=c.onComplete||s,o=c.onChange||s,e=this;return f.util.animate({target:this,startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(r){e.rotate(r),o()},onComplete:function(){e.setCoords(),l()}})}}),f.util.object.extend(f.StaticCanvas.prototype,{straightenObject:function(c){return c.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(c){return c.fxStraighten({onChange:this.requestRenderAllBound})}}),function(){function c(l,o){var e="precision "+o+` float;
61void main(){}`,r=l.createShader(l.FRAGMENT_SHADER);return l.shaderSource(r,e),l.compileShader(r),!!l.getShaderParameter(r,l.COMPILE_STATUS)}f.isWebglSupported=function(l){if(f.isLikelyNode)return!1;l=l||f.WebglFilterBackend.prototype.tileSize;var o=document.createElement("canvas"),e=o.getContext("webgl")||o.getContext("experimental-webgl"),r=!1;if(e){f.maxTextureSize=e.getParameter(e.MAX_TEXTURE_SIZE),r=f.maxTextureSize>=l;for(var t=["highp","mediump","lowp"],n=0;n<3;n++)if(c(e,t[n])){f.webGlPrecision=t[n];break}}return this.isSupported=r,r},f.WebglFilterBackend=s;function s(l){l&&l.tileSize&&(this.tileSize=l.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}s.prototype={tileSize:2048,resources:{},setupGLContext:function(l,o){this.dispose(),this.createWebGLCanvas(l,o),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(l,o)},chooseFastestCopyGLTo2DMethod:function(l,o){var e=typeof window.performance<"u",r;try{new ImageData(1,1),r=!0}catch{r=!1}var t=typeof ArrayBuffer<"u",n=typeof Uint8ClampedArray<"u";if(e&&r&&t&&n){var a=f.util.createCanvasElement(),i=new ArrayBuffer(l*o*4);if(f.forceGLPutImageData){this.imageBuffer=i,this.copyGLTo2D=ft;return}var h={imageBuffer:i,destinationWidth:l,destinationHeight:o,targetCanvas:a},u,d,g;a.width=l,a.height=o,u=window.performance.now(),q.call(h,this.gl,h),d=window.performance.now()-u,u=window.performance.now(),ft.call(h,this.gl,h),g=window.performance.now()-u,d>g?(this.imageBuffer=i,this.copyGLTo2D=ft):this.copyGLTo2D=q}},createWebGLCanvas:function(l,o){var e=f.util.createCanvasElement();e.width=l,e.height=o;var r={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},t=e.getContext("webgl",r);t||(t=e.getContext("experimental-webgl",r)),t&&(t.clearColor(0,0,0,0),this.canvas=e,this.gl=t)},applyFilters:function(l,o,e,r,t,n){var a=this.gl,i;n&&(i=this.getCachedTexture(n,o));var h={originalWidth:o.width||o.originalWidth,originalHeight:o.height||o.originalHeight,sourceW
vendor: 9,775 bytes, lines 61-89
61idth:e,sourceHeight:r,destinationWidth:e,destinationHeight:r,context:a,sourceTexture:this.createTexture(a,e,r,!i&&o),targetTexture:this.createTexture(a,e,r),originalTexture:i||this.createTexture(a,e,r,!i&&o),passes:l.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:t},u=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,u),l.forEach(function(d){d&&d.applyTo(h)}),at(h),this.copyGLTo2D(a,h),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(h.sourceTexture),a.deleteTexture(h.targetTexture),a.deleteFramebuffer(u),t.getContext("2d").setTransform(1,0,0,1,0,0),h},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(l,o,e,r,t){var n=l.createTexture();return l.bindTexture(l.TEXTURE_2D,n),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,t||l.NEAREST),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,t||l.NEAREST),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),r?l.texImage2D(l.TEXTURE_2D,0,l.RGBA,l.RGBA,l.UNSIGNED_BYTE,r):l.texImage2D(l.TEXTURE_2D,0,l.RGBA,o,e,0,l.RGBA,l.UNSIGNED_BYTE,null),n},getCachedTexture:function(l,o){if(this.textureCache[l])return this.textureCache[l];var e=this.createTexture(this.gl,o.width,o.height,o);return this.textureCache[l]=e,e},evictCachesForKey:function(l){this.textureCache[l]&&(this.gl.deleteTexture(this.textureCache[l]),delete this.textureCache[l])},copyGLTo2D:q,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var l=this.gl,o={renderer:"",vendor:""};if(!l)return o;var e=l.getExtension("WEBGL_debug_renderer_info");if(e){var r=l.getParameter(e.UNMASKED_RENDERER_WEBGL),t=l.getParameter(e.UNMASKED_VENDOR_WEBGL);r&&(o.renderer=r.toLowerCase()),t&&(o.vendor=t.toLowerCase())}return this.gpuInfo=o,o}}}();function at(c){var s=c.targetCanvas,l=s.width,o=s.height,e=c.destinationWidth,r=c.destinationHeight;(l!==e||o!==r)&&(s.width=e,s.height=r)}function q(c,s){var l=c.canvas,o=s.targetCanvas,e=o.getContext("2d");e.translate(0,o.height),e.scale(1,-1);var r=l.height-o.height;e.drawImage(l,0,r,o.width,o.height,0,0,o.width,o.height)}function ft(c,s){var l=s.targetCanvas,o=l.getContext("2d"),e=s.destinationWidth,r=s.destinationHeight,t=e*r*4,n=new Uint8Array(this.imageBuffer,0,t),a=new Uint8ClampedArray(this.imageBuffer,0,t);c.readPixels(0,0,e,r,c.RGBA,c.UNSIGNED_BYTE,n);var i=new ImageData(a,e,r);o.putImageData(i,0,0)}(function(){var c=function(){};f.Canvas2dFilterBackend=s;function s(){}s.prototype={evictCachesForKey:c,dispose:c,clearWebGLCaches:c,resources:{},applyFilters:function(l,o,e,r,t){var n=t.getContext("2d");n.drawImage(o,0,0,e,r);var a=n.getImageData(0,0,e,r),i=n.getImageData(0,0,e,r),h={sourceWidth:e,sourceHeight:r,imageData:a,originalEl:o,originalImageData:i,canvasEl:t,ctx:n,filterBackend:this};return l.forEach(function(u){u.applyTo(h)}),(h.imageData.width!==e||h.imageData.height!==r)&&(t.width=h.imageData.width,t.height=h.imageData.height),n.putImageData(h.imageData,0,0),h}}})(),f.Image=f.Image||{},f.Image.filters=f.Image.filters||{},f.Image.filters.BaseFilter=f.util.createClass({type:"BaseFilter",vertexSource:`attribute vec2 aPosition;
62varying vec2 vTexCoord;
63void main() {
64vTexCoord = aPosition;
65gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
66}`,fragmentSource:`precision highp float;
67varying vec2 vTexCoord;
68uniform sampler2D uTexture;
69void main() {
70gl_FragColor = texture2D(uTexture, vTexCoord);
71}`,initialize:function(c){c&&this.setOptions(c)},setOptions:function(c){for(var s in c)this[s]=c[s]},createProgram:function(c,s,l){s=s||this.fragmentSource,l=l||this.vertexSource,f.webGlPrecision!=="highp"&&(s=s.replace(/precision highp float/g,"precision "+f.webGlPrecision+" float"));var o=c.createShader(c.VERTEX_SHADER);if(c.shaderSource(o,l),c.compileShader(o),!c.getShaderParameter(o,c.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+c.getShaderInfoLog(o));var e=c.createShader(c.FRAGMENT_SHADER);if(c.shaderSource(e,s),c.compileShader(e),!c.getShaderParameter(e,c.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+c.getShaderInfoLog(e));var r=c.createProgram();if(c.attachShader(r,o),c.attachShader(r,e),c.linkProgram(r),!c.getProgramParameter(r,c.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+c.getProgramInfoLog(r));var t=this.getAttributeLocations(c,r),n=this.getUniformLocations(c,r)||{};return n.uStepW=c.getUniformLocation(r,"uStepW"),n.uStepH=c.getUniformLocation(r,"uStepH"),{program:r,attributeLocations:t,uniformLocations:n}},getAttributeLocations:function(c,s){return{aPosition:c.getAttribLocation(s,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(c,s,l){var o=s.aPosition,e=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,e),c.enableVertexAttribArray(o),c.vertexAttribPointer(o,2,c.FLOAT,!1,0,0),c.bufferData(c.ARRAY_BUFFER,l,c.STATIC_DRAW)},_setupFrameBuffer:function(c){var s=c.context,l,o;c.passes>1?(l=c.destinationWidth,o=c.destinationHeight,(c.sourceWidth!==l||c.sourceHeight!==o)&&(s.deleteTexture(c.targetTexture),c.targetTexture=c.filterBackend.createTexture(s,l,o)),s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,c.targetTexture,0)):(s.bindFramebuffer(s.FRAMEBUFFER,null),s.finish())},_swapTextures:function(c){c.passes--,c.pass++;var s=c.targetTexture;c.targetTexture=c.sourceTexture,c.sourceTexture=s},isNeutralState:function(){var c=this.mainParameter,s=f.Image.filters[this.type].prototype;if(c)if(Array.isArray(s[c])){for(var l=s[c].length;l--;)if(this[c][l]!==s[c][l])return!1;return!0}else return s[c]===this[c];else return!1},applyTo:function(c){c.webgl?(this._setupFrameBuffer(c),this.applyToWebGL(c),this._swapTextures(c)):this.applyTo2d(c)},retrieveShader:function(c){return c.programCache.hasOwnProperty(this.type)||(c.programCache[this.type]=this.createProgram(c.context)),c.programCache[this.type]},applyToWebGL:function(c){var s=c.context,l=this.retrieveShader(c);c.pass===0&&c.originalTexture?s.bindTexture(s.TEXTURE_2D,c.originalTexture):s.bindTexture(s.TEXTURE_2D,c.sourceTexture),s.useProgram(l.program),this.sendAttributeData(s,l.attributeLocations,c.aPosition),s.uniform1f(l.uniformLocations.uStepW,1/c.sourceWidth),s.uniform1f(l.uniformLocations.uStepH,1/c.sourceHeight),this.sendUniformData(s,l.uniformLocations),s.viewport(0,0,c.destinationWidth,c.destinationHeight),s.drawArrays(s.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(c,s,l){c.activeTexture(l),c.bindTexture(c.TEXTURE_2D,s),c.activeTexture(c.TEXTURE0)},unbindAdditionalTexture:function(c,s){c.activeTexture(s),c.bindTexture(c.TEXTURE_2D,null),c.activeTexture(c.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(c){this[this.mainParameter]=c},sendUniformData:function(){},createHelpLayer:function(c){if(!c.helpLayer){var s=document.createElement("canvas");s.width=c.sourceWidth,s.height=c.sourceHeight,c.helpLayer=s}},toObject:function(){var c={type:this.type},s=this.mainParameter;return s&&(c[s]=this[s]),c},toJSON:function(){return this.toObject()}}),f.Image.filters.BaseFilter.fromObject=function(c,s){var l=new f.Image.filters[c.type](c);return s&&s(l),l},function(c){var s=c.fabric||(c.fabric={}),l=s.Image.filters,o=s.util.createClass;l.ColorMatrix=o(l.BaseFilter,{type:"ColorMatrix",fragmentSource:`precision highp float;
72uniform sampler2D uTexture;
73varying vec2 vTexCoord;
74uniform mat4 uColorMatrix;
75uniform vec4 uConstants;
76void main() {
77vec4 color = texture2D(uTexture, vTexCoord);
78color *= uColorMatrix;
79color += uConstants;
80gl_FragColor = color;
81}`,matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(e){this.callSuper("initialize",e),this.matrix=this.matrix.slice(0)},applyTo2d:function(e){var r=e.imageData,t=r.data,n=t.length,a=this.matrix,i,h,u,d,g,m=this.colorsOnly;for(g=0;g<n;g+=4)i=t[g],h=t[g+1],u=t[g+2],m?(t[g]=i*a[0]+h*a[1]+u*a[2]+a[4]*255,t[g+1]=i*a[5]+h*a[6]+u*a[7]+a[9]*255,t[g+2]=i*a[10]+h*a[11]+u*a[12]+a[14]*255):(d=t[g+3],t[g]=i*a[0]+h*a[1]+u*a[2]+d*a[3]+a[4]*255,t[g+1]=i*a[5]+h*a[6]+u*a[7]+d*a[8]+a[9]*255,t[g+2]=i*a[10]+h*a[11]+u*a[12]+d*a[13]+a[14]*255,t[g+3]=i*a[15]+h*a[16]+u*a[17]+d*a[18]+a[19]*255)},getUniformLocations:function(e,r){return{uColorMatrix:e.getUniformLocation(r,"uColorMatrix"),uConstants:e.getUniformLocation(r,"uConstants")}},sendUniformData:function(e,r){var t=this.matrix,n=[t[0],t[1],t[2],t[3],t[5],t[6],t[7],t[8],t[10],t[11],t[12],t[13],t[15],t[16],t[17],t[18]],a=[t[4],t[9],t[14],t[19]];e.uniformMatrix4fv(r.uColorMatrix,!1,n),e.uniform4fv(r.uConstants,a)}}),s.Image.filters.ColorMatrix.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.Image.filters,o=s.util.createClass;l.Brightness=o(l.BaseFilter,{type:"Brightness",fragmentSource:`precision highp float;
82uniform sampler2D uTexture;
83uniform float uBrightness;
84varying vec2 vTexCoord;
85void main() {
86vec4 color = texture2D(uTexture, vTexCoord);
87color.rgb += uBrightness;
88gl_FragColor = color;
89}`,brightness:0,mainParameter:"brightness",applyTo2d:function(e){if(this.brightness!==0){var r=e.imageData,t=r.data,n,a=t.length,i=Math.round(this.brightness*255);for(n=0;n<a;n+=4)t[n]=t[n]+i,t[n+1]=t[n+1]+i,t[n+2]=t[n+2]+i}},getUniformLocations:function(e,r){return{uBrightness:e.getUniformLocation(r,"uBrightness")}},sendUniformData:function(e,r){e.uniform1f(r.uBrightness,this.brightness)}}),s.Image.filters.Brightness.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.util.object.extend,o=s.Image.filters,e=s.util.createClass;
vendor: 4,505 bytes, lines 89-217
89o.Convolute=e(o.BaseFilter,{type:"Convolute",opaque:!1,matrix:[0,0,0,0,1,0,0,0,0],fragmentSource:{Convolute_3_1:`precision highp float;
90uniform sampler2D uTexture;
91uniform float uMatrix[9];
92uniform float uStepW;
93uniform float uStepH;
94varying vec2 vTexCoord;
95void main() {
96vec4 color = vec4(0, 0, 0, 0);
97for (float h = 0.0; h < 3.0; h+=1.0) {
98for (float w = 0.0; w < 3.0; w+=1.0) {
99vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));
100color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];
101}
102}
103gl_FragColor = color;
104}`,Convolute_3_0:`precision highp float;
105uniform sampler2D uTexture;
106uniform float uMatrix[9];
107uniform float uStepW;
108uniform float uStepH;
109varying vec2 vTexCoord;
110void main() {
111vec4 color = vec4(0, 0, 0, 1);
112for (float h = 0.0; h < 3.0; h+=1.0) {
113for (float w = 0.0; w < 3.0; w+=1.0) {
114vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));
115color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];
116}
117}
118float alpha = texture2D(uTexture, vTexCoord).a;
119gl_FragColor = color;
120gl_FragColor.a = alpha;
121}`,Convolute_5_1:`precision highp float;
122uniform sampler2D uTexture;
123uniform float uMatrix[25];
124uniform float uStepW;
125uniform float uStepH;
126varying vec2 vTexCoord;
127void main() {
128vec4 color = vec4(0, 0, 0, 0);
129for (float h = 0.0; h < 5.0; h+=1.0) {
130for (float w = 0.0; w < 5.0; w+=1.0) {
131vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));
132color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];
133}
134}
135gl_FragColor = color;
136}`,Convolute_5_0:`precision highp float;
137uniform sampler2D uTexture;
138uniform float uMatrix[25];
139uniform float uStepW;
140uniform float uStepH;
141varying vec2 vTexCoord;
142void main() {
143vec4 color = vec4(0, 0, 0, 1);
144for (float h = 0.0; h < 5.0; h+=1.0) {
145for (float w = 0.0; w < 5.0; w+=1.0) {
146vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));
147color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];
148}
149}
150float alpha = texture2D(uTexture, vTexCoord).a;
151gl_FragColor = color;
152gl_FragColor.a = alpha;
153}`,Convolute_7_1:`precision highp float;
154uniform sampler2D uTexture;
155uniform float uMatrix[49];
156uniform float uStepW;
157uniform float uStepH;
158varying vec2 vTexCoord;
159void main() {
160vec4 color = vec4(0, 0, 0, 0);
161for (float h = 0.0; h < 7.0; h+=1.0) {
162for (float w = 0.0; w < 7.0; w+=1.0) {
163vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));
164color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];
165}
166}
167gl_FragColor = color;
168}`,Convolute_7_0:`precision highp float;
169uniform sampler2D uTexture;
170uniform float uMatrix[49];
171uniform float uStepW;
172uniform float uStepH;
173varying vec2 vTexCoord;
174void main() {
175vec4 color = vec4(0, 0, 0, 1);
176for (float h = 0.0; h < 7.0; h+=1.0) {
177for (float w = 0.0; w < 7.0; w+=1.0) {
178vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));
179color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];
180}
181}
182float alpha = texture2D(uTexture, vTexCoord).a;
183gl_FragColor = color;
184gl_FragColor.a = alpha;
185}`,Convolute_9_1:`precision highp float;
186uniform sampler2D uTexture;
187uniform float uMatrix[81];
188uniform float uStepW;
189uniform float uStepH;
190varying vec2 vTexCoord;
191void main() {
192vec4 color = vec4(0, 0, 0, 0);
193for (float h = 0.0; h < 9.0; h+=1.0) {
194for (float w = 0.0; w < 9.0; w+=1.0) {
195vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));
196color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];
197}
198}
199gl_FragColor = color;
200}`,Convolute_9_0:`precision highp float;
201uniform sampler2D uTexture;
202uniform float uMatrix[81];
203uniform float uStepW;
204uniform float uStepH;
205varying vec2 vTexCoord;
206void main() {
207vec4 color = vec4(0, 0, 0, 1);
208for (float h = 0.0; h < 9.0; h+=1.0) {
209for (float w = 0.0; w < 9.0; w+=1.0) {
210vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));
211color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];
212}
213}
214float alpha = texture2D(uTexture, vTexCoord).a;
215gl_FragColor = color;
216gl_FragColor.a = alpha;
217}`},retrieveShader:function(r){var t=Math.sqrt(this.matrix.length),n=this.type+"_"+t+"_"+(this.opaque?1:0),a=this.fragmentSource[n];return r.programCache.hasOwnProperty(n)||(r.programCache[n]=this.createProgram(r.context,a)),r.programCache[n]},applyTo2d:function(r){var t=r.imageData,n=t.data,a=this.matrix,i=Math.round(Math.sqrt(a.length)),h=Math.floor(i/2),u=t.width,d=t.height,g=r.ctx.createImageData(u,d),m=g.data,p=this.opaque?1:0,C,T,
vendor: 11,703 bytes, lines 217-329
217j,W,V,et,nt,Z,tt,lt,ht,it,v;for(ht=0;ht<d;ht++)for(lt=0;lt<u;lt++){for(V=(ht*u+lt)*4,C=0,T=0,j=0,W=0,v=0;v<i;v++)for(it=0;it<i;it++)nt=ht+v-h,et=lt+it-h,!(nt<0||nt>=d||et<0||et>=u)&&(Z=(nt*u+et)*4,tt=a[v*i+it],C+=n[Z]*tt,T+=n[Z+1]*tt,j+=n[Z+2]*tt,p||(W+=n[Z+3]*tt));m[V]=C,m[V+1]=T,m[V+2]=j,p?m[V+3]=n[V+3]:m[V+3]=W}r.imageData=g},getUniformLocations:function(r,t){return{uMatrix:r.getUniformLocation(t,"uMatrix"),uOpaque:r.getUniformLocation(t,"uOpaque"),uHalfSize:r.getUniformLocation(t,"uHalfSize"),uSize:r.getUniformLocation(t,"uSize")}},sendUniformData:function(r,t){r.uniform1fv(t.uMatrix,this.matrix)},toObject:function(){return l(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),s.Image.filters.Convolute.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.Image.filters,o=s.util.createClass;l.Grayscale=o(l.BaseFilter,{type:"Grayscale",fragmentSource:{average:`precision highp float;
218uniform sampler2D uTexture;
219varying vec2 vTexCoord;
220void main() {
221vec4 color = texture2D(uTexture, vTexCoord);
222float average = (color.r + color.b + color.g) / 3.0;
223gl_FragColor = vec4(average, average, average, color.a);
224}`,lightness:`precision highp float;
225uniform sampler2D uTexture;
226uniform int uMode;
227varying vec2 vTexCoord;
228void main() {
229vec4 col = texture2D(uTexture, vTexCoord);
230float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;
231gl_FragColor = vec4(average, average, average, col.a);
232}`,luminosity:`precision highp float;
233uniform sampler2D uTexture;
234uniform int uMode;
235varying vec2 vTexCoord;
236void main() {
237vec4 col = texture2D(uTexture, vTexCoord);
238float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;
239gl_FragColor = vec4(average, average, average, col.a);
240}`},mode:"average",mainParameter:"mode",applyTo2d:function(e){var r=e.imageData,t=r.data,n,a=t.length,i,h=this.mode;for(n=0;n<a;n+=4)h==="average"?i=(t[n]+t[n+1]+t[n+2])/3:h==="lightness"?i=(Math.min(t[n],t[n+1],t[n+2])+Math.max(t[n],t[n+1],t[n+2]))/2:h==="luminosity"&&(i=.21*t[n]+.72*t[n+1]+.07*t[n+2]),t[n]=i,t[n+1]=i,t[n+2]=i},retrieveShader:function(e){var r=this.type+"_"+this.mode;if(!e.programCache.hasOwnProperty(r)){var t=this.fragmentSource[this.mode];e.programCache[r]=this.createProgram(e.context,t)}return e.programCache[r]},getUniformLocations:function(e,r){return{uMode:e.getUniformLocation(r,"uMode")}},sendUniformData:function(e,r){var t=1;e.uniform1i(r.uMode,t)},isNeutralState:function(){return!1}}),s.Image.filters.Grayscale.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.Image.filters,o=s.util.createClass;l.Invert=o(l.BaseFilter,{type:"Invert",fragmentSource:`precision highp float;
241uniform sampler2D uTexture;
242uniform int uInvert;
243varying vec2 vTexCoord;
244void main() {
245vec4 color = texture2D(uTexture, vTexCoord);
246if (uInvert == 1) {
247gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);
248} else {
249gl_FragColor = color;
250}
251}`,invert:!0,mainParameter:"invert",applyTo2d:function(e){var r=e.imageData,t=r.data,n,a=t.length;for(n=0;n<a;n+=4)t[n]=255-t[n],t[n+1]=255-t[n+1],t[n+2]=255-t[n+2]},isNeutralState:function(){return!this.invert},getUniformLocations:function(e,r){return{uInvert:e.getUniformLocation(r,"uInvert")}},sendUniformData:function(e,r){e.uniform1i(r.uInvert,this.invert)}}),s.Image.filters.Invert.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.util.object.extend,o=s.Image.filters,e=s.util.createClass;o.Noise=e(o.BaseFilter,{type:"Noise",fragmentSource:`precision highp float;
252uniform sampler2D uTexture;
253uniform float uStepH;
254uniform float uNoise;
255uniform float uSeed;
256varying vec2 vTexCoord;
257float rand(vec2 co, float seed, float vScale) {
258return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);
259}
260void main() {
261vec4 color = texture2D(uTexture, vTexCoord);
262color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;
263gl_FragColor = color;
264}`,mainParameter:"noise",noise:0,applyTo2d:function(r){if(this.noise!==0){var t=r.imageData,n=t.data,a,i=n.length,h=this.noise,u;for(a=0,i=n.length;a<i;a+=4)u=(.5-Math.random())*h,n[a]+=u,n[a+1]+=u,n[a+2]+=u}},getUniformLocations:function(r,t){return{uNoise:r.getUniformLocation(t,"uNoise"),uSeed:r.getUniformLocation(t,"uSeed")}},sendUniformData:function(r,t){r.uniform1f(t.uNoise,this.noise/255),r.uniform1f(t.uSeed,Math.random())},toObject:function(){return l(this.callSuper("toObject"),{noise:this.noise})}}),s.Image.filters.Noise.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.Image.filters,o=s.util.createClass;l.Pixelate=o(l.BaseFilter,{type:"Pixelate",blocksize:4,mainParameter:"blocksize",fragmentSource:`precision highp float;
265uniform sampler2D uTexture;
266uniform float uBlocksize;
267uniform float uStepW;
268uniform float uStepH;
269varying vec2 vTexCoord;
270void main() {
271float blockW = uBlocksize * uStepW;
272float blockH = uBlocksize * uStepW;
273int posX = int(vTexCoord.x / blockW);
274int posY = int(vTexCoord.y / blockH);
275float fposX = float(posX);
276float fposY = float(posY);
277vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);
278vec4 color = texture2D(uTexture, squareCoords);
279gl_FragColor = color;
280}`,applyTo2d:function(e){var r=e.imageData,t=r.data,n=r.height,a=r.width,i,h,u,d,g,m,p,C,T,j,W;for(h=0;h<n;h+=this.blocksize)for(u=0;u<a;u+=this.blocksize)for(i=h*4*a+u*4,d=t[i],g=t[i+1],m=t[i+2],p=t[i+3],j=Math.min(h+this.blocksize,n),W=Math.min(u+this.blocksize,a),C=h;C<j;C++)for(T=u;T<W;T++)i=C*4*a+T*4,t[i]=d,t[i+1]=g,t[i+2]=m,t[i+3]=p},isNeutralState:function(){return this.blocksize===1},getUniformLocations:function(e,r){return{uBlocksize:e.getUniformLocation(r,"uBlocksize"),uStepW:e.getUniformLocation(r,"uStepW"),uStepH:e.getUniformLocation(r,"uStepH")}},sendUniformData:function(e,r){e.uniform1f(r.uBlocksize,this.blocksize)}}),s.Image.filters.Pixelate.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.util.object.extend,o=s.Image.filters,e=s.util.createClass;o.RemoveColor=e(o.BaseFilter,{type:"RemoveColor",color:"#FFFFFF",fragmentSource:`precision highp float;
281uniform sampler2D uTexture;
282uniform vec4 uLow;
283uniform vec4 uHigh;
284varying vec2 vTexCoord;
285void main() {
286gl_FragColor = texture2D(uTexture, vTexCoord);
287if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {
288gl_FragColor.a = 0.0;
289}
290}`,distance:.02,useAlpha:!1,applyTo2d:function(r){var t=r.imageData,n=t.data,a,i=this.distance*255,h,u,d,g=new s.Color(this.color).getSource(),m=[g[0]-i,g[1]-i,g[2]-i],p=[g[0]+i,g[1]+i,g[2]+i];for(a=0;a<n.length;a+=4)h=n[a],u=n[a+1],d=n[a+2],h>m[0]&&u>m[1]&&d>m[2]&&h<p[0]&&u<p[1]&&d<p[2]&&(n[a+3]=0)},getUniformLocations:function(r,t){return{uLow:r.getUniformLocation(t,"uLow"),uHigh:r.getUniformLocation(t,"uHigh")}},sendUniformData:function(r,t){var n=new s.Color(this.color).getSource(),a=parseFloat(this.distance),i=[0+n[0]/255-a,0+n[1]/255-a,0+n[2]/255-a,1],h=[n[0]/255+a,n[1]/255+a,n[2]/255+a,1];r.uniform4fv(t.uLow,i),r.uniform4fv(t.uHigh,h)},toObject:function(){return l(this.callSuper("toObject"),{color:this.color,distance:this.distance})}}),s.Image.filters.RemoveColor.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.Image.filters,o=s.util.createClass,e={Brownie:[.5997,.34553,-.27082,0,.186,-.0377,.86095,.15059,0,-.1449,.24113,-.07441,.44972,0,-.02965,0,0,0,1,0],Vintage:[.62793,.32021,-.03965,0,.03784,.02578,.64411,.03259,0,.02926,.0466,-.08512,.52416,0,.02023,0,0,0,1,0],Kodachrome:[1.12855,-.39673,-.03992,0,.24991,-.16404,1.08352,-.05498,0,.09698,-.16786,-.56034,1.60148,0,.13972,0,0,0,1,0],Technicolor:[1.91252,-.85453,-.09155,0,.04624,-.30878,1.76589,-.10601,0,-.27589,-.2311,-.75018,1.84759,0,.12137,0,0,0,1,0],Polaroid:[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0],Sepia:[.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0],BlackWhite:[1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,0,0,0,1,0]};for(var r in e)l[r]=o(l.ColorMatrix,{type:r,matrix:e[r],mainParameter:!1,colorsOnly:!0}),s.Image.filters[r].fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric,l=s.Image.filters,o=s.util.createClass;l.BlendColor=o(l.BaseFilter,{type:"BlendColor",color:"#F95C63",mode:"multiply",alpha:1,fragmentSource:{multiply:`gl_FragColor.rgb *= uColor.rgb;
291`,screen:`gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);
292`,add:`gl_FragColor.rgb += uColor.rgb;
293`,diff:`gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);
294`,subtract:`gl_FragColor.rgb -= uColor.rgb;
295`,lighten:`gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);
296`,darken:`gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);
297`,exclusion:`gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);
298`,overlay:`if (uColor.r < 0.5) {
299gl_FragColor.r *= 2.0 * uColor.r;
300} else {
301gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);
302}
303if (uColor.g < 0.5) {
304gl_FragColor.g *= 2.0 * uColor.g;
305} else {
306gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);
307}
308if (uColor.b < 0.5) {
309gl_FragColor.b *= 2.0 * uColor.b;
310} else {
311gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);
312}
313`,tint:`gl_FragColor.rgb *= (1.0 - uColor.a);
314gl_FragColor.rgb += uColor.rgb;
315`},buildSource:function(e){return`precision highp float;
316uniform sampler2D uTexture;
317uniform vec4 uColor;
318varying vec2 vTexCoord;
319void main() {
320vec4 color = texture2D(uTexture, vTexCoord);
321gl_FragColor = color;
322if (color.a > 0.0) {
323`+this.fragmentSource[e]+`}
324}`},retrieveShader:function(e){var r=this.type+"_"+this.mode,t;return e.programCache.hasOwnProperty(r)||(t=this.buildSource(this.mode),e.programCache[r]=this.createProgram(e.context,t)),e.programCache[r]},applyTo2d:function(e){var r=e.imageData,t=r.data,n=t.length,a,i,h,u,d,g,m,p=1-this.alpha;m=new s.Color(this.color).getSource(),a=m[0]*this.alpha,i=m[1]*this.alpha,h=m[2]*this.alpha;for(var C=0;C<n;C+=4)switch(u=t[C],d=t[C+1],g=t[C+2],this.mode){case"multiply":t[C]=u*a/255,t[C+1]=d*i/255,t[C+2]=g*h/255;break;case"screen":t[C]=255-(255-u)*(255-a)/255,t[C+1]=255-(255-d)*(255-i)/255,t[C+2]=255-(255-g)*(255-h)/255;break;case"add":t[C]=u+a,t[C+1]=d+i,t[C+2]=g+h;break;case"diff":case"difference":t[C]=Math.abs(u-a),t[C+1]=Math.abs(d-i),t[C+2]=Math.abs(g-h);break;case"subtract":t[C]=u-a,t[C+1]=d-i,t[C+2]=g-h;break;case"darken":t[C]=Math.min(u,a),t[C+1]=Math.min(d,i),t[C+2]=Math.min(g,h);break;case"lighten":t[C]=Math.max(u,a),t[C+1]=Math.max(d,i),t[C+2]=Math.max(g,h);break;case"overlay":t[C]=a<128?2*u*a/255:255-2*(255-u)*(255-a)/255,t[C+1]=i<128?2*d*i/255:255-2*(255-d)*(255-i)/255,t[C+2]=h<128?2*g*h/255:255-2*(255-g)*(255-h)/255;break;case"exclusion":t[C]=a+u-2*a*u/255,t[C+1]=i+d-2*i*d/255,t[C+2]=h+g-2*h*g/255;break;case"tint":t[C]=a+u*p,t[C+1]=i+d*p,t[C+2]=h+g*p}},getUniformLocations:function(e,r){return{uColor:e.getUniformLocation(r,"uColor")}},sendUniformData:function(e,r){var t=new s.Color(this.color).getSource();t[0]=this.alpha*t[0]/255,t[1]=this.alpha*t[1]/255,t[2]=this.alpha*t[2]/255,t[3]=this.alpha,e.uniform4fv(r.uColor,t)},toObject:function(){return{type:this.type,color:this.color,mode:this.mode,alpha:this.alpha}}}),s.Image.filters.BlendColor.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric,l=s.Image.filters,o=s.util.createClass;l.BlendImage=o(l.BaseFilter,{type:"BlendImage",image:null,mode:"multiply",alpha:1,vertexSource:`attribute vec2 aPosition;
325varying vec2 vTexCoord;
326varying vec2 vTexCoord2;
327uniform mat3 uTransformMatrix;
328void main() {
329vTexCoord = aPosition;
330vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;
331gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
332}`,fragmentSource:{multiply:`precision highp float;
333uniform sampler2D uTexture;
334uniform sampler2D uImage;
335uniform vec4 uColor;
336varying vec2 vTexCoord;
337varying vec2 vTexCoord2;
338void main() {
339vec4 color = texture2D(uTexture, vTexCoord);
340vec4 color2 = texture2D(uImage, vTexCoord2);
341color.rgba *= color2.rgba;
342gl_FragColor = color;
343}`,mask:`precision highp float;
344uniform sampler2D uTexture;
345uniform sampler2D uImage;
346uniform vec4 uColor;
347varying vec2 vTexCoord;
348varying vec2 vTexCoord2;
349void main() {
350vec4 color = texture2D(uTexture, vTexCoord);
351vec4 color2 = texture2D(uImage, vTexCoord2);
352color.a = color2.a;
353gl_FragColor = color;
354}`},retrieveShader:function(e){var r=this.type+"_"+this.mode,t=this.fragmentSource[this.mode];return e.programCache.hasOwnProperty(r)||(e.programCache[r]=this.createProgram(e.context,t)),e.programCache[r]},applyToWebGL:function(e){var r=e.context,t=this.createTexture(e.filterBackend,this.image);this.bindAdditionalTexture(r,t,r.TEXTURE1),this.callSuper("applyToWebGL",e),this.unbindAdditionalTexture(r,r.TEXTURE1)},createTexture:function(e,r){return e.getCachedTexture(r.cacheKey,r._element)},calculateMatrix:function(){var e=this.image,r=e._element.width,t=e._element.height;return[1/e.scaleX,0,0,0,1/e.scaleY,0,-e.left/r,-e.top/t,1]},applyTo2d:function(e){var r=e.imageData,t=e.filterBackend.resources,n=r.data,a=n.length,i=r.width,h=r.height,u,d,g,m,p,C,T,j,W,V,et=this.image,nt;t.blendImage||(t.blendImage=s.util.createCanvasElement()),W=t.blendImage,V=W.getContext("2d"),W.width!==i||W.height!==h?(W.width=i,W.height=h):V.clearRect(0,0,i,h),V.setTransform(et.scaleX,0,0,et.scaleY,et.left,et.top),V.drawImage(et._element,0,0,i,h),nt=V.getImageData(0,0,i,h).data;for(var Z=0;Z<a;Z+=4)switch(p=n[Z],C=n[Z+1],T=n[Z+2],j=n[Z+3],u=nt[Z],d=nt[Z+1],g=nt[Z+2],m=nt[Z+3],this.mode){case"multiply":n[Z]=p*u/255,n[Z+1]=C*d/255,n[Z+2]=T*g/255,n[Z+3]=j*m/255;break;case"mask":n[Z+3]=m;break}},getUniformLocations:function(e,r){return{uTransformMatrix:e.getUniformLocation(r,"uTransformMatrix"),uImage:e.getUniformLocation(r,"uImage")}},sendUniformData:function(e,r){var t=this.calculateMatrix();e.uniform1i(r.uImage,1),e.uniformMatrix3fv(r.uTransformMatrix,!1,t)},toObject:function(){return{type:this.type,image:this.image&&this.image.toObject(),mode:this.mode,alpha:this.alpha}}}),s.Image.filters.BlendImage.fromObject=function(e,r){s.Image.fromObject(e.image,function(t){var n=s.util.object.clone(e);n.image=t,r(new s.Image.filters.BlendImage(n))})}}(R),function(c){var s=c.fabric||(c.fabric={}),l=Math.pow,o=Math.floor,e=Math.sqrt,r=Math.abs,t=Math.round,n=Math.sin,a=Math.ceil,i=s.Image.filters,h=s.util.createClass;i.Resize=h(i.BaseFilter,{type:"Resize",resizeType:"hermite",scaleX:1,scaleY:1,lanczosLobes:3,getUniformLocations:function(u,d){return{uDelta:u.getUniformLocation(d,"uDelta"),uTaps:u.getUniformLocation(d,"uTaps")}},sendUniformData:function(u,d){u.uniform2fv(d.uDelta,this.horizontal?[1/this.width,0]:[0,1/this.height]),u.uniform1fv(d.uTaps,this.taps)},retrieveShader:function(u){var d=this.getFilterWindow(),g=this.type+"_"+d;if(!u.programCache.hasOwnProperty(g)){var m=this.generateShader(d);u.programCache[g]=this.createProgram(u.context,m)}return u.programCache[g]},getFilterWindow:function(){var u=this.tempScale;return Math.ceil(this.lanczosLobes/u)},getTaps:function(){for(var u=this.lanczosCreate(this.lanczosLobes),d=this.tempScale,g=this.getFilterWindow(),m=new Array(g),p=1;p<=g;p++)m[p-1]=u(p*d);return m},generateShader:function(m){for(var d=new Array(m),g=this.fragmentSourceTOP,m,p=1;p<=m;p++)d[p-1]=p+".0 * uDelta";return g+="uniform float uTaps["+m+`];
355`,g+=`void main() {
356`,g+=`  vec4 color = texture2D(uTexture, vTexCoord);
357`,g+=`  float sum = 1.0;
358`,d.forEach(function(C,T){g+="  color += texture2D(uTexture, vTexCoord + "+C+") * uTaps["+T+`];
359`,g+="  color += texture2D(uTexture, vTexCoord - "+C+") * uTaps["+T+`];
360`,g+="  sum += 2.0 * uTaps["+T+`];
361`}),g+=`  gl_FragColor = color / sum;
362`,g+="}",g},fragmentSourceTOP:`precision highp float;
363uniform sampler2D uTexture;
364uniform vec2 uDelta;
365varying vec2 vTexCoord;
366`,applyTo:function(u){u.webgl?(u.passes++,this.width=u.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=u.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),u.destinationWidth=this.dW,this._setupFrameBuffer(u),this.applyToWebGL(u),this._swapTextures(u),u.sourceWidth=u.destinationWidth,this.height=u.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),u.destinationHeight=this.dH,this._setupFrameBuffer(u),this.applyToWebGL(u),this._swapTextures(u),u.sourceHeight=u.destinationHeight):this.applyTo2d(u)},isNeutralState:function(){return this.scaleX===1&&this.scaleY===1},lanczosCreate:function(u){return function(d){if(d>=u||d<=-u)return 0;if(d<11920929e-14&&d>-11920929e-14)return 1;d*=Math.PI;var g=d/u;return n(d)/d*n(g)/g}},applyTo2d:function(u){var d=u.imageData,g=this.scaleX,m=this.scaleY;this.rcpScaleX=1/g,this.rcpScaleY=1/m;var p=d.width,C=d.height,T=t(p*g),j=t(C*m),W;this.resizeType==="sliceHack"?W=this.sliceByTwo(u,p,C,T,j):this.resizeType==="hermite"?W=this.hermiteFastResize(u,p,C,T,j):this.resizeType==="bilinear"?W=this.bilinearFiltering(u,p,C,T,j):this.resizeType==="lanczos"&&(W=this.lanczosResize(u,p,C,T,j)),u.imageData=W},sliceByTwo:function(u,d,g,m,p){var C=u.imageData,T=.5,j=!1,W=!1,V=d*T,et=g*T,nt=s.filterBackend.resources,Z,tt,lt=0,ht=0,it=d,v=0;for(nt.sliceByTwo||(nt.sliceByTwo=document.createElement("canvas")),Z=nt.sliceByTwo,(Z.width<d*1.5||Z.height<g)&&(Z.width=d*1.5,Z.height=g),tt=Z.getContext("2d"),tt.clearRect(0,0,d*1.5,g),tt.putImageData(C,0,0),m=o(m),p=o(p);!j||!W;)d=V,g=et,m<o(V*T)?V=o(V*T):(V=m,j=!0),p<o(et*T)?et=o(et*T):(et=p,W=!0),tt.drawImage(Z,lt,ht,d,g,it,v,V,et),lt=it,ht=v,v+=et;return tt.getImageData(lt,ht,m,p)},lanczosResize:function(u,d,g,m,p){function C(w){var b,D,x,y,k,E,B,M,U,G,J;for(v.x=(w+.5)*et,S.x=o(v.x),b=0;b<p;b++){for(v.y=(b+.5)*nt,S.y=o(v.y),k=0,E=0,B=0,M=0,U=0,D=S.x-lt;D<=S.x+lt;D++)if(!(D<0||D>=d)){G=o(1e3*r(D-v.x)),it[G]||(it[G]={});for(var F=S.y-ht;F<=S.y+ht;F++)F<0||F>=g||(J=o(1e3*r(F-v.y)),it[G][J]||(it[G][J]=V(e(l(G*Z,2)+l(J*tt,2))/1e3)),x=it[G][J],x>0&&(y=(F*d+D)*4,k+=x,E+=x*T[y],B+=x*T[y+1],M+=x*T[y+2],U+=x*T[y+3]))}y=(b*m+w)*4,W[y]=E/k,W[y+1]=B/k,W[y+2]=M/k,W[y+3]=U/k}return++w<m?C(w):j}var T=u.imageData.data,j=u.ctx.createImageData(m,p),W=j.data,V=this.lanczosCreate(this.lanczosLobes),et=this.rcpScaleX,nt=this.rcpScaleY,Z=2/this.rcpScaleX,tt=2/this.rcpScaleY,lt=a(et*this.lanczosLobes/2),ht=a(nt*this.lanczosLobes/2),it={},v={},S={};return C(0)},bilinearFiltering:function(u,d,g,m,p){var C,T,j,W,V,et,nt,Z,tt,lt,ht,it,v=0,S,w=this.rcpScaleX,b=this.rcpScaleY,D=4*(d-1),x=u.imageData,y=x.data,k=u.ctx.createImageData(m,p),E=k.data;for(nt=0;nt<p;nt++)for(Z=0;Z<m;Z++)for(V=o(w*Z),et=o(b*nt),tt=w*Z-V,lt=b*nt-et,S=4*(et*d+V),ht=0;ht<4;ht++)C=y[S+ht],T=y[S+4+ht],j=y[S+D+ht],W=y[S+D+4+ht],it=C*(1-tt)*(1-lt)+T*tt*(1-lt)+j*lt*(1-tt)+W*tt*lt,E[v++]=it;return k},hermiteFastResize:function(u,d,g,m,p){for(var C=this.rcpScaleX,T=this.rcpScaleY,j=a(C/2),W=a(T/2),V=u.imageData,et=V.data,nt=u.ctx.createImageData(m,p),Z=nt.data,tt=0;tt<p;tt++)for(var lt=0;lt<m;lt++){for(var ht=(lt+tt*m)*4,it=0,v=0,S=0,w=0,b=0,D=0,x=0,y=(tt+.5)*T,k=o(tt*T);k<(tt+1)*T;k++)for(var E=r(y-(k+.5))/W,B=(lt+.5)*C,M=E*E,U=o(lt*C);U<(lt+1)*C;U++){var G=r(B-(U+.5))/j,J=e(M+G*G);J>1&&J<-1||(it=2*J*J*J-3*J*J+1,it>0&&(G=4*(U+k*d),x+=it*et[G+3],S+=it,et[G+3]<255&&(it=it*et[G+3]/250),w+=it*et[G],b+=it*et[G+1],D+=it*et[G+2],v+=it))}Z[ht]=w/v,Z[ht+1]=b/v,Z[ht+2]=D/v,Z[ht+3]=x/S}return nt},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),s.Image.filters.Resize.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.Image.filters,o=s.util.createClass;l.Contrast=o(l.BaseFilter,{type:"Contrast",fragmentSource:`precision highp float;
367uniform sampler2D uTexture;
368uniform float uContrast;
369varying vec2 vTexCoord;
370void main() {
371vec4 color = texture2D(uTexture, vTexCoord);
372float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));
373color.rgb = contrastF * (color.rgb - 0.5) + 0.5;
374gl_FragColor = color;
375}`,contrast:0,mainParameter:"contrast",applyTo2d:function(e){if(this.contrast!==0){var r=e.imageData,t,a,n=r.data,a=n.length,i=Math.floor(this.contrast*255),h=259*(i+255)/(255*(259-i));for(t=0;t<a;t+=4)n[t]=h*(n[t]-128)+128,n[t+1]=h*(n[t+1]-128)+128,n[t+2]=h*(n[t+2]-128)+128}},getUniformLocations:function(e,r){return{uContrast:e.getUniformLocation(r,"uContrast")}},sendUniformData:function(e,r){e.uniform1f(r.uContrast,this.contrast)}}),s.Image.filters.Contrast.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.Image.filters,o=s.util.createClass;l.Saturation=o(l.BaseFilter,{type:"Saturation",fragmentSource:`precision highp float;
376uniform sampler2D uTexture;
377uniform float uSaturation;
378varying vec2 vTexCoord;
379void main() {
380vec4 color = texture2D(uTexture, vTexCoord);
381float rgMax = max(color.r, color.g);
382float rgbMax = max(rgMax, color.b);
383color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;
384color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;
385color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;
386gl_FragColor = color;
387}`,saturation:0,mainParameter:"saturation",applyTo2d:function(e){if(this.saturation!==0){var r=e.imageData,t=r.data,n=t.length,a=-this.saturation,i,h;for(i=0;i<n;i+=4)h=Math.max(t[i],t[i+1],t[i+2]),t[i]+=h!==t[i]?(h-t[i])*a:0,t[i+1]+=h!==t[i+1]?(h-t[i+1])*a:0,t[i+2]+=h!==t[i+2]?(h-t[i+2])*a:0}},getUniformLocations:function(e,r){return{uSaturation:e.getUniformLocation(r,"uSaturation")}},sendUniformData:function(e,r){e.uniform1f(r.uSaturation,-this.saturation)}}),s.Image.filters.Saturation.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.Image.filters,o=s.util.createClass;l.Vibrance=o(l.BaseFilter,{type:"Vibrance",fragmentSource:`precision highp float;
388uniform sampler2D uTexture;
389uniform float uVibrance;
390varying vec2 vTexCoord;
391void main() {
392vec4 color = texture2D(uTexture, vTexCoord);
393float max = max(color.r, max(color.g, color.b));
394float avg = (color.r + color.g + color.b) / 3.0;
395float amt = (abs(max - avg) * 2.0) * uVibrance;
396color.r += max != color.r ? (max - color.r) * amt : 0.00;
397color.g += max != color.g ? (max - color.g) * amt : 0.00;
398color.b += max != color.b ? (max - color.b) * amt : 0.00;
399gl_FragColor = color;
400}`,vibrance:0,mainParameter:"vibrance",applyTo2d:function(e){if(this.vibrance!==0){var r=e.imageData,t=r.data,n=t.length,a=-this.vibrance,i,h,u,d;for(i=0;i<n;i+=4)h=Math.max(t[i],t[i+1],t[i+2]),u=(t[i]+t[i+1]+t[i+2])/3,d=Math.abs(h-u)*2/255*a,t[i]+=h!==t[i]?(h-t[i])*d:0,t[i+1]+=h!==t[i+1]?(h-t[i+1])*d:0,t[i+2]+=h!==t[i+2]?(h-t[i+2])*d:0}},getUniformLocations:function(e,r){return{uVibrance:e.getUniformLocation(r,"uVibrance")}},sendUniformData:function(e,r){e.uniform1f(r.uVibrance,-this.vibrance)}}),s.Image.filters.Vibrance.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.Image.filters,o=s.util.createClass;l.Blur=o(l.BaseFilter,{type:"Blur",fragmentSource:`precision highp float;
401uniform sampler2D uTexture;
402uniform vec2 uDelta;
403varying vec2 vTexCoord;
404const float nSamples = 15.0;
405vec3 v3offset = vec3(12.9898, 78.233, 151.7182);
406float random(vec3 scale) {
407return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);
408}
409void main() {
410vec4 color = vec4(0.0);
411float total = 0.0;
412float offset = random(v3offset);
413for (float t = -nSamples; t <= nSamples; t++) {
414float percent = (t + offset - 0.5) / nSamples;
415float weight = 1.0 - abs(percent);
416color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;
417total += weight;
418}
419gl_FragColor = color / total;
420}`,blur:0,mainParameter:"blur",applyTo:function(e){e.webgl?(this.aspectRatio=e.sourceWidth/e.sourceHeight,e.passes++,this._setupFrameBuffer(e),this.horizontal=!0,this.applyToWebGL(e),this._swapTextures(e),this._setupFrameBuffer(e),this.horizontal=!1,this.applyToWebGL(e),this._swapTextures(e)):this.applyTo2d(e)},applyTo2d:function(e){e.imageData=this.simpleBlur(e)},simpleBlur:function(e){var r=e.filterBackend.resources,t,n,a=e.imageData.width,i=e.imageData.height;r.blurLayer1||(r.blurLayer1=s.util.createCanvasElement(),r.blurLayer2=s.util.createCanvasElement()),t=r.blurLayer1,n=r.blurLayer2,(t.width!==a||t.height!==i)&&(n.width=t.width=a,n.height=t.height=i);var h=t.getContext("2d"),u=n.getContext("2d"),d=15,g,m,p,C,T=this.blur*.06*.5;for(h.putImageData(e.imageData,0,0),u.clearRect(0,0,a,i),C=-d;C<=d;C++)g=(Math.random()-.5)/4,m=C/d,p=T*m*a+g,u.globalAlpha=1-Math.abs(m),u.drawImage(t,p,g),h.drawImage(n,
vendor: 4,534 bytes, lines 420-432
4200,0),u.globalAlpha=1,u.clearRect(0,0,n.width,n.height);for(C=-d;C<=d;C++)g=(Math.random()-.5)/4,m=C/d,p=T*m*i+g,u.globalAlpha=1-Math.abs(m),u.drawImage(t,g,p),h.drawImage(n,0,0),u.globalAlpha=1,u.clearRect(0,0,n.width,n.height);e.ctx.drawImage(t,0,0);var j=e.ctx.getImageData(0,0,t.width,t.height);return h.globalAlpha=1,h.clearRect(0,0,t.width,t.height),j},getUniformLocations:function(e,r){return{delta:e.getUniformLocation(r,"uDelta")}},sendUniformData:function(e,r){var t=this.chooseRightDelta();e.uniform2fv(r.delta,t)},chooseRightDelta:function(){var e=1,r=[0,0],t;return this.horizontal?this.aspectRatio>1&&(e=1/this.aspectRatio):this.aspectRatio<1&&(e=this.aspectRatio),t=e*this.blur*.12,this.horizontal?r[0]=t:r[1]=t,r}}),l.Blur.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.Image.filters,o=s.util.createClass;l.Gamma=o(l.BaseFilter,{type:"Gamma",fragmentSource:`precision highp float;
421uniform sampler2D uTexture;
422uniform vec3 uGamma;
423varying vec2 vTexCoord;
424void main() {
425vec4 color = texture2D(uTexture, vTexCoord);
426vec3 correction = (1.0 / uGamma);
427color.r = pow(color.r, correction.r);
428color.g = pow(color.g, correction.g);
429color.b = pow(color.b, correction.b);
430gl_FragColor = color;
431gl_FragColor.rgb *= color.a;
432}`,gamma:[1,1,1],mainParameter:"gamma",initialize:function(e){this.gamma=[1,1,1],l.BaseFilter.prototype.initialize.call(this,e)},applyTo2d:function(e){var r=e.imageData,t=r.data,n=this.gamma,a=t.length,i=1/n[0],h=1/n[1],u=1/n[2],d;for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),d=0,a=256;d<a;d++)this.rVals[d]=Math.pow(d/255,i)*255,this.gVals[d]=Math.pow(d/255,h)*255,this.bVals[d]=Math.pow(d/255,u)*255;for(d=0,a=t.length;d<a;d+=4)t[d]=this.rVals[t[d]],t[d+1]=this.gVals[t[d+1]],t[d+2]=this.bVals[t[d+2]]},getUniformLocations:function(e,r){return{uGamma:e.getUniformLocation(r,"uGamma")}},sendUniformData:function(e,r){e.uniform3fv(r.uGamma,this.gamma)}}),s.Image.filters.Gamma.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.Image.filters,o=s.util.createClass;l.Composed=o(l.BaseFilter,{type:"Composed",subFilters:[],initialize:function(e){this.callSuper("initialize",e),this.subFilters=this.subFilters.slice(0)},applyTo:function(e){e.passes+=this.subFilters.length-1,this.subFilters.forEach(function(r){r.applyTo(e)})},toObject:function(){return s.util.object.extend(this.callSuper("toObject"),{subFilters:this.subFilters.map(function(e){return e.toObject()})})},isNeutralState:function(){return!this.subFilters.some(function(e){return!e.isNeutralState()})}}),s.Image.filters.Composed.fromObject=function(e,r){var t=e.subFilters||[],n=t.map(function(i){return new s.Image.filters[i.type](i)}),a=new s.Image.filters.Composed({subFilters:n});return r&&r(a),a}}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.Image.filters,o=s.util.createClass;l.HueRotation=o(l.ColorMatrix,{type:"HueRotation",rotation:0,mainParameter:"rotation",calculateMatrix:function(){var e=this.rotation*Math.PI,r=s.util.cos(e),t=s.util.sin(e),n=1/3,a=Math.sqrt(n)*t,i=1-r;this.matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],this.matrix[0]=r+i/3,this.matrix[1]=n*i-a,this.matrix[2]=n*i+a,this.matrix[5]=n*i+a,this.matrix[6]=r+n*i,this.matrix[7]=n*i-a,this.matrix[10]=n*i-a,this.matrix[11]=n*i+a,this.matrix[12]=r+n*i},isNeutralState:function(e){return this.calculateMatrix(),l.BaseFilter.prototype.isNeutralState.call(this,e)},applyTo:function(e){this.calculateMatrix(),l.BaseFilter.prototype.applyTo.call(this,e)}}),s.Image.filters.HueRotation.fromObject=s.Image.filters.BaseFilter.fromObject}(R),function(c){var s=c.fabric||(c.fabric={}),l=s.util.object.clone;if(s.Text){s.warn("fabric.Text is already defined");return}var o="fontFamily fontWeight fontSize text underline overline linethrough textAlign fontStyle lineHeight textBackgroundColor charSpacing styles direction path pathStartOffset pathSide pathAlign".split(" ");s.Text=s.util.createClass(s.Object,{_dimensionAffectingProps:["fontSize","fontWeight","fontFamily","fontStyle","lineHeight","text","charSpacing","textAlign","styles","path","pathStartOffset","pathSide","pathAlign"],_reNewline:/\r?\n/,_reSpacesAndTabs:/[ \t\r]/g,_reSpaceAndTab:/[ \t\r]/,_reWords:/\S+/g,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",underline:!1,overline:!1,linethrough:!1,textAlign:"left",fontStyle:"normal",lineHeight:1.16,superscript:{size:.6,baseline:-.35},subscript:{size:.6,baseline:.11}
432,textBackgroundColor:"",stateProperties:s.Object.prototype.stateProperties.concat(o),cacheProperties:s.Object.prototype.cacheProperties.concat(o),stroke:null,shadow:null,path:null,pathStartOffset:0,pathSide:"left",pathAlign:"baseline",_fontSizeFraction:.222,offsets:{underline:.1,linethrough:-.315,overline:-.88},_fontSizeMult:1.13,charSpacing:0,styles:null,_measuringContext:null,deltaY:0,direction:"ltr",_styleProperties:["stroke","strokeWidth","fill","fontFamily","fontSize","fontWeight","fontStyle","underline","overline","linethrough","deltaY","textBackgroundColor"],__charBounds:[],CACHE_FONT_SIZE:400,MIN_TEXT_WIDTH:2,initialize:function(e,r){this.styles=r?r.styles||{}:{},this.text=e,this.__skipDimension=!0,this.callSuper("initialize",r),this.path&&this.setPathInfo(),this.__skipDimension=!1,this.initDimensions(),this.setCoords(),this.setupState({propertySet:"_dimensionAffectingProps"})},setPathInfo:function(){var e=this.path;e&&(e.segmentsInfo=s.util.getPathSegmentsInfo(e.path))},getMeasuringContext:function(){return s._measuringContext||(s._measuringContext=this.canvas&&this.canvas.contextCache||s.util.createCanvasElement().getContext("2d")),s._measuringContext},_splitText:function(){var e=this._splitTextIntoLines(this.text);return this.textLines=e.lines,this._textLines=e.graphemeLines,this._unwrappedTextLines=e._unwrappedLines,this._text=e.graphemeText,e},initDimensions:function(){if(!this.__skipDimension){if(this._splitText(),this._clearCache(),this.path){var e=this.getHeightOfLine(0)*1.1;this.width=this.path.width+e,this.height=this.path.height+e}else this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,this.height=this.calcTextHeight();this.textAlign.indexOf("justify")!==-1&&this.enlargeSpaces(),this.saveState({propertySet:"_dimensionAffectingProps"})}},enlargeSpaces:function(){for(var e,r,t,n,a,i,h,u=0,d=this._textLines.length;u<d;u++)if(!(this.textAlign!=="justify"&&(u===d-1||this.isEndOfWrapping(u)))&&(n=0,a=this._textLines[u],r=this.getLineWidth(u),r<this.width&&(h=this.textLines[u].match(this._reSpacesAndTabs)))){t=h.length,e=(this.width-r)/t;for(var g=0,m=a.length;g<=m;g++)i=this.__charBounds[u][g],this._reSpaceAndTab.test(a[g])?(i.width+=e,i.kernedWidth+=e,i.left+=n,n+=e):i.left+=n}},isEndOfWrapping:function(e){return e===this._textLines.length-1},missingNewlineOffset:function(){return 1},toString:function(){return"#<fabric.Text ("+this.complexity()+'): { "text": "'+this.text+'", "fontFamily": "'+this.fontFamily+'" }>'},_getCacheCanvasDimensions:function(){var e=this.callSuper("_getCacheCanvasDimensions"),r=this.fontSize;return e.width+=r*e.zoomX,e.height+=r*e.zoomY,e},_render:function(e){var r=this.path;r&&!r.isNotVisible()&&r._render(e),this._setTextStyles(e),this._renderTextLinesBackground(e),this._renderTextDecoration(e,"underline"),this._renderText(e),this._renderTextDecoration(e,"overline"),this._renderTextDecoration(e,"linethrough")},_renderText:function(e){this.paintFirst==="stroke"?(this._renderTextStroke(e),this._renderTextFill(e)):(this._renderTextFill(e),this._renderTextStroke(e))},_setTextStyles:function(e,r,t){if(e.textBaseline="alphabetic",this.path)switch(this.pathAlign){case"center":e.textBaseline="middle";break;case"ascender":e.textBaseline="top";break;case"descender":e.textBaseline="bottom";break}e.font=this._getFontDeclaration(r,t)},calcTextWidth:function(){for(var e=this.getLineWidth(0),r=1,t=this._textLines.length;r<t;r++){var n=this.getLineWidth(r);n>e&&(e=n)}return e},_renderTextLine:function(e,r,t,n,a,i){this._renderChars(e,r,t,n,a,i)},_renderTextLinesBackground:function(e){if(!(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor"))){for(var r,t,n=e.fillStyle,a,i,h=this._getLeftOffset(),u=this._getTopOffset(),d=0,g=0,m,p,C=this.path,T,j=0,W=this._textLines.length;j<W;j++){if(r=this.getHeightOfLine(j),!this.textBackgroundColor&&!this.styleHas("textBackgroundColor",j)){u+=r;continue}a=this._textLines[j],t=this._getLineLeftOffset(j),g=0,d=0,i=this.getValueOfPropertyAt(j,0,"textBackgroundColor");for(var V=0,et=a.length;V<et;V++)m=this.__charBounds[j][V],p=this.getValueOfPropertyAt(j,V,"textBackgroun
432dColor"),C?(e.save(),e.translate(m.renderLeft,m.renderTop),e.rotate(m.angle),e.fillStyle=p,p&&e.fillRect(-m.width/2,-r/this.lineHeight*(1-this._fontSizeFraction),m.width,r/this.lineHeight),e.restore()):p!==i?(T=h+t+d,this.direction==="rtl"&&(T=this.width-T-g),e.fillStyle=i,i&&e.fillRect(T,u,g,r/this.lineHeight),d=m.left,g=m.width,i=p):g+=m.kernedWidth;p&&!C&&(T=h+t+d,this.direction==="rtl"&&(T=this.width-T-g),e.fillStyle=p,e.fillRect(T,u,g,r/this.lineHeight)),u+=r}e.fillStyle=n,this._removeShadow(e)}},getFontCache:function(e){var r=e.fontFamily.toLowerCase();s.charWidthsCache[r]||(s.charWidthsCache[r]={});var t=s.charWidthsCache[r],n=e.fontStyle.toLowerCase()+"_"+(e.fontWeight+"").toLowerCase();return t[n]||(t[n]={}),t[n]},_measureChar:function(e,r,t,n){var a=this.getFontCache(r),i=this._getFontDeclaration(r),h=this._getFontDeclaration(n),u=t+e,d=i===h,g,m,p,C=r.fontSize/this.CACHE_FONT_SIZE,T;if(t&&a[t]!==void 0&&(p=a[t]),a[e]!==void 0&&(T=g=a[e]),d&&a[u]!==void 0&&(m=a[u],T=m-p),g===void 0||p===void 0||m===void 0){var j=this.getMeasuringContext();this._setTextStyles(j,r,!0)}return g===void 0&&(T=g=j.measureText(e).width,a[e]=g),p===void 0&&d&&t&&(p=j.measureText(t).width,a[t]=p),d&&m===void 0&&(m=j.measureText(u).width,a[u]=m,T=m-p),{width:g*C,kernedWidth:T*C}},getHeightOfChar:function(e,r){return this.getValueOfPropertyAt(e,r,"fontSize")},measureLine:function(e){var r=this._measureLine(e);return this.charSpacing!==0&&(r.width-=this._getWidthOfCharSpacing()),r.width<0&&(r.width=0),r},_measureLine:function(e){var r=0,t,n,a=this._textLines[e],i,h,u=0,d=new Array(a.length),g=0,m,p,C=this.path,T=this.pathSide==="right";for(this.__charBounds[e]=d,t=0;t<a.length;t++)n=a[t],h=this._getGraphemeBox(n,e,t,i),d[t]=h,r+=h.kernedWidth,i=n;if(d[t]={left:h?h.left+h.width:0,width:0,kernedWidth:0,height:this.fontSize},C){switch(p=C.segmentsInfo[C.segmentsInfo.length-1].length,m=s.util.getPointOnPath(C.path,0,C.segmentsInfo),m.x+=C.pathOffset.x,m.y+=C.pathOffset.y,this.textAlign){case"left":g=T?p-r:0;break;case"center":g=(p-r)/2;break;case"right":g=T?0:p-r;break}for(g+=this.pathStartOffset*(T?-1:1),t=T?a.length-1:0;T?t>=0:t<a.length;T?t--:t++)h=d[t],g>p?g%=p:g<0&&(g+=p),this._setGraphemeOnPath(g,h,m),g+=h.kernedWidth}return{width:r,numOfSpaces:u}},_setGraphemeOnPath:function(e,r,t){var n=e+r.kernedWidth/2,a=this.path,i=s.util.getPointOnPath(a.path,n,a.segmentsInfo);r.renderLeft=i.x-t.x,r.renderTop=i.y-t.y,r.angle=i.angle+(this.pathSide==="right"?Math.PI:0)},_getGraphemeBox:function(e,r,t,n,a){var i=this.getCompleteStyleDeclaration(r,t),h=n?this.getCompleteStyleDeclaration(r,t-1):{},u=this._measureChar(e,i,n,h),d=u.kernedWidth,g=u.width,m;this.charSpacing!==0&&(m=this._getWidthOfCharSpacing(),g+=m,d+=m);var p={width:g,left:0,height:i.fontSize,kernedWidth:d,deltaY:i.deltaY};if(t>0&&!a){var C=this.__charBounds[r][t-1];p.left=C.left+C.width+u.kernedWidth-u.width}return p},getHeightOfLine:function(e){if(this.__lineHeights[e])return this.__lineHeights[e];for(var r=this._textLines[e],t=this.getHeightOfChar(e,0),n=1,a=r.length;n<a;n++)t=Math.max(this.getHeightOfChar(e,n),t);return this.__lineHeights[e]=t*this.lineHeight*this._fontSizeMult},calcTextHeight:function(){for(var e,r=0,t=0,n=this._textLines.length;t<n;t++)e=this.getHeightOfLine(t),r+=t===n-1?e/this.lineHeight:e;return r},_getLeftOffset:function(){return this.direction==="ltr"?-this.width/2:this.width/2},_getTopOffset:function(){return-this.height/2},_renderTextCommon:function(e,r){e.save();for(var t=0,n=this._getLeftOffset(),a=this._getTopOffset(),i=0,h=this._textLines.length;i<h;i++){var u=this.getHeightOfLine(i),d=u/this.lineHeight,g=this._getLineLeftOffset(i);this._renderTextLine(r,e,this._textLines[i],n+g,a+t+d,i),t+=u}e.restore()},_renderTextFill:function(e){!this.fill&&!this.styleHas("fill")||this._renderTextCommon(e,"fillText")},_renderTextStroke:function(e){(!this.stroke||this.strokeWidth===0)&&this.isEmptyStyles()||(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e),e.save(),this._setLineDash(e,this.strokeDashArray),e.beginPath(),this._renderTextCommon(e,"strokeText"),e.closePath(),e.restore(
432))},_renderChars:function(e,r,t,n,a,i){var h=this.getHeightOfLine(i),u=this.textAlign.indexOf("justify")!==-1,d,g,m="",p,C=0,T,j=this.path,W=!u&&this.charSpacing===0&&this.isEmptyStyles(i)&&!j,V=this.direction==="ltr",et=this.direction==="ltr"?1:-1,nt,Z=r.canvas.getAttribute("dir");if(r.save(),Z!==this.direction&&(r.canvas.setAttribute("dir",V?"ltr":"rtl"),r.direction=V?"ltr":"rtl",r.textAlign=V?"left":"right"),a-=h*this._fontSizeFraction/this.lineHeight,W){this._renderChar(e,r,i,0,t.join(""),n,a,h),r.restore();return}for(var tt=0,lt=t.length-1;tt<=lt;tt++)T=tt===lt||this.charSpacing||j,m+=t[tt],p=this.__charBounds[i][tt],C===0?(n+=et*(p.kernedWidth-p.width),C+=p.width):C+=p.kernedWidth,u&&!T&&this._reSpaceAndTab.test(t[tt])&&(T=!0),T||(d=d||this.getCompleteStyleDeclaration(i,tt),g=this.getCompleteStyleDeclaration(i,tt+1),T=s.util.hasStyleChanged(d,g,!1)),T&&(j?(r.save(),r.translate(p.renderLeft,p.renderTop),r.rotate(p.angle),this._renderChar(e,r,i,tt,m,-C/2,0,h),r.restore()):(nt=n,this._renderChar(e,r,i,tt,m,nt,a,h)),m="",d=g,n+=et*C,C=0);r.restore()},_applyPatternGradientTransformText:function(e){var r=s.util.createCanvasElement(),t,n=this.width+this.strokeWidth,a=this.height+this.strokeWidth;return r.width=n,r.height=a,t=r.getContext("2d"),t.beginPath(),t.moveTo(0,0),t.lineTo(n,0),t.lineTo(n,a),t.lineTo(0,a),t.closePath(),t.translate(n/2,a/2),t.fillStyle=e.toLive(t),this._applyPatternGradientTransform(t,e),t.fill(),t.createPattern(r,"no-repeat")},handleFiller:function(e,r,t){var n,a;return t.toLive?t.gradientUnits==="percentage"||t.gradientTransform||t.patternTransform?(n=-this.width/2,a=-this.height/2,e.translate(n,a),e[r]=this._applyPatternGradientTransformText(t),{offsetX:n,offsetY:a}):(e[r]=t.toLive(e,this),this._applyPatternGradientTransform(e,t)):(e[r]=t,{offsetX:0,offsetY:0})},_setStrokeStyles:function(e,r){return e.lineWidth=r.strokeWidth,e.lineCap=this.strokeLineCap,e.lineDashOffset=this.strokeDashOffset,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,this.handleFiller(e,"strokeStyle",r.stroke)},_setFillStyles:function(e,r){return this.handleFiller(e,"fillStyle",r.fill)},_renderChar:function(e,r,t,n,a,i,h){var u=this._getStyleDeclaration(t,n),d=this.getCompleteStyleDeclaration(t,n),g=e==="fillText"&&d.fill,m=e==="strokeText"&&d.stroke&&d.strokeWidth,p,C;!m&&!g||(r.save(),g&&(p=this._setFillStyles(r,d)),m&&(C=this._setStrokeStyles(r,d)),r.font=this._getFontDeclaration(d),u&&u.textBackgroundColor&&this._removeShadow(r),u&&u.deltaY&&(h+=u.deltaY),g&&r.fillText(a,i-p.offsetX,h-p.offsetY),m&&r.strokeText(a,i-C.offsetX,h-C.offsetY),r.restore())},setSuperscript:function(e,r){return this._setScript(e,r,this.superscript)},setSubscript:function(e,r){return this._setScript(e,r,this.subscript)},_setScript:function(e,r,t){var n=this.get2DCursorLocation(e,!0),a=this.getValueOfPropertyAt(n.lineIndex,n.charIndex,"fontSize"),i=this.getValueOfPropertyAt(n.lineIndex,n.charIndex,"deltaY"),h={fontSize:a*t.size,deltaY:i+a*t.baseline};return this.setSelectionStyles(h,e,r),this},_getLineLeftOffset:function(e){var r=this.getLineWidth(e),t=this.width-r,n=this.textAlign,a=this.direction,h,i=0,h=this.isEndOfWrapping(e);return n==="justify"||n==="justify-center"&&!h||n==="justify-right"&&!h||n==="justify-left"&&!h?0:(n==="center"&&(i=t/2),n==="right"&&(i=t),n==="justify-center"&&(i=t/2),n==="justify-right"&&(i=t),a==="rtl"&&(i-=t),i)},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]},_shouldClearDimensionCache:function(){var e=this._forceClearCache;return e||(e=this.hasStateChanged("_dimensionAffectingProps")),e&&(this.dirty=!0,this._forceClearCache=!1),e},getLineWidth:function(e){if(this.__lineWidths[e]!==void 0)return this.__lineWidths[e];var r=this.measureLine(e),t=r.width;return this.__lineWidths[e]=t,t},_getWidthOfCharSpacing:function(){return this.charSpacing!==0?this.fontSize*this.charSpacing/1e3:0},getValueOfPropertyAt:function(e,r,t){var n=this._getStyleDeclaration(e,r);return n&&typeof n[t]<"u"?n[t]:this[t]},_renderTextDecoration:function(e,r){if(!(!this[r]&&!this.styleHas(r))){e.save(),(r==="overline"||r==="linethrough")&&this._removeShadow(e);for(var t,n,a,i,h,u,d,g,m=this._getLeftOffset(),p=this._getTopOffset(),C,T,j,W,V,et,nt,Z,tt=this.path,lt=this._getWidthOfCharSpacing(),ht=this.offsets[r],it=0,v=this._textLines.length;it<v;it++){if(t=this.getHeightOfLine(it),!this[r]&&!this.styleHas(r,it)){p+=t;continue}d=this._textLines[it],et=t/this.lineHeight,i=this._getLineLeftOffset(it),T=0,j=0,g=this.getValueOfPropertyAt(it,0,r),Z=this.getValueOfPropertyAt(it,0,"fill"),C=p+et*(1-this._fontSizeFraction),n=this.getHeightOfChar(it,0),h=this.getValueOfPropertyAt(it,0,"deltaY");for(var S=0,w=d.length;S<w;S++)if(W=this.__charBounds[it][S],V=this.getValueOfPropertyAt(it,S,r),nt=this.getValueOfPropertyAt(it,S,"fill"),a=this.getHeightOfChar(it,S),u=this.getValueOfPropertyAt(it,S,"deltaY"),tt&&V&&nt)e.save(),e.fillStyle=Z,e.translate(W.renderLeft,W.renderTop),e.rotate(W.angle),e.fillRect(-W.kernedWidth/2,ht*a+u,W.kernedWidth,this.fontSize/15),e.restore(
432);else if((V!==g||nt!==Z||a!==n||u!==h)&&j>0){var b=m+i+T;this.direction==="rtl"&&(b=this.width-b-j),g&&Z&&(e.fillStyle=Z,e.fillRect(b,C+ht*n+h,j,this.fontSize/15)),T=W.left,j=W.width,g=V,Z=nt,n=a,h=u}else j+=W.kernedWidth;var b=m+i+T;this.direction==="rtl"&&(b=this.width-b-j),e.fillStyle=nt,V&&nt&&e.fillRect(b,C+ht*n+h,j-lt,this.fontSize/15),p+=t}e.restore()}},_getFontDeclaration:function(e,r){var t=e||this,n=this.fontFamily,a=s.Text.genericFonts.indexOf(n.toLowerCase())>-1,i=n===void 0||n.indexOf("'")>-1||n.indexOf(",")>-1||n.indexOf('"')>-1||a?t.fontFamily:'"'+t.fontFamily+'"';return[s.isLikelyNode?t.fontWeight:t.fontStyle,s.isLikelyNode?t.fontStyle:t.fontWeight,r?this.CACHE_FONT_SIZE+"px":t.fontSize+"px",i].join(" ")},render:function(e){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",e)))},_splitTextIntoLines:function(e){for(var r=e.split(this._reNewline),t=new Array(r.length),n=[`
433`],a=[],i=0;i<r.length;i++)t[i]=s.util.string.graphemeSplit(r[i]),a=a.concat(t[i],n);return a.pop(),{_unwrappedLines:t,lines:r,graphemeText:a,graphemeLines:t}},toObject:function(e){var r=o.concat(e),t=this.callSuper("toObject",r);return t.styles=s.util.stylesToArray(this.styles,this.text),t.path&&(t.path=this.path.toObject()),t},set:function(e,r){this.callSuper("set",e,r);var t=!1,n=!1;if(typeof e=="object")for(var a in e)a==="path"&&this.setPathInfo(),t=t||this._dimensionAffectingProps.indexOf(a)!==-1,n=n||a==="path";else t=this._dimensionAffectingProps.indexOf(e)!==-1,n=e==="path";return n&&this.setPathInfo(),t&&(this.initDimensions(),this.setCoords()),this},complexity:function(){return 1}}),s.Text.ATTRIBUTE_NAMES=s.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size letter-spacing text-decoration text-anchor".split(" ")),s.Text.DEFAULT_SVG_FONT_SIZE=16,s.Text.fromElement=function(e,r,t){if(!e)return r(null);var n=s.parseAttributes(e,s.Text.ATTRIBUTE_NAMES),a=n.textAnchor||"left";if(t=s.util.object.extend(t?l(t):{},n),t.top=t.top||0,t.left=t.left||0,n.textDecoration){var i=n.textDecoration;i.indexOf("underline")!==-1&&(t.underline=!0),i.indexOf("overline")!==-1&&(t.overline=!0),i.indexOf("line-through")!==-1&&(t.linethrough=!0),delete t.textDecoration}"dx"in n&&(t.left+=n.dx),"dy"in n&&(t.top+=n.dy),"fontSize"in t||(t.fontSize=s.Text.DEFAULT_SVG_FONT_SIZE);var h="";"textContent"in e?h=e.textContent:"firstChild"in e&&e.firstChild!==null&&"data"in e.firstChild&&e.firstChild.data!==null&&(h=e.firstChild.data),h=h.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var u=t.strokeWidth;t.strokeWidth=0;var d=new s.Text(h,t),g=d.getScaledHeight()/d.height,m=(d.height+d.strokeWidth)*d.lineHeight-d.height,p=m*g,C=d.getScaledHeight()+p,T=0;a==="center"&&(T=d.getScaledWidth()/2),a==="right"&&(T=d.getScaledWidth()),d.set({left:d.left-T,top:d.top-(C-d.fontSize*(.07+d._fontSizeFraction))/d.lineHeight,strokeWidth:typeof u<"u"?u:1}),r(d)},s.Text.fromObject=function(e,r){var t=l(e),n=e.path;return delete t.path,s.Object._fromObject("Text",t,function(a){a.styles=s.util.stylesFromArray(e.styles,e.text),n?s.Object._fromObject("Path",n,function(i){a.set("path",i),r(a)},"path"):r(a)},"text")},s.Text.genericFonts=["sans-serif","serif","cursive","fantasy","monospace"],s.util.createAccessors&&s.util.createAccessors(s.Text)}(R),function(){f.util.object.extend(f.Text.prototype,{isEmptyStyles:function(c){if(!this.styles||typeof c<"u"&&!this.styles[c])return!0;var s=typeof c>"u"?this.styles:{line:this.styles[c]};for(var l in s)for(var o in s[l])for(var e in s[l][o])return!1;return!0},styleHas:function(c,s){if(!this.styles||!c||c===""||typeof s<"u"&&!this.styles[s])return!1;var l=typeof s>"u"?this.styles:{0:this.styles[s]};for(var o in l)for(var e in l[o])if(typeof l[o][e][c]<"u")return!0;return!1},cleanStyle:function(c){if(!this.styles||!c||c==="")return!1;var s=this.styles,l=0,o,e,r=!0,t=0,n;for(var a in s){o=0;for(var i in s[a]){var n=s[a][i],h=n.hasOwnProperty(c);l++,h?(e?n[c]!==e&&(r=!1):e=n[c],n[c]===this[c]&&delete n[c]):r=!1,Object.keys(n).length!==0?o++:delete s[a][i]}o===0&&delete s[a]}for(var u=0;u<this._textLines.length;u++)t+=this._textLines[u].length;r&&l===t&&(this[c]=e,this.removeStyle(c))},removeStyle:function(c){if(!(!this.styles||!c||c==="")){var s=this.styles,l,o,e;for(o in s){l=s[o];for(e in l)delete l[e][c],Object.keys(l[e]).length===0&&delete l[e];Object.keys(l).length===0&&delete s[o]}}},_extendStyles:function(c,s){var l=this.get2DCursorLocation(c);this._getLineStyle(l.lineIndex)||this._setLineStyle(l.lineIndex),this._getStyleDeclaration(l.lineIndex,l.charIndex)||this._setStyleDeclaration(l.lineIndex,l.charIndex,{}),f.util.object.extend(this._getStyleDeclaration(l.lineIndex,l.charIndex),s)},get2DCursorLocation:function(c,s){typeof c>"u"&&(c=this.selectionStart);for(var l=s?this._unwrappedTextLines:this._textLines,o=l.length,e=0;e<o;e++){if(c<=l[e].length)return{lineIndex:e,charIndex:c};c-=l[e].length+this.missingNewlineOffset(e,s)}return{lineIndex:e-1,charIndex:l[e-1].length<c?l[e-1].length:c}},getSelectionStyles:function(c,s,l){typeof c>"u"&&(c=this.selectionStart||0),typeof s>"u"&&(s=this.selectionEnd||c);for(var o=[],e=c;e<s;e++)o.push(this.getStyleAtPosition(e,l));return o},getStyleAtPosition:function(c,s){var l=this.get2DCursorLocation(c),o=s?this.getCompleteStyleDeclaration(l.lineIndex,l.charIndex):this._getStyleDeclaration(l.lineIndex,l.charIndex);return o||{}},setSelectionStyles:function(c,s,l){typeof s>"u"&&(s=this.selectionStart||0),typeof l>"u"&&(l=this.selectionEnd||s);for(var o=s;o<l;o++)this._extendStyles(o,c);return this._forceClearCache=!0,this},_getStyleDeclaration:function(c,s){var l=this.styles&&this.styles[c];return l?l[s]:null},getCompleteStyleDeclaration:function(c,s){for(var l=this._getStyleDeclaration(c,s)||{},o={},e,r=0;r<this._styleProperties.length;r++)e=this._styleProperties[r],o[e]=typeof l[e]>"u"?this[e]:l[e];return o},_setStyleDeclaration:function(c,s,l){this.styles[c][s]=l},_deleteStyleDeclaration:function(c,s){delete this.styles[c][s]},_getLineStyle:function(c){return!!this.styles[c]},_setLineStyle:function(c){this.styles[c]={}},_deleteLineStyle:function(c){delete this.styles[c]}})}(),function(){function c(s){s.textDecoration&&(s.textDecoration.indexOf("underline")>-1&&(s.underline=!0),s.textDecoration.indexOf("line-through")>-1&&(s.linethrough=!0),s.textDecoration.indexOf("overline")>-1&&(s.overline=!0),delete s.textDecoration)}f.IText=f.util.createClass(f.Text,f.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",curs
vendor: 27,026 bytes, lines 433-434
433orDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(s,l){this.callSuper("initialize",s,l),this.initBehavior()},setSelectionStart:function(s){s=Math.max(s,0),this._updateAndFire("selectionStart",s)},setSelectionEnd:function(s){s=Math.min(s,this.text.length),this._updateAndFire("selectionEnd",s)},_updateAndFire:function(s,l){this[s]!==l&&(this._fireSelectionChanged(),this[s]=l),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(s){this.clearContextTop(),this.callSuper("render",s),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(s){this.callSuper("_render",s)},clearContextTop:function(s){if(!(!this.isEditing||!this.canvas||!this.canvas.contextTop)){var l=this.canvas.contextTop,o=this.canvas.viewportTransform;l.save(),l.transform(o[0],o[1],o[2],o[3],o[4],o[5]),this.transform(l),this._clearTextArea(l),s||l.restore()}},renderCursorOrSelection:function(){if(!(!this.isEditing||!this.canvas||!this.canvas.contextTop)){var s=this._getCursorBoundaries(),l=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(s,l):this.renderSelection(s,l),l.restore()}},_clearTextArea:function(s){var l=this.width+4,o=this.height+4;s.clearRect(-l/2,-o/2,l,o)},_getCursorBoundaries:function(s){typeof s>"u"&&(s=this.selectionStart);var l=this._getLeftOffset(),o=this._getTopOffset(),e=this._getCursorBoundariesOffsets(s);return{left:l,top:o,leftOffset:e.left,topOffset:e.top}},_getCursorBoundariesOffsets:function(s){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var l,o,e,r=0,t=0,n,a=this.get2DCursorLocation(s);e=a.charIndex,o=a.lineIndex;for(var i=0;i<o;i++)r+=this.getHeightOfLine(i);l=this._getLineLeftOffset(o);var h=this.__charBounds[o][e];return h&&(t=h.left),this.charSpacing!==0&&e===this._textLines[o].length&&(t-=this._getWidthOfCharSpacing()),n={top:r,left:l+(t>0?t:0)},this.direction==="rtl"&&(n.left*=-1),this.cursorOffsetCache=n,this.cursorOffsetCache},renderCursor:function(s,l){var o=this.get2DCursorLocation(),e=o.lineIndex,r=o.charIndex>0?o.charIndex-1:0,t=this.getValueOfPropertyAt(e,r,"fontSize"),n=this.scaleX*this.canvas.getZoom(),a=this.cursorWidth/n,i=s.topOffset,h=this.getValueOfPropertyAt(e,r,"deltaY");i+=(1-this._fontSizeFraction)*this.getHeightOfLine(e)/this.lineHeight-t*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(s,l),l.fillStyle=this.cursorColor||this.getValueOfPropertyAt(e,r,"fill"),l.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,l.fillRect(s.left+s.leftOffset-a/2,i+s.top+h,a,t)},renderSelection:function(s,l){for(var o=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,e=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,r=this.textAlign.indexOf("justify")!==-1,t=this.get2DCursorLocation(o),n=this.get2DCursorLocation(e),a=t.lineIndex,i=n.lineIndex,h=t.charIndex<0?0:t.charIndex,u=n.charIndex<0?0:n.charIndex,d=a;d<=i;d++){var g=this._getLineLeftOffset(d)||0,m=this.getHeightOfLine(d),p=0,C=0,T=0;if(d===a&&(C=this.__charBounds[a][h].left),d>=a&&d<i)T=r&&!this.isEndOfWrapping(d)?this.width:this.getLineWidth(d)||5;else if(d===i)if(u===0)T=this.__charBounds[i][u].left;else{var j=this._getWidthOfCharSpacing();T=this.__charBounds[i][u-1].left+this.__charBounds[i][u-1].width-j}p=m,(this.lineHeight<1||d===i&&this.lineHeight>1)&&(m/=this.lineHeight);var W=s.left+g+C,V=T-C,et=m,nt=0;this.inCompositionMode?(l.fillStyle=this.compositionColor||"black",et=1,nt=m):l.fillStyle=this.selectionColor,this.direction==="rtl"&&(W=this.width-W-V),l.fillRect(W,s.top+s.topOffset+nt,V,et),s.topOffset+=p}},getCurrentCharFontSize:function(){var s=this._getCurrentCharIndex();return this.getValueOfPropertyAt(s.l,s.c,"fontSize")},getCurrentCharColor:function(){var s=this._getCurrentCharIndex();return this.getValueOfPropertyAt(s.l,s.c,"fill")},_getCurrentCharIndex:function(){var s=this.get2DCursorLocation(this.selectionStart,!0),l=s.charIndex>0?s.charIndex-1:0;return{l:s.lineIndex,c:l}}}),f.IText.fromObject=function(s,l){var o=f.util.stylesFromArray(s.styles,s.text),e=Object.assign({},s,{styles:o});if(delete e.path,c(e),e.styles)for(var r in e.styles)for(var t in e.styles[r])c(e.styles[r][t]);f.Object._fromObject("IText",e,function(n){s.path?f.Object._fromObject("Path",s.path,function(a){n.set("path",a),l(n)},"path"):l(n)},"text")}}(),function(){var c=f.util.object.clone;f.util.object.extend(f.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var s=this;this.on("added",function(){var l=s.canvas;l&&(l._hasITextHandlers||(l._hasITextHandlers=!0,s._initCanvasHandlers(l)),l._iTextInstances=l._iTextInstances||[],l._iTextInstances.push(s))})},initRemovedHandler:function(){var s=this;this.on("removed",function(){var l=s.canvas;l&&(l._iTextInstances=l._iTextInstances||[],f.util.removeFromArray(l._iTextInstances,s),l._iTextInstances.length===0&&(l._hasITextHandlers=!1,s._removeCanvasHandlers(l)))})},_initCanvasHandlers:function(s){s._mouseUpITextHandler=function(){s._iTextInstances&&s._iTextInstances.forEach(function(l){l.__isMousedown=!1})},s.on("mouse:up",s._mouseUpITextHandler)},_removeCanvasHandlers:function(s){s.off("mouse:up",s._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(s,l,o,e){var r;return r={isAborted:!1,abort:function(){this.isAborted=!0}},s.animate("_currentCursorOpacity",l,{duration:o,onComplete:function(){r.isAborted||s[e]()},onChange:function(){s.canvas&&s.selectionStart===s.selectionEnd&&s.renderCursorOrSelection()},abort:function(){return r.isAborted}}),r},_onTickComplete:function(){var s=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){s._currentTickCompleteState=s._animateCursor(s,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(s){var l=this,o=s?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout(function(){l._tick()},o)},abortCursorAnimation:function(){var s=this._currentTickState||this._currentTickCompleteState,l=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,s&&l&&l.clearContext(l.contextTop||l.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(s){var l=0,o=s-1;if(this._reSpace.test(this._text[o]))for(;this._reSpace.test(this._text[o]);)l++,o--;for(;/\S/.test(this._text[o])&&o>-1;)l++,o--;return s-l},findWordBoundaryRight:function(s){var l=0,o=s;if(this._reSpace.test(this._text[o]))for(;this._reSpace.test(this._text[o]);)l++,o++;for(;/\S/.test(this._text[o])&&o<this._text.length;)l++,o++;return s+l},findLineBoundaryLeft:function(s){for(var l=0,o=s-1;!/\n/.test(this._text[o])&&o>-1;)l++,o--;return s-l},findLineBoundaryRight:function(s){for(var l=0,o=s;!/\n/.test(this._text[o])&&o<this._text.length;)l++,o++;return s+l},searchWordBoundary:function(s,l){for(var o=this._text,e=this._reSpace.test(o[s])?s-1:s,r=o[e],t=f.reNonWord;!t.test(r)&&e>0&&e<o.length;)e+=l,r=o[e];return t.test(r)&&(e+=l===1?0:1),e},selectWord:function(s){s=s||this.selectionStart;var l=this.searchWordBoundary(s,-1),o=this.searchWordBoundary(s,1);this.selectionStart=l,this.selectionEnd=o,this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()},selectLine:function(s){s=s||this.selectionStart;var l=this.findLineBoundaryLeft(s),o=this.findLineBoundaryRight(s);return this.selectionStart=l,this.selectionEnd=o,this._fireSelectionChanged(),this._updateTextarea(),this},enterEditing:function(s){if(!(this.isEditing||!this.editable))return this.canvas&&(this.canvas.calcOffset(),this.exitEditingOnOthers(this.canvas)),this.isEditing=!0,this.initHiddenTextarea(s),this.hiddenTextarea.focus(),this.hiddenTextarea.value=this.text,this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._textBeforeEdit=this.text,this._tick(),this.fire("editing:entered"),this._fireSelectionChanged(),this.canvas?(this.canvas.fire("text:editing:entered",{target:this}),this.initMouseMoveHandler(),this.canvas.requestRenderAll(),this):this},exitEditingOnOthers:function(s){s._iTextInstances&&s._iTextInstances.forEach(function(l){l.selected=!1,l.isEditing&&l.exitEditing()})},initMouseMoveHandler:function(){this.canvas.on("mouse:move",this.mouseMoveHandler)},mouseMoveHandler:function(s){if(!(!this.__isMousedown||!this.isEditing)){document.activeElement!==this.hiddenTextarea&&this.hiddenTextarea.focus();var l=this.getSelectionStartFromPointer(s.e),o=this.selectionStart,e=this.selectionEnd;(l!==this.__selectionStartOnMouseDown||o===e)&&(o===l||e===l)||(l>this.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=l):(this.selectionStart=l,this.selectionEnd=this.__selectionStartOnMouseDown),(this.selectionStart!==o||this.selectionEnd!==e)&&(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(s,l,o){var e=o.slice(0,s),r=f.util.string.graphemeSplit(e).length;if(s===l)return{selectionStart:r,selectionEnd:r};var t=o.slice(s,l),n=f.util.string.graphemeSplit(t).length;return{selectionStart:r,selectionEnd:r+n}},fromGraphemeToStringSelection:function(s,l,o){var e=o.slice(0,s),r=e.join("").length;if(s===l)return{selectionStart:r,selectionEnd:r};var t=o.slice(s,l),n=t.join("").length;return{selectionStart:r,selectionEnd:r+n}},_updateTextarea:function(){if(this.cursorOffsetCache={},!!this.hiddenTextarea){if(!this.inCompositionMode){var s=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=s.selectionStart,this.hiddenTextarea.selectionEnd=s.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var s=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=s.selectionEnd,this.inCompositionMode||(this.selectionStart=s.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var s=this._calcTextareaPosition();this.hiddenTextarea.style.left=s.left,this.hiddenTextarea.style.top=s.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var s=this.inCompositionMode?this.compositionStart:this.selectionStart,l=this._getCursorBoundaries(s),o=this.get2DCursorLocation(s),e=o.lineIndex,r=o.charIndex,t=this.getValueOfPropertyAt(e,r,"fontSize")*this.lineHeight,n=l.leftOffset,a=this.calcTransformMatrix(),i={x:l.left+n,y:l.top+l.topOffset+t},h=this.canvas.getRetinaScaling(),u=this.canvas.upperCanvasEl,d=u.width/h,g=u.height/h,m=d-t,p=g-t,C=u.clientWidth/d,T=u.clientHeight/g;return i=f.util.transformPoint(i,a),i=f.util.transformPoint(i,this.canvas.viewportTransform),i.x*=C,i.y*=T,i.x<0&&(i.x=0),i.x>m&&(i.x=m),i.y<0&&(i.y=0),i.y>p&&(i.y=p),i.x+=this.canvas._offset.left,i.y+=this.canvas._offset.top,{left:i.x+"px",top:i.y+"px",fontSize:t+"px",charHeight:t}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var s=this._textBeforeEdit!==this.text,l=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,l&&(l.blur&&l.blur(),l.parentNode&&l.parentNode.removeChild(l)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),s&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),s&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var s in this.styles)this._textLines[s]||delete this.styles[s]},removeStyleFromTo:function(s,l){var o=this.get2DCursorLocation(s,!0),e=this.get2DCursorLocation(l,!0),r=o.lineIndex,t=o.charIndex,n=e.lineIndex,a=e.charIndex,i,h;if(r!==n){if(this.styles[r])for(i=t;i<this._unwrappedTextLines[r].length;i++)delete this.styles[r][i];if(this.styles[n])for(i=a;i<this._unwrappedTextLines[n].length;i++)h=this.styles[n][i],h&&(this.styles[r]||(this.styles[r]={}),this.styles[r][t+i-a]=h);for(i=r+1;i<=n;i++)delete this.styles[i];this.shiftLineStyles(n,r-n)}else if(this.styles[r]){h=this.styles[r];var u=a-t,d,g;for(i=t;i<a;i++)delete h[i];for(g in this.styles[r])d=parseInt(g,10),d>=a&&(h[d-u]=h[g],delete h[g])}},shiftLineStyles:function(s,l){var o=c(this.styles);for(var e in this.styles){var r=parseInt(e,10);r>s&&(this.styles[r+l]=o[r],o[r-l]||delete this.styles[r])}},restartCursorIfNeeded:function(){(!this._currentTickState||this._currentTickState.isAborted||!this._currentTickCompleteState||this._currentTickCompleteState.isAborted)&&this.initDelayedCursor()},insertNewlineStyleObject:function(s,l,o,e){var r,t={},n=!1,a=this._unwrappedTextLines[s].length,i=a===l;o||(o=1),this.shiftLineStyles(s,o),this.styles[s]&&(r=this.styles[s][l===0?l:l-1]);for(var h in this.styles[s]){var u=parseInt(h,10);u>=l&&(n=!0,t[u-l]=this.styles[s][h],i&&l===0||delete this.styles[s][h])}var d=!1;for(n&&!i&&(this.styles[s+o]=t,d=!0),(d||a>l)&&o--;o>0;)e&&e[o-1]?this.styles[s+o]={0:c(e[o-1])}:r?this.styles[s+o]={0:c(r)}:delete this.styles[s+o],o--;this._forceClearCache=!0},insertCharStyleObject:function(s,l,o,e){this.styles||(this.styles={});var r=this.styles[s],t=r?c(r):{};o||(o=1);for(var n in t){var a=parseInt(n,10);a>=l&&(r[a+o]=t[a],t[a-o]||delete r[a])}if(this._forceClearCache=!0,e){for(;o--;)Object.keys(e[o]).length&&(this.styles[s]||(this.styles[s]={}),this.styles[s][l+o]=c(e[o]));return}if(r)for(var i=r[l?l-1:1];i&&o--;)this.styles[s][l+o]=c(i)},insertNewStyleBlock:function(s,l,o){for(var e=this.get2DCursorLocation(l,!0),r=[0],t=0,n=0;n<s.length;n++)s[n]===`
434`?(t++,r[t]=0):r[t]++;r[0]>0&&(this.insertCharStyleObject(e.lineIndex,e.charIndex,r[0],o),o=o&&o.slice(r[0]+1)),t&&this.insertNewlineStyleObject(e.lineIndex,e.charIndex+r[0],t);for(var n=1;n<t;n++)r[n]>0?this.insertCharStyleObject(e.lineIndex+n,0,r[n],o):o&&this.styles[e.lineIndex+n]&&o[0]&&(this.styles[e.lineIndex+n][0]=o[0]),o=o&&o.slice(r[n]+1);r[n]>0&&this.insertCharStyleObject(e.lineIndex+n,0,r[n],o)},setSelectionStartEndWithShift:function(s,l,o){o<=s?(l===s?this._selectionDirection="left":this._selectionDirection==="right"&&(this._selectionDirection="left",this.selectionEnd=s),this.selectionStart=o):o>s&&o<l?this._selectionDirection==="right"?this.selectionEnd=o:this.selectionStart=o:(l===s?this._selectionDirection="right":this._selectionDirection==="left"&&(this._selectionDirection="right",this.selectionStart=l),this.selectionEnd=o)},setSelectionInBoundaries:function(){var s=this.text.length;this.selectionStart>s?this.selectionStart=s:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>s?this.selectionEnd=s:this.selectionEnd<0&&(this.selectionEnd=0)}})}(),f.util.object.extend(f.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(c){if(this.canvas){this.__newClickTime=+new Date;var s=c.pointer;this.isTripleClick(s)&&(this.fire("tripleclick",c),this._stopEvent(c.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=s,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(c){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===c.x&&this.__lastPointer.y===c.y},_stopEvent:function(c){c.preventDefault&&c.preventDefault(),c.stopPropagation&&c.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(c){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(c.e))},tripleClickHandler:function(c){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(c.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(c){!this.canvas||!this.editable||c.e.button&&c.e.button!==1||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(c.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(c){!this.canvas||!this.editable||c.e.button&&c.e.button!==1||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(c){if(this.__isMousedown=!1,!(!this.editable||this.group||c.transform&&c.transform.actionPerformed||c.e.button&&c.e.button!==1)){if(this.canvas){var s=this.canvas._activeObject;if(s&&s!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(c.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(c){var s=this.getSelectionStartFromPointer(c),l=this.selectionStart,o=this.selectionEnd;c.shiftKey?this.setSelectionStartEndWithShift(l,o,s):(this.selectionStart=s,this.selectionEnd=s),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(c){for(var s=this.getLocalPointer(c),l=0,o=0,e=0,r=0,t=0,n,a,i=0,h=this._textLines.length;i<h&&e<=s.y;i++)e+=this.getHeightOfLine(i)*this.scaleY,t=i,i>0&&(r+=this._textLines[i-1].length+this.missingNewlineOffset(i-1));n=this._getLineLeftOffset(t),o=n*this.scaleX,a=this._textLines[t],this.direction==="rtl"&&(s.x=this.width*this.scaleX-s.x+o);for(var u=0,d=a.length;u<d&&(l=o,o+=this.__charBounds[t][u].kernedWidth*this.scaleX,o<=s.x);u++)r++;return this._getNewSelectionStartFromOffset(s,l,o,r,d)},_getNewSelectionStartFromOffset:function(c,s,l,o,e){var r=c.x-s,t=l-c.x,n=t>r||t<0?0:1,a=o+n;return this.flipX&&(a=e-a),a>this._text.length&&(a=this._text.length),a}}),f.util.object.extend(f.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=f.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var c=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+c.top+"; left: "+c.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: "+c.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):f.document.body.appendChild(this.hiddenTextarea),f.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),f.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),f.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),f.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),f.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),f.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),f.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),f.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),f.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(f.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(c){if(this.isEditing){var s=this.direction==="rtl"?this.keysMapRtl:this.keysMap;if(c.keyCode in s)this[s[c.keyCode]](c);else if(c.keyCode in this.ctrlKeysMapDown&&(c.ctrlKey||c.metaKey))this[this.ctrlKeysMapDown[c.keyCode]](c);else return;c.stopImmediatePropagation(),c.preventDefault(),c.keyCode>=33&&c.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(c){if(!this.isEditing||this._copyDone||this.inCompositionMode){this._copyDone=!1;return}if(c.keyCode in this.ctrlKeysMapUp&&(c.ctrlKey||c.metaKey))this[this.ctrlKeysMapUp[c.keyCode]](c);else return;c.stopImmediatePropagation(),c.preventDefault(),this.canvas&&this.canvas.requestRenderAll()},onInput:function(c){var s=this.fromPaste;if(this.fromPaste=!1,c&&c.stopPropagation(),!!this.isEditing){var l=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,o=this._text.length,e=l.length,r,t,n=e-o,a=this.selectionStart,i=this.selectionEnd,h=a!==i,u,d,g;if(this.hiddenTextarea.value===""){this.styles={},this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll());return}var m=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),p=a>m.selectionStart;h?(r=this._text.slice(a,i),n+=i-a):e<o&&(p?r=this._text.slice(i+n,i):r=this._text.slice(a,a-n)),t=l.slice(m.selectionEnd-n,m.selectionEnd),r&&r.length&&(t.length&&(u=this.getSelectionStyles(a,a+1,!1),u=t.map(function(){return u[0]})),h?(d=a,g=i):p?(d=i-r.length,g=i):(d=i,g=i+r.length),this.removeStyleFromTo(d,g)),t.length&&(s&&t.join("")===f.copiedText&&!f.disableStyleCopyPaste&&(u=f.copiedTextStyle),this.insertNewStyleBlock(t,a,u)),this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())}},onCompositionStart:function(){this.inCompositionMode=!0},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(c){this.compositionStart=c.target.selectionStart,this.compositionEnd=c.target.selectionEnd,this.updateTextareaPosition()},copy:function(){this.selectionStart!==this.selectionEnd&&(f.copiedText=this.getSelectedText(),f.disableStyleCopyPaste?f.copiedTextStyle=null:f.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0)},paste:function(){this.fromPaste=!0},_getClipboardData:function(c){return c&&c.clipboardData||f.window.clipboardData},_getWidthBeforeCursor:function(c,s){var l=this._getLineLeftOffset(c),o;return s>0&&(o=this.__charBounds[c][s-1],l+=o.left+o.width),l},getDownCursorOffset:function(c,s){var l=this._getSelectionForOffset(c,s),o=this.get2DCursorLocation(l),e=o.lineIndex;if(e===this._textLines.length-1||c.metaKey||c.keyCode===34)return this._text.length-l;var r=o.charIndex,t=this._getWidthBeforeCursor(e,r),n=this._getIndexOnLine(e+1,t),a=this._textLines[e].slice(r);return a.length+n+1+this.missingNewlineOffset(e)},_getSelectionForOffset:function(c,s){return c.shiftKey&&this.selectionStart!==this.selectionEnd&&s?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(c,s){var l=this._getSelectionForOffset(c,s),o=this.get2DCursorLocation(l),e=o.lineIndex;if(e===0||c.metaKey||c.keyCode===33)return-l;var r=o.charIndex,t=this._getWidthBeforeCursor(e,r),n=this._getIndexOnLine(e-1,t),a=this._textLines[e].slice(0,r),i=this.missingNewlineOffset(e-1);return-this._textLines[e-1].length+n-a.length+(1-i)},_getIndexOnLine:function(c,s){for(var l=this._textLines[c],o=this._getLineLeftOffset(c),e=o,r=0,t,n,a=0,i=l.length;a<i;a++)if(t=this.__charBounds[c][a].width,e+=t,e>s){n=!0;var h=e-t,u=e,d=Math.abs(h-s),g=Math.abs(u-s);r=g<d?a:a-1;break}return n||(r=l.length-1),r},moveCursorDown:function(c){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",c)},moveCursorUp:function(c){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorUpOrDown("Up",c)},_moveCursorUpOrDown:function(c,s){var l="get"+c+"CursorOffset",o=this[l](s,this._selectionDirection==="right");
434s.shiftKey?this.moveCursorWithShift(o):this.moveCursorWithoutShift(o),o!==0&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(c){var s=this._selectionDirection==="left"?this.selectionStart+c:this.selectionEnd+c;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,s),c!==0},moveCursorWithoutShift:function(c){return c<0?(this.selectionStart+=c,this.selectionEnd=this.selectionStart):(this.selectionEnd+=c,this.selectionStart=this.selectionEnd),c!==0},moveCursorLeft:function(c){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorLeftOrRight("Left",c)},_move:function(c,s,l){var o;if(c.altKey)o=this["findWordBoundary"+l](this[s]);else if(c.metaKey||c.keyCode===35||c.keyCode===36)o=this["findLineBoundary"+l](this[s]);else return this[s]+=l==="Left"?-1:1,!0;if(typeof o<"u"&&this[s]!==o)return this[s]=o,!0},_moveLeft:function(c,s){return this._move(c,s,"Left")},_moveRight:function(c,s){return this._move(c,s,"Right")},moveCursorLeftWithoutShift:function(c){var s=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&this.selectionStart!==0&&(s=this._moveLeft(c,"selectionStart")),this.selectionEnd=this.selectionStart,s},moveCursorLeftWithShift:function(c){if(this._selectionDirection==="right"&&this.selectionStart!==this.selectionEnd)return this._moveLeft(c,"selectionEnd");if(this.selectionStart!==0)return this._selectionDirection="left",this._moveLeft(c,"selectionStart")},moveCursorRight:function(c){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",c)},_moveCursorLeftOrRight:function(c,s){var l="moveCursor"+c+"With";this._currentCursorOpacity=1,s.shiftKey?l+="Shift":l+="outShift",this[l](s)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(c){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd)return this._moveRight(c,"selectionStart");if(this.selectionEnd!==this._text.length)return this._selectionDirection="right",this._moveRight(c,"selectionEnd")},moveCursorRightWithoutShift:function(c){var s=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(s=this._moveRight(c,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,s},removeChars:function(c,s){typeof s>"u"&&(s=c+1),this.removeStyleFromTo(c,s),this._text.splice(c,s-c),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(c,s,l,o){typeof o>"u"&&(o=l),o>l&&this.removeStyleFromTo(l,o);var e=f.util.string.graphemeSplit(c);this.insertNewStyleBlock(e,l,s),this._text=[].concat(this._text.slice(0,l),e,this._text.slice(o)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),function(){var c=f.util.toFixed,s=f.util.radiansToDegrees,l=f.util.calcRotateMatrix,o=f.util.transformPoint,e=/  +/g;f.util.object.extend(f.Text.prototype,{_toSVG:function(){var r=this._getSVGLeftTopOffsets(),t=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(t)},toSVG:function(r){var t=this._createBaseSVGMarkup(this._toSVG(),{reviver:r,noStyle:!0,withShadow:!0}),n=this.path;return n?t+n._createBaseSVGMarkup(n._toSVG(),{reviver:r,withShadow:!0}):t},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(r){var t=!0,n=this.getSvgTextDecoration(this);return[r.textBgRects.join(""),'		<text xml:space="preserve" ',this.fontFamily?'font-family="'+this.fontFamily.replace(/"/g,"'")+'" ':"",this.fontSize?'font-size="'+this.fontSize+'" ':"",this.fontStyle?'font-style="'+this.fontStyle+'" ':"",this.fontWeight?'font-weight="'+this.fontWeight+'" ':"",n?'text-decoration="'+n+'" ':"",'style="',this.get
434SvgStyles(t),'"',this.addPaintOrder()," >",r.textSpans.join(""),`</text>
435`]},_getSVGTextAndBg:function(r,t){var n=[],a=[],i=r,h;this._setSVGBg(a);for(var u=0,d=this._textLines.length;u<d;u++)h=this._getLineLeftOffset(u),(this.textBackgroundColor||this.styleHas("textBackgroundColor",u))&&this._setSVGTextLineBg(a,u,t+h,i),this._setSVGTextLineText(n,u,t+h,i),i+=this.getHeightOfLine(u);return{textSpans:n,textBgRects:a}},_createTextCharSpan:function(r,t,n,a,i){var h=r!==r.trim()||r.match(e),u=this.getSvgSpanStyles(t,h),d=u?'style="'+u+'"':"",g=t.deltaY,m="",p=f.Object.NUM_FRACTION_DIGITS,C="";if(g&&(m=' dy="'+c(g,p)+'" '),i.renderLeft!==void 0){var T=i.angle;C=' rotate="'+c(s(T),f.Object.NUM_FRACTION_DIGITS)+'" ';var j=i.width/2,W=l({angle:s(T)});W[4]=i.renderLeft,W[5]=i.renderTop;var V=o({x:-j,y:0},W);n=V.x,a=V.y}return['<tspan x="',c(n,p),'" y="',c(a,p),'" ',m,d,C,">",f.util.string.escapeXml(r),"</tspan>"].join("")},_setSVGTextLineText:function(r,t,n,a){var i=this.getHeightOfLine(t),h=this.textAlign.indexOf("justify")!==-1,u,d,g="",m,p,C=0,T=this._textLines[t],j;a+=i*(1-this._fontSizeFraction)/this.lineHeight;for(var W=0,V=T.length-1;W<=V;W++)j=W===V||this.charSpacing||this.path,g+=T[W],m=this.__charBounds[t][W],C===0?(n+=m.kernedWidth-m.width,C+=m.width):C+=m.kernedWidth,h&&!j&&this._reSpaceAndTab.test(T[W])&&(j=!0),j||(u=u||this.getCompleteStyleDeclaration(t,W),d=this.getCompleteStyleDeclaration(t,W+1),j=f.util.hasStyleChanged(u,d,!0)),j&&(p=this._getStyleDeclaration(t,W)||{},r.push(this._createTextCharSpan(g,p,n,a,m)),g="",u=d,n+=C,C=0)},_pushTextBgRect:function(r,t,n,a,i,h){var u=f.Object.NUM_FRACTION_DIGITS;r.push("		<rect ",this._getFillAttributes(t),' x="',c(n,u),'" y="',c(a,u),'" width="',c(i,u),'" height="',c(h,u),`"></rect>
436`)},_setSVGTextLineBg:function(r,t,n,a){for(var i=this._textLines[t],h=this.getHeightOfLine(t)/this.lineHeight,u=0,d=0,g,m,p=this.getValueOfPropertyAt(t,0,"textBackgroundColor"),C=0,T=i.length;C<T;C++)g=this.__charBounds[t][C],m=this.getValueOfPropertyAt(t,C,"textBackgroundColor"),m!==p?(p&&this._pushTextBgRect(r,p,n+d,a,u,h),d=g.left,u=g.width,p=m):u+=g.kernedWidth;m&&this._pushTextBgRect(r,m,n+d,a,u,h)},_getFillAttributes:function(r){var t=r&&typeof r=="string"?new f.Color(r):"";return!t||!t.getSource()||t.getAlpha()===1?'fill="'+r+'"':'opacity="'+t.getAlpha()+'" fill="'+t.setAlpha(1).toRgb()+'"'},_getSVGLineTopOffset:function(r){for(var t=0,n=0,a=0;a<r;a++)t+=this.getHeightOfLine(a);return n=this.getHeightOfLine(a),{lineTop:t,offset:(this._fontSizeMult-this._fontSizeFraction)*n/(this.lineHeight*this._fontSizeMult)}},getSvgStyles:function(r){var t=f.Object.prototype.getSvgStyles.call(this,r);return t+" white-space: pre;"}})}(),function(c){var s=c.fabric||(c.fabric={});s.Textbox=s.util.createClass(s.IText,s.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingFlip:!0,noScaleCache:!1,_dimensionAffectingProps:s.Text.prototype._dimensionAffectingProps.concat("width"),_wordJoiners:/[ \t\r]/,splitByGrapheme:!1,initDimensions:function(){this.__skipDimension||(this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this._clearCache(),this.dynamicMinWidth=0,this._styleMap=this._generateStyleMap(this._splitText()),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this.textAlign.indexOf("justify")!==-1&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(l){for(var o=0,e=0,r=0,t={},n=0;n<l.graphemeLines.length;n++)l.graphemeText[r]===`
437`&&n>0?(e=0,r++,o++):!this.splitByGrapheme&&this._reSpaceAndTab.test(l.graphemeText[r])&&n>0&&(e++,r++),t[n]={line:o,offset:e},r+=l.graphemeLines[n].length,e+=l.graphemeLines[n].length;return t},styleHas:function(l,o){if(this._styleMap&&!this.isWrapping){var e=this._styleMap[o];e&&(o=e.line)}return s.Text.prototype.styleHas.call(this,l,o)},isEmptyStyles:function(l){if(!this.styles)return!0;var o=0,e=l+1,r,t,n=!1,a=this._styleMap[l],i=this._styleMap[l+1];a&&(l=a.line,o=a.offset),i&&(e=i.line,n=e===l,r=i.offset),t=typeof l>"u"?this.styles:{line:this.styles[l]};for(var h in t)for(var u in t[h])if(u>=o&&(!n||u<r))for(var d in t[h][u])return!1;return!0},_getStyleDeclaration:function(l,o){if(this._styleMap&&!this.isWrapping){var e=this._styleMap[l];if(!e)return null;l=e.line,o=e.offset+o}return this.callSuper("_getStyleDeclaration",l,o)},_setStyleDeclaration:function(l,o,e){var r=this._styleMap[l];l=r.line,o=r.offset+o,this.styles[l][o]=e},_deleteStyleDeclaration:function(l,o){var e=this._styleMap[l];l=e.line,o=e.offset+o,delete this.styles[l][o]},_getLineStyle:function(l){var o=this._styleMap[l];return!!this.styles[o.line]},_setLineStyle:function(l){var o=this._styleMap[l];this.styles[o.line]={}},_wrapText:function(l,o){var e=[],r;for(this.isWrapping=!0,r=0;r<l.length;r++)e=e.concat(this._wrapLine(l[r],r,o));return this.isWrapping=!1,e},_measureWord:function(l,o,e){var r=0,t,n=!0;e=e||0;for(var a=0,i=l.length;a<i;a++){var h=this._getGraphemeBox(l[a],o,a+e,t,n);r+=h.kernedWidth,t=l[a]}return r},_wrapLine:function(l,o,e,W){var t=0,n=this.splitByGrapheme,a=[],i=[],h=n?
437s.util.string.graphemeSplit(l):l.split(this._wordJoiners),u="",d=0,g=n?"":" ",m=0,p=0,C=0,T=!0,j=this._getWidthOfCharSpacing(),W=W||0;h.length===0&&h.push([]),e-=W;for(var V=0;V<h.length;V++)u=n?h[V]:s.util.string.graphemeSplit(h[V]),m=this._measureWord(u,o,d),d+=u.length,t+=p+m-j,t>e&&!T?(a.push(i),i=[],t=m,T=!0):t+=j,!T&&!n&&i.push(g),i=i.concat(u),p=n?0:this._measureWord([g],o,d),d++,T=!1,m>C&&(C=m);return V&&a.push(i),C+W>this.dynamicMinWidth&&(this.dynamicMinWidth=C-j+W),a},isEndOfWrapping:function(l){return!this._styleMap[l+1]||this._styleMap[l+1].line!==this._styleMap[l].line},missingNewlineOffset:function(l,o){return this.splitByGrapheme&&!o?this.isEndOfWrapping(l)?1:0:1},_splitTextIntoLines:function(l){for(var o=s.Text.prototype._splitTextIntoLines.call(this,l),e=this._wrapText(o.lines,this.width),r=new Array(e.length),t=0;t<e.length;t++)r[t]=e[t].join("");return o.lines=r,o.graphemeLines=e,o},getMinWidth:function(){return Math.max(this.minWidth,this.dynamicMinWidth)},_removeExtraneousStyles:function(){var l={};for(var o in this._styleMap)this._textLines[o]&&(l[this._styleMap[o].line]=1);for(var o in this.styles)l[o]||delete this.styles[o]},toObject:function(l){return this.callSuper("toObject",["minWidth","splitByGrapheme"].concat(l))}}),s.Textbox.fromObject=function(l,o){var e=s.util.stylesFromArray(l.styles,l.text),r=Object.assign({},l,{styles:e});return delete r.path,s.Object._fromObject("Textbox",r,function(t){l.path?s.Object._fromObject("Path",l.path,function(n){t.set("path",n),o(t)},"path"):o(t)},"text")}}(R),function(){var c=f.controlsUtils,s=c.scaleSkewCursorStyleHandler,l=c.scaleCursorStyleHandler,o=c.scalingEqually,e=c.scalingYOrSkewingX,r=c.scalingXOrSkewingY,t=c.scaleOrSkewActionName,n=f.Object.prototype.controls;if(n.ml=new f.Control({x:-.5,y:0,cursorStyleHandler:s,actionHandler:r,getActionName:t}),n.mr=new f.Control({x:.5,y:0,cursorStyleHandler:s,actionHandler:r,getActionName:t}),n.mb=new f.Control({x:0,y:.5,cursorStyleHandler:s,actionHandler:e,getActionName:t}),n.mt=new f.Control({x:0,y:-.5,cursorStyleHandler:s,actionHandler:e,getActionName:t}),n.tl=new f.Control({x:-.5,y:-.5,cursorStyleHandler:l,actionHandler:o}),n.tr=new f.Control({x:.5,y:-.5,cursorStyleHandler:l,actionHandler:o}),n.bl=new f.Control({x:-.5,y:.5,cursorStyleHandler:l,actionHandler:o}),n.br=new f.Control({x:.5,y:.5,cursorStyleHandler:l,actionHandler:o}),n.mtr=new f.Control({x:0,y:-.5,actionHandler:c.rotationWithSnapping,cursorStyleHandler:c.rotationStyleHandler,offsetY:-40,withConnection:!0,actionName:"rotate"}),f.Textbox){var a=f.Textbox.prototype.controls={};a.mtr=n.mtr,a.tr=n.tr,a.br=n.br,a.tl=n.tl,a.bl=n.bl,a.mt=n.mt,a.mb=n.mb,a.mr=new f.Control({x:.5,y:0,actionHandler:c.changeWidth,cursorStyleHandler:s,actionName:"resizing"}),a.ml=new f.Control({x:-.5,y:0,actionHandler:c.changeWidth,cursorStyleHandler:s,actionName:"resizing"})}}()})($t);const Rt=Fi($t),Yi=Bi({__proto__:null,default:Rt},[$t]),Ye=["Playfair Display","Cormorant Garamond","EB Garamond","Josefin Sans","Dancing Script","Cinzel","Inter"];function zi(R){const f=`gf-${R.replace(/\s+/g,"-")}`;if(document.getElementById(f))return;const K=Object.assign(document.createElement("link"),{id:f,rel:"stylesheet",href:`https://fonts.googleapis.com/css2?family=${encodeURIComponent(R)}:wght@400;700&display=swap`});document.head.appendChild(K)}function ze(R,f){const K=[];for(let $=0;$<f;$++)for(let at=0;at<R;at++)K.push({id:`cell-${$}-${at}`,col:at,row:$,colSpan:1,rowSpan:1,images:[],splitDirection:null,splitAngle:45,frameOverlay:null});return K}function Kt(R,f,K,$){const{cols:at,rows:q,gap:ft}=f,c=(K-ft*(at-1))/at,s=($-ft*(q-1))/q,l=R.col*(c+ft),o=R.row*(s+ft),e=c*R.colSpan+ft*(R.colSpan-1),r=s*R.rowSpan+ft*(R.rowSpan-1);return{left:l,top:o,width:e,height:r}}function He(R,f,K,$,at){for(const q of R.cells){const ft=Kt(q,R,f,K);if($>=ft.left&&$<=ft.left+ft.width&&at>=ft.top&&at<=ft.top+ft.height)return q}return null}function Hi(R,f){const K=R.filter(e=>f.includes(e.id));if(K.length<2)return R;const $=Math.min(...K.map(e=>e.col)),at=Math.max(...K.map(e=>e.col+e.colSpan-1)),q=Math.min(...K.map(e=>e.row)),ft=Math.max(...K.map(e=>e.row+e.rowSpan-1)),c=(at-$+1)*(ft-q+1);if(K.reduce((e,r)=>e+r.colSpan*r.rowSpan,0)!==c)return R;const l={id:`cell-${q}-${$}`,col:$,row:q,colSpan:at-$+1,rowSpan:ft-q+1,images:[],splitDirection:null,splitAngle:45,frameOverlay:null};return[...R.filter(e=>!f.includes(e.id)),l]}function Ut(R,f){const K=Math.max(f.width/R.width,f.height/R.height);return R.set({originX:"center",originY:"center",left:f.left+f.width/2,top:f.top+f.height/2,scaleX:K,scaleY:K}),R}function Nt(R,f,K,$){return[{x:R,y:f},{x:R+K,y:f},{x:R+K,y:f+$},{x:R,y:f+$}]}function Ui(R,f,K){const{left:$,top:at,width:q,height:ft}=R,c=$+q/2,s=at+ft/2,o=(f==="diag-tr"?1:-1)*(K*Math.PI)/180,e=Math.cos(o),r
437=Math.sin(o),t=(u,d)=>e*(d-s)-r*(u-c),n=[{x:$,y:at},{x:$+q,y:at},{x:$+q,y:at+ft},{x:$,y:at+ft}].map(u=>({...u,side:t(u.x,u.y)})),a=[],i=[];for(let u=0;u<n.length;u++){const d=n[u],g=n[(u+1)%n.length];if((d.side>=0?a:i).push({x:d.x,y:d.y}),d.side>0&&g.side<0||d.side<0&&g.side>0){const m=d.side/(d.side-g.side),p={x:d.x+m*(g.x-d.x),y:d.y+m*(g.y-d.y)};a.push(p),i.push(p)}}return(f==="diag-tl"?n[0]:n[1]).side>=0?[a,i]:[i,a]}function Ni(R,f,K=45){const{left:$,top:at,width:q,height:ft}=R;return f==="horizontal"?[Nt($,at,q,ft/2),Nt($,at+ft/2,q,ft/2)]:f==="vertical"?[Nt($,at,q/2,ft),Nt($+q/2,at,q/2,ft)]:Ui(R,f,K)}function Gi(R,f,K,$=45){const[at,q]=Ni(f,K,$);return{clipA:new R.Polygon(at,{absolutePositioned:!0}),clipB:new R.Polygon(q,{absolutePositioned:!0})}}const Vi=[{id:"diag-tl",label:"Diagonal ↗",glyph:"↗"},{id:"diag-tr",label:"Diagonal ↖",glyph:"↖"},{id:"horizontal",label:"Horizontal",glyph:"─"},{id:"vertical",label:"Vertical",glyph:"│"}],qi="M 50 90 C 20 65, 0 45, 0 27 C 0 9, 14 0, 29 0 C 41 0, 50 8, 50 20 C 50 8, 59 0, 71 0 C 86 0, 100 9, 100 27 C 100 45, 80 65, 50 90 Z";function Ki(R,f){const K=Math.min(f.width/100,f.height/90),$=new R.Path(qi,{originX:"center",originY:"center"});return $.set({left:0,top:0,scaleX:K,scaleY:K}),$}function Ji(R,f){const K=Math.min(f.width,f.height)/2;return new R.Circle({radius:K,originX:"center",originY:"center",left:0,top:0})}function $i(R,f){const K=Math.min(f.width,f.height)*.12;return new R.Rect({width:f.width,height:f.height,rx:K,ry:K,originX:"center",originY:"center",left:0,top:0})}function Zi(R,f){const{width:K,height:$}=f;return new R.Polygon([{x:0,y:-$/2},{x:K/2,y:0},{x:0,y:$/2},{x:-K/2,y:0}],{originX:"center",originY:"center"})}function Qi(R,f){const K=Math.min(f.width,f.height)/2,$=K*.45,at=[];for(let q=0;q<10;q++){const ft=q%2===0?K:$,c=-Math.PI/2+q*Math.PI/5;at.push({x:ft*Math.cos(c),y:ft*Math.sin(c)})}return new R.Polygon(at,{originX:"center",originY:"center"})}function tr(R,f){const{width:K,height:$}=f,at=Math.min(K,$)*.07,q=at*2.6;return new R.Rect({width:K-at*2,height:$-at-q,originX:"center",originY:"center",left:0,top:-(q-at)/2})}function er(R,f){const{width:K,height:$}=f,at=Math.min(K,$)*.16,q=Math.min(K,$)*.05;return new R.Rect({width:K-q*2,height:$-q*2,rx:at,ry:at,originX:"center",originY:"center",left:0,top:0})}const Ve=[{id:"heart",label:"Heart",glyph:"♥",build:Ki},{id:"circle",label:"Circle",glyph:"●",build:Ji},{id:"polaroid",label:"Polaroid",glyph:"▭",build:tr},{id:"phone",label:"Phone",glyph:"▯",build:er},{id:"rounded",label:"Rounded",glyph:"▢",build:$i},{id:"star",label:"Star",glyph:"★",build:Qi},{id:"diamond",label:"Diamond",glyph:"◆",build:Zi}];function ir(R,f,K){const $=Ve.find(at=>at.id===f);return $?$.build(R,K):null}function rr(R,f){const K=Math.max(f.width/R.width,f.height/R.height);return R.set({originX:"center",originY:"center",left:0,top:0,scaleX:K,scaleY:K}),R}function Gt(R,f,K){return new Promise(($,at)=>{try{R.Image.fromURL(f,q=>{if(!q){at(new Error("Failed to load image"));return}$(q)},{crossOrigin:"anonymous",...K})}catch(q){at(q)}})}function Lt(R){return new Promise((f,K)=>{const $=new FileReader;$.onload=at=>f(at.target.result),$.onerror=K,$.readAsDataURL(R)})}const Tt=$t.fabric??(Rt==null?void 0:Rt.fabric)??Rt??Yi,nr=Jt("saveMoodBoard",{timeout:6e4}),sr=Jt("getMoodBoard"),ar=Jt("proxyMoodBoardImage",{timeout:15e3}),or=Jt("getMoodBoardAssets"),Ue=.1,Ne=4,Vt=40,Ge=["Frames","Flowers & Nature","Stars & Sparkles","Charms & Stickers","Textures","Typography Overlays"],It=()=>Math.random().toString(36).slice(2,10),lr={backgroundColor:"#0d0d0f",backgroundImage:"linear-gradient(45deg, #1c1c20 25%, transparent 25%), linear-gradient(-45deg, #1c1c20 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #1c1c20 75%), linear-gradient(-45deg, transparent 75%, #1c1c20 75%)",backgroundSize:"22px 22px",backgroundPosition:"0 0, 0 11px, 11px -11px, -11px 0px"},pt={label:{fontSize:"0.6rem",fontWeight:700,color:"var(--text-muted)",textTransform:"uppercase",letterSpacing:"0.08em",marginBottom:"0.4rem"},section:{padding:"0.85rem 0.95rem",borderBottom:"1px solid var(--border)"},input:{width:"100%",boxSizing:"border-box",fontSize:"0.78rem",padding:"0.34rem 0.55rem",borderRadius:7,border:"1px solid var(--border)",background:"var(--bg-primary)",color:"var(--text-primary)",fontFamily:"inherit"},small:{fontSize:"0.65rem",color:"var(--text-muted)"}};function ue({active:R,onClick:f,children:K,danger:$,title:at}){return P.jsx("button",{type:"button",onClick:f,title:at,style:{padding:"0.3rem 0.65rem",borderRadius:999,fontSize:"0.72rem",fontWeight:700,cursor:f?"pointer":"default",border:`1px solid ${R?"var(--accent)":$?"rgba(239,68,68,0.4)":"var(--border)"}`,background:R?"var(--accent-dim)":"transparent",color:R?"var(--accent-light,var(--accent))":$?"#fca5a5":"var(--text-secondary)",fontFamily:"inherit",whiteSpace:"nowrap",display:"inline-flex",alignItems:"center",gap:"0.3rem"},children:K})}function Ct({onClick:R,active:f,disabled:K,title:$,children:at,danger:q,small:ft}){return P.jsx("button",{type:"button",onClick:R,disabled:K,title:$,style:{padding:ft?"0.2rem 0.4rem":"0.3rem 0.55rem",borderRadius:6,border:`1px solid ${f?"var(--accent)":q?"rgba(239,68,68,0.4)":"var(--border)"}`,background:f?"var(--accent-dim)":"transparent",color:f?"var(--accent-light,var(--accent))":q?"#fca5a5":"var(--text-secondary)",cursor:K?"default":"pointer",opacity:K?.45:1,fontSize:"0.75rem",fontFamily:"inherit",lineHeight:1,display:"flex",alignItems:"center",gap:"0.2rem",whiteSpace:"nowrap"},children:at})}function qt(){return P.jsx("span",{style:{width:1,alignSelf:"stretch",background:"var(--border)",margin:"0 0.15rem"}})}function Mt({value:R,min:f,max:K,step:$=1,onChange:at,suffix:q=""}){return P.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.45rem"},children:[P.jsx("input",{type:"range",min:f,max:K,step:$,value:R,onChange:ft=>at(parseFloat(ft.target.value)),style:{flex:1,accentColor:"var(--accent)"}}),P.jsxs("span",{style:{fontSize:"0.68rem",color:"var(--text-muted)",minWidth:34,textAlign:"right"},children:[R,q]})]})}function hr({mode:R,onPick:f,onDragAsset:K}){const[$,at]=st.useState(Ge[0]),[q,ft]=st.useState([]),[c,s]=st.useState(!1),[l,o]=st.useState(null);return st.useEffect(()=>{s(!0),o(null),ft([]),or({category:$}).then(({data:e})=>ft(e.assets??[])).catch(()=>o("Could not load assets.")).finally(()=>s(!1))},[$]),P.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",overflow:"hidden"},children:[P.jsx("div",{style:{display:"flex",gap:"0.25rem",padding:"0.55rem 0.7rem",flexWrap:"wrap",borderBottom:"1px solid var(--border)",flexShrink:0},children:Ge.map(e=>P.jsx("button",{onClick:()=>at(e),style:{fontSize:"0.62rem",fontWeight:700,padding:"0.22rem 0.5rem",borderRadius:999,cursor:"pointer",fontFamily:"inherit",border:`1px solid ${$===e?"var(--accent)":"var(--border)"}`,background:$===e?"var(--accent-dim)":"transparent",color:$===e?"var(--accent-light,var(--accent))":"var(--text-muted)"},children:e},e))}),P.jsxs("div",{style:{flex:1,overflowY:"auto",padding:"0.6rem"},children:[c&&P.jsx("div",{style:{textAlign:"center",padding:"2rem",color:"var(--text-muted)",fontSize:"0.78rem"},children:"Loading…"}),l&&P.jsx("div",{style:{textAlign:"center",padding:"1rem",color:"#fca5a5",fontSize:"0.75rem"},children:l}),!c&&!l&&q.length===0&&P.jsxs("div",{style:{textAlign:"center",padding:"2.5rem 1rem",color:"var(--text-muted)",fontSize:"0.74rem",lineHeight:1.7},children:[P.jsx("div",{style:{fontSize:"1.6rem",marginBottom:"0.5rem",opacity:.4},children:"◇"}),"Nothing here yet.",P.jsx("br",{}),"Ask an admin to upload to",P.jsx("br",{}),P.jsxs("code",{style:{fontSize:"0.62rem",opacity:.8},children:["assets/moodboard/",$,"/"]})]}),P.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(2,1fr)",gap:"0.45rem"},children:q.map(e=>P.jsx("button",{draggable:!0,onClick:()=>f(e,$),onDragStart:r=>K(r,e),style:{padding:0,border:"1px solid var(--border)",borderRadius:8,overflow:"hidden",cursor:"grab",background:"var(--bg-tertiary,#111)",aspectRatio:"1",display:"flex",alignItems:"center",justifyContent:"center"},title:e.name,children:P.jsx("img",{src:e.url,alt:e.name,style:{width:"100%",height:"100%",objectFit:"cover"},loading:"lazy",draggable:!1})},e.url))})]})]})}function cr({onSelect:R,onClose:f}){const[K,$]=st.useState(null),[at,q]=st.useState("");st.useEffect(()=>{ji("/api/works",{mine:"true",limit:50}).then(c=>$((c==null?void 0:c.works)??(Array.isArray(c)?c:[]))).catch(()=>$([]))},[]);
437const ft=(K??[]).filter(c=>{var s;return!at||((s=c.title)==null?void 0:s.toLowerCase().includes(at.toLowerCase()))});return P.jsx("div",{style:{position:"fixed",inset:0,zIndex:2e3,background:"rgba(0,0,0,0.65)",display:"flex",alignItems:"center",justifyContent:"center"},onClick:f,children:P.jsxs("div",{style:{background:"var(--bg-secondary)",borderRadius:16,padding:"1.25rem",width:420,maxWidth:"calc(100vw - 2rem)",boxSizing:"border-box",maxHeight:"70vh",display:"flex",flexDirection:"column",border:"1px solid var(--border)"},onClick:c=>c.stopPropagation(),children:[P.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.85rem"},children:[P.jsx("h3",{style:{margin:0,fontSize:"0.95rem",fontWeight:700},children:"Link to a Work"}),P.jsx("button",{onClick:f,style:{background:"none",border:"none",cursor:"pointer",color:"var(--text-muted)",fontSize:"1.2rem",padding:"0.1rem 0.3rem",lineHeight:1},children:"×"})]}),P.jsx("input",{value:at,onChange:c=>q(c.target.value),placeholder:"Search your works...",style:{...pt.input,marginBottom:"0.75rem"}}),P.jsxs("div",{style:{overflowY:"auto",flex:1,display:"flex",flexDirection:"column",gap:"0.4rem"},children:[K===null&&P.jsx("div",{style:{textAlign:"center",padding:"2rem",color:"var(--text-muted)"},children:"Loading..."}),ft.map(c=>P.jsx("button",{onClick:()=>R(c),style:{textAlign:"left",padding:"0.6rem 0.85rem",borderRadius:8,border:"1px solid var(--border)",background:"transparent",cursor:"pointer",fontFamily:"inherit",color:"var(--text-primary)",fontSize:"0.85rem",fontWeight:500},onMouseEnter:s=>s.currentTarget.style.borderColor="var(--accent)",onMouseLeave:s=>s.currentTarget.style.borderColor="var(--border)",children:c.title||"(untitled)"},c.id)),(K==null?void 0:K.length)===0&&P.jsx("div",{style:{textAlign:"center",padding:"2rem",color:"var(--text-muted)",fontSize:"0.82rem"},children:"No works found."})]})]})})}function ur({onConfirm:R,onCancel:f}){const[K,$]=st.useState("diag-tl"),[at,q]=st.useState(45),ft=K.startsWith("diag");return P.jsx("div",{style:{position:"fixed",inset:0,zIndex:2100,background:"rgba(0,0,0,0.65)",display:"flex",alignItems:"center",justifyContent:"center"},onClick:f,children:P.jsxs("div",{style:{background:"var(--bg-secondary)",borderRadius:16,padding:"1.5rem",width:380,maxWidth:"calc(100vw - 2rem)",boxSizing:"border-box",border:"1px solid var(--border)"},onClick:c=>c.stopPropagation(),children:[P.jsx("h3",{style:{margin:"0 0 0.3rem",fontSize:"1rem",fontWeight:700,fontFamily:"Playfair Display, serif"},children:"Split this cell"}),P.jsx("p",{style:{margin:"0 0 1rem",fontSize:"0.78rem",color:"var(--text-muted)"},children:"Choose how the two images divide the cell."}),P.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(4,1fr)",gap:"0.4rem",marginBottom:"1rem"},children:Vi.map(c=>P.jsxs("button",{onClick:()=>$(c.id),title:c.label,style:{padding:"0.6rem 0.2rem",borderRadius:9,cursor:"pointer",fontFamily:"inherit",textAlign:"center",border:`1.5px solid ${K===c.id?"var(--accent)":"var(--border)"}`,background:K===c.id?"var(--accent-dim)":"transparent",color:K===c.id?"var(--accent-light,var(--accent))":"var(--text-secondary)"},children:[P.jsx("div",{style:{fontSize:"1.3rem",lineHeight:1},children:c.glyph}),P.jsx("div",{style:{fontSize:"0.58rem",marginTop:"0.3rem"},children:c.label.replace("Diagonal ","")})]},c.id))}),ft&&P.jsxs("div",{style:{marginBottom:"1.1rem"},children:[P.jsx("div",{style:pt.label,children:"Split angle"}),P.jsx("div",{style:{display:"flex",gap:"0.4rem"},children:[30,45,60].map(c=>P.jsxs("button",{onClick:()=>q(c),style:{flex:1,padding:"0.4rem",borderRadius:7,cursor:"pointer",fontFamily:"inherit",fontSize:"0.78rem",fontWeight:700,border:`1px solid ${at===c?"var(--accent)":"var(--border)"}`,background:at===c?"var(--accent-dim)":"transparent",color:at===c?"var(--accent-light,var(--accent))":"var(--text-secondary)"},children:[c,"°"]},c))})]}),P.jsxs("div",{style:{display:"flex",gap:"0.5rem",justifyContent:"flex-end"},children:[P.jsx("button",{onClick:f,style:{padding:"0.5rem 1rem",borderRadius:8,border:"1px solid var(--border)",background:"transparent",color:"var(--text-secondary)",cursor:"pointer",fontFamily:"inherit",fontWeight:600},children:"Cancel"}),P.jsx("button",{onClick:()=>R(K,at),style:{padding:"0.5rem 1.25rem",borderRadius:8,border:"none",background:"var(--accent)",color:"#fff",cursor:"pointer",fontFamily:"inherit",fontWeight:700},children:"Apply Split"})]})]})})}function mr(){const{boardId:R}=Li(),[f]=Ii(),K=Ri(),{currentUser:$}=Di(),at=st.useRef(null),q=st.useRef(null),ft=st.useRef([]),c=st.useRef(-1),s=st.useRef(!1),l=st.useRef(null),o=st.useRef(null),e=st.useRef(null),r=st.useRef(null),t=st.useRef(null),n=st.useRef("freeform"),a=st.useRef(null),i=st.useRef(null),h=st.useRef(1),u=st.useRef([]),d=st.useRef(!1),g=st.useRef(null),m=!R||R==="new",[p,C]=st.useState(m?null:R),[T,j]=st.useState(f.get("title")??"Untitled Board"),[W,V]=st.useState("saved"),[et,nt]=st.useState(!m),Z=parseInt(f.get("w")??"1200"),tt=parseInt(f.get("h")??"800"),[lt]=st.useState(Z),[ht]=st.useState(tt),[it,v]=st.useState(()=>f.get("mode")==="grid"?"grid":"freeform"),[S,w]=st.useState(()=>{if(f.get("mode")!=="grid")return null;const _=Math.min(6,Math.max(1,parseInt(f.get("cols")??"3"))),O=Math.min(6,Math.max(1,parseInt(f.get("rows")??"3"))),X=Math.min(20,Math.max(0,parseInt(f.get("gap")??"8")));return{cols:_,rows:O,gap:X,cells:ze(_,O)}}),[b,D]=st.useState([]),[x,y]=st.useState(!1),[k,E]=st.useState("assets"),[B,M]=st.useState(!1),[U,G]=st.useState(null),[J,F]=st.useState([]),[A,z]=st.useState([]),[Y,L]=st.useState(!1),[H,Q]=st.useState(!1),[gt,ct]=st.useState(!0),[I,ut]=st.useState(null),[mt,vt]=st.useState(null),[xt,_t]=st.useState("Playfair Display"),[Ot,bt]=st.useState(32),[Dt,jt]=st.useState("#ffffff"),[Et,Bt]=st.useState(!1),[Xt,Wt]=st.useState(!1),[Zt,fe]=st.useState(!1),[Qt,de]=st.useState("left"),[qe,ge]=st.useState(0),[me,pe]=st.useState(!1),[Ft,ve]=st.useState(!1),[ye,_e]=st.useState("#000000"),[Ce,xe]=st.useState(1),[Ke,be]=st.useState(1),[te,Se]=st.useState("#15151a"),[Je,ee]=st.useState(1),[$e,we]=st.useState(1),[Ze,Yt]=st.useState(!1),[ie,Te]=st.useState(1),[re,Oe]=st.useState(""),[ne,Pe]=st.useState(!1),[ke,Ae]=st.useState(null);st.useEffect(()=>{n.current=it},[it]),st.useEffect(()=>{a.current=S},[S]),st.useEffect(()=>{d.current=H},[H]),st.useEffect(()=>{if(Ye.forEach(zi),!at.current)return;const _=(getComputedStyle(document.documentElement).getPropertyValue("--accent")||"").trim()||"#c084fc";Tt.Object.prototype.cornerColor=_,Tt.Object.prototype.cornerStrokeColor="#ffffff",Tt.Object.prototype.borderColor=_,Tt.Object.prototype.cornerStyle="circle",Tt.Object.prototype.transparentCorners=!1,Tt.Object.prototype.cornerSize=10,Tt.Object.prototype.borderScaleFactor=1.5;const O=new Tt.Canvas(at.current,{width:lt,height:ht,backgroundColor:te,preserveObjectStacking:!0});q.current=O,O.on("object:moving",({target:N})=>{!d.current||N.cellId||N.set({left:Math.round(N.left/Vt)*Vt,top:Math.round(N.top/Vt)*Vt})});function X(){const N=O.getActiveObject();if(!N){ut(null),vt(null);return}ut(N);const ot=["i-text","text"].includes(N.type)?"text":N.type==="image"?"image":"other";vt(ot),be(N.opacity??1),ot==="text"&&(_t(N.fontFamily??"Playfair Display"),bt(N.fontSize??32),jt(N.fill??"#ffffff"),Bt(N.fontWeight==="bold"),Wt(N.fontStyle==="italic"),fe(N.underline??!1),de(N.textAlign??"left"),ge(N.charSpacing??0),pe(!!N.shadow),ve((N.strokeWidth??0)>0),_e(N.stroke??"#000000"),xe(N.strokeWidth??1))}O.on("selection:created",X),O.on("selection:updated",X),O.on("selection:cleared",()=>{ut(null),vt(null)}),O.on("object:modified",()=>St()),O.on("object:added",N=>{St();const ot=i.current;if(ot){const dt=O.getObjects().find(yt=>
437yt.id===ot);dt&&N.target!==dt&&O.bringToFront(dt)}}),O.on("object:removed",()=>St()),O.on("mouse:down",N=>{if(n.current!=="grid"||N.target)return;const ot=a.current;if(!ot)return;const dt=O.getPointer(N.e),yt=He(ot,lt,ht,dt.x,dt.y);if(!yt)return;const wt=N.e.shiftKey||N.e.ctrlKey||N.e.metaKey;D(At=>wt?At.includes(yt.id)?At.filter(he=>he!==yt.id):[...At,yt.id]:At.length===1&&At[0]===yt.id?[]:[yt.id])}),O.on("mouse:wheel",N=>{const ot=N.e;let dt=O.getZoom()*.999**ot.deltaY;dt=Math.min(Ne,Math.max(Ue,dt)),O.zoomToPoint({x:ot.offsetX,y:ot.offsetY},dt),Te(dt),ot.preventDefault(),ot.stopPropagation()});function rt(N){if(N.target.tagName==="INPUT"||N.target.tagName==="TEXTAREA")return;const ot=N.ctrlKey||N.metaKey;(N.key==="Delete"||N.key==="Backspace")&&O.getActiveObject()?(N.preventDefault(),Ie()):ot&&N.key.toLowerCase()==="z"?(N.preventDefault(),De()):ot&&N.key.toLowerCase()==="y"?(N.preventDefault(),je()):ot&&N.key.toLowerCase()==="d"?(N.preventDefault(),Re()):ot&&N.key.toLowerCase()==="s"?(N.preventDefault(),se(!1)):N.key==="["?Xe():N.key==="]"?Be():N.key==="Escape"&&(O.discardActiveObject(),O.renderAll(),D([]))}return document.addEventListener("keydown",rt),O._cleanupKeyDown=()=>document.removeEventListener("keydown",rt),Pt(O),!m&&R?sr({boardId:R}).then(({data:N})=>{j(N.title??"Untitled Board"),C(N.id),F(N.linkedWorks??[]),z(N.linkedChapters??[]),L(N.isPublic??!1);let ot=null;try{ot=typeof N.canvasData=="string"?JSON.parse(N.canvasData):N.canvasData}catch{ot=null}const dt=(ot==null?void 0:ot.mode)==="grid"?"grid":(ot!=null&&ot.fabricJSON,"freeform"),yt=(ot==null?void 0:ot.fabricJSON)??ot;dt==="grid"&&(ot!=null&&ot.gridState)?(v("grid"),w(ot.gridState)):v("freeform"),yt&&O.loadFromJSON(yt,()=>{O.renderAll(),Se(O.backgroundColor??"#15151a");const wt=O.getObjects().find(At=>At.isFrameOverlay);wt&&(i.current=wt.id,h.current=wt._baseScale??wt.scaleX??1,Yt(!0),ee(wt.opacity??1)),Pt(O),s.current=!1,V("saved")})}).catch(N=>console.error("Board load failed:",N)).finally(()=>nt(!1)):nt(!1),()=>{var N,ot;q.current&&((ot=(N=q.current)._cleanupKeyDown)==null||ot.call(N),q.current.dispose(),q.current=null),l.current&&clearInterval(l.current)}},[]),st.useEffect(()=>(l.current=setInterval(()=>{s.current&&se(!0)},6e4),()=>clearInterval(l.current)),[T,p,J,A,Y,it,S]),st.useEffect(()=>{const _=q.current;if(!(!_||it!=="grid"||!S))if(u.current.forEach(O=>_.remove(O)),u.current=[],gt){const O=[];S.cells.forEach(X=>{const rt=Kt(X,S,lt,ht),N=b.includes(X.id),ot=new Tt.Rect({left:rt.left,top:rt.top,width:rt.width,height:rt.height,fill:"transparent",stroke:N?Qe():"rgba(255,255,255,0.18)",strokeWidth:N?2:1,strokeDashArray:N?[]:[6,4],selectable:!1,evented:!1,excludeFromExport:!0});_.add(ot),O.push(ot)}),u.current=O,_.renderAll()}else _.renderAll()},[gt,S,it,lt,ht,b]);function Qe(){return(getComputedStyle(document.documentElement).getPropertyValue("--accent")||"").trim()||"#c084fc"}function St(){s.current=!0,V("unsaved")}function Pt(_){const X={json:_.toJSON(["id","isFrameOverlay","_baseScale","cellId"]),gridState:a.current?JSON.parse(JSON.stringify(a.current)):null,mode:n.current};ft.current=ft.current.slice(0,c.current+1),ft.current.push(X),ft.current.length>25&&ft.current.shift(),c.current=ft.current.length-1}function Ee(_){const O=q.current;!O||!_||O.loadFromJSON(_.json,()=>{O.renderAll(),_.gridState&&w(JSON.parse(JSON.stringify(_.gridState))),St()})}function De(){c.current<=0||(c.current--,Ee(ft.current[c.current]))}function je(){c.current>=ft.current.length-1||(c.current++,Ee(ft.current[c.current]))}const se=st.useCallback(async(_=!1)=>{const O=q.current;if(!(!O||!$)){V("saving");try{const X=new Set(u.current);
437X.forEach(wt=>O.remove(wt));const rt=O.toJSON(["id","isFrameOverlay","_baseScale","cellId"]),N=JSON.stringify({fabricJSON:rt,gridState:it==="grid"?a.current:null,mode:it});X.forEach(wt=>O.add(wt)),O.renderAll();const ot=Math.min(800/O.width,533/O.height),dt=O.toDataURL({format:"jpeg",quality:.85,multiplier:ot}),{data:yt}=await nr({boardId:p??null,title:T,canvasData:N,thumbnailDataUrl:dt,linkedWorks:J,linkedChapters:A,isPublic:Y,canvasWidth:O.width,canvasHeight:O.height});p||(C(yt.boardId),_||K(`/moodboards/${yt.boardId}`,{replace:!0})),s.current=!1,V("saved")}catch(X){V("unsaved"),_||alert("Save failed: "+X.message)}}},[p,T,J,A,Y,$,K,it]);function zt(_){const O=q.current;if(!O)return;const X=Math.min(Ne,Math.max(Ue,_));O.zoomToPoint({x:O.width/2,y:O.height/2},X),O.renderAll(),Te(X)}function ti(){zt(ie*1.2)}function ei(){zt(ie/1.2)}function Me(){var rt,N;const _=(N=(rt=at.current)==null?void 0:rt.parentElement)==null?void 0:N.parentElement;if(!_){zt(1);return}const O=64,X=Math.min((_.clientWidth-O)/lt,(_.clientHeight-O)/ht,1);zt(X)}function ii(){const _=q.current;if(!_)return;const O=new Set(u.current);O.forEach(N=>_.remove(N));const X=_.toDataURL({format:"png",multiplier:1});O.forEach(N=>_.add(N)),_.renderAll();const rt=document.createElement("a");rt.href=X,rt.download=`${T.replace(/[^a-z0-9]/gi,"-")}-moodboard.png`,rt.click()}function ri(){const _=q.current;if(!_)return;const O=new Tt.IText("Your text here",{left:_.width/2-100,top:_.height/2-20,id:It(),fontFamily:"Playfair Display",fontSize:36,fill:"#ffffff",textAlign:"center",originX:"left",originY:"top"});_.add(O),_.setActiveObject(O),_.renderAll(),Pt(_)}async function Fe(_){if(q.current){if(it==="grid"&&!x&&b.length===1){await ae(_,b[0]);return}Ht(_)}}function Ht(_,O){const X=q.current;X&&Gt(Tt,_).then(rt=>{const N=X.width*.55,ot=X.height*.55,dt=Math.min(N/rt.width,ot/rt.height,1);rt.set({id:It(),left:O?O.x-rt.width*dt/2:X.width/2-rt.width*dt/2,top:O?O.y-rt.height*dt/2:X.height/2-rt.height*dt/2,scaleX:dt,scaleY:dt}),X.add(rt),X.setActiveObject(rt),X.renderAll(),Pt(X)}).catch(()=>alert("Could not load that image."))}async function ae(_,O){const X=q.current,rt=a.current;if(!X||!rt)return;const N=rt.cells.find(yt=>
437yt.id===O);if(!N)return;if(N.images.length>=2){alert("This cell already has two images. Remove one before adding another.");return}let ot;try{ot=await Gt(Tt,_)}catch{alert("Could not load that image.");return}const dt=Kt(N,rt,lt,ht);if(ot.id=It(),ot.cellId=O,N.images.length===0)Ut(ot,dt),ot.clipPath=new Tt.Rect({left:dt.left,top:dt.top,width:dt.width,height:dt.height,absolutePositioned:!0}),X.add(ot),X.renderAll(),oe(O,yt=>({...yt,images:[{fabricObjectId:ot.id,splitSide:null}],splitDirection:null})),Pt(X);else{const yt=N.images[0].fabricObjectId,wt=X.getObjects().find(At=>At.id===yt);if(!wt)return;g.current={cell:N,imgA:wt,imgB:ot,rect:dt},G({cellId:O})}}function ni(_,O){const X=g.current,rt=q.current;if(!X||!rt){G(null);return}const{cell:N,imgA:ot,imgB:dt,rect:yt}=X,{clipA:wt,clipB:At}=Gi(Tt,yt,_,O);Ut(ot,yt),ot.clipPath=wt,Ut(dt,yt),dt.clipPath=At,rt.getObjects().includes(dt)||rt.add(dt),rt.renderAll(),oe(N.id,he=>({...he,images:[{fabricObjectId:ot.id,splitSide:"a"},{fabricObjectId:dt.id,splitSide:"b"}],splitDirection:_,splitAngle:O})),Pt(rt),g.current=null,G(null)}function si(){g.current=null,G(null)}function oe(_,O){w(X=>{if(!X)return X;const rt={...X,cells:X.cells.map(N=>N.id===_?O(N):N)};return a.current=rt,rt})}function ai(_){var X;const O=(X=_.target.files)==null?void 0:X[0];O&&(_.target.value="",Lt(O).then(Fe))}async function Le(){if(re.trim()){Pe(!0),Ae(null);try{const{data:_}=await ar({url:re.trim()});await Fe(_.dataUrl),Oe("")}catch(_){Ae(_.message??"Failed to load image.")}finally{Pe(!1)}}}function oi(_,O){_.dataTransfer.setData("application/x-moodboard-asset",O.url),_.dataTransfer.effectAllowed="copy"}function li(_){_.preventDefault(),_.dataTransfer.dropEffect="copy"}async function hi(_){var ot;_.preventDefault();const O=q.current;if(!O)return;const X=O.getPointer({clientX:_.clientX,clientY:_.clientY}),rt=_.dataTransfer.getData("application/x-moodboard-asset");let N=null;if(rt)N=rt;else if((ot=_.dataTransfer.files)!=null&&ot[0])try{N=await Lt(_.dataTransfer.files[0])}catch{return}if(N){if(it==="grid"&&a.current){const dt=He(a.current,lt,ht,X.x,X.y);if(dt){await ae(N,dt.id);return}}Ht(N,X)}}function ci(_){const O=q.current;O&&(Se(_),O.setBackgroundColor(_,O.renderAll.bind(O)),St())}function Ie(){const _=q.current,O=_==null?void 0:_.getActiveObject();O&&(O.id&&O.id===i.current&&(i.current=null,Yt(!1)),O.cellId&&oe(O.cellId,X=>({...X,images:X.images.filter(rt=>rt.fabricObjectId!==O.id),splitDirection:X.images.length<=1?null:X.splitDirection})),_.remove(O),_.discardActiveObject(),_.renderAll(),Pt(_))}function Re(){const _=q.current,O=_==null?void 0:_.getActiveObject();O&&O.clone(X=>{X.set({left:(O.left??0)+20,top:(O.top??0)+20,id:It(),cellId:void 0,isFrameOverlay:void 0}),_.add(X),_.setActiveObject(X),_.renderAll(),Pt(_)})}const ui=()=>{const _=q.current;_!=null&&_.getActiveObject()&&(_.bringToFront(_.getActiveObject()),_.renderAll(),St())},Be=()=>{const _=q.current;_!=null&&_.getActiveObject()&&(_.bringForward(_.getActiveObject()),_.renderAll(),St())},Xe=()=>{const _=q.current;_!=null&&_.getActiveObject()&&(_.sendBackwards(_.getActiveObject()),_.renderAll(),St())},fi=()=>{const _=q.current;_!=null&&_.getActiveObject()&&(_.sendToBack(_.getActiveObject()),_.renderAll(),St())};function di(_){const O=q.current,X=O==null?void 0:O.getActiveObject();X&&(X.set("opacity",_),O.renderAll(),be(_),St())}function kt(_,O){const X=q.current,rt=X==null?void 0:X.getActiveObject();!rt||!["i-text","text"].includes(rt.type)||(rt.set(_,O),X.renderAll(),St())}function gi(){const _=!me;pe(_),kt("shadow",_?new Tt.Shadow({color:"rgba(0,0,0,0.65)",blur:14,offsetX:2,offsetY:4}):null)}function mi(){const _=!Ft;ve(_),kt("strokeWidth",_?Ce||1:0),_&&kt("stroke",ye)}function pi(_){_e(_),Ft&&kt("stroke",_)}function vi(_){xe(_),Ft&&kt("strokeWidth",_)}function yi(_){const O=q.current,X=O==null?void 0:O.getActiveObject();if(!X||X.type!=="image")return;if(X.cellId){alert("This photo is filling a grid cell. Masks apply to free-floating photos — try one placed outside the grid.");return}const rt=ir(Tt,_,{width:X.width,height:X.height});X.clipPath=rt,O.renderAll(),St(),Pt(O)}function _i(_){const O=q.current,X=O==null?void 0:O.getActiveObject();if(!X||X.type!=="image"){alert("Select an image on the canvas first.");return}if(X.cellId){alert("This photo is filling a grid cell. Masks apply to free-floating photos — try one placed outside the grid.");return}Lt(_).then(rt=>Gt(Tt,rt)).then(rt=>{const N=rr(rt,{width:X.width,height:X.height});X.clipPath=N,O.renderAll(),St(),Pt(O)}).catch(()=>alert("Could not load that mask image."))}function Ci(){const _=q.current,O=_==null?void 0:_.getActiveObject();!O||O.cellId||(O.clipPath=null,_.renderAll(),St(),Pt(_))}function We(_){const O=q.current;O&&Gt(Tt,_).then(X=>{if(i.current){const N=O.getObjects().find(ot=>ot.id===i.current);N&&O.remove(N)}const rt=Math.min(O.width/X.width,O.height/X.height);X.set({id:It(),isFrameOverlay:!0,_baseScale:rt,originX:"center",originY:"center",left:O.width/2,top:O.height/2,scaleX:rt,scaleY:rt,selectable:!0,evented:!0}),i.current=X.id,h.current=rt,O.add(X),O.bringToFront(X),O.setActiveObject(X),O.renderAll(),Yt(!0),ee(1),we(1),Pt(O)}).catch(()=>alert("Could not load that frame."))}function xi(_){const O=q.current,X=O==null?void 0:O.getObjects().find(rt=>rt.id===i.current);X&&(X.set("opacity",_),O.renderAll(),ee(_),St())}function bi(_){const O=q.current,X=O==null?void 0:O.getObjects().find(N=>N.id===i.current);if(!X)return;const rt=h.current;X.set({scaleX:rt*_,scaleY:rt*_}),O.renderAll(),we(_),St()}function Si(){const _=q.current,O=_==null?void 0:_.getObjects().find(X=>X.id===i.current);O&&(_.remove(O),_.renderAll()),i.current=null,Yt(!1),St(),Pt(_)}function le(_){const O=q.current,X=a.current;if(!X)return;const rt={...X,..._};if(_.cols!==void 0&&_.cols!==X.cols||_.rows!==void 0&&_.rows!==X.rows){if(X.cells.some(dt=>dt.images.length||dt.splitDirection)&&!window.confirm("Changing the grid size will remove images placed in cells. Continue?"))return;
437X.cells.forEach(dt=>dt.images.forEach(yt=>{const wt=O==null?void 0:O.getObjects().find(At=>At.id===yt.fabricObjectId);wt&&O.remove(wt)})),rt.cells=ze(rt.cols,rt.rows),D([])}else _.gap!==void 0&&(rt.cells=X.cells.map(ot=>{if(ot.images.length!==1||ot.splitDirection)return ot;const dt=O==null?void 0:O.getObjects().find(yt=>yt.id===ot.images[0].fabricObjectId);if(dt){const yt=Kt(ot,rt,lt,ht);Ut(dt,yt),dt.clipPath=new Tt.Rect({left:yt.left,top:yt.top,width:yt.width,height:yt.height,absolutePositioned:!0})}return ot}));a.current=rt,w(rt),O==null||O.renderAll(),St(),O&&setTimeout(()=>Pt(O),0)}function wi(){if(b.length<2)return;const _=a.current;if(!_)return;const O={..._,cells:Hi(_.cells,b)};a.current=O,w(O),D([]),St();const X=q.current;X&&setTimeout(()=>Pt(X),0)}function Ti(_){F(O=>O.includes(_.id)?O:[...O,_.id]),M(!1),St()}const Oi=Math.min(lt,window.innerWidth-560),Pi=window.innerHeight-220,ki=Math.min(Oi/lt,Pi/ht,1),Ai={saved:"#86efac",saving:"#fbbf24",unsaved:"#fca5a5"}[W],Ei={saved:"Saved",saving:"Saving…",unsaved:"Unsaved changes"}[W];return P.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"calc(100vh - 104px)",overflow:"hidden",background:"#0d0d0f"},children:[P.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.4rem",padding:"0.55rem 0.9rem",background:"var(--bg-secondary)",borderBottom:"1px solid var(--border)",flexWrap:"wrap",flexShrink:0},children:[P.jsx("span",{style:{fontFamily:"Playfair Display, serif",fontSize:"0.95rem",fontStyle:"italic",color:"var(--text-muted)",marginRight:"0.2rem"},children:"Mood Board"}),P.jsx("input",{value:T,onChange:_=>{j(_.target.value),St()},style:{background:"transparent",border:"none",outline:"none",fontSize:"0.92rem",fontWeight:700,color:"var(--text-primary)",fontFamily:"inherit",minWidth:140,maxWidth:240,borderBottom:"1px dashed transparent"},onFocus:_=>_.target.style.borderBottomColor="var(--border)",onBlur:_=>_.target.style.borderBottomColor="transparent",maxLength:80}),P.jsx(qt,{}),P.jsx(Ct,{onClick:ei,small:!0,title:"Zoom out",children:"−"}),P.jsxs("button",{onClick:Me,title:"Fit to screen",style:{fontSize:"0.7rem",padding:"0.28rem 0.4rem",minWidth:46,textAlign:"center",background:"transparent",border:"1px solid var(--border)",borderRadius:6,color:"var(--text-secondary)",cursor:"pointer",fontFamily:"inherit"},children:[Math.round(ie*100),"%"]}),P.jsx(Ct,{onClick:ti,small:!0,title:"Zoom in",children:"+"}),P.jsx(Ct,{onClick:Me,small:!0,title:"Fit canvas to screen",children:"⛶"}),P.jsx(qt,{}),P.jsx(Ct,{onClick:()=>Q(_=>!_),active:H,title:"Snap free-floating elements to a guide grid",children:"♲ Snap"}),it==="grid"&&P.jsx(Ct,{onClick:()=>ct(_=>!_),active:gt,title:"Show cell outlines",children:"□ Cells"}),P.jsx(qt,{}),P.jsx(Ct,{onClick:De,disabled:c.current<=0,title:"Undo (Ctrl+Z)",children:"↩"}),P.jsx(Ct,{onClick:je,disabled:c.current>=ft.current.length-1,title:"Redo (Ctrl+Y)",children:"↪"}),P.jsx(qt,{}),P.jsxs("span",{style:{fontSize:"0.68rem",color:Ai,minWidth:88},children:[W==="saved"?"✓ ":"",Ei]}),P.jsx(Ct,{onClick:()=>se(!1),title:"Save now (Ctrl+S)",children:"💾 Save"}),P.jsx(Ct,{onClick:ii,title:"Download as PNG",children:"⇩ PNG"}),P.jsx("div",{style:{flex:1}}),P.jsx(Ct,{onClick:()=>K("/moodboards"),children:"← Gallery"})]}),P.jsxs("div",{style:{display:"flex",flex:1,overflow:"hidden"},children:[P.jsxs("div",{style:{width:248,borderRight:"1px solid var(--border)",background:"var(--bg-secondary)",display:"flex",flexDirection:"column",flexShrink:0,overflowY:"auto"},children:[P.jsxs("div",{style:{...pt.section,display:"flex",alignItems:"center",justifyContent:"space-between"},children:[P.jsx("div",{style:pt.label,children:"Mode"}),P.jsx(ue,{active:!0,children:it==="grid"?"◧ Grid":"◇ Freeform"})]}),it==="grid"&&S&&P.jsxs("div",{style:pt.section,children:[P.jsx("div",{style:pt.label,children:"Grid layout"}),P.jsxs("div",{style:{display:"flex",gap:"0.5rem",marginBottom:"0.55rem"},children:[P.jsxs("div",{style:{flex:1},children:[P.jsx("div",{style:pt.small,children:"Columns"}),P.jsx("input",{type:"number",min:1,max:6,value:S.cols,onChange:_=>le({cols:Math.min(6,Math.max(1,parseInt(_.target.value)||1))}),style:pt.input})]}),P.jsxs("div",{style:{flex:1},children:[P.jsx("div",{style:pt.small,children:"Rows"}),P.jsx("input",{type:"number",min:1,max:6,value:S.rows,onChange:_=>le({rows:Math.min(6,Math.max(1,parseInt(_.target.value)||1))}),style:pt.input})]})]}),P.jsxs("div",{style:{marginBottom:"0.6rem"},children:[P.jsx("div",{style:pt.small,children:"Gap"}),P.jsx(Mt,{value:S.gap,min:0,max:20,onChange:_=>le({gap:_}),suffix:"px"})]}),P.jsxs(Ct,{onClick:wi,disabled:b.length<2,title:"Merge selected cells into one",children:["▤ Merge cells ",b.length>=2?`(${b.length})`:""]}),P.jsx("p",{style:{...pt.small,margin:"0.5rem 0 0",lineHeight:1.5},children:"Click empty cells to select, shift-click to multi-select then merge. Drop an image onto a cell to fill it — drop it elsewhere (or toggle Free placement below) to float it freely on top of the grid, like a sticker or caption."})]}),P.jsxs("div",{style:pt.section,children:[P.jsx("div",{style:pt.label,children:"Add image"}),P.jsxs("div",{style:{display:"flex",gap:"0.35rem",marginBottom:"0.5rem"},children:[P.jsx(Ct,{onClick:()=>{var _;return(_=o.current)==null?void 0:_.click()},title:"Upload from device",children:"📷 Upload"}),P.jsx(Ct,{onClick:ri,title:"Add text layer",children:"🗎 Text"})]}),P.jsx("input",{ref:o,type:"file",accept:"image/*",style:{display:"none"},onChange:ai}),it==="grid"&&P.jsxs("div",{style:{display:"flex",gap:"0.3rem",marginBottom:"0.5rem"},children:[P.jsx(ue,{active:!x,onClick:()=>y(!1),title:"New images fill the selected cell",children:"▤ Into cell"}),P.jsx(ue,{active:x,onClick:()=>y(!0),title:"New images float freely on top of the grid",children:"✨ Free placement"})]}),P.jsxs("div",{style:{display:"flex",gap:"0.3rem"},children:[P.jsx("input",{value:re,onChange:_=>Oe(_.target.value),onKeyDown:_=>_.key==="Enter"&&Le(),placeholder:"Paste image URL…",style:{...pt.input,flex:1}}),P.jsx("button",{onClick:Le,disabled:ne,style:{padding:"0.34rem 0.6rem",borderRadius:7,border:"none",background:"var(--accent)",color:"#fff",fontSize:"0.72rem",fontWeight:700,cursor:"pointer",fontFamily:"inherit",opacity:ne?.65:1},children:ne?"…":"Add"})]}),ke&&P.jsx("p",{style:{color:"#fca5a5",fontSize:"0.65rem",margin:"0.3rem 0 0"},children:ke}),it==="grid"&&!x&&b.length===1&&P.jsx("p",{style:{...pt.small,margin:"0.4rem 0 0"},children:"→ fills the selected cell"}),it==="grid"&&(x||b.length!==1)&&P.jsx("p",{style:{...pt.small,margin:"0.4rem 0 0"},children:"→ floats freely on top of the grid"}),P.jsx("p",{style:{...pt.small,margin:"0.35rem 0 0",lineHeight:1.4}
437,children:"External images are not stored by Social Monster."})]}),P.jsxs("div",{style:pt.section,children:[P.jsx("div",{style:pt.label,children:"Stickers & PNGs"}),P.jsx(Ct,{onClick:()=>{var _;return(_=t.current)==null?void 0:_.click()},title:"Add a transparent PNG as a free-floating element",children:"✨ Add sticker / PNG"}),P.jsx("input",{ref:t,type:"file",accept:"image/png,image/webp",style:{display:"none"},onChange:_=>{var X;const O=(X=_.target.files)==null?void 0:X[0];O&&(_.target.value="",Lt(O).then(rt=>Ht(rt)))}}),it==="grid"&&P.jsx("p",{style:{...pt.small,margin:"0.5rem 0 0",lineHeight:1.4},children:"Stickers always float freely on top of the grid — drag them anywhere on the canvas."})]}),P.jsxs("div",{style:pt.section,children:[P.jsx("div",{style:pt.label,children:"Shaped masks"}),mt!=="image"&&P.jsx("p",{style:{...pt.small,margin:"0 0 0.5rem"},children:"Select a photo on the canvas to apply a mask."}),mt==="image"&&(I==null?void 0:I.cellId)&&P.jsx("p",{style:{...pt.small,margin:"0 0 0.5rem"},children:"This photo fills a grid cell — masks apply to free-floating photos instead."}),(()=>{const _=mt==="image"&&!(I!=null&&I.cellId);return P.jsxs(P.Fragment,{children:[P.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(4,1fr)",gap:"0.3rem",marginBottom:"0.5rem"},children:Ve.map(O=>P.jsx("button",{onClick:()=>yi(O.id),disabled:!_,title:O.label,style:{padding:"0.5rem 0",borderRadius:8,cursor:_?"pointer":"default",fontFamily:"inherit",border:"1px solid var(--border)",background:"transparent",opacity:_?1:.4,color:"var(--text-secondary)",fontSize:"1.05rem"},children:O.glyph},O.id))}),P.jsx(Ct,{onClick:()=>{var O;return(O=e.current)==null?void 0:O.click()},disabled:!_,title:"Use a transparent PNG's silhouette as the mask",children:"🎨 Custom PNG mask"})]})})(),P.jsx("input",{ref:e,type:"file",accept:"image/png",style:{display:"none"},onChange:_=>{var X;const O=(X=_.target.files)==null?void 0:X[0];O&&_i(O),_.target.value=""}}),mt==="image"&&!(I!=null&&I.cellId)&&(I==null?void 0:I.clipPath)&&P.jsx(Ct,{onClick:Ci,small:!0,title:"Remove mask",children:"✕ Clear mask"})]}),P.jsxs("div",{style:pt.section,children:[P.jsx("div",{style:pt.label,children:"Frame overlay"}),Ze?P.jsxs(P.Fragment,{children:[P.jsxs("div",{style:{marginBottom:"0.45rem"},children:[P.jsx("div",{style:pt.small,children:"Opacity"}),P.jsx(Mt,{value:Math.round(Je*100),min:0,max:100,onChange:_=>xi(_/100),suffix:"%"})]}),P.jsxs("div",{style:{marginBottom:"0.5rem"},children:[P.jsx("div",{style:pt.small,children:"Scale"}),P.jsx(Mt,{value:Math.round($e*100),min:50,max:200,onChange:_=>bi(_/100),suffix:"%"})]}),P.jsx(Ct,{onClick:Si,danger:!0,small:!0,title:"Remove frame overlay",children:"✕ Remove frame"})]}):P.jsxs(P.Fragment,{children:[P.jsx(Ct,{onClick:()=>{var _;return(_=r.current)==null?void 0:_.click()},title:"Drop a PNG frame on top of the whole canvas",children:"🌹 Add frame PNG"}),P.jsx("input",{ref:r,type:"file",accept:"image/png,image/webp",style:{display:"none"},onChange:_=>{var X;const O=(X=_.target.files)==null?void 0:X[0];O&&(_.target.value="",Lt(O).then(We))}}),P.jsx("p",{style:{...pt.small,margin:"0.5rem 0 0",lineHeight:1.4},children:"Or pick one from the Frames category in the Deco Library →"})]})]}),mt==="text"&&P.jsxs("div",{style:pt.section,children:[P.jsx("div",{style:pt.label,children:"Text"}),P.jsxs("div",{style:{marginBottom:"0.4rem"},children:[P.jsx("div",{style:pt.small,children:"Font"}),P.jsx("select",{value:xt,onChange:_=>{_t(_.target.value),kt("fontFamily",_.target.value)},style:{...pt.input,fontFamily:xt},children:Ye.map(_=>P.jsx("option",{value:_,style:{fontFamily:_},children:_},_))})]}),P.jsxs("div",{style:{display:"flex",gap:"0.35rem",marginBottom:"0.4rem",alignItems:"flex-end"},children:[P.jsxs("div",{style:{flex:1},children:[P.jsx("div",{style:pt.small,children:"Size"}),P.jsx("input",{type:"number",min:8,max:300,value:Ot,onChange:_=>{const O=parseInt(_.target.value);bt(O),kt("fontSize",O)},style:pt.input})]}),P.jsxs("div",{children:[P.jsx("div",{style:pt.small,children:"Color"}),P.jsx("input",{type:"color",value:Dt,onChange:_=>{jt(_.target.value),kt("fill",_.target.value)}
437,style:{width:34,height:30,border:"1px solid var(--border)",borderRadius:6,cursor:"pointer",padding:2}})]})]}),P.jsx("div",{style:{display:"flex",gap:"0.25rem",marginBottom:"0.4rem"},children:[[Et,"fontWeight","bold","normal","B",700],[Xt,"fontStyle","italic","normal","I"],[Zt,"underline",!0,!1,"U"]].map(([_,O,X,rt,N,ot])=>P.jsx("button",{onClick:()=>{const dt=!_;O==="fontWeight"?(Bt(dt),kt(O,dt?X:rt)):O==="fontStyle"?(Wt(dt),kt(O,dt?X:rt)):(fe(dt),kt(O,dt))},style:{flex:1,padding:"0.25rem",borderRadius:6,border:`1px solid ${_?"var(--accent)":"var(--border)"}`,background:_?"var(--accent-dim)":"transparent",color:_?"var(--accent-light,var(--accent))":"var(--text-secondary)",cursor:"pointer",fontFamily:"inherit",fontSize:"0.78rem",fontWeight:ot??400},children:N},O))}),P.jsx("div",{style:{display:"flex",gap:"0.25rem",marginBottom:"0.4rem"},children:[["left","&#8676;"],["center","&#8596;"],["right","&#8677;"]].map(([_,O])=>P.jsx("button",{onClick:()=>{de(_),kt("textAlign",_)},style:{flex:1,padding:"0.25rem",borderRadius:6,border:`1px solid ${Qt===_?"var(--accent)":"var(--border)"}`,background:Qt===_?"var(--accent-dim)":"transparent",color:Qt===_?"var(--accent-light,var(--accent))":"var(--text-secondary)",cursor:"pointer",fontFamily:"inherit",fontSize:"0.85rem"},dangerouslySetInnerHTML:{__html:O}},_))}),P.jsxs("div",{style:{marginBottom:"0.45rem"},children:[P.jsx("div",{style:pt.small,children:"Letter spacing"}),P.jsx(Mt,{value:qe,min:-50,max:500,step:5,onChange:_=>{ge(_),kt("charSpacing",_)}})]}),P.jsxs("div",{style:{display:"flex",gap:"0.4rem",marginBottom:"0.4rem"},children:[P.jsx(Ct,{onClick:gi,active:me,small:!0,title:"Toggle drop shadow",children:"☁ Shadow"}),P.jsx(Ct,{onClick:mi,active:Ft,small:!0,title:"Toggle outline",children:"◯ Outline"})]}),Ft&&P.jsxs("div",{style:{display:"flex",gap:"0.4rem",alignItems:"center"},children:[P.jsx("input",{type:"color",value:ye,onChange:_=>pi(_.target.value),style:{width:30,height:28,border:"1px solid var(--border)",borderRadius:6,cursor:"pointer",padding:2}}),P.jsx("div",{style:{flex:1},children:P.jsx(Mt,{value:Ce,min:1,max:10,onChange:vi,suffix:"px"})})]})]}),I&&P.jsxs("div",{style:pt.section,children:[P.jsx("div",{style:pt.label,children:"Selected object"}),P.jsxs("div",{style:{marginBottom:"0.5rem"},children:[P.jsx("div",{style:pt.small,children:"Opacity"}),P.jsx(Mt,{value:Math.round(Ke*100),min:0,max:100,onChange:_=>di(_/100),suffix:"%"})]}),P.jsxs("div",{style:{display:"flex",gap:"0.25rem",flexWrap:"wrap"},children:[P.jsx(Ct,{onClick:ui,small:!0,title:"Bring to front",children:"⇧"}),P.jsx(Ct,{onClick:Be,small:!0,title:"Forward (])",children:"↑"}),P.jsx(Ct,{onClick:Xe,small:!0,title:"Backward ([)",children:"↓"}),P.jsx(Ct,{onClick:fi,small:!0,title:"Send to back",children:"⇩"}),P.jsx(Ct,{onClick:Re,small:!0,title:"Duplicate (Ctrl+D)",children:"⧉"}),P.jsx(Ct,{onClick:Ie,danger:!0,small:!0,title:"Delete (Del)",children:"✕"})]})]}),P.jsxs("div",{style:pt.section,children:[P.jsx("div",{style:pt.label,children:"Canvas background"}),P.jsxs("label",{style:{display:"flex",alignItems:"center",gap:"0.5rem",cursor:"pointer",fontSize:"0.78rem",color:"var(--text-secondary)"},children:[P.jsx("input",{type:"color",value:te,onChange:_=>ci(_.target.value),style:{width:30,height:30,border:"1px solid var(--border)",borderRadius:7,cursor:"pointer",padding:2,background:"none"}}),te]})]}),P.jsxs("div",{style:{...pt.section,borderBottom:"none"},children:[P.jsx("div",{style:pt.label,children:"Board settings"}),P.jsxs(Ct,{onClick:()=>M(!0),title:"Link to a work",active:J.length>0,children:["🔗 ",J.length>0?`Linked (${J.length})`:"Link to a work"]}),P.jsx("div",{style:{height:"0.4rem"}}),P.jsx(Ct,{onClick:()=>{L(_=>!_),St()},active:Y,title:"Show on your public profile",children:Y?"🔓 Public":"🔒 Private"}),J.length>0&&P.jsx("div",{style:{marginTop:"0.6rem"},children:J.map(_=>P.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",fontSize:"0.72rem",color:"var(--text-secondary)",marginBottom:"0.25rem"},children:[P.jsxs("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[_.slice(0,16),"…"]}),P.jsx("button",{onClick:()=>{F(O=>O.filter(X=>X!==_)),St()},style:{background:"none",border:"none",cursor:"pointer",color:"#fca5a5",fontSize:"0.78rem",padding:"0 0.2rem"},children:"✕"})]},_))}),P.jsxs("p",{style:{...pt.small,margin:"0.6rem 0 0",lineHeight:1.7},children:[lt,"×",ht,"px",P.jsx("br",{}),"Del remove · Ctrl+Z/Y undo/redo",P.jsx("br",{}),"Ctrl+D duplicate · [ ] layer order · Esc deselect"]})]})]}),P.jsxs("div",{onDragOver:li,onDrop:hi,style:{flex:1,overflow:"auto",display:"flex",alignItems:"flex-start",justifyContent:"center",padding:"2rem",position:"relative",...lr},children:[et&&P.jsx("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(13,13,18,0.85)",zIndex:5},children:P.jsx("div",{className:"spinner"})}),P.jsx("div",{style:{transform:`scale(${ki})`,transformOrigin:"top center",flexShrink:0},children:P.jsx("canvas",{ref:at,style:{display:"block",boxShadow:"0 12px 60px rgba(0,0,0,0.65)"}})})]}),P.jsxs("div",{style:{width:252,borderLeft:"1px solid var(--border)",background:"var(--bg-secondary)",display:"flex",flexDirection:"column",flexShrink:0,overflow:"hidden"},children:[P.jsx("div",{style:{padding:"0.7rem 0.9rem 0.4rem",display:"flex",alignItems:"center",gap:"0.4rem"},children:P.jsx("span",{style:{fontFamily:"Playfair Display, serif",fontStyle:"italic",fontSize:"0.85rem",color:"var(--text-secondary)"},children:"Deco Library"})}),P.jsx(hr,{mode:it,onDragAsset:oi,onPick:(_,O)=>{if(O==="Frames"){We(_.url);return}if(it==="grid"&&!x&&b.length===1){ae(_.url,b[0]);return}Ht(_.url)}})]})]}),B&&P.jsx(cr,{onSelect:Ti,onClose:()=>M(!1)}),U&&P.jsx(ur,{onConfirm:ni,onCancel:si})]})}export{mr as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.