@overtone-art/canvas-editor-core 0.8.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.global.js +3 -3
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.global.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var OvertoneCanvasEditor=(()=>{var Rs=Object.defineProperty;var kh=Object.getOwnPropertyDescriptor;var Oh=Object.getOwnPropertyNames;var Mh=Object.prototype.hasOwnProperty;var Ph=(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 Eh=(r,t)=>{for(var e in t)Rs(r,e,{get:t[e],enumerable:!0})},Ah=(r,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Oh(t))!Mh.call(r,s)&&s!==e&&Rs(r,s,{get:()=>t[s],enumerable:!(i=kh(t,s))||i.enumerable});return r};var Dh=r=>Ah(Rs({},"__esModule",{value:!0}),r);var
|
|
1
|
+
"use strict";var OvertoneCanvasEditor=(()=>{var Rs=Object.defineProperty;var kh=Object.getOwnPropertyDescriptor;var Oh=Object.getOwnPropertyNames;var Mh=Object.prototype.hasOwnProperty;var Ph=(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 Eh=(r,t)=>{for(var e in t)Rs(r,e,{get:t[e],enumerable:!0})},Ah=(r,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Oh(t))!Mh.call(r,s)&&s!==e&&Rs(r,s,{get:()=>t[s],enumerable:!(i=kh(t,s))||i.enumerable});return r};var Dh=r=>Ah(Rs({},"__esModule",{value:!0}),r);var Wg={};Eh(Wg,{AnnotationOverlay:()=>Fs,BLEND_GROUPS:()=>Ql,BLEND_MODES:()=>ta,CANVAS_MASK_TARGET:()=>ht,CANVAS_SIZE_PRESETS:()=>_h,CanvasEditor:()=>Ls,CropController:()=>ir,DEFAULT_GRADIENT_CONFIG:()=>he,DEFAULT_LAYER_SHADOW:()=>le,DEFAULT_PATTERN_CONFIG:()=>Sh,DEFAULT_SELECTION_STYLE:()=>vs,DEFAULT_TEXT_CURVE:()=>hs,EventEmitter:()=>Je,FontRegistry:()=>dr,HistoryManager:()=>er,Layer:()=>Qe,LayerManager:()=>tr,LayerMaskManager:()=>De,LicenseManager:()=>gr,MaskController:()=>fr,MaskPresetManager:()=>Pe,MaskRefinementError:()=>Rt,PatternManager:()=>Te,ProjectManager:()=>pr,SHAPE_MASK_BOX:()=>cr,SHAPE_MASK_IDS:()=>ps,SnapManager:()=>rr,TEXTURE_MASK_IDS:()=>fs,TEXTURE_MASK_SIZE:()=>It,TextCurveManager:()=>or,TextWrapManager:()=>lr,TiledPatternObject:()=>oe,UnitConverter:()=>ur,angleFromCoords:()=>xa,applyAspectLock:()=>Ae,applyLayerShadow:()=>ys,applyObjectSelectionStyle:()=>Ee,applySelectionStyle:()=>bs,applyTextWrapToObject:()=>oa,blendModeLabel:()=>th,blendModeOf:()=>ss,blendOperation:()=>ei,buildCurveLinePaths:()=>ar,buildCurvePathData:()=>ra,clamp:()=>Y,clearTextureMaskCache:()=>ua,composeMaskGroup:()=>gi,computeCoverPlacement:()=>da,computePrintAreaClip:()=>_s,computeTilePositions:()=>ls,deserializeEditor:()=>Cs,displaceRgba:()=>Ss,drawTiles:()=>nr,escapeXml:()=>Ps,explodeTemplateSvg:()=>as,exportDataURL:()=>Ms,exportMockup:()=>ks,exportPNG:()=>ui,exportPrintArea:()=>Ts,exportSVG:()=>Os,fitTextWidth:()=>os,fitToBox:()=>Me,generateId:()=>mt,isCssColor:()=>Mt,isMaskPresetId:()=>ms,isShapeMaskId:()=>hr,isTextureMaskId:()=>li,linearCoords:()=>ba,needsAbsoluteSpace:()=>qt,normalizeTextCurve:()=>ke,preWrapWordSplit:()=>gs,readGradientConfig:()=>Ch,readLayerShadow:()=>ci,readTextWrap:()=>ai,renderTextureMask:()=>hi,resetTransform:()=>xs,restoreLocks:()=>ri,round2:()=>et,sanitizeSvg:()=>Es,serializeEditor:()=>ws,shapeMaskPathData:()=>oi,textPathCurve:()=>ea,textPathSpec:()=>ns,toCanvasSpace:()=>si,toFabricGradient:()=>fi,toHostSpace:()=>Ut,unwrapGroup:()=>ni});var wa=Object.defineProperty,Kr=(r,t)=>{let e={};for(var i in r)wa(e,i,{get:r[i],enumerable:!0});return t||wa(e,Symbol.toStringTag,{value:"Module"}),e};function Yr(r){return Yr=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},Yr(r)}function jh(r){var t=(function(e,i){if(Yr(e)!="object"||!e)return e;var s=e[Symbol.toPrimitive];if(s!==void 0){var n=s.call(e,i||"default");if(Yr(n)!="object")return n;throw TypeError("@@toPrimitive must return a primitive value.")}return(i==="string"?String:Number)(e)})(r,"string");return Yr(t)=="symbol"?t:t+""}function m(r,t,e){return(t=jh(t))in r?Object.defineProperty(r,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):r[t]=e,r}var Ca=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 Ca{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 Ca,e=r?.reduce((i,s)=>(i[s]=t[s],i),{})||t;this.configure(e)}},$t=(r,...t)=>console[r]("fabric",...t),At=class extends Error{constructor(r,t){super(`fabric: ${r}`,t)}},Qa=class extends At{constructor(r){super(`${r} 'options.signal' is in 'aborted' state`)}},Lh=class{},Fh=class extends Lh{testPrecision(r,t){let e=`precision ${t} float;
|
|
2
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(),$t("log",`WebGL: max texture size ${this.maxTextureSize}`))}isSupported(r){return!!this.maxTextureSize&&this.maxTextureSize>=r}},Ih={},Sa;var jt=()=>Sa||(Sa={document,window,isTouchSupported:"ontouchstart"in window||"ontouchstart"in document||window&&window.navigator&&window.navigator.maxTouchPoints>0,WebGLProbe:new Fh,dispose(){},copyPasteData:Ih}),Ne=()=>jt().document,ye=()=>jt().window,to=()=>{var r;return Math.max((r=L.devicePixelRatio)==null?ye().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}=L,e=Math.sqrt(t*r);return[Math.floor(e),Math.floor(t/e)]}},qs="7.4.0";function ki(){}var ee=Math.PI/2,Rh=Math.PI/4,Tt=2*Math.PI,Sn=Math.PI/180,ot=Object.freeze([1,0,0,1,0,0]),F="center",H="left",eo="bottom",St="right",Gi="none",_n=/\r?\n/,ro="moving",Hi="scaling",io="rotating",so="rotate",no="skewing",Nr="resizing",ao="modifyPoly",ji="changed",oo="scale",re="scaleX",ie="scaleY",Ve="skewX",Ue="skewY",lt="fill",Lt="stroke",lo="modified",_a="normal",je="json",_=new class{constructor(){this[je]=new Map,this.svg=new Map}has(r){return this[je].has(r)}getClass(r){let t=this[je].get(r);if(!t)throw new At(`No class registered for ${r}`);return t}setClass(r,t){t?this[je].set(t,r):(this[je].set(r.type,r),this[je].set(r.type.toLowerCase(),r))}getSVGClass(r){return this.svg.get(r)}setSVGClass(r,t){this.svg.set(t??r.type.toLowerCase(),r)}},Li=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}},Bh=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||{})}},ce=(r,t)=>{let e=r.indexOf(t);return e!==-1&&r.splice(e,1),r},kt=r=>{if(r===0)return 1;switch(Math.abs(r)/ee){case 1:case 3:return 0;case 2:return-1}return Math.cos(r)},Ot=r=>{if(r===0)return 0;let t=r/ee,e=Math.sign(r);switch(t){case 1:return e;case 2:return 0;case 3:return-e}return Math.sin(r)},v=class it{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 it(this.x+t.x,this.y+t.y)}addEquals(t){return this.x+=t.x,this.y+=t.y,this}scalarAdd(t){return new it(this.x+t,this.y+t)}scalarAddEquals(t){return this.x+=t,this.y+=t,this}subtract(t){return new it(this.x-t.x,this.y-t.y)}subtractEquals(t){return this.x-=t.x,this.y-=t.y,this}scalarSubtract(t){return new it(this.x-t,this.y-t)}scalarSubtractEquals(t){return this.x-=t,this.y-=t,this}multiply(t){return new it(this.x*t.x,this.y*t.y)}scalarMultiply(t){return new it(this.x*t,this.y*t)}scalarMultiplyEquals(t){return this.x*=t,this.y*=t,this}divide(t){return new it(this.x/t.x,this.y/t.y)}scalarDivide(t){return new it(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 it(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 it(Math.min(this.x,t.x),Math.min(this.y,t.y))}max(t){return new it(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 it(this.x,this.y)}rotate(t,e=Tn){let i=Ot(t),s=kt(t),n=this.subtract(e);return new it(n.x*s-n.y*i,n.x*i+n.y*s).add(e)}transform(t,e=!1){return new it(t[0]*this.x+t[2]*this.y+(e?0:t[4]),t[1]*this.x+t[3]*this.y+(e?0:t[5]))}},Tn=new v(0,0),Oi=r=>!!r&&Array.isArray(r._objects);function ho(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])&&(ce(this._objects,i),this._objects.unshift(i),this._onStackOrderChanged(i),!0)}bringObjectToFront(i){return!(!i||i===this._objects[this._objects.length-1])&&(ce(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 ce(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 ce(this._objects,i),this._objects.splice(a,0,i),this._onStackOrderChanged(i),!0}return!1}moveObjectTo(i,s){return i!==this._objects[s]&&(ce(this._objects,i),this._objects.splice(s,0,i),this._onStackOrderChanged(i),!0)}findNewLowerIndex(i,s,n){let a;if(n){a=s;for(let o=s-1;o>=0;--o)if(i.isOverlapping(this._objects[o])){a=o;break}}else a=s-1;return a}findNewUpperIndex(i,s,n){let a;if(n){a=s;for(let o=s+1;o<this._objects.length;++o)if(i.isOverlapping(this._objects[o])){a=o;break}}else a=s+1;return a}collectObjects({left:i,top:s,width:n,height:a},{includeIntersecting:o=!0}={}){let l=[],h=new v(i,s),c=h.add(new v(n,a));for(let u=this._objects.length-1;u>=0;u--){let d=this._objects[u];d.selectable&&d.visible&&(o&&d.intersectsWithRect(h,c)||d.isContainedWithinRect(h,c)||o&&d.containsPoint(h)||o&&d.containsPoint(c))&&l.push(d)}return l}}return t}var co=class extends Bh{_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 Gr(r){return ye().requestAnimationFrame(r)}function uo(r){return ye().cancelAnimationFrame(r)}var Xh=0,te=()=>Xh++,Ft=()=>{let r=Ne().createElement("canvas");if(!r||r.getContext===void 0)throw new At("Failed to create `canvas` element");return r},go=()=>Ne().createElement("img"),Wh=r=>{var t;let e=ft(r);return(t=e.getContext("2d"))==null||t.drawImage(r,0,0),e},ft=r=>{let t=Ft();return t.width=r.width,t.height=r.height,t},kn=(r,t,e)=>r.toDataURL(`image/${t}`,e),On=(r,t,e)=>new Promise((i,s)=>{r.toBlob(i,`image/${t}`,e)}),X=r=>r*Sn,Gt=r=>r/Sn,po=r=>r.every((t,e)=>t===ot[e]),Z=(r,t,e)=>new v(r).transform(t,e),ct=r=>{let t=1/(r[0]*r[3]-r[1]*r[2]),e=[t*r[3],-t*r[1],-t*r[2],t*r[0],0,0],{x:i,y:s}=new v(r[4],r[5]).transform(e,!0);return e[4]=-i,e[5]=-s,e},W=(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]],zi=(r,t)=>r.reduceRight((e,i)=>i&&e?W(i,e,t):i||e,void 0)||ot.concat(),Mn=([r,t])=>Math.atan2(t,r),Pn=([r,t])=>Math.sqrt(r*r+t*t),fo=([,,r,t])=>Math.sqrt(r*r+t*t),ve=r=>{let t=Mn(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:Gt(t),scaleX:i,scaleY:s,skewX:Gt(n),skewY:0,translateX:r[4]||0,translateY:r[5]||0}},qe=(r,t=0)=>[1,0,0,1,r,t];function xe({angle:r=0}={},{x:t=0,y:e=0}={}){let i=X(r),s=kt(i),n=Ot(i);return[s,n,-n,s,t?t-(s*t-n*e):0,e?e-(n*t+s*e):0]}var Ni=(r,t=r)=>[r,0,0,t,0,0],mo=r=>Math.tan(X(r)),En=r=>[1,0,mo(r),1,0,0],An=r=>[1,mo(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=Ni(e?-r:r,i?-t:t);return s&&(a=W(a,En(s),!0)),n&&(a=W(a,An(n),!0)),a},yo=r=>{let{translateX:t=0,translateY:e=0,angle:i=0}=r,s=qe(t,e);i&&(s=W(s,xe({angle:i})));let n=Jr(r);return po(n)||(s=W(s,n)),s},Hr=(r,{signal:t,crossOrigin:e=null}={})=>new Promise(function(i,s){if(t&&t.aborted)return s(new Qa("loadImage"));let n=go(),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 At(`Error loading ${n.src}`))},e&&(n.crossOrigin=e),n.src=r):o()}),$e=(r,{signal:t,reviver:e=ki}={})=>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)})}),Zr=(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)?$e([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)})}),we=(r,t=[])=>t.reduce((e,i)=>(i in r&&(e[i]=r[i]),e),{}),Dn=(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)),Ge=r=>"matrix("+r.map(t=>R(t,L.NUM_FRACTION_DIGITS)).join(" ")+")",vt=r=>!!r&&r.toLive!==void 0,Ta=r=>!!r&&typeof r.toObject=="function",ka=r=>!!r&&r.offsetX!==void 0&&"source"in r,ue=r=>!!r&&"multiSelectionStacking"in r;function vo(r){let t=r&&wt(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 wt=r=>r.ownerDocument||null,bo=r=>{var t;return((t=r.ownerDocument)==null?void 0:t.defaultView)||null},xo=(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))},Ks=(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 Oa(r){return r.onselectstart!==void 0&&(r.onselectstart=()=>!1),r.style.userSelect=Gi,r}var wo=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&&Ne().getElementById(r)||Ft();var e;if(t.hasAttribute("data-fabric"))throw new At("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;xo(e,i,r,t)}setCSSDimensions(r){Ks(this.lower.el,r)}calcOffset(){return(function(r){var t;let e=r&&wt(r),i={left:0,top:0};if(!e)return i;let s=((t=bo(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=vo(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(){jt().dispose(this.lower.el),delete this.lower}},Yh={backgroundVpt:!0,backgroundColor:"",overlayVpt:!0,overlayColor:"",includeDefaultValues:!0,svgViewportTransformation:!0,renderOnAddRemove:!0,skipOffscreen:!0,enableRetinaScaling:!0,imageSmoothingEnabled:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,viewportTransform:[...ot],patternQuality:"best"},$h=Kr({capitalize:()=>Gh,escapeXml:()=>P,graphemeSplit:()=>Vi}),Gh=(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,">"),xr,Vi=r=>{if(xr||xr||(xr="Intl"in ye()&&"Segmenter"in Intl&&new Intl.Segmenter(void 0,{granularity:"grapheme"})),xr){let t=xr.segment(r);return Array.from(t).map(({segment:e})=>e)}return Hh(r)},Hh=r=>{let t=[];for(let e,i=0;i<r.length;i++)(e=zh(r,i))!==!1&&t.push(e);return t},zh=(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},Ke=class Co extends ho(co){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 Co.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 wo(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&&($t("warn",`Canvas is trying to add an object that belongs to a different canvas.
|
|
3
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?to():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 Pn(this.viewportTransform)}setViewportTransform(t){this.viewportTransform=t,this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll()}zoomToPoint(t,e){let i=t,s=[...this.viewportTransform],n=Z(t,ct(s));s[0]=e,s[3]=e;let a=Z(n,s);s[4]+=i.x-a.x,s[5]+=i.y-a.y,this.setViewportTransform(s)}setZoom(t){this.zoomToPoint(new v(0,0),t)}absolutePan(t){let e=[...this.viewportTransform];return e[4]=-t.x,e[5]=-t.y,this.setViewportTransform(e)}relativePan(t){return this.absolutePan(new v(-t.x-this.viewportTransform[4],-t.y-this.viewportTransform[5]))}getElement(){return this.elements.lower.el}clearContext(t){t.clearRect(0,0,this.width,this.height)}getContext(){return this.elements.lower.ctx}clear(){this.remove(...this.getObjects()),this.backgroundImage=void 0,this.overlayImage=void 0,this.backgroundColor="",this.overlayColor="",this.clearContext(this.getContext()),this.fire("canvas:cleared"),this.renderOnAddRemove&&this.requestRenderAll()}renderAll(){this.cancelRequestedRender(),this.destroyed||this.renderCanvas(this.getContext(),this._objects)}renderAndReset(){this.nextRenderHandle=0,this.renderAll()}requestRenderAll(){this.nextRenderHandle||this.disposed||this.destroyed||(this.nextRenderHandle=Gr(()=>this.renderAndReset()))}calcViewportBoundaries(){let t=this.width,e=this.height,i=ct(this.viewportTransform),s=Z({x:0,y:0},i),n=Z({x:t,y:e},i),a=s.min(n),o=s.max(n);return this.vptCoords={tl:a,tr:new v(o.x,a.y),bl:new v(a.x,o.y),br:o}}cancelRequestedRender(){this.nextRenderHandle&&(uo(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=vt(i);if(i){if(t.save(),t.beginPath(),t.moveTo(0,0),t.lineTo(this.width,0),t.lineTo(this.width,this.height),t.lineTo(0,this.height),t.closePath(),t.fillStyle=o?i.toLive(t):i,a&&t.transform(...n),o){t.transform(1,0,0,1,i.offsetX||0,i.offsetY||0);let l=i.gradientTransform||i.patternTransform;l&&t.transform(...l)}t.fill(),t.restore()}if(s){t.save();let{skipOffscreen:l}=this;this.skipOffscreen=a,a&&t.transform(...n),s.render(t),this.skipOffscreen=l,t.restore()}}_renderBackground(t){this._renderBackgroundOrOverlay(t,"background")}_renderOverlay(t){this._renderBackgroundOrOverlay(t,"overlay")}getCenterPoint(){return new v(this.width/2,this.height/2)}centerObjectH(t){return this._centerObject(t,new v(this.getCenterPoint().x,t.getCenterPoint().y))}centerObjectV(t){return this._centerObject(t,new v(t.getCenterPoint().x,this.getCenterPoint().y))}centerObject(t){return this._centerObject(t,this.getCenterPoint())}viewportCenterObject(t){return this._centerObject(t,this.getVpCenter())}viewportCenterObjectH(t){return this._centerObject(t,new v(this.getVpCenter().x,t.getCenterPoint().y))}viewportCenterObjectV(t){return this._centerObject(t,new v(t.getCenterPoint().x,this.getVpCenter().y))}getVpCenter(){return Z(this.getCenterPoint(),ct(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:qs,...we(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 vt(a)?a.excludeFromExport||(i.background=a.toObject(e)):a&&(i.background=a),vt(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>
|
|
@@ -38,7 +38,7 @@ ${o.toClipPathSVG(e)}</clipPath>
|
|
|
38
38
|
`),i=[],s=-1,n={};r=qn(r);for(let a=0;a<e.length;a++){let o=Vi(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&&(es(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},cl=(r,t)=>{if(!Array.isArray(r))return qn(r);let e=t.split(_n),i={},s=-1,n=0;for(let a=0;a<e.length;a++){let o=Vi(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},ne=["display","transform",lt,"fill-opacity","fill-rule","opacity",Lt,"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 Ya(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 zc(r,t){let e=!0,i=Ya(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=Ya(s=s.parentElement,a);return n.length===0})(r,t)),i&&e&&t.length===0}function Nc(r,t={}){let e={};for(let i in t)zc(r,i.split(" "))&&(e={...e,...t[i]});return e}var Vc=r=>{var t;return(t=ec[r])==null?r:t},Uc=RegExp(`(${Ct})`,"gi"),at=`(${Ct})`,qc=String.raw`(skewX)\(${at}\)`,Kc=String.raw`(skewY)\(${at}\)`,Jc=String.raw`(rotate)\(${at}(?: ${at} ${at})?\)`,Zc=String.raw`(scale)\(${at}(?: ${at})?\)`,Qc=String.raw`(translate)\(${at}(?: ${at})?\)`,Kn=`(?:${String.raw`(matrix)\(${at} ${at} ${at} ${at} ${at} ${at}\)`}|${Qc}|${Jc}|${Zc}|${qc}|${Kc})`,tu=`(?:${Kn}*)`,eu=String.raw`^\s*(?:${tu}?)\s*$`,ru=new RegExp(eu),iu=new RegExp(Kn),su=new RegExp(Kn,"g");function Xi(r){let t=[];if(!(r=(e=>Bi(e.replace(Uc," $1 ").replace(/,/gi," ")))(r).replace(/\s*([()])\s*/gi,"$1"))||r&&!ru.test(r))return[...ot];for(let e of r.matchAll(su)){let i=iu.exec(e[0]);if(!i)continue;let s=ot,[,n,...a]=i.filter(g=>!!g),[o,l,h,c,u,d]=a.map(g=>parseFloat(g));switch(n){case"translate":s=qe(o,l);break;case so:s=xe({angle:o},{x:l,y:h});break;case oo:s=Ni(o,l);break;case Ve:s=En(o);break;case Ue:s=An(o);break;case"matrix":s=[o,l,h,c,u,d]}t.push(s)}return zi(t)}function nu(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?W(e.transformMatrix,Xi(t)):Xi(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"?H:t==="end"?St:F;else if(r==="charSpacing"||r==="textDecorationThickness")n=st(t,i)/i*1e3;else if(r==="paintFirst"){let o=t.indexOf(lt),l=t.indexOf(Lt);a=lt,(o>-1&&l>-1&&l<o||o===-1&&l>-1)&&(a=Lt)}else{if(r==="href"||r==="xlink:href"||r==="font"||r==="id")return t;if(r==="imageSmoothing")return t==="optimizeQuality";n=s?t.map(st):st(t,i)}}else a="";return!s&&isNaN(n)?a:n}function sn(r,t){r.replace(/;\s*$/,"").split(";").forEach(e=>{if(!e)return;let[i,s]=e.split(":");t[i.trim().toLowerCase()]=s.trim()})}function au(r){let t={},e=r.getAttribute("style");return e&&(typeof e=="string"?sn(e,t):(function(i,s){Object.entries(i).forEach(([n,a])=>{a!==void 0&&(s[n.toLowerCase()]=a)})})(e,t)),t}var ou={stroke:"strokeOpacity",fill:"fillOpacity"};function Vt(r,t,e){if(!r)return{};let i,s={},n=16;r.parentNode&&Ia.test(r.parentNode.nodeName)&&(s=Vt(r.parentElement,t,e),s.fontSize&&(i=n=st(s.fontSize)));let a={...t.reduce((h,c)=>{let u=r.getAttribute(c);return u&&(h[c]=u),h},{}),...Nc(r,e),...au(r)};a["clip-path"]&&r.setAttribute(Fa,a[Fa]),a["font-size"]&&(i=st(a[La],n),a[La]=`${i}`);let o={};for(let h in a){let c=Vc(h);o[c]=nu(c,a[h],s,i)}o&&o.font&&(function(h,c){let u=h.match(tc);if(!u)return;let d=u[1],g=u[3],p=u[4],f=u[5],y=u[6];d&&(c.fontStyle=d),g&&(c.fontWeight=isNaN(parseFloat(g))?g:parseFloat(g)),p&&(c.fontSize=st(p)),y&&(c.fontFamily=y),f&&(c.lineHeight=f==="normal"?1:f)})(o.font,o);let l={...s,...o};return Ia.test(r.nodeName)?l:(function(h){let c=z.getDefaults();return Object.entries(ou).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 Q(h[u]);h[u]=g.setAlpha(R(g.getAlpha()*h[d],2)).toRgba()}),h})(l)}var ul=["rx","ry"],V=class nn extends z{static getDefaults(){return{...super.getDefaults(),...nn.ownDefaults}}constructor(t){super(),Object.assign(this,nn.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([...ul,...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
39
|
`]}static async fromElement(t,e,i){let{left:s=0,top:n=0,width:a=0,height:o=0,visible:l=!0,...h}=Vt(t,this.ATTRIBUTE_NAMES,i);return new this({...e,...h,left:s,top:n,width:a,height:o,visible:!!(l&&a&&o)})}};m(V,"type","Rect"),m(V,"cacheProperties",[...zt,...ul]),m(V,"ownDefaults",{rx:0,ry:0}),m(V,"ATTRIBUTE_NAMES",[...ne,"x","y","rx","ry","width","height"]),_.setClass(V),_.setSVGClass(V);var $a="initialization",an="added",dl=(r,t)=>{let{strokeUniform:e,strokeWidth:i,width:s,height:n,group:a}=t,o=a&&a!==r?Qr(a.calcTransformMatrix(),r.calcTransformMatrix()):null,l=o?t.getRelativeCenterPoint().transform(o):t.getRelativeCenterPoint(),h=!t.isStrokeAccountedForInDimensions(),c=e&&h?ko(new v(i,i),void 0,r.calcTransformMatrix()):Tn,u=!e&&h?i:0,d=Ui(s+u,n+u,zi([o,t.calcOwnMatrix()],!0)).add(c).scalarDivide(2);return[l.subtract(d),l.add(d)]},rs=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}=Dt(r.map(c=>dl(i,c)).reduce((c,u)=>c.concat(u),[])),l=new v(a,o),h=new v(s,n).add(l.scalarDivide(2));if(e==="initialization"){let c=this.getInitialSize(t,{size:l,center:h});return{center:h,relativeCorrection:new v(0,0),size:c}}return{center:h.transform(i.calcOwnMatrix()),size:l}}};m(rs,"type","strategy");var on=class extends rs{shouldPerformLayout(r){return!0}};m(on,"type","fit-content"),_.setClass(on);var gl="layoutManager",qr=class{constructor(r=new on){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[lo,ro,Nr,io,Hi,no,ji,ao,"modifyPath"].map(i=>r.on(i,s=>this.performLayout(i==="modified"?{type:"object_modified",trigger:i,e:s,target:e}:{type:"object_modifying",trigger:i,e:s,target:e})))}subscribe(r,t){this.unsubscribe(r,t);let e=this.attachHandlers(r,t);this._subscriptions.set(r,e)}unsubscribe(r,t){(this._subscriptions.get(r)||[]).forEach(e=>e()),this._subscriptions.delete(r)}unsubscribeTargets(r){r.targets.forEach(t=>this.unsubscribe(t,r))}subscribeTargets(r){r.targets.forEach(t=>this.subscribe(t,r))}onBeforeLayout(r){let{target:t,type:e}=r,{canvas:i}=t;if(e==="initialization"||e==="added"?this.subscribeTargets(r):e==="removed"&&this.unsubscribeTargets(r),t.fire("layout:before",{context:r}),i&&i.fire("object:layout:before",{target:t,context:r}),e==="imperative"&&r.deep){let{strategy:s,...n}=r;t.forEachObject(a=>a.layoutManager&&a.layoutManager.performLayout({...n,bubbles:!1,target:a}))}}getLayoutResult(r){let{target:t,strategy:e,type:i}=r,s=e.calcLayoutResult(r,t.getObjects());if(!s)return;let n=i==="initialization"?new v:t.getRelativeCenterPoint(),{center:a,correction:o=new v,relativeCorrection:l=new v}=s;return{result:s,prevCenter:n,nextCenter:a,offset:n.subtract(a).add(o).transform(i==="initialization"?ot:ct(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*nt(e.originX):n,top:(a=r.y)==null?s.y+i.y*nt(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:gl,strategy:this.strategy.constructor.type}}toJSON(){return this.toObject()}};_.setClass(qr,gl);var lu=class extends qr{performLayout(){}},q=class ln extends ho(z){static getDefaults(){return{...super.getDefaults(),...ln.ownDefaults}}constructor(t=[],e={}){super(),m(this,"_activeObjects",[]),m(this,"__objectSelectionTracker",void 0),m(this,"__objectSelectionDisposer",void 0),Object.assign(this,ln.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 qr:i,this.layoutManager.performLayout({type:$a,target:this,targets:[...t],x:e.left,y:e.top})}canEnterGroup(t){return t===this||this.isDescendantOf(t)?($t("error","Group: circular object trees are not supported, this call has no effect"),!1):this._objects.indexOf(t)===-1||($t("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(an,e),i}insertAt(t,...e){let i=this._filterObjectsBeforeEnteringGroup(e),s=super.insertAt(t,...i);return this._onAfterObjectsChange(an,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&&He(t,W(ct(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||(He(t,W(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=z.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(...ct(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=V.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([$e(e,n),Zr(s,n)]).then(([a,o])=>{let l=new this(a,{...s,...o,layoutManager:new lu});return l.layoutManager=i?new(_.getClass(i.type))(new(_.getClass(i.strategy))):new qr,l.layoutManager.subscribeTargets({type:$a,target:l,targets:l.getObjects()}),l.setCoords(),l})}};m(q,"type","Group"),m(q,"ownDefaults",{strokeWidth:0,subTargetCheck:!1,interactive:!1}),_.setClass(q);var hu=(r,t)=>r&&r.length===1?r[0]:new q(r,t),pl=(r,t)=>Math.min(t.width/r.width,t.height/r.height),fl=(r,t)=>Math.max(t.width/r.width,t.height/r.height),hn="\\s*,?\\s*",wr=`${hn}(${Ct})`,cu=`${wr}${wr}${wr}${hn}([01])${hn}([01])${wr}${wr}`,uu={m:"l",M:"L"},du=(r,t,e,i,s,n,a,o,l,h,c)=>{let u=kt(r),d=Ot(r),g=kt(t),p=Ot(t),f=e*s*g-i*n*p+a,y=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),y+l*(i*s*p-e*n*g),f,y]},Ga=(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 cn(r,t,e,i,s,n,a,o){let l;if(L.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 k=h(C),T=(-g+k)/(2*p);0<T&&T<1&&u.push(T);let O=(-g-k)/(2*p);0<O&&O<1&&u.push(O)}let y=u.length,b=y,x=yl(r,t,e,i,s,n,a,o);for(;y--;){let{x:S,y:C}=x(u[y]);d[0][y]=S,d[1][y]=C}d[0][b]=r,d[1][b]=t,d[0][b+1]=a,d[1][b+1]=o;let w=[new v(Math.min(...d[0]),Math.min(...d[1])),new v(Math.max(...d[0]),Math.max(...d[1]))];return L.cachesBoundsOfCurve&&($r.boundsOfCurveCache[l]=w),w}var gu=(r,t,[e,i,s,n,a,o,l,h])=>{let c=((u,d,g,p,f,y,b)=>{if(g===0||p===0)return[];let x=0,w=0,S=0,C=Math.PI,k=b*Sn,T=Ot(k),O=kt(k),M=.5*(-O*u-T*d),D=.5*(-O*d+T*u),E=g**2,A=p**2,j=D**2,B=M**2,K=E*A-E*j-A*B,$=Math.abs(g),rt=Math.abs(p);if(K<0){let Jt=Math.sqrt(1-K/(E*A));$*=Jt,rt*=Jt}else S=(f===y?-1:1)*Math.sqrt(K/(E*j+A*B));let dt=S*$*D/rt,I=-S*rt*M/$,Pt=O*dt-T*I+.5*u,mr=T*dt+O*I+.5*d,yr=Ga(1,0,(M-dt)/$,(D-I)/rt),Kt=Ga((M-dt)/$,(D-I)/rt,(-M-dt)/$,(-D-I)/rt);y===0&&Kt>0?Kt-=2*C:y===1&&Kt<0&&(Kt+=2*C);let vr=Math.ceil(Math.abs(Kt/C*2)),mi=[],br=Kt/vr,Th=8/3*Math.sin(br/4)*Math.sin(br/4)/Math.sin(br/2),Is=yr+br;for(let Jt=0;Jt<vr;Jt++)mi[Jt]=du(yr,Is,O,T,$,rt,Pt,mr,Th,x,w),x=mi[Jt][5],w=mi[Jt][6],yr=Is,Is+=br;return mi})(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},ml=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":gu(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},Wi=(r,t,e,i)=>Math.sqrt((e-r)**2+(i-t)**2),yl=(r,t,e,i,s,n,a,o)=>l=>{let h=l**3,c=(g=>3*g**2*(1-g))(l),u=(g=>3*g*(1-g)**2)(l),d=(g=>(1-g)**3)(l);return new v(a*h+s*c+e*u+r*d,o*h+n*c+i*u+t*d)},vl=r=>r**2,bl=r=>2*r*(1-r),xl=r=>(1-r)**2,pu=(r,t,e,i,s,n,a,o)=>l=>{let h=vl(l),c=bl(l),u=xl(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)},fu=(r,t,e,i,s,n)=>a=>{let o=vl(a),l=bl(a),h=xl(a);return new v(s*o+e*l+r*h,n*o+i*l+t*h)},mu=(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)},Ha=(r,t,e)=>{let i=new v(t,e),s=0;for(let n=1;n<=100;n+=1){let a=r(n/100);s+=Wi(i.x,i.y,a.x,a.y),i=a}return s},yu=(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=Wi(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)}},Jn=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=Wi(s,n,h[1],h[2]),s=h[1],n=h[2];break;case"C":t=yl(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e=c,e.iterator=t,e.angleFinder=pu(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e.length=Ha(t,s,n),s=h[5],n=h[6];break;case"Q":t=fu(s,n,h[1],h[2],h[3],h[4]),e=c,e.iterator=t,e.angleFinder=mu(s,n,h[1],h[2],h[3],h[4]),e.length=Ha(t,s,n),s=h[3],n=h[4];break;case"Z":e=c,e.destX=a,e.destY=o,e.length=Wi(s,n,a,o),s=a,n=o}i+=e.length,l.push(e)}return l.push({length:i,x:s,y:n}),l},wl=(r,t,e=Jn(r))=>{let i=0;for(;t-e[i].length>0&&i<e.length-2;)t-=e[i].length,i++;let s=e[i],n=t/s.length,a=r[i];switch(s.command){case"M":return{x:s.x,y:s.y,angle:0};case"Z":return{...new v(s.x,s.y).lerp(new v(s.destX,s.destY),n),angle:Math.atan2(s.destY-s.y,s.destX-s.x)};case"L":return{...new v(s.x,s.y).lerp(new v(a[1],a[2]),n),angle:Math.atan2(a[2]-s.y,a[1]-s.x)};case"C":case"Q":return yu(s,t)}},vu=RegExp("[mzlhvcsqta][^mzlhvcsqta]*","gi"),za=new RegExp(cu,"g"),bu=new RegExp(Ct,"gi"),xu={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},Cl=r=>{var t;let e=[],i=(t=r.match(vu))==null?[]:t;for(let s of i){let n=s[0];if(n==="z"||n==="Z"){e.push([n]);continue}let a=xu[n.toLowerCase()],o=[];if(n==="a"||n==="A"){let l;for(za.lastIndex=0;l=za.exec(s);)o.push(...l.slice(1))}else o=s.match(bu)||[];for(let l=0;l<o.length;l+=a){let h=Array(a),c=uu[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},wu=(r,t=0)=>{let e=new v(r[0]),i=new v(r[1]),s=1,n=0,a=[],o=r.length,l=o>2,h;for(l&&(s=r[2].x<i.x?-1:r[2].x===i.x?0:1,n=r[2].y<i.y?-1:r[2].y===i.y?0:1),a.push(["M",e.x-s*t,e.y-n*t]),h=1;h<o;h++){if(!e.eq(i)){let c=e.midPointFrom(i);a.push(["Q",e.x,e.y,c.x,c.y])}e=r[h],h+1<r.length&&(i=r[h+1])}return l&&(s=e.x>r[h-2].x?1:e.x===r[h-2].x?0:-1,n=e.y>r[h-2].y?1:e.y===r[h-2].y?0:-1),a.push(["L",e.x+s*t,e.y+n*t]),a},Cu=(r,t,e)=>(e&&(t=W(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}=Z({x:i[n],y:i[n+1]},t);s[n]=a,s[n+1]=o}return s})),Su=(r,t)=>{let e=2*Math.PI/r,i=-ee;r%2==0&&(i+=e/2);let s=Array(r+1);for(let n=0;n<r;n++){let a=n*e+i,{x:o,y:l}=new v(kt(a),Ot(a)).scalarMultiply(t);s[n]=[n===0?"M":"L",o,l]}return s[r]=["Z"],s},Sl=(r,t)=>r.map(e=>e.map((i,s)=>s===0||t===void 0?i:R(i,t)).join(" ")).join(" "),_u=(r,t)=>{var e;let i=r,s=t;i.inverted&&!s.inverted&&(i=t,s=r),Ln(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 q([i],{clipPath:s,inverted:n})},Tu=(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}=ve(i.transformMatrix);i.flipX=!1,i.flipY=!1,i.set(re,s),i.set(ie,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)},tt=Kr({addTransformToObject:()=>_o,animate:()=>zn,animateColor:()=>Xo,applyTransformToObject:()=>He,calcAngleBetweenVectors:()=>Ri,calcDimensionsMatrix:()=>Jr,calcPlaneChangeMatrix:()=>Qr,calcVectorRotation:()=>In,cancelAnimFrame:()=>uo,capValue:()=>be,composeMatrix:()=>yo,copyCanvasElement:()=>Wh,cos:()=>kt,createCanvasElement:()=>Ft,createImage:()=>go,createRotateMatrix:()=>xe,createScaleMatrix:()=>Ni,createSkewXMatrix:()=>En,createSkewYMatrix:()=>An,createTranslateMatrix:()=>qe,createVector:()=>Vr,crossProduct:()=>Ye,degreesToRadians:()=>X,dotProduct:()=>Mo,ease:()=>ac,enlivenObjectEnlivables:()=>Zr,enlivenObjects:()=>$e,findScaleToCover:()=>fl,findScaleToFit:()=>pl,getBoundsOfCurve:()=>cn,getOrthonormalVector:()=>Rn,getPathSegmentsInfo:()=>Jn,getPointOnPath:()=>wl,getPointer:()=>So,getRandomInt:()=>Tu,getRegularPolygonPath:()=>Su,getSmoothPathFromPoints:()=>wu,getSvgAttributes:()=>Jh,getUnitVector:()=>qi,groupSVGElements:()=>hu,hasStyleChanged:()=>es,invertTransform:()=>ct,isBetweenVectors:()=>Js,isIdentityMatrix:()=>po,isTouchEvent:()=>Fi,isTransparent:()=>nl,joinPath:()=>Sl,loadImage:()=>Hr,magnitude:()=>Ii,makeBoundingBoxFromPoints:()=>Dt,makePathSimpler:()=>ml,matrixToSVG:()=>Ge,mergeClipPaths:()=>_u,multiplyTransformMatrices:()=>W,multiplyTransformMatrixArray:()=>zi,parsePath:()=>Cl,parsePreserveAspectRatioAttribute:()=>Wn,parseUnit:()=>st,pick:()=>we,projectStrokeOnPoints:()=>ll,qrDecompose:()=>ve,radiansToDegrees:()=>Gt,removeFromArray:()=>ce,removeTransformFromObject:()=>Vh,removeTransformMatrixForSvgParsing:()=>Ai,requestAnimFrame:()=>Gr,resetObjectTransform:()=>To,rotateVector:()=>Fn,saveObjectTransform:()=>jn,sendObjectToPlane:()=>Ln,sendPointToPlane:()=>Ht,sendVectorToPlane:()=>ko,sin:()=>Ot,sizeAfterTransform:()=>Ui,string:()=>$h,stylesFromArray:()=>cl,stylesToArray:()=>hl,toBlob:()=>On,toDataURL:()=>kn,toFixed:()=>R,transformPath:()=>Cu,transformPoint:()=>Z});function un(r,t){let e=r.style;e&&Object.entries(t).forEach(([i,s])=>e.setProperty(i,s))}var ku=class extends wo{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=Ft();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=Ne().createElement("div");return r.setAttribute("data-fabric","wrapper"),un(r,{position:"relative"}),Oa(r),r}applyCanvasStyle(r,t){let{styles:e,allowTouchScrolling:i}=t;un(r,{...e,"touch-action":i?"manipulation":Gi}),Oa(r)}setDimensions(r,t){super.setDimensions(r,t);let{el:e,ctx:i}=this.upper;xo(e,i,r,t)}setCSSDimensions(r){super.setCSSDimensions(r),Ks(this.upper.el,r),Ks(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(),jt().dispose(this.upper.el),delete this.upper,delete this.container}},_l=(r,t,e,i)=>{let{target:s,offsetX:n,offsetY:a}=t,o=e-n,l=i-a,h=!_t(s,"lockMovementX")&&s.left!==o,c=!_t(s,"lockMovementY")&&s.top!==l;return h&&s.set("left",o),c&&s.set("top",l),(h||c)&&Nn(ro,Xn(r,t,e,i)),h||c},Tl=ao,kl=r=>function(t,e,i){let{points:s,pathOffset:n}=i;return new v(s[r]).subtract(n).transform(W(i.getViewportTransform(),i.calcTransformMatrix()))},Ol=(r,t,e,i)=>{let{target:s,pointIndex:n}=t,a=s,o=Ht(new v(e,i),void 0,a.calcOwnMatrix());return a.points[n]=o.add(a.pathOffset),a.setDimensions(),a.set("dirty",!0),!0},Ml=(r,t)=>function(e,i,s,n){let a=i.target,o=new v(a.points[(r>0?r:a.points.length)-1]),l=o.subtract(a.pathOffset).transform(a.calcOwnMatrix()),h=t(e,{...i,pointIndex:r},s,n),c=o.subtract(a.pathOffset).transform(a.calcOwnMatrix()).subtract(l);return a.left-=c.x,a.top-=c.y,h},Pl=r=>Nt(Tl,Ml(r,Ol));function Ou(r,t={}){let e={};for(let i=0;i<(typeof r=="number"?r:r.points.length);i++)e[`p${i}`]=new pt({actionName:Tl,positionHandler:kl(i),actionHandler:Pl(i),...t});return e}var dn=(r,t,e)=>{let{path:i,pathOffset:s}=r,n=i[t];return new v(n[e]-s.x,n[e+1]-s.y).transform(W(r.getViewportTransform(),r.calcTransformMatrix()))};function Mu(r,t,e){let{commandIndex:i,pointIndex:s}=this;return dn(e,i,s)}function Pu(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],y=new v(f[d],f[d+1]),b=y.subtract(p).transform(l.calcOwnMatrix()),x=Ht(new v(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=y.subtract(l.pathOffset).transform(l.calcOwnMatrix()).subtract(b);return l.left-=w.x,l.top-=w.y,l.set("dirty",!0),!0})(s,e,i,n,a);return o&&Nn(this.actionName,{...Xn(r,t,e,i),commandIndex:n,pointIndex:a}),o}var El=class extends pt{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)}},Eu=class extends El{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=dn(s,l,h);if(c==="Q"){let d=dn(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)}},vi=(r,t,e,i,s,n)=>new(e?Eu:El)({commandIndex:r,pointIndex:t,actionName:"modifyPath",positionHandler:Mu,actionHandler:Pu,connectToCommandIndex:s,connectToPointIndex:n,...i,...e?i.controlPointStyle:i.pointStyle});function Au(r,t={}){let e={},i="M";return r.path.forEach((s,n)=>{let a=s[0];switch(a!=="Z"&&(e[`c_${n}_${a}`]=vi(n,s.length-2,!1,t)),a){case"C":e[`c_${n}_C_CP_1`]=vi(n,1,!0,t,n-1,(o=>o==="C"?5:o==="Q"?3:1)(i)),e[`c_${n}_C_CP_2`]=vi(n,3,!0,t,n,5);break;case"Q":e[`c_${n}_Q_CP_1`]=vi(n,1,!0,t,n,3)}i=a}),e}var Yg=Kr({changeHeight:()=>Yc,changeObjectHeight:()=>$o,changeObjectWidth:()=>Yo,changeWidth:()=>Qs,createObjectDefaultControls:()=>Un,createPathControls:()=>Au,createPolyActionHandler:()=>Pl,createPolyControls:()=>Ou,createPolyPositionHandler:()=>kl,createResizeControls:()=>el,createTextboxDefaultControls:()=>rl,dragHandler:()=>_l,factoryPolyActionHandler:()=>Ml,getLocalPoint:()=>Ki,polyActionHandler:()=>Ol,renderCircleControl:()=>Go,renderSquareControl:()=>Ho,rotationStyleHandler:()=>zo,rotationWithSnapping:()=>No,scaleCursorStyleHandler:()=>Re,scaleOrSkewActionName:()=>_r,scaleSkewCursorStyleHandler:()=>pe,scalingEqually:()=>Sr,scalingX:()=>qo,scalingXOrSkewingY:()=>tn,scalingY:()=>Ko,scalingYOrSkewingX:()=>en,skewCursorStyleHandler:()=>Jo,skewHandlerX:()=>Qo,skewHandlerY:()=>tl,wrapWithFireEvent:()=>Nt,wrapWithFixedAnchor:()=>se}),Al=class Dl extends Ke{constructor(...t){super(...t),m(this,"_hoveredTargets",[]),m(this,"_currentTransform",null),m(this,"_groupSelector",null),m(this,"contextTopDirty",!1)}static getDefaults(){return{...super.getDefaults(),...Dl.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 ku(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 nl(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=St:["mr","tr","br"].includes(e)&&(i.x=H),["tl","mt","tr"].includes(e)?i.y=eo:["bl","mb","br"].includes(e)&&(i.y="top")),i}_setupCurrentTransform(t,e,i){var s;let n=e.group?Ht(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):_l,h=((O,M,D,E)=>{if(!M||!O)return"drag";let A=E.controls[M];return A.getActionName(D,A,E)})(i,a,t,e),c=t[this.centeredKey],u=this._shouldCenterTransform(e,h,c)?{x:F,y:F}:this._getOriginFromCorner(e,a),{scaleX:d,scaleY:g,skewX:p,skewY:f,left:y,top:b,angle:x,width:w,height:S,cropX:C,cropY:k}=e,T={target:e,action:h,actionHandler:l,actionPerformed:!1,corner:a,scaleX:d,scaleY:g,skewX:p,skewY:f,offsetX:n.x-y,offsetY:n.y-b,originX:u.x,originY:u.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:X(x),width:w,height:S,shiftKey:t.shiftKey,altKey:c,original:{...jn(e),originX:u.x,originY:u.y,cropX:C,cropY:k}};this._currentTransform=T,this.fire("before:transform",{e:t,transform:T})}setCursor(t){this.upperCanvasEl.style.cursor=t}_drawSelection(t){let{x:e,y:i,deltaX:s,deltaY:n}=this._groupSelector,a=new v(e,i).transform(this.viewportTransform),o=new v(e+s,i+n).transform(this.viewportTransform),l=this.selectionLineWidth/2,h=Math.min(a.x,o.x),c=Math.min(a.y,o.y),u=Math.max(a.x,o.x),d=Math.max(a.y,o.y);this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(h,c,u-h,d-c)),this.selectionLineWidth&&this.selectionBorderColor&&(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,h+=l,c+=l,u-=l,d-=l,z.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),Fi(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=kt(c)*n,d=Ot(c)*n,g=u+d,p=u-d;i=[new v(a.x-p,a.y-g),new v(o.x+g,o.y-p),new v(l.x+p,l.y+g),new v(h.x-g,h.y+p)]}return zr.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(Oi(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&&Oi(s)&&s.interactive&&n[0]){for(let a=n.length-1;a>0;a--){let o=n[a];if(!Oi(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=So(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=Ht(n,void 0,this.viewportTransform));let l=this.getRetinaScaling();l!==1&&(n.x/=l,n.y/=l);let h=a===0||o===0?new v(1,1):new v(i.width/a,i.height/o);return n.multiply(h)}_setDimensionsImpl(t,e){this._resetTransformEventData(),super._setDimensionsImpl(t,e),this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop)}_createCacheCanvas(){this.pixelFindCanvasEl=Ft(),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 ue(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,ue(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),ue(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(lo,s))}setViewportTransform(t){super.setViewportTransform(t);let e=this._activeObject;e&&e.setCoords()}destroy(){let t=this._activeObject;ue(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&&ue(e)&&this._activeObject===e){let i=we(t,["angle","flipX","flipY",H,re,ie,Ve,Ue,"top"]);return _o(t,e.calcOwnMatrix()),i}return{}}_setSVGObject(t,e,i){let s=this._realizeGroupTransformOnObject(e);super._setSVGObject(t,e,i),e.set(s)}};m(Al,"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 Du=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),ce(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}},gt={passive:!1},Le=(r,t)=>({viewportPoint:r.getViewportPoint(t),scenePoint:r.getScenePoint(t)}),Zt=(r,...t)=>r.addEventListener(...t),yt=(r,...t)=>r.removeEventListener(...t),ju={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"}},Yi=class extends Al{constructor(r,t={}){super(r,t),m(this,"_isClick",void 0),m(this,"textEditingManager",new Du(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(Zt)}_getEventPrefix(){return this.enablePointerEvents?"pointer":"mouse"}addOrRemove(r,t=!1){let e=this.upperCanvasEl,i=this._getEventPrefix();r(bo(e),"resize",this._onResize),r(e,i+"down",this._onMouseDown),r(e,`${i}move`,this._onMouseMove,gt),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,gt)}removeListeners(){this.addOrRemove(yt);let r=this._getEventPrefix(),t=wt(this.upperCanvasEl);yt(t,`${r}up`,this._onMouseUp),yt(t,"touchend",this._onTouchEnd,gt),yt(t,`${r}move`,this._onMouseMove,gt),yt(t,"touchmove",this._onMouseMove,gt),clearTimeout(this._willAddMouseDown)}_onMouseWheel(r){this._cacheTransformEventData(r),this._handleEvent(r,"wheel"),this._resetTransformEventData()}_onMouseOut(r){let t=this._hoveredTarget,e={e:r,...Le(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,...Le(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),Zt(this.upperCanvasEl,"drag",this._onDragProgress);return}Ma(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};yt(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,...Le(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&&Ma(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,...Le(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=wt(s);Zt(a,"touchend",this._onTouchEnd,gt),t&&Zt(a,"touchmove",this._onMouseMove,gt),yt(s,`${n}down`,this._onMouseDown),this._resetTransformEventData()}_onMouseDown(r){this._cacheTransformEventData(r),this.__onMouseDown(r);let t=this.upperCanvasEl,e=this._getEventPrefix();yt(t,`${e}move`,this._onMouseMove,gt);let i=wt(t);Zt(i,`${e}up`,this._onMouseUp),Zt(i,`${e}move`,this._onMouseMove,gt),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=wt(this.upperCanvasEl);yt(e,"touchend",this._onTouchEnd,gt),yt(e,"touchmove",this._onMouseMove,gt),this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(()=>{Zt(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=wt(this.upperCanvasEl);yt(i,`${e}up`,this._onMouseUp),yt(i,`${e}move`,this._onMouseMove,gt),Zt(t,`${e}move`,this._onMouseMove,gt)}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),Fi(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,...Le(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),Fi(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=Ht(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}=ju[r],d=e!==t,g=s!==i,p=t&&d,f=i&&g,y=e&&d,b=s&&g,x={...o,e:a,...Le(this,a)},w={...x,target:e,nextTarget:t,actualTarget:s,nextActualTarget:i};(y||b)&&n&&this.fire(u,w),y&&e.fire(h,w),b&&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?Ht(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=ue(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=ue(e);if(e&&this._isSelectionKeyPressed(r)&&this.selection&&t&&t.selectable&&(e!==t||i)&&(i||!t.isDescendantOf(e)&&!e.isDescendantOf(t))&&!t.onSelect({e:r})&&!e.getActiveControl()){if(i){let s=e.getObjects(),n=[];if(t===e){let a=this.getScenePoint(r),o=this.searchPossibleTargets(s,a);if(o.target?(t=o.target,n=o.subTargets):(o=this.searchPossibleTargets(this._objects,a),t=o.target,n=o.subTargets),!t||!t.selectable)return!1}t.group===e?(e.remove(t),this._hoveredTarget=t,this._hoveredTargets=n,e.size()===1&&this._setActiveObject(e.item(0),r)):(e.multiSelectAdd(t),this._hoveredTarget=e,this._hoveredTargets=n),this._fireSelectionEvents(s,r)}else{e.isEditing&&e.exitEditing();let s=new(_.getClass("ActiveSelection"))([],{canvas:this});s.multiSelectAdd(e,t),this._hoveredTarget=s,this._setActiveObject(s,r),this._fireSelectionEvents([e],r)}return!0}return!1}handleSelection(r){if(!this.selection||!this._groupSelector)return!1;let{x:t,y:e,deltaX:i,deltaY:s}=this._groupSelector,n=new v(t,e),a=n.add(new v(i,s)),o=n.min(a),l=n.max(a).subtract(o),h=this.collectObjects({left:o.x,top:o.y,width:l.x,height:l.y},{includeIntersecting:!this.selectionFullyContained}),c=n.eq(a)?h[0]?[h[0]]:[]:h.length>1?h.filter(u=>!u.onSelect({e:r})).reverse():h;if(c.length===1)this.setActiveObject(c[0],r);else if(c.length>1){let u=_.getClass("ActiveSelection");this.setActiveObject(new u(c,{canvas:this}),r)}return this._groupSelector=null,!0}toCanvasElement(r=1,t){let{upper:e}=this.elements;e.ctx=void 0;let i=super.toCanvasElement(r,t);return e.ctx=e.el.getContext("2d"),i}clear(){this.textEditingManager.clear(),super.clear()}destroy(){this.removeListeners(),this.textEditingManager.dispose(),super.destroy()}},jl={x1:0,y1:0,x2:0,y2:0},Lu={...jl,r1:0,r2:0},Be=(r,t)=>isNaN(r)&&typeof t=="number"?t:r;function Ll(r){return r&&/%$/.test(r)&&Number.isFinite(parseFloat(r))}function Fl(r,t){return be(0,Be(typeof r=="number"?r:typeof r=="string"?parseFloat(r)/(Ll(r)?100:1):NaN,t),1)}var Fu=/\s*;\s*/,Iu=/\s*:\s*/;function Ru(r,t){let e,i,s=r.getAttribute("style");if(s){let a=s.split(Fu);a[a.length-1]===""&&a.pop();for(let o=a.length;o--;){let[l,h]=a[o].split(Iu).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=Be(parseFloat(i||r.getAttribute("stop-opacity")||""),1);let n=new Q(e);return n.setAlpha(n.getAlpha()*i*t),{offset:Fl(r.getAttribute("offset"),0),color:n.toRgba()}}function Bu(r,t){let e=[],i=r.getElementsByTagName("stop"),s=Fl(t,1);for(let n=i.length;n--;)e.push(Ru(i[n],s));return e}function Il(r){return r.nodeName==="linearGradient"||r.nodeName==="LINEARGRADIENT"?"linear":"radial"}function Rl(r){return r.getAttribute("gradientUnits")==="userSpaceOnUse"?"pixels":"percentage"}function xt(r,t){return r.getAttribute(t)}function Xu(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&&Ll(h)&&(a*=.01,n==="pixels"&&(l!=="x1"&&l!=="x2"&&l!=="r2"||(a*=i),l!=="y1"&&l!=="y2"||(a*=s)))}return o[l]=a,o},{})})(Il(r)==="linear"?(function(e){return{x1:xt(e,"x1")||0,y1:xt(e,"y1")||0,x2:xt(e,"x2")||"100%",y2:xt(e,"y2")||0}})(r):(function(e){return{x1:xt(e,"fx")||xt(e,"cx")||"50%",y1:xt(e,"fy")||xt(e,"cy")||"50%",r1:0,x2:xt(e,"cx")||"50%",y2:xt(e,"cy")||"50%",r2:xt(e,"r")||"50%"}})(r),{...t,gradientUnits:Rl(r)})}var Wt=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"?Lu:jl,...i},colorStops:s,offsetX:n,offsetY:a,gradientTransform:o,id:l?`${l}_${te()}`:te()})}addColorStop(r){for(let t in r)this.colorStops.push({offset:parseFloat(t),color:r[t]});return this}toObject(r){return{...we(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():ot.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+" ":""}${Ge(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),y=c(d),b=c(g),x=c(p);e.push("<linearGradient ",h,' x1="',f,'" y1="',y,'" x2="',b,'" y2="',x,`">
|
|
41
|
+
`),e}getSvgStyles(){let t=this.opacity!==void 0&&this.opacity!==1?`opacity: ${P(this.opacity)};`:"",e=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),e].join("")}toClipPathSVG(t){let e=[],i=this._createSVGBgRect(t);i&&e.push(" ",i);for(let s=0;s<this._objects.length;s++)e.push(" ",this._objects[s].toClipPathSVG(t));return this._createBaseClipPathSVGMarkup(e,{reviver:t})}static fromObject({type:t,objects:e=[],layoutManager:i,...s},n){return Promise.all([$e(e,n),Zr(s,n)]).then(([a,o])=>{let l=new this(a,{...s,...o,layoutManager:new lu});return l.layoutManager=i?new(_.getClass(i.type))(new(_.getClass(i.strategy))):new qr,l.layoutManager.subscribeTargets({type:$a,target:l,targets:l.getObjects()}),l.setCoords(),l})}};m(q,"type","Group"),m(q,"ownDefaults",{strokeWidth:0,subTargetCheck:!1,interactive:!1}),_.setClass(q);var hu=(r,t)=>r&&r.length===1?r[0]:new q(r,t),pl=(r,t)=>Math.min(t.width/r.width,t.height/r.height),fl=(r,t)=>Math.max(t.width/r.width,t.height/r.height),hn="\\s*,?\\s*",wr=`${hn}(${Ct})`,cu=`${wr}${wr}${wr}${hn}([01])${hn}([01])${wr}${wr}`,uu={m:"l",M:"L"},du=(r,t,e,i,s,n,a,o,l,h,c)=>{let u=kt(r),d=Ot(r),g=kt(t),p=Ot(t),f=e*s*g-i*n*p+a,y=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),y+l*(i*s*p-e*n*g),f,y]},Ga=(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 cn(r,t,e,i,s,n,a,o){let l;if(L.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 k=h(C),T=(-g+k)/(2*p);0<T&&T<1&&u.push(T);let O=(-g-k)/(2*p);0<O&&O<1&&u.push(O)}let y=u.length,b=y,x=yl(r,t,e,i,s,n,a,o);for(;y--;){let{x:S,y:C}=x(u[y]);d[0][y]=S,d[1][y]=C}d[0][b]=r,d[1][b]=t,d[0][b+1]=a,d[1][b+1]=o;let w=[new v(Math.min(...d[0]),Math.min(...d[1])),new v(Math.max(...d[0]),Math.max(...d[1]))];return L.cachesBoundsOfCurve&&($r.boundsOfCurveCache[l]=w),w}var gu=(r,t,[e,i,s,n,a,o,l,h])=>{let c=((u,d,g,p,f,y,b)=>{if(g===0||p===0)return[];let x=0,w=0,S=0,C=Math.PI,k=b*Sn,T=Ot(k),O=kt(k),M=.5*(-O*u-T*d),D=.5*(-O*d+T*u),E=g**2,A=p**2,j=D**2,B=M**2,K=E*A-E*j-A*B,$=Math.abs(g),rt=Math.abs(p);if(K<0){let Jt=Math.sqrt(1-K/(E*A));$*=Jt,rt*=Jt}else S=(f===y?-1:1)*Math.sqrt(K/(E*j+A*B));let dt=S*$*D/rt,I=-S*rt*M/$,Pt=O*dt-T*I+.5*u,mr=T*dt+O*I+.5*d,yr=Ga(1,0,(M-dt)/$,(D-I)/rt),Kt=Ga((M-dt)/$,(D-I)/rt,(-M-dt)/$,(-D-I)/rt);y===0&&Kt>0?Kt-=2*C:y===1&&Kt<0&&(Kt+=2*C);let vr=Math.ceil(Math.abs(Kt/C*2)),mi=[],br=Kt/vr,Th=8/3*Math.sin(br/4)*Math.sin(br/4)/Math.sin(br/2),Is=yr+br;for(let Jt=0;Jt<vr;Jt++)mi[Jt]=du(yr,Is,O,T,$,rt,Pt,mr,Th,x,w),x=mi[Jt][5],w=mi[Jt][6],yr=Is,Is+=br;return mi})(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},ml=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":gu(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},Wi=(r,t,e,i)=>Math.sqrt((e-r)**2+(i-t)**2),yl=(r,t,e,i,s,n,a,o)=>l=>{let h=l**3,c=(g=>3*g**2*(1-g))(l),u=(g=>3*g*(1-g)**2)(l),d=(g=>(1-g)**3)(l);return new v(a*h+s*c+e*u+r*d,o*h+n*c+i*u+t*d)},vl=r=>r**2,bl=r=>2*r*(1-r),xl=r=>(1-r)**2,pu=(r,t,e,i,s,n,a,o)=>l=>{let h=vl(l),c=bl(l),u=xl(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)},fu=(r,t,e,i,s,n)=>a=>{let o=vl(a),l=bl(a),h=xl(a);return new v(s*o+e*l+r*h,n*o+i*l+t*h)},mu=(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)},Ha=(r,t,e)=>{let i=new v(t,e),s=0;for(let n=1;n<=100;n+=1){let a=r(n/100);s+=Wi(i.x,i.y,a.x,a.y),i=a}return s},yu=(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=Wi(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)}},Jn=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=Wi(s,n,h[1],h[2]),s=h[1],n=h[2];break;case"C":t=yl(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e=c,e.iterator=t,e.angleFinder=pu(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e.length=Ha(t,s,n),s=h[5],n=h[6];break;case"Q":t=fu(s,n,h[1],h[2],h[3],h[4]),e=c,e.iterator=t,e.angleFinder=mu(s,n,h[1],h[2],h[3],h[4]),e.length=Ha(t,s,n),s=h[3],n=h[4];break;case"Z":e=c,e.destX=a,e.destY=o,e.length=Wi(s,n,a,o),s=a,n=o}i+=e.length,l.push(e)}return l.push({length:i,x:s,y:n}),l},wl=(r,t,e=Jn(r))=>{let i=0;for(;t-e[i].length>0&&i<e.length-2;)t-=e[i].length,i++;let s=e[i],n=t/s.length,a=r[i];switch(s.command){case"M":return{x:s.x,y:s.y,angle:0};case"Z":return{...new v(s.x,s.y).lerp(new v(s.destX,s.destY),n),angle:Math.atan2(s.destY-s.y,s.destX-s.x)};case"L":return{...new v(s.x,s.y).lerp(new v(a[1],a[2]),n),angle:Math.atan2(a[2]-s.y,a[1]-s.x)};case"C":case"Q":return yu(s,t)}},vu=RegExp("[mzlhvcsqta][^mzlhvcsqta]*","gi"),za=new RegExp(cu,"g"),bu=new RegExp(Ct,"gi"),xu={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},Cl=r=>{var t;let e=[],i=(t=r.match(vu))==null?[]:t;for(let s of i){let n=s[0];if(n==="z"||n==="Z"){e.push([n]);continue}let a=xu[n.toLowerCase()],o=[];if(n==="a"||n==="A"){let l;for(za.lastIndex=0;l=za.exec(s);)o.push(...l.slice(1))}else o=s.match(bu)||[];for(let l=0;l<o.length;l+=a){let h=Array(a),c=uu[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},wu=(r,t=0)=>{let e=new v(r[0]),i=new v(r[1]),s=1,n=0,a=[],o=r.length,l=o>2,h;for(l&&(s=r[2].x<i.x?-1:r[2].x===i.x?0:1,n=r[2].y<i.y?-1:r[2].y===i.y?0:1),a.push(["M",e.x-s*t,e.y-n*t]),h=1;h<o;h++){if(!e.eq(i)){let c=e.midPointFrom(i);a.push(["Q",e.x,e.y,c.x,c.y])}e=r[h],h+1<r.length&&(i=r[h+1])}return l&&(s=e.x>r[h-2].x?1:e.x===r[h-2].x?0:-1,n=e.y>r[h-2].y?1:e.y===r[h-2].y?0:-1),a.push(["L",e.x+s*t,e.y+n*t]),a},Cu=(r,t,e)=>(e&&(t=W(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}=Z({x:i[n],y:i[n+1]},t);s[n]=a,s[n+1]=o}return s})),Su=(r,t)=>{let e=2*Math.PI/r,i=-ee;r%2==0&&(i+=e/2);let s=Array(r+1);for(let n=0;n<r;n++){let a=n*e+i,{x:o,y:l}=new v(kt(a),Ot(a)).scalarMultiply(t);s[n]=[n===0?"M":"L",o,l]}return s[r]=["Z"],s},Sl=(r,t)=>r.map(e=>e.map((i,s)=>s===0||t===void 0?i:R(i,t)).join(" ")).join(" "),_u=(r,t)=>{var e;let i=r,s=t;i.inverted&&!s.inverted&&(i=t,s=r),Ln(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 q([i],{clipPath:s,inverted:n})},Tu=(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}=ve(i.transformMatrix);i.flipX=!1,i.flipY=!1,i.set(re,s),i.set(ie,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)},tt=Kr({addTransformToObject:()=>_o,animate:()=>zn,animateColor:()=>Xo,applyTransformToObject:()=>He,calcAngleBetweenVectors:()=>Ri,calcDimensionsMatrix:()=>Jr,calcPlaneChangeMatrix:()=>Qr,calcVectorRotation:()=>In,cancelAnimFrame:()=>uo,capValue:()=>be,composeMatrix:()=>yo,copyCanvasElement:()=>Wh,cos:()=>kt,createCanvasElement:()=>Ft,createImage:()=>go,createRotateMatrix:()=>xe,createScaleMatrix:()=>Ni,createSkewXMatrix:()=>En,createSkewYMatrix:()=>An,createTranslateMatrix:()=>qe,createVector:()=>Vr,crossProduct:()=>Ye,degreesToRadians:()=>X,dotProduct:()=>Mo,ease:()=>ac,enlivenObjectEnlivables:()=>Zr,enlivenObjects:()=>$e,findScaleToCover:()=>fl,findScaleToFit:()=>pl,getBoundsOfCurve:()=>cn,getOrthonormalVector:()=>Rn,getPathSegmentsInfo:()=>Jn,getPointOnPath:()=>wl,getPointer:()=>So,getRandomInt:()=>Tu,getRegularPolygonPath:()=>Su,getSmoothPathFromPoints:()=>wu,getSvgAttributes:()=>Jh,getUnitVector:()=>qi,groupSVGElements:()=>hu,hasStyleChanged:()=>es,invertTransform:()=>ct,isBetweenVectors:()=>Js,isIdentityMatrix:()=>po,isTouchEvent:()=>Fi,isTransparent:()=>nl,joinPath:()=>Sl,loadImage:()=>Hr,magnitude:()=>Ii,makeBoundingBoxFromPoints:()=>Dt,makePathSimpler:()=>ml,matrixToSVG:()=>Ge,mergeClipPaths:()=>_u,multiplyTransformMatrices:()=>W,multiplyTransformMatrixArray:()=>zi,parsePath:()=>Cl,parsePreserveAspectRatioAttribute:()=>Wn,parseUnit:()=>st,pick:()=>we,projectStrokeOnPoints:()=>ll,qrDecompose:()=>ve,radiansToDegrees:()=>Gt,removeFromArray:()=>ce,removeTransformFromObject:()=>Vh,removeTransformMatrixForSvgParsing:()=>Ai,requestAnimFrame:()=>Gr,resetObjectTransform:()=>To,rotateVector:()=>Fn,saveObjectTransform:()=>jn,sendObjectToPlane:()=>Ln,sendPointToPlane:()=>Ht,sendVectorToPlane:()=>ko,sin:()=>Ot,sizeAfterTransform:()=>Ui,string:()=>$h,stylesFromArray:()=>cl,stylesToArray:()=>hl,toBlob:()=>On,toDataURL:()=>kn,toFixed:()=>R,transformPath:()=>Cu,transformPoint:()=>Z});function un(r,t){let e=r.style;e&&Object.entries(t).forEach(([i,s])=>e.setProperty(i,s))}var ku=class extends wo{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=Ft();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=Ne().createElement("div");return r.setAttribute("data-fabric","wrapper"),un(r,{position:"relative"}),Oa(r),r}applyCanvasStyle(r,t){let{styles:e,allowTouchScrolling:i}=t;un(r,{...e,"touch-action":i?"manipulation":Gi}),Oa(r)}setDimensions(r,t){super.setDimensions(r,t);let{el:e,ctx:i}=this.upper;xo(e,i,r,t)}setCSSDimensions(r){super.setCSSDimensions(r),Ks(this.upper.el,r),Ks(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(),jt().dispose(this.upper.el),delete this.upper,delete this.container}},_l=(r,t,e,i)=>{let{target:s,offsetX:n,offsetY:a}=t,o=e-n,l=i-a,h=!_t(s,"lockMovementX")&&s.left!==o,c=!_t(s,"lockMovementY")&&s.top!==l;return h&&s.set("left",o),c&&s.set("top",l),(h||c)&&Nn(ro,Xn(r,t,e,i)),h||c},Tl=ao,kl=r=>function(t,e,i){let{points:s,pathOffset:n}=i;return new v(s[r]).subtract(n).transform(W(i.getViewportTransform(),i.calcTransformMatrix()))},Ol=(r,t,e,i)=>{let{target:s,pointIndex:n}=t,a=s,o=Ht(new v(e,i),void 0,a.calcOwnMatrix());return a.points[n]=o.add(a.pathOffset),a.setDimensions(),a.set("dirty",!0),!0},Ml=(r,t)=>function(e,i,s,n){let a=i.target,o=new v(a.points[(r>0?r:a.points.length)-1]),l=o.subtract(a.pathOffset).transform(a.calcOwnMatrix()),h=t(e,{...i,pointIndex:r},s,n),c=o.subtract(a.pathOffset).transform(a.calcOwnMatrix()).subtract(l);return a.left-=c.x,a.top-=c.y,h},Pl=r=>Nt(Tl,Ml(r,Ol));function Ou(r,t={}){let e={};for(let i=0;i<(typeof r=="number"?r:r.points.length);i++)e[`p${i}`]=new pt({actionName:Tl,positionHandler:kl(i),actionHandler:Pl(i),...t});return e}var dn=(r,t,e)=>{let{path:i,pathOffset:s}=r,n=i[t];return new v(n[e]-s.x,n[e+1]-s.y).transform(W(r.getViewportTransform(),r.calcTransformMatrix()))};function Mu(r,t,e){let{commandIndex:i,pointIndex:s}=this;return dn(e,i,s)}function Pu(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],y=new v(f[d],f[d+1]),b=y.subtract(p).transform(l.calcOwnMatrix()),x=Ht(new v(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=y.subtract(l.pathOffset).transform(l.calcOwnMatrix()).subtract(b);return l.left-=w.x,l.top-=w.y,l.set("dirty",!0),!0})(s,e,i,n,a);return o&&Nn(this.actionName,{...Xn(r,t,e,i),commandIndex:n,pointIndex:a}),o}var El=class extends pt{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)}},Eu=class extends El{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=dn(s,l,h);if(c==="Q"){let d=dn(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)}},vi=(r,t,e,i,s,n)=>new(e?Eu:El)({commandIndex:r,pointIndex:t,actionName:"modifyPath",positionHandler:Mu,actionHandler:Pu,connectToCommandIndex:s,connectToPointIndex:n,...i,...e?i.controlPointStyle:i.pointStyle});function Au(r,t={}){let e={},i="M";return r.path.forEach((s,n)=>{let a=s[0];switch(a!=="Z"&&(e[`c_${n}_${a}`]=vi(n,s.length-2,!1,t)),a){case"C":e[`c_${n}_C_CP_1`]=vi(n,1,!0,t,n-1,(o=>o==="C"?5:o==="Q"?3:1)(i)),e[`c_${n}_C_CP_2`]=vi(n,3,!0,t,n,5);break;case"Q":e[`c_${n}_Q_CP_1`]=vi(n,1,!0,t,n,3)}i=a}),e}var $g=Kr({changeHeight:()=>Yc,changeObjectHeight:()=>$o,changeObjectWidth:()=>Yo,changeWidth:()=>Qs,createObjectDefaultControls:()=>Un,createPathControls:()=>Au,createPolyActionHandler:()=>Pl,createPolyControls:()=>Ou,createPolyPositionHandler:()=>kl,createResizeControls:()=>el,createTextboxDefaultControls:()=>rl,dragHandler:()=>_l,factoryPolyActionHandler:()=>Ml,getLocalPoint:()=>Ki,polyActionHandler:()=>Ol,renderCircleControl:()=>Go,renderSquareControl:()=>Ho,rotationStyleHandler:()=>zo,rotationWithSnapping:()=>No,scaleCursorStyleHandler:()=>Re,scaleOrSkewActionName:()=>_r,scaleSkewCursorStyleHandler:()=>pe,scalingEqually:()=>Sr,scalingX:()=>qo,scalingXOrSkewingY:()=>tn,scalingY:()=>Ko,scalingYOrSkewingX:()=>en,skewCursorStyleHandler:()=>Jo,skewHandlerX:()=>Qo,skewHandlerY:()=>tl,wrapWithFireEvent:()=>Nt,wrapWithFixedAnchor:()=>se}),Al=class Dl extends Ke{constructor(...t){super(...t),m(this,"_hoveredTargets",[]),m(this,"_currentTransform",null),m(this,"_groupSelector",null),m(this,"contextTopDirty",!1)}static getDefaults(){return{...super.getDefaults(),...Dl.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 ku(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 nl(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=St:["mr","tr","br"].includes(e)&&(i.x=H),["tl","mt","tr"].includes(e)?i.y=eo:["bl","mb","br"].includes(e)&&(i.y="top")),i}_setupCurrentTransform(t,e,i){var s;let n=e.group?Ht(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):_l,h=((O,M,D,E)=>{if(!M||!O)return"drag";let A=E.controls[M];return A.getActionName(D,A,E)})(i,a,t,e),c=t[this.centeredKey],u=this._shouldCenterTransform(e,h,c)?{x:F,y:F}:this._getOriginFromCorner(e,a),{scaleX:d,scaleY:g,skewX:p,skewY:f,left:y,top:b,angle:x,width:w,height:S,cropX:C,cropY:k}=e,T={target:e,action:h,actionHandler:l,actionPerformed:!1,corner:a,scaleX:d,scaleY:g,skewX:p,skewY:f,offsetX:n.x-y,offsetY:n.y-b,originX:u.x,originY:u.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:X(x),width:w,height:S,shiftKey:t.shiftKey,altKey:c,original:{...jn(e),originX:u.x,originY:u.y,cropX:C,cropY:k}};this._currentTransform=T,this.fire("before:transform",{e:t,transform:T})}setCursor(t){this.upperCanvasEl.style.cursor=t}_drawSelection(t){let{x:e,y:i,deltaX:s,deltaY:n}=this._groupSelector,a=new v(e,i).transform(this.viewportTransform),o=new v(e+s,i+n).transform(this.viewportTransform),l=this.selectionLineWidth/2,h=Math.min(a.x,o.x),c=Math.min(a.y,o.y),u=Math.max(a.x,o.x),d=Math.max(a.y,o.y);this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(h,c,u-h,d-c)),this.selectionLineWidth&&this.selectionBorderColor&&(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,h+=l,c+=l,u-=l,d-=l,z.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),Fi(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=kt(c)*n,d=Ot(c)*n,g=u+d,p=u-d;i=[new v(a.x-p,a.y-g),new v(o.x+g,o.y-p),new v(l.x+p,l.y+g),new v(h.x-g,h.y+p)]}return zr.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(Oi(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&&Oi(s)&&s.interactive&&n[0]){for(let a=n.length-1;a>0;a--){let o=n[a];if(!Oi(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=So(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=Ht(n,void 0,this.viewportTransform));let l=this.getRetinaScaling();l!==1&&(n.x/=l,n.y/=l);let h=a===0||o===0?new v(1,1):new v(i.width/a,i.height/o);return n.multiply(h)}_setDimensionsImpl(t,e){this._resetTransformEventData(),super._setDimensionsImpl(t,e),this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop)}_createCacheCanvas(){this.pixelFindCanvasEl=Ft(),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 ue(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,ue(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),ue(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(lo,s))}setViewportTransform(t){super.setViewportTransform(t);let e=this._activeObject;e&&e.setCoords()}destroy(){let t=this._activeObject;ue(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&&ue(e)&&this._activeObject===e){let i=we(t,["angle","flipX","flipY",H,re,ie,Ve,Ue,"top"]);return _o(t,e.calcOwnMatrix()),i}return{}}_setSVGObject(t,e,i){let s=this._realizeGroupTransformOnObject(e);super._setSVGObject(t,e,i),e.set(s)}};m(Al,"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 Du=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),ce(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}},gt={passive:!1},Le=(r,t)=>({viewportPoint:r.getViewportPoint(t),scenePoint:r.getScenePoint(t)}),Zt=(r,...t)=>r.addEventListener(...t),yt=(r,...t)=>r.removeEventListener(...t),ju={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"}},Yi=class extends Al{constructor(r,t={}){super(r,t),m(this,"_isClick",void 0),m(this,"textEditingManager",new Du(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(Zt)}_getEventPrefix(){return this.enablePointerEvents?"pointer":"mouse"}addOrRemove(r,t=!1){let e=this.upperCanvasEl,i=this._getEventPrefix();r(bo(e),"resize",this._onResize),r(e,i+"down",this._onMouseDown),r(e,`${i}move`,this._onMouseMove,gt),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,gt)}removeListeners(){this.addOrRemove(yt);let r=this._getEventPrefix(),t=wt(this.upperCanvasEl);yt(t,`${r}up`,this._onMouseUp),yt(t,"touchend",this._onTouchEnd,gt),yt(t,`${r}move`,this._onMouseMove,gt),yt(t,"touchmove",this._onMouseMove,gt),clearTimeout(this._willAddMouseDown)}_onMouseWheel(r){this._cacheTransformEventData(r),this._handleEvent(r,"wheel"),this._resetTransformEventData()}_onMouseOut(r){let t=this._hoveredTarget,e={e:r,...Le(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,...Le(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),Zt(this.upperCanvasEl,"drag",this._onDragProgress);return}Ma(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};yt(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,...Le(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&&Ma(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,...Le(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=wt(s);Zt(a,"touchend",this._onTouchEnd,gt),t&&Zt(a,"touchmove",this._onMouseMove,gt),yt(s,`${n}down`,this._onMouseDown),this._resetTransformEventData()}_onMouseDown(r){this._cacheTransformEventData(r),this.__onMouseDown(r);let t=this.upperCanvasEl,e=this._getEventPrefix();yt(t,`${e}move`,this._onMouseMove,gt);let i=wt(t);Zt(i,`${e}up`,this._onMouseUp),Zt(i,`${e}move`,this._onMouseMove,gt),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=wt(this.upperCanvasEl);yt(e,"touchend",this._onTouchEnd,gt),yt(e,"touchmove",this._onMouseMove,gt),this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(()=>{Zt(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=wt(this.upperCanvasEl);yt(i,`${e}up`,this._onMouseUp),yt(i,`${e}move`,this._onMouseMove,gt),Zt(t,`${e}move`,this._onMouseMove,gt)}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),Fi(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,...Le(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),Fi(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=Ht(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}=ju[r],d=e!==t,g=s!==i,p=t&&d,f=i&&g,y=e&&d,b=s&&g,x={...o,e:a,...Le(this,a)},w={...x,target:e,nextTarget:t,actualTarget:s,nextActualTarget:i};(y||b)&&n&&this.fire(u,w),y&&e.fire(h,w),b&&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?Ht(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=ue(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=ue(e);if(e&&this._isSelectionKeyPressed(r)&&this.selection&&t&&t.selectable&&(e!==t||i)&&(i||!t.isDescendantOf(e)&&!e.isDescendantOf(t))&&!t.onSelect({e:r})&&!e.getActiveControl()){if(i){let s=e.getObjects(),n=[];if(t===e){let a=this.getScenePoint(r),o=this.searchPossibleTargets(s,a);if(o.target?(t=o.target,n=o.subTargets):(o=this.searchPossibleTargets(this._objects,a),t=o.target,n=o.subTargets),!t||!t.selectable)return!1}t.group===e?(e.remove(t),this._hoveredTarget=t,this._hoveredTargets=n,e.size()===1&&this._setActiveObject(e.item(0),r)):(e.multiSelectAdd(t),this._hoveredTarget=e,this._hoveredTargets=n),this._fireSelectionEvents(s,r)}else{e.isEditing&&e.exitEditing();let s=new(_.getClass("ActiveSelection"))([],{canvas:this});s.multiSelectAdd(e,t),this._hoveredTarget=s,this._setActiveObject(s,r),this._fireSelectionEvents([e],r)}return!0}return!1}handleSelection(r){if(!this.selection||!this._groupSelector)return!1;let{x:t,y:e,deltaX:i,deltaY:s}=this._groupSelector,n=new v(t,e),a=n.add(new v(i,s)),o=n.min(a),l=n.max(a).subtract(o),h=this.collectObjects({left:o.x,top:o.y,width:l.x,height:l.y},{includeIntersecting:!this.selectionFullyContained}),c=n.eq(a)?h[0]?[h[0]]:[]:h.length>1?h.filter(u=>!u.onSelect({e:r})).reverse():h;if(c.length===1)this.setActiveObject(c[0],r);else if(c.length>1){let u=_.getClass("ActiveSelection");this.setActiveObject(new u(c,{canvas:this}),r)}return this._groupSelector=null,!0}toCanvasElement(r=1,t){let{upper:e}=this.elements;e.ctx=void 0;let i=super.toCanvasElement(r,t);return e.ctx=e.el.getContext("2d"),i}clear(){this.textEditingManager.clear(),super.clear()}destroy(){this.removeListeners(),this.textEditingManager.dispose(),super.destroy()}},jl={x1:0,y1:0,x2:0,y2:0},Lu={...jl,r1:0,r2:0},Be=(r,t)=>isNaN(r)&&typeof t=="number"?t:r;function Ll(r){return r&&/%$/.test(r)&&Number.isFinite(parseFloat(r))}function Fl(r,t){return be(0,Be(typeof r=="number"?r:typeof r=="string"?parseFloat(r)/(Ll(r)?100:1):NaN,t),1)}var Fu=/\s*;\s*/,Iu=/\s*:\s*/;function Ru(r,t){let e,i,s=r.getAttribute("style");if(s){let a=s.split(Fu);a[a.length-1]===""&&a.pop();for(let o=a.length;o--;){let[l,h]=a[o].split(Iu).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=Be(parseFloat(i||r.getAttribute("stop-opacity")||""),1);let n=new Q(e);return n.setAlpha(n.getAlpha()*i*t),{offset:Fl(r.getAttribute("offset"),0),color:n.toRgba()}}function Bu(r,t){let e=[],i=r.getElementsByTagName("stop"),s=Fl(t,1);for(let n=i.length;n--;)e.push(Ru(i[n],s));return e}function Il(r){return r.nodeName==="linearGradient"||r.nodeName==="LINEARGRADIENT"?"linear":"radial"}function Rl(r){return r.getAttribute("gradientUnits")==="userSpaceOnUse"?"pixels":"percentage"}function xt(r,t){return r.getAttribute(t)}function Xu(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&&Ll(h)&&(a*=.01,n==="pixels"&&(l!=="x1"&&l!=="x2"&&l!=="r2"||(a*=i),l!=="y1"&&l!=="y2"||(a*=s)))}return o[l]=a,o},{})})(Il(r)==="linear"?(function(e){return{x1:xt(e,"x1")||0,y1:xt(e,"y1")||0,x2:xt(e,"x2")||"100%",y2:xt(e,"y2")||0}})(r):(function(e){return{x1:xt(e,"fx")||xt(e,"cx")||"50%",y1:xt(e,"fy")||xt(e,"cy")||"50%",r1:0,x2:xt(e,"cx")||"50%",y2:xt(e,"cy")||"50%",r2:xt(e,"r")||"50%"}})(r),{...t,gradientUnits:Rl(r)})}var Wt=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"?Lu:jl,...i},colorStops:s,offsetX:n,offsetY:a,gradientTransform:o,id:l?`${l}_${te()}`:te()})}addColorStop(r){for(let t in r)this.colorStops.push({offset:parseFloat(t),color:r[t]});return this}toObject(r){return{...we(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():ot.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+" ":""}${Ge(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),y=c(d),b=c(g),x=c(p);e.push("<linearGradient ",h,' x1="',f,'" y1="',y,'" x2="',b,'" y2="',x,`">
|
|
42
42
|
`)}else if(this.type==="radial"){let{x1:u,y1:d,x2:g,y2:p,r1:f,r2:y}=this.coords,b=c(u),x=c(d),w=c(g),S=c(p),C=c(f),k=c(y),T=C>k;e.push("<radialGradient ",h,' cx="',T?b:w,'" cy="',T?x:S,'" r="',T?C:k,'" fx="',T?w:b,'" fy="',T?S:x,`">
|
|
43
43
|
`),T&&(n.reverse(),n.forEach(M=>{M.offset=1-M.offset}));let O=Math.min(C,k);if(O>0){let M=O/Math.max(C,k);n.forEach(D=>{D.offset+=M*(1-D.offset)})}}return n.forEach(({color:u,offset:d})=>{let g=String(u),p=Ji(g)?g:new Q(g).toRgba();e.push(`<stop offset="${100*d}%" style="stop-color:${P(p)};"/>
|
|
44
44
|
`)}),e.push(this.type==="linear"?"</linearGradient>":"</radialGradient>",`
|
|
@@ -504,5 +504,5 @@ void main() {
|
|
|
504
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 ti=Kr({BaseFilter:()=>G,BlackWhite:()=>ud,BlendColor:()=>kr,BlendImage:()=>Or,Blur:()=>Mr,Brightness:()=>Pr,Brownie:()=>nd,ColorMatrix:()=>fe,Composed:()=>Cn,Contrast:()=>Er,Convolute:()=>Ar,Gamma:()=>Dr,Grayscale:()=>jr,HueRotation:()=>Di,Invert:()=>Lr,Kodachrome:()=>od,Noise:()=>Fr,Pixelate:()=>Ir,Polaroid:()=>hd,RemoveColor:()=>Rr,Resize:()=>Br,Saturation:()=>Xr,Sepia:()=>cd,Technicolor:()=>ld,Vibrance:()=>Wr,Vintage:()=>ad});var Je=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 Qn=Ph("crypto");var Jl="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var fd=128,ae,Ze;function md(r){if(r<0)throw new RangeError("Wrong ID size");try{!ae||ae.length<r?(ae=Buffer.allocUnsafe(r*fd),Qn.webcrypto.getRandomValues(ae),Ze=0):Ze+r>ae.length&&(Qn.webcrypto.getRandomValues(ae),Ze=0)}catch(t){throw ae=void 0,t}Ze+=r}function Zl(r=21){md(r|=0);let t="";for(let e=Ze-r;e<Ze;e++)t+=Jl[ae[e]&63];return t}var mt=()=>Zl(12);var ta=["normal","darken","multiply","color-burn","lighten","screen","color-dodge","linear-dodge","overlay","soft-light","hard-light","difference","exclusion","hue","saturation","color","luminosity"],yd={normal:"source-over","linear-dodge":"lighter"};function ei(r){return yd[r]??r}function ss(r){if(!r)return"normal";for(let t of ta)if(ei(t)===r)return t;return"normal"}var Ql=[{label:"Normal",modes:["normal"]},{label:"Darken",modes:["darken","multiply","color-burn"]},{label:"Lighten",modes:["lighten","screen","color-dodge","linear-dodge"]},{label:"Contrast",modes:["overlay","soft-light","hard-light"]},{label:"Comparative",modes:["difference","exclusion"]},{label:"Composite",modes:["hue","saturation","color","luminosity"]}];function th(r){return r==="linear-dodge"?"Linear Dodge (Add)":r.split("-").map(t=>(t[0]??"").toUpperCase()+t.slice(1)).join(" ")}var Qe=class{id;type;name;visible;locked;opacity;meta;fabricObject;renderProxy;children;parentId;constructor(t,e,i,s){this.id=s??mt(),this.type=t,this.name=i??`${t}-${this.id.slice(0,4)}`,this.visible=!0,this.locked=!1,this.opacity=1,this.meta={},this.fabricObject=e,this.renderProxy=null,this.children=[],this.parentId=null,this.fabricObject._layerId=this.id}hasMeta(){return Object.keys(this.meta).length>0}toData(){let t=ss(this.fabricObject.globalCompositeOperation);return{id:this.id,type:this.type,name:this.name,visible:this.visible,locked:this.locked,opacity:this.opacity,...t!=="normal"?{blend:t}:{},...this.hasMeta()?{meta:this.meta}:{},...this.children.length>0?{children:this.children.map(e=>e.toData())}:{}}}serialize(){return{...this.toData(),fabricObject:this.fabricObject.toObject()}}},tr=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 Qe(t,e,i,s);return this.layers.push(n),this.canvas.add(e),this.events.emit("layer:added",{layer:n.toData()}),this.emitChanged(),n}remove(t){let e=this.get(t);if(!e)return!1;if(e.parentId){let s=this.get(e.parentId);return s?(s.fabricObject.remove(e.fabricObject),s.children=s.children.filter(n=>n.id!==t),e.parentId=null,this.events.emit("layer:removed",{layerId:t}),s.children.length<2&&this.dissolve(s),this.emitChanged(),this.onPropertyChanged?.(),this.canvas.requestRenderAll(),!0):!1}let i=this.layers.findIndex(s=>s.id===t);return i===-1?!1:(this.canvas.remove(e.fabricObject),e.renderProxy&&this.canvas.remove(e.renderProxy),this.layers.splice(i,1),this.events.emit("layer:removed",{layerId:t}),this.emitChanged(),this.onPropertyChanged?.(),!0)}detach(t){let e=this.layers.findIndex(s=>s.id===t);if(e===-1)return;let[i]=this.layers.splice(e,1);return this.canvas.remove(i.fabricObject),i.renderProxy&&this.canvas.remove(i.renderProxy),i}explode(t){let e=[...t.children];return this.dissolve(t),this.events.emit("layer:removed",{layerId:t.id}),this.emitChanged(),this.onPropertyChanged?.(),this.canvas.requestRenderAll(),e}dissolve(t){let e=t.fabricObject.removeAll(),i=this.layers.findIndex(n=>n.id===t.id),s=t.children;t.children=[];for(let[n,a]of e.entries()){a.setCoords();let o=s[n];o&&(o.parentId=null,this.layers.splice(i+n,0,o),this.canvas.add(a),o.renderProxy&&this.canvas.add(o.renderProxy))}this.canvas.remove(t.fabricObject),this.layers=this.layers.filter(n=>n.id!==t.id),this.syncZOrder()}adoptChildren(t,e){for(let i of e)i.parentId=t.id;t.children=e,this.emitChanged(),this.onPropertyChanged?.()}adoptGroupChildren(t,e){let i=t.fabricObject.getObjects();t.children=i.map((s,n)=>{let a=e[n],o=new Qe(a?.type??"shape",s,a?.name,a?.id);return o.parentId=t.id,a?.meta&&(o.meta=structuredClone(a.meta)),a&&!a.visible&&(o.visible=!1,s.visible=!1),a?.locked&&(o.locked=!0,s.selectable=!1,s.evented=!1),a&&a.opacity!==1&&(o.opacity=a.opacity,s.opacity=a.opacity),o}),this.emitChanged()}replaceObject(t,e){let i=this.get(t);if(!i||i.fabricObject===e)return!1;let s=i.fabricObject,n=this.canvas.getObjects().indexOf(s),a=this.canvas.getActiveObject()===s;return this.canvas.remove(s),i.fabricObject=e,e._layerId=t,e.set({visible:i.visible,opacity:i.opacity,selectable:!i.locked,evented:!i.locked,globalCompositeOperation:s.globalCompositeOperation}),this.canvas.insertAt(Math.max(0,n),e),i.renderProxy&&(e.set({opacity:0}),this.syncZOrder()),a&&this.canvas.setActiveObject(e),this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.emitChanged(),this.onPropertyChanged?.(),!0}setRenderProxy(t,e){let i=this.get(t);!i||i.renderProxy===e||(i.renderProxy&&this.canvas.remove(i.renderProxy),i.renderProxy=e,e&&(e._layerId=t,e.set({visible:i.visible,opacity:i.opacity,selectable:!i.locked,evented:!i.locked,globalCompositeOperation:i.fabricObject.globalCompositeOperation}),this.canvas.add(e),this.syncZOrder()),this.canvas.requestRenderAll(),this.emitChanged())}syncZOrder(){for(let t of this.layers)this.canvas.bringObjectToFront(t.fabricObject),t.renderProxy&&this.canvas.bringObjectToFront(t.renderProxy)}siblingsOf(t){return t.parentId?this.get(t.parentId)?.children??this.layers:this.layers}reorder(t,e){let i=this.get(t);if(!i)return!1;let s=this.siblingsOf(i),n=s.indexOf(i);if(n===-1||!Number.isFinite(e))return!1;let a=Math.max(0,Math.min(s.length-1,Math.round(e)));if(n===a)return!1;let[o]=s.splice(n,1);if(s.splice(a,0,o),o.parentId){let l=this.get(o.parentId)?.fabricObject;l&&(l.remove(o.fabricObject),l.insertAt(a,o.fabricObject))}else this.syncZOrder();return this.events.emit("layer:reordered",{layerIds:s.map(l=>l.id)}),this.emitChanged(),this.onPropertyChanged?.(),!0}select(t){if(t===null)this.canvas.discardActiveObject(),this.exitGroups();else{let i=this.get(t);i&&(i.parentId?this.enterGroup(i.parentId):this.exitGroups(),this.canvas.setActiveObject(i.renderProxy??i.fabricObject))}this.canvas.requestRenderAll(),this.events.emit("layer:selected",{layerId:t});let e=t&&this.get(t)?[t]:[];this.events.emit("selection:changed",{selected:e})}enterGroup(t){let e=this.get(t);if(!e)return;let i=e.fabricObject;i.subTargetCheck=!0,i.interactive=!0}exitGroups(){for(let t of this.layers){if(t.type!=="group")continue;let e=t.fabricObject;e.interactive&&(e.interactive=!1)}}selectMany(t){let e=t.flatMap(s=>{let n=this.get(s);return n&&!n.parentId?[n]:[]});if(e.length===0)return this.select(null);if(e.length===1)return this.select(e[0].id);this.canvas.discardActiveObject(),this.exitGroups();let i=new We(e.map(s=>s.renderProxy??s.fabricObject),{canvas:this.canvas});this.canvas.setActiveObject(i),this.canvas.requestRenderAll(),this.events.emit("selection:changed",{selected:e.map(s=>s.id)})}*walk(t=this.layers){for(let e of t)yield e,e.children.length>0&&(yield*this.walk(e.children))}get(t){for(let e of this.walk())if(e.id===t)return e}getAll(){return[...this.layers]}getTree(){return this.layers.map(t=>t.toData())}findByObject(t){let e=t._layerId;if(e)return this.get(e);for(let i of this.walk())if(i.fabricObject===t)return i}setVisibility(t,e){let i=this.get(t);i&&i.visible!==e&&(i.visible=e,i.fabricObject.visible=e,i.renderProxy&&(i.renderProxy.visible=e),this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.())}setLocked(t,e){let i=this.get(t);if(!i||i.locked===e)return;i.locked=e;let s=i.renderProxy??i.fabricObject;s.selectable=!e,s.evented=!e,this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.()}setOpacity(t,e){let i=this.get(t);if(!i||!Number.isFinite(e))return;let s=Math.max(0,Math.min(1,e));i.opacity!==s&&(i.opacity=s,i.renderProxy?i.renderProxy.opacity=s:i.fabricObject.opacity=s,this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.())}setName(t,e){let i=this.get(t);i&&i.name!==e&&(i.name=e,this.emitChanged(),this.onPropertyChanged?.())}setMeta(t,e){let i=this.get(t);if(!i)return;let s={...i.meta},n=!1;for(let[a,o]of Object.entries(e)){if(o===void 0){a in s&&(delete s[a],n=!0);continue}s[a]!==o&&(n=!0),s[a]=o}n&&(i.meta=s,this.emitChanged(),this.onPropertyChanged?.())}clear(){for(let t of this.layers)this.canvas.remove(t.fabricObject),t.renderProxy&&this.canvas.remove(t.renderProxy),t.children=[];this.layers=[],this.emitChanged()}count(){return this.layers.length}emitChanged(){this.events.emit("layers:changed",{layers:this.layers.map(t=>t.toData())})}};var eh=24;function vd(r){return typeof r.text=="string"}function bd(r,t){let e=new Map(r.parameters.map(s=>[s.key,s.label||s.key])),i=new Map;for(let s of r.svg.matchAll(/<text\b[^>]*>([\s\S]*?)<\/text>/g)){let n=/\{\{(\w+)(?:[|:]([^}]*))?\}\}/.exec(s[1]);if(!n)continue;let a=e.get(n[1]);if(!a)continue;let o=String(t[n[1]]??n[2]??"").trim();o&&i.set(o,a)}return i}function xd(r,t){let e=r.trim(),i=t.get(e);return i||(e?e.length>eh?`${e.slice(0,eh-1)}\u2026`:e:"Text")}function wd(r){let t=r.id;if(typeof t=="string"&&t)return t;let e=r.type||"shape";return e.charAt(0).toUpperCase()+e.slice(1)}function Cd(r){return new Yt(r.text,{left:r.left,top:r.top,originX:r.originX,originY:r.originY,angle:r.angle,scaleX:r.scaleX,scaleY:r.scaleY,fontSize:r.fontSize,fontFamily:r.fontFamily,fontWeight:r.fontWeight,fontStyle:r.fontStyle,textAlign:r.textAlign,charSpacing:r.charSpacing,lineHeight:r.lineHeight,fill:r.fill,stroke:r.stroke,strokeWidth:r.strokeWidth,opacity:r.opacity,width:Math.max(1,(r.width??0)+2)})}function ea(r,t,e){if(r.id==="circular-text")return{arc:100,wave:0};if(r.id==="wave-text")return{arc:0,wave:50};let i=Number(t.radius??200);if(!Number.isFinite(i)||i<=0)return{arc:0,wave:0};let s=100*e/(Math.PI*i);return{arc:Math.max(-100,Math.min(100,s)),wave:0}}function ns(r,t){let e=String(t.text??"Text"),i=r.id==="circular-text"?28:40,s=new Yt(e,{fontSize:i,fontFamily:String(t.font??"Arial"),fontWeight:"bold",fill:String(t.color??"#000000"),originX:"left",originY:"top",width:Math.max(1,e.length*i*.62)});return{type:"text",name:r.parameters.find(n=>n.key==="text")?.label||"Text",object:s,curve:ea(r,t,s.width??0)}}async function as(r,t,e){let i=bd(r,e),{objects:s}=await Ul(t),n=[];for(let a of s)if(a!==null){if(vd(a)){n.push({type:"text",name:xd(a.text,i),object:Cd(a)});continue}n.push({type:"shape",name:wd(a),object:a})}return n}var er=class r{static ASSET_KEY="__canvasEditorHistoryAsset";undoStack=[];redoStack=[];assets=new Map;assetIds=new Map;nextAssetId=1;maxSize;maxBytes;paused=!1;debounceTimer=null;debounceMs;getState;restoreState;events;transactionDepth=0;transactionDirty=!1;constructor(t){this.getState=t.getState,this.restoreState=t.restoreState,this.events=t.events,this.maxSize=t.maxSize??50,this.maxBytes=t.maxBytes??50*1024*1024,this.debounceMs=t.debounceMs??300}save(){if(!this.paused){if(this.transactionDepth>0){this.transactionDirty=!0;return}this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{this.saveImmediate()},this.debounceMs),this.emitChanged()}}saveImmediate(){if(this.paused){this.cancelPending();return}if(this.transactionDepth>0){this.transactionDirty=!0;return}this.cancelPending();let t=this.getState(),e=this.compactState(t);if(this.undoStack.at(-1)===e){this.emitChanged();return}for(this.undoStack.push(e);this.undoStack.length>this.maxSize;)this.undoStack.shift();this.redoStack=[],this.trimToBudget(),this.events.emit("history:snapshot",{bytes:t.length*2,totalBytes:this.snapshotBytes(),entries:this.undoStack.length}),this.emitChanged()}beginTransaction(){this.transactionDepth===0&&this.debounceTimer&&this.saveImmediate(),this.transactionDepth+=1}endTransaction(){this.transactionDepth!==0&&(this.transactionDepth-=1,this.transactionDepth===0&&this.transactionDirty&&(this.transactionDirty=!1,this.saveImmediate()))}async transaction(t){this.beginTransaction();try{return await t()}finally{this.endTransaction()}}async undo(){this.cancelPending();let t=this.undoStack.at(-1);if(!t)return;let e=this.compactState(this.getState()),i=e===t;if(i&&this.undoStack.length<2)return;let s=i?this.undoStack[this.undoStack.length-2]:t;this.paused=!0;try{await this.restoreState(this.expandState(s)),i&&this.undoStack.pop(),this.redoStack.push(e),this.trimToBudget()}catch(n){throw this.events.emit("error",{message:"Failed to undo the last change",error:n}),n}finally{this.paused=!1,this.emitChanged()}}async redo(){this.cancelPending();let t=this.redoStack.at(-1);if(t){this.paused=!0;try{await this.restoreState(this.expandState(t)),this.redoStack.pop(),this.undoStack.at(-1)!==t&&this.undoStack.push(t),this.trimToBudget()}catch(e){throw this.events.emit("error",{message:"Failed to redo the last change",error:e}),e}finally{this.paused=!1,this.emitChanged()}}}isRestoring(){return this.paused}pause(){this.paused=!0}resume(){this.paused=!1}canUndo(){return this.undoStack.length>1||this.debounceTimer!==null}canRedo(){return this.redoStack.length>0}clear(){this.cancelPending(),this.undoStack=[],this.redoStack=[],this.assets.clear(),this.assetIds.clear(),this.emitChanged()}getSnapshotBytes(){return this.snapshotBytes()}cancelPending(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}dispose(){this.cancelPending(),this.transactionDepth=0,this.transactionDirty=!1,this.undoStack=[],this.redoStack=[],this.assets.clear(),this.assetIds.clear()}emitChanged(){this.events.emit("history:changed",{canUndo:this.canUndo(),canRedo:this.canRedo()})}snapshotBytes(){let t=[...this.undoStack,...this.redoStack].reduce((i,s)=>i+s.length*2,0),e=[...this.assets.values()].reduce((i,s)=>i+s.length*2,0);return t+e}trimToBudget(){for(this.pruneAssets();this.undoStack.length>1&&this.snapshotBytes()>this.maxBytes;)this.undoStack.shift(),this.pruneAssets();for(;this.redoStack.length>1&&this.snapshotBytes()>this.maxBytes;)this.redoStack.shift(),this.pruneAssets()}compactState(t){let e;try{e=JSON.parse(t)}catch{return t}let i=s=>{if(typeof s=="string"&&/^data:image\/(?:png|jpeg|webp);base64,/i.test(s)){let n=this.assetIds.get(s);return n||(n=`a${this.nextAssetId++}`,this.assetIds.set(s,n),this.assets.set(n,s)),{[r.ASSET_KEY]:n}}return Array.isArray(s)?s.map(i):!s||typeof s!="object"?s:Object.fromEntries(Object.entries(s).map(([n,a])=>[n,i(a)]))};return JSON.stringify(i(e))}expandState(t){let e;try{e=JSON.parse(t)}catch{return t}let i=s=>{if(Array.isArray(s))return s.map(i);if(!s||typeof s!="object")return s;let n=s,a=n[r.ASSET_KEY];if(typeof a=="string"&&Object.keys(n).length===1){let o=this.assets.get(a);if(!o)throw new Error(`Missing history raster asset: ${a}`);return o}return Object.fromEntries(Object.entries(n).map(([o,l])=>[o,i(l)]))};return JSON.stringify(i(e))}pruneAssets(){if(this.assets.size===0)return;let t=[...this.undoStack,...this.redoStack];for(let[e,i]of this.assets){let s=`"${r.ASSET_KEY}":"${e}"`;t.some(n=>n.includes(s))||(this.assets.delete(e),this.assetIds.delete(i))}}};var Sd="#22c55e",rr=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}=_d(this.canvas,t,i,s);this.guides=[];let o=rh([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=rh([e.top,e.top+e.height/2,e.top+e.height],a,this.threshold);l!==null&&(t.set("top",(t.top??0)+l.delta),this.guides.push({y:l.line})),t.setCoords()}drawGuides(){if(!this.enabled||this.guides.length===0)return;let t=this.canvas.contextTop;if(!t)return;let e=this.canvas.getRetinaScaling(),i=this.canvas.getWidth(),s=this.canvas.getHeight();t.save(),t.setTransform(e,0,0,e,0,0),t.lineWidth=1,t.strokeStyle=Sd,t.setLineDash([4,4]),t.beginPath();for(let n of this.guides)n.x!==void 0&&(t.moveTo(n.x,0),t.lineTo(n.x,s)),n.y!==void 0&&(t.moveTo(0,n.y),t.lineTo(i,n.y));t.stroke(),t.restore()}clearGuides(){this.guides.length!==0&&(this.guides=[],this.canvas.clearContext(this.canvas.contextTop))}};function _d(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 rh(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 Y(r,t,e){return Math.min(e,Math.max(t,r))}function et(r){return Math.round(r*100)/100}var ir=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 V({left:s.left,top:s.top,width:s.width,height:s.height,originX:"left",originY:"top",fill:"rgba(34,197,94,0.12)",stroke:ih,strokeWidth:1,strokeDashArray:[4,4],strokeUniform:!0,lockRotation:!0,cornerColor:ih,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=Y(u,0,Math.max(0,h-1)),d=Y(d,0,Math.max(0,c-1)),g=Y(g,1,h-u),p=Y(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}))}},ih="#22c55e";var _e=.5,Td=1e5,sh=1.1,kd=8,Od=24;function Md(r){let t=r.width;try{r.set({width:Td}),r.initDimensions?.();let e=r.calcTextWidth?.()??t;return Number.isFinite(e)&&e>0?e:t}finally{r.set({width:t}),r.initDimensions?.()}}function ut(r){if(!r)return null;let t=r;return typeof t.text=="string"&&typeof t.calcTextWidth=="function"?t:null}function sr(r){let t=Math.max(0,r.width??0),e=r.calcTextWidth?.()??t,i=Math.max(1,Math.min(t,Number.isFinite(e)?e:t)),s=(t-i)/2,n=r.textAlign??"left";if(n.includes("center"))return{width:i,dx:0};let a=r.flipX?-1:1;return{width:i,dx:a*(n.includes("right")?s:-s)}}function Se(r,t){r.set({width:t}),r.initDimensions?.();let e=r.text.split(`
|
|
505
505
|
`).length;return(r._textLines?.length??0)>e}function Pd(r,t){if(!Se(r,t))return t;let e=t,i=t,s=!1;for(let n=0;n<kd;n+=1)if(e=i,i=i*sh+1,!Se(r,i)){s=!0;break}if(!s)return i;for(let n=0;n<Od&&i-e>_e;n+=1){let a=(e+i)/2;Se(r,a)?e=a:i=a}return r.width!==i&&Se(r,i),i}function Ed(r,t){try{r.set({width:t}),r.initDimensions?.()}catch{}}function Ad(r,t){if(Se(r,t))return!1;let e=Se(r,t-_e);return Se(r,t),e}function os(r){let t=ut(r);if(!t||t.path)return!1;let e=t.width;try{let i=sr(t),s=Md(t)+_e;if(Math.abs(s-e)<_e||e>s&&e<=s*sh+1&&Ad(t,e))return!1;let a=t.getCenterPoint(),o=Pd(t,s),l=sr(t),h=(i.dx-l.dx)*(t.scaleX??1),c=(t.angle??0)*Math.PI/180,u=new v(a.x+h*Math.cos(c),a.y+h*Math.sin(c));return t.setPositionByOrigin(u,"center","center"),t.setCoords(),t.dirty=!0,Math.abs(o-e)>=_e}catch(i){throw Ed(t,e),i}}function ls(r,t,e,i,s,n){let a=n??{x:t/2,y:e/2},l=Dd(a,t,e)*2,h=Math.max(1,l/200),c=Math.max(h,i*(1+r.horizontalSpacing/100)),u=Math.max(h,s*(1+r.verticalSpacing/100)),d=Math.ceil(l/c)+2,g=Math.ceil(l/u)+2,[p,f]=nh(r.horizontalLimit,Math.ceil(d/2)),[y,b]=nh(r.verticalLimit,Math.ceil(g/2)),x=c*(ah(r.offsetX)/100),w=u*(ah(r.offsetY)/100),S=[];for(let C=y;C<=b;C++)for(let k=p;k<=f;k++){let T=k*c+x,O=C*u+w;r.mode==="brick-horizontal"&&oh(C)===1?T+=c*(r.horizontalOffset/100):r.mode==="brick-vertical"&&oh(k)===1&&(O+=u*(r.horizontalOffset/100));let M=(k*r.rotationStepH+C*r.rotationStepV)*Math.PI/180;S.push({x:T,y:O,rotation:M})}return S}function nr(r,t,e,i,s,n,a,o,l){let h=o??{x:i/2,y:s/2},c=l&&l.width>0?l.width:n,u=l&&l.height>0?l.height:a;r.save(),r.translate(h.x,h.y),r.rotate(e.angle*Math.PI/180);for(let d of ls(e,i,s,n,a,h))r.save(),r.translate(d.x,d.y),r.rotate(d.rotation),r.drawImage(t,-c/2,-u/2,c,u),r.restore();r.restore()}function nh(r,t){let e=Number.isFinite(r)?Math.floor(r):0;if(!e||e<=0)return[-t,t];let i=-Math.floor((e-1)/2);return[i,i+e-1]}function Dd(r,t,e){let i=Math.max(Math.abs(r.x),Math.abs(t-r.x)),s=Math.max(Math.abs(r.y),Math.abs(e-r.y));return Math.sqrt(i*i+s*s)}function ah(r){return typeof r!="number"||!Number.isFinite(r)?0:Math.max(-100,Math.min(100,r))}function oh(r){return(r%2+2)%2}var jd=16e6,Ld=8,Fd=2,lh=2,oe=class r extends z{static type="TiledPattern";source;config;area;snapshotEl=null;snapshotScale=0;constructor(t,e,i){super({originX:"center",originY:"center",objectCaching:!1,lockScalingFlip:!0}),this.source=t,this.config=e,this.area=i,this.setControlsVisibility({ml:!1,mr:!1,mt:!1,mb:!1}),this.syncBox()}setConfig(t){this.config=t,this.syncBox()}setArea(t){this.area=t,this.invalidate(),this.syncBox()}invalidate(){this.snapshotEl=null,this.snapshotScale=0,this.dirty=!0}dispose(){this.snapshotEl=null,this.snapshotScale=0}syncBox(){let{tileW:t,tileH:e}=this.baseTile(),i=this.source.getCenterPoint().add(this.inkOffset()),s=this.anchorFromOrigin(i,t,e,this.config.angle);this.set({left:s.x,top:s.y,width:t,height:e,scaleX:1,scaleY:1,angle:this.config.angle}),this.setCoords(),this.dirty=!0}liveAngle(){return this.angle??0}liveScale(){return(this.config.scale??100)*Math.abs(this.scaleX??1)}liveOrigin(){let{tileW:t,tileH:e}=this.liveTile(),i=this.getCenterPoint(),s=this.shiftVector(t,e,this.liveAngle()),n=this.inkOffset();return new v(i.x-s.x-n.x,i.y-s.y-n.y)}_render(t){let{width:e,height:i}=this.area;if(e<=0||i<=0)return;let{tileW:s,tileH:n}=this.liveTile(),a=Rd(t),o=this.ensureSnapshot(a*(s/Math.max(1,this.baseW())));if(!o)return;let l=this.getCenterPoint(),h=this.liveAngle();t.save(),t.scale(1/(this.scaleX||1),1/(this.scaleY||1)),t.rotate(-h*Math.PI/180),t.translate(-l.x,-l.y);let c={x:l.x,y:l.y},u={...this.config,angle:h,offsetX:0,offsetY:0};nr(t,o,u,e,i,s,n,c,this.drawSize(s,n,lh/a)),t.restore()}_toSVG(){let{width:t,height:e}=this.area;if(t<=0||e<=0)return[];let i=document.createElement("canvas");i.width=Math.max(1,Math.round(t)),i.height=Math.max(1,Math.round(e));let s=i.getContext("2d");if(!s)return[];let{tileW:n,tileH:a}=this.liveTile(),o=this.ensureSnapshot(n/Math.max(1,this.baseW()));if(!o)return[];let l=this.getCenterPoint(),h=this.liveAngle();return nr(s,o,{...this.config,angle:h,offsetX:0,offsetY:0},t,e,n,a,{x:l.x,y:l.y},this.drawSize(n,a,lh)),[`<g transform="rotate(${-h}) translate(${-l.x} ${-l.y})">`,`<image x="0" y="0" width="${t}" height="${e}" `,`xlink:href="${i.toDataURL("image/png")}"></image></g>
|
|
506
506
|
`]}toObject(){let t=super.toObject();return delete t.source,t}clone(){let t=new r(this.source,this.config,this.area);return t.set({left:this.left,top:this.top,angle:this.angle,scaleX:this.scaleX,scaleY:this.scaleY,width:this.width,height:this.height,visible:this.visible,opacity:this.opacity}),Promise.resolve(t)}sourceBox(){let t=ut(this.source),e=Id(this.source),i=this.source.getBoundingRect();if(e&&!t)return{width:i.width,height:i.height};let s={};e||(s.strokeWidth=0),t&&(s.width=sr(t).width);let n=this.source._getTransformedDimensions(s),a=(this.source.angle??0)*Math.PI/180,o=Math.abs(Math.cos(a)),l=Math.abs(Math.sin(a));return{width:n.x*o+n.y*l,height:n.x*l+n.y*o}}inkOffset(){let t=ut(this.source);if(!t)return new v(0,0);let{dx:e}=sr(t);if(!e)return new v(0,0);let i=e*(this.source.scaleX??1),s=(this.source.angle??0)*Math.PI/180;return new v(i*Math.cos(s),i*Math.sin(s))}baseW(){return Math.max(1,this.sourceBox().width)}baseH(){return Math.max(1,this.sourceBox().height)}drawSize(t,e,i=0){let s=this.snapshotEl;return!s||this.snapshotScale<=0?{width:t+i,height:e+i}:{width:s.width/this.snapshotScale*(t/this.baseW())+i,height:s.height/this.snapshotScale*(e/this.baseH())+i}}baseTile(){let t=this.sourceBox(),e=Math.max(1,this.config.scale??100)/100,i=this.tileFloor();return{tileW:Math.max(i,t.width*e),tileH:Math.max(i,t.height*e)}}liveTile(){let t=this.baseTile(),e=this.tileFloor();return{tileW:Math.max(e,t.tileW*Math.abs(this.scaleX??1)),tileH:Math.max(e,t.tileH*Math.abs(this.scaleY??1))}}tileFloor(){let{width:t,height:e}=this.area;return Math.max(2,Math.sqrt(t*t+e*e)/200)}shiftVector(t,e,i){let s=t*(hh(this.config.offsetX)/100),n=e*(hh(this.config.offsetY)/100),a=i*Math.PI/180,o=Math.cos(a),l=Math.sin(a);return new v(s*o-n*l,s*l+n*o)}anchorFromOrigin(t,e,i,s){let n=this.shiftVector(e,i,s);return new v(t.x+n.x,t.y+n.y)}ensureSnapshot(t){let e=this.clampScale(t);if(!(this.source.dirty||!this.snapshotEl||this.snapshotScale<e||this.snapshotScale>e*Fd))return this.snapshotEl;let s=this.source,n=s.opacity;s.opacity=1;let a=ut(s),o=a?.width,l=a?sr(a).width+_e:0,h=a!==null&&o!==void 0&&l<o;try{h&&a&&(a.set({width:l}),a.initDimensions?.());let c=s.toCanvasElement({multiplier:e,enableRetinaScaling:!1});if(!c.width||!c.height)return null;this.snapshotEl=c,this.snapshotScale=e}catch{return this.snapshotEl}finally{s.opacity=n,h&&a&&o!==void 0&&(a.set({width:o}),a.initDimensions?.()),s.dirty=!1}return this.snapshotEl}clampScale(t){let e=Math.min(Ld,Math.max(.05,t)),i=this.source.getBoundingRect(),s=Math.max(1,i.width*i.height),n=Math.sqrt(jd/s);return Math.max(.05,Math.min(e,n))}};function Id(r){if(!r.strokeWidth||r.strokeWidth<=0)return!1;let{stroke:t}=r;return typeof t=="string"?t!==""&&t!=="transparent":t!=null}function hh(r){return typeof r!="number"||!Number.isFinite(r)?0:Math.max(-100,Math.min(100,r))}function Rd(r){if(typeof r.getTransform!="function")return 1;try{let t=r.getTransform();return Math.max(Math.hypot(t.a,t.b),Math.hypot(t.c,t.d),.05)}catch{return 1}}var Bd=10,Xd=300,Te=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s;this.canvas.on("object:modified",this.onObjectModified),this.canvas.on("text:changed",this.onSourceModified),this.events.on("layer:removed",this.onLayerRemoved)}canvas;layers;history;events;proxies=new Map;onObjectModified=t=>{let e=t.target;e instanceof oe?this.commitGesture(e):this.invalidateFor(e)};onSourceModified=t=>{this.invalidateFor(t.target)};onLayerRemoved=({layerId:t})=>{let e=this.proxies.get(t);e&&(e.dispose(),this.proxies.delete(t))};isPattern(t){return!!this.layers.get(t)?.meta.pattern}getConfig(t){return this.layers.get(t)?.meta.pattern?.config??null}async apply(t,e){let i=this.layers.get(t);if(i)try{this.layers.setMeta(t,{pattern:{config:e}});let s=this.proxies.get(t);s?(s.setConfig(e),this.canvas.requestRenderAll()):this.attach(i,e),this.history.save()}catch(s){throw this.events.emit("error",{message:"Failed to apply pattern",error:s}),s}}async disable(t){let e=this.layers.get(t);if(e?.meta.pattern)try{this.detach(t),ri(e.fabricObject,e.meta.pattern.originalLocks),e.fabricObject.set({opacity:e.opacity,selectable:!e.locked,evented:!e.locked}),this.layers.setMeta(t,{pattern:void 0}),this.canvas.requestRenderAll(),this.history.save()}catch(i){throw this.events.emit("error",{message:"Failed to clear pattern",error:i}),i}}async rehydrateAll(){this.clearProxies();for(let t of this.layers.getAll()){let e=t.meta.pattern;if(e)try{$d(e)&&(await Gd(t,e),this.layers.setMeta(t.id,{pattern:{config:e.config}})),this.attach(t,e.config)}catch(i){this.events.emit("error",{message:"Failed to restore pattern layer",error:i})}}this.canvas.requestRenderAll()}syncArea(){let t=this.area();for(let e of this.proxies.values())e.setArea(t);this.proxies.size>0&&this.canvas.requestRenderAll()}invalidate(t){let e=this.proxies.get(t);e&&(e.invalidate(),e.syncBox(),this.canvas.requestRenderAll())}attachTo(t){let e=t.meta.pattern;!e||this.proxies.has(t.id)||this.attach(t,e.config)}dispose(){this.canvas.off("object:modified",this.onObjectModified),this.canvas.off("text:changed",this.onSourceModified),this.events.off("layer:removed",this.onLayerRemoved),this.clearProxies()}clearProxies(){for(let t of this.proxies.values())t.dispose();this.proxies.clear()}attach(t,e){let i=new oe(t.fabricObject,e,this.area()),s=this.canvas.getActiveObject()===t.fabricObject;t.fabricObject.set({opacity:0,selectable:!1,evented:!1}),this.proxies.set(t.id,i),this.layers.setRenderProxy(t.id,i),s&&this.canvas.setActiveObject(i),this.canvas.requestRenderAll()}commitGesture(t){let e=this.layers.findByObject(t),i=e?.meta.pattern;if(!e||!i)return;let s=t.liveOrigin(),n=Wd(t.liveScale(),Bd,Xd),a=Yd(t.liveAngle());e.fabricObject.setPositionByOrigin(s,"center","center"),e.fabricObject.setCoords();let o={...i.config,scale:n,angle:a};this.layers.setMeta(e.id,{pattern:{...i,config:o}}),t.setConfig(o),this.canvas.requestRenderAll(),this.history.save()}area(){return{width:this.canvas.getWidth(),height:this.canvas.getHeight()}}detach(t){let e=this.proxies.get(t);if(!e){this.layers.setRenderProxy(t,null);return}this.layers.setRenderProxy(t,null),e.dispose(),this.proxies.delete(t)}invalidateFor(t){if(!t)return;let e=this.layers.findByObject(t);e&&this.invalidate(e.id)}};function Wd(r,t,e){return Number.isFinite(r)?Math.max(t,Math.min(e,r)):t}function Yd(r){if(!Number.isFinite(r))return 0;let t=(r%360+360)%360;return Math.round(t>180?t-360:t)}function $d(r){return typeof r.originalSrc=="string"&&r.originalSrc.length>0}async function Gd(r,t){let e=r.fabricObject;typeof e.setSrc!="function"||!t.original||(await e.setSrc(t.originalSrc),e.set({left:t.original.left,top:t.original.top,scaleX:t.original.scaleX,scaleY:t.original.scaleY,width:t.original.width,height:t.original.height,cropX:t.original.cropX,cropY:t.original.cropY,angle:t.original.angle}),e.clipPath=t.originalClip?(await tt.enlivenObjects([t.originalClip]))[0]:void 0,ri(e,t.originalLocks),e.setCoords())}function ri(r,t){r.set(t??{lockMovementX:!1,lockMovementY:!1,lockScalingX:!1,lockScalingY:!1,lockRotation:!1,hasControls:!0})}var hs={shape:"arc",arc:0,wave:0,waveLength:4.1,offset:0,centerOffset:0},ch=.5,Hd=99.5,zd=.12,Nd=.9,Vd=1,Ud=12,qd=6,Kd=4e3;function ii(r){return Math.round(r*100)/100}function ke(r){let t=Y(r.arc??0,-100,100),e=Y(r.wave??0,0,100),i=Math.abs(t)<ch&&e>0?"wave":"arc";return{shape:r.shape??i,arc:t,wave:e,waveLength:Y(r.waveLength??hs.waveLength,Vd,Ud),offset:Y(r.offset??0,-100,100),centerOffset:Y(r.centerOffset??0,-100,100)}}function cs(r){return r.shape==="arc"?Math.abs(r.arc)>=ch:r.wave>0}function Jd(r,t){let e=Math.min(100,Math.abs(t.arc)),i=t.arc<0?-1:1,s=e>=Hd?Math.PI*2:Math.max(zd,e/100*Math.PI),n=r/s,a=n*Math.pow(2,t.centerOffset/100),o=a>=n?s:Math.min(Math.PI*2,r/Math.max(a,.001));return{radius:a,sweep:o,direction:i,baseRadius:n}}function Zd(r,t,e,i){let{sweep:s,direction:n,baseRadius:a}=t,o=s>=Math.PI*2-1e-6,l=r/2,h=y=>[l+e*Math.sin(y),n*(a-e*Math.cos(y))],c=n>0?1:0,u=([y,b])=>`${ii(y)} ${ii(b)}`,d=ii(e);if(o){let y=h(i-Math.PI),b=h(i);return{data:[`M ${u(y)}`,`A ${d} ${d} 0 0 ${c} ${u(b)}`,`A ${d} ${d} 0 0 ${c} ${u(y)}`].join(" "),length:e*Math.PI*2}}let g=h(i-s/2),p=h(i+s/2),f=s>Math.PI?1:0;return{data:`M ${u(g)} A ${d} ${d} 0 ${f} ${c} ${u(p)}`,length:e*s}}function Qd(r,t,e,i){let s=e.wave/100*t*Nd,n=Math.max(1,t*e.waveLength),a=e.offset/100*Math.PI*2,o=Math.min(qd,n/8),l=Math.min(Kd,Math.max(2,Math.ceil(r/o))),h=[],c=0,u=null;for(let d=0;d<=l;d++){let g=r*d/l,p=i+s*Math.sin(g/n*Math.PI*2+a);u&&(c+=Math.hypot(g-u[0],p-u[1])),u=[g,p],h.push(`${d===0?"M":"L"} ${ii(g)} ${ii(p)}`)}return{data:h.join(" "),length:c}}function ar(r,t,e,i=1,s=0){let n=ke(r);if(!cs(n))return null;let a=Math.max(1,Math.floor(i)),o=[];if(n.shape==="wave"){for(let c=0;c<a;c++)o.push(Qd(t,e,n,(c-(a-1)/2)*s));return o}let l=Jd(t,n),h=n.offset/100*l.sweep;for(let c=0;c<a;c++){let u=Math.max(1,l.radius+(c-(a-1)/2)*s);o.push(Zd(t,l,u,h))}return o}function ra(r,t,e){return ar(r,t,e)?.[0]??null}var tg=1e5,eg=.06,rg=1.16,ia=new WeakMap,us=new WeakMap,ds=new WeakMap,ig=.7;function sg(r){let t=r._textLines?.length??0;for(let n=0;n<t;n+=1)r.getLineWidth?.(n);let e=r.__charBounds;if(!e?.length)return null;let i=0,s=0;for(let n of e)for(let a of n??[]){let{renderLeft:o,renderTop:l}=a;if(typeof o!="number"||typeof l!="number")continue;let h=(a.kernedWidth??a.width??0)/2,c=(a.height??r.fontSize)*ig,u=a.angle??0,d=Math.abs(Math.cos(u)),g=Math.abs(Math.sin(u));i=Math.max(i,Math.abs(o)+h*d+c*g),s=Math.max(s,Math.abs(l)+h*g+c*d)}return i===0&&s===0?null:{width:i*2,height:s*2}}function ng(r){let t=sg(r);t&&(t.width>(r.width??0)&&(r.width=t.width),t.height>(r.height??0)&&(r.height=t.height))}function uh(r){return!!r&&typeof r.text=="string"}function ag(r){let t=r.width;try{return r.set({width:tg}),r.initDimensions?.(),Math.max(1,r.calcTextWidth?.()??r.width??1)}finally{t!==void 0&&r.set({width:t}),r.initDimensions?.()}}function og(r){return Math.max(1,r._textLines?.length??1)}function lg(r){let t=r.getHeightOfLine?.(0);return typeof t=="number"&&Number.isFinite(t)&&t>0?t:r.fontSize*(r.lineHeight??1)*rg}function dh(r){return new Xt(r.data,{visible:!1,objectCaching:!1})}var or=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s;this.canvas.on("text:changed",this.onTextChanged)}canvas;layers;history;events;onTextChanged=t=>{let e=t.target?this.layers.findByObject(t.target):void 0;e?.meta.curve&&this.refresh(e.id,!1)};dispose(){this.canvas.off("text:changed",this.onTextChanged)}get(t){let e=this.layers.get(t);return!e||!uh(e.fabricObject)?null:ke(e.meta.curve??{})}isCurved(t){let e=this.get(t);return!!e&&cs(e)}apply(t,e,i=!0){let s=this.layers.get(t);if(!s||!uh(s.fabricObject))return!1;let n=ke(e),a=s.fabricObject,o=ag(a);if(!cs(n))this.detach(a,s.meta.curveWidth),delete s.meta.curveWidth,s.meta.curve=n;else{s.meta.curveWidth===void 0&&(s.meta.curveWidth=a.width??0),a.set({width:Math.max(s.meta.curveWidth,o+2)}),a.initDimensions?.();let l=ar(n,o*(1+eg),a.fontSize,og(a),lg(a));l&&this.attach(a,l),s.meta.curve=n}return a.initDimensions?.(),a.setCoords(),a.dirty=!0,this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),i&&this.history.save(),!0}clear(t,e=!0){let s=this.layers.get(t)?.meta.curve?.shape;return this.apply(t,{shape:s},e)}refresh(t,e=!1){let i=this.layers.get(t)?.meta.curve;return i?this.apply(t,i,e):!1}refreshAll(){let t=e=>{for(let i of e)i.meta.curve&&this.refresh(i.id),i.children.length>0&&t(i.children)};t(this.layers.getAll())}attach(t,e){ds.has(t)||ds.set(t,t.objectCaching),t.set({objectCaching:!1});let i=e.map(dh),s=i.length===1?i[0]:dh({data:e.map(n=>n.data).join(" "),length:0});t.set({path:s,pathAlign:"center",pathSide:"left",pathStartOffset:0}),this.patchLineMeasure(t,i,s),this.patchDimensions(t)}patchDimensions(t){if(us.has(t))return;let e=t.initDimensions;if(typeof e!="function")return;let i=function(){e.call(this),ng(this)},s=Object.prototype.hasOwnProperty.call(t,"initDimensions");t.initDimensions=i,us.set(t,{original:e,installed:i,ownedOriginal:s})}unpatchDimensions(t){let e=us.get(t);e&&(t.initDimensions===e.installed&&(e.ownedOriginal?t.initDimensions=e.original:delete t.initDimensions),us.delete(t))}patchLineMeasure(t,e,i){this.unpatchLineMeasure(t);let s=t._measureLine;if(typeof s!="function")return;for(let o of e)o.pathOffset=i.pathOffset;let n=function(o){let l=e[o];if(!l)return s.call(this,o);let h=this.path,c=this.textAlign;this.path=l,this.textAlign="center",this.setPathInfo?.();try{return s.call(this,o)}finally{this.path=h,this.textAlign=c}},a=Object.prototype.hasOwnProperty.call(t,"_measureLine");t._measureLine=n,ia.set(t,{original:s,installed:n,ownedOriginal:a})}unpatchLineMeasure(t){let e=ia.get(t);e&&(t._measureLine===e.installed&&(e.ownedOriginal?t._measureLine=e.original:delete t._measureLine),ia.delete(t))}detach(t,e){this.unpatchLineMeasure(t),this.unpatchDimensions(t);let i=ds.get(t);i!==void 0&&(t.set({objectCaching:i}),ds.delete(t)),t.set({path:null,pathStartOffset:0}),e!==void 0&&e>0&&t.set({width:e})}};var gh=/[ \t\r]/;function gs(r){let t=[],e=0,i=!0;for(;e<r.length;){let s="";for(;e<r.length&&gh.test(r[e]);)s+=r[e],e+=1;let n="";for(;e<r.length&&!gh.test(r[e]);)n+=r[e],e+=1;t.push((i?s:s.slice(1))+n),i=!1}return t.length>0?t:[""]}function bt(r){return r.calcTransformMatrix()}function Oe(r,t){let e=tt.qrDecompose(t);r.set({flipX:!1,flipY:!1,originX:"center",originY:"center",left:e.translateX,top:e.translateY,scaleX:e.scaleX,scaleY:e.scaleY,angle:e.angle,skewX:e.skewX,skewY:0}),r.setCoords()}function si(r,t){Oe(r,tt.multiplyTransformMatrices(bt(t),bt(r)))}function Ut(r,t){Oe(r,tt.multiplyTransformMatrices(tt.invertTransform(bt(t)),bt(r)))}function sa(r,t){return tt.multiplyTransformMatrices(tt.invertTransform(bt(t)),bt(r))}function na(r,t,e){Oe(r,tt.multiplyTransformMatrices(bt(t),e))}function aa(r){return!r||r.length!==6||r.some(t=>!Number.isFinite(t))?null:[r[0],r[1],r[2],r[3],r[4],r[5]]}function Me(r,t,e=1){let i=Math.max(1,t.width)*e,s=Math.max(1,t.height)*e;r.set({originX:"center",originY:"center",angle:0,skewX:0,skewY:0,left:t.left+t.width/2,top:t.top+t.height/2,scaleX:i/Math.max(1,r.width??1),scaleY:s/Math.max(1,r.height??1)}),r.setCoords()}function ni(r){let t=r.removeAll();for(let e of t)e.setCoords();return t}function cg(r){Object.prototype.hasOwnProperty.call(r,"wordSplit")||Object.defineProperty(r,"wordSplit",{value:gs,configurable:!0,writable:!0})}function ug(r){Object.prototype.hasOwnProperty.call(r,"wordSplit")&&delete r.wordSplit}function ai(r){return{wrap:r?.wrap??"none",overflow:r?.overflow??"visible"}}function dg(r,t){return t({width:Math.max(1,r.width??1),height:Math.max(1,r.height??1),originX:"center",originY:"center",left:0,top:0,objectCaching:!1})}function gg(r){return!!r.maskPreset||(r.maskStack?.length??0)>0}function oa(r,t,e=i=>new V(i)){let i=ut(r);if(!i)return;let s=ai(t);i.path||(i.set({splitByGrapheme:s.wrap==="break-all"}),s.wrap==="pre-wrap"?cg(i):ug(i),i.initDimensions?.());let n=s.overflow==="hidden"?dg(i,e):void 0;if(t&&gg(t)){let a=i.clipPath;a&&(n&&Ut(n,a),a.clipPath=n)}else i.clipPath=n}var lr=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s;this.canvas.on("text:changed",this.onTextChanged),this.events.on("masks:changed",this.onMasksChanged)}canvas;layers;history;events;onTextChanged=t=>{let e=t.target?this.layers.findByObject(t.target):void 0;e&&this.refresh(e.id,!1)};onMasksChanged=({target:t})=>{this.refresh(t)};dispose(){this.canvas.off("text:changed",this.onTextChanged),this.events.off("masks:changed",this.onMasksChanged)}get(t){let e=this.layers.get(t);return!e||!ut(e.fabricObject)?null:ai(e.meta)}apply(t,e,i=!0){let s=this.layers.get(t),n=s?ut(s.fabricObject):null;if(!s||!n)return!1;if(e==="none"){let a=!!n.path;s.meta.wrapWidth===void 0&&!a&&(s.meta.wrapWidth=n.width??0)}return s.meta.wrap=e,this.derive(t,i)}setOverflow(t,e,i=!0){let s=this.layers.get(t);return!s||!ut(s.fabricObject)?!1:(s.meta.overflow=e,this.derive(t,i))}clear(t,e=!0){let i=this.layers.get(t);return!i||!ut(i.fabricObject)?!1:(delete i.meta.overflow,this.apply(t,"none",e))}refresh(t,e=!1){let i=this.layers.get(t);return!i||!ut(i.fabricObject)?!1:this.derive(t,e)}refreshAll(){let t=e=>{for(let i of e)ut(i.fabricObject)&&this.refresh(i.id),i.children.length>0&&t(i.children)};t(this.layers.getAll())}derive(t,e){let i=this.layers.get(t),s=i?ut(i.fabricObject):null;if(!i||!s)return!1;let n=ai(i.meta);return s.path||(n.wrap==="none"?os(s):i.meta.wrapWidth!==void 0&&(s.set({width:i.meta.wrapWidth}),delete i.meta.wrapWidth)),oa(s,i.meta),s.dirty=!0,s.setCoords(),this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),e&&this.history.save(),!0}};var ps=["circle","square","triangle","star","heart","octagram","arch","zigzag"];function hr(r){return typeof r=="string"&&ps.includes(r)}function la(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"} ${ph(h)} ${ph(c)}`)}return`${n.join(" ")} Z`}function ph(r){return Math.round(r*100)/100}var pg={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:la(5,46,22),heart:"M 50 96 C -8 55 12 4 50 28 C 88 4 108 55 50 96 Z",octagram:la(8,46,27),arch:"M 4 96 V 50 A 46 46 0 0 1 96 50 V 96 Z",zigzag:la(16,46,39)};function oi(r){return pg[r]}var cr=100;var fs=["vignette","halftone","spray","grunge","torn","band"];function li(r){return typeof r=="string"&&fs.includes(r)}var It=320,ca=new Map;function ha(r){let t=r;return()=>(t=t*16807%2147483647,(t-1)/2147483646)}function fh(r,t,e,i){let s=It,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 fg(r,t){let e=It,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=ha(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=ha(7);fh(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":{fh(t,ha(99),10,e*.08);return}}}function hi(r){let t=ca.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=It,e.height=It;let i=e.getContext("2d");if(!i)throw new Error("Texture masks require a 2D canvas context");return fg(r,i),ca.set(r,e),e}function ua(){ca.clear()}function ms(r){return hr(r)||li(r)}var Pe=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(!ms(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("masks:changed",{target:t}),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 hr(t)?new Xt(oi(t),{...n,scaleX:i/cr,scaleY:s/cr}):new U(hi(t),{...n,scaleX:i/It,scaleY:s/It})}};var mg=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\([\d.%+\-\s,/]+\)|[a-z]+)$/i;function Mt(r,t=!1){if(typeof r!="string")return!1;let e=r.trim();return e?mg.test(e):t}var le={enabled:!1,color:"#000000",blur:12,offsetX:6,offsetY:6};function ci(r){let t=r.shadow;return!t||typeof t=="string"?{...le}:{enabled:!0,color:typeof t.color=="string"?t.color:le.color,blur:t.blur??le.blur,offsetX:t.offsetX??le.offsetX,offsetY:t.offsetY??le.offsetY}}function ys(r,t){let e={...ci(r),...t};if(!e.enabled){r.set({shadow:null});return}let i=Mt(e.color)?e.color:le.color;r.set({shadow:new me({color:i,blur:Math.max(0,e.blur),offsetX:e.offsetX,offsetY:e.offsetY})})}var vs={borderColor:"#c9a96e",cornerColor:"#c9a96e",cornerStrokeColor:"#101010",cornerSize:11,cornerStyle:"circle",borderWidth:1,borderDashArray:null,padding:0,marqueeFill:"rgba(201, 169, 110, 0.12)"};function Ee(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 bs(r,t,e){for(let s of r.getObjects())Ee(s,t,e);let i=r.getActiveObject();i&&Ee(i,t,e),r.selectionColor=t.marqueeFill,r.selectionBorderColor=t.borderColor,r.selectionLineWidth=t.borderWidth*(e>0?1/e:1),r.requestRenderAll()}var yg=["ml","mr","mt","mb"];function Ae(r,t){for(let e of yg)r.setControlVisible(e,!t)}function xs(r){r.set({scaleX:1,scaleY:1,angle:0,skewX:0,skewY:0,flipX:!1,flipY:!1}),r.setCoords()}var ur=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 vg="2.0.0";function ws(r){return{version:vg,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 Cs(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&&!Mt(t.background,!0))throw new Error("Invalid editor background color");let i=await Promise.all(t.layers.map(async n=>{let a=(await tt.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 tt.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)bg(r,n.serialized,n.fabricObject);r.wrap.refreshAll(),r.canvas.requestRenderAll()}function bg(r,t,e){let i=r.layers.add(t.type,e,t.name,t.id);t.meta&&(i.meta=t.meta,i.meta.lockAspect&&Ae(e,!0)),t.visible||r.layers.setVisibility(i.id,!1),t.locked&&r.layers.setLocked(i.id,!0),t.opacity!==1&&r.layers.setOpacity(i.id,t.opacity);let s=t.children??t.meta?.groupChildren;return i.type==="group"&&Array.isArray(s)&&(r.layers.adoptGroupChildren(i,s),i.meta.groupChildren&&delete i.meta.groupChildren),i}var mh={red:0,green:1,blue:2,alpha:3};function yh(r,t,e){let i=r??t;if(!Number.isFinite(i))throw new Error(`${e} must be finite`);return i}function xg(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 Ss(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=yh(s.scaleX,10,"Displacement scaleX"),o=yh(s.scaleY,10,"Displacement scaleY"),l=mh[s.channelX??"red"],h=mh[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 y=0;y<4;y+=1)c[g+y]=Math.round(xg(r,e,i,p,f,y))}return c}function _s(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 da(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 ga(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 ui(r,t={}){let{multiplier:e=1,format:i="png",quality:s=1}=t,n=r.toCanvasElement(e);return ga(n,i,s)}async function di(r,t,e={}){let i=r.lowerCanvasEl.ownerDocument.createElement("canvas"),s=new Ke(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 ui(s,e)}finally{s.dispose()}}async function Ts(r,t,e={}){let{multiplier:i=1,format:s="png",quality:n=1}=e,a=r.getWidth(),o=r.getHeight(),l=_s(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 Ke(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 ga(g,s,n)}finally{c.dispose()}}async function ks(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=da(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 y=a.ownerDocument.createElement("canvas");u.push(y),y.width=a.width,y.height=a.height;let b=y.getContext("2d");if(!b)throw new Error("2D displaced-design context is unavailable");let x,w;try{x=g.getImageData(0,0,a.width,a.height).data,w=f.getImageData(0,0,a.width,a.height).data}catch(k){throw new Error("Failed to apply mockup displacement map; verify image CORS access",{cause:k})}let S=Ss(x,w,a.width,a.height,{...t.displacement,scaleX:(t.displacement.scaleX??10)*i,scaleY:(t.displacement.scaleY??10)*i}),C=b.createImageData(a.width,a.height);C.data.set(S),b.putImageData(C,0,0),d=y}if(l.save(),t.printArea&&t.clipToPrintArea!==!1){let g=_s(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 ga(o,s,n)}finally{for(let d of u)d.width=0,d.height=0}}function Os(r){return r.toSVG()}function Ms(r,t="png",e=1){return r.toDataURL({format:t,multiplier:e})}function Ps(r){return String(r).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Es(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 wg(r){return/^(?:url|local)\(/.test(r.trim())?r:`url(${JSON.stringify(r)})`}function Cg(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 Sg(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 As(r){return JSON.stringify(r).replace(/[<>&]/g,t=>`\\${t.charCodeAt(0).toString(16)} `)}var _g=/^(?:normal|bold|bolder|lighter|[1-9]\d{0,2}(?:\s+[1-9]\d{0,2})?)$/i,Tg=/^(?:normal|italic|oblique(?:\s+-?\d+(?:\.\d+)?deg)?)$/i,kg=/^(?:auto|block|swap|fallback|optional)$/i;function pa(r,t,e){let i=r?.trim();return i&&t.test(i)?i:e}function Og(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 Mg(r){let t=r.trim().match(/^local\(\s*(['"]?)([^)"'{};]*)\1\s*\)$/i);return t&&t[2].trim()||null}var dr=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,wg(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=Og(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=Sg(await l.arrayBuffer()),c=l.headers.get("content-type")||Cg(i);s=`url(${As(`data:${c};base64,${h}`)})`}else if(i)s=`url(${As(i)})`;else{let l=Mg(e.source);if(!l)throw new Error(`Unsupported font source for embedding: ${e.family}`);s=`local(${As(l)})`}let n=pa(e.weight,_g,"normal"),a=pa(e.style,Tg,"normal"),o=pa(e.display,kg,"swap");return`@font-face{font-family:${As(e.family)};src:${s};font-weight:${n};font-style:${a};font-display:${o}}`}))).join(`
|
|
507
|
-
`)}};function Pg(r,t){let e=r.toLowerCase(),i=t.toLowerCase();if(i.startsWith("*.")){let s=i.slice(1);return e.endsWith(s)&&e.length>s.length}return e===i}function Eg(r){return r==="localhost"||r==="127.0.0.1"||r==="::1"||r.endsWith(".localhost")}var gr=class{constructor(t={}){this.config=t;let e=t.hostname??globalThis.location?.hostname??"localhost";(t.environment??"development")!=="production"||Eg(e)?(this.status={state:"exempt",payload:null},this.readyPromise=Promise.resolve(this.status)):t.key?(this.status={state:"checking",payload:null},this.readyPromise=this.validate(t.key,e)):(this.status={state:"community",payload:null},this.readyPromise=Promise.resolve(this.status))}config;status;readyPromise;getStatus(){return this.status}ready(){return this.readyPromise}hasFeature(t){return this.status.state==="valid"&&(this.status.payload.features??[]).includes(t)}track(t){this.config.onUsage?.({name:t,at:new Date().toISOString(),licenseId:this.status.state==="valid"?this.status.payload.id:void 0})}async validate(t,e){let i=await this.config.verifyOffline?.(t)??null;return i?i.expiresAt&&Date.parse(i.expiresAt)<Date.now()?this.status={state:"expired",payload:i}:i.domains.some(s=>Pg(e,s))?this.status={state:"valid",payload:i}:this.status={state:"domain-mismatch",payload:i}:this.status={state:"invalid",payload:null}}};var pr=class{constructor(t){this.editor=t;let e={id:mt(),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:mt(),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:mt(),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 Rt=class extends Error{constructor(e,i,s){super(i);this.code=e;this.cause=s;this.name="MaskRefinementError"}code;cause},fr=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 U(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:Y(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 Rt("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 Rt("cancelled","Mask refinement cancelled");if(!/^data:image\/(?:png|jpeg|webp);base64,/i.test(h.dataUrl))throw new Rt("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 Rt?l:a.signal.aborted?new Rt("cancelled","Mask refinement cancelled",l):new Rt("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 Ag={add:"source-over",subtract:"destination-out",intersect:"destination-in"};function Dg(r){r.set({opacity:0,globalCompositeOperation:"source-over"})}function jg(r){return new V({left:r.left,top:r.top,width:Math.max(1,r.width),height:Math.max(1,r.height),originX:"left",originY:"top",fill:"#000000",objectCaching:!1})}function gi(r,t,e){if(r.length===0)return;r.forEach((n,a)=>{let o=t[a];if(n.set({objectCaching:!1}),!o||!o.visible){Dg(n);return}n.set({opacity:o.opacity,globalCompositeOperation:Ag[o.mode]??"source-over"})});let i=t.find(n=>n.visible),s=i&&i.mode!=="add"?[jg(e.box),...r]:[...r];return new q(s,{absolutePositioned:e.absolute,objectCaching:!0,subTargetCheck:!1,interactive:!1})}function qt(r){return r.some(t=>!t.linked)}var Ds=class{constructor(t,e){this.canvas=t;this.onCommit=e}canvas;onCommit;handle=null;editing=null;child=null;group=null;active(){return this.editing}async begin(t,e,i){this.end();let s=await i.clone();return Oe(s,bt(i)),s.set({fill:"rgba(0,0,0,0.001)",stroke:"#e0b055",strokeWidth:2,strokeDashArray:[6,4],strokeUniform:!0,opacity:1,selectable:!0,evented:!0,hasControls:!0,hasBorders:!0,objectCaching:!1,excludeFromExport:!0}),this.handle=s,this.editing=t,this.child=i,this.group=e,this.canvas.add(s),this.canvas.setActiveObject(s),this.canvas.on("object:moving",this.onTransform),this.canvas.on("object:scaling",this.onTransform),this.canvas.on("object:rotating",this.onTransform),this.canvas.on("object:modified",this.onModified),this.canvas.requestRenderAll(),!0}end(){this.handle&&(this.canvas.off("object:moving",this.onTransform),this.canvas.off("object:scaling",this.onTransform),this.canvas.off("object:rotating",this.onTransform),this.canvas.off("object:modified",this.onModified),this.canvas.getActiveObject()===this.handle&&this.canvas.discardActiveObject(),this.canvas.remove(this.handle),this.handle=null,this.editing=null,this.child=null,this.group=null,this.canvas.requestRenderAll())}dispose(){this.end()}onTransform=t=>{!this.handle||t.target!==this.handle||this.write()};onModified=t=>{!this.handle||t.target!==this.handle||(this.write(),this.onCommit())};write(){!this.handle||!this.child||!this.group||(Oe(this.child,tt.multiplyTransformMatrices(tt.invertTransform(bt(this.group)),bt(this.handle))),this.group.dirty=!0,this.group.set({dirty:!0}),this.canvas.requestRenderAll())}};function fa(r){return r.getAll().find(t=>t.meta.canvasMask)}function ma(r,t){let e=new V({left:0,top:0,width:r.getWidth(),height:r.getHeight(),originX:"left",originY:"top",fill:"#000000",globalCompositeOperation:"destination-in",selectable:!1,evented:!1,hasControls:!1,hasBorders:!1,objectCaching:!1}),i=t.add("mask",e,"Design mask");return i.meta.canvasMask=!0,t.setLocked(i.id,!0),i}function ya(r){let t=r.getAll(),e=t.findIndex(s=>s.meta.canvasMask);if(e===-1)return!1;let i=-1;return t.forEach((s,n)=>{s.type!=="mask"&&(i=n)}),e>=i?!1:(r.reorder(t[e].id,t.length-1),!0)}function va(r,t,e){if(!t)return{left:0,top:0,width:r.getWidth(),height:r.getHeight()};if(e){t.setCoords();let n=t.getBoundingRect();return{left:n.left,top:n.top,width:n.width,height:n.height}}let i=Math.max(1,t.width??1),s=Math.max(1,t.height??1);return{left:-i/2,top:-s/2,width:i,height:s}}function vh(r,t,e){let i=r.clipPath instanceof q?r.clipPath.absolutePositioned:e;if(e!==i)for(let s of t)e?si(s,r):Ut(s,r)}function bh(r,t,e,i){return r.map((s,n)=>{let a=t[n];if(i&&s.linked&&a)return{...s,rel:[...sa(a,e)]};if(!s.rel)return s;let o={...s};return delete o.rel,o})}function xh(r,t,e,i,s){r.clipPath=gi(e,t,{box:i,absolute:s}),r.dirty=!0,r.setCoords()}var ht="canvas",js={mode:"add",linked:!0,visible:!0,opacity:1},pi=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s}canvas;layers;history;events;selected=null;pinning=!1;list(t){return this.hostLayer(t)?.meta.maskStack??[]}get(t,e){return this.list(t).find(i=>i.id===e)}targets(){return this.layers.getAll().filter(t=>(t.meta.maskStack??[]).length>0).map(t=>t.meta.canvasMask?ht:t.id)}hostBox(t,e=t===ht||qt(this.list(t))){return va(this.canvas,this.host(t),e)}hostLayer(t,e=!1){if(t!==ht)return this.layers.get(t);let i=fa(this.layers);return i||!e?i:ma(this.canvas,this.layers)}host(t,e=!1){return this.hostLayer(t,e)?.fabricObject??null}pin(){if(!this.pinning){this.pinning=!0;try{ya(this.layers)}finally{this.pinning=!1}}}holdsBoxClip(t){return t?.overflow==="hidden"&&!t.maskPreset}unwrap(t,e){let i=e.clipPath;if(!i)return[];let s=this.list(t),n=this.hostLayer(t)?.meta;if(s.length===0&&this.holdsBoxClip(n))return[];if(s.length===0||!(i instanceof q)){let l=i;return n?.overflow==="hidden"&&(l.clipPath=void 0),[l]}let a=ni(i),o=a.length-s.length;return o>0?a.slice(o):a}entriesFor(t,e){let i=this.list(t);if(i.length>0||e.length!==1)return[...i];let s=this.hostLayer(t),n=s?.meta.maskPreset;return s&&delete s.meta.maskPreset,[{...js,id:mt(),name:typeof n=="string"?n:"Mask",linked:t===ht?!1:!e[0].absolutePositioned}]}commit(t,e,i,s,n=!0,a=!1){let o=this.hostLayer(t);if(!o)return;let l=a||t===ht||qt(i);vh(e,s,l);let h=bh(i,s,e,l);xh(e,h,s,this.hostBox(t,l),l),h.length===0?(delete o.meta.maskStack,o.meta.canvasMask&&this.layers.remove(o.id)):o.meta.maskStack=h,this.canvas.requestRenderAll(),this.events.emit("masks:changed",{target:t}),this.events.emit("layer:modified",{layerId:o.id}),n&&this.history.save()}};var De=class extends pi{edits=new Ds(this.canvas,()=>this.history.save());onLayersChanged=()=>this.pin();onLayerSelected=({layerId:t})=>{t&&this.selected&&this.select(null,null)};onObjectModified=t=>{let e=t.target;if(!e)return;let i=this.layers.findByObject(e);i&&this.reflow(i.id)};constructor(t,e,i,s){super(t,e,i,s),this.events.on("layers:changed",this.onLayersChanged),this.events.on("layer:selected",this.onLayerSelected),this.canvas.on("object:modified",this.onObjectModified)}dispose(){this.edits.dispose(),this.events.off("layers:changed",this.onLayersChanged),this.events.off("layer:selected",this.onLayerSelected),this.canvas.off("object:modified",this.onObjectModified),this.selected=null}editing(){return this.edits.active()}async beginEdit(t,e){let i=this.host(t);if(!i)return!1;let s=this.list(t),n=s.findIndex(h=>h.id===e);if(n===-1)return!1;this.endEdit(!1),this.commit(t,i,[...s],this.unwrap(t,i),!1,!0);let a=i.clipPath instanceof q?i.clipPath:null;if(!a)return!1;let o=a.getObjects(),l=o[o.length-s.length+n];return l?(this.select(t,e),this.edits.begin({target:t,maskId:e},a,l)):!1}endEdit(t=!0){let e=this.edits.active();this.edits.end(),e&&this.rebuild(e.target,t)}getSelected(){return this.selected}select(t,e){this.selected=t&&e?{target:t,maskId:e}:null,this.selected&&this.layers.select(null),this.events.emit("mask:selected",{target:t,maskId:this.selected?e:null})}add(t,e,i={}){let s=this.host(t,!0);if(!s)return null;let n=this.unwrap(t,s),a=this.entriesFor(t,n),o={...js,id:mt(),name:i.name??"Mask",...i.mode?{mode:i.mode}:{},...i.linked===void 0?{}:{linked:i.linked},...i.meta?{meta:i.meta}:{}};return t===ht&&(o.linked=!1),i.fit!==!1&&Me(e,i.box??this.hostBox(t),i.fit??1),n.push(e),a.push(o),this.commit(t,s,a,n),o}replaceGeometry(t,e,i,s={}){let n=this.host(t);if(!n)return!1;let a=[...this.list(t)],o=a.findIndex(h=>h.id===e);if(o===-1)return!1;let l=this.unwrap(t,n);return s.fit!==!1&&Me(i,s.box??this.hostBox(t),s.fit??1),l[o]=i,a[o]={...a[o],...s.name?{name:s.name}:{},...s.meta?{meta:s.meta}:{}},this.commit(t,n,a,l),!0}refit(t,e,i={}){let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(h=>h.id===e);if(a===-1)return!1;let o=this.unwrap(t,s),l=o[a];return l?(Me(l,i.box??this.hostBox(t),i.fit??1),this.commit(t,s,n,o,i.save??!0),!0):!1}remove(t,e){let i=this.host(t);if(!i)return!1;let s=[...this.list(t)],n=s.findIndex(o=>o.id===e);if(n===-1)return!1;let a=this.unwrap(t,i);return s.splice(n,1),a.splice(n,1),this.selected?.maskId===e&&this.select(null,null),this.commit(t,i,s,a),!0}clear(t){let e=this.host(t);return!e||this.list(t).length===0?!1:(this.selected?.target===t&&this.select(null,null),this.commit(t,e,[],[]),!0)}reorder(t,e,i){let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(u=>u.id===e);if(a===-1)return!1;let o=Math.max(0,Math.min(n.length-1,Math.round(i)));if(a===o)return!1;let l=this.unwrap(t,s),[h]=n.splice(a,1),[c]=l.splice(a,1);return n.splice(o,0,h),l.splice(o,0,c),this.commit(t,s,n,l),!0}setMeta(t,e,i){return this.patch(t,e,()=>({meta:i}))}setMode(t,e,i){return this.patch(t,e,s=>s.mode===i?null:{mode:i})}setVisible(t,e,i){return this.patch(t,e,s=>s.visible===i?null:{visible:i})}setOpacity(t,e,i){if(!Number.isFinite(i))return!1;let s=Math.max(0,Math.min(1,i));return this.patch(t,e,n=>n.opacity===s?null:{opacity:s})}setName(t,e,i){let s=i.trim();return s?this.patch(t,e,n=>n.name===s?null:{name:s}):!1}setLinked(t,e,i){if(t===ht)return!1;let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(l=>l.id===e);if(a===-1||n[a].linked===i)return!1;let o=this.unwrap(t,s);return n[a]={...n[a],linked:i},this.commit(t,s,n,o),!0}convertLayer(t,e){let i=this.layers.get(t);if(!i||i.meta.canvasMask)return null;let s=this.layers.getAll(),n=s.findIndex(u=>u.id===t),a=n>0?s[n-1]:void 0,o=e??(a&&!a.meta.canvasMask?a.id:ht);if(o===t)return null;let l=i.fabricObject;!l.fill&&l.type!=="image"&&l.set({fill:"#000000"});let h=this.host(o);!(o===ht||qt(this.list(o)))&&h&&Ut(l,h),this.history.beginTransaction();try{this.canvas.getActiveObject()===l&&this.canvas.discardActiveObject(),this.canvas.remove(l),this.layers.remove(t);let u=this.add(o,l,{name:i.name,fit:!1});return u?{target:o,entry:u}:null}finally{this.history.endTransaction()}}rebuild(t,e=!1){let i=this.host(t);if(!i)return;let s=this.unwrap(t,i);s.length!==0&&this.commit(t,i,this.entriesFor(t,s),s,e)}reflow(t){let e=this.host(t);if(!e)return;let i=this.list(t);if(i.length===0||!qt(i)||!i.some(n=>n.linked&&n.rel))return;let s=this.unwrap(t,e);i.forEach((n,a)=>{let o=s[a],l=aa(n.rel);!o||!n.linked||!l||na(o,e,l)}),this.commit(t,e,[...i],s)}adopt(t,e){let i=this.hostLayer(t),s=i?.fabricObject.clipPath;if(!i||!s||i.meta.pattern||(i.meta.maskStack??[]).length>0||this.holdsBoxClip(i.meta))return null;let n={...js,id:mt(),name:e??"Mask",linked:t===ht?!1:!s.absolutePositioned};return i.meta.maskStack=[n],delete i.meta.maskPreset,this.rebuild(t),n}refreshAll(){this.selected=null,this.pin();for(let t of this.layers.getAll())(t.meta.maskStack??[]).length!==0&&this.rebuild(t.meta.canvasMask?ht:t.id)}patch(t,e,i){let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(h=>h.id===e);if(a===-1)return!1;let o=i(n[a]);if(!o)return!1;let l=this.unwrap(t,s);return n[a]={...n[a],...o},this.commit(t,s,n,l),!0}};var he={kind:"linear",angle:90,center:{x:.5,y:.5},radius:.5,stops:[{color:"#ffffff",opacity:1,position:0},{color:"#000000",opacity:1,position:1}]},Lg=.001,wh=he.stops[0].color;function ba(r,t){let e=r*Math.PI/180,i=Math.sin(e),s=Math.cos(e),n=t.width*i,a=-t.height*s,l=(Math.abs(t.width*i)+Math.abs(t.height*s))/(n*n+a*a||1);return{x1:.5-l*n/2,y1:.5-l*a/2,x2:.5+l*n/2,y2:.5+l*a/2}}function xa(r,t){let e=(r.x2-r.x1)/(t.width||1),i=(r.y2-r.y1)/(t.height||1);return(Math.atan2(e,-i)*180/Math.PI+360)%360}function Fg(r){let t=Mt(r.color)?r.color:wh,e=new Q(t),i=Number.isFinite(r.opacity)?r.opacity:1;return e.setAlpha(Y(i,0,1)),e.toRgba()}function fi(r,t){let e=[...r.stops].sort((i,s)=>i.position-s.position).map(i=>{let s=Number.isFinite(i.position)?i.position:0;return{offset:Y(s,0,1),color:Fg(i)}});if(r.kind==="radial"){let i=Math.max(Lg,r.radius);return new Wt({type:"radial",gradientUnits:"percentage",coords:{x1:r.center.x,y1:r.center.y,r1:0,x2:r.center.x,y2:r.center.y,r2:i},colorStops:e})}return new Wt({type:"linear",gradientUnits:"percentage",coords:ba(r.angle,t),colorStops:e})}function Ch(r){let t=r.fill;if(!t||typeof t=="string"||!(t instanceof Wt))return null;let e=t.colorStops.map(s=>{let n=Mt(s.color)?s.color:wh,a=new Q(n),o=Number.isFinite(s.offset)?s.offset:0;return{color:`#${a.toHex().toLowerCase()}`,opacity:a.getAlpha(),position:Y(o,0,1)}});if(t.type==="radial"){let{x1:s,y1:n,r2:a}=t.coords;return{kind:"radial",angle:he.angle,center:{x:s,y:n},radius:a,stops:e}}let i={width:r.width||1,height:r.height||1};return{kind:"linear",angle:xa(t.coords,i),center:{...he.center},radius:he.radius,stops:e}}var Ig=.1,Rg=8;function Bg(r){return r instanceof DOMException&&r.name==="SecurityError"||r instanceof Error&&/taint|cross-origin|insecure/i.test(r.message)}var Ls=class{canvas;layers;history;events;units;snapping;crop;patterns;curves;wrap;maskPresets;layerMasks;fonts;licensing;pages;masks;fileAdapter;imageProvider;zoomLevel=1;selectionStyle={...vs};mockup=null;designBackground;designBackgroundImage=null;backgroundImageOptions=null;constructor(t,e){this.events=new Je,this.fonts=new dr,e.fonts?.forEach(n=>this.fonts.register(n)),this.licensing=new gr(e.license),this.units=new ur(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 Yi(t,{width:i,height:s,backgroundColor:this.designBackground,preserveObjectStacking:e.preserveObjectStacking??!0,selection:!0}),this.layers=new tr(this.canvas,this.events),this.fileAdapter=e.fileAdapter,this.imageProvider=e.imageProvider,this.history=new er({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 rr(this.canvas,this.events),this.crop=new ir(this.canvas,this.history,this.events),this.patterns=new Te(this.canvas,this.layers,this.history,this.events),this.curves=new or(this.canvas,this.layers,this.history,this.events),this.wrap=new lr(this.canvas,this.layers,this.history,this.events),this.maskPresets=new Pe(this.canvas,this.layers,this.history,this.events),this.layerMasks=new De(this.canvas,this.layers,this.history,this.events),this.setupCanvasEvents(),this.refreshSelectionStyle(),this.history.saveImmediate(),this.pages=new pr(this),this.masks=new fr(this)}async addImage(t,e){try{let i=await U.fromURL(t,{},{originX:"left",originY:"top",...e}),s=this.layers.add("image",i);return this.layers.select(s.id),this.history.save(),s}catch(i){throw this.events.emit("error",{message:"Failed to add image",error:i}),i}}async replaceImageSource(t,e){let i=this.layers.get(t);if(!i||i.type!=="image"&&i.type!=="mask")throw new Error(`Image or mask layer not found: ${t}`);if(i.meta.pattern)throw new Error("Clear the pattern before replacing the image source");this.crop.activeLayerId()===t&&this.crop.cancel();let s=i.fabricObject;try{let n=await U.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 Yt(t,{fontSize:32,fontFamily:"Arial",fill:"#000000",width:200,originX:"left",originY:"top",...e}),s=this.layers.add("text",i);return this.layers.select(s.id),this.history.save(),s}addShape(t,e){let i=t.create(e),s=this.layers.add("shape",i,t.name);return this.layers.select(s.id),this.history.save(),s}addGradient(t=he,e){let i=e?.width??this.canvas.getWidth(),s=e?.height??this.canvas.getHeight(),n=new V({left:e?.left??0,top:e?.top??0,originX:"left",originY:"top",width:i,height:s,strokeWidth:0,fill:fi(t,{width:i,height:s})}),a=this.layers.add("gradient",n,"Gradient");return this.layers.select(a.id),this.history.save(),a}setGradient(t,e,i=!0){let s=this.layers.get(t);if(!s)return;let n=s.fabricObject;n.set({fill:fi(e,{width:n.width||1,height:n.height||1})}),n.dirty=!0,this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),i&&this.history.save()}setBlend(t,e){let i=this.layers.get(t);if(!i)return;let s=ei(e);i.fabricObject.set({globalCompositeOperation:s}),i.fabricObject.dirty=!0,i.renderProxy&&(i.renderProxy.set({globalCompositeOperation:s}),i.renderProxy.dirty=!0),this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.history.save()}async addTemplate(t,e){let i={};for(let a of t.parameters){let o=e[a.key]??a.default;if(o===void 0)throw new Error(`Missing template parameter: ${a.key}`);if(a.type==="number"&&!Number.isFinite(Number(o)))throw new Error(`Invalid number for template parameter: ${a.key}`);if(a.type==="color"&&!Mt(o))throw new Error(`Invalid color for template parameter: ${a.key}`);i[a.key]=o}let s=Es(t.svg.replace(/\{\{(\w+)(?:[|:]([^}]*))?\}\}/g,(a,o,l)=>{let h=i[o]??l;return h===void 0?a:Ps(h)})),n=s.includes("<textPath")?[ns(t,i)]:await as(t,s,i);if(n.length===0)throw new Error("Template SVG contains no renderable objects");return this.history.transaction(async()=>{let a=n.map(l=>{let h=this.layers.add(l.type,l.object,l.name);return l.curve&&this.curves.apply(h.id,l.curve,!1),h}),o=a.length===1?a[0]:await this.groupLayers(a.map(l=>l.id),t.name)??a[0];return o.fabricObject.set({left:this.canvas.getWidth()/2,top:this.canvas.getHeight()/2,originX:"center",originY:"center"}),o.fabricObject.setCoords(),this.layers.select(o.id),this.canvas.requestRenderAll(),this.history.save(),o})}removeLayer(t){this.crop.activeLayerId()===t&&this.crop.cancel(),this.masks.activeLayerId()===t&&this.masks.detach(t),this.layers.remove(t)&&this.history.save()}selectLayer(t){this.layers.select(t)}selectLayers(t){this.layers.selectMany(t)}getSelectedLayer(){let t=this.canvas.getActiveObject();return t?this.layers.findByObject(t)??null:null}flipLayer(t,e){let i=this.layers.get(t);if(!i)return;let s=i.fabricObject;e==="horizontal"?s.set("flipX",!s.flipX):s.set("flipY",!s.flipY),s.setCoords(),this.canvas.requestRenderAll(),this.history.save()}async duplicateLayer(t){let e=this.layers.get(t);if(!e)return null;let i=await e.fabricObject.clone();i.set({left:(i.left??0)+15,top:(i.top??0)+15}),i.setCoords();let s=this.layers.add(e.type,i,`${e.name} copy`);return s.meta=structuredClone(e.meta),s.visible=e.visible,s.locked=e.locked,s.opacity=e.opacity,i.set({visible:e.visible,selectable:!e.locked,evented:!e.locked,opacity:e.opacity}),this.patterns.attachTo(s),this.layers.select(s.id),this.canvas.requestRenderAll(),this.history.save(),s}applyImageAdjustments(t,e){let i=this.layers.get(t);if(!i||i.type!=="image")return!1;let s=i.fabricObject,a={...i.meta.imageAdjustments??{},...e},o=(l,h=-1)=>Y(l??0,h,1);return s.filters=[new ti.Brightness({brightness:o(a.brightness)}),new ti.Contrast({contrast:o(a.contrast)}),new ti.Saturation({saturation:o(a.saturation)}),new ti.Blur({blur:o(a.blur,0)})],i.meta.imageAdjustments=a,s.applyFilters(),this.canvas.requestRenderAll(),this.history.save(),!0}async groupLayers(t,e="Group"){let i=[...new Set(t)],s=i.map(l=>this.layers.get(l)).filter(l=>l!==void 0&&l.parentId===null);if(s.length<2||s.length!==i.length)return null;let n=this.layers.getAll(),a=Math.max(...s.map(l=>n.indexOf(l))),o=n.slice(0,a).filter(l=>!s.includes(l)).length;return this.history.transaction(()=>{let l=[],h=[];for(let d of s)if(d.type==="group"&&d.children.length>0){let g=d.fabricObject.removeAll();for(let[p,f]of g.entries()){f.setCoords();let y=d.children[p];y&&(l.push(y),h.push(f))}d.children=[],this.layers.detach(d.id)}else l.push(d),h.push(d.fabricObject),this.layers.detach(d.id);let c=new q(h),u=this.layers.add("group",c,e);return this.layers.adoptChildren(u,l),this.layers.reorder(u.id,o),this.layers.select(u.id),this.history.save(),u})}async ungroupLayer(t){let e=this.layers.get(t);return!e||e.type!=="group"||e.children.length===0?[]:this.history.transaction(()=>{let i=this.layers.explode(e);return this.history.save(),this.layers.select(i[0]?.id??null),i})}toJSON(){return ws(this)}async fromJSON(t){let e=this.history.isRestoring();e||(this.history.saveImmediate(),this.history.pause());try{await Cs(this,t),await this.patterns.rehydrateAll(),this.layerMasks.refreshAll()}catch(i){throw e||this.events.emit("error",{message:"Failed to load editor state",error:i}),i}finally{e||this.history.resume()}e||(this.history.clear(),this.history.saveImmediate())}async toPNG(t){return this.toRaster(t?.format??"png",t)}async toJPEG(t){return this.toRaster("jpeg",t)}async toWebP(t){return this.toRaster("webp",t)}async exportLayer(t,e={}){let i=this.layers.get(t);if(!i)throw new Error(`Layer not found: ${t}`);try{if(e.resolution==="source"&&i.fabricObject instanceof U){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 di(this.canvas,[s],{...e,width:s.width||1,height:s.height||1,cloneObjects:!1})}return await di(this.canvas,[i.renderProxy??i.fabricObject],e)}catch(s){throw this.events.emit("error",{message:`Failed to export layer: ${t}`,error:s}),s}}async exportBackground(t={}){try{return await di(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(()=>ui(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:Bg(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(()=>Os(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(()=>Ms(this.canvas,t,e))}async toPrintFile(t={}){await this.fonts.ready();try{let e=this.mockup?.printArea,i=e?await Ts(this.canvas,e,t):await di(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 ks(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:et(o.x/e),y:et(o.y/i),scale:et(a.scaleX??1),angle:et(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:et(n.x/t),centerY:et(n.y/e),width:et(a.width/t),height:et(a.height/e),scaleX:et(s.scaleX??1),scaleY:et(s.scaleY??1),angle:et(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 U.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:Y(e.opacity??1,0,1),selectable:!1,evented:!1});let g={...e};delete g.signal,this.setBackgroundImageObject(i,!0,g)}catch(i){throw this.events.emit("error",{message:"Failed to set background image",error:i}),i}}setBackgroundImageObject(t,e=!0,i=null){this.designBackgroundImage=t,this.backgroundImageOptions=t?i:null,this.canvas.backgroundImage=this.mockup?void 0:t??void 0,this.canvas.requestRenderAll(),e&&this.history.save(),this.events.emit("canvas:modified",{})}setTransparentBackground(){this.setBackground("")}resize(t,e,i={}){let s=this.units.toPixels(t),n=this.units.toPixels(e),a=this.canvas.getWidth(),o=this.canvas.getHeight();if((i.scaleContent??!0)&&a>0&&o>0){let h=s/a,c=n/o;for(let u of this.layers.getAll()){let d=u.fabricObject;d.set({left:(d.left??0)*h,top:(d.top??0)*c,scaleX:(d.scaleX??1)*h,scaleY:(d.scaleY??1)*c}),d.setCoords()}this.designBackgroundImage&&(this.designBackgroundImage.set({left:(this.designBackgroundImage.left??0)*h,top:(this.designBackgroundImage.top??0)*c,scaleX:(this.designBackgroundImage.scaleX??1)*h,scaleY:(this.designBackgroundImage.scaleY??1)*c}),this.designBackgroundImage.setCoords())}this.canvas.setDimensions({width:s,height:n}),this.patterns.syncArea(),this.canvas.requestRenderAll(),this.history.save(),this.events.emit("canvas:modified",{})}getImageDpi(t){let e=this.layers.get(t);if(!e||e.type!=="image")return null;let i=e.fabricObject,s=i.width??0,n=i.getScaledWidth();return s<=0||n<=0?null:et(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=Y(et(t),Ig,Rg);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){let i=this.curves.apply(t,e);return i&&this.wrap.refresh(t),i}clearTextCurve(t){let e=this.curves.clear(t);return e&&this.wrap.refresh(t),e}getTextCurve(t){return this.curves.get(t)}applyTextWrap(t,e){return this.wrap.apply(t,e)}setTextOverflow(t,e){return this.wrap.setOverflow(t,e)}getTextWrap(t){return this.wrap.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?(Ae(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&&Ae(t.fabricObject,!0)}resetLayerTransform(t){let e=this.layers.get(t);return e?(xs(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?(ys(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?ci(e.fabricObject):null}setMockup(t,e={}){this.mockup=t,this.canvas.backgroundColor=t?"":this.designBackground,this.canvas.backgroundImage=t?void 0:this.designBackgroundImage??void 0,this.canvas.requestRenderAll(),this.events.emit("mockup:changed",{mockup:t}),e.history!==!1&&this.history.save()}clearMockup(){this.setMockup(null)}getMockup(){return this.mockup}dispose(){this.masks.dispose(),this.layerMasks.dispose(),this.snapping.dispose(),this.crop.dispose(),this.history.dispose(),this.patterns.dispose(),this.curves.dispose(),this.wrap.dispose(),this.events.removeAllListeners(),this.canvas.dispose()}getSelectionStyle(){return{...this.selectionStyle}}setSelectionStyle(t){this.selectionStyle={...this.selectionStyle,...t},this.refreshSelectionStyle()}refreshSelectionStyle(){bs(this.canvas,this.selectionStyle,this.zoomLevel)}setupCanvasEvents(){this.canvas.on("object:added",e=>{e.target&&Ee(e.target,this.selectionStyle,this.zoomLevel)});let t=()=>{let e=this.canvas.getActiveObject();e&&Ee(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 Sh={mode:"grid",scale:100,horizontalSpacing:0,verticalSpacing:0,angle:0,horizontalOffset:50,offsetX:0,offsetY:0,rotationStepH:0,rotationStepV:0,horizontalLimit:0,verticalLimit:0};var _h=[{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 Fs=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 Dh(Xg);})();
|
|
507
|
+
`)}};function Pg(r,t){let e=r.toLowerCase(),i=t.toLowerCase();if(i.startsWith("*.")){let s=i.slice(1);return e.endsWith(s)&&e.length>s.length}return e===i}function Eg(r){return r==="localhost"||r==="127.0.0.1"||r==="::1"||r.endsWith(".localhost")}var gr=class{constructor(t={}){this.config=t;let e=t.hostname??globalThis.location?.hostname??"localhost";(t.environment??"development")!=="production"||Eg(e)?(this.status={state:"exempt",payload:null},this.readyPromise=Promise.resolve(this.status)):t.key?(this.status={state:"checking",payload:null},this.readyPromise=this.validate(t.key,e)):(this.status={state:"community",payload:null},this.readyPromise=Promise.resolve(this.status))}config;status;readyPromise;getStatus(){return this.status}ready(){return this.readyPromise}hasFeature(t){return this.status.state==="valid"&&(this.status.payload.features??[]).includes(t)}track(t){this.config.onUsage?.({name:t,at:new Date().toISOString(),licenseId:this.status.state==="valid"?this.status.payload.id:void 0})}async validate(t,e){let i=await this.config.verifyOffline?.(t)??null;return i?i.expiresAt&&Date.parse(i.expiresAt)<Date.now()?this.status={state:"expired",payload:i}:i.domains.some(s=>Pg(e,s))?this.status={state:"valid",payload:i}:this.status={state:"domain-mismatch",payload:i}:this.status={state:"invalid",payload:null}}};var pr=class{constructor(t){this.editor=t;let e={id:mt(),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:mt(),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:mt(),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 Rt=class extends Error{constructor(e,i,s){super(i);this.code=e;this.cause=s;this.name="MaskRefinementError"}code;cause},fr=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 U(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:Y(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 Rt("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 Rt("cancelled","Mask refinement cancelled");if(!/^data:image\/(?:png|jpeg|webp);base64,/i.test(h.dataUrl))throw new Rt("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 Rt?l:a.signal.aborted?new Rt("cancelled","Mask refinement cancelled",l):new Rt("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 Ag={add:"source-over",subtract:"destination-out",intersect:"destination-in"};function Dg(r){r.set({opacity:0,globalCompositeOperation:"source-over"})}function jg(r){return new V({left:r.left,top:r.top,width:Math.max(1,r.width),height:Math.max(1,r.height),originX:"left",originY:"top",fill:"#000000",objectCaching:!1})}function gi(r,t,e){if(r.length===0)return;r.forEach((n,a)=>{let o=t[a];if(n.set({objectCaching:!1}),!o||!o.visible){Dg(n);return}n.set({opacity:o.opacity,globalCompositeOperation:Ag[o.mode]??"source-over"})});let i=t.find(n=>n.visible),s=i&&i.mode!=="add"?[jg(e.box),...r]:[...r];return new q(s,{absolutePositioned:e.absolute,objectCaching:!0,subTargetCheck:!1,interactive:!1})}function qt(r){return r.some(t=>!t.linked)}var Ds=class{constructor(t,e){this.canvas=t;this.onCommit=e}canvas;onCommit;handle=null;editing=null;child=null;group=null;active(){return this.editing}async begin(t,e,i){this.end();let s=await i.clone();return Oe(s,bt(i)),s.set({fill:"rgba(0,0,0,0.001)",stroke:"#e0b055",strokeWidth:2,strokeDashArray:[6,4],strokeUniform:!0,opacity:1,selectable:!0,evented:!0,hasControls:!0,hasBorders:!0,objectCaching:!1,excludeFromExport:!0}),this.handle=s,this.editing=t,this.child=i,this.group=e,this.canvas.add(s),this.canvas.setActiveObject(s),this.canvas.on("object:moving",this.onTransform),this.canvas.on("object:scaling",this.onTransform),this.canvas.on("object:rotating",this.onTransform),this.canvas.on("object:modified",this.onModified),this.canvas.requestRenderAll(),!0}end(){this.handle&&(this.canvas.off("object:moving",this.onTransform),this.canvas.off("object:scaling",this.onTransform),this.canvas.off("object:rotating",this.onTransform),this.canvas.off("object:modified",this.onModified),this.canvas.getActiveObject()===this.handle&&this.canvas.discardActiveObject(),this.canvas.remove(this.handle),this.handle=null,this.editing=null,this.child=null,this.group=null,this.canvas.requestRenderAll())}dispose(){this.end()}onTransform=t=>{!this.handle||t.target!==this.handle||this.write()};onModified=t=>{!this.handle||t.target!==this.handle||(this.write(),this.onCommit())};write(){!this.handle||!this.child||!this.group||(Oe(this.child,tt.multiplyTransformMatrices(tt.invertTransform(bt(this.group)),bt(this.handle))),this.group.dirty=!0,this.group.set({dirty:!0}),this.canvas.requestRenderAll())}};function fa(r){return r.getAll().find(t=>t.meta.canvasMask)}function ma(r,t){let e=new V({left:0,top:0,width:r.getWidth(),height:r.getHeight(),originX:"left",originY:"top",fill:"#000000",globalCompositeOperation:"destination-in",selectable:!1,evented:!1,hasControls:!1,hasBorders:!1,objectCaching:!1}),i=t.add("mask",e,"Design mask");return i.meta.canvasMask=!0,t.setLocked(i.id,!0),i}function ya(r){let t=r.getAll(),e=t.findIndex(s=>s.meta.canvasMask);if(e===-1)return!1;let i=-1;return t.forEach((s,n)=>{s.type!=="mask"&&(i=n)}),e>=i?!1:(r.reorder(t[e].id,t.length-1),!0)}function va(r,t,e){if(!t)return{left:0,top:0,width:r.getWidth(),height:r.getHeight()};if(e){t.setCoords();let n=t.getBoundingRect();return{left:n.left,top:n.top,width:n.width,height:n.height}}let i=Math.max(1,t.width??1),s=Math.max(1,t.height??1);return{left:-i/2,top:-s/2,width:i,height:s}}function vh(r,t,e){let i=r.clipPath instanceof q?r.clipPath.absolutePositioned:e;if(e!==i)for(let s of t)e?si(s,r):Ut(s,r)}function bh(r,t,e,i){return r.map((s,n)=>{let a=t[n];if(i&&s.linked&&a)return{...s,rel:[...sa(a,e)]};if(!s.rel)return s;let o={...s};return delete o.rel,o})}function xh(r,t,e,i,s){r.clipPath=gi(e,t,{box:i,absolute:s}),r.dirty=!0,r.setCoords()}var ht="canvas",js={mode:"add",linked:!0,visible:!0,opacity:1},pi=class{constructor(t,e,i,s){this.canvas=t;this.layers=e;this.history=i;this.events=s}canvas;layers;history;events;selected=null;pinning=!1;list(t){return this.hostLayer(t)?.meta.maskStack??[]}get(t,e){return this.list(t).find(i=>i.id===e)}targets(){return this.layers.getAll().filter(t=>(t.meta.maskStack??[]).length>0).map(t=>t.meta.canvasMask?ht:t.id)}hostBox(t,e=t===ht||qt(this.list(t))){return va(this.canvas,this.host(t),e)}hostLayer(t,e=!1){if(t!==ht)return this.layers.get(t);let i=fa(this.layers);return i||!e?i:ma(this.canvas,this.layers)}host(t,e=!1){return this.hostLayer(t,e)?.fabricObject??null}pin(){if(!this.pinning){this.pinning=!0;try{ya(this.layers)}finally{this.pinning=!1}}}holdsBoxClip(t){return t?.overflow==="hidden"&&!t.maskPreset}unwrap(t,e){let i=e.clipPath;if(!i)return[];let s=this.list(t),n=this.hostLayer(t)?.meta;if(s.length===0&&this.holdsBoxClip(n))return[];if(s.length===0||!(i instanceof q)){let l=i;return n?.overflow==="hidden"&&(l.clipPath=void 0),[l]}let a=ni(i),o=a.length-s.length;return o>0?a.slice(o):a}entriesFor(t,e){let i=this.list(t);if(i.length>0||e.length!==1)return[...i];let s=this.hostLayer(t),n=s?.meta.maskPreset;return s&&delete s.meta.maskPreset,[{...js,id:mt(),name:typeof n=="string"?n:"Mask",linked:t===ht?!1:!e[0].absolutePositioned}]}commit(t,e,i,s,n=!0,a=!1){let o=this.hostLayer(t);if(!o)return;let l=a||t===ht||qt(i);vh(e,s,l);let h=bh(i,s,e,l);xh(e,h,s,this.hostBox(t,l),l),h.length===0?(delete o.meta.maskStack,o.meta.canvasMask&&this.layers.remove(o.id)):o.meta.maskStack=h,this.canvas.requestRenderAll(),this.events.emit("masks:changed",{target:t}),this.events.emit("layer:modified",{layerId:o.id}),n&&this.history.save()}};var De=class extends pi{edits=new Ds(this.canvas,()=>this.history.save());onLayersChanged=()=>this.pin();onLayerSelected=({layerId:t})=>{t&&this.selected&&this.select(null,null)};onObjectModified=t=>{let e=t.target;if(!e)return;let i=this.layers.findByObject(e);i&&this.reflow(i.id)};constructor(t,e,i,s){super(t,e,i,s),this.events.on("layers:changed",this.onLayersChanged),this.events.on("layer:selected",this.onLayerSelected),this.canvas.on("object:modified",this.onObjectModified)}dispose(){this.edits.dispose(),this.events.off("layers:changed",this.onLayersChanged),this.events.off("layer:selected",this.onLayerSelected),this.canvas.off("object:modified",this.onObjectModified),this.selected=null}editing(){return this.edits.active()}async beginEdit(t,e){let i=this.host(t);if(!i)return!1;let s=this.list(t),n=s.findIndex(h=>h.id===e);if(n===-1)return!1;this.endEdit(!1),this.commit(t,i,[...s],this.unwrap(t,i),!1,!0);let a=i.clipPath instanceof q?i.clipPath:null;if(!a)return!1;let o=a.getObjects(),l=o[o.length-s.length+n];return l?(this.select(t,e),this.edits.begin({target:t,maskId:e},a,l)):!1}endEdit(t=!0){let e=this.edits.active();this.edits.end(),e&&this.rebuild(e.target,t)}getSelected(){return this.selected}select(t,e){this.selected=t&&e?{target:t,maskId:e}:null,this.selected&&this.layers.select(null),this.events.emit("mask:selected",{target:t,maskId:this.selected?e:null})}add(t,e,i={}){let s=this.host(t,!0);if(!s)return null;let n=this.unwrap(t,s),a=this.entriesFor(t,n),o={...js,id:mt(),name:i.name??"Mask",...i.mode?{mode:i.mode}:{},...i.linked===void 0?{}:{linked:i.linked},...i.meta?{meta:i.meta}:{}};return t===ht&&(o.linked=!1),i.fit!==!1&&Me(e,i.box??this.hostBox(t),i.fit??1),n.push(e),a.push(o),this.commit(t,s,a,n),o}replaceGeometry(t,e,i,s={}){let n=this.host(t);if(!n)return!1;let a=[...this.list(t)],o=a.findIndex(h=>h.id===e);if(o===-1)return!1;let l=this.unwrap(t,n);return s.fit!==!1&&Me(i,s.box??this.hostBox(t),s.fit??1),l[o]=i,a[o]={...a[o],...s.name?{name:s.name}:{},...s.meta?{meta:s.meta}:{}},this.commit(t,n,a,l),!0}refit(t,e,i={}){let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(h=>h.id===e);if(a===-1)return!1;let o=this.unwrap(t,s),l=o[a];return l?(Me(l,i.box??this.hostBox(t),i.fit??1),this.commit(t,s,n,o,i.save??!0),!0):!1}remove(t,e){let i=this.host(t);if(!i)return!1;let s=[...this.list(t)],n=s.findIndex(o=>o.id===e);if(n===-1)return!1;let a=this.unwrap(t,i);return s.splice(n,1),a.splice(n,1),this.selected?.maskId===e&&this.select(null,null),this.commit(t,i,s,a),!0}clear(t){let e=this.host(t);return!e||this.list(t).length===0?!1:(this.selected?.target===t&&this.select(null,null),this.commit(t,e,[],[]),!0)}reorder(t,e,i){let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(u=>u.id===e);if(a===-1)return!1;let o=Math.max(0,Math.min(n.length-1,Math.round(i)));if(a===o)return!1;let l=this.unwrap(t,s),[h]=n.splice(a,1),[c]=l.splice(a,1);return n.splice(o,0,h),l.splice(o,0,c),this.commit(t,s,n,l),!0}setMeta(t,e,i){return this.patch(t,e,()=>({meta:i}))}setMode(t,e,i){return this.patch(t,e,s=>s.mode===i?null:{mode:i})}setVisible(t,e,i){return this.patch(t,e,s=>s.visible===i?null:{visible:i})}setOpacity(t,e,i){if(!Number.isFinite(i))return!1;let s=Math.max(0,Math.min(1,i));return this.patch(t,e,n=>n.opacity===s?null:{opacity:s})}setName(t,e,i){let s=i.trim();return s?this.patch(t,e,n=>n.name===s?null:{name:s}):!1}setLinked(t,e,i){if(t===ht)return!1;let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(l=>l.id===e);if(a===-1||n[a].linked===i)return!1;let o=this.unwrap(t,s);return n[a]={...n[a],linked:i},this.commit(t,s,n,o),!0}convertLayer(t,e){let i=this.layers.get(t);if(!i||i.meta.canvasMask)return null;let s=this.layers.getAll(),n=s.findIndex(u=>u.id===t),a=n>0?s[n-1]:void 0,o=e??(a&&!a.meta.canvasMask?a.id:ht);if(o===t)return null;let l=i.fabricObject;!l.fill&&l.type!=="image"&&l.set({fill:"#000000"});let h=this.host(o);!(o===ht||qt(this.list(o)))&&h&&Ut(l,h),this.history.beginTransaction();try{this.canvas.getActiveObject()===l&&this.canvas.discardActiveObject(),this.canvas.remove(l),this.layers.remove(t);let u=this.add(o,l,{name:i.name,fit:!1});return u?{target:o,entry:u}:null}finally{this.history.endTransaction()}}rebuild(t,e=!1){let i=this.host(t);if(!i)return;let s=this.unwrap(t,i);s.length!==0&&this.commit(t,i,this.entriesFor(t,s),s,e)}reflow(t){let e=this.host(t);if(!e)return;let i=this.list(t);if(i.length===0||!qt(i)||!i.some(n=>n.linked&&n.rel))return;let s=this.unwrap(t,e);i.forEach((n,a)=>{let o=s[a],l=aa(n.rel);!o||!n.linked||!l||na(o,e,l)}),this.commit(t,e,[...i],s)}adopt(t,e){let i=this.hostLayer(t),s=i?.fabricObject.clipPath;if(!i||!s||i.meta.pattern||(i.meta.maskStack??[]).length>0||this.holdsBoxClip(i.meta))return null;let n={...js,id:mt(),name:e??"Mask",linked:t===ht?!1:!s.absolutePositioned};return i.meta.maskStack=[n],delete i.meta.maskPreset,this.rebuild(t),n}refreshAll(){this.selected=null,this.pin();for(let t of this.layers.getAll())(t.meta.maskStack??[]).length!==0&&this.rebuild(t.meta.canvasMask?ht:t.id)}patch(t,e,i){let s=this.host(t);if(!s)return!1;let n=[...this.list(t)],a=n.findIndex(h=>h.id===e);if(a===-1)return!1;let o=i(n[a]);if(!o)return!1;let l=this.unwrap(t,s);return n[a]={...n[a],...o},this.commit(t,s,n,l),!0}};var he={kind:"linear",angle:90,center:{x:.5,y:.5},radius:.5,stops:[{color:"#ffffff",opacity:1,position:0},{color:"#000000",opacity:1,position:1}]},Lg=.001,Fg=256,wh=he.stops[0].color;function ba(r,t){let e=r*Math.PI/180,i=Math.sin(e),s=Math.cos(e),n=t.width*i,a=-t.height*s,l=(Math.abs(t.width*i)+Math.abs(t.height*s))/(n*n+a*a||1);return{x1:.5-l*n/2,y1:.5-l*a/2,x2:.5+l*n/2,y2:.5+l*a/2}}function xa(r,t){let e=(r.x2-r.x1)/(t.width||1),i=(r.y2-r.y1)/(t.height||1);return(Math.atan2(e,-i)*180/Math.PI+360)%360}function Ig(r){let t=Mt(r.color)?r.color:wh,e=new Q(t),i=Number.isFinite(r.opacity)?r.opacity:1;return e.setAlpha(Y(i,0,1)),e.toRgba()}function fi(r,t){let e=[...r.stops].sort((i,s)=>i.position-s.position).slice(0,Fg).map(i=>{let s=Number.isFinite(i.position)?i.position:0;return{offset:Y(s,0,1),color:Ig(i)}});if(r.kind==="radial"){let i=Math.max(Lg,r.radius);return new Wt({type:"radial",gradientUnits:"percentage",coords:{x1:r.center.x,y1:r.center.y,r1:0,x2:r.center.x,y2:r.center.y,r2:i},colorStops:e})}return new Wt({type:"linear",gradientUnits:"percentage",coords:ba(r.angle,t),colorStops:e})}function Ch(r){let t=r.fill;if(!t||typeof t=="string"||!(t instanceof Wt))return null;let e=t.colorStops.map(s=>{let n=Mt(s.color)?s.color:wh,a=new Q(n),o=Number.isFinite(s.offset)?s.offset:0;return{color:`#${a.toHex().toLowerCase()}`,opacity:a.getAlpha(),position:Y(o,0,1)}});if(t.type==="radial"){let{x1:s,y1:n,r2:a}=t.coords;return{kind:"radial",angle:he.angle,center:{x:s,y:n},radius:a,stops:e}}let i={width:r.width||1,height:r.height||1};return{kind:"linear",angle:xa(t.coords,i),center:{...he.center},radius:he.radius,stops:e}}var Rg=.1,Bg=8;function Xg(r){return r instanceof DOMException&&r.name==="SecurityError"||r instanceof Error&&/taint|cross-origin|insecure/i.test(r.message)}var Ls=class{canvas;layers;history;events;units;snapping;crop;patterns;curves;wrap;maskPresets;layerMasks;fonts;licensing;pages;masks;fileAdapter;imageProvider;zoomLevel=1;selectionStyle={...vs};mockup=null;designBackground;designBackgroundImage=null;backgroundImageOptions=null;constructor(t,e){this.events=new Je,this.fonts=new dr,e.fonts?.forEach(n=>this.fonts.register(n)),this.licensing=new gr(e.license),this.units=new ur(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 Yi(t,{width:i,height:s,backgroundColor:this.designBackground,preserveObjectStacking:e.preserveObjectStacking??!0,selection:!0}),this.layers=new tr(this.canvas,this.events),this.fileAdapter=e.fileAdapter,this.imageProvider=e.imageProvider,this.history=new er({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 rr(this.canvas,this.events),this.crop=new ir(this.canvas,this.history,this.events),this.patterns=new Te(this.canvas,this.layers,this.history,this.events),this.curves=new or(this.canvas,this.layers,this.history,this.events),this.wrap=new lr(this.canvas,this.layers,this.history,this.events),this.maskPresets=new Pe(this.canvas,this.layers,this.history,this.events),this.layerMasks=new De(this.canvas,this.layers,this.history,this.events),this.setupCanvasEvents(),this.refreshSelectionStyle(),this.history.saveImmediate(),this.pages=new pr(this),this.masks=new fr(this)}async addImage(t,e){try{let i=await U.fromURL(t,{},{originX:"left",originY:"top",...e}),s=this.layers.add("image",i);return this.layers.select(s.id),this.history.save(),s}catch(i){throw this.events.emit("error",{message:"Failed to add image",error:i}),i}}async replaceImageSource(t,e){let i=this.layers.get(t);if(!i||i.type!=="image"&&i.type!=="mask")throw new Error(`Image or mask layer not found: ${t}`);if(i.meta.pattern)throw new Error("Clear the pattern before replacing the image source");this.crop.activeLayerId()===t&&this.crop.cancel();let s=i.fabricObject;try{let n=await U.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 Yt(t,{fontSize:32,fontFamily:"Arial",fill:"#000000",width:200,originX:"left",originY:"top",...e}),s=this.layers.add("text",i);return this.layers.select(s.id),this.history.save(),s}addShape(t,e){let i=t.create(e),s=this.layers.add("shape",i,t.name);return this.layers.select(s.id),this.history.save(),s}addGradient(t=he,e){let i=e?.width??this.canvas.getWidth(),s=e?.height??this.canvas.getHeight(),n=new V({left:e?.left??0,top:e?.top??0,originX:"left",originY:"top",width:i,height:s,strokeWidth:0,fill:fi(t,{width:i,height:s})}),a=this.layers.add("gradient",n,"Gradient");return this.layers.select(a.id),this.history.save(),a}setGradient(t,e,i=!0){let s=this.layers.get(t);if(!s)return;let n=s.fabricObject;n.set({fill:fi(e,{width:n.width||1,height:n.height||1})}),n.dirty=!0,this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),i&&this.history.save()}setBlend(t,e){let i=this.layers.get(t);if(!i)return;let s=ei(e);i.fabricObject.set({globalCompositeOperation:s}),i.fabricObject.dirty=!0,i.renderProxy&&(i.renderProxy.set({globalCompositeOperation:s}),i.renderProxy.dirty=!0),this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.history.save()}async addTemplate(t,e){let i={};for(let a of t.parameters){let o=e[a.key]??a.default;if(o===void 0)throw new Error(`Missing template parameter: ${a.key}`);if(a.type==="number"&&!Number.isFinite(Number(o)))throw new Error(`Invalid number for template parameter: ${a.key}`);if(a.type==="color"&&!Mt(o))throw new Error(`Invalid color for template parameter: ${a.key}`);i[a.key]=o}let s=Es(t.svg.replace(/\{\{(\w+)(?:[|:]([^}]*))?\}\}/g,(a,o,l)=>{let h=i[o]??l;return h===void 0?a:Ps(h)})),n=s.includes("<textPath")?[ns(t,i)]:await as(t,s,i);if(n.length===0)throw new Error("Template SVG contains no renderable objects");return this.history.transaction(async()=>{let a=n.map(l=>{let h=this.layers.add(l.type,l.object,l.name);return l.curve&&this.curves.apply(h.id,l.curve,!1),h}),o=a.length===1?a[0]:await this.groupLayers(a.map(l=>l.id),t.name)??a[0];return o.fabricObject.set({left:this.canvas.getWidth()/2,top:this.canvas.getHeight()/2,originX:"center",originY:"center"}),o.fabricObject.setCoords(),this.layers.select(o.id),this.canvas.requestRenderAll(),this.history.save(),o})}removeLayer(t){this.crop.activeLayerId()===t&&this.crop.cancel(),this.masks.activeLayerId()===t&&this.masks.detach(t),this.layers.remove(t)&&this.history.save()}selectLayer(t){this.layers.select(t)}selectLayers(t){this.layers.selectMany(t)}getSelectedLayer(){let t=this.canvas.getActiveObject();return t?this.layers.findByObject(t)??null:null}flipLayer(t,e){let i=this.layers.get(t);if(!i)return;let s=i.fabricObject;e==="horizontal"?s.set("flipX",!s.flipX):s.set("flipY",!s.flipY),s.setCoords(),this.canvas.requestRenderAll(),this.history.save()}async duplicateLayer(t){let e=this.layers.get(t);if(!e)return null;let i=await e.fabricObject.clone();i.set({left:(i.left??0)+15,top:(i.top??0)+15}),i.setCoords();let s=this.layers.add(e.type,i,`${e.name} copy`);return s.meta=structuredClone(e.meta),s.visible=e.visible,s.locked=e.locked,s.opacity=e.opacity,i.set({visible:e.visible,selectable:!e.locked,evented:!e.locked,opacity:e.opacity}),this.patterns.attachTo(s),this.layers.select(s.id),this.canvas.requestRenderAll(),this.history.save(),s}applyImageAdjustments(t,e){let i=this.layers.get(t);if(!i||i.type!=="image")return!1;let s=i.fabricObject,a={...i.meta.imageAdjustments??{},...e},o=(l,h=-1)=>Y(l??0,h,1);return s.filters=[new ti.Brightness({brightness:o(a.brightness)}),new ti.Contrast({contrast:o(a.contrast)}),new ti.Saturation({saturation:o(a.saturation)}),new ti.Blur({blur:o(a.blur,0)})],i.meta.imageAdjustments=a,s.applyFilters(),this.canvas.requestRenderAll(),this.history.save(),!0}async groupLayers(t,e="Group"){let i=[...new Set(t)],s=i.map(l=>this.layers.get(l)).filter(l=>l!==void 0&&l.parentId===null);if(s.length<2||s.length!==i.length)return null;let n=this.layers.getAll(),a=Math.max(...s.map(l=>n.indexOf(l))),o=n.slice(0,a).filter(l=>!s.includes(l)).length;return this.history.transaction(()=>{let l=[],h=[];for(let d of s)if(d.type==="group"&&d.children.length>0){let g=d.fabricObject.removeAll();for(let[p,f]of g.entries()){f.setCoords();let y=d.children[p];y&&(l.push(y),h.push(f))}d.children=[],this.layers.detach(d.id)}else l.push(d),h.push(d.fabricObject),this.layers.detach(d.id);let c=new q(h),u=this.layers.add("group",c,e);return this.layers.adoptChildren(u,l),this.layers.reorder(u.id,o),this.layers.select(u.id),this.history.save(),u})}async ungroupLayer(t){let e=this.layers.get(t);return!e||e.type!=="group"||e.children.length===0?[]:this.history.transaction(()=>{let i=this.layers.explode(e);return this.history.save(),this.layers.select(i[0]?.id??null),i})}toJSON(){return ws(this)}async fromJSON(t){let e=this.history.isRestoring();e||(this.history.saveImmediate(),this.history.pause());try{await Cs(this,t),await this.patterns.rehydrateAll(),this.layerMasks.refreshAll()}catch(i){throw e||this.events.emit("error",{message:"Failed to load editor state",error:i}),i}finally{e||this.history.resume()}e||(this.history.clear(),this.history.saveImmediate())}async toPNG(t){return this.toRaster(t?.format??"png",t)}async toJPEG(t){return this.toRaster("jpeg",t)}async toWebP(t){return this.toRaster("webp",t)}async exportLayer(t,e={}){let i=this.layers.get(t);if(!i)throw new Error(`Layer not found: ${t}`);try{if(e.resolution==="source"&&i.fabricObject instanceof U){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 di(this.canvas,[s],{...e,width:s.width||1,height:s.height||1,cloneObjects:!1})}return await di(this.canvas,[i.renderProxy??i.fabricObject],e)}catch(s){throw this.events.emit("error",{message:`Failed to export layer: ${t}`,error:s}),s}}async exportBackground(t={}){try{return await di(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(()=>ui(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:Xg(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(()=>Os(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(()=>Ms(this.canvas,t,e))}async toPrintFile(t={}){await this.fonts.ready();try{let e=this.mockup?.printArea,i=e?await Ts(this.canvas,e,t):await di(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 ks(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:et(o.x/e),y:et(o.y/i),scale:et(a.scaleX??1),angle:et(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:et(n.x/t),centerY:et(n.y/e),width:et(a.width/t),height:et(a.height/e),scaleX:et(s.scaleX??1),scaleY:et(s.scaleY??1),angle:et(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 U.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:Y(e.opacity??1,0,1),selectable:!1,evented:!1});let g={...e};delete g.signal,this.setBackgroundImageObject(i,!0,g)}catch(i){throw this.events.emit("error",{message:"Failed to set background image",error:i}),i}}setBackgroundImageObject(t,e=!0,i=null){this.designBackgroundImage=t,this.backgroundImageOptions=t?i:null,this.canvas.backgroundImage=this.mockup?void 0:t??void 0,this.canvas.requestRenderAll(),e&&this.history.save(),this.events.emit("canvas:modified",{})}setTransparentBackground(){this.setBackground("")}resize(t,e,i={}){let s=this.units.toPixels(t),n=this.units.toPixels(e),a=this.canvas.getWidth(),o=this.canvas.getHeight();if((i.scaleContent??!0)&&a>0&&o>0){let h=s/a,c=n/o;for(let u of this.layers.getAll()){let d=u.fabricObject;d.set({left:(d.left??0)*h,top:(d.top??0)*c,scaleX:(d.scaleX??1)*h,scaleY:(d.scaleY??1)*c}),d.setCoords()}this.designBackgroundImage&&(this.designBackgroundImage.set({left:(this.designBackgroundImage.left??0)*h,top:(this.designBackgroundImage.top??0)*c,scaleX:(this.designBackgroundImage.scaleX??1)*h,scaleY:(this.designBackgroundImage.scaleY??1)*c}),this.designBackgroundImage.setCoords())}this.canvas.setDimensions({width:s,height:n}),this.patterns.syncArea(),this.canvas.requestRenderAll(),this.history.save(),this.events.emit("canvas:modified",{})}getImageDpi(t){let e=this.layers.get(t);if(!e||e.type!=="image")return null;let i=e.fabricObject,s=i.width??0,n=i.getScaledWidth();return s<=0||n<=0?null:et(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=Y(et(t),Rg,Bg);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){let i=this.curves.apply(t,e);return i&&this.wrap.refresh(t),i}clearTextCurve(t){let e=this.curves.clear(t);return e&&this.wrap.refresh(t),e}getTextCurve(t){return this.curves.get(t)}applyTextWrap(t,e){return this.wrap.apply(t,e)}setTextOverflow(t,e){return this.wrap.setOverflow(t,e)}getTextWrap(t){return this.wrap.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?(Ae(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&&Ae(t.fabricObject,!0)}resetLayerTransform(t){let e=this.layers.get(t);return e?(xs(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?(ys(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?ci(e.fabricObject):null}setMockup(t,e={}){this.mockup=t,this.canvas.backgroundColor=t?"":this.designBackground,this.canvas.backgroundImage=t?void 0:this.designBackgroundImage??void 0,this.canvas.requestRenderAll(),this.events.emit("mockup:changed",{mockup:t}),e.history!==!1&&this.history.save()}clearMockup(){this.setMockup(null)}getMockup(){return this.mockup}dispose(){this.masks.dispose(),this.layerMasks.dispose(),this.snapping.dispose(),this.crop.dispose(),this.history.dispose(),this.patterns.dispose(),this.curves.dispose(),this.wrap.dispose(),this.events.removeAllListeners(),this.canvas.dispose()}getSelectionStyle(){return{...this.selectionStyle}}setSelectionStyle(t){this.selectionStyle={...this.selectionStyle,...t},this.refreshSelectionStyle()}refreshSelectionStyle(){bs(this.canvas,this.selectionStyle,this.zoomLevel)}setupCanvasEvents(){this.canvas.on("object:added",e=>{e.target&&Ee(e.target,this.selectionStyle,this.zoomLevel)});let t=()=>{let e=this.canvas.getActiveObject();e&&Ee(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 Sh={mode:"grid",scale:100,horizontalSpacing:0,verticalSpacing:0,angle:0,horizontalOffset:50,offsetX:0,offsetY:0,rotationStepH:0,rotationStepV:0,horizontalLimit:0,verticalLimit:0};var _h=[{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 Fs=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 Dh(Wg);})();
|
|
508
508
|
//# sourceMappingURL=index.global.js.map
|