vendor: 4,359 bytes, lines 1-2
1import script from"./index.DWKPD6S6.js";import{az as useNuxtApp,d as defineComponent,x as useLogger,z as onMounted,q as computed,c as createElementBlock,ag as withDirectives,ah as vShow,e as createBaseVNode,f as createVNode,k as unref,a9 as renderSlot,A as ref,o as openBlock,_ as _export_sfc}from"./entry.lLzgxQwF.js";function t($n,p,Ds){return(p=n(p))in $n?Object.defineProperty($n,p,{value:Ds,enumerable:!0,configurable:!0,writable:!0}):$n[p]=Ds,$n}function e($n,p){var Ds=Object.keys($n);if(Object.getOwnPropertySymbols){var js=Object.getOwnPropertySymbols($n);p&&(js=js.filter((function(Fs){return Object.getOwnPropertyDescriptor($n,Fs).enumerable}))),Ds.push.apply(Ds,js)}return Ds}function s($n){for(var p=1;p<arguments.length;p++){var Ds=arguments[p]!=null?arguments[p]:{};p%2?e(Object(Ds),!0).forEach((function(js){t($n,js,Ds[js])})):Object.getOwnPropertyDescriptors?Object.defineProperties($n,Object.getOwnPropertyDescriptors(Ds)):e(Object(Ds)).forEach((function(js){Object.defineProperty($n,js,Object.getOwnPropertyDescriptor(Ds,js))}))}return $n}function i($n,p){if($n==null)return{};var Ds,js,Fs=(function(Kn,ro){if(Kn==null)return{};var io={};for(var no in Kn)if({}.hasOwnProperty.call(Kn,no)){if(ro.indexOf(no)>=0)continue;io[no]=Kn[no]}return io})($n,p);if(Object.getOwnPropertySymbols){var Rs=Object.getOwnPropertySymbols($n);for(js=0;js<Rs.length;js++)Ds=Rs[js],p.indexOf(Ds)>=0||{}.propertyIsEnumerable.call($n,Ds)&&(Fs[Ds]=$n[Ds])}return Fs}function r($n,p){return p||(p=$n.slice(0)),Object.freeze(Object.defineProperties($n,{raw:{value:Object.freeze(p)}}))}function n($n){var p=(function(Ds,js){if(typeof Ds!="object"||!Ds)return Ds;var Fs=Ds[Symbol.toPrimitive];if(Fs!==void 0){var Rs=Fs.call(Ds,js);if(typeof Rs!="object")return Rs;throw new TypeError("@@toPrimitive must return a primitive value.")}return(js==="string"?String:Number)(Ds)})($n,"string");return typeof p=="symbol"?p:p+""}class o{constructor(){t(this,"browserShadowBlurConstant",1),t(this,"DPI",96),t(this,"devicePixelRatio",typeof window<"u"?window.devicePixelRatio:1),t(this,"perfLimitSizeTotal",2097152),t(this,"maxCacheSideLimit",4096),t(this,"minCacheSideLimit",256),t(this,"disableStyleCopyPaste",!1),t(this,"enableGLFiltering",!0),t(this,"textureSize",4096),t(this,"forceGLPutImageData",!1),t(this,"cachesBoundsOfCurve",!0),t(this,"fontPaths",{}),t(this,"NUM_FRACTION_DIGITS",4)}}const a=new class extends o{constructor($n){super(),this.configure($n)}configure(){let $n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Object.assign(this,$n)}addFonts(){let $n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.fontPaths=s(s({},this.fontPaths),$n)}removeFonts(){(arguments.length>0&&arguments[0]!==void 0?arguments[0]:[]).forEach(($n=>{delete this.fontPaths[$n]}))}clearFonts(){this.fontPaths={}}restoreDefaults($n){const p=new o,Ds=$n?.reduce(((js,Fs)=>(js[Fs]=p[Fs],js)),{})||p;this.configure(Ds)}},h=function($n){for(var p=arguments.length,Ds=new Array(p>1?p-1:0),js=1;js<p;js++)Ds[js-1]=arguments[js];return console[$n]("fabric",...Ds)};class c extends Error{constructor(p,Ds){super("fabric: ".concat(p),Ds)}}class l extends c{constructor(p){super("".concat(p," 'options.signal' is in 'aborted' state"))}}class u{}class d extends u{testPrecision(p,Ds){const js="precision ".concat(Ds,` float; 2void main(){}`),Fs=p.createShader(p.FRAGMENT_SHADER);return!!Fs&&(p.shaderSource(Fs,js),p.compileShader(Fs),!!p.getShaderParameter(Fs,p.COMPILE_STATUS))}queryWebGL(p){const Ds=p.getContext("webgl");Ds&&(this.maxTextureSize=Ds.getParameter(Ds.MAX_TEXTURE_SIZE),this.GLPrecision=["highp","mediump","lowp"].find((js=>this.testPrecision(Ds,js))),Ds.getExtension("WEBGL_lose_context").loseContext(),h("log","WebGL: max texture size ".concat(this.maxTextureSize)))}isSupported(p){return!!this.maxTextureSize&&this.maxTextureSize>=p}}const g={};let f;const m=()=>f||(f={document,window,isTouchSupported:"ontouchstart"in window||"ontouchstart"in document||window&&window.navigator&&window.navigator.maxTouchPoints>0,WebGLProbe:new d,dispose(){},copyPasteData:g}),v=()=>m().document,y=()=>m().window,_=()=>{var $n;return Math.max(($n=a.devicePixelRatio)!==null&&$n!==void 0?$n:y().devicePixelRatio,1)},x=new class{constructor(){t(this,"charWidthsCache",{}),t(this,"boundsOfCurveCache",{})}getFontCache($n){let{fontFamily:p,fontStyle:Ds,fontWeight:js}=$n;
vendor: 5,321 bytes, line 2
2p=p.toLowerCase(),this.charWidthsCache[p]||(this.charWidthsCache[p]={});const Fs=this.charWidthsCache[p],Rs="".concat(Ds.toLowerCase(),"_").concat((js+"").toLowerCase());return Fs[Rs]||(Fs[Rs]={}),Fs[Rs]}clearFontCache($n){($n=($n||"").toLowerCase())?this.charWidthsCache[$n]&&delete this.charWidthsCache[$n]:this.charWidthsCache={}}limitDimsByArea($n){const{perfLimitSizeTotal:p}=a,Ds=Math.sqrt(p*$n);return[Math.floor(Ds),Math.floor(p/Ds)]}},C="6.0.2";function b(){}const w=Math.PI/2,S=2*Math.PI,T=Math.PI/180,O=Object.freeze([1,0,0,1,0,0]),k=16,D=.4477152502,M="center",P="left",E="top",A="bottom",j="right",F="none",L=/\r?\n/,R="moving",B="scaling",I="rotating",X="rotate",W="skewing",Y="resizing",V="modifyPoly",H="changed",G="scale",z="scaleX",N="scaleY",U="skewX",q="skewY",K="fill",J="stroke",Z="modified",Q="json",$="svg",tt=new class{constructor(){this[Q]=new Map,this[$]=new Map}getClass($n){const p=this[Q].get($n);if(!p)throw new c("No class registered for ".concat($n));return p}setClass($n,p){p?this[Q].set(p,$n):(this[Q].set($n.type,$n),this[Q].set($n.type.toLowerCase(),$n))}getSVGClass($n){return this[$].get($n)}setSVGClass($n,p){this[$].set(p??$n.type.toLowerCase(),$n)}},et=new class extends Array{remove($n){const p=this.indexOf($n);p>-1&&this.splice(p,1)}cancelAll(){const $n=this.splice(0);return $n.forEach((p=>p.abort())),$n}cancelByCanvas($n){if(!$n)return[];const p=this.filter((Ds=>{var js;return Ds.target===$n||typeof Ds.target=="object"&&((js=Ds.target)===null||js===void 0?void 0:js.canvas)===$n}));return p.forEach((Ds=>Ds.abort())),p}cancelByTarget($n){if(!$n)return[];const p=this.filter((Ds=>Ds.target===$n));return p.forEach((Ds=>Ds.abort())),p}};class st{constructor(){t(this,"__eventListeners",{})}on(p,Ds){if(this.__eventListeners||(this.__eventListeners={}),typeof p=="object")return Object.entries(p).forEach((js=>{let[Fs,Rs]=js;this.on(Fs,Rs)})),()=>this.off(p);if(Ds){const js=p;return this.__eventListeners[js]||(this.__eventListeners[js]=[]),this.__eventListeners[js].push(Ds),()=>this.off(js,Ds)}return()=>!1}once(p,Ds){if(typeof p=="object"){const js=[];return Object.entries(p).forEach((Fs=>{let[Rs,Kn]=Fs;js.push(this.once(Rs,Kn))})),()=>js.forEach((Fs=>Fs()))}if(Ds){const js=this.on(p,(function(){for(var Fs=arguments.length,Rs=new Array(Fs),Kn=0;Kn<Fs;Kn++)Rs[Kn]=arguments[Kn];Ds.call(this,...Rs),js()}));return js}return()=>!1}_removeEventListener(p,Ds){if(this.__eventListeners[p])if(Ds){const js=this.__eventListeners[p],Fs=js.indexOf(Ds);Fs>-1&&js.splice(Fs,1)}else this.__eventListeners[p]=[]}off(p,Ds){if(this.__eventListeners)if(p===void 0)for(const js in this.__eventListeners)this._removeEventListener(js);else typeof p=="object"?Object.entries(p).forEach((js=>{let[Fs,Rs]=js;this._removeEventListener(Fs,Rs)})):this._removeEventListener(p,Ds)}fire(p,Ds){var js;if(!this.__eventListeners)return;const Fs=(js=this.__eventListeners[p])===null||js===void 0?void 0:js.concat();if(Fs)for(let Rs=0;Rs<Fs.length;Rs++)Fs[Rs].call(this,Ds||{})}}const it=($n,p)=>Math.floor(Math.random()*(p-$n+1))+$n,rt=($n,p)=>isNaN($n)&&typeof p=="number"?p:$n,nt=($n,p)=>{const Ds=$n.indexOf(p);return Ds!==-1&&$n.splice(Ds,1),$n},ot=$n=>{if($n===0)return 1;switch(Math.abs($n)/w){case 1:case 3:return 0;case 2:return-1}return Math.cos($n)},at=$n=>{if($n===0)return 0;const p=$n/w,Ds=Math.sign($n);switch(p){case 1:return Ds;case 2:return 0;case 3:return-Ds}return Math.sin($n)};class ht{constructor(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0,Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;typeof p=="object"?(this.x=p.x,this.y=p.y):(this.x=p,this.y=Ds)}add(p){return new ht(this.x+p.x,this.y+p.y)}addEquals(p){return this.x+=p.x,this.y+=p.y,this}scalarAdd(p){return new ht(this.x+p,this.y+p)}scalarAddEquals(p){return this.x+=p,this.y+=p,this}subtract(p){return new ht(this.x-p.x,this.y-p.y)}subtractEquals(p){return this.x-=p.x,this.y-=p.y,this}scalarSubtract(p){return new ht(this.x-p,this.y-p)}scalarSubtractEquals(p){return this.x-=p,this.y-=p,this}multiply(p){return new ht(this.x*p.x,this.y*p.y)}scalarMultiply(p){return new ht(this.x*p,this.y*p)}scalarMultiplyEquals(p){return this.x*=p,this.y*=p,this}divide(p){return new ht(this.x/p.x,this.y/p.y)}scalarDivide(p){return new ht(this.x/p,this.y/p)}scalarDivideEquals(p){return this.x/=p,this.y/=p,this}eq(p){return this.x===p.x&&this.y===p.y}lt(p){return this.x<p.x&&this.y<p.y}lte(p){return this.x<=p.x&&this.y<=p.y}gt(p){return this.x>p.x&&this.y>p.y}gte(p){return this.x>=p.x&&this.y>=p.y}lerp(p){let Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:.5;return Ds=Math.max(Math.min(1,Ds),0),new ht(this.x+(p.x-this.x)*Ds,this.y+(p.y-this.y)*Ds)}distanceFrom(p){const Ds=this.x-p.x,js=this.y-p.y;return Math.sqrt(Ds*Ds+js*js)}midPointFrom(p){return this.lerp(p)}min(p){return new ht(Math.min(this.x,p.x),Math.min(this.y,p.y))}max(p){return new ht(Math.max(this.x,p.x),Math.max(this.y,p.y))}toString(){return"".concat(this.x,",").concat(this.y)}setXY(p,Ds){return this.x=p,this.y=Ds,this}setX(p){return this.x=p,this}setY(p){return this.y=p,this}setFromPoint(p){return this.x=p.x,this.y=p.y,this}swap(p){const Ds=this.x,js=this.y;this.x=p.x,this.y=p.y,p.x=Ds,p.y=js}clone(){return new ht(this.x,this.y)}rotate(p){let Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:ct;
vendor: 9,396 bytes, line 2
2const js=at(p),Fs=ot(p),Rs=this.subtract(Ds);return new ht(Rs.x*Fs-Rs.y*js,Rs.x*js+Rs.y*Fs).add(Ds)}transform(p){let Ds=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return new ht(p[0]*this.x+p[2]*this.y+(Ds?0:p[4]),p[1]*this.x+p[3]*this.y+(Ds?0:p[5]))}}const ct=new ht(0,0),lt=$n=>!!$n&&Array.isArray($n._objects);function ut($n){class p extends $n{constructor(){super(...arguments),t(this,"_objects",[])}_onObjectAdded(js){}_onObjectRemoved(js){}_onStackOrderChanged(js){}add(){for(var js=arguments.length,Fs=new Array(js),Rs=0;Rs<js;Rs++)Fs[Rs]=arguments[Rs];const Kn=this._objects.push(...Fs);return Fs.forEach((ro=>this._onObjectAdded(ro))),Kn}insertAt(js){for(var Fs=arguments.length,Rs=new Array(Fs>1?Fs-1:0),Kn=1;Kn<Fs;Kn++)Rs[Kn-1]=arguments[Kn];return this._objects.splice(js,0,...Rs),Rs.forEach((ro=>this._onObjectAdded(ro))),this._objects.length}remove(){const js=this._objects,Fs=[];for(var Rs=arguments.length,Kn=new Array(Rs),ro=0;ro<Rs;ro++)Kn[ro]=arguments[ro];return Kn.forEach((io=>{const no=js.indexOf(io);no!==-1&&(js.splice(no,1),Fs.push(io),this._onObjectRemoved(io))})),Fs}forEachObject(js){this.getObjects().forEach(((Fs,Rs,Kn)=>js(Fs,Rs,Kn)))}getObjects(){for(var js=arguments.length,Fs=new Array(js),Rs=0;Rs<js;Rs++)Fs[Rs]=arguments[Rs];return Fs.length===0?[...this._objects]:this._objects.filter((Kn=>Kn.isType(...Fs)))}item(js){return this._objects[js]}isEmpty(){return this._objects.length===0}size(){return this._objects.length}contains(js,Fs){return!!this._objects.includes(js)||!!Fs&&this._objects.some((Rs=>Rs instanceof p&&Rs.contains(js,!0)))}complexity(){return this._objects.reduce(((js,Fs)=>js+=Fs.complexity?Fs.complexity():0),0)}sendObjectToBack(js){return!(!js||js===this._objects[0])&&(nt(this._objects,js),this._objects.unshift(js),this._onStackOrderChanged(js),!0)}bringObjectToFront(js){return!(!js||js===this._objects[this._objects.length-1])&&(nt(this._objects,js),this._objects.push(js),this._onStackOrderChanged(js),!0)}sendObjectBackwards(js,Fs){if(!js)return!1;const Rs=this._objects.indexOf(js);if(Rs!==0){const Kn=this.findNewLowerIndex(js,Rs,Fs);return nt(this._objects,js),this._objects.splice(Kn,0,js),this._onStackOrderChanged(js),!0}return!1}bringObjectForward(js,Fs){if(!js)return!1;const Rs=this._objects.indexOf(js);if(Rs!==this._objects.length-1){const Kn=this.findNewUpperIndex(js,Rs,Fs);return nt(this._objects,js),this._objects.splice(Kn,0,js),this._onStackOrderChanged(js),!0}return!1}moveObjectTo(js,Fs){return js!==this._objects[Fs]&&(nt(this._objects,js),this._objects.splice(Fs,0,js),this._onStackOrderChanged(js),!0)}findNewLowerIndex(js,Fs,Rs){let Kn;if(Rs){Kn=Fs;for(let ro=Fs-1;ro>=0;--ro)if(js.isOverlapping(this._objects[ro])){Kn=ro;break}}else Kn=Fs-1;return Kn}findNewUpperIndex(js,Fs,Rs){let Kn;if(Rs){Kn=Fs;for(let ro=Fs+1;ro<this._objects.length;++ro)if(js.isOverlapping(this._objects[ro])){Kn=ro;break}}else Kn=Fs+1;return Kn}collectObjects(js){let{left:Fs,top:Rs,width:Kn,height:ro}=js,{includeIntersecting:io=!0}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const no=[],na=new ht(Fs,Rs),ca=na.add(new ht(Kn,ro));for(let la=this._objects.length-1;la>=0;la--){const ua=this._objects[la];ua.selectable&&ua.visible&&(io&&ua.intersectsWithRect(na,ca)||ua.isContainedWithinRect(na,ca)||io&&ua.containsPoint(na)||io&&ua.containsPoint(ca))&&no.push(ua)}return no}}return p}class dt extends st{_setOptions(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};for(const Ds in p)this.set(Ds,p[Ds])}_setObject(p){for(const Ds in p)this._set(Ds,p[Ds])}set(p,Ds){return typeof p=="object"?this._setObject(p):this._set(p,Ds),this}_set(p,Ds){this[p]=Ds}toggle(p){const Ds=this.get(p);return typeof Ds=="boolean"&&this.set(p,!Ds),this}get(p){return this[p]}}function gt($n){return y().requestAnimationFrame($n)}function ft($n){return y().cancelAnimationFrame($n)}let pt=0;const mt=()=>pt++,vt=()=>{const $n=v().createElement("canvas");if(!$n||$n.getContext===void 0)throw new c("Failed to create `canvas` element");return $n},yt=()=>v().createElement("img"),_t=($n,p,Ds)=>$n.toDataURL("image/".concat(p),Ds),xt=$n=>$n*T,Ct=$n=>$n/T,bt=$n=>$n.every(((p,Ds)=>p===O[Ds])),wt=($n,p,Ds)=>new ht($n).transform(p,Ds),St=$n=>{const p=1/($n[0]*$n[3]-$n[1]*$n[2]),Ds=[p*$n[3],-p*$n[1],-p*$n[2],p*$n[0],0,0],{x:js,y:Fs}=new ht($n[4],$n[5]).transform(Ds,!0);return Ds[4]=-js,Ds[5]=-Fs,Ds},Tt=($n,p,Ds)=>[$n[0]*p[0]+$n[2]*p[1],$n[1]*p[0]+$n[3]*p[1],$n[0]*p[2]+$n[2]*p[3],$n[1]*p[2]+$n[3]*p[3],Ds?0:$n[0]*p[4]+$n[2]*p[5]+$n[4],Ds?0:$n[1]*p[4]+$n[3]*p[5]+$n[5]],Ot=($n,p)=>$n.reduceRight(((Ds,js)=>js&&Ds?Tt(js,Ds,p):js||Ds),void 0)||O.concat(),kt=$n=>{let[p,Ds]=$n;return Math.atan2(Ds,p)},Dt=$n=>{const p=kt($n),Ds=Math.pow($n[0],2)+Math.pow($n[1],2),js=Math.sqrt(Ds),Fs=($n[0]*$n[3]-$n[2]*$n[1])/js,Rs=Math.atan2($n[0]*$n[2]+$n[1]*$n[3],Ds);return{angle:Ct(p),scaleX:js,scaleY:Fs,skewX:Ct(Rs),skewY:0,translateX:$n[4]||0,translateY:$n[5]||0}},Mt=function($n){return[1,0,0,1,$n,arguments.length>1&&arguments[1]!==void 0?arguments[1]:0]};function Pt(){let{angle:$n=0}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},{x:p=0,y:Ds=0}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const js=xt($n),Fs=ot(js),Rs=at(js);return[Fs,Rs,-Rs,Fs,p?p-(Fs*p-Rs*Ds):0,Ds?Ds-(Rs*p+Fs*Ds):0]}const Et=function($n){return[$n,0,0,arguments.length>1&&arguments[1]!==void 0?arguments[1]:$n,0,0]},At=$n=>Math.tan(xt($n)),jt=$n=>[1,0,At($n),1,0,0],Ft=$n=>[1,At($n),0,1,0,0],Lt=$n=>{let{scaleX:p=1,scaleY:Ds=1,flipX:js=!1,flipY:Fs=!1,skewX:Rs=0,skewY:Kn=0}=$n,ro=Et(js?-p:p,Fs?-Ds:Ds);return Rs&&(ro=Tt(ro,jt(Rs),!0)),Kn&&(ro=Tt(ro,Ft(Kn),!0)),ro},Rt=$n=>{const{translateX:p=0,translateY:Ds=0,angle:js=0}=$n;let Fs=Mt(p,Ds);js&&(Fs=Tt(Fs,Pt({angle:js})));const Rs=Lt($n);return bt(Rs)||(Fs=Tt(Fs,Rs)),Fs},Bt=function($n){let{signal:p,crossOrigin:Ds=null}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return new Promise((function(js,Fs){if(p&&p.aborted)return Fs(new l("loadImage"));const Rs=yt();let Kn;p&&(Kn=function(io){Rs.src="",Fs(io)},p.addEventListener("abort",Kn,{once:!0}));const ro=function(){Rs.onload=Rs.onerror=null,Kn&&p?.removeEventListener("abort",Kn),js(Rs)};$n?(Rs.onload=ro,Rs.onerror=function(){Kn&&p?.removeEventListener("abort",Kn),Fs(new c("Error loading ".concat(Rs.src)))},Ds&&(Rs.crossOrigin=Ds),Rs.src=$n):ro()}))},It=function($n){let{signal:p,reviver:Ds=b}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return new Promise(((js,Fs)=>{const Rs=[];p&&p.addEventListener("abort",Fs,{once:!0}),Promise.all($n.map((Kn=>tt.getClass(Kn.type).fromObject(Kn,{signal:p}).then((ro=>(Ds(Kn,ro),Rs.push(ro),ro)))))).then(js).catch((Kn=>{Rs.forEach((ro=>{ro.dispose&&ro.dispose()})),Fs(Kn)})).finally((()=>{p&&p.removeEventListener("abort",Fs)}))}))},Xt=function($n){let{signal:p}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return new Promise(((Ds,js)=>{const Fs=[];p&&p.addEventListener("abort",js,{once:!0});const Rs=Object.values($n).map((ro=>ro&&(ro.type?It([ro],{signal:p}).then((io=>{let[no]=io;return Fs.push(no),no})):ro.source?tt.getClass("pattern").fromObject(ro,{signal:p}).then((io=>(Fs.push(io),io))):ro))),Kn=Object.keys($n);Promise.all(Rs).then((ro=>ro.reduce(((io,no,na)=>(io[Kn[na]]=no,io)),{}))).then(Ds).catch((ro=>{Fs.forEach((io=>{io.dispose&&io.dispose()})),js(ro)})).finally((()=>{p&&p.removeEventListener("abort",js)}))}))},Wt=function($n){return(arguments.length>1&&arguments[1]!==void 0?arguments[1]:[]).reduce(((p,Ds)=>(Ds in $n&&(p[Ds]=$n[Ds]),p)),{})},Yt=($n,p)=>Object.keys($n).reduce(((Ds,js)=>(p($n[js],js,$n)&&(Ds[js]=$n[js]),Ds)),{}),Vt={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:"#BA5
25D3",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"},Ht=($n,p,Ds)=>(Ds<0&&(Ds+=1),Ds>1&&(Ds-=1),Ds<1/6?$n+6*(p-$n)*Ds:Ds<.5?p:Ds<2/3?$n+(p-$n)*(2/3-Ds)*6:$n),Gt=($n,p,Ds,js)=>{$n/=255,p/=255,Ds/=255;const Fs=Math.max($n,p,Ds),Rs=Math.min($n,p,Ds);let Kn,ro;const io=(Fs+Rs)/2;if(Fs===Rs)Kn=ro=0;else{const no=Fs-Rs;switch(ro=io>.5?no/(2-Fs-Rs):no/(Fs+Rs),Fs){case $n:Kn=(p-Ds)/no+(p<Ds?6:0);break;case p:Kn=(Ds-$n)/no+2;break;case Ds:Kn=($n-p)/no+4}Kn/=6}return[Math.round(360*Kn),Math.round(100*ro),Math.round(100*io),js]},zt=function(){let $n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"1";return parseFloat($n)/($n.endsWith("%")?100:1)},Nt=$n=>Math.min(Math.round($n),255).toString(16).toUpperCase().padStart(2,"0"),Ut=$n=>{let[p,Ds,js,Fs=1]=$n;const Rs=Math.round(.3*p+.59*Ds+.11*js);return[Rs,Rs,Rs,Fs]};class qt{constructor(p){if(t(this,"isUnrecognised",!1),p)if(p instanceof qt)this.setSource([...p._source]);else if(Array.isArray(p)){const[Ds,js,Fs,Rs=1]=p;this.setSource([Ds,js,Fs,Rs])}else this.setSource(this._tryParsingColor(p));else this.setSource([0,0,0,1])}_tryParsingColor(p){return p in Vt&&(p=Vt[p]),p==="transparent"?[255,255,255,0]:qt.sourceFromHex(p)||qt.sourceFromRgb(p)||qt.sourceFromHsl(p)||(this.isUnrecognised=!0)&&[0,0,0,1]}getSource(){return this._source}setSource(p){this._source=p}toRgb(){const[p,Ds,js]=this.getSource();return"rgb(".concat(p,",").concat(Ds,",").concat(js,")")}toRgba(){return"rgba(".concat(this.getSource().join(","),")")}toHsl(){const[p,Ds,js]=Gt(...this.getSource());return"hsl(".concat(p,",").concat(Ds,"%,").concat(js,"%)")}toHsla(){const[p,Ds,js,Fs]=Gt(...this.getSource());return"hsla(".concat(p,",").concat(Ds,"%,").concat(js,"%,").concat(Fs,")")}toHex(){return this.toHexa().slice(0,6)}toHexa(){const[p,Ds,js,Fs]=this.getSource();return"".concat(Nt(p)).concat(Nt(Ds)).concat(Nt(js)).concat(Nt(Math.round(255*Fs)))}getAlpha(){return this.getSource()[3]}setAlpha(p){return this._source[3]=p,this}toGrayscale(){return this.setSource(Ut(this.getSource())),this}toBlackWhite(p){const[Ds,,,js]=Ut(this.getSource()),Fs=Ds<(p||127)?0:255;return this.setSource([Fs,Fs,Fs,js]),this}overlayWith(p){p instanceof qt||(p=new qt(p));const Ds=this.getSource(),js=p.getSource(),[Fs,Rs,Kn]=Ds.map(((ro,io)=>Math.round(.5*ro+.5*js[io])));return this.setSource([Fs,Rs,Kn,Ds[3]]),this}static fromRgb(p){return qt.fromRgba(p)}static fromRgba(p){return new qt(qt.sourceFromRgb(p))}static sourceFromRgb(p){const Ds=p.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(Ds){const[js,Fs,Rs]=Ds.slice(1,4).map((Kn=>{const ro=parseFloat(Kn);return Kn.endsWith("%")?Math.round(2.55*ro):ro}));return[js,Fs,Rs,zt(Ds[4])]}}static fromHsl(p){return qt.fromHsla(p)}static fromHsla(p){return new qt(qt.sourceFromHsl(p))}static sourceFromHsl(p){const Ds=p.match(/^hsla?\(\s*([+-]?\d{0,3}(?:\.\d+)?(?:deg|turn|rad)?)\s*[\s|,]\s*(\d{0,3}(?:\.\d+)?%?)\s*[\s|,]\s*(\d{0,3}(?:\.\d+)?%?)\s*(?:\s*[,/]\s*(\d*(?:\.\d+)?%?)\s*)?\)$/i);if(!Ds)return;const js=(qt.parseAngletoDegrees(Ds[1])%360+360)%360/360,Fs=parseFloat(Ds[2])/100,Rs=parseFloat(Ds[3])/100;let Kn,ro,io;if(Fs===0)Kn=ro=io=Rs;else{const no=Rs<=.5?Rs*(Fs+1):Rs+Fs-Rs*Fs,na=2*Rs-no;Kn=Ht(na,no,js+1/3),ro=Ht(na,no,js),io=Ht(na,no,js-1/3)}return[Math.round(255*Kn),Math.round(255*ro),Math.round(255*io),zt(Ds[4])]}static fromHex(p){return new qt(qt.sourceFromHex(p))}static sourceFromHex(p){if(p.match(/^#?(([0-9a-f]){3,4}|([0-9a-f]{2}){3,4})$/i)){const Ds=p.slice(p.indexOf("#")+1);let js;js=Ds.length<=4?Ds.split("").map((io=>io+io)):Ds.match(/.{2}/g);const[Fs,Rs,Kn,ro=255]=js.map((io=>parseInt(io,16)));return[Fs,Rs,Kn,ro/255]}}static parseAngletoDegrees(p){const Ds=p.toLowerCase(),js=parseFloat(Ds);return Ds.includes("rad")?Ct(js):Ds.includes("turn")?360*js:js}}const Kt=($n,p)=>parseFloat(Number($n).toFixed(p)),Jt=function($n){let p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:k;const Ds=/\D{0,2}$/.exec($n),js=parseFloat($n),Fs=a.DPI;switch(Ds?.[0]){case"mm":return js*Fs/25.4;case"cm":return js*Fs/2.54;case"in":return js*Fs;case"pt":return js*Fs/72;case"pc":return js*Fs/72*12;case"em":return js*p;default:return js}},Zt=$n=>{const[p,Ds]=$n.trim().split(" "),[js,Fs]=(Rs=p)&&Rs!==F?[Rs.slice(1,4),Rs.slice(5,8)]:Rs===F?[Rs,Rs]:["Mid","Mid"];var Rs;return{meetOrSlice:Ds||"meet",alignX:js,alignY:Fs}},Qt=$n=>"matrix("+$n.map((p=>Kt(p,a.NUM_FRACTION_DIGITS))).join(" ")+")",$t=function($n,p){let Ds,js,Fs=!(arguments.length>2&&arguments[2]!==void 0)||arguments[2];if(p)if(p.toLive)Ds="url(#SVGID_".concat(p.id,")");else{const Rs=new qt(p),Kn=Rs.getAlpha();Ds=Rs.toRgb(),Kn!==1&&(js=Kn.toString())}else Ds="none";return Fs?"".concat($n,": ").concat(Ds,";
2 ").concat(js?"".concat($n,"-opacity: ").concat(js,"; "):""):"".concat($n,'="').concat(Ds,'" ').concat(js?"".concat($n,'-opacity="').concat(js,'" '):"")},te=$n=>!!$n&&$n.toLive!==void 0,ee$1=$n=>!!$n&&typeof $n.toObject=="function",se=$n=>!!$n&&$n.offsetX!==void 0&&"source"in $n,ie=$n=>!!$n&&typeof $n._renderText=="function",re=$n=>!!$n&&"multiSelectionStacking"in $n;function ne($n){const p=$n&&oe($n);let Ds=0,js=0;if(!$n||!p)return{left:Ds,top:js};const Fs=p.documentElement,Rs=p.body||{scrollLeft:0,scrollTop:0};for(;$n&&($n.parentNode||$n.host)&&(($n=$n.parentNode||$n.host)===p?(Ds=Rs.scrollLeft||Fs.scrollLeft||0,js=Rs.scrollTop||Fs.scrollTop||0):(Ds+=$n.scrollLeft||0,js+=$n.scrollTop||0),$n.nodeType!==1||$n.style.position!=="fixed"););return{left:Ds,top:js}}const oe=$n=>$n.ownerDocument||null,ae=$n=>{var p;return((p=$n.ownerDocument)===null||p===void 0?void 0:p.defaultView)||null};function he($n,p){const Ds=$n.style;Ds&&(typeof p=="string"?$n.style.cssText+=";"+p:Object.entries(p).forEach((js=>{let[Fs,Rs]=js;return Ds.setProperty(Fs,Rs)})))}const ce=function($n,p,Ds){let{width:js,height:Fs}=Ds,Rs=arguments.length>3&&arguments[3]!==void 0?arguments[3]:1;$n.width=js,$n.height=Fs,Rs>1&&($n.setAttribute("width",(js*Rs).toString()),$n.setAttribute("height",(Fs*Rs).toString()),p.scale(Rs,Rs))},le=($n,p)=>{let{width:Ds,height:js}=p;Ds&&($n.style.width=typeof Ds=="number"?"".concat(Ds,"px"):Ds),js&&($n.style.height=typeof js=="number"?"".concat(js,"px"):js)};function ue($n){return $n.onselectstart!==void 0&&($n.onselectstart=()=>!1),$n.style.userSelect=F,$n}class de{constructor(p){t(this,"_originalCanvasStyle",void 0),t(this,"lower",void 0);const Ds=this.createLowerCanvas(p);this.lower={el:Ds,ctx:Ds.getContext("2d")}}createLowerCanvas(p){const Ds=(js=p)&&js.getContext!==void 0?p:p&&v().getElementById(p)||vt();var js;if(Ds.hasAttribute("data-fabric"))throw new c("Trying to initialize a canvas that has already been initialized. Did you forget to dispose the canvas?");return this._originalCanvasStyle=Ds.style.cssText,Ds.setAttribute("data-fabric","main"),Ds.classList.add("lower-canvas"),Ds}cleanupDOM(p){let{width:Ds,height:js}=p;const{el:Fs}=this.lower;Fs.classList.remove("lower-canvas"),Fs.removeAttribute("data-fabric"),Fs.setAttribute("width","".concat(Ds)),Fs.setAttribute("height","".concat(js)),Fs.style.cssText=this._originalCanvasStyle||"",this._originalCanvasStyle=void 0}setDimensions(p,Ds){const{el:js,ctx:Fs}=this.lower;ce(js,Fs,p,Ds)}setCSSDimensions(p){le(this.lower.el,p)}calcOffset(){return(function(p){var Ds;let js={left:0,top:0};const Fs=p&&oe(p),Rs={left:0,top:0},Kn={borderLeftWidth:P,borderTopWidth:E,paddingLeft:P,paddingTop:E};if(!Fs)return Rs;const ro=((Ds=ae(p))===null||Ds===void 0?void 0:Ds.getComputedStyle(p,null))||{};for(const na in Kn)Rs[Kn[na]]+=parseInt(ro[na],10)||0;const io=Fs.documentElement;p.getBoundingClientRect!==void 0&&(js=p.getBoundingClientRect());const no=ne(p);return{left:js.left+no.left-(io.clientLeft||0)+Rs.left,top:js.top+no.top-(io.clientTop||0)+Rs.top}})(this.lower.el)}dispose(){m().dispose(this.lower.el),delete this.lower}}const ge={backgroundVpt:!0,backgroundColor:"",overlayVpt:!0,overlayColor:"",includeDefaultValues:!0,svgViewportTransformation:!0,renderOnAddRemove:!0,skipOffscreen:!0,enableRetinaScaling:!0,imageSmoothingEnabled:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,viewportTransform:[...O]};class fe extends ut(dt){get lowerCanvasEl(){var p;return(p=this.elements.lower)===null||p===void 0?void 0:p.el}get contextContainer(){var p;return(p=this.elements.lower)===null||p===void 0?void 0:p.ctx}static getDefaults(){return fe.ownDefaults}constructor(p){let Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),Object.assign(this,this.constructor.getDefaults()),this.set(Ds),this.initElements(p),this._setDimensionsImpl({width:this.width||this.elements.lower.el.width||0,height:this.height||this.elements.lower.el.height||0}),this.skipControlsDrawing=!1,this.viewportTransform=[...this.viewportTransform],this.calcViewportBoundaries()}initElements(p){this.elements=new de(p)}add(){const p=super.add(...arguments);return arguments.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),p}insertAt(p){for(var Ds=arguments.length,js=new Array(Ds>1?Ds-1:0),Fs=1;Fs<Ds;Fs++)js[Fs-1]=arguments[Fs];const Rs=super.insertAt(p,...js);return js.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),Rs}remove(){const p=super.remove(...arguments);return p.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),p}_onObjectAdded(p){p.canvas&&p.canvas!==this&&(h("warn",`Canvas is trying to add an object that belongs to a different canvas. 3Resulting to default behavior: removing object from previous canvas and adding to new canvas`),p.canvas.remove(p)),p._set("canvas",this),p.setCoords(),this.fire("object:added",{target:p}),p.fire("added",{target:this})}_onObjectRemoved(p){p._set("canvas",void 0),this.fire("object:removed",{target:p}),p.fire("removed",{target:this})}_onStackOrderChanged(){this.renderOnAddRemove&&this.requestRenderAll()}getRetinaScaling(){return this.enableRetinaScaling?_():1}calcOffset(){return this._offset=this.elements.calcOffset()}getWidth(){return this.width}
vendor: 17,186 bytes, lines 3-21
3getHeight(){return this.height}setWidth(p,Ds){return this.setDimensions({width:p},Ds)}setHeight(p,Ds){return this.setDimensions({height:p},Ds)}_setDimensionsImpl(p){let{cssOnly:Ds=!1,backstoreOnly:js=!1}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!Ds){const Fs=s({width:this.width,height:this.height},p);this.elements.setDimensions(Fs,this.getRetinaScaling()),this.hasLostContext=!0,this.width=Fs.width,this.height=Fs.height}js||this.elements.setCSSDimensions(p),this.calcOffset()}setDimensions(p,Ds){this._setDimensionsImpl(p,Ds),Ds&&Ds.cssOnly||this.requestRenderAll()}getZoom(){return this.viewportTransform[0]}setViewportTransform(p){this.viewportTransform=p,this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll()}zoomToPoint(p,Ds){const js=p,Fs=[...this.viewportTransform],Rs=wt(p,St(Fs));Fs[0]=Ds,Fs[3]=Ds;const Kn=wt(Rs,Fs);Fs[4]+=js.x-Kn.x,Fs[5]+=js.y-Kn.y,this.setViewportTransform(Fs)}setZoom(p){this.zoomToPoint(new ht(0,0),p)}absolutePan(p){const Ds=[...this.viewportTransform];return Ds[4]=-p.x,Ds[5]=-p.y,this.setViewportTransform(Ds)}relativePan(p){return this.absolutePan(new ht(-p.x-this.viewportTransform[4],-p.y-this.viewportTransform[5]))}getElement(){return this.elements.lower.el}clearContext(p){p.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=gt((()=>this.renderAndReset())))}calcViewportBoundaries(){const p=this.width,Ds=this.height,js=St(this.viewportTransform),Fs=wt({x:0,y:0},js),Rs=wt({x:p,y:Ds},js),Kn=Fs.min(Rs),ro=Fs.max(Rs);return this.vptCoords={tl:Kn,tr:new ht(ro.x,Kn.y),bl:new ht(Kn.x,ro.y),br:ro}}cancelRequestedRender(){this.nextRenderHandle&&(ft(this.nextRenderHandle),this.nextRenderHandle=0)}drawControls(p){}renderCanvas(p,Ds){if(this.destroyed)return;const js=this.viewportTransform,Fs=this.clipPath;this.calcViewportBoundaries(),this.clearContext(p),p.imageSmoothingEnabled=this.imageSmoothingEnabled,p.patternQuality="best",this.fire("before:render",{ctx:p}),this._renderBackground(p),p.save(),p.transform(js[0],js[1],js[2],js[3],js[4],js[5]),this._renderObjects(p,Ds),p.restore(),this.controlsAboveOverlay||this.skipControlsDrawing||this.drawControls(p),Fs&&(Fs._set("canvas",this),Fs.shouldCache(),Fs._transformDone=!0,Fs.renderCache({forClipping:!0}),this.drawClipPathOnCanvas(p,Fs)),this._renderOverlay(p),this.controlsAboveOverlay&&!this.skipControlsDrawing&&this.drawControls(p),this.fire("after:render",{ctx:p}),this.__cleanupTask&&(this.__cleanupTask(),this.__cleanupTask=void 0)}drawClipPathOnCanvas(p,Ds){const js=this.viewportTransform;p.save(),p.transform(...js),p.globalCompositeOperation="destination-in",Ds.transform(p),p.scale(1/Ds.zoomX,1/Ds.zoomY),p.drawImage(Ds._cacheCanvas,-Ds.cacheTranslationX,-Ds.cacheTranslationY),p.restore()}_renderObjects(p,Ds){for(let js=0,Fs=Ds.length;js<Fs;++js)Ds[js]&&Ds[js].render(p)}_renderBackgroundOrOverlay(p,Ds){const js=this["".concat(Ds,"Color")],Fs=this["".concat(Ds,"Image")],Rs=this.viewportTransform,Kn=this["".concat(Ds,"Vpt")];if(!js&&!Fs)return;const ro=te(js);if(js){if(p.save(),p.beginPath(),p.moveTo(0,0),p.lineTo(this.width,0),p.lineTo(this.width,this.height),p.lineTo(0,this.height),p.closePath(),p.fillStyle=ro?js.toLive(p):js,Kn&&p.transform(...Rs),ro){p.transform(1,0,0,1,js.offsetX||0,js.offsetY||0);const io=js.gradientTransform||js.patternTransform;io&&p.transform(...io)}p.fill(),p.restore()}if(Fs){p.save();const{skipOffscreen:io}=this;this.skipOffscreen=Kn,Kn&&p.transform(...Rs),Fs.render(p),this.skipOffscreen=io,p.restore()}}_renderBackground(p){this._renderBackgroundOrOverlay(p,"background")}_renderOverlay(p){this._renderBackgroundOrOverlay(p,"overlay")}getCenter(){return{top:this.height/2,left:this.width/2}}getCenterPoint(){return new ht(this.width/2,this.height/2)}centerObjectH(p){return this._centerObject(p,new ht(this.getCenterPoint().x,p.getCenterPoint().y))}centerObjectV(p){return this._centerObject(p,new ht(p.getCenterPoint().x,this.getCenterPoint().y))}centerObject(p){return this._centerObject(p,this.getCenterPoint())}viewportCenterObject(p){return this._centerObject(p,this.getVpCenter())}viewportCenterObjectH(p){return this._centerObject(p,new ht(this.getVpCenter().x,p.getCenterPoint().y))}viewportCenterObjectV(p){return this._centerObject(p,new ht(p.getCenterPoint().x,this.getVpCenter().y))}getVpCenter(){return wt(this.getCenterPoint(),St(this.viewportTransform))}_centerObject(p,Ds){p.setXY(Ds,M,M),p.setCoords(),this.renderOnAddRemove&&this.requestRenderAll()}toDatalessJSON(p){return this.toDatalessObject(p)}toObject(p){return this._toObjectMethod("toObject",p)}toJSON(){return this.toObject()}toDatalessObject(p){return this._toObjectMethod("toDatalessObject",p)}_toObjectMethod(p,Ds){const js=this.clipPath,Fs=js&&!js.excludeFromExport?this._toObject(js,p,Ds):null;return s(s(s({version:C},Wt(this,Ds)),{},{objects:this._objects.filter((Rs=>!Rs.excludeFromExport)).map((Rs=>this._toObject(Rs,p,Ds)))},this.__serializeBgOverlay(p,Ds)),Fs?{clipPath:Fs}:null)}_toObject(p,Ds,js){let Fs;this.includeDefaultValues||(Fs=p.includeDefaultValues,p.includeDefaultValues=!1);const Rs=p[Ds](js);return this.includeDefaultValues||(p.includeDefaultValues=!!Fs),Rs}__serializeBgOverlay(p,Ds){const js={},Fs=this.backgroundImage,Rs=this.overlayImage,Kn=this.backgroundColor,ro=this.overlayColor;return te(Kn)?Kn.excludeFromExport||(js.background=Kn.toObject(Ds)):Kn&&(js.background=Kn),te(ro)?ro.excludeFromExport||(js.overlay=ro.toObject(Ds)):ro&&(js.overlay=ro),Fs&&!Fs.excludeFromExport&&(js.backgroundImage=this._toObject(Fs,p,Ds)),Rs&&!Rs.excludeFromExport&&(js.overlayImage=this._toObject(Rs,p,Ds)),js}toSVG(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Ds=arguments.length>1?arguments[1]:void 0;p.reviver=Ds;const js=[];return this._setSVGPreamble(js,p),this._setSVGHeader(js,p),this.clipPath&&js.push('<g clip-path="url(#'.concat(this.clipPath.clipPathId,`)" > 4`)),this._setSVGBgOverlayColor(js,"background"),this._setSVGBgOverlayImage(js,"backgroundImage",Ds),this._setSVGObjects(js,Ds),this.clipPath&&js.push(`</g> 5`),this._setSVGBgOverlayColor(js,"overlay"),this._setSVGBgOverlayImage(js,"overlayImage",Ds),js.push("</svg>"),js.join("")}_setSVGPreamble(p,Ds){Ds.suppressPreamble||p.push('<?xml version="1.0" encoding="',Ds.encoding||"UTF-8",`" standalone="no" ?> 6`,'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ',`"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 7`)}_setSVGHeader(p,Ds){const js=Ds.width||"".concat(this.width),Fs=Ds.height||"".concat(this.height),Rs=a.NUM_FRACTION_DIGITS,Kn=Ds.viewBox;let ro;if(Kn)ro='viewBox="'.concat(Kn.x," ").concat(Kn.y," ").concat(Kn.width," ").concat(Kn.height,'" ');else if(this.svgViewportTransformation){const io=this.viewportTransform;ro='viewBox="'.concat(Kt(-io[4]/io[0],Rs)," ").concat(Kt(-io[5]/io[3],Rs)," ").concat(Kt(this.width/io[0],Rs)," ").concat(Kt(this.height/io[3],Rs),'" ')}else ro='viewBox="0 0 '.concat(this.width," ").concat(this.height,'" ');p.push("<svg ",'xmlns="http://www.w3.org/2000/svg" ','xmlns:xlink="http://www.w3.org/1999/xlink" ','version="1.1" ','width="',js,'" ','height="',Fs,'" ',ro,`xml:space="preserve"> 8`,"<desc>Created with Fabric.js ",C,`</desc> 9`,`<defs> 10`,this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(Ds),`</defs> 11`)}createSVGClipPathMarkup(p){const Ds=this.clipPath;return Ds?(Ds.clipPathId="CLIPPATH_".concat(mt()),'<clipPath id="'.concat(Ds.clipPathId,`" > 12`).concat(Ds.toClipPathSVG(p.reviver),`</clipPath> 13`)):""}createSVGRefElementsMarkup(){return["background","overlay"].map((p=>{const Ds=this["".concat(p,"Color")];if(te(Ds)){const js=this["".concat(p,"Vpt")],Fs=this.viewportTransform,Rs={isType:()=>!1,width:this.width/(js?Fs[0]:1),height:this.height/(js?Fs[3]:1)};return Ds.toSVG(Rs,{additionalTransform:js?Qt(Fs):""})}})).join("")}createSVGFontFacesMarkup(){const p=[],Ds={},js=a.fontPaths;this._objects.forEach((function Rs(Kn){p.push(Kn),lt(Kn)&&Kn._objects.forEach(Rs)})),p.forEach((Rs=>{if(!ie(Rs))return;const{styles:Kn,fontFamily:ro}=Rs;!Ds[ro]&&js[ro]&&(Ds[ro]=!0,Kn&&Object.values(Kn).forEach((io=>{Object.values(io).forEach((no=>{let{fontFamily:na=""}=no;!Ds[na]&&js[na]&&(Ds[na]=!0)}))})))}));const Fs=Object.keys(Ds).map((Rs=>` @font-face { 14 font-family: '`.concat(Rs,`'; 15 src: url('`).concat(js[Rs],`'); 16 } 17`))).join("");return Fs?` <style type="text/css"><![CDATA[ 18`.concat(Fs,`]]></style> 19`):""}_setSVGObjects(p,Ds){this.forEachObject((js=>{js.excludeFromExport||this._setSVGObject(p,js,Ds)}))}_setSVGObject(p,Ds,js){p.push(Ds.toSVG(js))}_setSVGBgOverlayImage(p,Ds,js){const Fs=this[Ds];Fs&&!Fs.excludeFromExport&&Fs.toSVG&&p.push(Fs.toSVG(js))}_setSVGBgOverlayColor(p,Ds){const js=this["".concat(Ds,"Color")];if(js)if(te(js)){const Fs=js.repeat||"",Rs=this.width,Kn=this.height,ro=this["".concat(Ds,"Vpt")]?Qt(St(this.viewportTransform)):"";p.push('<rect transform="'.concat(ro," translate(").concat(Rs/2,",").concat(Kn/2,')" x="').concat(js.offsetX-Rs/2,'" y="').concat(js.offsetY-Kn/2,'" width="').concat(Fs!=="repeat-y"&&Fs!=="no-repeat"||!se(js)?Rs:js.source.width,'" height="').concat(Fs!=="repeat-x"&&Fs!=="no-repeat"||!se(js)?Kn:js.source.height,'" fill="url(#SVGID_').concat(js.id,`)"></rect> 20`))}else p.push('<rect x="0" y="0" width="100%" height="100%" ','fill="',js,'"',`></rect> 21`)}loadFromJSON(p,Ds){let{signal:js}=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(!p)return Promise.reject(new c("`json` is undefined"));const Fs=typeof p=="string"?JSON.parse(p):p,{objects:Rs=[],backgroundImage:Kn,background:ro,overlayImage:io,overlay:no,clipPath:na}=Fs,ca=this.renderOnAddRemove;return this.renderOnAddRemove=!1,Promise.all([It(Rs,{reviver:Ds,signal:js}),Xt({backgroundImage:Kn,backgroundColor:ro,overlayImage:io,overlayColor:no,clipPath:na},{signal:js})]).then((la=>{let[ua,da]=la;return this.clear(),this.add(...ua),this.set(Fs),this.set(da),this.renderOnAddRemove=ca,this}))}clone(p){const Ds=this.toObject(p);return this.cloneWithoutData().loadFromJSON(Ds)}cloneWithoutData(){const p=vt();return p.width=this.width,p.height=this.height,new this.constructor(p)}toDataURL(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const{format:Ds="png",quality:js=1,multiplier:Fs=1,enableRetinaScaling:Rs=!1}=p,Kn=Fs*(Rs?this.getRetinaScaling():1);return _t(this.toCanvasElement(Kn,p),Ds,js)}toCanvasElement(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1,{width:Ds,height:js,left:Fs,top:Rs,filter:Kn}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const ro=(Ds||this.width)*p,io=(js||this.height)*p,no=this.getZoom(),na=this.width,ca=this.height,la=this.skipControlsDrawing,ua=no*p,da=this.viewportTransform,ga=[ua,0,0,ua,(da[4]-(Fs||0))*p,(da[5]-(Rs||0))*p],pa=this.enableRetinaScaling,ma=vt(),xa=Kn?this._objects.filter((wa=>Kn(wa))):this._objects;return ma.width=ro,ma.height=io,this.enableRetinaScaling=!1,this.viewportTransform=ga,this.width=ro,this.height=io,this.skipControlsDrawing=!0,this.calcViewportBoundaries(),this.renderCanvas(ma.getContext("2d"),xa),this.viewportTransform=da,this.width=na,this.height=ca,this.calcViewportBoundaries(),this.enableRetinaScaling=pa,this.skipControlsDrawing=la,ma}dispose(){return!this.disposed&&this.elements.cleanupDOM({width:this.width,height:this.height}),et.cancelByCanvas(this),this.disposed=!0,new Promise(((p,Ds)=>{const js=()=>{this.destroy(),p(!0)};js.kill=Ds,this.__cleanupTask&&this.__cleanupTask.kill("aborted"),this.destroyed?p(!1):this.nextRenderHandle?this.__cleanupTask=js:js()}))}destroy(){this.destroyed=!0,this.cancelRequestedRender(),this.forEachObject((p=>p.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," }>")}}t(fe,"ownDefaults",ge);const pe=["touchstart","touchmove","touchend"],me=$n=>{const p=ne($n.target),Ds=(function(js){const Fs=js.changedTouches;return Fs&&Fs[0]?Fs[0]:js})($n);return new ht(Ds.clientX+p.left,Ds.clientY+p.top)},ve=$n=>pe.includes($n.type)||$n.pointerType==="touch",ye=$n=>{$n.preventDefault(),$n.stopPropagation()},_e=$n=>{if($n.length===0)return{left:0,top:0,width:0,height:0};const{min:p,max:Ds}=$n.reduce(((Fs,Rs)=>{let{min:Kn,max:ro}=Fs;return{min:Kn.min(Rs),max:ro.max(Rs)}}),{min:new ht($n[0]),max:new ht($n[0])}),js=Ds.subtract(p);return{left:p.x,top:p.y,width:js.x,height:js.y}},xe=["translateX","translateY","scaleX","scaleY"],Ce=($n,p)=>be($n,Tt(p,$n.calcOwnMatrix())),be=($n,p)=>{const Ds=Dt(p),{translateX:js,translateY:Fs,scaleX:Rs,scaleY:Kn}=Ds,ro=i(Ds,xe),io=new ht(js,Fs);$n.flipX=!1,$n.flipY=!1,Object.assign($n,ro),$n.set({scaleX:Rs,scaleY:Kn}),$n.setPositionByOrigin(io,M,M)},we=$n=>{$n.scaleX=1,$n.scaleY=1,$n.skewX=0,$n.skewY=0,$n.flipX=!1,$n.flipY=!1,$n.rotate(0)},Se=$n=>({scaleX:$n.scaleX,scaleY:$n.scaleY,skewX:$n.skewX,skewY:$n.skewY,angle:$n.angle,left:$n.left,flipX:$n.flipX,flipY:$n.flipY,top:$n.top}),Te=($n,p,Ds)=>{const js=$n/2,Fs=p/2,Rs=[new ht(-js,-Fs),new ht(js,-Fs),new ht(-js,Fs),new ht(js,Fs)].map((ro=>ro.transform(Ds))),Kn=_e(Rs);return new ht(Kn.width,Kn.height)},Oe=function(){let $n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:O;return Tt(St(arguments.length>1&&arguments[1]!==void 0?arguments[1]:O),$n)},ke=function($n){let p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:O,Ds=arguments.length>2&&arguments[2]!==void 0?arguments[2]:O;return $n.transform(Oe(p,Ds))},De=function($n){let p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:O,Ds=arguments.length>2&&arguments[2]!==void 0?arguments[2]:O;return $n.transform(Oe(p,Ds),!0)},Me=($n,p,Ds)=>{const js=Oe(p,Ds);return be($n,Tt(js,$n.calcOwnMatrix())),js},Pe=($n,p)=>{var Ds;const{transform:{target:js}}=p;(Ds=js.canvas)===null||Ds===void 0||Ds.fire("object:".concat($n),s(s({},p),{},{target:js})),js.fire($n,p)},Ee={left:-.5,top:-.5,center:0,bottom:.5,right:.5},Ae=$n=>typeof $n=="string"?Ee[$n]:$n-.5,je="not-allowed";function Fe($n){return Ae($n.originX)===Ae(M)&&Ae($n.originY)===Ae(M)}function Le($n){return .5-Ae($n)}const Re=($n,p)=>$n[p],Be=($n,p,Ds,js)=>({e:$n,transform:p,pointer:new ht(Ds,js)});function Ie($n,p){const Ds=$n.getTotalAngle()+Ct(Math.atan2(p.y,p.x))+360;return Math.round(Ds%360/45)}function Xe($n,p,Ds,js,Fs){var Rs;let{target:Kn,corner:ro}=$n;const io=Kn.controls[ro],no=((Rs=Kn.canvas)===null||Rs===void 0?void 0:Rs.getZoom())||1,na=Kn.padding/no,ca=(function(la,ua,da,ga){const pa=la.getRelativeCenterPoint(),ma=da!==void 0&&ga!==void 0?la.translateToGivenOrigin(pa,M,M,da,ga):new ht(la.left,la.top);return(la.angle?ua.rotate(-xt(la.angle),pa):ua).subtract(ma)})(Kn,new ht(js,Fs),p,Ds);return ca.x>=na&&(ca.x-=na),ca.x<=-na&&(ca.x+=na),ca.y>=na&&(ca.y-=na),ca.y<=na&&(ca.y+=na),ca.x-=io.offsetX,ca.y-=io.offsetY,ca}const We=($n,p,Ds,js)=>{const{target:Fs,offsetX:Rs,offsetY:Kn}=p,ro=Ds-Rs,io=js-Kn,no=!Re(Fs,"lockMovementX")&&Fs.left!==ro,na=!Re(Fs,"lockMovementY")&&Fs.top!==io;return no&&Fs.set(P,ro),na&&Fs.set(E,io),(no||na)&&Pe(R,Be($n,p,Ds,js)),no||na};class Ye{getSvgStyles(p){const Ds=this.fillRule?this.fillRule:"nonzero",js=this.strokeWidth?this.strokeWidth:"0",Fs=this.strokeDashArray?this.strokeDashArray.join(" "):F,Rs=this.strokeDashOffset?this.strokeDashOffset:"0",Kn=this.strokeLineCap?this.strokeLineCap:"butt",ro=this.strokeLineJoin?this.strokeLineJoin:"miter",io=this.strokeMiterLimit?this.strokeMiterLimit:"4",no=this.opacity!==void 0?this.opacity:"1",na=this.visible?"":" visibility: hidden;",ca=p?"":this.getSvgFilter(),la=$t(K,this.fill);return[$t(J,this.stroke),"stroke-width: ",js,"; ","stroke-dasharray: ",Fs,"; ","stroke-linecap: ",Kn,"; ","stroke-dashoffset: ",Rs,"; ","stroke-linejoin: ",ro,"; ","stroke-miterlimit: ",io,"; ",la,"fill-rule: ",Ds,"; ","opacity: ",no,";",ca,na].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(p){let Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";const js=p?this.calcTransformMatrix():this.calcOwnMatrix(),Fs='transform="'.concat(Qt(js));return"".concat(Fs).concat(Ds,'" ')}_toSVG(p){return[""]}toSVG(p){return this._createBaseSVGMarkup(this._toSVG(p),{reviver:p})}toClipPathSVG(p){return" "+this._createBaseClipPathSVGMarkup(this._toSVG(p),{reviver:p})}_createBaseClipPathSVGMarkup(p){let{reviver:Ds,additionalTransform:js=""}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};
21const Fs=[this.getSvgTransform(!0,js),this.getSvgCommons()].join(""),Rs=p.indexOf("COMMON_PARTS");return p[Rs]=Fs,Ds?Ds(p.join("")):p.join("")}_createBaseSVGMarkup(p){let{noStyle:Ds,reviver:js,withShadow:Fs,additionalTransform:Rs}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const Kn=Ds?"":'style="'.concat(this.getSvgStyles(),'" '),ro=Fs?'style="'.concat(this.getSvgFilter(),'" '):"",io=this.clipPath,no=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",na=io&&io.absolutePositioned,ca=this.stroke,la=this.fill,ua=this.shadow,da=[],ga=p.indexOf("COMMON_PARTS");let pa;io&&(io.clipPathId="CLIPPATH_".concat(mt()),pa='<clipPath id="'.concat(io.clipPathId,`" > 22`).concat(io.toClipPathSVG(js),`</clipPath> 23`)),na&&da.push("<g ",ro,this.getSvgCommons(),` > 24`),da.push("<g ",this.getSvgTransform(!1),na?"":ro+this.getSvgCommons(),` > 25`);const ma=[Kn,no,Ds?"":this.addPaintOrder()," ",Rs?'transform="'.concat(Rs,'" '):""].join("");return p[ga]=ma,te(la)&&da.push(la.toSVG(this)),te(ca)&&da.push(ca.toSVG(this)),ua&&da.push(ua.toSVG(this)),io&&da.push(pa),da.push(p.join("")),da.push(`</g> 26`),na&&da.push(`</g> 27`),js?js(da.join("")):da.join("")}addPaintOrder(){return this.paintFirst!==K?' paint-order="'.concat(this.paintFirst,'" '):""}}const Ve=($n,p,Ds,js)=>($n<Math.abs(p)?($n=p,js=Ds/4):js=p===0&&$n===0?Ds/S*Math.asin(1):Ds/S*Math.asin(p/$n),{a:$n,c:p,p:Ds,s:js}),He=($n,p,Ds,js,Fs)=>$n*Math.pow(2,10*(js-=1))*Math.sin((js*Fs-p)*S/Ds),Ge=($n,p,Ds,js)=>-Ds*Math.cos($n/js*w)+Ds+p,ze=($n,p,Ds,js)=>($n/=js)<1/2.75?Ds*(7.5625*$n*$n)+p:$n<2/2.75?Ds*(7.5625*($n-=1.5/2.75)*$n+.75)+p:$n<2.5/2.75?Ds*(7.5625*($n-=2.25/2.75)*$n+.9375)+p:Ds*(7.5625*($n-=2.625/2.75)*$n+.984375)+p,Ne=($n,p,Ds,js)=>Ds-ze(js-$n,0,Ds,js)+p;var Ue=Object.freeze({__proto__:null,defaultEasing:Ge,easeInBack:function($n,p,Ds,js){let Fs=arguments.length>4&&arguments[4]!==void 0?arguments[4]:1.70158;return Ds*($n/=js)*$n*((Fs+1)*$n-Fs)+p},easeInBounce:Ne,easeInCirc:($n,p,Ds,js)=>-Ds*(Math.sqrt(1-($n/=js)*$n)-1)+p,easeInCubic:($n,p,Ds,js)=>Ds*($n/js)**3+p,easeInElastic:($n,p,Ds,js)=>{const Fs=Ds;let Rs=0;if($n===0)return p;if(($n/=js)===1)return p+Ds;Rs||(Rs=.3*js);const{a:Kn,s:ro,p:io}=Ve(Fs,Ds,Rs,1.70158);return-He(Kn,ro,io,$n,js)+p},easeInExpo:($n,p,Ds,js)=>$n===0?p:Ds*2**(10*($n/js-1))+p,easeInOutBack:function($n,p,Ds,js){let Fs=arguments.length>4&&arguments[4]!==void 0?arguments[4]:1.70158;return($n/=js/2)<1?Ds/2*($n*$n*((1+(Fs*=1.525))*$n-Fs))+p:Ds/2*(($n-=2)*$n*((1+(Fs*=1.525))*$n+Fs)+2)+p},easeInOutBounce:($n,p,Ds,js)=>$n<js/2?.5*Ne(2*$n,0,Ds,js)+p:.5*ze(2*$n-js,0,Ds,js)+.5*Ds+p,easeInOutCirc:($n,p,Ds,js)=>($n/=js/2)<1?-Ds/2*(Math.sqrt(1-$n**2)-1)+p:Ds/2*(Math.sqrt(1-($n-=2)*$n)+1)+p,easeInOutCubic:($n,p,Ds,js)=>($n/=js/2)<1?Ds/2*$n**3+p:Ds/2*(($n-2)**3+2)+p,easeInOutElastic:($n,p,Ds,js)=>{const Fs=Ds;let Rs=0;if($n===0)return p;if(($n/=js/2)===2)return p+Ds;Rs||(Rs=js*(.3*1.5));const{a:Kn,s:ro,p:io,c:no}=Ve(Fs,Ds,Rs,1.70158);return $n<1?-.5*He(Kn,ro,io,$n,js)+p:Kn*Math.pow(2,-10*($n-=1))*Math.sin(($n*js-ro)*S/io)*.5+no+p},easeInOutExpo:($n,p,Ds,js)=>$n===0?p:$n===js?p+Ds:($n/=js/2)<1?Ds/2*2**(10*($n-1))+p:Ds/2*-(2**(-10*--$n)+2)+p,easeInOutQuad:($n,p,Ds,js)=>($n/=js/2)<1?Ds/2*$n**2+p:-Ds/2*(--$n*($n-2)-1)+p,easeInOutQuart:($n,p,Ds,js)=>($n/=js/2)<1?Ds/2*$n**4+p:-Ds/2*(($n-=2)*$n**3-2)+p,easeInOutQuint:($n,p,Ds,js)=>($n/=js/2)<1?Ds/2*$n**5+p:Ds/2*(($n-2)**5+2)+p,easeInOutSine:($n,p,Ds,js)=>-Ds/2*(Math.cos(Math.PI*$n/js)-1)+p,easeInQuad:($n,p,Ds,js)=>Ds*($n/=js)*$n+p,easeInQuart:($n,p,Ds,js)=>Ds*($n/=js)*$n**3+p,easeInQuint:($n,p,Ds,js)=>Ds*($n/js)**5+p,easeInSine:($n,p,Ds,js)=>-Ds*Math.cos($n/js*w)+Ds+p,easeOutBack:function($n,p,Ds,js){let Fs=arguments.length>4&&arguments[4]!==void 0?arguments[4]:1.70158;return Ds*(($n=$n/js-1)*$n*((Fs+1)*$n+Fs)+1)+p},easeOutBounce:ze,easeOutCirc:($n,p,Ds,js)=>Ds*Math.sqrt(1-($n=$n/js-1)*$n)+p,easeOutCubic:($n,p,Ds,js)=>Ds*(($n/js-1)**3+1)+p,easeOutElastic:($n,p,Ds,js)=>{const Fs=Ds;let Rs=0;if($n===0)return p;if(($n/=js)===1)return p+Ds;Rs||(Rs=.3*js);const{a:Kn,s:ro,p:io,c:no}=Ve(Fs,Ds,Rs,1.70158);return Kn*2**(-10*$n)*Math.sin(($n*js-ro)*S/io)+no+p},easeOutExpo:($n,p,Ds,js)=>$n===js?p+Ds:Ds*-(2**(-10*$n/js)+1)+p,easeOutQuad:($n,p,Ds,js)=>-Ds*($n/=js)*($n-2)+p,easeOutQuart:($n,p,Ds,js)=>-Ds*(($n=$n/js-1)*$n**3-1)+p,easeOutQuint:($n,p,Ds,js)=>Ds*(($n/js-1)**5+1)+p,easeOutSine:($n,p,Ds,js)=>Ds*Math.sin($n/js*w)+p});const qe=()=>!1;class Ke{constructor(p){let{startValue:Ds,byValue:js,duration:Fs=500,delay:Rs=0,easing:Kn=Ge,onStart:ro=b,onChange:io=b,onComplete:no=b,abort:na=qe,target:ca}=p;t(this,"_state","pending"),t(this,"durationProgress",0),t(this,"valueProgress",0),this.tick=this.tick.bind(this),this.duration=Fs,this.delay=Rs,this.easing=Kn,this._onStart=ro,this._onChange=io,this._onComplete=no,this._abort=na,this.target=ca,this.startValue=Ds,this.byValue=js,this.value=this.startValue,this.endValue=Object.freeze(this.calculate(this.duration).value)}get state(){return this._state}isDone(){return this._state==="aborted"||this._state==="completed"}start(){const p=Ds=>{this._state==="pending"&&(this.startTime=Ds||+new Date,this._state="running",this._onStart(),this.tick(this.startTime))};this.register(),this.delay>0?setTimeout((()=>gt(p)),this.delay):gt(p)}tick(p){const Ds=(p||+new Date)-this.startTime,js=Math.min(Ds,this.duration);this.durationProgress=js/this.duration;const{value:Fs,valueProgress:Rs}=this.calculate(js);this.value=Object.freeze(Fs),this.valueProgress=Rs,this._state!=="aborted"&&(this._abort(this.value,this.valueProgress,this.durationProgress)?(this._state="aborted",this.unregister()):Ds>=this.duration?(this.durationProgress=this.valueProgress=1,this._onChange(this.endValue,this.valueProgress,this.durationProgress),this._state="completed",this._onComplete(this.endValue,this.valueProgress,this.durationProgress),this.unregister()):(this._onChange(this.value,this.valueProgress,this.durationProgress),gt(this.tick)))}
vendor: 13,079 bytes, line 27
27register(){et.push(this)}unregister(){et.remove(this)}abort(){this._state="aborted",this.unregister()}}const Je=["startValue","endValue"];class Ze extends Ke{constructor(p){let{startValue:Ds=0,endValue:js=100}=p;super(s(s({},i(p,Je)),{},{startValue:Ds,byValue:js-Ds}))}calculate(p){const Ds=this.easing(p,this.startValue,this.byValue,this.duration);return{value:Ds,valueProgress:Math.abs((Ds-this.startValue)/this.byValue)}}}const Qe=["startValue","endValue"];class $e extends Ke{constructor(p){let{startValue:Ds=[0],endValue:js=[100]}=p;super(s(s({},i(p,Qe)),{},{startValue:Ds,byValue:js.map(((Fs,Rs)=>Fs-Ds[Rs]))}))}calculate(p){const Ds=this.startValue.map(((js,Fs)=>this.easing(p,js,this.byValue[Fs],this.duration,Fs)));return{value:Ds,valueProgress:Math.abs((Ds[0]-this.startValue[0])/this.byValue[0])}}}const ts=($n,p,Ds)=>Math.max($n,Math.min(p,Ds)),es=["startValue","endValue","easing","onChange","onComplete","abort"],ss=($n,p,Ds,js)=>p+Ds*(1-Math.cos($n/js*w)),is=$n=>$n&&((p,Ds,js)=>$n(new qt(p).toRgba(),Ds,js));class rs extends Ke{constructor(p){let{startValue:Ds,endValue:js,easing:Fs=ss,onChange:Rs,onComplete:Kn,abort:ro}=p,io=i(p,es);const no=new qt(Ds).getSource(),na=new qt(js).getSource();super(s(s({},io),{},{startValue:no,byValue:na.map(((ca,la)=>ca-no[la])),easing:Fs,onChange:is(Rs),onComplete:is(Kn),abort:is(ro)}))}calculate(p){const[Ds,js,Fs,Rs]=this.startValue.map(((ro,io)=>this.easing(p,ro,this.byValue[io],this.duration,io))),Kn=[...[Ds,js,Fs].map(Math.round),ts(0,Rs,1)];return{value:Kn,valueProgress:Kn.map(((ro,io)=>this.byValue[io]!==0?Math.abs((ro-this.startValue[io])/this.byValue[io]):0)).find((ro=>ro!==0))||0}}}function ns($n){const p=(Ds=>Array.isArray(Ds.startValue)||Array.isArray(Ds.endValue))($n)?new $e($n):new Ze($n);return p.start(),p}function os($n){const p=new rs($n);return p.start(),p}const as=new ht(1,0),hs=new ht,cs=($n,p)=>$n.rotate(p),ls=($n,p)=>new ht(p).subtract($n),us=$n=>$n.distanceFrom(hs),ds=($n,p)=>Math.atan2(ms($n,p),vs($n,p)),gs=$n=>ds(as,$n),fs=$n=>$n.eq(hs)?$n:$n.scalarDivide(us($n)),ps=function($n){let p=!(arguments.length>1&&arguments[1]!==void 0)||arguments[1];return fs(new ht(-$n.y,$n.x).scalarMultiply(p?1:-1))},ms=($n,p)=>$n.x*p.y-$n.y*p.x,vs=($n,p)=>$n.x*p.x+$n.y*p.y,ys=($n,p,Ds)=>{if($n.eq(p)||$n.eq(Ds))return!0;const js=ms(p,Ds),Fs=ms(p,$n),Rs=ms(Ds,$n);return js>=0?Fs>=0&&Rs<=0:!(Fs<=0&&Rs>=0)};class _s{constructor(p){this.status=p,this.points=[]}includes(p){return this.points.some((Ds=>Ds.eq(p)))}append(){for(var p=arguments.length,Ds=new Array(p),js=0;js<p;js++)Ds[js]=arguments[js];return this.points=this.points.concat(Ds.filter((Fs=>!this.includes(Fs)))),this}static isPointContained(p,Ds,js){let Fs=arguments.length>3&&arguments[3]!==void 0&&arguments[3];if(Ds.eq(js))return p.eq(Ds);if(Ds.x===js.x)return p.x===Ds.x&&(Fs||p.y>=Math.min(Ds.y,js.y)&&p.y<=Math.max(Ds.y,js.y));if(Ds.y===js.y)return p.y===Ds.y&&(Fs||p.x>=Math.min(Ds.x,js.x)&&p.x<=Math.max(Ds.x,js.x));{const Rs=ls(Ds,js),Kn=ls(Ds,p).divide(Rs);return Fs?Math.abs(Kn.x)===Math.abs(Kn.y):Kn.x===Kn.y&&Kn.x>=0&&Kn.x<=1}}static isPointInPolygon(p,Ds){const js=new ht(p).setX(Math.min(p.x-1,...Ds.map((Rs=>Rs.x))));let Fs=0;for(let Rs=0;Rs<Ds.length;Rs++){const Kn=this.intersectSegmentSegment(Ds[Rs],Ds[(Rs+1)%Ds.length],p,js);if(Kn.includes(p))return!0;Fs+=+(Kn.status==="Intersection")}return Fs%2==1}static intersectLineLine(p,Ds,js,Fs){let Rs=!(arguments.length>4&&arguments[4]!==void 0)||arguments[4],Kn=!(arguments.length>5&&arguments[5]!==void 0)||arguments[5];const ro=Ds.x-p.x,io=Ds.y-p.y,no=Fs.x-js.x,na=Fs.y-js.y,ca=p.x-js.x,la=p.y-js.y,ua=no*la-na*ca,da=ro*la-io*ca,ga=na*ro-no*io;if(ga!==0){const pa=ua/ga,ma=da/ga;return(Rs||0<=pa&&pa<=1)&&(Kn||0<=ma&&ma<=1)?new _s("Intersection").append(new ht(p.x+pa*ro,p.y+pa*io)):new _s}if(ua===0||da===0){const pa=Rs||Kn||_s.isPointContained(p,js,Fs)||_s.isPointContained(Ds,js,Fs)||_s.isPointContained(js,p,Ds)||_s.isPointContained(Fs,p,Ds);return new _s(pa?"Coincident":void 0)}return new _s("Parallel")}static intersectSegmentLine(p,Ds,js,Fs){return _s.intersectLineLine(p,Ds,js,Fs,!1,!0)}static intersectSegmentSegment(p,Ds,js,Fs){return _s.intersectLineLine(p,Ds,js,Fs,!1,!1)}static intersectLinePolygon(p,Ds,js){let Fs=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3];const Rs=new _s,Kn=js.length;for(let ro,io,no,na=0;na<Kn;na++){if(ro=js[na],io=js[(na+1)%Kn],no=_s.intersectLineLine(p,Ds,ro,io,Fs,!1),no.status==="Coincident")return no;Rs.append(...no.points)}return Rs.points.length>0&&(Rs.status="Intersection"),Rs}static intersectSegmentPolygon(p,Ds,js){return _s.intersectLinePolygon(p,Ds,js,!1)}static intersectPolygonPolygon(p,Ds){const js=new _s,Fs=p.length,Rs=[];for(let Kn=0;Kn<Fs;Kn++){const ro=p[Kn],io=p[(Kn+1)%Fs],no=_s.intersectSegmentPolygon(ro,io,Ds);no.status==="Coincident"?(Rs.push(no),js.append(ro,io)):js.append(...no.points)}return Rs.length>0&&Rs.length===p.length?new _s("Coincident"):(js.points.length>0&&(js.status="Intersection"),js)}static intersectPolygonRectangle(p,Ds,js){const Fs=Ds.min(js),Rs=Ds.max(js),Kn=new ht(Rs.x,Fs.y),ro=new ht(Fs.x,Rs.y);return _s.intersectPolygonPolygon(p,[Fs,Kn,Rs,ro])}}class xs extends dt{_getTransformedDimensions(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const Ds=s({scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,width:this.width,height:this.height,strokeWidth:this.strokeWidth},p),js=Ds.strokeWidth;let Fs=js,Rs=0;this.strokeUniform&&(Fs=0,Rs=js);const Kn=Ds.width+Fs,ro=Ds.height+Fs;let io;return io=Ds.skewX===0&&Ds.skewY===0?new ht(Kn*Ds.scaleX,ro*Ds.scaleY):Te(Kn,ro,Lt(Ds)),io.scalarAdd(Rs)}translateToGivenOrigin(p,Ds,js,Fs,Rs){let Kn=p.x,ro=p.y;const io=Ae(Fs)-Ae(Ds),no=Ae(Rs)-Ae(js);if(io||no){const na=this._getTransformedDimensions();Kn+=io*na.x,ro+=no*na.y}return new ht(Kn,ro)}translateToCenterPoint(p,Ds,js){const Fs=this.translateToGivenOrigin(p,Ds,js,M,M);return this.angle?Fs.rotate(xt(this.angle),p):Fs}translateToOriginPoint(p,Ds,js){const Fs=this.translateToGivenOrigin(p,M,M,Ds,js);return this.angle?Fs.rotate(xt(this.angle),p):Fs}getCenterPoint(){const p=this.getRelativeCenterPoint();return this.group?wt(p,this.group.calcTransformMatrix()):p}getRelativeCenterPoint(){return this.translateToCenterPoint(new ht(this.left,this.top),this.originX,this.originY)}getPointByOrigin(p,Ds){return this.translateToOriginPoint(this.getRelativeCenterPoint(),p,Ds)}setPositionByOrigin(p,Ds,js){const Fs=this.translateToCenterPoint(p,Ds,js),Rs=this.translateToOriginPoint(Fs,this.originX,this.originY);this.set({left:Rs.x,top:Rs.y})}_getLeftTopCoords(){return this.translateToOriginPoint(this.getRelativeCenterPoint(),P,E)}}class Cs extends xs{getX(){return this.getXY().x}setX(p){this.setXY(this.getXY().setX(p))}getY(){return this.getXY().y}setY(p){this.setXY(this.getXY().setY(p))}getRelativeX(){return this.left}setRelativeX(p){this.left=p}getRelativeY(){return this.top}setRelativeY(p){this.top=p}getXY(){const p=this.getRelativeXY();return this.group?wt(p,this.group.calcTransformMatrix()):p}setXY(p,Ds,js){this.group&&(p=wt(p,St(this.group.calcTransformMatrix()))),this.setRelativeXY(p,Ds,js)}getRelativeXY(){return new ht(this.left,this.top)}setRelativeXY(p){let Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.originX,js=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.originY;this.setPositionByOrigin(p,Ds,js)}isStrokeAccountedForInDimensions(){return!1}getCoords(){const{tl:p,tr:Ds,br:js,bl:Fs}=this.aCoords||(this.aCoords=this.calcACoords()),Rs=[p,Ds,js,Fs];if(this.group){const Kn=this.group.calcTransformMatrix();return Rs.map((ro=>wt(ro,Kn)))}return Rs}intersectsWithRect(p,Ds){return _s.intersectPolygonRectangle(this.getCoords(),p,Ds).status==="Intersection"}intersectsWithObject(p){const Ds=_s.intersectPolygonPolygon(this.getCoords(),p.getCoords());return Ds.status==="Intersection"||Ds.status==="Coincident"||p.isContainedWithinObject(this)||this.isContainedWithinObject(p)}isContainedWithinObject(p){return this.getCoords().every((Ds=>p.containsPoint(Ds)))}isContainedWithinRect(p,Ds){const{left:js,top:Fs,width:Rs,height:Kn}=this.getBoundingRect();return js>=p.x&&js+Rs<=Ds.x&&Fs>=p.y&&Fs+Kn<=Ds.y}isOverlapping(p){return this.intersectsWithObject(p)||this.isContainedWithinObject(p)||p.isContainedWithinObject(this)}containsPoint(p){return _s.isPointInPolygon(p,this.getCoords())}isOnScreen(){if(!this.canvas)return!1;const{tl:p,br:Ds}=this.canvas.vptCoords;return!!this.getCoords().some((js=>js.x<=Ds.x&&js.x>=p.x&&js.y<=Ds.y&&js.y>=p.y))||!!this.intersectsWithRect(p,Ds)||this.containsPoint(p.midPointFrom(Ds))}isPartiallyOnScreen(){if(!this.canvas)return!1;const{tl:p,br:Ds}=this.canvas.vptCoords;return this.intersectsWithRect(p,Ds)?!0:this.getCoords().every((js=>(js.x>=Ds.x||js.x<=p.x)&&(js.y>=Ds.y||js.y<=p.y)))&&this.containsPoint(p.midPointFrom(Ds))}getBoundingRect(){return _e(this.getCoords())}getScaledWidth(){return this._getTransformedDimensions().x}getScaledHeight(){return this._getTransformedDimensions().y}scale(p){this._set(z,p),this._set(N,p),this.setCoords()}scaleToWidth(p){const Ds=this.getBoundingRect().width/this.getScaledWidth();return this.scale(p/this.width/Ds)}scaleToHeight(p){const Ds=this.getBoundingRect().height/this.getScaledHeight();return this.scale(p/this.height/Ds)}getCanvasRetinaScaling(){var p;return((p=this.canvas)===null||p===void 0?void 0:p.getRetinaScaling())||1}getTotalAngle(){return this.group?Ct(kt(this.calcTransformMatrix())):this.angle}getViewportTransform(){var p;return((p=this.canvas)===null||p===void 0?void 0:p.viewportTransform)||O.concat()}calcACoords(){const p=Pt({angle:this.angle}),{x:Ds,y:js}=this.getRelativeCenterPoint(),Fs=Mt(Ds,js),Rs=Tt(Fs,p),Kn=this._getTransformedDimensions(),ro=Kn.x/2,io=Kn.y/2;return{tl:wt({x:-ro,y:-io},Rs),tr:wt({x:ro,y:-io},Rs),bl:wt({x:-ro,y:io},Rs),br:wt({x:ro,y:io},Rs)}}setCoords(){this.aCoords=this.calcACoords()}transformMatrixKey(){let p=arguments.length>0&&arguments[0]!==void 0&&arguments[0],Ds=[];return!p&&this.group&&(Ds=this.group.transformMatrixKey(p)),Ds.push(this.top,this.left,this.width,this.height,this.scaleX,this.scaleY,this.angle,this.strokeWidth,this.skewX,this.skewY,+this.flipX,+this.flipY,Ae(this.originX),Ae(this.originY)),Ds}calcTransformMatrix(){let p=arguments.length>0&&arguments[0]!==void 0&&arguments[0],Ds=this.calcOwnMatrix();if(p||!this.group)return Ds;const js=this.transformMatrixKey(p),Fs=this.matrixCache;return Fs&&Fs.key.every(((Rs,Kn)=>Rs===js[Kn]))?Fs.value:(this.group&&(Ds=Tt(this.group.calcTransformMatrix(!1),Ds)),this.matrixCache={key:js,value:Ds},Ds)}calcOwnMatrix(){const p=this.transformMatrixKey(!0),Ds=this.ownMatrixCache;if(Ds&&Ds.key===p)return Ds.value;const js=this.getRelativeCenterPoint(),Fs={angle:this.angle,translateX:js.x,translateY:js.y,scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY},Rs=Rt(Fs);return this.ownMatrixCache={key:p,value:Rs},Rs}_getNonTransformedDimensions(){return new ht(this.width,this.height).scalarAdd(this.strokeWidth)}_calculateCurrentDimensions(p){return this._getTransformedDimensions(p).transform(this.getViewportTransform(),!0).scalarAdd(2*this.padding)}}class bs extends Cs{isDescendantOf(p){const{parent:Ds,group:js}=this;return Ds===p||js===p||this.canvas===p||!!Ds&&Ds.isDescendantOf(p)||!!js&&js!==Ds&&js.isDescendantOf(p)}getAncestors(){const p=[];let Ds=this;do Ds=Ds instanceof bs?Ds.parent:void 0,Ds&&p.push(Ds);while(Ds);return p}findCommonAncestors(p){if(this===p)return{fork:[],otherFork:[],common:[this,...this.getAncestors()]};const Ds=this.getAncestors(),js=p.getAncestors();if(Ds.length===0&&js.length>0&&this===js[js.length-1])return{fork:[],otherFork:[p,...js.slice(0,js.length-1)],common:[this]};for(let Fs,Rs=0;Rs<Ds.length;Rs++){if(Fs=Ds[Rs],Fs===p)return{fork:[this,...Ds.slice(0,Rs)],otherFork:[],common:Ds.slice(Rs)};for(let Kn=0;Kn<js.length;Kn++){if(this===js[Kn])return{fork:[],otherFork:[p,...js.slice(0,Kn)],common:[this,...Ds]};if(Fs===js[Kn])return{fork:[this,...Ds.slice(0,Rs)],otherFork:[p,...js.slice(0,Kn)],common:Ds.slice(Rs)}}}return{fork:[this,...Ds],otherFork:[p,...js],common:[]}}hasCommonAncestors(p){const Ds=this.findCommonAncestors(p);return Ds&&!!Ds.common.length}isInFrontOf(p){if(this===p)return;const Ds=this.findCommonAncestors(p);if(Ds.fork.includes(p))return!0;if(Ds.otherFork.includes(this))return!1;const js=Ds.common[0]||this.canvas;if(!js)return;const Fs=Ds.fork.pop(),Rs=Ds.otherFork.pop(),Kn=js._objects.indexOf(Fs),ro=js._objects.indexOf(Rs);return Kn>-1&&Kn>ro}}class ws extends bs{animate(p,Ds){return Object.entries(p).reduce(((js,Fs)=>{let[Rs,Kn]=Fs;return js[Rs]=this._animate(Rs,Kn,Ds),js}),{})}_animate(p,Ds){let js=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const Fs=p.split("."),Rs=this.constructor.colorProperties.includes(Fs[Fs.length-1]),{abort:Kn,startValue:ro,onChange:io,onComplete:no}=js,na=s(s({},js),{},{target:this,startValue:ro??Fs.reduce(((ca,la)=>ca[la]),this),endValue:Ds,abort:Kn?.bind(this),onChange:(ca,la,ua)=>{Fs.reduce(((da,ga,pa)=>
27(pa===Fs.length-1&&(da[ga]=ca),da[ga])),this),io&&io(ca,la,ua)},onComplete:(ca,la,ua)=>{this.setCoords(),no&&no(ca,la,ua)}});return Rs?os(na):ns(na)}}function Ss($n){return new RegExp("^("+$n.join("|")+")\\b","i")}var Ts,Os;t(ws,"colorProperties",[K,J,"backgroundColor"]);const ks=String.raw(Ts||(Ts=r(["(?:[-+]?(?:d*.d+|d+.?)(?:[eE][-+]?d+)?)"],["(?:[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?)"])));String.raw(Os||(Os=r(["(?:s+,?s*|,s*|$)"],["(?:\\s+,?\\s*|,\\s*|$)"])));const Ms=new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+ks+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+ks+"))?\\s+(.*)"),Ps={cx:P,x:P,r:"radius",cy:E,y:E,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"},Es="font-size",As="clip-path";Ss(["path","circle","polygon","polyline","ellipse","rect","line","image","text"]);Ss(["symbol","image","marker","pattern","view","svg"]);const Ls=Ss(["symbol","g","a","svg","clipPath","defs"]),Bs="(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?",Is=new RegExp("(?:\\s|^)"+Bs+Bs+"("+ks+"?(?:px)?)?(?:\\s?|$)(?:$|\\s)");class Xs{constructor(p){const Ds=typeof p=="string"?Xs.parseShadow(p):p;Object.assign(this,Xs.ownDefaults);for(const js in Ds)this[js]=Ds[js];this.id=mt()}static parseShadow(p){const Ds=p.trim(),[,js=0,Fs=0,Rs=0]=(Is.exec(Ds)||[]).map((Kn=>parseFloat(Kn)||0));return{color:(Ds.replace(Is,"")||"rgb(0,0,0)").trim(),offsetX:js,offsetY:Fs,blur:Rs}}toString(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")}toSVG(p){const Ds=cs(new ht(this.offsetX,this.offsetY),xt(-p.angle)),js=new qt(this.color);let Fs=40,Rs=40;return p.width&&p.height&&(Fs=100*Kt((Math.abs(Ds.x)+this.blur)/p.width,a.NUM_FRACTION_DIGITS)+20,Rs=100*Kt((Math.abs(Ds.y)+this.blur)/p.height,a.NUM_FRACTION_DIGITS)+20),p.flipX&&(Ds.x*=-1),p.flipY&&(Ds.y*=-1),'<filter id="SVGID_'.concat(this.id,'" y="-').concat(Rs,'%" height="').concat(100+2*Rs,'%" x="-').concat(Fs,'%" width="').concat(100+2*Fs,`%" > 28 <feGaussianBlur in="SourceAlpha" stdDeviation="`).concat(Kt(this.blur?this.blur/2:0,a.NUM_FRACTION_DIGITS),`"></feGaussianBlur> 29 <feOffset dx="`).concat(Kt(Ds.x,a.NUM_FRACTION_DIGITS),'" dy="').concat(Kt(Ds.y,a.NUM_FRACTION_DIGITS),`" result="oBlur" ></feOffset> 30 <feFlood flood-color="`).concat(js.toRgb(),'" flood-opacity="').concat(js.getAlpha(),`"/> 31 <feComposite in2="oBlur" operator="in" /> 32 <feMerge> 33 <feMergeNode></feMergeNode> 34 <feMergeNode in="SourceGraphic"></feMergeNode> 35 </feMerge> 36</filter> 37`)}toObject(){const p={color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling,type:this.constructor.type},Ds=Xs.ownDefaults;return this.includeDefaultValues?p:Yt(p,((js,Fs)=>js!==Ds[Fs]))}static async fromObject(p){return new this(p)}}t(Xs,"ownDefaults",{color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1}),t(Xs,"type","shadow"),tt.setClass(Xs,"shadow");const Ws=$n=>JSON.parse(JSON.stringify($n)),Ys=[E,P,z,N,"flipX","flipY","originX","originY","angle","opacity","globalCompositeOperation","shadow","visible",U,q],Vs=[K,J,"strokeWidth","strokeDashArray","width","height","paintFirst","strokeUniform","strokeLineCap","strokeDashOffset","strokeLineJoin","strokeMiterLimit","backgroundColor","clipPath"],Hs={top:0,left:0,width:0,height:0,angle:0,flipX:!1,flipY:!1,scaleX:1,scaleY:1,minScaleLimit:0,skewX:0,skewY:0,originX:P,originY:E,strokeWidth:1,strokeUniform:!1,padding:0,opacity:1,paintFirst:K,fill:"rgb(0,0,0)",fillRule:"nonzero",stroke:null,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,globalCompositeOperation:"source-over",backgroundColor:"",shadow:null,visible:!0,includeDefaultValues:!0,excludeFromExport:!1,objectCaching:!0,clipPath:void 0,inverted:!1,absolutePositioned:!1,centeredRotation:!0,centeredScaling:!1,dirty:!0},Gs=["type"],zs=["extraParam"];let Ns=class kh extends ws{static getDefaults(){return kh.ownDefaults}get type(){const p=this.constructor.type;return p==="FabricObject"?"object":p.toLowerCase()}set type(p){h("warn","Setting type has no effect",p)}constructor(p){super(),t(this,"_cacheContext",null),Object.assign(this,kh.ownDefaults),this.setOptions(p)}_createCacheCanvas(){this._cacheCanvas=vt(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0}_limitCacheSize(p){const Ds=p.width,js=p.height,Fs=a.maxCacheSideLimit,Rs=a.minCacheSideLimit;if(Ds<=Fs&&js<=Fs&&Ds*js<=a.perfLimitSizeTotal)return Ds<Rs&&(p.width=Rs),js<Rs&&(p.height=Rs),p;const Kn=Ds/js,[ro,io]=x.limitDimsByArea(Kn),no=ts(Rs,ro,Fs),na=ts(Rs,io,Fs);return Ds>no&&(p.zoomX/=Ds/no,p.width=no,p.capped=!0),js>na&&(p.zoomY/=js/na,p.height=na,p.capped=!0),p}_getCacheCanvasDimensions(){const p=this.getTotalObjectScaling(),Ds=this._getTransformedDimensions({skewX:0,skewY:0}),js=Ds.x*p.x/this.scaleX,Fs=Ds.y*p.y/this.scaleY;return{width:js+2,height:Fs+2,zoomX:p.x,zoomY:p.y,x:js,y:Fs}}_updateCacheCanvas(){const p=this._cacheCanvas,Ds=this._cacheContext,js=this._limitCacheSize(this._getCacheCanvasDimensions()),Fs=a.minCacheSideLimit,Rs=js.width,Kn=js.height,ro=js.zoomX,io=js.zoomY,no=Rs!==p.width||Kn!==p.height,na=this.zoomX!==ro||this.zoomY!==io;if(!p||!Ds)return!1;let ca,la,ua=no||na,da=0,ga=0,pa=!1;if(no){const ma=this._cacheCanvas.width,xa=this._cacheCanvas.height,wa=Rs>ma||Kn>xa;pa=wa||(Rs<.9*ma||Kn<.9*xa)&&ma>Fs&&xa>
37Fs,wa&&!js.capped&&(Rs>Fs||Kn>Fs)&&(da=.1*Rs,ga=.1*Kn)}return ie(this)&&this.path&&(ua=!0,pa=!0,da+=this.getHeightOfLine(0)*this.zoomX,ga+=this.getHeightOfLine(0)*this.zoomY),!!ua&&(pa?(p.width=Math.ceil(Rs+da),p.height=Math.ceil(Kn+ga)):(Ds.setTransform(1,0,0,1,0,0),Ds.clearRect(0,0,p.width,p.height)),ca=js.x/2,la=js.y/2,this.cacheTranslationX=Math.round(p.width/2-ca)+ca,this.cacheTranslationY=Math.round(p.height/2-la)+la,Ds.translate(this.cacheTranslationX,this.cacheTranslationY),Ds.scale(ro,io),this.zoomX=ro,this.zoomY=io,!0)}setOptions(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this._setOptions(p)}transform(p){const Ds=this.group&&!this.group._transformDone||this.group&&this.canvas&&p===this.canvas.contextTop,js=this.calcTransformMatrix(!Ds);p.transform(js[0],js[1],js[2],js[3],js[4],js[5])}toObject(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];const Ds=a.NUM_FRACTION_DIGITS,js=this.clipPath&&!this.clipPath.excludeFromExport?s(s({},this.clipPath.toObject(p)),{},{inverted:this.clipPath.inverted,absolutePositioned:this.clipPath.absolutePositioned}):null,Fs=s(s({},Wt(this,p)),{},{type:this.constructor.type,version:C,originX:this.originX,originY:this.originY,left:Kt(this.left,Ds),top:Kt(this.top,Ds),width:Kt(this.width,Ds),height:Kt(this.height,Ds),fill:ee$1(this.fill)?this.fill.toObject():this.fill,stroke:ee$1(this.stroke)?this.stroke.toObject():this.stroke,strokeWidth:Kt(this.strokeWidth,Ds),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:Kt(this.strokeMiterLimit,Ds),scaleX:Kt(this.scaleX,Ds),scaleY:Kt(this.scaleY,Ds),angle:Kt(this.angle,Ds),flipX:this.flipX,flipY:this.flipY,opacity:Kt(this.opacity,Ds),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:Kt(this.skewX,Ds),skewY:Kt(this.skewY,Ds)},js?{clipPath:js}:null);return this.includeDefaultValues?Fs:this._removeDefaultValues(Fs)}toDatalessObject(p){return this.toObject(p)}_removeDefaultValues(p){const Ds=this.constructor.getDefaults(),js=Object.keys(Ds).length>0?Ds:Object.getPrototypeOf(this);return Yt(p,((Fs,Rs)=>{if(Rs===P||Rs===E||Rs==="type")return!0;const Kn=js[Rs];return Fs!==Kn&&!(Array.isArray(Fs)&&Array.isArray(Kn)&&Fs.length===0&&Kn.length===0)}))}toString(){return"#<".concat(this.constructor.type,">")}getObjectScaling(){if(!this.group)return new ht(Math.abs(this.scaleX),Math.abs(this.scaleY));const p=Dt(this.calcTransformMatrix());return new ht(Math.abs(p.scaleX),Math.abs(p.scaleY))}getTotalObjectScaling(){const p=this.getObjectScaling();if(this.canvas){const Ds=this.canvas.getZoom(),js=this.getCanvasRetinaScaling();return p.scalarMultiply(Ds*js)}return p}getObjectOpacity(){let p=this.opacity;return this.group&&(p*=this.group.getObjectOpacity()),p}_constrainScale(p){return Math.abs(p)<this.minScaleLimit?p<0?-this.minScaleLimit:this.minScaleLimit:p===0?1e-4:p}_set(p,Ds){p!==z&&p!==N||(Ds=this._constrainScale(Ds)),p===z&&Ds<0?(this.flipX=!this.flipX,Ds*=-1):p==="scaleY"&&Ds<0?(this.flipY=!this.flipY,Ds*=-1):p!=="shadow"||!Ds||Ds instanceof Xs||(Ds=new Xs(Ds));const js=this[p]!==Ds;return this[p]=Ds,js&&this.constructor.cacheProperties.includes(p)&&(this.dirty=!0),this.parent&&(this.dirty||js&&this.constructor.stateProperties.includes(p))&&this.parent._set("dirty",!0),this}isNotVisible(){return this.opacity===0||!this.width&&!this.height&&this.strokeWidth===0||!this.visible}render(p){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(p.save(),this._setupCompositeOperation(p),this.drawSelectionBackground(p),this.transform(p),this._setOpacity(p),this._setShadow(p),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(p)):(this._removeCacheCanvas(),this.drawObject(p),this.dirty=!1),p.restore(
37))}drawSelectionBackground(p){}renderCache(p){p=p||{},this._cacheCanvas&&this._cacheContext||this._createCacheCanvas(),this.isCacheDirty()&&this._cacheContext&&(this.drawObject(this._cacheContext,p.forClipping),this.dirty=!1)}_removeCacheCanvas(){this._cacheCanvas=void 0,this._cacheContext=null}hasStroke(){return this.stroke&&this.stroke!=="transparent"&&this.strokeWidth!==0}hasFill(){return this.fill&&this.fill!=="transparent"}needsItsOwnCache(){return!!(this.paintFirst===J&&this.hasFill()&&this.hasStroke()&&this.shadow)||!!this.clipPath}shouldCache(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.parent||!this.parent.isOnACache()),this.ownCaching}willDrawShadow(){return!!this.shadow&&(this.shadow.offsetX!==0||this.shadow.offsetY!==0)}drawClipPathOnCache(p,Ds){if(p.save(),Ds.inverted?p.globalCompositeOperation="destination-out":p.globalCompositeOperation="destination-in",Ds.absolutePositioned){const js=St(this.calcTransformMatrix());p.transform(js[0],js[1],js[2],js[3],js[4],js[5])}Ds.transform(p),p.scale(1/Ds.zoomX,1/Ds.zoomY),p.drawImage(Ds._cacheCanvas,-Ds.cacheTranslationX,-Ds.cacheTranslationY),p.restore(
vendor: 4,828 bytes, line 37
37)}drawObject(p,Ds){const js=this.fill,Fs=this.stroke;Ds?(this.fill="black",this.stroke="",this._setClippingProperties(p)):this._renderBackground(p),this._render(p),this._drawClipPath(p,this.clipPath),this.fill=js,this.stroke=Fs}_drawClipPath(p,Ds){Ds&&(Ds._set("canvas",this.canvas),Ds.shouldCache(),Ds._transformDone=!0,Ds.renderCache({forClipping:!0}),this.drawClipPathOnCache(p,Ds))}drawCacheOnCanvas(p){p.scale(1/this.zoomX,1/this.zoomY),p.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)}isCacheDirty(){let p=arguments.length>0&&arguments[0]!==void 0&&arguments[0];if(this.isNotVisible())return!1;const Ds=this._cacheCanvas,js=this._cacheContext;return!(!Ds||!js||p||!this._updateCacheCanvas())||!!(this.dirty||this.clipPath&&this.clipPath.absolutePositioned)&&(Ds&&js&&!p&&(js.save(),js.setTransform(1,0,0,1,0,0),js.clearRect(0,0,Ds.width,Ds.height),js.restore()),!0)}_renderBackground(p){if(!this.backgroundColor)return;const Ds=this._getNonTransformedDimensions();p.fillStyle=this.backgroundColor,p.fillRect(-Ds.x/2,-Ds.y/2,Ds.x,Ds.y),this._removeShadow(p)}_setOpacity(p){this.group&&!this.group._transformDone?p.globalAlpha=this.getObjectOpacity():p.globalAlpha*=this.opacity}_setStrokeStyles(p,Ds){const js=Ds.stroke;js&&(p.lineWidth=Ds.strokeWidth,p.lineCap=Ds.strokeLineCap,p.lineDashOffset=Ds.strokeDashOffset,p.lineJoin=Ds.strokeLineJoin,p.miterLimit=Ds.strokeMiterLimit,te(js)?js.gradientUnits==="percentage"||js.gradientTransform||js.patternTransform?this._applyPatternForTransformedGradient(p,js):(p.strokeStyle=js.toLive(p),this._applyPatternGradientTransform(p,js)):p.strokeStyle=Ds.stroke)}_setFillStyles(p,Ds){let{fill:js}=Ds;js&&(te(js)?(p.fillStyle=js.toLive(p),this._applyPatternGradientTransform(p,js)):p.fillStyle=js)}_setClippingProperties(p){p.globalAlpha=1,p.strokeStyle="transparent",p.fillStyle="#000000"}_setLineDash(p,Ds){Ds&&Ds.length!==0&&(1&Ds.length&&Ds.push(...Ds),p.setLineDash(Ds))}_setShadow(p){if(!this.shadow)return;const Ds=this.shadow,js=this.canvas,Fs=this.getCanvasRetinaScaling(),[Rs,,,Kn]=js?.viewportTransform||O,ro=Rs*Fs,io=Kn*Fs,no=Ds.nonScaling?new ht(1,1):this.getObjectScaling();p.shadowColor=Ds.color,p.shadowBlur=Ds.blur*a.browserShadowBlurConstant*(ro+io)*(no.x+no.y)/4,p.shadowOffsetX=Ds.offsetX*ro*no.x,p.shadowOffsetY=Ds.offsetY*io*no.y}_removeShadow(p){this.shadow&&(p.shadowColor="",p.shadowBlur=p.shadowOffsetX=p.shadowOffsetY=0)}_applyPatternGradientTransform(p,Ds){if(!te(Ds))return{offsetX:0,offsetY:0};const js=Ds.gradientTransform||Ds.patternTransform,Fs=-this.width/2+Ds.offsetX||0,Rs=-this.height/2+Ds.offsetY||0;return Ds.gradientUnits==="percentage"?p.transform(this.width,0,0,this.height,Fs,Rs):p.transform(1,0,0,1,Fs,Rs),js&&p.transform(js[0],js[1],js[2],js[3],js[4],js[5]),{offsetX:Fs,offsetY:Rs}}_renderPaintInOrder(p){this.paintFirst===J?(this._renderStroke(p),this._renderFill(p)):(this._renderFill(p),this._renderStroke(p))}_render(p){}_renderFill(p){this.fill&&(p.save(),this._setFillStyles(p,this),this.fillRule==="evenodd"?p.fill("evenodd"):p.fill(),p.restore())}_renderStroke(p){if(this.stroke&&this.strokeWidth!==0){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(p),p.save(),this.strokeUniform){const Ds=this.getObjectScaling();p.scale(1/Ds.x,1/Ds.y)}this._setLineDash(p,this.strokeDashArray),this._setStrokeStyles(p,this),p.stroke(),p.restore()}}_applyPatternForTransformedGradient(p,Ds){var js;const Fs=this._limitCacheSize(this._getCacheCanvasDimensions()),Rs=vt(),Kn=this.getCanvasRetinaScaling(),ro=Fs.x/this.scaleX/Kn,io=Fs.y/this.scaleY/Kn;Rs.width=Math.ceil(ro),Rs.height=Math.ceil(io);const no=Rs.getContext("2d");no&&(no.beginPath(),no.moveTo(0,0),no.lineTo(ro,0),no.lineTo(ro,io),no.lineTo(0,io),no.closePath(),no.translate(ro/2,io/2),no.scale(Fs.zoomX/this.scaleX/Kn,Fs.zoomY/this.scaleY/Kn),this._applyPatternGradientTransform(no,Ds),no.fillStyle=Ds.toLive(p),no.fill(),p.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),p.scale(Kn*this.scaleX/Fs.zoomX,Kn*this.scaleY/Fs.zoomY),p.strokeStyle=(js=no.createPattern(Rs,"no-repeat"))!==null&&js!==void 0?js:"")}_findCenterFromElement(){return new ht(this.left+this.width/2,this.top+this.height/2)}clone(p){const Ds=this.toObject(p);return this.constructor.fromObject(Ds)}cloneAsImage(p){const Ds=this.toCanvasElement(p);return new(tt.getClass("image"))(Ds)}toCanvasElement(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const Ds=Se(this),js=this.group,Fs=this.shadow,Rs=Math.abs,Kn=p.enableRetinaScaling?_():1,ro=(p.multiplier||1)*Kn,io=p.canvasProvider||(xa=>new fe(xa,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1}));delete this.group,p.withoutTransform&&we(this),p.withoutShadow&&(this.shadow=null),p.viewportTransform&&Me(this,this.getViewportTransform()),this.setCoords();
37const no=vt(),na=this.getBoundingRect(),ca=this.shadow,la=new ht;if(ca){const xa=ca.blur,wa=ca.nonScaling?new ht(1,1):this.getObjectScaling();la.x=2*Math.round(Rs(ca.offsetX)+xa)*Rs(wa.x),la.y=2*Math.round(Rs(ca.offsetY)+xa)*Rs(wa.y)}const ua=na.width+la.x,da=na.height+la.y;no.width=Math.ceil(ua),no.height=Math.ceil(da);const ga=io(no);p.format==="jpeg"&&(ga.backgroundColor="#fff"),this.setPositionByOrigin(new ht(ga.width/2,ga.height/2),M,M);const pa=this.canvas;ga._objects=[this],this.set("canvas",ga),this.setCoords();const ma=ga.toCanvasElement(ro||1,p);return this.set("canvas",pa),this.shadow=Fs,js&&(this.group=js),this.set(Ds),this.setCoords(),ga._objects=[],ga.destroy(),ma}toDataURL(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return _t(this.toCanvasElement(p),p.format||"png",p.quality||1)}isType(){for(var p=arguments.length,Ds=new Array(p),js=0;js<p;js++)Ds[js]=arguments[js];return Ds.includes(this.constructor.type)||Ds.includes(this.type)}complexity(){return 1}toJSON(){return this.toObject()}rotate(p){const{centeredRotation:Ds,originX:js,originY:Fs}=this;if(Ds){const{x:Rs,y:Kn}=this.getRelativeCenterPoint();this.originX=M,this.originY=M,this.left=Rs,this.top=Kn}if(this.set("angle",p),Ds){const{x:Rs,y:Kn}=this.translateToOriginPoint(this.getRelativeCenterPoint(),js,Fs);this.left=Rs,this.top=Kn,this.originX=js,this.originY=Fs}}setOnGroup(){}_setupCompositeOperation(p){this.globalCompositeOperation&&(p.globalCompositeOperation=this.globalCompositeOperation)}dispose(){et.cancelByTarget(this),this.off(),this._set("canvas",void 0),this._cacheCanvas&&m().dispose(this._cacheCanvas),this._cacheCanvas=void 0,this._cacheContext=null}static _fromObject(p){let Ds=i(p,Gs),js=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{extraParam:Fs}=js,Rs=i(js,zs);return Xt(Ws(Ds),Rs).then((Kn=>{const ro=s(s({},Rs),Kn);if(Fs){const{[Fs]:io}=ro;return new this(io,i(ro,[Fs].map(n)))}return new this(ro)}))}static fromObject(p,Ds){return this._fromObject(p,Ds)}};t(Ns,"stateProperties",Ys),t(Ns,"cacheProperties",Vs),t(Ns,"ownDefaults",Hs),t(Ns,"type","FabricObject"),tt.setClass(Ns),tt.setClass(Ns,"object");const Us=($n,p)=>(Ds,js,Fs,Rs)=>{const Kn=p(Ds,js,Fs,Rs);return Kn&&Pe($n,Be(Ds,js,Fs,Rs)),Kn};function qs($n){return(p,Ds,js,Fs)=>{const{target:Rs,originX:Kn,originY:ro}=Ds,io=Rs.getRelativeCenterPoint(),no=Rs.translateToOriginPoint(io,Kn,ro),na=$n(p,Ds,js,Fs);return Rs.setPositionByOrigin(no,Ds.originX,Ds.originY),na}}const Ks=Us(Y,qs((($n,p,Ds,js)=>{const Fs=Xe(p,p.originX,p.originY,Ds,js);if(Ae(p.originX)===Ae(M)||Ae(p.originX)===Ae(j)&&Fs.x<0||Ae(p.originX)===Ae(P)&&Fs.x>0){const{target:Rs}
vendor: 9,758 bytes, line 37
37=p,Kn=Rs.strokeWidth/(Rs.strokeUniform?Rs.scaleX:1),ro=Fe(p)?2:1,io=Rs.width,no=Math.ceil(Math.abs(Fs.x*ro/Rs.scaleX)-Kn);return Rs.set("width",Math.max(no,0)),io!==Rs.width}return!1})));function Js($n,p,Ds,js,Fs){js=js||{};const Rs=this.sizeX||js.cornerSize||Fs.cornerSize,Kn=this.sizeY||js.cornerSize||Fs.cornerSize,ro=js.transparentCorners!==void 0?js.transparentCorners:Fs.transparentCorners,io=ro?J:K,no=!ro&&(js.cornerStrokeColor||Fs.cornerStrokeColor);let na,ca=p,la=Ds;$n.save(),$n.fillStyle=js.cornerColor||Fs.cornerColor||"",$n.strokeStyle=js.cornerStrokeColor||Fs.cornerStrokeColor||"",Rs>Kn?(na=Rs,$n.scale(1,Kn/Rs),la=Ds*Rs/Kn):Kn>Rs?(na=Kn,$n.scale(Rs/Kn,1),ca=p*Kn/Rs):na=Rs,$n.lineWidth=1,$n.beginPath(),$n.arc(ca,la,na/2,0,S,!1),$n[io](),no&&$n.stroke(),$n.restore()}function Zs($n,p,Ds,js,Fs){js=js||{};const Rs=this.sizeX||js.cornerSize||Fs.cornerSize,Kn=this.sizeY||js.cornerSize||Fs.cornerSize,ro=js.transparentCorners!==void 0?js.transparentCorners:Fs.transparentCorners,io=ro?J:K,no=!ro&&(js.cornerStrokeColor||Fs.cornerStrokeColor),na=Rs/2,ca=Kn/2;$n.save(),$n.fillStyle=js.cornerColor||Fs.cornerColor||"",$n.strokeStyle=js.cornerStrokeColor||Fs.cornerStrokeColor||"",$n.lineWidth=1,$n.translate(p,Ds);const la=Fs.getTotalAngle();$n.rotate(xt(la)),$n["".concat(io,"Rect")](-na,-ca,Rs,Kn),no&&$n.strokeRect(-na,-ca,Rs,Kn),$n.restore()}class Qs{constructor(p){t(this,"visible",!0),t(this,"actionName",G),t(this,"angle",0),t(this,"x",0),t(this,"y",0),t(this,"offsetX",0),t(this,"offsetY",0),t(this,"sizeX",0),t(this,"sizeY",0),t(this,"touchSizeX",0),t(this,"touchSizeY",0),t(this,"cursorStyle","crosshair"),t(this,"withConnection",!1),Object.assign(this,p)}shouldActivate(p,Ds,js,Fs){var Rs;let{tl:Kn,tr:ro,br:io,bl:no}=Fs;return((Rs=Ds.canvas)===null||Rs===void 0?void 0:Rs.getActiveObject())===Ds&&Ds.isControlVisible(p)&&_s.isPointInPolygon(js,[Kn,ro,io,no])}getActionHandler(p,Ds,js){return this.actionHandler}getMouseDownHandler(p,Ds,js){return this.mouseDownHandler}getMouseUpHandler(p,Ds,js){return this.mouseUpHandler}cursorStyleHandler(p,Ds,js){return Ds.cursorStyle}getActionName(p,Ds,js){return Ds.actionName}getVisibility(p,Ds){var js,Fs;return(js=(Fs=p._controlsVisibility)===null||Fs===void 0?void 0:Fs[Ds])!==null&&js!==void 0?js:this.visible}setVisibility(p,Ds,js){this.visible=p}positionHandler(p,Ds,js,Fs){return new ht(this.x*p.x+this.offsetX,this.y*p.y+this.offsetY).transform(Ds)}calcCornerCoords(p,Ds,js,Fs,Rs,Kn){const ro=Ot([Mt(js,Fs),Pt({angle:p}),Et((Rs?this.touchSizeX:this.sizeX)||Ds,(Rs?this.touchSizeY:this.sizeY)||Ds)]);return{tl:new ht(-.5,-.5).transform(ro),tr:new ht(.5,-.5).transform(ro),br:new ht(.5,.5).transform(ro),bl:new ht(-.5,.5).transform(ro)}}render(p,Ds,js,Fs,Rs){((Fs=Fs||{}).cornerStyle||Rs.cornerStyle)==="circle"?Js.call(this,p,Ds,js,Fs,Rs):Zs.call(this,p,Ds,js,Fs,Rs)}}const $s=($n,p,Ds)=>Ds.lockRotation?je:p.cursorStyle,ti=Us(I,qs((($n,p,Ds,js)=>{let{target:Fs,ex:Rs,ey:Kn,theta:ro,originX:io,originY:no}=p;const na=Fs.translateToOriginPoint(Fs.getRelativeCenterPoint(),io,no);if(Re(Fs,"lockRotation"))return!1;const ca=Math.atan2(Kn-na.y,Rs-na.x),la=Math.atan2(js-na.y,Ds-na.x);let ua=Ct(la-ca+ro);if(Fs.snapAngle&&Fs.snapAngle>0){const ga=Fs.snapAngle,pa=Fs.snapThreshold||ga,ma=Math.ceil(ua/ga)*ga,xa=Math.floor(ua/ga)*ga;Math.abs(ua-xa)<pa?ua=xa:Math.abs(ua-ma)<pa&&(ua=ma)}ua<0&&(ua=360+ua),ua%=360;const da=Fs.angle!==ua;return Fs.angle=ua,da})));function ei($n,p){const Ds=p.canvas,js=$n[Ds.uniScaleKey];return Ds.uniformScaling&&!js||!Ds.uniformScaling&&js}function si($n,p,Ds){const js=Re($n,"lockScalingX"),Fs=Re($n,"lockScalingY");if(js&&Fs||!p&&(js||Fs)&&Ds||js&&p==="x"||Fs&&p==="y")return!0;const{width:Rs,height:Kn,strokeWidth:ro}=$n;return Rs===0&&ro===0&&p!=="y"||Kn===0&&ro===0&&p!=="x"}const ii=["e","se","s","sw","w","nw","n","ne","e"],ri=($n,p,Ds)=>{const js=ei($n,Ds);if(si(Ds,p.x!==0&&p.y===0?"x":p.x===0&&p.y!==0?"y":"",js))return je;const Fs=Ie(Ds,p);return"".concat(ii[Fs],"-resize")};function ni($n,p,Ds,js){let Fs=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{};const Rs=p.target,Kn=Fs.by,ro=ei($n,Rs);let io,no,na,ca,la,ua;if(si(Rs,Kn,ro))return!1;if(p.gestureScale)no=p.scaleX*p.gestureScale,na=p.scaleY*p.gestureScale;else{if(io=Xe(p,p.originX,p.originY,Ds,js),la=Kn!=="y"?Math.sign(io.x||p.signX||1):1,ua=Kn!=="x"?Math.sign(io.y||p.signY||1):1,p.signX||(p.signX=la),p.signY||(p.signY=ua),Re(Rs,"lockScalingFlip")&&(p.signX!==la||p.signY!==ua))return!1;if(ca=Rs._getTransformedDimensions(),ro&&!Kn){const pa=Math.abs(io.x)+Math.abs(io.y),{original:ma}=p,xa=pa/(Math.abs(ca.x*ma.scaleX/Rs.scaleX)+Math.abs(ca.y*ma.scaleY/Rs.scaleY));no=ma.scaleX*xa,na=ma.scaleY*xa}else no=Math.abs(io.x*Rs.scaleX/ca.x),na=Math.abs(io.y*Rs.scaleY/ca.y);Fe(p)&&(no*=2,na*=2),p.signX!==la&&Kn!=="y"&&(p.originX=Le(p.originX),no*=-1,p.signX=la),p.signY!==ua&&Kn!=="x"&&(p.originY=Le(p.originY),na*=-1,p.signY=ua)}const da=Rs.scaleX,ga=Rs.scaleY;return Kn?(Kn==="x"&&Rs.set(z,no),Kn==="y"&&Rs.set(N,na)):(!Re(Rs,"lockScalingX")&&Rs.set(z,no),!Re(Rs,"lockScalingY")&&Rs.set(N,na)),da!==Rs.scaleX||ga!==Rs.scaleY}const oi=Us(B,qs((($n,p,Ds,js)=>ni($n,p,Ds,js)))),ai=Us(B,qs((($n,p,Ds,js)=>ni($n,p,Ds,js,{by:"x"})))),hi=Us(B,qs((($n,p,Ds,js)=>ni($n,p,Ds,js,{by:"y"})))),ci=["target","ex","ey","skewingSide"],li={x:{counterAxis:"y",scale:z,skew:U,lockSkewing:"lockSkewingX",origin:"originX",flip:"flipX"},y:{counterAxis:"x",scale:N,skew:q,lockSkewing:"lockSkewingY",origin:"originY",flip:"flipY"}},ui=["ns","nesw","ew","nwse"],di=($n,p,Ds)=>{if(p.x!==0&&Re(Ds,"lockSkewingY")||p.y!==0&&Re(Ds,"lockSkewingX"))return je;const js=Ie(Ds,p)%4;return"".concat(ui[js],"-resize")};function gi($n,p,Ds,js,Fs){const{target:Rs}=Ds,{counterAxis:Kn,origin:ro,lockSkewing:io,skew:no,flip:na}=li[$n];if(Re(Rs,io))return!1;const{origin:ca,flip:la}=li[Kn],ua=Ae(Ds[ca])*(Rs[la]?-1:1),da=-Math.sign(ua)*(Rs[na]?-1:1),ga=.5*-((Rs[no]===0&&Xe(Ds,M,M,js,Fs)[$n]>0||Rs[no]>0?1:-1)*da)+.5;return Us(W,qs(((ma,xa,wa,Oa)=>(function(fa,va,Ca){let{target:ba,ex:Ma,ey:Pa,skewingSide:qa}=va,Aa=i(va,ci);const{skew:Da}=li[fa],$a=Ca.subtract(new ht(Ma,Pa)).divide(new ht(ba.scaleX,ba.scaleY))[fa],Qa=ba[Da],Za=Aa[Da],th=Math.tan(xt(Za)),vh=fa==="y"?ba._getTransformedDimensions({scaleX:1,scaleY:1,skewX:0}).x:ba._getTransformedDimensions({scaleX:1,scaleY:1}).y,Ja=2*$a*qa/Math.max(vh,1)+th,yh=Ct(Math.atan(Ja));ba.set(Da,yh);const Ch=Qa!==ba[Da];if(Ch&&fa==="y"){const{skewX:Th,scaleX:_h}=ba,bh=ba._getTransformedDimensions({skewY:Qa}),wh=ba._getTransformedDimensions(),xh=Th!==0?bh.x/wh.x:1;xh!==1&&ba.set(z,xh*_h)}return Ch})($n,xa,new ht(wa,Oa)))))(p,s(s({},Ds),{},{[ro]:ga,skewingSide:da}),js,Fs)}const fi=($n,p,Ds,js)=>gi("x",$n,p,Ds,js),pi=($n,p,Ds,js)=>gi("y",$n,p,Ds,js);function mi($n,p){return $n[p.canvas.altActionKey]}const vi=($n,p,Ds)=>{const js=mi($n,Ds);return p.x===0?js?U:N:p.y===0?js?q:z:""},yi=($n,p,Ds)=>mi($n,Ds)?di(0,p,Ds):ri($n,p,Ds),_i=($n,p,Ds,js)=>mi($n,p.target)?pi($n,p,Ds,js):ai($n,p,Ds,js),xi=($n,p,Ds,js)=>mi($n,p.target)?fi($n,p,Ds,js):hi($n,p,Ds,js),Ci=()=>({ml:new Qs({x:-.5,y:0,cursorStyleHandler:yi,actionHandler:_i,getActionName:vi}),mr:new Qs({x:.5,y:0,cursorStyleHandler:yi,actionHandler:_i,getActionName:vi}),mb:new Qs({x:0,y:.5,cursorStyleHandler:yi,actionHandler:xi,getActionName:vi}),mt:new Qs({x:0,y:-.5,cursorStyleHandler:yi,actionHandler:xi,getActionName:vi}),tl:new Qs({x:-.5,y:-.5,cursorStyleHandler:ri,actionHandler:oi}),tr:new Qs({x:.5,y:-.5,cursorStyleHandler:ri,actionHandler:oi}),bl:new Qs({x:-.5,y:.5,cursorStyleHandler:ri,actionHandler:oi}),br:new Qs({x:.5,y:.5,cursorStyleHandler:ri,actionHandler:oi}),mtr:new Qs({x:0,y:-.5,actionHandler:ti,cursorStyleHandler:$s,offsetY:-40,withConnection:!0,actionName:X})}),bi=()=>({mr:new Qs({x:.5,y:0,actionHandler:Ks,cursorStyleHandler:yi,actionName:Y}),ml:new Qs({x:-.5,y:0,actionHandler:Ks,cursorStyleHandler:yi,actionName:Y})}),wi=()=>s(s({},Ci()),bi());class Si extends Ns{static getDefaults(){return s(s({},super.getDefaults()),Si.ownDefaults)}constructor(p){super(),Object.assign(this,this.constructor.createControls(),Si.ownDefaults),this.setOptions(p)}static createControls(){return{controls:Ci()}}_updateCacheCanvas(){const p=this.canvas;if(this.noScaleCache&&p&&p._currentTransform){const Ds=p._currentTransform,js=Ds.target,Fs=Ds.action;if(this===js&&Fs&&Fs.startsWith(G))return!1}return super._updateCacheCanvas()}getActiveControl(){const p=this.__corner;return p?{key:p,control:this.controls[p],coord:this.oCoords[p]}:void 0}findControl(p){let Ds=arguments.length>1&&arguments[1]!==void 0&&arguments[1];if(!this.hasControls||!this.canvas)return;this.__corner=void 0;const js=Object.entries(this.oCoords);for(let Fs=js.length-1;Fs>=0;Fs--){const[Rs,Kn]=js[Fs],ro=this.controls[Rs];if(ro.shouldActivate(Rs,this,p,Ds?Kn.touchCorner:Kn.corner))return this.__corner=Rs,{key:Rs,control:ro,coord:this.oCoords[Rs]}}}calcOCoords(){const p=this.getViewportTransform(),Ds=this.getCenterPoint(),js=Mt(Ds.x,Ds.y),Fs=Pt({angle:this.getTotalAngle()-(this.group&&this.flipX?180:0)}),Rs=Tt(js,Fs),Kn=Tt(p,Rs),ro=Tt(Kn,[1/p[0],0,0,1/p[3],0,0]),io=this.group?Dt(this.calcTransformMatrix()):void 0;io&&(io.scaleX=Math.abs(io.scaleX),io.scaleY=Math.abs(io.scaleY));const no=this._calculateCurrentDimensions(io),na={};return this.forEachControl(((ca,la)=>{const ua=ca.positionHandler(no,ro,this,ca);na[la]=Object.assign(ua,this._calcCornerCoords(ca,ua))})),na}_calcCornerCoords(p,Ds){const js=this.getTotalAngle();return{corner:p.calcCornerCoords(js,this.cornerSize,Ds.x,Ds.y,!1,this),touchCorner:p.calcCornerCoords(js,this.touchCornerSize,Ds.x,Ds.y,!0,this)}}setCoords(){super.setCoords(),this.canvas&&(this.oCoords=this.calcOCoords())}forEachControl(p){for(const Ds in this.controls)p(this.controls[Ds],Ds,this)}
vendor: 35,320 bytes, lines 37-41
37drawSelectionBackground(p){if(!this.selectionBackgroundColor||this.canvas&&this.canvas._activeObject!==this)return;p.save();const Ds=this.getRelativeCenterPoint(),js=this._calculateCurrentDimensions(),Fs=this.getViewportTransform();p.translate(Ds.x,Ds.y),p.scale(1/Fs[0],1/Fs[3]),p.rotate(xt(this.angle)),p.fillStyle=this.selectionBackgroundColor,p.fillRect(-js.x/2,-js.y/2,js.x,js.y),p.restore()}strokeBorders(p,Ds){p.strokeRect(-Ds.x/2,-Ds.y/2,Ds.x,Ds.y)}_drawBorders(p,Ds){let js=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const Fs=s({hasControls:this.hasControls,borderColor:this.borderColor,borderDashArray:this.borderDashArray},js);p.save(),p.strokeStyle=Fs.borderColor,this._setLineDash(p,Fs.borderDashArray),this.strokeBorders(p,Ds),Fs.hasControls&&this.drawControlsConnectingLines(p,Ds),p.restore()}_renderControls(p){let Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const{hasBorders:js,hasControls:Fs}=this,Rs=s({hasBorders:js,hasControls:Fs},Ds),Kn=this.getViewportTransform(),ro=Rs.hasBorders,io=Rs.hasControls,no=Tt(Kn,this.calcTransformMatrix()),na=Dt(no);p.save(),p.translate(na.translateX,na.translateY),p.lineWidth=1*this.borderScaleFactor,this.group===this.parent&&(p.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(na.angle-=180),p.rotate(xt(this.group?na.angle:this.angle)),ro&&this.drawBorders(p,na,Ds),io&&this.drawControls(p,Ds),p.restore()}drawBorders(p,Ds,js){let Fs;if(js&&js.forActiveSelection||this.group){const Rs=Te(this.width,this.height,Lt(Ds)),Kn=this.isStrokeAccountedForInDimensions()?ct:(this.strokeUniform?new ht().scalarAdd(this.canvas?this.canvas.getZoom():1):new ht(Ds.scaleX,Ds.scaleY)).scalarMultiply(this.strokeWidth);Fs=Rs.add(Kn).scalarAdd(this.borderScaleFactor).scalarAdd(2*this.padding)}else Fs=this._calculateCurrentDimensions().scalarAdd(this.borderScaleFactor);this._drawBorders(p,Fs,js)}drawControlsConnectingLines(p,Ds){let js=!1;p.beginPath(),this.forEachControl(((Fs,Rs)=>{Fs.withConnection&&Fs.getVisibility(this,Rs)&&(js=!0,p.moveTo(Fs.x*Ds.x,Fs.y*Ds.y),p.lineTo(Fs.x*Ds.x+Fs.offsetX,Fs.y*Ds.y+Fs.offsetY))})),js&&p.stroke()}drawControls(p){let Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};p.save();const js=this.getCanvasRetinaScaling(),{cornerStrokeColor:Fs,cornerDashArray:Rs,cornerColor:Kn}=this,ro=s({cornerStrokeColor:Fs,cornerDashArray:Rs,cornerColor:Kn},Ds);p.setTransform(js,0,0,js,0,0),p.strokeStyle=p.fillStyle=ro.cornerColor,this.transparentCorners||(p.strokeStyle=ro.cornerStrokeColor),this._setLineDash(p,ro.cornerDashArray),this.forEachControl(((io,no)=>{if(io.getVisibility(this,no)){const na=this.oCoords[no];io.render(p,na.x,na.y,ro,this)}})),p.restore()}isControlVisible(p){return this.controls[p]&&this.controls[p].getVisibility(this,p)}setControlVisible(p,Ds){this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[p]=Ds}setControlsVisibility(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Object.entries(p).forEach((Ds=>{let[js,Fs]=Ds;return this.setControlVisible(js,Fs)}))}clearContextTop(p){if(!this.canvas)return;const Ds=this.canvas.contextTop;if(!Ds)return;const js=this.canvas.viewportTransform;Ds.save(),Ds.transform(js[0],js[1],js[2],js[3],js[4],js[5]),this.transform(Ds);const Fs=this.width+4,Rs=this.height+4;return Ds.clearRect(-Fs/2,-Rs/2,Fs,Rs),p||Ds.restore(),Ds}onDeselect(p){return!1}onSelect(p){return!1}shouldStartDragging(p){return!1}onDragStart(p){return!1}canDrop(p){return!1}renderDragSourceEffect(p){}renderDropTargetEffect(p){}}function Ti($n,p){return p.forEach((Ds=>{Object.getOwnPropertyNames(Ds.prototype).forEach((js=>{js!=="constructor"&&Object.defineProperty($n.prototype,js,Object.getOwnPropertyDescriptor(Ds.prototype,js)||Object.create(null))}))})),$n}t(Si,"ownDefaults",{noScaleCache:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,cornerSize:13,touchCornerSize:24,transparentCorners:!0,cornerColor:"rgb(178,204,255)",cornerStrokeColor:"",cornerStyle:"rect",cornerDashArray:null,hasControls:!0,borderColor:"rgb(178,204,255)",borderDashArray:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,hasBorders:!0,selectionBackgroundColor:"",selectable:!0,evented:!0,perPixelTargetFind:!1,activeOn:"down",hoverCursor:null,moveCursor:null});class Oi extends Si{}Ti(Oi,[Ye]),tt.setClass(Oi),tt.setClass(Oi,"object");const ki=($n,p,Ds,js)=>{const Fs=2*(js=Math.round(js))+1,{data:Rs}=$n.getImageData(p-js,Ds-js,Fs,Fs);for(let Kn=3;Kn<Rs.length;Kn+=4)if(Rs[Kn]>0)return!1;return!0};class Di{constructor(p){this.options=p,this.strokeProjectionMagnitude=this.options.strokeWidth/2,this.scale=new ht(this.options.scaleX,this.options.scaleY),this.strokeUniformScalar=this.options.strokeUniform?new ht(1/this.options.scaleX,1/this.options.scaleY):new ht(1,1)}createSideVector(p,Ds){const js=ls(p,Ds);return this.options.strokeUniform?js.multiply(this.scale):js}projectOrthogonally(p,Ds,js){return this.applySkew(p.add(this.calcOrthogonalProjection(p,Ds,js)))}isSkewed(){return this.options.skewX!==0||this.options.skewY!==0}applySkew(p){const Ds=new ht(p);return Ds.y+=Ds.x*Math.tan(xt(this.options.skewY)),Ds.x+=Ds.y*Math.tan(xt(this.options.skewX)),Ds}scaleUnitVector(p,Ds){return p.multiply(this.strokeUniformScalar).scalarMultiply(Ds)}}const Mi=new ht;class Pi extends Di{static getOrthogonalRotationFactor(p,Ds){const js=Ds?ds(p,Ds):gs(p);return Math.abs(js)<w?-1:1}constructor(p,Ds,js,Fs){super(Fs),t(this,"AB",void 0),t(this,"AC",void 0),t(this,"alpha",void 0),t(this,"bisector",void 0),this.A=new ht(p),this.B=new ht(Ds),this.C=new ht(js),this.AB=this.createSideVector(this.A,this.B),this.AC=this.createSideVector(this.A,this.C),this.alpha=ds(this.AB,this.AC),this.bisector=fs(cs(this.AB.eq(Mi)?this.AC:this.AB,this.alpha/2))}calcOrthogonalProjection(p,Ds){let js=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.strokeProjectionMagnitude;const Fs=this.createSideVector(p,Ds),Rs=ps(Fs),Kn=Pi.getOrthogonalRotationFactor(Rs,this.bisector);return this.scaleUnitVector(Rs,js*Kn)}projectBevel(){const p=[];return(this.alpha%S==0?[this.B]:[this.B,this.C]).forEach((Ds=>{p.push(this.projectOrthogonally(this.A,Ds)),p.push(this.projectOrthogonally(this.A,Ds,-this.strokeProjectionMagnitude))})),p}projectMiter(){const p=[],Ds=Math.abs(this.alpha),js=1/Math.sin(Ds/2),Fs=this.scaleUnitVector(this.bisector,-this.strokeProjectionMagnitude*js),Rs=this.options.strokeUniform?us(this.scaleUnitVector(this.bisector,this.options.strokeMiterLimit)):this.options.strokeMiterLimit;return us(Fs)/this.strokeProjectionMagnitude<=Rs&&p.push(this.applySkew(this.A.add(Fs))),p.push(...this.projectBevel()),p}projectRoundNoSkew(p,Ds){const js=[],Fs=new ht(Pi.getOrthogonalRotationFactor(this.bisector),Pi.getOrthogonalRotationFactor(new ht(this.bisector.y,this.bisector.x)));return[new ht(1,0).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(Fs),new ht(0,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(Fs)].forEach((Rs=>{ys(Rs,p,Ds)&&js.push(this.A.add(Rs))})),js}projectRoundWithSkew(p,Ds){const js=[],{skewX:Fs,skewY:Rs,scaleX:Kn,scaleY:ro,strokeUniform:io}=this.options,no=new ht(Math.tan(xt(Fs)),Math.tan(xt(Rs))),na=this.strokeProjectionMagnitude,ca=io?na/ro/Math.sqrt(1/ro**2+1/Kn**2*no.y**2):na/Math.sqrt(1+no.y**2),la=new ht(Math.sqrt(Math.max(na**2-ca**2,0)),ca),ua=io?na/Math.sqrt(1+no.x**2*(1/ro)**2/(1/Kn+1/Kn*no.x*no.y)**2):na/Math.sqrt(1+no.x**2/(1+no.x*no.y)**2),da=new ht(ua,Math.sqrt(Math.max(na**2-ua**2,0)));return[da,da.scalarMultiply(-1),la,la.scalarMultiply(-1)].map((ga=>this.applySkew(io?ga.multiply(this.strokeUniformScalar):ga))).forEach((ga=>{ys(ga,p,Ds)&&js.push(this.applySkew(this.A).add(ga))})),js}projectRound(){const p=[];p.push(...this.projectBevel());const Ds=this.alpha%S==0,js=this.applySkew(this.A),Fs=p[Ds?0:2].subtract(js),Rs=p[Ds?1:0].subtract(js),Kn=Ds?this.applySkew(this.AB.scalarMultiply(-1)):this.applySkew(this.bisector.multiply(this.strokeUniformScalar).scalarMultiply(-1)),ro=ms(Fs,Kn)>0,io=ro?Fs:Rs,no=ro?Rs:Fs;return this.isSkewed()?p.push(...this.projectRoundWithSkew(io,no)):p.push(...this.projectRoundNoSkew(io,no)),p}projectPoints(){switch(this.options.strokeLineJoin){case"miter":return this.projectMiter();case"round":return this.projectRound();default:return this.projectBevel()}}project(){return this.projectPoints().map((p=>({originPoint:this.A,projectedPoint:p,angle:this.alpha,bisector:this.bisector})))}}class Ei extends Di{constructor(p,Ds,js){super(js),this.A=new ht(p),this.T=new ht(Ds)}calcOrthogonalProjection(p,Ds){let js=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.strokeProjectionMagnitude;const Fs=this.createSideVector(p,Ds);return this.scaleUnitVector(ps(Fs),js)}projectButt(){return[this.projectOrthogonally(this.A,this.T,this.strokeProjectionMagnitude),this.projectOrthogonally(this.A,this.T,-this.strokeProjectionMagnitude)]}projectRound(){const p=[];if(!this.isSkewed()&&this.A.eq(this.T)){const Ds=new ht(1,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar);p.push(this.applySkew(this.A.add(Ds)),this.applySkew(this.A.subtract(Ds)))}else p.push(...new Pi(this.A,this.T,this.T,this.options).projectRound());return p}projectSquare(){const p=[];if(this.A.eq(this.T)){const Ds=new ht(1,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar);p.push(this.A.add(Ds),this.A.subtract(Ds))}else{const Ds=this.calcOrthogonalProjection(this.A,this.T,this.strokeProjectionMagnitude),js=this.scaleUnitVector(fs(this.createSideVector(this.A,this.T)),-this.strokeProjectionMagnitude),Fs=this.A.add(js);p.push(Fs.add(Ds),Fs.subtract(Ds))}return p.map((Ds=>this.applySkew(Ds)))}projectPoints(){switch(this.options.strokeLineCap){case"round":return this.projectRound();case"square":return this.projectSquare();default:return this.projectButt()}}project(){return this.projectPoints().map((p=>({originPoint:this.A,projectedPoint:p})))}}const Ai=function($n,p){let Ds=arguments.length>2&&arguments[2]!==void 0&&arguments[2];const js=[];if($n.length===0)return js;const Fs=$n.reduce(((Rs,Kn)=>(Rs[Rs.length-1].eq(Kn)||Rs.push(new ht(Kn)),Rs)),[new ht($n[0])]);if(Fs.length===1)Ds=!0;else if(!Ds){const Rs=Fs[0],Kn=((ro,io)=>{for(let no=ro.length-1;no>=0;no--)if(io(ro[no],no,ro))return no;return-1})(Fs,(ro=>!ro.eq(Rs)));Fs.splice(Kn+1)}return Fs.forEach(((Rs,Kn,ro)=>{let io,no;Kn===0?(no=ro[1],io=Ds?Rs:ro[ro.length-1]):Kn===ro.length-1?(io=ro[Kn-1],no=Ds?Rs:ro[0]):(io=ro[Kn-1],no=ro[Kn+1]),Ds&&ro.length===1?js.push(...new Ei(Rs,Rs,p).project()):!Ds||Kn!==0&&Kn!==ro.length-1?js.push(...new Pi(Rs,io,no,p).project()):js.push(...new Ei(Rs,Kn===0?no:io,p).project())})),js},ji=$n=>$n.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">"),Fi=$n=>{const p=[];for(let Ds,js=0;js<$n.length;js++)(Ds=Li($n,js))!==!1&&p.push(Ds);return p},Li=($n,p)=>{const Ds=$n.charCodeAt(p);if(isNaN(Ds))return"";if(Ds<55296||Ds>57343)return $n.charAt(p);if(55296<=Ds&&Ds<=56319){if($n.length<=p+1)throw"High surrogate without following low surrogate";const Fs=$n.charCodeAt(p+1);if(56320>Fs||Fs>57343)throw"High surrogate without following low surrogate";return $n.charAt(p)+$n.charAt(p+1)}if(p===0)throw"Low surrogate without preceding high surrogate";const js=$n.charCodeAt(p-1);if(55296>js||js>56319)throw"Low surrogate without preceding high surrogate";return!1};var Ri=Object.freeze({__proto__:null,capitalize:function($n){let p=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return"".concat($n.charAt(0).toUpperCase()).concat(p?$n.slice(1):$n.slice(1).toLowerCase())},escapeXml:ji,graphemeSplit:Fi});const Bi=function($n,p){let Ds=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return $n.fill!==p.fill||$n.stroke!==p.stroke||$n.strokeWidth!==p.strokeWidth||$n.fontSize!==p.fontSize||$n.fontFamily!==p.fontFamily||$n.fontWeight!==p.fontWeight||$n.fontStyle!==p.fontStyle||$n.textBackgroundColor!==p.textBackgroundColor||$n.deltaY!==p.deltaY||Ds&&($n.overline!==p.overline||$n.underline!==p.underline||$n.linethrough!==p.linethrough)},Ii=($n,p)=>{const Ds=p.split(` 38`),js=[];let Fs=-1,Rs={};$n=Ws($n);for(let Kn=0;Kn<Ds.length;Kn++){const ro=Fi(Ds[Kn]);if($n[Kn])for(let io=0;io<ro.length;io++){Fs++;const no=$n[Kn][io];no&&Object.keys(no).length>0&&(Bi(Rs,no,!0)?js.push({start:Fs,end:Fs+1,style:no}):js[js.length-1].end++),Rs=no||{}}else Fs+=ro.length,Rs={}}return js},Xi=($n,p)=>{if(!Array.isArray($n))return Ws($n);const Ds=p.split(L),js={};let Fs=-1,Rs=0;for(let Kn=0;Kn<Ds.length;Kn++){const ro=Fi(Ds[Kn]);for(let io=0;io<ro.length;io++)Fs++,$n[Rs]&&$n[Rs].start<=Fs&&Fs<$n[Rs].end&&(js[Kn]=js[Kn]||{},js[Kn][io]=s({},$n[Rs].style),Fs===$n[Rs].end-1&&Rs++)}return js},Wi=["display","transform",K,"fill-opacity","fill-rule","opacity",J,"stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"];function Yi($n,p){const Ds=$n.nodeName,js=$n.getAttribute("class"),Fs=$n.getAttribute("id"),Rs="(?![a-zA-Z\\-]+)";let Kn;if(Kn=new RegExp("^"+Ds,"i"),p=p.replace(Kn,""),Fs&&p.length&&(Kn=new RegExp("#"+Fs+Rs,"i"),p=p.replace(Kn,"")),js&&p.length){const ro=js.split(" ");for(let io=ro.length;io--;)Kn=new RegExp("\\."+ro[io]+Rs,"i"),p=p.replace(Kn,"")}return p.length===0}function Vi($n,p){let Ds=!0;const js=Yi($n,p.pop());return js&&p.length&&(Ds=(function(Fs,Rs){let Kn,ro=!0;for(;Fs.parentElement&&Fs.parentElement.nodeType===1&&Rs.length;)ro&&(Kn=Rs.pop()),ro=Yi(Fs=Fs.parentElement,Kn);return Rs.length===0})($n,p)),js&&Ds&&p.length===0}const Hi=$n=>{var p;return(p=Ps[$n])!==null&&p!==void 0?p:$n},Gi=new RegExp("(".concat(ks,")"),"gi"),zi=$n=>$n.replace(Gi," $1 ").replace(/,/gi," ").replace(/\s+/gi," ");var Ni,Ui,qi,Ki,Ji,Zi,Qi;const $i="(".concat(ks,")"),tr=String.raw(Ni||(Ni=r(["(skewX)(",")"],["(skewX)\\(","\\)"])),$i),er=String.raw(Ui||(Ui=r(["(skewY)(",")"],["(skewY)\\(","\\)"])),$i),sr=String.raw(qi||(qi=r(["(rotate)(","(?: "," ",")?)"],["(rotate)\\(","(?: "," ",")?\\)"])),$i,$i,$i),ir=String.raw(Ki||(Ki=r(["(scale)(","(?: ",")?)"],["(scale)\\(","(?: ",")?\\)"])),$i,$i),rr=String.raw(Ji||(Ji=r(["(translate)(","(?: ",")?)"],["(translate)\\(","(?: ",")?\\)"])),$i,$i),nr=String.raw(Zi||(Zi=r(["(matrix)("," "," "," "," "," ",")"],["(matrix)\\("," "," "," "," "," ","\\)"])),$i,$i,$i,$i,$i,$i),or="(?:".concat(nr,"|").concat(rr,"|").concat(sr,"|").concat(ir,"|").concat(tr,"|").concat(er,")"),ar="(?:".concat(or,"*)"),hr=String.raw(Qi||(Qi=r(["^s*(?:","?)s*$"],["^\\s*(?:","?)\\s*$"])),ar),cr=new RegExp(hr),lr=new RegExp(or),ur=new RegExp(or,"g");function dr($n){const p=[];if(!($n=zi($n).replace(/\s*([()])\s*/gi,"$1"))||$n&&!cr.test($n))return[...O];for(const Ds of $n.matchAll(ur)){const js=lr.exec(Ds[0]);if(!js)continue;let Fs=O;const Rs=js.filter((da=>!!da)),[,Kn,...ro]=Rs,[io,no,na,ca,la,ua]=ro.map((da=>parseFloat(da)));switch(Kn){case"translate":Fs=Mt(io,no);break;case X:Fs=Pt({angle:io},{x:no,y:na});break;case G:Fs=Et(io,no);break;case U:Fs=jt(io);break;case q:Fs=Ft(io);break;case"matrix":Fs=[io,no,na,ca,la,ua]}p.push(Fs)}return Ot(p)}function gr($n,p,Ds,js){const Fs=Array.isArray(p);let Rs,Kn=p;if($n!==K&&$n!==J||p!==F){if($n==="strokeUniform")return p==="non-scaling-stroke";if($n==="strokeDashArray")Kn=p===F?null:p.replace(/,/g," ").split(/\s+/).map(parseFloat);else if($n==="transformMatrix")Kn=Ds&&Ds.transformMatrix?Tt(Ds.transformMatrix,dr(p)):dr(p);else if($n==="visible")Kn=p!==F&&p!=="hidden",Ds&&Ds.visible===!1&&(Kn=!1);else if($n==="opacity")Kn=parseFloat(p),Ds&&Ds.opacity!==void 0&&(Kn*=Ds.opacity);else if($n==="textAnchor")Kn=p==="start"?P:p==="end"?j:M;else if($n==="charSpacing")Rs=Jt(p,js)/js*1e3;else if($n==="paintFirst"){const ro=p.indexOf(K),io=p.indexOf(J);Kn=K,(ro>-1&&io>-1&&io<ro||ro===-1&&io>-1)&&(Kn=J)}else{if($n==="href"||$n==="xlink:href"||$n==="font")return p;if($n==="imageSmoothing")return p==="optimizeQuality";Rs=Fs?p.map(Jt):Jt(p,js)}}else Kn="";return!Fs&&isNaN(Rs)?Kn:Rs}function fr($n,p){const Ds=$n.match(Ms);if(!Ds)return;const js=Ds[1],Fs=Ds[3],Rs=Ds[4],Kn=Ds[5],ro=Ds[6];js&&(p.fontStyle=js),Fs&&(p.fontWeight=isNaN(parseFloat(Fs))?Fs:parseFloat(Fs)),Rs&&(p.fontSize=Jt(Rs)),ro&&(p.fontFamily=ro),Kn&&(p.lineHeight=Kn==="normal"?1:Kn)}function pr($n){const p={},Ds=$n.getAttribute("style");return Ds&&(typeof Ds=="string"?(function(js,Fs){js.replace(/;\s*$/,"").split(";").forEach((Rs=>{const[Kn,ro]=Rs.split(":");Fs[Kn.trim().toLowerCase()]=ro.trim()}))})(Ds,p):(function(js,Fs){Object.entries(js).forEach((Rs=>{let[Kn,ro]=Rs;ro!==void 0&&(Fs[Kn.toLowerCase()]=ro)}))})(Ds,p)),p}const mr={stroke:"strokeOpacity",fill:"fillOpacity"};function vr($n,p,Ds){if(!$n)return{};let js,Fs={},Rs=k;$n.parentNode&&Ls.test($n.parentNode.nodeName)&&(Fs=vr($n.parentElement,p,Ds),Fs.fontSize&&(js=Rs=Jt(Fs.fontSize)));const Kn=s(s(s({},p.reduce(((no,na)=>{const ca=$n.getAttribute(na);return ca&&(no[na]=ca),no}),{})),(function(no){let na=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},ca={};for(const la in na)Vi(no,la.split(" "))&&(ca=s(s({},ca),na[la]));return ca})($n,Ds)),pr($n));Kn[As]&&$n.setAttribute(As,Kn[As]),Kn[Es]&&(js=Jt(Kn[Es],Rs),Kn[Es]="".concat(js));const ro={};for(const no in Kn){const na=Hi(no),ca=gr(na,Kn[no],Fs,js);ro[na]=ca}ro&&ro.font&&fr(ro.font,ro);const io=s(s({},Fs),ro);return Ls.test($n.nodeName)?io:(function(no){const na=Oi.getDefaults();return Object.entries(mr).forEach((ca=>{let[la,ua]=ca;if(no[ua]===void 0||no[la]==="")return;if(no[la]===void 0){if(!na[la])return;no[la]=na[la]}if(no[la].indexOf("url(")===0)return;const da=new qt(no[la]);no[la]=da.setAlpha(Kt(da.getAlpha()*no[ua],2)).toRgba()})),no})(io)}const yr=["left","top","width","height","visible"],_r=["rx","ry"];class xr extends Oi{static getDefaults(){return s(s({},super.getDefaults()),xr.ownDefaults)}constructor(p){super(),Object.assign(this,xr.ownDefaults),this.setOptions(p),this._initRxRy()}_initRxRy(){const{rx:p,ry:Ds}=this;p&&!Ds?this.ry=p:Ds&&!p&&(this.rx=Ds)}_render(p){const{width:Ds,height:js}=this,Fs=-Ds/2,Rs=-js/2,Kn=this.rx?Math.min(this.rx,Ds/2):0,ro=this.ry?Math.min(this.ry,js/2):0,io=Kn!==0||ro!==0;p.beginPath(),p.moveTo(Fs+Kn,Rs),p.lineTo(Fs+Ds-Kn,Rs),io&&p.bezierCurveTo(Fs+Ds-D*Kn,Rs,Fs+Ds,Rs+D*ro,Fs+Ds,Rs+ro),p.lineTo(Fs+Ds,Rs+js-ro),io&&p.bezierCurveTo(Fs+Ds,Rs+js-D*ro,Fs+Ds-D*Kn,Rs+js,Fs+Ds-Kn,Rs+js),p.lineTo(Fs+Kn,Rs+js),io&&p.bezierCurveTo(Fs+D*Kn,Rs+js,Fs,Rs+js-D*ro,Fs,Rs+js-ro),p.lineTo(Fs,Rs+ro),io&&p.bezierCurveTo(Fs,Rs+D*ro,Fs+D*Kn,Rs,Fs+Kn,Rs),p.closePath(),this._renderPaintInOrder(p)}toObject(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return super.toObject([..._r,...p])}_toSVG(){const{width:p,height:Ds,rx:js,ry:Fs}=this;return["<rect ","COMMON_PARTS",'x="'.concat(-p/2,'" y="').concat(-Ds/2,'" rx="').concat(js,'" ry="').concat(Fs,'" width="').concat(p,'" height="').concat(Ds,`" /> 39`)]}static async fromElement(p,Ds,js){const Fs=vr(p,this.ATTRIBUTE_NAMES,js),{left:Rs=0,top:Kn=0,width:ro=0,height:io=0,visible:no=!0}=Fs,na=i(Fs,yr);return new this(s(s(s({},Ds),na),{},{left:Rs,top:Kn,width:ro,height:io,visible:!!(no&&ro&&io)}))}}t(xr,"type","Rect"),t(xr,"cacheProperties",[...Vs,..._r]),t(xr,"ownDefaults",{rx:0,ry:0}),t(xr,"ATTRIBUTE_NAMES",[...Wi,"x","y","rx","ry","width","height"]),tt.setClass(xr),tt.setSVGClass(xr);const Cr="initialization",br="added",wr="removed",Sr="imperative",Tr=($n,p)=>{const{strokeUniform:Ds,strokeWidth:js,width:Fs,height:Rs,group:Kn}=p,ro=Kn&&Kn!==$n?Oe(Kn.calcTransformMatrix(),$n.calcTransformMatrix()):null,io=ro?p.getRelativeCenterPoint().transform(ro):p.getRelativeCenterPoint(),no=!p.isStrokeAccountedForInDimensions(),na=Ds&&no?De(new ht(js,js),void 0,$n.calcTransformMatrix()):ct,ca=!Ds&&no?js:0,la=Te(Fs+ca,Rs+ca,Ot([ro,p.calcOwnMatrix()],!0)).add(na).scalarDivide(2);return[io.subtract(la),io.add(la)]};class Or{calcLayoutResult(p,Ds){if(this.shouldPerformLayout(p))return this.calcBoundingBox(Ds,p)}shouldPerformLayout(p){let{type:Ds,prevStrategy:js,strategy:Fs}=p;return Ds===Cr||Ds===Sr||!!js&&Fs!==js}shouldLayoutClipPath(p){let{type:Ds,target:{clipPath:js}}=p;return Ds!==Cr&&js&&!js.absolutePositioned}getInitialSize(p,Ds){return Ds.size}calcBoundingBox(p,Ds){const{type:js,target:Fs}=Ds;if(js===Sr&&Ds.overrides)return Ds.overrides;if(p.length===0)return;const{left:Rs,top:Kn,width:ro,height:io}=_e(p.map((ca=>Tr(Fs,ca))).reduce(((ca,la)=>ca.concat(la)),[])),no=new ht(ro,io),na=new ht(Rs,Kn).add(no.scalarDivide(2));if(js===Cr){const ca=this.getInitialSize(Ds,{size:no,center:na});return{center:na,relativeCorrection:new ht(0,0),size:ca}}return{center:na.transform(Fs.calcOwnMatrix()),size:no}}}t(Or,"type","strategy");class kr extends Or{shouldPerformLayout(p){return!0}}t(kr,"type","fit-content"),tt.setClass(kr);const Dr=["strategy"],Mr=["target","strategy","bubbles","prevStrategy"],Pr="layoutManager";class Er{constructor(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:new kr;t(this,"strategy",void 0),this.strategy=p,this._subscriptions=new Map}performLayout(p){const Ds=s(s({bubbles:!0,strategy:this.strategy},p),{},{prevStrategy:this._prevLayoutStrategy,stopPropagation(){this.bubbles=!1}});this.onBeforeLayout(Ds);const js=this.getLayoutResult(Ds);js&&this.commitLayout(Ds,js),this.onAfterLayout(Ds,js),this._prevLayoutStrategy=Ds.strategy}attachHandlers(p,Ds){const{target:js}=Ds;return[Z,R,Y,I,B,W,H,V].map((Fs=>p.on(Fs,(Rs=>this.performLayout(Fs===Z?{type:"object_modified",trigger:Fs,e:Rs,target:js}:{type:"object_modifying",trigger:Fs,e:Rs,target:js})))))}subscribe(p,Ds){this.unsubscribe(p,Ds);const js=this.attachHandlers(p,Ds);this._subscriptions.set(p,js)}unsubscribe(p,Ds){(this._subscriptions.get(p)||[]).forEach((js=>js())),this._subscriptions.delete(p)}unsubscribeTargets(p){p.targets.forEach((Ds=>this.unsubscribe(Ds,p)))}subscribeTargets(p){p.targets.forEach((Ds=>this.subscribe(Ds,p)))}onBeforeLayout(p){const{target:Ds,type:js}=p,{canvas:Fs}=Ds;if(js===Cr||js===br?this.subscribeTargets(p):js===wr&&this.unsubscribeTargets(p),Ds.fire("layout:before",{context:p}),Fs&&Fs.fire("object:layout:before",{target:Ds,context:p}),js===Sr&&p.deep){const Rs=i(p,Dr);Ds.forEachObject((Kn=>Kn.layoutManager&&Kn.layoutManager.performLayout(s(s({},Rs),{},{bubbles:!1,target:Kn}))))}}getLayoutResult(p){const{target:Ds,strategy:js,type:Fs}=p,Rs=js.calcLayoutResult(p,Ds.getObjects());if(!Rs)return;const Kn=Fs===Cr?new ht:Ds.getRelativeCenterPoint(),{center:ro,correction:io=new ht,relativeCorrection:no=new ht}=Rs,na=Kn.subtract(ro).add(io).transform(Fs===Cr?O:St(Ds.calcOwnMatrix()),!0).add(no);return{result:Rs,prevCenter:Kn,nextCenter:ro,offset:na}}commitLayout(p,Ds){const{target:js}=p,{result:{size:Fs},nextCenter:Rs}=Ds;var Kn,ro;js.set({width:Fs.x,height:Fs.y}),this.layoutObjects(p,Ds),p.type===Cr?js.set({left:(Kn=p.x)!==null&&Kn!==void 0?Kn:Rs.x+Fs.x*Ae(js.originX),top:(ro=p.y)!==null&&ro!==void 0?ro:Rs.y+Fs.y*Ae(js.originY)}):(js.setPositionByOrigin(Rs,M,M),js.setCoords(),js.set("dirty",!0))}layoutObjects(p,Ds){const{target:js}=p;js.forEachObject((Fs=>{Fs.group===js&&this.layoutObject(p,Ds,Fs)})),p.strategy.shouldLayoutClipPath(p)&&this.layoutObject(p,Ds,js.clipPath)}layoutObject(p,Ds,js){let{offset:Fs}=Ds;js.set({left:js.left+Fs.x,top:js.top+Fs.y})}onAfterLayout(p,Ds){const{target:js,strategy:Fs,bubbles:Rs,prevStrategy:Kn}=p,ro=i(p,Mr),{canvas:io}=js;js.fire("layout:after",{context:p,result:Ds}),io&&io.fire("object:layout:after",{context:p,result:Ds,target:js});const no=js.parent;Rs&&no!=null&&no.layoutManager&&((ro.path||(ro.path=[])).push(js),no.layoutManager.performLayout(s(s({},ro),{},{target:no}))),js.set("dirty",!0)}dispose(){const{_subscriptions:p}=this;p.forEach((Ds=>Ds.forEach((js=>js())))),p.clear()}toObject(){return{type:Pr,strategy:this.strategy.constructor.type}}toJSON(){return this.toObject()}}tt.setClass(Er,Pr);const Ar=["type","objects","layoutManager"];class jr extends Er{performLayout(){}}class Fr extends ut(Oi){static getDefaults(){return s(s({},super.getDefaults()),Fr.ownDefaults)}constructor(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),t(this,"_activeObjects",[]),t(this,"__objectSelectionTracker",void 0),t(this,"__objectSelectionDisposer",void 0),Object.assign(this,Fr.ownDefaults),this.setOptions(Ds),this.groupInit(p,Ds)}groupInit(p,Ds){var js;this._objects=[...p],this.__objectSelectionTracker=this.__objectSelectionMonitor.bind(this,!0),this.__objectSelectionDisposer=this.__objectSelectionMonitor.bind(this,!1),this.forEachObject((Fs=>{this.enterGroup(Fs,!1)})),this.layoutManager=(js=Ds.layoutManager)!==null&&js!==void 0?js:new Er,this.layoutManager.performLayout({type:Cr,target:this,targets:[...p],x:Ds.left,y:Ds.top})}canEnterGroup(p){return p===this||this.isDescendantOf(p)?(h("error","Group: circular object trees are not supported, this call has no effect"),!1):this._objects.indexOf(p)===-1||(h("error","Group: duplicate objects are not supported inside group, this call has no effect"),!1)}_filterObjectsBeforeEnteringGroup(p){return p.filter(((Ds,js,Fs)=>this.canEnterGroup(Ds)&&Fs.indexOf(Ds)===js))}add(){for(var p=arguments.length,Ds=new Array(p),js=0;js<p;js++)Ds[js]=arguments[js];const Fs=this._filterObjectsBeforeEnteringGroup(Ds),Rs=super.add(...Fs);return this._onAfterObjectsChange(br,Fs),Rs}insertAt(p){for(var Ds=arguments.length,js=new Array(Ds>1?Ds-1:0),Fs=1;Fs<Ds;Fs++)js[Fs-1]=arguments[Fs];const Rs=this._filterObjectsBeforeEnteringGroup(js),Kn=super.insertAt(p,...Rs);return this._onAfterObjectsChange(br,Rs),Kn}remove(){const p=super.remove(...arguments);return this._onAfterObjectsChange(wr,p),p}_onObjectAdded(p){this.enterGroup(p,!0),this.fire("object:added",{target:p}),p.fire("added",{target:this})}_onObjectRemoved(p,Ds){this.exitGroup(p,Ds),this.fire("object:removed",{target:p}),p.fire("removed",{target:this})}_onAfterObjectsChange(p,Ds){this.layoutManager.performLayout({type:p,targets:Ds,target:this})}_onStackOrderChanged(){this._set("dirty",!0)}_set(p,Ds){const js=this[p];return super._set(p,Ds),p==="canvas"&&js!==Ds&&(this._objects||[]).forEach((Fs=>{Fs._set(p,Ds)})),this}_shouldSetNestedCoords(){return this.subTargetCheck}removeAll(){return this._activeObjects=[],this.remove(...this._objects)}__objectSelectionMonitor(p,Ds){let{target:js}=Ds;const Fs=this._activeObjects;if(p)Fs.push(js),this._set("dirty",!0);else if(Fs.length>0){const Rs=Fs.indexOf(js);Rs>-1&&(Fs.splice(Rs,1),this._set("dirty",!0))}}_watchObject(p,Ds){p&&this._watchObject(!1,Ds),p?(Ds.on("selected",this.__objectSelectionTracker),Ds.on("deselected",this.__objectSelectionDisposer)):(Ds.off("selected",this.__objectSelectionTracker),Ds.off("deselected",this.__objectSelectionDisposer))}enterGroup(p,Ds){p.group&&p.group.remove(p),p._set("parent",this),this._enterGroup(p,Ds)}_enterGroup(p,Ds){Ds&&be(p,Tt(St(this.calcTransformMatrix()),p.calcTransformMatrix())),this._shouldSetNestedCoords()&&p.setCoords(),p._set("group",this),p._set("canvas",this.canvas),this._watchObject(!0,p);const js=this.canvas&&this.canvas.getActiveObject&&this.canvas.getActiveObject();js&&(js===p||p.isDescendantOf(js))&&this._activeObjects.push(p)}exitGroup(p,Ds){this._exitGroup(p,Ds),p._set("parent",void 0),p._set("canvas",void 0)}_exitGroup(p,Ds){p._set("group",void 0),Ds||(be(p,Tt(this.calcTransformMatrix(),p.calcTransformMatrix())),p.setCoords()),this._watchObject(!1,p);const js=this._activeObjects.length>0?this._activeObjects.indexOf(p):-1;js>-1&&this._activeObjects.splice(js,1)}shouldCache(){const p=Oi.prototype.shouldCache.call(this);if(p){for(let Ds=0;Ds<this._objects.length;Ds++)if(this._objects[Ds].willDrawShadow())return this.ownCaching=!1,!1}return p}willDrawShadow(){if(super.willDrawShadow())return!0;for(let p=0;p<this._objects.length;p++)if(this._objects[p].willDrawShadow())return!0;return!1}isOnACache(){return this.ownCaching||!!this.parent&&this.parent.isOnACache()}drawObject(p){this._renderBackground(p);for(let js=0;js<this._objects.length;js++){var Ds;(Ds=this.canvas)!==null&&Ds!==void 0&&Ds.preserveObjectStacking&&this._objects[js].group!==this?(p.save(),p.transform(...St(this.calcTransformMatrix())),this._objects[js].render(p),p.restore()):this._objects[js].group===this&&this._objects[js].render(p)}this._drawClipPath(p,this.clipPath)}setCoords(){super.setCoords(),this._shouldSetNestedCoords()&&this.forEachObject((p=>p.setCoords()))}triggerLayout(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.layoutManager.performLayout(s({target:this,type:Sr},p))}render(p){this._transformDone=!0,super.render(p),this._transformDone=!1}__serializeObjects(p,Ds){const js=this.includeDefaultValues;return this._objects.filter((function(Fs){return!Fs.excludeFromExport})).map((function(Fs){const Rs=Fs.includeDefaultValues;Fs.includeDefaultValues=js;const Kn=Fs[p||"toObject"](Ds);return Fs.includeDefaultValues=Rs,Kn}))}toObject(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];const Ds=this.layoutManager.toObject();return s(s(s({},super.toObject(["subTargetCheck","interactive",...p])),Ds.strategy!=="fit-content"||this.includeDefaultValues?{layoutManager:Ds}:{}),{},{objects:this.__serializeObjects("toObject",p)})}toString(){return"#<Group: (".concat(this.complexity(),")>")}dispose(){this.layoutManager.unsubscribeTargets({targets:this.getObjects(),target:this}),this._activeObjects=[],this.forEachObject((p=>{this._watchObject(!1,p),p.dispose()})),super.dispose()}_createSVGBgRect(p){if(!this.backgroundColor)return"";const Ds=xr.prototype._toSVG.call(this),js=Ds.indexOf("COMMON_PARTS");Ds[js]='for="group" ';const Fs=Ds.join("");return p?p(Fs):Fs}_toSVG(p){const Ds=["<g ","COMMON_PARTS",` > 40`],js=this._createSVGBgRect(p);js&&Ds.push(" ",js);for(let Fs=0;Fs<this._objects.length;Fs++)Ds.push(" ",this._objects[Fs].toSVG(p));return Ds.push(`</g> 41`),Ds}getSvgStyles(){const p=this.opacity!==void 0&&this.opacity!==1?"opacity: ".concat(this.opacity,";"):"",Ds=this.visible?"":" visibility: hidden;";return[p,this.getSvgFilter(),Ds].join("")}toClipPathSVG(p){const Ds=[],js=this._createSVGBgRect(p);js&&Ds.push(" ",js);for(let Fs=0;Fs<this._objects.length;Fs++)Ds.push(" ",this._objects[Fs].toClipPathSVG(p));return this._createBaseClipPathSVGMarkup(Ds,{reviver:p})}static fromObject(p,Ds){let{type:js,objects:Fs=[],layoutManager:Rs}=p,Kn=i(p,Ar);return Promise.all([It(Fs,Ds),Xt(Kn,Ds)]).then((ro=>{let[io,no]=ro;const na=new this(io,s(s(s({},Kn),no),{},{layoutManager:new jr}));if(Rs){const ca=tt.getClass(Rs.type),la=tt.getClass(Rs.strategy);na.layoutManager=new ca(new la)}else na.layoutManager=new Er;return na.layoutManager.subscribeTargets({type:Cr,target:na,targets:na.getObjects()}),na.setCoords(),na}))}}t(Fr,"type","Group"),t(Fr,"ownDefaults",{strokeWidth:0,subTargetCheck:!1,interactive:!1}),tt.setClass(Fr);const Lr=($n,p)=>Math.min(p.width/$n.width,p.height/$n.height),Rr=($n,p)=>Math.max(p.width/$n.width,p.height/$n.height);var Br;const Ir="(".concat(ks,")"),Xr="(M) (?:".concat(Ir," ").concat(Ir," ?)+"),Wr="(L) (?:".concat(Ir," ").concat(Ir," ?)+"),Yr="(H) (?:".concat(Ir," ?)+"),Vr="(V) (?:".concat(Ir," ?)+"),Hr=String.raw(Br||(Br=r(["(Z)s*"],["(Z)\\s*"]))),Gr="(C) (?:".concat(Ir," ").concat(Ir," ").concat(Ir," ").concat(Ir," ").concat(Ir," ").concat(Ir," ?)+"),zr="(S) (?:".concat(Ir," ").concat(Ir," ").concat(Ir," ").concat(Ir," ?)+"),Nr="(Q) (?:".concat(Ir," ").concat(Ir," ").concat(Ir," ").concat(Ir," ?)+"),Ur="(T) (?:".concat(Ir," ").concat(Ir," ?)+"),qr="(A) (?:".concat(Ir," ").concat(Ir," ").concat(Ir," ([01]) ?([01]) ").concat(Ir," ").concat(Ir," ?)+"),Kr="(?:(?:".concat(Xr,")")+"|(?:".concat(Wr,")")+"|(?:".concat(Yr,")")+"|(?:".concat(Vr,")")+"|(?:".concat(Hr,")")+"|(?:".concat(Gr,")")+"|(?:".concat(zr,")")+"|(?:".concat(Nr,")")+"|(?:".concat(Ur,")")+"|(?:".concat(qr,"))"),Jr={m:"l",M:"L"},Zr=($n,p,Ds,js,Fs,Rs,Kn,ro,io,no,na)=>{const ca=ot($n),la=at($n),ua=ot(p),da=at(p),ga=Ds*Fs*ua-js*Rs*da+Kn,pa=js*Fs*ua+Ds*Rs*da+ro;return["C",no+io*(-Ds*Fs*la-js*Rs*ca),na+io*(-js*Fs*la+Ds*Rs*ca),ga+io*(Ds*Fs*da+js*Rs*ua),pa+io*(js*Fs*da-Ds*Rs*ua),ga,pa]},Qr=($n,p,Ds,js)=>{const Fs=Math.atan2(p,$n),Rs=Math.atan2(js,Ds);return Rs>=Fs?Rs-Fs:2*Math.PI-(Fs-Rs)};function $r($n,p,Ds,js,Fs,Rs,Kn,ro){let io;if(a.cachesBoundsOfCurve&&(io=[...arguments].join(),x.boundsOfCurveCache[io]))return x.boundsOfCurveCache[io];const no=Math.sqrt,na=Math.abs,ca=[],la=[[0,0],[0,0]];let ua=6*$n-12*Ds+6*Fs,da=-3*$n+9*Ds-9*Fs+3*Kn,ga=3*Ds-3*$n;for(let Oa=0;Oa<2;++Oa){if(Oa>0&&(ua=6*p-12*js+6*Rs,da=-3*p+9*js-9*Rs+3*ro,ga=3*js-3*p),na(da)<1e-12){if(na(ua)<1e-12)continue;const Ma=-ga/ua;0<Ma&&Ma<1&&ca.push(Ma);continue}const fa=ua*ua-4*ga*da;if(fa<0)continue;const va=no(fa),Ca=(-ua+va)/(2*da);0<Ca&&Ca<1&&ca.push(Ca);const ba=(-ua-va)/(2*da);0<ba&&ba<1&&ca.push(ba)}let pa=ca.length;const ma=pa,xa=rn($n,p,Ds,js,Fs,Rs,Kn,ro);for(;pa--;){const{x:Oa,y:fa}=xa(ca[pa]);la[0][pa]=Oa,la[1][pa]=fa}la[0][ma]=$n,la[1][ma]=p,la[0][ma+1]=Kn,la[1][ma+1]=ro;const wa=[new ht(Math.min(...la[0]),Math.min(...la[1])),new ht(Math.max(...la[0]),Math.max(...la[1]))];return a.cachesBoundsOfCurve&&(x.boundsOfCurveCache[io]=wa),wa}const tn=($n,p,Ds)=>{let[js,Fs,Rs,Kn,ro,io,no,na]=Ds;const ca=((la,ua,da,ga,pa,ma,xa)=>{if(da===0||ga===0)return[];let wa=0,Oa=0,fa=0;const va=Math.PI,Ca=xa*T,ba=at(Ca),Ma=ot(Ca),Pa=.5*(-Ma*la-ba*ua),qa=.5*(-Ma*ua+ba*la),Aa=da**2,Da=ga**2,$a=qa**2,Qa=Pa**2,Za=Aa*Da-Aa*$a-Da*Qa;let th=Math.abs(da),vh=Math.abs(ga);if(Za<0){const Ta=Math.sqrt(1-Za/(Aa*Da));th*=Ta,vh*=Ta}else fa=(pa===ma?-1:1)*Math.sqrt(Za/(Aa*$a+Da*Qa));const Ja=fa*th*qa/vh,yh=-fa*vh*Pa/th,Ch=Ma*Ja-ba*yh+.5*la,Th=ba*Ja+Ma*yh+.5*ua;let _h=Qr(1,0,(Pa-Ja)/th,(qa-yh)/vh),bh=Qr((Pa-Ja)/th,(qa-yh)/vh,(-Pa-Ja)/th,(-qa-yh)/vh);ma===0&&bh>0?bh-=2*va:ma===1&&bh<0&&(bh+=2*va);const wh=Math.ceil(Math.abs(bh/va*2)),xh=new Array(wh),Sh=bh/wh,ya=8/3*Math.sin(Sh/4)*Math.sin(Sh/4)/Math.sin(Sh/2);let Sa=_h+Sh;for(let Ta=0;Ta<wh;Ta++)xh[Ta]=Zr(_h,Sa,Ma,ba,th,vh,Ch,Th,ya,wa,Oa),wa=xh[Ta][5],Oa=xh[Ta][6],_h=Sa,Sa+=Sh;return xh})(no-$n,na-p,Fs,Rs,ro,io,Kn);for(let la=0,ua=ca.length;la<ua;la++)ca[la][1]+=$n,ca[la][2]+=p,ca[la][3]+=$n,ca[la][4]+=p,ca[la][5]+=$n,ca[la][6]+=p;return ca},en=$n=>{let p=0,Ds=0,js=0,Fs=0;const Rs=[];let Kn,ro=0,io=0;for(const no of $n){const na=[...no];let ca;switch(na[0]){case"l":na[1]+=p,na[2]+=Ds;case"L":p=na[1],Ds=na[2],ca=["L",p,Ds];break;case"h":na[1]+=p;case"H":p=na[1],ca=["L",p,Ds];break;case"v":na[1]+=Ds;case"V":Ds=na[1],ca=["L",p,Ds];break;case"m":na[1]+=p,na[2]+=Ds;case"M":p=na[1],Ds=na[2],js=na[1],Fs=na[2],ca=["M",p,Ds];break;case"c":na[1]+=p,na[2]+=Ds,na[3]+=p,na[4]+=Ds,na[5]+=p,na[6]+=Ds;case"C":ro=na[3],io=na[4],p=na[5],Ds=na[6],ca=["C",na[1],na[2],ro,io,p,Ds];break;case"s":na[1]+=p,na[2]+=Ds,na[3]+=p,na[4]+=Ds;case"S":Kn==="C"?(ro=2*p-ro,io=2*Ds-io):(ro=p,io=Ds),p=na[3],Ds=na[4],ca=["C",ro,io,na[1],na[2],p,Ds],ro=ca[3],io=ca[4];break;case"q":na[1]+=p,na[2]+=Ds,na[3]+=p,na[4]+=Ds;case"Q":ro=na[1],io=na[2],p=na[3],Ds=na[4],ca=["Q",ro,io,p,Ds];break;case"t":na[1]+=p,na[2]+=Ds;case"T":Kn==="Q"?(ro=2*p-ro,io=2*Ds-io):(ro=p,io=Ds),p=na[1],Ds=na[2],ca=["Q",ro,io,p,Ds];break;case"a":na[6]+=p,na[7]+=Ds;
41case"A":tn(p,Ds,na).forEach((la=>Rs.push(la))),p=na[6],Ds=na[7];break;case"z":case"Z":p=js,Ds=Fs,ca=["Z"]}ca?(Rs.push(ca),Kn=ca[0]):Kn=""}return Rs},sn=($n,p,Ds,js)=>Math.sqrt((Ds-$n)**2+(js-p)**2),rn=($n,p,Ds,js,Fs,Rs,Kn,ro)=>io=>{const no=io**3,na=(ua=>3*ua**2*(1-ua))(io),ca=(ua=>3*ua*(1-ua)**2)(io),la=(ua=>(1-ua)**3)(io);return new ht(Kn*no+Fs*na+Ds*ca+$n*la,ro*no+Rs*na+js*ca+p*la)},nn=$n=>$n**2,on=$n=>2*$n*(1-$n),an=$n=>(1-$n)**2,hn=($n,p,Ds,js,Fs,Rs,Kn,ro)=>io=>{const no=nn(io),na=on(io),ca=an(io),la=3*(ca*(Ds-$n)+na*(Fs-Ds)+no*(Kn-Fs)),ua=3*(ca*(js-p)+na*(Rs-js)+no*(ro-Rs));return Math.atan2(ua,la)},cn=($n,p,Ds,js,Fs,Rs)=>Kn=>{const ro=nn(Kn),io=on(Kn),no=an(Kn);return new ht(Fs*ro+Ds*io+$n*no,Rs*ro+js*io+p*no)},ln=($n,p,Ds,js,Fs,Rs)=>Kn=>{const ro=1-Kn,io=2*(ro*(Ds-$n)+Kn*(Fs-Ds)),no=2*(ro*(js-p)+Kn*(Rs-js));return Math.atan2(no,io)},un=($n,p,Ds)=>{let js=new ht(p,Ds),Fs=0;for(let Rs=1;Rs<=100;Rs+=1){const Kn=$n(Rs/100);Fs+=sn(js.x,js.y,Kn.x,Kn.y),js=Kn}return Fs},dn=($n,p)=>{let Ds,js=0,Fs=0,Rs={x:$n.x,y:$n.y},Kn=s({},Rs),ro=.01,io=0;const no=$n.iterator,na=$n.angleFinder;for(;Fs<p&&ro>1e-4;)Kn=no(js),io=js,Ds=sn(Rs.x,Rs.y,Kn.x,Kn.y),Ds+Fs>p?(js-=ro,ro/=2):(Rs=Kn,js+=ro,Fs+=Ds);return s(s({},Kn),{},{angle:na(io)})},gn=$n=>{let p,Ds,js=0,Fs=0,Rs=0,Kn=0,ro=0;const io=[];for(const no of $n){const na={x:Fs,y:Rs,command:no[0],length:0};switch(no[0]){case"M":Ds=na,Ds.x=Kn=Fs=no[1],Ds.y=ro=Rs=no[2];break;case"L":Ds=na,Ds.length=sn(Fs,Rs,no[1],no[2]),Fs=no[1],Rs=no[2];break;case"C":p=rn(Fs,Rs,no[1],no[2],no[3],no[4],no[5],no[6]),Ds=na,Ds.iterator=p,Ds.angleFinder=hn(Fs,Rs,no[1],no[2],no[3],no[4],no[5],no[6]),Ds.length=un(p,Fs,Rs),Fs=no[5],Rs=no[6];break;case"Q":p=cn(Fs,Rs,no[1],no[2],no[3],no[4]),Ds=na,Ds.iterator=p,Ds.angleFinder=ln(Fs,Rs,no[1],no[2],no[3],no[4]),Ds.length=un(p,Fs,Rs),Fs=no[3],Rs=no[4];break;case"Z":Ds=na,Ds.destX=Kn,Ds.destY=ro,Ds.length=sn(Fs,Rs,Kn,ro),Fs=Kn,Rs=ro}js+=Ds.length,io.push(Ds)}return io.push({length:js,x:Fs,y:Rs}),io},fn=function($n,p){let Ds=arguments.length>2&&arguments[2]!==void 0?arguments[2]:gn($n),js=0;for(;p-Ds[js].length>0&&js<Ds.length-2;)p-=Ds[js].length,js++;const Fs=Ds[js],Rs=p/Fs.length,Kn=$n[js];switch(Fs.command){case"M":return{x:Fs.x,y:Fs.y,angle:0};case"Z":return s(s({},new ht(Fs.x,Fs.y).lerp(new ht(Fs.destX,Fs.destY),Rs)),{},{angle:Math.atan2(Fs.destY-Fs.y,Fs.destX-Fs.x)});case"L":return s(s({},new ht(Fs.x,Fs.y).lerp(new ht(Kn[1],Kn[2]),Rs)),{},{angle:Math.atan2(Kn[2]-Fs.y,Kn[1]-Fs.x)});case"C":case"Q":return dn(Fs,p)}},pn=new RegExp(Kr,"gi"),mn=new RegExp(Kr,"i"),vn=$n=>{$n=zi($n);const p=[];for(let[Ds]of $n.matchAll(pn)){const js=[];let Fs;do{if(Fs=mn.exec(Ds),!Fs)break;const Rs=Fs.filter((ro=>ro));Rs.shift();const Kn=Rs.map((ro=>{const io=Number.parseFloat(ro);return Number.isNaN(io)?ro:io}));if(js.push(Kn),Rs.length<=1)break;Rs.shift(),Ds=Ds.replace(new RegExp("".concat(Rs.join(" ?")," ?$")),"")}while(Fs);js.reverse().forEach(((Rs,Kn)=>{const ro=Jr[Rs[0]];Kn>0&&(ro=="l"||ro=="L")&&(Rs[0]=ro),p.push(Rs)}))}return p},yn=function($n){let p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,Ds=new ht($n[0]),js=new ht($n[1]),Fs=1,Rs=0;const Kn=[],ro=$n.length,io=ro>2;let no;for(io&&(Fs=$n[2].x<js.x?-1:$n[2].x===js.x?0:1,Rs=$n[2].y<js.y?-1:$n[2].y===js.y?0:1),Kn.push(["M",Ds.x-Fs*p,Ds.y-Rs*p]),no=1;no<ro;no++){if(!Ds.eq(js)){const na=Ds.midPointFrom(js);Kn.push(["Q",Ds.x,Ds.y,na.x,na.y])}Ds=$n[no],no+1<$n.length&&(js=$n[no+1])}return io&&(Fs=Ds.x>$n[no-2].x?1:Ds.x===$n[no-2].x?0:-1,Rs=Ds.y>$n[no-2].y?1:Ds.y===$n[no-2].y?0:-1),Kn.push(["L",Ds.x+Fs*p,Ds.y+Rs*p]),Kn},_n=($n,p)=>$n.map((Ds=>Ds.map(((js,Fs)=>Fs===0||p===void 0?js:Kt(js,p))).join(" "))).join(" ");function xn($n){let p=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const Ds=p.onComplete||b,js=new(y()).XMLHttpRequest,Fs=p.signal,Rs=function(){js.abort()},Kn=function(){Fs&&Fs.removeEventListener("abort",Rs),js.onerror=js.ontimeout=b};if(Fs&&Fs.aborted)throw new l("request");return Fs&&Fs.addEventListener("abort",Rs,{once:!0}),js.onreadystatechange=function(){js.readyState===4&&(Kn(),Ds(js),js.onreadystatechange=b)},js.onerror=js.ontimeout=Kn,js.open("get",$n,!0),js.send(),js}const Cn=($n,p)=>{let Ds=$n._findCenterFromElement();$n.transformMatrix&&((js=>{if(js.transformMatrix){const{scaleX:Fs,scaleY:Rs,angle:Kn,skewX:ro}=Dt(js.transformMatrix);js.flipX=!1,js.flipY=!1,js.set(z,Fs),js.set(N,Rs),js.angle=Kn,js.skewX=ro,js.skewY=0}})($n),Ds=Ds.transform($n.transformMatrix)),delete $n.transformMatrix,p&&($n.scaleX*=p.scaleX,$n.scaleY*=p.scaleY,$n.cropX=p.cropX,$n.cropY=p.cropY,Ds.x+=p.offsetLeft,Ds.y+=p.offsetTop,$n.width=p.width,$n.height=p.height),$n.setPositionByOrigin(Ds,M,M)};var bn=Object.freeze({__proto__:null,addTransformToObject:Ce,animate:ns,animateColor:os,applyTransformToObject:be,calcAngleBetweenVectors:ds,calcDimensionsMatrix:Lt,calcPlaneChangeMatrix:Oe,calcVectorRotation:gs,cancelAnimFrame:ft,capValue:ts,composeMatrix:Rt,copyCanvasElement:$n=>{var p;const Ds=vt();return Ds.width=$n.width,Ds.height=$n.height,(p=Ds.getContext("2d"))===null||p===void 0||p.drawImage($n,0,0),Ds},cos:ot,createCanvasElement:vt,createImage:yt,createRotateMatrix:Pt,createScaleMatrix:Et,createSkewXMatrix:jt,createSkewYMatrix:Ft,createTranslateMatrix:Mt,createVector:ls,crossProduct:ms,degreesToRadians:xt,dotProduct:vs,ease:Ue,enlivenObjectEnlivables:Xt,enlivenObjects:It,findScaleToCover:Rr,findScaleToFit:Lr,getBoundsOfCurve:$r,getOrthonormalVector:ps,getPathSegmentsInfo:gn,getPointOnPath:fn,getPointer:me,getRandomInt:it,getRegularPolygonPath:($n,p)=>{const Ds=2*Math.PI/$n;let js=-w;$n%2==0&&(js+=Ds/2);const Fs=new Array($n+1);for(let Rs=0;Rs<$n;Rs++){const Kn=Rs*Ds+js,{x:ro,y:io}=new ht(ot(Kn),at(Kn)).scalarMultiply(p);Fs[Rs]=[Rs===0?"M":"L",ro,io]}return Fs[$n]=["Z"],Fs},getSmoothPathFromPoints:yn,getSvgAttributes:$n=>{const p=["instantiated_by_use","style","id","class"];switch($n){case"linearGradient":return p.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);case"radialGradient":return p.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);case"stop":return p.concat(["offset","stop-color","stop-opacity"])}return p},getUnitVector:fs,groupSVGElements:($n,p)=>$n&&$n.length===1?$n[0]:new Fr($n,p),hasStyleChanged:Bi,invertTransform:St,isBetweenVectors:ys,isIdentityMatrix:bt,isTouchEvent:ve,isTransparent:ki,joinPath:_n,loadImage:Bt,magnitude:us,makeBoundingBoxFromPoints:_e,makePathSimpler:en,matrixToSVG:Qt,mergeClipPaths:($n,p)=>{var Ds;let js=$n,Fs=p;js.inverted&&!Fs.inverted&&(js=p,Fs=$n),Me(Fs,(Ds=Fs.group)===null||Ds===void 0?void 0:Ds.calcTransformMatrix(),js.calcTransformMatrix());const Rs=js.inverted&&Fs.inverted;return Rs&&(js.inverted=Fs.inverted=!1),new Fr([js],{clipPath:Fs,inverted:Rs})},multiplyTransformMatrices:Tt,multiplyTransformMatrixArray:Ot,parsePath:vn,parsePreserveAspectRatioAttribute:Zt,parseUnit:Jt,pick:Wt,projectStrokeOnPoints:Ai,qrDecompose:Dt,radiansToDegrees:Ct,removeFromArray:nt,removeTransformFromObject:($n,p)=>{const Ds=St(p),js=Tt(Ds,$n.calcOwnMatrix());be($n,js)},removeTransformMatrixForSvgParsing:Cn,request:xn,requestAnimFrame:gt,resetObjectTransform:we,rotatePoint:($n,p,Ds)=>$n.rotate(Ds,p),rotateVector:cs,saveObjectTransform:Se,sendObjectToPlane:Me,sendPointToPlane:ke,sendVectorToPlane:De,setStyle:he,sin:at,sizeAfterTransform:Te,string:Ri,stylesFromArray:Xi,stylesToArray:Ii,toDataURL:_t,toFixed:Kt,transformPath:($n,p,Ds)=>(Ds&&(p=Tt(p,[1,0,0,1,-Ds.x,-Ds.y])),$n.map((js=>{const Fs=[...js];for(let Rs=1;Rs<js.length-1;Rs+=2){const{x:Kn,y:ro}=wt({x:js[Rs],y:js[Rs+1]},p);Fs[Rs]=Kn,Fs[Rs+1]=ro}return Fs}))),transformPoint:wt});class wn extends de{constructor(p){let{allowTouchScrolling:Ds=!1,containerClass:js=""}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(p),t(this,"upper",void 0),t(this,"container",void 0);const{el:Fs}=this.lower,Rs=this.createUpperCanvas();
vendor: 37,949 bytes, lines 41-46
41this.upper={el:Rs,ctx:Rs.getContext("2d")},this.applyCanvasStyle(Fs,{allowTouchScrolling:Ds}),this.applyCanvasStyle(Rs,{allowTouchScrolling:Ds});const Kn=this.createContainerElement();Kn.classList.add(js),Fs.parentNode&&Fs.parentNode.replaceChild(Kn,Fs),Kn.append(Fs,Rs),this.container=Kn}createUpperCanvas(){const{el:p}=this.lower,Ds=vt();return Ds.className=p.className,Ds.classList.remove("lower-canvas"),Ds.classList.add("upper-canvas"),Ds.setAttribute("data-fabric","top"),Ds.style.cssText=p.style.cssText,Ds.setAttribute("draggable","true"),Ds}createContainerElement(){const p=v().createElement("div");return p.setAttribute("data-fabric","wrapper"),he(p,{position:"relative"}),ue(p),p}applyCanvasStyle(p,Ds){let{allowTouchScrolling:js}=Ds;he(p,{position:"absolute",left:"0",top:"0"}),(function(Fs,Rs){const Kn=Rs?"manipulation":F;he(Fs,{"touch-action":Kn,"-ms-touch-action":Kn})})(p,js),ue(p)}setDimensions(p,Ds){super.setDimensions(p,Ds);const{el:js,ctx:Fs}=this.upper;ce(js,Fs,p,Ds)}setCSSDimensions(p){super.setCSSDimensions(p),le(this.upper.el,p),le(this.container,p)}cleanupDOM(p){const Ds=this.container,{el:js}=this.lower,{el:Fs}=this.upper;super.cleanupDOM(p),Ds.removeChild(Fs),Ds.removeChild(js),Ds.parentNode&&Ds.parentNode.replaceChild(js,Ds)}dispose(){super.dispose(),m().dispose(this.upper.el),delete this.upper,delete this.container}}class Sn extends fe{constructor(){super(...arguments),t(this,"targets",[]),t(this,"_hoveredTargets",[]),t(this,"_objectsToRender",void 0),t(this,"_currentTransform",null),t(this,"_groupSelector",null),t(this,"contextTopDirty",!1)}static getDefaults(){return s(s({},super.getDefaults()),Sn.ownDefaults)}get upperCanvasEl(){var p;return(p=this.elements.upper)===null||p===void 0?void 0:p.el}get contextTop(){var p;return(p=this.elements.upper)===null||p===void 0?void 0:p.ctx}get wrapperEl(){return this.elements.container}initElements(p){this.elements=new wn(p,{allowTouchScrolling:this.allowTouchScrolling,containerClass:this.containerClass}),this._createCacheCanvas()}_onObjectAdded(p){this._objectsToRender=void 0,super._onObjectAdded(p)}_onObjectRemoved(p){this._objectsToRender=void 0,p===this._activeObject&&(this.fire("before:selection:cleared",{deselected:[p]}),this._discardActiveObject(),this.fire("selection:cleared",{deselected:[p]}),p.fire("deselected",{target:p})),p===this._hoveredTarget&&(this._hoveredTarget=void 0,this._hoveredTargets=[]),super._onObjectRemoved(p)}_onStackOrderChanged(){this._objectsToRender=void 0,super._onStackOrderChanged()}_chooseObjectsToRender(){const p=this._activeObject;return!this.preserveObjectStacking&&p?this._objects.filter((Ds=>!Ds.group&&Ds!==p)).concat(p):this._objects}renderAll(){this.cancelRequestedRender(),this.destroyed||(!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1),!this._objectsToRender&&(this._objectsToRender=this._chooseObjectsToRender()),this.renderCanvas(this.getContext(),this._objectsToRender))}renderTopLayer(p){p.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(p),this.contextTopDirty=!0),p.restore()}renderTop(){const p=this.contextTop;this.clearContext(p),this.renderTopLayer(p),this.fire("after:render",{ctx:p})}setTargetFindTolerance(p){p=Math.round(p),this.targetFindTolerance=p;const Ds=this.getRetinaScaling(),js=Math.ceil((2*p+1)*Ds);this.pixelFindCanvasEl.width=this.pixelFindCanvasEl.height=js,this.pixelFindContext.scale(Ds,Ds)}isTargetTransparent(p,Ds,js){const Fs=this.targetFindTolerance,Rs=this.pixelFindContext;this.clearContext(Rs),Rs.save(),Rs.translate(-Ds+Fs,-js+Fs),Rs.transform(...this.viewportTransform);const Kn=p.selectionBackgroundColor;p.selectionBackgroundColor="",p.render(Rs),p.selectionBackgroundColor=Kn,Rs.restore();const ro=Math.round(Fs*this.getRetinaScaling());return ki(Rs,ro,ro,ro)}_isSelectionKeyPressed(p){const Ds=this.selectionKey;return!!Ds&&(Array.isArray(Ds)?!!Ds.find((js=>!!js&&p[js]===!0)):p[Ds])}_shouldClearSelection(p,Ds){const js=this.getActiveObjects(),Fs=this._activeObject;return!!(!Ds||Ds&&Fs&&js.length>1&&js.indexOf(Ds)===-1&&Fs!==Ds&&!this._isSelectionKeyPressed(p)||Ds&&!Ds.evented||Ds&&!Ds.selectable&&Fs&&Fs!==Ds)}_shouldCenterTransform(p,Ds,js){if(!p)return;let Fs;return Ds===G||Ds===z||Ds===N||Ds===Y?Fs=this.centeredScaling||p.centeredScaling:Ds===X&&(Fs=this.centeredRotation||p.centeredRotation),Fs?!js:js}_getOriginFromCorner(p,Ds){const js={x:p.originX,y:p.originY};return Ds&&(["ml","tl","bl"].includes(Ds)?js.x=j:["mr","tr","br"].includes(Ds)&&(js.x=P),["tl","mt","tr"].includes(Ds)?js.y=A:["bl","mb","br"].includes(Ds)&&(js.y=E)),js}_setupCurrentTransform(p,Ds,js){var Fs;const Rs=Ds.group?ke(this.getScenePoint(p),void 0,Ds.group.calcTransformMatrix()):this.getScenePoint(p),{key:Kn="",control:ro}=Ds.getActiveControl()||{},io=js&&ro?(Fs=ro.getActionHandler(p,Ds,ro))===null||Fs===void 0?void 0:Fs.bind(ro):We,no=((ua,da,ga,pa)=>{if(!da||!ua)return"drag";const ma=pa.controls[da];return ma.getActionName(ga,ma,pa)})(js,Kn,p,Ds),na=p[this.centeredKey],ca=this._shouldCenterTransform(Ds,no,na)?{x:M,y:M}:this._getOriginFromCorner(Ds,Kn),la={target:Ds,action:no,actionHandler:io,actionPerformed:!1,corner:Kn,scaleX:Ds.scaleX,scaleY:Ds.scaleY,skewX:Ds.skewX,skewY:Ds.skewY,offsetX:Rs.x-Ds.left,offsetY:Rs.y-Ds.top,originX:ca.x,originY:ca.y,ex:Rs.x,ey:Rs.y,lastX:Rs.x,lastY:Rs.y,theta:xt(Ds.angle),width:Ds.width,height:Ds.height,shiftKey:p.shiftKey,altKey:na,original:s(s({},Se(Ds)),{},{originX:ca.x,originY:ca.y})};this._currentTransform=la,this.fire("before:transform",{e:p,transform:la})}setCursor(p){this.upperCanvasEl.style.cursor=p}_drawSelection(p){const{x:Ds,y:js,deltaX:Fs,deltaY:Rs}=this._groupSelector,Kn=new ht(Ds,js).transform(this.viewportTransform),ro=new ht(Ds+Fs,js+Rs).transform(this.viewportTransform),io=this.selectionLineWidth/2;let no=Math.min(Kn.x,ro.x),na=Math.min(Kn.y,ro.y),ca=Math.max(Kn.x,ro.x),la=Math.max(Kn.y,ro.y);this.selectionColor&&(p.fillStyle=this.selectionColor,p.fillRect(no,na,ca-no,la-na)),this.selectionLineWidth&&this.selectionBorderColor&&(p.lineWidth=this.selectionLineWidth,p.strokeStyle=this.selectionBorderColor,no+=io,na+=io,ca-=io,la-=io,Oi.prototype._setLineDash.call(this,p,this.selectionDashArray),p.strokeRect(no,na,ca-no,la-na))}findTarget(p){if(this.skipTargetFind)return;const Ds=this.getViewportPoint(p),js=this._activeObject,Fs=this.getActiveObjects();if(this.targets=[],js&&Fs.length>=1){if(js.findControl(Ds,ve(p))||Fs.length>1&&this.searchPossibleTargets([js],Ds))return js;if(js===this.searchPossibleTargets([js],Ds)){if(this.preserveObjectStacking){const Rs=this.targets;this.targets=[];const Kn=this.searchPossibleTargets(this._objects,Ds);return p[this.altSelectionKey]&&Kn&&Kn!==js?(this.targets=Rs,js):Kn}return js}}return this.searchPossibleTargets(this._objects,Ds)}_pointIsInObjectSelectionArea(p,Ds){let js=p.getCoords();const Fs=this.getZoom(),Rs=p.padding/Fs;if(Rs){const[Kn,ro,io,no]=js,na=Math.atan2(ro.y-Kn.y,ro.x-Kn.x),ca=ot(na)*Rs,la=at(na)*Rs,ua=ca+la,da=ca-la;js=[new ht(Kn.x-da,Kn.y-ua),new ht(ro.x+ua,ro.y-da),new ht(io.x+da,io.y+ua),new ht(no.x-ua,no.y+da)]}return _s.isPointInPolygon(Ds,js)}_checkTarget(p,Ds){return!!(p&&p.visible&&p.evented&&this._pointIsInObjectSelectionArea(p,ke(Ds,void 0,this.viewportTransform))&&(!this.perPixelTargetFind&&!p.perPixelTargetFind||p.isEditing||!this.isTargetTransparent(p,Ds.x,Ds.y)))}_searchPossibleTargets(p,Ds){let js=p.length;for(;js--;){const Fs=p[js];if(this._checkTarget(Fs,Ds)){if(lt(Fs)&&Fs.subTargetCheck){const Rs=this._searchPossibleTargets(Fs._objects,Ds);Rs&&this.targets.push(Rs)}return Fs}}}searchPossibleTargets(p,Ds){const js=this._searchPossibleTargets(p,Ds);if(js&<(js)&&js.interactive&&this.targets[0]){const Fs=this.targets;for(let Rs=Fs.length-1;Rs>0;Rs--){const Kn=Fs[Rs];if(!lt(Kn)||!Kn.interactive)return Kn}return Fs[0]}return js}getViewportPoint(p){return this._pointer?this._pointer:this.getPointer(p,!0)}getScenePoint(p){return this._absolutePointer?this._absolutePointer:this.getPointer(p)}getPointer(p){let Ds=arguments.length>1&&arguments[1]!==void 0&&arguments[1];const js=this.upperCanvasEl,Fs=js.getBoundingClientRect();let Rs=me(p),Kn=Fs.width||0,ro=Fs.height||0;Kn&&ro||(E in Fs&&A in Fs&&(ro=Math.abs(Fs.top-Fs.bottom)),j in Fs&&P in Fs&&(Kn=Math.abs(Fs.right-Fs.left))),this.calcOffset(),Rs.x=Rs.x-this._offset.left,Rs.y=Rs.y-this._offset.top,Ds||(Rs=ke(Rs,void 0,this.viewportTransform));const io=this.getRetinaScaling();io!==1&&(Rs.x/=io,Rs.y/=io);const no=Kn===0||ro===0?new ht(1,1):new ht(js.width/Kn,js.height/ro);return Rs.multiply(no)}_setDimensionsImpl(p,Ds){this._resetTransformEventData(),super._setDimensionsImpl(p,Ds),this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop)}_createCacheCanvas(){this.pixelFindCanvasEl=vt(),this.pixelFindContext=this.pixelFindCanvasEl.getContext("2d",{willReadFrequently:!0}),this.setTargetFindTolerance(this.targetFindTolerance)}getTopContext(){return this.elements.upper.ctx}getSelectionContext(){return this.elements.upper.ctx}getSelectionElement(){return this.elements.upper.el}getActiveObject(){return this._activeObject}getActiveObjects(){const p=this._activeObject;return re(p)?p.getObjects():p?[p]:[]}_fireSelectionEvents(p,Ds){let js=!1,Fs=!1;const Rs=this.getActiveObjects(),Kn=[],ro=[];p.forEach((io=>{Rs.includes(io)||(js=!0,io.fire("deselected",{e:Ds,target:io}),ro.push(io))})),Rs.forEach((io=>{p.includes(io)||(js=!0,io.fire("selected",{e:Ds,target:io}),Kn.push(io))})),p.length>0&&Rs.length>0?(Fs=!0,js&&this.fire("selection:updated",{e:Ds,selected:Kn,deselected:ro})):Rs.length>0?(Fs=!0,this.fire("selection:created",{e:Ds,selected:Kn})):p.length>0&&(Fs=!0,this.fire("selection:cleared",{e:Ds,deselected:ro})),Fs&&(this._objectsToRender=void 0)}setActiveObject(p,Ds){const js=this.getActiveObjects(),Fs=this._setActiveObject(p,Ds);return this._fireSelectionEvents(js,Ds),Fs}_setActiveObject(p,Ds){const js=this._activeObject;return js!==p&&!(!this._discardActiveObject(Ds,p)&&this._activeObject)&&!p.onSelect({e:Ds})&&(this._activeObject=p,re(p)&&js!==p&&p.set("canvas",this),p.setCoords(),!0)}_discardActiveObject(p,Ds){const js=this._activeObject;return!!js&&!js.onDeselect({e:p,object:Ds})&&(this._currentTransform&&this._currentTransform.target===js&&this.endCurrentTransform(p),this._activeObject=void 0,!0)}discardActiveObject(p){const Ds=this.getActiveObjects(),js=this.getActiveObject();Ds.length&&this.fire("before:selection:cleared",{e:p,deselected:[js]});const Fs=this._discardActiveObject(p);return this._fireSelectionEvents(Ds,p),Fs}endCurrentTransform(p){const Ds=this._currentTransform;this._finalizeCurrentTransform(p),Ds&&Ds.target&&(Ds.target.isMoving=!1),this._currentTransform=null}_finalizeCurrentTransform(p){const Ds=this._currentTransform,js=Ds.target,Fs={e:p,target:js,transform:Ds,action:Ds.action};js._scaling&&(js._scaling=!1),js.setCoords(),Ds.actionPerformed&&(this.fire("object:modified",Fs),js.fire(Z,Fs))}setViewportTransform(p){super.setViewportTransform(p);const Ds=this._activeObject;Ds&&Ds.setCoords()}destroy(){const p=this._activeObject;re(p)&&(p.removeAll(),p.dispose()),delete this._activeObject,super.destroy(),this.pixelFindContext=null,this.pixelFindCanvasEl=void 0}clear(){this.discardActiveObject(),this._activeObject=void 0,this.clearContext(this.contextTop),super.clear()}drawControls(p){const Ds=this._activeObject;Ds&&Ds._renderControls(p)}_toObject(p,Ds,js){const Fs=this._realizeGroupTransformOnObject(p),Rs=super._toObject(p,Ds,js);return p.set(Fs),Rs}_realizeGroupTransformOnObject(p){const{group:Ds}=p;if(Ds&&re(Ds)&&this._activeObject===Ds){const js=Wt(p,["angle","flipX","flipY",P,z,N,U,q,E]);return Ce(p,Ds.calcOwnMatrix()),js}return{}}_setSVGObject(p,Ds,js){const Fs=this._realizeGroupTransformOnObject(Ds);super._setSVGObject(p,Ds,js),Ds.set(Fs)}}t(Sn,"ownDefaults",{uniformScaling:!0,uniScaleKey:"shiftKey",centeredScaling:!1,centeredRotation:!1,centeredKey:"altKey",altActionKey:"shiftKey",selection:!0,selectionKey:"shiftKey",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",perPixelTargetFind:!1,targetFindTolerance:0,skipTargetFind:!1,stopContextMenu:!1,fireRightClick:!1,fireMiddleClick:!1,enablePointerEvents:!1,containerClass:"canvas-container",preserveObjectStacking:!1});class Tn{constructor(p){t(this,"targets",[]),t(this,"__disposer",void 0);const Ds=()=>{const{hiddenTextarea:Fs}=p.getActiveObject()||{};Fs&&Fs.focus()},js=p.upperCanvasEl;js.addEventListener("click",Ds),this.__disposer=()=>js.removeEventListener("click",Ds)}exitTextEditing(){this.target=void 0,this.targets.forEach((p=>{p.isEditing&&p.exitEditing()}))}add(p){this.targets.push(p)}remove(p){this.unregister(p),nt(this.targets,p)}register(p){this.target=p}unregister(p){p===this.target&&(this.target=void 0)}onMouseMove(p){var Ds;!((Ds=this.target)===null||Ds===void 0)&&Ds.isEditing&&this.target.updateSelectionOnMouseMove(p)}clear(){this.targets=[],this.target=void 0}dispose(){this.clear(),this.__disposer(),delete this.__disposer}}const On=["target","oldTarget","fireCanvas","e"],kn={passive:!1},Dn=($n,p)=>{const Ds=$n.getViewportPoint(p),js=$n.getScenePoint(p);return{viewportPoint:Ds,scenePoint:js,pointer:Ds,absolutePointer:js}},Mn=function($n){for(var p=arguments.length,Ds=new Array(p>1?p-1:0),js=1;js<p;js++)Ds[js-1]=arguments[js];return $n.addEventListener(...Ds)},Pn=function($n){for(var p=arguments.length,Ds=new Array(p>1?p-1:0),js=1;js<p;js++)Ds[js-1]=arguments[js];return $n.removeEventListener(...Ds)},En={mouse:{in:"over",out:"out",targetIn:"mouseover",targetOut:"mouseout",canvasIn:"mouse:over",canvasOut:"mouse:out"},drag:{in:"enter",out:"leave",targetIn:"dragenter",targetOut:"dragleave",canvasIn:"drag:enter",canvasOut:"drag:leave"}};class An extends Sn{constructor(p){super(p,arguments.length>1&&arguments[1]!==void 0?arguments[1]:{}),t(this,"_isClick",void 0),t(this,"textEditingManager",new Tn(this)),["_onMouseDown","_onTouchStart","_onMouseMove","_onMouseUp","_onTouchEnd","_onResize","_onMouseWheel","_onMouseOut","_onMouseEnter","_onContextMenu","_onDoubleClick","_onDragStart","_onDragEnd","_onDragProgress","_onDragOver","_onDragEnter","_onDragLeave","_onDrop"].forEach((Ds=>{this[Ds]=this[Ds].bind(this)})),this.addOrRemove(Mn,"add")}_getEventPrefix(){return this.enablePointerEvents?"pointer":"mouse"}addOrRemove(p,Ds){const js=this.upperCanvasEl,Fs=this._getEventPrefix();p(ae(js),"resize",this._onResize),p(js,Fs+"down",this._onMouseDown),p(js,"".concat(Fs,"move"),this._onMouseMove,kn),p(js,"".concat(Fs,"out"),this._onMouseOut),p(js,"".concat(Fs,"enter"),this._onMouseEnter),p(js,"wheel",this._onMouseWheel),p(js,"contextmenu",this._onContextMenu),p(js,"dblclick",this._onDoubleClick),p(js,"dragstart",this._onDragStart),p(js,"dragend",this._onDragEnd),p(js,"dragover",this._onDragOver),p(js,"dragenter",this._onDragEnter),p(js,"dragleave",this._onDragLeave),p(js,"drop",this._onDrop),this.enablePointerEvents||p(js,"touchstart",this._onTouchStart,kn)}removeListeners(){this.addOrRemove(Pn,"remove");const p=this._getEventPrefix(),Ds=oe(this.upperCanvasEl);Pn(Ds,"".concat(p,"up"),this._onMouseUp),Pn(Ds,"touchend",this._onTouchEnd,kn),Pn(Ds,"".concat(p,"move"),this._onMouseMove,kn),Pn(Ds,"touchmove",this._onMouseMove,kn)}_onMouseWheel(p){this.__onMouseWheel(p)}_onMouseOut(p){const Ds=this._hoveredTarget,js=s({e:p},Dn(this,p));this.fire("mouse:out",s(s({},js),{},{target:Ds})),this._hoveredTarget=void 0,Ds&&Ds.fire("mouseout",s({},js)),this._hoveredTargets.forEach((Fs=>{this.fire("mouse:out",s(s({},js),{},{target:Fs})),Fs&&Fs.fire("mouseout",s({},js))})),this._hoveredTargets=[]}_onMouseEnter(p){this._currentTransform||this.findTarget(p)||(this.fire("mouse:over",s({e:p},Dn(this,p))),this._hoveredTarget=void 0,this._hoveredTargets=[])}_onDragStart(p){this._isClick=!1;const Ds=this.getActiveObject();if(Ds&&Ds.onDragStart(p)){this._dragSource=Ds;const js={e:p,target:Ds};return this.fire("dragstart",js),Ds.fire("dragstart",js),void Mn(this.upperCanvasEl,"drag",this._onDragProgress)}ye(p)}_renderDragEffects(p,Ds,js){let Fs=!1;const Rs=this._dropTarget;Rs&&Rs!==Ds&&Rs!==js&&(Rs.clearContextTop(),Fs=!0),Ds?.clearContextTop(),js!==Ds&&js?.clearContextTop();const Kn=this.contextTop;Kn.save(),Kn.transform(...this.viewportTransform),Ds&&(Kn.save(),Ds.transform(Kn),Ds.renderDragSourceEffect(p),Kn.restore(),Fs=!0),js&&(Kn.save(),js.transform(Kn),js.renderDropTargetEffect(p),Kn.restore(),Fs=!0),Kn.restore(),Fs&&(this.contextTopDirty=!0)}_onDragEnd(p){const Ds=!!p.dataTransfer&&p.dataTransfer.dropEffect!==F,js=Ds?this._activeObject:void 0,Fs={e:p,target:this._dragSource,subTargets:this.targets,dragSource:this._dragSource,didDrop:Ds,dropTarget:js};Pn(this.upperCanvasEl,"drag",this._onDragProgress),this.fire("dragend",Fs),this._dragSource&&this._dragSource.fire("dragend",Fs),delete this._dragSource,this._onMouseUp(p)}_onDragProgress(p){const Ds={e:p,target:this._dragSource,dragSource:this._dragSource,dropTarget:this._draggedoverTarget};this.fire("drag",Ds),this._dragSource&&this._dragSource.fire("drag",Ds)}findDragTargets(p){return this.targets=[],{target:this._searchPossibleTargets(this._objects,this.getViewportPoint(p)),targets:[...this.targets]}}_onDragOver(p){const Ds="dragover",{target:js,targets:Fs}=this.findDragTargets(p),Rs=this._dragSource,Kn={e:p,target:js,subTargets:Fs,dragSource:Rs,canDrop:!1,dropTarget:void 0};let ro;this.fire(Ds,Kn),this._fireEnterLeaveEvents(js,Kn),js&&(js.canDrop(p)&&(ro=js),js.fire(Ds,Kn));for(let io=0;io<Fs.length;io++){const no=Fs[io];no.canDrop(p)&&(ro=no),no.fire(Ds,Kn)}this._renderDragEffects(p,Rs,ro),this._dropTarget=ro}_onDragEnter(p){const{target:Ds,targets:js}=this.findDragTargets(p),Fs={e:p,target:Ds,subTargets:js,dragSource:this._dragSource};this.fire("dragenter",Fs),this._fireEnterLeaveEvents(Ds,Fs)}_onDragLeave(p){const Ds={e:p,target:this._draggedoverTarget,subTargets:this.targets,dragSource:this._dragSource};this.fire("dragleave",Ds),this._fireEnterLeaveEvents(void 0,Ds),this._renderDragEffects(p,this._dragSource),this._dropTarget=void 0,this.targets=[],this._hoveredTargets=[]}_onDrop(p){const{target:Ds,targets:js}=this.findDragTargets(p),Fs=this._basicEventHandler("drop:before",s({e:p,target:Ds,subTargets:js,dragSource:this._dragSource},Dn(this,p)));Fs.didDrop=!1,Fs.dropTarget=void 0,this._basicEventHandler("drop",Fs),this.fire("drop:after",Fs)}_onContextMenu(p){const Ds=this.findTarget(p),js=this.targets||[],Fs=this._basicEventHandler("contextmenu:before",{e:p,target:Ds,subTargets:js});return this.stopContextMenu&&ye(p),this._basicEventHandler("contextmenu",Fs),!1}_onDoubleClick(p){this._cacheTransformEventData(p),this._handleEvent(p,"dblclick"),this._resetTransformEventData()}getPointerId(p){const Ds=p.changedTouches;return Ds?Ds[0]&&Ds[0].identifier:this.enablePointerEvents?p.pointerId:-1}_isMainEvent(p){return p.isPrimary===!0||p.isPrimary!==!1&&(p.type==="touchend"&&p.touches.length===0||!p.changedTouches||p.changedTouches[0].identifier===this.mainTouchId)}_onTouchStart(p){p.preventDefault(),this.mainTouchId===void 0&&(this.mainTouchId=this.getPointerId(p)),this.__onMouseDown(p),this._resetTransformEventData();const Ds=this.upperCanvasEl,js=this._getEventPrefix(),Fs=oe(Ds);Mn(Fs,"touchend",this._onTouchEnd,kn),Mn(Fs,"touchmove",this._onMouseMove,kn),Pn(Ds,"".concat(js,"down"),this._onMouseDown)}_onMouseDown(p){this.__onMouseDown(p),this._resetTransformEventData();const Ds=this.upperCanvasEl,js=this._getEventPrefix();Pn(Ds,"".concat(js,"move"),this._onMouseMove,kn);const Fs=oe(Ds);Mn(Fs,"".concat(js,"up"),this._onMouseUp),Mn(Fs,"".concat(js,"move"),this._onMouseMove,kn)}_onTouchEnd(p){if(p.touches.length>0)return;this.__onMouseUp(p),this._resetTransformEventData(),delete this.mainTouchId;const Ds=this._getEventPrefix(),js=oe(this.upperCanvasEl);Pn(js,"touchend",this._onTouchEnd,kn),Pn(js,"touchmove",this._onMouseMove,kn),this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout((()=>{Mn(this.upperCanvasEl,"".concat(Ds,"down"),this._onMouseDown),this._willAddMouseDown=0}),400)}_onMouseUp(p){this.__onMouseUp(p),this._resetTransformEventData();const Ds=this.upperCanvasEl,js=this._getEventPrefix();if(this._isMainEvent(p)){const Fs=oe(this.upperCanvasEl);Pn(Fs,"".concat(js,"up"),this._onMouseUp),Pn(Fs,"".concat(js,"move"),this._onMouseMove,kn),Mn(Ds,"".concat(js,"move"),this._onMouseMove,kn)}}_onMouseMove(p){const Ds=this.getActiveObject();!this.allowTouchScrolling&&(!Ds||!Ds.shouldStartDragging(p))&&p.preventDefault&&p.preventDefault(),this.__onMouseMove(p)}_onResize(){this.calcOffset(),this._resetTransformEventData()}_shouldRender(p){const Ds=this.getActiveObject();return!!Ds!=!!p||Ds&&p&&Ds!==p}__onMouseUp(p){var Ds;this._cacheTransformEventData(p),this._handleEvent(p,"up:before");const js=this._currentTransform,Fs=this._isClick,Rs=this._target,{button:Kn}=p;if(Kn)return(this.fireMiddleClick&&Kn===1||this.fireRightClick&&Kn===2)&&this._handleEvent(p,"up"),void this._resetTransformEventData();if(this.isDrawingMode&&this._isCurrentlyDrawing)return void this._onMouseUpInDrawingMode(p);if(!this._isMainEvent(p))return;let ro,io,no=!1;if(js&&(this._finalizeCurrentTransform(p),no=js.actionPerformed),!Fs){const na=Rs===this._activeObject;this.handleSelection(p),no||(no=this._shouldRender(Rs)||!na&&Rs===this._activeObject)}if(Rs){const na=Rs.findControl(this.getViewportPoint(p),ve(p)),{key:ca,control:la}=na||{};if(io=ca,Rs.selectable&&Rs!==this._activeObject&&Rs.activeOn==="up")this.setActiveObject(Rs,p),no=!0;else if(la){const ua=la.getMouseUpHandler(p,Rs,la);ua&&(ro=this.getScenePoint(p),ua.call(la,p,js,ro.x,ro.y))}Rs.isMoving=!1}if(js&&(js.target!==Rs||js.corner!==io)){const na=js.target&&js.target.controls[js.corner],ca=na&&na.getMouseUpHandler(p,js.target,na);ro=ro||this.getScenePoint(p),ca&&ca.call(na,p,js,ro.x,ro.y)}this._setCursorFromEvent(p,Rs),this._handleEvent(p,"up"),this._groupSelector=null,this._currentTransform=null,Rs&&(Rs.__corner=void 0),no?this.requestRenderAll():Fs||(Ds=this._activeObject)!==null&&Ds!==void 0&&Ds.isEditing||this.renderTop()}_basicEventHandler(p,Ds){const{target:js,subTargets:Fs=[]}=Ds;this.fire(p,Ds),js&&js.fire(p,Ds);for(let Rs=0;Rs<Fs.length;Rs++)Fs[Rs]!==js&&Fs[Rs].fire(p,Ds);return Ds}_handleEvent(p,Ds){const js=this._target,Fs=this.targets||[],Rs=s(s({e:p,target:js,subTargets:Fs},Dn(this,p)),{},{transform:this._currentTransform},Ds==="up:before"||Ds==="up"?{isClick:this._isClick,currentTarget:this.findTarget(p),currentSubTargets:this.targets}:{});this.fire("mouse:".concat(Ds),Rs),js&&js.fire("mouse".concat(Ds),Rs);for(let Kn=0;Kn<Fs.length;Kn++)Fs[Kn]!==js&&Fs[Kn].fire("mouse".concat(Ds),Rs)}_onMouseDownInDrawingMode(p){this._isCurrentlyDrawing=!0,this.getActiveObject()&&(this.discardActiveObject(p),this.requestRenderAll());const Ds=this.getScenePoint(p);this.freeDrawingBrush&&this.freeDrawingBrush.onMouseDown(Ds,{e:p,pointer:Ds}),this._handleEvent(p,"down")}_onMouseMoveInDrawingMode(p){if(this._isCurrentlyDrawing){const Ds=this.getScenePoint(p);this.freeDrawingBrush&&this.freeDrawingBrush.onMouseMove(Ds,{e:p,pointer:Ds})}this.setCursor(this.freeDrawingCursor),this._handleEvent(p,"move")}_onMouseUpInDrawingMode(p){const Ds=this.getScenePoint(p);this.freeDrawingBrush?this._isCurrentlyDrawing=!!this.freeDrawingBrush.onMouseUp({e:p,pointer:Ds}):this._isCurrentlyDrawing=!1,this._handleEvent(p,"up")}__onMouseDown(p){this._isClick=!0,this._cacheTransformEventData(p),this._handleEvent(p,"down:before");let Ds=this._target;const{button:js}=p;if(js)return(this.fireMiddleClick&&js===1||this.fireRightClick&&js===2)&&this._handleEvent(p,"down"),void this._resetTransformEventData();if(this.isDrawingMode)return void this._onMouseDownInDrawingMode(p);if(!this._isMainEvent(p)||this._currentTransform)return;let Fs=this._shouldRender(Ds),Rs=!1;if(this.handleMultiSelection(p,Ds)?(Ds=this._activeObject,Rs=!0,Fs=!0):this._shouldClearSelection(p,Ds)&&this.discardActiveObject(p),this.selection&&(!Ds||!Ds.selectable&&!Ds.isEditing&&Ds!==this._activeObject)){const Kn=this.getScenePoint(p);this._groupSelector={x:Kn.x,y:Kn.y,deltaY:0,deltaX:0}}if(Ds){const Kn=Ds===this._activeObject;Ds.selectable&&Ds.activeOn==="down"&&this.setActiveObject(Ds,p);const ro=Ds.findControl(this.getViewportPoint(p),ve(p));if(Ds===this._activeObject&&(ro||!Rs)){this._setupCurrentTransform(p,Ds,Kn);const io=ro?ro.control:void 0,no=this.getScenePoint(p),na=io&&io.getMouseDownHandler(p,Ds,io);na&&na.call(io,p,this._currentTransform,no.x,no.y)}}Fs&&(this._objectsToRender=void 0),this._handleEvent(p,"down"),Fs&&this.requestRenderAll()}_resetTransformEventData(){this._target=void 0,this._pointer=void 0,this._absolutePointer=void 0}_cacheTransformEventData(p){this._resetTransformEventData(),this._pointer=this.getViewportPoint(p),this._absolutePointer=ke(this._pointer,void 0,this.viewportTransform),this._target=this._currentTransform?this._currentTransform.target:this.findTarget(p)}__onMouseMove(p){if(this._isClick=!1,this._cacheTransformEventData(p),this._handleEvent(p,"move:before"),this.isDrawingMode)return void this._onMouseMoveInDrawingMode(p);if(!this._isMainEvent(p))return;const Ds=this._groupSelector;if(Ds){const js=this.getScenePoint(p);Ds.deltaX=js.x-Ds.x,Ds.deltaY=js.y-Ds.y,this.renderTop()}else if(this._currentTransform)this._transformObject(p);else{const js=this.findTarget(p);this._setCursorFromEvent(p,js),this._fireOverOutEvents(p,js)}this.textEditingManager.onMouseMove(p),this._handleEvent(p,"move"),this._resetTransformEventData()}_fireOverOutEvents(p,Ds){const js=this._hoveredTarget,Fs=this._hoveredTargets,Rs=this.targets,Kn=Math.max(Fs.length,Rs.length);this.fireSyntheticInOutEvents("mouse",{e:p,target:Ds,oldTarget:js,fireCanvas:!0});for(let ro=0;ro<Kn;ro++)this.fireSyntheticInOutEvents("mouse",{e:p,target:Rs[ro],oldTarget:Fs[ro]});this._hoveredTarget=Ds,this._hoveredTargets=this.targets.concat()}_fireEnterLeaveEvents(p,Ds){const js=this._draggedoverTarget,Fs=this._hoveredTargets,Rs=this.targets,Kn=Math.max(Fs.length,Rs.length);this.fireSyntheticInOutEvents("drag",s(s({},Ds),{},{target:p,oldTarget:js,fireCanvas:!0}));for(let ro=0;ro<Kn;ro++)this.fireSyntheticInOutEvents("drag",s(s({},Ds),{},{target:Rs[ro],oldTarget:Fs[ro]}));this._draggedoverTarget=p}fireSyntheticInOutEvents(p,Ds){let{target:js,oldTarget:Fs,fireCanvas:Rs,e:Kn}=Ds,ro=i(Ds,On);const{targetIn:io,targetOut:no,canvasIn:na,canvasOut:ca}=En[p],la=Fs!==js;if(Fs&&la){const ua=s(s({},ro),{},{e:Kn,target:Fs,nextTarget:js},Dn(this,Kn));Rs&&this.fire(ca,ua),Fs.fire(no,ua)}if(js&&la){const ua=s(s({},ro),{},{e:Kn,target:js,previousTarget:Fs},Dn(this,Kn));Rs&&this.fire(na,ua),js.fire(io,ua)}}__onMouseWheel(p){this._cacheTransformEventData(p),this._handleEvent(p,"wheel"),this._resetTransformEventData()}_transformObject(p){const Ds=this.getScenePoint(p),js=this._currentTransform,Fs=js.target,Rs=Fs.group?ke(Ds,void 0,Fs.group.calcTransformMatrix()):Ds;js.shiftKey=p.shiftKey,js.altKey=!!this.centeredKey&&p[this.centeredKey],this._performTransformAction(p,js,Rs),js.actionPerformed&&this.requestRenderAll()}_performTransformAction(p,Ds,js){const{action:Fs,actionHandler:Rs,target:Kn}=Ds,ro=!!Rs&&Rs(p,Ds,js.x,js.y);ro&&Kn.setCoords(),Fs==="drag"&&ro&&(Ds.target.isMoving=!0,this.setCursor(Ds.target.moveCursor||this.moveCursor)),Ds.actionPerformed=Ds.actionPerformed||ro}_setCursorFromEvent(p,Ds){if(!Ds)return void this.setCursor(this.defaultCursor);let js=Ds.hoverCursor||this.hoverCursor;const Fs=re(this._activeObject)?this._activeObject:null,Rs=(!Fs||Ds.group!==Fs)&&Ds.findControl(this.getViewportPoint(p));if(Rs){const Kn=Rs.control;this.setCursor(Kn.cursorStyleHandler(p,Kn,Ds))}else Ds.subTargetCheck&&this.targets.concat().reverse().map((Kn=>{js=Kn.hoverCursor||js})),this.setCursor(js)}handleMultiSelection(p,Ds){const js=this._activeObject,Fs=re(js);if(js&&this._isSelectionKeyPressed(p)&&this.selection&&Ds&&Ds.selectable&&(js!==Ds||Fs)&&(Fs||!Ds.isDescendantOf(js)&&!js.isDescendantOf(Ds))&&!Ds.onSelect({e:p})&&!js.getActiveControl()){if(Fs){const Rs=js.getObjects();if(Ds===js){const Kn=this.getViewportPoint(p);if(!(Ds=this.searchPossibleTargets(Rs,Kn)||this.searchPossibleTargets(this._objects,Kn))||!Ds.selectable)return!1}Ds.group===js?(js.remove(Ds),this._hoveredTarget=Ds,this._hoveredTargets=[...this.targets],js.size()===1&&this._setActiveObject(js.item(0),p)):(js.multiSelectAdd(Ds),this._hoveredTarget=js,this._hoveredTargets=[...this.targets]),this._fireSelectionEvents(Rs,p)}else{js.exitEditing&&js.exitEditing();const Rs=new(tt.getClass("ActiveSelection"))([],{canvas:this});Rs.multiSelectAdd(js,Ds),this._hoveredTarget=Rs,this._setActiveObject(Rs,p),this._fireSelectionEvents([js],p)}return!0}return!1}handleSelection(p){if(!this.selection||!this._groupSelector)return!1;const{x:Ds,y:js,deltaX:Fs,deltaY:Rs}=this._groupSelector,Kn=new ht(Ds,js),ro=Kn.add(new ht(Fs,Rs)),io=Kn.min(ro),no=Kn.max(ro).subtract(io),na=this.collectObjects({left:io.x,top:io.y,width:no.x,height:no.y},{includeIntersecting:!this.selectionFullyContained}),ca=Kn.eq(ro)?na[0]?[na[0]]:[]:na.length>1?na.filter((la=>!la.onSelect({e:p}))).reverse():na;if(ca.length===1)this.setActiveObject(ca[0],p);else if(ca.length>1){const la=tt.getClass("ActiveSelection");this.setActiveObject(new la(ca,{canvas:this}),p)}return this._groupSelector=null,!0}clear(){this.textEditingManager.clear(),super.clear()}destroy(){this.removeListeners(),this.textEditingManager.dispose(),super.destroy()}}const jn={x1:0,y1:0,x2:0,y2:0},Fn=s(s({},jn),{},{r1:0,r2:0}),Ln=/^(\d+\.\d+)%|(\d+)%$/;function Rn($n){return $n&&Ln.test($n)}function Bn($n,p){const Ds=typeof $n=="number"?$n:typeof $n=="string"?parseFloat($n)/(Rn($n)?100:1):NaN;return ts(0,rt(Ds,p),1)}const In=/\s*;\s*/,Xn=/\s*:\s*/;function Wn($n,p){let Ds,js;const Fs=$n.getAttribute("style");if(Fs){const Kn=Fs.split(In);Kn[Kn.length-1]===""&&Kn.pop();for(let ro=Kn.length;ro--;){const[io,no]=Kn[ro].split(Xn).map((na=>na.trim()));io==="stop-color"?Ds=no:io==="stop-opacity"&&(js=no)}}const Rs=new qt(Ds||$n.getAttribute("stop-color")||"rgb(0,0,0)");return{offset:Bn($n.getAttribute("offset"),0),color:Rs.toRgb(),opacity:rt(parseFloat(js||$n.getAttribute("stop-opacity")||""),1)*Rs.getAlpha()*p}}function Yn($n,p){const Ds=[],js=$n.getElementsByTagName("stop"),Fs=Bn(p,1);for(let Rs=js.length;Rs--;)Ds.push(Wn(js[Rs],Fs));return Ds}function Vn($n){return $n.nodeName==="linearGradient"||$n.nodeName==="LINEARGRADIENT"?"linear":"radial"}function Hn($n){return $n.getAttribute("gradientUnits")==="userSpaceOnUse"?"pixels":"percentage"}function Gn($n,p){return $n.getAttribute(p)}function zn($n,p){return(function(Ds,js){let Fs,{width:Rs,height:Kn,gradientUnits:ro}=js;return Object.keys(Ds).reduce(((io,no)=>{const na=Ds[no];return na==="Infinity"?Fs=1:na==="-Infinity"?Fs=0:(Fs=typeof na=="string"?parseFloat(na):na,typeof na=="string"&&Rn(na)&&(Fs*=.01,ro==="pixels"&&(no!=="x1"&&no!=="x2"&&no!=="r2"||(Fs*=Rs),no!=="y1"&&no!=="y2"||(Fs*=Kn)))),io[no]=Fs,io}),{})})(Vn($n)==="linear"?(function(Ds){return{x1:Gn(Ds,"x1")||0,y1:Gn(Ds,"y1")||0,x2:Gn(Ds,"x2")||"100%",y2:Gn(Ds,"y2")||0}})($n):(function(Ds){return{x1:Gn(Ds,"fx")||Gn(Ds,"cx")||"50%",y1:Gn(Ds,"fy")||Gn(Ds,"cy")||"50%",r1:0,x2:Gn(Ds,"cx")||"50%",y2:Gn(Ds,"cy")||"50%",r2:Gn(Ds,"r")||"50%"}})($n),s(s({},p),{},{gradientUnits:Hn($n)}))}class Nn{constructor(p){let{type:Ds="linear",gradientUnits:js="pixels",coords:Fs={},colorStops:Rs=[],offsetX:Kn=0,offsetY:ro=0,gradientTransform:io,id:no}=p;this.id=no?"".concat(no,"_").concat(mt()):mt(),this.type=Ds,this.gradientUnits=js,this.gradientTransform=io,this.offsetX=Kn,this.offsetY=ro,this.coords=s(s({},this.type==="radial"?Fn:jn),Fs),this.colorStops=Rs.slice()}addColorStop(p){for(const Ds in p){const js=new qt(p[Ds]);this.colorStops.push({offset:parseFloat(Ds),color:js.toRgb(),opacity:js.getAlpha()})}return this}toObject(p){return s(s({},Wt(this,p)),{},{type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?[...this.gradientTransform]:void 0})}toSVG(p){let{additionalTransform:Ds}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const js=[],Fs=this.gradientTransform?this.gradientTransform.concat():O.concat(),Rs=this.gradientUnits==="pixels"?"userSpaceOnUse":"objectBoundingBox",Kn=this.colorStops.map((ca=>s({},ca))).sort(((ca,la)=>ca.offset-la.offset));let ro=-this.offsetX,io=-this.offsetY;var no;Rs==="objectBoundingBox"?(ro/=p.width,io/=p.height):(ro+=p.width/2,io+=p.height/2),(no=p)&&typeof no._renderPathCommands=="function"&&this.gradientUnits!=="percentage"&&(ro-=p.pathOffset.x,io-=p.pathOffset.y),Fs[4]-=ro,Fs[5]-=io;const na=['id="SVGID_'.concat(this.id,'"'),'gradientUnits="'.concat(Rs,'"'),'gradientTransform="'.concat(Ds?Ds+" ":"").concat(Qt(Fs),'"'),""].join(" ");if(this.type==="linear"){const{x1:ca,y1:la,x2:ua,y2:da}=this.coords;js.push("<linearGradient ",na,' x1="',ca,'" y1="',la,'" x2="',ua,'" y2="',da,`"> 42`)}else if(this.type==="radial"){const{x1:ca,y1:la,x2:ua,y2:da,r1:ga,r2:pa}=this.coords,ma=ga>pa;js.push("<radialGradient ",na,' cx="',ma?ca:ua,'" cy="',ma?la:da,'" r="',ma?ga:pa,'" fx="',ma?ua:ca,'" fy="',ma?da:la,`"> 43`),ma&&(Kn.reverse(),Kn.forEach((wa=>{wa.offset=1-wa.offset})));const xa=Math.min(ga,pa);if(xa>0){const wa=xa/Math.max(ga,pa);Kn.forEach((Oa=>{Oa.offset+=wa*(1-Oa.offset)}))}}return Kn.forEach((ca=>{let{color:la,offset:ua,opacity:da}=ca;js.push("<stop ",'offset="',100*ua+"%",'" style="stop-color:',la,da!==void 0?";stop-opacity: "+da:";",`"/> 44`)})),js.push(this.type==="linear"?"</linearGradient>":"</radialGradient>",` 45`),js.join("")}toLive(p){const Ds=this.coords,js=this.type==="linear"?p.createLinearGradient(Ds.x1,Ds.y1,Ds.x2,Ds.y2):p.createRadialGradient(Ds.x1,Ds.y1,Ds.r1,Ds.x2,Ds.y2,Ds.r2);return this.colorStops.forEach((Fs=>{let{color:Rs,opacity:Kn,offset:ro}=Fs;js.addColorStop(ro,Kn!==void 0?new qt(Rs).setAlpha(Kn).toRgba():Rs)})),js}static async fromObject(p){return new this(p)}static fromElement(p,Ds,js){const Fs=Hn(p),Rs=Ds._findCenterFromElement();return new this(s({id:p.getAttribute("id")||void 0,type:Vn(p),coords:zn(p,{width:js.viewBoxWidth||js.width,height:js.viewBoxHeight||js.height}),colorStops:Yn(p,js.opacity),gradientUnits:Fs,gradientTransform:dr(p.getAttribute("gradientTransform")||"")},Fs==="pixels"?{offsetX:Ds.width/2-Rs.x,offsetY:Ds.height/2-Rs.y}:{offsetX:0,offsetY:0}))}}t(Nn,"type","Gradient"),tt.setClass(Nn,"gradient"),tt.setClass(Nn,"linear"),tt.setClass(Nn,"radial");const Un=["type","source"];class qn{get type(){return"pattern"}set type(p){h("warn","Setting type has no effect",p)}constructor(p){t(this,"repeat","repeat"),t(this,"offsetX",0),t(this,"offsetY",0),t(this,"crossOrigin",""),t(this,"patternTransform",null),this.id=mt(),Object.assign(this,p)}isImageSource(){return!!this.source&&typeof this.source.src=="string"}isCanvasSource(){return!!this.source&&!!this.source.toDataURL}sourceToString(){return this.isImageSource()?this.source.src:this.isCanvasSource()?this.source.toDataURL():""}toLive(p){return this.source&&(!this.isImageSource()||this.source.complete&&this.source.naturalWidth!==0&&this.source.naturalHeight!==0)?p.createPattern(this.source,this.repeat):null}toObject(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];const{repeat:Ds,crossOrigin:js}=this;return s(s({},Wt(this,p)),{},{type:"pattern",source:this.sourceToString(),repeat:Ds,crossOrigin:js,offsetX:Kt(this.offsetX,a.NUM_FRACTION_DIGITS),offsetY:Kt(this.offsetY,a.NUM_FRACTION_DIGITS),patternTransform:this.patternTransform?[...this.patternTransform]:null})}toSVG(p){let{width:Ds,height:js}=p;const{source:Fs,repeat:Rs,id:Kn}=this,ro=rt(this.offsetX/Ds,0),io=rt(this.offsetY/js,0),no=Rs==="repeat-y"||Rs==="no-repeat"?1+Math.abs(ro||0):rt(Fs.width/Ds,0),na=Rs==="repeat-x"||Rs==="no-repeat"?1+Math.abs(io||0):rt(Fs.height/js,0);return['<pattern id="SVGID_'.concat(Kn,'" x="').concat(ro,'" y="').concat(io,'" width="').concat(no,'" height="').concat(na,'">'),'<image x="0" y="0" width="'.concat(Fs.width,'" height="').concat(Fs.height,'" xlink:href="').concat(this.sourceToString(),'"></image>'),"</pattern>",""].join(` 46`)}static async fromObject(p,Ds){let{type:js,source:Fs}=p,Rs=i(p,Un);const Kn=await Bt(Fs,s(s({},Ds),{},{crossOrigin:Rs.crossOrigin}));return new this(s(s({},Rs),{},{source:Kn}))}}t(qn,"type","Pattern"),tt.setClass(qn),tt.setClass(qn,"pattern");const Jn=["path","left","top"],Zn=["d"];class Qn extends Oi{constructor(p){let Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{path:js,left:Fs,top:Rs}=Ds,Kn=i(Ds,Jn);super(),Object.assign(this,Qn.ownDefaults),this.setOptions(Kn),this._setPath(p||[],!0),typeof Fs=="number"&&this.set(P,Fs),typeof Rs=="number"&&this.set(E,Rs)}_setPath(p,Ds){this.path=en(Array.isArray(p)?p:vn(p)),this.setBoundingBox(Ds)}_findCenterFromElement(){const p=this._calcBoundsFromPath();return new ht(p.left+p.width/2,p.top+p.height/2)}_renderPathCommands(p){const Ds=-this.pathOffset.x,js=-this.pathOffset.y;p.beginPath();for(const Fs of this.path)switch(Fs[0]){case"L":p.lineTo(Fs[1]+Ds,Fs[2]+js);break;case"M":p.moveTo(Fs[1]+Ds,Fs[2]+js);break;case"C":p.bezierCurveTo(Fs[1]+Ds,Fs[2]+js,Fs[3]+Ds,Fs[4]+js,Fs[5]+Ds,Fs[6]+js);break;case"Q":p.quadraticCurveTo(Fs[1]+Ds,Fs[2]+js,Fs[3]+Ds,Fs[4]+js);break;case"Z":p.closePath()}}_render(p){this._renderPathCommands(p),this._renderPaintInOrder(p)}toString(){return"#<Path (".concat(this.complexity(),'): { "top": ').concat(this.top,', "left"
46: ').concat(this.left," }>")}toObject(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return s(s({},super.toObject(p)),{},{path:this.path.map((Ds=>Ds.slice()))})}toDatalessObject(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];const Ds=this.toObject(p);return this.sourcePath&&(delete Ds.path,Ds.sourcePath=this.sourcePath),Ds}_toSVG(){const p=_n(this.path,a.NUM_FRACTION_DIGITS);return["<path ","COMMON_PARTS",'d="'.concat(p,`" stroke-linecap="round" /> 47`)]}_getOffsetTransform(){const p=a.NUM_FRACTION_DIGITS;return" translate(".concat(Kt(-this.pathOffset.x,p),", ").concat(Kt(-this.pathOffset.y,p),")")}toClipPathSVG(p){const Ds=this._getOffsetTransform();return" "+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:p,additionalTransform:Ds})}toSVG(p){const Ds=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:p,additionalTransform:Ds})}complexity(){return this.path.length}setDimensions(){this.setBoundingBox()}setBoundingBox(p){const{width:Ds,height:js,pathOffset:Fs}=this._calcDimensions();this.set({width:Ds,height:js,pathOffset:Fs}),p&&this.setPositionByOrigin(Fs,M,M)}_calcBoundsFromPath(){const p=[];let Ds=0,js=0,Fs=0,Rs=0;for(const Kn of this.path)switch(Kn[0]){case"L":Fs=Kn[1],Rs=Kn[2],p.push(new ht(Ds,js),new ht(Fs,Rs));break;case"M":Fs=Kn[1],Rs=Kn[2],Ds=Fs,js=Rs;break;case"C":p.push(...$r(Fs,Rs,Kn[1],Kn[2],Kn[3],Kn[4],Kn[5],Kn[6])),Fs=Kn[5],Rs=Kn[6];break;case"Q":p.push(...$r(Fs,Rs,Kn[1],Kn[2],Kn[1],Kn[2],Kn[3],Kn[4])),Fs=Kn[3],Rs=Kn[4];break;case"Z":Fs=Ds,Rs=js}return _e(p)}_calcDimensions(){const p=this._calcBoundsFromPath();return s(s({},p),{},{pathOffset:new ht(p.left+p.width/2,p.top+p.height/2)})}static fromObject(p){return this._fromObject(p,{extraParam:"path"})}static async fromElement(p,Ds,js){const Fs=vr(p,this.ATTRIBUTE_NAMES,js),{d:Rs}=Fs;return new this(Rs,s(s(s({},i(Fs,Zn)),Ds),{},{left:void 0,top:void 0}))}}t(Qn,"type","Path"),t(Qn,"cacheProperties",[...Vs,"path","fillRule"]),t(Qn,"ATTRIBUTE_NAMES",[...Wi,"d"]),tt.setClass(Qn),tt.setSVGClass(Qn);const to=["left","top","radius"],eo=["radius","startAngle","endAngle","counterClockwise"];class so extends Oi{static getDefaults(){return s(s({},super.getDefaults()),so.ownDefaults)}constructor(p){super(),Object.assign(this,so.ownDefaults),this.setOptions(p)}_set(p,Ds){return super._set(p,Ds),p==="radius"&&this.setRadius(Ds),this}_render(p){p.beginPath(),p.arc(0,0,this.radius,xt(this.startAngle),xt(this.endAngle),this.counterClockwise),this._renderPaintInOrder(p)}getRadiusX(){return this.get("radius")*this.get(z)}getRadiusY(){return this.get("radius")*this.get(N)}setRadius(p){this.radius=p,this.set({width:2*p,height:2*p})}toObject(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];
vendor: 17,065 bytes, lines 47-53
47return super.toObject([...eo,...p])}_toSVG(){const p=(this.endAngle-this.startAngle)%360;if(p===0)return["<circle ","COMMON_PARTS",'cx="0" cy="0" ','r="',"".concat(this.radius),`" /> 48`];{const{radius:Ds}=this,js=xt(this.startAngle),Fs=xt(this.endAngle),Rs=ot(js)*Ds,Kn=at(js)*Ds,ro=ot(Fs)*Ds,io=at(Fs)*Ds,no=p>180?1:0,na=this.counterClockwise?0:1;return['<path d="M '.concat(Rs," ").concat(Kn," A ").concat(Ds," ").concat(Ds," 0 ").concat(no," ").concat(na," ").concat(ro," ").concat(io,'" '),"COMMON_PARTS",` /> 49`]}}static async fromElement(p,Ds,js){const Fs=vr(p,this.ATTRIBUTE_NAMES,js),{left:Rs=0,top:Kn=0,radius:ro=0}=Fs;return new this(s(s({},i(Fs,to)),{},{radius:ro,left:Rs-ro,top:Kn-ro}))}static fromObject(p){return super._fromObject(p)}}t(so,"type","Circle"),t(so,"cacheProperties",[...Vs,...eo]),t(so,"ownDefaults",{radius:0,startAngle:0,endAngle:360,counterClockwise:!1}),t(so,"ATTRIBUTE_NAMES",["cx","cy","r",...Wi]),tt.setClass(so),tt.setSVGClass(so);const oo=["x1","y1","x2","y2"],ao=["x1","y1","x2","y2"],ho=["x1","x2","y1","y2"];class co extends Oi{constructor(){let[p,Ds,js,Fs]=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[0,0,0,0],Rs=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),Object.assign(this,co.ownDefaults),this.setOptions(Rs),this.x1=p,this.x2=js,this.y1=Ds,this.y2=Fs,this._setWidthHeight();const{left:Kn,top:ro}=Rs;typeof Kn=="number"&&this.set(P,Kn),typeof ro=="number"&&this.set(E,ro)}_setWidthHeight(){const{x1:p,y1:Ds,x2:js,y2:Fs}=this;this.width=Math.abs(js-p),this.height=Math.abs(Fs-Ds);const{left:Rs,top:Kn,width:ro,height:io}=_e([{x:p,y:Ds},{x:js,y:Fs}]),no=new ht(Rs+ro/2,Kn+io/2);this.setPositionByOrigin(no,M,M)}_set(p,Ds){return super._set(p,Ds),ho.includes(p)&&this._setWidthHeight(),this}_render(p){p.beginPath();const Ds=this.calcLinePoints();p.moveTo(Ds.x1,Ds.y1),p.lineTo(Ds.x2,Ds.y2),p.lineWidth=this.strokeWidth;const js=p.strokeStyle;var Fs;te(this.stroke)?p.strokeStyle=this.stroke.toLive(p):p.strokeStyle=(Fs=this.stroke)!==null&&Fs!==void 0?Fs:p.fillStyle,this.stroke&&this._renderStroke(p),p.strokeStyle=js}_findCenterFromElement(){return new ht((this.x1+this.x2)/2,(this.y1+this.y2)/2)}toObject(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return s(s({},super.toObject(p)),this.calcLinePoints())}_getNonTransformedDimensions(){const p=super._getNonTransformedDimensions();return this.strokeLineCap==="butt"&&(this.width===0&&(p.y-=this.strokeWidth),this.height===0&&(p.x-=this.strokeWidth)),p}calcLinePoints(){const{x1:p,x2:Ds,y1:js,y2:Fs,width:Rs,height:Kn}=this,ro=p<=Ds?-1:1,io=js<=Fs?-1:1;return{x1:ro*Rs/2,x2:ro*-Rs/2,y1:io*Kn/2,y2:io*-Kn/2}}_toSVG(){const{x1:p,x2:Ds,y1:js,y2:Fs}=this.calcLinePoints();return["<line ","COMMON_PARTS",'x1="'.concat(p,'" y1="').concat(js,'" x2="').concat(Ds,'" y2="').concat(Fs,`" /> 50`)]}static async fromElement(p,Ds,js){const Fs=vr(p,this.ATTRIBUTE_NAMES,js),{x1:Rs=0,y1:Kn=0,x2:ro=0,y2:io=0}=Fs;return new this([Rs,Kn,ro,io],i(Fs,oo))}static fromObject(p){let{x1:Ds,y1:js,x2:Fs,y2:Rs}=p,Kn=i(p,ao);return this._fromObject(s(s({},Kn),{},{points:[Ds,js,Fs,Rs]}),{extraParam:"points"})}}t(co,"type","Line"),t(co,"cacheProperties",[...Vs,...ho]),t(co,"ATTRIBUTE_NAMES",Wi.concat(ho)),tt.setClass(co),tt.setSVGClass(co);class lo extends Oi{static getDefaults(){return s(s({},super.getDefaults()),lo.ownDefaults)}constructor(p){super(),Object.assign(this,lo.ownDefaults),this.setOptions(p)}_render(p){const Ds=this.width/2,js=this.height/2;p.beginPath(),p.moveTo(-Ds,js),p.lineTo(0,-js),p.lineTo(Ds,js),p.closePath(),this._renderPaintInOrder(p)}_toSVG(){const p=this.width/2,Ds=this.height/2;return["<polygon ","COMMON_PARTS",'points="',"".concat(-p," ").concat(Ds,",0 ").concat(-Ds,",").concat(p," ").concat(Ds),'" />']}}t(lo,"type","Triangle"),t(lo,"ownDefaults",{width:100,height:100}),tt.setClass(lo),tt.setSVGClass(lo);const uo=["rx","ry"];class go extends Oi{static getDefaults(){return s(s({},super.getDefaults()),go.ownDefaults)}constructor(p){super(),Object.assign(this,go.ownDefaults),this.setOptions(p)}_set(p,Ds){switch(super._set(p,Ds),p){case"rx":this.rx=Ds,this.set("width",2*Ds);break;case"ry":this.ry=Ds,this.set("height",2*Ds)}return this}getRx(){return this.get("rx")*this.get(z)}getRy(){return this.get("ry")*this.get(N)}toObject(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return super.toObject([...uo,...p])}_toSVG(){return["<ellipse ","COMMON_PARTS",'cx="0" cy="0" rx="'.concat(this.rx,'" ry="').concat(this.ry,`" /> 51`)]}_render(p){p.beginPath(),p.save(),p.transform(1,0,0,this.ry/this.rx,0,0),p.arc(0,0,this.rx,0,S,!1),p.restore(),this._renderPaintInOrder(p)}static async fromElement(p,Ds,js){const Fs=vr(p,this.ATTRIBUTE_NAMES,js);return Fs.left=(Fs.left||0)-Fs.rx,Fs.top=(Fs.top||0)-Fs.ry,new this(Fs)}}function fo($n){if(!$n)return[];const p=$n.replace(/,/g," ").trim().split(/\s+/),Ds=[];for(let js=0;js<p.length;js+=2)Ds.push({x:parseFloat(p[js]),y:parseFloat(p[js+1])});return Ds}t(go,"type","Ellipse"),t(go,"cacheProperties",[...Vs,...uo]),t(go,"ownDefaults",{rx:0,ry:0}),t(go,"ATTRIBUTE_NAMES",[...Wi,"cx","cy","rx","ry"]),tt.setClass(go),tt.setSVGClass(go);const po=["left","top"],mo={exactBoundingBox:!1};class vo extends Oi{static getDefaults(){return s(s({},super.getDefaults()),vo.ownDefaults)}constructor(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),t(this,"strokeDiff",void 0),Object.assign(this,vo.ownDefaults),this.setOptions(Ds),this.points=p;const{left:js,top:Fs}=Ds;this.initialized=!0,this.setBoundingBox(!0),typeof js=="number"&&this.set(P,js),typeof Fs=="number"&&this.set(E,Fs)}isOpen(){return!0}_projectStrokeOnPoints(p){return Ai(this.points,p,this.isOpen())}_calcDimensions(p){p=s({scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:this.strokeMiterLimit,strokeUniform:this.strokeUniform,strokeWidth:this.strokeWidth},p||{});const Ds=this.exactBoundingBox?this._projectStrokeOnPoints(p).map((no=>no.projectedPoint)):this.points;if(Ds.length===0)return{left:0,top:0,width:0,height:0,pathOffset:new ht,strokeOffset:new ht,strokeDiff:new ht};const js=_e(Ds),Fs=Lt(s(s({},p),{},{scaleX:1,scaleY:1})),Rs=_e(this.points.map((no=>wt(no,Fs,!0)))),Kn=new ht(this.scaleX,this.scaleY);let ro=js.left+js.width/2,io=js.top+js.height/2;return this.exactBoundingBox&&(ro-=io*Math.tan(xt(this.skewX)),io-=ro*Math.tan(xt(this.skewY))),s(s({},js),{},{pathOffset:new ht(ro,io),strokeOffset:new ht(Rs.left,Rs.top).subtract(new ht(js.left,js.top)).multiply(Kn),strokeDiff:new ht(js.width,js.height).subtract(new ht(Rs.width,Rs.height)).multiply(Kn)})}_findCenterFromElement(){const p=_e(this.points);return new ht(p.left+p.width/2,p.top+p.height/2)}setDimensions(){this.setBoundingBox()}setBoundingBox(p){const{left:Ds,top:js,width:Fs,height:Rs,pathOffset:Kn,strokeOffset:ro,strokeDiff:io}=this._calcDimensions();this.set({width:Fs,height:Rs,pathOffset:Kn,strokeOffset:ro,strokeDiff:io}),p&&this.setPositionByOrigin(new ht(Ds+Fs/2,js+Rs/2),M,M)}isStrokeAccountedForInDimensions(){return this.exactBoundingBox}_getNonTransformedDimensions(){return this.exactBoundingBox?new ht(this.width,this.height):super._getNonTransformedDimensions()}_getTransformedDimensions(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(this.exactBoundingBox){let Kn;if(Object.keys(p).some((ro=>this.strokeUniform||this.constructor.layoutProperties.includes(ro)))){var Ds,js;const{width:ro,height:io}=this._calcDimensions(p);Kn=new ht((Ds=p.width)!==null&&Ds!==void 0?Ds:ro,(js=p.height)!==null&&js!==void 0?js:io)}else{var Fs,Rs;Kn=new ht((Fs=p.width)!==null&&Fs!==void 0?Fs:this.width,(Rs=p.height)!==null&&Rs!==void 0?Rs:this.height)}return Kn.multiply(new ht(p.scaleX||this.scaleX,p.scaleY||this.scaleY))}return super._getTransformedDimensions(p)}_set(p,Ds){const js=this.initialized&&this[p]!==Ds,Fs=super._set(p,Ds);return this.exactBoundingBox&&js&&((p===z||p===N)&&this.strokeUniform&&this.constructor.layoutProperties.includes("strokeUniform")||this.constructor.layoutProperties.includes(p))&&this.setDimensions(),Fs}toObject(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return s(s({},super.toObject(p)),{},{points:Ws(this.points)})}_toSVG(){const p=[],Ds=this.pathOffset.x,js=this.pathOffset.y,Fs=a.NUM_FRACTION_DIGITS;for(let Rs=0,Kn=this.points.length;Rs<Kn;Rs++)p.push(Kt(this.points[Rs].x-Ds,Fs),",",Kt(this.points[Rs].y-js,Fs)," ");return["<".concat(this.constructor.type.toLowerCase()," "),"COMMON_PARTS",'points="'.concat(p.join(""),`" /> 52`)]}_render(p){const Ds=this.points.length,js=this.pathOffset.x,Fs=this.pathOffset.y;if(Ds&&!isNaN(this.points[Ds-1].y)){p.beginPath(),p.moveTo(this.points[0].x-js,this.points[0].y-Fs);for(let Rs=0;Rs<Ds;Rs++){const Kn=this.points[Rs];p.lineTo(Kn.x-js,Kn.y-Fs)}!this.isOpen()&&p.closePath(),this._renderPaintInOrder(p)}}complexity(){return this.points.length}static async fromElement(p,Ds,js){return new this(fo(p.getAttribute("points")),s(s({},i(vr(p,this.ATTRIBUTE_NAMES,js),po)),Ds))}static fromObject(p){return this._fromObject(p,{extraParam:"points"})}}t(vo,"ownDefaults",mo),t(vo,"type","Polyline"),t(vo,"layoutProperties",[U,q,"strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeWidth","strokeUniform","points"]),t(vo,"cacheProperties",[...Vs,"points"]),t(vo,"ATTRIBUTE_NAMES",[...Wi]),tt.setClass(vo),tt.setSVGClass(vo);class yo extends vo{isOpen(){return!1}}t(yo,"ownDefaults",mo),t(yo,"type","Polygon"),tt.setClass(yo),tt.setSVGClass(yo);const _o=["fontSize","fontWeight","fontFamily","fontStyle"],xo=["underline","overline","linethrough"],Co=[..._o,"lineHeight","text","charSpacing","textAlign","styles","path","pathStartOffset","pathSide","pathAlign"],bo=[...Co,...xo,"textBackgroundColor","direction"],wo=[..._o,...xo,J,"strokeWidth",K,"deltaY","textBackgroundColor"],So={_reNewline:L,_reSpacesAndTabs:/[ \t\r]/g,_reSpaceAndTab:/[ \t\r]/,_reWords:/\S+/g,fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",underline:!1,overline:!1,linethrough:!1,textAlign:P,fontStyle:"normal",lineHeight:1.16,superscript:{size:.6,baseline:-.35},subscript:{size:.6,baseline:.11},textBackgroundColor:"",stroke:null,shadow:null,path:void 0,pathStartOffset:0,pathSide:P,pathAlign:"baseline",_fontSizeFraction:.222,offsets:{underline:.1,linethrough:-.315,overline:-.88},_fontSizeMult:1.13,charSpacing:0,deltaY:0,direction:"ltr",CACHE_FONT_SIZE:400,MIN_TEXT_WIDTH:2},To="justify",Oo="justify-left",ko="justify-right",Do="justify-center";class Mo extends Oi{isEmptyStyles(p){if(!this.styles||p!==void 0&&!this.styles[p])return!0;const Ds=p===void 0?this.styles:{line:this.styles[p]};for(const js in Ds)for(const Fs in Ds[js])for(const Rs in Ds[js][Fs])return!1;return!0}styleHas(p,Ds){if(!this.styles||Ds!==void 0&&!this.styles[Ds])return!1;const js=Ds===void 0?this.styles:{0:this.styles[Ds]};for(const Fs in js)for(const Rs in js[Fs])if(js[Fs][Rs][p]!==void 0)return!0;return!1}cleanStyle(p){if(!this.styles)return!1;const Ds=this.styles;let js,Fs,Rs=0,Kn=!0,ro=0;for(const io in Ds){js=0;for(const no in Ds[io]){const na=Ds[io][no]||{};Rs++,na[p]!==void 0?(Fs?na[p]!==Fs&&(Kn=!1):Fs=na[p],na[p]===this[p]&&delete na[p]):Kn=!1,Object.keys(na).length!==0?js++:delete Ds[io][no]}js===0&&delete Ds[io]}for(let io=0;io<this._textLines.length;io++)ro+=this._textLines[io].length;Kn&&Rs===ro&&(this[p]=Fs,this.removeStyle(p))}removeStyle(p){if(!this.styles)return;const Ds=this.styles;let js,Fs,Rs;for(Fs in Ds){for(Rs in js=Ds[Fs],js)delete js[Rs][p],Object.keys(js[Rs]).length===0&&delete js[Rs];Object.keys(js).length===0&&delete Ds[Fs]}}_extendStyles(p,Ds){const{lineIndex:js,charIndex:Fs}=this.get2DCursorLocation(p);this._getLineStyle(js)||this._setLineStyle(js);const Rs=Yt(s(s({},this._getStyleDeclaration(js,Fs)),Ds),(Kn=>Kn!==void 0));this._setStyleDeclaration(js,Fs,Rs)}getSelectionStyles(p,Ds,js){const Fs=[];for(let Rs=p;Rs<(Ds||p);Rs++)Fs.push(this.getStyleAtPosition(Rs,js));return Fs}getStyleAtPosition(p,Ds){const{lineIndex:js,charIndex:Fs}=this.get2DCursorLocation(p);return Ds?this.getCompleteStyleDeclaration(js,Fs):this._getStyleDeclaration(js,Fs)}setSelectionStyles(p,Ds,js){for(let Fs=Ds;Fs<(js||Ds);Fs++)this._extendStyles(Fs,p);this._forceClearCache=!0}_getStyleDeclaration(p,Ds){var js;const Fs=this.styles&&this.styles[p];return Fs&&(js=Fs[Ds])!==null&&js!==void 0?js:{}}getCompleteStyleDeclaration(p,Ds){return s(s({},Wt(this,this.constructor._styleProperties)),this._getStyleDeclaration(p,Ds))}_setStyleDeclaration(p,Ds,js){this.styles[p][Ds]=js}_deleteStyleDeclaration(p,Ds){delete this.styles[p][Ds]}_getLineStyle(p){return!!this.styles[p]}_setLineStyle(p){this.styles[p]={}}_deleteLineStyle(p){delete this.styles[p]}}t(Mo,"_styleProperties",wo);const Po=/ +/g,Eo=/"/g;function Ao($n,p,Ds,js,Fs){return" ".concat((function(Rs,Kn){let{left:ro,top:io,width:no,height:na}=Kn,ca=arguments.length>2&&arguments[2]!==void 0?arguments[2]:a.NUM_FRACTION_DIGITS;const la=$t(K,Rs,!1),[ua,da,ga,pa]=[ro,io,no,na].map((ma=>Kt(ma,ca)));return"<rect ".concat(la,' x="').concat(ua,'" y="').concat(da,'" width="').concat(ga,'" height="').concat(pa,'"></rect>')})($n,{left:p,top:Ds,width:js,height:Fs}),` 53`)}const jo=["textAnchor","textDecoration","dx","dy","top","left","fontSize","strokeWidth"];let Fo;class Lo extends Mo{static getDefaults(){return s(s({},super.getDefaults()),Lo.ownDefaults)}constructor(p,Ds){super(),t(this,"__charBounds",[]),Object.assign(this,Lo.ownDefaults),this.setOptions(Ds),this.styles||(this.styles={}),this.text=p,this.initialized=!0,this.path&&this.setPathInfo(),this.initDimensions(),this.setCoords()}setPathInfo(){const p=this.path;p&&(p.segmentsInfo=gn(p.path))}_splitText(){const p=this._splitTextIntoLines(this.text);return this.textLines=p.lines,this._textLines=p.graphemeLines,this._unwrappedTextLines=p._unwrappedLines,this._text=p.graphemeText,p}initDimensions(){this._splitText(),this._clearCache(),this.dirty=!0,this.path?(this.width=this.path.width,this.height=this.path.height):(this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,this.height=this.calcTextHeight()),this.textAlign.includes(To)&&this.enlargeSpaces()}enlargeSpaces(){let p,Ds,js,Fs,Rs,Kn,ro;for(let io=0,no=this._textLines.length;io<no;io++)if((this.textAlign===To||io!==no-1&&!this.isEndOfWrapping(io))&&(Fs=0,Rs=this._textLines[io],Ds=this.getLineWidth(io),Ds<this.width&&(ro=this.textLines[io].match(this._reSpacesAndTabs)))){js=ro.length,p=(this.width-Ds)/js;for(let na=0;na<=Rs.length;na++)Kn=this.__charBounds[io][na],this._reSpaceAndTab.test(Rs[na])?(Kn.width+=p,Kn.kernedWidth+=p,Kn.left+=Fs,Fs+=p):Kn.left+=Fs}}isEndOfWrapping(p){return p===this._textLines.length-1}missingNewlineOffset(p){return 1}get2DCursorLocation(p,Ds){const js=Ds?this._unwrappedTextLines:this._textLines;let Fs;for(Fs=0;Fs<js.length;Fs++){if(p<=js[Fs].length)return{lineIndex:Fs,charIndex:p};p-=js[Fs].length+this.missingNewlineOffset(Fs,Ds)}return{lineIndex:Fs-1,charIndex:js[Fs-1].length<p?js[Fs-1].length:p}}toString(){return"#<Text (".concat(this.complexity(),'): { "text": "').concat(this.text,'", "fontFamily": "').concat(this.fontFamily,'" }>')}_getCacheCanvasDimensions(){const p=super._getCacheCanvasDimensions(),Ds=this.fontSize;return p.width+=Ds*p.zoomX,p.height+=Ds*p.zoomY,p}_render(p){const Ds=this.path;Ds&&!Ds.isNotVisible()&&Ds._render(p),this._setTextStyles(p),this._renderTextLinesBackground(p),this._renderTextDecoration(p,"underline"),this._renderText(p),this._renderTextDecoration(p,"overline"),this._renderTextDecoration(p,"linethrough")}_renderText(p){this.paintFirst===J?(this._renderTextStroke(p),this._renderTextFill(p)):(this._renderTextFill(p),this._renderTextStroke(p))}_setTextStyles(p,Ds,js){if(p.textBaseline="alphabetic",this.path)switch(this.pathAlign){case M:p.textBaseline="middle";break;case"ascender":p.textBaseline=E;break;case"descender":p.textBaseline=A}p.font=this._getFontDeclaration(Ds,js)}calcTextWidth(){let p=this.getLineWidth(0);for(let Ds=1,js=this._textLines.length;Ds<js;Ds++){const Fs=this.getLineWidth(Ds);Fs>p&&(p=Fs)}return p}_renderTextLine(p,Ds,js,Fs,Rs,Kn){this._renderChars(p,Ds,js,Fs,Rs,Kn)}_renderTextLinesBackground(p){if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor"))return;const Ds=p.fillStyle,js=this._getLeftOffset();let Fs=this._getTopOffset();for(let Rs=0,Kn=this._textLines.length;Rs<Kn;Rs++){const ro=this.getHeightOfLine(Rs);if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor",Rs)){Fs+=ro;continue}const io=this._textLines[Rs].length,no=this._getLineLeftOffset(Rs);let na,ca,la=0,ua=0,da=this.getValueOfPropertyAt(Rs,0,"textBackgroundColor");for(let ga=0;ga<io;ga++){const pa=this.__charBounds[Rs][ga];ca=this.getValueOfPropertyAt(Rs,ga,"textBackgroundColor"),this.path?(p.save(),p.translate(pa.renderLeft,pa.renderTop),p.rotate(pa.angle),p.fillStyle=ca,ca&&p.fillRect(-pa.width/2,-ro/this.lineHeight*(1-this._fontSizeFraction),pa.width,ro/this.lineHeight),p.restore(
53)):ca!==da?(na=js+no+ua,this.direction==="rtl"&&(na=this.width-na-la),p.fillStyle=da,da&&p.fillRect(na,Fs,la,ro/this.lineHeight),ua=pa.left,la=pa.width,da=ca):la+=pa.kernedWidth}ca&&!this.path&&(na=js+no+ua,this.direction==="rtl"&&(na=this.width-na-la),p.fillStyle=ca,p.fillRect(na,Fs,la,ro/this.lineHeight)),Fs+=ro}p.fillStyle=Ds,this._removeShadow(p)}_measureChar(p,Ds,js,Fs){const Rs=x.getFontCache(Ds),Kn=this._getFontDeclaration(Ds),ro=js+p,io=js&&Kn===this._getFontDeclaration(Fs),no=Ds.fontSize/this.CACHE_FONT_SIZE;let na,ca,la,ua;if(js&&Rs[js]!==void 0&&(la=Rs[js]),Rs[p]!==void 0&&(ua=na=Rs[p]),io&&Rs[ro]!==void 0&&(ca=Rs[ro],ua=ca-la),na===void 0||la===void 0||ca===void 0){const da=(function(){if(!Fo){const ga=vt();ga.width=ga.height=0,Fo=ga.getContext("2d")}return Fo})();this._setTextStyles(da,Ds,!0),na===void 0&&(ua=na=da.measureText(p).width,Rs[p]=na),la===void 0&&io&&js&&(la=da.measureText(js).width,Rs[js]=la),io&&ca===void 0&&(ca=da.measureText(ro).width,Rs[ro]=ca,ua=ca-la)}return{width:na*no,kernedWidth:ua*no}}getHeightOfChar(p,Ds){return this.getValueOfPropertyAt(p,Ds,"fontSize")}measureLine(p){const Ds=this._measureLine(p);return this.charSpacing!==0&&(Ds.width-=this._getWidthOfCharSpacing()),Ds.width<0&&(Ds.width=0),Ds}_measureLine(p){let Ds,js,Fs=0;const Rs=this.pathSide===j,Kn=this.path,ro=this._textLines[p],io=ro.length,no=new Array(io);this.__charBounds[p]=no;for(let na=0;na<io;na++){const ca=ro[na];js=this._getGraphemeBox(ca,p,na,Ds),no[na]=js,Fs+=js.kernedWidth,Ds=ca}if(no[io]={left:js?js.left+js.width:0,width:0,kernedWidth:0,height:this.fontSize,deltaY:0},Kn&&Kn.segmentsInfo){let na=0;const ca=Kn.segmentsInfo[Kn.segmentsInfo.length-1].length;switch(this.textAlign){case P:na=Rs?ca-Fs:0;break;case M:na=(ca-Fs)/2;break;case j:na=Rs?0:ca-Fs}na+=this.pathStartOffset*(Rs?-1:1);for(let la=Rs?io-1:0;Rs?la>=0:la<io;Rs?la--:la++)js=no[la],na>ca?na%=ca:na<0&&(na+=ca),this._setGraphemeOnPath(na,js),na+=js.kernedWidth}return{width:Fs,numOfSpaces:0}}_setGraphemeOnPath(p,Ds){const js=p+Ds.kernedWidth/2,Fs=this.path,Rs=fn(Fs.path,js,Fs.segmentsInfo);Ds.renderLeft=Rs.x-Fs.pathOffset.x,Ds.renderTop=Rs.y-Fs.pathOffset.y,Ds.angle=Rs.angle+(this.pathSide===j?Math.PI:0)}_getGraphemeBox(p,Ds,js,Fs,Rs){const Kn=this.getCompleteStyleDeclaration(Ds,js),ro=Fs?this.getCompleteStyleDeclaration(Ds,js-1):{},io=this._measureChar(p,Kn,Fs,ro);let no,na=io.kernedWidth,ca=io.width;this.charSpacing!==0&&(no=this._getWidthOfCharSpacing(),ca+=no,na+=no);const la={width:ca,left:0,height:Kn.fontSize,kernedWidth:na,deltaY:Kn.deltaY};if(js>0&&!Rs){const ua=this.__charBounds[Ds][js-1];la.left=ua.left+ua.width+io.kernedWidth-io.width}return la}getHeightOfLine(p){if(this.__lineHeights[p])return this.__lineHeights[p];let Ds=this.getHeightOfChar(p,0);for(let js=1,Fs=this._textLines[p].length;js<Fs;js++)Ds=Math.max(this.getHeightOfChar(p,js),Ds);return this.__lineHeights[p]=Ds*this.lineHeight*this._fontSizeMult}calcTextHeight(){let p,Ds=0;for(let js=0,Fs=this._textLines.length;js<Fs;js++)p=this.getHeightOfLine(js),Ds+=js===Fs-1?p/this.lineHeight:p;return Ds}_getLeftOffset(){return this.direction==="ltr"?-this.width/2:this.width/2}_getTopOffset(){return-this.height/2}_renderTextCommon(p,Ds){p.save();let js=0;const Fs=this._getLeftOffset(),Rs=this._getTopOffset();for(let Kn=0,ro=this._textLines.length;Kn<ro;Kn++){const io=this.getHeightOfLine(Kn),no=io/this.lineHeight,na=this._getLineLeftOffset(Kn);this._renderTextLine(Ds,p,this._textLines[Kn],Fs+na,Rs+js+no,Kn),js+=io}p.restore()}_renderTextFill(p){(this.fill||this.styleHas(K))&&this._renderTextCommon(p,"fillText")}_renderTextStroke(p){(this.stroke&&this.strokeWidth!==0||!this.isEmptyStyles())&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(p),p.save(),this._setLineDash(p,this.strokeDashArray),p.beginPath(),this._renderTextCommon(p,"strokeText"),p.
vendor: 35,007 bytes, lines 53-56
53closePath(),p.restore())}_renderChars(p,Ds,js,Fs,Rs,Kn){const ro=this.getHeightOfLine(Kn),io=this.textAlign.includes(To),no=this.path,na=!io&&this.charSpacing===0&&this.isEmptyStyles(Kn)&&!no,ca=this.direction==="ltr",la=this.direction==="ltr"?1:-1,ua=Ds.direction;let da,ga,pa,ma,xa,wa="",Oa=0;if(Ds.save(),ua!==this.direction&&(Ds.canvas.setAttribute("dir",ca?"ltr":"rtl"),Ds.direction=ca?"ltr":"rtl",Ds.textAlign=ca?P:j),Rs-=ro*this._fontSizeFraction/this.lineHeight,na)return this._renderChar(p,Ds,Kn,0,js.join(""),Fs,Rs),void Ds.restore();for(let fa=0,va=js.length-1;fa<=va;fa++)ma=fa===va||this.charSpacing||no,wa+=js[fa],pa=this.__charBounds[Kn][fa],Oa===0?(Fs+=la*(pa.kernedWidth-pa.width),Oa+=pa.width):Oa+=pa.kernedWidth,io&&!ma&&this._reSpaceAndTab.test(js[fa])&&(ma=!0),ma||(da=da||this.getCompleteStyleDeclaration(Kn,fa),ga=this.getCompleteStyleDeclaration(Kn,fa+1),ma=Bi(da,ga,!1)),ma&&(no?(Ds.save(),Ds.translate(pa.renderLeft,pa.renderTop),Ds.rotate(pa.angle),this._renderChar(p,Ds,Kn,fa,wa,-Oa/2,0),Ds.restore()):(xa=Fs,this._renderChar(p,Ds,Kn,fa,wa,xa,Rs)),wa="",da=ga,Fs+=la*Oa,Oa=0);Ds.restore()}_applyPatternGradientTransformText(p){const Ds=vt(),js=this.width+this.strokeWidth,Fs=this.height+this.strokeWidth,Rs=Ds.getContext("2d");return Ds.width=js,Ds.height=Fs,Rs.beginPath(),Rs.moveTo(0,0),Rs.lineTo(js,0),Rs.lineTo(js,Fs),Rs.lineTo(0,Fs),Rs.closePath(),Rs.translate(js/2,Fs/2),Rs.fillStyle=p.toLive(Rs),this._applyPatternGradientTransform(Rs,p),Rs.fill(),Rs.createPattern(Ds,"no-repeat")}handleFiller(p,Ds,js){let Fs,Rs;return te(js)?js.gradientUnits==="percentage"||js.gradientTransform||js.patternTransform?(Fs=-this.width/2,Rs=-this.height/2,p.translate(Fs,Rs),p[Ds]=this._applyPatternGradientTransformText(js),{offsetX:Fs,offsetY:Rs}):(p[Ds]=js.toLive(p),this._applyPatternGradientTransform(p,js)):(p[Ds]=js,{offsetX:0,offsetY:0})}_setStrokeStyles(p,Ds){let{stroke:js,strokeWidth:Fs}=Ds;return p.lineWidth=Fs,p.lineCap=this.strokeLineCap,p.lineDashOffset=this.strokeDashOffset,p.lineJoin=this.strokeLineJoin,p.miterLimit=this.strokeMiterLimit,this.handleFiller(p,"strokeStyle",js)}_setFillStyles(p,Ds){let{fill:js}=Ds;return this.handleFiller(p,"fillStyle",js)}_renderChar(p,Ds,js,Fs,Rs,Kn,ro){const io=this._getStyleDeclaration(js,Fs),no=this.getCompleteStyleDeclaration(js,Fs),na=p==="fillText"&&no.fill,ca=p==="strokeText"&&no.stroke&&no.strokeWidth;if(ca||na){if(Ds.save(),Ds.font=this._getFontDeclaration(no),io.textBackgroundColor&&this._removeShadow(Ds),io.deltaY&&(ro+=io.deltaY),na){const la=this._setFillStyles(Ds,no);Ds.fillText(Rs,Kn-la.offsetX,ro-la.offsetY)}if(ca){const la=this._setStrokeStyles(Ds,no);Ds.strokeText(Rs,Kn-la.offsetX,ro-la.offsetY)}Ds.restore()}}setSuperscript(p,Ds){this._setScript(p,Ds,this.superscript)}setSubscript(p,Ds){this._setScript(p,Ds,this.subscript)}_setScript(p,Ds,js){const Fs=this.get2DCursorLocation(p,!0),Rs=this.getValueOfPropertyAt(Fs.lineIndex,Fs.charIndex,"fontSize"),Kn=this.getValueOfPropertyAt(Fs.lineIndex,Fs.charIndex,"deltaY"),ro={fontSize:Rs*js.size,deltaY:Kn+Rs*js.baseline};this.setSelectionStyles(ro,p,Ds)}_getLineLeftOffset(p){const Ds=this.getLineWidth(p),js=this.width-Ds,Fs=this.textAlign,Rs=this.direction,Kn=this.isEndOfWrapping(p);let ro=0;return Fs===To||Fs===Do&&!Kn||Fs===ko&&!Kn||Fs===Oo&&!Kn?0:(Fs===M&&(ro=js/2),Fs===j&&(ro=js),Fs===Do&&(ro=js/2),Fs===ko&&(ro=js),Rs==="rtl"&&(Fs===j||Fs===To||Fs===ko?ro=0:Fs===P||Fs===Oo?ro=-js:Fs!==M&&Fs!==Do||(ro=-js/2)),ro)}_clearCache(){this._forceClearCache=!1,this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]}getLineWidth(p){if(this.__lineWidths[p]!==void 0)return this.__lineWidths[p];const{width:Ds}=this.measureLine(p);return this.__lineWidths[p]=Ds,Ds}_getWidthOfCharSpacing(){return this.charSpacing!==0?this.fontSize*this.charSpacing/1e3:0}getValueOfPropertyAt(p,Ds,js){var Fs;return(Fs=this._getStyleDeclaration(p,Ds)[js])!==null&&Fs!==void 0?Fs:this[js]}_renderTextDecoration(p,Ds){if(!this[Ds]&&!this.styleHas(Ds))return;let js=this._getTopOffset();const Fs=this._getLeftOffset(),Rs=this.path,Kn=this._getWidthOfCharSpacing(),ro=this.offsets[Ds];for(let io=0,no=this._textLines.length;io<no;io++){const na=this.getHeightOfLine(io);if(!this[Ds]&&!this.styleHas(Ds,io)){js+=na;continue}const ca=this._textLines[io],la=na/this.lineHeight,ua=this._getLineLeftOffset(io);let da,ga,pa=0,ma=0,xa=this.getValueOfPropertyAt(io,0,Ds),wa=this.getValueOfPropertyAt(io,0,K);const Oa=js+la*(1-this._fontSizeFraction);let fa=this.getHeightOfChar(io,0),va=this.getValueOfPropertyAt(io,0,"deltaY");for(let ba=0,Ma=ca.length;ba<Ma;ba++){const Pa=this.__charBounds[io][ba];da=this.getValueOfPropertyAt(io,ba,Ds),ga=this.getValueOfPropertyAt(io,ba,K);const qa=this.getHeightOfChar(io,ba),Aa=this.getValueOfPropertyAt(io,ba,"deltaY");if(Rs&&da&&ga)p.save(),p.fillStyle=wa,p.translate(Pa.renderLeft,Pa.renderTop),p.rotate(Pa.angle),p.fillRect(-Pa.kernedWidth/2,ro*qa+Aa,Pa.kernedWidth,this.fontSize/15),p.restore();else if((da!==xa||ga!==wa||qa!==fa||Aa!==va)&&ma>0){let Da=Fs+ua+pa;this.direction==="rtl"&&(Da=this.width-Da-ma),xa&&wa&&(p.fillStyle=wa,p.fillRect(Da,Oa+ro*fa+va,ma,this.fontSize/15)),pa=Pa.left,ma=Pa.width,xa=da,wa=ga,fa=qa,va=Aa}else ma+=Pa.kernedWidth}let Ca=Fs+ua+pa;this.direction==="rtl"&&(Ca=this.width-Ca-ma),p.fillStyle=ga,da&&ga&&p.fillRect(Ca,Oa+ro*fa+va,ma-Kn,this.fontSize/15),js+=na}this._removeShadow(p)}_getFontDeclaration(){let{fontFamily:p=this.fontFamily,fontStyle:Ds=this.fontStyle,fontWeight:js=this.fontWeight,fontSize:Fs=this.fontSize}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},Rs=arguments.length>1?arguments[1]:void 0;const Kn=p.includes("'")||p.includes('"')||p.includes(",")||Lo.genericFonts.includes(p.toLowerCase())?p:'"'.concat(p,'"');return[Ds,js,"".concat(Rs?this.CACHE_FONT_SIZE:Fs,"px"),Kn].join(" ")}render(p){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._forceClearCache&&this.initDimensions(),super.render(p)))}graphemeSplit(p){return Fi(p)}_splitTextIntoLines(p){const Ds=p.split(this._reNewline),js=new Array(Ds.length),Fs=[` 54`];let Rs=[];for(let Kn=0;Kn<Ds.length;Kn++)js[Kn]=this.graphemeSplit(Ds[Kn]),Rs=Rs.concat(js[Kn],Fs);return Rs.pop(),{_unwrappedLines:js,lines:Ds,graphemeText:Rs,graphemeLines:js}}toObject(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return s(s({},super.toObject([...bo,...p])),{},{styles:Ii(this.styles,this.text)},this.path?{path:this.path.toObject()}:{})}set(p,Ds){const{textLayoutProperties:js}=this.constructor;super.set(p,Ds);let Fs=!1,Rs=!1;if(typeof p=="object")for(const Kn in p)Kn==="path"&&this.setPathInfo(),Fs=Fs||js.includes(Kn),Rs=Rs||Kn==="path";else Fs=js.includes(p),Rs=p==="path";return Rs&&this.setPathInfo(),Fs&&this.initialized&&(this.initDimensions(),this.setCoords()),this}complexity(){return 1}static async fromElement(p,Ds,js){const Fs=vr(p,Lo.ATTRIBUTE_NAMES,js),Rs=s(s({},Ds),Fs),{textAnchor:Kn=P,textDecoration:ro="",dx:io=0,dy:no=0,top:na=0,left:ca=0,fontSize:la=k,strokeWidth:ua=1}=Rs,da=i(Rs,jo),ga=new this((p.textContent||"").replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," "),s({left:ca+io,top:na+no,underline:ro.includes("underline"),overline:ro.includes("overline"),linethrough:ro.includes("line-through"),strokeWidth:0,fontSize:la},da)),pa=ga.getScaledHeight()/ga.height,ma=((ga.height+ga.strokeWidth)*ga.lineHeight-ga.height)*pa,xa=ga.getScaledHeight()+ma;let wa=0;return Kn===M&&(wa=ga.getScaledWidth()/2),Kn===j&&(wa=ga.getScaledWidth()),ga.set({left:ga.left-wa,top:ga.top-(xa-ga.fontSize*(.07+ga._fontSizeFraction))/ga.lineHeight,strokeWidth:ua}),ga}static fromObject(p){return this._fromObject(s(s({},p),{},{styles:Xi(p.styles||{},p.text)}),{extraParam:"text"})}}t(Lo,"textLayoutProperties",Co),t(Lo,"cacheProperties",[...Vs,...bo]),t(Lo,"ownDefaults",So),t(Lo,"type","Text"),t(Lo,"genericFonts",["sans-serif","serif","cursive","fantasy","monospace"]),t(Lo,"ATTRIBUTE_NAMES",Wi.concat("x","y","dx","dy","font-family","font-style","font-weight","font-size","letter-spacing","text-decoration","text-anchor")),Ti(Lo,[class extends Ye{_toSVG(){const $n=this._getSVGLeftTopOffsets(),p=this._getSVGTextAndBg($n.textTop,$n.textLeft);return this._wrapSVGTextAndBg(p)}toSVG($n){return this._createBaseSVGMarkup(this._toSVG(),{reviver:$n,noStyle:!0,withShadow:!0})}_getSVGLeftTopOffsets(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}}_wrapSVGTextAndBg($n){let{textBgRects:p,textSpans:Ds}=$n;const js=this.getSvgTextDecoration(this);return[p.join(""),' <text xml:space="preserve" ',this.fontFamily?'font-family="'.concat(this.fontFamily.replace(Eo,"'"),'" '):"",this.fontSize?'font-size="'.concat(this.fontSize,'" '):"",this.fontStyle?'font-style="'.concat(this.fontStyle,'" '):"",this.fontWeight?'font-weight="'.concat(this.fontWeight,'" '):"",js?'text-decoration="'.concat(js,'" '):"",this.direction==="rtl"?'direction="'.concat(this.direction,'" '):"",'style="',this.getSvgStyles(!0),'"',this.addPaintOrder()," >",Ds.join(""),`</text> 55`]}_getSVGTextAndBg($n,p){const Ds=[],js=[];let Fs,Rs=$n;this.backgroundColor&&js.push(...Ao(this.backgroundColor,-this.width/2,-this.height/2,this.width,this.height));for(let Kn=0,ro=this._textLines.length;Kn<ro;Kn++)Fs=this._getLineLeftOffset(Kn),this.direction==="rtl"&&(Fs+=this.width),(this.textBackgroundColor||this.styleHas("textBackgroundColor",Kn))&&this._setSVGTextLineBg(js,Kn,p+Fs,Rs),this._setSVGTextLineText(Ds,Kn,p+Fs,Rs),Rs+=this.getHeightOfLine(Kn);return{textSpans:Ds,textBgRects:js}}_createTextCharSpan($n,p,Ds,js){const Fs=this.getSvgSpanStyles(p,$n!==$n.trim()||!!$n.match(Po)),Rs=Fs?'style="'.concat(Fs,'"'):"",Kn=p.deltaY,ro=Kn?' dy="'.concat(Kt(Kn,a.NUM_FRACTION_DIGITS),'" '):"";return'<tspan x="'.concat(Kt(Ds,a.NUM_FRACTION_DIGITS),'" y="').concat(Kt(js,a.NUM_FRACTION_DIGITS),'" ').concat(ro).concat(Rs,">").concat(ji($n),"</tspan>")}_setSVGTextLineText($n,p,Ds,js){const Fs=this.getHeightOfLine(p),Rs=this.textAlign.includes(To),Kn=this._textLines[p];let ro,io,no,na,ca,la="",ua=0;js+=Fs*(1-this._fontSizeFraction)/this.lineHeight;for(let da=0,ga=Kn.length-1;da<=ga;da++)ca=da===ga||this.charSpacing,la+=Kn[da],no=this.__charBounds[p][da],ua===0?(Ds+=no.kernedWidth-no.width,ua+=no.width):ua+=no.kernedWidth,Rs&&!ca&&this._reSpaceAndTab.test(Kn[da])&&(ca=!0),ca||(ro=ro||this.getCompleteStyleDeclaration(p,da),io=this.getCompleteStyleDeclaration(p,da+1),ca=Bi(ro,io,!0)),ca&&(na=this._getStyleDeclaration(p,da),$n.push(this._createTextCharSpan(la,na,Ds,js)),la="",ro=io,this.direction==="rtl"?Ds-=ua:Ds+=ua,ua=0)}_setSVGTextLineBg($n,p,Ds,js){const Fs=this._textLines[p],Rs=this.getHeightOfLine(p)/this.lineHeight;let Kn,ro=0,io=0,no=this.getValueOfPropertyAt(p,0,"textBackgroundColor");for(let na=0;na<Fs.length;na++){const{left:ca,width:la,kernedWidth:ua}=this.__charBounds[p][na];Kn=this.getValueOfPropertyAt(p,na,"textBackgroundColor"),Kn!==no?(no&&$n.push(...Ao(no,Ds+io,js,ro,Rs)),io=ca,ro=la,no=Kn):ro+=ua}Kn&&$n.push(...Ao(no,Ds+io,js,ro,Rs))}_getSVGLineTopOffset($n){let p,Ds=0;for(p=0;p<$n;p++)Ds+=this.getHeightOfLine(p);const js=this.getHeightOfLine(p);return{lineTop:Ds,offset:(this._fontSizeMult-this._fontSizeFraction)*js/(this.lineHeight*this._fontSizeMult)}}getSvgStyles($n){return"".concat(super.getSvgStyles($n)," white-space: pre;")}getSvgSpanStyles($n,p){const{fontFamily:Ds,strokeWidth:js,stroke:Fs,fill:Rs,fontSize:Kn,fontStyle:ro,fontWeight:io,deltaY:no}=$n,na=this.getSvgTextDecoration($n);return[Fs?$t(J,Fs):"",js?"stroke-width: ".concat(js,"; "):"",Ds?"font-family: ".concat(Ds.includes("'")||Ds.includes('"')?Ds:"'".concat(Ds,"'"),"; "):"",Kn?"font-size: ".concat(Kn,"px; "):"",ro?"font-style: ".concat(ro,"; "):"",io?"font-weight: ".concat(io,"; "):"",na&&"text-decoration: ".concat(na,"; "),Rs?$t(K,Rs):"",no?"baseline-shift: ".concat(-no,"; "):"",p?"white-space: pre; ":""].join("")}getSvgTextDecoration($n){return["overline","underline","line-through"].filter((p=>$n[p.replace("-","")])).join(" ")}}]),tt.setClass(Lo),tt.setSVGClass(Lo);class Ro{constructor(p){t(this,"target",void 0),t(this,"__mouseDownInPlace",!1),t(this,"__dragStartFired",!1),t(this,"__isDraggingOver",!1),t(this,"__dragStartSelection",void 0),t(this,"__dragImageDisposer",void 0),t(this,"_dispose",void 0),this.target=p;const Ds=[this.target.on("dragenter",this.dragEnterHandler.bind(this)),this.target.on("dragover",this.dragOverHandler.bind(this)),this.target.on("dragleave",this.dragLeaveHandler.bind(this)),this.target.on("dragend",this.dragEndHandler.bind(this)),this.target.on("drop",this.dropHandler.bind(this))];this._dispose=()=>{Ds.forEach((js=>js())),this._dispose=void 0}}isPointerOverSelection(p){const Ds=this.target,js=Ds.getSelectionStartFromPointer(p);return Ds.isEditing&&js>=Ds.selectionStart&&js<=Ds.selectionEnd&&Ds.selectionStart<Ds.selectionEnd}start(p){return this.__mouseDownInPlace=this.isPointerOverSelection(p)}isActive(){return this.__mouseDownInPlace}end(p){const Ds=this.isActive();return Ds&&!this.__dragStartFired&&(this.target.setCursorByClick(p),this.target.initDelayedCursor(!0)),this.__mouseDownInPlace=!1,this.__dragStartFired=!1,this.__isDraggingOver=!1,Ds}getDragStartSelection(){return this.__dragStartSelection}setDragImage(p,Ds){var js;let{selectionStart:Fs,selectionEnd:Rs}=Ds;const Kn=this.target,ro=Kn.canvas,io=new ht(Kn.flipX?-1:1,Kn.flipY?-1:1),no=Kn._getCursorBoundaries(Fs),na=new ht(no.left+no.leftOffset,no.top+no.topOffset).multiply(io).transform(Kn.calcTransformMatrix()),ca=ro.getScenePoint(p).subtract(na),la=Kn.getCanvasRetinaScaling(),ua=Kn.getBoundingRect(),da=na.subtract(new ht(ua.left,ua.top)),ga=ro.viewportTransform,pa=da.add(ca).transform(ga,!0),ma=Kn.backgroundColor,xa=Ws(Kn.styles);Kn.backgroundColor="";const wa={stroke:"transparent",fill:"transparent",textBackgroundColor:"transparent"};Kn.setSelectionStyles(wa,0,Fs),Kn.setSelectionStyles(wa,Rs,Kn.text.length),Kn.dirty=!0;const Oa=Kn.toCanvasElement({enableRetinaScaling:ro.enableRetinaScaling,viewportTransform:!0});Kn.backgroundColor=ma,Kn.styles=xa,Kn.dirty=!0,he(Oa,{position:"fixed",left:"".concat(-Oa.width,"px"),border:F,width:"".concat(Oa.width/la,"px"),height:"".concat(Oa.height/la,"px")}),this.__dragImageDisposer&&this.__dragImageDisposer(),this.__dragImageDisposer=()=>{Oa.remove()},oe(p.target||this.target.hiddenTextarea).body.appendChild(Oa),(js=p.dataTransfer)===null||js===void 0||js.setDragImage(Oa,pa.x,pa.y)}onDragStart(p){this.__dragStartFired=!0;const Ds=this.target,js=this.isActive();if(js&&p.dataTransfer){const Fs=this.__dragStartSelection={selectionStart:Ds.selectionStart,selectionEnd:Ds.selectionEnd},Rs=Ds._text.slice(Fs.selectionStart,Fs.selectionEnd).join(""),Kn=s({text:Ds.text,value:Rs},Fs);p.dataTransfer.setData("text/plain",Rs),p.dataTransfer.setData("application/fabric",JSON.stringify({value:Rs,styles:Ds.getSelectionStyles(Fs.selectionStart,Fs.selectionEnd,!0)})),p.dataTransfer.effectAllowed="copyMove",this.setDragImage(p,Kn)}return Ds.abortCursorAnimation(),js}canDrop(p){if(this.target.editable&&!this.target.getActiveControl()&&!p.defaultPrevented){if(this.isActive()&&this.__dragStartSelection){const Ds=this.target.getSelectionStartFromPointer(p),js=this.__dragStartSelection;return Ds<js.selectionStart||Ds>js.selectionEnd}return!0}return!1}targetCanDrop(p){return this.target.canDrop(p)}dragEnterHandler(p){let{e:Ds}=p;const js=this.targetCanDrop(Ds);!this.__isDraggingOver&&js&&(this.__isDraggingOver=!0)}dragOverHandler(p){const{e:Ds}=p,js=this.targetCanDrop(Ds);!this.__isDraggingOver&&js?this.__isDraggingOver=!0:this.__isDraggingOver&&!js&&(this.__isDraggingOver=!1),this.__isDraggingOver&&(Ds.preventDefault(),p.canDrop=!0,p.dropTarget=this.target)}dragLeaveHandler(){(this.__isDraggingOver||this.isActive())&&(this.__isDraggingOver=!1)}dropHandler(p){var Ds;const{e:js}=p,Fs=js.defaultPrevented;this.__isDraggingOver=!1,js.preventDefault();let Rs=(Ds=js.dataTransfer)===null||Ds===void 0?void 0:Ds.getData("text/plain");if(Rs&&!Fs){const Kn=this.target,ro=Kn.canvas;let io=Kn.getSelectionStartFromPointer(js);const{styles:no}=js.dataTransfer.types.includes("application/fabric")?JSON.parse(js.dataTransfer.getData("application/fabric")):{},na=Rs[Math.max(0,Rs.length-1)],ca=0;if(this.__dragStartSelection){const la=this.__dragStartSelection.selectionStart,ua=this.__dragStartSelection.selectionEnd;io>la&&io<=ua?io=la:io>ua&&(io-=ua-la),Kn.removeChars(la,ua),delete this.__dragStartSelection}Kn._reNewline.test(na)&&(Kn._reNewline.test(Kn._text[io])||io===Kn._text.length)&&(Rs=Rs.trimEnd()),p.didDrop=!0,p.dropTarget=Kn,Kn.insertChars(Rs,no,io),ro.setActiveObject(Kn),Kn.enterEditing(js),Kn.selectionStart=Math.min(io+ca,Kn._text.length),Kn.selectionEnd=Math.min(Kn.selectionStart+Rs.length,Kn._text.length),Kn.hiddenTextarea.value=Kn.text,Kn._updateTextarea(),Kn.hiddenTextarea.focus(),Kn.fire(H,{index:io+ca,action:"drop"}),ro.fire("text:changed",{target:Kn}),ro.contextTopDirty=!0,ro.requestRenderAll()}}dragEndHandler(p){let{e:Ds}=p;if(this.isActive()&&this.__dragStartFired&&this.__dragStartSelection){var js;const Fs=this.target,Rs=this.target.canvas,{selectionStart:Kn,selectionEnd:ro}=this.__dragStartSelection,io=((js=Ds.dataTransfer)===null||js===void 0?void 0:js.dropEffect)||F;io===F?(Fs.selectionStart=Kn,Fs.selectionEnd=ro,Fs._updateTextarea(),Fs.hiddenTextarea.focus()):(Fs.clearContextTop(),io==="move"&&(Fs.removeChars(Kn,ro),Fs.selectionStart=Fs.selectionEnd=Kn,Fs.hiddenTextarea&&(Fs.hiddenTextarea.value=Fs.text),Fs._updateTextarea(),Fs.fire(H,{index:Kn,action:"dragend"}),Rs.fire("text:changed",{target:Fs}),Rs.requestRenderAll()),Fs.exitEditing())}this.__dragImageDisposer&&this.__dragImageDisposer(),delete this.__dragImageDisposer,delete this.__dragStartSelection,this.__isDraggingOver=!1}dispose(){this._dispose&&this._dispose()}}const Bo=/[ \n\.,;!\?\-]/;class Io extends Lo{constructor(){super(...arguments),t(this,"_currentCursorOpacity",1)}initBehavior(){this._tick=this._tick.bind(this),this._onTickComplete=this._onTickComplete.bind(this),this.updateSelectionOnMouseMove=this.updateSelectionOnMouseMove.bind(this)}onDeselect(p){return this.isEditing&&this.exitEditing(),this.selected=!1,super.onDeselect(p)}_animateCursor(p){let{toValue:Ds,duration:js,delay:Fs,onComplete:Rs}=p;return ns({startValue:this._currentCursorOpacity,endValue:Ds,duration:js,delay:Fs,onComplete:Rs,abort:()=>!this.canvas||this.selectionStart!==this.selectionEnd,onChange:Kn=>{this._currentCursorOpacity=Kn,this.renderCursorOrSelection()}})}_tick(p){this._currentTickState=this._animateCursor({toValue:0,duration:this.cursorDuration/2,delay:Math.max(p||0,100),onComplete:this._onTickComplete})}_onTickComplete(){var p;(p=this._currentTickCompleteState)===null||p===void 0||p.abort(),this._currentTickCompleteState=this._animateCursor({toValue:1,duration:this.cursorDuration,onComplete:this._tick})}initDelayedCursor(p){this.abortCursorAnimation(),this._tick(p?0:this.cursorDelay)}abortCursorAnimation(){let p=!1;[this._currentTickState,this._currentTickCompleteState].forEach((Ds=>{Ds&&!Ds.isDone()&&(p=!0,Ds.abort())})),this._currentCursorOpacity=1,p&&this.clearContextTop()}restartCursorIfNeeded(){[this._currentTickState,this._currentTickCompleteState].some((p=>!p||p.isDone()))&&this.initDelayedCursor()}selectAll(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this}getSelectedText(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")}findWordBoundaryLeft(p){let Ds=0,js=p-1;if(this._reSpace.test(this._text[js]))for(;this._reSpace.test(this._text[js]);)Ds++,js--;for(;/\S/.test(this._text[js])&&js>-1;)Ds++,js--;return p-Ds}findWordBoundaryRight(p){let Ds=0,js=p;if(this._reSpace.test(this._text[js]))for(;this._reSpace.test(this._text[js]);)Ds++,js++;for(;/\S/.test(this._text[js])&&js<this._text.length;)Ds++,js++;return p+Ds}findLineBoundaryLeft(p){let Ds=0,js=p-1;for(;!/\n/.test(this._text[js])&&js>-1;)Ds++,js--;return p-Ds}findLineBoundaryRight(p){let Ds=0,js=p;for(;!/\n/.test(this._text[js])&&js<this._text.length;)Ds++,js++;return p+Ds}searchWordBoundary(p,Ds){const js=this._text;let Fs=p>0&&this._reSpace.test(js[p])&&(Ds===-1||!L.test(js[p-1]))?p-1:p,Rs=js[Fs];for(;Fs>0&&Fs<js.length&&!Bo.test(Rs);)Fs+=Ds,Rs=js[Fs];return Ds===-1&&Bo.test(Rs)&&Fs++,Fs}selectWord(p){p=p||this.selectionStart;const Ds=this.searchWordBoundary(p,-1),js=Math.max(Ds,this.searchWordBoundary(p,1));this.selectionStart=Ds,this.selectionEnd=js,this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()}selectLine(p){p=p||this.selectionStart;const Ds=this.findLineBoundaryLeft(p),js=this.findLineBoundaryRight(p);return this.selectionStart=Ds,this.selectionEnd=js,this._fireSelectionChanged(),this._updateTextarea(),this}enterEditing(p){!this.isEditing&&this.editable&&(this.canvas&&(this.canvas.calcOffset(),this.canvas.textEditingManager.exitTextEditing()),this.isEditing=!0,this.initHiddenTextarea(),this.hiddenTextarea.focus(),this.hiddenTextarea.value=this.text,this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._textBeforeEdit=this.text,this._tick(),this.fire("editing:entered",p?{e:p}:void 0),this._fireSelectionChanged(),this.canvas&&(this.canvas.fire("text:editing:entered",{target:this,e:p}),this.canvas.requestRenderAll()))}updateSelectionOnMouseMove(p){if(this.getActiveControl())return;const Ds=this.hiddenTextarea;oe(Ds).activeElement!==Ds&&Ds.focus();const js=this.getSelectionStartFromPointer(p),Fs=this.selectionStart,Rs=this.selectionEnd;(js===this.__selectionStartOnMouseDown&&Fs!==Rs||Fs!==js&&Rs!==js)&&(js>this.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=js):(this.selectionStart=js,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===Fs&&this.selectionEnd===Rs||(this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}_setEditingProps(){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(p,Ds,js){const Fs=js.slice(0,p),Rs=this.graphemeSplit(Fs).length;if(p===Ds)return{selectionStart:Rs,selectionEnd:Rs};const Kn=js.slice(p,Ds);return{selectionStart:Rs,selectionEnd:Rs+this.graphemeSplit(Kn).length}}fromGraphemeToStringSelection(p,Ds,js){const Fs=js.slice(0,p).join("").length;return p===Ds?{selectionStart:Fs,selectionEnd:Fs}:{selectionStart:Fs,selectionEnd:Fs+js.slice(p,Ds).join("").length}}_updateTextarea(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){const p=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=p.selectionStart,this.hiddenTextarea.selectionEnd=p.selectionEnd}this.updateTextareaPosition()}}updateFromTextArea(){if(!this.hiddenTextarea)return;this.cursorOffsetCache={};const p=this.hiddenTextarea;this.text=p.value,this.set("dirty",!0),this.initDimensions(),this.setCoords();const Ds=this.fromStringToGraphemeSelection(p.selectionStart,p.selectionEnd,p.value);this.selectionEnd=this.selectionStart=Ds.selectionEnd,this.inCompositionMode||(this.selectionStart=Ds.selectionStart),this.updateTextareaPosition()}updateTextareaPosition(){if(this.selectionStart===this.selectionEnd){const p=this._calcTextareaPosition();this.hiddenTextarea.style.left=p.left,this.hiddenTextarea.style.top=p.top}}_calcTextareaPosition(){if(!this.canvas)return{left:"1px",top:"1px"};const p=this.inCompositionMode?this.compositionStart:this.selectionStart,Ds=this._getCursorBoundaries(p),js=this.get2DCursorLocation(p),Fs=js.lineIndex,Rs=js.charIndex,Kn=this.getValueOfPropertyAt(Fs,Rs,"fontSize")*this.lineHeight,ro=Ds.leftOffset,io=this.getCanvasRetinaScaling(),no=this.canvas.upperCanvasEl,na=no.width/io,ca=no.height/io,la=na-Kn,ua=ca-Kn,da=new ht(Ds.left+ro,Ds.top+Ds.topOffset+Kn).transform(this.calcTransformMatrix()).transform(this.canvas.viewportTransform).multiply(new ht(no.clientWidth/na,no.clientHeight/ca));return da.x<0&&(da.x=0),da.x>la&&(da.x=la),da.y<0&&(da.y=0),da.y>ua&&(da.y=ua),da.x+=this.canvas._offset.left,da.y+=this.canvas._offset.top,{left:"".concat(da.x,"px"),top:"".concat(da.y,"px"),fontSize:"".concat(Kn,"px"),charHeight:Kn}}_saveEditingProps(){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(){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.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor||this.canvas.moveCursor),delete this._savedProps)}_exitEditing(){const p=this.hiddenTextarea;this.selected=!1,this.isEditing=!1,p&&(p.blur&&p.blur(),p.parentNode&&p.parentNode.removeChild(p)),this.hiddenTextarea=null,this.abortCursorAnimation(),this.selectionStart!==this.selectionEnd&&this.clearContextTop()}exitEditing(){const p=this._textBeforeEdit!==this.text;return this._exitEditing(),this.selectionEnd=this.selectionStart,this._restoreEditingProps(),this._forceClearCache&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),p&&this.fire(Z),this.canvas&&(this.canvas.fire("text:editing:exited",{target:this}),p&&this.canvas.fire("object:modified",{target:this})),this}_removeExtraneousStyles(){for(const p in this.styles)this._textLines[p]||delete this.styles[p]}removeStyleFromTo(p,Ds){const{lineIndex:js,charIndex:Fs}=this.get2DCursorLocation(p,!0),{lineIndex:Rs,charIndex:Kn}=this.get2DCursorLocation(Ds,!0);if(js!==Rs){if(this.styles[js])for(let ro=Fs;ro<this._unwrappedTextLines[js].length;ro++)delete this.styles[js][ro];if(this.styles[Rs])for(let ro=Kn;ro<this._unwrappedTextLines[Rs].length;ro++){const io=this.styles[Rs][ro];io&&(this.styles[js]||(this.styles[js]={}),this.styles[js][Fs+ro-Kn]=io)}for(let ro=js+1;ro<=Rs;ro++)delete this.styles[ro];this.shiftLineStyles(Rs,js-Rs)}else if(this.styles[js]){const ro=this.styles[js],io=Kn-Fs;for(let no=Fs;no<Kn;no++)delete ro[no];for(const no in this.styles[js]){const na=parseInt(no,10);na>=Kn&&(ro[na-io]=ro[no],delete ro[no])}}}shiftLineStyles(p,Ds){const js=Object.assign({},this.styles);for(const Fs in this.styles){const Rs=parseInt(Fs,10);Rs>p&&(this.styles[Rs+Ds]=js[Rs],js[Rs-Ds]||delete this.styles[Rs])}}insertNewlineStyleObject(p,Ds,js,Fs){const Rs={},Kn=this._unwrappedTextLines[p].length,ro=Kn===Ds;let io=!1;js||(js=1),this.shiftLineStyles(p,js);const no=this.styles[p]?this.styles[p][Ds===0?Ds:Ds-1]:void 0;for(const ca in this.styles[p]){const la=parseInt(ca,10);la>=Ds&&(io=!0,Rs[la-Ds]=this.styles[p][ca],ro&&Ds===0||delete this.styles[p][ca])}let na=!1;for(io&&!ro&&(this.styles[p+js]=Rs,na=!0),(na||Kn>Ds)&&js--;js>0;)Fs&&Fs[js-1]?this.styles[p+js]={0:s({},Fs[js-1])}:no?this.styles[p+js]={0:s({},no)}:delete this.styles[p+js],js--;this._forceClearCache=!0}insertCharStyleObject(p,Ds,js,Fs){this.styles||(this.styles={});const Rs=this.styles[p],Kn=Rs?s({},Rs):{};js||(js=1);for(const io in Kn){const no=parseInt(io,10);no>=Ds&&(Rs[no+js]=Kn[no],Kn[no-js]||delete Rs[no])}if(this._forceClearCache=!0,Fs){for(;js--;)Object.keys(Fs[js]).length&&(this.styles[p]||(this.styles[p]={}),this.styles[p][Ds+js]=s({},Fs[js]));return}if(!Rs)return;const ro=Rs[Ds?Ds-1:1];for(;ro&&js--;)this.styles[p][Ds+js]=s({},ro)}insertNewStyleBlock(p,Ds,js){const Fs=this.get2DCursorLocation(Ds,!0),Rs=[0];let Kn,ro=0;for(let io=0;io<p.length;io++)p[io]===` 56`?(ro++,Rs[ro]=0):Rs[ro]++;for(Rs[0]>0&&(this.insertCharStyleObject(Fs.lineIndex,Fs.charIndex,Rs[0],js),js=js&&js.slice(Rs[0]+1)),ro&&this.insertNewlineStyleObject(Fs.lineIndex,Fs.charIndex+Rs[0],ro),Kn=1;Kn<ro;Kn++)Rs[Kn]>0?this.insertCharStyleObject(Fs.lineIndex+Kn,0,Rs[Kn],js):js&&this.styles[Fs.lineIndex+Kn]&&js[0]&&(this.styles[Fs.lineIndex+Kn][0]=js[0]),js=js&&js.slice(Rs[Kn]+1);Rs[Kn]>0&&this.insertCharStyleObject(Fs.lineIndex+Kn,0,Rs[Kn],js)}removeChars(p){let Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:p+1;this.removeStyleFromTo(p,Ds),this._text.splice(p,Ds-p),this.text=this._text.join(""),this.set("dirty",!0),this.initDimensions(),this.setCoords(),this._removeExtraneousStyles()}insertChars(p,Ds,js){let Fs=arguments.length>3&&arguments[3]!==void 0?arguments[3]:js;Fs>js&&this.removeStyleFromTo(js,Fs);const Rs=this.graphemeSplit(p);this.insertNewStyleBlock(Rs,js,Ds),this._text=[...this._text.slice(0,js),...Rs,...this._text.slice(Fs)],this.text=this._text.join(""),this.set("dirty",!0),this.initDimensions(),this.setCoords(),this._removeExtraneousStyles()}setSelectionStartEndWithShift(p,Ds,js){js<=p?(Ds===p?this._selectionDirection=P:this._selectionDirection===j&&(this._selectionDirection=P,this.selectionEnd=p),this.selectionStart=js):js>p&&js<Ds?this._selectionDirection===j?this.selectionEnd=js:this.selectionStart=js:(Ds===p?this._selectionDirection=j:this._selectionDirection===P&&(this._selectionDirection=j,this.selectionStart=Ds),this.selectionEnd=js)}}class Xo extends Io{initHiddenTextarea(){const p=this.canvas&&oe(this.canvas.getElement())||v(),Ds=p.createElement("textarea");Object.entries({autocapitalize:"off",autocorrect:"off",autocomplete:"off",spellcheck:"false","data-fabric":"textarea",wrap:"off"}).map((Kn=>{let[ro,io]=Kn;return Ds.setAttribute(ro,io)}));const{top:js,left:Fs,fontSize:Rs}=this._calcTextareaPosition();Ds.style.cssText="position: absolute; top: ".concat(js,"; left: ").concat(Fs,"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: ").concat(Rs,";"),(this.hiddenTextareaContainer||p.body).appendChild(Ds),Object.entries({blur:"blur",keydown:"onKeyDown",keyup:"onKeyUp",input:"onInput",copy:"copy",cut:"copy",paste:"paste",compositionstart:"onCompositionStart",compositionupdate:"onCompositionUpdate",compositionend:"onCompositionEnd"}).map((Kn=>{let[ro,io]=Kn;return Ds.addEventListener(ro,this[io].bind(this))})),this.hiddenTextarea=Ds}blur(){this.abortCursorAnimation()}onKeyDown(p){if(!this.isEditing)return;const Ds=this.direction==="rtl"?this.keysMapRtl:this.keysMap;if(p.keyCode in Ds)this[Ds[p.keyCode]](p);else{if(!(p.keyCode in this.ctrlKeysMapDown)||!p.ctrlKey&&!p.metaKey)return;this[this.ctrlKeysMapDown[p.keyCode]](p)}p.stopImmediatePropagation(),p.preventDefault(),p.keyCode>=33&&p.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}onKeyUp(p){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:p.keyCode in this.ctrlKeysMapUp&&(p.ctrlKey||p.metaKey)&&(this[this.ctrlKeysMapUp[p.keyCode]](p),p.stopImmediatePropagation(),p.preventDefault(),this.canvas&&this.canvas.requestRenderAll())}onInput(p){const Ds=this.fromPaste;if(this.fromPaste=!1,p&&p.stopPropagation(),!this.isEditing)return;const js=()=>{this.updateFromTextArea(),this.fire(H),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())};if(this.hiddenTextarea.value==="")return this.styles={},void js();const Fs=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,Rs=this._text.length,Kn=Fs.length,ro=this.selectionStart,io=this.selectionEnd,no=ro!==io;let na,ca,la,ua,da=Kn-Rs;const ga=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),pa=ro>ga.selectionStart;no?(ca=this._text.slice(ro,io),da+=io-ro):Kn<Rs&&(ca=pa?this._text.slice(io+da,io):this._text.slice(ro,ro-da));const ma=Fs.slice(ga.selectionEnd-da,ga.selectionEnd);if(ca&&ca.length&&(ma.length&&(na=this.getSelectionStyles(ro,ro+1,!1),na=ma.map((()=>na[0]))),no?(la=ro,ua=io):pa?(la=io-ca.length,ua=io):(la=io,ua=io+ca.length),this.removeStyleFromTo(la,ua)),ma.length){const{copyPasteData:xa}=m();Ds&&ma.join("")===xa.copiedText&&!a.disableStyleCopyPaste&&(na=xa.copiedTextStyle),this.insertNewStyleBlock(ma,ro,na)}js()}onCompositionStart(){this.inCompositionMode=!0}onCompositionEnd(){this.inCompositionMode=!1}onCompositionUpdate(p){let{target:Ds}=p;const{selectionStart:js,selectionEnd:Fs}=Ds;this.compositionStart=js,this.compositionEnd=Fs,this.updateTextareaPosition()}copy(){if(this.selectionStart===this.selectionEnd)return;const{copyPasteData:p}=m();p.copiedText=this.getSelectedText(),a.disableStyleCopyPaste?p.copiedTextStyle=void 0:p.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0}paste(){this.fromPaste=!0}_getWidthBeforeCursor(p,Ds){let js,Fs=this._getLineLeftOffset(p);return Ds>0&&(js=this.__charBounds[p][Ds-1],Fs+=js.left+js.width),Fs}getDownCursorOffset(p,Ds){const js=this._getSelectionForOffset(p,Ds),Fs=this.get2DCursorLocation(js),Rs=Fs.lineIndex;if(Rs===this._textLines.length-1||p.metaKey||p.keyCode===34)return this._text.length-js;const Kn=Fs.charIndex,ro=this._getWidthBeforeCursor(Rs,Kn),io=this._getIndexOnLine(Rs+1,ro);return this._textLines[Rs].slice(Kn).length+io+1+this.missingNewlineOffset(Rs)}_getSelectionForOffset(p,Ds){return p.shiftKey&&this.selectionStart!==this.selectionEnd&&Ds?this.selectionEnd:this.selectionStart}getUpCursorOffset(p,Ds){const js=this._getSelectionForOffset(p,Ds),Fs=this.get2DCursorLocation(js),Rs=Fs.lineIndex;if(Rs===0||p.metaKey||p.keyCode===33)return-js;const Kn=Fs.charIndex,ro=this._getWidthBeforeCursor(Rs,Kn),io=this._getIndexOnLine(Rs-1,ro),no=this._textLines[Rs].slice(0,Kn),na=this.missingNewlineOffset(Rs-1);return-this._textLines[Rs-1].length+io-no.length+(1-na)}_getIndexOnLine(p,Ds){const js=this._textLines[p];let Fs,Rs,Kn=this._getLineLeftOffset(p),ro=0;for(let io=0,no=js.length;io<no;io++)if(Fs=this.__charBounds[p][io].width,Kn+=Fs,Kn>Ds){Rs=!0;const na=Kn-Fs,ca=Kn,la=Math.abs(na-Ds);ro=Math.abs(ca-Ds)<la?io:io-1;break}return Rs||(ro=js.length-1),ro}moveCursorDown(p){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",p)}moveCursorUp(p){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorUpOrDown("Up",p)}_moveCursorUpOrDown(p,Ds){const js=this["get".concat(p,"CursorOffset")](Ds,this._selectionDirection===j);if(Ds.shiftKey?this.moveCursorWithShift(js):this.moveCursorWithoutShift(js),js!==0){const Fs=this.text.length;this.selectionStart=ts(0,this.selectionStart,Fs),this.selectionEnd=ts(0,this.selectionEnd,Fs),this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea()}}moveCursorWithShift(p){const Ds=this._selectionDirection===P?this.selectionStart+p:this.selectionEnd+
56p;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,Ds),p!==0}moveCursorWithoutShift(p){return p<0?(this.selectionStart+=p,this.selectionEnd=this.selectionStart):(this.selectionEnd+=p,this.selectionStart=this.selectionEnd),p!==0}moveCursorLeft(p){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorLeftOrRight("Left",p)}_move(p,Ds,js){let Fs;if(p.altKey)Fs=this["findWordBoundary".concat(js)](this[Ds]);else{if(!p.metaKey&&p.keyCode!==35&&p.keyCode!==36)return this[Ds]+=js==="Left"?-1:1,!0;Fs=this["findLineBoundary".concat(js)](this[Ds])}return Fs!==void 0&&this[Ds]!==Fs&&(this[Ds]=Fs,!0)}_moveLeft(p,Ds){return this._move(p,Ds,"Left")}_moveRight(p,Ds){return this._move(p,Ds,"Right")}moveCursorLeftWithoutShift(p){let Ds=!0;return this._selectionDirection=P,this.selectionEnd===this.selectionStart&&this.selectionStart!==0&&(Ds=this._moveLeft(p,"selectionStart")),this.selectionEnd=this.selectionStart,Ds}moveCursorLeftWithShift(p){return this._selectionDirection===j&&this.selectionStart!==this.selectionEnd?this._moveLeft(p,"selectionEnd"):this.selectionStart!==0?(this._selectionDirection=P,this._moveLeft(p,"selectionStart")):void 0}moveCursorRight(p){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",p)}_moveCursorLeftOrRight(p,Ds){const js="moveCursor".concat(p).concat(Ds.shiftKey?"WithShift":"WithoutShift");this._currentCursorOpacity=1,this[js](Ds)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())}moveCursorRightWithShift(p){return this._selectionDirection===P&&this.selectionStart!==this.selectionEnd?this._moveRight(p,"selectionStart"):this.selectionEnd!==this._text.length?(this._selectionDirection=j,this._moveRight(p,"selectionEnd")):void 0}moveCursorRightWithoutShift(p){let Ds=!0;return this._selectionDirection=j,this.selectionStart===this.selectionEnd?(Ds=this._moveRight(p,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,Ds}}const Wo=$n=>!!$n.button;class Yo extends Xo{constructor(){super(...arguments),t(this,"draggableTextDelegate",void 0)}initBehavior(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore),this.on("mouseup",this.mouseUpHandler),this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler),this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown),this.draggableTextDelegate=new Ro(this),super.initBehavior()}shouldStartDragging(){return this.draggableTextDelegate.isActive()}onDragStart(p){return this.draggableTextDelegate.onDragStart(p)}canDrop(p){return this.draggableTextDelegate.canDrop(p)}onMouseDown(p){if(!this.canvas)return;this.__newClickTime=+new Date;const Ds=p.pointer;this.isTripleClick(Ds)&&(this.fire("tripleclick",p),ye(p.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=Ds,this.__lastSelected=this.selected&&!this.getActiveControl()}isTripleClick(p){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===p.x&&this.__lastPointer.y===p.y}doubleClickHandler(p){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(p.e))}tripleClickHandler(p){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(p.e))}_mouseDownHandler(p){let{e:Ds}=p;this.canvas&&this.editable&&!Wo(Ds)&&!this.getActiveControl()&&(this.draggableTextDelegate.start(Ds)||(this.canvas.textEditingManager.register(this),this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(Ds)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection())))}_mouseDownHandlerBefore(p){let{e:Ds}=p;this.canvas&&this.editable&&!Wo(Ds)&&(this.selected=this===this.canvas._activeObject)}mouseUpHandler(p){let{e:Ds,transform:js}=p;const Fs=this.draggableTextDelegate.end(Ds);if(this.canvas){this.canvas.textEditingManager.unregister(this);const Rs=this.canvas._activeObject;if(Rs&&Rs!==this)return}!this.editable||this.group&&!this.group.interactive||js&&js.actionPerformed||Wo(Ds)||Fs||(this.__lastSelected&&!this.getActiveControl()?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(Ds),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0)}setCursorByClick(p){const Ds=this.getSelectionStartFromPointer(p),js=this.selectionStart,Fs=this.selectionEnd;p.shiftKey?this.setSelectionStartEndWithShift(js,Fs,Ds):(this.selectionStart=Ds,this.selectionEnd=Ds),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())}getSelectionStartFromPointer(p){const Ds=this.canvas.getScenePoint(p).transform(St(this.calcTransformMatrix())).add(new ht(-this._getLeftOffset(),-this._getTopOffset()));let js=0,Fs=0,Rs=0;for(let no=0;no<this._textLines.length&&js<=Ds.y;no++)js+=this.getHeightOfLine(no),Rs=no,no>0&&(Fs+=this._textLines[no-1].length+this.missingNewlineOffset(no-1));let Kn=Math.abs(this._getLineLeftOffset(Rs));
vendor: 33,510 bytes, lines 56-113
56const ro=this._textLines[Rs].length,io=this.__charBounds[Rs];for(let no=0;no<ro;no++){const na=Kn+io[no].kernedWidth;if(Ds.x<=na){Math.abs(Ds.x-na)<=Math.abs(Ds.x-Kn)&&Fs++;break}Kn=na,Fs++}return Math.min(this.flipX?ro-Fs:Fs,this._text.length)}}const Vo="moveCursorUp",Ho="moveCursorDown",Go="moveCursorLeft",zo="moveCursorRight",No="exitEditing",Uo=s({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:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,keysMap:{9:No,27:No,33:Vo,34:Ho,35:zo,36:Go,37:Go,38:Vo,39:zo,40:Ho},keysMapRtl:{9:No,27:No,33:Vo,34:Ho,35:Go,36:zo,37:zo,38:Vo,39:Go,40:Ho},ctrlKeysMapDown:{65:"selectAll"},ctrlKeysMapUp:{67:"copy",88:"cut"}},{_selectionDirection:null,_reSpace:/\s|\r?\n/,inCompositionMode:!1});class qo extends Yo{static getDefaults(){return s(s({},super.getDefaults()),qo.ownDefaults)}get type(){const p=super.type;return p==="itext"?"i-text":p}constructor(p,Ds){super(p,s(s({},qo.ownDefaults),Ds)),this.initBehavior()}_set(p,Ds){return this.isEditing&&this._savedProps&&p in this._savedProps?(this._savedProps[p]=Ds,this):(p==="canvas"&&(this.canvas instanceof An&&this.canvas.textEditingManager.remove(this),Ds instanceof An&&Ds.textEditingManager.add(this)),super._set(p,Ds))}setSelectionStart(p){p=Math.max(p,0),this._updateAndFire("selectionStart",p)}setSelectionEnd(p){p=Math.min(p,this.text.length),this._updateAndFire("selectionEnd",p)}_updateAndFire(p,Ds){this[p]!==Ds&&(this._fireSelectionChanged(),this[p]=Ds),this._updateTextarea()}_fireSelectionChanged(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})}initDimensions(){this.isEditing&&this.initDelayedCursor(),super.initDimensions()}getSelectionStyles(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.selectionStart||0,Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selectionEnd,js=arguments.length>2?arguments[2]:void 0;return super.getSelectionStyles(p,Ds,js)}setSelectionStyles(p){let Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.selectionStart||0,js=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.selectionEnd;return super.setSelectionStyles(p,Ds,js)}get2DCursorLocation(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.selectionStart,Ds=arguments.length>1?arguments[1]:void 0;return super.get2DCursorLocation(p,Ds)}render(p){super.render(p),this.cursorOffsetCache={},this.renderCursorOrSelection()}toCanvasElement(p){const Ds=this.isEditing;this.isEditing=!1;const js=super.toCanvasElement(p);return this.isEditing=Ds,js}renderCursorOrSelection(){if(!this.isEditing)return;const p=this.clearContextTop(!0);if(!p)return;const Ds=this._getCursorBoundaries();this.selectionStart===this.selectionEnd?this.renderCursor(p,Ds):this.renderSelection(p,Ds),this.canvas.contextTopDirty=!0,p.restore()}_getCursorBoundaries(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.selectionStart,Ds=arguments.length>1?arguments[1]:void 0;const js=this._getLeftOffset(),Fs=this._getTopOffset(),Rs=this._getCursorBoundariesOffsets(p,Ds);return{left:js,top:Fs,leftOffset:Rs.left,topOffset:Rs.top}}_getCursorBoundariesOffsets(p,Ds){return Ds?this.__getCursorBoundariesOffsets(p):this.cursorOffsetCache&&"top"in this.cursorOffsetCache?this.cursorOffsetCache:this.cursorOffsetCache=this.__getCursorBoundariesOffsets(p)}__getCursorBoundariesOffsets(p){let Ds=0,js=0;const{charIndex:Fs,lineIndex:Rs}=this.get2DCursorLocation(p);for(let no=0;no<Rs;no++)Ds+=this.getHeightOfLine(no);const Kn=this._getLineLeftOffset(Rs),ro=this.__charBounds[Rs][Fs];ro&&(js=ro.left),this.charSpacing!==0&&Fs===this._textLines[Rs].length&&(js-=this._getWidthOfCharSpacing());const io={top:Ds,left:Kn+(js>0?js:0)};return this.direction==="rtl"&&(this.textAlign===j||this.textAlign===To||this.textAlign===ko?io.left*=-1:this.textAlign===P||this.textAlign===Oo?io.left=Kn-(js>0?js:0):this.textAlign!==M&&this.textAlign!==Do||(io.left=Kn-(js>0?js:0))),io}renderCursorAt(p){const Ds=this._getCursorBoundaries(p,!0);this._renderCursor(this.canvas.contextTop,Ds,p)}renderCursor(p,Ds){this._renderCursor(p,Ds,this.selectionStart)}_renderCursor(p,Ds,js){const Fs=this.get2DCursorLocation(js),Rs=Fs.lineIndex,Kn=Fs.charIndex>0?Fs.charIndex-1:0,ro=this.getValueOfPropertyAt(Rs,Kn,"fontSize"),io=this.getObjectScaling().x*this.canvas.getZoom(),no=this.cursorWidth/io,na=this.getValueOfPropertyAt(Rs,Kn,"deltaY"),ca=Ds.topOffset+(1-this._fontSizeFraction)*this.getHeightOfLine(Rs)/this.lineHeight-ro*(1-this._fontSizeFraction);this.inCompositionMode&&this.renderSelection(p,Ds),p.fillStyle=this.cursorColor||this.getValueOfPropertyAt(Rs,Kn,K),p.globalAlpha=this._currentCursorOpacity,p.fillRect(Ds.left+Ds.leftOffset-no/2,ca+Ds.top+na,no,ro)}renderSelection(p,Ds){const js={selectionStart:this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,selectionEnd:this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd};this._renderSelection(p,js,Ds)}renderDragSourceEffect(){const p=this.draggableTextDelegate.getDragStartSelection();this._renderSelection(this.canvas.contextTop,p,this._getCursorBoundaries(p.selectionStart,!0))}renderDropTargetEffect(p){const Ds=this.getSelectionStartFromPointer(p);this.renderCursorAt(Ds)}_renderSelection(p,Ds,js){const Fs=Ds.selectionStart,Rs=Ds.selectionEnd,Kn=this.textAlign.includes(To),ro=this.get2DCursorLocation(Fs),io=this.get2DCursorLocation(Rs),no=ro.lineIndex,na=io.lineIndex,ca=ro.charIndex<0?0:ro.charIndex,la=io.charIndex<0?0:io.charIndex;for(let ua=no;ua<=na;ua++){const da=this._getLineLeftOffset(ua)||0;let ga=this.getHeightOfLine(ua),pa=0,ma=0,xa=0;if(ua===no&&(ma=this.__charBounds[no][ca].left),ua>=no&&ua<na)xa=Kn&&!this.isEndOfWrapping(ua)?this.width:this.getLineWidth(ua)||5;else if(ua===na)if(la===0)xa=this.__charBounds[na][la].left;else{const Ca=this._getWidthOfCharSpacing();xa=this.__charBounds[na][la-1].left+this.__charBounds[na][la-1].width-Ca}pa=ga,(this.lineHeight<1||ua===na&&this.lineHeight>1)&&(ga/=this.lineHeight);let wa=js.left+da+ma,Oa=ga,fa=0;const va=xa-ma;this.inCompositionMode?(p.fillStyle=this.compositionColor||"black",Oa=1,fa=ga):p.fillStyle=this.selectionColor,this.direction==="rtl"&&(this.textAlign===j||this.textAlign===To||this.textAlign===ko?wa=this.width-wa-va:this.textAlign===P||this.textAlign===Oo?wa=js.left+da-xa:this.textAlign!==M&&this.textAlign!==Do||(wa=js.left+da-xa)),p.fillRect(wa,js.top+js.topOffset+fa,va,Oa),js.topOffset+=pa}}getCurrentCharFontSize(){const p=this._getCurrentCharIndex();return this.getValueOfPropertyAt(p.l,p.c,"fontSize")}getCurrentCharColor(){const p=this._getCurrentCharIndex();return this.getValueOfPropertyAt(p.l,p.c,K)}_getCurrentCharIndex(){const p=this.get2DCursorLocation(this.selectionStart,!0),Ds=p.charIndex>0?p.charIndex-1:0;return{l:p.lineIndex,c:Ds}}dispose(){this._exitEditing(),this.draggableTextDelegate.dispose(),super.dispose()}}t(qo,"ownDefaults",Uo),t(qo,"type","IText"),tt.setClass(qo),tt.setClass(qo,"i-text");class Ko extends qo{static getDefaults(){return s(s({},super.getDefaults()),Ko.ownDefaults)}constructor(p,Ds){super(p,s(s({},Ko.ownDefaults),Ds))}static createControls(){return{controls:wi()}}initDimensions(){this.initialized&&(this.isEditing&&this.initDelayedCursor(),this._clearCache(),this.dynamicMinWidth=0,this._styleMap=this._generateStyleMap(this._splitText()),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this.textAlign.includes(To)&&this.enlargeSpaces(),this.height=this.calcTextHeight())}_generateStyleMap(p){let Ds=0,js=0,Fs=0;const Rs={};for(let Kn=0;Kn<p.graphemeLines.length;Kn++)p.graphemeText[Fs]===` 57`&&Kn>0?(js=0,Fs++,Ds++):!this.splitByGrapheme&&this._reSpaceAndTab.test(p.graphemeText[Fs])&&Kn>0&&(js++,Fs++),Rs[Kn]={line:Ds,offset:js},Fs+=p.graphemeLines[Kn].length,js+=p.graphemeLines[Kn].length;return Rs}styleHas(p,Ds){if(this._styleMap&&!this.isWrapping){const js=this._styleMap[Ds];js&&(Ds=js.line)}return super.styleHas(p,Ds)}isEmptyStyles(p){if(!this.styles)return!0;let Ds,js=0,Fs=p+1,Rs=!1;const Kn=this._styleMap[p],ro=this._styleMap[p+1];Kn&&(p=Kn.line,js=Kn.offset),ro&&(Fs=ro.line,Rs=Fs===p,Ds=ro.offset);const io=p===void 0?this.styles:{line:this.styles[p]};for(const no in io)for(const na in io[no]){const ca=parseInt(na,10);if(ca>=js&&(!Rs||ca<Ds))for(const la in io[no][na])return!1}return!0}_getStyleDeclaration(p,Ds){if(this._styleMap&&!this.isWrapping){const js=this._styleMap[p];if(!js)return{};p=js.line,Ds=js.offset+Ds}return super._getStyleDeclaration(p,Ds)}_setStyleDeclaration(p,Ds,js){const Fs=this._styleMap[p];super._setStyleDeclaration(Fs.line,Fs.offset+Ds,js)}_deleteStyleDeclaration(p,Ds){const js=this._styleMap[p];super._deleteStyleDeclaration(js.line,js.offset+Ds)}_getLineStyle(p){const Ds=this._styleMap[p];return!!this.styles[Ds.line]}_setLineStyle(p){const Ds=this._styleMap[p];super._setLineStyle(Ds.line)}_wrapText(p,Ds){this.isWrapping=!0;const js=this.getGraphemeDataForRender(p),Fs=[];for(let Rs=0;Rs<js.wordsData.length;Rs++)Fs.push(...this._wrapLine(Rs,Ds,js));return this.isWrapping=!1,Fs}getGraphemeDataForRender(p){const Ds=this.splitByGrapheme,js=Ds?"":" ";let Fs=0;return{wordsData:p.map(((Rs,Kn)=>{let ro=0;const io=Ds?this.graphemeSplit(Rs):this.wordSplit(Rs);return io.length===0?[{word:[],width:0}]:io.map((no=>{const na=Ds?[no]:this.graphemeSplit(no),ca=this._measureWord(na,Kn,ro);return Fs=Math.max(ca,Fs),ro+=na.length+js.length,{word:na,width:ca}}))})),largestWordWidth:Fs}}_measureWord(p,Ds){let js,Fs=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,Rs=0;for(let Kn=0,ro=p.length;Kn<ro;Kn++)Rs+=this._getGraphemeBox(p[Kn],Ds,Kn+Fs,js,!0).kernedWidth,js=p[Kn];return Rs}wordSplit(p){return p.split(this._wordJoiners)}_wrapLine(p,Ds,js){let{largestWordWidth:Fs,wordsData:Rs}=js,Kn=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;const ro=this._getWidthOfCharSpacing(),io=this.splitByGrapheme,no=[],na=io?"":" ";let ca=0,la=[],ua=0,da=0,ga=!0;Ds-=Kn;const pa=Math.max(Ds,Fs,this.dynamicMinWidth),ma=Rs[p];let xa;for(ua=0,xa=0;xa<ma.length;xa++){const{word:wa,width:Oa}=ma[xa];ua+=wa.length,ca+=da+Oa-ro,ca>pa&&!ga?(no.push(la),la=[],ca=Oa,ga=!0):ca+=ro,ga||io||la.push(na),la=la.concat(wa),da=io?0:this._measureWord([na],p,ua),ua++,ga=!1}return xa&&no.push(la),Fs+Kn>this.dynamicMinWidth&&(this.dynamicMinWidth=Fs-ro+Kn),no}isEndOfWrapping(p){return!this._styleMap[p+1]||this._styleMap[p+1].line!==this._styleMap[p].line}missingNewlineOffset(p,Ds){return this.splitByGrapheme&&!Ds?this.isEndOfWrapping(p)?1:0:1}_splitTextIntoLines(p){const Ds=super._splitTextIntoLines(p),js=this._wrapText(Ds.lines,this.width),Fs=new Array(js.length);for(let Rs=0;Rs<js.length;Rs++)Fs[Rs]=js[Rs].join("");return Ds.lines=Fs,Ds.graphemeLines=js,Ds}getMinWidth(){return Math.max(this.minWidth,this.dynamicMinWidth)}_removeExtraneousStyles(){const p=new Map;for(const Ds in this._styleMap){const js=parseInt(Ds,10);if(this._textLines[js]){const Fs=this._styleMap[Ds].line;p.set("".concat(Fs),!0)}}for(const Ds in this.styles)p.has(Ds)||delete this.styles[Ds]}toObject(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return super.toObject(["minWidth","splitByGrapheme",...p])}}t(Ko,"type","Textbox"),t(Ko,"textLayoutProperties",[...qo.textLayoutProperties,"width"]),t(Ko,"ownDefaults",{minWidth:20,dynamicMinWidth:2,lockScalingFlip:!0,noScaleCache:!1,_wordJoiners:/[ \t\r]/,splitByGrapheme:!1}),tt.setClass(Ko);class Jo extends Or{shouldPerformLayout(p){return!!p.target.clipPath&&super.shouldPerformLayout(p)}shouldLayoutClipPath(){return!1}calcLayoutResult(p,Ds){const{target:js}=p,{clipPath:Fs,group:Rs}=js;if(!Fs||!this.shouldPerformLayout(p))return;const{width:Kn,height:ro}=_e(Tr(js,Fs)),io=new ht(Kn,ro);if(Fs.absolutePositioned)return{center:ke(Fs.getRelativeCenterPoint(),void 0,Rs?Rs.calcTransformMatrix():void 0),size:io};{const no=Fs.getRelativeCenterPoint().transform(js.calcOwnMatrix(),!0);if(this.shouldPerformLayout(p)){const{center:na=new ht,correction:ca=new ht}=this.calcBoundingBox(Ds,p)||{};return{center:na.add(no),correction:ca.subtract(no),size:io}}return{center:js.getRelativeCenterPoint().add(no),size:io}}}}t(Jo,"type","clip-path"),tt.setClass(Jo);class Zo extends Or{getInitialSize(p,Ds){let{target:js}=p,{size:Fs}=Ds;return new ht(js.width||Fs.x,js.height||Fs.y)}}t(Zo,"type","fixed"),tt.setClass(Zo);class Qo extends Er{subscribeTargets(p){const Ds=p.target;p.targets.reduce(((js,Fs)=>(Fs.parent&&js.add(Fs.parent),js)),new Set).forEach((js=>{js.layoutManager.subscribeTargets({target:js,targets:[Ds]})}))}unsubscribeTargets(p){const Ds=p.target,js=Ds.getObjects();p.targets.reduce(((Fs,Rs)=>(Rs.parent&&Fs.add(Rs.parent),Fs)),new Set).forEach((Fs=>{!js.some((Rs=>Rs.parent===Fs))&&Fs.layoutManager.unsubscribeTargets({target:Fs,targets:[Ds]})}))}}class $o extends Fr{static getDefaults(){return s(s({},super.getDefaults()),$o.ownDefaults)}constructor(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};super(),Object.assign(this,$o.ownDefaults),this.setOptions(Ds);const{left:js,top:Fs,layoutManager:Rs}=Ds;this.groupInit(p,{left:js,top:Fs,layoutManager:Rs??new Qo})}_shouldSetNestedCoords(){return!0}__objectSelectionMonitor(){}multiSelectAdd(){for(var p=arguments.length,Ds=new Array(p),js=0;js<p;js++)Ds[js]=arguments[js];this.multiSelectionStacking==="selection-order"?this.add(...Ds):Ds.forEach((Fs=>{const Rs=this._objects.findIndex((ro=>ro.isInFrontOf(Fs))),Kn=Rs===-1?this.size():Rs;this.insertAt(Kn,Fs)}))}canEnterGroup(p){return this.getObjects().some((Ds=>Ds.isDescendantOf(p)||p.isDescendantOf(Ds)))?(h("error","ActiveSelection: circular object trees are not supported, this call has no effect"),!1):super.canEnterGroup(p)}enterGroup(p,Ds){p.parent&&p.parent===p.group?p.parent._exitGroup(p):p.group&&p.parent!==p.group&&p.group.remove(p),this._enterGroup(p,Ds)}exitGroup(p,Ds){this._exitGroup(p,Ds),p.parent&&p.parent._enterGroup(p,!0)}_onAfterObjectsChange(p,Ds){super._onAfterObjectsChange(p,Ds);const js=new Set;Ds.forEach((Fs=>{const{parent:Rs}=Fs;Rs&&js.add(Rs)})),p===wr?js.forEach((Fs=>{Fs._onAfterObjectsChange(br,Ds)})):js.forEach((Fs=>{Fs._set("dirty",!0)}))}onDeselect(){return this.removeAll(),!1}toString(){return"#<ActiveSelection: (".concat(this.complexity(),")>")}shouldCache(){return!1}isOnACache(){return!1}_renderControls(p,Ds,js){p.save(),p.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1;const Fs=s(s({hasControls:!1},js),{},{forActiveSelection:!0});for(let Rs=0;Rs<this._objects.length;Rs++)this._objects[Rs]._renderControls(p,Fs);super._renderControls(p,Ds),p.restore()}}t($o,"type","ActiveSelection"),t($o,"ownDefaults",{multiSelectionStacking:"canvas-stacking"}),tt.setClass($o),tt.setClass($o,"activeSelection");class ta{constructor(){t(this,"resources",{})}applyFilters(p,Ds,js,Fs,Rs){const Kn=Rs.getContext("2d");if(!Kn)return;Kn.drawImage(Ds,0,0,js,Fs);const ro={sourceWidth:js,sourceHeight:Fs,imageData:Kn.getImageData(0,0,js,Fs),originalEl:Ds,originalImageData:Kn.getImageData(0,0,js,Fs),canvasEl:Rs,ctx:Kn,filterBackend:this};p.forEach((no=>{no.applyTo(ro)}));const{imageData:io}=ro;return io.width===js&&io.height===Fs||(Rs.width=io.width,Rs.height=io.height),Kn.putImageData(io,0,0),ro}}class ea{constructor(){let{tileSize:p=a.textureSize}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};t(this,"aPosition",new Float32Array([0,0,0,1,1,0,1,1])),t(this,"resources",{}),this.tileSize=p,this.setupGLContext(p,p),this.captureGPUInfo()}setupGLContext(p,Ds){this.dispose(),this.createWebGLCanvas(p,Ds)}createWebGLCanvas(p,Ds){const js=vt();js.width=p,js.height=Ds;const Fs=js.getContext("webgl",{alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1});Fs&&(Fs.clearColor(0,0,0,0),this.canvas=js,this.gl=Fs)}applyFilters(p,Ds,js,Fs,Rs,Kn){const ro=this.gl,io=Rs.getContext("2d");if(!ro||!io)return;let no;Kn&&(no=this.getCachedTexture(Kn,Ds));const na={originalWidth:Ds.width||Ds.originalWidth||0,originalHeight:Ds.height||Ds.originalHeight||0,sourceWidth:js,sourceHeight:Fs,destinationWidth:js,destinationHeight:Fs,context:ro,sourceTexture:this.createTexture(ro,js,Fs,no?void 0:Ds),targetTexture:this.createTexture(ro,js,Fs),originalTexture:no||this.createTexture(ro,js,Fs,no?void 0:Ds),passes:p.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:Rs},ca=ro.createFramebuffer();return ro.bindFramebuffer(ro.FRAMEBUFFER,ca),p.forEach((la=>{la&&la.applyTo(na)})),(function(la){const ua=la.targetCanvas,da=ua.width,ga=ua.height,pa=la.destinationWidth,ma=la.destinationHeight;da===pa&&ga===ma||(ua.width=pa,ua.height=ma)})(na),this.copyGLTo2D(ro,na),ro.bindTexture(ro.TEXTURE_2D,null),ro.deleteTexture(na.sourceTexture),ro.deleteTexture(na.targetTexture),ro.deleteFramebuffer(ca),io.setTransform(1,0,0,1,0,0),na}dispose(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()}clearWebGLCaches(){this.programCache={},this.textureCache={}}createTexture(p,Ds,js,Fs,Rs){const{NEAREST:Kn,TEXTURE_2D:ro,RGBA:io,UNSIGNED_BYTE:no,CLAMP_TO_EDGE:na,TEXTURE_MAG_FILTER:ca,TEXTURE_MIN_FILTER:la,TEXTURE_WRAP_S:ua,TEXTURE_WRAP_T:da}=p,ga=p.createTexture();return p.bindTexture(ro,ga),p.texParameteri(ro,ca,Rs||Kn),p.texParameteri(ro,la,Rs||Kn),p.texParameteri(ro,ua,na),p.texParameteri(ro,da,na),Fs?p.texImage2D(ro,0,io,io,no,Fs):p.texImage2D(ro,0,io,Ds,js,0,io,no,null),ga}getCachedTexture(p,Ds,js){const{textureCache:Fs}=this;if(Fs[p])return Fs[p];{const Rs=this.createTexture(this.gl,Ds.width,Ds.height,Ds,js);return Rs&&(Fs[p]=Rs),Rs}}evictCachesForKey(p){this.textureCache[p]&&(this.gl.deleteTexture(this.textureCache[p]),delete this.textureCache[p])}copyGLTo2D(p,Ds){const js=p.canvas,Fs=Ds.targetCanvas,Rs=Fs.getContext("2d");if(!Rs)return;Rs.translate(0,Fs.height),Rs.scale(1,-1);const Kn=js.height-Fs.height;Rs.drawImage(js,0,Kn,Fs.width,Fs.height,0,0,Fs.width,Fs.height)}copyGLTo2DPutImageData(p,Ds){const js=Ds.targetCanvas.getContext("2d"),Fs=Ds.destinationWidth,Rs=Ds.destinationHeight,Kn=Fs*Rs*4;if(!js)return;const ro=new Uint8Array(this.imageBuffer,0,Kn),io=new Uint8ClampedArray(this.imageBuffer,0,Kn);p.readPixels(0,0,Fs,Rs,p.RGBA,p.UNSIGNED_BYTE,ro);const no=new ImageData(io,Fs,Rs);js.putImageData(no,0,0)}captureGPUInfo(){if(this.gpuInfo)return this.gpuInfo;const p=this.gl,Ds={renderer:"",vendor:""};if(!p)return Ds;const js=p.getExtension("WEBGL_debug_renderer_info");if(js){const Fs=p.getParameter(js.UNMASKED_RENDERER_WEBGL),Rs=p.getParameter(js.UNMASKED_VENDOR_WEBGL);Fs&&(Ds.renderer=Fs.toLowerCase()),Rs&&(Ds.vendor=Rs.toLowerCase())}return this.gpuInfo=Ds,Ds}}let sa;function ia(){const{WebGLProbe:$n}=m();return $n.queryWebGL(vt()),a.enableGLFiltering&&$n.isSupported(a.textureSize)?new ea({tileSize:a.textureSize}):new ta}function ra(){return!sa&&(!(arguments.length>0&&arguments[0]!==void 0)||arguments[0])&&(sa=ia()),sa}const oa=["filters","resizeFilter","src","crossOrigin","type"],aa=["cropX","cropY"];class ha extends Oi{static getDefaults(){return s(s({},super.getDefaults()),ha.ownDefaults)}constructor(p,Ds){super(),t(this,"_lastScaleX",1),t(this,"_lastScaleY",1),t(this,"_filterScalingX",1),t(this,"_filterScalingY",1),this.filters=[],Object.assign(this,ha.ownDefaults),this.setOptions(Ds),this.cacheKey="texture".concat(mt()),this.setElement(typeof p=="string"?(this.canvas&&oe(this.canvas.getElement())||v()).getElementById(p):p,Ds)}getElement(){return this._element}setElement(p){let Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.removeTexture(this.cacheKey),this.removeTexture("".concat(this.cacheKey,"_filtered")),this._element=p,this._originalElement=p,this._setWidthHeight(Ds),p.classList.add(ha.CSS_CANVAS),this.filters.length!==0&&this.applyFilters(),this.resizeFilter&&this.applyResizeFilters()}removeTexture(p){const Ds=ra(!1);Ds instanceof ea&&Ds.evictCachesForKey(p)}dispose(){super.dispose(),this.removeTexture(this.cacheKey),this.removeTexture("".concat(this.cacheKey,"_filtered")),this._cacheContext=null,["_originalElement","_element","_filteredEl","_cacheCanvas"].forEach((p=>{const Ds=this[p];Ds&&m().dispose(Ds),this[p]=void 0}))}getCrossOrigin(){return this._originalElement&&(this._originalElement.crossOrigin||null)}getOriginalSize(){const p=this.getElement();return p?{width:p.naturalWidth||p.width,height:p.naturalHeight||p.height}:{width:0,height:0}}_stroke(p){if(!this.stroke||this.strokeWidth===0)return;const Ds=this.width/2,js=this.height/2;p.beginPath(),p.moveTo(-Ds,-js),p.lineTo(Ds,-js),p.lineTo(Ds,js),p.lineTo(-Ds,js),p.lineTo(-Ds,-js),p.closePath()}toObject(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];const Ds=[];return this.filters.forEach((js=>{js&&Ds.push(js.toObject())})),s(s({},super.toObject([...aa,...p])),{},{src:this.getSrc(),crossOrigin:this.getCrossOrigin(),filters:Ds},this.resizeFilter?{resizeFilter:this.resizeFilter.toObject()}:{})}hasCrop(){return!!this.cropX||!!this.cropY||this.width<this._element.width||this.height<this._element.height}_toSVG(){const p=[],Ds=this._element,js=-this.width/2,Fs=-this.height/2;let Rs=[],Kn=[],ro="",io="";if(!Ds)return[];if(this.hasCrop()){const no=mt();Rs.push('<clipPath id="imageCrop_'+no+`"> 58`,' <rect x="'+js+'" y="'+Fs+'" width="'+this.width+'" height="'+this.height+`" /> 59`,`</clipPath> 60`),ro=' clip-path="url(#imageCrop_'+no+')" '}if(this.imageSmoothing||(io=' image-rendering="optimizeSpeed"'),p.push(" <image ","COMMON_PARTS",'xlink:href="'.concat(this.getSvgSrc(!0),'" x="').concat(js-this.cropX,'" y="').concat(Fs-this.cropY,'" width="').concat(Ds.width||Ds.naturalWidth,'" height="').concat(Ds.height||Ds.naturalHeight,'"').concat(io).concat(ro,`></image> 61`)),this.stroke||this.strokeDashArray){const no=this.fill;this.fill=null,Kn=[' <rect x="'.concat(js,'" y="').concat(Fs,'" width="').concat(this.width,'" height="').concat(this.height,'" style="').concat(this.getSvgStyles(),`" /> 62`)],this.fill=no}return Rs=this.paintFirst!==K?Rs.concat(Kn,p):Rs.concat(p,Kn),Rs}getSrc(p){const Ds=p?this._element:this._originalElement;return Ds?Ds.toDataURL?Ds.toDataURL():this.srcFromAttribute?Ds.getAttribute("src")||"":Ds.src:this.src||""}getSvgSrc(p){return this.getSrc(p)}setSrc(p){let{crossOrigin:Ds,signal:js}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return Bt(p,{crossOrigin:Ds,signal:js}).then((Fs=>{Ds!==void 0&&this.set({crossOrigin:Ds}),this.setElement(Fs)}))}toString(){return'#<Image: { src: "'.concat(this.getSrc(),'" }>')}applyResizeFilters(){const p=this.resizeFilter,Ds=this.minimumScaleTrigger,js=this.getTotalObjectScaling(),Fs=js.x,Rs=js.y,Kn=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!p||Fs>Ds&&Rs>Ds)return this._element=Kn,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=Fs,void(this._lastScaleY=Rs);const ro=vt(),io=Kn.width,no=Kn.height;ro.width=io,ro.height=no,this._element=ro,this._lastScaleX=p.scaleX=Fs,this._lastScaleY=p.scaleY=Rs,ra().applyFilters([p],Kn,io,no,this._element),this._filterScalingX=ro.width/this._originalElement.width,this._filterScalingY=ro.height/this._originalElement.height}applyFilters(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.filters||[];if(p=p.filter((Rs=>Rs&&!Rs.isNeutralState())),this.set("dirty",!0),this.removeTexture("".concat(this.cacheKey,"_filtered")),p.length===0)return this._element=this._originalElement,this._filteredEl=void 0,this._filterScalingX=1,void(this._filterScalingY=1);const Ds=this._originalElement,js=Ds.naturalWidth||Ds.width,Fs=Ds.naturalHeight||Ds.height;if(this._element===this._originalElement){const Rs=vt();Rs.width=js,Rs.height=Fs,this._element=Rs,this._filteredEl=Rs}else this._filteredEl&&(this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,js,Fs),this._lastScaleX=1,this._lastScaleY=1);ra().applyFilters(p,this._originalElement,js,Fs,this._element),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)}_render(p){p.imageSmoothingEnabled=this.imageSmoothing,this.isMoving!==!0&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(p),this._renderPaintInOrder(p)}drawCacheOnCanvas(p){p.imageSmoothingEnabled=this.imageSmoothing,super.drawCacheOnCanvas(p)}shouldCache(){return this.needsItsOwnCache()}_renderFill(p){const Ds=this._element;if(!Ds)return;const js=this._filterScalingX,Fs=this._filterScalingY,Rs=this.width,Kn=this.height,ro=Math.max(this.cropX,0),io=Math.max(this.cropY,0),no=Ds.naturalWidth||Ds.width,na=Ds.naturalHeight||Ds.height,ca=ro*js,la=io*Fs,ua=Math.min(Rs*js,no-ca),da=Math.min(Kn*Fs,na-la),ga=-Rs/2,pa=-Kn/2,ma=Math.min(Rs,no/js-ro),xa=Math.min(Kn,na/Fs-io);Ds&&p.drawImage(Ds,ca,la,ua,da,ga,pa,ma,xa)}_needsResize(){const p=this.getTotalObjectScaling();return p.x!==this._lastScaleX||p.y!==this._lastScaleY}_resetWidthHeight(){this.set(this.getOriginalSize())}_setWidthHeight(){let{width:p,height:Ds}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const js=this.getOriginalSize();this.width=p||js.width,this.height=Ds||js.height}parsePreserveAspectRatioAttribute(){const p=Zt(this.preserveAspectRatio||""),Ds=this.width,js=this.height,Fs={width:Ds,height:js};let Rs,Kn=this._element.width,ro=this._element.height,io=1,no=1,na=0,ca=0,la=0,ua=0;return!p||p.alignX===F&&p.alignY===F?(io=Ds/Kn,no=js/ro):(p.meetOrSlice==="meet"&&(io=no=Lr(this._element,Fs),Rs=(Ds-Kn*io)/2,p.alignX==="Min"&&(na=-Rs),p.alignX==="Max"&&(na=Rs),Rs=(js-ro*no)/2,p.alignY==="Min"&&(ca=-Rs),p.alignY==="Max"&&(ca=Rs)),p.meetOrSlice==="slice"&&(io=no=Rr(this._element,Fs),Rs=Kn-Ds/io,p.alignX==="Mid"&&(la=Rs/2),p.alignX==="Max"&&(la=Rs),Rs=ro-js/no,p.alignY==="Mid"&&(ua=Rs/2),p.alignY==="Max"&&(ua=Rs),Kn=Ds/io,ro=js/no)),{width:Kn,height:ro,scaleX:io,scaleY:no,offsetLeft:na,offsetTop:ca,cropX:la,cropY:ua}}static fromObject(p,Ds){let{filters:js,resizeFilter:Fs,src:Rs,crossOrigin:Kn,type:ro}=p,io=i(p,oa);return Promise.all([Bt(Rs,s(s({},Ds),{},{crossOrigin:Kn})),js&&It(js,Ds),Fs&&It([Fs],Ds),Xt(io,Ds)]).then((no=>{let[na,ca=[],[la]=[],ua={}]=no;return new this(na,s(s({},io),{},{src:Rs,filters:ca,resizeFilter:la},ua))}))}static fromURL(p){let{crossOrigin:Ds=null,signal:js}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Fs=arguments.length>2?arguments[2]:void 0;return Bt(p,{crossOrigin:Ds,signal:js}).then((Rs=>new this(Rs,Fs)))}static async fromElement(p){let Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},js=arguments.length>2?arguments[2]:void 0;const Fs=vr(p,this.ATTRIBUTE_NAMES,js);return this.fromURL(Fs["xlink:href"],Ds,Fs).catch((Rs=>(h("log","Unable to parse Image",Rs),null)))}}t(ha,"type","Image"),t(ha,"cacheProperties",[...Vs,...aa]),t(ha,"ownDefaults",{strokeWidth:0,srcFromAttribute:!1,minimumScaleTrigger:.5,cropX:0,cropY:0,imageSmoothing:!0}),t(ha,"CSS_CANVAS","canvas-img"),t(ha,"ATTRIBUTE_NAMES",[...Wi,"x","y","width","height","preserveAspectRatio","xlink:href","crossOrigin","image-rendering"]),tt.setClass(ha),tt.setSVGClass(ha);Ss(["pattern","defs","symbol","metadata","clipPath","mask","desc"]);const Ea=$n=>$n.webgl!==void 0,ja="precision highp float",Fa=` 63 `.concat(ja,`; 64 varying vec2 vTexCoord; 65 uniform sampler2D uTexture; 66 void main() { 67 gl_FragColor = texture2D(uTexture, vTexCoord); 68 }`),La=["type"],Ra=["type"],Ba=new RegExp(ja,"g");class Ia{get type(){return this.constructor.type}constructor(){let p=i(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},La);Object.assign(this,this.constructor.defaults,p)}getFragmentSource(){return Fa}getVertexSource(){return` 69 attribute vec2 aPosition; 70 varying vec2 vTexCoord; 71 void main() { 72 vTexCoord = aPosition; 73 gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0); 74 }`}createProgram(p){let Ds=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.getFragmentSource(),js=arguments.length>2&&arguments[2]!==void 0?arguments[2]:this.getVertexSource();const{WebGLProbe:{GLPrecision:Fs="highp"}}=m();Fs!=="highp"&&(Ds=Ds.replace(Ba,ja.replace("highp",Fs)));const Rs=p.createShader(p.VERTEX_SHADER),Kn=p.createShader(p.FRAGMENT_SHADER),ro=p.createProgram();if(!Rs||!Kn||!ro)throw new c("Vertex, fragment shader or program creation error");if(p.shaderSource(Rs,js),p.compileShader(Rs),!p.getShaderParameter(Rs,p.COMPILE_STATUS))throw new c("Vertex shader compile error for ".concat(this.type,": ").concat(p.getShaderInfoLog(Rs)));if(p.shaderSource(Kn,Ds),p.compileShader(Kn),!p.getShaderParameter(Kn,p.COMPILE_STATUS))throw new c("Fragment shader compile error for ".concat(this.type,": ").concat(p.getShaderInfoLog(Kn)));if(p.attachShader(ro,Rs),p.attachShader(ro,Kn),p.linkProgram(ro),!p.getProgramParameter(ro,p.LINK_STATUS))throw new c('Shader link error for "'.concat(this.type,'" ').concat(p.getProgramInfoLog(ro)));const io=this.getUniformLocations(p,ro)||{};return io.uStepW=p.getUniformLocation(ro,"uStepW"),io.uStepH=p.getUniformLocation(ro,"uStepH"),{program:ro,attributeLocations:this.getAttributeLocations(p,ro),uniformLocations:io}}getAttributeLocations(p,Ds){return{aPosition:p.getAttribLocation(Ds,"aPosition")}}getUniformLocations(p,Ds){const js=this.constructor.uniformLocations,Fs={};for(let Rs=0;Rs<js.length;Rs++)Fs[js[Rs]]=p.getUniformLocation(Ds,js[Rs]);return Fs}sendAttributeData(p,Ds,js){const Fs=Ds.aPosition,Rs=p.createBuffer();p.bindBuffer(p.ARRAY_BUFFER,Rs),p.enableVertexAttribArray(Fs),p.vertexAttribPointer(Fs,2,p.FLOAT,!1,0,0),p.bufferData(p.ARRAY_BUFFER,js,p.STATIC_DRAW)}_setupFrameBuffer(p){const Ds=p.context;if(p.passes>1){const js=p.destinationWidth,Fs=p.destinationHeight;p.sourceWidth===js&&p.sourceHeight===Fs||(Ds.deleteTexture(p.targetTexture),p.targetTexture=p.filterBackend.createTexture(Ds,js,Fs)),Ds.framebufferTexture2D(Ds.FRAMEBUFFER,Ds.COLOR_ATTACHMENT0,Ds.TEXTURE_2D,p.targetTexture,0)}else Ds.bindFramebuffer(Ds.FRAMEBUFFER,null),Ds.finish()}_swapTextures(p){p.passes--,p.pass++;const Ds=p.targetTexture;p.targetTexture=p.sourceTexture,p.sourceTexture=Ds}isNeutralState(p){return!1}applyTo(p){Ea(p)?(this._setupFrameBuffer(p),this.applyToWebGL(p),this._swapTextures(p)):this.applyTo2d(p)}applyTo2d(p){}getCacheKey(){return this.type}retrieveShader(p){const Ds=this.getCacheKey();return p.programCache[Ds]||(p.programCache[Ds]=this.createProgram(p.context)),p.programCache[Ds]}applyToWebGL(p){const Ds=p.context,js=this.retrieveShader(p);p.pass===0&&p.originalTexture?Ds.bindTexture(Ds.TEXTURE_2D,p.originalTexture):Ds.bindTexture(Ds.TEXTURE_2D,p.sourceTexture),Ds.useProgram(js.program),this.sendAttributeData(Ds,js.attributeLocations,p.aPosition),Ds.uniform1f(js.uniformLocations.uStepW,1/p.sourceWidth),Ds.uniform1f(js.uniformLocations.uStepH,1/p.sourceHeight),this.sendUniformData(Ds,js.uniformLocations),Ds.viewport(0,0,p.destinationWidth,p.destinationHeight),Ds.drawArrays(Ds.TRIANGLE_STRIP,0,4)}bindAdditionalTexture(p,Ds,js){p.activeTexture(js),p.bindTexture(p.TEXTURE_2D,Ds),p.activeTexture(p.TEXTURE0)}unbindAdditionalTexture(p,Ds){p.activeTexture(Ds),p.bindTexture(p.TEXTURE_2D,null),p.activeTexture(p.TEXTURE0)}sendUniformData(p,Ds){}createHelpLayer(p){if(!p.helpLayer){const Ds=vt();Ds.width=p.sourceWidth,Ds.height=p.sourceHeight,p.helpLayer=Ds}}toObject(){const p=Object.keys(this.constructor.defaults);return s({type:this.type},p.reduce(((Ds,js)=>(Ds[js]=this[js],Ds)),{}))}toJSON(){return this.toObject()}static async fromObject(p,Ds){return new this(i(p,Ra))}}t(Ia,"type","BaseFilter"),t(Ia,"uniformLocations",[]);const Xa={multiply:`gl_FragColor.rgb *= uColor.rgb; 75`,screen:`gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb); 76`,add:`gl_FragColor.rgb += uColor.rgb; 77`,difference:`gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb); 78`,subtract:`gl_FragColor.rgb -= uColor.rgb; 79`,lighten:`gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb); 80`,darken:`gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb); 81`,exclusion:`gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb); 82`,overlay:` 83 if (uColor.r < 0.5) { 84 gl_FragColor.r *= 2.0 * uColor.r; 85 } else { 86 gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r); 87 } 88 if (uColor.g < 0.5) { 89 gl_FragColor.g *= 2.0 * uColor.g; 90 } else { 91 gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g); 92 } 93 if (uColor.b < 0.5) { 94 gl_FragColor.b *= 2.0 * uColor.b; 95 } else { 96 gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b); 97 } 98 `,tint:` 99 gl_FragColor.rgb *= (1.0 - uColor.a); 100 gl_FragColor.rgb += uColor.rgb; 101 `};class Wa extends Ia{getCacheKey(){return"".concat(this.type,"_").concat(this.mode)}getFragmentSource(){return` 102 precision highp float; 103 uniform sampler2D uTexture; 104 uniform vec4 uColor; 105 varying vec2 vTexCoord; 106 void main() { 107 vec4 color = texture2D(uTexture, vTexCoord); 108 gl_FragColor = color; 109 if (color.a > 0.0) { 110 `.concat(Xa[this.mode],` 111 } 112 } 113 `)}applyTo2d(p){let{imageData:{data:Ds}}=p;const js=new qt(this.color).getSource(),Fs=js[0]*this.alpha,Rs=js[1]*this.alpha,Kn=js[2]*this.alpha,ro=1-this.alpha;for(let io=0;io<Ds.length;io+=4){const no=Ds[io],na=Ds[io+1],ca=Ds[io+2];
113switch(this.mode){case"multiply":Ds[io]=no*Fs/255,Ds[io+1]=na*Rs/255,Ds[io+2]=ca*Kn/255;break;case"screen":Ds[io]=255-(255-no)*(255-Fs)/255,Ds[io+1]=255-(255-na)*(255-Rs)/255,Ds[io+2]=255-(255-ca)*(255-Kn)/255;break;case"add":Ds[io]=no+Fs,Ds[io+1]=na+Rs,Ds[io+2]=ca+Kn;break;case"difference":Ds[io]=Math.abs(no-Fs),Ds[io+1]=Math.abs(na-Rs),Ds[io+2]=Math.abs(ca-Kn);break;case"subtract":Ds[io]=no-Fs,Ds[io+1]=na-Rs,Ds[io+2]=ca-Kn;break;case"darken":Ds[io]=Math.min(no,Fs),Ds[io+1]=Math.min(na,Rs),Ds[io+2]=Math.min(ca,Kn);break;case"lighten":Ds[io]=Math.max(no,Fs),Ds[io+1]=Math.max(na,Rs),Ds[io+2]=Math.max(ca,Kn);break;case"overlay":Ds[io]=Fs<128?2*no*Fs/255:255-2*(255-no)*(255-Fs)/255,Ds[io+1]=Rs<128?2*na*Rs/255:255-2*(255-na)*(255-Rs)/255,Ds[io+2]=Kn<128?2*ca*Kn/255:255-2*(255-ca)*(255-Kn)/255;break;case"exclusion":Ds[io]=Fs+no-2*Fs*no/255,Ds[io+1]=Rs+na-2*Rs*na/255,Ds[io+2]=Kn+ca-2*Kn*ca/255;break;case"tint":Ds[io]=Fs+no*ro,Ds[io+1]=Rs+na*ro,Ds[io+2]=Kn+ca*ro}}}sendUniformData(p,Ds){const js=new qt(this.color).getSource();js[0]=this.alpha*js[0]/255,js[1]=this.alpha*js[1]/255,js[2]=this.alpha*js[2]/255,js[3]=this.alpha,p.uniform4fv(Ds.uColor,js)}}t(Wa,"defaults",{color:"#F95C63",mode:"multiply",alpha:1}),t(Wa,"type","BlendColor"),t(Wa,"uniformLocations",["uColor"]),tt.setClass(Wa);const Ya={multiply:` 114 precision highp float; 115 uniform sampler2D uTexture; 116 uniform sampler2D uImage; 117 uniform vec4 uColor; 118 varying vec2 vTexCoord; 119 varying vec2 vTexCoord2; 120 void main() { 121 vec4 color = texture2D(uTexture, vTexCoord); 122 vec4 color2 = texture2D(uImage, vTexCoord2); 123 color.rgba *= color2.rgba; 124 gl_FragColor = color; 125 } 126 `,mask:` 127 precision highp float; 128 uniform sampler2D uTexture; 129 uniform sampler2D uImage; 130 uniform vec4 uColor; 131 varying vec2 vTexCoord; 132 varying vec2 vTexCoord2; 133 void main() { 134 vec4 color = texture2D(uTexture, vTexCoord); 135 vec4 color2 = texture2D(uImage, vTexCoord2); 136 color.a = color2.a; 137 gl_FragColor = color; 138 } 139 `},Va=["type","image"];class Ha extends Ia{getCacheKey(){return"".concat(this.type,"_").concat(this.mode)}getFragmentSource(){return Ya[this.mode]}getVertexSource(){return` 140 attribute vec2 aPosition; 141 varying vec2 vTexCoord; 142 varying vec2 vTexCoord2; 143 uniform mat3 uTransformMatrix; 144 void main() { 145 vTexCoord = aPosition;
146 vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy; 147 gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0); 148 } 149 `}applyToWebGL(p){const Ds=p.context,js=this.createTexture(p.filterBackend,this.image);this.bindAdditionalTexture(Ds,js,Ds.TEXTURE1),super.applyToWebGL(p),this.unbindAdditionalTexture(Ds,Ds.TEXTURE1)}createTexture(p,Ds){return p.getCachedTexture(Ds.cacheKey,Ds.getElement())}calculateMatrix(){const p=this.image,{width:Ds,height:js}=p.getElement();return[1/p.scaleX,0,0,0,1/p.scaleY,0,-p.left/Ds,-p.top/js,1]}applyTo2d(p){let{imageData:{data:Ds,width:js,height:Fs},filterBackend:{resources:Rs}}=p;const Kn=this.image;Rs.blendImage||(Rs.blendImage=vt());const ro=Rs.blendImage,io=ro.getContext("2d");ro.width!==js||ro.height!==Fs?(ro.width=js,ro.height=Fs):io.clearRect(0,0,js,Fs),io.setTransform(Kn.scaleX,0,0,Kn.scaleY,Kn.left,Kn.top),io.drawImage(Kn.getElement(),0,0,js,Fs);const no=io.getImageData(0,0,js,Fs).data;for(let na=0;na<Ds.length;na+=4){const ca=Ds[na],la=Ds[na+1],ua=Ds[na+2],da=Ds[na+3],ga=no[na],pa=no[na+1],ma=no[na+2],xa=no[na+3];switch(this.mode){case"multiply":Ds[na]=ca*ga/255,Ds[na+1]=la*pa/255,Ds[na+2]=ua*ma/255,Ds[na+3]=da*xa/255;break;case"mask":Ds[na+3]=xa}}}sendUniformData(p,Ds){const js=this.calculateMatrix();p.uniform1i(Ds.uImage,1),p.uniformMatrix3fv(Ds.uTransformMatrix,!1,js)}toObject(){return s(s({},super.toObject()),{},{image:this.image&&this.image.toObject()})}static async fromObject(p,Ds){let{type:js,image:Fs}=p,Rs=i(p,Va);return ha.fromObject(Fs,Ds).then((Kn=>new this(s(s({},Rs),{},{image:Kn}))))}}t(Ha,"type","BlendImage"),t(Ha,"defaults",{mode:"multiply",alpha:1}),t(Ha,"uniformLocations",["uTransformMatrix","uImage"]),tt.setClass(Ha);class Ga extends Ia{getFragmentSource(){return` 150 precision highp float; 151 uniform sampler2D uTexture; 152 uniform vec2 uDelta; 153 varying vec2 vTexCoord; 154 const float nSamples = 15.0; 155 vec3 v3offset = vec3(12.9898, 78.233, 151.7182); 156 float random(vec3 scale) { 157 /* use the fragment position for a different seed per-pixel */ 158 return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453); 159 } 160 void main() { 161 vec4 color = vec4(0.0); 162 float total = 0.0; 163 float offset = random(v3offset); 164 for (float t = -nSamples; t <= nSamples; t++) { 165 float percent = (t + offset - 0.5) / nSamples; 166 float weight = 1.0 - abs(percent); 167 color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight; 168 total += weight; 169 } 170 gl_FragColor = color / total; 171 } 172 `}applyTo(p){Ea(p)?(this.aspectRatio=p.sourceWidth/p.sourceHeight,p.passes++,this._setupFrameBuffer(p),this.horizontal=!0,this.applyToWebGL(p),this._swapTextures(p),this._setupFrameBuffer(p),this.horizontal=!1,this.applyToWebGL(p),this._swapTextures(p)):this.applyTo2d(p)}applyTo2d(p){p.imageData=this.simpleBlur(p)}simpleBlur(p){let{ctx:Ds,imageData:js,filterBackend:{resources:Fs}}=p;const{width:Rs,height:Kn}=js;Fs.blurLayer1||(Fs.blurLayer1=vt(),Fs.blurLayer2=vt());const ro=Fs.blurLayer1,io=Fs.blurLayer2;ro.width===Rs&&ro.height===Kn||(io.width=ro.width=Rs,io.height=ro.height=Kn);const no=ro.getContext("2d"),na=io.getContext("2d"),ca=15,la=.06*this.blur*.5;let ua,da,ga,pa;for(no.putImageData(js,0,0),na.clearRect(0,0,Rs,Kn),pa=-15;pa<=ca;pa++)ua=(Math.random()-.5)/4,da=pa/ca,ga=la*da*Rs+ua,na.globalAlpha=1-Math.abs(da),na.drawImage(ro,ga,ua),no.drawImage(io,0,0),na.globalAlpha=1,na.clearRect(0,0,io.width,io.height);for(pa=-15;pa<=ca;pa++)ua=(Math.random()-.5)/4,da=pa/ca,ga=la*da*Kn+ua,na.globalAlpha=1-Math.abs(da),na.drawImage(ro,ua,ga),no.drawImage(io,0,0),na.globalAlpha=1,na.clearRect(0,0,io.width,io.height);Ds.drawImage(ro,0,0);const ma=Ds.getImageData(0,0,ro.width,ro.height);return no.globalAlpha=1,no.clearRect(0,0,ro.width,ro.height),ma}sendUniformData(p,Ds){const js=this.chooseRightDelta();p.uniform2fv(Ds.uDelta,js)}isNeutralState(){return this.blur===0}chooseRightDelta(){let p=1;const Ds=[0,0];this.horizontal?this.aspectRatio>1&&(p=1/this.aspectRatio):this.aspectRatio<1&&(p=this.aspectRatio);
vendor: 9,420 bytes, lines 172-347
172const js=p*this.blur*.12;return this.horizontal?Ds[0]=js:Ds[1]=js,Ds}}t(Ga,"type","Blur"),t(Ga,"defaults",{blur:0}),t(Ga,"uniformLocations",["uDelta"]),tt.setClass(Ga);class za extends Ia{getFragmentSource(){return` 173 precision highp float; 174 uniform sampler2D uTexture; 175 uniform float uBrightness; 176 varying vec2 vTexCoord; 177 void main() { 178 vec4 color = texture2D(uTexture, vTexCoord); 179 color.rgb += uBrightness; 180 gl_FragColor = color; 181 } 182`}applyTo2d(p){let{imageData:{data:Ds}}=p;const js=Math.round(255*this.brightness);for(let Fs=0;Fs<Ds.length;Fs+=4)Ds[Fs]=Ds[Fs]+js,Ds[Fs+1]=Ds[Fs+1]+js,Ds[Fs+2]=Ds[Fs+2]+js}isNeutralState(){return this.brightness===0}sendUniformData(p,Ds){p.uniform1f(Ds.uBrightness,this.brightness)}}t(za,"type","Brightness"),t(za,"defaults",{brightness:0}),t(za,"uniformLocations",["uBrightness"]),tt.setClass(za);class Na extends Ia{getFragmentSource(){return` 183 precision highp float; 184 uniform sampler2D uTexture; 185 varying vec2 vTexCoord; 186 uniform mat4 uColorMatrix; 187 uniform vec4 uConstants; 188 void main() { 189 vec4 color = texture2D(uTexture, vTexCoord); 190 color *= uColorMatrix; 191 color += uConstants; 192 gl_FragColor = color; 193 }`}applyTo2d(p){const Ds=p.imageData.data,js=this.matrix,Fs=this.colorsOnly;for(let Rs=0;Rs<Ds.length;Rs+=4){const Kn=Ds[Rs],ro=Ds[Rs+1],io=Ds[Rs+2];if(Fs)Ds[Rs]=Kn*js[0]+ro*js[1]+io*js[2]+255*js[4],Ds[Rs+1]=Kn*js[5]+ro*js[6]+io*js[7]+255*js[9],Ds[Rs+2]=Kn*js[10]+ro*js[11]+io*js[12]+255*js[14];else{const no=Ds[Rs+3];Ds[Rs]=Kn*js[0]+ro*js[1]+io*js[2]+no*js[3]+255*js[4],Ds[Rs+1]=Kn*js[5]+ro*js[6]+io*js[7]+no*js[8]+255*js[9],Ds[Rs+2]=Kn*js[10]+ro*js[11]+io*js[12]+no*js[13]+255*js[14],Ds[Rs+3]=Kn*js[15]+ro*js[16]+io*js[17]+no*js[18]+255*js[19]}}}sendUniformData(p,Ds){const js=this.matrix,Fs=[js[0],js[1],js[2],js[3],js[5],js[6],js[7],js[8],js[10],js[11],js[12],js[13],js[15],js[16],js[17],js[18]],Rs=[js[4],js[9],js[14],js[19]];p.uniformMatrix4fv(Ds.uColorMatrix,!1,Fs),p.uniform4fv(Ds.uConstants,Rs)}toObject(){return s(s({},super.toObject()),{},{matrix:[...this.matrix]})}}function Ua($n,p){var Ds;const js=(t(Ds=class extends Na{toObject(){return{type:this.type,colorsOnly:this.colorsOnly}}},"type",$n),t(Ds,"defaults",{colorsOnly:!1,matrix:p}),Ds);return tt.setClass(js,$n),js}t(Na,"type","ColorMatrix"),t(Na,"defaults",{matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],colorsOnly:!0}),t(Na,"uniformLocations",["uColorMatrix","uConstants"]),tt.setClass(Na);Ua("Brownie",[.5997,.34553,-.27082,0,.186,-.0377,.86095,.15059,0,-.1449,.24113,-.07441,.44972,0,-.02965,0,0,0,1,0]);Ua("Vintage",[.62793,.32021,-.03965,0,.03784,.02578,.64411,.03259,0,.02926,.0466,-.08512,.52416,0,.02023,0,0,0,1,0]);Ua("Kodachrome",[1.12855,-.39673,-.03992,0,.24991,-.16404,1.08352,-.05498,0,.09698,-.16786,-.56034,1.60148,0,.13972,0,0,0,1,0]);Ua("Technicolor",[1.91252,-.85453,-.09155,0,.04624,-.30878,1.76589,-.10601,0,-.27589,-.2311,-.75018,1.84759,0,.12137,0,0,0,1,0]);Ua("Polaroid",[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0]);Ua("Sepia",[.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0]);Ua("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]);class eh extends Ia{constructor(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(p),this.subFilters=p.subFilters||[]}applyTo(p){Ea(p)&&(p.passes+=this.subFilters.length-1),this.subFilters.forEach((Ds=>{Ds.applyTo(p)}))}toObject(){return{type:this.type,subFilters:this.subFilters.map((p=>p.toObject()))}}isNeutralState(){return!this.subFilters.some((p=>!p.isNeutralState()))}static fromObject(p,Ds){return Promise.all((p.subFilters||[]).map((js=>tt.getClass(js.type).fromObject(js,Ds)))).then((js=>new this({subFilters:js})))}}t(eh,"type","Composed"),tt.setClass(eh);class sh extends Ia{getFragmentSource(){return` 194 precision highp float; 195 uniform sampler2D uTexture; 196 uniform float uContrast; 197 varying vec2 vTexCoord; 198 void main() { 199 vec4 color = texture2D(uTexture, vTexCoord); 200 float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast)); 201 color.rgb = contrastF * (color.rgb - 0.5) + 0.5; 202 gl_FragColor = color; 203 }`}isNeutralState(){return this.contrast===0}applyTo2d(p){let{imageData:{data:Ds}}=p;const js=Math.floor(255*this.contrast),Fs=259*(js+255)/(255*(259-js));for(let Rs=0;Rs<Ds.length;Rs+=4)Ds[Rs]=Fs*(Ds[Rs]-128)+128,Ds[Rs+1]=Fs*(Ds[Rs+1]-128)+128,Ds[Rs+2]=Fs*(Ds[Rs+2]-128)+128}sendUniformData(p,Ds){p.uniform1f(Ds.uContrast,this.contrast)}}t(sh,"type","Contrast"),t(sh,"defaults",{contrast:0}),t(sh,"uniformLocations",["uContrast"]),tt.setClass(sh);const ih={Convolute_3_1:` 204 precision highp float; 205 uniform sampler2D uTexture; 206 uniform float uMatrix[9]; 207 uniform float uStepW; 208 uniform float uStepH; 209 varying vec2 vTexCoord; 210 void main() { 211 vec4 color = vec4(0, 0, 0, 0); 212 for (float h = 0.0; h < 3.0; h+=1.0) { 213 for (float w = 0.0; w < 3.0; w+=1.0) { 214 vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1)); 215 color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)]; 216 } 217 } 218 gl_FragColor = color; 219 } 220 `,Convolute_3_0:` 221 precision highp float; 222 uniform sampler2D uTexture; 223 uniform float uMatrix[9]; 224 uniform float uStepW; 225 uniform float uStepH; 226 varying vec2 vTexCoord; 227 void main() { 228 vec4 color = vec4(0, 0, 0, 1); 229 for (float h = 0.0; h < 3.0; h+=1.0) { 230 for (float w = 0.0; w < 3.0; w+=1.0) { 231 vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0)); 232 color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)]; 233 } 234 } 235 float alpha = texture2D(uTexture, vTexCoord).a; 236 gl_FragColor = color; 237 gl_FragColor.a = alpha; 238 } 239 `,Convolute_5_1:` 240 precision highp float; 241 uniform sampler2D uTexture; 242 uniform float uMatrix[25]; 243 uniform float uStepW; 244 uniform float uStepH; 245 varying vec2 vTexCoord; 246 void main() { 247 vec4 color = vec4(0, 0, 0, 0); 248 for (float h = 0.0; h < 5.0; h+=1.0) { 249 for (float w = 0.0; w < 5.0; w+=1.0) { 250 vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0)); 251 color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)]; 252 } 253 } 254 gl_FragColor = color; 255 } 256 `,Convolute_5_0:` 257 precision highp float; 258 uniform sampler2D uTexture; 259 uniform float uMatrix[25]; 260 uniform float uStepW; 261 uniform float uStepH; 262 varying vec2 vTexCoord; 263 void main() { 264 vec4 color = vec4(0, 0, 0, 1); 265 for (float h = 0.0; h < 5.0; h+=1.0) { 266 for (float w = 0.0; w < 5.0; w+=1.0) { 267 vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0)); 268 color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)]; 269 } 270 } 271 float alpha = texture2D(uTexture, vTexCoord).a; 272 gl_FragColor = color; 273 gl_FragColor.a = alpha; 274 } 275 `,Convolute_7_1:` 276 precision highp float; 277 uniform sampler2D uTexture; 278 uniform float uMatrix[49]; 279 uniform float uStepW; 280 uniform float uStepH; 281 varying vec2 vTexCoord; 282 void main() { 283 vec4 color = vec4(0, 0, 0, 0); 284 for (float h = 0.0; h < 7.0; h+=1.0) { 285 for (float w = 0.0; w < 7.0; w+=1.0) { 286 vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0)); 287 color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)]; 288 } 289 } 290 gl_FragColor = color; 291 } 292 `,Convolute_7_0:` 293 precision highp float; 294 uniform sampler2D uTexture; 295 uniform float uMatrix[49]; 296 uniform float uStepW; 297 uniform float uStepH; 298 varying vec2 vTexCoord; 299 void main() { 300 vec4 color = vec4(0, 0, 0, 1); 301 for (float h = 0.0; h < 7.0; h+=1.0) { 302 for (float w = 0.0; w < 7.0; w+=1.0) { 303 vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0)); 304 color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)]; 305 } 306 } 307 float alpha = texture2D(uTexture, vTexCoord).a; 308 gl_FragColor = color; 309 gl_FragColor.a = alpha; 310 } 311 `,Convolute_9_1:` 312 precision highp float; 313 uniform sampler2D uTexture; 314 uniform float uMatrix[81]; 315 uniform float uStepW; 316 uniform float uStepH; 317 varying vec2 vTexCoord; 318 void main() { 319 vec4 color = vec4(0, 0, 0, 0); 320 for (float h = 0.0; h < 9.0; h+=1.0) { 321 for (float w = 0.0; w < 9.0; w+=1.0) { 322 vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0)); 323 color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)]; 324 } 325 } 326 gl_FragColor = color; 327 } 328 `,Convolute_9_0:` 329 precision highp float; 330 uniform sampler2D uTexture; 331 uniform float uMatrix[81]; 332 uniform float uStepW; 333 uniform float uStepH; 334 varying vec2 vTexCoord; 335 void main() { 336 vec4 color = vec4(0, 0, 0, 1); 337 for (float h = 0.0; h < 9.0; h+=1.0) { 338 for (float w = 0.0; w < 9.0; w+=1.0) { 339 vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0)); 340 color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)]; 341 } 342 } 343 float alpha = texture2D(uTexture, vTexCoord).a; 344 gl_FragColor = color; 345 gl_FragColor.a = alpha; 346 } 347 `};
347class rh extends Ia{getCacheKey(){return"".concat(this.type,"_").concat(Math.sqrt(this.matrix.length),"_").concat(this.opaque?1:0)}getFragmentSource(){return ih[this.getCacheKey()]}applyTo2d(p){const Ds=p.imageData,js=Ds.data,Fs=this.matrix,Rs=Math.round(Math.sqrt(Fs.length)),Kn=Math.floor(Rs/2),ro=Ds.width,io=Ds.height,no=p.ctx.createImageData(ro,io),na=no.data,ca=this.opaque?1:0;let la,ua,da,ga,pa,ma,xa,wa,Oa,fa,va,Ca,ba;for(va=0;va<io;va++)for(fa=0;fa<ro;fa++){for(pa=4*(va*ro+fa),la=0,ua=0,da=0,ga=0,ba=0;ba<Rs;ba++)for(Ca=0;Ca<Rs;Ca++)xa=va+ba-Kn,ma=fa+Ca-Kn,xa<0||xa>=io||ma<0||ma>=ro||(wa=4*(xa*ro+ma),Oa=Fs[ba*Rs+Ca],la+=js[wa]*Oa,ua+=js[wa+1]*Oa,da+=js[wa+2]*Oa,ca||(ga+=js[wa+3]*Oa));na[pa]=la,na[pa+1]=ua,na[pa+2]=da,na[pa+3]=ca?js[pa+3]:ga}p.imageData=no}sendUniformData(p,Ds){p.uniform1fv(Ds.uMatrix,this.matrix)}toObject(){return s(s({},super.toObject()),{},{opaque:this.opaque,matrix:[...this.matrix]})}}t(rh,"type","Convolute"),t(rh,"defaults",{opaque:!1,matrix:[0,0,0,0,1,0,0,0,0]}),t(rh,"uniformLocations",["uMatrix","uOpaque","uHalfSize","uSize"]),tt.setClass(rh);const nh="Gamma";class oh extends Ia{getFragmentSource(){return` 348 precision highp float; 349 uniform sampler2D uTexture; 350 uniform vec3 uGamma; 351 varying vec2 vTexCoord; 352 void main() { 353 vec4 color = texture2D(uTexture, vTexCoord); 354 vec3 correction = (1.0 / uGamma); 355 color.r = pow(color.r, correction.r); 356 color.g = pow(color.g, correction.g); 357 color.b = pow(color.b, correction.b); 358 gl_FragColor = color; 359 gl_FragColor.rgb *= color.a; 360 } 361`}constructor(){let p=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(p),this.gamma=p.gamma||this.constructor.defaults.gamma.concat()}applyTo2d(p){let{imageData:{data:Ds}}=p;const js=this.gamma,Fs=1/js[0],Rs=1/js[1],Kn=1/js[2];this.rgbValues||(this.rgbValues={r:new Uint8Array(256),g:new Uint8Array(256),b:new Uint8Array(256)});const ro=this.rgbValues;for(let io=0;io<256;io++)ro.r[io]=255*Math.pow(io/255,Fs),ro.g[io]=255*Math.pow(io/255,Rs),ro.b[io]=255*Math.pow(io/255,Kn);for(let io=0;io<Ds.length;io+=4)Ds[io]=ro.r[Ds[io]],Ds[io+1]=ro.g[Ds[io+1]],Ds[io+2]=ro.b[Ds[io+2]]}sendUniformData(p,Ds){p.uniform3fv(Ds.uGamma,this.gamma)}isNeutralState(){const{gamma:p}=this;return p[0]===1&&p[1]===1&&p[2]===1}toObject(){return{type:nh,gamma:this.gamma.concat()}}}t(oh,"type",nh),t(oh,"defaults",{gamma:[1,1,1]}),t(oh,"uniformLocations",["uGamma"]),tt.setClass(oh);const ah={average:` 362 precision highp float; 363 uniform sampler2D uTexture; 364 varying vec2 vTexCoord; 365 void main() { 366 vec4 color = texture2D(uTexture, vTexCoord); 367 float average = (color.r + color.b + color.g) / 3.0; 368 gl_FragColor = vec4(average, average, average, color.a); 369 } 370 `,lightness:` 371 precision highp float; 372 uniform sampler2D uTexture; 373 uniform int uMode; 374 varying vec2 vTexCoord; 375 void main() { 376 vec4 col = texture2D(uTexture, vTexCoord); 377 float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0; 378 gl_FragColor = vec4(average, average, average, col.a); 379 } 380 `,luminosity:` 381 precision highp float; 382 uniform sampler2D uTexture; 383 uniform int uMode; 384 varying vec2 vTexCoord; 385 void main() { 386 vec4 col = texture2D(uTexture, vTexCoord); 387 float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b; 388 gl_FragColor = vec4(average, average, average, col.a); 389 } 390 `};class hh extends Ia{applyTo2d(p){let{imageData:{data:Ds}}=p;for(let js,Fs=0;Fs<Ds.length;Fs+=4){switch(this.mode){case"average":js=(Ds[Fs]+Ds[Fs+1]+Ds[Fs+2])/3;break;case"lightness":js=(Math.min(Ds[Fs],Ds[Fs+1],Ds[Fs+2])+Math.max(Ds[Fs],Ds[Fs+1],Ds[Fs+2]))/2;break;case"luminosity":js=.21*Ds[Fs]+.72*Ds[Fs+1]+.07*Ds[Fs+2]}Ds[Fs]=js,Ds[Fs+1]=js,Ds[Fs+2]=js}}getCacheKey(){return"".concat(this.type,"_").concat(this.mode)}getFragmentSource(){return ah[this.mode]}sendUniformData(p,Ds){p.uniform1i(Ds.uMode,1)}isNeutralState(){return!1}}t(hh,"type","Grayscale"),t(hh,"defaults",{mode:"average"}),t(hh,"uniformLocations",["uMode"]),tt.setClass(hh);class ch extends Na{calculateMatrix(){const p=this.rotation*Math.PI,Ds=ot(p),js=at(p),Fs=1/3,Rs=Math.sqrt(Fs)*js,Kn=1-Ds;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]=Ds+Kn/3,this.matrix[
vendor: 9,334 bytes, lines 390-469
3901]=Fs*Kn-Rs,this.matrix[2]=Fs*Kn+Rs,this.matrix[5]=Fs*Kn+Rs,this.matrix[6]=Ds+Fs*Kn,this.matrix[7]=Fs*Kn-Rs,this.matrix[10]=Fs*Kn-Rs,this.matrix[11]=Fs*Kn+Rs,this.matrix[12]=Ds+Fs*Kn}isNeutralState(){return this.rotation===0}applyTo(p){this.calculateMatrix(),super.applyTo(p)}toObject(){return{type:this.type,rotation:this.rotation}}}t(ch,"type","HueRotation"),t(ch,"defaults",{rotation:0}),tt.setClass(ch);class lh extends Ia{applyTo2d(p){let{imageData:{data:Ds}}=p;for(let js=0;js<Ds.length;js+=4)Ds[js]=255-Ds[js],Ds[js+1]=255-Ds[js+1],Ds[js+2]=255-Ds[js+2],this.alpha&&(Ds[js+3]=255-Ds[js+3])}getFragmentSource(){return` 391 precision highp float; 392 uniform sampler2D uTexture; 393 uniform int uInvert; 394 uniform int uAlpha; 395 varying vec2 vTexCoord; 396 void main() { 397 vec4 color = texture2D(uTexture, vTexCoord); 398 if (uInvert == 1) { 399 if (uAlpha == 1) { 400 gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,1.0 -color.a); 401 } else { 402 gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a); 403 } 404 } else { 405 gl_FragColor = color; 406 } 407 } 408`}isNeutralState(){return!this.invert}sendUniformData(p,Ds){p.uniform1i(Ds.uInvert,Number(this.invert)),p.uniform1i(Ds.uAlpha,Number(this.alpha))}}t(lh,"type","Invert"),t(lh,"defaults",{alpha:!1,invert:!0}),t(lh,"uniformLocations",["uInvert","uAlpha"]),tt.setClass(lh);class uh extends Ia{getFragmentSource(){return` 409 precision highp float; 410 uniform sampler2D uTexture; 411 uniform float uStepH; 412 uniform float uNoise; 413 uniform float uSeed; 414 varying vec2 vTexCoord; 415 float rand(vec2 co, float seed, float vScale) { 416 return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0); 417 } 418 void main() { 419 vec4 color = texture2D(uTexture, vTexCoord); 420 color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise; 421 gl_FragColor = color; 422 } 423`}applyTo2d(p){let{imageData:{data:Ds}}=p;const js=this.noise;for(let Fs=0;Fs<Ds.length;Fs+=4){const Rs=(.5-Math.random())*js;Ds[Fs]+=Rs,Ds[Fs+1]+=Rs,Ds[Fs+2]+=Rs}}sendUniformData(p,Ds){p.uniform1f(Ds.uNoise,this.noise/255),p.uniform1f(Ds.uSeed,Math.random())}isNeutralState(){return this.noise===0}}t(uh,"type","Noise"),t(uh,"defaults",{noise:0}),t(uh,"uniformLocations",["uNoise","uSeed"]),tt.setClass(uh);class dh extends Ia{applyTo2d(p){let{imageData:{data:Ds,width:js,height:Fs}}=p;for(let Rs=0;Rs<Fs;Rs+=this.blocksize)for(let Kn=0;Kn<js;Kn+=this.blocksize){const ro=4*Rs*js+4*Kn,io=Ds[ro],no=Ds[ro+1],na=Ds[ro+2],ca=Ds[ro+3];for(let la=Rs;la<Math.min(Rs+this.blocksize,Fs);la++)for(let ua=Kn;ua<Math.min(Kn+this.blocksize,js);ua++){const da=4*la*js+4*ua;Ds[da]=io,Ds[da+1]=no,Ds[da+2]=na,Ds[da+3]=ca}}}isNeutralState(){return this.blocksize===1}getFragmentSource(){return` 424 precision highp float; 425 uniform sampler2D uTexture; 426 uniform float uBlocksize; 427 uniform float uStepW; 428 uniform float uStepH; 429 varying vec2 vTexCoord; 430 void main() { 431 float blockW = uBlocksize * uStepW; 432 float blockH = uBlocksize * uStepW; 433 int posX = int(vTexCoord.x / blockW); 434 int posY = int(vTexCoord.y / blockH); 435 float fposX = float(posX); 436 float fposY = float(posY); 437 vec2 squareCoords = vec2(fposX * blockW, fposY * blockH); 438 vec4 color = texture2D(uTexture, squareCoords); 439 gl_FragColor = color; 440 } 441`}sendUniformData(p,Ds){p.uniform1f(Ds.uBlocksize,this.blocksize)}}t(dh,"type","Pixelate"),t(dh,"defaults",{blocksize:4}),t(dh,"uniformLocations",["uBlocksize"]),tt.setClass(dh);class gh extends Ia{getFragmentSource(){return` 442precision highp float; 443uniform sampler2D uTexture; 444uniform vec4 uLow; 445uniform vec4 uHigh; 446varying vec2 vTexCoord; 447void main() { 448 gl_FragColor = texture2D(uTexture, vTexCoord); 449 if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) { 450 gl_FragColor.a = 0.0; 451 } 452} 453`}applyTo2d(p){let{imageData:{data:Ds}}=p;const js=255*this.distance,Fs=new qt(this.color).getSource(),Rs=[Fs[0]-js,Fs[1]-js,Fs[2]-js],Kn=[Fs[0]+js,Fs[1]+js,Fs[2]+js];for(let ro=0;ro<Ds.length;ro+=4){const io=Ds[ro],no=Ds[ro+1],na=Ds[ro+2];io>Rs[0]&&no>Rs[1]&&na>Rs[2]&&io<Kn[0]&&no<Kn[1]&&na<Kn[2]&&(Ds[ro+3]=0)}}sendUniformData(p,Ds){const js=new qt(this.color).getSource(),Fs=this.distance,Rs=[0+js[0]/255-Fs,0+js[1]/255-Fs,0+js[2]/255-Fs,1],Kn=[js[0]/255+Fs,js[1]/255+Fs,js[2]/255+Fs,1];p.uniform4fv(Ds.uLow,Rs),p.uniform4fv(Ds.uHigh,Kn)}}t(gh,"type","RemoveColor"),t(gh,"defaults",{color:"#FFFFFF",distance:.02,useAlpha:!1}),t(gh,"uniformLocations",["uLow","uHigh"]),tt.setClass(gh);class fh extends Ia{sendUniformData(p,Ds){p.uniform2fv(Ds.uDelta,this.horizontal?[1/this.width,0]:[0,1/this.height]),p.uniform1fv(Ds.uTaps,this.taps)}getFilterWindow(){const p=this.tempScale;return Math.ceil(this.lanczosLobes/p)}getCacheKey(){const p=this.getFilterWindow();return"".concat(this.type,"_").concat(p)}getFragmentSource(){const p=this.getFilterWindow();return this.generateShader(p)}getTaps(){const p=this.lanczosCreate(this.lanczosLobes),Ds=this.tempScale,js=this.getFilterWindow(),Fs=new Array(js);for(let Rs=1;Rs<=js;Rs++)Fs[Rs-1]=p(Rs*Ds);return Fs}generateShader(p){const Ds=new Array(p);for(let js=1;js<=p;js++)Ds[js-1]="".concat(js,".0 * uDelta");return` 454 precision highp float; 455 uniform sampler2D uTexture; 456 uniform vec2 uDelta; 457 varying vec2 vTexCoord; 458 uniform float uTaps[`.concat(p,`]; 459 void main() { 460 vec4 color = texture2D(uTexture, vTexCoord); 461 float sum = 1.0; 462 `).concat(Ds.map(((js,Fs)=>` 463 color += texture2D(uTexture, vTexCoord + `.concat(js,") * uTaps[").concat(Fs,"] + texture2D(uTexture, vTexCoord - ").concat(js,") * uTaps[").concat(Fs,`]; 464 sum += 2.0 * uTaps[`).concat(Fs,`]; 465 `))).join(` 466`),` 467 gl_FragColor = color / sum; 468 } 469 `)}applyToForWebgl(p){p.passes++,this.width=p.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=p.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),p.destinationWidth=this.dW,super.applyTo(p),p.sourceWidth=p.destinationWidth,this.height=p.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),p.destinationHeight=this.dH,super.applyTo(p),p.sourceHeight=p.destinationHeight}applyTo(p){Ea(p)?this.applyToForWebgl(p):this.applyTo2d(p)}isNeutralState(){return this.scaleX===1&&this.scaleY===1}lanczosCreate(p){return Ds=>{if(Ds>=p||Ds<=-p)return 0;if(Ds<11920929e-14&&Ds>-11920929e-14)return 1;const js=(Ds*=Math.PI)/p;return Math.sin(Ds)/Ds*Math.sin(js)/js}}applyTo2d(p){const Ds=p.imageData,js=this.scaleX,Fs=this.scaleY;this.rcpScaleX=1/js,this.rcpScaleY=1/Fs;const Rs=Ds.width,Kn=Ds.height,ro=Math.round(Rs*js),io=Math.round(Kn*Fs);let no;no=this.resizeType==="sliceHack"?this.sliceByTwo(p,Rs,Kn,ro,io):this.resizeType==="hermite"?this.hermiteFastResize(p,Rs,Kn,ro,io):this.resizeType==="bilinear"?this.bilinearFiltering(p,Rs,Kn,ro,io):this.resizeType==="lanczos"?this.lanczosResize(p,Rs,Kn,ro,io):new ImageData(ro,io),p.imageData=no}sliceByTwo(p,Ds,js,Fs,Rs){const Kn=p.imageData,ro=.5;let io=!1,no=!1,na=Ds*ro,ca=js*ro;const la=p.filterBackend.resources;let ua=0,da=0;const ga=Ds;let pa=0;la.sliceByTwo||(la.sliceByTwo=vt());const ma=la.sliceByTwo;(ma.width<1.5*Ds||ma.height<js)&&(ma.width=1.5*Ds,ma.height=js);const xa=ma.getContext("2d");for(xa.clearRect(0,0,1.5*Ds,js),xa.putImageData(Kn,0,0),Fs=Math.floor(Fs),Rs=Math.floor(Rs);!io||!no;)Ds=na,js=ca,Fs<Math.floor(na*ro)?na=Math.floor(na*ro):(na=Fs,io=!0),Rs<Math.floor(ca*ro)?ca=Math.floor(ca*ro):(ca=Rs,no=!0),xa.drawImage(ma,ua,da,Ds,js,ga,pa,na,ca),ua=ga,da=pa,pa+=ca;return xa.getImageData(ua,da,Fs,Rs)}lanczosResize(p,Ds,js,Fs,Rs){const Kn=p.imageData.data,ro=p.ctx.createImageData(Fs,Rs),io=ro.data,no=this.lanczosCreate(this.lanczosLobes),na=this.rcpScaleX,ca=this.rcpScaleY,la=2/this.rcpScaleX,ua=2/this.rcpScaleY,da=Math.ceil(na*this.lanczosLobes/2),ga=Math.ceil(ca*this.lanczosLobes/2),pa={},ma={x:0,y:0},xa={x:0,y:0};return(function wa(Oa){let fa,va,Ca,ba,Ma,Pa,qa,Aa,Da,$a,Qa;for(ma.x=(Oa+.5)*na,xa.x=Math.floor(ma.x),fa=0;fa<Rs;fa++){for(ma.y=(fa+.5)*ca,xa.y=Math.floor(ma.y),Ma=0,Pa=0,qa=0,Aa=0,Da=0,va=xa.x-da;va<=xa.x+da;va++)if(!(va<0||va>=Ds)){$a=Math.floor(1e3*Math.abs(va-ma.x)),pa[$a]||(pa[$a]={});for(let Za=xa.y-ga;Za<=xa.y+ga;Za++)Za<0||Za>=js||(Qa=Math.floor(1e3*Math.abs(Za-ma.y)),pa[$a][Qa]||(pa[$a][Qa]=no(Math.sqrt(Math.pow($a*la,2)+Math.pow(Qa*ua,2))/1e3)),Ca=pa[$a][Qa],Ca>0&&(ba=4*(Za*Ds+va),Ma+=Ca,Pa+=Ca*Kn[ba],qa+=Ca*Kn[ba+1],Aa+=Ca*Kn[ba+2],Da+=Ca*Kn[ba+3]))}ba=4*(fa*Fs+Oa),io[ba]=Pa/Ma,io[ba+1]=qa/Ma,io[ba+2]=Aa/Ma,io[ba+3]=Da/Ma}return++Oa<Fs?wa(Oa):ro})(0)}bilinearFiltering(p,Ds,js,Fs,Rs){let Kn,ro,io,no,na,ca,la,ua,da,ga,pa,ma,xa,wa=0;const Oa=this.rcpScaleX,fa=this.rcpScaleY,va=4*(Ds-1),Ca=p.imageData.data,ba=p.ctx.createImageData(Fs,Rs),Ma=ba.data;for(la=0;la<Rs;la++)for(ua=0;ua<Fs;ua++)for(na=Math.floor(Oa*ua),ca=Math.floor(fa*la),da=Oa*ua-na,ga=fa*la-ca,xa=4*(ca*Ds+na),pa=0;pa<4;pa++)Kn=Ca[xa+pa],ro=Ca[xa+4+pa],io=Ca[xa+va+pa],no=Ca[xa+va+4+pa],ma=Kn*(1-da)*(1-ga)+ro*da*(1-ga)+io*ga*(1-da)+no*da*ga,Ma[wa++]=ma;return ba}hermiteFastResize(p,Ds,js,Fs,Rs){const Kn=this.rcpScaleX,ro=this.rcpScaleY,io=Math.ceil(Kn/2),no=Math.ceil(ro/2),na=p.imageData.data,ca=p.ctx.createImageData(
469Fs,Rs),la=ca.data;for(let ua=0;ua<Rs;ua++)for(let da=0;da<Fs;da++){const ga=4*(da+ua*Fs);let pa=0,ma=0,xa=0,wa=0,Oa=0,fa=0,va=0;const Ca=(ua+.5)*ro;for(let ba=Math.floor(ua*ro);ba<(ua+1)*ro;ba++){const Ma=Math.abs(Ca-(ba+.5))/no,Pa=(da+.5)*Kn,qa=Ma*Ma;for(let Aa=Math.floor(da*Kn);Aa<(da+1)*Kn;Aa++){let Da=Math.abs(Pa-(Aa+.5))/io;const $a=Math.sqrt(qa+Da*Da);$a>1&&$a<-1||(pa=2*$a*$a*$a-3*$a*$a+1,pa>0&&(Da=4*(Aa+ba*Ds),va+=pa*na[Da+3],xa+=pa,na[Da+3]<255&&(pa=pa*na[Da+3]/250),wa+=pa*na[Da],Oa+=pa*na[Da+1],fa+=pa*na[Da+2],ma+=pa))}}la[ga]=wa/ma,la[ga+1]=Oa/ma,la[ga+2]=fa/ma,la[ga+3]=va/xa}return ca}}t(fh,"type","Resize"),t(fh,"defaults",{resizeType:"hermite",scaleX:1,scaleY:1,lanczosLobes:3}),t(fh,"uniformLocations",["uDelta","uTaps"]),tt.setClass(fh);class ph extends Ia{getFragmentSource(){return` 470 precision highp float; 471 uniform sampler2D uTexture; 472 uniform float uSaturation; 473 varying vec2 vTexCoord; 474 void main() { 475 vec4 color = texture2D(uTexture, vTexCoord); 476 float rgMax = max(color.r, color.g); 477 float rgbMax = max(rgMax, color.b); 478 color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00; 479 color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00; 480 color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00; 481 gl_FragColor = color; 482 } 483`}applyTo2d(p){let{imageData:{data:Ds}}=p;const js=-this.saturation;for(let Fs=0;Fs<Ds.length;Fs+=4){const Rs=Math.max(Ds[Fs],Ds[Fs+1],Ds[Fs+2]);Ds[Fs]+=Rs!==Ds[Fs]?(Rs-Ds[Fs])*js:0,Ds[Fs+1]+=Rs!==Ds[Fs+1]?(Rs-Ds[Fs+1])*js:0,Ds[Fs+2]+=Rs!==Ds[Fs+2]?(Rs-Ds[Fs+2])*js:0}}sendUniformData(p,Ds){p.uniform1f(Ds.uSaturation,-this.saturation)}isNeutralState(){return this.saturation===0}}t(ph,"type","Saturation"),t(ph,"defaults",{saturation:0}),t(ph,"uniformLocations",["uSaturation"]),tt.setClass(ph);class mh extends Ia{getFragmentSource(){return` 484 precision highp float; 485 uniform sampler2D uTexture; 486 uniform float uVibrance; 487 varying vec2 vTexCoord; 488 void main() { 489 vec4 color = texture2D(uTexture, vTexCoord); 490 float max = max(color.r, max(color.g, color.b)); 491 float avg = (color.r + color.g + color.b) / 3.0; 492 float amt = (abs(max - avg) * 2.0) * uVibrance; 493 color.r += max != color.r ? (max - color.r) * amt : 0.00; 494 color.g += max != color.g ? (max - color.g) * amt : 0.00; 495 color.b += max != color.b ? (max - color.b) * amt : 0.00; 496 gl_FragColor = color; 497 } 498`}applyTo2d(p){let{imageData:{data:Ds}}=p;const js=-this.vibrance;for(let Fs=0;Fs<Ds.length;Fs+=4){const Rs=Math.max(Ds[Fs],Ds[Fs+1],Ds[Fs+2]),Kn=(Ds[Fs]+Ds[Fs+1]+Ds[Fs+2])/3,ro=2*Math.abs(Rs-Kn)/255*js;Ds[Fs]+=Rs!==Ds[Fs]?(Rs-Ds[Fs])*ro:0,Ds[Fs+1]+=Rs!==Ds[Fs+1]?(Rs-Ds[Fs+1])*ro:0,Ds[Fs+2]+=Rs!==Ds[Fs+2]?(Rs-Ds[Fs+2])*ro:0}}sendUniformData(p,Ds){p.uniform1f(Ds.uVibrance,-this.vibrance)}isNeutralState(){return this.vibrance===0}}t(mh,"type","Vibrance"),t(mh,"defaults",{vibrance:0}),t(mh,"uniformLocations",["uVibrance"]),tt.setClass(mh);var dist={},core={},debug={},hasRequiredDebug;function requireDebug(){if(hasRequiredDebug)return debug;hasRequiredDebug=1,Object.defineProperty(debug,"__esModule",{value:!0}),debug.getType=$n,debug.throwUnknownDataType=p,debug.throwUnsupportedData=Ds;function $n(js){return Object.prototype.toString.call(js)}function p(js){throw new TypeError("unsupported data type: "+$n(js))}function Ds(js){throw new TypeError("unsupported data type: "+js)}return debug}var encode={},number={},hasRequiredNumber;function requireNumber(){if(hasRequiredNumber)return number;hasRequiredNumber=1,Object.defineProperty(number,"__esModule",{value:!0}),number.s_to_int=js,number.s_to_big_int=Fs,number.int_to_s=Rs,number.big_int_to_s=Kn,number.num_to_s=io,number.int_str_to_s=no,number.s_to_num=ca;let $n="";for(let la=0;la<10;la++){const ua=String.fromCharCode(48+la);$n+=ua}for(let la=0;la<26;la++){const ua=String.fromCharCode(65+la);$n+=ua}for(let la=0;la<26;la++){const ua=String.fromCharCode(97+la);$n+=ua}const p=$n.length,Ds={};for(let la=0;la<p;la++){const ua=$n[la];Ds[ua]=la}function js(la){let ua=0,da=1;for(let ga=la.length-1;ga>=0;ga--){const pa=la[ga];let ma=Ds[pa];ma*=da,ua+=ma,da*=p}return ua}function Fs(la){let ua=BigInt(0),da=BigInt(1);const ga=BigInt(p);for(let pa=la.length-1;pa>=0;pa--){const ma=la[pa];let xa=BigInt(Ds[ma]);xa*=da,ua+=xa,da*=ga}return ua}function Rs(la){if(la===0)return $n[0];const ua=[];for(;la!==0;){const da=la%p,ga=$n[da];ua.push(ga),la-=da,la/=p}return ua.reverse().join("")}function Kn(la){const ua=BigInt(0),da=BigInt(p);if(la===ua)return $n[0];const ga=[];for(;la!==ua;){const pa=la%da,ma=$n[Number(pa)];ga.push(ma),la/=da}return ga.reverse().join("")}function ro(la){return la.split("").reverse().join("")}function io(la){if(la<0)return"-"+io(-la);let[ua,da]=la.toString().split(".");
498if(!da)if(ua.includes("e")){const[ma,xa]=ua.split("e");ua=ma,da="0e"+xa}else return Rs(la);let ga;da&&([da,ga]=da.split("e")),ua=no(ua),da=ro(da),da=no(da);let pa=ua+"."+da;if(ga){switch(pa+=".",ga[0]){case"+":ga=ga.slice(1);break;case"-":pa+="-",ga=ga.slice(1);break}ga=no(ga),pa+=ga}return pa}function no(la){const ua=+la;return ua.toString()===la&&ua+1!==ua&&ua-1!==ua?Rs(ua):":"+Kn(BigInt(la))}function na(la){return la[0]===":"?Fs(la.substring(1)).toString():js(la).toString()}function ca(la){if(la[0]==="-")return-ca(la.substr(1));let[ua,da,ga]=la.split(".");if(!da)return js(ua);ua=na(ua),da=na(da),da=ro(da);let pa=ua+"."+da;if(ga){pa+="e";let ma=!1;ga[0]==="-"&&(ma=!0,ga=ga.slice(1)),ga=na(ga),pa+=ma?-ga:+ga}return+pa}return number}var hasRequiredEncode;function requireEncode(){if(hasRequiredEncode)return encode;hasRequiredEncode=1,Object.defineProperty(encode,"__esModule",{value:!0}),encode.encodeNum=p,encode.decodeNum=Ds,encode.decodeKey=js,encode.encodeBool=Fs,encode.decodeBool=Rs,encode.encodeStr=Kn,encode.decodeStr=ro;const $n=requireNumber();function p(io){return io===1/0?"N|+":io===-1/0?"N|-":Number.isNaN(io)?"N|0":"n|"+(0,$n.num_to_s)(io)}function Ds(io){if(io.length===3&&io[0]==="N"&&io[1]==="|")switch(io[2]){case"+":return 1/0;case"-":return-1/0;case"0":return NaN}return(0,$n.s_to_num)(io.slice(2))}function js(io){return typeof io=="number"?io:(0,$n.s_to_int)(io)}function Fs(io){return io?"b|T":"b|F"}function Rs(io){if(io.length===3&&io[0]==="b"&&io[1]==="|")switch(io[2]){case"T":return!0;case"F":return!1}return!!io}function Kn(io){if(io[1]==="|")switch(io[0]){case"b":case"o":case"n":case"a":case"s":return"s|"+io}return io}function ro(io){return io[0]==="s"&&io[1]==="|"?io.substr(2):io}return encode}var memory={},config={},hasRequiredConfig;function requireConfig(){return hasRequiredConfig||(hasRequiredConfig=1,Object.defineProperty(config,"__esModule",{value:!0}),config.config=void 0,config.config={sort_key:!1,preserve_nan:!1,error_on_nan:!1,preserve_infinite:!1,error_on_infinite:!1}),config}var hasRequiredMemory;function requireMemory(){if(hasRequiredMemory)return memory;hasRequiredMemory=1,Object.defineProperty(memory,"__esModule",{value:!0}),memory.memToValues=Fs,memory.makeInMemoryStore=Rs,memory.makeInMemoryCache=Kn,memory.makeInMemoryMemory=ro,memory.addValue=na;const $n=requireConfig(),p=requireDebug(),Ds=requireEncode(),js=requireNumber();function Fs(ca){return ca.store.toArray()}function Rs(){const ca=[];return{forEach(la){for(let ua=0;ua<ca.length;ua++)if(la(ca[ua])==="break")return},add(la){ca.push(la)},toArray(){return ca}}}function Kn(){const ca=Object.create(null),la=Object.create(null);return{getValue(ua){return ca[ua]},getSchema(ua){return la[ua]},forEachValue(ua){for(const[da,ga]of Object.entries(ca))if(ua(da,ga)==="break")return},forEachSchema(ua){for(const[da,ga]of Object.entries(la))if(ua(da,ga)==="break")return},setValue(ua,da){ca[ua]=da},setSchema(ua,da){la[ua]=da},hasValue(ua){return ua in ca},hasSchema(ua){return ua in la}}}function ro(){return{store:Rs(),cache:Kn(),keyCount:0}}function io(ca,la){if(ca.cache.hasValue(la))return ca.cache.getValue(la);const ua=ca.keyCount++,da=(0,js.num_to_s)(ua);return ca.store.add(la),ca.cache.setValue(la,da),da}function no(ca,la){$n.config.sort_key&&la.sort();const ua=la.join(",");if(ca.cache.hasSchema(ua))return ca.cache.getSchema(ua);const da=na(ca,la,void 0);return ca.cache.setSchema(ua,da),da}function na(ca,la,ua){if(la===null)return"";switch(typeof la){case"undefined":if(Array.isArray(ua))return na(ca,null,ua);break;case"object":if(la===null)return io(ca,null);if(Array.isArray(la)){let da="a";for(let ga=0;ga<la.length;ga++){const pa=la[ga],ma=pa===null?"_":na(ca,pa,la);da+="|"+ma}return da==="a"&&(da="a|"),io(ca,da)}else{const da=Object.keys(la);if(da.length===0)return io(ca,"o|");let ga="o";const pa=no(ca,da);ga+="|"+pa;for(const ma of da){const xa=la[ma],wa=na(ca,xa,la);ga+="|"+wa}return io(ca,ga)}case"boolean":return io(ca,(0,Ds.encodeBool)(la));case"number":return Number.isNaN(la)?$n.config.preserve_nan?io(ca,"N|0"):($n.config.error_on_nan&&(0,p.throwUnsupportedData)("[number NaN]"),""):Number.POSITIVE_INFINITY===la?$n.config.preserve_infinite?io(ca,"N|+"):($n.config.error_on_infinite&&(0,p.throwUnsupportedData)("[number Infinity]"),""):Number.NEGATIVE_INFINITY===la?$n.config.preserve_infinite?io(ca,"N|-"):($n.config.error_on_infinite&&(0,p.throwUnsupportedData)("[number -Infinity]"),""):io(ca,(0,Ds.encodeNum)(la));case"string":return io(ca,(0,Ds.encodeStr)(la))}return(0,p.throwUnknownDataType)(la)}return memory}var hasRequiredCore;function requireCore(){if(hasRequiredCore)return core;
498hasRequiredCore=1,Object.defineProperty(core,"__esModule",{value:!0}),core.compress=Fs,core.decode=ro,core.decompress=io;const $n=requireDebug(),p=requireEncode(),Ds=requireMemory(),js=requireNumber();function Fs(no){const na=(0,Ds.makeInMemoryMemory)(),ca=(0,Ds.addValue)(na,no,void 0);return[(0,Ds.memToValues)(na),ca]}function Rs(no,na){if(na==="o|")return{};const ca={},la=na.split("|"),ua=la[1];let da=ro(no,ua);const ga=la.length;ga-2===1&&!Array.isArray(da)&&(da=[da]);for(let pa=2;pa<ga;pa++){const ma=da[pa-2];let xa=la[pa];xa=ro(no,xa),ca[ma]=xa}return ca}function Kn(no,na){if(na==="a|")return[];const ca=na.split("|"),la=ca.length-1,ua=new Array(la);for(let da=0;da<la;da++){let ga=ca[da+1];ga=ro(no,ga),ua[da]=ga}return ua}function ro(no,na){if(na===""||na==="_")return null;const ca=(0,p.decodeKey)(na),la=no[ca];if(la===null)return la;switch(typeof la){case"undefined":return la;case"number":return la;case"string":if(la[1]==="|")switch(la[0]){case"b":switch(la[2]){case"T":return!0;case"F":return!1;default:return(0,$n.throwUnknownDataType)(la)}case"o":return Rs(no,la);case"n":return(0,js.s_to_num)(la.slice(2));case"N":switch(la[2]){case"+":return 1/0;case"-":return-1/0;case"0":return NaN;default:return(0,$n.throwUnknownDataType)(la)}case"a":return Kn(no,la)}return(0,p.decodeStr)(la)}return(0,$n.throwUnknownDataType)(la)}function io(no){const[na,ca]=no;return ro(na,ca)}return core}var helpers={},hasRequiredHelpers;function requireHelpers(){if(hasRequiredHelpers)return helpers;hasRequiredHelpers=1,Object.defineProperty(helpers,"__esModule",{value:!0}),helpers.trimUndefined=$n,helpers.trimUndefinedRecursively=p;function $n(js){for(const Fs in js)js[Fs]===void 0&&delete js[Fs]}function p(js){Ds(js,new Set)}function Ds(js,Fs){Fs.add(js);for(const Rs in js)if(js[Rs]===void 0)delete js[Rs];else{const Kn=js[Rs];Kn&&typeof Kn=="object"&&!Fs.has(Kn)&&Ds(Kn,Fs)}}return helpers}var hasRequiredDist;function requireDist(){return hasRequiredDist||(hasRequiredDist=1,(function($n){Object.defineProperty($n,"__esModule",{value:!0}),$n.config=$n.trimUndefinedRecursively=$n.trimUndefined=$n.addValue=$n.decode=$n.decompress=$n.compress=void 0;var p=requireCore();Object.defineProperty($n,"compress",{enumerable:!0,get:function(){return p.compress}}),Object.defineProperty($n,"decompress",{enumerable:!0,get:function(){return p.decompress}});var Ds=requireCore();Object.defineProperty($n,"decode",{enumerable:!0,get:function(){return Ds.decode}});var js=requireMemory();Object.defineProperty($n,"addValue",{enumerable:!0,get:function(){return js.addValue}});var Fs=requireHelpers();Object.defineProperty($n,"trimUndefined",{enumerable:!0,get:function(){return Fs.trimUndefined}}),Object.defineProperty($n,"trimUndefinedRecursively",{enumerable:!0,get:function(){return Fs.trimUndefinedRecursively}});var Rs=requireConfig();Object.defineProperty($n,"config",{enumerable:!0,get:function(){return Rs.config}})})(dist)),dist}var distExports=requireDist(),lib={},types={},hasRequiredTypes;function requireTypes(){return hasRequiredTypes||(hasRequiredTypes=1,Object.defineProperty(types,"__esModule",{value:!0})),types}var ee={},taskCollection$1={},taskCollection={},utils$1={},hasRequiredUtils$1;function requireUtils$1(){if(hasRequiredUtils$1)return utils$1;hasRequiredUtils$1=1,Object.defineProperty(utils$1,"__esModule",{value:!0}),utils$1._fast_remove_single=void 0;function $n(p,Ds){Ds!==-1&&(Ds===0?p.shift():Ds===p.length-1?p.length=p.length-1:p.splice(Ds,1))}return utils$1._fast_remove_single=$n,utils$1}var bakeCollection={},hasRequiredBakeCollection;function requireBakeCollection(){return hasRequiredBakeCollection||(hasRequiredBakeCollection=1,(function(exports$1){Object.defineProperty(exports$1,"__esModule",{value:!0}),exports$1.bakeCollectionVariadic=exports$1.bakeCollectionAwait=exports$1.bakeCollection=exports$1.BAKED_EMPTY_FUNC=void 0,exports$1.BAKED_EMPTY_FUNC=(function(){});var FORLOOP_FALLBACK=1500;function generateArgsDefCode($n){var p="";if($n===0)return p;for(var Ds=0;Ds<$n-1;++Ds)p+="arg"+String(Ds)+", ";return p+="arg"+String($n-1),p}function generateBodyPartsCode($n,p){for(var Ds="",js="",Fs=0;Fs<p;++Fs)Ds+="var f".concat(Fs," = collection[").concat(Fs,`]; 499`),js+="f".concat(Fs,"(").concat($n,`) 500`);return{funcDefCode:Ds,funcCallCode:js}}function generateBodyPartsVariadicCode($n){for(var p="",Ds="",js=0;js<$n;++js)p+="var f".concat(js," = collection[").concat(js,`];
501`),Ds+="f".concat(js,`.apply(undefined, arguments) 502`);return{funcDefCode:p,funcCallCode:Ds}}function bakeCollection(collection,fixedArgsNum){if(collection.length===0)return exports$1.BAKED_EMPTY_FUNC;if(collection.length===1)return collection[0];var funcFactoryCode;if(collection.length<FORLOOP_FALLBACK){var argsDefCode=generateArgsDefCode(fixedArgsNum),_a=generateBodyPartsCode(argsDefCode,collection.length),funcDefCode=_a.funcDefCode,funcCallCode=_a.funcCallCode;funcFactoryCode=`(function(collection) { 503 `.concat(funcDefCode,` 504 collection = undefined; 505 return (function(`).concat(argsDefCode,`) { 506 `).concat(funcCallCode,` 507 }); 508 })`)}else{var argsDefCode=generateArgsDefCode(fixedArgsNum);collection.length%10===0?funcFactoryCode=`(function(collection) { 509 return (function(`.concat(argsDefCode,`) { 510 for (var i = 0; i < collection.length; i += 10) { 511 collection[i](`).concat(argsDefCode,`); 512 collection[i+1](`).concat(argsDefCode,`); 513 collection[i+2](`).concat(argsDefCode,`); 514 collection[i+3](`).concat(argsDefCode,`); 515 collection[i+4](`).concat(argsDefCode,`); 516 collection[i+5](`).concat(argsDefCode,`); 517 collection[i+6](`).concat(argsDefCode,`); 518 collection[i+7](`).concat(argsDefCode,`); 519 collection[i+8](`).concat(argsDefCode,`); 520 collection[i+9](`).concat(argsDefCode,`); 521 } 522 }); 523 })`):collection.length%4===0?funcFactoryCode=`(function(collection) { 524 return (function(`.concat(argsDefCode,`) { 525 for (var i = 0; i < collection.length; i += 4) { 526 collection[i](`).concat(argsDefCode,`); 527 collection[i+1](`).concat(argsDefCode,`); 528 collection[i+2](`).concat(argsDefCode,`); 529 collection[i+3](`).concat(argsDefCode,`); 530 } 531 }); 532 })`):collection.length%3===0?funcFactoryCode=`(function(collection) { 533 return (function(`.concat(argsDefCode,`) { 534 for (var i = 0; i < collection.length; i += 3) { 535 collection[i](`).concat(argsDefCode,`); 536 collection[i+1](`).concat(argsDefCode,`); 537 collection[i+2](`).concat(argsDefCode,`); 538 } 539 }); 540 })`):funcFactoryCode=`(function(collection) { 541 return (function(`.concat(argsDefCode,`) { 542 for (var i = 0; i < collection.length; ++i) { 543 collection[i](`).concat(argsDefCode,`); 544 } 545 }); 546 })`)}{var funcFactory=eval(funcFactoryCode);return funcFactory(collection)}}exports$1.bakeCollection=bakeCollection;function bakeCollectionAwait(collection,fixedArgsNum){if(collection.length===0)return exports$1.BAKED_EMPTY_FUNC;if(collection.length===1)return collection[0];var funcFactoryCode;if(collection.length<FORLOOP_FALLBACK){var argsDefCode=generateArgsDefCode(fixedArgsNum),_a=generateBodyPartsCode(argsDefCode,collection.length),funcDefCode=_a.funcDefCode,funcCallCode=_a.funcCallCode;funcFactoryCode=`(function(collection) { 547 `.concat(funcDefCode,` 548 collection = undefined; 549 return (function(`).concat(argsDefCode,`) { 550 return Promise.all([ `).concat(funcCallCode,` ]); 551 }); 552 })`)}else{var argsDefCode=generateArgsDefCode(fixedArgsNum);funcFactoryCode=`(function(collection) { 553 return (function(`.concat(argsDefCode,`) { 554 var promises = Array(collection.length); 555 for (var i = 0; i < collection.length; ++i) { 556 promises[i] = collection[i](`).concat(argsDefCode,`); 557 } 558 return Promise.all(promises); 559 }); 560 })`)}{var funcFactory=eval(funcFactoryCode);return funcFactory(collection)}}exports$1.bakeCollectionAwait=bakeCollectionAwait;function bakeCollectionVariadic(collection){if(collection.length===0)return exports$1.BAKED_EMPTY_FUNC;if(collection.length===1)return collection[0];var funcFactoryCode;
560if(collection.length<FORLOOP_FALLBACK){var _a=generateBodyPartsVariadicCode(collection.length),funcDefCode=_a.funcDefCode,funcCallCode=_a.funcCallCode;funcFactoryCode=`(function(collection) { 561 `.concat(funcDefCode,` 562 collection = undefined; 563 return (function() { 564 `).concat(funcCallCode,` 565 }); 566 })`)}else funcFactoryCode=`(function(collection) { 567 return (function() { 568 for (var i = 0; i < collection.length; ++i) { 569 collection[i].apply(undefined, arguments); 570 } 571 }); 572 })`;{var funcFactory=eval(funcFactoryCode);return funcFactory(collection)}}exports$1.bakeCollectionVariadic=bakeCollectionVariadic})(bakeCollection)),bakeCollection}var hasRequiredTaskCollection$1;function requireTaskCollection$1(){if(hasRequiredTaskCollection$1)return taskCollection;hasRequiredTaskCollection$1=1;var $n=taskCollection&&taskCollection.__spreadArray||function(wa,Oa,fa){if(fa||arguments.length===2)for(var va=0,Ca=Oa.length,ba;va<Ca;va++)(ba||!(va in Oa))&&(ba||(ba=Array.prototype.slice.call(Oa,0,va)),ba[va]=Oa[va]);return wa.concat(ba||Array.prototype.slice.call(Oa))};Object.defineProperty(taskCollection,"__esModule",{value:!0}),taskCollection.TaskCollection=void 0;var p=requireUtils$1(),Ds=requireBakeCollection();function js(wa,Oa){var fa=this.length;if(fa>1)if(Oa){var va;(va=this._tasks).push.apply(va,arguments),this.length+=arguments.length}else this._tasks.push(wa),this.length++;else if(Oa){if(fa===1){var Ca=Array(1+arguments.length);Ca.push(Ca),Ca.push.apply(Ca,arguments),this._tasks=Ca}else{var Ca=Array(arguments.length);Ca.push.apply(Ca,arguments),this._tasks=Ca}this.length+=arguments.length}else fa===1?this._tasks=[this._tasks,wa]:this._tasks=wa,this.length++}function Fs(wa,Oa){var fa=this.length;if(fa>1)if(Oa){var va;(va=this._tasks).push.apply(va,arguments),this.length+=arguments.length}else this._tasks.push(wa),this.length++;else if(Oa){if(fa===1){var Ca=Array(1+arguments.length);Ca.push(Ca),Ca.push.apply(Ca,arguments),this._tasks=Ca}else{var Ca=Array(arguments.length);Ca.push.apply(Ca,arguments),this._tasks=Ca}this.length+=arguments.length}else fa===1?this._tasks=[this._tasks,wa]:this._tasks=wa,this.length++;this.firstEmitBuildStrategy?this.call=ca:this.rebuild()}function Rs(wa){this.length!==0&&(this.length===1?this._tasks===wa&&(this.length=0):((0,p._fast_remove_single)(this._tasks,this._tasks.lastIndexOf(wa)),this._tasks.length===1?(this._tasks=this._tasks[0],this.length=1):this.length=this._tasks.length))}function Kn(wa){if(this.length!==0){if(this.length===1)if(this._tasks===wa&&(this.length=0),this.firstEmitBuildStrategy){this.call=Ds.BAKED_EMPTY_FUNC;return}else{this.rebuild();return}else(0,p._fast_remove_single)(this._tasks,this._tasks.lastIndexOf(wa)),this._tasks.length===1?(this._tasks=this._tasks[0],this.length=1):this.length=this._tasks.length;this.firstEmitBuildStrategy?this.call=ca:this.rebuild()}}function ro(wa){for(var Oa,fa=[],va=1;va<arguments.length;va++)fa[va-1]=arguments[va];this.length===0?(this._tasks=fa,this.length=1):this.length===1?(fa.unshift(this._tasks),this._tasks=fa,this.length=this._tasks.length):((Oa=this._tasks).splice.apply(Oa,$n([wa,0],fa,!1)),this.length=this._tasks.length)}function io(wa){for(var Oa,fa=[],va=1;va<arguments.length;va++)fa[va-1]=arguments[va];this.length===0?(this._tasks=fa,this.length=1):this.length===1?(fa.unshift(this._tasks),this._tasks=fa,this.length=this._tasks.length):((Oa=this._tasks).splice.apply(Oa,$n([wa,0],fa,!1)),this.length=this._tasks.length),this.firstEmitBuildStrategy?this.call=ca:this.rebuild()}function no(){this.length===0?this.call=Ds.BAKED_EMPTY_FUNC:this.length===1?this.call=this._tasks:this.call=(0,Ds.bakeCollection)(this._tasks,this.argsNum)}function na(){this.length===0?this.call=Ds.BAKED_EMPTY_FUNC:this.length===1?this.call=this._tasks:this.call=(0,Ds.bakeCollectionAwait)(this._tasks,this.argsNum)}function ca(){this.rebuild(),this.call.apply(void 0,arguments)}var la=(function(){function wa(Oa,fa,va,Ca){fa===void 0&&(fa=!0),va===void 0&&(va=null),Ca===void 0&&(Ca=!1),this.awaitTasks=Ca,this.call=Ds.BAKED_EMPTY_FUNC,this.argsNum=Oa,this.firstEmitBuildStrategy=!0,Ca?this.rebuild=na.bind(this):this.rebuild=no.bind(this),this.setAutoRebuild(fa),va?typeof va=="function"?(this._tasks=va,this.length=1):(this._tasks=va,this.length=va.length):(this._tasks=null,this.length=0),fa&&this.rebuild()}return wa})();taskCollection.TaskCollection=la;function ua(){this._tasks=null,this.length=0,this.call=Ds.BAKED_EMPTY_FUNC}function da(){this._tasks=null,this.length=0,this.call=Ds.BAKED_EMPTY_FUNC}function ga(wa){this.argsNum<wa&&(this.argsNum=wa,this.firstEmitBuildStrategy?this.call=ca:this.rebuild())}function pa(wa){wa?(this.push=Fs.bind(this),this.insert=io.bind(this),this.removeLast=Kn.bind(this)):(this.push=js.bind(this),this.insert=ro.bind(this),this.removeLast=Rs.bind(this))}function ma(){return this.length===0?[]:this.length===1?[this._tasks]:this._tasks}function xa(wa){wa.length===0?(this.length=0,this.call=Ds.BAKED_EMPTY_FUNC):wa.length===1?(this.length=1,this.call=wa[0],this._tasks=wa[0]):(this.length=wa.length,this._tasks=wa,this.firstEmitBuildStrategy?this.call=ca:this.rebuild())}return la.prototype.fastClear=ua,la.prototype.clear=da,la.prototype.growArgsNum=ga,la.prototype.setAutoRebuild=pa,la.prototype.tasksAsArray=ma,la.prototype.setTasks=xa,taskCollection}var hasRequiredTaskCollection;function requireTaskCollection(){return hasRequiredTaskCollection||(hasRequiredTaskCollection=1,(function($n){var p=taskCollection$1&&taskCollection$1.__createBinding||(Object.create?(function(js,Fs,Rs,Kn){Kn===void 0&&(Kn=Rs);var ro=Object.getOwnPropertyDescriptor(Fs,Rs);(!ro||("get"in ro?!Fs.__esModule:ro.writable||ro.configurable))&&(ro={enumerable:!0,get:function(){return Fs[Rs]}}),Object.defineProperty(js,Kn,ro)}):(function(js,Fs,Rs,Kn){Kn===void 0&&(Kn=Rs),js[Kn]=Fs[Rs]})),Ds=taskCollection$1&&taskCollection$1.__exportStar||function(js,Fs){for(var Rs in js)Rs!=="default"&&!Object.prototype.hasOwnProperty.call(Fs,Rs)&&p(Fs,js,Rs)};Object.defineProperty($n,"__esModule",{value:!0}),Ds(requireTaskCollection$1(),$n)})(taskCollection$1)),taskCollection$1}var utils={},hasRequiredUtils;function requireUtils(){if(hasRequiredUtils)return utils;hasRequiredUtils=1,Object.defineProperty(utils,"__esModule",{value:!0}),utils.nullObj=void 0;function $n(){var p={};return p.__proto__=null,p}return utils.nullObj=$n,utils}var hasRequiredEe;
572function requireEe(){if(hasRequiredEe)return ee;hasRequiredEe=1;var $n=ee&&ee.__spreadArray||function(fa,va,Ca){if(Ca||arguments.length===2)for(var ba=0,Ma=va.length,Pa;ba<Ma;ba++)(Pa||!(ba in va))&&(Pa||(Pa=Array.prototype.slice.call(va,0,ba)),Pa[ba]=va[ba]);return fa.concat(Pa||Array.prototype.slice.call(va))};Object.defineProperty(ee,"__esModule",{value:!0}),ee.EventEmitter=void 0;var p=requireTaskCollection(),Ds=requireUtils$1(),js=requireUtils();function Fs(fa,va,Ca,ba,Ma,Pa){var qa=this.events[fa];if(qa){if(qa.length===0)return!1;if(qa.argsNum<6)qa.call(va,Ca,ba,Ma,Pa);else{for(var Aa=new Array(qa.argsNum),Da=0,$a=Aa.length;Da<$a;++Da)Aa[Da]=arguments[Da+1];qa.call.apply(void 0,Aa)}return!0}return!1}function Rs(fa,va,Ca,ba,Ma,Pa){var qa=this.events[fa],Aa;if(qa!==void 0){if(qa.length===0)return!1;if(qa.argsNum<6)qa.call(va,Ca,ba,Ma,Pa);else{Aa=new Array(qa.argsNum);for(var Da=0,$a=Aa.length;Da<$a;++Da)Aa[Da]=arguments[Da+1];qa.call.apply(void 0,Aa)}}var Qa=this.onceEvents[fa];if(Qa){if(typeof Qa=="function")if(this.onceEvents[fa]=void 0,arguments.length<6)Qa(va,Ca,ba,Ma,Pa);else{if(Aa===void 0){Aa=new Array(arguments.length-1);for(var Da=0,$a=Aa.length;Da<$a;++Da)Aa[Da]=arguments[Da+1]}Qa.apply(void 0,Aa)}else{var Za=Qa;if(this.onceEvents[fa]=void 0,arguments.length<6)for(var Da=0;Da<Za.length;++Da)Za[Da](va,Ca,ba,Ma,Pa);else{if(Aa===void 0){Aa=new Array(arguments.length-1);for(var Da=0,$a=Aa.length;Da<$a;++Da)Aa[Da]=arguments[Da+1]}for(var Da=0;Da<Za.length;++Da)Za[Da].apply(void 0,Aa)}}return!0}return qa!==void 0}var Kn=(function(){function fa(){this.events=(0,js.nullObj)(),this.onceEvents=(0,js.nullObj)(),this._symbolKeys=new Set,this.maxListeners=1/0}return Object.defineProperty(fa.prototype,"_eventsCount",{get:function(){return this.eventNames().length},enumerable:!1,configurable:!0}),fa})();ee.EventEmitter=Kn;function ro(fa,va){switch(this.emit===Fs&&(this.emit=Rs),typeof this.onceEvents[fa]){case"undefined":this.onceEvents[fa]=va,typeof fa=="symbol"&&this._symbolKeys.add(fa);break;case"function":this.onceEvents[fa]=[this.onceEvents[fa],va];break;case"object":this.onceEvents[fa].push(va)}return this}function io(fa,va,Ca){if(Ca===void 0&&(Ca=va.length),typeof va!="function")throw new TypeError("The listener must be a function");var ba=this.events[fa];return ba?(ba.push(va),ba.growArgsNum(Ca),this.maxListeners!==1/0&&this.maxListeners<=ba.length&&console.warn('Maximum event listeners for "'.concat(String(fa),'" event!'))):(this.events[fa]=new p.TaskCollection(Ca,!0,va,!1),typeof fa=="symbol"&&this._symbolKeys.add(fa)),this}function no(fa,va){var Ca=this.events[fa];Ca&&Ca.removeLast(va);var ba=this.onceEvents[fa];return ba&&(typeof ba=="function"?this.onceEvents[fa]=void 0:typeof ba=="object"&&(ba.length===1&&ba[0]===va?this.onceEvents[fa]=void 0:(0,Ds._fast_remove_single)(ba,ba.lastIndexOf(va)))),this}function na(fa,va,Ca,ba){Ca===void 0&&(Ca=this),ba===void 0&&(ba=va.length),this.boundFuncs||(this.boundFuncs=new Map);var Ma=va.bind(Ca);return this.boundFuncs.set(va,Ma),this.addListener(fa,Ma,ba)}function ca(fa,va){var Ca,ba,Ma=(Ca=this.boundFuncs)===null||Ca===void 0?void 0:Ca.get(va);return(ba=this.boundFuncs)===null||ba===void 0||ba.delete(va),this.removeListener(fa,Ma)}function la(fa){return this.events[fa]&&!!this.events[fa].length}function ua(fa,va,Ca){if(Ca===void 0&&(Ca=va.length),typeof va!="function")throw new TypeError("The listener must be a function");var ba=this.events[fa];return!ba||!(ba instanceof p.TaskCollection)?(ba=this.events[fa]=new p.TaskCollection(Ca,!0,va,!1),typeof fa=="symbol"&&this._symbolKeys.add(fa)):(ba.insert(0,va),ba.growArgsNum(Ca),this.maxListeners!==1/0&&this.maxListeners<=ba.length&&console.warn('Maximum event listeners for "'.concat(String(fa),'" event!'))),this}function da(fa,va){this.emit===Fs&&(this.emit=Rs);var Ca=this.onceEvents[fa];return Ca?typeof Ca!="object"?(this.onceEvents[fa]=[va,Ca],typeof fa=="symbol"&&this._symbolKeys.add(fa)):(Ca.unshift(va),this.maxListeners!==1/0&&this.maxListeners<=Ca.length&&console.warn('Maximum event listeners for "'.concat(String(fa),'" once event!'))):(this.onceEvents[fa]=[va],typeof fa=="symbol"&&this._symbolKeys.add(fa)),this}function ga(fa){return fa===void 0?(this.events=(0,js.nullObj)(),this.onceEvents=(0,js.nullObj)(),this._symbolKeys=new Set):(this.events[fa]=void 0,this.onceEvents[fa]=void 0,typeof fa=="symbol"&&this._symbolKeys.delete(fa)),this}function pa(fa){return this.maxListeners=fa,this}function ma(){return this.maxListeners}function xa(fa){return this.emit===Fs?this.events[fa]?this.events[fa].tasksAsArray().slice():[]:this.events[fa]&&this.onceEvents[fa]?$n($n([],this.events[fa].tasksAsArray(),!0),typeof this.onceEvents[fa]=="function"?[this.onceEvents[fa]]:this.onceEvents[fa],!0):this.events[fa]?this.events[fa].tasksAsArray():this.onceEvents[fa]?typeof this.onceEvents[fa]=="function"?[this.onceEvents[fa]]:this.onceEvents[fa]:[]}function wa(){var fa=this;if(this.emit===Fs){var va=Object.keys(this.events);return $n($n([],va,!0),Array.from(this._symbolKeys),!0).filter(function(ba){return ba in fa.events&&fa.events[ba]&&fa.events[ba].length})}else{var va=Object.keys(this.events).filter(function(Ma){return fa.events[Ma]&&fa.events[Ma].length}),Ca=Object.keys(this.onceEvents).filter(function(Ma){return fa.onceEvents[Ma]&&fa.onceEvents[Ma].length});return $n($n($n([],va,!0),Ca,!0),Array.from(this._symbolKeys).filter(function(Ma){return Ma in fa.events&&fa.events[Ma]&&fa.events[Ma].length||Ma in fa.onceEvents&&fa.onceEvents[Ma]&&fa.onceEvents[Ma].length}),!0)}}function Oa(fa){return this.emit===Fs?this.events[fa]&&this.events[fa].length||0:(this.events[fa]&&this.events[fa].length||0)+(this.onceEvents[fa]&&this.onceEvents[fa].length||0)}return Kn.prototype.emit=Fs,Kn.prototype.on=io,Kn.prototype.once=ro,Kn.prototype.addListener=io,Kn.prototype.removeListener=no,Kn.prototype.addListenerBound=na,Kn.prototype.removeListenerBound=ca,Kn.prototype.hasListeners=la,Kn.prototype.prependListener=ua,Kn.prototype.prependOnceListener=da,Kn.prototype.off=no,Kn.prototype.removeAllListeners=ga,Kn.prototype.setMaxListeners=pa,Kn.prototype.getMaxListeners=ma,Kn.prototype.listeners=xa,Kn.prototype.eventNames=wa,Kn.prototype.listenerCount=Oa,ee}var hasRequiredLib;
572function requireLib(){return hasRequiredLib||(hasRequiredLib=1,(function($n){var p=lib&&lib.__createBinding||(Object.create?(function(js,Fs,Rs,Kn){Kn===void 0&&(Kn=Rs);var ro=Object.getOwnPropertyDescriptor(Fs,Rs);(!ro||("get"in ro?!Fs.__esModule:ro.writable||ro.configurable))&&(ro={enumerable:!0,get:function(){return Fs[Rs]}}),Object.defineProperty(js,Kn,ro)}):(function(js,Fs,Rs,Kn){Kn===void 0&&(Kn=Rs),js[Kn]=Fs[Rs]})),Ds=lib&&lib.__exportStar||function(js,Fs){for(var Rs in js)Rs!=="default"&&!Object.prototype.hasOwnProperty.call(Fs,Rs)&&p(Fs,js,Rs)};Object.defineProperty($n,"__esModule",{value:!0}),Ds(requireTypes(),$n),Ds(requireEe(),$n)})(lib)),lib}var libExports=requireLib();const useDevice=()=>useNuxtApp().$device,_hoisted_1={style:{position:"absolute","z-index":"500",width:"100%",height:"100%",display:"flex","justify-content":"center","align-items":"center","background-color":"white"}},_sfc_main=defineComponent({__name:"CanvasEditor",props:{mode:{type:String,default:"edit",validator($n){return["edit","buy"].includes($n)}},gridEnabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1}},emits:["toolEvent"],setup($n,{expose:p,emit:Ds}){const js=useLogger("Canvas"),{isMobileOrTablet:Fs}=useDevice(),Rs=new libExports.EventEmitter,Kn=Fs,ro=ref(),io=ref(!1),no=ref(!1),na=ref();let ca,la;const ua=ref([]),da=ref({x:0,y:0}),ga=ref(),pa=ref(),ma={mode:"copy",objects:[]},xa={shift:!1,ctrl:!1,alt:!1},wa=()=>{const ya=ca.getZoom(),Sa=ca.viewportTransform,Ta={x:Sa[4],y:Sa[5]};return{zoom:ya,position:Ta}},Oa=(ya,Sa)=>{const Ta=Math.min(Math.max(ya,.1),10),ka=Sa??new ht(ca.getWidth()/2,ca.getHeight()/2);ca.zoomToPoint(ka,Ta),ca.requestRenderAll()},fa=(ya,Sa)=>{const Ta=Math.min(Math.max(ya,.1),10);ca.setZoom(Ta);const ka=new ht(Sa.x*-1,Sa.y*-1);ca.absolutePan(ka),ca.requestRenderAll()},va=(ya,Sa=!0)=>{if(ga.value?.name===ya)return;ca.getActiveObject()&&Sa&&(ca.discardActiveObject(),ca.renderAll());const ka=ua.value.find(Ka=>Ka.name===ya);if(!ka){js.error("Tool not found",ya);return}ga.value=ka,Rs.emit("toolEvent",ya),ga.value?.selector?ca.selection=!0:ca.selection=!1},Ca=async ya=>{const Sa=ca.getActiveObject();if(!Sa||Pa.copiableObjectExclude?.includes(Sa.type))return;ma.mode=ya;let Ta=[];if(Sa instanceof $o?Ta=Sa.getObjects():Ta=[Sa],Ta.length>0){ma.objects=[];for(const ka of Ta)ma.objects.push(await ka.clone(["meta"])),ya==="cut"&&ca.remove(ka);ma.mode==="cut"&&ca.remove(Sa),ca.discardActiveObject(),Rs.emit(ma.mode,ma.objects)}},ba=()=>{const ya=ca.getActiveObject();ya&&(ya instanceof $o?(ya.getObjects().forEach(Sa=>{ca.remove(Sa)}),ca.discardActiveObject()):(ya.group?(ya.group.remove(ya),ca.requestRenderAll()):ca.remove(ya),ca.discardActiveObject()))},Ma=async()=>{if(ma&&ma.objects.length>0){const ya=[],Sa=ma.objects.length>1?ma.objects[Math.floor(ma.objects.length/2)]:ma.objects[0];if(!Sa){js.error("middleObject not found",ma.objects);return}for(let Ta=0;Ta<ma.objects.length;Ta++){const ka=ma.objects[Ta];if(!ka)continue;const Ka=await ka.clone(["meta"]);Ka.handleDuplicate&&Ka.handleDuplicate();const Oh={x:Sa.left-ka.left,y:Sa.top-ka.top};Ka.set({left:da.value.x-Oh.x,top:da.value.y-Oh.y}),Ka.setCoords(),ya.push(Ka)}ca.add(...ya),Rs.emit("paste",ya),ma.mode==="cut"&&(ma.objects=[])}};let Pa={size:{viewport:{width:750,height:750},area:{width:750,height:750}},background:{url:""},zoom:{max:10,min:.1},customObjects:[],tools:[],tooltipEnabled:!1,selectionEnabled:!0,hoverCursor:"pointer",defaultToolName:"object-selection",switchToDefaultToolAfterDraw:!0,copiableObjectExclude:[],moveOnCanvasDrag:!1,fillContainerSize:!0};const qa=async ya=>{Pa=ya,ca.getActiveObject()&&ca.discardActiveObject();for(const Sa of ya.customObjects)tt.setClass(Sa,Sa.type);ya.background&&await Aa(ya.background.url),ya.compressedCanvasData&&await xh(ya.compressedCanvasData),la=new xr({left:0,top:0,fill:"transparent",width:ya.size.area.width,height:ya.size.area.height,selectable:!1,evented:!1,originX:"center",originY:"center",objectCaching:!1,meta:{border:!0}}),ca.add(la),ca.on("object:moving",function(Sa){const Ta=Sa.target;if(!Ta||!Ta.canvas)return;Ta.setCoords();
572const ka=Ta.getBoundingRect(),Ka=la.getBoundingRect();(ka.top<Ka.top||ka.left<Ka.left)&&(Ta.top=Math.max(Ta.top,Ta.top-(ka.top-Ka.top)),Ta.left=Math.max(Ta.left,Ta.left-(ka.left-Ka.left))),(ka.top+ka.height>Ka.top+Ka.height||ka.left+ka.width>Ka.left+Ka.width)&&(Ta.top=Math.min(Ta.top,Ka.top+Ka.height-ka.height+Ta.top-ka.top),Ta.left=Math.min(Ta.left,Ka.left+Ka.width-ka.width+Ta.left-ka.left))}),Pa.zoom=ya.zoom,ua.value=[],ya.tools.forEach(Sa=>{ua.value.push(Sa)}),ca.selection=ya.selectionEnabled,ca.hoverCursor=ya.hoverCursor,va(ya.defaultToolName),ca.renderAll()},Aa=async(ya,Sa=7e3)=>{const Ta=await ha.fromURL(ya);ca.backgroundImage=Ta,ca.backgroundImage.scaleToHeight(Sa),ca.centerObject(ca.backgroundImage),ca.backgroundImage.width,ca.backgroundImage.height};onMounted(()=>{$o.prototype.setControlsVisibility({mt:!1,mb:!1,ml:!1,mr:!1,bl:!1,br:!1,tl:!1,tr:!1,mtr:!0}),ca=new An("seatmap-canvas",{enablePointerEvents:!1,fireRightClick:!0,stopContextMenu:!0,fireMiddleClick:!0,preserveObjectStacking:!0,perPixelTargetFind:!0}),th(!0),ro.value||js.error("canvasContainer not found"),Pa.fillContainerSize&&ro.value&&new ResizeObserver(Sa=>{for(const Ta of Sa){const{width:ka,height:Ka}=Ta.contentRect;ca.setDimensions({width:ka,height:Ka})}}).observe(ro.value)});const Da=()=>{th(!1),ca.dispose()},$a=()=>{js.warn("toggleGrid not implemented")},Qa=ya=>{const Sa=ya.target;if(xa.shift){const Ta=Sa.angle,ka=15,Ka=Math.round(Ta/ka)*ka;Sa.rotate(Ka)}},Za=ya=>{const Sa=ya.e.deltaY;let Ta=ca.getZoom();Ta*=.999**Sa,Ta>10&&(Ta=10),Ta<.1&&(Ta=.1);const ka=new ht(ya.e.offsetX,ya.e.offsetY);ca.zoomToPoint(ka,Ta)},th=ya=>{ca.on("mouse:wheel",Za),ca.on("mouse:down",Th),ca.on("mouse:move",bh),ca.on("mouse:up",wh),ca.on("object:rotating",Qa),ca.on("object:added",Ta=>{Rs.emit("objectAdded",Ta.target)}),ca.on("object:removed",Ta=>{Rs.emit("objectRemoved",Ta.target)}),ca.on("selection:created",Ta=>{const ka=ca.getActiveObject();ka&&(ka instanceof $o?Rs.emit("selectionCreated",ka.getObjects()):Rs.emit("selectionCreated",[ka]))}),ca.on("selection:updated",Ta=>{const ka=ca.getActiveObject();ka&&(ka instanceof $o?Rs.emit("selectionCreated",ka.getObjects()):Rs.emit("selectionCreated",[ka]))}),ca.on("selection:cleared",Ta=>{Rs.emit("selectionDeleted")}),[{event:"keydown",handler:vh},{event:"keyup",handler:Ta=>{Ta.key==="Shift"&&(xa.shift=!1),Ta.key==="Control"&&(xa.ctrl=!1),Ta.key==="Alt"&&(xa.alt=!1)}}
572].forEach(Ta=>{ya?window.addEventListener(Ta.event,Ta.handler):window.removeEventListener(Ta.event,Ta.handler)})},vh=ya=>{js.debug("onKeyDown",ya),ya.key==="Escape"&&(ga.value=null,pa.value=null,ca.discardActiveObject(),ca.renderAll()),ya.code==="KeyC"&&Ca("copy"),ya.code==="KeyX"&&Ca("cut"),ya.code==="KeyV"&&Ma(),ya.code==="Backspace"&&ba(),ya.key==="Shift"&&(xa.shift=!0),ya.key==="Control"&&(xa.ctrl=!0),ya.key==="Alt"&&(xa.alt=!0),ua.value.forEach(Sa=>{Sa.hotkey===ya.key&&va(Sa.name)})},Ja={isPanning:!1,startX:0,startY:0};function yh(ya){const Sa=la.getBoundingRect();return ya.absolutePointer.x>=Sa.left&&ya.absolutePointer.x<=Sa.left+Sa.width&&ya.absolutePointer.y>=Sa.top&&ya.absolutePointer.y<=Sa.top+Sa.height}function Ch(ya){return!!(ya.target||ya.subTargets&&ya.subTargets.length>0)}const Th=ya=>{if(io.value=!0,ya.e.button===1||ya.e.button===2||Kn&&!Ch(ya)||Pa.moveOnCanvasDrag&&!Ch(ya))Ja.isPanning=!0,Ja.startX=ya.viewportPoint.x,Ja.startY=ya.viewportPoint.y,ca.selection=!1;else if(js.debug("onMouseDown",ya),ga.value&&ga.value.create){const Sa=yh(ya);if(!Sa)return;ga.value.create(ca,ya,Sa)}else js.debug("subTarget",ya.subTargets)};let _h=null;const bh=ya=>{if(da.value={x:ya.scenePoint.x,y:ya.scenePoint.y},ya.e&&"touches"in ya.e){ya.e.preventDefault();const Sa=ya.e;if(Sa.touches&&Sa.touches.length===2){const Ta=Sa.touches[0],ka=Sa.touches[1],Ka=ka.clientX-Ta.clientX,Oh=ka.clientY-Ta.clientY,Dh=Math.sqrt(Ka*Ka+Oh*Oh);if(_h){const Mh=Dh/_h;ca.zoomToPoint(new ht((Ta.clientX+ka.clientX)/2,(Ta.clientY+ka.clientY)/2),ca.getZoom()*Mh)}_h=Dh}else _h=null}if(Ja.isPanning){const Sa=ya.viewportPoint.x-Ja.startX,Ta=ya.viewportPoint.y-Ja.startY,ka=ca.viewportTransform;ka[4]+=Sa,ka[5]+=Ta,ca.setViewportTransform(ka),Ja.startX=ya.viewportPoint.x,Ja.startY=ya.viewportPoint.y}else{if(!io.value)if(ya.target?.type==="seatarea-rect")Rs.emit("mouseMoveHover",ya.target);else if(Array.isArray(ya.subTargets)&&ya.subTargets.length>0){const Sa=ya.subTargets[0];Rs.emit("mouseMoveHover",Sa)}else Rs.emit("mouseMoveHover",null),no.value=!1;if(ga.value&&ga.value.onDraw){const Sa=yh(ya);ga.value.onDraw(ca,ya,Sa)}}},wh=ya=>{if(io.value=!1,Ja.isPanning)Ja.isPanning=!1,Ja.startX=0,Ja.startY=0,Pa.selectionEnabled&&(ca.selection=!0);else if(ga.value&&ga.value.onDrawEnd){const Sa=yh(ya);ga.value.onDrawEnd(ca,ya,Sa),ga.value.switchToDefaultAfterDraw&&va(Pa.defaultToolName,!1)}},xh=async ya=>{const Sa=distExports.decompress(ya);if(Sa){js.debug(Sa);for(const Ta in Sa.objects){const ka=Sa.objects[Ta];ka.type==="seat-group"&&ka.objects.length===0&&delete Sa.objects[Ta]}js.debug(Sa),await ca.loadFromJSON(Sa),ca.getObjects(),ca.discardActiveObject()}};return p({loadCompressedCanvasData:xh,getCurrentCanvasData:()=>{const ya=ca.toObject(["meta","text"]),Sa=[];for(const ka in ya.objects){const Ka=ya.objects[ka];Ka.objectType==="background"||Ka.objectType==="grid"||Ka.meta?.border||Sa.push(Ka)}return ya.objects=Sa,js.debug(Sa),js.debug(`Canvasdata in bytes: ${JSON.stringify(ya).length/1024}`),distExports.trimUndefinedRecursively(ya),distExports.compress(ya)},toggleGrid:$a,getCurrentZoomAndPosition:wa,setCurrentZoomAndPosition:fa,setCurrentZoom:Oa,setToolByName:va,getCanvasObjects:()=>ca.getObjects(),setup:qa,getCanvas:()=>ca,currentToolName:computed(()=>ga.value?.name),destroy:Da,events:Rs,setBackground:Aa,copy:()=>Ca("copy"),cut:()=>Ca("cut"),delete:()=>ba(),paste:Ma}),(ya,Sa)=>{const Ta=script;return openBlock(),createElementBlock("div",{class:"select-none noselect",ref_key:"canvasContainer",ref:ro,style:{width:"100%",height:"100%"}},[withDirectives(createBaseVNode("div",_hoisted_1,[createVNode(Ta,{animationduration:".5s","aria-label":"Custom ProgressSpinner",strokewidth:"8",style:{width:"25%",height:"25%"}})],512),[[vShow,$n.loading]]),Sa[0]||(Sa[0]=createBaseVNode("canvas",{class:"select-none",id:"seatmap-canvas"},null,-1)),withDirectives(createBaseVNode("div",{ref_key:"tooltipElement",ref:na,style:{position:"absolute",width:"200px",height:"200px"}},[renderSlot(ya.$slots,"tooltip",{},void 0,!0)],512),[[vShow,no.value&&unref(Pa).tooltipEnabled]])],512)}}}),__nuxt_component_3=_export_sfc(_sfc_main,[["__scopeId","data-v-63ad0cd0"]]),
572CanvasEditor=Object.freeze(Object.defineProperty({__proto__:null,default:__nuxt_component_3},Symbol.toStringTag,{value:"Module"}));export{$o as $,CanvasEditor as C,Er as E,Fr as F,Ko as K,Lo as L,Qn as Q,__nuxt_component_3 as _,bn as b,co as c,ht as h,libExports as l,tt as t,xr as x};
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.