mini-canvas-core
Version:
Core library for Mini Canvas Editor.
1 lines • 320 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).miniCanvasCore={})}(this,(function(t){"use strict";function e(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e&&(s=s.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,s)}return i}function i(t){for(var i=1;i<arguments.length;i++){var r=null!=arguments[i]?arguments[i]:{};i%2?e(Object(r),!0).forEach((function(e){s(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function s(t,e,i){return(e=o(e))in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function r(t,e){if(null==t)return{};var i,s,r=function(t,e){if(null==t)return{};var i,s,r={},n=Object.keys(t);for(s=0;s<n.length;s++)i=n[s],e.indexOf(i)>=0||(r[i]=t[i]);return r}(t,e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);for(s=0;s<n.length;s++)i=n[s],e.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(t,i)&&(r[i]=t[i])}return r}function n(t,e){return e||(e=t.slice(0)),Object.freeze(Object.defineProperties(t,{raw:{value:Object.freeze(e)}}))}function o(t){var e=function(t,e){if("object"!=typeof t||null===t)return t;var i=t[Symbol.toPrimitive];if(void 0!==i){var s=i.call(t,e||"default");if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==typeof e?e:String(e)}class a{constructor(){s(this,"browserShadowBlurConstant",1),s(this,"DPI",96),s(this,"devicePixelRatio",1),s(this,"perfLimitSizeTotal",2097152),s(this,"maxCacheSideLimit",4096),s(this,"minCacheSideLimit",256),s(this,"disableStyleCopyPaste",!1),s(this,"enableGLFiltering",!0),s(this,"textureSize",4096),s(this,"forceGLPutImageData",!1),s(this,"cachesBoundsOfCurve",!0),s(this,"fontPaths",{}),s(this,"NUM_FRACTION_DIGITS",4)}}const h=new class extends a{constructor(t){super(),this.configure(t)}configure(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};Object.assign(this,t)}addFonts(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.fontPaths=i(i({},this.fontPaths),t)}removeFonts(){(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).forEach((t=>{delete this.fontPaths[t]}))}clearFonts(){this.fontPaths={}}restoreDefaults(t){const e=new a,i=(null==t?void 0:t.reduce(((t,i)=>(t[i]=e[i],t)),{}))||e;this.configure(i)}},c=function(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),s=1;s<e;s++)i[s-1]=arguments[s];return console[t]("fabric",...i)};class l extends Error{constructor(t,e){super("fabric: ".concat(t),e)}}class d extends l{constructor(t){super("".concat(t," 'options.signal' is in 'aborted' state"))}}class u{}class g extends u{testPrecision(t,e){const i="precision ".concat(e," float;\nvoid main(){}"),s=t.createShader(t.FRAGMENT_SHADER);return!!s&&(t.shaderSource(s,i),t.compileShader(s),!!t.getShaderParameter(s,t.COMPILE_STATUS))}queryWebGL(t){const e=t.getContext("webgl");e&&(this.maxTextureSize=e.getParameter(e.MAX_TEXTURE_SIZE),this.GLPrecision=["highp","mediump","lowp"].find((t=>this.testPrecision(e,t))),c("log","WebGL: max texture size ".concat(this.maxTextureSize)))}isSupported(t){return!!this.maxTextureSize&&this.maxTextureSize>=t}}const f={};let p,m=!1;let v;const _=()=>v||(m||(h.configure({devicePixelRatio:window.devicePixelRatio||1}),p="ontouchstart"in window||"ontouchstart"in document||window&&window.navigator&&window.navigator.maxTouchPoints>0,m=!0),{document:document,window:window,isTouchSupported:p,WebGLProbe:new g,dispose(){},copyPasteData:f}),y=()=>_().document,x=()=>_().window;const b=new class{constructor(){s(this,"charWidthsCache",{}),s(this,"boundsOfCurveCache",{})}getFontCache(t){let{fontFamily:e,fontStyle:i,fontWeight:s}=t;e=e.toLowerCase(),this.charWidthsCache[e]||(this.charWidthsCache[e]={});const r=this.charWidthsCache[e],n="".concat(i.toLowerCase(),"_").concat((s+"").toLowerCase());return r[n]||(r[n]={}),r[n]}clearFontCache(t){(t=(t||"").toLowerCase())?this.charWidthsCache[t]&&delete this.charWidthsCache[t]:this.charWidthsCache={}}limitDimsByArea(t){const{perfLimitSizeTotal:e}=h,i=Math.sqrt(e*t);return[Math.floor(i),Math.floor(e/i)]}};const C="6.0.0-beta14";function w(){}const S=Math.PI/2,T=2*Math.PI,O=Math.PI/180,k=Object.freeze([1,0,0,1,0,0]),D=16,M=.4477152502,P="center",A="left",E="top",j="bottom",F="right",L="none",B=/\r?\n/,R="json",I="svg";const X=new class{constructor(){this[R]=new Map,this[I]=new Map}getClass(t){const e=this[R].get(t);if(!e)throw new l("No class registered for ".concat(t));return e}setClass(t,e){e?this[R].set(e,t):(this[R].set(t.type,t),this[R].set(t.type.toLowerCase(),t))}getSVGClass(t){return this[I].get(t)}setSVGClass(t,e){this[I].set(null!=e?e:t.type.toLowerCase(),t)}};const Y=new class extends Array{remove(t){const e=this.indexOf(t);e>-1&&this.splice(e,1)}cancelAll(){const t=this.splice(0);return t.forEach((t=>t.abort())),t}cancelByCanvas(t){if(!t)return[];const e=this.filter((e=>{var i;return e.target===t||"object"==typeof e.target&&(null===(i=e.target)||void 0===i?void 0:i.canvas)===t}));return e.forEach((t=>t.abort())),e}cancelByTarget(t){if(!t)return[];const e=this.filter((e=>e.target===t));return e.forEach((t=>t.abort())),e}};class W{constructor(){s(this,"__eventListeners",{})}on(t,e){if(this.__eventListeners||(this.__eventListeners={}),"object"==typeof t)return Object.entries(t).forEach((t=>{let[e,i]=t;this.on(e,i)})),()=>this.off(t);if(e){const i=t;return this.__eventListeners[i]||(this.__eventListeners[i]=[]),this.__eventListeners[i].push(e),()=>this.off(i,e)}return()=>!1}once(t,e){if("object"==typeof t){const e=[];return Object.entries(t).forEach((t=>{let[i,s]=t;e.push(this.once(i,s))})),()=>e.forEach((t=>t()))}if(e){const i=this.on(t,(function(){for(var t=arguments.length,s=new Array(t),r=0;r<t;r++)s[r]=arguments[r];e.call(this,...s),i()}));return i}return()=>!1}_removeEventListener(t,e){if(this.__eventListeners[t])if(e){const i=this.__eventListeners[t],s=i.indexOf(e);s>-1&&i.splice(s,1)}else this.__eventListeners[t]=[]}off(t,e){if(this.__eventListeners)if(void 0===t)for(const t in this.__eventListeners)this._removeEventListener(t);else"object"==typeof t?Object.entries(t).forEach((t=>{let[e,i]=t;this._removeEventListener(e,i)})):this._removeEventListener(t,e)}fire(t,e){var i;if(!this.__eventListeners)return;const s=null===(i=this.__eventListeners[t])||void 0===i?void 0:i.concat();if(s)for(let t=0;t<s.length;t++)s[t].call(this,e||{})}}const V=(t,e)=>Math.floor(Math.random()*(e-t+1))+t,H=(t,e)=>isNaN(t)&&"number"==typeof e?e:t,G=(t,e)=>{const i=t.indexOf(e);return-1!==i&&t.splice(i,1),t},z=t=>{if(0===t)return 1;switch(Math.abs(t)/S){case 1:case 3:return 0;case 2:return-1}return Math.cos(t)},U=t=>{if(0===t)return 0;const e=t/S,i=Math.sign(t);switch(e){case 1:return i;case 2:return 0;case 3:return-i}return Math.sin(t)};class N{constructor(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;"object"==typeof t?(this.x=t.x,this.y=t.y):(this.x=t,this.y=e)}add(t){return new N(this.x+t.x,this.y+t.y)}addEquals(t){return this.x+=t.x,this.y+=t.y,this}scalarAdd(t){return new N(this.x+t,this.y+t)}scalarAddEquals(t){return this.x+=t,this.y+=t,this}subtract(t){return new N(this.x-t.x,this.y-t.y)}subtractEquals(t){return this.x-=t.x,this.y-=t.y,this}scalarSubtract(t){return new N(this.x-t,this.y-t)}scalarSubtractEquals(t){return this.x-=t,this.y-=t,this}multiply(t){return new N(this.x*t.x,this.y*t.y)}scalarMultiply(t){return new N(this.x*t,this.y*t)}scalarMultiplyEquals(t){return this.x*=t,this.y*=t,this}divide(t){return new N(this.x/t.x,this.y/t.y)}scalarDivide(t){return new N(this.x/t,this.y/t)}scalarDivideEquals(t){return this.x/=t,this.y/=t,this}eq(t){return this.x===t.x&&this.y===t.y}lt(t){return this.x<t.x&&this.y<t.y}lte(t){return this.x<=t.x&&this.y<=t.y}gt(t){return this.x>t.x&&this.y>t.y}gte(t){return this.x>=t.x&&this.y>=t.y}lerp(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.5;return e=Math.max(Math.min(1,e),0),new N(this.x+(t.x-this.x)*e,this.y+(t.y-this.y)*e)}distanceFrom(t){const e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)}midPointFrom(t){return this.lerp(t)}min(t){return new N(Math.min(this.x,t.x),Math.min(this.y,t.y))}max(t){return new N(Math.max(this.x,t.x),Math.max(this.y,t.y))}toString(){return"".concat(this.x,",").concat(this.y)}setXY(t,e){return this.x=t,this.y=e,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setFromPoint(t){return this.x=t.x,this.y=t.y,this}swap(t){const e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i}clone(){return new N(this.x,this.y)}rotate(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:q;const i=U(t),s=z(t),r=this.subtract(e);return new N(r.x*s-r.y*i,r.x*i+r.y*s).add(e)}transform(t){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return new N(t[0]*this.x+t[2]*this.y+(e?0:t[4]),t[1]*this.x+t[3]*this.y+(e?0:t[5]))}}const q=new N(0,0);function K(t){class e extends t{constructor(){super(...arguments),s(this,"_objects",[])}_onObjectAdded(t){}_onObjectRemoved(t){}_onStackOrderChanged(t){}add(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];const s=this._objects.push(...e);return e.forEach((t=>this._onObjectAdded(t))),s}insertAt(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),s=1;s<e;s++)i[s-1]=arguments[s];return this._objects.splice(t,0,...i),i.forEach((t=>this._onObjectAdded(t))),this._objects.length}remove(){const t=this._objects,e=[];for(var i=arguments.length,s=new Array(i),r=0;r<i;r++)s[r]=arguments[r];return s.forEach((i=>{const s=t.indexOf(i);-1!==s&&(t.splice(s,1),e.push(i),this._onObjectRemoved(i))})),e}forEachObject(t){this.getObjects().forEach(((e,i,s)=>t(e,i,s)))}getObjects(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return 0===e.length?[...this._objects]:this._objects.filter((t=>t.isType(...e)))}item(t){return this._objects[t]}isEmpty(){return 0===this._objects.length}size(){return this._objects.length}contains(t,i){return!!this._objects.includes(t)||!!i&&this._objects.some((i=>i instanceof e&&i.contains(t,!0)))}complexity(){return this._objects.reduce(((t,e)=>t+=e.complexity?e.complexity():0),0)}sendObjectToBack(t){return!(!t||t===this._objects[0])&&(G(this._objects,t),this._objects.unshift(t),this._onStackOrderChanged(t),!0)}bringObjectToFront(t){return!(!t||t===this._objects[this._objects.length-1])&&(G(this._objects,t),this._objects.push(t),this._onStackOrderChanged(t),!0)}sendObjectBackwards(t,e){if(!t)return!1;const i=this._objects.indexOf(t);if(0!==i){const s=this.findNewLowerIndex(t,i,e);return G(this._objects,t),this._objects.splice(s,0,t),this._onStackOrderChanged(t),!0}return!1}bringObjectForward(t,e){if(!t)return!1;const i=this._objects.indexOf(t);if(i!==this._objects.length-1){const s=this.findNewUpperIndex(t,i,e);return G(this._objects,t),this._objects.splice(s,0,t),this._onStackOrderChanged(t),!0}return!1}moveObjectTo(t,e){return t!==this._objects[e]&&(G(this._objects,t),this._objects.splice(e,0,t),this._onStackOrderChanged(t),!0)}findNewLowerIndex(t,e,i){let s;if(i){s=e;for(let i=e-1;i>=0;--i)if(t.isOverlapping(this._objects[i])){s=i;break}}else s=e-1;return s}findNewUpperIndex(t,e,i){let s;if(i){s=e;for(let i=e+1;i<this._objects.length;++i)if(t.isOverlapping(this._objects[i])){s=i;break}}else s=e+1;return s}collectObjects(t){let{left:e,top:i,width:s,height:r}=t,{includeIntersecting:n=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=[],a=new N(e,i),h=a.add(new N(s,r));for(let t=this._objects.length-1;t>=0;t--){const e=this._objects[t];e.selectable&&e.visible&&(n&&e.intersectsWithRect(a,h,!0)||e.isContainedWithinRect(a,h,!0)||n&&e.containsPoint(a,!0)||n&&e.containsPoint(h,!0))&&o.push(e)}return o}}return e}class J extends W{_setOptions(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};for(const e in t)this.set(e,t[e])}_setObject(t){for(const e in t)this._set(e,t[e])}set(t,e){return"object"==typeof t?this._setObject(t):this._set(t,e),this}_set(t,e){this[t]=e}toggle(t){const e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this}get(t){return this[t]}}function Z(t){return x().requestAnimationFrame(t)}function Q(t){return x().cancelAnimationFrame(t)}let $=0;const tt=()=>$++,et=()=>{const t=y().createElement("canvas");if(!t||void 0===t.getContext)throw new l("Failed to create `canvas` element");return t},it=()=>y().createElement("img"),st=(t,e,i)=>t.toDataURL("image/".concat(e),i),rt=t=>t*O,nt=t=>t/O,ot=["translateX","translateY","angle"],at=(t,e,i)=>new N(t).transform(e,i),ht=t=>{const e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0],0,0],{x:s,y:r}=new N(t[4],t[5]).transform(i,!0);return i[4]=-s,i[5]=-r,i},ct=(t,e,i)=>[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]],lt=(t,e)=>t.reduceRight(((t,i)=>i?ct(i,t,e):t),k),dt=t=>{const e=Math.atan2(t[1],t[0]),i=Math.pow(t[0],2)+Math.pow(t[1],2),s=Math.sqrt(i),r=(t[0]*t[3]-t[2]*t[1])/s,n=Math.atan2(t[0]*t[2]+t[1]*t[3],i);return{angle:nt(e),scaleX:s,scaleY:r,skewX:nt(n),skewY:0,translateX:t[4]||0,translateY:t[5]||0}},ut=function(t){return[1,0,0,1,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0]};function gt(){let{angle:t=0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{x:e=0,y:i=0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=rt(t),r=z(s),n=U(s);return[r,n,-n,r,e?e-(r*e-n*i):0,i?i-(n*e+r*i):0]}const ft=function(t){return[t,0,0,arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,0,0]},pt=t=>Math.tan(rt(t)),mt=t=>[1,0,pt(t),1,0,0],vt=t=>[1,pt(t),0,1,0,0],_t=t=>{let{scaleX:e=1,scaleY:i=1,flipX:s=!1,flipY:r=!1,skewX:n=0,skewY:o=0}=t;return lt([ft(s?-e:e,r?-i:i),n&&mt(n),o&&vt(o)],!0)},yt=t=>{let{translateX:e=0,translateY:i=0,angle:s=0}=t,n=r(t,ot);return lt([ut(e,i),s&>({angle:s}),_t(n)])},xt=function(t){let{signal:e,crossOrigin:i=null}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new Promise((function(s,r){if(e&&e.aborted)return r(new d("loadImage"));const n=it();let o;e&&(o=function(t){n.src="",r(t)},e.addEventListener("abort",o,{once:!0}));const a=function(){n.onload=n.onerror=null,o&&(null==e||e.removeEventListener("abort",o)),s(n)};t?(n.onload=a,n.onerror=function(){o&&(null==e||e.removeEventListener("abort",o)),r(new l("Error loading ".concat(n.src)))},i&&(n.crossOrigin=i),n.src=t):a()}))},bt=function(t){let{signal:e,reviver:i=w}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new Promise(((s,r)=>{const n=[];e&&e.addEventListener("abort",r,{once:!0}),Promise.all(t.map((t=>X.getClass(t.type).fromObject(t,{signal:e,reviver:i}).then((e=>(i(t,e),n.push(e),e)))))).then(s).catch((t=>{n.forEach((t=>{t.dispose&&t.dispose()})),r(t)})).finally((()=>{e&&e.removeEventListener("abort",r)}))}))},Ct=function(t){let{signal:e}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new Promise(((i,s)=>{const r=[];e&&e.addEventListener("abort",s,{once:!0});const n=Object.values(t).map((t=>t?t.colorStops?new(X.getClass("gradient"))(t):t.type?bt([t],{signal:e}).then((t=>{let[e]=t;return r.push(e),e})):t.source?X.getClass("pattern").fromObject(t,{signal:e}).then((t=>(r.push(t),t))):t:t)),o=Object.keys(t);Promise.all(n).then((t=>t.reduce(((t,e,i)=>(t[o[i]]=e,t)),{}))).then(i).catch((t=>{r.forEach((t=>{t.dispose&&t.dispose()})),s(t)})).finally((()=>{e&&e.removeEventListener("abort",s)}))}))},wt=function(t){return(arguments.length>1&&void 0!==arguments[1]?arguments[1]:[]).reduce(((e,i)=>(i in t&&(e[i]=t[i]),e)),{})},St=(t,e)=>Object.keys(t).reduce(((i,s)=>(e(t[s],s,t)&&(i[s]=t[s]),i)),{}),Tt={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#0FF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000",blanchedalmond:"#FFEBCD",blue:"#00F",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#0FF",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:"#F0F",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:"#789",lightslategrey:"#789",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#0F0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#F0F",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",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:"#639",red:"#F00",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:"#FFF",whitesmoke:"#F5F5F5",yellow:"#FF0",yellowgreen:"#9ACD32"},Ot=(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),kt=(t,e,i,s)=>{t/=255,e/=255,i/=255;const r=Math.max(t,e,i),n=Math.min(t,e,i);let o,a;const h=(r+n)/2;if(r===n)o=a=0;else{const s=r-n;switch(a=h>.5?s/(2-r-n):s/(r+n),r){case t:o=(e-i)/s+(e<i?6:0);break;case e:o=(i-t)/s+2;break;case i:o=(t-e)/s+4}o/=6}return[Math.round(360*o),Math.round(100*a),Math.round(100*h),s]},Dt=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"1";return parseFloat(t)/(t.endsWith("%")?100:1)},Mt=t=>Math.min(Math.round(t),255).toString(16).toUpperCase().padStart(2,"0"),Pt=t=>{let[e,i,s,r=1]=t;const n=Math.round(.3*e+.59*i+.11*s);return[n,n,n,r]};class At{constructor(t){if(t)if(t instanceof At)this.setSource([...t._source]);else if(Array.isArray(t)){const[e,i,s,r=1]=t;this.setSource([e,i,s,r])}else this.setSource(this._tryParsingColor(t));else this.setSource([0,0,0,1])}_tryParsingColor(t){return t in Tt&&(t=Tt[t]),"transparent"===t?[255,255,255,0]:At.sourceFromHex(t)||At.sourceFromRgb(t)||At.sourceFromHsl(t)||[0,0,0,1]}getSource(){return this._source}setSource(t){this._source=t}toRgb(){const[t,e,i]=this.getSource();return"rgb(".concat(t,",").concat(e,",").concat(i,")")}toRgba(){return"rgba(".concat(this.getSource().join(","),")")}toHsl(){const[t,e,i]=kt(...this.getSource());return"hsl(".concat(t,",").concat(e,"%,").concat(i,"%)")}toHsla(){const[t,e,i,s]=kt(...this.getSource());return"hsla(".concat(t,",").concat(e,"%,").concat(i,"%,").concat(s,")")}toHex(){return this.toHexa().slice(0,6)}toHexa(){const[t,e,i,s]=this.getSource();return"".concat(Mt(t)).concat(Mt(e)).concat(Mt(i)).concat(Mt(Math.round(255*s)))}getAlpha(){return this.getSource()[3]}setAlpha(t){return this._source[3]=t,this}toGrayscale(){return this.setSource(Pt(this.getSource())),this}toBlackWhite(t){const[e,,,i]=Pt(this.getSource()),s=e<(t||127)?0:255;return this.setSource([s,s,s,i]),this}overlayWith(t){t instanceof At||(t=new At(t));const e=this.getSource(),i=t.getSource(),[s,r,n]=e.map(((t,e)=>Math.round(.5*t+.5*i[e])));return this.setSource([s,r,n,e[3]]),this}static fromRgb(t){return At.fromRgba(t)}static fromRgba(t){return new At(At.sourceFromRgb(t))}static sourceFromRgb(t){const e=t.match(/^rgba?\(\s*(\d{0,3}(?:\.\d+)?%?)\s*[\s|,]\s*(\d{0,3}(?:\.\d+)?%?)\s*[\s|,]\s*(\d{0,3}(?:\.\d+)?%?)\s*(?:\s*[,/]\s*(\d{0,3}(?:\.\d+)?%?)\s*)?\)$/i);if(e){const[t,i,s]=e.slice(1,4).map((t=>{const e=parseFloat(t);return t.endsWith("%")?Math.round(2.55*e):e}));return[t,i,s,Dt(e[4])]}}static fromHsl(t){return At.fromHsla(t)}static fromHsla(t){return new At(At.sourceFromHsl(t))}static sourceFromHsl(t){const e=t.match(/^hsla?\(\s*([+-]?\d{1,3})\s*[\s|,]\s*(\d{1,3}%)\s*[\s|,]\s*(\d{1,3}%)\s*(?:\s*[,/]\s*(\d*(?:\.\d+)?%?)\s*)?\)$/i);if(!e)return;const i=(parseFloat(e[1])%360+360)%360/360,s=parseFloat(e[2])/100,r=parseFloat(e[3])/100;let n,o,a;if(0===s)n=o=a=r;else{const t=r<=.5?r*(s+1):r+s-r*s,e=2*r-t;n=Ot(e,t,i+1/3),o=Ot(e,t,i),a=Ot(e,t,i-1/3)}return[Math.round(255*n),Math.round(255*o),Math.round(255*a),Dt(e[4])]}static fromHex(t){return new At(At.sourceFromHex(t))}static sourceFromHex(t){if(t.match(/^#?(([0-9a-f]){3,4}|([0-9a-f]{2}){3,4})$/i)){const e=t.slice(t.indexOf("#")+1);let i;i=e.length<=4?e.split("").map((t=>t+t)):e.match(/.{2}/g);const[s,r,n,o=255]=i.map((t=>parseInt(t,16)));return[s,r,n,o/255]}}}const Et=(t,e)=>parseFloat(Number(t).toFixed(e)),jt=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:D;const i=/\D{0,2}$/.exec(t),s=parseFloat(t),r=h.DPI;switch(null==i?void 0:i[0]){case"mm":return s*r/25.4;case"cm":return s*r/2.54;case"in":return s*r;case"pt":return s*r/72;case"pc":return s*r/72*12;case"em":return s*e;default:return s}},Ft=t=>{const[e,i]=t.trim().split(" "),[s,r]=(n=e)&&n!==L?[n.slice(1,4),n.slice(5,8)]:n===L?[n,n]:["Mid","Mid"];var n;return{meetOrSlice:i||"meet",alignX:s,alignY:r}},Lt=t=>"matrix("+t.map((t=>Et(t,h.NUM_FRACTION_DIGITS))).join(" ")+")",Bt=function(t,e){let i,s,r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(e)if(e.toLive)i="url(#SVGID_".concat(e.id,")");else{const t=new At(e),r=t.getAlpha();i=t.toRgb(),1!==r&&(s=r.toString())}else i="none";return r?"".concat(t,": ").concat(i,"; ").concat(s?"".concat(t,"-opacity: ").concat(s,"; "):""):"".concat(t,'="').concat(i,'" ').concat(s?"".concat(t,'-opacity="').concat(s,'" '):"")},Rt=t=>!!t&&void 0!==t.toLive,It=t=>!!t&&"function"==typeof t.toObject,Xt=t=>!!t&&void 0!==t.offsetX&&void 0!==t.source,Yt=t=>!!t&&Array.isArray(t._objects),Wt=t=>!!t&&t.isType("Text","IText","Textbox"),Vt=t=>!!t&&t.isType("IText","Textbox"),Ht=t=>!!t&&"function"==typeof t.onDragStart&&"function"==typeof t.shouldStartDragging;function Gt(t){const e=t&&zt(t);let i=0,s=0;if(!t||!e)return{left:i,top:s};const r=e.documentElement,n=e.body||{scrollLeft:0,scrollTop:0};for(;t&&(t.parentNode||t.host)&&((t=t.parentNode||t.host)===e?(i=n.scrollLeft||r.scrollLeft||0,s=n.scrollTop||r.scrollTop||0):(i+=t.scrollLeft||0,s+=t.scrollTop||0),1!==t.nodeType||"fixed"!==t.style.position););return{left:i,top:s}}const zt=t=>t.ownerDocument||null,Ut=t=>{var e;return(null===(e=t.ownerDocument)||void 0===e?void 0:e.defaultView)||null};function Nt(t,e){const i=t.style;i&&("string"==typeof e?t.style.cssText+=";"+e:Object.entries(e).forEach((t=>{let[e,s]=t;return i.setProperty(e,s)})))}const qt=function(t,e,i){let{width:s,height:r}=i,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;t.width=s,t.height=r,n>1&&(t.setAttribute("width",(s*n).toString()),t.setAttribute("height",(r*n).toString()),e.scale(n,n))};const Kt=(t,e)=>{let{width:i,height:s}=e;i&&(t.style.width="number"==typeof i?"".concat(i,"px"):i),s&&(t.style.height="number"==typeof s?"".concat(s,"px"):s)};function Jt(t){return void 0!==t.onselectstart&&(t.onselectstart=()=>!1),t.style.userSelect=L,t}class Zt{constructor(t){s(this,"_originalCanvasStyle",void 0),s(this,"lower",void 0);const e=this.createLowerCanvas(t);this.lower={el:e,ctx:e.getContext("2d")}}createLowerCanvas(t){const e=(i=t)&&void 0!==i.getContext?t:t&&y().getElementById(t)||et();var i;if(e.hasAttribute("data-fabric"))throw new l("Trying to initialize a canvas that has already been initialized. Did you forget to dispose the canvas?");return this._originalCanvasStyle=e.style.cssText,e.setAttribute("data-fabric","main"),e.classList.add("lower-canvas"),e}cleanupDOM(t){let{width:e,height:i}=t;const{el:s}=this.lower;s.classList.remove("lower-canvas"),s.removeAttribute("data-fabric"),s.setAttribute("width","".concat(e)),s.setAttribute("height","".concat(i)),s.style.cssText=this._originalCanvasStyle||"",this._originalCanvasStyle=void 0}setDimensions(t,e){const{el:i,ctx:s}=this.lower;qt(i,s,t,e)}setCSSDimensions(t){Kt(this.lower.el,t)}calcOffset(){return function(t){var e;let i={left:0,top:0};const s=t&&zt(t),r={left:0,top:0},n={borderLeftWidth:A,borderTopWidth:E,paddingLeft:A,paddingTop:E};if(!s)return r;const o=(null===(e=Ut(t))||void 0===e?void 0:e.getComputedStyle(t,null))||{};for(const t in n)r[n[t]]+=parseInt(o[t],10)||0;const a=s.documentElement;void 0!==t.getBoundingClientRect&&(i=t.getBoundingClientRect());const h=Gt(t);return{left:i.left+h.left-(a.clientLeft||0)+r.left,top:i.top+h.top-(a.clientTop||0)+r.top}}(this.lower.el)}dispose(){_().dispose(this.lower.el),delete this.lower}}const Qt={backgroundVpt:!0,backgroundColor:"",overlayVpt:!0,overlayColor:"",includeDefaultValues:!0,svgViewportTransformation:!0,renderOnAddRemove:!0,skipOffscreen:!0,enableRetinaScaling:!0,imageSmoothingEnabled:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,viewportTransform:[...k]};class $t extends(K(J)){get lowerCanvasEl(){var t;return null===(t=this.elements.lower)||void 0===t?void 0:t.el}get contextContainer(){var t;return null===(t=this.elements.lower)||void 0===t?void 0:t.ctx}static getDefaults(){return $t.ownDefaults}constructor(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};super(),Object.assign(this,this.constructor.getDefaults()),this.set(e),this.initElements(t),this._setDimensionsImpl({width:this.width||this.elements.lower.el.width||0,height:this.height||this.elements.lower.el.height||0}),this.viewportTransform=[...this.viewportTransform],this.calcViewportBoundaries()}initElements(t){this.elements=new Zt(t)}add(){const t=super.add(...arguments);return arguments.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),t}insertAt(t){for(var e=arguments.length,i=new Array(e>1?e-1:0),s=1;s<e;s++)i[s-1]=arguments[s];const r=super.insertAt(t,...i);return i.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),r}remove(){const t=super.remove(...arguments);return t.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),t}_onObjectAdded(t){t.canvas&&t.canvas!==this&&(c("warn","Canvas is trying to add an object that belongs to a different canvas.\nResulting to default behavior: removing object from previous canvas and adding to new canvas"),t.canvas.remove(t)),t._set("canvas",this),t.setCoords(),this.fire("object:added",{target:t}),t.fire("added",{target:this})}_onObjectRemoved(t){t._set("canvas",void 0),this.fire("object:removed",{target:t}),t.fire("removed",{target:this})}_onStackOrderChanged(){this.renderOnAddRemove&&this.requestRenderAll()}_isRetinaScaling(){return h.devicePixelRatio>1&&this.enableRetinaScaling}getRetinaScaling(){return this._isRetinaScaling()?Math.max(1,h.devicePixelRatio):1}calcOffset(){return this._offset=this.elements.calcOffset()}getWidth(){return this.width}getHeight(){return this.height}setWidth(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.setDimensions({width:t},e)}setHeight(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this.setDimensions({height:t},e)}_setDimensionsImpl(t){let{cssOnly:e=!1,backstoreOnly:s=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e){const e=i({width:this.width,height:this.height},t);this.elements.setDimensions(e,this.getRetinaScaling()),this.hasLostContext=!0,this.width=e.width,this.height=e.height}s||this.elements.setCSSDimensions(t),this.calcOffset()}setDimensions(t){let{cssOnly:e=!1,backstoreOnly:i=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._setDimensionsImpl(t,{cssOnly:e,backstoreOnly:i}),e||this.requestRenderAll()}getZoom(){return this.viewportTransform[0]}setViewportTransform(t){const e=this.backgroundImage,i=this.overlayImage,s=this._objects.length;this.viewportTransform=t;for(let t=0;t<s;t++){const e=this._objects[t];e.group||e.setCoords()}e&&e.setCoords(),i&&i.setCoords(),this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll()}zoomToPoint(t,e){const i=t,s=[...this.viewportTransform],r=at(t,ht(s));s[0]=e,s[3]=e;const n=at(r,s);s[4]+=i.x-n.x,s[5]+=i.y-n.y,this.setViewportTransform(s)}setZoom(t){this.zoomToPoint(new N(0,0),t)}absolutePan(t){const e=[...this.viewportTransform];return e[4]=-t.x,e[5]=-t.y,this.setViewportTransform(e)}relativePan(t){return this.absolutePan(new N(-t.x-this.viewportTransform[4],-t.y-this.viewportTransform[5]))}getElement(){return this.elements.lower.el}clearContext(t){t.clearRect(0,0,this.width,this.height)}getContext(){return this.elements.lower.ctx}clear(){this.remove(...this.getObjects()),this.backgroundImage=void 0,this.overlayImage=void 0,this.backgroundColor="",this.overlayColor="",this.clearContext(this.getContext()),this.fire("canvas:cleared"),this.renderOnAddRemove&&this.requestRenderAll()}renderAll(){this.cancelRequestedRender(),this.destroyed||this.renderCanvas(this.getContext(),this._objects)}renderAndReset(){this.nextRenderHandle=0,this.renderAll()}requestRenderAll(){this.nextRenderHandle||this.disposed||this.destroyed||(this.nextRenderHandle=Z((()=>this.renderAndReset())))}calcViewportBoundaries(){const t=this.width,e=this.height,i=ht(this.viewportTransform),s=at({x:0,y:0},i),r=at({x:t,y:e},i),n=s.min(r),o=s.max(r);return this.vptCoords={tl:n,tr:new N(o.x,n.y),bl:new N(n.x,o.y),br:o}}cancelRequestedRender(){this.nextRenderHandle&&(Q(this.nextRenderHandle),this.nextRenderHandle=0)}drawControls(t){}renderCanvas(t,e){if(this.destroyed)return;const i=this.viewportTransform,s=this.clipPath;this.calcViewportBoundaries(),this.clearContext(t),t.imageSmoothingEnabled=this.imageSmoothingEnabled,t.patternQuality="best",this.fire("before:render",{ctx:t}),this._renderBackground(t),t.save(),t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this._renderObjects(t,e),t.restore(),this.controlsAboveOverlay||this.drawControls(t),s&&(s._set("canvas",this),s.shouldCache(),s._transformDone=!0,s.renderCache({forClipping:!0}),this.drawClipPathOnCanvas(t,s)),this._renderOverlay(t),this.controlsAboveOverlay&&this.drawControls(t),this.fire("after:render",{ctx:t}),this.__cleanupTask&&(this.__cleanupTask(),this.__cleanupTask=void 0)}drawClipPathOnCanvas(t,e){const i=this.viewportTransform;t.save(),t.transform(...i),t.globalCompositeOperation="destination-in",e.transform(t),t.scale(1/e.zoomX,1/e.zoomY),t.drawImage(e._cacheCanvas,-e.cacheTranslationX,-e.cacheTranslationY),t.restore()}_renderObjects(t,e){for(let i=0,s=e.length;i<s;++i)e[i]&&e[i].render(t)}_renderBackgroundOrOverlay(t,e){const i=this["".concat(e,"Color")],s=this["".concat(e,"Image")],r=this.viewportTransform,n=this["".concat(e,"Vpt")];if(!i&&!s)return;const o=Rt(i);if(i){if(t.save(),t.beginPath(),t.moveTo(0,0),t.lineTo(this.width,0),t.lineTo(this.width,this.height),t.lineTo(0,this.height),t.closePath(),t.fillStyle=o?i.toLive(t):i,n&&t.transform(...r),o){t.transform(1,0,0,1,i.offsetX||0,i.offsetY||0);const e=i.gradientTransform||i.patternTransform;e&&t.transform(...e)}t.fill(),t.restore()}if(s){t.save();const{skipOffscreen:e}=this;this.skipOffscreen=n,n&&t.transform(...r),s.render(t),this.skipOffscreen=e,t.restore()}}_renderBackground(t){this._renderBackgroundOrOverlay(t,"background")}_renderOverlay(t){this._renderBackgroundOrOverlay(t,"overlay")}getCenter(){return{top:this.height/2,left:this.width/2}}getCenterPoint(){return new N(this.width/2,this.height/2)}centerObjectH(t){return this._centerObject(t,new N(this.getCenterPoint().x,t.getCenterPoint().y))}centerObjectV(t){return this._centerObject(t,new N(t.getCenterPoint().x,this.getCenterPoint().y))}centerObject(t){return this._centerObject(t,this.getCenterPoint())}viewportCenterObject(t){return this._centerObject(t,this.getVpCenter())}viewportCenterObjectH(t){return this._centerObject(t,new N(this.getVpCenter().x,t.getCenterPoint().y))}viewportCenterObjectV(t){return this._centerObject(t,new N(t.getCenterPoint().x,this.getVpCenter().y))}getVpCenter(){return at(this.getCenterPoint(),ht(this.viewportTransform))}_centerObject(t,e){t.setXY(e,P,P),t.setCoords(),this.renderOnAddRemove&&this.requestRenderAll()}toDatalessJSON(t){return this.toDatalessObject(t)}toObject(t){return this._toObjectMethod("toObject",t)}toJSON(){return this.toObject()}toDatalessObject(t){return this._toObjectMethod("toDatalessObject",t)}_toObjectMethod(t,e){const s=this.clipPath,r=s&&!s.excludeFromExport?this._toObject(s,t,e):null;return i(i(i({version:C},wt(this,e)),{},{objects:this._objects.filter((t=>!t.excludeFromExport)).map((i=>this._toObject(i,t,e)))},this.__serializeBgOverlay(t,e)),r?{clipPath:r}:null)}_toObject(t,e,i){let s;this.includeDefaultValues||(s=t.includeDefaultValues,t.includeDefaultValues=!1);const r=t[e](i);return this.includeDefaultValues||(t.includeDefaultValues=!!s),r}__serializeBgOverlay(t,e){const i={},s=this.backgroundImage,r=this.overlayImage,n=this.backgroundColor,o=this.overlayColor;return Rt(n)?n.excludeFromExport||(i.background=n.toObject(e)):n&&(i.background=n),Rt(o)?o.excludeFromExport||(i.overlay=o.toObject(e)):o&&(i.overlay=o),s&&!s.excludeFromExport&&(i.backgroundImage=this._toObject(s,t,e)),r&&!r.excludeFromExport&&(i.overlayImage=this._toObject(r,t,e)),i}toSVG(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;t.reviver=e;const i=[];return this._setSVGPreamble(i,t),this._setSVGHeader(i,t),this.clipPath&&i.push('<g clip-path="url(#'.concat(this.clipPath.clipPathId,')" >\n')),this._setSVGBgOverlayColor(i,"background"),this._setSVGBgOverlayImage(i,"backgroundImage",e),this._setSVGObjects(i,e),this.clipPath&&i.push("</g>\n"),this._setSVGBgOverlayColor(i,"overlay"),this._setSVGBgOverlayImage(i,"overlayImage",e),i.push("</svg>"),i.join("")}_setSVGPreamble(t,e){e.suppressPreamble||t.push('<?xml version="1.0" encoding="',e.encoding||"UTF-8",'" standalone="no" ?>\n','<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ','"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n')}_setSVGHeader(t,e){const i=e.width||"".concat(this.width),s=e.height||"".concat(this.height),r=h.NUM_FRACTION_DIGITS,n=e.viewBox;let o;if(n)o='viewBox="'.concat(n.x," ").concat(n.y," ").concat(n.width," ").concat(n.height,'" ');else if(this.svgViewportTransformation){const t=this.viewportTransform;o='viewBox="'.concat(Et(-t[4]/t[0],r)," ").concat(Et(-t[5]/t[3],r)," ").concat(Et(this.width/t[0],r)," ").concat(Et(this.height/t[3],r),'" ')}else o='viewBox="0 0 '.concat(this.width," ").concat(this.height,'" ');t.push("<svg ",'xmlns="http://www.w3.org/2000/svg" ','xmlns:xlink="http://www.w3.org/1999/xlink" ','version="1.1" ','width="',i,'" ','height="',s,'" ',o,'xml:space="preserve">\n',"<desc>Created with Fabric.js ",C,"</desc>\n","<defs>\n",this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(e),"</defs>\n")}createSVGClipPathMarkup(t){const e=this.clipPath;return e?(e.clipPathId="CLIPPATH_".concat(tt()),'<clipPath id="'.concat(e.clipPathId,'" >\n').concat(e.toClipPathSVG(t.reviver),"</clipPath>\n")):""}createSVGRefElementsMarkup(){return["background","overlay"].map((t=>{const e=this["".concat(t,"Color")];if(Rt(e)){const i=this["".concat(t,"Vpt")],s=this.viewportTransform,r={isType:()=>!1,width:this.width/(i?s[0]:1),height:this.height/(i?s[3]:1)};return e.toSVG(r,{additionalTransform:i?Lt(s):""})}})).join("")}createSVGFontFacesMarkup(){const t=[],e={},i=h.fontPaths;this._objects.forEach((function e(i){t.push(i),Yt(i)&&i._objects.forEach(e)})),t.forEach((t=>{if(!Wt(t))return;const{styles:s,fontFamily:r}=t;!e[r]&&i[r]&&(e[r]=!0,s&&Object.values(s).forEach((t=>{Object.values(t).forEach((t=>{let{fontFamily:s=""}=t;!e[s]&&i[s]&&(e[s]=!0)}))})))}));const s=Object.keys(e).map((t=>"\t\t@font-face {\n\t\t\tfont-family: '".concat(t,"';\n\t\t\tsrc: url('").concat(i[t],"');\n\t\t}\n"))).join("");return s?'\t<style type="text/css"><![CDATA[\n'.concat(s,"]]></style>\n"):""}_setSVGObjects(t,e){this.forEachObject((i=>{i.excludeFromExport||this._setSVGObject(t,i,e)}))}_setSVGObject(t,e,i){t.push(e.toSVG(i))}_setSVGBgOverlayImage(t,e,i){const s=this[e];s&&!s.excludeFromExport&&s.toSVG&&t.push(s.toSVG(i))}_setSVGBgOverlayColor(t,e){const i=this["".concat(e,"Color")];if(i)if(Rt(i)){const s=i.repeat||"",r=this.width,n=this.height,o=this["".concat(e,"Vpt")]?Lt(ht(this.viewportTransform)):"";t.push('<rect transform="'.concat(o," translate(").concat(r/2,",").concat(n/2,')" x="').concat(i.offsetX-r/2,'" y="').concat(i.offsetY-n/2,'" width="').concat("repeat-y"!==s&&"no-repeat"!==s||!Xt(i)?r:i.source.width,'" height="').concat("repeat-x"!==s&&"no-repeat"!==s||!Xt(i)?n:i.source.height,'" fill="url(#SVGID_').concat(i.id,')"></rect>\n'))}else t.push('<rect x="0" y="0" width="100%" height="100%" ','fill="',i,'"',"></rect>\n")}loadFromJSON(t,e){let{signal:i}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!t)return Promise.reject(new l("`json` is undefined"));const s="string"==typeof t?JSON.parse(t):t,{objects:r=[],backgroundImage:n,background:o,overlayImage:a,overlay:h,clipPath:c}=s,d=this.renderOnAddRemove;return this.renderOnAddRemove=!1,Promise.all([bt(r,{reviver:e,signal:i}),Ct({backgroundImage:n,backgroundColor:o,overlayImage:a,overlayColor:h,clipPath:c},{signal:i})]).then((t=>{let[e,i]=t;return this.clear(),this.add(...e),this.set(s),this.set(i),this.renderOnAddRemove=d,this}))}clone(t){const e=this.toObject(t);return this.cloneWithoutData().loadFromJSON(e)}cloneWithoutData(){const t=et();return t.width=this.width,t.height=this.height,new this.constructor(t)}toDataURL(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{format:e="png",quality:i=1,multiplier:s=1,enableRetinaScaling:r=!1}=t,n=s*(r?this.getRetinaScaling():1);return st(this.toCanvasElement(n,t),e,i)}toCanvasElement(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,{width:e,height:i,left:s,top:r,filter:n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=(e||this.width)*t,a=(i||this.height)*t,h=this.getZoom(),c=this.width,l=this.height,d=h*t,u=this.viewportTransform,g=[d,0,0,d,(u[4]-(s||0))*t,(u[5]-(r||0))*t],f=this.enableRetinaScaling,p=et(),m=n?this._objects.filter((t=>n(t))):this._objects;return p.width=o,p.height=a,this.enableRetinaScaling=!1,this.viewportTransform=g,this.width=o,this.height=a,this.calcViewportBoundaries(),this.renderCanvas(p.getContext("2d"),m),this.viewportTransform=u,this.width=c,this.height=l,this.calcViewportBoundaries(),this.enableRetinaScaling=f,p}dispose(){return!this.disposed&&this.elements.cleanupDOM({width:this.width,height:this.height}),Y.cancelByCanvas(this),this.disposed=!0,new Promise(((t,e)=>{const i=()=>{this.destroy(),t(!0)};i.kill=e,this.__cleanupTask&&this.__cleanupTask.kill("aborted"),this.destroyed?t(!1):this.nextRenderHandle?this.__cleanupTask=i:i()}))}destroy(){this.destroyed=!0,this.cancelRequestedRender(),this.forEachObject((t=>t.dispose())),this._objects=[],this.backgroundImage&&this.backgroundImage.dispose(),this.backgroundImage=void 0,this.overlayImage&&this.overlayImage.dispose(),this.overlayImage=void 0,this.elements.dispose()}toString(){return"#<Canvas (".concat(this.complexity(),"): { objects: ").concat(this._objects.length," }>")}}s($t,"ownDefaults",Qt);const te=["touchstart","touchmove","touchend"];const ee=t=>{const e=Gt(t.target),i=function(t){const e=t.changedTouches;return e&&e[0]?e[0]:t}(t);return new N(i.clientX+e.left,i.clientY+e.top)},ie=t=>te.includes(t.type)||"touch"===t.pointerType,se=t=>{t.preventDefault(),t.stopPropagation()},re=t=>{if(0===t.length)return{left:0,top:0,width:0,height:0};const{min:e,max:i}=t.reduce(((t,e)=>{let{min:i,max:s}=t;return{min:i.min(e),max:s.max(e)}}),{min:new N(t[0]),max:new N(t[0])}),s=i.subtract(e);return{left:e.x,top:e.y,width:s.x,height:s.y}},ne=["translateX","translateY","scaleX","scaleY"],oe=(t,e)=>ae(t,ct(e,t.calcOwnMatrix())),ae=(t,e)=>{const i=dt(e),{translateX:s,translateY:n,scaleX:o,scaleY:a}=i,h=r(i,ne),c=new N(s,n);t.flipX=!1,t.flipY=!1,Object.assign(t,h),t.set({scaleX:o,scaleY:a}),t.setPositionByOrigin(c,P,P)},he=t=>{t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.rotate(0)},ce=t=>({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}),le=(t,e,i)=>{const s=t/2,r=e/2,n=_t(i),o=[new N(-s,-r),new N(s,-r),new N(-s,r),new N(s,r)].map((t=>t.transform(n))),a=re(o);return new N(a.width,a.height)},de=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:k;return ct(ht(arguments.length>1&&void 0!==arguments[1]?arguments[1]:k),t)},ue=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:k,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:k;return t.transform(de(e,i))},ge=(t,e,i)=>{const s=de(e,i);return ae(t,ct(s,t.calcOwnMatrix())),s},fe=(t,e)=>{var s;const{transform:{target:r}}=e;null===(s=r.canvas)||void 0===s||s.fire("object:".concat(t),i(i({},e),{},{target:r})),r.fire(t,e)},pe={left:-.5,top:-.5,center:0,bottom:.5,right:.5},me=t=>"string"==typeof t?pe[t]:t-.5,ve="not-allowed";function _e(t){return t.originX===P&&t.originY===P}function ye(t){return.5-me(t)}const xe=(t,e)=>t[e],be=(t,e,i,s)=>({e:t,transform:e,pointer:new N(i,s)});function Ce(t,e){const i=t.getTotalAngle()+nt(Math.atan2(e.y,e.x))+360;return Math.round(i%360/45)}function we(t,e,i,s,r){var n;let{target:o,corner:a}=t;const h=o.controls[a],c=(null===(n=o.canvas)||void 0===n?void 0:n.getZoom())||1,l=o.padding/c,d=function(t,e,i,s){const r=t.getRelativeCenterPoint(),n=void 0!==i&&void 0!==s?t.translateToGivenOrigin(r,P,P,i,s):new N(t.left,t.top);return(t.angle?e.rotate(-rt(t.angle),r):e).subtract(n)}(o,new N(s,r),e,i);return d.x>=l&&(d.x-=l),d.x<=-l&&(d.x+=l),d.y>=l&&(d.y-=l),d.y<=l&&(d.y+=l),d.x-=h.offsetX,d.y-=h.offsetY,d}const Se=(t,e,i,s)=>{const{target:r,offsetX:n,offsetY:o}=e,a=i-n,h=s-o,c=!xe(r,"lockMovementX")&&r.left!==a,l=!xe(r,"lockMovementY")&&r.top!==h;return c&&r.set(A,a),l&&r.set(E,h),(c||l)&&fe("moving",be(t,e,i,s)),c||l};class Te{getSvgStyles(t){const e=this.fillRule?this.fillRule:"nonzero",i=this.strokeWidth?this.strokeWidth:"0",s=this.strokeDashArray?this.strokeDashArray.join(" "):L,r=this.strokeDashOffset?this.strokeDashOffset:"0",n=this.strokeLineCap?this.strokeLineCap:"butt",o=this.strokeLineJoin?this.strokeLineJoin:"miter",a=this.strokeMiterLimit?this.strokeMiterLimit:"4",h=void 0!==this.opacity?this.opacity:"1",c=this.visible?"":" visibility: hidden;",l=t?"":this.getSvgFilter(),d=Bt("fill",this.fill);return[Bt("stroke",this.stroke),"stroke-width: ",i,"; ","stroke-dasharray: ",s,"; ","stroke-linecap: ",n,"; ","stroke-dashoffset: ",r,"; ","stroke-linejoin: ",o,"; ","stroke-miterlimit: ",a,"; ",d,"fill-rule: ",e,"; ","opacity: ",h,";",l,c].join("")}getSvgFilter(){return this.shadow?"filter: url(#SVGID_".concat(this.shadow.id,");"):""}getSvgCommons(){return[this.id?'id="'.concat(this.id,'" '):"",this.clipPath?'clip-path="url(#'.concat(this.clipPath.clipPathId,')" '):""].join("")}getSvgTransform(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const i=t?this.calcTransformMatrix():this.calcOwnMatrix(),s='transform="'.concat(Lt(i));return"".concat(s).concat(e,'" ')}_toSVG(t){return[""]}toSVG(t){return this._createBaseSVGMarkup(this._toSVG(t),{reviver:t})}toClipPathSVG(t){return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(t),{reviver:t})}_createBaseClipPathSVGMarkup(t){let{reviver:e,additionalTransform:i=""}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const s=[this.getSvgTransform(!0,i),this.getSvgCommons()].join(""),r=t.indexOf("COMMON_PARTS");return t[r]=s,e?e(t.join("")):t.join("")}_createBaseSVGMarkup(t){let{noStyle:e,reviver:i,withShadow:s,additionalTransform:r}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=e?"":'style="'.concat(this.getSvgStyles(),'" '),o=s?'style="'.concat(this.getSvgFilter(),'" '):"",a=this.clipPath,h=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",c=a&&a.absolutePositioned,l=this.stroke,d=this.fill,u=this.shadow,g=[],f=t.indexOf("COMMON_PARTS");let p;a&&(a.clipPathId="CLIPPATH_".concat(tt()),p='<clipPath id="'.concat(a.clipPathId,'" >\n').concat(a.toClipPathSVG(i),"</clipPath>\n")),c&&g.push("<g ",o,this.getSvgCommons()," >\n"),g.push("<g ",this.getSvgTransform(!1),c?"":o+this.getSvgCommons()," >\n");const m=[n,h,e?"":this.addPaintOrder()," ",r?'transform="'.concat(r,'" '):""].join("");return t[f]=m,Rt(d)&&g.push(d.toSVG(this)),Rt(l)&&g.push(l.toSVG(this)),u&&g.push(u.toSVG(this)),a&&g.push(p),g.push(t.join("")),g.push("</g>\n"),c&&g.push("</g>\n"),i?i(g.join("")):g.join("")}addPaintOrder(){return"fill"!==this.paintFirst?' paint-order="'.concat(this.paintFirst,'" '):""}}const Oe=(t,e,i,s)=>(t<Math.abs(e)?(t=e,s=i/4):s=0===e&&0===t?i/T*Math.asin(1):i/T*Math.asin(e/t),{a:t,c:e,p:i,s:s}),ke=(t,e,i,s,r)=>t*Math.pow(2,10*(s-=1))*Math.sin((s*r-e)*T/i),De=(t,e,i,s)=>-i*Math.cos(t/s*S)+i+e,Me=(t,e,i,s)=>(t/=s)<1/2.75?i*(7.5625*t*t)+e:t<2/2.75?i*(7.5625*(t-=1.5/2.75)*t+.75)+e:t<2.5/2.75?i*(7.5625*(t-=2.25/2.75)*t+.9375)+e:i*(7.5625*(t-=2.625/2.75)*t+.984375)+e,Pe=(t,e,i,s)=>i-Me(s-t,0,i,s)+e;var Ae=Object.freeze({__proto__:null,defaultEasing:De,easeInBack:function(t,e,i,s){let r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1.70158;return i*(t/=s)*t*((r+1)*t-r)+e},easeInBounce:Pe,easeInCirc:(t,e,i,s)=>-i*(Math.sqrt(1-(t/=s)*t)-1)+e,easeInCubic:(t,e,i,s)=>i*(t/s)**3+e,easeInElastic:(t,e,i,s)=>{const r=i;let n=0;if(0===t)return e;if(1===(t/=s))return e+i;n||(n=.3*s);const{a:o,s:a,p:h}=Oe(r,i,n,1.70158);return-ke(o,a,h,t,s)+e},easeInExpo:(t,e,i,s)=>0===t?e:i*2**(10*(t/s-1))+e,easeInOutBack:function(t,e,i,s){let r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1.70158;return(t/=s/2)<1?i/2*(t*t*((1+(r*=1.525))*t-r))+e:i/2*((t-=2)*t*((1+(r*=1.525))*t+r)+2)+e},easeInOutBounce:(t,e,i,s)=>t<s/2?.5*Pe(2*t,0,i,s)+e:.5*Me(2*t-s,0,i,s)+.5*i+e,easeInOutCirc:(t,e,i,s)=>(t/=s/2)<1?-i/2*(Math.sqrt(1-t**2)-1)+e:i/2*(Math.sqrt(1-(t-=2)*t)+1)+e,easeInOutCubic:(t,e,i,s)=>(t/=s/2)<1?i/2*t**3+e:i/2*((t-2)**3+2)+e,easeInOutElastic:(t,e,i,s)=>{const r=i;let n=0;if(0===t)return e;if(2===(t/=s/2))return e+i;n||(n=s*(.3*1.5));const{a:o,s:a,p:h,c:c}=Oe(r,i,n,1.70158);return t<1?-.5*ke(o,a,h,t,s)+e:o*Math.pow(2,-10*(t-=1))*Math.sin((t*s-a)*T/h)*.5+c+e},easeInOutExpo:(t,e,i,s)=>0===t?e:t===s?e+i:(t/=s/2)<1?i/2*2**(10*(t-1))+e:i/2*-(2**(-10*--t)+2)+e,easeInOutQuad:(t,e,i,s)=>(t/=s/2)<1?i/2*t**2+e:-i/2*(--t*(t-2)-1)+e,easeInOutQuart:(t,e,i,s)=>(t/=s/2)<1?i/2*t**4+e:-i/2*((t-=2)*t**3-2)+e,easeInOutQuint:(t,e,i,s)=>(t/=s/2)<1?i/2*t**5+e:i/2*((t-2)**5+2)+e,easeInOutSine:(t,e,i,s)=>-i/2*(Math.cos(Math.PI*t/s)-1)+e,easeInQuad:(t,e,i,s)=>i*(t/=s)*t+e,easeInQuart:(t,e,i,s)=>i*(t/=s)*t**3+e,easeInQuint:(t,e,i,s)=>i*(t/s)**5+e,easeInSine:(t,e,i,s)=>-i*Math.cos(t/s*S)+i+e,easeOutBack:function(t,e,i,s){let r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:1.70158;return i*((t=t/s-1)*t*((r+1)*t+r)+1)+e},easeOutBounce:Me,easeOutCirc:(t,e,i,s)=>i*Math.sqrt(1-(t=t/s-1)*t)+e,easeOutCubic:(t,e,i,s)=>i*((t/s-1)**3+1)+e,easeOutElastic:(t,e,i,s)=>{const r=i;let n=0;if(0===t)return e;if(1===(t/=s))return e+i;n||(n=.3*s);const{a:o,s:a,p:h,c:c}=Oe(r,i,n,1.70158);return o*2**(-10*t)*Math.sin((t*s-a)*T/h)+c+e},easeOutExpo:(t,e,i,s)=>t===s?e+i:i*-(2**(-10*t/s)+1)+e,easeOutQuad:(t,e,i,s)=>-i*(t/=s)*(t-2)+e,easeOutQuart:(t,e,i,s)=>-i*((t=t/s-1)*t**3-1)+e,easeOutQuint:(t,e,i,s)=>i*((t/s-1)**5+1)+e,easeOutSine:(t,e,i,s)=>i*Math.sin(t/s*S)+e});const Ee=()=>!1;class je{constructor(t){let{startValue:e,byValue:i,duration:r=500,delay:n=0,easing:o=De,onStart:a=w,onChange:h=w,onComplete:c=w,abort:l=Ee,target:d}=t;s(this,"_state","pending"),s(this,"durationProgress",0),s(this,"valueProgress",0),this.tick=this.tick.bind(this),this.duration=r,this.delay=n,this.easing=o,this._onStart=a,this._onChange=h,this._onComplete=c,this._abort=l,this.target=d,this.startValue=e,this.byValue=i,this.value=this.startValue,this.endValue=Object.freeze(this.calculate(this.duration).value)}get state(){return this._state}isDone(){return"aborted"===this._state||"completed"===this._state}start(){const t=t=>{"pending"===this._state&&(this.startTime=t||+new Date,this._state="running",this._onStart(),this.tick(this.startTime))};this.register(),this.delay>0?setTimeout((()=>Z(t)),this.delay):Z(t)}tick(t){const e=(t||+new Date)-this.startTime,i=Math.min(e,this.duration);this.durationProgress=i/this.duration;const{value:s,valueProgress:r}=this.calculate(i);this.value=Object.freeze(s),this.valueProgr