@overtone-art/canvas-editor-core 0.3.0 → 0.3.2
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.d.mts +63 -1
- package/dist/index.d.ts +63 -1
- package/dist/index.global.js +51 -51
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +103 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +100 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.global.js
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
"use strict";var OvertoneCanvasEditor=(()=>{var
|
|
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(),Lt("log",`WebGL: max texture size ${this.maxTextureSize}`))}isSupported(r){return!!this.maxTextureSize&&this.maxTextureSize>=r}},Fl={},Fn;var Tt=()=>Fn||(Fn={document,window,isTouchSupported:"ontouchstart"in window||"ontouchstart"in document||window&&window.navigator&&window.navigator.maxTouchPoints>0,WebGLProbe:new Il,dispose(){},copyPasteData:Fl}),De=()=>Tt().document,ce=()=>Tt().window,da=()=>{var r;return Math.max((r=I.devicePixelRatio)==null?ce().devicePixelRatio:r,1)},_r=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}=I,e=Math.sqrt(t*r);return[Math.floor(e),Math.floor(t/e)]}},gs="7.4.0";function ei(){}var Gt=Math.PI/2,Ll=Math.PI/4,yt=2*Math.PI,$s=Math.PI/180,it=Object.freeze([1,0,0,1,0,0]),F="center",z="left",ga="bottom",mt="right",yi="none",Ys=/\r?\n/,pa="moving",bi="scaling",fa="rotating",ma="rotate",va="skewing",Mr="resizing",ya="modifyPoly",li="changed",ba="scale",Ut="scaleX",qt="scaleY",Ae="skewX",je="skewY",st="fill",kt="stroke",xa="modified",Ln="normal",ye="json",_=new class{constructor(){this[ye]=new Map,this.svg=new Map}has(r){return this[ye].has(r)}getClass(r){let t=this[ye].get(r);if(!t)throw new St(`No class registered for ${r}`);return t}setClass(r,t){t?this[ye].set(t,r):(this[ye].set(r.type,r),this[ye].set(r.type.toLowerCase(),r))}getSVGClass(r){return this.svg.get(r)}setSVGClass(r,t){this.svg.set(t??r.type.toLowerCase(),r)}},hi=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}},Rl=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||{})}},ie=(r,t)=>{let e=r.indexOf(t);return e!==-1&&r.splice(e,1),r},bt=r=>{if(r===0)return 1;switch(Math.abs(r)/Gt){case 1:case 3:return 0;case 2:return-1}return Math.cos(r)},xt=r=>{if(r===0)return 0;let t=r/Gt,e=Math.sign(r);switch(t){case 1:return e;case 2:return 0;case 3:return-e}return Math.sin(r)},b=class Q{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 Q(this.x+t.x,this.y+t.y)}addEquals(t){return this.x+=t.x,this.y+=t.y,this}scalarAdd(t){return new Q(this.x+t,this.y+t)}scalarAddEquals(t){return this.x+=t,this.y+=t,this}subtract(t){return new Q(this.x-t.x,this.y-t.y)}subtractEquals(t){return this.x-=t.x,this.y-=t.y,this}scalarSubtract(t){return new Q(this.x-t,this.y-t)}scalarSubtractEquals(t){return this.x-=t,this.y-=t,this}multiply(t){return new Q(this.x*t.x,this.y*t.y)}scalarMultiply(t){return new Q(this.x*t,this.y*t)}scalarMultiplyEquals(t){return this.x*=t,this.y*=t,this}divide(t){return new Q(this.x/t.x,this.y/t.y)}scalarDivide(t){return new Q(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 Q(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 Q(Math.min(this.x,t.x),Math.min(this.y,t.y))}max(t){return new Q(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 Q(this.x,this.y)}rotate(t,e=Ws){let i=xt(t),s=bt(t),n=this.subtract(e);return new Q(n.x*s-n.y*i,n.x*i+n.y*s).add(e)}transform(t,e=!1){return new Q(t[0]*this.x+t[2]*this.y+(e?0:t[4]),t[1]*this.x+t[3]*this.y+(e?0:t[5]))}},Ws=new b(0,0),ri=r=>!!r&&Array.isArray(r._objects);function wa(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])&&(ie(this._objects,i),this._objects.unshift(i),this._onStackOrderChanged(i),!0)}bringObjectToFront(i){return!(!i||i===this._objects[this._objects.length-1])&&(ie(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 ie(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 ie(this._objects,i),this._objects.splice(a,0,i),this._onStackOrderChanged(i),!0}return!1}moveObjectTo(i,s){return i!==this._objects[s]&&(ie(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 b(i,s),c=h.add(new b(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 Ca=class extends Rl{_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 Tr(r){return ce().requestAnimationFrame(r)}function Sa(r){return ce().cancelAnimationFrame(r)}var Bl=0,Nt=()=>Bl++,Ot=()=>{let r=De().createElement("canvas");if(!r||r.getContext===void 0)throw new St("Failed to create `canvas` element");return r},_a=()=>De().createElement("img"),Xl=r=>{var t;let e=ht(r);return(t=e.getContext("2d"))==null||t.drawImage(r,0,0),e},ht=r=>{let t=Ot();return t.width=r.width,t.height=r.height,t},zs=(r,t,e)=>r.toDataURL(`image/${t}`,e),Hs=(r,t,e)=>new Promise((i,s)=>{r.toBlob(i,`image/${t}`,e)}),X=r=>r*$s,Rt=r=>r/$s,Ta=r=>r.every((t,e)=>t===it[e]),q=(r,t,e)=>new b(r).transform(t,e),nt=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 b(r[4],r[5]).transform(e,!0);return e[4]=-i,e[5]=-s,e},$=(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]],xi=(r,t)=>r.reduceRight((e,i)=>i&&e?$(i,e,t):i||e,void 0)||it.concat(),Vs=([r,t])=>Math.atan2(t,r),Ns=([r,t])=>Math.sqrt(r*r+t*t),ka=([,,r,t])=>Math.sqrt(r*r+t*t),ue=r=>{let t=Vs(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:Rt(t),scaleX:i,scaleY:s,skewX:Rt(n),skewY:0,translateX:r[4]||0,translateY:r[5]||0}},Ie=(r,t=0)=>[1,0,0,1,r,t];function ge({angle:r=0}={},{x:t=0,y:e=0}={}){let i=X(r),s=bt(i),n=xt(i);return[s,n,-n,s,t?t-(s*t-n*e):0,e?e-(n*t+s*e):0]}var wi=(r,t=r)=>[r,0,0,t,0,0],Oa=r=>Math.tan(X(r)),Gs=r=>[1,0,Oa(r),1,0,0],Us=r=>[1,Oa(r),0,1,0,0],jr=({scaleX:r=1,scaleY:t=1,flipX:e=!1,flipY:i=!1,skewX:s=0,skewY:n=0})=>{let a=wi(e?-r:r,i?-t:t);return s&&(a=$(a,Gs(s),!0)),n&&(a=$(a,Us(n),!0)),a},Ma=r=>{let{translateX:t=0,translateY:e=0,angle:i=0}=r,s=Ie(t,e);i&&(s=$(s,ge({angle:i})));let n=jr(r);return Ta(n)||(s=$(s,n)),s},kr=(r,{signal:t,crossOrigin:e=null}={})=>new Promise(function(i,s){if(t&&t.aborted)return s(new ua("loadImage"));let n=_a(),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 St(`Error loading ${n.src}`))},e&&(n.crossOrigin=e),n.src=r):o()}),Oe=(r,{signal:t,reviver:e=ei}={})=>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)})}),Ir=(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)?Oe([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)})}),pe=(r,t=[])=>t.reduce((e,i)=>(i in r&&(e[i]=r[i]),e),{}),qs=(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)),Me=r=>"matrix("+r.map(t=>R(t,I.NUM_FRACTION_DIGITS)).join(" ")+")",dt=r=>!!r&&r.toLive!==void 0,Rn=r=>!!r&&typeof r.toObject=="function",Bn=r=>!!r&&r.offsetX!==void 0&&"source"in r,se=r=>!!r&&"multiSelectionStacking"in r;function Pa(r){let t=r&&pt(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 pt=r=>r.ownerDocument||null,Ea=r=>{var t;return((t=r.ownerDocument)==null?void 0:t.defaultView)||null},Da=(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))},ps=(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 Xn(r){return r.onselectstart!==void 0&&(r.onselectstart=()=>!1),r.style.userSelect=yi,r}var Aa=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&&De().getElementById(r)||Ot();var e;if(t.hasAttribute("data-fabric"))throw new St("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;Da(e,i,r,t)}setCSSDimensions(r){ps(this.lower.el,r)}calcOffset(){return(function(r){var t;let e=r&&pt(r),i={left:0,top:0};if(!e)return i;let s=((t=Ea(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=Pa(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(){Tt().dispose(this.lower.el),delete this.lower}},$l={backgroundVpt:!0,backgroundColor:"",overlayVpt:!0,overlayColor:"",includeDefaultValues:!0,svgViewportTransformation:!0,renderOnAddRemove:!0,skipOffscreen:!0,enableRetinaScaling:!0,imageSmoothingEnabled:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,viewportTransform:[...it],patternQuality:"best"},Yl=Ar({capitalize:()=>Wl,escapeXml:()=>P,graphemeSplit:()=>Ci}),Wl=(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,">"),er,Ci=r=>{if(er||er||(er="Intl"in ce()&&"Segmenter"in Intl&&new Intl.Segmenter(void 0,{granularity:"grapheme"})),er){let t=er.segment(r);return Array.from(t).map(({segment:e})=>e)}return zl(r)},zl=r=>{let t=[];for(let e,i=0;i<r.length;i++)(e=Hl(r,i))!==!1&&t.push(e);return t},Hl=(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},Fe=class ja extends wa(Ca){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 ja.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 Aa(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&&(Lt("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?
|
|
1
|
+
"use strict";var OvertoneCanvasEditor=(()=>{var ss=Object.defineProperty;var Ml=Object.getOwnPropertyDescriptor;var Pl=Object.getOwnPropertyNames;var El=Object.prototype.hasOwnProperty;var Dl=(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 Al=(r,t)=>{for(var e in t)ss(r,e,{get:t[e],enumerable:!0})},jl=(r,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Pl(t))!El.call(r,s)&&s!==e&&ss(r,s,{get:()=>t[s],enumerable:!(i=Ml(t,s))||i.enumerable});return r};var Ll=r=>jl(ss({},"__esModule",{value:!0}),r);var td={};Al(td,{AnnotationOverlay:()=>rs,CANVAS_SIZE_PRESETS:()=>kl,CanvasEditor:()=>es,CropController:()=>We,DEFAULT_LAYER_SHADOW:()=>re,DEFAULT_PATTERN_CONFIG:()=>Tl,DEFAULT_SELECTION_STYLE:()=>$i,DEFAULT_TEXT_CURVE:()=>Ii,EventEmitter:()=>Re,FontRegistry:()=>Ue,HistoryManager:()=>Ye,Layer:()=>Br,LayerManager:()=>Xe,LicenseManager:()=>qe,MaskController:()=>Je,MaskPresetManager:()=>me,MaskRefinementError:()=>Dt,PatternManager:()=>ze,ProjectManager:()=>Ke,SHAPE_MASK_BOX:()=>Ne,SHAPE_MASK_IDS:()=>Ri,SnapManager:()=>$e,TEXTURE_MASK_IDS:()=>Bi,TEXTURE_MASK_SIZE:()=>Et,TextCurveManager:()=>He,UnitConverter:()=>Ge,applyAspectLock:()=>ye,applyLayerShadow:()=>Yi,applyObjectSelectionStyle:()=>ve,applyPatternLocks:()=>Li,applySelectionStyle:()=>Wi,buildCurvePathData:()=>Mn,buildPatternDataURL:()=>_n,captureLocks:()=>Sn,clamp:()=>N,clearPatternImageCache:()=>Fi,clearTextureMaskCache:()=>An,computeCoverPlacement:()=>jn,computePrintAreaClip:()=>Gi,computeTilePositions:()=>Tn,deserializeEditor:()=>Vi,displaceRgba:()=>Ni,drawTiles:()=>kn,escapeXml:()=>Zi,exportDataURL:()=>Ji,exportMockup:()=>qi,exportPNG:()=>zr,exportPrintArea:()=>Ui,exportSVG:()=>Ki,generateId:()=>te,isCssColor:()=>ee,isMaskPresetId:()=>Xi,isShapeMaskId:()=>Ve,isTextureMaskId:()=>Yr,loadPatternImage:()=>wn,readLayerShadow:()=>Wr,renderTextureMask:()=>$r,resetTransform:()=>zi,restoreLocks:()=>Cn,round2:()=>J,sanitizeSvg:()=>Qi,serializeEditor:()=>Hi,shapeMaskPathData:()=>Xr});var In=Object.defineProperty,jr=(r,t)=>{let e={};for(var i in r)In(e,i,{get:r[i],enumerable:!0});return t||In(e,Symbol.toStringTag,{value:"Module"}),e};function _r(r){return _r=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},_r(r)}function Fl(r){var t=(function(e,i){if(_r(e)!="object"||!e)return e;var s=e[Symbol.toPrimitive];if(s!==void 0){var n=s.call(e,i||"default");if(_r(n)!="object")return n;throw TypeError("@@toPrimitive must return a primitive value.")}return(i==="string"?String:Number)(e)})(r,"string");return _r(t)=="symbol"?t:t+""}function m(r,t,e){return(t=Fl(t))in r?Object.defineProperty(r,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[t]=e,r}var Rn=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 Rn{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 Rn,e=r?.reduce((i,s)=>(i[s]=t[s],i),{})||t;this.configure(e)}},It=(r,...t)=>console[r]("fabric",...t),wt=class extends Error{constructor(r,t){super(`fabric: ${r}`,t)}},pa=class extends wt{constructor(r){super(`${r} 'options.signal' is in 'aborted' state`)}},Il=class{},Rl=class extends Il{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(),It("log",`WebGL: max texture size ${this.maxTextureSize}`))}isSupported(r){return!!this.maxTextureSize&&this.maxTextureSize>=r}},Bl={},Bn;var Tt=()=>Bn||(Bn={document,window,isTouchSupported:"ontouchstart"in window||"ontouchstart"in document||window&&window.navigator&&window.navigator.maxTouchPoints>0,WebGLProbe:new Rl,dispose(){},copyPasteData:Bl}),Ae=()=>Tt().document,ce=()=>Tt().window,fa=()=>{var r;return Math.max((r=L.devicePixelRatio)==null?ce().devicePixelRatio:r,1)},Tr=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)]}},ms="7.4.0";function ri(){}var Gt=Math.PI/2,Xl=Math.PI/4,yt=2*Math.PI,zs=Math.PI/180,it=Object.freeze([1,0,0,1,0,0]),F="center",z="left",ma="bottom",mt="right",bi="none",Hs=/\r?\n/,va="moving",xi="scaling",ya="rotating",ba="rotate",xa="skewing",Pr="resizing",Sa="modifyPoly",hi="changed",Ca="scale",Ut="scaleX",qt="scaleY",je="skewX",Le="skewY",st="fill",kt="stroke",wa="modified",Xn="normal",be="json",_=new class{constructor(){this[be]=new Map,this.svg=new Map}has(r){return this[be].has(r)}getClass(r){let t=this[be].get(r);if(!t)throw new wt(`No class registered for ${r}`);return t}setClass(r,t){t?this[be].set(t,r):(this[be].set(r.type,r),this[be].set(r.type.toLowerCase(),r))}getSVGClass(r){return this.svg.get(r)}setSVGClass(r,t){this.svg.set(t??r.type.toLowerCase(),r)}},ci=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}},Yl=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||{})}},ie=(r,t)=>{let e=r.indexOf(t);return e!==-1&&r.splice(e,1),r},bt=r=>{if(r===0)return 1;switch(Math.abs(r)/Gt){case 1:case 3:return 0;case 2:return-1}return Math.cos(r)},xt=r=>{if(r===0)return 0;let t=r/Gt,e=Math.sign(r);switch(t){case 1:return e;case 2:return 0;case 3:return-e}return Math.sin(r)},b=class Q{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 Q(this.x+t.x,this.y+t.y)}addEquals(t){return this.x+=t.x,this.y+=t.y,this}scalarAdd(t){return new Q(this.x+t,this.y+t)}scalarAddEquals(t){return this.x+=t,this.y+=t,this}subtract(t){return new Q(this.x-t.x,this.y-t.y)}subtractEquals(t){return this.x-=t.x,this.y-=t.y,this}scalarSubtract(t){return new Q(this.x-t,this.y-t)}scalarSubtractEquals(t){return this.x-=t,this.y-=t,this}multiply(t){return new Q(this.x*t.x,this.y*t.y)}scalarMultiply(t){return new Q(this.x*t,this.y*t)}scalarMultiplyEquals(t){return this.x*=t,this.y*=t,this}divide(t){return new Q(this.x/t.x,this.y/t.y)}scalarDivide(t){return new Q(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 Q(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 Q(Math.min(this.x,t.x),Math.min(this.y,t.y))}max(t){return new Q(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 Q(this.x,this.y)}rotate(t,e=Vs){let i=xt(t),s=bt(t),n=this.subtract(e);return new Q(n.x*s-n.y*i,n.x*i+n.y*s).add(e)}transform(t,e=!1){return new Q(t[0]*this.x+t[2]*this.y+(e?0:t[4]),t[1]*this.x+t[3]*this.y+(e?0:t[5]))}},Vs=new b(0,0),ii=r=>!!r&&Array.isArray(r._objects);function _a(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])&&(ie(this._objects,i),this._objects.unshift(i),this._onStackOrderChanged(i),!0)}bringObjectToFront(i){return!(!i||i===this._objects[this._objects.length-1])&&(ie(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 ie(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 ie(this._objects,i),this._objects.splice(a,0,i),this._onStackOrderChanged(i),!0}return!1}moveObjectTo(i,s){return i!==this._objects[s]&&(ie(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 b(i,s),c=h.add(new b(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 Ta=class extends Yl{_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 kr(r){return ce().requestAnimationFrame(r)}function ka(r){return ce().cancelAnimationFrame(r)}var $l=0,Nt=()=>$l++,Ot=()=>{let r=Ae().createElement("canvas");if(!r||r.getContext===void 0)throw new wt("Failed to create `canvas` element");return r},Oa=()=>Ae().createElement("img"),Wl=r=>{var t;let e=ht(r);return(t=e.getContext("2d"))==null||t.drawImage(r,0,0),e},ht=r=>{let t=Ot();return t.width=r.width,t.height=r.height,t},Ns=(r,t,e)=>r.toDataURL(`image/${t}`,e),Gs=(r,t,e)=>new Promise((i,s)=>{r.toBlob(i,`image/${t}`,e)}),X=r=>r*zs,Rt=r=>r/zs,Ma=r=>r.every((t,e)=>t===it[e]),q=(r,t,e)=>new b(r).transform(t,e),nt=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 b(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]],Si=(r,t)=>r.reduceRight((e,i)=>i&&e?Y(i,e,t):i||e,void 0)||it.concat(),Us=([r,t])=>Math.atan2(t,r),qs=([r,t])=>Math.sqrt(r*r+t*t),Pa=([,,r,t])=>Math.sqrt(r*r+t*t),ue=r=>{let t=Us(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:Rt(t),scaleX:i,scaleY:s,skewX:Rt(n),skewY:0,translateX:r[4]||0,translateY:r[5]||0}},Fe=(r,t=0)=>[1,0,0,1,r,t];function ge({angle:r=0}={},{x:t=0,y:e=0}={}){let i=X(r),s=bt(i),n=xt(i);return[s,n,-n,s,t?t-(s*t-n*e):0,e?e-(n*t+s*e):0]}var Ci=(r,t=r)=>[r,0,0,t,0,0],Ea=r=>Math.tan(X(r)),Ks=r=>[1,0,Ea(r),1,0,0],Js=r=>[1,Ea(r),0,1,0,0],Lr=({scaleX:r=1,scaleY:t=1,flipX:e=!1,flipY:i=!1,skewX:s=0,skewY:n=0})=>{let a=Ci(e?-r:r,i?-t:t);return s&&(a=Y(a,Ks(s),!0)),n&&(a=Y(a,Js(n),!0)),a},Da=r=>{let{translateX:t=0,translateY:e=0,angle:i=0}=r,s=Fe(t,e);i&&(s=Y(s,ge({angle:i})));let n=Lr(r);return Ma(n)||(s=Y(s,n)),s},Or=(r,{signal:t,crossOrigin:e=null}={})=>new Promise(function(i,s){if(t&&t.aborted)return s(new pa("loadImage"));let n=Oa(),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 wt(`Error loading ${n.src}`))},e&&(n.crossOrigin=e),n.src=r):o()}),Me=(r,{signal:t,reviver:e=ri}={})=>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)})}),Fr=(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)?Me([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)})}),pe=(r,t=[])=>t.reduce((e,i)=>(i in r&&(e[i]=r[i]),e),{}),Zs=(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)),Pe=r=>"matrix("+r.map(t=>R(t,L.NUM_FRACTION_DIGITS)).join(" ")+")",dt=r=>!!r&&r.toLive!==void 0,Yn=r=>!!r&&typeof r.toObject=="function",$n=r=>!!r&&r.offsetX!==void 0&&"source"in r,se=r=>!!r&&"multiSelectionStacking"in r;function Aa(r){let t=r&&pt(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 pt=r=>r.ownerDocument||null,ja=r=>{var t;return((t=r.ownerDocument)==null?void 0:t.defaultView)||null},La=(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))},vs=(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 Wn(r){return r.onselectstart!==void 0&&(r.onselectstart=()=>!1),r.style.userSelect=bi,r}var Fa=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&&Ae().getElementById(r)||Ot();var e;if(t.hasAttribute("data-fabric"))throw new wt("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;La(e,i,r,t)}setCSSDimensions(r){vs(this.lower.el,r)}calcOffset(){return(function(r){var t;let e=r&&pt(r),i={left:0,top:0};if(!e)return i;let s=((t=ja(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=Aa(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(){Tt().dispose(this.lower.el),delete this.lower}},zl={backgroundVpt:!0,backgroundColor:"",overlayVpt:!0,overlayColor:"",includeDefaultValues:!0,svgViewportTransformation:!0,renderOnAddRemove:!0,skipOffscreen:!0,enableRetinaScaling:!0,imageSmoothingEnabled:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,viewportTransform:[...it],patternQuality:"best"},Hl=jr({capitalize:()=>Vl,escapeXml:()=>P,graphemeSplit:()=>wi}),Vl=(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,">"),rr,wi=r=>{if(rr||rr||(rr="Intl"in ce()&&"Segmenter"in Intl&&new Intl.Segmenter(void 0,{granularity:"grapheme"})),rr){let t=rr.segment(r);return Array.from(t).map(({segment:e})=>e)}return Nl(r)},Nl=r=>{let t=[];for(let e,i=0;i<r.length;i++)(e=Gl(r,i))!==!1&&t.push(e);return t},Gl=(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},Ie=class Ia extends _a(Ta){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 Ia.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 Fa(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&&(It("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?fa():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 qs(this.viewportTransform)}setViewportTransform(t){this.viewportTransform=t,this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll()}zoomToPoint(t,e){let i=t,s=[...this.viewportTransform],n=q(t,nt(s));s[0]=e,s[3]=e;let a=q(n,s);s[4]+=i.x-a.x,s[5]+=i.y-a.y,this.setViewportTransform(s)}setZoom(t){this.zoomToPoint(new b(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 b(-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=kr(()=>this.renderAndReset()))}calcViewportBoundaries(){let t=this.width,e=this.height,i=nt(this.viewportTransform),s=q({x:0,y:0},i),n=q({x:t,y:e},i),a=s.min(n),o=s.max(n);return this.vptCoords={tl:a,tr:new b(o.x,a.y),bl:new b(a.x,o.y),br:o}}cancelRequestedRender(){this.nextRenderHandle&&(ka(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=dt(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 b(this.width/2,this.height/2)}centerObjectH(t){return this._centerObject(t,new b(this.getCenterPoint().x,t.getCenterPoint().y))}centerObjectV(t){return this._centerObject(t,new b(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 b(this.getVpCenter().x,t.getCenterPoint().y))}viewportCenterObjectV(t){return this._centerObject(t,new b(t.getCenterPoint().x,this.getVpCenter().y))}getVpCenter(){return q(this.getCenterPoint(),nt(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:ms,...pe(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 dt(a)?a.excludeFromExport||(i.background=a.toObject(e)):a&&(i.background=a),dt(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">
|
|
7
|
-
`)}_setSVGHeader(t,e){let i=e.width||`${this.width}`,s=e.height||`${this.height}`,n=
|
|
8
|
-
`,"<desc>Created with Fabric.js ",
|
|
7
|
+
`)}_setSVGHeader(t,e){let i=e.width||`${this.width}`,s=e.height||`${this.height}`,n=L.NUM_FRACTION_DIGITS,a=e.viewBox,o;if(a)o=`viewBox="${a.x} ${a.y} ${a.width} ${a.height}" `;else if(this.svgViewportTransformation){let l=this.viewportTransform;o=`viewBox="${R(-l[4]/l[0],n)} ${R(-l[5]/l[3],n)} ${R(this.width/l[0],n)} ${R(this.height/l[3],n)}" `}else o=`viewBox="0 0 ${this.width} ${this.height}" `;t.push("<svg ",'xmlns="http://www.w3.org/2000/svg" ','xmlns:xlink="http://www.w3.org/1999/xlink" ','version="1.1" ','width="',i,'" ','height="',s,'" ',o,`xml:space="preserve">
|
|
8
|
+
`,"<desc>Created with Fabric.js ",ms,`</desc>
|
|
9
9
|
`,`<defs>
|
|
10
10
|
`,this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(e),`</defs>
|
|
11
11
|
`)}createSVGClipPathMarkup(t){let e=this.clipPath;return e?(e.clipPathId=`CLIPPATH_${Nt()}`,`<clipPath id="${e.clipPathId}" >
|
|
12
12
|
${e.toClipPathSVG(t.reviver)}</clipPath>
|
|
13
|
-
`):""}createSVGRefElementsMarkup(){return["background","overlay"].map(t=>{let e=this[`${t}Color`];if(dt(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(dt(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?Pe(s):""})}}).join("")}createSVGFontFacesMarkup(){let t=[],e={},i=L.fontPaths;this._objects.forEach(function n(a){t.push(a),ii(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(dt(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(dt(i)){let s=i.repeat||"",n=this.width,a=this.height,o=this[`${e}Vpt`]?Pe(nt(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"||!$n(i)?n:i.source.width}" height="${s!=="repeat-x"&&s!=="no-repeat"||!$n(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 St("`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([Oe(s,{reviver:e,signal:i}),Ir({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=ht(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 zs(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 Hs(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,p=this.viewportTransform,f=[g,0,0,g,(p[4]-(s||0))*t,(p[5]-(n||0))*t],v=this.enableRetinaScaling,y=ht({width:o,height:l}),x=a?this._objects.filter(w=>a(w)):this._objects;return this.enableRetinaScaling=!1,this.viewportTransform=f,this.width=o,this.height=l,this.skipControlsDrawing=!0,this.calcViewportBoundaries(),this.renderCanvas(y.getContext("2d"),x),this.viewportTransform=p,this.width=c,this.height=u,this.calcViewportBoundaries(),this.enableRetinaScaling=v,this.skipControlsDrawing=d,y}dispose(){return!this.disposed&&this.elements.cleanupDOM({width:this.width,height:this.height}),hi.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(Fe,"ownDefaults",$l);var Vl=["touchstart","touchmove","touchend"],Ia=r=>{let t=Pa(r.target),e=(function(i){let s=i.changedTouches;return s&&s[0]?s[0]:i})(r);return new b(e.clientX+t.left,e.clientY+t.top)},ci=r=>Vl.includes(r.type)||r.pointerType==="touch",$n=r=>{r.preventDefault(),r.stopPropagation()},_t=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}},Nl=(r,t)=>{Pe(r,$(nt(t),r.calcOwnMatrix()))},Fa=(r,t)=>Pe(r,$(t,r.calcOwnMatrix())),Pe=(r,t)=>{let{translateX:e,translateY:i,scaleX:s,scaleY:n,...a}=ue(t),o=new b(e,i);r.flipX=!1,r.flipY=!1,Object.assign(r,a),r.set({scaleX:s,scaleY:n}),r.setPositionByOrigin(o,F,F)},La=r=>{r.scaleX=1,r.scaleY=1,r.skewX=0,r.skewY=0,r.flipX=!1,r.flipY=!1,r.rotate(0)},Ks=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}),Si=(r,t,e)=>{let i=r/2,s=t/2,n=_t([new b(-i,-s),new b(i,-s),new b(-i,s),new b(i,s)].map(a=>a.transform(e)));return new b(n.width,n.height)},Fr=(r=it,t=it)=>$(nt(t),r),Bt=(r,t=it,e=it)=>r.transform(Fr(t,e)),Ra=(r,t=it,e=it)=>r.transform(Fr(t,e),!0),Js=(r,t,e)=>{let i=Fr(t,e);return Pe(r,$(i,r.calcOwnMatrix())),i},Gl={left:-.5,top:-.5,center:0,bottom:.5,right:.5},et=r=>typeof r=="string"?Gl[r]:r-.5,Ul=new b(1,0),Ba=new b,Zs=(r,t)=>r.rotate(t),Pr=(r,t)=>new b(t).subtract(r),ui=r=>r.distanceFrom(Ba),di=(r,t)=>Math.atan2(ke(r,t),Xa(r,t)),Qs=r=>di(Ul,r),_i=r=>r.eq(Ba)?r:r.scalarDivide(ui(r)),tn=(r,t=!0)=>_i(new b(-r.y,r.x).scalarMultiply(t?1:-1)),ke=(r,t)=>r.x*t.y-r.y*t.x,Xa=(r,t)=>r.x*t.x+r.y*t.y,fs=(r,t,e)=>{if(r.eq(t)||r.eq(e))return!0;let i=ke(t,e),s=ke(t,r),n=ke(e,r);return i>=0?s>=0&&n<=0:!(s<=0&&n>=0)},en="not-allowed";function $a(r){return et(r.originX)===et("center")&&et(r.originY)===et("center")}function Yn(r){return .5-et(r)}var vt=(r,t)=>r[t],rn=(r,t,e,i)=>({e:r,transform:t,pointer:new b(e,i)});function Ya(r,t,e){let i=e,s=Qs(Pr(Bt(r.getCenterPoint(),r.canvas.viewportTransform,void 0),i))+yt;return Math.round(s%yt/Ll)}function Ti({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,p){let f=u.getRelativeCenterPoint(),v=g!==void 0&&p!==void 0?u.translateToGivenOrigin(f,F,F,g,p):new b(u.left,u.top);return(u.angle?d.rotate(-X(u.angle),f):d).subtract(v)})(r,new b(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 ql=new RegExp(String.raw`[\0-\x1F\x7F;<>\\]|\/\*|\*\/|url\s*\(|expression\s*\(|(?:java|vb)script\s*:|data\s*:|@import\b`,"iu"),ki=r=>typeof r=="string"&&r.trim().length>0&&!ql.test(r),ne=(r,t="")=>{let e=Number(r);return Number.isFinite(e)?`${e}`:t},ae=(r,t="")=>typeof r=="string"&&ki(r)?r:t,gi=r=>r.replace(/\s+/g," "),Wn={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"},rs=(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),zn=(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]},Hn=(r="1")=>parseFloat(r)/(r.endsWith("%")?100:1),Vr=r=>Math.min(Math.round(r),255).toString(16).toUpperCase().padStart(2,"0"),Vn=([r,t,e,i=1])=>{let s=Math.round(.3*r+.59*t+.11*e);return[s,s,s,i]},ct=class U{constructor(t){if(m(this,"isUnrecognised",!1),t)if(t instanceof U)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 Wn&&(t=Wn[t]),t==="transparent"?[255,255,255,0]:U.sourceFromHex(t)||U.sourceFromRgb(t)||U.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]=zn(...this.getSource());return`hsl(${t},${e}%,${i}%)`}toHsla(){let[t,e,i,s]=zn(...this.getSource());return`hsla(${t},${e}%,${i}%,${s})`}toHex(){return this.toHexa().slice(0,6)}toHexa(){let[t,e,i,s]=this.getSource();return`${Vr(t)}${Vr(e)}${Vr(i)}${Vr(Math.round(255*s))}`}getAlpha(){return this.getSource()[3]}setAlpha(t){return this._source[3]=t,this}toGrayscale(){return this.setSource(Vn(this.getSource())),this}toBlackWhite(t){let[e,,,i]=Vn(this.getSource()),s=e<(t||127)?0:255;return this.setSource([s,s,s,i]),this}overlayWith(t){t instanceof U||(t=new U(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 U.fromRgba(t)}static fromRgba(t){return new U(U.sourceFromRgb(t))}static sourceFromRgb(t){let e=gi(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,Hn(e[4])]}}static fromHsl(t){return U.fromHsla(t)}static fromHsla(t){return new U(U.sourceFromHsl(t))}static sourceFromHsl(t){let e=gi(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=(U.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=rs(c,h,i+1/3),o=rs(c,h,i),l=rs(c,h,i-1/3)}return[Math.round(255*a),Math.round(255*o),Math.round(255*l),Hn(e[4])]}static fromHex(t){return new U(U.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")?Rt(i):e.includes("turn")?360*i:i}},Kl=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},tt=(r,t=16)=>{let e=/\D{0,2}$/.exec(r),i=parseFloat(r),s=I.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}},sn=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}},Er=(r,t,e=!0)=>{let i,s;if(t)if(t.toLive)i=`url(#SVGID_${P(t.id)})`;else{let n=String(t);if(ki(n)){let a=new ct(n),o=a.getAlpha();i=a.toRgb(),o!==1&&(s=o.toString())}else i=new ct("black").toRgb()}else i="none";return e?`${r}: ${i}; ${s?`${r}-opacity: ${s}; `:""}`:`${r}="${i}" ${s?`${r}-opacity="${s}" `:""}`},Wa=class{getSvgStyles(r){let t=this.fillRule==null?"nonzero":ae(this.fillRule),e=this.strokeWidth==null?"0":ne(this.strokeWidth),i=this.strokeDashArray==null?yi:this.strokeDashArray.every(d=>Number.isFinite(Number(d)))?this.strokeDashArray.join(" "):"",s=this.strokeDashOffset==null?"0":ne(this.strokeDashOffset),n=this.strokeLineCap==null?"butt":ae(this.strokeLineCap),a=this.strokeLineJoin==null?"miter":ae(this.strokeLineJoin),o=this.strokeMiterLimit==null?"4":ne(this.strokeMiterLimit),l=this.opacity==null?"1":ne(this.opacity),h=this.visible?"":" visibility: hidden;",c=r?"":this.getSvgFilter(),u=Er(st,this.fill);return[Er(kt,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="${Me(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=[],p=r.indexOf("COMMON_PARTS"),f;return o&&(o.clipPathId=`CLIPPATH_${Nt()}`,f=`<clipPath id="${o.clipPathId}" >
|
|
21
|
+
`)}loadFromJSON(t,e,{signal:i}={}){if(!t)return Promise.reject(new wt("`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([Me(s,{reviver:e,signal:i}),Fr({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=ht(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 Ns(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 Gs(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,p=this.viewportTransform,f=[g,0,0,g,(p[4]-(s||0))*t,(p[5]-(n||0))*t],v=this.enableRetinaScaling,y=ht({width:o,height:l}),x=a?this._objects.filter(S=>a(S)):this._objects;return this.enableRetinaScaling=!1,this.viewportTransform=f,this.width=o,this.height=l,this.skipControlsDrawing=!0,this.calcViewportBoundaries(),this.renderCanvas(y.getContext("2d"),x),this.viewportTransform=p,this.width=c,this.height=u,this.calcViewportBoundaries(),this.enableRetinaScaling=v,this.skipControlsDrawing=d,y}dispose(){return!this.disposed&&this.elements.cleanupDOM({width:this.width,height:this.height}),ci.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(Ie,"ownDefaults",zl);var Ul=["touchstart","touchmove","touchend"],Ra=r=>{let t=Aa(r.target),e=(function(i){let s=i.changedTouches;return s&&s[0]?s[0]:i})(r);return new b(e.clientX+t.left,e.clientY+t.top)},ui=r=>Ul.includes(r.type)||r.pointerType==="touch",zn=r=>{r.preventDefault(),r.stopPropagation()},_t=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}},ql=(r,t)=>{Ee(r,Y(nt(t),r.calcOwnMatrix()))},Ba=(r,t)=>Ee(r,Y(t,r.calcOwnMatrix())),Ee=(r,t)=>{let{translateX:e,translateY:i,scaleX:s,scaleY:n,...a}=ue(t),o=new b(e,i);r.flipX=!1,r.flipY=!1,Object.assign(r,a),r.set({scaleX:s,scaleY:n}),r.setPositionByOrigin(o,F,F)},Xa=r=>{r.scaleX=1,r.scaleY=1,r.skewX=0,r.skewY=0,r.flipX=!1,r.flipY=!1,r.rotate(0)},Qs=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=_t([new b(-i,-s),new b(i,-s),new b(-i,s),new b(i,s)].map(a=>a.transform(e)));return new b(n.width,n.height)},Ir=(r=it,t=it)=>Y(nt(t),r),Bt=(r,t=it,e=it)=>r.transform(Ir(t,e)),Ya=(r,t=it,e=it)=>r.transform(Ir(t,e),!0),tn=(r,t,e)=>{let i=Ir(t,e);return Ee(r,Y(i,r.calcOwnMatrix())),i},Kl={left:-.5,top:-.5,center:0,bottom:.5,right:.5},et=r=>typeof r=="string"?Kl[r]:r-.5,Jl=new b(1,0),$a=new b,en=(r,t)=>r.rotate(t),Er=(r,t)=>new b(t).subtract(r),di=r=>r.distanceFrom($a),gi=(r,t)=>Math.atan2(Oe(r,t),Wa(r,t)),rn=r=>gi(Jl,r),Ti=r=>r.eq($a)?r:r.scalarDivide(di(r)),sn=(r,t=!0)=>Ti(new b(-r.y,r.x).scalarMultiply(t?1:-1)),Oe=(r,t)=>r.x*t.y-r.y*t.x,Wa=(r,t)=>r.x*t.x+r.y*t.y,ys=(r,t,e)=>{if(r.eq(t)||r.eq(e))return!0;let i=Oe(t,e),s=Oe(t,r),n=Oe(e,r);return i>=0?s>=0&&n<=0:!(s<=0&&n>=0)},nn="not-allowed";function za(r){return et(r.originX)===et("center")&&et(r.originY)===et("center")}function Hn(r){return .5-et(r)}var vt=(r,t)=>r[t],an=(r,t,e,i)=>({e:r,transform:t,pointer:new b(e,i)});function Ha(r,t,e){let i=e,s=rn(Er(Bt(r.getCenterPoint(),r.canvas.viewportTransform,void 0),i))+yt;return Math.round(s%yt/Xl)}function ki({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,p){let f=u.getRelativeCenterPoint(),v=g!==void 0&&p!==void 0?u.translateToGivenOrigin(f,F,F,g,p):new b(u.left,u.top);return(u.angle?d.rotate(-X(u.angle),f):d).subtract(v)})(r,new b(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 Zl=new RegExp(String.raw`[\0-\x1F\x7F;<>\\]|\/\*|\*\/|url\s*\(|expression\s*\(|(?:java|vb)script\s*:|data\s*:|@import\b`,"iu"),Oi=r=>typeof r=="string"&&r.trim().length>0&&!Zl.test(r),ne=(r,t="")=>{let e=Number(r);return Number.isFinite(e)?`${e}`:t},ae=(r,t="")=>typeof r=="string"&&Oi(r)?r:t,pi=r=>r.replace(/\s+/g," "),Vn={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"},ns=(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),Nn=(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]},Gn=(r="1")=>parseFloat(r)/(r.endsWith("%")?100:1),Nr=r=>Math.min(Math.round(r),255).toString(16).toUpperCase().padStart(2,"0"),Un=([r,t,e,i=1])=>{let s=Math.round(.3*r+.59*t+.11*e);return[s,s,s,i]},ct=class U{constructor(t){if(m(this,"isUnrecognised",!1),t)if(t instanceof U)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 Vn&&(t=Vn[t]),t==="transparent"?[255,255,255,0]:U.sourceFromHex(t)||U.sourceFromRgb(t)||U.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]=Nn(...this.getSource());return`hsl(${t},${e}%,${i}%)`}toHsla(){let[t,e,i,s]=Nn(...this.getSource());return`hsla(${t},${e}%,${i}%,${s})`}toHex(){return this.toHexa().slice(0,6)}toHexa(){let[t,e,i,s]=this.getSource();return`${Nr(t)}${Nr(e)}${Nr(i)}${Nr(Math.round(255*s))}`}getAlpha(){return this.getSource()[3]}setAlpha(t){return this._source[3]=t,this}toGrayscale(){return this.setSource(Un(this.getSource())),this}toBlackWhite(t){let[e,,,i]=Un(this.getSource()),s=e<(t||127)?0:255;return this.setSource([s,s,s,i]),this}overlayWith(t){t instanceof U||(t=new U(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 U.fromRgba(t)}static fromRgba(t){return new U(U.sourceFromRgb(t))}static sourceFromRgb(t){let e=pi(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,Gn(e[4])]}}static fromHsl(t){return U.fromHsla(t)}static fromHsla(t){return new U(U.sourceFromHsl(t))}static sourceFromHsl(t){let e=pi(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=(U.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=ns(c,h,i+1/3),o=ns(c,h,i),l=ns(c,h,i-1/3)}return[Math.round(255*a),Math.round(255*o),Math.round(255*l),Gn(e[4])]}static fromHex(t){return new U(U.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")?Rt(i):e.includes("turn")?360*i:i}},Ql=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},tt=(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}},on=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}},Dr=(r,t,e=!0)=>{let i,s;if(t)if(t.toLive)i=`url(#SVGID_${P(t.id)})`;else{let n=String(t);if(Oi(n)){let a=new ct(n),o=a.getAlpha();i=a.toRgb(),o!==1&&(s=o.toString())}else i=new ct("black").toRgb()}else i="none";return e?`${r}: ${i}; ${s?`${r}-opacity: ${s}; `:""}`:`${r}="${i}" ${s?`${r}-opacity="${s}" `:""}`},Va=class{getSvgStyles(r){let t=this.fillRule==null?"nonzero":ae(this.fillRule),e=this.strokeWidth==null?"0":ne(this.strokeWidth),i=this.strokeDashArray==null?bi:this.strokeDashArray.every(d=>Number.isFinite(Number(d)))?this.strokeDashArray.join(" "):"",s=this.strokeDashOffset==null?"0":ne(this.strokeDashOffset),n=this.strokeLineCap==null?"butt":ae(this.strokeLineCap),a=this.strokeLineJoin==null?"miter":ae(this.strokeLineJoin),o=this.strokeMiterLimit==null?"4":ne(this.strokeMiterLimit),l=this.opacity==null?"1":ne(this.opacity),h=this.visible?"":" visibility: hidden;",c=r?"":this.getSvgFilter(),u=Dr(st,this.fill);return[Dr(kt,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="${Pe(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=[],p=r.indexOf("COMMON_PARTS"),f;return o&&(o.clipPathId=`CLIPPATH_${Nt()}`,f=`<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[p]=[n,l,t?"":this.addPaintOrder()," ",s?`transform="${s}" `:""].join(""),dt(u)&&g.push(u.toSVG(this)),dt(c)&&g.push(c.toSVG(this)),d&&g.push(d.toSVG(this)),o&&g.push(f),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
|
|
27
|
+
`),e?e(g.join("")):g.join("")}addPaintOrder(){return this.paintFirst==="fill"?"":` paint-order="${P(this.paintFirst)}" `}};function Mi(r){return RegExp("^("+r.join("|")+")\\b","i")}var De="textDecorationThickness",Pi="textDecorationColor",Na=["fontSize","fontWeight","fontFamily","fontStyle"],Ga=["underline","overline","linethrough"],Ua=[...Na,"lineHeight","text","charSpacing","textAlign","styles","path","pathStartOffset","pathSide","pathAlign"],qa=[...Ua,...Ga,"textBackgroundColor","direction",De,Pi],th=[...Na,...Ga,kt,"strokeWidth",st,"deltaY","textBackgroundColor",De,Pi],eh={_reNewline:Hs,_reSpacesAndTabs:/[ \t\r]/g,_reSpaceAndTab:/[ \t\r]/,_reWords:/\S+/g,fontSize:40,fontWeight:Xn,fontFamily:"Times New Roman",underline:!1,overline:!1,linethrough:!1,textAlign:z,fontStyle:Xn,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,[De]:66.667},ln="justify",ft=String.raw`[-+]?(?:\d*\.\d+|\d+\.?)(?:[eE][-+]?\d+)?`,as=String.raw`(?:\s*,?\s+|\s*,\s*)`,bs="http://www.w3.org/2000/svg",rh=RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+ft+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+ft+"))?\\s+(.*)"),ih={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":De,"text-decoration-color":Pi},qn="font-size",Kn="clip-path",sh=Mi(["path","circle","polygon","polyline","ellipse","rect","line","image","text"]),nh=Mi(["symbol","image","marker","pattern","view","svg"]),Jn=Mi(["symbol","g","a","svg","clipPath","defs"]),Zn=new RegExp(String.raw`^\s*(${ft})${as}(${ft})${as}(${ft})${as}(${ft})\s*$`),Qn="(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?",ta=RegExp("(?:\\s|^)"+Qn+Qn+"("+ft+"?(?:px)?)?(?:\\s?|$)(?:$|\\s)"),he=class si{constructor(t={}){let e=typeof t=="string"?si.parseShadow(t):t;Object.assign(this,si.ownDefaults,e),this.id=Nt()}static parseShadow(t){let e=t.trim(),[,i=0,s=0,n=0]=(ta.exec(e)||[]).map(a=>parseFloat(a)||0);return{color:(e.replace(ta,"")||"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=en(new b(this.offsetX,this.offsetY),X(-t.angle)),i=L.NUM_FRACTION_DIGITS,s=new ct(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,44 +34,44 @@ ${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=ii.ownDefaults;return this.includeDefaultValues?t:qs(t,(i,s)=>i!==e[s])}static async fromObject(t){return new this(t)}};m(he,"ownDefaults",{color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1}),m(he,"type","shadow"),_.setClass(he,"shadow");var de=(r,t,e)=>Math.max(r,Math.min(t,e)),ih=["top",z,Ut,qt,"flipX","flipY","originX","originY","angle","opacity","globalCompositeOperation","shadow","visible",Ae,je],Xt=[st,kt,"strokeWidth","strokeDashArray","width","height","paintFirst","strokeUniform","strokeLineCap","strokeDashOffset","strokeLineJoin","strokeMiterLimit","backgroundColor","clipPath"],sh={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:st,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},nh=Ar({defaultEasing:()=>Ua,easeInBack:()=>Oh,easeInBounce:()=>qa,easeInCirc:()=>wh,easeInCubic:()=>ah,easeInElastic:()=>_h,easeInExpo:()=>yh,easeInOutBack:()=>Ph,easeInOutBounce:()=>Eh,easeInOutCirc:()=>Sh,easeInOutCubic:()=>lh,easeInOutElastic:()=>kh,easeInOutExpo:()=>xh,easeInOutQuad:()=>jh,easeInOutQuart:()=>uh,easeInOutQuint:()=>ph,easeInOutSine:()=>vh,easeInQuad:()=>Dh,easeInQuart:()=>hh,easeInQuint:()=>dh,easeInSine:()=>fh,easeOutBack:()=>Mh,easeOutBounce:()=>on,easeOutCirc:()=>Ch,easeOutCubic:()=>oh,easeOutElastic:()=>Th,easeOutExpo:()=>bh,easeOutQuad:()=>Ah,easeOutQuart:()=>ch,easeOutQuint:()=>gh,easeOutSine:()=>mh}),an=(r,t,e,i)=>(r<Math.abs(t)?(r=t,i=e/4):i=t===0&&r===0?e/yt*Math.asin(1):e/yt*Math.asin(t/r),{a:r,c:t,p:e,s:i}),Ga=(r,t,e,i,s)=>r*2**(10*--i)*Math.sin((i*s-t)*yt/e),Ua=(r,t,e,i)=>-e*Math.cos(r/i*Gt)+e+t,ah=(r,t,e,i)=>e*(r/i)**3+t,oh=(r,t,e,i)=>e*((r/i-1)**3+1)+t,lh=(r,t,e,i)=>(r/=i/2)<1?e/2*r**3+t:e/2*((r-2)**3+2)+t,hh=(r,t,e,i)=>e*(r/=i)*r**3+t,ch=(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,dh=(r,t,e,i)=>e*(r/i)**5+t,gh=(r,t,e,i)=>e*((r/i-1)**5+1)+t,ph=(r,t,e,i)=>(r/=i/2)<1?e/2*r**5+t:e/2*((r-2)**5+2)+t,fh=(r,t,e,i)=>-e*Math.cos(r/i*Gt)+e+t,mh=(r,t,e,i)=>e*Math.sin(r/i*Gt)+t,vh=(r,t,e,i)=>-e/2*(Math.cos(Math.PI*r/i)-1)+t,yh=(r,t,e,i)=>r===0?t:e*2**(10*(r/i-1))+t,bh=(r,t,e,i)=>r===i?t+e:e*-(2**(-10*r/i)+1)+t,xh=(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,wh=(r,t,e,i)=>-e*(Math.sqrt(1-(r/=i)*r)-1)+t,Ch=(r,t,e,i)=>e*Math.sqrt(1-(r=r/i-1)*r)+t,Sh=(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,_h=(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}=an(s,e,n,1.70158);return-Ga(a,o,l,r,i)+t},Th=(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}=an(s,e,n,1.70158);return a*2**(-10*r)*Math.sin((r*i-o)*yt/l)+h+t},kh=(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}=an(s,e,n,1.70158);return r<1?-.5*Ga(a,o,l,r,i)+t:a*2**(-10*--r)*Math.sin((r*i-o)*yt/l)*.5+h+t},Oh=(r,t,e,i,s=1.70158)=>e*(r/=i)*r*((s+1)*r-s)+t,Mh=(r,t,e,i,s=1.70158)=>e*((r=r/i-1)*r*((s+1)*r+s)+1)+t,Ph=(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,on=(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,qa=(r,t,e,i)=>e-on(i-r,0,e,i)+t,Eh=(r,t,e,i)=>r<i/2?.5*qa(2*r,0,e,i)+t:.5*on(2*r-i,0,e,i)+.5*e+t,Dh=(r,t,e,i)=>e*(r/=i)*r+t,Ah=(r,t,e,i)=>-e*(r/=i)*(r-2)+t,jh=(r,t,e,i)=>(r/=i/2)<1?e/2*r**2+t:-e/2*(--r*(r-2)-1)+t,Ih=()=>!1,ln=class{constructor({startValue:r,byValue:t,duration:e=500,delay:i=0,easing:s=Ua,onStart:n=ei,onChange:a=ei,onComplete:o=ei,abort:l=Ih,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=ce().setTimeout(()=>Tr(r),this.delay):Tr(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),Tr(this.tick)))}register(){hi.push(this)}unregister(){hi.remove(this)}abort(){this._state="aborted",this.unregister(),this.timeout&&ce().clearTimeout(this.timeout)}},Fh=class extends ln{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)}}},Lh=class extends ln{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])}}},Rh=(r,t,e,i)=>t+e*(1-Math.cos(r/i*Gt)),ss=r=>r&&((t,e,i)=>r(new ct(t).toRgba(),e,i)),Bh=class extends ln{constructor({startValue:r,endValue:t,easing:e=Rh,onChange:i,onComplete:s,abort:n,...a}){let o=new ct(r).getSource(),l=new ct(t).getSource();super({...a,startValue:o,byValue:l.map((h,c)=>h-o[c]),easing:e,onChange:ss(i),onComplete:ss(s),abort:ss(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),de(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 hn(r){let t=(e=>Array.isArray(e.startValue)||Array.isArray(e.endValue))(r)?new Lh(r):new Fh(r);return t.start(),t}function Ka(r){let t=new Bh(r);return t.start(),t}var Or=class H{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=Pr(e,i),a=Pr(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 b(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,p=o*d-l*u,f=c*o-h*l;if(f!==0){let v=g/f,y=p/f;return(n||0<=v&&v<=1)&&(a||0<=y&&y<=1)?new H("Intersection").append(new b(t.x+v*o,t.y+v*l)):new H}return new H(g===0||p===0?n||a||H.isPointContained(t,i,s)||H.isPointContained(e,i,s)||H.isPointContained(i,t,e)||H.isPointContained(s,t,e)?"Coincident":void 0:"Parallel")}static intersectSegmentLine(t,e,i,s){return H.intersectLineLine(t,e,i,s,!1,!0)}static intersectSegmentSegment(t,e,i,s){return H.intersectLineLine(t,e,i,s,!1,!1)}static intersectLinePolygon(t,e,i,s=!0){let n=new H,a=i.length;for(let o,l,h,c=0;c<a;c++){if(o=i[c],l=i[(c+1)%a],h=H.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 H.intersectLinePolygon(t,e,i,!1)}static intersectPolygonPolygon(t,e){let i=new H,s=t.length,n=[];for(let a=0;a<s;a++){let o=t[a],l=t[(a+1)%s],h=H.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 H("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 b(n.x,s.y),o=new b(s.x,n.y);return H.intersectPolygonPolygon(t,[s,a,n,o])}},Xh=class extends Ca{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?q(r,this.group.calcTransformMatrix()):r}setXY(r,t,e){this.group&&(r=q(r,nt(this.group.calcTransformMatrix()))),this.setRelativeXY(r,t,e)}getRelativeXY(){return new b(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=>q(a,n))}return s}intersectsWithRect(r,t){return Or.intersectPolygonRectangle(this.getCoords(),r,t).status==="Intersection"}intersectsWithObject(r){let t=Or.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 Or.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 _t(this.getCoords())}getScaledWidth(){return this._getTransformedDimensions().x}getScaledHeight(){return this._getTransformedDimensions().y}scale(r){this._set(Ut,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?Rt(Vs(this.calcTransformMatrix())):this.angle}getViewportTransform(){var r;return((r=this.canvas)==null?void 0:r.viewportTransform)||it.concat()}calcACoords(){let r=ge({angle:this.angle}),{x:t,y:e}=this.getRelativeCenterPoint(),i=$(Ie(t,e),r),s=this._getTransformedDimensions(),n=s.x/2,a=s.y/2;return{tl:q({x:-n,y:-a},i),tr:q({x:n,y:-a},i),bl:q({x:-n,y:a},i),br:q({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,et(this.originX),et(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=$(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=Ma({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 b(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 b(Ns(e),ka(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 b(n*t.scaleX,a*t.scaleY):Si(n,a,jr(t)),o.scalarAdd(s)}translateToGivenOrigin(r,t,e,i,s){let n=r.x,a=r.y,o=et(i)-et(t),l=et(s)-et(e);if(o||l){let h=this._getTransformedDimensions();n+=o*h.x,a+=l*h.y}return new b(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?q(r,this.group.calcTransformMatrix()):r}getRelativeCenterPoint(){return this.translateToCenterPoint(new b(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")}},At=class si extends Xh{static getDefaults(){return si.ownDefaults}get type(){let t=this.constructor.type;return t==="FabricObject"?"object":t.toLowerCase()}set type(t){Lt("warn","Setting type has no effect",t)}constructor(t){super(),m(this,"_cacheContext",null),Object.assign(this,si.ownDefaults),this.setOptions(t)}_createCacheCanvas(){this._cacheCanvas=Ot(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0}_limitCacheSize(t){let e=t.width,i=t.height,s=I.maxCacheSideLimit,n=I.minCacheSideLimit;if(e<=s&&i<=s&&e*i<=I.perfLimitSizeTotal)return e<n&&(t.width=n),i<n&&(t.height=n),t;let a=e/i,[o,l]=_r.limitDimsByArea(a),h=de(n,o,s),c=de(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 b(Math.abs(this.scaleX),Math.abs(this.scaleY));let t=ue(this.calcTransformMatrix());return new b(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 he||(e=new he(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=ht(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=nt(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,dt(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&&(dt(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||it,o=n*s,l=a*s,h=e.nonScaling?new b(1,1):this.getObjectScaling();t.shadowColor=e.color,t.shadowBlur=e.blur*I.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(!dt(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=ht({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 b(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=Ks(this),i=this.group,s=this.shadow,n=Math.abs,a=t.enableRetinaScaling?da():1,o=(t.multiplier||1)*a,l=t.canvasProvider||(x=>new Fe(x,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1}));delete this.group,t.withoutTransform&&La(this),t.withoutShadow&&(this.shadow=null),t.viewportTransform&&Js(this,this.getViewportTransform()),this.setCoords();let h=Ot(),c=this.getBoundingRect(),u=this.shadow,d=new b;if(u){let x=u.blur,w=u.nonScaling?new b(1,1):this.getObjectScaling();d.x=2*Math.round(n(u.offsetX)+x)*n(w.x),d.y=2*Math.round(n(u.offsetY)+x)*n(w.y)}let g=c.width+d.x,p=c.height+d.y;h.width=Math.ceil(g),h.height=Math.ceil(p);let f=l(h);t.format==="jpeg"&&(f.backgroundColor="#fff"),this.setPositionByOrigin(new b(f.width/2,f.height/2),F,F);let v=this.canvas;f._objects=[this],this.set("canvas",f),this.setCoords();let y=f.toCanvasElement(o||1,t);return this.set("canvas",v),this.shadow=s,i&&(this.group=i),this.set(e),this.setCoords(),f._objects=[],f.destroy(),y}toDataURL(t={}){return zs(this.toCanvasElement(t),t.format||"png",t.quality||1)}toBlob(t={}){return Hs(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(){hi.cancelByTarget(this),this.off(),this._set("canvas",void 0),this._cacheCanvas&&Tt().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((p,f,v)=>(v===s.length-1&&(p[f]=u),p[f]),this),l&&l(u,d,g)},onComplete:(u,d,g)=>{this.setCoords(),h&&h(u,d,g)}};return n?Ka(c):hn(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(si.customProperties,this.constructor.customProperties||[]),i,s=I.NUM_FRACTION_DIGITS,{clipPath:n,fill:a,stroke:o,shadow:l,strokeDashArray:h,left:c,top:u,originX:d,originY:g,width:p,height:f,strokeWidth:v,strokeLineCap:y,strokeDashOffset:x,strokeLineJoin:w,strokeUniform:S,strokeMiterLimit:C,scaleX:O,scaleY:T,angle:k,flipX:M,flipY:A,opacity:E,visible:D,backgroundColor:j,fillRule:B,paintFirst:G,globalCompositeOperation:Y,skewX:Z,skewY:at}=this;n&&!n.excludeFromExport&&(i=n.toObject(e.concat("inverted","absolutePositioned")));let L=Je=>R(Je,s),wt={...pe(this,e),type:this.constructor.type,version:gs,originX:d,originY:g,left:L(c),top:L(u),width:L(p),height:L(f),fill:Rn(a)?a.toObject():a,stroke:Rn(o)?o.toObject():o,strokeWidth:L(v),strokeDashArray:h&&h.concat(),strokeLineCap:y,strokeDashOffset:x,strokeLineJoin:w,strokeUniform:S,strokeMiterLimit:L(C),scaleX:L(O),scaleY:L(T),angle:L(k),flipX:M,flipY:A,opacity:L(E),shadow:l&&l.toObject(),visible:D,backgroundColor:j,fillRule:B,paintFirst:G,globalCompositeOperation:Y,skewX:L(Z),skewY:L(at),...i?{clipPath:i}:null};return this.includeDefaultValues?wt:this._removeDefaultValues(wt)}toDatalessObject(t){return this.toObject(t)}_removeDefaultValues(t){let e=this.constructor.getDefaults(),i=Object.keys(e).length>0?e:Object.getPrototypeOf(this);return qs(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 Ir(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(At,"stateProperties",ih),m(At,"cacheProperties",Xt),m(At,"ownDefaults",sh),m(At,"type","FabricObject"),m(At,"colorProperties",[st,kt,"backgroundColor"]),m(At,"customProperties",[]),_.setClass(At),_.setClass(At,"object");var cn=(r,t)=>{var e;let{transform:{target:i}}=t;(e=i.canvas)==null||e.fire(`object:${r}`,{...t,target:i}),i.fire(r,t)},$t=(r,t,e)=>(i,s,n,a)=>{let o=t(i,s,n,a);return o&&cn(r,{...rn(i,s,n,a),...e}),o};function Kt(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 Ja=(r,t,e,i)=>(s,n,a,o)=>{let l=Ti(n,n.originX,n.originY,a,o)[e],h=et(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=$a(n)?2:1,g=c[r],p=Math.abs(l*d/c[i])-u;return c.set(r,Math.max(p,1)),g!==c[r]}return!1},Za=Ja("width","originX","x","scaleX"),Qa=Ja("height","originY","y","scaleY"),vs=$t(Mr,Kt(Za)),$h=$t(Mr,Kt(Qa));function to(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,yt,!1),r[l](),n&&r.stroke(),r.restore()}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/2,c=o/2;r[`${l}Rect`](-h,-c,a,o),n&&r.strokeRect(-h,-c,a,o),r.restore()}var lt=class{constructor(r){m(this,"visible",!0),m(this,"actionName",ba),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 b(.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)&&Or.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 b(this.x*r.x+this.offsetX,this.y*r.y+this.offsetY).transform(t)}calcCornerCoords(r,t,e,i,s,n){let a=xi([Ie(e,i),ge({angle:r}),wi((s?this.touchSizeX:this.sizeX)||t,(s?this.touchSizeY:this.sizeY)||t)]);return{tl:new b(-.5,-.5).transform(a),tr:new b(.5,-.5).transform(a),br:new b(.5,.5).transform(a),bl:new b(-.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?kt:st,p=l||i.cornerStrokeColor,f=!d&&!!p;return r.fillStyle=a||i.cornerColor||"",r.strokeStyle=p||"",r.translate(t,e),r.rotate(X(i.getTotalAngle())),{stroke:f,xSize:c,ySize:u,transparentCorners:d,opName:g}}render(r,t,e,i,s){((i=i||{}).cornerStyle||s.cornerStyle)==="circle"?to.call(this,r,t,e,i,s):eo.call(this,r,t,e,i,s)}},ro=(r,t,e)=>e.lockRotation?en:t.cursorStyle,io=$t(fa,Kt((r,{target:t,ex:e,ey:i,theta:s,originX:n,originY:a},o,l)=>{let h=t.getPositionByOrigin(n,a);if(vt(t,"lockRotation"))return!1;let c=Math.atan2(i-h.y,e-h.x),u=Rt(Math.atan2(l-h.y,o-h.x)-c+s);if(t.snapAngle&&t.snapAngle>0){let g=t.snapAngle,p=t.snapThreshold||g,f=Math.ceil(u/g)*g,v=Math.floor(u/g)*g;Math.abs(u-v)<p?u=v:Math.abs(u-f)<p&&(u=f)}u<0&&(u=360+u),u%=360;let d=t.angle!==u;return t.angle=u,d}));function so(r,t){let e=t.canvas,i=r[e.uniScaleKey];return e.uniformScaling&&!i||!e.uniformScaling&&i}function no(r,t,e){let i=vt(r,"lockScalingX"),s=vt(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 Yh=["e","se","s","sw","w","nw","n","ne","e"],Ce=(r,t,e,i)=>{let s=so(r,e);return no(e,t.x!==0&&t.y===0?"x":t.x===0&&t.y!==0?"y":"",s)?en:`${Yh[Ya(e,0,i)]}-resize`};function un(r,t,e,i,s={}){let n=t.target,a=s.by,o=so(r,n),l,h,c,u,d,g;if(no(n,a,o))return!1;if(t.gestureScale)h=t.scaleX*t.gestureScale,c=t.scaleY*t.gestureScale;else{if(l=Ti(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),vt(n,"lockScalingFlip")&&(t.signX!==d||t.signY!==g))return!1;if(u=n._getTransformedDimensions(),o&&!a){let v=Math.abs(l.x)+Math.abs(l.y),{original:y}=t,x=v/(Math.abs(u.x*y.scaleX/n.scaleX)+Math.abs(u.y*y.scaleY/n.scaleY));h=y.scaleX*x,c=y.scaleY*x}else h=Math.abs(l.x*n.scaleX/u.x),c=Math.abs(l.y*n.scaleY/u.y);$a(t)&&(h*=2,c*=2),t.signX!==d&&a!=="y"&&(t.originX=Yn(t.originX),h*=-1,t.signX=d),t.signY!==g&&a!=="x"&&(t.originY=Yn(t.originY),c*=-1,t.signY=g)}let p=n.scaleX,f=n.scaleY;return a?(a==="x"&&n.set("scaleX",h),a==="y"&&n.set("scaleY",c)):(!vt(n,"lockScalingX")&&n.set("scaleX",h),!vt(n,"lockScalingY")&&n.set("scaleY",c)),p!==n.scaleX||f!==n.scaleY}var sr=$t(bi,Kt((r,t,e,i)=>un(r,t,e,i))),ao=$t(bi,Kt((r,t,e,i)=>un(r,t,e,i,{by:"x"}))),oo=$t(bi,Kt((r,t,e,i)=>un(r,t,e,i,{by:"y"}))),ns={x:{counterAxis:"y",scale:Ut,skew:Ae,lockSkewing:"lockSkewingX",origin:"originX",flip:"flipX"},y:{counterAxis:"x",scale:qt,skew:je,lockSkewing:"lockSkewingY",origin:"originY",flip:"flipY"}},Wh=["ns","nesw","ew","nwse"],lo=(r,t,e,i)=>t.x!==0&&vt(e,"lockSkewingY")||t.y!==0&&vt(e,"lockSkewingX")?en:`${Wh[Ya(e,0,i)%4]}-resize`;function ho(r,t,e,i,s){let{target:n}=e,{counterAxis:a,origin:o,lockSkewing:l,skew:h,flip:c}=ns[r];if(vt(n,l))return!1;let{origin:u,flip:d}=ns[a],g=et(e[u])*(n[d]?-1:1),p=-Math.sign(g)*(n[c]?-1:1),f=-(n[h]===0&&Ti(e,"center","center",i,s)[r]>0||n[h]>0?1:-1)*p*.5+.5;return $t(va,Kt((v,y,x,w)=>(function(S,{target:C,ex:O,ey:T,skewingSide:k,...M},A){let{skew:E}=ns[S],D=A.subtract(new b(O,T)).divide(new b(C.scaleX,C.scaleY))[S],j=C[E],B=M[E],G=Math.tan(X(B)),Y=S==="y"?C._getTransformedDimensions({scaleX:1,scaleY:1,skewX:0}).x:C._getTransformedDimensions({scaleX:1,scaleY:1}).y,Z=2*D*k/Math.max(Y,1)+G,at=Rt(Math.atan(Z));C.set(E,at);let L=j!==C[E];if(L&&S==="y"){let{skewX:wt,scaleX:Je}=C,Ze=C._getTransformedDimensions({skewY:j}),Wt=C._getTransformedDimensions(),Qe=wt===0?1:Ze.x/Wt.x;Qe!==1&&C.set("scaleX",Qe*Je)}return L})(r,y,new b(x,w))))(t,{...e,[o]:f,skewingSide:p},i,s)}var co=(r,t,e,i)=>ho("x",r,t,e,i),uo=(r,t,e,i)=>ho("y",r,t,e,i);function Pi(r,t){return r[t.canvas.altActionKey]}var nr=(r,t,e)=>{let i=Pi(r,e);return t.x===0?i?Ae:qt:t.y===0?i?je:Ut:""},oe=(r,t,e,i)=>Pi(r,e)?lo(0,t,e,i):Ce(r,t,e,i),ys=(r,t,e,i)=>Pi(r,t.target)?uo(r,t,e,i):ao(r,t,e,i),bs=(r,t,e,i)=>Pi(r,t.target)?co(r,t,e,i):oo(r,t,e,i),dn=()=>({ml:new lt({x:-.5,y:0,cursorStyleHandler:oe,actionHandler:ys,getActionName:nr}),mr:new lt({x:.5,y:0,cursorStyleHandler:oe,actionHandler:ys,getActionName:nr}),mb:new lt({x:0,y:.5,cursorStyleHandler:oe,actionHandler:bs,getActionName:nr}),mt:new lt({x:0,y:-.5,cursorStyleHandler:oe,actionHandler:bs,getActionName:nr}),tl:new lt({x:-.5,y:-.5,cursorStyleHandler:Ce,actionHandler:sr}),tr:new lt({x:.5,y:-.5,cursorStyleHandler:Ce,actionHandler:sr}),bl:new lt({x:-.5,y:.5,cursorStyleHandler:Ce,actionHandler:sr}),br:new lt({x:.5,y:.5,cursorStyleHandler:Ce,actionHandler:sr}),mtr:new lt({x:0,y:-.5,actionHandler:io,cursorStyleHandler:ro,offsetY:-40,withConnection:!0,actionName:ma})}),go=()=>({mr:new lt({x:.5,y:0,actionHandler:vs,cursorStyleHandler:oe,actionName:Mr}),ml:new lt({x:-.5,y:0,actionHandler:vs,cursorStyleHandler:oe,actionName:Mr})}),po=()=>({...dn(),...go()}),fo=class xs extends At{static getDefaults(){return{...super.getDefaults(),...xs.ownDefaults}}constructor(t){super(),Object.assign(this,this.constructor.createControls(),xs.ownDefaults),this.setOptions(t)}static createControls(){return{controls:dn()}}_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=Ns(t),i=ka(t),s=this.getCenterPoint(),n=$($(t,$(Ie(s.x,s.y),ge({angle:this.getTotalAngle()-(this.group&&this.flipX?180:0)}))),[1/e,0,0,1/i,0,0]),a=this.group?ue(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=ue($(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=Vs(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=Si(this.width,this.height,jr(e)),a=this.isStrokeAccountedForInDimensions()?Ws:(this.strokeUniform?new b().scalarAdd(this.canvas?this.canvas.getZoom():1):new b(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 mo(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(fo,"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 K=class extends fo{};mo(K,[Wa]),_.setClass(K),_.setClass(K,"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},yo=class{constructor(r){this.options=r,this.strokeProjectionMagnitude=this.options.strokeWidth/2,this.scale=new b(this.options.scaleX,this.options.scaleY),this.strokeUniformScalar=this.options.strokeUniform?new b(1/this.options.scaleX,1/this.options.scaleY):new b(1,1)}createSideVector(r,t){let e=Pr(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 b(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)}},zh=new b,bo=class ni extends yo{static getOrthogonalRotationFactor(t,e){let i=e?di(t,e):Qs(t);return Math.abs(i)<Gt?-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 b(t),this.B=new b(e),this.C=new b(i),this.AB=this.createSideVector(this.A,this.B),this.AC=this.createSideVector(this.A,this.C),this.alpha=di(this.AB,this.AC),this.bisector=_i(Zs(this.AB.eq(zh)?this.AC:this.AB,this.alpha/2))}calcOrthogonalProjection(t,e,i=this.strokeProjectionMagnitude){let s=tn(this.createSideVector(t,e)),n=ni.getOrthogonalRotationFactor(s,this.bisector);return this.scaleUnitVector(s,i*n)}projectBevel(){let t=[];return(this.alpha%yt===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?ui(this.scaleUnitVector(this.bisector,this.options.strokeMiterLimit)):this.options.strokeMiterLimit;return ui(s)/this.strokeProjectionMagnitude<=n&&t.push(this.applySkew(this.A.add(s))),t.push(...this.projectBevel()),t}projectRoundNoSkew(t,e){let i=[],s=new b(ni.getOrthogonalRotationFactor(this.bisector),ni.getOrthogonalRotationFactor(new b(this.bisector.y,this.bisector.x)));return[new b(1,0).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(s),new b(0,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(s)].forEach(n=>{fs(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 b(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 b(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),p=new b(g,Math.sqrt(Math.max(c**2-g**2,0)));return[p,p.scalarMultiply(-1),d,d.scalarMultiply(-1)].map(f=>this.applySkew(l?f.multiply(this.strokeUniformScalar):f)).forEach(f=>{fs(f,t,e)&&i.push(this.applySkew(this.A).add(f))}),i}projectRound(){let t=[];t.push(...this.projectBevel());let e=this.alpha%yt===0,i=this.applySkew(this.A),s=t[e?0:2].subtract(i),n=t[+!!e].subtract(i),a=ke(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}))}},Zn=class extends yo{constructor(r,t,e){super(e),this.A=new b(r),this.T=new b(t)}calcOrthogonalProjection(r,t,e=this.strokeProjectionMagnitude){let i=this.createSideVector(r,t);return this.scaleUnitVector(tn(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 b(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 bo(this.A,this.T,this.T,this.options).projectRound());return r}projectSquare(){let r=[];if(this.A.eq(this.T)){let t=new b(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(_i(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}))}},xo=(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 b(a)),n),[new b(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 Zn(n,n,t).project()):!e||a!==0&&a!==o.length-1?i.push(...new bo(n,l,h,t).project()):i.push(...new Zn(n,a===0?h:l,t).project())}),i},gn=r=>{let t={};return Object.keys(r).forEach(e=>{t[e]={},Object.keys(r[e]).forEach(i=>{t[e][i]={...r[e][i]}})}),t},Ei=(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),wo=(r,t)=>{let e=t.split(`
|
|
38
|
-
`),i=[],s=-1,n={};r=
|
|
39
|
-
`]}static async fromElement(t,e,i){let{left:s=0,top:n=0,width:a=0,height:o=0,visible:l=!0,...h}
|
|
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=si.ownDefaults;return this.includeDefaultValues?t:Zs(t,(i,s)=>i!==e[s])}static async fromObject(t){return new this(t)}};m(he,"ownDefaults",{color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1}),m(he,"type","shadow"),_.setClass(he,"shadow");var de=(r,t,e)=>Math.max(r,Math.min(t,e)),ah=["top",z,Ut,qt,"flipX","flipY","originX","originY","angle","opacity","globalCompositeOperation","shadow","visible",je,Le],Xt=[st,kt,"strokeWidth","strokeDashArray","width","height","paintFirst","strokeUniform","strokeLineCap","strokeDashOffset","strokeLineJoin","strokeMiterLimit","backgroundColor","clipPath"],oh={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:st,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},lh=jr({defaultEasing:()=>Ja,easeInBack:()=>Eh,easeInBounce:()=>Za,easeInCirc:()=>_h,easeInCubic:()=>hh,easeInElastic:()=>Oh,easeInExpo:()=>Sh,easeInOutBack:()=>Ah,easeInOutBounce:()=>jh,easeInOutCirc:()=>kh,easeInOutCubic:()=>uh,easeInOutElastic:()=>Ph,easeInOutExpo:()=>wh,easeInOutQuad:()=>Ih,easeInOutQuart:()=>ph,easeInOutQuint:()=>vh,easeInOutSine:()=>xh,easeInQuad:()=>Lh,easeInQuart:()=>dh,easeInQuint:()=>fh,easeInSine:()=>yh,easeOutBack:()=>Dh,easeOutBounce:()=>cn,easeOutCirc:()=>Th,easeOutCubic:()=>ch,easeOutElastic:()=>Mh,easeOutExpo:()=>Ch,easeOutQuad:()=>Fh,easeOutQuart:()=>gh,easeOutQuint:()=>mh,easeOutSine:()=>bh}),hn=(r,t,e,i)=>(r<Math.abs(t)?(r=t,i=e/4):i=t===0&&r===0?e/yt*Math.asin(1):e/yt*Math.asin(t/r),{a:r,c:t,p:e,s:i}),Ka=(r,t,e,i,s)=>r*2**(10*--i)*Math.sin((i*s-t)*yt/e),Ja=(r,t,e,i)=>-e*Math.cos(r/i*Gt)+e+t,hh=(r,t,e,i)=>e*(r/i)**3+t,ch=(r,t,e,i)=>e*((r/i-1)**3+1)+t,uh=(r,t,e,i)=>(r/=i/2)<1?e/2*r**3+t:e/2*((r-2)**3+2)+t,dh=(r,t,e,i)=>e*(r/=i)*r**3+t,gh=(r,t,e,i)=>-e*((r=r/i-1)*r**3-1)+t,ph=(r,t,e,i)=>(r/=i/2)<1?e/2*r**4+t:-e/2*((r-=2)*r**3-2)+t,fh=(r,t,e,i)=>e*(r/i)**5+t,mh=(r,t,e,i)=>e*((r/i-1)**5+1)+t,vh=(r,t,e,i)=>(r/=i/2)<1?e/2*r**5+t:e/2*((r-2)**5+2)+t,yh=(r,t,e,i)=>-e*Math.cos(r/i*Gt)+e+t,bh=(r,t,e,i)=>e*Math.sin(r/i*Gt)+t,xh=(r,t,e,i)=>-e/2*(Math.cos(Math.PI*r/i)-1)+t,Sh=(r,t,e,i)=>r===0?t:e*2**(10*(r/i-1))+t,Ch=(r,t,e,i)=>r===i?t+e:e*-(2**(-10*r/i)+1)+t,wh=(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,_h=(r,t,e,i)=>-e*(Math.sqrt(1-(r/=i)*r)-1)+t,Th=(r,t,e,i)=>e*Math.sqrt(1-(r=r/i-1)*r)+t,kh=(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,Oh=(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}=hn(s,e,n,1.70158);return-Ka(a,o,l,r,i)+t},Mh=(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}=hn(s,e,n,1.70158);return a*2**(-10*r)*Math.sin((r*i-o)*yt/l)+h+t},Ph=(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}=hn(s,e,n,1.70158);return r<1?-.5*Ka(a,o,l,r,i)+t:a*2**(-10*--r)*Math.sin((r*i-o)*yt/l)*.5+h+t},Eh=(r,t,e,i,s=1.70158)=>e*(r/=i)*r*((s+1)*r-s)+t,Dh=(r,t,e,i,s=1.70158)=>e*((r=r/i-1)*r*((s+1)*r+s)+1)+t,Ah=(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,cn=(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,Za=(r,t,e,i)=>e-cn(i-r,0,e,i)+t,jh=(r,t,e,i)=>r<i/2?.5*Za(2*r,0,e,i)+t:.5*cn(2*r-i,0,e,i)+.5*e+t,Lh=(r,t,e,i)=>e*(r/=i)*r+t,Fh=(r,t,e,i)=>-e*(r/=i)*(r-2)+t,Ih=(r,t,e,i)=>(r/=i/2)<1?e/2*r**2+t:-e/2*(--r*(r-2)-1)+t,Rh=()=>!1,un=class{constructor({startValue:r,byValue:t,duration:e=500,delay:i=0,easing:s=Ja,onStart:n=ri,onChange:a=ri,onComplete:o=ri,abort:l=Rh,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=ce().setTimeout(()=>kr(r),this.delay):kr(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),kr(this.tick)))}register(){ci.push(this)}unregister(){ci.remove(this)}abort(){this._state="aborted",this.unregister(),this.timeout&&ce().clearTimeout(this.timeout)}},Bh=class extends un{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)}}},Xh=class extends un{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])}}},Yh=(r,t,e,i)=>t+e*(1-Math.cos(r/i*Gt)),os=r=>r&&((t,e,i)=>r(new ct(t).toRgba(),e,i)),$h=class extends un{constructor({startValue:r,endValue:t,easing:e=Yh,onChange:i,onComplete:s,abort:n,...a}){let o=new ct(r).getSource(),l=new ct(t).getSource();super({...a,startValue:o,byValue:l.map((h,c)=>h-o[c]),easing:e,onChange:os(i),onComplete:os(s),abort:os(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),de(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 dn(r){let t=(e=>Array.isArray(e.startValue)||Array.isArray(e.endValue))(r)?new Xh(r):new Bh(r);return t.start(),t}function Qa(r){let t=new $h(r);return t.start(),t}var Mr=class H{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=Er(e,i),a=Er(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 b(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,p=o*d-l*u,f=c*o-h*l;if(f!==0){let v=g/f,y=p/f;return(n||0<=v&&v<=1)&&(a||0<=y&&y<=1)?new H("Intersection").append(new b(t.x+v*o,t.y+v*l)):new H}return new H(g===0||p===0?n||a||H.isPointContained(t,i,s)||H.isPointContained(e,i,s)||H.isPointContained(i,t,e)||H.isPointContained(s,t,e)?"Coincident":void 0:"Parallel")}static intersectSegmentLine(t,e,i,s){return H.intersectLineLine(t,e,i,s,!1,!0)}static intersectSegmentSegment(t,e,i,s){return H.intersectLineLine(t,e,i,s,!1,!1)}static intersectLinePolygon(t,e,i,s=!0){let n=new H,a=i.length;for(let o,l,h,c=0;c<a;c++){if(o=i[c],l=i[(c+1)%a],h=H.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 H.intersectLinePolygon(t,e,i,!1)}static intersectPolygonPolygon(t,e){let i=new H,s=t.length,n=[];for(let a=0;a<s;a++){let o=t[a],l=t[(a+1)%s],h=H.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 H("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 b(n.x,s.y),o=new b(s.x,n.y);return H.intersectPolygonPolygon(t,[s,a,n,o])}},Wh=class extends Ta{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?q(r,this.group.calcTransformMatrix()):r}setXY(r,t,e){this.group&&(r=q(r,nt(this.group.calcTransformMatrix()))),this.setRelativeXY(r,t,e)}getRelativeXY(){return new b(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=>q(a,n))}return s}intersectsWithRect(r,t){return Mr.intersectPolygonRectangle(this.getCoords(),r,t).status==="Intersection"}intersectsWithObject(r){let t=Mr.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 Mr.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 _t(this.getCoords())}getScaledWidth(){return this._getTransformedDimensions().x}getScaledHeight(){return this._getTransformedDimensions().y}scale(r){this._set(Ut,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?Rt(Us(this.calcTransformMatrix())):this.angle}getViewportTransform(){var r;return((r=this.canvas)==null?void 0:r.viewportTransform)||it.concat()}calcACoords(){let r=ge({angle:this.angle}),{x:t,y:e}=this.getRelativeCenterPoint(),i=Y(Fe(t,e),r),s=this._getTransformedDimensions(),n=s.x/2,a=s.y/2;return{tl:q({x:-n,y:-a},i),tr:q({x:n,y:-a},i),bl:q({x:-n,y:a},i),br:q({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,et(this.originX),et(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=Da({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 b(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 b(qs(e),Pa(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 b(n*t.scaleX,a*t.scaleY):_i(n,a,Lr(t)),o.scalarAdd(s)}translateToGivenOrigin(r,t,e,i,s){let n=r.x,a=r.y,o=et(i)-et(t),l=et(s)-et(e);if(o||l){let h=this._getTransformedDimensions();n+=o*h.x,a+=l*h.y}return new b(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?q(r,this.group.calcTransformMatrix()):r}getRelativeCenterPoint(){return this.translateToCenterPoint(new b(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")}},At=class ni extends Wh{static getDefaults(){return ni.ownDefaults}get type(){let t=this.constructor.type;return t==="FabricObject"?"object":t.toLowerCase()}set type(t){It("warn","Setting type has no effect",t)}constructor(t){super(),m(this,"_cacheContext",null),Object.assign(this,ni.ownDefaults),this.setOptions(t)}_createCacheCanvas(){this._cacheCanvas=Ot(),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]=Tr.limitDimsByArea(a),h=de(n,o,s),c=de(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 b(Math.abs(this.scaleX),Math.abs(this.scaleY));let t=ue(this.calcTransformMatrix());return new b(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 he||(e=new he(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=ht(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=nt(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,dt(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&&(dt(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||it,o=n*s,l=a*s,h=e.nonScaling?new b(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(!dt(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=ht({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 b(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=Qs(this),i=this.group,s=this.shadow,n=Math.abs,a=t.enableRetinaScaling?fa():1,o=(t.multiplier||1)*a,l=t.canvasProvider||(x=>new Ie(x,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1}));delete this.group,t.withoutTransform&&Xa(this),t.withoutShadow&&(this.shadow=null),t.viewportTransform&&tn(this,this.getViewportTransform()),this.setCoords();let h=Ot(),c=this.getBoundingRect(),u=this.shadow,d=new b;if(u){let x=u.blur,S=u.nonScaling?new b(1,1):this.getObjectScaling();d.x=2*Math.round(n(u.offsetX)+x)*n(S.x),d.y=2*Math.round(n(u.offsetY)+x)*n(S.y)}let g=c.width+d.x,p=c.height+d.y;h.width=Math.ceil(g),h.height=Math.ceil(p);let f=l(h);t.format==="jpeg"&&(f.backgroundColor="#fff"),this.setPositionByOrigin(new b(f.width/2,f.height/2),F,F);let v=this.canvas;f._objects=[this],this.set("canvas",f),this.setCoords();let y=f.toCanvasElement(o||1,t);return this.set("canvas",v),this.shadow=s,i&&(this.group=i),this.set(e),this.setCoords(),f._objects=[],f.destroy(),y}toDataURL(t={}){return Ns(this.toCanvasElement(t),t.format||"png",t.quality||1)}toBlob(t={}){return Gs(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(){ci.cancelByTarget(this),this.off(),this._set("canvas",void 0),this._cacheCanvas&&Tt().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((p,f,v)=>(v===s.length-1&&(p[f]=u),p[f]),this),l&&l(u,d,g)},onComplete:(u,d,g)=>{this.setCoords(),h&&h(u,d,g)}};return n?Qa(c):dn(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(ni.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:p,height:f,strokeWidth:v,strokeLineCap:y,strokeDashOffset:x,strokeLineJoin:S,strokeUniform:w,strokeMiterLimit:C,scaleX:O,scaleY:T,angle:k,flipX:M,flipY:A,opacity:E,visible:D,backgroundColor:j,fillRule:B,paintFirst:G,globalCompositeOperation:$,skewX:Z,skewY:at}=this;n&&!n.excludeFromExport&&(i=n.toObject(e.concat("inverted","absolutePositioned")));let I=Ze=>R(Ze,s),St={...pe(this,e),type:this.constructor.type,version:ms,originX:d,originY:g,left:I(c),top:I(u),width:I(p),height:I(f),fill:Yn(a)?a.toObject():a,stroke:Yn(o)?o.toObject():o,strokeWidth:I(v),strokeDashArray:h&&h.concat(),strokeLineCap:y,strokeDashOffset:x,strokeLineJoin:S,strokeUniform:w,strokeMiterLimit:I(C),scaleX:I(O),scaleY:I(T),angle:I(k),flipX:M,flipY:A,opacity:I(E),shadow:l&&l.toObject(),visible:D,backgroundColor:j,fillRule:B,paintFirst:G,globalCompositeOperation:$,skewX:I(Z),skewY:I(at),...i?{clipPath:i}:null};return this.includeDefaultValues?St:this._removeDefaultValues(St)}toDatalessObject(t){return this.toObject(t)}_removeDefaultValues(t){let e=this.constructor.getDefaults(),i=Object.keys(e).length>0?e:Object.getPrototypeOf(this);return Zs(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 Fr(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(At,"stateProperties",ah),m(At,"cacheProperties",Xt),m(At,"ownDefaults",oh),m(At,"type","FabricObject"),m(At,"colorProperties",[st,kt,"backgroundColor"]),m(At,"customProperties",[]),_.setClass(At),_.setClass(At,"object");var gn=(r,t)=>{var e;let{transform:{target:i}}=t;(e=i.canvas)==null||e.fire(`object:${r}`,{...t,target:i}),i.fire(r,t)},Yt=(r,t,e)=>(i,s,n,a)=>{let o=t(i,s,n,a);return o&&gn(r,{...an(i,s,n,a),...e}),o};function Kt(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 to=(r,t,e,i)=>(s,n,a,o)=>{let l=ki(n,n.originX,n.originY,a,o)[e],h=et(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=za(n)?2:1,g=c[r],p=Math.abs(l*d/c[i])-u;return c.set(r,Math.max(p,1)),g!==c[r]}return!1},eo=to("width","originX","x","scaleX"),ro=to("height","originY","y","scaleY"),xs=Yt(Pr,Kt(eo)),zh=Yt(Pr,Kt(ro));function io(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,yt,!1),r[l](),n&&r.stroke(),r.restore()}function so(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 lt=class{constructor(r){m(this,"visible",!0),m(this,"actionName",Ca),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 b(.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)&&Mr.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 b(this.x*r.x+this.offsetX,this.y*r.y+this.offsetY).transform(t)}calcCornerCoords(r,t,e,i,s,n){let a=Si([Fe(e,i),ge({angle:r}),Ci((s?this.touchSizeX:this.sizeX)||t,(s?this.touchSizeY:this.sizeY)||t)]);return{tl:new b(-.5,-.5).transform(a),tr:new b(.5,-.5).transform(a),br:new b(.5,.5).transform(a),bl:new b(-.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?kt:st,p=l||i.cornerStrokeColor,f=!d&&!!p;return r.fillStyle=a||i.cornerColor||"",r.strokeStyle=p||"",r.translate(t,e),r.rotate(X(i.getTotalAngle())),{stroke:f,xSize:c,ySize:u,transparentCorners:d,opName:g}}render(r,t,e,i,s){((i=i||{}).cornerStyle||s.cornerStyle)==="circle"?io.call(this,r,t,e,i,s):so.call(this,r,t,e,i,s)}},no=(r,t,e)=>e.lockRotation?nn:t.cursorStyle,ao=Yt(ya,Kt((r,{target:t,ex:e,ey:i,theta:s,originX:n,originY:a},o,l)=>{let h=t.getPositionByOrigin(n,a);if(vt(t,"lockRotation"))return!1;let c=Math.atan2(i-h.y,e-h.x),u=Rt(Math.atan2(l-h.y,o-h.x)-c+s);if(t.snapAngle&&t.snapAngle>0){let g=t.snapAngle,p=t.snapThreshold||g,f=Math.ceil(u/g)*g,v=Math.floor(u/g)*g;Math.abs(u-v)<p?u=v:Math.abs(u-f)<p&&(u=f)}u<0&&(u=360+u),u%=360;let d=t.angle!==u;return t.angle=u,d}));function oo(r,t){let e=t.canvas,i=r[e.uniScaleKey];return e.uniformScaling&&!i||!e.uniformScaling&&i}function lo(r,t,e){let i=vt(r,"lockScalingX"),s=vt(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 Hh=["e","se","s","sw","w","nw","n","ne","e"],we=(r,t,e,i)=>{let s=oo(r,e);return lo(e,t.x!==0&&t.y===0?"x":t.x===0&&t.y!==0?"y":"",s)?nn:`${Hh[Ha(e,0,i)]}-resize`};function pn(r,t,e,i,s={}){let n=t.target,a=s.by,o=oo(r,n),l,h,c,u,d,g;if(lo(n,a,o))return!1;if(t.gestureScale)h=t.scaleX*t.gestureScale,c=t.scaleY*t.gestureScale;else{if(l=ki(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),vt(n,"lockScalingFlip")&&(t.signX!==d||t.signY!==g))return!1;if(u=n._getTransformedDimensions(),o&&!a){let v=Math.abs(l.x)+Math.abs(l.y),{original:y}=t,x=v/(Math.abs(u.x*y.scaleX/n.scaleX)+Math.abs(u.y*y.scaleY/n.scaleY));h=y.scaleX*x,c=y.scaleY*x}else h=Math.abs(l.x*n.scaleX/u.x),c=Math.abs(l.y*n.scaleY/u.y);za(t)&&(h*=2,c*=2),t.signX!==d&&a!=="y"&&(t.originX=Hn(t.originX),h*=-1,t.signX=d),t.signY!==g&&a!=="x"&&(t.originY=Hn(t.originY),c*=-1,t.signY=g)}let p=n.scaleX,f=n.scaleY;return a?(a==="x"&&n.set("scaleX",h),a==="y"&&n.set("scaleY",c)):(!vt(n,"lockScalingX")&&n.set("scaleX",h),!vt(n,"lockScalingY")&&n.set("scaleY",c)),p!==n.scaleX||f!==n.scaleY}var nr=Yt(xi,Kt((r,t,e,i)=>pn(r,t,e,i))),ho=Yt(xi,Kt((r,t,e,i)=>pn(r,t,e,i,{by:"x"}))),co=Yt(xi,Kt((r,t,e,i)=>pn(r,t,e,i,{by:"y"}))),ls={x:{counterAxis:"y",scale:Ut,skew:je,lockSkewing:"lockSkewingX",origin:"originX",flip:"flipX"},y:{counterAxis:"x",scale:qt,skew:Le,lockSkewing:"lockSkewingY",origin:"originY",flip:"flipY"}},Vh=["ns","nesw","ew","nwse"],uo=(r,t,e,i)=>t.x!==0&&vt(e,"lockSkewingY")||t.y!==0&&vt(e,"lockSkewingX")?nn:`${Vh[Ha(e,0,i)%4]}-resize`;function go(r,t,e,i,s){let{target:n}=e,{counterAxis:a,origin:o,lockSkewing:l,skew:h,flip:c}=ls[r];if(vt(n,l))return!1;let{origin:u,flip:d}=ls[a],g=et(e[u])*(n[d]?-1:1),p=-Math.sign(g)*(n[c]?-1:1),f=-(n[h]===0&&ki(e,"center","center",i,s)[r]>0||n[h]>0?1:-1)*p*.5+.5;return Yt(xa,Kt((v,y,x,S)=>(function(w,{target:C,ex:O,ey:T,skewingSide:k,...M},A){let{skew:E}=ls[w],D=A.subtract(new b(O,T)).divide(new b(C.scaleX,C.scaleY))[w],j=C[E],B=M[E],G=Math.tan(X(B)),$=w==="y"?C._getTransformedDimensions({scaleX:1,scaleY:1,skewX:0}).x:C._getTransformedDimensions({scaleX:1,scaleY:1}).y,Z=2*D*k/Math.max($,1)+G,at=Rt(Math.atan(Z));C.set(E,at);let I=j!==C[E];if(I&&w==="y"){let{skewX:St,scaleX:Ze}=C,Qe=C._getTransformedDimensions({skewY:j}),Wt=C._getTransformedDimensions(),tr=St===0?1:Qe.x/Wt.x;tr!==1&&C.set("scaleX",tr*Ze)}return I})(r,y,new b(x,S))))(t,{...e,[o]:f,skewingSide:p},i,s)}var po=(r,t,e,i)=>go("x",r,t,e,i),fo=(r,t,e,i)=>go("y",r,t,e,i);function Ei(r,t){return r[t.canvas.altActionKey]}var ar=(r,t,e)=>{let i=Ei(r,e);return t.x===0?i?je:qt:t.y===0?i?Le:Ut:""},oe=(r,t,e,i)=>Ei(r,e)?uo(0,t,e,i):we(r,t,e,i),Ss=(r,t,e,i)=>Ei(r,t.target)?fo(r,t,e,i):ho(r,t,e,i),Cs=(r,t,e,i)=>Ei(r,t.target)?po(r,t,e,i):co(r,t,e,i),fn=()=>({ml:new lt({x:-.5,y:0,cursorStyleHandler:oe,actionHandler:Ss,getActionName:ar}),mr:new lt({x:.5,y:0,cursorStyleHandler:oe,actionHandler:Ss,getActionName:ar}),mb:new lt({x:0,y:.5,cursorStyleHandler:oe,actionHandler:Cs,getActionName:ar}),mt:new lt({x:0,y:-.5,cursorStyleHandler:oe,actionHandler:Cs,getActionName:ar}),tl:new lt({x:-.5,y:-.5,cursorStyleHandler:we,actionHandler:nr}),tr:new lt({x:.5,y:-.5,cursorStyleHandler:we,actionHandler:nr}),bl:new lt({x:-.5,y:.5,cursorStyleHandler:we,actionHandler:nr}),br:new lt({x:.5,y:.5,cursorStyleHandler:we,actionHandler:nr}),mtr:new lt({x:0,y:-.5,actionHandler:ao,cursorStyleHandler:no,offsetY:-40,withConnection:!0,actionName:ba})}),mo=()=>({mr:new lt({x:.5,y:0,actionHandler:xs,cursorStyleHandler:oe,actionName:Pr}),ml:new lt({x:-.5,y:0,actionHandler:xs,cursorStyleHandler:oe,actionName:Pr})}),vo=()=>({...fn(),...mo()}),yo=class ws extends At{static getDefaults(){return{...super.getDefaults(),...ws.ownDefaults}}constructor(t){super(),Object.assign(this,this.constructor.createControls(),ws.ownDefaults),this.setOptions(t)}static createControls(){return{controls:fn()}}_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=qs(t),i=Pa(t),s=this.getCenterPoint(),n=Y(Y(t,Y(Fe(s.x,s.y),ge({angle:this.getTotalAngle()-(this.group&&this.flipX?180:0)}))),[1/e,0,0,1/i,0,0]),a=this.group?ue(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=ue(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=Us(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,Lr(e)),a=this.isStrokeAccountedForInDimensions()?Vs:(this.strokeUniform?new b().scalarAdd(this.canvas?this.canvas.getZoom():1):new b(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 bo(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(yo,"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 K=class extends yo{};bo(K,[Va]),_.setClass(K),_.setClass(K,"object");var xo=(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},So=class{constructor(r){this.options=r,this.strokeProjectionMagnitude=this.options.strokeWidth/2,this.scale=new b(this.options.scaleX,this.options.scaleY),this.strokeUniformScalar=this.options.strokeUniform?new b(1/this.options.scaleX,1/this.options.scaleY):new b(1,1)}createSideVector(r,t){let e=Er(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 b(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)}},Nh=new b,Co=class ai extends So{static getOrthogonalRotationFactor(t,e){let i=e?gi(t,e):rn(t);return Math.abs(i)<Gt?-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 b(t),this.B=new b(e),this.C=new b(i),this.AB=this.createSideVector(this.A,this.B),this.AC=this.createSideVector(this.A,this.C),this.alpha=gi(this.AB,this.AC),this.bisector=Ti(en(this.AB.eq(Nh)?this.AC:this.AB,this.alpha/2))}calcOrthogonalProjection(t,e,i=this.strokeProjectionMagnitude){let s=sn(this.createSideVector(t,e)),n=ai.getOrthogonalRotationFactor(s,this.bisector);return this.scaleUnitVector(s,i*n)}projectBevel(){let t=[];return(this.alpha%yt===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?di(this.scaleUnitVector(this.bisector,this.options.strokeMiterLimit)):this.options.strokeMiterLimit;return di(s)/this.strokeProjectionMagnitude<=n&&t.push(this.applySkew(this.A.add(s))),t.push(...this.projectBevel()),t}projectRoundNoSkew(t,e){let i=[],s=new b(ai.getOrthogonalRotationFactor(this.bisector),ai.getOrthogonalRotationFactor(new b(this.bisector.y,this.bisector.x)));return[new b(1,0).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(s),new b(0,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(s)].forEach(n=>{ys(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 b(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 b(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),p=new b(g,Math.sqrt(Math.max(c**2-g**2,0)));return[p,p.scalarMultiply(-1),d,d.scalarMultiply(-1)].map(f=>this.applySkew(l?f.multiply(this.strokeUniformScalar):f)).forEach(f=>{ys(f,t,e)&&i.push(this.applySkew(this.A).add(f))}),i}projectRound(){let t=[];t.push(...this.projectBevel());let e=this.alpha%yt===0,i=this.applySkew(this.A),s=t[e?0:2].subtract(i),n=t[+!!e].subtract(i),a=Oe(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}))}},ea=class extends So{constructor(r,t,e){super(e),this.A=new b(r),this.T=new b(t)}calcOrthogonalProjection(r,t,e=this.strokeProjectionMagnitude){let i=this.createSideVector(r,t);return this.scaleUnitVector(sn(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 b(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 Co(this.A,this.T,this.T,this.options).projectRound());return r}projectSquare(){let r=[];if(this.A.eq(this.T)){let t=new b(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(Ti(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}))}},wo=(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 b(a)),n),[new b(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 ea(n,n,t).project()):!e||a!==0&&a!==o.length-1?i.push(...new Co(n,l,h,t).project()):i.push(...new ea(n,a===0?h:l,t).project())}),i},mn=r=>{let t={};return Object.keys(r).forEach(e=>{t[e]={},Object.keys(r[e]).forEach(i=>{t[e][i]={...r[e][i]}})}),t},Di=(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),_o=(r,t)=>{let e=t.split(`
|
|
38
|
+
`),i=[],s=-1,n={};r=mn(r);for(let a=0;a<e.length;a++){let o=wi(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&&(Di(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},To=(r,t)=>{if(!Array.isArray(r))return mn(r);let e=t.split(Hs),i={},s=-1,n=0;for(let a=0;a<e.length;a++){let o=wi(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},Jt=["display","transform",st,"fill-opacity","fill-rule","opacity",kt,"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 ra(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 Gh(r,t){let e=!0,i=ra(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=ra(s=s.parentElement,a);return n.length===0})(r,t)),i&&e&&t.length===0}function Uh(r,t={}){let e={};for(let i in t)Gh(r,i.split(" "))&&(e={...e,...t[i]});return e}var qh=r=>{var t;return(t=ih[r])==null?r:t},Kh=RegExp(`(${ft})`,"gi"),rt=`(${ft})`,Jh=String.raw`(skewX)\(${rt}\)`,Zh=String.raw`(skewY)\(${rt}\)`,Qh=String.raw`(rotate)\(${rt}(?: ${rt} ${rt})?\)`,tc=String.raw`(scale)\(${rt}(?: ${rt})?\)`,ec=String.raw`(translate)\(${rt}(?: ${rt})?\)`,vn=`(?:${String.raw`(matrix)\(${rt} ${rt} ${rt} ${rt} ${rt} ${rt}\)`}|${ec}|${Qh}|${tc}|${Jh}|${Zh})`,rc=`(?:${vn}*)`,ic=String.raw`^\s*(?:${rc}?)\s*$`,sc=new RegExp(ic),nc=new RegExp(vn),ac=new RegExp(vn,"g");function fi(r){let t=[];if(!(r=(e=>pi(e.replace(Kh," $1 ").replace(/,/gi," ")))(r).replace(/\s*([()])\s*/gi,"$1"))||r&&!sc.test(r))return[...it];for(let e of r.matchAll(ac)){let i=nc.exec(e[0]);if(!i)continue;let s=it,[,n,...a]=i.filter(g=>!!g),[o,l,h,c,u,d]=a.map(g=>parseFloat(g));switch(n){case"translate":s=Fe(o,l);break;case ba:s=ge({angle:o},{x:l,y:h});break;case Ca:s=Ci(o,l);break;case je:s=Ks(o);break;case Le:s=Js(o);break;case"matrix":s=[o,l,h,c,u,d]}t.push(s)}return Si(t)}function oc(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,fi(t)):fi(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"?mt:F;else if(r==="charSpacing"||r==="textDecorationThickness")n=tt(t,i)/i*1e3;else if(r==="paintFirst"){let o=t.indexOf(st),l=t.indexOf(kt);a=st,(o>-1&&l>-1&&l<o||o===-1&&l>-1)&&(a=kt)}else{if(r==="href"||r==="xlink:href"||r==="font"||r==="id")return t;if(r==="imageSmoothing")return t==="optimizeQuality";n=s?t.map(tt):tt(t,i)}}else a="";return!s&&isNaN(n)?a:n}function _s(r,t){r.replace(/;\s*$/,"").split(";").forEach(e=>{if(!e)return;let[i,s]=e.split(":");t[i.trim().toLowerCase()]=s.trim()})}function lc(r){let t={},e=r.getAttribute("style");return e&&(typeof e=="string"?_s(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 $t(r,t,e){if(!r)return{};let i,s={},n=16;r.parentNode&&Jn.test(r.parentNode.nodeName)&&(s=$t(r.parentElement,t,e),s.fontSize&&(i=n=tt(s.fontSize)));let a={...t.reduce((h,c)=>{let u=r.getAttribute(c);return u&&(h[c]=u),h},{}),...Uh(r,e),...lc(r)};a["clip-path"]&&r.setAttribute(Kn,a[Kn]),a["font-size"]&&(i=tt(a[qn],n),a[qn]=`${i}`);let o={};for(let h in a){let c=qh(h);o[c]=oc(c,a[h],s,i)}o&&o.font&&(function(h,c){let u=h.match(rh);if(!u)return;let d=u[1],g=u[3],p=u[4],f=u[5],v=u[6];d&&(c.fontStyle=d),g&&(c.fontWeight=isNaN(parseFloat(g))?g:parseFloat(g)),p&&(c.fontSize=tt(p)),v&&(c.fontFamily=v),f&&(c.lineHeight=f==="normal"?1:f)})(o.font,o);let l={...s,...o};return Jn.test(r.nodeName)?l:(function(h){let c=K.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 ct(h[u]);h[u]=g.setAlpha(R(g.getAlpha()*h[d],2)).toRgba()}),h})(l)}var ko=["rx","ry"],jt=class Ts extends K{static getDefaults(){return{...super.getDefaults(),...Ts.ownDefaults}}constructor(t){super(),Object.assign(this,Ts.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([...ko,...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}=$t(t,this.ATTRIBUTE_NAMES,i);return new this({...e,...h,left:s,top:n,width:a,height:o,visible:!!(l&&a&&o)})}};m(jt,"type","Rect"),m(jt,"cacheProperties",[...Xt,...ko]),m(jt,"ownDefaults",{rx:0,ry:0}),m(jt,"ATTRIBUTE_NAMES",[...Jt,"x","y","rx","ry","width","height"]),_.setClass(jt),_.setSVGClass(jt);var ia="initialization",ks="added",Oo=(r,t)=>{let{strokeUniform:e,strokeWidth:i,width:s,height:n,group:a}=t,o=a&&a!==r?Ir(a.calcTransformMatrix(),r.calcTransformMatrix()):null,l=o?t.getRelativeCenterPoint().transform(o):t.getRelativeCenterPoint(),h=!t.isStrokeAccountedForInDimensions(),c=e&&h?Ya(new b(i,i),void 0,r.calcTransformMatrix()):Vs,u=!e&&h?i:0,d=_i(s+u,n+u,Si([o,t.calcOwnMatrix()],!0)).add(c).scalarDivide(2);return[l.subtract(d),l.add(d)]},Ai=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}=_t(r.map(c=>Oo(i,c)).reduce((c,u)=>c.concat(u),[])),l=new b(a,o),h=new b(s,n).add(l.scalarDivide(2));if(e==="initialization"){let c=this.getInitialSize(t,{size:l,center:h});return{center:h,relativeCorrection:new b(0,0),size:c}}return{center:h.transform(i.calcOwnMatrix()),size:l}}};m(Ai,"type","strategy");var Os=class extends Ai{shouldPerformLayout(r){return!0}};m(Os,"type","fit-content"),_.setClass(Os);var Mo="layoutManager",Ar=class{constructor(r=new Os){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[wa,va,Pr,ya,xi,xa,hi,Sa,"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 b:t.getRelativeCenterPoint(),{center:a,correction:o=new b,relativeCorrection:l=new b}=s;return{result:s,prevCenter:n,nextCenter:a,offset:n.subtract(a).add(o).transform(i==="initialization"?it:nt(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*et(e.originX):n,top:(a=r.y)==null?s.y+i.y*et(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:Mo,strategy:this.strategy.constructor.type}}toJSON(){return this.toObject()}};_.setClass(Ar,Mo);var cc=class extends Ar{performLayout(){}},Ft=class Ms extends _a(K){static getDefaults(){return{...super.getDefaults(),...Ms.ownDefaults}}constructor(t=[],e={}){super(),m(this,"_activeObjects",[]),m(this,"__objectSelectionTracker",void 0),m(this,"__objectSelectionDisposer",void 0),Object.assign(this,Ms.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 Ar:i,this.layoutManager.performLayout({type:ia,target:this,targets:[...t],x:e.left,y:e.top})}canEnterGroup(t){return t===this||this.isDescendantOf(t)?(It("error","Group: circular object trees are not supported, this call has no effect"),!1):this._objects.indexOf(t)===-1||(It("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&&Ee(t,Y(nt(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||(Ee(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=K.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(...nt(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=jt.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([Oe(e,n),Ir(s,n)]).then(([a,o])=>{let l=new this(a,{...s,...o,layoutManager:new oc});return l.layoutManager=i?new(_.getClass(i.type))(new(_.getClass(i.strategy))):new Dr,l.layoutManager.subscribeTargets({type:ta,target:l,targets:l.getObjects()}),l.setCoords(),l})}};m(Ft,"type","Group"),m(Ft,"ownDefaults",{strokeWidth:0,subTargetCheck:!1,interactive:!1}),_.setClass(Ft);var lc=(r,t)=>r&&r.length===1?r[0]:new Ft(r,t),ko=(r,t)=>Math.min(t.width/r.width,t.height/r.height),Oo=(r,t)=>Math.max(t.width/r.width,t.height/r.height),ks="\\s*,?\\s*",rr=`${ks}(${ft})`,hc=`${rr}${rr}${rr}${ks}([01])${ks}([01])${rr}${rr}`,cc={m:"l",M:"L"},uc=(r,t,e,i,s,n,a,o,l,h,c)=>{let u=bt(r),d=xt(r),g=bt(t),p=xt(t),f=e*s*g-i*n*p+a,v=i*s*g+e*n*p+o;return["C",h+l*(-e*s*d-i*n*u),c+l*(-i*s*d+e*n*u),f+l*(e*s*p+i*n*g),v+l*(i*s*p-e*n*g),f,v]},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 Os(r,t,e,i,s,n,a,o){let l;if(I.cachesBoundsOfCurve&&(l=[...arguments].join(),_r.boundsOfCurveCache[l]))return _r.boundsOfCurveCache[l];let h=Math.sqrt,c=Math.abs,u=[],d=[[0,0],[0,0]],g=6*r-12*e+6*s,p=-3*r+9*e-9*s+3*a,f=3*e-3*r;for(let S=0;S<2;++S){if(S>0&&(g=6*t-12*i+6*n,p=-3*t+9*i-9*n+3*o,f=3*i-3*t),c(p)<1e-12){if(c(g)<1e-12)continue;let M=-f/g;0<M&&M<1&&u.push(M);continue}let C=g*g-4*f*p;if(C<0)continue;let O=h(C),T=(-g+O)/(2*p);0<T&&T<1&&u.push(T);let k=(-g-O)/(2*p);0<k&&k<1&&u.push(k)}let v=u.length,y=v,x=Po(r,t,e,i,s,n,a,o);for(;v--;){let{x:S,y:C}=x(u[v]);d[0][v]=S,d[1][v]=C}d[0][y]=r,d[1][y]=t,d[0][y+1]=a,d[1][y+1]=o;let w=[new b(Math.min(...d[0]),Math.min(...d[1])),new b(Math.max(...d[0]),Math.max(...d[1]))];return I.cachesBoundsOfCurve&&(_r.boundsOfCurveCache[l]=w),w}var dc=(r,t,[e,i,s,n,a,o,l,h])=>{let c=((u,d,g,p,f,v,y)=>{if(g===0||p===0)return[];let x=0,w=0,S=0,C=Math.PI,O=y*$s,T=xt(O),k=bt(O),M=.5*(-k*u-T*d),A=.5*(-k*d+T*u),E=g**2,D=p**2,j=A**2,B=M**2,G=E*D-E*j-D*B,Y=Math.abs(g),Z=Math.abs(p);if(G<0){let zt=Math.sqrt(1-G/(E*D));Y*=zt,Z*=zt}else S=(f===v?-1:1)*Math.sqrt(G/(E*j+D*B));let at=S*Y*A/Z,L=-S*Z*M/Y,wt=k*at-T*L+.5*u,Je=T*at+k*L+.5*d,Ze=ea(1,0,(M-at)/Y,(A-L)/Z),Wt=ea((M-at)/Y,(A-L)/Z,(-M-at)/Y,(-A-L)/Z);v===0&&Wt>0?Wt-=2*C:v===1&&Wt<0&&(Wt+=2*C);let Qe=Math.ceil(Math.abs(Wt/C*2)),Hr=[],tr=Wt/Qe,_l=8/3*Math.sin(tr/4)*Math.sin(tr/4)/Math.sin(tr/2),ts=Ze+tr;for(let zt=0;zt<Qe;zt++)Hr[zt]=uc(Ze,ts,k,T,Y,Z,wt,Je,_l,x,w),x=Hr[zt][5],w=Hr[zt][6],Ze=ts,ts+=tr;return Hr})(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},Mo=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":dc(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},fi=(r,t,e,i)=>Math.sqrt((e-r)**2+(i-t)**2),Po=(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 b(a*h+s*c+e*u+r*d,o*h+n*c+i*u+t*d)},Eo=r=>r**2,Do=r=>2*r*(1-r),Ao=r=>(1-r)**2,gc=(r,t,e,i,s,n,a,o)=>l=>{let h=Eo(l),c=Do(l),u=Ao(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)},pc=(r,t,e,i,s,n)=>a=>{let o=Eo(a),l=Do(a),h=Ao(a);return new b(s*o+e*l+r*h,n*o+i*l+t*h)},fc=(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)},ra=(r,t,e)=>{let i=new b(t,e),s=0;for(let n=1;n<=100;n+=1){let a=r(n/100);s+=fi(i.x,i.y,a.x,a.y),i=a}return s},mc=(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=fi(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)}},fn=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=fi(s,n,h[1],h[2]),s=h[1],n=h[2];break;case"C":t=Po(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e=c,e.iterator=t,e.angleFinder=gc(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e.length=ra(t,s,n),s=h[5],n=h[6];break;case"Q":t=pc(s,n,h[1],h[2],h[3],h[4]),e=c,e.iterator=t,e.angleFinder=fc(s,n,h[1],h[2],h[3],h[4]),e.length=ra(t,s,n),s=h[3],n=h[4];break;case"Z":e=c,e.destX=a,e.destY=o,e.length=fi(s,n,a,o),s=a,n=o}i+=e.length,l.push(e)}return l.push({length:i,x:s,y:n}),l},jo=(r,t,e=fn(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 b(s.x,s.y).lerp(new b(s.destX,s.destY),n),angle:Math.atan2(s.destY-s.y,s.destX-s.x)};case"L":return{...new b(s.x,s.y).lerp(new b(a[1],a[2]),n),angle:Math.atan2(a[2]-s.y,a[1]-s.x)};case"C":case"Q":return mc(s,t)}},vc=RegExp("[mzlhvcsqta][^mzlhvcsqta]*","gi"),ia=new RegExp(hc,"g"),yc=new RegExp(ft,"gi"),bc={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},Io=r=>{var t;let e=[],i=(t=r.match(vc))==null?[]:t;for(let s of i){let n=s[0];if(n==="z"||n==="Z"){e.push([n]);continue}let a=bc[n.toLowerCase()],o=[];if(n==="a"||n==="A"){let l;for(ia.lastIndex=0;l=ia.exec(s);)o.push(...l.slice(1))}else o=s.match(yc)||[];for(let l=0;l<o.length;l+=a){let h=Array(a),c=cc[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},xc=(r,t=0)=>{let e=new b(r[0]),i=new b(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},wc=(r,t,e)=>(e&&(t=$(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}=q({x:i[n],y:i[n+1]},t);s[n]=a,s[n+1]=o}return s})),Cc=(r,t)=>{let e=2*Math.PI/r,i=-Gt;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 b(bt(a),xt(a)).scalarMultiply(t);s[n]=[n===0?"M":"L",o,l]}return s[r]=["Z"],s},Fo=(r,t)=>r.map(e=>e.map((i,s)=>s===0||t===void 0?i:R(i,t)).join(" ")).join(" "),Sc=(r,t)=>{var e;let i=r,s=t;i.inverted&&!s.inverted&&(i=t,s=r),Js(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 Ft([i],{clipPath:s,inverted:n})},_c=(r,t)=>Math.floor(Math.random()*(t-r+1))+r,ai=(r,t)=>{let e=r._findCenterFromElement();r.transformMatrix&&((i=>{if(i.transformMatrix){let{scaleX:s,scaleY:n,angle:a,skewX:o}=ue(i.transformMatrix);i.flipX=!1,i.flipY=!1,i.set(Ut,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)},Zt=Ar({addTransformToObject:()=>Fa,animate:()=>hn,animateColor:()=>Ka,applyTransformToObject:()=>Pe,calcAngleBetweenVectors:()=>di,calcDimensionsMatrix:()=>jr,calcPlaneChangeMatrix:()=>Fr,calcVectorRotation:()=>Qs,cancelAnimFrame:()=>Sa,capValue:()=>de,composeMatrix:()=>Ma,copyCanvasElement:()=>Xl,cos:()=>bt,createCanvasElement:()=>Ot,createImage:()=>_a,createRotateMatrix:()=>ge,createScaleMatrix:()=>wi,createSkewXMatrix:()=>Gs,createSkewYMatrix:()=>Us,createTranslateMatrix:()=>Ie,createVector:()=>Pr,crossProduct:()=>ke,degreesToRadians:()=>X,dotProduct:()=>Xa,ease:()=>nh,enlivenObjectEnlivables:()=>Ir,enlivenObjects:()=>Oe,findScaleToCover:()=>Oo,findScaleToFit:()=>ko,getBoundsOfCurve:()=>Os,getOrthonormalVector:()=>tn,getPathSegmentsInfo:()=>fn,getPointOnPath:()=>jo,getPointer:()=>Ia,getRandomInt:()=>_c,getRegularPolygonPath:()=>Cc,getSmoothPathFromPoints:()=>xc,getSvgAttributes:()=>Kl,getUnitVector:()=>_i,groupSVGElements:()=>lc,hasStyleChanged:()=>Ei,invertTransform:()=>nt,isBetweenVectors:()=>fs,isIdentityMatrix:()=>Ta,isTouchEvent:()=>ci,isTransparent:()=>vo,joinPath:()=>Fo,loadImage:()=>kr,magnitude:()=>ui,makeBoundingBoxFromPoints:()=>_t,makePathSimpler:()=>Mo,matrixToSVG:()=>Me,mergeClipPaths:()=>Sc,multiplyTransformMatrices:()=>$,multiplyTransformMatrixArray:()=>xi,parsePath:()=>Io,parsePreserveAspectRatioAttribute:()=>sn,parseUnit:()=>tt,pick:()=>pe,projectStrokeOnPoints:()=>xo,qrDecompose:()=>ue,radiansToDegrees:()=>Rt,removeFromArray:()=>ie,removeTransformFromObject:()=>Nl,removeTransformMatrixForSvgParsing:()=>ai,requestAnimFrame:()=>Tr,resetObjectTransform:()=>La,rotateVector:()=>Zs,saveObjectTransform:()=>Ks,sendObjectToPlane:()=>Js,sendPointToPlane:()=>Bt,sendVectorToPlane:()=>Ra,sin:()=>xt,sizeAfterTransform:()=>Si,string:()=>Yl,stylesFromArray:()=>Co,stylesToArray:()=>wo,toBlob:()=>Hs,toDataURL:()=>zs,toFixed:()=>R,transformPath:()=>wc,transformPoint:()=>q});function Ms(r,t){let e=r.style;e&&Object.entries(t).forEach(([i,s])=>e.setProperty(i,s))}var Tc=class extends Aa{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=Ot();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=De().createElement("div");return r.setAttribute("data-fabric","wrapper"),Ms(r,{position:"relative"}),Xn(r),r}applyCanvasStyle(r,t){let{styles:e,allowTouchScrolling:i}=t;Ms(r,{...e,"touch-action":i?"manipulation":yi}),Xn(r)}setDimensions(r,t){super.setDimensions(r,t);let{el:e,ctx:i}=this.upper;Da(e,i,r,t)}setCSSDimensions(r){super.setCSSDimensions(r),ps(this.upper.el,r),ps(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(),Tt().dispose(this.upper.el),delete this.upper,delete this.container}},Lo=(r,t,e,i)=>{let{target:s,offsetX:n,offsetY:a}=t,o=e-n,l=i-a,h=!vt(s,"lockMovementX")&&s.left!==o,c=!vt(s,"lockMovementY")&&s.top!==l;return h&&s.set("left",o),c&&s.set("top",l),(h||c)&&cn(pa,rn(r,t,e,i)),h||c},Ro=ya,Bo=r=>function(t,e,i){let{points:s,pathOffset:n}=i;return new b(s[r]).subtract(n).transform($(i.getViewportTransform(),i.calcTransformMatrix()))},Xo=(r,t,e,i)=>{let{target:s,pointIndex:n}=t,a=s,o=Bt(new b(e,i),void 0,a.calcOwnMatrix());return a.points[n]=o.add(a.pathOffset),a.setDimensions(),a.set("dirty",!0),!0},$o=(r,t)=>function(e,i,s,n){let a=i.target,o=new b(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},Yo=r=>$t(Ro,$o(r,Xo));function kc(r,t={}){let e={};for(let i=0;i<(typeof r=="number"?r:r.points.length);i++)e[`p${i}`]=new lt({actionName:Ro,positionHandler:Bo(i),actionHandler:Yo(i),...t});return e}var Ps=(r,t,e)=>{let{path:i,pathOffset:s}=r,n=i[t];return new b(n[e]-s.x,n[e+1]-s.y).transform($(r.getViewportTransform(),r.calcTransformMatrix()))};function Oc(r,t,e){let{commandIndex:i,pointIndex:s}=this;return Ps(e,i,s)}function Mc(r,t,e,i){let{target:s}=t,{commandIndex:n,pointIndex:a}=this,o=((l,h,c,u,d)=>{let{path:g,pathOffset:p}=l,f=g[(u>0?u:g.length)-1],v=new b(f[d],f[d+1]),y=v.subtract(p).transform(l.calcOwnMatrix()),x=Bt(new b(h,c),void 0,l.calcOwnMatrix());g[u][d]=x.x+p.x,g[u][d+1]=x.y+p.y,l.setDimensions();let w=v.subtract(l.pathOffset).transform(l.calcOwnMatrix()).subtract(y);return l.left-=w.x,l.top-=w.y,l.set("dirty",!0),!0})(s,e,i,n,a);return o&&cn(this.actionName,{...rn(r,t,e,i),commandIndex:n,pointIndex:a}),o}var Wo=class extends lt{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)}},Pc=class extends Wo{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=Ps(s,l,h);if(c==="Q"){let d=Ps(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)}},Nr=(r,t,e,i,s,n)=>new(e?Pc:Wo)({commandIndex:r,pointIndex:t,actionName:"modifyPath",positionHandler:Oc,actionHandler:Mc,connectToCommandIndex:s,connectToPointIndex:n,...i,...e?i.controlPointStyle:i.pointStyle});function Ec(r,t={}){let e={},i="M";return r.path.forEach((s,n)=>{let a=s[0];switch(a!=="Z"&&(e[`c_${n}_${a}`]=Nr(n,s.length-2,!1,t)),a){case"C":e[`c_${n}_C_CP_1`]=Nr(n,1,!0,t,n-1,(o=>o==="C"?5:o==="Q"?3:1)(i)),e[`c_${n}_C_CP_2`]=Nr(n,3,!0,t,n,5);break;case"Q":e[`c_${n}_Q_CP_1`]=Nr(n,1,!0,t,n,3)}i=a}),e}var Qu=Ar({changeHeight:()=>$h,changeObjectHeight:()=>Qa,changeObjectWidth:()=>Za,changeWidth:()=>vs,createObjectDefaultControls:()=>dn,createPathControls:()=>Ec,createPolyActionHandler:()=>Yo,createPolyControls:()=>kc,createPolyPositionHandler:()=>Bo,createResizeControls:()=>go,createTextboxDefaultControls:()=>po,dragHandler:()=>Lo,factoryPolyActionHandler:()=>$o,getLocalPoint:()=>Ti,polyActionHandler:()=>Xo,renderCircleControl:()=>to,renderSquareControl:()=>eo,rotationStyleHandler:()=>ro,rotationWithSnapping:()=>io,scaleCursorStyleHandler:()=>Ce,scaleOrSkewActionName:()=>nr,scaleSkewCursorStyleHandler:()=>oe,scalingEqually:()=>sr,scalingX:()=>ao,scalingXOrSkewingY:()=>ys,scalingY:()=>oo,scalingYOrSkewingX:()=>bs,skewCursorStyleHandler:()=>lo,skewHandlerX:()=>co,skewHandlerY:()=>uo,wrapWithFireEvent:()=>$t,wrapWithFixedAnchor:()=>Kt}),zo=class Ho extends Fe{constructor(...t){super(...t),m(this,"_hoveredTargets",[]),m(this,"_currentTransform",null),m(this,"_groupSelector",null),m(this,"contextTopDirty",!1)}static getDefaults(){return{...super.getDefaults(),...Ho.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 Tc(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=mt:["mr","tr","br"].includes(e)&&(i.x=z),["tl","mt","tr"].includes(e)?i.y=ga:["bl","mb","br"].includes(e)&&(i.y="top")),i}_setupCurrentTransform(t,e,i){var s;let n=e.group?Bt(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):Lo,h=((k,M,A,E)=>{if(!M||!k)return"drag";let D=E.controls[M];return D.getActionName(A,D,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:p,skewY:f,left:v,top:y,angle:x,width:w,height:S,cropX:C,cropY:O}=e,T={target:e,action:h,actionHandler:l,actionPerformed:!1,corner:a,scaleX:d,scaleY:g,skewX:p,skewY:f,offsetX:n.x-v,offsetY:n.y-y,originX:u.x,originY:u.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:X(x),width:w,height:S,shiftKey:t.shiftKey,altKey:c,original:{...Ks(e),originX:u.x,originY:u.y,cropX:C,cropY:O}};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 b(e,i).transform(this.viewportTransform),o=new b(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,K.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),ci(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=bt(c)*n,d=xt(c)*n,g=u+d,p=u-d;i=[new b(a.x-p,a.y-g),new b(o.x+g,o.y-p),new b(l.x+p,l.y+g),new b(h.x-g,h.y+p)]}return Or.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(ri(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&&ri(s)&&s.interactive&&n[0]){for(let a=n.length-1;a>0;a--){let o=n[a];if(!ri(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=Ia(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=Bt(n,void 0,this.viewportTransform));let l=this.getRetinaScaling();l!==1&&(n.x/=l,n.y/=l);let h=a===0||o===0?new b(1,1):new b(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=Ot(),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 se(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,se(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),se(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(xa,s))}setViewportTransform(t){super.setViewportTransform(t);let e=this._activeObject;e&&e.setCoords()}destroy(){let t=this._activeObject;se(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&&se(e)&&this._activeObject===e){let i=pe(t,["angle","flipX","flipY",z,Ut,qt,Ae,je,"top"]);return Fa(t,e.calcOwnMatrix()),i}return{}}_setSVGObject(t,e,i){let s=this._realizeGroupTransformOnObject(e);super._setSVGObject(t,e,i),e.set(s)}};m(zo,"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 Dc=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),ie(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}},ot={passive:!1},be=(r,t)=>({viewportPoint:r.getViewportPoint(t),scenePoint:r.getScenePoint(t)}),Ht=(r,...t)=>r.addEventListener(...t),ut=(r,...t)=>r.removeEventListener(...t),Ac={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"}},mi=class extends zo{constructor(r,t={}){super(r,t),m(this,"_isClick",void 0),m(this,"textEditingManager",new Dc(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(Ht)}_getEventPrefix(){return this.enablePointerEvents?"pointer":"mouse"}addOrRemove(r,t=!1){let e=this.upperCanvasEl,i=this._getEventPrefix();r(Ea(e),"resize",this._onResize),r(e,i+"down",this._onMouseDown),r(e,`${i}move`,this._onMouseMove,ot),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,ot)}removeListeners(){this.addOrRemove(ut);let r=this._getEventPrefix(),t=pt(this.upperCanvasEl);ut(t,`${r}up`,this._onMouseUp),ut(t,"touchend",this._onTouchEnd,ot),ut(t,`${r}move`,this._onMouseMove,ot),ut(t,"touchmove",this._onMouseMove,ot),clearTimeout(this._willAddMouseDown)}_onMouseWheel(r){this._cacheTransformEventData(r),this._handleEvent(r,"wheel"),this._resetTransformEventData()}_onMouseOut(r){let t=this._hoveredTarget,e={e:r,...be(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,...be(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),Ht(this.upperCanvasEl,"drag",this._onDragProgress);return}$n(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};ut(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,...be(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&&$n(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,...be(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=pt(s);Ht(a,"touchend",this._onTouchEnd,ot),t&&Ht(a,"touchmove",this._onMouseMove,ot),ut(s,`${n}down`,this._onMouseDown),this._resetTransformEventData()}_onMouseDown(r){this._cacheTransformEventData(r),this.__onMouseDown(r);let t=this.upperCanvasEl,e=this._getEventPrefix();ut(t,`${e}move`,this._onMouseMove,ot);let i=pt(t);Ht(i,`${e}up`,this._onMouseUp),Ht(i,`${e}move`,this._onMouseMove,ot),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=pt(this.upperCanvasEl);ut(e,"touchend",this._onTouchEnd,ot),ut(e,"touchmove",this._onMouseMove,ot),this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(()=>{Ht(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=pt(this.upperCanvasEl);ut(i,`${e}up`,this._onMouseUp),ut(i,`${e}move`,this._onMouseMove,ot),Ht(t,`${e}move`,this._onMouseMove,ot)}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),ci(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,...be(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),ci(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=Bt(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}=Ac[r],d=e!==t,g=s!==i,p=t&&d,f=i&&g,v=e&&d,y=s&&g,x={...o,e:a,...be(this,a)},w={...x,target:e,nextTarget:t,actualTarget:s,nextActualTarget:i};(v||y)&&n&&this.fire(u,w),v&&e.fire(h,w),y&&e!==s&&s.fire(h,w);let S={...x,target:t,previousTarget:e,actualTarget:i,previousActualTarget:s};(p||f)&&n&&this.fire(c,S),p&&t.fire(l,S),f&&i!==t&&i.fire(l,S)}_transformObject(r){let t=this.getScenePoint(r),e=this._currentTransform,i=e.target,s=i.group?Bt(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=se(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=se(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 b(t,e),a=n.add(new b(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()}},Vo={x1:0,y1:0,x2:0,y2:0},jc={...Vo,r1:0,r2:0},Se=(r,t)=>isNaN(r)&&typeof t=="number"?t:r;function No(r){return r&&/%$/.test(r)&&Number.isFinite(parseFloat(r))}function Go(r,t){return de(0,Se(typeof r=="number"?r:typeof r=="string"?parseFloat(r)/(No(r)?100:1):NaN,t),1)}var Ic=/\s*;\s*/,Fc=/\s*:\s*/;function Lc(r,t){let e,i,s=r.getAttribute("style");if(s){let a=s.split(Ic);a[a.length-1]===""&&a.pop();for(let o=a.length;o--;){let[l,h]=a[o].split(Fc).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=Se(parseFloat(i||r.getAttribute("stop-opacity")||""),1);let n=new ct(e);return n.setAlpha(n.getAlpha()*i*t),{offset:Go(r.getAttribute("offset"),0),color:n.toRgba()}}function Rc(r,t){let e=[],i=r.getElementsByTagName("stop"),s=Go(t,1);for(let n=i.length;n--;)e.push(Lc(i[n],s));return e}function Uo(r){return r.nodeName==="linearGradient"||r.nodeName==="LINEARGRADIENT"?"linear":"radial"}function qo(r){return r.getAttribute("gradientUnits")==="userSpaceOnUse"?"pixels":"percentage"}function gt(r,t){return r.getAttribute(t)}function Bc(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&&No(h)&&(a*=.01,n==="pixels"&&(l!=="x1"&&l!=="x2"&&l!=="r2"||(a*=i),l!=="y1"&&l!=="y2"||(a*=s)))}return o[l]=a,o},{})})(Uo(r)==="linear"?(function(e){return{x1:gt(e,"x1")||0,y1:gt(e,"y1")||0,x2:gt(e,"x2")||"100%",y2:gt(e,"y2")||0}})(r):(function(e){return{x1:gt(e,"fx")||gt(e,"cx")||"50%",y1:gt(e,"fy")||gt(e,"cy")||"50%",r1:0,x2:gt(e,"cx")||"50%",y2:gt(e,"cy")||"50%",r2:gt(e,"r")||"50%"}})(r),{...t,gradientUnits:qo(r)})}var ar=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"?jc:Vo,...i},colorStops:s,offsetX:n,offsetY:a,gradientTransform:o,id:l?`${l}_${Nt()}`:Nt()})}addColorStop(r){for(let t in r)this.colorStops.push({offset:parseFloat(t),color:r[t]});return this}toObject(r){return{...pe(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():it.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+" ":""}${Me(i)}"`,""].join(" "),c=u=>parseFloat(String(u));if(this.type==="linear"){let{x1:u,y1:d,x2:g,y2:p}=this.coords,f=c(u),v=c(d),y=c(g),x=c(p);e.push("<linearGradient ",h,' x1="',f,'" y1="',v,'" x2="',y,'" y2="',x,`">
|
|
42
|
-
`)}else if(this.type==="radial"){let{x1:u,y1:d,x2:g,y2:p,r1:f,r2:v}=this.coords,y=c(u),x=c(d),
|
|
43
|
-
`),T&&(n.reverse(),n.forEach(M=>{M.offset=1-M.offset}));let k=Math.min(C,O);if(k>0){let M=k/Math.max(C,O);n.forEach(A=>{A.offset+=M*(1-A.offset)})}}return n.forEach(({color:u,offset:d})=>{let g=String(u),p=
|
|
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([Me(e,n),Fr(s,n)]).then(([a,o])=>{let l=new this(a,{...s,...o,layoutManager:new cc});return l.layoutManager=i?new(_.getClass(i.type))(new(_.getClass(i.strategy))):new Ar,l.layoutManager.subscribeTargets({type:ia,target:l,targets:l.getObjects()}),l.setCoords(),l})}};m(Ft,"type","Group"),m(Ft,"ownDefaults",{strokeWidth:0,subTargetCheck:!1,interactive:!1}),_.setClass(Ft);var uc=(r,t)=>r&&r.length===1?r[0]:new Ft(r,t),Po=(r,t)=>Math.min(t.width/r.width,t.height/r.height),Eo=(r,t)=>Math.max(t.width/r.width,t.height/r.height),Ps="\\s*,?\\s*",ir=`${Ps}(${ft})`,dc=`${ir}${ir}${ir}${Ps}([01])${Ps}([01])${ir}${ir}`,gc={m:"l",M:"L"},pc=(r,t,e,i,s,n,a,o,l,h,c)=>{let u=bt(r),d=xt(r),g=bt(t),p=xt(t),f=e*s*g-i*n*p+a,v=i*s*g+e*n*p+o;return["C",h+l*(-e*s*d-i*n*u),c+l*(-i*s*d+e*n*u),f+l*(e*s*p+i*n*g),v+l*(i*s*p-e*n*g),f,v]},sa=(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 Es(r,t,e,i,s,n,a,o){let l;if(L.cachesBoundsOfCurve&&(l=[...arguments].join(),Tr.boundsOfCurveCache[l]))return Tr.boundsOfCurveCache[l];let h=Math.sqrt,c=Math.abs,u=[],d=[[0,0],[0,0]],g=6*r-12*e+6*s,p=-3*r+9*e-9*s+3*a,f=3*e-3*r;for(let w=0;w<2;++w){if(w>0&&(g=6*t-12*i+6*n,p=-3*t+9*i-9*n+3*o,f=3*i-3*t),c(p)<1e-12){if(c(g)<1e-12)continue;let M=-f/g;0<M&&M<1&&u.push(M);continue}let C=g*g-4*f*p;if(C<0)continue;let O=h(C),T=(-g+O)/(2*p);0<T&&T<1&&u.push(T);let k=(-g-O)/(2*p);0<k&&k<1&&u.push(k)}let v=u.length,y=v,x=Ao(r,t,e,i,s,n,a,o);for(;v--;){let{x:w,y:C}=x(u[v]);d[0][v]=w,d[1][v]=C}d[0][y]=r,d[1][y]=t,d[0][y+1]=a,d[1][y+1]=o;let S=[new b(Math.min(...d[0]),Math.min(...d[1])),new b(Math.max(...d[0]),Math.max(...d[1]))];return L.cachesBoundsOfCurve&&(Tr.boundsOfCurveCache[l]=S),S}var fc=(r,t,[e,i,s,n,a,o,l,h])=>{let c=((u,d,g,p,f,v,y)=>{if(g===0||p===0)return[];let x=0,S=0,w=0,C=Math.PI,O=y*zs,T=xt(O),k=bt(O),M=.5*(-k*u-T*d),A=.5*(-k*d+T*u),E=g**2,D=p**2,j=A**2,B=M**2,G=E*D-E*j-D*B,$=Math.abs(g),Z=Math.abs(p);if(G<0){let zt=Math.sqrt(1-G/(E*D));$*=zt,Z*=zt}else w=(f===v?-1:1)*Math.sqrt(G/(E*j+D*B));let at=w*$*A/Z,I=-w*Z*M/$,St=k*at-T*I+.5*u,Ze=T*at+k*I+.5*d,Qe=sa(1,0,(M-at)/$,(A-I)/Z),Wt=sa((M-at)/$,(A-I)/Z,(-M-at)/$,(-A-I)/Z);v===0&&Wt>0?Wt-=2*C:v===1&&Wt<0&&(Wt+=2*C);let tr=Math.ceil(Math.abs(Wt/C*2)),Vr=[],er=Wt/tr,Ol=8/3*Math.sin(er/4)*Math.sin(er/4)/Math.sin(er/2),is=Qe+er;for(let zt=0;zt<tr;zt++)Vr[zt]=pc(Qe,is,k,T,$,Z,St,Ze,Ol,x,S),x=Vr[zt][5],S=Vr[zt][6],Qe=is,is+=er;return Vr})(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},Do=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":fc(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},mi=(r,t,e,i)=>Math.sqrt((e-r)**2+(i-t)**2),Ao=(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 b(a*h+s*c+e*u+r*d,o*h+n*c+i*u+t*d)},jo=r=>r**2,Lo=r=>2*r*(1-r),Fo=r=>(1-r)**2,mc=(r,t,e,i,s,n,a,o)=>l=>{let h=jo(l),c=Lo(l),u=Fo(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)},vc=(r,t,e,i,s,n)=>a=>{let o=jo(a),l=Lo(a),h=Fo(a);return new b(s*o+e*l+r*h,n*o+i*l+t*h)},yc=(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)},na=(r,t,e)=>{let i=new b(t,e),s=0;for(let n=1;n<=100;n+=1){let a=r(n/100);s+=mi(i.x,i.y,a.x,a.y),i=a}return s},bc=(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=mi(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)}},yn=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=mi(s,n,h[1],h[2]),s=h[1],n=h[2];break;case"C":t=Ao(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e=c,e.iterator=t,e.angleFinder=mc(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e.length=na(t,s,n),s=h[5],n=h[6];break;case"Q":t=vc(s,n,h[1],h[2],h[3],h[4]),e=c,e.iterator=t,e.angleFinder=yc(s,n,h[1],h[2],h[3],h[4]),e.length=na(t,s,n),s=h[3],n=h[4];break;case"Z":e=c,e.destX=a,e.destY=o,e.length=mi(s,n,a,o),s=a,n=o}i+=e.length,l.push(e)}return l.push({length:i,x:s,y:n}),l},Io=(r,t,e=yn(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 b(s.x,s.y).lerp(new b(s.destX,s.destY),n),angle:Math.atan2(s.destY-s.y,s.destX-s.x)};case"L":return{...new b(s.x,s.y).lerp(new b(a[1],a[2]),n),angle:Math.atan2(a[2]-s.y,a[1]-s.x)};case"C":case"Q":return bc(s,t)}},xc=RegExp("[mzlhvcsqta][^mzlhvcsqta]*","gi"),aa=new RegExp(dc,"g"),Sc=new RegExp(ft,"gi"),Cc={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},Ro=r=>{var t;let e=[],i=(t=r.match(xc))==null?[]:t;for(let s of i){let n=s[0];if(n==="z"||n==="Z"){e.push([n]);continue}let a=Cc[n.toLowerCase()],o=[];if(n==="a"||n==="A"){let l;for(aa.lastIndex=0;l=aa.exec(s);)o.push(...l.slice(1))}else o=s.match(Sc)||[];for(let l=0;l<o.length;l+=a){let h=Array(a),c=gc[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},wc=(r,t=0)=>{let e=new b(r[0]),i=new b(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},_c=(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}=q({x:i[n],y:i[n+1]},t);s[n]=a,s[n+1]=o}return s})),Tc=(r,t)=>{let e=2*Math.PI/r,i=-Gt;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 b(bt(a),xt(a)).scalarMultiply(t);s[n]=[n===0?"M":"L",o,l]}return s[r]=["Z"],s},Bo=(r,t)=>r.map(e=>e.map((i,s)=>s===0||t===void 0?i:R(i,t)).join(" ")).join(" "),kc=(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 Ft([i],{clipPath:s,inverted:n})},Oc=(r,t)=>Math.floor(Math.random()*(t-r+1))+r,oi=(r,t)=>{let e=r._findCenterFromElement();r.transformMatrix&&((i=>{if(i.transformMatrix){let{scaleX:s,scaleY:n,angle:a,skewX:o}=ue(i.transformMatrix);i.flipX=!1,i.flipY=!1,i.set(Ut,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)},Zt=jr({addTransformToObject:()=>Ba,animate:()=>dn,animateColor:()=>Qa,applyTransformToObject:()=>Ee,calcAngleBetweenVectors:()=>gi,calcDimensionsMatrix:()=>Lr,calcPlaneChangeMatrix:()=>Ir,calcVectorRotation:()=>rn,cancelAnimFrame:()=>ka,capValue:()=>de,composeMatrix:()=>Da,copyCanvasElement:()=>Wl,cos:()=>bt,createCanvasElement:()=>Ot,createImage:()=>Oa,createRotateMatrix:()=>ge,createScaleMatrix:()=>Ci,createSkewXMatrix:()=>Ks,createSkewYMatrix:()=>Js,createTranslateMatrix:()=>Fe,createVector:()=>Er,crossProduct:()=>Oe,degreesToRadians:()=>X,dotProduct:()=>Wa,ease:()=>lh,enlivenObjectEnlivables:()=>Fr,enlivenObjects:()=>Me,findScaleToCover:()=>Eo,findScaleToFit:()=>Po,getBoundsOfCurve:()=>Es,getOrthonormalVector:()=>sn,getPathSegmentsInfo:()=>yn,getPointOnPath:()=>Io,getPointer:()=>Ra,getRandomInt:()=>Oc,getRegularPolygonPath:()=>Tc,getSmoothPathFromPoints:()=>wc,getSvgAttributes:()=>Ql,getUnitVector:()=>Ti,groupSVGElements:()=>uc,hasStyleChanged:()=>Di,invertTransform:()=>nt,isBetweenVectors:()=>ys,isIdentityMatrix:()=>Ma,isTouchEvent:()=>ui,isTransparent:()=>xo,joinPath:()=>Bo,loadImage:()=>Or,magnitude:()=>di,makeBoundingBoxFromPoints:()=>_t,makePathSimpler:()=>Do,matrixToSVG:()=>Pe,mergeClipPaths:()=>kc,multiplyTransformMatrices:()=>Y,multiplyTransformMatrixArray:()=>Si,parsePath:()=>Ro,parsePreserveAspectRatioAttribute:()=>on,parseUnit:()=>tt,pick:()=>pe,projectStrokeOnPoints:()=>wo,qrDecompose:()=>ue,radiansToDegrees:()=>Rt,removeFromArray:()=>ie,removeTransformFromObject:()=>ql,removeTransformMatrixForSvgParsing:()=>oi,requestAnimFrame:()=>kr,resetObjectTransform:()=>Xa,rotateVector:()=>en,saveObjectTransform:()=>Qs,sendObjectToPlane:()=>tn,sendPointToPlane:()=>Bt,sendVectorToPlane:()=>Ya,sin:()=>xt,sizeAfterTransform:()=>_i,string:()=>Hl,stylesFromArray:()=>To,stylesToArray:()=>_o,toBlob:()=>Gs,toDataURL:()=>Ns,toFixed:()=>R,transformPath:()=>_c,transformPoint:()=>q});function Ds(r,t){let e=r.style;e&&Object.entries(t).forEach(([i,s])=>e.setProperty(i,s))}var Mc=class extends Fa{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=Ot();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=Ae().createElement("div");return r.setAttribute("data-fabric","wrapper"),Ds(r,{position:"relative"}),Wn(r),r}applyCanvasStyle(r,t){let{styles:e,allowTouchScrolling:i}=t;Ds(r,{...e,"touch-action":i?"manipulation":bi}),Wn(r)}setDimensions(r,t){super.setDimensions(r,t);let{el:e,ctx:i}=this.upper;La(e,i,r,t)}setCSSDimensions(r){super.setCSSDimensions(r),vs(this.upper.el,r),vs(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(),Tt().dispose(this.upper.el),delete this.upper,delete this.container}},Xo=(r,t,e,i)=>{let{target:s,offsetX:n,offsetY:a}=t,o=e-n,l=i-a,h=!vt(s,"lockMovementX")&&s.left!==o,c=!vt(s,"lockMovementY")&&s.top!==l;return h&&s.set("left",o),c&&s.set("top",l),(h||c)&&gn(va,an(r,t,e,i)),h||c},Yo=Sa,$o=r=>function(t,e,i){let{points:s,pathOffset:n}=i;return new b(s[r]).subtract(n).transform(Y(i.getViewportTransform(),i.calcTransformMatrix()))},Wo=(r,t,e,i)=>{let{target:s,pointIndex:n}=t,a=s,o=Bt(new b(e,i),void 0,a.calcOwnMatrix());return a.points[n]=o.add(a.pathOffset),a.setDimensions(),a.set("dirty",!0),!0},zo=(r,t)=>function(e,i,s,n){let a=i.target,o=new b(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},Ho=r=>Yt(Yo,zo(r,Wo));function Pc(r,t={}){let e={};for(let i=0;i<(typeof r=="number"?r:r.points.length);i++)e[`p${i}`]=new lt({actionName:Yo,positionHandler:$o(i),actionHandler:Ho(i),...t});return e}var As=(r,t,e)=>{let{path:i,pathOffset:s}=r,n=i[t];return new b(n[e]-s.x,n[e+1]-s.y).transform(Y(r.getViewportTransform(),r.calcTransformMatrix()))};function Ec(r,t,e){let{commandIndex:i,pointIndex:s}=this;return As(e,i,s)}function Dc(r,t,e,i){let{target:s}=t,{commandIndex:n,pointIndex:a}=this,o=((l,h,c,u,d)=>{let{path:g,pathOffset:p}=l,f=g[(u>0?u:g.length)-1],v=new b(f[d],f[d+1]),y=v.subtract(p).transform(l.calcOwnMatrix()),x=Bt(new b(h,c),void 0,l.calcOwnMatrix());g[u][d]=x.x+p.x,g[u][d+1]=x.y+p.y,l.setDimensions();let S=v.subtract(l.pathOffset).transform(l.calcOwnMatrix()).subtract(y);return l.left-=S.x,l.top-=S.y,l.set("dirty",!0),!0})(s,e,i,n,a);return o&&gn(this.actionName,{...an(r,t,e,i),commandIndex:n,pointIndex:a}),o}var Vo=class extends lt{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)}},Ac=class extends Vo{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=As(s,l,h);if(c==="Q"){let d=As(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)}},Gr=(r,t,e,i,s,n)=>new(e?Ac:Vo)({commandIndex:r,pointIndex:t,actionName:"modifyPath",positionHandler:Ec,actionHandler:Dc,connectToCommandIndex:s,connectToPointIndex:n,...i,...e?i.controlPointStyle:i.pointStyle});function jc(r,t={}){let e={},i="M";return r.path.forEach((s,n)=>{let a=s[0];switch(a!=="Z"&&(e[`c_${n}_${a}`]=Gr(n,s.length-2,!1,t)),a){case"C":e[`c_${n}_C_CP_1`]=Gr(n,1,!0,t,n-1,(o=>o==="C"?5:o==="Q"?3:1)(i)),e[`c_${n}_C_CP_2`]=Gr(n,3,!0,t,n,5);break;case"Q":e[`c_${n}_Q_CP_1`]=Gr(n,1,!0,t,n,3)}i=a}),e}var rd=jr({changeHeight:()=>zh,changeObjectHeight:()=>ro,changeObjectWidth:()=>eo,changeWidth:()=>xs,createObjectDefaultControls:()=>fn,createPathControls:()=>jc,createPolyActionHandler:()=>Ho,createPolyControls:()=>Pc,createPolyPositionHandler:()=>$o,createResizeControls:()=>mo,createTextboxDefaultControls:()=>vo,dragHandler:()=>Xo,factoryPolyActionHandler:()=>zo,getLocalPoint:()=>ki,polyActionHandler:()=>Wo,renderCircleControl:()=>io,renderSquareControl:()=>so,rotationStyleHandler:()=>no,rotationWithSnapping:()=>ao,scaleCursorStyleHandler:()=>we,scaleOrSkewActionName:()=>ar,scaleSkewCursorStyleHandler:()=>oe,scalingEqually:()=>nr,scalingX:()=>ho,scalingXOrSkewingY:()=>Ss,scalingY:()=>co,scalingYOrSkewingX:()=>Cs,skewCursorStyleHandler:()=>uo,skewHandlerX:()=>po,skewHandlerY:()=>fo,wrapWithFireEvent:()=>Yt,wrapWithFixedAnchor:()=>Kt}),No=class Go extends Ie{constructor(...t){super(...t),m(this,"_hoveredTargets",[]),m(this,"_currentTransform",null),m(this,"_groupSelector",null),m(this,"contextTopDirty",!1)}static getDefaults(){return{...super.getDefaults(),...Go.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 Mc(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 xo(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=mt:["mr","tr","br"].includes(e)&&(i.x=z),["tl","mt","tr"].includes(e)?i.y=ma:["bl","mb","br"].includes(e)&&(i.y="top")),i}_setupCurrentTransform(t,e,i){var s;let n=e.group?Bt(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):Xo,h=((k,M,A,E)=>{if(!M||!k)return"drag";let D=E.controls[M];return D.getActionName(A,D,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:p,skewY:f,left:v,top:y,angle:x,width:S,height:w,cropX:C,cropY:O}=e,T={target:e,action:h,actionHandler:l,actionPerformed:!1,corner:a,scaleX:d,scaleY:g,skewX:p,skewY:f,offsetX:n.x-v,offsetY:n.y-y,originX:u.x,originY:u.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:X(x),width:S,height:w,shiftKey:t.shiftKey,altKey:c,original:{...Qs(e),originX:u.x,originY:u.y,cropX:C,cropY:O}};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 b(e,i).transform(this.viewportTransform),o=new b(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,K.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),ui(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=bt(c)*n,d=xt(c)*n,g=u+d,p=u-d;i=[new b(a.x-p,a.y-g),new b(o.x+g,o.y-p),new b(l.x+p,l.y+g),new b(h.x-g,h.y+p)]}return Mr.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(ii(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&&ii(s)&&s.interactive&&n[0]){for(let a=n.length-1;a>0;a--){let o=n[a];if(!ii(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=Ra(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=Bt(n,void 0,this.viewportTransform));let l=this.getRetinaScaling();l!==1&&(n.x/=l,n.y/=l);let h=a===0||o===0?new b(1,1):new b(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=Ot(),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 se(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,se(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),se(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(wa,s))}setViewportTransform(t){super.setViewportTransform(t);let e=this._activeObject;e&&e.setCoords()}destroy(){let t=this._activeObject;se(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&&se(e)&&this._activeObject===e){let i=pe(t,["angle","flipX","flipY",z,Ut,qt,je,Le,"top"]);return Ba(t,e.calcOwnMatrix()),i}return{}}_setSVGObject(t,e,i){let s=this._realizeGroupTransformOnObject(e);super._setSVGObject(t,e,i),e.set(s)}};m(No,"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 Lc=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),ie(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}},ot={passive:!1},xe=(r,t)=>({viewportPoint:r.getViewportPoint(t),scenePoint:r.getScenePoint(t)}),Ht=(r,...t)=>r.addEventListener(...t),ut=(r,...t)=>r.removeEventListener(...t),Fc={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"}},vi=class extends No{constructor(r,t={}){super(r,t),m(this,"_isClick",void 0),m(this,"textEditingManager",new Lc(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(Ht)}_getEventPrefix(){return this.enablePointerEvents?"pointer":"mouse"}addOrRemove(r,t=!1){let e=this.upperCanvasEl,i=this._getEventPrefix();r(ja(e),"resize",this._onResize),r(e,i+"down",this._onMouseDown),r(e,`${i}move`,this._onMouseMove,ot),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,ot)}removeListeners(){this.addOrRemove(ut);let r=this._getEventPrefix(),t=pt(this.upperCanvasEl);ut(t,`${r}up`,this._onMouseUp),ut(t,"touchend",this._onTouchEnd,ot),ut(t,`${r}move`,this._onMouseMove,ot),ut(t,"touchmove",this._onMouseMove,ot),clearTimeout(this._willAddMouseDown)}_onMouseWheel(r){this._cacheTransformEventData(r),this._handleEvent(r,"wheel"),this._resetTransformEventData()}_onMouseOut(r){let t=this._hoveredTarget,e={e:r,...xe(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,...xe(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),Ht(this.upperCanvasEl,"drag",this._onDragProgress);return}zn(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};ut(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,...xe(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&&zn(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,...xe(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=pt(s);Ht(a,"touchend",this._onTouchEnd,ot),t&&Ht(a,"touchmove",this._onMouseMove,ot),ut(s,`${n}down`,this._onMouseDown),this._resetTransformEventData()}_onMouseDown(r){this._cacheTransformEventData(r),this.__onMouseDown(r);let t=this.upperCanvasEl,e=this._getEventPrefix();ut(t,`${e}move`,this._onMouseMove,ot);let i=pt(t);Ht(i,`${e}up`,this._onMouseUp),Ht(i,`${e}move`,this._onMouseMove,ot),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=pt(this.upperCanvasEl);ut(e,"touchend",this._onTouchEnd,ot),ut(e,"touchmove",this._onMouseMove,ot),this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(()=>{Ht(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=pt(this.upperCanvasEl);ut(i,`${e}up`,this._onMouseUp),ut(i,`${e}move`,this._onMouseMove,ot),Ht(t,`${e}move`,this._onMouseMove,ot)}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),ui(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,...xe(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),ui(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=Bt(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}=Fc[r],d=e!==t,g=s!==i,p=t&&d,f=i&&g,v=e&&d,y=s&&g,x={...o,e:a,...xe(this,a)},S={...x,target:e,nextTarget:t,actualTarget:s,nextActualTarget:i};(v||y)&&n&&this.fire(u,S),v&&e.fire(h,S),y&&e!==s&&s.fire(h,S);let w={...x,target:t,previousTarget:e,actualTarget:i,previousActualTarget:s};(p||f)&&n&&this.fire(c,w),p&&t.fire(l,w),f&&i!==t&&i.fire(l,w)}_transformObject(r){let t=this.getScenePoint(r),e=this._currentTransform,i=e.target,s=i.group?Bt(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=se(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=se(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 b(t,e),a=n.add(new b(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()}},Uo={x1:0,y1:0,x2:0,y2:0},Ic={...Uo,r1:0,r2:0},_e=(r,t)=>isNaN(r)&&typeof t=="number"?t:r;function qo(r){return r&&/%$/.test(r)&&Number.isFinite(parseFloat(r))}function Ko(r,t){return de(0,_e(typeof r=="number"?r:typeof r=="string"?parseFloat(r)/(qo(r)?100:1):NaN,t),1)}var Rc=/\s*;\s*/,Bc=/\s*:\s*/;function Xc(r,t){let e,i,s=r.getAttribute("style");if(s){let a=s.split(Rc);a[a.length-1]===""&&a.pop();for(let o=a.length;o--;){let[l,h]=a[o].split(Bc).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=_e(parseFloat(i||r.getAttribute("stop-opacity")||""),1);let n=new ct(e);return n.setAlpha(n.getAlpha()*i*t),{offset:Ko(r.getAttribute("offset"),0),color:n.toRgba()}}function Yc(r,t){let e=[],i=r.getElementsByTagName("stop"),s=Ko(t,1);for(let n=i.length;n--;)e.push(Xc(i[n],s));return e}function Jo(r){return r.nodeName==="linearGradient"||r.nodeName==="LINEARGRADIENT"?"linear":"radial"}function Zo(r){return r.getAttribute("gradientUnits")==="userSpaceOnUse"?"pixels":"percentage"}function gt(r,t){return r.getAttribute(t)}function $c(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&&qo(h)&&(a*=.01,n==="pixels"&&(l!=="x1"&&l!=="x2"&&l!=="r2"||(a*=i),l!=="y1"&&l!=="y2"||(a*=s)))}return o[l]=a,o},{})})(Jo(r)==="linear"?(function(e){return{x1:gt(e,"x1")||0,y1:gt(e,"y1")||0,x2:gt(e,"x2")||"100%",y2:gt(e,"y2")||0}})(r):(function(e){return{x1:gt(e,"fx")||gt(e,"cx")||"50%",y1:gt(e,"fy")||gt(e,"cy")||"50%",r1:0,x2:gt(e,"cx")||"50%",y2:gt(e,"cy")||"50%",r2:gt(e,"r")||"50%"}})(r),{...t,gradientUnits:Zo(r)})}var or=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"?Ic:Uo,...i},colorStops:s,offsetX:n,offsetY:a,gradientTransform:o,id:l?`${l}_${Nt()}`:Nt()})}addColorStop(r){for(let t in r)this.colorStops.push({offset:parseFloat(t),color:r[t]});return this}toObject(r){return{...pe(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():it.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+" ":""}${Pe(i)}"`,""].join(" "),c=u=>parseFloat(String(u));if(this.type==="linear"){let{x1:u,y1:d,x2:g,y2:p}=this.coords,f=c(u),v=c(d),y=c(g),x=c(p);e.push("<linearGradient ",h,' x1="',f,'" y1="',v,'" x2="',y,'" y2="',x,`">
|
|
42
|
+
`)}else if(this.type==="radial"){let{x1:u,y1:d,x2:g,y2:p,r1:f,r2:v}=this.coords,y=c(u),x=c(d),S=c(g),w=c(p),C=c(f),O=c(v),T=C>O;e.push("<radialGradient ",h,' cx="',T?y:S,'" cy="',T?x:w,'" r="',T?C:O,'" fx="',T?S:y,'" fy="',T?w:x,`">
|
|
43
|
+
`),T&&(n.reverse(),n.forEach(M=>{M.offset=1-M.offset}));let k=Math.min(C,O);if(k>0){let M=k/Math.max(C,O);n.forEach(A=>{A.offset+=M*(1-A.offset)})}}return n.forEach(({color:u,offset:d})=>{let g=String(u),p=Oi(g)?g:new ct(g).toRgba();e.push(`<stop offset="${100*d}%" style="stop-color:${P(p)};"/>
|
|
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=
|
|
46
|
-
`)}static async fromObject({type:r,source:t,patternTransform:e,...i},s){let n=await
|
|
47
|
-
`]}_getOffsetTransform(){let t=
|
|
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=Zo(r),s=t._findCenterFromElement();return new this({id:r.getAttribute("id")||void 0,type:Jo(r),coords:$c(r,{width:e.viewBoxWidth||e.width,height:e.viewBoxHeight||e.height}),colorStops:Yc(r,e.opacity),gradientUnits:i,gradientTransform:fi(r.getAttribute("gradientTransform")||""),...i==="pixels"?{offsetX:t.width/2-s.x,offsetY:t.height/2-s.y}:{offsetX:0,offsetY:0}})}};m(or,"type","Gradient"),_.setClass(or,"gradient"),_.setClass(or,"linear"),_.setClass(or,"radial");var hs=class{get type(){return"pattern"}set type(r){It("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=Nt(),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{...pe(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=_e(this.offsetX/r,0),a=_e(this.offsetY/t,0),o=i==="repeat-y"||i==="no-repeat"?1+Math.abs(n||0):_e(e.width/r,0),l=i==="repeat-x"||i==="no-repeat"?1+Math.abs(a||0):_e(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 Or(t,{...s,crossOrigin:i.crossOrigin});return new this({...i,patternTransform:e&&e.slice(0),source:n})}};m(hs,"type","Pattern"),_.setClass(hs),_.setClass(hs,"pattern");var Lt=class Qo extends K{constructor(t,{path:e,left:i,top:s,...n}={}){super(),Object.assign(this,Qo.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=Do(Array.isArray(t)?t:Ro(t)),this.setBoundingBox(e)}_findCenterFromElement(){let t=this._calcBoundsFromPath();return new b(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="${Bo(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(...Es(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(...Es(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 _t(t)}_calcDimensions(){let t=this._calcBoundsFromPath();return{...t,pathOffset:new b(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}=$t(t,this.ATTRIBUTE_NAMES,i);return new this(s,{...n,...e,left:void 0,top:void 0})}};m(Lt,"type","Path"),m(Lt,"cacheProperties",[...Xt,"path","fillRule"]),m(Lt,"ATTRIBUTE_NAMES",[...Jt,"d"]),_.setClass(Lt),_.setSVGClass(Lt);var tl=["radius","startAngle","endAngle","counterClockwise"],Se=class js extends K{static getDefaults(){return{...super.getDefaults(),...js.ownDefaults}}constructor(t){super(),Object.assign(this,js.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(Ut)}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([...tl,...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=bt(n)*t,l=xt(n)*t,h=bt(a)*t,c=xt(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}
|
|
50
|
-
`]}static async fromElement(t,e,i){let{x1:s=0,y1:n=0,x2:a=0,y2:o=0,...l}
|
|
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,yt,!1),t.restore(),this._renderPaintInOrder(t)}static async fromElement(t,e,i){let 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}
|
|
53
|
-
`}var ls,Ct=class or extends el{static getDefaults(){return{...super.getDefaults(),...or.ownDefaults}}constructor(t,e){super(),m(this,"__charBounds",[]),Object.assign(this,or.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=fn(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=ga}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,p=this.getValueOfPropertyAt(n,0,"textBackgroundColor"),f=this.getHeightOfLineImpl(n);for(let v=0;v<l;v++){let y=this.__charBounds[n][v];u=this.getValueOfPropertyAt(n,v,"textBackgroundColor"),this.path?(t.save(),t.translate(y.renderLeft,y.renderTop),t.rotate(y.angle),t.fillStyle=u,u&&t.fillRect(-y.width/2,-f*(1-this._fontSizeFraction),y.width,f),t.restore()):u===p?d+=y.kernedWidth:(c=i+h+g,this.direction==="rtl"&&(c=this.width-c-d),t.fillStyle=p,p&&t.fillRect(c,s,d,f),g=y.left,d=y.width,p=u)}u&&!this.path&&(c=i+h+g,this.direction==="rtl"&&(c=this.width-c-d),t.fillStyle=u,t.fillRect(c,s,d,f)),s+=o}t.fillStyle=e,this._removeShadow(t)}_measureChar(t,e,i,s){let n=_r.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 p=(ls||(ls=ht({width:0,height:0}).getContext("2d")),ls);this._setTextStyles(p,e,!0),c===void 0&&(g=c=p.measureText(t).width,n.set(t,c)),d===void 0&&l&&i&&(d=p.measureText(i).width,n.set(i,d)),l&&u===void 0&&(u=p.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===mt,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 mt: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=jo(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(nn),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,p,f,v,y,x="",w=0;if(e.save(),d!==this.direction&&(e.canvas.setAttribute("dir",c?"ltr":"rtl"),e.direction=c?"ltr":"rtl",e.textAlign=c?z:mt),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,C=i.length-1;S<=C;S++)v=S===C||this.charSpacing||l,x+=i[S],f=this.__charBounds[a][S],w===0?(s+=u*(f.kernedWidth-f.width),w+=f.width):w+=f.kernedWidth,o&&!v&&this._reSpaceAndTab.test(i[S])&&(v=!0),v||(g=g||this.getCompleteStyleDeclaration(a,S),p=this.getCompleteStyleDeclaration(a,S+1),v=Ei(g,p,!1)),v&&(l?(e.save(),e.translate(f.renderLeft,f.renderTop),e.rotate(f.angle),this._renderChar(t,e,a,S,x,-w/2,0),e.restore()):(y=s,this._renderChar(t,e,a,S,x,y,n)),x="",g=p,s+=u*w,w=0);e.restore()}_applyPatternGradientTransformText(t){let e=this.width+this.strokeWidth,i=this.height+this.strokeWidth,s=ht({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 dt(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,p=this._getLineLeftOffset(h),f,v=0,y=0,x=this.getValueOfPropertyAt(h,0,e),w=this.getValueOfPropertyAt(h,0,st),S=this.getValueOfPropertyAt(h,0,"textDecorationColor")||w,C=this.getValueOfPropertyAt(h,0,Ee),O=x,T=S,k=C,M=i+g*(1-this._fontSizeFraction),A=this.getHeightOfChar(h,0),E=this.getValueOfPropertyAt(h,0,"deltaY");for(let B=0,G=d.length;B<G;B++){let Y=this.__charBounds[h][B];O=this.getValueOfPropertyAt(h,B,e),f=this.getValueOfPropertyAt(h,B,st),T=this.getValueOfPropertyAt(h,B,"textDecorationColor")||f,k=this.getValueOfPropertyAt(h,B,Ee);let Z=this.getHeightOfChar(h,B),at=this.getValueOfPropertyAt(h,B,"deltaY");if(n&&O&&f){let L=this.fontSize*k/1e3;t.save(),t.fillStyle=T,t.translate(Y.renderLeft,Y.renderTop),t.rotate(Y.angle),t.fillRect(-Y.kernedWidth/2,l*Z+at-o*L,Y.kernedWidth,L),t.restore()}else if((O!==x||f!==w||T!==S||Z!==A||k!==C||at!==E)&&y>0){let L=this.fontSize*C/1e3,wt=s+p+v;this.direction==="rtl"&&(wt=this.width-wt-y),x&&S&&C&&(t.fillStyle=S,t.fillRect(wt,M+l*A+E-o*L,y,L)),v=Y.left,y=Y.width,x=O,S=T,C=k,w=f,A=Z,E=at}else y+=Y.kernedWidth}let D=s+p+v;this.direction==="rtl"&&(D=this.width-D-y),t.fillStyle=T;let j=this.fontSize*k/1e3;O&&T&&k&&t.fillRect(D,M+l*A+E-o*j,y-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(",")||or.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 Ci(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([...
|
|
55
|
-
`]}_getSVGTextAndBg(r,t){let e=[],i=[],s,n=r;this.backgroundColor&&i.push(os(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=I.NUM_FRACTION_DIGITS,a=this.getSvgSpanStyles(t,r!==r.trim()||!!r.match(Xc)),o=a?`style="${a}"`:"",l=t.deltaY,h=l?` dy="${R(l,n)}" `:"",{angle:c,renderLeft:u,renderTop:d,width:g}=s,p="";if(u!==void 0){let f=g/2;c&&(p=` rotate="${R(Rt(c),n)}"`);let v=ge({angle:Rt(c)});v[4]=u,v[5]=d;let y=new b(-f,0).transform(v);e=y.x,i=y.y}return`<tspan x="${R(e,n)}" y="${R(i,n)}" ${h}${p}${o}>${P(r)}</tspan>`}_setSVGTextLineText(r,t,e,i){let s=this.getHeightOfLine(t),n=this.textAlign.includes(nn),a=this._textLines[t],o,l,h,c,u,d="",g=0;i+=s*(1-this._fontSizeFraction)/this.lineHeight;for(let p=0,f=a.length-1;p<=f;p++)u=p===f||this.charSpacing||this.path,d+=a[p],h=this.__charBounds[t][p],g===0?(e+=h.kernedWidth-h.width,g+=h.width):g+=h.kernedWidth,n&&!u&&this._reSpaceAndTab.test(a[p])&&(u=!0),u||(o=o||this.getCompleteStyleDeclaration(t,p),l=this.getCompleteStyleDeclaration(t,p+1),u=Ei(o,l,!0)),u&&(c=this._getStyleDeclaration(t,p),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(os(h,e+l,i,o,n)),l=u,o=d,h=a)}a&&r.push(os(h,e+l,i,o,n))}getSvgStyles(r){let t=ki(this.textDecorationColor)?` text-decoration-color: ${P(this[Mi])};`:"";return`${super.getSvgStyles(r)} text-decoration-thickness: ${R(this.textDecorationThickness*this.getObjectScaling().y/10,I.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,p=this.getSvgTextDecoration({underline:g??this.underline,overline:d??this.overline,linethrough:u??this.linethrough}),f=h||this.textDecorationThickness,v=c||this.textDecorationColor,y=ne(i),x=ae(e),w=ne(a),S=ae(o),C=ne(l)||ae(l),O=ae(v);return[s?Er(kt,s):"",y?`stroke-width: ${P(y)}; `:"",x?`font-family: ${x.includes("'")||x.includes('"')?P(x):`'${P(x)}'`}; `:"",w?`font-size: ${P(w)}px; `:"",S?`font-style: ${P(S)}; `:"",C?`font-weight: ${P(C)}; `:"",p?`text-decoration: ${p}; text-decoration-thickness: ${R(f*this.getObjectScaling().y/10,I.NUM_FRACTION_DIGITS)}%;${O?` text-decoration-color: ${P(O)};`:""} `:"",n?Er(st,n):"",t?"white-space: pre; ":""].join("")}getSvgTextDecoration(r){return["overline","underline","line-through"].filter(t=>r[t.replace("-","")]).join(" ")}}]),_.setClass(Ct),_.setSVGClass(Ct);var Yc=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 b(s.flipX?-1:1,s.flipY?-1:1),o=s._getCursorBoundaries(t),l=new b(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 b(u.left,u.top)),g=n.viewportTransform,p=d.add(h).transform(g,!0),f=s.backgroundColor,v=gn(s.styles);s.backgroundColor="";let y={stroke:"transparent",fill:"transparent",textBackgroundColor:"transparent"};s.setSelectionStyles(y,0,t),s.setSelectionStyles(y,e,s.text.length),s.dirty=!0;let x=s.toCanvasElement({enableRetinaScaling:n.enableRetinaScaling,viewportTransform:!0});s.backgroundColor=f,s.styles=v,s.dirty=!0,Ms(x,{position:"fixed",left:-x.width+"px",border:yi,width:x.width/c+"px",height:x.height/c+"px"}),this.__dragImageDisposer&&this.__dragImageDisposer(),this.__dragImageDisposer=()=>{x.remove()},pt(r.target||this.target.hiddenTextarea).body.appendChild(x),(i=r.dataTransfer)==null||i.setDragImage(x,p.x,p.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(li,{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(li,{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()}},sa=/[ \n\.,;!\?\-]/,Wc=class extends Ct{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 hn({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||!Ys.test(e[r-1]))?r-1:r,s=e[i];for(;i>0&&i<e.length&&!sa.test(s);)i+=t,s=e[i];return t===-1&&sa.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;pt(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:mt: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 b(t.left+a,t.top+t.topOffset+n).transform(this.calcTransformMatrix()).transform(this.canvas.viewportTransform).multiply(new b(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=mt:this._selectionDirection==="left"&&(this._selectionDirection=mt,this.selectionStart=t),this.selectionEnd=e)}},zc=class extends Wc{initHiddenTextarea(){let r=this.canvas&&pt(this.canvas.getElement())||De(),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(li),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,p,f,v=l-o,y=this.fromStringToGraphemeSelection(i,s,e),x=h>y.selectionStart;u?(g=this._text.slice(h,c),v+=c-h):l<o&&(g=x?this._text.slice(c+v,c):this._text.slice(h,h-v));let w=a.slice(y.selectionEnd-v,y.selectionEnd);if(g&&g.length&&(w.length&&(d=this.getSelectionStyles(h,h+1,!1),d=w.map(()=>d[0])),u?(p=h,f=c):x?(p=c-g.length,f=c):(p=c,f=c+g.length),this.removeStyleFromTo(p,f)),w.length){let{copyPasteData:S}=Tt();t&&w.join("")===S.copiedText&&!I.disableStyleCopyPaste&&(d=S.copiedTextStyle),this.insertNewStyleBlock(w,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}=Tt();r.copiedText=this.getSelectedText(),I.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===mt);if(t.shiftKey?this.moveCursorWithShift(e):this.moveCursorWithoutShift(e),e!==0){let i=this.text.length;this.selectionStart=de(0,this.selectionStart,i),this.selectionEnd=de(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=mt,this._moveRight(r,"selectionEnd"))}moveCursorRightWithoutShift(r){let t=!0;return this._selectionDirection=mt,this.selectionStart===this.selectionEnd?(t=this._moveRight(r,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,t}},na=r=>!!r.button,Hc=class extends zc{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 Yc(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&&!na(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||na(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(nt(this.calcTransformMatrix())).add(new b(-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)}},qr="moveCursorUp",Kr="moveCursorDown",Jr="moveCursorLeft",Zr="moveCursorRight",Qr="exitEditing",aa=(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])},Vc={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:Qr,27:Qr,33:qr,34:Kr,35:Zr,36:Jr,37:Jr,38:qr,39:Zr,40:Kr},keysMapRtl:{9:Qr,27:Qr,33:qr,34:Kr,35:Jr,36:Zr,37:Zr,38:qr,39:Jr,40:Kr},ctrlKeysMapDown:{65:"cmdAll"},ctrlKeysMapUp:{67:"copy",88:"cut"},_selectionDirection:null,_reSpace:/\s|\r?\n/,inCompositionMode:!1},_e=class Fs extends Hc{static getDefaults(){return{...super.getDefaults(),...Fs.ownDefaults}}get type(){let t=super.type;return t==="itext"?"i-text":t}constructor(t,e){super(t,{...Fs.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 mi&&this.canvas.textEditingManager.remove(this),e instanceof mi&&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=ht(t.canvas),a=n.getContext("2d"),aa(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=ht(t.canvas),c=h.getContext("2d");if(aa(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(nn),h=this.get2DCursorLocation(a),c=this.get2DCursorLocation(o),u=h.lineIndex,d=c.lineIndex,g=h.charIndex<0?0:h.charIndex,p=c.charIndex<0?0:c.charIndex;for(let f=u;f<=d;f++){let v=this._getLineLeftOffset(f)||0,y=this.getHeightOfLine(f),x=0,w=0;if(f===u&&(x=this.__charBounds[u][g].left),f>=u&&f<d)w=l&&!this.isEndOfWrapping(f)?this.width:this.getLineWidth(f)||5;else if(f===d)if(p===0)w=this.__charBounds[d][p].left;else{let M=this._getWidthOfCharSpacing();w=this.__charBounds[d][p-1].left+this.__charBounds[d][p-1].width-M}let S=y;(this.lineHeight<1||f===d&&this.lineHeight>1)&&(y/=this.lineHeight);let C=i.left+v+x,O=y,T=0,k=w-x;this.inCompositionMode?(t.fillStyle=this.compositionColor||"black",O=1,T=y):t.fillStyle=this.selectionColor,n==="rtl"&&(s==="right"||s==="justify"||s==="justify-right"?C=this.width-C-k:s==="left"||s==="justify-left"?C=i.left+v-w:s!=="center"&&s!=="justify-center"||(C=i.left+v-w)),t.fillRect(C,i.top+i.topOffset+T,k,O),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,st)}_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(_e,"ownDefaults",Vc),m(_e,"type","IText"),_.setClass(_e),_.setClass(_e,"i-text");var Te=class Ls extends _e{static getDefaults(){return{...super.getDefaults(),...Ls.ownDefaults}}constructor(t,e){super(t,{...Ls.ownDefaults,...e})}static createControls(){return{controls:po()}}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,p=!0;e-=n;let f=Math.max(e,i,this.dynamicMinWidth),v=s[t],y;for(y=0;y<v.length;y++){let{word:x,width:w}=v[y];d+=x.length,c+=g+w-a,c>f&&!p?(l.push(u),u=[],c=w,p=!0):c+=a,p||o||u.push(h),u=u.concat(x),g=o?0:this._measureWord([h],t,d),d++,p=!1}return y&&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(Te,"type","Textbox"),m(Te,"textLayoutProperties",[..._e.textLayoutProperties,"width"]),m(Te,"ownDefaults",{minWidth:20,dynamicMinWidth:2,lockScalingFlip:!0,noScaleCache:!1,_wordJoiners:/[ \t\r]/,splitByGrapheme:!1}),_.setClass(Te);var oa=class extends Di{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}=_t(_o(e,i)),o=new b(n,a);if(i.absolutePositioned)return{center:Bt(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 b,correction:c=new b}=this.calcBoundingBox(t,r)||{};return{center:h.add(l),correction:c.subtract(l),size:o}}return{center:e.getRelativeCenterPoint().add(l),size:o}}}};m(oa,"type","clip-path"),_.setClass(oa);var la=class extends Di{getInitialSize({target:r},{size:t}){return new b(r.width||t.x,r.height||t.y)}};m(la,"type","fixed"),_.setClass(la);var Nc=class extends Dr{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]})})}},ti=class Rs extends Ft{static getDefaults(){return{...super.getDefaults(),...Rs.ownDefaults}}constructor(t=[],e={}){super(),Object.assign(this,Rs.ownDefaults),this.setOptions(e);let{left:i,top:s,layoutManager:n}=e;this.groupInit(t,{left:i,top:s,layoutManager:n??new Nc})}_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))?(Lt("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(Ss,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(ti,"type","ActiveSelection"),m(ti,"ownDefaults",{multiSelectionStacking:"canvas-stacking"}),_.setClass(ti),_.setClass(ti,"activeSelection");var Gc=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}},rl=class{constructor({tileSize:r=I.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=ht({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,p=d.height,f=u.destinationWidth,v=u.destinationHeight;g===f&&p===v||(d.width=f,d.height=v)})(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,p=r.createTexture();return r.bindTexture(a,p),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),p}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}},hs;function Uc(){let{WebGLProbe:r}=Tt();return r.queryWebGL(Ot()),I.enableGLFiltering&&r.isSupported(I.textureSize)?new rl({tileSize:I.textureSize}):new Gc}function cs(r=!0){return!hs&&r&&(hs=Uc()),hs}var il=["cropX","cropY"],V=class Bs extends K{static getDefaults(){return{...super.getDefaults(),...Bs.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,Bs.ownDefaults),this.setOptions(e),this.cacheKey=`texture${Nt()}`,this.setElement(typeof t=="string"?(this.canvas&&pt(this.canvas.getElement())||De()).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=cs(!1);e instanceof rl&&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&&Tt().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([...il,...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=Nt();n.push('<clipPath id="imageCrop_'+h+`">
|
|
49
|
+
`]}}static async fromElement(t,e,i){let{left:s=0,top:n=0,radius:a=0,...o}=$t(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(Se,"type","Circle"),m(Se,"cacheProperties",[...Xt,...tl]),m(Se,"ownDefaults",{radius:0,startAngle:0,endAngle:360,counterClockwise:!1}),m(Se,"ATTRIBUTE_NAMES",["cx","cy","r",...Jt]),_.setClass(Se),_.setSVGClass(Se);var Ls=["x1","x2","y1","y2"],sr=class el extends K{constructor([t,e,i,s]=[0,0,0,0],n={}){super(),Object.assign(this,el.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}=_t([{x:t,y:e},{x:i,y:s}]),h=new b(n+o/2,a+l/2);this.setPositionByOrigin(h,F,F)}_set(t,e){return super._set(t,e),Ls.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;dt(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 b((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}=$t(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(sr,"type","Line"),m(sr,"cacheProperties",[...Xt,...Ls]),m(sr,"ATTRIBUTE_NAMES",Jt.concat(Ls)),_.setClass(sr),_.setSVGClass(sr);var Ur=class Fs extends K{static getDefaults(){return{...super.getDefaults(),...Fs.ownDefaults}}constructor(t){super(),Object.assign(this,Fs.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(Ur,"type","Triangle"),m(Ur,"ownDefaults",{width:100,height:100}),_.setClass(Ur),_.setSVGClass(Ur);var rl=["rx","ry"],Ce=class Is extends K{static getDefaults(){return{...super.getDefaults(),...Is.ownDefaults}}constructor(t){super(),Object.assign(this,Is.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(Ut)}getRy(){return this.get("ry")*this.get(qt)}toObject(t=[]){return super.toObject([...rl,...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,yt,!1),t.restore(),this._renderPaintInOrder(t)}static async fromElement(t,e,i){let s=$t(t,this.ATTRIBUTE_NAMES,i);return s.left=(s.left||0)-s.rx,s.top=(s.top||0)-s.ry,new this(s)}};m(Ce,"type","Ellipse"),m(Ce,"cacheProperties",[...Xt,...rl]),m(Ce,"ownDefaults",{rx:0,ry:0}),m(Ce,"ATTRIBUTE_NAMES",[...Jt,"cx","cy","rx","ry"]),_.setClass(Ce),_.setSVGClass(Ce);var il={exactBoundingBox:!1},Vt=class Rs extends K{static getDefaults(){return{...super.getDefaults(),...Rs.ownDefaults}}constructor(t=[],e={}){super(),m(this,"strokeDiff",void 0),Object.assign(this,Rs.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 wo(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 b,strokeOffset:new b,strokeDiff:new b};let i=_t(e),s=Lr({...t,scaleX:1,scaleY:1}),n=_t(this.points.map(h=>q(h,s,!0))),a=new b(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 b(o,l),strokeOffset:new b(n.left,n.top).subtract(new b(i.left,i.top)).multiply(a),strokeDiff:new b(i.width,i.height).subtract(new b(n.width,n.height)).multiply(a)}}_findCenterFromElement(){let t=_t(this.points);return new b(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 b(e+s/2,i+n/2),"center","center")}isStrokeAccountedForInDimensions(){return this.exactBoundingBox}_getNonTransformedDimensions(){return this.exactBoundingBox?new b(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 b((e=t.width)==null?o:e,(i=t.height)==null?l:i)}else{var s,n;a=new b((s=t.width)==null?this.width:s,(n=t.height)==null?this.height:n)}return a.multiply(new b(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}=$t(t,this.ATTRIBUTE_NAMES,i);return new this(s,{...o,...e})}static fromObject(t){return this._fromObject(t,{extraParam:"points"})}};m(Vt,"ownDefaults",il),m(Vt,"type","Polyline"),m(Vt,"layoutProperties",[je,Le,"strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeWidth","strokeUniform","points"]),m(Vt,"cacheProperties",[...Xt,"points"]),m(Vt,"ATTRIBUTE_NAMES",[...Jt]),_.setClass(Vt),_.setSVGClass(Vt);var qr=class extends Vt{isOpen(){return!1}};m(qr,"ownDefaults",il),m(qr,"type","Polygon"),_.setClass(qr),_.setSVGClass(qr);var sl=class extends K{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=Zs({...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{...pe(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(sl,"_styleProperties",th);var Wc=/ +/g,zc=/"/g;function cs(r,t,e,i,s){return` ${((n,{left:a,top:o,width:l,height:h},c=L.NUM_FRACTION_DIGITS)=>{let u=Dr(st,n,!1),[d,g,p,f]=[a,o,l,h].map(v=>R(v,c));return`<rect ${u} x="${d}" y="${g}" width="${p}" height="${f}"></rect>`})(r,{left:t,top:e,width:i,height:s})}
|
|
53
|
+
`}var us,Ct=class lr extends sl{static getDefaults(){return{...super.getDefaults(),...lr.ownDefaults}}constructor(t,e){super(),m(this,"__charBounds",[]),Object.assign(this,lr.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=yn(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=ma}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,p=this.getValueOfPropertyAt(n,0,"textBackgroundColor"),f=this.getHeightOfLineImpl(n);for(let v=0;v<l;v++){let y=this.__charBounds[n][v];u=this.getValueOfPropertyAt(n,v,"textBackgroundColor"),this.path?(t.save(),t.translate(y.renderLeft,y.renderTop),t.rotate(y.angle),t.fillStyle=u,u&&t.fillRect(-y.width/2,-f*(1-this._fontSizeFraction),y.width,f),t.restore()):u===p?d+=y.kernedWidth:(c=i+h+g,this.direction==="rtl"&&(c=this.width-c-d),t.fillStyle=p,p&&t.fillRect(c,s,d,f),g=y.left,d=y.width,p=u)}u&&!this.path&&(c=i+h+g,this.direction==="rtl"&&(c=this.width-c-d),t.fillStyle=u,t.fillRect(c,s,d,f)),s+=o}t.fillStyle=e,this._removeShadow(t)}_measureChar(t,e,i,s){let n=Tr.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 p=(us||(us=ht({width:0,height:0}).getContext("2d")),us);this._setTextStyles(p,e,!0),c===void 0&&(g=c=p.measureText(t).width,n.set(t,c)),d===void 0&&l&&i&&(d=p.measureText(i).width,n.set(i,d)),l&&u===void 0&&(u=p.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===mt,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 mt: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=Io(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(ln),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,p,f,v,y,x="",S=0;if(e.save(),d!==this.direction&&(e.canvas.setAttribute("dir",c?"ltr":"rtl"),e.direction=c?"ltr":"rtl",e.textAlign=c?z:mt),n-=this.getHeightOfLineImpl(a)*this._fontSizeFraction,h)return this._renderChar(t,e,a,0,i.join(""),s,n),void e.restore();for(let w=0,C=i.length-1;w<=C;w++)v=w===C||this.charSpacing||l,x+=i[w],f=this.__charBounds[a][w],S===0?(s+=u*(f.kernedWidth-f.width),S+=f.width):S+=f.kernedWidth,o&&!v&&this._reSpaceAndTab.test(i[w])&&(v=!0),v||(g=g||this.getCompleteStyleDeclaration(a,w),p=this.getCompleteStyleDeclaration(a,w+1),v=Di(g,p,!1)),v&&(l?(e.save(),e.translate(f.renderLeft,f.renderTop),e.rotate(f.angle),this._renderChar(t,e,a,w,x,-S/2,0),e.restore()):(y=s,this._renderChar(t,e,a,w,x,y,n)),x="",g=p,s+=u*S,S=0);e.restore()}_applyPatternGradientTransformText(t){let e=this.width+this.strokeWidth,i=this.height+this.strokeWidth,s=ht({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 dt(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,p=this._getLineLeftOffset(h),f,v=0,y=0,x=this.getValueOfPropertyAt(h,0,e),S=this.getValueOfPropertyAt(h,0,st),w=this.getValueOfPropertyAt(h,0,"textDecorationColor")||S,C=this.getValueOfPropertyAt(h,0,De),O=x,T=w,k=C,M=i+g*(1-this._fontSizeFraction),A=this.getHeightOfChar(h,0),E=this.getValueOfPropertyAt(h,0,"deltaY");for(let B=0,G=d.length;B<G;B++){let $=this.__charBounds[h][B];O=this.getValueOfPropertyAt(h,B,e),f=this.getValueOfPropertyAt(h,B,st),T=this.getValueOfPropertyAt(h,B,"textDecorationColor")||f,k=this.getValueOfPropertyAt(h,B,De);let Z=this.getHeightOfChar(h,B),at=this.getValueOfPropertyAt(h,B,"deltaY");if(n&&O&&f){let I=this.fontSize*k/1e3;t.save(),t.fillStyle=T,t.translate($.renderLeft,$.renderTop),t.rotate($.angle),t.fillRect(-$.kernedWidth/2,l*Z+at-o*I,$.kernedWidth,I),t.restore()}else if((O!==x||f!==S||T!==w||Z!==A||k!==C||at!==E)&&y>0){let I=this.fontSize*C/1e3,St=s+p+v;this.direction==="rtl"&&(St=this.width-St-y),x&&w&&C&&(t.fillStyle=w,t.fillRect(St,M+l*A+E-o*I,y,I)),v=$.left,y=$.width,x=O,w=T,C=k,S=f,A=Z,E=at}else y+=$.kernedWidth}let D=s+p+v;this.direction==="rtl"&&(D=this.width-D-y),t.fillStyle=T;let j=this.fontSize*k/1e3;O&&T&&k&&t.fillRect(D,M+l*A+E-o*j,y-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(",")||lr.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 wi(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([...qa,...t]),styles:_o(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=$t(t,lr.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},p=new this(pi(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}),f=p.getScaledHeight()/p.height,v=((p.height+p.strokeWidth)*p.lineHeight-p.height)*f,y=p.getScaledHeight()+v,x=0;return n==="center"&&(x=p.getScaledWidth()/2),n==="right"&&(x=p.getScaledWidth()),p.set({left:p.left-x,top:p.top-(y-p.fontSize*(.07+p._fontSizeFraction))/p.lineHeight,strokeWidth:d}),p}static fromObject(t){return this._fromObject({...t,styles:To(t.styles||{},t.text)},{extraParam:"text"})}};m(Ct,"textLayoutProperties",Ua),m(Ct,"cacheProperties",[...Xt,...qa]),m(Ct,"ownDefaults",eh),m(Ct,"type","Text"),m(Ct,"genericFonts",["serif","sans-serif","monospace","cursive","fantasy","system-ui","ui-serif","ui-sans-serif","ui-monospace","ui-rounded","math","emoji","fangsong"]),m(Ct,"ATTRIBUTE_NAMES",Jt.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")),bo(Ct,[class extends Va{_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:Pe(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(zc,"'"))}" `,`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(cs(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(Wc)),o=a?`style="${a}"`:"",l=t.deltaY,h=l?` dy="${R(l,n)}" `:"",{angle:c,renderLeft:u,renderTop:d,width:g}=s,p="";if(u!==void 0){let f=g/2;c&&(p=` rotate="${R(Rt(c),n)}"`);let v=ge({angle:Rt(c)});v[4]=u,v[5]=d;let y=new b(-f,0).transform(v);e=y.x,i=y.y}return`<tspan x="${R(e,n)}" y="${R(i,n)}" ${h}${p}${o}>${P(r)}</tspan>`}_setSVGTextLineText(r,t,e,i){let s=this.getHeightOfLine(t),n=this.textAlign.includes(ln),a=this._textLines[t],o,l,h,c,u,d="",g=0;i+=s*(1-this._fontSizeFraction)/this.lineHeight;for(let p=0,f=a.length-1;p<=f;p++)u=p===f||this.charSpacing||this.path,d+=a[p],h=this.__charBounds[t][p],g===0?(e+=h.kernedWidth-h.width,g+=h.width):g+=h.kernedWidth,n&&!u&&this._reSpaceAndTab.test(a[p])&&(u=!0),u||(o=o||this.getCompleteStyleDeclaration(t,p),l=this.getCompleteStyleDeclaration(t,p+1),u=Di(o,l,!0)),u&&(c=this._getStyleDeclaration(t,p),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(cs(h,e+l,i,o,n)),l=u,o=d,h=a)}a&&r.push(cs(h,e+l,i,o,n))}getSvgStyles(r){let t=Oi(this.textDecorationColor)?` text-decoration-color: ${P(this[Pi])};`:"";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,p=this.getSvgTextDecoration({underline:g??this.underline,overline:d??this.overline,linethrough:u??this.linethrough}),f=h||this.textDecorationThickness,v=c||this.textDecorationColor,y=ne(i),x=ae(e),S=ne(a),w=ae(o),C=ne(l)||ae(l),O=ae(v);return[s?Dr(kt,s):"",y?`stroke-width: ${P(y)}; `:"",x?`font-family: ${x.includes("'")||x.includes('"')?P(x):`'${P(x)}'`}; `:"",S?`font-size: ${P(S)}px; `:"",w?`font-style: ${P(w)}; `:"",C?`font-weight: ${P(C)}; `:"",p?`text-decoration: ${p}; text-decoration-thickness: ${R(f*this.getObjectScaling().y/10,L.NUM_FRACTION_DIGITS)}%;${O?` text-decoration-color: ${P(O)};`:""} `:"",n?Dr(st,n):"",t?"white-space: pre; ":""].join("")}getSvgTextDecoration(r){return["overline","underline","line-through"].filter(t=>r[t.replace("-","")]).join(" ")}}]),_.setClass(Ct),_.setSVGClass(Ct);var Hc=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 b(s.flipX?-1:1,s.flipY?-1:1),o=s._getCursorBoundaries(t),l=new b(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 b(u.left,u.top)),g=n.viewportTransform,p=d.add(h).transform(g,!0),f=s.backgroundColor,v=mn(s.styles);s.backgroundColor="";let y={stroke:"transparent",fill:"transparent",textBackgroundColor:"transparent"};s.setSelectionStyles(y,0,t),s.setSelectionStyles(y,e,s.text.length),s.dirty=!0;let x=s.toCanvasElement({enableRetinaScaling:n.enableRetinaScaling,viewportTransform:!0});s.backgroundColor=f,s.styles=v,s.dirty=!0,Ds(x,{position:"fixed",left:-x.width+"px",border:bi,width:x.width/c+"px",height:x.height/c+"px"}),this.__dragImageDisposer&&this.__dragImageDisposer(),this.__dragImageDisposer=()=>{x.remove()},pt(r.target||this.target.hiddenTextarea).body.appendChild(x),(i=r.dataTransfer)==null||i.setDragImage(x,p.x,p.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(hi,{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(hi,{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()}},oa=/[ \n\.,;!\?\-]/,Vc=class extends Ct{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 dn({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||!Hs.test(e[r-1]))?r-1:r,s=e[i];for(;i>0&&i<e.length&&!oa.test(s);)i+=t,s=e[i];return t===-1&&oa.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;pt(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:mt: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 b(t.left+a,t.top+t.topOffset+n).transform(this.calcTransformMatrix()).transform(this.canvas.viewportTransform).multiply(new b(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=mt:this._selectionDirection==="left"&&(this._selectionDirection=mt,this.selectionStart=t),this.selectionEnd=e)}},Nc=class extends Vc{initHiddenTextarea(){let r=this.canvas&&pt(this.canvas.getElement())||Ae(),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(hi),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,p,f,v=l-o,y=this.fromStringToGraphemeSelection(i,s,e),x=h>y.selectionStart;u?(g=this._text.slice(h,c),v+=c-h):l<o&&(g=x?this._text.slice(c+v,c):this._text.slice(h,h-v));let S=a.slice(y.selectionEnd-v,y.selectionEnd);if(g&&g.length&&(S.length&&(d=this.getSelectionStyles(h,h+1,!1),d=S.map(()=>d[0])),u?(p=h,f=c):x?(p=c-g.length,f=c):(p=c,f=c+g.length),this.removeStyleFromTo(p,f)),S.length){let{copyPasteData:w}=Tt();t&&S.join("")===w.copiedText&&!L.disableStyleCopyPaste&&(d=w.copiedTextStyle),this.insertNewStyleBlock(S,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}=Tt();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===mt);if(t.shiftKey?this.moveCursorWithShift(e):this.moveCursorWithoutShift(e),e!==0){let i=this.text.length;this.selectionStart=de(0,this.selectionStart,i),this.selectionEnd=de(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=mt,this._moveRight(r,"selectionEnd"))}moveCursorRightWithoutShift(r){let t=!0;return this._selectionDirection=mt,this.selectionStart===this.selectionEnd?(t=this._moveRight(r,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,t}},la=r=>!!r.button,Gc=class extends Nc{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 Hc(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(nt(this.calcTransformMatrix())).add(new b(-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)}},Kr="moveCursorUp",Jr="moveCursorDown",Zr="moveCursorLeft",Qr="moveCursorRight",ti="exitEditing",ha=(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])},Uc={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:ti,27:ti,33:Kr,34:Jr,35:Qr,36:Zr,37:Zr,38:Kr,39:Qr,40:Jr},keysMapRtl:{9:ti,27:ti,33:Kr,34:Jr,35:Zr,36:Qr,37:Qr,38:Kr,39:Zr,40:Jr},ctrlKeysMapDown:{65:"cmdAll"},ctrlKeysMapUp:{67:"copy",88:"cut"},_selectionDirection:null,_reSpace:/\s|\r?\n/,inCompositionMode:!1},Te=class Bs extends Gc{static getDefaults(){return{...super.getDefaults(),...Bs.ownDefaults}}get type(){let t=super.type;return t==="itext"?"i-text":t}constructor(t,e){super(t,{...Bs.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 vi&&this.canvas.textEditingManager.remove(this),e instanceof vi&&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=ht(t.canvas),a=n.getContext("2d"),ha(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=ht(t.canvas),c=h.getContext("2d");if(ha(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(ln),h=this.get2DCursorLocation(a),c=this.get2DCursorLocation(o),u=h.lineIndex,d=c.lineIndex,g=h.charIndex<0?0:h.charIndex,p=c.charIndex<0?0:c.charIndex;for(let f=u;f<=d;f++){let v=this._getLineLeftOffset(f)||0,y=this.getHeightOfLine(f),x=0,S=0;if(f===u&&(x=this.__charBounds[u][g].left),f>=u&&f<d)S=l&&!this.isEndOfWrapping(f)?this.width:this.getLineWidth(f)||5;else if(f===d)if(p===0)S=this.__charBounds[d][p].left;else{let M=this._getWidthOfCharSpacing();S=this.__charBounds[d][p-1].left+this.__charBounds[d][p-1].width-M}let w=y;(this.lineHeight<1||f===d&&this.lineHeight>1)&&(y/=this.lineHeight);let C=i.left+v+x,O=y,T=0,k=S-x;this.inCompositionMode?(t.fillStyle=this.compositionColor||"black",O=1,T=y):t.fillStyle=this.selectionColor,n==="rtl"&&(s==="right"||s==="justify"||s==="justify-right"?C=this.width-C-k:s==="left"||s==="justify-left"?C=i.left+v-S:s!=="center"&&s!=="justify-center"||(C=i.left+v-S)),t.fillRect(C,i.top+i.topOffset+T,k,O),i.topOffset+=w}}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,st)}_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(Te,"ownDefaults",Uc),m(Te,"type","IText"),_.setClass(Te),_.setClass(Te,"i-text");var ke=class Xs extends Te{static getDefaults(){return{...super.getDefaults(),...Xs.ownDefaults}}constructor(t,e){super(t,{...Xs.ownDefaults,...e})}static createControls(){return{controls:vo()}}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,p=!0;e-=n;let f=Math.max(e,i,this.dynamicMinWidth),v=s[t],y;for(y=0;y<v.length;y++){let{word:x,width:S}=v[y];d+=x.length,c+=g+S-a,c>f&&!p?(l.push(u),u=[],c=S,p=!0):c+=a,p||o||u.push(h),u=u.concat(x),g=o?0:this._measureWord([h],t,d),d++,p=!1}return y&&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(ke,"type","Textbox"),m(ke,"textLayoutProperties",[...Te.textLayoutProperties,"width"]),m(ke,"ownDefaults",{minWidth:20,dynamicMinWidth:2,lockScalingFlip:!0,noScaleCache:!1,_wordJoiners:/[ \t\r]/,splitByGrapheme:!1}),_.setClass(ke);var ca=class extends Ai{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}=_t(Oo(e,i)),o=new b(n,a);if(i.absolutePositioned)return{center:Bt(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 b,correction:c=new b}=this.calcBoundingBox(t,r)||{};return{center:h.add(l),correction:c.subtract(l),size:o}}return{center:e.getRelativeCenterPoint().add(l),size:o}}}};m(ca,"type","clip-path"),_.setClass(ca);var ua=class extends Ai{getInitialSize({target:r},{size:t}){return new b(r.width||t.x,r.height||t.y)}};m(ua,"type","fixed"),_.setClass(ua);var qc=class extends Ar{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]})})}},ei=class Ys extends Ft{static getDefaults(){return{...super.getDefaults(),...Ys.ownDefaults}}constructor(t=[],e={}){super(),Object.assign(this,Ys.ownDefaults),this.setOptions(e);let{left:i,top:s,layoutManager:n}=e;this.groupInit(t,{left:i,top:s,layoutManager:n??new qc})}_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))?(It("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(ei,"type","ActiveSelection"),m(ei,"ownDefaults",{multiSelectionStacking:"canvas-stacking"}),_.setClass(ei),_.setClass(ei,"activeSelection");var Kc=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}},nl=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=ht({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,p=d.height,f=u.destinationWidth,v=u.destinationHeight;g===f&&p===v||(d.width=f,d.height=v)})(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,p=r.createTexture();return r.bindTexture(a,p),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),p}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}},ds;function Jc(){let{WebGLProbe:r}=Tt();return r.queryWebGL(Ot()),L.enableGLFiltering&&r.isSupported(L.textureSize)?new nl({tileSize:L.textureSize}):new Kc}function gs(r=!0){return!ds&&r&&(ds=Jc()),ds}var al=["cropX","cropY"],V=class $s extends K{static getDefaults(){return{...super.getDefaults(),...$s.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,$s.ownDefaults),this.setOptions(e),this.cacheKey=`texture${Nt()}`,this.setElement(typeof t=="string"?(this.canvas&&pt(this.canvas.getElement())||Ae()).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=gs(!1);e instanceof nl&&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&&Tt().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([...al,...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=Nt();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 kr(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=ht(a),{width:l,height:h}=a;this._element=o,this._lastScaleX=t.scaleX=s,this._lastScaleY=t.scaleY=n,cs().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=ht({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);cs().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),p=Math.min(a*s,c-d),f=-n/2,v=-a/2,y=Math.min(n,h/i-o),x=Math.min(a,c/s-l);e&&t.drawImage(e,u,d,g,p,f,v,y,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=sn(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=ko(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=Oo(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([kr(i,{...o,crossOrigin:s}),t&&Oe(t,o),e?Oe([e],o):[],Ir(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 kr(t,{crossOrigin:e,signal:i}).then(n=>new this(n,s))}static async fromElement(t,e={},i){let s=Yt(t,this.ATTRIBUTE_NAMES,i);return this.fromURL(s["xlink:href"]||s.href,e,s).catch(n=>(Lt("log","Unable to parse Image",n),null))}};function us(r){if(!rh.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&&qn.test(t)),u=!a||!o||a==="100%"||o==="100%",d="",g=0,p=0;if(c&&(l||h)&&r.parentNode&&r.parentNode.nodeName!=="#document"&&(d=" translate("+tt(l||"0")+" "+tt(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 f={width:0,height:0};if(c)return f.width=tt(a),f.height=tt(o),f;let v=t.match(qn),y=-parseFloat(v[1]),x=-parseFloat(v[2]),w=parseFloat(v[3]),S=parseFloat(v[4]);f.minX=y,f.minY=x,f.viewBoxWidth=w,f.viewBoxHeight=S,u?(f.width=w,f.height=S):(f.width=tt(a),f.height=tt(o),s=f.width/w,n=f.height/S);let C=sn(r.getAttribute("preserveAspectRatio")||"");if(C.alignX!=="none"&&(C.meetOrSlice==="meet"&&(n=s=s>n?n:s),C.meetOrSlice==="slice"&&(n=s=s>n?s:n),g=f.width-w*s,p=f.height-S*s,C.alignX==="Mid"&&(g/=2),C.alignY==="Mid"&&(p/=2),C.alignX==="Min"&&(g=0),C.alignY==="Min"&&(p=0)),s===1&&n===1&&y===0&&x===0&&l===0&&h===0)return f;if((l||h)&&r.parentNode.nodeName!=="#document"&&(d=" translate("+tt(l||"0")+" "+tt(h||"0")+") "),e=d+" matrix("+s+" 0 0 "+n+" "+(y*s+g)+" "+(x*n+p)+") ",r.nodeName==="svg"){for(i=r.ownerDocument.createElementNS(ms,"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),f}m(V,"type","Image"),m(V,"cacheProperties",[...Xt,...il]),m(V,"ownDefaults",{strokeWidth:0,srcFromAttribute:!1,minimumScaleTrigger:.5,cropX:0,cropY:0,imageSmoothing:!0}),m(V,"ATTRIBUTE_NAMES",[...Jt,"x","y","width","height","preserveAspectRatio","xlink:href","href","crossOrigin","image-rendering"]),_.setClass(V),_.setSVGClass(V);var vi=r=>r.tagName.replace("svg:",""),qc=Oi(["pattern","defs","symbol","metadata","clipPath","mask","desc"]);function sl(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 Kc=["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"],ds="xlink:href";function nl(r,t){var e;let i=((e=t.getAttribute(ds))==null?void 0:e.slice(1))||"",s=r.getElementById(i);if(s&&s.getAttribute(ds)&&nl(r,s),s&&(Kc.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(ds)}var Jc=["linearGradient","radialGradient","svg:linearGradient","svg:radialGradient"],ha=r=>_.getSVGClass(vi(r).toLowerCase()),Zc=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=sl(n,Jc),o={},l=a.length;for(;l--;){let h=a[l];h.getAttribute("xlink:href")&&nl(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(p){return p.trim()});for(let p=0;p<g.length;p++){let f=g[p].split(":"),v=f[0].trim();d[v]=f[1].trim()}(c=u[0].trim()).split(",").forEach(p=>{(p=p.replace(/^svg/i,"").trim())!==""&&(o[p]={...o[p]||{},...d})})})}return o})(i)}parse(){return Promise.all(this.elements.map(r=>this.createObject(r)))}async createObject(r){let t=ha(r);if(t){let e=await t.fromElement(r,this.options,this.cssRules);return this.resolveGradient(e,r,st),this.resolveGradient(e,r,kt),e instanceof V&&e._originalElement?ai(e,e.parsePreserveAspectRatioAttribute()):ai(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=ar.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=nt(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=pi(`${a.getAttribute("transform")||""} ${n.getAttribute("originalTransform")||""}`);n.setAttribute("transform",`matrix(${o.join(",")})`);let l=await Promise.all(i.map(y=>ha(y).fromElement(y,this.options,this.cssRules).then(x=>(ai(x),x.fillRule=x.clipRule,delete x.clipRule,x)))),h=l.length===1?l[0]:new Ft(l),c=$(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:p,translateX:f,translateY:v}=ue(c);h.set({flipX:!1,flipY:!1}),h.set({scaleX:u,scaleY:d,angle:g,skewX:p,skewY:0}),h.setPositionByOrigin(new b(f,v),F,F),r.clipPath=h}else delete r.clipPath}},ca=r=>eh.test(vi(r));async function Qc(r,t,{crossOrigin:e,signal:i}={}){if(i&&i.aborted)return Lt("log",new ua("parseSVGDocument")),{objects:[],elements:[],options:{},allElements:[]};let s=r.documentElement;(function(h){let c=sl(h,["use","svg:use"]),u=["x","y","xlink:href","href","transform"];for(let d of c){let g=d.attributes,p={};for(let k of g)k.value&&(p[k.name]=k.value);let f=(p["xlink:href"]||p.href||"").slice(1);if(f==="")return;let v=h.getElementById(f);if(v===null)return;let y=v.cloneNode(!0),x=y.attributes,w={};for(let k of x)k.value&&(w[k.name]=k.value);let{x:S=0,y:C=0,transform:O=""}=p,T=`${O} ${w.transform||""} translate(${S}, ${C})`;if(us(y),/^svg$/i.test(y.nodeName)){let k=y.ownerDocument.createElementNS(ms,"g");Object.entries(w).forEach(([M,A])=>k.setAttributeNS(ms,M,A)),k.append(...y.childNodes),y=k}for(let k of g){if(!k)continue;let{name:M,value:A}=k;if(!u.includes(M))if(M==="style"){let E={};ws(A,E),Object.entries(w).forEach(([j,B])=>{E[j]=B}),ws(w.style||"",E);let D=Object.entries(E).map(j=>j.join(":")).join(";");y.setAttribute(M,D)}else!w[M]&&y.setAttribute(M,A)}y.setAttribute("transform",T),y.setAttribute("instantiated_by_use","1"),y.removeAttribute("id"),d.parentNode.replaceChild(y,d)}})(r);let n=Array.from(s.getElementsByTagName("*")),a={...us(s),crossOrigin:e,signal:i},o=n.filter(h=>(us(h),ca(h)&&!(function(c){let u=c;for(;u&&(u=u.parentElement);)if(u&&u.nodeName&&qc.test(vi(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=>vi(h)==="clipPath").forEach(h=>{h.setAttribute("originalTransform",h.getAttribute("transform")||"");let c=h.getAttribute("id");l[c]=Array.from(h.getElementsByTagName("*")).filter(u=>ca(u))}),{objects:await new Zc(o,a,t,r,l).parse(),elements:o,options:a,allElements:n}}function al(r,t,e){return Qc(new(ce()).DOMParser().parseFromString(r.trim(),"text/xml"),t,e)}var Ai=r=>r.webgl!==void 0;var mn="precision highp float",tu=`
|
|
63
|
-
${
|
|
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 Or(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=ht(a),{width:l,height:h}=a;this._element=o,this._lastScaleX=t.scaleX=s,this._lastScaleY=t.scaleY=n,gs().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=ht({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);gs().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),p=Math.min(a*s,c-d),f=-n/2,v=-a/2,y=Math.min(n,h/i-o),x=Math.min(a,c/s-l);e&&t.drawImage(e,u,d,g,p,f,v,y,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=on(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=Po(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=Eo(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([Or(i,{...o,crossOrigin:s}),t&&Me(t,o),e?Me([e],o):[],Fr(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 Or(t,{crossOrigin:e,signal:i}).then(n=>new this(n,s))}static async fromElement(t,e={},i){let s=$t(t,this.ATTRIBUTE_NAMES,i);return this.fromURL(s["xlink:href"]||s.href,e,s).catch(n=>(It("log","Unable to parse Image",n),null))}};function ps(r){if(!nh.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&&Zn.test(t)),u=!a||!o||a==="100%"||o==="100%",d="",g=0,p=0;if(c&&(l||h)&&r.parentNode&&r.parentNode.nodeName!=="#document"&&(d=" translate("+tt(l||"0")+" "+tt(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 f={width:0,height:0};if(c)return f.width=tt(a),f.height=tt(o),f;let v=t.match(Zn),y=-parseFloat(v[1]),x=-parseFloat(v[2]),S=parseFloat(v[3]),w=parseFloat(v[4]);f.minX=y,f.minY=x,f.viewBoxWidth=S,f.viewBoxHeight=w,u?(f.width=S,f.height=w):(f.width=tt(a),f.height=tt(o),s=f.width/S,n=f.height/w);let C=on(r.getAttribute("preserveAspectRatio")||"");if(C.alignX!=="none"&&(C.meetOrSlice==="meet"&&(n=s=s>n?n:s),C.meetOrSlice==="slice"&&(n=s=s>n?s:n),g=f.width-S*s,p=f.height-w*s,C.alignX==="Mid"&&(g/=2),C.alignY==="Mid"&&(p/=2),C.alignX==="Min"&&(g=0),C.alignY==="Min"&&(p=0)),s===1&&n===1&&y===0&&x===0&&l===0&&h===0)return f;if((l||h)&&r.parentNode.nodeName!=="#document"&&(d=" translate("+tt(l||"0")+" "+tt(h||"0")+") "),e=d+" matrix("+s+" 0 0 "+n+" "+(y*s+g)+" "+(x*n+p)+") ",r.nodeName==="svg"){for(i=r.ownerDocument.createElementNS(bs,"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),f}m(V,"type","Image"),m(V,"cacheProperties",[...Xt,...al]),m(V,"ownDefaults",{strokeWidth:0,srcFromAttribute:!1,minimumScaleTrigger:.5,cropX:0,cropY:0,imageSmoothing:!0}),m(V,"ATTRIBUTE_NAMES",[...Jt,"x","y","width","height","preserveAspectRatio","xlink:href","href","crossOrigin","image-rendering"]),_.setClass(V),_.setSVGClass(V);var yi=r=>r.tagName.replace("svg:",""),Zc=Mi(["pattern","defs","symbol","metadata","clipPath","mask","desc"]);function ol(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 Qc=["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"],fs="xlink:href";function ll(r,t){var e;let i=((e=t.getAttribute(fs))==null?void 0:e.slice(1))||"",s=r.getElementById(i);if(s&&s.getAttribute(fs)&&ll(r,s),s&&(Qc.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(fs)}var tu=["linearGradient","radialGradient","svg:linearGradient","svg:radialGradient"],da=r=>_.getSVGClass(yi(r).toLowerCase()),eu=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=ol(n,tu),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(p){return p.trim()});for(let p=0;p<g.length;p++){let f=g[p].split(":"),v=f[0].trim();d[v]=f[1].trim()}(c=u[0].trim()).split(",").forEach(p=>{(p=p.replace(/^svg/i,"").trim())!==""&&(o[p]={...o[p]||{},...d})})})}return o})(i)}parse(){return Promise.all(this.elements.map(r=>this.createObject(r)))}async createObject(r){let t=da(r);if(t){let e=await t.fromElement(r,this.options,this.cssRules);return this.resolveGradient(e,r,st),this.resolveGradient(e,r,kt),e instanceof V&&e._originalElement?oi(e,e.parsePreserveAspectRatioAttribute()):oi(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=or.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=nt(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=fi(`${a.getAttribute("transform")||""} ${n.getAttribute("originalTransform")||""}`);n.setAttribute("transform",`matrix(${o.join(",")})`);let l=await Promise.all(i.map(y=>da(y).fromElement(y,this.options,this.cssRules).then(x=>(oi(x),x.fillRule=x.clipRule,delete x.clipRule,x)))),h=l.length===1?l[0]:new Ft(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:p,translateX:f,translateY:v}=ue(c);h.set({flipX:!1,flipY:!1}),h.set({scaleX:u,scaleY:d,angle:g,skewX:p,skewY:0}),h.setPositionByOrigin(new b(f,v),F,F),r.clipPath=h}else delete r.clipPath}},ga=r=>sh.test(yi(r));async function ru(r,t,{crossOrigin:e,signal:i}={}){if(i&&i.aborted)return It("log",new pa("parseSVGDocument")),{objects:[],elements:[],options:{},allElements:[]};let s=r.documentElement;(function(h){let c=ol(h,["use","svg:use"]),u=["x","y","xlink:href","href","transform"];for(let d of c){let g=d.attributes,p={};for(let k of g)k.value&&(p[k.name]=k.value);let f=(p["xlink:href"]||p.href||"").slice(1);if(f==="")return;let v=h.getElementById(f);if(v===null)return;let y=v.cloneNode(!0),x=y.attributes,S={};for(let k of x)k.value&&(S[k.name]=k.value);let{x:w=0,y:C=0,transform:O=""}=p,T=`${O} ${S.transform||""} translate(${w}, ${C})`;if(ps(y),/^svg$/i.test(y.nodeName)){let k=y.ownerDocument.createElementNS(bs,"g");Object.entries(S).forEach(([M,A])=>k.setAttributeNS(bs,M,A)),k.append(...y.childNodes),y=k}for(let k of g){if(!k)continue;let{name:M,value:A}=k;if(!u.includes(M))if(M==="style"){let E={};_s(A,E),Object.entries(S).forEach(([j,B])=>{E[j]=B}),_s(S.style||"",E);let D=Object.entries(E).map(j=>j.join(":")).join(";");y.setAttribute(M,D)}else!S[M]&&y.setAttribute(M,A)}y.setAttribute("transform",T),y.setAttribute("instantiated_by_use","1"),y.removeAttribute("id"),d.parentNode.replaceChild(y,d)}})(r);let n=Array.from(s.getElementsByTagName("*")),a={...ps(s),crossOrigin:e,signal:i},o=n.filter(h=>(ps(h),ga(h)&&!(function(c){let u=c;for(;u&&(u=u.parentElement);)if(u&&u.nodeName&&Zc.test(yi(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=>yi(h)==="clipPath").forEach(h=>{h.setAttribute("originalTransform",h.getAttribute("transform")||"");let c=h.getAttribute("id");l[c]=Array.from(h.getElementsByTagName("*")).filter(u=>ga(u))}),{objects:await new eu(o,a,t,r,l).parse(),elements:o,options:a,allElements:n}}function hl(r,t,e){return ru(new(ce()).DOMParser().parseFromString(r.trim(),"text/xml"),t,e)}var ji=r=>r.webgl!==void 0;var bn="precision highp float",iu=`
|
|
63
|
+
${bn};
|
|
64
64
|
varying vec2 vTexCoord;
|
|
65
65
|
uniform sampler2D uTexture;
|
|
66
66
|
void main() {
|
|
67
67
|
gl_FragColor = texture2D(uTexture, vTexCoord);
|
|
68
|
-
}`,
|
|
68
|
+
}`,su=new RegExp(bn,"g"),W=class{get type(){return this.constructor.type}constructor({type:r,...t}={}){Object.assign(this,this.constructor.defaults,t)}getFragmentSource(){return iu}getVertexSource(){return`
|
|
69
69
|
attribute vec2 aPosition;
|
|
70
70
|
varying vec2 vTexCoord;
|
|
71
71
|
void main() {
|
|
72
72
|
vTexCoord = aPosition;
|
|
73
73
|
gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
|
|
74
|
-
}`}createProgram(r,t=this.getFragmentSource(),e=this.getVertexSource()){let{WebGLProbe:{GLPrecision:i="highp"}}=Tt();i!=="highp"&&(t=t.replace(
|
|
74
|
+
}`}createProgram(r,t=this.getFragmentSource(),e=this.getVertexSource()){let{WebGLProbe:{GLPrecision:i="highp"}}=Tt();i!=="highp"&&(t=t.replace(su,bn.replace("highp",i)));let s=r.createShader(r.VERTEX_SHADER),n=r.createShader(r.FRAGMENT_SHADER),a=r.createProgram();if(!s||!n||!a)throw new wt("Vertex, fragment shader or program creation error");if(r.shaderSource(s,e),r.compileShader(s),!r.getShaderParameter(s,r.COMPILE_STATUS))throw new wt(`Vertex shader compile error for ${this.type}: ${r.getShaderInfoLog(s)}`);if(r.shaderSource(n,t),r.compileShader(n),!r.getShaderParameter(n,r.COMPILE_STATUS))throw new wt(`Fragment shader compile error for ${this.type}: ${r.getShaderInfoLog(n)}`);if(r.attachShader(a,s),r.attachShader(a,n),r.linkProgram(a),!r.getProgramParameter(a,r.LINK_STATUS))throw new wt(`Shader link error for "${this.type}" ${r.getProgramInfoLog(a)}`);let o=this.getUniformLocations(r,a)||{};return o.uStepW=r.getUniformLocation(a,"uStepW"),o.uStepH=r.getUniformLocation(a,"uStepH"),{program:a,attributeLocations:this.getAttributeLocations(r,a),uniformLocations:o}}getAttributeLocations(r,t){return{aPosition:r.getAttribLocation(t,"aPosition")}}getUniformLocations(r,t){let e=this.constructor.uniformLocations,i={};for(let s=0;s<e.length;s++)i[e[s]]=r.getUniformLocation(t,e[s]);return i}sendAttributeData(r,t,e){let i=t.aPosition,s=r.createBuffer();r.bindBuffer(r.ARRAY_BUFFER,s),r.enableVertexAttribArray(i),r.vertexAttribPointer(i,2,r.FLOAT,!1,0,0),r.bufferData(r.ARRAY_BUFFER,e,r.STATIC_DRAW)}_setupFrameBuffer(r){let t=r.context;if(r.passes>1){let e=r.destinationWidth,i=r.destinationHeight;r.sourceWidth===e&&r.sourceHeight===i||(t.deleteTexture(r.targetTexture),r.targetTexture=r.filterBackend.createTexture(t,e,i)),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,r.targetTexture,0)}else t.bindFramebuffer(t.FRAMEBUFFER,null),t.finish()}_swapTextures(r){r.passes--,r.pass++;let t=r.targetTexture;r.targetTexture=r.sourceTexture,r.sourceTexture=t}isNeutralState(r){return!1}applyTo(r){ji(r)?(this._setupFrameBuffer(r),this.applyToWebGL(r),this._swapTextures(r)):this.applyTo2d(r)}applyTo2d(r){}getCacheKey(){return this.type}retrieveShader(r){let t=this.getCacheKey();return r.programCache[t]||(r.programCache[t]=this.createProgram(r.context)),r.programCache[t]}applyToWebGL(r){let t=r.context,e=this.retrieveShader(r);r.pass===0&&r.originalTexture?t.bindTexture(t.TEXTURE_2D,r.originalTexture):t.bindTexture(t.TEXTURE_2D,r.sourceTexture),t.useProgram(e.program),this.sendAttributeData(t,e.attributeLocations,r.aPosition),t.uniform1f(e.uniformLocations.uStepW,1/r.sourceWidth),t.uniform1f(e.uniformLocations.uStepH,1/r.sourceHeight),this.sendUniformData(t,e.uniformLocations),t.viewport(0,0,r.destinationWidth,r.destinationHeight),t.drawArrays(t.TRIANGLE_STRIP,0,4)}bindAdditionalTexture(r,t,e){r.activeTexture(e),r.bindTexture(r.TEXTURE_2D,t),r.activeTexture(r.TEXTURE0)}unbindAdditionalTexture(r,t){r.activeTexture(t),r.bindTexture(r.TEXTURE_2D,null),r.activeTexture(r.TEXTURE0)}sendUniformData(r,t){}createHelpLayer(r){if(!r.helpLayer){let{sourceWidth:t,sourceHeight:e}=r;r.helpLayer=ht({width:t,height:e})}}toObject(){let r=Object.keys(this.constructor.defaults||{});return{type:this.type,...r.reduce((t,e)=>(t[e]=this[e],t),{})}}toJSON(){return this.toObject()}static async fromObject({type:r,...t},e){return new this(t)}};m(W,"type","BaseFilter"),m(W,"uniformLocations",[]);var nu={multiply:`gl_FragColor.rgb *= uColor.rgb;
|
|
75
75
|
`,screen:`gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);
|
|
76
76
|
`,add:`gl_FragColor.rgb += uColor.rgb;
|
|
77
77
|
`,difference:`gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);
|
|
@@ -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
|
+
`},hr=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;
|
|
@@ -107,10 +107,10 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
107
107
|
vec4 color = texture2D(uTexture, vTexCoord);
|
|
108
108
|
gl_FragColor = color;
|
|
109
109
|
if (color.a > 0.0) {
|
|
110
|
-
${
|
|
110
|
+
${nu[this.mode]}
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
|
-
`}applyTo2d({imageData:{data:r}}){let t=new ct(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 ct(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 ct(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 ct(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(hr,"defaults",{color:"#F95C63",mode:"multiply",alpha:1}),m(hr,"type","BlendColor"),m(hr,"uniformLocations",["uColor"]),_.setClass(hr);var au={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
|
+
`},cr=class extends W{getCacheKey(){return`${this.type}_${this.mode}`}getFragmentSource(){return au[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=Ot());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],p=o[l+1],f=o[l+2],v=o[l+3];switch(this.mode){case"multiply":r[l]=h*g/255,r[l+1]=c*p/255,r[l+2]=u*f/255,r[l+3]=d*v/255;break;case"mask":r[l+3]=v}}}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 V.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=Ot());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],p=o[l+1],f=o[l+2],v=o[l+3];switch(this.mode){case"multiply":r[l]=h*g/255,r[l+1]=c*p/255,r[l+2]=u*f/255,r[l+3]=d*v/255;break;case"mask":r[l+3]=v}}}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 V.fromObject(t,i).then(s=>new this({...e,image:s}))}};m(cr,"type","BlendImage"),m(cr,"defaults",{mode:"multiply",alpha:1}),m(cr,"uniformLocations",["uTransformMatrix","uImage"]),_.setClass(cr);var ur=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){
|
|
178
|
+
`}applyTo(r){ji(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 p=-14;p<15;p++){let f=p/15,v=4*Math.floor(i*f),y=1-Math.abs(f),x=a+v;x<d?x=d:x>g&&(x=g);let S=r[x+3]*y;o+=r[x]*S,l+=r[x+1]*S,h+=r[x+2]*S,c+=S,u+=y}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 p=-14;p<15;p++){let f=p/15,v=Math.floor(i*f)*n,y=1-Math.abs(f),x=a+v;x<d?x=d:x>g&&(x=g);let S=s[x+3]*y;o+=s[x]*S,l+=s[x+1]*S,h+=s[x+2]*S,c+=S,u+=y}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(ur,"type","Blur"),m(ur,"defaults",{blur:0}),m(ur,"uniformLocations",["uDelta"]),_.setClass(ur);var dr=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(dr,"type","Brightness"),m(dr,"defaults",{brightness:0}),m(dr,"uniformLocations",["uBrightness"]),_.setClass(dr);var cl={matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],colorsOnly:!0},le=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 fe(r,t){var e;let i=(m(e=class extends le{toObject(){return{type:this.type,colorsOnly:this.colorsOnly}}},"type",r),m(e,"defaults",{colorsOnly:!1,matrix:t}),e);return _.setClass(i,r),i}m(le,"type","ColorMatrix"),m(le,"defaults",
|
|
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 fe(r,t){var e;let i=(m(e=class extends le{toObject(){return{type:this.type,colorsOnly:this.colorsOnly}}},"type",r),m(e,"defaults",{colorsOnly:!1,matrix:t}),e);return _.setClass(i,r),i}m(le,"type","ColorMatrix"),m(le,"defaults",cl),m(le,"uniformLocations",["uColorMatrix","uConstants"]),_.setClass(le);var ou=fe("Brownie",[.5997,.34553,-.27082,0,.186,-.0377,.86095,.15059,0,-.1449,.24113,-.07441,.44972,0,-.02965,0,0,0,1,0]),lu=fe("Vintage",[.62793,.32021,-.03965,0,.03784,.02578,.64411,.03259,0,.02926,.0466,-.08512,.52416,0,.02023,0,0,0,1,0]),hu=fe("Kodachrome",[1.12855,-.39673,-.03992,0,.24991,-.16404,1.08352,-.05498,0,.09698,-.16786,-.56034,1.60148,0,.13972,0,0,0,1,0]),cu=fe("Technicolor",[1.91252,-.85453,-.09155,0,.04624,-.30878,1.76589,-.10601,0,-.27589,-.2311,-.75018,1.84759,0,.12137,0,0,0,1,0]),uu=fe("Polaroid",[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0]),du=fe("Sepia",[.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0]),gu=fe("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]),Ws=class extends W{constructor(r={}){super(r),this.subFilters=r.subFilters||[]}applyTo(r){ji(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(Ws,"type","Composed"),_.setClass(Ws);var gr=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(gr,"type","Contrast"),m(gr,"defaults",{contrast:0}),m(gr,"uniformLocations",["uContrast"]),_.setClass(gr);var pu={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
|
+
`},pr=class extends W{getCacheKey(){return`${this.type}_${Math.sqrt(this.matrix.length)}_${+!!this.opaque}`}getFragmentSource(){return pu[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,p,f,v,y,x,S,w,C,O,T;for(C=0;C<o;C++)for(w=0;w<a;w++){for(f=4*(C*a+w),u=0,d=0,g=0,p=0,T=0;T<s;T++)for(O=0;O<s;O++)y=C+T-n,v=w+O-n,y<0||y>=o||v<0||v>=a||(x=4*(y*a+v),S=i[T*s+O],u+=e[x]*S,d+=e[x+1]*S,g+=e[x+2]*S,c||(p+=e[x+3]*S));h[f]=u,h[f+1]=d,h[f+2]=g,h[f+3]=c?e[f+3]:p}r.imageData=l}sendUniformData(r,t){r.uniform1fv(t.uMatrix,this.matrix)}toObject(){return{...super.toObject(),opaque:this.opaque,matrix:[...this.matrix]}}};m(pr,"type","Convolute"),m(pr,"defaults",{opaque:!1,matrix:[0,0,0,0,1,0,0,0,0]}),m(pr,"uniformLocations",["uMatrix","uOpaque","uHalfSize","uSize"]),_.setClass(pr);var ul="Gamma",fr=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:
|
|
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:ul,gamma:this.gamma.concat()}}};m(fr,"type",ul),m(fr,"defaults",{gamma:[1,1,1]}),m(fr,"uniformLocations",["uGamma"]),_.setClass(fr);var fu={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 fu[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 mu={...cl,rotation:0},li=class extends le{calculateMatrix(){let r=this.rotation*Math.PI,t=bt(r),e=xt(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(li,"type","HueRotation"),m(li,"defaults",mu),_.setClass(li);var vr=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(vr,"type","Invert"),m(vr,"defaults",{alpha:!1,invert:!0}),m(vr,"uniformLocations",["uInvert","uAlpha"]),_.setClass(vr);var yr=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(yr,"type","Noise"),m(yr,"defaults",{noise:0}),m(yr,"uniformLocations",["uNoise","uSeed"]),_.setClass(yr);var br=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(br,"type","Pixelate"),m(br,"defaults",{blocksize:4}),m(br,"uniformLocations",["uBlocksize"]),_.setClass(br);var xr=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 ct(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 ct(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 ct(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 ct(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(xr,"type","RemoveColor"),m(xr,"defaults",{color:"#FFFFFF",distance:.02,useAlpha:!1}),m(xr,"uniformLocations",["uLow","uHigh"]),_.setClass(xr);var Sr=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){
|
|
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){ji(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,p=t,f=0;u.sliceByTwo||(u.sliceByTwo=Ot());let v=u.sliceByTwo;(v.width<1.5*t||v.height<e)&&(v.width=1.5*t,v.height=e);let y=v.getContext("2d");for(y.clearRect(0,0,1.5*t,e),y.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),y.drawImage(v,d,g,t,e,p,f,h,c),d=p,g=f,f+=c;return y.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),p=Math.ceil(c*this.lanczosLobes/2),f={},v={x:0,y:0},y={x:0,y:0};return(function x(S){let w,C,O,T,k,M,A,E,D,j,B;for(v.x=(S+.5)*h,y.x=Math.floor(v.x),w=0;w<s;w++){for(v.y=(w+.5)*c,y.y=Math.floor(v.y),k=0,M=0,A=0,E=0,D=0,C=y.x-g;C<=y.x+g;C++)if(!(C<0||C>=t)){j=Math.floor(1e3*Math.abs(C-v.x)),f[j]||(f[j]={});for(let G=y.y-p;G<=y.y+p;G++)G<0||G>=e||(B=Math.floor(1e3*Math.abs(G-v.y)),f[j][B]||(f[j][B]=l(Math.sqrt((j*u)**2+(B*d)**2)/1e3)),O=f[j][B],O>0&&(T=4*(G*t+C),k+=O,M+=O*n[T],A+=O*n[T+1],E+=O*n[T+2],D+=O*n[T+3]))}T=4*(w*i+S),o[T]=M/k,o[T+1]=A/k,o[T+2]=E/k,o[T+3]=D/k}return++S<i?x(S):a})(0)}bilinearFiltering(r,t,e,i,s){let n,a,o,l,h,c,u,d,g,p,f,v,y,x=0,S=this.rcpScaleX,w=this.rcpScaleY,C=4*(t-1),O=r.imageData.data,T=r.ctx.createImageData(i,s),k=T.data;for(u=0;u<s;u++)for(d=0;d<i;d++)for(h=Math.floor(S*d),c=Math.floor(w*u),g=S*d-h,p=w*u-c,y=4*(c*t+h),f=0;f<4;f++)n=O[y+f],a=O[y+4+f],o=O[y+C+f],l=O[y+C+4+f],v=n*(1-g)*(1-p)+a*g*(1-p)+o*p*(1-g)+l*g*p,k[x++]=v;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 p=4*(g+d*i),f,v=0,y=0,x=0,S=0,w=0,C=0,O=(d+.5)*a;for(let T=Math.floor(d*a);T<(d+1)*a;T++){let k=Math.abs(O-(T+.5))/l,M=(g+.5)*n,A=k*k;for(let E=Math.floor(g*n);E<(g+1)*n;E++){let D=Math.abs(M-(E+.5))/o,j=Math.sqrt(A+D*D);j>1&&j<-1||(f=2*j*j*j-3*j*j+1,f>0&&(D=4*(E+T*t),C+=f*h[D+3],y+=f,h[D+3]<255&&(f=f*h[D+3]/250),x+=f*h[D],S+=f*h[D+1],w+=f*h[D+2],v+=f))}}u[p]=x/v,u[p+1]=S/v,u[p+2]=w/v,u[p+3]=C/y}return c}};m(Sr,"type","Resize"),m(Sr,"defaults",{resizeType:"hermite",scaleX:1,scaleY:1,lanczosLobes:3}),m(Sr,"uniformLocations",["uDelta","uTaps"]),_.setClass(Sr);var Cr=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(Cr,"type","Saturation"),m(Cr,"defaults",{saturation:0}),m(Cr,"uniformLocations",["uSaturation"]),_.setClass(Cr);var wr=class extends W{getFragmentSource(){return`
|
|
490
490
|
precision highp float;
|
|
491
491
|
uniform sampler2D uTexture;
|
|
492
492
|
uniform float uVibrance;
|
|
@@ -501,6 +501,6 @@ 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(Cr,"type","Vibrance"),m(Cr,"defaults",{vibrance:0}),m(Cr,"uniformLocations",["uVibrance"]),_.setClass(Cr);var Lr=Ar({BaseFilter:()=>W,BlackWhite:()=>cu,BlendColor:()=>lr,BlendImage:()=>hr,Blur:()=>cr,Brightness:()=>ur,Brownie:()=>su,ColorMatrix:()=>le,Composed:()=>Xs,Contrast:()=>dr,Convolute:()=>gr,Gamma:()=>pr,Grayscale:()=>fr,HueRotation:()=>oi,Invert:()=>mr,Kodachrome:()=>au,Noise:()=>vr,Pixelate:()=>yr,Polaroid:()=>lu,RemoveColor:()=>br,Resize:()=>xr,Saturation:()=>wr,Sepia:()=>hu,Technicolor:()=>ou,Vibrance:()=>Cr,Vintage:()=>nu});var Le=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 vn=Ml("crypto");var hl="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var pu=128,Qt,Re;function fu(r){if(r<0)throw new RangeError("Wrong ID size");try{!Qt||Qt.length<r?(Qt=Buffer.allocUnsafe(r*pu),vn.webcrypto.getRandomValues(Qt),Re=0):Re+r>Qt.length&&(vn.webcrypto.getRandomValues(Qt),Re=0)}catch(t){throw Qt=void 0,t}Re+=r}function cl(r=21){fu(r|=0);let t="";for(let e=Re-r;e<Re;e++)t+=hl[Qt[e]&63];return t}var te=()=>cl(12);var Rr=class{id;type;name;visible;locked;opacity;meta;fabricObject;constructor(t,e,i,s){this.id=s??te(),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.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}:{}}}serialize(){return{...this.toData(),fabricObject:this.fabricObject.toObject()}}},Be=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 Rr(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.layers.findIndex(s=>s.id===t);if(e===-1)return!1;let i=this.layers[e];return this.canvas.remove(i.fabricObject),this.layers.splice(e,1),this.events.emit("layer:removed",{layerId:t}),this.emitChanged(),this.onPropertyChanged?.(),!0}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),a&&this.canvas.setActiveObject(e),this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.emitChanged(),this.onPropertyChanged?.(),!0}reorder(t,e){let i=this.layers.findIndex(a=>a.id===t);if(i===-1||!Number.isFinite(e))return!1;let s=Math.max(0,Math.min(this.layers.length-1,Math.round(e)));if(i===s)return!1;let[n]=this.layers.splice(i,1);return this.layers.splice(s,0,n),this.layers.forEach((a,o)=>{this.canvas.moveObjectTo(a.fabricObject,o)}),this.events.emit("layer:reordered",{layerIds:this.layers.map(a=>a.id)}),this.emitChanged(),this.onPropertyChanged?.(),!0}select(t){if(t===null)this.canvas.discardActiveObject();else{let i=this.get(t);i&&this.canvas.setActiveObject(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})}get(t){return this.layers.find(e=>e.id===t)}getAll(){return[...this.layers]}findByObject(t){let e=t._layerId;return e?this.get(e):this.layers.find(i=>i.fabricObject===t)}setVisibility(t,e){let i=this.get(t);i&&i.visible!==e&&(i.visible=e,i.fabricObject.visible=e,this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.())}setLocked(t,e){let i=this.get(t);i&&i.locked!==e&&(i.locked=e,i.fabricObject.selectable=!e,i.fabricObject.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.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?.())}clear(){for(let t of this.layers)this.canvas.remove(t.fabricObject);this.layers=[],this.emitChanged()}count(){return this.layers.length}emitChanged(){this.events.emit("layers:changed",{layers:this.layers.map(t=>t.toData())})}};var Xe=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 mu="#22c55e",$e=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}=vu(this.canvas,t,i,s);this.guides=[];let o=ul([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=ul([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=mu,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 vu(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 ul(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 N(r,t,e){return Math.min(e,Math.max(t,r))}function J(r){return Math.round(r*100)/100}var Ye=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 jt({left:s.left,top:s.top,width:s.width,height:s.height,originX:"left",originY:"top",fill:"rgba(34,197,94,0.12)",stroke:dl,strokeWidth:1,strokeDashArray:[4,4],strokeUniform:!0,lockRotation:!0,cornerColor:dl,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,p=i.getScaledHeight()/n;u=N(u,0,Math.max(0,h-1)),d=N(d,0,Math.max(0,c-1)),g=N(g,1,h-u),p=N(p,1,c-d),e.set({cropX:u,cropY:d,width:g,height:p,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}))}},dl="#22c55e";var ml=200,We=class{constructor(t,e,i,s,n){this.canvas=t;this.layers=e;this.history=i;this.events=s;this.sourceResolver=n}canvas;layers;history;events;sourceResolver;chains=new Map;isPattern(t){return!!this.layers.get(t)?.meta.pattern}getConfig(t){return this.layers.get(t)?.meta.pattern?.config??null}apply(t,e){return this.enqueue(t,async()=>{let i=this.layers.get(t);if(!i||i.type!=="image")return;let s=i.fabricObject,n=!i.meta.pattern;if(i.meta.pattern)i.meta.pattern.config=e;else{let a=s.clipPath;i.meta.pattern={config:e,originalSrc:yu(s)??s.getSrc(),originalClip:a?a.toObject():null,originalLocks:yn(s),original:{left:s.left??0,top:s.top??0,scaleX:s.scaleX??1,scaleY:s.scaleY??1,width:s.width??0,height:s.height??0,angle:s.angle??0,cropX:s.cropX??0,cropY:s.cropY??0}}}try{await this.renderLayer(i)}catch(a){throw n&&delete i.meta.pattern,a}this.history.save()}).catch(i=>{throw this.events.emit("error",{message:"Failed to apply image pattern",error:i}),i})}repinAll(){let t=this.canvas.getWidth(),e=this.canvas.getHeight(),i=!1;for(let s of this.layers.getAll()){if(!s.meta.pattern||s.type!=="image")continue;let n=s.fabricObject;n.set({left:0,top:0,angle:0,scaleX:t/(n.width||t),scaleY:e/(n.height||e)}),ji(n),n.setCoords(),i=!0}i&&this.canvas.requestRenderAll()}disable(t){return this.enqueue(t,async()=>{let e=this.layers.get(t),i=e?.meta.pattern;if(!e||!i)return;let s=e.fabricObject;await s.setSrc(i.originalSrc),s.set({left:i.original.left,top:i.original.top,scaleX:i.original.scaleX,scaleY:i.original.scaleY,width:i.original.width,height:i.original.height,cropX:i.original.cropX,cropY:i.original.cropY,angle:i.original.angle}),s.clipPath=i.originalClip?(await Zt.enlivenObjects([i.originalClip]))[0]:void 0,bn(s,i.originalLocks),s.setCoords(),delete e.meta.pattern,this.canvas.requestRenderAll(),this.history.save()}).catch(e=>{throw this.events.emit("error",{message:"Failed to clear image pattern",error:e}),e})}enqueue(t,e){let s=(this.chains.get(t)??Promise.resolve()).then(e,e);return this.chains.set(t,s.catch(()=>{})),s}async renderLayer(t){let e=t.meta.pattern;if(!e)return;let i=t.fabricObject,s=this.canvas.getWidth(),n=this.canvas.getHeight(),a=Math.max(1,e.config.scale??100)/100,o=Math.sqrt(s*s+n*n),l=Math.max(2,o/ml),h=Math.max(l,e.original.width*e.original.scaleX*a),c=Math.max(l,e.original.height*e.original.scaleY*a),u=await wn(e.originalSrc,e.config,s,n,h,c,this.sourceResolver);await i.setSrc(u),i.set({left:0,top:0,scaleX:1,scaleY:1,width:s,height:n,cropX:0,cropY:0,angle:0}),i.clipPath=void 0,ji(i),i.setCoords(),this.canvas.requestRenderAll()}};function yn(r){return{lockMovementX:r.lockMovementX??!1,lockMovementY:r.lockMovementY??!1,lockScalingX:r.lockScalingX??!1,lockScalingY:r.lockScalingY??!1,lockRotation:r.lockRotation??!1,hasControls:r.hasControls??!0}}function ji(r){r.set({lockMovementX:!0,lockMovementY:!0,lockScalingX:!0,lockScalingY:!0,lockRotation:!0,hasControls:!1})}function bn(r,t){r.set(t??{lockMovementX:!1,lockMovementY:!1,lockScalingX:!1,lockScalingY:!1,lockRotation:!1,hasControls:!0})}function yu(r){try{let t=r.getElement(),e=t.naturalWidth||t.width,i=t.naturalHeight||t.height;if(!e||!i)return null;let s=document.createElement("canvas");s.width=e,s.height=i;let n=s.getContext("2d");return n?(n.drawImage(t,0,0),s.toDataURL("image/png")):null}catch{return null}}var bu=16,Mt=new Map;function xn(r,t){let e=Mt.get(r);if(e)return Mt.delete(r),Mt.set(r,e),e;let i=gl(r).catch(async s=>{if(!t)throw s;let n=await t(r);if(!n||n===r)throw new Error("Pattern source resolver did not return a usable alternate URL",{cause:s});return gl(n)});if(i.catch(()=>{Mt.get(r)===i&&Mt.delete(r)}),Mt.set(r,i),Mt.size>bu){let s=Mt.keys().next().value;s!==void 0&&Mt.delete(s)}return i}function gl(r){return new Promise((t,e)=>{let i=new Image;i.crossOrigin="anonymous",i.onload=()=>t(i),i.onerror=()=>e(new Error(`Failed to load pattern source: ${r}`)),i.src=r})}function Ii(){Mt.clear()}async function wn(r,t,e,i,s,n,a){let o=await xn(r,a),l=document.createElement("canvas");l.width=Math.max(1,Math.round(e)),l.height=Math.max(1,Math.round(i));let h=l.getContext("2d");return h&&Sn(h,o,t,e,i,s,n),l.toDataURL("image/png")}function Cn(r,t,e,i,s){let n=Math.sqrt(t*t+e*e),a=Math.max(1,n/ml),o=Math.max(a,i*(1+r.horizontalSpacing/100)),l=Math.max(a,s*(1+r.verticalSpacing/100)),h=Math.ceil(n/o)+2,c=Math.ceil(n/l)+2,u=Math.ceil(h/2),d=Math.ceil(c/2),g=o*(pl(r.offsetX)/100),p=l*(pl(r.offsetY)/100),f=[];for(let v=-d;v<=d;v++)for(let y=-u;y<=u;y++){let x=y*o+g,w=v*l+p;r.mode==="brick-horizontal"&&fl(v)===1?x+=o*(r.horizontalOffset/100):r.mode==="brick-vertical"&&fl(y)===1&&(w+=l*(r.horizontalOffset/100));let S=(y*r.rotationStepH+v*r.rotationStepV)*Math.PI/180;f.push({x,y:w,rotation:S})}return f}function Sn(r,t,e,i,s,n,a){r.save(),r.translate(i/2,s/2),r.rotate(e.angle*Math.PI/180);for(let o of Cn(e,i,s,n,a))r.save(),r.translate(o.x,o.y),r.rotate(o.rotation),r.drawImage(t,-n/2,-a/2,n,a),r.restore();r.restore()}function pl(r){return typeof r!="number"||!Number.isFinite(r)?0:Math.max(-100,Math.min(100,r))}function fl(r){return(r%2+2)%2}var Fi={arc:0,wave:0},_n=.5,xu=99.5,wu=.12,Cu=4.1,Su=.9,_u=6,Tu=1e5,ku=.06;function vl(r){return!!r&&typeof r.text=="string"}function Ou(r){let t=r.width;try{return r.set({width:Tu}),r.initDimensions?.(),Math.max(1,r.calcTextWidth?.()??r.width??1)}finally{t!==void 0&&r.set({width:t}),r.initDimensions?.()}}function Mu(r,t){let e=Math.min(100,Math.abs(t)),i=t<0?-1:1,s=e>=xu,n=s?Math.PI*2:Math.max(wu,e/100*Math.PI),a=r/n,o=r/2,l=p=>[o+a*Math.sin(p),i*a*(1-Math.cos(p))],h=i>0?1:0,c=([p,f])=>`${Pt(p)} ${Pt(f)}`;if(s){let p=l(-Math.PI),f=l(0);return{data:[`M ${c(p)}`,`A ${Pt(a)} ${Pt(a)} 0 0 ${h} ${c(f)}`,`A ${Pt(a)} ${Pt(a)} 0 0 ${h} ${c(p)}`].join(" "),length:r}}let u=l(-n/2),d=l(n/2),g=n>Math.PI?1:0;return{data:`M ${c(u)} A ${Pt(a)} ${Pt(a)} 0 ${g} ${h} ${c(d)}`,length:r}}function Pu(r,t,e){let i=N(e,0,100)/100*t*Su,s=Math.max(1,t*Cu),n=Math.max(2,Math.ceil(r/_u)),a=[],o=0,l=null;for(let h=0;h<=n;h++){let c=r*h/n,u=i*Math.sin(c/s*Math.PI*2);l&&(o+=Math.hypot(c-l[0],u-l[1])),l=[c,u],a.push(`${h===0?"M":"L"} ${Pt(c)} ${Pt(u)}`)}return{data:a.join(" "),length:o}}function Pt(r){return Math.round(r*100)/100}function Tn(r,t,e){return Math.abs(r.arc)>=_n?Mu(t,r.arc):r.wave>0?Pu(t,e,r.wave):null}function Eu(r){let t=N(r.arc??0,-100,100);return{arc:t,wave:Math.abs(t)>=_n?0:N(r.wave??0,0,100)}}var ze=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s}canvas;layers;history;events;get(t){let e=this.layers.get(t);return!e||!vl(e.fabricObject)?null:e.meta.curve??{...Fi}}isCurved(t){let e=this.get(t);return!!e&&(Math.abs(e.arc)>=_n||e.wave>0)}apply(t,e,i=!0){let s=this.layers.get(t);if(!s||!vl(s.fabricObject))return!1;let n=Eu(e),a=s.fabricObject,o=Ou(a),l=Tn(n,o*(1+ku),a.fontSize);return l?(s.meta.curveWidth===void 0&&(s.meta.curveWidth=a.width??0),a.set({width:Math.max(s.meta.curveWidth,o+2)}),a.set({path:new It(l.data,{visible:!1,objectCaching:!1}),pathAlign:"center",pathSide:"left",pathStartOffset:Math.max(0,(l.length-o)/2)}),s.meta.curve=n):(this.detach(a,s.meta.curveWidth),delete s.meta.curve,delete s.meta.curveWidth),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){return this.apply(t,Fi,e)}refresh(t,e=!1){let i=this.layers.get(t)?.meta.curve;return i?this.apply(t,i,e):!1}refreshAll(){for(let t of this.layers.getAll())t.meta.curve&&this.refresh(t.id)}detach(t,e){t.set({path:null,pathStartOffset:0}),e!==void 0&&e>0&&t.set({width:e})}};var Li=["circle","square","triangle","star","heart","octagram","arch","zigzag"];function He(r){return typeof r=="string"&&Li.includes(r)}function kn(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"} ${yl(h)} ${yl(c)}`)}return`${n.join(" ")} Z`}function yl(r){return Math.round(r*100)/100}var Du={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:kn(5,46,22),heart:"M 50 96 C -8 55 12 4 50 28 C 88 4 108 55 50 96 Z",octagram:kn(8,46,27),arch:"M 4 96 V 50 A 46 46 0 0 1 96 50 V 96 Z",zigzag:kn(16,46,39)};function Br(r){return Du[r]}var Ve=100;var Ri=["vignette","halftone","spray","grunge","torn","band"];function Xr(r){return typeof r=="string"&&Ri.includes(r)}var Et=320,Mn=new Map;function On(r){let t=r;return()=>(t=t*16807%2147483647,(t-1)/2147483646)}function bl(r,t,e,i){let s=Et,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,p=l+(c-l)*d+(t()-.5)*e;a===0&&u===0?r.moveTo(g,p):r.lineTo(g,p)}}r.closePath(),r.fill()}function Au(r,t){let e=Et,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=On(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=On(7);bl(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":{bl(t,On(99),10,e*.08);return}}}function $r(r){let t=Mn.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=Et,e.height=Et;let i=e.getContext("2d");if(!i)throw new Error("Texture masks require a 2D canvas context");return Au(r,i),Mn.set(r,e),e}function Pn(){Mn.clear()}function Bi(r){return He(r)||Xr(r)}var me=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(!Bi(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 He(t)?new It(Br(t),{...n,scaleX:i/Ve,scaleY:s/Ve}):new V($r(t),{...n,scaleX:i/Et,scaleY:s/Et})}};var ju=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\([\d.%+\-\s,/]+\)|[a-z]+)$/i;function ee(r,t=!1){if(typeof r!="string")return!1;let e=r.trim();return e?ju.test(e):t}var re={enabled:!1,color:"#000000",blur:12,offsetX:6,offsetY:6};function Yr(r){let t=r.shadow;return!t||typeof t=="string"?{...re}:{enabled:!0,color:typeof t.color=="string"?t.color:re.color,blur:t.blur??re.blur,offsetX:t.offsetX??re.offsetX,offsetY:t.offsetY??re.offsetY}}function Xi(r,t){let e={...Yr(r),...t};if(!e.enabled){r.set({shadow:null});return}let i=ee(e.color)?e.color:re.color;r.set({shadow:new he({color:i,blur:Math.max(0,e.blur),offsetX:e.offsetX,offsetY:e.offsetY})})}var Iu=["ml","mr","mt","mb"];function ve(r,t){for(let e of Iu)r.setControlVisible(e,!t)}function $i(r){r.set({scaleX:1,scaleY:1,angle:0,skewX:0,skewY:0,flipX:!1,flipY:!1}),r.setCoords()}var Ne=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 Fu="2.0.0";function Yi(r){return{version:Fu,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 Wi(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&&!ee(t.background,!0))throw new Error("Invalid editor background color");let i=await Promise.all(t.layers.map(async n=>{let a=(await Zt.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 Zt.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)Lu(r,n.serialized,n.fabricObject);r.canvas.requestRenderAll()}function Lu(r,t,e){let i=r.layers.add(t.type,e,t.name,t.id);return t.meta&&(i.meta=t.meta,i.meta.lockAspect&&ve(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),i}var xl={red:0,green:1,blue:2,alpha:3};function wl(r,t,e){let i=r??t;if(!Number.isFinite(i))throw new Error(`${e} must be finite`);return i}function Ru(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,p=r[(h*t+l)*4+n]*(1-d)+r[(h*t+c)*4+n]*d,f=r[(u*t+l)*4+n]*(1-d)+r[(u*t+c)*4+n]*d;return p*(1-g)+f*g}function zi(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=wl(s.scaleX,10,"Displacement scaleX"),o=wl(s.scaleY,10,"Displacement scaleY"),l=xl[s.channelX??"red"],h=xl[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,p=d+(t[g+l]-128)/127*a,f=u+(t[g+h]-128)/127*o;for(let v=0;v<4;v+=1)c[g+v]=Math.round(Ru(r,e,i,p,f,v))}return c}function Hi(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 En(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 Dn(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 Wr(r,t={}){let{multiplier:e=1,format:i="png",quality:s=1}=t,n=r.toCanvasElement(e);return Dn(n,i,s)}async function zr(r,t,e={}){let i=r.lowerCanvasEl.ownerDocument.createElement("canvas"),s=new Fe(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 Wr(s,e)}finally{s.dispose()}}async function Vi(r,t,e={}){let{multiplier:i=1,format:s="png",quality:n=1}=e,a=r.getWidth(),o=r.getHeight(),l=Hi(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 Fe(h,{width:a,height:o});try{let u=await Promise.all(r.getObjects().map(f=>f.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 p=g.getContext("2d");if(!p)throw new Error("2D canvas context is unavailable");return p.drawImage(d,-l.left,-l.top),await Dn(g,s,n)}finally{c.dispose()}}async function Ni(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,p)=>{let f=new Image;f.crossOrigin="anonymous",f.onload=()=>g(f),f.onerror=()=>p(new Error(`Failed to load mockup image: ${d}`)),f.src=d}),c=(d,g=l)=>{let p=En(d.naturalWidth||d.width,d.naturalHeight||d.height,o.width,o.height);g.drawImage(d,p.left,p.top,p.width,p.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 p=a.ownerDocument.createElement("canvas");u.push(p),p.width=a.width,p.height=a.height;let f=p.getContext("2d");if(!f)throw new Error("2D displacement-map context is unavailable");c(await h(t.displacement.image),f);let v=a.ownerDocument.createElement("canvas");u.push(v),v.width=a.width,v.height=a.height;let y=v.getContext("2d");if(!y)throw new Error("2D displaced-design context is unavailable");let x,w;try{x=g.getImageData(0,0,a.width,a.height).data,w=f.getImageData(0,0,a.width,a.height).data}catch(O){throw new Error("Failed to apply mockup displacement map; verify image CORS access",{cause:O})}let S=zi(x,w,a.width,a.height,{...t.displacement,scaleX:(t.displacement.scaleX??10)*i,scaleY:(t.displacement.scaleY??10)*i}),C=y.createImageData(a.width,a.height);C.data.set(S),y.putImageData(C,0,0),d=v}if(l.save(),t.printArea&&t.clipToPrintArea!==!1){let g=Hi(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 Dn(o,s,n)}finally{for(let d of u)d.width=0,d.height=0}}function Gi(r){return r.toSVG()}function Ui(r,t="png",e=1){return r.toDataURL({format:t,multiplier:e})}function qi(r){return String(r).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Ki(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 Bu(r){return/^(?:url|local)\(/.test(r.trim())?r:`url(${JSON.stringify(r)})`}function Xu(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 $u(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 Ji(r){return JSON.stringify(r).replace(/[<>&]/g,t=>`\\${t.charCodeAt(0).toString(16)} `)}var Yu=/^(?:normal|bold|bolder|lighter|[1-9]\d{0,2}(?:\s+[1-9]\d{0,2})?)$/i,Wu=/^(?:normal|italic|oblique(?:\s+-?\d+(?:\.\d+)?deg)?)$/i,zu=/^(?:auto|block|swap|fallback|optional)$/i;function An(r,t,e){let i=r?.trim();return i&&t.test(i)?i:e}function Hu(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 Vu(r){let t=r.trim().match(/^local\(\s*(['"]?)([^)"'{};]*)\1\s*\)$/i);return t&&t[2].trim()||null}var Ge=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,Bu(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=Hu(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=$u(await l.arrayBuffer()),c=l.headers.get("content-type")||Xu(i);s=`url(${Ji(`data:${c};base64,${h}`)})`}else if(i)s=`url(${Ji(i)})`;else{let l=Vu(e.source);if(!l)throw new Error(`Unsupported font source for embedding: ${e.family}`);s=`local(${Ji(l)})`}let n=An(e.weight,Yu,"normal"),a=An(e.style,Wu,"normal"),o=An(e.display,zu,"swap");return`@font-face{font-family:${Ji(e.family)};src:${s};font-weight:${n};font-style:${a};font-display:${o}}`}))).join(`
|
|
505
|
-
`)}};function Nu(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 Gu(r){return r==="localhost"||r==="127.0.0.1"||r==="::1"||r.endsWith(".localhost")}var Ue=class{constructor(t={}){this.config=t;let e=t.hostname??globalThis.location?.hostname??"localhost";(t.environment??"development")!=="production"||Gu(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=>Nu(e,s))?this.status={state:"valid",payload:i}:this.status={state:"domain-mismatch",payload:i}:this.status={state:"invalid",payload:null}}};var qe=class{constructor(t){this.editor=t;let e={id:te(),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:te(),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:te(),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 Dt=class extends Error{constructor(e,i,s){super(i);this.code=e;this.cause=s;this.name="MaskRefinementError"}code;cause},Ke=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 V(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:N(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 Dt("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 Dt("cancelled","Mask refinement cancelled");if(!/^data:image\/(?:png|jpeg|webp);base64,/i.test(h.dataUrl))throw new Dt("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 Dt?l:a.signal.aborted?new Dt("cancelled","Mask refinement cancelled",l):new Dt("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 Uu=.1,qu=8;function Ku(r){return r instanceof DOMException&&r.name==="SecurityError"||r instanceof Error&&/taint|cross-origin|insecure/i.test(r.message)}var Zi=class{canvas;layers;history;events;units;snapping;crop;patterns;curves;maskPresets;fonts;licensing;pages;masks;fileAdapter;imageProvider;zoomLevel=1;mockup=null;designBackground;designBackgroundImage=null;backgroundImageOptions=null;constructor(t,e){this.events=new Le,this.fonts=new Ge,e.fonts?.forEach(n=>this.fonts.register(n)),this.licensing=new Ue(e.license),this.units=new Ne(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 mi(t,{width:i,height:s,backgroundColor:this.designBackground,preserveObjectStacking:e.preserveObjectStacking??!0,selection:!0}),this.layers=new Be(this.canvas,this.events),this.fileAdapter=e.fileAdapter,this.imageProvider=e.imageProvider,this.history=new Xe({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 $e(this.canvas,this.events),this.crop=new Ye(this.canvas,this.history,this.events),this.patterns=new We(this.canvas,this.layers,this.history,this.events,e.patternSourceResolver),this.curves=new ze(this.canvas,this.layers,this.history,this.events),this.maskPresets=new me(this.canvas,this.layers,this.history,this.events),this.setupCanvasEvents(),this.history.saveImmediate(),this.pages=new qe(this),this.masks=new Ke(this)}async addImage(t,e){try{let i=await V.fromURL(t,{},{originX:"left",originY:"top",...e}),s=this.layers.add("image",i);return 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 V.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 Te(t,{fontSize:32,fontFamily:"Arial",fill:"#000000",width:200,originX:"left",originY:"top",...e}),s=this.layers.add("text",i);return this.history.save(),s}addShape(t,e){let i=t.create(e),s=this.layers.add("shape",i,t.name);return this.history.save(),s}async addTemplate(t,e){let i={};for(let c of t.parameters){let u=e[c.key]??c.default;if(u===void 0)throw new Error(`Missing template parameter: ${c.key}`);if(c.type==="number"&&!Number.isFinite(Number(u)))throw new Error(`Invalid number for template parameter: ${c.key}`);if(c.type==="color"&&!ee(u))throw new Error(`Invalid color for template parameter: ${c.key}`);i[c.key]=u}let s=Ki(t.svg.replace(/\{\{(\w+)(?:[|:]([^}]*))?\}\}/g,(c,u,d)=>{let g=i[u]??d;return g===void 0?c:qi(g)})),{objects:n,options:a}=await al(s),o=n.filter(c=>c!==null);if(o.length===0)throw new Error("Template SVG contains no renderable objects");let l=Zt.groupSVGElements(o,a);l.set({left:this.canvas.getWidth()/2,top:this.canvas.getHeight()/2,originX:"center",originY:"center"});let h=this.layers.add("template",l,t.name);return this.history.save(),h}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)}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();e.meta.pattern||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.canvas.setActiveObject(i),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)=>N(l??0,h,1);return s.filters=[new Lr.Brightness({brightness:o(a.brightness)}),new Lr.Contrast({contrast:o(a.contrast)}),new Lr.Saturation({saturation:o(a.saturation)}),new Lr.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(n=>this.layers.get(n)).filter(n=>n!==void 0);return s.length<2||s.length!==i.length?null:this.history.transaction(()=>{let n=s.map(h=>structuredClone(h.toData())),a=s.map(h=>h.fabricObject);for(let h of s)this.layers.remove(h.id);let o=new Ft(a),l=this.layers.add("group",o,e);return l.meta.groupChildren=n,this.layers.select(l.id),this.history.save(),l})}async ungroupLayer(t){let e=this.layers.get(t),i=e?.meta.groupChildren;if(!e||e.type!=="group"||!Array.isArray(i))return[];let s=e.fabricObject;return this.history.transaction(()=>{let n=s.calcTransformMatrix(),a=s.removeAll();this.layers.remove(t);let o=a.map((l,h)=>{Zt.addTransformToObject(l,n),l.setCoords();let c=i[h],u=this.layers.add(c?.type??"group",l,c?.name,c?.id);return c?.meta&&(u.meta=structuredClone(c.meta)),c&&!c.visible&&this.layers.setVisibility(u.id,!1),c?.locked&&this.layers.setLocked(u.id,!0),c&&c.opacity!==1&&this.layers.setOpacity(u.id,c.opacity),u});return this.history.save(),this.layers.select(o[0]?.id??null),o})}toJSON(){return Yi(this)}async fromJSON(t){let e=this.history.isRestoring();e||(this.history.saveImmediate(),this.history.pause());try{await Wi(this,t),this.patterns.repinAll()}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 V){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 zr(this.canvas,[s],{...e,width:s.width||1,height:s.height||1,cloneObjects:!1})}return await zr(this.canvas,[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 zr(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(()=>Wr(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:Ku(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(()=>Gi(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(()=>Ui(this.canvas,t,e))}async toPrintFile(t={}){await this.fonts.ready();try{let e=this.mockup?.printArea,i=e?await Vi(this.canvas,e,t):await zr(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 Ni(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:J(o.x/e),y:J(o.y/i),scale:J(a.scaleX??1),angle:J(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:J(n.x/t),centerY:J(n.y/e),width:J(a.width/t),height:J(a.height/e),scaleX:J(s.scaleX??1),scaleY:J(s.scaleY??1),angle:J(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 V.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:N(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()){if(u.meta.pattern)continue;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.repinAll(),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:J(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=N(J(t),Uu,qu);e!==this.zoomLevel&&(this.zoomLevel=e,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?(ve(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&&ve(t.fabricObject,!0)}resetLayerTransform(t){let e=this.layers.get(t);return e?($i(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?(Xi(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?Yr(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.snapping.dispose(),this.crop.dispose(),this.history.dispose(),Ii(),this.events.removeAllListeners(),this.canvas.dispose()}setupCanvasEvents(){this.canvas.on("object:modified",t=>{if(!t.target)return;let e=this.layers.findByObject(t.target);e&&(this.events.emit("layer:modified",{layerId:e.id}),this.history.save())}),this.canvas.on("selection:created",t=>{let e=(t.selected??[]).map(i=>this.layers.findByObject(i)?.id).filter(i=>i!==void 0);this.events.emit("selection:changed",{selected:e})}),this.canvas.on("selection:updated",t=>{let e=(t.selected??[]).map(i=>this.layers.findByObject(i)?.id).filter(i=>i!==void 0);this.events.emit("selection:changed",{selected:e})}),this.canvas.on("selection:cleared",()=>{this.events.emit("selection:changed",{selected:[]})})}};var Cl={mode:"grid",scale:100,horizontalSpacing:0,verticalSpacing:0,angle:0,horizontalOffset:0,offsetX:0,offsetY:0,rotationStepH:0,rotationStepV:0};var Sl=[{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 Qi=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 Dl(Ju);})();
|
|
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(wr,"type","Vibrance"),m(wr,"defaults",{vibrance:0}),m(wr,"uniformLocations",["uVibrance"]),_.setClass(wr);var Rr=jr({BaseFilter:()=>W,BlackWhite:()=>gu,BlendColor:()=>hr,BlendImage:()=>cr,Blur:()=>ur,Brightness:()=>dr,Brownie:()=>ou,ColorMatrix:()=>le,Composed:()=>Ws,Contrast:()=>gr,Convolute:()=>pr,Gamma:()=>fr,Grayscale:()=>mr,HueRotation:()=>li,Invert:()=>vr,Kodachrome:()=>hu,Noise:()=>yr,Pixelate:()=>br,Polaroid:()=>uu,RemoveColor:()=>xr,Resize:()=>Sr,Saturation:()=>Cr,Sepia:()=>du,Technicolor:()=>cu,Vibrance:()=>wr,Vintage:()=>lu});var Re=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 xn=Dl("crypto");var dl="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var vu=128,Qt,Be;function yu(r){if(r<0)throw new RangeError("Wrong ID size");try{!Qt||Qt.length<r?(Qt=Buffer.allocUnsafe(r*vu),xn.webcrypto.getRandomValues(Qt),Be=0):Be+r>Qt.length&&(xn.webcrypto.getRandomValues(Qt),Be=0)}catch(t){throw Qt=void 0,t}Be+=r}function gl(r=21){yu(r|=0);let t="";for(let e=Be-r;e<Be;e++)t+=dl[Qt[e]&63];return t}var te=()=>gl(12);var Br=class{id;type;name;visible;locked;opacity;meta;fabricObject;constructor(t,e,i,s){this.id=s??te(),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.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}:{}}}serialize(){return{...this.toData(),fabricObject:this.fabricObject.toObject()}}},Xe=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 Br(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.layers.findIndex(s=>s.id===t);if(e===-1)return!1;let i=this.layers[e];return this.canvas.remove(i.fabricObject),this.layers.splice(e,1),this.events.emit("layer:removed",{layerId:t}),this.emitChanged(),this.onPropertyChanged?.(),!0}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),a&&this.canvas.setActiveObject(e),this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.emitChanged(),this.onPropertyChanged?.(),!0}reorder(t,e){let i=this.layers.findIndex(a=>a.id===t);if(i===-1||!Number.isFinite(e))return!1;let s=Math.max(0,Math.min(this.layers.length-1,Math.round(e)));if(i===s)return!1;let[n]=this.layers.splice(i,1);return this.layers.splice(s,0,n),this.layers.forEach((a,o)=>{this.canvas.moveObjectTo(a.fabricObject,o)}),this.events.emit("layer:reordered",{layerIds:this.layers.map(a=>a.id)}),this.emitChanged(),this.onPropertyChanged?.(),!0}select(t){if(t===null)this.canvas.discardActiveObject();else{let i=this.get(t);i&&this.canvas.setActiveObject(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})}get(t){return this.layers.find(e=>e.id===t)}getAll(){return[...this.layers]}findByObject(t){let e=t._layerId;return e?this.get(e):this.layers.find(i=>i.fabricObject===t)}setVisibility(t,e){let i=this.get(t);i&&i.visible!==e&&(i.visible=e,i.fabricObject.visible=e,this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.())}setLocked(t,e){let i=this.get(t);i&&i.locked!==e&&(i.locked=e,i.fabricObject.selectable=!e,i.fabricObject.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.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);this.layers=[],this.emitChanged()}count(){return this.layers.length}emitChanged(){this.events.emit("layers:changed",{layers:this.layers.map(t=>t.toData())})}};var Ye=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 bu="#22c55e",$e=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}=xu(this.canvas,t,i,s);this.guides=[];let o=pl([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=pl([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=bu,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 xu(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 pl(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 N(r,t,e){return Math.min(e,Math.max(t,r))}function J(r){return Math.round(r*100)/100}var We=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 jt({left:s.left,top:s.top,width:s.width,height:s.height,originX:"left",originY:"top",fill:"rgba(34,197,94,0.12)",stroke:fl,strokeWidth:1,strokeDashArray:[4,4],strokeUniform:!0,lockRotation:!0,cornerColor:fl,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,p=i.getScaledHeight()/n;u=N(u,0,Math.max(0,h-1)),d=N(d,0,Math.max(0,c-1)),g=N(g,1,h-u),p=N(p,1,c-d),e.set({cropX:u,cropY:d,width:g,height:p,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}))}},fl="#22c55e";var bl=200,ze=class{constructor(t,e,i,s,n){this.canvas=t;this.layers=e;this.history=i;this.events=s;this.sourceResolver=n}canvas;layers;history;events;sourceResolver;chains=new Map;isPattern(t){return!!this.layers.get(t)?.meta.pattern}getConfig(t){return this.layers.get(t)?.meta.pattern?.config??null}apply(t,e){return this.enqueue(t,async()=>{let i=this.layers.get(t);if(!i||i.type!=="image")return;let s=i.fabricObject,n=!i.meta.pattern;if(i.meta.pattern)i.meta.pattern.config=e;else{let a=s.clipPath;i.meta.pattern={config:e,originalSrc:Su(s)??s.getSrc(),originalClip:a?a.toObject():null,originalLocks:Sn(s),original:{left:s.left??0,top:s.top??0,scaleX:s.scaleX??1,scaleY:s.scaleY??1,width:s.width??0,height:s.height??0,angle:s.angle??0,cropX:s.cropX??0,cropY:s.cropY??0}}}try{await this.renderLayer(i)}catch(a){throw n&&delete i.meta.pattern,a}this.history.save()}).catch(i=>{throw this.events.emit("error",{message:"Failed to apply image pattern",error:i}),i})}repinAll(){let t=this.canvas.getWidth(),e=this.canvas.getHeight(),i=!1;for(let s of this.layers.getAll()){if(!s.meta.pattern||s.type!=="image")continue;let n=s.fabricObject;n.set({left:0,top:0,angle:0,scaleX:t/(n.width||t),scaleY:e/(n.height||e)}),Li(n),n.setCoords(),i=!0}i&&this.canvas.requestRenderAll()}disable(t){return this.enqueue(t,async()=>{let e=this.layers.get(t),i=e?.meta.pattern;if(!e||!i)return;let s=e.fabricObject;await s.setSrc(i.originalSrc),s.set({left:i.original.left,top:i.original.top,scaleX:i.original.scaleX,scaleY:i.original.scaleY,width:i.original.width,height:i.original.height,cropX:i.original.cropX,cropY:i.original.cropY,angle:i.original.angle}),s.clipPath=i.originalClip?(await Zt.enlivenObjects([i.originalClip]))[0]:void 0,Cn(s,i.originalLocks),s.setCoords(),delete e.meta.pattern,this.canvas.requestRenderAll(),this.history.save()}).catch(e=>{throw this.events.emit("error",{message:"Failed to clear image pattern",error:e}),e})}enqueue(t,e){let s=(this.chains.get(t)??Promise.resolve()).then(e,e);return this.chains.set(t,s.catch(()=>{})),s}async renderLayer(t){let e=t.meta.pattern;if(!e)return;let i=t.fabricObject,s=this.canvas.getWidth(),n=this.canvas.getHeight(),a=Math.max(1,e.config.scale??100)/100,o=Math.sqrt(s*s+n*n),l=Math.max(2,o/bl),h=Math.max(l,e.original.width*e.original.scaleX*a),c=Math.max(l,e.original.height*e.original.scaleY*a),u=await _n(e.originalSrc,e.config,s,n,h,c,this.sourceResolver);await i.setSrc(u),i.set({left:0,top:0,scaleX:1,scaleY:1,width:s,height:n,cropX:0,cropY:0,angle:0}),i.clipPath=void 0,Li(i),i.setCoords(),this.canvas.requestRenderAll()}};function Sn(r){return{lockMovementX:r.lockMovementX??!1,lockMovementY:r.lockMovementY??!1,lockScalingX:r.lockScalingX??!1,lockScalingY:r.lockScalingY??!1,lockRotation:r.lockRotation??!1,hasControls:r.hasControls??!0}}function Li(r){r.set({lockMovementX:!0,lockMovementY:!0,lockScalingX:!0,lockScalingY:!0,lockRotation:!0,hasControls:!1})}function Cn(r,t){r.set(t??{lockMovementX:!1,lockMovementY:!1,lockScalingX:!1,lockScalingY:!1,lockRotation:!1,hasControls:!0})}function Su(r){try{let t=r.getElement(),e=t.naturalWidth||t.width,i=t.naturalHeight||t.height;if(!e||!i)return null;let s=document.createElement("canvas");s.width=e,s.height=i;let n=s.getContext("2d");return n?(n.drawImage(t,0,0),s.toDataURL("image/png")):null}catch{return null}}var Cu=16,Mt=new Map;function wn(r,t){let e=Mt.get(r);if(e)return Mt.delete(r),Mt.set(r,e),e;let i=ml(r).catch(async s=>{if(!t)throw s;let n=await t(r);if(!n||n===r)throw new Error("Pattern source resolver did not return a usable alternate URL",{cause:s});return ml(n)});if(i.catch(()=>{Mt.get(r)===i&&Mt.delete(r)}),Mt.set(r,i),Mt.size>Cu){let s=Mt.keys().next().value;s!==void 0&&Mt.delete(s)}return i}function ml(r){return new Promise((t,e)=>{let i=new Image;i.crossOrigin="anonymous",i.onload=()=>t(i),i.onerror=()=>e(new Error(`Failed to load pattern source: ${r}`)),i.src=r})}function Fi(){Mt.clear()}async function _n(r,t,e,i,s,n,a){let o=await wn(r,a),l=document.createElement("canvas");l.width=Math.max(1,Math.round(e)),l.height=Math.max(1,Math.round(i));let h=l.getContext("2d");return h&&kn(h,o,t,e,i,s,n),l.toDataURL("image/png")}function Tn(r,t,e,i,s){let n=Math.sqrt(t*t+e*e),a=Math.max(1,n/bl),o=Math.max(a,i*(1+r.horizontalSpacing/100)),l=Math.max(a,s*(1+r.verticalSpacing/100)),h=Math.ceil(n/o)+2,c=Math.ceil(n/l)+2,u=Math.ceil(h/2),d=Math.ceil(c/2),g=o*(vl(r.offsetX)/100),p=l*(vl(r.offsetY)/100),f=[];for(let v=-d;v<=d;v++)for(let y=-u;y<=u;y++){let x=y*o+g,S=v*l+p;r.mode==="brick-horizontal"&&yl(v)===1?x+=o*(r.horizontalOffset/100):r.mode==="brick-vertical"&&yl(y)===1&&(S+=l*(r.horizontalOffset/100));let w=(y*r.rotationStepH+v*r.rotationStepV)*Math.PI/180;f.push({x,y:S,rotation:w})}return f}function kn(r,t,e,i,s,n,a){r.save(),r.translate(i/2,s/2),r.rotate(e.angle*Math.PI/180);for(let o of Tn(e,i,s,n,a))r.save(),r.translate(o.x,o.y),r.rotate(o.rotation),r.drawImage(t,-n/2,-a/2,n,a),r.restore();r.restore()}function vl(r){return typeof r!="number"||!Number.isFinite(r)?0:Math.max(-100,Math.min(100,r))}function yl(r){return(r%2+2)%2}var Ii={arc:0,wave:0},On=.5,wu=99.5,_u=.12,Tu=4.1,ku=.9,Ou=6,Mu=1e5,Pu=.06;function xl(r){return!!r&&typeof r.text=="string"}function Eu(r){let t=r.width;try{return r.set({width:Mu}),r.initDimensions?.(),Math.max(1,r.calcTextWidth?.()??r.width??1)}finally{t!==void 0&&r.set({width:t}),r.initDimensions?.()}}function Du(r,t){let e=Math.min(100,Math.abs(t)),i=t<0?-1:1,s=e>=wu,n=s?Math.PI*2:Math.max(_u,e/100*Math.PI),a=r/n,o=r/2,l=p=>[o+a*Math.sin(p),i*a*(1-Math.cos(p))],h=i>0?1:0,c=([p,f])=>`${Pt(p)} ${Pt(f)}`;if(s){let p=l(-Math.PI),f=l(0);return{data:[`M ${c(p)}`,`A ${Pt(a)} ${Pt(a)} 0 0 ${h} ${c(f)}`,`A ${Pt(a)} ${Pt(a)} 0 0 ${h} ${c(p)}`].join(" "),length:r}}let u=l(-n/2),d=l(n/2),g=n>Math.PI?1:0;return{data:`M ${c(u)} A ${Pt(a)} ${Pt(a)} 0 ${g} ${h} ${c(d)}`,length:r}}function Au(r,t,e){let i=N(e,0,100)/100*t*ku,s=Math.max(1,t*Tu),n=Math.max(2,Math.ceil(r/Ou)),a=[],o=0,l=null;for(let h=0;h<=n;h++){let c=r*h/n,u=i*Math.sin(c/s*Math.PI*2);l&&(o+=Math.hypot(c-l[0],u-l[1])),l=[c,u],a.push(`${h===0?"M":"L"} ${Pt(c)} ${Pt(u)}`)}return{data:a.join(" "),length:o}}function Pt(r){return Math.round(r*100)/100}function Mn(r,t,e){return Math.abs(r.arc)>=On?Du(t,r.arc):r.wave>0?Au(t,e,r.wave):null}function ju(r){let t=N(r.arc??0,-100,100);return{arc:t,wave:Math.abs(t)>=On?0:N(r.wave??0,0,100)}}var He=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s}canvas;layers;history;events;get(t){let e=this.layers.get(t);return!e||!xl(e.fabricObject)?null:e.meta.curve??{...Ii}}isCurved(t){let e=this.get(t);return!!e&&(Math.abs(e.arc)>=On||e.wave>0)}apply(t,e,i=!0){let s=this.layers.get(t);if(!s||!xl(s.fabricObject))return!1;let n=ju(e),a=s.fabricObject,o=Eu(a),l=Mn(n,o*(1+Pu),a.fontSize);return l?(s.meta.curveWidth===void 0&&(s.meta.curveWidth=a.width??0),a.set({width:Math.max(s.meta.curveWidth,o+2)}),a.set({path:new Lt(l.data,{visible:!1,objectCaching:!1}),pathAlign:"center",pathSide:"left",pathStartOffset:Math.max(0,(l.length-o)/2)}),s.meta.curve=n):(this.detach(a,s.meta.curveWidth),delete s.meta.curve,delete s.meta.curveWidth),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){return this.apply(t,Ii,e)}refresh(t,e=!1){let i=this.layers.get(t)?.meta.curve;return i?this.apply(t,i,e):!1}refreshAll(){for(let t of this.layers.getAll())t.meta.curve&&this.refresh(t.id)}detach(t,e){t.set({path:null,pathStartOffset:0}),e!==void 0&&e>0&&t.set({width:e})}};var Ri=["circle","square","triangle","star","heart","octagram","arch","zigzag"];function Ve(r){return typeof r=="string"&&Ri.includes(r)}function Pn(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"} ${Sl(h)} ${Sl(c)}`)}return`${n.join(" ")} Z`}function Sl(r){return Math.round(r*100)/100}var Lu={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:Pn(5,46,22),heart:"M 50 96 C -8 55 12 4 50 28 C 88 4 108 55 50 96 Z",octagram:Pn(8,46,27),arch:"M 4 96 V 50 A 46 46 0 0 1 96 50 V 96 Z",zigzag:Pn(16,46,39)};function Xr(r){return Lu[r]}var Ne=100;var Bi=["vignette","halftone","spray","grunge","torn","band"];function Yr(r){return typeof r=="string"&&Bi.includes(r)}var Et=320,Dn=new Map;function En(r){let t=r;return()=>(t=t*16807%2147483647,(t-1)/2147483646)}function Cl(r,t,e,i){let s=Et,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,p=l+(c-l)*d+(t()-.5)*e;a===0&&u===0?r.moveTo(g,p):r.lineTo(g,p)}}r.closePath(),r.fill()}function Fu(r,t){let e=Et,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=En(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=En(7);Cl(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":{Cl(t,En(99),10,e*.08);return}}}function $r(r){let t=Dn.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=Et,e.height=Et;let i=e.getContext("2d");if(!i)throw new Error("Texture masks require a 2D canvas context");return Fu(r,i),Dn.set(r,e),e}function An(){Dn.clear()}function Xi(r){return Ve(r)||Yr(r)}var me=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(!Xi(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 Ve(t)?new Lt(Xr(t),{...n,scaleX:i/Ne,scaleY:s/Ne}):new V($r(t),{...n,scaleX:i/Et,scaleY:s/Et})}};var Iu=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\([\d.%+\-\s,/]+\)|[a-z]+)$/i;function ee(r,t=!1){if(typeof r!="string")return!1;let e=r.trim();return e?Iu.test(e):t}var re={enabled:!1,color:"#000000",blur:12,offsetX:6,offsetY:6};function Wr(r){let t=r.shadow;return!t||typeof t=="string"?{...re}:{enabled:!0,color:typeof t.color=="string"?t.color:re.color,blur:t.blur??re.blur,offsetX:t.offsetX??re.offsetX,offsetY:t.offsetY??re.offsetY}}function Yi(r,t){let e={...Wr(r),...t};if(!e.enabled){r.set({shadow:null});return}let i=ee(e.color)?e.color:re.color;r.set({shadow:new he({color:i,blur:Math.max(0,e.blur),offsetX:e.offsetX,offsetY:e.offsetY})})}var $i={borderColor:"#c9a96e",cornerColor:"#c9a96e",cornerStrokeColor:"#101010",cornerSize:11,cornerStyle:"circle",borderWidth:1,borderDashArray:null,padding:0,marqueeFill:"rgba(201, 169, 110, 0.12)"};function ve(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 Wi(r,t,e){for(let s of r.getObjects())ve(s,t,e);let i=r.getActiveObject();i&&ve(i,t,e),r.selectionColor=t.marqueeFill,r.selectionBorderColor=t.borderColor,r.selectionLineWidth=t.borderWidth*(e>0?1/e:1),r.requestRenderAll()}var Ru=["ml","mr","mt","mb"];function ye(r,t){for(let e of Ru)r.setControlVisible(e,!t)}function zi(r){r.set({scaleX:1,scaleY:1,angle:0,skewX:0,skewY:0,flipX:!1,flipY:!1}),r.setCoords()}var Ge=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 Bu="2.0.0";function Hi(r){return{version:Bu,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 Vi(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&&!ee(t.background,!0))throw new Error("Invalid editor background color");let i=await Promise.all(t.layers.map(async n=>{let a=(await Zt.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 Zt.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)Xu(r,n.serialized,n.fabricObject);r.canvas.requestRenderAll()}function Xu(r,t,e){let i=r.layers.add(t.type,e,t.name,t.id);return t.meta&&(i.meta=t.meta,i.meta.lockAspect&&ye(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),i}var wl={red:0,green:1,blue:2,alpha:3};function _l(r,t,e){let i=r??t;if(!Number.isFinite(i))throw new Error(`${e} must be finite`);return i}function Yu(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,p=r[(h*t+l)*4+n]*(1-d)+r[(h*t+c)*4+n]*d,f=r[(u*t+l)*4+n]*(1-d)+r[(u*t+c)*4+n]*d;return p*(1-g)+f*g}function Ni(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=_l(s.scaleX,10,"Displacement scaleX"),o=_l(s.scaleY,10,"Displacement scaleY"),l=wl[s.channelX??"red"],h=wl[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,p=d+(t[g+l]-128)/127*a,f=u+(t[g+h]-128)/127*o;for(let v=0;v<4;v+=1)c[g+v]=Math.round(Yu(r,e,i,p,f,v))}return c}function Gi(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 jn(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 Ln(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 zr(r,t={}){let{multiplier:e=1,format:i="png",quality:s=1}=t,n=r.toCanvasElement(e);return Ln(n,i,s)}async function Hr(r,t,e={}){let i=r.lowerCanvasEl.ownerDocument.createElement("canvas"),s=new Ie(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 zr(s,e)}finally{s.dispose()}}async function Ui(r,t,e={}){let{multiplier:i=1,format:s="png",quality:n=1}=e,a=r.getWidth(),o=r.getHeight(),l=Gi(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 Ie(h,{width:a,height:o});try{let u=await Promise.all(r.getObjects().map(f=>f.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 p=g.getContext("2d");if(!p)throw new Error("2D canvas context is unavailable");return p.drawImage(d,-l.left,-l.top),await Ln(g,s,n)}finally{c.dispose()}}async function qi(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,p)=>{let f=new Image;f.crossOrigin="anonymous",f.onload=()=>g(f),f.onerror=()=>p(new Error(`Failed to load mockup image: ${d}`)),f.src=d}),c=(d,g=l)=>{let p=jn(d.naturalWidth||d.width,d.naturalHeight||d.height,o.width,o.height);g.drawImage(d,p.left,p.top,p.width,p.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 p=a.ownerDocument.createElement("canvas");u.push(p),p.width=a.width,p.height=a.height;let f=p.getContext("2d");if(!f)throw new Error("2D displacement-map context is unavailable");c(await h(t.displacement.image),f);let v=a.ownerDocument.createElement("canvas");u.push(v),v.width=a.width,v.height=a.height;let y=v.getContext("2d");if(!y)throw new Error("2D displaced-design context is unavailable");let x,S;try{x=g.getImageData(0,0,a.width,a.height).data,S=f.getImageData(0,0,a.width,a.height).data}catch(O){throw new Error("Failed to apply mockup displacement map; verify image CORS access",{cause:O})}let w=Ni(x,S,a.width,a.height,{...t.displacement,scaleX:(t.displacement.scaleX??10)*i,scaleY:(t.displacement.scaleY??10)*i}),C=y.createImageData(a.width,a.height);C.data.set(w),y.putImageData(C,0,0),d=v}if(l.save(),t.printArea&&t.clipToPrintArea!==!1){let g=Gi(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 Ln(o,s,n)}finally{for(let d of u)d.width=0,d.height=0}}function Ki(r){return r.toSVG()}function Ji(r,t="png",e=1){return r.toDataURL({format:t,multiplier:e})}function Zi(r){return String(r).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Qi(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 $u(r){return/^(?:url|local)\(/.test(r.trim())?r:`url(${JSON.stringify(r)})`}function Wu(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 zu(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 ts(r){return JSON.stringify(r).replace(/[<>&]/g,t=>`\\${t.charCodeAt(0).toString(16)} `)}var Hu=/^(?:normal|bold|bolder|lighter|[1-9]\d{0,2}(?:\s+[1-9]\d{0,2})?)$/i,Vu=/^(?:normal|italic|oblique(?:\s+-?\d+(?:\.\d+)?deg)?)$/i,Nu=/^(?:auto|block|swap|fallback|optional)$/i;function Fn(r,t,e){let i=r?.trim();return i&&t.test(i)?i:e}function Gu(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 Uu(r){let t=r.trim().match(/^local\(\s*(['"]?)([^)"'{};]*)\1\s*\)$/i);return t&&t[2].trim()||null}var Ue=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,$u(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=Gu(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=zu(await l.arrayBuffer()),c=l.headers.get("content-type")||Wu(i);s=`url(${ts(`data:${c};base64,${h}`)})`}else if(i)s=`url(${ts(i)})`;else{let l=Uu(e.source);if(!l)throw new Error(`Unsupported font source for embedding: ${e.family}`);s=`local(${ts(l)})`}let n=Fn(e.weight,Hu,"normal"),a=Fn(e.style,Vu,"normal"),o=Fn(e.display,Nu,"swap");return`@font-face{font-family:${ts(e.family)};src:${s};font-weight:${n};font-style:${a};font-display:${o}}`}))).join(`
|
|
505
|
+
`)}};function qu(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 Ku(r){return r==="localhost"||r==="127.0.0.1"||r==="::1"||r.endsWith(".localhost")}var qe=class{constructor(t={}){this.config=t;let e=t.hostname??globalThis.location?.hostname??"localhost";(t.environment??"development")!=="production"||Ku(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=>qu(e,s))?this.status={state:"valid",payload:i}:this.status={state:"domain-mismatch",payload:i}:this.status={state:"invalid",payload:null}}};var Ke=class{constructor(t){this.editor=t;let e={id:te(),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:te(),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:te(),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 Dt=class extends Error{constructor(e,i,s){super(i);this.code=e;this.cause=s;this.name="MaskRefinementError"}code;cause},Je=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 V(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:N(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 Dt("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 Dt("cancelled","Mask refinement cancelled");if(!/^data:image\/(?:png|jpeg|webp);base64,/i.test(h.dataUrl))throw new Dt("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 Dt?l:a.signal.aborted?new Dt("cancelled","Mask refinement cancelled",l):new Dt("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 Ju=.1,Zu=8;function Qu(r){return r instanceof DOMException&&r.name==="SecurityError"||r instanceof Error&&/taint|cross-origin|insecure/i.test(r.message)}var es=class{canvas;layers;history;events;units;snapping;crop;patterns;curves;maskPresets;fonts;licensing;pages;masks;fileAdapter;imageProvider;zoomLevel=1;selectionStyle={...$i};mockup=null;designBackground;designBackgroundImage=null;backgroundImageOptions=null;constructor(t,e){this.events=new Re,this.fonts=new Ue,e.fonts?.forEach(n=>this.fonts.register(n)),this.licensing=new qe(e.license),this.units=new Ge(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 vi(t,{width:i,height:s,backgroundColor:this.designBackground,preserveObjectStacking:e.preserveObjectStacking??!0,selection:!0}),this.layers=new Xe(this.canvas,this.events),this.fileAdapter=e.fileAdapter,this.imageProvider=e.imageProvider,this.history=new Ye({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 $e(this.canvas,this.events),this.crop=new We(this.canvas,this.history,this.events),this.patterns=new ze(this.canvas,this.layers,this.history,this.events,e.patternSourceResolver),this.curves=new He(this.canvas,this.layers,this.history,this.events),this.maskPresets=new me(this.canvas,this.layers,this.history,this.events),this.setupCanvasEvents(),this.refreshSelectionStyle(),this.history.saveImmediate(),this.pages=new Ke(this),this.masks=new Je(this)}async addImage(t,e){try{let i=await V.fromURL(t,{},{originX:"left",originY:"top",...e}),s=this.layers.add("image",i);return 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 V.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 ke(t,{fontSize:32,fontFamily:"Arial",fill:"#000000",width:200,originX:"left",originY:"top",...e}),s=this.layers.add("text",i);return this.history.save(),s}addShape(t,e){let i=t.create(e),s=this.layers.add("shape",i,t.name);return this.history.save(),s}async addTemplate(t,e){let i={};for(let c of t.parameters){let u=e[c.key]??c.default;if(u===void 0)throw new Error(`Missing template parameter: ${c.key}`);if(c.type==="number"&&!Number.isFinite(Number(u)))throw new Error(`Invalid number for template parameter: ${c.key}`);if(c.type==="color"&&!ee(u))throw new Error(`Invalid color for template parameter: ${c.key}`);i[c.key]=u}let s=Qi(t.svg.replace(/\{\{(\w+)(?:[|:]([^}]*))?\}\}/g,(c,u,d)=>{let g=i[u]??d;return g===void 0?c:Zi(g)})),{objects:n,options:a}=await hl(s),o=n.filter(c=>c!==null);if(o.length===0)throw new Error("Template SVG contains no renderable objects");let l=Zt.groupSVGElements(o,a);l.set({left:this.canvas.getWidth()/2,top:this.canvas.getHeight()/2,originX:"center",originY:"center"});let h=this.layers.add("template",l,t.name);return this.history.save(),h}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)}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();e.meta.pattern||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.canvas.setActiveObject(i),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)=>N(l??0,h,1);return s.filters=[new Rr.Brightness({brightness:o(a.brightness)}),new Rr.Contrast({contrast:o(a.contrast)}),new Rr.Saturation({saturation:o(a.saturation)}),new Rr.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(n=>this.layers.get(n)).filter(n=>n!==void 0);return s.length<2||s.length!==i.length?null:this.history.transaction(()=>{let n=s.map(h=>structuredClone(h.toData())),a=s.map(h=>h.fabricObject);for(let h of s)this.layers.remove(h.id);let o=new Ft(a),l=this.layers.add("group",o,e);return l.meta.groupChildren=n,this.layers.select(l.id),this.history.save(),l})}async ungroupLayer(t){let e=this.layers.get(t),i=e?.meta.groupChildren;if(!e||e.type!=="group"||!Array.isArray(i))return[];let s=e.fabricObject;return this.history.transaction(()=>{let n=s.calcTransformMatrix(),a=s.removeAll();this.layers.remove(t);let o=a.map((l,h)=>{Zt.addTransformToObject(l,n),l.setCoords();let c=i[h],u=this.layers.add(c?.type??"group",l,c?.name,c?.id);return c?.meta&&(u.meta=structuredClone(c.meta)),c&&!c.visible&&this.layers.setVisibility(u.id,!1),c?.locked&&this.layers.setLocked(u.id,!0),c&&c.opacity!==1&&this.layers.setOpacity(u.id,c.opacity),u});return this.history.save(),this.layers.select(o[0]?.id??null),o})}toJSON(){return Hi(this)}async fromJSON(t){let e=this.history.isRestoring();e||(this.history.saveImmediate(),this.history.pause());try{await Vi(this,t),this.patterns.repinAll()}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 V){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 Hr(this.canvas,[s],{...e,width:s.width||1,height:s.height||1,cloneObjects:!1})}return await Hr(this.canvas,[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 Hr(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(()=>zr(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:Qu(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(()=>Ki(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(()=>Ji(this.canvas,t,e))}async toPrintFile(t={}){await this.fonts.ready();try{let e=this.mockup?.printArea,i=e?await Ui(this.canvas,e,t):await Hr(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 qi(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:J(o.x/e),y:J(o.y/i),scale:J(a.scaleX??1),angle:J(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:J(n.x/t),centerY:J(n.y/e),width:J(a.width/t),height:J(a.height/e),scaleX:J(s.scaleX??1),scaleY:J(s.scaleY??1),angle:J(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 V.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:N(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()){if(u.meta.pattern)continue;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.repinAll(),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:J(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=N(J(t),Ju,Zu);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?(ye(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&&ye(t.fabricObject,!0)}resetLayerTransform(t){let e=this.layers.get(t);return e?(zi(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?(Yi(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?Wr(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.snapping.dispose(),this.crop.dispose(),this.history.dispose(),Fi(),this.events.removeAllListeners(),this.canvas.dispose()}getSelectionStyle(){return{...this.selectionStyle}}setSelectionStyle(t){this.selectionStyle={...this.selectionStyle,...t},this.refreshSelectionStyle()}refreshSelectionStyle(){Wi(this.canvas,this.selectionStyle,this.zoomLevel)}setupCanvasEvents(){this.canvas.on("object:added",e=>{e.target&&ve(e.target,this.selectionStyle,this.zoomLevel)});let t=()=>{let e=this.canvas.getActiveObject();e&&ve(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 Tl={mode:"grid",scale:100,horizontalSpacing:0,verticalSpacing:0,angle:0,horizontalOffset:0,offsetX:0,offsetY:0,rotationStepH:0,rotationStepV:0};var kl=[{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 rs=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 Ll(td);})();
|
|
506
506
|
//# sourceMappingURL=index.global.js.map
|