@hprint/shared 0.0.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,441 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Oe=class Oe{static getDeviceDPI(){if(!this._deviceDPI)try{const o=document.createElement("div");o.style.width="1in",o.style.height="0",o.style.position="absolute",o.style.visibility="hidden",document.body.appendChild(o);const m=o.offsetWidth;document.body.removeChild(o),this._deviceDPI=m*window.devicePixelRatio||this.CONSTANTS.DEFAULT_DPI}catch{console.warn("无法获取设备DPI,使用默认值:",this.CONSTANTS.DEFAULT_DPI),this._deviceDPI=this.CONSTANTS.DEFAULT_DPI}return this._deviceDPI}static mmToPx(o,m,S){const b=this.normalizeNumber(o,"毫米值"),T=this.getValidDpi(m),F=b*T/this.CONSTANTS.INCH_TO_MM;return S?.direct?F:Math.ceil(F)}static pxToMm(o,m,S){const b=this.normalizeNumber(o,"像素值"),T=this.getValidDpi(m);return b*this.CONSTANTS.INCH_TO_MM/T}static mmToPxBatch(o,m){return o.map(S=>this.mmToPx(S,m,void 0))}static pxToMmBatch(o,m){return o.map(S=>this.pxToMm(S,m,void 0))}static getValidDpi(o){if(o!=null){const S=this.normalizeNumber(o,"DPI值");if(S<=0)throw new Error("DPI值必须大于0");return S}const m=this.getDeviceDPI();if(m<=0)throw new Error("DPI值必须大于0");return m}static normalizeNumber(o,m){if(typeof o=="string"){const S=o.trim();if(S==="")throw new Error(`${m}不能为空字符串`);const b=Number(S);if(isNaN(b))throw new Error(`${m}必须是有效数字,无法转换: "${o}"`);return b}if(typeof o!="number"||isNaN(o))throw new Error(`${m}必须是有效数字`);return o}static validateNumber(o,m){this.normalizeNumber(o,m)}static resetCache(){this._deviceDPI=null}static ptToPx(o,m){const S=this.normalizeNumber(o,"磅值"),b=this.getValidDpi(void 0),T=S*b/72;return m?.direct?T:Math.ceil(T)}static pxToPt(o){const m=this.normalizeNumber(o,"像素值"),S=this.getValidDpi(void 0);return m*72/S}static ptToPxBatch(o,m){return o.map(S=>this.ptToPx(S,m))}static pxToPtBatch(o){return o.map(m=>this.pxToPt(m))}static mmToPt(o){return this.normalizeNumber(o,"毫米值")*72/25.4}};Oe.devicePixelRatio=window.devicePixelRatio,Oe.CONSTANTS={INCH_TO_MM:25.4,DEFAULT_DPI:96,STANDARD_DPI:{SCREEN:96,PRINT:300,HIGH_RES:600}};let Xe=Oe;const ir=(d,o)=>{const m=[],S=Math.PI*2/d;let b=-Math.PI/2;d%2===0&&(b+=S/2);for(let T=0;T<d;T++){const F=T*S+b;m.push({x:Math.cos(F)*o,y:Math.sin(F)*o})}return m},rr={getPolygonVertices:ir};var pe,nr=new Uint8Array(16);function sr(){if(!pe&&(pe=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!pe))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return pe(nr)}const or=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function ar(d){return typeof d=="string"&&or.test(d)}var gt=[];for(var Ae=0;Ae<256;++Ae)gt.push((Ae+256).toString(16).substr(1));function lr(d){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,m=(gt[d[o+0]]+gt[d[o+1]]+gt[d[o+2]]+gt[d[o+3]]+"-"+gt[d[o+4]]+gt[d[o+5]]+"-"+gt[d[o+6]]+gt[d[o+7]]+"-"+gt[d[o+8]]+gt[d[o+9]]+"-"+gt[d[o+10]]+gt[d[o+11]]+gt[d[o+12]]+gt[d[o+13]]+gt[d[o+14]]+gt[d[o+15]]).toLowerCase();if(!ar(m))throw TypeError("Stringified UUID is invalid");return m}function hr(d,o,m){d=d||{};var S=d.random||(d.rng||sr)();return S[6]=S[6]&15|64,S[8]=S[8]&63|128,lr(S)}function cr(d){const o=Object.create(null);for(const m of d.split(","))o[m]=1;return m=>m in o}const re=process.env.NODE_ENV!=="production"?Object.freeze({}):{};process.env.NODE_ENV!=="production"&&Object.freeze([]);const zt=()=>{},ur=d=>d.charCodeAt(0)===111&&d.charCodeAt(1)===110&&(d.charCodeAt(2)>122||d.charCodeAt(2)<97),Rt=Object.assign,fr=Object.prototype.hasOwnProperty,We=(d,o)=>fr.call(d,o),dt=Array.isArray,Ut=d=>Ee(d)==="[object Map]",dr=d=>Ee(d)==="[object Set]",mt=d=>typeof d=="function",Dt=d=>typeof d=="string",ue=d=>typeof d=="symbol",yt=d=>d!==null&&typeof d=="object",gr=d=>(yt(d)||mt(d))&&mt(d.then)&&mt(d.catch),pr=Object.prototype.toString,Ee=d=>pr.call(d),pi=d=>Ee(d).slice(8,-1),mr=d=>Ee(d)==="[object Object]",qe=d=>Dt(d)&&d!=="NaN"&&d[0]!=="-"&&""+parseInt(d,10)===d,mi=d=>{const o=Object.create(null);return(m=>o[m]||(o[m]=d(m)))},vi=mi(d=>d.charAt(0).toUpperCase()+d.slice(1)),vr=mi(d=>d?`on${vi(d)}`:""),Lt=(d,o)=>!Object.is(d,o);let li;const Pe=()=>li||(li=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ke(d){if(dt(d)){const o={};for(let m=0;m<d.length;m++){const S=d[m],b=Dt(S)?Sr(S):Ke(S);if(b)for(const T in b)o[T]=b[T]}return o}else if(Dt(d)||yt(d))return d}const _r=/;(?![^(]*\))/g,yr=/:([^]+)/,Cr=/\/\*[^]*?\*\//g;function Sr(d){const o={};return d.replace(Cr,"").split(_r).forEach(m=>{if(m){const S=m.split(yr);S.length>1&&(o[S[0].trim()]=S[1].trim())}}),o}function Je(d){let o="";if(Dt(d))o=d;else if(dt(d))for(let m=0;m<d.length;m++){const S=Je(d[m]);S&&(o+=S+" ")}else if(yt(d))for(const m in d)d[m]&&(o+=m+" ");return o.trim()}function Tt(d,...o){console.warn(`[Vue warn] ${d}`,...o)}let ht;const ke=new WeakSet;class br{constructor(o){this.fn=o,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,ke.has(this)&&(ke.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||yi(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,hi(this),Ci(this);const o=ht,m=xt;ht=this,xt=!0;try{return this.fn()}finally{process.env.NODE_ENV!=="production"&&ht!==this&&Tt("Active effect was not restored correctly - this is likely a Vue internal bug."),Si(this),ht=o,xt=m,this.flags&=-3}}stop(){if(this.flags&1){for(let o=this.deps;o;o=o.nextDep)Ze(o);this.deps=this.depsTail=void 0,hi(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?ke.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){Ve(this)&&this.run()}get dirty(){return Ve(this)}}let _i=0,ee,ie;function yi(d,o=!1){if(d.flags|=8,o){d.next=ie,ie=d;return}d.next=ee,ee=d}function $e(){_i++}function Qe(){if(--_i>0)return;if(ie){let o=ie;for(ie=void 0;o;){const m=o.next;o.next=void 0,o.flags&=-9,o=m}}let d;for(;ee;){let o=ee;for(ee=void 0;o;){const m=o.next;if(o.next=void 0,o.flags&=-9,o.flags&1)try{o.trigger()}catch(S){d||(d=S)}o=m}}if(d)throw d}function Ci(d){for(let o=d.deps;o;o=o.nextDep)o.version=-1,o.prevActiveLink=o.dep.activeLink,o.dep.activeLink=o}function Si(d){let o,m=d.depsTail,S=m;for(;S;){const b=S.prevDep;S.version===-1?(S===m&&(m=b),Ze(S),xr(S)):o=S,S.dep.activeLink=S.prevActiveLink,S.prevActiveLink=void 0,S=b}d.deps=o,d.depsTail=m}function Ve(d){for(let o=d.deps;o;o=o.nextDep)if(o.dep.version!==o.version||o.dep.computed&&(bi(o.dep.computed)||o.dep.version!==o.version))return!0;return!!d._dirty}function bi(d){if(d.flags&4&&!(d.flags&16)||(d.flags&=-17,d.globalVersion===ne)||(d.globalVersion=ne,!d.isSSR&&d.flags&128&&(!d.deps&&!d._dirty||!Ve(d))))return;d.flags|=2;const o=d.dep,m=ht,S=xt;ht=d,xt=!0;try{Ci(d);const b=d.fn(d._value);(o.version===0||Lt(b,d._value))&&(d.flags|=128,d._value=b,o.version++)}catch(b){throw o.version++,b}finally{ht=m,xt=S,Si(d),d.flags&=-3}}function Ze(d,o=!1){const{dep:m,prevSub:S,nextSub:b}=d;if(S&&(S.nextSub=b,d.prevSub=void 0),b&&(b.prevSub=S,d.nextSub=void 0),process.env.NODE_ENV!=="production"&&m.subsHead===d&&(m.subsHead=b),m.subs===d&&(m.subs=S,!S&&m.computed)){m.computed.flags&=-5;for(let T=m.computed.deps;T;T=T.nextDep)Ze(T,!0)}!o&&!--m.sc&&m.map&&m.map.delete(m.key)}function xr(d){const{prevDep:o,nextDep:m}=d;o&&(o.nextDep=m,d.prevDep=void 0),m&&(m.prevDep=o,d.nextDep=void 0)}let xt=!0;const xi=[];function Kt(){xi.push(xt),xt=!1}function Jt(){const d=xi.pop();xt=d===void 0?!0:d}function hi(d){const{cleanup:o}=d;if(d.cleanup=void 0,o){const m=ht;ht=void 0;try{o()}finally{ht=m}}}let ne=0;class wr{constructor(o,m){this.sub=o,this.dep=m,this.version=m.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class ti{constructor(o){this.computed=o,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0,process.env.NODE_ENV!=="production"&&(this.subsHead=void 0)}track(o){if(!ht||!xt||ht===this.computed)return;let m=this.activeLink;if(m===void 0||m.sub!==ht)m=this.activeLink=new wr(ht,this),ht.deps?(m.prevDep=ht.depsTail,ht.depsTail.nextDep=m,ht.depsTail=m):ht.deps=ht.depsTail=m,wi(m);else if(m.version===-1&&(m.version=this.version,m.nextDep)){const S=m.nextDep;S.prevDep=m.prevDep,m.prevDep&&(m.prevDep.nextDep=S),m.prevDep=ht.depsTail,m.nextDep=void 0,ht.depsTail.nextDep=m,ht.depsTail=m,ht.deps===m&&(ht.deps=S)}return process.env.NODE_ENV!=="production"&&ht.onTrack&&ht.onTrack(Rt({effect:ht},o)),m}trigger(o){this.version++,ne++,this.notify(o)}notify(o){$e();try{if(process.env.NODE_ENV!=="production")for(let m=this.subsHead;m;m=m.nextSub)m.sub.onTrigger&&!(m.sub.flags&8)&&m.sub.onTrigger(Rt({effect:m.sub},o));for(let m=this.subs;m;m=m.prevSub)m.sub.notify()&&m.sub.dep.notify()}finally{Qe()}}}function wi(d){if(d.dep.sc++,d.sub.flags&4){const o=d.dep.computed;if(o&&!d.dep.subs){o.flags|=20;for(let S=o.deps;S;S=S.nextDep)wi(S)}const m=d.dep.subs;m!==d&&(d.prevSub=m,m&&(m.nextSub=d)),process.env.NODE_ENV!=="production"&&d.dep.subsHead===void 0&&(d.dep.subsHead=d),d.dep.subs=d}}const Ye=new WeakMap,Xt=Symbol(process.env.NODE_ENV!=="production"?"Object iterate":""),He=Symbol(process.env.NODE_ENV!=="production"?"Map keys iterate":""),se=Symbol(process.env.NODE_ENV!=="production"?"Array iterate":"");function _t(d,o,m){if(xt&&ht){let S=Ye.get(d);S||Ye.set(d,S=new Map);let b=S.get(m);b||(S.set(m,b=new ti),b.map=S,b.key=m),process.env.NODE_ENV!=="production"?b.track({target:d,type:o,key:m}):b.track()}}function Ft(d,o,m,S,b,T){const F=Ye.get(d);if(!F){ne++;return}const u=n=>{n&&(process.env.NODE_ENV!=="production"?n.trigger({target:d,type:o,key:m,newValue:S,oldValue:b,oldTarget:T}):n.trigger())};if($e(),o==="clear")F.forEach(u);else{const n=dt(d),l=n&&qe(m);if(n&&m==="length"){const a=Number(S);F.forEach((t,i)=>{(i==="length"||i===se||!ue(i)&&i>=a)&&u(t)})}else switch((m!==void 0||F.has(void 0))&&u(F.get(m)),l&&u(F.get(se)),o){case"add":n?l&&u(F.get("length")):(u(F.get(Xt)),Ut(d)&&u(F.get(He)));break;case"delete":n||(u(F.get(Xt)),Ut(d)&&u(F.get(He)));break;case"set":Ut(d)&&u(F.get(Xt));break}}Qe()}function Vt(d){const o=at(d);return o===d?o:(_t(o,"iterate",se),Ct(d)?o:o.map(At))}function ei(d){return _t(d=at(d),"iterate",se),d}function kt(d,o){return Ot(d)?Gt(d)?ae(At(o)):ae(o):At(o)}const Tr={__proto__:null,[Symbol.iterator](){return Me(this,Symbol.iterator,d=>kt(this,d))},concat(...d){return Vt(this).concat(...d.map(o=>dt(o)?Vt(o):o))},entries(){return Me(this,"entries",d=>(d[1]=kt(this,d[1]),d))},every(d,o){return Et(this,"every",d,o,void 0,arguments)},filter(d,o){return Et(this,"filter",d,o,m=>m.map(S=>kt(this,S)),arguments)},find(d,o){return Et(this,"find",d,o,m=>kt(this,m),arguments)},findIndex(d,o){return Et(this,"findIndex",d,o,void 0,arguments)},findLast(d,o){return Et(this,"findLast",d,o,m=>kt(this,m),arguments)},findLastIndex(d,o){return Et(this,"findLastIndex",d,o,void 0,arguments)},forEach(d,o){return Et(this,"forEach",d,o,void 0,arguments)},includes(...d){return Fe(this,"includes",d)},indexOf(...d){return Fe(this,"indexOf",d)},join(d){return Vt(this).join(d)},lastIndexOf(...d){return Fe(this,"lastIndexOf",d)},map(d,o){return Et(this,"map",d,o,void 0,arguments)},pop(){return Zt(this,"pop")},push(...d){return Zt(this,"push",d)},reduce(d,...o){return ci(this,"reduce",d,o)},reduceRight(d,...o){return ci(this,"reduceRight",d,o)},shift(){return Zt(this,"shift")},some(d,o){return Et(this,"some",d,o,void 0,arguments)},splice(...d){return Zt(this,"splice",d)},toReversed(){return Vt(this).toReversed()},toSorted(d){return Vt(this).toSorted(d)},toSpliced(...d){return Vt(this).toSpliced(...d)},unshift(...d){return Zt(this,"unshift",d)},values(){return Me(this,"values",d=>kt(this,d))}};function Me(d,o,m){const S=ei(d),b=S[o]();return S!==d&&!Ct(d)&&(b._next=b.next,b.next=()=>{const T=b._next();return T.done||(T.value=m(T.value)),T}),b}const Or=Array.prototype;function Et(d,o,m,S,b,T){const F=ei(d),u=F!==d&&!Ct(d),n=F[o];if(n!==Or[o]){const t=n.apply(d,T);return u?At(t):t}let l=m;F!==d&&(u?l=function(t,i){return m.call(this,kt(d,t),i,d)}:m.length>2&&(l=function(t,i){return m.call(this,t,i,d)}));const a=n.call(F,l,S);return u&&b?b(a):a}function ci(d,o,m,S){const b=ei(d);let T=m;return b!==d&&(Ct(d)?m.length>3&&(T=function(F,u,n){return m.call(this,F,u,n,d)}):T=function(F,u,n){return m.call(this,F,kt(d,u),n,d)}),b[o](T,...S)}function Fe(d,o,m){const S=at(d);_t(S,"iterate",se);const b=S[o](...m);return(b===-1||b===!1)&&Se(m[0])?(m[0]=at(m[0]),S[o](...m)):b}function Zt(d,o,m=[]){Kt(),$e();const S=at(d)[o].apply(d,m);return Qe(),Jt(),S}const Er=cr("__proto__,__v_isRef,__isVue"),Ti=new Set(Object.getOwnPropertyNames(Symbol).filter(d=>d!=="arguments"&&d!=="caller").map(d=>Symbol[d]).filter(ue));function Pr(d){ue(d)||(d=String(d));const o=at(this);return _t(o,"has",d),o.hasOwnProperty(d)}class Oi{constructor(o=!1,m=!1){this._isReadonly=o,this._isShallow=m}get(o,m,S){if(m==="__v_skip")return o.__v_skip;const b=this._isReadonly,T=this._isShallow;if(m==="__v_isReactive")return!b;if(m==="__v_isReadonly")return b;if(m==="__v_isShallow")return T;if(m==="__v_raw")return S===(b?T?Br:Di:T?jr:Pi).get(o)||Object.getPrototypeOf(o)===Object.getPrototypeOf(S)?o:void 0;const F=dt(o);if(!b){let n;if(F&&(n=Tr[m]))return n;if(m==="hasOwnProperty")return Pr}const u=Reflect.get(o,m,St(o)?o:S);if((ue(m)?Ti.has(m):Er(m))||(b||_t(o,"get",m),T))return u;if(St(u)){const n=F&&qe(m)?u:u.value;return b&&yt(n)?oe(n):n}return yt(u)?b?oe(u):Ai(u):u}}class Dr extends Oi{constructor(o=!1){super(!1,o)}set(o,m,S,b){let T=o[m];const F=dt(o)&&qe(m);if(!this._isShallow){const l=Ot(T);if(!Ct(S)&&!Ot(S)&&(T=at(T),S=at(S)),!F&&St(T)&&!St(S))return l?(process.env.NODE_ENV!=="production"&&Tt(`Set operation on key "${String(m)}" failed: target is readonly.`,o[m]),!0):(T.value=S,!0)}const u=F?Number(m)<o.length:We(o,m),n=Reflect.set(o,m,S,St(o)?o:b);return o===at(b)&&(u?Lt(S,T)&&Ft(o,"set",m,S,T):Ft(o,"add",m,S)),n}deleteProperty(o,m){const S=We(o,m),b=o[m],T=Reflect.deleteProperty(o,m);return T&&S&&Ft(o,"delete",m,void 0,b),T}has(o,m){const S=Reflect.has(o,m);return(!ue(m)||!Ti.has(m))&&_t(o,"has",m),S}ownKeys(o){return _t(o,"iterate",dt(o)?"length":Xt),Reflect.ownKeys(o)}}class Ar extends Oi{constructor(o=!1){super(!0,o)}set(o,m){return process.env.NODE_ENV!=="production"&&Tt(`Set operation on key "${String(m)}" failed: target is readonly.`,o),!0}deleteProperty(o,m){return process.env.NODE_ENV!=="production"&&Tt(`Delete operation on key "${String(m)}" failed: target is readonly.`,o),!0}}const kr=new Dr,Mr=new Ar,ze=d=>d,me=d=>Reflect.getPrototypeOf(d);function Fr(d,o,m){return function(...S){const b=this.__v_raw,T=at(b),F=Ut(T),u=d==="entries"||d===Symbol.iterator&&F,n=d==="keys"&&F,l=b[d](...S),a=m?ze:o?ae:At;return!o&&_t(T,"iterate",n?He:Xt),{next(){const{value:t,done:i}=l.next();return i?{value:t,done:i}:{value:u?[a(t[0]),a(t[1])]:a(t),done:i}},[Symbol.iterator](){return this}}}}function ve(d){return function(...o){if(process.env.NODE_ENV!=="production"){const m=o[0]?`on key "${o[0]}" `:"";Tt(`${vi(d)} operation ${m}failed: target is readonly.`,at(this))}return d==="delete"?!1:d==="clear"?void 0:this}}function Ir(d,o){const m={get(b){const T=this.__v_raw,F=at(T),u=at(b);d||(Lt(b,u)&&_t(F,"get",b),_t(F,"get",u));const{has:n}=me(F),l=o?ze:d?ae:At;if(n.call(F,b))return l(T.get(b));if(n.call(F,u))return l(T.get(u));T!==F&&T.get(b)},get size(){const b=this.__v_raw;return!d&&_t(at(b),"iterate",Xt),b.size},has(b){const T=this.__v_raw,F=at(T),u=at(b);return d||(Lt(b,u)&&_t(F,"has",b),_t(F,"has",u)),b===u?T.has(b):T.has(b)||T.has(u)},forEach(b,T){const F=this,u=F.__v_raw,n=at(u),l=o?ze:d?ae:At;return!d&&_t(n,"iterate",Xt),u.forEach((a,t)=>b.call(T,l(a),l(t),F))}};return Rt(m,d?{add:ve("add"),set:ve("set"),delete:ve("delete"),clear:ve("clear")}:{add(b){!o&&!Ct(b)&&!Ot(b)&&(b=at(b));const T=at(this);return me(T).has.call(T,b)||(T.add(b),Ft(T,"add",b,b)),this},set(b,T){!o&&!Ct(T)&&!Ot(T)&&(T=at(T));const F=at(this),{has:u,get:n}=me(F);let l=u.call(F,b);l?process.env.NODE_ENV!=="production"&&ui(F,u,b):(b=at(b),l=u.call(F,b));const a=n.call(F,b);return F.set(b,T),l?Lt(T,a)&&Ft(F,"set",b,T,a):Ft(F,"add",b,T),this},delete(b){const T=at(this),{has:F,get:u}=me(T);let n=F.call(T,b);n?process.env.NODE_ENV!=="production"&&ui(T,F,b):(b=at(b),n=F.call(T,b));const l=u?u.call(T,b):void 0,a=T.delete(b);return n&&Ft(T,"delete",b,void 0,l),a},clear(){const b=at(this),T=b.size!==0,F=process.env.NODE_ENV!=="production"?Ut(b)?new Map(b):new Set(b):void 0,u=b.clear();return T&&Ft(b,"clear",void 0,void 0,F),u}}),["keys","values","entries",Symbol.iterator].forEach(b=>{m[b]=Fr(b,d,o)}),m}function Ei(d,o){const m=Ir(d,o);return(S,b,T)=>b==="__v_isReactive"?!d:b==="__v_isReadonly"?d:b==="__v_raw"?S:Reflect.get(We(m,b)&&b in S?m:S,b,T)}const Lr={get:Ei(!1,!1)},Rr={get:Ei(!0,!1)};function ui(d,o,m){const S=at(m);if(S!==m&&o.call(d,S)){const b=pi(d);Tt(`Reactive ${b} contains both the raw and reactive versions of the same object${b==="Map"?" as keys":""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}const Pi=new WeakMap,jr=new WeakMap,Di=new WeakMap,Br=new WeakMap;function Nr(d){switch(d){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Xr(d){return d.__v_skip||!Object.isExtensible(d)?0:Nr(pi(d))}function Ai(d){return Ot(d)?d:ki(d,!1,kr,Lr,Pi)}function oe(d){return ki(d,!0,Mr,Rr,Di)}function ki(d,o,m,S,b){if(!yt(d))return process.env.NODE_ENV!=="production"&&Tt(`value cannot be made ${o?"readonly":"reactive"}: ${String(d)}`),d;if(d.__v_raw&&!(o&&d.__v_isReactive))return d;const T=Xr(d);if(T===0)return d;const F=b.get(d);if(F)return F;const u=new Proxy(d,T===2?S:m);return b.set(d,u),u}function Gt(d){return Ot(d)?Gt(d.__v_raw):!!(d&&d.__v_isReactive)}function Ot(d){return!!(d&&d.__v_isReadonly)}function Ct(d){return!!(d&&d.__v_isShallow)}function Se(d){return d?!!d.__v_raw:!1}function at(d){const o=d&&d.__v_raw;return o?at(o):d}const At=d=>yt(d)?Ai(d):d,ae=d=>yt(d)?oe(d):d;function St(d){return d?d.__v_isRef===!0:!1}function jt(d){return Wr(d,!1)}function Wr(d,o){return St(d)?d:new Vr(d,o)}class Vr{constructor(o,m){this.dep=new ti,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=m?o:at(o),this._value=m?o:At(o),this.__v_isShallow=m}get value(){return process.env.NODE_ENV!=="production"?this.dep.track({target:this,type:"get",key:"value"}):this.dep.track(),this._value}set value(o){const m=this._rawValue,S=this.__v_isShallow||Ct(o)||Ot(o);o=S?o:at(o),Lt(o,m)&&(this._rawValue=o,this._value=S?o:At(o),process.env.NODE_ENV!=="production"?this.dep.trigger({target:this,type:"set",key:"value",newValue:o,oldValue:m}):this.dep.trigger())}}function Yr(d){return St(d)?d.value:d}class Hr{constructor(o,m,S){this.fn=o,this.setter=m,this._value=void 0,this.dep=new ti(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=ne-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!m,this.isSSR=S}notify(){if(this.flags|=16,!(this.flags&8)&&ht!==this)return yi(this,!0),!0;process.env.NODE_ENV}get value(){const o=process.env.NODE_ENV!=="production"?this.dep.track({target:this,type:"get",key:"value"}):this.dep.track();return bi(this),o&&(o.version=this.dep.version),this._value}set value(o){this.setter?this.setter(o):process.env.NODE_ENV!=="production"&&Tt("Write operation failed: computed value is readonly")}}function zr(d,o,m=!1){let S,b;mt(d)?S=d:(S=d.get,b=d.set);const T=new Hr(S,b,m);return process.env.NODE_ENV,T}const _e={},be=new WeakMap;let Nt;function Ur(d,o=!1,m=Nt){if(m){let S=be.get(m);S||be.set(m,S=[]),S.push(d)}else process.env.NODE_ENV!=="production"&&!o&&Tt("onWatcherCleanup() was called when there was no active watcher to associate with.")}function Gr(d,o,m=re){const{immediate:S,deep:b,once:T,scheduler:F,augmentJob:u,call:n}=m,l=p=>{(m.onWarn||Tt)("Invalid watch source: ",p,"A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.")},a=p=>b?p:Ct(p)||b===!1||b===0?It(p,1):It(p);let t,i,e,s,h=!1,r=!1;if(St(d)?(i=()=>d.value,h=Ct(d)):Gt(d)?(i=()=>a(d),h=!0):dt(d)?(r=!0,h=d.some(p=>Gt(p)||Ct(p)),i=()=>d.map(p=>{if(St(p))return p.value;if(Gt(p))return a(p);if(mt(p))return n?n(p,2):p();process.env.NODE_ENV!=="production"&&l(p)})):mt(d)?o?i=n?()=>n(d,2):d:i=()=>{if(e){Kt();try{e()}finally{Jt()}}const p=Nt;Nt=t;try{return n?n(d,3,[s]):d(s)}finally{Nt=p}}:(i=zt,process.env.NODE_ENV!=="production"&&l(d)),o&&b){const p=i,v=b===!0?1/0:b;i=()=>It(p(),v)}const c=()=>{t.stop()};if(T&&o){const p=o;o=(...v)=>{p(...v),c()}}let f=r?new Array(d.length).fill(_e):_e;const g=p=>{if(!(!(t.flags&1)||!t.dirty&&!p))if(o){const v=t.run();if(b||h||(r?v.some((_,x)=>Lt(_,f[x])):Lt(v,f))){e&&e();const _=Nt;Nt=t;try{const x=[v,f===_e?void 0:r&&f[0]===_e?[]:f,s];f=v,n?n(o,3,x):o(...x)}finally{Nt=_}}}else t.run()};return u&&u(g),t=new br(i),t.scheduler=F?()=>F(g,!1):g,s=p=>Ur(p,!1,t),e=t.onStop=()=>{const p=be.get(t);if(p){if(n)n(p,4);else for(const v of p)v();be.delete(t)}},process.env.NODE_ENV!=="production"&&(t.onTrack=m.onTrack,t.onTrigger=m.onTrigger),o?S?g(!0):f=t.run():F?F(g.bind(null,!0),!0):t.run(),c.pause=t.pause.bind(t),c.resume=t.resume.bind(t),c.stop=c,c}function It(d,o=1/0,m){if(o<=0||!yt(d)||d.__v_skip||(m=m||new Map,(m.get(d)||0)>=o))return d;if(m.set(d,o),o--,St(d))It(d.value,o,m);else if(dt(d))for(let S=0;S<d.length;S++)It(d[S],o,m);else if(dr(d)||Ut(d))d.forEach(S=>{It(S,o,m)});else if(mr(d)){for(const S in d)It(d[S],o,m);for(const S of Object.getOwnPropertySymbols(d))Object.prototype.propertyIsEnumerable.call(d,S)&&It(d[S],o,m)}return d}const Wt=[];function qr(d){Wt.push(d)}function Kr(){Wt.pop()}let Ie=!1;function pt(d,...o){if(Ie)return;Ie=!0,Kt();const m=Wt.length?Wt[Wt.length-1].component:null,S=m&&m.appContext.config.warnHandler,b=Jr();if(S)De(S,m,11,[d+o.map(T=>{var F,u;return(u=(F=T.toString)==null?void 0:F.call(T))!=null?u:JSON.stringify(T)}).join(""),m&&m.proxy,b.map(({vnode:T})=>`at <${Gi(m,T.type)}>`).join(`
2
+ `),b]);else{const T=[`[Vue warn]: ${d}`,...o];b.length&&T.push(`
3
+ `,...$r(b)),console.warn(...T)}Jt(),Ie=!1}function Jr(){let d=Wt[Wt.length-1];if(!d)return[];const o=[];for(;d;){const m=o[0];m&&m.vnode===d?m.recurseCount++:o.push({vnode:d,recurseCount:0});const S=d.component&&d.component.parent;d=S&&S.vnode}return o}function $r(d){const o=[];return d.forEach((m,S)=>{o.push(...S===0?[]:[`
4
+ `],...Qr(m))}),o}function Qr({vnode:d,recurseCount:o}){const m=o>0?`... (${o} recursive calls)`:"",S=d.component?d.component.parent==null:!1,b=` at <${Gi(d.component,d.type,S)}`,T=">"+m;return d.props?[b,...Zr(d.props),T]:[b+T]}function Zr(d){const o=[],m=Object.keys(d);return m.slice(0,3).forEach(S=>{o.push(...Mi(S,d[S]))}),m.length>3&&o.push(" ..."),o}function Mi(d,o,m){return Dt(o)?(o=JSON.stringify(o),m?o:[`${d}=${o}`]):typeof o=="number"||typeof o=="boolean"||o==null?m?o:[`${d}=${o}`]:St(o)?(o=Mi(d,at(o.value),!0),m?o:[`${d}=Ref<`,o,">"]):mt(o)?[`${d}=fn${o.name?`<${o.name}>`:""}`]:(o=at(o),m?o:[`${d}=`,o])}const ii={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush",15:"component update",16:"app unmount cleanup function"};function De(d,o,m,S){try{return S?d(...S):d()}catch(b){ni(b,o,m)}}function ri(d,o,m,S){if(mt(d)){const b=De(d,o,m,S);return b&&gr(b)&&b.catch(T=>{ni(T,o,m)}),b}if(dt(d)){const b=[];for(let T=0;T<d.length;T++)b.push(ri(d[T],o,m,S));return b}else process.env.NODE_ENV!=="production"&&pt(`Invalid value type passed to callWithAsyncErrorHandling(): ${typeof d}`)}function ni(d,o,m,S=!0){const b=o?o.vnode:null,{errorHandler:T,throwUnhandledErrorInProduction:F}=o&&o.appContext.config||re;if(o){let u=o.parent;const n=o.proxy,l=process.env.NODE_ENV!=="production"?ii[m]:`https://vuejs.org/error-reference/#runtime-${m}`;for(;u;){const a=u.ec;if(a){for(let t=0;t<a.length;t++)if(a[t](d,n,l)===!1)return}u=u.parent}if(T){Kt(),De(T,null,10,[d,n,l]),Jt();return}}tn(d,m,b,S,F)}function tn(d,o,m,S=!0,b=!1){if(process.env.NODE_ENV!=="production"){const T=ii[o];if(m&&qr(m),pt(`Unhandled error${T?` during execution of ${T}`:""}`),m&&Kr(),S)throw d;console.error(d)}else{if(b)throw d;console.error(d)}}const bt=[];let Pt=-1;const qt=[];let Mt=null,Yt=0;const en=Promise.resolve();let Ue=null;const rn=100;function nn(d){let o=Pt+1,m=bt.length;for(;o<m;){const S=o+m>>>1,b=bt[S],T=le(b);T<d||T===d&&b.flags&2?o=S+1:m=S}return o}function Fi(d){if(!(d.flags&1)){const o=le(d),m=bt[bt.length-1];!m||!(d.flags&2)&&o>=le(m)?bt.push(d):bt.splice(nn(o),0,d),d.flags|=1,Ii()}}function Ii(){Ue||(Ue=en.then(Ri))}function Li(d){dt(d)?qt.push(...d):Mt&&d.id===-1?Mt.splice(Yt+1,0,d):d.flags&1||(qt.push(d),d.flags|=1),Ii()}function sn(d){if(qt.length){const o=[...new Set(qt)].sort((m,S)=>le(m)-le(S));if(qt.length=0,Mt){Mt.push(...o);return}for(Mt=o,process.env.NODE_ENV!=="production"&&(d=d||new Map),Yt=0;Yt<Mt.length;Yt++){const m=Mt[Yt];process.env.NODE_ENV!=="production"&&ji(d,m)||(m.flags&4&&(m.flags&=-2),m.flags&8||m(),m.flags&=-2)}Mt=null,Yt=0}}const le=d=>d.id==null?d.flags&2?-1:1/0:d.id;function Ri(d){process.env.NODE_ENV!=="production"&&(d=d||new Map);const o=process.env.NODE_ENV!=="production"?m=>ji(d,m):zt;try{for(Pt=0;Pt<bt.length;Pt++){const m=bt[Pt];if(m&&!(m.flags&8)){if(process.env.NODE_ENV!=="production"&&o(m))continue;m.flags&4&&(m.flags&=-2),De(m,m.i,m.i?15:14),m.flags&4||(m.flags&=-2)}}}finally{for(;Pt<bt.length;Pt++){const m=bt[Pt];m&&(m.flags&=-2)}Pt=-1,bt.length=0,sn(d),Ue=null,(bt.length||qt.length)&&Ri(d)}}function ji(d,o){const m=d.get(o)||0;if(m>rn){const S=o.i,b=S&&Ui(S.type);return ni(`Maximum recursive updates exceeded${b?` in component <${b}>`:""}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,null,10),!0}return d.set(o,m+1),!1}const Le=new Map;process.env.NODE_ENV!=="production"&&(Pe().__VUE_HMR_RUNTIME__={createRecord:Re(on),rerender:Re(an),reload:Re(ln)});const xe=new Map;function on(d,o){return xe.has(d)?!1:(xe.set(d,{initialDef:we(o),instances:new Set}),!0)}function we(d){return qi(d)?d.__vccOpts:d}function an(d,o){const m=xe.get(d);m&&(m.initialDef.render=o,[...m.instances].forEach(S=>{o&&(S.render=o,we(S.type).render=o),S.renderCache=[],S.job.flags&8||S.update()}))}function ln(d,o){const m=xe.get(d);if(!m)return;o=we(o),fi(m.initialDef,o);const S=[...m.instances];for(let b=0;b<S.length;b++){const T=S[b],F=we(T.type);let u=Le.get(F);u||(F!==m.initialDef&&fi(F,o),Le.set(F,u=new Set)),u.add(T),T.appContext.propsCache.delete(T.type),T.appContext.emitsCache.delete(T.type),T.appContext.optionsCache.delete(T.type),T.ceReload?(u.add(T),T.ceReload(o.styles),u.delete(T)):T.parent?Fi(()=>{T.job.flags&8||(T.parent.update(),u.delete(T))}):T.appContext.reload?T.appContext.reload():typeof window<"u"?window.location.reload():console.warn("[HMR] Root or manually mounted instance modified. Full reload required."),T.root.ce&&T!==T.root&&T.root.ce._removeChildStyle(F)}Li(()=>{Le.clear()})}function fi(d,o){Rt(d,o);for(const m in d)m!=="__file"&&!(m in o)&&delete d[m]}function Re(d){return(o,m)=>{try{return d(o,m)}catch(S){console.error(S),console.warn("[HMR] Something went wrong during Vue component hot-reload. Full reload required.")}}}let Ht,ye=[];function Bi(d,o){var m,S;Ht=d,Ht?(Ht.enabled=!0,ye.forEach(({event:b,args:T})=>Ht.emit(b,...T)),ye=[]):typeof window<"u"&&window.HTMLElement&&!((S=(m=window.navigator)==null?void 0:m.userAgent)!=null&&S.includes("jsdom"))?((o.__VUE_DEVTOOLS_HOOK_REPLAY__=o.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(T=>{Bi(T,o)}),setTimeout(()=>{Ht||(o.__VUE_DEVTOOLS_HOOK_REPLAY__=null,ye=[])},3e3)):ye=[]}let he=null,hn=null;const cn=d=>d.__isTeleport;function Ni(d,o){d.shapeFlag&6&&d.component?(d.transition=o,Ni(d.component.subTree,o)):d.shapeFlag&128?(d.ssContent.transition=o.clone(d.ssContent),d.ssFallback.transition=o.clone(d.ssFallback)):d.transition=o}Pe().requestIdleCallback;Pe().cancelIdleCallback;function un(d,o,m=$t,S=!1){if(m){const b=m[d]||(m[d]=[]),T=o.__weh||(o.__weh=(...F)=>{Kt();const u=In(m),n=ri(o,m,d,F);return u(),Jt(),n});return S?b.unshift(T):b.push(T),T}else if(process.env.NODE_ENV!=="production"){const b=vr(ii[d].replace(/ hook$/,""));pt(`${b} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup(). If you are using async setup(), make sure to register lifecycle hooks before the first await statement.`)}}const fn=d=>(o,m=$t)=>{(!ce||d==="sp")&&un(d,(...S)=>o(...S),m)},dn=fn("m"),gn=Symbol.for("v-ndc"),pn={};process.env.NODE_ENV!=="production"&&(pn.ownKeys=d=>(pt("Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead."),Reflect.ownKeys(d)));let mn=null;function vn(d,o,m=!1){const S=oi();if(S||mn){let b=S?S.parent==null||S.ce?S.vnode.appContext&&S.vnode.appContext.provides:S.parent.provides:void 0;if(b&&d in b)return b[d];if(arguments.length>1)return m&&mt(o)?o.call(S&&S.proxy):o;process.env.NODE_ENV!=="production"&&pt(`injection "${String(d)}" not found.`)}else process.env.NODE_ENV!=="production"&&pt("inject() can only be used inside setup() or functional components.")}const _n=Symbol.for("v-scx"),yn=()=>{{const d=vn(_n);return d||process.env.NODE_ENV!=="production"&&pt("Server rendering context not provided. Make sure to only call useSSRContext() conditionally in the server build."),d}};function Xi(d,o,m){return process.env.NODE_ENV!=="production"&&!mt(o)&&pt("`watch(fn, options?)` signature has been moved to a separate API. Use `watchEffect(fn, options?)` instead. `watch` now only supports `watch(source, cb, options?) signature."),Cn(d,o,m)}function Cn(d,o,m=re){const{immediate:S,deep:b,flush:T,once:F}=m;process.env.NODE_ENV!=="production"&&!o&&(S!==void 0&&pt('watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.'),b!==void 0&&pt('watch() "deep" option is only respected when using the watch(source, callback, options?) signature.'),F!==void 0&&pt('watch() "once" option is only respected when using the watch(source, callback, options?) signature.'));const u=Rt({},m);process.env.NODE_ENV!=="production"&&(u.onWarn=pt);const n=o&&S||!o&&T!=="post";let l;if(ce){if(T==="sync"){const e=yn();l=e.__watcherHandles||(e.__watcherHandles=[])}else if(!n){const e=()=>{};return e.stop=zt,e.resume=zt,e.pause=zt,e}}const a=$t;u.call=(e,s,h)=>ri(e,a,s,h);let t=!1;T==="post"?u.scheduler=e=>{bn(e,a&&a.suspense)}:T!=="sync"&&(t=!0,u.scheduler=(e,s)=>{s?e():Fi(e)}),u.augmentJob=e=>{o&&(e.flags|=4),t&&(e.flags|=2,a&&(e.id=a.uid,e.i=a))};const i=Gr(d,o,u);return ce&&(l?l.push(i):n&&i()),i}const Sn={},Wi=d=>Object.getPrototypeOf(d)===Sn,bn=wn,xn=d=>d.__isSuspense;function wn(d,o){o&&o.pendingBranch?dt(d)?o.effects.push(...d):o.effects.push(d):Li(d)}const Vi=Symbol.for("v-fgt"),Tn=Symbol.for("v-txt"),On=Symbol.for("v-cmt");function En(d){return d?d.__v_isVNode===!0:!1}const Pn=(...d)=>Hi(...d),Yi=({key:d})=>d??null,Ce=({ref:d,ref_key:o,ref_for:m})=>(typeof d=="number"&&(d=""+d),d!=null?Dt(d)||St(d)||mt(d)?{i:he,r:d,k:o,f:!!m}:d:null);function Dn(d,o=null,m=null,S=0,b=null,T=d===Vi?0:1,F=!1,u=!1){const n={__v_isVNode:!0,__v_skip:!0,type:d,props:o,key:o&&Yi(o),ref:o&&Ce(o),scopeId:hn,slotScopeIds:null,children:m,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:T,patchFlag:S,dynamicProps:b,dynamicChildren:null,appContext:null,ctx:he};return u?(si(n,m),T&128&&d.normalize(n)):m&&(n.shapeFlag|=Dt(m)?8:16),process.env.NODE_ENV!=="production"&&n.key!==n.key&&pt("VNode created with invalid key (NaN). VNode type:",n.type),n}const An=process.env.NODE_ENV!=="production"?Pn:Hi;function Hi(d,o=null,m=null,S=0,b=null,T=!1){if((!d||d===gn)&&(process.env.NODE_ENV!=="production"&&!d&&pt(`Invalid vnode type when creating vnode: ${d}.`),d=On),En(d)){const u=Te(d,o,!0);return m&&si(u,m),u.patchFlag=-2,u}if(qi(d)&&(d=d.__vccOpts),o){o=kn(o);let{class:u,style:n}=o;u&&!Dt(u)&&(o.class=Je(u)),yt(n)&&(Se(n)&&!dt(n)&&(n=Rt({},n)),o.style=Ke(n))}const F=Dt(d)?1:xn(d)?128:cn(d)?64:yt(d)?4:mt(d)?2:0;return process.env.NODE_ENV!=="production"&&F&4&&Se(d)&&(d=at(d),pt("Vue received a Component that was made a reactive object. This can lead to unnecessary performance overhead and should be avoided by marking the component with `markRaw` or using `shallowRef` instead of `ref`.",`
5
+ Component that was made reactive: `,d)),Dn(d,o,m,S,b,F,T,!0)}function kn(d){return d?Se(d)||Wi(d)?Rt({},d):d:null}function Te(d,o,m=!1,S=!1){const{props:b,ref:T,patchFlag:F,children:u,transition:n}=d,l=o?Fn(b||{},o):b,a={__v_isVNode:!0,__v_skip:!0,type:d.type,props:l,key:l&&Yi(l),ref:o&&o.ref?m&&T?dt(T)?T.concat(Ce(o)):[T,Ce(o)]:Ce(o):T,scopeId:d.scopeId,slotScopeIds:d.slotScopeIds,children:process.env.NODE_ENV!=="production"&&F===-1&&dt(u)?u.map(zi):u,target:d.target,targetStart:d.targetStart,targetAnchor:d.targetAnchor,staticCount:d.staticCount,shapeFlag:d.shapeFlag,patchFlag:o&&d.type!==Vi?F===-1?16:F|16:F,dynamicProps:d.dynamicProps,dynamicChildren:d.dynamicChildren,appContext:d.appContext,dirs:d.dirs,transition:n,component:d.component,suspense:d.suspense,ssContent:d.ssContent&&Te(d.ssContent),ssFallback:d.ssFallback&&Te(d.ssFallback),placeholder:d.placeholder,el:d.el,anchor:d.anchor,ctx:d.ctx,ce:d.ce};return n&&S&&Ni(a,n.clone(a)),a}function zi(d){const o=Te(d);return dt(d.children)&&(o.children=d.children.map(zi)),o}function Mn(d=" ",o=0){return An(Tn,null,d,o)}function si(d,o){let m=0;const{shapeFlag:S}=d;if(o==null)o=null;else if(dt(o))m=16;else if(typeof o=="object")if(S&65){const b=o.default;b&&(b._c&&(b._d=!1),si(d,b()),b._c&&(b._d=!0));return}else m=32,!o._&&!Wi(o)&&(o._ctx=he);else mt(o)?(o={default:o,_ctx:he},m=32):(o=String(o),S&64?(m=16,o=[Mn(o)]):m=8);d.children=o,d.shapeFlag|=m}function Fn(...d){const o={};for(let m=0;m<d.length;m++){const S=d[m];for(const b in S)if(b==="class")o.class!==S.class&&(o.class=Je([o.class,S.class]));else if(b==="style")o.style=Ke([o.style,S.style]);else if(ur(b)){const T=o[b],F=S[b];F&&T!==F&&!(dt(T)&&T.includes(F))&&(o[b]=T?[].concat(T,F):F)}else b!==""&&(o[b]=S[b])}return o}let $t=null;const oi=()=>$t||he;let Ge;{const d=Pe(),o=(m,S)=>{let b;return(b=d[m])||(b=d[m]=[]),b.push(S),T=>{b.length>1?b.forEach(F=>F(T)):b[0](T)}};Ge=o("__VUE_INSTANCE_SETTERS__",m=>$t=m),o("__VUE_SSR_SETTERS__",m=>ce=m)}const In=d=>{const o=$t;return Ge(d),d.scope.on(),()=>{d.scope.off(),Ge(o)}};let ce=!1;process.env.NODE_ENV;const Ln=/(?:^|[-_])\w/g,Rn=d=>d.replace(Ln,o=>o.toUpperCase()).replace(/[-_]/g,"");function Ui(d,o=!0){return mt(d)?d.displayName||d.name:d.name||o&&d.__name}function Gi(d,o,m=!1){let S=Ui(o);if(!S&&o.__file){const b=o.__file.match(/([^/\\]+)\.\w+$/);b&&(S=b[1])}if(!S&&d){const b=T=>{for(const F in T)if(T[F]===o)return F};S=b(d.components)||d.parent&&b(d.parent.type.components)||b(d.appContext.components)}return S?Rn(S):m?"App":"Anonymous"}function qi(d){return mt(d)&&"__vccOpts"in d}const Ki=(d,o)=>{const m=zr(d,o,ce);if(process.env.NODE_ENV!=="production"){const S=oi();S&&S.appContext.config.warnRecursiveComputed&&(m._warnRecursive=!0)}return m};function jn(){if(process.env.NODE_ENV==="production"||typeof window>"u")return;const d={style:"color:#3ba776"},o={style:"color:#1677ff"},m={style:"color:#f5222d"},S={style:"color:#eb2f96"},b={__vue_custom_formatter:!0,header(t){if(!yt(t))return null;if(t.__isVue)return["div",d,"VueInstance"];if(St(t)){Kt();const i=t.value;return Jt(),["div",{},["span",d,a(t)],"<",u(i),">"]}else{if(Gt(t))return["div",{},["span",d,Ct(t)?"ShallowReactive":"Reactive"],"<",u(t),`>${Ot(t)?" (readonly)":""}`];if(Ot(t))return["div",{},["span",d,Ct(t)?"ShallowReadonly":"Readonly"],"<",u(t),">"]}return null},hasBody(t){return t&&t.__isVue},body(t){if(t&&t.__isVue)return["div",{},...T(t.$)]}};function T(t){const i=[];t.type.props&&t.props&&i.push(F("props",at(t.props))),t.setupState!==re&&i.push(F("setup",t.setupState)),t.data!==re&&i.push(F("data",at(t.data)));const e=n(t,"computed");e&&i.push(F("computed",e));const s=n(t,"inject");return s&&i.push(F("injected",s)),i.push(["div",{},["span",{style:S.style+";opacity:0.66"},"$ (internal): "],["object",{object:t}]]),i}function F(t,i){return i=Rt({},i),Object.keys(i).length?["div",{style:"line-height:1.25em;margin-bottom:0.6em"},["div",{style:"color:#476582"},t],["div",{style:"padding-left:1.25em"},...Object.keys(i).map(e=>["div",{},["span",S,e+": "],u(i[e],!1)])]]:["span",{}]}function u(t,i=!0){return typeof t=="number"?["span",o,t]:typeof t=="string"?["span",m,JSON.stringify(t)]:typeof t=="boolean"?["span",S,t]:yt(t)?["object",{object:i?at(t):t}]:["span",m,String(t)]}function n(t,i){const e=t.type;if(mt(e))return;const s={};for(const h in t.ctx)l(e,h,i)&&(s[h]=t.ctx[h]);return s}function l(t,i,e){const s=t[e];if(dt(s)&&s.includes(i)||yt(s)&&i in s||t.extends&&l(t.extends,i,e)||t.mixins&&t.mixins.some(h=>l(h,i,e)))return!0}function a(t){return Ct(t)?"ShallowRef":t.effect?"ComputedRef":"Ref"}window.devtoolsFormatters?window.devtoolsFormatters.push(b):window.devtoolsFormatters=[b]}process.env.NODE_ENV;process.env.NODE_ENV;process.env.NODE_ENV;function Bn(){jn()}process.env.NODE_ENV!=="production"&&Bn();function Nn(){const d=new Set,o=b=>{d.delete(b)};return{on:b=>(d.add(b),{off:()=>o(b)}),off:o,trigger:(...b)=>Promise.all(Array.from(d).map(T=>T(...b)))}}function fe(d){return typeof d=="function"?d():Yr(d)}const de=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Xn=Object.prototype.toString,Wn=d=>Xn.call(d)==="[object Object]",Vn=()=>{},Yn=(d,o)=>Object.prototype.hasOwnProperty.call(d,o);function Hn(d){let o;function m(){return o||(o=d()),o}return m.reset=async()=>{const S=o;o=void 0,S&&await S},m}function zn(d,o,m={}){const{immediate:S=!0}=m,b=jt(!1);let T=null;function F(){T&&(clearTimeout(T),T=null)}function u(){b.value=!1,F()}function n(...l){F(),b.value=!0,T=setTimeout(()=>{b.value=!1,T=null,d(...l)},fe(o))}return S&&(b.value=!0,de&&n()),{isPending:oe(b),start:n,stop:u}}function Un(d){var o;const m=fe(d);return(o=m?.$el)!=null?o:m}const Gn=de?window:void 0,qn=de?window.document:void 0,Ji=de?window.navigator:void 0;function $i(...d){let o,m,S,b;if(typeof d[0]=="string"||Array.isArray(d[0])?([m,S,b]=d,o=Gn):[o,m,S,b]=d,!o)return Vn;Array.isArray(m)||(m=[m]),Array.isArray(S)||(S=[S]);const T=[],F=()=>{T.forEach(a=>a()),T.length=0},u=(a,t,i,e)=>(a.addEventListener(t,i,e),()=>a.removeEventListener(t,i,e)),n=Xi(()=>[Un(o),fe(b)],([a,t])=>{if(F(),!a)return;const i=Wn(t)?{...t}:t;T.push(...m.flatMap(e=>S.map(s=>u(a,e,s,i))))},{immediate:!0,flush:"post"});return()=>{n(),F()}}function Kn(){const d=jt(!1),o=oi();return o&&dn(()=>{d.value=!0},o),d}function Qi(d){const o=Kn();return Ki(()=>(o.value,!!d()))}const te={array:d=>JSON.stringify(d),object:d=>JSON.stringify(d),set:d=>JSON.stringify(Array.from(d)),map:d=>JSON.stringify(Object.fromEntries(d)),null:()=>""};function Jn(d){return d?d instanceof Map?te.map:d instanceof Set?te.set:Array.isArray(d)?te.array:te.object:te.null}function $n(d,o){const m=jt(""),S=jt();function b(){if(de)return S.value=new Promise((T,F)=>{try{const u=fe(d);if(u==null)T("");else if(typeof u=="string")T(je(new Blob([u],{type:"text/plain"})));else if(u instanceof Blob)T(je(u));else if(u instanceof ArrayBuffer)T(window.btoa(String.fromCharCode(...new Uint8Array(u))));else if(u instanceof HTMLCanvasElement)T(u.toDataURL(o?.type,o?.quality));else if(u instanceof HTMLImageElement){const n=u.cloneNode(!1);n.crossOrigin="Anonymous",Qn(n).then(()=>{const l=document.createElement("canvas"),a=l.getContext("2d");l.width=n.width,l.height=n.height,a.drawImage(n,0,0,l.width,l.height),T(l.toDataURL(o?.type,o?.quality))}).catch(F)}else if(typeof u=="object"){const l=(o?.serializer||Jn(u))(u);return T(je(new Blob([l],{type:"application/json"})))}else F(new Error("target is unsupported types"))}catch(u){F(u)}}),S.value.then(T=>m.value=T),S.value}return St(d)||typeof d=="function"?Xi(d,b,{immediate:!0}):b(),{base64:m,promise:S,execute:b}}function Qn(d){return new Promise((o,m)=>{d.complete?o():(d.onload=()=>{o()},d.onerror=m)})}function je(d){return new Promise((o,m)=>{const S=new FileReader;S.onload=b=>{o(b.target.result)},S.onerror=m,S.readAsDataURL(d)})}function di(d,o={}){const{controls:m=!1,navigator:S=Ji}=o,b=Qi(()=>S&&"permissions"in S);let T;const F=typeof d=="string"?{name:d}:d,u=jt(),n=()=>{T&&(u.value=T.state)},l=Hn(async()=>{if(b.value){if(!T)try{T=await S.permissions.query(F),$i(T,"change",n),n()}catch{u.value="prompt"}return T}});return l(),m?{state:u,isSupported:b,query:l}:u}function Zn(d={}){const{navigator:o=Ji,read:m=!1,source:S,copiedDuring:b=1500,legacy:T=!1}=d,F=Qi(()=>o&&"clipboard"in o),u=di("clipboard-read"),n=di("clipboard-write"),l=Ki(()=>F.value||T),a=jt(""),t=jt(!1),i=zn(()=>t.value=!1,b);function e(){F.value&&c(u.value)?o.clipboard.readText().then(f=>{a.value=f}):a.value=r()}l.value&&m&&$i(["copy","cut"],e);async function s(f=fe(S)){l.value&&f!=null&&(F.value&&c(n.value)?await o.clipboard.writeText(f):h(f),a.value=f,t.value=!0,i.start())}function h(f){const g=document.createElement("textarea");g.value=f??"",g.style.position="absolute",g.style.opacity="0",document.body.appendChild(g),g.select(),document.execCommand("copy"),g.remove()}function r(){var f,g,p;return(p=(g=(f=document?.getSelection)==null?void 0:f.call(document))==null?void 0:g.toString())!=null?p:""}function c(f){return f==="granted"||f==="prompt"}return{isSupported:l,text:a,copied:t,copy:s}}const ts={multiple:!0,accept:"*",reset:!1,directory:!1};function es(d={}){const{document:o=qn}=d,m=jt(null),{on:S,trigger:b}=Nn();let T;o&&(T=o.createElement("input"),T.type="file",T.onchange=n=>{const l=n.target;m.value=l.files,b(m.value)});const F=()=>{m.value=null,T&&T.value&&(T.value="",b(null))},u=n=>{if(!T)return;const l={...ts,...d,...n};T.multiple=l.multiple,T.accept=l.accept,T.webkitdirectory=l.directory,Yn(l,"capture")&&(T.capture=l.capture),l.reset&&F(),T.click()};return{files:oe(m),open:u,reset:F,onChange:S}}function is(d){if(Object.prototype.hasOwnProperty.call(d,"__esModule"))return d;var o=d.default;if(typeof o=="function"){var m=function S(){var b=!1;try{b=this instanceof S}catch{}return b?Reflect.construct(o,arguments,this.constructor):o.apply(this,arguments)};m.prototype=o.prototype}else m={};return Object.defineProperty(m,"__esModule",{value:!0}),Object.keys(d).forEach(function(S){var b=Object.getOwnPropertyDescriptor(d,S);Object.defineProperty(m,S,b.get?b:{enumerable:!0,get:function(){return d[S]}})}),m}var Be={};const rs={},ns=Object.freeze(Object.defineProperty({__proto__:null,default:rs},Symbol.toStringTag,{value:"Module"})),Ne=is(ns);var gi;function ss(){return gi||(gi=1,(function(d){var o=o||{version:"5.3.0"};if(d.fabric=o,typeof document<"u"&&typeof window<"u")document instanceof(typeof HTMLDocument<"u"?HTMLDocument:Document)?o.document=document:o.document=document.implementation.createHTMLDocument(""),o.window=window;else{var m=Ne,S=new m.JSDOM(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window;o.document=S.document,o.jsdomImplForWrapper=Ne.implForWrapper,o.nodeCanvas=Ne.Canvas,o.window=S,DOMParser=o.window.DOMParser}o.isTouchSupported="ontouchstart"in o.window||"ontouchstart"in o.document||o.window&&o.window.navigator&&o.window.navigator.maxTouchPoints>0,o.isLikelyNode=typeof Buffer<"u"&&typeof window>"u",o.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"],o.DPI=96,o.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",o.commaWsp="(?:\\s+,?\\s*|,\\s*)",o.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/ig,o.reNonWord=/[ \n\.,;!\?\-]/,o.fontPaths={},o.iMatrix=[1,0,0,1,0,0],o.svgNS="http://www.w3.org/2000/svg",o.perfLimitSizeTotal=2097152,o.maxCacheSideLimit=4096,o.minCacheSideLimit=256,o.charWidthsCache={},o.textureSize=2048,o.disableStyleCopyPaste=!1,o.enableGLFiltering=!0,o.devicePixelRatio=o.window.devicePixelRatio||o.window.webkitDevicePixelRatio||o.window.mozDevicePixelRatio||1,o.browserShadowBlurConstant=1,o.arcToSegmentsCache={},o.boundsOfCurveCache={},o.cachesBoundsOfCurve=!0,o.forceGLPutImageData=!1,o.initFilterBackend=function(){if(o.enableGLFiltering&&o.isWebglSupported&&o.isWebglSupported(o.textureSize))return console.log("max texture size: "+o.maxTextureSize),new o.WebglFilterBackend({tileSize:o.textureSize});if(o.Canvas2dFilterBackend)return new o.Canvas2dFilterBackend},typeof document<"u"&&typeof window<"u"&&(window.fabric=o),(function(){function u(e,s){if(this.__eventListeners[e]){var h=this.__eventListeners[e];s?h[h.indexOf(s)]=!1:o.util.array.fill(h,!1)}}function n(e,s){if(this.__eventListeners||(this.__eventListeners={}),arguments.length===1)for(var h in e)this.on(h,e[h]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(s);return this}function l(e,s){var h=(function(){s.apply(this,arguments),this.off(e,h)}).bind(this);this.on(e,h)}function a(e,s){if(arguments.length===1)for(var h in e)l.call(this,h,e[h]);else l.call(this,e,s);return this}function t(e,s){if(!this.__eventListeners)return this;if(arguments.length===0)for(e in this.__eventListeners)u.call(this,e);else if(arguments.length===1&&typeof arguments[0]=="object")for(var h in e)u.call(this,h,e[h]);else u.call(this,e,s);return this}function i(e,s){if(!this.__eventListeners)return this;var h=this.__eventListeners[e];if(!h)return this;for(var r=0,c=h.length;r<c;r++)h[r]&&h[r].call(this,s||{});return this.__eventListeners[e]=h.filter(function(f){return f!==!1}),this}o.Observable={fire:i,on:n,once:a,off:t}})(),o.Collection={_objects:[],add:function(){if(this._objects.push.apply(this._objects,arguments),this._onObjectAdded)for(var u=0,n=arguments.length;u<n;u++)this._onObjectAdded(arguments[u]);return this.renderOnAddRemove&&this.requestRenderAll(),this},insertAt:function(u,n,l){var a=this._objects;return l?a[n]=u:a.splice(n,0,u),this._onObjectAdded&&this._onObjectAdded(u),this.renderOnAddRemove&&this.requestRenderAll(),this},remove:function(){for(var u=this._objects,n,l=!1,a=0,t=arguments.length;a<t;a++)n=u.indexOf(arguments[a]),n!==-1&&(l=!0,u.splice(n,1),this._onObjectRemoved&&this._onObjectRemoved(arguments[a]));return this.renderOnAddRemove&&l&&this.requestRenderAll(),this},forEachObject:function(u,n){for(var l=this.getObjects(),a=0,t=l.length;a<t;a++)u.call(n,l[a],a,l);return this},getObjects:function(u){return typeof u>"u"?this._objects.concat():this._objects.filter(function(n){return n.type===u})},item:function(u){return this._objects[u]},isEmpty:function(){return this._objects.length===0},size:function(){return this._objects.length},contains:function(u,n){return this._objects.indexOf(u)>-1?!0:n?this._objects.some(function(l){return typeof l.contains=="function"&&l.contains(u,!0)}):!1},complexity:function(){return this._objects.reduce(function(u,n){return u+=n.complexity?n.complexity():0,u},0)}},o.CommonMethods={_setOptions:function(u){for(var n in u)this.set(n,u[n])},_initGradient:function(u,n){u&&u.colorStops&&!(u instanceof o.Gradient)&&this.set(n,new o.Gradient(u))},_initPattern:function(u,n,l){u&&u.source&&!(u instanceof o.Pattern)?this.set(n,new o.Pattern(u,l)):l&&l()},_setObject:function(u){for(var n in u)this._set(n,u[n])},set:function(u,n){return typeof u=="object"?this._setObject(u):this._set(u,n),this},_set:function(u,n){this[u]=n},toggle:function(u){var n=this.get(u);return typeof n=="boolean"&&this.set(u,!n),this},get:function(u){return this[u]}},(function(u){var n=Math.sqrt,l=Math.atan2,a=Math.pow,t=Math.PI/180,i=Math.PI/2;o.util={cos:function(e){if(e===0)return 1;e<0&&(e=-e);var s=e/i;switch(s){case 1:case 3:return 0;case 2:return-1}return Math.cos(e)},sin:function(e){if(e===0)return 0;var s=e/i,h=1;switch(e<0&&(h=-1),s){case 1:return h;case 2:return 0;case 3:return-h}return Math.sin(e)},removeFromArray:function(e,s){var h=e.indexOf(s);return h!==-1&&e.splice(h,1),e},getRandomInt:function(e,s){return Math.floor(Math.random()*(s-e+1))+e},degreesToRadians:function(e){return e*t},radiansToDegrees:function(e){return e/t},rotatePoint:function(e,s,h){var r=new o.Point(e.x-s.x,e.y-s.y),c=o.util.rotateVector(r,h);return new o.Point(c.x,c.y).addEquals(s)},rotateVector:function(e,s){var h=o.util.sin(s),r=o.util.cos(s),c=e.x*r-e.y*h,f=e.x*h+e.y*r;return{x:c,y:f}},createVector:function(e,s){return new o.Point(s.x-e.x,s.y-e.y)},calcAngleBetweenVectors:function(e,s){return Math.acos((e.x*s.x+e.y*s.y)/(Math.hypot(e.x,e.y)*Math.hypot(s.x,s.y)))},getHatVector:function(e){return new o.Point(e.x,e.y).multiply(1/Math.hypot(e.x,e.y))},getBisector:function(e,s,h){var r=o.util.createVector(e,s),c=o.util.createVector(e,h),f=o.util.calcAngleBetweenVectors(r,c),g=o.util.calcAngleBetweenVectors(o.util.rotateVector(r,f),c),p=f*(g===0?1:-1)/2;return{vector:o.util.getHatVector(o.util.rotateVector(r,p)),angle:f}},projectStrokeOnPoints:function(e,s,h){var r=[],c=s.strokeWidth/2,f=s.strokeUniform?new o.Point(1/s.scaleX,1/s.scaleY):new o.Point(1,1),g=function(p){var v=c/Math.hypot(p.x,p.y);return new o.Point(p.x*v*f.x,p.y*v*f.y)};return e.length<=1||e.forEach(function(p,v){var _=new o.Point(p.x,p.y),x,D;v===0?(D=e[v+1],x=h?g(o.util.createVector(D,_)).addEquals(_):e[e.length-1]):v===e.length-1?(x=e[v-1],D=h?g(o.util.createVector(x,_)).addEquals(_):e[0]):(x=e[v-1],D=e[v+1]);var B=o.util.getBisector(_,x,D),z=B.vector,G=B.angle,Q,Z;if(s.strokeLineJoin==="miter"&&(Q=-c/Math.sin(G/2),Z=new o.Point(z.x*Q*f.x,z.y*Q*f.y),Math.hypot(Z.x,Z.y)/c<=s.strokeMiterLimit)){r.push(_.add(Z)),r.push(_.subtract(Z));return}Q=-c*Math.SQRT2,Z=new o.Point(z.x*Q*f.x,z.y*Q*f.y),r.push(_.add(Z)),r.push(_.subtract(Z))}),r},transformPoint:function(e,s,h){return h?new o.Point(s[0]*e.x+s[2]*e.y,s[1]*e.x+s[3]*e.y):new o.Point(s[0]*e.x+s[2]*e.y+s[4],s[1]*e.x+s[3]*e.y+s[5])},makeBoundingBoxFromPoints:function(e,s){if(s)for(var h=0;h<e.length;h++)e[h]=o.util.transformPoint(e[h],s);var r=[e[0].x,e[1].x,e[2].x,e[3].x],c=o.util.array.min(r),f=o.util.array.max(r),g=f-c,p=[e[0].y,e[1].y,e[2].y,e[3].y],v=o.util.array.min(p),_=o.util.array.max(p),x=_-v;return{left:c,top:v,width:g,height:x}},invertTransform:function(e){var s=1/(e[0]*e[3]-e[1]*e[2]),h=[s*e[3],-s*e[1],-s*e[2],s*e[0]],r=o.util.transformPoint({x:e[4],y:e[5]},h,!0);return h[4]=-r.x,h[5]=-r.y,h},toFixed:function(e,s){return parseFloat(Number(e).toFixed(s))},parseUnit:function(e,s){var h=/\D{0,2}$/.exec(e),r=parseFloat(e);switch(s||(s=o.Text.DEFAULT_SVG_FONT_SIZE),h[0]){case"mm":return r*o.DPI/25.4;case"cm":return r*o.DPI/2.54;case"in":return r*o.DPI;case"pt":return r*o.DPI/72;case"pc":return r*o.DPI/72*12;case"em":return r*s;default:return r}},falseFunction:function(){return!1},getKlass:function(e,s){return e=o.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),o.util.resolveNamespace(s)[e]},getSvgAttributes:function(e){var s=["instantiated_by_use","style","id","class"];switch(e){case"linearGradient":s=s.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);break;case"radialGradient":s=s.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);break;case"stop":s=s.concat(["offset","stop-color","stop-opacity"]);break}return s},resolveNamespace:function(e){if(!e)return o;var s=e.split("."),h=s.length,r,c=u||o.window;for(r=0;r<h;++r)c=c[s[r]];return c},loadImage:function(e,s,h,r){if(!e){s&&s.call(h,e);return}var c=o.util.createImage(),f=function(){s&&s.call(h,c,!1),c=c.onload=c.onerror=null};c.onload=f,c.onerror=function(){o.log("Error loading "+c.src),s&&s.call(h,null,!0),c=c.onload=c.onerror=null},e.indexOf("data")!==0&&r!==void 0&&r!==null&&(c.crossOrigin=r),e.substring(0,14)==="data:image/svg"&&(c.onload=null,o.util.loadImageInDom(c,f)),c.src=e},loadImageInDom:function(e,s){var h=o.document.createElement("div");h.style.width=h.style.height="1px",h.style.left=h.style.top="-100%",h.style.position="absolute",h.appendChild(e),o.document.querySelector("body").appendChild(h),e.onload=function(){s(),h.parentNode.removeChild(h),h=null}},enlivenObjects:function(e,s,h,r){e=e||[];var c=[],f=0,g=e.length;function p(){++f===g&&s&&s(c.filter(function(v){return v}))}if(!g){s&&s(c);return}e.forEach(function(v,_){if(!v||!v.type){p();return}var x=o.util.getKlass(v.type,h);x.fromObject(v,function(D,B){B||(c[_]=D),r&&r(v,D,B),p()})})},enlivenObjectEnlivables:function(e,s,h){var r=o.Object.ENLIVEN_PROPS.filter(function(c){return!!e[c]});o.util.enlivenObjects(r.map(function(c){return e[c]}),function(c){var f={};r.forEach(function(g,p){f[g]=c[p],s&&(s[g]=c[p])}),h&&h(f)})},enlivenPatterns:function(e,s){e=e||[];function h(){++c===f&&s&&s(r)}var r=[],c=0,f=e.length;if(!f){s&&s(r);return}e.forEach(function(g,p){g&&g.source?new o.Pattern(g,function(v){r[p]=v,h()}):(r[p]=g,h())})},groupSVGElements:function(e,s,h){var r;return e&&e.length===1?(typeof h<"u"&&(e[0].sourcePath=h),e[0]):(s&&(s.width&&s.height?s.centerPoint={x:s.width/2,y:s.height/2}:(delete s.width,delete s.height)),r=new o.Group(e,s),typeof h<"u"&&(r.sourcePath=h),r)},populateWithProperties:function(e,s,h){if(h&&Array.isArray(h))for(var r=0,c=h.length;r<c;r++)h[r]in e&&(s[h[r]]=e[h[r]])},createCanvasElement:function(){return o.document.createElement("canvas")},copyCanvasElement:function(e){var s=o.util.createCanvasElement();return s.width=e.width,s.height=e.height,s.getContext("2d").drawImage(e,0,0),s},toDataURL:function(e,s,h){return e.toDataURL("image/"+s,h)},createImage:function(){return o.document.createElement("img")},multiplyTransformMatrices:function(e,s,h){return[e[0]*s[0]+e[2]*s[1],e[1]*s[0]+e[3]*s[1],e[0]*s[2]+e[2]*s[3],e[1]*s[2]+e[3]*s[3],h?0:e[0]*s[4]+e[2]*s[5]+e[4],h?0:e[1]*s[4]+e[3]*s[5]+e[5]]},qrDecompose:function(e){var s=l(e[1],e[0]),h=a(e[0],2)+a(e[1],2),r=n(h),c=(e[0]*e[3]-e[2]*e[1])/r,f=l(e[0]*e[2]+e[1]*e[3],h);return{angle:s/t,scaleX:r,scaleY:c,skewX:f/t,skewY:0,translateX:e[4],translateY:e[5]}},calcRotateMatrix:function(e){if(!e.angle)return o.iMatrix.concat();var s=o.util.degreesToRadians(e.angle),h=o.util.cos(s),r=o.util.sin(s);return[h,r,-r,h,0,0]},calcDimensionsMatrix:function(e){var s=typeof e.scaleX>"u"?1:e.scaleX,h=typeof e.scaleY>"u"?1:e.scaleY,r=[e.flipX?-s:s,0,0,e.flipY?-h:h,0,0],c=o.util.multiplyTransformMatrices,f=o.util.degreesToRadians;return e.skewX&&(r=c(r,[1,0,Math.tan(f(e.skewX)),1],!0)),e.skewY&&(r=c(r,[1,Math.tan(f(e.skewY)),0,1],!0)),r},composeMatrix:function(e){var s=[1,0,0,1,e.translateX||0,e.translateY||0],h=o.util.multiplyTransformMatrices;return e.angle&&(s=h(s,o.util.calcRotateMatrix(e))),(e.scaleX!==1||e.scaleY!==1||e.skewX||e.skewY||e.flipX||e.flipY)&&(s=h(s,o.util.calcDimensionsMatrix(e))),s},resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.skewX=0,e.skewY=0,e.flipX=!1,e.flipY=!1,e.rotate(0)},saveObjectTransform:function(e){return{scaleX:e.scaleX,scaleY:e.scaleY,skewX:e.skewX,skewY:e.skewY,angle:e.angle,left:e.left,flipX:e.flipX,flipY:e.flipY,top:e.top}},isTransparent:function(e,s,h,r){r>0&&(s>r?s-=r:s=0,h>r?h-=r:h=0);var c=!0,f,g,p=e.getImageData(s,h,r*2||1,r*2||1),v=p.data.length;for(f=3;f<v&&(g=p.data[f],c=g<=0,c!==!1);f+=4);return p=null,c},parsePreserveAspectRatioAttribute:function(e){var s="meet",h="Mid",r="Mid",c=e.split(" "),f;return c&&c.length&&(s=c.pop(),s!=="meet"&&s!=="slice"?(f=s,s="meet"):c.length&&(f=c.pop())),h=f!=="none"?f.slice(1,4):"none",r=f!=="none"?f.slice(5,8):"none",{meetOrSlice:s,alignX:h,alignY:r}},clearFabricFontCache:function(e){e=(e||"").toLowerCase(),e?o.charWidthsCache[e]&&delete o.charWidthsCache[e]:o.charWidthsCache={}},limitDimsByArea:function(e,s){var h=Math.sqrt(s*e),r=Math.floor(s/h);return{x:Math.floor(h),y:r}},capValue:function(e,s,h){return Math.max(e,Math.min(s,h))},findScaleToFit:function(e,s){return Math.min(s.width/e.width,s.height/e.height)},findScaleToCover:function(e,s){return Math.max(s.width/e.width,s.height/e.height)},matrixToSVG:function(e){return"matrix("+e.map(function(s){return o.util.toFixed(s,o.Object.NUM_FRACTION_DIGITS)}).join(" ")+")"},removeTransformFromObject:function(e,s){var h=o.util.invertTransform(s),r=o.util.multiplyTransformMatrices(h,e.calcOwnMatrix());o.util.applyTransformToObject(e,r)},addTransformToObject:function(e,s){o.util.applyTransformToObject(e,o.util.multiplyTransformMatrices(s,e.calcOwnMatrix()))},applyTransformToObject:function(e,s){var h=o.util.qrDecompose(s),r=new o.Point(h.translateX,h.translateY);e.flipX=!1,e.flipY=!1,e.set("scaleX",h.scaleX),e.set("scaleY",h.scaleY),e.skewX=h.skewX,e.skewY=h.skewY,e.angle=h.angle,e.setPositionByOrigin(r,"center","center")},sizeAfterTransform:function(e,s,h){var r=e/2,c=s/2,f=[{x:-r,y:-c},{x:r,y:-c},{x:-r,y:c},{x:r,y:c}],g=o.util.calcDimensionsMatrix(h),p=o.util.makeBoundingBoxFromPoints(f,g);return{x:p.width,y:p.height}},mergeClipPaths:function(e,s){var h=e,r=s;h.inverted&&!r.inverted&&(h=s,r=e),o.util.applyTransformToObject(r,o.util.multiplyTransformMatrices(o.util.invertTransform(h.calcTransformMatrix()),r.calcTransformMatrix()));var c=h.inverted&&r.inverted;return c&&(h.inverted=r.inverted=!1),new o.Group([h],{clipPath:r,inverted:c})},hasStyleChanged:function(e,s,h){return h=h||!1,e.fill!==s.fill||e.stroke!==s.stroke||e.strokeWidth!==s.strokeWidth||e.fontSize!==s.fontSize||e.fontFamily!==s.fontFamily||e.fontWeight!==s.fontWeight||e.fontStyle!==s.fontStyle||e.textBackgroundColor!==s.textBackgroundColor||e.deltaY!==s.deltaY||h&&(e.overline!==s.overline||e.underline!==s.underline||e.linethrough!==s.linethrough)},stylesToArray:function(h,s){for(var h=o.util.object.clone(h,!0),r=s.split(`
6
+ `),c=-1,f={},g=[],p=0;p<r.length;p++){if(!h[p]){c+=r[p].length;continue}for(var v=0;v<r[p].length;v++){c++;var _=h[p][v];if(_&&Object.keys(_).length>0){var x=o.util.hasStyleChanged(f,_,!0);x?g.push({start:c,end:c+1,style:_}):g[g.length-1].end++}f=_||{}}}return g},stylesFromArray:function(e,s){if(!Array.isArray(e))return e;for(var h=s.split(`
7
+ `),r=-1,c=0,f={},g=0;g<h.length;g++)for(var p=0;p<h[g].length;p++)r++,e[c]&&e[c].start<=r&&r<e[c].end&&(f[g]=f[g]||{},f[g][p]=Object.assign({},e[c].style),r===e[c].end-1&&c++);return f}}})(d),(function(){var u=Array.prototype.join,n={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},l={m:"l",M:"L"};function a(y,E,P,O,I,w,C,A,M,N,L){var Y=o.util.cos(y),U=o.util.sin(y),J=o.util.cos(E),R=o.util.sin(E),k=P*I*J-O*w*R+C,W=O*I*J+P*w*R+A,V=N+M*(-P*I*U-O*w*Y),j=L+M*(-O*I*U+P*w*Y),H=k+M*(P*I*R+O*w*J),$=W+M*(O*I*R-P*w*J);return["C",V,j,H,$,k,W]}function t(y,E,P,O,I,w,C){var A=Math.PI,M=C*A/180,N=o.util.sin(M),L=o.util.cos(M),Y=0,U=0;P=Math.abs(P),O=Math.abs(O);var J=-L*y*.5-N*E*.5,R=-L*E*.5+N*y*.5,k=P*P,W=O*O,V=R*R,j=J*J,H=k*W-k*V-W*j,$=0;if(H<0){var st=Math.sqrt(1-H/(k*W));P*=st,O*=st}else $=(I===w?-1:1)*Math.sqrt(H/(k*V+W*j));var rt=$*P*R/O,X=-$*O*J/P,nt=L*rt-N*X+y*.5,ot=N*rt+L*X+E*.5,lt=i(1,0,(J-rt)/P,(R-X)/O),ut=i((J-rt)/P,(R-X)/O,(-J-rt)/P,(-R-X)/O);w===0&&ut>0?ut-=2*A:w===1&&ut<0&&(ut+=2*A);for(var ct=Math.ceil(Math.abs(ut/A*2)),vt=[],ft=ut/ct,Bt=8/3*Math.sin(ft/4)*Math.sin(ft/4)/Math.sin(ft/2),Qt=lt+ft,wt=0;wt<ct;wt++)vt[wt]=a(lt,Qt,L,N,P,O,nt,ot,Bt,Y,U),Y=vt[wt][5],U=vt[wt][6],lt=Qt,Qt+=ft;return vt}function i(y,E,P,O){var I=Math.atan2(E,y),w=Math.atan2(O,P);return w>=I?w-I:2*Math.PI-(I-w)}function e(y,E,P,O,I,w,C,A){var M;if(o.cachesBoundsOfCurve&&(M=u.call(arguments),o.boundsOfCurveCache[M]))return o.boundsOfCurveCache[M];var N=Math.sqrt,L=Math.min,Y=Math.max,U=Math.abs,J=[],R=[[],[]],k,W,V,j,H,$,st,rt;W=6*y-12*P+6*I,k=-3*y+9*P-9*I+3*C,V=3*P-3*y;for(var X=0;X<2;++X){if(X>0&&(W=6*E-12*O+6*w,k=-3*E+9*O-9*w+3*A,V=3*O-3*E),U(k)<1e-12){if(U(W)<1e-12)continue;j=-V/W,0<j&&j<1&&J.push(j);continue}st=W*W-4*V*k,!(st<0)&&(rt=N(st),H=(-W+rt)/(2*k),0<H&&H<1&&J.push(H),$=(-W-rt)/(2*k),0<$&&$<1&&J.push($))}for(var nt,ot,lt=J.length,ut=lt,ct;lt--;)j=J[lt],ct=1-j,nt=ct*ct*ct*y+3*ct*ct*j*P+3*ct*j*j*I+j*j*j*C,R[0][lt]=nt,ot=ct*ct*ct*E+3*ct*ct*j*O+3*ct*j*j*w+j*j*j*A,R[1][lt]=ot;R[0][ut]=y,R[1][ut]=E,R[0][ut+1]=C,R[1][ut+1]=A;var vt=[{x:L.apply(null,R[0]),y:L.apply(null,R[1])},{x:Y.apply(null,R[0]),y:Y.apply(null,R[1])}];return o.cachesBoundsOfCurve&&(o.boundsOfCurveCache[M]=vt),vt}function s(y,E,P){for(var O=P[1],I=P[2],w=P[3],C=P[4],A=P[5],M=P[6],N=P[7],L=t(M-y,N-E,O,I,C,A,w),Y=0,U=L.length;Y<U;Y++)L[Y][1]+=y,L[Y][2]+=E,L[Y][3]+=y,L[Y][4]+=E,L[Y][5]+=y,L[Y][6]+=E;return L}function h(y){var E=0,P=0,O=y.length,I=0,w=0,C,A,M,N=[],L,Y,U;for(A=0;A<O;++A){switch(M=!1,C=y[A].slice(0),C[0]){case"l":C[0]="L",C[1]+=E,C[2]+=P;case"L":E=C[1],P=C[2];break;case"h":C[1]+=E;case"H":C[0]="L",C[2]=P,E=C[1];break;case"v":C[1]+=P;case"V":C[0]="L",P=C[1],C[1]=E,C[2]=P;break;case"m":C[0]="M",C[1]+=E,C[2]+=P;case"M":E=C[1],P=C[2],I=C[1],w=C[2];break;case"c":C[0]="C",C[1]+=E,C[2]+=P,C[3]+=E,C[4]+=P,C[5]+=E,C[6]+=P;case"C":Y=C[3],U=C[4],E=C[5],P=C[6];break;case"s":C[0]="S",C[1]+=E,C[2]+=P,C[3]+=E,C[4]+=P;case"S":L==="C"?(Y=2*E-Y,U=2*P-U):(Y=E,U=P),E=C[3],P=C[4],C[0]="C",C[5]=C[3],C[6]=C[4],C[3]=C[1],C[4]=C[2],C[1]=Y,C[2]=U,Y=C[3],U=C[4];break;case"q":C[0]="Q",C[1]+=E,C[2]+=P,C[3]+=E,C[4]+=P;case"Q":Y=C[1],U=C[2],E=C[3],P=C[4];break;case"t":C[0]="T",C[1]+=E,C[2]+=P;case"T":L==="Q"?(Y=2*E-Y,U=2*P-U):(Y=E,U=P),C[0]="Q",E=C[1],P=C[2],C[1]=Y,C[2]=U,C[3]=E,C[4]=P;break;case"a":C[0]="A",C[6]+=E,C[7]+=P;case"A":M=!0,N=N.concat(s(E,P,C)),E=C[6],P=C[7];break;case"z":case"Z":E=I,P=w;break}M||N.push(C),L=C[0]}return N}function r(y,E,P,O){return Math.sqrt((P-y)*(P-y)+(O-E)*(O-E))}function c(y){return y*y*y}function f(y){return 3*y*y*(1-y)}function g(y){return 3*y*(1-y)*(1-y)}function p(y){return(1-y)*(1-y)*(1-y)}function v(y,E,P,O,I,w,C,A){return function(M){var N=c(M),L=f(M),Y=g(M),U=p(M);return{x:C*N+I*L+P*Y+y*U,y:A*N+w*L+O*Y+E*U}}}function _(y,E,P,O,I,w,C,A){return function(M){var N=1-M,L=3*N*N*(P-y)+6*N*M*(I-P)+3*M*M*(C-I),Y=3*N*N*(O-E)+6*N*M*(w-O)+3*M*M*(A-w);return Math.atan2(Y,L)}}function x(y){return y*y}function D(y){return 2*y*(1-y)}function B(y){return(1-y)*(1-y)}function z(y,E,P,O,I,w){return function(C){var A=x(C),M=D(C),N=B(C);return{x:I*A+P*M+y*N,y:w*A+O*M+E*N}}}function G(y,E,P,O,I,w){return function(C){var A=1-C,M=2*A*(P-y)+2*C*(I-P),N=2*A*(O-E)+2*C*(w-O);return Math.atan2(N,M)}}function Q(y,E,P){var O={x:E,y:P},I,w=0,C;for(C=1;C<=100;C+=1)I=y(C/100),w+=r(O.x,O.y,I.x,I.y),O=I;return w}function Z(y,E){for(var P=0,O=0,I=y.iterator,w={x:y.x,y:y.y},C,A,M=.01,N=y.angleFinder,L;O<E&&M>1e-4;)C=I(P),L=P,A=r(w.x,w.y,C.x,C.y),A+O>E?(P-=M,M/=2):(w=C,P+=M,O+=A);return C.angle=N(L),C}function q(y){for(var E=0,P=y.length,O,I=0,w=0,C=0,A=0,M=[],N,L,Y,U=0;U<P;U++){switch(O=y[U],L={x:I,y:w,command:O[0]},O[0]){case"M":L.length=0,C=I=O[1],A=w=O[2];break;case"L":L.length=r(I,w,O[1],O[2]),I=O[1],w=O[2];break;case"C":N=v(I,w,O[1],O[2],O[3],O[4],O[5],O[6]),Y=_(I,w,O[1],O[2],O[3],O[4],O[5],O[6]),L.iterator=N,L.angleFinder=Y,L.length=Q(N,I,w),I=O[5],w=O[6];break;case"Q":N=z(I,w,O[1],O[2],O[3],O[4]),Y=G(I,w,O[1],O[2],O[3],O[4]),L.iterator=N,L.angleFinder=Y,L.length=Q(N,I,w),I=O[3],w=O[4];break;case"Z":case"z":L.destX=C,L.destY=A,L.length=r(I,w,C,A),I=C,w=A;break}E+=L.length,M.push(L)}return M.push({length:E,x:I,y:w}),M}function K(y,E,P){P||(P=q(y));for(var O=0;E-P[O].length>0&&O<P.length-2;)E-=P[O].length,O++;var I=P[O],w=E/I.length,C=I.command,A=y[O],M;switch(C){case"M":return{x:I.x,y:I.y,angle:0};case"Z":case"z":return M=new o.Point(I.x,I.y).lerp(new o.Point(I.destX,I.destY),w),M.angle=Math.atan2(I.destY-I.y,I.destX-I.x),M;case"L":return M=new o.Point(I.x,I.y).lerp(new o.Point(A[1],A[2]),w),M.angle=Math.atan2(A[2]-I.y,A[1]-I.x),M;case"C":return Z(I,E);case"Q":return Z(I,E)}}function tt(y){var E=[],P=[],O,I,w=o.rePathCommand,C="[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?\\s*",A="("+C+")"+o.commaWsp,M="([01])"+o.commaWsp+"?",N=A+"?"+A+"?"+A+M+M+A+"?("+C+")",L=new RegExp(N,"g"),Y,U,J;if(!y||!y.match)return E;J=y.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);for(var R=0,k,W=J.length;R<W;R++){O=J[R],U=O.slice(1).trim(),P.length=0;var V=O.charAt(0);if(k=[V],V.toLowerCase()==="a")for(var j;j=L.exec(U);)for(var H=1;H<j.length;H++)P.push(j[H]);else for(;Y=w.exec(U);)P.push(Y[0]);for(var H=0,$=P.length;H<$;H++)I=parseFloat(P[H]),isNaN(I)||k.push(I);var st=n[V.toLowerCase()],rt=l[V]||V;if(k.length-1>st)for(var X=1,nt=k.length;X<nt;X+=st)E.push([V].concat(k.slice(X,X+st))),V=rt;else E.push(k)}return E}function it(y,E){var P=[],O,I=new o.Point(y[0].x,y[0].y),w=new o.Point(y[1].x,y[1].y),C=y.length,A=1,M=0,N=C>2;for(E=E||0,N&&(A=y[2].x<w.x?-1:y[2].x===w.x?0:1,M=y[2].y<w.y?-1:y[2].y===w.y?0:1),P.push(["M",I.x-A*E,I.y-M*E]),O=1;O<C;O++){if(!I.eq(w)){var L=I.midPointFrom(w);P.push(["Q",I.x,I.y,L.x,L.y])}I=y[O],O+1<y.length&&(w=y[O+1])}return N&&(A=I.x>y[O-2].x?1:I.x===y[O-2].x?0:-1,M=I.y>y[O-2].y?1:I.y===y[O-2].y?0:-1),P.push(["L",I.x+A*E,I.y+M*E]),P}function et(y,E,P){return P&&(E=o.util.multiplyTransformMatrices(E,[1,0,0,1,-P.x,-P.y])),y.map(function(O){for(var I=O.slice(0),w={},C=1;C<O.length-1;C+=2)w.x=O[C],w.y=O[C+1],w=o.util.transformPoint(w,E),I[C]=w.x,I[C+1]=w.y;return I})}o.util.joinPath=function(y){return y.map(function(E){return E.join(" ")}).join(" ")},o.util.parsePath=tt,o.util.makePathSimpler=h,o.util.getSmoothPathFromPoints=it,o.util.getPathSegmentsInfo=q,o.util.getBoundsOfCurve=e,o.util.getPointOnPath=K,o.util.transformPath=et})(),(function(){var u=Array.prototype.slice;function n(e,s){for(var h=u.call(arguments,2),r=[],c=0,f=e.length;c<f;c++)r[c]=h.length?e[c][s].apply(e[c],h):e[c][s].call(e[c]);return r}function l(e,s){return i(e,s,function(h,r){return h>=r})}function a(e,s){return i(e,s,function(h,r){return h<r})}function t(e,s){for(var h=e.length;h--;)e[h]=s;return e}function i(e,s,h){if(!(!e||e.length===0)){var r=e.length-1,c=s?e[r][s]:e[r];if(s)for(;r--;)h(e[r][s],c)&&(c=e[r][s]);else for(;r--;)h(e[r],c)&&(c=e[r]);return c}}o.util.array={fill:t,invoke:n,min:a,max:l}})(),(function(){function u(l,a,t){if(t)if(!o.isLikelyNode&&a instanceof Element)l=a;else if(a instanceof Array){l=[];for(var i=0,e=a.length;i<e;i++)l[i]=u({},a[i],t)}else if(a&&typeof a=="object")for(var s in a)s==="canvas"||s==="group"?l[s]=null:a.hasOwnProperty(s)&&(l[s]=u({},a[s],t));else l=a;else for(var s in a)l[s]=a[s];return l}function n(l,a){return u({},l,a)}o.util.object={extend:u,clone:n},o.util.object.extend(o.util,o.Observable)})(),(function(){function u(i){return i.replace(/-+(.)?/g,function(e,s){return s?s.toUpperCase():""})}function n(i,e){return i.charAt(0).toUpperCase()+(e?i.slice(1):i.slice(1).toLowerCase())}function l(i){return i.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&apos;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function a(i){var e=0,s,h=[];for(e=0,s;e<i.length;e++)(s=t(i,e))!==!1&&h.push(s);return h}function t(i,e){var s=i.charCodeAt(e);if(isNaN(s))return"";if(s<55296||s>57343)return i.charAt(e);if(55296<=s&&s<=56319){if(i.length<=e+1)throw"High surrogate without following low surrogate";var h=i.charCodeAt(e+1);if(56320>h||h>57343)throw"High surrogate without following low surrogate";return i.charAt(e)+i.charAt(e+1)}if(e===0)throw"Low surrogate without preceding high surrogate";var r=i.charCodeAt(e-1);if(55296>r||r>56319)throw"Low surrogate without preceding high surrogate";return!1}o.util.string={camelize:u,capitalize:n,escapeXml:l,graphemeSplit:a}})(),(function(){var u=Array.prototype.slice,n=function(){},l=(function(){for(var s in{toString:1})if(s==="toString")return!1;return!0})(),a=function(s,h,r){for(var c in h)c in s.prototype&&typeof s.prototype[c]=="function"&&(h[c]+"").indexOf("callSuper")>-1?s.prototype[c]=(function(f){return function(){var g=this.constructor.superclass;this.constructor.superclass=r;var p=h[f].apply(this,arguments);if(this.constructor.superclass=g,f!=="initialize")return p}})(c):s.prototype[c]=h[c],l&&(h.toString!==Object.prototype.toString&&(s.prototype.toString=h.toString),h.valueOf!==Object.prototype.valueOf&&(s.prototype.valueOf=h.valueOf))};function t(){}function i(s){for(var h=null,r=this;r.constructor.superclass;){var c=r.constructor.superclass.prototype[s];if(r[s]!==c){h=c;break}r=r.constructor.superclass.prototype}return h?arguments.length>1?h.apply(this,u.call(arguments,1)):h.call(this):console.log("tried to callSuper "+s+", method not found in prototype chain",this)}function e(){var s=null,h=u.call(arguments,0);typeof h[0]=="function"&&(s=h.shift());function r(){this.initialize.apply(this,arguments)}r.superclass=s,r.subclasses=[],s&&(t.prototype=s.prototype,r.prototype=new t,s.subclasses.push(r));for(var c=0,f=h.length;c<f;c++)a(r,h[c],s);return r.prototype.initialize||(r.prototype.initialize=n),r.prototype.constructor=r,r.prototype.callSuper=i,r}o.util.createClass=e})(),(function(){var u=!!o.document.createElement("div").attachEvent,n=["touchstart","touchmove","touchend"];o.util.addListener=function(a,t,i,e){a&&a.addEventListener(t,i,u?!1:e)},o.util.removeListener=function(a,t,i,e){a&&a.removeEventListener(t,i,u?!1:e)};function l(a){var t=a.changedTouches;return t&&t[0]?t[0]:a}o.util.getPointer=function(a){var t=a.target,i=o.util.getScrollLeftTop(t),e=l(a);return{x:e.clientX+i.left,y:e.clientY+i.top}},o.util.isTouchEvent=function(a){return n.indexOf(a.type)>-1||a.pointerType==="touch"}})(),(function(){function u(e,s){var h=e.style;if(!h)return e;if(typeof s=="string")return e.style.cssText+=";"+s,s.indexOf("opacity")>-1?i(e,s.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in s)if(r==="opacity")i(e,s[r]);else{var c=r==="float"||r==="cssFloat"?typeof h.styleFloat>"u"?"cssFloat":"styleFloat":r;h.setProperty(c,s[r])}return e}var n=o.document.createElement("div"),l=typeof n.style.opacity=="string",a=typeof n.style.filter=="string",t=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,i=function(e){return e};l?i=function(e,s){return e.style.opacity=s,e}:a&&(i=function(e,s){var h=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(h.zoom=1),t.test(h.filter)?(s=s>=.9999?"":"alpha(opacity="+s*100+")",h.filter=h.filter.replace(t,s)):h.filter+=" alpha(opacity="+s*100+")",e}),o.util.setStyle=u})(),(function(){var u=Array.prototype.slice;function n(p){return typeof p=="string"?o.document.getElementById(p):p}var l,a=function(p){return u.call(p,0)};try{l=a(o.document.childNodes)instanceof Array}catch{}l||(a=function(p){for(var v=new Array(p.length),_=p.length;_--;)v[_]=p[_];return v});function t(p,v){var _=o.document.createElement(p);for(var x in v)x==="class"?_.className=v[x]:x==="for"?_.htmlFor=v[x]:_.setAttribute(x,v[x]);return _}function i(p,v){p&&(" "+p.className+" ").indexOf(" "+v+" ")===-1&&(p.className+=(p.className?" ":"")+v)}function e(p,v,_){return typeof v=="string"&&(v=t(v,_)),p.parentNode&&p.parentNode.replaceChild(v,p),v.appendChild(p),v}function s(p){for(var v=0,_=0,x=o.document.documentElement,D=o.document.body||{scrollLeft:0,scrollTop:0};p&&(p.parentNode||p.host)&&(p=p.parentNode||p.host,p===o.document?(v=D.scrollLeft||x.scrollLeft||0,_=D.scrollTop||x.scrollTop||0):(v+=p.scrollLeft||0,_+=p.scrollTop||0),!(p.nodeType===1&&p.style.position==="fixed")););return{left:v,top:_}}function h(p){var v,_=p&&p.ownerDocument,x={left:0,top:0},D={left:0,top:0},B,z={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!_)return D;for(var G in z)D[z[G]]+=parseInt(r(p,G),10)||0;return v=_.documentElement,typeof p.getBoundingClientRect<"u"&&(x=p.getBoundingClientRect()),B=s(p),{left:x.left+B.left-(v.clientLeft||0)+D.left,top:x.top+B.top-(v.clientTop||0)+D.top}}var r;o.document.defaultView&&o.document.defaultView.getComputedStyle?r=function(p,v){var _=o.document.defaultView.getComputedStyle(p,null);return _?_[v]:void 0}:r=function(p,v){var _=p.style[v];return!_&&p.currentStyle&&(_=p.currentStyle[v]),_},(function(){var p=o.document.documentElement.style,v="userSelect"in p?"userSelect":"MozUserSelect"in p?"MozUserSelect":"WebkitUserSelect"in p?"WebkitUserSelect":"KhtmlUserSelect"in p?"KhtmlUserSelect":"";function _(D){return typeof D.onselectstart<"u"&&(D.onselectstart=o.util.falseFunction),v?D.style[v]="none":typeof D.unselectable=="string"&&(D.unselectable="on"),D}function x(D){return typeof D.onselectstart<"u"&&(D.onselectstart=null),v?D.style[v]="":typeof D.unselectable=="string"&&(D.unselectable=""),D}o.util.makeElementUnselectable=_,o.util.makeElementSelectable=x})();function c(p){var v=o.jsdomImplForWrapper(p);return v._canvas||v._image}function f(p){if(o.isLikelyNode){var v=o.jsdomImplForWrapper(p);v&&(v._image=null,v._canvas=null,v._currentSrc=null,v._attributes=null,v._classList=null)}}function g(p,v){p.imageSmoothingEnabled=p.imageSmoothingEnabled||p.webkitImageSmoothingEnabled||p.mozImageSmoothingEnabled||p.msImageSmoothingEnabled||p.oImageSmoothingEnabled,p.imageSmoothingEnabled=v}o.util.setImageSmoothing=g,o.util.getById=n,o.util.toArray=a,o.util.addClass=i,o.util.makeElement=t,o.util.wrapElement=e,o.util.getScrollLeftTop=s,o.util.getElementOffset=h,o.util.getNodeCanvas=c,o.util.cleanUpJsdomNode=f})(),(function(){function u(a,t){return a+(/\?/.test(a)?"&":"?")+t}function n(){}function l(a,t){t||(t={});var i=t.method?t.method.toUpperCase():"GET",e=t.onComplete||function(){},s=new o.window.XMLHttpRequest,h=t.body||t.parameters;return s.onreadystatechange=function(){s.readyState===4&&(e(s),s.onreadystatechange=n)},i==="GET"&&(h=null,typeof t.parameters=="string"&&(a=u(a,t.parameters))),s.open(i,a,!0),(i==="POST"||i==="PUT")&&s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(h),s}o.util.request=l})(),o.log=console.log,o.warn=console.warn,(function(){var u=o.util.object.extend,n=o.util.object.clone,l=[];o.util.object.extend(l,{cancelAll:function(){var c=this.splice(0);return c.forEach(function(f){f.cancel()}),c},cancelByCanvas:function(c){if(!c)return[];var f=this.filter(function(g){return typeof g.target=="object"&&g.target.canvas===c});return f.forEach(function(g){g.cancel()}),f},cancelByTarget:function(c){var f=this.findAnimationsByTarget(c);return f.forEach(function(g){g.cancel()}),f},findAnimationIndex:function(c){return this.indexOf(this.findAnimation(c))},findAnimation:function(c){return this.find(function(f){return f.cancel===c})},findAnimationsByTarget:function(c){return c?this.filter(function(f){return f.target===c}):[]}});function a(){return!1}function t(c,f,g,p){return-g*Math.cos(c/p*(Math.PI/2))+g+f}function i(c){c||(c={});var f=!1,g,p=function(){var v=o.runningAnimations.indexOf(g);return v>-1&&o.runningAnimations.splice(v,1)[0]};return g=u(n(c),{cancel:function(){return f=!0,p()},currentValue:"startValue"in c?c.startValue:0,completionRate:0,durationRate:0}),o.runningAnimations.push(g),h(function(v){var _=v||+new Date,x=c.duration||500,D=_+x,B,z=c.onChange||a,G=c.abort||a,Q=c.onComplete||a,Z=c.easing||t,q="startValue"in c?c.startValue.length>0:!1,K="startValue"in c?c.startValue:0,tt="endValue"in c?c.endValue:100,it=c.byValue||(q?K.map(function(et,y){return tt[y]-K[y]}):tt-K);c.onStart&&c.onStart(),(function et(y){B=y||+new Date;var E=B>D?x:B-_,P=E/x,O=q?K.map(function(w,C){return Z(E,K[C],it[C],x)}):Z(E,K,it,x),I=Math.abs(q?(O[0]-K[0])/it[0]:(O-K)/it);if(g.currentValue=q?O.slice():O,g.completionRate=I,g.durationRate=P,!f){if(G(O,I,P)){p();return}if(B>D){g.currentValue=q?tt.slice():tt,g.completionRate=1,g.durationRate=1,z(q?tt.slice():tt,1,1),Q(tt,1,1),p();return}else z(O,I,P),h(et)}})(_)}),g.cancel}var e=o.window.requestAnimationFrame||o.window.webkitRequestAnimationFrame||o.window.mozRequestAnimationFrame||o.window.oRequestAnimationFrame||o.window.msRequestAnimationFrame||function(c){return o.window.setTimeout(c,1e3/60)},s=o.window.cancelAnimationFrame||o.window.clearTimeout;function h(){return e.apply(o.window,arguments)}function r(){return s.apply(o.window,arguments)}o.util.animate=i,o.util.requestAnimFrame=h,o.util.cancelAnimFrame=r,o.runningAnimations=l})(),(function(){function u(l,a,t){var i="rgba("+parseInt(l[0]+t*(a[0]-l[0]),10)+","+parseInt(l[1]+t*(a[1]-l[1]),10)+","+parseInt(l[2]+t*(a[2]-l[2]),10);return i+=","+(l&&a?parseFloat(l[3]+t*(a[3]-l[3])):1),i+=")",i}function n(l,a,t,i){var e=new o.Color(l).getSource(),s=new o.Color(a).getSource(),h=i.onComplete,r=i.onChange;return i=i||{},o.util.animate(o.util.object.extend(i,{duration:t||500,startValue:e,endValue:s,byValue:s,easing:function(c,f,g,p){var v=i.colorEasing?i.colorEasing(c,p):1-Math.cos(c/p*(Math.PI/2));return u(f,g,v)},onComplete:function(c,f,g){if(h)return h(u(s,s,0),f,g)},onChange:function(c,f,g){if(r){if(Array.isArray(c))return r(u(c,c,0),f,g);r(c,f,g)}}}))}o.util.animateColor=n})(),(function(){function u(y,E,P,O){return y<Math.abs(E)?(y=E,O=P/4):E===0&&y===0?O=P/(2*Math.PI)*Math.asin(1):O=P/(2*Math.PI)*Math.asin(E/y),{a:y,c:E,p:P,s:O}}function n(y,E,P){return y.a*Math.pow(2,10*(E-=1))*Math.sin((E*P-y.s)*(2*Math.PI)/y.p)}function l(y,E,P,O){return P*((y=y/O-1)*y*y+1)+E}function a(y,E,P,O){return y/=O/2,y<1?P/2*y*y*y+E:P/2*((y-=2)*y*y+2)+E}function t(y,E,P,O){return P*(y/=O)*y*y*y+E}function i(y,E,P,O){return-P*((y=y/O-1)*y*y*y-1)+E}function e(y,E,P,O){return y/=O/2,y<1?P/2*y*y*y*y+E:-P/2*((y-=2)*y*y*y-2)+E}function s(y,E,P,O){return P*(y/=O)*y*y*y*y+E}function h(y,E,P,O){return P*((y=y/O-1)*y*y*y*y+1)+E}function r(y,E,P,O){return y/=O/2,y<1?P/2*y*y*y*y*y+E:P/2*((y-=2)*y*y*y*y+2)+E}function c(y,E,P,O){return-P*Math.cos(y/O*(Math.PI/2))+P+E}function f(y,E,P,O){return P*Math.sin(y/O*(Math.PI/2))+E}function g(y,E,P,O){return-P/2*(Math.cos(Math.PI*y/O)-1)+E}function p(y,E,P,O){return y===0?E:P*Math.pow(2,10*(y/O-1))+E}function v(y,E,P,O){return y===O?E+P:P*(-Math.pow(2,-10*y/O)+1)+E}function _(y,E,P,O){return y===0?E:y===O?E+P:(y/=O/2,y<1?P/2*Math.pow(2,10*(y-1))+E:P/2*(-Math.pow(2,-10*--y)+2)+E)}function x(y,E,P,O){return-P*(Math.sqrt(1-(y/=O)*y)-1)+E}function D(y,E,P,O){return P*Math.sqrt(1-(y=y/O-1)*y)+E}function B(y,E,P,O){return y/=O/2,y<1?-P/2*(Math.sqrt(1-y*y)-1)+E:P/2*(Math.sqrt(1-(y-=2)*y)+1)+E}function z(y,E,P,O){var I=1.70158,w=0,C=P;if(y===0)return E;if(y/=O,y===1)return E+P;w||(w=O*.3);var A=u(C,P,w,I);return-n(A,y,O)+E}function G(y,E,P,O){var I=1.70158,w=0,C=P;if(y===0)return E;if(y/=O,y===1)return E+P;w||(w=O*.3);var A=u(C,P,w,I);return A.a*Math.pow(2,-10*y)*Math.sin((y*O-A.s)*(2*Math.PI)/A.p)+A.c+E}function Q(y,E,P,O){var I=1.70158,w=0,C=P;if(y===0)return E;if(y/=O/2,y===2)return E+P;w||(w=O*(.3*1.5));var A=u(C,P,w,I);return y<1?-.5*n(A,y,O)+E:A.a*Math.pow(2,-10*(y-=1))*Math.sin((y*O-A.s)*(2*Math.PI)/A.p)*.5+A.c+E}function Z(y,E,P,O,I){return I===void 0&&(I=1.70158),P*(y/=O)*y*((I+1)*y-I)+E}function q(y,E,P,O,I){return I===void 0&&(I=1.70158),P*((y=y/O-1)*y*((I+1)*y+I)+1)+E}function K(y,E,P,O,I){return I===void 0&&(I=1.70158),y/=O/2,y<1?P/2*(y*y*(((I*=1.525)+1)*y-I))+E:P/2*((y-=2)*y*(((I*=1.525)+1)*y+I)+2)+E}function tt(y,E,P,O){return P-it(O-y,0,P,O)+E}function it(y,E,P,O){return(y/=O)<1/2.75?P*(7.5625*y*y)+E:y<2/2.75?P*(7.5625*(y-=1.5/2.75)*y+.75)+E:y<2.5/2.75?P*(7.5625*(y-=2.25/2.75)*y+.9375)+E:P*(7.5625*(y-=2.625/2.75)*y+.984375)+E}function et(y,E,P,O){return y<O/2?tt(y*2,0,P,O)*.5+E:it(y*2-O,0,P,O)*.5+P*.5+E}o.util.ease={easeInQuad:function(y,E,P,O){return P*(y/=O)*y+E},easeOutQuad:function(y,E,P,O){return-P*(y/=O)*(y-2)+E},easeInOutQuad:function(y,E,P,O){return y/=O/2,y<1?P/2*y*y+E:-P/2*(--y*(y-2)-1)+E},easeInCubic:function(y,E,P,O){return P*(y/=O)*y*y+E},easeOutCubic:l,easeInOutCubic:a,easeInQuart:t,easeOutQuart:i,easeInOutQuart:e,easeInQuint:s,easeOutQuint:h,easeInOutQuint:r,easeInSine:c,easeOutSine:f,easeInOutSine:g,easeInExpo:p,easeOutExpo:v,easeInOutExpo:_,easeInCirc:x,easeOutCirc:D,easeInOutCirc:B,easeInElastic:z,easeOutElastic:G,easeInOutElastic:Q,easeInBack:Z,easeOutBack:q,easeInOutBack:K,easeInBounce:tt,easeOutBounce:it,easeInOutBounce:et}})(),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.object.extend,a=n.util.object.clone,t=n.util.toFixed,i=n.util.parseUnit,e=n.util.multiplyTransformMatrices,s=["path","circle","polygon","polyline","ellipse","rect","line","image","text"],h=["symbol","image","marker","pattern","view","svg"],r=["pattern","defs","symbol","metadata","clipPath","mask","desc"],c=["symbol","g","a","svg","clipPath","defs"],f={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","letter-spacing":"charSpacing","paint-order":"paintFirst","stroke-dasharray":"strokeDashArray","stroke-dashoffset":"strokeDashOffset","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"textAnchor",opacity:"opacity","clip-path":"clipPath","clip-rule":"clipRule","vector-effect":"strokeUniform","image-rendering":"imageSmoothing"},g={stroke:"strokeOpacity",fill:"fillOpacity"},p="font-size",v="clip-path";n.svgValidTagNamesRegEx=D(s),n.svgViewBoxElementsRegEx=D(h),n.svgInvalidAncestorsRegEx=D(r),n.svgValidParentsRegEx=D(c),n.cssRules={},n.gradientDefs={},n.clipPaths={};function _(w){return w in f?f[w]:w}function x(w,C,A,M){var N=Array.isArray(C),L;if((w==="fill"||w==="stroke")&&C==="none")C="";else{if(w==="strokeUniform")return C==="non-scaling-stroke";if(w==="strokeDashArray")C==="none"?C=null:C=C.replace(/,/g," ").split(/\s+/).map(parseFloat);else if(w==="transformMatrix")A&&A.transformMatrix?C=e(A.transformMatrix,n.parseTransformAttribute(C)):C=n.parseTransformAttribute(C);else if(w==="visible")C=C!=="none"&&C!=="hidden",A&&A.visible===!1&&(C=!1);else if(w==="opacity")C=parseFloat(C),A&&typeof A.opacity<"u"&&(C*=A.opacity);else if(w==="textAnchor")C=C==="start"?"left":C==="end"?"right":"center";else if(w==="charSpacing")L=i(C,M)/M*1e3;else if(w==="paintFirst"){var Y=C.indexOf("fill"),U=C.indexOf("stroke"),C="fill";(Y>-1&&U>-1&&U<Y||Y===-1&&U>-1)&&(C="stroke")}else{if(w==="href"||w==="xlink:href"||w==="font")return C;if(w==="imageSmoothing")return C==="optimizeQuality";L=N?C.map(i):i(C,M)}}return!N&&isNaN(L)?C:L}function D(w){return new RegExp("^("+w.join("|")+")\\b","i")}function B(w){for(var C in g)if(!(typeof w[g[C]]>"u"||w[C]==="")){if(typeof w[C]>"u"){if(!n.Object.prototype[C])continue;w[C]=n.Object.prototype[C]}if(w[C].indexOf("url(")!==0){var A=new n.Color(w[C]);w[C]=A.setAlpha(t(A.getAlpha()*w[g[C]],2)).toRgba()}}return w}function z(w,C){var A,M=[],N,L,Y;for(L=0,Y=C.length;L<Y;L++)A=C[L],N=w.getElementsByTagName(A),M=M.concat(Array.prototype.slice.call(N));return M}n.parseTransformAttribute=(function(){function w(X,nt){var ot=n.util.cos(nt[0]),lt=n.util.sin(nt[0]),ut=0,ct=0;nt.length===3&&(ut=nt[1],ct=nt[2]),X[0]=ot,X[1]=lt,X[2]=-lt,X[3]=ot,X[4]=ut-(ot*ut-lt*ct),X[5]=ct-(lt*ut+ot*ct)}function C(X,nt){var ot=nt[0],lt=nt.length===2?nt[1]:nt[0];X[0]=ot,X[3]=lt}function A(X,nt,ot){X[ot]=Math.tan(n.util.degreesToRadians(nt[0]))}function M(X,nt){X[4]=nt[0],nt.length===2&&(X[5]=nt[1])}var N=n.iMatrix,L=n.reNum,Y=n.commaWsp,U="(?:(skewX)\\s*\\(\\s*("+L+")\\s*\\))",J="(?:(skewY)\\s*\\(\\s*("+L+")\\s*\\))",R="(?:(rotate)\\s*\\(\\s*("+L+")(?:"+Y+"("+L+")"+Y+"("+L+"))?\\s*\\))",k="(?:(scale)\\s*\\(\\s*("+L+")(?:"+Y+"("+L+"))?\\s*\\))",W="(?:(translate)\\s*\\(\\s*("+L+")(?:"+Y+"("+L+"))?\\s*\\))",V="(?:(matrix)\\s*\\(\\s*("+L+")"+Y+"("+L+")"+Y+"("+L+")"+Y+"("+L+")"+Y+"("+L+")"+Y+"("+L+")\\s*\\))",j="(?:"+V+"|"+W+"|"+k+"|"+R+"|"+U+"|"+J+")",H="(?:"+j+"(?:"+Y+"*"+j+")*)",$="^\\s*(?:"+H+"?)\\s*$",st=new RegExp($),rt=new RegExp(j,"g");return function(X){var nt=N.concat(),ot=[];if(!X||X&&!st.test(X))return nt;X.replace(rt,function(ut){var ct=new RegExp(j).exec(ut).filter(function(Bt){return!!Bt}),vt=ct[1],ft=ct.slice(2).map(parseFloat);switch(vt){case"translate":M(nt,ft);break;case"rotate":ft[0]=n.util.degreesToRadians(ft[0]),w(nt,ft);break;case"scale":C(nt,ft);break;case"skewX":A(nt,ft,2);break;case"skewY":A(nt,ft,1);break;case"matrix":nt=ft;break}ot.push(nt.concat()),nt=N.concat()});for(var lt=ot[0];ot.length>1;)ot.shift(),lt=n.util.multiplyTransformMatrices(lt,ot[0]);return lt}})();function G(w,C){var A,M;w.replace(/;\s*$/,"").split(";").forEach(function(N){var L=N.split(":");A=L[0].trim().toLowerCase(),M=L[1].trim(),C[A]=M})}function Q(w,C){var A,M;for(var N in w)typeof w[N]>"u"||(A=N.toLowerCase(),M=w[N],C[A]=M)}function Z(w,C){var A={};for(var M in n.cssRules[C])if(q(w,M.split(" ")))for(var N in n.cssRules[C][M])A[N]=n.cssRules[C][M][N];return A}function q(w,C){var A,M=!0;return A=tt(w,C.pop()),A&&C.length&&(M=K(w,C)),A&&M&&C.length===0}function K(w,C){for(var A,M=!0;w.parentNode&&w.parentNode.nodeType===1&&C.length;)M&&(A=C.pop()),w=w.parentNode,M=tt(w,A);return C.length===0}function tt(w,C){var A=w.nodeName,M=w.getAttribute("class"),N=w.getAttribute("id"),L,Y;if(L=new RegExp("^"+A,"i"),C=C.replace(L,""),N&&C.length&&(L=new RegExp("#"+N+"(?![a-zA-Z\\-]+)","i"),C=C.replace(L,"")),M&&C.length)for(M=M.split(" "),Y=M.length;Y--;)L=new RegExp("\\."+M[Y]+"(?![a-zA-Z\\-]+)","i"),C=C.replace(L,"");return C.length===0}function it(w,C){var A;if(w.getElementById&&(A=w.getElementById(C)),A)return A;var M,N,L,Y=w.getElementsByTagName("*");for(N=0,L=Y.length;N<L;N++)if(M=Y[N],C===M.getAttribute("id"))return M}function et(w){for(var C=z(w,["use","svg:use"]),A=0;C.length&&A<C.length;){var M=C[A],N=M.getAttribute("xlink:href")||M.getAttribute("href");if(N===null)return;var L=N.slice(1),Y=M.getAttribute("x")||0,U=M.getAttribute("y")||0,J=it(w,L).cloneNode(!0),R=(J.getAttribute("transform")||"")+" translate("+Y+", "+U+")",k,W=C.length,V,j,H,$,st=n.svgNS;if(E(J),/^svg$/i.test(J.nodeName)){var rt=J.ownerDocument.createElementNS(st,"g");for(j=0,H=J.attributes,$=H.length;j<$;j++)V=H.item(j),rt.setAttributeNS(st,V.nodeName,V.nodeValue);for(;J.firstChild;)rt.appendChild(J.firstChild);J=rt}for(j=0,H=M.attributes,$=H.length;j<$;j++)V=H.item(j),!(V.nodeName==="x"||V.nodeName==="y"||V.nodeName==="xlink:href"||V.nodeName==="href")&&(V.nodeName==="transform"?R=V.nodeValue+" "+R:J.setAttribute(V.nodeName,V.nodeValue));J.setAttribute("transform",R),J.setAttribute("instantiated_by_use","1"),J.removeAttribute("id"),k=M.parentNode,k.replaceChild(J,M),C.length===W&&A++}}var y=new RegExp("^\\s*("+n.reNum+"+)\\s*,?\\s*("+n.reNum+"+)\\s*,?\\s*("+n.reNum+"+)\\s*,?\\s*("+n.reNum+"+)\\s*$");function E(w){if(!n.svgViewBoxElementsRegEx.test(w.nodeName))return{};var C=w.getAttribute("viewBox"),A=1,M=1,N=0,L=0,Y,U,J,R,k=w.getAttribute("width"),W=w.getAttribute("height"),V=w.getAttribute("x")||0,j=w.getAttribute("y")||0,H=w.getAttribute("preserveAspectRatio")||"",$=!C||!(C=C.match(y)),st=!k||!W||k==="100%"||W==="100%",rt=$&&st,X={},nt="",ot=0,lt=0;if(X.width=0,X.height=0,X.toBeParsed=rt,$&&(V||j)&&w.parentNode&&w.parentNode.nodeName!=="#document"&&(nt=" translate("+i(V)+" "+i(j)+") ",J=(w.getAttribute("transform")||"")+nt,w.setAttribute("transform",J),w.removeAttribute("x"),w.removeAttribute("y")),rt)return X;if($)return X.width=i(k),X.height=i(W),X;if(N=-parseFloat(C[1]),L=-parseFloat(C[2]),Y=parseFloat(C[3]),U=parseFloat(C[4]),X.minX=N,X.minY=L,X.viewBoxWidth=Y,X.viewBoxHeight=U,st?(X.width=Y,X.height=U):(X.width=i(k),X.height=i(W),A=X.width/Y,M=X.height/U),H=n.util.parsePreserveAspectRatioAttribute(H),H.alignX!=="none"&&(H.meetOrSlice==="meet"&&(M=A=A>M?M:A),H.meetOrSlice==="slice"&&(M=A=A>M?A:M),ot=X.width-Y*A,lt=X.height-U*A,H.alignX==="Mid"&&(ot/=2),H.alignY==="Mid"&&(lt/=2),H.alignX==="Min"&&(ot=0),H.alignY==="Min"&&(lt=0)),A===1&&M===1&&N===0&&L===0&&V===0&&j===0)return X;if((V||j)&&w.parentNode.nodeName!=="#document"&&(nt=" translate("+i(V)+" "+i(j)+") "),J=nt+" matrix("+A+" 0 0 "+M+" "+(N*A+ot)+" "+(L*M+lt)+") ",w.nodeName==="svg"){for(R=w.ownerDocument.createElementNS(n.svgNS,"g");w.firstChild;)R.appendChild(w.firstChild);w.appendChild(R)}else R=w,R.removeAttribute("x"),R.removeAttribute("y"),J=R.getAttribute("transform")+J;return R.setAttribute("transform",J),X}function P(w,C){for(;w&&(w=w.parentNode);)if(w.nodeName&&C.test(w.nodeName.replace("svg:",""))&&!w.getAttribute("instantiated_by_use"))return!0;return!1}n.parseSVGDocument=function(w,C,A,M){if(w){et(w);var N=n.Object.__uid++,L,Y,U=E(w),J=n.util.toArray(w.getElementsByTagName("*"));if(U.crossOrigin=M&&M.crossOrigin,U.svgUid=N,J.length===0&&n.isLikelyNode){J=w.selectNodes('//*[name(.)!="svg"]');var R=[];for(L=0,Y=J.length;L<Y;L++)R[L]=J[L];J=R}var k=J.filter(function(V){return E(V),n.svgValidTagNamesRegEx.test(V.nodeName.replace("svg:",""))&&!P(V,n.svgInvalidAncestorsRegEx)});if(!k||k&&!k.length){C&&C([],{});return}var W={};J.filter(function(V){return V.nodeName.replace("svg:","")==="clipPath"}).forEach(function(V){var j=V.getAttribute("id");W[j]=n.util.toArray(V.getElementsByTagName("*")).filter(function(H){return n.svgValidTagNamesRegEx.test(H.nodeName.replace("svg:",""))})}),n.gradientDefs[N]=n.getGradientDefs(w),n.cssRules[N]=n.getCSSRules(w),n.clipPaths[N]=W,n.parseElements(k,function(V,j){C&&(C(V,U,j,J),delete n.gradientDefs[N],delete n.cssRules[N],delete n.clipPaths[N])},a(U),A,M)}};function O(w,C){var A=["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"],M="xlink:href",N=C.getAttribute(M).slice(1),L=it(w,N);if(L&&L.getAttribute(M)&&O(w,L),A.forEach(function(U){L&&!C.hasAttribute(U)&&L.hasAttribute(U)&&C.setAttribute(U,L.getAttribute(U))}),!C.children.length)for(var Y=L.cloneNode(!0);Y.firstChild;)C.appendChild(Y.firstChild);C.removeAttribute(M)}var I=new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+n.reNum+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+n.reNum+"))?\\s+(.*)");l(n,{parseFontDeclaration:function(w,C){var A=w.match(I);if(A){var M=A[1],N=A[3],L=A[4],Y=A[5],U=A[6];M&&(C.fontStyle=M),N&&(C.fontWeight=isNaN(parseFloat(N))?N:parseFloat(N)),L&&(C.fontSize=i(L)),U&&(C.fontFamily=U),Y&&(C.lineHeight=Y==="normal"?1:Y)}},getGradientDefs:function(w){var C=["linearGradient","radialGradient","svg:linearGradient","svg:radialGradient"],A=z(w,C),M,N=0,L={};for(N=A.length;N--;)M=A[N],M.getAttribute("xlink:href")&&O(w,M),L[M.getAttribute("id")]=M;return L},parseAttributes:function(w,C,A){if(w){var M,N={},L,Y;typeof A>"u"&&(A=w.getAttribute("svgUid")),w.parentNode&&n.svgValidParentsRegEx.test(w.parentNode.nodeName)&&(N=n.parseAttributes(w.parentNode,C,A));var U=C.reduce(function(H,$){return M=w.getAttribute($),M&&(H[$]=M),H},{}),J=l(Z(w,A),n.parseStyleAttribute(w));U=l(U,J),J[v]&&w.setAttribute(v,J[v]),L=Y=N.fontSize||n.Text.DEFAULT_SVG_FONT_SIZE,U[p]&&(U[p]=L=i(U[p],Y));var R,k,W={};for(var V in U)R=_(V),k=x(R,U[V],N,L),W[R]=k;W&&W.font&&n.parseFontDeclaration(W.font,W);var j=l(N,W);return n.svgValidParentsRegEx.test(w.nodeName)?j:B(j)}},parseElements:function(w,C,A,M,N){new n.ElementsParser(w,C,A,M,N).parse()},parseStyleAttribute:function(w){var C={},A=w.getAttribute("style");return A&&(typeof A=="string"?G(A,C):Q(A,C)),C},parsePointsAttribute:function(w){if(!w)return null;w=w.replace(/,/g," ").trim(),w=w.split(/\s+/);var C=[],A,M;for(A=0,M=w.length;A<M;A+=2)C.push({x:parseFloat(w[A]),y:parseFloat(w[A+1])});return C},getCSSRules:function(w){var C=w.getElementsByTagName("style"),A,M,N={},L;for(A=0,M=C.length;A<M;A++){var Y=C[A].textContent;Y=Y.replace(/\/\*[\s\S]*?\*\//g,""),Y.trim()!==""&&(L=Y.split("}"),L=L.filter(function(U){return U.trim()}),L.forEach(function(U){var J=U.split("{"),R={},k=J[1].trim(),W=k.split(";").filter(function($){return $.trim()});for(A=0,M=W.length;A<M;A++){var V=W[A].split(":"),j=V[0].trim(),H=V[1].trim();R[j]=H}U=J[0].trim(),U.split(",").forEach(function($){$=$.replace(/^svg/i,"").trim(),$!==""&&(N[$]?n.util.object.extend(N[$],R):N[$]=n.util.object.clone(R))})}))}return N},loadSVGFromURL:function(w,C,A,M){w=w.replace(/^\n\s*/,"").trim(),new n.util.request(w,{method:"get",onComplete:N});function N(L){var Y=L.responseXML;if(!Y||!Y.documentElement)return C&&C(null),!1;n.parseSVGDocument(Y.documentElement,function(U,J,R,k){C&&C(U,J,R,k)},A,M)}},loadSVGFromString:function(w,C,A,M){var N=new n.window.DOMParser,L=N.parseFromString(w.trim(),"text/xml");n.parseSVGDocument(L.documentElement,function(Y,U,J,R){C(Y,U,J,R)},A,M)}})})(d),o.ElementsParser=function(u,n,l,a,t,i){this.elements=u,this.callback=n,this.options=l,this.reviver=a,this.svgUid=l&&l.svgUid||0,this.parsingOptions=t,this.regexUrl=/^url\(['"]?#([^'"]+)['"]?\)/g,this.doc=i},(function(u){u.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},u.createObjects=function(){var n=this;this.elements.forEach(function(l,a){l.setAttribute("svgUid",n.svgUid),n.createObject(l,a)})},u.findTag=function(n){return o[o.util.string.capitalize(n.tagName.replace("svg:",""))]},u.createObject=function(n,l){var a=this.findTag(n);if(a&&a.fromElement)try{a.fromElement(n,this.createCallback(l,n),this.options)}catch(t){o.log(t)}else this.checkIfDone()},u.createCallback=function(n,l){var a=this;return function(t){var i;a.resolveGradient(t,l,"fill"),a.resolveGradient(t,l,"stroke"),t instanceof o.Image&&t._originalElement&&(i=t.parsePreserveAspectRatioAttribute(l)),t._removeTransformMatrix(i),a.resolveClipPath(t,l),a.reviver&&a.reviver(l,t),a.instances[n]=t,a.checkIfDone()}},u.extractPropertyDefinition=function(n,l,a){var t=n[l],i=this.regexUrl;if(i.test(t)){i.lastIndex=0;var e=i.exec(t)[1];return i.lastIndex=0,o[a][this.svgUid][e]}},u.resolveGradient=function(n,l,a){var t=this.extractPropertyDefinition(n,a,"gradientDefs");if(t){var i=l.getAttribute(a+"-opacity"),e=o.Gradient.fromElement(t,n,i,this.options);n.set(a,e)}},u.createClipPathCallback=function(n,l){return function(a){a._removeTransformMatrix(),a.fillRule=a.clipRule,l.push(a)}},u.resolveClipPath=function(n,l){var a=this.extractPropertyDefinition(n,"clipPath","clipPaths"),t,i,e,s,h,r;if(a){s=[],e=o.util.invertTransform(n.calcTransformMatrix());for(var c=a[0].parentNode,f=l;f.parentNode&&f.getAttribute("clip-path")!==n.clipPath;)f=f.parentNode;f.parentNode.appendChild(c);for(var g=0;g<a.length;g++)t=a[g],i=this.findTag(t),i.fromElement(t,this.createClipPathCallback(n,s),this.options);s.length===1?a=s[0]:a=new o.Group(s),h=o.util.multiplyTransformMatrices(e,a.calcTransformMatrix()),a.clipPath&&this.resolveClipPath(a,f);var r=o.util.qrDecompose(h);a.flipX=!1,a.flipY=!1,a.set("scaleX",r.scaleX),a.set("scaleY",r.scaleY),a.angle=r.angle,a.skewX=r.skewX,a.skewY=0,a.setPositionByOrigin({x:r.translateX,y:r.translateY},"center","center"),n.clipPath=a}else delete n.clipPath},u.checkIfDone=function(){--this.numElements===0&&(this.instances=this.instances.filter(function(n){return n!=null}),this.callback(this.instances,this.elements))}})(o.ElementsParser.prototype),(function(u){var n=u.fabric||(u.fabric={});if(n.Point){n.warn("fabric.Point is already defined");return}n.Point=l;function l(a,t){this.x=a,this.y=t}l.prototype={type:"point",constructor:l,add:function(a){return new l(this.x+a.x,this.y+a.y)},addEquals:function(a){return this.x+=a.x,this.y+=a.y,this},scalarAdd:function(a){return new l(this.x+a,this.y+a)},scalarAddEquals:function(a){return this.x+=a,this.y+=a,this},subtract:function(a){return new l(this.x-a.x,this.y-a.y)},subtractEquals:function(a){return this.x-=a.x,this.y-=a.y,this},scalarSubtract:function(a){return new l(this.x-a,this.y-a)},scalarSubtractEquals:function(a){return this.x-=a,this.y-=a,this},multiply:function(a){return new l(this.x*a,this.y*a)},multiplyEquals:function(a){return this.x*=a,this.y*=a,this},divide:function(a){return new l(this.x/a,this.y/a)},divideEquals:function(a){return this.x/=a,this.y/=a,this},eq:function(a){return this.x===a.x&&this.y===a.y},lt:function(a){return this.x<a.x&&this.y<a.y},lte:function(a){return this.x<=a.x&&this.y<=a.y},gt:function(a){return this.x>a.x&&this.y>a.y},gte:function(a){return this.x>=a.x&&this.y>=a.y},lerp:function(a,t){return typeof t>"u"&&(t=.5),t=Math.max(Math.min(1,t),0),new l(this.x+(a.x-this.x)*t,this.y+(a.y-this.y)*t)},distanceFrom:function(a){var t=this.x-a.x,i=this.y-a.y;return Math.sqrt(t*t+i*i)},midPointFrom:function(a){return this.lerp(a)},min:function(a){return new l(Math.min(this.x,a.x),Math.min(this.y,a.y))},max:function(a){return new l(Math.max(this.x,a.x),Math.max(this.y,a.y))},toString:function(){return this.x+","+this.y},setXY:function(a,t){return this.x=a,this.y=t,this},setX:function(a){return this.x=a,this},setY:function(a){return this.y=a,this},setFromPoint:function(a){return this.x=a.x,this.y=a.y,this},swap:function(a){var t=this.x,i=this.y;this.x=a.x,this.y=a.y,a.x=t,a.y=i},clone:function(){return new l(this.x,this.y)}}})(d),(function(u){var n=u.fabric||(u.fabric={});if(n.Intersection){n.warn("fabric.Intersection is already defined");return}function l(a){this.status=a,this.points=[]}n.Intersection=l,n.Intersection.prototype={constructor:l,appendPoint:function(a){return this.points.push(a),this},appendPoints:function(a){return this.points=this.points.concat(a),this}},n.Intersection.intersectLineLine=function(a,t,i,e){var s,h=(e.x-i.x)*(a.y-i.y)-(e.y-i.y)*(a.x-i.x),r=(t.x-a.x)*(a.y-i.y)-(t.y-a.y)*(a.x-i.x),c=(e.y-i.y)*(t.x-a.x)-(e.x-i.x)*(t.y-a.y);if(c!==0){var f=h/c,g=r/c;0<=f&&f<=1&&0<=g&&g<=1?(s=new l("Intersection"),s.appendPoint(new n.Point(a.x+f*(t.x-a.x),a.y+f*(t.y-a.y)))):s=new l}else h===0||r===0?s=new l("Coincident"):s=new l("Parallel");return s},n.Intersection.intersectLinePolygon=function(a,t,i){var e=new l,s=i.length,h,r,c,f;for(f=0;f<s;f++)h=i[f],r=i[(f+1)%s],c=l.intersectLineLine(a,t,h,r),e.appendPoints(c.points);return e.points.length>0&&(e.status="Intersection"),e},n.Intersection.intersectPolygonPolygon=function(a,t){var i=new l,e=a.length,s;for(s=0;s<e;s++){var h=a[s],r=a[(s+1)%e],c=l.intersectLinePolygon(h,r,t);i.appendPoints(c.points)}return i.points.length>0&&(i.status="Intersection"),i},n.Intersection.intersectPolygonRectangle=function(a,t,i){var e=t.min(i),s=t.max(i),h=new n.Point(s.x,e.y),r=new n.Point(e.x,s.y),c=l.intersectLinePolygon(e,h,a),f=l.intersectLinePolygon(h,s,a),g=l.intersectLinePolygon(s,r,a),p=l.intersectLinePolygon(r,e,a),v=new l;return v.appendPoints(c.points),v.appendPoints(f.points),v.appendPoints(g.points),v.appendPoints(p.points),v.points.length>0&&(v.status="Intersection"),v}})(d),(function(u){var n=u.fabric||(u.fabric={});if(n.Color){n.warn("fabric.Color is already defined.");return}function l(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}n.Color=l,n.Color.prototype={_tryParsingColor:function(t){var i;t in l.colorNameMap&&(t=l.colorNameMap[t]),t==="transparent"&&(i=[255,255,255,0]),i||(i=l.sourceFromHex(t)),i||(i=l.sourceFromRgb(t)),i||(i=l.sourceFromHsl(t)),i||(i=[0,0,0,1]),i&&this.setSource(i)},_rgbToHsl:function(t,i,e){t/=255,i/=255,e/=255;var s,h,r,c=n.util.array.max([t,i,e]),f=n.util.array.min([t,i,e]);if(r=(c+f)/2,c===f)s=h=0;else{var g=c-f;switch(h=r>.5?g/(2-c-f):g/(c+f),c){case t:s=(i-e)/g+(i<e?6:0);break;case i:s=(e-t)/g+2;break;case e:s=(t-i)/g+4;break}s/=6}return[Math.round(s*360),Math.round(h*100),Math.round(r*100)]},getSource:function(){return this._source},setSource:function(t){this._source=t},toRgb:function(){var t=this.getSource();return"rgb("+t[0]+","+t[1]+","+t[2]+")"},toRgba:function(){var t=this.getSource();return"rgba("+t[0]+","+t[1]+","+t[2]+","+t[3]+")"},toHsl:function(){var t=this.getSource(),i=this._rgbToHsl(t[0],t[1],t[2]);return"hsl("+i[0]+","+i[1]+"%,"+i[2]+"%)"},toHsla:function(){var t=this.getSource(),i=this._rgbToHsl(t[0],t[1],t[2]);return"hsla("+i[0]+","+i[1]+"%,"+i[2]+"%,"+t[3]+")"},toHex:function(){var t=this.getSource(),i,e,s;return i=t[0].toString(16),i=i.length===1?"0"+i:i,e=t[1].toString(16),e=e.length===1?"0"+e:e,s=t[2].toString(16),s=s.length===1?"0"+s:s,i.toUpperCase()+e.toUpperCase()+s.toUpperCase()},toHexa:function(){var t=this.getSource(),i;return i=Math.round(t[3]*255),i=i.toString(16),i=i.length===1?"0"+i:i,this.toHex()+i.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(t){var i=this.getSource();return i[3]=t,this.setSource(i),this},toGrayscale:function(){var t=this.getSource(),i=parseInt((t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),10),e=t[3];return this.setSource([i,i,i,e]),this},toBlackWhite:function(t){var i=this.getSource(),e=(i[0]*.3+i[1]*.59+i[2]*.11).toFixed(0),s=i[3];return t=t||127,e=Number(e)<Number(t)?0:255,this.setSource([e,e,e,s]),this},overlayWith:function(t){t instanceof l||(t=new l(t));var i=[],e=this.getAlpha(),s=.5,h=this.getSource(),r=t.getSource(),c;for(c=0;c<3;c++)i.push(Math.round(h[c]*(1-s)+r[c]*s));return i[3]=e,this.setSource(i),this}},n.Color.reRGBa=/^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*((?:\d*\.?\d+)?)\s*)?\)$/i,n.Color.reHSLa=/^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/i,n.Color.reHex=/^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i,n.Color.colorNameMap={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",darkgreen:"#006400",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",lightgreen:"#90EE90",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"};function a(t,i,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?t+(i-t)*6*e:e<1/2?i:e<2/3?t+(i-t)*(2/3-e)*6:t}n.Color.fromRgb=function(t){return l.fromSource(l.sourceFromRgb(t))},n.Color.sourceFromRgb=function(t){var i=t.match(l.reRGBa);if(i){var e=parseInt(i[1],10)/(/%$/.test(i[1])?100:1)*(/%$/.test(i[1])?255:1),s=parseInt(i[2],10)/(/%$/.test(i[2])?100:1)*(/%$/.test(i[2])?255:1),h=parseInt(i[3],10)/(/%$/.test(i[3])?100:1)*(/%$/.test(i[3])?255:1);return[parseInt(e,10),parseInt(s,10),parseInt(h,10),i[4]?parseFloat(i[4]):1]}},n.Color.fromRgba=l.fromRgb,n.Color.fromHsl=function(t){return l.fromSource(l.sourceFromHsl(t))},n.Color.sourceFromHsl=function(t){var i=t.match(l.reHSLa);if(i){var e=(parseFloat(i[1])%360+360)%360/360,s=parseFloat(i[2])/(/%$/.test(i[2])?100:1),h=parseFloat(i[3])/(/%$/.test(i[3])?100:1),r,c,f;if(s===0)r=c=f=h;else{var g=h<=.5?h*(s+1):h+s-h*s,p=h*2-g;r=a(p,g,e+1/3),c=a(p,g,e),f=a(p,g,e-1/3)}return[Math.round(r*255),Math.round(c*255),Math.round(f*255),i[4]?parseFloat(i[4]):1]}},n.Color.fromHsla=l.fromHsl,n.Color.fromHex=function(t){return l.fromSource(l.sourceFromHex(t))},n.Color.sourceFromHex=function(t){if(t.match(l.reHex)){var i=t.slice(t.indexOf("#")+1),e=i.length===3||i.length===4,s=i.length===8||i.length===4,h=e?i.charAt(0)+i.charAt(0):i.substring(0,2),r=e?i.charAt(1)+i.charAt(1):i.substring(2,4),c=e?i.charAt(2)+i.charAt(2):i.substring(4,6),f=s?e?i.charAt(3)+i.charAt(3):i.substring(6,8):"FF";return[parseInt(h,16),parseInt(r,16),parseInt(c,16),parseFloat((parseInt(f,16)/255).toFixed(2))]}},n.Color.fromSource=function(t){var i=new l;return i.setSource(t),i}})(d),(function(u){var n=u.fabric||(u.fabric={}),l=["e","se","s","sw","w","nw","n","ne","e"],a=["ns","nesw","ew","nwse"],t={},i="left",e="top",s="right",h="bottom",r="center",c={top:h,bottom:e,left:s,right:i,center:r},f=n.util.radiansToDegrees,g=Math.sign||function(R){return(R>0)-(R<0)||+R};function p(R,k){var W=R.angle+f(Math.atan2(k.y,k.x))+360;return Math.round(W%360/45)}function v(R,k){var W=k.transform.target,V=W.canvas,j=n.util.object.clone(k);j.target=W,V&&V.fire("object:"+R,j),W.fire(R,k)}function _(R,k){var W=k.canvas,V=W.uniScaleKey,j=R[V];return W.uniformScaling&&!j||!W.uniformScaling&&j}function x(R){return R.originX===r&&R.originY===r}function D(R,k,W){var V=R.lockScalingX,j=R.lockScalingY;return!!(V&&j||!k&&(V||j)&&W||V&&k==="x"||j&&k==="y")}function B(R,k,W){var V="not-allowed",j=_(R,W),H="";if(k.x!==0&&k.y===0?H="x":k.x===0&&k.y!==0&&(H="y"),D(W,H,j))return V;var $=p(W,k);return l[$]+"-resize"}function z(R,k,W){var V="not-allowed";if(k.x!==0&&W.lockSkewingY||k.y!==0&&W.lockSkewingX)return V;var j=p(W,k)%4;return a[j]+"-resize"}function G(R,k,W){return R[W.canvas.altActionKey]?t.skewCursorStyleHandler(R,k,W):t.scaleCursorStyleHandler(R,k,W)}function Q(R,k,W){var V=R[W.canvas.altActionKey];if(k.x===0)return V?"skewX":"scaleY";if(k.y===0)return V?"skewY":"scaleX"}function Z(R,k,W){return W.lockRotation?"not-allowed":k.cursorStyle}function q(R,k,W,V){return{e:R,transform:k,pointer:{x:W,y:V}}}function K(R){return function(k,W,V,j){var H=W.target,$=H.getCenterPoint(),st=H.translateToOriginPoint($,W.originX,W.originY),rt=R(k,W,V,j);return H.setPositionByOrigin(st,W.originX,W.originY),rt}}function tt(R,k){return function(W,V,j,H){var $=k(W,V,j,H);return $&&v(R,q(W,V,j,H)),$}}function it(R,k,W,V,j){var H=R.target,$=H.controls[R.corner],st=H.canvas.getZoom(),rt=H.padding/st,X=H.toLocalPoint(new n.Point(V,j),k,W);return X.x>=rt&&(X.x-=rt),X.x<=-rt&&(X.x+=rt),X.y>=rt&&(X.y-=rt),X.y<=rt&&(X.y+=rt),X.x-=$.offsetX,X.y-=$.offsetY,X}function et(R){return R.flipX!==R.flipY}function y(R,k,W,V,j){if(R[k]!==0){var H=R._getTransformedDimensions()[V],$=j/H*R[W];R.set(W,$)}}function E(R,k,W,V){var j=k.target,H=j._getTransformedDimensions(0,j.skewY),$=it(k,k.originX,k.originY,W,V),st=Math.abs($.x*2)-H.x,rt=j.skewX,X;st<2?X=0:(X=f(Math.atan2(st/j.scaleX,H.y/j.scaleY)),k.originX===i&&k.originY===h&&(X=-X),k.originX===s&&k.originY===e&&(X=-X),et(j)&&(X=-X));var nt=rt!==X;if(nt){var ot=j._getTransformedDimensions().y;j.set("skewX",X),y(j,"skewY","scaleY","y",ot)}return nt}function P(R,k,W,V){var j=k.target,H=j._getTransformedDimensions(j.skewX,0),$=it(k,k.originX,k.originY,W,V),st=Math.abs($.y*2)-H.y,rt=j.skewY,X;st<2?X=0:(X=f(Math.atan2(st/j.scaleY,H.x/j.scaleX)),k.originX===i&&k.originY===h&&(X=-X),k.originX===s&&k.originY===e&&(X=-X),et(j)&&(X=-X));var nt=rt!==X;if(nt){var ot=j._getTransformedDimensions().x;j.set("skewY",X),y(j,"skewX","scaleX","x",ot)}return nt}function O(R,k,W,V){var j=k.target,H=j.skewX,$,st=k.originY;if(j.lockSkewingX)return!1;if(H===0){var rt=it(k,r,r,W,V);rt.x>0?$=i:$=s}else H>0&&($=st===e?i:s),H<0&&($=st===e?s:i),et(j)&&($=$===i?s:i);k.originX=$;var X=tt("skewing",K(E));return X(R,k,W,V)}function I(R,k,W,V){var j=k.target,H=j.skewY,$,st=k.originX;if(j.lockSkewingY)return!1;if(H===0){var rt=it(k,r,r,W,V);rt.y>0?$=e:$=h}else H>0&&($=st===i?e:h),H<0&&($=st===i?h:e),et(j)&&($=$===e?h:e);k.originY=$;var X=tt("skewing",K(P));return X(R,k,W,V)}function w(R,k,W,V){var j=k,H=j.target,$=H.translateToOriginPoint(H.getCenterPoint(),j.originX,j.originY);if(H.lockRotation)return!1;var st=Math.atan2(j.ey-$.y,j.ex-$.x),rt=Math.atan2(V-$.y,W-$.x),X=f(rt-st+j.theta),nt=!0;if(H.snapAngle>0){var ot=H.snapAngle,lt=H.snapThreshold||ot,ut=Math.ceil(X/ot)*ot,ct=Math.floor(X/ot)*ot;Math.abs(X-ct)<lt?X=ct:Math.abs(X-ut)<lt&&(X=ut)}return X<0&&(X=360+X),X%=360,nt=H.angle!==X,H.angle=X,nt}function C(R,k,W,V,j){j=j||{};var H=k.target,$=H.lockScalingX,st=H.lockScalingY,rt=j.by,X,nt,ot,lt,ut=_(R,H),ct=D(H,rt,ut),vt,ft,Bt=k.gestureScale;if(ct)return!1;if(Bt)nt=k.scaleX*Bt,ot=k.scaleY*Bt;else{if(X=it(k,k.originX,k.originY,W,V),vt=rt!=="y"?g(X.x):1,ft=rt!=="x"?g(X.y):1,k.signX||(k.signX=vt),k.signY||(k.signY=ft),H.lockScalingFlip&&(k.signX!==vt||k.signY!==ft))return!1;if(lt=H._getTransformedDimensions(),ut&&!rt){var Qt=Math.abs(X.x)+Math.abs(X.y),wt=k.original,Zi=Math.abs(lt.x*wt.scaleX/H.scaleX)+Math.abs(lt.y*wt.scaleY/H.scaleY),ai=Qt/Zi;nt=wt.scaleX*ai,ot=wt.scaleY*ai}else nt=Math.abs(X.x*H.scaleX/lt.x),ot=Math.abs(X.y*H.scaleY/lt.y);x(k)&&(nt*=2,ot*=2),k.signX!==vt&&rt!=="y"&&(k.originX=c[k.originX],nt*=-1,k.signX=vt),k.signY!==ft&&rt!=="x"&&(k.originY=c[k.originY],ot*=-1,k.signY=ft)}var tr=H.scaleX,er=H.scaleY;return rt?(rt==="x"&&H.set("scaleX",nt),rt==="y"&&H.set("scaleY",ot)):(!$&&H.set("scaleX",nt),!st&&H.set("scaleY",ot)),tr!==H.scaleX||er!==H.scaleY}function A(R,k,W,V){return C(R,k,W,V)}function M(R,k,W,V){return C(R,k,W,V,{by:"x"})}function N(R,k,W,V){return C(R,k,W,V,{by:"y"})}function L(R,k,W,V){return R[k.target.canvas.altActionKey]?t.skewHandlerX(R,k,W,V):t.scalingY(R,k,W,V)}function Y(R,k,W,V){return R[k.target.canvas.altActionKey]?t.skewHandlerY(R,k,W,V):t.scalingX(R,k,W,V)}function U(R,k,W,V){var j=k.target,H=it(k,k.originX,k.originY,W,V),$=j.strokeWidth/(j.strokeUniform?j.scaleX:1),st=x(k)?2:1,rt=j.width,X=Math.abs(H.x*st/j.scaleX)-$;return j.set("width",Math.max(X,0)),rt!==X}function J(R,k,W,V){var j=k.target,H=W-k.offsetX,$=V-k.offsetY,st=!j.get("lockMovementX")&&j.left!==H,rt=!j.get("lockMovementY")&&j.top!==$;return st&&j.set("left",H),rt&&j.set("top",$),(st||rt)&&v("moving",q(R,k,W,V)),st||rt}t.scaleCursorStyleHandler=B,t.skewCursorStyleHandler=z,t.scaleSkewCursorStyleHandler=G,t.rotationWithSnapping=tt("rotating",K(w)),t.scalingEqually=tt("scaling",K(A)),t.scalingX=tt("scaling",K(M)),t.scalingY=tt("scaling",K(N)),t.scalingYOrSkewingX=L,t.scalingXOrSkewingY=Y,t.changeWidth=tt("resizing",K(U)),t.skewHandlerX=O,t.skewHandlerY=I,t.dragHandler=J,t.scaleOrSkewActionName=Q,t.rotationStyleHandler=Z,t.fireEvent=v,t.wrapWithFixedAnchor=K,t.wrapWithFireEvent=tt,t.getLocalPoint=it,n.controlsUtils=t})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.degreesToRadians,a=n.controlsUtils;function t(e,s,h,r,c){r=r||{};var f=this.sizeX||r.cornerSize||c.cornerSize,g=this.sizeY||r.cornerSize||c.cornerSize,p=typeof r.transparentCorners<"u"?r.transparentCorners:c.transparentCorners,v=p?"stroke":"fill",_=!p&&(r.cornerStrokeColor||c.cornerStrokeColor),x=s,D=h,B;e.save(),e.fillStyle=r.cornerColor||c.cornerColor,e.strokeStyle=r.cornerStrokeColor||c.cornerStrokeColor,f>g?(B=f,e.scale(1,g/f),D=h*f/g):g>f?(B=g,e.scale(f/g,1),x=s*g/f):B=f,e.lineWidth=1,e.beginPath(),e.arc(x,D,B/2,0,2*Math.PI,!1),e[v](),_&&e.stroke(),e.restore()}function i(e,s,h,r,c){r=r||{};var f=this.sizeX||r.cornerSize||c.cornerSize,g=this.sizeY||r.cornerSize||c.cornerSize,p=typeof r.transparentCorners<"u"?r.transparentCorners:c.transparentCorners,v=p?"stroke":"fill",_=!p&&(r.cornerStrokeColor||c.cornerStrokeColor),x=f/2,D=g/2;e.save(),e.fillStyle=r.cornerColor||c.cornerColor,e.strokeStyle=r.cornerStrokeColor||c.cornerStrokeColor,e.lineWidth=1,e.translate(s,h),e.rotate(l(c.angle)),e[v+"Rect"](-x,-D,f,g),_&&e.strokeRect(-x,-D,f,g),e.restore()}a.renderCircleControl=t,a.renderSquareControl=i})(d),(function(u){var n=u.fabric||(u.fabric={});function l(a){for(var t in a)this[t]=a[t]}n.Control=l,n.Control.prototype={visible:!0,actionName:"scale",angle:0,x:0,y:0,offsetX:0,offsetY:0,sizeX:null,sizeY:null,touchSizeX:null,touchSizeY:null,cursorStyle:"crosshair",withConnection:!1,actionHandler:function(){},mouseDownHandler:function(){},mouseUpHandler:function(){},getActionHandler:function(){return this.actionHandler},getMouseDownHandler:function(){return this.mouseDownHandler},getMouseUpHandler:function(){return this.mouseUpHandler},cursorStyleHandler:function(a,t){return t.cursorStyle},getActionName:function(a,t){return t.actionName},getVisibility:function(a,t){var i=a._controlsVisibility;return i&&typeof i[t]<"u"?i[t]:this.visible},setVisibility:function(a){this.visible=a},positionHandler:function(a,t){var i=n.util.transformPoint({x:this.x*a.x+this.offsetX,y:this.y*a.y+this.offsetY},t);return i},calcCornerCoords:function(a,t,i,e,s){var h,r,c,f,g=s?this.touchSizeX:this.sizeX,p=s?this.touchSizeY:this.sizeY;if(g&&p&&g!==p){var v=Math.atan2(p,g),_=Math.sqrt(g*g+p*p)/2,x=v-n.util.degreesToRadians(a),D=Math.PI/2-v-n.util.degreesToRadians(a);h=_*n.util.cos(x),r=_*n.util.sin(x),c=_*n.util.cos(D),f=_*n.util.sin(D)}else{var B=g&&p?g:t;_=B*.7071067812;var x=n.util.degreesToRadians(45-a);h=c=_*n.util.cos(x),r=f=_*n.util.sin(x)}return{tl:{x:i-f,y:e-c},tr:{x:i+h,y:e-r},bl:{x:i-h,y:e+r},br:{x:i+f,y:e+c}}},render:function(a,t,i,e,s){switch(e=e||{},e.cornerStyle||s.cornerStyle){case"circle":n.controlsUtils.renderCircleControl.call(this,a,t,i,e,s);break;default:n.controlsUtils.renderSquareControl.call(this,a,t,i,e,s)}}}})(d),(function(){function u(i,e){var s=i.getAttribute("style"),h=i.getAttribute("offset")||0,r,c,f,g;if(h=parseFloat(h)/(/%$/.test(h)?100:1),h=h<0?0:h>1?1:h,s){var p=s.split(/\s*;\s*/);for(p[p.length-1]===""&&p.pop(),g=p.length;g--;){var v=p[g].split(/\s*:\s*/),_=v[0].trim(),x=v[1].trim();_==="stop-color"?r=x:_==="stop-opacity"&&(f=x)}}return r||(r=i.getAttribute("stop-color")||"rgb(0,0,0)"),f||(f=i.getAttribute("stop-opacity")),r=new o.Color(r),c=r.getAlpha(),f=isNaN(parseFloat(f))?1:parseFloat(f),f*=c*e,{offset:h,color:r.toRgb(),opacity:f}}function n(i){return{x1:i.getAttribute("x1")||0,y1:i.getAttribute("y1")||0,x2:i.getAttribute("x2")||"100%",y2:i.getAttribute("y2")||0}}function l(i){return{x1:i.getAttribute("fx")||i.getAttribute("cx")||"50%",y1:i.getAttribute("fy")||i.getAttribute("cy")||"50%",r1:0,x2:i.getAttribute("cx")||"50%",y2:i.getAttribute("cy")||"50%",r2:i.getAttribute("r")||"50%"}}var a=o.util.object.clone;o.Gradient=o.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(i){i||(i={}),i.coords||(i.coords={});var e,s=this;Object.keys(i).forEach(function(h){s[h]=i[h]}),this.id?this.id+="_"+o.Object.__uid++:this.id=o.Object.__uid++,e={x1:i.coords.x1||0,y1:i.coords.y1||0,x2:i.coords.x2||0,y2:i.coords.y2||0},this.type==="radial"&&(e.r1=i.coords.r1||0,e.r2=i.coords.r2||0),this.coords=e,this.colorStops=i.colorStops.slice()},addColorStop:function(i){for(var e in i){var s=new o.Color(i[e]);this.colorStops.push({offset:parseFloat(e),color:s.toRgb(),opacity:s.getAlpha()})}return this},toObject:function(i){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return o.util.populateWithProperties(this,e,i),e},toSVG:function(i,c){var s=a(this.coords,!0),h,r,c=c||{},f,g,p=a(this.colorStops,!0),v=s.r1>s.r2,_=this.gradientTransform?this.gradientTransform.concat():o.iMatrix.concat(),x=-this.offsetX,D=-this.offsetY,B=!!c.additionalTransform,z=this.gradientUnits==="pixels"?"userSpaceOnUse":"objectBoundingBox";if(p.sort(function(K,tt){return K.offset-tt.offset}),z==="objectBoundingBox"?(x/=i.width,D/=i.height):(x+=i.width/2,D+=i.height/2),i.type==="path"&&this.gradientUnits!=="percentage"&&(x-=i.pathOffset.x,D-=i.pathOffset.y),_[4]-=x,_[5]-=D,g='id="SVGID_'+this.id+'" gradientUnits="'+z+'"',g+=' gradientTransform="'+(B?c.additionalTransform+" ":"")+o.util.matrixToSVG(_)+'" ',this.type==="linear"?f=["<linearGradient ",g,' x1="',s.x1,'" y1="',s.y1,'" x2="',s.x2,'" y2="',s.y2,`">
8
+ `]:this.type==="radial"&&(f=["<radialGradient ",g,' cx="',v?s.x1:s.x2,'" cy="',v?s.y1:s.y2,'" r="',v?s.r1:s.r2,'" fx="',v?s.x2:s.x1,'" fy="',v?s.y2:s.y1,`">
9
+ `]),this.type==="radial"){if(v)for(p=p.concat(),p.reverse(),h=0,r=p.length;h<r;h++)p[h].offset=1-p[h].offset;var G=Math.min(s.r1,s.r2);if(G>0){var Q=Math.max(s.r1,s.r2),Z=G/Q;for(h=0,r=p.length;h<r;h++)p[h].offset+=Z*(1-p[h].offset)}}for(h=0,r=p.length;h<r;h++){var q=p[h];f.push("<stop ",'offset="',q.offset*100+"%",'" style="stop-color:',q.color,typeof q.opacity<"u"?";stop-opacity: "+q.opacity:";",`"/>
10
+ `)}return f.push(this.type==="linear"?`</linearGradient>
11
+ `:`</radialGradient>
12
+ `),f.join("")},toLive:function(i){var e,s=o.util.object.clone(this.coords),h,r;if(this.type){for(this.type==="linear"?e=i.createLinearGradient(s.x1,s.y1,s.x2,s.y2):this.type==="radial"&&(e=i.createRadialGradient(s.x1,s.y1,s.r1,s.x2,s.y2,s.r2)),h=0,r=this.colorStops.length;h<r;h++){var c=this.colorStops[h].color,f=this.colorStops[h].opacity,g=this.colorStops[h].offset;typeof f<"u"&&(c=new o.Color(c).setAlpha(f).toRgba()),e.addColorStop(g,c)}return e}}}),o.util.object.extend(o.Gradient,{fromElement:function(i,e,s,h){var r=parseFloat(s)/(/%$/.test(s)?100:1);r=r<0?0:r>1?1:r,isNaN(r)&&(r=1);var c=i.getElementsByTagName("stop"),f,g=i.getAttribute("gradientUnits")==="userSpaceOnUse"?"pixels":"percentage",p=i.getAttribute("gradientTransform")||"",v=[],_,x,D=0,B=0,z;for(i.nodeName==="linearGradient"||i.nodeName==="LINEARGRADIENT"?(f="linear",_=n(i)):(f="radial",_=l(i)),x=c.length;x--;)v.push(u(c[x],r));z=o.parseTransformAttribute(p),t(e,_,h,g),g==="pixels"&&(D=-e.left,B=-e.top);var G=new o.Gradient({id:i.getAttribute("id"),type:f,coords:_,colorStops:v,gradientUnits:g,gradientTransform:z,offsetX:D,offsetY:B});return G}});function t(i,e,s,h){var r,c;Object.keys(e).forEach(function(f){r=e[f],r==="Infinity"?c=1:r==="-Infinity"?c=0:(c=parseFloat(e[f],10),typeof r=="string"&&/^(\d+\.\d+)%|(\d+)%$/.test(r)&&(c*=.01,h==="pixels"&&((f==="x1"||f==="x2"||f==="r2")&&(c*=s.viewBoxWidth||s.width),(f==="y1"||f==="y2")&&(c*=s.viewBoxHeight||s.height)))),e[f]=c})}})(),(function(){var u=o.util.toFixed;o.Pattern=o.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(n,l){if(n||(n={}),this.id=o.Object.__uid++,this.setOptions(n),!n.source||n.source&&typeof n.source!="string"){l&&l(this);return}else{var a=this;this.source=o.util.createImage(),o.util.loadImage(n.source,function(t,i){a.source=t,l&&l(a,i)},null,this.crossOrigin)}},toObject:function(n){var l=o.Object.NUM_FRACTION_DIGITS,a,t;return typeof this.source.src=="string"?a=this.source.src:typeof this.source=="object"&&this.source.toDataURL&&(a=this.source.toDataURL()),t={type:"pattern",source:a,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:u(this.offsetX,l),offsetY:u(this.offsetY,l),patternTransform:this.patternTransform?this.patternTransform.concat():null},o.util.populateWithProperties(this,t,n),t},toSVG:function(n){var l=typeof this.source=="function"?this.source():this.source,a=l.width/n.width,t=l.height/n.height,i=this.offsetX/n.width,e=this.offsetY/n.height,s="";return(this.repeat==="repeat-x"||this.repeat==="no-repeat")&&(t=1,e&&(t+=Math.abs(e))),(this.repeat==="repeat-y"||this.repeat==="no-repeat")&&(a=1,i&&(a+=Math.abs(i))),l.src?s=l.src:l.toDataURL&&(s=l.toDataURL()),'<pattern id="SVGID_'+this.id+'" x="'+i+'" y="'+e+'" width="'+a+'" height="'+t+`">
13
+ <image x="0" y="0" width="`+l.width+'" height="'+l.height+'" xlink:href="'+s+`"></image>
14
+ </pattern>
15
+ `},setOptions:function(n){for(var l in n)this[l]=n[l]},toLive:function(n){var l=this.source;return!l||typeof l.src<"u"&&(!l.complete||l.naturalWidth===0||l.naturalHeight===0)?"":n.createPattern(l,this.repeat)}})})(),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.toFixed;if(n.Shadow){n.warn("fabric.Shadow is already defined.");return}n.Shadow=n.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(a){typeof a=="string"&&(a=this._parseShadow(a));for(var t in a)this[t]=a[t];this.id=n.Object.__uid++},_parseShadow:function(a){var t=a.trim(),i=n.Shadow.reOffsetsAndBlur.exec(t)||[],e=t.replace(n.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:e.trim(),offsetX:parseFloat(i[1],10)||0,offsetY:parseFloat(i[2],10)||0,blur:parseFloat(i[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(a){var t=40,i=40,e=n.Object.NUM_FRACTION_DIGITS,s=n.util.rotateVector({x:this.offsetX,y:this.offsetY},n.util.degreesToRadians(-a.angle)),h=20,r=new n.Color(this.color);return a.width&&a.height&&(t=l((Math.abs(s.x)+this.blur)/a.width,e)*100+h,i=l((Math.abs(s.y)+this.blur)/a.height,e)*100+h),a.flipX&&(s.x*=-1),a.flipY&&(s.y*=-1),'<filter id="SVGID_'+this.id+'" y="-'+i+'%" height="'+(100+2*i)+'%" x="-'+t+'%" width="'+(100+2*t)+`%" >
16
+ <feGaussianBlur in="SourceAlpha" stdDeviation="`+l(this.blur?this.blur/2:0,e)+`"></feGaussianBlur>
17
+ <feOffset dx="`+l(s.x,e)+'" dy="'+l(s.y,e)+`" result="oBlur" ></feOffset>
18
+ <feFlood flood-color="`+r.toRgb()+'" flood-opacity="'+r.getAlpha()+`"/>
19
+ <feComposite in2="oBlur" operator="in" />
20
+ <feMerge>
21
+ <feMergeNode></feMergeNode>
22
+ <feMergeNode in="SourceGraphic"></feMergeNode>
23
+ </feMerge>
24
+ </filter>
25
+ `},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var a={},t=n.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach(function(i){this[i]!==t[i]&&(a[i]=this[i])},this),a}}),n.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/})(d),(function(){if(o.StaticCanvas){o.warn("fabric.StaticCanvas is already defined.");return}var u=o.util.object.extend,n=o.util.getElementOffset,l=o.util.removeFromArray,a=o.util.toFixed,t=o.util.transformPoint,i=o.util.invertTransform,e=o.util.getNodeCanvas,s=o.util.createCanvasElement,h=new Error("Could not initialize `canvas` element");o.StaticCanvas=o.util.createClass(o.CommonMethods,{initialize:function(r,c){c||(c={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(r,c)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:o.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(r,c){var f=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(r),this._initOptions(c),this.interactive||this._initRetinaScaling(),c.overlayImage&&this.setOverlayImage(c.overlayImage,f),c.backgroundImage&&this.setBackgroundImage(c.backgroundImage,f),c.backgroundColor&&this.setBackgroundColor(c.backgroundColor,f),c.overlayColor&&this.setOverlayColor(c.overlayColor,f),this.calcOffset()},_isRetinaScaling:function(){return o.devicePixelRatio>1&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?Math.max(1,o.devicePixelRatio):1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var r=o.devicePixelRatio;this.__initRetinaScaling(r,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(r,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(r,c,f){c.setAttribute("width",this.width*r),c.setAttribute("height",this.height*r),f.scale(r,r)},calcOffset:function(){return this._offset=n(this.lowerCanvasEl),this},setOverlayImage:function(r,c,f){return this.__setBgOverlayImage("overlayImage",r,c,f)},setBackgroundImage:function(r,c,f){return this.__setBgOverlayImage("backgroundImage",r,c,f)},setOverlayColor:function(r,c){return this.__setBgOverlayColor("overlayColor",r,c)},setBackgroundColor:function(r,c){return this.__setBgOverlayColor("backgroundColor",r,c)},__setBgOverlayImage:function(r,c,f,g){return typeof c=="string"?o.util.loadImage(c,function(p,v){if(p){var _=new o.Image(p,g);this[r]=_,_.canvas=this}f&&f(p,v)},this,g&&g.crossOrigin):(g&&c.setOptions(g),this[r]=c,c&&(c.canvas=this),f&&f(c,!1)),this},__setBgOverlayColor:function(r,c,f){return this[r]=c,this._initGradient(c,r),this._initPattern(c,r,f),this},_createCanvasElement:function(){var r=s();if(!r||(r.style||(r.style={}),typeof r.getContext>"u"))throw h;return r},_initOptions:function(r){var c=this.lowerCanvasEl;this._setOptions(r),this.width=this.width||parseInt(c.width,10)||0,this.height=this.height||parseInt(c.height,10)||0,this.lowerCanvasEl.style&&(c.width=this.width,c.height=this.height,c.style.width=this.width+"px",c.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(r){r&&r.getContext?this.lowerCanvasEl=r:this.lowerCanvasEl=o.util.getById(r)||this._createCanvasElement(),o.util.addClass(this.lowerCanvasEl,"lower-canvas"),this._originalCanvasStyle=this.lowerCanvasEl.style,this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(r,c){return this.setDimensions({width:r},c)},setHeight:function(r,c){return this.setDimensions({height:r},c)},setDimensions:function(r,c){var f;c=c||{};for(var g in r)f=r[g],c.cssOnly||(this._setBackstoreDimension(g,r[g]),f+="px",this.hasLostContext=!0),c.backstoreOnly||this._setCssDimension(g,f);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop),this._initRetinaScaling(),this.calcOffset(),c.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(r,c){return this.lowerCanvasEl[r]=c,this.upperCanvasEl&&(this.upperCanvasEl[r]=c),this.cacheCanvasEl&&(this.cacheCanvasEl[r]=c),this[r]=c,this},_setCssDimension:function(r,c){return this.lowerCanvasEl.style[r]=c,this.upperCanvasEl&&(this.upperCanvasEl.style[r]=c),this.wrapperEl&&(this.wrapperEl.style[r]=c),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(r){var c=this._activeObject,f=this.backgroundImage,g=this.overlayImage,p,v,_;for(this.viewportTransform=r,v=0,_=this._objects.length;v<_;v++)p=this._objects[v],p.group||p.setCoords(!0);return c&&c.setCoords(),f&&f.setCoords(!0),g&&g.setCoords(!0),this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll(),this},zoomToPoint:function(r,c){var f=r,g=this.viewportTransform.slice(0);r=t(r,i(this.viewportTransform)),g[0]=c,g[3]=c;var p=t(r,g);return g[4]+=f.x-p.x,g[5]+=f.y-p.y,this.setViewportTransform(g)},setZoom:function(r){return this.zoomToPoint(new o.Point(0,0),r),this},absolutePan:function(r){var c=this.viewportTransform.slice(0);return c[4]=-r.x,c[5]=-r.y,this.setViewportTransform(c)},relativePan:function(r){return this.absolutePan(new o.Point(-r.x-this.viewportTransform[4],-r.y-this.viewportTransform[5]))},getElement:function(){return this.lowerCanvasEl},_onObjectAdded:function(r){this.stateful&&r.setupState(),r._set("canvas",this),r.setCoords(),this.fire("object:added",{target:r}),r.fire("added")},_onObjectRemoved:function(r){this.fire("object:removed",{target:r}),r.fire("removed"),delete r.canvas},clearContext:function(r){return r.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this.remove.apply(this,this.getObjects()),this.backgroundImage=null,this.overlayImage=null,this.backgroundColor="",this.overlayColor="",this._hasITextHandlers&&(this.off("mouse:up",this._mouseUpITextHandler),this._iTextInstances=null,this._hasITextHandlers=!1),this.clearContext(this.contextContainer),this.fire("canvas:cleared"),this.renderOnAddRemove&&this.requestRenderAll(),this},renderAll:function(){var r=this.contextContainer;return this.renderCanvas(r,this._objects),this},renderAndReset:function(){this.isRendering=0,this.renderAll()},requestRenderAll:function(){return this.isRendering||(this.isRendering=o.util.requestAnimFrame(this.renderAndResetBound)),this},calcViewportBoundaries:function(){var r={},c=this.width,f=this.height,g=i(this.viewportTransform);return r.tl=t({x:0,y:0},g),r.br=t({x:c,y:f},g),r.tr=new o.Point(r.br.x,r.tl.y),r.bl=new o.Point(r.tl.x,r.br.y),this.vptCoords=r,r},cancelRequestedRender:function(){this.isRendering&&(o.util.cancelAnimFrame(this.isRendering),this.isRendering=0)},renderCanvas:function(r,c){var f=this.viewportTransform,g=this.clipPath;this.cancelRequestedRender(),this.calcViewportBoundaries(),this.clearContext(r),o.util.setImageSmoothing(r,this.imageSmoothingEnabled),this.fire("before:render",{ctx:r}),this._renderBackground(r),r.save(),r.transform(f[0],f[1],f[2],f[3],f[4],f[5]),this._renderObjects(r,c),r.restore(),!this.controlsAboveOverlay&&this.interactive&&this.drawControls(r),g&&(g.canvas=this,g.shouldCache(),g._transformDone=!0,g.renderCache({forClipping:!0}),this.drawClipPathOnCanvas(r)),this._renderOverlay(r),this.controlsAboveOverlay&&this.interactive&&this.drawControls(r),this.fire("after:render",{ctx:r})},drawClipPathOnCanvas:function(r){var c=this.viewportTransform,f=this.clipPath;r.save(),r.transform(c[0],c[1],c[2],c[3],c[4],c[5]),r.globalCompositeOperation="destination-in",f.transform(r),r.scale(1/f.zoomX,1/f.zoomY),r.drawImage(f._cacheCanvas,-f.cacheTranslationX,-f.cacheTranslationY),r.restore()},_renderObjects:function(r,c){var f,g;for(f=0,g=c.length;f<g;++f)c[f]&&c[f].render(r)},_renderBackgroundOrOverlay:function(r,c){var f=this[c+"Color"],g=this[c+"Image"],p=this.viewportTransform,v=this[c+"Vpt"];if(!(!f&&!g)){if(f){r.save(),r.beginPath(),r.moveTo(0,0),r.lineTo(this.width,0),r.lineTo(this.width,this.height),r.lineTo(0,this.height),r.closePath(),r.fillStyle=f.toLive?f.toLive(r,this):f,v&&r.transform(p[0],p[1],p[2],p[3],p[4],p[5]),r.transform(1,0,0,1,f.offsetX||0,f.offsetY||0);var _=f.gradientTransform||f.patternTransform;_&&r.transform(_[0],_[1],_[2],_[3],_[4],_[5]),r.fill(),r.restore()}g&&(r.save(),v&&r.transform(p[0],p[1],p[2],p[3],p[4],p[5]),g.render(r),r.restore())}},_renderBackground:function(r){this._renderBackgroundOrOverlay(r,"background")},_renderOverlay:function(r){this._renderBackgroundOrOverlay(r,"overlay")},getCenter:function(){return{top:this.height/2,left:this.width/2}},getCenterPoint:function(){return new o.Point(this.width/2,this.height/2)},centerObjectH:function(r){return this._centerObject(r,new o.Point(this.getCenterPoint().x,r.getCenterPoint().y))},centerObjectV:function(r){return this._centerObject(r,new o.Point(r.getCenterPoint().x,this.getCenterPoint().y))},centerObject:function(r){var c=this.getCenterPoint();return this._centerObject(r,c)},viewportCenterObject:function(r){var c=this.getVpCenter();return this._centerObject(r,c)},viewportCenterObjectH:function(r){var c=this.getVpCenter();return this._centerObject(r,new o.Point(c.x,r.getCenterPoint().y)),this},viewportCenterObjectV:function(r){var c=this.getVpCenter();return this._centerObject(r,new o.Point(r.getCenterPoint().x,c.y))},getVpCenter:function(){var r=this.getCenterPoint(),c=i(this.viewportTransform);return t(r,c)},_centerObject:function(r,c){return r.setPositionByOrigin(c,"center","center"),r.setCoords(),this.renderOnAddRemove&&this.requestRenderAll(),this},toDatalessJSON:function(r){return this.toDatalessObject(r)},toObject:function(r){return this._toObjectMethod("toObject",r)},toDatalessObject:function(r){return this._toObjectMethod("toDatalessObject",r)},_toObjectMethod:function(r,c){var f=this.clipPath,g={version:o.version,objects:this._toObjects(r,c)};return f&&!f.excludeFromExport&&(g.clipPath=this._toObject(this.clipPath,r,c)),u(g,this.__serializeBgOverlay(r,c)),o.util.populateWithProperties(this,g,c),g},_toObjects:function(r,c){return this._objects.filter(function(f){return!f.excludeFromExport}).map(function(f){return this._toObject(f,r,c)},this)},_toObject:function(r,c,f){var g;this.includeDefaultValues||(g=r.includeDefaultValues,r.includeDefaultValues=!1);var p=r[c](f);return this.includeDefaultValues||(r.includeDefaultValues=g),p},__serializeBgOverlay:function(r,c){var f={},g=this.backgroundImage,p=this.overlayImage,v=this.backgroundColor,_=this.overlayColor;return v&&v.toObject?v.excludeFromExport||(f.background=v.toObject(c)):v&&(f.background=v),_&&_.toObject?_.excludeFromExport||(f.overlay=_.toObject(c)):_&&(f.overlay=_),g&&!g.excludeFromExport&&(f.backgroundImage=this._toObject(g,r,c)),p&&!p.excludeFromExport&&(f.overlayImage=this._toObject(p,r,c)),f},svgViewportTransformation:!0,toSVG:function(r,c){r||(r={}),r.reviver=c;var f=[];return this._setSVGPreamble(f,r),this._setSVGHeader(f,r),this.clipPath&&f.push('<g clip-path="url(#'+this.clipPath.clipPathId+`)" >
26
+ `),this._setSVGBgOverlayColor(f,"background"),this._setSVGBgOverlayImage(f,"backgroundImage",c),this._setSVGObjects(f,c),this.clipPath&&f.push(`</g>
27
+ `),this._setSVGBgOverlayColor(f,"overlay"),this._setSVGBgOverlayImage(f,"overlayImage",c),f.push("</svg>"),f.join("")},_setSVGPreamble:function(r,c){c.suppressPreamble||r.push('<?xml version="1.0" encoding="',c.encoding||"UTF-8",`" standalone="no" ?>
28
+ `,'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ',`"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
29
+ `)},_setSVGHeader:function(r,c){var f=c.width||this.width,g=c.height||this.height,p,v='viewBox="0 0 '+this.width+" "+this.height+'" ',_=o.Object.NUM_FRACTION_DIGITS;c.viewBox?v='viewBox="'+c.viewBox.x+" "+c.viewBox.y+" "+c.viewBox.width+" "+c.viewBox.height+'" ':this.svgViewportTransformation&&(p=this.viewportTransform,v='viewBox="'+a(-p[4]/p[0],_)+" "+a(-p[5]/p[3],_)+" "+a(this.width/p[0],_)+" "+a(this.height/p[3],_)+'" '),r.push("<svg ",'xmlns="http://www.w3.org/2000/svg" ','xmlns:xlink="http://www.w3.org/1999/xlink" ','version="1.1" ','width="',f,'" ','height="',g,'" ',v,`xml:space="preserve">
30
+ `,"<desc>Created with Fabric.js ",o.version,`</desc>
31
+ `,`<defs>
32
+ `,this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(c),`</defs>
33
+ `)},createSVGClipPathMarkup:function(r){var c=this.clipPath;return c?(c.clipPathId="CLIPPATH_"+o.Object.__uid++,'<clipPath id="'+c.clipPathId+`" >
34
+ `+this.clipPath.toClipPathSVG(r.reviver)+`</clipPath>
35
+ `):""},createSVGRefElementsMarkup:function(){var r=this,c=["background","overlay"].map(function(f){var g=r[f+"Color"];if(g&&g.toLive){var p=r[f+"Vpt"],v=r.viewportTransform,_={width:r.width/(p?v[0]:1),height:r.height/(p?v[3]:1)};return g.toSVG(_,{additionalTransform:p?o.util.matrixToSVG(v):""})}});return c.join("")},createSVGFontFacesMarkup:function(){var r="",c={},f,g,p,v,_,x,D,B,z,G=o.fontPaths,Q=[];for(this._objects.forEach(function q(K){Q.push(K),K._objects&&K._objects.forEach(q)}),B=0,z=Q.length;B<z;B++)if(f=Q[B],g=f.fontFamily,!(f.type.indexOf("text")===-1||c[g]||!G[g])&&(c[g]=!0,!!f.styles)){p=f.styles;for(_ in p){v=p[_];for(D in v)x=v[D],g=x.fontFamily,!c[g]&&G[g]&&(c[g]=!0)}}for(var Z in c)r+=[` @font-face {
36
+ `," font-family: '",Z,`';
37
+ `," src: url('",G[Z],`');
38
+ `,` }
39
+ `].join("");return r&&(r=[' <style type="text/css">',`<![CDATA[
40
+ `,r,"]]>",`</style>
41
+ `].join("")),r},_setSVGObjects:function(r,c){var f,g,p,v=this._objects;for(g=0,p=v.length;g<p;g++)f=v[g],!f.excludeFromExport&&this._setSVGObject(r,f,c)},_setSVGObject:function(r,c,f){r.push(c.toSVG(f))},_setSVGBgOverlayImage:function(r,c,f){this[c]&&!this[c].excludeFromExport&&this[c].toSVG&&r.push(this[c].toSVG(f))},_setSVGBgOverlayColor:function(r,c){var f=this[c+"Color"],g=this.viewportTransform,p=this.width,v=this.height;if(f)if(f.toLive){var _=f.repeat,x=o.util.invertTransform(g),D=this[c+"Vpt"],B=D?o.util.matrixToSVG(x):"";r.push('<rect transform="'+B+" translate(",p/2,",",v/2,')"',' x="',f.offsetX-p/2,'" y="',f.offsetY-v/2,'" ','width="',_==="repeat-y"||_==="no-repeat"?f.source.width:p,'" height="',_==="repeat-x"||_==="no-repeat"?f.source.height:v,'" fill="url(#SVGID_'+f.id+')"',`></rect>
42
+ `)}else r.push('<rect x="0" y="0" width="100%" height="100%" ','fill="',f,'"',`></rect>
43
+ `)},sendToBack:function(r){if(!r)return this;var c=this._activeObject,f,g,p;if(r===c&&r.type==="activeSelection")for(p=c._objects,f=p.length;f--;)g=p[f],l(this._objects,g),this._objects.unshift(g);else l(this._objects,r),this._objects.unshift(r);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(r){if(!r)return this;var c=this._activeObject,f,g,p;if(r===c&&r.type==="activeSelection")for(p=c._objects,f=0;f<p.length;f++)g=p[f],l(this._objects,g),this._objects.push(g);else l(this._objects,r),this._objects.push(r);return this.renderOnAddRemove&&this.requestRenderAll(),this},sendBackwards:function(r,c){if(!r)return this;var f=this._activeObject,g,p,v,_,x,D=0;if(r===f&&r.type==="activeSelection")for(x=f._objects,g=0;g<x.length;g++)p=x[g],v=this._objects.indexOf(p),v>0+D&&(_=v-1,l(this._objects,p),this._objects.splice(_,0,p)),D++;else v=this._objects.indexOf(r),v!==0&&(_=this._findNewLowerIndex(r,v,c),l(this._objects,r),this._objects.splice(_,0,r));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(r,c,f){var g,p;if(f)for(g=c,p=c-1;p>=0;--p){var v=r.intersectsWithObject(this._objects[p])||r.isContainedWithinObject(this._objects[p])||this._objects[p].isContainedWithinObject(r);if(v){g=p;break}}else g=c-1;return g},bringForward:function(r,c){if(!r)return this;var f=this._activeObject,g,p,v,_,x,D=0;if(r===f&&r.type==="activeSelection")for(x=f._objects,g=x.length;g--;)p=x[g],v=this._objects.indexOf(p),v<this._objects.length-1-D&&(_=v+1,l(this._objects,p),this._objects.splice(_,0,p)),D++;else v=this._objects.indexOf(r),v!==this._objects.length-1&&(_=this._findNewUpperIndex(r,v,c),l(this._objects,r),this._objects.splice(_,0,r));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewUpperIndex:function(r,c,f){var g,p,v;if(f)for(g=c,p=c+1,v=this._objects.length;p<v;++p){var _=r.intersectsWithObject(this._objects[p])||r.isContainedWithinObject(this._objects[p])||this._objects[p].isContainedWithinObject(r);if(_){g=p;break}}else g=c+1;return g},moveTo:function(r,c){return l(this._objects,r),this._objects.splice(c,0,r),this.renderOnAddRemove&&this.requestRenderAll()},dispose:function(){return this.isRendering&&(o.util.cancelAnimFrame(this.isRendering),this.isRendering=0),this.forEachObject(function(r){r.dispose&&r.dispose()}),this._objects=[],this.backgroundImage&&this.backgroundImage.dispose&&this.backgroundImage.dispose(),this.backgroundImage=null,this.overlayImage&&this.overlayImage.dispose&&this.overlayImage.dispose(),this.overlayImage=null,this._iTextInstances=null,this.contextContainer=null,this.lowerCanvasEl.classList.remove("lower-canvas"),o.util.setStyle(this.lowerCanvasEl,this._originalCanvasStyle),delete this._originalCanvasStyle,this.lowerCanvasEl.setAttribute("width",this.width),this.lowerCanvasEl.setAttribute("height",this.height),o.util.cleanUpJsdomNode(this.lowerCanvasEl),this.lowerCanvasEl=void 0,this},toString:function(){return"#<fabric.Canvas ("+this.complexity()+"): { objects: "+this._objects.length+" }>"}}),u(o.StaticCanvas.prototype,o.Observable),u(o.StaticCanvas.prototype,o.Collection),u(o.StaticCanvas.prototype,o.DataURLExporter),u(o.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(r){var c=s();if(!c||!c.getContext)return null;var f=c.getContext("2d");if(!f)return null;switch(r){case"setLineDash":return typeof f.setLineDash<"u";default:return null}}}),o.StaticCanvas.prototype.toJSON=o.StaticCanvas.prototype.toObject,o.isLikelyNode&&(o.StaticCanvas.prototype.createPNGStream=function(){var r=e(this.lowerCanvasEl);return r&&r.createPNGStream()},o.StaticCanvas.prototype.createJPEGStream=function(r){var c=e(this.lowerCanvasEl);return c&&c.createJPEGStream(r)})})(),o.BaseBrush=o.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(u){u.strokeStyle=this.color,u.lineWidth=this.width,u.lineCap=this.strokeLineCap,u.miterLimit=this.strokeMiterLimit,u.lineJoin=this.strokeLineJoin,u.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(u){var n=this.canvas.viewportTransform;u.save(),u.transform(n[0],n[1],n[2],n[3],n[4],n[5])},_setShadow:function(){if(this.shadow){var u=this.canvas,n=this.shadow,l=u.contextTop,a=u.getZoom();u&&u._isRetinaScaling()&&(a*=o.devicePixelRatio),l.shadowColor=n.color,l.shadowBlur=n.blur*a,l.shadowOffsetX=n.offsetX*a,l.shadowOffsetY=n.offsetY*a}},needsFullRender:function(){var u=new o.Color(this.color);return u.getAlpha()<1||!!this.shadow},_resetShadow:function(){var u=this.canvas.contextTop;u.shadowColor="",u.shadowBlur=u.shadowOffsetX=u.shadowOffsetY=0},_isOutSideCanvas:function(u){return u.x<0||u.x>this.canvas.getWidth()||u.y<0||u.y>this.canvas.getHeight()}}),(function(){o.PencilBrush=o.util.createClass(o.BaseBrush,{decimate:.4,drawStraightLine:!1,straightLineKey:"shiftKey",initialize:function(u){this.canvas=u,this._points=[]},needsFullRender:function(){return this.callSuper("needsFullRender")||this._hasStraightLine},_drawSegment:function(u,n,l){var a=n.midPointFrom(l);return u.quadraticCurveTo(n.x,n.y,a.x,a.y),a},onMouseDown:function(u,n){this.canvas._isMainEvent(n.e)&&(this.drawStraightLine=n.e[this.straightLineKey],this._prepareForDrawing(u),this._captureDrawingPath(u),this._render())},onMouseMove:function(u,n){if(this.canvas._isMainEvent(n.e)&&(this.drawStraightLine=n.e[this.straightLineKey],!(this.limitedToCanvasSize===!0&&this._isOutSideCanvas(u))&&this._captureDrawingPath(u)&&this._points.length>1))if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var l=this._points,a=l.length,t=this.canvas.contextTop;this._saveAndTransform(t),this.oldEnd&&(t.beginPath(),t.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(t,l[a-2],l[a-1],!0),t.stroke(),t.restore()}},onMouseUp:function(u){return this.canvas._isMainEvent(u.e)?(this.drawStraightLine=!1,this.oldEnd=void 0,this._finalizeAndAddPath(),!1):!0},_prepareForDrawing:function(u){var n=new o.Point(u.x,u.y);this._reset(),this._addPoint(n),this.canvas.contextTop.moveTo(n.x,n.y)},_addPoint:function(u){return this._points.length>1&&u.eq(this._points[this._points.length-1])?!1:(this.drawStraightLine&&this._points.length>1&&(this._hasStraightLine=!0,this._points.pop()),this._points.push(u),!0)},_reset:function(){this._points=[],this._setBrushStyles(this.canvas.contextTop),this._setShadow(),this._hasStraightLine=!1},_captureDrawingPath:function(u){var n=new o.Point(u.x,u.y);return this._addPoint(n)},_render:function(u){var n,l,a=this._points[0],t=this._points[1];if(u=u||this.canvas.contextTop,this._saveAndTransform(u),u.beginPath(),this._points.length===2&&a.x===t.x&&a.y===t.y){var i=this.width/1e3;a=new o.Point(a.x,a.y),t=new o.Point(t.x,t.y),a.x-=i,t.x+=i}for(u.moveTo(a.x,a.y),n=1,l=this._points.length;n<l;n++)this._drawSegment(u,a,t),a=this._points[n],t=this._points[n+1];u.lineTo(a.x,a.y),u.stroke(),u.restore()},convertPointsToSVGPath:function(u){var n=this.width/1e3;return o.util.getSmoothPathFromPoints(u,n)},_isEmptySVGPath:function(u){var n=o.util.joinPath(u);return n==="M 0 0 Q 0 0 0 0 L 0 0"},createPath:function(u){var n=new o.Path(u,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeMiterLimit:this.strokeMiterLimit,strokeLineJoin:this.strokeLineJoin,strokeDashArray:this.strokeDashArray});return this.shadow&&(this.shadow.affectStroke=!0,n.shadow=new o.Shadow(this.shadow)),n},decimatePoints:function(u,n){if(u.length<=2)return u;var l=this.canvas.getZoom(),a=Math.pow(n/l,2),t,i=u.length-1,e=u[0],s=[e],h;for(t=1;t<i-1;t++)h=Math.pow(e.x-u[t].x,2)+Math.pow(e.y-u[t].y,2),h>=a&&(e=u[t],s.push(e));return s.push(u[i]),s},_finalizeAndAddPath:function(){var u=this.canvas.contextTop;u.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var n=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(n)){this.canvas.requestRenderAll();return}var l=this.createPath(n);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:l}),this.canvas.add(l),this.canvas.requestRenderAll(),l.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:l})}})})(),o.CircleBrush=o.util.createClass(o.BaseBrush,{width:10,initialize:function(u){this.canvas=u,this.points=[]},drawDot:function(u){var n=this.addPoint(u),l=this.canvas.contextTop;this._saveAndTransform(l),this.dot(l,n),l.restore()},dot:function(u,n){u.fillStyle=n.fill,u.beginPath(),u.arc(n.x,n.y,n.radius,0,Math.PI*2,!1),u.closePath(),u.fill()},onMouseDown:function(u){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(u)},_render:function(){var u=this.canvas.contextTop,n,l,a=this.points;for(this._saveAndTransform(u),n=0,l=a.length;n<l;n++)this.dot(u,a[n]);u.restore()},onMouseMove:function(u){this.limitedToCanvasSize===!0&&this._isOutSideCanvas(u)||(this.needsFullRender()?(this.canvas.clearContext(this.canvas.contextTop),this.addPoint(u),this._render()):this.drawDot(u))},onMouseUp:function(){var u=this.canvas.renderOnAddRemove,n,l;this.canvas.renderOnAddRemove=!1;var a=[];for(n=0,l=this.points.length;n<l;n++){var t=this.points[n],i=new o.Circle({radius:t.radius,left:t.x,top:t.y,originX:"center",originY:"center",fill:t.fill});this.shadow&&(i.shadow=new o.Shadow(this.shadow)),a.push(i)}var e=new o.Group(a);e.canvas=this.canvas,this.canvas.fire("before:path:created",{path:e}),this.canvas.add(e),this.canvas.fire("path:created",{path:e}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=u,this.canvas.requestRenderAll()},addPoint:function(u){var n=new o.Point(u.x,u.y),l=o.util.getRandomInt(Math.max(0,this.width-20),this.width+20)/2,a=new o.Color(this.color).setAlpha(o.util.getRandomInt(0,100)/100).toRgba();return n.radius=l,n.fill=a,this.points.push(n),n}}),o.SprayBrush=o.util.createClass(o.BaseBrush,{width:10,density:20,dotWidth:1,dotWidthVariance:1,randomOpacity:!1,optimizeOverlapping:!0,initialize:function(u){this.canvas=u,this.sprayChunks=[]},onMouseDown:function(u){this.sprayChunks.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(u),this.render(this.sprayChunkPoints)},onMouseMove:function(u){this.limitedToCanvasSize===!0&&this._isOutSideCanvas(u)||(this.addSprayChunk(u),this.render(this.sprayChunkPoints))},onMouseUp:function(){var u=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;for(var n=[],l=0,a=this.sprayChunks.length;l<a;l++)for(var t=this.sprayChunks[l],i=0,e=t.length;i<e;i++){var s=new o.Rect({width:t[i].width,height:t[i].width,left:t[i].x+1,top:t[i].y+1,originX:"center",originY:"center",fill:this.color});n.push(s)}this.optimizeOverlapping&&(n=this._getOptimizedRects(n));var h=new o.Group(n);this.shadow&&h.set("shadow",new o.Shadow(this.shadow)),this.canvas.fire("before:path:created",{path:h}),this.canvas.add(h),this.canvas.fire("path:created",{path:h}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=u,this.canvas.requestRenderAll()},_getOptimizedRects:function(u){var n={},l,a,t;for(a=0,t=u.length;a<t;a++)l=u[a].left+""+u[a].top,n[l]||(n[l]=u[a]);var i=[];for(l in n)i.push(n[l]);return i},render:function(u){var n=this.canvas.contextTop,l,a;for(n.fillStyle=this.color,this._saveAndTransform(n),l=0,a=u.length;l<a;l++){var t=u[l];typeof t.opacity<"u"&&(n.globalAlpha=t.opacity),n.fillRect(t.x,t.y,t.width,t.width)}n.restore()},_render:function(){var u=this.canvas.contextTop,n,l;for(u.fillStyle=this.color,this._saveAndTransform(u),n=0,l=this.sprayChunks.length;n<l;n++)this.render(this.sprayChunks[n]);u.restore()},addSprayChunk:function(u){this.sprayChunkPoints=[];var n,l,a,t=this.width/2,i;for(i=0;i<this.density;i++){n=o.util.getRandomInt(u.x-t,u.x+t),l=o.util.getRandomInt(u.y-t,u.y+t),this.dotWidthVariance?a=o.util.getRandomInt(Math.max(1,this.dotWidth-this.dotWidthVariance),this.dotWidth+this.dotWidthVariance):a=this.dotWidth;var e=new o.Point(n,l);e.width=a,this.randomOpacity&&(e.opacity=o.util.getRandomInt(0,100)/100),this.sprayChunkPoints.push(e)}this.sprayChunks.push(this.sprayChunkPoints)}}),o.PatternBrush=o.util.createClass(o.PencilBrush,{getPatternSrc:function(){var u=20,n=5,l=o.util.createCanvasElement(),a=l.getContext("2d");return l.width=l.height=u+n,a.fillStyle=this.color,a.beginPath(),a.arc(u/2,u/2,u/2,0,Math.PI*2,!1),a.closePath(),a.fill(),l},getPatternSrcFunction:function(){return String(this.getPatternSrc).replace("this.color",'"'+this.color+'"')},getPattern:function(u){return u.createPattern(this.source||this.getPatternSrc(),"repeat")},_setBrushStyles:function(u){this.callSuper("_setBrushStyles",u),u.strokeStyle=this.getPattern(u)},createPath:function(u){var n=this.callSuper("createPath",u),l=n._getLeftTopCoords().scalarAdd(n.strokeWidth/2);return n.stroke=new o.Pattern({source:this.source||this.getPatternSrcFunction(),offsetX:-l.x,offsetY:-l.y}),n}}),(function(){var u=o.util.getPointer,n=o.util.degreesToRadians,l=o.util.isTouchEvent;o.Canvas=o.util.createClass(o.StaticCanvas,{initialize:function(t,i){i||(i={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,i),this._initInteractive(),this._createCacheCanvas()},uniformScaling:!0,uniScaleKey:"shiftKey",centeredScaling:!1,centeredRotation:!1,centeredKey:"altKey",altActionKey:"shiftKey",interactive:!0,selection:!0,selectionKey:"shiftKey",altSelectionKey:null,selectionColor:"rgba(100, 100, 255, 0.3)",selectionDashArray:[],selectionBorderColor:"rgba(255, 255, 255, 0.3)",selectionLineWidth:1,selectionFullyContained:!1,hoverCursor:"move",moveCursor:"move",defaultCursor:"default",freeDrawingCursor:"crosshair",notAllowedCursor:"not-allowed",containerClass:"canvas-container",perPixelTargetFind:!1,targetFindTolerance:0,skipTargetFind:!1,isDrawingMode:!1,preserveObjectStacking:!1,snapAngle:0,snapThreshold:null,stopContextMenu:!1,fireRightClick:!1,fireMiddleClick:!1,targets:[],enablePointerEvents:!1,_hoveredTarget:null,_hoveredTargets:[],_initInteractive:function(){this._currentTransform=null,this._groupSelector=null,this._initWrapperElement(),this._createUpperCanvas(),this._initEventListeners(),this._initRetinaScaling(),this.freeDrawingBrush=o.PencilBrush&&new o.PencilBrush(this),this.calcOffset()},_chooseObjectsToRender:function(){var t=this.getActiveObjects(),i,e,s;if(t.length>0&&!this.preserveObjectStacking){e=[],s=[];for(var h=0,r=this._objects.length;h<r;h++)i=this._objects[h],t.indexOf(i)===-1?e.push(i):s.push(i);t.length>1&&(this._activeObject._objects=s),e.push.apply(e,s)}else e=this._objects;return e},renderAll:function(){this.contextTopDirty&&!this._groupSelector&&!this.isDrawingMode&&(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1);var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this},renderTopLayer:function(t){t.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(t),this.contextTopDirty=!0),t.restore()},renderTop:function(){var t=this.contextTop;return this.clearContext(t),this.renderTopLayer(t),this.fire("after:render"),this},_normalizePointer:function(t,i){var e=t.calcTransformMatrix(),s=o.util.invertTransform(e),h=this.restorePointerVpt(i);return o.util.transformPoint(h,s)},isTargetTransparent:function(t,i,e){if(t.shouldCache()&&t._cacheCanvas&&t!==this._activeObject){var s=this._normalizePointer(t,{x:i,y:e}),h=Math.max(t.cacheTranslationX+s.x*t.zoomX,0),r=Math.max(t.cacheTranslationY+s.y*t.zoomY,0),p=o.util.isTransparent(t._cacheContext,Math.round(h),Math.round(r),this.targetFindTolerance);return p}var c=this.contextCache,f=t.selectionBackgroundColor,g=this.viewportTransform;t.selectionBackgroundColor="",this.clearContext(c),c.save(),c.transform(g[0],g[1],g[2],g[3],g[4],g[5]),t.render(c),c.restore(),t.selectionBackgroundColor=f;var p=o.util.isTransparent(c,i,e,this.targetFindTolerance);return p},_isSelectionKeyPressed:function(t){var i=!1;return Array.isArray(this.selectionKey)?i=!!this.selectionKey.find(function(e){return t[e]===!0}):i=t[this.selectionKey],i},_shouldClearSelection:function(t,i){var e=this.getActiveObjects(),s=this._activeObject;return!i||i&&s&&e.length>1&&e.indexOf(i)===-1&&s!==i&&!this._isSelectionKeyPressed(t)||i&&!i.evented||i&&!i.selectable&&s&&s!==i},_shouldCenterTransform:function(t,i,e){if(t){var s;return i==="scale"||i==="scaleX"||i==="scaleY"||i==="resizing"?s=this.centeredScaling||t.centeredScaling:i==="rotate"&&(s=this.centeredRotation||t.centeredRotation),s?!e:e}},_getOriginFromCorner:function(t,i){var e={x:t.originX,y:t.originY};return i==="ml"||i==="tl"||i==="bl"?e.x="right":(i==="mr"||i==="tr"||i==="br")&&(e.x="left"),i==="tl"||i==="mt"||i==="tr"?e.y="bottom":(i==="bl"||i==="mb"||i==="br")&&(e.y="top"),e},_getActionFromCorner:function(t,i,e,s){if(!i||!t)return"drag";var h=s.controls[i];return h.getActionName(e,h,s)},_setupCurrentTransform:function(t,i,e){if(i){var s=this.getPointer(t),h=i.__corner,r=i.controls[h],c=e&&h?r.getActionHandler(t,i,r):o.controlsUtils.dragHandler,f=this._getActionFromCorner(e,h,t,i),g=this._getOriginFromCorner(i,h),p=t[this.centeredKey],v={target:i,action:f,actionHandler:c,corner:h,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:s.x-i.left,offsetY:s.y-i.top,originX:g.x,originY:g.y,ex:s.x,ey:s.y,lastX:s.x,lastY:s.y,theta:n(i.angle),width:i.width*i.scaleX,shiftKey:t.shiftKey,altKey:p,original:o.util.saveObjectTransform(i)};this._shouldCenterTransform(i,f,p)&&(v.originX="center",v.originY="center"),v.original.originX=g.x,v.original.originY=g.y,this._currentTransform=v,this._beforeTransform(t)}},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_drawSelection:function(t){var i=this._groupSelector,e=new o.Point(i.ex,i.ey),s=o.util.transformPoint(e,this.viewportTransform),h=new o.Point(i.ex+i.left,i.ey+i.top),r=o.util.transformPoint(h,this.viewportTransform),c=Math.min(s.x,r.x),f=Math.min(s.y,r.y),g=Math.max(s.x,r.x),p=Math.max(s.y,r.y),v=this.selectionLineWidth/2;this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(c,f,g-c,p-f)),!(!this.selectionLineWidth||!this.selectionBorderColor)&&(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,c+=v,f+=v,g-=v,p-=v,o.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(c,f,g-c,p-f))},findTarget:function(t,i){if(!this.skipTargetFind){var e=!0,s=this.getPointer(t,e),h=this._activeObject,r=this.getActiveObjects(),c,f,g=l(t),p=r.length>1&&!i||r.length===1;if(this.targets=[],p&&h._findTargetCorner(s,g)||r.length>1&&!i&&h===this._searchPossibleTargets([h],s))return h;if(r.length===1&&h===this._searchPossibleTargets([h],s))if(this.preserveObjectStacking)c=h,f=this.targets,this.targets=[];else return h;var v=this._searchPossibleTargets(this._objects,s);return t[this.altSelectionKey]&&v&&c&&v!==c&&(v=c,this.targets=f),v}},_checkTarget:function(t,i,e){if(i&&i.visible&&i.evented&&i.containsPoint(t))if((this.perPixelTargetFind||i.perPixelTargetFind)&&!i.isEditing){var s=this.isTargetTransparent(i,e.x,e.y);if(!s)return!0}else return!0},_searchPossibleTargets:function(t,i){for(var e,s=t.length,h;s--;){var r=t[s],c=r.group?this._normalizePointer(r.group,i):i;if(this._checkTarget(c,r,i)){e=t[s],e.subTargetCheck&&e instanceof o.Group&&(h=this._searchPossibleTargets(e._objects,i),h&&this.targets.push(h));break}}return e},restorePointerVpt:function(t){return o.util.transformPoint(t,o.util.invertTransform(this.viewportTransform))},getPointer:function(t,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var e=u(t),s=this.upperCanvasEl,h=s.getBoundingClientRect(),r=h.width||0,c=h.height||0,f;(!r||!c)&&("top"in h&&"bottom"in h&&(c=Math.abs(h.top-h.bottom)),"right"in h&&"left"in h&&(r=Math.abs(h.right-h.left))),this.calcOffset(),e.x=e.x-this._offset.left,e.y=e.y-this._offset.top,i||(e=this.restorePointerVpt(e));var g=this.getRetinaScaling();return g!==1&&(e.x/=g,e.y/=g),r===0||c===0?f={width:1,height:1}:f={width:s.width/r,height:s.height/c},{x:e.x*f.width,y:e.y*f.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),i=this.lowerCanvasEl,e=this.upperCanvasEl;e?e.className="":(e=this._createCanvasElement(),this.upperCanvasEl=e),o.util.addClass(e,"upper-canvas "+t),this.wrapperEl.appendChild(e),this._copyCanvasStyle(i,e),this._applyCanvasStyle(e),this.contextTop=e.getContext("2d")},getTopContext:function(){return this.contextTop},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=o.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),o.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),o.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var i=this.width||t.width,e=this.height||t.height;o.util.setStyle(t,{position:"absolute",width:i+"px",height:e+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),t.width=i,t.height=e,o.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,i){i.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var t=this._activeObject;return t?t.type==="activeSelection"&&t._objects?t._objects.slice(0):[t]:[]},_onObjectRemoved:function(t){t===this._activeObject&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),t===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",t)},_fireSelectionEvents:function(t,i){var e=!1,s=this.getActiveObjects(),h=[],r=[];t.forEach(function(c){s.indexOf(c)===-1&&(e=!0,c.fire("deselected",{e:i,target:c}),r.push(c))}),s.forEach(function(c){t.indexOf(c)===-1&&(e=!0,c.fire("selected",{e:i,target:c}),h.push(c))}),t.length>0&&s.length>0?e&&this.fire("selection:updated",{e:i,selected:h,deselected:r}):s.length>0?this.fire("selection:created",{e:i,selected:h}):t.length>0&&this.fire("selection:cleared",{e:i,deselected:r})},setActiveObject:function(t,i){var e=this.getActiveObjects();return this._setActiveObject(t,i),this._fireSelectionEvents(e,i),this},_setActiveObject:function(t,i){return this._activeObject===t||!this._discardActiveObject(i,t)||t.onSelect({e:i})?!1:(this._activeObject=t,!0)},_discardActiveObject:function(t,i){var e=this._activeObject;if(e){if(e.onDeselect({e:t,object:i}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var i=this.getActiveObjects(),e=this.getActiveObject();return i.length&&this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(t),this._fireSelectionEvents(i,t),this},dispose:function(){var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach((function(i){o.util.cleanUpJsdomNode(this[i]),this[i]=void 0}).bind(this)),t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,o.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var i=this._activeObject;i&&i._renderControls(t)},_toObject:function(t,i,e){var s=this._realizeGroupTransformOnObject(t),h=this.callSuper("_toObject",t,i,e);return this._unwindGroupTransformOnObject(t,s),h},_realizeGroupTransformOnObject:function(t){if(t.group&&t.group.type==="activeSelection"&&this._activeObject===t.group){var i=["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"],e={};return i.forEach(function(s){e[s]=t[s]}),o.util.addTransformToObject(t,this._activeObject.calcOwnMatrix()),e}else return null},_unwindGroupTransformOnObject:function(t,i){i&&t.set(i)},_setSVGObject:function(t,i,e){var s=this._realizeGroupTransformOnObject(i);this.callSuper("_setSVGObject",t,i,e),this._unwindGroupTransformOnObject(i,s)},setViewportTransform:function(t){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),o.StaticCanvas.prototype.setViewportTransform.call(this,t)}});for(var a in o.StaticCanvas)a!=="prototype"&&(o.Canvas[a]=o.StaticCanvas[a])})(),(function(){var u=o.util.addListener,n=o.util.removeListener,l=3,a=2,t=1,i={passive:!1};function e(s,h){return s.button&&s.button===h-1}o.util.object.extend(o.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(u,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(s,h){var r=this.upperCanvasEl,c=this._getEventPrefix();s(o.window,"resize",this._onResize),s(r,c+"down",this._onMouseDown),s(r,c+"move",this._onMouseMove,i),s(r,c+"out",this._onMouseOut),s(r,c+"enter",this._onMouseEnter),s(r,"wheel",this._onMouseWheel),s(r,"contextmenu",this._onContextMenu),s(r,"dblclick",this._onDoubleClick),s(r,"dragover",this._onDragOver),s(r,"dragenter",this._onDragEnter),s(r,"dragleave",this._onDragLeave),s(r,"drop",this._onDrop),this.enablePointerEvents||s(r,"touchstart",this._onTouchStart,i),typeof eventjs<"u"&&h in eventjs&&(eventjs[h](r,"gesture",this._onGesture),eventjs[h](r,"drag",this._onDrag),eventjs[h](r,"orientation",this._onOrientationChange),eventjs[h](r,"shake",this._onShake),eventjs[h](r,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(n,"remove");var s=this._getEventPrefix();n(o.document,s+"up",this._onMouseUp),n(o.document,"touchend",this._onTouchEnd,i),n(o.document,s+"move",this._onMouseMove,i),n(o.document,"touchmove",this._onMouseMove,i)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._onDrop.bind(this),this.eventsBound=!0)},_onGesture:function(s,h){this.__onTransformGesture&&this.__onTransformGesture(s,h)},_onDrag:function(s,h){this.__onDrag&&this.__onDrag(s,h)},_onMouseWheel:function(s){this.__onMouseWheel(s)},_onMouseOut:function(s){var h=this._hoveredTarget;this.fire("mouse:out",{target:h,e:s}),this._hoveredTarget=null,h&&h.fire("mouseout",{e:s});var r=this;this._hoveredTargets.forEach(function(c){r.fire("mouse:out",{target:h,e:s}),c&&h.fire("mouseout",{e:s})}),this._hoveredTargets=[]},_onMouseEnter:function(s){!this._currentTransform&&!this.findTarget(s)&&(this.fire("mouse:over",{target:null,e:s}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(s,h){this.__onOrientationChange&&this.__onOrientationChange(s,h)},_onShake:function(s,h){this.__onShake&&this.__onShake(s,h)},_onLongPress:function(s,h){this.__onLongPress&&this.__onLongPress(s,h)},_onDragOver:function(s){s.preventDefault();var h=this._simpleEventHandler("dragover",s);this._fireEnterLeaveEvents(h,s)},_onDrop:function(s){return this._simpleEventHandler("drop:before",s),this._simpleEventHandler("drop",s)},_onContextMenu:function(s){return this.stopContextMenu&&(s.stopPropagation(),s.preventDefault()),!1},_onDoubleClick:function(s){this._cacheTransformEventData(s),this._handleEvent(s,"dblclick"),this._resetTransformEventData(s)},getPointerId:function(s){var h=s.changedTouches;return h?h[0]&&h[0].identifier:this.enablePointerEvents?s.pointerId:-1},_isMainEvent:function(s){return s.isPrimary===!0?!0:s.isPrimary===!1?!1:s.type==="touchend"&&s.touches.length===0?!0:s.changedTouches?s.changedTouches[0].identifier===this.mainTouchId:!0},_onTouchStart:function(s){s.preventDefault(),this.mainTouchId===null&&(this.mainTouchId=this.getPointerId(s)),this.__onMouseDown(s),this._resetTransformEventData();var h=this.upperCanvasEl,r=this._getEventPrefix();u(o.document,"touchend",this._onTouchEnd,i),u(o.document,"touchmove",this._onMouseMove,i),n(h,r+"down",this._onMouseDown)},_onMouseDown:function(s){this.__onMouseDown(s),this._resetTransformEventData();var h=this.upperCanvasEl,r=this._getEventPrefix();n(h,r+"move",this._onMouseMove,i),u(o.document,r+"up",this._onMouseUp),u(o.document,r+"move",this._onMouseMove,i)},_onTouchEnd:function(s){if(!(s.touches.length>0)){this.__onMouseUp(s),this._resetTransformEventData(),this.mainTouchId=null;var h=this._getEventPrefix();n(o.document,"touchend",this._onTouchEnd,i),n(o.document,"touchmove",this._onMouseMove,i);var r=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(function(){u(r.upperCanvasEl,h+"down",r._onMouseDown),r._willAddMouseDown=0},400)}},_onMouseUp:function(s){this.__onMouseUp(s),this._resetTransformEventData();var h=this.upperCanvasEl,r=this._getEventPrefix();this._isMainEvent(s)&&(n(o.document,r+"up",this._onMouseUp),n(o.document,r+"move",this._onMouseMove,i),u(h,r+"move",this._onMouseMove,i))},_onMouseMove:function(s){!this.allowTouchScrolling&&s.preventDefault&&s.preventDefault(),this.__onMouseMove(s)},_onResize:function(){this.calcOffset()},_shouldRender:function(s){var h=this._activeObject;return!!h!=!!s||h&&s&&h!==s?!0:(h&&h.isEditing,!1)},__onMouseUp:function(s){var h,r=this._currentTransform,c=this._groupSelector,f=!1,g=!c||c.left===0&&c.top===0;if(this._cacheTransformEventData(s),h=this._target,this._handleEvent(s,"up:before"),e(s,l)){this.fireRightClick&&this._handleEvent(s,"up",l,g);return}if(e(s,a)){this.fireMiddleClick&&this._handleEvent(s,"up",a,g),this._resetTransformEventData();return}if(this.isDrawingMode&&this._isCurrentlyDrawing){this._onMouseUpInDrawingMode(s);return}if(this._isMainEvent(s)){if(r&&(this._finalizeCurrentTransform(s),f=r.actionPerformed),!g){var p=h===this._activeObject;this._maybeGroupObjects(s),f||(f=this._shouldRender(h)||!p&&h===this._activeObject)}var v,_;if(h){if(v=h._findTargetCorner(this.getPointer(s,!0),o.util.isTouchEvent(s)),h.selectable&&h!==this._activeObject&&h.activeOn==="up")this.setActiveObject(h,s),f=!0;else{var x=h.controls[v],D=x&&x.getMouseUpHandler(s,h,x);D&&(_=this.getPointer(s),D(s,r,_.x,_.y))}h.isMoving=!1}if(r&&(r.target!==h||r.corner!==v)){var B=r.target&&r.target.controls[r.corner],z=B&&B.getMouseUpHandler(s,h,x);_=_||this.getPointer(s),z&&z(s,r,_.x,_.y)}this._setCursorFromEvent(s,h),this._handleEvent(s,"up",t,g),this._groupSelector=null,this._currentTransform=null,h&&(h.__corner=0),f?this.requestRenderAll():g||this.renderTop()}},_simpleEventHandler:function(s,h){var r=this.findTarget(h),c=this.targets,f={e:h,target:r,subTargets:c};if(this.fire(s,f),r&&r.fire(s,f),!c)return r;for(var g=0;g<c.length;g++)c[g].fire(s,f);return r},_handleEvent:function(s,h,r,c){var f=this._target,g=this.targets||[],p={e:s,target:f,subTargets:g,button:r||t,isClick:c||!1,pointer:this._pointer,absolutePointer:this._absolutePointer,transform:this._currentTransform};h==="up"&&(p.currentTarget=this.findTarget(s),p.currentSubTargets=this.targets),this.fire("mouse:"+h,p),f&&f.fire("mouse"+h,p);for(var v=0;v<g.length;v++)g[v].fire("mouse"+h,p)},_finalizeCurrentTransform:function(s){var h=this._currentTransform,r=h.target,c={e:s,target:r,transform:h,action:h.action};r._scaling&&(r._scaling=!1),r.setCoords(),(h.actionPerformed||this.stateful&&r.hasStateChanged())&&this._fire("modified",c)},_onMouseDownInDrawingMode:function(s){this._isCurrentlyDrawing=!0,this.getActiveObject()&&this.discardActiveObject(s).requestRenderAll();var h=this.getPointer(s);this.freeDrawingBrush.onMouseDown(h,{e:s,pointer:h}),this._handleEvent(s,"down")},_onMouseMoveInDrawingMode:function(s){if(this._isCurrentlyDrawing){var h=this.getPointer(s);this.freeDrawingBrush.onMouseMove(h,{e:s,pointer:h})}this.setCursor(this.freeDrawingCursor),this._handleEvent(s,"move")},_onMouseUpInDrawingMode:function(s){var h=this.getPointer(s);this._isCurrentlyDrawing=this.freeDrawingBrush.onMouseUp({e:s,pointer:h}),this._handleEvent(s,"up")},__onMouseDown:function(s){this._cacheTransformEventData(s),this._handleEvent(s,"down:before");var h=this._target;if(e(s,l)){this.fireRightClick&&this._handleEvent(s,"down",l);return}if(e(s,a)){this.fireMiddleClick&&this._handleEvent(s,"down",a);return}if(this.isDrawingMode){this._onMouseDownInDrawingMode(s);return}if(this._isMainEvent(s)&&!this._currentTransform){var r=this._pointer;this._previousPointer=r;var c=this._shouldRender(h),f=this._shouldGroup(s,h);if(this._shouldClearSelection(s,h)?this.discardActiveObject(s):f&&(this._handleGrouping(s,h),h=this._activeObject),this.selection&&(!h||!h.selectable&&!h.isEditing&&h!==this._activeObject)&&(this._groupSelector={ex:this._absolutePointer.x,ey:this._absolutePointer.y,top:0,left:0}),h){var g=h===this._activeObject;h.selectable&&h.activeOn==="down"&&this.setActiveObject(h,s);var p=h._findTargetCorner(this.getPointer(s,!0),o.util.isTouchEvent(s));if(h.__corner=p,h===this._activeObject&&(p||!f)){this._setupCurrentTransform(s,h,g);var v=h.controls[p],r=this.getPointer(s),_=v&&v.getMouseDownHandler(s,h,v);_&&_(s,this._currentTransform,r.x,r.y)}}this._handleEvent(s,"down"),(c||f)&&this.requestRenderAll()}},_resetTransformEventData:function(){this._target=null,this._pointer=null,this._absolutePointer=null},_cacheTransformEventData:function(s){this._resetTransformEventData(),this._pointer=this.getPointer(s,!0),this._absolutePointer=this.restorePointerVpt(this._pointer),this._target=this._currentTransform?this._currentTransform.target:this.findTarget(s)||null},_beforeTransform:function(s){var h=this._currentTransform;this.stateful&&h.target.saveState(),this.fire("before:transform",{e:s,transform:h})},__onMouseMove:function(s){this._handleEvent(s,"move:before"),this._cacheTransformEventData(s);var h,r;if(this.isDrawingMode){this._onMouseMoveInDrawingMode(s);return}if(this._isMainEvent(s)){var c=this._groupSelector;c?(r=this._absolutePointer,c.left=r.x-c.ex,c.top=r.y-c.ey,this.renderTop()):this._currentTransform?this._transformObject(s):(h=this.findTarget(s)||null,this._setCursorFromEvent(s,h),this._fireOverOutEvents(h,s)),this._handleEvent(s,"move"),this._resetTransformEventData()}},_fireOverOutEvents:function(s,h){var r=this._hoveredTarget,c=this._hoveredTargets,f=this.targets,g=Math.max(c.length,f.length);this.fireSyntheticInOutEvents(s,h,{oldTarget:r,evtOut:"mouseout",canvasEvtOut:"mouse:out",evtIn:"mouseover",canvasEvtIn:"mouse:over"});for(var p=0;p<g;p++)this.fireSyntheticInOutEvents(f[p],h,{oldTarget:c[p],evtOut:"mouseout",evtIn:"mouseover"});this._hoveredTarget=s,this._hoveredTargets=this.targets.concat()},_fireEnterLeaveEvents:function(s,h){var r=this._draggedoverTarget,c=this._hoveredTargets,f=this.targets,g=Math.max(c.length,f.length);this.fireSyntheticInOutEvents(s,h,{oldTarget:r,evtOut:"dragleave",evtIn:"dragenter"});for(var p=0;p<g;p++)this.fireSyntheticInOutEvents(f[p],h,{oldTarget:c[p],evtOut:"dragleave",evtIn:"dragenter"});this._draggedoverTarget=s},fireSyntheticInOutEvents:function(s,h,r){var c,f,g=r.oldTarget,p,v,_=g!==s,x=r.canvasEvtIn,D=r.canvasEvtOut;_&&(c={e:h,target:s,previousTarget:g},f={e:h,target:g,nextTarget:s}),v=s&&_,p=g&&_,p&&(D&&this.fire(D,f),g.fire(r.evtOut,f)),v&&(x&&this.fire(x,c),s.fire(r.evtIn,c))},__onMouseWheel:function(s){this._cacheTransformEventData(s),this._handleEvent(s,"wheel"),this._resetTransformEventData()},_transformObject:function(s){var h=this.getPointer(s),r=this._currentTransform;r.reset=!1,r.shiftKey=s.shiftKey,r.altKey=s[this.centeredKey],this._performTransformAction(s,r,h),r.actionPerformed&&this.requestRenderAll()},_performTransformAction:function(s,h,r){var c=r.x,f=r.y,g=h.action,p=!1,v=h.actionHandler;v&&(p=v(s,h,c,f)),g==="drag"&&p&&(h.target.isMoving=!0,this.setCursor(h.target.moveCursor||this.moveCursor)),h.actionPerformed=h.actionPerformed||p},_fire:o.controlsUtils.fireEvent,_setCursorFromEvent:function(s,h){if(!h)return this.setCursor(this.defaultCursor),!1;var r=h.hoverCursor||this.hoverCursor,c=this._activeObject&&this._activeObject.type==="activeSelection"?this._activeObject:null,f=(!c||!c.contains(h))&&h._findTargetCorner(this.getPointer(s,!0));f?this.setCursor(this.getCornerCursor(f,h,s)):(h.subTargetCheck&&this.targets.concat().reverse().map(function(g){r=g.hoverCursor||r}),this.setCursor(r))},getCornerCursor:function(s,h,r){var c=h.controls[s];return c.cursorStyleHandler(r,c,h)}})})(),(function(){var u=Math.min,n=Math.max;o.util.object.extend(o.Canvas.prototype,{_shouldGroup:function(l,a){var t=this._activeObject;return t&&this._isSelectionKeyPressed(l)&&a&&a.selectable&&this.selection&&(t!==a||t.type==="activeSelection")&&!a.onSelect({e:l})},_handleGrouping:function(l,a){var t=this._activeObject;t.__corner||a===t&&(a=this.findTarget(l,!0),!a||!a.selectable)||(t&&t.type==="activeSelection"?this._updateActiveSelection(a,l):this._createActiveSelection(a,l))},_updateActiveSelection:function(l,a){var t=this._activeObject,i=t._objects.slice(0);t.contains(l)?(t.removeWithUpdate(l),this._hoveredTarget=l,this._hoveredTargets=this.targets.concat(),t.size()===1&&this._setActiveObject(t.item(0),a)):(t.addWithUpdate(l),this._hoveredTarget=t,this._hoveredTargets=this.targets.concat()),this._fireSelectionEvents(i,a)},_createActiveSelection:function(l,a){var t=this.getActiveObjects(),i=this._createGroup(l);this._hoveredTarget=i,this._setActiveObject(i,a),this._fireSelectionEvents(t,a)},_createGroup:function(l){var a=this._objects,t=a.indexOf(this._activeObject)<a.indexOf(l),i=t?[this._activeObject,l]:[l,this._activeObject];return this._activeObject.isEditing&&this._activeObject.exitEditing(),new o.ActiveSelection(i,{canvas:this})},_groupSelectedObjects:function(l){var a=this._collectObjects(l),t;a.length===1?this.setActiveObject(a[0],l):a.length>1&&(t=new o.ActiveSelection(a.reverse(),{canvas:this}),this.setActiveObject(t,l))},_collectObjects:function(l){for(var a=[],t,i=this._groupSelector.ex,e=this._groupSelector.ey,s=i+this._groupSelector.left,h=e+this._groupSelector.top,r=new o.Point(u(i,s),u(e,h)),c=new o.Point(n(i,s),n(e,h)),f=!this.selectionFullyContained,g=i===s&&e===h,p=this._objects.length;p--&&(t=this._objects[p],!(!(!t||!t.selectable||!t.visible)&&(f&&t.intersectsWithRect(r,c,!0)||t.isContainedWithinRect(r,c,!0)||f&&t.containsPoint(r,null,!0)||f&&t.containsPoint(c,null,!0))&&(a.push(t),g))););return a.length>1&&(a=a.filter(function(v){return!v.onSelect({e:l})})),a},_maybeGroupObjects:function(l){this.selection&&this._groupSelector&&this._groupSelectedObjects(l),this.setCursor(this.defaultCursor),this._groupSelector=null}})})(),(function(){o.util.object.extend(o.StaticCanvas.prototype,{toDataURL:function(u){u||(u={});var n=u.format||"png",l=u.quality||1,a=(u.multiplier||1)*(u.enableRetinaScaling?this.getRetinaScaling():1),t=this.toCanvasElement(a,u);return o.util.toDataURL(t,n,l)},toCanvasElement:function(u,n){u=u||1,n=n||{};var l=(n.width||this.width)*u,a=(n.height||this.height)*u,t=this.getZoom(),i=this.width,e=this.height,s=t*u,h=this.viewportTransform,r=(h[4]-(n.left||0))*u,c=(h[5]-(n.top||0))*u,f=this.interactive,g=[s,0,0,s,r,c],p=this.enableRetinaScaling,v=o.util.createCanvasElement(),_=this.contextTop;return v.width=l,v.height=a,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=g,this.width=l,this.height=a,this.calcViewportBoundaries(),this.renderCanvas(v.getContext("2d"),this._objects),this.viewportTransform=h,this.width=i,this.height=e,this.calcViewportBoundaries(),this.interactive=f,this.enableRetinaScaling=p,this.contextTop=_,v}})})(),o.util.object.extend(o.StaticCanvas.prototype,{loadFromJSON:function(u,n,l){if(u){var a=typeof u=="string"?JSON.parse(u):o.util.object.clone(u),t=this,i=a.clipPath,e=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete a.clipPath,this._enlivenObjects(a.objects,function(s){t.clear(),t._setBgOverlay(a,function(){i?t._enlivenObjects([i],function(h){t.clipPath=h[0],t.__setupCanvas.call(t,a,s,e,n)}):t.__setupCanvas.call(t,a,s,e,n)})},l),this}},__setupCanvas:function(u,n,l,a){var t=this;n.forEach(function(i,e){t.insertAt(i,e)}),this.renderOnAddRemove=l,delete u.objects,delete u.backgroundImage,delete u.overlayImage,delete u.background,delete u.overlay,this._setOptions(u),this.renderAll(),a&&a()},_setBgOverlay:function(u,n){var l={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!u.backgroundImage&&!u.overlayImage&&!u.background&&!u.overlay){n&&n();return}var a=function(){l.backgroundImage&&l.overlayImage&&l.backgroundColor&&l.overlayColor&&n&&n()};this.__setBgOverlay("backgroundImage",u.backgroundImage,l,a),this.__setBgOverlay("overlayImage",u.overlayImage,l,a),this.__setBgOverlay("backgroundColor",u.background,l,a),this.__setBgOverlay("overlayColor",u.overlay,l,a)},__setBgOverlay:function(u,n,l,a){var t=this;if(!n){l[u]=!0,a&&a();return}u==="backgroundImage"||u==="overlayImage"?o.util.enlivenObjects([n],function(i){t[u]=i[0],l[u]=!0,a&&a()}):this["set"+o.util.string.capitalize(u,!0)](n,function(){l[u]=!0,a&&a()})},_enlivenObjects:function(u,n,l){if(!u||u.length===0){n&&n([]);return}o.util.enlivenObjects(u,function(a){n&&n(a)},null,l)},_toDataURL:function(u,n){this.clone(function(l){n(l.toDataURL(u))})},_toDataURLWithMultiplier:function(u,n,l){this.clone(function(a){l(a.toDataURLWithMultiplier(u,n))})},clone:function(u,n){var l=JSON.stringify(this.toJSON(n));this.cloneWithoutData(function(a){a.loadFromJSON(l,function(){u&&u(a)})})},cloneWithoutData:function(u){var n=o.util.createCanvasElement();n.width=this.width,n.height=this.height;var l=new o.Canvas(n);this.backgroundImage?(l.setBackgroundImage(this.backgroundImage.src,function(){l.renderAll(),u&&u(l)}),l.backgroundImageOpacity=this.backgroundImageOpacity,l.backgroundImageStretch=this.backgroundImageStretch):u&&u(l)}}),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.object.extend,a=n.util.object.clone,t=n.util.toFixed,i=n.util.string.capitalize,e=n.util.degreesToRadians,s=!n.isLikelyNode,h=2;n.Object||(n.Object=n.util.createClass(n.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,touchCornerSize:24,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgb(178,204,255)",borderDashArray:null,cornerColor:"rgb(178,204,255)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,perPixelTargetFind:!1,includeDefaultValues:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:s,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",activeOn:"down",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),colorProperties:"fill stroke backgroundColor".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(r){r&&this.setOptions(r)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=n.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(r){var c=n.perfLimitSizeTotal,f=r.width,g=r.height,p=n.maxCacheSideLimit,v=n.minCacheSideLimit;if(f<=p&&g<=p&&f*g<=c)return f<v&&(r.width=v),g<v&&(r.height=v),r;var _=f/g,x=n.util.limitDimsByArea(_,c),D=n.util.capValue,B=D(v,x.x,p),z=D(v,x.y,p);return f>B&&(r.zoomX/=f/B,r.width=B,r.capped=!0),g>z&&(r.zoomY/=g/z,r.height=z,r.capped=!0),r},_getCacheCanvasDimensions:function(){var r=this.getTotalObjectScaling(),c=this._getTransformedDimensions(0,0),f=c.x*r.scaleX/this.scaleX,g=c.y*r.scaleY/this.scaleY;return{width:f+h,height:g+h,zoomX:r.scaleX,zoomY:r.scaleY,x:f,y:g}},_updateCacheCanvas:function(){var r=this.canvas;if(this.noScaleCache&&r&&r._currentTransform){var c=r._currentTransform.target,f=r._currentTransform.action;if(this===c&&f.slice&&f.slice(0,5)==="scale")return!1}var g=this._cacheCanvas,p=this._limitCacheSize(this._getCacheCanvasDimensions()),v=n.minCacheSideLimit,_=p.width,x=p.height,D,B,z=p.zoomX,G=p.zoomY,Q=_!==this.cacheWidth||x!==this.cacheHeight,Z=this.zoomX!==z||this.zoomY!==G,q=Q||Z,K=0,tt=0,it=!1;if(Q){var et=this._cacheCanvas.width,y=this._cacheCanvas.height,E=_>et||x>y,P=(_<et*.9||x<y*.9)&&et>v&&y>v;it=E||P,E&&!p.capped&&(_>v||x>v)&&(K=_*.1,tt=x*.1)}return this instanceof n.Text&&this.path&&(q=!0,it=!0,K+=this.getHeightOfLine(0)*this.zoomX,tt+=this.getHeightOfLine(0)*this.zoomY),q?(it?(g.width=Math.ceil(_+K),g.height=Math.ceil(x+tt)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,g.width,g.height)),D=p.x/2,B=p.y/2,this.cacheTranslationX=Math.round(g.width/2-D)+D,this.cacheTranslationY=Math.round(g.height/2-B)+B,this.cacheWidth=_,this.cacheHeight=x,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(z,G),this.zoomX=z,this.zoomY=G,!0):!1},setOptions:function(r){this._setOptions(r),this._initGradient(r.fill,"fill"),this._initGradient(r.stroke,"stroke"),this._initPattern(r.fill,"fill"),this._initPattern(r.stroke,"stroke")},transform:function(r){var c=this.group&&!this.group._transformDone||this.group&&this.canvas&&r===this.canvas.contextTop,f=this.calcTransformMatrix(!c);r.transform(f[0],f[1],f[2],f[3],f[4],f[5])},toObject:function(r){var c=n.Object.NUM_FRACTION_DIGITS,f={type:this.type,version:n.version,originX:this.originX,originY:this.originY,left:t(this.left,c),top:t(this.top,c),width:t(this.width,c),height:t(this.height,c),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:t(this.strokeWidth,c),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:t(this.strokeMiterLimit,c),scaleX:t(this.scaleX,c),scaleY:t(this.scaleY,c),angle:t(this.angle,c),flipX:this.flipX,flipY:this.flipY,opacity:t(this.opacity,c),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:t(this.skewX,c),skewY:t(this.skewY,c)};return this.clipPath&&!this.clipPath.excludeFromExport&&(f.clipPath=this.clipPath.toObject(r),f.clipPath.inverted=this.clipPath.inverted,f.clipPath.absolutePositioned=this.clipPath.absolutePositioned),n.util.populateWithProperties(this,f,r),this.includeDefaultValues||(f=this._removeDefaultValues(f)),f},toDatalessObject:function(r){return this.toObject(r)},_removeDefaultValues:function(r){var c=n.util.getKlass(r.type).prototype,f=c.stateProperties;return f.forEach(function(g){g==="left"||g==="top"||(r[g]===c[g]&&delete r[g],Array.isArray(r[g])&&Array.isArray(c[g])&&r[g].length===0&&c[g].length===0&&delete r[g])}),r},toString:function(){return"#<fabric."+i(this.type)+">"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var r=n.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(r.scaleX),scaleY:Math.abs(r.scaleY)}},getTotalObjectScaling:function(){var r=this.getObjectScaling(),c=r.scaleX,f=r.scaleY;if(this.canvas){var g=this.canvas.getZoom(),p=this.canvas.getRetinaScaling();c*=g*p,f*=g*p}return{scaleX:c,scaleY:f}},getObjectOpacity:function(){var r=this.opacity;return this.group&&(r*=this.group.getObjectOpacity()),r},_set:function(r,c){var f=r==="scaleX"||r==="scaleY",g=this[r]!==c,p=!1;return f&&(c=this._constrainScale(c)),r==="scaleX"&&c<0?(this.flipX=!this.flipX,c*=-1):r==="scaleY"&&c<0?(this.flipY=!this.flipY,c*=-1):r==="shadow"&&c&&!(c instanceof n.Shadow)?c=new n.Shadow(c):r==="dirty"&&this.group&&this.group.set("dirty",c),this[r]=c,g&&(p=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(r)>-1?(this.dirty=!0,p&&this.group.set("dirty",!0)):p&&this.stateProperties.indexOf(r)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:n.iMatrix.concat()},isNotVisible:function(){return this.opacity===0||!this.width&&!this.height&&this.strokeWidth===0||!this.visible},render:function(r){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(r.save(),this._setupCompositeOperation(r),this.drawSelectionBackground(r),this.transform(r),this._setOpacity(r),this._setShadow(r,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(r)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(r),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),r.restore())},renderCache:function(r){r=r||{},(!this._cacheCanvas||!this._cacheContext)&&this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,r.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this._cacheContext=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&this.stroke!=="transparent"&&this.strokeWidth!==0},hasFill:function(){return this.fill&&this.fill!=="transparent"},needsItsOwnCache:function(){return!!(this.paintFirst==="stroke"&&this.hasFill()&&this.hasStroke()&&typeof this.shadow=="object"||this.clipPath)},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(this.shadow.offsetX!==0||this.shadow.offsetY!==0)},drawClipPathOnCache:function(r,c){if(r.save(),c.inverted?r.globalCompositeOperation="destination-out":r.globalCompositeOperation="destination-in",c.absolutePositioned){var f=n.util.invertTransform(this.calcTransformMatrix());r.transform(f[0],f[1],f[2],f[3],f[4],f[5])}c.transform(r),r.scale(1/c.zoomX,1/c.zoomY),r.drawImage(c._cacheCanvas,-c.cacheTranslationX,-c.cacheTranslationY),r.restore()},drawObject:function(r,c){var f=this.fill,g=this.stroke;c?(this.fill="black",this.stroke="",this._setClippingProperties(r)):this._renderBackground(r),this._render(r),this._drawClipPath(r,this.clipPath),this.fill=f,this.stroke=g},_drawClipPath:function(r,c){c&&(c.canvas=this.canvas,c.shouldCache(),c._transformDone=!0,c.renderCache({forClipping:!0}),this.drawClipPathOnCache(r,c))},drawCacheOnCanvas:function(r){r.scale(1/this.zoomX,1/this.zoomY),r.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(r){if(this.isNotVisible())return!1;if(this._cacheCanvas&&this._cacheContext&&!r&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&this._cacheContext&&!r){var c=this.cacheWidth/this.zoomX,f=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-c/2,-f/2,c,f)}return!0}return!1},_renderBackground:function(r){if(this.backgroundColor){var c=this._getNonTransformedDimensions();r.fillStyle=this.backgroundColor,r.fillRect(-c.x/2,-c.y/2,c.x,c.y),this._removeShadow(r)}},_setOpacity:function(r){this.group&&!this.group._transformDone?r.globalAlpha=this.getObjectOpacity():r.globalAlpha*=this.opacity},_setStrokeStyles:function(r,c){var f=c.stroke;f&&(r.lineWidth=c.strokeWidth,r.lineCap=c.strokeLineCap,r.lineDashOffset=c.strokeDashOffset,r.lineJoin=c.strokeLineJoin,r.miterLimit=c.strokeMiterLimit,f.toLive?f.gradientUnits==="percentage"||f.gradientTransform||f.patternTransform?this._applyPatternForTransformedGradient(r,f):(r.strokeStyle=f.toLive(r,this),this._applyPatternGradientTransform(r,f)):r.strokeStyle=c.stroke)},_setFillStyles:function(r,c){var f=c.fill;f&&(f.toLive?(r.fillStyle=f.toLive(r,this),this._applyPatternGradientTransform(r,c.fill)):r.fillStyle=f)},_setClippingProperties:function(r){r.globalAlpha=1,r.strokeStyle="transparent",r.fillStyle="#000000"},_setLineDash:function(r,c){!c||c.length===0||(1&c.length&&c.push.apply(c,c),r.setLineDash(c))},_renderControls:function(r,c){var f=this.getViewportTransform(),g=this.calcTransformMatrix(),p,v,_;c=c||{},v=typeof c.hasBorders<"u"?c.hasBorders:this.hasBorders,_=typeof c.hasControls<"u"?c.hasControls:this.hasControls,g=n.util.multiplyTransformMatrices(f,g),p=n.util.qrDecompose(g),r.save(),r.translate(p.translateX,p.translateY),r.lineWidth=1*this.borderScaleFactor,this.group||(r.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(p.angle-=180),r.rotate(e(this.group?p.angle:this.angle)),c.forActiveSelection||this.group?v&&this.drawBordersInGroup(r,p,c):v&&this.drawBorders(r,c),_&&this.drawControls(r,c),r.restore()},_setShadow:function(r){if(this.shadow){var c=this.shadow,f=this.canvas,g,p=f&&f.viewportTransform[0]||1,v=f&&f.viewportTransform[3]||1;c.nonScaling?g={scaleX:1,scaleY:1}:g=this.getObjectScaling(),f&&f._isRetinaScaling()&&(p*=n.devicePixelRatio,v*=n.devicePixelRatio),r.shadowColor=c.color,r.shadowBlur=c.blur*n.browserShadowBlurConstant*(p+v)*(g.scaleX+g.scaleY)/4,r.shadowOffsetX=c.offsetX*p*g.scaleX,r.shadowOffsetY=c.offsetY*v*g.scaleY}},_removeShadow:function(r){this.shadow&&(r.shadowColor="",r.shadowBlur=r.shadowOffsetX=r.shadowOffsetY=0)},_applyPatternGradientTransform:function(r,c){if(!c||!c.toLive)return{offsetX:0,offsetY:0};var f=c.gradientTransform||c.patternTransform,g=-this.width/2+c.offsetX||0,p=-this.height/2+c.offsetY||0;return c.gradientUnits==="percentage"?r.transform(this.width,0,0,this.height,g,p):r.transform(1,0,0,1,g,p),f&&r.transform(f[0],f[1],f[2],f[3],f[4],f[5]),{offsetX:g,offsetY:p}},_renderPaintInOrder:function(r){this.paintFirst==="stroke"?(this._renderStroke(r),this._renderFill(r)):(this._renderFill(r),this._renderStroke(r))},_render:function(){},_renderFill:function(r){this.fill&&(r.save(),this._setFillStyles(r,this),this.fillRule==="evenodd"?r.fill("evenodd"):r.fill(),r.restore())},_renderStroke:function(r){if(!(!this.stroke||this.strokeWidth===0)){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(r),r.save(),this.strokeUniform&&this.group){var c=this.getObjectScaling();r.scale(1/c.scaleX,1/c.scaleY)}else this.strokeUniform&&r.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(r,this.strokeDashArray),this._setStrokeStyles(r,this),r.stroke(),r.restore()}},_applyPatternForTransformedGradient:function(r,c){var f=this._limitCacheSize(this._getCacheCanvasDimensions()),g=n.util.createCanvasElement(),p,v=this.canvas.getRetinaScaling(),_=f.x/this.scaleX/v,x=f.y/this.scaleY/v;g.width=_,g.height=x,p=g.getContext("2d"),p.beginPath(),p.moveTo(0,0),p.lineTo(_,0),p.lineTo(_,x),p.lineTo(0,x),p.closePath(),p.translate(_/2,x/2),p.scale(f.zoomX/this.scaleX/v,f.zoomY/this.scaleY/v),this._applyPatternGradientTransform(p,c),p.fillStyle=c.toLive(r),p.fill(),r.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),r.scale(v*this.scaleX/f.zoomX,v*this.scaleY/f.zoomY),r.strokeStyle=p.createPattern(g,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var r=n.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",r.scaleX),this.set("scaleY",r.scaleY),this.angle=r.angle,this.skewX=r.skewX,this.skewY=0}},_removeTransformMatrix:function(r){var c=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),c=n.util.transformPoint(c,this.transformMatrix)),this.transformMatrix=null,r&&(this.scaleX*=r.scaleX,this.scaleY*=r.scaleY,this.cropX=r.cropX,this.cropY=r.cropY,c.x+=r.offsetLeft,c.y+=r.offsetTop,this.width=r.width,this.height=r.height),this.setPositionByOrigin(c,"center","center")},clone:function(r,c){var f=this.toObject(c);this.constructor.fromObject?this.constructor.fromObject(f,r):n.Object._fromObject("Object",f,r)},cloneAsImage:function(r,c){var f=this.toCanvasElement(c);return r&&r(new n.Image(f)),this},toCanvasElement:function(r){r||(r={});var c=n.util,f=c.saveObjectTransform(this),g=this.group,p=this.shadow,v=Math.abs,_=(r.multiplier||1)*(r.enableRetinaScaling?n.devicePixelRatio:1);delete this.group,r.withoutTransform&&c.resetObjectTransform(this),r.withoutShadow&&(this.shadow=null);var x=n.util.createCanvasElement(),D=this.getBoundingRect(!0,!0),B=this.shadow,z,G={x:0,y:0},Q,Z,q;B&&(Q=B.blur,B.nonScaling?z={scaleX:1,scaleY:1}:z=this.getObjectScaling(),G.x=2*Math.round(v(B.offsetX)+Q)*v(z.scaleX),G.y=2*Math.round(v(B.offsetY)+Q)*v(z.scaleY)),Z=D.width+G.x,q=D.height+G.y,x.width=Math.ceil(Z),x.height=Math.ceil(q);var K=new n.StaticCanvas(x,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});r.format==="jpeg"&&(K.backgroundColor="#fff"),this.setPositionByOrigin(new n.Point(K.width/2,K.height/2),"center","center");var tt=this.canvas;K.add(this);var it=K.toCanvasElement(_||1,r);return this.shadow=p,this.set("canvas",tt),g&&(this.group=g),this.set(f).setCoords(),K._objects=[],K.dispose(),K=null,it},toDataURL:function(r){return r||(r={}),n.util.toDataURL(this.toCanvasElement(r),r.format||"png",r.quality||1)},isType:function(r){return arguments.length>1?Array.from(arguments).includes(this.type):this.type===r},complexity:function(){return 1},toJSON:function(r){return this.toObject(r)},rotate:function(r){var c=(this.originX!=="center"||this.originY!=="center")&&this.centeredRotation;return c&&this._setOriginToCenter(),this.set("angle",r),c&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(r,c){c=c||this.canvas.getPointer(r);var f=new n.Point(c.x,c.y),g=this._getLeftTopCoords();return this.angle&&(f=n.util.rotatePoint(f,g,e(-this.angle))),{x:f.x-g.x,y:f.y-g.y}},_setupCompositeOperation:function(r){this.globalCompositeOperation&&(r.globalCompositeOperation=this.globalCompositeOperation)},dispose:function(){n.runningAnimations&&n.runningAnimations.cancelByTarget(this)}}),n.util.createAccessors&&n.util.createAccessors(n.Object),l(n.Object.prototype,n.Observable),n.Object.NUM_FRACTION_DIGITS=2,n.Object.ENLIVEN_PROPS=["clipPath"],n.Object._fromObject=function(r,c,f,g){var p=n[r];c=a(c,!0),n.util.enlivenPatterns([c.fill,c.stroke],function(v){typeof v[0]<"u"&&(c.fill=v[0]),typeof v[1]<"u"&&(c.stroke=v[1]),n.util.enlivenObjectEnlivables(c,c,function(){var _=g?new p(c[g],c):new p(c);f&&f(_)})})},n.Object.__uid=0)})(d),(function(){var u=o.util.degreesToRadians,n={left:-.5,center:0,right:.5},l={top:-.5,center:0,bottom:.5};o.util.object.extend(o.Object.prototype,{translateToGivenOrigin:function(a,t,i,e,s){var h=a.x,r=a.y,c,f,g;return typeof t=="string"?t=n[t]:t-=.5,typeof e=="string"?e=n[e]:e-=.5,c=e-t,typeof i=="string"?i=l[i]:i-=.5,typeof s=="string"?s=l[s]:s-=.5,f=s-i,(c||f)&&(g=this._getTransformedDimensions(),h=a.x+c*g.x,r=a.y+f*g.y),new o.Point(h,r)},translateToCenterPoint:function(a,t,i){var e=this.translateToGivenOrigin(a,t,i,"center","center");return this.angle?o.util.rotatePoint(e,a,u(this.angle)):e},translateToOriginPoint:function(a,t,i){var e=this.translateToGivenOrigin(a,"center","center",t,i);return this.angle?o.util.rotatePoint(e,a,u(this.angle)):e},getCenterPoint:function(){var a=new o.Point(this.left,this.top);return this.translateToCenterPoint(a,this.originX,this.originY)},getPointByOrigin:function(a,t){var i=this.getCenterPoint();return this.translateToOriginPoint(i,a,t)},toLocalPoint:function(a,t,i){var e=this.getCenterPoint(),s,h;return typeof t<"u"&&typeof i<"u"?s=this.translateToGivenOrigin(e,"center","center",t,i):s=new o.Point(this.left,this.top),h=new o.Point(a.x,a.y),this.angle&&(h=o.util.rotatePoint(h,e,-u(this.angle))),h.subtractEquals(s)},setPositionByOrigin:function(a,t,i){var e=this.translateToCenterPoint(a,t,i),s=this.translateToOriginPoint(e,this.originX,this.originY);this.set("left",s.x),this.set("top",s.y)},adjustPosition:function(a){var t=u(this.angle),i=this.getScaledWidth(),e=o.util.cos(t)*i,s=o.util.sin(t)*i,h,r;typeof this.originX=="string"?h=n[this.originX]:h=this.originX-.5,typeof a=="string"?r=n[a]:r=a-.5,this.left+=e*(r-h),this.top+=s*(r-h),this.setCoords(),this.originX=a},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var a=this.getCenterPoint();this.originX="center",this.originY="center",this.left=a.x,this.top=a.y},_resetOrigin:function(){var a=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=a.x,this.top=a.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})})(),(function(){function u(i){return[new o.Point(i.tl.x,i.tl.y),new o.Point(i.tr.x,i.tr.y),new o.Point(i.br.x,i.br.y),new o.Point(i.bl.x,i.bl.y)]}var n=o.util,l=n.degreesToRadians,a=n.multiplyTransformMatrices,t=n.transformPoint;n.object.extend(o.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(i,e){return e?i?this.calcACoords():this.calcLineCoords():((!this.aCoords||!this.lineCoords)&&this.setCoords(!0),i?this.aCoords:this.lineCoords)},getCoords:function(i,e){return u(this._getCoords(i,e))},intersectsWithRect:function(i,e,s,h){var r=this.getCoords(s,h),c=o.Intersection.intersectPolygonRectangle(r,i,e);return c.status==="Intersection"},intersectsWithObject:function(i,e,s){var h=o.Intersection.intersectPolygonPolygon(this.getCoords(e,s),i.getCoords(e,s));return h.status==="Intersection"||i.isContainedWithinObject(this,e,s)||this.isContainedWithinObject(i,e,s)},isContainedWithinObject:function(i,e,s){for(var h=this.getCoords(e,s),r=e?i.aCoords:i.lineCoords,c=0,f=i._getImageLines(r);c<4;c++)if(!i.containsPoint(h[c],f))return!1;return!0},isContainedWithinRect:function(i,e,s,h){var r=this.getBoundingRect(s,h);return r.left>=i.x&&r.left+r.width<=e.x&&r.top>=i.y&&r.top+r.height<=e.y},containsPoint:function(i,c,s,h){var r=this._getCoords(s,h),c=c||this._getImageLines(r),f=this._findCrossPoints(i,c);return f!==0&&f%2===1},isOnScreen:function(i){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,s=this.canvas.vptCoords.br,h=this.getCoords(!0,i);return h.some(function(r){return r.x<=s.x&&r.x>=e.x&&r.y<=s.y&&r.y>=e.y})||this.intersectsWithRect(e,s,!0,i)?!0:this._containsCenterOfCanvas(e,s,i)},_containsCenterOfCanvas:function(i,e,s){var h={x:(i.x+e.x)/2,y:(i.y+e.y)/2};return!!this.containsPoint(h,null,!0,s)},isPartiallyOnScreen:function(i){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,s=this.canvas.vptCoords.br;if(this.intersectsWithRect(e,s,!0,i))return!0;var h=this.getCoords(!0,i).every(function(r){return(r.x>=s.x||r.x<=e.x)&&(r.y>=s.y||r.y<=e.y)});return h&&this._containsCenterOfCanvas(e,s,i)},_getImageLines:function(i){var e={topline:{o:i.tl,d:i.tr},rightline:{o:i.tr,d:i.br},bottomline:{o:i.br,d:i.bl},leftline:{o:i.bl,d:i.tl}};return e},_findCrossPoints:function(i,e){var s,h,r,c,f,g=0,p;for(var v in e)if(p=e[v],!(p.o.y<i.y&&p.d.y<i.y)&&!(p.o.y>=i.y&&p.d.y>=i.y)&&(p.o.x===p.d.x&&p.o.x>=i.x?f=p.o.x:(s=0,h=(p.d.y-p.o.y)/(p.d.x-p.o.x),r=i.y-s*i.x,c=p.o.y-h*p.o.x,f=-(r-c)/(s-h)),f>=i.x&&(g+=1),g===2))break;return g},getBoundingRect:function(i,e){var s=this.getCoords(i,e);return n.makeBoundingBoxFromPoints(s)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(i){return Math.abs(i)<this.minScaleLimit?i<0?-this.minScaleLimit:this.minScaleLimit:i===0?1e-4:i},scale:function(i){return this._set("scaleX",i),this._set("scaleY",i),this.setCoords()},scaleToWidth:function(i,e){var s=this.getBoundingRect(e).width/this.getScaledWidth();return this.scale(i/this.width/s)},scaleToHeight:function(i,e){var s=this.getBoundingRect(e).height/this.getScaledHeight();return this.scale(i/this.height/s)},calcLineCoords:function(){var i=this.getViewportTransform(),e=this.padding,s=l(this.angle),h=n.cos(s),r=n.sin(s),c=h*e,f=r*e,g=c+f,p=c-f,v=this.calcACoords(),_={tl:t(v.tl,i),tr:t(v.tr,i),bl:t(v.bl,i),br:t(v.br,i)};return e&&(_.tl.x-=p,_.tl.y-=g,_.tr.x+=g,_.tr.y-=p,_.bl.x-=g,_.bl.y+=p,_.br.x+=p,_.br.y+=g),_},calcOCoords:function(){var i=this._calcRotateMatrix(),e=this._calcTranslateMatrix(),s=this.getViewportTransform(),h=a(s,e),r=a(h,i),r=a(r,[1/s[0],0,0,1/s[3],0,0]),c=this._calculateCurrentDimensions(),f={};return this.forEachControl(function(g,p,v){f[p]=g.positionHandler(c,r,v)}),f},calcACoords:function(){var i=this._calcRotateMatrix(),e=this._calcTranslateMatrix(),s=a(e,i),h=this._getTransformedDimensions(),r=h.x/2,c=h.y/2;return{tl:t({x:-r,y:-c},s),tr:t({x:r,y:-c},s),bl:t({x:-r,y:c},s),br:t({x:r,y:c},s)}},setCoords:function(i){return this.aCoords=this.calcACoords(),this.lineCoords=this.group?this.aCoords:this.calcLineCoords(),i?this:(this.oCoords=this.calcOCoords(),this._setCornerCoords&&this._setCornerCoords(),this)},_calcRotateMatrix:function(){return n.calcRotateMatrix(this)},_calcTranslateMatrix:function(){var i=this.getCenterPoint();return[1,0,0,1,i.x,i.y]},transformMatrixKey:function(i){var e="_",s="";return!i&&this.group&&(s=this.group.transformMatrixKey(i)+e),s+this.top+e+this.left+e+this.scaleX+e+this.scaleY+e+this.skewX+e+this.skewY+e+this.angle+e+this.originX+e+this.originY+e+this.width+e+this.height+e+this.strokeWidth+this.flipX+this.flipY},calcTransformMatrix:function(i){var e=this.calcOwnMatrix();if(i||!this.group)return e;var s=this.transformMatrixKey(i),h=this.matrixCache||(this.matrixCache={});return h.key===s?h.value:(this.group&&(e=a(this.group.calcTransformMatrix(!1),e)),h.key=s,h.value=e,e)},calcOwnMatrix:function(){var i=this.transformMatrixKey(!0),e=this.ownMatrixCache||(this.ownMatrixCache={});if(e.key===i)return e.value;var s=this._calcTranslateMatrix(),h={angle:this.angle,translateX:s[4],translateY:s[5],scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY};return e.key=i,e.value=n.composeMatrix(h),e.value},_getNonTransformedDimensions:function(){var i=this.strokeWidth,e=this.width+i,s=this.height+i;return{x:e,y:s}},_getTransformedDimensions:function(i,e){typeof i>"u"&&(i=this.skewX),typeof e>"u"&&(e=this.skewY);var s,h,r,c=i===0&&e===0;if(this.strokeUniform?(h=this.width,r=this.height):(s=this._getNonTransformedDimensions(),h=s.x,r=s.y),c)return this._finalizeDimensions(h*this.scaleX,r*this.scaleY);var f=n.sizeAfterTransform(h,r,{scaleX:this.scaleX,scaleY:this.scaleY,skewX:i,skewY:e});return this._finalizeDimensions(f.x,f.y)},_finalizeDimensions:function(i,e){return this.strokeUniform?{x:i+this.strokeWidth,y:e+this.strokeWidth}:{x:i,y:e}},_calculateCurrentDimensions:function(){var i=this.getViewportTransform(),e=this._getTransformedDimensions(),s=t(e,i,!0);return s.scalarAdd(2*this.padding)}})})(),o.util.object.extend(o.Object.prototype,{sendToBack:function(){return this.group?o.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas&&this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?o.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas&&this.canvas.bringToFront(this),this},sendBackwards:function(u){return this.group?o.StaticCanvas.prototype.sendBackwards.call(this.group,this,u):this.canvas&&this.canvas.sendBackwards(this,u),this},bringForward:function(u){return this.group?o.StaticCanvas.prototype.bringForward.call(this.group,this,u):this.canvas&&this.canvas.bringForward(this,u),this},moveTo:function(u){return this.group&&this.group.type!=="activeSelection"?o.StaticCanvas.prototype.moveTo.call(this.group,this,u):this.canvas&&this.canvas.moveTo(this,u),this}}),(function(){function u(l,a){if(a){if(a.toLive)return l+": url(#SVGID_"+a.id+"); ";var t=new o.Color(a),i=l+": "+t.toRgb()+"; ",e=t.getAlpha();return e!==1&&(i+=l+"-opacity: "+e.toString()+"; "),i}else return l+": none; "}var n=o.util.toFixed;o.util.object.extend(o.Object.prototype,{getSvgStyles:function(l){var a=this.fillRule?this.fillRule:"nonzero",t=this.strokeWidth?this.strokeWidth:"0",i=this.strokeDashArray?this.strokeDashArray.join(" "):"none",e=this.strokeDashOffset?this.strokeDashOffset:"0",s=this.strokeLineCap?this.strokeLineCap:"butt",h=this.strokeLineJoin?this.strokeLineJoin:"miter",r=this.strokeMiterLimit?this.strokeMiterLimit:"4",c=typeof this.opacity<"u"?this.opacity:"1",f=this.visible?"":" visibility: hidden;",g=l?"":this.getSvgFilter(),p=u("fill",this.fill),v=u("stroke",this.stroke);return[v,"stroke-width: ",t,"; ","stroke-dasharray: ",i,"; ","stroke-linecap: ",s,"; ","stroke-dashoffset: ",e,"; ","stroke-linejoin: ",h,"; ","stroke-miterlimit: ",r,"; ",p,"fill-rule: ",a,"; ","opacity: ",c,";",g,f].join("")},getSvgSpanStyles:function(l,a){var t="; ",e=l.fontFamily?"font-family: "+(l.fontFamily.indexOf("'")===-1&&l.fontFamily.indexOf('"')===-1?"'"+l.fontFamily+"'":l.fontFamily)+t:"",i=l.strokeWidth?"stroke-width: "+l.strokeWidth+t:"",e=e,s=l.fontSize?"font-size: "+l.fontSize+"px"+t:"",h=l.fontStyle?"font-style: "+l.fontStyle+t:"",r=l.fontWeight?"font-weight: "+l.fontWeight+t:"",c=l.fill?u("fill",l.fill):"",f=l.stroke?u("stroke",l.stroke):"",g=this.getSvgTextDecoration(l),p=l.deltaY?"baseline-shift: "+-l.deltaY+"; ":"";return g&&(g="text-decoration: "+g+t),[f,i,e,s,h,r,g,c,p,a?"white-space: pre; ":""].join("")},getSvgTextDecoration:function(l){return["overline","underline","line-through"].filter(function(a){return l[a.replace("-","")]}).join(" ")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgCommons:function(){return[this.id?'id="'+this.id+'" ':"",this.clipPath?'clip-path="url(#'+this.clipPath.clipPathId+')" ':""].join("")},getSvgTransform:function(l,a){var t=l?this.calcTransformMatrix():this.calcOwnMatrix(),i='transform="'+o.util.matrixToSVG(t);return i+(a||"")+'" '},_setSVGBg:function(l){if(this.backgroundColor){var a=o.Object.NUM_FRACTION_DIGITS;l.push(" <rect ",this._getFillAttributes(this.backgroundColor),' x="',n(-this.width/2,a),'" y="',n(-this.height/2,a),'" width="',n(this.width,a),'" height="',n(this.height,a),`"></rect>
44
+ `)}},toSVG:function(l){return this._createBaseSVGMarkup(this._toSVG(l),{reviver:l})},toClipPathSVG:function(l){return" "+this._createBaseClipPathSVGMarkup(this._toSVG(l),{reviver:l})},_createBaseClipPathSVGMarkup:function(l,a){a=a||{};var t=a.reviver,i=a.additionalTransform||"",e=[this.getSvgTransform(!0,i),this.getSvgCommons()].join(""),s=l.indexOf("COMMON_PARTS");return l[s]=e,t?t(l.join("")):l.join("")},_createBaseSVGMarkup:function(l,a){a=a||{};var t=a.noStyle,i=a.reviver,e=t?"":'style="'+this.getSvgStyles()+'" ',s=a.withShadow?'style="'+this.getSvgFilter()+'" ':"",h=this.clipPath,r=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",c=h&&h.absolutePositioned,f=this.stroke,g=this.fill,p=this.shadow,v,_=[],x,D=l.indexOf("COMMON_PARTS"),B=a.additionalTransform;return h&&(h.clipPathId="CLIPPATH_"+o.Object.__uid++,x='<clipPath id="'+h.clipPathId+`" >
45
+ `+h.toClipPathSVG(i)+`</clipPath>
46
+ `),c&&_.push("<g ",s,this.getSvgCommons(),` >
47
+ `),_.push("<g ",this.getSvgTransform(!1),c?"":s+this.getSvgCommons(),` >
48
+ `),v=[e,r,t?"":this.addPaintOrder()," ",B?'transform="'+B+'" ':""].join(""),l[D]=v,g&&g.toLive&&_.push(g.toSVG(this)),f&&f.toLive&&_.push(f.toSVG(this)),p&&_.push(p.toSVG(this)),h&&_.push(x),_.push(l.join("")),_.push(`</g>
49
+ `),c&&_.push(`</g>
50
+ `),i?i(_.join("")):_.join("")},addPaintOrder:function(){return this.paintFirst!=="fill"?' paint-order="'+this.paintFirst+'" ':""}})})(),(function(){var u=o.util.object.extend,n="stateProperties";function l(t,i,e){var s={},h=!0;e.forEach(function(r){s[r]=t[r]}),u(t[i],s,h)}function a(t,i,e){if(t===i)return!0;if(Array.isArray(t)){if(!Array.isArray(i)||t.length!==i.length)return!1;for(var s=0,h=t.length;s<h;s++)if(!a(t[s],i[s]))return!1;return!0}else if(t&&typeof t=="object"){var r=Object.keys(t),c;if(!i||typeof i!="object"||!e&&r.length!==Object.keys(i).length)return!1;for(var s=0,h=r.length;s<h;s++)if(c=r[s],!(c==="canvas"||c==="group")&&!a(t[c],i[c]))return!1;return!0}}o.util.object.extend(o.Object.prototype,{hasStateChanged:function(t){t=t||n;var i="_"+t;return Object.keys(this[i]).length<this[t].length?!0:!a(this[i],this,!0)},saveState:function(t){var i=t&&t.propertySet||n,e="_"+i;return this[e]?(l(this,e,this[i]),t&&t.stateProperties&&l(this,e,t.stateProperties),this):this.setupState(t)},setupState:function(t){t=t||{};var i=t.propertySet||n;return t.propertySet=i,this["_"+i]={},this.saveState(t),this}})})(),(function(){var u=o.util.degreesToRadians;o.util.object.extend(o.Object.prototype,{_findTargetCorner:function(n,l){if(!this.hasControls||this.group||!this.canvas||this.canvas._activeObject!==this)return!1;var a=n.x,t=n.y,i,e,s=Object.keys(this.oCoords),h=s.length-1,r;for(this.__corner=0;h>=0;h--)if(r=s[h],!!this.isControlVisible(r)&&(e=this._getImageLines(l?this.oCoords[r].touchCorner:this.oCoords[r].corner),i=this._findCrossPoints({x:a,y:t},e),i!==0&&i%2===1))return this.__corner=r,r;return!1},forEachControl:function(n){for(var l in this.controls)n(this.controls[l],l,this)},_setCornerCoords:function(){var n=this.oCoords;for(var l in n){var a=this.controls[l];n[l].corner=a.calcCornerCoords(this.angle,this.cornerSize,n[l].x,n[l].y,!1),n[l].touchCorner=a.calcCornerCoords(this.angle,this.touchCornerSize,n[l].x,n[l].y,!0)}},drawSelectionBackground:function(n){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;n.save();var l=this.getCenterPoint(),a=this._calculateCurrentDimensions(),t=this.canvas.viewportTransform;return n.translate(l.x,l.y),n.scale(1/t[0],1/t[3]),n.rotate(u(this.angle)),n.fillStyle=this.selectionBackgroundColor,n.fillRect(-a.x/2,-a.y/2,a.x,a.y),n.restore(),this},drawBorders:function(n,l){l=l||{};var a=this._calculateCurrentDimensions(),t=this.borderScaleFactor,i=a.x+t,e=a.y+t,s=typeof l.hasControls<"u"?l.hasControls:this.hasControls,h=!1;return n.save(),n.strokeStyle=l.borderColor||this.borderColor,this._setLineDash(n,l.borderDashArray||this.borderDashArray),n.strokeRect(-i/2,-e/2,i,e),s&&(n.beginPath(),this.forEachControl(function(r,c,f){r.withConnection&&r.getVisibility(f,c)&&(h=!0,n.moveTo(r.x*i,r.y*e),n.lineTo(r.x*i+r.offsetX,r.y*e+r.offsetY))}),h&&n.stroke()),n.restore(),this},drawBordersInGroup:function(n,l,a){a=a||{};var t=o.util.sizeAfterTransform(this.width,this.height,l),i=this.strokeWidth,e=this.strokeUniform,s=this.borderScaleFactor,h=t.x+i*(e?this.canvas.getZoom():l.scaleX)+s,r=t.y+i*(e?this.canvas.getZoom():l.scaleY)+s;return n.save(),this._setLineDash(n,a.borderDashArray||this.borderDashArray),n.strokeStyle=a.borderColor||this.borderColor,n.strokeRect(-h/2,-r/2,h,r),n.restore(),this},drawControls:function(n,l){l=l||{},n.save();var a=this.canvas.getRetinaScaling(),t,i;return n.setTransform(a,0,0,a,0,0),n.strokeStyle=n.fillStyle=l.cornerColor||this.cornerColor,this.transparentCorners||(n.strokeStyle=l.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(n,l.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(t=this.group.calcTransformMatrix()),this.forEachControl(function(e,s,h){i=h.oCoords[s],e.getVisibility(h,s)&&(t&&(i=o.util.transformPoint(i,t)),e.render(n,i.x,i.y,l,h))}),n.restore(),this},isControlVisible:function(n){return this.controls[n]&&this.controls[n].getVisibility(this,n)},setControlVisible:function(n,l){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[n]=l,this},setControlsVisibility:function(n){n||(n={});for(var l in n)this.setControlVisible(l,n[l]);return this},onDeselect:function(){},onSelect:function(){}})})(),o.util.object.extend(o.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(u,n){n=n||{};var l=function(){},a=n.onComplete||l,t=n.onChange||l,i=this;return o.util.animate({target:this,startValue:u.left,endValue:this.getCenterPoint().x,duration:this.FX_DURATION,onChange:function(e){u.set("left",e),i.requestRenderAll(),t()},onComplete:function(){u.setCoords(),a()}})},fxCenterObjectV:function(u,n){n=n||{};var l=function(){},a=n.onComplete||l,t=n.onChange||l,i=this;return o.util.animate({target:this,startValue:u.top,endValue:this.getCenterPoint().y,duration:this.FX_DURATION,onChange:function(e){u.set("top",e),i.requestRenderAll(),t()},onComplete:function(){u.setCoords(),a()}})},fxRemove:function(u,n){n=n||{};var l=function(){},a=n.onComplete||l,t=n.onChange||l,i=this;return o.util.animate({target:this,startValue:u.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(e){u.set("opacity",e),i.requestRenderAll(),t()},onComplete:function(){i.remove(u),a()}})}}),o.util.object.extend(o.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var u=[],n,l,a=[];for(n in arguments[0])u.push(n);for(var t=0,i=u.length;t<i;t++)n=u[t],l=t!==i-1,a.push(this._animate(n,arguments[0][n],arguments[1],l));return a}else return this._animate.apply(this,arguments)},_animate:function(u,n,l,a){var t=this,i;n=n.toString(),l?l=o.util.object.clone(l):l={},~u.indexOf(".")&&(i=u.split("."));var e=t.colorProperties.indexOf(u)>-1||i&&t.colorProperties.indexOf(i[1])>-1,s=i?this.get(i[0])[i[1]]:this.get(u);"from"in l||(l.from=s),e||(~n.indexOf("=")?n=s+parseFloat(n.replace("=","")):n=parseFloat(n));var h={target:this,startValue:l.from,endValue:n,byValue:l.by,easing:l.easing,duration:l.duration,abort:l.abort&&function(r,c,f){return l.abort.call(t,r,c,f)},onChange:function(r,c,f){i?t[i[0]][i[1]]=r:t.set(u,r),!a&&l.onChange&&l.onChange(r,c,f)},onComplete:function(r,c,f){a||(t.setCoords(),l.onComplete&&l.onComplete(r,c,f))}};return e?o.util.animateColor(h.startValue,h.endValue,h.duration,h):o.util.animate(h)}}),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.object.extend,a=n.util.object.clone,t={x1:1,x2:1,y1:1,y2:1};if(n.Line){n.warn("fabric.Line is already defined");return}n.Line=n.util.createClass(n.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:n.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(e,s){e||(e=[0,0,0,0]),this.callSuper("initialize",s),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(s)},_setWidthHeight:function(e){e||(e={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in e?e.left:this._getLeftToOriginX(),this.top="top"in e?e.top:this._getTopToOriginY()},_set:function(e,s){return this.callSuper("_set",e,s),typeof t[e]<"u"&&this._setWidthHeight(),this},_getLeftToOriginX:i({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:i({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(e){e.beginPath();var s=this.calcLinePoints();e.moveTo(s.x1,s.y1),e.lineTo(s.x2,s.y2),e.lineWidth=this.strokeWidth;var h=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this.stroke&&this._renderStroke(e),e.strokeStyle=h},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(e){return l(this.callSuper("toObject",e),this.calcLinePoints())},_getNonTransformedDimensions:function(){var e=this.callSuper("_getNonTransformedDimensions");return this.strokeLineCap==="butt"&&(this.width===0&&(e.y-=this.strokeWidth),this.height===0&&(e.x-=this.strokeWidth)),e},calcLinePoints:function(){var e=this.x1<=this.x2?-1:1,s=this.y1<=this.y2?-1:1,h=e*this.width*.5,r=s*this.height*.5,c=e*this.width*-.5,f=s*this.height*-.5;return{x1:h,x2:c,y1:r,y2:f}},_toSVG:function(){var e=this.calcLinePoints();return["<line ","COMMON_PARTS",'x1="',e.x1,'" y1="',e.y1,'" x2="',e.x2,'" y2="',e.y2,`" />
51
+ `]}}),n.Line.ATTRIBUTE_NAMES=n.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),n.Line.fromElement=function(e,s,h){h=h||{};var r=n.parseAttributes(e,n.Line.ATTRIBUTE_NAMES),c=[r.x1||0,r.y1||0,r.x2||0,r.y2||0];s(new n.Line(c,l(r,h)))},n.Line.fromObject=function(e,s){function h(c){delete c.points,s&&s(c)}var r=a(e,!0);r.points=[e.x1,e.y1,e.x2,e.y2],n.Object._fromObject("Line",r,h,"points")};function i(e,s){var h=e.origin,r=e.axis1,c=e.axis2,f=e.dimension,g=s.nearest,p=s.center,v=s.farthest;return function(){switch(this.get(h)){case g:return Math.min(this.get(r),this.get(c));case p:return Math.min(this.get(r),this.get(c))+.5*this.get(f);case v:return Math.max(this.get(r),this.get(c))}}}})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.degreesToRadians;if(n.Circle){n.warn("fabric.Circle is already defined.");return}n.Circle=n.util.createClass(n.Object,{type:"circle",radius:0,startAngle:0,endAngle:360,cacheProperties:n.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(t,i){return this.callSuper("_set",t,i),t==="radius"&&this.setRadius(i),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},_toSVG:function(){var t,i=0,e=0,s=(this.endAngle-this.startAngle)%360;if(s===0)t=["<circle ","COMMON_PARTS",'cx="'+i+'" cy="'+e+'" ','r="',this.radius,`" />
52
+ `];else{var h=l(this.startAngle),r=l(this.endAngle),c=this.radius,f=n.util.cos(h)*c,g=n.util.sin(h)*c,p=n.util.cos(r)*c,v=n.util.sin(r)*c,_=s>180?"1":"0";t=['<path d="M '+f+" "+g," A "+c+" "+c," 0 ",+_+" 1"," "+p+" "+v,'" ',"COMMON_PARTS",` />
53
+ `]}return t},_render:function(t){t.beginPath(),t.arc(0,0,this.radius,l(this.startAngle),l(this.endAngle),!1),this._renderPaintInOrder(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",t*2).set("height",t*2)}}),n.Circle.ATTRIBUTE_NAMES=n.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),n.Circle.fromElement=function(t,i){var e=n.parseAttributes(t,n.Circle.ATTRIBUTE_NAMES);if(!a(e))throw new Error("value of `r` attribute is required and can not be negative");e.left=(e.left||0)-e.radius,e.top=(e.top||0)-e.radius,i(new n.Circle(e))};function a(t){return"radius"in t&&t.radius>=0}n.Circle.fromObject=function(t,i){n.Object._fromObject("Circle",t,i)}})(d),(function(u){var n=u.fabric||(u.fabric={});if(n.Triangle){n.warn("fabric.Triangle is already defined");return}n.Triangle=n.util.createClass(n.Object,{type:"triangle",width:100,height:100,_render:function(l){var a=this.width/2,t=this.height/2;l.beginPath(),l.moveTo(-a,t),l.lineTo(0,-t),l.lineTo(a,t),l.closePath(),this._renderPaintInOrder(l)},_toSVG:function(){var l=this.width/2,a=this.height/2,t=[-l+" "+a,"0 "+-a,l+" "+a].join(",");return["<polygon ","COMMON_PARTS",'points="',t,'" />']}}),n.Triangle.fromObject=function(l,a){return n.Object._fromObject("Triangle",l,a)}})(d),(function(u){var n=u.fabric||(u.fabric={}),l=Math.PI*2;if(n.Ellipse){n.warn("fabric.Ellipse is already defined.");return}n.Ellipse=n.util.createClass(n.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:n.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(a){this.callSuper("initialize",a),this.set("rx",a&&a.rx||0),this.set("ry",a&&a.ry||0)},_set:function(a,t){switch(this.callSuper("_set",a,t),a){case"rx":this.rx=t,this.set("width",t*2);break;case"ry":this.ry=t,this.set("height",t*2);break}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(a){return this.callSuper("toObject",["rx","ry"].concat(a))},_toSVG:function(){return["<ellipse ","COMMON_PARTS",'cx="0" cy="0" ','rx="',this.rx,'" ry="',this.ry,`" />
54
+ `]},_render:function(a){a.beginPath(),a.save(),a.transform(1,0,0,this.ry/this.rx,0,0),a.arc(0,0,this.rx,0,l,!1),a.restore(),this._renderPaintInOrder(a)}}),n.Ellipse.ATTRIBUTE_NAMES=n.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),n.Ellipse.fromElement=function(a,t){var i=n.parseAttributes(a,n.Ellipse.ATTRIBUTE_NAMES);i.left=(i.left||0)-i.rx,i.top=(i.top||0)-i.ry,t(new n.Ellipse(i))},n.Ellipse.fromObject=function(a,t){n.Object._fromObject("Ellipse",a,t)}})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.object.extend;if(n.Rect){n.warn("fabric.Rect is already defined");return}n.Rect=n.util.createClass(n.Object,{stateProperties:n.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:n.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(a){this.callSuper("initialize",a),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(a){var t=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,e=this.width,s=this.height,h=-this.width/2,r=-this.height/2,c=t!==0||i!==0,f=1-.5522847498;a.beginPath(),a.moveTo(h+t,r),a.lineTo(h+e-t,r),c&&a.bezierCurveTo(h+e-f*t,r,h+e,r+f*i,h+e,r+i),a.lineTo(h+e,r+s-i),c&&a.bezierCurveTo(h+e,r+s-f*i,h+e-f*t,r+s,h+e-t,r+s),a.lineTo(h+t,r+s),c&&a.bezierCurveTo(h+f*t,r+s,h,r+s-f*i,h,r+s-i),a.lineTo(h,r+i),c&&a.bezierCurveTo(h,r+f*i,h+f*t,r,h+t,r),a.closePath(),this._renderPaintInOrder(a)},toObject:function(a){return this.callSuper("toObject",["rx","ry"].concat(a))},_toSVG:function(){var a=-this.width/2,t=-this.height/2;return["<rect ","COMMON_PARTS",'x="',a,'" y="',t,'" rx="',this.rx,'" ry="',this.ry,'" width="',this.width,'" height="',this.height,`" />
55
+ `]}}),n.Rect.ATTRIBUTE_NAMES=n.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),n.Rect.fromElement=function(a,t,i){if(!a)return t(null);i=i||{};var e=n.parseAttributes(a,n.Rect.ATTRIBUTE_NAMES);e.left=e.left||0,e.top=e.top||0,e.height=e.height||0,e.width=e.width||0;var s=new n.Rect(l(i?n.util.object.clone(i):{},e));s.visible=s.visible&&s.width>0&&s.height>0,t(s)},n.Rect.fromObject=function(a,t){return n.Object._fromObject("Rect",a,t)}})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.object.extend,a=n.util.array.min,t=n.util.array.max,i=n.util.toFixed,e=n.util.projectStrokeOnPoints;if(n.Polyline){n.warn("fabric.Polyline is already defined");return}n.Polyline=n.util.createClass(n.Object,{type:"polyline",points:null,exactBoundingBox:!1,cacheProperties:n.Object.prototype.cacheProperties.concat("points"),initialize:function(s,h){h=h||{},this.points=s||[],this.callSuper("initialize",h),this._setPositionDimensions(h)},_projectStrokeOnPoints:function(){return e(this.points,this,!0)},_setPositionDimensions:function(s){var h=this._calcDimensions(s),r,c=this.exactBoundingBox?this.strokeWidth:0;this.width=h.width-c,this.height=h.height-c,s.fromSVG||(r=this.translateToGivenOrigin({x:h.left-this.strokeWidth/2+c/2,y:h.top-this.strokeWidth/2+c/2},"left","top",this.originX,this.originY)),typeof s.left>"u"&&(this.left=s.fromSVG?h.left:r.x),typeof s.top>"u"&&(this.top=s.fromSVG?h.top:r.y),this.pathOffset={x:h.left+this.width/2+c/2,y:h.top+this.height/2+c/2}},_calcDimensions:function(){var s=this.exactBoundingBox?this._projectStrokeOnPoints():this.points,h=a(s,"x")||0,r=a(s,"y")||0,c=t(s,"x")||0,f=t(s,"y")||0,g=c-h,p=f-r;return{left:h,top:r,width:g,height:p}},toObject:function(s){return l(this.callSuper("toObject",s),{points:this.points.concat()})},_toSVG:function(){for(var s=[],h=this.pathOffset.x,r=this.pathOffset.y,c=n.Object.NUM_FRACTION_DIGITS,f=0,g=this.points.length;f<g;f++)s.push(i(this.points[f].x-h,c),",",i(this.points[f].y-r,c)," ");return["<"+this.type+" ","COMMON_PARTS",'points="',s.join(""),`" />
56
+ `]},commonRender:function(s){var h,r=this.points.length,c=this.pathOffset.x,f=this.pathOffset.y;if(!r||isNaN(this.points[r-1].y))return!1;s.beginPath(),s.moveTo(this.points[0].x-c,this.points[0].y-f);for(var g=0;g<r;g++)h=this.points[g],s.lineTo(h.x-c,h.y-f);return!0},_render:function(s){this.commonRender(s)&&this._renderPaintInOrder(s)},complexity:function(){return this.get("points").length}}),n.Polyline.ATTRIBUTE_NAMES=n.SHARED_ATTRIBUTES.concat(),n.Polyline.fromElementGenerator=function(s){return function(h,r,c){if(!h)return r(null);c||(c={});var f=n.parsePointsAttribute(h.getAttribute("points")),g=n.parseAttributes(h,n[s].ATTRIBUTE_NAMES);g.fromSVG=!0,r(new n[s](f,l(g,c)))}},n.Polyline.fromElement=n.Polyline.fromElementGenerator("Polyline"),n.Polyline.fromObject=function(s,h){return n.Object._fromObject("Polyline",s,h,"points")}})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.projectStrokeOnPoints;if(n.Polygon){n.warn("fabric.Polygon is already defined");return}n.Polygon=n.util.createClass(n.Polyline,{type:"polygon",_projectStrokeOnPoints:function(){return l(this.points,this)},_render:function(a){this.commonRender(a)&&(a.closePath(),this._renderPaintInOrder(a))}}),n.Polygon.ATTRIBUTE_NAMES=n.SHARED_ATTRIBUTES.concat(),n.Polygon.fromElement=n.Polyline.fromElementGenerator("Polygon"),n.Polygon.fromObject=function(a,t){n.Object._fromObject("Polygon",a,t,"points")}})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.array.min,a=n.util.array.max,t=n.util.object.extend,i=n.util.object.clone,e=n.util.toFixed;if(n.Path){n.warn("fabric.Path is already defined");return}n.Path=n.util.createClass(n.Object,{type:"path",path:null,cacheProperties:n.Object.prototype.cacheProperties.concat("path","fillRule"),stateProperties:n.Object.prototype.stateProperties.concat("path"),initialize:function(s,h){h=i(h||{}),delete h.path,this.callSuper("initialize",h),this._setPath(s||[],h)},_setPath:function(s,h){this.path=n.util.makePathSimpler(Array.isArray(s)?s:n.util.parsePath(s)),n.Polyline.prototype._setPositionDimensions.call(this,h||{})},_renderPathCommands:function(s){var h,r=0,c=0,f=0,g=0,p=0,v=0,_=-this.pathOffset.x,x=-this.pathOffset.y;s.beginPath();for(var D=0,B=this.path.length;D<B;++D)switch(h=this.path[D],h[0]){case"L":f=h[1],g=h[2],s.lineTo(f+_,g+x);break;case"M":f=h[1],g=h[2],r=f,c=g,s.moveTo(f+_,g+x);break;case"C":f=h[5],g=h[6],p=h[3],v=h[4],s.bezierCurveTo(h[1]+_,h[2]+x,p+_,v+x,f+_,g+x);break;case"Q":s.quadraticCurveTo(h[1]+_,h[2]+x,h[3]+_,h[4]+x),f=h[3],g=h[4],p=h[1],v=h[2];break;case"z":case"Z":f=r,g=c,s.closePath();break}},_render:function(s){this._renderPathCommands(s),this._renderPaintInOrder(s)},toString:function(){return"#<fabric.Path ("+this.complexity()+'): { "top": '+this.top+', "left": '+this.left+" }>"},toObject:function(s){return t(this.callSuper("toObject",s),{path:this.path.map(function(h){return h.slice()})})},toDatalessObject:function(s){var h=this.toObject(["sourcePath"].concat(s));return h.sourcePath&&delete h.path,h},_toSVG:function(){var s=n.util.joinPath(this.path);return["<path ","COMMON_PARTS",'d="',s,'" stroke-linecap="round" ',`/>
57
+ `]},_getOffsetTransform:function(){var s=n.Object.NUM_FRACTION_DIGITS;return" translate("+e(-this.pathOffset.x,s)+", "+e(-this.pathOffset.y,s)+")"},toClipPathSVG:function(s){var h=this._getOffsetTransform();return" "+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:s,additionalTransform:h})},toSVG:function(s){var h=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:s,additionalTransform:h})},complexity:function(){return this.path.length},_calcDimensions:function(){for(var s=[],h=[],r,c=0,f=0,g=0,p=0,v,_=0,x=this.path.length;_<x;++_){switch(r=this.path[_],r[0]){case"L":g=r[1],p=r[2],v=[];break;case"M":g=r[1],p=r[2],c=g,f=p,v=[];break;case"C":v=n.util.getBoundsOfCurve(g,p,r[1],r[2],r[3],r[4],r[5],r[6]),g=r[5],p=r[6];break;case"Q":v=n.util.getBoundsOfCurve(g,p,r[1],r[2],r[1],r[2],r[3],r[4]),g=r[3],p=r[4];break;case"z":case"Z":g=c,p=f;break}v.forEach(function(q){s.push(q.x),h.push(q.y)}),s.push(g),h.push(p)}var D=l(s)||0,B=l(h)||0,z=a(s)||0,G=a(h)||0,Q=z-D,Z=G-B;return{left:D,top:B,width:Q,height:Z}}}),n.Path.fromObject=function(s,h){if(typeof s.sourcePath=="string"){var r=s.sourcePath;n.loadSVGFromURL(r,function(c){var f=c[0];f.setOptions(s),s.clipPath?n.util.enlivenObjects([s.clipPath],function(g){f.clipPath=g[0],h&&h(f)}):h&&h(f)})}else n.Object._fromObject("Path",s,h,"path")},n.Path.ATTRIBUTE_NAMES=n.SHARED_ATTRIBUTES.concat(["d"]),n.Path.fromElement=function(s,h,r){var c=n.parseAttributes(s,n.Path.ATTRIBUTE_NAMES);c.fromSVG=!0,h(new n.Path(c.d,t(c,r)))}})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.array.min,a=n.util.array.max;n.Group||(n.Group=n.util.createClass(n.Object,n.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,cacheProperties:[],useSetOnGroup:!1,initialize:function(t,i,e){i=i||{},this._objects=[],e&&this.callSuper("initialize",i),this._objects=t||[];for(var s=this._objects.length;s--;)this._objects[s].group=this;if(e)this._updateObjectsACoords();else{var h=i&&i.centerPoint;i.originX!==void 0&&(this.originX=i.originX),i.originY!==void 0&&(this.originY=i.originY),h||this._calcBounds(),this._updateObjectsCoords(h),delete i.centerPoint,this.callSuper("initialize",i)}this.setCoords()},_updateObjectsACoords:function(){for(var t=!0,i=this._objects.length;i--;)this._objects[i].setCoords(t)},_updateObjectsCoords:function(i){for(var i=i||this.getCenterPoint(),e=this._objects.length;e--;)this._updateObjectCoords(this._objects[e],i)},_updateObjectCoords:function(t,i){var e=t.left,s=t.top,h=!0;t.set({left:e-i.x,top:s-i.y}),t.group=this,t.setCoords(h)},toString:function(){return"#<fabric.Group: ("+this.complexity()+")>"},addWithUpdate:function(t){var i=!!this.group;return this._restoreObjectsState(),n.util.resetObjectTransform(this),t&&(i&&n.util.removeTransformFromObject(t,this.group.calcTransformMatrix()),this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,i?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(t){return this._restoreObjectsState(),n.util.resetObjectTransform(this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group},_set:function(t,i){var e=this._objects.length;if(this.useSetOnGroup)for(;e--;)this._objects[e].setOnGroup(t,i);if(t==="canvas")for(;e--;)this._objects[e]._set(t,i);n.Object.prototype._set.call(this,t,i)},toObject:function(t){var i=this.includeDefaultValues,e=this._objects.filter(function(h){return!h.excludeFromExport}).map(function(h){var r=h.includeDefaultValues;h.includeDefaultValues=i;var c=h.toObject(t);return h.includeDefaultValues=r,c}),s=n.Object.prototype.toObject.call(this,t);return s.objects=e,s},toDatalessObject:function(t){var i,e=this.sourcePath;if(e)i=e;else{var s=this.includeDefaultValues;i=this._objects.map(function(r){var c=r.includeDefaultValues;r.includeDefaultValues=s;var f=r.toDatalessObject(t);return r.includeDefaultValues=c,f})}var h=n.Object.prototype.toDatalessObject.call(this,t);return h.objects=i,h},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=n.Object.prototype.shouldCache.call(this);if(t){for(var i=0,e=this._objects.length;i<e;i++)if(this._objects[i].willDrawShadow())return this.ownCaching=!1,!1}return t},willDrawShadow:function(){if(n.Object.prototype.willDrawShadow.call(this))return!0;for(var t=0,i=this._objects.length;t<i;t++)if(this._objects[t].willDrawShadow())return!0;return!1},isOnACache:function(){return this.ownCaching||this.group&&this.group.isOnACache()},drawObject:function(t){for(var i=0,e=this._objects.length;i<e;i++)this._objects[i].render(t);this._drawClipPath(t,this.clipPath)},isCacheDirty:function(t){if(this.callSuper("isCacheDirty",t))return!0;if(!this.statefullCache)return!1;for(var i=0,e=this._objects.length;i<e;i++)if(this._objects[i].isCacheDirty(!0)){if(this._cacheCanvas){var s=this.cacheWidth/this.zoomX,h=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-s/2,-h/2,s,h)}return!0}return!1},_restoreObjectsState:function(){var t=this.calcOwnMatrix();return this._objects.forEach(function(i){n.util.addTransformToObject(i,t),delete i.group,i.setCoords()}),this},destroy:function(){return this._objects.forEach(function(t){t.set("dirty",!0)}),this._restoreObjectsState()},dispose:function(){this.callSuper("dispose"),this.forEachObject(function(t){t.dispose&&t.dispose()}),this._objects=[]},toActiveSelection:function(){if(this.canvas){var t=this._objects,i=this.canvas;this._objects=[];var e=this.toObject();delete e.objects;var s=new n.ActiveSelection([]);return s.set(e),s.type="activeSelection",i.remove(this),t.forEach(function(h){h.group=s,h.dirty=!0,i.add(h)}),s.canvas=i,s._objects=t,i._activeObject=s,s.setCoords(),s}},ungroupOnCanvas:function(){return this._restoreObjectsState()},setObjectsCoords:function(){var t=!0;return this.forEachObject(function(i){i.setCoords(t)}),this},_calcBounds:function(t){for(var i=[],e=[],s,h,r,c=["tr","br","bl","tl"],f=0,g=this._objects.length,p,v=c.length;f<g;++f){for(s=this._objects[f],r=s.calcACoords(),p=0;p<v;p++)h=c[p],i.push(r[h].x),e.push(r[h].y);s.aCoords=r}this._getBounds(i,e,t)},_getBounds:function(t,i,e){var s=new n.Point(l(t),l(i)),h=new n.Point(a(t),a(i)),r=s.y||0,c=s.x||0,f=h.x-s.x||0,g=h.y-s.y||0;this.width=f,this.height=g,e||this.setPositionByOrigin({x:c,y:r},"left","top")},_toSVG:function(t){for(var i=["<g ","COMMON_PARTS",` >
58
+ `],e=0,s=this._objects.length;e<s;e++)i.push(" ",this._objects[e].toSVG(t));return i.push(`</g>
59
+ `),i},getSvgStyles:function(){var t=typeof this.opacity<"u"&&this.opacity!==1?"opacity: "+this.opacity+";":"",i=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),i].join("")},toClipPathSVG:function(t){for(var i=[],e=0,s=this._objects.length;e<s;e++)i.push(" ",this._objects[e].toClipPathSVG(t));return this._createBaseClipPathSVGMarkup(i,{reviver:t})}}),n.Group.fromObject=function(t,i){var e=t.objects,s=n.util.object.clone(t,!0);if(delete s.objects,typeof e=="string"){n.loadSVGFromURL(e,function(h){var r=n.util.groupSVGElements(h,t,e),c=s.clipPath;delete s.clipPath,r.set(s),c?n.util.enlivenObjects([c],function(f){r.clipPath=f[0],i&&i(r)}):i&&i(r)});return}n.util.enlivenObjects(e,function(h){n.util.enlivenObjectEnlivables(t,s,function(){i&&i(new n.Group(h,s,!0))})})})})(d),(function(u){var n=u.fabric||(u.fabric={});n.ActiveSelection||(n.ActiveSelection=n.util.createClass(n.Group,{type:"activeSelection",initialize:function(l,a){a=a||{},this._objects=l||[];for(var t=this._objects.length;t--;)this._objects[t].group=this;a.originX&&(this.originX=a.originX),a.originY&&(this.originY=a.originY),this._calcBounds(),this._updateObjectsCoords(),n.Object.prototype.initialize.call(this,a),this.setCoords()},toGroup:function(){var l=this._objects.concat();this._objects=[];var a=n.Object.prototype.toObject.call(this),t=new n.Group([]);if(delete a.type,t.set(a),l.forEach(function(e){e.canvas.remove(e),e.group=t}),t._objects=l,!this.canvas)return t;var i=this.canvas;return i.add(t),i._activeObject=t,t.setCoords(),t},onDeselect:function(){return this.destroy(),!1},toString:function(){return"#<fabric.ActiveSelection: ("+this.complexity()+")>"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(l,a,t){l.save(),l.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",l,a),t=t||{},typeof t.hasControls>"u"&&(t.hasControls=!1),t.forActiveSelection=!0;for(var i=0,e=this._objects.length;i<e;i++)this._objects[i]._renderControls(l,t);l.restore()}}),n.ActiveSelection.fromObject=function(l,a){n.util.enlivenObjects(l.objects,function(t){delete l.objects,a&&a(new n.ActiveSelection(t,l,!0))})})})(d),(function(u){var n=o.util.object.extend;if(u.fabric||(u.fabric={}),u.fabric.Image){o.warn("fabric.Image is already defined.");return}o.Image=o.util.createClass(o.Object,{type:"image",strokeWidth:0,srcFromAttribute:!1,_lastScaleX:1,_lastScaleY:1,_filterScalingX:1,_filterScalingY:1,minimumScaleTrigger:.5,stateProperties:o.Object.prototype.stateProperties.concat("cropX","cropY"),cacheProperties:o.Object.prototype.cacheProperties.concat("cropX","cropY"),cacheKey:"",cropX:0,cropY:0,imageSmoothing:!0,initialize:function(l,a){a||(a={}),this.filters=[],this.cacheKey="texture"+o.Object.__uid++,this.callSuper("initialize",a),this._initElement(l,a)},getElement:function(){return this._element||{}},setElement:function(l,a){return this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._element=l,this._originalElement=l,this._initConfig(a),this.filters.length!==0&&this.applyFilters(),this.resizeFilter&&this.applyResizeFilters(),this},removeTexture:function(l){var a=o.filterBackend;a&&a.evictCachesForKey&&a.evictCachesForKey(l)},dispose:function(){this.callSuper("dispose"),this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._cacheContext=void 0,["_originalElement","_element","_filteredEl","_cacheCanvas"].forEach((function(l){o.util.cleanUpJsdomNode(this[l]),this[l]=void 0}).bind(this))},getCrossOrigin:function(){return this._originalElement&&(this._originalElement.crossOrigin||null)},getOriginalSize:function(){var l=this.getElement();return{width:l.naturalWidth||l.width,height:l.naturalHeight||l.height}},_stroke:function(l){if(!(!this.stroke||this.strokeWidth===0)){var a=this.width/2,t=this.height/2;l.beginPath(),l.moveTo(-a,-t),l.lineTo(a,-t),l.lineTo(a,t),l.lineTo(-a,t),l.lineTo(-a,-t),l.closePath()}},toObject:function(l){var a=[];this.filters.forEach(function(i){i&&a.push(i.toObject())});var t=n(this.callSuper("toObject",["cropX","cropY"].concat(l)),{src:this.getSrc(),crossOrigin:this.getCrossOrigin(),filters:a});return this.resizeFilter&&(t.resizeFilter=this.resizeFilter.toObject()),t},hasCrop:function(){return this.cropX||this.cropY||this.width<this._element.width||this.height<this._element.height},_toSVG:function(){var l=[],a=[],t,i=this._element,e=-this.width/2,s=-this.height/2,h="",r="";if(!i)return[];if(this.hasCrop()){var c=o.Object.__uid++;l.push('<clipPath id="imageCrop_'+c+`">
60
+ `,' <rect x="'+e+'" y="'+s+'" width="'+this.width+'" height="'+this.height+`" />
61
+ `,`</clipPath>
62
+ `),h=' clip-path="url(#imageCrop_'+c+')" '}if(this.imageSmoothing||(r='" image-rendering="optimizeSpeed'),a.push(" <image ","COMMON_PARTS",'xlink:href="',this.getSvgSrc(!0),'" x="',e-this.cropX,'" y="',s-this.cropY,'" width="',i.width||i.naturalWidth,'" height="',i.height||i.height,r,'"',h,`></image>
63
+ `),this.stroke||this.strokeDashArray){var f=this.fill;this.fill=null,t=[" <rect ",'x="',e,'" y="',s,'" width="',this.width,'" height="',this.height,'" style="',this.getSvgStyles(),`"/>
64
+ `],this.fill=f}return this.paintFirst!=="fill"?l=l.concat(t,a):l=l.concat(a,t),l},getSrc:function(l){var a=l?this._element:this._originalElement;return a?a.toDataURL?a.toDataURL():this.srcFromAttribute?a.getAttribute("src"):a.src:this.src||""},setSrc:function(l,a,t){return o.util.loadImage(l,function(i,e){this.setElement(i,t),this._setWidthHeight(),a&&a(this,e)},this,t&&t.crossOrigin),this},toString:function(){return'#<fabric.Image: { src: "'+this.getSrc()+'" }>'},applyResizeFilters:function(){var l=this.resizeFilter,a=this.minimumScaleTrigger,t=this.getTotalObjectScaling(),i=t.scaleX,e=t.scaleY,s=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!l||i>a&&e>a){this._element=s,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=i,this._lastScaleY=e;return}o.filterBackend||(o.filterBackend=o.initFilterBackend());var h=o.util.createCanvasElement(),r=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,c=s.width,f=s.height;h.width=c,h.height=f,this._element=h,this._lastScaleX=l.scaleX=i,this._lastScaleY=l.scaleY=e,o.filterBackend.applyFilters([l],s,c,f,this._element,r),this._filterScalingX=h.width/this._originalElement.width,this._filterScalingY=h.height/this._originalElement.height},applyFilters:function(l){if(l=l||this.filters||[],l=l.filter(function(s){return s&&!s.isNeutralState()}),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),l.length===0)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var a=this._originalElement,t=a.naturalWidth||a.width,i=a.naturalHeight||a.height;if(this._element===this._originalElement){var e=o.util.createCanvasElement();e.width=t,e.height=i,this._element=e,this._filteredEl=e}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,t,i),this._lastScaleX=1,this._lastScaleY=1;return o.filterBackend||(o.filterBackend=o.initFilterBackend()),o.filterBackend.applyFilters(l,this._originalElement,t,i,this._element,this.cacheKey),(this._originalElement.width!==this._element.width||this._originalElement.height!==this._element.height)&&(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(l){o.util.setImageSmoothing(l,this.imageSmoothing),this.isMoving!==!0&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(l),this._renderPaintInOrder(l)},drawCacheOnCanvas:function(l){o.util.setImageSmoothing(l,this.imageSmoothing),o.Object.prototype.drawCacheOnCanvas.call(this,l)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(l){var a=this._element;if(a){var t=this._filterScalingX,i=this._filterScalingY,e=this.width,s=this.height,h=Math.min,r=Math.max,c=r(this.cropX,0),f=r(this.cropY,0),g=a.naturalWidth||a.width,p=a.naturalHeight||a.height,v=c*t,_=f*i,x=h(e*t,g-v),D=h(s*i,p-_),B=-e/2,z=-s/2,G=h(e,g/t-c),Q=h(s,p/i-f);a&&l.drawImage(a,v,_,x,D,B,z,G,Q)}},_needsResize:function(){var l=this.getTotalObjectScaling();return l.scaleX!==this._lastScaleX||l.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(l,a){this.setElement(o.util.getById(l),a),o.util.addClass(this.getElement(),o.Image.CSS_CANVAS)},_initConfig:function(l){l||(l={}),this.setOptions(l),this._setWidthHeight(l)},_initFilters:function(l,a){l&&l.length?o.util.enlivenObjects(l,function(t){a&&a(t)},"fabric.Image.filters"):a&&a()},_setWidthHeight:function(l){l||(l={});var a=this.getElement();this.width=l.width||a.naturalWidth||a.width||0,this.height=l.height||a.naturalHeight||a.height||0},parsePreserveAspectRatioAttribute:function(){var l=o.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),a=this._element.width,t=this._element.height,i=1,e=1,s=0,h=0,r=0,c=0,f,g=this.width,p=this.height,v={width:g,height:p};return l&&(l.alignX!=="none"||l.alignY!=="none")?(l.meetOrSlice==="meet"&&(i=e=o.util.findScaleToFit(this._element,v),f=(g-a*i)/2,l.alignX==="Min"&&(s=-f),l.alignX==="Max"&&(s=f),f=(p-t*e)/2,l.alignY==="Min"&&(h=-f),l.alignY==="Max"&&(h=f)),l.meetOrSlice==="slice"&&(i=e=o.util.findScaleToCover(this._element,v),f=a-g/i,l.alignX==="Mid"&&(r=f/2),l.alignX==="Max"&&(r=f),f=t-p/e,l.alignY==="Mid"&&(c=f/2),l.alignY==="Max"&&(c=f),a=g/i,t=p/e)):(i=g/a,e=p/t),{width:a,height:t,scaleX:i,scaleY:e,offsetLeft:s,offsetTop:h,cropX:r,cropY:c}}}),o.Image.CSS_CANVAS="canvas-img",o.Image.prototype.getSvgSrc=o.Image.prototype.getSrc,o.Image.fromObject=function(l,a){var t=o.util.object.clone(l);o.util.loadImage(t.src,function(i,e){if(e){a&&a(null,!0);return}o.Image.prototype._initFilters.call(t,t.filters,function(s){t.filters=s||[],o.Image.prototype._initFilters.call(t,[t.resizeFilter],function(h){t.resizeFilter=h[0],o.util.enlivenObjectEnlivables(t,t,function(){var r=new o.Image(i,t);a(r,!1)})})})},null,t.crossOrigin)},o.Image.fromURL=function(l,a,t){o.util.loadImage(l,function(i,e){a&&a(new o.Image(i,t),e)},null,t&&t.crossOrigin)},o.Image.ATTRIBUTE_NAMES=o.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")),o.Image.fromElement=function(l,a,t){var i=o.parseAttributes(l,o.Image.ATTRIBUTE_NAMES);o.Image.fromURL(i["xlink:href"],a,n(t?o.util.object.clone(t):{},i))}})(d),o.util.object.extend(o.Object.prototype,{_getAngleValueForStraighten:function(){var u=this.angle%360;return u>0?Math.round((u-1)/90)*90:Math.round(u/90)*90},straighten:function(){return this.rotate(this._getAngleValueForStraighten())},fxStraighten:function(u){u=u||{};var n=function(){},l=u.onComplete||n,a=u.onChange||n,t=this;return o.util.animate({target:this,startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(i){t.rotate(i),a()},onComplete:function(){t.setCoords(),l()}})}}),o.util.object.extend(o.StaticCanvas.prototype,{straightenObject:function(u){return u.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(u){return u.fxStraighten({onChange:this.requestRenderAllBound})}}),(function(){function u(l,a){var t="precision "+a+` float;
65
+ void main(){}`,i=l.createShader(l.FRAGMENT_SHADER);return l.shaderSource(i,t),l.compileShader(i),!!l.getShaderParameter(i,l.COMPILE_STATUS)}o.isWebglSupported=function(l){if(o.isLikelyNode)return!1;l=l||o.WebglFilterBackend.prototype.tileSize;var a=document.createElement("canvas"),t=a.getContext("webgl")||a.getContext("experimental-webgl"),i=!1;if(t){o.maxTextureSize=t.getParameter(t.MAX_TEXTURE_SIZE),i=o.maxTextureSize>=l;for(var e=["highp","mediump","lowp"],s=0;s<3;s++)if(u(t,e[s])){o.webGlPrecision=e[s];break}}return this.isSupported=i,i},o.WebglFilterBackend=n;function n(l){l&&l.tileSize&&(this.tileSize=l.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}n.prototype={tileSize:2048,resources:{},setupGLContext:function(l,a){this.dispose(),this.createWebGLCanvas(l,a),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(l,a)},chooseFastestCopyGLTo2DMethod:function(l,a){var t=typeof window.performance<"u",i;try{new ImageData(1,1),i=!0}catch{i=!1}var e=typeof ArrayBuffer<"u",s=typeof Uint8ClampedArray<"u";if(t&&i&&e&&s){var h=o.util.createCanvasElement(),r=new ArrayBuffer(l*a*4);if(o.forceGLPutImageData){this.imageBuffer=r,this.copyGLTo2D=F;return}var c={imageBuffer:r,destinationWidth:l,destinationHeight:a,targetCanvas:h},f,g,p;h.width=l,h.height=a,f=window.performance.now(),T.call(c,this.gl,c),g=window.performance.now()-f,f=window.performance.now(),F.call(c,this.gl,c),p=window.performance.now()-f,g>p?(this.imageBuffer=r,this.copyGLTo2D=F):this.copyGLTo2D=T}},createWebGLCanvas:function(l,a){var t=o.util.createCanvasElement();t.width=l,t.height=a;var i={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},e=t.getContext("webgl",i);e||(e=t.getContext("experimental-webgl",i)),e&&(e.clearColor(0,0,0,0),this.canvas=t,this.gl=e)},applyFilters:function(l,a,t,i,e,s){var h=this.gl,r;s&&(r=this.getCachedTexture(s,a));var c={originalWidth:a.width||a.originalWidth,originalHeight:a.height||a.originalHeight,sourceWidth:t,sourceHeight:i,destinationWidth:t,destinationHeight:i,context:h,sourceTexture:this.createTexture(h,t,i,!r&&a),targetTexture:this.createTexture(h,t,i),originalTexture:r||this.createTexture(h,t,i,!r&&a),passes:l.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:e},f=h.createFramebuffer();return h.bindFramebuffer(h.FRAMEBUFFER,f),l.forEach(function(g){g&&g.applyTo(c)}),b(c),this.copyGLTo2D(h,c),h.bindTexture(h.TEXTURE_2D,null),h.deleteTexture(c.sourceTexture),h.deleteTexture(c.targetTexture),h.deleteFramebuffer(f),e.getContext("2d").setTransform(1,0,0,1,0,0),c},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(l,a,t,i,e){var s=l.createTexture();return l.bindTexture(l.TEXTURE_2D,s),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,e||l.NEAREST),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,e||l.NEAREST),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),i?l.texImage2D(l.TEXTURE_2D,0,l.RGBA,l.RGBA,l.UNSIGNED_BYTE,i):l.texImage2D(l.TEXTURE_2D,0,l.RGBA,a,t,0,l.RGBA,l.UNSIGNED_BYTE,null),s},getCachedTexture:function(l,a){if(this.textureCache[l])return this.textureCache[l];var t=this.createTexture(this.gl,a.width,a.height,a);return this.textureCache[l]=t,t},evictCachesForKey:function(l){this.textureCache[l]&&(this.gl.deleteTexture(this.textureCache[l]),delete this.textureCache[l])},copyGLTo2D:T,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var l=this.gl,a={renderer:"",vendor:""};if(!l)return a;var t=l.getExtension("WEBGL_debug_renderer_info");if(t){var i=l.getParameter(t.UNMASKED_RENDERER_WEBGL),e=l.getParameter(t.UNMASKED_VENDOR_WEBGL);i&&(a.renderer=i.toLowerCase()),e&&(a.vendor=e.toLowerCase())}return this.gpuInfo=a,a}}})();function b(u){var n=u.targetCanvas,l=n.width,a=n.height,t=u.destinationWidth,i=u.destinationHeight;(l!==t||a!==i)&&(n.width=t,n.height=i)}function T(u,n){var l=u.canvas,a=n.targetCanvas,t=a.getContext("2d");t.translate(0,a.height),t.scale(1,-1);var i=l.height-a.height;t.drawImage(l,0,i,a.width,a.height,0,0,a.width,a.height)}function F(u,n){var l=n.targetCanvas,a=l.getContext("2d"),t=n.destinationWidth,i=n.destinationHeight,e=t*i*4,s=new Uint8Array(this.imageBuffer,0,e),h=new Uint8ClampedArray(this.imageBuffer,0,e);u.readPixels(0,0,t,i,u.RGBA,u.UNSIGNED_BYTE,s);var r=new ImageData(h,t,i);a.putImageData(r,0,0)}(function(){var u=function(){};o.Canvas2dFilterBackend=n;function n(){}n.prototype={evictCachesForKey:u,dispose:u,clearWebGLCaches:u,resources:{},applyFilters:function(l,a,t,i,e){var s=e.getContext("2d");s.drawImage(a,0,0,t,i);var h=s.getImageData(0,0,t,i),r=s.getImageData(0,0,t,i),c={sourceWidth:t,sourceHeight:i,imageData:h,originalEl:a,originalImageData:r,canvasEl:e,ctx:s,filterBackend:this};return l.forEach(function(f){f.applyTo(c)}),(c.imageData.width!==t||c.imageData.height!==i)&&(e.width=c.imageData.width,e.height=c.imageData.height),s.putImageData(c.imageData,0,0),c}}})(),o.Image=o.Image||{},o.Image.filters=o.Image.filters||{},o.Image.filters.BaseFilter=o.util.createClass({type:"BaseFilter",vertexSource:`attribute vec2 aPosition;
66
+ varying vec2 vTexCoord;
67
+ void main() {
68
+ vTexCoord = aPosition;
69
+ gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
70
+ }`,fragmentSource:`precision highp float;
71
+ varying vec2 vTexCoord;
72
+ uniform sampler2D uTexture;
73
+ void main() {
74
+ gl_FragColor = texture2D(uTexture, vTexCoord);
75
+ }`,initialize:function(u){u&&this.setOptions(u)},setOptions:function(u){for(var n in u)this[n]=u[n]},createProgram:function(u,n,l){n=n||this.fragmentSource,l=l||this.vertexSource,o.webGlPrecision!=="highp"&&(n=n.replace(/precision highp float/g,"precision "+o.webGlPrecision+" float"));var a=u.createShader(u.VERTEX_SHADER);if(u.shaderSource(a,l),u.compileShader(a),!u.getShaderParameter(a,u.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+u.getShaderInfoLog(a));var t=u.createShader(u.FRAGMENT_SHADER);if(u.shaderSource(t,n),u.compileShader(t),!u.getShaderParameter(t,u.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+u.getShaderInfoLog(t));var i=u.createProgram();if(u.attachShader(i,a),u.attachShader(i,t),u.linkProgram(i),!u.getProgramParameter(i,u.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+u.getProgramInfoLog(i));var e=this.getAttributeLocations(u,i),s=this.getUniformLocations(u,i)||{};return s.uStepW=u.getUniformLocation(i,"uStepW"),s.uStepH=u.getUniformLocation(i,"uStepH"),{program:i,attributeLocations:e,uniformLocations:s}},getAttributeLocations:function(u,n){return{aPosition:u.getAttribLocation(n,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(u,n,l){var a=n.aPosition,t=u.createBuffer();u.bindBuffer(u.ARRAY_BUFFER,t),u.enableVertexAttribArray(a),u.vertexAttribPointer(a,2,u.FLOAT,!1,0,0),u.bufferData(u.ARRAY_BUFFER,l,u.STATIC_DRAW)},_setupFrameBuffer:function(u){var n=u.context,l,a;u.passes>1?(l=u.destinationWidth,a=u.destinationHeight,(u.sourceWidth!==l||u.sourceHeight!==a)&&(n.deleteTexture(u.targetTexture),u.targetTexture=u.filterBackend.createTexture(n,l,a)),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,u.targetTexture,0)):(n.bindFramebuffer(n.FRAMEBUFFER,null),n.finish())},_swapTextures:function(u){u.passes--,u.pass++;var n=u.targetTexture;u.targetTexture=u.sourceTexture,u.sourceTexture=n},isNeutralState:function(){var u=this.mainParameter,n=o.Image.filters[this.type].prototype;if(u)if(Array.isArray(n[u])){for(var l=n[u].length;l--;)if(this[u][l]!==n[u][l])return!1;return!0}else return n[u]===this[u];else return!1},applyTo:function(u){u.webgl?(this._setupFrameBuffer(u),this.applyToWebGL(u),this._swapTextures(u)):this.applyTo2d(u)},retrieveShader:function(u){return u.programCache.hasOwnProperty(this.type)||(u.programCache[this.type]=this.createProgram(u.context)),u.programCache[this.type]},applyToWebGL:function(u){var n=u.context,l=this.retrieveShader(u);u.pass===0&&u.originalTexture?n.bindTexture(n.TEXTURE_2D,u.originalTexture):n.bindTexture(n.TEXTURE_2D,u.sourceTexture),n.useProgram(l.program),this.sendAttributeData(n,l.attributeLocations,u.aPosition),n.uniform1f(l.uniformLocations.uStepW,1/u.sourceWidth),n.uniform1f(l.uniformLocations.uStepH,1/u.sourceHeight),this.sendUniformData(n,l.uniformLocations),n.viewport(0,0,u.destinationWidth,u.destinationHeight),n.drawArrays(n.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(u,n,l){u.activeTexture(l),u.bindTexture(u.TEXTURE_2D,n),u.activeTexture(u.TEXTURE0)},unbindAdditionalTexture:function(u,n){u.activeTexture(n),u.bindTexture(u.TEXTURE_2D,null),u.activeTexture(u.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(u){this[this.mainParameter]=u},sendUniformData:function(){},createHelpLayer:function(u){if(!u.helpLayer){var n=document.createElement("canvas");n.width=u.sourceWidth,n.height=u.sourceHeight,u.helpLayer=n}},toObject:function(){var u={type:this.type},n=this.mainParameter;return n&&(u[n]=this[n]),u},toJSON:function(){return this.toObject()}}),o.Image.filters.BaseFilter.fromObject=function(u,n){var l=new o.Image.filters[u.type](u);return n&&n(l),l},(function(u){var n=u.fabric||(u.fabric={}),l=n.Image.filters,a=n.util.createClass;l.ColorMatrix=a(l.BaseFilter,{type:"ColorMatrix",fragmentSource:`precision highp float;
76
+ uniform sampler2D uTexture;
77
+ varying vec2 vTexCoord;
78
+ uniform mat4 uColorMatrix;
79
+ uniform vec4 uConstants;
80
+ void main() {
81
+ vec4 color = texture2D(uTexture, vTexCoord);
82
+ color *= uColorMatrix;
83
+ color += uConstants;
84
+ gl_FragColor = color;
85
+ }`,matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(t){this.callSuper("initialize",t),this.matrix=this.matrix.slice(0)},applyTo2d:function(t){var i=t.imageData,e=i.data,s=e.length,h=this.matrix,r,c,f,g,p,v=this.colorsOnly;for(p=0;p<s;p+=4)r=e[p],c=e[p+1],f=e[p+2],v?(e[p]=r*h[0]+c*h[1]+f*h[2]+h[4]*255,e[p+1]=r*h[5]+c*h[6]+f*h[7]+h[9]*255,e[p+2]=r*h[10]+c*h[11]+f*h[12]+h[14]*255):(g=e[p+3],e[p]=r*h[0]+c*h[1]+f*h[2]+g*h[3]+h[4]*255,e[p+1]=r*h[5]+c*h[6]+f*h[7]+g*h[8]+h[9]*255,e[p+2]=r*h[10]+c*h[11]+f*h[12]+g*h[13]+h[14]*255,e[p+3]=r*h[15]+c*h[16]+f*h[17]+g*h[18]+h[19]*255)},getUniformLocations:function(t,i){return{uColorMatrix:t.getUniformLocation(i,"uColorMatrix"),uConstants:t.getUniformLocation(i,"uConstants")}},sendUniformData:function(t,i){var e=this.matrix,s=[e[0],e[1],e[2],e[3],e[5],e[6],e[7],e[8],e[10],e[11],e[12],e[13],e[15],e[16],e[17],e[18]],h=[e[4],e[9],e[14],e[19]];t.uniformMatrix4fv(i.uColorMatrix,!1,s),t.uniform4fv(i.uConstants,h)}}),n.Image.filters.ColorMatrix.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.Image.filters,a=n.util.createClass;l.Brightness=a(l.BaseFilter,{type:"Brightness",fragmentSource:`precision highp float;
86
+ uniform sampler2D uTexture;
87
+ uniform float uBrightness;
88
+ varying vec2 vTexCoord;
89
+ void main() {
90
+ vec4 color = texture2D(uTexture, vTexCoord);
91
+ color.rgb += uBrightness;
92
+ gl_FragColor = color;
93
+ }`,brightness:0,mainParameter:"brightness",applyTo2d:function(t){if(this.brightness!==0){var i=t.imageData,e=i.data,s,h=e.length,r=Math.round(this.brightness*255);for(s=0;s<h;s+=4)e[s]=e[s]+r,e[s+1]=e[s+1]+r,e[s+2]=e[s+2]+r}},getUniformLocations:function(t,i){return{uBrightness:t.getUniformLocation(i,"uBrightness")}},sendUniformData:function(t,i){t.uniform1f(i.uBrightness,this.brightness)}}),n.Image.filters.Brightness.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.object.extend,a=n.Image.filters,t=n.util.createClass;a.Convolute=t(a.BaseFilter,{type:"Convolute",opaque:!1,matrix:[0,0,0,0,1,0,0,0,0],fragmentSource:{Convolute_3_1:`precision highp float;
94
+ uniform sampler2D uTexture;
95
+ uniform float uMatrix[9];
96
+ uniform float uStepW;
97
+ uniform float uStepH;
98
+ varying vec2 vTexCoord;
99
+ void main() {
100
+ vec4 color = vec4(0, 0, 0, 0);
101
+ for (float h = 0.0; h < 3.0; h+=1.0) {
102
+ for (float w = 0.0; w < 3.0; w+=1.0) {
103
+ vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));
104
+ color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];
105
+ }
106
+ }
107
+ gl_FragColor = color;
108
+ }`,Convolute_3_0:`precision highp float;
109
+ uniform sampler2D uTexture;
110
+ uniform float uMatrix[9];
111
+ uniform float uStepW;
112
+ uniform float uStepH;
113
+ varying vec2 vTexCoord;
114
+ void main() {
115
+ vec4 color = vec4(0, 0, 0, 1);
116
+ for (float h = 0.0; h < 3.0; h+=1.0) {
117
+ for (float w = 0.0; w < 3.0; w+=1.0) {
118
+ vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));
119
+ color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];
120
+ }
121
+ }
122
+ float alpha = texture2D(uTexture, vTexCoord).a;
123
+ gl_FragColor = color;
124
+ gl_FragColor.a = alpha;
125
+ }`,Convolute_5_1:`precision highp float;
126
+ uniform sampler2D uTexture;
127
+ uniform float uMatrix[25];
128
+ uniform float uStepW;
129
+ uniform float uStepH;
130
+ varying vec2 vTexCoord;
131
+ void main() {
132
+ vec4 color = vec4(0, 0, 0, 0);
133
+ for (float h = 0.0; h < 5.0; h+=1.0) {
134
+ for (float w = 0.0; w < 5.0; w+=1.0) {
135
+ vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));
136
+ color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];
137
+ }
138
+ }
139
+ gl_FragColor = color;
140
+ }`,Convolute_5_0:`precision highp float;
141
+ uniform sampler2D uTexture;
142
+ uniform float uMatrix[25];
143
+ uniform float uStepW;
144
+ uniform float uStepH;
145
+ varying vec2 vTexCoord;
146
+ void main() {
147
+ vec4 color = vec4(0, 0, 0, 1);
148
+ for (float h = 0.0; h < 5.0; h+=1.0) {
149
+ for (float w = 0.0; w < 5.0; w+=1.0) {
150
+ vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));
151
+ color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];
152
+ }
153
+ }
154
+ float alpha = texture2D(uTexture, vTexCoord).a;
155
+ gl_FragColor = color;
156
+ gl_FragColor.a = alpha;
157
+ }`,Convolute_7_1:`precision highp float;
158
+ uniform sampler2D uTexture;
159
+ uniform float uMatrix[49];
160
+ uniform float uStepW;
161
+ uniform float uStepH;
162
+ varying vec2 vTexCoord;
163
+ void main() {
164
+ vec4 color = vec4(0, 0, 0, 0);
165
+ for (float h = 0.0; h < 7.0; h+=1.0) {
166
+ for (float w = 0.0; w < 7.0; w+=1.0) {
167
+ vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));
168
+ color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];
169
+ }
170
+ }
171
+ gl_FragColor = color;
172
+ }`,Convolute_7_0:`precision highp float;
173
+ uniform sampler2D uTexture;
174
+ uniform float uMatrix[49];
175
+ uniform float uStepW;
176
+ uniform float uStepH;
177
+ varying vec2 vTexCoord;
178
+ void main() {
179
+ vec4 color = vec4(0, 0, 0, 1);
180
+ for (float h = 0.0; h < 7.0; h+=1.0) {
181
+ for (float w = 0.0; w < 7.0; w+=1.0) {
182
+ vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));
183
+ color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];
184
+ }
185
+ }
186
+ float alpha = texture2D(uTexture, vTexCoord).a;
187
+ gl_FragColor = color;
188
+ gl_FragColor.a = alpha;
189
+ }`,Convolute_9_1:`precision highp float;
190
+ uniform sampler2D uTexture;
191
+ uniform float uMatrix[81];
192
+ uniform float uStepW;
193
+ uniform float uStepH;
194
+ varying vec2 vTexCoord;
195
+ void main() {
196
+ vec4 color = vec4(0, 0, 0, 0);
197
+ for (float h = 0.0; h < 9.0; h+=1.0) {
198
+ for (float w = 0.0; w < 9.0; w+=1.0) {
199
+ vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));
200
+ color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];
201
+ }
202
+ }
203
+ gl_FragColor = color;
204
+ }`,Convolute_9_0:`precision highp float;
205
+ uniform sampler2D uTexture;
206
+ uniform float uMatrix[81];
207
+ uniform float uStepW;
208
+ uniform float uStepH;
209
+ varying vec2 vTexCoord;
210
+ void main() {
211
+ vec4 color = vec4(0, 0, 0, 1);
212
+ for (float h = 0.0; h < 9.0; h+=1.0) {
213
+ for (float w = 0.0; w < 9.0; w+=1.0) {
214
+ vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));
215
+ color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];
216
+ }
217
+ }
218
+ float alpha = texture2D(uTexture, vTexCoord).a;
219
+ gl_FragColor = color;
220
+ gl_FragColor.a = alpha;
221
+ }`},retrieveShader:function(i){var e=Math.sqrt(this.matrix.length),s=this.type+"_"+e+"_"+(this.opaque?1:0),h=this.fragmentSource[s];return i.programCache.hasOwnProperty(s)||(i.programCache[s]=this.createProgram(i.context,h)),i.programCache[s]},applyTo2d:function(i){var e=i.imageData,s=e.data,h=this.matrix,r=Math.round(Math.sqrt(h.length)),c=Math.floor(r/2),f=e.width,g=e.height,p=i.ctx.createImageData(f,g),v=p.data,_=this.opaque?1:0,x,D,B,z,G,Q,Z,q,K,tt,it,et,y;for(it=0;it<g;it++)for(tt=0;tt<f;tt++){for(G=(it*f+tt)*4,x=0,D=0,B=0,z=0,y=0;y<r;y++)for(et=0;et<r;et++)Z=it+y-c,Q=tt+et-c,!(Z<0||Z>=g||Q<0||Q>=f)&&(q=(Z*f+Q)*4,K=h[y*r+et],x+=s[q]*K,D+=s[q+1]*K,B+=s[q+2]*K,_||(z+=s[q+3]*K));v[G]=x,v[G+1]=D,v[G+2]=B,_?v[G+3]=s[G+3]:v[G+3]=z}i.imageData=p},getUniformLocations:function(i,e){return{uMatrix:i.getUniformLocation(e,"uMatrix"),uOpaque:i.getUniformLocation(e,"uOpaque"),uHalfSize:i.getUniformLocation(e,"uHalfSize"),uSize:i.getUniformLocation(e,"uSize")}},sendUniformData:function(i,e){i.uniform1fv(e.uMatrix,this.matrix)},toObject:function(){return l(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),n.Image.filters.Convolute.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.Image.filters,a=n.util.createClass;l.Grayscale=a(l.BaseFilter,{type:"Grayscale",fragmentSource:{average:`precision highp float;
222
+ uniform sampler2D uTexture;
223
+ varying vec2 vTexCoord;
224
+ void main() {
225
+ vec4 color = texture2D(uTexture, vTexCoord);
226
+ float average = (color.r + color.b + color.g) / 3.0;
227
+ gl_FragColor = vec4(average, average, average, color.a);
228
+ }`,lightness:`precision highp float;
229
+ uniform sampler2D uTexture;
230
+ uniform int uMode;
231
+ varying vec2 vTexCoord;
232
+ void main() {
233
+ vec4 col = texture2D(uTexture, vTexCoord);
234
+ float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;
235
+ gl_FragColor = vec4(average, average, average, col.a);
236
+ }`,luminosity:`precision highp float;
237
+ uniform sampler2D uTexture;
238
+ uniform int uMode;
239
+ varying vec2 vTexCoord;
240
+ void main() {
241
+ vec4 col = texture2D(uTexture, vTexCoord);
242
+ float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;
243
+ gl_FragColor = vec4(average, average, average, col.a);
244
+ }`},mode:"average",mainParameter:"mode",applyTo2d:function(t){var i=t.imageData,e=i.data,s,h=e.length,r,c=this.mode;for(s=0;s<h;s+=4)c==="average"?r=(e[s]+e[s+1]+e[s+2])/3:c==="lightness"?r=(Math.min(e[s],e[s+1],e[s+2])+Math.max(e[s],e[s+1],e[s+2]))/2:c==="luminosity"&&(r=.21*e[s]+.72*e[s+1]+.07*e[s+2]),e[s]=r,e[s+1]=r,e[s+2]=r},retrieveShader:function(t){var i=this.type+"_"+this.mode;if(!t.programCache.hasOwnProperty(i)){var e=this.fragmentSource[this.mode];t.programCache[i]=this.createProgram(t.context,e)}return t.programCache[i]},getUniformLocations:function(t,i){return{uMode:t.getUniformLocation(i,"uMode")}},sendUniformData:function(t,i){var e=1;t.uniform1i(i.uMode,e)},isNeutralState:function(){return!1}}),n.Image.filters.Grayscale.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.Image.filters,a=n.util.createClass;l.Invert=a(l.BaseFilter,{type:"Invert",fragmentSource:`precision highp float;
245
+ uniform sampler2D uTexture;
246
+ uniform int uInvert;
247
+ varying vec2 vTexCoord;
248
+ void main() {
249
+ vec4 color = texture2D(uTexture, vTexCoord);
250
+ if (uInvert == 1) {
251
+ gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);
252
+ } else {
253
+ gl_FragColor = color;
254
+ }
255
+ }`,invert:!0,mainParameter:"invert",applyTo2d:function(t){var i=t.imageData,e=i.data,s,h=e.length;for(s=0;s<h;s+=4)e[s]=255-e[s],e[s+1]=255-e[s+1],e[s+2]=255-e[s+2]},isNeutralState:function(){return!this.invert},getUniformLocations:function(t,i){return{uInvert:t.getUniformLocation(i,"uInvert")}},sendUniformData:function(t,i){t.uniform1i(i.uInvert,this.invert)}}),n.Image.filters.Invert.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.object.extend,a=n.Image.filters,t=n.util.createClass;a.Noise=t(a.BaseFilter,{type:"Noise",fragmentSource:`precision highp float;
256
+ uniform sampler2D uTexture;
257
+ uniform float uStepH;
258
+ uniform float uNoise;
259
+ uniform float uSeed;
260
+ varying vec2 vTexCoord;
261
+ float rand(vec2 co, float seed, float vScale) {
262
+ return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);
263
+ }
264
+ void main() {
265
+ vec4 color = texture2D(uTexture, vTexCoord);
266
+ color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;
267
+ gl_FragColor = color;
268
+ }`,mainParameter:"noise",noise:0,applyTo2d:function(i){if(this.noise!==0){var e=i.imageData,s=e.data,h,r=s.length,c=this.noise,f;for(h=0,r=s.length;h<r;h+=4)f=(.5-Math.random())*c,s[h]+=f,s[h+1]+=f,s[h+2]+=f}},getUniformLocations:function(i,e){return{uNoise:i.getUniformLocation(e,"uNoise"),uSeed:i.getUniformLocation(e,"uSeed")}},sendUniformData:function(i,e){i.uniform1f(e.uNoise,this.noise/255),i.uniform1f(e.uSeed,Math.random())},toObject:function(){return l(this.callSuper("toObject"),{noise:this.noise})}}),n.Image.filters.Noise.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.Image.filters,a=n.util.createClass;l.Pixelate=a(l.BaseFilter,{type:"Pixelate",blocksize:4,mainParameter:"blocksize",fragmentSource:`precision highp float;
269
+ uniform sampler2D uTexture;
270
+ uniform float uBlocksize;
271
+ uniform float uStepW;
272
+ uniform float uStepH;
273
+ varying vec2 vTexCoord;
274
+ void main() {
275
+ float blockW = uBlocksize * uStepW;
276
+ float blockH = uBlocksize * uStepW;
277
+ int posX = int(vTexCoord.x / blockW);
278
+ int posY = int(vTexCoord.y / blockH);
279
+ float fposX = float(posX);
280
+ float fposY = float(posY);
281
+ vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);
282
+ vec4 color = texture2D(uTexture, squareCoords);
283
+ gl_FragColor = color;
284
+ }`,applyTo2d:function(t){var i=t.imageData,e=i.data,s=i.height,h=i.width,r,c,f,g,p,v,_,x,D,B,z;for(c=0;c<s;c+=this.blocksize)for(f=0;f<h;f+=this.blocksize)for(r=c*4*h+f*4,g=e[r],p=e[r+1],v=e[r+2],_=e[r+3],B=Math.min(c+this.blocksize,s),z=Math.min(f+this.blocksize,h),x=c;x<B;x++)for(D=f;D<z;D++)r=x*4*h+D*4,e[r]=g,e[r+1]=p,e[r+2]=v,e[r+3]=_},isNeutralState:function(){return this.blocksize===1},getUniformLocations:function(t,i){return{uBlocksize:t.getUniformLocation(i,"uBlocksize"),uStepW:t.getUniformLocation(i,"uStepW"),uStepH:t.getUniformLocation(i,"uStepH")}},sendUniformData:function(t,i){t.uniform1f(i.uBlocksize,this.blocksize)}}),n.Image.filters.Pixelate.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.object.extend,a=n.Image.filters,t=n.util.createClass;a.RemoveColor=t(a.BaseFilter,{type:"RemoveColor",color:"#FFFFFF",fragmentSource:`precision highp float;
285
+ uniform sampler2D uTexture;
286
+ uniform vec4 uLow;
287
+ uniform vec4 uHigh;
288
+ varying vec2 vTexCoord;
289
+ void main() {
290
+ gl_FragColor = texture2D(uTexture, vTexCoord);
291
+ if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {
292
+ gl_FragColor.a = 0.0;
293
+ }
294
+ }`,distance:.02,useAlpha:!1,applyTo2d:function(i){var e=i.imageData,s=e.data,h,r=this.distance*255,c,f,g,p=new n.Color(this.color).getSource(),v=[p[0]-r,p[1]-r,p[2]-r],_=[p[0]+r,p[1]+r,p[2]+r];for(h=0;h<s.length;h+=4)c=s[h],f=s[h+1],g=s[h+2],c>v[0]&&f>v[1]&&g>v[2]&&c<_[0]&&f<_[1]&&g<_[2]&&(s[h+3]=0)},getUniformLocations:function(i,e){return{uLow:i.getUniformLocation(e,"uLow"),uHigh:i.getUniformLocation(e,"uHigh")}},sendUniformData:function(i,e){var s=new n.Color(this.color).getSource(),h=parseFloat(this.distance),r=[0+s[0]/255-h,0+s[1]/255-h,0+s[2]/255-h,1],c=[s[0]/255+h,s[1]/255+h,s[2]/255+h,1];i.uniform4fv(e.uLow,r),i.uniform4fv(e.uHigh,c)},toObject:function(){return l(this.callSuper("toObject"),{color:this.color,distance:this.distance})}}),n.Image.filters.RemoveColor.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.Image.filters,a=n.util.createClass,t={Brownie:[.5997,.34553,-.27082,0,.186,-.0377,.86095,.15059,0,-.1449,.24113,-.07441,.44972,0,-.02965,0,0,0,1,0],Vintage:[.62793,.32021,-.03965,0,.03784,.02578,.64411,.03259,0,.02926,.0466,-.08512,.52416,0,.02023,0,0,0,1,0],Kodachrome:[1.12855,-.39673,-.03992,0,.24991,-.16404,1.08352,-.05498,0,.09698,-.16786,-.56034,1.60148,0,.13972,0,0,0,1,0],Technicolor:[1.91252,-.85453,-.09155,0,.04624,-.30878,1.76589,-.10601,0,-.27589,-.2311,-.75018,1.84759,0,.12137,0,0,0,1,0],Polaroid:[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0],Sepia:[.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0],BlackWhite:[1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,0,0,0,1,0]};for(var i in t)l[i]=a(l.ColorMatrix,{type:i,matrix:t[i],mainParameter:!1,colorsOnly:!0}),n.Image.filters[i].fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric,l=n.Image.filters,a=n.util.createClass;l.BlendColor=a(l.BaseFilter,{type:"BlendColor",color:"#F95C63",mode:"multiply",alpha:1,fragmentSource:{multiply:`gl_FragColor.rgb *= uColor.rgb;
295
+ `,screen:`gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);
296
+ `,add:`gl_FragColor.rgb += uColor.rgb;
297
+ `,diff:`gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);
298
+ `,subtract:`gl_FragColor.rgb -= uColor.rgb;
299
+ `,lighten:`gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);
300
+ `,darken:`gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);
301
+ `,exclusion:`gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);
302
+ `,overlay:`if (uColor.r < 0.5) {
303
+ gl_FragColor.r *= 2.0 * uColor.r;
304
+ } else {
305
+ gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);
306
+ }
307
+ if (uColor.g < 0.5) {
308
+ gl_FragColor.g *= 2.0 * uColor.g;
309
+ } else {
310
+ gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);
311
+ }
312
+ if (uColor.b < 0.5) {
313
+ gl_FragColor.b *= 2.0 * uColor.b;
314
+ } else {
315
+ gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);
316
+ }
317
+ `,tint:`gl_FragColor.rgb *= (1.0 - uColor.a);
318
+ gl_FragColor.rgb += uColor.rgb;
319
+ `},buildSource:function(t){return`precision highp float;
320
+ uniform sampler2D uTexture;
321
+ uniform vec4 uColor;
322
+ varying vec2 vTexCoord;
323
+ void main() {
324
+ vec4 color = texture2D(uTexture, vTexCoord);
325
+ gl_FragColor = color;
326
+ if (color.a > 0.0) {
327
+ `+this.fragmentSource[t]+`}
328
+ }`},retrieveShader:function(t){var i=this.type+"_"+this.mode,e;return t.programCache.hasOwnProperty(i)||(e=this.buildSource(this.mode),t.programCache[i]=this.createProgram(t.context,e)),t.programCache[i]},applyTo2d:function(t){var i=t.imageData,e=i.data,s=e.length,h,r,c,f,g,p,v,_=1-this.alpha;v=new n.Color(this.color).getSource(),h=v[0]*this.alpha,r=v[1]*this.alpha,c=v[2]*this.alpha;for(var x=0;x<s;x+=4)switch(f=e[x],g=e[x+1],p=e[x+2],this.mode){case"multiply":e[x]=f*h/255,e[x+1]=g*r/255,e[x+2]=p*c/255;break;case"screen":e[x]=255-(255-f)*(255-h)/255,e[x+1]=255-(255-g)*(255-r)/255,e[x+2]=255-(255-p)*(255-c)/255;break;case"add":e[x]=f+h,e[x+1]=g+r,e[x+2]=p+c;break;case"diff":case"difference":e[x]=Math.abs(f-h),e[x+1]=Math.abs(g-r),e[x+2]=Math.abs(p-c);break;case"subtract":e[x]=f-h,e[x+1]=g-r,e[x+2]=p-c;break;case"darken":e[x]=Math.min(f,h),e[x+1]=Math.min(g,r),e[x+2]=Math.min(p,c);break;case"lighten":e[x]=Math.max(f,h),e[x+1]=Math.max(g,r),e[x+2]=Math.max(p,c);break;case"overlay":e[x]=h<128?2*f*h/255:255-2*(255-f)*(255-h)/255,e[x+1]=r<128?2*g*r/255:255-2*(255-g)*(255-r)/255,e[x+2]=c<128?2*p*c/255:255-2*(255-p)*(255-c)/255;break;case"exclusion":e[x]=h+f-2*h*f/255,e[x+1]=r+g-2*r*g/255,e[x+2]=c+p-2*c*p/255;break;case"tint":e[x]=h+f*_,e[x+1]=r+g*_,e[x+2]=c+p*_}},getUniformLocations:function(t,i){return{uColor:t.getUniformLocation(i,"uColor")}},sendUniformData:function(t,i){var e=new n.Color(this.color).getSource();e[0]=this.alpha*e[0]/255,e[1]=this.alpha*e[1]/255,e[2]=this.alpha*e[2]/255,e[3]=this.alpha,t.uniform4fv(i.uColor,e)},toObject:function(){return{type:this.type,color:this.color,mode:this.mode,alpha:this.alpha}}}),n.Image.filters.BlendColor.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric,l=n.Image.filters,a=n.util.createClass;l.BlendImage=a(l.BaseFilter,{type:"BlendImage",image:null,mode:"multiply",alpha:1,vertexSource:`attribute vec2 aPosition;
329
+ varying vec2 vTexCoord;
330
+ varying vec2 vTexCoord2;
331
+ uniform mat3 uTransformMatrix;
332
+ void main() {
333
+ vTexCoord = aPosition;
334
+ vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;
335
+ gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
336
+ }`,fragmentSource:{multiply:`precision highp float;
337
+ uniform sampler2D uTexture;
338
+ uniform sampler2D uImage;
339
+ uniform vec4 uColor;
340
+ varying vec2 vTexCoord;
341
+ varying vec2 vTexCoord2;
342
+ void main() {
343
+ vec4 color = texture2D(uTexture, vTexCoord);
344
+ vec4 color2 = texture2D(uImage, vTexCoord2);
345
+ color.rgba *= color2.rgba;
346
+ gl_FragColor = color;
347
+ }`,mask:`precision highp float;
348
+ uniform sampler2D uTexture;
349
+ uniform sampler2D uImage;
350
+ uniform vec4 uColor;
351
+ varying vec2 vTexCoord;
352
+ varying vec2 vTexCoord2;
353
+ void main() {
354
+ vec4 color = texture2D(uTexture, vTexCoord);
355
+ vec4 color2 = texture2D(uImage, vTexCoord2);
356
+ color.a = color2.a;
357
+ gl_FragColor = color;
358
+ }`},retrieveShader:function(t){var i=this.type+"_"+this.mode,e=this.fragmentSource[this.mode];return t.programCache.hasOwnProperty(i)||(t.programCache[i]=this.createProgram(t.context,e)),t.programCache[i]},applyToWebGL:function(t){var i=t.context,e=this.createTexture(t.filterBackend,this.image);this.bindAdditionalTexture(i,e,i.TEXTURE1),this.callSuper("applyToWebGL",t),this.unbindAdditionalTexture(i,i.TEXTURE1)},createTexture:function(t,i){return t.getCachedTexture(i.cacheKey,i._element)},calculateMatrix:function(){var t=this.image,i=t._element.width,e=t._element.height;return[1/t.scaleX,0,0,0,1/t.scaleY,0,-t.left/i,-t.top/e,1]},applyTo2d:function(t){var i=t.imageData,e=t.filterBackend.resources,s=i.data,h=s.length,r=i.width,c=i.height,f,g,p,v,_,x,D,B,z,G,Q=this.image,Z;e.blendImage||(e.blendImage=n.util.createCanvasElement()),z=e.blendImage,G=z.getContext("2d"),z.width!==r||z.height!==c?(z.width=r,z.height=c):G.clearRect(0,0,r,c),G.setTransform(Q.scaleX,0,0,Q.scaleY,Q.left,Q.top),G.drawImage(Q._element,0,0,r,c),Z=G.getImageData(0,0,r,c).data;for(var q=0;q<h;q+=4)switch(_=s[q],x=s[q+1],D=s[q+2],B=s[q+3],f=Z[q],g=Z[q+1],p=Z[q+2],v=Z[q+3],this.mode){case"multiply":s[q]=_*f/255,s[q+1]=x*g/255,s[q+2]=D*p/255,s[q+3]=B*v/255;break;case"mask":s[q+3]=v;break}},getUniformLocations:function(t,i){return{uTransformMatrix:t.getUniformLocation(i,"uTransformMatrix"),uImage:t.getUniformLocation(i,"uImage")}},sendUniformData:function(t,i){var e=this.calculateMatrix();t.uniform1i(i.uImage,1),t.uniformMatrix3fv(i.uTransformMatrix,!1,e)},toObject:function(){return{type:this.type,image:this.image&&this.image.toObject(),mode:this.mode,alpha:this.alpha}}}),n.Image.filters.BlendImage.fromObject=function(t,i){n.Image.fromObject(t.image,function(e){var s=n.util.object.clone(t);s.image=e,i(new n.Image.filters.BlendImage(s))})}})(d),(function(u){var n=u.fabric||(u.fabric={}),l=Math.pow,a=Math.floor,t=Math.sqrt,i=Math.abs,e=Math.round,s=Math.sin,h=Math.ceil,r=n.Image.filters,c=n.util.createClass;r.Resize=c(r.BaseFilter,{type:"Resize",resizeType:"hermite",scaleX:1,scaleY:1,lanczosLobes:3,getUniformLocations:function(f,g){return{uDelta:f.getUniformLocation(g,"uDelta"),uTaps:f.getUniformLocation(g,"uTaps")}},sendUniformData:function(f,g){f.uniform2fv(g.uDelta,this.horizontal?[1/this.width,0]:[0,1/this.height]),f.uniform1fv(g.uTaps,this.taps)},retrieveShader:function(f){var g=this.getFilterWindow(),p=this.type+"_"+g;if(!f.programCache.hasOwnProperty(p)){var v=this.generateShader(g);f.programCache[p]=this.createProgram(f.context,v)}return f.programCache[p]},getFilterWindow:function(){var f=this.tempScale;return Math.ceil(this.lanczosLobes/f)},getTaps:function(){for(var f=this.lanczosCreate(this.lanczosLobes),g=this.tempScale,p=this.getFilterWindow(),v=new Array(p),_=1;_<=p;_++)v[_-1]=f(_*g);return v},generateShader:function(v){for(var g=new Array(v),p=this.fragmentSourceTOP,v,_=1;_<=v;_++)g[_-1]=_+".0 * uDelta";return p+="uniform float uTaps["+v+`];
359
+ `,p+=`void main() {
360
+ `,p+=` vec4 color = texture2D(uTexture, vTexCoord);
361
+ `,p+=` float sum = 1.0;
362
+ `,g.forEach(function(x,D){p+=" color += texture2D(uTexture, vTexCoord + "+x+") * uTaps["+D+`];
363
+ `,p+=" color += texture2D(uTexture, vTexCoord - "+x+") * uTaps["+D+`];
364
+ `,p+=" sum += 2.0 * uTaps["+D+`];
365
+ `}),p+=` gl_FragColor = color / sum;
366
+ `,p+="}",p},fragmentSourceTOP:`precision highp float;
367
+ uniform sampler2D uTexture;
368
+ uniform vec2 uDelta;
369
+ varying vec2 vTexCoord;
370
+ `,applyTo:function(f){f.webgl?(f.passes++,this.width=f.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=f.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),f.destinationWidth=this.dW,this._setupFrameBuffer(f),this.applyToWebGL(f),this._swapTextures(f),f.sourceWidth=f.destinationWidth,this.height=f.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),f.destinationHeight=this.dH,this._setupFrameBuffer(f),this.applyToWebGL(f),this._swapTextures(f),f.sourceHeight=f.destinationHeight):this.applyTo2d(f)},isNeutralState:function(){return this.scaleX===1&&this.scaleY===1},lanczosCreate:function(f){return function(g){if(g>=f||g<=-f)return 0;if(g<11920929e-14&&g>-11920929e-14)return 1;g*=Math.PI;var p=g/f;return s(g)/g*s(p)/p}},applyTo2d:function(f){var g=f.imageData,p=this.scaleX,v=this.scaleY;this.rcpScaleX=1/p,this.rcpScaleY=1/v;var _=g.width,x=g.height,D=e(_*p),B=e(x*v),z;this.resizeType==="sliceHack"?z=this.sliceByTwo(f,_,x,D,B):this.resizeType==="hermite"?z=this.hermiteFastResize(f,_,x,D,B):this.resizeType==="bilinear"?z=this.bilinearFiltering(f,_,x,D,B):this.resizeType==="lanczos"&&(z=this.lanczosResize(f,_,x,D,B)),f.imageData=z},sliceByTwo:function(f,g,p,v,_){var x=f.imageData,D=.5,B=!1,z=!1,G=g*D,Q=p*D,Z=n.filterBackend.resources,q,K,tt=0,it=0,et=g,y=0;for(Z.sliceByTwo||(Z.sliceByTwo=document.createElement("canvas")),q=Z.sliceByTwo,(q.width<g*1.5||q.height<p)&&(q.width=g*1.5,q.height=p),K=q.getContext("2d"),K.clearRect(0,0,g*1.5,p),K.putImageData(x,0,0),v=a(v),_=a(_);!B||!z;)g=G,p=Q,v<a(G*D)?G=a(G*D):(G=v,B=!0),_<a(Q*D)?Q=a(Q*D):(Q=_,z=!0),K.drawImage(q,tt,it,g,p,et,y,G,Q),tt=et,it=y,y+=Q;return K.getImageData(tt,it,v,_)},lanczosResize:function(f,g,p,v,_){function x(P){var O,I,w,C,A,M,N,L,Y,U,J;for(y.x=(P+.5)*Q,E.x=a(y.x),O=0;O<_;O++){for(y.y=(O+.5)*Z,E.y=a(y.y),A=0,M=0,N=0,L=0,Y=0,I=E.x-tt;I<=E.x+tt;I++)if(!(I<0||I>=g)){U=a(1e3*i(I-y.x)),et[U]||(et[U]={});for(var R=E.y-it;R<=E.y+it;R++)R<0||R>=p||(J=a(1e3*i(R-y.y)),et[U][J]||(et[U][J]=G(t(l(U*q,2)+l(J*K,2))/1e3)),w=et[U][J],w>0&&(C=(R*g+I)*4,A+=w,M+=w*D[C],N+=w*D[C+1],L+=w*D[C+2],Y+=w*D[C+3]))}C=(O*v+P)*4,z[C]=M/A,z[C+1]=N/A,z[C+2]=L/A,z[C+3]=Y/A}return++P<v?x(P):B}var D=f.imageData.data,B=f.ctx.createImageData(v,_),z=B.data,G=this.lanczosCreate(this.lanczosLobes),Q=this.rcpScaleX,Z=this.rcpScaleY,q=2/this.rcpScaleX,K=2/this.rcpScaleY,tt=h(Q*this.lanczosLobes/2),it=h(Z*this.lanczosLobes/2),et={},y={},E={};return x(0)},bilinearFiltering:function(f,g,p,v,_){var x,D,B,z,G,Q,Z,q,K,tt,it,et,y=0,E,P=this.rcpScaleX,O=this.rcpScaleY,I=4*(g-1),w=f.imageData,C=w.data,A=f.ctx.createImageData(v,_),M=A.data;for(Z=0;Z<_;Z++)for(q=0;q<v;q++)for(G=a(P*q),Q=a(O*Z),K=P*q-G,tt=O*Z-Q,E=4*(Q*g+G),it=0;it<4;it++)x=C[E+it],D=C[E+4+it],B=C[E+I+it],z=C[E+I+4+it],et=x*(1-K)*(1-tt)+D*K*(1-tt)+B*tt*(1-K)+z*K*tt,M[y++]=et;return A},hermiteFastResize:function(f,g,p,v,_){for(var x=this.rcpScaleX,D=this.rcpScaleY,B=h(x/2),z=h(D/2),G=f.imageData,Q=G.data,Z=f.ctx.createImageData(v,_),q=Z.data,K=0;K<_;K++)for(var tt=0;tt<v;tt++){for(var it=(tt+K*v)*4,et=0,y=0,E=0,P=0,O=0,I=0,w=0,C=(K+.5)*D,A=a(K*D);A<(K+1)*D;A++)for(var M=i(C-(A+.5))/z,N=(tt+.5)*x,L=M*M,Y=a(tt*x);Y<(tt+1)*x;Y++){var U=i(N-(Y+.5))/B,J=t(L+U*U);J>1&&J<-1||(et=2*J*J*J-3*J*J+1,et>0&&(U=4*(Y+A*g),w+=et*Q[U+3],E+=et,Q[U+3]<255&&(et=et*Q[U+3]/250),P+=et*Q[U],O+=et*Q[U+1],I+=et*Q[U+2],y+=et))}q[it]=P/y,q[it+1]=O/y,q[it+2]=I/y,q[it+3]=w/E}return Z},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),n.Image.filters.Resize.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.Image.filters,a=n.util.createClass;l.Contrast=a(l.BaseFilter,{type:"Contrast",fragmentSource:`precision highp float;
371
+ uniform sampler2D uTexture;
372
+ uniform float uContrast;
373
+ varying vec2 vTexCoord;
374
+ void main() {
375
+ vec4 color = texture2D(uTexture, vTexCoord);
376
+ float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));
377
+ color.rgb = contrastF * (color.rgb - 0.5) + 0.5;
378
+ gl_FragColor = color;
379
+ }`,contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(this.contrast!==0){var i=t.imageData,e,h,s=i.data,h=s.length,r=Math.floor(this.contrast*255),c=259*(r+255)/(255*(259-r));for(e=0;e<h;e+=4)s[e]=c*(s[e]-128)+128,s[e+1]=c*(s[e+1]-128)+128,s[e+2]=c*(s[e+2]-128)+128}},getUniformLocations:function(t,i){return{uContrast:t.getUniformLocation(i,"uContrast")}},sendUniformData:function(t,i){t.uniform1f(i.uContrast,this.contrast)}}),n.Image.filters.Contrast.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.Image.filters,a=n.util.createClass;l.Saturation=a(l.BaseFilter,{type:"Saturation",fragmentSource:`precision highp float;
380
+ uniform sampler2D uTexture;
381
+ uniform float uSaturation;
382
+ varying vec2 vTexCoord;
383
+ void main() {
384
+ vec4 color = texture2D(uTexture, vTexCoord);
385
+ float rgMax = max(color.r, color.g);
386
+ float rgbMax = max(rgMax, color.b);
387
+ color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;
388
+ color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;
389
+ color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;
390
+ gl_FragColor = color;
391
+ }`,saturation:0,mainParameter:"saturation",applyTo2d:function(t){if(this.saturation!==0){var i=t.imageData,e=i.data,s=e.length,h=-this.saturation,r,c;for(r=0;r<s;r+=4)c=Math.max(e[r],e[r+1],e[r+2]),e[r]+=c!==e[r]?(c-e[r])*h:0,e[r+1]+=c!==e[r+1]?(c-e[r+1])*h:0,e[r+2]+=c!==e[r+2]?(c-e[r+2])*h:0}},getUniformLocations:function(t,i){return{uSaturation:t.getUniformLocation(i,"uSaturation")}},sendUniformData:function(t,i){t.uniform1f(i.uSaturation,-this.saturation)}}),n.Image.filters.Saturation.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.Image.filters,a=n.util.createClass;l.Vibrance=a(l.BaseFilter,{type:"Vibrance",fragmentSource:`precision highp float;
392
+ uniform sampler2D uTexture;
393
+ uniform float uVibrance;
394
+ varying vec2 vTexCoord;
395
+ void main() {
396
+ vec4 color = texture2D(uTexture, vTexCoord);
397
+ float max = max(color.r, max(color.g, color.b));
398
+ float avg = (color.r + color.g + color.b) / 3.0;
399
+ float amt = (abs(max - avg) * 2.0) * uVibrance;
400
+ color.r += max != color.r ? (max - color.r) * amt : 0.00;
401
+ color.g += max != color.g ? (max - color.g) * amt : 0.00;
402
+ color.b += max != color.b ? (max - color.b) * amt : 0.00;
403
+ gl_FragColor = color;
404
+ }`,vibrance:0,mainParameter:"vibrance",applyTo2d:function(t){if(this.vibrance!==0){var i=t.imageData,e=i.data,s=e.length,h=-this.vibrance,r,c,f,g;for(r=0;r<s;r+=4)c=Math.max(e[r],e[r+1],e[r+2]),f=(e[r]+e[r+1]+e[r+2])/3,g=Math.abs(c-f)*2/255*h,e[r]+=c!==e[r]?(c-e[r])*g:0,e[r+1]+=c!==e[r+1]?(c-e[r+1])*g:0,e[r+2]+=c!==e[r+2]?(c-e[r+2])*g:0}},getUniformLocations:function(t,i){return{uVibrance:t.getUniformLocation(i,"uVibrance")}},sendUniformData:function(t,i){t.uniform1f(i.uVibrance,-this.vibrance)}}),n.Image.filters.Vibrance.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.Image.filters,a=n.util.createClass;l.Blur=a(l.BaseFilter,{type:"Blur",fragmentSource:`precision highp float;
405
+ uniform sampler2D uTexture;
406
+ uniform vec2 uDelta;
407
+ varying vec2 vTexCoord;
408
+ const float nSamples = 15.0;
409
+ vec3 v3offset = vec3(12.9898, 78.233, 151.7182);
410
+ float random(vec3 scale) {
411
+ return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);
412
+ }
413
+ void main() {
414
+ vec4 color = vec4(0.0);
415
+ float total = 0.0;
416
+ float offset = random(v3offset);
417
+ for (float t = -nSamples; t <= nSamples; t++) {
418
+ float percent = (t + offset - 0.5) / nSamples;
419
+ float weight = 1.0 - abs(percent);
420
+ color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;
421
+ total += weight;
422
+ }
423
+ gl_FragColor = color / total;
424
+ }`,blur:0,mainParameter:"blur",applyTo:function(t){t.webgl?(this.aspectRatio=t.sourceWidth/t.sourceHeight,t.passes++,this._setupFrameBuffer(t),this.horizontal=!0,this.applyToWebGL(t),this._swapTextures(t),this._setupFrameBuffer(t),this.horizontal=!1,this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)},applyTo2d:function(t){t.imageData=this.simpleBlur(t)},simpleBlur:function(t){var i=t.filterBackend.resources,e,s,h=t.imageData.width,r=t.imageData.height;i.blurLayer1||(i.blurLayer1=n.util.createCanvasElement(),i.blurLayer2=n.util.createCanvasElement()),e=i.blurLayer1,s=i.blurLayer2,(e.width!==h||e.height!==r)&&(s.width=e.width=h,s.height=e.height=r);var c=e.getContext("2d"),f=s.getContext("2d"),g=15,p,v,_,x,D=this.blur*.06*.5;for(c.putImageData(t.imageData,0,0),f.clearRect(0,0,h,r),x=-g;x<=g;x++)p=(Math.random()-.5)/4,v=x/g,_=D*v*h+p,f.globalAlpha=1-Math.abs(v),f.drawImage(e,_,p),c.drawImage(s,0,0),f.globalAlpha=1,f.clearRect(0,0,s.width,s.height);for(x=-g;x<=g;x++)p=(Math.random()-.5)/4,v=x/g,_=D*v*r+p,f.globalAlpha=1-Math.abs(v),f.drawImage(e,p,_),c.drawImage(s,0,0),f.globalAlpha=1,f.clearRect(0,0,s.width,s.height);t.ctx.drawImage(e,0,0);var B=t.ctx.getImageData(0,0,e.width,e.height);return c.globalAlpha=1,c.clearRect(0,0,e.width,e.height),B},getUniformLocations:function(t,i){return{delta:t.getUniformLocation(i,"uDelta")}},sendUniformData:function(t,i){var e=this.chooseRightDelta();t.uniform2fv(i.delta,e)},chooseRightDelta:function(){var t=1,i=[0,0],e;return this.horizontal?this.aspectRatio>1&&(t=1/this.aspectRatio):this.aspectRatio<1&&(t=this.aspectRatio),e=t*this.blur*.12,this.horizontal?i[0]=e:i[1]=e,i}}),l.Blur.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.Image.filters,a=n.util.createClass;l.Gamma=a(l.BaseFilter,{type:"Gamma",fragmentSource:`precision highp float;
425
+ uniform sampler2D uTexture;
426
+ uniform vec3 uGamma;
427
+ varying vec2 vTexCoord;
428
+ void main() {
429
+ vec4 color = texture2D(uTexture, vTexCoord);
430
+ vec3 correction = (1.0 / uGamma);
431
+ color.r = pow(color.r, correction.r);
432
+ color.g = pow(color.g, correction.g);
433
+ color.b = pow(color.b, correction.b);
434
+ gl_FragColor = color;
435
+ gl_FragColor.rgb *= color.a;
436
+ }`,gamma:[1,1,1],mainParameter:"gamma",initialize:function(t){this.gamma=[1,1,1],l.BaseFilter.prototype.initialize.call(this,t)},applyTo2d:function(t){var i=t.imageData,e=i.data,s=this.gamma,h=e.length,r=1/s[0],c=1/s[1],f=1/s[2],g;for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),g=0,h=256;g<h;g++)this.rVals[g]=Math.pow(g/255,r)*255,this.gVals[g]=Math.pow(g/255,c)*255,this.bVals[g]=Math.pow(g/255,f)*255;for(g=0,h=e.length;g<h;g+=4)e[g]=this.rVals[e[g]],e[g+1]=this.gVals[e[g+1]],e[g+2]=this.bVals[e[g+2]]},getUniformLocations:function(t,i){return{uGamma:t.getUniformLocation(i,"uGamma")}},sendUniformData:function(t,i){t.uniform3fv(i.uGamma,this.gamma)}}),n.Image.filters.Gamma.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.Image.filters,a=n.util.createClass;l.Composed=a(l.BaseFilter,{type:"Composed",subFilters:[],initialize:function(t){this.callSuper("initialize",t),this.subFilters=this.subFilters.slice(0)},applyTo:function(t){t.passes+=this.subFilters.length-1,this.subFilters.forEach(function(i){i.applyTo(t)})},toObject:function(){return n.util.object.extend(this.callSuper("toObject"),{subFilters:this.subFilters.map(function(t){return t.toObject()})})},isNeutralState:function(){return!this.subFilters.some(function(t){return!t.isNeutralState()})}}),n.Image.filters.Composed.fromObject=function(t,i){var e=t.subFilters||[],s=e.map(function(r){return new n.Image.filters[r.type](r)}),h=new n.Image.filters.Composed({subFilters:s});return i&&i(h),h}})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.Image.filters,a=n.util.createClass;l.HueRotation=a(l.ColorMatrix,{type:"HueRotation",rotation:0,mainParameter:"rotation",calculateMatrix:function(){var t=this.rotation*Math.PI,i=n.util.cos(t),e=n.util.sin(t),s=1/3,h=Math.sqrt(s)*e,r=1-i;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]=i+r/3,this.matrix[1]=s*r-h,this.matrix[2]=s*r+h,this.matrix[5]=s*r+h,this.matrix[6]=i+s*r,this.matrix[7]=s*r-h,this.matrix[10]=s*r-h,this.matrix[11]=s*r+h,this.matrix[12]=i+s*r},isNeutralState:function(t){return this.calculateMatrix(),l.BaseFilter.prototype.isNeutralState.call(this,t)},applyTo:function(t){this.calculateMatrix(),l.BaseFilter.prototype.applyTo.call(this,t)}}),n.Image.filters.HueRotation.fromObject=n.Image.filters.BaseFilter.fromObject})(d),(function(u){var n=u.fabric||(u.fabric={}),l=n.util.object.clone;if(n.Text){n.warn("fabric.Text is already defined");return}var a="fontFamily fontWeight fontSize text underline overline linethrough textAlign fontStyle lineHeight textBackgroundColor charSpacing styles direction path pathStartOffset pathSide pathAlign".split(" ");n.Text=n.util.createClass(n.Object,{_dimensionAffectingProps:["fontSize","fontWeight","fontFamily","fontStyle","lineHeight","text","charSpacing","textAlign","styles","path","pathStartOffset","pathSide","pathAlign"],_reNewline:/\r?\n/,_reSpacesAndTabs:/[ \t\r]/g,_reSpaceAndTab:/[ \t\r]/,_reWords:/\S+/g,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",underline:!1,overline:!1,linethrough:!1,textAlign:"left",fontStyle:"normal",lineHeight:1.16,superscript:{size:.6,baseline:-.35},subscript:{size:.6,baseline:.11},textBackgroundColor:"",stateProperties:n.Object.prototype.stateProperties.concat(a),cacheProperties:n.Object.prototype.cacheProperties.concat(a),stroke:null,shadow:null,path:null,pathStartOffset:0,pathSide:"left",pathAlign:"baseline",_fontSizeFraction:.222,offsets:{underline:.1,linethrough:-.315,overline:-.88},_fontSizeMult:1.13,charSpacing:0,styles:null,_measuringContext:null,deltaY:0,direction:"ltr",_styleProperties:["stroke","strokeWidth","fill","fontFamily","fontSize","fontWeight","fontStyle","underline","overline","linethrough","deltaY","textBackgroundColor"],__charBounds:[],CACHE_FONT_SIZE:400,MIN_TEXT_WIDTH:2,initialize:function(t,i){this.styles=i?i.styles||{}:{},this.text=t,this.__skipDimension=!0,this.callSuper("initialize",i),this.path&&this.setPathInfo(),this.__skipDimension=!1,this.initDimensions(),this.setCoords(),this.setupState({propertySet:"_dimensionAffectingProps"})},setPathInfo:function(){var t=this.path;t&&(t.segmentsInfo=n.util.getPathSegmentsInfo(t.path))},getMeasuringContext:function(){return n._measuringContext||(n._measuringContext=this.canvas&&this.canvas.contextCache||n.util.createCanvasElement().getContext("2d")),n._measuringContext},_splitText:function(){var t=this._splitTextIntoLines(this.text);return this.textLines=t.lines,this._textLines=t.graphemeLines,this._unwrappedTextLines=t._unwrappedLines,this._text=t.graphemeText,t},initDimensions:function(){this.__skipDimension||(this._splitText(),this._clearCache(),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.indexOf("justify")!==-1&&this.enlargeSpaces(),this.saveState({propertySet:"_dimensionAffectingProps"}))},enlargeSpaces:function(){for(var t,i,e,s,h,r,c,f=0,g=this._textLines.length;f<g;f++)if(!(this.textAlign!=="justify"&&(f===g-1||this.isEndOfWrapping(f)))&&(s=0,h=this._textLines[f],i=this.getLineWidth(f),i<this.width&&(c=this.textLines[f].match(this._reSpacesAndTabs)))){e=c.length,t=(this.width-i)/e;for(var p=0,v=h.length;p<=v;p++)r=this.__charBounds[f][p],this._reSpaceAndTab.test(h[p])?(r.width+=t,r.kernedWidth+=t,r.left+=s,s+=t):r.left+=s}},isEndOfWrapping:function(t){return t===this._textLines.length-1},missingNewlineOffset:function(){return 1},toString:function(){return"#<fabric.Text ("+this.complexity()+'): { "text": "'+this.text+'", "fontFamily": "'+this.fontFamily+'" }>'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),i=this.fontSize;return t.width+=i*t.zoomX,t.height+=i*t.zoomY,t},_render:function(t){var i=this.path;i&&!i.isNotVisible()&&i._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){this.paintFirst==="stroke"?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,i,e){if(t.textBaseline="alphabetical",this.path)switch(this.pathAlign){case"center":t.textBaseline="middle";break;case"ascender":t.textBaseline="top";break;case"descender":t.textBaseline="bottom";break}t.font=this._getFontDeclaration(i,e)},calcTextWidth:function(){for(var t=this.getLineWidth(0),i=1,e=this._textLines.length;i<e;i++){var s=this.getLineWidth(i);s>t&&(t=s)}return t},_renderTextLine:function(t,i,e,s,h,r){this._renderChars(t,i,e,s,h,r)},_renderTextLinesBackground:function(t){if(!(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor"))){for(var i,e,s=t.fillStyle,h,r,c=this._getLeftOffset(),f=this._getTopOffset(),g=0,p=0,v,_,x=this.path,D,B=0,z=this._textLines.length;B<z;B++){if(i=this.getHeightOfLine(B),!this.textBackgroundColor&&!this.styleHas("textBackgroundColor",B)){f+=i;continue}h=this._textLines[B],e=this._getLineLeftOffset(B),p=0,g=0,r=this.getValueOfPropertyAt(B,0,"textBackgroundColor");for(var G=0,Q=h.length;G<Q;G++)v=this.__charBounds[B][G],_=this.getValueOfPropertyAt(B,G,"textBackgroundColor"),x?(t.save(),t.translate(v.renderLeft,v.renderTop),t.rotate(v.angle),t.fillStyle=_,_&&t.fillRect(-v.width/2,-i/this.lineHeight*(1-this._fontSizeFraction),v.width,i/this.lineHeight),t.restore()):_!==r?(D=c+e+g,this.direction==="rtl"&&(D=this.width-D-p),t.fillStyle=r,r&&t.fillRect(D,f,p,i/this.lineHeight),g=v.left,p=v.width,r=_):p+=v.kernedWidth;_&&!x&&(D=c+e+g,this.direction==="rtl"&&(D=this.width-D-p),t.fillStyle=_,t.fillRect(D,f,p,i/this.lineHeight)),f+=i}t.fillStyle=s,this._removeShadow(t)}},getFontCache:function(t){var i=t.fontFamily.toLowerCase();n.charWidthsCache[i]||(n.charWidthsCache[i]={});var e=n.charWidthsCache[i],s=t.fontStyle.toLowerCase()+"_"+(t.fontWeight+"").toLowerCase();return e[s]||(e[s]={}),e[s]},_measureChar:function(t,i,e,s){var h=this.getFontCache(i),r=this._getFontDeclaration(i),c=this._getFontDeclaration(s),f=e+t,g=r===c,p,v,_,x=i.fontSize/this.CACHE_FONT_SIZE,D;if(e&&h[e]!==void 0&&(_=h[e]),h[t]!==void 0&&(D=p=h[t]),g&&h[f]!==void 0&&(v=h[f],D=v-_),p===void 0||_===void 0||v===void 0){var B=this.getMeasuringContext();this._setTextStyles(B,i,!0)}return p===void 0&&(D=p=B.measureText(t).width,h[t]=p),_===void 0&&g&&e&&(_=B.measureText(e).width,h[e]=_),g&&v===void 0&&(v=B.measureText(f).width,h[f]=v,D=v-_),{width:p*x,kernedWidth:D*x}},getHeightOfChar:function(t,i){return this.getValueOfPropertyAt(t,i,"fontSize")},measureLine:function(t){var i=this._measureLine(t);return this.charSpacing!==0&&(i.width-=this._getWidthOfCharSpacing()),i.width<0&&(i.width=0),i},_measureLine:function(t){var i=0,e,s,h=this._textLines[t],r,c,f=0,g=new Array(h.length),p=0,v,_,x=this.path,D=this.pathSide==="right";for(this.__charBounds[t]=g,e=0;e<h.length;e++)s=h[e],c=this._getGraphemeBox(s,t,e,r),g[e]=c,i+=c.kernedWidth,r=s;if(g[e]={left:c?c.left+c.width:0,width:0,kernedWidth:0,height:this.fontSize},x){switch(_=x.segmentsInfo[x.segmentsInfo.length-1].length,v=n.util.getPointOnPath(x.path,0,x.segmentsInfo),v.x+=x.pathOffset.x,v.y+=x.pathOffset.y,this.textAlign){case"left":p=D?_-i:0;break;case"center":p=(_-i)/2;break;case"right":p=D?0:_-i;break}for(p+=this.pathStartOffset*(D?-1:1),e=D?h.length-1:0;D?e>=0:e<h.length;D?e--:e++)c=g[e],p>_?p%=_:p<0&&(p+=_),this._setGraphemeOnPath(p,c,v),p+=c.kernedWidth}return{width:i,numOfSpaces:f}},_setGraphemeOnPath:function(t,i,e){var s=t+i.kernedWidth/2,h=this.path,r=n.util.getPointOnPath(h.path,s,h.segmentsInfo);i.renderLeft=r.x-e.x,i.renderTop=r.y-e.y,i.angle=r.angle+(this.pathSide==="right"?Math.PI:0)},_getGraphemeBox:function(t,i,e,s,h){var r=this.getCompleteStyleDeclaration(i,e),c=s?this.getCompleteStyleDeclaration(i,e-1):{},f=this._measureChar(t,r,s,c),g=f.kernedWidth,p=f.width,v;this.charSpacing!==0&&(v=this._getWidthOfCharSpacing(),p+=v,g+=v);var _={width:p,left:0,height:r.fontSize,kernedWidth:g,deltaY:r.deltaY};if(e>0&&!h){var x=this.__charBounds[i][e-1];_.left=x.left+x.width+f.kernedWidth-f.width}return _},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var i=this._textLines[t],e=this.getHeightOfChar(t,0),s=1,h=i.length;s<h;s++)e=Math.max(this.getHeightOfChar(t,s),e);return this.__lineHeights[t]=e*this.lineHeight*this._fontSizeMult},calcTextHeight:function(){for(var t,i=0,e=0,s=this._textLines.length;e<s;e++)t=this.getHeightOfLine(e),i+=e===s-1?t/this.lineHeight:t;return i},_getLeftOffset:function(){return this.direction==="ltr"?-this.width/2:this.width/2},_getTopOffset:function(){return-this.height/2},_renderTextCommon:function(t,i){t.save();for(var e=0,s=this._getLeftOffset(),h=this._getTopOffset(),r=0,c=this._textLines.length;r<c;r++){var f=this.getHeightOfLine(r),g=f/this.lineHeight,p=this._getLineLeftOffset(r);this._renderTextLine(i,t,this._textLines[r],s+p,h+e+g,r),e+=f}t.restore()},_renderTextFill:function(t){!this.fill&&!this.styleHas("fill")||this._renderTextCommon(t,"fillText")},_renderTextStroke:function(t){(!this.stroke||this.strokeWidth===0)&&this.isEmptyStyles()||(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray),t.beginPath(),this._renderTextCommon(t,"strokeText"),t.closePath(),t.restore())},_renderChars:function(t,i,e,s,h,r){var c=this.getHeightOfLine(r),f=this.textAlign.indexOf("justify")!==-1,g,p,v="",_,x=0,D,B=this.path,z=!f&&this.charSpacing===0&&this.isEmptyStyles(r)&&!B,G=this.direction==="ltr",Q=this.direction==="ltr"?1:-1,Z,q=i.canvas.getAttribute("dir");if(i.save(),q!==this.direction&&(i.canvas.setAttribute("dir",G?"ltr":"rtl"),i.direction=G?"ltr":"rtl",i.textAlign=G?"left":"right"),h-=c*this._fontSizeFraction/this.lineHeight,z){this._renderChar(t,i,r,0,e.join(""),s,h,c),i.restore();return}for(var K=0,tt=e.length-1;K<=tt;K++)D=K===tt||this.charSpacing||B,v+=e[K],_=this.__charBounds[r][K],x===0?(s+=Q*(_.kernedWidth-_.width),x+=_.width):x+=_.kernedWidth,f&&!D&&this._reSpaceAndTab.test(e[K])&&(D=!0),D||(g=g||this.getCompleteStyleDeclaration(r,K),p=this.getCompleteStyleDeclaration(r,K+1),D=n.util.hasStyleChanged(g,p,!1)),D&&(B?(i.save(),i.translate(_.renderLeft,_.renderTop),i.rotate(_.angle),this._renderChar(t,i,r,K,v,-x/2,0,c),i.restore()):(Z=s,this._renderChar(t,i,r,K,v,Z,h,c)),v="",g=p,s+=Q*x,x=0);i.restore()},_applyPatternGradientTransformText:function(t){var i=n.util.createCanvasElement(),e,s=this.width+this.strokeWidth,h=this.height+this.strokeWidth;return i.width=s,i.height=h,e=i.getContext("2d"),e.beginPath(),e.moveTo(0,0),e.lineTo(s,0),e.lineTo(s,h),e.lineTo(0,h),e.closePath(),e.translate(s/2,h/2),e.fillStyle=t.toLive(e),this._applyPatternGradientTransform(e,t),e.fill(),e.createPattern(i,"no-repeat")},handleFiller:function(t,i,e){var s,h;return e.toLive?e.gradientUnits==="percentage"||e.gradientTransform||e.patternTransform?(s=-this.width/2,h=-this.height/2,t.translate(s,h),t[i]=this._applyPatternGradientTransformText(e),{offsetX:s,offsetY:h}):(t[i]=e.toLive(t,this),this._applyPatternGradientTransform(t,e)):(t[i]=e,{offsetX:0,offsetY:0})},_setStrokeStyles:function(t,i){return t.lineWidth=i.strokeWidth,t.lineCap=this.strokeLineCap,t.lineDashOffset=this.strokeDashOffset,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,this.handleFiller(t,"strokeStyle",i.stroke)},_setFillStyles:function(t,i){return this.handleFiller(t,"fillStyle",i.fill)},_renderChar:function(t,i,e,s,h,r,c){var f=this._getStyleDeclaration(e,s),g=this.getCompleteStyleDeclaration(e,s),p=t==="fillText"&&g.fill,v=t==="strokeText"&&g.stroke&&g.strokeWidth,_,x;!v&&!p||(i.save(),p&&(_=this._setFillStyles(i,g)),v&&(x=this._setStrokeStyles(i,g)),i.font=this._getFontDeclaration(g),f&&f.textBackgroundColor&&this._removeShadow(i),f&&f.deltaY&&(c+=f.deltaY),p&&i.fillText(h,r-_.offsetX,c-_.offsetY),v&&i.strokeText(h,r-x.offsetX,c-x.offsetY),i.restore())},setSuperscript:function(t,i){return this._setScript(t,i,this.superscript)},setSubscript:function(t,i){return this._setScript(t,i,this.subscript)},_setScript:function(t,i,e){var s=this.get2DCursorLocation(t,!0),h=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"fontSize"),r=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"deltaY"),c={fontSize:h*e.size,deltaY:r+h*e.baseline};return this.setSelectionStyles(c,t,i),this},_getLineLeftOffset:function(t){var i=this.getLineWidth(t),e=this.width-i,s=this.textAlign,h=this.direction,c,r=0,c=this.isEndOfWrapping(t);return s==="justify"||s==="justify-center"&&!c||s==="justify-right"&&!c||s==="justify-left"&&!c?0:(s==="center"&&(r=e/2),s==="right"&&(r=e),s==="justify-center"&&(r=e/2),s==="justify-right"&&(r=e),h==="rtl"&&(r-=e),r)},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.dirty=!0,this._forceClearCache=!1),t},getLineWidth:function(t){if(this.__lineWidths[t]!==void 0)return this.__lineWidths[t];var i=this.measureLine(t),e=i.width;return this.__lineWidths[t]=e,e},_getWidthOfCharSpacing:function(){return this.charSpacing!==0?this.fontSize*this.charSpacing/1e3:0},getValueOfPropertyAt:function(t,i,e){var s=this._getStyleDeclaration(t,i);return s&&typeof s[e]<"u"?s[e]:this[e]},_renderTextDecoration:function(t,i){if(!(!this[i]&&!this.styleHas(i))){for(var e,s,h,r,c,f,g,p,v=this._getLeftOffset(),_=this._getTopOffset(),x,D,B,z,G,Q,Z,q,K=this.path,tt=this._getWidthOfCharSpacing(),it=this.offsets[i],et=0,y=this._textLines.length;et<y;et++){if(e=this.getHeightOfLine(et),!this[i]&&!this.styleHas(i,et)){_+=e;continue}g=this._textLines[et],Q=e/this.lineHeight,r=this._getLineLeftOffset(et),D=0,B=0,p=this.getValueOfPropertyAt(et,0,i),q=this.getValueOfPropertyAt(et,0,"fill"),x=_+Q*(1-this._fontSizeFraction),s=this.getHeightOfChar(et,0),c=this.getValueOfPropertyAt(et,0,"deltaY");for(var E=0,P=g.length;E<P;E++)if(z=this.__charBounds[et][E],G=this.getValueOfPropertyAt(et,E,i),Z=this.getValueOfPropertyAt(et,E,"fill"),h=this.getHeightOfChar(et,E),f=this.getValueOfPropertyAt(et,E,"deltaY"),K&&G&&Z)t.save(),t.fillStyle=q,t.translate(z.renderLeft,z.renderTop),t.rotate(z.angle),t.fillRect(-z.kernedWidth/2,it*h+f,z.kernedWidth,this.fontSize/15),t.restore();else if((G!==p||Z!==q||h!==s||f!==c)&&B>0){var O=v+r+D;this.direction==="rtl"&&(O=this.width-O-B),p&&q&&(t.fillStyle=q,t.fillRect(O,x+it*s+c,B,this.fontSize/15)),D=z.left,B=z.width,p=G,q=Z,s=h,c=f}else B+=z.kernedWidth;var O=v+r+D;this.direction==="rtl"&&(O=this.width-O-B),t.fillStyle=Z,G&&Z&&t.fillRect(O,x+it*s+c,B-tt,this.fontSize/15),_+=e}this._removeShadow(t)}},_getFontDeclaration:function(t,i){var e=t||this,s=this.fontFamily,h=n.Text.genericFonts.indexOf(s.toLowerCase())>-1,r=s===void 0||s.indexOf("'")>-1||s.indexOf(",")>-1||s.indexOf('"')>-1||h?e.fontFamily:'"'+e.fontFamily+'"';return[n.isLikelyNode?e.fontWeight:e.fontStyle,n.isLikelyNode?e.fontStyle:e.fontWeight,i?this.CACHE_FONT_SIZE+"px":e.fontSize+"px",r].join(" ")},render:function(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t)))},_splitTextIntoLines:function(t){for(var i=t.split(this._reNewline),e=new Array(i.length),s=[`
437
+ `],h=[],r=0;r<i.length;r++)e[r]=n.util.string.graphemeSplit(i[r]),h=h.concat(e[r],s);return h.pop(),{_unwrappedLines:e,lines:i,graphemeText:h,graphemeLines:e}},toObject:function(t){var i=a.concat(t),e=this.callSuper("toObject",i);return e.styles=n.util.stylesToArray(this.styles,this.text),e.path&&(e.path=this.path.toObject()),e},set:function(t,i){this.callSuper("set",t,i);var e=!1,s=!1;if(typeof t=="object")for(var h in t)h==="path"&&this.setPathInfo(),e=e||this._dimensionAffectingProps.indexOf(h)!==-1,s=s||h==="path";else e=this._dimensionAffectingProps.indexOf(t)!==-1,s=t==="path";return s&&this.setPathInfo(),e&&(this.initDimensions(),this.setCoords()),this},complexity:function(){return 1}}),n.Text.ATTRIBUTE_NAMES=n.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size letter-spacing text-decoration text-anchor".split(" ")),n.Text.DEFAULT_SVG_FONT_SIZE=16,n.Text.fromElement=function(t,i,e){if(!t)return i(null);var s=n.parseAttributes(t,n.Text.ATTRIBUTE_NAMES),h=s.textAnchor||"left";if(e=n.util.object.extend(e?l(e):{},s),e.top=e.top||0,e.left=e.left||0,s.textDecoration){var r=s.textDecoration;r.indexOf("underline")!==-1&&(e.underline=!0),r.indexOf("overline")!==-1&&(e.overline=!0),r.indexOf("line-through")!==-1&&(e.linethrough=!0),delete e.textDecoration}"dx"in s&&(e.left+=s.dx),"dy"in s&&(e.top+=s.dy),"fontSize"in e||(e.fontSize=n.Text.DEFAULT_SVG_FONT_SIZE);var c="";"textContent"in t?c=t.textContent:"firstChild"in t&&t.firstChild!==null&&"data"in t.firstChild&&t.firstChild.data!==null&&(c=t.firstChild.data),c=c.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var f=e.strokeWidth;e.strokeWidth=0;var g=new n.Text(c,e),p=g.getScaledHeight()/g.height,v=(g.height+g.strokeWidth)*g.lineHeight-g.height,_=v*p,x=g.getScaledHeight()+_,D=0;h==="center"&&(D=g.getScaledWidth()/2),h==="right"&&(D=g.getScaledWidth()),g.set({left:g.left-D,top:g.top-(x-g.fontSize*(.07+g._fontSizeFraction))/g.lineHeight,strokeWidth:typeof f<"u"?f:1}),i(g)},n.Text.fromObject=function(t,i){var e=l(t),s=t.path;return delete e.path,n.Object._fromObject("Text",e,function(h){h.styles=n.util.stylesFromArray(t.styles,t.text),s?n.Object._fromObject("Path",s,function(r){h.set("path",r),i(h)},"path"):i(h)},"text")},n.Text.genericFonts=["sans-serif","serif","cursive","fantasy","monospace"],n.util.createAccessors&&n.util.createAccessors(n.Text)})(d),(function(){o.util.object.extend(o.Text.prototype,{isEmptyStyles:function(u){if(!this.styles||typeof u<"u"&&!this.styles[u])return!0;var n=typeof u>"u"?this.styles:{line:this.styles[u]};for(var l in n)for(var a in n[l])for(var t in n[l][a])return!1;return!0},styleHas:function(u,n){if(!this.styles||!u||u===""||typeof n<"u"&&!this.styles[n])return!1;var l=typeof n>"u"?this.styles:{0:this.styles[n]};for(var a in l)for(var t in l[a])if(typeof l[a][t][u]<"u")return!0;return!1},cleanStyle:function(u){if(!this.styles||!u||u==="")return!1;var n=this.styles,l=0,a,t,i=!0,e=0,s;for(var h in n){a=0;for(var r in n[h]){var s=n[h][r],c=s.hasOwnProperty(u);l++,c?(t?s[u]!==t&&(i=!1):t=s[u],s[u]===this[u]&&delete s[u]):i=!1,Object.keys(s).length!==0?a++:delete n[h][r]}a===0&&delete n[h]}for(var f=0;f<this._textLines.length;f++)e+=this._textLines[f].length;i&&l===e&&(this[u]=t,this.removeStyle(u))},removeStyle:function(u){if(!(!this.styles||!u||u==="")){var n=this.styles,l,a,t;for(a in n){l=n[a];for(t in l)delete l[t][u],Object.keys(l[t]).length===0&&delete l[t];Object.keys(l).length===0&&delete n[a]}}},_extendStyles:function(u,n){var l=this.get2DCursorLocation(u);this._getLineStyle(l.lineIndex)||this._setLineStyle(l.lineIndex),this._getStyleDeclaration(l.lineIndex,l.charIndex)||this._setStyleDeclaration(l.lineIndex,l.charIndex,{}),o.util.object.extend(this._getStyleDeclaration(l.lineIndex,l.charIndex),n)},get2DCursorLocation:function(u,n){typeof u>"u"&&(u=this.selectionStart);for(var l=n?this._unwrappedTextLines:this._textLines,a=l.length,t=0;t<a;t++){if(u<=l[t].length)return{lineIndex:t,charIndex:u};u-=l[t].length+this.missingNewlineOffset(t)}return{lineIndex:t-1,charIndex:l[t-1].length<u?l[t-1].length:u}},getSelectionStyles:function(u,n,l){typeof u>"u"&&(u=this.selectionStart||0),typeof n>"u"&&(n=this.selectionEnd||u);for(var a=[],t=u;t<n;t++)a.push(this.getStyleAtPosition(t,l));return a},getStyleAtPosition:function(u,n){var l=this.get2DCursorLocation(u),a=n?this.getCompleteStyleDeclaration(l.lineIndex,l.charIndex):this._getStyleDeclaration(l.lineIndex,l.charIndex);return a||{}},setSelectionStyles:function(u,n,l){typeof n>"u"&&(n=this.selectionStart||0),typeof l>"u"&&(l=this.selectionEnd||n);for(var a=n;a<l;a++)this._extendStyles(a,u);return this._forceClearCache=!0,this},_getStyleDeclaration:function(u,n){var l=this.styles&&this.styles[u];return l?l[n]:null},getCompleteStyleDeclaration:function(u,n){for(var l=this._getStyleDeclaration(u,n)||{},a={},t,i=0;i<this._styleProperties.length;i++)t=this._styleProperties[i],a[t]=typeof l[t]>"u"?this[t]:l[t];return a},_setStyleDeclaration:function(u,n,l){this.styles[u][n]=l},_deleteStyleDeclaration:function(u,n){delete this.styles[u][n]},_getLineStyle:function(u){return!!this.styles[u]},_setLineStyle:function(u){this.styles[u]={}},_deleteLineStyle:function(u){delete this.styles[u]}})})(),(function(){function u(n){n.textDecoration&&(n.textDecoration.indexOf("underline")>-1&&(n.underline=!0),n.textDecoration.indexOf("line-through")>-1&&(n.linethrough=!0),n.textDecoration.indexOf("overline")>-1&&(n.overline=!0),delete n.textDecoration)}o.IText=o.util.createClass(o.Text,o.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(n,l){this.callSuper("initialize",n,l),this.initBehavior()},setSelectionStart:function(n){n=Math.max(n,0),this._updateAndFire("selectionStart",n)},setSelectionEnd:function(n){n=Math.min(n,this.text.length),this._updateAndFire("selectionEnd",n)},_updateAndFire:function(n,l){this[n]!==l&&(this._fireSelectionChanged(),this[n]=l),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(n){this.clearContextTop(),this.callSuper("render",n),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(n){this.callSuper("_render",n)},clearContextTop:function(n){if(!(!this.isEditing||!this.canvas||!this.canvas.contextTop)){var l=this.canvas.contextTop,a=this.canvas.viewportTransform;l.save(),l.transform(a[0],a[1],a[2],a[3],a[4],a[5]),this.transform(l),this._clearTextArea(l),n||l.restore()}},renderCursorOrSelection:function(){if(!(!this.isEditing||!this.canvas||!this.canvas.contextTop)){var n=this._getCursorBoundaries(),l=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(n,l):this.renderSelection(n,l),l.restore()}},_clearTextArea:function(n){var l=this.width+4,a=this.height+4;n.clearRect(-l/2,-a/2,l,a)},_getCursorBoundaries:function(n){typeof n>"u"&&(n=this.selectionStart);var l=this._getLeftOffset(),a=this._getTopOffset(),t=this._getCursorBoundariesOffsets(n);return{left:l,top:a,leftOffset:t.left,topOffset:t.top}},_getCursorBoundariesOffsets:function(n){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var l,a,t,i=0,e=0,s,h=this.get2DCursorLocation(n);t=h.charIndex,a=h.lineIndex;for(var r=0;r<a;r++)i+=this.getHeightOfLine(r);l=this._getLineLeftOffset(a);var c=this.__charBounds[a][t];return c&&(e=c.left),this.charSpacing!==0&&t===this._textLines[a].length&&(e-=this._getWidthOfCharSpacing()),s={top:i,left:l+(e>0?e:0)},this.direction==="rtl"&&(s.left*=-1),this.cursorOffsetCache=s,this.cursorOffsetCache},renderCursor:function(n,l){var a=this.get2DCursorLocation(),t=a.lineIndex,i=a.charIndex>0?a.charIndex-1:0,e=this.getValueOfPropertyAt(t,i,"fontSize"),s=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/s,r=n.topOffset,c=this.getValueOfPropertyAt(t,i,"deltaY");r+=(1-this._fontSizeFraction)*this.getHeightOfLine(t)/this.lineHeight-e*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(n,l),l.fillStyle=this.cursorColor||this.getValueOfPropertyAt(t,i,"fill"),l.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,l.fillRect(n.left+n.leftOffset-h/2,r+n.top+c,h,e)},renderSelection:function(n,l){for(var a=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,t=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,i=this.textAlign.indexOf("justify")!==-1,e=this.get2DCursorLocation(a),s=this.get2DCursorLocation(t),h=e.lineIndex,r=s.lineIndex,c=e.charIndex<0?0:e.charIndex,f=s.charIndex<0?0:s.charIndex,g=h;g<=r;g++){var p=this._getLineLeftOffset(g)||0,v=this.getHeightOfLine(g),_=0,x=0,D=0;if(g===h&&(x=this.__charBounds[h][c].left),g>=h&&g<r)D=i&&!this.isEndOfWrapping(g)?this.width:this.getLineWidth(g)||5;else if(g===r)if(f===0)D=this.__charBounds[r][f].left;else{var B=this._getWidthOfCharSpacing();D=this.__charBounds[r][f-1].left+this.__charBounds[r][f-1].width-B}_=v,(this.lineHeight<1||g===r&&this.lineHeight>1)&&(v/=this.lineHeight);var z=n.left+p+x,G=D-x,Q=v,Z=0;this.inCompositionMode?(l.fillStyle=this.compositionColor||"black",Q=1,Z=v):l.fillStyle=this.selectionColor,this.direction==="rtl"&&(z=this.width-z-G),l.fillRect(z,n.top+n.topOffset+Z,G,Q),n.topOffset+=_}},getCurrentCharFontSize:function(){var n=this._getCurrentCharIndex();return this.getValueOfPropertyAt(n.l,n.c,"fontSize")},getCurrentCharColor:function(){var n=this._getCurrentCharIndex();return this.getValueOfPropertyAt(n.l,n.c,"fill")},_getCurrentCharIndex:function(){var n=this.get2DCursorLocation(this.selectionStart,!0),l=n.charIndex>0?n.charIndex-1:0;return{l:n.lineIndex,c:l}}}),o.IText.fromObject=function(n,l){var a=o.util.stylesFromArray(n.styles,n.text),t=Object.assign({},n,{styles:a});if(u(t),t.styles)for(var i in t.styles)for(var e in t.styles[i])u(t.styles[i][e]);o.Object._fromObject("IText",t,l,"text")}})(),(function(){var u=o.util.object.clone;o.util.object.extend(o.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var n=this;this.on("added",function(){var l=n.canvas;l&&(l._hasITextHandlers||(l._hasITextHandlers=!0,n._initCanvasHandlers(l)),l._iTextInstances=l._iTextInstances||[],l._iTextInstances.push(n))})},initRemovedHandler:function(){var n=this;this.on("removed",function(){var l=n.canvas;l&&(l._iTextInstances=l._iTextInstances||[],o.util.removeFromArray(l._iTextInstances,n),l._iTextInstances.length===0&&(l._hasITextHandlers=!1,n._removeCanvasHandlers(l)))})},_initCanvasHandlers:function(n){n._mouseUpITextHandler=function(){n._iTextInstances&&n._iTextInstances.forEach(function(l){l.__isMousedown=!1})},n.on("mouse:up",n._mouseUpITextHandler)},_removeCanvasHandlers:function(n){n.off("mouse:up",n._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(n,l,a,t){var i;return i={isAborted:!1,abort:function(){this.isAborted=!0}},n.animate("_currentCursorOpacity",l,{duration:a,onComplete:function(){i.isAborted||n[t]()},onChange:function(){n.canvas&&n.selectionStart===n.selectionEnd&&n.renderCursorOrSelection()},abort:function(){return i.isAborted}}),i},_onTickComplete:function(){var n=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){n._currentTickCompleteState=n._animateCursor(n,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(n){var l=this,a=n?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout(function(){l._tick()},a)},abortCursorAnimation:function(){var n=this._currentTickState||this._currentTickCompleteState,l=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,n&&l&&l.clearContext(l.contextTop||l.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(n){var l=0,a=n-1;if(this._reSpace.test(this._text[a]))for(;this._reSpace.test(this._text[a]);)l++,a--;for(;/\S/.test(this._text[a])&&a>-1;)l++,a--;return n-l},findWordBoundaryRight:function(n){var l=0,a=n;if(this._reSpace.test(this._text[a]))for(;this._reSpace.test(this._text[a]);)l++,a++;for(;/\S/.test(this._text[a])&&a<this._text.length;)l++,a++;return n+l},findLineBoundaryLeft:function(n){for(var l=0,a=n-1;!/\n/.test(this._text[a])&&a>-1;)l++,a--;return n-l},findLineBoundaryRight:function(n){for(var l=0,a=n;!/\n/.test(this._text[a])&&a<this._text.length;)l++,a++;return n+l},searchWordBoundary:function(n,l){for(var a=this._text,t=this._reSpace.test(a[n])?n-1:n,i=a[t],e=o.reNonWord;!e.test(i)&&t>0&&t<a.length;)t+=l,i=a[t];return e.test(i)&&(t+=l===1?0:1),t},selectWord:function(n){n=n||this.selectionStart;var l=this.searchWordBoundary(n,-1),a=this.searchWordBoundary(n,1);this.selectionStart=l,this.selectionEnd=a,this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()},selectLine:function(n){n=n||this.selectionStart;var l=this.findLineBoundaryLeft(n),a=this.findLineBoundaryRight(n);return this.selectionStart=l,this.selectionEnd=a,this._fireSelectionChanged(),this._updateTextarea(),this},enterEditing:function(n){if(!(this.isEditing||!this.editable))return this.canvas&&(this.canvas.calcOffset(),this.exitEditingOnOthers(this.canvas)),this.isEditing=!0,this.initHiddenTextarea(n),this.hiddenTextarea.focus(),this.hiddenTextarea.value=this.text,this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._textBeforeEdit=this.text,this._tick(),this.fire("editing:entered"),this._fireSelectionChanged(),this.canvas?(this.canvas.fire("text:editing:entered",{target:this}),this.initMouseMoveHandler(),this.canvas.requestRenderAll(),this):this},exitEditingOnOthers:function(n){n._iTextInstances&&n._iTextInstances.forEach(function(l){l.selected=!1,l.isEditing&&l.exitEditing()})},initMouseMoveHandler:function(){this.canvas.on("mouse:move",this.mouseMoveHandler)},mouseMoveHandler:function(n){if(!(!this.__isMousedown||!this.isEditing)){document.activeElement!==this.hiddenTextarea&&this.hiddenTextarea.focus();var l=this.getSelectionStartFromPointer(n.e),a=this.selectionStart,t=this.selectionEnd;(l!==this.__selectionStartOnMouseDown||a===t)&&(a===l||t===l)||(l>this.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=l):(this.selectionStart=l,this.selectionEnd=this.__selectionStartOnMouseDown),(this.selectionStart!==a||this.selectionEnd!==t)&&(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(n,l,a){var t=a.slice(0,n),i=o.util.string.graphemeSplit(t).length;if(n===l)return{selectionStart:i,selectionEnd:i};var e=a.slice(n,l),s=o.util.string.graphemeSplit(e).length;return{selectionStart:i,selectionEnd:i+s}},fromGraphemeToStringSelection:function(n,l,a){var t=a.slice(0,n),i=t.join("").length;if(n===l)return{selectionStart:i,selectionEnd:i};var e=a.slice(n,l),s=e.join("").length;return{selectionStart:i,selectionEnd:i+s}},_updateTextarea:function(){if(this.cursorOffsetCache={},!!this.hiddenTextarea){if(!this.inCompositionMode){var n=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=n.selectionStart,this.hiddenTextarea.selectionEnd=n.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var n=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=n.selectionEnd,this.inCompositionMode||(this.selectionStart=n.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var n=this._calcTextareaPosition();this.hiddenTextarea.style.left=n.left,this.hiddenTextarea.style.top=n.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var n=this.inCompositionMode?this.compositionStart:this.selectionStart,l=this._getCursorBoundaries(n),a=this.get2DCursorLocation(n),t=a.lineIndex,i=a.charIndex,e=this.getValueOfPropertyAt(t,i,"fontSize")*this.lineHeight,s=l.leftOffset,h=this.calcTransformMatrix(),r={x:l.left+s,y:l.top+l.topOffset+e},c=this.canvas.getRetinaScaling(),f=this.canvas.upperCanvasEl,g=f.width/c,p=f.height/c,v=g-e,_=p-e,x=f.clientWidth/g,D=f.clientHeight/p;return r=o.util.transformPoint(r,h),r=o.util.transformPoint(r,this.canvas.viewportTransform),r.x*=x,r.y*=D,r.x<0&&(r.x=0),r.x>v&&(r.x=v),r.y<0&&(r.y=0),r.y>_&&(r.y=_),r.x+=this.canvas._offset.left,r.y+=this.canvas._offset.top,{left:r.x+"px",top:r.y+"px",fontSize:e+"px",charHeight:e}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var n=this._textBeforeEdit!==this.text,l=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,l&&(l.blur&&l.blur(),l.parentNode&&l.parentNode.removeChild(l)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),n&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),n&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var n in this.styles)this._textLines[n]||delete this.styles[n]},removeStyleFromTo:function(n,l){var a=this.get2DCursorLocation(n,!0),t=this.get2DCursorLocation(l,!0),i=a.lineIndex,e=a.charIndex,s=t.lineIndex,h=t.charIndex,r,c;if(i!==s){if(this.styles[i])for(r=e;r<this._unwrappedTextLines[i].length;r++)delete this.styles[i][r];if(this.styles[s])for(r=h;r<this._unwrappedTextLines[s].length;r++)c=this.styles[s][r],c&&(this.styles[i]||(this.styles[i]={}),this.styles[i][e+r-h]=c);for(r=i+1;r<=s;r++)delete this.styles[r];this.shiftLineStyles(s,i-s)}else if(this.styles[i]){c=this.styles[i];var f=h-e,g,p;for(r=e;r<h;r++)delete c[r];for(p in this.styles[i])g=parseInt(p,10),g>=h&&(c[g-f]=c[p],delete c[p])}},shiftLineStyles:function(n,l){var a=u(this.styles);for(var t in this.styles){var i=parseInt(t,10);i>n&&(this.styles[i+l]=a[i],a[i-l]||delete this.styles[i])}},restartCursorIfNeeded:function(){(!this._currentTickState||this._currentTickState.isAborted||!this._currentTickCompleteState||this._currentTickCompleteState.isAborted)&&this.initDelayedCursor()},insertNewlineStyleObject:function(n,l,a,t){var i,e={},s=!1,h=this._unwrappedTextLines[n].length===l;a||(a=1),this.shiftLineStyles(n,a),this.styles[n]&&(i=this.styles[n][l===0?l:l-1]);for(var r in this.styles[n]){var c=parseInt(r,10);c>=l&&(s=!0,e[c-l]=this.styles[n][r],h&&l===0||delete this.styles[n][r])}var f=!1;for(s&&!h&&(this.styles[n+a]=e,f=!0),f&&a--;a>0;)t&&t[a-1]?this.styles[n+a]={0:u(t[a-1])}:i?this.styles[n+a]={0:u(i)}:delete this.styles[n+a],a--;this._forceClearCache=!0},insertCharStyleObject:function(n,l,a,t){this.styles||(this.styles={});var i=this.styles[n],e=i?u(i):{};a||(a=1);for(var s in e){var h=parseInt(s,10);h>=l&&(i[h+a]=e[h],e[h-a]||delete i[h])}if(this._forceClearCache=!0,t){for(;a--;)Object.keys(t[a]).length&&(this.styles[n]||(this.styles[n]={}),this.styles[n][l+a]=u(t[a]));return}if(i)for(var r=i[l?l-1:1];r&&a--;)this.styles[n][l+a]=u(r)},insertNewStyleBlock:function(n,l,a){for(var t=this.get2DCursorLocation(l,!0),i=[0],e=0,s=0;s<n.length;s++)n[s]===`
438
+ `?(e++,i[e]=0):i[e]++;i[0]>0&&(this.insertCharStyleObject(t.lineIndex,t.charIndex,i[0],a),a=a&&a.slice(i[0]+1)),e&&this.insertNewlineStyleObject(t.lineIndex,t.charIndex+i[0],e);for(var s=1;s<e;s++)i[s]>0?this.insertCharStyleObject(t.lineIndex+s,0,i[s],a):a&&this.styles[t.lineIndex+s]&&a[0]&&(this.styles[t.lineIndex+s][0]=a[0]),a=a&&a.slice(i[s]+1);i[s]>0&&this.insertCharStyleObject(t.lineIndex+s,0,i[s],a)},setSelectionStartEndWithShift:function(n,l,a){a<=n?(l===n?this._selectionDirection="left":this._selectionDirection==="right"&&(this._selectionDirection="left",this.selectionEnd=n),this.selectionStart=a):a>n&&a<l?this._selectionDirection==="right"?this.selectionEnd=a:this.selectionStart=a:(l===n?this._selectionDirection="right":this._selectionDirection==="left"&&(this._selectionDirection="right",this.selectionStart=l),this.selectionEnd=a)},setSelectionInBoundaries:function(){var n=this.text.length;this.selectionStart>n?this.selectionStart=n:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>n?this.selectionEnd=n:this.selectionEnd<0&&(this.selectionEnd=0)}})})(),o.util.object.extend(o.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(u){if(this.canvas){this.__newClickTime=+new Date;var n=u.pointer;this.isTripleClick(n)&&(this.fire("tripleclick",u),this._stopEvent(u.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=n,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(u){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===u.x&&this.__lastPointer.y===u.y},_stopEvent:function(u){u.preventDefault&&u.preventDefault(),u.stopPropagation&&u.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(u){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(u.e))},tripleClickHandler:function(u){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(u.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(u){!this.canvas||!this.editable||u.e.button&&u.e.button!==1||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(u.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(u){!this.canvas||!this.editable||u.e.button&&u.e.button!==1||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(u){if(this.__isMousedown=!1,!(!this.editable||this.group||u.transform&&u.transform.actionPerformed||u.e.button&&u.e.button!==1)){if(this.canvas){var n=this.canvas._activeObject;if(n&&n!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(u.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(u){var n=this.getSelectionStartFromPointer(u),l=this.selectionStart,a=this.selectionEnd;u.shiftKey?this.setSelectionStartEndWithShift(l,a,n):(this.selectionStart=n,this.selectionEnd=n),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(u){for(var n=this.getLocalPointer(u),l=0,a=0,t=0,i=0,e=0,s,h,r=0,c=this._textLines.length;r<c&&t<=n.y;r++)t+=this.getHeightOfLine(r)*this.scaleY,e=r,r>0&&(i+=this._textLines[r-1].length+this.missingNewlineOffset(r-1));s=this._getLineLeftOffset(e),a=s*this.scaleX,h=this._textLines[e],this.direction==="rtl"&&(n.x=this.width*this.scaleX-n.x+a);for(var f=0,g=h.length;f<g&&(l=a,a+=this.__charBounds[e][f].kernedWidth*this.scaleX,a<=n.x);f++)i++;return this._getNewSelectionStartFromOffset(n,l,a,i,g)},_getNewSelectionStartFromOffset:function(u,n,l,a,t){var i=u.x-n,e=l-u.x,s=e>i||e<0?0:1,h=a+s;return this.flipX&&(h=t-h),h>this._text.length&&(h=this._text.length),h}}),o.util.object.extend(o.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=o.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var u=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+u.top+"; left: "+u.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: "+u.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):o.document.body.appendChild(this.hiddenTextarea),o.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),o.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),o.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),o.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),o.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),o.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),o.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),o.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),o.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(o.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(u){if(this.isEditing){var n=this.direction==="rtl"?this.keysMapRtl:this.keysMap;if(u.keyCode in n)this[n[u.keyCode]](u);else if(u.keyCode in this.ctrlKeysMapDown&&(u.ctrlKey||u.metaKey))this[this.ctrlKeysMapDown[u.keyCode]](u);else return;u.stopImmediatePropagation(),u.preventDefault(),u.keyCode>=33&&u.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(u){if(!this.isEditing||this._copyDone||this.inCompositionMode){this._copyDone=!1;return}if(u.keyCode in this.ctrlKeysMapUp&&(u.ctrlKey||u.metaKey))this[this.ctrlKeysMapUp[u.keyCode]](u);else return;u.stopImmediatePropagation(),u.preventDefault(),this.canvas&&this.canvas.requestRenderAll()},onInput:function(u){var n=this.fromPaste;if(this.fromPaste=!1,u&&u.stopPropagation(),!!this.isEditing){var l=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,a=this._text.length,t=l.length,i,e,s=t-a,h=this.selectionStart,r=this.selectionEnd,c=h!==r,f,g,p;if(this.hiddenTextarea.value===""){this.styles={},this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll());return}var v=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),_=h>v.selectionStart;c?(i=this._text.slice(h,r),s+=r-h):t<a&&(_?i=this._text.slice(r+s,r):i=this._text.slice(h,h-s)),e=l.slice(v.selectionEnd-s,v.selectionEnd),i&&i.length&&(e.length&&(f=this.getSelectionStyles(h,h+1,!1),f=e.map(function(){return f[0]})),c?(g=h,p=r):_?(g=r-i.length,p=r):(g=r,p=r+i.length),this.removeStyleFromTo(g,p)),e.length&&(n&&e.join("")===o.copiedText&&!o.disableStyleCopyPaste&&(f=o.copiedTextStyle),this.insertNewStyleBlock(e,h,f)),this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())}},onCompositionStart:function(){this.inCompositionMode=!0},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(u){this.compositionStart=u.target.selectionStart,this.compositionEnd=u.target.selectionEnd,this.updateTextareaPosition()},copy:function(){this.selectionStart!==this.selectionEnd&&(o.copiedText=this.getSelectedText(),o.disableStyleCopyPaste?o.copiedTextStyle=null:o.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0)},paste:function(){this.fromPaste=!0},_getClipboardData:function(u){return u&&u.clipboardData||o.window.clipboardData},_getWidthBeforeCursor:function(u,n){var l=this._getLineLeftOffset(u),a;return n>0&&(a=this.__charBounds[u][n-1],l+=a.left+a.width),l},getDownCursorOffset:function(u,n){var l=this._getSelectionForOffset(u,n),a=this.get2DCursorLocation(l),t=a.lineIndex;if(t===this._textLines.length-1||u.metaKey||u.keyCode===34)return this._text.length-l;var i=a.charIndex,e=this._getWidthBeforeCursor(t,i),s=this._getIndexOnLine(t+1,e),h=this._textLines[t].slice(i);return h.length+s+1+this.missingNewlineOffset(t)},_getSelectionForOffset:function(u,n){return u.shiftKey&&this.selectionStart!==this.selectionEnd&&n?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(u,n){var l=this._getSelectionForOffset(u,n),a=this.get2DCursorLocation(l),t=a.lineIndex;if(t===0||u.metaKey||u.keyCode===33)return-l;var i=a.charIndex,e=this._getWidthBeforeCursor(t,i),s=this._getIndexOnLine(t-1,e),h=this._textLines[t].slice(0,i),r=this.missingNewlineOffset(t-1);return-this._textLines[t-1].length+s-h.length+(1-r)},_getIndexOnLine:function(u,n){for(var l=this._textLines[u],a=this._getLineLeftOffset(u),t=a,i=0,e,s,h=0,r=l.length;h<r;h++)if(e=this.__charBounds[u][h].width,t+=e,t>n){s=!0;var c=t-e,f=t,g=Math.abs(c-n),p=Math.abs(f-n);i=p<g?h:h-1;break}return s||(i=l.length-1),i},moveCursorDown:function(u){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",u)},moveCursorUp:function(u){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorUpOrDown("Up",u)},_moveCursorUpOrDown:function(u,n){var l="get"+u+"CursorOffset",a=this[l](n,this._selectionDirection==="right");n.shiftKey?this.moveCursorWithShift(a):this.moveCursorWithoutShift(a),a!==0&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(u){var n=this._selectionDirection==="left"?this.selectionStart+u:this.selectionEnd+u;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,n),u!==0},moveCursorWithoutShift:function(u){return u<0?(this.selectionStart+=u,this.selectionEnd=this.selectionStart):(this.selectionEnd+=u,this.selectionStart=this.selectionEnd),u!==0},moveCursorLeft:function(u){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorLeftOrRight("Left",u)},_move:function(u,n,l){var a;if(u.altKey)a=this["findWordBoundary"+l](this[n]);else if(u.metaKey||u.keyCode===35||u.keyCode===36)a=this["findLineBoundary"+l](this[n]);else return this[n]+=l==="Left"?-1:1,!0;if(typeof a<"u"&&this[n]!==a)return this[n]=a,!0},_moveLeft:function(u,n){return this._move(u,n,"Left")},_moveRight:function(u,n){return this._move(u,n,"Right")},moveCursorLeftWithoutShift:function(u){var n=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&this.selectionStart!==0&&(n=this._moveLeft(u,"selectionStart")),this.selectionEnd=this.selectionStart,n},moveCursorLeftWithShift:function(u){if(this._selectionDirection==="right"&&this.selectionStart!==this.selectionEnd)return this._moveLeft(u,"selectionEnd");if(this.selectionStart!==0)return this._selectionDirection="left",this._moveLeft(u,"selectionStart")},moveCursorRight:function(u){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",u)},_moveCursorLeftOrRight:function(u,n){var l="moveCursor"+u+"With";this._currentCursorOpacity=1,n.shiftKey?l+="Shift":l+="outShift",this[l](n)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(u){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd)return this._moveRight(u,"selectionStart");if(this.selectionEnd!==this._text.length)return this._selectionDirection="right",this._moveRight(u,"selectionEnd")},moveCursorRightWithoutShift:function(u){var n=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(n=this._moveRight(u,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,n},removeChars:function(u,n){typeof n>"u"&&(n=u+1),this.removeStyleFromTo(u,n),this._text.splice(u,n-u),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(u,n,l,a){typeof a>"u"&&(a=l),a>l&&this.removeStyleFromTo(l,a);var t=o.util.string.graphemeSplit(u);this.insertNewStyleBlock(t,l,n),this._text=[].concat(this._text.slice(0,l),t,this._text.slice(a)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}}),(function(){var u=o.util.toFixed,n=/ +/g;o.util.object.extend(o.Text.prototype,{_toSVG:function(){var l=this._getSVGLeftTopOffsets(),a=this._getSVGTextAndBg(l.textTop,l.textLeft);return this._wrapSVGTextAndBg(a)},toSVG:function(l){return this._createBaseSVGMarkup(this._toSVG(),{reviver:l,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(l){var a=!0,t=this.getSvgTextDecoration(this);return[l.textBgRects.join(""),' <text xml:space="preserve" ',this.fontFamily?'font-family="'+this.fontFamily.replace(/"/g,"'")+'" ':"",this.fontSize?'font-size="'+this.fontSize+'" ':"",this.fontStyle?'font-style="'+this.fontStyle+'" ':"",this.fontWeight?'font-weight="'+this.fontWeight+'" ':"",t?'text-decoration="'+t+'" ':"",'style="',this.getSvgStyles(a),'"',this.addPaintOrder()," >",l.textSpans.join(""),`</text>
439
+ `]},_getSVGTextAndBg:function(l,a){var t=[],i=[],e=l,s;this._setSVGBg(i);for(var h=0,r=this._textLines.length;h<r;h++)s=this._getLineLeftOffset(h),(this.textBackgroundColor||this.styleHas("textBackgroundColor",h))&&this._setSVGTextLineBg(i,h,a+s,e),this._setSVGTextLineText(t,h,a+s,e),e+=this.getHeightOfLine(h);return{textSpans:t,textBgRects:i}},_createTextCharSpan:function(l,a,t,i){var e=l!==l.trim()||l.match(n),s=this.getSvgSpanStyles(a,e),h=s?'style="'+s+'"':"",r=a.deltaY,c="",f=o.Object.NUM_FRACTION_DIGITS;return r&&(c=' dy="'+u(r,f)+'" '),['<tspan x="',u(t,f),'" y="',u(i,f),'" ',c,h,">",o.util.string.escapeXml(l),"</tspan>"].join("")},_setSVGTextLineText:function(l,a,t,i){var e=this.getHeightOfLine(a),s=this.textAlign.indexOf("justify")!==-1,h,r,c="",f,g,p=0,v=this._textLines[a],_;i+=e*(1-this._fontSizeFraction)/this.lineHeight;for(var x=0,D=v.length-1;x<=D;x++)_=x===D||this.charSpacing,c+=v[x],f=this.__charBounds[a][x],p===0?(t+=f.kernedWidth-f.width,p+=f.width):p+=f.kernedWidth,s&&!_&&this._reSpaceAndTab.test(v[x])&&(_=!0),_||(h=h||this.getCompleteStyleDeclaration(a,x),r=this.getCompleteStyleDeclaration(a,x+1),_=o.util.hasStyleChanged(h,r,!0)),_&&(g=this._getStyleDeclaration(a,x)||{},l.push(this._createTextCharSpan(c,g,t,i)),c="",h=r,t+=p,p=0)},_pushTextBgRect:function(l,a,t,i,e,s){var h=o.Object.NUM_FRACTION_DIGITS;l.push(" <rect ",this._getFillAttributes(a),' x="',u(t,h),'" y="',u(i,h),'" width="',u(e,h),'" height="',u(s,h),`"></rect>
440
+ `)},_setSVGTextLineBg:function(l,a,t,i){for(var e=this._textLines[a],s=this.getHeightOfLine(a)/this.lineHeight,h=0,r=0,c,f,g=this.getValueOfPropertyAt(a,0,"textBackgroundColor"),p=0,v=e.length;p<v;p++)c=this.__charBounds[a][p],f=this.getValueOfPropertyAt(a,p,"textBackgroundColor"),f!==g?(g&&this._pushTextBgRect(l,g,t+r,i,h,s),r=c.left,h=c.width,g=f):h+=c.kernedWidth;f&&this._pushTextBgRect(l,f,t+r,i,h,s)},_getFillAttributes:function(l){var a=l&&typeof l=="string"?new o.Color(l):"";return!a||!a.getSource()||a.getAlpha()===1?'fill="'+l+'"':'opacity="'+a.getAlpha()+'" fill="'+a.setAlpha(1).toRgb()+'"'},_getSVGLineTopOffset:function(l){for(var a=0,t=0,i=0;i<l;i++)a+=this.getHeightOfLine(i);return t=this.getHeightOfLine(i),{lineTop:a,offset:(this._fontSizeMult-this._fontSizeFraction)*t/(this.lineHeight*this._fontSizeMult)}},getSvgStyles:function(l){var a=o.Object.prototype.getSvgStyles.call(this,l);return a+" white-space: pre;"}})})(),(function(u){var n=u.fabric||(u.fabric={});n.Textbox=n.util.createClass(n.IText,n.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingFlip:!0,noScaleCache:!1,_dimensionAffectingProps:n.Text.prototype._dimensionAffectingProps.concat("width"),_wordJoiners:/[ \t\r]/,splitByGrapheme:!1,initDimensions:function(){this.__skipDimension||(this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this._clearCache(),this.dynamicMinWidth=0,this._styleMap=this._generateStyleMap(this._splitText()),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this.textAlign.indexOf("justify")!==-1&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(l){for(var a=0,t=0,i=0,e={},s=0;s<l.graphemeLines.length;s++)l.graphemeText[i]===`
441
+ `&&s>0?(t=0,i++,a++):!this.splitByGrapheme&&this._reSpaceAndTab.test(l.graphemeText[i])&&s>0&&(t++,i++),e[s]={line:a,offset:t},i+=l.graphemeLines[s].length,t+=l.graphemeLines[s].length;return e},styleHas:function(l,a){if(this._styleMap&&!this.isWrapping){var t=this._styleMap[a];t&&(a=t.line)}return n.Text.prototype.styleHas.call(this,l,a)},isEmptyStyles:function(l){if(!this.styles)return!0;var a=0,t=l+1,i,e,s=!1,h=this._styleMap[l],r=this._styleMap[l+1];h&&(l=h.line,a=h.offset),r&&(t=r.line,s=t===l,i=r.offset),e=typeof l>"u"?this.styles:{line:this.styles[l]};for(var c in e)for(var f in e[c])if(f>=a&&(!s||f<i))for(var g in e[c][f])return!1;return!0},_getStyleDeclaration:function(l,a){if(this._styleMap&&!this.isWrapping){var t=this._styleMap[l];if(!t)return null;l=t.line,a=t.offset+a}return this.callSuper("_getStyleDeclaration",l,a)},_setStyleDeclaration:function(l,a,t){var i=this._styleMap[l];l=i.line,a=i.offset+a,this.styles[l][a]=t},_deleteStyleDeclaration:function(l,a){var t=this._styleMap[l];l=t.line,a=t.offset+a,delete this.styles[l][a]},_getLineStyle:function(l){var a=this._styleMap[l];return!!this.styles[a.line]},_setLineStyle:function(l){var a=this._styleMap[l];this.styles[a.line]={}},_wrapText:function(l,a){var t=[],i;for(this.isWrapping=!0,i=0;i<l.length;i++)t=t.concat(this._wrapLine(l[i],i,a));return this.isWrapping=!1,t},_measureWord:function(l,a,t){var i=0,e,s=!0;t=t||0;for(var h=0,r=l.length;h<r;h++){var c=this._getGraphemeBox(l[h],a,h+t,e,s);i+=c.kernedWidth,e=l[h]}return i},_wrapLine:function(l,a,t,z){var e=0,s=this.splitByGrapheme,h=[],r=[],c=s?n.util.string.graphemeSplit(l):l.split(this._wordJoiners),f="",g=0,p=s?"":" ",v=0,_=0,x=0,D=!0,B=this._getWidthOfCharSpacing(),z=z||0;c.length===0&&c.push([]),t-=z;for(var G=0;G<c.length;G++)f=s?c[G]:n.util.string.graphemeSplit(c[G]),v=this._measureWord(f,a,g),g+=f.length,e+=_+v-B,e>t&&!D?(h.push(r),r=[],e=v,D=!0):e+=B,!D&&!s&&r.push(p),r=r.concat(f),_=s?0:this._measureWord([p],a,g),g++,D=!1,v>x&&(x=v);return G&&h.push(r),x+z>this.dynamicMinWidth&&(this.dynamicMinWidth=x-B+z),h},isEndOfWrapping:function(l){return!this._styleMap[l+1]||this._styleMap[l+1].line!==this._styleMap[l].line},missingNewlineOffset:function(l){return this.splitByGrapheme?this.isEndOfWrapping(l)?1:0:1},_splitTextIntoLines:function(l){for(var a=n.Text.prototype._splitTextIntoLines.call(this,l),t=this._wrapText(a.lines,this.width),i=new Array(t.length),e=0;e<t.length;e++)i[e]=t[e].join("");return a.lines=i,a.graphemeLines=t,a},getMinWidth:function(){return Math.max(this.minWidth,this.dynamicMinWidth)},_removeExtraneousStyles:function(){var l={};for(var a in this._styleMap)this._textLines[a]&&(l[this._styleMap[a].line]=1);for(var a in this.styles)l[a]||delete this.styles[a]},toObject:function(l){return this.callSuper("toObject",["minWidth","splitByGrapheme"].concat(l))}}),n.Textbox.fromObject=function(l,a){var t=n.util.stylesFromArray(l.styles,l.text),i=Object.assign({},l,{styles:t});return n.Object._fromObject("Textbox",i,a,"text")}})(d),(function(){var u=o.controlsUtils,n=u.scaleSkewCursorStyleHandler,l=u.scaleCursorStyleHandler,a=u.scalingEqually,t=u.scalingYOrSkewingX,i=u.scalingXOrSkewingY,e=u.scaleOrSkewActionName,s=o.Object.prototype.controls;if(s.ml=new o.Control({x:-.5,y:0,cursorStyleHandler:n,actionHandler:i,getActionName:e}),s.mr=new o.Control({x:.5,y:0,cursorStyleHandler:n,actionHandler:i,getActionName:e}),s.mb=new o.Control({x:0,y:.5,cursorStyleHandler:n,actionHandler:t,getActionName:e}),s.mt=new o.Control({x:0,y:-.5,cursorStyleHandler:n,actionHandler:t,getActionName:e}),s.tl=new o.Control({x:-.5,y:-.5,cursorStyleHandler:l,actionHandler:a}),s.tr=new o.Control({x:.5,y:-.5,cursorStyleHandler:l,actionHandler:a}),s.bl=new o.Control({x:-.5,y:.5,cursorStyleHandler:l,actionHandler:a}),s.br=new o.Control({x:.5,y:.5,cursorStyleHandler:l,actionHandler:a}),s.mtr=new o.Control({x:0,y:-.5,actionHandler:u.rotationWithSnapping,cursorStyleHandler:u.rotationStyleHandler,offsetY:-40,withConnection:!0,actionName:"rotate"}),o.Textbox){var h=o.Textbox.prototype.controls={};h.mtr=s.mtr,h.tr=s.tr,h.br=s.br,h.tl=s.tl,h.bl=s.bl,h.mt=s.mt,h.mb=s.mb,h.mr=new o.Control({x:.5,y:0,actionHandler:u.changeWidth,cursorStyleHandler:n,actionName:"resizing"}),h.ml=new o.Control({x:-.5,y:0,actionHandler:u.changeWidth,cursorStyleHandler:n,actionName:"resizing"})}})()})(Be)),Be}var ge=ss();function os(d){return $n(d).promise.value}function as(d){return new Promise(o=>{const{onChange:m,open:S}=es(d);m(b=>{o(b)}),S()})}function ls(d){return new Promise(o=>{const m=document.createElement("img");m.src=d,document.body.appendChild(m),m.onload=()=>{o(m)}})}const hs=(d,o)=>Zn({source:d,...o}).copy();function cs(d,o){const m=document.createElement("a");m.href=d,m.download=`${hr()}.${o}`,document.body.appendChild(m),m.click(),m.remove()}function us(d,o,m,S,b,T,F){F!==void 0&&(d.save(),d.translate(o,m),d.rotate(F),d.drawImage(S,-b/2,-T/2,b,T),d.restore())}const fs=d=>d instanceof ge.fabric.Image,ds=d=>d instanceof ge.fabric.Group,gs=d=>d instanceof ge.fabric.IText,ps=d=>d instanceof ge.fabric.ActiveSelection;function ms(d){return new Promise(o=>{const m=new FileReader;m.addEventListener("load",()=>{o(m.result)}),m.readAsDataURL(d)})}function vs(d){if(!d)return null;const o=d.split(","),m=o[0].match(/:(.*?);/)[1],S=window.atob(o[1]),b=new ArrayBuffer(S.length),T=new Uint8Array(b);for(let F=0;F<S.length;F++)T[F]=S.charCodeAt(F);return[new Blob([b],{type:m}),m.slice(6)]}const _s={getImgStr:os,downFile:cs,selectFiles:as,insertImgFile:ls,clipboardText:hs,drawImg:us,isImage:fs,isGroup:ds,isIText:gs,isActiveSelection:ps,blobToBase64:ms,base64ToBlob:vs};exports.LengthConvert=Xe;exports.fabric=ge.fabric;exports.mathHelper=rr;exports.utils=_s;