@overtone-art/canvas-editor-core 0.6.3 → 0.6.4
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.global.js +45 -45
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.global.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";var OvertoneCanvasEditor=(()=>{var Ms=Object.defineProperty;var lh=Object.getOwnPropertyDescriptor;var hh=Object.getOwnPropertyNames;var ch=Object.prototype.hasOwnProperty;var uh=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var dh=(r,t)=>{for(var e in t)Ms(r,e,{get:t[e],enumerable:!0})},gh=(r,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of hh(t))!ch.call(r,s)&&s!==e&&Ms(r,s,{get:()=>t[s],enumerable:!(i=lh(t,s))||i.enumerable});return r};var fh=r=>gh(Ms({},"__esModule",{value:!0}),r);var lg={};dh(lg,{AnnotationOverlay:()=>ks,CANVAS_MASK_TARGET:()=>
|
|
2
|
-
void main(){}`,i=r.createShader(r.FRAGMENT_SHADER);return!!i&&(r.shaderSource(i,e),r.compileShader(i),!!r.getShaderParameter(i,r.COMPILE_STATUS))}queryWebGL(r){let t=r.getContext("webgl");t&&(this.maxTextureSize=t.getParameter(t.MAX_TEXTURE_SIZE),this.GLPrecision=["highp","mediump","lowp"].find(e=>this.testPrecision(t,e)),t.getExtension("WEBGL_lose_context").loseContext(),Xt("log",`WebGL: max texture size ${this.maxTextureSize}`))}isSupported(r){return!!this.maxTextureSize&&this.maxTextureSize>=r}},vh={},ca;var At=()=>ca||(ca={document,window,isTouchSupported:"ontouchstart"in window||"ontouchstart"in document||window&&window.navigator&&window.navigator.maxTouchPoints>0,WebGLProbe:new yh,dispose(){},copyPasteData:vh}),Ye=()=>At().document,ge=()=>At().window,$a=()=>{var r;return Math.max((r=L.devicePixelRatio)==null?ge().devicePixelRatio:r,1)},Ir=new class{constructor(){m(this,"boundsOfCurveCache",{}),this.charWidthsCache=new Map}getFontCache({fontFamily:r,fontStyle:t,fontWeight:e}){r=r.toLowerCase();let i=this.charWidthsCache;i.has(r)||i.set(r,new Map);let s=i.get(r),n=`${t.toLowerCase()}_${(e+"").toLowerCase()}`;return s.has(n)||s.set(n,new Map),s.get(n)}clearFontCache(r){r?this.charWidthsCache.delete((r||"").toLowerCase()):this.charWidthsCache=new Map}limitDimsByArea(r){let{perfLimitSizeTotal:t}=L,e=Math.sqrt(t*r);return[Math.floor(e),Math.floor(t/e)]}},Ys="7.4.0";function bi(){}var Kt=Math.PI/2,bh=Math.PI/4,_t=2*Math.PI,fn=Math.PI/180,nt=Object.freeze([1,0,0,1,0,0]),F="center",z="left",Wa="bottom",wt="right",Ii="none",pn=/\r?\n/,Ha="moving",Ri="scaling",za="rotating",Ga="rotate",Va="skewing",Yr="resizing",Na="modifyPoly",ki="changed",Ua="scale",Jt="scaleX",Zt="scaleY",$e="skewX",We="skewY",at="fill",Dt="stroke",qa="modified",ua="normal",Oe="json",_=new class{constructor(){this[Oe]=new Map,this.svg=new Map}has(r){return this[Oe].has(r)}getClass(r){let t=this[Oe].get(r);if(!t)throw new Pt(`No class registered for ${r}`);return t}setClass(r,t){t?this[Oe].set(t,r):(this[Oe].set(r.type,r),this[Oe].set(r.type.toLowerCase(),r))}getSVGClass(r){return this.svg.get(r)}setSVGClass(r,t){this.svg.set(t??r.type.toLowerCase(),r)}},Oi=new class extends Array{remove(r){let t=this.indexOf(r);t>-1&&this.splice(t,1)}cancelAll(){let r=this.splice(0);return r.forEach(t=>t.abort()),r}cancelByCanvas(r){if(!r)return[];let t=this.filter(e=>{var i;return e.target===r||typeof e.target=="object"&&((i=e.target)==null?void 0:i.canvas)===r});return t.forEach(e=>e.abort()),t}cancelByTarget(r){if(!r)return[];let t=this.filter(e=>e.target===r);return t.forEach(e=>e.abort()),t}},xh=class{constructor(){m(this,"__eventListeners",{})}on(r,t){if(this.__eventListeners||(this.__eventListeners={}),typeof r=="object")return Object.entries(r).forEach(([e,i])=>{this.on(e,i)}),()=>this.off(r);if(t){let e=r;return this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t),()=>this.off(e,t)}return()=>!1}once(r,t){if(typeof r=="object"){let e=[];return Object.entries(r).forEach(([i,s])=>{e.push(this.once(i,s))}),()=>e.forEach(i=>i())}if(t){let e=this.on(r,function(...i){t.call(this,...i),e()});return e}return()=>!1}_removeEventListener(r,t){if(this.__eventListeners[r])if(t){let e=this.__eventListeners[r],i=e.indexOf(t);i>-1&&e.splice(i,1)}else this.__eventListeners[r]=[]}off(r,t){if(this.__eventListeners)if(r===void 0)for(let e in this.__eventListeners)this._removeEventListener(e);else typeof r=="object"?Object.entries(r).forEach(([e,i])=>{this._removeEventListener(e,i)}):this._removeEventListener(r,t)}fire(r,t){var e;if(!this.__eventListeners)return;let i=(e=this.__eventListeners[r])==null?void 0:e.concat();if(i)for(let s=0;s<i.length;s++)i[s].call(this,t||{})}},ae=(r,t)=>{let e=r.indexOf(t);return e!==-1&&r.splice(e,1),r},Tt=r=>{if(r===0)return 1;switch(Math.abs(r)/Kt){case 1:case 3:return 0;case 2:return-1}return Math.cos(r)},kt=r=>{if(r===0)return 0;let t=r/Kt,e=Math.sign(r);switch(t){case 1:return e;case 2:return 0;case 3:return-e}return Math.sin(r)},v=class et{constructor(t=0,e=0){typeof t=="object"?(this.x=t.x,this.y=t.y):(this.x=t,this.y=e)}add(t){return new et(this.x+t.x,this.y+t.y)}addEquals(t){return this.x+=t.x,this.y+=t.y,this}scalarAdd(t){return new et(this.x+t,this.y+t)}scalarAddEquals(t){return this.x+=t,this.y+=t,this}subtract(t){return new et(this.x-t.x,this.y-t.y)}subtractEquals(t){return this.x-=t.x,this.y-=t.y,this}scalarSubtract(t){return new et(this.x-t,this.y-t)}scalarSubtractEquals(t){return this.x-=t,this.y-=t,this}multiply(t){return new et(this.x*t.x,this.y*t.y)}scalarMultiply(t){return new et(this.x*t,this.y*t)}scalarMultiplyEquals(t){return this.x*=t,this.y*=t,this}divide(t){return new et(this.x/t.x,this.y/t.y)}scalarDivide(t){return new et(this.x/t,this.y/t)}scalarDivideEquals(t){return this.x/=t,this.y/=t,this}eq(t){return this.x===t.x&&this.y===t.y}lt(t){return this.x<t.x&&this.y<t.y}lte(t){return this.x<=t.x&&this.y<=t.y}gt(t){return this.x>t.x&&this.y>t.y}gte(t){return this.x>=t.x&&this.y>=t.y}lerp(t,e=.5){return e=Math.max(Math.min(1,e),0),new et(this.x+(t.x-this.x)*e,this.y+(t.y-this.y)*e)}distanceFrom(t){let e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)}midPointFrom(t){return this.lerp(t)}min(t){return new et(Math.min(this.x,t.x),Math.min(this.y,t.y))}max(t){return new et(Math.max(this.x,t.x),Math.max(this.y,t.y))}toString(){return`${this.x},${this.y}`}setXY(t,e){return this.x=t,this.y=e,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setFromPoint(t){return this.x=t.x,this.y=t.y,this}swap(t){let e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i}clone(){return new et(this.x,this.y)}rotate(t,e=mn){let i=kt(t),s=Tt(t),n=this.subtract(e);return new et(n.x*s-n.y*i,n.x*i+n.y*s).add(e)}transform(t,e=!1){return new et(t[0]*this.x+t[2]*this.y+(e?0:t[4]),t[1]*this.x+t[3]*this.y+(e?0:t[5]))}},mn=new v(0,0),xi=r=>!!r&&Array.isArray(r._objects);function Ka(r){class t extends r{constructor(...i){super(...i),m(this,"_objects",[])}_onObjectAdded(i){}_onObjectRemoved(i){}_onStackOrderChanged(i){}add(...i){let s=this._objects.push(...i);return i.forEach(n=>this._onObjectAdded(n)),s}insertAt(i,...s){return this._objects.splice(i,0,...s),s.forEach(n=>this._onObjectAdded(n)),this._objects.length}remove(...i){let s=this._objects,n=[];return i.forEach(a=>{let o=s.indexOf(a);o!==-1&&(s.splice(o,1),n.push(a),this._onObjectRemoved(a))}),n}forEachObject(i){this.getObjects().forEach((s,n,a)=>i(s,n,a))}getObjects(...i){return i.length===0?[...this._objects]:this._objects.filter(s=>s.isType(...i))}item(i){return this._objects[i]}isEmpty(){return this._objects.length===0}size(){return this._objects.length}contains(i,s){return!!this._objects.includes(i)||!!s&&this._objects.some(n=>n instanceof t&&n.contains(i,!0))}complexity(){return this._objects.reduce((i,s)=>i+=s.complexity?s.complexity():0,0)}sendObjectToBack(i){return!(!i||i===this._objects[0])&&(ae(this._objects,i),this._objects.unshift(i),this._onStackOrderChanged(i),!0)}bringObjectToFront(i){return!(!i||i===this._objects[this._objects.length-1])&&(ae(this._objects,i),this._objects.push(i),this._onStackOrderChanged(i),!0)}sendObjectBackwards(i,s){if(!i)return!1;let n=this._objects.indexOf(i);if(n!==0){let a=this.findNewLowerIndex(i,n,s);return ae(this._objects,i),this._objects.splice(a,0,i),this._onStackOrderChanged(i),!0}return!1}bringObjectForward(i,s){if(!i)return!1;let n=this._objects.indexOf(i);if(n!==this._objects.length-1){let a=this.findNewUpperIndex(i,n,s);return ae(this._objects,i),this._objects.splice(a,0,i),this._onStackOrderChanged(i),!0}return!1}moveObjectTo(i,s){return i!==this._objects[s]&&(ae(this._objects,i),this._objects.splice(s,0,i),this._onStackOrderChanged(i),!0)}findNewLowerIndex(i,s,n){let a;if(n){a=s;for(let o=s-1;o>=0;--o)if(i.isOverlapping(this._objects[o])){a=o;break}}else a=s-1;return a}findNewUpperIndex(i,s,n){let a;if(n){a=s;for(let o=s+1;o<this._objects.length;++o)if(i.isOverlapping(this._objects[o])){a=o;break}}else a=s+1;return a}collectObjects({left:i,top:s,width:n,height:a},{includeIntersecting:o=!0}={}){let l=[],h=new v(i,s),c=h.add(new v(n,a));for(let u=this._objects.length-1;u>=0;u--){let d=this._objects[u];d.selectable&&d.visible&&(o&&d.intersectsWithRect(h,c)||d.isContainedWithinRect(h,c)||o&&d.containsPoint(h)||o&&d.containsPoint(c))&&l.push(d)}return l}}return t}var Ja=class extends xh{_setOptions(r={}){for(let t in r)this.set(t,r[t])}_setObject(r){for(let t in r)this._set(t,r[t])}set(r,t){return typeof r=="object"?this._setObject(r):this._set(r,t),this}_set(r,t){this[r]=t}toggle(r){let t=this.get(r);return typeof t=="boolean"&&this.set(r,!t),this}get(r){return this[r]}};function Rr(r){return ge().requestAnimationFrame(r)}function Za(r){return ge().cancelAnimationFrame(r)}var Ch=0,qt=()=>Ch++,jt=()=>{let r=Ye().createElement("canvas");if(!r||r.getContext===void 0)throw new Pt("Failed to create `canvas` element");return r},Qa=()=>Ye().createElement("img"),wh=r=>{var t;let e=gt(r);return(t=e.getContext("2d"))==null||t.drawImage(r,0,0),e},gt=r=>{let t=jt();return t.width=r.width,t.height=r.height,t},yn=(r,t,e)=>r.toDataURL(`image/${t}`,e),vn=(r,t,e)=>new Promise((i,s)=>{r.toBlob(i,`image/${t}`,e)}),X=r=>r*fn,Yt=r=>r/fn,to=r=>r.every((t,e)=>t===nt[e]),J=(r,t,e)=>new v(r).transform(t,e),ot=r=>{let t=1/(r[0]*r[3]-r[1]*r[2]),e=[t*r[3],-t*r[1],-t*r[2],t*r[0],0,0],{x:i,y:s}=new v(r[4],r[5]).transform(e,!0);return e[4]=-i,e[5]=-s,e},Y=(r,t,e)=>[r[0]*t[0]+r[2]*t[1],r[1]*t[0]+r[3]*t[1],r[0]*t[2]+r[2]*t[3],r[1]*t[2]+r[3]*t[3],e?0:r[0]*t[4]+r[2]*t[5]+r[4],e?0:r[1]*t[4]+r[3]*t[5]+r[5]],Bi=(r,t)=>r.reduceRight((e,i)=>i&&e?Y(i,e,t):i||e,void 0)||nt.concat(),bn=([r,t])=>Math.atan2(t,r),xn=([r,t])=>Math.sqrt(r*r+t*t),eo=([,,r,t])=>Math.sqrt(r*r+t*t),fe=r=>{let t=bn(r),e=r[0]**2+r[1]**2,i=Math.sqrt(e),s=(r[0]*r[3]-r[2]*r[1])/i,n=Math.atan2(r[0]*r[2]+r[1]*r[3],e);return{angle:Yt(t),scaleX:i,scaleY:s,skewX:Yt(n),skewY:0,translateX:r[4]||0,translateY:r[5]||0}},He=(r,t=0)=>[1,0,0,1,r,t];function me({angle:r=0}={},{x:t=0,y:e=0}={}){let i=X(r),s=Tt(i),n=kt(i);return[s,n,-n,s,t?t-(s*t-n*e):0,e?e-(n*t+s*e):0]}var Xi=(r,t=r)=>[r,0,0,t,0,0],ro=r=>Math.tan(X(r)),Cn=r=>[1,0,ro(r),1,0,0],wn=r=>[1,ro(r),0,1,0,0],Gr=({scaleX:r=1,scaleY:t=1,flipX:e=!1,flipY:i=!1,skewX:s=0,skewY:n=0})=>{let a=Xi(e?-r:r,i?-t:t);return s&&(a=Y(a,Cn(s),!0)),n&&(a=Y(a,wn(n),!0)),a},io=r=>{let{translateX:t=0,translateY:e=0,angle:i=0}=r,s=He(t,e);i&&(s=Y(s,me({angle:i})));let n=Gr(r);return to(n)||(s=Y(s,n)),s},Br=(r,{signal:t,crossOrigin:e=null}={})=>new Promise(function(i,s){if(t&&t.aborted)return s(new Ya("loadImage"));let n=Qa(),a;t&&(a=function(l){n.src="",s(l)},t.addEventListener("abort",a,{once:!0}));let o=function(){n.onload=n.onerror=null,a&&t?.removeEventListener("abort",a),i(n)};r?(n.onload=o,n.onerror=function(){a&&t?.removeEventListener("abort",a),s(new Pt(`Error loading ${n.src}`))},e&&(n.crossOrigin=e),n.src=r):o()}),Ie=(r,{signal:t,reviver:e=bi}={})=>new Promise((i,s)=>{let n=[];t&&t.addEventListener("abort",s,{once:!0}),Promise.allSettled(r.map(a=>_.getClass(a.type).fromObject(a,{signal:t}))).then(async a=>{for(let[o,l]of a.entries())if(l.status==="fulfilled"&&(await e(r[o],l.value),n.push(l.value)),l.status==="rejected"){let h=await e(r[o],void 0,l.reason);h&&n.push(h)}i(n)}).catch(a=>{n.forEach(o=>{o.dispose&&o.dispose()}),s(a)}).finally(()=>{t&&t.removeEventListener("abort",s)})}),Vr=(r,{signal:t}={})=>new Promise((e,i)=>{let s=[];t&&t.addEventListener("abort",i,{once:!0});let n=Object.values(r).map(o=>o&&o.type&&_.has(o.type)?Ie([o],{signal:t}).then(([l])=>(s.push(l),l)):o),a=Object.keys(r);Promise.all(n).then(o=>o.reduce((l,h,c)=>(l[a[c]]=h,l),{})).then(e).catch(o=>{s.forEach(l=>{l.dispose&&l.dispose()}),i(o)}).finally(()=>{t&&t.removeEventListener("abort",i)})}),ye=(r,t=[])=>t.reduce((e,i)=>(i in r&&(e[i]=r[i]),e),{}),Sn=(r,t)=>Object.keys(r).reduce((e,i)=>(t(r[i],i,r)&&(e[i]=r[i]),e),{}),R=(r,t)=>parseFloat(Number(r).toFixed(t)),Re=r=>"matrix("+r.map(t=>R(t,L.NUM_FRACTION_DIGITS)).join(" ")+")",yt=r=>!!r&&r.toLive!==void 0,da=r=>!!r&&typeof r.toObject=="function",ga=r=>!!r&&r.offsetX!==void 0&&"source"in r,oe=r=>!!r&&"multiSelectionStacking"in r;function so(r){let t=r&&xt(r),e=0,i=0;if(!r||!t)return{left:e,top:i};let s=r,n=t.documentElement,a=t.body||{scrollLeft:0,scrollTop:0};for(;s&&(s.parentNode||s.host)&&(s=s.parentNode||s.host,s===t?(e=a.scrollLeft||n.scrollLeft||0,i=a.scrollTop||n.scrollTop||0):(e+=s.scrollLeft||0,i+=s.scrollTop||0),s.nodeType!==1||s.style.position!=="fixed"););return{left:e,top:i}}var xt=r=>r.ownerDocument||null,no=r=>{var t;return((t=r.ownerDocument)==null?void 0:t.defaultView)||null},ao=(r,t,{width:e,height:i},s=1)=>{r.width=e,r.height=i,s>1&&(r.setAttribute("width",(e*s).toString()),r.setAttribute("height",(i*s).toString()),t.scale(s,s))},$s=(r,{width:t,height:e})=>{t&&(r.style.width=typeof t=="number"?`${t}px`:t),e&&(r.style.height=typeof e=="number"?`${e}px`:e)};function fa(r){return r.onselectstart!==void 0&&(r.onselectstart=()=>!1),r.style.userSelect=Ii,r}var oo=class{constructor(r){m(this,"_originalCanvasStyle",void 0),m(this,"lower",void 0);let t=this.createLowerCanvas(r);this.lower={el:t,ctx:t.getContext("2d")}}createLowerCanvas(r){let t=(e=r)&&e.getContext!==void 0?r:r&&Ye().getElementById(r)||jt();var e;if(t.hasAttribute("data-fabric"))throw new Pt("Trying to initialize a canvas that has already been initialized. Did you forget to dispose the canvas?");return this._originalCanvasStyle=t.style.cssText,t.setAttribute("data-fabric","main"),t.classList.add("lower-canvas"),t}cleanupDOM({width:r,height:t}){let{el:e}=this.lower;e.classList.remove("lower-canvas"),e.removeAttribute("data-fabric"),e.setAttribute("width",`${r}`),e.setAttribute("height",`${t}`),e.style.cssText=this._originalCanvasStyle||"",this._originalCanvasStyle=void 0}setDimensions(r,t){let{el:e,ctx:i}=this.lower;ao(e,i,r,t)}setCSSDimensions(r){$s(this.lower.el,r)}calcOffset(){return(function(r){var t;let e=r&&xt(r),i={left:0,top:0};if(!e)return i;let s=((t=no(r))==null?void 0:t.getComputedStyle(r,null))||{};i.left+=parseInt(s.borderLeftWidth,10)||0,i.top+=parseInt(s.borderTopWidth,10)||0,i.left+=parseInt(s.paddingLeft,10)||0,i.top+=parseInt(s.paddingTop,10)||0;let n={left:0,top:0},a=e.documentElement;r.getBoundingClientRect!==void 0&&(n=r.getBoundingClientRect());let o=so(r);return{left:n.left+o.left-(a.clientLeft||0)+i.left,top:n.top+o.top-(a.clientTop||0)+i.top}})(this.lower.el)}dispose(){At().dispose(this.lower.el),delete this.lower}},Sh={backgroundVpt:!0,backgroundColor:"",overlayVpt:!0,overlayColor:"",includeDefaultValues:!0,svgViewportTransformation:!0,renderOnAddRemove:!0,skipOffscreen:!0,enableRetinaScaling:!0,imageSmoothingEnabled:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,viewportTransform:[...nt],patternQuality:"best"},_h=zr({capitalize:()=>Th,escapeXml:()=>P,graphemeSplit:()=>Yi}),Th=(r,t=!1)=>`${r.charAt(0).toUpperCase()}${t?r.slice(1):r.slice(1).toLowerCase()}`,P=r=>r.toString().replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">"),gr,Yi=r=>{if(gr||gr||(gr="Intl"in ge()&&"Segmenter"in Intl&&new Intl.Segmenter(void 0,{granularity:"grapheme"})),gr){let t=gr.segment(r);return Array.from(t).map(({segment:e})=>e)}return kh(r)},kh=r=>{let t=[];for(let e,i=0;i<r.length;i++)(e=Oh(r,i))!==!1&&t.push(e);return t},Oh=(r,t)=>{let e=r.charCodeAt(t);if(isNaN(e))return"";if(e<55296||e>57343)return r.charAt(t);if(55296<=e&&e<=56319){if(r.length<=t+1)throw"High surrogate without following low surrogate";let s=r.charCodeAt(t+1);if(56320>s||s>57343)throw"High surrogate without following low surrogate";return r.charAt(t)+r.charAt(t+1)}if(t===0)throw"Low surrogate without preceding high surrogate";let i=r.charCodeAt(t-1);if(55296>i||i>56319)throw"Low surrogate without preceding high surrogate";return!1},ze=class lo extends Ka(Ja){get lowerCanvasEl(){var t;return(t=this.elements.lower)==null?void 0:t.el}get contextContainer(){var t;return(t=this.elements.lower)==null?void 0:t.ctx}static getDefaults(){return lo.ownDefaults}constructor(t,e={}){super(),Object.assign(this,this.constructor.getDefaults()),this.set(e),this.initElements(t),this._setDimensionsImpl({width:this.width||this.elements.lower.el.width||0,height:this.height||this.elements.lower.el.height||0}),this.skipControlsDrawing=!1,this.viewportTransform=[...this.viewportTransform],this.calcViewportBoundaries()}initElements(t){this.elements=new oo(t)}add(...t){let e=super.add(...t);return t.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),e}insertAt(t,...e){let i=super.insertAt(t,...e);return e.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),i}remove(...t){let e=super.remove(...t);return e.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),e}_onObjectAdded(t){t.canvas&&t.canvas!==this&&(Xt("warn",`Canvas is trying to add an object that belongs to a different canvas.
|
|
3
|
-
Resulting to default behavior: removing object from previous canvas and adding to new canvas`),t.canvas.remove(t)),t._set("canvas",this),t.setCoords(),this.fire("object:added",{target:t}),t.fire("added",{target:this})}_onObjectRemoved(t){t._set("canvas",void 0),this.fire("object:removed",{target:t}),t.fire("removed",{target:this})}_onStackOrderChanged(){this.renderOnAddRemove&&this.requestRenderAll()}getRetinaScaling(){return this.enableRetinaScaling?$a():1}calcOffset(){return this._offset=this.elements.calcOffset()}getWidth(){return this.width}getHeight(){return this.height}_setDimensionsImpl(t,{cssOnly:e=!1,backstoreOnly:i=!1}={}){if(!e){let s={width:this.width,height:this.height,...t};this.elements.setDimensions(s,this.getRetinaScaling()),this.hasLostContext=!0,this.width=s.width,this.height=s.height}i||this.elements.setCSSDimensions(t),this.calcOffset()}setDimensions(t,e){this._setDimensionsImpl(t,e),e&&e.cssOnly||this.requestRenderAll()}getZoom(){return xn(this.viewportTransform)}setViewportTransform(t){this.viewportTransform=t,this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll()}zoomToPoint(t,e){let i=t,s=[...this.viewportTransform],n=J(t,
|
|
1
|
+
"use strict";var OvertoneCanvasEditor=(()=>{var Ms=Object.defineProperty;var lh=Object.getOwnPropertyDescriptor;var hh=Object.getOwnPropertyNames;var ch=Object.prototype.hasOwnProperty;var uh=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var dh=(r,t)=>{for(var e in t)Ms(r,e,{get:t[e],enumerable:!0})},gh=(r,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of hh(t))!ch.call(r,s)&&s!==e&&Ms(r,s,{get:()=>t[s],enumerable:!(i=lh(t,s))||i.enumerable});return r};var fh=r=>gh(Ms({},"__esModule",{value:!0}),r);var lg={};dh(lg,{AnnotationOverlay:()=>ks,CANVAS_MASK_TARGET:()=>ot,CANVAS_SIZE_PRESETS:()=>ah,CanvasEditor:()=>Ts,CropController:()=>Ze,DEFAULT_LAYER_SHADOW:()=>ne,DEFAULT_PATTERN_CONFIG:()=>nh,DEFAULT_SELECTION_STYLE:()=>hs,DEFAULT_TEXT_CURVE:()=>es,EventEmitter:()=>Ve,FontRegistry:()=>ar,HistoryManager:()=>Ke,Layer:()=>Ue,LayerManager:()=>qe,LayerMaskManager:()=>Oe,LicenseManager:()=>or,MaskController:()=>hr,MaskPresetManager:()=>Ce,MaskRefinementError:()=>Ft,PatternManager:()=>be,ProjectManager:()=>lr,SHAPE_MASK_BOX:()=>sr,SHAPE_MASK_IDS:()=>ns,SnapManager:()=>Je,TEXTURE_MASK_IDS:()=>as,TEXTURE_MASK_SIZE:()=>Lt,TextCurveManager:()=>rr,TiledPatternObject:()=>ie,UnitConverter:()=>nr,applyAspectLock:()=>Se,applyLayerShadow:()=>ls,applyObjectSelectionStyle:()=>we,applySelectionStyle:()=>cs,buildCurveLinePaths:()=>er,buildCurvePathData:()=>Vn,clamp:()=>H,clearTextureMaskCache:()=>Jn,composeMaskGroup:()=>ni,computeCoverPlacement:()=>Zn,computePrintAreaClip:()=>ps,computeTilePositions:()=>ts,deserializeEditor:()=>gs,displaceRgba:()=>fs,drawTiles:()=>tr,escapeXml:()=>xs,explodeTemplateSvg:()=>Zi,exportDataURL:()=>bs,exportMockup:()=>ys,exportPNG:()=>ii,exportPrintArea:()=>ms,exportSVG:()=>vs,fitTextWidth:()=>Hl,fitToBox:()=>ke,generateId:()=>pt,isCssColor:()=>se,isMaskPresetId:()=>os,isShapeMaskId:()=>ir,isTextureMaskId:()=>ti,needsAbsoluteSpace:()=>Gt,normalizeTextCurve:()=>xe,readLayerShadow:()=>ri,renderTextureMask:()=>ei,resetTransform:()=>us,restoreLocks:()=>Jr,round2:()=>Q,sanitizeSvg:()=>Cs,serializeEditor:()=>ds,shapeMaskPathData:()=>Qr,textPathCurve:()=>Gn,textPathSpec:()=>Ji,toCanvasSpace:()=>ai,toHostSpace:()=>Te,unwrapGroup:()=>oi});var la=Object.defineProperty,Gr=(r,t)=>{let e={};for(var i in r)la(e,i,{get:r[i],enumerable:!0});return t||la(e,Symbol.toStringTag,{value:"Module"}),e};function Ir(r){return Ir=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ir(r)}function ph(r){var t=(function(e,i){if(Ir(e)!="object"||!e)return e;var s=e[Symbol.toPrimitive];if(s!==void 0){var n=s.call(e,i||"default");if(Ir(n)!="object")return n;throw TypeError("@@toPrimitive must return a primitive value.")}return(i==="string"?String:Number)(e)})(r,"string");return Ir(t)=="symbol"?t:t+""}function m(r,t,e){return(t=ph(t))in r?Object.defineProperty(r,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[t]=e,r}var ha=class{constructor(){m(this,"browserShadowBlurConstant",1),m(this,"DPI",96),m(this,"devicePixelRatio",typeof window<"u"?window.devicePixelRatio:1),m(this,"perfLimitSizeTotal",2097152),m(this,"maxCacheSideLimit",4096),m(this,"minCacheSideLimit",256),m(this,"disableStyleCopyPaste",!1),m(this,"enableGLFiltering",!0),m(this,"textureSize",4096),m(this,"forceGLPutImageData",!1),m(this,"cachesBoundsOfCurve",!1),m(this,"fontPaths",{}),m(this,"NUM_FRACTION_DIGITS",4)}},L=new class extends ha{constructor(r){super(),this.configure(r)}configure(r={}){Object.assign(this,r)}addFonts(r={}){this.fontPaths={...this.fontPaths,...r}}removeFonts(r=[]){r.forEach(t=>{delete this.fontPaths[t]})}clearFonts(){this.fontPaths={}}restoreDefaults(r){let t=new ha,e=r?.reduce((i,s)=>(i[s]=t[s],i),{})||t;this.configure(e)}},Xt=(r,...t)=>console[r]("fabric",...t),Pt=class extends Error{constructor(r,t){super(`fabric: ${r}`,t)}},Ya=class extends Pt{constructor(r){super(`${r} 'options.signal' is in 'aborted' state`)}},mh=class{},yh=class extends mh{testPrecision(r,t){let e=`precision ${t} float;
|
|
2
|
+
void main(){}`,i=r.createShader(r.FRAGMENT_SHADER);return!!i&&(r.shaderSource(i,e),r.compileShader(i),!!r.getShaderParameter(i,r.COMPILE_STATUS))}queryWebGL(r){let t=r.getContext("webgl");t&&(this.maxTextureSize=t.getParameter(t.MAX_TEXTURE_SIZE),this.GLPrecision=["highp","mediump","lowp"].find(e=>this.testPrecision(t,e)),t.getExtension("WEBGL_lose_context").loseContext(),Xt("log",`WebGL: max texture size ${this.maxTextureSize}`))}isSupported(r){return!!this.maxTextureSize&&this.maxTextureSize>=r}},vh={},ca;var At=()=>ca||(ca={document,window,isTouchSupported:"ontouchstart"in window||"ontouchstart"in document||window&&window.navigator&&window.navigator.maxTouchPoints>0,WebGLProbe:new yh,dispose(){},copyPasteData:vh}),$e=()=>At().document,ge=()=>At().window,$a=()=>{var r;return Math.max((r=L.devicePixelRatio)==null?ge().devicePixelRatio:r,1)},Rr=new class{constructor(){m(this,"boundsOfCurveCache",{}),this.charWidthsCache=new Map}getFontCache({fontFamily:r,fontStyle:t,fontWeight:e}){r=r.toLowerCase();let i=this.charWidthsCache;i.has(r)||i.set(r,new Map);let s=i.get(r),n=`${t.toLowerCase()}_${(e+"").toLowerCase()}`;return s.has(n)||s.set(n,new Map),s.get(n)}clearFontCache(r){r?this.charWidthsCache.delete((r||"").toLowerCase()):this.charWidthsCache=new Map}limitDimsByArea(r){let{perfLimitSizeTotal:t}=L,e=Math.sqrt(t*r);return[Math.floor(e),Math.floor(t/e)]}},Ys="7.4.0";function bi(){}var Jt=Math.PI/2,bh=Math.PI/4,_t=2*Math.PI,fn=Math.PI/180,nt=Object.freeze([1,0,0,1,0,0]),F="center",z="left",Wa="bottom",wt="right",Ii="none",pn=/\r?\n/,Ha="moving",Ri="scaling",za="rotating",Ga="rotate",Va="skewing",$r="resizing",Na="modifyPoly",ki="changed",Ua="scale",Zt="scaleX",Qt="scaleY",We="skewX",He="skewY",at="fill",Dt="stroke",qa="modified",ua="normal",Me="json",_=new class{constructor(){this[Me]=new Map,this.svg=new Map}has(r){return this[Me].has(r)}getClass(r){let t=this[Me].get(r);if(!t)throw new Pt(`No class registered for ${r}`);return t}setClass(r,t){t?this[Me].set(t,r):(this[Me].set(r.type,r),this[Me].set(r.type.toLowerCase(),r))}getSVGClass(r){return this.svg.get(r)}setSVGClass(r,t){this.svg.set(t??r.type.toLowerCase(),r)}},Oi=new class extends Array{remove(r){let t=this.indexOf(r);t>-1&&this.splice(t,1)}cancelAll(){let r=this.splice(0);return r.forEach(t=>t.abort()),r}cancelByCanvas(r){if(!r)return[];let t=this.filter(e=>{var i;return e.target===r||typeof e.target=="object"&&((i=e.target)==null?void 0:i.canvas)===r});return t.forEach(e=>e.abort()),t}cancelByTarget(r){if(!r)return[];let t=this.filter(e=>e.target===r);return t.forEach(e=>e.abort()),t}},xh=class{constructor(){m(this,"__eventListeners",{})}on(r,t){if(this.__eventListeners||(this.__eventListeners={}),typeof r=="object")return Object.entries(r).forEach(([e,i])=>{this.on(e,i)}),()=>this.off(r);if(t){let e=r;return this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t),()=>this.off(e,t)}return()=>!1}once(r,t){if(typeof r=="object"){let e=[];return Object.entries(r).forEach(([i,s])=>{e.push(this.once(i,s))}),()=>e.forEach(i=>i())}if(t){let e=this.on(r,function(...i){t.call(this,...i),e()});return e}return()=>!1}_removeEventListener(r,t){if(this.__eventListeners[r])if(t){let e=this.__eventListeners[r],i=e.indexOf(t);i>-1&&e.splice(i,1)}else this.__eventListeners[r]=[]}off(r,t){if(this.__eventListeners)if(r===void 0)for(let e in this.__eventListeners)this._removeEventListener(e);else typeof r=="object"?Object.entries(r).forEach(([e,i])=>{this._removeEventListener(e,i)}):this._removeEventListener(r,t)}fire(r,t){var e;if(!this.__eventListeners)return;let i=(e=this.__eventListeners[r])==null?void 0:e.concat();if(i)for(let s=0;s<i.length;s++)i[s].call(this,t||{})}},ae=(r,t)=>{let e=r.indexOf(t);return e!==-1&&r.splice(e,1),r},Tt=r=>{if(r===0)return 1;switch(Math.abs(r)/Jt){case 1:case 3:return 0;case 2:return-1}return Math.cos(r)},kt=r=>{if(r===0)return 0;let t=r/Jt,e=Math.sign(r);switch(t){case 1:return e;case 2:return 0;case 3:return-e}return Math.sin(r)},v=class et{constructor(t=0,e=0){typeof t=="object"?(this.x=t.x,this.y=t.y):(this.x=t,this.y=e)}add(t){return new et(this.x+t.x,this.y+t.y)}addEquals(t){return this.x+=t.x,this.y+=t.y,this}scalarAdd(t){return new et(this.x+t,this.y+t)}scalarAddEquals(t){return this.x+=t,this.y+=t,this}subtract(t){return new et(this.x-t.x,this.y-t.y)}subtractEquals(t){return this.x-=t.x,this.y-=t.y,this}scalarSubtract(t){return new et(this.x-t,this.y-t)}scalarSubtractEquals(t){return this.x-=t,this.y-=t,this}multiply(t){return new et(this.x*t.x,this.y*t.y)}scalarMultiply(t){return new et(this.x*t,this.y*t)}scalarMultiplyEquals(t){return this.x*=t,this.y*=t,this}divide(t){return new et(this.x/t.x,this.y/t.y)}scalarDivide(t){return new et(this.x/t,this.y/t)}scalarDivideEquals(t){return this.x/=t,this.y/=t,this}eq(t){return this.x===t.x&&this.y===t.y}lt(t){return this.x<t.x&&this.y<t.y}lte(t){return this.x<=t.x&&this.y<=t.y}gt(t){return this.x>t.x&&this.y>t.y}gte(t){return this.x>=t.x&&this.y>=t.y}lerp(t,e=.5){return e=Math.max(Math.min(1,e),0),new et(this.x+(t.x-this.x)*e,this.y+(t.y-this.y)*e)}distanceFrom(t){let e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)}midPointFrom(t){return this.lerp(t)}min(t){return new et(Math.min(this.x,t.x),Math.min(this.y,t.y))}max(t){return new et(Math.max(this.x,t.x),Math.max(this.y,t.y))}toString(){return`${this.x},${this.y}`}setXY(t,e){return this.x=t,this.y=e,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setFromPoint(t){return this.x=t.x,this.y=t.y,this}swap(t){let e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i}clone(){return new et(this.x,this.y)}rotate(t,e=mn){let i=kt(t),s=Tt(t),n=this.subtract(e);return new et(n.x*s-n.y*i,n.x*i+n.y*s).add(e)}transform(t,e=!1){return new et(t[0]*this.x+t[2]*this.y+(e?0:t[4]),t[1]*this.x+t[3]*this.y+(e?0:t[5]))}},mn=new v(0,0),xi=r=>!!r&&Array.isArray(r._objects);function Ka(r){class t extends r{constructor(...i){super(...i),m(this,"_objects",[])}_onObjectAdded(i){}_onObjectRemoved(i){}_onStackOrderChanged(i){}add(...i){let s=this._objects.push(...i);return i.forEach(n=>this._onObjectAdded(n)),s}insertAt(i,...s){return this._objects.splice(i,0,...s),s.forEach(n=>this._onObjectAdded(n)),this._objects.length}remove(...i){let s=this._objects,n=[];return i.forEach(a=>{let o=s.indexOf(a);o!==-1&&(s.splice(o,1),n.push(a),this._onObjectRemoved(a))}),n}forEachObject(i){this.getObjects().forEach((s,n,a)=>i(s,n,a))}getObjects(...i){return i.length===0?[...this._objects]:this._objects.filter(s=>s.isType(...i))}item(i){return this._objects[i]}isEmpty(){return this._objects.length===0}size(){return this._objects.length}contains(i,s){return!!this._objects.includes(i)||!!s&&this._objects.some(n=>n instanceof t&&n.contains(i,!0))}complexity(){return this._objects.reduce((i,s)=>i+=s.complexity?s.complexity():0,0)}sendObjectToBack(i){return!(!i||i===this._objects[0])&&(ae(this._objects,i),this._objects.unshift(i),this._onStackOrderChanged(i),!0)}bringObjectToFront(i){return!(!i||i===this._objects[this._objects.length-1])&&(ae(this._objects,i),this._objects.push(i),this._onStackOrderChanged(i),!0)}sendObjectBackwards(i,s){if(!i)return!1;let n=this._objects.indexOf(i);if(n!==0){let a=this.findNewLowerIndex(i,n,s);return ae(this._objects,i),this._objects.splice(a,0,i),this._onStackOrderChanged(i),!0}return!1}bringObjectForward(i,s){if(!i)return!1;let n=this._objects.indexOf(i);if(n!==this._objects.length-1){let a=this.findNewUpperIndex(i,n,s);return ae(this._objects,i),this._objects.splice(a,0,i),this._onStackOrderChanged(i),!0}return!1}moveObjectTo(i,s){return i!==this._objects[s]&&(ae(this._objects,i),this._objects.splice(s,0,i),this._onStackOrderChanged(i),!0)}findNewLowerIndex(i,s,n){let a;if(n){a=s;for(let o=s-1;o>=0;--o)if(i.isOverlapping(this._objects[o])){a=o;break}}else a=s-1;return a}findNewUpperIndex(i,s,n){let a;if(n){a=s;for(let o=s+1;o<this._objects.length;++o)if(i.isOverlapping(this._objects[o])){a=o;break}}else a=s+1;return a}collectObjects({left:i,top:s,width:n,height:a},{includeIntersecting:o=!0}={}){let l=[],h=new v(i,s),c=h.add(new v(n,a));for(let u=this._objects.length-1;u>=0;u--){let d=this._objects[u];d.selectable&&d.visible&&(o&&d.intersectsWithRect(h,c)||d.isContainedWithinRect(h,c)||o&&d.containsPoint(h)||o&&d.containsPoint(c))&&l.push(d)}return l}}return t}var Ja=class extends xh{_setOptions(r={}){for(let t in r)this.set(t,r[t])}_setObject(r){for(let t in r)this._set(t,r[t])}set(r,t){return typeof r=="object"?this._setObject(r):this._set(r,t),this}_set(r,t){this[r]=t}toggle(r){let t=this.get(r);return typeof t=="boolean"&&this.set(r,!t),this}get(r){return this[r]}};function Br(r){return ge().requestAnimationFrame(r)}function Za(r){return ge().cancelAnimationFrame(r)}var Ch=0,Kt=()=>Ch++,jt=()=>{let r=$e().createElement("canvas");if(!r||r.getContext===void 0)throw new Pt("Failed to create `canvas` element");return r},Qa=()=>$e().createElement("img"),wh=r=>{var t;let e=gt(r);return(t=e.getContext("2d"))==null||t.drawImage(r,0,0),e},gt=r=>{let t=jt();return t.width=r.width,t.height=r.height,t},yn=(r,t,e)=>r.toDataURL(`image/${t}`,e),vn=(r,t,e)=>new Promise((i,s)=>{r.toBlob(i,`image/${t}`,e)}),X=r=>r*fn,Yt=r=>r/fn,to=r=>r.every((t,e)=>t===nt[e]),J=(r,t,e)=>new v(r).transform(t,e),lt=r=>{let t=1/(r[0]*r[3]-r[1]*r[2]),e=[t*r[3],-t*r[1],-t*r[2],t*r[0],0,0],{x:i,y:s}=new v(r[4],r[5]).transform(e,!0);return e[4]=-i,e[5]=-s,e},Y=(r,t,e)=>[r[0]*t[0]+r[2]*t[1],r[1]*t[0]+r[3]*t[1],r[0]*t[2]+r[2]*t[3],r[1]*t[2]+r[3]*t[3],e?0:r[0]*t[4]+r[2]*t[5]+r[4],e?0:r[1]*t[4]+r[3]*t[5]+r[5]],Bi=(r,t)=>r.reduceRight((e,i)=>i&&e?Y(i,e,t):i||e,void 0)||nt.concat(),bn=([r,t])=>Math.atan2(t,r),xn=([r,t])=>Math.sqrt(r*r+t*t),eo=([,,r,t])=>Math.sqrt(r*r+t*t),fe=r=>{let t=bn(r),e=r[0]**2+r[1]**2,i=Math.sqrt(e),s=(r[0]*r[3]-r[2]*r[1])/i,n=Math.atan2(r[0]*r[2]+r[1]*r[3],e);return{angle:Yt(t),scaleX:i,scaleY:s,skewX:Yt(n),skewY:0,translateX:r[4]||0,translateY:r[5]||0}},ze=(r,t=0)=>[1,0,0,1,r,t];function me({angle:r=0}={},{x:t=0,y:e=0}={}){let i=X(r),s=Tt(i),n=kt(i);return[s,n,-n,s,t?t-(s*t-n*e):0,e?e-(n*t+s*e):0]}var Xi=(r,t=r)=>[r,0,0,t,0,0],ro=r=>Math.tan(X(r)),Cn=r=>[1,0,ro(r),1,0,0],wn=r=>[1,ro(r),0,1,0,0],Vr=({scaleX:r=1,scaleY:t=1,flipX:e=!1,flipY:i=!1,skewX:s=0,skewY:n=0})=>{let a=Xi(e?-r:r,i?-t:t);return s&&(a=Y(a,Cn(s),!0)),n&&(a=Y(a,wn(n),!0)),a},io=r=>{let{translateX:t=0,translateY:e=0,angle:i=0}=r,s=ze(t,e);i&&(s=Y(s,me({angle:i})));let n=Vr(r);return to(n)||(s=Y(s,n)),s},Xr=(r,{signal:t,crossOrigin:e=null}={})=>new Promise(function(i,s){if(t&&t.aborted)return s(new Ya("loadImage"));let n=Qa(),a;t&&(a=function(l){n.src="",s(l)},t.addEventListener("abort",a,{once:!0}));let o=function(){n.onload=n.onerror=null,a&&t?.removeEventListener("abort",a),i(n)};r?(n.onload=o,n.onerror=function(){a&&t?.removeEventListener("abort",a),s(new Pt(`Error loading ${n.src}`))},e&&(n.crossOrigin=e),n.src=r):o()}),Re=(r,{signal:t,reviver:e=bi}={})=>new Promise((i,s)=>{let n=[];t&&t.addEventListener("abort",s,{once:!0}),Promise.allSettled(r.map(a=>_.getClass(a.type).fromObject(a,{signal:t}))).then(async a=>{for(let[o,l]of a.entries())if(l.status==="fulfilled"&&(await e(r[o],l.value),n.push(l.value)),l.status==="rejected"){let h=await e(r[o],void 0,l.reason);h&&n.push(h)}i(n)}).catch(a=>{n.forEach(o=>{o.dispose&&o.dispose()}),s(a)}).finally(()=>{t&&t.removeEventListener("abort",s)})}),Nr=(r,{signal:t}={})=>new Promise((e,i)=>{let s=[];t&&t.addEventListener("abort",i,{once:!0});let n=Object.values(r).map(o=>o&&o.type&&_.has(o.type)?Re([o],{signal:t}).then(([l])=>(s.push(l),l)):o),a=Object.keys(r);Promise.all(n).then(o=>o.reduce((l,h,c)=>(l[a[c]]=h,l),{})).then(e).catch(o=>{s.forEach(l=>{l.dispose&&l.dispose()}),i(o)}).finally(()=>{t&&t.removeEventListener("abort",i)})}),ye=(r,t=[])=>t.reduce((e,i)=>(i in r&&(e[i]=r[i]),e),{}),Sn=(r,t)=>Object.keys(r).reduce((e,i)=>(t(r[i],i,r)&&(e[i]=r[i]),e),{}),R=(r,t)=>parseFloat(Number(r).toFixed(t)),Be=r=>"matrix("+r.map(t=>R(t,L.NUM_FRACTION_DIGITS)).join(" ")+")",yt=r=>!!r&&r.toLive!==void 0,da=r=>!!r&&typeof r.toObject=="function",ga=r=>!!r&&r.offsetX!==void 0&&"source"in r,oe=r=>!!r&&"multiSelectionStacking"in r;function so(r){let t=r&&xt(r),e=0,i=0;if(!r||!t)return{left:e,top:i};let s=r,n=t.documentElement,a=t.body||{scrollLeft:0,scrollTop:0};for(;s&&(s.parentNode||s.host)&&(s=s.parentNode||s.host,s===t?(e=a.scrollLeft||n.scrollLeft||0,i=a.scrollTop||n.scrollTop||0):(e+=s.scrollLeft||0,i+=s.scrollTop||0),s.nodeType!==1||s.style.position!=="fixed"););return{left:e,top:i}}var xt=r=>r.ownerDocument||null,no=r=>{var t;return((t=r.ownerDocument)==null?void 0:t.defaultView)||null},ao=(r,t,{width:e,height:i},s=1)=>{r.width=e,r.height=i,s>1&&(r.setAttribute("width",(e*s).toString()),r.setAttribute("height",(i*s).toString()),t.scale(s,s))},$s=(r,{width:t,height:e})=>{t&&(r.style.width=typeof t=="number"?`${t}px`:t),e&&(r.style.height=typeof e=="number"?`${e}px`:e)};function fa(r){return r.onselectstart!==void 0&&(r.onselectstart=()=>!1),r.style.userSelect=Ii,r}var oo=class{constructor(r){m(this,"_originalCanvasStyle",void 0),m(this,"lower",void 0);let t=this.createLowerCanvas(r);this.lower={el:t,ctx:t.getContext("2d")}}createLowerCanvas(r){let t=(e=r)&&e.getContext!==void 0?r:r&&$e().getElementById(r)||jt();var e;if(t.hasAttribute("data-fabric"))throw new Pt("Trying to initialize a canvas that has already been initialized. Did you forget to dispose the canvas?");return this._originalCanvasStyle=t.style.cssText,t.setAttribute("data-fabric","main"),t.classList.add("lower-canvas"),t}cleanupDOM({width:r,height:t}){let{el:e}=this.lower;e.classList.remove("lower-canvas"),e.removeAttribute("data-fabric"),e.setAttribute("width",`${r}`),e.setAttribute("height",`${t}`),e.style.cssText=this._originalCanvasStyle||"",this._originalCanvasStyle=void 0}setDimensions(r,t){let{el:e,ctx:i}=this.lower;ao(e,i,r,t)}setCSSDimensions(r){$s(this.lower.el,r)}calcOffset(){return(function(r){var t;let e=r&&xt(r),i={left:0,top:0};if(!e)return i;let s=((t=no(r))==null?void 0:t.getComputedStyle(r,null))||{};i.left+=parseInt(s.borderLeftWidth,10)||0,i.top+=parseInt(s.borderTopWidth,10)||0,i.left+=parseInt(s.paddingLeft,10)||0,i.top+=parseInt(s.paddingTop,10)||0;let n={left:0,top:0},a=e.documentElement;r.getBoundingClientRect!==void 0&&(n=r.getBoundingClientRect());let o=so(r);return{left:n.left+o.left-(a.clientLeft||0)+i.left,top:n.top+o.top-(a.clientTop||0)+i.top}})(this.lower.el)}dispose(){At().dispose(this.lower.el),delete this.lower}},Sh={backgroundVpt:!0,backgroundColor:"",overlayVpt:!0,overlayColor:"",includeDefaultValues:!0,svgViewportTransformation:!0,renderOnAddRemove:!0,skipOffscreen:!0,enableRetinaScaling:!0,imageSmoothingEnabled:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,viewportTransform:[...nt],patternQuality:"best"},_h=Gr({capitalize:()=>Th,escapeXml:()=>P,graphemeSplit:()=>Yi}),Th=(r,t=!1)=>`${r.charAt(0).toUpperCase()}${t?r.slice(1):r.slice(1).toLowerCase()}`,P=r=>r.toString().replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">"),fr,Yi=r=>{if(fr||fr||(fr="Intl"in ge()&&"Segmenter"in Intl&&new Intl.Segmenter(void 0,{granularity:"grapheme"})),fr){let t=fr.segment(r);return Array.from(t).map(({segment:e})=>e)}return kh(r)},kh=r=>{let t=[];for(let e,i=0;i<r.length;i++)(e=Oh(r,i))!==!1&&t.push(e);return t},Oh=(r,t)=>{let e=r.charCodeAt(t);if(isNaN(e))return"";if(e<55296||e>57343)return r.charAt(t);if(55296<=e&&e<=56319){if(r.length<=t+1)throw"High surrogate without following low surrogate";let s=r.charCodeAt(t+1);if(56320>s||s>57343)throw"High surrogate without following low surrogate";return r.charAt(t)+r.charAt(t+1)}if(t===0)throw"Low surrogate without preceding high surrogate";let i=r.charCodeAt(t-1);if(55296>i||i>56319)throw"Low surrogate without preceding high surrogate";return!1},Ge=class lo extends Ka(Ja){get lowerCanvasEl(){var t;return(t=this.elements.lower)==null?void 0:t.el}get contextContainer(){var t;return(t=this.elements.lower)==null?void 0:t.ctx}static getDefaults(){return lo.ownDefaults}constructor(t,e={}){super(),Object.assign(this,this.constructor.getDefaults()),this.set(e),this.initElements(t),this._setDimensionsImpl({width:this.width||this.elements.lower.el.width||0,height:this.height||this.elements.lower.el.height||0}),this.skipControlsDrawing=!1,this.viewportTransform=[...this.viewportTransform],this.calcViewportBoundaries()}initElements(t){this.elements=new oo(t)}add(...t){let e=super.add(...t);return t.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),e}insertAt(t,...e){let i=super.insertAt(t,...e);return e.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),i}remove(...t){let e=super.remove(...t);return e.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),e}_onObjectAdded(t){t.canvas&&t.canvas!==this&&(Xt("warn",`Canvas is trying to add an object that belongs to a different canvas.
|
|
3
|
+
Resulting to default behavior: removing object from previous canvas and adding to new canvas`),t.canvas.remove(t)),t._set("canvas",this),t.setCoords(),this.fire("object:added",{target:t}),t.fire("added",{target:this})}_onObjectRemoved(t){t._set("canvas",void 0),this.fire("object:removed",{target:t}),t.fire("removed",{target:this})}_onStackOrderChanged(){this.renderOnAddRemove&&this.requestRenderAll()}getRetinaScaling(){return this.enableRetinaScaling?$a():1}calcOffset(){return this._offset=this.elements.calcOffset()}getWidth(){return this.width}getHeight(){return this.height}_setDimensionsImpl(t,{cssOnly:e=!1,backstoreOnly:i=!1}={}){if(!e){let s={width:this.width,height:this.height,...t};this.elements.setDimensions(s,this.getRetinaScaling()),this.hasLostContext=!0,this.width=s.width,this.height=s.height}i||this.elements.setCSSDimensions(t),this.calcOffset()}setDimensions(t,e){this._setDimensionsImpl(t,e),e&&e.cssOnly||this.requestRenderAll()}getZoom(){return xn(this.viewportTransform)}setViewportTransform(t){this.viewportTransform=t,this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll()}zoomToPoint(t,e){let i=t,s=[...this.viewportTransform],n=J(t,lt(s));s[0]=e,s[3]=e;let a=J(n,s);s[4]+=i.x-a.x,s[5]+=i.y-a.y,this.setViewportTransform(s)}setZoom(t){this.zoomToPoint(new v(0,0),t)}absolutePan(t){let e=[...this.viewportTransform];return e[4]=-t.x,e[5]=-t.y,this.setViewportTransform(e)}relativePan(t){return this.absolutePan(new v(-t.x-this.viewportTransform[4],-t.y-this.viewportTransform[5]))}getElement(){return this.elements.lower.el}clearContext(t){t.clearRect(0,0,this.width,this.height)}getContext(){return this.elements.lower.ctx}clear(){this.remove(...this.getObjects()),this.backgroundImage=void 0,this.overlayImage=void 0,this.backgroundColor="",this.overlayColor="",this.clearContext(this.getContext()),this.fire("canvas:cleared"),this.renderOnAddRemove&&this.requestRenderAll()}renderAll(){this.cancelRequestedRender(),this.destroyed||this.renderCanvas(this.getContext(),this._objects)}renderAndReset(){this.nextRenderHandle=0,this.renderAll()}requestRenderAll(){this.nextRenderHandle||this.disposed||this.destroyed||(this.nextRenderHandle=Br(()=>this.renderAndReset()))}calcViewportBoundaries(){let t=this.width,e=this.height,i=lt(this.viewportTransform),s=J({x:0,y:0},i),n=J({x:t,y:e},i),a=s.min(n),o=s.max(n);return this.vptCoords={tl:a,tr:new v(o.x,a.y),bl:new v(a.x,o.y),br:o}}cancelRequestedRender(){this.nextRenderHandle&&(Za(this.nextRenderHandle),this.nextRenderHandle=0)}drawControls(t){}renderCanvas(t,e){if(this.destroyed)return;let i=this.viewportTransform,s=this.clipPath;this.calcViewportBoundaries(),this.clearContext(t),t.imageSmoothingEnabled=this.imageSmoothingEnabled,t.patternQuality=this.patternQuality,this.fire("before:render",{ctx:t}),this._renderBackground(t),t.save(),t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this._renderObjects(t,e),t.restore(),this.controlsAboveOverlay||this.skipControlsDrawing||this.drawControls(t),s&&(s._set("canvas",this),s.shouldCache(),s._transformDone=!0,s.renderCache({forClipping:!0}),this.drawClipPathOnCanvas(t,s)),this._renderOverlay(t),this.controlsAboveOverlay&&!this.skipControlsDrawing&&this.drawControls(t),this.fire("after:render",{ctx:t}),this.__cleanupTask&&(this.__cleanupTask(),this.__cleanupTask=void 0)}drawClipPathOnCanvas(t,e){let i=this.viewportTransform;t.save(),t.transform(...i),t.globalCompositeOperation="destination-in",e.transform(t),t.scale(1/e.zoomX,1/e.zoomY),t.drawImage(e._cacheCanvas,-e.cacheTranslationX,-e.cacheTranslationY),t.restore()}_renderObjects(t,e){for(let i=0,s=e.length;i<s;++i)e[i]&&e[i].render(t)}_renderBackgroundOrOverlay(t,e){let i=this[`${e}Color`],s=this[`${e}Image`],n=this.viewportTransform,a=this[`${e}Vpt`];if(!i&&!s)return;let o=yt(i);if(i){if(t.save(),t.beginPath(),t.moveTo(0,0),t.lineTo(this.width,0),t.lineTo(this.width,this.height),t.lineTo(0,this.height),t.closePath(),t.fillStyle=o?i.toLive(t):i,a&&t.transform(...n),o){t.transform(1,0,0,1,i.offsetX||0,i.offsetY||0);let l=i.gradientTransform||i.patternTransform;l&&t.transform(...l)}t.fill(),t.restore()}if(s){t.save();let{skipOffscreen:l}=this;this.skipOffscreen=a,a&&t.transform(...n),s.render(t),this.skipOffscreen=l,t.restore()}}_renderBackground(t){this._renderBackgroundOrOverlay(t,"background")}_renderOverlay(t){this._renderBackgroundOrOverlay(t,"overlay")}getCenterPoint(){return new v(this.width/2,this.height/2)}centerObjectH(t){return this._centerObject(t,new v(this.getCenterPoint().x,t.getCenterPoint().y))}centerObjectV(t){return this._centerObject(t,new v(t.getCenterPoint().x,this.getCenterPoint().y))}centerObject(t){return this._centerObject(t,this.getCenterPoint())}viewportCenterObject(t){return this._centerObject(t,this.getVpCenter())}viewportCenterObjectH(t){return this._centerObject(t,new v(this.getVpCenter().x,t.getCenterPoint().y))}viewportCenterObjectV(t){return this._centerObject(t,new v(t.getCenterPoint().x,this.getVpCenter().y))}getVpCenter(){return J(this.getCenterPoint(),lt(this.viewportTransform))}_centerObject(t,e){t.setXY(e,F,F),t.setCoords(),this.renderOnAddRemove&&this.requestRenderAll()}toDatalessJSON(t){return this.toDatalessObject(t)}toObject(t){return this._toObjectMethod("toObject",t)}toJSON(){return this.toObject()}toDatalessObject(t){return this._toObjectMethod("toDatalessObject",t)}_toObjectMethod(t,e){let i=this.clipPath,s=i&&!i.excludeFromExport?this._toObject(i,t,e):null;return{version:Ys,...ye(this,e),objects:this._objects.filter(n=>!n.excludeFromExport).map(n=>this._toObject(n,t,e)),...this.__serializeBgOverlay(t,e),...s?{clipPath:s}:null}}_toObject(t,e,i){let s;this.includeDefaultValues||(s=t.includeDefaultValues,t.includeDefaultValues=!1);let n=t[e](i);return this.includeDefaultValues||(t.includeDefaultValues=!!s),n}__serializeBgOverlay(t,e){let i={},s=this.backgroundImage,n=this.overlayImage,a=this.backgroundColor,o=this.overlayColor;return yt(a)?a.excludeFromExport||(i.background=a.toObject(e)):a&&(i.background=a),yt(o)?o.excludeFromExport||(i.overlay=o.toObject(e)):o&&(i.overlay=o),s&&!s.excludeFromExport&&(i.backgroundImage=this._toObject(s,t,e)),n&&!n.excludeFromExport&&(i.overlayImage=this._toObject(n,t,e)),i}toSVG(t={},e){t.reviver=e;let i=[];var s;return this._setSVGPreamble(i,t),this._setSVGHeader(i,t),this.clipPath&&i.push(`<g clip-path="url(#${P((s=this.clipPath.clipPathId)==null?"":s)})" >
|
|
4
4
|
`),this._setSVGBgOverlayColor(i,"background"),this._setSVGBgOverlayImage(i,"backgroundImage",e),this._setSVGObjects(i,e),this.clipPath&&i.push(`</g>
|
|
5
5
|
`),this._setSVGBgOverlayColor(i,"overlay"),this._setSVGBgOverlayImage(i,"overlayImage",e),i.push("</svg>"),i.join("")}_setSVGPreamble(t,e){e.suppressPreamble||t.push('<?xml version="1.0" encoding="',e.encoding||"UTF-8",`" standalone="no" ?>
|
|
6
6
|
`,'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ',`"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
@@ -8,23 +8,23 @@ Resulting to default behavior: removing object from previous canvas and adding t
|
|
|
8
8
|
`,"<desc>Created with Fabric.js ",Ys,`</desc>
|
|
9
9
|
`,`<defs>
|
|
10
10
|
`,this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(e),`</defs>
|
|
11
|
-
`)}createSVGClipPathMarkup(t){let e=this.clipPath;return e?(e.clipPathId=`CLIPPATH_${
|
|
11
|
+
`)}createSVGClipPathMarkup(t){let e=this.clipPath;return e?(e.clipPathId=`CLIPPATH_${Kt()}`,`<clipPath id="${e.clipPathId}" >
|
|
12
12
|
${e.toClipPathSVG(t.reviver)}</clipPath>
|
|
13
|
-
`):""}createSVGRefElementsMarkup(){return["background","overlay"].map(t=>{let e=this[`${t}Color`];if(yt(e)){let i=this[`${t}Vpt`],s=this.viewportTransform,n={isType:()=>!1,width:this.width/(i?s[0]:1),height:this.height/(i?s[3]:1)};return e.toSVG(n,{additionalTransform:i?
|
|
13
|
+
`):""}createSVGRefElementsMarkup(){return["background","overlay"].map(t=>{let e=this[`${t}Color`];if(yt(e)){let i=this[`${t}Vpt`],s=this.viewportTransform,n={isType:()=>!1,width:this.width/(i?s[0]:1),height:this.height/(i?s[3]:1)};return e.toSVG(n,{additionalTransform:i?Be(s):""})}}).join("")}createSVGFontFacesMarkup(){let t=[],e={},i=L.fontPaths;this._objects.forEach(function n(a){t.push(a),xi(a)&&a._objects.forEach(n)}),t.forEach(n=>{if(!(a=n)||typeof a._renderText!="function")return;var a;let{styles:o,fontFamily:l}=n;!e[l]&&i[l]&&(e[l]=!0,o&&Object.values(o).forEach(h=>{Object.values(h).forEach(({fontFamily:c=""})=>{!e[c]&&i[c]&&(e[c]=!0)})}))});let s=Object.keys(e).map(n=>` @font-face {
|
|
14
14
|
font-family: '${n}';
|
|
15
15
|
src: url('${i[n]}');
|
|
16
16
|
}
|
|
17
17
|
`).join("");return s?` <style type="text/css"><![CDATA[
|
|
18
18
|
${s}]]></style>
|
|
19
|
-
`:""}_setSVGObjects(t,e){this.forEachObject(i=>{i.excludeFromExport||this._setSVGObject(t,i,e)})}_setSVGObject(t,e,i){t.push(e.toSVG(i))}_setSVGBgOverlayImage(t,e,i){let s=this[e];s&&!s.excludeFromExport&&s.toSVG&&t.push(s.toSVG(i))}_setSVGBgOverlayColor(t,e){let i=this[`${e}Color`];if(i)if(yt(i)){let s=i.repeat||"",n=this.width,a=this.height,o=this[`${e}Vpt`]?
|
|
19
|
+
`:""}_setSVGObjects(t,e){this.forEachObject(i=>{i.excludeFromExport||this._setSVGObject(t,i,e)})}_setSVGObject(t,e,i){t.push(e.toSVG(i))}_setSVGBgOverlayImage(t,e,i){let s=this[e];s&&!s.excludeFromExport&&s.toSVG&&t.push(s.toSVG(i))}_setSVGBgOverlayColor(t,e){let i=this[`${e}Color`];if(i)if(yt(i)){let s=i.repeat||"",n=this.width,a=this.height,o=this[`${e}Vpt`]?Be(lt(this.viewportTransform)):"";t.push(`<rect transform="${o} translate(${n/2},${a/2})" x="${i.offsetX-n/2}" y="${i.offsetY-a/2}" width="${s!=="repeat-y"&&s!=="no-repeat"||!ga(i)?n:i.source.width}" height="${s!=="repeat-x"&&s!=="no-repeat"||!ga(i)?a:i.source.height}" fill="url(#SVGID_${i.id})"></rect>
|
|
20
20
|
`)}else t.push('<rect x="0" y="0" width="100%" height="100%" ','fill="',i,'"',`></rect>
|
|
21
|
-
`)}loadFromJSON(t,e,{signal:i}={}){if(!t)return Promise.reject(new Pt("`json` is undefined"));let{objects:s=[],...n}=typeof t=="string"?JSON.parse(t):t,{backgroundImage:a,background:o,overlayImage:l,overlay:h,clipPath:c}=n,u=this.renderOnAddRemove;return this.renderOnAddRemove=!1,Promise.all([Ie(s,{reviver:e,signal:i}),Vr({backgroundImage:a,backgroundColor:o,overlayImage:l,overlayColor:h,clipPath:c},{signal:i})]).then(([d,g])=>(this.clear(),this.add(...d),this.set(n),this.set(g),this.renderOnAddRemove=u,this))}clone(t){let e=this.toObject(t);return this.cloneWithoutData().loadFromJSON(e)}cloneWithoutData(){let t=gt(this);return new this.constructor(t)}toDataURL(t={}){let{format:e="png",quality:i=1,multiplier:s=1,enableRetinaScaling:n=!1}=t,a=s*(n?this.getRetinaScaling():1);return yn(this.toCanvasElement(a,t),e,i)}toBlob(t={}){let{format:e="png",quality:i=1,multiplier:s=1,enableRetinaScaling:n=!1}=t,a=s*(n?this.getRetinaScaling():1);return vn(this.toCanvasElement(a,t),e,i)}toCanvasElement(t=1,{width:e,height:i,left:s,top:n,filter:a}={}){let o=(e||this.width)*t,l=(i||this.height)*t,h=this.getZoom(),c=this.width,u=this.height,d=this.skipControlsDrawing,g=h*t,f=this.viewportTransform,p=[g,0,0,g,(f[4]-(s||0))*t,(f[5]-(n||0))*t],y=this.enableRetinaScaling,b=gt({width:o,height:l}),x=a?this._objects.filter(C=>a(C)):this._objects;return this.enableRetinaScaling=!1,this.viewportTransform=p,this.width=o,this.height=l,this.skipControlsDrawing=!0,this.calcViewportBoundaries(),this.renderCanvas(b.getContext("2d"),x),this.viewportTransform=f,this.width=c,this.height=u,this.calcViewportBoundaries(),this.enableRetinaScaling=y,this.skipControlsDrawing=d,b}dispose(){return!this.disposed&&this.elements.cleanupDOM({width:this.width,height:this.height}),Oi.cancelByCanvas(this),this.disposed=!0,new Promise((t,e)=>{let i=()=>{this.destroy(),t(!0)};i.kill=e,this.__cleanupTask&&this.__cleanupTask.kill("aborted"),this.destroyed?t(!1):this.nextRenderHandle?this.__cleanupTask=i:i()})}destroy(){this.destroyed=!0,this.cancelRequestedRender(),this.forEachObject(t=>t.dispose()),this._objects=[],this.backgroundImage&&this.backgroundImage.dispose(),this.backgroundImage=void 0,this.overlayImage&&this.overlayImage.dispose(),this.overlayImage=void 0,this.elements.dispose()}toString(){return`#<Canvas (${this.complexity()}): { objects: ${this._objects.length} }>`}};m(ze,"ownDefaults",Sh);var Mh=["touchstart","touchmove","touchend"],ho=r=>{let t=so(r.target),e=(function(i){let s=i.changedTouches;return s&&s[0]?s[0]:i})(r);return new v(e.clientX+t.left,e.clientY+t.top)},Mi=r=>Mh.includes(r.type)||r.pointerType==="touch",pa=r=>{r.preventDefault(),r.stopPropagation()},Et=r=>{let t=0,e=0,i=0,s=0;for(let n=0,a=r.length;n<a;n++){let{x:o,y:l}=r[n];(o>i||!n)&&(i=o),(o<t||!n)&&(t=o),(l>s||!n)&&(s=l),(l<e||!n)&&(e=l)}return{left:t,top:e,width:i-t,height:s-e}},Ph=(r,t)=>{Be(r,Y(ot(t),r.calcOwnMatrix()))},co=(r,t)=>Be(r,Y(t,r.calcOwnMatrix())),Be=(r,t)=>{let{translateX:e,translateY:i,scaleX:s,scaleY:n,...a}=fe(t),o=new v(e,i);r.flipX=!1,r.flipY=!1,Object.assign(r,a),r.set({scaleX:s,scaleY:n}),r.setPositionByOrigin(o,F,F)},uo=r=>{r.scaleX=1,r.scaleY=1,r.skewX=0,r.skewY=0,r.flipX=!1,r.flipY=!1,r.rotate(0)},_n=r=>({scaleX:r.scaleX,scaleY:r.scaleY,skewX:r.skewX,skewY:r.skewY,angle:r.angle,left:r.left,flipX:r.flipX,flipY:r.flipY,top:r.top}),$i=(r,t,e)=>{let i=r/2,s=t/2,n=Et([new v(-i,-s),new v(i,-s),new v(-i,s),new v(i,s)].map(a=>a.transform(e)));return new v(n.width,n.height)},Nr=(r=nt,t=nt)=>Y(ot(t),r),$t=(r,t=nt,e=nt)=>r.transform(Nr(t,e)),go=(r,t=nt,e=nt)=>r.transform(Nr(t,e),!0),Tn=(r,t,e)=>{let i=Nr(t,e);return Be(r,Y(i,r.calcOwnMatrix())),i},Eh={left:-.5,top:-.5,center:0,bottom:.5,right:.5},it=r=>typeof r=="string"?Eh[r]:r-.5,Ah=new v(1,0),fo=new v,kn=(r,t)=>r.rotate(t),$r=(r,t)=>new v(t).subtract(r),Pi=r=>r.distanceFrom(fo),Ei=(r,t)=>Math.atan2(Fe(r,t),po(r,t)),On=r=>Ei(Ah,r),Wi=r=>r.eq(fo)?r:r.scalarDivide(Pi(r)),Mn=(r,t=!0)=>Wi(new v(-r.y,r.x).scalarMultiply(t?1:-1)),Fe=(r,t)=>r.x*t.y-r.y*t.x,po=(r,t)=>r.x*t.x+r.y*t.y,Ws=(r,t,e)=>{if(r.eq(t)||r.eq(e))return!0;let i=Fe(t,e),s=Fe(t,r),n=Fe(e,r);return i>=0?s>=0&&n<=0:!(s<=0&&n>=0)},Pn="not-allowed";function mo(r){return it(r.originX)===it("center")&&it(r.originY)===it("center")}function ma(r){return .5-it(r)}var St=(r,t)=>r[t],En=(r,t,e,i)=>({e:r,transform:t,pointer:new v(e,i)});function yo(r,t,e){let i=e,s=On($r($t(r.getCenterPoint(),r.canvas.viewportTransform,void 0),i))+_t;return Math.round(s%_t/bh)}function Hi({target:r,corner:t},e,i,s,n){var a;let o=r.controls[t],l=((a=r.canvas)==null?void 0:a.getZoom())||1,h=r.padding/l,c=(function(u,d,g,f){let p=u.getRelativeCenterPoint(),y=g!==void 0&&f!==void 0?u.translateToGivenOrigin(p,F,F,g,f):new v(u.left,u.top);return(u.angle?d.rotate(-X(u.angle),p):d).subtract(y)})(r,new v(s,n),e,i);return c.x>=h&&(c.x-=h),c.x<=-h&&(c.x+=h),c.y>=h&&(c.y-=h),c.y<=h&&(c.y+=h),c.x-=o.offsetX,c.y-=o.offsetY,c}var Dh=new RegExp(String.raw`[\0-\x1F\x7F;<>\\]|\/\*|\*\/|url\s*\(|expression\s*\(|(?:java|vb)script\s*:|data\s*:|@import\b`,"iu"),zi=r=>typeof r=="string"&&r.trim().length>0&&!Dh.test(r),le=(r,t="")=>{let e=Number(r);return Number.isFinite(e)?`${e}`:t},he=(r,t="")=>typeof r=="string"&&zi(r)?r:t,Ai=r=>r.replace(/\s+/g," "),ya={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#0FF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000",blanchedalmond:"#FFEBCD",blue:"#00F",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#0FF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",darkgreen:"#006400",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#F0F",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",lightgreen:"#90EE90",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#789",lightslategrey:"#789",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#0F0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#F0F",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#639",red:"#F00",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFF",whitesmoke:"#F5F5F5",yellow:"#FF0",yellowgreen:"#9ACD32"},Ps=(r,t,e)=>(e<0&&(e+=1),e>1&&--e,e<1/6?r+6*(t-r)*e:e<.5?t:e<2/3?r+(t-r)*(2/3-e)*6:r),va=(r,t,e,i)=>{r/=255,t/=255,e/=255;let s=Math.max(r,t,e),n=Math.min(r,t,e),a,o,l=(s+n)/2;if(s===n)a=o=0;else{let h=s-n;switch(o=l>.5?h/(2-s-n):h/(s+n),s){case r:a=(t-e)/h+(t<e?6:0);break;case t:a=(e-r)/h+2;break;case e:a=(r-t)/h+4}a/=6}return[Math.round(360*a),Math.round(100*o),Math.round(100*l),i]},ba=(r="1")=>parseFloat(r)/(r.endsWith("%")?100:1),ci=r=>Math.min(Math.round(r),255).toString(16).toUpperCase().padStart(2,"0"),xa=([r,t,e,i=1])=>{let s=Math.round(.3*r+.59*t+.11*e);return[s,s,s,i]},ft=class K{constructor(t){if(m(this,"isUnrecognised",!1),t)if(t instanceof K)this.setSource([...t._source]);else if(Array.isArray(t)){let[e,i,s,n=1]=t;this.setSource([e,i,s,n])}else this.setSource(this._tryParsingColor(t));else this.setSource([0,0,0,1])}_tryParsingColor(t){return(t=t.toLowerCase())in ya&&(t=ya[t]),t==="transparent"?[255,255,255,0]:K.sourceFromHex(t)||K.sourceFromRgb(t)||K.sourceFromHsl(t)||(this.isUnrecognised=!0)&&[0,0,0,1]}getSource(){return this._source}setSource(t){this._source=t}toRgb(){let[t,e,i]=this.getSource();return`rgb(${t},${e},${i})`}toRgba(){return`rgba(${this.getSource().join(",")})`}toHsl(){let[t,e,i]=va(...this.getSource());return`hsl(${t},${e}%,${i}%)`}toHsla(){let[t,e,i,s]=va(...this.getSource());return`hsla(${t},${e}%,${i}%,${s})`}toHex(){return this.toHexa().slice(0,6)}toHexa(){let[t,e,i,s]=this.getSource();return`${ci(t)}${ci(e)}${ci(i)}${ci(Math.round(255*s))}`}getAlpha(){return this.getSource()[3]}setAlpha(t){return this._source[3]=t,this}toGrayscale(){return this.setSource(xa(this.getSource())),this}toBlackWhite(t){let[e,,,i]=xa(this.getSource()),s=e<(t||127)?0:255;return this.setSource([s,s,s,i]),this}overlayWith(t){t instanceof K||(t=new K(t));let e=this.getSource(),i=t.getSource(),[s,n,a]=e.map((o,l)=>Math.round(.5*o+.5*i[l]));return this.setSource([s,n,a,e[3]]),this}static fromRgb(t){return K.fromRgba(t)}static fromRgba(t){return new K(K.sourceFromRgb(t))}static sourceFromRgb(t){let e=Ai(t).match(/^rgba?\(\s?(\d{0,3}(?:\.\d+)?%?)\s?[\s|,]\s?(\d{0,3}(?:\.\d+)?%?)\s?[\s|,]\s?(\d{0,3}(?:\.\d+)?%?)\s?(?:\s?[,/]\s?(\d{0,3}(?:\.\d+)?%?)\s?)?\)$/i);if(e){let[i,s,n]=e.slice(1,4).map(a=>{let o=parseFloat(a);return a.endsWith("%")?Math.round(2.55*o):o});return[i,s,n,ba(e[4])]}}static fromHsl(t){return K.fromHsla(t)}static fromHsla(t){return new K(K.sourceFromHsl(t))}static sourceFromHsl(t){let e=Ai(t).match(/^hsla?\(\s?([+-]?\d{0,3}(?:\.\d+)?(?:deg|turn|rad)?)\s?[\s|,]\s?(\d{0,3}(?:\.\d+)?%?)\s?[\s|,]\s?(\d{0,3}(?:\.\d+)?%?)\s?(?:\s?[,/]\s?(\d*(?:\.\d+)?%?)\s?)?\)$/i);if(!e)return;let i=(K.parseAngletoDegrees(e[1])%360+360)%360/360,s=parseFloat(e[2])/100,n=parseFloat(e[3])/100,a,o,l;if(s===0)a=o=l=n;else{let h=n<=.5?n*(s+1):n+s-n*s,c=2*n-h;a=Ps(c,h,i+1/3),o=Ps(c,h,i),l=Ps(c,h,i-1/3)}return[Math.round(255*a),Math.round(255*o),Math.round(255*l),ba(e[4])]}static fromHex(t){return new K(K.sourceFromHex(t))}static sourceFromHex(t){if(t.match(/^#?(([0-9a-f]){3,4}|([0-9a-f]{2}){3,4})$/i)){let e=t.slice(t.indexOf("#")+1),i;i=e.length<=4?e.split("").map(l=>l+l):e.match(/.{2}/g);let[s,n,a,o=255]=i.map(l=>parseInt(l,16));return[s,n,a,o/255]}}static parseAngletoDegrees(t){let e=t.toLowerCase(),i=parseFloat(e);return e.includes("rad")?Yt(i):e.includes("turn")?360*i:i}},jh=r=>{let t=["instantiated_by_use","style","id","class"];switch(r){case"linearGradient":return t.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);case"radialGradient":return t.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);case"stop":return t.concat(["offset","stop-color","stop-opacity"])}return t},rt=(r,t=16)=>{let e=/\D{0,2}$/.exec(r),i=parseFloat(r),s=L.DPI;switch(e?.[0]){case"mm":return i*s/25.4;case"cm":return i*s/2.54;case"in":return i*s;case"pt":return i*s/72;case"pc":return i*s/72*12;case"em":return i*t;default:return i}},An=r=>{let[t,e]=r.trim().split(" "),[i,s]=(n=t)&&n!=="none"?[n.slice(1,4),n.slice(5,8)]:n==="none"?[n,n]:["Mid","Mid"];var n;return{meetOrSlice:e||"meet",alignX:i,alignY:s}},Wr=(r,t,e=!0)=>{let i,s;if(t)if(t.toLive)i=`url(#SVGID_${P(t.id)})`;else{let n=String(t);if(zi(n)){let a=new ft(n),o=a.getAlpha();i=a.toRgb(),o!==1&&(s=o.toString())}else i=new ft("black").toRgb()}else i="none";return e?`${r}: ${i}; ${s?`${r}-opacity: ${s}; `:""}`:`${r}="${i}" ${s?`${r}-opacity="${s}" `:""}`},vo=class{getSvgStyles(r){let t=this.fillRule==null?"nonzero":he(this.fillRule),e=this.strokeWidth==null?"0":le(this.strokeWidth),i=this.strokeDashArray==null?Ii:this.strokeDashArray.every(d=>Number.isFinite(Number(d)))?this.strokeDashArray.join(" "):"",s=this.strokeDashOffset==null?"0":le(this.strokeDashOffset),n=this.strokeLineCap==null?"butt":he(this.strokeLineCap),a=this.strokeLineJoin==null?"miter":he(this.strokeLineJoin),o=this.strokeMiterLimit==null?"4":le(this.strokeMiterLimit),l=this.opacity==null?"1":le(this.opacity),h=this.visible?"":" visibility: hidden;",c=r?"":this.getSvgFilter(),u=Wr(at,this.fill);return[Wr(Dt,this.stroke),e?`stroke-width: ${e}; `:"",i?`stroke-dasharray: ${i}; `:"",n?`stroke-linecap: ${n}; `:"",s?`stroke-dashoffset: ${s}; `:"",a?`stroke-linejoin: ${a}; `:"",o?`stroke-miterlimit: ${o}; `:"",u,t?`fill-rule: ${t}; `:"",l?`opacity: ${l};`:"",c,h].map(d=>P(d)).join("")}getSvgFilter(){return this.shadow?`filter: url(#SVGID_${P(this.shadow.id)});`:""}getSvgCommons(){return[this.id?`id="${P(String(this.id))}" `:"",this.clipPath?`clip-path="url(#${P(this.clipPath.clipPathId)})" `:""].join("")}getSvgTransform(r,t=""){return`transform="${Re(r?this.calcTransformMatrix():this.calcOwnMatrix())}${t}" `}_toSVG(r){return[""]}toSVG(r){return this._createBaseSVGMarkup(this._toSVG(r),{reviver:r})}toClipPathSVG(r){return" "+this._createBaseClipPathSVGMarkup(this._toSVG(r),{reviver:r})}_createBaseClipPathSVGMarkup(r,{reviver:t,additionalTransform:e=""}={}){let i=[this.getSvgTransform(!0,e),this.getSvgCommons()].join(""),s=r.indexOf("COMMON_PARTS");return r[s]=i,t?t(r.join("")):r.join("")}_createBaseSVGMarkup(r,{noStyle:t,reviver:e,withShadow:i,additionalTransform:s}={}){let n=t?"":`style="${this.getSvgStyles()}" `,a=i?`style="${this.getSvgFilter()}" `:"",o=this.clipPath,l=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",h=o&&o.absolutePositioned,c=this.stroke,u=this.fill,d=this.shadow,g=[],f=r.indexOf("COMMON_PARTS"),p;return o&&(o.clipPathId=`CLIPPATH_${qt()}`,p=`<clipPath id="${o.clipPathId}" >
|
|
21
|
+
`)}loadFromJSON(t,e,{signal:i}={}){if(!t)return Promise.reject(new Pt("`json` is undefined"));let{objects:s=[],...n}=typeof t=="string"?JSON.parse(t):t,{backgroundImage:a,background:o,overlayImage:l,overlay:h,clipPath:c}=n,u=this.renderOnAddRemove;return this.renderOnAddRemove=!1,Promise.all([Re(s,{reviver:e,signal:i}),Nr({backgroundImage:a,backgroundColor:o,overlayImage:l,overlayColor:h,clipPath:c},{signal:i})]).then(([d,g])=>(this.clear(),this.add(...d),this.set(n),this.set(g),this.renderOnAddRemove=u,this))}clone(t){let e=this.toObject(t);return this.cloneWithoutData().loadFromJSON(e)}cloneWithoutData(){let t=gt(this);return new this.constructor(t)}toDataURL(t={}){let{format:e="png",quality:i=1,multiplier:s=1,enableRetinaScaling:n=!1}=t,a=s*(n?this.getRetinaScaling():1);return yn(this.toCanvasElement(a,t),e,i)}toBlob(t={}){let{format:e="png",quality:i=1,multiplier:s=1,enableRetinaScaling:n=!1}=t,a=s*(n?this.getRetinaScaling():1);return vn(this.toCanvasElement(a,t),e,i)}toCanvasElement(t=1,{width:e,height:i,left:s,top:n,filter:a}={}){let o=(e||this.width)*t,l=(i||this.height)*t,h=this.getZoom(),c=this.width,u=this.height,d=this.skipControlsDrawing,g=h*t,f=this.viewportTransform,p=[g,0,0,g,(f[4]-(s||0))*t,(f[5]-(n||0))*t],y=this.enableRetinaScaling,b=gt({width:o,height:l}),x=a?this._objects.filter(C=>a(C)):this._objects;return this.enableRetinaScaling=!1,this.viewportTransform=p,this.width=o,this.height=l,this.skipControlsDrawing=!0,this.calcViewportBoundaries(),this.renderCanvas(b.getContext("2d"),x),this.viewportTransform=f,this.width=c,this.height=u,this.calcViewportBoundaries(),this.enableRetinaScaling=y,this.skipControlsDrawing=d,b}dispose(){return!this.disposed&&this.elements.cleanupDOM({width:this.width,height:this.height}),Oi.cancelByCanvas(this),this.disposed=!0,new Promise((t,e)=>{let i=()=>{this.destroy(),t(!0)};i.kill=e,this.__cleanupTask&&this.__cleanupTask.kill("aborted"),this.destroyed?t(!1):this.nextRenderHandle?this.__cleanupTask=i:i()})}destroy(){this.destroyed=!0,this.cancelRequestedRender(),this.forEachObject(t=>t.dispose()),this._objects=[],this.backgroundImage&&this.backgroundImage.dispose(),this.backgroundImage=void 0,this.overlayImage&&this.overlayImage.dispose(),this.overlayImage=void 0,this.elements.dispose()}toString(){return`#<Canvas (${this.complexity()}): { objects: ${this._objects.length} }>`}};m(Ge,"ownDefaults",Sh);var Mh=["touchstart","touchmove","touchend"],ho=r=>{let t=so(r.target),e=(function(i){let s=i.changedTouches;return s&&s[0]?s[0]:i})(r);return new v(e.clientX+t.left,e.clientY+t.top)},Mi=r=>Mh.includes(r.type)||r.pointerType==="touch",pa=r=>{r.preventDefault(),r.stopPropagation()},Et=r=>{let t=0,e=0,i=0,s=0;for(let n=0,a=r.length;n<a;n++){let{x:o,y:l}=r[n];(o>i||!n)&&(i=o),(o<t||!n)&&(t=o),(l>s||!n)&&(s=l),(l<e||!n)&&(e=l)}return{left:t,top:e,width:i-t,height:s-e}},Ph=(r,t)=>{Xe(r,Y(lt(t),r.calcOwnMatrix()))},co=(r,t)=>Xe(r,Y(t,r.calcOwnMatrix())),Xe=(r,t)=>{let{translateX:e,translateY:i,scaleX:s,scaleY:n,...a}=fe(t),o=new v(e,i);r.flipX=!1,r.flipY=!1,Object.assign(r,a),r.set({scaleX:s,scaleY:n}),r.setPositionByOrigin(o,F,F)},uo=r=>{r.scaleX=1,r.scaleY=1,r.skewX=0,r.skewY=0,r.flipX=!1,r.flipY=!1,r.rotate(0)},_n=r=>({scaleX:r.scaleX,scaleY:r.scaleY,skewX:r.skewX,skewY:r.skewY,angle:r.angle,left:r.left,flipX:r.flipX,flipY:r.flipY,top:r.top}),$i=(r,t,e)=>{let i=r/2,s=t/2,n=Et([new v(-i,-s),new v(i,-s),new v(-i,s),new v(i,s)].map(a=>a.transform(e)));return new v(n.width,n.height)},Ur=(r=nt,t=nt)=>Y(lt(t),r),$t=(r,t=nt,e=nt)=>r.transform(Ur(t,e)),go=(r,t=nt,e=nt)=>r.transform(Ur(t,e),!0),Tn=(r,t,e)=>{let i=Ur(t,e);return Xe(r,Y(i,r.calcOwnMatrix())),i},Eh={left:-.5,top:-.5,center:0,bottom:.5,right:.5},it=r=>typeof r=="string"?Eh[r]:r-.5,Ah=new v(1,0),fo=new v,kn=(r,t)=>r.rotate(t),Wr=(r,t)=>new v(t).subtract(r),Pi=r=>r.distanceFrom(fo),Ei=(r,t)=>Math.atan2(Ie(r,t),po(r,t)),On=r=>Ei(Ah,r),Wi=r=>r.eq(fo)?r:r.scalarDivide(Pi(r)),Mn=(r,t=!0)=>Wi(new v(-r.y,r.x).scalarMultiply(t?1:-1)),Ie=(r,t)=>r.x*t.y-r.y*t.x,po=(r,t)=>r.x*t.x+r.y*t.y,Ws=(r,t,e)=>{if(r.eq(t)||r.eq(e))return!0;let i=Ie(t,e),s=Ie(t,r),n=Ie(e,r);return i>=0?s>=0&&n<=0:!(s<=0&&n>=0)},Pn="not-allowed";function mo(r){return it(r.originX)===it("center")&&it(r.originY)===it("center")}function ma(r){return .5-it(r)}var St=(r,t)=>r[t],En=(r,t,e,i)=>({e:r,transform:t,pointer:new v(e,i)});function yo(r,t,e){let i=e,s=On(Wr($t(r.getCenterPoint(),r.canvas.viewportTransform,void 0),i))+_t;return Math.round(s%_t/bh)}function Hi({target:r,corner:t},e,i,s,n){var a;let o=r.controls[t],l=((a=r.canvas)==null?void 0:a.getZoom())||1,h=r.padding/l,c=(function(u,d,g,f){let p=u.getRelativeCenterPoint(),y=g!==void 0&&f!==void 0?u.translateToGivenOrigin(p,F,F,g,f):new v(u.left,u.top);return(u.angle?d.rotate(-X(u.angle),p):d).subtract(y)})(r,new v(s,n),e,i);return c.x>=h&&(c.x-=h),c.x<=-h&&(c.x+=h),c.y>=h&&(c.y-=h),c.y<=h&&(c.y+=h),c.x-=o.offsetX,c.y-=o.offsetY,c}var Dh=new RegExp(String.raw`[\0-\x1F\x7F;<>\\]|\/\*|\*\/|url\s*\(|expression\s*\(|(?:java|vb)script\s*:|data\s*:|@import\b`,"iu"),zi=r=>typeof r=="string"&&r.trim().length>0&&!Dh.test(r),le=(r,t="")=>{let e=Number(r);return Number.isFinite(e)?`${e}`:t},he=(r,t="")=>typeof r=="string"&&zi(r)?r:t,Ai=r=>r.replace(/\s+/g," "),ya={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#0FF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000",blanchedalmond:"#FFEBCD",blue:"#00F",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#0FF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",darkgreen:"#006400",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#F0F",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",lightgreen:"#90EE90",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#789",lightslategrey:"#789",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#0F0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#F0F",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#639",red:"#F00",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFF",whitesmoke:"#F5F5F5",yellow:"#FF0",yellowgreen:"#9ACD32"},Ps=(r,t,e)=>(e<0&&(e+=1),e>1&&--e,e<1/6?r+6*(t-r)*e:e<.5?t:e<2/3?r+(t-r)*(2/3-e)*6:r),va=(r,t,e,i)=>{r/=255,t/=255,e/=255;let s=Math.max(r,t,e),n=Math.min(r,t,e),a,o,l=(s+n)/2;if(s===n)a=o=0;else{let h=s-n;switch(o=l>.5?h/(2-s-n):h/(s+n),s){case r:a=(t-e)/h+(t<e?6:0);break;case t:a=(e-r)/h+2;break;case e:a=(r-t)/h+4}a/=6}return[Math.round(360*a),Math.round(100*o),Math.round(100*l),i]},ba=(r="1")=>parseFloat(r)/(r.endsWith("%")?100:1),ci=r=>Math.min(Math.round(r),255).toString(16).toUpperCase().padStart(2,"0"),xa=([r,t,e,i=1])=>{let s=Math.round(.3*r+.59*t+.11*e);return[s,s,s,i]},ft=class K{constructor(t){if(m(this,"isUnrecognised",!1),t)if(t instanceof K)this.setSource([...t._source]);else if(Array.isArray(t)){let[e,i,s,n=1]=t;this.setSource([e,i,s,n])}else this.setSource(this._tryParsingColor(t));else this.setSource([0,0,0,1])}_tryParsingColor(t){return(t=t.toLowerCase())in ya&&(t=ya[t]),t==="transparent"?[255,255,255,0]:K.sourceFromHex(t)||K.sourceFromRgb(t)||K.sourceFromHsl(t)||(this.isUnrecognised=!0)&&[0,0,0,1]}getSource(){return this._source}setSource(t){this._source=t}toRgb(){let[t,e,i]=this.getSource();return`rgb(${t},${e},${i})`}toRgba(){return`rgba(${this.getSource().join(",")})`}toHsl(){let[t,e,i]=va(...this.getSource());return`hsl(${t},${e}%,${i}%)`}toHsla(){let[t,e,i,s]=va(...this.getSource());return`hsla(${t},${e}%,${i}%,${s})`}toHex(){return this.toHexa().slice(0,6)}toHexa(){let[t,e,i,s]=this.getSource();return`${ci(t)}${ci(e)}${ci(i)}${ci(Math.round(255*s))}`}getAlpha(){return this.getSource()[3]}setAlpha(t){return this._source[3]=t,this}toGrayscale(){return this.setSource(xa(this.getSource())),this}toBlackWhite(t){let[e,,,i]=xa(this.getSource()),s=e<(t||127)?0:255;return this.setSource([s,s,s,i]),this}overlayWith(t){t instanceof K||(t=new K(t));let e=this.getSource(),i=t.getSource(),[s,n,a]=e.map((o,l)=>Math.round(.5*o+.5*i[l]));return this.setSource([s,n,a,e[3]]),this}static fromRgb(t){return K.fromRgba(t)}static fromRgba(t){return new K(K.sourceFromRgb(t))}static sourceFromRgb(t){let e=Ai(t).match(/^rgba?\(\s?(\d{0,3}(?:\.\d+)?%?)\s?[\s|,]\s?(\d{0,3}(?:\.\d+)?%?)\s?[\s|,]\s?(\d{0,3}(?:\.\d+)?%?)\s?(?:\s?[,/]\s?(\d{0,3}(?:\.\d+)?%?)\s?)?\)$/i);if(e){let[i,s,n]=e.slice(1,4).map(a=>{let o=parseFloat(a);return a.endsWith("%")?Math.round(2.55*o):o});return[i,s,n,ba(e[4])]}}static fromHsl(t){return K.fromHsla(t)}static fromHsla(t){return new K(K.sourceFromHsl(t))}static sourceFromHsl(t){let e=Ai(t).match(/^hsla?\(\s?([+-]?\d{0,3}(?:\.\d+)?(?:deg|turn|rad)?)\s?[\s|,]\s?(\d{0,3}(?:\.\d+)?%?)\s?[\s|,]\s?(\d{0,3}(?:\.\d+)?%?)\s?(?:\s?[,/]\s?(\d*(?:\.\d+)?%?)\s?)?\)$/i);if(!e)return;let i=(K.parseAngletoDegrees(e[1])%360+360)%360/360,s=parseFloat(e[2])/100,n=parseFloat(e[3])/100,a,o,l;if(s===0)a=o=l=n;else{let h=n<=.5?n*(s+1):n+s-n*s,c=2*n-h;a=Ps(c,h,i+1/3),o=Ps(c,h,i),l=Ps(c,h,i-1/3)}return[Math.round(255*a),Math.round(255*o),Math.round(255*l),ba(e[4])]}static fromHex(t){return new K(K.sourceFromHex(t))}static sourceFromHex(t){if(t.match(/^#?(([0-9a-f]){3,4}|([0-9a-f]{2}){3,4})$/i)){let e=t.slice(t.indexOf("#")+1),i;i=e.length<=4?e.split("").map(l=>l+l):e.match(/.{2}/g);let[s,n,a,o=255]=i.map(l=>parseInt(l,16));return[s,n,a,o/255]}}static parseAngletoDegrees(t){let e=t.toLowerCase(),i=parseFloat(e);return e.includes("rad")?Yt(i):e.includes("turn")?360*i:i}},jh=r=>{let t=["instantiated_by_use","style","id","class"];switch(r){case"linearGradient":return t.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);case"radialGradient":return t.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);case"stop":return t.concat(["offset","stop-color","stop-opacity"])}return t},rt=(r,t=16)=>{let e=/\D{0,2}$/.exec(r),i=parseFloat(r),s=L.DPI;switch(e?.[0]){case"mm":return i*s/25.4;case"cm":return i*s/2.54;case"in":return i*s;case"pt":return i*s/72;case"pc":return i*s/72*12;case"em":return i*t;default:return i}},An=r=>{let[t,e]=r.trim().split(" "),[i,s]=(n=t)&&n!=="none"?[n.slice(1,4),n.slice(5,8)]:n==="none"?[n,n]:["Mid","Mid"];var n;return{meetOrSlice:e||"meet",alignX:i,alignY:s}},Hr=(r,t,e=!0)=>{let i,s;if(t)if(t.toLive)i=`url(#SVGID_${P(t.id)})`;else{let n=String(t);if(zi(n)){let a=new ft(n),o=a.getAlpha();i=a.toRgb(),o!==1&&(s=o.toString())}else i=new ft("black").toRgb()}else i="none";return e?`${r}: ${i}; ${s?`${r}-opacity: ${s}; `:""}`:`${r}="${i}" ${s?`${r}-opacity="${s}" `:""}`},vo=class{getSvgStyles(r){let t=this.fillRule==null?"nonzero":he(this.fillRule),e=this.strokeWidth==null?"0":le(this.strokeWidth),i=this.strokeDashArray==null?Ii:this.strokeDashArray.every(d=>Number.isFinite(Number(d)))?this.strokeDashArray.join(" "):"",s=this.strokeDashOffset==null?"0":le(this.strokeDashOffset),n=this.strokeLineCap==null?"butt":he(this.strokeLineCap),a=this.strokeLineJoin==null?"miter":he(this.strokeLineJoin),o=this.strokeMiterLimit==null?"4":le(this.strokeMiterLimit),l=this.opacity==null?"1":le(this.opacity),h=this.visible?"":" visibility: hidden;",c=r?"":this.getSvgFilter(),u=Hr(at,this.fill);return[Hr(Dt,this.stroke),e?`stroke-width: ${e}; `:"",i?`stroke-dasharray: ${i}; `:"",n?`stroke-linecap: ${n}; `:"",s?`stroke-dashoffset: ${s}; `:"",a?`stroke-linejoin: ${a}; `:"",o?`stroke-miterlimit: ${o}; `:"",u,t?`fill-rule: ${t}; `:"",l?`opacity: ${l};`:"",c,h].map(d=>P(d)).join("")}getSvgFilter(){return this.shadow?`filter: url(#SVGID_${P(this.shadow.id)});`:""}getSvgCommons(){return[this.id?`id="${P(String(this.id))}" `:"",this.clipPath?`clip-path="url(#${P(this.clipPath.clipPathId)})" `:""].join("")}getSvgTransform(r,t=""){return`transform="${Be(r?this.calcTransformMatrix():this.calcOwnMatrix())}${t}" `}_toSVG(r){return[""]}toSVG(r){return this._createBaseSVGMarkup(this._toSVG(r),{reviver:r})}toClipPathSVG(r){return" "+this._createBaseClipPathSVGMarkup(this._toSVG(r),{reviver:r})}_createBaseClipPathSVGMarkup(r,{reviver:t,additionalTransform:e=""}={}){let i=[this.getSvgTransform(!0,e),this.getSvgCommons()].join(""),s=r.indexOf("COMMON_PARTS");return r[s]=i,t?t(r.join("")):r.join("")}_createBaseSVGMarkup(r,{noStyle:t,reviver:e,withShadow:i,additionalTransform:s}={}){let n=t?"":`style="${this.getSvgStyles()}" `,a=i?`style="${this.getSvgFilter()}" `:"",o=this.clipPath,l=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",h=o&&o.absolutePositioned,c=this.stroke,u=this.fill,d=this.shadow,g=[],f=r.indexOf("COMMON_PARTS"),p;return o&&(o.clipPathId=`CLIPPATH_${Kt()}`,p=`<clipPath id="${o.clipPathId}" >
|
|
22
22
|
${o.toClipPathSVG(e)}</clipPath>
|
|
23
23
|
`),h&&g.push("<g ",a,this.getSvgCommons(),` >
|
|
24
24
|
`),g.push("<g ",this.getSvgTransform(!1),h?"":a+this.getSvgCommons(),` >
|
|
25
25
|
`),r[f]=[n,l,t?"":this.addPaintOrder()," ",s?`transform="${s}" `:""].join(""),yt(u)&&g.push(u.toSVG(this)),yt(c)&&g.push(c.toSVG(this)),d&&g.push(d.toSVG(this)),o&&g.push(p),g.push(r.join("")),g.push(`</g>
|
|
26
26
|
`),h&&g.push(`</g>
|
|
27
|
-
`),e?e(g.join("")):g.join("")}addPaintOrder(){return this.paintFirst==="fill"?"":` paint-order="${P(this.paintFirst)}" `}};function Gi(r){return RegExp("^("+r.join("|")+")\\b","i")}var
|
|
27
|
+
`),e?e(g.join("")):g.join("")}addPaintOrder(){return this.paintFirst==="fill"?"":` paint-order="${P(this.paintFirst)}" `}};function Gi(r){return RegExp("^("+r.join("|")+")\\b","i")}var Ye="textDecorationThickness",Vi="textDecorationColor",bo=["fontSize","fontWeight","fontFamily","fontStyle"],xo=["underline","overline","linethrough"],Co=[...bo,"lineHeight","text","charSpacing","textAlign","styles","path","pathStartOffset","pathSide","pathAlign"],wo=[...Co,...xo,"textBackgroundColor","direction",Ye,Vi],Lh=[...bo,...xo,Dt,"strokeWidth",at,"deltaY","textBackgroundColor",Ye,Vi],Fh={_reNewline:pn,_reSpacesAndTabs:/[ \t\r]/g,_reSpaceAndTab:/[ \t\r]/,_reWords:/\S+/g,fontSize:40,fontWeight:ua,fontFamily:"Times New Roman",underline:!1,overline:!1,linethrough:!1,textAlign:z,fontStyle:ua,lineHeight:1.16,textBackgroundColor:"",stroke:null,shadow:null,path:void 0,pathStartOffset:0,pathSide:z,pathAlign:"baseline",charSpacing:0,deltaY:0,direction:"ltr",CACHE_FONT_SIZE:400,MIN_TEXT_WIDTH:2,superscript:{size:.6,baseline:-.35},subscript:{size:.6,baseline:.11},_fontSizeFraction:.222,offsets:{underline:.1,linethrough:-.28167,overline:-.81333},_fontSizeMult:1.13,[Ye]:66.667},Dn="justify",Ct=String.raw`[-+]?(?:\d*\.\d+|\d+\.?)(?:[eE][-+]?\d+)?`,Es=String.raw`(?:\s*,?\s+|\s*,\s*)`,Hs="http://www.w3.org/2000/svg",Ih=RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+Ct+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+Ct+"))?\\s+(.*)"),Rh={cx:z,x:z,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","text-decoration-thickness":Ye,"text-decoration-color":Vi},Ca="font-size",wa="clip-path",Bh=Gi(["path","circle","polygon","polyline","ellipse","rect","line","image","text"]),Xh=Gi(["symbol","image","marker","pattern","view","svg"]),Sa=Gi(["symbol","g","a","svg","clipPath","defs"]),_a=new RegExp(String.raw`^\s*(${Ct})${Es}(${Ct})${Es}(${Ct})${Es}(${Ct})\s*$`),Ta="(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?",ka=RegExp("(?:\\s|^)"+Ta+Ta+"("+Ct+"?(?:px)?)?(?:\\s?|$)(?:$|\\s)"),de=class Ci{constructor(t={}){let e=typeof t=="string"?Ci.parseShadow(t):t;Object.assign(this,Ci.ownDefaults,e),this.id=Kt()}static parseShadow(t){let e=t.trim(),[,i=0,s=0,n=0]=(ka.exec(e)||[]).map(a=>parseFloat(a)||0);return{color:(e.replace(ka,"")||"rgb(0,0,0)").trim(),offsetX:i,offsetY:s,blur:n}}toString(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")}toSVG(t){let e=kn(new v(this.offsetX,this.offsetY),X(-t.angle)),i=L.NUM_FRACTION_DIGITS,s=new ft(this.color),n=40,a=40;return t.width&&t.height&&(n=100*R((Math.abs(e.x)+this.blur)/t.width,i)+20,a=100*R((Math.abs(e.y)+this.blur)/t.height,i)+20),t.flipX&&(e.x*=-1),t.flipY&&(e.y*=-1),`<filter id="SVGID_${P(this.id)}" y="-${a}%" height="${100+2*a}%" x="-${n}%" width="${100+2*n}%" >
|
|
28
28
|
<feGaussianBlur in="SourceAlpha" stdDeviation="${R(this.blur?this.blur/2:0,i)}"></feGaussianBlur>
|
|
29
29
|
<feOffset dx="${R(e.x,i)}" dy="${R(e.y,i)}" result="oBlur" ></feOffset>
|
|
30
30
|
<feFlood flood-color="${s.toRgb()}" flood-opacity="${s.getAlpha()}"/>
|
|
@@ -34,32 +34,32 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
34
34
|
<feMergeNode in="SourceGraphic"></feMergeNode>
|
|
35
35
|
</feMerge>
|
|
36
36
|
</filter>
|
|
37
|
-
`}toObject(){let t={color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling,type:this.constructor.type},e=Ci.ownDefaults;return this.includeDefaultValues?t:Sn(t,(i,s)=>i!==e[s])}static async fromObject(t){return new this(t)}};m(de,"ownDefaults",{color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1}),m(de,"type","shadow"),_.setClass(de,"shadow");var pe=(r,t,e)=>Math.max(r,Math.min(t,e)),Yh=["top",z,Jt,Zt,"flipX","flipY","originX","originY","angle","opacity","globalCompositeOperation","shadow","visible",$e,We],Wt=[at,Dt,"strokeWidth","strokeDashArray","width","height","paintFirst","strokeUniform","strokeLineCap","strokeDashOffset","strokeLineJoin","strokeMiterLimit","backgroundColor","clipPath"],$h={top:0,left:0,width:0,height:0,angle:0,flipX:!1,flipY:!1,scaleX:1,scaleY:1,minScaleLimit:0,skewX:0,skewY:0,originX:F,originY:F,strokeWidth:1,strokeUniform:!1,padding:0,opacity:1,paintFirst:at,fill:"rgb(0,0,0)",fillRule:"nonzero",stroke:null,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,globalCompositeOperation:"source-over",backgroundColor:"",shadow:null,visible:!0,includeDefaultValues:!0,excludeFromExport:!1,objectCaching:!0,clipPath:void 0,inverted:!1,absolutePositioned:!1,centeredRotation:!0,centeredScaling:!1,dirty:!0},Wh=zr({defaultEasing:()=>_o,easeInBack:()=>cc,easeInBounce:()=>To,easeInCirc:()=>sc,easeInCubic:()=>Hh,easeInElastic:()=>oc,easeInExpo:()=>ec,easeInOutBack:()=>dc,easeInOutBounce:()=>gc,easeInOutCirc:()=>ac,easeInOutCubic:()=>Gh,easeInOutElastic:()=>hc,easeInOutExpo:()=>ic,easeInOutQuad:()=>mc,easeInOutQuart:()=>Uh,easeInOutQuint:()=>Jh,easeInOutSine:()=>tc,easeInQuad:()=>fc,easeInQuart:()=>Vh,easeInQuint:()=>qh,easeInSine:()=>Zh,easeOutBack:()=>uc,easeOutBounce:()=>Ln,easeOutCirc:()=>nc,easeOutCubic:()=>zh,easeOutElastic:()=>lc,easeOutExpo:()=>rc,easeOutQuad:()=>pc,easeOutQuart:()=>Nh,easeOutQuint:()=>Kh,easeOutSine:()=>Qh}),jn=(r,t,e,i)=>(r<Math.abs(t)?(r=t,i=e/4):i=t===0&&r===0?e/_t*Math.asin(1):e/_t*Math.asin(t/r),{a:r,c:t,p:e,s:i}),So=(r,t,e,i,s)=>r*2**(10*--i)*Math.sin((i*s-t)*_t/e),_o=(r,t,e,i)=>-e*Math.cos(r/i*Kt)+e+t,Hh=(r,t,e,i)=>e*(r/i)**3+t,zh=(r,t,e,i)=>e*((r/i-1)**3+1)+t,Gh=(r,t,e,i)=>(r/=i/2)<1?e/2*r**3+t:e/2*((r-2)**3+2)+t,Vh=(r,t,e,i)=>e*(r/=i)*r**3+t,Nh=(r,t,e,i)=>-e*((r=r/i-1)*r**3-1)+t,Uh=(r,t,e,i)=>(r/=i/2)<1?e/2*r**4+t:-e/2*((r-=2)*r**3-2)+t,qh=(r,t,e,i)=>e*(r/i)**5+t,Kh=(r,t,e,i)=>e*((r/i-1)**5+1)+t,Jh=(r,t,e,i)=>(r/=i/2)<1?e/2*r**5+t:e/2*((r-2)**5+2)+t,Zh=(r,t,e,i)=>-e*Math.cos(r/i*Kt)+e+t,Qh=(r,t,e,i)=>e*Math.sin(r/i*Kt)+t,tc=(r,t,e,i)=>-e/2*(Math.cos(Math.PI*r/i)-1)+t,ec=(r,t,e,i)=>r===0?t:e*2**(10*(r/i-1))+t,rc=(r,t,e,i)=>r===i?t+e:e*-(2**(-10*r/i)+1)+t,ic=(r,t,e,i)=>r===0?t:r===i?t+e:(r/=i/2)<1?e/2*2**(10*(r-1))+t:e/2*-(2**(-10*(r-1))+2)+t,sc=(r,t,e,i)=>-e*(Math.sqrt(1-(r/=i)*r)-1)+t,nc=(r,t,e,i)=>e*Math.sqrt(1-(r=r/i-1)*r)+t,ac=(r,t,e,i)=>(r/=i/2)<1?-e/2*(Math.sqrt(1-r**2)-1)+t:e/2*(Math.sqrt(1-(r-=2)*r)+1)+t,oc=(r,t,e,i)=>{let s=e,n=0;if(r===0)return t;if((r/=i)===1)return t+e;n||(n=.3*i);let{a,s:o,p:l}=jn(s,e,n,1.70158);return-So(a,o,l,r,i)+t},lc=(r,t,e,i)=>{let s=e,n=0;if(r===0)return t;if((r/=i)===1)return t+e;n||(n=.3*i);let{a,s:o,p:l,c:h}=jn(s,e,n,1.70158);return a*2**(-10*r)*Math.sin((r*i-o)*_t/l)+h+t},hc=(r,t,e,i)=>{let s=e,n=0;if(r===0)return t;if((r/=i/2)==2)return t+e;n||(n=.3*1.5*i);let{a,s:o,p:l,c:h}=jn(s,e,n,1.70158);return r<1?-.5*So(a,o,l,r,i)+t:a*2**(-10*--r)*Math.sin((r*i-o)*_t/l)*.5+h+t},cc=(r,t,e,i,s=1.70158)=>e*(r/=i)*r*((s+1)*r-s)+t,uc=(r,t,e,i,s=1.70158)=>e*((r=r/i-1)*r*((s+1)*r+s)+1)+t,dc=(r,t,e,i,s=1.70158)=>(r/=i/2)<1?e/2*(r*r*((1+(s*=1.525))*r-s))+t:e/2*((r-=2)*r*((1+(s*=1.525))*r+s)+2)+t,Ln=(r,t,e,i)=>(r/=i)<1/2.75?e*(7.5625*r*r)+t:r<2/2.75?e*(7.5625*(r-=1.5/2.75)*r+.75)+t:r<2.5/2.75?e*(7.5625*(r-=2.25/2.75)*r+.9375)+t:e*(7.5625*(r-=2.625/2.75)*r+.984375)+t,To=(r,t,e,i)=>e-Ln(i-r,0,e,i)+t,gc=(r,t,e,i)=>r<i/2?.5*To(2*r,0,e,i)+t:.5*Ln(2*r-i,0,e,i)+.5*e+t,fc=(r,t,e,i)=>e*(r/=i)*r+t,pc=(r,t,e,i)=>-e*(r/=i)*(r-2)+t,mc=(r,t,e,i)=>(r/=i/2)<1?e/2*r**2+t:-e/2*(--r*(r-2)-1)+t,yc=()=>!1,Fn=class{constructor({startValue:r,byValue:t,duration:e=500,delay:i=0,easing:s=_o,onStart:n=bi,onChange:a=bi,onComplete:o=bi,abort:l=yc,target:h}){m(this,"_state","pending"),m(this,"durationProgress",0),m(this,"valueProgress",0),this.tick=this.tick.bind(this),this.duration=e,this.delay=i,this.easing=s,this._onStart=n,this._onChange=a,this._onComplete=o,this._abort=l,this.target=h,this.startValue=r,this.byValue=t,this.value=this.startValue,this.endValue=Object.freeze(this.calculate(this.duration).value)}get state(){return this._state}isDone(){return this._state==="aborted"||this._state==="completed"}start(){let r=t=>{this._state==="pending"&&(this.startTime=t||+new Date,this._state="running",this._onStart(),this.tick(this.startTime))};this.register(),this.delay>0?this.timeout=ge().setTimeout(()=>Rr(r),this.delay):Rr(r)}tick(r){let t=(r||+new Date)-this.startTime,e=Math.min(t,this.duration);this.durationProgress=e/this.duration;let{value:i,valueProgress:s}=this.calculate(e);this.value=Object.freeze(i),this.valueProgress=s,this._state!=="aborted"&&(this._abort(this.value,this.valueProgress,this.durationProgress)?(this._state="aborted",this.unregister()):t>=this.duration?(this.durationProgress=this.valueProgress=1,this._onChange(this.endValue,this.valueProgress,this.durationProgress),this._state="completed",this._onComplete(this.endValue,this.valueProgress,this.durationProgress),this.unregister(),this.timeout=null):(this._onChange(this.value,this.valueProgress,this.durationProgress),Rr(this.tick)))}register(){Oi.push(this)}unregister(){Oi.remove(this)}abort(){this._state="aborted",this.unregister(),this.timeout&&ge().clearTimeout(this.timeout)}},vc=class extends Fn{constructor({startValue:r=0,endValue:t=100,...e}){super({...e,startValue:r,byValue:t-r})}calculate(r){let t=this.easing(r,this.startValue,this.byValue,this.duration);return{value:t,valueProgress:Math.abs((t-this.startValue)/this.byValue)}}},bc=class extends Fn{constructor({startValue:r=[0],endValue:t=[100],...e}){super({...e,startValue:r,byValue:t.map((i,s)=>i-r[s])})}calculate(r){let t=this.startValue.map((e,i)=>this.easing(r,e,this.byValue[i],this.duration,i));return{value:t,valueProgress:Math.abs((t[0]-this.startValue[0])/this.byValue[0])}}},xc=(r,t,e,i)=>t+e*(1-Math.cos(r/i*Kt)),As=r=>r&&((t,e,i)=>r(new ft(t).toRgba(),e,i)),Cc=class extends Fn{constructor({startValue:r,endValue:t,easing:e=xc,onChange:i,onComplete:s,abort:n,...a}){let o=new ft(r).getSource(),l=new ft(t).getSource();super({...a,startValue:o,byValue:l.map((h,c)=>h-o[c]),easing:e,onChange:As(i),onComplete:As(s),abort:As(n)})}calculate(r){let[t,e,i,s]=this.startValue.map((a,o)=>this.easing(r,a,this.byValue[o],this.duration,o)),n=[...[t,e,i].map(Math.round),pe(0,s,1)];return{value:n,valueProgress:n.map((a,o)=>this.byValue[o]===0?0:Math.abs((a-this.startValue[o])/this.byValue[o])).find(a=>a!==0)||0}}};function In(r){let t=(e=>Array.isArray(e.startValue)||Array.isArray(e.endValue))(r)?new bc(r):new vc(r);return t.start(),t}function ko(r){let t=new Cc(r);return t.start(),t}var Xr=class V{constructor(t){this.status=t,this.points=[]}includes(t){return this.points.some(e=>e.eq(t))}append(...t){return this.points=this.points.concat(t.filter(e=>!this.includes(e))),this}static isPointContained(t,e,i,s=!1){if(e.eq(i))return t.eq(e);if(e.x===i.x)return t.x===e.x&&(s||t.y>=Math.min(e.y,i.y)&&t.y<=Math.max(e.y,i.y));if(e.y===i.y)return t.y===e.y&&(s||t.x>=Math.min(e.x,i.x)&&t.x<=Math.max(e.x,i.x));{let n=$r(e,i),a=$r(e,t).divide(n);return s?Math.abs(a.x)===Math.abs(a.y):a.x===a.y&&a.x>=0&&a.x<=1}}static isPointInPolygon(t,e){let i=new v(t).setX(Math.min(t.x-1,...e.map(n=>n.x))),s=0;for(let n=0;n<e.length;n++){let a=this.intersectSegmentSegment(e[n],e[(n+1)%e.length],t,i);if(a.includes(t))return!0;s+=+(a.status==="Intersection")}return s%2==1}static intersectLineLine(t,e,i,s,n=!0,a=!0){let o=e.x-t.x,l=e.y-t.y,h=s.x-i.x,c=s.y-i.y,u=t.x-i.x,d=t.y-i.y,g=h*d-c*u,f=o*d-l*u,p=c*o-h*l;if(p!==0){let y=g/p,b=f/p;return(n||0<=y&&y<=1)&&(a||0<=b&&b<=1)?new V("Intersection").append(new v(t.x+y*o,t.y+y*l)):new V}return new V(g===0||f===0?n||a||V.isPointContained(t,i,s)||V.isPointContained(e,i,s)||V.isPointContained(i,t,e)||V.isPointContained(s,t,e)?"Coincident":void 0:"Parallel")}static intersectSegmentLine(t,e,i,s){return V.intersectLineLine(t,e,i,s,!1,!0)}static intersectSegmentSegment(t,e,i,s){return V.intersectLineLine(t,e,i,s,!1,!1)}static intersectLinePolygon(t,e,i,s=!0){let n=new V,a=i.length;for(let o,l,h,c=0;c<a;c++){if(o=i[c],l=i[(c+1)%a],h=V.intersectLineLine(t,e,o,l,s,!1),h.status==="Coincident")return h;n.append(...h.points)}return n.points.length>0&&(n.status="Intersection"),n}static intersectSegmentPolygon(t,e,i){return V.intersectLinePolygon(t,e,i,!1)}static intersectPolygonPolygon(t,e){let i=new V,s=t.length,n=[];for(let a=0;a<s;a++){let o=t[a],l=t[(a+1)%s],h=V.intersectSegmentPolygon(o,l,e);h.status==="Coincident"?(n.push(h),i.append(o,l)):i.append(...h.points)}return n.length>0&&n.length===t.length?new V("Coincident"):(i.points.length>0&&(i.status="Intersection"),i)}static intersectPolygonRectangle(t,e,i){let s=e.min(i),n=e.max(i),a=new v(n.x,s.y),o=new v(s.x,n.y);return V.intersectPolygonPolygon(t,[s,a,n,o])}},wc=class extends Ja{getX(){return this.getXY().x}setX(r){this.setXY(this.getXY().setX(r))}getY(){return this.getXY().y}setY(r){this.setXY(this.getXY().setY(r))}getRelativeX(){return this.left}setRelativeX(r){this.left=r}getRelativeY(){return this.top}setRelativeY(r){this.top=r}getXY(){let r=this.getRelativeXY();return this.group?J(r,this.group.calcTransformMatrix()):r}setXY(r,t,e){this.group&&(r=J(r,ot(this.group.calcTransformMatrix()))),this.setRelativeXY(r,t,e)}getRelativeXY(){return new v(this.left,this.top)}setRelativeXY(r,t=this.originX,e=this.originY){this.setPositionByOrigin(r,t,e)}isStrokeAccountedForInDimensions(){return!1}getCoords(){let{tl:r,tr:t,br:e,bl:i}=this.aCoords||(this.aCoords=this.calcACoords()),s=[r,t,e,i];if(this.group){let n=this.group.calcTransformMatrix();return s.map(a=>J(a,n))}return s}intersectsWithRect(r,t){return Xr.intersectPolygonRectangle(this.getCoords(),r,t).status==="Intersection"}intersectsWithObject(r){let t=Xr.intersectPolygonPolygon(this.getCoords(),r.getCoords());return t.status==="Intersection"||t.status==="Coincident"||r.isContainedWithinObject(this)||this.isContainedWithinObject(r)}isContainedWithinObject(r){return this.getCoords().every(t=>r.containsPoint(t))}isContainedWithinRect(r,t){let{left:e,top:i,width:s,height:n}=this.getBoundingRect();return e>=r.x&&e+s<=t.x&&i>=r.y&&i+n<=t.y}isOverlapping(r){return this.intersectsWithObject(r)||this.isContainedWithinObject(r)||r.isContainedWithinObject(this)}containsPoint(r){return Xr.isPointInPolygon(r,this.getCoords())}isOnScreen(){if(!this.canvas)return!1;let{tl:r,br:t}=this.canvas.vptCoords;return!!this.getCoords().some(e=>e.x<=t.x&&e.x>=r.x&&e.y<=t.y&&e.y>=r.y)||!!this.intersectsWithRect(r,t)||this.containsPoint(r.midPointFrom(t))}isPartiallyOnScreen(){if(!this.canvas)return!1;let{tl:r,br:t}=this.canvas.vptCoords;return!!this.intersectsWithRect(r,t)||this.getCoords().every(e=>(e.x>=t.x||e.x<=r.x)&&(e.y>=t.y||e.y<=r.y))&&this.containsPoint(r.midPointFrom(t))}getBoundingRect(){return Et(this.getCoords())}getScaledWidth(){return this._getTransformedDimensions().x}getScaledHeight(){return this._getTransformedDimensions().y}scale(r){this._set(Jt,r),this._set(Zt,r),this.setCoords()}scaleToWidth(r){let t=this.getBoundingRect().width/this.getScaledWidth();return this.scale(r/this.width/t)}scaleToHeight(r){let t=this.getBoundingRect().height/this.getScaledHeight();return this.scale(r/this.height/t)}getCanvasRetinaScaling(){var r;return((r=this.canvas)==null?void 0:r.getRetinaScaling())||1}getTotalAngle(){return this.group?Yt(bn(this.calcTransformMatrix())):this.angle}getViewportTransform(){var r;return((r=this.canvas)==null?void 0:r.viewportTransform)||nt.concat()}calcACoords(){let r=me({angle:this.angle}),{x:t,y:e}=this.getRelativeCenterPoint(),i=Y(He(t,e),r),s=this._getTransformedDimensions(),n=s.x/2,a=s.y/2;return{tl:J({x:-n,y:-a},i),tr:J({x:n,y:-a},i),bl:J({x:-n,y:a},i),br:J({x:n,y:a},i)}}setCoords(){this.aCoords=this.calcACoords()}transformMatrixKey(r=!1){let t=[];return!r&&this.group&&(t=this.group.transformMatrixKey(r)),t.push(this.top,this.left,this.width,this.height,this.scaleX,this.scaleY,this.angle,this.strokeWidth,this.skewX,this.skewY,+this.flipX,+this.flipY,it(this.originX),it(this.originY)),t}calcTransformMatrix(r=!1){let t=this.calcOwnMatrix();if(r||!this.group)return t;let e=this.transformMatrixKey(r),i=this.matrixCache;return i&&i.key.every((s,n)=>s===e[n])?i.value:(this.group&&(t=Y(this.group.calcTransformMatrix(!1),t)),this.matrixCache={key:e,value:t},t)}calcOwnMatrix(){let r=this.transformMatrixKey(!0),t=this.ownMatrixCache;if(t&&t.key.every((s,n)=>s===r[n]))return t.value;let e=this.getRelativeCenterPoint(),i=io({angle:this.angle,translateX:e.x,translateY:e.y,scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY});return this.ownMatrixCache={key:r,value:i},i}_getNonTransformedDimensions(){return new v(this.width,this.height).scalarAdd(this.strokeWidth)}_calculateCurrentDimensions(r){var t;let e=(t=this.canvas)==null?void 0:t.viewportTransform,i=this._getTransformedDimensions(r);return e?i.multiply(new v(xn(e),eo(e))).scalarAdd(2*this.padding):i.scalarAdd(2*this.padding)}_getTransformedDimensions(r={}){let t={scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,width:this.width,height:this.height,strokeWidth:this.strokeWidth,...r},e=t.strokeWidth,i=e,s=0;this.strokeUniform&&(i=0,s=e);let n=t.width+i,a=t.height+i,o;return o=t.skewX===0&&t.skewY===0?new v(n*t.scaleX,a*t.scaleY):$i(n,a,Gr(t)),o.scalarAdd(s)}translateToGivenOrigin(r,t,e,i,s){let n=r.x,a=r.y,o=it(i)-it(t),l=it(s)-it(e);if(o||l){let h=this._getTransformedDimensions();n+=o*h.x,a+=l*h.y}return new v(n,a)}translateToCenterPoint(r,t,e){if(t==="center"&&e==="center")return r;let i=this.translateToGivenOrigin(r,t,e,F,F);return this.angle?i.rotate(X(this.angle),r):i}translateToOriginPoint(r,t,e){let i=this.translateToGivenOrigin(r,F,F,t,e);return this.angle?i.rotate(X(this.angle),r):i}getCenterPoint(){let r=this.getRelativeCenterPoint();return this.group?J(r,this.group.calcTransformMatrix()):r}getRelativeCenterPoint(){return this.translateToCenterPoint(new v(this.left,this.top),this.originX,this.originY)}getPointByOrigin(r,t){return this.getPositionByOrigin(r,t)}getPositionByOrigin(r,t){return this.translateToOriginPoint(this.getRelativeCenterPoint(),r,t)}setPositionByOrigin(r,t,e){let i=this.translateToCenterPoint(r,t,e),s=this.translateToOriginPoint(i,this.originX,this.originY);this.set({left:s.x,top:s.y})}_getLeftTopCoords(){return this.getPositionByOrigin(z,"top")}positionByLeftTop(r){return this.setPositionByOrigin(r,z,"top")}},It=class wi extends wc{static getDefaults(){return wi.ownDefaults}get type(){let t=this.constructor.type;return t==="FabricObject"?"object":t.toLowerCase()}set type(t){Xt("warn","Setting type has no effect",t)}constructor(t){super(),m(this,"_cacheContext",null),Object.assign(this,wi.ownDefaults),this.setOptions(t)}_createCacheCanvas(){this._cacheCanvas=jt(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0}_limitCacheSize(t){let e=t.width,i=t.height,s=L.maxCacheSideLimit,n=L.minCacheSideLimit;if(e<=s&&i<=s&&e*i<=L.perfLimitSizeTotal)return e<n&&(t.width=n),i<n&&(t.height=n),t;let a=e/i,[o,l]=Ir.limitDimsByArea(a),h=pe(n,o,s),c=pe(n,l,s);return e>h&&(t.zoomX/=e/h,t.width=h,t.capped=!0),i>c&&(t.zoomY/=i/c,t.height=c,t.capped=!0),t}_getCacheCanvasDimensions(){let t=this.getTotalObjectScaling(),e=this._getTransformedDimensions({skewX:0,skewY:0}),i=e.x*t.x/this.scaleX,s=e.y*t.y/this.scaleY;return{width:Math.ceil(i+2),height:Math.ceil(s+2),zoomX:t.x,zoomY:t.y,x:i,y:s}}_updateCacheCanvas(){let t=this._cacheCanvas,e=this._cacheContext,{width:i,height:s,zoomX:n,zoomY:a,x:o,y:l}=this._limitCacheSize(this._getCacheCanvasDimensions()),h=i!==t.width||s!==t.height,c=this.zoomX!==n||this.zoomY!==a;if(!t||!e)return!1;if(h||c){i!==t.width||s!==t.height?(t.width=i,t.height=s):(e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,t.width,t.height));let u=o/2,d=l/2;return this.cacheTranslationX=Math.round(t.width/2-u)+u,this.cacheTranslationY=Math.round(t.height/2-d)+d,e.translate(this.cacheTranslationX,this.cacheTranslationY),e.scale(n,a),this.zoomX=n,this.zoomY=a,!0}return!1}setOptions(t={}){this._setOptions(t)}transform(t){let e=this.group&&!this.group._transformDone||this.group&&this.canvas&&t===this.canvas.contextTop,i=this.calcTransformMatrix(!e);t.transform(i[0],i[1],i[2],i[3],i[4],i[5])}getObjectScaling(){if(!this.group)return new v(Math.abs(this.scaleX),Math.abs(this.scaleY));let t=fe(this.calcTransformMatrix());return new v(Math.abs(t.scaleX),Math.abs(t.scaleY))}getTotalObjectScaling(){let t=this.getObjectScaling();if(this.canvas){let e=this.canvas.getZoom(),i=this.getCanvasRetinaScaling();return t.scalarMultiply(e*i)}return t}getObjectOpacity(){let t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t}_constrainScale(t){return Math.abs(t)<this.minScaleLimit?t<0?-this.minScaleLimit:this.minScaleLimit:t===0?1e-4:t}_set(t,e){t!=="scaleX"&&t!=="scaleY"||(e=this._constrainScale(e)),t==="scaleX"&&e<0?(this.flipX=!this.flipX,e*=-1):t==="scaleY"&&e<0?(this.flipY=!this.flipY,e*=-1):t!=="shadow"||!e||e instanceof de||(e=new de(e));let i=this[t]!==e;return this[t]=e,i&&this.constructor.cacheProperties.includes(t)&&(this.dirty=!0),this.parent&&(this.dirty||i&&this.constructor.stateProperties.includes(t))&&this.parent._set("dirty",!0),this}isNotVisible(){return this.opacity===0||!this.width&&!this.height&&this.strokeWidth===0||!this.visible}render(t){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(t)):(this._removeCacheCanvas(),this.drawObject(t,!1,{}),this.dirty=!1),t.restore())}drawSelectionBackground(t){}renderCache(t){if(t=t||{},this._cacheCanvas&&this._cacheContext||this._createCacheCanvas(),this.isCacheDirty()&&this._cacheContext){let{zoomX:e,zoomY:i,cacheTranslationX:s,cacheTranslationY:n}=this,{width:a,height:o}=this._cacheCanvas;this.drawObject(this._cacheContext,t.forClipping,{zoomX:e,zoomY:i,cacheTranslationX:s,cacheTranslationY:n,width:a,height:o,parentClipPaths:[]}),this.dirty=!1}}_removeCacheCanvas(){this._cacheCanvas=void 0,this._cacheContext=null}hasStroke(){return!!this.stroke&&this.stroke!=="transparent"&&this.strokeWidth!==0}hasFill(){return!!this.fill&&this.fill!=="transparent"}needsItsOwnCache(){return!!(this.paintFirst==="stroke"&&this.hasFill()&&this.hasStroke()&&this.shadow)||!!this.clipPath}shouldCache(){return this.ownCaching=this.objectCaching&&(!this.parent||!this.parent.isOnACache())||this.needsItsOwnCache(),this.ownCaching}willDrawShadow(){return!!this.shadow&&(this.shadow.offsetX!==0||this.shadow.offsetY!==0)}drawClipPathOnCache(t,e,i){t.save(),e.inverted?t.globalCompositeOperation="destination-out":t.globalCompositeOperation="destination-in",t.setTransform(1,0,0,1,0,0),t.drawImage(i,0,0),t.restore()}drawObject(t,e,i){let s=this.fill,n=this.stroke;e?(this.fill="black",this.stroke="",this._setClippingProperties(t)):this._renderBackground(t),this.fire("before:render",{ctx:t}),this._render(t),this._drawClipPath(t,this.clipPath,i),this.fill=s,this.stroke=n}createClipPathLayer(t,e){let i=gt(e),s=i.getContext("2d");if(s.translate(e.cacheTranslationX,e.cacheTranslationY),s.scale(e.zoomX,e.zoomY),t._cacheCanvas=i,e.parentClipPaths.forEach(n=>{n.transform(s)}),e.parentClipPaths.push(t),t.absolutePositioned){let n=ot(this.calcTransformMatrix());s.transform(n[0],n[1],n[2],n[3],n[4],n[5])}return t.transform(s),t.drawObject(s,!0,e),i}_drawClipPath(t,e,i){if(!e)return;e._transformDone=!0;let s=this.createClipPathLayer(e,i);this.drawClipPathOnCache(t,e,s)}drawCacheOnCanvas(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)}isCacheDirty(t=!1){if(this.isNotVisible())return!1;let e=this._cacheCanvas,i=this._cacheContext;return!(!e||!i||t||!this._updateCacheCanvas())||!!(this.dirty||this.clipPath&&this.clipPath.absolutePositioned)&&(e&&i&&!t&&(i.save(),i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,e.width,e.height),i.restore()),!0)}_renderBackground(t){if(!this.backgroundColor)return;let e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}_setOpacity(t){this.group&&!this.group._transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity}_setStrokeStyles(t,e){let i=e.stroke;i&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineDashOffset=e.strokeDashOffset,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,yt(i)?i.gradientUnits==="percentage"||i.gradientTransform||i.patternTransform?this._applyPatternForTransformedGradient(t,i):(t.strokeStyle=i.toLive(t),this._applyPatternGradientTransform(t,i)):t.strokeStyle=e.stroke)}_setFillStyles(t,{fill:e}){e&&(yt(e)?(t.fillStyle=e.toLive(t),this._applyPatternGradientTransform(t,e)):t.fillStyle=e)}_setClippingProperties(t){t.globalAlpha=1,t.strokeStyle="transparent",t.fillStyle="#000000"}_setLineDash(t,e){e&&e.length!==0&&t.setLineDash(e)}_setShadow(t){if(!this.shadow)return;let e=this.shadow,i=this.canvas,s=this.getCanvasRetinaScaling(),[n,,,a]=i?.viewportTransform||nt,o=n*s,l=a*s,h=e.nonScaling?new v(1,1):this.getObjectScaling();t.shadowColor=e.color,t.shadowBlur=e.blur*L.browserShadowBlurConstant*(o+l)*(h.x+h.y)/4,t.shadowOffsetX=e.offsetX*o*h.x,t.shadowOffsetY=e.offsetY*l*h.y}_removeShadow(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)}_applyPatternGradientTransform(t,e){if(!yt(e))return{offsetX:0,offsetY:0};let i=e.gradientTransform||e.patternTransform,s=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;return e.gradientUnits==="percentage"?t.transform(this.width,0,0,this.height,s,n):t.transform(1,0,0,1,s,n),i&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:s,offsetY:n}}_renderPaintInOrder(t){this.paintFirst==="stroke"?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))}_render(t){}_renderFill(t){this.fill&&(t.save(),this._setFillStyles(t,this),this.fillRule==="evenodd"?t.fill("evenodd"):t.fill(),t.restore())}_renderStroke(t){if(this.stroke&&this.strokeWidth!==0){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this.strokeUniform){let e=this.getObjectScaling();t.scale(1/e.x,1/e.y)}this._setLineDash(t,this.strokeDashArray),this._setStrokeStyles(t,this),t.stroke(),t.restore()}}_applyPatternForTransformedGradient(t,e){var i;let s=this._limitCacheSize(this._getCacheCanvasDimensions()),n=this.getCanvasRetinaScaling(),a=s.x/this.scaleX/n,o=s.y/this.scaleY/n,l=gt({width:Math.ceil(a),height:Math.ceil(o)}),h=l.getContext("2d");h&&(h.beginPath(),h.moveTo(0,0),h.lineTo(a,0),h.lineTo(a,o),h.lineTo(0,o),h.closePath(),h.translate(a/2,o/2),h.scale(s.zoomX/this.scaleX/n,s.zoomY/this.scaleY/n),this._applyPatternGradientTransform(h,e),h.fillStyle=e.toLive(t),h.fill(),t.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),t.scale(n*this.scaleX/s.zoomX,n*this.scaleY/s.zoomY),t.strokeStyle=(i=h.createPattern(l,"no-repeat"))==null?"":i)}_findCenterFromElement(){return new v(this.left+this.width/2,this.top+this.height/2)}clone(t){let e=this.toObject(t);return this.constructor.fromObject(e)}cloneAsImage(t){let e=this.toCanvasElement(t);return new(_.getClass("image"))(e)}toCanvasElement(t={}){let e=_n(this),i=this.group,s=this.shadow,n=Math.abs,a=t.enableRetinaScaling?$a():1,o=(t.multiplier||1)*a,l=t.canvasProvider||(x=>new ze(x,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1}));delete this.group,t.withoutTransform&&uo(this),t.withoutShadow&&(this.shadow=null),t.viewportTransform&&Tn(this,this.getViewportTransform()),this.setCoords();let h=jt(),c=this.getBoundingRect(),u=this.shadow,d=new v;if(u){let x=u.blur,C=u.nonScaling?new v(1,1):this.getObjectScaling();d.x=2*Math.round(n(u.offsetX)+x)*n(C.x),d.y=2*Math.round(n(u.offsetY)+x)*n(C.y)}let g=c.width+d.x,f=c.height+d.y;h.width=Math.ceil(g),h.height=Math.ceil(f);let p=l(h);t.format==="jpeg"&&(p.backgroundColor="#fff"),this.setPositionByOrigin(new v(p.width/2,p.height/2),F,F);let y=this.canvas;p._objects=[this],this.set("canvas",p),this.setCoords();let b=p.toCanvasElement(o||1,t);return this.set("canvas",y),this.shadow=s,i&&(this.group=i),this.set(e),this.setCoords(),p._objects=[],p.destroy(),b}toDataURL(t={}){return yn(this.toCanvasElement(t),t.format||"png",t.quality||1)}toBlob(t={}){return vn(this.toCanvasElement(t),t.format||"png",t.quality||1)}isType(...t){return t.includes(this.constructor.type)||t.includes(this.type)}complexity(){return 1}toJSON(){return this.toObject()}rotate(t){let{centeredRotation:e,originX:i,originY:s}=this;if(e){let{x:n,y:a}=this.getRelativeCenterPoint();this.originX=F,this.originY=F,this.left=n,this.top=a}if(this.set("angle",t),e){let{x:n,y:a}=this.getPositionByOrigin(i,s);this.left=n,this.top=a,this.originX=i,this.originY=s}}setOnGroup(){}_setupCompositeOperation(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}dispose(){Oi.cancelByTarget(this),this.off(),this._set("canvas",void 0),this._cacheCanvas&&At().dispose(this._cacheCanvas),this._cacheCanvas=void 0,this._cacheContext=null}animate(t,e){return Object.entries(t).reduce((i,[s,n])=>(i[s]=this._animate(s,n,e),i),{})}_animate(t,e,i={}){let s=t.split("."),n=this.constructor.colorProperties.includes(s[s.length-1]),{abort:a,startValue:o,onChange:l,onComplete:h}=i,c={...i,target:this,startValue:o??s.reduce((u,d)=>u[d],this),endValue:e,abort:a?.bind(this),onChange:(u,d,g)=>{s.reduce((f,p,y)=>(y===s.length-1&&(f[p]=u),f[p]),this),l&&l(u,d,g)},onComplete:(u,d,g)=>{this.setCoords(),h&&h(u,d,g)}};return n?ko(c):In(c)}isDescendantOf(t){let{parent:e,group:i}=this;return e===t||i===t||!!e&&e.isDescendantOf(t)||!!i&&i!==e&&i.isDescendantOf(t)}getAncestors(){let t=[],e=this;do e=e.parent,e&&t.push(e);while(e);return t}findCommonAncestors(t){if(this===t)return{fork:[],otherFork:[],common:[this,...this.getAncestors()]};let e=this.getAncestors(),i=t.getAncestors();if(e.length===0&&i.length>0&&this===i[i.length-1])return{fork:[],otherFork:[t,...i.slice(0,i.length-1)],common:[this]};for(let s,n=0;n<e.length;n++){if(s=e[n],s===t)return{fork:[this,...e.slice(0,n)],otherFork:[],common:e.slice(n)};for(let a=0;a<i.length;a++){if(this===i[a])return{fork:[],otherFork:[t,...i.slice(0,a)],common:[this,...e]};if(s===i[a])return{fork:[this,...e.slice(0,n)],otherFork:[t,...i.slice(0,a)],common:e.slice(n)}}}return{fork:[this,...e],otherFork:[t,...i],common:[]}}hasCommonAncestors(t){let e=this.findCommonAncestors(t);return e&&!!e.common.length}isInFrontOf(t){if(this===t)return;let e=this.findCommonAncestors(t);if(e.fork.includes(t))return!0;if(e.otherFork.includes(this))return!1;let i=e.common[0]||this.canvas;if(!i)return;let s=e.fork.pop(),n=e.otherFork.pop(),a=i._objects.indexOf(s),o=i._objects.indexOf(n);return a>-1&&a>o}toObject(t=[]){let e=t.concat(wi.customProperties,this.constructor.customProperties||[]),i,s=L.NUM_FRACTION_DIGITS,{clipPath:n,fill:a,stroke:o,shadow:l,strokeDashArray:h,left:c,top:u,originX:d,originY:g,width:f,height:p,strokeWidth:y,strokeLineCap:b,strokeDashOffset:x,strokeLineJoin:C,strokeUniform:S,strokeMiterLimit:w,scaleX:k,scaleY:T,angle:O,flipX:M,flipY:D,opacity:E,visible:A,backgroundColor:j,fillRule:B,paintFirst:q,globalCompositeOperation:$,skewX:tt,skewY:ht}=this;n&&!n.excludeFromExport&&(i=n.toObject(e.concat("inverted","absolutePositioned")));let I=hr=>R(hr,s),Ot={...ye(this,e),type:this.constructor.type,version:Ys,originX:d,originY:g,left:I(c),top:I(u),width:I(f),height:I(p),fill:da(a)?a.toObject():a,stroke:da(o)?o.toObject():o,strokeWidth:I(y),strokeDashArray:h&&h.concat(),strokeLineCap:b,strokeDashOffset:x,strokeLineJoin:C,strokeUniform:S,strokeMiterLimit:I(w),scaleX:I(k),scaleY:I(T),angle:I(O),flipX:M,flipY:D,opacity:I(E),shadow:l&&l.toObject(),visible:A,backgroundColor:j,fillRule:B,paintFirst:q,globalCompositeOperation:$,skewX:I(tt),skewY:I(ht),...i?{clipPath:i}:null};return this.includeDefaultValues?Ot:this._removeDefaultValues(Ot)}toDatalessObject(t){return this.toObject(t)}_removeDefaultValues(t){let e=this.constructor.getDefaults(),i=Object.keys(e).length>0?e:Object.getPrototypeOf(this);return Sn(t,(s,n)=>{if(n==="left"||n==="top"||n==="type")return!0;let a=i[n];return s!==a&&!(Array.isArray(s)&&Array.isArray(a)&&s.length===0&&a.length===0)})}toString(){return`#<${this.constructor.type}>`}static _fromObject({type:t,...e},{extraParam:i,...s}={}){return Vr(e,s).then(n=>i?(delete n[i],new this(e[i],n)):new this(n))}static fromObject(t,e){return this._fromObject(t,e)}};m(It,"stateProperties",Yh),m(It,"cacheProperties",Wt),m(It,"ownDefaults",$h),m(It,"type","FabricObject"),m(It,"colorProperties",[at,Dt,"backgroundColor"]),m(It,"customProperties",[]),_.setClass(It),_.setClass(It,"object");var Rn=(r,t)=>{var e;let{transform:{target:i}}=t;(e=i.canvas)==null||e.fire(`object:${r}`,{...t,target:i}),i.fire(r,t)},Ht=(r,t,e)=>(i,s,n,a)=>{let o=t(i,s,n,a);return o&&Rn(r,{...En(i,s,n,a),...e}),o};function Qt(r){return(t,e,i,s)=>{let{target:n,originX:a,originY:o}=e,l=n.getPositionByOrigin(a,o),h=r(t,e,i,s);return n.setPositionByOrigin(l,e.originX,e.originY),h}}var Oo=(r,t,e,i)=>(s,n,a,o)=>{let l=Hi(n,n.originX,n.originY,a,o)[e],h=it(n[t]);if(h===0||h>0&&l<0||h<0&&l>0){let{target:c}=n,u=c.strokeWidth/(c.strokeUniform?c[i]:1),d=mo(n)?2:1,g=c[r],f=Math.abs(l*d/c[i])-u;return c.set(r,Math.max(f,1)),g!==c[r]}return!1},Mo=Oo("width","originX","x","scaleX"),Po=Oo("height","originY","y","scaleY"),zs=Ht(Yr,Qt(Mo)),Sc=Ht(Yr,Qt(Po));function Eo(r,t,e,i,s){r.save();let{stroke:n,xSize:a,ySize:o,opName:l}=this.commonRenderProps(r,t,e,s,i),h=a;a>o?r.scale(1,o/a):o>a&&(h=o,r.scale(a/o,1)),r.beginPath(),r.arc(0,0,h/2,0,_t,!1),r[l](),n&&r.stroke(),r.restore()}function Ao(r,t,e,i,s){r.save();let{stroke:n,xSize:a,ySize:o,opName:l}=this.commonRenderProps(r,t,e,s,i),h=a/2,c=o/2;r[`${l}Rect`](-h,-c,a,o),n&&r.strokeRect(-h,-c,a,o),r.restore()}var ut=class{constructor(r){m(this,"visible",!0),m(this,"actionName",Ua),m(this,"angle",0),m(this,"x",0),m(this,"y",0),m(this,"offsetX",0),m(this,"offsetY",0),m(this,"sizeX",0),m(this,"sizeY",0),m(this,"touchSizeX",0),m(this,"touchSizeY",0),m(this,"cursorStyle","crosshair"),m(this,"withConnection",!1),Object.assign(this,r)}getTransformAnchorPoint(){var r;return(r=this.transformAnchorPoint)==null?new v(.5-this.x,.5-this.y):r}shouldActivate(r,t,e,{tl:i,tr:s,br:n,bl:a}){var o;return((o=t.canvas)==null?void 0:o.getActiveObject())===t&&t.isControlVisible(r)&&Xr.isPointInPolygon(e,[i,s,n,a])}getActionHandler(r,t,e){return this.actionHandler}getMouseDownHandler(r,t,e){return this.mouseDownHandler}getMouseUpHandler(r,t,e){return this.mouseUpHandler}cursorStyleHandler(r,t,e,i){return t.cursorStyle}getActionName(r,t,e){return t.actionName}getVisibility(r,t){var e,i;return(e=(i=r._controlsVisibility)==null?void 0:i[t])==null?this.visible:e}setVisibility(r,t,e){this.visible=r}positionHandler(r,t,e,i){return new v(this.x*r.x+this.offsetX,this.y*r.y+this.offsetY).transform(t)}calcCornerCoords(r,t,e,i,s,n){let a=Bi([He(e,i),me({angle:r}),Xi((s?this.touchSizeX:this.sizeX)||t,(s?this.touchSizeY:this.sizeY)||t)]);return{tl:new v(-.5,-.5).transform(a),tr:new v(.5,-.5).transform(a),br:new v(.5,.5).transform(a),bl:new v(-.5,.5).transform(a)}}commonRenderProps(r,t,e,i,s={}){let{cornerSize:n,cornerColor:a,transparentCorners:o,cornerStrokeColor:l}=s,h=n||i.cornerSize,c=this.sizeX||h,u=this.sizeY||h,d=o===void 0?i.transparentCorners:o,g=d?Dt:at,f=l||i.cornerStrokeColor,p=!d&&!!f;return r.fillStyle=a||i.cornerColor||"",r.strokeStyle=f||"",r.translate(t,e),r.rotate(X(i.getTotalAngle())),{stroke:p,xSize:c,ySize:u,transparentCorners:d,opName:g}}render(r,t,e,i,s){((i=i||{}).cornerStyle||s.cornerStyle)==="circle"?Eo.call(this,r,t,e,i,s):Ao.call(this,r,t,e,i,s)}},Do=(r,t,e)=>e.lockRotation?Pn:t.cursorStyle,jo=Ht(za,Qt((r,{target:t,ex:e,ey:i,theta:s,originX:n,originY:a},o,l)=>{let h=t.getPositionByOrigin(n,a);if(St(t,"lockRotation"))return!1;let c=Math.atan2(i-h.y,e-h.x),u=Yt(Math.atan2(l-h.y,o-h.x)-c+s);if(t.snapAngle&&t.snapAngle>0){let g=t.snapAngle,f=t.snapThreshold||g,p=Math.ceil(u/g)*g,y=Math.floor(u/g)*g;Math.abs(u-y)<f?u=y:Math.abs(u-p)<f&&(u=p)}u<0&&(u=360+u),u%=360;let d=t.angle!==u;return t.angle=u,d}));function Lo(r,t){let e=t.canvas,i=r[e.uniScaleKey];return e.uniformScaling&&!i||!e.uniformScaling&&i}function Fo(r,t,e){let i=St(r,"lockScalingX"),s=St(r,"lockScalingY");if(i&&s||!t&&(i||s)&&e||i&&t==="x"||s&&t==="y")return!0;let{width:n,height:a,strokeWidth:o}=r;return n===0&&o===0&&t!=="y"||a===0&&o===0&&t!=="x"}var _c=["e","se","s","sw","w","nw","n","ne","e"],Ae=(r,t,e,i)=>{let s=Lo(r,e);return Fo(e,t.x!==0&&t.y===0?"x":t.x===0&&t.y!==0?"y":"",s)?Pn:`${_c[yo(e,0,i)]}-resize`};function Bn(r,t,e,i,s={}){let n=t.target,a=s.by,o=Lo(r,n),l,h,c,u,d,g;if(Fo(n,a,o))return!1;if(t.gestureScale)h=t.scaleX*t.gestureScale,c=t.scaleY*t.gestureScale;else{if(l=Hi(t,t.originX,t.originY,e,i),d=a==="y"?1:Math.sign(l.x||t.signX||1),g=a==="x"?1:Math.sign(l.y||t.signY||1),t.signX||(t.signX=d),t.signY||(t.signY=g),St(n,"lockScalingFlip")&&(t.signX!==d||t.signY!==g))return!1;if(u=n._getTransformedDimensions(),o&&!a){let y=Math.abs(l.x)+Math.abs(l.y),{original:b}=t,x=y/(Math.abs(u.x*b.scaleX/n.scaleX)+Math.abs(u.y*b.scaleY/n.scaleY));h=b.scaleX*x,c=b.scaleY*x}else h=Math.abs(l.x*n.scaleX/u.x),c=Math.abs(l.y*n.scaleY/u.y);mo(t)&&(h*=2,c*=2),t.signX!==d&&a!=="y"&&(t.originX=ma(t.originX),h*=-1,t.signX=d),t.signY!==g&&a!=="x"&&(t.originY=ma(t.originY),c*=-1,t.signY=g)}let f=n.scaleX,p=n.scaleY;return a?(a==="x"&&n.set("scaleX",h),a==="y"&&n.set("scaleY",c)):(!St(n,"lockScalingX")&&n.set("scaleX",h),!St(n,"lockScalingY")&&n.set("scaleY",c)),f!==n.scaleX||p!==n.scaleY}var mr=Ht(Ri,Qt((r,t,e,i)=>Bn(r,t,e,i))),Io=Ht(Ri,Qt((r,t,e,i)=>Bn(r,t,e,i,{by:"x"}))),Ro=Ht(Ri,Qt((r,t,e,i)=>Bn(r,t,e,i,{by:"y"}))),Ds={x:{counterAxis:"y",scale:Jt,skew:$e,lockSkewing:"lockSkewingX",origin:"originX",flip:"flipX"},y:{counterAxis:"x",scale:Zt,skew:We,lockSkewing:"lockSkewingY",origin:"originY",flip:"flipY"}},Tc=["ns","nesw","ew","nwse"],Bo=(r,t,e,i)=>t.x!==0&&St(e,"lockSkewingY")||t.y!==0&&St(e,"lockSkewingX")?Pn:`${Tc[yo(e,0,i)%4]}-resize`;function Xo(r,t,e,i,s){let{target:n}=e,{counterAxis:a,origin:o,lockSkewing:l,skew:h,flip:c}=Ds[r];if(St(n,l))return!1;let{origin:u,flip:d}=Ds[a],g=it(e[u])*(n[d]?-1:1),f=-Math.sign(g)*(n[c]?-1:1),p=-(n[h]===0&&Hi(e,"center","center",i,s)[r]>0||n[h]>0?1:-1)*f*.5+.5;return Ht(Va,Qt((y,b,x,C)=>(function(S,{target:w,ex:k,ey:T,skewingSide:O,...M},D){let{skew:E}=Ds[S],A=D.subtract(new v(k,T)).divide(new v(w.scaleX,w.scaleY))[S],j=w[E],B=M[E],q=Math.tan(X(B)),$=S==="y"?w._getTransformedDimensions({scaleX:1,scaleY:1,skewX:0}).x:w._getTransformedDimensions({scaleX:1,scaleY:1}).y,tt=2*A*O/Math.max($,1)+q,ht=Yt(Math.atan(tt));w.set(E,ht);let I=j!==w[E];if(I&&S==="y"){let{skewX:Ot,scaleX:hr}=w,cr=w._getTransformedDimensions({skewY:j}),Gt=w._getTransformedDimensions(),ur=Ot===0?1:cr.x/Gt.x;ur!==1&&w.set("scaleX",ur*hr)}return I})(r,b,new v(x,C))))(t,{...e,[o]:p,skewingSide:f},i,s)}var Yo=(r,t,e,i)=>Xo("x",r,t,e,i),$o=(r,t,e,i)=>Xo("y",r,t,e,i);function Ni(r,t){return r[t.canvas.altActionKey]}var yr=(r,t,e)=>{let i=Ni(r,e);return t.x===0?i?$e:Zt:t.y===0?i?We:Jt:""},ce=(r,t,e,i)=>Ni(r,e)?Bo(0,t,e,i):Ae(r,t,e,i),Gs=(r,t,e,i)=>Ni(r,t.target)?$o(r,t,e,i):Io(r,t,e,i),Vs=(r,t,e,i)=>Ni(r,t.target)?Yo(r,t,e,i):Ro(r,t,e,i),Xn=()=>({ml:new ut({x:-.5,y:0,cursorStyleHandler:ce,actionHandler:Gs,getActionName:yr}),mr:new ut({x:.5,y:0,cursorStyleHandler:ce,actionHandler:Gs,getActionName:yr}),mb:new ut({x:0,y:.5,cursorStyleHandler:ce,actionHandler:Vs,getActionName:yr}),mt:new ut({x:0,y:-.5,cursorStyleHandler:ce,actionHandler:Vs,getActionName:yr}),tl:new ut({x:-.5,y:-.5,cursorStyleHandler:Ae,actionHandler:mr}),tr:new ut({x:.5,y:-.5,cursorStyleHandler:Ae,actionHandler:mr}),bl:new ut({x:-.5,y:.5,cursorStyleHandler:Ae,actionHandler:mr}),br:new ut({x:.5,y:.5,cursorStyleHandler:Ae,actionHandler:mr}),mtr:new ut({x:0,y:-.5,actionHandler:jo,cursorStyleHandler:Do,offsetY:-40,withConnection:!0,actionName:Ga})}),Wo=()=>({mr:new ut({x:.5,y:0,actionHandler:zs,cursorStyleHandler:ce,actionName:Yr}),ml:new ut({x:-.5,y:0,actionHandler:zs,cursorStyleHandler:ce,actionName:Yr})}),Ho=()=>({...Xn(),...Wo()}),zo=class Ns extends It{static getDefaults(){return{...super.getDefaults(),...Ns.ownDefaults}}constructor(t){super(),Object.assign(this,this.constructor.createControls(),Ns.ownDefaults),this.setOptions(t)}static createControls(){return{controls:Xn()}}_updateCacheCanvas(){let t=this.canvas;if(this.noScaleCache&&t&&t._currentTransform){let e=t._currentTransform,i=e.target,s=e.action;if(this===i&&s&&s.startsWith("scale"))return!1}return super._updateCacheCanvas()}getActiveControl(){let t=this.__corner;return t?{key:t,control:this.controls[t],coord:this.oCoords[t]}:void 0}findControl(t,e=!1){if(!this.hasControls||!this.canvas)return;this.__corner=void 0;let i=Object.entries(this.oCoords);for(let s=i.length-1;s>=0;s--){let[n,a]=i[s],o=this.controls[n];if(o.shouldActivate(n,this,t,e?a.touchCorner:a.corner))return this.__corner=n,{key:n,control:o,coord:this.oCoords[n]}}}calcOCoords(){let t=this.getViewportTransform(),e=xn(t),i=eo(t),s=this.getCenterPoint(),n=Y(Y(t,Y(He(s.x,s.y),me({angle:this.getTotalAngle()-(this.group&&this.flipX?180:0)}))),[1/e,0,0,1/i,0,0]),a=this.group?fe(this.calcTransformMatrix()):void 0;a&&(a.scaleX=Math.abs(a.scaleX),a.scaleY=Math.abs(a.scaleY));let o=this._calculateCurrentDimensions(a),l={};return this.forEachControl((h,c)=>{let u=h.positionHandler(o,n,this,h);l[c]=Object.assign(u,this._calcCornerCoords(h,u))}),l}_calcCornerCoords(t,e){let i=this.getTotalAngle();return{corner:t.calcCornerCoords(i,this.cornerSize,e.x,e.y,!1,this),touchCorner:t.calcCornerCoords(i,this.touchCornerSize,e.x,e.y,!0,this)}}setCoords(){super.setCoords(),this.canvas&&(this.oCoords=this.calcOCoords())}forEachControl(t){for(let e in this.controls)t(this.controls[e],e,this)}drawSelectionBackground(t){if(!this.selectionBackgroundColor||this.canvas&&this.canvas._activeObject!==this)return;t.save();let e=this.getRelativeCenterPoint(),i=this._calculateCurrentDimensions(),s=this.getViewportTransform();t.translate(e.x,e.y),t.scale(1/s[0],1/s[3]),t.rotate(X(this.angle)),t.fillStyle=this.selectionBackgroundColor,t.fillRect(-i.x/2,-i.y/2,i.x,i.y),t.restore()}strokeBorders(t,e){t.strokeRect(-e.x/2,-e.y/2,e.x,e.y)}_drawBorders(t,e,i={}){let s={hasControls:this.hasControls,borderColor:this.borderColor,borderDashArray:this.borderDashArray,...i};t.save(),t.strokeStyle=s.borderColor,this._setLineDash(t,s.borderDashArray),this.strokeBorders(t,e),s.hasControls&&this.drawControlsConnectingLines(t,e),t.restore()}_renderControls(t,e={}){let{hasBorders:i,hasControls:s}=this,n={hasBorders:i,hasControls:s,...e},a=this.getViewportTransform(),o=n.hasBorders,l=n.hasControls,h=fe(Y(a,this.calcTransformMatrix()));t.save(),t.translate(h.translateX,h.translateY),t.lineWidth=this.borderScaleFactor,this.group===this.parent&&(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(h.angle-=180);let c=bn(a);t.rotate(this.group?X(h.angle):X(this.angle)+c),o&&this.drawBorders(t,h,e),l&&this.drawControls(t,e),t.restore()}drawBorders(t,e,i){let s;if(i&&i.forActiveSelection||this.group){let n=$i(this.width,this.height,Gr(e)),a=this.isStrokeAccountedForInDimensions()?mn:(this.strokeUniform?new v().scalarAdd(this.canvas?this.canvas.getZoom():1):new v(e.scaleX,e.scaleY)).scalarMultiply(this.strokeWidth);s=n.add(a).scalarAdd(this.borderScaleFactor).scalarAdd(2*this.padding)}else s=this._calculateCurrentDimensions().scalarAdd(this.borderScaleFactor);this._drawBorders(t,s,i)}drawControlsConnectingLines(t,e){let i=!1;t.beginPath(),this.forEachControl((s,n)=>{s.withConnection&&s.getVisibility(this,n)&&(i=!0,t.moveTo(s.x*e.x,s.y*e.y),t.lineTo(s.x*e.x+s.offsetX,s.y*e.y+s.offsetY))}),i&&t.stroke()}drawControls(t,e={}){t.save();let i=this.getCanvasRetinaScaling(),{cornerStrokeColor:s,cornerDashArray:n,cornerColor:a}=this,o={cornerStrokeColor:s,cornerDashArray:n,cornerColor:a,...e};t.setTransform(i,0,0,i,0,0),t.strokeStyle=t.fillStyle=o.cornerColor,this.transparentCorners||(t.strokeStyle=o.cornerStrokeColor),this._setLineDash(t,o.cornerDashArray),this.forEachControl((l,h)=>{if(l.getVisibility(this,h)){let c=this.oCoords[h];l.render(t,c.x,c.y,o,this)}}),t.restore()}isControlVisible(t){return this.controls[t]&&this.controls[t].getVisibility(this,t)}setControlVisible(t,e){this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[t]=e}setControlsVisibility(t={}){Object.entries(t).forEach(([e,i])=>this.setControlVisible(e,i))}clearContextTop(t){if(!this.canvas)return;let e=this.canvas.contextTop;if(!e)return;let i=this.canvas.viewportTransform;e.save(),e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(e);let s=this.width+4,n=this.height+4;return e.clearRect(-s/2,-n/2,s,n),t||e.restore(),e}onDeselect(t){return!1}onSelect(t){return!1}shouldStartDragging(t){return!1}onDragStart(t){return!1}canDrop(t){return!1}renderDragSourceEffect(t){}renderDropTargetEffect(t){}};function Go(r,t){return t.forEach(e=>{Object.getOwnPropertyNames(e.prototype).forEach(i=>{i!=="constructor"&&Object.defineProperty(r.prototype,i,Object.getOwnPropertyDescriptor(e.prototype,i)||Object.create(null))})}),r}m(zo,"ownDefaults",{noScaleCache:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,cornerSize:13,touchCornerSize:24,transparentCorners:!0,cornerColor:"rgb(178,204,255)",cornerStrokeColor:"",cornerStyle:"rect",cornerDashArray:null,hasControls:!0,borderColor:"rgb(178,204,255)",borderDashArray:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,hasBorders:!0,selectionBackgroundColor:"",selectable:!0,evented:!0,perPixelTargetFind:!1,activeOn:"down",hoverCursor:null,moveCursor:null});var G=class extends zo{};Go(G,[vo]),_.setClass(G),_.setClass(G,"object");var Vo=(r,t,e,i)=>{let s=2*(i=Math.round(i))+1,{data:n}=r.getImageData(t-i,e-i,s,s);for(let a=3;a<n.length;a+=4)if(n[a]>0)return!1;return!0},No=class{constructor(r){this.options=r,this.strokeProjectionMagnitude=this.options.strokeWidth/2,this.scale=new v(this.options.scaleX,this.options.scaleY),this.strokeUniformScalar=this.options.strokeUniform?new v(1/this.options.scaleX,1/this.options.scaleY):new v(1,1)}createSideVector(r,t){let e=$r(r,t);return this.options.strokeUniform?e.multiply(this.scale):e}projectOrthogonally(r,t,e){return this.applySkew(r.add(this.calcOrthogonalProjection(r,t,e)))}isSkewed(){return this.options.skewX!==0||this.options.skewY!==0}applySkew(r){let t=new v(r);return t.y+=t.x*Math.tan(X(this.options.skewY)),t.x+=t.y*Math.tan(X(this.options.skewX)),t}scaleUnitVector(r,t){return r.multiply(this.strokeUniformScalar).scalarMultiply(t)}},kc=new v,Uo=class Si extends No{static getOrthogonalRotationFactor(t,e){let i=e?Ei(t,e):On(t);return Math.abs(i)<Kt?-1:1}constructor(t,e,i,s){super(s),m(this,"AB",void 0),m(this,"AC",void 0),m(this,"alpha",void 0),m(this,"bisector",void 0),this.A=new v(t),this.B=new v(e),this.C=new v(i),this.AB=this.createSideVector(this.A,this.B),this.AC=this.createSideVector(this.A,this.C),this.alpha=Ei(this.AB,this.AC),this.bisector=Wi(kn(this.AB.eq(kc)?this.AC:this.AB,this.alpha/2))}calcOrthogonalProjection(t,e,i=this.strokeProjectionMagnitude){let s=Mn(this.createSideVector(t,e)),n=Si.getOrthogonalRotationFactor(s,this.bisector);return this.scaleUnitVector(s,i*n)}projectBevel(){let t=[];return(this.alpha%_t===0?[this.B]:[this.B,this.C]).forEach(e=>{t.push(this.projectOrthogonally(this.A,e)),t.push(this.projectOrthogonally(this.A,e,-this.strokeProjectionMagnitude))}),t}projectMiter(){let t=[],e=Math.abs(this.alpha),i=1/Math.sin(e/2),s=this.scaleUnitVector(this.bisector,-this.strokeProjectionMagnitude*i),n=this.options.strokeUniform?Pi(this.scaleUnitVector(this.bisector,this.options.strokeMiterLimit)):this.options.strokeMiterLimit;return Pi(s)/this.strokeProjectionMagnitude<=n&&t.push(this.applySkew(this.A.add(s))),t.push(...this.projectBevel()),t}projectRoundNoSkew(t,e){let i=[],s=new v(Si.getOrthogonalRotationFactor(this.bisector),Si.getOrthogonalRotationFactor(new v(this.bisector.y,this.bisector.x)));return[new v(1,0).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(s),new v(0,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(s)].forEach(n=>{Ws(n,t,e)&&i.push(this.A.add(n))}),i}projectRoundWithSkew(t,e){let i=[],{skewX:s,skewY:n,scaleX:a,scaleY:o,strokeUniform:l}=this.options,h=new v(Math.tan(X(s)),Math.tan(X(n))),c=this.strokeProjectionMagnitude,u=l?c/o/Math.sqrt(1/o**2+1/a**2*h.y**2):c/Math.sqrt(1+h.y**2),d=new v(Math.sqrt(Math.max(c**2-u**2,0)),u),g=l?c/Math.sqrt(1+h.x**2*(1/o)**2/(1/a+1/a*h.x*h.y)**2):c/Math.sqrt(1+h.x**2/(1+h.x*h.y)**2),f=new v(g,Math.sqrt(Math.max(c**2-g**2,0)));return[f,f.scalarMultiply(-1),d,d.scalarMultiply(-1)].map(p=>this.applySkew(l?p.multiply(this.strokeUniformScalar):p)).forEach(p=>{Ws(p,t,e)&&i.push(this.applySkew(this.A).add(p))}),i}projectRound(){let t=[];t.push(...this.projectBevel());let e=this.alpha%_t===0,i=this.applySkew(this.A),s=t[e?0:2].subtract(i),n=t[+!!e].subtract(i),a=Fe(s,e?this.applySkew(this.AB.scalarMultiply(-1)):this.applySkew(this.bisector.multiply(this.strokeUniformScalar).scalarMultiply(-1)))>0,o=a?s:n,l=a?n:s;return this.isSkewed()?t.push(...this.projectRoundWithSkew(o,l)):t.push(...this.projectRoundNoSkew(o,l)),t}projectPoints(){switch(this.options.strokeLineJoin){case"miter":return this.projectMiter();case"round":return this.projectRound();default:return this.projectBevel()}}project(){return this.projectPoints().map(t=>({originPoint:this.A,projectedPoint:t,angle:this.alpha,bisector:this.bisector}))}},Oa=class extends No{constructor(r,t,e){super(e),this.A=new v(r),this.T=new v(t)}calcOrthogonalProjection(r,t,e=this.strokeProjectionMagnitude){let i=this.createSideVector(r,t);return this.scaleUnitVector(Mn(i),e)}projectButt(){return[this.projectOrthogonally(this.A,this.T,this.strokeProjectionMagnitude),this.projectOrthogonally(this.A,this.T,-this.strokeProjectionMagnitude)]}projectRound(){let r=[];if(!this.isSkewed()&&this.A.eq(this.T)){let t=new v(1,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar);r.push(this.applySkew(this.A.add(t)),this.applySkew(this.A.subtract(t)))}else r.push(...new Uo(this.A,this.T,this.T,this.options).projectRound());return r}projectSquare(){let r=[];if(this.A.eq(this.T)){let t=new v(1,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar);r.push(this.A.add(t),this.A.subtract(t))}else{let t=this.calcOrthogonalProjection(this.A,this.T,this.strokeProjectionMagnitude),e=this.scaleUnitVector(Wi(this.createSideVector(this.A,this.T)),-this.strokeProjectionMagnitude),i=this.A.add(e);r.push(i.add(t),i.subtract(t))}return r.map(t=>this.applySkew(t))}projectPoints(){switch(this.options.strokeLineCap){case"round":return this.projectRound();case"square":return this.projectSquare();default:return this.projectButt()}}project(){return this.projectPoints().map(r=>({originPoint:this.A,projectedPoint:r}))}},qo=(r,t,e=!1)=>{let i=[];if(r.length===0)return i;let s=r.reduce((n,a)=>(n[n.length-1].eq(a)||n.push(new v(a)),n),[new v(r[0])]);if(s.length===1)e=!0;else if(!e){let n=s[0],a=((o,l)=>{for(let h=o.length-1;h>=0;h--)if(l(o[h],h,o))return h;return-1})(s,o=>!o.eq(n));s.splice(a+1)}return s.forEach((n,a,o)=>{let l,h;a===0?(h=o[1],l=e?n:o[o.length-1]):a===o.length-1?(l=o[a-1],h=e?n:o[0]):(l=o[a-1],h=o[a+1]),e&&o.length===1?i.push(...new Oa(n,n,t).project()):!e||a!==0&&a!==o.length-1?i.push(...new Uo(n,l,h,t).project()):i.push(...new Oa(n,a===0?h:l,t).project())}),i},Yn=r=>{let t={};return Object.keys(r).forEach(e=>{t[e]={},Object.keys(r[e]).forEach(i=>{t[e][i]={...r[e][i]}})}),t},Ui=(r,t,e=!1)=>r.fill!==t.fill||r.stroke!==t.stroke||r.strokeWidth!==t.strokeWidth||r.fontSize!==t.fontSize||r.fontFamily!==t.fontFamily||r.fontWeight!==t.fontWeight||r.fontStyle!==t.fontStyle||r.textDecorationThickness!==t.textDecorationThickness||r.textDecorationColor!==t.textDecorationColor||r.textBackgroundColor!==t.textBackgroundColor||r.deltaY!==t.deltaY||e&&(r.overline!==t.overline||r.underline!==t.underline||r.linethrough!==t.linethrough),Ko=(r,t)=>{let e=t.split(`
|
|
38
|
-
`),i=[],s=-1,n={};r=Yn(r);for(let a=0;a<e.length;a++){let o=Yi(e[a]);if(r[a])for(let l=0;l<o.length;l++){s++;let h=r[a][l];h&&Object.keys(h).length>0&&(Ui(n,h,!0)?i.push({start:s,end:s+1,style:h}):i[i.length-1].end++),n=h||{}}else s+=o.length,n={}}return i},Jo=(r,t)=>{if(!Array.isArray(r))return Yn(r);let e=t.split(pn),i={},s=-1,n=0;for(let a=0;a<e.length;a++){let o=Yi(e[a]);for(let l=0;l<o.length;l++)s++,r[n]&&r[n].start<=s&&s<r[n].end&&(i[a]=i[a]||{},i[a][l]={...r[n].style},s===r[n].end-1&&n++)}return i},
|
|
39
|
-
`]}static async fromElement(t,e,i){let{left:s=0,top:n=0,width:a=0,height:o=0,visible:l=!0,...h}=zt(t,this.ATTRIBUTE_NAMES,i);return new this({...e,...h,left:s,top:n,width:a,height:o,visible:!!(l&&a&&o)})}};m(dt,"type","Rect"),m(dt,"cacheProperties",[...Wt,...Zo]),m(dt,"ownDefaults",{rx:0,ry:0}),m(dt,"ATTRIBUTE_NAMES",[...
|
|
37
|
+
`}toObject(){let t={color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling,type:this.constructor.type},e=Ci.ownDefaults;return this.includeDefaultValues?t:Sn(t,(i,s)=>i!==e[s])}static async fromObject(t){return new this(t)}};m(de,"ownDefaults",{color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1}),m(de,"type","shadow"),_.setClass(de,"shadow");var pe=(r,t,e)=>Math.max(r,Math.min(t,e)),Yh=["top",z,Zt,Qt,"flipX","flipY","originX","originY","angle","opacity","globalCompositeOperation","shadow","visible",We,He],Wt=[at,Dt,"strokeWidth","strokeDashArray","width","height","paintFirst","strokeUniform","strokeLineCap","strokeDashOffset","strokeLineJoin","strokeMiterLimit","backgroundColor","clipPath"],$h={top:0,left:0,width:0,height:0,angle:0,flipX:!1,flipY:!1,scaleX:1,scaleY:1,minScaleLimit:0,skewX:0,skewY:0,originX:F,originY:F,strokeWidth:1,strokeUniform:!1,padding:0,opacity:1,paintFirst:at,fill:"rgb(0,0,0)",fillRule:"nonzero",stroke:null,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,globalCompositeOperation:"source-over",backgroundColor:"",shadow:null,visible:!0,includeDefaultValues:!0,excludeFromExport:!1,objectCaching:!0,clipPath:void 0,inverted:!1,absolutePositioned:!1,centeredRotation:!0,centeredScaling:!1,dirty:!0},Wh=Gr({defaultEasing:()=>_o,easeInBack:()=>cc,easeInBounce:()=>To,easeInCirc:()=>sc,easeInCubic:()=>Hh,easeInElastic:()=>oc,easeInExpo:()=>ec,easeInOutBack:()=>dc,easeInOutBounce:()=>gc,easeInOutCirc:()=>ac,easeInOutCubic:()=>Gh,easeInOutElastic:()=>hc,easeInOutExpo:()=>ic,easeInOutQuad:()=>mc,easeInOutQuart:()=>Uh,easeInOutQuint:()=>Jh,easeInOutSine:()=>tc,easeInQuad:()=>fc,easeInQuart:()=>Vh,easeInQuint:()=>qh,easeInSine:()=>Zh,easeOutBack:()=>uc,easeOutBounce:()=>Ln,easeOutCirc:()=>nc,easeOutCubic:()=>zh,easeOutElastic:()=>lc,easeOutExpo:()=>rc,easeOutQuad:()=>pc,easeOutQuart:()=>Nh,easeOutQuint:()=>Kh,easeOutSine:()=>Qh}),jn=(r,t,e,i)=>(r<Math.abs(t)?(r=t,i=e/4):i=t===0&&r===0?e/_t*Math.asin(1):e/_t*Math.asin(t/r),{a:r,c:t,p:e,s:i}),So=(r,t,e,i,s)=>r*2**(10*--i)*Math.sin((i*s-t)*_t/e),_o=(r,t,e,i)=>-e*Math.cos(r/i*Jt)+e+t,Hh=(r,t,e,i)=>e*(r/i)**3+t,zh=(r,t,e,i)=>e*((r/i-1)**3+1)+t,Gh=(r,t,e,i)=>(r/=i/2)<1?e/2*r**3+t:e/2*((r-2)**3+2)+t,Vh=(r,t,e,i)=>e*(r/=i)*r**3+t,Nh=(r,t,e,i)=>-e*((r=r/i-1)*r**3-1)+t,Uh=(r,t,e,i)=>(r/=i/2)<1?e/2*r**4+t:-e/2*((r-=2)*r**3-2)+t,qh=(r,t,e,i)=>e*(r/i)**5+t,Kh=(r,t,e,i)=>e*((r/i-1)**5+1)+t,Jh=(r,t,e,i)=>(r/=i/2)<1?e/2*r**5+t:e/2*((r-2)**5+2)+t,Zh=(r,t,e,i)=>-e*Math.cos(r/i*Jt)+e+t,Qh=(r,t,e,i)=>e*Math.sin(r/i*Jt)+t,tc=(r,t,e,i)=>-e/2*(Math.cos(Math.PI*r/i)-1)+t,ec=(r,t,e,i)=>r===0?t:e*2**(10*(r/i-1))+t,rc=(r,t,e,i)=>r===i?t+e:e*-(2**(-10*r/i)+1)+t,ic=(r,t,e,i)=>r===0?t:r===i?t+e:(r/=i/2)<1?e/2*2**(10*(r-1))+t:e/2*-(2**(-10*(r-1))+2)+t,sc=(r,t,e,i)=>-e*(Math.sqrt(1-(r/=i)*r)-1)+t,nc=(r,t,e,i)=>e*Math.sqrt(1-(r=r/i-1)*r)+t,ac=(r,t,e,i)=>(r/=i/2)<1?-e/2*(Math.sqrt(1-r**2)-1)+t:e/2*(Math.sqrt(1-(r-=2)*r)+1)+t,oc=(r,t,e,i)=>{let s=e,n=0;if(r===0)return t;if((r/=i)===1)return t+e;n||(n=.3*i);let{a,s:o,p:l}=jn(s,e,n,1.70158);return-So(a,o,l,r,i)+t},lc=(r,t,e,i)=>{let s=e,n=0;if(r===0)return t;if((r/=i)===1)return t+e;n||(n=.3*i);let{a,s:o,p:l,c:h}=jn(s,e,n,1.70158);return a*2**(-10*r)*Math.sin((r*i-o)*_t/l)+h+t},hc=(r,t,e,i)=>{let s=e,n=0;if(r===0)return t;if((r/=i/2)==2)return t+e;n||(n=.3*1.5*i);let{a,s:o,p:l,c:h}=jn(s,e,n,1.70158);return r<1?-.5*So(a,o,l,r,i)+t:a*2**(-10*--r)*Math.sin((r*i-o)*_t/l)*.5+h+t},cc=(r,t,e,i,s=1.70158)=>e*(r/=i)*r*((s+1)*r-s)+t,uc=(r,t,e,i,s=1.70158)=>e*((r=r/i-1)*r*((s+1)*r+s)+1)+t,dc=(r,t,e,i,s=1.70158)=>(r/=i/2)<1?e/2*(r*r*((1+(s*=1.525))*r-s))+t:e/2*((r-=2)*r*((1+(s*=1.525))*r+s)+2)+t,Ln=(r,t,e,i)=>(r/=i)<1/2.75?e*(7.5625*r*r)+t:r<2/2.75?e*(7.5625*(r-=1.5/2.75)*r+.75)+t:r<2.5/2.75?e*(7.5625*(r-=2.25/2.75)*r+.9375)+t:e*(7.5625*(r-=2.625/2.75)*r+.984375)+t,To=(r,t,e,i)=>e-Ln(i-r,0,e,i)+t,gc=(r,t,e,i)=>r<i/2?.5*To(2*r,0,e,i)+t:.5*Ln(2*r-i,0,e,i)+.5*e+t,fc=(r,t,e,i)=>e*(r/=i)*r+t,pc=(r,t,e,i)=>-e*(r/=i)*(r-2)+t,mc=(r,t,e,i)=>(r/=i/2)<1?e/2*r**2+t:-e/2*(--r*(r-2)-1)+t,yc=()=>!1,Fn=class{constructor({startValue:r,byValue:t,duration:e=500,delay:i=0,easing:s=_o,onStart:n=bi,onChange:a=bi,onComplete:o=bi,abort:l=yc,target:h}){m(this,"_state","pending"),m(this,"durationProgress",0),m(this,"valueProgress",0),this.tick=this.tick.bind(this),this.duration=e,this.delay=i,this.easing=s,this._onStart=n,this._onChange=a,this._onComplete=o,this._abort=l,this.target=h,this.startValue=r,this.byValue=t,this.value=this.startValue,this.endValue=Object.freeze(this.calculate(this.duration).value)}get state(){return this._state}isDone(){return this._state==="aborted"||this._state==="completed"}start(){let r=t=>{this._state==="pending"&&(this.startTime=t||+new Date,this._state="running",this._onStart(),this.tick(this.startTime))};this.register(),this.delay>0?this.timeout=ge().setTimeout(()=>Br(r),this.delay):Br(r)}tick(r){let t=(r||+new Date)-this.startTime,e=Math.min(t,this.duration);this.durationProgress=e/this.duration;let{value:i,valueProgress:s}=this.calculate(e);this.value=Object.freeze(i),this.valueProgress=s,this._state!=="aborted"&&(this._abort(this.value,this.valueProgress,this.durationProgress)?(this._state="aborted",this.unregister()):t>=this.duration?(this.durationProgress=this.valueProgress=1,this._onChange(this.endValue,this.valueProgress,this.durationProgress),this._state="completed",this._onComplete(this.endValue,this.valueProgress,this.durationProgress),this.unregister(),this.timeout=null):(this._onChange(this.value,this.valueProgress,this.durationProgress),Br(this.tick)))}register(){Oi.push(this)}unregister(){Oi.remove(this)}abort(){this._state="aborted",this.unregister(),this.timeout&&ge().clearTimeout(this.timeout)}},vc=class extends Fn{constructor({startValue:r=0,endValue:t=100,...e}){super({...e,startValue:r,byValue:t-r})}calculate(r){let t=this.easing(r,this.startValue,this.byValue,this.duration);return{value:t,valueProgress:Math.abs((t-this.startValue)/this.byValue)}}},bc=class extends Fn{constructor({startValue:r=[0],endValue:t=[100],...e}){super({...e,startValue:r,byValue:t.map((i,s)=>i-r[s])})}calculate(r){let t=this.startValue.map((e,i)=>this.easing(r,e,this.byValue[i],this.duration,i));return{value:t,valueProgress:Math.abs((t[0]-this.startValue[0])/this.byValue[0])}}},xc=(r,t,e,i)=>t+e*(1-Math.cos(r/i*Jt)),As=r=>r&&((t,e,i)=>r(new ft(t).toRgba(),e,i)),Cc=class extends Fn{constructor({startValue:r,endValue:t,easing:e=xc,onChange:i,onComplete:s,abort:n,...a}){let o=new ft(r).getSource(),l=new ft(t).getSource();super({...a,startValue:o,byValue:l.map((h,c)=>h-o[c]),easing:e,onChange:As(i),onComplete:As(s),abort:As(n)})}calculate(r){let[t,e,i,s]=this.startValue.map((a,o)=>this.easing(r,a,this.byValue[o],this.duration,o)),n=[...[t,e,i].map(Math.round),pe(0,s,1)];return{value:n,valueProgress:n.map((a,o)=>this.byValue[o]===0?0:Math.abs((a-this.startValue[o])/this.byValue[o])).find(a=>a!==0)||0}}};function In(r){let t=(e=>Array.isArray(e.startValue)||Array.isArray(e.endValue))(r)?new bc(r):new vc(r);return t.start(),t}function ko(r){let t=new Cc(r);return t.start(),t}var Yr=class V{constructor(t){this.status=t,this.points=[]}includes(t){return this.points.some(e=>e.eq(t))}append(...t){return this.points=this.points.concat(t.filter(e=>!this.includes(e))),this}static isPointContained(t,e,i,s=!1){if(e.eq(i))return t.eq(e);if(e.x===i.x)return t.x===e.x&&(s||t.y>=Math.min(e.y,i.y)&&t.y<=Math.max(e.y,i.y));if(e.y===i.y)return t.y===e.y&&(s||t.x>=Math.min(e.x,i.x)&&t.x<=Math.max(e.x,i.x));{let n=Wr(e,i),a=Wr(e,t).divide(n);return s?Math.abs(a.x)===Math.abs(a.y):a.x===a.y&&a.x>=0&&a.x<=1}}static isPointInPolygon(t,e){let i=new v(t).setX(Math.min(t.x-1,...e.map(n=>n.x))),s=0;for(let n=0;n<e.length;n++){let a=this.intersectSegmentSegment(e[n],e[(n+1)%e.length],t,i);if(a.includes(t))return!0;s+=+(a.status==="Intersection")}return s%2==1}static intersectLineLine(t,e,i,s,n=!0,a=!0){let o=e.x-t.x,l=e.y-t.y,h=s.x-i.x,c=s.y-i.y,u=t.x-i.x,d=t.y-i.y,g=h*d-c*u,f=o*d-l*u,p=c*o-h*l;if(p!==0){let y=g/p,b=f/p;return(n||0<=y&&y<=1)&&(a||0<=b&&b<=1)?new V("Intersection").append(new v(t.x+y*o,t.y+y*l)):new V}return new V(g===0||f===0?n||a||V.isPointContained(t,i,s)||V.isPointContained(e,i,s)||V.isPointContained(i,t,e)||V.isPointContained(s,t,e)?"Coincident":void 0:"Parallel")}static intersectSegmentLine(t,e,i,s){return V.intersectLineLine(t,e,i,s,!1,!0)}static intersectSegmentSegment(t,e,i,s){return V.intersectLineLine(t,e,i,s,!1,!1)}static intersectLinePolygon(t,e,i,s=!0){let n=new V,a=i.length;for(let o,l,h,c=0;c<a;c++){if(o=i[c],l=i[(c+1)%a],h=V.intersectLineLine(t,e,o,l,s,!1),h.status==="Coincident")return h;n.append(...h.points)}return n.points.length>0&&(n.status="Intersection"),n}static intersectSegmentPolygon(t,e,i){return V.intersectLinePolygon(t,e,i,!1)}static intersectPolygonPolygon(t,e){let i=new V,s=t.length,n=[];for(let a=0;a<s;a++){let o=t[a],l=t[(a+1)%s],h=V.intersectSegmentPolygon(o,l,e);h.status==="Coincident"?(n.push(h),i.append(o,l)):i.append(...h.points)}return n.length>0&&n.length===t.length?new V("Coincident"):(i.points.length>0&&(i.status="Intersection"),i)}static intersectPolygonRectangle(t,e,i){let s=e.min(i),n=e.max(i),a=new v(n.x,s.y),o=new v(s.x,n.y);return V.intersectPolygonPolygon(t,[s,a,n,o])}},wc=class extends Ja{getX(){return this.getXY().x}setX(r){this.setXY(this.getXY().setX(r))}getY(){return this.getXY().y}setY(r){this.setXY(this.getXY().setY(r))}getRelativeX(){return this.left}setRelativeX(r){this.left=r}getRelativeY(){return this.top}setRelativeY(r){this.top=r}getXY(){let r=this.getRelativeXY();return this.group?J(r,this.group.calcTransformMatrix()):r}setXY(r,t,e){this.group&&(r=J(r,lt(this.group.calcTransformMatrix()))),this.setRelativeXY(r,t,e)}getRelativeXY(){return new v(this.left,this.top)}setRelativeXY(r,t=this.originX,e=this.originY){this.setPositionByOrigin(r,t,e)}isStrokeAccountedForInDimensions(){return!1}getCoords(){let{tl:r,tr:t,br:e,bl:i}=this.aCoords||(this.aCoords=this.calcACoords()),s=[r,t,e,i];if(this.group){let n=this.group.calcTransformMatrix();return s.map(a=>J(a,n))}return s}intersectsWithRect(r,t){return Yr.intersectPolygonRectangle(this.getCoords(),r,t).status==="Intersection"}intersectsWithObject(r){let t=Yr.intersectPolygonPolygon(this.getCoords(),r.getCoords());return t.status==="Intersection"||t.status==="Coincident"||r.isContainedWithinObject(this)||this.isContainedWithinObject(r)}isContainedWithinObject(r){return this.getCoords().every(t=>r.containsPoint(t))}isContainedWithinRect(r,t){let{left:e,top:i,width:s,height:n}=this.getBoundingRect();return e>=r.x&&e+s<=t.x&&i>=r.y&&i+n<=t.y}isOverlapping(r){return this.intersectsWithObject(r)||this.isContainedWithinObject(r)||r.isContainedWithinObject(this)}containsPoint(r){return Yr.isPointInPolygon(r,this.getCoords())}isOnScreen(){if(!this.canvas)return!1;let{tl:r,br:t}=this.canvas.vptCoords;return!!this.getCoords().some(e=>e.x<=t.x&&e.x>=r.x&&e.y<=t.y&&e.y>=r.y)||!!this.intersectsWithRect(r,t)||this.containsPoint(r.midPointFrom(t))}isPartiallyOnScreen(){if(!this.canvas)return!1;let{tl:r,br:t}=this.canvas.vptCoords;return!!this.intersectsWithRect(r,t)||this.getCoords().every(e=>(e.x>=t.x||e.x<=r.x)&&(e.y>=t.y||e.y<=r.y))&&this.containsPoint(r.midPointFrom(t))}getBoundingRect(){return Et(this.getCoords())}getScaledWidth(){return this._getTransformedDimensions().x}getScaledHeight(){return this._getTransformedDimensions().y}scale(r){this._set(Zt,r),this._set(Qt,r),this.setCoords()}scaleToWidth(r){let t=this.getBoundingRect().width/this.getScaledWidth();return this.scale(r/this.width/t)}scaleToHeight(r){let t=this.getBoundingRect().height/this.getScaledHeight();return this.scale(r/this.height/t)}getCanvasRetinaScaling(){var r;return((r=this.canvas)==null?void 0:r.getRetinaScaling())||1}getTotalAngle(){return this.group?Yt(bn(this.calcTransformMatrix())):this.angle}getViewportTransform(){var r;return((r=this.canvas)==null?void 0:r.viewportTransform)||nt.concat()}calcACoords(){let r=me({angle:this.angle}),{x:t,y:e}=this.getRelativeCenterPoint(),i=Y(ze(t,e),r),s=this._getTransformedDimensions(),n=s.x/2,a=s.y/2;return{tl:J({x:-n,y:-a},i),tr:J({x:n,y:-a},i),bl:J({x:-n,y:a},i),br:J({x:n,y:a},i)}}setCoords(){this.aCoords=this.calcACoords()}transformMatrixKey(r=!1){let t=[];return!r&&this.group&&(t=this.group.transformMatrixKey(r)),t.push(this.top,this.left,this.width,this.height,this.scaleX,this.scaleY,this.angle,this.strokeWidth,this.skewX,this.skewY,+this.flipX,+this.flipY,it(this.originX),it(this.originY)),t}calcTransformMatrix(r=!1){let t=this.calcOwnMatrix();if(r||!this.group)return t;let e=this.transformMatrixKey(r),i=this.matrixCache;return i&&i.key.every((s,n)=>s===e[n])?i.value:(this.group&&(t=Y(this.group.calcTransformMatrix(!1),t)),this.matrixCache={key:e,value:t},t)}calcOwnMatrix(){let r=this.transformMatrixKey(!0),t=this.ownMatrixCache;if(t&&t.key.every((s,n)=>s===r[n]))return t.value;let e=this.getRelativeCenterPoint(),i=io({angle:this.angle,translateX:e.x,translateY:e.y,scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY});return this.ownMatrixCache={key:r,value:i},i}_getNonTransformedDimensions(){return new v(this.width,this.height).scalarAdd(this.strokeWidth)}_calculateCurrentDimensions(r){var t;let e=(t=this.canvas)==null?void 0:t.viewportTransform,i=this._getTransformedDimensions(r);return e?i.multiply(new v(xn(e),eo(e))).scalarAdd(2*this.padding):i.scalarAdd(2*this.padding)}_getTransformedDimensions(r={}){let t={scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,width:this.width,height:this.height,strokeWidth:this.strokeWidth,...r},e=t.strokeWidth,i=e,s=0;this.strokeUniform&&(i=0,s=e);let n=t.width+i,a=t.height+i,o;return o=t.skewX===0&&t.skewY===0?new v(n*t.scaleX,a*t.scaleY):$i(n,a,Vr(t)),o.scalarAdd(s)}translateToGivenOrigin(r,t,e,i,s){let n=r.x,a=r.y,o=it(i)-it(t),l=it(s)-it(e);if(o||l){let h=this._getTransformedDimensions();n+=o*h.x,a+=l*h.y}return new v(n,a)}translateToCenterPoint(r,t,e){if(t==="center"&&e==="center")return r;let i=this.translateToGivenOrigin(r,t,e,F,F);return this.angle?i.rotate(X(this.angle),r):i}translateToOriginPoint(r,t,e){let i=this.translateToGivenOrigin(r,F,F,t,e);return this.angle?i.rotate(X(this.angle),r):i}getCenterPoint(){let r=this.getRelativeCenterPoint();return this.group?J(r,this.group.calcTransformMatrix()):r}getRelativeCenterPoint(){return this.translateToCenterPoint(new v(this.left,this.top),this.originX,this.originY)}getPointByOrigin(r,t){return this.getPositionByOrigin(r,t)}getPositionByOrigin(r,t){return this.translateToOriginPoint(this.getRelativeCenterPoint(),r,t)}setPositionByOrigin(r,t,e){let i=this.translateToCenterPoint(r,t,e),s=this.translateToOriginPoint(i,this.originX,this.originY);this.set({left:s.x,top:s.y})}_getLeftTopCoords(){return this.getPositionByOrigin(z,"top")}positionByLeftTop(r){return this.setPositionByOrigin(r,z,"top")}},It=class wi extends wc{static getDefaults(){return wi.ownDefaults}get type(){let t=this.constructor.type;return t==="FabricObject"?"object":t.toLowerCase()}set type(t){Xt("warn","Setting type has no effect",t)}constructor(t){super(),m(this,"_cacheContext",null),Object.assign(this,wi.ownDefaults),this.setOptions(t)}_createCacheCanvas(){this._cacheCanvas=jt(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0}_limitCacheSize(t){let e=t.width,i=t.height,s=L.maxCacheSideLimit,n=L.minCacheSideLimit;if(e<=s&&i<=s&&e*i<=L.perfLimitSizeTotal)return e<n&&(t.width=n),i<n&&(t.height=n),t;let a=e/i,[o,l]=Rr.limitDimsByArea(a),h=pe(n,o,s),c=pe(n,l,s);return e>h&&(t.zoomX/=e/h,t.width=h,t.capped=!0),i>c&&(t.zoomY/=i/c,t.height=c,t.capped=!0),t}_getCacheCanvasDimensions(){let t=this.getTotalObjectScaling(),e=this._getTransformedDimensions({skewX:0,skewY:0}),i=e.x*t.x/this.scaleX,s=e.y*t.y/this.scaleY;return{width:Math.ceil(i+2),height:Math.ceil(s+2),zoomX:t.x,zoomY:t.y,x:i,y:s}}_updateCacheCanvas(){let t=this._cacheCanvas,e=this._cacheContext,{width:i,height:s,zoomX:n,zoomY:a,x:o,y:l}=this._limitCacheSize(this._getCacheCanvasDimensions()),h=i!==t.width||s!==t.height,c=this.zoomX!==n||this.zoomY!==a;if(!t||!e)return!1;if(h||c){i!==t.width||s!==t.height?(t.width=i,t.height=s):(e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,t.width,t.height));let u=o/2,d=l/2;return this.cacheTranslationX=Math.round(t.width/2-u)+u,this.cacheTranslationY=Math.round(t.height/2-d)+d,e.translate(this.cacheTranslationX,this.cacheTranslationY),e.scale(n,a),this.zoomX=n,this.zoomY=a,!0}return!1}setOptions(t={}){this._setOptions(t)}transform(t){let e=this.group&&!this.group._transformDone||this.group&&this.canvas&&t===this.canvas.contextTop,i=this.calcTransformMatrix(!e);t.transform(i[0],i[1],i[2],i[3],i[4],i[5])}getObjectScaling(){if(!this.group)return new v(Math.abs(this.scaleX),Math.abs(this.scaleY));let t=fe(this.calcTransformMatrix());return new v(Math.abs(t.scaleX),Math.abs(t.scaleY))}getTotalObjectScaling(){let t=this.getObjectScaling();if(this.canvas){let e=this.canvas.getZoom(),i=this.getCanvasRetinaScaling();return t.scalarMultiply(e*i)}return t}getObjectOpacity(){let t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t}_constrainScale(t){return Math.abs(t)<this.minScaleLimit?t<0?-this.minScaleLimit:this.minScaleLimit:t===0?1e-4:t}_set(t,e){t!=="scaleX"&&t!=="scaleY"||(e=this._constrainScale(e)),t==="scaleX"&&e<0?(this.flipX=!this.flipX,e*=-1):t==="scaleY"&&e<0?(this.flipY=!this.flipY,e*=-1):t!=="shadow"||!e||e instanceof de||(e=new de(e));let i=this[t]!==e;return this[t]=e,i&&this.constructor.cacheProperties.includes(t)&&(this.dirty=!0),this.parent&&(this.dirty||i&&this.constructor.stateProperties.includes(t))&&this.parent._set("dirty",!0),this}isNotVisible(){return this.opacity===0||!this.width&&!this.height&&this.strokeWidth===0||!this.visible}render(t){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(t)):(this._removeCacheCanvas(),this.drawObject(t,!1,{}),this.dirty=!1),t.restore())}drawSelectionBackground(t){}renderCache(t){if(t=t||{},this._cacheCanvas&&this._cacheContext||this._createCacheCanvas(),this.isCacheDirty()&&this._cacheContext){let{zoomX:e,zoomY:i,cacheTranslationX:s,cacheTranslationY:n}=this,{width:a,height:o}=this._cacheCanvas;this.drawObject(this._cacheContext,t.forClipping,{zoomX:e,zoomY:i,cacheTranslationX:s,cacheTranslationY:n,width:a,height:o,parentClipPaths:[]}),this.dirty=!1}}_removeCacheCanvas(){this._cacheCanvas=void 0,this._cacheContext=null}hasStroke(){return!!this.stroke&&this.stroke!=="transparent"&&this.strokeWidth!==0}hasFill(){return!!this.fill&&this.fill!=="transparent"}needsItsOwnCache(){return!!(this.paintFirst==="stroke"&&this.hasFill()&&this.hasStroke()&&this.shadow)||!!this.clipPath}shouldCache(){return this.ownCaching=this.objectCaching&&(!this.parent||!this.parent.isOnACache())||this.needsItsOwnCache(),this.ownCaching}willDrawShadow(){return!!this.shadow&&(this.shadow.offsetX!==0||this.shadow.offsetY!==0)}drawClipPathOnCache(t,e,i){t.save(),e.inverted?t.globalCompositeOperation="destination-out":t.globalCompositeOperation="destination-in",t.setTransform(1,0,0,1,0,0),t.drawImage(i,0,0),t.restore()}drawObject(t,e,i){let s=this.fill,n=this.stroke;e?(this.fill="black",this.stroke="",this._setClippingProperties(t)):this._renderBackground(t),this.fire("before:render",{ctx:t}),this._render(t),this._drawClipPath(t,this.clipPath,i),this.fill=s,this.stroke=n}createClipPathLayer(t,e){let i=gt(e),s=i.getContext("2d");if(s.translate(e.cacheTranslationX,e.cacheTranslationY),s.scale(e.zoomX,e.zoomY),t._cacheCanvas=i,e.parentClipPaths.forEach(n=>{n.transform(s)}),e.parentClipPaths.push(t),t.absolutePositioned){let n=lt(this.calcTransformMatrix());s.transform(n[0],n[1],n[2],n[3],n[4],n[5])}return t.transform(s),t.drawObject(s,!0,e),i}_drawClipPath(t,e,i){if(!e)return;e._transformDone=!0;let s=this.createClipPathLayer(e,i);this.drawClipPathOnCache(t,e,s)}drawCacheOnCanvas(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)}isCacheDirty(t=!1){if(this.isNotVisible())return!1;let e=this._cacheCanvas,i=this._cacheContext;return!(!e||!i||t||!this._updateCacheCanvas())||!!(this.dirty||this.clipPath&&this.clipPath.absolutePositioned)&&(e&&i&&!t&&(i.save(),i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,e.width,e.height),i.restore()),!0)}_renderBackground(t){if(!this.backgroundColor)return;let e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}_setOpacity(t){this.group&&!this.group._transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity}_setStrokeStyles(t,e){let i=e.stroke;i&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineDashOffset=e.strokeDashOffset,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,yt(i)?i.gradientUnits==="percentage"||i.gradientTransform||i.patternTransform?this._applyPatternForTransformedGradient(t,i):(t.strokeStyle=i.toLive(t),this._applyPatternGradientTransform(t,i)):t.strokeStyle=e.stroke)}_setFillStyles(t,{fill:e}){e&&(yt(e)?(t.fillStyle=e.toLive(t),this._applyPatternGradientTransform(t,e)):t.fillStyle=e)}_setClippingProperties(t){t.globalAlpha=1,t.strokeStyle="transparent",t.fillStyle="#000000"}_setLineDash(t,e){e&&e.length!==0&&t.setLineDash(e)}_setShadow(t){if(!this.shadow)return;let e=this.shadow,i=this.canvas,s=this.getCanvasRetinaScaling(),[n,,,a]=i?.viewportTransform||nt,o=n*s,l=a*s,h=e.nonScaling?new v(1,1):this.getObjectScaling();t.shadowColor=e.color,t.shadowBlur=e.blur*L.browserShadowBlurConstant*(o+l)*(h.x+h.y)/4,t.shadowOffsetX=e.offsetX*o*h.x,t.shadowOffsetY=e.offsetY*l*h.y}_removeShadow(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)}_applyPatternGradientTransform(t,e){if(!yt(e))return{offsetX:0,offsetY:0};let i=e.gradientTransform||e.patternTransform,s=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;return e.gradientUnits==="percentage"?t.transform(this.width,0,0,this.height,s,n):t.transform(1,0,0,1,s,n),i&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:s,offsetY:n}}_renderPaintInOrder(t){this.paintFirst==="stroke"?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))}_render(t){}_renderFill(t){this.fill&&(t.save(),this._setFillStyles(t,this),this.fillRule==="evenodd"?t.fill("evenodd"):t.fill(),t.restore())}_renderStroke(t){if(this.stroke&&this.strokeWidth!==0){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this.strokeUniform){let e=this.getObjectScaling();t.scale(1/e.x,1/e.y)}this._setLineDash(t,this.strokeDashArray),this._setStrokeStyles(t,this),t.stroke(),t.restore()}}_applyPatternForTransformedGradient(t,e){var i;let s=this._limitCacheSize(this._getCacheCanvasDimensions()),n=this.getCanvasRetinaScaling(),a=s.x/this.scaleX/n,o=s.y/this.scaleY/n,l=gt({width:Math.ceil(a),height:Math.ceil(o)}),h=l.getContext("2d");h&&(h.beginPath(),h.moveTo(0,0),h.lineTo(a,0),h.lineTo(a,o),h.lineTo(0,o),h.closePath(),h.translate(a/2,o/2),h.scale(s.zoomX/this.scaleX/n,s.zoomY/this.scaleY/n),this._applyPatternGradientTransform(h,e),h.fillStyle=e.toLive(t),h.fill(),t.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),t.scale(n*this.scaleX/s.zoomX,n*this.scaleY/s.zoomY),t.strokeStyle=(i=h.createPattern(l,"no-repeat"))==null?"":i)}_findCenterFromElement(){return new v(this.left+this.width/2,this.top+this.height/2)}clone(t){let e=this.toObject(t);return this.constructor.fromObject(e)}cloneAsImage(t){let e=this.toCanvasElement(t);return new(_.getClass("image"))(e)}toCanvasElement(t={}){let e=_n(this),i=this.group,s=this.shadow,n=Math.abs,a=t.enableRetinaScaling?$a():1,o=(t.multiplier||1)*a,l=t.canvasProvider||(x=>new Ge(x,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1}));delete this.group,t.withoutTransform&&uo(this),t.withoutShadow&&(this.shadow=null),t.viewportTransform&&Tn(this,this.getViewportTransform()),this.setCoords();let h=jt(),c=this.getBoundingRect(),u=this.shadow,d=new v;if(u){let x=u.blur,C=u.nonScaling?new v(1,1):this.getObjectScaling();d.x=2*Math.round(n(u.offsetX)+x)*n(C.x),d.y=2*Math.round(n(u.offsetY)+x)*n(C.y)}let g=c.width+d.x,f=c.height+d.y;h.width=Math.ceil(g),h.height=Math.ceil(f);let p=l(h);t.format==="jpeg"&&(p.backgroundColor="#fff"),this.setPositionByOrigin(new v(p.width/2,p.height/2),F,F);let y=this.canvas;p._objects=[this],this.set("canvas",p),this.setCoords();let b=p.toCanvasElement(o||1,t);return this.set("canvas",y),this.shadow=s,i&&(this.group=i),this.set(e),this.setCoords(),p._objects=[],p.destroy(),b}toDataURL(t={}){return yn(this.toCanvasElement(t),t.format||"png",t.quality||1)}toBlob(t={}){return vn(this.toCanvasElement(t),t.format||"png",t.quality||1)}isType(...t){return t.includes(this.constructor.type)||t.includes(this.type)}complexity(){return 1}toJSON(){return this.toObject()}rotate(t){let{centeredRotation:e,originX:i,originY:s}=this;if(e){let{x:n,y:a}=this.getRelativeCenterPoint();this.originX=F,this.originY=F,this.left=n,this.top=a}if(this.set("angle",t),e){let{x:n,y:a}=this.getPositionByOrigin(i,s);this.left=n,this.top=a,this.originX=i,this.originY=s}}setOnGroup(){}_setupCompositeOperation(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}dispose(){Oi.cancelByTarget(this),this.off(),this._set("canvas",void 0),this._cacheCanvas&&At().dispose(this._cacheCanvas),this._cacheCanvas=void 0,this._cacheContext=null}animate(t,e){return Object.entries(t).reduce((i,[s,n])=>(i[s]=this._animate(s,n,e),i),{})}_animate(t,e,i={}){let s=t.split("."),n=this.constructor.colorProperties.includes(s[s.length-1]),{abort:a,startValue:o,onChange:l,onComplete:h}=i,c={...i,target:this,startValue:o??s.reduce((u,d)=>u[d],this),endValue:e,abort:a?.bind(this),onChange:(u,d,g)=>{s.reduce((f,p,y)=>(y===s.length-1&&(f[p]=u),f[p]),this),l&&l(u,d,g)},onComplete:(u,d,g)=>{this.setCoords(),h&&h(u,d,g)}};return n?ko(c):In(c)}isDescendantOf(t){let{parent:e,group:i}=this;return e===t||i===t||!!e&&e.isDescendantOf(t)||!!i&&i!==e&&i.isDescendantOf(t)}getAncestors(){let t=[],e=this;do e=e.parent,e&&t.push(e);while(e);return t}findCommonAncestors(t){if(this===t)return{fork:[],otherFork:[],common:[this,...this.getAncestors()]};let e=this.getAncestors(),i=t.getAncestors();if(e.length===0&&i.length>0&&this===i[i.length-1])return{fork:[],otherFork:[t,...i.slice(0,i.length-1)],common:[this]};for(let s,n=0;n<e.length;n++){if(s=e[n],s===t)return{fork:[this,...e.slice(0,n)],otherFork:[],common:e.slice(n)};for(let a=0;a<i.length;a++){if(this===i[a])return{fork:[],otherFork:[t,...i.slice(0,a)],common:[this,...e]};if(s===i[a])return{fork:[this,...e.slice(0,n)],otherFork:[t,...i.slice(0,a)],common:e.slice(n)}}}return{fork:[this,...e],otherFork:[t,...i],common:[]}}hasCommonAncestors(t){let e=this.findCommonAncestors(t);return e&&!!e.common.length}isInFrontOf(t){if(this===t)return;let e=this.findCommonAncestors(t);if(e.fork.includes(t))return!0;if(e.otherFork.includes(this))return!1;let i=e.common[0]||this.canvas;if(!i)return;let s=e.fork.pop(),n=e.otherFork.pop(),a=i._objects.indexOf(s),o=i._objects.indexOf(n);return a>-1&&a>o}toObject(t=[]){let e=t.concat(wi.customProperties,this.constructor.customProperties||[]),i,s=L.NUM_FRACTION_DIGITS,{clipPath:n,fill:a,stroke:o,shadow:l,strokeDashArray:h,left:c,top:u,originX:d,originY:g,width:f,height:p,strokeWidth:y,strokeLineCap:b,strokeDashOffset:x,strokeLineJoin:C,strokeUniform:S,strokeMiterLimit:w,scaleX:k,scaleY:T,angle:O,flipX:M,flipY:D,opacity:E,visible:A,backgroundColor:j,fillRule:B,paintFirst:q,globalCompositeOperation:$,skewX:tt,skewY:ht}=this;n&&!n.excludeFromExport&&(i=n.toObject(e.concat("inverted","absolutePositioned")));let I=cr=>R(cr,s),Ot={...ye(this,e),type:this.constructor.type,version:Ys,originX:d,originY:g,left:I(c),top:I(u),width:I(f),height:I(p),fill:da(a)?a.toObject():a,stroke:da(o)?o.toObject():o,strokeWidth:I(y),strokeDashArray:h&&h.concat(),strokeLineCap:b,strokeDashOffset:x,strokeLineJoin:C,strokeUniform:S,strokeMiterLimit:I(w),scaleX:I(k),scaleY:I(T),angle:I(O),flipX:M,flipY:D,opacity:I(E),shadow:l&&l.toObject(),visible:A,backgroundColor:j,fillRule:B,paintFirst:q,globalCompositeOperation:$,skewX:I(tt),skewY:I(ht),...i?{clipPath:i}:null};return this.includeDefaultValues?Ot:this._removeDefaultValues(Ot)}toDatalessObject(t){return this.toObject(t)}_removeDefaultValues(t){let e=this.constructor.getDefaults(),i=Object.keys(e).length>0?e:Object.getPrototypeOf(this);return Sn(t,(s,n)=>{if(n==="left"||n==="top"||n==="type")return!0;let a=i[n];return s!==a&&!(Array.isArray(s)&&Array.isArray(a)&&s.length===0&&a.length===0)})}toString(){return`#<${this.constructor.type}>`}static _fromObject({type:t,...e},{extraParam:i,...s}={}){return Nr(e,s).then(n=>i?(delete n[i],new this(e[i],n)):new this(n))}static fromObject(t,e){return this._fromObject(t,e)}};m(It,"stateProperties",Yh),m(It,"cacheProperties",Wt),m(It,"ownDefaults",$h),m(It,"type","FabricObject"),m(It,"colorProperties",[at,Dt,"backgroundColor"]),m(It,"customProperties",[]),_.setClass(It),_.setClass(It,"object");var Rn=(r,t)=>{var e;let{transform:{target:i}}=t;(e=i.canvas)==null||e.fire(`object:${r}`,{...t,target:i}),i.fire(r,t)},Ht=(r,t,e)=>(i,s,n,a)=>{let o=t(i,s,n,a);return o&&Rn(r,{...En(i,s,n,a),...e}),o};function te(r){return(t,e,i,s)=>{let{target:n,originX:a,originY:o}=e,l=n.getPositionByOrigin(a,o),h=r(t,e,i,s);return n.setPositionByOrigin(l,e.originX,e.originY),h}}var Oo=(r,t,e,i)=>(s,n,a,o)=>{let l=Hi(n,n.originX,n.originY,a,o)[e],h=it(n[t]);if(h===0||h>0&&l<0||h<0&&l>0){let{target:c}=n,u=c.strokeWidth/(c.strokeUniform?c[i]:1),d=mo(n)?2:1,g=c[r],f=Math.abs(l*d/c[i])-u;return c.set(r,Math.max(f,1)),g!==c[r]}return!1},Mo=Oo("width","originX","x","scaleX"),Po=Oo("height","originY","y","scaleY"),zs=Ht($r,te(Mo)),Sc=Ht($r,te(Po));function Eo(r,t,e,i,s){r.save();let{stroke:n,xSize:a,ySize:o,opName:l}=this.commonRenderProps(r,t,e,s,i),h=a;a>o?r.scale(1,o/a):o>a&&(h=o,r.scale(a/o,1)),r.beginPath(),r.arc(0,0,h/2,0,_t,!1),r[l](),n&&r.stroke(),r.restore()}function Ao(r,t,e,i,s){r.save();let{stroke:n,xSize:a,ySize:o,opName:l}=this.commonRenderProps(r,t,e,s,i),h=a/2,c=o/2;r[`${l}Rect`](-h,-c,a,o),n&&r.strokeRect(-h,-c,a,o),r.restore()}var ut=class{constructor(r){m(this,"visible",!0),m(this,"actionName",Ua),m(this,"angle",0),m(this,"x",0),m(this,"y",0),m(this,"offsetX",0),m(this,"offsetY",0),m(this,"sizeX",0),m(this,"sizeY",0),m(this,"touchSizeX",0),m(this,"touchSizeY",0),m(this,"cursorStyle","crosshair"),m(this,"withConnection",!1),Object.assign(this,r)}getTransformAnchorPoint(){var r;return(r=this.transformAnchorPoint)==null?new v(.5-this.x,.5-this.y):r}shouldActivate(r,t,e,{tl:i,tr:s,br:n,bl:a}){var o;return((o=t.canvas)==null?void 0:o.getActiveObject())===t&&t.isControlVisible(r)&&Yr.isPointInPolygon(e,[i,s,n,a])}getActionHandler(r,t,e){return this.actionHandler}getMouseDownHandler(r,t,e){return this.mouseDownHandler}getMouseUpHandler(r,t,e){return this.mouseUpHandler}cursorStyleHandler(r,t,e,i){return t.cursorStyle}getActionName(r,t,e){return t.actionName}getVisibility(r,t){var e,i;return(e=(i=r._controlsVisibility)==null?void 0:i[t])==null?this.visible:e}setVisibility(r,t,e){this.visible=r}positionHandler(r,t,e,i){return new v(this.x*r.x+this.offsetX,this.y*r.y+this.offsetY).transform(t)}calcCornerCoords(r,t,e,i,s,n){let a=Bi([ze(e,i),me({angle:r}),Xi((s?this.touchSizeX:this.sizeX)||t,(s?this.touchSizeY:this.sizeY)||t)]);return{tl:new v(-.5,-.5).transform(a),tr:new v(.5,-.5).transform(a),br:new v(.5,.5).transform(a),bl:new v(-.5,.5).transform(a)}}commonRenderProps(r,t,e,i,s={}){let{cornerSize:n,cornerColor:a,transparentCorners:o,cornerStrokeColor:l}=s,h=n||i.cornerSize,c=this.sizeX||h,u=this.sizeY||h,d=o===void 0?i.transparentCorners:o,g=d?Dt:at,f=l||i.cornerStrokeColor,p=!d&&!!f;return r.fillStyle=a||i.cornerColor||"",r.strokeStyle=f||"",r.translate(t,e),r.rotate(X(i.getTotalAngle())),{stroke:p,xSize:c,ySize:u,transparentCorners:d,opName:g}}render(r,t,e,i,s){((i=i||{}).cornerStyle||s.cornerStyle)==="circle"?Eo.call(this,r,t,e,i,s):Ao.call(this,r,t,e,i,s)}},Do=(r,t,e)=>e.lockRotation?Pn:t.cursorStyle,jo=Ht(za,te((r,{target:t,ex:e,ey:i,theta:s,originX:n,originY:a},o,l)=>{let h=t.getPositionByOrigin(n,a);if(St(t,"lockRotation"))return!1;let c=Math.atan2(i-h.y,e-h.x),u=Yt(Math.atan2(l-h.y,o-h.x)-c+s);if(t.snapAngle&&t.snapAngle>0){let g=t.snapAngle,f=t.snapThreshold||g,p=Math.ceil(u/g)*g,y=Math.floor(u/g)*g;Math.abs(u-y)<f?u=y:Math.abs(u-p)<f&&(u=p)}u<0&&(u=360+u),u%=360;let d=t.angle!==u;return t.angle=u,d}));function Lo(r,t){let e=t.canvas,i=r[e.uniScaleKey];return e.uniformScaling&&!i||!e.uniformScaling&&i}function Fo(r,t,e){let i=St(r,"lockScalingX"),s=St(r,"lockScalingY");if(i&&s||!t&&(i||s)&&e||i&&t==="x"||s&&t==="y")return!0;let{width:n,height:a,strokeWidth:o}=r;return n===0&&o===0&&t!=="y"||a===0&&o===0&&t!=="x"}var _c=["e","se","s","sw","w","nw","n","ne","e"],De=(r,t,e,i)=>{let s=Lo(r,e);return Fo(e,t.x!==0&&t.y===0?"x":t.x===0&&t.y!==0?"y":"",s)?Pn:`${_c[yo(e,0,i)]}-resize`};function Bn(r,t,e,i,s={}){let n=t.target,a=s.by,o=Lo(r,n),l,h,c,u,d,g;if(Fo(n,a,o))return!1;if(t.gestureScale)h=t.scaleX*t.gestureScale,c=t.scaleY*t.gestureScale;else{if(l=Hi(t,t.originX,t.originY,e,i),d=a==="y"?1:Math.sign(l.x||t.signX||1),g=a==="x"?1:Math.sign(l.y||t.signY||1),t.signX||(t.signX=d),t.signY||(t.signY=g),St(n,"lockScalingFlip")&&(t.signX!==d||t.signY!==g))return!1;if(u=n._getTransformedDimensions(),o&&!a){let y=Math.abs(l.x)+Math.abs(l.y),{original:b}=t,x=y/(Math.abs(u.x*b.scaleX/n.scaleX)+Math.abs(u.y*b.scaleY/n.scaleY));h=b.scaleX*x,c=b.scaleY*x}else h=Math.abs(l.x*n.scaleX/u.x),c=Math.abs(l.y*n.scaleY/u.y);mo(t)&&(h*=2,c*=2),t.signX!==d&&a!=="y"&&(t.originX=ma(t.originX),h*=-1,t.signX=d),t.signY!==g&&a!=="x"&&(t.originY=ma(t.originY),c*=-1,t.signY=g)}let f=n.scaleX,p=n.scaleY;return a?(a==="x"&&n.set("scaleX",h),a==="y"&&n.set("scaleY",c)):(!St(n,"lockScalingX")&&n.set("scaleX",h),!St(n,"lockScalingY")&&n.set("scaleY",c)),f!==n.scaleX||p!==n.scaleY}var yr=Ht(Ri,te((r,t,e,i)=>Bn(r,t,e,i))),Io=Ht(Ri,te((r,t,e,i)=>Bn(r,t,e,i,{by:"x"}))),Ro=Ht(Ri,te((r,t,e,i)=>Bn(r,t,e,i,{by:"y"}))),Ds={x:{counterAxis:"y",scale:Zt,skew:We,lockSkewing:"lockSkewingX",origin:"originX",flip:"flipX"},y:{counterAxis:"x",scale:Qt,skew:He,lockSkewing:"lockSkewingY",origin:"originY",flip:"flipY"}},Tc=["ns","nesw","ew","nwse"],Bo=(r,t,e,i)=>t.x!==0&&St(e,"lockSkewingY")||t.y!==0&&St(e,"lockSkewingX")?Pn:`${Tc[yo(e,0,i)%4]}-resize`;function Xo(r,t,e,i,s){let{target:n}=e,{counterAxis:a,origin:o,lockSkewing:l,skew:h,flip:c}=Ds[r];if(St(n,l))return!1;let{origin:u,flip:d}=Ds[a],g=it(e[u])*(n[d]?-1:1),f=-Math.sign(g)*(n[c]?-1:1),p=-(n[h]===0&&Hi(e,"center","center",i,s)[r]>0||n[h]>0?1:-1)*f*.5+.5;return Ht(Va,te((y,b,x,C)=>(function(S,{target:w,ex:k,ey:T,skewingSide:O,...M},D){let{skew:E}=Ds[S],A=D.subtract(new v(k,T)).divide(new v(w.scaleX,w.scaleY))[S],j=w[E],B=M[E],q=Math.tan(X(B)),$=S==="y"?w._getTransformedDimensions({scaleX:1,scaleY:1,skewX:0}).x:w._getTransformedDimensions({scaleX:1,scaleY:1}).y,tt=2*A*O/Math.max($,1)+q,ht=Yt(Math.atan(tt));w.set(E,ht);let I=j!==w[E];if(I&&S==="y"){let{skewX:Ot,scaleX:cr}=w,ur=w._getTransformedDimensions({skewY:j}),Vt=w._getTransformedDimensions(),dr=Ot===0?1:ur.x/Vt.x;dr!==1&&w.set("scaleX",dr*cr)}return I})(r,b,new v(x,C))))(t,{...e,[o]:p,skewingSide:f},i,s)}var Yo=(r,t,e,i)=>Xo("x",r,t,e,i),$o=(r,t,e,i)=>Xo("y",r,t,e,i);function Ni(r,t){return r[t.canvas.altActionKey]}var vr=(r,t,e)=>{let i=Ni(r,e);return t.x===0?i?We:Qt:t.y===0?i?He:Zt:""},ce=(r,t,e,i)=>Ni(r,e)?Bo(0,t,e,i):De(r,t,e,i),Gs=(r,t,e,i)=>Ni(r,t.target)?$o(r,t,e,i):Io(r,t,e,i),Vs=(r,t,e,i)=>Ni(r,t.target)?Yo(r,t,e,i):Ro(r,t,e,i),Xn=()=>({ml:new ut({x:-.5,y:0,cursorStyleHandler:ce,actionHandler:Gs,getActionName:vr}),mr:new ut({x:.5,y:0,cursorStyleHandler:ce,actionHandler:Gs,getActionName:vr}),mb:new ut({x:0,y:.5,cursorStyleHandler:ce,actionHandler:Vs,getActionName:vr}),mt:new ut({x:0,y:-.5,cursorStyleHandler:ce,actionHandler:Vs,getActionName:vr}),tl:new ut({x:-.5,y:-.5,cursorStyleHandler:De,actionHandler:yr}),tr:new ut({x:.5,y:-.5,cursorStyleHandler:De,actionHandler:yr}),bl:new ut({x:-.5,y:.5,cursorStyleHandler:De,actionHandler:yr}),br:new ut({x:.5,y:.5,cursorStyleHandler:De,actionHandler:yr}),mtr:new ut({x:0,y:-.5,actionHandler:jo,cursorStyleHandler:Do,offsetY:-40,withConnection:!0,actionName:Ga})}),Wo=()=>({mr:new ut({x:.5,y:0,actionHandler:zs,cursorStyleHandler:ce,actionName:$r}),ml:new ut({x:-.5,y:0,actionHandler:zs,cursorStyleHandler:ce,actionName:$r})}),Ho=()=>({...Xn(),...Wo()}),zo=class Ns extends It{static getDefaults(){return{...super.getDefaults(),...Ns.ownDefaults}}constructor(t){super(),Object.assign(this,this.constructor.createControls(),Ns.ownDefaults),this.setOptions(t)}static createControls(){return{controls:Xn()}}_updateCacheCanvas(){let t=this.canvas;if(this.noScaleCache&&t&&t._currentTransform){let e=t._currentTransform,i=e.target,s=e.action;if(this===i&&s&&s.startsWith("scale"))return!1}return super._updateCacheCanvas()}getActiveControl(){let t=this.__corner;return t?{key:t,control:this.controls[t],coord:this.oCoords[t]}:void 0}findControl(t,e=!1){if(!this.hasControls||!this.canvas)return;this.__corner=void 0;let i=Object.entries(this.oCoords);for(let s=i.length-1;s>=0;s--){let[n,a]=i[s],o=this.controls[n];if(o.shouldActivate(n,this,t,e?a.touchCorner:a.corner))return this.__corner=n,{key:n,control:o,coord:this.oCoords[n]}}}calcOCoords(){let t=this.getViewportTransform(),e=xn(t),i=eo(t),s=this.getCenterPoint(),n=Y(Y(t,Y(ze(s.x,s.y),me({angle:this.getTotalAngle()-(this.group&&this.flipX?180:0)}))),[1/e,0,0,1/i,0,0]),a=this.group?fe(this.calcTransformMatrix()):void 0;a&&(a.scaleX=Math.abs(a.scaleX),a.scaleY=Math.abs(a.scaleY));let o=this._calculateCurrentDimensions(a),l={};return this.forEachControl((h,c)=>{let u=h.positionHandler(o,n,this,h);l[c]=Object.assign(u,this._calcCornerCoords(h,u))}),l}_calcCornerCoords(t,e){let i=this.getTotalAngle();return{corner:t.calcCornerCoords(i,this.cornerSize,e.x,e.y,!1,this),touchCorner:t.calcCornerCoords(i,this.touchCornerSize,e.x,e.y,!0,this)}}setCoords(){super.setCoords(),this.canvas&&(this.oCoords=this.calcOCoords())}forEachControl(t){for(let e in this.controls)t(this.controls[e],e,this)}drawSelectionBackground(t){if(!this.selectionBackgroundColor||this.canvas&&this.canvas._activeObject!==this)return;t.save();let e=this.getRelativeCenterPoint(),i=this._calculateCurrentDimensions(),s=this.getViewportTransform();t.translate(e.x,e.y),t.scale(1/s[0],1/s[3]),t.rotate(X(this.angle)),t.fillStyle=this.selectionBackgroundColor,t.fillRect(-i.x/2,-i.y/2,i.x,i.y),t.restore()}strokeBorders(t,e){t.strokeRect(-e.x/2,-e.y/2,e.x,e.y)}_drawBorders(t,e,i={}){let s={hasControls:this.hasControls,borderColor:this.borderColor,borderDashArray:this.borderDashArray,...i};t.save(),t.strokeStyle=s.borderColor,this._setLineDash(t,s.borderDashArray),this.strokeBorders(t,e),s.hasControls&&this.drawControlsConnectingLines(t,e),t.restore()}_renderControls(t,e={}){let{hasBorders:i,hasControls:s}=this,n={hasBorders:i,hasControls:s,...e},a=this.getViewportTransform(),o=n.hasBorders,l=n.hasControls,h=fe(Y(a,this.calcTransformMatrix()));t.save(),t.translate(h.translateX,h.translateY),t.lineWidth=this.borderScaleFactor,this.group===this.parent&&(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(h.angle-=180);let c=bn(a);t.rotate(this.group?X(h.angle):X(this.angle)+c),o&&this.drawBorders(t,h,e),l&&this.drawControls(t,e),t.restore()}drawBorders(t,e,i){let s;if(i&&i.forActiveSelection||this.group){let n=$i(this.width,this.height,Vr(e)),a=this.isStrokeAccountedForInDimensions()?mn:(this.strokeUniform?new v().scalarAdd(this.canvas?this.canvas.getZoom():1):new v(e.scaleX,e.scaleY)).scalarMultiply(this.strokeWidth);s=n.add(a).scalarAdd(this.borderScaleFactor).scalarAdd(2*this.padding)}else s=this._calculateCurrentDimensions().scalarAdd(this.borderScaleFactor);this._drawBorders(t,s,i)}drawControlsConnectingLines(t,e){let i=!1;t.beginPath(),this.forEachControl((s,n)=>{s.withConnection&&s.getVisibility(this,n)&&(i=!0,t.moveTo(s.x*e.x,s.y*e.y),t.lineTo(s.x*e.x+s.offsetX,s.y*e.y+s.offsetY))}),i&&t.stroke()}drawControls(t,e={}){t.save();let i=this.getCanvasRetinaScaling(),{cornerStrokeColor:s,cornerDashArray:n,cornerColor:a}=this,o={cornerStrokeColor:s,cornerDashArray:n,cornerColor:a,...e};t.setTransform(i,0,0,i,0,0),t.strokeStyle=t.fillStyle=o.cornerColor,this.transparentCorners||(t.strokeStyle=o.cornerStrokeColor),this._setLineDash(t,o.cornerDashArray),this.forEachControl((l,h)=>{if(l.getVisibility(this,h)){let c=this.oCoords[h];l.render(t,c.x,c.y,o,this)}}),t.restore()}isControlVisible(t){return this.controls[t]&&this.controls[t].getVisibility(this,t)}setControlVisible(t,e){this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[t]=e}setControlsVisibility(t={}){Object.entries(t).forEach(([e,i])=>this.setControlVisible(e,i))}clearContextTop(t){if(!this.canvas)return;let e=this.canvas.contextTop;if(!e)return;let i=this.canvas.viewportTransform;e.save(),e.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this.transform(e);let s=this.width+4,n=this.height+4;return e.clearRect(-s/2,-n/2,s,n),t||e.restore(),e}onDeselect(t){return!1}onSelect(t){return!1}shouldStartDragging(t){return!1}onDragStart(t){return!1}canDrop(t){return!1}renderDragSourceEffect(t){}renderDropTargetEffect(t){}};function Go(r,t){return t.forEach(e=>{Object.getOwnPropertyNames(e.prototype).forEach(i=>{i!=="constructor"&&Object.defineProperty(r.prototype,i,Object.getOwnPropertyDescriptor(e.prototype,i)||Object.create(null))})}),r}m(zo,"ownDefaults",{noScaleCache:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,cornerSize:13,touchCornerSize:24,transparentCorners:!0,cornerColor:"rgb(178,204,255)",cornerStrokeColor:"",cornerStyle:"rect",cornerDashArray:null,hasControls:!0,borderColor:"rgb(178,204,255)",borderDashArray:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,hasBorders:!0,selectionBackgroundColor:"",selectable:!0,evented:!0,perPixelTargetFind:!1,activeOn:"down",hoverCursor:null,moveCursor:null});var G=class extends zo{};Go(G,[vo]),_.setClass(G),_.setClass(G,"object");var Vo=(r,t,e,i)=>{let s=2*(i=Math.round(i))+1,{data:n}=r.getImageData(t-i,e-i,s,s);for(let a=3;a<n.length;a+=4)if(n[a]>0)return!1;return!0},No=class{constructor(r){this.options=r,this.strokeProjectionMagnitude=this.options.strokeWidth/2,this.scale=new v(this.options.scaleX,this.options.scaleY),this.strokeUniformScalar=this.options.strokeUniform?new v(1/this.options.scaleX,1/this.options.scaleY):new v(1,1)}createSideVector(r,t){let e=Wr(r,t);return this.options.strokeUniform?e.multiply(this.scale):e}projectOrthogonally(r,t,e){return this.applySkew(r.add(this.calcOrthogonalProjection(r,t,e)))}isSkewed(){return this.options.skewX!==0||this.options.skewY!==0}applySkew(r){let t=new v(r);return t.y+=t.x*Math.tan(X(this.options.skewY)),t.x+=t.y*Math.tan(X(this.options.skewX)),t}scaleUnitVector(r,t){return r.multiply(this.strokeUniformScalar).scalarMultiply(t)}},kc=new v,Uo=class Si extends No{static getOrthogonalRotationFactor(t,e){let i=e?Ei(t,e):On(t);return Math.abs(i)<Jt?-1:1}constructor(t,e,i,s){super(s),m(this,"AB",void 0),m(this,"AC",void 0),m(this,"alpha",void 0),m(this,"bisector",void 0),this.A=new v(t),this.B=new v(e),this.C=new v(i),this.AB=this.createSideVector(this.A,this.B),this.AC=this.createSideVector(this.A,this.C),this.alpha=Ei(this.AB,this.AC),this.bisector=Wi(kn(this.AB.eq(kc)?this.AC:this.AB,this.alpha/2))}calcOrthogonalProjection(t,e,i=this.strokeProjectionMagnitude){let s=Mn(this.createSideVector(t,e)),n=Si.getOrthogonalRotationFactor(s,this.bisector);return this.scaleUnitVector(s,i*n)}projectBevel(){let t=[];return(this.alpha%_t===0?[this.B]:[this.B,this.C]).forEach(e=>{t.push(this.projectOrthogonally(this.A,e)),t.push(this.projectOrthogonally(this.A,e,-this.strokeProjectionMagnitude))}),t}projectMiter(){let t=[],e=Math.abs(this.alpha),i=1/Math.sin(e/2),s=this.scaleUnitVector(this.bisector,-this.strokeProjectionMagnitude*i),n=this.options.strokeUniform?Pi(this.scaleUnitVector(this.bisector,this.options.strokeMiterLimit)):this.options.strokeMiterLimit;return Pi(s)/this.strokeProjectionMagnitude<=n&&t.push(this.applySkew(this.A.add(s))),t.push(...this.projectBevel()),t}projectRoundNoSkew(t,e){let i=[],s=new v(Si.getOrthogonalRotationFactor(this.bisector),Si.getOrthogonalRotationFactor(new v(this.bisector.y,this.bisector.x)));return[new v(1,0).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(s),new v(0,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(s)].forEach(n=>{Ws(n,t,e)&&i.push(this.A.add(n))}),i}projectRoundWithSkew(t,e){let i=[],{skewX:s,skewY:n,scaleX:a,scaleY:o,strokeUniform:l}=this.options,h=new v(Math.tan(X(s)),Math.tan(X(n))),c=this.strokeProjectionMagnitude,u=l?c/o/Math.sqrt(1/o**2+1/a**2*h.y**2):c/Math.sqrt(1+h.y**2),d=new v(Math.sqrt(Math.max(c**2-u**2,0)),u),g=l?c/Math.sqrt(1+h.x**2*(1/o)**2/(1/a+1/a*h.x*h.y)**2):c/Math.sqrt(1+h.x**2/(1+h.x*h.y)**2),f=new v(g,Math.sqrt(Math.max(c**2-g**2,0)));return[f,f.scalarMultiply(-1),d,d.scalarMultiply(-1)].map(p=>this.applySkew(l?p.multiply(this.strokeUniformScalar):p)).forEach(p=>{Ws(p,t,e)&&i.push(this.applySkew(this.A).add(p))}),i}projectRound(){let t=[];t.push(...this.projectBevel());let e=this.alpha%_t===0,i=this.applySkew(this.A),s=t[e?0:2].subtract(i),n=t[+!!e].subtract(i),a=Ie(s,e?this.applySkew(this.AB.scalarMultiply(-1)):this.applySkew(this.bisector.multiply(this.strokeUniformScalar).scalarMultiply(-1)))>0,o=a?s:n,l=a?n:s;return this.isSkewed()?t.push(...this.projectRoundWithSkew(o,l)):t.push(...this.projectRoundNoSkew(o,l)),t}projectPoints(){switch(this.options.strokeLineJoin){case"miter":return this.projectMiter();case"round":return this.projectRound();default:return this.projectBevel()}}project(){return this.projectPoints().map(t=>({originPoint:this.A,projectedPoint:t,angle:this.alpha,bisector:this.bisector}))}},Oa=class extends No{constructor(r,t,e){super(e),this.A=new v(r),this.T=new v(t)}calcOrthogonalProjection(r,t,e=this.strokeProjectionMagnitude){let i=this.createSideVector(r,t);return this.scaleUnitVector(Mn(i),e)}projectButt(){return[this.projectOrthogonally(this.A,this.T,this.strokeProjectionMagnitude),this.projectOrthogonally(this.A,this.T,-this.strokeProjectionMagnitude)]}projectRound(){let r=[];if(!this.isSkewed()&&this.A.eq(this.T)){let t=new v(1,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar);r.push(this.applySkew(this.A.add(t)),this.applySkew(this.A.subtract(t)))}else r.push(...new Uo(this.A,this.T,this.T,this.options).projectRound());return r}projectSquare(){let r=[];if(this.A.eq(this.T)){let t=new v(1,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar);r.push(this.A.add(t),this.A.subtract(t))}else{let t=this.calcOrthogonalProjection(this.A,this.T,this.strokeProjectionMagnitude),e=this.scaleUnitVector(Wi(this.createSideVector(this.A,this.T)),-this.strokeProjectionMagnitude),i=this.A.add(e);r.push(i.add(t),i.subtract(t))}return r.map(t=>this.applySkew(t))}projectPoints(){switch(this.options.strokeLineCap){case"round":return this.projectRound();case"square":return this.projectSquare();default:return this.projectButt()}}project(){return this.projectPoints().map(r=>({originPoint:this.A,projectedPoint:r}))}},qo=(r,t,e=!1)=>{let i=[];if(r.length===0)return i;let s=r.reduce((n,a)=>(n[n.length-1].eq(a)||n.push(new v(a)),n),[new v(r[0])]);if(s.length===1)e=!0;else if(!e){let n=s[0],a=((o,l)=>{for(let h=o.length-1;h>=0;h--)if(l(o[h],h,o))return h;return-1})(s,o=>!o.eq(n));s.splice(a+1)}return s.forEach((n,a,o)=>{let l,h;a===0?(h=o[1],l=e?n:o[o.length-1]):a===o.length-1?(l=o[a-1],h=e?n:o[0]):(l=o[a-1],h=o[a+1]),e&&o.length===1?i.push(...new Oa(n,n,t).project()):!e||a!==0&&a!==o.length-1?i.push(...new Uo(n,l,h,t).project()):i.push(...new Oa(n,a===0?h:l,t).project())}),i},Yn=r=>{let t={};return Object.keys(r).forEach(e=>{t[e]={},Object.keys(r[e]).forEach(i=>{t[e][i]={...r[e][i]}})}),t},Ui=(r,t,e=!1)=>r.fill!==t.fill||r.stroke!==t.stroke||r.strokeWidth!==t.strokeWidth||r.fontSize!==t.fontSize||r.fontFamily!==t.fontFamily||r.fontWeight!==t.fontWeight||r.fontStyle!==t.fontStyle||r.textDecorationThickness!==t.textDecorationThickness||r.textDecorationColor!==t.textDecorationColor||r.textBackgroundColor!==t.textBackgroundColor||r.deltaY!==t.deltaY||e&&(r.overline!==t.overline||r.underline!==t.underline||r.linethrough!==t.linethrough),Ko=(r,t)=>{let e=t.split(`
|
|
38
|
+
`),i=[],s=-1,n={};r=Yn(r);for(let a=0;a<e.length;a++){let o=Yi(e[a]);if(r[a])for(let l=0;l<o.length;l++){s++;let h=r[a][l];h&&Object.keys(h).length>0&&(Ui(n,h,!0)?i.push({start:s,end:s+1,style:h}):i[i.length-1].end++),n=h||{}}else s+=o.length,n={}}return i},Jo=(r,t)=>{if(!Array.isArray(r))return Yn(r);let e=t.split(pn),i={},s=-1,n=0;for(let a=0;a<e.length;a++){let o=Yi(e[a]);for(let l=0;l<o.length;l++)s++,r[n]&&r[n].start<=s&&s<r[n].end&&(i[a]=i[a]||{},i[a][l]={...r[n].style},s===r[n].end-1&&n++)}return i},ee=["display","transform",at,"fill-opacity","fill-rule","opacity",Dt,"stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"];function Ma(r,t){let e=r.nodeName,i=r.getAttribute("class"),s=r.getAttribute("id"),n="(?![a-zA-Z\\-]+)",a;if(a=RegExp("^"+e,"i"),t=t.replace(a,""),s&&t.length&&(a=RegExp("#"+s+n,"i"),t=t.replace(a,"")),i&&t.length){let o=i.split(" ");for(let l=o.length;l--;)a=RegExp("\\."+o[l]+n,"i"),t=t.replace(a,"")}return t.length===0}function Oc(r,t){let e=!0,i=Ma(r,t.pop());return i&&t.length&&(e=(function(s,n){let a,o=!0;for(;s.parentElement&&s.parentElement.nodeType===1&&n.length;)o&&(a=n.pop()),o=Ma(s=s.parentElement,a);return n.length===0})(r,t)),i&&e&&t.length===0}function Mc(r,t={}){let e={};for(let i in t)Oc(r,i.split(" "))&&(e={...e,...t[i]});return e}var Pc=r=>{var t;return(t=Rh[r])==null?r:t},Ec=RegExp(`(${Ct})`,"gi"),st=`(${Ct})`,Ac=String.raw`(skewX)\(${st}\)`,Dc=String.raw`(skewY)\(${st}\)`,jc=String.raw`(rotate)\(${st}(?: ${st} ${st})?\)`,Lc=String.raw`(scale)\(${st}(?: ${st})?\)`,Fc=String.raw`(translate)\(${st}(?: ${st})?\)`,$n=`(?:${String.raw`(matrix)\(${st} ${st} ${st} ${st} ${st} ${st}\)`}|${Fc}|${jc}|${Lc}|${Ac}|${Dc})`,Ic=`(?:${$n}*)`,Rc=String.raw`^\s*(?:${Ic}?)\s*$`,Bc=new RegExp(Rc),Xc=new RegExp($n),Yc=new RegExp($n,"g");function Di(r){let t=[];if(!(r=(e=>Ai(e.replace(Ec," $1 ").replace(/,/gi," ")))(r).replace(/\s*([()])\s*/gi,"$1"))||r&&!Bc.test(r))return[...nt];for(let e of r.matchAll(Yc)){let i=Xc.exec(e[0]);if(!i)continue;let s=nt,[,n,...a]=i.filter(g=>!!g),[o,l,h,c,u,d]=a.map(g=>parseFloat(g));switch(n){case"translate":s=ze(o,l);break;case Ga:s=me({angle:o},{x:l,y:h});break;case Ua:s=Xi(o,l);break;case We:s=Cn(o);break;case He:s=wn(o);break;case"matrix":s=[o,l,h,c,u,d]}t.push(s)}return Bi(t)}function $c(r,t,e,i){let s=Array.isArray(t),n,a=t;if(r!=="fill"&&r!=="stroke"||t!=="none"){if(r==="strokeUniform")return t==="non-scaling-stroke";if(r==="strokeDashArray")a=t==="none"?null:t.replace(/,/g," ").split(/\s+/).map(parseFloat);else if(r==="transformMatrix")a=e&&e.transformMatrix?Y(e.transformMatrix,Di(t)):Di(t);else if(r==="visible")a=t!=="none"&&t!=="hidden",e&&e.visible===!1&&(a=!1);else if(r==="opacity")a=parseFloat(t),e&&e.opacity!==void 0&&(a*=e.opacity);else if(r==="textAnchor")a=t==="start"?z:t==="end"?wt:F;else if(r==="charSpacing"||r==="textDecorationThickness")n=rt(t,i)/i*1e3;else if(r==="paintFirst"){let o=t.indexOf(at),l=t.indexOf(Dt);a=at,(o>-1&&l>-1&&l<o||o===-1&&l>-1)&&(a=Dt)}else{if(r==="href"||r==="xlink:href"||r==="font"||r==="id")return t;if(r==="imageSmoothing")return t==="optimizeQuality";n=s?t.map(rt):rt(t,i)}}else a="";return!s&&isNaN(n)?a:n}function Us(r,t){r.replace(/;\s*$/,"").split(";").forEach(e=>{if(!e)return;let[i,s]=e.split(":");t[i.trim().toLowerCase()]=s.trim()})}function Wc(r){let t={},e=r.getAttribute("style");return e&&(typeof e=="string"?Us(e,t):(function(i,s){Object.entries(i).forEach(([n,a])=>{a!==void 0&&(s[n.toLowerCase()]=a)})})(e,t)),t}var Hc={stroke:"strokeOpacity",fill:"fillOpacity"};function zt(r,t,e){if(!r)return{};let i,s={},n=16;r.parentNode&&Sa.test(r.parentNode.nodeName)&&(s=zt(r.parentElement,t,e),s.fontSize&&(i=n=rt(s.fontSize)));let a={...t.reduce((h,c)=>{let u=r.getAttribute(c);return u&&(h[c]=u),h},{}),...Mc(r,e),...Wc(r)};a["clip-path"]&&r.setAttribute(wa,a[wa]),a["font-size"]&&(i=rt(a[Ca],n),a[Ca]=`${i}`);let o={};for(let h in a){let c=Pc(h);o[c]=$c(c,a[h],s,i)}o&&o.font&&(function(h,c){let u=h.match(Ih);if(!u)return;let d=u[1],g=u[3],f=u[4],p=u[5],y=u[6];d&&(c.fontStyle=d),g&&(c.fontWeight=isNaN(parseFloat(g))?g:parseFloat(g)),f&&(c.fontSize=rt(f)),y&&(c.fontFamily=y),p&&(c.lineHeight=p==="normal"?1:p)})(o.font,o);let l={...s,...o};return Sa.test(r.nodeName)?l:(function(h){let c=G.getDefaults();return Object.entries(Hc).forEach(([u,d])=>{if(h[d]===void 0||h[u]==="")return;if(h[u]===void 0){if(!c[u])return;h[u]=c[u]}if(h[u].indexOf("url(")===0)return;let g=new ft(h[u]);h[u]=g.setAlpha(R(g.getAlpha()*h[d],2)).toRgba()}),h})(l)}var Zo=["rx","ry"],dt=class qs extends G{static getDefaults(){return{...super.getDefaults(),...qs.ownDefaults}}constructor(t){super(),Object.assign(this,qs.ownDefaults),this.setOptions(t),this._initRxRy()}_initRxRy(){let{rx:t,ry:e}=this;t&&!e?this.ry=t:e&&!t&&(this.rx=e)}_render(t){let{width:e,height:i}=this,s=-e/2,n=-i/2,a=this.rx?Math.min(this.rx,e/2):0,o=this.ry?Math.min(this.ry,i/2):0,l=a!==0||o!==0;t.beginPath(),t.moveTo(s+a,n),t.lineTo(s+e-a,n),l&&t.bezierCurveTo(s+e-.4477152502*a,n,s+e,n+.4477152502*o,s+e,n+o),t.lineTo(s+e,n+i-o),l&&t.bezierCurveTo(s+e,n+i-.4477152502*o,s+e-.4477152502*a,n+i,s+e-a,n+i),t.lineTo(s+a,n+i),l&&t.bezierCurveTo(s+.4477152502*a,n+i,s,n+i-.4477152502*o,s,n+i-o),t.lineTo(s,n+o),l&&t.bezierCurveTo(s,n+.4477152502*o,s+.4477152502*a,n,s+a,n),t.closePath(),this._renderPaintInOrder(t)}toObject(t=[]){return super.toObject([...Zo,...t])}_toSVG(){let{width:t,height:e,rx:i,ry:s}=this;return["<rect ","COMMON_PARTS",`x="${-t/2}" y="${-e/2}" rx="${P(i)}" ry="${P(s)}" width="${P(t)}" height="${P(e)}" />
|
|
39
|
+
`]}static async fromElement(t,e,i){let{left:s=0,top:n=0,width:a=0,height:o=0,visible:l=!0,...h}=zt(t,this.ATTRIBUTE_NAMES,i);return new this({...e,...h,left:s,top:n,width:a,height:o,visible:!!(l&&a&&o)})}};m(dt,"type","Rect"),m(dt,"cacheProperties",[...Wt,...Zo]),m(dt,"ownDefaults",{rx:0,ry:0}),m(dt,"ATTRIBUTE_NAMES",[...ee,"x","y","rx","ry","width","height"]),_.setClass(dt),_.setSVGClass(dt);var Pa="initialization",Ks="added",Qo=(r,t)=>{let{strokeUniform:e,strokeWidth:i,width:s,height:n,group:a}=t,o=a&&a!==r?Ur(a.calcTransformMatrix(),r.calcTransformMatrix()):null,l=o?t.getRelativeCenterPoint().transform(o):t.getRelativeCenterPoint(),h=!t.isStrokeAccountedForInDimensions(),c=e&&h?go(new v(i,i),void 0,r.calcTransformMatrix()):mn,u=!e&&h?i:0,d=$i(s+u,n+u,Bi([o,t.calcOwnMatrix()],!0)).add(c).scalarDivide(2);return[l.subtract(d),l.add(d)]},qi=class{calcLayoutResult(r,t){if(this.shouldPerformLayout(r))return this.calcBoundingBox(t,r)}shouldPerformLayout({type:r,prevStrategy:t,strategy:e}){return r==="initialization"||r==="imperative"||!!t&&e!==t}shouldLayoutClipPath({type:r,target:{clipPath:t}}){return r!=="initialization"&&t&&!t.absolutePositioned}getInitialSize(r,t){return t.size}calcBoundingBox(r,t){let{type:e,target:i}=t;if(e==="imperative"&&t.overrides)return t.overrides;if(r.length===0)return;let{left:s,top:n,width:a,height:o}=Et(r.map(c=>Qo(i,c)).reduce((c,u)=>c.concat(u),[])),l=new v(a,o),h=new v(s,n).add(l.scalarDivide(2));if(e==="initialization"){let c=this.getInitialSize(t,{size:l,center:h});return{center:h,relativeCorrection:new v(0,0),size:c}}return{center:h.transform(i.calcOwnMatrix()),size:l}}};m(qi,"type","strategy");var Js=class extends qi{shouldPerformLayout(r){return!0}};m(Js,"type","fit-content"),_.setClass(Js);var tl="layoutManager",zr=class{constructor(r=new Js){m(this,"strategy",void 0),this.strategy=r,this._subscriptions=new Map}performLayout(r){let t={bubbles:!0,strategy:this.strategy,...r,prevStrategy:this._prevLayoutStrategy,stopPropagation(){this.bubbles=!1}};this.onBeforeLayout(t);let e=this.getLayoutResult(t);e&&this.commitLayout(t,e),this.onAfterLayout(t,e),this._prevLayoutStrategy=t.strategy}attachHandlers(r,t){let{target:e}=t;return[qa,Ha,$r,za,Ri,Va,ki,Na,"modifyPath"].map(i=>r.on(i,s=>this.performLayout(i==="modified"?{type:"object_modified",trigger:i,e:s,target:e}:{type:"object_modifying",trigger:i,e:s,target:e})))}subscribe(r,t){this.unsubscribe(r,t);let e=this.attachHandlers(r,t);this._subscriptions.set(r,e)}unsubscribe(r,t){(this._subscriptions.get(r)||[]).forEach(e=>e()),this._subscriptions.delete(r)}unsubscribeTargets(r){r.targets.forEach(t=>this.unsubscribe(t,r))}subscribeTargets(r){r.targets.forEach(t=>this.subscribe(t,r))}onBeforeLayout(r){let{target:t,type:e}=r,{canvas:i}=t;if(e==="initialization"||e==="added"?this.subscribeTargets(r):e==="removed"&&this.unsubscribeTargets(r),t.fire("layout:before",{context:r}),i&&i.fire("object:layout:before",{target:t,context:r}),e==="imperative"&&r.deep){let{strategy:s,...n}=r;t.forEachObject(a=>a.layoutManager&&a.layoutManager.performLayout({...n,bubbles:!1,target:a}))}}getLayoutResult(r){let{target:t,strategy:e,type:i}=r,s=e.calcLayoutResult(r,t.getObjects());if(!s)return;let n=i==="initialization"?new v:t.getRelativeCenterPoint(),{center:a,correction:o=new v,relativeCorrection:l=new v}=s;return{result:s,prevCenter:n,nextCenter:a,offset:n.subtract(a).add(o).transform(i==="initialization"?nt:lt(t.calcOwnMatrix()),!0).add(l)}}commitLayout(r,t){let{target:e}=r,{result:{size:i},nextCenter:s}=t;var n,a;e.set({width:i.x,height:i.y}),this.layoutObjects(r,t),r.type==="initialization"?e.set({left:(n=r.x)==null?s.x+i.x*it(e.originX):n,top:(a=r.y)==null?s.y+i.y*it(e.originY):a}):(e.setPositionByOrigin(s,F,F),e.setCoords(),e.set("dirty",!0))}layoutObjects(r,t){let{target:e}=r;e.forEachObject(i=>{i.group===e&&this.layoutObject(r,t,i)}),r.strategy.shouldLayoutClipPath(r)&&this.layoutObject(r,t,e.clipPath)}layoutObject(r,{offset:t},e){e.set({left:e.left+t.x,top:e.top+t.y})}onAfterLayout(r,t){let{target:e,strategy:i,bubbles:s,prevStrategy:n,...a}=r,{canvas:o}=e;e.fire("layout:after",{context:r,result:t}),o&&o.fire("object:layout:after",{context:r,result:t,target:e});let l=e.parent;s&&l!=null&&l.layoutManager&&((a.path||(a.path=[])).push(e),l.layoutManager.performLayout({...a,target:l})),e.set("dirty",!0)}dispose(){let{_subscriptions:r}=this;r.forEach(t=>t.forEach(e=>e())),r.clear()}toObject(){return{type:tl,strategy:this.strategy.constructor.type}}toJSON(){return this.toObject()}};_.setClass(zr,tl);var zc=class extends zr{performLayout(){}},U=class Zs extends Ka(G){static getDefaults(){return{...super.getDefaults(),...Zs.ownDefaults}}constructor(t=[],e={}){super(),m(this,"_activeObjects",[]),m(this,"__objectSelectionTracker",void 0),m(this,"__objectSelectionDisposer",void 0),Object.assign(this,Zs.ownDefaults),this.setOptions(e),this.groupInit(t,e)}groupInit(t,e){var i;this._objects=[...t],this.__objectSelectionTracker=this.__objectSelectionMonitor.bind(this,!0),this.__objectSelectionDisposer=this.__objectSelectionMonitor.bind(this,!1),this.forEachObject(s=>{this.enterGroup(s,!1)}),this.layoutManager=(i=e.layoutManager)==null?new zr:i,this.layoutManager.performLayout({type:Pa,target:this,targets:[...t],x:e.left,y:e.top})}canEnterGroup(t){return t===this||this.isDescendantOf(t)?(Xt("error","Group: circular object trees are not supported, this call has no effect"),!1):this._objects.indexOf(t)===-1||(Xt("error","Group: duplicate objects are not supported inside group, this call has no effect"),!1)}_filterObjectsBeforeEnteringGroup(t){return t.filter((e,i,s)=>this.canEnterGroup(e)&&s.indexOf(e)===i)}add(...t){let e=this._filterObjectsBeforeEnteringGroup(t),i=super.add(...e);return this._onAfterObjectsChange(Ks,e),i}insertAt(t,...e){let i=this._filterObjectsBeforeEnteringGroup(e),s=super.insertAt(t,...i);return this._onAfterObjectsChange(Ks,i),s}remove(...t){let e=super.remove(...t);return this._onAfterObjectsChange("removed",e),e}_onObjectAdded(t){this.enterGroup(t,!0),this.fire("object:added",{target:t}),t.fire("added",{target:this})}_onObjectRemoved(t,e){this.exitGroup(t,e),this.fire("object:removed",{target:t}),t.fire("removed",{target:this})}_onAfterObjectsChange(t,e){this.layoutManager.performLayout({type:t,targets:e,target:this})}_onStackOrderChanged(){this._set("dirty",!0)}_set(t,e){let i=this[t];return super._set(t,e),t==="canvas"&&i!==e&&(this._objects||[]).forEach(s=>{s._set(t,e)}),this}_shouldSetNestedCoords(){return this.subTargetCheck}removeAll(){return this._activeObjects=[],this.remove(...this._objects)}__objectSelectionMonitor(t,{target:e}){let i=this._activeObjects;if(t)i.push(e),this._set("dirty",!0);else if(i.length>0){let s=i.indexOf(e);s>-1&&(i.splice(s,1),this._set("dirty",!0))}}_watchObject(t,e){t&&this._watchObject(!1,e),t?(e.on("selected",this.__objectSelectionTracker),e.on("deselected",this.__objectSelectionDisposer)):(e.off("selected",this.__objectSelectionTracker),e.off("deselected",this.__objectSelectionDisposer))}enterGroup(t,e){t.group&&t.group.remove(t),t._set("parent",this),this._enterGroup(t,e)}_enterGroup(t,e){e&&Xe(t,Y(lt(this.calcTransformMatrix()),t.calcTransformMatrix())),this._shouldSetNestedCoords()&&t.setCoords(),t._set("group",this),t._set("canvas",this.canvas),this._watchObject(!0,t);let i=this.canvas&&this.canvas.getActiveObject&&this.canvas.getActiveObject();i&&(i===t||t.isDescendantOf(i))&&this._activeObjects.push(t)}exitGroup(t,e){this._exitGroup(t,e),t._set("parent",void 0),t._set("canvas",void 0)}_exitGroup(t,e){t._set("group",void 0),e||(Xe(t,Y(this.calcTransformMatrix(),t.calcTransformMatrix())),t.setCoords()),this._watchObject(!1,t);let i=this._activeObjects.length>0?this._activeObjects.indexOf(t):-1;i>-1&&this._activeObjects.splice(i,1)}shouldCache(){let t=G.prototype.shouldCache.call(this);if(t){for(let e=0;e<this._objects.length;e++)if(this._objects[e].willDrawShadow())return this.ownCaching=!1,!1}return t}willDrawShadow(){if(super.willDrawShadow())return!0;for(let t=0;t<this._objects.length;t++)if(this._objects[t].willDrawShadow())return!0;return!1}isOnACache(){return this.ownCaching||!!this.parent&&this.parent.isOnACache()}drawObject(t,e,i){this._renderBackground(t);for(let n=0;n<this._objects.length;n++){var s;let a=this._objects[n];(s=this.canvas)!=null&&s.preserveObjectStacking&&a.group!==this?(t.save(),t.transform(...lt(this.calcTransformMatrix())),a.render(t),t.restore()):a.group===this&&a.render(t)}this._drawClipPath(t,this.clipPath,i)}setCoords(){super.setCoords(),this._shouldSetNestedCoords()&&this.forEachObject(t=>t.setCoords())}triggerLayout(t={}){this.layoutManager.performLayout({target:this,type:"imperative",...t})}render(t){this._transformDone=!0,super.render(t),this._transformDone=!1}__serializeObjects(t,e){let i=this.includeDefaultValues;return this._objects.filter(function(s){return!s.excludeFromExport}).map(function(s){let n=s.includeDefaultValues;s.includeDefaultValues=i;let a=s[t||"toObject"](e);return s.includeDefaultValues=n,a})}toObject(t=[]){let e=this.layoutManager.toObject();return{...super.toObject(["subTargetCheck","interactive",...t]),...e.strategy!=="fit-content"||this.includeDefaultValues?{layoutManager:e}:{},objects:this.__serializeObjects("toObject",t)}}toString(){return`#<Group: (${this.complexity()})>`}dispose(){this.layoutManager.unsubscribeTargets({targets:this.getObjects(),target:this}),this._activeObjects=[],this.forEachObject(t=>{this._watchObject(!1,t),t.dispose()}),super.dispose()}_createSVGBgRect(t){if(!this.backgroundColor)return"";let e=dt.prototype._toSVG.call(this),i=e.indexOf("COMMON_PARTS");e[i]='for="group" ';let s=e.join("");return t?t(s):s}_toSVG(t){let e=["<g ","COMMON_PARTS",` >
|
|
40
40
|
`],i=this._createSVGBgRect(t);i&&e.push(" ",i);for(let s=0;s<this._objects.length;s++)e.push(" ",this._objects[s].toSVG(t));return e.push(`</g>
|
|
41
|
-
`),e}getSvgStyles(){let t=this.opacity!==void 0&&this.opacity!==1?`opacity: ${P(this.opacity)};`:"",e=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),e].join("")}toClipPathSVG(t){let e=[],i=this._createSVGBgRect(t);i&&e.push(" ",i);for(let s=0;s<this._objects.length;s++)e.push(" ",this._objects[s].toClipPathSVG(t));return this._createBaseClipPathSVGMarkup(e,{reviver:t})}static fromObject({type:t,objects:e=[],layoutManager:i,...s},n){return Promise.all([Ie(e,n),Vr(s,n)]).then(([a,o])=>{let l=new this(a,{...s,...o,layoutManager:new zc});return l.layoutManager=i?new(_.getClass(i.type))(new(_.getClass(i.strategy))):new Hr,l.layoutManager.subscribeTargets({type:Pa,target:l,targets:l.getObjects()}),l.setCoords(),l})}};m(U,"type","Group"),m(U,"ownDefaults",{strokeWidth:0,subTargetCheck:!1,interactive:!1}),_.setClass(U);var Gc=(r,t)=>r&&r.length===1?r[0]:new U(r,t),el=(r,t)=>Math.min(t.width/r.width,t.height/r.height),rl=(r,t)=>Math.max(t.width/r.width,t.height/r.height),Qs="\\s*,?\\s*",fr=`${Qs}(${Ct})`,Vc=`${fr}${fr}${fr}${Qs}([01])${Qs}([01])${fr}${fr}`,Nc={m:"l",M:"L"},Uc=(r,t,e,i,s,n,a,o,l,h,c)=>{let u=Tt(r),d=kt(r),g=Tt(t),f=kt(t),p=e*s*g-i*n*f+a,y=i*s*g+e*n*f+o;return["C",h+l*(-e*s*d-i*n*u),c+l*(-i*s*d+e*n*u),p+l*(e*s*f+i*n*g),y+l*(i*s*f-e*n*g),p,y]},Ea=(r,t,e,i)=>{let s=Math.atan2(t,r),n=Math.atan2(i,e);return n>=s?n-s:2*Math.PI-(s-n)};function tn(r,t,e,i,s,n,a,o){let l;if(L.cachesBoundsOfCurve&&(l=[...arguments].join(),Ir.boundsOfCurveCache[l]))return Ir.boundsOfCurveCache[l];let h=Math.sqrt,c=Math.abs,u=[],d=[[0,0],[0,0]],g=6*r-12*e+6*s,f=-3*r+9*e-9*s+3*a,p=3*e-3*r;for(let S=0;S<2;++S){if(S>0&&(g=6*t-12*i+6*n,f=-3*t+9*i-9*n+3*o,p=3*i-3*t),c(f)<1e-12){if(c(g)<1e-12)continue;let M=-p/g;0<M&&M<1&&u.push(M);continue}let w=g*g-4*p*f;if(w<0)continue;let k=h(w),T=(-g+k)/(2*f);0<T&&T<1&&u.push(T);let O=(-g-k)/(2*f);0<O&&O<1&&u.push(O)}let y=u.length,b=y,x=sl(r,t,e,i,s,n,a,o);for(;y--;){let{x:S,y:w}=x(u[y]);d[0][y]=S,d[1][y]=w}d[0][b]=r,d[1][b]=t,d[0][b+1]=a,d[1][b+1]=o;let C=[new v(Math.min(...d[0]),Math.min(...d[1])),new v(Math.max(...d[0]),Math.max(...d[1]))];return L.cachesBoundsOfCurve&&(Ir.boundsOfCurveCache[l]=C),C}var qc=(r,t,[e,i,s,n,a,o,l,h])=>{let c=((u,d,g,f,p,y,b)=>{if(g===0||f===0)return[];let x=0,C=0,S=0,w=Math.PI,k=b*fn,T=kt(k),O=Tt(k),M=.5*(-O*u-T*d),D=.5*(-O*d+T*u),E=g**2,A=f**2,j=D**2,B=M**2,q=E*A-E*j-A*B,$=Math.abs(g),tt=Math.abs(f);if(q<0){let Vt=Math.sqrt(1-q/(E*A));$*=Vt,tt*=Vt}else S=(p===y?-1:1)*Math.sqrt(q/(E*j+A*B));let ht=S*$*D/tt,I=-S*tt*M/$,Ot=O*ht-T*I+.5*u,hr=T*ht+O*I+.5*d,cr=Ea(1,0,(M-ht)/$,(D-I)/tt),Gt=Ea((M-ht)/$,(D-I)/tt,(-M-ht)/$,(-D-I)/tt);y===0&&Gt>0?Gt-=2*w:y===1&&Gt<0&&(Gt+=2*w);let ur=Math.ceil(Math.abs(Gt/w*2)),hi=[],dr=Gt/ur,oh=8/3*Math.sin(dr/4)*Math.sin(dr/4)/Math.sin(dr/2),Os=cr+dr;for(let Vt=0;Vt<ur;Vt++)hi[Vt]=Uc(cr,Os,O,T,$,tt,Ot,hr,oh,x,C),x=hi[Vt][5],C=hi[Vt][6],cr=Os,Os+=dr;return hi})(l-r,h-t,i,s,a,o,n);for(let u=0,d=c.length;u<d;u++)c[u][1]+=r,c[u][2]+=t,c[u][3]+=r,c[u][4]+=t,c[u][5]+=r,c[u][6]+=t;return c},il=r=>{let t=0,e=0,i=0,s=0,n=[],a,o=0,l=0;for(let h of r){let c=[...h],u;switch(c[0]){case"l":c[1]+=t,c[2]+=e;case"L":t=c[1],e=c[2],u=["L",t,e];break;case"h":c[1]+=t;case"H":t=c[1],u=["L",t,e];break;case"v":c[1]+=e;case"V":e=c[1],u=["L",t,e];break;case"m":c[1]+=t,c[2]+=e;case"M":t=c[1],e=c[2],i=c[1],s=c[2],u=["M",t,e];break;case"c":c[1]+=t,c[2]+=e,c[3]+=t,c[4]+=e,c[5]+=t,c[6]+=e;case"C":o=c[3],l=c[4],t=c[5],e=c[6],u=["C",c[1],c[2],o,l,t,e];break;case"s":c[1]+=t,c[2]+=e,c[3]+=t,c[4]+=e;case"S":a==="C"?(o=2*t-o,l=2*e-l):(o=t,l=e),t=c[3],e=c[4],u=["C",o,l,c[1],c[2],t,e],o=u[3],l=u[4];break;case"q":c[1]+=t,c[2]+=e,c[3]+=t,c[4]+=e;case"Q":o=c[1],l=c[2],t=c[3],e=c[4],u=["Q",o,l,t,e];break;case"t":c[1]+=t,c[2]+=e;case"T":a==="Q"?(o=2*t-o,l=2*e-l):(o=t,l=e),t=c[1],e=c[2],u=["Q",o,l,t,e];break;case"a":c[6]+=t,c[7]+=e;case"A":qc(t,e,c).forEach(d=>n.push(d)),t=c[6],e=c[7];break;case"z":case"Z":t=i,e=s,u=["Z"]}u?(n.push(u),a=u[0]):a=""}return n},ji=(r,t,e,i)=>Math.sqrt((e-r)**2+(i-t)**2),sl=(r,t,e,i,s,n,a,o)=>l=>{let h=l**3,c=(g=>3*g**2*(1-g))(l),u=(g=>3*g*(1-g)**2)(l),d=(g=>(1-g)**3)(l);return new v(a*h+s*c+e*u+r*d,o*h+n*c+i*u+t*d)},nl=r=>r**2,al=r=>2*r*(1-r),ol=r=>(1-r)**2,Kc=(r,t,e,i,s,n,a,o)=>l=>{let h=nl(l),c=al(l),u=ol(l),d=3*(u*(e-r)+c*(s-e)+h*(a-s)),g=3*(u*(i-t)+c*(n-i)+h*(o-n));return Math.atan2(g,d)},Jc=(r,t,e,i,s,n)=>a=>{let o=nl(a),l=al(a),h=ol(a);return new v(s*o+e*l+r*h,n*o+i*l+t*h)},Zc=(r,t,e,i,s,n)=>a=>{let o=1-a,l=2*(o*(e-r)+a*(s-e)),h=2*(o*(i-t)+a*(n-i));return Math.atan2(h,l)},Aa=(r,t,e)=>{let i=new v(t,e),s=0;for(let n=1;n<=100;n+=1){let a=r(n/100);s+=ji(i.x,i.y,a.x,a.y),i=a}return s},Qc=(r,t)=>{let e,i=0,s=0,n={x:r.x,y:r.y},a={...n},o=.01,l=0,h=r.iterator,c=r.angleFinder;for(;s<t&&o>1e-4;)a=h(i),l=i,e=ji(n.x,n.y,a.x,a.y),e+s>t?(i-=o,o/=2):(n=a,i+=o,s+=e);return{...a,angle:c(l)}},Wn=r=>{let t,e,i=0,s=0,n=0,a=0,o=0,l=[];for(let h of r){let c={x:s,y:n,command:h[0],length:0};switch(h[0]){case"M":e=c,e.x=a=s=h[1],e.y=o=n=h[2];break;case"L":e=c,e.length=ji(s,n,h[1],h[2]),s=h[1],n=h[2];break;case"C":t=sl(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e=c,e.iterator=t,e.angleFinder=Kc(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e.length=Aa(t,s,n),s=h[5],n=h[6];break;case"Q":t=Jc(s,n,h[1],h[2],h[3],h[4]),e=c,e.iterator=t,e.angleFinder=Zc(s,n,h[1],h[2],h[3],h[4]),e.length=Aa(t,s,n),s=h[3],n=h[4];break;case"Z":e=c,e.destX=a,e.destY=o,e.length=ji(s,n,a,o),s=a,n=o}i+=e.length,l.push(e)}return l.push({length:i,x:s,y:n}),l},ll=(r,t,e=Wn(r))=>{let i=0;for(;t-e[i].length>0&&i<e.length-2;)t-=e[i].length,i++;let s=e[i],n=t/s.length,a=r[i];switch(s.command){case"M":return{x:s.x,y:s.y,angle:0};case"Z":return{...new v(s.x,s.y).lerp(new v(s.destX,s.destY),n),angle:Math.atan2(s.destY-s.y,s.destX-s.x)};case"L":return{...new v(s.x,s.y).lerp(new v(a[1],a[2]),n),angle:Math.atan2(a[2]-s.y,a[1]-s.x)};case"C":case"Q":return Qc(s,t)}},tu=RegExp("[mzlhvcsqta][^mzlhvcsqta]*","gi"),Da=new RegExp(Vc,"g"),eu=new RegExp(Ct,"gi"),ru={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},hl=r=>{var t;let e=[],i=(t=r.match(tu))==null?[]:t;for(let s of i){let n=s[0];if(n==="z"||n==="Z"){e.push([n]);continue}let a=ru[n.toLowerCase()],o=[];if(n==="a"||n==="A"){let l;for(Da.lastIndex=0;l=Da.exec(s);)o.push(...l.slice(1))}else o=s.match(eu)||[];for(let l=0;l<o.length;l+=a){let h=Array(a),c=Nc[n];h[0]=l>0&&c?c:n;for(let u=0;u<a;u++)h[u+1]=parseFloat(o[l+u]);e.push(h)}}return e},iu=(r,t=0)=>{let e=new v(r[0]),i=new v(r[1]),s=1,n=0,a=[],o=r.length,l=o>2,h;for(l&&(s=r[2].x<i.x?-1:r[2].x===i.x?0:1,n=r[2].y<i.y?-1:r[2].y===i.y?0:1),a.push(["M",e.x-s*t,e.y-n*t]),h=1;h<o;h++){if(!e.eq(i)){let c=e.midPointFrom(i);a.push(["Q",e.x,e.y,c.x,c.y])}e=r[h],h+1<r.length&&(i=r[h+1])}return l&&(s=e.x>r[h-2].x?1:e.x===r[h-2].x?0:-1,n=e.y>r[h-2].y?1:e.y===r[h-2].y?0:-1),a.push(["L",e.x+s*t,e.y+n*t]),a},su=(r,t,e)=>(e&&(t=Y(t,[1,0,0,1,-e.x,-e.y])),r.map(i=>{let s=[...i];for(let n=1;n<i.length-1;n+=2){let{x:a,y:o}=J({x:i[n],y:i[n+1]},t);s[n]=a,s[n+1]=o}return s})),nu=(r,t)=>{let e=2*Math.PI/r,i=-Kt;r%2==0&&(i+=e/2);let s=Array(r+1);for(let n=0;n<r;n++){let a=n*e+i,{x:o,y:l}=new v(Tt(a),kt(a)).scalarMultiply(t);s[n]=[n===0?"M":"L",o,l]}return s[r]=["Z"],s},cl=(r,t)=>r.map(e=>e.map((i,s)=>s===0||t===void 0?i:R(i,t)).join(" ")).join(" "),au=(r,t)=>{var e;let i=r,s=t;i.inverted&&!s.inverted&&(i=t,s=r),Tn(s,(e=s.group)==null?void 0:e.calcTransformMatrix(),i.calcTransformMatrix());let n=i.inverted&&s.inverted;return n&&(i.inverted=s.inverted=!1),new U([i],{clipPath:s,inverted:n})},ou=(r,t)=>Math.floor(Math.random()*(t-r+1))+r,_i=(r,t)=>{let e=r._findCenterFromElement();r.transformMatrix&&((i=>{if(i.transformMatrix){let{scaleX:s,scaleY:n,angle:a,skewX:o}=fe(i.transformMatrix);i.flipX=!1,i.flipY=!1,i.set(Jt,s),i.set(Zt,n),i.angle=a,i.skewX=o,i.skewY=0}})(r),e=e.transform(r.transformMatrix)),delete r.transformMatrix,t&&(r.scaleX*=t.scaleX,r.scaleY*=t.scaleY,r.cropX=t.cropX,r.cropY=t.cropY,e.x+=t.offsetLeft,e.y+=t.offsetTop,r.width=t.width,r.height=t.height),r.setPositionByOrigin(e,F,F)},Z=zr({addTransformToObject:()=>co,animate:()=>In,animateColor:()=>ko,applyTransformToObject:()=>Be,calcAngleBetweenVectors:()=>Ei,calcDimensionsMatrix:()=>Gr,calcPlaneChangeMatrix:()=>Nr,calcVectorRotation:()=>On,cancelAnimFrame:()=>Za,capValue:()=>pe,composeMatrix:()=>io,copyCanvasElement:()=>wh,cos:()=>Tt,createCanvasElement:()=>jt,createImage:()=>Qa,createRotateMatrix:()=>me,createScaleMatrix:()=>Xi,createSkewXMatrix:()=>Cn,createSkewYMatrix:()=>wn,createTranslateMatrix:()=>He,createVector:()=>$r,crossProduct:()=>Fe,degreesToRadians:()=>X,dotProduct:()=>po,ease:()=>Wh,enlivenObjectEnlivables:()=>Vr,enlivenObjects:()=>Ie,findScaleToCover:()=>rl,findScaleToFit:()=>el,getBoundsOfCurve:()=>tn,getOrthonormalVector:()=>Mn,getPathSegmentsInfo:()=>Wn,getPointOnPath:()=>ll,getPointer:()=>ho,getRandomInt:()=>ou,getRegularPolygonPath:()=>nu,getSmoothPathFromPoints:()=>iu,getSvgAttributes:()=>jh,getUnitVector:()=>Wi,groupSVGElements:()=>Gc,hasStyleChanged:()=>Ui,invertTransform:()=>ot,isBetweenVectors:()=>Ws,isIdentityMatrix:()=>to,isTouchEvent:()=>Mi,isTransparent:()=>Vo,joinPath:()=>cl,loadImage:()=>Br,magnitude:()=>Pi,makeBoundingBoxFromPoints:()=>Et,makePathSimpler:()=>il,matrixToSVG:()=>Re,mergeClipPaths:()=>au,multiplyTransformMatrices:()=>Y,multiplyTransformMatrixArray:()=>Bi,parsePath:()=>hl,parsePreserveAspectRatioAttribute:()=>An,parseUnit:()=>rt,pick:()=>ye,projectStrokeOnPoints:()=>qo,qrDecompose:()=>fe,radiansToDegrees:()=>Yt,removeFromArray:()=>ae,removeTransformFromObject:()=>Ph,removeTransformMatrixForSvgParsing:()=>_i,requestAnimFrame:()=>Rr,resetObjectTransform:()=>uo,rotateVector:()=>kn,saveObjectTransform:()=>_n,sendObjectToPlane:()=>Tn,sendPointToPlane:()=>$t,sendVectorToPlane:()=>go,sin:()=>kt,sizeAfterTransform:()=>$i,string:()=>_h,stylesFromArray:()=>Jo,stylesToArray:()=>Ko,toBlob:()=>vn,toDataURL:()=>yn,toFixed:()=>R,transformPath:()=>su,transformPoint:()=>J});function en(r,t){let e=r.style;e&&Object.entries(t).forEach(([i,s])=>e.setProperty(i,s))}var lu=class extends oo{constructor(r,{allowTouchScrolling:t=!1,containerClass:e=""}={}){super(r),m(this,"upper",void 0),m(this,"container",void 0);let{el:i}=this.lower,s=this.createUpperCanvas();this.upper={el:s,ctx:s.getContext("2d")},this.applyCanvasStyle(i,{allowTouchScrolling:t}),this.applyCanvasStyle(s,{allowTouchScrolling:t,styles:{position:"absolute",left:"0",top:"0"}});let n=this.createContainerElement();n.classList.add(e),i.parentNode&&i.parentNode.replaceChild(n,i),n.append(i,s),this.container=n}createUpperCanvas(){let{el:r}=this.lower,t=jt();return t.className=r.className,t.classList.remove("lower-canvas"),t.classList.add("upper-canvas"),t.setAttribute("data-fabric","top"),t.style.cssText=r.style.cssText,t.setAttribute("draggable","true"),t}createContainerElement(){let r=Ye().createElement("div");return r.setAttribute("data-fabric","wrapper"),en(r,{position:"relative"}),fa(r),r}applyCanvasStyle(r,t){let{styles:e,allowTouchScrolling:i}=t;en(r,{...e,"touch-action":i?"manipulation":Ii}),fa(r)}setDimensions(r,t){super.setDimensions(r,t);let{el:e,ctx:i}=this.upper;ao(e,i,r,t)}setCSSDimensions(r){super.setCSSDimensions(r),$s(this.upper.el,r),$s(this.container,r)}cleanupDOM(r){let t=this.container,{el:e}=this.lower,{el:i}=this.upper;super.cleanupDOM(r),t.removeChild(i),t.removeChild(e),t.parentNode&&t.parentNode.replaceChild(e,t)}dispose(){super.dispose(),At().dispose(this.upper.el),delete this.upper,delete this.container}},ul=(r,t,e,i)=>{let{target:s,offsetX:n,offsetY:a}=t,o=e-n,l=i-a,h=!St(s,"lockMovementX")&&s.left!==o,c=!St(s,"lockMovementY")&&s.top!==l;return h&&s.set("left",o),c&&s.set("top",l),(h||c)&&Rn(Ha,En(r,t,e,i)),h||c},dl=Na,gl=r=>function(t,e,i){let{points:s,pathOffset:n}=i;return new v(s[r]).subtract(n).transform(Y(i.getViewportTransform(),i.calcTransformMatrix()))},fl=(r,t,e,i)=>{let{target:s,pointIndex:n}=t,a=s,o=$t(new v(e,i),void 0,a.calcOwnMatrix());return a.points[n]=o.add(a.pathOffset),a.setDimensions(),a.set("dirty",!0),!0},pl=(r,t)=>function(e,i,s,n){let a=i.target,o=new v(a.points[(r>0?r:a.points.length)-1]),l=o.subtract(a.pathOffset).transform(a.calcOwnMatrix()),h=t(e,{...i,pointIndex:r},s,n),c=o.subtract(a.pathOffset).transform(a.calcOwnMatrix()).subtract(l);return a.left-=c.x,a.top-=c.y,h},ml=r=>Ht(dl,pl(r,fl));function hu(r,t={}){let e={};for(let i=0;i<(typeof r=="number"?r:r.points.length);i++)e[`p${i}`]=new ut({actionName:dl,positionHandler:gl(i),actionHandler:ml(i),...t});return e}var rn=(r,t,e)=>{let{path:i,pathOffset:s}=r,n=i[t];return new v(n[e]-s.x,n[e+1]-s.y).transform(Y(r.getViewportTransform(),r.calcTransformMatrix()))};function cu(r,t,e){let{commandIndex:i,pointIndex:s}=this;return rn(e,i,s)}function uu(r,t,e,i){let{target:s}=t,{commandIndex:n,pointIndex:a}=this,o=((l,h,c,u,d)=>{let{path:g,pathOffset:f}=l,p=g[(u>0?u:g.length)-1],y=new v(p[d],p[d+1]),b=y.subtract(f).transform(l.calcOwnMatrix()),x=$t(new v(h,c),void 0,l.calcOwnMatrix());g[u][d]=x.x+f.x,g[u][d+1]=x.y+f.y,l.setDimensions();let C=y.subtract(l.pathOffset).transform(l.calcOwnMatrix()).subtract(b);return l.left-=C.x,l.top-=C.y,l.set("dirty",!0),!0})(s,e,i,n,a);return o&&Rn(this.actionName,{...En(r,t,e,i),commandIndex:n,pointIndex:a}),o}var yl=class extends ut{constructor(r){super(r)}render(r,t,e,i,s){let n={...i,cornerColor:this.controlFill,cornerStrokeColor:this.controlStroke,transparentCorners:!this.controlFill};super.render(r,t,e,n,s)}},du=class extends yl{constructor(r){super(r)}render(r,t,e,i,s){let{path:n}=s,{commandIndex:a,pointIndex:o,connectToCommandIndex:l,connectToPointIndex:h}=this;r.save(),r.strokeStyle=this.controlStroke,this.connectionDashArray&&r.setLineDash(this.connectionDashArray);let[c]=n[a],u=rn(s,l,h);if(c==="Q"){let d=rn(s,a,o+2);r.moveTo(d.x,d.y),r.lineTo(t,e)}else r.moveTo(t,e);r.lineTo(u.x,u.y),r.stroke(),r.restore(),super.render(r,t,e,i,s)}},ui=(r,t,e,i,s,n)=>new(e?du:yl)({commandIndex:r,pointIndex:t,actionName:"modifyPath",positionHandler:cu,actionHandler:uu,connectToCommandIndex:s,connectToPointIndex:n,...i,...e?i.controlPointStyle:i.pointStyle});function gu(r,t={}){let e={},i="M";return r.path.forEach((s,n)=>{let a=s[0];switch(a!=="Z"&&(e[`c_${n}_${a}`]=ui(n,s.length-2,!1,t)),a){case"C":e[`c_${n}_C_CP_1`]=ui(n,1,!0,t,n-1,(o=>o==="C"?5:o==="Q"?3:1)(i)),e[`c_${n}_C_CP_2`]=ui(n,3,!0,t,n,5);break;case"Q":e[`c_${n}_Q_CP_1`]=ui(n,1,!0,t,n,3)}i=a}),e}var cg=zr({changeHeight:()=>Sc,changeObjectHeight:()=>Po,changeObjectWidth:()=>Mo,changeWidth:()=>zs,createObjectDefaultControls:()=>Xn,createPathControls:()=>gu,createPolyActionHandler:()=>ml,createPolyControls:()=>hu,createPolyPositionHandler:()=>gl,createResizeControls:()=>Wo,createTextboxDefaultControls:()=>Ho,dragHandler:()=>ul,factoryPolyActionHandler:()=>pl,getLocalPoint:()=>Hi,polyActionHandler:()=>fl,renderCircleControl:()=>Eo,renderSquareControl:()=>Ao,rotationStyleHandler:()=>Do,rotationWithSnapping:()=>jo,scaleCursorStyleHandler:()=>Ae,scaleOrSkewActionName:()=>yr,scaleSkewCursorStyleHandler:()=>ce,scalingEqually:()=>mr,scalingX:()=>Io,scalingXOrSkewingY:()=>Gs,scalingY:()=>Ro,scalingYOrSkewingX:()=>Vs,skewCursorStyleHandler:()=>Bo,skewHandlerX:()=>Yo,skewHandlerY:()=>$o,wrapWithFireEvent:()=>Ht,wrapWithFixedAnchor:()=>Qt}),vl=class bl extends ze{constructor(...t){super(...t),m(this,"_hoveredTargets",[]),m(this,"_currentTransform",null),m(this,"_groupSelector",null),m(this,"contextTopDirty",!1)}static getDefaults(){return{...super.getDefaults(),...bl.ownDefaults}}get upperCanvasEl(){var t;return(t=this.elements.upper)==null?void 0:t.el}get contextTop(){var t;return(t=this.elements.upper)==null?void 0:t.ctx}get wrapperEl(){return this.elements.container}initElements(t){this.elements=new lu(t,{allowTouchScrolling:this.allowTouchScrolling,containerClass:this.containerClass}),this._createCacheCanvas()}_onObjectAdded(t){this._objectsToRender=void 0,super._onObjectAdded(t)}_onObjectRemoved(t){this._objectsToRender=void 0,t===this._activeObject&&(this.fire("before:selection:cleared",{deselected:[t]}),this._discardActiveObject(),this.fire("selection:cleared",{deselected:[t]}),t.fire("deselected",{target:t})),t===this._hoveredTarget&&(this._hoveredTarget=void 0,this._hoveredTargets=[]),super._onObjectRemoved(t)}_onStackOrderChanged(){this._objectsToRender=void 0,super._onStackOrderChanged()}_chooseObjectsToRender(){let t=this._activeObject;return!this.preserveObjectStacking&&t?this._objects.filter(e=>!e.group&&e!==t).concat(t):this._objects}renderAll(){this.cancelRequestedRender(),this.destroyed||(!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1),!this._objectsToRender&&(this._objectsToRender=this._chooseObjectsToRender()),this.renderCanvas(this.getContext(),this._objectsToRender))}renderTopLayer(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(){let t=this.contextTop;this.clearContext(t),this.renderTopLayer(t),this.fire("after:render",{ctx:t})}setTargetFindTolerance(t){t=Math.round(t),this.targetFindTolerance=t;let e=this.getRetinaScaling(),i=Math.ceil((2*t+1)*e);this.pixelFindCanvasEl.width=this.pixelFindCanvasEl.height=i,this.pixelFindContext.scale(e,e)}isTargetTransparent(t,e,i){let s=this.targetFindTolerance,n=this.pixelFindContext;this.clearContext(n),n.save(),n.translate(-e+s,-i+s),n.transform(...this.viewportTransform);let a=t.selectionBackgroundColor;t.selectionBackgroundColor="",t.render(n),t.selectionBackgroundColor=a,n.restore();let o=Math.round(s*this.getRetinaScaling());return Vo(n,o,o,o)}_isSelectionKeyPressed(t){let e=this.selectionKey;return!!e&&(Array.isArray(e)?!!e.find(i=>!!i&&t[i]===!0):t[e])}_shouldClearSelection(t,e){let i=this.getActiveObjects(),s=this._activeObject;return!!(!e||e&&s&&i.length>1&&i.indexOf(e)===-1&&s!==e&&!this._isSelectionKeyPressed(t)||e&&!e.evented||e&&!e.selectable&&s&&s!==e)}_shouldCenterTransform(t,e,i){if(!t)return;let s;return e==="scale"||e==="scaleX"||e==="scaleY"||e==="resizing"?s=this.centeredScaling||t.centeredScaling:e==="rotate"&&(s=this.centeredRotation||t.centeredRotation),s?!i:i}_getOriginFromCorner(t,e){let i=e?t.controls[e].getTransformAnchorPoint():{x:t.originX,y:t.originY};return e&&(["ml","tl","bl"].includes(e)?i.x=wt:["mr","tr","br"].includes(e)&&(i.x=z),["tl","mt","tr"].includes(e)?i.y=Wa:["bl","mb","br"].includes(e)&&(i.y="top")),i}_setupCurrentTransform(t,e,i){var s;let n=e.group?$t(this.getScenePoint(t),void 0,e.group.calcTransformMatrix()):this.getScenePoint(t),{key:a="",control:o}=e.getActiveControl()||{},l=i&&o?(s=o.getActionHandler(t,e,o))==null?void 0:s.bind(o):ul,h=((O,M,D,E)=>{if(!M||!O)return"drag";let A=E.controls[M];return A.getActionName(D,A,E)})(i,a,t,e),c=t[this.centeredKey],u=this._shouldCenterTransform(e,h,c)?{x:F,y:F}:this._getOriginFromCorner(e,a),{scaleX:d,scaleY:g,skewX:f,skewY:p,left:y,top:b,angle:x,width:C,height:S,cropX:w,cropY:k}=e,T={target:e,action:h,actionHandler:l,actionPerformed:!1,corner:a,scaleX:d,scaleY:g,skewX:f,skewY:p,offsetX:n.x-y,offsetY:n.y-b,originX:u.x,originY:u.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:X(x),width:C,height:S,shiftKey:t.shiftKey,altKey:c,original:{..._n(e),originX:u.x,originY:u.y,cropX:w,cropY:k}};this._currentTransform=T,this.fire("before:transform",{e:t,transform:T})}setCursor(t){this.upperCanvasEl.style.cursor=t}_drawSelection(t){let{x:e,y:i,deltaX:s,deltaY:n}=this._groupSelector,a=new v(e,i).transform(this.viewportTransform),o=new v(e+s,i+n).transform(this.viewportTransform),l=this.selectionLineWidth/2,h=Math.min(a.x,o.x),c=Math.min(a.y,o.y),u=Math.max(a.x,o.x),d=Math.max(a.y,o.y);this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(h,c,u-h,d-c)),this.selectionLineWidth&&this.selectionBorderColor&&(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,h+=l,c+=l,u-=l,d-=l,G.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(h,c,u-h,d-c))}findTarget(t){if(this._targetInfo)return this._targetInfo;if(this.skipTargetFind)return{subTargets:[],currentSubTargets:[]};let e=this.getScenePoint(t),i=this._activeObject,s=this.getActiveObjects(),n=this.searchPossibleTargets(this._objects,e),{subTargets:a,container:o,target:l}=n,h={...n,currentSubTargets:a,currentContainer:o,currentTarget:l};if(!i)return h;let c={...this.searchPossibleTargets([i],e),currentSubTargets:a,currentContainer:o,currentTarget:l};return i.findControl(this.getViewportPoint(t),Mi(t))?{...c,target:i}:c.target&&(s.length>1||!this.preserveObjectStacking||this.preserveObjectStacking&&t[this.altSelectionKey])?c:h}_pointIsInObjectSelectionArea(t,e){let i=t.getCoords(),s=this.getZoom(),n=t.padding/s;if(n){let[a,o,l,h]=i,c=Math.atan2(o.y-a.y,o.x-a.x),u=Tt(c)*n,d=kt(c)*n,g=u+d,f=u-d;i=[new v(a.x-f,a.y-g),new v(o.x+g,o.y-f),new v(l.x+f,l.y+g),new v(h.x-g,h.y+f)]}return Xr.isPointInPolygon(e,i)}_checkTarget(t,e){if(t&&t.visible&&t.evented&&this._pointIsInObjectSelectionArea(t,e)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||t.isEditing)return!0;{let i=e.transform(this.viewportTransform);if(!this.isTargetTransparent(t,i.x,i.y))return!0}}return!1}_searchPossibleTargets(t,e,i){let s=t.length;for(;s--;){let n=t[s];if(this._checkTarget(n,e)){if(xi(n)&&n.subTargetCheck){let{target:a}=this._searchPossibleTargets(n._objects,e,i);a&&i.push(a)}return{target:n,subTargets:i}}}return{subTargets:[]}}searchPossibleTargets(t,e){let i=this._searchPossibleTargets(t,e,[]);i.container=i.target;let{container:s,subTargets:n}=i;if(s&&xi(s)&&s.interactive&&n[0]){for(let a=n.length-1;a>0;a--){let o=n[a];if(!xi(o)||!o.interactive)return i.target=o,i}return i.target=n[0],i}return i}getViewportPoint(t){return this._viewportPoint?this._viewportPoint:this._getPointerImpl(t,!0)}getScenePoint(t){return this._scenePoint?this._scenePoint:this._getPointerImpl(t)}_getPointerImpl(t,e=!1){let i=this.upperCanvasEl,s=i.getBoundingClientRect(),n=ho(t),a=s.width||0,o=s.height||0;a&&o||("top"in s&&"bottom"in s&&(o=Math.abs(s.top-s.bottom)),"right"in s&&"left"in s&&(a=Math.abs(s.right-s.left))),this.calcOffset(),n.x-=this._offset.left,n.y-=this._offset.top,e||(n=$t(n,void 0,this.viewportTransform));let l=this.getRetinaScaling();l!==1&&(n.x/=l,n.y/=l);let h=a===0||o===0?new v(1,1):new v(i.width/a,i.height/o);return n.multiply(h)}_setDimensionsImpl(t,e){this._resetTransformEventData(),super._setDimensionsImpl(t,e),this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop)}_createCacheCanvas(){this.pixelFindCanvasEl=jt(),this.pixelFindContext=this.pixelFindCanvasEl.getContext("2d",{willReadFrequently:!0}),this.setTargetFindTolerance(this.targetFindTolerance)}getTopContext(){return this.elements.upper.ctx}getSelectionContext(){return this.elements.upper.ctx}getSelectionElement(){return this.elements.upper.el}getActiveObject(){return this._activeObject}getActiveObjects(){let t=this._activeObject;return oe(t)?t.getObjects():t?[t]:[]}_fireSelectionEvents(t,e){let i=!1,s=!1,n=this.getActiveObjects(),a=[],o=[];t.forEach(l=>{n.includes(l)||(i=!0,l.fire("deselected",{e,target:l}),o.push(l))}),n.forEach(l=>{t.includes(l)||(i=!0,l.fire("selected",{e,target:l}),a.push(l))}),t.length>0&&n.length>0?(s=!0,i&&this.fire("selection:updated",{e,selected:a,deselected:o})):n.length>0?(s=!0,this.fire("selection:created",{e,selected:a})):t.length>0&&(s=!0,this.fire("selection:cleared",{e,deselected:o})),s&&(this._objectsToRender=void 0)}setActiveObject(t,e){let i=this.getActiveObjects(),s=this._setActiveObject(t,e);return this._fireSelectionEvents(i,e),s}_setActiveObject(t,e){let i=this._activeObject;return i!==t&&!(!this._discardActiveObject(e,t)&&this._activeObject)&&!t.onSelect({e})&&(this._activeObject=t,oe(t)&&i!==t&&t.set("canvas",this),t.setCoords(),!0)}_discardActiveObject(t,e){let i=this._activeObject;return!!i&&!i.onDeselect({e:t,object:e})&&(this._currentTransform&&this._currentTransform.target===i&&this.endCurrentTransform(t),oe(i)&&i===this._hoveredTarget&&(this._hoveredTarget=void 0),this._activeObject=void 0,!0)}discardActiveObject(t){let e=this.getActiveObjects(),i=this.getActiveObject();e.length&&this.fire("before:selection:cleared",{e:t,deselected:[i]});let s=this._discardActiveObject(t);return this._fireSelectionEvents(e,t),s}endCurrentTransform(t){let e=this._currentTransform;this._finalizeCurrentTransform(t),e&&e.target&&(e.target.isMoving=!1),this._currentTransform=null}_finalizeCurrentTransform(t){let e=this._currentTransform,i=e.target,s={e:t,target:i,transform:e,action:e.action};i._scaling&&(i._scaling=!1),i.setCoords(),e.actionPerformed&&(this.fire("object:modified",s),i.fire(qa,s))}setViewportTransform(t){super.setViewportTransform(t);let e=this._activeObject;e&&e.setCoords()}destroy(){let t=this._activeObject;oe(t)&&(t.removeAll(),t.dispose()),delete this._activeObject,super.destroy(),this.pixelFindContext=null,this.pixelFindCanvasEl=void 0}clear(){this.discardActiveObject(),this._activeObject=void 0,this.clearContext(this.contextTop),super.clear()}drawControls(t){let e=this._activeObject;e&&e._renderControls(t)}_toObject(t,e,i){let s=this._realizeGroupTransformOnObject(t),n=super._toObject(t,e,i);return t.set(s),n}_realizeGroupTransformOnObject(t){let{group:e}=t;if(e&&oe(e)&&this._activeObject===e){let i=ye(t,["angle","flipX","flipY",z,Jt,Zt,$e,We,"top"]);return co(t,e.calcOwnMatrix()),i}return{}}_setSVGObject(t,e,i){let s=this._realizeGroupTransformOnObject(e);super._setSVGObject(t,e,i),e.set(s)}};m(vl,"ownDefaults",{uniformScaling:!0,uniScaleKey:"shiftKey",centeredScaling:!1,centeredRotation:!1,centeredKey:"altKey",altActionKey:"shiftKey",selection:!0,selectionKey:"shiftKey",selectionColor:"rgba(100, 100, 255, 0.3)",selectionDashArray:[],selectionBorderColor:"rgba(255, 255, 255, 0.3)",selectionLineWidth:1,selectionFullyContained:!1,hoverCursor:"move",moveCursor:"move",defaultCursor:"default",freeDrawingCursor:"crosshair",notAllowedCursor:"not-allowed",perPixelTargetFind:!1,targetFindTolerance:0,skipTargetFind:!1,stopContextMenu:!0,fireRightClick:!0,fireMiddleClick:!0,enablePointerEvents:!1,containerClass:"canvas-container",preserveObjectStacking:!0});var fu=class{constructor(r){m(this,"targets",[]),m(this,"__disposer",void 0);let t=()=>{let{hiddenTextarea:i}=r.getActiveObject()||{};i&&i.focus()},e=r.upperCanvasEl;e.addEventListener("click",t),this.__disposer=()=>e.removeEventListener("click",t)}exitTextEditing(){this.target=void 0,this.targets.forEach(r=>{r.isEditing&&r.exitEditing()})}add(r){this.targets.push(r)}remove(r){this.unregister(r),ae(this.targets,r)}register(r){this.target=r}unregister(r){r===this.target&&(this.target=void 0)}onMouseMove(r){var t;(t=this.target)!=null&&t.isEditing&&this.target.updateSelectionOnMouseMove(r)}clear(){this.targets=[],this.target=void 0}dispose(){this.clear(),this.__disposer(),delete this.__disposer}},ct={passive:!1},Me=(r,t)=>({viewportPoint:r.getViewportPoint(t),scenePoint:r.getScenePoint(t)}),Nt=(r,...t)=>r.addEventListener(...t),mt=(r,...t)=>r.removeEventListener(...t),pu={mouse:{in:"over",out:"out",targetIn:"mouseover",targetOut:"mouseout",canvasIn:"mouse:over",canvasOut:"mouse:out"},drag:{in:"enter",out:"leave",targetIn:"dragenter",targetOut:"dragleave",canvasIn:"drag:enter",canvasOut:"drag:leave"}},Li=class extends vl{constructor(r,t={}){super(r,t),m(this,"_isClick",void 0),m(this,"textEditingManager",new fu(this)),["_onMouseDown","_onTouchStart","_onMouseMove","_onMouseUp","_onTouchEnd","_onResize","_onMouseWheel","_onMouseOut","_onMouseEnter","_onContextMenu","_onClick","_onDragStart","_onDragEnd","_onDragProgress","_onDragOver","_onDragEnter","_onDragLeave","_onDrop"].forEach(e=>{this[e]=this[e].bind(this)}),this.addOrRemove(Nt)}_getEventPrefix(){return this.enablePointerEvents?"pointer":"mouse"}addOrRemove(r,t=!1){let e=this.upperCanvasEl,i=this._getEventPrefix();r(no(e),"resize",this._onResize),r(e,i+"down",this._onMouseDown),r(e,`${i}move`,this._onMouseMove,ct),r(e,`${i}out`,this._onMouseOut),r(e,`${i}enter`,this._onMouseEnter),r(e,"wheel",this._onMouseWheel,{passive:!1}),r(e,"contextmenu",this._onContextMenu),t||(r(e,"click",this._onClick),r(e,"dblclick",this._onClick)),r(e,"dragstart",this._onDragStart),r(e,"dragend",this._onDragEnd),r(e,"dragover",this._onDragOver),r(e,"dragenter",this._onDragEnter),r(e,"dragleave",this._onDragLeave),r(e,"drop",this._onDrop),this.enablePointerEvents||r(e,"touchstart",this._onTouchStart,ct)}removeListeners(){this.addOrRemove(mt);let r=this._getEventPrefix(),t=xt(this.upperCanvasEl);mt(t,`${r}up`,this._onMouseUp),mt(t,"touchend",this._onTouchEnd,ct),mt(t,`${r}move`,this._onMouseMove,ct),mt(t,"touchmove",this._onMouseMove,ct),clearTimeout(this._willAddMouseDown)}_onMouseWheel(r){this._cacheTransformEventData(r),this._handleEvent(r,"wheel"),this._resetTransformEventData()}_onMouseOut(r){let t=this._hoveredTarget,e={e:r,...Me(this,r)};this.fire("mouse:out",{...e,target:t}),this._hoveredTarget=void 0,t&&t.fire("mouseout",{...e}),this._hoveredTargets.forEach(i=>{this.fire("mouse:out",{...e,target:i}),i&&i.fire("mouseout",{...e})}),this._hoveredTargets=[]}_onMouseEnter(r){let{target:t}=this.findTarget(r);this._currentTransform||t||(this.fire("mouse:over",{e:r,...Me(this,r)}),this._hoveredTarget=void 0,this._hoveredTargets=[])}_onDragStart(r){this._isClick=!1;let t=this.getActiveObject();if(t&&t.onDragStart(r)){this._dragSource=t;let e={e:r,target:t};this.fire("dragstart",e),t.fire("dragstart",e),Nt(this.upperCanvasEl,"drag",this._onDragProgress);return}pa(r)}_renderDragEffects(r,t,e){let i=!1,s=this._dropTarget;s&&s!==t&&s!==e&&(s.clearContextTop(),i=!0),t?.clearContextTop(),e!==t&&e?.clearContextTop();let n=this.contextTop;n.save(),n.transform(...this.viewportTransform),t&&(n.save(),t.transform(n),t.renderDragSourceEffect(r),n.restore(),i=!0),e&&(n.save(),e.transform(n),e.renderDropTargetEffect(r),n.restore(),i=!0),n.restore(),i&&(this.contextTopDirty=!0)}_onDragEnd(r){let{currentSubTargets:t}=this.findTarget(r),e=!!r.dataTransfer&&r.dataTransfer.dropEffect!=="none",i=e?this._activeObject:void 0,s={e:r,target:this._dragSource,subTargets:t,dragSource:this._dragSource,didDrop:e,dropTarget:i};mt(this.upperCanvasEl,"drag",this._onDragProgress),this.fire("dragend",s),this._dragSource&&this._dragSource.fire("dragend",s),delete this._dragSource,this._onMouseUp(r)}_onDragProgress(r){let t={e:r,target:this._dragSource,dragSource:this._dragSource,dropTarget:this._draggedoverTarget};this.fire("drag",t),this._dragSource&&this._dragSource.fire("drag",t)}_onDragOver(r){let t="dragover",{currentContainer:e,currentSubTargets:i}=this.findTarget(r),s=this._dragSource,n={e:r,target:e,subTargets:i,dragSource:s,canDrop:!1,dropTarget:void 0},a;this.fire(t,n),this._fireEnterLeaveEvents(r,e,n),e&&(e.canDrop(r)&&(a=e),e.fire(t,n));for(let o=0;o<i.length;o++){let l=i[o];l.canDrop(r)&&(a=l),l.fire(t,n)}this._renderDragEffects(r,s,a),this._dropTarget=a}_onDragEnter(r){let{currentContainer:t,currentSubTargets:e}=this.findTarget(r),i={e:r,target:t,subTargets:e,dragSource:this._dragSource};this.fire("dragenter",i),this._fireEnterLeaveEvents(r,t,i)}_onDragLeave(r){let{currentSubTargets:t}=this.findTarget(r),e={e:r,target:this._draggedoverTarget,subTargets:t,dragSource:this._dragSource};this.fire("dragleave",e),this._fireEnterLeaveEvents(r,void 0,e),this._renderDragEffects(r,this._dragSource),this._dropTarget=void 0,this._hoveredTargets=[]}_onDrop(r){let{currentContainer:t,currentSubTargets:e}=this.findTarget(r),i=this._basicEventHandler("drop:before",{e:r,target:t,subTargets:e,dragSource:this._dragSource,...Me(this,r)});i.didDrop=!1,i.dropTarget=void 0,this._basicEventHandler("drop",i),this.fire("drop:after",i)}_onContextMenu(r){let{target:t,subTargets:e}=this.findTarget(r),i=this._basicEventHandler("contextmenu:before",{e:r,target:t,subTargets:e});return this.stopContextMenu&&pa(r),this._basicEventHandler("contextmenu",i),!1}_onClick(r){let t=r.detail;t>3||t<2||(this._cacheTransformEventData(r),t==2&&r.type==="dblclick"&&this._handleEvent(r,"dblclick"),t==3&&this._handleEvent(r,"tripleclick"),this._resetTransformEventData())}fireEventFromPointerEvent(r,t,e,i={}){this._cacheTransformEventData(r);let{target:s,subTargets:n}=this.findTarget(r),a={e:r,target:s,subTargets:n,...Me(this,r),transform:this._currentTransform,...i};this.fire(t,a),s&&s.fire(e,a);for(let o=0;o<n.length;o++)n[o]!==s&&n[o].fire(e,a);this._resetTransformEventData()}getPointerId(r){let t=r.changedTouches;return t?t[0]&&t[0].identifier:this.enablePointerEvents?r.pointerId:-1}_isMainEvent(r){return r.isPrimary===!0||r.isPrimary!==!1&&(r.type==="touchend"&&r.touches.length===0||!r.changedTouches||r.changedTouches[0].identifier===this.mainTouchId)}_onTouchStart(r){this._cacheTransformEventData(r);let t=!this.allowTouchScrolling,e=this._activeObject;this.mainTouchId===void 0&&(this.mainTouchId=this.getPointerId(r)),this.__onMouseDown(r);let{target:i}=this.findTarget(r);(this.isDrawingMode||e&&i===e)&&(t=!0),t&&r.preventDefault();let s=this.upperCanvasEl,n=this._getEventPrefix(),a=xt(s);Nt(a,"touchend",this._onTouchEnd,ct),t&&Nt(a,"touchmove",this._onMouseMove,ct),mt(s,`${n}down`,this._onMouseDown),this._resetTransformEventData()}_onMouseDown(r){this._cacheTransformEventData(r),this.__onMouseDown(r);let t=this.upperCanvasEl,e=this._getEventPrefix();mt(t,`${e}move`,this._onMouseMove,ct);let i=xt(t);Nt(i,`${e}up`,this._onMouseUp),Nt(i,`${e}move`,this._onMouseMove,ct),this._resetTransformEventData()}_onTouchEnd(r){if(r.touches.length>0)return;this._cacheTransformEventData(r),this.__onMouseUp(r),this._resetTransformEventData(),delete this.mainTouchId;let t=this._getEventPrefix(),e=xt(this.upperCanvasEl);mt(e,"touchend",this._onTouchEnd,ct),mt(e,"touchmove",this._onMouseMove,ct),this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(()=>{Nt(this.upperCanvasEl,`${t}down`,this._onMouseDown),this._willAddMouseDown=0},400)}_onMouseUp(r){this._cacheTransformEventData(r),this.__onMouseUp(r);let t=this.upperCanvasEl,e=this._getEventPrefix();if(this._isMainEvent(r)){let i=xt(this.upperCanvasEl);mt(i,`${e}up`,this._onMouseUp),mt(i,`${e}move`,this._onMouseMove,ct),Nt(t,`${e}move`,this._onMouseMove,ct)}this._resetTransformEventData()}_onMouseMove(r){this._cacheTransformEventData(r);let t=this.getActiveObject();!this.allowTouchScrolling&&(!t||!t.shouldStartDragging(r))&&r.preventDefault&&r.preventDefault(),this.__onMouseMove(r),this._resetTransformEventData()}_onResize(){this.calcOffset(),this._resetTransformEventData()}_shouldRender(r){let t=this.getActiveObject();return!!t!=!!r||t&&r&&t!==r}__onMouseUp(r){var t;this._handleEvent(r,"up:before");let e=this._currentTransform,i=this._isClick,{target:s}=this.findTarget(r),{button:n}=r;if(n)return void((this.fireMiddleClick&&n===1||this.fireRightClick&&n===2)&&this._handleEvent(r,"up"));if(this.isDrawingMode&&this._isCurrentlyDrawing)return void this._onMouseUpInDrawingMode(r);if(!this._isMainEvent(r))return;let a,o,l=!1;if(e&&(this._finalizeCurrentTransform(r),l=e.actionPerformed),!i){let h=s===this._activeObject;this.handleSelection(r),l||(l=this._shouldRender(s)||!h&&s===this._activeObject)}if(s){let{key:h,control:c}=s.findControl(this.getViewportPoint(r),Mi(r))||{};if(o=h,s.selectable&&s!==this._activeObject&&s.activeOn==="up")this.setActiveObject(s,r),l=!0;else if(c){let u=c.getMouseUpHandler(r,s,c);u&&(a=this.getScenePoint(r),u.call(c,r,e,a.x,a.y))}s.isMoving=!1}if(e&&(e.target!==s||e.corner!==o)){let h=e.target&&e.target.controls[e.corner],c=h&&h.getMouseUpHandler(r,e.target,h);a=a||this.getScenePoint(r),c&&c.call(h,r,e,a.x,a.y)}this._setCursorFromEvent(r,s),this._handleEvent(r,"up"),this._groupSelector=null,this._currentTransform=null,s&&(s.__corner=void 0),l?this.requestRenderAll():i||(t=this._activeObject)!=null&&t.isEditing||this.renderTop()}_basicEventHandler(r,t){let{target:e,subTargets:i=[]}=t;this.fire(r,t),e&&e.fire(r,t);for(let s=0;s<i.length;s++)i[s]!==e&&i[s].fire(r,t);return t}_handleEvent(r,t,e){let{target:i,subTargets:s}=this.findTarget(r),n={e:r,target:i,subTargets:s,...Me(this,r),transform:this._currentTransform,...t==="down:before"||t==="down"?e:{}};t!=="up:before"&&t!=="up"||(n.isClick=this._isClick),this.fire(`mouse:${t}`,n),i&&i.fire(`mouse${t}`,n);for(let a=0;a<s.length;a++)s[a]!==i&&s[a].fire(`mouse${t}`,n)}_onMouseDownInDrawingMode(r){this._isCurrentlyDrawing=!0,this.getActiveObject()&&(this.discardActiveObject(r),this.requestRenderAll());let t=this.getScenePoint(r);this.freeDrawingBrush&&this.freeDrawingBrush.onMouseDown(t,{e:r,pointer:t}),this._handleEvent(r,"down",{alreadySelected:!1})}_onMouseMoveInDrawingMode(r){if(this._isCurrentlyDrawing){let t=this.getScenePoint(r);this.freeDrawingBrush&&this.freeDrawingBrush.onMouseMove(t,{e:r,pointer:t})}this.setCursor(this.freeDrawingCursor),this._handleEvent(r,"move")}_onMouseUpInDrawingMode(r){let t=this.getScenePoint(r);this.freeDrawingBrush?this._isCurrentlyDrawing=!!this.freeDrawingBrush.onMouseUp({e:r,pointer:t}):this._isCurrentlyDrawing=!1,this._handleEvent(r,"up")}__onMouseDown(r){this._isClick=!0,this._handleEvent(r,"down:before");let{target:t}=this.findTarget(r),e=!!t&&t===this._activeObject,{button:i}=r;if(i)return void((this.fireMiddleClick&&i===1||this.fireRightClick&&i===2)&&this._handleEvent(r,"down",{alreadySelected:e}));if(this.isDrawingMode)return void this._onMouseDownInDrawingMode(r);if(!this._isMainEvent(r)||this._currentTransform)return;let s=this._shouldRender(t),n=!1;if(this.handleMultiSelection(r,t)?(t=this._activeObject,n=!0,s=!0):this._shouldClearSelection(r,t)&&this.discardActiveObject(r),this.selection&&(!t||!t.selectable&&!t.isEditing&&t!==this._activeObject)){let a=this.getScenePoint(r);this._groupSelector={x:a.x,y:a.y,deltaY:0,deltaX:0}}if(e=!!t&&t===this._activeObject,t){t.selectable&&t.activeOn==="down"&&this.setActiveObject(t,r);let a=t.findControl(this.getViewportPoint(r),Mi(r));if(t===this._activeObject&&(a||!n)){this._setupCurrentTransform(r,t,e);let o=a?a.control:void 0,l=this.getScenePoint(r),h=o&&o.getMouseDownHandler(r,t,o);h&&h.call(o,r,this._currentTransform,l.x,l.y)}}s&&(this._objectsToRender=void 0),this._handleEvent(r,"down",{alreadySelected:e}),s&&this.requestRenderAll()}_resetTransformEventData(){this._targetInfo=this._viewportPoint=this._scenePoint=void 0}_cacheTransformEventData(r){this._resetTransformEventData(),this._viewportPoint=this.getViewportPoint(r),this._scenePoint=$t(this._viewportPoint,void 0,this.viewportTransform),this._targetInfo=this.findTarget(r),this._currentTransform&&(this._targetInfo.target=this._currentTransform.target)}__onMouseMove(r){if(this._isClick=!1,this._handleEvent(r,"move:before"),this.isDrawingMode)return void this._onMouseMoveInDrawingMode(r);if(!this._isMainEvent(r))return;let t=this._groupSelector;if(t){let e=this.getScenePoint(r);t.deltaX=e.x-t.x,t.deltaY=e.y-t.y,this.renderTop()}else if(this._currentTransform)this._transformObject(r);else{let{target:e}=this.findTarget(r);this._setCursorFromEvent(r,e),this._fireOverOutEvents(r,e)}this.textEditingManager.onMouseMove(r),this._handleEvent(r,"move")}_fireOverOutEvents(r,t){let{_hoveredTarget:e,_hoveredTargets:i}=this,{subTargets:s,currentTarget:n}=this.findTarget(r),a=Math.max(i.length,s.length);this.fireSyntheticInOutEvents("mouse",{e:r,target:t,oldTarget:e,actualTarget:n,oldActualTarget:this._hoveredActualTarget,fireCanvas:!0});for(let o=0;o<a;o++)s[o]===t||i[o]&&i[o]===e||this.fireSyntheticInOutEvents("mouse",{e:r,target:s[o],oldTarget:i[o]});this._hoveredActualTarget=n,this._hoveredTarget=t,this._hoveredTargets=s}_fireEnterLeaveEvents(r,t,e){let i=this._draggedoverTarget,s=this._hoveredTargets,{subTargets:n}=this.findTarget(r),a=Math.max(s.length,n.length);this.fireSyntheticInOutEvents("drag",{...e,target:t,oldTarget:i,fireCanvas:!0});for(let o=0;o<a;o++)this.fireSyntheticInOutEvents("drag",{...e,target:n[o],oldTarget:s[o]});this._draggedoverTarget=t}fireSyntheticInOutEvents(r,{target:t,oldTarget:e,actualTarget:i,oldActualTarget:s,fireCanvas:n,e:a,...o}){let{targetIn:l,targetOut:h,canvasIn:c,canvasOut:u}=pu[r],d=e!==t,g=s!==i,f=t&&d,p=i&&g,y=e&&d,b=s&&g,x={...o,e:a,...Me(this,a)},C={...x,target:e,nextTarget:t,actualTarget:s,nextActualTarget:i};(y||b)&&n&&this.fire(u,C),y&&e.fire(h,C),b&&e!==s&&s.fire(h,C);let S={...x,target:t,previousTarget:e,actualTarget:i,previousActualTarget:s};(f||p)&&n&&this.fire(c,S),f&&t.fire(l,S),p&&i!==t&&i.fire(l,S)}_transformObject(r){let t=this.getScenePoint(r),e=this._currentTransform,i=e.target,s=i.group?$t(t,void 0,i.group.calcTransformMatrix()):t;e.shiftKey=r.shiftKey,e.altKey=!!this.centeredKey&&r[this.centeredKey],this._performTransformAction(r,e,s),e.actionPerformed&&this.requestRenderAll()}_performTransformAction(r,t,e){let{action:i,actionHandler:s,target:n}=t,a=!!s&&s(r,t,e.x,e.y);a&&n.setCoords(),i==="drag"&&a&&(t.target.isMoving=!0,this.setCursor(t.target.moveCursor||this.moveCursor)),t.actionPerformed=t.actionPerformed||a}_setCursorFromEvent(r,t){if(!t)return void this.setCursor(this.defaultCursor);let e=t.hoverCursor||this.hoverCursor,i=oe(this._activeObject)?this._activeObject:null,s=(!i||t.group!==i)&&t.findControl(this.getViewportPoint(r));if(s){let{control:n,coord:a}=s;this.setCursor(n.cursorStyleHandler(r,n,t,a))}else{if(t.subTargetCheck){let{subTargets:n}=this.findTarget(r);n.concat().reverse().forEach(a=>{e=a.hoverCursor||e})}this.setCursor(e)}}handleMultiSelection(r,t){let e=this._activeObject,i=oe(e);if(e&&this._isSelectionKeyPressed(r)&&this.selection&&t&&t.selectable&&(e!==t||i)&&(i||!t.isDescendantOf(e)&&!e.isDescendantOf(t))&&!t.onSelect({e:r})&&!e.getActiveControl()){if(i){let s=e.getObjects(),n=[];if(t===e){let a=this.getScenePoint(r),o=this.searchPossibleTargets(s,a);if(o.target?(t=o.target,n=o.subTargets):(o=this.searchPossibleTargets(this._objects,a),t=o.target,n=o.subTargets),!t||!t.selectable)return!1}t.group===e?(e.remove(t),this._hoveredTarget=t,this._hoveredTargets=n,e.size()===1&&this._setActiveObject(e.item(0),r)):(e.multiSelectAdd(t),this._hoveredTarget=e,this._hoveredTargets=n),this._fireSelectionEvents(s,r)}else{e.isEditing&&e.exitEditing();let s=new(_.getClass("ActiveSelection"))([],{canvas:this});s.multiSelectAdd(e,t),this._hoveredTarget=s,this._setActiveObject(s,r),this._fireSelectionEvents([e],r)}return!0}return!1}handleSelection(r){if(!this.selection||!this._groupSelector)return!1;let{x:t,y:e,deltaX:i,deltaY:s}=this._groupSelector,n=new v(t,e),a=n.add(new v(i,s)),o=n.min(a),l=n.max(a).subtract(o),h=this.collectObjects({left:o.x,top:o.y,width:l.x,height:l.y},{includeIntersecting:!this.selectionFullyContained}),c=n.eq(a)?h[0]?[h[0]]:[]:h.length>1?h.filter(u=>!u.onSelect({e:r})).reverse():h;if(c.length===1)this.setActiveObject(c[0],r);else if(c.length>1){let u=_.getClass("ActiveSelection");this.setActiveObject(new u(c,{canvas:this}),r)}return this._groupSelector=null,!0}toCanvasElement(r=1,t){let{upper:e}=this.elements;e.ctx=void 0;let i=super.toCanvasElement(r,t);return e.ctx=e.el.getContext("2d"),i}clear(){this.textEditingManager.clear(),super.clear()}destroy(){this.removeListeners(),this.textEditingManager.dispose(),super.destroy()}},xl={x1:0,y1:0,x2:0,y2:0},mu={...xl,r1:0,r2:0},De=(r,t)=>isNaN(r)&&typeof t=="number"?t:r;function Cl(r){return r&&/%$/.test(r)&&Number.isFinite(parseFloat(r))}function wl(r,t){return pe(0,De(typeof r=="number"?r:typeof r=="string"?parseFloat(r)/(Cl(r)?100:1):NaN,t),1)}var yu=/\s*;\s*/,vu=/\s*:\s*/;function bu(r,t){let e,i,s=r.getAttribute("style");if(s){let a=s.split(yu);a[a.length-1]===""&&a.pop();for(let o=a.length;o--;){let[l,h]=a[o].split(vu).map(c=>c.trim());l==="stop-color"?e=h:l==="stop-opacity"&&(i=h)}}e=e||r.getAttribute("stop-color")||"rgb(0,0,0)",i=De(parseFloat(i||r.getAttribute("stop-opacity")||""),1);let n=new ft(e);return n.setAlpha(n.getAlpha()*i*t),{offset:wl(r.getAttribute("offset"),0),color:n.toRgba()}}function xu(r,t){let e=[],i=r.getElementsByTagName("stop"),s=wl(t,1);for(let n=i.length;n--;)e.push(bu(i[n],s));return e}function Sl(r){return r.nodeName==="linearGradient"||r.nodeName==="LINEARGRADIENT"?"linear":"radial"}function _l(r){return r.getAttribute("gradientUnits")==="userSpaceOnUse"?"pixels":"percentage"}function bt(r,t){return r.getAttribute(t)}function Cu(r,t){return(function(e,{width:i,height:s,gradientUnits:n}){let a;return Object.entries(e).reduce((o,[l,h])=>{if(h==="Infinity")a=1;else if(h==="-Infinity")a=0;else{let c=typeof h=="string";a=c?parseFloat(h):h,c&&Cl(h)&&(a*=.01,n==="pixels"&&(l!=="x1"&&l!=="x2"&&l!=="r2"||(a*=i),l!=="y1"&&l!=="y2"||(a*=s)))}return o[l]=a,o},{})})(Sl(r)==="linear"?(function(e){return{x1:bt(e,"x1")||0,y1:bt(e,"y1")||0,x2:bt(e,"x2")||"100%",y2:bt(e,"y2")||0}})(r):(function(e){return{x1:bt(e,"fx")||bt(e,"cx")||"50%",y1:bt(e,"fy")||bt(e,"cy")||"50%",r1:0,x2:bt(e,"cx")||"50%",y2:bt(e,"cy")||"50%",r2:bt(e,"r")||"50%"}})(r),{...t,gradientUnits:_l(r)})}var vr=class{constructor(r){let{type:t="linear",gradientUnits:e="pixels",coords:i={},colorStops:s=[],offsetX:n=0,offsetY:a=0,gradientTransform:o,id:l}=r||{};Object.assign(this,{type:t,gradientUnits:e,coords:{...t==="radial"?mu:xl,...i},colorStops:s,offsetX:n,offsetY:a,gradientTransform:o,id:l?`${l}_${qt()}`:qt()})}addColorStop(r){for(let t in r)this.colorStops.push({offset:parseFloat(t),color:r[t]});return this}toObject(r){return{...ye(this,r),type:this.type,coords:{...this.coords},colorStops:this.colorStops.map(t=>({...t})),offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?[...this.gradientTransform]:void 0}}toSVG(r,{additionalTransform:t}={}){let e=[],i=this.gradientTransform?this.gradientTransform.concat():nt.concat(),s=this.gradientUnits==="pixels"?"userSpaceOnUse":"objectBoundingBox",n=this.colorStops.map(u=>({...u})).sort((u,d)=>u.offset-d.offset),a=-this.offsetX,o=-this.offsetY;var l;s==="objectBoundingBox"?(a/=r.width,o/=r.height):(a+=r.width/2,o+=r.height/2),(l=r)&&typeof l._renderPathCommands=="function"&&this.gradientUnits!=="percentage"&&(a-=r.pathOffset.x,o-=r.pathOffset.y),i[4]-=a,i[5]-=o;let h=[`id="SVGID_${P(String(this.id))}"`,`gradientUnits="${s}"`,`gradientTransform="${t?t+" ":""}${Re(i)}"`,""].join(" "),c=u=>parseFloat(String(u));if(this.type==="linear"){let{x1:u,y1:d,x2:g,y2:f}=this.coords,p=c(u),y=c(d),b=c(g),x=c(f);e.push("<linearGradient ",h,' x1="',p,'" y1="',y,'" x2="',b,'" y2="',x,`">
|
|
41
|
+
`),e}getSvgStyles(){let t=this.opacity!==void 0&&this.opacity!==1?`opacity: ${P(this.opacity)};`:"",e=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),e].join("")}toClipPathSVG(t){let e=[],i=this._createSVGBgRect(t);i&&e.push(" ",i);for(let s=0;s<this._objects.length;s++)e.push(" ",this._objects[s].toClipPathSVG(t));return this._createBaseClipPathSVGMarkup(e,{reviver:t})}static fromObject({type:t,objects:e=[],layoutManager:i,...s},n){return Promise.all([Re(e,n),Nr(s,n)]).then(([a,o])=>{let l=new this(a,{...s,...o,layoutManager:new zc});return l.layoutManager=i?new(_.getClass(i.type))(new(_.getClass(i.strategy))):new zr,l.layoutManager.subscribeTargets({type:Pa,target:l,targets:l.getObjects()}),l.setCoords(),l})}};m(U,"type","Group"),m(U,"ownDefaults",{strokeWidth:0,subTargetCheck:!1,interactive:!1}),_.setClass(U);var Gc=(r,t)=>r&&r.length===1?r[0]:new U(r,t),el=(r,t)=>Math.min(t.width/r.width,t.height/r.height),rl=(r,t)=>Math.max(t.width/r.width,t.height/r.height),Qs="\\s*,?\\s*",pr=`${Qs}(${Ct})`,Vc=`${pr}${pr}${pr}${Qs}([01])${Qs}([01])${pr}${pr}`,Nc={m:"l",M:"L"},Uc=(r,t,e,i,s,n,a,o,l,h,c)=>{let u=Tt(r),d=kt(r),g=Tt(t),f=kt(t),p=e*s*g-i*n*f+a,y=i*s*g+e*n*f+o;return["C",h+l*(-e*s*d-i*n*u),c+l*(-i*s*d+e*n*u),p+l*(e*s*f+i*n*g),y+l*(i*s*f-e*n*g),p,y]},Ea=(r,t,e,i)=>{let s=Math.atan2(t,r),n=Math.atan2(i,e);return n>=s?n-s:2*Math.PI-(s-n)};function tn(r,t,e,i,s,n,a,o){let l;if(L.cachesBoundsOfCurve&&(l=[...arguments].join(),Rr.boundsOfCurveCache[l]))return Rr.boundsOfCurveCache[l];let h=Math.sqrt,c=Math.abs,u=[],d=[[0,0],[0,0]],g=6*r-12*e+6*s,f=-3*r+9*e-9*s+3*a,p=3*e-3*r;for(let S=0;S<2;++S){if(S>0&&(g=6*t-12*i+6*n,f=-3*t+9*i-9*n+3*o,p=3*i-3*t),c(f)<1e-12){if(c(g)<1e-12)continue;let M=-p/g;0<M&&M<1&&u.push(M);continue}let w=g*g-4*p*f;if(w<0)continue;let k=h(w),T=(-g+k)/(2*f);0<T&&T<1&&u.push(T);let O=(-g-k)/(2*f);0<O&&O<1&&u.push(O)}let y=u.length,b=y,x=sl(r,t,e,i,s,n,a,o);for(;y--;){let{x:S,y:w}=x(u[y]);d[0][y]=S,d[1][y]=w}d[0][b]=r,d[1][b]=t,d[0][b+1]=a,d[1][b+1]=o;let C=[new v(Math.min(...d[0]),Math.min(...d[1])),new v(Math.max(...d[0]),Math.max(...d[1]))];return L.cachesBoundsOfCurve&&(Rr.boundsOfCurveCache[l]=C),C}var qc=(r,t,[e,i,s,n,a,o,l,h])=>{let c=((u,d,g,f,p,y,b)=>{if(g===0||f===0)return[];let x=0,C=0,S=0,w=Math.PI,k=b*fn,T=kt(k),O=Tt(k),M=.5*(-O*u-T*d),D=.5*(-O*d+T*u),E=g**2,A=f**2,j=D**2,B=M**2,q=E*A-E*j-A*B,$=Math.abs(g),tt=Math.abs(f);if(q<0){let Nt=Math.sqrt(1-q/(E*A));$*=Nt,tt*=Nt}else S=(p===y?-1:1)*Math.sqrt(q/(E*j+A*B));let ht=S*$*D/tt,I=-S*tt*M/$,Ot=O*ht-T*I+.5*u,cr=T*ht+O*I+.5*d,ur=Ea(1,0,(M-ht)/$,(D-I)/tt),Vt=Ea((M-ht)/$,(D-I)/tt,(-M-ht)/$,(-D-I)/tt);y===0&&Vt>0?Vt-=2*w:y===1&&Vt<0&&(Vt+=2*w);let dr=Math.ceil(Math.abs(Vt/w*2)),hi=[],gr=Vt/dr,oh=8/3*Math.sin(gr/4)*Math.sin(gr/4)/Math.sin(gr/2),Os=ur+gr;for(let Nt=0;Nt<dr;Nt++)hi[Nt]=Uc(ur,Os,O,T,$,tt,Ot,cr,oh,x,C),x=hi[Nt][5],C=hi[Nt][6],ur=Os,Os+=gr;return hi})(l-r,h-t,i,s,a,o,n);for(let u=0,d=c.length;u<d;u++)c[u][1]+=r,c[u][2]+=t,c[u][3]+=r,c[u][4]+=t,c[u][5]+=r,c[u][6]+=t;return c},il=r=>{let t=0,e=0,i=0,s=0,n=[],a,o=0,l=0;for(let h of r){let c=[...h],u;switch(c[0]){case"l":c[1]+=t,c[2]+=e;case"L":t=c[1],e=c[2],u=["L",t,e];break;case"h":c[1]+=t;case"H":t=c[1],u=["L",t,e];break;case"v":c[1]+=e;case"V":e=c[1],u=["L",t,e];break;case"m":c[1]+=t,c[2]+=e;case"M":t=c[1],e=c[2],i=c[1],s=c[2],u=["M",t,e];break;case"c":c[1]+=t,c[2]+=e,c[3]+=t,c[4]+=e,c[5]+=t,c[6]+=e;case"C":o=c[3],l=c[4],t=c[5],e=c[6],u=["C",c[1],c[2],o,l,t,e];break;case"s":c[1]+=t,c[2]+=e,c[3]+=t,c[4]+=e;case"S":a==="C"?(o=2*t-o,l=2*e-l):(o=t,l=e),t=c[3],e=c[4],u=["C",o,l,c[1],c[2],t,e],o=u[3],l=u[4];break;case"q":c[1]+=t,c[2]+=e,c[3]+=t,c[4]+=e;case"Q":o=c[1],l=c[2],t=c[3],e=c[4],u=["Q",o,l,t,e];break;case"t":c[1]+=t,c[2]+=e;case"T":a==="Q"?(o=2*t-o,l=2*e-l):(o=t,l=e),t=c[1],e=c[2],u=["Q",o,l,t,e];break;case"a":c[6]+=t,c[7]+=e;case"A":qc(t,e,c).forEach(d=>n.push(d)),t=c[6],e=c[7];break;case"z":case"Z":t=i,e=s,u=["Z"]}u?(n.push(u),a=u[0]):a=""}return n},ji=(r,t,e,i)=>Math.sqrt((e-r)**2+(i-t)**2),sl=(r,t,e,i,s,n,a,o)=>l=>{let h=l**3,c=(g=>3*g**2*(1-g))(l),u=(g=>3*g*(1-g)**2)(l),d=(g=>(1-g)**3)(l);return new v(a*h+s*c+e*u+r*d,o*h+n*c+i*u+t*d)},nl=r=>r**2,al=r=>2*r*(1-r),ol=r=>(1-r)**2,Kc=(r,t,e,i,s,n,a,o)=>l=>{let h=nl(l),c=al(l),u=ol(l),d=3*(u*(e-r)+c*(s-e)+h*(a-s)),g=3*(u*(i-t)+c*(n-i)+h*(o-n));return Math.atan2(g,d)},Jc=(r,t,e,i,s,n)=>a=>{let o=nl(a),l=al(a),h=ol(a);return new v(s*o+e*l+r*h,n*o+i*l+t*h)},Zc=(r,t,e,i,s,n)=>a=>{let o=1-a,l=2*(o*(e-r)+a*(s-e)),h=2*(o*(i-t)+a*(n-i));return Math.atan2(h,l)},Aa=(r,t,e)=>{let i=new v(t,e),s=0;for(let n=1;n<=100;n+=1){let a=r(n/100);s+=ji(i.x,i.y,a.x,a.y),i=a}return s},Qc=(r,t)=>{let e,i=0,s=0,n={x:r.x,y:r.y},a={...n},o=.01,l=0,h=r.iterator,c=r.angleFinder;for(;s<t&&o>1e-4;)a=h(i),l=i,e=ji(n.x,n.y,a.x,a.y),e+s>t?(i-=o,o/=2):(n=a,i+=o,s+=e);return{...a,angle:c(l)}},Wn=r=>{let t,e,i=0,s=0,n=0,a=0,o=0,l=[];for(let h of r){let c={x:s,y:n,command:h[0],length:0};switch(h[0]){case"M":e=c,e.x=a=s=h[1],e.y=o=n=h[2];break;case"L":e=c,e.length=ji(s,n,h[1],h[2]),s=h[1],n=h[2];break;case"C":t=sl(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e=c,e.iterator=t,e.angleFinder=Kc(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e.length=Aa(t,s,n),s=h[5],n=h[6];break;case"Q":t=Jc(s,n,h[1],h[2],h[3],h[4]),e=c,e.iterator=t,e.angleFinder=Zc(s,n,h[1],h[2],h[3],h[4]),e.length=Aa(t,s,n),s=h[3],n=h[4];break;case"Z":e=c,e.destX=a,e.destY=o,e.length=ji(s,n,a,o),s=a,n=o}i+=e.length,l.push(e)}return l.push({length:i,x:s,y:n}),l},ll=(r,t,e=Wn(r))=>{let i=0;for(;t-e[i].length>0&&i<e.length-2;)t-=e[i].length,i++;let s=e[i],n=t/s.length,a=r[i];switch(s.command){case"M":return{x:s.x,y:s.y,angle:0};case"Z":return{...new v(s.x,s.y).lerp(new v(s.destX,s.destY),n),angle:Math.atan2(s.destY-s.y,s.destX-s.x)};case"L":return{...new v(s.x,s.y).lerp(new v(a[1],a[2]),n),angle:Math.atan2(a[2]-s.y,a[1]-s.x)};case"C":case"Q":return Qc(s,t)}},tu=RegExp("[mzlhvcsqta][^mzlhvcsqta]*","gi"),Da=new RegExp(Vc,"g"),eu=new RegExp(Ct,"gi"),ru={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},hl=r=>{var t;let e=[],i=(t=r.match(tu))==null?[]:t;for(let s of i){let n=s[0];if(n==="z"||n==="Z"){e.push([n]);continue}let a=ru[n.toLowerCase()],o=[];if(n==="a"||n==="A"){let l;for(Da.lastIndex=0;l=Da.exec(s);)o.push(...l.slice(1))}else o=s.match(eu)||[];for(let l=0;l<o.length;l+=a){let h=Array(a),c=Nc[n];h[0]=l>0&&c?c:n;for(let u=0;u<a;u++)h[u+1]=parseFloat(o[l+u]);e.push(h)}}return e},iu=(r,t=0)=>{let e=new v(r[0]),i=new v(r[1]),s=1,n=0,a=[],o=r.length,l=o>2,h;for(l&&(s=r[2].x<i.x?-1:r[2].x===i.x?0:1,n=r[2].y<i.y?-1:r[2].y===i.y?0:1),a.push(["M",e.x-s*t,e.y-n*t]),h=1;h<o;h++){if(!e.eq(i)){let c=e.midPointFrom(i);a.push(["Q",e.x,e.y,c.x,c.y])}e=r[h],h+1<r.length&&(i=r[h+1])}return l&&(s=e.x>r[h-2].x?1:e.x===r[h-2].x?0:-1,n=e.y>r[h-2].y?1:e.y===r[h-2].y?0:-1),a.push(["L",e.x+s*t,e.y+n*t]),a},su=(r,t,e)=>(e&&(t=Y(t,[1,0,0,1,-e.x,-e.y])),r.map(i=>{let s=[...i];for(let n=1;n<i.length-1;n+=2){let{x:a,y:o}=J({x:i[n],y:i[n+1]},t);s[n]=a,s[n+1]=o}return s})),nu=(r,t)=>{let e=2*Math.PI/r,i=-Jt;r%2==0&&(i+=e/2);let s=Array(r+1);for(let n=0;n<r;n++){let a=n*e+i,{x:o,y:l}=new v(Tt(a),kt(a)).scalarMultiply(t);s[n]=[n===0?"M":"L",o,l]}return s[r]=["Z"],s},cl=(r,t)=>r.map(e=>e.map((i,s)=>s===0||t===void 0?i:R(i,t)).join(" ")).join(" "),au=(r,t)=>{var e;let i=r,s=t;i.inverted&&!s.inverted&&(i=t,s=r),Tn(s,(e=s.group)==null?void 0:e.calcTransformMatrix(),i.calcTransformMatrix());let n=i.inverted&&s.inverted;return n&&(i.inverted=s.inverted=!1),new U([i],{clipPath:s,inverted:n})},ou=(r,t)=>Math.floor(Math.random()*(t-r+1))+r,_i=(r,t)=>{let e=r._findCenterFromElement();r.transformMatrix&&((i=>{if(i.transformMatrix){let{scaleX:s,scaleY:n,angle:a,skewX:o}=fe(i.transformMatrix);i.flipX=!1,i.flipY=!1,i.set(Zt,s),i.set(Qt,n),i.angle=a,i.skewX=o,i.skewY=0}})(r),e=e.transform(r.transformMatrix)),delete r.transformMatrix,t&&(r.scaleX*=t.scaleX,r.scaleY*=t.scaleY,r.cropX=t.cropX,r.cropY=t.cropY,e.x+=t.offsetLeft,e.y+=t.offsetTop,r.width=t.width,r.height=t.height),r.setPositionByOrigin(e,F,F)},Z=Gr({addTransformToObject:()=>co,animate:()=>In,animateColor:()=>ko,applyTransformToObject:()=>Xe,calcAngleBetweenVectors:()=>Ei,calcDimensionsMatrix:()=>Vr,calcPlaneChangeMatrix:()=>Ur,calcVectorRotation:()=>On,cancelAnimFrame:()=>Za,capValue:()=>pe,composeMatrix:()=>io,copyCanvasElement:()=>wh,cos:()=>Tt,createCanvasElement:()=>jt,createImage:()=>Qa,createRotateMatrix:()=>me,createScaleMatrix:()=>Xi,createSkewXMatrix:()=>Cn,createSkewYMatrix:()=>wn,createTranslateMatrix:()=>ze,createVector:()=>Wr,crossProduct:()=>Ie,degreesToRadians:()=>X,dotProduct:()=>po,ease:()=>Wh,enlivenObjectEnlivables:()=>Nr,enlivenObjects:()=>Re,findScaleToCover:()=>rl,findScaleToFit:()=>el,getBoundsOfCurve:()=>tn,getOrthonormalVector:()=>Mn,getPathSegmentsInfo:()=>Wn,getPointOnPath:()=>ll,getPointer:()=>ho,getRandomInt:()=>ou,getRegularPolygonPath:()=>nu,getSmoothPathFromPoints:()=>iu,getSvgAttributes:()=>jh,getUnitVector:()=>Wi,groupSVGElements:()=>Gc,hasStyleChanged:()=>Ui,invertTransform:()=>lt,isBetweenVectors:()=>Ws,isIdentityMatrix:()=>to,isTouchEvent:()=>Mi,isTransparent:()=>Vo,joinPath:()=>cl,loadImage:()=>Xr,magnitude:()=>Pi,makeBoundingBoxFromPoints:()=>Et,makePathSimpler:()=>il,matrixToSVG:()=>Be,mergeClipPaths:()=>au,multiplyTransformMatrices:()=>Y,multiplyTransformMatrixArray:()=>Bi,parsePath:()=>hl,parsePreserveAspectRatioAttribute:()=>An,parseUnit:()=>rt,pick:()=>ye,projectStrokeOnPoints:()=>qo,qrDecompose:()=>fe,radiansToDegrees:()=>Yt,removeFromArray:()=>ae,removeTransformFromObject:()=>Ph,removeTransformMatrixForSvgParsing:()=>_i,requestAnimFrame:()=>Br,resetObjectTransform:()=>uo,rotateVector:()=>kn,saveObjectTransform:()=>_n,sendObjectToPlane:()=>Tn,sendPointToPlane:()=>$t,sendVectorToPlane:()=>go,sin:()=>kt,sizeAfterTransform:()=>$i,string:()=>_h,stylesFromArray:()=>Jo,stylesToArray:()=>Ko,toBlob:()=>vn,toDataURL:()=>yn,toFixed:()=>R,transformPath:()=>su,transformPoint:()=>J});function en(r,t){let e=r.style;e&&Object.entries(t).forEach(([i,s])=>e.setProperty(i,s))}var lu=class extends oo{constructor(r,{allowTouchScrolling:t=!1,containerClass:e=""}={}){super(r),m(this,"upper",void 0),m(this,"container",void 0);let{el:i}=this.lower,s=this.createUpperCanvas();this.upper={el:s,ctx:s.getContext("2d")},this.applyCanvasStyle(i,{allowTouchScrolling:t}),this.applyCanvasStyle(s,{allowTouchScrolling:t,styles:{position:"absolute",left:"0",top:"0"}});let n=this.createContainerElement();n.classList.add(e),i.parentNode&&i.parentNode.replaceChild(n,i),n.append(i,s),this.container=n}createUpperCanvas(){let{el:r}=this.lower,t=jt();return t.className=r.className,t.classList.remove("lower-canvas"),t.classList.add("upper-canvas"),t.setAttribute("data-fabric","top"),t.style.cssText=r.style.cssText,t.setAttribute("draggable","true"),t}createContainerElement(){let r=$e().createElement("div");return r.setAttribute("data-fabric","wrapper"),en(r,{position:"relative"}),fa(r),r}applyCanvasStyle(r,t){let{styles:e,allowTouchScrolling:i}=t;en(r,{...e,"touch-action":i?"manipulation":Ii}),fa(r)}setDimensions(r,t){super.setDimensions(r,t);let{el:e,ctx:i}=this.upper;ao(e,i,r,t)}setCSSDimensions(r){super.setCSSDimensions(r),$s(this.upper.el,r),$s(this.container,r)}cleanupDOM(r){let t=this.container,{el:e}=this.lower,{el:i}=this.upper;super.cleanupDOM(r),t.removeChild(i),t.removeChild(e),t.parentNode&&t.parentNode.replaceChild(e,t)}dispose(){super.dispose(),At().dispose(this.upper.el),delete this.upper,delete this.container}},ul=(r,t,e,i)=>{let{target:s,offsetX:n,offsetY:a}=t,o=e-n,l=i-a,h=!St(s,"lockMovementX")&&s.left!==o,c=!St(s,"lockMovementY")&&s.top!==l;return h&&s.set("left",o),c&&s.set("top",l),(h||c)&&Rn(Ha,En(r,t,e,i)),h||c},dl=Na,gl=r=>function(t,e,i){let{points:s,pathOffset:n}=i;return new v(s[r]).subtract(n).transform(Y(i.getViewportTransform(),i.calcTransformMatrix()))},fl=(r,t,e,i)=>{let{target:s,pointIndex:n}=t,a=s,o=$t(new v(e,i),void 0,a.calcOwnMatrix());return a.points[n]=o.add(a.pathOffset),a.setDimensions(),a.set("dirty",!0),!0},pl=(r,t)=>function(e,i,s,n){let a=i.target,o=new v(a.points[(r>0?r:a.points.length)-1]),l=o.subtract(a.pathOffset).transform(a.calcOwnMatrix()),h=t(e,{...i,pointIndex:r},s,n),c=o.subtract(a.pathOffset).transform(a.calcOwnMatrix()).subtract(l);return a.left-=c.x,a.top-=c.y,h},ml=r=>Ht(dl,pl(r,fl));function hu(r,t={}){let e={};for(let i=0;i<(typeof r=="number"?r:r.points.length);i++)e[`p${i}`]=new ut({actionName:dl,positionHandler:gl(i),actionHandler:ml(i),...t});return e}var rn=(r,t,e)=>{let{path:i,pathOffset:s}=r,n=i[t];return new v(n[e]-s.x,n[e+1]-s.y).transform(Y(r.getViewportTransform(),r.calcTransformMatrix()))};function cu(r,t,e){let{commandIndex:i,pointIndex:s}=this;return rn(e,i,s)}function uu(r,t,e,i){let{target:s}=t,{commandIndex:n,pointIndex:a}=this,o=((l,h,c,u,d)=>{let{path:g,pathOffset:f}=l,p=g[(u>0?u:g.length)-1],y=new v(p[d],p[d+1]),b=y.subtract(f).transform(l.calcOwnMatrix()),x=$t(new v(h,c),void 0,l.calcOwnMatrix());g[u][d]=x.x+f.x,g[u][d+1]=x.y+f.y,l.setDimensions();let C=y.subtract(l.pathOffset).transform(l.calcOwnMatrix()).subtract(b);return l.left-=C.x,l.top-=C.y,l.set("dirty",!0),!0})(s,e,i,n,a);return o&&Rn(this.actionName,{...En(r,t,e,i),commandIndex:n,pointIndex:a}),o}var yl=class extends ut{constructor(r){super(r)}render(r,t,e,i,s){let n={...i,cornerColor:this.controlFill,cornerStrokeColor:this.controlStroke,transparentCorners:!this.controlFill};super.render(r,t,e,n,s)}},du=class extends yl{constructor(r){super(r)}render(r,t,e,i,s){let{path:n}=s,{commandIndex:a,pointIndex:o,connectToCommandIndex:l,connectToPointIndex:h}=this;r.save(),r.strokeStyle=this.controlStroke,this.connectionDashArray&&r.setLineDash(this.connectionDashArray);let[c]=n[a],u=rn(s,l,h);if(c==="Q"){let d=rn(s,a,o+2);r.moveTo(d.x,d.y),r.lineTo(t,e)}else r.moveTo(t,e);r.lineTo(u.x,u.y),r.stroke(),r.restore(),super.render(r,t,e,i,s)}},ui=(r,t,e,i,s,n)=>new(e?du:yl)({commandIndex:r,pointIndex:t,actionName:"modifyPath",positionHandler:cu,actionHandler:uu,connectToCommandIndex:s,connectToPointIndex:n,...i,...e?i.controlPointStyle:i.pointStyle});function gu(r,t={}){let e={},i="M";return r.path.forEach((s,n)=>{let a=s[0];switch(a!=="Z"&&(e[`c_${n}_${a}`]=ui(n,s.length-2,!1,t)),a){case"C":e[`c_${n}_C_CP_1`]=ui(n,1,!0,t,n-1,(o=>o==="C"?5:o==="Q"?3:1)(i)),e[`c_${n}_C_CP_2`]=ui(n,3,!0,t,n,5);break;case"Q":e[`c_${n}_Q_CP_1`]=ui(n,1,!0,t,n,3)}i=a}),e}var cg=Gr({changeHeight:()=>Sc,changeObjectHeight:()=>Po,changeObjectWidth:()=>Mo,changeWidth:()=>zs,createObjectDefaultControls:()=>Xn,createPathControls:()=>gu,createPolyActionHandler:()=>ml,createPolyControls:()=>hu,createPolyPositionHandler:()=>gl,createResizeControls:()=>Wo,createTextboxDefaultControls:()=>Ho,dragHandler:()=>ul,factoryPolyActionHandler:()=>pl,getLocalPoint:()=>Hi,polyActionHandler:()=>fl,renderCircleControl:()=>Eo,renderSquareControl:()=>Ao,rotationStyleHandler:()=>Do,rotationWithSnapping:()=>jo,scaleCursorStyleHandler:()=>De,scaleOrSkewActionName:()=>vr,scaleSkewCursorStyleHandler:()=>ce,scalingEqually:()=>yr,scalingX:()=>Io,scalingXOrSkewingY:()=>Gs,scalingY:()=>Ro,scalingYOrSkewingX:()=>Vs,skewCursorStyleHandler:()=>Bo,skewHandlerX:()=>Yo,skewHandlerY:()=>$o,wrapWithFireEvent:()=>Ht,wrapWithFixedAnchor:()=>te}),vl=class bl extends Ge{constructor(...t){super(...t),m(this,"_hoveredTargets",[]),m(this,"_currentTransform",null),m(this,"_groupSelector",null),m(this,"contextTopDirty",!1)}static getDefaults(){return{...super.getDefaults(),...bl.ownDefaults}}get upperCanvasEl(){var t;return(t=this.elements.upper)==null?void 0:t.el}get contextTop(){var t;return(t=this.elements.upper)==null?void 0:t.ctx}get wrapperEl(){return this.elements.container}initElements(t){this.elements=new lu(t,{allowTouchScrolling:this.allowTouchScrolling,containerClass:this.containerClass}),this._createCacheCanvas()}_onObjectAdded(t){this._objectsToRender=void 0,super._onObjectAdded(t)}_onObjectRemoved(t){this._objectsToRender=void 0,t===this._activeObject&&(this.fire("before:selection:cleared",{deselected:[t]}),this._discardActiveObject(),this.fire("selection:cleared",{deselected:[t]}),t.fire("deselected",{target:t})),t===this._hoveredTarget&&(this._hoveredTarget=void 0,this._hoveredTargets=[]),super._onObjectRemoved(t)}_onStackOrderChanged(){this._objectsToRender=void 0,super._onStackOrderChanged()}_chooseObjectsToRender(){let t=this._activeObject;return!this.preserveObjectStacking&&t?this._objects.filter(e=>!e.group&&e!==t).concat(t):this._objects}renderAll(){this.cancelRequestedRender(),this.destroyed||(!this.contextTopDirty||this._groupSelector||this.isDrawingMode||(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1),!this._objectsToRender&&(this._objectsToRender=this._chooseObjectsToRender()),this.renderCanvas(this.getContext(),this._objectsToRender))}renderTopLayer(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(){let t=this.contextTop;this.clearContext(t),this.renderTopLayer(t),this.fire("after:render",{ctx:t})}setTargetFindTolerance(t){t=Math.round(t),this.targetFindTolerance=t;let e=this.getRetinaScaling(),i=Math.ceil((2*t+1)*e);this.pixelFindCanvasEl.width=this.pixelFindCanvasEl.height=i,this.pixelFindContext.scale(e,e)}isTargetTransparent(t,e,i){let s=this.targetFindTolerance,n=this.pixelFindContext;this.clearContext(n),n.save(),n.translate(-e+s,-i+s),n.transform(...this.viewportTransform);let a=t.selectionBackgroundColor;t.selectionBackgroundColor="",t.render(n),t.selectionBackgroundColor=a,n.restore();let o=Math.round(s*this.getRetinaScaling());return Vo(n,o,o,o)}_isSelectionKeyPressed(t){let e=this.selectionKey;return!!e&&(Array.isArray(e)?!!e.find(i=>!!i&&t[i]===!0):t[e])}_shouldClearSelection(t,e){let i=this.getActiveObjects(),s=this._activeObject;return!!(!e||e&&s&&i.length>1&&i.indexOf(e)===-1&&s!==e&&!this._isSelectionKeyPressed(t)||e&&!e.evented||e&&!e.selectable&&s&&s!==e)}_shouldCenterTransform(t,e,i){if(!t)return;let s;return e==="scale"||e==="scaleX"||e==="scaleY"||e==="resizing"?s=this.centeredScaling||t.centeredScaling:e==="rotate"&&(s=this.centeredRotation||t.centeredRotation),s?!i:i}_getOriginFromCorner(t,e){let i=e?t.controls[e].getTransformAnchorPoint():{x:t.originX,y:t.originY};return e&&(["ml","tl","bl"].includes(e)?i.x=wt:["mr","tr","br"].includes(e)&&(i.x=z),["tl","mt","tr"].includes(e)?i.y=Wa:["bl","mb","br"].includes(e)&&(i.y="top")),i}_setupCurrentTransform(t,e,i){var s;let n=e.group?$t(this.getScenePoint(t),void 0,e.group.calcTransformMatrix()):this.getScenePoint(t),{key:a="",control:o}=e.getActiveControl()||{},l=i&&o?(s=o.getActionHandler(t,e,o))==null?void 0:s.bind(o):ul,h=((O,M,D,E)=>{if(!M||!O)return"drag";let A=E.controls[M];return A.getActionName(D,A,E)})(i,a,t,e),c=t[this.centeredKey],u=this._shouldCenterTransform(e,h,c)?{x:F,y:F}:this._getOriginFromCorner(e,a),{scaleX:d,scaleY:g,skewX:f,skewY:p,left:y,top:b,angle:x,width:C,height:S,cropX:w,cropY:k}=e,T={target:e,action:h,actionHandler:l,actionPerformed:!1,corner:a,scaleX:d,scaleY:g,skewX:f,skewY:p,offsetX:n.x-y,offsetY:n.y-b,originX:u.x,originY:u.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:X(x),width:C,height:S,shiftKey:t.shiftKey,altKey:c,original:{..._n(e),originX:u.x,originY:u.y,cropX:w,cropY:k}};this._currentTransform=T,this.fire("before:transform",{e:t,transform:T})}setCursor(t){this.upperCanvasEl.style.cursor=t}_drawSelection(t){let{x:e,y:i,deltaX:s,deltaY:n}=this._groupSelector,a=new v(e,i).transform(this.viewportTransform),o=new v(e+s,i+n).transform(this.viewportTransform),l=this.selectionLineWidth/2,h=Math.min(a.x,o.x),c=Math.min(a.y,o.y),u=Math.max(a.x,o.x),d=Math.max(a.y,o.y);this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(h,c,u-h,d-c)),this.selectionLineWidth&&this.selectionBorderColor&&(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,h+=l,c+=l,u-=l,d-=l,G.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(h,c,u-h,d-c))}findTarget(t){if(this._targetInfo)return this._targetInfo;if(this.skipTargetFind)return{subTargets:[],currentSubTargets:[]};let e=this.getScenePoint(t),i=this._activeObject,s=this.getActiveObjects(),n=this.searchPossibleTargets(this._objects,e),{subTargets:a,container:o,target:l}=n,h={...n,currentSubTargets:a,currentContainer:o,currentTarget:l};if(!i)return h;let c={...this.searchPossibleTargets([i],e),currentSubTargets:a,currentContainer:o,currentTarget:l};return i.findControl(this.getViewportPoint(t),Mi(t))?{...c,target:i}:c.target&&(s.length>1||!this.preserveObjectStacking||this.preserveObjectStacking&&t[this.altSelectionKey])?c:h}_pointIsInObjectSelectionArea(t,e){let i=t.getCoords(),s=this.getZoom(),n=t.padding/s;if(n){let[a,o,l,h]=i,c=Math.atan2(o.y-a.y,o.x-a.x),u=Tt(c)*n,d=kt(c)*n,g=u+d,f=u-d;i=[new v(a.x-f,a.y-g),new v(o.x+g,o.y-f),new v(l.x+f,l.y+g),new v(h.x-g,h.y+f)]}return Yr.isPointInPolygon(e,i)}_checkTarget(t,e){if(t&&t.visible&&t.evented&&this._pointIsInObjectSelectionArea(t,e)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||t.isEditing)return!0;{let i=e.transform(this.viewportTransform);if(!this.isTargetTransparent(t,i.x,i.y))return!0}}return!1}_searchPossibleTargets(t,e,i){let s=t.length;for(;s--;){let n=t[s];if(this._checkTarget(n,e)){if(xi(n)&&n.subTargetCheck){let{target:a}=this._searchPossibleTargets(n._objects,e,i);a&&i.push(a)}return{target:n,subTargets:i}}}return{subTargets:[]}}searchPossibleTargets(t,e){let i=this._searchPossibleTargets(t,e,[]);i.container=i.target;let{container:s,subTargets:n}=i;if(s&&xi(s)&&s.interactive&&n[0]){for(let a=n.length-1;a>0;a--){let o=n[a];if(!xi(o)||!o.interactive)return i.target=o,i}return i.target=n[0],i}return i}getViewportPoint(t){return this._viewportPoint?this._viewportPoint:this._getPointerImpl(t,!0)}getScenePoint(t){return this._scenePoint?this._scenePoint:this._getPointerImpl(t)}_getPointerImpl(t,e=!1){let i=this.upperCanvasEl,s=i.getBoundingClientRect(),n=ho(t),a=s.width||0,o=s.height||0;a&&o||("top"in s&&"bottom"in s&&(o=Math.abs(s.top-s.bottom)),"right"in s&&"left"in s&&(a=Math.abs(s.right-s.left))),this.calcOffset(),n.x-=this._offset.left,n.y-=this._offset.top,e||(n=$t(n,void 0,this.viewportTransform));let l=this.getRetinaScaling();l!==1&&(n.x/=l,n.y/=l);let h=a===0||o===0?new v(1,1):new v(i.width/a,i.height/o);return n.multiply(h)}_setDimensionsImpl(t,e){this._resetTransformEventData(),super._setDimensionsImpl(t,e),this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop)}_createCacheCanvas(){this.pixelFindCanvasEl=jt(),this.pixelFindContext=this.pixelFindCanvasEl.getContext("2d",{willReadFrequently:!0}),this.setTargetFindTolerance(this.targetFindTolerance)}getTopContext(){return this.elements.upper.ctx}getSelectionContext(){return this.elements.upper.ctx}getSelectionElement(){return this.elements.upper.el}getActiveObject(){return this._activeObject}getActiveObjects(){let t=this._activeObject;return oe(t)?t.getObjects():t?[t]:[]}_fireSelectionEvents(t,e){let i=!1,s=!1,n=this.getActiveObjects(),a=[],o=[];t.forEach(l=>{n.includes(l)||(i=!0,l.fire("deselected",{e,target:l}),o.push(l))}),n.forEach(l=>{t.includes(l)||(i=!0,l.fire("selected",{e,target:l}),a.push(l))}),t.length>0&&n.length>0?(s=!0,i&&this.fire("selection:updated",{e,selected:a,deselected:o})):n.length>0?(s=!0,this.fire("selection:created",{e,selected:a})):t.length>0&&(s=!0,this.fire("selection:cleared",{e,deselected:o})),s&&(this._objectsToRender=void 0)}setActiveObject(t,e){let i=this.getActiveObjects(),s=this._setActiveObject(t,e);return this._fireSelectionEvents(i,e),s}_setActiveObject(t,e){let i=this._activeObject;return i!==t&&!(!this._discardActiveObject(e,t)&&this._activeObject)&&!t.onSelect({e})&&(this._activeObject=t,oe(t)&&i!==t&&t.set("canvas",this),t.setCoords(),!0)}_discardActiveObject(t,e){let i=this._activeObject;return!!i&&!i.onDeselect({e:t,object:e})&&(this._currentTransform&&this._currentTransform.target===i&&this.endCurrentTransform(t),oe(i)&&i===this._hoveredTarget&&(this._hoveredTarget=void 0),this._activeObject=void 0,!0)}discardActiveObject(t){let e=this.getActiveObjects(),i=this.getActiveObject();e.length&&this.fire("before:selection:cleared",{e:t,deselected:[i]});let s=this._discardActiveObject(t);return this._fireSelectionEvents(e,t),s}endCurrentTransform(t){let e=this._currentTransform;this._finalizeCurrentTransform(t),e&&e.target&&(e.target.isMoving=!1),this._currentTransform=null}_finalizeCurrentTransform(t){let e=this._currentTransform,i=e.target,s={e:t,target:i,transform:e,action:e.action};i._scaling&&(i._scaling=!1),i.setCoords(),e.actionPerformed&&(this.fire("object:modified",s),i.fire(qa,s))}setViewportTransform(t){super.setViewportTransform(t);let e=this._activeObject;e&&e.setCoords()}destroy(){let t=this._activeObject;oe(t)&&(t.removeAll(),t.dispose()),delete this._activeObject,super.destroy(),this.pixelFindContext=null,this.pixelFindCanvasEl=void 0}clear(){this.discardActiveObject(),this._activeObject=void 0,this.clearContext(this.contextTop),super.clear()}drawControls(t){let e=this._activeObject;e&&e._renderControls(t)}_toObject(t,e,i){let s=this._realizeGroupTransformOnObject(t),n=super._toObject(t,e,i);return t.set(s),n}_realizeGroupTransformOnObject(t){let{group:e}=t;if(e&&oe(e)&&this._activeObject===e){let i=ye(t,["angle","flipX","flipY",z,Zt,Qt,We,He,"top"]);return co(t,e.calcOwnMatrix()),i}return{}}_setSVGObject(t,e,i){let s=this._realizeGroupTransformOnObject(e);super._setSVGObject(t,e,i),e.set(s)}};m(vl,"ownDefaults",{uniformScaling:!0,uniScaleKey:"shiftKey",centeredScaling:!1,centeredRotation:!1,centeredKey:"altKey",altActionKey:"shiftKey",selection:!0,selectionKey:"shiftKey",selectionColor:"rgba(100, 100, 255, 0.3)",selectionDashArray:[],selectionBorderColor:"rgba(255, 255, 255, 0.3)",selectionLineWidth:1,selectionFullyContained:!1,hoverCursor:"move",moveCursor:"move",defaultCursor:"default",freeDrawingCursor:"crosshair",notAllowedCursor:"not-allowed",perPixelTargetFind:!1,targetFindTolerance:0,skipTargetFind:!1,stopContextMenu:!0,fireRightClick:!0,fireMiddleClick:!0,enablePointerEvents:!1,containerClass:"canvas-container",preserveObjectStacking:!0});var fu=class{constructor(r){m(this,"targets",[]),m(this,"__disposer",void 0);let t=()=>{let{hiddenTextarea:i}=r.getActiveObject()||{};i&&i.focus()},e=r.upperCanvasEl;e.addEventListener("click",t),this.__disposer=()=>e.removeEventListener("click",t)}exitTextEditing(){this.target=void 0,this.targets.forEach(r=>{r.isEditing&&r.exitEditing()})}add(r){this.targets.push(r)}remove(r){this.unregister(r),ae(this.targets,r)}register(r){this.target=r}unregister(r){r===this.target&&(this.target=void 0)}onMouseMove(r){var t;(t=this.target)!=null&&t.isEditing&&this.target.updateSelectionOnMouseMove(r)}clear(){this.targets=[],this.target=void 0}dispose(){this.clear(),this.__disposer(),delete this.__disposer}},ct={passive:!1},Pe=(r,t)=>({viewportPoint:r.getViewportPoint(t),scenePoint:r.getScenePoint(t)}),Ut=(r,...t)=>r.addEventListener(...t),mt=(r,...t)=>r.removeEventListener(...t),pu={mouse:{in:"over",out:"out",targetIn:"mouseover",targetOut:"mouseout",canvasIn:"mouse:over",canvasOut:"mouse:out"},drag:{in:"enter",out:"leave",targetIn:"dragenter",targetOut:"dragleave",canvasIn:"drag:enter",canvasOut:"drag:leave"}},Li=class extends vl{constructor(r,t={}){super(r,t),m(this,"_isClick",void 0),m(this,"textEditingManager",new fu(this)),["_onMouseDown","_onTouchStart","_onMouseMove","_onMouseUp","_onTouchEnd","_onResize","_onMouseWheel","_onMouseOut","_onMouseEnter","_onContextMenu","_onClick","_onDragStart","_onDragEnd","_onDragProgress","_onDragOver","_onDragEnter","_onDragLeave","_onDrop"].forEach(e=>{this[e]=this[e].bind(this)}),this.addOrRemove(Ut)}_getEventPrefix(){return this.enablePointerEvents?"pointer":"mouse"}addOrRemove(r,t=!1){let e=this.upperCanvasEl,i=this._getEventPrefix();r(no(e),"resize",this._onResize),r(e,i+"down",this._onMouseDown),r(e,`${i}move`,this._onMouseMove,ct),r(e,`${i}out`,this._onMouseOut),r(e,`${i}enter`,this._onMouseEnter),r(e,"wheel",this._onMouseWheel,{passive:!1}),r(e,"contextmenu",this._onContextMenu),t||(r(e,"click",this._onClick),r(e,"dblclick",this._onClick)),r(e,"dragstart",this._onDragStart),r(e,"dragend",this._onDragEnd),r(e,"dragover",this._onDragOver),r(e,"dragenter",this._onDragEnter),r(e,"dragleave",this._onDragLeave),r(e,"drop",this._onDrop),this.enablePointerEvents||r(e,"touchstart",this._onTouchStart,ct)}removeListeners(){this.addOrRemove(mt);let r=this._getEventPrefix(),t=xt(this.upperCanvasEl);mt(t,`${r}up`,this._onMouseUp),mt(t,"touchend",this._onTouchEnd,ct),mt(t,`${r}move`,this._onMouseMove,ct),mt(t,"touchmove",this._onMouseMove,ct),clearTimeout(this._willAddMouseDown)}_onMouseWheel(r){this._cacheTransformEventData(r),this._handleEvent(r,"wheel"),this._resetTransformEventData()}_onMouseOut(r){let t=this._hoveredTarget,e={e:r,...Pe(this,r)};this.fire("mouse:out",{...e,target:t}),this._hoveredTarget=void 0,t&&t.fire("mouseout",{...e}),this._hoveredTargets.forEach(i=>{this.fire("mouse:out",{...e,target:i}),i&&i.fire("mouseout",{...e})}),this._hoveredTargets=[]}_onMouseEnter(r){let{target:t}=this.findTarget(r);this._currentTransform||t||(this.fire("mouse:over",{e:r,...Pe(this,r)}),this._hoveredTarget=void 0,this._hoveredTargets=[])}_onDragStart(r){this._isClick=!1;let t=this.getActiveObject();if(t&&t.onDragStart(r)){this._dragSource=t;let e={e:r,target:t};this.fire("dragstart",e),t.fire("dragstart",e),Ut(this.upperCanvasEl,"drag",this._onDragProgress);return}pa(r)}_renderDragEffects(r,t,e){let i=!1,s=this._dropTarget;s&&s!==t&&s!==e&&(s.clearContextTop(),i=!0),t?.clearContextTop(),e!==t&&e?.clearContextTop();let n=this.contextTop;n.save(),n.transform(...this.viewportTransform),t&&(n.save(),t.transform(n),t.renderDragSourceEffect(r),n.restore(),i=!0),e&&(n.save(),e.transform(n),e.renderDropTargetEffect(r),n.restore(),i=!0),n.restore(),i&&(this.contextTopDirty=!0)}_onDragEnd(r){let{currentSubTargets:t}=this.findTarget(r),e=!!r.dataTransfer&&r.dataTransfer.dropEffect!=="none",i=e?this._activeObject:void 0,s={e:r,target:this._dragSource,subTargets:t,dragSource:this._dragSource,didDrop:e,dropTarget:i};mt(this.upperCanvasEl,"drag",this._onDragProgress),this.fire("dragend",s),this._dragSource&&this._dragSource.fire("dragend",s),delete this._dragSource,this._onMouseUp(r)}_onDragProgress(r){let t={e:r,target:this._dragSource,dragSource:this._dragSource,dropTarget:this._draggedoverTarget};this.fire("drag",t),this._dragSource&&this._dragSource.fire("drag",t)}_onDragOver(r){let t="dragover",{currentContainer:e,currentSubTargets:i}=this.findTarget(r),s=this._dragSource,n={e:r,target:e,subTargets:i,dragSource:s,canDrop:!1,dropTarget:void 0},a;this.fire(t,n),this._fireEnterLeaveEvents(r,e,n),e&&(e.canDrop(r)&&(a=e),e.fire(t,n));for(let o=0;o<i.length;o++){let l=i[o];l.canDrop(r)&&(a=l),l.fire(t,n)}this._renderDragEffects(r,s,a),this._dropTarget=a}_onDragEnter(r){let{currentContainer:t,currentSubTargets:e}=this.findTarget(r),i={e:r,target:t,subTargets:e,dragSource:this._dragSource};this.fire("dragenter",i),this._fireEnterLeaveEvents(r,t,i)}_onDragLeave(r){let{currentSubTargets:t}=this.findTarget(r),e={e:r,target:this._draggedoverTarget,subTargets:t,dragSource:this._dragSource};this.fire("dragleave",e),this._fireEnterLeaveEvents(r,void 0,e),this._renderDragEffects(r,this._dragSource),this._dropTarget=void 0,this._hoveredTargets=[]}_onDrop(r){let{currentContainer:t,currentSubTargets:e}=this.findTarget(r),i=this._basicEventHandler("drop:before",{e:r,target:t,subTargets:e,dragSource:this._dragSource,...Pe(this,r)});i.didDrop=!1,i.dropTarget=void 0,this._basicEventHandler("drop",i),this.fire("drop:after",i)}_onContextMenu(r){let{target:t,subTargets:e}=this.findTarget(r),i=this._basicEventHandler("contextmenu:before",{e:r,target:t,subTargets:e});return this.stopContextMenu&&pa(r),this._basicEventHandler("contextmenu",i),!1}_onClick(r){let t=r.detail;t>3||t<2||(this._cacheTransformEventData(r),t==2&&r.type==="dblclick"&&this._handleEvent(r,"dblclick"),t==3&&this._handleEvent(r,"tripleclick"),this._resetTransformEventData())}fireEventFromPointerEvent(r,t,e,i={}){this._cacheTransformEventData(r);let{target:s,subTargets:n}=this.findTarget(r),a={e:r,target:s,subTargets:n,...Pe(this,r),transform:this._currentTransform,...i};this.fire(t,a),s&&s.fire(e,a);for(let o=0;o<n.length;o++)n[o]!==s&&n[o].fire(e,a);this._resetTransformEventData()}getPointerId(r){let t=r.changedTouches;return t?t[0]&&t[0].identifier:this.enablePointerEvents?r.pointerId:-1}_isMainEvent(r){return r.isPrimary===!0||r.isPrimary!==!1&&(r.type==="touchend"&&r.touches.length===0||!r.changedTouches||r.changedTouches[0].identifier===this.mainTouchId)}_onTouchStart(r){this._cacheTransformEventData(r);let t=!this.allowTouchScrolling,e=this._activeObject;this.mainTouchId===void 0&&(this.mainTouchId=this.getPointerId(r)),this.__onMouseDown(r);let{target:i}=this.findTarget(r);(this.isDrawingMode||e&&i===e)&&(t=!0),t&&r.preventDefault();let s=this.upperCanvasEl,n=this._getEventPrefix(),a=xt(s);Ut(a,"touchend",this._onTouchEnd,ct),t&&Ut(a,"touchmove",this._onMouseMove,ct),mt(s,`${n}down`,this._onMouseDown),this._resetTransformEventData()}_onMouseDown(r){this._cacheTransformEventData(r),this.__onMouseDown(r);let t=this.upperCanvasEl,e=this._getEventPrefix();mt(t,`${e}move`,this._onMouseMove,ct);let i=xt(t);Ut(i,`${e}up`,this._onMouseUp),Ut(i,`${e}move`,this._onMouseMove,ct),this._resetTransformEventData()}_onTouchEnd(r){if(r.touches.length>0)return;this._cacheTransformEventData(r),this.__onMouseUp(r),this._resetTransformEventData(),delete this.mainTouchId;let t=this._getEventPrefix(),e=xt(this.upperCanvasEl);mt(e,"touchend",this._onTouchEnd,ct),mt(e,"touchmove",this._onMouseMove,ct),this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(()=>{Ut(this.upperCanvasEl,`${t}down`,this._onMouseDown),this._willAddMouseDown=0},400)}_onMouseUp(r){this._cacheTransformEventData(r),this.__onMouseUp(r);let t=this.upperCanvasEl,e=this._getEventPrefix();if(this._isMainEvent(r)){let i=xt(this.upperCanvasEl);mt(i,`${e}up`,this._onMouseUp),mt(i,`${e}move`,this._onMouseMove,ct),Ut(t,`${e}move`,this._onMouseMove,ct)}this._resetTransformEventData()}_onMouseMove(r){this._cacheTransformEventData(r);let t=this.getActiveObject();!this.allowTouchScrolling&&(!t||!t.shouldStartDragging(r))&&r.preventDefault&&r.preventDefault(),this.__onMouseMove(r),this._resetTransformEventData()}_onResize(){this.calcOffset(),this._resetTransformEventData()}_shouldRender(r){let t=this.getActiveObject();return!!t!=!!r||t&&r&&t!==r}__onMouseUp(r){var t;this._handleEvent(r,"up:before");let e=this._currentTransform,i=this._isClick,{target:s}=this.findTarget(r),{button:n}=r;if(n)return void((this.fireMiddleClick&&n===1||this.fireRightClick&&n===2)&&this._handleEvent(r,"up"));if(this.isDrawingMode&&this._isCurrentlyDrawing)return void this._onMouseUpInDrawingMode(r);if(!this._isMainEvent(r))return;let a,o,l=!1;if(e&&(this._finalizeCurrentTransform(r),l=e.actionPerformed),!i){let h=s===this._activeObject;this.handleSelection(r),l||(l=this._shouldRender(s)||!h&&s===this._activeObject)}if(s){let{key:h,control:c}=s.findControl(this.getViewportPoint(r),Mi(r))||{};if(o=h,s.selectable&&s!==this._activeObject&&s.activeOn==="up")this.setActiveObject(s,r),l=!0;else if(c){let u=c.getMouseUpHandler(r,s,c);u&&(a=this.getScenePoint(r),u.call(c,r,e,a.x,a.y))}s.isMoving=!1}if(e&&(e.target!==s||e.corner!==o)){let h=e.target&&e.target.controls[e.corner],c=h&&h.getMouseUpHandler(r,e.target,h);a=a||this.getScenePoint(r),c&&c.call(h,r,e,a.x,a.y)}this._setCursorFromEvent(r,s),this._handleEvent(r,"up"),this._groupSelector=null,this._currentTransform=null,s&&(s.__corner=void 0),l?this.requestRenderAll():i||(t=this._activeObject)!=null&&t.isEditing||this.renderTop()}_basicEventHandler(r,t){let{target:e,subTargets:i=[]}=t;this.fire(r,t),e&&e.fire(r,t);for(let s=0;s<i.length;s++)i[s]!==e&&i[s].fire(r,t);return t}_handleEvent(r,t,e){let{target:i,subTargets:s}=this.findTarget(r),n={e:r,target:i,subTargets:s,...Pe(this,r),transform:this._currentTransform,...t==="down:before"||t==="down"?e:{}};t!=="up:before"&&t!=="up"||(n.isClick=this._isClick),this.fire(`mouse:${t}`,n),i&&i.fire(`mouse${t}`,n);for(let a=0;a<s.length;a++)s[a]!==i&&s[a].fire(`mouse${t}`,n)}_onMouseDownInDrawingMode(r){this._isCurrentlyDrawing=!0,this.getActiveObject()&&(this.discardActiveObject(r),this.requestRenderAll());let t=this.getScenePoint(r);this.freeDrawingBrush&&this.freeDrawingBrush.onMouseDown(t,{e:r,pointer:t}),this._handleEvent(r,"down",{alreadySelected:!1})}_onMouseMoveInDrawingMode(r){if(this._isCurrentlyDrawing){let t=this.getScenePoint(r);this.freeDrawingBrush&&this.freeDrawingBrush.onMouseMove(t,{e:r,pointer:t})}this.setCursor(this.freeDrawingCursor),this._handleEvent(r,"move")}_onMouseUpInDrawingMode(r){let t=this.getScenePoint(r);this.freeDrawingBrush?this._isCurrentlyDrawing=!!this.freeDrawingBrush.onMouseUp({e:r,pointer:t}):this._isCurrentlyDrawing=!1,this._handleEvent(r,"up")}__onMouseDown(r){this._isClick=!0,this._handleEvent(r,"down:before");let{target:t}=this.findTarget(r),e=!!t&&t===this._activeObject,{button:i}=r;if(i)return void((this.fireMiddleClick&&i===1||this.fireRightClick&&i===2)&&this._handleEvent(r,"down",{alreadySelected:e}));if(this.isDrawingMode)return void this._onMouseDownInDrawingMode(r);if(!this._isMainEvent(r)||this._currentTransform)return;let s=this._shouldRender(t),n=!1;if(this.handleMultiSelection(r,t)?(t=this._activeObject,n=!0,s=!0):this._shouldClearSelection(r,t)&&this.discardActiveObject(r),this.selection&&(!t||!t.selectable&&!t.isEditing&&t!==this._activeObject)){let a=this.getScenePoint(r);this._groupSelector={x:a.x,y:a.y,deltaY:0,deltaX:0}}if(e=!!t&&t===this._activeObject,t){t.selectable&&t.activeOn==="down"&&this.setActiveObject(t,r);let a=t.findControl(this.getViewportPoint(r),Mi(r));if(t===this._activeObject&&(a||!n)){this._setupCurrentTransform(r,t,e);let o=a?a.control:void 0,l=this.getScenePoint(r),h=o&&o.getMouseDownHandler(r,t,o);h&&h.call(o,r,this._currentTransform,l.x,l.y)}}s&&(this._objectsToRender=void 0),this._handleEvent(r,"down",{alreadySelected:e}),s&&this.requestRenderAll()}_resetTransformEventData(){this._targetInfo=this._viewportPoint=this._scenePoint=void 0}_cacheTransformEventData(r){this._resetTransformEventData(),this._viewportPoint=this.getViewportPoint(r),this._scenePoint=$t(this._viewportPoint,void 0,this.viewportTransform),this._targetInfo=this.findTarget(r),this._currentTransform&&(this._targetInfo.target=this._currentTransform.target)}__onMouseMove(r){if(this._isClick=!1,this._handleEvent(r,"move:before"),this.isDrawingMode)return void this._onMouseMoveInDrawingMode(r);if(!this._isMainEvent(r))return;let t=this._groupSelector;if(t){let e=this.getScenePoint(r);t.deltaX=e.x-t.x,t.deltaY=e.y-t.y,this.renderTop()}else if(this._currentTransform)this._transformObject(r);else{let{target:e}=this.findTarget(r);this._setCursorFromEvent(r,e),this._fireOverOutEvents(r,e)}this.textEditingManager.onMouseMove(r),this._handleEvent(r,"move")}_fireOverOutEvents(r,t){let{_hoveredTarget:e,_hoveredTargets:i}=this,{subTargets:s,currentTarget:n}=this.findTarget(r),a=Math.max(i.length,s.length);this.fireSyntheticInOutEvents("mouse",{e:r,target:t,oldTarget:e,actualTarget:n,oldActualTarget:this._hoveredActualTarget,fireCanvas:!0});for(let o=0;o<a;o++)s[o]===t||i[o]&&i[o]===e||this.fireSyntheticInOutEvents("mouse",{e:r,target:s[o],oldTarget:i[o]});this._hoveredActualTarget=n,this._hoveredTarget=t,this._hoveredTargets=s}_fireEnterLeaveEvents(r,t,e){let i=this._draggedoverTarget,s=this._hoveredTargets,{subTargets:n}=this.findTarget(r),a=Math.max(s.length,n.length);this.fireSyntheticInOutEvents("drag",{...e,target:t,oldTarget:i,fireCanvas:!0});for(let o=0;o<a;o++)this.fireSyntheticInOutEvents("drag",{...e,target:n[o],oldTarget:s[o]});this._draggedoverTarget=t}fireSyntheticInOutEvents(r,{target:t,oldTarget:e,actualTarget:i,oldActualTarget:s,fireCanvas:n,e:a,...o}){let{targetIn:l,targetOut:h,canvasIn:c,canvasOut:u}=pu[r],d=e!==t,g=s!==i,f=t&&d,p=i&&g,y=e&&d,b=s&&g,x={...o,e:a,...Pe(this,a)},C={...x,target:e,nextTarget:t,actualTarget:s,nextActualTarget:i};(y||b)&&n&&this.fire(u,C),y&&e.fire(h,C),b&&e!==s&&s.fire(h,C);let S={...x,target:t,previousTarget:e,actualTarget:i,previousActualTarget:s};(f||p)&&n&&this.fire(c,S),f&&t.fire(l,S),p&&i!==t&&i.fire(l,S)}_transformObject(r){let t=this.getScenePoint(r),e=this._currentTransform,i=e.target,s=i.group?$t(t,void 0,i.group.calcTransformMatrix()):t;e.shiftKey=r.shiftKey,e.altKey=!!this.centeredKey&&r[this.centeredKey],this._performTransformAction(r,e,s),e.actionPerformed&&this.requestRenderAll()}_performTransformAction(r,t,e){let{action:i,actionHandler:s,target:n}=t,a=!!s&&s(r,t,e.x,e.y);a&&n.setCoords(),i==="drag"&&a&&(t.target.isMoving=!0,this.setCursor(t.target.moveCursor||this.moveCursor)),t.actionPerformed=t.actionPerformed||a}_setCursorFromEvent(r,t){if(!t)return void this.setCursor(this.defaultCursor);let e=t.hoverCursor||this.hoverCursor,i=oe(this._activeObject)?this._activeObject:null,s=(!i||t.group!==i)&&t.findControl(this.getViewportPoint(r));if(s){let{control:n,coord:a}=s;this.setCursor(n.cursorStyleHandler(r,n,t,a))}else{if(t.subTargetCheck){let{subTargets:n}=this.findTarget(r);n.concat().reverse().forEach(a=>{e=a.hoverCursor||e})}this.setCursor(e)}}handleMultiSelection(r,t){let e=this._activeObject,i=oe(e);if(e&&this._isSelectionKeyPressed(r)&&this.selection&&t&&t.selectable&&(e!==t||i)&&(i||!t.isDescendantOf(e)&&!e.isDescendantOf(t))&&!t.onSelect({e:r})&&!e.getActiveControl()){if(i){let s=e.getObjects(),n=[];if(t===e){let a=this.getScenePoint(r),o=this.searchPossibleTargets(s,a);if(o.target?(t=o.target,n=o.subTargets):(o=this.searchPossibleTargets(this._objects,a),t=o.target,n=o.subTargets),!t||!t.selectable)return!1}t.group===e?(e.remove(t),this._hoveredTarget=t,this._hoveredTargets=n,e.size()===1&&this._setActiveObject(e.item(0),r)):(e.multiSelectAdd(t),this._hoveredTarget=e,this._hoveredTargets=n),this._fireSelectionEvents(s,r)}else{e.isEditing&&e.exitEditing();let s=new(_.getClass("ActiveSelection"))([],{canvas:this});s.multiSelectAdd(e,t),this._hoveredTarget=s,this._setActiveObject(s,r),this._fireSelectionEvents([e],r)}return!0}return!1}handleSelection(r){if(!this.selection||!this._groupSelector)return!1;let{x:t,y:e,deltaX:i,deltaY:s}=this._groupSelector,n=new v(t,e),a=n.add(new v(i,s)),o=n.min(a),l=n.max(a).subtract(o),h=this.collectObjects({left:o.x,top:o.y,width:l.x,height:l.y},{includeIntersecting:!this.selectionFullyContained}),c=n.eq(a)?h[0]?[h[0]]:[]:h.length>1?h.filter(u=>!u.onSelect({e:r})).reverse():h;if(c.length===1)this.setActiveObject(c[0],r);else if(c.length>1){let u=_.getClass("ActiveSelection");this.setActiveObject(new u(c,{canvas:this}),r)}return this._groupSelector=null,!0}toCanvasElement(r=1,t){let{upper:e}=this.elements;e.ctx=void 0;let i=super.toCanvasElement(r,t);return e.ctx=e.el.getContext("2d"),i}clear(){this.textEditingManager.clear(),super.clear()}destroy(){this.removeListeners(),this.textEditingManager.dispose(),super.destroy()}},xl={x1:0,y1:0,x2:0,y2:0},mu={...xl,r1:0,r2:0},je=(r,t)=>isNaN(r)&&typeof t=="number"?t:r;function Cl(r){return r&&/%$/.test(r)&&Number.isFinite(parseFloat(r))}function wl(r,t){return pe(0,je(typeof r=="number"?r:typeof r=="string"?parseFloat(r)/(Cl(r)?100:1):NaN,t),1)}var yu=/\s*;\s*/,vu=/\s*:\s*/;function bu(r,t){let e,i,s=r.getAttribute("style");if(s){let a=s.split(yu);a[a.length-1]===""&&a.pop();for(let o=a.length;o--;){let[l,h]=a[o].split(vu).map(c=>c.trim());l==="stop-color"?e=h:l==="stop-opacity"&&(i=h)}}e=e||r.getAttribute("stop-color")||"rgb(0,0,0)",i=je(parseFloat(i||r.getAttribute("stop-opacity")||""),1);let n=new ft(e);return n.setAlpha(n.getAlpha()*i*t),{offset:wl(r.getAttribute("offset"),0),color:n.toRgba()}}function xu(r,t){let e=[],i=r.getElementsByTagName("stop"),s=wl(t,1);for(let n=i.length;n--;)e.push(bu(i[n],s));return e}function Sl(r){return r.nodeName==="linearGradient"||r.nodeName==="LINEARGRADIENT"?"linear":"radial"}function _l(r){return r.getAttribute("gradientUnits")==="userSpaceOnUse"?"pixels":"percentage"}function bt(r,t){return r.getAttribute(t)}function Cu(r,t){return(function(e,{width:i,height:s,gradientUnits:n}){let a;return Object.entries(e).reduce((o,[l,h])=>{if(h==="Infinity")a=1;else if(h==="-Infinity")a=0;else{let c=typeof h=="string";a=c?parseFloat(h):h,c&&Cl(h)&&(a*=.01,n==="pixels"&&(l!=="x1"&&l!=="x2"&&l!=="r2"||(a*=i),l!=="y1"&&l!=="y2"||(a*=s)))}return o[l]=a,o},{})})(Sl(r)==="linear"?(function(e){return{x1:bt(e,"x1")||0,y1:bt(e,"y1")||0,x2:bt(e,"x2")||"100%",y2:bt(e,"y2")||0}})(r):(function(e){return{x1:bt(e,"fx")||bt(e,"cx")||"50%",y1:bt(e,"fy")||bt(e,"cy")||"50%",r1:0,x2:bt(e,"cx")||"50%",y2:bt(e,"cy")||"50%",r2:bt(e,"r")||"50%"}})(r),{...t,gradientUnits:_l(r)})}var br=class{constructor(r){let{type:t="linear",gradientUnits:e="pixels",coords:i={},colorStops:s=[],offsetX:n=0,offsetY:a=0,gradientTransform:o,id:l}=r||{};Object.assign(this,{type:t,gradientUnits:e,coords:{...t==="radial"?mu:xl,...i},colorStops:s,offsetX:n,offsetY:a,gradientTransform:o,id:l?`${l}_${Kt()}`:Kt()})}addColorStop(r){for(let t in r)this.colorStops.push({offset:parseFloat(t),color:r[t]});return this}toObject(r){return{...ye(this,r),type:this.type,coords:{...this.coords},colorStops:this.colorStops.map(t=>({...t})),offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?[...this.gradientTransform]:void 0}}toSVG(r,{additionalTransform:t}={}){let e=[],i=this.gradientTransform?this.gradientTransform.concat():nt.concat(),s=this.gradientUnits==="pixels"?"userSpaceOnUse":"objectBoundingBox",n=this.colorStops.map(u=>({...u})).sort((u,d)=>u.offset-d.offset),a=-this.offsetX,o=-this.offsetY;var l;s==="objectBoundingBox"?(a/=r.width,o/=r.height):(a+=r.width/2,o+=r.height/2),(l=r)&&typeof l._renderPathCommands=="function"&&this.gradientUnits!=="percentage"&&(a-=r.pathOffset.x,o-=r.pathOffset.y),i[4]-=a,i[5]-=o;let h=[`id="SVGID_${P(String(this.id))}"`,`gradientUnits="${s}"`,`gradientTransform="${t?t+" ":""}${Be(i)}"`,""].join(" "),c=u=>parseFloat(String(u));if(this.type==="linear"){let{x1:u,y1:d,x2:g,y2:f}=this.coords,p=c(u),y=c(d),b=c(g),x=c(f);e.push("<linearGradient ",h,' x1="',p,'" y1="',y,'" x2="',b,'" y2="',x,`">
|
|
42
42
|
`)}else if(this.type==="radial"){let{x1:u,y1:d,x2:g,y2:f,r1:p,r2:y}=this.coords,b=c(u),x=c(d),C=c(g),S=c(f),w=c(p),k=c(y),T=w>k;e.push("<radialGradient ",h,' cx="',T?b:C,'" cy="',T?x:S,'" r="',T?w:k,'" fx="',T?C:b,'" fy="',T?S:x,`">
|
|
43
43
|
`),T&&(n.reverse(),n.forEach(M=>{M.offset=1-M.offset}));let O=Math.min(w,k);if(O>0){let M=O/Math.max(w,k);n.forEach(D=>{D.offset+=M*(1-D.offset)})}}return n.forEach(({color:u,offset:d})=>{let g=String(u),f=zi(g)?g:new ft(g).toRgba();e.push(`<stop offset="${100*d}%" style="stop-color:${P(f)};"/>
|
|
44
44
|
`)}),e.push(this.type==="linear"?"</linearGradient>":"</radialGradient>",`
|
|
45
|
-
`),e.join("")}toLive(r){let{x1:t,y1:e,x2:i,y2:s,r1:n,r2:a}=this.coords,o=this.type==="linear"?r.createLinearGradient(t,e,i,s):r.createRadialGradient(t,e,n,i,s,a);return this.colorStops.forEach(({color:l,offset:h})=>{o.addColorStop(h,l)}),o}static async fromObject(r){let{colorStops:t,gradientTransform:e}=r;return new this({...r,colorStops:t?t.map(i=>({...i})):void 0,gradientTransform:e?[...e]:void 0})}static fromElement(r,t,e){let i=_l(r),s=t._findCenterFromElement();return new this({id:r.getAttribute("id")||void 0,type:Sl(r),coords:Cu(r,{width:e.viewBoxWidth||e.width,height:e.viewBoxHeight||e.height}),colorStops:xu(r,e.opacity),gradientUnits:i,gradientTransform:Di(r.getAttribute("gradientTransform")||""),...i==="pixels"?{offsetX:t.width/2-s.x,offsetY:t.height/2-s.y}:{offsetX:0,offsetY:0}})}};m(
|
|
46
|
-
`)}static async fromObject({type:r,source:t,patternTransform:e,...i},s){let n=await
|
|
47
|
-
`]}_getOffsetTransform(){let t=L.NUM_FRACTION_DIGITS;return` translate(${R(-this.pathOffset.x,t)}, ${R(-this.pathOffset.y,t)})`}toClipPathSVG(t){let e=this._getOffsetTransform();return" "+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})}toSVG(t){let e=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})}complexity(){return this.path.length}setDimensions(){this.setBoundingBox()}setBoundingBox(t){let{width:e,height:i,pathOffset:s}=this._calcDimensions();this.set({width:e,height:i,pathOffset:s}),t&&this.setPositionByOrigin(s,"center","center")}_calcBoundsFromPath(){let t=[],e=0,i=0,s=0,n=0;for(let a of this.path)switch(a[0]){case"L":s=a[1],n=a[2],t.push({x:e,y:i},{x:s,y:n});break;case"M":s=a[1],n=a[2],e=s,i=n;break;case"C":t.push(...tn(s,n,a[1],a[2],a[3],a[4],a[5],a[6])),s=a[5],n=a[6];break;case"Q":t.push(...tn(s,n,a[1],a[2],a[1],a[2],a[3],a[4])),s=a[3],n=a[4];break;case"Z":s=e,n=i}return Et(t)}_calcDimensions(){let t=this._calcBoundsFromPath();return{...t,pathOffset:new v(t.left+t.width/2,t.top+t.height/2)}}static fromObject(t){return this._fromObject(t,{extraParam:"path"})}static async fromElement(t,e,i){let{d:s,...n}=zt(t,this.ATTRIBUTE_NAMES,i);return new this(s,{...n,...e,left:void 0,top:void 0})}};m(Rt,"type","Path"),m(Rt,"cacheProperties",[...Wt,"path","fillRule"]),m(Rt,"ATTRIBUTE_NAMES",[...
|
|
45
|
+
`),e.join("")}toLive(r){let{x1:t,y1:e,x2:i,y2:s,r1:n,r2:a}=this.coords,o=this.type==="linear"?r.createLinearGradient(t,e,i,s):r.createRadialGradient(t,e,n,i,s,a);return this.colorStops.forEach(({color:l,offset:h})=>{o.addColorStop(h,l)}),o}static async fromObject(r){let{colorStops:t,gradientTransform:e}=r;return new this({...r,colorStops:t?t.map(i=>({...i})):void 0,gradientTransform:e?[...e]:void 0})}static fromElement(r,t,e){let i=_l(r),s=t._findCenterFromElement();return new this({id:r.getAttribute("id")||void 0,type:Sl(r),coords:Cu(r,{width:e.viewBoxWidth||e.width,height:e.viewBoxHeight||e.height}),colorStops:xu(r,e.opacity),gradientUnits:i,gradientTransform:Di(r.getAttribute("gradientTransform")||""),...i==="pixels"?{offsetX:t.width/2-s.x,offsetY:t.height/2-s.y}:{offsetX:0,offsetY:0}})}};m(br,"type","Gradient"),_.setClass(br,"gradient"),_.setClass(br,"linear"),_.setClass(br,"radial");var js=class{get type(){return"pattern"}set type(r){Xt("warn","Setting type has no effect",r)}constructor(r){m(this,"repeat","repeat"),m(this,"offsetX",0),m(this,"offsetY",0),m(this,"crossOrigin",""),this.id=Kt(),Object.assign(this,r)}isImageSource(){return!!this.source&&typeof this.source.src=="string"}isCanvasSource(){return!!this.source&&!!this.source.toDataURL}sourceToString(){return this.isImageSource()?this.source.src:this.isCanvasSource()?this.source.toDataURL():""}toLive(r){return this.source&&(!this.isImageSource()||this.source.complete&&this.source.naturalWidth!==0&&this.source.naturalHeight!==0)?r.createPattern(this.source,this.repeat):null}toObject(r=[]){let{repeat:t,crossOrigin:e}=this;return{...ye(this,r),type:"pattern",source:this.sourceToString(),repeat:t,crossOrigin:e,offsetX:R(this.offsetX,L.NUM_FRACTION_DIGITS),offsetY:R(this.offsetY,L.NUM_FRACTION_DIGITS),patternTransform:this.patternTransform?[...this.patternTransform]:null}}toSVG({width:r,height:t}){let{source:e,repeat:i,id:s}=this,n=je(this.offsetX/r,0),a=je(this.offsetY/t,0),o=i==="repeat-y"||i==="no-repeat"?1+Math.abs(n||0):je(e.width/r,0),l=i==="repeat-x"||i==="no-repeat"?1+Math.abs(a||0):je(e.height/t,0);return[`<pattern id="SVGID_${P(s)}" x="${n}" y="${a}" width="${o}" height="${l}">`,`<image x="0" y="0" width="${e.width}" height="${e.height}" xlink:href="${P(this.sourceToString())}"></image>`,"</pattern>",""].join(`
|
|
46
|
+
`)}static async fromObject({type:r,source:t,patternTransform:e,...i},s){let n=await Xr(t,{...s,crossOrigin:i.crossOrigin});return new this({...i,patternTransform:e&&e.slice(0),source:n})}};m(js,"type","Pattern"),_.setClass(js),_.setClass(js,"pattern");var Rt=class Tl extends G{constructor(t,{path:e,left:i,top:s,...n}={}){super(),Object.assign(this,Tl.ownDefaults),this.setOptions(n),this._setPath(t||[],!0),typeof i=="number"&&this.set("left",i),typeof s=="number"&&this.set("top",s)}_setPath(t,e){this.path=il(Array.isArray(t)?t:hl(t)),this.setBoundingBox(e)}_findCenterFromElement(){let t=this._calcBoundsFromPath();return new v(t.left+t.width/2,t.top+t.height/2)}_renderPathCommands(t){let e=-this.pathOffset.x,i=-this.pathOffset.y;t.beginPath();for(let s of this.path)switch(s[0]){case"L":t.lineTo(s[1]+e,s[2]+i);break;case"M":t.moveTo(s[1]+e,s[2]+i);break;case"C":t.bezierCurveTo(s[1]+e,s[2]+i,s[3]+e,s[4]+i,s[5]+e,s[6]+i);break;case"Q":t.quadraticCurveTo(s[1]+e,s[2]+i,s[3]+e,s[4]+i);break;case"Z":t.closePath()}}_render(t){this._renderPathCommands(t),this._renderPaintInOrder(t)}toString(){return`#<Path (${this.complexity()}): { "top": ${this.top}, "left": ${this.left} }>`}toObject(t=[]){return{...super.toObject(t),path:this.path.map(e=>e.slice())}}toDatalessObject(t=[]){let e=this.toObject(t);return this.sourcePath&&(delete e.path,e.sourcePath=this.sourcePath),e}_toSVG(){return["<path ","COMMON_PARTS",`d="${cl(this.path,L.NUM_FRACTION_DIGITS)}" stroke-linecap="round" />
|
|
47
|
+
`]}_getOffsetTransform(){let t=L.NUM_FRACTION_DIGITS;return` translate(${R(-this.pathOffset.x,t)}, ${R(-this.pathOffset.y,t)})`}toClipPathSVG(t){let e=this._getOffsetTransform();return" "+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})}toSVG(t){let e=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})}complexity(){return this.path.length}setDimensions(){this.setBoundingBox()}setBoundingBox(t){let{width:e,height:i,pathOffset:s}=this._calcDimensions();this.set({width:e,height:i,pathOffset:s}),t&&this.setPositionByOrigin(s,"center","center")}_calcBoundsFromPath(){let t=[],e=0,i=0,s=0,n=0;for(let a of this.path)switch(a[0]){case"L":s=a[1],n=a[2],t.push({x:e,y:i},{x:s,y:n});break;case"M":s=a[1],n=a[2],e=s,i=n;break;case"C":t.push(...tn(s,n,a[1],a[2],a[3],a[4],a[5],a[6])),s=a[5],n=a[6];break;case"Q":t.push(...tn(s,n,a[1],a[2],a[1],a[2],a[3],a[4])),s=a[3],n=a[4];break;case"Z":s=e,n=i}return Et(t)}_calcDimensions(){let t=this._calcBoundsFromPath();return{...t,pathOffset:new v(t.left+t.width/2,t.top+t.height/2)}}static fromObject(t){return this._fromObject(t,{extraParam:"path"})}static async fromElement(t,e,i){let{d:s,...n}=zt(t,this.ATTRIBUTE_NAMES,i);return new this(s,{...n,...e,left:void 0,top:void 0})}};m(Rt,"type","Path"),m(Rt,"cacheProperties",[...Wt,"path","fillRule"]),m(Rt,"ATTRIBUTE_NAMES",[...ee,"d"]),_.setClass(Rt),_.setSVGClass(Rt);var kl=["radius","startAngle","endAngle","counterClockwise"],Ee=class sn extends G{static getDefaults(){return{...super.getDefaults(),...sn.ownDefaults}}constructor(t){super(),Object.assign(this,sn.ownDefaults),this.setOptions(t)}_set(t,e){return super._set(t,e),t==="radius"&&this.setRadius(e),this}_render(t){t.beginPath(),t.arc(0,0,this.radius,X(this.startAngle),X(this.endAngle),this.counterClockwise),this._renderPaintInOrder(t)}getRadiusX(){return this.get("radius")*this.get(Zt)}getRadiusY(){return this.get("radius")*this.get(Qt)}setRadius(t){this.radius=t,this.set({width:2*t,height:2*t})}toObject(t=[]){return super.toObject([...kl,...t])}_toSVG(){let{radius:t,startAngle:e,endAngle:i}=this,s=(i-e)%360;if(s===0)return["<circle ","COMMON_PARTS",'cx="0" cy="0" ','r="',`${P(t)}`,`" />
|
|
48
48
|
`];{let n=X(e),a=X(i),o=Tt(n)*t,l=kt(n)*t,h=Tt(a)*t,c=kt(a)*t;return[`<path d="M ${o} ${l} A ${t} ${t} 0 ${+(s>180)} ${+!this.counterClockwise} ${h} ${c}" `,"COMMON_PARTS",` />
|
|
49
|
-
`]}}static async fromElement(t,e,i){let{left:s=0,top:n=0,radius:a=0,...o}=zt(t,this.ATTRIBUTE_NAMES,i);return new this({...o,radius:a,left:s-a,top:n-a})}static fromObject(t){return super._fromObject(t)}};m(
|
|
50
|
-
`]}static async fromElement(t,e,i){let{x1:s=0,y1:n=0,x2:a=0,y2:o=0,...l}=zt(t,this.ATTRIBUTE_NAMES,i);return new this([s,n,a,o],l)}static fromObject({x1:t,y1:e,x2:i,y2:s,...n}){return this._fromObject({...n,points:[t,e,i,s]},{extraParam:"points"})}};m(
|
|
51
|
-
`]}_render(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,0,this.rx,0,_t,!1),t.restore(),this._renderPaintInOrder(t)}static async fromElement(t,e,i){let s=zt(t,this.ATTRIBUTE_NAMES,i);return s.left=(s.left||0)-s.rx,s.top=(s.top||0)-s.ry,new this(s)}};m(
|
|
52
|
-
`]}_render(t){let e=this.points.length,i=this.pathOffset.x,s=this.pathOffset.y;if(e&&!isNaN(this.points[e-1].y)){t.beginPath(),t.moveTo(this.points[0].x-i,this.points[0].y-s);for(let n=0;n<e;n++){let a=this.points[n];t.lineTo(a.x-i,a.y-s)}!this.isOpen()&&t.closePath(),this._renderPaintInOrder(t)}}complexity(){return this.points.length}static async fromElement(t,e,i){let s=(function(l){if(!l)return[];let h=l.replace(/,/g," ").trim().split(/\s+/),c=[];for(let u=0;u<h.length;u+=2)c.push({x:parseFloat(h[u]),y:parseFloat(h[u+1])});return c})(t.getAttribute("points")),{left:n,top:a,...o}=zt(t,this.ATTRIBUTE_NAMES,i);return new this(s,{...o,...e})}static fromObject(t){return this._fromObject(t,{extraParam:"points"})}};m(
|
|
53
|
-
`}var Fs,Mt=class br extends El{static getDefaults(){return{...super.getDefaults(),...br.ownDefaults}}constructor(t,e){super(),m(this,"__charBounds",[]),Object.assign(this,br.ownDefaults),this.setOptions(e),this.styles||(this.styles={}),this.text=t,this.initialized=!0,this.path&&this.setPathInfo(),this.initDimensions(),this.setCoords()}setPathInfo(){let t=this.path;t&&(t.segmentsInfo=Wn(t.path))}_splitText(){let t=this._splitTextIntoLines(this.text);return this.textLines=t.lines,this._textLines=t.graphemeLines,this._unwrappedTextLines=t._unwrappedLines,this._text=t.graphemeText,t}initDimensions(){this._splitText(),this._clearCache(),this.dirty=!0,this.path?(this.width=this.path.width,this.height=this.path.height):(this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,this.height=this.calcTextHeight()),this.textAlign.includes("justify")&&this.enlargeSpaces()}enlargeSpaces(){let t,e,i,s,n,a,o;for(let l=0,h=this._textLines.length;l<h;l++)if((this.textAlign==="justify"||l!==h-1&&!this.isEndOfWrapping(l))&&(s=0,n=this._textLines[l],e=this.getLineWidth(l),e<this.width&&(o=this.textLines[l].match(this._reSpacesAndTabs)))){i=o.length,t=(this.width-e)/i;for(let c=0;c<=n.length;c++)a=this.__charBounds[l][c],this._reSpaceAndTab.test(n[c])?(a.width+=t,a.kernedWidth+=t,a.left+=s,s+=t):a.left+=s}}isEndOfWrapping(t){return t===this._textLines.length-1}missingNewlineOffset(t){return 1}get2DCursorLocation(t,e){let i=e?this._unwrappedTextLines:this._textLines,s;for(s=0;s<i.length;s++){if(t<=i[s].length)return{lineIndex:s,charIndex:t};t-=i[s].length+this.missingNewlineOffset(s,e)}return{lineIndex:s-1,charIndex:i[s-1].length<t?i[s-1].length:t}}toString(){return`#<Text (${this.complexity()}): { "text": "${this.text}", "fontFamily": "${this.fontFamily}" }>`}_getCacheCanvasDimensions(){let t=super._getCacheCanvasDimensions(),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t}_render(t){let e=this.path;e&&!e.isNotVisible()&&e._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")}_renderText(t){this.paintFirst==="stroke"?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))}_setTextStyles(t,e,i){if(t.textBaseline="alphabetic",this.path)switch(this.pathAlign){case F:t.textBaseline="middle";break;case"ascender":t.textBaseline="top";break;case"descender":t.textBaseline=Wa}t.font=this._getFontDeclaration(e,i)}calcTextWidth(){let t=this.getLineWidth(0);for(let e=1,i=this._textLines.length;e<i;e++){let s=this.getLineWidth(e);s>t&&(t=s)}return t}_renderTextLine(t,e,i,s,n,a){this._renderChars(t,e,i,s,n,a)}_renderTextLinesBackground(t){if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor"))return;let e=t.fillStyle,i=this._getLeftOffset(),s=this._getTopOffset();for(let n=0,a=this._textLines.length;n<a;n++){let o=this.getHeightOfLine(n);if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor",n)){s+=o;continue}let l=this._textLines[n].length,h=this._getLineLeftOffset(n),c,u,d=0,g=0,f=this.getValueOfPropertyAt(n,0,"textBackgroundColor"),p=this.getHeightOfLineImpl(n);for(let y=0;y<l;y++){let b=this.__charBounds[n][y];u=this.getValueOfPropertyAt(n,y,"textBackgroundColor"),this.path?(t.save(),t.translate(b.renderLeft,b.renderTop),t.rotate(b.angle),t.fillStyle=u,u&&t.fillRect(-b.width/2,-p*(1-this._fontSizeFraction),b.width,p),t.restore()):u===f?d+=b.kernedWidth:(c=i+h+g,this.direction==="rtl"&&(c=this.width-c-d),t.fillStyle=f,f&&t.fillRect(c,s,d,p),g=b.left,d=b.width,f=u)}u&&!this.path&&(c=i+h+g,this.direction==="rtl"&&(c=this.width-c-d),t.fillStyle=u,t.fillRect(c,s,d,p)),s+=o}t.fillStyle=e,this._removeShadow(t)}_measureChar(t,e,i,s){let n=Ir.getFontCache(e),a=this._getFontDeclaration(e),o=i?i+t:t,l=i&&a===this._getFontDeclaration(s),h=e.fontSize/this.CACHE_FONT_SIZE,c,u,d,g;if(i&&n.has(i)&&(d=n.get(i)),n.has(t)&&(g=c=n.get(t)),l&&n.has(o)&&(u=n.get(o),g=u-d),c===void 0||d===void 0||u===void 0){let f=(Fs||(Fs=gt({width:0,height:0}).getContext("2d")),Fs);this._setTextStyles(f,e,!0),c===void 0&&(g=c=f.measureText(t).width,n.set(t,c)),d===void 0&&l&&i&&(d=f.measureText(i).width,n.set(i,d)),l&&u===void 0&&(u=f.measureText(o).width,n.set(o,u),g=u-d)}return{width:c*h,kernedWidth:g*h}}getHeightOfChar(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")}measureLine(t){let e=this._measureLine(t);return this.charSpacing!==0&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e}_measureLine(t){let e,i,s=0,n=this.pathSide===wt,a=this.path,o=this._textLines[t],l=o.length,h=Array(l);this.__charBounds[t]=h;for(let c=0;c<l;c++){let u=o[c];i=this._getGraphemeBox(u,t,c,e),h[c]=i,s+=i.kernedWidth,e=u}if(h[l]={left:i?i.left+i.width:0,width:0,kernedWidth:0,height:this.fontSize,deltaY:0},a&&a.segmentsInfo){let c=0,u=a.segmentsInfo[a.segmentsInfo.length-1].length;switch(this.textAlign){case z:c=n?u-s:0;break;case F:c=(u-s)/2;break;case wt:c=n?0:u-s}c+=this.pathStartOffset*(n?-1:1);for(let d=n?l-1:0;n?d>=0:d<l;n?d--:d++)i=h[d],c>u?c%=u:c<0&&(c+=u),this._setGraphemeOnPath(c,i),c+=i.kernedWidth}return{width:s,numOfSpaces:0}}_setGraphemeOnPath(t,e){let i=t+e.kernedWidth/2,s=this.path,n=ll(s.path,i,s.segmentsInfo);e.renderLeft=n.x-s.pathOffset.x,e.renderTop=n.y-s.pathOffset.y,e.angle=n.angle+(this.pathSide==="right"?Math.PI:0)}_getGraphemeBox(t,e,i,s,n){let a=this.getCompleteStyleDeclaration(e,i),o=s?this.getCompleteStyleDeclaration(e,i-1):{},l=this._measureChar(t,a,s,o),h,c=l.kernedWidth,u=l.width;this.charSpacing!==0&&(h=this._getWidthOfCharSpacing(),u+=h,c+=h);let d={width:u,left:0,height:a.fontSize,kernedWidth:c,deltaY:a.deltaY};if(i>0&&!n){let g=this.__charBounds[e][i-1];d.left=g.left+g.width+l.kernedWidth-l.width}return d}getHeightOfLineImpl(t){let e=this.__lineHeights;if(e[t])return e[t];let i=this.getHeightOfChar(t,0);for(let s=1,n=this._textLines[t].length;s<n;s++)i=Math.max(this.getHeightOfChar(t,s),i);return e[t]=i*this._fontSizeMult}getHeightOfLine(t){return this.getHeightOfLineImpl(t)*this.lineHeight}calcTextHeight(){let t=0;for(let e=0,i=this._textLines.length;e<i;e++)t+=e===i-1?this.getHeightOfLineImpl(e):this.getHeightOfLine(e);return t}_getLeftOffset(){return this.direction==="ltr"?-this.width/2:this.width/2}_getTopOffset(){return-this.height/2}_renderTextCommon(t,e){t.save();let i=0,s=this._getLeftOffset(),n=this._getTopOffset();for(let a=0,o=this._textLines.length;a<o;a++)this._renderTextLine(e,t,this._textLines[a],s+this._getLineLeftOffset(a),n+i+this.getHeightOfLineImpl(a),a),i+=this.getHeightOfLine(a);t.restore()}_renderTextFill(t){(this.fill||this.styleHas("fill"))&&this._renderTextCommon(t,"fillText")}_renderTextStroke(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(t,e,i,s,n,a){let o=this.textAlign.includes(Dn),l=this.path,h=!o&&this.charSpacing===0&&this.isEmptyStyles(a)&&!l,c=this.direction==="ltr",u=this.direction==="ltr"?1:-1,d=e.direction,g,f,p,y,b,x="",C=0;if(e.save(),d!==this.direction&&(e.canvas.setAttribute("dir",c?"ltr":"rtl"),e.direction=c?"ltr":"rtl",e.textAlign=c?z:wt),n-=this.getHeightOfLineImpl(a)*this._fontSizeFraction,h)return this._renderChar(t,e,a,0,i.join(""),s,n),void e.restore();for(let S=0,w=i.length-1;S<=w;S++)y=S===w||this.charSpacing||l,x+=i[S],p=this.__charBounds[a][S],C===0?(s+=u*(p.kernedWidth-p.width),C+=p.width):C+=p.kernedWidth,o&&!y&&this._reSpaceAndTab.test(i[S])&&(y=!0),y||(g=g||this.getCompleteStyleDeclaration(a,S),f=this.getCompleteStyleDeclaration(a,S+1),y=Ui(g,f,!1)),y&&(l?(e.save(),e.translate(p.renderLeft,p.renderTop),e.rotate(p.angle),this._renderChar(t,e,a,S,x,-C/2,0),e.restore()):(b=s,this._renderChar(t,e,a,S,x,b,n)),x="",g=f,s+=u*C,C=0);e.restore()}_applyPatternGradientTransformText(t){let e=this.width+this.strokeWidth,i=this.height+this.strokeWidth,s=gt({width:e,height:i}),n=s.getContext("2d");return s.width=e,s.height=i,n.beginPath(),n.moveTo(0,0),n.lineTo(e,0),n.lineTo(e,i),n.lineTo(0,i),n.closePath(),n.translate(e/2,i/2),n.fillStyle=t.toLive(n),this._applyPatternGradientTransform(n,t),n.fill(),n.createPattern(s,"no-repeat")}handleFiller(t,e,i){let s,n;return yt(i)?i.gradientUnits==="percentage"||i.gradientTransform||i.patternTransform?(s=-this.width/2,n=-this.height/2,t.translate(s,n),t[e]=this._applyPatternGradientTransformText(i),{offsetX:s,offsetY:n}):(t[e]=i.toLive(t),this._applyPatternGradientTransform(t,i)):(t[e]=i,{offsetX:0,offsetY:0})}_setStrokeStyles(t,{stroke:e,strokeWidth:i}){return t.lineWidth=i,t.lineCap=this.strokeLineCap,t.lineDashOffset=this.strokeDashOffset,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,this.handleFiller(t,"strokeStyle",e)}_setFillStyles(t,{fill:e}){return this.handleFiller(t,"fillStyle",e)}_renderChar(t,e,i,s,n,a,o){let l=this._getStyleDeclaration(i,s),h=this.getCompleteStyleDeclaration(i,s),c=t==="fillText"&&h.fill,u=t==="strokeText"&&h.stroke&&h.strokeWidth;if(u||c){if(e.save(),e.font=this._getFontDeclaration(h),l.textBackgroundColor&&this._removeShadow(e),l.deltaY&&(o+=l.deltaY),c){let d=this._setFillStyles(e,h);e.fillText(n,a-d.offsetX,o-d.offsetY)}if(u){let d=this._setStrokeStyles(e,h);e.strokeText(n,a-d.offsetX,o-d.offsetY)}e.restore()}}setSuperscript(t,e){this._setScript(t,e,this.superscript)}setSubscript(t,e){this._setScript(t,e,this.subscript)}_setScript(t,e,i){let s=this.get2DCursorLocation(t,!0),n=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"fontSize"),a=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"deltaY"),o={fontSize:n*i.size,deltaY:a+n*i.baseline};this.setSelectionStyles(o,t,e)}_getLineLeftOffset(t){let e=this.getLineWidth(t),i=this.width-e,s=this.textAlign,n=this.direction,a=this.isEndOfWrapping(t),o=0;return s==="justify"||s==="justify-center"&&!a||s==="justify-right"&&!a||s==="justify-left"&&!a?0:(s==="center"&&(o=i/2),s==="right"&&(o=i),s==="justify-center"&&(o=i/2),s==="justify-right"&&(o=i),n==="rtl"&&(s==="right"||s==="justify-right"?o=0:s==="left"||s==="justify-left"?o=-i:s!=="center"&&s!=="justify-center"||(o=-i/2)),o)}_clearCache(){this._forceClearCache=!1,this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]}getLineWidth(t){if(this.__lineWidths[t]!==void 0)return this.__lineWidths[t];let{width:e}=this.measureLine(t);return this.__lineWidths[t]=e,e}_getWidthOfCharSpacing(){return this.charSpacing===0?0:this.fontSize*this.charSpacing/1e3}getValueOfPropertyAt(t,e,i){var s;return(s=this._getStyleDeclaration(t,e)[i])==null?this[i]:s}_renderTextDecoration(t,e){if(!this[e]&&!this.styleHas(e))return;let i=this._getTopOffset(),s=this._getLeftOffset(),n=this.path,a=this._getWidthOfCharSpacing(),o=e==="linethrough"?.5:+(e==="overline"),l=this.offsets[e];for(let h=0,c=this._textLines.length;h<c;h++){let u=this.getHeightOfLine(h);if(!this[e]&&!this.styleHas(e,h)){i+=u;continue}let d=this._textLines[h],g=u/this.lineHeight,f=this._getLineLeftOffset(h),p,y=0,b=0,x=this.getValueOfPropertyAt(h,0,e),C=this.getValueOfPropertyAt(h,0,at),S=this.getValueOfPropertyAt(h,0,"textDecorationColor")||C,w=this.getValueOfPropertyAt(h,0,Xe),k=x,T=S,O=w,M=i+g*(1-this._fontSizeFraction),D=this.getHeightOfChar(h,0),E=this.getValueOfPropertyAt(h,0,"deltaY");for(let B=0,q=d.length;B<q;B++){let $=this.__charBounds[h][B];k=this.getValueOfPropertyAt(h,B,e),p=this.getValueOfPropertyAt(h,B,at),T=this.getValueOfPropertyAt(h,B,"textDecorationColor")||p,O=this.getValueOfPropertyAt(h,B,Xe);let tt=this.getHeightOfChar(h,B),ht=this.getValueOfPropertyAt(h,B,"deltaY");if(n&&k&&p){let I=this.fontSize*O/1e3;t.save(),t.fillStyle=T,t.translate($.renderLeft,$.renderTop),t.rotate($.angle),t.fillRect(-$.kernedWidth/2,l*tt+ht-o*I,$.kernedWidth,I),t.restore()}else if((k!==x||p!==C||T!==S||tt!==D||O!==w||ht!==E)&&b>0){let I=this.fontSize*w/1e3,Ot=s+f+y;this.direction==="rtl"&&(Ot=this.width-Ot-b),x&&S&&w&&(t.fillStyle=S,t.fillRect(Ot,M+l*D+E-o*I,b,I)),y=$.left,b=$.width,x=k,S=T,w=O,C=p,D=tt,E=ht}else b+=$.kernedWidth}let A=s+f+y;this.direction==="rtl"&&(A=this.width-A-b),t.fillStyle=T;let j=this.fontSize*O/1e3;k&&T&&O&&t.fillRect(A,M+l*D+E-o*j,b-a,j),i+=u}this._removeShadow(t)}_getFontDeclaration({fontFamily:t=this.fontFamily,fontStyle:e=this.fontStyle,fontWeight:i=this.fontWeight,fontSize:s=this.fontSize}={},n){let a=t.includes("'")||t.includes('"')||t.includes(",")||br.genericFonts.includes(t.toLowerCase())?t:`"${t}"`;return[e,i,`${n?this.CACHE_FONT_SIZE:s}px`,a].join(" ")}render(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._forceClearCache&&this.initDimensions(),super.render(t)))}graphemeSplit(t){return Yi(t)}_splitTextIntoLines(t){let e=t.split(this._reNewline),i=Array(e.length),s=[`
|
|
54
|
-
`],n=[];for(let a=0;a<e.length;a++)i[a]=this.graphemeSplit(e[a]),n=n.concat(i[a],s);return n.pop(),{_unwrappedLines:i,lines:e,graphemeText:n,graphemeLines:i}}toObject(t=[]){return{...super.toObject([...wo,...t]),styles:Ko(this.styles,this.text),...this.path?{path:this.path.toObject()}:{}}}set(t,e){let{textLayoutProperties:i}=this.constructor;super.set(t,e);let s=!1,n=!1;if(typeof t=="object")for(let a in t)a==="path"&&this.setPathInfo(),s=s||i.includes(a),n=n||a==="path";else s=i.includes(t),n=t==="path";return n&&this.setPathInfo(),s&&this.initialized&&(this.initDimensions(),this.setCoords()),this}complexity(){return 1}static async fromElement(t,e,i){let s=zt(t,
|
|
55
|
-
`]}_getSVGTextAndBg(r,t){let e=[],i=[],s,n=r;this.backgroundColor&&i.push(Ls(this.backgroundColor,-this.width/2,-this.height/2,this.width,this.height));for(let a=0,o=this._textLines.length;a<o;a++)s=this._getLineLeftOffset(a),this.direction==="rtl"&&(s+=this.width),(this.textBackgroundColor||this.styleHas("textBackgroundColor",a))&&this._setSVGTextLineBg(i,a,t+s,n),this._setSVGTextLineText(e,a,t+s,n),n+=this.getHeightOfLine(a);return{textSpans:e,textBgRects:i}}_createTextCharSpan(r,t,e,i,s){let n=L.NUM_FRACTION_DIGITS,a=this.getSvgSpanStyles(t,r!==r.trim()||!!r.match(wu)),o=a?`style="${a}"`:"",l=t.deltaY,h=l?` dy="${R(l,n)}" `:"",{angle:c,renderLeft:u,renderTop:d,width:g}=s,f="";if(u!==void 0){let p=g/2;c&&(f=` rotate="${R(Yt(c),n)}"`);let y=me({angle:Yt(c)});y[4]=u,y[5]=d;let b=new v(-p,0).transform(y);e=b.x,i=b.y}return`<tspan x="${R(e,n)}" y="${R(i,n)}" ${h}${f}${o}>${P(r)}</tspan>`}_setSVGTextLineText(r,t,e,i){let s=this.getHeightOfLine(t),n=this.textAlign.includes(Dn),a=this._textLines[t],o,l,h,c,u,d="",g=0;i+=s*(1-this._fontSizeFraction)/this.lineHeight;for(let f=0,p=a.length-1;f<=p;f++)u=f===p||this.charSpacing||this.path,d+=a[f],h=this.__charBounds[t][f],g===0?(e+=h.kernedWidth-h.width,g+=h.width):g+=h.kernedWidth,n&&!u&&this._reSpaceAndTab.test(a[f])&&(u=!0),u||(o=o||this.getCompleteStyleDeclaration(t,f),l=this.getCompleteStyleDeclaration(t,f+1),u=Ui(o,l,!0)),u&&(c=this._getStyleDeclaration(t,f),r.push(this._createTextCharSpan(d,c,e,i,h)),d="",o=l,this.direction==="rtl"?e-=g:e+=g,g=0)}_setSVGTextLineBg(r,t,e,i){let s=this._textLines[t],n=this.getHeightOfLine(t)/this.lineHeight,a,o=0,l=0,h=this.getValueOfPropertyAt(t,0,"textBackgroundColor");for(let c=0;c<s.length;c++){let{left:u,width:d,kernedWidth:g}=this.__charBounds[t][c];a=this.getValueOfPropertyAt(t,c,"textBackgroundColor"),a===h?o+=g:(h&&r.push(Ls(h,e+l,i,o,n)),l=u,o=d,h=a)}a&&r.push(Ls(h,e+l,i,o,n))}getSvgStyles(r){let t=zi(this.textDecorationColor)?` text-decoration-color: ${P(this[Vi])};`:"";return`${super.getSvgStyles(r)} text-decoration-thickness: ${R(this.textDecorationThickness*this.getObjectScaling().y/10,L.NUM_FRACTION_DIGITS)}%;${t} white-space: pre;`}getSvgSpanStyles(r,t){let{fontFamily:e,strokeWidth:i,stroke:s,fill:n,fontSize:a,fontStyle:o,fontWeight:l,textDecorationThickness:h,textDecorationColor:c,linethrough:u,overline:d,underline:g}=r,f=this.getSvgTextDecoration({underline:g??this.underline,overline:d??this.overline,linethrough:u??this.linethrough}),p=h||this.textDecorationThickness,y=c||this.textDecorationColor,b=le(i),x=he(e),C=le(a),S=he(o),w=le(l)||he(l),k=he(y);return[s?Wr(Dt,s):"",b?`stroke-width: ${P(b)}; `:"",x?`font-family: ${x.includes("'")||x.includes('"')?P(x):`'${P(x)}'`}; `:"",C?`font-size: ${P(C)}px; `:"",S?`font-style: ${P(S)}; `:"",w?`font-weight: ${P(w)}; `:"",f?`text-decoration: ${f}; text-decoration-thickness: ${R(p*this.getObjectScaling().y/10,L.NUM_FRACTION_DIGITS)}%;${k?` text-decoration-color: ${P(k)};`:""} `:"",n?Wr(at,n):"",t?"white-space: pre; ":""].join("")}getSvgTextDecoration(r){return["overline","underline","line-through"].filter(t=>r[t.replace("-","")]).join(" ")}}]),_.setClass(Mt),_.setSVGClass(Mt);var _u=class{constructor(r){m(this,"target",void 0),m(this,"__mouseDownInPlace",!1),m(this,"__dragStartFired",!1),m(this,"__isDraggingOver",!1),m(this,"__dragStartSelection",void 0),m(this,"__dragImageDisposer",void 0),m(this,"_dispose",void 0),this.target=r;let t=[this.target.on("dragenter",this.dragEnterHandler.bind(this)),this.target.on("dragover",this.dragOverHandler.bind(this)),this.target.on("dragleave",this.dragLeaveHandler.bind(this)),this.target.on("dragend",this.dragEndHandler.bind(this)),this.target.on("drop",this.dropHandler.bind(this))];this._dispose=()=>{t.forEach(e=>e()),this._dispose=void 0}}isPointerOverSelection(r){let t=this.target,e=t.getSelectionStartFromPointer(r);return t.isEditing&&e>=t.selectionStart&&e<=t.selectionEnd&&t.selectionStart<t.selectionEnd}start(r){return this.__mouseDownInPlace=this.isPointerOverSelection(r)}isActive(){return this.__mouseDownInPlace}end(r){let t=this.isActive();return t&&!this.__dragStartFired&&(this.target.setCursorByClick(r),this.target.initDelayedCursor(!0)),this.__mouseDownInPlace=!1,this.__dragStartFired=!1,this.__isDraggingOver=!1,t}getDragStartSelection(){return this.__dragStartSelection}setDragImage(r,{selectionStart:t,selectionEnd:e}){var i;let s=this.target,n=s.canvas,a=new v(s.flipX?-1:1,s.flipY?-1:1),o=s._getCursorBoundaries(t),l=new v(o.left+o.leftOffset,o.top+o.topOffset).multiply(a).transform(s.calcTransformMatrix()),h=n.getScenePoint(r).subtract(l),c=s.getCanvasRetinaScaling(),u=s.getBoundingRect(),d=l.subtract(new v(u.left,u.top)),g=n.viewportTransform,f=d.add(h).transform(g,!0),p=s.backgroundColor,y=Yn(s.styles);s.backgroundColor="";let b={stroke:"transparent",fill:"transparent",textBackgroundColor:"transparent"};s.setSelectionStyles(b,0,t),s.setSelectionStyles(b,e,s.text.length),s.dirty=!0;let x=s.toCanvasElement({enableRetinaScaling:n.enableRetinaScaling,viewportTransform:!0});s.backgroundColor=p,s.styles=y,s.dirty=!0,en(x,{position:"fixed",left:-x.width+"px",border:Ii,width:x.width/c+"px",height:x.height/c+"px"}),this.__dragImageDisposer&&this.__dragImageDisposer(),this.__dragImageDisposer=()=>{x.remove()},xt(r.target||this.target.hiddenTextarea).body.appendChild(x),(i=r.dataTransfer)==null||i.setDragImage(x,f.x,f.y)}onDragStart(r){this.__dragStartFired=!0;let t=this.target,e=this.isActive();if(e&&r.dataTransfer){let i=this.__dragStartSelection={selectionStart:t.selectionStart,selectionEnd:t.selectionEnd},s=t._text.slice(i.selectionStart,i.selectionEnd).join(""),n={text:t.text,value:s,...i};r.dataTransfer.setData("text/plain",s),r.dataTransfer.setData("application/fabric",JSON.stringify({value:s,styles:t.getSelectionStyles(i.selectionStart,i.selectionEnd,!0)})),r.dataTransfer.effectAllowed="copyMove",this.setDragImage(r,n)}return t.abortCursorAnimation(),e}canDrop(r){if(this.target.editable&&!this.target.getActiveControl()&&!r.defaultPrevented){if(this.isActive()&&this.__dragStartSelection){let t=this.target.getSelectionStartFromPointer(r),e=this.__dragStartSelection;return t<e.selectionStart||t>e.selectionEnd}return!0}return!1}targetCanDrop(r){return this.target.canDrop(r)}dragEnterHandler({e:r}){let t=this.targetCanDrop(r);!this.__isDraggingOver&&t&&(this.__isDraggingOver=!0)}dragOverHandler(r){let{e:t}=r,e=this.targetCanDrop(t);!this.__isDraggingOver&&e?this.__isDraggingOver=!0:this.__isDraggingOver&&!e&&(this.__isDraggingOver=!1),this.__isDraggingOver&&(t.preventDefault(),r.canDrop=!0,r.dropTarget=this.target)}dragLeaveHandler(){(this.__isDraggingOver||this.isActive())&&(this.__isDraggingOver=!1)}dropHandler(r){var t;let{e}=r,i=e.defaultPrevented;this.__isDraggingOver=!1,e.preventDefault();let s=(t=e.dataTransfer)==null?void 0:t.getData("text/plain");if(s&&!i){let n=this.target,a=n.canvas,o=n.getSelectionStartFromPointer(e),{styles:l}=e.dataTransfer.types.includes("application/fabric")?JSON.parse(e.dataTransfer.getData("application/fabric")):{},h=s[Math.max(0,s.length-1)];if(this.__dragStartSelection){let c=this.__dragStartSelection.selectionStart,u=this.__dragStartSelection.selectionEnd;o>c&&o<=u?o=c:o>u&&(o-=u-c),n.removeChars(c,u),delete this.__dragStartSelection}n._reNewline.test(h)&&(n._reNewline.test(n._text[o])||o===n._text.length)&&(s=s.trimEnd()),r.didDrop=!0,r.dropTarget=n,n.insertChars(s,l,o),a.setActiveObject(n),n.enterEditing(e),n.selectionStart=Math.min(o+0,n._text.length),n.selectionEnd=Math.min(n.selectionStart+s.length,n._text.length),n.hiddenTextarea.value=n.text,n._updateTextarea(),n.hiddenTextarea.focus(),n.fire(ki,{index:o+0,action:"drop"}),a.fire("text:changed",{target:n}),a.contextTopDirty=!0,a.requestRenderAll()}}dragEndHandler({e:r}){if(this.isActive()&&this.__dragStartFired&&this.__dragStartSelection){var t;let e=this.target,i=this.target.canvas,{selectionStart:s,selectionEnd:n}=this.__dragStartSelection,a=((t=r.dataTransfer)==null?void 0:t.dropEffect)||"none";a==="none"?(e.selectionStart=s,e.selectionEnd=n,e._updateTextarea(),e.hiddenTextarea.focus()):(e.clearContextTop(),a==="move"&&(e.removeChars(s,n),e.selectionStart=e.selectionEnd=s,e.hiddenTextarea&&(e.hiddenTextarea.value=e.text),e._updateTextarea(),e.fire(ki,{index:s,action:"dragend"}),i.fire("text:changed",{target:e}),i.requestRenderAll()),e.exitEditing())}this.__dragImageDisposer&&this.__dragImageDisposer(),delete this.__dragImageDisposer,delete this.__dragStartSelection,this.__isDraggingOver=!1}dispose(){this._dispose&&this._dispose()}},ja=/[ \n\.,;!\?\-]/,Tu=class extends Mt{constructor(...r){super(...r),m(this,"_currentCursorOpacity",1)}initBehavior(){this._tick=this._tick.bind(this),this._onTickComplete=this._onTickComplete.bind(this),this.updateSelectionOnMouseMove=this.updateSelectionOnMouseMove.bind(this)}onDeselect(r){return this.isEditing&&this.exitEditing(),this.selected=!1,super.onDeselect(r)}_animateCursor({toValue:r,duration:t,delay:e,onComplete:i}){return In({startValue:this._currentCursorOpacity,endValue:r,duration:t,delay:e,onComplete:i,abort:()=>!this.canvas||this.selectionStart!==this.selectionEnd,onChange:s=>{this._currentCursorOpacity=s,this.renderCursorOrSelection()}})}_tick(r){this._currentTickState=this._animateCursor({toValue:0,duration:this.cursorDuration/2,delay:Math.max(r||0,100),onComplete:this._onTickComplete})}_onTickComplete(){var r;(r=this._currentTickCompleteState)==null||r.abort(),this._currentTickCompleteState=this._animateCursor({toValue:1,duration:this.cursorDuration,onComplete:this._tick})}initDelayedCursor(r){this.abortCursorAnimation(),this._tick(r?0:this.cursorDelay)}abortCursorAnimation(){let r=!1;[this._currentTickState,this._currentTickCompleteState].forEach(t=>{t&&!t.isDone()&&(r=!0,t.abort())}),this._currentCursorOpacity=1,r&&this.clearContextTop()}restartCursorIfNeeded(){[this._currentTickState,this._currentTickCompleteState].some(r=>!r||r.isDone())&&this.initDelayedCursor()}selectAll(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this}cmdAll(){this.selectAll(),this.renderCursorOrSelection()}getSelectedText(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")}findWordBoundaryLeft(r){let t=0,e=r-1;if(this._reSpace.test(this._text[e]))for(;this._reSpace.test(this._text[e]);)t++,e--;for(;/\S/.test(this._text[e])&&e>-1;)t++,e--;return r-t}findWordBoundaryRight(r){let t=0,e=r;if(this._reSpace.test(this._text[e]))for(;this._reSpace.test(this._text[e]);)t++,e++;for(;/\S/.test(this._text[e])&&e<this._text.length;)t++,e++;return r+t}findLineBoundaryLeft(r){let t=0,e=r-1;for(;!/\n/.test(this._text[e])&&e>-1;)t++,e--;return r-t}findLineBoundaryRight(r){let t=0,e=r;for(;!/\n/.test(this._text[e])&&e<this._text.length;)t++,e++;return r+t}searchWordBoundary(r,t){let e=this._text,i=r>0&&this._reSpace.test(e[r])&&(t===-1||!pn.test(e[r-1]))?r-1:r,s=e[i];for(;i>0&&i<e.length&&!ja.test(s);)i+=t,s=e[i];return t===-1&&ja.test(s)&&i++,i}selectWord(r){var t;r=(t=r)==null?this.selectionStart:t;let e=this.searchWordBoundary(r,-1),i=Math.max(e,this.searchWordBoundary(r,1));this.selectionStart=e,this.selectionEnd=i,this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()}selectLine(r){var t;r=(t=r)==null?this.selectionStart:t;let e=this.findLineBoundaryLeft(r),i=this.findLineBoundaryRight(r);this.selectionStart=e,this.selectionEnd=i,this._fireSelectionChanged(),this._updateTextarea()}enterEditing(r){!this.isEditing&&this.editable&&(this.enterEditingImpl(),this.fire("editing:entered",r?{e:r}:void 0),this._fireSelectionChanged(),this.canvas&&(this.canvas.fire("text:editing:entered",{target:this,e:r}),this.canvas.requestRenderAll()))}enterEditingImpl(){this.canvas&&(this.canvas.calcOffset(),this.canvas.textEditingManager.exitTextEditing()),this.isEditing=!0,this.initHiddenTextarea(),this.hiddenTextarea.focus(),this.hiddenTextarea.value=this.text,this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._textBeforeEdit=this.text,this._tick()}updateSelectionOnMouseMove(r){if(this.getActiveControl())return;let t=this.hiddenTextarea;xt(t).activeElement!==t&&t.focus();let e=this.getSelectionStartFromPointer(r),i=this.selectionStart,s=this.selectionEnd;(e===this.__selectionStartOnMouseDown&&i!==s||i!==e&&s!==e)&&(e>this.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===s||(this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}_setEditingProps(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0}fromStringToGraphemeSelection(r,t,e){let i=e.slice(0,r),s=this.graphemeSplit(i).length;if(r===t)return{selectionStart:s,selectionEnd:s};let n=e.slice(r,t);return{selectionStart:s,selectionEnd:s+this.graphemeSplit(n).length}}fromGraphemeToStringSelection(r,t,e){let i=e.slice(0,r).join("").length;return r===t?{selectionStart:i,selectionEnd:i}:{selectionStart:i,selectionEnd:i+e.slice(r,t).join("").length}}_updateTextarea(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){let r=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=r.selectionStart,this.hiddenTextarea.selectionEnd=r.selectionEnd}this.updateTextareaPosition()}}updateFromTextArea(){let{hiddenTextarea:r,direction:t,textAlign:e,inCompositionMode:i}=this;if(!r)return;let s=e==="justify"?t==="ltr"?z:wt:e.replace("justify-",""),n=this.getPositionByOrigin(s,"top");this.cursorOffsetCache={},this.text=r.value,this.set("dirty",!0),this.initDimensions(),this.setPositionByOrigin(n,s,"top"),this.setCoords();let a=this.fromStringToGraphemeSelection(r.selectionStart,r.selectionEnd,r.value);this.selectionEnd=this.selectionStart=a.selectionEnd,i||(this.selectionStart=a.selectionStart),this.updateTextareaPosition()}updateTextareaPosition(){if(this.selectionStart===this.selectionEnd){let r=this._calcTextareaPosition();this.hiddenTextarea.style.left=r.left,this.hiddenTextarea.style.top=r.top}}_calcTextareaPosition(){if(!this.canvas)return{left:"1px",top:"1px"};let r=this.inCompositionMode?this.compositionStart:this.selectionStart,t=this._getCursorBoundaries(r),e=this.get2DCursorLocation(r),i=e.lineIndex,s=e.charIndex,n=this.getValueOfPropertyAt(i,s,"fontSize")*this.lineHeight,a=t.leftOffset,o=this.getCanvasRetinaScaling(),l=this.canvas.upperCanvasEl,h=l.width/o,c=l.height/o,u=h-n,d=c-n,g=new v(t.left+a,t.top+t.topOffset+n).transform(this.calcTransformMatrix()).transform(this.canvas.viewportTransform).multiply(new v(l.clientWidth/h,l.clientHeight/c));return g.x<0&&(g.x=0),g.x>u&&(g.x=u),g.y<0&&(g.y=0),g.y>d&&(g.y=d),g.x+=this.canvas._offset.left,g.y+=this.canvas._offset.top,{left:`${g.x}px`,top:`${g.y}px`,fontSize:`${n}px`,charHeight:n}}_saveEditingProps(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}}_restoreEditingProps(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor||this.canvas.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor||this.canvas.moveCursor),delete this._savedProps)}exitEditingImpl(){let r=this.hiddenTextarea;this.selected=!1,this.isEditing=!1,r&&(r.blur&&r.blur(),r.parentNode&&r.parentNode.removeChild(r)),this.hiddenTextarea=null,this.abortCursorAnimation(),this.selectionStart!==this.selectionEnd&&this.clearContextTop(),this.selectionEnd=this.selectionStart,this._restoreEditingProps(),this._forceClearCache&&(this.initDimensions(),this.setCoords())}exitEditing(){let r=this._textBeforeEdit!==this.text;return this.exitEditingImpl(),this.fire("editing:exited"),r&&this.fire("modified"),this.canvas&&(this.canvas.fire("text:editing:exited",{target:this}),r&&this.canvas.fire("object:modified",{target:this})),this}_removeExtraneousStyles(){for(let r in this.styles)this._textLines[r]||delete this.styles[r]}removeStyleFromTo(r,t){let{lineIndex:e,charIndex:i}=this.get2DCursorLocation(r,!0),{lineIndex:s,charIndex:n}=this.get2DCursorLocation(t,!0);if(e!==s){if(this.styles[e])for(let a=i;a<this._unwrappedTextLines[e].length;a++)delete this.styles[e][a];if(this.styles[s])for(let a=n;a<this._unwrappedTextLines[s].length;a++){let o=this.styles[s][a];o&&(this.styles[e]||(this.styles[e]={}),this.styles[e][i+a-n]=o)}for(let a=e+1;a<=s;a++)delete this.styles[a];this.shiftLineStyles(s,e-s)}else if(this.styles[e]){let a=this.styles[e],o=n-i;for(let l=i;l<n;l++)delete a[l];for(let l in this.styles[e]){let h=parseInt(l,10);h>=n&&(a[h-o]=a[l],delete a[l])}}}shiftLineStyles(r,t){let e=Object.assign({},this.styles);for(let i in this.styles){let s=parseInt(i,10);s>r&&(this.styles[s+t]=e[s],e[s-t]||delete this.styles[s])}}insertNewlineStyleObject(r,t,e,i){let s={},n=this._unwrappedTextLines[r].length,a=n===t,o=!1;e||(e=1),this.shiftLineStyles(r,e);let l=this.styles[r]?this.styles[r][t===0?t:t-1]:void 0;for(let c in this.styles[r]){let u=parseInt(c,10);u>=t&&(o=!0,s[u-t]=this.styles[r][c],a&&t===0||delete this.styles[r][c])}let h=!1;for(o&&!a&&(this.styles[r+e]=s,h=!0),(h||n>t)&&e--;e>0;)i&&i[e-1]?this.styles[r+e]={0:{...i[e-1]}}:l?this.styles[r+e]={0:{...l}}:delete this.styles[r+e],e--;this._forceClearCache=!0}insertCharStyleObject(r,t,e,i){this.styles||(this.styles={});let s=this.styles[r],n=s?{...s}:{};e||(e=1);for(let o in n){let l=parseInt(o,10);l>=t&&(s[l+e]=n[l],n[l-e]||delete s[l])}if(this._forceClearCache=!0,i){for(;e--;)Object.keys(i[e]).length&&(this.styles[r]||(this.styles[r]={}),this.styles[r][t+e]={...i[e]});return}if(!s)return;let a=s[t?t-1:1];for(;a&&e--;)this.styles[r][t+e]={...a}}insertNewStyleBlock(r,t,e){let i=this.get2DCursorLocation(t,!0),s=[0],n,a=0;for(let o=0;o<r.length;o++)r[o]===`
|
|
56
|
-
`?(a++,s[a]=0):s[a]++;for(s[0]>0&&(this.insertCharStyleObject(i.lineIndex,i.charIndex,s[0],e),e=e&&e.slice(s[0]+1)),a&&this.insertNewlineStyleObject(i.lineIndex,i.charIndex+s[0],a),n=1;n<a;n++)s[n]>0?this.insertCharStyleObject(i.lineIndex+n,0,s[n],e):e&&this.styles[i.lineIndex+n]&&e[0]&&(this.styles[i.lineIndex+n][0]=e[0]),e=e&&e.slice(s[n]+1);s[n]>0&&this.insertCharStyleObject(i.lineIndex+n,0,s[n],e)}removeChars(r,t=r+1){this.removeStyleFromTo(r,t),this._text.splice(r,t-r),this.text=this._text.join(""),this.set("dirty",!0),this.initDimensions(),this.setCoords(),this._removeExtraneousStyles()}insertChars(r,t,e,i=e){i>e&&this.removeStyleFromTo(e,i);let s=this.graphemeSplit(r);this.insertNewStyleBlock(s,e,t),this._text=[...this._text.slice(0,e),...s,...this._text.slice(i)],this.text=this._text.join(""),this.set("dirty",!0),this.initDimensions(),this.setCoords(),this._removeExtraneousStyles()}setSelectionStartEndWithShift(r,t,e){e<=r?(t===r?this._selectionDirection=z:this._selectionDirection==="right"&&(this._selectionDirection=z,this.selectionEnd=r),this.selectionStart=e):e>r&&e<t?this._selectionDirection==="right"?this.selectionEnd=e:this.selectionStart=e:(t===r?this._selectionDirection=wt:this._selectionDirection==="left"&&(this._selectionDirection=wt,this.selectionStart=t),this.selectionEnd=e)}},ku=class extends Tu{initHiddenTextarea(){let r=this.canvas&&xt(this.canvas.getElement())||Ye(),t=r.createElement("textarea");Object.entries({autocapitalize:"off",autocorrect:"off",autocomplete:"off",spellcheck:"false","data-fabric":"textarea",wrap:"off",name:"fabricTextarea"}).map(([n,a])=>t.setAttribute(n,a));let{top:e,left:i,fontSize:s}=this._calcTextareaPosition();t.style.cssText=`position: absolute; top: ${e}; left: ${i}; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: ${s};`,(this.hiddenTextareaContainer||r.body).appendChild(t),Object.entries({blur:"blur",keydown:"onKeyDown",keyup:"onKeyUp",input:"onInput",copy:"copy",cut:"copy",paste:"paste",compositionstart:"onCompositionStart",compositionupdate:"onCompositionUpdate",compositionend:"onCompositionEnd"}).map(([n,a])=>t.addEventListener(n,this[a].bind(this))),this.hiddenTextarea=t}blur(){this.abortCursorAnimation()}onKeyDown(r){if(!this.isEditing)return;let t=this.direction==="rtl"?this.keysMapRtl:this.keysMap;if(r.keyCode in t)this[t[r.keyCode]](r);else{if(!(r.keyCode in this.ctrlKeysMapDown)||!r.ctrlKey&&!r.metaKey)return;this[this.ctrlKeysMapDown[r.keyCode]](r)}r.stopImmediatePropagation(),r.preventDefault(),r.keyCode>=33&&r.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}onKeyUp(r){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:r.keyCode in this.ctrlKeysMapUp&&(r.ctrlKey||r.metaKey)&&(this[this.ctrlKeysMapUp[r.keyCode]](r),r.stopImmediatePropagation(),r.preventDefault(),this.canvas&&this.canvas.requestRenderAll())}onInput(r){let t=this.fromPaste,{value:e,selectionStart:i,selectionEnd:s}=this.hiddenTextarea;if(this.fromPaste=!1,r&&r.stopPropagation(),!this.isEditing)return;let n=()=>{this.updateFromTextArea(),this.fire(ki),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())};if(this.hiddenTextarea.value==="")return this.styles={},void n();let a=this._splitTextIntoLines(e).graphemeText,o=this._text.length,l=a.length,h=this.selectionStart,c=this.selectionEnd,u=h!==c,d,g,f,p,y=l-o,b=this.fromStringToGraphemeSelection(i,s,e),x=h>b.selectionStart;u?(g=this._text.slice(h,c),y+=c-h):l<o&&(g=x?this._text.slice(c+y,c):this._text.slice(h,h-y));let C=a.slice(b.selectionEnd-y,b.selectionEnd);if(g&&g.length&&(C.length&&(d=this.getSelectionStyles(h,h+1,!1),d=C.map(()=>d[0])),u?(f=h,p=c):x?(f=c-g.length,p=c):(f=c,p=c+g.length),this.removeStyleFromTo(f,p)),C.length){let{copyPasteData:S}=At();t&&C.join("")===S.copiedText&&!L.disableStyleCopyPaste&&(d=S.copiedTextStyle),this.insertNewStyleBlock(C,h,d)}n()}onCompositionStart(){this.inCompositionMode=!0}onCompositionEnd(){this.inCompositionMode=!1}onCompositionUpdate({target:r}){let{selectionStart:t,selectionEnd:e}=r;this.compositionStart=t,this.compositionEnd=e,this.updateTextareaPosition()}copy(){if(this.selectionStart===this.selectionEnd)return;let{copyPasteData:r}=At();r.copiedText=this.getSelectedText(),L.disableStyleCopyPaste?r.copiedTextStyle=void 0:r.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0}paste(){this.fromPaste=!0}_getWidthBeforeCursor(r,t){let e,i=this._getLineLeftOffset(r);return t>0&&(e=this.__charBounds[r][t-1],i+=e.left+e.width),i}getDownCursorOffset(r,t){let e=this._getSelectionForOffset(r,t),i=this.get2DCursorLocation(e),s=i.lineIndex;if(s===this._textLines.length-1||r.metaKey||r.keyCode===34)return this._text.length-e;let n=i.charIndex,a=this._getWidthBeforeCursor(s,n),o=this._getIndexOnLine(s+1,a);return this._textLines[s].slice(n).length+o+1+this.missingNewlineOffset(s)}_getSelectionForOffset(r,t){return r.shiftKey&&this.selectionStart!==this.selectionEnd&&t?this.selectionEnd:this.selectionStart}getUpCursorOffset(r,t){let e=this._getSelectionForOffset(r,t),i=this.get2DCursorLocation(e),s=i.lineIndex;if(s===0||r.metaKey||r.keyCode===33)return-e;let n=i.charIndex,a=this._getWidthBeforeCursor(s,n),o=this._getIndexOnLine(s-1,a),l=this._textLines[s].slice(0,n),h=this.missingNewlineOffset(s-1);return-this._textLines[s-1].length+o-l.length+(1-h)}_getIndexOnLine(r,t){let e=this._textLines[r],i,s,n=this._getLineLeftOffset(r),a=0;for(let o=0,l=e.length;o<l;o++)if(i=this.__charBounds[r][o].width,n+=i,n>t){s=!0;let h=n-i,c=n,u=Math.abs(h-t);a=Math.abs(c-t)<u?o:o-1;break}return s||(a=e.length-1),a}moveCursorDown(r){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",r)}moveCursorUp(r){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorUpOrDown("Up",r)}_moveCursorUpOrDown(r,t){let e=this[`get${r}CursorOffset`](t,this._selectionDirection===wt);if(t.shiftKey?this.moveCursorWithShift(e):this.moveCursorWithoutShift(e),e!==0){let i=this.text.length;this.selectionStart=pe(0,this.selectionStart,i),this.selectionEnd=pe(0,this.selectionEnd,i),this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea()}}moveCursorWithShift(r){let t=this._selectionDirection==="left"?this.selectionStart+r:this.selectionEnd+r;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,t),r!==0}moveCursorWithoutShift(r){return r<0?(this.selectionStart+=r,this.selectionEnd=this.selectionStart):(this.selectionEnd+=r,this.selectionStart=this.selectionEnd),r!==0}moveCursorLeft(r){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorLeftOrRight("Left",r)}_move(r,t,e){let i;if(r.altKey)i=this[`findWordBoundary${e}`](this[t]);else{if(!r.metaKey&&r.keyCode!==35&&r.keyCode!==36)return this[t]+=e==="Left"?-1:1,!0;i=this[`findLineBoundary${e}`](this[t])}return i!==void 0&&this[t]!==i&&(this[t]=i,!0)}_moveLeft(r,t){return this._move(r,t,"Left")}_moveRight(r,t){return this._move(r,t,"Right")}moveCursorLeftWithoutShift(r){let t=!0;return this._selectionDirection=z,this.selectionEnd===this.selectionStart&&this.selectionStart!==0&&(t=this._moveLeft(r,"selectionStart")),this.selectionEnd=this.selectionStart,t}moveCursorLeftWithShift(r){return this._selectionDirection==="right"&&this.selectionStart!==this.selectionEnd?this._moveLeft(r,"selectionEnd"):this.selectionStart===0?void 0:(this._selectionDirection=z,this._moveLeft(r,"selectionStart"))}moveCursorRight(r){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",r)}_moveCursorLeftOrRight(r,t){let e=`moveCursor${r}${t.shiftKey?"WithShift":"WithoutShift"}`;this._currentCursorOpacity=1,this[e](t)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())}moveCursorRightWithShift(r){return this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(r,"selectionStart"):this.selectionEnd===this._text.length?void 0:(this._selectionDirection=wt,this._moveRight(r,"selectionEnd"))}moveCursorRightWithoutShift(r){let t=!0;return this._selectionDirection=wt,this.selectionStart===this.selectionEnd?(t=this._moveRight(r,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,t}},La=r=>!!r.button,Ou=class extends ku{constructor(...r){super(...r),m(this,"draggableTextDelegate",void 0)}initBehavior(){this.on("mousedown",this._mouseDownHandler),this.on("mouseup",this.mouseUpHandler),this.on("mousedblclick",this.doubleClickHandler),this.on("mousetripleclick",this.tripleClickHandler),this.draggableTextDelegate=new _u(this),super.initBehavior()}shouldStartDragging(){return this.draggableTextDelegate.isActive()}onDragStart(r){return this.draggableTextDelegate.onDragStart(r)}canDrop(r){return this.draggableTextDelegate.canDrop(r)}doubleClickHandler(r){this.isEditing&&(this.selectWord(this.getSelectionStartFromPointer(r.e)),this.renderCursorOrSelection())}tripleClickHandler(r){this.isEditing&&(this.selectLine(this.getSelectionStartFromPointer(r.e)),this.renderCursorOrSelection())}_mouseDownHandler({e:r,alreadySelected:t}){this.canvas&&this.editable&&!La(r)&&!this.getActiveControl()&&(this.draggableTextDelegate.start(r)||(this.canvas.textEditingManager.register(this),t&&(this.inCompositionMode=!1,this.setCursorByClick(r)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()),this.selected||(this.selected=t||this.isEditing)))}mouseUpHandler({e:r,transform:t}){let e=this.draggableTextDelegate.end(r);if(this.canvas){this.canvas.textEditingManager.unregister(this);let i=this.canvas._activeObject;if(i&&i!==this)return}!this.editable||this.group&&!this.group.interactive||t&&t.actionPerformed||La(r)||e||this.selected&&!this.getActiveControl()&&(this.enterEditing(r),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection())}setCursorByClick(r){let t=this.getSelectionStartFromPointer(r),e=this.selectionStart,i=this.selectionEnd;r.shiftKey?this.setSelectionStartEndWithShift(e,i,t):(this.selectionStart=t,this.selectionEnd=t),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())}getSelectionStartFromPointer(r){let t=this.canvas.getScenePoint(r).transform(ot(this.calcTransformMatrix())).add(new v(-this._getLeftOffset(),-this._getTopOffset())),e=0,i=0,s=0;for(let l=0;l<this._textLines.length&&e<=t.y;l++)e+=this.getHeightOfLine(l),s=l,l>0&&(i+=this._textLines[l-1].length+this.missingNewlineOffset(l-1));let n=Math.abs(this._getLineLeftOffset(s)),a=this._textLines[s].length,o=this.__charBounds[s];for(let l=0;l<a;l++){let h=n+o[l].kernedWidth;if(t.x<=h){Math.abs(t.x-h)<=Math.abs(t.x-n)&&i++;break}n=h,i++}return Math.min(this.flipX?a-i:i,this._text.length)}},fi="moveCursorUp",pi="moveCursorDown",mi="moveCursorLeft",yi="moveCursorRight",vi="exitEditing",Fa=(r,t)=>{let e=t.getRetinaScaling();r.setTransform(e,0,0,e,0,0);let i=t.viewportTransform;r.transform(i[0],i[1],i[2],i[3],i[4],i[5])},Mu={selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,keysMap:{9:vi,27:vi,33:fi,34:pi,35:yi,36:mi,37:mi,38:fi,39:yi,40:pi},keysMapRtl:{9:vi,27:vi,33:fi,34:pi,35:mi,36:yi,37:yi,38:fi,39:mi,40:pi},ctrlKeysMapDown:{65:"cmdAll"},ctrlKeysMapUp:{67:"copy",88:"cut"},_selectionDirection:null,_reSpace:/\s|\r?\n/,inCompositionMode:!1},je=class hn extends Ou{static getDefaults(){return{...super.getDefaults(),...hn.ownDefaults}}get type(){let t=super.type;return t==="itext"?"i-text":t}constructor(t,e){super(t,{...hn.ownDefaults,...e}),this.initBehavior()}_set(t,e){return this.isEditing&&this._savedProps&&t in this._savedProps?(this._savedProps[t]=e,this):(t==="canvas"&&(this.canvas instanceof Li&&this.canvas.textEditingManager.remove(this),e instanceof Li&&e.textEditingManager.add(this)),super._set(t,e))}setSelectionStart(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)}setSelectionEnd(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)}_updateAndFire(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()}_fireSelectionChanged(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})}initDimensions(){this.isEditing&&this.initDelayedCursor(),super.initDimensions()}getSelectionStyles(t=this.selectionStart||0,e=this.selectionEnd,i){return super.getSelectionStyles(t,e,i)}setSelectionStyles(t,e=this.selectionStart||0,i=this.selectionEnd){return super.setSelectionStyles(t,e,i)}get2DCursorLocation(t=this.selectionStart,e){return super.get2DCursorLocation(t,e)}render(t){super.render(t),this.cursorOffsetCache={},this.renderCursorOrSelection()}toCanvasElement(t){let e=this.isEditing;this.isEditing=!1;let i=super.toCanvasElement(t);return this.isEditing=e,i}renderCursorOrSelection(){if(!this.isEditing||!this.canvas)return;let t=this.clearContextTop(!0);if(!t)return;let e=this._getCursorBoundaries(),i=this.findAncestorsWithClipPath(),s=i.length>0,n,a=t;if(s){n=gt(t.canvas),a=n.getContext("2d"),Fa(a,this.canvas);let o=this.calcTransformMatrix();a.transform(o[0],o[1],o[2],o[3],o[4],o[5])}if(this.selectionStart!==this.selectionEnd||this.inCompositionMode?this.renderSelection(a,e):this.renderCursor(a,e),s)for(let o of i){let l=o.clipPath,h=gt(t.canvas),c=h.getContext("2d");if(Fa(c,this.canvas),!l.absolutePositioned){let u=o.calcTransformMatrix();c.transform(u[0],u[1],u[2],u[3],u[4],u[5])}l.transform(c),l.drawObject(c,!0,{}),this.drawClipPathOnCache(a,l,h)}s&&(t.setTransform(1,0,0,1,0,0),t.drawImage(n,0,0)),this.canvas.contextTopDirty=!0,t.restore()}findAncestorsWithClipPath(){let t=[],e=this;for(;e;)e.clipPath&&t.push(e),e=e.parent;return t}_getCursorBoundaries(t=this.selectionStart,e){let i=this._getLeftOffset(),s=this._getTopOffset(),n=this._getCursorBoundariesOffsets(t,e);return{left:i,top:s,leftOffset:n.left,topOffset:n.top}}_getCursorBoundariesOffsets(t,e){return e?this.__getCursorBoundariesOffsets(t):this.cursorOffsetCache&&"top"in this.cursorOffsetCache?this.cursorOffsetCache:this.cursorOffsetCache=this.__getCursorBoundariesOffsets(t)}__getCursorBoundariesOffsets(t){let e=0,i=0,{charIndex:s,lineIndex:n}=this.get2DCursorLocation(t),{textAlign:a,direction:o}=this;for(let u=0;u<n;u++)e+=this.getHeightOfLine(u);let l=this._getLineLeftOffset(n),h=this.__charBounds[n][s];h&&(i=h.left),this.charSpacing!==0&&s===this._textLines[n].length&&(i-=this._getWidthOfCharSpacing());let c=l+(i>0?i:0);return o==="rtl"&&(a==="right"||a==="justify"||a==="justify-right"?c*=-1:a==="left"||a==="justify-left"?c=l-(i>0?i:0):a!=="center"&&a!=="justify-center"||(c=l-(i>0?i:0))),{top:e,left:c}}renderCursorAt(t){this._renderCursor(this.canvas.contextTop,this._getCursorBoundaries(t,!0),t)}renderCursor(t,e){this._renderCursor(t,e,this.selectionStart)}getCursorRenderingData(t=this.selectionStart,e=this._getCursorBoundaries(t)){let i=this.get2DCursorLocation(t),s=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,a=this.getValueOfPropertyAt(s,n,"fontSize"),o=this.getObjectScaling().x*this.canvas.getZoom(),l=this.cursorWidth/o,h=this.getValueOfPropertyAt(s,n,"deltaY"),c=e.topOffset+(1-this._fontSizeFraction)*this.getHeightOfLine(s)/this.lineHeight-a*(1-this._fontSizeFraction);return{color:this.cursorColor||this.getValueOfPropertyAt(s,n,"fill"),opacity:this._currentCursorOpacity,left:e.left+e.leftOffset-l/2,top:c+e.top+h,width:l,height:a}}_renderCursor(t,e,i){let{color:s,opacity:n,left:a,top:o,width:l,height:h}=this.getCursorRenderingData(i,e);t.fillStyle=s,t.globalAlpha=n,t.fillRect(a,o,l,h)}renderSelection(t,e){let i={selectionStart:this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,selectionEnd:this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd};this._renderSelection(t,i,e)}renderDragSourceEffect(){let t=this.draggableTextDelegate.getDragStartSelection();this._renderSelection(this.canvas.contextTop,t,this._getCursorBoundaries(t.selectionStart,!0))}renderDropTargetEffect(t){let e=this.getSelectionStartFromPointer(t);this.renderCursorAt(e)}_renderSelection(t,e,i){let{textAlign:s,direction:n}=this,a=e.selectionStart,o=e.selectionEnd,l=s.includes(Dn),h=this.get2DCursorLocation(a),c=this.get2DCursorLocation(o),u=h.lineIndex,d=c.lineIndex,g=h.charIndex<0?0:h.charIndex,f=c.charIndex<0?0:c.charIndex;for(let p=u;p<=d;p++){let y=this._getLineLeftOffset(p)||0,b=this.getHeightOfLine(p),x=0,C=0;if(p===u&&(x=this.__charBounds[u][g].left),p>=u&&p<d)C=l&&!this.isEndOfWrapping(p)?this.width:this.getLineWidth(p)||5;else if(p===d)if(f===0)C=this.__charBounds[d][f].left;else{let M=this._getWidthOfCharSpacing();C=this.__charBounds[d][f-1].left+this.__charBounds[d][f-1].width-M}let S=b;(this.lineHeight<1||p===d&&this.lineHeight>1)&&(b/=this.lineHeight);let w=i.left+y+x,k=b,T=0,O=C-x;this.inCompositionMode?(t.fillStyle=this.compositionColor||"black",k=1,T=b):t.fillStyle=this.selectionColor,n==="rtl"&&(s==="right"||s==="justify"||s==="justify-right"?w=this.width-w-O:s==="left"||s==="justify-left"?w=i.left+y-C:s!=="center"&&s!=="justify-center"||(w=i.left+y-C)),t.fillRect(w,i.top+i.topOffset+T,O,k),i.topOffset+=S}}getCurrentCharFontSize(){let t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fontSize")}getCurrentCharColor(){let t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,at)}_getCurrentCharIndex(){let t=this.get2DCursorLocation(this.selectionStart,!0),e=t.charIndex>0?t.charIndex-1:0;return{l:t.lineIndex,c:e}}dispose(){this.exitEditingImpl(),this.draggableTextDelegate.dispose(),super.dispose()}};m(je,"ownDefaults",Mu),m(je,"type","IText"),_.setClass(je),_.setClass(je,"i-text");var Bt=class cn extends je{static getDefaults(){return{...super.getDefaults(),...cn.ownDefaults}}constructor(t,e){super(t,{...cn.ownDefaults,...e})}static createControls(){return{controls:Ho()}}initDimensions(){this.initialized&&(this.isEditing&&this.initDelayedCursor(),this._clearCache(),this.dynamicMinWidth=0,this._styleMap=this._generateStyleMap(this._splitText()),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this.textAlign.includes("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight())}_generateStyleMap(t){let e=0,i=0,s=0,n={};for(let a=0;a<t.graphemeLines.length;a++)t.graphemeText[s]===`
|
|
57
|
-
`&&a>0?(i=0,s++,e++):!this.splitByGrapheme&&this._reSpaceAndTab.test(t.graphemeText[s])&&a>0&&(i++,s++),n[a]={line:e,offset:i},s+=t.graphemeLines[a].length,i+=t.graphemeLines[a].length;return n}styleHas(t,e){if(this._styleMap&&!this.isWrapping){let i=this._styleMap[e];i&&(e=i.line)}return super.styleHas(t,e)}isEmptyStyles(t){if(!this.styles)return!0;let e,i,s=0,n=!1,a=this._styleMap[t],o=this._styleMap[t+1];a&&(t=a.line,s=a.offset),o&&(e=o.line,n=e===t,i=o.offset);let l=t===void 0?this.styles:{line:this.styles[t]};for(let h in l)for(let c in l[h]){let u=parseInt(c,10);if(u>=s&&(!n||u<i))for(let d in l[h][c])return!1}return!0}_getStyleDeclaration(t,e){if(this._styleMap&&!this.isWrapping){let i=this._styleMap[t];if(!i)return{};t=i.line,e=i.offset+e}return super._getStyleDeclaration(t,e)}_setStyleDeclaration(t,e,i){let s=this._styleMap[t];super._setStyleDeclaration(s.line,s.offset+e,i)}_deleteStyleDeclaration(t,e){let i=this._styleMap[t];super._deleteStyleDeclaration(i.line,i.offset+e)}_getLineStyle(t){let e=this._styleMap[t];return!!this.styles[e.line]}_setLineStyle(t){let e=this._styleMap[t];super._setLineStyle(e.line)}_wrapText(t,e){this.isWrapping=!0;let i=this.getGraphemeDataForRender(t),s=[];for(let n=0;n<i.wordsData.length;n++)s.push(...this._wrapLine(n,e,i));return this.isWrapping=!1,s}getGraphemeDataForRender(t){let e=this.splitByGrapheme,i=e?"":" ",s=0;return{wordsData:t.map((n,a)=>{let o=0,l=e?this.graphemeSplit(n):this.wordSplit(n);return l.length===0?[{word:[],width:0}]:l.map(h=>{let c=e?[h]:this.graphemeSplit(h),u=this._measureWord(c,a,o);return s=Math.max(u,s),o+=c.length+i.length,{word:c,width:u}})}),largestWordWidth:s}}_measureWord(t,e,i=0){let s,n=0;for(let a=0,o=t.length;a<o;a++)n+=this._getGraphemeBox(t[a],e,a+i,s,!0).kernedWidth,s=t[a];return n}wordSplit(t){return t.split(this._wordJoiners)}_wrapLine(t,e,{largestWordWidth:i,wordsData:s},n=0){let a=this._getWidthOfCharSpacing(),o=this.splitByGrapheme,l=[],h=o?"":" ",c=0,u=[],d=0,g=0,f=!0;e-=n;let p=Math.max(e,i,this.dynamicMinWidth),y=s[t],b;for(b=0;b<y.length;b++){let{word:x,width:C}=y[b];d+=x.length,c+=g+C-a,c>p&&!f?(l.push(u),u=[],c=C,f=!0):c+=a,f||o||u.push(h),u=u.concat(x),g=o?0:this._measureWord([h],t,d),d++,f=!1}return b&&l.push(u),i+n>this.dynamicMinWidth&&(this.dynamicMinWidth=i-a+n),l}isEndOfWrapping(t){return!this._styleMap[t+1]||this._styleMap[t+1].line!==this._styleMap[t].line}missingNewlineOffset(t,e){return this.splitByGrapheme&&!e?+!!this.isEndOfWrapping(t):1}_splitTextIntoLines(t){let e=super._splitTextIntoLines(t),i=this._wrapText(e.lines,this.width),s=Array(i.length);for(let n=0;n<i.length;n++)s[n]=i[n].join("");return e.lines=s,e.graphemeLines=i,e}getMinWidth(){return Math.max(this.minWidth,this.dynamicMinWidth)}_removeExtraneousStyles(){let t=new Map;for(let e in this._styleMap){let i=parseInt(e,10);if(this._textLines[i]){let s=this._styleMap[e].line;t.set(`${s}`,!0)}}for(let e in this.styles)t.has(e)||delete this.styles[e]}toObject(t=[]){return super.toObject(["minWidth","splitByGrapheme",...t])}};m(Bt,"type","Textbox"),m(Bt,"textLayoutProperties",[...je.textLayoutProperties,"width"]),m(Bt,"ownDefaults",{minWidth:20,dynamicMinWidth:2,lockScalingFlip:!0,noScaleCache:!1,_wordJoiners:/[ \t\r]/,splitByGrapheme:!1}),_.setClass(Bt);var Ia=class extends qi{shouldPerformLayout(r){return!!r.target.clipPath&&super.shouldPerformLayout(r)}shouldLayoutClipPath(){return!1}calcLayoutResult(r,t){let{target:e}=r,{clipPath:i,group:s}=e;if(!i||!this.shouldPerformLayout(r))return;let{width:n,height:a}=Et(Qo(e,i)),o=new v(n,a);if(i.absolutePositioned)return{center:$t(i.getRelativeCenterPoint(),void 0,s?s.calcTransformMatrix():void 0),size:o};{let l=i.getRelativeCenterPoint().transform(e.calcOwnMatrix(),!0);if(this.shouldPerformLayout(r)){let{center:h=new v,correction:c=new v}=this.calcBoundingBox(t,r)||{};return{center:h.add(l),correction:c.subtract(l),size:o}}return{center:e.getRelativeCenterPoint().add(l),size:o}}}};m(Ia,"type","clip-path"),_.setClass(Ia);var Ra=class extends qi{getInitialSize({target:r},{size:t}){return new v(r.width||t.x,r.height||t.y)}};m(Ra,"type","fixed"),_.setClass(Ra);var Pu=class extends Hr{subscribeTargets(r){let t=r.target;r.targets.reduce((e,i)=>(i.parent&&e.add(i.parent),e),new Set).forEach(e=>{e.layoutManager.subscribeTargets({target:e,targets:[t]})})}unsubscribeTargets(r){let t=r.target,e=t.getObjects();r.targets.reduce((i,s)=>(s.parent&&i.add(s.parent),i),new Set).forEach(i=>{!e.some(s=>s.parent===i)&&i.layoutManager.unsubscribeTargets({target:i,targets:[t]})})}},Le=class un extends U{static getDefaults(){return{...super.getDefaults(),...un.ownDefaults}}constructor(t=[],e={}){super(),Object.assign(this,un.ownDefaults),this.setOptions(e);let{left:i,top:s,layoutManager:n}=e;this.groupInit(t,{left:i,top:s,layoutManager:n??new Pu})}_shouldSetNestedCoords(){return!0}__objectSelectionMonitor(){}multiSelectAdd(...t){this.multiSelectionStacking==="selection-order"?this.add(...t):t.forEach(e=>{let i=this._objects.findIndex(n=>n.isInFrontOf(e)),s=i===-1?this.size():i;this.insertAt(s,e)})}canEnterGroup(t){return this.getObjects().some(e=>e.isDescendantOf(t)||t.isDescendantOf(e))?(Xt("error","ActiveSelection: circular object trees are not supported, this call has no effect"),!1):super.canEnterGroup(t)}enterGroup(t,e){t.parent&&t.parent===t.group?t.parent._exitGroup(t):t.group&&t.parent!==t.group&&t.group.remove(t),this._enterGroup(t,e)}exitGroup(t,e){this._exitGroup(t,e),t.parent&&t.parent._enterGroup(t,!0)}_onAfterObjectsChange(t,e){super._onAfterObjectsChange(t,e);let i=new Set;e.forEach(s=>{let{parent:n}=s;n&&i.add(n)}),t==="removed"?i.forEach(s=>{s._onAfterObjectsChange(Ks,e)}):i.forEach(s=>{s._set("dirty",!0)})}onDeselect(){return this.removeAll(),!1}toString(){return`#<ActiveSelection: (${this.complexity()})>`}shouldCache(){return!1}isOnACache(){return!1}_renderControls(t,e,i){t.save(),t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1;let s={hasControls:!1,...i,forActiveSelection:!0};for(let n=0;n<this._objects.length;n++)this._objects[n]._renderControls(t,s);super._renderControls(t,e),t.restore()}};m(Le,"type","ActiveSelection"),m(Le,"ownDefaults",{multiSelectionStacking:"canvas-stacking"}),_.setClass(Le),_.setClass(Le,"activeSelection");var Eu=class{constructor(){m(this,"resources",{})}applyFilters(r,t,e,i,s){let n=s.getContext("2d",{willReadFrequently:!0,desynchronized:!0});if(!n)return;n.drawImage(t,0,0,e,i);let a={sourceWidth:e,sourceHeight:i,imageData:n.getImageData(0,0,e,i),originalEl:t,originalImageData:n.getImageData(0,0,e,i),canvasEl:s,ctx:n,filterBackend:this};r.forEach(l=>{l.applyTo(a)});let{imageData:o}=a;return o.width===e&&o.height===i||(s.width=o.width,s.height=o.height),n.putImageData(o,0,0),a}},Al=class{constructor({tileSize:r=L.textureSize}={}){m(this,"aPosition",new Float32Array([0,0,0,1,1,0,1,1])),m(this,"resources",{}),this.tileSize=r,this.setupGLContext(r,r),this.captureGPUInfo()}setupGLContext(r,t){this.dispose(),this.createWebGLCanvas(r,t)}createWebGLCanvas(r,t){let e=gt({width:r,height:t}),i=e.getContext("webgl",{alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1});i&&(i.clearColor(0,0,0,0),this.canvas=e,this.gl=i)}applyFilters(r,t,e,i,s,n){let a=this.gl,o=s.getContext("2d");if(!a||!o)return;let l;n&&(l=this.getCachedTexture(n,t));let h={originalWidth:t.width||t.naturalWidth||0,originalHeight:t.height||t.naturalHeight||0,sourceWidth:e,sourceHeight:i,destinationWidth:e,destinationHeight:i,context:a,sourceTexture:this.createTexture(a,e,i,l?void 0:t),targetTexture:this.createTexture(a,e,i),originalTexture:l||this.createTexture(a,e,i,l?void 0:t),passes:r.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:s},c=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,c),r.forEach(u=>{u&&u.applyTo(h)}),(function(u){let d=u.targetCanvas,g=d.width,f=d.height,p=u.destinationWidth,y=u.destinationHeight;g===p&&f===y||(d.width=p,d.height=y)})(h),this.copyGLTo2D(a,h),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(h.sourceTexture),a.deleteTexture(h.targetTexture),a.deleteFramebuffer(c),o.setTransform(1,0,0,1,0,0),h}dispose(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()}clearWebGLCaches(){this.programCache={},this.textureCache={}}createTexture(r,t,e,i,s){let{NEAREST:n,TEXTURE_2D:a,RGBA:o,UNSIGNED_BYTE:l,CLAMP_TO_EDGE:h,TEXTURE_MAG_FILTER:c,TEXTURE_MIN_FILTER:u,TEXTURE_WRAP_S:d,TEXTURE_WRAP_T:g}=r,f=r.createTexture();return r.bindTexture(a,f),r.texParameteri(a,c,s||n),r.texParameteri(a,u,s||n),r.texParameteri(a,d,h),r.texParameteri(a,g,h),i?r.texImage2D(a,0,o,o,l,i):r.texImage2D(a,0,o,t,e,0,o,l,null),f}getCachedTexture(r,t,e){let{textureCache:i}=this;if(i[r])return i[r];{let s=this.createTexture(this.gl,t.width,t.height,t,e);return s&&(i[r]=s),s}}evictCachesForKey(r){this.textureCache[r]&&(this.gl.deleteTexture(this.textureCache[r]),delete this.textureCache[r])}copyGLTo2D(r,t){let e=r.canvas,i=t.targetCanvas,s=i.getContext("2d");if(!s)return;s.translate(0,i.height),s.scale(1,-1);let n=e.height-i.height;s.drawImage(e,0,n,i.width,i.height,0,0,i.width,i.height)}copyGLTo2DPutImageData(r,t){let e=t.targetCanvas.getContext("2d"),i=t.destinationWidth,s=t.destinationHeight,n=i*s*4;if(!e)return;let a=new Uint8Array(this.imageBuffer,0,n),o=new Uint8ClampedArray(this.imageBuffer,0,n);r.readPixels(0,0,i,s,r.RGBA,r.UNSIGNED_BYTE,a);let l=new ImageData(o,i,s);e.putImageData(l,0,0)}captureGPUInfo(){if(this.gpuInfo)return this.gpuInfo;let r=this.gl,t={renderer:"",vendor:""};if(!r)return t;let e=r.getExtension("WEBGL_debug_renderer_info");if(e){let i=r.getParameter(e.UNMASKED_RENDERER_WEBGL),s=r.getParameter(e.UNMASKED_VENDOR_WEBGL);i&&(t.renderer=i.toLowerCase()),s&&(t.vendor=s.toLowerCase())}return this.gpuInfo=t,t}},Is;function Au(){let{WebGLProbe:r}=At();return r.queryWebGL(jt()),L.enableGLFiltering&&r.isSupported(L.textureSize)?new Al({tileSize:L.textureSize}):new Eu}function Rs(r=!0){return!Is&&r&&(Is=Au()),Is}var Dl=["cropX","cropY"],N=class dn extends G{static getDefaults(){return{...super.getDefaults(),...dn.ownDefaults}}constructor(t,e){super(),m(this,"_lastScaleX",1),m(this,"_lastScaleY",1),m(this,"_filterScalingX",1),m(this,"_filterScalingY",1),this.filters=[],Object.assign(this,dn.ownDefaults),this.setOptions(e),this.cacheKey=`texture${qt()}`,this.setElement(typeof t=="string"?(this.canvas&&xt(this.canvas.getElement())||Ye()).getElementById(t):t,e)}getElement(){return this._element}setElement(t,e={}){this.removeTexture(this.cacheKey),this.removeTexture(`${this.cacheKey}_filtered`),this._element=t,this._originalElement=t,this._setWidthHeight(e),this.filters.length!==0&&this.applyFilters(),this.resizeFilter&&this.applyResizeFilters()}removeTexture(t){let e=Rs(!1);e instanceof Al&&e.evictCachesForKey(t)}dispose(){super.dispose(),this.removeTexture(this.cacheKey),this.removeTexture(`${this.cacheKey}_filtered`),this._cacheContext=null,["_originalElement","_element","_filteredEl","_cacheCanvas"].forEach(t=>{let e=this[t];e&&At().dispose(e),this[t]=void 0})}getCrossOrigin(){return this._originalElement&&(this._originalElement.crossOrigin||null)}getOriginalSize(){let t=this.getElement();return t?{width:t.naturalWidth||t.width,height:t.naturalHeight||t.height}:{width:0,height:0}}_stroke(t){if(!this.stroke||this.strokeWidth===0)return;let e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,-i),t.lineTo(e,-i),t.lineTo(e,i),t.lineTo(-e,i),t.lineTo(-e,-i),t.closePath()}toObject(t=[]){let e=[];return this.filters.forEach(i=>{i&&e.push(i.toObject())}),{...super.toObject([...Dl,...t]),src:this.getSrc(),crossOrigin:this.getCrossOrigin(),filters:e,...this.resizeFilter?{resizeFilter:this.resizeFilter.toObject()}:{}}}hasCrop(){return!!this.cropX||!!this.cropY||this.width<this._element.width||this.height<this._element.height}_toSVG(){let t=[],e=this._element,i=-this.width/2,s=-this.height/2,n=[],a=[],o="",l="";if(!e)return[];if(this.hasCrop()){let h=qt();n.push('<clipPath id="imageCrop_'+h+`">
|
|
49
|
+
`]}}static async fromElement(t,e,i){let{left:s=0,top:n=0,radius:a=0,...o}=zt(t,this.ATTRIBUTE_NAMES,i);return new this({...o,radius:a,left:s-a,top:n-a})}static fromObject(t){return super._fromObject(t)}};m(Ee,"type","Circle"),m(Ee,"cacheProperties",[...Wt,...kl]),m(Ee,"ownDefaults",{radius:0,startAngle:0,endAngle:360,counterClockwise:!1}),m(Ee,"ATTRIBUTE_NAMES",["cx","cy","r",...ee]),_.setClass(Ee),_.setSVGClass(Ee);var nn=["x1","x2","y1","y2"],mr=class Ol extends G{constructor([t,e,i,s]=[0,0,0,0],n={}){super(),Object.assign(this,Ol.ownDefaults),this.setOptions(n),this.x1=t,this.x2=i,this.y1=e,this.y2=s,this._setWidthHeight();let{left:a,top:o}=n;typeof a=="number"&&this.set("left",a),typeof o=="number"&&this.set("top",o)}_setWidthHeight(){let{x1:t,y1:e,x2:i,y2:s}=this;this.width=Math.abs(i-t),this.height=Math.abs(s-e);let{left:n,top:a,width:o,height:l}=Et([{x:t,y:e},{x:i,y:s}]),h=new v(n+o/2,a+l/2);this.setPositionByOrigin(h,F,F)}_set(t,e){return super._set(t,e),nn.includes(t)&&this._setWidthHeight(),this}_render(t){t.beginPath();let e=this.calcLinePoints();t.moveTo(e.x1,e.y1),t.lineTo(e.x2,e.y2),t.lineWidth=this.strokeWidth;let i=t.strokeStyle;var s;yt(this.stroke)?t.strokeStyle=this.stroke.toLive(t):t.strokeStyle=(s=this.stroke)==null?t.fillStyle:s,this.stroke&&this._renderStroke(t),t.strokeStyle=i}_findCenterFromElement(){return new v((this.x1+this.x2)/2,(this.y1+this.y2)/2)}toObject(t=[]){return{...super.toObject(t),...this.calcLinePoints()}}_getNonTransformedDimensions(){let t=super._getNonTransformedDimensions();return this.strokeLineCap==="butt"&&(this.width===0&&(t.y-=this.strokeWidth),this.height===0&&(t.x-=this.strokeWidth)),t}calcLinePoints(){let{x1:t,x2:e,y1:i,y2:s,width:n,height:a}=this,o=t<=e?-.5:.5,l=i<=s?-.5:.5;return{x1:o*n,x2:o*-n,y1:l*a,y2:l*-a}}_toSVG(){let{x1:t,x2:e,y1:i,y2:s}=this.calcLinePoints();return["<line ","COMMON_PARTS",`x1="${t}" y1="${i}" x2="${e}" y2="${s}" />
|
|
50
|
+
`]}static async fromElement(t,e,i){let{x1:s=0,y1:n=0,x2:a=0,y2:o=0,...l}=zt(t,this.ATTRIBUTE_NAMES,i);return new this([s,n,a,o],l)}static fromObject({x1:t,y1:e,x2:i,y2:s,...n}){return this._fromObject({...n,points:[t,e,i,s]},{extraParam:"points"})}};m(mr,"type","Line"),m(mr,"cacheProperties",[...Wt,...nn]),m(mr,"ATTRIBUTE_NAMES",ee.concat(nn)),_.setClass(mr),_.setSVGClass(mr);var di=class an extends G{static getDefaults(){return{...super.getDefaults(),...an.ownDefaults}}constructor(t){super(),Object.assign(this,an.ownDefaults),this.setOptions(t)}_render(t){let e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,i),t.lineTo(0,-i),t.lineTo(e,i),t.closePath(),this._renderPaintInOrder(t)}_toSVG(){let t=this.width/2,e=this.height/2;return["<polygon ","COMMON_PARTS",'points="',`${-t} ${e},0 ${-e},${t} ${e}`,'" />']}};m(di,"type","Triangle"),m(di,"ownDefaults",{width:100,height:100}),_.setClass(di),_.setSVGClass(di);var Ml=["rx","ry"],Ae=class on extends G{static getDefaults(){return{...super.getDefaults(),...on.ownDefaults}}constructor(t){super(),Object.assign(this,on.ownDefaults),this.setOptions(t)}_set(t,e){switch(super._set(t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this}getRx(){return this.get("rx")*this.get(Zt)}getRy(){return this.get("ry")*this.get(Qt)}toObject(t=[]){return super.toObject([...Ml,...t])}_toSVG(){return["<ellipse ","COMMON_PARTS",`cx="0" cy="0" rx="${P(this.rx)}" ry="${P(this.ry)}" />
|
|
51
|
+
`]}_render(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,0,this.rx,0,_t,!1),t.restore(),this._renderPaintInOrder(t)}static async fromElement(t,e,i){let s=zt(t,this.ATTRIBUTE_NAMES,i);return s.left=(s.left||0)-s.rx,s.top=(s.top||0)-s.ry,new this(s)}};m(Ae,"type","Ellipse"),m(Ae,"cacheProperties",[...Wt,...Ml]),m(Ae,"ownDefaults",{rx:0,ry:0}),m(Ae,"ATTRIBUTE_NAMES",[...ee,"cx","cy","rx","ry"]),_.setClass(Ae),_.setSVGClass(Ae);var Pl={exactBoundingBox:!1},qt=class ln extends G{static getDefaults(){return{...super.getDefaults(),...ln.ownDefaults}}constructor(t=[],e={}){super(),m(this,"strokeDiff",void 0),Object.assign(this,ln.ownDefaults),this.setOptions(e),this.points=t;let{left:i,top:s}=e;this.initialized=!0,this.setBoundingBox(!0),typeof i=="number"&&this.set("left",i),typeof s=="number"&&this.set("top",s)}isOpen(){return!0}_projectStrokeOnPoints(t){return qo(this.points,t,this.isOpen())}_calcDimensions(t){t={scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:this.strokeMiterLimit,strokeUniform:this.strokeUniform,strokeWidth:this.strokeWidth,...t||{}};let e=this.exactBoundingBox?this._projectStrokeOnPoints(t).map(h=>h.projectedPoint):this.points;if(e.length===0)return{left:0,top:0,width:0,height:0,pathOffset:new v,strokeOffset:new v,strokeDiff:new v};let i=Et(e),s=Vr({...t,scaleX:1,scaleY:1}),n=Et(this.points.map(h=>J(h,s,!0))),a=new v(this.scaleX,this.scaleY),o=i.left+i.width/2,l=i.top+i.height/2;return this.exactBoundingBox&&(o-=l*Math.tan(X(this.skewX)),l-=o*Math.tan(X(this.skewY))),{...i,pathOffset:new v(o,l),strokeOffset:new v(n.left,n.top).subtract(new v(i.left,i.top)).multiply(a),strokeDiff:new v(i.width,i.height).subtract(new v(n.width,n.height)).multiply(a)}}_findCenterFromElement(){let t=Et(this.points);return new v(t.left+t.width/2,t.top+t.height/2)}setDimensions(){this.setBoundingBox()}setBoundingBox(t){let{left:e,top:i,width:s,height:n,pathOffset:a,strokeOffset:o,strokeDiff:l}=this._calcDimensions();this.set({width:s,height:n,pathOffset:a,strokeOffset:o,strokeDiff:l}),t&&this.setPositionByOrigin(new v(e+s/2,i+n/2),"center","center")}isStrokeAccountedForInDimensions(){return this.exactBoundingBox}_getNonTransformedDimensions(){return this.exactBoundingBox?new v(this.width,this.height):super._getNonTransformedDimensions()}_getTransformedDimensions(t={}){if(this.exactBoundingBox){let a;if(Object.keys(t).some(o=>this.strokeUniform||this.constructor.layoutProperties.includes(o))){var e,i;let{width:o,height:l}=this._calcDimensions(t);a=new v((e=t.width)==null?o:e,(i=t.height)==null?l:i)}else{var s,n;a=new v((s=t.width)==null?this.width:s,(n=t.height)==null?this.height:n)}return a.multiply(new v(t.scaleX||this.scaleX,t.scaleY||this.scaleY))}return super._getTransformedDimensions(t)}_set(t,e){let i=this.initialized&&this[t]!==e,s=super._set(t,e);return this.exactBoundingBox&&i&&((t==="scaleX"||t==="scaleY")&&this.strokeUniform&&this.constructor.layoutProperties.includes("strokeUniform")||this.constructor.layoutProperties.includes(t))&&this.setDimensions(),s}toObject(t=[]){return{...super.toObject(t),points:this.points.map(({x:e,y:i})=>({x:e,y:i}))}}_toSVG(){let t=this.pathOffset.x,e=this.pathOffset.y,i=L.NUM_FRACTION_DIGITS,s=this.points.map(({x:n,y:a})=>`${R(n-t,i)},${R(a-e,i)}`).join(" ");return[`<${P(this.constructor.type).toLowerCase()} `,"COMMON_PARTS",`points="${s}" />
|
|
52
|
+
`]}_render(t){let e=this.points.length,i=this.pathOffset.x,s=this.pathOffset.y;if(e&&!isNaN(this.points[e-1].y)){t.beginPath(),t.moveTo(this.points[0].x-i,this.points[0].y-s);for(let n=0;n<e;n++){let a=this.points[n];t.lineTo(a.x-i,a.y-s)}!this.isOpen()&&t.closePath(),this._renderPaintInOrder(t)}}complexity(){return this.points.length}static async fromElement(t,e,i){let s=(function(l){if(!l)return[];let h=l.replace(/,/g," ").trim().split(/\s+/),c=[];for(let u=0;u<h.length;u+=2)c.push({x:parseFloat(h[u]),y:parseFloat(h[u+1])});return c})(t.getAttribute("points")),{left:n,top:a,...o}=zt(t,this.ATTRIBUTE_NAMES,i);return new this(s,{...o,...e})}static fromObject(t){return this._fromObject(t,{extraParam:"points"})}};m(qt,"ownDefaults",Pl),m(qt,"type","Polyline"),m(qt,"layoutProperties",[We,He,"strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeWidth","strokeUniform","points"]),m(qt,"cacheProperties",[...Wt,"points"]),m(qt,"ATTRIBUTE_NAMES",[...ee]),_.setClass(qt),_.setSVGClass(qt);var gi=class extends qt{isOpen(){return!1}};m(gi,"ownDefaults",Pl),m(gi,"type","Polygon"),_.setClass(gi),_.setSVGClass(gi);var El=class extends G{isEmptyStyles(r){if(!this.styles||r!==void 0&&!this.styles[r])return!0;let t=r===void 0?this.styles:{line:this.styles[r]};for(let e in t)for(let i in t[e])for(let s in t[e][i])return!1;return!0}styleHas(r,t){if(!this.styles||t!==void 0&&!this.styles[t])return!1;let e=t===void 0?this.styles:{0:this.styles[t]};for(let i in e)for(let s in e[i])if(e[i][s][r]!==void 0)return!0;return!1}cleanStyle(r){if(!this.styles)return!1;let t=this.styles,e,i,s=0,n=!0,a=0;for(let o in t){e=0;for(let l in t[o]){let h=t[o][l]||{};s++,h[r]===void 0?n=!1:(i?h[r]!==i&&(n=!1):i=h[r],h[r]===this[r]&&delete h[r]),Object.keys(h).length===0?delete t[o][l]:e++}e===0&&delete t[o]}for(let o=0;o<this._textLines.length;o++)a+=this._textLines[o].length;n&&s===a&&(this[r]=i,this.removeStyle(r))}removeStyle(r){if(!this.styles)return;let t=this.styles,e,i,s;for(i in t){for(s in e=t[i],e)delete e[s][r],Object.keys(e[s]).length===0&&delete e[s];Object.keys(e).length===0&&delete t[i]}}_extendStyles(r,t){let{lineIndex:e,charIndex:i}=this.get2DCursorLocation(r);this._getLineStyle(e)||this._setLineStyle(e);let s=Sn({...this._getStyleDeclaration(e,i),...t},n=>n!==void 0);this._setStyleDeclaration(e,i,s)}getSelectionStyles(r,t,e){let i=[];for(let s=r;s<(t||r);s++)i.push(this.getStyleAtPosition(s,e));return i}getStyleAtPosition(r,t){let{lineIndex:e,charIndex:i}=this.get2DCursorLocation(r);return t?this.getCompleteStyleDeclaration(e,i):this._getStyleDeclaration(e,i)}setSelectionStyles(r,t,e){for(let i=t;i<(e||t);i++)this._extendStyles(i,r);this._forceClearCache=!0}_getStyleDeclaration(r,t){var e;let i=this.styles&&this.styles[r];return i&&(e=i[t])!=null?e:{}}getCompleteStyleDeclaration(r,t){return{...ye(this,this.constructor._styleProperties),...this._getStyleDeclaration(r,t)}}_setStyleDeclaration(r,t,e){this.styles[r][t]=e}_deleteStyleDeclaration(r,t){delete this.styles[r][t]}_getLineStyle(r){return!!this.styles[r]}_setLineStyle(r){this.styles[r]={}}_deleteLineStyle(r){delete this.styles[r]}};m(El,"_styleProperties",Lh);var wu=/ +/g,Su=/"/g;function Ls(r,t,e,i,s){return` ${((n,{left:a,top:o,width:l,height:h},c=L.NUM_FRACTION_DIGITS)=>{let u=Hr(at,n,!1),[d,g,f,p]=[a,o,l,h].map(y=>R(y,c));return`<rect ${u} x="${d}" y="${g}" width="${f}" height="${p}"></rect>`})(r,{left:t,top:e,width:i,height:s})}
|
|
53
|
+
`}var Fs,Mt=class xr extends El{static getDefaults(){return{...super.getDefaults(),...xr.ownDefaults}}constructor(t,e){super(),m(this,"__charBounds",[]),Object.assign(this,xr.ownDefaults),this.setOptions(e),this.styles||(this.styles={}),this.text=t,this.initialized=!0,this.path&&this.setPathInfo(),this.initDimensions(),this.setCoords()}setPathInfo(){let t=this.path;t&&(t.segmentsInfo=Wn(t.path))}_splitText(){let t=this._splitTextIntoLines(this.text);return this.textLines=t.lines,this._textLines=t.graphemeLines,this._unwrappedTextLines=t._unwrappedLines,this._text=t.graphemeText,t}initDimensions(){this._splitText(),this._clearCache(),this.dirty=!0,this.path?(this.width=this.path.width,this.height=this.path.height):(this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,this.height=this.calcTextHeight()),this.textAlign.includes("justify")&&this.enlargeSpaces()}enlargeSpaces(){let t,e,i,s,n,a,o;for(let l=0,h=this._textLines.length;l<h;l++)if((this.textAlign==="justify"||l!==h-1&&!this.isEndOfWrapping(l))&&(s=0,n=this._textLines[l],e=this.getLineWidth(l),e<this.width&&(o=this.textLines[l].match(this._reSpacesAndTabs)))){i=o.length,t=(this.width-e)/i;for(let c=0;c<=n.length;c++)a=this.__charBounds[l][c],this._reSpaceAndTab.test(n[c])?(a.width+=t,a.kernedWidth+=t,a.left+=s,s+=t):a.left+=s}}isEndOfWrapping(t){return t===this._textLines.length-1}missingNewlineOffset(t){return 1}get2DCursorLocation(t,e){let i=e?this._unwrappedTextLines:this._textLines,s;for(s=0;s<i.length;s++){if(t<=i[s].length)return{lineIndex:s,charIndex:t};t-=i[s].length+this.missingNewlineOffset(s,e)}return{lineIndex:s-1,charIndex:i[s-1].length<t?i[s-1].length:t}}toString(){return`#<Text (${this.complexity()}): { "text": "${this.text}", "fontFamily": "${this.fontFamily}" }>`}_getCacheCanvasDimensions(){let t=super._getCacheCanvasDimensions(),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t}_render(t){let e=this.path;e&&!e.isNotVisible()&&e._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")}_renderText(t){this.paintFirst==="stroke"?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))}_setTextStyles(t,e,i){if(t.textBaseline="alphabetic",this.path)switch(this.pathAlign){case F:t.textBaseline="middle";break;case"ascender":t.textBaseline="top";break;case"descender":t.textBaseline=Wa}t.font=this._getFontDeclaration(e,i)}calcTextWidth(){let t=this.getLineWidth(0);for(let e=1,i=this._textLines.length;e<i;e++){let s=this.getLineWidth(e);s>t&&(t=s)}return t}_renderTextLine(t,e,i,s,n,a){this._renderChars(t,e,i,s,n,a)}_renderTextLinesBackground(t){if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor"))return;let e=t.fillStyle,i=this._getLeftOffset(),s=this._getTopOffset();for(let n=0,a=this._textLines.length;n<a;n++){let o=this.getHeightOfLine(n);if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor",n)){s+=o;continue}let l=this._textLines[n].length,h=this._getLineLeftOffset(n),c,u,d=0,g=0,f=this.getValueOfPropertyAt(n,0,"textBackgroundColor"),p=this.getHeightOfLineImpl(n);for(let y=0;y<l;y++){let b=this.__charBounds[n][y];u=this.getValueOfPropertyAt(n,y,"textBackgroundColor"),this.path?(t.save(),t.translate(b.renderLeft,b.renderTop),t.rotate(b.angle),t.fillStyle=u,u&&t.fillRect(-b.width/2,-p*(1-this._fontSizeFraction),b.width,p),t.restore()):u===f?d+=b.kernedWidth:(c=i+h+g,this.direction==="rtl"&&(c=this.width-c-d),t.fillStyle=f,f&&t.fillRect(c,s,d,p),g=b.left,d=b.width,f=u)}u&&!this.path&&(c=i+h+g,this.direction==="rtl"&&(c=this.width-c-d),t.fillStyle=u,t.fillRect(c,s,d,p)),s+=o}t.fillStyle=e,this._removeShadow(t)}_measureChar(t,e,i,s){let n=Rr.getFontCache(e),a=this._getFontDeclaration(e),o=i?i+t:t,l=i&&a===this._getFontDeclaration(s),h=e.fontSize/this.CACHE_FONT_SIZE,c,u,d,g;if(i&&n.has(i)&&(d=n.get(i)),n.has(t)&&(g=c=n.get(t)),l&&n.has(o)&&(u=n.get(o),g=u-d),c===void 0||d===void 0||u===void 0){let f=(Fs||(Fs=gt({width:0,height:0}).getContext("2d")),Fs);this._setTextStyles(f,e,!0),c===void 0&&(g=c=f.measureText(t).width,n.set(t,c)),d===void 0&&l&&i&&(d=f.measureText(i).width,n.set(i,d)),l&&u===void 0&&(u=f.measureText(o).width,n.set(o,u),g=u-d)}return{width:c*h,kernedWidth:g*h}}getHeightOfChar(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")}measureLine(t){let e=this._measureLine(t);return this.charSpacing!==0&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e}_measureLine(t){let e,i,s=0,n=this.pathSide===wt,a=this.path,o=this._textLines[t],l=o.length,h=Array(l);this.__charBounds[t]=h;for(let c=0;c<l;c++){let u=o[c];i=this._getGraphemeBox(u,t,c,e),h[c]=i,s+=i.kernedWidth,e=u}if(h[l]={left:i?i.left+i.width:0,width:0,kernedWidth:0,height:this.fontSize,deltaY:0},a&&a.segmentsInfo){let c=0,u=a.segmentsInfo[a.segmentsInfo.length-1].length;switch(this.textAlign){case z:c=n?u-s:0;break;case F:c=(u-s)/2;break;case wt:c=n?0:u-s}c+=this.pathStartOffset*(n?-1:1);for(let d=n?l-1:0;n?d>=0:d<l;n?d--:d++)i=h[d],c>u?c%=u:c<0&&(c+=u),this._setGraphemeOnPath(c,i),c+=i.kernedWidth}return{width:s,numOfSpaces:0}}_setGraphemeOnPath(t,e){let i=t+e.kernedWidth/2,s=this.path,n=ll(s.path,i,s.segmentsInfo);e.renderLeft=n.x-s.pathOffset.x,e.renderTop=n.y-s.pathOffset.y,e.angle=n.angle+(this.pathSide==="right"?Math.PI:0)}_getGraphemeBox(t,e,i,s,n){let a=this.getCompleteStyleDeclaration(e,i),o=s?this.getCompleteStyleDeclaration(e,i-1):{},l=this._measureChar(t,a,s,o),h,c=l.kernedWidth,u=l.width;this.charSpacing!==0&&(h=this._getWidthOfCharSpacing(),u+=h,c+=h);let d={width:u,left:0,height:a.fontSize,kernedWidth:c,deltaY:a.deltaY};if(i>0&&!n){let g=this.__charBounds[e][i-1];d.left=g.left+g.width+l.kernedWidth-l.width}return d}getHeightOfLineImpl(t){let e=this.__lineHeights;if(e[t])return e[t];let i=this.getHeightOfChar(t,0);for(let s=1,n=this._textLines[t].length;s<n;s++)i=Math.max(this.getHeightOfChar(t,s),i);return e[t]=i*this._fontSizeMult}getHeightOfLine(t){return this.getHeightOfLineImpl(t)*this.lineHeight}calcTextHeight(){let t=0;for(let e=0,i=this._textLines.length;e<i;e++)t+=e===i-1?this.getHeightOfLineImpl(e):this.getHeightOfLine(e);return t}_getLeftOffset(){return this.direction==="ltr"?-this.width/2:this.width/2}_getTopOffset(){return-this.height/2}_renderTextCommon(t,e){t.save();let i=0,s=this._getLeftOffset(),n=this._getTopOffset();for(let a=0,o=this._textLines.length;a<o;a++)this._renderTextLine(e,t,this._textLines[a],s+this._getLineLeftOffset(a),n+i+this.getHeightOfLineImpl(a),a),i+=this.getHeightOfLine(a);t.restore()}_renderTextFill(t){(this.fill||this.styleHas("fill"))&&this._renderTextCommon(t,"fillText")}_renderTextStroke(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(t,e,i,s,n,a){let o=this.textAlign.includes(Dn),l=this.path,h=!o&&this.charSpacing===0&&this.isEmptyStyles(a)&&!l,c=this.direction==="ltr",u=this.direction==="ltr"?1:-1,d=e.direction,g,f,p,y,b,x="",C=0;if(e.save(),d!==this.direction&&(e.canvas.setAttribute("dir",c?"ltr":"rtl"),e.direction=c?"ltr":"rtl",e.textAlign=c?z:wt),n-=this.getHeightOfLineImpl(a)*this._fontSizeFraction,h)return this._renderChar(t,e,a,0,i.join(""),s,n),void e.restore();for(let S=0,w=i.length-1;S<=w;S++)y=S===w||this.charSpacing||l,x+=i[S],p=this.__charBounds[a][S],C===0?(s+=u*(p.kernedWidth-p.width),C+=p.width):C+=p.kernedWidth,o&&!y&&this._reSpaceAndTab.test(i[S])&&(y=!0),y||(g=g||this.getCompleteStyleDeclaration(a,S),f=this.getCompleteStyleDeclaration(a,S+1),y=Ui(g,f,!1)),y&&(l?(e.save(),e.translate(p.renderLeft,p.renderTop),e.rotate(p.angle),this._renderChar(t,e,a,S,x,-C/2,0),e.restore()):(b=s,this._renderChar(t,e,a,S,x,b,n)),x="",g=f,s+=u*C,C=0);e.restore()}_applyPatternGradientTransformText(t){let e=this.width+this.strokeWidth,i=this.height+this.strokeWidth,s=gt({width:e,height:i}),n=s.getContext("2d");return s.width=e,s.height=i,n.beginPath(),n.moveTo(0,0),n.lineTo(e,0),n.lineTo(e,i),n.lineTo(0,i),n.closePath(),n.translate(e/2,i/2),n.fillStyle=t.toLive(n),this._applyPatternGradientTransform(n,t),n.fill(),n.createPattern(s,"no-repeat")}handleFiller(t,e,i){let s,n;return yt(i)?i.gradientUnits==="percentage"||i.gradientTransform||i.patternTransform?(s=-this.width/2,n=-this.height/2,t.translate(s,n),t[e]=this._applyPatternGradientTransformText(i),{offsetX:s,offsetY:n}):(t[e]=i.toLive(t),this._applyPatternGradientTransform(t,i)):(t[e]=i,{offsetX:0,offsetY:0})}_setStrokeStyles(t,{stroke:e,strokeWidth:i}){return t.lineWidth=i,t.lineCap=this.strokeLineCap,t.lineDashOffset=this.strokeDashOffset,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,this.handleFiller(t,"strokeStyle",e)}_setFillStyles(t,{fill:e}){return this.handleFiller(t,"fillStyle",e)}_renderChar(t,e,i,s,n,a,o){let l=this._getStyleDeclaration(i,s),h=this.getCompleteStyleDeclaration(i,s),c=t==="fillText"&&h.fill,u=t==="strokeText"&&h.stroke&&h.strokeWidth;if(u||c){if(e.save(),e.font=this._getFontDeclaration(h),l.textBackgroundColor&&this._removeShadow(e),l.deltaY&&(o+=l.deltaY),c){let d=this._setFillStyles(e,h);e.fillText(n,a-d.offsetX,o-d.offsetY)}if(u){let d=this._setStrokeStyles(e,h);e.strokeText(n,a-d.offsetX,o-d.offsetY)}e.restore()}}setSuperscript(t,e){this._setScript(t,e,this.superscript)}setSubscript(t,e){this._setScript(t,e,this.subscript)}_setScript(t,e,i){let s=this.get2DCursorLocation(t,!0),n=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"fontSize"),a=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"deltaY"),o={fontSize:n*i.size,deltaY:a+n*i.baseline};this.setSelectionStyles(o,t,e)}_getLineLeftOffset(t){let e=this.getLineWidth(t),i=this.width-e,s=this.textAlign,n=this.direction,a=this.isEndOfWrapping(t),o=0;return s==="justify"||s==="justify-center"&&!a||s==="justify-right"&&!a||s==="justify-left"&&!a?0:(s==="center"&&(o=i/2),s==="right"&&(o=i),s==="justify-center"&&(o=i/2),s==="justify-right"&&(o=i),n==="rtl"&&(s==="right"||s==="justify-right"?o=0:s==="left"||s==="justify-left"?o=-i:s!=="center"&&s!=="justify-center"||(o=-i/2)),o)}_clearCache(){this._forceClearCache=!1,this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]}getLineWidth(t){if(this.__lineWidths[t]!==void 0)return this.__lineWidths[t];let{width:e}=this.measureLine(t);return this.__lineWidths[t]=e,e}_getWidthOfCharSpacing(){return this.charSpacing===0?0:this.fontSize*this.charSpacing/1e3}getValueOfPropertyAt(t,e,i){var s;return(s=this._getStyleDeclaration(t,e)[i])==null?this[i]:s}_renderTextDecoration(t,e){if(!this[e]&&!this.styleHas(e))return;let i=this._getTopOffset(),s=this._getLeftOffset(),n=this.path,a=this._getWidthOfCharSpacing(),o=e==="linethrough"?.5:+(e==="overline"),l=this.offsets[e];for(let h=0,c=this._textLines.length;h<c;h++){let u=this.getHeightOfLine(h);if(!this[e]&&!this.styleHas(e,h)){i+=u;continue}let d=this._textLines[h],g=u/this.lineHeight,f=this._getLineLeftOffset(h),p,y=0,b=0,x=this.getValueOfPropertyAt(h,0,e),C=this.getValueOfPropertyAt(h,0,at),S=this.getValueOfPropertyAt(h,0,"textDecorationColor")||C,w=this.getValueOfPropertyAt(h,0,Ye),k=x,T=S,O=w,M=i+g*(1-this._fontSizeFraction),D=this.getHeightOfChar(h,0),E=this.getValueOfPropertyAt(h,0,"deltaY");for(let B=0,q=d.length;B<q;B++){let $=this.__charBounds[h][B];k=this.getValueOfPropertyAt(h,B,e),p=this.getValueOfPropertyAt(h,B,at),T=this.getValueOfPropertyAt(h,B,"textDecorationColor")||p,O=this.getValueOfPropertyAt(h,B,Ye);let tt=this.getHeightOfChar(h,B),ht=this.getValueOfPropertyAt(h,B,"deltaY");if(n&&k&&p){let I=this.fontSize*O/1e3;t.save(),t.fillStyle=T,t.translate($.renderLeft,$.renderTop),t.rotate($.angle),t.fillRect(-$.kernedWidth/2,l*tt+ht-o*I,$.kernedWidth,I),t.restore()}else if((k!==x||p!==C||T!==S||tt!==D||O!==w||ht!==E)&&b>0){let I=this.fontSize*w/1e3,Ot=s+f+y;this.direction==="rtl"&&(Ot=this.width-Ot-b),x&&S&&w&&(t.fillStyle=S,t.fillRect(Ot,M+l*D+E-o*I,b,I)),y=$.left,b=$.width,x=k,S=T,w=O,C=p,D=tt,E=ht}else b+=$.kernedWidth}let A=s+f+y;this.direction==="rtl"&&(A=this.width-A-b),t.fillStyle=T;let j=this.fontSize*O/1e3;k&&T&&O&&t.fillRect(A,M+l*D+E-o*j,b-a,j),i+=u}this._removeShadow(t)}_getFontDeclaration({fontFamily:t=this.fontFamily,fontStyle:e=this.fontStyle,fontWeight:i=this.fontWeight,fontSize:s=this.fontSize}={},n){let a=t.includes("'")||t.includes('"')||t.includes(",")||xr.genericFonts.includes(t.toLowerCase())?t:`"${t}"`;return[e,i,`${n?this.CACHE_FONT_SIZE:s}px`,a].join(" ")}render(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._forceClearCache&&this.initDimensions(),super.render(t)))}graphemeSplit(t){return Yi(t)}_splitTextIntoLines(t){let e=t.split(this._reNewline),i=Array(e.length),s=[`
|
|
54
|
+
`],n=[];for(let a=0;a<e.length;a++)i[a]=this.graphemeSplit(e[a]),n=n.concat(i[a],s);return n.pop(),{_unwrappedLines:i,lines:e,graphemeText:n,graphemeLines:i}}toObject(t=[]){return{...super.toObject([...wo,...t]),styles:Ko(this.styles,this.text),...this.path?{path:this.path.toObject()}:{}}}set(t,e){let{textLayoutProperties:i}=this.constructor;super.set(t,e);let s=!1,n=!1;if(typeof t=="object")for(let a in t)a==="path"&&this.setPathInfo(),s=s||i.includes(a),n=n||a==="path";else s=i.includes(t),n=t==="path";return n&&this.setPathInfo(),s&&this.initialized&&(this.initDimensions(),this.setCoords()),this}complexity(){return 1}static async fromElement(t,e,i){let s=zt(t,xr.ATTRIBUTE_NAMES,i),{textAnchor:n=z,textDecoration:a="",dx:o=0,dy:l=0,top:h=0,left:c=0,fontSize:u=16,strokeWidth:d=1,...g}={...e,...s},f=new this(Ai(t.textContent||"").trim(),{left:c+o,top:h+l,underline:a.includes("underline"),overline:a.includes("overline"),linethrough:a.includes("line-through"),strokeWidth:0,fontSize:u,...g}),p=f.getScaledHeight()/f.height,y=((f.height+f.strokeWidth)*f.lineHeight-f.height)*p,b=f.getScaledHeight()+y,x=0;return n==="center"&&(x=f.getScaledWidth()/2),n==="right"&&(x=f.getScaledWidth()),f.set({left:f.left-x,top:f.top-(b-f.fontSize*(.07+f._fontSizeFraction))/f.lineHeight,strokeWidth:d}),f}static fromObject(t){return this._fromObject({...t,styles:Jo(t.styles||{},t.text)},{extraParam:"text"})}};m(Mt,"textLayoutProperties",Co),m(Mt,"cacheProperties",[...Wt,...wo]),m(Mt,"ownDefaults",Fh),m(Mt,"type","Text"),m(Mt,"genericFonts",["serif","sans-serif","monospace","cursive","fantasy","system-ui","ui-serif","ui-sans-serif","ui-monospace","ui-rounded","math","emoji","fangsong"]),m(Mt,"ATTRIBUTE_NAMES",ee.concat("x","y","dx","dy","font-family","font-style","font-weight","font-size","letter-spacing","text-decoration","text-decoration-thickness","text-decoration-color","text-anchor")),Go(Mt,[class extends vo{_toSVG(){let r=this._getSVGLeftTopOffsets(),t=this._getSVGTextAndBg(r.textTop,r.textLeft);return this._wrapSVGTextAndBg(t)}toSVG(r){let t=this._createBaseSVGMarkup(this._toSVG(),{reviver:r,noStyle:!0,withShadow:!0}),e=this.path;return e?t+e._createBaseSVGMarkup(e._toSVG(),{reviver:r,withShadow:!0,additionalTransform:Be(this.calcOwnMatrix())}):t}_getSVGLeftTopOffsets(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}}_wrapSVGTextAndBg({textBgRects:r,textSpans:t}){let e=this.getSvgTextDecoration(this);return[r.join(""),' <text xml:space="preserve" ',`font-family="${P(this.fontFamily.replace(Su,"'"))}" `,`font-size="${P(this.fontSize)}" `,this.fontStyle?`font-style="${P(this.fontStyle)}" `:"",this.fontWeight?`font-weight="${P(this.fontWeight)}" `:"",e?`text-decoration="${e}" `:"",this.direction==="rtl"?'direction="rtl" ':"",'style="',this.getSvgStyles(!0),'"',this.addPaintOrder()," >",t.join(""),`</text>
|
|
55
|
+
`]}_getSVGTextAndBg(r,t){let e=[],i=[],s,n=r;this.backgroundColor&&i.push(Ls(this.backgroundColor,-this.width/2,-this.height/2,this.width,this.height));for(let a=0,o=this._textLines.length;a<o;a++)s=this._getLineLeftOffset(a),this.direction==="rtl"&&(s+=this.width),(this.textBackgroundColor||this.styleHas("textBackgroundColor",a))&&this._setSVGTextLineBg(i,a,t+s,n),this._setSVGTextLineText(e,a,t+s,n),n+=this.getHeightOfLine(a);return{textSpans:e,textBgRects:i}}_createTextCharSpan(r,t,e,i,s){let n=L.NUM_FRACTION_DIGITS,a=this.getSvgSpanStyles(t,r!==r.trim()||!!r.match(wu)),o=a?`style="${a}"`:"",l=t.deltaY,h=l?` dy="${R(l,n)}" `:"",{angle:c,renderLeft:u,renderTop:d,width:g}=s,f="";if(u!==void 0){let p=g/2;c&&(f=` rotate="${R(Yt(c),n)}"`);let y=me({angle:Yt(c)});y[4]=u,y[5]=d;let b=new v(-p,0).transform(y);e=b.x,i=b.y}return`<tspan x="${R(e,n)}" y="${R(i,n)}" ${h}${f}${o}>${P(r)}</tspan>`}_setSVGTextLineText(r,t,e,i){let s=this.getHeightOfLine(t),n=this.textAlign.includes(Dn),a=this._textLines[t],o,l,h,c,u,d="",g=0;i+=s*(1-this._fontSizeFraction)/this.lineHeight;for(let f=0,p=a.length-1;f<=p;f++)u=f===p||this.charSpacing||this.path,d+=a[f],h=this.__charBounds[t][f],g===0?(e+=h.kernedWidth-h.width,g+=h.width):g+=h.kernedWidth,n&&!u&&this._reSpaceAndTab.test(a[f])&&(u=!0),u||(o=o||this.getCompleteStyleDeclaration(t,f),l=this.getCompleteStyleDeclaration(t,f+1),u=Ui(o,l,!0)),u&&(c=this._getStyleDeclaration(t,f),r.push(this._createTextCharSpan(d,c,e,i,h)),d="",o=l,this.direction==="rtl"?e-=g:e+=g,g=0)}_setSVGTextLineBg(r,t,e,i){let s=this._textLines[t],n=this.getHeightOfLine(t)/this.lineHeight,a,o=0,l=0,h=this.getValueOfPropertyAt(t,0,"textBackgroundColor");for(let c=0;c<s.length;c++){let{left:u,width:d,kernedWidth:g}=this.__charBounds[t][c];a=this.getValueOfPropertyAt(t,c,"textBackgroundColor"),a===h?o+=g:(h&&r.push(Ls(h,e+l,i,o,n)),l=u,o=d,h=a)}a&&r.push(Ls(h,e+l,i,o,n))}getSvgStyles(r){let t=zi(this.textDecorationColor)?` text-decoration-color: ${P(this[Vi])};`:"";return`${super.getSvgStyles(r)} text-decoration-thickness: ${R(this.textDecorationThickness*this.getObjectScaling().y/10,L.NUM_FRACTION_DIGITS)}%;${t} white-space: pre;`}getSvgSpanStyles(r,t){let{fontFamily:e,strokeWidth:i,stroke:s,fill:n,fontSize:a,fontStyle:o,fontWeight:l,textDecorationThickness:h,textDecorationColor:c,linethrough:u,overline:d,underline:g}=r,f=this.getSvgTextDecoration({underline:g??this.underline,overline:d??this.overline,linethrough:u??this.linethrough}),p=h||this.textDecorationThickness,y=c||this.textDecorationColor,b=le(i),x=he(e),C=le(a),S=he(o),w=le(l)||he(l),k=he(y);return[s?Hr(Dt,s):"",b?`stroke-width: ${P(b)}; `:"",x?`font-family: ${x.includes("'")||x.includes('"')?P(x):`'${P(x)}'`}; `:"",C?`font-size: ${P(C)}px; `:"",S?`font-style: ${P(S)}; `:"",w?`font-weight: ${P(w)}; `:"",f?`text-decoration: ${f}; text-decoration-thickness: ${R(p*this.getObjectScaling().y/10,L.NUM_FRACTION_DIGITS)}%;${k?` text-decoration-color: ${P(k)};`:""} `:"",n?Hr(at,n):"",t?"white-space: pre; ":""].join("")}getSvgTextDecoration(r){return["overline","underline","line-through"].filter(t=>r[t.replace("-","")]).join(" ")}}]),_.setClass(Mt),_.setSVGClass(Mt);var _u=class{constructor(r){m(this,"target",void 0),m(this,"__mouseDownInPlace",!1),m(this,"__dragStartFired",!1),m(this,"__isDraggingOver",!1),m(this,"__dragStartSelection",void 0),m(this,"__dragImageDisposer",void 0),m(this,"_dispose",void 0),this.target=r;let t=[this.target.on("dragenter",this.dragEnterHandler.bind(this)),this.target.on("dragover",this.dragOverHandler.bind(this)),this.target.on("dragleave",this.dragLeaveHandler.bind(this)),this.target.on("dragend",this.dragEndHandler.bind(this)),this.target.on("drop",this.dropHandler.bind(this))];this._dispose=()=>{t.forEach(e=>e()),this._dispose=void 0}}isPointerOverSelection(r){let t=this.target,e=t.getSelectionStartFromPointer(r);return t.isEditing&&e>=t.selectionStart&&e<=t.selectionEnd&&t.selectionStart<t.selectionEnd}start(r){return this.__mouseDownInPlace=this.isPointerOverSelection(r)}isActive(){return this.__mouseDownInPlace}end(r){let t=this.isActive();return t&&!this.__dragStartFired&&(this.target.setCursorByClick(r),this.target.initDelayedCursor(!0)),this.__mouseDownInPlace=!1,this.__dragStartFired=!1,this.__isDraggingOver=!1,t}getDragStartSelection(){return this.__dragStartSelection}setDragImage(r,{selectionStart:t,selectionEnd:e}){var i;let s=this.target,n=s.canvas,a=new v(s.flipX?-1:1,s.flipY?-1:1),o=s._getCursorBoundaries(t),l=new v(o.left+o.leftOffset,o.top+o.topOffset).multiply(a).transform(s.calcTransformMatrix()),h=n.getScenePoint(r).subtract(l),c=s.getCanvasRetinaScaling(),u=s.getBoundingRect(),d=l.subtract(new v(u.left,u.top)),g=n.viewportTransform,f=d.add(h).transform(g,!0),p=s.backgroundColor,y=Yn(s.styles);s.backgroundColor="";let b={stroke:"transparent",fill:"transparent",textBackgroundColor:"transparent"};s.setSelectionStyles(b,0,t),s.setSelectionStyles(b,e,s.text.length),s.dirty=!0;let x=s.toCanvasElement({enableRetinaScaling:n.enableRetinaScaling,viewportTransform:!0});s.backgroundColor=p,s.styles=y,s.dirty=!0,en(x,{position:"fixed",left:-x.width+"px",border:Ii,width:x.width/c+"px",height:x.height/c+"px"}),this.__dragImageDisposer&&this.__dragImageDisposer(),this.__dragImageDisposer=()=>{x.remove()},xt(r.target||this.target.hiddenTextarea).body.appendChild(x),(i=r.dataTransfer)==null||i.setDragImage(x,f.x,f.y)}onDragStart(r){this.__dragStartFired=!0;let t=this.target,e=this.isActive();if(e&&r.dataTransfer){let i=this.__dragStartSelection={selectionStart:t.selectionStart,selectionEnd:t.selectionEnd},s=t._text.slice(i.selectionStart,i.selectionEnd).join(""),n={text:t.text,value:s,...i};r.dataTransfer.setData("text/plain",s),r.dataTransfer.setData("application/fabric",JSON.stringify({value:s,styles:t.getSelectionStyles(i.selectionStart,i.selectionEnd,!0)})),r.dataTransfer.effectAllowed="copyMove",this.setDragImage(r,n)}return t.abortCursorAnimation(),e}canDrop(r){if(this.target.editable&&!this.target.getActiveControl()&&!r.defaultPrevented){if(this.isActive()&&this.__dragStartSelection){let t=this.target.getSelectionStartFromPointer(r),e=this.__dragStartSelection;return t<e.selectionStart||t>e.selectionEnd}return!0}return!1}targetCanDrop(r){return this.target.canDrop(r)}dragEnterHandler({e:r}){let t=this.targetCanDrop(r);!this.__isDraggingOver&&t&&(this.__isDraggingOver=!0)}dragOverHandler(r){let{e:t}=r,e=this.targetCanDrop(t);!this.__isDraggingOver&&e?this.__isDraggingOver=!0:this.__isDraggingOver&&!e&&(this.__isDraggingOver=!1),this.__isDraggingOver&&(t.preventDefault(),r.canDrop=!0,r.dropTarget=this.target)}dragLeaveHandler(){(this.__isDraggingOver||this.isActive())&&(this.__isDraggingOver=!1)}dropHandler(r){var t;let{e}=r,i=e.defaultPrevented;this.__isDraggingOver=!1,e.preventDefault();let s=(t=e.dataTransfer)==null?void 0:t.getData("text/plain");if(s&&!i){let n=this.target,a=n.canvas,o=n.getSelectionStartFromPointer(e),{styles:l}=e.dataTransfer.types.includes("application/fabric")?JSON.parse(e.dataTransfer.getData("application/fabric")):{},h=s[Math.max(0,s.length-1)];if(this.__dragStartSelection){let c=this.__dragStartSelection.selectionStart,u=this.__dragStartSelection.selectionEnd;o>c&&o<=u?o=c:o>u&&(o-=u-c),n.removeChars(c,u),delete this.__dragStartSelection}n._reNewline.test(h)&&(n._reNewline.test(n._text[o])||o===n._text.length)&&(s=s.trimEnd()),r.didDrop=!0,r.dropTarget=n,n.insertChars(s,l,o),a.setActiveObject(n),n.enterEditing(e),n.selectionStart=Math.min(o+0,n._text.length),n.selectionEnd=Math.min(n.selectionStart+s.length,n._text.length),n.hiddenTextarea.value=n.text,n._updateTextarea(),n.hiddenTextarea.focus(),n.fire(ki,{index:o+0,action:"drop"}),a.fire("text:changed",{target:n}),a.contextTopDirty=!0,a.requestRenderAll()}}dragEndHandler({e:r}){if(this.isActive()&&this.__dragStartFired&&this.__dragStartSelection){var t;let e=this.target,i=this.target.canvas,{selectionStart:s,selectionEnd:n}=this.__dragStartSelection,a=((t=r.dataTransfer)==null?void 0:t.dropEffect)||"none";a==="none"?(e.selectionStart=s,e.selectionEnd=n,e._updateTextarea(),e.hiddenTextarea.focus()):(e.clearContextTop(),a==="move"&&(e.removeChars(s,n),e.selectionStart=e.selectionEnd=s,e.hiddenTextarea&&(e.hiddenTextarea.value=e.text),e._updateTextarea(),e.fire(ki,{index:s,action:"dragend"}),i.fire("text:changed",{target:e}),i.requestRenderAll()),e.exitEditing())}this.__dragImageDisposer&&this.__dragImageDisposer(),delete this.__dragImageDisposer,delete this.__dragStartSelection,this.__isDraggingOver=!1}dispose(){this._dispose&&this._dispose()}},ja=/[ \n\.,;!\?\-]/,Tu=class extends Mt{constructor(...r){super(...r),m(this,"_currentCursorOpacity",1)}initBehavior(){this._tick=this._tick.bind(this),this._onTickComplete=this._onTickComplete.bind(this),this.updateSelectionOnMouseMove=this.updateSelectionOnMouseMove.bind(this)}onDeselect(r){return this.isEditing&&this.exitEditing(),this.selected=!1,super.onDeselect(r)}_animateCursor({toValue:r,duration:t,delay:e,onComplete:i}){return In({startValue:this._currentCursorOpacity,endValue:r,duration:t,delay:e,onComplete:i,abort:()=>!this.canvas||this.selectionStart!==this.selectionEnd,onChange:s=>{this._currentCursorOpacity=s,this.renderCursorOrSelection()}})}_tick(r){this._currentTickState=this._animateCursor({toValue:0,duration:this.cursorDuration/2,delay:Math.max(r||0,100),onComplete:this._onTickComplete})}_onTickComplete(){var r;(r=this._currentTickCompleteState)==null||r.abort(),this._currentTickCompleteState=this._animateCursor({toValue:1,duration:this.cursorDuration,onComplete:this._tick})}initDelayedCursor(r){this.abortCursorAnimation(),this._tick(r?0:this.cursorDelay)}abortCursorAnimation(){let r=!1;[this._currentTickState,this._currentTickCompleteState].forEach(t=>{t&&!t.isDone()&&(r=!0,t.abort())}),this._currentCursorOpacity=1,r&&this.clearContextTop()}restartCursorIfNeeded(){[this._currentTickState,this._currentTickCompleteState].some(r=>!r||r.isDone())&&this.initDelayedCursor()}selectAll(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this}cmdAll(){this.selectAll(),this.renderCursorOrSelection()}getSelectedText(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")}findWordBoundaryLeft(r){let t=0,e=r-1;if(this._reSpace.test(this._text[e]))for(;this._reSpace.test(this._text[e]);)t++,e--;for(;/\S/.test(this._text[e])&&e>-1;)t++,e--;return r-t}findWordBoundaryRight(r){let t=0,e=r;if(this._reSpace.test(this._text[e]))for(;this._reSpace.test(this._text[e]);)t++,e++;for(;/\S/.test(this._text[e])&&e<this._text.length;)t++,e++;return r+t}findLineBoundaryLeft(r){let t=0,e=r-1;for(;!/\n/.test(this._text[e])&&e>-1;)t++,e--;return r-t}findLineBoundaryRight(r){let t=0,e=r;for(;!/\n/.test(this._text[e])&&e<this._text.length;)t++,e++;return r+t}searchWordBoundary(r,t){let e=this._text,i=r>0&&this._reSpace.test(e[r])&&(t===-1||!pn.test(e[r-1]))?r-1:r,s=e[i];for(;i>0&&i<e.length&&!ja.test(s);)i+=t,s=e[i];return t===-1&&ja.test(s)&&i++,i}selectWord(r){var t;r=(t=r)==null?this.selectionStart:t;let e=this.searchWordBoundary(r,-1),i=Math.max(e,this.searchWordBoundary(r,1));this.selectionStart=e,this.selectionEnd=i,this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()}selectLine(r){var t;r=(t=r)==null?this.selectionStart:t;let e=this.findLineBoundaryLeft(r),i=this.findLineBoundaryRight(r);this.selectionStart=e,this.selectionEnd=i,this._fireSelectionChanged(),this._updateTextarea()}enterEditing(r){!this.isEditing&&this.editable&&(this.enterEditingImpl(),this.fire("editing:entered",r?{e:r}:void 0),this._fireSelectionChanged(),this.canvas&&(this.canvas.fire("text:editing:entered",{target:this,e:r}),this.canvas.requestRenderAll()))}enterEditingImpl(){this.canvas&&(this.canvas.calcOffset(),this.canvas.textEditingManager.exitTextEditing()),this.isEditing=!0,this.initHiddenTextarea(),this.hiddenTextarea.focus(),this.hiddenTextarea.value=this.text,this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._textBeforeEdit=this.text,this._tick()}updateSelectionOnMouseMove(r){if(this.getActiveControl())return;let t=this.hiddenTextarea;xt(t).activeElement!==t&&t.focus();let e=this.getSelectionStartFromPointer(r),i=this.selectionStart,s=this.selectionEnd;(e===this.__selectionStartOnMouseDown&&i!==s||i!==e&&s!==e)&&(e>this.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===i&&this.selectionEnd===s||(this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}_setEditingProps(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0}fromStringToGraphemeSelection(r,t,e){let i=e.slice(0,r),s=this.graphemeSplit(i).length;if(r===t)return{selectionStart:s,selectionEnd:s};let n=e.slice(r,t);return{selectionStart:s,selectionEnd:s+this.graphemeSplit(n).length}}fromGraphemeToStringSelection(r,t,e){let i=e.slice(0,r).join("").length;return r===t?{selectionStart:i,selectionEnd:i}:{selectionStart:i,selectionEnd:i+e.slice(r,t).join("").length}}_updateTextarea(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){let r=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=r.selectionStart,this.hiddenTextarea.selectionEnd=r.selectionEnd}this.updateTextareaPosition()}}updateFromTextArea(){let{hiddenTextarea:r,direction:t,textAlign:e,inCompositionMode:i}=this;if(!r)return;let s=e==="justify"?t==="ltr"?z:wt:e.replace("justify-",""),n=this.getPositionByOrigin(s,"top");this.cursorOffsetCache={},this.text=r.value,this.set("dirty",!0),this.initDimensions(),this.setPositionByOrigin(n,s,"top"),this.setCoords();let a=this.fromStringToGraphemeSelection(r.selectionStart,r.selectionEnd,r.value);this.selectionEnd=this.selectionStart=a.selectionEnd,i||(this.selectionStart=a.selectionStart),this.updateTextareaPosition()}updateTextareaPosition(){if(this.selectionStart===this.selectionEnd){let r=this._calcTextareaPosition();this.hiddenTextarea.style.left=r.left,this.hiddenTextarea.style.top=r.top}}_calcTextareaPosition(){if(!this.canvas)return{left:"1px",top:"1px"};let r=this.inCompositionMode?this.compositionStart:this.selectionStart,t=this._getCursorBoundaries(r),e=this.get2DCursorLocation(r),i=e.lineIndex,s=e.charIndex,n=this.getValueOfPropertyAt(i,s,"fontSize")*this.lineHeight,a=t.leftOffset,o=this.getCanvasRetinaScaling(),l=this.canvas.upperCanvasEl,h=l.width/o,c=l.height/o,u=h-n,d=c-n,g=new v(t.left+a,t.top+t.topOffset+n).transform(this.calcTransformMatrix()).transform(this.canvas.viewportTransform).multiply(new v(l.clientWidth/h,l.clientHeight/c));return g.x<0&&(g.x=0),g.x>u&&(g.x=u),g.y<0&&(g.y=0),g.y>d&&(g.y=d),g.x+=this.canvas._offset.left,g.y+=this.canvas._offset.top,{left:`${g.x}px`,top:`${g.y}px`,fontSize:`${n}px`,charHeight:n}}_saveEditingProps(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}}_restoreEditingProps(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor||this.canvas.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor||this.canvas.moveCursor),delete this._savedProps)}exitEditingImpl(){let r=this.hiddenTextarea;this.selected=!1,this.isEditing=!1,r&&(r.blur&&r.blur(),r.parentNode&&r.parentNode.removeChild(r)),this.hiddenTextarea=null,this.abortCursorAnimation(),this.selectionStart!==this.selectionEnd&&this.clearContextTop(),this.selectionEnd=this.selectionStart,this._restoreEditingProps(),this._forceClearCache&&(this.initDimensions(),this.setCoords())}exitEditing(){let r=this._textBeforeEdit!==this.text;return this.exitEditingImpl(),this.fire("editing:exited"),r&&this.fire("modified"),this.canvas&&(this.canvas.fire("text:editing:exited",{target:this}),r&&this.canvas.fire("object:modified",{target:this})),this}_removeExtraneousStyles(){for(let r in this.styles)this._textLines[r]||delete this.styles[r]}removeStyleFromTo(r,t){let{lineIndex:e,charIndex:i}=this.get2DCursorLocation(r,!0),{lineIndex:s,charIndex:n}=this.get2DCursorLocation(t,!0);if(e!==s){if(this.styles[e])for(let a=i;a<this._unwrappedTextLines[e].length;a++)delete this.styles[e][a];if(this.styles[s])for(let a=n;a<this._unwrappedTextLines[s].length;a++){let o=this.styles[s][a];o&&(this.styles[e]||(this.styles[e]={}),this.styles[e][i+a-n]=o)}for(let a=e+1;a<=s;a++)delete this.styles[a];this.shiftLineStyles(s,e-s)}else if(this.styles[e]){let a=this.styles[e],o=n-i;for(let l=i;l<n;l++)delete a[l];for(let l in this.styles[e]){let h=parseInt(l,10);h>=n&&(a[h-o]=a[l],delete a[l])}}}shiftLineStyles(r,t){let e=Object.assign({},this.styles);for(let i in this.styles){let s=parseInt(i,10);s>r&&(this.styles[s+t]=e[s],e[s-t]||delete this.styles[s])}}insertNewlineStyleObject(r,t,e,i){let s={},n=this._unwrappedTextLines[r].length,a=n===t,o=!1;e||(e=1),this.shiftLineStyles(r,e);let l=this.styles[r]?this.styles[r][t===0?t:t-1]:void 0;for(let c in this.styles[r]){let u=parseInt(c,10);u>=t&&(o=!0,s[u-t]=this.styles[r][c],a&&t===0||delete this.styles[r][c])}let h=!1;for(o&&!a&&(this.styles[r+e]=s,h=!0),(h||n>t)&&e--;e>0;)i&&i[e-1]?this.styles[r+e]={0:{...i[e-1]}}:l?this.styles[r+e]={0:{...l}}:delete this.styles[r+e],e--;this._forceClearCache=!0}insertCharStyleObject(r,t,e,i){this.styles||(this.styles={});let s=this.styles[r],n=s?{...s}:{};e||(e=1);for(let o in n){let l=parseInt(o,10);l>=t&&(s[l+e]=n[l],n[l-e]||delete s[l])}if(this._forceClearCache=!0,i){for(;e--;)Object.keys(i[e]).length&&(this.styles[r]||(this.styles[r]={}),this.styles[r][t+e]={...i[e]});return}if(!s)return;let a=s[t?t-1:1];for(;a&&e--;)this.styles[r][t+e]={...a}}insertNewStyleBlock(r,t,e){let i=this.get2DCursorLocation(t,!0),s=[0],n,a=0;for(let o=0;o<r.length;o++)r[o]===`
|
|
56
|
+
`?(a++,s[a]=0):s[a]++;for(s[0]>0&&(this.insertCharStyleObject(i.lineIndex,i.charIndex,s[0],e),e=e&&e.slice(s[0]+1)),a&&this.insertNewlineStyleObject(i.lineIndex,i.charIndex+s[0],a),n=1;n<a;n++)s[n]>0?this.insertCharStyleObject(i.lineIndex+n,0,s[n],e):e&&this.styles[i.lineIndex+n]&&e[0]&&(this.styles[i.lineIndex+n][0]=e[0]),e=e&&e.slice(s[n]+1);s[n]>0&&this.insertCharStyleObject(i.lineIndex+n,0,s[n],e)}removeChars(r,t=r+1){this.removeStyleFromTo(r,t),this._text.splice(r,t-r),this.text=this._text.join(""),this.set("dirty",!0),this.initDimensions(),this.setCoords(),this._removeExtraneousStyles()}insertChars(r,t,e,i=e){i>e&&this.removeStyleFromTo(e,i);let s=this.graphemeSplit(r);this.insertNewStyleBlock(s,e,t),this._text=[...this._text.slice(0,e),...s,...this._text.slice(i)],this.text=this._text.join(""),this.set("dirty",!0),this.initDimensions(),this.setCoords(),this._removeExtraneousStyles()}setSelectionStartEndWithShift(r,t,e){e<=r?(t===r?this._selectionDirection=z:this._selectionDirection==="right"&&(this._selectionDirection=z,this.selectionEnd=r),this.selectionStart=e):e>r&&e<t?this._selectionDirection==="right"?this.selectionEnd=e:this.selectionStart=e:(t===r?this._selectionDirection=wt:this._selectionDirection==="left"&&(this._selectionDirection=wt,this.selectionStart=t),this.selectionEnd=e)}},ku=class extends Tu{initHiddenTextarea(){let r=this.canvas&&xt(this.canvas.getElement())||$e(),t=r.createElement("textarea");Object.entries({autocapitalize:"off",autocorrect:"off",autocomplete:"off",spellcheck:"false","data-fabric":"textarea",wrap:"off",name:"fabricTextarea"}).map(([n,a])=>t.setAttribute(n,a));let{top:e,left:i,fontSize:s}=this._calcTextareaPosition();t.style.cssText=`position: absolute; top: ${e}; left: ${i}; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: ${s};`,(this.hiddenTextareaContainer||r.body).appendChild(t),Object.entries({blur:"blur",keydown:"onKeyDown",keyup:"onKeyUp",input:"onInput",copy:"copy",cut:"copy",paste:"paste",compositionstart:"onCompositionStart",compositionupdate:"onCompositionUpdate",compositionend:"onCompositionEnd"}).map(([n,a])=>t.addEventListener(n,this[a].bind(this))),this.hiddenTextarea=t}blur(){this.abortCursorAnimation()}onKeyDown(r){if(!this.isEditing)return;let t=this.direction==="rtl"?this.keysMapRtl:this.keysMap;if(r.keyCode in t)this[t[r.keyCode]](r);else{if(!(r.keyCode in this.ctrlKeysMapDown)||!r.ctrlKey&&!r.metaKey)return;this[this.ctrlKeysMapDown[r.keyCode]](r)}r.stopImmediatePropagation(),r.preventDefault(),r.keyCode>=33&&r.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}onKeyUp(r){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:r.keyCode in this.ctrlKeysMapUp&&(r.ctrlKey||r.metaKey)&&(this[this.ctrlKeysMapUp[r.keyCode]](r),r.stopImmediatePropagation(),r.preventDefault(),this.canvas&&this.canvas.requestRenderAll())}onInput(r){let t=this.fromPaste,{value:e,selectionStart:i,selectionEnd:s}=this.hiddenTextarea;if(this.fromPaste=!1,r&&r.stopPropagation(),!this.isEditing)return;let n=()=>{this.updateFromTextArea(),this.fire(ki),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())};if(this.hiddenTextarea.value==="")return this.styles={},void n();let a=this._splitTextIntoLines(e).graphemeText,o=this._text.length,l=a.length,h=this.selectionStart,c=this.selectionEnd,u=h!==c,d,g,f,p,y=l-o,b=this.fromStringToGraphemeSelection(i,s,e),x=h>b.selectionStart;u?(g=this._text.slice(h,c),y+=c-h):l<o&&(g=x?this._text.slice(c+y,c):this._text.slice(h,h-y));let C=a.slice(b.selectionEnd-y,b.selectionEnd);if(g&&g.length&&(C.length&&(d=this.getSelectionStyles(h,h+1,!1),d=C.map(()=>d[0])),u?(f=h,p=c):x?(f=c-g.length,p=c):(f=c,p=c+g.length),this.removeStyleFromTo(f,p)),C.length){let{copyPasteData:S}=At();t&&C.join("")===S.copiedText&&!L.disableStyleCopyPaste&&(d=S.copiedTextStyle),this.insertNewStyleBlock(C,h,d)}n()}onCompositionStart(){this.inCompositionMode=!0}onCompositionEnd(){this.inCompositionMode=!1}onCompositionUpdate({target:r}){let{selectionStart:t,selectionEnd:e}=r;this.compositionStart=t,this.compositionEnd=e,this.updateTextareaPosition()}copy(){if(this.selectionStart===this.selectionEnd)return;let{copyPasteData:r}=At();r.copiedText=this.getSelectedText(),L.disableStyleCopyPaste?r.copiedTextStyle=void 0:r.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0}paste(){this.fromPaste=!0}_getWidthBeforeCursor(r,t){let e,i=this._getLineLeftOffset(r);return t>0&&(e=this.__charBounds[r][t-1],i+=e.left+e.width),i}getDownCursorOffset(r,t){let e=this._getSelectionForOffset(r,t),i=this.get2DCursorLocation(e),s=i.lineIndex;if(s===this._textLines.length-1||r.metaKey||r.keyCode===34)return this._text.length-e;let n=i.charIndex,a=this._getWidthBeforeCursor(s,n),o=this._getIndexOnLine(s+1,a);return this._textLines[s].slice(n).length+o+1+this.missingNewlineOffset(s)}_getSelectionForOffset(r,t){return r.shiftKey&&this.selectionStart!==this.selectionEnd&&t?this.selectionEnd:this.selectionStart}getUpCursorOffset(r,t){let e=this._getSelectionForOffset(r,t),i=this.get2DCursorLocation(e),s=i.lineIndex;if(s===0||r.metaKey||r.keyCode===33)return-e;let n=i.charIndex,a=this._getWidthBeforeCursor(s,n),o=this._getIndexOnLine(s-1,a),l=this._textLines[s].slice(0,n),h=this.missingNewlineOffset(s-1);return-this._textLines[s-1].length+o-l.length+(1-h)}_getIndexOnLine(r,t){let e=this._textLines[r],i,s,n=this._getLineLeftOffset(r),a=0;for(let o=0,l=e.length;o<l;o++)if(i=this.__charBounds[r][o].width,n+=i,n>t){s=!0;let h=n-i,c=n,u=Math.abs(h-t);a=Math.abs(c-t)<u?o:o-1;break}return s||(a=e.length-1),a}moveCursorDown(r){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",r)}moveCursorUp(r){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorUpOrDown("Up",r)}_moveCursorUpOrDown(r,t){let e=this[`get${r}CursorOffset`](t,this._selectionDirection===wt);if(t.shiftKey?this.moveCursorWithShift(e):this.moveCursorWithoutShift(e),e!==0){let i=this.text.length;this.selectionStart=pe(0,this.selectionStart,i),this.selectionEnd=pe(0,this.selectionEnd,i),this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea()}}moveCursorWithShift(r){let t=this._selectionDirection==="left"?this.selectionStart+r:this.selectionEnd+r;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,t),r!==0}moveCursorWithoutShift(r){return r<0?(this.selectionStart+=r,this.selectionEnd=this.selectionStart):(this.selectionEnd+=r,this.selectionStart=this.selectionEnd),r!==0}moveCursorLeft(r){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorLeftOrRight("Left",r)}_move(r,t,e){let i;if(r.altKey)i=this[`findWordBoundary${e}`](this[t]);else{if(!r.metaKey&&r.keyCode!==35&&r.keyCode!==36)return this[t]+=e==="Left"?-1:1,!0;i=this[`findLineBoundary${e}`](this[t])}return i!==void 0&&this[t]!==i&&(this[t]=i,!0)}_moveLeft(r,t){return this._move(r,t,"Left")}_moveRight(r,t){return this._move(r,t,"Right")}moveCursorLeftWithoutShift(r){let t=!0;return this._selectionDirection=z,this.selectionEnd===this.selectionStart&&this.selectionStart!==0&&(t=this._moveLeft(r,"selectionStart")),this.selectionEnd=this.selectionStart,t}moveCursorLeftWithShift(r){return this._selectionDirection==="right"&&this.selectionStart!==this.selectionEnd?this._moveLeft(r,"selectionEnd"):this.selectionStart===0?void 0:(this._selectionDirection=z,this._moveLeft(r,"selectionStart"))}moveCursorRight(r){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",r)}_moveCursorLeftOrRight(r,t){let e=`moveCursor${r}${t.shiftKey?"WithShift":"WithoutShift"}`;this._currentCursorOpacity=1,this[e](t)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())}moveCursorRightWithShift(r){return this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(r,"selectionStart"):this.selectionEnd===this._text.length?void 0:(this._selectionDirection=wt,this._moveRight(r,"selectionEnd"))}moveCursorRightWithoutShift(r){let t=!0;return this._selectionDirection=wt,this.selectionStart===this.selectionEnd?(t=this._moveRight(r,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,t}},La=r=>!!r.button,Ou=class extends ku{constructor(...r){super(...r),m(this,"draggableTextDelegate",void 0)}initBehavior(){this.on("mousedown",this._mouseDownHandler),this.on("mouseup",this.mouseUpHandler),this.on("mousedblclick",this.doubleClickHandler),this.on("mousetripleclick",this.tripleClickHandler),this.draggableTextDelegate=new _u(this),super.initBehavior()}shouldStartDragging(){return this.draggableTextDelegate.isActive()}onDragStart(r){return this.draggableTextDelegate.onDragStart(r)}canDrop(r){return this.draggableTextDelegate.canDrop(r)}doubleClickHandler(r){this.isEditing&&(this.selectWord(this.getSelectionStartFromPointer(r.e)),this.renderCursorOrSelection())}tripleClickHandler(r){this.isEditing&&(this.selectLine(this.getSelectionStartFromPointer(r.e)),this.renderCursorOrSelection())}_mouseDownHandler({e:r,alreadySelected:t}){this.canvas&&this.editable&&!La(r)&&!this.getActiveControl()&&(this.draggableTextDelegate.start(r)||(this.canvas.textEditingManager.register(this),t&&(this.inCompositionMode=!1,this.setCursorByClick(r)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()),this.selected||(this.selected=t||this.isEditing)))}mouseUpHandler({e:r,transform:t}){let e=this.draggableTextDelegate.end(r);if(this.canvas){this.canvas.textEditingManager.unregister(this);let i=this.canvas._activeObject;if(i&&i!==this)return}!this.editable||this.group&&!this.group.interactive||t&&t.actionPerformed||La(r)||e||this.selected&&!this.getActiveControl()&&(this.enterEditing(r),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection())}setCursorByClick(r){let t=this.getSelectionStartFromPointer(r),e=this.selectionStart,i=this.selectionEnd;r.shiftKey?this.setSelectionStartEndWithShift(e,i,t):(this.selectionStart=t,this.selectionEnd=t),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())}getSelectionStartFromPointer(r){let t=this.canvas.getScenePoint(r).transform(lt(this.calcTransformMatrix())).add(new v(-this._getLeftOffset(),-this._getTopOffset())),e=0,i=0,s=0;for(let l=0;l<this._textLines.length&&e<=t.y;l++)e+=this.getHeightOfLine(l),s=l,l>0&&(i+=this._textLines[l-1].length+this.missingNewlineOffset(l-1));let n=Math.abs(this._getLineLeftOffset(s)),a=this._textLines[s].length,o=this.__charBounds[s];for(let l=0;l<a;l++){let h=n+o[l].kernedWidth;if(t.x<=h){Math.abs(t.x-h)<=Math.abs(t.x-n)&&i++;break}n=h,i++}return Math.min(this.flipX?a-i:i,this._text.length)}},fi="moveCursorUp",pi="moveCursorDown",mi="moveCursorLeft",yi="moveCursorRight",vi="exitEditing",Fa=(r,t)=>{let e=t.getRetinaScaling();r.setTransform(e,0,0,e,0,0);let i=t.viewportTransform;r.transform(i[0],i[1],i[2],i[3],i[4],i[5])},Mu={selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,keysMap:{9:vi,27:vi,33:fi,34:pi,35:yi,36:mi,37:mi,38:fi,39:yi,40:pi},keysMapRtl:{9:vi,27:vi,33:fi,34:pi,35:mi,36:yi,37:yi,38:fi,39:mi,40:pi},ctrlKeysMapDown:{65:"cmdAll"},ctrlKeysMapUp:{67:"copy",88:"cut"},_selectionDirection:null,_reSpace:/\s|\r?\n/,inCompositionMode:!1},Le=class hn extends Ou{static getDefaults(){return{...super.getDefaults(),...hn.ownDefaults}}get type(){let t=super.type;return t==="itext"?"i-text":t}constructor(t,e){super(t,{...hn.ownDefaults,...e}),this.initBehavior()}_set(t,e){return this.isEditing&&this._savedProps&&t in this._savedProps?(this._savedProps[t]=e,this):(t==="canvas"&&(this.canvas instanceof Li&&this.canvas.textEditingManager.remove(this),e instanceof Li&&e.textEditingManager.add(this)),super._set(t,e))}setSelectionStart(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)}setSelectionEnd(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)}_updateAndFire(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()}_fireSelectionChanged(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})}initDimensions(){this.isEditing&&this.initDelayedCursor(),super.initDimensions()}getSelectionStyles(t=this.selectionStart||0,e=this.selectionEnd,i){return super.getSelectionStyles(t,e,i)}setSelectionStyles(t,e=this.selectionStart||0,i=this.selectionEnd){return super.setSelectionStyles(t,e,i)}get2DCursorLocation(t=this.selectionStart,e){return super.get2DCursorLocation(t,e)}render(t){super.render(t),this.cursorOffsetCache={},this.renderCursorOrSelection()}toCanvasElement(t){let e=this.isEditing;this.isEditing=!1;let i=super.toCanvasElement(t);return this.isEditing=e,i}renderCursorOrSelection(){if(!this.isEditing||!this.canvas)return;let t=this.clearContextTop(!0);if(!t)return;let e=this._getCursorBoundaries(),i=this.findAncestorsWithClipPath(),s=i.length>0,n,a=t;if(s){n=gt(t.canvas),a=n.getContext("2d"),Fa(a,this.canvas);let o=this.calcTransformMatrix();a.transform(o[0],o[1],o[2],o[3],o[4],o[5])}if(this.selectionStart!==this.selectionEnd||this.inCompositionMode?this.renderSelection(a,e):this.renderCursor(a,e),s)for(let o of i){let l=o.clipPath,h=gt(t.canvas),c=h.getContext("2d");if(Fa(c,this.canvas),!l.absolutePositioned){let u=o.calcTransformMatrix();c.transform(u[0],u[1],u[2],u[3],u[4],u[5])}l.transform(c),l.drawObject(c,!0,{}),this.drawClipPathOnCache(a,l,h)}s&&(t.setTransform(1,0,0,1,0,0),t.drawImage(n,0,0)),this.canvas.contextTopDirty=!0,t.restore()}findAncestorsWithClipPath(){let t=[],e=this;for(;e;)e.clipPath&&t.push(e),e=e.parent;return t}_getCursorBoundaries(t=this.selectionStart,e){let i=this._getLeftOffset(),s=this._getTopOffset(),n=this._getCursorBoundariesOffsets(t,e);return{left:i,top:s,leftOffset:n.left,topOffset:n.top}}_getCursorBoundariesOffsets(t,e){return e?this.__getCursorBoundariesOffsets(t):this.cursorOffsetCache&&"top"in this.cursorOffsetCache?this.cursorOffsetCache:this.cursorOffsetCache=this.__getCursorBoundariesOffsets(t)}__getCursorBoundariesOffsets(t){let e=0,i=0,{charIndex:s,lineIndex:n}=this.get2DCursorLocation(t),{textAlign:a,direction:o}=this;for(let u=0;u<n;u++)e+=this.getHeightOfLine(u);let l=this._getLineLeftOffset(n),h=this.__charBounds[n][s];h&&(i=h.left),this.charSpacing!==0&&s===this._textLines[n].length&&(i-=this._getWidthOfCharSpacing());let c=l+(i>0?i:0);return o==="rtl"&&(a==="right"||a==="justify"||a==="justify-right"?c*=-1:a==="left"||a==="justify-left"?c=l-(i>0?i:0):a!=="center"&&a!=="justify-center"||(c=l-(i>0?i:0))),{top:e,left:c}}renderCursorAt(t){this._renderCursor(this.canvas.contextTop,this._getCursorBoundaries(t,!0),t)}renderCursor(t,e){this._renderCursor(t,e,this.selectionStart)}getCursorRenderingData(t=this.selectionStart,e=this._getCursorBoundaries(t)){let i=this.get2DCursorLocation(t),s=i.lineIndex,n=i.charIndex>0?i.charIndex-1:0,a=this.getValueOfPropertyAt(s,n,"fontSize"),o=this.getObjectScaling().x*this.canvas.getZoom(),l=this.cursorWidth/o,h=this.getValueOfPropertyAt(s,n,"deltaY"),c=e.topOffset+(1-this._fontSizeFraction)*this.getHeightOfLine(s)/this.lineHeight-a*(1-this._fontSizeFraction);return{color:this.cursorColor||this.getValueOfPropertyAt(s,n,"fill"),opacity:this._currentCursorOpacity,left:e.left+e.leftOffset-l/2,top:c+e.top+h,width:l,height:a}}_renderCursor(t,e,i){let{color:s,opacity:n,left:a,top:o,width:l,height:h}=this.getCursorRenderingData(i,e);t.fillStyle=s,t.globalAlpha=n,t.fillRect(a,o,l,h)}renderSelection(t,e){let i={selectionStart:this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,selectionEnd:this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd};this._renderSelection(t,i,e)}renderDragSourceEffect(){let t=this.draggableTextDelegate.getDragStartSelection();this._renderSelection(this.canvas.contextTop,t,this._getCursorBoundaries(t.selectionStart,!0))}renderDropTargetEffect(t){let e=this.getSelectionStartFromPointer(t);this.renderCursorAt(e)}_renderSelection(t,e,i){let{textAlign:s,direction:n}=this,a=e.selectionStart,o=e.selectionEnd,l=s.includes(Dn),h=this.get2DCursorLocation(a),c=this.get2DCursorLocation(o),u=h.lineIndex,d=c.lineIndex,g=h.charIndex<0?0:h.charIndex,f=c.charIndex<0?0:c.charIndex;for(let p=u;p<=d;p++){let y=this._getLineLeftOffset(p)||0,b=this.getHeightOfLine(p),x=0,C=0;if(p===u&&(x=this.__charBounds[u][g].left),p>=u&&p<d)C=l&&!this.isEndOfWrapping(p)?this.width:this.getLineWidth(p)||5;else if(p===d)if(f===0)C=this.__charBounds[d][f].left;else{let M=this._getWidthOfCharSpacing();C=this.__charBounds[d][f-1].left+this.__charBounds[d][f-1].width-M}let S=b;(this.lineHeight<1||p===d&&this.lineHeight>1)&&(b/=this.lineHeight);let w=i.left+y+x,k=b,T=0,O=C-x;this.inCompositionMode?(t.fillStyle=this.compositionColor||"black",k=1,T=b):t.fillStyle=this.selectionColor,n==="rtl"&&(s==="right"||s==="justify"||s==="justify-right"?w=this.width-w-O:s==="left"||s==="justify-left"?w=i.left+y-C:s!=="center"&&s!=="justify-center"||(w=i.left+y-C)),t.fillRect(w,i.top+i.topOffset+T,O,k),i.topOffset+=S}}getCurrentCharFontSize(){let t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fontSize")}getCurrentCharColor(){let t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,at)}_getCurrentCharIndex(){let t=this.get2DCursorLocation(this.selectionStart,!0),e=t.charIndex>0?t.charIndex-1:0;return{l:t.lineIndex,c:e}}dispose(){this.exitEditingImpl(),this.draggableTextDelegate.dispose(),super.dispose()}};m(Le,"ownDefaults",Mu),m(Le,"type","IText"),_.setClass(Le),_.setClass(Le,"i-text");var Bt=class cn extends Le{static getDefaults(){return{...super.getDefaults(),...cn.ownDefaults}}constructor(t,e){super(t,{...cn.ownDefaults,...e})}static createControls(){return{controls:Ho()}}initDimensions(){this.initialized&&(this.isEditing&&this.initDelayedCursor(),this._clearCache(),this.dynamicMinWidth=0,this._styleMap=this._generateStyleMap(this._splitText()),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this.textAlign.includes("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight())}_generateStyleMap(t){let e=0,i=0,s=0,n={};for(let a=0;a<t.graphemeLines.length;a++)t.graphemeText[s]===`
|
|
57
|
+
`&&a>0?(i=0,s++,e++):!this.splitByGrapheme&&this._reSpaceAndTab.test(t.graphemeText[s])&&a>0&&(i++,s++),n[a]={line:e,offset:i},s+=t.graphemeLines[a].length,i+=t.graphemeLines[a].length;return n}styleHas(t,e){if(this._styleMap&&!this.isWrapping){let i=this._styleMap[e];i&&(e=i.line)}return super.styleHas(t,e)}isEmptyStyles(t){if(!this.styles)return!0;let e,i,s=0,n=!1,a=this._styleMap[t],o=this._styleMap[t+1];a&&(t=a.line,s=a.offset),o&&(e=o.line,n=e===t,i=o.offset);let l=t===void 0?this.styles:{line:this.styles[t]};for(let h in l)for(let c in l[h]){let u=parseInt(c,10);if(u>=s&&(!n||u<i))for(let d in l[h][c])return!1}return!0}_getStyleDeclaration(t,e){if(this._styleMap&&!this.isWrapping){let i=this._styleMap[t];if(!i)return{};t=i.line,e=i.offset+e}return super._getStyleDeclaration(t,e)}_setStyleDeclaration(t,e,i){let s=this._styleMap[t];super._setStyleDeclaration(s.line,s.offset+e,i)}_deleteStyleDeclaration(t,e){let i=this._styleMap[t];super._deleteStyleDeclaration(i.line,i.offset+e)}_getLineStyle(t){let e=this._styleMap[t];return!!this.styles[e.line]}_setLineStyle(t){let e=this._styleMap[t];super._setLineStyle(e.line)}_wrapText(t,e){this.isWrapping=!0;let i=this.getGraphemeDataForRender(t),s=[];for(let n=0;n<i.wordsData.length;n++)s.push(...this._wrapLine(n,e,i));return this.isWrapping=!1,s}getGraphemeDataForRender(t){let e=this.splitByGrapheme,i=e?"":" ",s=0;return{wordsData:t.map((n,a)=>{let o=0,l=e?this.graphemeSplit(n):this.wordSplit(n);return l.length===0?[{word:[],width:0}]:l.map(h=>{let c=e?[h]:this.graphemeSplit(h),u=this._measureWord(c,a,o);return s=Math.max(u,s),o+=c.length+i.length,{word:c,width:u}})}),largestWordWidth:s}}_measureWord(t,e,i=0){let s,n=0;for(let a=0,o=t.length;a<o;a++)n+=this._getGraphemeBox(t[a],e,a+i,s,!0).kernedWidth,s=t[a];return n}wordSplit(t){return t.split(this._wordJoiners)}_wrapLine(t,e,{largestWordWidth:i,wordsData:s},n=0){let a=this._getWidthOfCharSpacing(),o=this.splitByGrapheme,l=[],h=o?"":" ",c=0,u=[],d=0,g=0,f=!0;e-=n;let p=Math.max(e,i,this.dynamicMinWidth),y=s[t],b;for(b=0;b<y.length;b++){let{word:x,width:C}=y[b];d+=x.length,c+=g+C-a,c>p&&!f?(l.push(u),u=[],c=C,f=!0):c+=a,f||o||u.push(h),u=u.concat(x),g=o?0:this._measureWord([h],t,d),d++,f=!1}return b&&l.push(u),i+n>this.dynamicMinWidth&&(this.dynamicMinWidth=i-a+n),l}isEndOfWrapping(t){return!this._styleMap[t+1]||this._styleMap[t+1].line!==this._styleMap[t].line}missingNewlineOffset(t,e){return this.splitByGrapheme&&!e?+!!this.isEndOfWrapping(t):1}_splitTextIntoLines(t){let e=super._splitTextIntoLines(t),i=this._wrapText(e.lines,this.width),s=Array(i.length);for(let n=0;n<i.length;n++)s[n]=i[n].join("");return e.lines=s,e.graphemeLines=i,e}getMinWidth(){return Math.max(this.minWidth,this.dynamicMinWidth)}_removeExtraneousStyles(){let t=new Map;for(let e in this._styleMap){let i=parseInt(e,10);if(this._textLines[i]){let s=this._styleMap[e].line;t.set(`${s}`,!0)}}for(let e in this.styles)t.has(e)||delete this.styles[e]}toObject(t=[]){return super.toObject(["minWidth","splitByGrapheme",...t])}};m(Bt,"type","Textbox"),m(Bt,"textLayoutProperties",[...Le.textLayoutProperties,"width"]),m(Bt,"ownDefaults",{minWidth:20,dynamicMinWidth:2,lockScalingFlip:!0,noScaleCache:!1,_wordJoiners:/[ \t\r]/,splitByGrapheme:!1}),_.setClass(Bt);var Ia=class extends qi{shouldPerformLayout(r){return!!r.target.clipPath&&super.shouldPerformLayout(r)}shouldLayoutClipPath(){return!1}calcLayoutResult(r,t){let{target:e}=r,{clipPath:i,group:s}=e;if(!i||!this.shouldPerformLayout(r))return;let{width:n,height:a}=Et(Qo(e,i)),o=new v(n,a);if(i.absolutePositioned)return{center:$t(i.getRelativeCenterPoint(),void 0,s?s.calcTransformMatrix():void 0),size:o};{let l=i.getRelativeCenterPoint().transform(e.calcOwnMatrix(),!0);if(this.shouldPerformLayout(r)){let{center:h=new v,correction:c=new v}=this.calcBoundingBox(t,r)||{};return{center:h.add(l),correction:c.subtract(l),size:o}}return{center:e.getRelativeCenterPoint().add(l),size:o}}}};m(Ia,"type","clip-path"),_.setClass(Ia);var Ra=class extends qi{getInitialSize({target:r},{size:t}){return new v(r.width||t.x,r.height||t.y)}};m(Ra,"type","fixed"),_.setClass(Ra);var Pu=class extends zr{subscribeTargets(r){let t=r.target;r.targets.reduce((e,i)=>(i.parent&&e.add(i.parent),e),new Set).forEach(e=>{e.layoutManager.subscribeTargets({target:e,targets:[t]})})}unsubscribeTargets(r){let t=r.target,e=t.getObjects();r.targets.reduce((i,s)=>(s.parent&&i.add(s.parent),i),new Set).forEach(i=>{!e.some(s=>s.parent===i)&&i.layoutManager.unsubscribeTargets({target:i,targets:[t]})})}},Fe=class un extends U{static getDefaults(){return{...super.getDefaults(),...un.ownDefaults}}constructor(t=[],e={}){super(),Object.assign(this,un.ownDefaults),this.setOptions(e);let{left:i,top:s,layoutManager:n}=e;this.groupInit(t,{left:i,top:s,layoutManager:n??new Pu})}_shouldSetNestedCoords(){return!0}__objectSelectionMonitor(){}multiSelectAdd(...t){this.multiSelectionStacking==="selection-order"?this.add(...t):t.forEach(e=>{let i=this._objects.findIndex(n=>n.isInFrontOf(e)),s=i===-1?this.size():i;this.insertAt(s,e)})}canEnterGroup(t){return this.getObjects().some(e=>e.isDescendantOf(t)||t.isDescendantOf(e))?(Xt("error","ActiveSelection: circular object trees are not supported, this call has no effect"),!1):super.canEnterGroup(t)}enterGroup(t,e){t.parent&&t.parent===t.group?t.parent._exitGroup(t):t.group&&t.parent!==t.group&&t.group.remove(t),this._enterGroup(t,e)}exitGroup(t,e){this._exitGroup(t,e),t.parent&&t.parent._enterGroup(t,!0)}_onAfterObjectsChange(t,e){super._onAfterObjectsChange(t,e);let i=new Set;e.forEach(s=>{let{parent:n}=s;n&&i.add(n)}),t==="removed"?i.forEach(s=>{s._onAfterObjectsChange(Ks,e)}):i.forEach(s=>{s._set("dirty",!0)})}onDeselect(){return this.removeAll(),!1}toString(){return`#<ActiveSelection: (${this.complexity()})>`}shouldCache(){return!1}isOnACache(){return!1}_renderControls(t,e,i){t.save(),t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1;let s={hasControls:!1,...i,forActiveSelection:!0};for(let n=0;n<this._objects.length;n++)this._objects[n]._renderControls(t,s);super._renderControls(t,e),t.restore()}};m(Fe,"type","ActiveSelection"),m(Fe,"ownDefaults",{multiSelectionStacking:"canvas-stacking"}),_.setClass(Fe),_.setClass(Fe,"activeSelection");var Eu=class{constructor(){m(this,"resources",{})}applyFilters(r,t,e,i,s){let n=s.getContext("2d",{willReadFrequently:!0,desynchronized:!0});if(!n)return;n.drawImage(t,0,0,e,i);let a={sourceWidth:e,sourceHeight:i,imageData:n.getImageData(0,0,e,i),originalEl:t,originalImageData:n.getImageData(0,0,e,i),canvasEl:s,ctx:n,filterBackend:this};r.forEach(l=>{l.applyTo(a)});let{imageData:o}=a;return o.width===e&&o.height===i||(s.width=o.width,s.height=o.height),n.putImageData(o,0,0),a}},Al=class{constructor({tileSize:r=L.textureSize}={}){m(this,"aPosition",new Float32Array([0,0,0,1,1,0,1,1])),m(this,"resources",{}),this.tileSize=r,this.setupGLContext(r,r),this.captureGPUInfo()}setupGLContext(r,t){this.dispose(),this.createWebGLCanvas(r,t)}createWebGLCanvas(r,t){let e=gt({width:r,height:t}),i=e.getContext("webgl",{alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1});i&&(i.clearColor(0,0,0,0),this.canvas=e,this.gl=i)}applyFilters(r,t,e,i,s,n){let a=this.gl,o=s.getContext("2d");if(!a||!o)return;let l;n&&(l=this.getCachedTexture(n,t));let h={originalWidth:t.width||t.naturalWidth||0,originalHeight:t.height||t.naturalHeight||0,sourceWidth:e,sourceHeight:i,destinationWidth:e,destinationHeight:i,context:a,sourceTexture:this.createTexture(a,e,i,l?void 0:t),targetTexture:this.createTexture(a,e,i),originalTexture:l||this.createTexture(a,e,i,l?void 0:t),passes:r.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:s},c=a.createFramebuffer();return a.bindFramebuffer(a.FRAMEBUFFER,c),r.forEach(u=>{u&&u.applyTo(h)}),(function(u){let d=u.targetCanvas,g=d.width,f=d.height,p=u.destinationWidth,y=u.destinationHeight;g===p&&f===y||(d.width=p,d.height=y)})(h),this.copyGLTo2D(a,h),a.bindTexture(a.TEXTURE_2D,null),a.deleteTexture(h.sourceTexture),a.deleteTexture(h.targetTexture),a.deleteFramebuffer(c),o.setTransform(1,0,0,1,0,0),h}dispose(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()}clearWebGLCaches(){this.programCache={},this.textureCache={}}createTexture(r,t,e,i,s){let{NEAREST:n,TEXTURE_2D:a,RGBA:o,UNSIGNED_BYTE:l,CLAMP_TO_EDGE:h,TEXTURE_MAG_FILTER:c,TEXTURE_MIN_FILTER:u,TEXTURE_WRAP_S:d,TEXTURE_WRAP_T:g}=r,f=r.createTexture();return r.bindTexture(a,f),r.texParameteri(a,c,s||n),r.texParameteri(a,u,s||n),r.texParameteri(a,d,h),r.texParameteri(a,g,h),i?r.texImage2D(a,0,o,o,l,i):r.texImage2D(a,0,o,t,e,0,o,l,null),f}getCachedTexture(r,t,e){let{textureCache:i}=this;if(i[r])return i[r];{let s=this.createTexture(this.gl,t.width,t.height,t,e);return s&&(i[r]=s),s}}evictCachesForKey(r){this.textureCache[r]&&(this.gl.deleteTexture(this.textureCache[r]),delete this.textureCache[r])}copyGLTo2D(r,t){let e=r.canvas,i=t.targetCanvas,s=i.getContext("2d");if(!s)return;s.translate(0,i.height),s.scale(1,-1);let n=e.height-i.height;s.drawImage(e,0,n,i.width,i.height,0,0,i.width,i.height)}copyGLTo2DPutImageData(r,t){let e=t.targetCanvas.getContext("2d"),i=t.destinationWidth,s=t.destinationHeight,n=i*s*4;if(!e)return;let a=new Uint8Array(this.imageBuffer,0,n),o=new Uint8ClampedArray(this.imageBuffer,0,n);r.readPixels(0,0,i,s,r.RGBA,r.UNSIGNED_BYTE,a);let l=new ImageData(o,i,s);e.putImageData(l,0,0)}captureGPUInfo(){if(this.gpuInfo)return this.gpuInfo;let r=this.gl,t={renderer:"",vendor:""};if(!r)return t;let e=r.getExtension("WEBGL_debug_renderer_info");if(e){let i=r.getParameter(e.UNMASKED_RENDERER_WEBGL),s=r.getParameter(e.UNMASKED_VENDOR_WEBGL);i&&(t.renderer=i.toLowerCase()),s&&(t.vendor=s.toLowerCase())}return this.gpuInfo=t,t}},Is;function Au(){let{WebGLProbe:r}=At();return r.queryWebGL(jt()),L.enableGLFiltering&&r.isSupported(L.textureSize)?new Al({tileSize:L.textureSize}):new Eu}function Rs(r=!0){return!Is&&r&&(Is=Au()),Is}var Dl=["cropX","cropY"],N=class dn extends G{static getDefaults(){return{...super.getDefaults(),...dn.ownDefaults}}constructor(t,e){super(),m(this,"_lastScaleX",1),m(this,"_lastScaleY",1),m(this,"_filterScalingX",1),m(this,"_filterScalingY",1),this.filters=[],Object.assign(this,dn.ownDefaults),this.setOptions(e),this.cacheKey=`texture${Kt()}`,this.setElement(typeof t=="string"?(this.canvas&&xt(this.canvas.getElement())||$e()).getElementById(t):t,e)}getElement(){return this._element}setElement(t,e={}){this.removeTexture(this.cacheKey),this.removeTexture(`${this.cacheKey}_filtered`),this._element=t,this._originalElement=t,this._setWidthHeight(e),this.filters.length!==0&&this.applyFilters(),this.resizeFilter&&this.applyResizeFilters()}removeTexture(t){let e=Rs(!1);e instanceof Al&&e.evictCachesForKey(t)}dispose(){super.dispose(),this.removeTexture(this.cacheKey),this.removeTexture(`${this.cacheKey}_filtered`),this._cacheContext=null,["_originalElement","_element","_filteredEl","_cacheCanvas"].forEach(t=>{let e=this[t];e&&At().dispose(e),this[t]=void 0})}getCrossOrigin(){return this._originalElement&&(this._originalElement.crossOrigin||null)}getOriginalSize(){let t=this.getElement();return t?{width:t.naturalWidth||t.width,height:t.naturalHeight||t.height}:{width:0,height:0}}_stroke(t){if(!this.stroke||this.strokeWidth===0)return;let e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,-i),t.lineTo(e,-i),t.lineTo(e,i),t.lineTo(-e,i),t.lineTo(-e,-i),t.closePath()}toObject(t=[]){let e=[];return this.filters.forEach(i=>{i&&e.push(i.toObject())}),{...super.toObject([...Dl,...t]),src:this.getSrc(),crossOrigin:this.getCrossOrigin(),filters:e,...this.resizeFilter?{resizeFilter:this.resizeFilter.toObject()}:{}}}hasCrop(){return!!this.cropX||!!this.cropY||this.width<this._element.width||this.height<this._element.height}_toSVG(){let t=[],e=this._element,i=-this.width/2,s=-this.height/2,n=[],a=[],o="",l="";if(!e)return[];if(this.hasCrop()){let h=Kt();n.push('<clipPath id="imageCrop_'+h+`">
|
|
58
58
|
`,' <rect x="'+i+'" y="'+s+'" width="'+P(this.width)+'" height="'+P(this.height)+`" />
|
|
59
59
|
`,`</clipPath>
|
|
60
60
|
`),o=' clip-path="url(#imageCrop_'+h+')" '}if(this.imageSmoothing||(l=' image-rendering="optimizeSpeed"'),t.push(" <image ","COMMON_PARTS",`xlink:href="${P(this.getSrc(!0))}" x="${i-this.cropX}" y="${s-this.cropY}" width="${e.width||e.naturalWidth}" height="${e.height||e.naturalHeight}"${l}${o}></image>
|
|
61
61
|
`),this.stroke||this.strokeDashArray){let h=this.fill;this.fill=null,a=[` <rect x="${i}" y="${s}" width="${P(this.width)}" height="${P(this.height)}" style="${this.getSvgStyles()}" />
|
|
62
|
-
`],this.fill=h}return n=this.paintFirst==="fill"?n.concat(t,a):n.concat(a,t),n}getSrc(t){let e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():this.srcFromAttribute?e.getAttribute("src")||"":e.src:this.src||""}getSvgSrc(t){return this.getSrc(t)}setSrc(t,{crossOrigin:e,signal:i}={}){return Br(t,{crossOrigin:e,signal:i}).then(s=>{e!==void 0&&this.set({crossOrigin:e}),this.setElement(s)})}toString(){return`#<Image: { src: "${this.getSrc()}" }>`}applyResizeFilters(){let t=this.resizeFilter,e=this.minimumScaleTrigger,i=this.getTotalObjectScaling(),s=i.x,n=i.y,a=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!t||s>e&&n>e)return this._element=a,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=s,void(this._lastScaleY=n);let o=gt(a),{width:l,height:h}=a;this._element=o,this._lastScaleX=t.scaleX=s,this._lastScaleY=t.scaleY=n,Rs().applyFilters([t],a,l,h,this._element),this._filterScalingX=o.width/this._originalElement.width,this._filterScalingY=o.height/this._originalElement.height}applyFilters(t=this.filters||[]){if(t=t.filter(n=>n&&!n.isNeutralState()),this.set("dirty",!0),this.removeTexture(`${this.cacheKey}_filtered`),t.length===0)return this._element=this._originalElement,this._filteredEl=void 0,this._filterScalingX=1,void(this._filterScalingY=1);let e=this._originalElement,i=e.naturalWidth||e.width,s=e.naturalHeight||e.height;if(this._element===this._originalElement){let n=gt({width:i,height:s});this._element=n,this._filteredEl=n}else this._filteredEl&&(this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,i,s),this._lastScaleX=1,this._lastScaleY=1);Rs().applyFilters(t,this._originalElement,i,s,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)}_render(t){t.imageSmoothingEnabled=this.imageSmoothing,this.isMoving!==!0&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(t),this._renderPaintInOrder(t)}drawCacheOnCanvas(t){t.imageSmoothingEnabled=this.imageSmoothing,super.drawCacheOnCanvas(t)}shouldCache(){return this.needsItsOwnCache()}_renderFill(t){let e=this._element;if(!e)return;let i=this._filterScalingX,s=this._filterScalingY,n=this.width,a=this.height,o=Math.max(this.cropX,0),l=Math.max(this.cropY,0),h=e.naturalWidth||e.width,c=e.naturalHeight||e.height,u=o*i,d=l*s,g=Math.min(n*i,h-u),f=Math.min(a*s,c-d),p=-n/2,y=-a/2,b=Math.min(n,h/i-o),x=Math.min(a,c/s-l);e&&t.drawImage(e,u,d,g,f,p,y,b,x)}_needsResize(){let t=this.getTotalObjectScaling();return t.x!==this._lastScaleX||t.y!==this._lastScaleY}_resetWidthHeight(){this.set(this.getOriginalSize())}_setWidthHeight({width:t,height:e}={}){let i=this.getOriginalSize();this.width=t||i.width,this.height=e||i.height}parsePreserveAspectRatioAttribute(){let t=An(this.preserveAspectRatio||""),e=this.width,i=this.height,s={width:e,height:i},n,a=this._element.width,o=this._element.height,l=1,h=1,c=0,u=0,d=0,g=0;return!t||t.alignX==="none"&&t.alignY==="none"?(l=e/a,h=i/o):(t.meetOrSlice==="meet"&&(l=h=el(this._element,s),n=(e-a*l)/2,t.alignX==="Min"&&(c=-n),t.alignX==="Max"&&(c=n),n=(i-o*h)/2,t.alignY==="Min"&&(u=-n),t.alignY==="Max"&&(u=n)),t.meetOrSlice==="slice"&&(l=h=rl(this._element,s),n=a-e/l,t.alignX==="Mid"&&(d=n/2),t.alignX==="Max"&&(d=n),n=o-i/h,t.alignY==="Mid"&&(g=n/2),t.alignY==="Max"&&(g=n),a=e/l,o=i/h)),{width:a,height:o,scaleX:l,scaleY:h,offsetLeft:c,offsetTop:u,cropX:d,cropY:g}}static fromObject({filters:t,resizeFilter:e,src:i,crossOrigin:s,type:n,...a},o){return Promise.all([Br(i,{...o,crossOrigin:s}),t&&Ie(t,o),e?Ie([e],o):[],Vr(a,o)]).then(([l,h=[],[c],u={}])=>new this(l,{...a,src:i,filters:h,resizeFilter:c,...u}))}static fromURL(t,{crossOrigin:e=null,signal:i}={},s){return Br(t,{crossOrigin:e,signal:i}).then(n=>new this(n,s))}static async fromElement(t,e={},i){let s=zt(t,this.ATTRIBUTE_NAMES,i);return this.fromURL(s["xlink:href"]||s.href,e,s).catch(n=>(Xt("log","Unable to parse Image",n),null))}};function Bs(r){if(!Xh.test(r.nodeName))return{};let t=r.getAttribute("viewBox"),e,i,s=1,n=1,a=r.getAttribute("width"),o=r.getAttribute("height"),l=r.getAttribute("x")||0,h=r.getAttribute("y")||0,c=!(t&&_a.test(t)),u=!a||!o||a==="100%"||o==="100%",d="",g=0,f=0;if(c&&(l||h)&&r.parentNode&&r.parentNode.nodeName!=="#document"&&(d=" translate("+rt(l||"0")+" "+rt(h||"0")+") ",e=(r.getAttribute("transform")||"")+d,r.setAttribute("transform",e),r.removeAttribute("x"),r.removeAttribute("y")),c&&u)return{width:0,height:0};let p={width:0,height:0};if(c)return p.width=rt(a),p.height=rt(o),p;let y=t.match(_a),b=-parseFloat(y[1]),x=-parseFloat(y[2]),C=parseFloat(y[3]),S=parseFloat(y[4]);p.minX=b,p.minY=x,p.viewBoxWidth=C,p.viewBoxHeight=S,u?(p.width=C,p.height=S):(p.width=rt(a),p.height=rt(o),s=p.width/C,n=p.height/S);let w=An(r.getAttribute("preserveAspectRatio")||"");if(w.alignX!=="none"&&(w.meetOrSlice==="meet"&&(n=s=s>n?n:s),w.meetOrSlice==="slice"&&(n=s=s>n?s:n),g=p.width-C*s,f=p.height-S*s,w.alignX==="Mid"&&(g/=2),w.alignY==="Mid"&&(f/=2),w.alignX==="Min"&&(g=0),w.alignY==="Min"&&(f=0)),s===1&&n===1&&b===0&&x===0&&l===0&&h===0)return p;if((l||h)&&r.parentNode.nodeName!=="#document"&&(d=" translate("+rt(l||"0")+" "+rt(h||"0")+") "),e=d+" matrix("+s+" 0 0 "+n+" "+(b*s+g)+" "+(x*n+f)+") ",r.nodeName==="svg"){for(i=r.ownerDocument.createElementNS(Hs,"g");r.firstChild;)i.appendChild(r.firstChild);r.appendChild(i)}else i=r,i.removeAttribute("x"),i.removeAttribute("y"),e=i.getAttribute("transform")+e;return i.setAttribute("transform",e),p}m(N,"type","Image"),m(N,"cacheProperties",[...Wt,...Dl]),m(N,"ownDefaults",{strokeWidth:0,srcFromAttribute:!1,minimumScaleTrigger:.5,cropX:0,cropY:0,imageSmoothing:!0}),m(N,"ATTRIBUTE_NAMES",[...te,"x","y","width","height","preserveAspectRatio","xlink:href","href","crossOrigin","image-rendering"]),_.setClass(N),_.setSVGClass(N);var Fi=r=>r.tagName.replace("svg:",""),Du=Gi(["pattern","defs","symbol","metadata","clipPath","mask","desc"]);function jl(r,t){let e,i,s,n,a=[];for(s=0,n=t.length;s<n;s++)e=t[s],i=r.getElementsByTagNameNS("http://www.w3.org/2000/svg",e),a=a.concat(Array.from(i));return a}var ju=["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"],Xs="xlink:href";function Ll(r,t){var e;let i=((e=t.getAttribute(Xs))==null?void 0:e.slice(1))||"",s=r.getElementById(i);if(s&&s.getAttribute(Xs)&&Ll(r,s),s&&(ju.forEach(n=>{let a=s.getAttribute(n);!t.hasAttribute(n)&&a&&t.setAttribute(n,a)}),!t.children.length)){let n=s.cloneNode(!0);for(;n.firstChild;)t.appendChild(n.firstChild)}t.removeAttribute(Xs)}var Lu=["linearGradient","radialGradient","svg:linearGradient","svg:radialGradient"],Ba=r=>_.getSVGClass(Fi(r).toLowerCase()),Fu=class{constructor(r,t,e,i,s){this.elements=r,this.options=t,this.reviver=e,this.regexUrl=/^url\(['"]?#([^'"]+)['"]?\)/g,this.doc=i,this.clipPaths=s,this.gradientDefs=(function(n){let a=jl(n,Lu),o={},l=a.length;for(;l--;){let h=a[l];h.getAttribute("xlink:href")&&Ll(n,h);let c=h.getAttribute("id");c&&(o[c]=h)}return o})(i),this.cssRules=(function(n){let a=n.getElementsByTagName("style"),o={};for(let l=0;l<a.length;l++){let h=(a[l].textContent||"").replace(/\/\*[\s\S]*?\*\//g,"");h.trim()!==""&&h.split("}").filter((c,u,d)=>d.length>1&&c.trim()).forEach(c=>{if((c.match(/{/g)||[]).length>1&&c.trim().startsWith("@"))return;let u=c.split("{"),d={},g=u[1].trim().split(";").filter(function(f){return f.trim()});for(let f=0;f<g.length;f++){let p=g[f].split(":"),y=p[0].trim();d[y]=p[1].trim()}(c=u[0].trim()).split(",").forEach(f=>{(f=f.replace(/^svg/i,"").trim())!==""&&(o[f]={...o[f]||{},...d})})})}return o})(i)}parse(){return Promise.all(this.elements.map(r=>this.createObject(r)))}async createObject(r){let t=Ba(r);if(t){let e=await t.fromElement(r,this.options,this.cssRules);return this.resolveGradient(e,r,at),this.resolveGradient(e,r,Dt),e instanceof N&&e._originalElement?_i(e,e.parsePreserveAspectRatioAttribute()):_i(e),await this.resolveClipPath(e,r),this.reviver&&this.reviver(r,e),e}return null}extractPropertyDefinition(r,t,e){let i=r[t],s=this.regexUrl;if(!s.test(i))return;s.lastIndex=0;let n=s.exec(i)[1];return s.lastIndex=0,e[n]}resolveGradient(r,t,e){let i=this.extractPropertyDefinition(r,e,this.gradientDefs);if(i){let s=t.getAttribute(e+"-opacity"),n=vr.fromElement(i,r,{...this.options,opacity:s});r.set(e,n)}}async resolveClipPath(r,t,e){let i=this.extractPropertyDefinition(r,"clipPath",this.clipPaths);if(i){let s=ot(r.calcTransformMatrix()),n=i[0].parentElement,a=t;for(;!e&&a.parentElement&&a.getAttribute("clip-path")!==r.clipPath;)a=a.parentElement;a.parentElement.appendChild(n);let o=Di(`${a.getAttribute("transform")||""} ${n.getAttribute("originalTransform")||""}`);n.setAttribute("transform",`matrix(${o.join(",")})`);let l=await Promise.all(i.map(b=>Ba(b).fromElement(b,this.options,this.cssRules).then(x=>(_i(x),x.fillRule=x.clipRule,delete x.clipRule,x)))),h=l.length===1?l[0]:new U(l),c=Y(s,h.calcTransformMatrix());h.clipPath&&await this.resolveClipPath(h,a,n.getAttribute("clip-path")?a:void 0);let{scaleX:u,scaleY:d,angle:g,skewX:f,translateX:p,translateY:y}=fe(c);h.set({flipX:!1,flipY:!1}),h.set({scaleX:u,scaleY:d,angle:g,skewX:f,skewY:0}),h.setPositionByOrigin(new v(p,y),F,F),r.clipPath=h}else delete r.clipPath}},Xa=r=>Bh.test(Fi(r));async function Iu(r,t,{crossOrigin:e,signal:i}={}){if(i&&i.aborted)return Xt("log",new Ya("parseSVGDocument")),{objects:[],elements:[],options:{},allElements:[]};let s=r.documentElement;(function(h){let c=jl(h,["use","svg:use"]),u=["x","y","xlink:href","href","transform"];for(let d of c){let g=d.attributes,f={};for(let O of g)O.value&&(f[O.name]=O.value);let p=(f["xlink:href"]||f.href||"").slice(1);if(p==="")return;let y=h.getElementById(p);if(y===null)return;let b=y.cloneNode(!0),x=b.attributes,C={};for(let O of x)O.value&&(C[O.name]=O.value);let{x:S=0,y:w=0,transform:k=""}=f,T=`${k} ${C.transform||""} translate(${S}, ${w})`;if(Bs(b),/^svg$/i.test(b.nodeName)){let O=b.ownerDocument.createElementNS(Hs,"g");Object.entries(C).forEach(([M,D])=>O.setAttributeNS(Hs,M,D)),O.append(...b.childNodes),b=O}for(let O of g){if(!O)continue;let{name:M,value:D}=O;if(!u.includes(M))if(M==="style"){let E={};Us(D,E),Object.entries(C).forEach(([j,B])=>{E[j]=B}),Us(C.style||"",E);let A=Object.entries(E).map(j=>j.join(":")).join(";");b.setAttribute(M,A)}else!C[M]&&b.setAttribute(M,D)}b.setAttribute("transform",T),b.setAttribute("instantiated_by_use","1"),b.removeAttribute("id"),d.parentNode.replaceChild(b,d)}})(r);let n=Array.from(s.getElementsByTagName("*")),a={...Bs(s),crossOrigin:e,signal:i},o=n.filter(h=>(Bs(h),Xa(h)&&!(function(c){let u=c;for(;u&&(u=u.parentElement);)if(u&&u.nodeName&&Du.test(Fi(u))&&!u.getAttribute("instantiated_by_use"))return!0;return!1})(h)));if(!o||o&&!o.length)return{objects:[],elements:[],options:{},allElements:[],options:a,allElements:n};let l={};return n.filter(h=>Fi(h)==="clipPath").forEach(h=>{h.setAttribute("originalTransform",h.getAttribute("transform")||"");let c=h.getAttribute("id");l[c]=Array.from(h.getElementsByTagName("*")).filter(u=>Xa(u))}),{objects:await new Fu(o,a,t,r,l).parse(),elements:o,options:a,allElements:n}}function Fl(r,t,e){return Iu(new(ge()).DOMParser().parseFromString(r.trim(),"text/xml"),t,e)}var Ki=r=>r.webgl!==void 0;var Hn="precision highp float",Ru=`
|
|
62
|
+
`],this.fill=h}return n=this.paintFirst==="fill"?n.concat(t,a):n.concat(a,t),n}getSrc(t){let e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():this.srcFromAttribute?e.getAttribute("src")||"":e.src:this.src||""}getSvgSrc(t){return this.getSrc(t)}setSrc(t,{crossOrigin:e,signal:i}={}){return Xr(t,{crossOrigin:e,signal:i}).then(s=>{e!==void 0&&this.set({crossOrigin:e}),this.setElement(s)})}toString(){return`#<Image: { src: "${this.getSrc()}" }>`}applyResizeFilters(){let t=this.resizeFilter,e=this.minimumScaleTrigger,i=this.getTotalObjectScaling(),s=i.x,n=i.y,a=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!t||s>e&&n>e)return this._element=a,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=s,void(this._lastScaleY=n);let o=gt(a),{width:l,height:h}=a;this._element=o,this._lastScaleX=t.scaleX=s,this._lastScaleY=t.scaleY=n,Rs().applyFilters([t],a,l,h,this._element),this._filterScalingX=o.width/this._originalElement.width,this._filterScalingY=o.height/this._originalElement.height}applyFilters(t=this.filters||[]){if(t=t.filter(n=>n&&!n.isNeutralState()),this.set("dirty",!0),this.removeTexture(`${this.cacheKey}_filtered`),t.length===0)return this._element=this._originalElement,this._filteredEl=void 0,this._filterScalingX=1,void(this._filterScalingY=1);let e=this._originalElement,i=e.naturalWidth||e.width,s=e.naturalHeight||e.height;if(this._element===this._originalElement){let n=gt({width:i,height:s});this._element=n,this._filteredEl=n}else this._filteredEl&&(this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,i,s),this._lastScaleX=1,this._lastScaleY=1);Rs().applyFilters(t,this._originalElement,i,s,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)}_render(t){t.imageSmoothingEnabled=this.imageSmoothing,this.isMoving!==!0&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(t),this._renderPaintInOrder(t)}drawCacheOnCanvas(t){t.imageSmoothingEnabled=this.imageSmoothing,super.drawCacheOnCanvas(t)}shouldCache(){return this.needsItsOwnCache()}_renderFill(t){let e=this._element;if(!e)return;let i=this._filterScalingX,s=this._filterScalingY,n=this.width,a=this.height,o=Math.max(this.cropX,0),l=Math.max(this.cropY,0),h=e.naturalWidth||e.width,c=e.naturalHeight||e.height,u=o*i,d=l*s,g=Math.min(n*i,h-u),f=Math.min(a*s,c-d),p=-n/2,y=-a/2,b=Math.min(n,h/i-o),x=Math.min(a,c/s-l);e&&t.drawImage(e,u,d,g,f,p,y,b,x)}_needsResize(){let t=this.getTotalObjectScaling();return t.x!==this._lastScaleX||t.y!==this._lastScaleY}_resetWidthHeight(){this.set(this.getOriginalSize())}_setWidthHeight({width:t,height:e}={}){let i=this.getOriginalSize();this.width=t||i.width,this.height=e||i.height}parsePreserveAspectRatioAttribute(){let t=An(this.preserveAspectRatio||""),e=this.width,i=this.height,s={width:e,height:i},n,a=this._element.width,o=this._element.height,l=1,h=1,c=0,u=0,d=0,g=0;return!t||t.alignX==="none"&&t.alignY==="none"?(l=e/a,h=i/o):(t.meetOrSlice==="meet"&&(l=h=el(this._element,s),n=(e-a*l)/2,t.alignX==="Min"&&(c=-n),t.alignX==="Max"&&(c=n),n=(i-o*h)/2,t.alignY==="Min"&&(u=-n),t.alignY==="Max"&&(u=n)),t.meetOrSlice==="slice"&&(l=h=rl(this._element,s),n=a-e/l,t.alignX==="Mid"&&(d=n/2),t.alignX==="Max"&&(d=n),n=o-i/h,t.alignY==="Mid"&&(g=n/2),t.alignY==="Max"&&(g=n),a=e/l,o=i/h)),{width:a,height:o,scaleX:l,scaleY:h,offsetLeft:c,offsetTop:u,cropX:d,cropY:g}}static fromObject({filters:t,resizeFilter:e,src:i,crossOrigin:s,type:n,...a},o){return Promise.all([Xr(i,{...o,crossOrigin:s}),t&&Re(t,o),e?Re([e],o):[],Nr(a,o)]).then(([l,h=[],[c],u={}])=>new this(l,{...a,src:i,filters:h,resizeFilter:c,...u}))}static fromURL(t,{crossOrigin:e=null,signal:i}={},s){return Xr(t,{crossOrigin:e,signal:i}).then(n=>new this(n,s))}static async fromElement(t,e={},i){let s=zt(t,this.ATTRIBUTE_NAMES,i);return this.fromURL(s["xlink:href"]||s.href,e,s).catch(n=>(Xt("log","Unable to parse Image",n),null))}};function Bs(r){if(!Xh.test(r.nodeName))return{};let t=r.getAttribute("viewBox"),e,i,s=1,n=1,a=r.getAttribute("width"),o=r.getAttribute("height"),l=r.getAttribute("x")||0,h=r.getAttribute("y")||0,c=!(t&&_a.test(t)),u=!a||!o||a==="100%"||o==="100%",d="",g=0,f=0;if(c&&(l||h)&&r.parentNode&&r.parentNode.nodeName!=="#document"&&(d=" translate("+rt(l||"0")+" "+rt(h||"0")+") ",e=(r.getAttribute("transform")||"")+d,r.setAttribute("transform",e),r.removeAttribute("x"),r.removeAttribute("y")),c&&u)return{width:0,height:0};let p={width:0,height:0};if(c)return p.width=rt(a),p.height=rt(o),p;let y=t.match(_a),b=-parseFloat(y[1]),x=-parseFloat(y[2]),C=parseFloat(y[3]),S=parseFloat(y[4]);p.minX=b,p.minY=x,p.viewBoxWidth=C,p.viewBoxHeight=S,u?(p.width=C,p.height=S):(p.width=rt(a),p.height=rt(o),s=p.width/C,n=p.height/S);let w=An(r.getAttribute("preserveAspectRatio")||"");if(w.alignX!=="none"&&(w.meetOrSlice==="meet"&&(n=s=s>n?n:s),w.meetOrSlice==="slice"&&(n=s=s>n?s:n),g=p.width-C*s,f=p.height-S*s,w.alignX==="Mid"&&(g/=2),w.alignY==="Mid"&&(f/=2),w.alignX==="Min"&&(g=0),w.alignY==="Min"&&(f=0)),s===1&&n===1&&b===0&&x===0&&l===0&&h===0)return p;if((l||h)&&r.parentNode.nodeName!=="#document"&&(d=" translate("+rt(l||"0")+" "+rt(h||"0")+") "),e=d+" matrix("+s+" 0 0 "+n+" "+(b*s+g)+" "+(x*n+f)+") ",r.nodeName==="svg"){for(i=r.ownerDocument.createElementNS(Hs,"g");r.firstChild;)i.appendChild(r.firstChild);r.appendChild(i)}else i=r,i.removeAttribute("x"),i.removeAttribute("y"),e=i.getAttribute("transform")+e;return i.setAttribute("transform",e),p}m(N,"type","Image"),m(N,"cacheProperties",[...Wt,...Dl]),m(N,"ownDefaults",{strokeWidth:0,srcFromAttribute:!1,minimumScaleTrigger:.5,cropX:0,cropY:0,imageSmoothing:!0}),m(N,"ATTRIBUTE_NAMES",[...ee,"x","y","width","height","preserveAspectRatio","xlink:href","href","crossOrigin","image-rendering"]),_.setClass(N),_.setSVGClass(N);var Fi=r=>r.tagName.replace("svg:",""),Du=Gi(["pattern","defs","symbol","metadata","clipPath","mask","desc"]);function jl(r,t){let e,i,s,n,a=[];for(s=0,n=t.length;s<n;s++)e=t[s],i=r.getElementsByTagNameNS("http://www.w3.org/2000/svg",e),a=a.concat(Array.from(i));return a}var ju=["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"],Xs="xlink:href";function Ll(r,t){var e;let i=((e=t.getAttribute(Xs))==null?void 0:e.slice(1))||"",s=r.getElementById(i);if(s&&s.getAttribute(Xs)&&Ll(r,s),s&&(ju.forEach(n=>{let a=s.getAttribute(n);!t.hasAttribute(n)&&a&&t.setAttribute(n,a)}),!t.children.length)){let n=s.cloneNode(!0);for(;n.firstChild;)t.appendChild(n.firstChild)}t.removeAttribute(Xs)}var Lu=["linearGradient","radialGradient","svg:linearGradient","svg:radialGradient"],Ba=r=>_.getSVGClass(Fi(r).toLowerCase()),Fu=class{constructor(r,t,e,i,s){this.elements=r,this.options=t,this.reviver=e,this.regexUrl=/^url\(['"]?#([^'"]+)['"]?\)/g,this.doc=i,this.clipPaths=s,this.gradientDefs=(function(n){let a=jl(n,Lu),o={},l=a.length;for(;l--;){let h=a[l];h.getAttribute("xlink:href")&&Ll(n,h);let c=h.getAttribute("id");c&&(o[c]=h)}return o})(i),this.cssRules=(function(n){let a=n.getElementsByTagName("style"),o={};for(let l=0;l<a.length;l++){let h=(a[l].textContent||"").replace(/\/\*[\s\S]*?\*\//g,"");h.trim()!==""&&h.split("}").filter((c,u,d)=>d.length>1&&c.trim()).forEach(c=>{if((c.match(/{/g)||[]).length>1&&c.trim().startsWith("@"))return;let u=c.split("{"),d={},g=u[1].trim().split(";").filter(function(f){return f.trim()});for(let f=0;f<g.length;f++){let p=g[f].split(":"),y=p[0].trim();d[y]=p[1].trim()}(c=u[0].trim()).split(",").forEach(f=>{(f=f.replace(/^svg/i,"").trim())!==""&&(o[f]={...o[f]||{},...d})})})}return o})(i)}parse(){return Promise.all(this.elements.map(r=>this.createObject(r)))}async createObject(r){let t=Ba(r);if(t){let e=await t.fromElement(r,this.options,this.cssRules);return this.resolveGradient(e,r,at),this.resolveGradient(e,r,Dt),e instanceof N&&e._originalElement?_i(e,e.parsePreserveAspectRatioAttribute()):_i(e),await this.resolveClipPath(e,r),this.reviver&&this.reviver(r,e),e}return null}extractPropertyDefinition(r,t,e){let i=r[t],s=this.regexUrl;if(!s.test(i))return;s.lastIndex=0;let n=s.exec(i)[1];return s.lastIndex=0,e[n]}resolveGradient(r,t,e){let i=this.extractPropertyDefinition(r,e,this.gradientDefs);if(i){let s=t.getAttribute(e+"-opacity"),n=br.fromElement(i,r,{...this.options,opacity:s});r.set(e,n)}}async resolveClipPath(r,t,e){let i=this.extractPropertyDefinition(r,"clipPath",this.clipPaths);if(i){let s=lt(r.calcTransformMatrix()),n=i[0].parentElement,a=t;for(;!e&&a.parentElement&&a.getAttribute("clip-path")!==r.clipPath;)a=a.parentElement;a.parentElement.appendChild(n);let o=Di(`${a.getAttribute("transform")||""} ${n.getAttribute("originalTransform")||""}`);n.setAttribute("transform",`matrix(${o.join(",")})`);let l=await Promise.all(i.map(b=>Ba(b).fromElement(b,this.options,this.cssRules).then(x=>(_i(x),x.fillRule=x.clipRule,delete x.clipRule,x)))),h=l.length===1?l[0]:new U(l),c=Y(s,h.calcTransformMatrix());h.clipPath&&await this.resolveClipPath(h,a,n.getAttribute("clip-path")?a:void 0);let{scaleX:u,scaleY:d,angle:g,skewX:f,translateX:p,translateY:y}=fe(c);h.set({flipX:!1,flipY:!1}),h.set({scaleX:u,scaleY:d,angle:g,skewX:f,skewY:0}),h.setPositionByOrigin(new v(p,y),F,F),r.clipPath=h}else delete r.clipPath}},Xa=r=>Bh.test(Fi(r));async function Iu(r,t,{crossOrigin:e,signal:i}={}){if(i&&i.aborted)return Xt("log",new Ya("parseSVGDocument")),{objects:[],elements:[],options:{},allElements:[]};let s=r.documentElement;(function(h){let c=jl(h,["use","svg:use"]),u=["x","y","xlink:href","href","transform"];for(let d of c){let g=d.attributes,f={};for(let O of g)O.value&&(f[O.name]=O.value);let p=(f["xlink:href"]||f.href||"").slice(1);if(p==="")return;let y=h.getElementById(p);if(y===null)return;let b=y.cloneNode(!0),x=b.attributes,C={};for(let O of x)O.value&&(C[O.name]=O.value);let{x:S=0,y:w=0,transform:k=""}=f,T=`${k} ${C.transform||""} translate(${S}, ${w})`;if(Bs(b),/^svg$/i.test(b.nodeName)){let O=b.ownerDocument.createElementNS(Hs,"g");Object.entries(C).forEach(([M,D])=>O.setAttributeNS(Hs,M,D)),O.append(...b.childNodes),b=O}for(let O of g){if(!O)continue;let{name:M,value:D}=O;if(!u.includes(M))if(M==="style"){let E={};Us(D,E),Object.entries(C).forEach(([j,B])=>{E[j]=B}),Us(C.style||"",E);let A=Object.entries(E).map(j=>j.join(":")).join(";");b.setAttribute(M,A)}else!C[M]&&b.setAttribute(M,D)}b.setAttribute("transform",T),b.setAttribute("instantiated_by_use","1"),b.removeAttribute("id"),d.parentNode.replaceChild(b,d)}})(r);let n=Array.from(s.getElementsByTagName("*")),a={...Bs(s),crossOrigin:e,signal:i},o=n.filter(h=>(Bs(h),Xa(h)&&!(function(c){let u=c;for(;u&&(u=u.parentElement);)if(u&&u.nodeName&&Du.test(Fi(u))&&!u.getAttribute("instantiated_by_use"))return!0;return!1})(h)));if(!o||o&&!o.length)return{objects:[],elements:[],options:{},allElements:[],options:a,allElements:n};let l={};return n.filter(h=>Fi(h)==="clipPath").forEach(h=>{h.setAttribute("originalTransform",h.getAttribute("transform")||"");let c=h.getAttribute("id");l[c]=Array.from(h.getElementsByTagName("*")).filter(u=>Xa(u))}),{objects:await new Fu(o,a,t,r,l).parse(),elements:o,options:a,allElements:n}}function Fl(r,t,e){return Iu(new(ge()).DOMParser().parseFromString(r.trim(),"text/xml"),t,e)}var Ki=r=>r.webgl!==void 0;var Hn="precision highp float",Ru=`
|
|
63
63
|
${Hn};
|
|
64
64
|
varying vec2 vTexCoord;
|
|
65
65
|
uniform sampler2D uTexture;
|
|
@@ -98,7 +98,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
98
98
|
`,tint:`
|
|
99
99
|
gl_FragColor.rgb *= (1.0 - uColor.a);
|
|
100
100
|
gl_FragColor.rgb += uColor.rgb;
|
|
101
|
-
`},
|
|
101
|
+
`},Cr=class extends W{getCacheKey(){return`${this.type}_${this.mode}`}getFragmentSource(){return`
|
|
102
102
|
precision highp float;
|
|
103
103
|
uniform sampler2D uTexture;
|
|
104
104
|
uniform vec4 uColor;
|
|
@@ -110,7 +110,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
110
110
|
${Xu[this.mode]}
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
`}applyTo2d({imageData:{data:r}}){let t=new ft(this.color).getSource(),e=this.alpha,i=t[0]*e,s=t[1]*e,n=t[2]*e,a=1-e;for(let o=0;o<r.length;o+=4){let l=r[o],h=r[o+1],c=r[o+2],u,d,g;switch(this.mode){case"multiply":u=l*i/255,d=h*s/255,g=c*n/255;break;case"screen":u=255-(255-l)*(255-i)/255,d=255-(255-h)*(255-s)/255,g=255-(255-c)*(255-n)/255;break;case"add":u=l+i,d=h+s,g=c+n;break;case"difference":u=Math.abs(l-i),d=Math.abs(h-s),g=Math.abs(c-n);break;case"subtract":u=l-i,d=h-s,g=c-n;break;case"darken":u=Math.min(l,i),d=Math.min(h,s),g=Math.min(c,n);break;case"lighten":u=Math.max(l,i),d=Math.max(h,s),g=Math.max(c,n);break;case"overlay":u=i<128?2*l*i/255:255-2*(255-l)*(255-i)/255,d=s<128?2*h*s/255:255-2*(255-h)*(255-s)/255,g=n<128?2*c*n/255:255-2*(255-c)*(255-n)/255;break;case"exclusion":u=i+l-2*i*l/255,d=s+h-2*s*h/255,g=n+c-2*n*c/255;break;case"tint":u=i+l*a,d=s+h*a,g=n+c*a}r[o]=u,r[o+1]=d,r[o+2]=g}}sendUniformData(r,t){let e=new ft(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,r.uniform4fv(t.uColor,e)}};m(
|
|
113
|
+
`}applyTo2d({imageData:{data:r}}){let t=new ft(this.color).getSource(),e=this.alpha,i=t[0]*e,s=t[1]*e,n=t[2]*e,a=1-e;for(let o=0;o<r.length;o+=4){let l=r[o],h=r[o+1],c=r[o+2],u,d,g;switch(this.mode){case"multiply":u=l*i/255,d=h*s/255,g=c*n/255;break;case"screen":u=255-(255-l)*(255-i)/255,d=255-(255-h)*(255-s)/255,g=255-(255-c)*(255-n)/255;break;case"add":u=l+i,d=h+s,g=c+n;break;case"difference":u=Math.abs(l-i),d=Math.abs(h-s),g=Math.abs(c-n);break;case"subtract":u=l-i,d=h-s,g=c-n;break;case"darken":u=Math.min(l,i),d=Math.min(h,s),g=Math.min(c,n);break;case"lighten":u=Math.max(l,i),d=Math.max(h,s),g=Math.max(c,n);break;case"overlay":u=i<128?2*l*i/255:255-2*(255-l)*(255-i)/255,d=s<128?2*h*s/255:255-2*(255-h)*(255-s)/255,g=n<128?2*c*n/255:255-2*(255-c)*(255-n)/255;break;case"exclusion":u=i+l-2*i*l/255,d=s+h-2*s*h/255,g=n+c-2*n*c/255;break;case"tint":u=i+l*a,d=s+h*a,g=n+c*a}r[o]=u,r[o+1]=d,r[o+2]=g}}sendUniformData(r,t){let e=new ft(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,r.uniform4fv(t.uColor,e)}};m(Cr,"defaults",{color:"#F95C63",mode:"multiply",alpha:1}),m(Cr,"type","BlendColor"),m(Cr,"uniformLocations",["uColor"]),_.setClass(Cr);var Yu={multiply:`
|
|
114
114
|
precision highp float;
|
|
115
115
|
uniform sampler2D uTexture;
|
|
116
116
|
uniform sampler2D uImage;
|
|
@@ -136,7 +136,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
136
136
|
color.a = color2.a;
|
|
137
137
|
gl_FragColor = color;
|
|
138
138
|
}
|
|
139
|
-
`},
|
|
139
|
+
`},wr=class extends W{getCacheKey(){return`${this.type}_${this.mode}`}getFragmentSource(){return Yu[this.mode]}getVertexSource(){return`
|
|
140
140
|
attribute vec2 aPosition;
|
|
141
141
|
varying vec2 vTexCoord;
|
|
142
142
|
varying vec2 vTexCoord2;
|
|
@@ -146,7 +146,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
146
146
|
vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;
|
|
147
147
|
gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
|
|
148
148
|
}
|
|
149
|
-
`}applyToWebGL(r){let t=r.context,e=this.createTexture(r.filterBackend,this.image);this.bindAdditionalTexture(t,e,t.TEXTURE1),super.applyToWebGL(r),this.unbindAdditionalTexture(t,t.TEXTURE1)}createTexture(r,t){return r.getCachedTexture(t.cacheKey,t.getElement())}calculateMatrix(){let r=this.image,{width:t,height:e}=r.getElement();return[1/r.scaleX,0,0,0,1/r.scaleY,0,-r.left/t,-r.top/e,1]}applyTo2d({imageData:{data:r,width:t,height:e},filterBackend:{resources:i}}){let s=this.image;i.blendImage||(i.blendImage=jt());let n=i.blendImage,a=n.getContext("2d");n.width!==t||n.height!==e?(n.width=t,n.height=e):a.clearRect(0,0,t,e),a.setTransform(s.scaleX,0,0,s.scaleY,s.left,s.top),a.drawImage(s.getElement(),0,0,t,e);let o=a.getImageData(0,0,t,e).data;for(let l=0;l<r.length;l+=4){let h=r[l],c=r[l+1],u=r[l+2],d=r[l+3],g=o[l],f=o[l+1],p=o[l+2],y=o[l+3];switch(this.mode){case"multiply":r[l]=h*g/255,r[l+1]=c*f/255,r[l+2]=u*p/255,r[l+3]=d*y/255;break;case"mask":r[l+3]=y}}}sendUniformData(r,t){let e=this.calculateMatrix();r.uniform1i(t.uImage,1),r.uniformMatrix3fv(t.uTransformMatrix,!1,e)}toObject(){return{...super.toObject(),image:this.image&&this.image.toObject()}}static async fromObject({type:r,image:t,...e},i){return N.fromObject(t,i).then(s=>new this({...e,image:s}))}};m(
|
|
149
|
+
`}applyToWebGL(r){let t=r.context,e=this.createTexture(r.filterBackend,this.image);this.bindAdditionalTexture(t,e,t.TEXTURE1),super.applyToWebGL(r),this.unbindAdditionalTexture(t,t.TEXTURE1)}createTexture(r,t){return r.getCachedTexture(t.cacheKey,t.getElement())}calculateMatrix(){let r=this.image,{width:t,height:e}=r.getElement();return[1/r.scaleX,0,0,0,1/r.scaleY,0,-r.left/t,-r.top/e,1]}applyTo2d({imageData:{data:r,width:t,height:e},filterBackend:{resources:i}}){let s=this.image;i.blendImage||(i.blendImage=jt());let n=i.blendImage,a=n.getContext("2d");n.width!==t||n.height!==e?(n.width=t,n.height=e):a.clearRect(0,0,t,e),a.setTransform(s.scaleX,0,0,s.scaleY,s.left,s.top),a.drawImage(s.getElement(),0,0,t,e);let o=a.getImageData(0,0,t,e).data;for(let l=0;l<r.length;l+=4){let h=r[l],c=r[l+1],u=r[l+2],d=r[l+3],g=o[l],f=o[l+1],p=o[l+2],y=o[l+3];switch(this.mode){case"multiply":r[l]=h*g/255,r[l+1]=c*f/255,r[l+2]=u*p/255,r[l+3]=d*y/255;break;case"mask":r[l+3]=y}}}sendUniformData(r,t){let e=this.calculateMatrix();r.uniform1i(t.uImage,1),r.uniformMatrix3fv(t.uTransformMatrix,!1,e)}toObject(){return{...super.toObject(),image:this.image&&this.image.toObject()}}static async fromObject({type:r,image:t,...e},i){return N.fromObject(t,i).then(s=>new this({...e,image:s}))}};m(wr,"type","BlendImage"),m(wr,"defaults",{mode:"multiply",alpha:1}),m(wr,"uniformLocations",["uTransformMatrix","uImage"]),_.setClass(wr);var Sr=class extends W{getFragmentSource(){return`
|
|
150
150
|
precision highp float;
|
|
151
151
|
uniform sampler2D uTexture;
|
|
152
152
|
uniform vec2 uDelta;
|
|
@@ -175,7 +175,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
175
175
|
gl_FragColor.rgb = color.rgb / totalC;
|
|
176
176
|
gl_FragColor.a = color.a / totalA;
|
|
177
177
|
}
|
|
178
|
-
`}applyTo(r){Ki(r)?(this.aspectRatio=r.sourceWidth/r.sourceHeight,r.passes++,this._setupFrameBuffer(r),this.horizontal=!0,this.applyToWebGL(r),this._swapTextures(r),this._setupFrameBuffer(r),this.horizontal=!1,this.applyToWebGL(r),this._swapTextures(r)):this.applyTo2d(r)}applyTo2d({imageData:{data:r,width:t,height:e}}){this.aspectRatio=t/e,this.horizontal=!0;let i=this.getBlurValue()*t,s=new Uint8ClampedArray(r),n=4*t;for(let a=0;a<r.length;a+=4){let o=0,l=0,h=0,c=0,u=0,d=a-a%n,g=d+n;for(let f=-14;f<15;f++){let p=f/15,y=4*Math.floor(i*p),b=1-Math.abs(p),x=a+y;x<d?x=d:x>g&&(x=g);let C=r[x+3]*b;o+=r[x]*C,l+=r[x+1]*C,h+=r[x+2]*C,c+=C,u+=b}s[a]=o/c,s[a+1]=l/c,s[a+2]=h/c,s[a+3]=c/u}this.horizontal=!1,i=this.getBlurValue()*e;for(let a=0;a<s.length;a+=4){let o=0,l=0,h=0,c=0,u=0,d=a%n,g=s.length-n+d;for(let f=-14;f<15;f++){let p=f/15,y=Math.floor(i*p)*n,b=1-Math.abs(p),x=a+y;x<d?x=d:x>g&&(x=g);let C=s[x+3]*b;o+=s[x]*C,l+=s[x+1]*C,h+=s[x+2]*C,c+=C,u+=b}r[a]=o/c,r[a+1]=l/c,r[a+2]=h/c,r[a+3]=c/u}}sendUniformData(r,t){let e=this.chooseRightDelta();r.uniform2fv(t.uDelta,e)}isNeutralState(){return this.blur===0}getBlurValue(){let r=1,{horizontal:t,aspectRatio:e}=this;return t?e>1&&(r=1/e):e<1&&(r=e),r*this.blur*.12}chooseRightDelta(){let r=this.getBlurValue();return this.horizontal?[r,0]:[0,r]}};m(
|
|
178
|
+
`}applyTo(r){Ki(r)?(this.aspectRatio=r.sourceWidth/r.sourceHeight,r.passes++,this._setupFrameBuffer(r),this.horizontal=!0,this.applyToWebGL(r),this._swapTextures(r),this._setupFrameBuffer(r),this.horizontal=!1,this.applyToWebGL(r),this._swapTextures(r)):this.applyTo2d(r)}applyTo2d({imageData:{data:r,width:t,height:e}}){this.aspectRatio=t/e,this.horizontal=!0;let i=this.getBlurValue()*t,s=new Uint8ClampedArray(r),n=4*t;for(let a=0;a<r.length;a+=4){let o=0,l=0,h=0,c=0,u=0,d=a-a%n,g=d+n;for(let f=-14;f<15;f++){let p=f/15,y=4*Math.floor(i*p),b=1-Math.abs(p),x=a+y;x<d?x=d:x>g&&(x=g);let C=r[x+3]*b;o+=r[x]*C,l+=r[x+1]*C,h+=r[x+2]*C,c+=C,u+=b}s[a]=o/c,s[a+1]=l/c,s[a+2]=h/c,s[a+3]=c/u}this.horizontal=!1,i=this.getBlurValue()*e;for(let a=0;a<s.length;a+=4){let o=0,l=0,h=0,c=0,u=0,d=a%n,g=s.length-n+d;for(let f=-14;f<15;f++){let p=f/15,y=Math.floor(i*p)*n,b=1-Math.abs(p),x=a+y;x<d?x=d:x>g&&(x=g);let C=s[x+3]*b;o+=s[x]*C,l+=s[x+1]*C,h+=s[x+2]*C,c+=C,u+=b}r[a]=o/c,r[a+1]=l/c,r[a+2]=h/c,r[a+3]=c/u}}sendUniformData(r,t){let e=this.chooseRightDelta();r.uniform2fv(t.uDelta,e)}isNeutralState(){return this.blur===0}getBlurValue(){let r=1,{horizontal:t,aspectRatio:e}=this;return t?e>1&&(r=1/e):e<1&&(r=e),r*this.blur*.12}chooseRightDelta(){let r=this.getBlurValue();return this.horizontal?[r,0]:[0,r]}};m(Sr,"type","Blur"),m(Sr,"defaults",{blur:0}),m(Sr,"uniformLocations",["uDelta"]),_.setClass(Sr);var _r=class extends W{getFragmentSource(){return`
|
|
179
179
|
precision highp float;
|
|
180
180
|
uniform sampler2D uTexture;
|
|
181
181
|
uniform float uBrightness;
|
|
@@ -185,7 +185,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
185
185
|
color.rgb += uBrightness;
|
|
186
186
|
gl_FragColor = color;
|
|
187
187
|
}
|
|
188
|
-
`}applyTo2d({imageData:{data:r}}){let t=Math.round(255*this.brightness);for(let e=0;e<r.length;e+=4)r[e]+=t,r[e+1]+=t,r[e+2]+=t}isNeutralState(){return this.brightness===0}sendUniformData(r,t){r.uniform1f(t.uBrightness,this.brightness)}};m(
|
|
188
|
+
`}applyTo2d({imageData:{data:r}}){let t=Math.round(255*this.brightness);for(let e=0;e<r.length;e+=4)r[e]+=t,r[e+1]+=t,r[e+2]+=t}isNeutralState(){return this.brightness===0}sendUniformData(r,t){r.uniform1f(t.uBrightness,this.brightness)}};m(_r,"type","Brightness"),m(_r,"defaults",{brightness:0}),m(_r,"uniformLocations",["uBrightness"]),_.setClass(_r);var Il={matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],colorsOnly:!0},ue=class extends W{getFragmentSource(){return`
|
|
189
189
|
precision highp float;
|
|
190
190
|
uniform sampler2D uTexture;
|
|
191
191
|
varying vec2 vTexCoord;
|
|
@@ -196,7 +196,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
196
196
|
color *= uColorMatrix;
|
|
197
197
|
color += uConstants;
|
|
198
198
|
gl_FragColor = color;
|
|
199
|
-
}`}applyTo2d(r){let t=r.imageData.data,e=this.matrix,i=this.colorsOnly;for(let s=0;s<t.length;s+=4){let n=t[s],a=t[s+1],o=t[s+2];if(t[s]=n*e[0]+a*e[1]+o*e[2]+255*e[4],t[s+1]=n*e[5]+a*e[6]+o*e[7]+255*e[9],t[s+2]=n*e[10]+a*e[11]+o*e[12]+255*e[14],!i){let l=t[s+3];t[s]+=l*e[3],t[s+1]+=l*e[8],t[s+2]+=l*e[13],t[s+3]=n*e[15]+a*e[16]+o*e[17]+l*e[18]+255*e[19]}}}sendUniformData(r,t){let e=this.matrix,i=[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]],s=[e[4],e[9],e[14],e[19]];r.uniformMatrix4fv(t.uColorMatrix,!1,i),r.uniform4fv(t.uConstants,s)}toObject(){return{...super.toObject(),matrix:[...this.matrix]}}};function ve(r,t){var e;let i=(m(e=class extends ue{toObject(){return{type:this.type,colorsOnly:this.colorsOnly}}},"type",r),m(e,"defaults",{colorsOnly:!1,matrix:t}),e);return _.setClass(i,r),i}m(ue,"type","ColorMatrix"),m(ue,"defaults",Il),m(ue,"uniformLocations",["uColorMatrix","uConstants"]),_.setClass(ue);var $u=ve("Brownie",[.5997,.34553,-.27082,0,.186,-.0377,.86095,.15059,0,-.1449,.24113,-.07441,.44972,0,-.02965,0,0,0,1,0]),Wu=ve("Vintage",[.62793,.32021,-.03965,0,.03784,.02578,.64411,.03259,0,.02926,.0466,-.08512,.52416,0,.02023,0,0,0,1,0]),Hu=ve("Kodachrome",[1.12855,-.39673,-.03992,0,.24991,-.16404,1.08352,-.05498,0,.09698,-.16786,-.56034,1.60148,0,.13972,0,0,0,1,0]),zu=ve("Technicolor",[1.91252,-.85453,-.09155,0,.04624,-.30878,1.76589,-.10601,0,-.27589,-.2311,-.75018,1.84759,0,.12137,0,0,0,1,0]),Gu=ve("Polaroid",[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0]),Vu=ve("Sepia",[.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0]),Nu=ve("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]),gn=class extends W{constructor(r={}){super(r),this.subFilters=r.subFilters||[]}applyTo(r){Ki(r)&&(r.passes+=this.subFilters.length-1),this.subFilters.forEach(t=>{t.applyTo(r)})}toObject(){return{type:this.type,subFilters:this.subFilters.map(r=>r.toObject())}}isNeutralState(){return!this.subFilters.some(r=>!r.isNeutralState())}static fromObject(r,t){return Promise.all((r.subFilters||[]).map(e=>_.getClass(e.type).fromObject(e,t))).then(e=>new this({subFilters:e}))}};m(gn,"type","Composed"),_.setClass(gn);var
|
|
199
|
+
}`}applyTo2d(r){let t=r.imageData.data,e=this.matrix,i=this.colorsOnly;for(let s=0;s<t.length;s+=4){let n=t[s],a=t[s+1],o=t[s+2];if(t[s]=n*e[0]+a*e[1]+o*e[2]+255*e[4],t[s+1]=n*e[5]+a*e[6]+o*e[7]+255*e[9],t[s+2]=n*e[10]+a*e[11]+o*e[12]+255*e[14],!i){let l=t[s+3];t[s]+=l*e[3],t[s+1]+=l*e[8],t[s+2]+=l*e[13],t[s+3]=n*e[15]+a*e[16]+o*e[17]+l*e[18]+255*e[19]}}}sendUniformData(r,t){let e=this.matrix,i=[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]],s=[e[4],e[9],e[14],e[19]];r.uniformMatrix4fv(t.uColorMatrix,!1,i),r.uniform4fv(t.uConstants,s)}toObject(){return{...super.toObject(),matrix:[...this.matrix]}}};function ve(r,t){var e;let i=(m(e=class extends ue{toObject(){return{type:this.type,colorsOnly:this.colorsOnly}}},"type",r),m(e,"defaults",{colorsOnly:!1,matrix:t}),e);return _.setClass(i,r),i}m(ue,"type","ColorMatrix"),m(ue,"defaults",Il),m(ue,"uniformLocations",["uColorMatrix","uConstants"]),_.setClass(ue);var $u=ve("Brownie",[.5997,.34553,-.27082,0,.186,-.0377,.86095,.15059,0,-.1449,.24113,-.07441,.44972,0,-.02965,0,0,0,1,0]),Wu=ve("Vintage",[.62793,.32021,-.03965,0,.03784,.02578,.64411,.03259,0,.02926,.0466,-.08512,.52416,0,.02023,0,0,0,1,0]),Hu=ve("Kodachrome",[1.12855,-.39673,-.03992,0,.24991,-.16404,1.08352,-.05498,0,.09698,-.16786,-.56034,1.60148,0,.13972,0,0,0,1,0]),zu=ve("Technicolor",[1.91252,-.85453,-.09155,0,.04624,-.30878,1.76589,-.10601,0,-.27589,-.2311,-.75018,1.84759,0,.12137,0,0,0,1,0]),Gu=ve("Polaroid",[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0]),Vu=ve("Sepia",[.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0]),Nu=ve("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]),gn=class extends W{constructor(r={}){super(r),this.subFilters=r.subFilters||[]}applyTo(r){Ki(r)&&(r.passes+=this.subFilters.length-1),this.subFilters.forEach(t=>{t.applyTo(r)})}toObject(){return{type:this.type,subFilters:this.subFilters.map(r=>r.toObject())}}isNeutralState(){return!this.subFilters.some(r=>!r.isNeutralState())}static fromObject(r,t){return Promise.all((r.subFilters||[]).map(e=>_.getClass(e.type).fromObject(e,t))).then(e=>new this({subFilters:e}))}};m(gn,"type","Composed"),_.setClass(gn);var Tr=class extends W{getFragmentSource(){return`
|
|
200
200
|
precision highp float;
|
|
201
201
|
uniform sampler2D uTexture;
|
|
202
202
|
uniform float uContrast;
|
|
@@ -206,7 +206,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
206
206
|
float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));
|
|
207
207
|
color.rgb = contrastF * (color.rgb - 0.5) + 0.5;
|
|
208
208
|
gl_FragColor = color;
|
|
209
|
-
}`}isNeutralState(){return this.contrast===0}applyTo2d({imageData:{data:r}}){let t=Math.floor(255*this.contrast),e=259*(t+255)/(255*(259-t));for(let i=0;i<r.length;i+=4)r[i]=e*(r[i]-128)+128,r[i+1]=e*(r[i+1]-128)+128,r[i+2]=e*(r[i+2]-128)+128}sendUniformData(r,t){r.uniform1f(t.uContrast,this.contrast)}};m(
|
|
209
|
+
}`}isNeutralState(){return this.contrast===0}applyTo2d({imageData:{data:r}}){let t=Math.floor(255*this.contrast),e=259*(t+255)/(255*(259-t));for(let i=0;i<r.length;i+=4)r[i]=e*(r[i]-128)+128,r[i+1]=e*(r[i+1]-128)+128,r[i+2]=e*(r[i+2]-128)+128}sendUniformData(r,t){r.uniform1f(t.uContrast,this.contrast)}};m(Tr,"type","Contrast"),m(Tr,"defaults",{contrast:0}),m(Tr,"uniformLocations",["uContrast"]),_.setClass(Tr);var Uu={Convolute_3_1:`
|
|
210
210
|
precision highp float;
|
|
211
211
|
uniform sampler2D uTexture;
|
|
212
212
|
uniform float uMatrix[9];
|
|
@@ -350,7 +350,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
350
350
|
gl_FragColor = color;
|
|
351
351
|
gl_FragColor.a = alpha;
|
|
352
352
|
}
|
|
353
|
-
`},
|
|
353
|
+
`},kr=class extends W{getCacheKey(){return`${this.type}_${Math.sqrt(this.matrix.length)}_${+!!this.opaque}`}getFragmentSource(){return Uu[this.getCacheKey()]}applyTo2d(r){let t=r.imageData,e=t.data,i=this.matrix,s=Math.round(Math.sqrt(i.length)),n=Math.floor(s/2),a=t.width,o=t.height,l=r.ctx.createImageData(a,o),h=l.data,c=+!!this.opaque,u,d,g,f,p,y,b,x,C,S,w,k,T;for(w=0;w<o;w++)for(S=0;S<a;S++){for(p=4*(w*a+S),u=0,d=0,g=0,f=0,T=0;T<s;T++)for(k=0;k<s;k++)b=w+T-n,y=S+k-n,b<0||b>=o||y<0||y>=a||(x=4*(b*a+y),C=i[T*s+k],u+=e[x]*C,d+=e[x+1]*C,g+=e[x+2]*C,c||(f+=e[x+3]*C));h[p]=u,h[p+1]=d,h[p+2]=g,h[p+3]=c?e[p+3]:f}r.imageData=l}sendUniformData(r,t){r.uniform1fv(t.uMatrix,this.matrix)}toObject(){return{...super.toObject(),opaque:this.opaque,matrix:[...this.matrix]}}};m(kr,"type","Convolute"),m(kr,"defaults",{opaque:!1,matrix:[0,0,0,0,1,0,0,0,0]}),m(kr,"uniformLocations",["uMatrix","uOpaque","uHalfSize","uSize"]),_.setClass(kr);var Rl="Gamma",Or=class extends W{getFragmentSource(){return`
|
|
354
354
|
precision highp float;
|
|
355
355
|
uniform sampler2D uTexture;
|
|
356
356
|
uniform vec3 uGamma;
|
|
@@ -364,7 +364,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
364
364
|
gl_FragColor = color;
|
|
365
365
|
gl_FragColor.rgb *= color.a;
|
|
366
366
|
}
|
|
367
|
-
`}constructor(r={}){super(r),this.gamma=r.gamma||this.constructor.defaults.gamma.concat()}applyTo2d({imageData:{data:r}}){let t=this.gamma,e=1/t[0],i=1/t[1],s=1/t[2];this.rgbValues||(this.rgbValues={r:new Uint8Array(256),g:new Uint8Array(256),b:new Uint8Array(256)});let n=this.rgbValues;for(let a=0;a<256;a++)n.r[a]=255*(a/255)**e,n.g[a]=255*(a/255)**i,n.b[a]=255*(a/255)**s;for(let a=0;a<r.length;a+=4)r[a]=n.r[r[a]],r[a+1]=n.g[r[a+1]],r[a+2]=n.b[r[a+2]]}sendUniformData(r,t){r.uniform3fv(t.uGamma,this.gamma)}isNeutralState(){let{gamma:r}=this;return r[0]===1&&r[1]===1&&r[2]===1}toObject(){return{type:Rl,gamma:this.gamma.concat()}}};m(
|
|
367
|
+
`}constructor(r={}){super(r),this.gamma=r.gamma||this.constructor.defaults.gamma.concat()}applyTo2d({imageData:{data:r}}){let t=this.gamma,e=1/t[0],i=1/t[1],s=1/t[2];this.rgbValues||(this.rgbValues={r:new Uint8Array(256),g:new Uint8Array(256),b:new Uint8Array(256)});let n=this.rgbValues;for(let a=0;a<256;a++)n.r[a]=255*(a/255)**e,n.g[a]=255*(a/255)**i,n.b[a]=255*(a/255)**s;for(let a=0;a<r.length;a+=4)r[a]=n.r[r[a]],r[a+1]=n.g[r[a+1]],r[a+2]=n.b[r[a+2]]}sendUniformData(r,t){r.uniform3fv(t.uGamma,this.gamma)}isNeutralState(){let{gamma:r}=this;return r[0]===1&&r[1]===1&&r[2]===1}toObject(){return{type:Rl,gamma:this.gamma.concat()}}};m(Or,"type",Rl),m(Or,"defaults",{gamma:[1,1,1]}),m(Or,"uniformLocations",["uGamma"]),_.setClass(Or);var qu={average:`
|
|
368
368
|
precision highp float;
|
|
369
369
|
uniform sampler2D uTexture;
|
|
370
370
|
varying vec2 vTexCoord;
|
|
@@ -393,7 +393,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
393
393
|
float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;
|
|
394
394
|
gl_FragColor = vec4(average, average, average, col.a);
|
|
395
395
|
}
|
|
396
|
-
`},
|
|
396
|
+
`},Mr=class extends W{applyTo2d({imageData:{data:r}}){for(let t,e=0;e<r.length;e+=4){let i=r[e],s=r[e+1],n=r[e+2];switch(this.mode){case"average":t=(i+s+n)/3;break;case"lightness":t=(Math.min(i,s,n)+Math.max(i,s,n))/2;break;case"luminosity":t=.21*i+.72*s+.07*n}r[e+2]=r[e+1]=r[e]=t}}getCacheKey(){return`${this.type}_${this.mode}`}getFragmentSource(){return qu[this.mode]}sendUniformData(r,t){r.uniform1i(t.uMode,1)}isNeutralState(){return!1}};m(Mr,"type","Grayscale"),m(Mr,"defaults",{mode:"average"}),m(Mr,"uniformLocations",["uMode"]),_.setClass(Mr);var Ku={...Il,rotation:0},Ti=class extends ue{calculateMatrix(){let r=this.rotation*Math.PI,t=Tt(r),e=kt(r),i=1/3,s=Math.sqrt(i)*e,n=1-t;this.matrix=[t+n/3,i*n-s,i*n+s,0,0,i*n+s,t+i*n,i*n-s,0,0,i*n-s,i*n+s,t+i*n,0,0,0,0,0,1,0]}isNeutralState(){return this.rotation===0}applyTo(r){this.calculateMatrix(),super.applyTo(r)}toObject(){return{type:this.type,rotation:this.rotation}}};m(Ti,"type","HueRotation"),m(Ti,"defaults",Ku),_.setClass(Ti);var Pr=class extends W{applyTo2d({imageData:{data:r}}){for(let t=0;t<r.length;t+=4)r[t]=255-r[t],r[t+1]=255-r[t+1],r[t+2]=255-r[t+2],this.alpha&&(r[t+3]=255-r[t+3])}getFragmentSource(){return`
|
|
397
397
|
precision highp float;
|
|
398
398
|
uniform sampler2D uTexture;
|
|
399
399
|
uniform int uInvert;
|
|
@@ -411,7 +411,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
411
411
|
gl_FragColor = color;
|
|
412
412
|
}
|
|
413
413
|
}
|
|
414
|
-
`}isNeutralState(){return!this.invert}sendUniformData(r,t){r.uniform1i(t.uInvert,Number(this.invert)),r.uniform1i(t.uAlpha,Number(this.alpha))}};m(
|
|
414
|
+
`}isNeutralState(){return!this.invert}sendUniformData(r,t){r.uniform1i(t.uInvert,Number(this.invert)),r.uniform1i(t.uAlpha,Number(this.alpha))}};m(Pr,"type","Invert"),m(Pr,"defaults",{alpha:!1,invert:!0}),m(Pr,"uniformLocations",["uInvert","uAlpha"]),_.setClass(Pr);var Er=class extends W{getFragmentSource(){return`
|
|
415
415
|
precision highp float;
|
|
416
416
|
uniform sampler2D uTexture;
|
|
417
417
|
uniform float uStepH;
|
|
@@ -426,7 +426,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
426
426
|
color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;
|
|
427
427
|
gl_FragColor = color;
|
|
428
428
|
}
|
|
429
|
-
`}applyTo2d({imageData:{data:r}}){let t=this.noise;for(let e=0;e<r.length;e+=4){let i=(.5-Math.random())*t;r[e]+=i,r[e+1]+=i,r[e+2]+=i}}sendUniformData(r,t){r.uniform1f(t.uNoise,this.noise/255),r.uniform1f(t.uSeed,Math.random())}isNeutralState(){return this.noise===0}};m(
|
|
429
|
+
`}applyTo2d({imageData:{data:r}}){let t=this.noise;for(let e=0;e<r.length;e+=4){let i=(.5-Math.random())*t;r[e]+=i,r[e+1]+=i,r[e+2]+=i}}sendUniformData(r,t){r.uniform1f(t.uNoise,this.noise/255),r.uniform1f(t.uSeed,Math.random())}isNeutralState(){return this.noise===0}};m(Er,"type","Noise"),m(Er,"defaults",{noise:0}),m(Er,"uniformLocations",["uNoise","uSeed"]),_.setClass(Er);var Ar=class extends W{applyTo2d({imageData:{data:r,width:t,height:e}}){for(let i=0;i<e;i+=this.blocksize)for(let s=0;s<t;s+=this.blocksize){let n=4*i*t+4*s,a=r[n],o=r[n+1],l=r[n+2],h=r[n+3];for(let c=i;c<Math.min(i+this.blocksize,e);c++)for(let u=s;u<Math.min(s+this.blocksize,t);u++){let d=4*c*t+4*u;r[d]=a,r[d+1]=o,r[d+2]=l,r[d+3]=h}}}isNeutralState(){return this.blocksize===1}getFragmentSource(){return`
|
|
430
430
|
precision highp float;
|
|
431
431
|
uniform sampler2D uTexture;
|
|
432
432
|
uniform float uBlocksize;
|
|
@@ -444,7 +444,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
444
444
|
vec4 color = texture2D(uTexture, squareCoords);
|
|
445
445
|
gl_FragColor = color;
|
|
446
446
|
}
|
|
447
|
-
`}sendUniformData(r,t){r.uniform1f(t.uBlocksize,this.blocksize)}};m(
|
|
447
|
+
`}sendUniformData(r,t){r.uniform1f(t.uBlocksize,this.blocksize)}};m(Ar,"type","Pixelate"),m(Ar,"defaults",{blocksize:4}),m(Ar,"uniformLocations",["uBlocksize"]),_.setClass(Ar);var Dr=class extends W{getFragmentSource(){return`
|
|
448
448
|
precision highp float;
|
|
449
449
|
uniform sampler2D uTexture;
|
|
450
450
|
uniform vec4 uLow;
|
|
@@ -456,7 +456,7 @@ void main() {
|
|
|
456
456
|
gl_FragColor.a = 0.0;
|
|
457
457
|
}
|
|
458
458
|
}
|
|
459
|
-
`}applyTo2d({imageData:{data:r}}){let t=255*this.distance,e=new ft(this.color).getSource(),i=[e[0]-t,e[1]-t,e[2]-t],s=[e[0]+t,e[1]+t,e[2]+t];for(let n=0;n<r.length;n+=4){let a=r[n],o=r[n+1],l=r[n+2];a>i[0]&&o>i[1]&&l>i[2]&&a<s[0]&&o<s[1]&&l<s[2]&&(r[n+3]=0)}}sendUniformData(r,t){let e=new ft(this.color).getSource(),i=this.distance,s=[0+e[0]/255-i,0+e[1]/255-i,0+e[2]/255-i,1],n=[e[0]/255+i,e[1]/255+i,e[2]/255+i,1];r.uniform4fv(t.uLow,s),r.uniform4fv(t.uHigh,n)}};m(
|
|
459
|
+
`}applyTo2d({imageData:{data:r}}){let t=255*this.distance,e=new ft(this.color).getSource(),i=[e[0]-t,e[1]-t,e[2]-t],s=[e[0]+t,e[1]+t,e[2]+t];for(let n=0;n<r.length;n+=4){let a=r[n],o=r[n+1],l=r[n+2];a>i[0]&&o>i[1]&&l>i[2]&&a<s[0]&&o<s[1]&&l<s[2]&&(r[n+3]=0)}}sendUniformData(r,t){let e=new ft(this.color).getSource(),i=this.distance,s=[0+e[0]/255-i,0+e[1]/255-i,0+e[2]/255-i,1],n=[e[0]/255+i,e[1]/255+i,e[2]/255+i,1];r.uniform4fv(t.uLow,s),r.uniform4fv(t.uHigh,n)}};m(Dr,"type","RemoveColor"),m(Dr,"defaults",{color:"#FFFFFF",distance:.02,useAlpha:!1}),m(Dr,"uniformLocations",["uLow","uHigh"]),_.setClass(Dr);var jr=class extends W{sendUniformData(r,t){r.uniform2fv(t.uDelta,this.horizontal?[1/this.width,0]:[0,1/this.height]),r.uniform1fv(t.uTaps,this.taps)}getFilterWindow(){let r=this.tempScale;return Math.ceil(this.lanczosLobes/r)}getCacheKey(){let r=this.getFilterWindow();return`${this.type}_${r}`}getFragmentSource(){let r=this.getFilterWindow();return this.generateShader(r)}getTaps(){let r=this.lanczosCreate(this.lanczosLobes),t=this.tempScale,e=this.getFilterWindow(),i=Array(e);for(let s=1;s<=e;s++)i[s-1]=r(s*t);return i}generateShader(r){let t=Array(r);for(let e=1;e<=r;e++)t[e-1]=`${e}.0 * uDelta`;return`
|
|
460
460
|
precision highp float;
|
|
461
461
|
uniform sampler2D uTexture;
|
|
462
462
|
uniform vec2 uDelta;
|
|
@@ -472,7 +472,7 @@ void main() {
|
|
|
472
472
|
`)}
|
|
473
473
|
gl_FragColor = color / sum;
|
|
474
474
|
}
|
|
475
|
-
`}applyToForWebgl(r){r.passes++,this.width=r.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=r.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),r.destinationWidth=this.dW,super.applyTo(r),r.sourceWidth=r.destinationWidth,this.height=r.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),r.destinationHeight=this.dH,super.applyTo(r),r.sourceHeight=r.destinationHeight}applyTo(r){Ki(r)?this.applyToForWebgl(r):this.applyTo2d(r)}isNeutralState(){return this.scaleX===1&&this.scaleY===1}lanczosCreate(r){return t=>{if(t>=r||t<=-r)return 0;if(t<11920929e-14&&t>-11920929e-14)return 1;let e=(t*=Math.PI)/r;return Math.sin(t)/t*Math.sin(e)/e}}applyTo2d(r){let t=r.imageData,e=this.scaleX,i=this.scaleY;this.rcpScaleX=1/e,this.rcpScaleY=1/i;let s=t.width,n=t.height,a=Math.round(s*e),o=Math.round(n*i),l;l=this.resizeType==="sliceHack"?this.sliceByTwo(r,s,n,a,o):this.resizeType==="hermite"?this.hermiteFastResize(r,s,n,a,o):this.resizeType==="bilinear"?this.bilinearFiltering(r,s,n,a,o):this.resizeType==="lanczos"?this.lanczosResize(r,s,n,a,o):new ImageData(a,o),r.imageData=l}sliceByTwo(r,t,e,i,s){let n=r.imageData,a=.5,o=!1,l=!1,h=t*a,c=e*a,u=r.filterBackend.resources,d=0,g=0,f=t,p=0;u.sliceByTwo||(u.sliceByTwo=jt());let y=u.sliceByTwo;(y.width<1.5*t||y.height<e)&&(y.width=1.5*t,y.height=e);let b=y.getContext("2d");for(b.clearRect(0,0,1.5*t,e),b.putImageData(n,0,0),i=Math.floor(i),s=Math.floor(s);!o||!l;)t=h,e=c,i<Math.floor(h*a)?h=Math.floor(h*a):(h=i,o=!0),s<Math.floor(c*a)?c=Math.floor(c*a):(c=s,l=!0),b.drawImage(y,d,g,t,e,f,p,h,c),d=f,g=p,p+=c;return b.getImageData(d,g,i,s)}lanczosResize(r,t,e,i,s){let n=r.imageData.data,a=r.ctx.createImageData(i,s),o=a.data,l=this.lanczosCreate(this.lanczosLobes),h=this.rcpScaleX,c=this.rcpScaleY,u=2/this.rcpScaleX,d=2/this.rcpScaleY,g=Math.ceil(h*this.lanczosLobes/2),f=Math.ceil(c*this.lanczosLobes/2),p={},y={x:0,y:0},b={x:0,y:0};return(function x(C){let S,w,k,T,O,M,D,E,A,j,B;for(y.x=(C+.5)*h,b.x=Math.floor(y.x),S=0;S<s;S++){for(y.y=(S+.5)*c,b.y=Math.floor(y.y),O=0,M=0,D=0,E=0,A=0,w=b.x-g;w<=b.x+g;w++)if(!(w<0||w>=t)){j=Math.floor(1e3*Math.abs(w-y.x)),p[j]||(p[j]={});for(let q=b.y-f;q<=b.y+f;q++)q<0||q>=e||(B=Math.floor(1e3*Math.abs(q-y.y)),p[j][B]||(p[j][B]=l(Math.sqrt((j*u)**2+(B*d)**2)/1e3)),k=p[j][B],k>0&&(T=4*(q*t+w),O+=k,M+=k*n[T],D+=k*n[T+1],E+=k*n[T+2],A+=k*n[T+3]))}T=4*(S*i+C),o[T]=M/O,o[T+1]=D/O,o[T+2]=E/O,o[T+3]=A/O}return++C<i?x(C):a})(0)}bilinearFiltering(r,t,e,i,s){let n,a,o,l,h,c,u,d,g,f,p,y,b,x=0,C=this.rcpScaleX,S=this.rcpScaleY,w=4*(t-1),k=r.imageData.data,T=r.ctx.createImageData(i,s),O=T.data;for(u=0;u<s;u++)for(d=0;d<i;d++)for(h=Math.floor(C*d),c=Math.floor(S*u),g=C*d-h,f=S*u-c,b=4*(c*t+h),p=0;p<4;p++)n=k[b+p],a=k[b+4+p],o=k[b+w+p],l=k[b+w+4+p],y=n*(1-g)*(1-f)+a*g*(1-f)+o*f*(1-g)+l*g*f,O[x++]=y;return T}hermiteFastResize(r,t,e,i,s){let n=this.rcpScaleX,a=this.rcpScaleY,o=Math.ceil(n/2),l=Math.ceil(a/2),h=r.imageData.data,c=r.ctx.createImageData(i,s),u=c.data;for(let d=0;d<s;d++)for(let g=0;g<i;g++){let f=4*(g+d*i),p,y=0,b=0,x=0,C=0,S=0,w=0,k=(d+.5)*a;for(let T=Math.floor(d*a);T<(d+1)*a;T++){let O=Math.abs(k-(T+.5))/l,M=(g+.5)*n,D=O*O;for(let E=Math.floor(g*n);E<(g+1)*n;E++){let A=Math.abs(M-(E+.5))/o,j=Math.sqrt(D+A*A);j>1&&j<-1||(p=2*j*j*j-3*j*j+1,p>0&&(A=4*(E+T*t),w+=p*h[A+3],b+=p,h[A+3]<255&&(p=p*h[A+3]/250),x+=p*h[A],C+=p*h[A+1],S+=p*h[A+2],y+=p))}}u[f]=x/y,u[f+1]=C/y,u[f+2]=S/y,u[f+3]=w/b}return c}};m(
|
|
475
|
+
`}applyToForWebgl(r){r.passes++,this.width=r.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=r.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),r.destinationWidth=this.dW,super.applyTo(r),r.sourceWidth=r.destinationWidth,this.height=r.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),r.destinationHeight=this.dH,super.applyTo(r),r.sourceHeight=r.destinationHeight}applyTo(r){Ki(r)?this.applyToForWebgl(r):this.applyTo2d(r)}isNeutralState(){return this.scaleX===1&&this.scaleY===1}lanczosCreate(r){return t=>{if(t>=r||t<=-r)return 0;if(t<11920929e-14&&t>-11920929e-14)return 1;let e=(t*=Math.PI)/r;return Math.sin(t)/t*Math.sin(e)/e}}applyTo2d(r){let t=r.imageData,e=this.scaleX,i=this.scaleY;this.rcpScaleX=1/e,this.rcpScaleY=1/i;let s=t.width,n=t.height,a=Math.round(s*e),o=Math.round(n*i),l;l=this.resizeType==="sliceHack"?this.sliceByTwo(r,s,n,a,o):this.resizeType==="hermite"?this.hermiteFastResize(r,s,n,a,o):this.resizeType==="bilinear"?this.bilinearFiltering(r,s,n,a,o):this.resizeType==="lanczos"?this.lanczosResize(r,s,n,a,o):new ImageData(a,o),r.imageData=l}sliceByTwo(r,t,e,i,s){let n=r.imageData,a=.5,o=!1,l=!1,h=t*a,c=e*a,u=r.filterBackend.resources,d=0,g=0,f=t,p=0;u.sliceByTwo||(u.sliceByTwo=jt());let y=u.sliceByTwo;(y.width<1.5*t||y.height<e)&&(y.width=1.5*t,y.height=e);let b=y.getContext("2d");for(b.clearRect(0,0,1.5*t,e),b.putImageData(n,0,0),i=Math.floor(i),s=Math.floor(s);!o||!l;)t=h,e=c,i<Math.floor(h*a)?h=Math.floor(h*a):(h=i,o=!0),s<Math.floor(c*a)?c=Math.floor(c*a):(c=s,l=!0),b.drawImage(y,d,g,t,e,f,p,h,c),d=f,g=p,p+=c;return b.getImageData(d,g,i,s)}lanczosResize(r,t,e,i,s){let n=r.imageData.data,a=r.ctx.createImageData(i,s),o=a.data,l=this.lanczosCreate(this.lanczosLobes),h=this.rcpScaleX,c=this.rcpScaleY,u=2/this.rcpScaleX,d=2/this.rcpScaleY,g=Math.ceil(h*this.lanczosLobes/2),f=Math.ceil(c*this.lanczosLobes/2),p={},y={x:0,y:0},b={x:0,y:0};return(function x(C){let S,w,k,T,O,M,D,E,A,j,B;for(y.x=(C+.5)*h,b.x=Math.floor(y.x),S=0;S<s;S++){for(y.y=(S+.5)*c,b.y=Math.floor(y.y),O=0,M=0,D=0,E=0,A=0,w=b.x-g;w<=b.x+g;w++)if(!(w<0||w>=t)){j=Math.floor(1e3*Math.abs(w-y.x)),p[j]||(p[j]={});for(let q=b.y-f;q<=b.y+f;q++)q<0||q>=e||(B=Math.floor(1e3*Math.abs(q-y.y)),p[j][B]||(p[j][B]=l(Math.sqrt((j*u)**2+(B*d)**2)/1e3)),k=p[j][B],k>0&&(T=4*(q*t+w),O+=k,M+=k*n[T],D+=k*n[T+1],E+=k*n[T+2],A+=k*n[T+3]))}T=4*(S*i+C),o[T]=M/O,o[T+1]=D/O,o[T+2]=E/O,o[T+3]=A/O}return++C<i?x(C):a})(0)}bilinearFiltering(r,t,e,i,s){let n,a,o,l,h,c,u,d,g,f,p,y,b,x=0,C=this.rcpScaleX,S=this.rcpScaleY,w=4*(t-1),k=r.imageData.data,T=r.ctx.createImageData(i,s),O=T.data;for(u=0;u<s;u++)for(d=0;d<i;d++)for(h=Math.floor(C*d),c=Math.floor(S*u),g=C*d-h,f=S*u-c,b=4*(c*t+h),p=0;p<4;p++)n=k[b+p],a=k[b+4+p],o=k[b+w+p],l=k[b+w+4+p],y=n*(1-g)*(1-f)+a*g*(1-f)+o*f*(1-g)+l*g*f,O[x++]=y;return T}hermiteFastResize(r,t,e,i,s){let n=this.rcpScaleX,a=this.rcpScaleY,o=Math.ceil(n/2),l=Math.ceil(a/2),h=r.imageData.data,c=r.ctx.createImageData(i,s),u=c.data;for(let d=0;d<s;d++)for(let g=0;g<i;g++){let f=4*(g+d*i),p,y=0,b=0,x=0,C=0,S=0,w=0,k=(d+.5)*a;for(let T=Math.floor(d*a);T<(d+1)*a;T++){let O=Math.abs(k-(T+.5))/l,M=(g+.5)*n,D=O*O;for(let E=Math.floor(g*n);E<(g+1)*n;E++){let A=Math.abs(M-(E+.5))/o,j=Math.sqrt(D+A*A);j>1&&j<-1||(p=2*j*j*j-3*j*j+1,p>0&&(A=4*(E+T*t),w+=p*h[A+3],b+=p,h[A+3]<255&&(p=p*h[A+3]/250),x+=p*h[A],C+=p*h[A+1],S+=p*h[A+2],y+=p))}}u[f]=x/y,u[f+1]=C/y,u[f+2]=S/y,u[f+3]=w/b}return c}};m(jr,"type","Resize"),m(jr,"defaults",{resizeType:"hermite",scaleX:1,scaleY:1,lanczosLobes:3}),m(jr,"uniformLocations",["uDelta","uTaps"]),_.setClass(jr);var Lr=class extends W{getFragmentSource(){return`
|
|
476
476
|
precision highp float;
|
|
477
477
|
uniform sampler2D uTexture;
|
|
478
478
|
uniform float uSaturation;
|
|
@@ -486,7 +486,7 @@ void main() {
|
|
|
486
486
|
color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;
|
|
487
487
|
gl_FragColor = color;
|
|
488
488
|
}
|
|
489
|
-
`}applyTo2d({imageData:{data:r}}){let t=-this.saturation;for(let e=0;e<r.length;e+=4){let i=r[e],s=r[e+1],n=r[e+2],a=Math.max(i,s,n);r[e]+=a===i?0:(a-i)*t,r[e+1]+=a===s?0:(a-s)*t,r[e+2]+=a===n?0:(a-n)*t}}sendUniformData(r,t){r.uniform1f(t.uSaturation,-this.saturation)}isNeutralState(){return this.saturation===0}};m(
|
|
489
|
+
`}applyTo2d({imageData:{data:r}}){let t=-this.saturation;for(let e=0;e<r.length;e+=4){let i=r[e],s=r[e+1],n=r[e+2],a=Math.max(i,s,n);r[e]+=a===i?0:(a-i)*t,r[e+1]+=a===s?0:(a-s)*t,r[e+2]+=a===n?0:(a-n)*t}}sendUniformData(r,t){r.uniform1f(t.uSaturation,-this.saturation)}isNeutralState(){return this.saturation===0}};m(Lr,"type","Saturation"),m(Lr,"defaults",{saturation:0}),m(Lr,"uniformLocations",["uSaturation"]),_.setClass(Lr);var Fr=class extends W{getFragmentSource(){return`
|
|
490
490
|
precision highp float;
|
|
491
491
|
uniform sampler2D uTexture;
|
|
492
492
|
uniform float uVibrance;
|
|
@@ -501,7 +501,7 @@ void main() {
|
|
|
501
501
|
color.b += max != color.b ? (max - color.b) * amt : 0.00;
|
|
502
502
|
gl_FragColor = color;
|
|
503
503
|
}
|
|
504
|
-
`}applyTo2d({imageData:{data:r}}){let t=-this.vibrance;for(let e=0;e<r.length;e+=4){let i=r[e],s=r[e+1],n=r[e+2],a=Math.max(i,s,n),o=(i+s+n)/3,l=2*Math.abs(a-o)/255*t;r[e]+=a===i?0:(a-i)*l,r[e+1]+=a===s?0:(a-s)*l,r[e+2]+=a===n?0:(a-n)*l}}sendUniformData(r,t){r.uniform1f(t.uVibrance,-this.vibrance)}isNeutralState(){return this.vibrance===0}};m(Lr,"type","Vibrance"),m(Lr,"defaults",{vibrance:0}),m(Lr,"uniformLocations",["uVibrance"]),_.setClass(Lr);var Ur=zr({BaseFilter:()=>W,BlackWhite:()=>Nu,BlendColor:()=>xr,BlendImage:()=>Cr,Blur:()=>wr,Brightness:()=>Sr,Brownie:()=>$u,ColorMatrix:()=>ue,Composed:()=>gn,Contrast:()=>_r,Convolute:()=>Tr,Gamma:()=>kr,Grayscale:()=>Or,HueRotation:()=>Ti,Invert:()=>Mr,Kodachrome:()=>Hu,Noise:()=>Pr,Pixelate:()=>Er,Polaroid:()=>Gu,RemoveColor:()=>Ar,Resize:()=>Dr,Saturation:()=>jr,Sepia:()=>Vu,Technicolor:()=>zu,Vibrance:()=>Lr,Vintage:()=>Wu});var Ge=class{listeners=new Map;on(t,e){this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(e)}off(t,e){this.listeners.get(t)?.delete(e)}once(t,e){let i=s=>{this.off(t,i),e(s)};this.on(t,i)}emit(t,e){let i=this.listeners.get(t);if(i)for(let s of i)s(e)}removeAllListeners(t){t?this.listeners.delete(t):this.listeners.clear()}};var zn=uh("crypto");var Bl="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var Ju=128,ee,Ve;function Zu(r){if(r<0)throw new RangeError("Wrong ID size");try{!ee||ee.length<r?(ee=Buffer.allocUnsafe(r*Ju),zn.webcrypto.getRandomValues(ee),Ve=0):Ve+r>ee.length&&(zn.webcrypto.getRandomValues(ee),Ve=0)}catch(t){throw ee=void 0,t}Ve+=r}function Xl(r=21){Zu(r|=0);let t="";for(let e=Ve-r;e<Ve;e++)t+=Bl[ee[e]&63];return t}var pt=()=>Xl(12);var Ne=class{id;type;name;visible;locked;opacity;meta;fabricObject;renderProxy;children;parentId;constructor(t,e,i,s){this.id=s??pt(),this.type=t,this.name=i??`${t}-${this.id.slice(0,4)}`,this.visible=!0,this.locked=!1,this.opacity=1,this.meta={},this.fabricObject=e,this.renderProxy=null,this.children=[],this.parentId=null,this.fabricObject._layerId=this.id}hasMeta(){return Object.keys(this.meta).length>0}toData(){return{id:this.id,type:this.type,name:this.name,visible:this.visible,locked:this.locked,opacity:this.opacity,...this.hasMeta()?{meta:this.meta}:{},...this.children.length>0?{children:this.children.map(t=>t.toData())}:{}}}serialize(){return{...this.toData(),fabricObject:this.fabricObject.toObject()}}},Ue=class{constructor(t,e){this.canvas=t;this.events=e}canvas;events;layers=[];onPropertyChanged;setHistoryCallback(t){this.onPropertyChanged=t}add(t,e,i,s){let n=new Ne(t,e,i,s);return this.layers.push(n),this.canvas.add(e),this.events.emit("layer:added",{layer:n.toData()}),this.emitChanged(),n}remove(t){let e=this.get(t);if(!e)return!1;if(e.parentId){let s=this.get(e.parentId);return s?(s.fabricObject.remove(e.fabricObject),s.children=s.children.filter(n=>n.id!==t),e.parentId=null,this.events.emit("layer:removed",{layerId:t}),s.children.length<2&&this.dissolve(s),this.emitChanged(),this.onPropertyChanged?.(),this.canvas.requestRenderAll(),!0):!1}let i=this.layers.findIndex(s=>s.id===t);return i===-1?!1:(this.canvas.remove(e.fabricObject),e.renderProxy&&this.canvas.remove(e.renderProxy),this.layers.splice(i,1),this.events.emit("layer:removed",{layerId:t}),this.emitChanged(),this.onPropertyChanged?.(),!0)}detach(t){let e=this.layers.findIndex(s=>s.id===t);if(e===-1)return;let[i]=this.layers.splice(e,1);return this.canvas.remove(i.fabricObject),i.renderProxy&&this.canvas.remove(i.renderProxy),i}explode(t){let e=[...t.children];return this.dissolve(t),this.events.emit("layer:removed",{layerId:t.id}),this.emitChanged(),this.onPropertyChanged?.(),this.canvas.requestRenderAll(),e}dissolve(t){let e=t.fabricObject.removeAll(),i=this.layers.findIndex(n=>n.id===t.id),s=t.children;t.children=[];for(let[n,a]of e.entries()){a.setCoords();let o=s[n];o&&(o.parentId=null,this.layers.splice(i+n,0,o),this.canvas.add(a),o.renderProxy&&this.canvas.add(o.renderProxy))}this.canvas.remove(t.fabricObject),this.layers=this.layers.filter(n=>n.id!==t.id),this.syncZOrder()}adoptChildren(t,e){for(let i of e)i.parentId=t.id;t.children=e,this.emitChanged(),this.onPropertyChanged?.()}adoptGroupChildren(t,e){let i=t.fabricObject.getObjects();t.children=i.map((s,n)=>{let a=e[n],o=new Ne(a?.type??"shape",s,a?.name,a?.id);return o.parentId=t.id,a?.meta&&(o.meta=structuredClone(a.meta)),a&&!a.visible&&(o.visible=!1,s.visible=!1),a?.locked&&(o.locked=!0,s.selectable=!1,s.evented=!1),a&&a.opacity!==1&&(o.opacity=a.opacity,s.opacity=a.opacity),o}),this.emitChanged()}replaceObject(t,e){let i=this.get(t);if(!i||i.fabricObject===e)return!1;let s=i.fabricObject,n=this.canvas.getObjects().indexOf(s),a=this.canvas.getActiveObject()===s;return this.canvas.remove(s),i.fabricObject=e,e._layerId=t,e.set({visible:i.visible,opacity:i.opacity,selectable:!i.locked,evented:!i.locked}),this.canvas.insertAt(Math.max(0,n),e),i.renderProxy&&(e.set({opacity:0}),this.syncZOrder()),a&&this.canvas.setActiveObject(e),this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.emitChanged(),this.onPropertyChanged?.(),!0}setRenderProxy(t,e){let i=this.get(t);!i||i.renderProxy===e||(i.renderProxy&&this.canvas.remove(i.renderProxy),i.renderProxy=e,e&&(e._layerId=t,e.set({visible:i.visible,opacity:i.opacity,selectable:!i.locked,evented:!i.locked}),this.canvas.add(e),this.syncZOrder()),this.canvas.requestRenderAll(),this.emitChanged())}syncZOrder(){for(let t of this.layers)this.canvas.bringObjectToFront(t.fabricObject),t.renderProxy&&this.canvas.bringObjectToFront(t.renderProxy)}siblingsOf(t){return t.parentId?this.get(t.parentId)?.children??this.layers:this.layers}reorder(t,e){let i=this.get(t);if(!i)return!1;let s=this.siblingsOf(i),n=s.indexOf(i);if(n===-1||!Number.isFinite(e))return!1;let a=Math.max(0,Math.min(s.length-1,Math.round(e)));if(n===a)return!1;let[o]=s.splice(n,1);if(s.splice(a,0,o),o.parentId){let l=this.get(o.parentId)?.fabricObject;l&&(l.remove(o.fabricObject),l.insertAt(a,o.fabricObject))}else this.syncZOrder();return this.events.emit("layer:reordered",{layerIds:s.map(l=>l.id)}),this.emitChanged(),this.onPropertyChanged?.(),!0}select(t){if(t===null)this.canvas.discardActiveObject(),this.exitGroups();else{let i=this.get(t);i&&(i.parentId?this.enterGroup(i.parentId):this.exitGroups(),this.canvas.setActiveObject(i.renderProxy??i.fabricObject))}this.canvas.requestRenderAll(),this.events.emit("layer:selected",{layerId:t});let e=t&&this.get(t)?[t]:[];this.events.emit("selection:changed",{selected:e})}enterGroup(t){let e=this.get(t);if(!e)return;let i=e.fabricObject;i.subTargetCheck=!0,i.interactive=!0}exitGroups(){for(let t of this.layers){if(t.type!=="group")continue;let e=t.fabricObject;e.interactive&&(e.interactive=!1)}}selectMany(t){let e=t.flatMap(s=>{let n=this.get(s);return n&&!n.parentId?[n]:[]});if(e.length===0)return this.select(null);if(e.length===1)return this.select(e[0].id);this.canvas.discardActiveObject(),this.exitGroups();let i=new Le(e.map(s=>s.renderProxy??s.fabricObject),{canvas:this.canvas});this.canvas.setActiveObject(i),this.canvas.requestRenderAll(),this.events.emit("selection:changed",{selected:e.map(s=>s.id)})}*walk(t=this.layers){for(let e of t)yield e,e.children.length>0&&(yield*this.walk(e.children))}get(t){for(let e of this.walk())if(e.id===t)return e}getAll(){return[...this.layers]}getTree(){return this.layers.map(t=>t.toData())}findByObject(t){let e=t._layerId;if(e)return this.get(e);for(let i of this.walk())if(i.fabricObject===t)return i}setVisibility(t,e){let i=this.get(t);i&&i.visible!==e&&(i.visible=e,i.fabricObject.visible=e,i.renderProxy&&(i.renderProxy.visible=e),this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.())}setLocked(t,e){let i=this.get(t);if(!i||i.locked===e)return;i.locked=e;let s=i.renderProxy??i.fabricObject;s.selectable=!e,s.evented=!e,this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.()}setOpacity(t,e){let i=this.get(t);if(!i||!Number.isFinite(e))return;let s=Math.max(0,Math.min(1,e));i.opacity!==s&&(i.opacity=s,i.renderProxy?i.renderProxy.opacity=s:i.fabricObject.opacity=s,this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.())}setName(t,e){let i=this.get(t);i&&i.name!==e&&(i.name=e,this.emitChanged(),this.onPropertyChanged?.())}setMeta(t,e){let i=this.get(t);if(!i)return;let s={...i.meta},n=!1;for(let[a,o]of Object.entries(e)){if(o===void 0){a in s&&(delete s[a],n=!0);continue}s[a]!==o&&(n=!0),s[a]=o}n&&(i.meta=s,this.emitChanged(),this.onPropertyChanged?.())}clear(){for(let t of this.layers)this.canvas.remove(t.fabricObject),t.renderProxy&&this.canvas.remove(t.renderProxy),t.children=[];this.layers=[],this.emitChanged()}count(){return this.layers.length}emitChanged(){this.events.emit("layers:changed",{layers:this.layers.map(t=>t.toData())})}};var Yl=24;function Qu(r){return typeof r.text=="string"}function td(r,t){let e=new Map(r.parameters.map(s=>[s.key,s.label||s.key])),i=new Map;for(let s of r.svg.matchAll(/<text\b[^>]*>([\s\S]*?)<\/text>/g)){let n=/\{\{(\w+)(?:[|:]([^}]*))?\}\}/.exec(s[1]);if(!n)continue;let a=e.get(n[1]);if(!a)continue;let o=String(t[n[1]]??n[2]??"").trim();o&&i.set(o,a)}return i}function ed(r,t){let e=r.trim(),i=t.get(e);return i||(e?e.length>Yl?`${e.slice(0,Yl-1)}\u2026`:e:"Text")}function rd(r){let t=r.id;if(typeof t=="string"&&t)return t;let e=r.type||"shape";return e.charAt(0).toUpperCase()+e.slice(1)}function id(r){return new Bt(r.text,{left:r.left,top:r.top,originX:r.originX,originY:r.originY,angle:r.angle,scaleX:r.scaleX,scaleY:r.scaleY,fontSize:r.fontSize,fontFamily:r.fontFamily,fontWeight:r.fontWeight,fontStyle:r.fontStyle,textAlign:r.textAlign,charSpacing:r.charSpacing,lineHeight:r.lineHeight,fill:r.fill,stroke:r.stroke,strokeWidth:r.strokeWidth,opacity:r.opacity,width:Math.max(1,(r.width??0)+2)})}function Gn(r,t,e){if(r.id==="circular-text")return{arc:100,wave:0};if(r.id==="wave-text")return{arc:0,wave:50};let i=Number(t.radius??200);if(!Number.isFinite(i)||i<=0)return{arc:0,wave:0};let s=100*e/(Math.PI*i);return{arc:Math.max(-100,Math.min(100,s)),wave:0}}function Ji(r,t){let e=String(t.text??"Text"),i=r.id==="circular-text"?28:40,s=new Bt(e,{fontSize:i,fontFamily:String(t.font??"Arial"),fontWeight:"bold",fill:String(t.color??"#000000"),originX:"left",originY:"top",width:Math.max(1,e.length*i*.62)});return{type:"text",name:r.parameters.find(n=>n.key==="text")?.label||"Text",object:s,curve:Gn(r,t,s.width??0)}}async function Zi(r,t,e){let i=td(r,e),{objects:s}=await Fl(t),n=[];for(let a of s)if(a!==null){if(Qu(a)){n.push({type:"text",name:ed(a.text,i),object:id(a)});continue}n.push({type:"shape",name:rd(a),object:a})}return n}var qe=class r{static ASSET_KEY="__canvasEditorHistoryAsset";undoStack=[];redoStack=[];assets=new Map;assetIds=new Map;nextAssetId=1;maxSize;maxBytes;paused=!1;debounceTimer=null;debounceMs;getState;restoreState;events;transactionDepth=0;transactionDirty=!1;constructor(t){this.getState=t.getState,this.restoreState=t.restoreState,this.events=t.events,this.maxSize=t.maxSize??50,this.maxBytes=t.maxBytes??50*1024*1024,this.debounceMs=t.debounceMs??300}save(){if(!this.paused){if(this.transactionDepth>0){this.transactionDirty=!0;return}this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{this.saveImmediate()},this.debounceMs),this.emitChanged()}}saveImmediate(){if(this.paused){this.cancelPending();return}if(this.transactionDepth>0){this.transactionDirty=!0;return}this.cancelPending();let t=this.getState(),e=this.compactState(t);if(this.undoStack.at(-1)===e){this.emitChanged();return}for(this.undoStack.push(e);this.undoStack.length>this.maxSize;)this.undoStack.shift();this.redoStack=[],this.trimToBudget(),this.events.emit("history:snapshot",{bytes:t.length*2,totalBytes:this.snapshotBytes(),entries:this.undoStack.length}),this.emitChanged()}beginTransaction(){this.transactionDepth===0&&this.debounceTimer&&this.saveImmediate(),this.transactionDepth+=1}endTransaction(){this.transactionDepth!==0&&(this.transactionDepth-=1,this.transactionDepth===0&&this.transactionDirty&&(this.transactionDirty=!1,this.saveImmediate()))}async transaction(t){this.beginTransaction();try{return await t()}finally{this.endTransaction()}}async undo(){this.cancelPending();let t=this.undoStack.at(-1);if(!t)return;let e=this.compactState(this.getState()),i=e===t;if(i&&this.undoStack.length<2)return;let s=i?this.undoStack[this.undoStack.length-2]:t;this.paused=!0;try{await this.restoreState(this.expandState(s)),i&&this.undoStack.pop(),this.redoStack.push(e),this.trimToBudget()}catch(n){throw this.events.emit("error",{message:"Failed to undo the last change",error:n}),n}finally{this.paused=!1,this.emitChanged()}}async redo(){this.cancelPending();let t=this.redoStack.at(-1);if(t){this.paused=!0;try{await this.restoreState(this.expandState(t)),this.redoStack.pop(),this.undoStack.at(-1)!==t&&this.undoStack.push(t),this.trimToBudget()}catch(e){throw this.events.emit("error",{message:"Failed to redo the last change",error:e}),e}finally{this.paused=!1,this.emitChanged()}}}isRestoring(){return this.paused}pause(){this.paused=!0}resume(){this.paused=!1}canUndo(){return this.undoStack.length>1||this.debounceTimer!==null}canRedo(){return this.redoStack.length>0}clear(){this.cancelPending(),this.undoStack=[],this.redoStack=[],this.assets.clear(),this.assetIds.clear(),this.emitChanged()}getSnapshotBytes(){return this.snapshotBytes()}cancelPending(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}dispose(){this.cancelPending(),this.transactionDepth=0,this.transactionDirty=!1,this.undoStack=[],this.redoStack=[],this.assets.clear(),this.assetIds.clear()}emitChanged(){this.events.emit("history:changed",{canUndo:this.canUndo(),canRedo:this.canRedo()})}snapshotBytes(){let t=[...this.undoStack,...this.redoStack].reduce((i,s)=>i+s.length*2,0),e=[...this.assets.values()].reduce((i,s)=>i+s.length*2,0);return t+e}trimToBudget(){for(this.pruneAssets();this.undoStack.length>1&&this.snapshotBytes()>this.maxBytes;)this.undoStack.shift(),this.pruneAssets();for(;this.redoStack.length>1&&this.snapshotBytes()>this.maxBytes;)this.redoStack.shift(),this.pruneAssets()}compactState(t){let e;try{e=JSON.parse(t)}catch{return t}let i=s=>{if(typeof s=="string"&&/^data:image\/(?:png|jpeg|webp);base64,/i.test(s)){let n=this.assetIds.get(s);return n||(n=`a${this.nextAssetId++}`,this.assetIds.set(s,n),this.assets.set(n,s)),{[r.ASSET_KEY]:n}}return Array.isArray(s)?s.map(i):!s||typeof s!="object"?s:Object.fromEntries(Object.entries(s).map(([n,a])=>[n,i(a)]))};return JSON.stringify(i(e))}expandState(t){let e;try{e=JSON.parse(t)}catch{return t}let i=s=>{if(Array.isArray(s))return s.map(i);if(!s||typeof s!="object")return s;let n=s,a=n[r.ASSET_KEY];if(typeof a=="string"&&Object.keys(n).length===1){let o=this.assets.get(a);if(!o)throw new Error(`Missing history raster asset: ${a}`);return o}return Object.fromEntries(Object.entries(n).map(([o,l])=>[o,i(l)]))};return JSON.stringify(i(e))}pruneAssets(){if(this.assets.size===0)return;let t=[...this.undoStack,...this.redoStack];for(let[e,i]of this.assets){let s=`"${r.ASSET_KEY}":"${e}"`;t.some(n=>n.includes(s))||(this.assets.delete(e),this.assetIds.delete(i))}}};var sd="#22c55e",Ke=class{constructor(t,e){this.canvas=t;this.events=e;this.onMoving=i=>this.handleMoving(i.target),this.onAfterRender=()=>this.drawGuides(),this.onModified=()=>this.clearGuides(),this.canvas.on("object:moving",this.onMoving),this.canvas.on("after:render",this.onAfterRender),this.canvas.on("mouse:up",this.onModified),this.canvas.on("selection:cleared",this.onModified)}canvas;events;enabled=!1;threshold=8;guides=[];onMoving;onAfterRender;onModified;setEnabled(t){this.enabled!==t&&(this.enabled=t,t||this.clearGuides(),this.events.emit("snap:changed",{enabled:t}))}isEnabled(){return this.enabled}setThreshold(t){this.threshold=Math.max(0,t)}dispose(){this.canvas.off("object:moving",this.onMoving),this.canvas.off("after:render",this.onAfterRender),this.canvas.off("mouse:up",this.onModified),this.canvas.off("selection:cleared",this.onModified),this.guides=[]}handleMoving(t){if(!this.enabled||!t)return;t.setCoords();let e=t.getBoundingRect(),i=this.canvas.getWidth(),s=this.canvas.getHeight(),{xs:n,ys:a}=nd(this.canvas,t,i,s);this.guides=[];let o=$l([e.left,e.left+e.width/2,e.left+e.width],n,this.threshold);o!==null&&(t.set("left",(t.left??0)+o.delta),this.guides.push({x:o.line}));let l=$l([e.top,e.top+e.height/2,e.top+e.height],a,this.threshold);l!==null&&(t.set("top",(t.top??0)+l.delta),this.guides.push({y:l.line})),t.setCoords()}drawGuides(){if(!this.enabled||this.guides.length===0)return;let t=this.canvas.contextTop;if(!t)return;let e=this.canvas.getRetinaScaling(),i=this.canvas.getWidth(),s=this.canvas.getHeight();t.save(),t.setTransform(e,0,0,e,0,0),t.lineWidth=1,t.strokeStyle=sd,t.setLineDash([4,4]),t.beginPath();for(let n of this.guides)n.x!==void 0&&(t.moveTo(n.x,0),t.lineTo(n.x,s)),n.y!==void 0&&(t.moveTo(0,n.y),t.lineTo(i,n.y));t.stroke(),t.restore()}clearGuides(){this.guides.length!==0&&(this.guides=[],this.canvas.clearContext(this.canvas.contextTop))}};function nd(r,t,e,i){let s=[0,e/2,e],n=[0,i/2,i];for(let a of r.getObjects()){if(a===t||!a.visible)continue;a.setCoords();let o=a.getBoundingRect();s.push(o.left,o.left+o.width/2,o.left+o.width),n.push(o.top,o.top+o.height/2,o.top+o.height)}return{xs:s,ys:n}}function $l(r,t,e){let i=null;for(let s of r)for(let n of t){let a=Math.abs(s-n);a<=e&&(i===null||a<i.dist)&&(i={delta:n-s,line:n,dist:a})}return i?{delta:i.delta,line:i.line}:null}function H(r,t,e){return Math.min(e,Math.max(t,r))}function Q(r){return Math.round(r*100)/100}var Je=class{constructor(t,e,i){this.canvas=t;this.history=e;this.events=i;this.onSelectionCleared=()=>{this.session&&this.cancel()},this.canvas.on("selection:cleared",this.onSelectionCleared)}canvas;history;events;session=null;onSelectionCleared;isActive(){return this.session!==null}activeLayerId(){return this.session?.layerId??null}start(t){if(t.type!=="image")return;this.session&&this.cancel();let e=t.fabricObject,i=e.angle??0;i&&e.rotate(0),e.setCoords();let s=e.getBoundingRect(),n=new dt({left:s.left,top:s.top,width:s.width,height:s.height,originX:"left",originY:"top",fill:"rgba(34,197,94,0.12)",stroke:Wl,strokeWidth:1,strokeDashArray:[4,4],strokeUniform:!0,lockRotation:!0,cornerColor:Wl,transparentCorners:!1});n.setControlsVisibility({mtr:!1});let a=e.selectable??!0,o=e.evented??!0;e.selectable=!1,e.evented=!1,this.canvas.add(n),this.canvas.setActiveObject(n),this.canvas.requestRenderAll(),this.session={layerId:t.id,image:e,rect:n,prevSelectable:a,prevEvented:o,prevAngle:i},this.events.emit("crop:changed",{active:!0,layerId:t.id})}apply(){let t=this.session;if(!t)return;let{image:e,rect:i}=t;i.setCoords(),e.setCoords();let s=e.scaleX??1,n=e.scaleY??1,a=e.left??0,o=e.top??0,l=e.getElement(),h=l.naturalWidth||e.width||0,c=l.naturalHeight||e.height||0,u=(e.cropX??0)+(i.left-a)/s,d=(e.cropY??0)+(i.top-o)/n,g=i.getScaledWidth()/s,f=i.getScaledHeight()/n;u=H(u,0,Math.max(0,h-1)),d=H(d,0,Math.max(0,c-1)),g=H(g,1,h-u),f=H(f,1,c-d),e.set({cropX:u,cropY:d,width:g,height:f,left:a+(u-(e.cropX??0))*s,top:o+(d-(e.cropY??0))*n}),e.setCoords(),t.prevAngle&&(e.rotate(t.prevAngle),e.setCoords()),this.finish(),this.history.save()}cancel(){let t=this.session;t&&(t.prevAngle&&(t.image.rotate(t.prevAngle),t.image.setCoords()),this.finish())}dispose(){this.cancel(),this.canvas.off("selection:cleared",this.onSelectionCleared)}finish(){let t=this.session;t&&(this.session=null,this.canvas.remove(t.rect),t.image.selectable=t.prevSelectable,t.image.evented=t.prevEvented,this.canvas.setActiveObject(t.image),this.canvas.requestRenderAll(),this.events.emit("crop:changed",{active:!1,layerId:null}))}},Wl="#22c55e";var Qi=.5,ad=1e5;function od(r){let t=r.width;try{r.set({width:ad}),r.initDimensions?.();let e=r.calcTextWidth?.()??t;return Number.isFinite(e)&&e>0?e:t}finally{r.set({width:t}),r.initDimensions?.()}}function qr(r){if(!r)return null;let t=r;return typeof t.text=="string"&&typeof t.calcTextWidth=="function"?t:null}function Ze(r){let t=Math.max(0,r.width??0),e=r.calcTextWidth?.()??t,i=Math.max(1,Math.min(t,Number.isFinite(e)?e:t)),s=(t-i)/2,n=r.textAlign??"left";if(n.includes("center"))return{width:i,dx:0};let a=r.flipX?-1:1;return{width:i,dx:a*(n.includes("right")?s:-s)}}function Hl(r){let t=qr(r);if(!t||t.path)return!1;let e=Ze(t),i=od(t)+Qi;if(Math.abs(i-t.width)<Qi)return!1;let s=t.getCenterPoint();t.set({width:i}),t.initDimensions?.();let n=Ze(t),a=(e.dx-n.dx)*(t.scaleX??1),o=(t.angle??0)*Math.PI/180,l=new v(s.x+a*Math.cos(o),s.y+a*Math.sin(o));return t.setPositionByOrigin(l,"center","center"),t.setCoords(),t.dirty=!0,!0}function ts(r,t,e,i,s,n){let a=n??{x:t/2,y:e/2},l=ld(a,t,e)*2,h=Math.max(1,l/200),c=Math.max(h,i*(1+r.horizontalSpacing/100)),u=Math.max(h,s*(1+r.verticalSpacing/100)),d=Math.ceil(l/c)+2,g=Math.ceil(l/u)+2,[f,p]=zl(r.horizontalLimit,Math.ceil(d/2)),[y,b]=zl(r.verticalLimit,Math.ceil(g/2)),x=c*(Gl(r.offsetX)/100),C=u*(Gl(r.offsetY)/100),S=[];for(let w=y;w<=b;w++)for(let k=f;k<=p;k++){let T=k*c+x,O=w*u+C;r.mode==="brick-horizontal"&&Vl(w)===1?T+=c*(r.horizontalOffset/100):r.mode==="brick-vertical"&&Vl(k)===1&&(O+=u*(r.horizontalOffset/100));let M=(k*r.rotationStepH+w*r.rotationStepV)*Math.PI/180;S.push({x:T,y:O,rotation:M})}return S}function Qe(r,t,e,i,s,n,a,o,l){let h=o??{x:i/2,y:s/2},c=l&&l.width>0?l.width:n,u=l&&l.height>0?l.height:a;r.save(),r.translate(h.x,h.y),r.rotate(e.angle*Math.PI/180);for(let d of ts(e,i,s,n,a,h))r.save(),r.translate(d.x,d.y),r.rotate(d.rotation),r.drawImage(t,-c/2,-u/2,c,u),r.restore();r.restore()}function zl(r,t){let e=Number.isFinite(r)?Math.floor(r):0;if(!e||e<=0)return[-t,t];let i=-Math.floor((e-1)/2);return[i,i+e-1]}function ld(r,t,e){let i=Math.max(Math.abs(r.x),Math.abs(t-r.x)),s=Math.max(Math.abs(r.y),Math.abs(e-r.y));return Math.sqrt(i*i+s*s)}function Gl(r){return typeof r!="number"||!Number.isFinite(r)?0:Math.max(-100,Math.min(100,r))}function Vl(r){return(r%2+2)%2}var hd=16e6,cd=8,ud=2,Nl=2,re=class r extends G{static type="TiledPattern";source;config;area;snapshotEl=null;snapshotScale=0;constructor(t,e,i){super({originX:"center",originY:"center",objectCaching:!1,lockScalingFlip:!0}),this.source=t,this.config=e,this.area=i,this.setControlsVisibility({ml:!1,mr:!1,mt:!1,mb:!1}),this.syncBox()}setConfig(t){this.config=t,this.syncBox()}setArea(t){this.area=t,this.invalidate(),this.syncBox()}invalidate(){this.snapshotEl=null,this.snapshotScale=0,this.dirty=!0}dispose(){this.snapshotEl=null,this.snapshotScale=0}syncBox(){let{tileW:t,tileH:e}=this.baseTile(),i=this.source.getCenterPoint().add(this.inkOffset()),s=this.anchorFromOrigin(i,t,e,this.config.angle);this.set({left:s.x,top:s.y,width:t,height:e,scaleX:1,scaleY:1,angle:this.config.angle}),this.setCoords(),this.dirty=!0}liveAngle(){return this.angle??0}liveScale(){return(this.config.scale??100)*Math.abs(this.scaleX??1)}liveOrigin(){let{tileW:t,tileH:e}=this.liveTile(),i=this.getCenterPoint(),s=this.shiftVector(t,e,this.liveAngle()),n=this.inkOffset();return new v(i.x-s.x-n.x,i.y-s.y-n.y)}_render(t){let{width:e,height:i}=this.area;if(e<=0||i<=0)return;let{tileW:s,tileH:n}=this.liveTile(),a=gd(t),o=this.ensureSnapshot(a*(s/Math.max(1,this.baseW())));if(!o)return;let l=this.getCenterPoint(),h=this.liveAngle();t.save(),t.scale(1/(this.scaleX||1),1/(this.scaleY||1)),t.rotate(-h*Math.PI/180),t.translate(-l.x,-l.y);let c={x:l.x,y:l.y},u={...this.config,angle:h,offsetX:0,offsetY:0};Qe(t,o,u,e,i,s,n,c,this.drawSize(s,n,Nl/a)),t.restore()}_toSVG(){let{width:t,height:e}=this.area;if(t<=0||e<=0)return[];let i=document.createElement("canvas");i.width=Math.max(1,Math.round(t)),i.height=Math.max(1,Math.round(e));let s=i.getContext("2d");if(!s)return[];let{tileW:n,tileH:a}=this.liveTile(),o=this.ensureSnapshot(n/Math.max(1,this.baseW()));if(!o)return[];let l=this.getCenterPoint(),h=this.liveAngle();return Qe(s,o,{...this.config,angle:h,offsetX:0,offsetY:0},t,e,n,a,{x:l.x,y:l.y},this.drawSize(n,a,Nl)),[`<g transform="rotate(${-h}) translate(${-l.x} ${-l.y})">`,`<image x="0" y="0" width="${t}" height="${e}" `,`xlink:href="${i.toDataURL("image/png")}"></image></g>
|
|
505
|
-
`]}toObject(){let t=super.toObject();return delete t.source,t}clone(){let t=new r(this.source,this.config,this.area);return t.set({left:this.left,top:this.top,angle:this.angle,scaleX:this.scaleX,scaleY:this.scaleY,width:this.width,height:this.height,visible:this.visible,opacity:this.opacity}),Promise.resolve(t)}sourceBox(){let t=qr(this.source),e=dd(this.source),i=this.source.getBoundingRect();if(e&&!t)return{width:i.width,height:i.height};let s={};e||(s.strokeWidth=0),t&&(s.width=Ze(t).width);let n=this.source._getTransformedDimensions(s),a=(this.source.angle??0)*Math.PI/180,o=Math.abs(Math.cos(a)),l=Math.abs(Math.sin(a));return{width:n.x*o+n.y*l,height:n.x*l+n.y*o}}inkOffset(){let t=qr(this.source);if(!t)return new v(0,0);let{dx:e}=Ze(t);if(!e)return new v(0,0);let i=e*(this.source.scaleX??1),s=(this.source.angle??0)*Math.PI/180;return new v(i*Math.cos(s),i*Math.sin(s))}baseW(){return Math.max(1,this.sourceBox().width)}baseH(){return Math.max(1,this.sourceBox().height)}drawSize(t,e,i=0){let s=this.snapshotEl;return!s||this.snapshotScale<=0?{width:t+i,height:e+i}:{width:s.width/this.snapshotScale*(t/this.baseW())+i,height:s.height/this.snapshotScale*(e/this.baseH())+i}}baseTile(){let t=this.sourceBox(),e=Math.max(1,this.config.scale??100)/100,i=this.tileFloor();return{tileW:Math.max(i,t.width*e),tileH:Math.max(i,t.height*e)}}liveTile(){let t=this.baseTile(),e=this.tileFloor();return{tileW:Math.max(e,t.tileW*Math.abs(this.scaleX??1)),tileH:Math.max(e,t.tileH*Math.abs(this.scaleY??1))}}tileFloor(){let{width:t,height:e}=this.area;return Math.max(2,Math.sqrt(t*t+e*e)/200)}shiftVector(t,e,i){let s=t*(Ul(this.config.offsetX)/100),n=e*(Ul(this.config.offsetY)/100),a=i*Math.PI/180,o=Math.cos(a),l=Math.sin(a);return new v(s*o-n*l,s*l+n*o)}anchorFromOrigin(t,e,i,s){let n=this.shiftVector(e,i,s);return new v(t.x+n.x,t.y+n.y)}ensureSnapshot(t){let e=this.clampScale(t);if(!(this.source.dirty||!this.snapshotEl||this.snapshotScale<e||this.snapshotScale>e*ud))return this.snapshotEl;let s=this.source,n=s.opacity;s.opacity=1;let a=qr(s),o=a?.width,l=a?Ze(a).width+Qi:0,h=a!==null&&o!==void 0&&l<o;try{h&&a&&(a.set({width:l}),a.initDimensions?.());let c=s.toCanvasElement({multiplier:e,enableRetinaScaling:!1});if(!c.width||!c.height)return null;this.snapshotEl=c,this.snapshotScale=e}catch{return this.snapshotEl}finally{s.opacity=n,h&&a&&o!==void 0&&(a.set({width:o}),a.initDimensions?.()),s.dirty=!1}return this.snapshotEl}clampScale(t){let e=Math.min(cd,Math.max(.05,t)),i=this.source.getBoundingRect(),s=Math.max(1,i.width*i.height),n=Math.sqrt(hd/s);return Math.max(.05,Math.min(e,n))}};function dd(r){if(!r.strokeWidth||r.strokeWidth<=0)return!1;let{stroke:t}=r;return typeof t=="string"?t!==""&&t!=="transparent":t!=null}function Ul(r){return typeof r!="number"||!Number.isFinite(r)?0:Math.max(-100,Math.min(100,r))}function gd(r){if(typeof r.getTransform!="function")return 1;try{let t=r.getTransform();return Math.max(Math.hypot(t.a,t.b),Math.hypot(t.c,t.d),.05)}catch{return 1}}var fd=10,pd=300,be=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s;this.canvas.on("object:modified",this.onObjectModified),this.canvas.on("text:changed",this.onSourceModified),this.events.on("layer:removed",this.onLayerRemoved)}canvas;layers;history;events;proxies=new Map;onObjectModified=t=>{let e=t.target;e instanceof re?this.commitGesture(e):this.invalidateFor(e)};onSourceModified=t=>{this.invalidateFor(t.target)};onLayerRemoved=({layerId:t})=>{let e=this.proxies.get(t);e&&(e.dispose(),this.proxies.delete(t))};isPattern(t){return!!this.layers.get(t)?.meta.pattern}getConfig(t){return this.layers.get(t)?.meta.pattern?.config??null}async apply(t,e){let i=this.layers.get(t);if(i)try{this.layers.setMeta(t,{pattern:{config:e}});let s=this.proxies.get(t);s?(s.setConfig(e),this.canvas.requestRenderAll()):this.attach(i,e),this.history.save()}catch(s){throw this.events.emit("error",{message:"Failed to apply pattern",error:s}),s}}async disable(t){let e=this.layers.get(t);if(e?.meta.pattern)try{this.detach(t),Kr(e.fabricObject,e.meta.pattern.originalLocks),e.fabricObject.set({opacity:e.opacity,selectable:!e.locked,evented:!e.locked}),this.layers.setMeta(t,{pattern:void 0}),this.canvas.requestRenderAll(),this.history.save()}catch(i){throw this.events.emit("error",{message:"Failed to clear pattern",error:i}),i}}async rehydrateAll(){this.clearProxies();for(let t of this.layers.getAll()){let e=t.meta.pattern;if(e)try{vd(e)&&(await bd(t,e),this.layers.setMeta(t.id,{pattern:{config:e.config}})),this.attach(t,e.config)}catch(i){this.events.emit("error",{message:"Failed to restore pattern layer",error:i})}}this.canvas.requestRenderAll()}syncArea(){let t=this.area();for(let e of this.proxies.values())e.setArea(t);this.proxies.size>0&&this.canvas.requestRenderAll()}invalidate(t){let e=this.proxies.get(t);e&&(e.invalidate(),e.syncBox(),this.canvas.requestRenderAll())}attachTo(t){let e=t.meta.pattern;!e||this.proxies.has(t.id)||this.attach(t,e.config)}dispose(){this.canvas.off("object:modified",this.onObjectModified),this.canvas.off("text:changed",this.onSourceModified),this.events.off("layer:removed",this.onLayerRemoved),this.clearProxies()}clearProxies(){for(let t of this.proxies.values())t.dispose();this.proxies.clear()}attach(t,e){let i=new re(t.fabricObject,e,this.area()),s=this.canvas.getActiveObject()===t.fabricObject;t.fabricObject.set({opacity:0,selectable:!1,evented:!1}),this.proxies.set(t.id,i),this.layers.setRenderProxy(t.id,i),s&&this.canvas.setActiveObject(i),this.canvas.requestRenderAll()}commitGesture(t){let e=this.layers.findByObject(t),i=e?.meta.pattern;if(!e||!i)return;let s=t.liveOrigin(),n=md(t.liveScale(),fd,pd),a=yd(t.liveAngle());e.fabricObject.setPositionByOrigin(s,"center","center"),e.fabricObject.setCoords();let o={...i.config,scale:n,angle:a};this.layers.setMeta(e.id,{pattern:{...i,config:o}}),t.setConfig(o),this.canvas.requestRenderAll(),this.history.save()}area(){return{width:this.canvas.getWidth(),height:this.canvas.getHeight()}}detach(t){let e=this.proxies.get(t);if(!e){this.layers.setRenderProxy(t,null);return}this.layers.setRenderProxy(t,null),e.dispose(),this.proxies.delete(t)}invalidateFor(t){if(!t)return;let e=this.layers.findByObject(t);e&&this.invalidate(e.id)}};function md(r,t,e){return Number.isFinite(r)?Math.max(t,Math.min(e,r)):t}function yd(r){if(!Number.isFinite(r))return 0;let t=(r%360+360)%360;return Math.round(t>180?t-360:t)}function vd(r){return typeof r.originalSrc=="string"&&r.originalSrc.length>0}async function bd(r,t){let e=r.fabricObject;typeof e.setSrc!="function"||!t.original||(await e.setSrc(t.originalSrc),e.set({left:t.original.left,top:t.original.top,scaleX:t.original.scaleX,scaleY:t.original.scaleY,width:t.original.width,height:t.original.height,cropX:t.original.cropX,cropY:t.original.cropY,angle:t.original.angle}),e.clipPath=t.originalClip?(await Z.enlivenObjects([t.originalClip]))[0]:void 0,Kr(e,t.originalLocks),e.setCoords())}function Kr(r,t){r.set(t??{lockMovementX:!1,lockMovementY:!1,lockScalingX:!1,lockScalingY:!1,lockRotation:!1,hasControls:!0})}var es={shape:"arc",arc:0,wave:0,waveLength:4.1,offset:0,centerOffset:0},ql=.5,xd=99.5,Cd=.12,wd=.9,Sd=1,_d=12,Td=6,kd=4e3;function Jr(r){return Math.round(r*100)/100}function xe(r){let t=H(r.arc??0,-100,100),e=H(r.wave??0,0,100),i=Math.abs(t)<ql&&e>0?"wave":"arc";return{shape:r.shape??i,arc:t,wave:e,waveLength:H(r.waveLength??es.waveLength,Sd,_d),offset:H(r.offset??0,-100,100),centerOffset:H(r.centerOffset??0,-100,100)}}function rs(r){return r.shape==="arc"?Math.abs(r.arc)>=ql:r.wave>0}function Od(r,t){let e=Math.min(100,Math.abs(t.arc)),i=t.arc<0?-1:1,s=e>=xd?Math.PI*2:Math.max(Cd,e/100*Math.PI),n=r/s,a=n*Math.pow(2,t.centerOffset/100),o=a>=n?s:Math.min(Math.PI*2,r/Math.max(a,.001));return{radius:a,sweep:o,direction:i,baseRadius:n}}function Md(r,t,e,i){let{sweep:s,direction:n,baseRadius:a}=t,o=s>=Math.PI*2-1e-6,l=r/2,h=y=>[l+e*Math.sin(y),n*(a-e*Math.cos(y))],c=n>0?1:0,u=([y,b])=>`${Jr(y)} ${Jr(b)}`,d=Jr(e);if(o){let y=h(i-Math.PI),b=h(i);return{data:[`M ${u(y)}`,`A ${d} ${d} 0 0 ${c} ${u(b)}`,`A ${d} ${d} 0 0 ${c} ${u(y)}`].join(" "),length:e*Math.PI*2}}let g=h(i-s/2),f=h(i+s/2),p=s>Math.PI?1:0;return{data:`M ${u(g)} A ${d} ${d} 0 ${p} ${c} ${u(f)}`,length:e*s}}function Pd(r,t,e,i){let s=e.wave/100*t*wd,n=Math.max(1,t*e.waveLength),a=e.offset/100*Math.PI*2,o=Math.min(Td,n/8),l=Math.min(kd,Math.max(2,Math.ceil(r/o))),h=[],c=0,u=null;for(let d=0;d<=l;d++){let g=r*d/l,f=i+s*Math.sin(g/n*Math.PI*2+a);u&&(c+=Math.hypot(g-u[0],f-u[1])),u=[g,f],h.push(`${d===0?"M":"L"} ${Jr(g)} ${Jr(f)}`)}return{data:h.join(" "),length:c}}function tr(r,t,e,i=1,s=0){let n=xe(r);if(!rs(n))return null;let a=Math.max(1,Math.floor(i)),o=[];if(n.shape==="wave"){for(let c=0;c<a;c++)o.push(Pd(t,e,n,(c-(a-1)/2)*s));return o}let l=Od(t,n),h=n.offset/100*l.sweep;for(let c=0;c<a;c++){let u=Math.max(1,l.radius+(c-(a-1)/2)*s);o.push(Md(t,l,u,h))}return o}function Vn(r,t,e){return tr(r,t,e)?.[0]??null}var Ed=1e5,Ad=.06,Dd=1.16,Nn=new WeakMap,is=new WeakMap,ss=new WeakMap,jd=.7;function Ld(r){let t=r._textLines?.length??0;for(let n=0;n<t;n+=1)r.getLineWidth?.(n);let e=r.__charBounds;if(!e?.length)return null;let i=0,s=0;for(let n of e)for(let a of n??[]){let{renderLeft:o,renderTop:l}=a;if(typeof o!="number"||typeof l!="number")continue;let h=(a.kernedWidth??a.width??0)/2,c=(a.height??r.fontSize)*jd,u=a.angle??0,d=Math.abs(Math.cos(u)),g=Math.abs(Math.sin(u));i=Math.max(i,Math.abs(o)+h*d+c*g),s=Math.max(s,Math.abs(l)+h*g+c*d)}return i===0&&s===0?null:{width:i*2,height:s*2}}function Fd(r){let t=Ld(r);t&&(t.width>(r.width??0)&&(r.width=t.width),t.height>(r.height??0)&&(r.height=t.height))}function Kl(r){return!!r&&typeof r.text=="string"}function Id(r){let t=r.width;try{return r.set({width:Ed}),r.initDimensions?.(),Math.max(1,r.calcTextWidth?.()??r.width??1)}finally{t!==void 0&&r.set({width:t}),r.initDimensions?.()}}function Rd(r){return Math.max(1,r._textLines?.length??1)}function Bd(r){let t=r.getHeightOfLine?.(0);return typeof t=="number"&&Number.isFinite(t)&&t>0?t:r.fontSize*(r.lineHeight??1)*Dd}function Jl(r){return new Rt(r.data,{visible:!1,objectCaching:!1})}var er=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s;this.canvas.on("text:changed",this.onTextChanged)}canvas;layers;history;events;onTextChanged=t=>{let e=t.target?this.layers.findByObject(t.target):void 0;e?.meta.curve&&this.refresh(e.id,!1)};dispose(){this.canvas.off("text:changed",this.onTextChanged)}get(t){let e=this.layers.get(t);return!e||!Kl(e.fabricObject)?null:xe(e.meta.curve??{})}isCurved(t){let e=this.get(t);return!!e&&rs(e)}apply(t,e,i=!0){let s=this.layers.get(t);if(!s||!Kl(s.fabricObject))return!1;let n=xe(e),a=s.fabricObject,o=Id(a);if(!rs(n))this.detach(a,s.meta.curveWidth),delete s.meta.curveWidth,s.meta.curve=n;else{s.meta.curveWidth===void 0&&(s.meta.curveWidth=a.width??0),a.set({width:Math.max(s.meta.curveWidth,o+2)}),a.initDimensions?.();let l=tr(n,o*(1+Ad),a.fontSize,Rd(a),Bd(a));l&&this.attach(a,l),s.meta.curve=n}return a.initDimensions?.(),a.setCoords(),a.dirty=!0,this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),i&&this.history.save(),!0}clear(t,e=!0){let s=this.layers.get(t)?.meta.curve?.shape;return this.apply(t,{shape:s},e)}refresh(t,e=!1){let i=this.layers.get(t)?.meta.curve;return i?this.apply(t,i,e):!1}refreshAll(){let t=e=>{for(let i of e)i.meta.curve&&this.refresh(i.id),i.children.length>0&&t(i.children)};t(this.layers.getAll())}attach(t,e){ss.has(t)||ss.set(t,t.objectCaching),t.set({objectCaching:!1});let i=e.map(Jl),s=i.length===1?i[0]:Jl({data:e.map(n=>n.data).join(" "),length:0});t.set({path:s,pathAlign:"center",pathSide:"left",pathStartOffset:0}),this.patchLineMeasure(t,i,s),this.patchDimensions(t)}patchDimensions(t){if(is.has(t))return;let e=t.initDimensions;if(typeof e!="function")return;let i=function(){e.call(this),Fd(this)},s=Object.prototype.hasOwnProperty.call(t,"initDimensions");t.initDimensions=i,is.set(t,{original:e,installed:i,ownedOriginal:s})}unpatchDimensions(t){let e=is.get(t);e&&(t.initDimensions===e.installed&&(e.ownedOriginal?t.initDimensions=e.original:delete t.initDimensions),is.delete(t))}patchLineMeasure(t,e,i){this.unpatchLineMeasure(t);let s=t._measureLine;if(typeof s!="function")return;for(let o of e)o.pathOffset=i.pathOffset;let n=function(o){let l=e[o];if(!l)return s.call(this,o);let h=this.path,c=this.textAlign;this.path=l,this.textAlign="center",this.setPathInfo?.();try{return s.call(this,o)}finally{this.path=h,this.textAlign=c}},a=Object.prototype.hasOwnProperty.call(t,"_measureLine");t._measureLine=n,Nn.set(t,{original:s,installed:n,ownedOriginal:a})}unpatchLineMeasure(t){let e=Nn.get(t);e&&(t._measureLine===e.installed&&(e.ownedOriginal?t._measureLine=e.original:delete t._measureLine),Nn.delete(t))}detach(t,e){this.unpatchLineMeasure(t),this.unpatchDimensions(t);let i=ss.get(t);i!==void 0&&(t.set({objectCaching:i}),ss.delete(t)),t.set({path:null,pathStartOffset:0}),e!==void 0&&e>0&&t.set({width:e})}};var ns=["circle","square","triangle","star","heart","octagram","arch","zigzag"];function rr(r){return typeof r=="string"&&ns.includes(r)}function Un(r,t,e,i=-Math.PI/2){let s=Math.PI/r,n=[];for(let a=0;a<r*2;a++){let o=a%2===0?t:e,l=i+a*s,h=50+Math.cos(l)*o,c=50+Math.sin(l)*o;n.push(`${a===0?"M":"L"} ${Zl(h)} ${Zl(c)}`)}return`${n.join(" ")} Z`}function Zl(r){return Math.round(r*100)/100}var Xd={circle:"M 96 50 A 46 46 0 1 1 4 50 A 46 46 0 1 1 96 50 Z",square:"M 4 4 H 96 V 96 H 4 Z",triangle:"M 50 4 L 96 96 L 4 96 Z",star:Un(5,46,22),heart:"M 50 96 C -8 55 12 4 50 28 C 88 4 108 55 50 96 Z",octagram:Un(8,46,27),arch:"M 4 96 V 50 A 46 46 0 0 1 96 50 V 96 Z",zigzag:Un(16,46,39)};function Zr(r){return Xd[r]}var ir=100;var as=["vignette","halftone","spray","grunge","torn","band"];function Qr(r){return typeof r=="string"&&as.includes(r)}var Lt=320,Kn=new Map;function qn(r){let t=r;return()=>(t=t*16807%2147483647,(t-1)/2147483646)}function Ql(r,t,e,i){let s=Lt,n=[[i,i],[s-i,i],[s-i,s-i],[i,s-i]];r.beginPath();for(let a=0;a<n.length;a++){let[o,l]=n[a],[h,c]=n[(a+1)%n.length];for(let u=0;u<=26;u++){let d=u/26,g=o+(h-o)*d+(t()-.5)*e,f=l+(c-l)*d+(t()-.5)*e;a===0&&u===0?r.moveTo(g,f):r.lineTo(g,f)}}r.closePath(),r.fill()}function Yd(r,t){let e=Lt,i=e/2;switch(t.fillStyle="#ffffff",r){case"vignette":{let s=t.createRadialGradient(i,i,e*.18,i,i,e*.52);s.addColorStop(0,"rgba(255,255,255,1)"),s.addColorStop(1,"rgba(255,255,255,0)"),t.fillStyle=s,t.fillRect(0,0,e,e);return}case"band":{let s=t.createLinearGradient(0,0,0,e);s.addColorStop(0,"rgba(255,255,255,0)"),s.addColorStop(.25,"rgba(255,255,255,1)"),s.addColorStop(.75,"rgba(255,255,255,1)"),s.addColorStop(1,"rgba(255,255,255,0)"),t.fillStyle=s,t.fillRect(0,0,e,e);return}case"halftone":{for(let n=16/2;n<e;n+=16)for(let a=16/2;a<e;a+=16){let o=Math.hypot(a-i,n-i)/(e*.52),l=Math.max(0,16/2*(1-o)*1.15);l<.4||(t.beginPath(),t.arc(a,n,l,0,Math.PI*2),t.fill())}return}case"spray":{let s=qn(42),n=t.createRadialGradient(i,i,10,i,i,e*.42);n.addColorStop(0,"rgba(255,255,255,1)"),n.addColorStop(1,"rgba(255,255,255,0.85)"),t.fillStyle=n,t.beginPath(),t.arc(i,i,e*.42,0,Math.PI*2),t.fill(),t.fillStyle="rgba(255,255,255,0.9)";for(let a=0;a<900;a++){let o=s()*Math.PI*2,l=e*(.3+s()*.24),h=i+Math.cos(o)*l,c=i+Math.sin(o)*l;t.globalAlpha=1-(l/e-.3)/.24,t.beginPath(),t.arc(h,c,s()*2.4,0,Math.PI*2),t.fill()}t.globalAlpha=1;return}case"grunge":{let s=qn(7);Ql(t,s,14,e*.06),t.globalCompositeOperation="destination-out";for(let n=0;n<240;n++){let a=s()*e,o=s()*e;!(Math.min(a,o,e-a,e-o)<e*.12)&&s()>=.12||(t.beginPath(),t.arc(a,o,s()*6+1,0,Math.PI*2),t.fill())}t.globalCompositeOperation="source-over";return}case"torn":{Ql(t,qn(99),10,e*.08);return}}}function ti(r){let t=Kn.get(r);if(t)return t;if(typeof document>"u")throw new Error("Texture masks require a DOM canvas");let e=document.createElement("canvas");e.width=Lt,e.height=Lt;let i=e.getContext("2d");if(!i)throw new Error("Texture masks require a 2D canvas context");return Yd(r,i),Kn.set(r,e),e}function Jn(){Kn.clear()}function os(r){return rr(r)||Qr(r)}var Ce=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s}canvas;layers;history;events;get(t){return this.layers.get(t)?.meta.maskPreset??null}apply(t,e,i=!0){let s=this.layers.get(t);if(!s)return!1;let n=s.fabricObject;if(e===null){if(!s.meta.maskPreset)return!1;n.clipPath=void 0,delete s.meta.maskPreset}else{if(!os(e))return!1;n.clipPath=this.buildClip(e,n),s.meta.maskPreset=e}return n.dirty=!0,n.setCoords(),this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),i&&this.history.save(),!0}clear(t,e=!0){return this.apply(t,null,e)}refresh(t,e=!1){let i=this.get(t);return i?this.apply(t,i,e):!1}refreshAll(){for(let t of this.layers.getAll())t.meta.maskPreset&&this.refresh(t.id)}buildClip(t,e){let i=Math.max(1,e.width??1),s=Math.max(1,e.height??1),n={originX:"center",originY:"center",left:0,top:0,objectCaching:!1};return rr(t)?new Rt(Zr(t),{...n,scaleX:i/ir,scaleY:s/ir}):new N(ti(t),{...n,scaleX:i/Lt,scaleY:s/Lt})}};var $d=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\([\d.%+\-\s,/]+\)|[a-z]+)$/i;function ie(r,t=!1){if(typeof r!="string")return!1;let e=r.trim();return e?$d.test(e):t}var se={enabled:!1,color:"#000000",blur:12,offsetX:6,offsetY:6};function ei(r){let t=r.shadow;return!t||typeof t=="string"?{...se}:{enabled:!0,color:typeof t.color=="string"?t.color:se.color,blur:t.blur??se.blur,offsetX:t.offsetX??se.offsetX,offsetY:t.offsetY??se.offsetY}}function ls(r,t){let e={...ei(r),...t};if(!e.enabled){r.set({shadow:null});return}let i=ie(e.color)?e.color:se.color;r.set({shadow:new de({color:i,blur:Math.max(0,e.blur),offsetX:e.offsetX,offsetY:e.offsetY})})}var hs={borderColor:"#c9a96e",cornerColor:"#c9a96e",cornerStrokeColor:"#101010",cornerSize:11,cornerStyle:"circle",borderWidth:1,borderDashArray:null,padding:0,marqueeFill:"rgba(201, 169, 110, 0.12)"};function we(r,t,e){let i=e>0?1/e:1;r.set({cornerSize:t.cornerSize*i,cornerStyle:t.cornerStyle,cornerColor:t.cornerColor,cornerStrokeColor:t.cornerStrokeColor,transparentCorners:!1,borderColor:t.borderColor,borderScaleFactor:t.borderWidth*i,borderDashArray:t.borderDashArray?.map(s=>s*i)??null,padding:t.padding*i})}function cs(r,t,e){for(let s of r.getObjects())we(s,t,e);let i=r.getActiveObject();i&&we(i,t,e),r.selectionColor=t.marqueeFill,r.selectionBorderColor=t.borderColor,r.selectionLineWidth=t.borderWidth*(e>0?1/e:1),r.requestRenderAll()}var Wd=["ml","mr","mt","mb"];function Se(r,t){for(let e of Wd)r.setControlVisible(e,!t)}function us(r){r.set({scaleX:1,scaleY:1,angle:0,skewX:0,skewY:0,flipX:!1,flipY:!1}),r.setCoords()}var sr=class{unit;dpi;constructor(t="px",e=72){this.unit=t,this.dpi=72,this.setDpi(e)}setUnit(t){this.unit=t}setDpi(t){if(!Number.isFinite(t)||t<=0)throw new Error("DPI must be a positive number");this.dpi=t}getUnit(){return this.unit}getDpi(){return this.dpi}toPixels(t,e){switch(e??this.unit){case"px":return t;case"in":return t*this.dpi;case"mm":return t/25.4*this.dpi}}fromPixels(t,e){switch(e??this.unit){case"px":return t;case"in":return t/this.dpi;case"mm":return t/this.dpi*25.4}}};var Hd="2.0.0";function ds(r){return{version:Hd,canvas:{width:r.canvas.getWidth(),height:r.canvas.getHeight(),unit:r.units.getUnit(),dpi:r.units.getDpi()},layers:r.layers.getAll().map(t=>t.serialize()),background:r.getDesignBackground(),backgroundImage:r.getDesignBackgroundImage()?r.getDesignBackgroundImage().toObject():null,backgroundImageOptions:r.getBackgroundImageOptions(),mockup:r.getMockup()}}async function gs(r,t){if(!t||!t.canvas||!Array.isArray(t.layers))throw new Error("Invalid editor state");if(!Number.isFinite(t.canvas.width)||!Number.isFinite(t.canvas.height)||t.canvas.width<=0||t.canvas.height<=0||t.canvas.unit!==void 0&&!["px","mm","in"].includes(t.canvas.unit)||t.canvas.dpi!==void 0&&(!Number.isFinite(t.canvas.dpi)||t.canvas.dpi<=0))throw new Error("Invalid editor canvas settings");let e=Number.parseInt(t.version?.split(".")[0]??"1",10);if(!Number.isFinite(e)||e>2)throw new Error(`Unsupported editor state version: ${t.version}`);if(t.background!==void 0&&!ie(t.background,!0))throw new Error("Invalid editor background color");let i=await Promise.all(t.layers.map(async n=>{let a=(await Z.enlivenObjects([n.fabricObject]))[0];if(!a){let o=n.fabricObject.src;throw typeof o=="string"&&o.startsWith("blob:")?new Error(`Failed to restore expired object URL: ${o}`):new Error(`Failed to restore layer: ${n.id}`)}return{serialized:n,fabricObject:a}})),s=t.backgroundImage?(await Z.enlivenObjects([t.backgroundImage]))[0]:null;if(t.backgroundImage&&!s){let n=t.backgroundImage.src;throw typeof n=="string"&&n.startsWith("blob:")?new Error(`Failed to restore expired background object URL: ${n}`):new Error("Failed to restore background image")}r.crop.cancel(),r.masks.detach(),r.layers.clear(),t.canvas.unit&&r.units.setUnit(t.canvas.unit),t.canvas.dpi!==void 0&&r.units.setDpi(t.canvas.dpi),r.canvas.setDimensions({width:t.canvas.width,height:t.canvas.height}),t.background!==void 0&&r.setBackground(t.background),r.setBackgroundImageObject(s??null,!1,t.backgroundImageOptions??null),r.setMockup(t.mockup??null);for(let n of i)zd(r,n.serialized,n.fabricObject);r.canvas.requestRenderAll()}function zd(r,t,e){let i=r.layers.add(t.type,e,t.name,t.id);t.meta&&(i.meta=t.meta,i.meta.lockAspect&&Se(e,!0)),t.visible||r.layers.setVisibility(i.id,!1),t.locked&&r.layers.setLocked(i.id,!0),t.opacity!==1&&r.layers.setOpacity(i.id,t.opacity);let s=t.children??t.meta?.groupChildren;return i.type==="group"&&Array.isArray(s)&&(r.layers.adoptGroupChildren(i,s),i.meta.groupChildren&&delete i.meta.groupChildren),i}var th={red:0,green:1,blue:2,alpha:3};function eh(r,t,e){let i=r??t;if(!Number.isFinite(i))throw new Error(`${e} must be finite`);return i}function Gd(r,t,e,i,s,n){let a=Math.max(0,Math.min(t-1,i)),o=Math.max(0,Math.min(e-1,s)),l=Math.floor(a),h=Math.floor(o),c=Math.min(t-1,l+1),u=Math.min(e-1,h+1),d=a-l,g=o-h,f=r[(h*t+l)*4+n]*(1-d)+r[(h*t+c)*4+n]*d,p=r[(u*t+l)*4+n]*(1-d)+r[(u*t+c)*4+n]*d;return f*(1-g)+p*g}function fs(r,t,e,i,s){if(!Number.isInteger(e)||!Number.isInteger(i)||e<=0||i<=0)throw new Error("Displacement dimensions must be positive integers");let n=e*i*4;if(r.length!==n||t.length!==n)throw new Error("Displacement source and map must match the requested dimensions");let a=eh(s.scaleX,10,"Displacement scaleX"),o=eh(s.scaleY,10,"Displacement scaleY"),l=th[s.channelX??"red"],h=th[s.channelY??"green"],c=new Uint8ClampedArray(n);for(let u=0;u<i;u+=1)for(let d=0;d<e;d+=1){let g=(u*e+d)*4,f=d+(t[g+l]-128)/127*a,p=u+(t[g+h]-128)/127*o;for(let y=0;y<4;y+=1)c[g+y]=Math.round(Gd(r,e,i,f,p,y))}return c}function ps(r,t,e,i,s){let n=Math.max(0,Math.min(i,r.left*t)),a=Math.max(0,Math.min(s,r.top*e)),o=Math.max(n,Math.min(i,(r.left+r.width)*t)),l=Math.max(a,Math.min(s,(r.top+r.height)*e));return{left:n,top:a,width:o-n,height:l-a}}function Zn(r,t,e,i){if(r<=0||t<=0||e<=0||i<=0)throw new Error("Cover dimensions must be positive");let s=Math.max(e/r,i/t),n=r*s,a=t*s;return{left:(e-n)/2,top:(i-a)/2,width:n,height:a}}function Qn(r,t,e){let i=t==="jpeg"?"image/jpeg":`image/${t}`;return new Promise((s,n)=>{r.toBlob(a=>a?s(a):n(new Error(`Failed to export ${t}`)),i,e)})}async function ri(r,t={}){let{multiplier:e=1,format:i="png",quality:s=1}=t,n=r.toCanvasElement(e);return Qn(n,i,s)}async function ii(r,t,e={}){let i=r.lowerCanvasEl.ownerDocument.createElement("canvas"),s=new ze(i,{width:e.width??r.getWidth(),height:e.height??r.getHeight(),backgroundColor:e.backgroundColor||void 0});try{let n=e.cloneObjects===!1?t:await Promise.all(t.map(a=>a.clone()));return n.length&&s.add(...n),e.backgroundImage&&(s.backgroundImage=await e.backgroundImage.clone()),s.requestRenderAll(),await ri(s,e)}finally{s.dispose()}}async function ms(r,t,e={}){let{multiplier:i=1,format:s="png",quality:n=1}=e,a=r.getWidth(),o=r.getHeight(),l=ps(t,i,i,a*i,o*i);if(l.width<=0||l.height<=0)throw new Error("Print area does not overlap the canvas");let h=r.lowerCanvasEl.ownerDocument.createElement("canvas"),c=new ze(h,{width:a,height:o});try{let u=await Promise.all(r.getObjects().map(p=>p.clone()));u.length&&c.add(...u),c.requestRenderAll();let d=c.toCanvasElement(i),g=d.ownerDocument.createElement("canvas");g.width=Math.max(1,Math.round(l.width)),g.height=Math.max(1,Math.round(l.height));let f=g.getContext("2d");if(!f)throw new Error("2D canvas context is unavailable");return f.drawImage(d,-l.left,-l.top),await Qn(g,s,n)}finally{c.dispose()}}async function ys(r,t,e={}){let{multiplier:i=1,format:s="png",quality:n=1}=e,a=r.toCanvasElement(i),o=a.ownerDocument.createElement("canvas");o.width=a.width,o.height=a.height;let l=o.getContext("2d");if(!l)throw new Error("2D canvas context is unavailable");let h=d=>new Promise((g,f)=>{let p=new Image;p.crossOrigin="anonymous",p.onload=()=>g(p),p.onerror=()=>f(new Error(`Failed to load mockup image: ${d}`)),p.src=d}),c=(d,g=l)=>{let f=Zn(d.naturalWidth||d.width,d.naturalHeight||d.height,o.width,o.height);g.drawImage(d,f.left,f.top,f.width,f.height)},u=[a];try{c(await h(t.image));let d=a;if(t.displacement){let g=a.getContext("2d");if(!g)throw new Error("2D design context is unavailable");let f=a.ownerDocument.createElement("canvas");u.push(f),f.width=a.width,f.height=a.height;let p=f.getContext("2d");if(!p)throw new Error("2D displacement-map context is unavailable");c(await h(t.displacement.image),p);let y=a.ownerDocument.createElement("canvas");u.push(y),y.width=a.width,y.height=a.height;let b=y.getContext("2d");if(!b)throw new Error("2D displaced-design context is unavailable");let x,C;try{x=g.getImageData(0,0,a.width,a.height).data,C=p.getImageData(0,0,a.width,a.height).data}catch(k){throw new Error("Failed to apply mockup displacement map; verify image CORS access",{cause:k})}let S=fs(x,C,a.width,a.height,{...t.displacement,scaleX:(t.displacement.scaleX??10)*i,scaleY:(t.displacement.scaleY??10)*i}),w=b.createImageData(a.width,a.height);w.data.set(S),b.putImageData(w,0,0),d=y}if(l.save(),t.printArea&&t.clipToPrintArea!==!1){let g=ps(t.printArea,o.width/r.getWidth(),o.height/r.getHeight(),o.width,o.height);l.beginPath(),l.rect(g.left,g.top,g.width,g.height),l.clip()}return l.globalAlpha=Math.max(0,Math.min(1,t.designOpacity??1)),l.globalCompositeOperation=!t.designBlendMode||t.designBlendMode==="normal"?"source-over":t.designBlendMode,l.drawImage(d,0,0),l.restore(),t.overlay&&(l.save(),l.globalAlpha=Math.max(0,Math.min(1,t.overlay.opacity??1)),l.globalCompositeOperation=t.overlay.blendMode==="normal"?"source-over":t.overlay.blendMode??"multiply",c(await h(t.overlay.image)),l.restore()),await Qn(o,s,n)}finally{for(let d of u)d.width=0,d.height=0}}function vs(r){return r.toSVG()}function bs(r,t="png",e=1){return r.toDataURL({format:t,multiplier:e})}function xs(r){return String(r).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Cs(r){let t=new DOMParser().parseFromString(r,"image/svg+xml");if(t.querySelector("parsererror"))throw new Error("Invalid template SVG");return t.querySelectorAll("script, foreignObject, iframe, object, embed, link, style").forEach(e=>e.remove()),t.querySelectorAll("*").forEach(e=>{for(let i of[...e.attributes]){let s=i.name.toLowerCase(),n=i.value.trim().toLowerCase(),a=s==="href"||s==="xlink:href"||s==="src",o=n.startsWith("#")||/^data:image\/(?:png|jpeg|webp|gif);base64,/.test(n);(s.startsWith("on")||a&&!o||/url\s*\(/.test(n)&&!/url\s*\(\s*['"]?#/.test(n)||/(?:javascript:|expression\s*\()/.test(n))&&e.removeAttribute(i.name)}}),new XMLSerializer().serializeToString(t.documentElement)}function Vd(r){return/^(?:url|local)\(/.test(r.trim())?r:`url(${JSON.stringify(r)})`}function Nd(r){let t=r.split(/[?#]/)[0].toLowerCase();return t.endsWith(".woff2")?"font/woff2":t.endsWith(".woff")?"font/woff":t.endsWith(".otf")?"font/otf":"font/ttf"}function Ud(r){let t=new Uint8Array(r),e="";for(let i=0;i<t.length;i+=32768)e+=String.fromCharCode(...t.subarray(i,i+32768));return btoa(e)}function ws(r){return JSON.stringify(r).replace(/[<>&]/g,t=>`\\${t.charCodeAt(0).toString(16)} `)}var qd=/^(?:normal|bold|bolder|lighter|[1-9]\d{0,2}(?:\s+[1-9]\d{0,2})?)$/i,Kd=/^(?:normal|italic|oblique(?:\s+-?\d+(?:\.\d+)?deg)?)$/i,Jd=/^(?:auto|block|swap|fallback|optional)$/i;function ta(r,t,e){let i=r?.trim();return i&&t.test(i)?i:e}function Zd(r){let t=r.trim();if(t.startsWith("data:"))return t;let e=t.match(/^url\(\s*(['"]?)(.*?)\1\s*\)/i);return e?e[2]:/^local\(/i.test(t)?null:t}function Qd(r){let t=r.trim().match(/^local\(\s*(['"]?)([^)"'{};]*)\1\s*\)$/i);return t&&t[2].trim()||null}var nr=class{definitions=new Map;loads=new Map;register(t){if(!t.family.trim()||!t.source.trim())throw new Error("Font family and source are required");this.definitions.set(t.family,{...t}),this.loads.delete(t.family)}unregister(t){return this.loads.delete(t),this.definitions.delete(t)}getAll(){return[...this.definitions.values()].map(t=>({...t}))}load(t){let e=this.loads.get(t);if(e)return e;let i=this.definitions.get(t);if(!i)return Promise.reject(new Error(`Font is not registered: ${t}`));if(typeof FontFace>"u"||typeof document>"u")return Promise.reject(new Error("Font loading requires a browser FontFace API"));let s=new FontFace(i.family,Vd(i.source),{weight:i.weight,style:i.style,display:i.display}).load().then(n=>(document.fonts.add(n),n));return s.catch(()=>{this.loads.get(t)===s&&this.loads.delete(t)}),this.loads.set(t,s),s}async ready(){this.definitions.size!==0&&(await Promise.all([...this.definitions.keys()].map(t=>this.load(t))),await document.fonts.ready)}async getEmbeddedCss(){return(await Promise.all(this.getAll().map(async e=>{let i=Zd(e.source),s;if(i&&!i.startsWith("data:")){let l=await fetch(i);if(!l.ok)throw new Error(`Failed to fetch font: ${i}`);let h=Ud(await l.arrayBuffer()),c=l.headers.get("content-type")||Nd(i);s=`url(${ws(`data:${c};base64,${h}`)})`}else if(i)s=`url(${ws(i)})`;else{let l=Qd(e.source);if(!l)throw new Error(`Unsupported font source for embedding: ${e.family}`);s=`local(${ws(l)})`}let n=ta(e.weight,qd,"normal"),a=ta(e.style,Kd,"normal"),o=ta(e.display,Jd,"swap");return`@font-face{font-family:${ws(e.family)};src:${s};font-weight:${n};font-style:${a};font-display:${o}}`}))).join(`
|
|
506
|
-
`)}};function tg(r,t){let e=r.toLowerCase(),i=t.toLowerCase();if(i.startsWith("*.")){let s=i.slice(1);return e.endsWith(s)&&e.length>s.length}return e===i}function eg(r){return r==="localhost"||r==="127.0.0.1"||r==="::1"||r.endsWith(".localhost")}var ar=class{constructor(t={}){this.config=t;let e=t.hostname??globalThis.location?.hostname??"localhost";(t.environment??"development")!=="production"||eg(e)?(this.status={state:"exempt",payload:null},this.readyPromise=Promise.resolve(this.status)):t.key?(this.status={state:"checking",payload:null},this.readyPromise=this.validate(t.key,e)):(this.status={state:"community",payload:null},this.readyPromise=Promise.resolve(this.status))}config;status;readyPromise;getStatus(){return this.status}ready(){return this.readyPromise}hasFeature(t){return this.status.state==="valid"&&(this.status.payload.features??[]).includes(t)}track(t){this.config.onUsage?.({name:t,at:new Date().toISOString(),licenseId:this.status.state==="valid"?this.status.payload.id:void 0})}async validate(t,e){let i=await this.config.verifyOffline?.(t)??null;return i?i.expiresAt&&Date.parse(i.expiresAt)<Date.now()?this.status={state:"expired",payload:i}:i.domains.some(s=>tg(e,s))?this.status={state:"valid",payload:i}:this.status={state:"domain-mismatch",payload:i}:this.status={state:"invalid",payload:null}}};var or=class{constructor(t){this.editor=t;let e={id:pt(),name:"Page 1",state:t.toJSON()};this.pages=[e],this.activePageId=e.id}editor;pages;activePageId;getAll(){return this.pages.map(({id:t,name:e})=>({id:t,name:e}))}getActivePageId(){return this.activePageId}add(t=`Page ${this.pages.length+1}`,e=!1){this.saveCurrent();let i=structuredClone(this.editor.toJSON()),s=e?i:this.blankState(i),n={id:pt(),name:t,state:s};return this.pages.push(n),this.emitChanged(),n.id}async switchTo(t){if(t===this.activePageId)return!0;let e=this.pages.find(i=>i.id===t);return e?(this.saveCurrent(),await this.editor.fromJSON(structuredClone(e.state)),this.activePageId=t,this.emitChanged(),!0):!1}async duplicate(t){this.saveCurrent();let e=this.pages.find(n=>n.id===t);if(!e)return null;let i={id:pt(),name:`${e.name} copy`,state:structuredClone(e.state)},s=this.pages.indexOf(e);return this.pages.splice(s+1,0,i),this.emitChanged(),i.id}async remove(t){if(this.pages.length===1)return!1;let e=this.pages.findIndex(i=>i.id===t);if(e<0)return!1;if(t===this.activePageId){let i=this.pages[e+1]??this.pages[e-1];await this.editor.fromJSON(structuredClone(i.state)),this.activePageId=i.id}return this.pages.splice(e,1),this.emitChanged(),!0}rename(t,e){let i=this.pages.find(n=>n.id===t),s=e.trim();return!i||!s||i.name===s?!1:(i.name=s,this.emitChanged(),!0)}reorder(t,e){let i=this.pages.findIndex(a=>a.id===t);if(i<0||!Number.isFinite(e))return!1;let s=Math.max(0,Math.min(this.pages.length-1,Math.round(e)));if(s===i)return!1;let[n]=this.pages.splice(i,1);return this.pages.splice(s,0,n),this.emitChanged(),!0}toJSON(){return this.saveCurrent(),{version:"1.0.0",activePageId:this.activePageId,pages:structuredClone(this.pages)}}async fromJSON(t){if(t?.version!=="1.0.0"||!Array.isArray(t.pages)||t.pages.length===0||!t.pages.some(s=>s.id===t.activePageId))throw new Error("Invalid project state");let e=structuredClone(t.pages),i=e.find(s=>s.id===t.activePageId);await this.editor.fromJSON(structuredClone(i.state)),this.pages=e,this.activePageId=i.id,this.emitChanged()}saveCurrent(){let t=this.pages.find(e=>e.id===this.activePageId);t&&(t.state=structuredClone(this.editor.toJSON()))}blankState(t){return{...t,layers:[],mockup:null}}emitChanged(){this.editor.events.emit("project:changed",{activePageId:this.activePageId,pages:this.getAll()})}};var Ft=class extends Error{constructor(e,i,s){super(i);this.code=e;this.cause=s;this.name="MaskRefinementError"}code;cause},lr=class{constructor(t){this.editor=t}editor;backing=null;context=null;layerId=null;brush=null;previousPoint=null;strokeBackup=null;strokeStartedAt=null;lastInteractionLatencyMs=0;refinement=null;disposed=!1;async create(t=this.editor.canvas.getWidth(),e=this.editor.canvas.getHeight()){if(this.assertActive(),!Number.isInteger(t)||!Number.isInteger(e)||t<=0||e<=0)throw new Error("Mask dimensions must be positive integers");let i=this.makeCanvas(t,e),s=new N(i,{left:0,top:0,originX:"left",originY:"top",selectable:!1}),n=this.editor.layers.add("mask",s,"Mask");return n.meta.mask={width:t,height:e,revision:0},this.editor.history.saveImmediate(),this.attachBacking(n.id,i),n}attach(t){this.assertActive(),this.cancelStroke();let e=this.requireMask(t),i=e.fabricObject,s=e.meta.mask?.width??i.width??this.editor.canvas.getWidth(),n=e.meta.mask?.height??i.height??this.editor.canvas.getHeight(),a=this.makeCanvas(s,n),o=a.getContext("2d");if(!o)throw new Error("2D mask context is unavailable");let l=i.getElement();l&&o.drawImage(l,0,0,s,n),this.attachBacking(t,a)}beginStroke(t){if(this.assertActive(),!this.context||!this.backing||!this.layerId)throw new Error("Attach a mask first");if(this.brush)throw new Error("A mask stroke is already active");if(!Number.isFinite(t.size)||t.size<=0)throw new Error("Mask brush size must be positive");this.brush={...t,hardness:H(t.hardness,0,1)},this.previousPoint=null,this.strokeBackup=this.context.getImageData(0,0,this.backing.width,this.backing.height),this.strokeStartedAt=performance.now()}addPoint(t){if(!this.brush||!this.context||!this.backing||!this.layerId)throw new Error("No active mask stroke");if(!Number.isFinite(t.x)||!Number.isFinite(t.y))return;let e=this.previousPoint??t,i=Math.hypot(t.x-e.x,t.y-e.y),s=Math.max(1,this.brush.size/4),n=Math.max(1,Math.ceil(i/s));for(let a=0;a<=n;a+=1){let o=a/n;this.drawDot({x:e.x+(t.x-e.x)*o,y:e.y+(t.y-e.y)*o})}this.previousPoint=t,this.requireMask(this.layerId).fabricObject.setElement(this.backing),this.editor.canvas.requestRenderAll()}async endStroke(){if(!this.brush||!this.backing||!this.layerId)return;let t=this.layerId;this.brush=null,this.previousPoint=null,this.strokeBackup=null;let e=this.backing.toDataURL("image/png");await this.editor.history.transaction(async()=>{await this.editor.replaceImageSource(t,e);let i=this.requireMask(t);i.meta.mask&&(i.meta.mask.revision+=1)}),this.attach(t),this.strokeStartedAt!==null&&(this.lastInteractionLatencyMs=performance.now()-this.strokeStartedAt,this.strokeStartedAt=null)}cancelStroke(){this.strokeBackup&&this.context&&this.backing&&this.layerId&&(this.context.putImageData(this.strokeBackup,0,0),this.requireMask(this.layerId).fabricObject.setElement(this.backing),this.editor.canvas.requestRenderAll()),this.brush=null,this.previousPoint=null,this.strokeBackup=null,this.strokeStartedAt=null}isStrokeActive(){return this.brush!==null}activeLayerId(){return this.layerId}detach(t){t&&this.layerId!==t||(this.cancelStroke(),this.cancelRefinement(),this.backing=null,this.context=null,this.layerId=null)}async refine(t,e,i,s={}){this.assertActive();let n=this.editor.layers.get(t);if(!n||n.type!=="mask")throw new Ft("not-found",`Mask layer not found: ${t}`);this.cancelRefinement();let a=new AbortController;this.refinement=a;let o=()=>a.abort(s.signal?.reason);s.signal?.addEventListener("abort",o,{once:!0}),s.signal?.aborted&&o();try{let l=n.fabricObject,h=await e.refine({mask:l.getSrc(),width:n.meta.mask?.width??l.width??1,height:n.meta.mask?.height??l.height??1,prompts:structuredClone(i)},{signal:a.signal,onProgress:s.onProgress});if(a.signal.aborted)throw new Ft("cancelled","Mask refinement cancelled");if(!/^data:image\/(?:png|jpeg|webp);base64,/i.test(h.dataUrl))throw new Ft("invalid-result","Mask refinement must return a base64 PNG, JPEG, or WebP data URL");return await this.editor.history.transaction(async()=>{await this.editor.replaceImageSource(t,h.dataUrl),n.meta.mask&&(n.meta.mask.revision+=1)}),this.attach(t),h}catch(l){throw l instanceof Ft?l:a.signal.aborted?new Ft("cancelled","Mask refinement cancelled",l):new Ft("provider","Mask refinement provider failed",l)}finally{s.signal?.removeEventListener("abort",o),this.refinement===a&&(this.refinement=null)}}cancelRefinement(){this.refinement?.abort(new DOMException("Cancelled","AbortError")),this.refinement=null}measure(){if(!this.backing)return null;let t=performance.now();this.context?.getImageData(0,0,1,1);let e=this.backing.width*this.backing.height*4,i=this.strokeBackup?e:0,s=performance;return{width:this.backing.width,height:this.backing.height,backingBytes:e,strokeBackupBytes:i,estimatedPeakBytes:e+i,historyBytes:this.editor.history.getSnapshotBytes(),interactionLatencyMs:this.lastInteractionLatencyMs,...typeof s.memory?.usedJSHeapSize=="number"?{usedJsHeapBytes:s.memory.usedJSHeapSize}:{},elapsedMs:performance.now()-t}}dispose(){this.detach(),this.disposed=!0}drawDot(t){let e=this.context,i=this.brush,s=i.size/2;e.save(),e.globalCompositeOperation=i.mode==="subtract"?"destination-out":"source-over";let n=e.createRadialGradient(t.x,t.y,s*i.hardness,t.x,t.y,s),a=i.mode==="subtract"?"rgba(0,0,0,1)":"rgba(255,255,255,1)";n.addColorStop(0,a),n.addColorStop(1,"rgba(255,255,255,0)"),e.fillStyle=n,e.beginPath(),e.arc(t.x,t.y,s,0,Math.PI*2),e.fill(),e.restore()}makeCanvas(t,e){let i=this.editor.canvas.lowerCanvasEl.ownerDocument.createElement("canvas");return i.width=t,i.height=e,i}attachBacking(t,e){let i=e.getContext("2d");if(!i)throw new Error("2D mask context is unavailable");this.layerId=t,this.backing=e,this.context=i}requireMask(t){let e=this.editor.layers.get(t);if(!e||e.type!=="mask")throw new Error(`Mask layer not found: ${t}`);return e}assertActive(){if(this.disposed)throw new Error("Mask controller has been disposed")}};var rg={add:"source-over",subtract:"destination-out",intersect:"destination-in"};function ig(r){r.set({opacity:0,globalCompositeOperation:"source-over"})}function sg(r){return new dt({left:r.left,top:r.top,width:Math.max(1,r.width),height:Math.max(1,r.height),originX:"left",originY:"top",fill:"#000000",objectCaching:!1})}function si(r,t,e){if(r.length===0)return;r.forEach((n,a)=>{let o=t[a];if(n.set({objectCaching:!1}),!o||!o.visible){ig(n);return}n.set({opacity:o.opacity,globalCompositeOperation:rg[o.mode]??"source-over"})});let i=t.find(n=>n.visible),s=i&&i.mode!=="add"?[sg(e.box),...r]:[...r];return new U(s,{absolutePositioned:e.absolute,objectCaching:!0,subTargetCheck:!1,interactive:!1})}function ne(r){return r.some(t=>!t.linked)}function vt(r){return r.calcTransformMatrix()}function _e(r,t){let e=Z.qrDecompose(t);r.set({flipX:!1,flipY:!1,originX:"center",originY:"center",left:e.translateX,top:e.translateY,scaleX:e.scaleX,scaleY:e.scaleY,angle:e.angle,skewX:e.skewX,skewY:0}),r.setCoords()}function ni(r,t){_e(r,Z.multiplyTransformMatrices(vt(t),vt(r)))}function ai(r,t){_e(r,Z.multiplyTransformMatrices(Z.invertTransform(vt(t)),vt(r)))}function ea(r,t){return Z.multiplyTransformMatrices(Z.invertTransform(vt(t)),vt(r))}function ra(r,t,e){_e(r,Z.multiplyTransformMatrices(vt(t),e))}function ia(r){return!r||r.length!==6||r.some(t=>!Number.isFinite(t))?null:[r[0],r[1],r[2],r[3],r[4],r[5]]}function Te(r,t,e=1){let i=Math.max(1,t.width)*e,s=Math.max(1,t.height)*e;r.set({originX:"center",originY:"center",angle:0,skewX:0,skewY:0,left:t.left+t.width/2,top:t.top+t.height/2,scaleX:i/Math.max(1,r.width??1),scaleY:s/Math.max(1,r.height??1)}),r.setCoords()}function oi(r){let t=r.removeAll();for(let e of t)e.setCoords();return t}var Ss=class{constructor(t,e){this.canvas=t;this.onCommit=e}canvas;onCommit;handle=null;editing=null;child=null;group=null;active(){return this.editing}async begin(t,e,i){this.end();let s=await i.clone();return _e(s,vt(i)),s.set({fill:"rgba(0,0,0,0.001)",stroke:"#e0b055",strokeWidth:2,strokeDashArray:[6,4],strokeUniform:!0,opacity:1,selectable:!0,evented:!0,hasControls:!0,hasBorders:!0,objectCaching:!1,excludeFromExport:!0}),this.handle=s,this.editing=t,this.child=i,this.group=e,this.canvas.add(s),this.canvas.setActiveObject(s),this.canvas.on("object:moving",this.onTransform),this.canvas.on("object:scaling",this.onTransform),this.canvas.on("object:rotating",this.onTransform),this.canvas.on("object:modified",this.onModified),this.canvas.requestRenderAll(),!0}end(){this.handle&&(this.canvas.off("object:moving",this.onTransform),this.canvas.off("object:scaling",this.onTransform),this.canvas.off("object:rotating",this.onTransform),this.canvas.off("object:modified",this.onModified),this.canvas.getActiveObject()===this.handle&&this.canvas.discardActiveObject(),this.canvas.remove(this.handle),this.handle=null,this.editing=null,this.child=null,this.group=null,this.canvas.requestRenderAll())}dispose(){this.end()}onTransform=t=>{!this.handle||t.target!==this.handle||this.write()};onModified=t=>{!this.handle||t.target!==this.handle||(this.write(),this.onCommit())};write(){!this.handle||!this.child||!this.group||(_e(this.child,Z.multiplyTransformMatrices(Z.invertTransform(vt(this.group)),vt(this.handle))),this.group.dirty=!0,this.group.set({dirty:!0}),this.canvas.requestRenderAll())}};function sa(r){return r.getAll().find(t=>t.meta.canvasMask)}function na(r,t){let e=new dt({left:0,top:0,width:r.getWidth(),height:r.getHeight(),originX:"left",originY:"top",fill:"#000000",globalCompositeOperation:"destination-in",selectable:!1,evented:!1,hasControls:!1,hasBorders:!1,objectCaching:!1}),i=t.add("mask",e,"Design mask");return i.meta.canvasMask=!0,t.setLocked(i.id,!0),i}function aa(r){let t=r.getAll(),e=t.findIndex(s=>s.meta.canvasMask);if(e===-1)return!1;let i=-1;return t.forEach((s,n)=>{s.type!=="mask"&&(i=n)}),e>=i?!1:(r.reorder(t[e].id,t.length-1),!0)}function oa(r,t,e){if(!t)return{left:0,top:0,width:r.getWidth(),height:r.getHeight()};if(e){t.setCoords();let n=t.getBoundingRect();return{left:n.left,top:n.top,width:n.width,height:n.height}}let i=Math.max(1,t.width??1),s=Math.max(1,t.height??1);return{left:-i/2,top:-s/2,width:i,height:s}}function rh(r,t,e){let i=r.clipPath instanceof U?r.clipPath.absolutePositioned:e;if(e!==i)for(let s of t)e?ni(s,r):ai(s,r)}function ih(r,t,e,i){return r.map((s,n)=>{let a=t[n];if(i&&s.linked&&a)return{...s,rel:[...ea(a,e)]};if(!s.rel)return s;let o={...s};return delete o.rel,o})}function sh(r,t,e,i,s){r.clipPath=si(e,t,{box:i,absolute:s}),r.dirty=!0,r.setCoords()}var lt="canvas",_s={mode:"add",linked:!0,visible:!0,opacity:1},li=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s}canvas;layers;history;events;selected=null;pinning=!1;list(t){return this.hostLayer(t)?.meta.maskStack??[]}get(t,e){return this.list(t).find(i=>i.id===e)}targets(){return this.layers.getAll().filter(t=>(t.meta.maskStack??[]).length>0).map(t=>t.meta.canvasMask?lt:t.id)}hostBox(t,e=t===lt||ne(this.list(t))){return oa(this.canvas,this.host(t),e)}hostLayer(t,e=!1){if(t!==lt)return this.layers.get(t);let i=sa(this.layers);return i||!e?i:na(this.canvas,this.layers)}host(t,e=!1){return this.hostLayer(t,e)?.fabricObject??null}pin(){if(!this.pinning){this.pinning=!0;try{aa(this.layers)}finally{this.pinning=!1}}}unwrap(t,e){let i=e.clipPath;if(!i)return[];let s=this.list(t);if(s.length===0||!(i instanceof U))return[i];let n=oi(i),a=n.length-s.length;return a>0?n.slice(a):n}entriesFor(t,e){let i=this.list(t);if(i.length>0||e.length!==1)return[...i];let s=this.hostLayer(t),n=s?.meta.maskPreset;return s&&delete s.meta.maskPreset,[{..._s,id:pt(),name:typeof n=="string"?n:"Mask",linked:t===lt?!1:!e[0].absolutePositioned}]}commit(t,e,i,s,n=!0,a=!1){let o=this.hostLayer(t);if(!o)return;let l=a||t===lt||ne(i);rh(e,s,l);let h=ih(i,s,e,l);sh(e,h,s,this.hostBox(t,l),l),h.length===0?(delete o.meta.maskStack,o.meta.canvasMask&&this.layers.remove(o.id)):o.meta.maskStack=h,this.canvas.requestRenderAll(),this.events.emit("masks:changed",{target:t}),this.events.emit("layer:modified",{layerId:o.id}),n&&this.history.save()}};var ke=class extends li{edits=new Ss(this.canvas,()=>this.history.save());onLayersChanged=()=>this.pin();onLayerSelected=({layerId:t})=>{t&&this.selected&&this.select(null,null)};onObjectModified=t=>{let e=t.target;if(!e)return;let i=this.layers.findByObject(e);i&&this.reflow(i.id)};constructor(t,e,i,s){super(t,e,i,s),this.events.on("layers:changed",this.onLayersChanged),this.events.on("layer:selected",this.onLayerSelected),this.canvas.on("object:modified",this.onObjectModified)}dispose(){this.edits.dispose(),this.events.off("layers:changed",this.onLayersChanged),this.events.off("layer:selected",this.onLayerSelected),this.canvas.off("object:modified",this.onObjectModified),this.selected=null}editing(){return this.edits.active()}async beginEdit(t,e){let i=this.host(t);if(!i)return!1;let s=this.list(t),n=s.findIndex(h=>h.id===e);if(n===-1)return!1;this.endEdit(!1),this.commit(t,i,[...s],this.unwrap(t,i),!1,!0);let a=i.clipPath instanceof U?i.clipPath:null;if(!a)return!1;let o=a.getObjects(),l=o[o.length-s.length+n];return l?(this.select(t,e),this.edits.begin({target:t,maskId:e},a,l)):!1}endEdit(t=!0){let e=this.edits.active();this.edits.end(),e&&this.rebuild(e.target,t)}getSelected(){return this.selected}select(t,e){this.selected=t&&e?{target:t,maskId:e}:null,this.selected&&this.layers.select(null),this.events.emit("mask:selected",{target:t,maskId:this.selected?e:null})}add(t,e,i={}){let s=this.host(t,!0);if(!s)return null;let n=this.unwrap(t,s),a=this.entriesFor(t,n),o={..._s,id:pt(),name:i.name??"Mask",...i.mode?{mode:i.mode}:{},...i.linked===void 0?{}:{linked:i.linked},...i.meta?{meta:i.meta}:{}};return t===lt&&(o.linked=!1),i.fit!==!1&&Te(e,i.box??this.hostBox(t),i.fit??1),n.push(e),a.push(o),this.commit(t,s,a,n),o}replaceGeometry(t,e,i,s={}){let n=this.host(t);if(!n)return!1;let a=[...this.list(t)],o=a.findIndex(h=>h.id===e);if(o===-1)return!1;let l=this.unwrap(t,n);return s.fit!==!1&&Te(i,s.box??this.hostBox(t),s.fit??1),l[o]=i,a[o]={...a[o],...s.name?{name:s.name}:{},...s.meta?{meta:s.meta}:{}},this.commit(t,n,a,l),!0}refit(t,e,i={}){let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(h=>h.id===e);if(a===-1)return!1;let o=this.unwrap(t,s),l=o[a];return l?(Te(l,i.box??this.hostBox(t),i.fit??1),this.commit(t,s,n,o,i.save??!0),!0):!1}remove(t,e){let i=this.host(t);if(!i)return!1;let s=[...this.list(t)],n=s.findIndex(o=>o.id===e);if(n===-1)return!1;let a=this.unwrap(t,i);return s.splice(n,1),a.splice(n,1),this.selected?.maskId===e&&this.select(null,null),this.commit(t,i,s,a),!0}clear(t){let e=this.host(t);return!e||this.list(t).length===0?!1:(this.selected?.target===t&&this.select(null,null),this.commit(t,e,[],[]),!0)}reorder(t,e,i){let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(u=>u.id===e);if(a===-1)return!1;let o=Math.max(0,Math.min(n.length-1,Math.round(i)));if(a===o)return!1;let l=this.unwrap(t,s),[h]=n.splice(a,1),[c]=l.splice(a,1);return n.splice(o,0,h),l.splice(o,0,c),this.commit(t,s,n,l),!0}setMeta(t,e,i){return this.patch(t,e,()=>({meta:i}))}setMode(t,e,i){return this.patch(t,e,s=>s.mode===i?null:{mode:i})}setVisible(t,e,i){return this.patch(t,e,s=>s.visible===i?null:{visible:i})}setOpacity(t,e,i){if(!Number.isFinite(i))return!1;let s=Math.max(0,Math.min(1,i));return this.patch(t,e,n=>n.opacity===s?null:{opacity:s})}setName(t,e,i){let s=i.trim();return s?this.patch(t,e,n=>n.name===s?null:{name:s}):!1}setLinked(t,e,i){if(t===lt)return!1;let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(l=>l.id===e);if(a===-1||n[a].linked===i)return!1;let o=this.unwrap(t,s);return n[a]={...n[a],linked:i},this.commit(t,s,n,o),!0}convertLayer(t,e){let i=this.layers.get(t);if(!i||i.meta.canvasMask)return null;let s=this.layers.getAll(),n=s.findIndex(h=>h.id===t),a=n>0?s[n-1]:void 0,o=e??(a&&!a.meta.canvasMask?a.id:lt);if(o===t)return null;let l=i.fabricObject;!l.fill&&l.type!=="image"&&l.set({fill:"#000000"}),this.history.beginTransaction();try{this.canvas.getActiveObject()===l&&this.canvas.discardActiveObject(),this.canvas.remove(l),this.layers.remove(t);let h=this.add(o,l,{name:i.name,fit:!1});return h?{target:o,entry:h}:null}finally{this.history.endTransaction()}}rebuild(t,e=!1){let i=this.host(t);if(!i)return;let s=this.unwrap(t,i);s.length!==0&&this.commit(t,i,this.entriesFor(t,s),s,e)}reflow(t){let e=this.host(t);if(!e)return;let i=this.list(t);if(i.length===0||!ne(i)||!i.some(n=>n.linked&&n.rel))return;let s=this.unwrap(t,e);i.forEach((n,a)=>{let o=s[a],l=ia(n.rel);!o||!n.linked||!l||ra(o,e,l)}),this.commit(t,e,[...i],s)}adopt(t,e){let i=this.hostLayer(t),s=i?.fabricObject.clipPath;if(!i||!s||i.meta.pattern||(i.meta.maskStack??[]).length>0)return null;let n={..._s,id:pt(),name:e??"Mask",linked:t===lt?!1:!s.absolutePositioned};return i.meta.maskStack=[n],delete i.meta.maskPreset,this.rebuild(t),n}refreshAll(){this.selected=null,this.pin();for(let t of this.layers.getAll())(t.meta.maskStack??[]).length!==0&&this.rebuild(t.meta.canvasMask?lt:t.id)}patch(t,e,i){let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(h=>h.id===e);if(a===-1)return!1;let o=i(n[a]);if(!o)return!1;let l=this.unwrap(t,s);return n[a]={...n[a],...o},this.commit(t,s,n,l),!0}};var ng=.1,ag=8;function og(r){return r instanceof DOMException&&r.name==="SecurityError"||r instanceof Error&&/taint|cross-origin|insecure/i.test(r.message)}var Ts=class{canvas;layers;history;events;units;snapping;crop;patterns;curves;maskPresets;layerMasks;fonts;licensing;pages;masks;fileAdapter;imageProvider;zoomLevel=1;selectionStyle={...hs};mockup=null;designBackground;designBackgroundImage=null;backgroundImageOptions=null;constructor(t,e){this.events=new Ge,this.fonts=new nr,e.fonts?.forEach(n=>this.fonts.register(n)),this.licensing=new ar(e.license),this.units=new sr(e.unit??"px",e.dpi??72);let i=this.units.toPixels(e.width),s=this.units.toPixels(e.height);this.designBackground=e.backgroundColor??"#ffffff",this.canvas=new Li(t,{width:i,height:s,backgroundColor:this.designBackground,preserveObjectStacking:e.preserveObjectStacking??!0,selection:!0}),this.layers=new Ue(this.canvas,this.events),this.fileAdapter=e.fileAdapter,this.imageProvider=e.imageProvider,this.history=new qe({getState:()=>JSON.stringify(this.toJSON()),restoreState:async n=>{let a=JSON.parse(n);await this.fromJSON(a)},events:this.events}),this.layers.setHistoryCallback(()=>this.history.save()),this.snapping=new Ke(this.canvas,this.events),this.crop=new Je(this.canvas,this.history,this.events),this.patterns=new be(this.canvas,this.layers,this.history,this.events),this.curves=new er(this.canvas,this.layers,this.history,this.events),this.maskPresets=new Ce(this.canvas,this.layers,this.history,this.events),this.layerMasks=new ke(this.canvas,this.layers,this.history,this.events),this.setupCanvasEvents(),this.refreshSelectionStyle(),this.history.saveImmediate(),this.pages=new or(this),this.masks=new lr(this)}async addImage(t,e){try{let i=await N.fromURL(t,{},{originX:"left",originY:"top",...e}),s=this.layers.add("image",i);return this.layers.select(s.id),this.history.save(),s}catch(i){throw this.events.emit("error",{message:"Failed to add image",error:i}),i}}async replaceImageSource(t,e){let i=this.layers.get(t);if(!i||i.type!=="image"&&i.type!=="mask")throw new Error(`Image or mask layer not found: ${t}`);if(i.meta.pattern)throw new Error("Clear the pattern before replacing the image source");this.crop.activeLayerId()===t&&this.crop.cancel();let s=i.fabricObject;try{let n=await N.fromURL(e,{},{originX:"left",originY:"top"});return n.set({left:s.left,top:s.top,originX:s.originX,originY:s.originY,width:s.width,height:s.height,cropX:s.cropX,cropY:s.cropY,scaleX:s.scaleX,scaleY:s.scaleY,angle:s.angle,skewX:s.skewX,skewY:s.skewY,flipX:s.flipX,flipY:s.flipY}),n.filters=[...s.filters],n.applyFilters(),n.setCoords(),this.layers.replaceObject(t,n),i}catch(n){throw this.events.emit("error",{message:"Failed to replace image source",error:n}),n}}addText(t,e){let i=new Bt(t,{fontSize:32,fontFamily:"Arial",fill:"#000000",width:200,originX:"left",originY:"top",...e}),s=this.layers.add("text",i);return this.layers.select(s.id),this.history.save(),s}addShape(t,e){let i=t.create(e),s=this.layers.add("shape",i,t.name);return this.layers.select(s.id),this.history.save(),s}async addTemplate(t,e){let i={};for(let a of t.parameters){let o=e[a.key]??a.default;if(o===void 0)throw new Error(`Missing template parameter: ${a.key}`);if(a.type==="number"&&!Number.isFinite(Number(o)))throw new Error(`Invalid number for template parameter: ${a.key}`);if(a.type==="color"&&!ie(o))throw new Error(`Invalid color for template parameter: ${a.key}`);i[a.key]=o}let s=Cs(t.svg.replace(/\{\{(\w+)(?:[|:]([^}]*))?\}\}/g,(a,o,l)=>{let h=i[o]??l;return h===void 0?a:xs(h)})),n=s.includes("<textPath")?[Ji(t,i)]:await Zi(t,s,i);if(n.length===0)throw new Error("Template SVG contains no renderable objects");return this.history.transaction(async()=>{let a=n.map(l=>{let h=this.layers.add(l.type,l.object,l.name);return l.curve&&this.curves.apply(h.id,l.curve,!1),h}),o=a.length===1?a[0]:await this.groupLayers(a.map(l=>l.id),t.name)??a[0];return o.fabricObject.set({left:this.canvas.getWidth()/2,top:this.canvas.getHeight()/2,originX:"center",originY:"center"}),o.fabricObject.setCoords(),this.layers.select(o.id),this.canvas.requestRenderAll(),this.history.save(),o})}removeLayer(t){this.crop.activeLayerId()===t&&this.crop.cancel(),this.masks.activeLayerId()===t&&this.masks.detach(t),this.layers.remove(t)&&this.history.save()}selectLayer(t){this.layers.select(t)}selectLayers(t){this.layers.selectMany(t)}getSelectedLayer(){let t=this.canvas.getActiveObject();return t?this.layers.findByObject(t)??null:null}flipLayer(t,e){let i=this.layers.get(t);if(!i)return;let s=i.fabricObject;e==="horizontal"?s.set("flipX",!s.flipX):s.set("flipY",!s.flipY),s.setCoords(),this.canvas.requestRenderAll(),this.history.save()}async duplicateLayer(t){let e=this.layers.get(t);if(!e)return null;let i=await e.fabricObject.clone();i.set({left:(i.left??0)+15,top:(i.top??0)+15}),i.setCoords();let s=this.layers.add(e.type,i,`${e.name} copy`);return s.meta=structuredClone(e.meta),s.visible=e.visible,s.locked=e.locked,s.opacity=e.opacity,i.set({visible:e.visible,selectable:!e.locked,evented:!e.locked,opacity:e.opacity}),this.patterns.attachTo(s),this.layers.select(s.id),this.canvas.requestRenderAll(),this.history.save(),s}applyImageAdjustments(t,e){let i=this.layers.get(t);if(!i||i.type!=="image")return!1;let s=i.fabricObject,a={...i.meta.imageAdjustments??{},...e},o=(l,h=-1)=>H(l??0,h,1);return s.filters=[new Ur.Brightness({brightness:o(a.brightness)}),new Ur.Contrast({contrast:o(a.contrast)}),new Ur.Saturation({saturation:o(a.saturation)}),new Ur.Blur({blur:o(a.blur,0)})],i.meta.imageAdjustments=a,s.applyFilters(),this.canvas.requestRenderAll(),this.history.save(),!0}async groupLayers(t,e="Group"){let i=[...new Set(t)],s=i.map(l=>this.layers.get(l)).filter(l=>l!==void 0&&l.parentId===null);if(s.length<2||s.length!==i.length)return null;let n=this.layers.getAll(),a=Math.max(...s.map(l=>n.indexOf(l))),o=n.slice(0,a).filter(l=>!s.includes(l)).length;return this.history.transaction(()=>{let l=[],h=[];for(let d of s)if(d.type==="group"&&d.children.length>0){let g=d.fabricObject.removeAll();for(let[f,p]of g.entries()){p.setCoords();let y=d.children[f];y&&(l.push(y),h.push(p))}d.children=[],this.layers.detach(d.id)}else l.push(d),h.push(d.fabricObject),this.layers.detach(d.id);let c=new U(h),u=this.layers.add("group",c,e);return this.layers.adoptChildren(u,l),this.layers.reorder(u.id,o),this.layers.select(u.id),this.history.save(),u})}async ungroupLayer(t){let e=this.layers.get(t);return!e||e.type!=="group"||e.children.length===0?[]:this.history.transaction(()=>{let i=this.layers.explode(e);return this.history.save(),this.layers.select(i[0]?.id??null),i})}toJSON(){return ds(this)}async fromJSON(t){let e=this.history.isRestoring();e||(this.history.saveImmediate(),this.history.pause());try{await gs(this,t),await this.patterns.rehydrateAll(),this.layerMasks.refreshAll()}catch(i){throw e||this.events.emit("error",{message:"Failed to load editor state",error:i}),i}finally{e||this.history.resume()}e||(this.history.clear(),this.history.saveImmediate())}async toPNG(t){return this.toRaster(t?.format??"png",t)}async toJPEG(t){return this.toRaster("jpeg",t)}async toWebP(t){return this.toRaster("webp",t)}async exportLayer(t,e={}){let i=this.layers.get(t);if(!i)throw new Error(`Layer not found: ${t}`);try{if(e.resolution==="source"&&i.fabricObject instanceof N){let s=await i.fabricObject.clone();return s.set({left:0,top:0,originX:"left",originY:"top",scaleX:1,scaleY:1,angle:0,flipX:!1,flipY:!1}),await ii(this.canvas,[s],{...e,width:s.width||1,height:s.height||1,cloneObjects:!1})}return await ii(this.canvas,[i.renderProxy??i.fabricObject],e)}catch(s){throw this.events.emit("error",{message:`Failed to export layer: ${t}`,error:s}),s}}async exportBackground(t={}){try{return await ii(this.canvas,[],{...t,backgroundColor:this.designBackground,backgroundImage:this.designBackgroundImage})}catch(e){throw this.events.emit("error",{message:"Failed to export background",error:e}),e}}async toRaster(t,e){this.events.emit("export:start",{format:t});try{await this.fonts.ready();let i=await this.withDesignBackground(()=>ri(this.canvas,{...e,format:t}));return this.events.emit("export:complete",{format:t}),this.licensing.track(`export:${t}`),i}catch(i){throw this.events.emit("error",{message:og(i)?"Canvas export was blocked by cross-origin image data; load remote images with CORS enabled":`Failed to export ${t.toUpperCase()}`,error:i}),i}}toSVG(){this.events.emit("export:start",{format:"svg"});try{let t=this.withDesignBackground(()=>vs(this.canvas));return this.events.emit("export:complete",{format:"svg"}),this.licensing.track("export:svg"),t}catch(t){throw this.events.emit("error",{message:"Failed to export SVG",error:t}),t}}async toSVGAsync(t={}){await this.fonts.ready();let e=this.toSVG();if(t.embedFonts===!1||this.fonts.getAll().length===0)return e;try{let i=await this.fonts.getEmbeddedCss();return e.replace(/(<svg\b[^>]*>)/i,`$1<defs><style>${i}</style></defs>`)}catch(i){throw this.events.emit("error",{message:"Failed to embed fonts in SVG",error:i}),i}}toDataURL(t="png",e=1){return this.withDesignBackground(()=>bs(this.canvas,t,e))}async toPrintFile(t={}){await this.fonts.ready();try{let e=this.mockup?.printArea,i=e?await ms(this.canvas,e,t):await ii(this.canvas,this.canvas.getObjects(),t);return this.licensing.track(`export:print:${t.format??"png"}`),i}catch(e){throw this.events.emit("error",{message:"Failed to export print file",error:e}),e}}async toMockupImage(t={}){if(!this.mockup)throw new Error("No mockup is configured");await this.fonts.ready();try{let e=await ys(this.canvas,this.mockup,t);return this.licensing.track(`export:mockup:${t.format??"png"}`),e}catch(e){throw this.events.emit("error",{message:"Failed to export mockup",error:e}),e}}withDesignBackground(t){if(!this.mockup)return t();let e=this.canvas.backgroundColor,i=this.canvas.backgroundImage;this.canvas.backgroundColor=this.designBackground,this.canvas.backgroundImage=this.designBackgroundImage??void 0;try{return t()}finally{this.canvas.backgroundColor=e,this.canvas.backgroundImage=i}}toPrintifyPositioning(){let t={},e=this.canvas.getWidth(),i=this.canvas.getHeight(),s=this.layers.getAll().filter(n=>n.type==="image");if(s.length===0)return t.front={x:.5,y:.5,scale:1,angle:0},t;for(let n of s){let a=n.fabricObject,o=a.getCenterPoint(),l=t[n.name]?`${n.name}-${n.id}`:n.name;t[l]={x:Q(o.x/e),y:Q(o.y/i),scale:Q(a.scaleX??1),angle:Q(a.angle??0)}}return t}toNormalizedPositioning(){let t=this.canvas.getWidth(),e=this.canvas.getHeight();return this.layers.getAll().map(i=>{let s=i.fabricObject,n=s.getCenterPoint(),a=s.getBoundingRect();return{layerId:i.id,name:i.name,type:i.type,centerX:Q(n.x/t),centerY:Q(n.y/e),width:Q(a.width/t),height:Q(a.height/e),scaleX:Q(s.scaleX??1),scaleY:Q(s.scaleY??1),angle:Q(s.angle??0)}})}toProviderPositioning(t){return t.map(this.toNormalizedPositioning(),{width:this.canvas.getWidth(),height:this.canvas.getHeight()})}async save(t,e){if(!this.fileAdapter)return;let i;e==="png"?i=await this.toPNG():e==="jpeg"?i=await this.toJPEG():e==="webp"?i=await this.toWebP():e==="svg"?i=await this.toSVGAsync():i=JSON.stringify(this.toJSON(),null,2);try{return await this.fileAdapter.save(i,t,e)}catch(s){throw this.events.emit("error",{message:`Failed to save ${e}`,error:s}),s}}async uploadImage(t){if(this.imageProvider?.upload)try{return await this.imageProvider.upload(t)}catch(e){throw this.events.emit("error",{message:"Failed to upload image",error:e}),e}}async browseImages(){if(!this.imageProvider?.browse)return null;try{return await this.imageProvider.browse()}catch(t){throw this.events.emit("error",{message:"Failed to browse images",error:t}),t}}async searchImages(t,e){if(!this.imageProvider?.search)return null;try{return await this.imageProvider.search(t,e)}catch(i){throw this.events.emit("error",{message:"Failed to search images",error:i}),i}}async addProviderImage(t,e){try{await this.imageProvider?.trackUse?.(t)}catch(i){throw this.events.emit("error",{message:"Failed to record image use",error:i}),i}return this.addImage(t.url,e)}setFileAdapter(t){this.fileAdapter=t}setImageProvider(t){this.imageProvider=t}setBackground(t){this.designBackground=t,this.mockup||(this.canvas.backgroundColor=t,this.canvas.requestRenderAll()),this.history.save(),this.events.emit("canvas:modified",{})}getDesignBackground(){return this.designBackground}getDesignBackgroundImage(){return this.designBackgroundImage}getBackgroundImageOptions(){return this.backgroundImageOptions?{...this.backgroundImageOptions}:null}async setBackgroundImage(t,e={}){if(t===null){this.setBackgroundImageObject(null);return}try{let i=await N.fromURL(t,{crossOrigin:e.crossOrigin??null,signal:e.signal},{originX:"left",originY:"top"}),s=i.width||1,n=i.height||1,a=this.canvas.getWidth(),o=this.canvas.getHeight(),l=e.fit??"cover",h=a/s,c=o/n,u=l==="stretch"?h:l==="contain"?Math.min(h,c):Math.max(h,c),d=l==="stretch"?c:u;i.set({left:(a-s*u)/2,top:(o-n*d)/2,scaleX:u,scaleY:d,opacity:H(e.opacity??1,0,1),selectable:!1,evented:!1});let g={...e};delete g.signal,this.setBackgroundImageObject(i,!0,g)}catch(i){throw this.events.emit("error",{message:"Failed to set background image",error:i}),i}}setBackgroundImageObject(t,e=!0,i=null){this.designBackgroundImage=t,this.backgroundImageOptions=t?i:null,this.canvas.backgroundImage=this.mockup?void 0:t??void 0,this.canvas.requestRenderAll(),e&&this.history.save(),this.events.emit("canvas:modified",{})}setTransparentBackground(){this.setBackground("")}resize(t,e,i={}){let s=this.units.toPixels(t),n=this.units.toPixels(e),a=this.canvas.getWidth(),o=this.canvas.getHeight();if((i.scaleContent??!0)&&a>0&&o>0){let h=s/a,c=n/o;for(let u of this.layers.getAll()){let d=u.fabricObject;d.set({left:(d.left??0)*h,top:(d.top??0)*c,scaleX:(d.scaleX??1)*h,scaleY:(d.scaleY??1)*c}),d.setCoords()}this.designBackgroundImage&&(this.designBackgroundImage.set({left:(this.designBackgroundImage.left??0)*h,top:(this.designBackgroundImage.top??0)*c,scaleX:(this.designBackgroundImage.scaleX??1)*h,scaleY:(this.designBackgroundImage.scaleY??1)*c}),this.designBackgroundImage.setCoords())}this.canvas.setDimensions({width:s,height:n}),this.patterns.syncArea(),this.canvas.requestRenderAll(),this.history.save(),this.events.emit("canvas:modified",{})}getImageDpi(t){let e=this.layers.get(t);if(!e||e.type!=="image")return null;let i=e.fabricObject,s=i.width??0,n=i.getScaledWidth();return s<=0||n<=0?null:Q(s/(n/this.units.getDpi()))}validateImageDpi(t=300){return this.layers.getAll().filter(e=>e.type==="image"&&!e.meta.pattern).flatMap(e=>{let i=this.getImageDpi(e.id);return i!==null&&i<t?[{layerId:e.id,layerName:e.name,effectiveDpi:i,minimumDpi:t}]:[]})}toThumbnail(t=320,e=320,i="png"){let s=Math.min(1,t/this.canvas.getWidth(),e/this.canvas.getHeight());return this.toDataURL(i,s)}bringToFront(t){return this.layers.reorder(t,this.layers.count()-1)}sendToBack(t){return this.layers.reorder(t,0)}bringForward(t){let e=this.layers.getAll().findIndex(i=>i.id===t);return e>=0&&this.layers.reorder(t,e+1)}sendBackward(t){let e=this.layers.getAll().findIndex(i=>i.id===t);return e>=0&&this.layers.reorder(t,e-1)}setZoom(t){let e=H(Q(t),ng,ag);e!==this.zoomLevel&&(this.zoomLevel=e,this.refreshSelectionStyle(),this.events.emit("zoom:changed",{zoom:e}))}zoom(t){this.setZoom(t)}getZoom(){return this.zoomLevel}zoomIn(t=.1){this.setZoom(this.zoomLevel+t)}zoomOut(t=.1){this.setZoom(this.zoomLevel-t)}resetZoom(){this.setZoom(1)}zoomToFit(t,e,i=0){let s=this.canvas.getWidth(),n=this.canvas.getHeight();if(s<=0||n<=0)return;let a=(t-i*2)/s,o=(e-i*2)/n;this.setZoom(Math.min(a,o))}zoomToSelection(t=24){let e=this.canvas.getActiveObject();if(!e)return;e.setCoords();let i=e.getBoundingRect();i.width<=0||i.height<=0||this.setZoom(Math.min((this.canvas.getWidth()-t*2)/i.width,(this.canvas.getHeight()-t*2)/i.height))}applyPattern(t,e){return this.patterns.apply(t,e)}clearPattern(t){return this.patterns.disable(t)}applyTextCurve(t,e){return this.curves.apply(t,e)}clearTextCurve(t){return this.curves.clear(t)}getTextCurve(t){return this.curves.get(t)}applyMaskPreset(t,e){return this.maskPresets.apply(t,e)}clearMaskPreset(t){return this.maskPresets.clear(t)}getMaskPreset(t){return this.maskPresets.get(t)}setLayerAspectLock(t,e){let i=this.layers.get(t);return i?(Se(i.fabricObject,e),e?i.meta.lockAspect=!0:delete i.meta.lockAspect,this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.history.save(),!0):!1}getLayerAspectLock(t){return this.layers.get(t)?.meta.lockAspect===!0}restoreAspectLocks(){for(let t of this.layers.getAll())t.meta.lockAspect&&Se(t.fabricObject,!0)}resetLayerTransform(t){let e=this.layers.get(t);return e?(us(e.fabricObject),this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.history.save(),!0):!1}setLayerShadow(t,e){let i=this.layers.get(t);return i?(ls(i.fabricObject,e),i.fabricObject.dirty=!0,this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.history.save(),!0):!1}getLayerShadow(t){let e=this.layers.get(t);return e?ei(e.fabricObject):null}setMockup(t,e={}){this.mockup=t,this.canvas.backgroundColor=t?"":this.designBackground,this.canvas.backgroundImage=t?void 0:this.designBackgroundImage??void 0,this.canvas.requestRenderAll(),this.events.emit("mockup:changed",{mockup:t}),e.history!==!1&&this.history.save()}clearMockup(){this.setMockup(null)}getMockup(){return this.mockup}dispose(){this.masks.dispose(),this.layerMasks.dispose(),this.snapping.dispose(),this.crop.dispose(),this.history.dispose(),this.patterns.dispose(),this.curves.dispose(),this.events.removeAllListeners(),this.canvas.dispose()}getSelectionStyle(){return{...this.selectionStyle}}setSelectionStyle(t){this.selectionStyle={...this.selectionStyle,...t},this.refreshSelectionStyle()}refreshSelectionStyle(){cs(this.canvas,this.selectionStyle,this.zoomLevel)}setupCanvasEvents(){this.canvas.on("object:added",e=>{e.target&&we(e.target,this.selectionStyle,this.zoomLevel)});let t=()=>{let e=this.canvas.getActiveObject();e&&we(e,this.selectionStyle,this.zoomLevel)};this.canvas.on("object:modified",e=>{if(!e.target)return;let i=this.layers.findByObject(e.target);i&&(this.events.emit("layer:modified",{layerId:i.id}),this.history.save())}),this.canvas.on("selection:created",e=>{t();let i=(e.selected??[]).map(s=>this.layers.findByObject(s)?.id).filter(s=>s!==void 0);this.events.emit("selection:changed",{selected:i})}),this.canvas.on("selection:updated",e=>{t();let i=(e.selected??[]).map(s=>this.layers.findByObject(s)?.id).filter(s=>s!==void 0);this.events.emit("selection:changed",{selected:i})}),this.canvas.on("selection:cleared",()=>{this.events.emit("selection:changed",{selected:[]})})}};var nh={mode:"grid",scale:100,horizontalSpacing:0,verticalSpacing:0,angle:0,horizontalOffset:50,offsetX:0,offsetY:0,rotationStepH:0,rotationStepV:0,horizontalLimit:0,verticalLimit:0};var ah=[{id:"a4-portrait",name:"A4 portrait",width:210,height:297,unit:"mm",dpi:300},{id:"a4-landscape",name:"A4 landscape",width:297,height:210,unit:"mm",dpi:300},{id:"us-letter",name:"US Letter",width:8.5,height:11,unit:"in",dpi:300},{id:"shirt-front",name:"Garment front",width:12,height:16,unit:"in",dpi:300},{id:"instagram-square",name:"Social square",width:1080,height:1080,unit:"px",dpi:72},{id:"story",name:"Story",width:1080,height:1920,unit:"px",dpi:72}];var ks=class{items=new Map;transform={zoom:1,panX:0,panY:0,devicePixelRatio:1};set(t){this.items.set(t.id,structuredClone(t))}remove(t){return this.items.delete(t)}clear(){this.items.clear()}getAll(){return[...this.items.values()].map(t=>structuredClone(t))}setTransform(t){if(!Number.isFinite(t.zoom)||t.zoom<=0)throw new Error("Annotation zoom must be positive");this.transform={...t,devicePixelRatio:t.devicePixelRatio??1}}documentToViewport(t){return{x:t.x*this.transform.zoom+this.transform.panX,y:t.y*this.transform.zoom+this.transform.panY}}viewportToDocument(t){return{x:(t.x-this.transform.panX)/this.transform.zoom,y:(t.y-this.transform.panY)/this.transform.zoom}}documentToDevice(t){let e=this.documentToViewport(t),i=this.transform.devicePixelRatio??1;return{x:e.x*i,y:e.y*i}}};return fh(lg);})();
|
|
504
|
+
`}applyTo2d({imageData:{data:r}}){let t=-this.vibrance;for(let e=0;e<r.length;e+=4){let i=r[e],s=r[e+1],n=r[e+2],a=Math.max(i,s,n),o=(i+s+n)/3,l=2*Math.abs(a-o)/255*t;r[e]+=a===i?0:(a-i)*l,r[e+1]+=a===s?0:(a-s)*l,r[e+2]+=a===n?0:(a-n)*l}}sendUniformData(r,t){r.uniform1f(t.uVibrance,-this.vibrance)}isNeutralState(){return this.vibrance===0}};m(Fr,"type","Vibrance"),m(Fr,"defaults",{vibrance:0}),m(Fr,"uniformLocations",["uVibrance"]),_.setClass(Fr);var qr=Gr({BaseFilter:()=>W,BlackWhite:()=>Nu,BlendColor:()=>Cr,BlendImage:()=>wr,Blur:()=>Sr,Brightness:()=>_r,Brownie:()=>$u,ColorMatrix:()=>ue,Composed:()=>gn,Contrast:()=>Tr,Convolute:()=>kr,Gamma:()=>Or,Grayscale:()=>Mr,HueRotation:()=>Ti,Invert:()=>Pr,Kodachrome:()=>Hu,Noise:()=>Er,Pixelate:()=>Ar,Polaroid:()=>Gu,RemoveColor:()=>Dr,Resize:()=>jr,Saturation:()=>Lr,Sepia:()=>Vu,Technicolor:()=>zu,Vibrance:()=>Fr,Vintage:()=>Wu});var Ve=class{listeners=new Map;on(t,e){this.listeners.has(t)||this.listeners.set(t,new Set),this.listeners.get(t).add(e)}off(t,e){this.listeners.get(t)?.delete(e)}once(t,e){let i=s=>{this.off(t,i),e(s)};this.on(t,i)}emit(t,e){let i=this.listeners.get(t);if(i)for(let s of i)s(e)}removeAllListeners(t){t?this.listeners.delete(t):this.listeners.clear()}};var zn=uh("crypto");var Bl="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var Ju=128,re,Ne;function Zu(r){if(r<0)throw new RangeError("Wrong ID size");try{!re||re.length<r?(re=Buffer.allocUnsafe(r*Ju),zn.webcrypto.getRandomValues(re),Ne=0):Ne+r>re.length&&(zn.webcrypto.getRandomValues(re),Ne=0)}catch(t){throw re=void 0,t}Ne+=r}function Xl(r=21){Zu(r|=0);let t="";for(let e=Ne-r;e<Ne;e++)t+=Bl[re[e]&63];return t}var pt=()=>Xl(12);var Ue=class{id;type;name;visible;locked;opacity;meta;fabricObject;renderProxy;children;parentId;constructor(t,e,i,s){this.id=s??pt(),this.type=t,this.name=i??`${t}-${this.id.slice(0,4)}`,this.visible=!0,this.locked=!1,this.opacity=1,this.meta={},this.fabricObject=e,this.renderProxy=null,this.children=[],this.parentId=null,this.fabricObject._layerId=this.id}hasMeta(){return Object.keys(this.meta).length>0}toData(){return{id:this.id,type:this.type,name:this.name,visible:this.visible,locked:this.locked,opacity:this.opacity,...this.hasMeta()?{meta:this.meta}:{},...this.children.length>0?{children:this.children.map(t=>t.toData())}:{}}}serialize(){return{...this.toData(),fabricObject:this.fabricObject.toObject()}}},qe=class{constructor(t,e){this.canvas=t;this.events=e}canvas;events;layers=[];onPropertyChanged;setHistoryCallback(t){this.onPropertyChanged=t}add(t,e,i,s){let n=new Ue(t,e,i,s);return this.layers.push(n),this.canvas.add(e),this.events.emit("layer:added",{layer:n.toData()}),this.emitChanged(),n}remove(t){let e=this.get(t);if(!e)return!1;if(e.parentId){let s=this.get(e.parentId);return s?(s.fabricObject.remove(e.fabricObject),s.children=s.children.filter(n=>n.id!==t),e.parentId=null,this.events.emit("layer:removed",{layerId:t}),s.children.length<2&&this.dissolve(s),this.emitChanged(),this.onPropertyChanged?.(),this.canvas.requestRenderAll(),!0):!1}let i=this.layers.findIndex(s=>s.id===t);return i===-1?!1:(this.canvas.remove(e.fabricObject),e.renderProxy&&this.canvas.remove(e.renderProxy),this.layers.splice(i,1),this.events.emit("layer:removed",{layerId:t}),this.emitChanged(),this.onPropertyChanged?.(),!0)}detach(t){let e=this.layers.findIndex(s=>s.id===t);if(e===-1)return;let[i]=this.layers.splice(e,1);return this.canvas.remove(i.fabricObject),i.renderProxy&&this.canvas.remove(i.renderProxy),i}explode(t){let e=[...t.children];return this.dissolve(t),this.events.emit("layer:removed",{layerId:t.id}),this.emitChanged(),this.onPropertyChanged?.(),this.canvas.requestRenderAll(),e}dissolve(t){let e=t.fabricObject.removeAll(),i=this.layers.findIndex(n=>n.id===t.id),s=t.children;t.children=[];for(let[n,a]of e.entries()){a.setCoords();let o=s[n];o&&(o.parentId=null,this.layers.splice(i+n,0,o),this.canvas.add(a),o.renderProxy&&this.canvas.add(o.renderProxy))}this.canvas.remove(t.fabricObject),this.layers=this.layers.filter(n=>n.id!==t.id),this.syncZOrder()}adoptChildren(t,e){for(let i of e)i.parentId=t.id;t.children=e,this.emitChanged(),this.onPropertyChanged?.()}adoptGroupChildren(t,e){let i=t.fabricObject.getObjects();t.children=i.map((s,n)=>{let a=e[n],o=new Ue(a?.type??"shape",s,a?.name,a?.id);return o.parentId=t.id,a?.meta&&(o.meta=structuredClone(a.meta)),a&&!a.visible&&(o.visible=!1,s.visible=!1),a?.locked&&(o.locked=!0,s.selectable=!1,s.evented=!1),a&&a.opacity!==1&&(o.opacity=a.opacity,s.opacity=a.opacity),o}),this.emitChanged()}replaceObject(t,e){let i=this.get(t);if(!i||i.fabricObject===e)return!1;let s=i.fabricObject,n=this.canvas.getObjects().indexOf(s),a=this.canvas.getActiveObject()===s;return this.canvas.remove(s),i.fabricObject=e,e._layerId=t,e.set({visible:i.visible,opacity:i.opacity,selectable:!i.locked,evented:!i.locked}),this.canvas.insertAt(Math.max(0,n),e),i.renderProxy&&(e.set({opacity:0}),this.syncZOrder()),a&&this.canvas.setActiveObject(e),this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.emitChanged(),this.onPropertyChanged?.(),!0}setRenderProxy(t,e){let i=this.get(t);!i||i.renderProxy===e||(i.renderProxy&&this.canvas.remove(i.renderProxy),i.renderProxy=e,e&&(e._layerId=t,e.set({visible:i.visible,opacity:i.opacity,selectable:!i.locked,evented:!i.locked}),this.canvas.add(e),this.syncZOrder()),this.canvas.requestRenderAll(),this.emitChanged())}syncZOrder(){for(let t of this.layers)this.canvas.bringObjectToFront(t.fabricObject),t.renderProxy&&this.canvas.bringObjectToFront(t.renderProxy)}siblingsOf(t){return t.parentId?this.get(t.parentId)?.children??this.layers:this.layers}reorder(t,e){let i=this.get(t);if(!i)return!1;let s=this.siblingsOf(i),n=s.indexOf(i);if(n===-1||!Number.isFinite(e))return!1;let a=Math.max(0,Math.min(s.length-1,Math.round(e)));if(n===a)return!1;let[o]=s.splice(n,1);if(s.splice(a,0,o),o.parentId){let l=this.get(o.parentId)?.fabricObject;l&&(l.remove(o.fabricObject),l.insertAt(a,o.fabricObject))}else this.syncZOrder();return this.events.emit("layer:reordered",{layerIds:s.map(l=>l.id)}),this.emitChanged(),this.onPropertyChanged?.(),!0}select(t){if(t===null)this.canvas.discardActiveObject(),this.exitGroups();else{let i=this.get(t);i&&(i.parentId?this.enterGroup(i.parentId):this.exitGroups(),this.canvas.setActiveObject(i.renderProxy??i.fabricObject))}this.canvas.requestRenderAll(),this.events.emit("layer:selected",{layerId:t});let e=t&&this.get(t)?[t]:[];this.events.emit("selection:changed",{selected:e})}enterGroup(t){let e=this.get(t);if(!e)return;let i=e.fabricObject;i.subTargetCheck=!0,i.interactive=!0}exitGroups(){for(let t of this.layers){if(t.type!=="group")continue;let e=t.fabricObject;e.interactive&&(e.interactive=!1)}}selectMany(t){let e=t.flatMap(s=>{let n=this.get(s);return n&&!n.parentId?[n]:[]});if(e.length===0)return this.select(null);if(e.length===1)return this.select(e[0].id);this.canvas.discardActiveObject(),this.exitGroups();let i=new Fe(e.map(s=>s.renderProxy??s.fabricObject),{canvas:this.canvas});this.canvas.setActiveObject(i),this.canvas.requestRenderAll(),this.events.emit("selection:changed",{selected:e.map(s=>s.id)})}*walk(t=this.layers){for(let e of t)yield e,e.children.length>0&&(yield*this.walk(e.children))}get(t){for(let e of this.walk())if(e.id===t)return e}getAll(){return[...this.layers]}getTree(){return this.layers.map(t=>t.toData())}findByObject(t){let e=t._layerId;if(e)return this.get(e);for(let i of this.walk())if(i.fabricObject===t)return i}setVisibility(t,e){let i=this.get(t);i&&i.visible!==e&&(i.visible=e,i.fabricObject.visible=e,i.renderProxy&&(i.renderProxy.visible=e),this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.())}setLocked(t,e){let i=this.get(t);if(!i||i.locked===e)return;i.locked=e;let s=i.renderProxy??i.fabricObject;s.selectable=!e,s.evented=!e,this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.()}setOpacity(t,e){let i=this.get(t);if(!i||!Number.isFinite(e))return;let s=Math.max(0,Math.min(1,e));i.opacity!==s&&(i.opacity=s,i.renderProxy?i.renderProxy.opacity=s:i.fabricObject.opacity=s,this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.())}setName(t,e){let i=this.get(t);i&&i.name!==e&&(i.name=e,this.emitChanged(),this.onPropertyChanged?.())}setMeta(t,e){let i=this.get(t);if(!i)return;let s={...i.meta},n=!1;for(let[a,o]of Object.entries(e)){if(o===void 0){a in s&&(delete s[a],n=!0);continue}s[a]!==o&&(n=!0),s[a]=o}n&&(i.meta=s,this.emitChanged(),this.onPropertyChanged?.())}clear(){for(let t of this.layers)this.canvas.remove(t.fabricObject),t.renderProxy&&this.canvas.remove(t.renderProxy),t.children=[];this.layers=[],this.emitChanged()}count(){return this.layers.length}emitChanged(){this.events.emit("layers:changed",{layers:this.layers.map(t=>t.toData())})}};var Yl=24;function Qu(r){return typeof r.text=="string"}function td(r,t){let e=new Map(r.parameters.map(s=>[s.key,s.label||s.key])),i=new Map;for(let s of r.svg.matchAll(/<text\b[^>]*>([\s\S]*?)<\/text>/g)){let n=/\{\{(\w+)(?:[|:]([^}]*))?\}\}/.exec(s[1]);if(!n)continue;let a=e.get(n[1]);if(!a)continue;let o=String(t[n[1]]??n[2]??"").trim();o&&i.set(o,a)}return i}function ed(r,t){let e=r.trim(),i=t.get(e);return i||(e?e.length>Yl?`${e.slice(0,Yl-1)}\u2026`:e:"Text")}function rd(r){let t=r.id;if(typeof t=="string"&&t)return t;let e=r.type||"shape";return e.charAt(0).toUpperCase()+e.slice(1)}function id(r){return new Bt(r.text,{left:r.left,top:r.top,originX:r.originX,originY:r.originY,angle:r.angle,scaleX:r.scaleX,scaleY:r.scaleY,fontSize:r.fontSize,fontFamily:r.fontFamily,fontWeight:r.fontWeight,fontStyle:r.fontStyle,textAlign:r.textAlign,charSpacing:r.charSpacing,lineHeight:r.lineHeight,fill:r.fill,stroke:r.stroke,strokeWidth:r.strokeWidth,opacity:r.opacity,width:Math.max(1,(r.width??0)+2)})}function Gn(r,t,e){if(r.id==="circular-text")return{arc:100,wave:0};if(r.id==="wave-text")return{arc:0,wave:50};let i=Number(t.radius??200);if(!Number.isFinite(i)||i<=0)return{arc:0,wave:0};let s=100*e/(Math.PI*i);return{arc:Math.max(-100,Math.min(100,s)),wave:0}}function Ji(r,t){let e=String(t.text??"Text"),i=r.id==="circular-text"?28:40,s=new Bt(e,{fontSize:i,fontFamily:String(t.font??"Arial"),fontWeight:"bold",fill:String(t.color??"#000000"),originX:"left",originY:"top",width:Math.max(1,e.length*i*.62)});return{type:"text",name:r.parameters.find(n=>n.key==="text")?.label||"Text",object:s,curve:Gn(r,t,s.width??0)}}async function Zi(r,t,e){let i=td(r,e),{objects:s}=await Fl(t),n=[];for(let a of s)if(a!==null){if(Qu(a)){n.push({type:"text",name:ed(a.text,i),object:id(a)});continue}n.push({type:"shape",name:rd(a),object:a})}return n}var Ke=class r{static ASSET_KEY="__canvasEditorHistoryAsset";undoStack=[];redoStack=[];assets=new Map;assetIds=new Map;nextAssetId=1;maxSize;maxBytes;paused=!1;debounceTimer=null;debounceMs;getState;restoreState;events;transactionDepth=0;transactionDirty=!1;constructor(t){this.getState=t.getState,this.restoreState=t.restoreState,this.events=t.events,this.maxSize=t.maxSize??50,this.maxBytes=t.maxBytes??50*1024*1024,this.debounceMs=t.debounceMs??300}save(){if(!this.paused){if(this.transactionDepth>0){this.transactionDirty=!0;return}this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{this.saveImmediate()},this.debounceMs),this.emitChanged()}}saveImmediate(){if(this.paused){this.cancelPending();return}if(this.transactionDepth>0){this.transactionDirty=!0;return}this.cancelPending();let t=this.getState(),e=this.compactState(t);if(this.undoStack.at(-1)===e){this.emitChanged();return}for(this.undoStack.push(e);this.undoStack.length>this.maxSize;)this.undoStack.shift();this.redoStack=[],this.trimToBudget(),this.events.emit("history:snapshot",{bytes:t.length*2,totalBytes:this.snapshotBytes(),entries:this.undoStack.length}),this.emitChanged()}beginTransaction(){this.transactionDepth===0&&this.debounceTimer&&this.saveImmediate(),this.transactionDepth+=1}endTransaction(){this.transactionDepth!==0&&(this.transactionDepth-=1,this.transactionDepth===0&&this.transactionDirty&&(this.transactionDirty=!1,this.saveImmediate()))}async transaction(t){this.beginTransaction();try{return await t()}finally{this.endTransaction()}}async undo(){this.cancelPending();let t=this.undoStack.at(-1);if(!t)return;let e=this.compactState(this.getState()),i=e===t;if(i&&this.undoStack.length<2)return;let s=i?this.undoStack[this.undoStack.length-2]:t;this.paused=!0;try{await this.restoreState(this.expandState(s)),i&&this.undoStack.pop(),this.redoStack.push(e),this.trimToBudget()}catch(n){throw this.events.emit("error",{message:"Failed to undo the last change",error:n}),n}finally{this.paused=!1,this.emitChanged()}}async redo(){this.cancelPending();let t=this.redoStack.at(-1);if(t){this.paused=!0;try{await this.restoreState(this.expandState(t)),this.redoStack.pop(),this.undoStack.at(-1)!==t&&this.undoStack.push(t),this.trimToBudget()}catch(e){throw this.events.emit("error",{message:"Failed to redo the last change",error:e}),e}finally{this.paused=!1,this.emitChanged()}}}isRestoring(){return this.paused}pause(){this.paused=!0}resume(){this.paused=!1}canUndo(){return this.undoStack.length>1||this.debounceTimer!==null}canRedo(){return this.redoStack.length>0}clear(){this.cancelPending(),this.undoStack=[],this.redoStack=[],this.assets.clear(),this.assetIds.clear(),this.emitChanged()}getSnapshotBytes(){return this.snapshotBytes()}cancelPending(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}dispose(){this.cancelPending(),this.transactionDepth=0,this.transactionDirty=!1,this.undoStack=[],this.redoStack=[],this.assets.clear(),this.assetIds.clear()}emitChanged(){this.events.emit("history:changed",{canUndo:this.canUndo(),canRedo:this.canRedo()})}snapshotBytes(){let t=[...this.undoStack,...this.redoStack].reduce((i,s)=>i+s.length*2,0),e=[...this.assets.values()].reduce((i,s)=>i+s.length*2,0);return t+e}trimToBudget(){for(this.pruneAssets();this.undoStack.length>1&&this.snapshotBytes()>this.maxBytes;)this.undoStack.shift(),this.pruneAssets();for(;this.redoStack.length>1&&this.snapshotBytes()>this.maxBytes;)this.redoStack.shift(),this.pruneAssets()}compactState(t){let e;try{e=JSON.parse(t)}catch{return t}let i=s=>{if(typeof s=="string"&&/^data:image\/(?:png|jpeg|webp);base64,/i.test(s)){let n=this.assetIds.get(s);return n||(n=`a${this.nextAssetId++}`,this.assetIds.set(s,n),this.assets.set(n,s)),{[r.ASSET_KEY]:n}}return Array.isArray(s)?s.map(i):!s||typeof s!="object"?s:Object.fromEntries(Object.entries(s).map(([n,a])=>[n,i(a)]))};return JSON.stringify(i(e))}expandState(t){let e;try{e=JSON.parse(t)}catch{return t}let i=s=>{if(Array.isArray(s))return s.map(i);if(!s||typeof s!="object")return s;let n=s,a=n[r.ASSET_KEY];if(typeof a=="string"&&Object.keys(n).length===1){let o=this.assets.get(a);if(!o)throw new Error(`Missing history raster asset: ${a}`);return o}return Object.fromEntries(Object.entries(n).map(([o,l])=>[o,i(l)]))};return JSON.stringify(i(e))}pruneAssets(){if(this.assets.size===0)return;let t=[...this.undoStack,...this.redoStack];for(let[e,i]of this.assets){let s=`"${r.ASSET_KEY}":"${e}"`;t.some(n=>n.includes(s))||(this.assets.delete(e),this.assetIds.delete(i))}}};var sd="#22c55e",Je=class{constructor(t,e){this.canvas=t;this.events=e;this.onMoving=i=>this.handleMoving(i.target),this.onAfterRender=()=>this.drawGuides(),this.onModified=()=>this.clearGuides(),this.canvas.on("object:moving",this.onMoving),this.canvas.on("after:render",this.onAfterRender),this.canvas.on("mouse:up",this.onModified),this.canvas.on("selection:cleared",this.onModified)}canvas;events;enabled=!1;threshold=8;guides=[];onMoving;onAfterRender;onModified;setEnabled(t){this.enabled!==t&&(this.enabled=t,t||this.clearGuides(),this.events.emit("snap:changed",{enabled:t}))}isEnabled(){return this.enabled}setThreshold(t){this.threshold=Math.max(0,t)}dispose(){this.canvas.off("object:moving",this.onMoving),this.canvas.off("after:render",this.onAfterRender),this.canvas.off("mouse:up",this.onModified),this.canvas.off("selection:cleared",this.onModified),this.guides=[]}handleMoving(t){if(!this.enabled||!t)return;t.setCoords();let e=t.getBoundingRect(),i=this.canvas.getWidth(),s=this.canvas.getHeight(),{xs:n,ys:a}=nd(this.canvas,t,i,s);this.guides=[];let o=$l([e.left,e.left+e.width/2,e.left+e.width],n,this.threshold);o!==null&&(t.set("left",(t.left??0)+o.delta),this.guides.push({x:o.line}));let l=$l([e.top,e.top+e.height/2,e.top+e.height],a,this.threshold);l!==null&&(t.set("top",(t.top??0)+l.delta),this.guides.push({y:l.line})),t.setCoords()}drawGuides(){if(!this.enabled||this.guides.length===0)return;let t=this.canvas.contextTop;if(!t)return;let e=this.canvas.getRetinaScaling(),i=this.canvas.getWidth(),s=this.canvas.getHeight();t.save(),t.setTransform(e,0,0,e,0,0),t.lineWidth=1,t.strokeStyle=sd,t.setLineDash([4,4]),t.beginPath();for(let n of this.guides)n.x!==void 0&&(t.moveTo(n.x,0),t.lineTo(n.x,s)),n.y!==void 0&&(t.moveTo(0,n.y),t.lineTo(i,n.y));t.stroke(),t.restore()}clearGuides(){this.guides.length!==0&&(this.guides=[],this.canvas.clearContext(this.canvas.contextTop))}};function nd(r,t,e,i){let s=[0,e/2,e],n=[0,i/2,i];for(let a of r.getObjects()){if(a===t||!a.visible)continue;a.setCoords();let o=a.getBoundingRect();s.push(o.left,o.left+o.width/2,o.left+o.width),n.push(o.top,o.top+o.height/2,o.top+o.height)}return{xs:s,ys:n}}function $l(r,t,e){let i=null;for(let s of r)for(let n of t){let a=Math.abs(s-n);a<=e&&(i===null||a<i.dist)&&(i={delta:n-s,line:n,dist:a})}return i?{delta:i.delta,line:i.line}:null}function H(r,t,e){return Math.min(e,Math.max(t,r))}function Q(r){return Math.round(r*100)/100}var Ze=class{constructor(t,e,i){this.canvas=t;this.history=e;this.events=i;this.onSelectionCleared=()=>{this.session&&this.cancel()},this.canvas.on("selection:cleared",this.onSelectionCleared)}canvas;history;events;session=null;onSelectionCleared;isActive(){return this.session!==null}activeLayerId(){return this.session?.layerId??null}start(t){if(t.type!=="image")return;this.session&&this.cancel();let e=t.fabricObject,i=e.angle??0;i&&e.rotate(0),e.setCoords();let s=e.getBoundingRect(),n=new dt({left:s.left,top:s.top,width:s.width,height:s.height,originX:"left",originY:"top",fill:"rgba(34,197,94,0.12)",stroke:Wl,strokeWidth:1,strokeDashArray:[4,4],strokeUniform:!0,lockRotation:!0,cornerColor:Wl,transparentCorners:!1});n.setControlsVisibility({mtr:!1});let a=e.selectable??!0,o=e.evented??!0;e.selectable=!1,e.evented=!1,this.canvas.add(n),this.canvas.setActiveObject(n),this.canvas.requestRenderAll(),this.session={layerId:t.id,image:e,rect:n,prevSelectable:a,prevEvented:o,prevAngle:i},this.events.emit("crop:changed",{active:!0,layerId:t.id})}apply(){let t=this.session;if(!t)return;let{image:e,rect:i}=t;i.setCoords(),e.setCoords();let s=e.scaleX??1,n=e.scaleY??1,a=e.left??0,o=e.top??0,l=e.getElement(),h=l.naturalWidth||e.width||0,c=l.naturalHeight||e.height||0,u=(e.cropX??0)+(i.left-a)/s,d=(e.cropY??0)+(i.top-o)/n,g=i.getScaledWidth()/s,f=i.getScaledHeight()/n;u=H(u,0,Math.max(0,h-1)),d=H(d,0,Math.max(0,c-1)),g=H(g,1,h-u),f=H(f,1,c-d),e.set({cropX:u,cropY:d,width:g,height:f,left:a+(u-(e.cropX??0))*s,top:o+(d-(e.cropY??0))*n}),e.setCoords(),t.prevAngle&&(e.rotate(t.prevAngle),e.setCoords()),this.finish(),this.history.save()}cancel(){let t=this.session;t&&(t.prevAngle&&(t.image.rotate(t.prevAngle),t.image.setCoords()),this.finish())}dispose(){this.cancel(),this.canvas.off("selection:cleared",this.onSelectionCleared)}finish(){let t=this.session;t&&(this.session=null,this.canvas.remove(t.rect),t.image.selectable=t.prevSelectable,t.image.evented=t.prevEvented,this.canvas.setActiveObject(t.image),this.canvas.requestRenderAll(),this.events.emit("crop:changed",{active:!1,layerId:null}))}},Wl="#22c55e";var Qi=.5,ad=1e5;function od(r){let t=r.width;try{r.set({width:ad}),r.initDimensions?.();let e=r.calcTextWidth?.()??t;return Number.isFinite(e)&&e>0?e:t}finally{r.set({width:t}),r.initDimensions?.()}}function Kr(r){if(!r)return null;let t=r;return typeof t.text=="string"&&typeof t.calcTextWidth=="function"?t:null}function Qe(r){let t=Math.max(0,r.width??0),e=r.calcTextWidth?.()??t,i=Math.max(1,Math.min(t,Number.isFinite(e)?e:t)),s=(t-i)/2,n=r.textAlign??"left";if(n.includes("center"))return{width:i,dx:0};let a=r.flipX?-1:1;return{width:i,dx:a*(n.includes("right")?s:-s)}}function Hl(r){let t=Kr(r);if(!t||t.path)return!1;let e=Qe(t),i=od(t)+Qi;if(Math.abs(i-t.width)<Qi)return!1;let s=t.getCenterPoint();t.set({width:i}),t.initDimensions?.();let n=Qe(t),a=(e.dx-n.dx)*(t.scaleX??1),o=(t.angle??0)*Math.PI/180,l=new v(s.x+a*Math.cos(o),s.y+a*Math.sin(o));return t.setPositionByOrigin(l,"center","center"),t.setCoords(),t.dirty=!0,!0}function ts(r,t,e,i,s,n){let a=n??{x:t/2,y:e/2},l=ld(a,t,e)*2,h=Math.max(1,l/200),c=Math.max(h,i*(1+r.horizontalSpacing/100)),u=Math.max(h,s*(1+r.verticalSpacing/100)),d=Math.ceil(l/c)+2,g=Math.ceil(l/u)+2,[f,p]=zl(r.horizontalLimit,Math.ceil(d/2)),[y,b]=zl(r.verticalLimit,Math.ceil(g/2)),x=c*(Gl(r.offsetX)/100),C=u*(Gl(r.offsetY)/100),S=[];for(let w=y;w<=b;w++)for(let k=f;k<=p;k++){let T=k*c+x,O=w*u+C;r.mode==="brick-horizontal"&&Vl(w)===1?T+=c*(r.horizontalOffset/100):r.mode==="brick-vertical"&&Vl(k)===1&&(O+=u*(r.horizontalOffset/100));let M=(k*r.rotationStepH+w*r.rotationStepV)*Math.PI/180;S.push({x:T,y:O,rotation:M})}return S}function tr(r,t,e,i,s,n,a,o,l){let h=o??{x:i/2,y:s/2},c=l&&l.width>0?l.width:n,u=l&&l.height>0?l.height:a;r.save(),r.translate(h.x,h.y),r.rotate(e.angle*Math.PI/180);for(let d of ts(e,i,s,n,a,h))r.save(),r.translate(d.x,d.y),r.rotate(d.rotation),r.drawImage(t,-c/2,-u/2,c,u),r.restore();r.restore()}function zl(r,t){let e=Number.isFinite(r)?Math.floor(r):0;if(!e||e<=0)return[-t,t];let i=-Math.floor((e-1)/2);return[i,i+e-1]}function ld(r,t,e){let i=Math.max(Math.abs(r.x),Math.abs(t-r.x)),s=Math.max(Math.abs(r.y),Math.abs(e-r.y));return Math.sqrt(i*i+s*s)}function Gl(r){return typeof r!="number"||!Number.isFinite(r)?0:Math.max(-100,Math.min(100,r))}function Vl(r){return(r%2+2)%2}var hd=16e6,cd=8,ud=2,Nl=2,ie=class r extends G{static type="TiledPattern";source;config;area;snapshotEl=null;snapshotScale=0;constructor(t,e,i){super({originX:"center",originY:"center",objectCaching:!1,lockScalingFlip:!0}),this.source=t,this.config=e,this.area=i,this.setControlsVisibility({ml:!1,mr:!1,mt:!1,mb:!1}),this.syncBox()}setConfig(t){this.config=t,this.syncBox()}setArea(t){this.area=t,this.invalidate(),this.syncBox()}invalidate(){this.snapshotEl=null,this.snapshotScale=0,this.dirty=!0}dispose(){this.snapshotEl=null,this.snapshotScale=0}syncBox(){let{tileW:t,tileH:e}=this.baseTile(),i=this.source.getCenterPoint().add(this.inkOffset()),s=this.anchorFromOrigin(i,t,e,this.config.angle);this.set({left:s.x,top:s.y,width:t,height:e,scaleX:1,scaleY:1,angle:this.config.angle}),this.setCoords(),this.dirty=!0}liveAngle(){return this.angle??0}liveScale(){return(this.config.scale??100)*Math.abs(this.scaleX??1)}liveOrigin(){let{tileW:t,tileH:e}=this.liveTile(),i=this.getCenterPoint(),s=this.shiftVector(t,e,this.liveAngle()),n=this.inkOffset();return new v(i.x-s.x-n.x,i.y-s.y-n.y)}_render(t){let{width:e,height:i}=this.area;if(e<=0||i<=0)return;let{tileW:s,tileH:n}=this.liveTile(),a=gd(t),o=this.ensureSnapshot(a*(s/Math.max(1,this.baseW())));if(!o)return;let l=this.getCenterPoint(),h=this.liveAngle();t.save(),t.scale(1/(this.scaleX||1),1/(this.scaleY||1)),t.rotate(-h*Math.PI/180),t.translate(-l.x,-l.y);let c={x:l.x,y:l.y},u={...this.config,angle:h,offsetX:0,offsetY:0};tr(t,o,u,e,i,s,n,c,this.drawSize(s,n,Nl/a)),t.restore()}_toSVG(){let{width:t,height:e}=this.area;if(t<=0||e<=0)return[];let i=document.createElement("canvas");i.width=Math.max(1,Math.round(t)),i.height=Math.max(1,Math.round(e));let s=i.getContext("2d");if(!s)return[];let{tileW:n,tileH:a}=this.liveTile(),o=this.ensureSnapshot(n/Math.max(1,this.baseW()));if(!o)return[];let l=this.getCenterPoint(),h=this.liveAngle();return tr(s,o,{...this.config,angle:h,offsetX:0,offsetY:0},t,e,n,a,{x:l.x,y:l.y},this.drawSize(n,a,Nl)),[`<g transform="rotate(${-h}) translate(${-l.x} ${-l.y})">`,`<image x="0" y="0" width="${t}" height="${e}" `,`xlink:href="${i.toDataURL("image/png")}"></image></g>
|
|
505
|
+
`]}toObject(){let t=super.toObject();return delete t.source,t}clone(){let t=new r(this.source,this.config,this.area);return t.set({left:this.left,top:this.top,angle:this.angle,scaleX:this.scaleX,scaleY:this.scaleY,width:this.width,height:this.height,visible:this.visible,opacity:this.opacity}),Promise.resolve(t)}sourceBox(){let t=Kr(this.source),e=dd(this.source),i=this.source.getBoundingRect();if(e&&!t)return{width:i.width,height:i.height};let s={};e||(s.strokeWidth=0),t&&(s.width=Qe(t).width);let n=this.source._getTransformedDimensions(s),a=(this.source.angle??0)*Math.PI/180,o=Math.abs(Math.cos(a)),l=Math.abs(Math.sin(a));return{width:n.x*o+n.y*l,height:n.x*l+n.y*o}}inkOffset(){let t=Kr(this.source);if(!t)return new v(0,0);let{dx:e}=Qe(t);if(!e)return new v(0,0);let i=e*(this.source.scaleX??1),s=(this.source.angle??0)*Math.PI/180;return new v(i*Math.cos(s),i*Math.sin(s))}baseW(){return Math.max(1,this.sourceBox().width)}baseH(){return Math.max(1,this.sourceBox().height)}drawSize(t,e,i=0){let s=this.snapshotEl;return!s||this.snapshotScale<=0?{width:t+i,height:e+i}:{width:s.width/this.snapshotScale*(t/this.baseW())+i,height:s.height/this.snapshotScale*(e/this.baseH())+i}}baseTile(){let t=this.sourceBox(),e=Math.max(1,this.config.scale??100)/100,i=this.tileFloor();return{tileW:Math.max(i,t.width*e),tileH:Math.max(i,t.height*e)}}liveTile(){let t=this.baseTile(),e=this.tileFloor();return{tileW:Math.max(e,t.tileW*Math.abs(this.scaleX??1)),tileH:Math.max(e,t.tileH*Math.abs(this.scaleY??1))}}tileFloor(){let{width:t,height:e}=this.area;return Math.max(2,Math.sqrt(t*t+e*e)/200)}shiftVector(t,e,i){let s=t*(Ul(this.config.offsetX)/100),n=e*(Ul(this.config.offsetY)/100),a=i*Math.PI/180,o=Math.cos(a),l=Math.sin(a);return new v(s*o-n*l,s*l+n*o)}anchorFromOrigin(t,e,i,s){let n=this.shiftVector(e,i,s);return new v(t.x+n.x,t.y+n.y)}ensureSnapshot(t){let e=this.clampScale(t);if(!(this.source.dirty||!this.snapshotEl||this.snapshotScale<e||this.snapshotScale>e*ud))return this.snapshotEl;let s=this.source,n=s.opacity;s.opacity=1;let a=Kr(s),o=a?.width,l=a?Qe(a).width+Qi:0,h=a!==null&&o!==void 0&&l<o;try{h&&a&&(a.set({width:l}),a.initDimensions?.());let c=s.toCanvasElement({multiplier:e,enableRetinaScaling:!1});if(!c.width||!c.height)return null;this.snapshotEl=c,this.snapshotScale=e}catch{return this.snapshotEl}finally{s.opacity=n,h&&a&&o!==void 0&&(a.set({width:o}),a.initDimensions?.()),s.dirty=!1}return this.snapshotEl}clampScale(t){let e=Math.min(cd,Math.max(.05,t)),i=this.source.getBoundingRect(),s=Math.max(1,i.width*i.height),n=Math.sqrt(hd/s);return Math.max(.05,Math.min(e,n))}};function dd(r){if(!r.strokeWidth||r.strokeWidth<=0)return!1;let{stroke:t}=r;return typeof t=="string"?t!==""&&t!=="transparent":t!=null}function Ul(r){return typeof r!="number"||!Number.isFinite(r)?0:Math.max(-100,Math.min(100,r))}function gd(r){if(typeof r.getTransform!="function")return 1;try{let t=r.getTransform();return Math.max(Math.hypot(t.a,t.b),Math.hypot(t.c,t.d),.05)}catch{return 1}}var fd=10,pd=300,be=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s;this.canvas.on("object:modified",this.onObjectModified),this.canvas.on("text:changed",this.onSourceModified),this.events.on("layer:removed",this.onLayerRemoved)}canvas;layers;history;events;proxies=new Map;onObjectModified=t=>{let e=t.target;e instanceof ie?this.commitGesture(e):this.invalidateFor(e)};onSourceModified=t=>{this.invalidateFor(t.target)};onLayerRemoved=({layerId:t})=>{let e=this.proxies.get(t);e&&(e.dispose(),this.proxies.delete(t))};isPattern(t){return!!this.layers.get(t)?.meta.pattern}getConfig(t){return this.layers.get(t)?.meta.pattern?.config??null}async apply(t,e){let i=this.layers.get(t);if(i)try{this.layers.setMeta(t,{pattern:{config:e}});let s=this.proxies.get(t);s?(s.setConfig(e),this.canvas.requestRenderAll()):this.attach(i,e),this.history.save()}catch(s){throw this.events.emit("error",{message:"Failed to apply pattern",error:s}),s}}async disable(t){let e=this.layers.get(t);if(e?.meta.pattern)try{this.detach(t),Jr(e.fabricObject,e.meta.pattern.originalLocks),e.fabricObject.set({opacity:e.opacity,selectable:!e.locked,evented:!e.locked}),this.layers.setMeta(t,{pattern:void 0}),this.canvas.requestRenderAll(),this.history.save()}catch(i){throw this.events.emit("error",{message:"Failed to clear pattern",error:i}),i}}async rehydrateAll(){this.clearProxies();for(let t of this.layers.getAll()){let e=t.meta.pattern;if(e)try{vd(e)&&(await bd(t,e),this.layers.setMeta(t.id,{pattern:{config:e.config}})),this.attach(t,e.config)}catch(i){this.events.emit("error",{message:"Failed to restore pattern layer",error:i})}}this.canvas.requestRenderAll()}syncArea(){let t=this.area();for(let e of this.proxies.values())e.setArea(t);this.proxies.size>0&&this.canvas.requestRenderAll()}invalidate(t){let e=this.proxies.get(t);e&&(e.invalidate(),e.syncBox(),this.canvas.requestRenderAll())}attachTo(t){let e=t.meta.pattern;!e||this.proxies.has(t.id)||this.attach(t,e.config)}dispose(){this.canvas.off("object:modified",this.onObjectModified),this.canvas.off("text:changed",this.onSourceModified),this.events.off("layer:removed",this.onLayerRemoved),this.clearProxies()}clearProxies(){for(let t of this.proxies.values())t.dispose();this.proxies.clear()}attach(t,e){let i=new ie(t.fabricObject,e,this.area()),s=this.canvas.getActiveObject()===t.fabricObject;t.fabricObject.set({opacity:0,selectable:!1,evented:!1}),this.proxies.set(t.id,i),this.layers.setRenderProxy(t.id,i),s&&this.canvas.setActiveObject(i),this.canvas.requestRenderAll()}commitGesture(t){let e=this.layers.findByObject(t),i=e?.meta.pattern;if(!e||!i)return;let s=t.liveOrigin(),n=md(t.liveScale(),fd,pd),a=yd(t.liveAngle());e.fabricObject.setPositionByOrigin(s,"center","center"),e.fabricObject.setCoords();let o={...i.config,scale:n,angle:a};this.layers.setMeta(e.id,{pattern:{...i,config:o}}),t.setConfig(o),this.canvas.requestRenderAll(),this.history.save()}area(){return{width:this.canvas.getWidth(),height:this.canvas.getHeight()}}detach(t){let e=this.proxies.get(t);if(!e){this.layers.setRenderProxy(t,null);return}this.layers.setRenderProxy(t,null),e.dispose(),this.proxies.delete(t)}invalidateFor(t){if(!t)return;let e=this.layers.findByObject(t);e&&this.invalidate(e.id)}};function md(r,t,e){return Number.isFinite(r)?Math.max(t,Math.min(e,r)):t}function yd(r){if(!Number.isFinite(r))return 0;let t=(r%360+360)%360;return Math.round(t>180?t-360:t)}function vd(r){return typeof r.originalSrc=="string"&&r.originalSrc.length>0}async function bd(r,t){let e=r.fabricObject;typeof e.setSrc!="function"||!t.original||(await e.setSrc(t.originalSrc),e.set({left:t.original.left,top:t.original.top,scaleX:t.original.scaleX,scaleY:t.original.scaleY,width:t.original.width,height:t.original.height,cropX:t.original.cropX,cropY:t.original.cropY,angle:t.original.angle}),e.clipPath=t.originalClip?(await Z.enlivenObjects([t.originalClip]))[0]:void 0,Jr(e,t.originalLocks),e.setCoords())}function Jr(r,t){r.set(t??{lockMovementX:!1,lockMovementY:!1,lockScalingX:!1,lockScalingY:!1,lockRotation:!1,hasControls:!0})}var es={shape:"arc",arc:0,wave:0,waveLength:4.1,offset:0,centerOffset:0},ql=.5,xd=99.5,Cd=.12,wd=.9,Sd=1,_d=12,Td=6,kd=4e3;function Zr(r){return Math.round(r*100)/100}function xe(r){let t=H(r.arc??0,-100,100),e=H(r.wave??0,0,100),i=Math.abs(t)<ql&&e>0?"wave":"arc";return{shape:r.shape??i,arc:t,wave:e,waveLength:H(r.waveLength??es.waveLength,Sd,_d),offset:H(r.offset??0,-100,100),centerOffset:H(r.centerOffset??0,-100,100)}}function rs(r){return r.shape==="arc"?Math.abs(r.arc)>=ql:r.wave>0}function Od(r,t){let e=Math.min(100,Math.abs(t.arc)),i=t.arc<0?-1:1,s=e>=xd?Math.PI*2:Math.max(Cd,e/100*Math.PI),n=r/s,a=n*Math.pow(2,t.centerOffset/100),o=a>=n?s:Math.min(Math.PI*2,r/Math.max(a,.001));return{radius:a,sweep:o,direction:i,baseRadius:n}}function Md(r,t,e,i){let{sweep:s,direction:n,baseRadius:a}=t,o=s>=Math.PI*2-1e-6,l=r/2,h=y=>[l+e*Math.sin(y),n*(a-e*Math.cos(y))],c=n>0?1:0,u=([y,b])=>`${Zr(y)} ${Zr(b)}`,d=Zr(e);if(o){let y=h(i-Math.PI),b=h(i);return{data:[`M ${u(y)}`,`A ${d} ${d} 0 0 ${c} ${u(b)}`,`A ${d} ${d} 0 0 ${c} ${u(y)}`].join(" "),length:e*Math.PI*2}}let g=h(i-s/2),f=h(i+s/2),p=s>Math.PI?1:0;return{data:`M ${u(g)} A ${d} ${d} 0 ${p} ${c} ${u(f)}`,length:e*s}}function Pd(r,t,e,i){let s=e.wave/100*t*wd,n=Math.max(1,t*e.waveLength),a=e.offset/100*Math.PI*2,o=Math.min(Td,n/8),l=Math.min(kd,Math.max(2,Math.ceil(r/o))),h=[],c=0,u=null;for(let d=0;d<=l;d++){let g=r*d/l,f=i+s*Math.sin(g/n*Math.PI*2+a);u&&(c+=Math.hypot(g-u[0],f-u[1])),u=[g,f],h.push(`${d===0?"M":"L"} ${Zr(g)} ${Zr(f)}`)}return{data:h.join(" "),length:c}}function er(r,t,e,i=1,s=0){let n=xe(r);if(!rs(n))return null;let a=Math.max(1,Math.floor(i)),o=[];if(n.shape==="wave"){for(let c=0;c<a;c++)o.push(Pd(t,e,n,(c-(a-1)/2)*s));return o}let l=Od(t,n),h=n.offset/100*l.sweep;for(let c=0;c<a;c++){let u=Math.max(1,l.radius+(c-(a-1)/2)*s);o.push(Md(t,l,u,h))}return o}function Vn(r,t,e){return er(r,t,e)?.[0]??null}var Ed=1e5,Ad=.06,Dd=1.16,Nn=new WeakMap,is=new WeakMap,ss=new WeakMap,jd=.7;function Ld(r){let t=r._textLines?.length??0;for(let n=0;n<t;n+=1)r.getLineWidth?.(n);let e=r.__charBounds;if(!e?.length)return null;let i=0,s=0;for(let n of e)for(let a of n??[]){let{renderLeft:o,renderTop:l}=a;if(typeof o!="number"||typeof l!="number")continue;let h=(a.kernedWidth??a.width??0)/2,c=(a.height??r.fontSize)*jd,u=a.angle??0,d=Math.abs(Math.cos(u)),g=Math.abs(Math.sin(u));i=Math.max(i,Math.abs(o)+h*d+c*g),s=Math.max(s,Math.abs(l)+h*g+c*d)}return i===0&&s===0?null:{width:i*2,height:s*2}}function Fd(r){let t=Ld(r);t&&(t.width>(r.width??0)&&(r.width=t.width),t.height>(r.height??0)&&(r.height=t.height))}function Kl(r){return!!r&&typeof r.text=="string"}function Id(r){let t=r.width;try{return r.set({width:Ed}),r.initDimensions?.(),Math.max(1,r.calcTextWidth?.()??r.width??1)}finally{t!==void 0&&r.set({width:t}),r.initDimensions?.()}}function Rd(r){return Math.max(1,r._textLines?.length??1)}function Bd(r){let t=r.getHeightOfLine?.(0);return typeof t=="number"&&Number.isFinite(t)&&t>0?t:r.fontSize*(r.lineHeight??1)*Dd}function Jl(r){return new Rt(r.data,{visible:!1,objectCaching:!1})}var rr=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s;this.canvas.on("text:changed",this.onTextChanged)}canvas;layers;history;events;onTextChanged=t=>{let e=t.target?this.layers.findByObject(t.target):void 0;e?.meta.curve&&this.refresh(e.id,!1)};dispose(){this.canvas.off("text:changed",this.onTextChanged)}get(t){let e=this.layers.get(t);return!e||!Kl(e.fabricObject)?null:xe(e.meta.curve??{})}isCurved(t){let e=this.get(t);return!!e&&rs(e)}apply(t,e,i=!0){let s=this.layers.get(t);if(!s||!Kl(s.fabricObject))return!1;let n=xe(e),a=s.fabricObject,o=Id(a);if(!rs(n))this.detach(a,s.meta.curveWidth),delete s.meta.curveWidth,s.meta.curve=n;else{s.meta.curveWidth===void 0&&(s.meta.curveWidth=a.width??0),a.set({width:Math.max(s.meta.curveWidth,o+2)}),a.initDimensions?.();let l=er(n,o*(1+Ad),a.fontSize,Rd(a),Bd(a));l&&this.attach(a,l),s.meta.curve=n}return a.initDimensions?.(),a.setCoords(),a.dirty=!0,this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),i&&this.history.save(),!0}clear(t,e=!0){let s=this.layers.get(t)?.meta.curve?.shape;return this.apply(t,{shape:s},e)}refresh(t,e=!1){let i=this.layers.get(t)?.meta.curve;return i?this.apply(t,i,e):!1}refreshAll(){let t=e=>{for(let i of e)i.meta.curve&&this.refresh(i.id),i.children.length>0&&t(i.children)};t(this.layers.getAll())}attach(t,e){ss.has(t)||ss.set(t,t.objectCaching),t.set({objectCaching:!1});let i=e.map(Jl),s=i.length===1?i[0]:Jl({data:e.map(n=>n.data).join(" "),length:0});t.set({path:s,pathAlign:"center",pathSide:"left",pathStartOffset:0}),this.patchLineMeasure(t,i,s),this.patchDimensions(t)}patchDimensions(t){if(is.has(t))return;let e=t.initDimensions;if(typeof e!="function")return;let i=function(){e.call(this),Fd(this)},s=Object.prototype.hasOwnProperty.call(t,"initDimensions");t.initDimensions=i,is.set(t,{original:e,installed:i,ownedOriginal:s})}unpatchDimensions(t){let e=is.get(t);e&&(t.initDimensions===e.installed&&(e.ownedOriginal?t.initDimensions=e.original:delete t.initDimensions),is.delete(t))}patchLineMeasure(t,e,i){this.unpatchLineMeasure(t);let s=t._measureLine;if(typeof s!="function")return;for(let o of e)o.pathOffset=i.pathOffset;let n=function(o){let l=e[o];if(!l)return s.call(this,o);let h=this.path,c=this.textAlign;this.path=l,this.textAlign="center",this.setPathInfo?.();try{return s.call(this,o)}finally{this.path=h,this.textAlign=c}},a=Object.prototype.hasOwnProperty.call(t,"_measureLine");t._measureLine=n,Nn.set(t,{original:s,installed:n,ownedOriginal:a})}unpatchLineMeasure(t){let e=Nn.get(t);e&&(t._measureLine===e.installed&&(e.ownedOriginal?t._measureLine=e.original:delete t._measureLine),Nn.delete(t))}detach(t,e){this.unpatchLineMeasure(t),this.unpatchDimensions(t);let i=ss.get(t);i!==void 0&&(t.set({objectCaching:i}),ss.delete(t)),t.set({path:null,pathStartOffset:0}),e!==void 0&&e>0&&t.set({width:e})}};var ns=["circle","square","triangle","star","heart","octagram","arch","zigzag"];function ir(r){return typeof r=="string"&&ns.includes(r)}function Un(r,t,e,i=-Math.PI/2){let s=Math.PI/r,n=[];for(let a=0;a<r*2;a++){let o=a%2===0?t:e,l=i+a*s,h=50+Math.cos(l)*o,c=50+Math.sin(l)*o;n.push(`${a===0?"M":"L"} ${Zl(h)} ${Zl(c)}`)}return`${n.join(" ")} Z`}function Zl(r){return Math.round(r*100)/100}var Xd={circle:"M 96 50 A 46 46 0 1 1 4 50 A 46 46 0 1 1 96 50 Z",square:"M 4 4 H 96 V 96 H 4 Z",triangle:"M 50 4 L 96 96 L 4 96 Z",star:Un(5,46,22),heart:"M 50 96 C -8 55 12 4 50 28 C 88 4 108 55 50 96 Z",octagram:Un(8,46,27),arch:"M 4 96 V 50 A 46 46 0 0 1 96 50 V 96 Z",zigzag:Un(16,46,39)};function Qr(r){return Xd[r]}var sr=100;var as=["vignette","halftone","spray","grunge","torn","band"];function ti(r){return typeof r=="string"&&as.includes(r)}var Lt=320,Kn=new Map;function qn(r){let t=r;return()=>(t=t*16807%2147483647,(t-1)/2147483646)}function Ql(r,t,e,i){let s=Lt,n=[[i,i],[s-i,i],[s-i,s-i],[i,s-i]];r.beginPath();for(let a=0;a<n.length;a++){let[o,l]=n[a],[h,c]=n[(a+1)%n.length];for(let u=0;u<=26;u++){let d=u/26,g=o+(h-o)*d+(t()-.5)*e,f=l+(c-l)*d+(t()-.5)*e;a===0&&u===0?r.moveTo(g,f):r.lineTo(g,f)}}r.closePath(),r.fill()}function Yd(r,t){let e=Lt,i=e/2;switch(t.fillStyle="#ffffff",r){case"vignette":{let s=t.createRadialGradient(i,i,e*.18,i,i,e*.52);s.addColorStop(0,"rgba(255,255,255,1)"),s.addColorStop(1,"rgba(255,255,255,0)"),t.fillStyle=s,t.fillRect(0,0,e,e);return}case"band":{let s=t.createLinearGradient(0,0,0,e);s.addColorStop(0,"rgba(255,255,255,0)"),s.addColorStop(.25,"rgba(255,255,255,1)"),s.addColorStop(.75,"rgba(255,255,255,1)"),s.addColorStop(1,"rgba(255,255,255,0)"),t.fillStyle=s,t.fillRect(0,0,e,e);return}case"halftone":{for(let n=16/2;n<e;n+=16)for(let a=16/2;a<e;a+=16){let o=Math.hypot(a-i,n-i)/(e*.52),l=Math.max(0,16/2*(1-o)*1.15);l<.4||(t.beginPath(),t.arc(a,n,l,0,Math.PI*2),t.fill())}return}case"spray":{let s=qn(42),n=t.createRadialGradient(i,i,10,i,i,e*.42);n.addColorStop(0,"rgba(255,255,255,1)"),n.addColorStop(1,"rgba(255,255,255,0.85)"),t.fillStyle=n,t.beginPath(),t.arc(i,i,e*.42,0,Math.PI*2),t.fill(),t.fillStyle="rgba(255,255,255,0.9)";for(let a=0;a<900;a++){let o=s()*Math.PI*2,l=e*(.3+s()*.24),h=i+Math.cos(o)*l,c=i+Math.sin(o)*l;t.globalAlpha=1-(l/e-.3)/.24,t.beginPath(),t.arc(h,c,s()*2.4,0,Math.PI*2),t.fill()}t.globalAlpha=1;return}case"grunge":{let s=qn(7);Ql(t,s,14,e*.06),t.globalCompositeOperation="destination-out";for(let n=0;n<240;n++){let a=s()*e,o=s()*e;!(Math.min(a,o,e-a,e-o)<e*.12)&&s()>=.12||(t.beginPath(),t.arc(a,o,s()*6+1,0,Math.PI*2),t.fill())}t.globalCompositeOperation="source-over";return}case"torn":{Ql(t,qn(99),10,e*.08);return}}}function ei(r){let t=Kn.get(r);if(t)return t;if(typeof document>"u")throw new Error("Texture masks require a DOM canvas");let e=document.createElement("canvas");e.width=Lt,e.height=Lt;let i=e.getContext("2d");if(!i)throw new Error("Texture masks require a 2D canvas context");return Yd(r,i),Kn.set(r,e),e}function Jn(){Kn.clear()}function os(r){return ir(r)||ti(r)}var Ce=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s}canvas;layers;history;events;get(t){return this.layers.get(t)?.meta.maskPreset??null}apply(t,e,i=!0){let s=this.layers.get(t);if(!s)return!1;let n=s.fabricObject;if(e===null){if(!s.meta.maskPreset)return!1;n.clipPath=void 0,delete s.meta.maskPreset}else{if(!os(e))return!1;n.clipPath=this.buildClip(e,n),s.meta.maskPreset=e}return n.dirty=!0,n.setCoords(),this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),i&&this.history.save(),!0}clear(t,e=!0){return this.apply(t,null,e)}refresh(t,e=!1){let i=this.get(t);return i?this.apply(t,i,e):!1}refreshAll(){for(let t of this.layers.getAll())t.meta.maskPreset&&this.refresh(t.id)}buildClip(t,e){let i=Math.max(1,e.width??1),s=Math.max(1,e.height??1),n={originX:"center",originY:"center",left:0,top:0,objectCaching:!1};return ir(t)?new Rt(Qr(t),{...n,scaleX:i/sr,scaleY:s/sr}):new N(ei(t),{...n,scaleX:i/Lt,scaleY:s/Lt})}};var $d=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\([\d.%+\-\s,/]+\)|[a-z]+)$/i;function se(r,t=!1){if(typeof r!="string")return!1;let e=r.trim();return e?$d.test(e):t}var ne={enabled:!1,color:"#000000",blur:12,offsetX:6,offsetY:6};function ri(r){let t=r.shadow;return!t||typeof t=="string"?{...ne}:{enabled:!0,color:typeof t.color=="string"?t.color:ne.color,blur:t.blur??ne.blur,offsetX:t.offsetX??ne.offsetX,offsetY:t.offsetY??ne.offsetY}}function ls(r,t){let e={...ri(r),...t};if(!e.enabled){r.set({shadow:null});return}let i=se(e.color)?e.color:ne.color;r.set({shadow:new de({color:i,blur:Math.max(0,e.blur),offsetX:e.offsetX,offsetY:e.offsetY})})}var hs={borderColor:"#c9a96e",cornerColor:"#c9a96e",cornerStrokeColor:"#101010",cornerSize:11,cornerStyle:"circle",borderWidth:1,borderDashArray:null,padding:0,marqueeFill:"rgba(201, 169, 110, 0.12)"};function we(r,t,e){let i=e>0?1/e:1;r.set({cornerSize:t.cornerSize*i,cornerStyle:t.cornerStyle,cornerColor:t.cornerColor,cornerStrokeColor:t.cornerStrokeColor,transparentCorners:!1,borderColor:t.borderColor,borderScaleFactor:t.borderWidth*i,borderDashArray:t.borderDashArray?.map(s=>s*i)??null,padding:t.padding*i})}function cs(r,t,e){for(let s of r.getObjects())we(s,t,e);let i=r.getActiveObject();i&&we(i,t,e),r.selectionColor=t.marqueeFill,r.selectionBorderColor=t.borderColor,r.selectionLineWidth=t.borderWidth*(e>0?1/e:1),r.requestRenderAll()}var Wd=["ml","mr","mt","mb"];function Se(r,t){for(let e of Wd)r.setControlVisible(e,!t)}function us(r){r.set({scaleX:1,scaleY:1,angle:0,skewX:0,skewY:0,flipX:!1,flipY:!1}),r.setCoords()}var nr=class{unit;dpi;constructor(t="px",e=72){this.unit=t,this.dpi=72,this.setDpi(e)}setUnit(t){this.unit=t}setDpi(t){if(!Number.isFinite(t)||t<=0)throw new Error("DPI must be a positive number");this.dpi=t}getUnit(){return this.unit}getDpi(){return this.dpi}toPixels(t,e){switch(e??this.unit){case"px":return t;case"in":return t*this.dpi;case"mm":return t/25.4*this.dpi}}fromPixels(t,e){switch(e??this.unit){case"px":return t;case"in":return t/this.dpi;case"mm":return t/this.dpi*25.4}}};var Hd="2.0.0";function ds(r){return{version:Hd,canvas:{width:r.canvas.getWidth(),height:r.canvas.getHeight(),unit:r.units.getUnit(),dpi:r.units.getDpi()},layers:r.layers.getAll().map(t=>t.serialize()),background:r.getDesignBackground(),backgroundImage:r.getDesignBackgroundImage()?r.getDesignBackgroundImage().toObject():null,backgroundImageOptions:r.getBackgroundImageOptions(),mockup:r.getMockup()}}async function gs(r,t){if(!t||!t.canvas||!Array.isArray(t.layers))throw new Error("Invalid editor state");if(!Number.isFinite(t.canvas.width)||!Number.isFinite(t.canvas.height)||t.canvas.width<=0||t.canvas.height<=0||t.canvas.unit!==void 0&&!["px","mm","in"].includes(t.canvas.unit)||t.canvas.dpi!==void 0&&(!Number.isFinite(t.canvas.dpi)||t.canvas.dpi<=0))throw new Error("Invalid editor canvas settings");let e=Number.parseInt(t.version?.split(".")[0]??"1",10);if(!Number.isFinite(e)||e>2)throw new Error(`Unsupported editor state version: ${t.version}`);if(t.background!==void 0&&!se(t.background,!0))throw new Error("Invalid editor background color");let i=await Promise.all(t.layers.map(async n=>{let a=(await Z.enlivenObjects([n.fabricObject]))[0];if(!a){let o=n.fabricObject.src;throw typeof o=="string"&&o.startsWith("blob:")?new Error(`Failed to restore expired object URL: ${o}`):new Error(`Failed to restore layer: ${n.id}`)}return{serialized:n,fabricObject:a}})),s=t.backgroundImage?(await Z.enlivenObjects([t.backgroundImage]))[0]:null;if(t.backgroundImage&&!s){let n=t.backgroundImage.src;throw typeof n=="string"&&n.startsWith("blob:")?new Error(`Failed to restore expired background object URL: ${n}`):new Error("Failed to restore background image")}r.crop.cancel(),r.masks.detach(),r.layers.clear(),t.canvas.unit&&r.units.setUnit(t.canvas.unit),t.canvas.dpi!==void 0&&r.units.setDpi(t.canvas.dpi),r.canvas.setDimensions({width:t.canvas.width,height:t.canvas.height}),t.background!==void 0&&r.setBackground(t.background),r.setBackgroundImageObject(s??null,!1,t.backgroundImageOptions??null),r.setMockup(t.mockup??null);for(let n of i)zd(r,n.serialized,n.fabricObject);r.canvas.requestRenderAll()}function zd(r,t,e){let i=r.layers.add(t.type,e,t.name,t.id);t.meta&&(i.meta=t.meta,i.meta.lockAspect&&Se(e,!0)),t.visible||r.layers.setVisibility(i.id,!1),t.locked&&r.layers.setLocked(i.id,!0),t.opacity!==1&&r.layers.setOpacity(i.id,t.opacity);let s=t.children??t.meta?.groupChildren;return i.type==="group"&&Array.isArray(s)&&(r.layers.adoptGroupChildren(i,s),i.meta.groupChildren&&delete i.meta.groupChildren),i}var th={red:0,green:1,blue:2,alpha:3};function eh(r,t,e){let i=r??t;if(!Number.isFinite(i))throw new Error(`${e} must be finite`);return i}function Gd(r,t,e,i,s,n){let a=Math.max(0,Math.min(t-1,i)),o=Math.max(0,Math.min(e-1,s)),l=Math.floor(a),h=Math.floor(o),c=Math.min(t-1,l+1),u=Math.min(e-1,h+1),d=a-l,g=o-h,f=r[(h*t+l)*4+n]*(1-d)+r[(h*t+c)*4+n]*d,p=r[(u*t+l)*4+n]*(1-d)+r[(u*t+c)*4+n]*d;return f*(1-g)+p*g}function fs(r,t,e,i,s){if(!Number.isInteger(e)||!Number.isInteger(i)||e<=0||i<=0)throw new Error("Displacement dimensions must be positive integers");let n=e*i*4;if(r.length!==n||t.length!==n)throw new Error("Displacement source and map must match the requested dimensions");let a=eh(s.scaleX,10,"Displacement scaleX"),o=eh(s.scaleY,10,"Displacement scaleY"),l=th[s.channelX??"red"],h=th[s.channelY??"green"],c=new Uint8ClampedArray(n);for(let u=0;u<i;u+=1)for(let d=0;d<e;d+=1){let g=(u*e+d)*4,f=d+(t[g+l]-128)/127*a,p=u+(t[g+h]-128)/127*o;for(let y=0;y<4;y+=1)c[g+y]=Math.round(Gd(r,e,i,f,p,y))}return c}function ps(r,t,e,i,s){let n=Math.max(0,Math.min(i,r.left*t)),a=Math.max(0,Math.min(s,r.top*e)),o=Math.max(n,Math.min(i,(r.left+r.width)*t)),l=Math.max(a,Math.min(s,(r.top+r.height)*e));return{left:n,top:a,width:o-n,height:l-a}}function Zn(r,t,e,i){if(r<=0||t<=0||e<=0||i<=0)throw new Error("Cover dimensions must be positive");let s=Math.max(e/r,i/t),n=r*s,a=t*s;return{left:(e-n)/2,top:(i-a)/2,width:n,height:a}}function Qn(r,t,e){let i=t==="jpeg"?"image/jpeg":`image/${t}`;return new Promise((s,n)=>{r.toBlob(a=>a?s(a):n(new Error(`Failed to export ${t}`)),i,e)})}async function ii(r,t={}){let{multiplier:e=1,format:i="png",quality:s=1}=t,n=r.toCanvasElement(e);return Qn(n,i,s)}async function si(r,t,e={}){let i=r.lowerCanvasEl.ownerDocument.createElement("canvas"),s=new Ge(i,{width:e.width??r.getWidth(),height:e.height??r.getHeight(),backgroundColor:e.backgroundColor||void 0});try{let n=e.cloneObjects===!1?t:await Promise.all(t.map(a=>a.clone()));return n.length&&s.add(...n),e.backgroundImage&&(s.backgroundImage=await e.backgroundImage.clone()),s.requestRenderAll(),await ii(s,e)}finally{s.dispose()}}async function ms(r,t,e={}){let{multiplier:i=1,format:s="png",quality:n=1}=e,a=r.getWidth(),o=r.getHeight(),l=ps(t,i,i,a*i,o*i);if(l.width<=0||l.height<=0)throw new Error("Print area does not overlap the canvas");let h=r.lowerCanvasEl.ownerDocument.createElement("canvas"),c=new Ge(h,{width:a,height:o});try{let u=await Promise.all(r.getObjects().map(p=>p.clone()));u.length&&c.add(...u),c.requestRenderAll();let d=c.toCanvasElement(i),g=d.ownerDocument.createElement("canvas");g.width=Math.max(1,Math.round(l.width)),g.height=Math.max(1,Math.round(l.height));let f=g.getContext("2d");if(!f)throw new Error("2D canvas context is unavailable");return f.drawImage(d,-l.left,-l.top),await Qn(g,s,n)}finally{c.dispose()}}async function ys(r,t,e={}){let{multiplier:i=1,format:s="png",quality:n=1}=e,a=r.toCanvasElement(i),o=a.ownerDocument.createElement("canvas");o.width=a.width,o.height=a.height;let l=o.getContext("2d");if(!l)throw new Error("2D canvas context is unavailable");let h=d=>new Promise((g,f)=>{let p=new Image;p.crossOrigin="anonymous",p.onload=()=>g(p),p.onerror=()=>f(new Error(`Failed to load mockup image: ${d}`)),p.src=d}),c=(d,g=l)=>{let f=Zn(d.naturalWidth||d.width,d.naturalHeight||d.height,o.width,o.height);g.drawImage(d,f.left,f.top,f.width,f.height)},u=[a];try{c(await h(t.image));let d=a;if(t.displacement){let g=a.getContext("2d");if(!g)throw new Error("2D design context is unavailable");let f=a.ownerDocument.createElement("canvas");u.push(f),f.width=a.width,f.height=a.height;let p=f.getContext("2d");if(!p)throw new Error("2D displacement-map context is unavailable");c(await h(t.displacement.image),p);let y=a.ownerDocument.createElement("canvas");u.push(y),y.width=a.width,y.height=a.height;let b=y.getContext("2d");if(!b)throw new Error("2D displaced-design context is unavailable");let x,C;try{x=g.getImageData(0,0,a.width,a.height).data,C=p.getImageData(0,0,a.width,a.height).data}catch(k){throw new Error("Failed to apply mockup displacement map; verify image CORS access",{cause:k})}let S=fs(x,C,a.width,a.height,{...t.displacement,scaleX:(t.displacement.scaleX??10)*i,scaleY:(t.displacement.scaleY??10)*i}),w=b.createImageData(a.width,a.height);w.data.set(S),b.putImageData(w,0,0),d=y}if(l.save(),t.printArea&&t.clipToPrintArea!==!1){let g=ps(t.printArea,o.width/r.getWidth(),o.height/r.getHeight(),o.width,o.height);l.beginPath(),l.rect(g.left,g.top,g.width,g.height),l.clip()}return l.globalAlpha=Math.max(0,Math.min(1,t.designOpacity??1)),l.globalCompositeOperation=!t.designBlendMode||t.designBlendMode==="normal"?"source-over":t.designBlendMode,l.drawImage(d,0,0),l.restore(),t.overlay&&(l.save(),l.globalAlpha=Math.max(0,Math.min(1,t.overlay.opacity??1)),l.globalCompositeOperation=t.overlay.blendMode==="normal"?"source-over":t.overlay.blendMode??"multiply",c(await h(t.overlay.image)),l.restore()),await Qn(o,s,n)}finally{for(let d of u)d.width=0,d.height=0}}function vs(r){return r.toSVG()}function bs(r,t="png",e=1){return r.toDataURL({format:t,multiplier:e})}function xs(r){return String(r).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Cs(r){let t=new DOMParser().parseFromString(r,"image/svg+xml");if(t.querySelector("parsererror"))throw new Error("Invalid template SVG");return t.querySelectorAll("script, foreignObject, iframe, object, embed, link, style").forEach(e=>e.remove()),t.querySelectorAll("*").forEach(e=>{for(let i of[...e.attributes]){let s=i.name.toLowerCase(),n=i.value.trim().toLowerCase(),a=s==="href"||s==="xlink:href"||s==="src",o=n.startsWith("#")||/^data:image\/(?:png|jpeg|webp|gif);base64,/.test(n);(s.startsWith("on")||a&&!o||/url\s*\(/.test(n)&&!/url\s*\(\s*['"]?#/.test(n)||/(?:javascript:|expression\s*\()/.test(n))&&e.removeAttribute(i.name)}}),new XMLSerializer().serializeToString(t.documentElement)}function Vd(r){return/^(?:url|local)\(/.test(r.trim())?r:`url(${JSON.stringify(r)})`}function Nd(r){let t=r.split(/[?#]/)[0].toLowerCase();return t.endsWith(".woff2")?"font/woff2":t.endsWith(".woff")?"font/woff":t.endsWith(".otf")?"font/otf":"font/ttf"}function Ud(r){let t=new Uint8Array(r),e="";for(let i=0;i<t.length;i+=32768)e+=String.fromCharCode(...t.subarray(i,i+32768));return btoa(e)}function ws(r){return JSON.stringify(r).replace(/[<>&]/g,t=>`\\${t.charCodeAt(0).toString(16)} `)}var qd=/^(?:normal|bold|bolder|lighter|[1-9]\d{0,2}(?:\s+[1-9]\d{0,2})?)$/i,Kd=/^(?:normal|italic|oblique(?:\s+-?\d+(?:\.\d+)?deg)?)$/i,Jd=/^(?:auto|block|swap|fallback|optional)$/i;function ta(r,t,e){let i=r?.trim();return i&&t.test(i)?i:e}function Zd(r){let t=r.trim();if(t.startsWith("data:"))return t;let e=t.match(/^url\(\s*(['"]?)(.*?)\1\s*\)/i);return e?e[2]:/^local\(/i.test(t)?null:t}function Qd(r){let t=r.trim().match(/^local\(\s*(['"]?)([^)"'{};]*)\1\s*\)$/i);return t&&t[2].trim()||null}var ar=class{definitions=new Map;loads=new Map;register(t){if(!t.family.trim()||!t.source.trim())throw new Error("Font family and source are required");this.definitions.set(t.family,{...t}),this.loads.delete(t.family)}unregister(t){return this.loads.delete(t),this.definitions.delete(t)}getAll(){return[...this.definitions.values()].map(t=>({...t}))}load(t){let e=this.loads.get(t);if(e)return e;let i=this.definitions.get(t);if(!i)return Promise.reject(new Error(`Font is not registered: ${t}`));if(typeof FontFace>"u"||typeof document>"u")return Promise.reject(new Error("Font loading requires a browser FontFace API"));let s=new FontFace(i.family,Vd(i.source),{weight:i.weight,style:i.style,display:i.display}).load().then(n=>(document.fonts.add(n),n));return s.catch(()=>{this.loads.get(t)===s&&this.loads.delete(t)}),this.loads.set(t,s),s}async ready(){this.definitions.size!==0&&(await Promise.all([...this.definitions.keys()].map(t=>this.load(t))),await document.fonts.ready)}async getEmbeddedCss(){return(await Promise.all(this.getAll().map(async e=>{let i=Zd(e.source),s;if(i&&!i.startsWith("data:")){let l=await fetch(i);if(!l.ok)throw new Error(`Failed to fetch font: ${i}`);let h=Ud(await l.arrayBuffer()),c=l.headers.get("content-type")||Nd(i);s=`url(${ws(`data:${c};base64,${h}`)})`}else if(i)s=`url(${ws(i)})`;else{let l=Qd(e.source);if(!l)throw new Error(`Unsupported font source for embedding: ${e.family}`);s=`local(${ws(l)})`}let n=ta(e.weight,qd,"normal"),a=ta(e.style,Kd,"normal"),o=ta(e.display,Jd,"swap");return`@font-face{font-family:${ws(e.family)};src:${s};font-weight:${n};font-style:${a};font-display:${o}}`}))).join(`
|
|
506
|
+
`)}};function tg(r,t){let e=r.toLowerCase(),i=t.toLowerCase();if(i.startsWith("*.")){let s=i.slice(1);return e.endsWith(s)&&e.length>s.length}return e===i}function eg(r){return r==="localhost"||r==="127.0.0.1"||r==="::1"||r.endsWith(".localhost")}var or=class{constructor(t={}){this.config=t;let e=t.hostname??globalThis.location?.hostname??"localhost";(t.environment??"development")!=="production"||eg(e)?(this.status={state:"exempt",payload:null},this.readyPromise=Promise.resolve(this.status)):t.key?(this.status={state:"checking",payload:null},this.readyPromise=this.validate(t.key,e)):(this.status={state:"community",payload:null},this.readyPromise=Promise.resolve(this.status))}config;status;readyPromise;getStatus(){return this.status}ready(){return this.readyPromise}hasFeature(t){return this.status.state==="valid"&&(this.status.payload.features??[]).includes(t)}track(t){this.config.onUsage?.({name:t,at:new Date().toISOString(),licenseId:this.status.state==="valid"?this.status.payload.id:void 0})}async validate(t,e){let i=await this.config.verifyOffline?.(t)??null;return i?i.expiresAt&&Date.parse(i.expiresAt)<Date.now()?this.status={state:"expired",payload:i}:i.domains.some(s=>tg(e,s))?this.status={state:"valid",payload:i}:this.status={state:"domain-mismatch",payload:i}:this.status={state:"invalid",payload:null}}};var lr=class{constructor(t){this.editor=t;let e={id:pt(),name:"Page 1",state:t.toJSON()};this.pages=[e],this.activePageId=e.id}editor;pages;activePageId;getAll(){return this.pages.map(({id:t,name:e})=>({id:t,name:e}))}getActivePageId(){return this.activePageId}add(t=`Page ${this.pages.length+1}`,e=!1){this.saveCurrent();let i=structuredClone(this.editor.toJSON()),s=e?i:this.blankState(i),n={id:pt(),name:t,state:s};return this.pages.push(n),this.emitChanged(),n.id}async switchTo(t){if(t===this.activePageId)return!0;let e=this.pages.find(i=>i.id===t);return e?(this.saveCurrent(),await this.editor.fromJSON(structuredClone(e.state)),this.activePageId=t,this.emitChanged(),!0):!1}async duplicate(t){this.saveCurrent();let e=this.pages.find(n=>n.id===t);if(!e)return null;let i={id:pt(),name:`${e.name} copy`,state:structuredClone(e.state)},s=this.pages.indexOf(e);return this.pages.splice(s+1,0,i),this.emitChanged(),i.id}async remove(t){if(this.pages.length===1)return!1;let e=this.pages.findIndex(i=>i.id===t);if(e<0)return!1;if(t===this.activePageId){let i=this.pages[e+1]??this.pages[e-1];await this.editor.fromJSON(structuredClone(i.state)),this.activePageId=i.id}return this.pages.splice(e,1),this.emitChanged(),!0}rename(t,e){let i=this.pages.find(n=>n.id===t),s=e.trim();return!i||!s||i.name===s?!1:(i.name=s,this.emitChanged(),!0)}reorder(t,e){let i=this.pages.findIndex(a=>a.id===t);if(i<0||!Number.isFinite(e))return!1;let s=Math.max(0,Math.min(this.pages.length-1,Math.round(e)));if(s===i)return!1;let[n]=this.pages.splice(i,1);return this.pages.splice(s,0,n),this.emitChanged(),!0}toJSON(){return this.saveCurrent(),{version:"1.0.0",activePageId:this.activePageId,pages:structuredClone(this.pages)}}async fromJSON(t){if(t?.version!=="1.0.0"||!Array.isArray(t.pages)||t.pages.length===0||!t.pages.some(s=>s.id===t.activePageId))throw new Error("Invalid project state");let e=structuredClone(t.pages),i=e.find(s=>s.id===t.activePageId);await this.editor.fromJSON(structuredClone(i.state)),this.pages=e,this.activePageId=i.id,this.emitChanged()}saveCurrent(){let t=this.pages.find(e=>e.id===this.activePageId);t&&(t.state=structuredClone(this.editor.toJSON()))}blankState(t){return{...t,layers:[],mockup:null}}emitChanged(){this.editor.events.emit("project:changed",{activePageId:this.activePageId,pages:this.getAll()})}};var Ft=class extends Error{constructor(e,i,s){super(i);this.code=e;this.cause=s;this.name="MaskRefinementError"}code;cause},hr=class{constructor(t){this.editor=t}editor;backing=null;context=null;layerId=null;brush=null;previousPoint=null;strokeBackup=null;strokeStartedAt=null;lastInteractionLatencyMs=0;refinement=null;disposed=!1;async create(t=this.editor.canvas.getWidth(),e=this.editor.canvas.getHeight()){if(this.assertActive(),!Number.isInteger(t)||!Number.isInteger(e)||t<=0||e<=0)throw new Error("Mask dimensions must be positive integers");let i=this.makeCanvas(t,e),s=new N(i,{left:0,top:0,originX:"left",originY:"top",selectable:!1}),n=this.editor.layers.add("mask",s,"Mask");return n.meta.mask={width:t,height:e,revision:0},this.editor.history.saveImmediate(),this.attachBacking(n.id,i),n}attach(t){this.assertActive(),this.cancelStroke();let e=this.requireMask(t),i=e.fabricObject,s=e.meta.mask?.width??i.width??this.editor.canvas.getWidth(),n=e.meta.mask?.height??i.height??this.editor.canvas.getHeight(),a=this.makeCanvas(s,n),o=a.getContext("2d");if(!o)throw new Error("2D mask context is unavailable");let l=i.getElement();l&&o.drawImage(l,0,0,s,n),this.attachBacking(t,a)}beginStroke(t){if(this.assertActive(),!this.context||!this.backing||!this.layerId)throw new Error("Attach a mask first");if(this.brush)throw new Error("A mask stroke is already active");if(!Number.isFinite(t.size)||t.size<=0)throw new Error("Mask brush size must be positive");this.brush={...t,hardness:H(t.hardness,0,1)},this.previousPoint=null,this.strokeBackup=this.context.getImageData(0,0,this.backing.width,this.backing.height),this.strokeStartedAt=performance.now()}addPoint(t){if(!this.brush||!this.context||!this.backing||!this.layerId)throw new Error("No active mask stroke");if(!Number.isFinite(t.x)||!Number.isFinite(t.y))return;let e=this.previousPoint??t,i=Math.hypot(t.x-e.x,t.y-e.y),s=Math.max(1,this.brush.size/4),n=Math.max(1,Math.ceil(i/s));for(let a=0;a<=n;a+=1){let o=a/n;this.drawDot({x:e.x+(t.x-e.x)*o,y:e.y+(t.y-e.y)*o})}this.previousPoint=t,this.requireMask(this.layerId).fabricObject.setElement(this.backing),this.editor.canvas.requestRenderAll()}async endStroke(){if(!this.brush||!this.backing||!this.layerId)return;let t=this.layerId;this.brush=null,this.previousPoint=null,this.strokeBackup=null;let e=this.backing.toDataURL("image/png");await this.editor.history.transaction(async()=>{await this.editor.replaceImageSource(t,e);let i=this.requireMask(t);i.meta.mask&&(i.meta.mask.revision+=1)}),this.attach(t),this.strokeStartedAt!==null&&(this.lastInteractionLatencyMs=performance.now()-this.strokeStartedAt,this.strokeStartedAt=null)}cancelStroke(){this.strokeBackup&&this.context&&this.backing&&this.layerId&&(this.context.putImageData(this.strokeBackup,0,0),this.requireMask(this.layerId).fabricObject.setElement(this.backing),this.editor.canvas.requestRenderAll()),this.brush=null,this.previousPoint=null,this.strokeBackup=null,this.strokeStartedAt=null}isStrokeActive(){return this.brush!==null}activeLayerId(){return this.layerId}detach(t){t&&this.layerId!==t||(this.cancelStroke(),this.cancelRefinement(),this.backing=null,this.context=null,this.layerId=null)}async refine(t,e,i,s={}){this.assertActive();let n=this.editor.layers.get(t);if(!n||n.type!=="mask")throw new Ft("not-found",`Mask layer not found: ${t}`);this.cancelRefinement();let a=new AbortController;this.refinement=a;let o=()=>a.abort(s.signal?.reason);s.signal?.addEventListener("abort",o,{once:!0}),s.signal?.aborted&&o();try{let l=n.fabricObject,h=await e.refine({mask:l.getSrc(),width:n.meta.mask?.width??l.width??1,height:n.meta.mask?.height??l.height??1,prompts:structuredClone(i)},{signal:a.signal,onProgress:s.onProgress});if(a.signal.aborted)throw new Ft("cancelled","Mask refinement cancelled");if(!/^data:image\/(?:png|jpeg|webp);base64,/i.test(h.dataUrl))throw new Ft("invalid-result","Mask refinement must return a base64 PNG, JPEG, or WebP data URL");return await this.editor.history.transaction(async()=>{await this.editor.replaceImageSource(t,h.dataUrl),n.meta.mask&&(n.meta.mask.revision+=1)}),this.attach(t),h}catch(l){throw l instanceof Ft?l:a.signal.aborted?new Ft("cancelled","Mask refinement cancelled",l):new Ft("provider","Mask refinement provider failed",l)}finally{s.signal?.removeEventListener("abort",o),this.refinement===a&&(this.refinement=null)}}cancelRefinement(){this.refinement?.abort(new DOMException("Cancelled","AbortError")),this.refinement=null}measure(){if(!this.backing)return null;let t=performance.now();this.context?.getImageData(0,0,1,1);let e=this.backing.width*this.backing.height*4,i=this.strokeBackup?e:0,s=performance;return{width:this.backing.width,height:this.backing.height,backingBytes:e,strokeBackupBytes:i,estimatedPeakBytes:e+i,historyBytes:this.editor.history.getSnapshotBytes(),interactionLatencyMs:this.lastInteractionLatencyMs,...typeof s.memory?.usedJSHeapSize=="number"?{usedJsHeapBytes:s.memory.usedJSHeapSize}:{},elapsedMs:performance.now()-t}}dispose(){this.detach(),this.disposed=!0}drawDot(t){let e=this.context,i=this.brush,s=i.size/2;e.save(),e.globalCompositeOperation=i.mode==="subtract"?"destination-out":"source-over";let n=e.createRadialGradient(t.x,t.y,s*i.hardness,t.x,t.y,s),a=i.mode==="subtract"?"rgba(0,0,0,1)":"rgba(255,255,255,1)";n.addColorStop(0,a),n.addColorStop(1,"rgba(255,255,255,0)"),e.fillStyle=n,e.beginPath(),e.arc(t.x,t.y,s,0,Math.PI*2),e.fill(),e.restore()}makeCanvas(t,e){let i=this.editor.canvas.lowerCanvasEl.ownerDocument.createElement("canvas");return i.width=t,i.height=e,i}attachBacking(t,e){let i=e.getContext("2d");if(!i)throw new Error("2D mask context is unavailable");this.layerId=t,this.backing=e,this.context=i}requireMask(t){let e=this.editor.layers.get(t);if(!e||e.type!=="mask")throw new Error(`Mask layer not found: ${t}`);return e}assertActive(){if(this.disposed)throw new Error("Mask controller has been disposed")}};var rg={add:"source-over",subtract:"destination-out",intersect:"destination-in"};function ig(r){r.set({opacity:0,globalCompositeOperation:"source-over"})}function sg(r){return new dt({left:r.left,top:r.top,width:Math.max(1,r.width),height:Math.max(1,r.height),originX:"left",originY:"top",fill:"#000000",objectCaching:!1})}function ni(r,t,e){if(r.length===0)return;r.forEach((n,a)=>{let o=t[a];if(n.set({objectCaching:!1}),!o||!o.visible){ig(n);return}n.set({opacity:o.opacity,globalCompositeOperation:rg[o.mode]??"source-over"})});let i=t.find(n=>n.visible),s=i&&i.mode!=="add"?[sg(e.box),...r]:[...r];return new U(s,{absolutePositioned:e.absolute,objectCaching:!0,subTargetCheck:!1,interactive:!1})}function Gt(r){return r.some(t=>!t.linked)}function vt(r){return r.calcTransformMatrix()}function _e(r,t){let e=Z.qrDecompose(t);r.set({flipX:!1,flipY:!1,originX:"center",originY:"center",left:e.translateX,top:e.translateY,scaleX:e.scaleX,scaleY:e.scaleY,angle:e.angle,skewX:e.skewX,skewY:0}),r.setCoords()}function ai(r,t){_e(r,Z.multiplyTransformMatrices(vt(t),vt(r)))}function Te(r,t){_e(r,Z.multiplyTransformMatrices(Z.invertTransform(vt(t)),vt(r)))}function ea(r,t){return Z.multiplyTransformMatrices(Z.invertTransform(vt(t)),vt(r))}function ra(r,t,e){_e(r,Z.multiplyTransformMatrices(vt(t),e))}function ia(r){return!r||r.length!==6||r.some(t=>!Number.isFinite(t))?null:[r[0],r[1],r[2],r[3],r[4],r[5]]}function ke(r,t,e=1){let i=Math.max(1,t.width)*e,s=Math.max(1,t.height)*e;r.set({originX:"center",originY:"center",angle:0,skewX:0,skewY:0,left:t.left+t.width/2,top:t.top+t.height/2,scaleX:i/Math.max(1,r.width??1),scaleY:s/Math.max(1,r.height??1)}),r.setCoords()}function oi(r){let t=r.removeAll();for(let e of t)e.setCoords();return t}var Ss=class{constructor(t,e){this.canvas=t;this.onCommit=e}canvas;onCommit;handle=null;editing=null;child=null;group=null;active(){return this.editing}async begin(t,e,i){this.end();let s=await i.clone();return _e(s,vt(i)),s.set({fill:"rgba(0,0,0,0.001)",stroke:"#e0b055",strokeWidth:2,strokeDashArray:[6,4],strokeUniform:!0,opacity:1,selectable:!0,evented:!0,hasControls:!0,hasBorders:!0,objectCaching:!1,excludeFromExport:!0}),this.handle=s,this.editing=t,this.child=i,this.group=e,this.canvas.add(s),this.canvas.setActiveObject(s),this.canvas.on("object:moving",this.onTransform),this.canvas.on("object:scaling",this.onTransform),this.canvas.on("object:rotating",this.onTransform),this.canvas.on("object:modified",this.onModified),this.canvas.requestRenderAll(),!0}end(){this.handle&&(this.canvas.off("object:moving",this.onTransform),this.canvas.off("object:scaling",this.onTransform),this.canvas.off("object:rotating",this.onTransform),this.canvas.off("object:modified",this.onModified),this.canvas.getActiveObject()===this.handle&&this.canvas.discardActiveObject(),this.canvas.remove(this.handle),this.handle=null,this.editing=null,this.child=null,this.group=null,this.canvas.requestRenderAll())}dispose(){this.end()}onTransform=t=>{!this.handle||t.target!==this.handle||this.write()};onModified=t=>{!this.handle||t.target!==this.handle||(this.write(),this.onCommit())};write(){!this.handle||!this.child||!this.group||(_e(this.child,Z.multiplyTransformMatrices(Z.invertTransform(vt(this.group)),vt(this.handle))),this.group.dirty=!0,this.group.set({dirty:!0}),this.canvas.requestRenderAll())}};function sa(r){return r.getAll().find(t=>t.meta.canvasMask)}function na(r,t){let e=new dt({left:0,top:0,width:r.getWidth(),height:r.getHeight(),originX:"left",originY:"top",fill:"#000000",globalCompositeOperation:"destination-in",selectable:!1,evented:!1,hasControls:!1,hasBorders:!1,objectCaching:!1}),i=t.add("mask",e,"Design mask");return i.meta.canvasMask=!0,t.setLocked(i.id,!0),i}function aa(r){let t=r.getAll(),e=t.findIndex(s=>s.meta.canvasMask);if(e===-1)return!1;let i=-1;return t.forEach((s,n)=>{s.type!=="mask"&&(i=n)}),e>=i?!1:(r.reorder(t[e].id,t.length-1),!0)}function oa(r,t,e){if(!t)return{left:0,top:0,width:r.getWidth(),height:r.getHeight()};if(e){t.setCoords();let n=t.getBoundingRect();return{left:n.left,top:n.top,width:n.width,height:n.height}}let i=Math.max(1,t.width??1),s=Math.max(1,t.height??1);return{left:-i/2,top:-s/2,width:i,height:s}}function rh(r,t,e){let i=r.clipPath instanceof U?r.clipPath.absolutePositioned:e;if(e!==i)for(let s of t)e?ai(s,r):Te(s,r)}function ih(r,t,e,i){return r.map((s,n)=>{let a=t[n];if(i&&s.linked&&a)return{...s,rel:[...ea(a,e)]};if(!s.rel)return s;let o={...s};return delete o.rel,o})}function sh(r,t,e,i,s){r.clipPath=ni(e,t,{box:i,absolute:s}),r.dirty=!0,r.setCoords()}var ot="canvas",_s={mode:"add",linked:!0,visible:!0,opacity:1},li=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s}canvas;layers;history;events;selected=null;pinning=!1;list(t){return this.hostLayer(t)?.meta.maskStack??[]}get(t,e){return this.list(t).find(i=>i.id===e)}targets(){return this.layers.getAll().filter(t=>(t.meta.maskStack??[]).length>0).map(t=>t.meta.canvasMask?ot:t.id)}hostBox(t,e=t===ot||Gt(this.list(t))){return oa(this.canvas,this.host(t),e)}hostLayer(t,e=!1){if(t!==ot)return this.layers.get(t);let i=sa(this.layers);return i||!e?i:na(this.canvas,this.layers)}host(t,e=!1){return this.hostLayer(t,e)?.fabricObject??null}pin(){if(!this.pinning){this.pinning=!0;try{aa(this.layers)}finally{this.pinning=!1}}}unwrap(t,e){let i=e.clipPath;if(!i)return[];let s=this.list(t);if(s.length===0||!(i instanceof U))return[i];let n=oi(i),a=n.length-s.length;return a>0?n.slice(a):n}entriesFor(t,e){let i=this.list(t);if(i.length>0||e.length!==1)return[...i];let s=this.hostLayer(t),n=s?.meta.maskPreset;return s&&delete s.meta.maskPreset,[{..._s,id:pt(),name:typeof n=="string"?n:"Mask",linked:t===ot?!1:!e[0].absolutePositioned}]}commit(t,e,i,s,n=!0,a=!1){let o=this.hostLayer(t);if(!o)return;let l=a||t===ot||Gt(i);rh(e,s,l);let h=ih(i,s,e,l);sh(e,h,s,this.hostBox(t,l),l),h.length===0?(delete o.meta.maskStack,o.meta.canvasMask&&this.layers.remove(o.id)):o.meta.maskStack=h,this.canvas.requestRenderAll(),this.events.emit("masks:changed",{target:t}),this.events.emit("layer:modified",{layerId:o.id}),n&&this.history.save()}};var Oe=class extends li{edits=new Ss(this.canvas,()=>this.history.save());onLayersChanged=()=>this.pin();onLayerSelected=({layerId:t})=>{t&&this.selected&&this.select(null,null)};onObjectModified=t=>{let e=t.target;if(!e)return;let i=this.layers.findByObject(e);i&&this.reflow(i.id)};constructor(t,e,i,s){super(t,e,i,s),this.events.on("layers:changed",this.onLayersChanged),this.events.on("layer:selected",this.onLayerSelected),this.canvas.on("object:modified",this.onObjectModified)}dispose(){this.edits.dispose(),this.events.off("layers:changed",this.onLayersChanged),this.events.off("layer:selected",this.onLayerSelected),this.canvas.off("object:modified",this.onObjectModified),this.selected=null}editing(){return this.edits.active()}async beginEdit(t,e){let i=this.host(t);if(!i)return!1;let s=this.list(t),n=s.findIndex(h=>h.id===e);if(n===-1)return!1;this.endEdit(!1),this.commit(t,i,[...s],this.unwrap(t,i),!1,!0);let a=i.clipPath instanceof U?i.clipPath:null;if(!a)return!1;let o=a.getObjects(),l=o[o.length-s.length+n];return l?(this.select(t,e),this.edits.begin({target:t,maskId:e},a,l)):!1}endEdit(t=!0){let e=this.edits.active();this.edits.end(),e&&this.rebuild(e.target,t)}getSelected(){return this.selected}select(t,e){this.selected=t&&e?{target:t,maskId:e}:null,this.selected&&this.layers.select(null),this.events.emit("mask:selected",{target:t,maskId:this.selected?e:null})}add(t,e,i={}){let s=this.host(t,!0);if(!s)return null;let n=this.unwrap(t,s),a=this.entriesFor(t,n),o={..._s,id:pt(),name:i.name??"Mask",...i.mode?{mode:i.mode}:{},...i.linked===void 0?{}:{linked:i.linked},...i.meta?{meta:i.meta}:{}};return t===ot&&(o.linked=!1),i.fit!==!1&&ke(e,i.box??this.hostBox(t),i.fit??1),n.push(e),a.push(o),this.commit(t,s,a,n),o}replaceGeometry(t,e,i,s={}){let n=this.host(t);if(!n)return!1;let a=[...this.list(t)],o=a.findIndex(h=>h.id===e);if(o===-1)return!1;let l=this.unwrap(t,n);return s.fit!==!1&&ke(i,s.box??this.hostBox(t),s.fit??1),l[o]=i,a[o]={...a[o],...s.name?{name:s.name}:{},...s.meta?{meta:s.meta}:{}},this.commit(t,n,a,l),!0}refit(t,e,i={}){let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(h=>h.id===e);if(a===-1)return!1;let o=this.unwrap(t,s),l=o[a];return l?(ke(l,i.box??this.hostBox(t),i.fit??1),this.commit(t,s,n,o,i.save??!0),!0):!1}remove(t,e){let i=this.host(t);if(!i)return!1;let s=[...this.list(t)],n=s.findIndex(o=>o.id===e);if(n===-1)return!1;let a=this.unwrap(t,i);return s.splice(n,1),a.splice(n,1),this.selected?.maskId===e&&this.select(null,null),this.commit(t,i,s,a),!0}clear(t){let e=this.host(t);return!e||this.list(t).length===0?!1:(this.selected?.target===t&&this.select(null,null),this.commit(t,e,[],[]),!0)}reorder(t,e,i){let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(u=>u.id===e);if(a===-1)return!1;let o=Math.max(0,Math.min(n.length-1,Math.round(i)));if(a===o)return!1;let l=this.unwrap(t,s),[h]=n.splice(a,1),[c]=l.splice(a,1);return n.splice(o,0,h),l.splice(o,0,c),this.commit(t,s,n,l),!0}setMeta(t,e,i){return this.patch(t,e,()=>({meta:i}))}setMode(t,e,i){return this.patch(t,e,s=>s.mode===i?null:{mode:i})}setVisible(t,e,i){return this.patch(t,e,s=>s.visible===i?null:{visible:i})}setOpacity(t,e,i){if(!Number.isFinite(i))return!1;let s=Math.max(0,Math.min(1,i));return this.patch(t,e,n=>n.opacity===s?null:{opacity:s})}setName(t,e,i){let s=i.trim();return s?this.patch(t,e,n=>n.name===s?null:{name:s}):!1}setLinked(t,e,i){if(t===ot)return!1;let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(l=>l.id===e);if(a===-1||n[a].linked===i)return!1;let o=this.unwrap(t,s);return n[a]={...n[a],linked:i},this.commit(t,s,n,o),!0}convertLayer(t,e){let i=this.layers.get(t);if(!i||i.meta.canvasMask)return null;let s=this.layers.getAll(),n=s.findIndex(u=>u.id===t),a=n>0?s[n-1]:void 0,o=e??(a&&!a.meta.canvasMask?a.id:ot);if(o===t)return null;let l=i.fabricObject;!l.fill&&l.type!=="image"&&l.set({fill:"#000000"});let h=this.host(o);!(o===ot||Gt(this.list(o)))&&h&&Te(l,h),this.history.beginTransaction();try{this.canvas.getActiveObject()===l&&this.canvas.discardActiveObject(),this.canvas.remove(l),this.layers.remove(t);let u=this.add(o,l,{name:i.name,fit:!1});return u?{target:o,entry:u}:null}finally{this.history.endTransaction()}}rebuild(t,e=!1){let i=this.host(t);if(!i)return;let s=this.unwrap(t,i);s.length!==0&&this.commit(t,i,this.entriesFor(t,s),s,e)}reflow(t){let e=this.host(t);if(!e)return;let i=this.list(t);if(i.length===0||!Gt(i)||!i.some(n=>n.linked&&n.rel))return;let s=this.unwrap(t,e);i.forEach((n,a)=>{let o=s[a],l=ia(n.rel);!o||!n.linked||!l||ra(o,e,l)}),this.commit(t,e,[...i],s)}adopt(t,e){let i=this.hostLayer(t),s=i?.fabricObject.clipPath;if(!i||!s||i.meta.pattern||(i.meta.maskStack??[]).length>0)return null;let n={..._s,id:pt(),name:e??"Mask",linked:t===ot?!1:!s.absolutePositioned};return i.meta.maskStack=[n],delete i.meta.maskPreset,this.rebuild(t),n}refreshAll(){this.selected=null,this.pin();for(let t of this.layers.getAll())(t.meta.maskStack??[]).length!==0&&this.rebuild(t.meta.canvasMask?ot:t.id)}patch(t,e,i){let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(h=>h.id===e);if(a===-1)return!1;let o=i(n[a]);if(!o)return!1;let l=this.unwrap(t,s);return n[a]={...n[a],...o},this.commit(t,s,n,l),!0}};var ng=.1,ag=8;function og(r){return r instanceof DOMException&&r.name==="SecurityError"||r instanceof Error&&/taint|cross-origin|insecure/i.test(r.message)}var Ts=class{canvas;layers;history;events;units;snapping;crop;patterns;curves;maskPresets;layerMasks;fonts;licensing;pages;masks;fileAdapter;imageProvider;zoomLevel=1;selectionStyle={...hs};mockup=null;designBackground;designBackgroundImage=null;backgroundImageOptions=null;constructor(t,e){this.events=new Ve,this.fonts=new ar,e.fonts?.forEach(n=>this.fonts.register(n)),this.licensing=new or(e.license),this.units=new nr(e.unit??"px",e.dpi??72);let i=this.units.toPixels(e.width),s=this.units.toPixels(e.height);this.designBackground=e.backgroundColor??"#ffffff",this.canvas=new Li(t,{width:i,height:s,backgroundColor:this.designBackground,preserveObjectStacking:e.preserveObjectStacking??!0,selection:!0}),this.layers=new qe(this.canvas,this.events),this.fileAdapter=e.fileAdapter,this.imageProvider=e.imageProvider,this.history=new Ke({getState:()=>JSON.stringify(this.toJSON()),restoreState:async n=>{let a=JSON.parse(n);await this.fromJSON(a)},events:this.events}),this.layers.setHistoryCallback(()=>this.history.save()),this.snapping=new Je(this.canvas,this.events),this.crop=new Ze(this.canvas,this.history,this.events),this.patterns=new be(this.canvas,this.layers,this.history,this.events),this.curves=new rr(this.canvas,this.layers,this.history,this.events),this.maskPresets=new Ce(this.canvas,this.layers,this.history,this.events),this.layerMasks=new Oe(this.canvas,this.layers,this.history,this.events),this.setupCanvasEvents(),this.refreshSelectionStyle(),this.history.saveImmediate(),this.pages=new lr(this),this.masks=new hr(this)}async addImage(t,e){try{let i=await N.fromURL(t,{},{originX:"left",originY:"top",...e}),s=this.layers.add("image",i);return this.layers.select(s.id),this.history.save(),s}catch(i){throw this.events.emit("error",{message:"Failed to add image",error:i}),i}}async replaceImageSource(t,e){let i=this.layers.get(t);if(!i||i.type!=="image"&&i.type!=="mask")throw new Error(`Image or mask layer not found: ${t}`);if(i.meta.pattern)throw new Error("Clear the pattern before replacing the image source");this.crop.activeLayerId()===t&&this.crop.cancel();let s=i.fabricObject;try{let n=await N.fromURL(e,{},{originX:"left",originY:"top"});return n.set({left:s.left,top:s.top,originX:s.originX,originY:s.originY,width:s.width,height:s.height,cropX:s.cropX,cropY:s.cropY,scaleX:s.scaleX,scaleY:s.scaleY,angle:s.angle,skewX:s.skewX,skewY:s.skewY,flipX:s.flipX,flipY:s.flipY}),n.filters=[...s.filters],n.applyFilters(),n.setCoords(),this.layers.replaceObject(t,n),i}catch(n){throw this.events.emit("error",{message:"Failed to replace image source",error:n}),n}}addText(t,e){let i=new Bt(t,{fontSize:32,fontFamily:"Arial",fill:"#000000",width:200,originX:"left",originY:"top",...e}),s=this.layers.add("text",i);return this.layers.select(s.id),this.history.save(),s}addShape(t,e){let i=t.create(e),s=this.layers.add("shape",i,t.name);return this.layers.select(s.id),this.history.save(),s}async addTemplate(t,e){let i={};for(let a of t.parameters){let o=e[a.key]??a.default;if(o===void 0)throw new Error(`Missing template parameter: ${a.key}`);if(a.type==="number"&&!Number.isFinite(Number(o)))throw new Error(`Invalid number for template parameter: ${a.key}`);if(a.type==="color"&&!se(o))throw new Error(`Invalid color for template parameter: ${a.key}`);i[a.key]=o}let s=Cs(t.svg.replace(/\{\{(\w+)(?:[|:]([^}]*))?\}\}/g,(a,o,l)=>{let h=i[o]??l;return h===void 0?a:xs(h)})),n=s.includes("<textPath")?[Ji(t,i)]:await Zi(t,s,i);if(n.length===0)throw new Error("Template SVG contains no renderable objects");return this.history.transaction(async()=>{let a=n.map(l=>{let h=this.layers.add(l.type,l.object,l.name);return l.curve&&this.curves.apply(h.id,l.curve,!1),h}),o=a.length===1?a[0]:await this.groupLayers(a.map(l=>l.id),t.name)??a[0];return o.fabricObject.set({left:this.canvas.getWidth()/2,top:this.canvas.getHeight()/2,originX:"center",originY:"center"}),o.fabricObject.setCoords(),this.layers.select(o.id),this.canvas.requestRenderAll(),this.history.save(),o})}removeLayer(t){this.crop.activeLayerId()===t&&this.crop.cancel(),this.masks.activeLayerId()===t&&this.masks.detach(t),this.layers.remove(t)&&this.history.save()}selectLayer(t){this.layers.select(t)}selectLayers(t){this.layers.selectMany(t)}getSelectedLayer(){let t=this.canvas.getActiveObject();return t?this.layers.findByObject(t)??null:null}flipLayer(t,e){let i=this.layers.get(t);if(!i)return;let s=i.fabricObject;e==="horizontal"?s.set("flipX",!s.flipX):s.set("flipY",!s.flipY),s.setCoords(),this.canvas.requestRenderAll(),this.history.save()}async duplicateLayer(t){let e=this.layers.get(t);if(!e)return null;let i=await e.fabricObject.clone();i.set({left:(i.left??0)+15,top:(i.top??0)+15}),i.setCoords();let s=this.layers.add(e.type,i,`${e.name} copy`);return s.meta=structuredClone(e.meta),s.visible=e.visible,s.locked=e.locked,s.opacity=e.opacity,i.set({visible:e.visible,selectable:!e.locked,evented:!e.locked,opacity:e.opacity}),this.patterns.attachTo(s),this.layers.select(s.id),this.canvas.requestRenderAll(),this.history.save(),s}applyImageAdjustments(t,e){let i=this.layers.get(t);if(!i||i.type!=="image")return!1;let s=i.fabricObject,a={...i.meta.imageAdjustments??{},...e},o=(l,h=-1)=>H(l??0,h,1);return s.filters=[new qr.Brightness({brightness:o(a.brightness)}),new qr.Contrast({contrast:o(a.contrast)}),new qr.Saturation({saturation:o(a.saturation)}),new qr.Blur({blur:o(a.blur,0)})],i.meta.imageAdjustments=a,s.applyFilters(),this.canvas.requestRenderAll(),this.history.save(),!0}async groupLayers(t,e="Group"){let i=[...new Set(t)],s=i.map(l=>this.layers.get(l)).filter(l=>l!==void 0&&l.parentId===null);if(s.length<2||s.length!==i.length)return null;let n=this.layers.getAll(),a=Math.max(...s.map(l=>n.indexOf(l))),o=n.slice(0,a).filter(l=>!s.includes(l)).length;return this.history.transaction(()=>{let l=[],h=[];for(let d of s)if(d.type==="group"&&d.children.length>0){let g=d.fabricObject.removeAll();for(let[f,p]of g.entries()){p.setCoords();let y=d.children[f];y&&(l.push(y),h.push(p))}d.children=[],this.layers.detach(d.id)}else l.push(d),h.push(d.fabricObject),this.layers.detach(d.id);let c=new U(h),u=this.layers.add("group",c,e);return this.layers.adoptChildren(u,l),this.layers.reorder(u.id,o),this.layers.select(u.id),this.history.save(),u})}async ungroupLayer(t){let e=this.layers.get(t);return!e||e.type!=="group"||e.children.length===0?[]:this.history.transaction(()=>{let i=this.layers.explode(e);return this.history.save(),this.layers.select(i[0]?.id??null),i})}toJSON(){return ds(this)}async fromJSON(t){let e=this.history.isRestoring();e||(this.history.saveImmediate(),this.history.pause());try{await gs(this,t),await this.patterns.rehydrateAll(),this.layerMasks.refreshAll()}catch(i){throw e||this.events.emit("error",{message:"Failed to load editor state",error:i}),i}finally{e||this.history.resume()}e||(this.history.clear(),this.history.saveImmediate())}async toPNG(t){return this.toRaster(t?.format??"png",t)}async toJPEG(t){return this.toRaster("jpeg",t)}async toWebP(t){return this.toRaster("webp",t)}async exportLayer(t,e={}){let i=this.layers.get(t);if(!i)throw new Error(`Layer not found: ${t}`);try{if(e.resolution==="source"&&i.fabricObject instanceof N){let s=await i.fabricObject.clone();return s.set({left:0,top:0,originX:"left",originY:"top",scaleX:1,scaleY:1,angle:0,flipX:!1,flipY:!1}),await si(this.canvas,[s],{...e,width:s.width||1,height:s.height||1,cloneObjects:!1})}return await si(this.canvas,[i.renderProxy??i.fabricObject],e)}catch(s){throw this.events.emit("error",{message:`Failed to export layer: ${t}`,error:s}),s}}async exportBackground(t={}){try{return await si(this.canvas,[],{...t,backgroundColor:this.designBackground,backgroundImage:this.designBackgroundImage})}catch(e){throw this.events.emit("error",{message:"Failed to export background",error:e}),e}}async toRaster(t,e){this.events.emit("export:start",{format:t});try{await this.fonts.ready();let i=await this.withDesignBackground(()=>ii(this.canvas,{...e,format:t}));return this.events.emit("export:complete",{format:t}),this.licensing.track(`export:${t}`),i}catch(i){throw this.events.emit("error",{message:og(i)?"Canvas export was blocked by cross-origin image data; load remote images with CORS enabled":`Failed to export ${t.toUpperCase()}`,error:i}),i}}toSVG(){this.events.emit("export:start",{format:"svg"});try{let t=this.withDesignBackground(()=>vs(this.canvas));return this.events.emit("export:complete",{format:"svg"}),this.licensing.track("export:svg"),t}catch(t){throw this.events.emit("error",{message:"Failed to export SVG",error:t}),t}}async toSVGAsync(t={}){await this.fonts.ready();let e=this.toSVG();if(t.embedFonts===!1||this.fonts.getAll().length===0)return e;try{let i=await this.fonts.getEmbeddedCss();return e.replace(/(<svg\b[^>]*>)/i,`$1<defs><style>${i}</style></defs>`)}catch(i){throw this.events.emit("error",{message:"Failed to embed fonts in SVG",error:i}),i}}toDataURL(t="png",e=1){return this.withDesignBackground(()=>bs(this.canvas,t,e))}async toPrintFile(t={}){await this.fonts.ready();try{let e=this.mockup?.printArea,i=e?await ms(this.canvas,e,t):await si(this.canvas,this.canvas.getObjects(),t);return this.licensing.track(`export:print:${t.format??"png"}`),i}catch(e){throw this.events.emit("error",{message:"Failed to export print file",error:e}),e}}async toMockupImage(t={}){if(!this.mockup)throw new Error("No mockup is configured");await this.fonts.ready();try{let e=await ys(this.canvas,this.mockup,t);return this.licensing.track(`export:mockup:${t.format??"png"}`),e}catch(e){throw this.events.emit("error",{message:"Failed to export mockup",error:e}),e}}withDesignBackground(t){if(!this.mockup)return t();let e=this.canvas.backgroundColor,i=this.canvas.backgroundImage;this.canvas.backgroundColor=this.designBackground,this.canvas.backgroundImage=this.designBackgroundImage??void 0;try{return t()}finally{this.canvas.backgroundColor=e,this.canvas.backgroundImage=i}}toPrintifyPositioning(){let t={},e=this.canvas.getWidth(),i=this.canvas.getHeight(),s=this.layers.getAll().filter(n=>n.type==="image");if(s.length===0)return t.front={x:.5,y:.5,scale:1,angle:0},t;for(let n of s){let a=n.fabricObject,o=a.getCenterPoint(),l=t[n.name]?`${n.name}-${n.id}`:n.name;t[l]={x:Q(o.x/e),y:Q(o.y/i),scale:Q(a.scaleX??1),angle:Q(a.angle??0)}}return t}toNormalizedPositioning(){let t=this.canvas.getWidth(),e=this.canvas.getHeight();return this.layers.getAll().map(i=>{let s=i.fabricObject,n=s.getCenterPoint(),a=s.getBoundingRect();return{layerId:i.id,name:i.name,type:i.type,centerX:Q(n.x/t),centerY:Q(n.y/e),width:Q(a.width/t),height:Q(a.height/e),scaleX:Q(s.scaleX??1),scaleY:Q(s.scaleY??1),angle:Q(s.angle??0)}})}toProviderPositioning(t){return t.map(this.toNormalizedPositioning(),{width:this.canvas.getWidth(),height:this.canvas.getHeight()})}async save(t,e){if(!this.fileAdapter)return;let i;e==="png"?i=await this.toPNG():e==="jpeg"?i=await this.toJPEG():e==="webp"?i=await this.toWebP():e==="svg"?i=await this.toSVGAsync():i=JSON.stringify(this.toJSON(),null,2);try{return await this.fileAdapter.save(i,t,e)}catch(s){throw this.events.emit("error",{message:`Failed to save ${e}`,error:s}),s}}async uploadImage(t){if(this.imageProvider?.upload)try{return await this.imageProvider.upload(t)}catch(e){throw this.events.emit("error",{message:"Failed to upload image",error:e}),e}}async browseImages(){if(!this.imageProvider?.browse)return null;try{return await this.imageProvider.browse()}catch(t){throw this.events.emit("error",{message:"Failed to browse images",error:t}),t}}async searchImages(t,e){if(!this.imageProvider?.search)return null;try{return await this.imageProvider.search(t,e)}catch(i){throw this.events.emit("error",{message:"Failed to search images",error:i}),i}}async addProviderImage(t,e){try{await this.imageProvider?.trackUse?.(t)}catch(i){throw this.events.emit("error",{message:"Failed to record image use",error:i}),i}return this.addImage(t.url,e)}setFileAdapter(t){this.fileAdapter=t}setImageProvider(t){this.imageProvider=t}setBackground(t){this.designBackground=t,this.mockup||(this.canvas.backgroundColor=t,this.canvas.requestRenderAll()),this.history.save(),this.events.emit("canvas:modified",{})}getDesignBackground(){return this.designBackground}getDesignBackgroundImage(){return this.designBackgroundImage}getBackgroundImageOptions(){return this.backgroundImageOptions?{...this.backgroundImageOptions}:null}async setBackgroundImage(t,e={}){if(t===null){this.setBackgroundImageObject(null);return}try{let i=await N.fromURL(t,{crossOrigin:e.crossOrigin??null,signal:e.signal},{originX:"left",originY:"top"}),s=i.width||1,n=i.height||1,a=this.canvas.getWidth(),o=this.canvas.getHeight(),l=e.fit??"cover",h=a/s,c=o/n,u=l==="stretch"?h:l==="contain"?Math.min(h,c):Math.max(h,c),d=l==="stretch"?c:u;i.set({left:(a-s*u)/2,top:(o-n*d)/2,scaleX:u,scaleY:d,opacity:H(e.opacity??1,0,1),selectable:!1,evented:!1});let g={...e};delete g.signal,this.setBackgroundImageObject(i,!0,g)}catch(i){throw this.events.emit("error",{message:"Failed to set background image",error:i}),i}}setBackgroundImageObject(t,e=!0,i=null){this.designBackgroundImage=t,this.backgroundImageOptions=t?i:null,this.canvas.backgroundImage=this.mockup?void 0:t??void 0,this.canvas.requestRenderAll(),e&&this.history.save(),this.events.emit("canvas:modified",{})}setTransparentBackground(){this.setBackground("")}resize(t,e,i={}){let s=this.units.toPixels(t),n=this.units.toPixels(e),a=this.canvas.getWidth(),o=this.canvas.getHeight();if((i.scaleContent??!0)&&a>0&&o>0){let h=s/a,c=n/o;for(let u of this.layers.getAll()){let d=u.fabricObject;d.set({left:(d.left??0)*h,top:(d.top??0)*c,scaleX:(d.scaleX??1)*h,scaleY:(d.scaleY??1)*c}),d.setCoords()}this.designBackgroundImage&&(this.designBackgroundImage.set({left:(this.designBackgroundImage.left??0)*h,top:(this.designBackgroundImage.top??0)*c,scaleX:(this.designBackgroundImage.scaleX??1)*h,scaleY:(this.designBackgroundImage.scaleY??1)*c}),this.designBackgroundImage.setCoords())}this.canvas.setDimensions({width:s,height:n}),this.patterns.syncArea(),this.canvas.requestRenderAll(),this.history.save(),this.events.emit("canvas:modified",{})}getImageDpi(t){let e=this.layers.get(t);if(!e||e.type!=="image")return null;let i=e.fabricObject,s=i.width??0,n=i.getScaledWidth();return s<=0||n<=0?null:Q(s/(n/this.units.getDpi()))}validateImageDpi(t=300){return this.layers.getAll().filter(e=>e.type==="image"&&!e.meta.pattern).flatMap(e=>{let i=this.getImageDpi(e.id);return i!==null&&i<t?[{layerId:e.id,layerName:e.name,effectiveDpi:i,minimumDpi:t}]:[]})}toThumbnail(t=320,e=320,i="png"){let s=Math.min(1,t/this.canvas.getWidth(),e/this.canvas.getHeight());return this.toDataURL(i,s)}bringToFront(t){return this.layers.reorder(t,this.layers.count()-1)}sendToBack(t){return this.layers.reorder(t,0)}bringForward(t){let e=this.layers.getAll().findIndex(i=>i.id===t);return e>=0&&this.layers.reorder(t,e+1)}sendBackward(t){let e=this.layers.getAll().findIndex(i=>i.id===t);return e>=0&&this.layers.reorder(t,e-1)}setZoom(t){let e=H(Q(t),ng,ag);e!==this.zoomLevel&&(this.zoomLevel=e,this.refreshSelectionStyle(),this.events.emit("zoom:changed",{zoom:e}))}zoom(t){this.setZoom(t)}getZoom(){return this.zoomLevel}zoomIn(t=.1){this.setZoom(this.zoomLevel+t)}zoomOut(t=.1){this.setZoom(this.zoomLevel-t)}resetZoom(){this.setZoom(1)}zoomToFit(t,e,i=0){let s=this.canvas.getWidth(),n=this.canvas.getHeight();if(s<=0||n<=0)return;let a=(t-i*2)/s,o=(e-i*2)/n;this.setZoom(Math.min(a,o))}zoomToSelection(t=24){let e=this.canvas.getActiveObject();if(!e)return;e.setCoords();let i=e.getBoundingRect();i.width<=0||i.height<=0||this.setZoom(Math.min((this.canvas.getWidth()-t*2)/i.width,(this.canvas.getHeight()-t*2)/i.height))}applyPattern(t,e){return this.patterns.apply(t,e)}clearPattern(t){return this.patterns.disable(t)}applyTextCurve(t,e){return this.curves.apply(t,e)}clearTextCurve(t){return this.curves.clear(t)}getTextCurve(t){return this.curves.get(t)}applyMaskPreset(t,e){return this.maskPresets.apply(t,e)}clearMaskPreset(t){return this.maskPresets.clear(t)}getMaskPreset(t){return this.maskPresets.get(t)}setLayerAspectLock(t,e){let i=this.layers.get(t);return i?(Se(i.fabricObject,e),e?i.meta.lockAspect=!0:delete i.meta.lockAspect,this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.history.save(),!0):!1}getLayerAspectLock(t){return this.layers.get(t)?.meta.lockAspect===!0}restoreAspectLocks(){for(let t of this.layers.getAll())t.meta.lockAspect&&Se(t.fabricObject,!0)}resetLayerTransform(t){let e=this.layers.get(t);return e?(us(e.fabricObject),this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.history.save(),!0):!1}setLayerShadow(t,e){let i=this.layers.get(t);return i?(ls(i.fabricObject,e),i.fabricObject.dirty=!0,this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.history.save(),!0):!1}getLayerShadow(t){let e=this.layers.get(t);return e?ri(e.fabricObject):null}setMockup(t,e={}){this.mockup=t,this.canvas.backgroundColor=t?"":this.designBackground,this.canvas.backgroundImage=t?void 0:this.designBackgroundImage??void 0,this.canvas.requestRenderAll(),this.events.emit("mockup:changed",{mockup:t}),e.history!==!1&&this.history.save()}clearMockup(){this.setMockup(null)}getMockup(){return this.mockup}dispose(){this.masks.dispose(),this.layerMasks.dispose(),this.snapping.dispose(),this.crop.dispose(),this.history.dispose(),this.patterns.dispose(),this.curves.dispose(),this.events.removeAllListeners(),this.canvas.dispose()}getSelectionStyle(){return{...this.selectionStyle}}setSelectionStyle(t){this.selectionStyle={...this.selectionStyle,...t},this.refreshSelectionStyle()}refreshSelectionStyle(){cs(this.canvas,this.selectionStyle,this.zoomLevel)}setupCanvasEvents(){this.canvas.on("object:added",e=>{e.target&&we(e.target,this.selectionStyle,this.zoomLevel)});let t=()=>{let e=this.canvas.getActiveObject();e&&we(e,this.selectionStyle,this.zoomLevel)};this.canvas.on("object:modified",e=>{if(!e.target)return;let i=this.layers.findByObject(e.target);i&&(this.events.emit("layer:modified",{layerId:i.id}),this.history.save())}),this.canvas.on("selection:created",e=>{t();let i=(e.selected??[]).map(s=>this.layers.findByObject(s)?.id).filter(s=>s!==void 0);this.events.emit("selection:changed",{selected:i})}),this.canvas.on("selection:updated",e=>{t();let i=(e.selected??[]).map(s=>this.layers.findByObject(s)?.id).filter(s=>s!==void 0);this.events.emit("selection:changed",{selected:i})}),this.canvas.on("selection:cleared",()=>{this.events.emit("selection:changed",{selected:[]})})}};var nh={mode:"grid",scale:100,horizontalSpacing:0,verticalSpacing:0,angle:0,horizontalOffset:50,offsetX:0,offsetY:0,rotationStepH:0,rotationStepV:0,horizontalLimit:0,verticalLimit:0};var ah=[{id:"a4-portrait",name:"A4 portrait",width:210,height:297,unit:"mm",dpi:300},{id:"a4-landscape",name:"A4 landscape",width:297,height:210,unit:"mm",dpi:300},{id:"us-letter",name:"US Letter",width:8.5,height:11,unit:"in",dpi:300},{id:"shirt-front",name:"Garment front",width:12,height:16,unit:"in",dpi:300},{id:"instagram-square",name:"Social square",width:1080,height:1080,unit:"px",dpi:72},{id:"story",name:"Story",width:1080,height:1920,unit:"px",dpi:72}];var ks=class{items=new Map;transform={zoom:1,panX:0,panY:0,devicePixelRatio:1};set(t){this.items.set(t.id,structuredClone(t))}remove(t){return this.items.delete(t)}clear(){this.items.clear()}getAll(){return[...this.items.values()].map(t=>structuredClone(t))}setTransform(t){if(!Number.isFinite(t.zoom)||t.zoom<=0)throw new Error("Annotation zoom must be positive");this.transform={...t,devicePixelRatio:t.devicePixelRatio??1}}documentToViewport(t){return{x:t.x*this.transform.zoom+this.transform.panX,y:t.y*this.transform.zoom+this.transform.panY}}viewportToDocument(t){return{x:(t.x-this.transform.panX)/this.transform.zoom,y:(t.y-this.transform.panY)/this.transform.zoom}}documentToDevice(t){let e=this.documentToViewport(t),i=this.transform.devicePixelRatio??1;return{x:e.x*i,y:e.y*i}}};return fh(lg);})();
|
|
507
507
|
//# sourceMappingURL=index.global.js.map
|