@overtone-art/canvas-editor-core 0.2.5 → 0.2.7
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/LICENSE +21 -0
- package/dist/chunk-NINRTPOJ.mjs +104 -0
- package/dist/chunk-NINRTPOJ.mjs.map +1 -0
- package/dist/index.d.mts +144 -225
- package/dist/index.d.ts +144 -225
- package/dist/index.global.js +506 -0
- package/dist/index.global.js.map +1 -0
- package/dist/index.js +1109 -94
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1020 -92
- package/dist/index.mjs.map +1 -1
- package/dist/node.d.mts +37 -0
- package/dist/node.d.ts +37 -0
- package/dist/node.js +281 -0
- package/dist/node.js.map +1 -0
- package/dist/node.mjs +233 -0
- package/dist/node.mjs.map +1 -0
- package/dist/types-bOY7oYVq.d.mts +383 -0
- package/dist/types-bOY7oYVq.d.ts +383 -0
- package/package.json +13 -1
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
"use strict";var OvertoneCanvasEditor=(()=>{var Mr=Object.defineProperty;var za=Object.getOwnPropertyDescriptor;var Ha=Object.getOwnPropertyNames;var Ga=Object.prototype.hasOwnProperty;var Na=(i=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(i,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):i)(function(i){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+i+'" is not supported')});var Ua=(i,t)=>{for(var e in t)Mr(i,e,{get:t[e],enumerable:!0})},qa=(i,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Ha(t))!Ga.call(i,s)&&s!==e&&Mr(i,s,{get:()=>t[s],enumerable:!(r=za(t,s))||r.enumerable});return i};var Ka=i=>qa(Mr({},"__esModule",{value:!0}),i);var tu={};Ua(tu,{CANVAS_SIZE_PRESETS:()=>Wa,CanvasEditor:()=>kr,CropController:()=>Ee,DEFAULT_PATTERN_CONFIG:()=>Ya,EventEmitter:()=>Oe,FontRegistry:()=>Le,HistoryManager:()=>Me,Layer:()=>Oi,LayerManager:()=>Pe,LicenseManager:()=>Ie,PatternManager:()=>Ae,ProjectManager:()=>Re,SnapManager:()=>De,UnitConverter:()=>je,applyPatternLocks:()=>mr,buildPatternDataURL:()=>qs,captureLocks:()=>Gs,clamp:()=>bt,clearPatternImageCache:()=>vr,computeCoverPlacement:()=>Qs,computePrintAreaClip:()=>Zs,computeTilePositions:()=>Ks,deserializeEditor:()=>xr,drawTiles:()=>Js,escapeXml:()=>wr,exportDataURL:()=>Sr,exportMockup:()=>_r,exportPNG:()=>br,exportSVG:()=>Cr,generateId:()=>qt,isCssColor:()=>Fe,loadPatternImage:()=>Us,restoreLocks:()=>Ns,round2:()=>q,sanitizeSvg:()=>Tr,serializeEditor:()=>yr});var en=Object.defineProperty,_i=(i,t)=>{let e={};for(var r in i)en(e,r,{get:i[r],enumerable:!0});return t||en(e,Symbol.toStringTag,{value:"Module"}),e};function ui(i){return ui=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},ui(i)}function Ja(i){var t=(function(e,r){if(ui(e)!="object"||!e)return e;var s=e[Symbol.toPrimitive];if(s!==void 0){var n=s.call(e,r||"default");if(ui(n)!="object")return n;throw TypeError("@@toPrimitive must return a primitive value.")}return(r==="string"?String:Number)(e)})(i,"string");return ui(t)=="symbol"?t:t+""}function m(i,t,e){return(t=Ja(t))in i?Object.defineProperty(i,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):i[t]=e,i}var rn=class{constructor(){m(this,"browserShadowBlurConstant",1),m(this,"DPI",96),m(this,"devicePixelRatio",typeof window<"u"?window.devicePixelRatio:1),m(this,"perfLimitSizeTotal",2097152),m(this,"maxCacheSideLimit",4096),m(this,"minCacheSideLimit",256),m(this,"disableStyleCopyPaste",!1),m(this,"enableGLFiltering",!0),m(this,"textureSize",4096),m(this,"forceGLPutImageData",!1),m(this,"cachesBoundsOfCurve",!1),m(this,"fontPaths",{}),m(this,"NUM_FRACTION_DIGITS",4)}},F=new class extends rn{constructor(i){super(),this.configure(i)}configure(i={}){Object.assign(this,i)}addFonts(i={}){this.fontPaths={...this.fontPaths,...i}}removeFonts(i=[]){i.forEach(t=>{delete this.fontPaths[t]})}clearFonts(){this.fontPaths={}}restoreDefaults(i){let t=new rn,e=i?.reduce((r,s)=>(r[s]=t[s],r),{})||t;this.configure(e)}},At=(i,...t)=>console[i]("fabric",...t),St=class extends Error{constructor(i,t){super(`fabric: ${i}`,t)}},Fn=class extends St{constructor(i){super(`${i} 'options.signal' is in 'aborted' state`)}},Za=class{},Qa=class extends Za{testPrecision(i,t){let e=`precision ${t} float;
|
|
2
|
+
void main(){}`,r=i.createShader(i.FRAGMENT_SHADER);return!!r&&(i.shaderSource(r,e),i.compileShader(r),!!i.getShaderParameter(r,i.COMPILE_STATUS))}queryWebGL(i){let t=i.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(),At("log",`WebGL: max texture size ${this.maxTextureSize}`))}isSupported(i){return!!this.maxTextureSize&&this.maxTextureSize>=i}},tl={},sn;var Tt=()=>sn||(sn={document,window,isTouchSupported:"ontouchstart"in window||"ontouchstart"in document||window&&window.navigator&&window.navigator.maxTouchPoints>0,WebGLProbe:new Qa,dispose(){},copyPasteData:tl}),Ce=()=>Tt().document,ie=()=>Tt().window,Ln=()=>{var i;return Math.max((i=F.devicePixelRatio)==null?ie().devicePixelRatio:i,1)},di=new class{constructor(){m(this,"boundsOfCurveCache",{}),this.charWidthsCache=new Map}getFontCache({fontFamily:i,fontStyle:t,fontWeight:e}){i=i.toLowerCase();let r=this.charWidthsCache;r.has(i)||r.set(i,new Map);let s=r.get(i),n=`${t.toLowerCase()}_${(e+"").toLowerCase()}`;return s.has(n)||s.set(n,new Map),s.get(n)}clearFontCache(i){i?this.charWidthsCache.delete((i||"").toLowerCase()):this.charWidthsCache=new Map}limitDimsByArea(i){let{perfLimitSizeTotal:t}=F,e=Math.sqrt(t*i);return[Math.floor(e),Math.floor(t/e)]}},Yr="7.4.0";function Bi(){}var Vt=Math.PI/2,el=Math.PI/4,vt=2*Math.PI,ps=Math.PI/180,et=Object.freeze([1,0,0,1,0,0]),L="center",V="left",In="bottom",ft="right",er="none",fs=/\r?\n/,Rn="moving",ir="scaling",Bn="rotating",Xn="rotate",$n="skewing",vi="resizing",Yn="modifyPoly",Hi="changed",Wn="scale",zt="scaleX",Ht="scaleY",Se="skewX",we="skewY",it="fill",Ot="stroke",Vn="modified",nn="normal",he="json",w=new class{constructor(){this[he]=new Map,this.svg=new Map}has(i){return this[he].has(i)}getClass(i){let t=this[he].get(i);if(!t)throw new St(`No class registered for ${i}`);return t}setClass(i,t){t?this[he].set(t,i):(this[he].set(i.type,i),this[he].set(i.type.toLowerCase(),i))}getSVGClass(i){return this.svg.get(i)}setSVGClass(i,t){this.svg.set(t??i.type.toLowerCase(),i)}},Gi=new class extends Array{remove(i){let t=this.indexOf(i);t>-1&&this.splice(t,1)}cancelAll(){let i=this.splice(0);return i.forEach(t=>t.abort()),i}cancelByCanvas(i){if(!i)return[];let t=this.filter(e=>{var r;return e.target===i||typeof e.target=="object"&&((r=e.target)==null?void 0:r.canvas)===i});return t.forEach(e=>e.abort()),t}cancelByTarget(i){if(!i)return[];let t=this.filter(e=>e.target===i);return t.forEach(e=>e.abort()),t}},il=class{constructor(){m(this,"__eventListeners",{})}on(i,t){if(this.__eventListeners||(this.__eventListeners={}),typeof i=="object")return Object.entries(i).forEach(([e,r])=>{this.on(e,r)}),()=>this.off(i);if(t){let e=i;return this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t),()=>this.off(e,t)}return()=>!1}once(i,t){if(typeof i=="object"){let e=[];return Object.entries(i).forEach(([r,s])=>{e.push(this.once(r,s))}),()=>e.forEach(r=>r())}if(t){let e=this.on(i,function(...r){t.call(this,...r),e()});return e}return()=>!1}_removeEventListener(i,t){if(this.__eventListeners[i])if(t){let e=this.__eventListeners[i],r=e.indexOf(t);r>-1&&e.splice(r,1)}else this.__eventListeners[i]=[]}off(i,t){if(this.__eventListeners)if(i===void 0)for(let e in this.__eventListeners)this._removeEventListener(e);else typeof i=="object"?Object.entries(i).forEach(([e,r])=>{this._removeEventListener(e,r)}):this._removeEventListener(i,t)}fire(i,t){var e;if(!this.__eventListeners)return;let r=(e=this.__eventListeners[i])==null?void 0:e.concat();if(r)for(let s=0;s<r.length;s++)r[s].call(this,t||{})}},Kt=(i,t)=>{let e=i.indexOf(t);return e!==-1&&i.splice(e,1),i},yt=i=>{if(i===0)return 1;switch(Math.abs(i)/Vt){case 1:case 3:return 0;case 2:return-1}return Math.cos(i)},xt=i=>{if(i===0)return 0;let t=i/Vt,e=Math.sign(i);switch(t){case 1:return e;case 2:return 0;case 3:return-e}return Math.sin(i)},y=class J{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 J(this.x+t.x,this.y+t.y)}addEquals(t){return this.x+=t.x,this.y+=t.y,this}scalarAdd(t){return new J(this.x+t,this.y+t)}scalarAddEquals(t){return this.x+=t,this.y+=t,this}subtract(t){return new J(this.x-t.x,this.y-t.y)}subtractEquals(t){return this.x-=t.x,this.y-=t.y,this}scalarSubtract(t){return new J(this.x-t,this.y-t)}scalarSubtractEquals(t){return this.x-=t,this.y-=t,this}multiply(t){return new J(this.x*t.x,this.y*t.y)}scalarMultiply(t){return new J(this.x*t,this.y*t)}scalarMultiplyEquals(t){return this.x*=t,this.y*=t,this}divide(t){return new J(this.x/t.x,this.y/t.y)}scalarDivide(t){return new J(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 J(this.x+(t.x-this.x)*e,this.y+(t.y-this.y)*e)}distanceFrom(t){let e=this.x-t.x,r=this.y-t.y;return Math.sqrt(e*e+r*r)}midPointFrom(t){return this.lerp(t)}min(t){return new J(Math.min(this.x,t.x),Math.min(this.y,t.y))}max(t){return new J(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,r=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=r}clone(){return new J(this.x,this.y)}rotate(t,e=ms){let r=xt(t),s=yt(t),n=this.subtract(e);return new J(n.x*s-n.y*r,n.x*r+n.y*s).add(e)}transform(t,e=!1){return new J(t[0]*this.x+t[2]*this.y+(e?0:t[4]),t[1]*this.x+t[3]*this.y+(e?0:t[5]))}},ms=new y(0,0),Xi=i=>!!i&&Array.isArray(i._objects);function zn(i){class t extends i{constructor(...r){super(...r),m(this,"_objects",[])}_onObjectAdded(r){}_onObjectRemoved(r){}_onStackOrderChanged(r){}add(...r){let s=this._objects.push(...r);return r.forEach(n=>this._onObjectAdded(n)),s}insertAt(r,...s){return this._objects.splice(r,0,...s),s.forEach(n=>this._onObjectAdded(n)),this._objects.length}remove(...r){let s=this._objects,n=[];return r.forEach(o=>{let a=s.indexOf(o);a!==-1&&(s.splice(a,1),n.push(o),this._onObjectRemoved(o))}),n}forEachObject(r){this.getObjects().forEach((s,n,o)=>r(s,n,o))}getObjects(...r){return r.length===0?[...this._objects]:this._objects.filter(s=>s.isType(...r))}item(r){return this._objects[r]}isEmpty(){return this._objects.length===0}size(){return this._objects.length}contains(r,s){return!!this._objects.includes(r)||!!s&&this._objects.some(n=>n instanceof t&&n.contains(r,!0))}complexity(){return this._objects.reduce((r,s)=>r+=s.complexity?s.complexity():0,0)}sendObjectToBack(r){return!(!r||r===this._objects[0])&&(Kt(this._objects,r),this._objects.unshift(r),this._onStackOrderChanged(r),!0)}bringObjectToFront(r){return!(!r||r===this._objects[this._objects.length-1])&&(Kt(this._objects,r),this._objects.push(r),this._onStackOrderChanged(r),!0)}sendObjectBackwards(r,s){if(!r)return!1;let n=this._objects.indexOf(r);if(n!==0){let o=this.findNewLowerIndex(r,n,s);return Kt(this._objects,r),this._objects.splice(o,0,r),this._onStackOrderChanged(r),!0}return!1}bringObjectForward(r,s){if(!r)return!1;let n=this._objects.indexOf(r);if(n!==this._objects.length-1){let o=this.findNewUpperIndex(r,n,s);return Kt(this._objects,r),this._objects.splice(o,0,r),this._onStackOrderChanged(r),!0}return!1}moveObjectTo(r,s){return r!==this._objects[s]&&(Kt(this._objects,r),this._objects.splice(s,0,r),this._onStackOrderChanged(r),!0)}findNewLowerIndex(r,s,n){let o;if(n){o=s;for(let a=s-1;a>=0;--a)if(r.isOverlapping(this._objects[a])){o=a;break}}else o=s-1;return o}findNewUpperIndex(r,s,n){let o;if(n){o=s;for(let a=s+1;a<this._objects.length;++a)if(r.isOverlapping(this._objects[a])){o=a;break}}else o=s+1;return o}collectObjects({left:r,top:s,width:n,height:o},{includeIntersecting:a=!0}={}){let l=[],h=new y(r,s),c=h.add(new y(n,o));for(let u=this._objects.length-1;u>=0;u--){let d=this._objects[u];d.selectable&&d.visible&&(a&&d.intersectsWithRect(h,c)||d.isContainedWithinRect(h,c)||a&&d.containsPoint(h)||a&&d.containsPoint(c))&&l.push(d)}return l}}return t}var Hn=class extends il{_setOptions(i={}){for(let t in i)this.set(t,i[t])}_setObject(i){for(let t in i)this._set(t,i[t])}set(i,t){return typeof i=="object"?this._setObject(i):this._set(i,t),this}_set(i,t){this[i]=t}toggle(i){let t=this.get(i);return typeof t=="boolean"&&this.set(i,!t),this}get(i){return this[i]}};function gi(i){return ie().requestAnimationFrame(i)}function Gn(i){return ie().cancelAnimationFrame(i)}var rl=0,Wt=()=>rl++,kt=()=>{let i=Ce().createElement("canvas");if(!i||i.getContext===void 0)throw new St("Failed to create `canvas` element");return i},Nn=()=>Ce().createElement("img"),sl=i=>{var t;let e=at(i);return(t=e.getContext("2d"))==null||t.drawImage(i,0,0),e},at=i=>{let t=kt();return t.width=i.width,t.height=i.height,t},vs=(i,t,e)=>i.toDataURL(`image/${t}`,e),ys=(i,t,e)=>new Promise((r,s)=>{i.toBlob(r,`image/${t}`,e)}),X=i=>i*ps,jt=i=>i/ps,Un=i=>i.every((t,e)=>t===et[e]),N=(i,t,e)=>new y(i).transform(t,e),rt=i=>{let t=1/(i[0]*i[3]-i[1]*i[2]),e=[t*i[3],-t*i[1],-t*i[2],t*i[0],0,0],{x:r,y:s}=new y(i[4],i[5]).transform(e,!0);return e[4]=-r,e[5]=-s,e},$=(i,t,e)=>[i[0]*t[0]+i[2]*t[1],i[1]*t[0]+i[3]*t[1],i[0]*t[2]+i[2]*t[3],i[1]*t[2]+i[3]*t[3],e?0:i[0]*t[4]+i[2]*t[5]+i[4],e?0:i[1]*t[4]+i[3]*t[5]+i[5]],rr=(i,t)=>i.reduceRight((e,r)=>r&&e?$(r,e,t):r||e,void 0)||et.concat(),xs=([i,t])=>Math.atan2(t,i),bs=([i,t])=>Math.sqrt(i*i+t*t),qn=([,,i,t])=>Math.sqrt(i*i+t*t),re=i=>{let t=xs(i),e=i[0]**2+i[1]**2,r=Math.sqrt(e),s=(i[0]*i[3]-i[2]*i[1])/r,n=Math.atan2(i[0]*i[2]+i[1]*i[3],e);return{angle:jt(t),scaleX:r,scaleY:s,skewX:jt(n),skewY:0,translateX:i[4]||0,translateY:i[5]||0}},Te=(i,t=0)=>[1,0,0,1,i,t];function ne({angle:i=0}={},{x:t=0,y:e=0}={}){let r=X(i),s=yt(r),n=xt(r);return[s,n,-n,s,t?t-(s*t-n*e):0,e?e-(n*t+s*e):0]}var sr=(i,t=i)=>[i,0,0,t,0,0],Kn=i=>Math.tan(X(i)),_s=i=>[1,0,Kn(i),1,0,0],Cs=i=>[1,Kn(i),0,1,0,0],Ci=({scaleX:i=1,scaleY:t=1,flipX:e=!1,flipY:r=!1,skewX:s=0,skewY:n=0})=>{let o=sr(e?-i:i,r?-t:t);return s&&(o=$(o,_s(s),!0)),n&&(o=$(o,Cs(n),!0)),o},Jn=i=>{let{translateX:t=0,translateY:e=0,angle:r=0}=i,s=Te(t,e);r&&(s=$(s,ne({angle:r})));let n=Ci(i);return Un(n)||(s=$(s,n)),s},pi=(i,{signal:t,crossOrigin:e=null}={})=>new Promise(function(r,s){if(t&&t.aborted)return s(new Fn("loadImage"));let n=Nn(),o;t&&(o=function(l){n.src="",s(l)},t.addEventListener("abort",o,{once:!0}));let a=function(){n.onload=n.onerror=null,o&&t?.removeEventListener("abort",o),r(n)};i?(n.onload=a,n.onerror=function(){o&&t?.removeEventListener("abort",o),s(new St(`Error loading ${n.src}`))},e&&(n.crossOrigin=e),n.src=i):a()}),ye=(i,{signal:t,reviver:e=Bi}={})=>new Promise((r,s)=>{let n=[];t&&t.addEventListener("abort",s,{once:!0}),Promise.allSettled(i.map(o=>w.getClass(o.type).fromObject(o,{signal:t}))).then(async o=>{for(let[a,l]of o.entries())if(l.status==="fulfilled"&&(await e(i[a],l.value),n.push(l.value)),l.status==="rejected"){let h=await e(i[a],void 0,l.reason);h&&n.push(h)}r(n)}).catch(o=>{n.forEach(a=>{a.dispose&&a.dispose()}),s(o)}).finally(()=>{t&&t.removeEventListener("abort",s)})}),Si=(i,{signal:t}={})=>new Promise((e,r)=>{let s=[];t&&t.addEventListener("abort",r,{once:!0});let n=Object.values(i).map(a=>a&&a.type&&w.has(a.type)?ye([a],{signal:t}).then(([l])=>(s.push(l),l)):a),o=Object.keys(i);Promise.all(n).then(a=>a.reduce((l,h,c)=>(l[o[c]]=h,l),{})).then(e).catch(a=>{s.forEach(l=>{l.dispose&&l.dispose()}),r(a)}).finally(()=>{t&&t.removeEventListener("abort",r)})}),oe=(i,t=[])=>t.reduce((e,r)=>(r in i&&(e[r]=i[r]),e),{}),Ss=(i,t)=>Object.keys(i).reduce((e,r)=>(t(i[r],r,i)&&(e[r]=i[r]),e),{}),R=(i,t)=>parseFloat(Number(i).toFixed(t)),xe=i=>"matrix("+i.map(t=>R(t,F.NUM_FRACTION_DIGITS)).join(" ")+")",ut=i=>!!i&&i.toLive!==void 0,on=i=>!!i&&typeof i.toObject=="function",an=i=>!!i&&i.offsetX!==void 0&&"source"in i,Jt=i=>!!i&&"multiSelectionStacking"in i;function Zn(i){let t=i&>(i),e=0,r=0;if(!i||!t)return{left:e,top:r};let s=i,n=t.documentElement,o=t.body||{scrollLeft:0,scrollTop:0};for(;s&&(s.parentNode||s.host)&&(s=s.parentNode||s.host,s===t?(e=o.scrollLeft||n.scrollLeft||0,r=o.scrollTop||n.scrollTop||0):(e+=s.scrollLeft||0,r+=s.scrollTop||0),s.nodeType!==1||s.style.position!=="fixed"););return{left:e,top:r}}var gt=i=>i.ownerDocument||null,Qn=i=>{var t;return((t=i.ownerDocument)==null?void 0:t.defaultView)||null},to=(i,t,{width:e,height:r},s=1)=>{i.width=e,i.height=r,s>1&&(i.setAttribute("width",(e*s).toString()),i.setAttribute("height",(r*s).toString()),t.scale(s,s))},Wr=(i,{width:t,height:e})=>{t&&(i.style.width=typeof t=="number"?`${t}px`:t),e&&(i.style.height=typeof e=="number"?`${e}px`:e)};function ln(i){return i.onselectstart!==void 0&&(i.onselectstart=()=>!1),i.style.userSelect=er,i}var eo=class{constructor(i){m(this,"_originalCanvasStyle",void 0),m(this,"lower",void 0);let t=this.createLowerCanvas(i);this.lower={el:t,ctx:t.getContext("2d")}}createLowerCanvas(i){let t=(e=i)&&e.getContext!==void 0?i:i&&Ce().getElementById(i)||kt();var e;if(t.hasAttribute("data-fabric"))throw new St("Trying to initialize a canvas that has already been initialized. Did you forget to dispose the canvas?");return this._originalCanvasStyle=t.style.cssText,t.setAttribute("data-fabric","main"),t.classList.add("lower-canvas"),t}cleanupDOM({width:i,height:t}){let{el:e}=this.lower;e.classList.remove("lower-canvas"),e.removeAttribute("data-fabric"),e.setAttribute("width",`${i}`),e.setAttribute("height",`${t}`),e.style.cssText=this._originalCanvasStyle||"",this._originalCanvasStyle=void 0}setDimensions(i,t){let{el:e,ctx:r}=this.lower;to(e,r,i,t)}setCSSDimensions(i){Wr(this.lower.el,i)}calcOffset(){return(function(i){var t;let e=i&>(i),r={left:0,top:0};if(!e)return r;let s=((t=Qn(i))==null?void 0:t.getComputedStyle(i,null))||{};r.left+=parseInt(s.borderLeftWidth,10)||0,r.top+=parseInt(s.borderTopWidth,10)||0,r.left+=parseInt(s.paddingLeft,10)||0,r.top+=parseInt(s.paddingTop,10)||0;let n={left:0,top:0},o=e.documentElement;i.getBoundingClientRect!==void 0&&(n=i.getBoundingClientRect());let a=Zn(i);return{left:n.left+a.left-(o.clientLeft||0)+r.left,top:n.top+a.top-(o.clientTop||0)+r.top}})(this.lower.el)}dispose(){Tt().dispose(this.lower.el),delete this.lower}},nl={backgroundVpt:!0,backgroundColor:"",overlayVpt:!0,overlayColor:"",includeDefaultValues:!0,svgViewportTransformation:!0,renderOnAddRemove:!0,skipOffscreen:!0,enableRetinaScaling:!0,imageSmoothingEnabled:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,viewportTransform:[...et],patternQuality:"best"},ol=_i({capitalize:()=>al,escapeXml:()=>M,graphemeSplit:()=>nr}),al=(i,t=!1)=>`${i.charAt(0).toUpperCase()}${t?i.slice(1):i.slice(1).toLowerCase()}`,M=i=>i.toString().replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">"),We,nr=i=>{if(We||We||(We="Intl"in ie()&&"Segmenter"in Intl&&new Intl.Segmenter(void 0,{granularity:"grapheme"})),We){let t=We.segment(i);return Array.from(t).map(({segment:e})=>e)}return ll(i)},ll=i=>{let t=[];for(let e,r=0;r<i.length;r++)(e=hl(i,r))!==!1&&t.push(e);return t},hl=(i,t)=>{let e=i.charCodeAt(t);if(isNaN(e))return"";if(e<55296||e>57343)return i.charAt(t);if(55296<=e&&e<=56319){if(i.length<=t+1)throw"High surrogate without following low surrogate";let s=i.charCodeAt(t+1);if(56320>s||s>57343)throw"High surrogate without following low surrogate";return i.charAt(t)+i.charAt(t+1)}if(t===0)throw"Low surrogate without preceding high surrogate";let r=i.charCodeAt(t-1);if(55296>r||r>56319)throw"Low surrogate without preceding high surrogate";return!1},ws=class io extends zn(Hn){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 io.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 eo(t)}add(...t){let e=super.add(...t);return t.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),e}insertAt(t,...e){let r=super.insertAt(t,...e);return e.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),r}remove(...t){let e=super.remove(...t);return e.length>0&&this.renderOnAddRemove&&this.requestRenderAll(),e}_onObjectAdded(t){t.canvas&&t.canvas!==this&&(At("warn",`Canvas is trying to add an object that belongs to a different canvas.
|
|
3
|
+
Resulting to default behavior: removing object from previous canvas and adding to new canvas`),t.canvas.remove(t)),t._set("canvas",this),t.setCoords(),this.fire("object:added",{target:t}),t.fire("added",{target:this})}_onObjectRemoved(t){t._set("canvas",void 0),this.fire("object:removed",{target:t}),t.fire("removed",{target:this})}_onStackOrderChanged(){this.renderOnAddRemove&&this.requestRenderAll()}getRetinaScaling(){return this.enableRetinaScaling?Ln():1}calcOffset(){return this._offset=this.elements.calcOffset()}getWidth(){return this.width}getHeight(){return this.height}_setDimensionsImpl(t,{cssOnly:e=!1,backstoreOnly:r=!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}r||this.elements.setCSSDimensions(t),this.calcOffset()}setDimensions(t,e){this._setDimensionsImpl(t,e),e&&e.cssOnly||this.requestRenderAll()}getZoom(){return bs(this.viewportTransform)}setViewportTransform(t){this.viewportTransform=t,this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll()}zoomToPoint(t,e){let r=t,s=[...this.viewportTransform],n=N(t,rt(s));s[0]=e,s[3]=e;let o=N(n,s);s[4]+=r.x-o.x,s[5]+=r.y-o.y,this.setViewportTransform(s)}setZoom(t){this.zoomToPoint(new y(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 y(-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=gi(()=>this.renderAndReset()))}calcViewportBoundaries(){let t=this.width,e=this.height,r=rt(this.viewportTransform),s=N({x:0,y:0},r),n=N({x:t,y:e},r),o=s.min(n),a=s.max(n);return this.vptCoords={tl:o,tr:new y(a.x,o.y),bl:new y(o.x,a.y),br:a}}cancelRequestedRender(){this.nextRenderHandle&&(Gn(this.nextRenderHandle),this.nextRenderHandle=0)}drawControls(t){}renderCanvas(t,e){if(this.destroyed)return;let r=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(r[0],r[1],r[2],r[3],r[4],r[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 r=this.viewportTransform;t.save(),t.transform(...r),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 r=0,s=e.length;r<s;++r)e[r]&&e[r].render(t)}_renderBackgroundOrOverlay(t,e){let r=this[`${e}Color`],s=this[`${e}Image`],n=this.viewportTransform,o=this[`${e}Vpt`];if(!r&&!s)return;let a=ut(r);if(r){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=a?r.toLive(t):r,o&&t.transform(...n),a){t.transform(1,0,0,1,r.offsetX||0,r.offsetY||0);let l=r.gradientTransform||r.patternTransform;l&&t.transform(...l)}t.fill(),t.restore()}if(s){t.save();let{skipOffscreen:l}=this;this.skipOffscreen=o,o&&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 y(this.width/2,this.height/2)}centerObjectH(t){return this._centerObject(t,new y(this.getCenterPoint().x,t.getCenterPoint().y))}centerObjectV(t){return this._centerObject(t,new y(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 y(this.getVpCenter().x,t.getCenterPoint().y))}viewportCenterObjectV(t){return this._centerObject(t,new y(t.getCenterPoint().x,this.getVpCenter().y))}getVpCenter(){return N(this.getCenterPoint(),rt(this.viewportTransform))}_centerObject(t,e){t.setXY(e,L,L),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 r=this.clipPath,s=r&&!r.excludeFromExport?this._toObject(r,t,e):null;return{version:Yr,...oe(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,r){let s;this.includeDefaultValues||(s=t.includeDefaultValues,t.includeDefaultValues=!1);let n=t[e](r);return this.includeDefaultValues||(t.includeDefaultValues=!!s),n}__serializeBgOverlay(t,e){let r={},s=this.backgroundImage,n=this.overlayImage,o=this.backgroundColor,a=this.overlayColor;return ut(o)?o.excludeFromExport||(r.background=o.toObject(e)):o&&(r.background=o),ut(a)?a.excludeFromExport||(r.overlay=a.toObject(e)):a&&(r.overlay=a),s&&!s.excludeFromExport&&(r.backgroundImage=this._toObject(s,t,e)),n&&!n.excludeFromExport&&(r.overlayImage=this._toObject(n,t,e)),r}toSVG(t={},e){t.reviver=e;let r=[];var s;return this._setSVGPreamble(r,t),this._setSVGHeader(r,t),this.clipPath&&r.push(`<g clip-path="url(#${M((s=this.clipPath.clipPathId)==null?"":s)})" >
|
|
4
|
+
`),this._setSVGBgOverlayColor(r,"background"),this._setSVGBgOverlayImage(r,"backgroundImage",e),this._setSVGObjects(r,e),this.clipPath&&r.push(`</g>
|
|
5
|
+
`),this._setSVGBgOverlayColor(r,"overlay"),this._setSVGBgOverlayImage(r,"overlayImage",e),r.push("</svg>"),r.join("")}_setSVGPreamble(t,e){e.suppressPreamble||t.push('<?xml version="1.0" encoding="',e.encoding||"UTF-8",`" standalone="no" ?>
|
|
6
|
+
`,'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ',`"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
7
|
+
`)}_setSVGHeader(t,e){let r=e.width||`${this.width}`,s=e.height||`${this.height}`,n=F.NUM_FRACTION_DIGITS,o=e.viewBox,a;if(o)a=`viewBox="${o.x} ${o.y} ${o.width} ${o.height}" `;else if(this.svgViewportTransformation){let l=this.viewportTransform;a=`viewBox="${R(-l[4]/l[0],n)} ${R(-l[5]/l[3],n)} ${R(this.width/l[0],n)} ${R(this.height/l[3],n)}" `}else a=`viewBox="0 0 ${this.width} ${this.height}" `;t.push("<svg ",'xmlns="http://www.w3.org/2000/svg" ','xmlns:xlink="http://www.w3.org/1999/xlink" ','version="1.1" ','width="',r,'" ','height="',s,'" ',a,`xml:space="preserve">
|
|
8
|
+
`,"<desc>Created with Fabric.js ",Yr,`</desc>
|
|
9
|
+
`,`<defs>
|
|
10
|
+
`,this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(e),`</defs>
|
|
11
|
+
`)}createSVGClipPathMarkup(t){let e=this.clipPath;return e?(e.clipPathId=`CLIPPATH_${Wt()}`,`<clipPath id="${e.clipPathId}" >
|
|
12
|
+
${e.toClipPathSVG(t.reviver)}</clipPath>
|
|
13
|
+
`):""}createSVGRefElementsMarkup(){return["background","overlay"].map(t=>{let e=this[`${t}Color`];if(ut(e)){let r=this[`${t}Vpt`],s=this.viewportTransform,n={isType:()=>!1,width:this.width/(r?s[0]:1),height:this.height/(r?s[3]:1)};return e.toSVG(n,{additionalTransform:r?xe(s):""})}}).join("")}createSVGFontFacesMarkup(){let t=[],e={},r=F.fontPaths;this._objects.forEach(function n(o){t.push(o),Xi(o)&&o._objects.forEach(n)}),t.forEach(n=>{if(!(o=n)||typeof o._renderText!="function")return;var o;let{styles:a,fontFamily:l}=n;!e[l]&&r[l]&&(e[l]=!0,a&&Object.values(a).forEach(h=>{Object.values(h).forEach(({fontFamily:c=""})=>{!e[c]&&r[c]&&(e[c]=!0)})}))});let s=Object.keys(e).map(n=>` @font-face {
|
|
14
|
+
font-family: '${n}';
|
|
15
|
+
src: url('${r[n]}');
|
|
16
|
+
}
|
|
17
|
+
`).join("");return s?` <style type="text/css"><![CDATA[
|
|
18
|
+
${s}]]></style>
|
|
19
|
+
`:""}_setSVGObjects(t,e){this.forEachObject(r=>{r.excludeFromExport||this._setSVGObject(t,r,e)})}_setSVGObject(t,e,r){t.push(e.toSVG(r))}_setSVGBgOverlayImage(t,e,r){let s=this[e];s&&!s.excludeFromExport&&s.toSVG&&t.push(s.toSVG(r))}_setSVGBgOverlayColor(t,e){let r=this[`${e}Color`];if(r)if(ut(r)){let s=r.repeat||"",n=this.width,o=this.height,a=this[`${e}Vpt`]?xe(rt(this.viewportTransform)):"";t.push(`<rect transform="${a} translate(${n/2},${o/2})" x="${r.offsetX-n/2}" y="${r.offsetY-o/2}" width="${s!=="repeat-y"&&s!=="no-repeat"||!an(r)?n:r.source.width}" height="${s!=="repeat-x"&&s!=="no-repeat"||!an(r)?o:r.source.height}" fill="url(#SVGID_${r.id})"></rect>
|
|
20
|
+
`)}else t.push('<rect x="0" y="0" width="100%" height="100%" ','fill="',r,'"',`></rect>
|
|
21
|
+
`)}loadFromJSON(t,e,{signal:r}={}){if(!t)return Promise.reject(new St("`json` is undefined"));let{objects:s=[],...n}=typeof t=="string"?JSON.parse(t):t,{backgroundImage:o,background:a,overlayImage:l,overlay:h,clipPath:c}=n,u=this.renderOnAddRemove;return this.renderOnAddRemove=!1,Promise.all([ye(s,{reviver:e,signal:r}),Si({backgroundImage:o,backgroundColor:a,overlayImage:l,overlayColor:h,clipPath:c},{signal:r})]).then(([d,g])=>(this.clear(),this.add(...d),this.set(n),this.set(g),this.renderOnAddRemove=u,this))}clone(t){let e=this.toObject(t);return this.cloneWithoutData().loadFromJSON(e)}cloneWithoutData(){let t=at(this);return new this.constructor(t)}toDataURL(t={}){let{format:e="png",quality:r=1,multiplier:s=1,enableRetinaScaling:n=!1}=t,o=s*(n?this.getRetinaScaling():1);return vs(this.toCanvasElement(o,t),e,r)}toBlob(t={}){let{format:e="png",quality:r=1,multiplier:s=1,enableRetinaScaling:n=!1}=t,o=s*(n?this.getRetinaScaling():1);return ys(this.toCanvasElement(o,t),e,r)}toCanvasElement(t=1,{width:e,height:r,left:s,top:n,filter:o}={}){let a=(e||this.width)*t,l=(r||this.height)*t,h=this.getZoom(),c=this.width,u=this.height,d=this.skipControlsDrawing,g=h*t,p=this.viewportTransform,f=[g,0,0,g,(p[4]-(s||0))*t,(p[5]-(n||0))*t],v=this.enableRetinaScaling,x=at({width:a,height:l}),b=o?this._objects.filter(_=>o(_)):this._objects;return this.enableRetinaScaling=!1,this.viewportTransform=f,this.width=a,this.height=l,this.skipControlsDrawing=!0,this.calcViewportBoundaries(),this.renderCanvas(x.getContext("2d"),b),this.viewportTransform=p,this.width=c,this.height=u,this.calcViewportBoundaries(),this.enableRetinaScaling=v,this.skipControlsDrawing=d,x}dispose(){return!this.disposed&&this.elements.cleanupDOM({width:this.width,height:this.height}),Gi.cancelByCanvas(this),this.disposed=!0,new Promise((t,e)=>{let r=()=>{this.destroy(),t(!0)};r.kill=e,this.__cleanupTask&&this.__cleanupTask.kill("aborted"),this.destroyed?t(!1):this.nextRenderHandle?this.__cleanupTask=r:r()})}destroy(){this.destroyed=!0,this.cancelRequestedRender(),this.forEachObject(t=>t.dispose()),this._objects=[],this.backgroundImage&&this.backgroundImage.dispose(),this.backgroundImage=void 0,this.overlayImage&&this.overlayImage.dispose(),this.overlayImage=void 0,this.elements.dispose()}toString(){return`#<Canvas (${this.complexity()}): { objects: ${this._objects.length} }>`}};m(ws,"ownDefaults",nl);var cl=["touchstart","touchmove","touchend"],ro=i=>{let t=Zn(i.target),e=(function(r){let s=r.changedTouches;return s&&s[0]?s[0]:r})(i);return new y(e.clientX+t.left,e.clientY+t.top)},Ni=i=>cl.includes(i.type)||i.pointerType==="touch",hn=i=>{i.preventDefault(),i.stopPropagation()},wt=i=>{let t=0,e=0,r=0,s=0;for(let n=0,o=i.length;n<o;n++){let{x:a,y:l}=i[n];(a>r||!n)&&(r=a),(a<t||!n)&&(t=a),(l>s||!n)&&(s=l),(l<e||!n)&&(e=l)}return{left:t,top:e,width:r-t,height:s-e}},ul=(i,t)=>{be(i,$(rt(t),i.calcOwnMatrix()))},so=(i,t)=>be(i,$(t,i.calcOwnMatrix())),be=(i,t)=>{let{translateX:e,translateY:r,scaleX:s,scaleY:n,...o}=re(t),a=new y(e,r);i.flipX=!1,i.flipY=!1,Object.assign(i,o),i.set({scaleX:s,scaleY:n}),i.setPositionByOrigin(a,L,L)},no=i=>{i.scaleX=1,i.scaleY=1,i.skewX=0,i.skewY=0,i.flipX=!1,i.flipY=!1,i.rotate(0)},Ts=i=>({scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,angle:i.angle,left:i.left,flipX:i.flipX,flipY:i.flipY,top:i.top}),or=(i,t,e)=>{let r=i/2,s=t/2,n=wt([new y(-r,-s),new y(r,-s),new y(-r,s),new y(r,s)].map(o=>o.transform(e)));return new y(n.width,n.height)},wi=(i=et,t=et)=>$(rt(t),i),Ft=(i,t=et,e=et)=>i.transform(wi(t,e)),oo=(i,t=et,e=et)=>i.transform(wi(t,e),!0),Os=(i,t,e)=>{let r=wi(t,e);return be(i,$(r,i.calcOwnMatrix())),r},dl={left:-.5,top:-.5,center:0,bottom:.5,right:.5},Q=i=>typeof i=="string"?dl[i]:i-.5,gl=new y(1,0),ao=new y,ks=(i,t)=>i.rotate(t),yi=(i,t)=>new y(t).subtract(i),Ui=i=>i.distanceFrom(ao),qi=(i,t)=>Math.atan2(ve(i,t),lo(i,t)),Ps=i=>qi(gl,i),ar=i=>i.eq(ao)?i:i.scalarDivide(Ui(i)),Ms=(i,t=!0)=>ar(new y(-i.y,i.x).scalarMultiply(t?1:-1)),ve=(i,t)=>i.x*t.y-i.y*t.x,lo=(i,t)=>i.x*t.x+i.y*t.y,Vr=(i,t,e)=>{if(i.eq(t)||i.eq(e))return!0;let r=ve(t,e),s=ve(t,i),n=ve(e,i);return r>=0?s>=0&&n<=0:!(s<=0&&n>=0)},Ds="not-allowed";function ho(i){return Q(i.originX)===Q("center")&&Q(i.originY)===Q("center")}function cn(i){return .5-Q(i)}var mt=(i,t)=>i[t],Es=(i,t,e,r)=>({e:i,transform:t,pointer:new y(e,r)});function co(i,t,e){let r=e,s=Ps(yi(Ft(i.getCenterPoint(),i.canvas.viewportTransform,void 0),r))+vt;return Math.round(s%vt/el)}function lr({target:i,corner:t},e,r,s,n){var o;let a=i.controls[t],l=((o=i.canvas)==null?void 0:o.getZoom())||1,h=i.padding/l,c=(function(u,d,g,p){let f=u.getRelativeCenterPoint(),v=g!==void 0&&p!==void 0?u.translateToGivenOrigin(f,L,L,g,p):new y(u.left,u.top);return(u.angle?d.rotate(-X(u.angle),f):d).subtract(v)})(i,new y(s,n),e,r);return c.x>=h&&(c.x-=h),c.x<=-h&&(c.x+=h),c.y>=h&&(c.y-=h),c.y<=h&&(c.y+=h),c.x-=a.offsetX,c.y-=a.offsetY,c}var pl=new RegExp(String.raw`[\0-\x1F\x7F;<>\\]|\/\*|\*\/|url\s*\(|expression\s*\(|(?:java|vb)script\s*:|data\s*:|@import\b`,"iu"),hr=i=>typeof i=="string"&&i.trim().length>0&&!pl.test(i),Zt=(i,t="")=>{let e=Number(i);return Number.isFinite(e)?`${e}`:t},Qt=(i,t="")=>typeof i=="string"&&hr(i)?i:t,Ki=i=>i.replace(/\s+/g," "),un={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#0FF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000",blanchedalmond:"#FFEBCD",blue:"#00F",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#0FF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",darkgreen:"#006400",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#F0F",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",lightgreen:"#90EE90",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#789",lightslategrey:"#789",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#0F0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#F0F",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#639",red:"#F00",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFF",whitesmoke:"#F5F5F5",yellow:"#FF0",yellowgreen:"#9ACD32"},Dr=(i,t,e)=>(e<0&&(e+=1),e>1&&--e,e<1/6?i+6*(t-i)*e:e<.5?t:e<2/3?i+(t-i)*(2/3-e)*6:i),dn=(i,t,e,r)=>{i/=255,t/=255,e/=255;let s=Math.max(i,t,e),n=Math.min(i,t,e),o,a,l=(s+n)/2;if(s===n)o=a=0;else{let h=s-n;switch(a=l>.5?h/(2-s-n):h/(s+n),s){case i:o=(t-e)/h+(t<e?6:0);break;case t:o=(e-i)/h+2;break;case e:o=(i-t)/h+4}o/=6}return[Math.round(360*o),Math.round(100*a),Math.round(100*l),r]},gn=(i="1")=>parseFloat(i)/(i.endsWith("%")?100:1),Pi=i=>Math.min(Math.round(i),255).toString(16).toUpperCase().padStart(2,"0"),pn=([i,t,e,r=1])=>{let s=Math.round(.3*i+.59*t+.11*e);return[s,s,s,r]},lt=class G{constructor(t){if(m(this,"isUnrecognised",!1),t)if(t instanceof G)this.setSource([...t._source]);else if(Array.isArray(t)){let[e,r,s,n=1]=t;this.setSource([e,r,s,n])}else this.setSource(this._tryParsingColor(t));else this.setSource([0,0,0,1])}_tryParsingColor(t){return(t=t.toLowerCase())in un&&(t=un[t]),t==="transparent"?[255,255,255,0]:G.sourceFromHex(t)||G.sourceFromRgb(t)||G.sourceFromHsl(t)||(this.isUnrecognised=!0)&&[0,0,0,1]}getSource(){return this._source}setSource(t){this._source=t}toRgb(){let[t,e,r]=this.getSource();return`rgb(${t},${e},${r})`}toRgba(){return`rgba(${this.getSource().join(",")})`}toHsl(){let[t,e,r]=dn(...this.getSource());return`hsl(${t},${e}%,${r}%)`}toHsla(){let[t,e,r,s]=dn(...this.getSource());return`hsla(${t},${e}%,${r}%,${s})`}toHex(){return this.toHexa().slice(0,6)}toHexa(){let[t,e,r,s]=this.getSource();return`${Pi(t)}${Pi(e)}${Pi(r)}${Pi(Math.round(255*s))}`}getAlpha(){return this.getSource()[3]}setAlpha(t){return this._source[3]=t,this}toGrayscale(){return this.setSource(pn(this.getSource())),this}toBlackWhite(t){let[e,,,r]=pn(this.getSource()),s=e<(t||127)?0:255;return this.setSource([s,s,s,r]),this}overlayWith(t){t instanceof G||(t=new G(t));let e=this.getSource(),r=t.getSource(),[s,n,o]=e.map((a,l)=>Math.round(.5*a+.5*r[l]));return this.setSource([s,n,o,e[3]]),this}static fromRgb(t){return G.fromRgba(t)}static fromRgba(t){return new G(G.sourceFromRgb(t))}static sourceFromRgb(t){let e=Ki(t).match(/^rgba?\(\s?(\d{0,3}(?:\.\d+)?%?)\s?[\s|,]\s?(\d{0,3}(?:\.\d+)?%?)\s?[\s|,]\s?(\d{0,3}(?:\.\d+)?%?)\s?(?:\s?[,/]\s?(\d{0,3}(?:\.\d+)?%?)\s?)?\)$/i);if(e){let[r,s,n]=e.slice(1,4).map(o=>{let a=parseFloat(o);return o.endsWith("%")?Math.round(2.55*a):a});return[r,s,n,gn(e[4])]}}static fromHsl(t){return G.fromHsla(t)}static fromHsla(t){return new G(G.sourceFromHsl(t))}static sourceFromHsl(t){let e=Ki(t).match(/^hsla?\(\s?([+-]?\d{0,3}(?:\.\d+)?(?:deg|turn|rad)?)\s?[\s|,]\s?(\d{0,3}(?:\.\d+)?%?)\s?[\s|,]\s?(\d{0,3}(?:\.\d+)?%?)\s?(?:\s?[,/]\s?(\d*(?:\.\d+)?%?)\s?)?\)$/i);if(!e)return;let r=(G.parseAngletoDegrees(e[1])%360+360)%360/360,s=parseFloat(e[2])/100,n=parseFloat(e[3])/100,o,a,l;if(s===0)o=a=l=n;else{let h=n<=.5?n*(s+1):n+s-n*s,c=2*n-h;o=Dr(c,h,r+1/3),a=Dr(c,h,r),l=Dr(c,h,r-1/3)}return[Math.round(255*o),Math.round(255*a),Math.round(255*l),gn(e[4])]}static fromHex(t){return new G(G.sourceFromHex(t))}static sourceFromHex(t){if(t.match(/^#?(([0-9a-f]){3,4}|([0-9a-f]{2}){3,4})$/i)){let e=t.slice(t.indexOf("#")+1),r;r=e.length<=4?e.split("").map(l=>l+l):e.match(/.{2}/g);let[s,n,o,a=255]=r.map(l=>parseInt(l,16));return[s,n,o,a/255]}}static parseAngletoDegrees(t){let e=t.toLowerCase(),r=parseFloat(e);return e.includes("rad")?jt(r):e.includes("turn")?360*r:r}},fl=i=>{let t=["instantiated_by_use","style","id","class"];switch(i){case"linearGradient":return t.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);case"radialGradient":return t.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);case"stop":return t.concat(["offset","stop-color","stop-opacity"])}return t},Z=(i,t=16)=>{let e=/\D{0,2}$/.exec(i),r=parseFloat(i),s=F.DPI;switch(e?.[0]){case"mm":return r*s/25.4;case"cm":return r*s/2.54;case"in":return r*s;case"pt":return r*s/72;case"pc":return r*s/72*12;case"em":return r*t;default:return r}},As=i=>{let[t,e]=i.trim().split(" "),[r,s]=(n=t)&&n!=="none"?[n.slice(1,4),n.slice(5,8)]:n==="none"?[n,n]:["Mid","Mid"];var n;return{meetOrSlice:e||"meet",alignX:r,alignY:s}},xi=(i,t,e=!0)=>{let r,s;if(t)if(t.toLive)r=`url(#SVGID_${M(t.id)})`;else{let n=String(t);if(hr(n)){let o=new lt(n),a=o.getAlpha();r=o.toRgb(),a!==1&&(s=a.toString())}else r=new lt("black").toRgb()}else r="none";return e?`${i}: ${r}; ${s?`${i}-opacity: ${s}; `:""}`:`${i}="${r}" ${s?`${i}-opacity="${s}" `:""}`},uo=class{getSvgStyles(i){let t=this.fillRule==null?"nonzero":Qt(this.fillRule),e=this.strokeWidth==null?"0":Zt(this.strokeWidth),r=this.strokeDashArray==null?er:this.strokeDashArray.every(d=>Number.isFinite(Number(d)))?this.strokeDashArray.join(" "):"",s=this.strokeDashOffset==null?"0":Zt(this.strokeDashOffset),n=this.strokeLineCap==null?"butt":Qt(this.strokeLineCap),o=this.strokeLineJoin==null?"miter":Qt(this.strokeLineJoin),a=this.strokeMiterLimit==null?"4":Zt(this.strokeMiterLimit),l=this.opacity==null?"1":Zt(this.opacity),h=this.visible?"":" visibility: hidden;",c=i?"":this.getSvgFilter(),u=xi(it,this.fill);return[xi(Ot,this.stroke),e?`stroke-width: ${e}; `:"",r?`stroke-dasharray: ${r}; `:"",n?`stroke-linecap: ${n}; `:"",s?`stroke-dashoffset: ${s}; `:"",o?`stroke-linejoin: ${o}; `:"",a?`stroke-miterlimit: ${a}; `:"",u,t?`fill-rule: ${t}; `:"",l?`opacity: ${l};`:"",c,h].map(d=>M(d)).join("")}getSvgFilter(){return this.shadow?`filter: url(#SVGID_${M(this.shadow.id)});`:""}getSvgCommons(){return[this.id?`id="${M(String(this.id))}" `:"",this.clipPath?`clip-path="url(#${M(this.clipPath.clipPathId)})" `:""].join("")}getSvgTransform(i,t=""){return`transform="${xe(i?this.calcTransformMatrix():this.calcOwnMatrix())}${t}" `}_toSVG(i){return[""]}toSVG(i){return this._createBaseSVGMarkup(this._toSVG(i),{reviver:i})}toClipPathSVG(i){return" "+this._createBaseClipPathSVGMarkup(this._toSVG(i),{reviver:i})}_createBaseClipPathSVGMarkup(i,{reviver:t,additionalTransform:e=""}={}){let r=[this.getSvgTransform(!0,e),this.getSvgCommons()].join(""),s=i.indexOf("COMMON_PARTS");return i[s]=r,t?t(i.join("")):i.join("")}_createBaseSVGMarkup(i,{noStyle:t,reviver:e,withShadow:r,additionalTransform:s}={}){let n=t?"":`style="${this.getSvgStyles()}" `,o=r?`style="${this.getSvgFilter()}" `:"",a=this.clipPath,l=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",h=a&&a.absolutePositioned,c=this.stroke,u=this.fill,d=this.shadow,g=[],p=i.indexOf("COMMON_PARTS"),f;return a&&(a.clipPathId=`CLIPPATH_${Wt()}`,f=`<clipPath id="${a.clipPathId}" >
|
|
22
|
+
${a.toClipPathSVG(e)}</clipPath>
|
|
23
|
+
`),h&&g.push("<g ",o,this.getSvgCommons(),` >
|
|
24
|
+
`),g.push("<g ",this.getSvgTransform(!1),h?"":o+this.getSvgCommons(),` >
|
|
25
|
+
`),i[p]=[n,l,t?"":this.addPaintOrder()," ",s?`transform="${s}" `:""].join(""),ut(u)&&g.push(u.toSVG(this)),ut(c)&&g.push(c.toSVG(this)),d&&g.push(d.toSVG(this)),a&&g.push(f),g.push(i.join("")),g.push(`</g>
|
|
26
|
+
`),h&&g.push(`</g>
|
|
27
|
+
`),e?e(g.join("")):g.join("")}addPaintOrder(){return this.paintFirst==="fill"?"":` paint-order="${M(this.paintFirst)}" `}};function cr(i){return RegExp("^("+i.join("|")+")\\b","i")}var _e="textDecorationThickness",ur="textDecorationColor",go=["fontSize","fontWeight","fontFamily","fontStyle"],po=["underline","overline","linethrough"],fo=[...go,"lineHeight","text","charSpacing","textAlign","styles","path","pathStartOffset","pathSide","pathAlign"],mo=[...fo,...po,"textBackgroundColor","direction",_e,ur],ml=[...go,...po,Ot,"strokeWidth",it,"deltaY","textBackgroundColor",_e,ur],vl={_reNewline:fs,_reSpacesAndTabs:/[ \t\r]/g,_reSpaceAndTab:/[ \t\r]/,_reWords:/\S+/g,fontSize:40,fontWeight:nn,fontFamily:"Times New Roman",underline:!1,overline:!1,linethrough:!1,textAlign:V,fontStyle:nn,lineHeight:1.16,textBackgroundColor:"",stroke:null,shadow:null,path:void 0,pathStartOffset:0,pathSide:V,pathAlign:"baseline",charSpacing:0,deltaY:0,direction:"ltr",CACHE_FONT_SIZE:400,MIN_TEXT_WIDTH:2,superscript:{size:.6,baseline:-.35},subscript:{size:.6,baseline:.11},_fontSizeFraction:.222,offsets:{underline:.1,linethrough:-.28167,overline:-.81333},_fontSizeMult:1.13,[_e]:66.667},js="justify",pt=String.raw`[-+]?(?:\d*\.\d+|\d+\.?)(?:[eE][-+]?\d+)?`,Er=String.raw`(?:\s*,?\s+|\s*,\s*)`,zr="http://www.w3.org/2000/svg",yl=RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+pt+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+pt+"))?\\s+(.*)"),xl={cx:V,x:V,r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","letter-spacing":"charSpacing","paint-order":"paintFirst","stroke-dasharray":"strokeDashArray","stroke-dashoffset":"strokeDashOffset","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"textAnchor",opacity:"opacity","clip-path":"clipPath","clip-rule":"clipRule","vector-effect":"strokeUniform","image-rendering":"imageSmoothing","text-decoration-thickness":_e,"text-decoration-color":ur},fn="font-size",mn="clip-path",bl=cr(["path","circle","polygon","polyline","ellipse","rect","line","image","text"]),_l=cr(["symbol","image","marker","pattern","view","svg"]),vn=cr(["symbol","g","a","svg","clipPath","defs"]),yn=new RegExp(String.raw`^\s*(${pt})${Er}(${pt})${Er}(${pt})${Er}(${pt})\s*$`),xn="(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?",bn=RegExp("(?:\\s|^)"+xn+xn+"("+pt+"?(?:px)?)?(?:\\s?|$)(?:$|\\s)"),fi=class $i{constructor(t={}){let e=typeof t=="string"?$i.parseShadow(t):t;Object.assign(this,$i.ownDefaults,e),this.id=Wt()}static parseShadow(t){let e=t.trim(),[,r=0,s=0,n=0]=(bn.exec(e)||[]).map(o=>parseFloat(o)||0);return{color:(e.replace(bn,"")||"rgb(0,0,0)").trim(),offsetX:r,offsetY:s,blur:n}}toString(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")}toSVG(t){let e=ks(new y(this.offsetX,this.offsetY),X(-t.angle)),r=F.NUM_FRACTION_DIGITS,s=new lt(this.color),n=40,o=40;return t.width&&t.height&&(n=100*R((Math.abs(e.x)+this.blur)/t.width,r)+20,o=100*R((Math.abs(e.y)+this.blur)/t.height,r)+20),t.flipX&&(e.x*=-1),t.flipY&&(e.y*=-1),`<filter id="SVGID_${M(this.id)}" y="-${o}%" height="${100+2*o}%" x="-${n}%" width="${100+2*n}%" >
|
|
28
|
+
<feGaussianBlur in="SourceAlpha" stdDeviation="${R(this.blur?this.blur/2:0,r)}"></feGaussianBlur>
|
|
29
|
+
<feOffset dx="${R(e.x,r)}" dy="${R(e.y,r)}" result="oBlur" ></feOffset>
|
|
30
|
+
<feFlood flood-color="${s.toRgb()}" flood-opacity="${s.getAlpha()}"/>
|
|
31
|
+
<feComposite in2="oBlur" operator="in" />
|
|
32
|
+
<feMerge>
|
|
33
|
+
<feMergeNode></feMergeNode>
|
|
34
|
+
<feMergeNode in="SourceGraphic"></feMergeNode>
|
|
35
|
+
</feMerge>
|
|
36
|
+
</filter>
|
|
37
|
+
`}toObject(){let t={color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling,type:this.constructor.type},e=$i.ownDefaults;return this.includeDefaultValues?t:Ss(t,(r,s)=>r!==e[s])}static async fromObject(t){return new this(t)}};m(fi,"ownDefaults",{color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1}),m(fi,"type","shadow"),w.setClass(fi,"shadow");var se=(i,t,e)=>Math.max(i,Math.min(t,e)),Cl=["top",V,zt,Ht,"flipX","flipY","originX","originY","angle","opacity","globalCompositeOperation","shadow","visible",Se,we],Lt=[it,Ot,"strokeWidth","strokeDashArray","width","height","paintFirst","strokeUniform","strokeLineCap","strokeDashOffset","strokeLineJoin","strokeMiterLimit","backgroundColor","clipPath"],Sl={top:0,left:0,width:0,height:0,angle:0,flipX:!1,flipY:!1,scaleX:1,scaleY:1,minScaleLimit:0,skewX:0,skewY:0,originX:L,originY:L,strokeWidth:1,strokeUniform:!1,padding:0,opacity:1,paintFirst:it,fill:"rgb(0,0,0)",fillRule:"nonzero",stroke:null,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,globalCompositeOperation:"source-over",backgroundColor:"",shadow:null,visible:!0,includeDefaultValues:!0,excludeFromExport:!1,objectCaching:!0,clipPath:void 0,inverted:!1,absolutePositioned:!1,centeredRotation:!0,centeredScaling:!1,dirty:!0},wl=_i({defaultEasing:()=>yo,easeInBack:()=>Gl,easeInBounce:()=>xo,easeInCirc:()=>$l,easeInCubic:()=>Tl,easeInElastic:()=>Vl,easeInExpo:()=>Rl,easeInOutBack:()=>Ul,easeInOutBounce:()=>ql,easeInOutCirc:()=>Wl,easeInOutCubic:()=>kl,easeInOutElastic:()=>Hl,easeInOutExpo:()=>Xl,easeInOutQuad:()=>Zl,easeInOutQuart:()=>Dl,easeInOutQuint:()=>jl,easeInOutSine:()=>Il,easeInQuad:()=>Kl,easeInQuart:()=>Pl,easeInQuint:()=>El,easeInSine:()=>Fl,easeOutBack:()=>Nl,easeOutBounce:()=>Ls,easeOutCirc:()=>Yl,easeOutCubic:()=>Ol,easeOutElastic:()=>zl,easeOutExpo:()=>Bl,easeOutQuad:()=>Jl,easeOutQuart:()=>Ml,easeOutQuint:()=>Al,easeOutSine:()=>Ll}),Fs=(i,t,e,r)=>(i<Math.abs(t)?(i=t,r=e/4):r=t===0&&i===0?e/vt*Math.asin(1):e/vt*Math.asin(t/i),{a:i,c:t,p:e,s:r}),vo=(i,t,e,r,s)=>i*2**(10*--r)*Math.sin((r*s-t)*vt/e),yo=(i,t,e,r)=>-e*Math.cos(i/r*Vt)+e+t,Tl=(i,t,e,r)=>e*(i/r)**3+t,Ol=(i,t,e,r)=>e*((i/r-1)**3+1)+t,kl=(i,t,e,r)=>(i/=r/2)<1?e/2*i**3+t:e/2*((i-2)**3+2)+t,Pl=(i,t,e,r)=>e*(i/=r)*i**3+t,Ml=(i,t,e,r)=>-e*((i=i/r-1)*i**3-1)+t,Dl=(i,t,e,r)=>(i/=r/2)<1?e/2*i**4+t:-e/2*((i-=2)*i**3-2)+t,El=(i,t,e,r)=>e*(i/r)**5+t,Al=(i,t,e,r)=>e*((i/r-1)**5+1)+t,jl=(i,t,e,r)=>(i/=r/2)<1?e/2*i**5+t:e/2*((i-2)**5+2)+t,Fl=(i,t,e,r)=>-e*Math.cos(i/r*Vt)+e+t,Ll=(i,t,e,r)=>e*Math.sin(i/r*Vt)+t,Il=(i,t,e,r)=>-e/2*(Math.cos(Math.PI*i/r)-1)+t,Rl=(i,t,e,r)=>i===0?t:e*2**(10*(i/r-1))+t,Bl=(i,t,e,r)=>i===r?t+e:e*-(2**(-10*i/r)+1)+t,Xl=(i,t,e,r)=>i===0?t:i===r?t+e:(i/=r/2)<1?e/2*2**(10*(i-1))+t:e/2*-(2**(-10*(i-1))+2)+t,$l=(i,t,e,r)=>-e*(Math.sqrt(1-(i/=r)*i)-1)+t,Yl=(i,t,e,r)=>e*Math.sqrt(1-(i=i/r-1)*i)+t,Wl=(i,t,e,r)=>(i/=r/2)<1?-e/2*(Math.sqrt(1-i**2)-1)+t:e/2*(Math.sqrt(1-(i-=2)*i)+1)+t,Vl=(i,t,e,r)=>{let s=e,n=0;if(i===0)return t;if((i/=r)===1)return t+e;n||(n=.3*r);let{a:o,s:a,p:l}=Fs(s,e,n,1.70158);return-vo(o,a,l,i,r)+t},zl=(i,t,e,r)=>{let s=e,n=0;if(i===0)return t;if((i/=r)===1)return t+e;n||(n=.3*r);let{a:o,s:a,p:l,c:h}=Fs(s,e,n,1.70158);return o*2**(-10*i)*Math.sin((i*r-a)*vt/l)+h+t},Hl=(i,t,e,r)=>{let s=e,n=0;if(i===0)return t;if((i/=r/2)==2)return t+e;n||(n=.3*1.5*r);let{a:o,s:a,p:l,c:h}=Fs(s,e,n,1.70158);return i<1?-.5*vo(o,a,l,i,r)+t:o*2**(-10*--i)*Math.sin((i*r-a)*vt/l)*.5+h+t},Gl=(i,t,e,r,s=1.70158)=>e*(i/=r)*i*((s+1)*i-s)+t,Nl=(i,t,e,r,s=1.70158)=>e*((i=i/r-1)*i*((s+1)*i+s)+1)+t,Ul=(i,t,e,r,s=1.70158)=>(i/=r/2)<1?e/2*(i*i*((1+(s*=1.525))*i-s))+t:e/2*((i-=2)*i*((1+(s*=1.525))*i+s)+2)+t,Ls=(i,t,e,r)=>(i/=r)<1/2.75?e*(7.5625*i*i)+t:i<2/2.75?e*(7.5625*(i-=1.5/2.75)*i+.75)+t:i<2.5/2.75?e*(7.5625*(i-=2.25/2.75)*i+.9375)+t:e*(7.5625*(i-=2.625/2.75)*i+.984375)+t,xo=(i,t,e,r)=>e-Ls(r-i,0,e,r)+t,ql=(i,t,e,r)=>i<r/2?.5*xo(2*i,0,e,r)+t:.5*Ls(2*i-r,0,e,r)+.5*e+t,Kl=(i,t,e,r)=>e*(i/=r)*i+t,Jl=(i,t,e,r)=>-e*(i/=r)*(i-2)+t,Zl=(i,t,e,r)=>(i/=r/2)<1?e/2*i**2+t:-e/2*(--i*(i-2)-1)+t,Ql=()=>!1,Is=class{constructor({startValue:i,byValue:t,duration:e=500,delay:r=0,easing:s=yo,onStart:n=Bi,onChange:o=Bi,onComplete:a=Bi,abort:l=Ql,target:h}){m(this,"_state","pending"),m(this,"durationProgress",0),m(this,"valueProgress",0),this.tick=this.tick.bind(this),this.duration=e,this.delay=r,this.easing=s,this._onStart=n,this._onChange=o,this._onComplete=a,this._abort=l,this.target=h,this.startValue=i,this.byValue=t,this.value=this.startValue,this.endValue=Object.freeze(this.calculate(this.duration).value)}get state(){return this._state}isDone(){return this._state==="aborted"||this._state==="completed"}start(){let i=t=>{this._state==="pending"&&(this.startTime=t||+new Date,this._state="running",this._onStart(),this.tick(this.startTime))};this.register(),this.delay>0?this.timeout=ie().setTimeout(()=>gi(i),this.delay):gi(i)}tick(i){let t=(i||+new Date)-this.startTime,e=Math.min(t,this.duration);this.durationProgress=e/this.duration;let{value:r,valueProgress:s}=this.calculate(e);this.value=Object.freeze(r),this.valueProgress=s,this._state!=="aborted"&&(this._abort(this.value,this.valueProgress,this.durationProgress)?(this._state="aborted",this.unregister()):t>=this.duration?(this.durationProgress=this.valueProgress=1,this._onChange(this.endValue,this.valueProgress,this.durationProgress),this._state="completed",this._onComplete(this.endValue,this.valueProgress,this.durationProgress),this.unregister(),this.timeout=null):(this._onChange(this.value,this.valueProgress,this.durationProgress),gi(this.tick)))}register(){Gi.push(this)}unregister(){Gi.remove(this)}abort(){this._state="aborted",this.unregister(),this.timeout&&ie().clearTimeout(this.timeout)}},th=class extends Is{constructor({startValue:i=0,endValue:t=100,...e}){super({...e,startValue:i,byValue:t-i})}calculate(i){let t=this.easing(i,this.startValue,this.byValue,this.duration);return{value:t,valueProgress:Math.abs((t-this.startValue)/this.byValue)}}},eh=class extends Is{constructor({startValue:i=[0],endValue:t=[100],...e}){super({...e,startValue:i,byValue:t.map((r,s)=>r-i[s])})}calculate(i){let t=this.startValue.map((e,r)=>this.easing(i,e,this.byValue[r],this.duration,r));return{value:t,valueProgress:Math.abs((t[0]-this.startValue[0])/this.byValue[0])}}},ih=(i,t,e,r)=>t+e*(1-Math.cos(i/r*Vt)),Ar=i=>i&&((t,e,r)=>i(new lt(t).toRgba(),e,r)),rh=class extends Is{constructor({startValue:i,endValue:t,easing:e=ih,onChange:r,onComplete:s,abort:n,...o}){let a=new lt(i).getSource(),l=new lt(t).getSource();super({...o,startValue:a,byValue:l.map((h,c)=>h-a[c]),easing:e,onChange:Ar(r),onComplete:Ar(s),abort:Ar(n)})}calculate(i){let[t,e,r,s]=this.startValue.map((o,a)=>this.easing(i,o,this.byValue[a],this.duration,a)),n=[...[t,e,r].map(Math.round),se(0,s,1)];return{value:n,valueProgress:n.map((o,a)=>this.byValue[a]===0?0:Math.abs((o-this.startValue[a])/this.byValue[a])).find(o=>o!==0)||0}}};function Rs(i){let t=(e=>Array.isArray(e.startValue)||Array.isArray(e.endValue))(i)?new eh(i):new th(i);return t.start(),t}function bo(i){let t=new rh(i);return t.start(),t}var mi=class z{constructor(t){this.status=t,this.points=[]}includes(t){return this.points.some(e=>e.eq(t))}append(...t){return this.points=this.points.concat(t.filter(e=>!this.includes(e))),this}static isPointContained(t,e,r,s=!1){if(e.eq(r))return t.eq(e);if(e.x===r.x)return t.x===e.x&&(s||t.y>=Math.min(e.y,r.y)&&t.y<=Math.max(e.y,r.y));if(e.y===r.y)return t.y===e.y&&(s||t.x>=Math.min(e.x,r.x)&&t.x<=Math.max(e.x,r.x));{let n=yi(e,r),o=yi(e,t).divide(n);return s?Math.abs(o.x)===Math.abs(o.y):o.x===o.y&&o.x>=0&&o.x<=1}}static isPointInPolygon(t,e){let r=new y(t).setX(Math.min(t.x-1,...e.map(n=>n.x))),s=0;for(let n=0;n<e.length;n++){let o=this.intersectSegmentSegment(e[n],e[(n+1)%e.length],t,r);if(o.includes(t))return!0;s+=+(o.status==="Intersection")}return s%2==1}static intersectLineLine(t,e,r,s,n=!0,o=!0){let a=e.x-t.x,l=e.y-t.y,h=s.x-r.x,c=s.y-r.y,u=t.x-r.x,d=t.y-r.y,g=h*d-c*u,p=a*d-l*u,f=c*a-h*l;if(f!==0){let v=g/f,x=p/f;return(n||0<=v&&v<=1)&&(o||0<=x&&x<=1)?new z("Intersection").append(new y(t.x+v*a,t.y+v*l)):new z}return new z(g===0||p===0?n||o||z.isPointContained(t,r,s)||z.isPointContained(e,r,s)||z.isPointContained(r,t,e)||z.isPointContained(s,t,e)?"Coincident":void 0:"Parallel")}static intersectSegmentLine(t,e,r,s){return z.intersectLineLine(t,e,r,s,!1,!0)}static intersectSegmentSegment(t,e,r,s){return z.intersectLineLine(t,e,r,s,!1,!1)}static intersectLinePolygon(t,e,r,s=!0){let n=new z,o=r.length;for(let a,l,h,c=0;c<o;c++){if(a=r[c],l=r[(c+1)%o],h=z.intersectLineLine(t,e,a,l,s,!1),h.status==="Coincident")return h;n.append(...h.points)}return n.points.length>0&&(n.status="Intersection"),n}static intersectSegmentPolygon(t,e,r){return z.intersectLinePolygon(t,e,r,!1)}static intersectPolygonPolygon(t,e){let r=new z,s=t.length,n=[];for(let o=0;o<s;o++){let a=t[o],l=t[(o+1)%s],h=z.intersectSegmentPolygon(a,l,e);h.status==="Coincident"?(n.push(h),r.append(a,l)):r.append(...h.points)}return n.length>0&&n.length===t.length?new z("Coincident"):(r.points.length>0&&(r.status="Intersection"),r)}static intersectPolygonRectangle(t,e,r){let s=e.min(r),n=e.max(r),o=new y(n.x,s.y),a=new y(s.x,n.y);return z.intersectPolygonPolygon(t,[s,o,n,a])}},sh=class extends Hn{getX(){return this.getXY().x}setX(i){this.setXY(this.getXY().setX(i))}getY(){return this.getXY().y}setY(i){this.setXY(this.getXY().setY(i))}getRelativeX(){return this.left}setRelativeX(i){this.left=i}getRelativeY(){return this.top}setRelativeY(i){this.top=i}getXY(){let i=this.getRelativeXY();return this.group?N(i,this.group.calcTransformMatrix()):i}setXY(i,t,e){this.group&&(i=N(i,rt(this.group.calcTransformMatrix()))),this.setRelativeXY(i,t,e)}getRelativeXY(){return new y(this.left,this.top)}setRelativeXY(i,t=this.originX,e=this.originY){this.setPositionByOrigin(i,t,e)}isStrokeAccountedForInDimensions(){return!1}getCoords(){let{tl:i,tr:t,br:e,bl:r}=this.aCoords||(this.aCoords=this.calcACoords()),s=[i,t,e,r];if(this.group){let n=this.group.calcTransformMatrix();return s.map(o=>N(o,n))}return s}intersectsWithRect(i,t){return mi.intersectPolygonRectangle(this.getCoords(),i,t).status==="Intersection"}intersectsWithObject(i){let t=mi.intersectPolygonPolygon(this.getCoords(),i.getCoords());return t.status==="Intersection"||t.status==="Coincident"||i.isContainedWithinObject(this)||this.isContainedWithinObject(i)}isContainedWithinObject(i){return this.getCoords().every(t=>i.containsPoint(t))}isContainedWithinRect(i,t){let{left:e,top:r,width:s,height:n}=this.getBoundingRect();return e>=i.x&&e+s<=t.x&&r>=i.y&&r+n<=t.y}isOverlapping(i){return this.intersectsWithObject(i)||this.isContainedWithinObject(i)||i.isContainedWithinObject(this)}containsPoint(i){return mi.isPointInPolygon(i,this.getCoords())}isOnScreen(){if(!this.canvas)return!1;let{tl:i,br:t}=this.canvas.vptCoords;return!!this.getCoords().some(e=>e.x<=t.x&&e.x>=i.x&&e.y<=t.y&&e.y>=i.y)||!!this.intersectsWithRect(i,t)||this.containsPoint(i.midPointFrom(t))}isPartiallyOnScreen(){if(!this.canvas)return!1;let{tl:i,br:t}=this.canvas.vptCoords;return!!this.intersectsWithRect(i,t)||this.getCoords().every(e=>(e.x>=t.x||e.x<=i.x)&&(e.y>=t.y||e.y<=i.y))&&this.containsPoint(i.midPointFrom(t))}getBoundingRect(){return wt(this.getCoords())}getScaledWidth(){return this._getTransformedDimensions().x}getScaledHeight(){return this._getTransformedDimensions().y}scale(i){this._set(zt,i),this._set(Ht,i),this.setCoords()}scaleToWidth(i){let t=this.getBoundingRect().width/this.getScaledWidth();return this.scale(i/this.width/t)}scaleToHeight(i){let t=this.getBoundingRect().height/this.getScaledHeight();return this.scale(i/this.height/t)}getCanvasRetinaScaling(){var i;return((i=this.canvas)==null?void 0:i.getRetinaScaling())||1}getTotalAngle(){return this.group?jt(xs(this.calcTransformMatrix())):this.angle}getViewportTransform(){var i;return((i=this.canvas)==null?void 0:i.viewportTransform)||et.concat()}calcACoords(){let i=ne({angle:this.angle}),{x:t,y:e}=this.getRelativeCenterPoint(),r=$(Te(t,e),i),s=this._getTransformedDimensions(),n=s.x/2,o=s.y/2;return{tl:N({x:-n,y:-o},r),tr:N({x:n,y:-o},r),bl:N({x:-n,y:o},r),br:N({x:n,y:o},r)}}setCoords(){this.aCoords=this.calcACoords()}transformMatrixKey(i=!1){let t=[];return!i&&this.group&&(t=this.group.transformMatrixKey(i)),t.push(this.top,this.left,this.width,this.height,this.scaleX,this.scaleY,this.angle,this.strokeWidth,this.skewX,this.skewY,+this.flipX,+this.flipY,Q(this.originX),Q(this.originY)),t}calcTransformMatrix(i=!1){let t=this.calcOwnMatrix();if(i||!this.group)return t;let e=this.transformMatrixKey(i),r=this.matrixCache;return r&&r.key.every((s,n)=>s===e[n])?r.value:(this.group&&(t=$(this.group.calcTransformMatrix(!1),t)),this.matrixCache={key:e,value:t},t)}calcOwnMatrix(){let i=this.transformMatrixKey(!0),t=this.ownMatrixCache;if(t&&t.key.every((s,n)=>s===i[n]))return t.value;let e=this.getRelativeCenterPoint(),r=Jn({angle:this.angle,translateX:e.x,translateY:e.y,scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY});return this.ownMatrixCache={key:i,value:r},r}_getNonTransformedDimensions(){return new y(this.width,this.height).scalarAdd(this.strokeWidth)}_calculateCurrentDimensions(i){var t;let e=(t=this.canvas)==null?void 0:t.viewportTransform,r=this._getTransformedDimensions(i);return e?r.multiply(new y(bs(e),qn(e))).scalarAdd(2*this.padding):r.scalarAdd(2*this.padding)}_getTransformedDimensions(i={}){let t={scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,width:this.width,height:this.height,strokeWidth:this.strokeWidth,...i},e=t.strokeWidth,r=e,s=0;this.strokeUniform&&(r=0,s=e);let n=t.width+r,o=t.height+r,a;return a=t.skewX===0&&t.skewY===0?new y(n*t.scaleX,o*t.scaleY):or(n,o,Ci(t)),a.scalarAdd(s)}translateToGivenOrigin(i,t,e,r,s){let n=i.x,o=i.y,a=Q(r)-Q(t),l=Q(s)-Q(e);if(a||l){let h=this._getTransformedDimensions();n+=a*h.x,o+=l*h.y}return new y(n,o)}translateToCenterPoint(i,t,e){if(t==="center"&&e==="center")return i;let r=this.translateToGivenOrigin(i,t,e,L,L);return this.angle?r.rotate(X(this.angle),i):r}translateToOriginPoint(i,t,e){let r=this.translateToGivenOrigin(i,L,L,t,e);return this.angle?r.rotate(X(this.angle),i):r}getCenterPoint(){let i=this.getRelativeCenterPoint();return this.group?N(i,this.group.calcTransformMatrix()):i}getRelativeCenterPoint(){return this.translateToCenterPoint(new y(this.left,this.top),this.originX,this.originY)}getPointByOrigin(i,t){return this.getPositionByOrigin(i,t)}getPositionByOrigin(i,t){return this.translateToOriginPoint(this.getRelativeCenterPoint(),i,t)}setPositionByOrigin(i,t,e){let r=this.translateToCenterPoint(i,t,e),s=this.translateToOriginPoint(r,this.originX,this.originY);this.set({left:s.x,top:s.y})}_getLeftTopCoords(){return this.getPositionByOrigin(V,"top")}positionByLeftTop(i){return this.setPositionByOrigin(i,V,"top")}},Mt=class Yi extends sh{static getDefaults(){return Yi.ownDefaults}get type(){let t=this.constructor.type;return t==="FabricObject"?"object":t.toLowerCase()}set type(t){At("warn","Setting type has no effect",t)}constructor(t){super(),m(this,"_cacheContext",null),Object.assign(this,Yi.ownDefaults),this.setOptions(t)}_createCacheCanvas(){this._cacheCanvas=kt(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0}_limitCacheSize(t){let e=t.width,r=t.height,s=F.maxCacheSideLimit,n=F.minCacheSideLimit;if(e<=s&&r<=s&&e*r<=F.perfLimitSizeTotal)return e<n&&(t.width=n),r<n&&(t.height=n),t;let o=e/r,[a,l]=di.limitDimsByArea(o),h=se(n,a,s),c=se(n,l,s);return e>h&&(t.zoomX/=e/h,t.width=h,t.capped=!0),r>c&&(t.zoomY/=r/c,t.height=c,t.capped=!0),t}_getCacheCanvasDimensions(){let t=this.getTotalObjectScaling(),e=this._getTransformedDimensions({skewX:0,skewY:0}),r=e.x*t.x/this.scaleX,s=e.y*t.y/this.scaleY;return{width:Math.ceil(r+2),height:Math.ceil(s+2),zoomX:t.x,zoomY:t.y,x:r,y:s}}_updateCacheCanvas(){let t=this._cacheCanvas,e=this._cacheContext,{width:r,height:s,zoomX:n,zoomY:o,x:a,y:l}=this._limitCacheSize(this._getCacheCanvasDimensions()),h=r!==t.width||s!==t.height,c=this.zoomX!==n||this.zoomY!==o;if(!t||!e)return!1;if(h||c){r!==t.width||s!==t.height?(t.width=r,t.height=s):(e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,t.width,t.height));let u=a/2,d=l/2;return this.cacheTranslationX=Math.round(t.width/2-u)+u,this.cacheTranslationY=Math.round(t.height/2-d)+d,e.translate(this.cacheTranslationX,this.cacheTranslationY),e.scale(n,o),this.zoomX=n,this.zoomY=o,!0}return!1}setOptions(t={}){this._setOptions(t)}transform(t){let e=this.group&&!this.group._transformDone||this.group&&this.canvas&&t===this.canvas.contextTop,r=this.calcTransformMatrix(!e);t.transform(r[0],r[1],r[2],r[3],r[4],r[5])}getObjectScaling(){if(!this.group)return new y(Math.abs(this.scaleX),Math.abs(this.scaleY));let t=re(this.calcTransformMatrix());return new y(Math.abs(t.scaleX),Math.abs(t.scaleY))}getTotalObjectScaling(){let t=this.getObjectScaling();if(this.canvas){let e=this.canvas.getZoom(),r=this.getCanvasRetinaScaling();return t.scalarMultiply(e*r)}return t}getObjectOpacity(){let t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t}_constrainScale(t){return Math.abs(t)<this.minScaleLimit?t<0?-this.minScaleLimit:this.minScaleLimit:t===0?1e-4:t}_set(t,e){t!=="scaleX"&&t!=="scaleY"||(e=this._constrainScale(e)),t==="scaleX"&&e<0?(this.flipX=!this.flipX,e*=-1):t==="scaleY"&&e<0?(this.flipY=!this.flipY,e*=-1):t!=="shadow"||!e||e instanceof fi||(e=new fi(e));let r=this[t]!==e;return this[t]=e,r&&this.constructor.cacheProperties.includes(t)&&(this.dirty=!0),this.parent&&(this.dirty||r&&this.constructor.stateProperties.includes(t))&&this.parent._set("dirty",!0),this}isNotVisible(){return this.opacity===0||!this.width&&!this.height&&this.strokeWidth===0||!this.visible}render(t){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(t)):(this._removeCacheCanvas(),this.drawObject(t,!1,{}),this.dirty=!1),t.restore())}drawSelectionBackground(t){}renderCache(t){if(t=t||{},this._cacheCanvas&&this._cacheContext||this._createCacheCanvas(),this.isCacheDirty()&&this._cacheContext){let{zoomX:e,zoomY:r,cacheTranslationX:s,cacheTranslationY:n}=this,{width:o,height:a}=this._cacheCanvas;this.drawObject(this._cacheContext,t.forClipping,{zoomX:e,zoomY:r,cacheTranslationX:s,cacheTranslationY:n,width:o,height:a,parentClipPaths:[]}),this.dirty=!1}}_removeCacheCanvas(){this._cacheCanvas=void 0,this._cacheContext=null}hasStroke(){return!!this.stroke&&this.stroke!=="transparent"&&this.strokeWidth!==0}hasFill(){return!!this.fill&&this.fill!=="transparent"}needsItsOwnCache(){return!!(this.paintFirst==="stroke"&&this.hasFill()&&this.hasStroke()&&this.shadow)||!!this.clipPath}shouldCache(){return this.ownCaching=this.objectCaching&&(!this.parent||!this.parent.isOnACache())||this.needsItsOwnCache(),this.ownCaching}willDrawShadow(){return!!this.shadow&&(this.shadow.offsetX!==0||this.shadow.offsetY!==0)}drawClipPathOnCache(t,e,r){t.save(),e.inverted?t.globalCompositeOperation="destination-out":t.globalCompositeOperation="destination-in",t.setTransform(1,0,0,1,0,0),t.drawImage(r,0,0),t.restore()}drawObject(t,e,r){let s=this.fill,n=this.stroke;e?(this.fill="black",this.stroke="",this._setClippingProperties(t)):this._renderBackground(t),this.fire("before:render",{ctx:t}),this._render(t),this._drawClipPath(t,this.clipPath,r),this.fill=s,this.stroke=n}createClipPathLayer(t,e){let r=at(e),s=r.getContext("2d");if(s.translate(e.cacheTranslationX,e.cacheTranslationY),s.scale(e.zoomX,e.zoomY),t._cacheCanvas=r,e.parentClipPaths.forEach(n=>{n.transform(s)}),e.parentClipPaths.push(t),t.absolutePositioned){let n=rt(this.calcTransformMatrix());s.transform(n[0],n[1],n[2],n[3],n[4],n[5])}return t.transform(s),t.drawObject(s,!0,e),r}_drawClipPath(t,e,r){if(!e)return;e._transformDone=!0;let s=this.createClipPathLayer(e,r);this.drawClipPathOnCache(t,e,s)}drawCacheOnCanvas(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)}isCacheDirty(t=!1){if(this.isNotVisible())return!1;let e=this._cacheCanvas,r=this._cacheContext;return!(!e||!r||t||!this._updateCacheCanvas())||!!(this.dirty||this.clipPath&&this.clipPath.absolutePositioned)&&(e&&r&&!t&&(r.save(),r.setTransform(1,0,0,1,0,0),r.clearRect(0,0,e.width,e.height),r.restore()),!0)}_renderBackground(t){if(!this.backgroundColor)return;let e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}_setOpacity(t){this.group&&!this.group._transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity}_setStrokeStyles(t,e){let r=e.stroke;r&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineDashOffset=e.strokeDashOffset,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,ut(r)?r.gradientUnits==="percentage"||r.gradientTransform||r.patternTransform?this._applyPatternForTransformedGradient(t,r):(t.strokeStyle=r.toLive(t),this._applyPatternGradientTransform(t,r)):t.strokeStyle=e.stroke)}_setFillStyles(t,{fill:e}){e&&(ut(e)?(t.fillStyle=e.toLive(t),this._applyPatternGradientTransform(t,e)):t.fillStyle=e)}_setClippingProperties(t){t.globalAlpha=1,t.strokeStyle="transparent",t.fillStyle="#000000"}_setLineDash(t,e){e&&e.length!==0&&t.setLineDash(e)}_setShadow(t){if(!this.shadow)return;let e=this.shadow,r=this.canvas,s=this.getCanvasRetinaScaling(),[n,,,o]=r?.viewportTransform||et,a=n*s,l=o*s,h=e.nonScaling?new y(1,1):this.getObjectScaling();t.shadowColor=e.color,t.shadowBlur=e.blur*F.browserShadowBlurConstant*(a+l)*(h.x+h.y)/4,t.shadowOffsetX=e.offsetX*a*h.x,t.shadowOffsetY=e.offsetY*l*h.y}_removeShadow(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)}_applyPatternGradientTransform(t,e){if(!ut(e))return{offsetX:0,offsetY:0};let r=e.gradientTransform||e.patternTransform,s=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;return e.gradientUnits==="percentage"?t.transform(this.width,0,0,this.height,s,n):t.transform(1,0,0,1,s,n),r&&t.transform(r[0],r[1],r[2],r[3],r[4],r[5]),{offsetX:s,offsetY:n}}_renderPaintInOrder(t){this.paintFirst==="stroke"?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))}_render(t){}_renderFill(t){this.fill&&(t.save(),this._setFillStyles(t,this),this.fillRule==="evenodd"?t.fill("evenodd"):t.fill(),t.restore())}_renderStroke(t){if(this.stroke&&this.strokeWidth!==0){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this.strokeUniform){let e=this.getObjectScaling();t.scale(1/e.x,1/e.y)}this._setLineDash(t,this.strokeDashArray),this._setStrokeStyles(t,this),t.stroke(),t.restore()}}_applyPatternForTransformedGradient(t,e){var r;let s=this._limitCacheSize(this._getCacheCanvasDimensions()),n=this.getCanvasRetinaScaling(),o=s.x/this.scaleX/n,a=s.y/this.scaleY/n,l=at({width:Math.ceil(o),height:Math.ceil(a)}),h=l.getContext("2d");h&&(h.beginPath(),h.moveTo(0,0),h.lineTo(o,0),h.lineTo(o,a),h.lineTo(0,a),h.closePath(),h.translate(o/2,a/2),h.scale(s.zoomX/this.scaleX/n,s.zoomY/this.scaleY/n),this._applyPatternGradientTransform(h,e),h.fillStyle=e.toLive(t),h.fill(),t.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),t.scale(n*this.scaleX/s.zoomX,n*this.scaleY/s.zoomY),t.strokeStyle=(r=h.createPattern(l,"no-repeat"))==null?"":r)}_findCenterFromElement(){return new y(this.left+this.width/2,this.top+this.height/2)}clone(t){let e=this.toObject(t);return this.constructor.fromObject(e)}cloneAsImage(t){let e=this.toCanvasElement(t);return new(w.getClass("image"))(e)}toCanvasElement(t={}){let e=Ts(this),r=this.group,s=this.shadow,n=Math.abs,o=t.enableRetinaScaling?Ln():1,a=(t.multiplier||1)*o,l=t.canvasProvider||(b=>new ws(b,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1}));delete this.group,t.withoutTransform&&no(this),t.withoutShadow&&(this.shadow=null),t.viewportTransform&&Os(this,this.getViewportTransform()),this.setCoords();let h=kt(),c=this.getBoundingRect(),u=this.shadow,d=new y;if(u){let b=u.blur,_=u.nonScaling?new y(1,1):this.getObjectScaling();d.x=2*Math.round(n(u.offsetX)+b)*n(_.x),d.y=2*Math.round(n(u.offsetY)+b)*n(_.y)}let g=c.width+d.x,p=c.height+d.y;h.width=Math.ceil(g),h.height=Math.ceil(p);let f=l(h);t.format==="jpeg"&&(f.backgroundColor="#fff"),this.setPositionByOrigin(new y(f.width/2,f.height/2),L,L);let v=this.canvas;f._objects=[this],this.set("canvas",f),this.setCoords();let x=f.toCanvasElement(a||1,t);return this.set("canvas",v),this.shadow=s,r&&(this.group=r),this.set(e),this.setCoords(),f._objects=[],f.destroy(),x}toDataURL(t={}){return vs(this.toCanvasElement(t),t.format||"png",t.quality||1)}toBlob(t={}){return ys(this.toCanvasElement(t),t.format||"png",t.quality||1)}isType(...t){return t.includes(this.constructor.type)||t.includes(this.type)}complexity(){return 1}toJSON(){return this.toObject()}rotate(t){let{centeredRotation:e,originX:r,originY:s}=this;if(e){let{x:n,y:o}=this.getRelativeCenterPoint();this.originX=L,this.originY=L,this.left=n,this.top=o}if(this.set("angle",t),e){let{x:n,y:o}=this.getPositionByOrigin(r,s);this.left=n,this.top=o,this.originX=r,this.originY=s}}setOnGroup(){}_setupCompositeOperation(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)}dispose(){Gi.cancelByTarget(this),this.off(),this._set("canvas",void 0),this._cacheCanvas&&Tt().dispose(this._cacheCanvas),this._cacheCanvas=void 0,this._cacheContext=null}animate(t,e){return Object.entries(t).reduce((r,[s,n])=>(r[s]=this._animate(s,n,e),r),{})}_animate(t,e,r={}){let s=t.split("."),n=this.constructor.colorProperties.includes(s[s.length-1]),{abort:o,startValue:a,onChange:l,onComplete:h}=r,c={...r,target:this,startValue:a??s.reduce((u,d)=>u[d],this),endValue:e,abort:o?.bind(this),onChange:(u,d,g)=>{s.reduce((p,f,v)=>(v===s.length-1&&(p[f]=u),p[f]),this),l&&l(u,d,g)},onComplete:(u,d,g)=>{this.setCoords(),h&&h(u,d,g)}};return n?bo(c):Rs(c)}isDescendantOf(t){let{parent:e,group:r}=this;return e===t||r===t||!!e&&e.isDescendantOf(t)||!!r&&r!==e&&r.isDescendantOf(t)}getAncestors(){let t=[],e=this;do e=e.parent,e&&t.push(e);while(e);return t}findCommonAncestors(t){if(this===t)return{fork:[],otherFork:[],common:[this,...this.getAncestors()]};let e=this.getAncestors(),r=t.getAncestors();if(e.length===0&&r.length>0&&this===r[r.length-1])return{fork:[],otherFork:[t,...r.slice(0,r.length-1)],common:[this]};for(let s,n=0;n<e.length;n++){if(s=e[n],s===t)return{fork:[this,...e.slice(0,n)],otherFork:[],common:e.slice(n)};for(let o=0;o<r.length;o++){if(this===r[o])return{fork:[],otherFork:[t,...r.slice(0,o)],common:[this,...e]};if(s===r[o])return{fork:[this,...e.slice(0,n)],otherFork:[t,...r.slice(0,o)],common:e.slice(n)}}}return{fork:[this,...e],otherFork:[t,...r],common:[]}}hasCommonAncestors(t){let e=this.findCommonAncestors(t);return e&&!!e.common.length}isInFrontOf(t){if(this===t)return;let e=this.findCommonAncestors(t);if(e.fork.includes(t))return!0;if(e.otherFork.includes(this))return!1;let r=e.common[0]||this.canvas;if(!r)return;let s=e.fork.pop(),n=e.otherFork.pop(),o=r._objects.indexOf(s),a=r._objects.indexOf(n);return o>-1&&o>a}toObject(t=[]){let e=t.concat(Yi.customProperties,this.constructor.customProperties||[]),r,s=F.NUM_FRACTION_DIGITS,{clipPath:n,fill:o,stroke:a,shadow:l,strokeDashArray:h,left:c,top:u,originX:d,originY:g,width:p,height:f,strokeWidth:v,strokeLineCap:x,strokeDashOffset:b,strokeLineJoin:_,strokeUniform:C,strokeMiterLimit:S,scaleX:k,scaleY:T,angle:O,flipX:P,flipY:A,opacity:D,visible:E,backgroundColor:j,fillRule:B,paintFirst:H,globalCompositeOperation:Y,skewX:K,skewY:st}=this;n&&!n.excludeFromExport&&(r=n.toObject(e.concat("inverted","absolutePositioned")));let I=Be=>R(Be,s),_t={...oe(this,e),type:this.constructor.type,version:Yr,originX:d,originY:g,left:I(c),top:I(u),width:I(p),height:I(f),fill:on(o)?o.toObject():o,stroke:on(a)?a.toObject():a,strokeWidth:I(v),strokeDashArray:h&&h.concat(),strokeLineCap:x,strokeDashOffset:b,strokeLineJoin:_,strokeUniform:C,strokeMiterLimit:I(S),scaleX:I(k),scaleY:I(T),angle:I(O),flipX:P,flipY:A,opacity:I(D),shadow:l&&l.toObject(),visible:E,backgroundColor:j,fillRule:B,paintFirst:H,globalCompositeOperation:Y,skewX:I(K),skewY:I(st),...r?{clipPath:r}:null};return this.includeDefaultValues?_t:this._removeDefaultValues(_t)}toDatalessObject(t){return this.toObject(t)}_removeDefaultValues(t){let e=this.constructor.getDefaults(),r=Object.keys(e).length>0?e:Object.getPrototypeOf(this);return Ss(t,(s,n)=>{if(n==="left"||n==="top"||n==="type")return!0;let o=r[n];return s!==o&&!(Array.isArray(s)&&Array.isArray(o)&&s.length===0&&o.length===0)})}toString(){return`#<${this.constructor.type}>`}static _fromObject({type:t,...e},{extraParam:r,...s}={}){return Si(e,s).then(n=>r?(delete n[r],new this(e[r],n)):new this(n))}static fromObject(t,e){return this._fromObject(t,e)}};m(Mt,"stateProperties",Cl),m(Mt,"cacheProperties",Lt),m(Mt,"ownDefaults",Sl),m(Mt,"type","FabricObject"),m(Mt,"colorProperties",[it,Ot,"backgroundColor"]),m(Mt,"customProperties",[]),w.setClass(Mt),w.setClass(Mt,"object");var Bs=(i,t)=>{var e;let{transform:{target:r}}=t;(e=r.canvas)==null||e.fire(`object:${i}`,{...t,target:r}),r.fire(i,t)},It=(i,t,e)=>(r,s,n,o)=>{let a=t(r,s,n,o);return a&&Bs(i,{...Es(r,s,n,o),...e}),a};function Gt(i){return(t,e,r,s)=>{let{target:n,originX:o,originY:a}=e,l=n.getPositionByOrigin(o,a),h=i(t,e,r,s);return n.setPositionByOrigin(l,e.originX,e.originY),h}}var _o=(i,t,e,r)=>(s,n,o,a)=>{let l=lr(n,n.originX,n.originY,o,a)[e],h=Q(n[t]);if(h===0||h>0&&l<0||h<0&&l>0){let{target:c}=n,u=c.strokeWidth/(c.strokeUniform?c[r]:1),d=ho(n)?2:1,g=c[i],p=Math.abs(l*d/c[r])-u;return c.set(i,Math.max(p,1)),g!==c[i]}return!1},Co=_o("width","originX","x","scaleX"),So=_o("height","originY","y","scaleY"),Hr=It(vi,Gt(Co)),nh=It(vi,Gt(So));function wo(i,t,e,r,s){i.save();let{stroke:n,xSize:o,ySize:a,opName:l}=this.commonRenderProps(i,t,e,s,r),h=o;o>a?i.scale(1,a/o):a>o&&(h=a,i.scale(o/a,1)),i.beginPath(),i.arc(0,0,h/2,0,vt,!1),i[l](),n&&i.stroke(),i.restore()}function To(i,t,e,r,s){i.save();let{stroke:n,xSize:o,ySize:a,opName:l}=this.commonRenderProps(i,t,e,s,r),h=o/2,c=a/2;i[`${l}Rect`](-h,-c,o,a),n&&i.strokeRect(-h,-c,o,a),i.restore()}var ot=class{constructor(i){m(this,"visible",!0),m(this,"actionName",Wn),m(this,"angle",0),m(this,"x",0),m(this,"y",0),m(this,"offsetX",0),m(this,"offsetY",0),m(this,"sizeX",0),m(this,"sizeY",0),m(this,"touchSizeX",0),m(this,"touchSizeY",0),m(this,"cursorStyle","crosshair"),m(this,"withConnection",!1),Object.assign(this,i)}getTransformAnchorPoint(){var i;return(i=this.transformAnchorPoint)==null?new y(.5-this.x,.5-this.y):i}shouldActivate(i,t,e,{tl:r,tr:s,br:n,bl:o}){var a;return((a=t.canvas)==null?void 0:a.getActiveObject())===t&&t.isControlVisible(i)&&mi.isPointInPolygon(e,[r,s,n,o])}getActionHandler(i,t,e){return this.actionHandler}getMouseDownHandler(i,t,e){return this.mouseDownHandler}getMouseUpHandler(i,t,e){return this.mouseUpHandler}cursorStyleHandler(i,t,e,r){return t.cursorStyle}getActionName(i,t,e){return t.actionName}getVisibility(i,t){var e,r;return(e=(r=i._controlsVisibility)==null?void 0:r[t])==null?this.visible:e}setVisibility(i,t,e){this.visible=i}positionHandler(i,t,e,r){return new y(this.x*i.x+this.offsetX,this.y*i.y+this.offsetY).transform(t)}calcCornerCoords(i,t,e,r,s,n){let o=rr([Te(e,r),ne({angle:i}),sr((s?this.touchSizeX:this.sizeX)||t,(s?this.touchSizeY:this.sizeY)||t)]);return{tl:new y(-.5,-.5).transform(o),tr:new y(.5,-.5).transform(o),br:new y(.5,.5).transform(o),bl:new y(-.5,.5).transform(o)}}commonRenderProps(i,t,e,r,s={}){let{cornerSize:n,cornerColor:o,transparentCorners:a,cornerStrokeColor:l}=s,h=n||r.cornerSize,c=this.sizeX||h,u=this.sizeY||h,d=a===void 0?r.transparentCorners:a,g=d?Ot:it,p=l||r.cornerStrokeColor,f=!d&&!!p;return i.fillStyle=o||r.cornerColor||"",i.strokeStyle=p||"",i.translate(t,e),i.rotate(X(r.getTotalAngle())),{stroke:f,xSize:c,ySize:u,transparentCorners:d,opName:g}}render(i,t,e,r,s){((r=r||{}).cornerStyle||s.cornerStyle)==="circle"?wo.call(this,i,t,e,r,s):To.call(this,i,t,e,r,s)}},Oo=(i,t,e)=>e.lockRotation?Ds:t.cursorStyle,ko=It(Bn,Gt((i,{target:t,ex:e,ey:r,theta:s,originX:n,originY:o},a,l)=>{let h=t.getPositionByOrigin(n,o);if(mt(t,"lockRotation"))return!1;let c=Math.atan2(r-h.y,e-h.x),u=jt(Math.atan2(l-h.y,a-h.x)-c+s);if(t.snapAngle&&t.snapAngle>0){let g=t.snapAngle,p=t.snapThreshold||g,f=Math.ceil(u/g)*g,v=Math.floor(u/g)*g;Math.abs(u-v)<p?u=v:Math.abs(u-f)<p&&(u=f)}u<0&&(u=360+u),u%=360;let d=t.angle!==u;return t.angle=u,d}));function Po(i,t){let e=t.canvas,r=i[e.uniScaleKey];return e.uniformScaling&&!r||!e.uniformScaling&&r}function Mo(i,t,e){let r=mt(i,"lockScalingX"),s=mt(i,"lockScalingY");if(r&&s||!t&&(r||s)&&e||r&&t==="x"||s&&t==="y")return!0;let{width:n,height:o,strokeWidth:a}=i;return n===0&&a===0&&t!=="y"||o===0&&a===0&&t!=="x"}var oh=["e","se","s","sw","w","nw","n","ne","e"],ge=(i,t,e,r)=>{let s=Po(i,e);return Mo(e,t.x!==0&&t.y===0?"x":t.x===0&&t.y!==0?"y":"",s)?Ds:`${oh[co(e,0,r)]}-resize`};function Xs(i,t,e,r,s={}){let n=t.target,o=s.by,a=Po(i,n),l,h,c,u,d,g;if(Mo(n,o,a))return!1;if(t.gestureScale)h=t.scaleX*t.gestureScale,c=t.scaleY*t.gestureScale;else{if(l=lr(t,t.originX,t.originY,e,r),d=o==="y"?1:Math.sign(l.x||t.signX||1),g=o==="x"?1:Math.sign(l.y||t.signY||1),t.signX||(t.signX=d),t.signY||(t.signY=g),mt(n,"lockScalingFlip")&&(t.signX!==d||t.signY!==g))return!1;if(u=n._getTransformedDimensions(),a&&!o){let v=Math.abs(l.x)+Math.abs(l.y),{original:x}=t,b=v/(Math.abs(u.x*x.scaleX/n.scaleX)+Math.abs(u.y*x.scaleY/n.scaleY));h=x.scaleX*b,c=x.scaleY*b}else h=Math.abs(l.x*n.scaleX/u.x),c=Math.abs(l.y*n.scaleY/u.y);ho(t)&&(h*=2,c*=2),t.signX!==d&&o!=="y"&&(t.originX=cn(t.originX),h*=-1,t.signX=d),t.signY!==g&&o!=="x"&&(t.originY=cn(t.originY),c*=-1,t.signY=g)}let p=n.scaleX,f=n.scaleY;return o?(o==="x"&&n.set("scaleX",h),o==="y"&&n.set("scaleY",c)):(!mt(n,"lockScalingX")&&n.set("scaleX",h),!mt(n,"lockScalingY")&&n.set("scaleY",c)),p!==n.scaleX||f!==n.scaleY}var Ge=It(ir,Gt((i,t,e,r)=>Xs(i,t,e,r))),Do=It(ir,Gt((i,t,e,r)=>Xs(i,t,e,r,{by:"x"}))),Eo=It(ir,Gt((i,t,e,r)=>Xs(i,t,e,r,{by:"y"}))),jr={x:{counterAxis:"y",scale:zt,skew:Se,lockSkewing:"lockSkewingX",origin:"originX",flip:"flipX"},y:{counterAxis:"x",scale:Ht,skew:we,lockSkewing:"lockSkewingY",origin:"originY",flip:"flipY"}},ah=["ns","nesw","ew","nwse"],Ao=(i,t,e,r)=>t.x!==0&&mt(e,"lockSkewingY")||t.y!==0&&mt(e,"lockSkewingX")?Ds:`${ah[co(e,0,r)%4]}-resize`;function jo(i,t,e,r,s){let{target:n}=e,{counterAxis:o,origin:a,lockSkewing:l,skew:h,flip:c}=jr[i];if(mt(n,l))return!1;let{origin:u,flip:d}=jr[o],g=Q(e[u])*(n[d]?-1:1),p=-Math.sign(g)*(n[c]?-1:1),f=-(n[h]===0&&lr(e,"center","center",r,s)[i]>0||n[h]>0?1:-1)*p*.5+.5;return It($n,Gt((v,x,b,_)=>(function(C,{target:S,ex:k,ey:T,skewingSide:O,...P},A){let{skew:D}=jr[C],E=A.subtract(new y(k,T)).divide(new y(S.scaleX,S.scaleY))[C],j=S[D],B=P[D],H=Math.tan(X(B)),Y=C==="y"?S._getTransformedDimensions({scaleX:1,scaleY:1,skewX:0}).x:S._getTransformedDimensions({scaleX:1,scaleY:1}).y,K=2*E*O/Math.max(Y,1)+H,st=jt(Math.atan(K));S.set(D,st);let I=j!==S[D];if(I&&C==="y"){let{skewX:_t,scaleX:Be}=S,Xe=S._getTransformedDimensions({skewY:j}),Bt=S._getTransformedDimensions(),$e=_t===0?1:Xe.x/Bt.x;$e!==1&&S.set("scaleX",$e*Be)}return I})(i,x,new y(b,_))))(t,{...e,[a]:f,skewingSide:p},r,s)}var Fo=(i,t,e,r)=>jo("x",i,t,e,r),Lo=(i,t,e,r)=>jo("y",i,t,e,r);function dr(i,t){return i[t.canvas.altActionKey]}var Ne=(i,t,e)=>{let r=dr(i,e);return t.x===0?r?Se:Ht:t.y===0?r?we:zt:""},te=(i,t,e,r)=>dr(i,e)?Ao(0,t,e,r):ge(i,t,e,r),Gr=(i,t,e,r)=>dr(i,t.target)?Lo(i,t,e,r):Do(i,t,e,r),Nr=(i,t,e,r)=>dr(i,t.target)?Fo(i,t,e,r):Eo(i,t,e,r),$s=()=>({ml:new ot({x:-.5,y:0,cursorStyleHandler:te,actionHandler:Gr,getActionName:Ne}),mr:new ot({x:.5,y:0,cursorStyleHandler:te,actionHandler:Gr,getActionName:Ne}),mb:new ot({x:0,y:.5,cursorStyleHandler:te,actionHandler:Nr,getActionName:Ne}),mt:new ot({x:0,y:-.5,cursorStyleHandler:te,actionHandler:Nr,getActionName:Ne}),tl:new ot({x:-.5,y:-.5,cursorStyleHandler:ge,actionHandler:Ge}),tr:new ot({x:.5,y:-.5,cursorStyleHandler:ge,actionHandler:Ge}),bl:new ot({x:-.5,y:.5,cursorStyleHandler:ge,actionHandler:Ge}),br:new ot({x:.5,y:.5,cursorStyleHandler:ge,actionHandler:Ge}),mtr:new ot({x:0,y:-.5,actionHandler:ko,cursorStyleHandler:Oo,offsetY:-40,withConnection:!0,actionName:Xn})}),Io=()=>({mr:new ot({x:.5,y:0,actionHandler:Hr,cursorStyleHandler:te,actionName:vi}),ml:new ot({x:-.5,y:0,actionHandler:Hr,cursorStyleHandler:te,actionName:vi})}),Ro=()=>({...$s(),...Io()}),Bo=class Ur extends Mt{static getDefaults(){return{...super.getDefaults(),...Ur.ownDefaults}}constructor(t){super(),Object.assign(this,this.constructor.createControls(),Ur.ownDefaults),this.setOptions(t)}static createControls(){return{controls:$s()}}_updateCacheCanvas(){let t=this.canvas;if(this.noScaleCache&&t&&t._currentTransform){let e=t._currentTransform,r=e.target,s=e.action;if(this===r&&s&&s.startsWith("scale"))return!1}return super._updateCacheCanvas()}getActiveControl(){let t=this.__corner;return t?{key:t,control:this.controls[t],coord:this.oCoords[t]}:void 0}findControl(t,e=!1){if(!this.hasControls||!this.canvas)return;this.__corner=void 0;let r=Object.entries(this.oCoords);for(let s=r.length-1;s>=0;s--){let[n,o]=r[s],a=this.controls[n];if(a.shouldActivate(n,this,t,e?o.touchCorner:o.corner))return this.__corner=n,{key:n,control:a,coord:this.oCoords[n]}}}calcOCoords(){let t=this.getViewportTransform(),e=bs(t),r=qn(t),s=this.getCenterPoint(),n=$($(t,$(Te(s.x,s.y),ne({angle:this.getTotalAngle()-(this.group&&this.flipX?180:0)}))),[1/e,0,0,1/r,0,0]),o=this.group?re(this.calcTransformMatrix()):void 0;o&&(o.scaleX=Math.abs(o.scaleX),o.scaleY=Math.abs(o.scaleY));let a=this._calculateCurrentDimensions(o),l={};return this.forEachControl((h,c)=>{let u=h.positionHandler(a,n,this,h);l[c]=Object.assign(u,this._calcCornerCoords(h,u))}),l}_calcCornerCoords(t,e){let r=this.getTotalAngle();return{corner:t.calcCornerCoords(r,this.cornerSize,e.x,e.y,!1,this),touchCorner:t.calcCornerCoords(r,this.touchCornerSize,e.x,e.y,!0,this)}}setCoords(){super.setCoords(),this.canvas&&(this.oCoords=this.calcOCoords())}forEachControl(t){for(let e in this.controls)t(this.controls[e],e,this)}drawSelectionBackground(t){if(!this.selectionBackgroundColor||this.canvas&&this.canvas._activeObject!==this)return;t.save();let e=this.getRelativeCenterPoint(),r=this._calculateCurrentDimensions(),s=this.getViewportTransform();t.translate(e.x,e.y),t.scale(1/s[0],1/s[3]),t.rotate(X(this.angle)),t.fillStyle=this.selectionBackgroundColor,t.fillRect(-r.x/2,-r.y/2,r.x,r.y),t.restore()}strokeBorders(t,e){t.strokeRect(-e.x/2,-e.y/2,e.x,e.y)}_drawBorders(t,e,r={}){let s={hasControls:this.hasControls,borderColor:this.borderColor,borderDashArray:this.borderDashArray,...r};t.save(),t.strokeStyle=s.borderColor,this._setLineDash(t,s.borderDashArray),this.strokeBorders(t,e),s.hasControls&&this.drawControlsConnectingLines(t,e),t.restore()}_renderControls(t,e={}){let{hasBorders:r,hasControls:s}=this,n={hasBorders:r,hasControls:s,...e},o=this.getViewportTransform(),a=n.hasBorders,l=n.hasControls,h=re($(o,this.calcTransformMatrix()));t.save(),t.translate(h.translateX,h.translateY),t.lineWidth=this.borderScaleFactor,this.group===this.parent&&(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(h.angle-=180);let c=xs(o);t.rotate(this.group?X(h.angle):X(this.angle)+c),a&&this.drawBorders(t,h,e),l&&this.drawControls(t,e),t.restore()}drawBorders(t,e,r){let s;if(r&&r.forActiveSelection||this.group){let n=or(this.width,this.height,Ci(e)),o=this.isStrokeAccountedForInDimensions()?ms:(this.strokeUniform?new y().scalarAdd(this.canvas?this.canvas.getZoom():1):new y(e.scaleX,e.scaleY)).scalarMultiply(this.strokeWidth);s=n.add(o).scalarAdd(this.borderScaleFactor).scalarAdd(2*this.padding)}else s=this._calculateCurrentDimensions().scalarAdd(this.borderScaleFactor);this._drawBorders(t,s,r)}drawControlsConnectingLines(t,e){let r=!1;t.beginPath(),this.forEachControl((s,n)=>{s.withConnection&&s.getVisibility(this,n)&&(r=!0,t.moveTo(s.x*e.x,s.y*e.y),t.lineTo(s.x*e.x+s.offsetX,s.y*e.y+s.offsetY))}),r&&t.stroke()}drawControls(t,e={}){t.save();let r=this.getCanvasRetinaScaling(),{cornerStrokeColor:s,cornerDashArray:n,cornerColor:o}=this,a={cornerStrokeColor:s,cornerDashArray:n,cornerColor:o,...e};t.setTransform(r,0,0,r,0,0),t.strokeStyle=t.fillStyle=a.cornerColor,this.transparentCorners||(t.strokeStyle=a.cornerStrokeColor),this._setLineDash(t,a.cornerDashArray),this.forEachControl((l,h)=>{if(l.getVisibility(this,h)){let c=this.oCoords[h];l.render(t,c.x,c.y,a,this)}}),t.restore()}isControlVisible(t){return this.controls[t]&&this.controls[t].getVisibility(this,t)}setControlVisible(t,e){this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[t]=e}setControlsVisibility(t={}){Object.entries(t).forEach(([e,r])=>this.setControlVisible(e,r))}clearContextTop(t){if(!this.canvas)return;let e=this.canvas.contextTop;if(!e)return;let r=this.canvas.viewportTransform;e.save(),e.transform(r[0],r[1],r[2],r[3],r[4],r[5]),this.transform(e);let s=this.width+4,n=this.height+4;return e.clearRect(-s/2,-n/2,s,n),t||e.restore(),e}onDeselect(t){return!1}onSelect(t){return!1}shouldStartDragging(t){return!1}onDragStart(t){return!1}canDrop(t){return!1}renderDragSourceEffect(t){}renderDropTargetEffect(t){}};function Xo(i,t){return t.forEach(e=>{Object.getOwnPropertyNames(e.prototype).forEach(r=>{r!=="constructor"&&Object.defineProperty(i.prototype,r,Object.getOwnPropertyDescriptor(e.prototype,r)||Object.create(null))})}),i}m(Bo,"ownDefaults",{noScaleCache:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,cornerSize:13,touchCornerSize:24,transparentCorners:!0,cornerColor:"rgb(178,204,255)",cornerStrokeColor:"",cornerStyle:"rect",cornerDashArray:null,hasControls:!0,borderColor:"rgb(178,204,255)",borderDashArray:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,hasBorders:!0,selectionBackgroundColor:"",selectable:!0,evented:!0,perPixelTargetFind:!1,activeOn:"down",hoverCursor:null,moveCursor:null});var U=class extends Bo{};Xo(U,[uo]),w.setClass(U),w.setClass(U,"object");var $o=(i,t,e,r)=>{let s=2*(r=Math.round(r))+1,{data:n}=i.getImageData(t-r,e-r,s,s);for(let o=3;o<n.length;o+=4)if(n[o]>0)return!1;return!0},Yo=class{constructor(i){this.options=i,this.strokeProjectionMagnitude=this.options.strokeWidth/2,this.scale=new y(this.options.scaleX,this.options.scaleY),this.strokeUniformScalar=this.options.strokeUniform?new y(1/this.options.scaleX,1/this.options.scaleY):new y(1,1)}createSideVector(i,t){let e=yi(i,t);return this.options.strokeUniform?e.multiply(this.scale):e}projectOrthogonally(i,t,e){return this.applySkew(i.add(this.calcOrthogonalProjection(i,t,e)))}isSkewed(){return this.options.skewX!==0||this.options.skewY!==0}applySkew(i){let t=new y(i);return t.y+=t.x*Math.tan(X(this.options.skewY)),t.x+=t.y*Math.tan(X(this.options.skewX)),t}scaleUnitVector(i,t){return i.multiply(this.strokeUniformScalar).scalarMultiply(t)}},lh=new y,Wo=class Wi extends Yo{static getOrthogonalRotationFactor(t,e){let r=e?qi(t,e):Ps(t);return Math.abs(r)<Vt?-1:1}constructor(t,e,r,s){super(s),m(this,"AB",void 0),m(this,"AC",void 0),m(this,"alpha",void 0),m(this,"bisector",void 0),this.A=new y(t),this.B=new y(e),this.C=new y(r),this.AB=this.createSideVector(this.A,this.B),this.AC=this.createSideVector(this.A,this.C),this.alpha=qi(this.AB,this.AC),this.bisector=ar(ks(this.AB.eq(lh)?this.AC:this.AB,this.alpha/2))}calcOrthogonalProjection(t,e,r=this.strokeProjectionMagnitude){let s=Ms(this.createSideVector(t,e)),n=Wi.getOrthogonalRotationFactor(s,this.bisector);return this.scaleUnitVector(s,r*n)}projectBevel(){let t=[];return(this.alpha%vt===0?[this.B]:[this.B,this.C]).forEach(e=>{t.push(this.projectOrthogonally(this.A,e)),t.push(this.projectOrthogonally(this.A,e,-this.strokeProjectionMagnitude))}),t}projectMiter(){let t=[],e=Math.abs(this.alpha),r=1/Math.sin(e/2),s=this.scaleUnitVector(this.bisector,-this.strokeProjectionMagnitude*r),n=this.options.strokeUniform?Ui(this.scaleUnitVector(this.bisector,this.options.strokeMiterLimit)):this.options.strokeMiterLimit;return Ui(s)/this.strokeProjectionMagnitude<=n&&t.push(this.applySkew(this.A.add(s))),t.push(...this.projectBevel()),t}projectRoundNoSkew(t,e){let r=[],s=new y(Wi.getOrthogonalRotationFactor(this.bisector),Wi.getOrthogonalRotationFactor(new y(this.bisector.y,this.bisector.x)));return[new y(1,0).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(s),new y(0,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar).multiply(s)].forEach(n=>{Vr(n,t,e)&&r.push(this.A.add(n))}),r}projectRoundWithSkew(t,e){let r=[],{skewX:s,skewY:n,scaleX:o,scaleY:a,strokeUniform:l}=this.options,h=new y(Math.tan(X(s)),Math.tan(X(n))),c=this.strokeProjectionMagnitude,u=l?c/a/Math.sqrt(1/a**2+1/o**2*h.y**2):c/Math.sqrt(1+h.y**2),d=new y(Math.sqrt(Math.max(c**2-u**2,0)),u),g=l?c/Math.sqrt(1+h.x**2*(1/a)**2/(1/o+1/o*h.x*h.y)**2):c/Math.sqrt(1+h.x**2/(1+h.x*h.y)**2),p=new y(g,Math.sqrt(Math.max(c**2-g**2,0)));return[p,p.scalarMultiply(-1),d,d.scalarMultiply(-1)].map(f=>this.applySkew(l?f.multiply(this.strokeUniformScalar):f)).forEach(f=>{Vr(f,t,e)&&r.push(this.applySkew(this.A).add(f))}),r}projectRound(){let t=[];t.push(...this.projectBevel());let e=this.alpha%vt===0,r=this.applySkew(this.A),s=t[e?0:2].subtract(r),n=t[+!!e].subtract(r),o=ve(s,e?this.applySkew(this.AB.scalarMultiply(-1)):this.applySkew(this.bisector.multiply(this.strokeUniformScalar).scalarMultiply(-1)))>0,a=o?s:n,l=o?n:s;return this.isSkewed()?t.push(...this.projectRoundWithSkew(a,l)):t.push(...this.projectRoundNoSkew(a,l)),t}projectPoints(){switch(this.options.strokeLineJoin){case"miter":return this.projectMiter();case"round":return this.projectRound();default:return this.projectBevel()}}project(){return this.projectPoints().map(t=>({originPoint:this.A,projectedPoint:t,angle:this.alpha,bisector:this.bisector}))}},_n=class extends Yo{constructor(i,t,e){super(e),this.A=new y(i),this.T=new y(t)}calcOrthogonalProjection(i,t,e=this.strokeProjectionMagnitude){let r=this.createSideVector(i,t);return this.scaleUnitVector(Ms(r),e)}projectButt(){return[this.projectOrthogonally(this.A,this.T,this.strokeProjectionMagnitude),this.projectOrthogonally(this.A,this.T,-this.strokeProjectionMagnitude)]}projectRound(){let i=[];if(!this.isSkewed()&&this.A.eq(this.T)){let t=new y(1,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar);i.push(this.applySkew(this.A.add(t)),this.applySkew(this.A.subtract(t)))}else i.push(...new Wo(this.A,this.T,this.T,this.options).projectRound());return i}projectSquare(){let i=[];if(this.A.eq(this.T)){let t=new y(1,1).scalarMultiply(this.strokeProjectionMagnitude).multiply(this.strokeUniformScalar);i.push(this.A.add(t),this.A.subtract(t))}else{let t=this.calcOrthogonalProjection(this.A,this.T,this.strokeProjectionMagnitude),e=this.scaleUnitVector(ar(this.createSideVector(this.A,this.T)),-this.strokeProjectionMagnitude),r=this.A.add(e);i.push(r.add(t),r.subtract(t))}return i.map(t=>this.applySkew(t))}projectPoints(){switch(this.options.strokeLineCap){case"round":return this.projectRound();case"square":return this.projectSquare();default:return this.projectButt()}}project(){return this.projectPoints().map(i=>({originPoint:this.A,projectedPoint:i}))}},Vo=(i,t,e=!1)=>{let r=[];if(i.length===0)return r;let s=i.reduce((n,o)=>(n[n.length-1].eq(o)||n.push(new y(o)),n),[new y(i[0])]);if(s.length===1)e=!0;else if(!e){let n=s[0],o=((a,l)=>{for(let h=a.length-1;h>=0;h--)if(l(a[h],h,a))return h;return-1})(s,a=>!a.eq(n));s.splice(o+1)}return s.forEach((n,o,a)=>{let l,h;o===0?(h=a[1],l=e?n:a[a.length-1]):o===a.length-1?(l=a[o-1],h=e?n:a[0]):(l=a[o-1],h=a[o+1]),e&&a.length===1?r.push(...new _n(n,n,t).project()):!e||o!==0&&o!==a.length-1?r.push(...new Wo(n,l,h,t).project()):r.push(...new _n(n,o===0?h:l,t).project())}),r},Ys=i=>{let t={};return Object.keys(i).forEach(e=>{t[e]={},Object.keys(i[e]).forEach(r=>{t[e][r]={...i[e][r]}})}),t},gr=(i,t,e=!1)=>i.fill!==t.fill||i.stroke!==t.stroke||i.strokeWidth!==t.strokeWidth||i.fontSize!==t.fontSize||i.fontFamily!==t.fontFamily||i.fontWeight!==t.fontWeight||i.fontStyle!==t.fontStyle||i.textDecorationThickness!==t.textDecorationThickness||i.textDecorationColor!==t.textDecorationColor||i.textBackgroundColor!==t.textBackgroundColor||i.deltaY!==t.deltaY||e&&(i.overline!==t.overline||i.underline!==t.underline||i.linethrough!==t.linethrough),zo=(i,t)=>{let e=t.split(`
|
|
38
|
+
`),r=[],s=-1,n={};i=Ys(i);for(let o=0;o<e.length;o++){let a=nr(e[o]);if(i[o])for(let l=0;l<a.length;l++){s++;let h=i[o][l];h&&Object.keys(h).length>0&&(gr(n,h,!0)?r.push({start:s,end:s+1,style:h}):r[r.length-1].end++),n=h||{}}else s+=a.length,n={}}return r},Ho=(i,t)=>{if(!Array.isArray(i))return Ys(i);let e=t.split(fs),r={},s=-1,n=0;for(let o=0;o<e.length;o++){let a=nr(e[o]);for(let l=0;l<a.length;l++)s++,i[n]&&i[n].start<=s&&s<i[n].end&&(r[o]=r[o]||{},r[o][l]={...i[n].style},s===i[n].end-1&&n++)}return r},Nt=["display","transform",it,"fill-opacity","fill-rule","opacity",Ot,"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 Cn(i,t){let e=i.nodeName,r=i.getAttribute("class"),s=i.getAttribute("id"),n="(?![a-zA-Z\\-]+)",o;if(o=RegExp("^"+e,"i"),t=t.replace(o,""),s&&t.length&&(o=RegExp("#"+s+n,"i"),t=t.replace(o,"")),r&&t.length){let a=r.split(" ");for(let l=a.length;l--;)o=RegExp("\\."+a[l]+n,"i"),t=t.replace(o,"")}return t.length===0}function hh(i,t){let e=!0,r=Cn(i,t.pop());return r&&t.length&&(e=(function(s,n){let o,a=!0;for(;s.parentElement&&s.parentElement.nodeType===1&&n.length;)a&&(o=n.pop()),a=Cn(s=s.parentElement,o);return n.length===0})(i,t)),r&&e&&t.length===0}function ch(i,t={}){let e={};for(let r in t)hh(i,r.split(" "))&&(e={...e,...t[r]});return e}var uh=i=>{var t;return(t=xl[i])==null?i:t},dh=RegExp(`(${pt})`,"gi"),tt=`(${pt})`,gh=String.raw`(skewX)\(${tt}\)`,ph=String.raw`(skewY)\(${tt}\)`,fh=String.raw`(rotate)\(${tt}(?: ${tt} ${tt})?\)`,mh=String.raw`(scale)\(${tt}(?: ${tt})?\)`,vh=String.raw`(translate)\(${tt}(?: ${tt})?\)`,Ws=`(?:${String.raw`(matrix)\(${tt} ${tt} ${tt} ${tt} ${tt} ${tt}\)`}|${vh}|${fh}|${mh}|${gh}|${ph})`,yh=`(?:${Ws}*)`,xh=String.raw`^\s*(?:${yh}?)\s*$`,bh=new RegExp(xh),_h=new RegExp(Ws),Ch=new RegExp(Ws,"g");function Ji(i){let t=[];if(!(i=(e=>Ki(e.replace(dh," $1 ").replace(/,/gi," ")))(i).replace(/\s*([()])\s*/gi,"$1"))||i&&!bh.test(i))return[...et];for(let e of i.matchAll(Ch)){let r=_h.exec(e[0]);if(!r)continue;let s=et,[,n,...o]=r.filter(g=>!!g),[a,l,h,c,u,d]=o.map(g=>parseFloat(g));switch(n){case"translate":s=Te(a,l);break;case Xn:s=ne({angle:a},{x:l,y:h});break;case Wn:s=sr(a,l);break;case Se:s=_s(a);break;case we:s=Cs(a);break;case"matrix":s=[a,l,h,c,u,d]}t.push(s)}return rr(t)}function Sh(i,t,e,r){let s=Array.isArray(t),n,o=t;if(i!=="fill"&&i!=="stroke"||t!=="none"){if(i==="strokeUniform")return t==="non-scaling-stroke";if(i==="strokeDashArray")o=t==="none"?null:t.replace(/,/g," ").split(/\s+/).map(parseFloat);else if(i==="transformMatrix")o=e&&e.transformMatrix?$(e.transformMatrix,Ji(t)):Ji(t);else if(i==="visible")o=t!=="none"&&t!=="hidden",e&&e.visible===!1&&(o=!1);else if(i==="opacity")o=parseFloat(t),e&&e.opacity!==void 0&&(o*=e.opacity);else if(i==="textAnchor")o=t==="start"?V:t==="end"?ft:L;else if(i==="charSpacing"||i==="textDecorationThickness")n=Z(t,r)/r*1e3;else if(i==="paintFirst"){let a=t.indexOf(it),l=t.indexOf(Ot);o=it,(a>-1&&l>-1&&l<a||a===-1&&l>-1)&&(o=Ot)}else{if(i==="href"||i==="xlink:href"||i==="font"||i==="id")return t;if(i==="imageSmoothing")return t==="optimizeQuality";n=s?t.map(Z):Z(t,r)}}else o="";return!s&&isNaN(n)?o:n}function qr(i,t){i.replace(/;\s*$/,"").split(";").forEach(e=>{if(!e)return;let[r,s]=e.split(":");t[r.trim().toLowerCase()]=s.trim()})}function wh(i){let t={},e=i.getAttribute("style");return e&&(typeof e=="string"?qr(e,t):(function(r,s){Object.entries(r).forEach(([n,o])=>{o!==void 0&&(s[n.toLowerCase()]=o)})})(e,t)),t}var Th={stroke:"strokeOpacity",fill:"fillOpacity"};function Rt(i,t,e){if(!i)return{};let r,s={},n=16;i.parentNode&&vn.test(i.parentNode.nodeName)&&(s=Rt(i.parentElement,t,e),s.fontSize&&(r=n=Z(s.fontSize)));let o={...t.reduce((h,c)=>{let u=i.getAttribute(c);return u&&(h[c]=u),h},{}),...ch(i,e),...wh(i)};o["clip-path"]&&i.setAttribute(mn,o[mn]),o["font-size"]&&(r=Z(o[fn],n),o[fn]=`${r}`);let a={};for(let h in o){let c=uh(h);a[c]=Sh(c,o[h],s,r)}a&&a.font&&(function(h,c){let u=h.match(yl);if(!u)return;let d=u[1],g=u[3],p=u[4],f=u[5],v=u[6];d&&(c.fontStyle=d),g&&(c.fontWeight=isNaN(parseFloat(g))?g:parseFloat(g)),p&&(c.fontSize=Z(p)),v&&(c.fontFamily=v),f&&(c.lineHeight=f==="normal"?1:f)})(a.font,a);let l={...s,...a};return vn.test(i.nodeName)?l:(function(h){let c=U.getDefaults();return Object.entries(Th).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 lt(h[u]);h[u]=g.setAlpha(R(g.getAlpha()*h[d],2)).toRgba()}),h})(l)}var Go=["rx","ry"],Dt=class Kr extends U{static getDefaults(){return{...super.getDefaults(),...Kr.ownDefaults}}constructor(t){super(),Object.assign(this,Kr.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:r}=this,s=-e/2,n=-r/2,o=this.rx?Math.min(this.rx,e/2):0,a=this.ry?Math.min(this.ry,r/2):0,l=o!==0||a!==0;t.beginPath(),t.moveTo(s+o,n),t.lineTo(s+e-o,n),l&&t.bezierCurveTo(s+e-.4477152502*o,n,s+e,n+.4477152502*a,s+e,n+a),t.lineTo(s+e,n+r-a),l&&t.bezierCurveTo(s+e,n+r-.4477152502*a,s+e-.4477152502*o,n+r,s+e-o,n+r),t.lineTo(s+o,n+r),l&&t.bezierCurveTo(s+.4477152502*o,n+r,s,n+r-.4477152502*a,s,n+r-a),t.lineTo(s,n+a),l&&t.bezierCurveTo(s,n+.4477152502*a,s+.4477152502*o,n,s+o,n),t.closePath(),this._renderPaintInOrder(t)}toObject(t=[]){return super.toObject([...Go,...t])}_toSVG(){let{width:t,height:e,rx:r,ry:s}=this;return["<rect ","COMMON_PARTS",`x="${-t/2}" y="${-e/2}" rx="${M(r)}" ry="${M(s)}" width="${M(t)}" height="${M(e)}" />
|
|
39
|
+
`]}static async fromElement(t,e,r){let{left:s=0,top:n=0,width:o=0,height:a=0,visible:l=!0,...h}=Rt(t,this.ATTRIBUTE_NAMES,r);return new this({...e,...h,left:s,top:n,width:o,height:a,visible:!!(l&&o&&a)})}};m(Dt,"type","Rect"),m(Dt,"cacheProperties",[...Lt,...Go]),m(Dt,"ownDefaults",{rx:0,ry:0}),m(Dt,"ATTRIBUTE_NAMES",[...Nt,"x","y","rx","ry","width","height"]),w.setClass(Dt),w.setSVGClass(Dt);var Sn="initialization",Jr="added",No=(i,t)=>{let{strokeUniform:e,strokeWidth:r,width:s,height:n,group:o}=t,a=o&&o!==i?wi(o.calcTransformMatrix(),i.calcTransformMatrix()):null,l=a?t.getRelativeCenterPoint().transform(a):t.getRelativeCenterPoint(),h=!t.isStrokeAccountedForInDimensions(),c=e&&h?oo(new y(r,r),void 0,i.calcTransformMatrix()):ms,u=!e&&h?r:0,d=or(s+u,n+u,rr([a,t.calcOwnMatrix()],!0)).add(c).scalarDivide(2);return[l.subtract(d),l.add(d)]},pr=class{calcLayoutResult(i,t){if(this.shouldPerformLayout(i))return this.calcBoundingBox(t,i)}shouldPerformLayout({type:i,prevStrategy:t,strategy:e}){return i==="initialization"||i==="imperative"||!!t&&e!==t}shouldLayoutClipPath({type:i,target:{clipPath:t}}){return i!=="initialization"&&t&&!t.absolutePositioned}getInitialSize(i,t){return t.size}calcBoundingBox(i,t){let{type:e,target:r}=t;if(e==="imperative"&&t.overrides)return t.overrides;if(i.length===0)return;let{left:s,top:n,width:o,height:a}=wt(i.map(c=>No(r,c)).reduce((c,u)=>c.concat(u),[])),l=new y(o,a),h=new y(s,n).add(l.scalarDivide(2));if(e==="initialization"){let c=this.getInitialSize(t,{size:l,center:h});return{center:h,relativeCorrection:new y(0,0),size:c}}return{center:h.transform(r.calcOwnMatrix()),size:l}}};m(pr,"type","strategy");var Zr=class extends pr{shouldPerformLayout(i){return!0}};m(Zr,"type","fit-content"),w.setClass(Zr);var Uo="layoutManager",bi=class{constructor(i=new Zr){m(this,"strategy",void 0),this.strategy=i,this._subscriptions=new Map}performLayout(i){let t={bubbles:!0,strategy:this.strategy,...i,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(i,t){let{target:e}=t;return[Vn,Rn,vi,Bn,ir,$n,Hi,Yn,"modifyPath"].map(r=>i.on(r,s=>this.performLayout(r==="modified"?{type:"object_modified",trigger:r,e:s,target:e}:{type:"object_modifying",trigger:r,e:s,target:e})))}subscribe(i,t){this.unsubscribe(i,t);let e=this.attachHandlers(i,t);this._subscriptions.set(i,e)}unsubscribe(i,t){(this._subscriptions.get(i)||[]).forEach(e=>e()),this._subscriptions.delete(i)}unsubscribeTargets(i){i.targets.forEach(t=>this.unsubscribe(t,i))}subscribeTargets(i){i.targets.forEach(t=>this.subscribe(t,i))}onBeforeLayout(i){let{target:t,type:e}=i,{canvas:r}=t;if(e==="initialization"||e==="added"?this.subscribeTargets(i):e==="removed"&&this.unsubscribeTargets(i),t.fire("layout:before",{context:i}),r&&r.fire("object:layout:before",{target:t,context:i}),e==="imperative"&&i.deep){let{strategy:s,...n}=i;t.forEachObject(o=>o.layoutManager&&o.layoutManager.performLayout({...n,bubbles:!1,target:o}))}}getLayoutResult(i){let{target:t,strategy:e,type:r}=i,s=e.calcLayoutResult(i,t.getObjects());if(!s)return;let n=r==="initialization"?new y:t.getRelativeCenterPoint(),{center:o,correction:a=new y,relativeCorrection:l=new y}=s;return{result:s,prevCenter:n,nextCenter:o,offset:n.subtract(o).add(a).transform(r==="initialization"?et:rt(t.calcOwnMatrix()),!0).add(l)}}commitLayout(i,t){let{target:e}=i,{result:{size:r},nextCenter:s}=t;var n,o;e.set({width:r.x,height:r.y}),this.layoutObjects(i,t),i.type==="initialization"?e.set({left:(n=i.x)==null?s.x+r.x*Q(e.originX):n,top:(o=i.y)==null?s.y+r.y*Q(e.originY):o}):(e.setPositionByOrigin(s,L,L),e.setCoords(),e.set("dirty",!0))}layoutObjects(i,t){let{target:e}=i;e.forEachObject(r=>{r.group===e&&this.layoutObject(i,t,r)}),i.strategy.shouldLayoutClipPath(i)&&this.layoutObject(i,t,e.clipPath)}layoutObject(i,{offset:t},e){e.set({left:e.left+t.x,top:e.top+t.y})}onAfterLayout(i,t){let{target:e,strategy:r,bubbles:s,prevStrategy:n,...o}=i,{canvas:a}=e;e.fire("layout:after",{context:i,result:t}),a&&a.fire("object:layout:after",{context:i,result:t,target:e});let l=e.parent;s&&l!=null&&l.layoutManager&&((o.path||(o.path=[])).push(e),l.layoutManager.performLayout({...o,target:l})),e.set("dirty",!0)}dispose(){let{_subscriptions:i}=this;i.forEach(t=>t.forEach(e=>e())),i.clear()}toObject(){return{type:Uo,strategy:this.strategy.constructor.type}}toJSON(){return this.toObject()}};w.setClass(bi,Uo);var Oh=class extends bi{performLayout(){}},Et=class Qr extends zn(U){static getDefaults(){return{...super.getDefaults(),...Qr.ownDefaults}}constructor(t=[],e={}){super(),m(this,"_activeObjects",[]),m(this,"__objectSelectionTracker",void 0),m(this,"__objectSelectionDisposer",void 0),Object.assign(this,Qr.ownDefaults),this.setOptions(e),this.groupInit(t,e)}groupInit(t,e){var r;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=(r=e.layoutManager)==null?new bi:r,this.layoutManager.performLayout({type:Sn,target:this,targets:[...t],x:e.left,y:e.top})}canEnterGroup(t){return t===this||this.isDescendantOf(t)?(At("error","Group: circular object trees are not supported, this call has no effect"),!1):this._objects.indexOf(t)===-1||(At("error","Group: duplicate objects are not supported inside group, this call has no effect"),!1)}_filterObjectsBeforeEnteringGroup(t){return t.filter((e,r,s)=>this.canEnterGroup(e)&&s.indexOf(e)===r)}add(...t){let e=this._filterObjectsBeforeEnteringGroup(t),r=super.add(...e);return this._onAfterObjectsChange(Jr,e),r}insertAt(t,...e){let r=this._filterObjectsBeforeEnteringGroup(e),s=super.insertAt(t,...r);return this._onAfterObjectsChange(Jr,r),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 r=this[t];return super._set(t,e),t==="canvas"&&r!==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 r=this._activeObjects;if(t)r.push(e),this._set("dirty",!0);else if(r.length>0){let s=r.indexOf(e);s>-1&&(r.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&&be(t,$(rt(this.calcTransformMatrix()),t.calcTransformMatrix())),this._shouldSetNestedCoords()&&t.setCoords(),t._set("group",this),t._set("canvas",this.canvas),this._watchObject(!0,t);let r=this.canvas&&this.canvas.getActiveObject&&this.canvas.getActiveObject();r&&(r===t||t.isDescendantOf(r))&&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||(be(t,$(this.calcTransformMatrix(),t.calcTransformMatrix())),t.setCoords()),this._watchObject(!1,t);let r=this._activeObjects.length>0?this._activeObjects.indexOf(t):-1;r>-1&&this._activeObjects.splice(r,1)}shouldCache(){let t=U.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,r){this._renderBackground(t);for(let n=0;n<this._objects.length;n++){var s;let o=this._objects[n];(s=this.canvas)!=null&&s.preserveObjectStacking&&o.group!==this?(t.save(),t.transform(...rt(this.calcTransformMatrix())),o.render(t),t.restore()):o.group===this&&o.render(t)}this._drawClipPath(t,this.clipPath,r)}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 r=this.includeDefaultValues;return this._objects.filter(function(s){return!s.excludeFromExport}).map(function(s){let n=s.includeDefaultValues;s.includeDefaultValues=r;let o=s[t||"toObject"](e);return s.includeDefaultValues=n,o})}toObject(t=[]){let e=this.layoutManager.toObject();return{...super.toObject(["subTargetCheck","interactive",...t]),...e.strategy!=="fit-content"||this.includeDefaultValues?{layoutManager:e}:{},objects:this.__serializeObjects("toObject",t)}}toString(){return`#<Group: (${this.complexity()})>`}dispose(){this.layoutManager.unsubscribeTargets({targets:this.getObjects(),target:this}),this._activeObjects=[],this.forEachObject(t=>{this._watchObject(!1,t),t.dispose()}),super.dispose()}_createSVGBgRect(t){if(!this.backgroundColor)return"";let e=Dt.prototype._toSVG.call(this),r=e.indexOf("COMMON_PARTS");e[r]='for="group" ';let s=e.join("");return t?t(s):s}_toSVG(t){let e=["<g ","COMMON_PARTS",` >
|
|
40
|
+
`],r=this._createSVGBgRect(t);r&&e.push(" ",r);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: ${M(this.opacity)};`:"",e=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),e].join("")}toClipPathSVG(t){let e=[],r=this._createSVGBgRect(t);r&&e.push(" ",r);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:r,...s},n){return Promise.all([ye(e,n),Si(s,n)]).then(([o,a])=>{let l=new this(o,{...s,...a,layoutManager:new Oh});return l.layoutManager=r?new(w.getClass(r.type))(new(w.getClass(r.strategy))):new bi,l.layoutManager.subscribeTargets({type:Sn,target:l,targets:l.getObjects()}),l.setCoords(),l})}};m(Et,"type","Group"),m(Et,"ownDefaults",{strokeWidth:0,subTargetCheck:!1,interactive:!1}),w.setClass(Et);var kh=(i,t)=>i&&i.length===1?i[0]:new Et(i,t),qo=(i,t)=>Math.min(t.width/i.width,t.height/i.height),Ko=(i,t)=>Math.max(t.width/i.width,t.height/i.height),ts="\\s*,?\\s*",Ve=`${ts}(${pt})`,Ph=`${Ve}${Ve}${Ve}${ts}([01])${ts}([01])${Ve}${Ve}`,Mh={m:"l",M:"L"},Dh=(i,t,e,r,s,n,o,a,l,h,c)=>{let u=yt(i),d=xt(i),g=yt(t),p=xt(t),f=e*s*g-r*n*p+o,v=r*s*g+e*n*p+a;return["C",h+l*(-e*s*d-r*n*u),c+l*(-r*s*d+e*n*u),f+l*(e*s*p+r*n*g),v+l*(r*s*p-e*n*g),f,v]},wn=(i,t,e,r)=>{let s=Math.atan2(t,i),n=Math.atan2(r,e);return n>=s?n-s:2*Math.PI-(s-n)};function es(i,t,e,r,s,n,o,a){let l;if(F.cachesBoundsOfCurve&&(l=[...arguments].join(),di.boundsOfCurveCache[l]))return di.boundsOfCurveCache[l];let h=Math.sqrt,c=Math.abs,u=[],d=[[0,0],[0,0]],g=6*i-12*e+6*s,p=-3*i+9*e-9*s+3*o,f=3*e-3*i;for(let C=0;C<2;++C){if(C>0&&(g=6*t-12*r+6*n,p=-3*t+9*r-9*n+3*a,f=3*r-3*t),c(p)<1e-12){if(c(g)<1e-12)continue;let P=-f/g;0<P&&P<1&&u.push(P);continue}let S=g*g-4*f*p;if(S<0)continue;let k=h(S),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 v=u.length,x=v,b=Zo(i,t,e,r,s,n,o,a);for(;v--;){let{x:C,y:S}=b(u[v]);d[0][v]=C,d[1][v]=S}d[0][x]=i,d[1][x]=t,d[0][x+1]=o,d[1][x+1]=a;let _=[new y(Math.min(...d[0]),Math.min(...d[1])),new y(Math.max(...d[0]),Math.max(...d[1]))];return F.cachesBoundsOfCurve&&(di.boundsOfCurveCache[l]=_),_}var Eh=(i,t,[e,r,s,n,o,a,l,h])=>{let c=((u,d,g,p,f,v,x)=>{if(g===0||p===0)return[];let b=0,_=0,C=0,S=Math.PI,k=x*ps,T=xt(k),O=yt(k),P=.5*(-O*u-T*d),A=.5*(-O*d+T*u),D=g**2,E=p**2,j=A**2,B=P**2,H=D*E-D*j-E*B,Y=Math.abs(g),K=Math.abs(p);if(H<0){let Xt=Math.sqrt(1-H/(D*E));Y*=Xt,K*=Xt}else C=(f===v?-1:1)*Math.sqrt(H/(D*j+E*B));let st=C*Y*A/K,I=-C*K*P/Y,_t=O*st-T*I+.5*u,Be=T*st+O*I+.5*d,Xe=wn(1,0,(P-st)/Y,(A-I)/K),Bt=wn((P-st)/Y,(A-I)/K,(-P-st)/Y,(-A-I)/K);v===0&&Bt>0?Bt-=2*S:v===1&&Bt<0&&(Bt+=2*S);let $e=Math.ceil(Math.abs(Bt/S*2)),ki=[],Ye=Bt/$e,Va=8/3*Math.sin(Ye/4)*Math.sin(Ye/4)/Math.sin(Ye/2),Pr=Xe+Ye;for(let Xt=0;Xt<$e;Xt++)ki[Xt]=Dh(Xe,Pr,O,T,Y,K,_t,Be,Va,b,_),b=ki[Xt][5],_=ki[Xt][6],Xe=Pr,Pr+=Ye;return ki})(l-i,h-t,r,s,o,a,n);for(let u=0,d=c.length;u<d;u++)c[u][1]+=i,c[u][2]+=t,c[u][3]+=i,c[u][4]+=t,c[u][5]+=i,c[u][6]+=t;return c},Jo=i=>{let t=0,e=0,r=0,s=0,n=[],o,a=0,l=0;for(let h of i){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],r=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":a=c[3],l=c[4],t=c[5],e=c[6],u=["C",c[1],c[2],a,l,t,e];break;case"s":c[1]+=t,c[2]+=e,c[3]+=t,c[4]+=e;case"S":o==="C"?(a=2*t-a,l=2*e-l):(a=t,l=e),t=c[3],e=c[4],u=["C",a,l,c[1],c[2],t,e],a=u[3],l=u[4];break;case"q":c[1]+=t,c[2]+=e,c[3]+=t,c[4]+=e;case"Q":a=c[1],l=c[2],t=c[3],e=c[4],u=["Q",a,l,t,e];break;case"t":c[1]+=t,c[2]+=e;case"T":o==="Q"?(a=2*t-a,l=2*e-l):(a=t,l=e),t=c[1],e=c[2],u=["Q",a,l,t,e];break;case"a":c[6]+=t,c[7]+=e;case"A":Eh(t,e,c).forEach(d=>n.push(d)),t=c[6],e=c[7];break;case"z":case"Z":t=r,e=s,u=["Z"]}u?(n.push(u),o=u[0]):o=""}return n},Zi=(i,t,e,r)=>Math.sqrt((e-i)**2+(r-t)**2),Zo=(i,t,e,r,s,n,o,a)=>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 y(o*h+s*c+e*u+i*d,a*h+n*c+r*u+t*d)},Qo=i=>i**2,ta=i=>2*i*(1-i),ea=i=>(1-i)**2,Ah=(i,t,e,r,s,n,o,a)=>l=>{let h=Qo(l),c=ta(l),u=ea(l),d=3*(u*(e-i)+c*(s-e)+h*(o-s)),g=3*(u*(r-t)+c*(n-r)+h*(a-n));return Math.atan2(g,d)},jh=(i,t,e,r,s,n)=>o=>{let a=Qo(o),l=ta(o),h=ea(o);return new y(s*a+e*l+i*h,n*a+r*l+t*h)},Fh=(i,t,e,r,s,n)=>o=>{let a=1-o,l=2*(a*(e-i)+o*(s-e)),h=2*(a*(r-t)+o*(n-r));return Math.atan2(h,l)},Tn=(i,t,e)=>{let r=new y(t,e),s=0;for(let n=1;n<=100;n+=1){let o=i(n/100);s+=Zi(r.x,r.y,o.x,o.y),r=o}return s},Lh=(i,t)=>{let e,r=0,s=0,n={x:i.x,y:i.y},o={...n},a=.01,l=0,h=i.iterator,c=i.angleFinder;for(;s<t&&a>1e-4;)o=h(r),l=r,e=Zi(n.x,n.y,o.x,o.y),e+s>t?(r-=a,a/=2):(n=o,r+=a,s+=e);return{...o,angle:c(l)}},Vs=i=>{let t,e,r=0,s=0,n=0,o=0,a=0,l=[];for(let h of i){let c={x:s,y:n,command:h[0],length:0};switch(h[0]){case"M":e=c,e.x=o=s=h[1],e.y=a=n=h[2];break;case"L":e=c,e.length=Zi(s,n,h[1],h[2]),s=h[1],n=h[2];break;case"C":t=Zo(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e=c,e.iterator=t,e.angleFinder=Ah(s,n,h[1],h[2],h[3],h[4],h[5],h[6]),e.length=Tn(t,s,n),s=h[5],n=h[6];break;case"Q":t=jh(s,n,h[1],h[2],h[3],h[4]),e=c,e.iterator=t,e.angleFinder=Fh(s,n,h[1],h[2],h[3],h[4]),e.length=Tn(t,s,n),s=h[3],n=h[4];break;case"Z":e=c,e.destX=o,e.destY=a,e.length=Zi(s,n,o,a),s=o,n=a}r+=e.length,l.push(e)}return l.push({length:r,x:s,y:n}),l},ia=(i,t,e=Vs(i))=>{let r=0;for(;t-e[r].length>0&&r<e.length-2;)t-=e[r].length,r++;let s=e[r],n=t/s.length,o=i[r];switch(s.command){case"M":return{x:s.x,y:s.y,angle:0};case"Z":return{...new y(s.x,s.y).lerp(new y(s.destX,s.destY),n),angle:Math.atan2(s.destY-s.y,s.destX-s.x)};case"L":return{...new y(s.x,s.y).lerp(new y(o[1],o[2]),n),angle:Math.atan2(o[2]-s.y,o[1]-s.x)};case"C":case"Q":return Lh(s,t)}},Ih=RegExp("[mzlhvcsqta][^mzlhvcsqta]*","gi"),On=new RegExp(Ph,"g"),Rh=new RegExp(pt,"gi"),Bh={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},ra=i=>{var t;let e=[],r=(t=i.match(Ih))==null?[]:t;for(let s of r){let n=s[0];if(n==="z"||n==="Z"){e.push([n]);continue}let o=Bh[n.toLowerCase()],a=[];if(n==="a"||n==="A"){let l;for(On.lastIndex=0;l=On.exec(s);)a.push(...l.slice(1))}else a=s.match(Rh)||[];for(let l=0;l<a.length;l+=o){let h=Array(o),c=Mh[n];h[0]=l>0&&c?c:n;for(let u=0;u<o;u++)h[u+1]=parseFloat(a[l+u]);e.push(h)}}return e},Xh=(i,t=0)=>{let e=new y(i[0]),r=new y(i[1]),s=1,n=0,o=[],a=i.length,l=a>2,h;for(l&&(s=i[2].x<r.x?-1:i[2].x===r.x?0:1,n=i[2].y<r.y?-1:i[2].y===r.y?0:1),o.push(["M",e.x-s*t,e.y-n*t]),h=1;h<a;h++){if(!e.eq(r)){let c=e.midPointFrom(r);o.push(["Q",e.x,e.y,c.x,c.y])}e=i[h],h+1<i.length&&(r=i[h+1])}return l&&(s=e.x>i[h-2].x?1:e.x===i[h-2].x?0:-1,n=e.y>i[h-2].y?1:e.y===i[h-2].y?0:-1),o.push(["L",e.x+s*t,e.y+n*t]),o},$h=(i,t,e)=>(e&&(t=$(t,[1,0,0,1,-e.x,-e.y])),i.map(r=>{let s=[...r];for(let n=1;n<r.length-1;n+=2){let{x:o,y:a}=N({x:r[n],y:r[n+1]},t);s[n]=o,s[n+1]=a}return s})),Yh=(i,t)=>{let e=2*Math.PI/i,r=-Vt;i%2==0&&(r+=e/2);let s=Array(i+1);for(let n=0;n<i;n++){let o=n*e+r,{x:a,y:l}=new y(yt(o),xt(o)).scalarMultiply(t);s[n]=[n===0?"M":"L",a,l]}return s[i]=["Z"],s},sa=(i,t)=>i.map(e=>e.map((r,s)=>s===0||t===void 0?r:R(r,t)).join(" ")).join(" "),Wh=(i,t)=>{var e;let r=i,s=t;r.inverted&&!s.inverted&&(r=t,s=i),Os(s,(e=s.group)==null?void 0:e.calcTransformMatrix(),r.calcTransformMatrix());let n=r.inverted&&s.inverted;return n&&(r.inverted=s.inverted=!1),new Et([r],{clipPath:s,inverted:n})},Vh=(i,t)=>Math.floor(Math.random()*(t-i+1))+i,Vi=(i,t)=>{let e=i._findCenterFromElement();i.transformMatrix&&((r=>{if(r.transformMatrix){let{scaleX:s,scaleY:n,angle:o,skewX:a}=re(r.transformMatrix);r.flipX=!1,r.flipY=!1,r.set(zt,s),r.set(Ht,n),r.angle=o,r.skewX=a,r.skewY=0}})(i),e=e.transform(i.transformMatrix)),delete i.transformMatrix,t&&(i.scaleX*=t.scaleX,i.scaleY*=t.scaleY,i.cropX=t.cropX,i.cropY=t.cropY,e.x+=t.offsetLeft,e.y+=t.offsetTop,i.width=t.width,i.height=t.height),i.setPositionByOrigin(e,L,L)},Ut=_i({addTransformToObject:()=>so,animate:()=>Rs,animateColor:()=>bo,applyTransformToObject:()=>be,calcAngleBetweenVectors:()=>qi,calcDimensionsMatrix:()=>Ci,calcPlaneChangeMatrix:()=>wi,calcVectorRotation:()=>Ps,cancelAnimFrame:()=>Gn,capValue:()=>se,composeMatrix:()=>Jn,copyCanvasElement:()=>sl,cos:()=>yt,createCanvasElement:()=>kt,createImage:()=>Nn,createRotateMatrix:()=>ne,createScaleMatrix:()=>sr,createSkewXMatrix:()=>_s,createSkewYMatrix:()=>Cs,createTranslateMatrix:()=>Te,createVector:()=>yi,crossProduct:()=>ve,degreesToRadians:()=>X,dotProduct:()=>lo,ease:()=>wl,enlivenObjectEnlivables:()=>Si,enlivenObjects:()=>ye,findScaleToCover:()=>Ko,findScaleToFit:()=>qo,getBoundsOfCurve:()=>es,getOrthonormalVector:()=>Ms,getPathSegmentsInfo:()=>Vs,getPointOnPath:()=>ia,getPointer:()=>ro,getRandomInt:()=>Vh,getRegularPolygonPath:()=>Yh,getSmoothPathFromPoints:()=>Xh,getSvgAttributes:()=>fl,getUnitVector:()=>ar,groupSVGElements:()=>kh,hasStyleChanged:()=>gr,invertTransform:()=>rt,isBetweenVectors:()=>Vr,isIdentityMatrix:()=>Un,isTouchEvent:()=>Ni,isTransparent:()=>$o,joinPath:()=>sa,loadImage:()=>pi,magnitude:()=>Ui,makeBoundingBoxFromPoints:()=>wt,makePathSimpler:()=>Jo,matrixToSVG:()=>xe,mergeClipPaths:()=>Wh,multiplyTransformMatrices:()=>$,multiplyTransformMatrixArray:()=>rr,parsePath:()=>ra,parsePreserveAspectRatioAttribute:()=>As,parseUnit:()=>Z,pick:()=>oe,projectStrokeOnPoints:()=>Vo,qrDecompose:()=>re,radiansToDegrees:()=>jt,removeFromArray:()=>Kt,removeTransformFromObject:()=>ul,removeTransformMatrixForSvgParsing:()=>Vi,requestAnimFrame:()=>gi,resetObjectTransform:()=>no,rotateVector:()=>ks,saveObjectTransform:()=>Ts,sendObjectToPlane:()=>Os,sendPointToPlane:()=>Ft,sendVectorToPlane:()=>oo,sin:()=>xt,sizeAfterTransform:()=>or,string:()=>ol,stylesFromArray:()=>Ho,stylesToArray:()=>zo,toBlob:()=>ys,toDataURL:()=>vs,toFixed:()=>R,transformPath:()=>$h,transformPoint:()=>N});function is(i,t){let e=i.style;e&&Object.entries(t).forEach(([r,s])=>e.setProperty(r,s))}var zh=class extends eo{constructor(i,{allowTouchScrolling:t=!1,containerClass:e=""}={}){super(i),m(this,"upper",void 0),m(this,"container",void 0);let{el:r}=this.lower,s=this.createUpperCanvas();this.upper={el:s,ctx:s.getContext("2d")},this.applyCanvasStyle(r,{allowTouchScrolling:t}),this.applyCanvasStyle(s,{allowTouchScrolling:t,styles:{position:"absolute",left:"0",top:"0"}});let n=this.createContainerElement();n.classList.add(e),r.parentNode&&r.parentNode.replaceChild(n,r),n.append(r,s),this.container=n}createUpperCanvas(){let{el:i}=this.lower,t=kt();return t.className=i.className,t.classList.remove("lower-canvas"),t.classList.add("upper-canvas"),t.setAttribute("data-fabric","top"),t.style.cssText=i.style.cssText,t.setAttribute("draggable","true"),t}createContainerElement(){let i=Ce().createElement("div");return i.setAttribute("data-fabric","wrapper"),is(i,{position:"relative"}),ln(i),i}applyCanvasStyle(i,t){let{styles:e,allowTouchScrolling:r}=t;is(i,{...e,"touch-action":r?"manipulation":er}),ln(i)}setDimensions(i,t){super.setDimensions(i,t);let{el:e,ctx:r}=this.upper;to(e,r,i,t)}setCSSDimensions(i){super.setCSSDimensions(i),Wr(this.upper.el,i),Wr(this.container,i)}cleanupDOM(i){let t=this.container,{el:e}=this.lower,{el:r}=this.upper;super.cleanupDOM(i),t.removeChild(r),t.removeChild(e),t.parentNode&&t.parentNode.replaceChild(e,t)}dispose(){super.dispose(),Tt().dispose(this.upper.el),delete this.upper,delete this.container}},na=(i,t,e,r)=>{let{target:s,offsetX:n,offsetY:o}=t,a=e-n,l=r-o,h=!mt(s,"lockMovementX")&&s.left!==a,c=!mt(s,"lockMovementY")&&s.top!==l;return h&&s.set("left",a),c&&s.set("top",l),(h||c)&&Bs(Rn,Es(i,t,e,r)),h||c},oa=Yn,aa=i=>function(t,e,r){let{points:s,pathOffset:n}=r;return new y(s[i]).subtract(n).transform($(r.getViewportTransform(),r.calcTransformMatrix()))},la=(i,t,e,r)=>{let{target:s,pointIndex:n}=t,o=s,a=Ft(new y(e,r),void 0,o.calcOwnMatrix());return o.points[n]=a.add(o.pathOffset),o.setDimensions(),o.set("dirty",!0),!0},ha=(i,t)=>function(e,r,s,n){let o=r.target,a=new y(o.points[(i>0?i:o.points.length)-1]),l=a.subtract(o.pathOffset).transform(o.calcOwnMatrix()),h=t(e,{...r,pointIndex:i},s,n),c=a.subtract(o.pathOffset).transform(o.calcOwnMatrix()).subtract(l);return o.left-=c.x,o.top-=c.y,h},ca=i=>It(oa,ha(i,la));function Hh(i,t={}){let e={};for(let r=0;r<(typeof i=="number"?i:i.points.length);r++)e[`p${r}`]=new ot({actionName:oa,positionHandler:aa(r),actionHandler:ca(r),...t});return e}var rs=(i,t,e)=>{let{path:r,pathOffset:s}=i,n=r[t];return new y(n[e]-s.x,n[e+1]-s.y).transform($(i.getViewportTransform(),i.calcTransformMatrix()))};function Gh(i,t,e){let{commandIndex:r,pointIndex:s}=this;return rs(e,r,s)}function Nh(i,t,e,r){let{target:s}=t,{commandIndex:n,pointIndex:o}=this,a=((l,h,c,u,d)=>{let{path:g,pathOffset:p}=l,f=g[(u>0?u:g.length)-1],v=new y(f[d],f[d+1]),x=v.subtract(p).transform(l.calcOwnMatrix()),b=Ft(new y(h,c),void 0,l.calcOwnMatrix());g[u][d]=b.x+p.x,g[u][d+1]=b.y+p.y,l.setDimensions();let _=v.subtract(l.pathOffset).transform(l.calcOwnMatrix()).subtract(x);return l.left-=_.x,l.top-=_.y,l.set("dirty",!0),!0})(s,e,r,n,o);return a&&Bs(this.actionName,{...Es(i,t,e,r),commandIndex:n,pointIndex:o}),a}var ua=class extends ot{constructor(i){super(i)}render(i,t,e,r,s){let n={...r,cornerColor:this.controlFill,cornerStrokeColor:this.controlStroke,transparentCorners:!this.controlFill};super.render(i,t,e,n,s)}},Uh=class extends ua{constructor(i){super(i)}render(i,t,e,r,s){let{path:n}=s,{commandIndex:o,pointIndex:a,connectToCommandIndex:l,connectToPointIndex:h}=this;i.save(),i.strokeStyle=this.controlStroke,this.connectionDashArray&&i.setLineDash(this.connectionDashArray);let[c]=n[o],u=rs(s,l,h);if(c==="Q"){let d=rs(s,o,a+2);i.moveTo(d.x,d.y),i.lineTo(t,e)}else i.moveTo(t,e);i.lineTo(u.x,u.y),i.stroke(),i.restore(),super.render(i,t,e,r,s)}},Mi=(i,t,e,r,s,n)=>new(e?Uh:ua)({commandIndex:i,pointIndex:t,actionName:"modifyPath",positionHandler:Gh,actionHandler:Nh,connectToCommandIndex:s,connectToPointIndex:n,...r,...e?r.controlPointStyle:r.pointStyle});function qh(i,t={}){let e={},r="M";return i.path.forEach((s,n)=>{let o=s[0];switch(o!=="Z"&&(e[`c_${n}_${o}`]=Mi(n,s.length-2,!1,t)),o){case"C":e[`c_${n}_C_CP_1`]=Mi(n,1,!0,t,n-1,(a=>a==="C"?5:a==="Q"?3:1)(r)),e[`c_${n}_C_CP_2`]=Mi(n,3,!0,t,n,5);break;case"Q":e[`c_${n}_Q_CP_1`]=Mi(n,1,!0,t,n,3)}r=o}),e}var iu=_i({changeHeight:()=>nh,changeObjectHeight:()=>So,changeObjectWidth:()=>Co,changeWidth:()=>Hr,createObjectDefaultControls:()=>$s,createPathControls:()=>qh,createPolyActionHandler:()=>ca,createPolyControls:()=>Hh,createPolyPositionHandler:()=>aa,createResizeControls:()=>Io,createTextboxDefaultControls:()=>Ro,dragHandler:()=>na,factoryPolyActionHandler:()=>ha,getLocalPoint:()=>lr,polyActionHandler:()=>la,renderCircleControl:()=>wo,renderSquareControl:()=>To,rotationStyleHandler:()=>Oo,rotationWithSnapping:()=>ko,scaleCursorStyleHandler:()=>ge,scaleOrSkewActionName:()=>Ne,scaleSkewCursorStyleHandler:()=>te,scalingEqually:()=>Ge,scalingX:()=>Do,scalingXOrSkewingY:()=>Gr,scalingY:()=>Eo,scalingYOrSkewingX:()=>Nr,skewCursorStyleHandler:()=>Ao,skewHandlerX:()=>Fo,skewHandlerY:()=>Lo,wrapWithFireEvent:()=>It,wrapWithFixedAnchor:()=>Gt}),da=class ga extends ws{constructor(...t){super(...t),m(this,"_hoveredTargets",[]),m(this,"_currentTransform",null),m(this,"_groupSelector",null),m(this,"contextTopDirty",!1)}static getDefaults(){return{...super.getDefaults(),...ga.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 zh(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(),r=Math.ceil((2*t+1)*e);this.pixelFindCanvasEl.width=this.pixelFindCanvasEl.height=r,this.pixelFindContext.scale(e,e)}isTargetTransparent(t,e,r){let s=this.targetFindTolerance,n=this.pixelFindContext;this.clearContext(n),n.save(),n.translate(-e+s,-r+s),n.transform(...this.viewportTransform);let o=t.selectionBackgroundColor;t.selectionBackgroundColor="",t.render(n),t.selectionBackgroundColor=o,n.restore();let a=Math.round(s*this.getRetinaScaling());return $o(n,a,a,a)}_isSelectionKeyPressed(t){let e=this.selectionKey;return!!e&&(Array.isArray(e)?!!e.find(r=>!!r&&t[r]===!0):t[e])}_shouldClearSelection(t,e){let r=this.getActiveObjects(),s=this._activeObject;return!!(!e||e&&s&&r.length>1&&r.indexOf(e)===-1&&s!==e&&!this._isSelectionKeyPressed(t)||e&&!e.evented||e&&!e.selectable&&s&&s!==e)}_shouldCenterTransform(t,e,r){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?!r:r}_getOriginFromCorner(t,e){let r=e?t.controls[e].getTransformAnchorPoint():{x:t.originX,y:t.originY};return e&&(["ml","tl","bl"].includes(e)?r.x=ft:["mr","tr","br"].includes(e)&&(r.x=V),["tl","mt","tr"].includes(e)?r.y=In:["bl","mb","br"].includes(e)&&(r.y="top")),r}_setupCurrentTransform(t,e,r){var s;let n=e.group?Ft(this.getScenePoint(t),void 0,e.group.calcTransformMatrix()):this.getScenePoint(t),{key:o="",control:a}=e.getActiveControl()||{},l=r&&a?(s=a.getActionHandler(t,e,a))==null?void 0:s.bind(a):na,h=((O,P,A,D)=>{if(!P||!O)return"drag";let E=D.controls[P];return E.getActionName(A,E,D)})(r,o,t,e),c=t[this.centeredKey],u=this._shouldCenterTransform(e,h,c)?{x:L,y:L}:this._getOriginFromCorner(e,o),{scaleX:d,scaleY:g,skewX:p,skewY:f,left:v,top:x,angle:b,width:_,height:C,cropX:S,cropY:k}=e,T={target:e,action:h,actionHandler:l,actionPerformed:!1,corner:o,scaleX:d,scaleY:g,skewX:p,skewY:f,offsetX:n.x-v,offsetY:n.y-x,originX:u.x,originY:u.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:X(b),width:_,height:C,shiftKey:t.shiftKey,altKey:c,original:{...Ts(e),originX:u.x,originY:u.y,cropX:S,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:r,deltaX:s,deltaY:n}=this._groupSelector,o=new y(e,r).transform(this.viewportTransform),a=new y(e+s,r+n).transform(this.viewportTransform),l=this.selectionLineWidth/2,h=Math.min(o.x,a.x),c=Math.min(o.y,a.y),u=Math.max(o.x,a.x),d=Math.max(o.y,a.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,U.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),r=this._activeObject,s=this.getActiveObjects(),n=this.searchPossibleTargets(this._objects,e),{subTargets:o,container:a,target:l}=n,h={...n,currentSubTargets:o,currentContainer:a,currentTarget:l};if(!r)return h;let c={...this.searchPossibleTargets([r],e),currentSubTargets:o,currentContainer:a,currentTarget:l};return r.findControl(this.getViewportPoint(t),Ni(t))?{...c,target:r}:c.target&&(s.length>1||!this.preserveObjectStacking||this.preserveObjectStacking&&t[this.altSelectionKey])?c:h}_pointIsInObjectSelectionArea(t,e){let r=t.getCoords(),s=this.getZoom(),n=t.padding/s;if(n){let[o,a,l,h]=r,c=Math.atan2(a.y-o.y,a.x-o.x),u=yt(c)*n,d=xt(c)*n,g=u+d,p=u-d;r=[new y(o.x-p,o.y-g),new y(a.x+g,a.y-p),new y(l.x+p,l.y+g),new y(h.x-g,h.y+p)]}return mi.isPointInPolygon(e,r)}_checkTarget(t,e){if(t&&t.visible&&t.evented&&this._pointIsInObjectSelectionArea(t,e)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||t.isEditing)return!0;{let r=e.transform(this.viewportTransform);if(!this.isTargetTransparent(t,r.x,r.y))return!0}}return!1}_searchPossibleTargets(t,e,r){let s=t.length;for(;s--;){let n=t[s];if(this._checkTarget(n,e)){if(Xi(n)&&n.subTargetCheck){let{target:o}=this._searchPossibleTargets(n._objects,e,r);o&&r.push(o)}return{target:n,subTargets:r}}}return{subTargets:[]}}searchPossibleTargets(t,e){let r=this._searchPossibleTargets(t,e,[]);r.container=r.target;let{container:s,subTargets:n}=r;if(s&&Xi(s)&&s.interactive&&n[0]){for(let o=n.length-1;o>0;o--){let a=n[o];if(!Xi(a)||!a.interactive)return r.target=a,r}return r.target=n[0],r}return r}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 r=this.upperCanvasEl,s=r.getBoundingClientRect(),n=ro(t),o=s.width||0,a=s.height||0;o&&a||("top"in s&&"bottom"in s&&(a=Math.abs(s.top-s.bottom)),"right"in s&&"left"in s&&(o=Math.abs(s.right-s.left))),this.calcOffset(),n.x-=this._offset.left,n.y-=this._offset.top,e||(n=Ft(n,void 0,this.viewportTransform));let l=this.getRetinaScaling();l!==1&&(n.x/=l,n.y/=l);let h=o===0||a===0?new y(1,1):new y(r.width/o,r.height/a);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=kt(),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 Jt(t)?t.getObjects():t?[t]:[]}_fireSelectionEvents(t,e){let r=!1,s=!1,n=this.getActiveObjects(),o=[],a=[];t.forEach(l=>{n.includes(l)||(r=!0,l.fire("deselected",{e,target:l}),a.push(l))}),n.forEach(l=>{t.includes(l)||(r=!0,l.fire("selected",{e,target:l}),o.push(l))}),t.length>0&&n.length>0?(s=!0,r&&this.fire("selection:updated",{e,selected:o,deselected:a})):n.length>0?(s=!0,this.fire("selection:created",{e,selected:o})):t.length>0&&(s=!0,this.fire("selection:cleared",{e,deselected:a})),s&&(this._objectsToRender=void 0)}setActiveObject(t,e){let r=this.getActiveObjects(),s=this._setActiveObject(t,e);return this._fireSelectionEvents(r,e),s}_setActiveObject(t,e){let r=this._activeObject;return r!==t&&!(!this._discardActiveObject(e,t)&&this._activeObject)&&!t.onSelect({e})&&(this._activeObject=t,Jt(t)&&r!==t&&t.set("canvas",this),t.setCoords(),!0)}_discardActiveObject(t,e){let r=this._activeObject;return!!r&&!r.onDeselect({e:t,object:e})&&(this._currentTransform&&this._currentTransform.target===r&&this.endCurrentTransform(t),Jt(r)&&r===this._hoveredTarget&&(this._hoveredTarget=void 0),this._activeObject=void 0,!0)}discardActiveObject(t){let e=this.getActiveObjects(),r=this.getActiveObject();e.length&&this.fire("before:selection:cleared",{e:t,deselected:[r]});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,r=e.target,s={e:t,target:r,transform:e,action:e.action};r._scaling&&(r._scaling=!1),r.setCoords(),e.actionPerformed&&(this.fire("object:modified",s),r.fire(Vn,s))}setViewportTransform(t){super.setViewportTransform(t);let e=this._activeObject;e&&e.setCoords()}destroy(){let t=this._activeObject;Jt(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,r){let s=this._realizeGroupTransformOnObject(t),n=super._toObject(t,e,r);return t.set(s),n}_realizeGroupTransformOnObject(t){let{group:e}=t;if(e&&Jt(e)&&this._activeObject===e){let r=oe(t,["angle","flipX","flipY",V,zt,Ht,Se,we,"top"]);return so(t,e.calcOwnMatrix()),r}return{}}_setSVGObject(t,e,r){let s=this._realizeGroupTransformOnObject(e);super._setSVGObject(t,e,r),e.set(s)}};m(da,"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 Kh=class{constructor(i){m(this,"targets",[]),m(this,"__disposer",void 0);let t=()=>{let{hiddenTextarea:r}=i.getActiveObject()||{};r&&r.focus()},e=i.upperCanvasEl;e.addEventListener("click",t),this.__disposer=()=>e.removeEventListener("click",t)}exitTextEditing(){this.target=void 0,this.targets.forEach(i=>{i.isEditing&&i.exitEditing()})}add(i){this.targets.push(i)}remove(i){this.unregister(i),Kt(this.targets,i)}register(i){this.target=i}unregister(i){i===this.target&&(this.target=void 0)}onMouseMove(i){var t;(t=this.target)!=null&&t.isEditing&&this.target.updateSelectionOnMouseMove(i)}clear(){this.targets=[],this.target=void 0}dispose(){this.clear(),this.__disposer(),delete this.__disposer}},nt={passive:!1},ce=(i,t)=>({viewportPoint:i.getViewportPoint(t),scenePoint:i.getScenePoint(t)}),$t=(i,...t)=>i.addEventListener(...t),ht=(i,...t)=>i.removeEventListener(...t),Jh={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"}},Qi=class extends da{constructor(i,t={}){super(i,t),m(this,"_isClick",void 0),m(this,"textEditingManager",new Kh(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($t)}_getEventPrefix(){return this.enablePointerEvents?"pointer":"mouse"}addOrRemove(i,t=!1){let e=this.upperCanvasEl,r=this._getEventPrefix();i(Qn(e),"resize",this._onResize),i(e,r+"down",this._onMouseDown),i(e,`${r}move`,this._onMouseMove,nt),i(e,`${r}out`,this._onMouseOut),i(e,`${r}enter`,this._onMouseEnter),i(e,"wheel",this._onMouseWheel,{passive:!1}),i(e,"contextmenu",this._onContextMenu),t||(i(e,"click",this._onClick),i(e,"dblclick",this._onClick)),i(e,"dragstart",this._onDragStart),i(e,"dragend",this._onDragEnd),i(e,"dragover",this._onDragOver),i(e,"dragenter",this._onDragEnter),i(e,"dragleave",this._onDragLeave),i(e,"drop",this._onDrop),this.enablePointerEvents||i(e,"touchstart",this._onTouchStart,nt)}removeListeners(){this.addOrRemove(ht);let i=this._getEventPrefix(),t=gt(this.upperCanvasEl);ht(t,`${i}up`,this._onMouseUp),ht(t,"touchend",this._onTouchEnd,nt),ht(t,`${i}move`,this._onMouseMove,nt),ht(t,"touchmove",this._onMouseMove,nt),clearTimeout(this._willAddMouseDown)}_onMouseWheel(i){this._cacheTransformEventData(i),this._handleEvent(i,"wheel"),this._resetTransformEventData()}_onMouseOut(i){let t=this._hoveredTarget,e={e:i,...ce(this,i)};this.fire("mouse:out",{...e,target:t}),this._hoveredTarget=void 0,t&&t.fire("mouseout",{...e}),this._hoveredTargets.forEach(r=>{this.fire("mouse:out",{...e,target:r}),r&&r.fire("mouseout",{...e})}),this._hoveredTargets=[]}_onMouseEnter(i){let{target:t}=this.findTarget(i);this._currentTransform||t||(this.fire("mouse:over",{e:i,...ce(this,i)}),this._hoveredTarget=void 0,this._hoveredTargets=[])}_onDragStart(i){this._isClick=!1;let t=this.getActiveObject();if(t&&t.onDragStart(i)){this._dragSource=t;let e={e:i,target:t};this.fire("dragstart",e),t.fire("dragstart",e),$t(this.upperCanvasEl,"drag",this._onDragProgress);return}hn(i)}_renderDragEffects(i,t,e){let r=!1,s=this._dropTarget;s&&s!==t&&s!==e&&(s.clearContextTop(),r=!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(i),n.restore(),r=!0),e&&(n.save(),e.transform(n),e.renderDropTargetEffect(i),n.restore(),r=!0),n.restore(),r&&(this.contextTopDirty=!0)}_onDragEnd(i){let{currentSubTargets:t}=this.findTarget(i),e=!!i.dataTransfer&&i.dataTransfer.dropEffect!=="none",r=e?this._activeObject:void 0,s={e:i,target:this._dragSource,subTargets:t,dragSource:this._dragSource,didDrop:e,dropTarget:r};ht(this.upperCanvasEl,"drag",this._onDragProgress),this.fire("dragend",s),this._dragSource&&this._dragSource.fire("dragend",s),delete this._dragSource,this._onMouseUp(i)}_onDragProgress(i){let t={e:i,target:this._dragSource,dragSource:this._dragSource,dropTarget:this._draggedoverTarget};this.fire("drag",t),this._dragSource&&this._dragSource.fire("drag",t)}_onDragOver(i){let t="dragover",{currentContainer:e,currentSubTargets:r}=this.findTarget(i),s=this._dragSource,n={e:i,target:e,subTargets:r,dragSource:s,canDrop:!1,dropTarget:void 0},o;this.fire(t,n),this._fireEnterLeaveEvents(i,e,n),e&&(e.canDrop(i)&&(o=e),e.fire(t,n));for(let a=0;a<r.length;a++){let l=r[a];l.canDrop(i)&&(o=l),l.fire(t,n)}this._renderDragEffects(i,s,o),this._dropTarget=o}_onDragEnter(i){let{currentContainer:t,currentSubTargets:e}=this.findTarget(i),r={e:i,target:t,subTargets:e,dragSource:this._dragSource};this.fire("dragenter",r),this._fireEnterLeaveEvents(i,t,r)}_onDragLeave(i){let{currentSubTargets:t}=this.findTarget(i),e={e:i,target:this._draggedoverTarget,subTargets:t,dragSource:this._dragSource};this.fire("dragleave",e),this._fireEnterLeaveEvents(i,void 0,e),this._renderDragEffects(i,this._dragSource),this._dropTarget=void 0,this._hoveredTargets=[]}_onDrop(i){let{currentContainer:t,currentSubTargets:e}=this.findTarget(i),r=this._basicEventHandler("drop:before",{e:i,target:t,subTargets:e,dragSource:this._dragSource,...ce(this,i)});r.didDrop=!1,r.dropTarget=void 0,this._basicEventHandler("drop",r),this.fire("drop:after",r)}_onContextMenu(i){let{target:t,subTargets:e}=this.findTarget(i),r=this._basicEventHandler("contextmenu:before",{e:i,target:t,subTargets:e});return this.stopContextMenu&&hn(i),this._basicEventHandler("contextmenu",r),!1}_onClick(i){let t=i.detail;t>3||t<2||(this._cacheTransformEventData(i),t==2&&i.type==="dblclick"&&this._handleEvent(i,"dblclick"),t==3&&this._handleEvent(i,"tripleclick"),this._resetTransformEventData())}fireEventFromPointerEvent(i,t,e,r={}){this._cacheTransformEventData(i);let{target:s,subTargets:n}=this.findTarget(i),o={e:i,target:s,subTargets:n,...ce(this,i),transform:this._currentTransform,...r};this.fire(t,o),s&&s.fire(e,o);for(let a=0;a<n.length;a++)n[a]!==s&&n[a].fire(e,o);this._resetTransformEventData()}getPointerId(i){let t=i.changedTouches;return t?t[0]&&t[0].identifier:this.enablePointerEvents?i.pointerId:-1}_isMainEvent(i){return i.isPrimary===!0||i.isPrimary!==!1&&(i.type==="touchend"&&i.touches.length===0||!i.changedTouches||i.changedTouches[0].identifier===this.mainTouchId)}_onTouchStart(i){this._cacheTransformEventData(i);let t=!this.allowTouchScrolling,e=this._activeObject;this.mainTouchId===void 0&&(this.mainTouchId=this.getPointerId(i)),this.__onMouseDown(i);let{target:r}=this.findTarget(i);(this.isDrawingMode||e&&r===e)&&(t=!0),t&&i.preventDefault();let s=this.upperCanvasEl,n=this._getEventPrefix(),o=gt(s);$t(o,"touchend",this._onTouchEnd,nt),t&&$t(o,"touchmove",this._onMouseMove,nt),ht(s,`${n}down`,this._onMouseDown),this._resetTransformEventData()}_onMouseDown(i){this._cacheTransformEventData(i),this.__onMouseDown(i);let t=this.upperCanvasEl,e=this._getEventPrefix();ht(t,`${e}move`,this._onMouseMove,nt);let r=gt(t);$t(r,`${e}up`,this._onMouseUp),$t(r,`${e}move`,this._onMouseMove,nt),this._resetTransformEventData()}_onTouchEnd(i){if(i.touches.length>0)return;this._cacheTransformEventData(i),this.__onMouseUp(i),this._resetTransformEventData(),delete this.mainTouchId;let t=this._getEventPrefix(),e=gt(this.upperCanvasEl);ht(e,"touchend",this._onTouchEnd,nt),ht(e,"touchmove",this._onMouseMove,nt),this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(()=>{$t(this.upperCanvasEl,`${t}down`,this._onMouseDown),this._willAddMouseDown=0},400)}_onMouseUp(i){this._cacheTransformEventData(i),this.__onMouseUp(i);let t=this.upperCanvasEl,e=this._getEventPrefix();if(this._isMainEvent(i)){let r=gt(this.upperCanvasEl);ht(r,`${e}up`,this._onMouseUp),ht(r,`${e}move`,this._onMouseMove,nt),$t(t,`${e}move`,this._onMouseMove,nt)}this._resetTransformEventData()}_onMouseMove(i){this._cacheTransformEventData(i);let t=this.getActiveObject();!this.allowTouchScrolling&&(!t||!t.shouldStartDragging(i))&&i.preventDefault&&i.preventDefault(),this.__onMouseMove(i),this._resetTransformEventData()}_onResize(){this.calcOffset(),this._resetTransformEventData()}_shouldRender(i){let t=this.getActiveObject();return!!t!=!!i||t&&i&&t!==i}__onMouseUp(i){var t;this._handleEvent(i,"up:before");let e=this._currentTransform,r=this._isClick,{target:s}=this.findTarget(i),{button:n}=i;if(n)return void((this.fireMiddleClick&&n===1||this.fireRightClick&&n===2)&&this._handleEvent(i,"up"));if(this.isDrawingMode&&this._isCurrentlyDrawing)return void this._onMouseUpInDrawingMode(i);if(!this._isMainEvent(i))return;let o,a,l=!1;if(e&&(this._finalizeCurrentTransform(i),l=e.actionPerformed),!r){let h=s===this._activeObject;this.handleSelection(i),l||(l=this._shouldRender(s)||!h&&s===this._activeObject)}if(s){let{key:h,control:c}=s.findControl(this.getViewportPoint(i),Ni(i))||{};if(a=h,s.selectable&&s!==this._activeObject&&s.activeOn==="up")this.setActiveObject(s,i),l=!0;else if(c){let u=c.getMouseUpHandler(i,s,c);u&&(o=this.getScenePoint(i),u.call(c,i,e,o.x,o.y))}s.isMoving=!1}if(e&&(e.target!==s||e.corner!==a)){let h=e.target&&e.target.controls[e.corner],c=h&&h.getMouseUpHandler(i,e.target,h);o=o||this.getScenePoint(i),c&&c.call(h,i,e,o.x,o.y)}this._setCursorFromEvent(i,s),this._handleEvent(i,"up"),this._groupSelector=null,this._currentTransform=null,s&&(s.__corner=void 0),l?this.requestRenderAll():r||(t=this._activeObject)!=null&&t.isEditing||this.renderTop()}_basicEventHandler(i,t){let{target:e,subTargets:r=[]}=t;this.fire(i,t),e&&e.fire(i,t);for(let s=0;s<r.length;s++)r[s]!==e&&r[s].fire(i,t);return t}_handleEvent(i,t,e){let{target:r,subTargets:s}=this.findTarget(i),n={e:i,target:r,subTargets:s,...ce(this,i),transform:this._currentTransform,...t==="down:before"||t==="down"?e:{}};t!=="up:before"&&t!=="up"||(n.isClick=this._isClick),this.fire(`mouse:${t}`,n),r&&r.fire(`mouse${t}`,n);for(let o=0;o<s.length;o++)s[o]!==r&&s[o].fire(`mouse${t}`,n)}_onMouseDownInDrawingMode(i){this._isCurrentlyDrawing=!0,this.getActiveObject()&&(this.discardActiveObject(i),this.requestRenderAll());let t=this.getScenePoint(i);this.freeDrawingBrush&&this.freeDrawingBrush.onMouseDown(t,{e:i,pointer:t}),this._handleEvent(i,"down",{alreadySelected:!1})}_onMouseMoveInDrawingMode(i){if(this._isCurrentlyDrawing){let t=this.getScenePoint(i);this.freeDrawingBrush&&this.freeDrawingBrush.onMouseMove(t,{e:i,pointer:t})}this.setCursor(this.freeDrawingCursor),this._handleEvent(i,"move")}_onMouseUpInDrawingMode(i){let t=this.getScenePoint(i);this.freeDrawingBrush?this._isCurrentlyDrawing=!!this.freeDrawingBrush.onMouseUp({e:i,pointer:t}):this._isCurrentlyDrawing=!1,this._handleEvent(i,"up")}__onMouseDown(i){this._isClick=!0,this._handleEvent(i,"down:before");let{target:t}=this.findTarget(i),e=!!t&&t===this._activeObject,{button:r}=i;if(r)return void((this.fireMiddleClick&&r===1||this.fireRightClick&&r===2)&&this._handleEvent(i,"down",{alreadySelected:e}));if(this.isDrawingMode)return void this._onMouseDownInDrawingMode(i);if(!this._isMainEvent(i)||this._currentTransform)return;let s=this._shouldRender(t),n=!1;if(this.handleMultiSelection(i,t)?(t=this._activeObject,n=!0,s=!0):this._shouldClearSelection(i,t)&&this.discardActiveObject(i),this.selection&&(!t||!t.selectable&&!t.isEditing&&t!==this._activeObject)){let o=this.getScenePoint(i);this._groupSelector={x:o.x,y:o.y,deltaY:0,deltaX:0}}if(e=!!t&&t===this._activeObject,t){t.selectable&&t.activeOn==="down"&&this.setActiveObject(t,i);let o=t.findControl(this.getViewportPoint(i),Ni(i));if(t===this._activeObject&&(o||!n)){this._setupCurrentTransform(i,t,e);let a=o?o.control:void 0,l=this.getScenePoint(i),h=a&&a.getMouseDownHandler(i,t,a);h&&h.call(a,i,this._currentTransform,l.x,l.y)}}s&&(this._objectsToRender=void 0),this._handleEvent(i,"down",{alreadySelected:e}),s&&this.requestRenderAll()}_resetTransformEventData(){this._targetInfo=this._viewportPoint=this._scenePoint=void 0}_cacheTransformEventData(i){this._resetTransformEventData(),this._viewportPoint=this.getViewportPoint(i),this._scenePoint=Ft(this._viewportPoint,void 0,this.viewportTransform),this._targetInfo=this.findTarget(i),this._currentTransform&&(this._targetInfo.target=this._currentTransform.target)}__onMouseMove(i){if(this._isClick=!1,this._handleEvent(i,"move:before"),this.isDrawingMode)return void this._onMouseMoveInDrawingMode(i);if(!this._isMainEvent(i))return;let t=this._groupSelector;if(t){let e=this.getScenePoint(i);t.deltaX=e.x-t.x,t.deltaY=e.y-t.y,this.renderTop()}else if(this._currentTransform)this._transformObject(i);else{let{target:e}=this.findTarget(i);this._setCursorFromEvent(i,e),this._fireOverOutEvents(i,e)}this.textEditingManager.onMouseMove(i),this._handleEvent(i,"move")}_fireOverOutEvents(i,t){let{_hoveredTarget:e,_hoveredTargets:r}=this,{subTargets:s,currentTarget:n}=this.findTarget(i),o=Math.max(r.length,s.length);this.fireSyntheticInOutEvents("mouse",{e:i,target:t,oldTarget:e,actualTarget:n,oldActualTarget:this._hoveredActualTarget,fireCanvas:!0});for(let a=0;a<o;a++)s[a]===t||r[a]&&r[a]===e||this.fireSyntheticInOutEvents("mouse",{e:i,target:s[a],oldTarget:r[a]});this._hoveredActualTarget=n,this._hoveredTarget=t,this._hoveredTargets=s}_fireEnterLeaveEvents(i,t,e){let r=this._draggedoverTarget,s=this._hoveredTargets,{subTargets:n}=this.findTarget(i),o=Math.max(s.length,n.length);this.fireSyntheticInOutEvents("drag",{...e,target:t,oldTarget:r,fireCanvas:!0});for(let a=0;a<o;a++)this.fireSyntheticInOutEvents("drag",{...e,target:n[a],oldTarget:s[a]});this._draggedoverTarget=t}fireSyntheticInOutEvents(i,{target:t,oldTarget:e,actualTarget:r,oldActualTarget:s,fireCanvas:n,e:o,...a}){let{targetIn:l,targetOut:h,canvasIn:c,canvasOut:u}=Jh[i],d=e!==t,g=s!==r,p=t&&d,f=r&&g,v=e&&d,x=s&&g,b={...a,e:o,...ce(this,o)},_={...b,target:e,nextTarget:t,actualTarget:s,nextActualTarget:r};(v||x)&&n&&this.fire(u,_),v&&e.fire(h,_),x&&e!==s&&s.fire(h,_);let C={...b,target:t,previousTarget:e,actualTarget:r,previousActualTarget:s};(p||f)&&n&&this.fire(c,C),p&&t.fire(l,C),f&&r!==t&&r.fire(l,C)}_transformObject(i){let t=this.getScenePoint(i),e=this._currentTransform,r=e.target,s=r.group?Ft(t,void 0,r.group.calcTransformMatrix()):t;e.shiftKey=i.shiftKey,e.altKey=!!this.centeredKey&&i[this.centeredKey],this._performTransformAction(i,e,s),e.actionPerformed&&this.requestRenderAll()}_performTransformAction(i,t,e){let{action:r,actionHandler:s,target:n}=t,o=!!s&&s(i,t,e.x,e.y);o&&n.setCoords(),r==="drag"&&o&&(t.target.isMoving=!0,this.setCursor(t.target.moveCursor||this.moveCursor)),t.actionPerformed=t.actionPerformed||o}_setCursorFromEvent(i,t){if(!t)return void this.setCursor(this.defaultCursor);let e=t.hoverCursor||this.hoverCursor,r=Jt(this._activeObject)?this._activeObject:null,s=(!r||t.group!==r)&&t.findControl(this.getViewportPoint(i));if(s){let{control:n,coord:o}=s;this.setCursor(n.cursorStyleHandler(i,n,t,o))}else{if(t.subTargetCheck){let{subTargets:n}=this.findTarget(i);n.concat().reverse().forEach(o=>{e=o.hoverCursor||e})}this.setCursor(e)}}handleMultiSelection(i,t){let e=this._activeObject,r=Jt(e);if(e&&this._isSelectionKeyPressed(i)&&this.selection&&t&&t.selectable&&(e!==t||r)&&(r||!t.isDescendantOf(e)&&!e.isDescendantOf(t))&&!t.onSelect({e:i})&&!e.getActiveControl()){if(r){let s=e.getObjects(),n=[];if(t===e){let o=this.getScenePoint(i),a=this.searchPossibleTargets(s,o);if(a.target?(t=a.target,n=a.subTargets):(a=this.searchPossibleTargets(this._objects,o),t=a.target,n=a.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),i)):(e.multiSelectAdd(t),this._hoveredTarget=e,this._hoveredTargets=n),this._fireSelectionEvents(s,i)}else{e.isEditing&&e.exitEditing();let s=new(w.getClass("ActiveSelection"))([],{canvas:this});s.multiSelectAdd(e,t),this._hoveredTarget=s,this._setActiveObject(s,i),this._fireSelectionEvents([e],i)}return!0}return!1}handleSelection(i){if(!this.selection||!this._groupSelector)return!1;let{x:t,y:e,deltaX:r,deltaY:s}=this._groupSelector,n=new y(t,e),o=n.add(new y(r,s)),a=n.min(o),l=n.max(o).subtract(a),h=this.collectObjects({left:a.x,top:a.y,width:l.x,height:l.y},{includeIntersecting:!this.selectionFullyContained}),c=n.eq(o)?h[0]?[h[0]]:[]:h.length>1?h.filter(u=>!u.onSelect({e:i})).reverse():h;if(c.length===1)this.setActiveObject(c[0],i);else if(c.length>1){let u=w.getClass("ActiveSelection");this.setActiveObject(new u(c,{canvas:this}),i)}return this._groupSelector=null,!0}toCanvasElement(i=1,t){let{upper:e}=this.elements;e.ctx=void 0;let r=super.toCanvasElement(i,t);return e.ctx=e.el.getContext("2d"),r}clear(){this.textEditingManager.clear(),super.clear()}destroy(){this.removeListeners(),this.textEditingManager.dispose(),super.destroy()}},pa={x1:0,y1:0,x2:0,y2:0},Zh={...pa,r1:0,r2:0},pe=(i,t)=>isNaN(i)&&typeof t=="number"?t:i;function fa(i){return i&&/%$/.test(i)&&Number.isFinite(parseFloat(i))}function ma(i,t){return se(0,pe(typeof i=="number"?i:typeof i=="string"?parseFloat(i)/(fa(i)?100:1):NaN,t),1)}var Qh=/\s*;\s*/,tc=/\s*:\s*/;function ec(i,t){let e,r,s=i.getAttribute("style");if(s){let o=s.split(Qh);o[o.length-1]===""&&o.pop();for(let a=o.length;a--;){let[l,h]=o[a].split(tc).map(c=>c.trim());l==="stop-color"?e=h:l==="stop-opacity"&&(r=h)}}e=e||i.getAttribute("stop-color")||"rgb(0,0,0)",r=pe(parseFloat(r||i.getAttribute("stop-opacity")||""),1);let n=new lt(e);return n.setAlpha(n.getAlpha()*r*t),{offset:ma(i.getAttribute("offset"),0),color:n.toRgba()}}function ic(i,t){let e=[],r=i.getElementsByTagName("stop"),s=ma(t,1);for(let n=r.length;n--;)e.push(ec(r[n],s));return e}function va(i){return i.nodeName==="linearGradient"||i.nodeName==="LINEARGRADIENT"?"linear":"radial"}function ya(i){return i.getAttribute("gradientUnits")==="userSpaceOnUse"?"pixels":"percentage"}function dt(i,t){return i.getAttribute(t)}function rc(i,t){return(function(e,{width:r,height:s,gradientUnits:n}){let o;return Object.entries(e).reduce((a,[l,h])=>{if(h==="Infinity")o=1;else if(h==="-Infinity")o=0;else{let c=typeof h=="string";o=c?parseFloat(h):h,c&&fa(h)&&(o*=.01,n==="pixels"&&(l!=="x1"&&l!=="x2"&&l!=="r2"||(o*=r),l!=="y1"&&l!=="y2"||(o*=s)))}return a[l]=o,a},{})})(va(i)==="linear"?(function(e){return{x1:dt(e,"x1")||0,y1:dt(e,"y1")||0,x2:dt(e,"x2")||"100%",y2:dt(e,"y2")||0}})(i):(function(e){return{x1:dt(e,"fx")||dt(e,"cx")||"50%",y1:dt(e,"fy")||dt(e,"cy")||"50%",r1:0,x2:dt(e,"cx")||"50%",y2:dt(e,"cy")||"50%",r2:dt(e,"r")||"50%"}})(i),{...t,gradientUnits:ya(i)})}var Ue=class{constructor(i){let{type:t="linear",gradientUnits:e="pixels",coords:r={},colorStops:s=[],offsetX:n=0,offsetY:o=0,gradientTransform:a,id:l}=i||{};Object.assign(this,{type:t,gradientUnits:e,coords:{...t==="radial"?Zh:pa,...r},colorStops:s,offsetX:n,offsetY:o,gradientTransform:a,id:l?`${l}_${Wt()}`:Wt()})}addColorStop(i){for(let t in i)this.colorStops.push({offset:parseFloat(t),color:i[t]});return this}toObject(i){return{...oe(this,i),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(i,{additionalTransform:t}={}){let e=[],r=this.gradientTransform?this.gradientTransform.concat():et.concat(),s=this.gradientUnits==="pixels"?"userSpaceOnUse":"objectBoundingBox",n=this.colorStops.map(u=>({...u})).sort((u,d)=>u.offset-d.offset),o=-this.offsetX,a=-this.offsetY;var l;s==="objectBoundingBox"?(o/=i.width,a/=i.height):(o+=i.width/2,a+=i.height/2),(l=i)&&typeof l._renderPathCommands=="function"&&this.gradientUnits!=="percentage"&&(o-=i.pathOffset.x,a-=i.pathOffset.y),r[4]-=o,r[5]-=a;let h=[`id="SVGID_${M(String(this.id))}"`,`gradientUnits="${s}"`,`gradientTransform="${t?t+" ":""}${xe(r)}"`,""].join(" "),c=u=>parseFloat(String(u));if(this.type==="linear"){let{x1:u,y1:d,x2:g,y2:p}=this.coords,f=c(u),v=c(d),x=c(g),b=c(p);e.push("<linearGradient ",h,' x1="',f,'" y1="',v,'" x2="',x,'" y2="',b,`">
|
|
42
|
+
`)}else if(this.type==="radial"){let{x1:u,y1:d,x2:g,y2:p,r1:f,r2:v}=this.coords,x=c(u),b=c(d),_=c(g),C=c(p),S=c(f),k=c(v),T=S>k;e.push("<radialGradient ",h,' cx="',T?x:_,'" cy="',T?b:C,'" r="',T?S:k,'" fx="',T?_:x,'" fy="',T?C:b,`">
|
|
43
|
+
`),T&&(n.reverse(),n.forEach(P=>{P.offset=1-P.offset}));let O=Math.min(S,k);if(O>0){let P=O/Math.max(S,k);n.forEach(A=>{A.offset+=P*(1-A.offset)})}}return n.forEach(({color:u,offset:d})=>{let g=String(u),p=hr(g)?g:new lt(g).toRgba();e.push(`<stop offset="${100*d}%" style="stop-color:${M(p)};"/>
|
|
44
|
+
`)}),e.push(this.type==="linear"?"</linearGradient>":"</radialGradient>",`
|
|
45
|
+
`),e.join("")}toLive(i){let{x1:t,y1:e,x2:r,y2:s,r1:n,r2:o}=this.coords,a=this.type==="linear"?i.createLinearGradient(t,e,r,s):i.createRadialGradient(t,e,n,r,s,o);return this.colorStops.forEach(({color:l,offset:h})=>{a.addColorStop(h,l)}),a}static async fromObject(i){let{colorStops:t,gradientTransform:e}=i;return new this({...i,colorStops:t?t.map(r=>({...r})):void 0,gradientTransform:e?[...e]:void 0})}static fromElement(i,t,e){let r=ya(i),s=t._findCenterFromElement();return new this({id:i.getAttribute("id")||void 0,type:va(i),coords:rc(i,{width:e.viewBoxWidth||e.width,height:e.viewBoxHeight||e.height}),colorStops:ic(i,e.opacity),gradientUnits:r,gradientTransform:Ji(i.getAttribute("gradientTransform")||""),...r==="pixels"?{offsetX:t.width/2-s.x,offsetY:t.height/2-s.y}:{offsetX:0,offsetY:0}})}};m(Ue,"type","Gradient"),w.setClass(Ue,"gradient"),w.setClass(Ue,"linear"),w.setClass(Ue,"radial");var Fr=class{get type(){return"pattern"}set type(i){At("warn","Setting type has no effect",i)}constructor(i){m(this,"repeat","repeat"),m(this,"offsetX",0),m(this,"offsetY",0),m(this,"crossOrigin",""),this.id=Wt(),Object.assign(this,i)}isImageSource(){return!!this.source&&typeof this.source.src=="string"}isCanvasSource(){return!!this.source&&!!this.source.toDataURL}sourceToString(){return this.isImageSource()?this.source.src:this.isCanvasSource()?this.source.toDataURL():""}toLive(i){return this.source&&(!this.isImageSource()||this.source.complete&&this.source.naturalWidth!==0&&this.source.naturalHeight!==0)?i.createPattern(this.source,this.repeat):null}toObject(i=[]){let{repeat:t,crossOrigin:e}=this;return{...oe(this,i),type:"pattern",source:this.sourceToString(),repeat:t,crossOrigin:e,offsetX:R(this.offsetX,F.NUM_FRACTION_DIGITS),offsetY:R(this.offsetY,F.NUM_FRACTION_DIGITS),patternTransform:this.patternTransform?[...this.patternTransform]:null}}toSVG({width:i,height:t}){let{source:e,repeat:r,id:s}=this,n=pe(this.offsetX/i,0),o=pe(this.offsetY/t,0),a=r==="repeat-y"||r==="no-repeat"?1+Math.abs(n||0):pe(e.width/i,0),l=r==="repeat-x"||r==="no-repeat"?1+Math.abs(o||0):pe(e.height/t,0);return[`<pattern id="SVGID_${M(s)}" x="${n}" y="${o}" width="${a}" height="${l}">`,`<image x="0" y="0" width="${e.width}" height="${e.height}" xlink:href="${M(this.sourceToString())}"></image>`,"</pattern>",""].join(`
|
|
46
|
+
`)}static async fromObject({type:i,source:t,patternTransform:e,...r},s){let n=await pi(t,{...s,crossOrigin:r.crossOrigin});return new this({...r,patternTransform:e&&e.slice(0),source:n})}};m(Fr,"type","Pattern"),w.setClass(Fr),w.setClass(Fr,"pattern");var ze=class xa extends U{constructor(t,{path:e,left:r,top:s,...n}={}){super(),Object.assign(this,xa.ownDefaults),this.setOptions(n),this._setPath(t||[],!0),typeof r=="number"&&this.set("left",r),typeof s=="number"&&this.set("top",s)}_setPath(t,e){this.path=Jo(Array.isArray(t)?t:ra(t)),this.setBoundingBox(e)}_findCenterFromElement(){let t=this._calcBoundsFromPath();return new y(t.left+t.width/2,t.top+t.height/2)}_renderPathCommands(t){let e=-this.pathOffset.x,r=-this.pathOffset.y;t.beginPath();for(let s of this.path)switch(s[0]){case"L":t.lineTo(s[1]+e,s[2]+r);break;case"M":t.moveTo(s[1]+e,s[2]+r);break;case"C":t.bezierCurveTo(s[1]+e,s[2]+r,s[3]+e,s[4]+r,s[5]+e,s[6]+r);break;case"Q":t.quadraticCurveTo(s[1]+e,s[2]+r,s[3]+e,s[4]+r);break;case"Z":t.closePath()}}_render(t){this._renderPathCommands(t),this._renderPaintInOrder(t)}toString(){return`#<Path (${this.complexity()}): { "top": ${this.top}, "left": ${this.left} }>`}toObject(t=[]){return{...super.toObject(t),path:this.path.map(e=>e.slice())}}toDatalessObject(t=[]){let e=this.toObject(t);return this.sourcePath&&(delete e.path,e.sourcePath=this.sourcePath),e}_toSVG(){return["<path ","COMMON_PARTS",`d="${sa(this.path,F.NUM_FRACTION_DIGITS)}" stroke-linecap="round" />
|
|
47
|
+
`]}_getOffsetTransform(){let t=F.NUM_FRACTION_DIGITS;return` translate(${R(-this.pathOffset.x,t)}, ${R(-this.pathOffset.y,t)})`}toClipPathSVG(t){let e=this._getOffsetTransform();return" "+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})}toSVG(t){let e=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:t,additionalTransform:e})}complexity(){return this.path.length}setDimensions(){this.setBoundingBox()}setBoundingBox(t){let{width:e,height:r,pathOffset:s}=this._calcDimensions();this.set({width:e,height:r,pathOffset:s}),t&&this.setPositionByOrigin(s,"center","center")}_calcBoundsFromPath(){let t=[],e=0,r=0,s=0,n=0;for(let o of this.path)switch(o[0]){case"L":s=o[1],n=o[2],t.push({x:e,y:r},{x:s,y:n});break;case"M":s=o[1],n=o[2],e=s,r=n;break;case"C":t.push(...es(s,n,o[1],o[2],o[3],o[4],o[5],o[6])),s=o[5],n=o[6];break;case"Q":t.push(...es(s,n,o[1],o[2],o[1],o[2],o[3],o[4])),s=o[3],n=o[4];break;case"Z":s=e,n=r}return wt(t)}_calcDimensions(){let t=this._calcBoundsFromPath();return{...t,pathOffset:new y(t.left+t.width/2,t.top+t.height/2)}}static fromObject(t){return this._fromObject(t,{extraParam:"path"})}static async fromElement(t,e,r){let{d:s,...n}=Rt(t,this.ATTRIBUTE_NAMES,r);return new this(s,{...n,...e,left:void 0,top:void 0})}};m(ze,"type","Path"),m(ze,"cacheProperties",[...Lt,"path","fillRule"]),m(ze,"ATTRIBUTE_NAMES",[...Nt,"d"]),w.setClass(ze),w.setSVGClass(ze);var ba=["radius","startAngle","endAngle","counterClockwise"],ue=class ss extends U{static getDefaults(){return{...super.getDefaults(),...ss.ownDefaults}}constructor(t){super(),Object.assign(this,ss.ownDefaults),this.setOptions(t)}_set(t,e){return super._set(t,e),t==="radius"&&this.setRadius(e),this}_render(t){t.beginPath(),t.arc(0,0,this.radius,X(this.startAngle),X(this.endAngle),this.counterClockwise),this._renderPaintInOrder(t)}getRadiusX(){return this.get("radius")*this.get(zt)}getRadiusY(){return this.get("radius")*this.get(Ht)}setRadius(t){this.radius=t,this.set({width:2*t,height:2*t})}toObject(t=[]){return super.toObject([...ba,...t])}_toSVG(){let{radius:t,startAngle:e,endAngle:r}=this,s=(r-e)%360;if(s===0)return["<circle ","COMMON_PARTS",'cx="0" cy="0" ','r="',`${M(t)}`,`" />
|
|
48
|
+
`];{let n=X(e),o=X(r),a=yt(n)*t,l=xt(n)*t,h=yt(o)*t,c=xt(o)*t;return[`<path d="M ${a} ${l} A ${t} ${t} 0 ${+(s>180)} ${+!this.counterClockwise} ${h} ${c}" `,"COMMON_PARTS",` />
|
|
49
|
+
`]}}static async fromElement(t,e,r){let{left:s=0,top:n=0,radius:o=0,...a}=Rt(t,this.ATTRIBUTE_NAMES,r);return new this({...a,radius:o,left:s-o,top:n-o})}static fromObject(t){return super._fromObject(t)}};m(ue,"type","Circle"),m(ue,"cacheProperties",[...Lt,...ba]),m(ue,"ownDefaults",{radius:0,startAngle:0,endAngle:360,counterClockwise:!1}),m(ue,"ATTRIBUTE_NAMES",["cx","cy","r",...Nt]),w.setClass(ue),w.setSVGClass(ue);var ns=["x1","x2","y1","y2"],He=class _a extends U{constructor([t,e,r,s]=[0,0,0,0],n={}){super(),Object.assign(this,_a.ownDefaults),this.setOptions(n),this.x1=t,this.x2=r,this.y1=e,this.y2=s,this._setWidthHeight();let{left:o,top:a}=n;typeof o=="number"&&this.set("left",o),typeof a=="number"&&this.set("top",a)}_setWidthHeight(){let{x1:t,y1:e,x2:r,y2:s}=this;this.width=Math.abs(r-t),this.height=Math.abs(s-e);let{left:n,top:o,width:a,height:l}=wt([{x:t,y:e},{x:r,y:s}]),h=new y(n+a/2,o+l/2);this.setPositionByOrigin(h,L,L)}_set(t,e){return super._set(t,e),ns.includes(t)&&this._setWidthHeight(),this}_render(t){t.beginPath();let e=this.calcLinePoints();t.moveTo(e.x1,e.y1),t.lineTo(e.x2,e.y2),t.lineWidth=this.strokeWidth;let r=t.strokeStyle;var s;ut(this.stroke)?t.strokeStyle=this.stroke.toLive(t):t.strokeStyle=(s=this.stroke)==null?t.fillStyle:s,this.stroke&&this._renderStroke(t),t.strokeStyle=r}_findCenterFromElement(){return new y((this.x1+this.x2)/2,(this.y1+this.y2)/2)}toObject(t=[]){return{...super.toObject(t),...this.calcLinePoints()}}_getNonTransformedDimensions(){let t=super._getNonTransformedDimensions();return this.strokeLineCap==="butt"&&(this.width===0&&(t.y-=this.strokeWidth),this.height===0&&(t.x-=this.strokeWidth)),t}calcLinePoints(){let{x1:t,x2:e,y1:r,y2:s,width:n,height:o}=this,a=t<=e?-.5:.5,l=r<=s?-.5:.5;return{x1:a*n,x2:a*-n,y1:l*o,y2:l*-o}}_toSVG(){let{x1:t,x2:e,y1:r,y2:s}=this.calcLinePoints();return["<line ","COMMON_PARTS",`x1="${t}" y1="${r}" x2="${e}" y2="${s}" />
|
|
50
|
+
`]}static async fromElement(t,e,r){let{x1:s=0,y1:n=0,x2:o=0,y2:a=0,...l}=Rt(t,this.ATTRIBUTE_NAMES,r);return new this([s,n,o,a],l)}static fromObject({x1:t,y1:e,x2:r,y2:s,...n}){return this._fromObject({...n,points:[t,e,r,s]},{extraParam:"points"})}};m(He,"type","Line"),m(He,"cacheProperties",[...Lt,...ns]),m(He,"ATTRIBUTE_NAMES",Nt.concat(ns)),w.setClass(He),w.setSVGClass(He);var Di=class os extends U{static getDefaults(){return{...super.getDefaults(),...os.ownDefaults}}constructor(t){super(),Object.assign(this,os.ownDefaults),this.setOptions(t)}_render(t){let e=this.width/2,r=this.height/2;t.beginPath(),t.moveTo(-e,r),t.lineTo(0,-r),t.lineTo(e,r),t.closePath(),this._renderPaintInOrder(t)}_toSVG(){let t=this.width/2,e=this.height/2;return["<polygon ","COMMON_PARTS",'points="',`${-t} ${e},0 ${-e},${t} ${e}`,'" />']}};m(Di,"type","Triangle"),m(Di,"ownDefaults",{width:100,height:100}),w.setClass(Di),w.setSVGClass(Di);var Ca=["rx","ry"],de=class as extends U{static getDefaults(){return{...super.getDefaults(),...as.ownDefaults}}constructor(t){super(),Object.assign(this,as.ownDefaults),this.setOptions(t)}_set(t,e){switch(super._set(t,e),t){case"rx":this.rx=e,this.set("width",2*e);break;case"ry":this.ry=e,this.set("height",2*e)}return this}getRx(){return this.get("rx")*this.get(zt)}getRy(){return this.get("ry")*this.get(Ht)}toObject(t=[]){return super.toObject([...Ca,...t])}_toSVG(){return["<ellipse ","COMMON_PARTS",`cx="0" cy="0" rx="${M(this.rx)}" ry="${M(this.ry)}" />
|
|
51
|
+
`]}_render(t){t.beginPath(),t.save(),t.transform(1,0,0,this.ry/this.rx,0,0),t.arc(0,0,this.rx,0,vt,!1),t.restore(),this._renderPaintInOrder(t)}static async fromElement(t,e,r){let s=Rt(t,this.ATTRIBUTE_NAMES,r);return s.left=(s.left||0)-s.rx,s.top=(s.top||0)-s.ry,new this(s)}};m(de,"type","Ellipse"),m(de,"cacheProperties",[...Lt,...Ca]),m(de,"ownDefaults",{rx:0,ry:0}),m(de,"ATTRIBUTE_NAMES",[...Nt,"cx","cy","rx","ry"]),w.setClass(de),w.setSVGClass(de);var Sa={exactBoundingBox:!1},Yt=class ls extends U{static getDefaults(){return{...super.getDefaults(),...ls.ownDefaults}}constructor(t=[],e={}){super(),m(this,"strokeDiff",void 0),Object.assign(this,ls.ownDefaults),this.setOptions(e),this.points=t;let{left:r,top:s}=e;this.initialized=!0,this.setBoundingBox(!0),typeof r=="number"&&this.set("left",r),typeof s=="number"&&this.set("top",s)}isOpen(){return!0}_projectStrokeOnPoints(t){return Vo(this.points,t,this.isOpen())}_calcDimensions(t){t={scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:this.strokeMiterLimit,strokeUniform:this.strokeUniform,strokeWidth:this.strokeWidth,...t||{}};let e=this.exactBoundingBox?this._projectStrokeOnPoints(t).map(h=>h.projectedPoint):this.points;if(e.length===0)return{left:0,top:0,width:0,height:0,pathOffset:new y,strokeOffset:new y,strokeDiff:new y};let r=wt(e),s=Ci({...t,scaleX:1,scaleY:1}),n=wt(this.points.map(h=>N(h,s,!0))),o=new y(this.scaleX,this.scaleY),a=r.left+r.width/2,l=r.top+r.height/2;return this.exactBoundingBox&&(a-=l*Math.tan(X(this.skewX)),l-=a*Math.tan(X(this.skewY))),{...r,pathOffset:new y(a,l),strokeOffset:new y(n.left,n.top).subtract(new y(r.left,r.top)).multiply(o),strokeDiff:new y(r.width,r.height).subtract(new y(n.width,n.height)).multiply(o)}}_findCenterFromElement(){let t=wt(this.points);return new y(t.left+t.width/2,t.top+t.height/2)}setDimensions(){this.setBoundingBox()}setBoundingBox(t){let{left:e,top:r,width:s,height:n,pathOffset:o,strokeOffset:a,strokeDiff:l}=this._calcDimensions();this.set({width:s,height:n,pathOffset:o,strokeOffset:a,strokeDiff:l}),t&&this.setPositionByOrigin(new y(e+s/2,r+n/2),"center","center")}isStrokeAccountedForInDimensions(){return this.exactBoundingBox}_getNonTransformedDimensions(){return this.exactBoundingBox?new y(this.width,this.height):super._getNonTransformedDimensions()}_getTransformedDimensions(t={}){if(this.exactBoundingBox){let o;if(Object.keys(t).some(a=>this.strokeUniform||this.constructor.layoutProperties.includes(a))){var e,r;let{width:a,height:l}=this._calcDimensions(t);o=new y((e=t.width)==null?a:e,(r=t.height)==null?l:r)}else{var s,n;o=new y((s=t.width)==null?this.width:s,(n=t.height)==null?this.height:n)}return o.multiply(new y(t.scaleX||this.scaleX,t.scaleY||this.scaleY))}return super._getTransformedDimensions(t)}_set(t,e){let r=this.initialized&&this[t]!==e,s=super._set(t,e);return this.exactBoundingBox&&r&&((t==="scaleX"||t==="scaleY")&&this.strokeUniform&&this.constructor.layoutProperties.includes("strokeUniform")||this.constructor.layoutProperties.includes(t))&&this.setDimensions(),s}toObject(t=[]){return{...super.toObject(t),points:this.points.map(({x:e,y:r})=>({x:e,y:r}))}}_toSVG(){let t=this.pathOffset.x,e=this.pathOffset.y,r=F.NUM_FRACTION_DIGITS,s=this.points.map(({x:n,y:o})=>`${R(n-t,r)},${R(o-e,r)}`).join(" ");return[`<${M(this.constructor.type).toLowerCase()} `,"COMMON_PARTS",`points="${s}" />
|
|
52
|
+
`]}_render(t){let e=this.points.length,r=this.pathOffset.x,s=this.pathOffset.y;if(e&&!isNaN(this.points[e-1].y)){t.beginPath(),t.moveTo(this.points[0].x-r,this.points[0].y-s);for(let n=0;n<e;n++){let o=this.points[n];t.lineTo(o.x-r,o.y-s)}!this.isOpen()&&t.closePath(),this._renderPaintInOrder(t)}}complexity(){return this.points.length}static async fromElement(t,e,r){let s=(function(l){if(!l)return[];let h=l.replace(/,/g," ").trim().split(/\s+/),c=[];for(let u=0;u<h.length;u+=2)c.push({x:parseFloat(h[u]),y:parseFloat(h[u+1])});return c})(t.getAttribute("points")),{left:n,top:o,...a}=Rt(t,this.ATTRIBUTE_NAMES,r);return new this(s,{...a,...e})}static fromObject(t){return this._fromObject(t,{extraParam:"points"})}};m(Yt,"ownDefaults",Sa),m(Yt,"type","Polyline"),m(Yt,"layoutProperties",[Se,we,"strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeWidth","strokeUniform","points"]),m(Yt,"cacheProperties",[...Lt,"points"]),m(Yt,"ATTRIBUTE_NAMES",[...Nt]),w.setClass(Yt),w.setSVGClass(Yt);var Ei=class extends Yt{isOpen(){return!1}};m(Ei,"ownDefaults",Sa),m(Ei,"type","Polygon"),w.setClass(Ei),w.setSVGClass(Ei);var wa=class extends U{isEmptyStyles(i){if(!this.styles||i!==void 0&&!this.styles[i])return!0;let t=i===void 0?this.styles:{line:this.styles[i]};for(let e in t)for(let r in t[e])for(let s in t[e][r])return!1;return!0}styleHas(i,t){if(!this.styles||t!==void 0&&!this.styles[t])return!1;let e=t===void 0?this.styles:{0:this.styles[t]};for(let r in e)for(let s in e[r])if(e[r][s][i]!==void 0)return!0;return!1}cleanStyle(i){if(!this.styles)return!1;let t=this.styles,e,r,s=0,n=!0,o=0;for(let a in t){e=0;for(let l in t[a]){let h=t[a][l]||{};s++,h[i]===void 0?n=!1:(r?h[i]!==r&&(n=!1):r=h[i],h[i]===this[i]&&delete h[i]),Object.keys(h).length===0?delete t[a][l]:e++}e===0&&delete t[a]}for(let a=0;a<this._textLines.length;a++)o+=this._textLines[a].length;n&&s===o&&(this[i]=r,this.removeStyle(i))}removeStyle(i){if(!this.styles)return;let t=this.styles,e,r,s;for(r in t){for(s in e=t[r],e)delete e[s][i],Object.keys(e[s]).length===0&&delete e[s];Object.keys(e).length===0&&delete t[r]}}_extendStyles(i,t){let{lineIndex:e,charIndex:r}=this.get2DCursorLocation(i);this._getLineStyle(e)||this._setLineStyle(e);let s=Ss({...this._getStyleDeclaration(e,r),...t},n=>n!==void 0);this._setStyleDeclaration(e,r,s)}getSelectionStyles(i,t,e){let r=[];for(let s=i;s<(t||i);s++)r.push(this.getStyleAtPosition(s,e));return r}getStyleAtPosition(i,t){let{lineIndex:e,charIndex:r}=this.get2DCursorLocation(i);return t?this.getCompleteStyleDeclaration(e,r):this._getStyleDeclaration(e,r)}setSelectionStyles(i,t,e){for(let r=t;r<(e||t);r++)this._extendStyles(r,i);this._forceClearCache=!0}_getStyleDeclaration(i,t){var e;let r=this.styles&&this.styles[i];return r&&(e=r[t])!=null?e:{}}getCompleteStyleDeclaration(i,t){return{...oe(this,this.constructor._styleProperties),...this._getStyleDeclaration(i,t)}}_setStyleDeclaration(i,t,e){this.styles[i][t]=e}_deleteStyleDeclaration(i,t){delete this.styles[i][t]}_getLineStyle(i){return!!this.styles[i]}_setLineStyle(i){this.styles[i]={}}_deleteLineStyle(i){delete this.styles[i]}};m(wa,"_styleProperties",ml);var sc=/ +/g,nc=/"/g;function Lr(i,t,e,r,s){return` ${((n,{left:o,top:a,width:l,height:h},c=F.NUM_FRACTION_DIGITS)=>{let u=xi(it,n,!1),[d,g,p,f]=[o,a,l,h].map(v=>R(v,c));return`<rect ${u} x="${d}" y="${g}" width="${p}" height="${f}"></rect>`})(i,{left:t,top:e,width:r,height:s})}
|
|
53
|
+
`}var Ir,Ct=class qe extends wa{static getDefaults(){return{...super.getDefaults(),...qe.ownDefaults}}constructor(t,e){super(),m(this,"__charBounds",[]),Object.assign(this,qe.ownDefaults),this.setOptions(e),this.styles||(this.styles={}),this.text=t,this.initialized=!0,this.path&&this.setPathInfo(),this.initDimensions(),this.setCoords()}setPathInfo(){let t=this.path;t&&(t.segmentsInfo=Vs(t.path))}_splitText(){let t=this._splitTextIntoLines(this.text);return this.textLines=t.lines,this._textLines=t.graphemeLines,this._unwrappedTextLines=t._unwrappedLines,this._text=t.graphemeText,t}initDimensions(){this._splitText(),this._clearCache(),this.dirty=!0,this.path?(this.width=this.path.width,this.height=this.path.height):(this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,this.height=this.calcTextHeight()),this.textAlign.includes("justify")&&this.enlargeSpaces()}enlargeSpaces(){let t,e,r,s,n,o,a;for(let l=0,h=this._textLines.length;l<h;l++)if((this.textAlign==="justify"||l!==h-1&&!this.isEndOfWrapping(l))&&(s=0,n=this._textLines[l],e=this.getLineWidth(l),e<this.width&&(a=this.textLines[l].match(this._reSpacesAndTabs)))){r=a.length,t=(this.width-e)/r;for(let c=0;c<=n.length;c++)o=this.__charBounds[l][c],this._reSpaceAndTab.test(n[c])?(o.width+=t,o.kernedWidth+=t,o.left+=s,s+=t):o.left+=s}}isEndOfWrapping(t){return t===this._textLines.length-1}missingNewlineOffset(t){return 1}get2DCursorLocation(t,e){let r=e?this._unwrappedTextLines:this._textLines,s;for(s=0;s<r.length;s++){if(t<=r[s].length)return{lineIndex:s,charIndex:t};t-=r[s].length+this.missingNewlineOffset(s,e)}return{lineIndex:s-1,charIndex:r[s-1].length<t?r[s-1].length:t}}toString(){return`#<Text (${this.complexity()}): { "text": "${this.text}", "fontFamily": "${this.fontFamily}" }>`}_getCacheCanvasDimensions(){let t=super._getCacheCanvasDimensions(),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t}_render(t){let e=this.path;e&&!e.isNotVisible()&&e._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")}_renderText(t){this.paintFirst==="stroke"?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))}_setTextStyles(t,e,r){if(t.textBaseline="alphabetic",this.path)switch(this.pathAlign){case L:t.textBaseline="middle";break;case"ascender":t.textBaseline="top";break;case"descender":t.textBaseline=In}t.font=this._getFontDeclaration(e,r)}calcTextWidth(){let t=this.getLineWidth(0);for(let e=1,r=this._textLines.length;e<r;e++){let s=this.getLineWidth(e);s>t&&(t=s)}return t}_renderTextLine(t,e,r,s,n,o){this._renderChars(t,e,r,s,n,o)}_renderTextLinesBackground(t){if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor"))return;let e=t.fillStyle,r=this._getLeftOffset(),s=this._getTopOffset();for(let n=0,o=this._textLines.length;n<o;n++){let a=this.getHeightOfLine(n);if(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor",n)){s+=a;continue}let l=this._textLines[n].length,h=this._getLineLeftOffset(n),c,u,d=0,g=0,p=this.getValueOfPropertyAt(n,0,"textBackgroundColor"),f=this.getHeightOfLineImpl(n);for(let v=0;v<l;v++){let x=this.__charBounds[n][v];u=this.getValueOfPropertyAt(n,v,"textBackgroundColor"),this.path?(t.save(),t.translate(x.renderLeft,x.renderTop),t.rotate(x.angle),t.fillStyle=u,u&&t.fillRect(-x.width/2,-f*(1-this._fontSizeFraction),x.width,f),t.restore()):u===p?d+=x.kernedWidth:(c=r+h+g,this.direction==="rtl"&&(c=this.width-c-d),t.fillStyle=p,p&&t.fillRect(c,s,d,f),g=x.left,d=x.width,p=u)}u&&!this.path&&(c=r+h+g,this.direction==="rtl"&&(c=this.width-c-d),t.fillStyle=u,t.fillRect(c,s,d,f)),s+=a}t.fillStyle=e,this._removeShadow(t)}_measureChar(t,e,r,s){let n=di.getFontCache(e),o=this._getFontDeclaration(e),a=r?r+t:t,l=r&&o===this._getFontDeclaration(s),h=e.fontSize/this.CACHE_FONT_SIZE,c,u,d,g;if(r&&n.has(r)&&(d=n.get(r)),n.has(t)&&(g=c=n.get(t)),l&&n.has(a)&&(u=n.get(a),g=u-d),c===void 0||d===void 0||u===void 0){let p=(Ir||(Ir=at({width:0,height:0}).getContext("2d")),Ir);this._setTextStyles(p,e,!0),c===void 0&&(g=c=p.measureText(t).width,n.set(t,c)),d===void 0&&l&&r&&(d=p.measureText(r).width,n.set(r,d)),l&&u===void 0&&(u=p.measureText(a).width,n.set(a,u),g=u-d)}return{width:c*h,kernedWidth:g*h}}getHeightOfChar(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")}measureLine(t){let e=this._measureLine(t);return this.charSpacing!==0&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e}_measureLine(t){let e,r,s=0,n=this.pathSide===ft,o=this.path,a=this._textLines[t],l=a.length,h=Array(l);this.__charBounds[t]=h;for(let c=0;c<l;c++){let u=a[c];r=this._getGraphemeBox(u,t,c,e),h[c]=r,s+=r.kernedWidth,e=u}if(h[l]={left:r?r.left+r.width:0,width:0,kernedWidth:0,height:this.fontSize,deltaY:0},o&&o.segmentsInfo){let c=0,u=o.segmentsInfo[o.segmentsInfo.length-1].length;switch(this.textAlign){case V:c=n?u-s:0;break;case L:c=(u-s)/2;break;case ft:c=n?0:u-s}c+=this.pathStartOffset*(n?-1:1);for(let d=n?l-1:0;n?d>=0:d<l;n?d--:d++)r=h[d],c>u?c%=u:c<0&&(c+=u),this._setGraphemeOnPath(c,r),c+=r.kernedWidth}return{width:s,numOfSpaces:0}}_setGraphemeOnPath(t,e){let r=t+e.kernedWidth/2,s=this.path,n=ia(s.path,r,s.segmentsInfo);e.renderLeft=n.x-s.pathOffset.x,e.renderTop=n.y-s.pathOffset.y,e.angle=n.angle+(this.pathSide==="right"?Math.PI:0)}_getGraphemeBox(t,e,r,s,n){let o=this.getCompleteStyleDeclaration(e,r),a=s?this.getCompleteStyleDeclaration(e,r-1):{},l=this._measureChar(t,o,s,a),h,c=l.kernedWidth,u=l.width;this.charSpacing!==0&&(h=this._getWidthOfCharSpacing(),u+=h,c+=h);let d={width:u,left:0,height:o.fontSize,kernedWidth:c,deltaY:o.deltaY};if(r>0&&!n){let g=this.__charBounds[e][r-1];d.left=g.left+g.width+l.kernedWidth-l.width}return d}getHeightOfLineImpl(t){let e=this.__lineHeights;if(e[t])return e[t];let r=this.getHeightOfChar(t,0);for(let s=1,n=this._textLines[t].length;s<n;s++)r=Math.max(this.getHeightOfChar(t,s),r);return e[t]=r*this._fontSizeMult}getHeightOfLine(t){return this.getHeightOfLineImpl(t)*this.lineHeight}calcTextHeight(){let t=0;for(let e=0,r=this._textLines.length;e<r;e++)t+=e===r-1?this.getHeightOfLineImpl(e):this.getHeightOfLine(e);return t}_getLeftOffset(){return this.direction==="ltr"?-this.width/2:this.width/2}_getTopOffset(){return-this.height/2}_renderTextCommon(t,e){t.save();let r=0,s=this._getLeftOffset(),n=this._getTopOffset();for(let o=0,a=this._textLines.length;o<a;o++)this._renderTextLine(e,t,this._textLines[o],s+this._getLineLeftOffset(o),n+r+this.getHeightOfLineImpl(o),o),r+=this.getHeightOfLine(o);t.restore()}_renderTextFill(t){(this.fill||this.styleHas("fill"))&&this._renderTextCommon(t,"fillText")}_renderTextStroke(t){(this.stroke&&this.strokeWidth!==0||!this.isEmptyStyles())&&(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray),t.beginPath(),this._renderTextCommon(t,"strokeText"),t.closePath(),t.restore())}_renderChars(t,e,r,s,n,o){let a=this.textAlign.includes(js),l=this.path,h=!a&&this.charSpacing===0&&this.isEmptyStyles(o)&&!l,c=this.direction==="ltr",u=this.direction==="ltr"?1:-1,d=e.direction,g,p,f,v,x,b="",_=0;if(e.save(),d!==this.direction&&(e.canvas.setAttribute("dir",c?"ltr":"rtl"),e.direction=c?"ltr":"rtl",e.textAlign=c?V:ft),n-=this.getHeightOfLineImpl(o)*this._fontSizeFraction,h)return this._renderChar(t,e,o,0,r.join(""),s,n),void e.restore();for(let C=0,S=r.length-1;C<=S;C++)v=C===S||this.charSpacing||l,b+=r[C],f=this.__charBounds[o][C],_===0?(s+=u*(f.kernedWidth-f.width),_+=f.width):_+=f.kernedWidth,a&&!v&&this._reSpaceAndTab.test(r[C])&&(v=!0),v||(g=g||this.getCompleteStyleDeclaration(o,C),p=this.getCompleteStyleDeclaration(o,C+1),v=gr(g,p,!1)),v&&(l?(e.save(),e.translate(f.renderLeft,f.renderTop),e.rotate(f.angle),this._renderChar(t,e,o,C,b,-_/2,0),e.restore()):(x=s,this._renderChar(t,e,o,C,b,x,n)),b="",g=p,s+=u*_,_=0);e.restore()}_applyPatternGradientTransformText(t){let e=this.width+this.strokeWidth,r=this.height+this.strokeWidth,s=at({width:e,height:r}),n=s.getContext("2d");return s.width=e,s.height=r,n.beginPath(),n.moveTo(0,0),n.lineTo(e,0),n.lineTo(e,r),n.lineTo(0,r),n.closePath(),n.translate(e/2,r/2),n.fillStyle=t.toLive(n),this._applyPatternGradientTransform(n,t),n.fill(),n.createPattern(s,"no-repeat")}handleFiller(t,e,r){let s,n;return ut(r)?r.gradientUnits==="percentage"||r.gradientTransform||r.patternTransform?(s=-this.width/2,n=-this.height/2,t.translate(s,n),t[e]=this._applyPatternGradientTransformText(r),{offsetX:s,offsetY:n}):(t[e]=r.toLive(t),this._applyPatternGradientTransform(t,r)):(t[e]=r,{offsetX:0,offsetY:0})}_setStrokeStyles(t,{stroke:e,strokeWidth:r}){return t.lineWidth=r,t.lineCap=this.strokeLineCap,t.lineDashOffset=this.strokeDashOffset,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,this.handleFiller(t,"strokeStyle",e)}_setFillStyles(t,{fill:e}){return this.handleFiller(t,"fillStyle",e)}_renderChar(t,e,r,s,n,o,a){let l=this._getStyleDeclaration(r,s),h=this.getCompleteStyleDeclaration(r,s),c=t==="fillText"&&h.fill,u=t==="strokeText"&&h.stroke&&h.strokeWidth;if(u||c){if(e.save(),e.font=this._getFontDeclaration(h),l.textBackgroundColor&&this._removeShadow(e),l.deltaY&&(a+=l.deltaY),c){let d=this._setFillStyles(e,h);e.fillText(n,o-d.offsetX,a-d.offsetY)}if(u){let d=this._setStrokeStyles(e,h);e.strokeText(n,o-d.offsetX,a-d.offsetY)}e.restore()}}setSuperscript(t,e){this._setScript(t,e,this.superscript)}setSubscript(t,e){this._setScript(t,e,this.subscript)}_setScript(t,e,r){let s=this.get2DCursorLocation(t,!0),n=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"fontSize"),o=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"deltaY"),a={fontSize:n*r.size,deltaY:o+n*r.baseline};this.setSelectionStyles(a,t,e)}_getLineLeftOffset(t){let e=this.getLineWidth(t),r=this.width-e,s=this.textAlign,n=this.direction,o=this.isEndOfWrapping(t),a=0;return s==="justify"||s==="justify-center"&&!o||s==="justify-right"&&!o||s==="justify-left"&&!o?0:(s==="center"&&(a=r/2),s==="right"&&(a=r),s==="justify-center"&&(a=r/2),s==="justify-right"&&(a=r),n==="rtl"&&(s==="right"||s==="justify-right"?a=0:s==="left"||s==="justify-left"?a=-r:s!=="center"&&s!=="justify-center"||(a=-r/2)),a)}_clearCache(){this._forceClearCache=!1,this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]}getLineWidth(t){if(this.__lineWidths[t]!==void 0)return this.__lineWidths[t];let{width:e}=this.measureLine(t);return this.__lineWidths[t]=e,e}_getWidthOfCharSpacing(){return this.charSpacing===0?0:this.fontSize*this.charSpacing/1e3}getValueOfPropertyAt(t,e,r){var s;return(s=this._getStyleDeclaration(t,e)[r])==null?this[r]:s}_renderTextDecoration(t,e){if(!this[e]&&!this.styleHas(e))return;let r=this._getTopOffset(),s=this._getLeftOffset(),n=this.path,o=this._getWidthOfCharSpacing(),a=e==="linethrough"?.5:+(e==="overline"),l=this.offsets[e];for(let h=0,c=this._textLines.length;h<c;h++){let u=this.getHeightOfLine(h);if(!this[e]&&!this.styleHas(e,h)){r+=u;continue}let d=this._textLines[h],g=u/this.lineHeight,p=this._getLineLeftOffset(h),f,v=0,x=0,b=this.getValueOfPropertyAt(h,0,e),_=this.getValueOfPropertyAt(h,0,it),C=this.getValueOfPropertyAt(h,0,"textDecorationColor")||_,S=this.getValueOfPropertyAt(h,0,_e),k=b,T=C,O=S,P=r+g*(1-this._fontSizeFraction),A=this.getHeightOfChar(h,0),D=this.getValueOfPropertyAt(h,0,"deltaY");for(let B=0,H=d.length;B<H;B++){let Y=this.__charBounds[h][B];k=this.getValueOfPropertyAt(h,B,e),f=this.getValueOfPropertyAt(h,B,it),T=this.getValueOfPropertyAt(h,B,"textDecorationColor")||f,O=this.getValueOfPropertyAt(h,B,_e);let K=this.getHeightOfChar(h,B),st=this.getValueOfPropertyAt(h,B,"deltaY");if(n&&k&&f){let I=this.fontSize*O/1e3;t.save(),t.fillStyle=T,t.translate(Y.renderLeft,Y.renderTop),t.rotate(Y.angle),t.fillRect(-Y.kernedWidth/2,l*K+st-a*I,Y.kernedWidth,I),t.restore()}else if((k!==b||f!==_||T!==C||K!==A||O!==S||st!==D)&&x>0){let I=this.fontSize*S/1e3,_t=s+p+v;this.direction==="rtl"&&(_t=this.width-_t-x),b&&C&&S&&(t.fillStyle=C,t.fillRect(_t,P+l*A+D-a*I,x,I)),v=Y.left,x=Y.width,b=k,C=T,S=O,_=f,A=K,D=st}else x+=Y.kernedWidth}let E=s+p+v;this.direction==="rtl"&&(E=this.width-E-x),t.fillStyle=T;let j=this.fontSize*O/1e3;k&&T&&O&&t.fillRect(E,P+l*A+D-a*j,x-o,j),r+=u}this._removeShadow(t)}_getFontDeclaration({fontFamily:t=this.fontFamily,fontStyle:e=this.fontStyle,fontWeight:r=this.fontWeight,fontSize:s=this.fontSize}={},n){let o=t.includes("'")||t.includes('"')||t.includes(",")||qe.genericFonts.includes(t.toLowerCase())?t:`"${t}"`;return[e,r,`${n?this.CACHE_FONT_SIZE:s}px`,o].join(" ")}render(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._forceClearCache&&this.initDimensions(),super.render(t)))}graphemeSplit(t){return nr(t)}_splitTextIntoLines(t){let e=t.split(this._reNewline),r=Array(e.length),s=[`
|
|
54
|
+
`],n=[];for(let o=0;o<e.length;o++)r[o]=this.graphemeSplit(e[o]),n=n.concat(r[o],s);return n.pop(),{_unwrappedLines:r,lines:e,graphemeText:n,graphemeLines:r}}toObject(t=[]){return{...super.toObject([...mo,...t]),styles:zo(this.styles,this.text),...this.path?{path:this.path.toObject()}:{}}}set(t,e){let{textLayoutProperties:r}=this.constructor;super.set(t,e);let s=!1,n=!1;if(typeof t=="object")for(let o in t)o==="path"&&this.setPathInfo(),s=s||r.includes(o),n=n||o==="path";else s=r.includes(t),n=t==="path";return n&&this.setPathInfo(),s&&this.initialized&&(this.initDimensions(),this.setCoords()),this}complexity(){return 1}static async fromElement(t,e,r){let s=Rt(t,qe.ATTRIBUTE_NAMES,r),{textAnchor:n=V,textDecoration:o="",dx:a=0,dy:l=0,top:h=0,left:c=0,fontSize:u=16,strokeWidth:d=1,...g}={...e,...s},p=new this(Ki(t.textContent||"").trim(),{left:c+a,top:h+l,underline:o.includes("underline"),overline:o.includes("overline"),linethrough:o.includes("line-through"),strokeWidth:0,fontSize:u,...g}),f=p.getScaledHeight()/p.height,v=((p.height+p.strokeWidth)*p.lineHeight-p.height)*f,x=p.getScaledHeight()+v,b=0;return n==="center"&&(b=p.getScaledWidth()/2),n==="right"&&(b=p.getScaledWidth()),p.set({left:p.left-b,top:p.top-(x-p.fontSize*(.07+p._fontSizeFraction))/p.lineHeight,strokeWidth:d}),p}static fromObject(t){return this._fromObject({...t,styles:Ho(t.styles||{},t.text)},{extraParam:"text"})}};m(Ct,"textLayoutProperties",fo),m(Ct,"cacheProperties",[...Lt,...mo]),m(Ct,"ownDefaults",vl),m(Ct,"type","Text"),m(Ct,"genericFonts",["serif","sans-serif","monospace","cursive","fantasy","system-ui","ui-serif","ui-sans-serif","ui-monospace","ui-rounded","math","emoji","fangsong"]),m(Ct,"ATTRIBUTE_NAMES",Nt.concat("x","y","dx","dy","font-family","font-style","font-weight","font-size","letter-spacing","text-decoration","text-decoration-thickness","text-decoration-color","text-anchor")),Xo(Ct,[class extends uo{_toSVG(){let i=this._getSVGLeftTopOffsets(),t=this._getSVGTextAndBg(i.textTop,i.textLeft);return this._wrapSVGTextAndBg(t)}toSVG(i){let t=this._createBaseSVGMarkup(this._toSVG(),{reviver:i,noStyle:!0,withShadow:!0}),e=this.path;return e?t+e._createBaseSVGMarkup(e._toSVG(),{reviver:i,withShadow:!0,additionalTransform:xe(this.calcOwnMatrix())}):t}_getSVGLeftTopOffsets(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}}_wrapSVGTextAndBg({textBgRects:i,textSpans:t}){let e=this.getSvgTextDecoration(this);return[i.join(""),' <text xml:space="preserve" ',`font-family="${M(this.fontFamily.replace(nc,"'"))}" `,`font-size="${M(this.fontSize)}" `,this.fontStyle?`font-style="${M(this.fontStyle)}" `:"",this.fontWeight?`font-weight="${M(this.fontWeight)}" `:"",e?`text-decoration="${e}" `:"",this.direction==="rtl"?'direction="rtl" ':"",'style="',this.getSvgStyles(!0),'"',this.addPaintOrder()," >",t.join(""),`</text>
|
|
55
|
+
`]}_getSVGTextAndBg(i,t){let e=[],r=[],s,n=i;this.backgroundColor&&r.push(Lr(this.backgroundColor,-this.width/2,-this.height/2,this.width,this.height));for(let o=0,a=this._textLines.length;o<a;o++)s=this._getLineLeftOffset(o),this.direction==="rtl"&&(s+=this.width),(this.textBackgroundColor||this.styleHas("textBackgroundColor",o))&&this._setSVGTextLineBg(r,o,t+s,n),this._setSVGTextLineText(e,o,t+s,n),n+=this.getHeightOfLine(o);return{textSpans:e,textBgRects:r}}_createTextCharSpan(i,t,e,r,s){let n=F.NUM_FRACTION_DIGITS,o=this.getSvgSpanStyles(t,i!==i.trim()||!!i.match(sc)),a=o?`style="${o}"`:"",l=t.deltaY,h=l?` dy="${R(l,n)}" `:"",{angle:c,renderLeft:u,renderTop:d,width:g}=s,p="";if(u!==void 0){let f=g/2;c&&(p=` rotate="${R(jt(c),n)}"`);let v=ne({angle:jt(c)});v[4]=u,v[5]=d;let x=new y(-f,0).transform(v);e=x.x,r=x.y}return`<tspan x="${R(e,n)}" y="${R(r,n)}" ${h}${p}${a}>${M(i)}</tspan>`}_setSVGTextLineText(i,t,e,r){let s=this.getHeightOfLine(t),n=this.textAlign.includes(js),o=this._textLines[t],a,l,h,c,u,d="",g=0;r+=s*(1-this._fontSizeFraction)/this.lineHeight;for(let p=0,f=o.length-1;p<=f;p++)u=p===f||this.charSpacing||this.path,d+=o[p],h=this.__charBounds[t][p],g===0?(e+=h.kernedWidth-h.width,g+=h.width):g+=h.kernedWidth,n&&!u&&this._reSpaceAndTab.test(o[p])&&(u=!0),u||(a=a||this.getCompleteStyleDeclaration(t,p),l=this.getCompleteStyleDeclaration(t,p+1),u=gr(a,l,!0)),u&&(c=this._getStyleDeclaration(t,p),i.push(this._createTextCharSpan(d,c,e,r,h)),d="",a=l,this.direction==="rtl"?e-=g:e+=g,g=0)}_setSVGTextLineBg(i,t,e,r){let s=this._textLines[t],n=this.getHeightOfLine(t)/this.lineHeight,o,a=0,l=0,h=this.getValueOfPropertyAt(t,0,"textBackgroundColor");for(let c=0;c<s.length;c++){let{left:u,width:d,kernedWidth:g}=this.__charBounds[t][c];o=this.getValueOfPropertyAt(t,c,"textBackgroundColor"),o===h?a+=g:(h&&i.push(Lr(h,e+l,r,a,n)),l=u,a=d,h=o)}o&&i.push(Lr(h,e+l,r,a,n))}getSvgStyles(i){let t=hr(this.textDecorationColor)?` text-decoration-color: ${M(this[ur])};`:"";return`${super.getSvgStyles(i)} text-decoration-thickness: ${R(this.textDecorationThickness*this.getObjectScaling().y/10,F.NUM_FRACTION_DIGITS)}%;${t} white-space: pre;`}getSvgSpanStyles(i,t){let{fontFamily:e,strokeWidth:r,stroke:s,fill:n,fontSize:o,fontStyle:a,fontWeight:l,textDecorationThickness:h,textDecorationColor:c,linethrough:u,overline:d,underline:g}=i,p=this.getSvgTextDecoration({underline:g??this.underline,overline:d??this.overline,linethrough:u??this.linethrough}),f=h||this.textDecorationThickness,v=c||this.textDecorationColor,x=Zt(r),b=Qt(e),_=Zt(o),C=Qt(a),S=Zt(l)||Qt(l),k=Qt(v);return[s?xi(Ot,s):"",x?`stroke-width: ${M(x)}; `:"",b?`font-family: ${b.includes("'")||b.includes('"')?M(b):`'${M(b)}'`}; `:"",_?`font-size: ${M(_)}px; `:"",C?`font-style: ${M(C)}; `:"",S?`font-weight: ${M(S)}; `:"",p?`text-decoration: ${p}; text-decoration-thickness: ${R(f*this.getObjectScaling().y/10,F.NUM_FRACTION_DIGITS)}%;${k?` text-decoration-color: ${M(k)};`:""} `:"",n?xi(it,n):"",t?"white-space: pre; ":""].join("")}getSvgTextDecoration(i){return["overline","underline","line-through"].filter(t=>i[t.replace("-","")]).join(" ")}}]),w.setClass(Ct),w.setSVGClass(Ct);var oc=class{constructor(i){m(this,"target",void 0),m(this,"__mouseDownInPlace",!1),m(this,"__dragStartFired",!1),m(this,"__isDraggingOver",!1),m(this,"__dragStartSelection",void 0),m(this,"__dragImageDisposer",void 0),m(this,"_dispose",void 0),this.target=i;let t=[this.target.on("dragenter",this.dragEnterHandler.bind(this)),this.target.on("dragover",this.dragOverHandler.bind(this)),this.target.on("dragleave",this.dragLeaveHandler.bind(this)),this.target.on("dragend",this.dragEndHandler.bind(this)),this.target.on("drop",this.dropHandler.bind(this))];this._dispose=()=>{t.forEach(e=>e()),this._dispose=void 0}}isPointerOverSelection(i){let t=this.target,e=t.getSelectionStartFromPointer(i);return t.isEditing&&e>=t.selectionStart&&e<=t.selectionEnd&&t.selectionStart<t.selectionEnd}start(i){return this.__mouseDownInPlace=this.isPointerOverSelection(i)}isActive(){return this.__mouseDownInPlace}end(i){let t=this.isActive();return t&&!this.__dragStartFired&&(this.target.setCursorByClick(i),this.target.initDelayedCursor(!0)),this.__mouseDownInPlace=!1,this.__dragStartFired=!1,this.__isDraggingOver=!1,t}getDragStartSelection(){return this.__dragStartSelection}setDragImage(i,{selectionStart:t,selectionEnd:e}){var r;let s=this.target,n=s.canvas,o=new y(s.flipX?-1:1,s.flipY?-1:1),a=s._getCursorBoundaries(t),l=new y(a.left+a.leftOffset,a.top+a.topOffset).multiply(o).transform(s.calcTransformMatrix()),h=n.getScenePoint(i).subtract(l),c=s.getCanvasRetinaScaling(),u=s.getBoundingRect(),d=l.subtract(new y(u.left,u.top)),g=n.viewportTransform,p=d.add(h).transform(g,!0),f=s.backgroundColor,v=Ys(s.styles);s.backgroundColor="";let x={stroke:"transparent",fill:"transparent",textBackgroundColor:"transparent"};s.setSelectionStyles(x,0,t),s.setSelectionStyles(x,e,s.text.length),s.dirty=!0;let b=s.toCanvasElement({enableRetinaScaling:n.enableRetinaScaling,viewportTransform:!0});s.backgroundColor=f,s.styles=v,s.dirty=!0,is(b,{position:"fixed",left:-b.width+"px",border:er,width:b.width/c+"px",height:b.height/c+"px"}),this.__dragImageDisposer&&this.__dragImageDisposer(),this.__dragImageDisposer=()=>{b.remove()},gt(i.target||this.target.hiddenTextarea).body.appendChild(b),(r=i.dataTransfer)==null||r.setDragImage(b,p.x,p.y)}onDragStart(i){this.__dragStartFired=!0;let t=this.target,e=this.isActive();if(e&&i.dataTransfer){let r=this.__dragStartSelection={selectionStart:t.selectionStart,selectionEnd:t.selectionEnd},s=t._text.slice(r.selectionStart,r.selectionEnd).join(""),n={text:t.text,value:s,...r};i.dataTransfer.setData("text/plain",s),i.dataTransfer.setData("application/fabric",JSON.stringify({value:s,styles:t.getSelectionStyles(r.selectionStart,r.selectionEnd,!0)})),i.dataTransfer.effectAllowed="copyMove",this.setDragImage(i,n)}return t.abortCursorAnimation(),e}canDrop(i){if(this.target.editable&&!this.target.getActiveControl()&&!i.defaultPrevented){if(this.isActive()&&this.__dragStartSelection){let t=this.target.getSelectionStartFromPointer(i),e=this.__dragStartSelection;return t<e.selectionStart||t>e.selectionEnd}return!0}return!1}targetCanDrop(i){return this.target.canDrop(i)}dragEnterHandler({e:i}){let t=this.targetCanDrop(i);!this.__isDraggingOver&&t&&(this.__isDraggingOver=!0)}dragOverHandler(i){let{e:t}=i,e=this.targetCanDrop(t);!this.__isDraggingOver&&e?this.__isDraggingOver=!0:this.__isDraggingOver&&!e&&(this.__isDraggingOver=!1),this.__isDraggingOver&&(t.preventDefault(),i.canDrop=!0,i.dropTarget=this.target)}dragLeaveHandler(){(this.__isDraggingOver||this.isActive())&&(this.__isDraggingOver=!1)}dropHandler(i){var t;let{e}=i,r=e.defaultPrevented;this.__isDraggingOver=!1,e.preventDefault();let s=(t=e.dataTransfer)==null?void 0:t.getData("text/plain");if(s&&!r){let n=this.target,o=n.canvas,a=n.getSelectionStartFromPointer(e),{styles:l}=e.dataTransfer.types.includes("application/fabric")?JSON.parse(e.dataTransfer.getData("application/fabric")):{},h=s[Math.max(0,s.length-1)];if(this.__dragStartSelection){let c=this.__dragStartSelection.selectionStart,u=this.__dragStartSelection.selectionEnd;a>c&&a<=u?a=c:a>u&&(a-=u-c),n.removeChars(c,u),delete this.__dragStartSelection}n._reNewline.test(h)&&(n._reNewline.test(n._text[a])||a===n._text.length)&&(s=s.trimEnd()),i.didDrop=!0,i.dropTarget=n,n.insertChars(s,l,a),o.setActiveObject(n),n.enterEditing(e),n.selectionStart=Math.min(a+0,n._text.length),n.selectionEnd=Math.min(n.selectionStart+s.length,n._text.length),n.hiddenTextarea.value=n.text,n._updateTextarea(),n.hiddenTextarea.focus(),n.fire(Hi,{index:a+0,action:"drop"}),o.fire("text:changed",{target:n}),o.contextTopDirty=!0,o.requestRenderAll()}}dragEndHandler({e:i}){if(this.isActive()&&this.__dragStartFired&&this.__dragStartSelection){var t;let e=this.target,r=this.target.canvas,{selectionStart:s,selectionEnd:n}=this.__dragStartSelection,o=((t=i.dataTransfer)==null?void 0:t.dropEffect)||"none";o==="none"?(e.selectionStart=s,e.selectionEnd=n,e._updateTextarea(),e.hiddenTextarea.focus()):(e.clearContextTop(),o==="move"&&(e.removeChars(s,n),e.selectionStart=e.selectionEnd=s,e.hiddenTextarea&&(e.hiddenTextarea.value=e.text),e._updateTextarea(),e.fire(Hi,{index:s,action:"dragend"}),r.fire("text:changed",{target:e}),r.requestRenderAll()),e.exitEditing())}this.__dragImageDisposer&&this.__dragImageDisposer(),delete this.__dragImageDisposer,delete this.__dragStartSelection,this.__isDraggingOver=!1}dispose(){this._dispose&&this._dispose()}},kn=/[ \n\.,;!\?\-]/,ac=class extends Ct{constructor(...i){super(...i),m(this,"_currentCursorOpacity",1)}initBehavior(){this._tick=this._tick.bind(this),this._onTickComplete=this._onTickComplete.bind(this),this.updateSelectionOnMouseMove=this.updateSelectionOnMouseMove.bind(this)}onDeselect(i){return this.isEditing&&this.exitEditing(),this.selected=!1,super.onDeselect(i)}_animateCursor({toValue:i,duration:t,delay:e,onComplete:r}){return Rs({startValue:this._currentCursorOpacity,endValue:i,duration:t,delay:e,onComplete:r,abort:()=>!this.canvas||this.selectionStart!==this.selectionEnd,onChange:s=>{this._currentCursorOpacity=s,this.renderCursorOrSelection()}})}_tick(i){this._currentTickState=this._animateCursor({toValue:0,duration:this.cursorDuration/2,delay:Math.max(i||0,100),onComplete:this._onTickComplete})}_onTickComplete(){var i;(i=this._currentTickCompleteState)==null||i.abort(),this._currentTickCompleteState=this._animateCursor({toValue:1,duration:this.cursorDuration,onComplete:this._tick})}initDelayedCursor(i){this.abortCursorAnimation(),this._tick(i?0:this.cursorDelay)}abortCursorAnimation(){let i=!1;[this._currentTickState,this._currentTickCompleteState].forEach(t=>{t&&!t.isDone()&&(i=!0,t.abort())}),this._currentCursorOpacity=1,i&&this.clearContextTop()}restartCursorIfNeeded(){[this._currentTickState,this._currentTickCompleteState].some(i=>!i||i.isDone())&&this.initDelayedCursor()}selectAll(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this}cmdAll(){this.selectAll(),this.renderCursorOrSelection()}getSelectedText(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")}findWordBoundaryLeft(i){let t=0,e=i-1;if(this._reSpace.test(this._text[e]))for(;this._reSpace.test(this._text[e]);)t++,e--;for(;/\S/.test(this._text[e])&&e>-1;)t++,e--;return i-t}findWordBoundaryRight(i){let t=0,e=i;if(this._reSpace.test(this._text[e]))for(;this._reSpace.test(this._text[e]);)t++,e++;for(;/\S/.test(this._text[e])&&e<this._text.length;)t++,e++;return i+t}findLineBoundaryLeft(i){let t=0,e=i-1;for(;!/\n/.test(this._text[e])&&e>-1;)t++,e--;return i-t}findLineBoundaryRight(i){let t=0,e=i;for(;!/\n/.test(this._text[e])&&e<this._text.length;)t++,e++;return i+t}searchWordBoundary(i,t){let e=this._text,r=i>0&&this._reSpace.test(e[i])&&(t===-1||!fs.test(e[i-1]))?i-1:i,s=e[r];for(;r>0&&r<e.length&&!kn.test(s);)r+=t,s=e[r];return t===-1&&kn.test(s)&&r++,r}selectWord(i){var t;i=(t=i)==null?this.selectionStart:t;let e=this.searchWordBoundary(i,-1),r=Math.max(e,this.searchWordBoundary(i,1));this.selectionStart=e,this.selectionEnd=r,this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()}selectLine(i){var t;i=(t=i)==null?this.selectionStart:t;let e=this.findLineBoundaryLeft(i),r=this.findLineBoundaryRight(i);this.selectionStart=e,this.selectionEnd=r,this._fireSelectionChanged(),this._updateTextarea()}enterEditing(i){!this.isEditing&&this.editable&&(this.enterEditingImpl(),this.fire("editing:entered",i?{e:i}:void 0),this._fireSelectionChanged(),this.canvas&&(this.canvas.fire("text:editing:entered",{target:this,e:i}),this.canvas.requestRenderAll()))}enterEditingImpl(){this.canvas&&(this.canvas.calcOffset(),this.canvas.textEditingManager.exitTextEditing()),this.isEditing=!0,this.initHiddenTextarea(),this.hiddenTextarea.focus(),this.hiddenTextarea.value=this.text,this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._textBeforeEdit=this.text,this._tick()}updateSelectionOnMouseMove(i){if(this.getActiveControl())return;let t=this.hiddenTextarea;gt(t).activeElement!==t&&t.focus();let e=this.getSelectionStartFromPointer(i),r=this.selectionStart,s=this.selectionEnd;(e===this.__selectionStartOnMouseDown&&r!==s||r!==e&&s!==e)&&(e>this.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=e):(this.selectionStart=e,this.selectionEnd=this.__selectionStartOnMouseDown),this.selectionStart===r&&this.selectionEnd===s||(this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}_setEditingProps(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0}fromStringToGraphemeSelection(i,t,e){let r=e.slice(0,i),s=this.graphemeSplit(r).length;if(i===t)return{selectionStart:s,selectionEnd:s};let n=e.slice(i,t);return{selectionStart:s,selectionEnd:s+this.graphemeSplit(n).length}}fromGraphemeToStringSelection(i,t,e){let r=e.slice(0,i).join("").length;return i===t?{selectionStart:r,selectionEnd:r}:{selectionStart:r,selectionEnd:r+e.slice(i,t).join("").length}}_updateTextarea(){if(this.cursorOffsetCache={},this.hiddenTextarea){if(!this.inCompositionMode){let i=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=i.selectionStart,this.hiddenTextarea.selectionEnd=i.selectionEnd}this.updateTextareaPosition()}}updateFromTextArea(){let{hiddenTextarea:i,direction:t,textAlign:e,inCompositionMode:r}=this;if(!i)return;let s=e==="justify"?t==="ltr"?V:ft:e.replace("justify-",""),n=this.getPositionByOrigin(s,"top");this.cursorOffsetCache={},this.text=i.value,this.set("dirty",!0),this.initDimensions(),this.setPositionByOrigin(n,s,"top"),this.setCoords();let o=this.fromStringToGraphemeSelection(i.selectionStart,i.selectionEnd,i.value);this.selectionEnd=this.selectionStart=o.selectionEnd,r||(this.selectionStart=o.selectionStart),this.updateTextareaPosition()}updateTextareaPosition(){if(this.selectionStart===this.selectionEnd){let i=this._calcTextareaPosition();this.hiddenTextarea.style.left=i.left,this.hiddenTextarea.style.top=i.top}}_calcTextareaPosition(){if(!this.canvas)return{left:"1px",top:"1px"};let i=this.inCompositionMode?this.compositionStart:this.selectionStart,t=this._getCursorBoundaries(i),e=this.get2DCursorLocation(i),r=e.lineIndex,s=e.charIndex,n=this.getValueOfPropertyAt(r,s,"fontSize")*this.lineHeight,o=t.leftOffset,a=this.getCanvasRetinaScaling(),l=this.canvas.upperCanvasEl,h=l.width/a,c=l.height/a,u=h-n,d=c-n,g=new y(t.left+o,t.top+t.topOffset+n).transform(this.calcTransformMatrix()).transform(this.canvas.viewportTransform).multiply(new y(l.clientWidth/h,l.clientHeight/c));return g.x<0&&(g.x=0),g.x>u&&(g.x=u),g.y<0&&(g.y=0),g.y>d&&(g.y=d),g.x+=this.canvas._offset.left,g.y+=this.canvas._offset.top,{left:`${g.x}px`,top:`${g.y}px`,fontSize:`${n}px`,charHeight:n}}_saveEditingProps(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}}_restoreEditingProps(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor||this.canvas.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor||this.canvas.moveCursor),delete this._savedProps)}exitEditingImpl(){let i=this.hiddenTextarea;this.selected=!1,this.isEditing=!1,i&&(i.blur&&i.blur(),i.parentNode&&i.parentNode.removeChild(i)),this.hiddenTextarea=null,this.abortCursorAnimation(),this.selectionStart!==this.selectionEnd&&this.clearContextTop(),this.selectionEnd=this.selectionStart,this._restoreEditingProps(),this._forceClearCache&&(this.initDimensions(),this.setCoords())}exitEditing(){let i=this._textBeforeEdit!==this.text;return this.exitEditingImpl(),this.fire("editing:exited"),i&&this.fire("modified"),this.canvas&&(this.canvas.fire("text:editing:exited",{target:this}),i&&this.canvas.fire("object:modified",{target:this})),this}_removeExtraneousStyles(){for(let i in this.styles)this._textLines[i]||delete this.styles[i]}removeStyleFromTo(i,t){let{lineIndex:e,charIndex:r}=this.get2DCursorLocation(i,!0),{lineIndex:s,charIndex:n}=this.get2DCursorLocation(t,!0);if(e!==s){if(this.styles[e])for(let o=r;o<this._unwrappedTextLines[e].length;o++)delete this.styles[e][o];if(this.styles[s])for(let o=n;o<this._unwrappedTextLines[s].length;o++){let a=this.styles[s][o];a&&(this.styles[e]||(this.styles[e]={}),this.styles[e][r+o-n]=a)}for(let o=e+1;o<=s;o++)delete this.styles[o];this.shiftLineStyles(s,e-s)}else if(this.styles[e]){let o=this.styles[e],a=n-r;for(let l=r;l<n;l++)delete o[l];for(let l in this.styles[e]){let h=parseInt(l,10);h>=n&&(o[h-a]=o[l],delete o[l])}}}shiftLineStyles(i,t){let e=Object.assign({},this.styles);for(let r in this.styles){let s=parseInt(r,10);s>i&&(this.styles[s+t]=e[s],e[s-t]||delete this.styles[s])}}insertNewlineStyleObject(i,t,e,r){let s={},n=this._unwrappedTextLines[i].length,o=n===t,a=!1;e||(e=1),this.shiftLineStyles(i,e);let l=this.styles[i]?this.styles[i][t===0?t:t-1]:void 0;for(let c in this.styles[i]){let u=parseInt(c,10);u>=t&&(a=!0,s[u-t]=this.styles[i][c],o&&t===0||delete this.styles[i][c])}let h=!1;for(a&&!o&&(this.styles[i+e]=s,h=!0),(h||n>t)&&e--;e>0;)r&&r[e-1]?this.styles[i+e]={0:{...r[e-1]}}:l?this.styles[i+e]={0:{...l}}:delete this.styles[i+e],e--;this._forceClearCache=!0}insertCharStyleObject(i,t,e,r){this.styles||(this.styles={});let s=this.styles[i],n=s?{...s}:{};e||(e=1);for(let a in n){let l=parseInt(a,10);l>=t&&(s[l+e]=n[l],n[l-e]||delete s[l])}if(this._forceClearCache=!0,r){for(;e--;)Object.keys(r[e]).length&&(this.styles[i]||(this.styles[i]={}),this.styles[i][t+e]={...r[e]});return}if(!s)return;let o=s[t?t-1:1];for(;o&&e--;)this.styles[i][t+e]={...o}}insertNewStyleBlock(i,t,e){let r=this.get2DCursorLocation(t,!0),s=[0],n,o=0;for(let a=0;a<i.length;a++)i[a]===`
|
|
56
|
+
`?(o++,s[o]=0):s[o]++;for(s[0]>0&&(this.insertCharStyleObject(r.lineIndex,r.charIndex,s[0],e),e=e&&e.slice(s[0]+1)),o&&this.insertNewlineStyleObject(r.lineIndex,r.charIndex+s[0],o),n=1;n<o;n++)s[n]>0?this.insertCharStyleObject(r.lineIndex+n,0,s[n],e):e&&this.styles[r.lineIndex+n]&&e[0]&&(this.styles[r.lineIndex+n][0]=e[0]),e=e&&e.slice(s[n]+1);s[n]>0&&this.insertCharStyleObject(r.lineIndex+n,0,s[n],e)}removeChars(i,t=i+1){this.removeStyleFromTo(i,t),this._text.splice(i,t-i),this.text=this._text.join(""),this.set("dirty",!0),this.initDimensions(),this.setCoords(),this._removeExtraneousStyles()}insertChars(i,t,e,r=e){r>e&&this.removeStyleFromTo(e,r);let s=this.graphemeSplit(i);this.insertNewStyleBlock(s,e,t),this._text=[...this._text.slice(0,e),...s,...this._text.slice(r)],this.text=this._text.join(""),this.set("dirty",!0),this.initDimensions(),this.setCoords(),this._removeExtraneousStyles()}setSelectionStartEndWithShift(i,t,e){e<=i?(t===i?this._selectionDirection=V:this._selectionDirection==="right"&&(this._selectionDirection=V,this.selectionEnd=i),this.selectionStart=e):e>i&&e<t?this._selectionDirection==="right"?this.selectionEnd=e:this.selectionStart=e:(t===i?this._selectionDirection=ft:this._selectionDirection==="left"&&(this._selectionDirection=ft,this.selectionStart=t),this.selectionEnd=e)}},lc=class extends ac{initHiddenTextarea(){let i=this.canvas&>(this.canvas.getElement())||Ce(),t=i.createElement("textarea");Object.entries({autocapitalize:"off",autocorrect:"off",autocomplete:"off",spellcheck:"false","data-fabric":"textarea",wrap:"off",name:"fabricTextarea"}).map(([n,o])=>t.setAttribute(n,o));let{top:e,left:r,fontSize:s}=this._calcTextareaPosition();t.style.cssText=`position: absolute; top: ${e}; left: ${r}; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: ${s};`,(this.hiddenTextareaContainer||i.body).appendChild(t),Object.entries({blur:"blur",keydown:"onKeyDown",keyup:"onKeyUp",input:"onInput",copy:"copy",cut:"copy",paste:"paste",compositionstart:"onCompositionStart",compositionupdate:"onCompositionUpdate",compositionend:"onCompositionEnd"}).map(([n,o])=>t.addEventListener(n,this[o].bind(this))),this.hiddenTextarea=t}blur(){this.abortCursorAnimation()}onKeyDown(i){if(!this.isEditing)return;let t=this.direction==="rtl"?this.keysMapRtl:this.keysMap;if(i.keyCode in t)this[t[i.keyCode]](i);else{if(!(i.keyCode in this.ctrlKeysMapDown)||!i.ctrlKey&&!i.metaKey)return;this[this.ctrlKeysMapDown[i.keyCode]](i)}i.stopImmediatePropagation(),i.preventDefault(),i.keyCode>=33&&i.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}onKeyUp(i){!this.isEditing||this._copyDone||this.inCompositionMode?this._copyDone=!1:i.keyCode in this.ctrlKeysMapUp&&(i.ctrlKey||i.metaKey)&&(this[this.ctrlKeysMapUp[i.keyCode]](i),i.stopImmediatePropagation(),i.preventDefault(),this.canvas&&this.canvas.requestRenderAll())}onInput(i){let t=this.fromPaste,{value:e,selectionStart:r,selectionEnd:s}=this.hiddenTextarea;if(this.fromPaste=!1,i&&i.stopPropagation(),!this.isEditing)return;let n=()=>{this.updateFromTextArea(),this.fire(Hi),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())};if(this.hiddenTextarea.value==="")return this.styles={},void n();let o=this._splitTextIntoLines(e).graphemeText,a=this._text.length,l=o.length,h=this.selectionStart,c=this.selectionEnd,u=h!==c,d,g,p,f,v=l-a,x=this.fromStringToGraphemeSelection(r,s,e),b=h>x.selectionStart;u?(g=this._text.slice(h,c),v+=c-h):l<a&&(g=b?this._text.slice(c+v,c):this._text.slice(h,h-v));let _=o.slice(x.selectionEnd-v,x.selectionEnd);if(g&&g.length&&(_.length&&(d=this.getSelectionStyles(h,h+1,!1),d=_.map(()=>d[0])),u?(p=h,f=c):b?(p=c-g.length,f=c):(p=c,f=c+g.length),this.removeStyleFromTo(p,f)),_.length){let{copyPasteData:C}=Tt();t&&_.join("")===C.copiedText&&!F.disableStyleCopyPaste&&(d=C.copiedTextStyle),this.insertNewStyleBlock(_,h,d)}n()}onCompositionStart(){this.inCompositionMode=!0}onCompositionEnd(){this.inCompositionMode=!1}onCompositionUpdate({target:i}){let{selectionStart:t,selectionEnd:e}=i;this.compositionStart=t,this.compositionEnd=e,this.updateTextareaPosition()}copy(){if(this.selectionStart===this.selectionEnd)return;let{copyPasteData:i}=Tt();i.copiedText=this.getSelectedText(),F.disableStyleCopyPaste?i.copiedTextStyle=void 0:i.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0}paste(){this.fromPaste=!0}_getWidthBeforeCursor(i,t){let e,r=this._getLineLeftOffset(i);return t>0&&(e=this.__charBounds[i][t-1],r+=e.left+e.width),r}getDownCursorOffset(i,t){let e=this._getSelectionForOffset(i,t),r=this.get2DCursorLocation(e),s=r.lineIndex;if(s===this._textLines.length-1||i.metaKey||i.keyCode===34)return this._text.length-e;let n=r.charIndex,o=this._getWidthBeforeCursor(s,n),a=this._getIndexOnLine(s+1,o);return this._textLines[s].slice(n).length+a+1+this.missingNewlineOffset(s)}_getSelectionForOffset(i,t){return i.shiftKey&&this.selectionStart!==this.selectionEnd&&t?this.selectionEnd:this.selectionStart}getUpCursorOffset(i,t){let e=this._getSelectionForOffset(i,t),r=this.get2DCursorLocation(e),s=r.lineIndex;if(s===0||i.metaKey||i.keyCode===33)return-e;let n=r.charIndex,o=this._getWidthBeforeCursor(s,n),a=this._getIndexOnLine(s-1,o),l=this._textLines[s].slice(0,n),h=this.missingNewlineOffset(s-1);return-this._textLines[s-1].length+a-l.length+(1-h)}_getIndexOnLine(i,t){let e=this._textLines[i],r,s,n=this._getLineLeftOffset(i),o=0;for(let a=0,l=e.length;a<l;a++)if(r=this.__charBounds[i][a].width,n+=r,n>t){s=!0;let h=n-r,c=n,u=Math.abs(h-t);o=Math.abs(c-t)<u?a:a-1;break}return s||(o=e.length-1),o}moveCursorDown(i){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",i)}moveCursorUp(i){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorUpOrDown("Up",i)}_moveCursorUpOrDown(i,t){let e=this[`get${i}CursorOffset`](t,this._selectionDirection===ft);if(t.shiftKey?this.moveCursorWithShift(e):this.moveCursorWithoutShift(e),e!==0){let r=this.text.length;this.selectionStart=se(0,this.selectionStart,r),this.selectionEnd=se(0,this.selectionEnd,r),this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea()}}moveCursorWithShift(i){let t=this._selectionDirection==="left"?this.selectionStart+i:this.selectionEnd+i;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,t),i!==0}moveCursorWithoutShift(i){return i<0?(this.selectionStart+=i,this.selectionEnd=this.selectionStart):(this.selectionEnd+=i,this.selectionStart=this.selectionEnd),i!==0}moveCursorLeft(i){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorLeftOrRight("Left",i)}_move(i,t,e){let r;if(i.altKey)r=this[`findWordBoundary${e}`](this[t]);else{if(!i.metaKey&&i.keyCode!==35&&i.keyCode!==36)return this[t]+=e==="Left"?-1:1,!0;r=this[`findLineBoundary${e}`](this[t])}return r!==void 0&&this[t]!==r&&(this[t]=r,!0)}_moveLeft(i,t){return this._move(i,t,"Left")}_moveRight(i,t){return this._move(i,t,"Right")}moveCursorLeftWithoutShift(i){let t=!0;return this._selectionDirection=V,this.selectionEnd===this.selectionStart&&this.selectionStart!==0&&(t=this._moveLeft(i,"selectionStart")),this.selectionEnd=this.selectionStart,t}moveCursorLeftWithShift(i){return this._selectionDirection==="right"&&this.selectionStart!==this.selectionEnd?this._moveLeft(i,"selectionEnd"):this.selectionStart===0?void 0:(this._selectionDirection=V,this._moveLeft(i,"selectionStart"))}moveCursorRight(i){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",i)}_moveCursorLeftOrRight(i,t){let e=`moveCursor${i}${t.shiftKey?"WithShift":"WithoutShift"}`;this._currentCursorOpacity=1,this[e](t)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())}moveCursorRightWithShift(i){return this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(i,"selectionStart"):this.selectionEnd===this._text.length?void 0:(this._selectionDirection=ft,this._moveRight(i,"selectionEnd"))}moveCursorRightWithoutShift(i){let t=!0;return this._selectionDirection=ft,this.selectionStart===this.selectionEnd?(t=this._moveRight(i,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,t}},Pn=i=>!!i.button,hc=class extends lc{constructor(...i){super(...i),m(this,"draggableTextDelegate",void 0)}initBehavior(){this.on("mousedown",this._mouseDownHandler),this.on("mouseup",this.mouseUpHandler),this.on("mousedblclick",this.doubleClickHandler),this.on("mousetripleclick",this.tripleClickHandler),this.draggableTextDelegate=new oc(this),super.initBehavior()}shouldStartDragging(){return this.draggableTextDelegate.isActive()}onDragStart(i){return this.draggableTextDelegate.onDragStart(i)}canDrop(i){return this.draggableTextDelegate.canDrop(i)}doubleClickHandler(i){this.isEditing&&(this.selectWord(this.getSelectionStartFromPointer(i.e)),this.renderCursorOrSelection())}tripleClickHandler(i){this.isEditing&&(this.selectLine(this.getSelectionStartFromPointer(i.e)),this.renderCursorOrSelection())}_mouseDownHandler({e:i,alreadySelected:t}){this.canvas&&this.editable&&!Pn(i)&&!this.getActiveControl()&&(this.draggableTextDelegate.start(i)||(this.canvas.textEditingManager.register(this),t&&(this.inCompositionMode=!1,this.setCursorByClick(i)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()),this.selected||(this.selected=t||this.isEditing)))}mouseUpHandler({e:i,transform:t}){let e=this.draggableTextDelegate.end(i);if(this.canvas){this.canvas.textEditingManager.unregister(this);let r=this.canvas._activeObject;if(r&&r!==this)return}!this.editable||this.group&&!this.group.interactive||t&&t.actionPerformed||Pn(i)||e||this.selected&&!this.getActiveControl()&&(this.enterEditing(i),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection())}setCursorByClick(i){let t=this.getSelectionStartFromPointer(i),e=this.selectionStart,r=this.selectionEnd;i.shiftKey?this.setSelectionStartEndWithShift(e,r,t):(this.selectionStart=t,this.selectionEnd=t),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())}getSelectionStartFromPointer(i){let t=this.canvas.getScenePoint(i).transform(rt(this.calcTransformMatrix())).add(new y(-this._getLeftOffset(),-this._getTopOffset())),e=0,r=0,s=0;for(let l=0;l<this._textLines.length&&e<=t.y;l++)e+=this.getHeightOfLine(l),s=l,l>0&&(r+=this._textLines[l-1].length+this.missingNewlineOffset(l-1));let n=Math.abs(this._getLineLeftOffset(s)),o=this._textLines[s].length,a=this.__charBounds[s];for(let l=0;l<o;l++){let h=n+a[l].kernedWidth;if(t.x<=h){Math.abs(t.x-h)<=Math.abs(t.x-n)&&r++;break}n=h,r++}return Math.min(this.flipX?o-r:r,this._text.length)}},Ai="moveCursorUp",ji="moveCursorDown",Fi="moveCursorLeft",Li="moveCursorRight",Ii="exitEditing",Mn=(i,t)=>{let e=t.getRetinaScaling();i.setTransform(e,0,0,e,0,0);let r=t.viewportTransform;i.transform(r[0],r[1],r[2],r[3],r[4],r[5])},cc={selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,keysMap:{9:Ii,27:Ii,33:Ai,34:ji,35:Li,36:Fi,37:Fi,38:Ai,39:Li,40:ji},keysMapRtl:{9:Ii,27:Ii,33:Ai,34:ji,35:Fi,36:Li,37:Li,38:Ai,39:Fi,40:ji},ctrlKeysMapDown:{65:"cmdAll"},ctrlKeysMapUp:{67:"copy",88:"cut"},_selectionDirection:null,_reSpace:/\s|\r?\n/,inCompositionMode:!1},fe=class hs extends hc{static getDefaults(){return{...super.getDefaults(),...hs.ownDefaults}}get type(){let t=super.type;return t==="itext"?"i-text":t}constructor(t,e){super(t,{...hs.ownDefaults,...e}),this.initBehavior()}_set(t,e){return this.isEditing&&this._savedProps&&t in this._savedProps?(this._savedProps[t]=e,this):(t==="canvas"&&(this.canvas instanceof Qi&&this.canvas.textEditingManager.remove(this),e instanceof Qi&&e.textEditingManager.add(this)),super._set(t,e))}setSelectionStart(t){t=Math.max(t,0),this._updateAndFire("selectionStart",t)}setSelectionEnd(t){t=Math.min(t,this.text.length),this._updateAndFire("selectionEnd",t)}_updateAndFire(t,e){this[t]!==e&&(this._fireSelectionChanged(),this[t]=e),this._updateTextarea()}_fireSelectionChanged(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})}initDimensions(){this.isEditing&&this.initDelayedCursor(),super.initDimensions()}getSelectionStyles(t=this.selectionStart||0,e=this.selectionEnd,r){return super.getSelectionStyles(t,e,r)}setSelectionStyles(t,e=this.selectionStart||0,r=this.selectionEnd){return super.setSelectionStyles(t,e,r)}get2DCursorLocation(t=this.selectionStart,e){return super.get2DCursorLocation(t,e)}render(t){super.render(t),this.cursorOffsetCache={},this.renderCursorOrSelection()}toCanvasElement(t){let e=this.isEditing;this.isEditing=!1;let r=super.toCanvasElement(t);return this.isEditing=e,r}renderCursorOrSelection(){if(!this.isEditing||!this.canvas)return;let t=this.clearContextTop(!0);if(!t)return;let e=this._getCursorBoundaries(),r=this.findAncestorsWithClipPath(),s=r.length>0,n,o=t;if(s){n=at(t.canvas),o=n.getContext("2d"),Mn(o,this.canvas);let a=this.calcTransformMatrix();o.transform(a[0],a[1],a[2],a[3],a[4],a[5])}if(this.selectionStart!==this.selectionEnd||this.inCompositionMode?this.renderSelection(o,e):this.renderCursor(o,e),s)for(let a of r){let l=a.clipPath,h=at(t.canvas),c=h.getContext("2d");if(Mn(c,this.canvas),!l.absolutePositioned){let u=a.calcTransformMatrix();c.transform(u[0],u[1],u[2],u[3],u[4],u[5])}l.transform(c),l.drawObject(c,!0,{}),this.drawClipPathOnCache(o,l,h)}s&&(t.setTransform(1,0,0,1,0,0),t.drawImage(n,0,0)),this.canvas.contextTopDirty=!0,t.restore()}findAncestorsWithClipPath(){let t=[],e=this;for(;e;)e.clipPath&&t.push(e),e=e.parent;return t}_getCursorBoundaries(t=this.selectionStart,e){let r=this._getLeftOffset(),s=this._getTopOffset(),n=this._getCursorBoundariesOffsets(t,e);return{left:r,top:s,leftOffset:n.left,topOffset:n.top}}_getCursorBoundariesOffsets(t,e){return e?this.__getCursorBoundariesOffsets(t):this.cursorOffsetCache&&"top"in this.cursorOffsetCache?this.cursorOffsetCache:this.cursorOffsetCache=this.__getCursorBoundariesOffsets(t)}__getCursorBoundariesOffsets(t){let e=0,r=0,{charIndex:s,lineIndex:n}=this.get2DCursorLocation(t),{textAlign:o,direction:a}=this;for(let u=0;u<n;u++)e+=this.getHeightOfLine(u);let l=this._getLineLeftOffset(n),h=this.__charBounds[n][s];h&&(r=h.left),this.charSpacing!==0&&s===this._textLines[n].length&&(r-=this._getWidthOfCharSpacing());let c=l+(r>0?r:0);return a==="rtl"&&(o==="right"||o==="justify"||o==="justify-right"?c*=-1:o==="left"||o==="justify-left"?c=l-(r>0?r:0):o!=="center"&&o!=="justify-center"||(c=l-(r>0?r:0))),{top:e,left:c}}renderCursorAt(t){this._renderCursor(this.canvas.contextTop,this._getCursorBoundaries(t,!0),t)}renderCursor(t,e){this._renderCursor(t,e,this.selectionStart)}getCursorRenderingData(t=this.selectionStart,e=this._getCursorBoundaries(t)){let r=this.get2DCursorLocation(t),s=r.lineIndex,n=r.charIndex>0?r.charIndex-1:0,o=this.getValueOfPropertyAt(s,n,"fontSize"),a=this.getObjectScaling().x*this.canvas.getZoom(),l=this.cursorWidth/a,h=this.getValueOfPropertyAt(s,n,"deltaY"),c=e.topOffset+(1-this._fontSizeFraction)*this.getHeightOfLine(s)/this.lineHeight-o*(1-this._fontSizeFraction);return{color:this.cursorColor||this.getValueOfPropertyAt(s,n,"fill"),opacity:this._currentCursorOpacity,left:e.left+e.leftOffset-l/2,top:c+e.top+h,width:l,height:o}}_renderCursor(t,e,r){let{color:s,opacity:n,left:o,top:a,width:l,height:h}=this.getCursorRenderingData(r,e);t.fillStyle=s,t.globalAlpha=n,t.fillRect(o,a,l,h)}renderSelection(t,e){let r={selectionStart:this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,selectionEnd:this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd};this._renderSelection(t,r,e)}renderDragSourceEffect(){let t=this.draggableTextDelegate.getDragStartSelection();this._renderSelection(this.canvas.contextTop,t,this._getCursorBoundaries(t.selectionStart,!0))}renderDropTargetEffect(t){let e=this.getSelectionStartFromPointer(t);this.renderCursorAt(e)}_renderSelection(t,e,r){let{textAlign:s,direction:n}=this,o=e.selectionStart,a=e.selectionEnd,l=s.includes(js),h=this.get2DCursorLocation(o),c=this.get2DCursorLocation(a),u=h.lineIndex,d=c.lineIndex,g=h.charIndex<0?0:h.charIndex,p=c.charIndex<0?0:c.charIndex;for(let f=u;f<=d;f++){let v=this._getLineLeftOffset(f)||0,x=this.getHeightOfLine(f),b=0,_=0;if(f===u&&(b=this.__charBounds[u][g].left),f>=u&&f<d)_=l&&!this.isEndOfWrapping(f)?this.width:this.getLineWidth(f)||5;else if(f===d)if(p===0)_=this.__charBounds[d][p].left;else{let P=this._getWidthOfCharSpacing();_=this.__charBounds[d][p-1].left+this.__charBounds[d][p-1].width-P}let C=x;(this.lineHeight<1||f===d&&this.lineHeight>1)&&(x/=this.lineHeight);let S=r.left+v+b,k=x,T=0,O=_-b;this.inCompositionMode?(t.fillStyle=this.compositionColor||"black",k=1,T=x):t.fillStyle=this.selectionColor,n==="rtl"&&(s==="right"||s==="justify"||s==="justify-right"?S=this.width-S-O:s==="left"||s==="justify-left"?S=r.left+v-_:s!=="center"&&s!=="justify-center"||(S=r.left+v-_)),t.fillRect(S,r.top+r.topOffset+T,O,k),r.topOffset+=C}}getCurrentCharFontSize(){let t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,"fontSize")}getCurrentCharColor(){let t=this._getCurrentCharIndex();return this.getValueOfPropertyAt(t.l,t.c,it)}_getCurrentCharIndex(){let t=this.get2DCursorLocation(this.selectionStart,!0),e=t.charIndex>0?t.charIndex-1:0;return{l:t.lineIndex,c:e}}dispose(){this.exitEditingImpl(),this.draggableTextDelegate.dispose(),super.dispose()}};m(fe,"ownDefaults",cc),m(fe,"type","IText"),w.setClass(fe),w.setClass(fe,"i-text");var me=class cs extends fe{static getDefaults(){return{...super.getDefaults(),...cs.ownDefaults}}constructor(t,e){super(t,{...cs.ownDefaults,...e})}static createControls(){return{controls:Ro()}}initDimensions(){this.initialized&&(this.isEditing&&this.initDelayedCursor(),this._clearCache(),this.dynamicMinWidth=0,this._styleMap=this._generateStyleMap(this._splitText()),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this.textAlign.includes("justify")&&this.enlargeSpaces(),this.height=this.calcTextHeight())}_generateStyleMap(t){let e=0,r=0,s=0,n={};for(let o=0;o<t.graphemeLines.length;o++)t.graphemeText[s]===`
|
|
57
|
+
`&&o>0?(r=0,s++,e++):!this.splitByGrapheme&&this._reSpaceAndTab.test(t.graphemeText[s])&&o>0&&(r++,s++),n[o]={line:e,offset:r},s+=t.graphemeLines[o].length,r+=t.graphemeLines[o].length;return n}styleHas(t,e){if(this._styleMap&&!this.isWrapping){let r=this._styleMap[e];r&&(e=r.line)}return super.styleHas(t,e)}isEmptyStyles(t){if(!this.styles)return!0;let e,r,s=0,n=!1,o=this._styleMap[t],a=this._styleMap[t+1];o&&(t=o.line,s=o.offset),a&&(e=a.line,n=e===t,r=a.offset);let l=t===void 0?this.styles:{line:this.styles[t]};for(let h in l)for(let c in l[h]){let u=parseInt(c,10);if(u>=s&&(!n||u<r))for(let d in l[h][c])return!1}return!0}_getStyleDeclaration(t,e){if(this._styleMap&&!this.isWrapping){let r=this._styleMap[t];if(!r)return{};t=r.line,e=r.offset+e}return super._getStyleDeclaration(t,e)}_setStyleDeclaration(t,e,r){let s=this._styleMap[t];super._setStyleDeclaration(s.line,s.offset+e,r)}_deleteStyleDeclaration(t,e){let r=this._styleMap[t];super._deleteStyleDeclaration(r.line,r.offset+e)}_getLineStyle(t){let e=this._styleMap[t];return!!this.styles[e.line]}_setLineStyle(t){let e=this._styleMap[t];super._setLineStyle(e.line)}_wrapText(t,e){this.isWrapping=!0;let r=this.getGraphemeDataForRender(t),s=[];for(let n=0;n<r.wordsData.length;n++)s.push(...this._wrapLine(n,e,r));return this.isWrapping=!1,s}getGraphemeDataForRender(t){let e=this.splitByGrapheme,r=e?"":" ",s=0;return{wordsData:t.map((n,o)=>{let a=0,l=e?this.graphemeSplit(n):this.wordSplit(n);return l.length===0?[{word:[],width:0}]:l.map(h=>{let c=e?[h]:this.graphemeSplit(h),u=this._measureWord(c,o,a);return s=Math.max(u,s),a+=c.length+r.length,{word:c,width:u}})}),largestWordWidth:s}}_measureWord(t,e,r=0){let s,n=0;for(let o=0,a=t.length;o<a;o++)n+=this._getGraphemeBox(t[o],e,o+r,s,!0).kernedWidth,s=t[o];return n}wordSplit(t){return t.split(this._wordJoiners)}_wrapLine(t,e,{largestWordWidth:r,wordsData:s},n=0){let o=this._getWidthOfCharSpacing(),a=this.splitByGrapheme,l=[],h=a?"":" ",c=0,u=[],d=0,g=0,p=!0;e-=n;let f=Math.max(e,r,this.dynamicMinWidth),v=s[t],x;for(x=0;x<v.length;x++){let{word:b,width:_}=v[x];d+=b.length,c+=g+_-o,c>f&&!p?(l.push(u),u=[],c=_,p=!0):c+=o,p||a||u.push(h),u=u.concat(b),g=a?0:this._measureWord([h],t,d),d++,p=!1}return x&&l.push(u),r+n>this.dynamicMinWidth&&(this.dynamicMinWidth=r-o+n),l}isEndOfWrapping(t){return!this._styleMap[t+1]||this._styleMap[t+1].line!==this._styleMap[t].line}missingNewlineOffset(t,e){return this.splitByGrapheme&&!e?+!!this.isEndOfWrapping(t):1}_splitTextIntoLines(t){let e=super._splitTextIntoLines(t),r=this._wrapText(e.lines,this.width),s=Array(r.length);for(let n=0;n<r.length;n++)s[n]=r[n].join("");return e.lines=s,e.graphemeLines=r,e}getMinWidth(){return Math.max(this.minWidth,this.dynamicMinWidth)}_removeExtraneousStyles(){let t=new Map;for(let e in this._styleMap){let r=parseInt(e,10);if(this._textLines[r]){let s=this._styleMap[e].line;t.set(`${s}`,!0)}}for(let e in this.styles)t.has(e)||delete this.styles[e]}toObject(t=[]){return super.toObject(["minWidth","splitByGrapheme",...t])}};m(me,"type","Textbox"),m(me,"textLayoutProperties",[...fe.textLayoutProperties,"width"]),m(me,"ownDefaults",{minWidth:20,dynamicMinWidth:2,lockScalingFlip:!0,noScaleCache:!1,_wordJoiners:/[ \t\r]/,splitByGrapheme:!1}),w.setClass(me);var Dn=class extends pr{shouldPerformLayout(i){return!!i.target.clipPath&&super.shouldPerformLayout(i)}shouldLayoutClipPath(){return!1}calcLayoutResult(i,t){let{target:e}=i,{clipPath:r,group:s}=e;if(!r||!this.shouldPerformLayout(i))return;let{width:n,height:o}=wt(No(e,r)),a=new y(n,o);if(r.absolutePositioned)return{center:Ft(r.getRelativeCenterPoint(),void 0,s?s.calcTransformMatrix():void 0),size:a};{let l=r.getRelativeCenterPoint().transform(e.calcOwnMatrix(),!0);if(this.shouldPerformLayout(i)){let{center:h=new y,correction:c=new y}=this.calcBoundingBox(t,i)||{};return{center:h.add(l),correction:c.subtract(l),size:a}}return{center:e.getRelativeCenterPoint().add(l),size:a}}}};m(Dn,"type","clip-path"),w.setClass(Dn);var En=class extends pr{getInitialSize({target:i},{size:t}){return new y(i.width||t.x,i.height||t.y)}};m(En,"type","fixed"),w.setClass(En);var uc=class extends bi{subscribeTargets(i){let t=i.target;i.targets.reduce((e,r)=>(r.parent&&e.add(r.parent),e),new Set).forEach(e=>{e.layoutManager.subscribeTargets({target:e,targets:[t]})})}unsubscribeTargets(i){let t=i.target,e=t.getObjects();i.targets.reduce((r,s)=>(s.parent&&r.add(s.parent),r),new Set).forEach(r=>{!e.some(s=>s.parent===r)&&r.layoutManager.unsubscribeTargets({target:r,targets:[t]})})}},Ri=class us extends Et{static getDefaults(){return{...super.getDefaults(),...us.ownDefaults}}constructor(t=[],e={}){super(),Object.assign(this,us.ownDefaults),this.setOptions(e);let{left:r,top:s,layoutManager:n}=e;this.groupInit(t,{left:r,top:s,layoutManager:n??new uc})}_shouldSetNestedCoords(){return!0}__objectSelectionMonitor(){}multiSelectAdd(...t){this.multiSelectionStacking==="selection-order"?this.add(...t):t.forEach(e=>{let r=this._objects.findIndex(n=>n.isInFrontOf(e)),s=r===-1?this.size():r;this.insertAt(s,e)})}canEnterGroup(t){return this.getObjects().some(e=>e.isDescendantOf(t)||t.isDescendantOf(e))?(At("error","ActiveSelection: circular object trees are not supported, this call has no effect"),!1):super.canEnterGroup(t)}enterGroup(t,e){t.parent&&t.parent===t.group?t.parent._exitGroup(t):t.group&&t.parent!==t.group&&t.group.remove(t),this._enterGroup(t,e)}exitGroup(t,e){this._exitGroup(t,e),t.parent&&t.parent._enterGroup(t,!0)}_onAfterObjectsChange(t,e){super._onAfterObjectsChange(t,e);let r=new Set;e.forEach(s=>{let{parent:n}=s;n&&r.add(n)}),t==="removed"?r.forEach(s=>{s._onAfterObjectsChange(Jr,e)}):r.forEach(s=>{s._set("dirty",!0)})}onDeselect(){return this.removeAll(),!1}toString(){return`#<ActiveSelection: (${this.complexity()})>`}shouldCache(){return!1}isOnACache(){return!1}_renderControls(t,e,r){t.save(),t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1;let s={hasControls:!1,...r,forActiveSelection:!0};for(let n=0;n<this._objects.length;n++)this._objects[n]._renderControls(t,s);super._renderControls(t,e),t.restore()}};m(Ri,"type","ActiveSelection"),m(Ri,"ownDefaults",{multiSelectionStacking:"canvas-stacking"}),w.setClass(Ri),w.setClass(Ri,"activeSelection");var dc=class{constructor(){m(this,"resources",{})}applyFilters(i,t,e,r,s){let n=s.getContext("2d",{willReadFrequently:!0,desynchronized:!0});if(!n)return;n.drawImage(t,0,0,e,r);let o={sourceWidth:e,sourceHeight:r,imageData:n.getImageData(0,0,e,r),originalEl:t,originalImageData:n.getImageData(0,0,e,r),canvasEl:s,ctx:n,filterBackend:this};i.forEach(l=>{l.applyTo(o)});let{imageData:a}=o;return a.width===e&&a.height===r||(s.width=a.width,s.height=a.height),n.putImageData(a,0,0),o}},Ta=class{constructor({tileSize:i=F.textureSize}={}){m(this,"aPosition",new Float32Array([0,0,0,1,1,0,1,1])),m(this,"resources",{}),this.tileSize=i,this.setupGLContext(i,i),this.captureGPUInfo()}setupGLContext(i,t){this.dispose(),this.createWebGLCanvas(i,t)}createWebGLCanvas(i,t){let e=at({width:i,height:t}),r=e.getContext("webgl",{alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1});r&&(r.clearColor(0,0,0,0),this.canvas=e,this.gl=r)}applyFilters(i,t,e,r,s,n){let o=this.gl,a=s.getContext("2d");if(!o||!a)return;let l;n&&(l=this.getCachedTexture(n,t));let h={originalWidth:t.width||t.naturalWidth||0,originalHeight:t.height||t.naturalHeight||0,sourceWidth:e,sourceHeight:r,destinationWidth:e,destinationHeight:r,context:o,sourceTexture:this.createTexture(o,e,r,l?void 0:t),targetTexture:this.createTexture(o,e,r),originalTexture:l||this.createTexture(o,e,r,l?void 0:t),passes:i.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:s},c=o.createFramebuffer();return o.bindFramebuffer(o.FRAMEBUFFER,c),i.forEach(u=>{u&&u.applyTo(h)}),(function(u){let d=u.targetCanvas,g=d.width,p=d.height,f=u.destinationWidth,v=u.destinationHeight;g===f&&p===v||(d.width=f,d.height=v)})(h),this.copyGLTo2D(o,h),o.bindTexture(o.TEXTURE_2D,null),o.deleteTexture(h.sourceTexture),o.deleteTexture(h.targetTexture),o.deleteFramebuffer(c),a.setTransform(1,0,0,1,0,0),h}dispose(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()}clearWebGLCaches(){this.programCache={},this.textureCache={}}createTexture(i,t,e,r,s){let{NEAREST:n,TEXTURE_2D:o,RGBA:a,UNSIGNED_BYTE:l,CLAMP_TO_EDGE:h,TEXTURE_MAG_FILTER:c,TEXTURE_MIN_FILTER:u,TEXTURE_WRAP_S:d,TEXTURE_WRAP_T:g}=i,p=i.createTexture();return i.bindTexture(o,p),i.texParameteri(o,c,s||n),i.texParameteri(o,u,s||n),i.texParameteri(o,d,h),i.texParameteri(o,g,h),r?i.texImage2D(o,0,a,a,l,r):i.texImage2D(o,0,a,t,e,0,a,l,null),p}getCachedTexture(i,t,e){let{textureCache:r}=this;if(r[i])return r[i];{let s=this.createTexture(this.gl,t.width,t.height,t,e);return s&&(r[i]=s),s}}evictCachesForKey(i){this.textureCache[i]&&(this.gl.deleteTexture(this.textureCache[i]),delete this.textureCache[i])}copyGLTo2D(i,t){let e=i.canvas,r=t.targetCanvas,s=r.getContext("2d");if(!s)return;s.translate(0,r.height),s.scale(1,-1);let n=e.height-r.height;s.drawImage(e,0,n,r.width,r.height,0,0,r.width,r.height)}copyGLTo2DPutImageData(i,t){let e=t.targetCanvas.getContext("2d"),r=t.destinationWidth,s=t.destinationHeight,n=r*s*4;if(!e)return;let o=new Uint8Array(this.imageBuffer,0,n),a=new Uint8ClampedArray(this.imageBuffer,0,n);i.readPixels(0,0,r,s,i.RGBA,i.UNSIGNED_BYTE,o);let l=new ImageData(a,r,s);e.putImageData(l,0,0)}captureGPUInfo(){if(this.gpuInfo)return this.gpuInfo;let i=this.gl,t={renderer:"",vendor:""};if(!i)return t;let e=i.getExtension("WEBGL_debug_renderer_info");if(e){let r=i.getParameter(e.UNMASKED_RENDERER_WEBGL),s=i.getParameter(e.UNMASKED_VENDOR_WEBGL);r&&(t.renderer=r.toLowerCase()),s&&(t.vendor=s.toLowerCase())}return this.gpuInfo=t,t}},Rr;function gc(){let{WebGLProbe:i}=Tt();return i.queryWebGL(kt()),F.enableGLFiltering&&i.isSupported(F.textureSize)?new Ta({tileSize:F.textureSize}):new dc}function Br(i=!0){return!Rr&&i&&(Rr=gc()),Rr}var Oa=["cropX","cropY"],ct=class ds extends U{static getDefaults(){return{...super.getDefaults(),...ds.ownDefaults}}constructor(t,e){super(),m(this,"_lastScaleX",1),m(this,"_lastScaleY",1),m(this,"_filterScalingX",1),m(this,"_filterScalingY",1),this.filters=[],Object.assign(this,ds.ownDefaults),this.setOptions(e),this.cacheKey=`texture${Wt()}`,this.setElement(typeof t=="string"?(this.canvas&>(this.canvas.getElement())||Ce()).getElementById(t):t,e)}getElement(){return this._element}setElement(t,e={}){this.removeTexture(this.cacheKey),this.removeTexture(`${this.cacheKey}_filtered`),this._element=t,this._originalElement=t,this._setWidthHeight(e),this.filters.length!==0&&this.applyFilters(),this.resizeFilter&&this.applyResizeFilters()}removeTexture(t){let e=Br(!1);e instanceof Ta&&e.evictCachesForKey(t)}dispose(){super.dispose(),this.removeTexture(this.cacheKey),this.removeTexture(`${this.cacheKey}_filtered`),this._cacheContext=null,["_originalElement","_element","_filteredEl","_cacheCanvas"].forEach(t=>{let e=this[t];e&&Tt().dispose(e),this[t]=void 0})}getCrossOrigin(){return this._originalElement&&(this._originalElement.crossOrigin||null)}getOriginalSize(){let t=this.getElement();return t?{width:t.naturalWidth||t.width,height:t.naturalHeight||t.height}:{width:0,height:0}}_stroke(t){if(!this.stroke||this.strokeWidth===0)return;let e=this.width/2,r=this.height/2;t.beginPath(),t.moveTo(-e,-r),t.lineTo(e,-r),t.lineTo(e,r),t.lineTo(-e,r),t.lineTo(-e,-r),t.closePath()}toObject(t=[]){let e=[];return this.filters.forEach(r=>{r&&e.push(r.toObject())}),{...super.toObject([...Oa,...t]),src:this.getSrc(),crossOrigin:this.getCrossOrigin(),filters:e,...this.resizeFilter?{resizeFilter:this.resizeFilter.toObject()}:{}}}hasCrop(){return!!this.cropX||!!this.cropY||this.width<this._element.width||this.height<this._element.height}_toSVG(){let t=[],e=this._element,r=-this.width/2,s=-this.height/2,n=[],o=[],a="",l="";if(!e)return[];if(this.hasCrop()){let h=Wt();n.push('<clipPath id="imageCrop_'+h+`">
|
|
58
|
+
`,' <rect x="'+r+'" y="'+s+'" width="'+M(this.width)+'" height="'+M(this.height)+`" />
|
|
59
|
+
`,`</clipPath>
|
|
60
|
+
`),a=' clip-path="url(#imageCrop_'+h+')" '}if(this.imageSmoothing||(l=' image-rendering="optimizeSpeed"'),t.push(" <image ","COMMON_PARTS",`xlink:href="${M(this.getSrc(!0))}" x="${r-this.cropX}" y="${s-this.cropY}" width="${e.width||e.naturalWidth}" height="${e.height||e.naturalHeight}"${l}${a}></image>
|
|
61
|
+
`),this.stroke||this.strokeDashArray){let h=this.fill;this.fill=null,o=[` <rect x="${r}" y="${s}" width="${M(this.width)}" height="${M(this.height)}" style="${this.getSvgStyles()}" />
|
|
62
|
+
`],this.fill=h}return n=this.paintFirst==="fill"?n.concat(t,o):n.concat(o,t),n}getSrc(t){let e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():this.srcFromAttribute?e.getAttribute("src")||"":e.src:this.src||""}getSvgSrc(t){return this.getSrc(t)}setSrc(t,{crossOrigin:e,signal:r}={}){return pi(t,{crossOrigin:e,signal:r}).then(s=>{e!==void 0&&this.set({crossOrigin:e}),this.setElement(s)})}toString(){return`#<Image: { src: "${this.getSrc()}" }>`}applyResizeFilters(){let t=this.resizeFilter,e=this.minimumScaleTrigger,r=this.getTotalObjectScaling(),s=r.x,n=r.y,o=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!t||s>e&&n>e)return this._element=o,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=s,void(this._lastScaleY=n);let a=at(o),{width:l,height:h}=o;this._element=a,this._lastScaleX=t.scaleX=s,this._lastScaleY=t.scaleY=n,Br().applyFilters([t],o,l,h,this._element),this._filterScalingX=a.width/this._originalElement.width,this._filterScalingY=a.height/this._originalElement.height}applyFilters(t=this.filters||[]){if(t=t.filter(n=>n&&!n.isNeutralState()),this.set("dirty",!0),this.removeTexture(`${this.cacheKey}_filtered`),t.length===0)return this._element=this._originalElement,this._filteredEl=void 0,this._filterScalingX=1,void(this._filterScalingY=1);let e=this._originalElement,r=e.naturalWidth||e.width,s=e.naturalHeight||e.height;if(this._element===this._originalElement){let n=at({width:r,height:s});this._element=n,this._filteredEl=n}else this._filteredEl&&(this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,r,s),this._lastScaleX=1,this._lastScaleY=1);Br().applyFilters(t,this._originalElement,r,s,this._element,this.cacheKey),this._originalElement.width===this._element.width&&this._originalElement.height===this._element.height||(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height)}_render(t){t.imageSmoothingEnabled=this.imageSmoothing,this.isMoving!==!0&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(t),this._renderPaintInOrder(t)}drawCacheOnCanvas(t){t.imageSmoothingEnabled=this.imageSmoothing,super.drawCacheOnCanvas(t)}shouldCache(){return this.needsItsOwnCache()}_renderFill(t){let e=this._element;if(!e)return;let r=this._filterScalingX,s=this._filterScalingY,n=this.width,o=this.height,a=Math.max(this.cropX,0),l=Math.max(this.cropY,0),h=e.naturalWidth||e.width,c=e.naturalHeight||e.height,u=a*r,d=l*s,g=Math.min(n*r,h-u),p=Math.min(o*s,c-d),f=-n/2,v=-o/2,x=Math.min(n,h/r-a),b=Math.min(o,c/s-l);e&&t.drawImage(e,u,d,g,p,f,v,x,b)}_needsResize(){let t=this.getTotalObjectScaling();return t.x!==this._lastScaleX||t.y!==this._lastScaleY}_resetWidthHeight(){this.set(this.getOriginalSize())}_setWidthHeight({width:t,height:e}={}){let r=this.getOriginalSize();this.width=t||r.width,this.height=e||r.height}parsePreserveAspectRatioAttribute(){let t=As(this.preserveAspectRatio||""),e=this.width,r=this.height,s={width:e,height:r},n,o=this._element.width,a=this._element.height,l=1,h=1,c=0,u=0,d=0,g=0;return!t||t.alignX==="none"&&t.alignY==="none"?(l=e/o,h=r/a):(t.meetOrSlice==="meet"&&(l=h=qo(this._element,s),n=(e-o*l)/2,t.alignX==="Min"&&(c=-n),t.alignX==="Max"&&(c=n),n=(r-a*h)/2,t.alignY==="Min"&&(u=-n),t.alignY==="Max"&&(u=n)),t.meetOrSlice==="slice"&&(l=h=Ko(this._element,s),n=o-e/l,t.alignX==="Mid"&&(d=n/2),t.alignX==="Max"&&(d=n),n=a-r/h,t.alignY==="Mid"&&(g=n/2),t.alignY==="Max"&&(g=n),o=e/l,a=r/h)),{width:o,height:a,scaleX:l,scaleY:h,offsetLeft:c,offsetTop:u,cropX:d,cropY:g}}static fromObject({filters:t,resizeFilter:e,src:r,crossOrigin:s,type:n,...o},a){return Promise.all([pi(r,{...a,crossOrigin:s}),t&&ye(t,a),e?ye([e],a):[],Si(o,a)]).then(([l,h=[],[c],u={}])=>new this(l,{...o,src:r,filters:h,resizeFilter:c,...u}))}static fromURL(t,{crossOrigin:e=null,signal:r}={},s){return pi(t,{crossOrigin:e,signal:r}).then(n=>new this(n,s))}static async fromElement(t,e={},r){let s=Rt(t,this.ATTRIBUTE_NAMES,r);return this.fromURL(s["xlink:href"]||s.href,e,s).catch(n=>(At("log","Unable to parse Image",n),null))}};function Xr(i){if(!_l.test(i.nodeName))return{};let t=i.getAttribute("viewBox"),e,r,s=1,n=1,o=i.getAttribute("width"),a=i.getAttribute("height"),l=i.getAttribute("x")||0,h=i.getAttribute("y")||0,c=!(t&&yn.test(t)),u=!o||!a||o==="100%"||a==="100%",d="",g=0,p=0;if(c&&(l||h)&&i.parentNode&&i.parentNode.nodeName!=="#document"&&(d=" translate("+Z(l||"0")+" "+Z(h||"0")+") ",e=(i.getAttribute("transform")||"")+d,i.setAttribute("transform",e),i.removeAttribute("x"),i.removeAttribute("y")),c&&u)return{width:0,height:0};let f={width:0,height:0};if(c)return f.width=Z(o),f.height=Z(a),f;let v=t.match(yn),x=-parseFloat(v[1]),b=-parseFloat(v[2]),_=parseFloat(v[3]),C=parseFloat(v[4]);f.minX=x,f.minY=b,f.viewBoxWidth=_,f.viewBoxHeight=C,u?(f.width=_,f.height=C):(f.width=Z(o),f.height=Z(a),s=f.width/_,n=f.height/C);let S=As(i.getAttribute("preserveAspectRatio")||"");if(S.alignX!=="none"&&(S.meetOrSlice==="meet"&&(n=s=s>n?n:s),S.meetOrSlice==="slice"&&(n=s=s>n?s:n),g=f.width-_*s,p=f.height-C*s,S.alignX==="Mid"&&(g/=2),S.alignY==="Mid"&&(p/=2),S.alignX==="Min"&&(g=0),S.alignY==="Min"&&(p=0)),s===1&&n===1&&x===0&&b===0&&l===0&&h===0)return f;if((l||h)&&i.parentNode.nodeName!=="#document"&&(d=" translate("+Z(l||"0")+" "+Z(h||"0")+") "),e=d+" matrix("+s+" 0 0 "+n+" "+(x*s+g)+" "+(b*n+p)+") ",i.nodeName==="svg"){for(r=i.ownerDocument.createElementNS(zr,"g");i.firstChild;)r.appendChild(i.firstChild);i.appendChild(r)}else r=i,r.removeAttribute("x"),r.removeAttribute("y"),e=r.getAttribute("transform")+e;return r.setAttribute("transform",e),f}m(ct,"type","Image"),m(ct,"cacheProperties",[...Lt,...Oa]),m(ct,"ownDefaults",{strokeWidth:0,srcFromAttribute:!1,minimumScaleTrigger:.5,cropX:0,cropY:0,imageSmoothing:!0}),m(ct,"ATTRIBUTE_NAMES",[...Nt,"x","y","width","height","preserveAspectRatio","xlink:href","href","crossOrigin","image-rendering"]),w.setClass(ct),w.setSVGClass(ct);var tr=i=>i.tagName.replace("svg:",""),pc=cr(["pattern","defs","symbol","metadata","clipPath","mask","desc"]);function ka(i,t){let e,r,s,n,o=[];for(s=0,n=t.length;s<n;s++)e=t[s],r=i.getElementsByTagNameNS("http://www.w3.org/2000/svg",e),o=o.concat(Array.from(r));return o}var fc=["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"],$r="xlink:href";function Pa(i,t){var e;let r=((e=t.getAttribute($r))==null?void 0:e.slice(1))||"",s=i.getElementById(r);if(s&&s.getAttribute($r)&&Pa(i,s),s&&(fc.forEach(n=>{let o=s.getAttribute(n);!t.hasAttribute(n)&&o&&t.setAttribute(n,o)}),!t.children.length)){let n=s.cloneNode(!0);for(;n.firstChild;)t.appendChild(n.firstChild)}t.removeAttribute($r)}var mc=["linearGradient","radialGradient","svg:linearGradient","svg:radialGradient"],An=i=>w.getSVGClass(tr(i).toLowerCase()),vc=class{constructor(i,t,e,r,s){this.elements=i,this.options=t,this.reviver=e,this.regexUrl=/^url\(['"]?#([^'"]+)['"]?\)/g,this.doc=r,this.clipPaths=s,this.gradientDefs=(function(n){let o=ka(n,mc),a={},l=o.length;for(;l--;){let h=o[l];h.getAttribute("xlink:href")&&Pa(n,h);let c=h.getAttribute("id");c&&(a[c]=h)}return a})(r),this.cssRules=(function(n){let o=n.getElementsByTagName("style"),a={};for(let l=0;l<o.length;l++){let h=(o[l].textContent||"").replace(/\/\*[\s\S]*?\*\//g,"");h.trim()!==""&&h.split("}").filter((c,u,d)=>d.length>1&&c.trim()).forEach(c=>{if((c.match(/{/g)||[]).length>1&&c.trim().startsWith("@"))return;let u=c.split("{"),d={},g=u[1].trim().split(";").filter(function(p){return p.trim()});for(let p=0;p<g.length;p++){let f=g[p].split(":"),v=f[0].trim();d[v]=f[1].trim()}(c=u[0].trim()).split(",").forEach(p=>{(p=p.replace(/^svg/i,"").trim())!==""&&(a[p]={...a[p]||{},...d})})})}return a})(r)}parse(){return Promise.all(this.elements.map(i=>this.createObject(i)))}async createObject(i){let t=An(i);if(t){let e=await t.fromElement(i,this.options,this.cssRules);return this.resolveGradient(e,i,it),this.resolveGradient(e,i,Ot),e instanceof ct&&e._originalElement?Vi(e,e.parsePreserveAspectRatioAttribute()):Vi(e),await this.resolveClipPath(e,i),this.reviver&&this.reviver(i,e),e}return null}extractPropertyDefinition(i,t,e){let r=i[t],s=this.regexUrl;if(!s.test(r))return;s.lastIndex=0;let n=s.exec(r)[1];return s.lastIndex=0,e[n]}resolveGradient(i,t,e){let r=this.extractPropertyDefinition(i,e,this.gradientDefs);if(r){let s=t.getAttribute(e+"-opacity"),n=Ue.fromElement(r,i,{...this.options,opacity:s});i.set(e,n)}}async resolveClipPath(i,t,e){let r=this.extractPropertyDefinition(i,"clipPath",this.clipPaths);if(r){let s=rt(i.calcTransformMatrix()),n=r[0].parentElement,o=t;for(;!e&&o.parentElement&&o.getAttribute("clip-path")!==i.clipPath;)o=o.parentElement;o.parentElement.appendChild(n);let a=Ji(`${o.getAttribute("transform")||""} ${n.getAttribute("originalTransform")||""}`);n.setAttribute("transform",`matrix(${a.join(",")})`);let l=await Promise.all(r.map(x=>An(x).fromElement(x,this.options,this.cssRules).then(b=>(Vi(b),b.fillRule=b.clipRule,delete b.clipRule,b)))),h=l.length===1?l[0]:new Et(l),c=$(s,h.calcTransformMatrix());h.clipPath&&await this.resolveClipPath(h,o,n.getAttribute("clip-path")?o:void 0);let{scaleX:u,scaleY:d,angle:g,skewX:p,translateX:f,translateY:v}=re(c);h.set({flipX:!1,flipY:!1}),h.set({scaleX:u,scaleY:d,angle:g,skewX:p,skewY:0}),h.setPositionByOrigin(new y(f,v),L,L),i.clipPath=h}else delete i.clipPath}},jn=i=>bl.test(tr(i));async function yc(i,t,{crossOrigin:e,signal:r}={}){if(r&&r.aborted)return At("log",new Fn("parseSVGDocument")),{objects:[],elements:[],options:{},allElements:[]};let s=i.documentElement;(function(h){let c=ka(h,["use","svg:use"]),u=["x","y","xlink:href","href","transform"];for(let d of c){let g=d.attributes,p={};for(let O of g)O.value&&(p[O.name]=O.value);let f=(p["xlink:href"]||p.href||"").slice(1);if(f==="")return;let v=h.getElementById(f);if(v===null)return;let x=v.cloneNode(!0),b=x.attributes,_={};for(let O of b)O.value&&(_[O.name]=O.value);let{x:C=0,y:S=0,transform:k=""}=p,T=`${k} ${_.transform||""} translate(${C}, ${S})`;if(Xr(x),/^svg$/i.test(x.nodeName)){let O=x.ownerDocument.createElementNS(zr,"g");Object.entries(_).forEach(([P,A])=>O.setAttributeNS(zr,P,A)),O.append(...x.childNodes),x=O}for(let O of g){if(!O)continue;let{name:P,value:A}=O;if(!u.includes(P))if(P==="style"){let D={};qr(A,D),Object.entries(_).forEach(([j,B])=>{D[j]=B}),qr(_.style||"",D);let E=Object.entries(D).map(j=>j.join(":")).join(";");x.setAttribute(P,E)}else!_[P]&&x.setAttribute(P,A)}x.setAttribute("transform",T),x.setAttribute("instantiated_by_use","1"),x.removeAttribute("id"),d.parentNode.replaceChild(x,d)}})(i);let n=Array.from(s.getElementsByTagName("*")),o={...Xr(s),crossOrigin:e,signal:r},a=n.filter(h=>(Xr(h),jn(h)&&!(function(c){let u=c;for(;u&&(u=u.parentElement);)if(u&&u.nodeName&&pc.test(tr(u))&&!u.getAttribute("instantiated_by_use"))return!0;return!1})(h)));if(!a||a&&!a.length)return{objects:[],elements:[],options:{},allElements:[],options:o,allElements:n};let l={};return n.filter(h=>tr(h)==="clipPath").forEach(h=>{h.setAttribute("originalTransform",h.getAttribute("transform")||"");let c=h.getAttribute("id");l[c]=Array.from(h.getElementsByTagName("*")).filter(u=>jn(u))}),{objects:await new vc(a,o,t,i,l).parse(),elements:a,options:o,allElements:n}}function Ma(i,t,e){return yc(new(ie()).DOMParser().parseFromString(i.trim(),"text/xml"),t,e)}var fr=i=>i.webgl!==void 0;var zs="precision highp float",xc=`
|
|
63
|
+
${zs};
|
|
64
|
+
varying vec2 vTexCoord;
|
|
65
|
+
uniform sampler2D uTexture;
|
|
66
|
+
void main() {
|
|
67
|
+
gl_FragColor = texture2D(uTexture, vTexCoord);
|
|
68
|
+
}`,bc=new RegExp(zs,"g"),W=class{get type(){return this.constructor.type}constructor({type:i,...t}={}){Object.assign(this,this.constructor.defaults,t)}getFragmentSource(){return xc}getVertexSource(){return`
|
|
69
|
+
attribute vec2 aPosition;
|
|
70
|
+
varying vec2 vTexCoord;
|
|
71
|
+
void main() {
|
|
72
|
+
vTexCoord = aPosition;
|
|
73
|
+
gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
|
|
74
|
+
}`}createProgram(i,t=this.getFragmentSource(),e=this.getVertexSource()){let{WebGLProbe:{GLPrecision:r="highp"}}=Tt();r!=="highp"&&(t=t.replace(bc,zs.replace("highp",r)));let s=i.createShader(i.VERTEX_SHADER),n=i.createShader(i.FRAGMENT_SHADER),o=i.createProgram();if(!s||!n||!o)throw new St("Vertex, fragment shader or program creation error");if(i.shaderSource(s,e),i.compileShader(s),!i.getShaderParameter(s,i.COMPILE_STATUS))throw new St(`Vertex shader compile error for ${this.type}: ${i.getShaderInfoLog(s)}`);if(i.shaderSource(n,t),i.compileShader(n),!i.getShaderParameter(n,i.COMPILE_STATUS))throw new St(`Fragment shader compile error for ${this.type}: ${i.getShaderInfoLog(n)}`);if(i.attachShader(o,s),i.attachShader(o,n),i.linkProgram(o),!i.getProgramParameter(o,i.LINK_STATUS))throw new St(`Shader link error for "${this.type}" ${i.getProgramInfoLog(o)}`);let a=this.getUniformLocations(i,o)||{};return a.uStepW=i.getUniformLocation(o,"uStepW"),a.uStepH=i.getUniformLocation(o,"uStepH"),{program:o,attributeLocations:this.getAttributeLocations(i,o),uniformLocations:a}}getAttributeLocations(i,t){return{aPosition:i.getAttribLocation(t,"aPosition")}}getUniformLocations(i,t){let e=this.constructor.uniformLocations,r={};for(let s=0;s<e.length;s++)r[e[s]]=i.getUniformLocation(t,e[s]);return r}sendAttributeData(i,t,e){let r=t.aPosition,s=i.createBuffer();i.bindBuffer(i.ARRAY_BUFFER,s),i.enableVertexAttribArray(r),i.vertexAttribPointer(r,2,i.FLOAT,!1,0,0),i.bufferData(i.ARRAY_BUFFER,e,i.STATIC_DRAW)}_setupFrameBuffer(i){let t=i.context;if(i.passes>1){let e=i.destinationWidth,r=i.destinationHeight;i.sourceWidth===e&&i.sourceHeight===r||(t.deleteTexture(i.targetTexture),i.targetTexture=i.filterBackend.createTexture(t,e,r)),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,i.targetTexture,0)}else t.bindFramebuffer(t.FRAMEBUFFER,null),t.finish()}_swapTextures(i){i.passes--,i.pass++;let t=i.targetTexture;i.targetTexture=i.sourceTexture,i.sourceTexture=t}isNeutralState(i){return!1}applyTo(i){fr(i)?(this._setupFrameBuffer(i),this.applyToWebGL(i),this._swapTextures(i)):this.applyTo2d(i)}applyTo2d(i){}getCacheKey(){return this.type}retrieveShader(i){let t=this.getCacheKey();return i.programCache[t]||(i.programCache[t]=this.createProgram(i.context)),i.programCache[t]}applyToWebGL(i){let t=i.context,e=this.retrieveShader(i);i.pass===0&&i.originalTexture?t.bindTexture(t.TEXTURE_2D,i.originalTexture):t.bindTexture(t.TEXTURE_2D,i.sourceTexture),t.useProgram(e.program),this.sendAttributeData(t,e.attributeLocations,i.aPosition),t.uniform1f(e.uniformLocations.uStepW,1/i.sourceWidth),t.uniform1f(e.uniformLocations.uStepH,1/i.sourceHeight),this.sendUniformData(t,e.uniformLocations),t.viewport(0,0,i.destinationWidth,i.destinationHeight),t.drawArrays(t.TRIANGLE_STRIP,0,4)}bindAdditionalTexture(i,t,e){i.activeTexture(e),i.bindTexture(i.TEXTURE_2D,t),i.activeTexture(i.TEXTURE0)}unbindAdditionalTexture(i,t){i.activeTexture(t),i.bindTexture(i.TEXTURE_2D,null),i.activeTexture(i.TEXTURE0)}sendUniformData(i,t){}createHelpLayer(i){if(!i.helpLayer){let{sourceWidth:t,sourceHeight:e}=i;i.helpLayer=at({width:t,height:e})}}toObject(){let i=Object.keys(this.constructor.defaults||{});return{type:this.type,...i.reduce((t,e)=>(t[e]=this[e],t),{})}}toJSON(){return this.toObject()}static async fromObject({type:i,...t},e){return new this(t)}};m(W,"type","BaseFilter"),m(W,"uniformLocations",[]);var _c={multiply:`gl_FragColor.rgb *= uColor.rgb;
|
|
75
|
+
`,screen:`gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);
|
|
76
|
+
`,add:`gl_FragColor.rgb += uColor.rgb;
|
|
77
|
+
`,difference:`gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);
|
|
78
|
+
`,subtract:`gl_FragColor.rgb -= uColor.rgb;
|
|
79
|
+
`,lighten:`gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);
|
|
80
|
+
`,darken:`gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);
|
|
81
|
+
`,exclusion:`gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);
|
|
82
|
+
`,overlay:`
|
|
83
|
+
if (uColor.r < 0.5) {
|
|
84
|
+
gl_FragColor.r *= 2.0 * uColor.r;
|
|
85
|
+
} else {
|
|
86
|
+
gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);
|
|
87
|
+
}
|
|
88
|
+
if (uColor.g < 0.5) {
|
|
89
|
+
gl_FragColor.g *= 2.0 * uColor.g;
|
|
90
|
+
} else {
|
|
91
|
+
gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);
|
|
92
|
+
}
|
|
93
|
+
if (uColor.b < 0.5) {
|
|
94
|
+
gl_FragColor.b *= 2.0 * uColor.b;
|
|
95
|
+
} else {
|
|
96
|
+
gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);
|
|
97
|
+
}
|
|
98
|
+
`,tint:`
|
|
99
|
+
gl_FragColor.rgb *= (1.0 - uColor.a);
|
|
100
|
+
gl_FragColor.rgb += uColor.rgb;
|
|
101
|
+
`},Ke=class extends W{getCacheKey(){return`${this.type}_${this.mode}`}getFragmentSource(){return`
|
|
102
|
+
precision highp float;
|
|
103
|
+
uniform sampler2D uTexture;
|
|
104
|
+
uniform vec4 uColor;
|
|
105
|
+
varying vec2 vTexCoord;
|
|
106
|
+
void main() {
|
|
107
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
108
|
+
gl_FragColor = color;
|
|
109
|
+
if (color.a > 0.0) {
|
|
110
|
+
${_c[this.mode]}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
`}applyTo2d({imageData:{data:i}}){let t=new lt(this.color).getSource(),e=this.alpha,r=t[0]*e,s=t[1]*e,n=t[2]*e,o=1-e;for(let a=0;a<i.length;a+=4){let l=i[a],h=i[a+1],c=i[a+2],u,d,g;switch(this.mode){case"multiply":u=l*r/255,d=h*s/255,g=c*n/255;break;case"screen":u=255-(255-l)*(255-r)/255,d=255-(255-h)*(255-s)/255,g=255-(255-c)*(255-n)/255;break;case"add":u=l+r,d=h+s,g=c+n;break;case"difference":u=Math.abs(l-r),d=Math.abs(h-s),g=Math.abs(c-n);break;case"subtract":u=l-r,d=h-s,g=c-n;break;case"darken":u=Math.min(l,r),d=Math.min(h,s),g=Math.min(c,n);break;case"lighten":u=Math.max(l,r),d=Math.max(h,s),g=Math.max(c,n);break;case"overlay":u=r<128?2*l*r/255:255-2*(255-l)*(255-r)/255,d=s<128?2*h*s/255:255-2*(255-h)*(255-s)/255,g=n<128?2*c*n/255:255-2*(255-c)*(255-n)/255;break;case"exclusion":u=r+l-2*r*l/255,d=s+h-2*s*h/255,g=n+c-2*n*c/255;break;case"tint":u=r+l*o,d=s+h*o,g=n+c*o}i[a]=u,i[a+1]=d,i[a+2]=g}}sendUniformData(i,t){let e=new lt(this.color).getSource();e[0]=this.alpha*e[0]/255,e[1]=this.alpha*e[1]/255,e[2]=this.alpha*e[2]/255,e[3]=this.alpha,i.uniform4fv(t.uColor,e)}};m(Ke,"defaults",{color:"#F95C63",mode:"multiply",alpha:1}),m(Ke,"type","BlendColor"),m(Ke,"uniformLocations",["uColor"]),w.setClass(Ke);var Cc={multiply:`
|
|
114
|
+
precision highp float;
|
|
115
|
+
uniform sampler2D uTexture;
|
|
116
|
+
uniform sampler2D uImage;
|
|
117
|
+
uniform vec4 uColor;
|
|
118
|
+
varying vec2 vTexCoord;
|
|
119
|
+
varying vec2 vTexCoord2;
|
|
120
|
+
void main() {
|
|
121
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
122
|
+
vec4 color2 = texture2D(uImage, vTexCoord2);
|
|
123
|
+
color.rgba *= color2.rgba;
|
|
124
|
+
gl_FragColor = color;
|
|
125
|
+
}
|
|
126
|
+
`,mask:`
|
|
127
|
+
precision highp float;
|
|
128
|
+
uniform sampler2D uTexture;
|
|
129
|
+
uniform sampler2D uImage;
|
|
130
|
+
uniform vec4 uColor;
|
|
131
|
+
varying vec2 vTexCoord;
|
|
132
|
+
varying vec2 vTexCoord2;
|
|
133
|
+
void main() {
|
|
134
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
135
|
+
vec4 color2 = texture2D(uImage, vTexCoord2);
|
|
136
|
+
color.a = color2.a;
|
|
137
|
+
gl_FragColor = color;
|
|
138
|
+
}
|
|
139
|
+
`},Je=class extends W{getCacheKey(){return`${this.type}_${this.mode}`}getFragmentSource(){return Cc[this.mode]}getVertexSource(){return`
|
|
140
|
+
attribute vec2 aPosition;
|
|
141
|
+
varying vec2 vTexCoord;
|
|
142
|
+
varying vec2 vTexCoord2;
|
|
143
|
+
uniform mat3 uTransformMatrix;
|
|
144
|
+
void main() {
|
|
145
|
+
vTexCoord = aPosition;
|
|
146
|
+
vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;
|
|
147
|
+
gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
|
|
148
|
+
}
|
|
149
|
+
`}applyToWebGL(i){let t=i.context,e=this.createTexture(i.filterBackend,this.image);this.bindAdditionalTexture(t,e,t.TEXTURE1),super.applyToWebGL(i),this.unbindAdditionalTexture(t,t.TEXTURE1)}createTexture(i,t){return i.getCachedTexture(t.cacheKey,t.getElement())}calculateMatrix(){let i=this.image,{width:t,height:e}=i.getElement();return[1/i.scaleX,0,0,0,1/i.scaleY,0,-i.left/t,-i.top/e,1]}applyTo2d({imageData:{data:i,width:t,height:e},filterBackend:{resources:r}}){let s=this.image;r.blendImage||(r.blendImage=kt());let n=r.blendImage,o=n.getContext("2d");n.width!==t||n.height!==e?(n.width=t,n.height=e):o.clearRect(0,0,t,e),o.setTransform(s.scaleX,0,0,s.scaleY,s.left,s.top),o.drawImage(s.getElement(),0,0,t,e);let a=o.getImageData(0,0,t,e).data;for(let l=0;l<i.length;l+=4){let h=i[l],c=i[l+1],u=i[l+2],d=i[l+3],g=a[l],p=a[l+1],f=a[l+2],v=a[l+3];switch(this.mode){case"multiply":i[l]=h*g/255,i[l+1]=c*p/255,i[l+2]=u*f/255,i[l+3]=d*v/255;break;case"mask":i[l+3]=v}}}sendUniformData(i,t){let e=this.calculateMatrix();i.uniform1i(t.uImage,1),i.uniformMatrix3fv(t.uTransformMatrix,!1,e)}toObject(){return{...super.toObject(),image:this.image&&this.image.toObject()}}static async fromObject({type:i,image:t,...e},r){return ct.fromObject(t,r).then(s=>new this({...e,image:s}))}};m(Je,"type","BlendImage"),m(Je,"defaults",{mode:"multiply",alpha:1}),m(Je,"uniformLocations",["uTransformMatrix","uImage"]),w.setClass(Je);var Ze=class extends W{getFragmentSource(){return`
|
|
150
|
+
precision highp float;
|
|
151
|
+
uniform sampler2D uTexture;
|
|
152
|
+
uniform vec2 uDelta;
|
|
153
|
+
varying vec2 vTexCoord;
|
|
154
|
+
const float nSamples = 15.0;
|
|
155
|
+
vec3 v3offset = vec3(12.9898, 78.233, 151.7182);
|
|
156
|
+
float random(vec3 scale) {
|
|
157
|
+
/* use the fragment position for a different seed per-pixel */
|
|
158
|
+
return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);
|
|
159
|
+
}
|
|
160
|
+
void main() {
|
|
161
|
+
vec4 color = vec4(0.0);
|
|
162
|
+
float totalC = 0.0;
|
|
163
|
+
float totalA = 0.0;
|
|
164
|
+
float offset = random(v3offset);
|
|
165
|
+
for (float t = -nSamples; t <= nSamples; t++) {
|
|
166
|
+
float percent = (t + offset - 0.5) / nSamples;
|
|
167
|
+
vec4 sample = texture2D(uTexture, vTexCoord + uDelta * percent);
|
|
168
|
+
float weight = 1.0 - abs(percent);
|
|
169
|
+
float alpha = weight * sample.a;
|
|
170
|
+
color.rgb += sample.rgb * alpha;
|
|
171
|
+
color.a += alpha;
|
|
172
|
+
totalA += weight;
|
|
173
|
+
totalC += alpha;
|
|
174
|
+
}
|
|
175
|
+
gl_FragColor.rgb = color.rgb / totalC;
|
|
176
|
+
gl_FragColor.a = color.a / totalA;
|
|
177
|
+
}
|
|
178
|
+
`}applyTo(i){fr(i)?(this.aspectRatio=i.sourceWidth/i.sourceHeight,i.passes++,this._setupFrameBuffer(i),this.horizontal=!0,this.applyToWebGL(i),this._swapTextures(i),this._setupFrameBuffer(i),this.horizontal=!1,this.applyToWebGL(i),this._swapTextures(i)):this.applyTo2d(i)}applyTo2d({imageData:{data:i,width:t,height:e}}){this.aspectRatio=t/e,this.horizontal=!0;let r=this.getBlurValue()*t,s=new Uint8ClampedArray(i),n=4*t;for(let o=0;o<i.length;o+=4){let a=0,l=0,h=0,c=0,u=0,d=o-o%n,g=d+n;for(let p=-14;p<15;p++){let f=p/15,v=4*Math.floor(r*f),x=1-Math.abs(f),b=o+v;b<d?b=d:b>g&&(b=g);let _=i[b+3]*x;a+=i[b]*_,l+=i[b+1]*_,h+=i[b+2]*_,c+=_,u+=x}s[o]=a/c,s[o+1]=l/c,s[o+2]=h/c,s[o+3]=c/u}this.horizontal=!1,r=this.getBlurValue()*e;for(let o=0;o<s.length;o+=4){let a=0,l=0,h=0,c=0,u=0,d=o%n,g=s.length-n+d;for(let p=-14;p<15;p++){let f=p/15,v=Math.floor(r*f)*n,x=1-Math.abs(f),b=o+v;b<d?b=d:b>g&&(b=g);let _=s[b+3]*x;a+=s[b]*_,l+=s[b+1]*_,h+=s[b+2]*_,c+=_,u+=x}i[o]=a/c,i[o+1]=l/c,i[o+2]=h/c,i[o+3]=c/u}}sendUniformData(i,t){let e=this.chooseRightDelta();i.uniform2fv(t.uDelta,e)}isNeutralState(){return this.blur===0}getBlurValue(){let i=1,{horizontal:t,aspectRatio:e}=this;return t?e>1&&(i=1/e):e<1&&(i=e),i*this.blur*.12}chooseRightDelta(){let i=this.getBlurValue();return this.horizontal?[i,0]:[0,i]}};m(Ze,"type","Blur"),m(Ze,"defaults",{blur:0}),m(Ze,"uniformLocations",["uDelta"]),w.setClass(Ze);var Qe=class extends W{getFragmentSource(){return`
|
|
179
|
+
precision highp float;
|
|
180
|
+
uniform sampler2D uTexture;
|
|
181
|
+
uniform float uBrightness;
|
|
182
|
+
varying vec2 vTexCoord;
|
|
183
|
+
void main() {
|
|
184
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
185
|
+
color.rgb += uBrightness;
|
|
186
|
+
gl_FragColor = color;
|
|
187
|
+
}
|
|
188
|
+
`}applyTo2d({imageData:{data:i}}){let t=Math.round(255*this.brightness);for(let e=0;e<i.length;e+=4)i[e]+=t,i[e+1]+=t,i[e+2]+=t}isNeutralState(){return this.brightness===0}sendUniformData(i,t){i.uniform1f(t.uBrightness,this.brightness)}};m(Qe,"type","Brightness"),m(Qe,"defaults",{brightness:0}),m(Qe,"uniformLocations",["uBrightness"]),w.setClass(Qe);var Da={matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],colorsOnly:!0},ee=class extends W{getFragmentSource(){return`
|
|
189
|
+
precision highp float;
|
|
190
|
+
uniform sampler2D uTexture;
|
|
191
|
+
varying vec2 vTexCoord;
|
|
192
|
+
uniform mat4 uColorMatrix;
|
|
193
|
+
uniform vec4 uConstants;
|
|
194
|
+
void main() {
|
|
195
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
196
|
+
color *= uColorMatrix;
|
|
197
|
+
color += uConstants;
|
|
198
|
+
gl_FragColor = color;
|
|
199
|
+
}`}applyTo2d(i){let t=i.imageData.data,e=this.matrix,r=this.colorsOnly;for(let s=0;s<t.length;s+=4){let n=t[s],o=t[s+1],a=t[s+2];if(t[s]=n*e[0]+o*e[1]+a*e[2]+255*e[4],t[s+1]=n*e[5]+o*e[6]+a*e[7]+255*e[9],t[s+2]=n*e[10]+o*e[11]+a*e[12]+255*e[14],!r){let l=t[s+3];t[s]+=l*e[3],t[s+1]+=l*e[8],t[s+2]+=l*e[13],t[s+3]=n*e[15]+o*e[16]+a*e[17]+l*e[18]+255*e[19]}}}sendUniformData(i,t){let e=this.matrix,r=[e[0],e[1],e[2],e[3],e[5],e[6],e[7],e[8],e[10],e[11],e[12],e[13],e[15],e[16],e[17],e[18]],s=[e[4],e[9],e[14],e[19]];i.uniformMatrix4fv(t.uColorMatrix,!1,r),i.uniform4fv(t.uConstants,s)}toObject(){return{...super.toObject(),matrix:[...this.matrix]}}};function ae(i,t){var e;let r=(m(e=class extends ee{toObject(){return{type:this.type,colorsOnly:this.colorsOnly}}},"type",i),m(e,"defaults",{colorsOnly:!1,matrix:t}),e);return w.setClass(r,i),r}m(ee,"type","ColorMatrix"),m(ee,"defaults",Da),m(ee,"uniformLocations",["uColorMatrix","uConstants"]),w.setClass(ee);var Sc=ae("Brownie",[.5997,.34553,-.27082,0,.186,-.0377,.86095,.15059,0,-.1449,.24113,-.07441,.44972,0,-.02965,0,0,0,1,0]),wc=ae("Vintage",[.62793,.32021,-.03965,0,.03784,.02578,.64411,.03259,0,.02926,.0466,-.08512,.52416,0,.02023,0,0,0,1,0]),Tc=ae("Kodachrome",[1.12855,-.39673,-.03992,0,.24991,-.16404,1.08352,-.05498,0,.09698,-.16786,-.56034,1.60148,0,.13972,0,0,0,1,0]),Oc=ae("Technicolor",[1.91252,-.85453,-.09155,0,.04624,-.30878,1.76589,-.10601,0,-.27589,-.2311,-.75018,1.84759,0,.12137,0,0,0,1,0]),kc=ae("Polaroid",[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0]),Pc=ae("Sepia",[.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0]),Mc=ae("BlackWhite",[1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,0,0,0,1,0]),gs=class extends W{constructor(i={}){super(i),this.subFilters=i.subFilters||[]}applyTo(i){fr(i)&&(i.passes+=this.subFilters.length-1),this.subFilters.forEach(t=>{t.applyTo(i)})}toObject(){return{type:this.type,subFilters:this.subFilters.map(i=>i.toObject())}}isNeutralState(){return!this.subFilters.some(i=>!i.isNeutralState())}static fromObject(i,t){return Promise.all((i.subFilters||[]).map(e=>w.getClass(e.type).fromObject(e,t))).then(e=>new this({subFilters:e}))}};m(gs,"type","Composed"),w.setClass(gs);var ti=class extends W{getFragmentSource(){return`
|
|
200
|
+
precision highp float;
|
|
201
|
+
uniform sampler2D uTexture;
|
|
202
|
+
uniform float uContrast;
|
|
203
|
+
varying vec2 vTexCoord;
|
|
204
|
+
void main() {
|
|
205
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
206
|
+
float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));
|
|
207
|
+
color.rgb = contrastF * (color.rgb - 0.5) + 0.5;
|
|
208
|
+
gl_FragColor = color;
|
|
209
|
+
}`}isNeutralState(){return this.contrast===0}applyTo2d({imageData:{data:i}}){let t=Math.floor(255*this.contrast),e=259*(t+255)/(255*(259-t));for(let r=0;r<i.length;r+=4)i[r]=e*(i[r]-128)+128,i[r+1]=e*(i[r+1]-128)+128,i[r+2]=e*(i[r+2]-128)+128}sendUniformData(i,t){i.uniform1f(t.uContrast,this.contrast)}};m(ti,"type","Contrast"),m(ti,"defaults",{contrast:0}),m(ti,"uniformLocations",["uContrast"]),w.setClass(ti);var Dc={Convolute_3_1:`
|
|
210
|
+
precision highp float;
|
|
211
|
+
uniform sampler2D uTexture;
|
|
212
|
+
uniform float uMatrix[9];
|
|
213
|
+
uniform float uStepW;
|
|
214
|
+
uniform float uStepH;
|
|
215
|
+
varying vec2 vTexCoord;
|
|
216
|
+
void main() {
|
|
217
|
+
vec4 color = vec4(0, 0, 0, 0);
|
|
218
|
+
for (float h = 0.0; h < 3.0; h+=1.0) {
|
|
219
|
+
for (float w = 0.0; w < 3.0; w+=1.0) {
|
|
220
|
+
vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));
|
|
221
|
+
color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
gl_FragColor = color;
|
|
225
|
+
}
|
|
226
|
+
`,Convolute_3_0:`
|
|
227
|
+
precision highp float;
|
|
228
|
+
uniform sampler2D uTexture;
|
|
229
|
+
uniform float uMatrix[9];
|
|
230
|
+
uniform float uStepW;
|
|
231
|
+
uniform float uStepH;
|
|
232
|
+
varying vec2 vTexCoord;
|
|
233
|
+
void main() {
|
|
234
|
+
vec4 color = vec4(0, 0, 0, 1);
|
|
235
|
+
for (float h = 0.0; h < 3.0; h+=1.0) {
|
|
236
|
+
for (float w = 0.0; w < 3.0; w+=1.0) {
|
|
237
|
+
vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));
|
|
238
|
+
color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
float alpha = texture2D(uTexture, vTexCoord).a;
|
|
242
|
+
gl_FragColor = color;
|
|
243
|
+
gl_FragColor.a = alpha;
|
|
244
|
+
}
|
|
245
|
+
`,Convolute_5_1:`
|
|
246
|
+
precision highp float;
|
|
247
|
+
uniform sampler2D uTexture;
|
|
248
|
+
uniform float uMatrix[25];
|
|
249
|
+
uniform float uStepW;
|
|
250
|
+
uniform float uStepH;
|
|
251
|
+
varying vec2 vTexCoord;
|
|
252
|
+
void main() {
|
|
253
|
+
vec4 color = vec4(0, 0, 0, 0);
|
|
254
|
+
for (float h = 0.0; h < 5.0; h+=1.0) {
|
|
255
|
+
for (float w = 0.0; w < 5.0; w+=1.0) {
|
|
256
|
+
vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));
|
|
257
|
+
color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
gl_FragColor = color;
|
|
261
|
+
}
|
|
262
|
+
`,Convolute_5_0:`
|
|
263
|
+
precision highp float;
|
|
264
|
+
uniform sampler2D uTexture;
|
|
265
|
+
uniform float uMatrix[25];
|
|
266
|
+
uniform float uStepW;
|
|
267
|
+
uniform float uStepH;
|
|
268
|
+
varying vec2 vTexCoord;
|
|
269
|
+
void main() {
|
|
270
|
+
vec4 color = vec4(0, 0, 0, 1);
|
|
271
|
+
for (float h = 0.0; h < 5.0; h+=1.0) {
|
|
272
|
+
for (float w = 0.0; w < 5.0; w+=1.0) {
|
|
273
|
+
vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));
|
|
274
|
+
color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
float alpha = texture2D(uTexture, vTexCoord).a;
|
|
278
|
+
gl_FragColor = color;
|
|
279
|
+
gl_FragColor.a = alpha;
|
|
280
|
+
}
|
|
281
|
+
`,Convolute_7_1:`
|
|
282
|
+
precision highp float;
|
|
283
|
+
uniform sampler2D uTexture;
|
|
284
|
+
uniform float uMatrix[49];
|
|
285
|
+
uniform float uStepW;
|
|
286
|
+
uniform float uStepH;
|
|
287
|
+
varying vec2 vTexCoord;
|
|
288
|
+
void main() {
|
|
289
|
+
vec4 color = vec4(0, 0, 0, 0);
|
|
290
|
+
for (float h = 0.0; h < 7.0; h+=1.0) {
|
|
291
|
+
for (float w = 0.0; w < 7.0; w+=1.0) {
|
|
292
|
+
vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));
|
|
293
|
+
color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
gl_FragColor = color;
|
|
297
|
+
}
|
|
298
|
+
`,Convolute_7_0:`
|
|
299
|
+
precision highp float;
|
|
300
|
+
uniform sampler2D uTexture;
|
|
301
|
+
uniform float uMatrix[49];
|
|
302
|
+
uniform float uStepW;
|
|
303
|
+
uniform float uStepH;
|
|
304
|
+
varying vec2 vTexCoord;
|
|
305
|
+
void main() {
|
|
306
|
+
vec4 color = vec4(0, 0, 0, 1);
|
|
307
|
+
for (float h = 0.0; h < 7.0; h+=1.0) {
|
|
308
|
+
for (float w = 0.0; w < 7.0; w+=1.0) {
|
|
309
|
+
vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));
|
|
310
|
+
color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
float alpha = texture2D(uTexture, vTexCoord).a;
|
|
314
|
+
gl_FragColor = color;
|
|
315
|
+
gl_FragColor.a = alpha;
|
|
316
|
+
}
|
|
317
|
+
`,Convolute_9_1:`
|
|
318
|
+
precision highp float;
|
|
319
|
+
uniform sampler2D uTexture;
|
|
320
|
+
uniform float uMatrix[81];
|
|
321
|
+
uniform float uStepW;
|
|
322
|
+
uniform float uStepH;
|
|
323
|
+
varying vec2 vTexCoord;
|
|
324
|
+
void main() {
|
|
325
|
+
vec4 color = vec4(0, 0, 0, 0);
|
|
326
|
+
for (float h = 0.0; h < 9.0; h+=1.0) {
|
|
327
|
+
for (float w = 0.0; w < 9.0; w+=1.0) {
|
|
328
|
+
vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));
|
|
329
|
+
color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
gl_FragColor = color;
|
|
333
|
+
}
|
|
334
|
+
`,Convolute_9_0:`
|
|
335
|
+
precision highp float;
|
|
336
|
+
uniform sampler2D uTexture;
|
|
337
|
+
uniform float uMatrix[81];
|
|
338
|
+
uniform float uStepW;
|
|
339
|
+
uniform float uStepH;
|
|
340
|
+
varying vec2 vTexCoord;
|
|
341
|
+
void main() {
|
|
342
|
+
vec4 color = vec4(0, 0, 0, 1);
|
|
343
|
+
for (float h = 0.0; h < 9.0; h+=1.0) {
|
|
344
|
+
for (float w = 0.0; w < 9.0; w+=1.0) {
|
|
345
|
+
vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));
|
|
346
|
+
color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
float alpha = texture2D(uTexture, vTexCoord).a;
|
|
350
|
+
gl_FragColor = color;
|
|
351
|
+
gl_FragColor.a = alpha;
|
|
352
|
+
}
|
|
353
|
+
`},ei=class extends W{getCacheKey(){return`${this.type}_${Math.sqrt(this.matrix.length)}_${+!!this.opaque}`}getFragmentSource(){return Dc[this.getCacheKey()]}applyTo2d(i){let t=i.imageData,e=t.data,r=this.matrix,s=Math.round(Math.sqrt(r.length)),n=Math.floor(s/2),o=t.width,a=t.height,l=i.ctx.createImageData(o,a),h=l.data,c=+!!this.opaque,u,d,g,p,f,v,x,b,_,C,S,k,T;for(S=0;S<a;S++)for(C=0;C<o;C++){for(f=4*(S*o+C),u=0,d=0,g=0,p=0,T=0;T<s;T++)for(k=0;k<s;k++)x=S+T-n,v=C+k-n,x<0||x>=a||v<0||v>=o||(b=4*(x*o+v),_=r[T*s+k],u+=e[b]*_,d+=e[b+1]*_,g+=e[b+2]*_,c||(p+=e[b+3]*_));h[f]=u,h[f+1]=d,h[f+2]=g,h[f+3]=c?e[f+3]:p}i.imageData=l}sendUniformData(i,t){i.uniform1fv(t.uMatrix,this.matrix)}toObject(){return{...super.toObject(),opaque:this.opaque,matrix:[...this.matrix]}}};m(ei,"type","Convolute"),m(ei,"defaults",{opaque:!1,matrix:[0,0,0,0,1,0,0,0,0]}),m(ei,"uniformLocations",["uMatrix","uOpaque","uHalfSize","uSize"]),w.setClass(ei);var Ea="Gamma",ii=class extends W{getFragmentSource(){return`
|
|
354
|
+
precision highp float;
|
|
355
|
+
uniform sampler2D uTexture;
|
|
356
|
+
uniform vec3 uGamma;
|
|
357
|
+
varying vec2 vTexCoord;
|
|
358
|
+
void main() {
|
|
359
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
360
|
+
vec3 correction = (1.0 / uGamma);
|
|
361
|
+
color.r = pow(color.r, correction.r);
|
|
362
|
+
color.g = pow(color.g, correction.g);
|
|
363
|
+
color.b = pow(color.b, correction.b);
|
|
364
|
+
gl_FragColor = color;
|
|
365
|
+
gl_FragColor.rgb *= color.a;
|
|
366
|
+
}
|
|
367
|
+
`}constructor(i={}){super(i),this.gamma=i.gamma||this.constructor.defaults.gamma.concat()}applyTo2d({imageData:{data:i}}){let t=this.gamma,e=1/t[0],r=1/t[1],s=1/t[2];this.rgbValues||(this.rgbValues={r:new Uint8Array(256),g:new Uint8Array(256),b:new Uint8Array(256)});let n=this.rgbValues;for(let o=0;o<256;o++)n.r[o]=255*(o/255)**e,n.g[o]=255*(o/255)**r,n.b[o]=255*(o/255)**s;for(let o=0;o<i.length;o+=4)i[o]=n.r[i[o]],i[o+1]=n.g[i[o+1]],i[o+2]=n.b[i[o+2]]}sendUniformData(i,t){i.uniform3fv(t.uGamma,this.gamma)}isNeutralState(){let{gamma:i}=this;return i[0]===1&&i[1]===1&&i[2]===1}toObject(){return{type:Ea,gamma:this.gamma.concat()}}};m(ii,"type",Ea),m(ii,"defaults",{gamma:[1,1,1]}),m(ii,"uniformLocations",["uGamma"]),w.setClass(ii);var Ec={average:`
|
|
368
|
+
precision highp float;
|
|
369
|
+
uniform sampler2D uTexture;
|
|
370
|
+
varying vec2 vTexCoord;
|
|
371
|
+
void main() {
|
|
372
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
373
|
+
float average = (color.r + color.b + color.g) / 3.0;
|
|
374
|
+
gl_FragColor = vec4(average, average, average, color.a);
|
|
375
|
+
}
|
|
376
|
+
`,lightness:`
|
|
377
|
+
precision highp float;
|
|
378
|
+
uniform sampler2D uTexture;
|
|
379
|
+
uniform int uMode;
|
|
380
|
+
varying vec2 vTexCoord;
|
|
381
|
+
void main() {
|
|
382
|
+
vec4 col = texture2D(uTexture, vTexCoord);
|
|
383
|
+
float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;
|
|
384
|
+
gl_FragColor = vec4(average, average, average, col.a);
|
|
385
|
+
}
|
|
386
|
+
`,luminosity:`
|
|
387
|
+
precision highp float;
|
|
388
|
+
uniform sampler2D uTexture;
|
|
389
|
+
uniform int uMode;
|
|
390
|
+
varying vec2 vTexCoord;
|
|
391
|
+
void main() {
|
|
392
|
+
vec4 col = texture2D(uTexture, vTexCoord);
|
|
393
|
+
float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;
|
|
394
|
+
gl_FragColor = vec4(average, average, average, col.a);
|
|
395
|
+
}
|
|
396
|
+
`},ri=class extends W{applyTo2d({imageData:{data:i}}){for(let t,e=0;e<i.length;e+=4){let r=i[e],s=i[e+1],n=i[e+2];switch(this.mode){case"average":t=(r+s+n)/3;break;case"lightness":t=(Math.min(r,s,n)+Math.max(r,s,n))/2;break;case"luminosity":t=.21*r+.72*s+.07*n}i[e+2]=i[e+1]=i[e]=t}}getCacheKey(){return`${this.type}_${this.mode}`}getFragmentSource(){return Ec[this.mode]}sendUniformData(i,t){i.uniform1i(t.uMode,1)}isNeutralState(){return!1}};m(ri,"type","Grayscale"),m(ri,"defaults",{mode:"average"}),m(ri,"uniformLocations",["uMode"]),w.setClass(ri);var Ac={...Da,rotation:0},zi=class extends ee{calculateMatrix(){let i=this.rotation*Math.PI,t=yt(i),e=xt(i),r=1/3,s=Math.sqrt(r)*e,n=1-t;this.matrix=[t+n/3,r*n-s,r*n+s,0,0,r*n+s,t+r*n,r*n-s,0,0,r*n-s,r*n+s,t+r*n,0,0,0,0,0,1,0]}isNeutralState(){return this.rotation===0}applyTo(i){this.calculateMatrix(),super.applyTo(i)}toObject(){return{type:this.type,rotation:this.rotation}}};m(zi,"type","HueRotation"),m(zi,"defaults",Ac),w.setClass(zi);var si=class extends W{applyTo2d({imageData:{data:i}}){for(let t=0;t<i.length;t+=4)i[t]=255-i[t],i[t+1]=255-i[t+1],i[t+2]=255-i[t+2],this.alpha&&(i[t+3]=255-i[t+3])}getFragmentSource(){return`
|
|
397
|
+
precision highp float;
|
|
398
|
+
uniform sampler2D uTexture;
|
|
399
|
+
uniform int uInvert;
|
|
400
|
+
uniform int uAlpha;
|
|
401
|
+
varying vec2 vTexCoord;
|
|
402
|
+
void main() {
|
|
403
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
404
|
+
if (uInvert == 1) {
|
|
405
|
+
if (uAlpha == 1) {
|
|
406
|
+
gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,1.0 -color.a);
|
|
407
|
+
} else {
|
|
408
|
+
gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);
|
|
409
|
+
}
|
|
410
|
+
} else {
|
|
411
|
+
gl_FragColor = color;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
`}isNeutralState(){return!this.invert}sendUniformData(i,t){i.uniform1i(t.uInvert,Number(this.invert)),i.uniform1i(t.uAlpha,Number(this.alpha))}};m(si,"type","Invert"),m(si,"defaults",{alpha:!1,invert:!0}),m(si,"uniformLocations",["uInvert","uAlpha"]),w.setClass(si);var ni=class extends W{getFragmentSource(){return`
|
|
415
|
+
precision highp float;
|
|
416
|
+
uniform sampler2D uTexture;
|
|
417
|
+
uniform float uStepH;
|
|
418
|
+
uniform float uNoise;
|
|
419
|
+
uniform float uSeed;
|
|
420
|
+
varying vec2 vTexCoord;
|
|
421
|
+
float rand(vec2 co, float seed, float vScale) {
|
|
422
|
+
return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);
|
|
423
|
+
}
|
|
424
|
+
void main() {
|
|
425
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
426
|
+
color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;
|
|
427
|
+
gl_FragColor = color;
|
|
428
|
+
}
|
|
429
|
+
`}applyTo2d({imageData:{data:i}}){let t=this.noise;for(let e=0;e<i.length;e+=4){let r=(.5-Math.random())*t;i[e]+=r,i[e+1]+=r,i[e+2]+=r}}sendUniformData(i,t){i.uniform1f(t.uNoise,this.noise/255),i.uniform1f(t.uSeed,Math.random())}isNeutralState(){return this.noise===0}};m(ni,"type","Noise"),m(ni,"defaults",{noise:0}),m(ni,"uniformLocations",["uNoise","uSeed"]),w.setClass(ni);var oi=class extends W{applyTo2d({imageData:{data:i,width:t,height:e}}){for(let r=0;r<e;r+=this.blocksize)for(let s=0;s<t;s+=this.blocksize){let n=4*r*t+4*s,o=i[n],a=i[n+1],l=i[n+2],h=i[n+3];for(let c=r;c<Math.min(r+this.blocksize,e);c++)for(let u=s;u<Math.min(s+this.blocksize,t);u++){let d=4*c*t+4*u;i[d]=o,i[d+1]=a,i[d+2]=l,i[d+3]=h}}}isNeutralState(){return this.blocksize===1}getFragmentSource(){return`
|
|
430
|
+
precision highp float;
|
|
431
|
+
uniform sampler2D uTexture;
|
|
432
|
+
uniform float uBlocksize;
|
|
433
|
+
uniform float uStepW;
|
|
434
|
+
uniform float uStepH;
|
|
435
|
+
varying vec2 vTexCoord;
|
|
436
|
+
void main() {
|
|
437
|
+
float blockW = uBlocksize * uStepW;
|
|
438
|
+
float blockH = uBlocksize * uStepH;
|
|
439
|
+
int posX = int(vTexCoord.x / blockW);
|
|
440
|
+
int posY = int(vTexCoord.y / blockH);
|
|
441
|
+
float fposX = float(posX);
|
|
442
|
+
float fposY = float(posY);
|
|
443
|
+
vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);
|
|
444
|
+
vec4 color = texture2D(uTexture, squareCoords);
|
|
445
|
+
gl_FragColor = color;
|
|
446
|
+
}
|
|
447
|
+
`}sendUniformData(i,t){i.uniform1f(t.uBlocksize,this.blocksize)}};m(oi,"type","Pixelate"),m(oi,"defaults",{blocksize:4}),m(oi,"uniformLocations",["uBlocksize"]),w.setClass(oi);var ai=class extends W{getFragmentSource(){return`
|
|
448
|
+
precision highp float;
|
|
449
|
+
uniform sampler2D uTexture;
|
|
450
|
+
uniform vec4 uLow;
|
|
451
|
+
uniform vec4 uHigh;
|
|
452
|
+
varying vec2 vTexCoord;
|
|
453
|
+
void main() {
|
|
454
|
+
gl_FragColor = texture2D(uTexture, vTexCoord);
|
|
455
|
+
if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {
|
|
456
|
+
gl_FragColor.a = 0.0;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
`}applyTo2d({imageData:{data:i}}){let t=255*this.distance,e=new lt(this.color).getSource(),r=[e[0]-t,e[1]-t,e[2]-t],s=[e[0]+t,e[1]+t,e[2]+t];for(let n=0;n<i.length;n+=4){let o=i[n],a=i[n+1],l=i[n+2];o>r[0]&&a>r[1]&&l>r[2]&&o<s[0]&&a<s[1]&&l<s[2]&&(i[n+3]=0)}}sendUniformData(i,t){let e=new lt(this.color).getSource(),r=this.distance,s=[0+e[0]/255-r,0+e[1]/255-r,0+e[2]/255-r,1],n=[e[0]/255+r,e[1]/255+r,e[2]/255+r,1];i.uniform4fv(t.uLow,s),i.uniform4fv(t.uHigh,n)}};m(ai,"type","RemoveColor"),m(ai,"defaults",{color:"#FFFFFF",distance:.02,useAlpha:!1}),m(ai,"uniformLocations",["uLow","uHigh"]),w.setClass(ai);var li=class extends W{sendUniformData(i,t){i.uniform2fv(t.uDelta,this.horizontal?[1/this.width,0]:[0,1/this.height]),i.uniform1fv(t.uTaps,this.taps)}getFilterWindow(){let i=this.tempScale;return Math.ceil(this.lanczosLobes/i)}getCacheKey(){let i=this.getFilterWindow();return`${this.type}_${i}`}getFragmentSource(){let i=this.getFilterWindow();return this.generateShader(i)}getTaps(){let i=this.lanczosCreate(this.lanczosLobes),t=this.tempScale,e=this.getFilterWindow(),r=Array(e);for(let s=1;s<=e;s++)r[s-1]=i(s*t);return r}generateShader(i){let t=Array(i);for(let e=1;e<=i;e++)t[e-1]=`${e}.0 * uDelta`;return`
|
|
460
|
+
precision highp float;
|
|
461
|
+
uniform sampler2D uTexture;
|
|
462
|
+
uniform vec2 uDelta;
|
|
463
|
+
varying vec2 vTexCoord;
|
|
464
|
+
uniform float uTaps[${i}];
|
|
465
|
+
void main() {
|
|
466
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
467
|
+
float sum = 1.0;
|
|
468
|
+
${t.map((e,r)=>`
|
|
469
|
+
color += texture2D(uTexture, vTexCoord + ${e}) * uTaps[${r}] + texture2D(uTexture, vTexCoord - ${e}) * uTaps[${r}];
|
|
470
|
+
sum += 2.0 * uTaps[${r}];
|
|
471
|
+
`).join(`
|
|
472
|
+
`)}
|
|
473
|
+
gl_FragColor = color / sum;
|
|
474
|
+
}
|
|
475
|
+
`}applyToForWebgl(i){i.passes++,this.width=i.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=i.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),i.destinationWidth=this.dW,super.applyTo(i),i.sourceWidth=i.destinationWidth,this.height=i.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),i.destinationHeight=this.dH,super.applyTo(i),i.sourceHeight=i.destinationHeight}applyTo(i){fr(i)?this.applyToForWebgl(i):this.applyTo2d(i)}isNeutralState(){return this.scaleX===1&&this.scaleY===1}lanczosCreate(i){return t=>{if(t>=i||t<=-i)return 0;if(t<11920929e-14&&t>-11920929e-14)return 1;let e=(t*=Math.PI)/i;return Math.sin(t)/t*Math.sin(e)/e}}applyTo2d(i){let t=i.imageData,e=this.scaleX,r=this.scaleY;this.rcpScaleX=1/e,this.rcpScaleY=1/r;let s=t.width,n=t.height,o=Math.round(s*e),a=Math.round(n*r),l;l=this.resizeType==="sliceHack"?this.sliceByTwo(i,s,n,o,a):this.resizeType==="hermite"?this.hermiteFastResize(i,s,n,o,a):this.resizeType==="bilinear"?this.bilinearFiltering(i,s,n,o,a):this.resizeType==="lanczos"?this.lanczosResize(i,s,n,o,a):new ImageData(o,a),i.imageData=l}sliceByTwo(i,t,e,r,s){let n=i.imageData,o=.5,a=!1,l=!1,h=t*o,c=e*o,u=i.filterBackend.resources,d=0,g=0,p=t,f=0;u.sliceByTwo||(u.sliceByTwo=kt());let v=u.sliceByTwo;(v.width<1.5*t||v.height<e)&&(v.width=1.5*t,v.height=e);let x=v.getContext("2d");for(x.clearRect(0,0,1.5*t,e),x.putImageData(n,0,0),r=Math.floor(r),s=Math.floor(s);!a||!l;)t=h,e=c,r<Math.floor(h*o)?h=Math.floor(h*o):(h=r,a=!0),s<Math.floor(c*o)?c=Math.floor(c*o):(c=s,l=!0),x.drawImage(v,d,g,t,e,p,f,h,c),d=p,g=f,f+=c;return x.getImageData(d,g,r,s)}lanczosResize(i,t,e,r,s){let n=i.imageData.data,o=i.ctx.createImageData(r,s),a=o.data,l=this.lanczosCreate(this.lanczosLobes),h=this.rcpScaleX,c=this.rcpScaleY,u=2/this.rcpScaleX,d=2/this.rcpScaleY,g=Math.ceil(h*this.lanczosLobes/2),p=Math.ceil(c*this.lanczosLobes/2),f={},v={x:0,y:0},x={x:0,y:0};return(function b(_){let C,S,k,T,O,P,A,D,E,j,B;for(v.x=(_+.5)*h,x.x=Math.floor(v.x),C=0;C<s;C++){for(v.y=(C+.5)*c,x.y=Math.floor(v.y),O=0,P=0,A=0,D=0,E=0,S=x.x-g;S<=x.x+g;S++)if(!(S<0||S>=t)){j=Math.floor(1e3*Math.abs(S-v.x)),f[j]||(f[j]={});for(let H=x.y-p;H<=x.y+p;H++)H<0||H>=e||(B=Math.floor(1e3*Math.abs(H-v.y)),f[j][B]||(f[j][B]=l(Math.sqrt((j*u)**2+(B*d)**2)/1e3)),k=f[j][B],k>0&&(T=4*(H*t+S),O+=k,P+=k*n[T],A+=k*n[T+1],D+=k*n[T+2],E+=k*n[T+3]))}T=4*(C*r+_),a[T]=P/O,a[T+1]=A/O,a[T+2]=D/O,a[T+3]=E/O}return++_<r?b(_):o})(0)}bilinearFiltering(i,t,e,r,s){let n,o,a,l,h,c,u,d,g,p,f,v,x,b=0,_=this.rcpScaleX,C=this.rcpScaleY,S=4*(t-1),k=i.imageData.data,T=i.ctx.createImageData(r,s),O=T.data;for(u=0;u<s;u++)for(d=0;d<r;d++)for(h=Math.floor(_*d),c=Math.floor(C*u),g=_*d-h,p=C*u-c,x=4*(c*t+h),f=0;f<4;f++)n=k[x+f],o=k[x+4+f],a=k[x+S+f],l=k[x+S+4+f],v=n*(1-g)*(1-p)+o*g*(1-p)+a*p*(1-g)+l*g*p,O[b++]=v;return T}hermiteFastResize(i,t,e,r,s){let n=this.rcpScaleX,o=this.rcpScaleY,a=Math.ceil(n/2),l=Math.ceil(o/2),h=i.imageData.data,c=i.ctx.createImageData(r,s),u=c.data;for(let d=0;d<s;d++)for(let g=0;g<r;g++){let p=4*(g+d*r),f,v=0,x=0,b=0,_=0,C=0,S=0,k=(d+.5)*o;for(let T=Math.floor(d*o);T<(d+1)*o;T++){let O=Math.abs(k-(T+.5))/l,P=(g+.5)*n,A=O*O;for(let D=Math.floor(g*n);D<(g+1)*n;D++){let E=Math.abs(P-(D+.5))/a,j=Math.sqrt(A+E*E);j>1&&j<-1||(f=2*j*j*j-3*j*j+1,f>0&&(E=4*(D+T*t),S+=f*h[E+3],x+=f,h[E+3]<255&&(f=f*h[E+3]/250),b+=f*h[E],_+=f*h[E+1],C+=f*h[E+2],v+=f))}}u[p]=b/v,u[p+1]=_/v,u[p+2]=C/v,u[p+3]=S/x}return c}};m(li,"type","Resize"),m(li,"defaults",{resizeType:"hermite",scaleX:1,scaleY:1,lanczosLobes:3}),m(li,"uniformLocations",["uDelta","uTaps"]),w.setClass(li);var hi=class extends W{getFragmentSource(){return`
|
|
476
|
+
precision highp float;
|
|
477
|
+
uniform sampler2D uTexture;
|
|
478
|
+
uniform float uSaturation;
|
|
479
|
+
varying vec2 vTexCoord;
|
|
480
|
+
void main() {
|
|
481
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
482
|
+
float rgMax = max(color.r, color.g);
|
|
483
|
+
float rgbMax = max(rgMax, color.b);
|
|
484
|
+
color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;
|
|
485
|
+
color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;
|
|
486
|
+
color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;
|
|
487
|
+
gl_FragColor = color;
|
|
488
|
+
}
|
|
489
|
+
`}applyTo2d({imageData:{data:i}}){let t=-this.saturation;for(let e=0;e<i.length;e+=4){let r=i[e],s=i[e+1],n=i[e+2],o=Math.max(r,s,n);i[e]+=o===r?0:(o-r)*t,i[e+1]+=o===s?0:(o-s)*t,i[e+2]+=o===n?0:(o-n)*t}}sendUniformData(i,t){i.uniform1f(t.uSaturation,-this.saturation)}isNeutralState(){return this.saturation===0}};m(hi,"type","Saturation"),m(hi,"defaults",{saturation:0}),m(hi,"uniformLocations",["uSaturation"]),w.setClass(hi);var ci=class extends W{getFragmentSource(){return`
|
|
490
|
+
precision highp float;
|
|
491
|
+
uniform sampler2D uTexture;
|
|
492
|
+
uniform float uVibrance;
|
|
493
|
+
varying vec2 vTexCoord;
|
|
494
|
+
void main() {
|
|
495
|
+
vec4 color = texture2D(uTexture, vTexCoord);
|
|
496
|
+
float max = max(color.r, max(color.g, color.b));
|
|
497
|
+
float avg = (color.r + color.g + color.b) / 3.0;
|
|
498
|
+
float amt = (abs(max - avg) * 2.0) * uVibrance;
|
|
499
|
+
color.r += max != color.r ? (max - color.r) * amt : 0.00;
|
|
500
|
+
color.g += max != color.g ? (max - color.g) * amt : 0.00;
|
|
501
|
+
color.b += max != color.b ? (max - color.b) * amt : 0.00;
|
|
502
|
+
gl_FragColor = color;
|
|
503
|
+
}
|
|
504
|
+
`}applyTo2d({imageData:{data:i}}){let t=-this.vibrance;for(let e=0;e<i.length;e+=4){let r=i[e],s=i[e+1],n=i[e+2],o=Math.max(r,s,n),a=(r+s+n)/3,l=2*Math.abs(o-a)/255*t;i[e]+=o===r?0:(o-r)*l,i[e+1]+=o===s?0:(o-s)*l,i[e+2]+=o===n?0:(o-n)*l}}sendUniformData(i,t){i.uniform1f(t.uVibrance,-this.vibrance)}isNeutralState(){return this.vibrance===0}};m(ci,"type","Vibrance"),m(ci,"defaults",{vibrance:0}),m(ci,"uniformLocations",["uVibrance"]),w.setClass(ci);var Ti=_i({BaseFilter:()=>W,BlackWhite:()=>Mc,BlendColor:()=>Ke,BlendImage:()=>Je,Blur:()=>Ze,Brightness:()=>Qe,Brownie:()=>Sc,ColorMatrix:()=>ee,Composed:()=>gs,Contrast:()=>ti,Convolute:()=>ei,Gamma:()=>ii,Grayscale:()=>ri,HueRotation:()=>zi,Invert:()=>si,Kodachrome:()=>Tc,Noise:()=>ni,Pixelate:()=>oi,Polaroid:()=>kc,RemoveColor:()=>ai,Resize:()=>li,Saturation:()=>hi,Sepia:()=>Pc,Technicolor:()=>Oc,Vibrance:()=>ci,Vintage:()=>wc});var Oe=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 r=s=>{this.off(t,r),e(s)};this.on(t,r)}emit(t,e){let r=this.listeners.get(t);if(r)for(let s of r)s(e)}removeAllListeners(t){t?this.listeners.delete(t):this.listeners.clear()}};var Hs=Na("crypto");var Aa="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var jc=128,le,ke;function Fc(i){if(i<0||i>1024)throw new RangeError("Wrong ID size");!le||le.length<i?(le=Buffer.allocUnsafe(i*jc),Hs.webcrypto.getRandomValues(le),ke=0):ke+i>le.length&&(Hs.webcrypto.getRandomValues(le),ke=0),ke+=i}function ja(i=21){Fc(i|=0);let t="";for(let e=ke-i;e<ke;e++)t+=Aa[le[e]&63];return t}var qt=()=>ja(12);var Oi=class{id;type;name;visible;locked;opacity;meta;fabricObject;constructor(t,e,r,s){this.id=s??qt(),this.type=t,this.name=r??`${t}-${this.id.slice(0,4)}`,this.visible=!0,this.locked=!1,this.opacity=1,this.meta={},this.fabricObject=e,this.fabricObject._layerId=this.id}hasMeta(){return Object.keys(this.meta).length>0}toData(){return{id:this.id,type:this.type,name:this.name,visible:this.visible,locked:this.locked,opacity:this.opacity,...this.hasMeta()?{meta:this.meta}:{}}}serialize(){return{...this.toData(),fabricObject:this.fabricObject.toObject()}}},Pe=class{constructor(t,e){this.canvas=t;this.events=e}canvas;events;layers=[];onPropertyChanged;setHistoryCallback(t){this.onPropertyChanged=t}add(t,e,r,s){let n=new Oi(t,e,r,s);return this.layers.push(n),this.canvas.add(e),this.events.emit("layer:added",{layer:n.toData()}),this.emitChanged(),n}remove(t){let e=this.layers.findIndex(s=>s.id===t);if(e===-1)return!1;let r=this.layers[e];return this.canvas.remove(r.fabricObject),this.layers.splice(e,1),this.events.emit("layer:removed",{layerId:t}),this.emitChanged(),this.onPropertyChanged?.(),!0}replaceObject(t,e){let r=this.get(t);if(!r||r.fabricObject===e)return!1;let s=r.fabricObject,n=this.canvas.getObjects().indexOf(s),o=this.canvas.getActiveObject()===s;return this.canvas.remove(s),r.fabricObject=e,e._layerId=t,e.set({visible:r.visible,opacity:r.opacity,selectable:!r.locked,evented:!r.locked}),this.canvas.insertAt(Math.max(0,n),e),o&&this.canvas.setActiveObject(e),this.canvas.requestRenderAll(),this.events.emit("layer:modified",{layerId:t}),this.emitChanged(),this.onPropertyChanged?.(),!0}reorder(t,e){let r=this.layers.findIndex(o=>o.id===t);if(r===-1||!Number.isFinite(e))return!1;let s=Math.max(0,Math.min(this.layers.length-1,Math.round(e)));if(r===s)return!1;let[n]=this.layers.splice(r,1);return this.layers.splice(s,0,n),this.layers.forEach((o,a)=>{this.canvas.moveObjectTo(o.fabricObject,a)}),this.events.emit("layer:reordered",{layerIds:this.layers.map(o=>o.id)}),this.emitChanged(),this.onPropertyChanged?.(),!0}select(t){if(t===null)this.canvas.discardActiveObject();else{let r=this.get(t);r&&this.canvas.setActiveObject(r.fabricObject)}this.canvas.requestRenderAll(),this.events.emit("layer:selected",{layerId:t});let e=t&&this.get(t)?[t]:[];this.events.emit("selection:changed",{selected:e})}get(t){return this.layers.find(e=>e.id===t)}getAll(){return[...this.layers]}findByObject(t){let e=t._layerId;return e?this.get(e):this.layers.find(r=>r.fabricObject===t)}setVisibility(t,e){let r=this.get(t);r&&r.visible!==e&&(r.visible=e,r.fabricObject.visible=e,this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.())}setLocked(t,e){let r=this.get(t);r&&r.locked!==e&&(r.locked=e,r.fabricObject.selectable=!e,r.fabricObject.evented=!e,this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.())}setOpacity(t,e){let r=this.get(t);if(!r||!Number.isFinite(e))return;let s=Math.max(0,Math.min(1,e));r.opacity!==s&&(r.opacity=s,r.fabricObject.opacity=s,this.canvas.requestRenderAll(),this.emitChanged(),this.onPropertyChanged?.())}setName(t,e){let r=this.get(t);r&&r.name!==e&&(r.name=e,this.emitChanged(),this.onPropertyChanged?.())}clear(){for(let t of this.layers)this.canvas.remove(t.fabricObject);this.layers=[],this.emitChanged()}count(){return this.layers.length}emitChanged(){this.events.emit("layers:changed",{layers:this.layers.map(t=>t.toData())})}};var Me=class{undoStack=[];redoStack=[];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();if(this.undoStack.at(-1)===t){this.emitChanged();return}for(this.undoStack.push(t);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.getState(),e=this.undoStack.at(-1);if(!e)return;let r=t===e;if(r&&this.undoStack.length<2)return;let s=r?this.undoStack[this.undoStack.length-2]:e;this.paused=!0;try{await this.restoreState(s),r&&this.undoStack.pop(),this.redoStack.push(t),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(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.emitChanged()}getSnapshotBytes(){return this.snapshotBytes()}cancelPending(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}dispose(){this.cancelPending(),this.transactionDepth=0,this.transactionDirty=!1}emitChanged(){this.events.emit("history:changed",{canUndo:this.canUndo(),canRedo:this.canRedo()})}snapshotBytes(){return[...this.undoStack,...this.redoStack].reduce((t,e)=>t+e.length*2,0)}trimToBudget(){for(;this.undoStack.length>1&&this.snapshotBytes()>this.maxBytes;)this.undoStack.shift();for(;this.redoStack.length>1&&this.snapshotBytes()>this.maxBytes;)this.redoStack.shift()}};var Lc="#22c55e",De=class{constructor(t,e){this.canvas=t;this.events=e;this.onMoving=r=>this.handleMoving(r.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(),r=this.canvas.getWidth(),s=this.canvas.getHeight(),{xs:n,ys:o}=Ic(this.canvas,t,r,s);this.guides=[];let a=Fa([e.left,e.left+e.width/2,e.left+e.width],n,this.threshold);a!==null&&(t.set("left",(t.left??0)+a.delta),this.guides.push({x:a.line}));let l=Fa([e.top,e.top+e.height/2,e.top+e.height],o,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(),r=this.canvas.getWidth(),s=this.canvas.getHeight();t.save(),t.setTransform(e,0,0,e,0,0),t.lineWidth=1,t.strokeStyle=Lc,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(r,n.y));t.stroke(),t.restore()}clearGuides(){this.guides.length!==0&&(this.guides=[],this.canvas.clearContext(this.canvas.contextTop))}};function Ic(i,t,e,r){let s=[0,e/2,e],n=[0,r/2,r];for(let o of i.getObjects()){if(o===t||!o.visible)continue;o.setCoords();let a=o.getBoundingRect();s.push(a.left,a.left+a.width/2,a.left+a.width),n.push(a.top,a.top+a.height/2,a.top+a.height)}return{xs:s,ys:n}}function Fa(i,t,e){let r=null;for(let s of i)for(let n of t){let o=Math.abs(s-n);o<=e&&(r===null||o<r.dist)&&(r={delta:n-s,line:n,dist:o})}return r?{delta:r.delta,line:r.line}:null}function bt(i,t,e){return Math.min(e,Math.max(t,i))}function q(i){return Math.round(i*100)/100}var Ee=class{constructor(t,e,r){this.canvas=t;this.history=e;this.events=r;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,r=e.angle??0;r&&e.rotate(0),e.setCoords();let s=e.getBoundingRect(),n=new Dt({left:s.left,top:s.top,width:s.width,height:s.height,originX:"left",originY:"top",fill:"rgba(34,197,94,0.12)",stroke:La,strokeWidth:1,strokeDashArray:[4,4],strokeUniform:!0,lockRotation:!0,cornerColor:La,transparentCorners:!1});n.setControlsVisibility({mtr:!1});let o=e.selectable??!0,a=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:o,prevEvented:a,prevAngle:r},this.events.emit("crop:changed",{active:!0,layerId:t.id})}apply(){let t=this.session;if(!t)return;let{image:e,rect:r}=t;r.setCoords(),e.setCoords();let s=e.scaleX??1,n=e.scaleY??1,o=e.left??0,a=e.top??0,l=e.getElement(),h=l.naturalWidth||e.width||0,c=l.naturalHeight||e.height||0,u=(e.cropX??0)+(r.left-o)/s,d=(e.cropY??0)+(r.top-a)/n,g=r.getScaledWidth()/s,p=r.getScaledHeight()/n;u=bt(u,0,Math.max(0,h-1)),d=bt(d,0,Math.max(0,c-1)),g=bt(g,1,h-u),p=bt(p,1,c-d),e.set({cropX:u,cropY:d,width:g,height:p,left:o+(u-(e.cropX??0))*s,top:a+(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}))}},La="#22c55e";var Xa=200,Ae=class{constructor(t,e,r,s,n){this.canvas=t;this.layers=e;this.history=r;this.events=s;this.sourceResolver=n}canvas;layers;history;events;sourceResolver;chains=new Map;isPattern(t){return!!this.layers.get(t)?.meta.pattern}getConfig(t){return this.layers.get(t)?.meta.pattern?.config??null}apply(t,e){return this.enqueue(t,async()=>{let r=this.layers.get(t);if(!r||r.type!=="image")return;let s=r.fabricObject,n=!r.meta.pattern;if(r.meta.pattern)r.meta.pattern.config=e;else{let o=s.clipPath;r.meta.pattern={config:e,originalSrc:Rc(s)??s.getSrc(),originalClip:o?o.toObject():null,originalLocks:Gs(s),original:{left:s.left??0,top:s.top??0,scaleX:s.scaleX??1,scaleY:s.scaleY??1,width:s.width??0,height:s.height??0,angle:s.angle??0,cropX:s.cropX??0,cropY:s.cropY??0}}}try{await this.renderLayer(r)}catch(o){throw n&&delete r.meta.pattern,o}this.history.save()}).catch(r=>{throw this.events.emit("error",{message:"Failed to apply image pattern",error:r}),r})}repinAll(){let t=this.canvas.getWidth(),e=this.canvas.getHeight(),r=!1;for(let s of this.layers.getAll()){if(!s.meta.pattern||s.type!=="image")continue;let n=s.fabricObject;n.set({left:0,top:0,angle:0,scaleX:t/(n.width||t),scaleY:e/(n.height||e)}),mr(n),n.setCoords(),r=!0}r&&this.canvas.requestRenderAll()}disable(t){return this.enqueue(t,async()=>{let e=this.layers.get(t),r=e?.meta.pattern;if(!e||!r)return;let s=e.fabricObject;await s.setSrc(r.originalSrc),s.set({left:r.original.left,top:r.original.top,scaleX:r.original.scaleX,scaleY:r.original.scaleY,width:r.original.width,height:r.original.height,cropX:r.original.cropX,cropY:r.original.cropY,angle:r.original.angle}),s.clipPath=r.originalClip?(await Ut.enlivenObjects([r.originalClip]))[0]:void 0,Ns(s,r.originalLocks),s.setCoords(),delete e.meta.pattern,this.canvas.requestRenderAll(),this.history.save()}).catch(e=>{throw this.events.emit("error",{message:"Failed to clear image pattern",error:e}),e})}enqueue(t,e){let s=(this.chains.get(t)??Promise.resolve()).then(e,e);return this.chains.set(t,s.catch(()=>{})),s}async renderLayer(t){let e=t.meta.pattern;if(!e)return;let r=t.fabricObject,s=this.canvas.getWidth(),n=this.canvas.getHeight(),o=Math.max(1,e.config.scale??100)/100,a=Math.sqrt(s*s+n*n),l=Math.max(2,a/Xa),h=Math.max(l,e.original.width*e.original.scaleX*o),c=Math.max(l,e.original.height*e.original.scaleY*o),u=await qs(e.originalSrc,e.config,s,n,h,c,this.sourceResolver);await r.setSrc(u),r.set({left:0,top:0,scaleX:1,scaleY:1,width:s,height:n,cropX:0,cropY:0,angle:0}),r.clipPath=void 0,mr(r),r.setCoords(),this.canvas.requestRenderAll()}};function Gs(i){return{lockMovementX:i.lockMovementX??!1,lockMovementY:i.lockMovementY??!1,lockScalingX:i.lockScalingX??!1,lockScalingY:i.lockScalingY??!1,lockRotation:i.lockRotation??!1,hasControls:i.hasControls??!0}}function mr(i){i.set({lockMovementX:!0,lockMovementY:!0,lockScalingX:!0,lockScalingY:!0,lockRotation:!0,hasControls:!1})}function Ns(i,t){i.set(t??{lockMovementX:!1,lockMovementY:!1,lockScalingX:!1,lockScalingY:!1,lockRotation:!1,hasControls:!0})}function Rc(i){try{let t=i.getElement(),e=t.naturalWidth||t.width,r=t.naturalHeight||t.height;if(!e||!r)return null;let s=document.createElement("canvas");s.width=e,s.height=r;let n=s.getContext("2d");return n?(n.drawImage(t,0,0),s.toDataURL("image/png")):null}catch{return null}}var Bc=16,Pt=new Map;function Us(i,t){let e=Pt.get(i);if(e)return Pt.delete(i),Pt.set(i,e),e;let r=Ia(i).catch(async s=>{if(!t)throw s;let n=await t(i);if(!n||n===i)throw new Error("Pattern source resolver did not return a usable alternate URL",{cause:s});return Ia(n)});if(r.catch(()=>{Pt.get(i)===r&&Pt.delete(i)}),Pt.set(i,r),Pt.size>Bc){let s=Pt.keys().next().value;s!==void 0&&Pt.delete(s)}return r}function Ia(i){return new Promise((t,e)=>{let r=new Image;r.crossOrigin="anonymous",r.onload=()=>t(r),r.onerror=()=>e(new Error(`Failed to load pattern source: ${i}`)),r.src=i})}function vr(){Pt.clear()}async function qs(i,t,e,r,s,n,o){let a=await Us(i,o),l=document.createElement("canvas");l.width=Math.max(1,Math.round(e)),l.height=Math.max(1,Math.round(r));let h=l.getContext("2d");return h&&Js(h,a,t,e,r,s,n),l.toDataURL("image/png")}function Ks(i,t,e,r,s){let n=Math.sqrt(t*t+e*e),o=Math.max(1,n/Xa),a=Math.max(o,r*(1+i.horizontalSpacing/100)),l=Math.max(o,s*(1+i.verticalSpacing/100)),h=Math.ceil(n/a)+2,c=Math.ceil(n/l)+2,u=Math.ceil(h/2),d=Math.ceil(c/2),g=a*(Ra(i.offsetX)/100),p=l*(Ra(i.offsetY)/100),f=[];for(let v=-d;v<=d;v++)for(let x=-u;x<=u;x++){let b=x*a+g,_=v*l+p;i.mode==="brick-horizontal"&&Ba(v)===1?b+=a*(i.horizontalOffset/100):i.mode==="brick-vertical"&&Ba(x)===1&&(_+=l*(i.horizontalOffset/100));let C=(x*i.rotationStepH+v*i.rotationStepV)*Math.PI/180;f.push({x:b,y:_,rotation:C})}return f}function Js(i,t,e,r,s,n,o){i.save(),i.translate(r/2,s/2),i.rotate(e.angle*Math.PI/180);for(let a of Ks(e,r,s,n,o))i.save(),i.translate(a.x,a.y),i.rotate(a.rotation),i.drawImage(t,-n/2,-o/2,n,o),i.restore();i.restore()}function Ra(i){return typeof i!="number"||!Number.isFinite(i)?0:Math.max(-100,Math.min(100,i))}function Ba(i){return(i%2+2)%2}var je=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 Xc=/^(?:#[\da-f]{3,8}|(?:rgb|hsl)a?\([\d.%+\-\s,/]+\)|[a-z]+)$/i;function Fe(i,t=!1){if(typeof i!="string")return!1;let e=i.trim();return e?Xc.test(e):t}var $c="2.0.0";function yr(i){return{version:$c,canvas:{width:i.canvas.getWidth(),height:i.canvas.getHeight(),unit:i.units.getUnit(),dpi:i.units.getDpi()},layers:i.layers.getAll().map(t=>t.serialize()),background:i.getDesignBackground(),backgroundImage:i.getDesignBackgroundImage()?i.getDesignBackgroundImage().toObject():null,mockup:i.getMockup()}}async function xr(i,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&&!Fe(t.background,!0))throw new Error("Invalid editor background color");let r=await Promise.all(t.layers.map(async n=>({serialized:n,fabricObject:(await Ut.enlivenObjects([n.fabricObject]))[0]}))),s=t.backgroundImage?(await Ut.enlivenObjects([t.backgroundImage]))[0]:null;i.crop.cancel(),i.layers.clear(),t.canvas.unit&&i.units.setUnit(t.canvas.unit),t.canvas.dpi!==void 0&&i.units.setDpi(t.canvas.dpi),i.canvas.setDimensions({width:t.canvas.width,height:t.canvas.height}),t.background!==void 0&&i.setBackground(t.background),i.setBackgroundImageObject(s,!1),i.setMockup(t.mockup??null);for(let n of r)Yc(i,n.serialized,n.fabricObject);i.canvas.requestRenderAll()}function Yc(i,t,e){let r=i.layers.add(t.type,e,t.name,t.id);return t.meta&&(r.meta=t.meta),t.visible||i.layers.setVisibility(r.id,!1),t.locked&&i.layers.setLocked(r.id,!0),t.opacity!==1&&i.layers.setOpacity(r.id,t.opacity),r}function Zs(i,t,e,r,s){let n=Math.max(0,Math.min(r,i.left*t)),o=Math.max(0,Math.min(s,i.top*e)),a=Math.max(n,Math.min(r,(i.left+i.width)*t)),l=Math.max(o,Math.min(s,(i.top+i.height)*e));return{left:n,top:o,width:a-n,height:l-o}}function Qs(i,t,e,r){if(i<=0||t<=0||e<=0||r<=0)throw new Error("Cover dimensions must be positive");let s=Math.max(e/i,r/t),n=i*s,o=t*s;return{left:(e-n)/2,top:(r-o)/2,width:n,height:o}}function $a(i,t,e){let r=t==="jpeg"?"image/jpeg":`image/${t}`;return new Promise((s,n)=>{i.toBlob(o=>o?s(o):n(new Error(`Failed to export ${t}`)),r,e)})}async function br(i,t={}){let{multiplier:e=1,format:r="png",quality:s=1}=t,n=i.toCanvasElement(e);return $a(n,r,s)}async function _r(i,t,e={}){let{multiplier:r=1,format:s="png",quality:n=1}=e,o=i.toCanvasElement(r),a=o.ownerDocument.createElement("canvas");a.width=o.width,a.height=o.height;let l=a.getContext("2d");if(!l)throw new Error("2D canvas context is unavailable");let h=u=>new Promise((d,g)=>{let p=new Image;p.crossOrigin="anonymous",p.onload=()=>d(p),p.onerror=()=>g(new Error(`Failed to load mockup image: ${u}`)),p.src=u}),c=u=>{let d=Qs(u.naturalWidth||u.width,u.naturalHeight||u.height,a.width,a.height);l.drawImage(u,d.left,d.top,d.width,d.height)};if(c(await h(t.image)),l.save(),t.printArea&&t.clipToPrintArea!==!1){let u=Zs(t.printArea,a.width/i.getWidth(),a.height/i.getHeight(),a.width,a.height);l.beginPath(),l.rect(u.left,u.top,u.width,u.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(o,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()),$a(a,s,n)}function Cr(i){return i.toSVG()}function Sr(i,t="png",e=1){return i.toDataURL({format:t,multiplier:e})}function wr(i){return String(i).replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Tr(i){let t=new DOMParser().parseFromString(i,"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 r of[...e.attributes]){let s=r.name.toLowerCase(),n=r.value.trim().toLowerCase(),o=s==="href"||s==="xlink:href"||s==="src",a=n.startsWith("#")||/^data:image\/(?:png|jpeg|webp|gif);base64,/.test(n);(s.startsWith("on")||o&&!a||/url\s*\(/.test(n)&&!/url\s*\(\s*['"]?#/.test(n)||/(?:javascript:|expression\s*\()/.test(n))&&e.removeAttribute(r.name)}}),new XMLSerializer().serializeToString(t.documentElement)}function Wc(i){return/^(?:url|local)\(/.test(i.trim())?i:`url(${JSON.stringify(i)})`}function Vc(i){let t=i.split(/[?#]/)[0].toLowerCase();return t.endsWith(".woff2")?"font/woff2":t.endsWith(".woff")?"font/woff":t.endsWith(".otf")?"font/otf":"font/ttf"}function zc(i){let t=new Uint8Array(i),e="";for(let r=0;r<t.length;r+=32768)e+=String.fromCharCode(...t.subarray(r,r+32768));return btoa(e)}function Or(i){return JSON.stringify(i).replace(/[<>&]/g,t=>`\\${t.charCodeAt(0).toString(16)} `)}var Hc=/^(?:normal|bold|bolder|lighter|[1-9]\d{0,2}(?:\s+[1-9]\d{0,2})?)$/i,Gc=/^(?:normal|italic|oblique(?:\s+-?\d+(?:\.\d+)?deg)?)$/i,Nc=/^(?:auto|block|swap|fallback|optional)$/i;function tn(i,t,e){let r=i?.trim();return r&&t.test(r)?r:e}function Uc(i){let t=i.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 qc(i){let t=i.trim().match(/^local\(\s*(['"]?)([^)"'{};]*)\1\s*\)$/i);return t&&t[2].trim()||null}var Le=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 r=this.definitions.get(t);if(!r)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(r.family,Wc(r.source),{weight:r.weight,style:r.style,display:r.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 r=Uc(e.source),s;if(r&&!r.startsWith("data:")){let l=await fetch(r);if(!l.ok)throw new Error(`Failed to fetch font: ${r}`);let h=zc(await l.arrayBuffer()),c=l.headers.get("content-type")||Vc(r);s=`url(${Or(`data:${c};base64,${h}`)})`}else if(r)s=`url(${Or(r)})`;else{let l=qc(e.source);if(!l)throw new Error(`Unsupported font source for embedding: ${e.family}`);s=`local(${Or(l)})`}let n=tn(e.weight,Hc,"normal"),o=tn(e.style,Gc,"normal"),a=tn(e.display,Nc,"swap");return`@font-face{font-family:${Or(e.family)};src:${s};font-weight:${n};font-style:${o};font-display:${a}}`}))).join(`
|
|
505
|
+
`)}};function Kc(i,t){let e=i.toLowerCase(),r=t.toLowerCase();if(r.startsWith("*.")){let s=r.slice(1);return e.endsWith(s)&&e.length>s.length}return e===r}function Jc(i){return i==="localhost"||i==="127.0.0.1"||i==="::1"||i.endsWith(".localhost")}var Ie=class{constructor(t={}){this.config=t;let e=t.hostname??globalThis.location?.hostname??"localhost";(t.environment??"development")!=="production"||Jc(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 r=await this.config.verifyOffline?.(t)??null;return r?r.expiresAt&&Date.parse(r.expiresAt)<Date.now()?this.status={state:"expired",payload:r}:r.domains.some(s=>Kc(e,s))?this.status={state:"valid",payload:r}:this.status={state:"domain-mismatch",payload:r}:this.status={state:"invalid",payload:null}}};var Re=class{constructor(t){this.editor=t;let e={id:qt(),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 r=structuredClone(this.editor.toJSON()),s=e?r:this.blankState(r),n={id:qt(),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(r=>r.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 r={id:qt(),name:`${e.name} copy`,state:structuredClone(e.state)},s=this.pages.indexOf(e);return this.pages.splice(s+1,0,r),this.emitChanged(),r.id}async remove(t){if(this.pages.length===1)return!1;let e=this.pages.findIndex(r=>r.id===t);if(e<0)return!1;if(t===this.activePageId){let r=this.pages[e+1]??this.pages[e-1];await this.editor.fromJSON(structuredClone(r.state)),this.activePageId=r.id}return this.pages.splice(e,1),this.emitChanged(),!0}rename(t,e){let r=this.pages.find(n=>n.id===t),s=e.trim();return!r||!s||r.name===s?!1:(r.name=s,this.emitChanged(),!0)}reorder(t,e){let r=this.pages.findIndex(o=>o.id===t);if(r<0||!Number.isFinite(e))return!1;let s=Math.max(0,Math.min(this.pages.length-1,Math.round(e)));if(s===r)return!1;let[n]=this.pages.splice(r,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),r=e.find(s=>s.id===t.activePageId);await this.editor.fromJSON(structuredClone(r.state)),this.pages=e,this.activePageId=r.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 Zc=.1,Qc=8,kr=class{canvas;layers;history;events;units;snapping;crop;patterns;fonts;licensing;pages;fileAdapter;imageProvider;zoomLevel=1;mockup=null;designBackground;designBackgroundImage=null;constructor(t,e){this.events=new Oe,this.fonts=new Le,e.fonts?.forEach(n=>this.fonts.register(n)),this.licensing=new Ie(e.license),this.units=new je(e.unit??"px",e.dpi??72);let r=this.units.toPixels(e.width),s=this.units.toPixels(e.height);this.designBackground=e.backgroundColor??"#ffffff",this.canvas=new Qi(t,{width:r,height:s,backgroundColor:this.designBackground,preserveObjectStacking:e.preserveObjectStacking??!0,selection:!0}),this.layers=new Pe(this.canvas,this.events),this.fileAdapter=e.fileAdapter,this.imageProvider=e.imageProvider,this.history=new Me({getState:()=>JSON.stringify(this.toJSON()),restoreState:async n=>{let o=JSON.parse(n);await this.fromJSON(o)},events:this.events}),this.layers.setHistoryCallback(()=>this.history.save()),this.snapping=new De(this.canvas,this.events),this.crop=new Ee(this.canvas,this.history,this.events),this.patterns=new Ae(this.canvas,this.layers,this.history,this.events,e.patternSourceResolver),this.setupCanvasEvents(),this.history.saveImmediate(),this.pages=new Re(this)}async addImage(t,e){try{let r=await ct.fromURL(t,{},{originX:"left",originY:"top",...e}),s=this.layers.add("image",r);return this.history.save(),s}catch(r){throw this.events.emit("error",{message:"Failed to add image",error:r}),r}}async replaceImageSource(t,e){let r=this.layers.get(t);if(!r||r.type!=="image")throw new Error(`Image layer not found: ${t}`);if(r.meta.pattern)throw new Error("Clear the pattern before replacing the image source");this.crop.activeLayerId()===t&&this.crop.cancel();let s=r.fabricObject;try{let n=await ct.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),r}catch(n){throw this.events.emit("error",{message:"Failed to replace image source",error:n}),n}}addText(t,e){let r=new me(t,{fontSize:32,fontFamily:"Arial",fill:"#000000",width:200,originX:"left",originY:"top",...e}),s=this.layers.add("text",r);return this.history.save(),s}addShape(t,e){let r=t.create(e),s=this.layers.add("shape",r,t.name);return this.history.save(),s}async addTemplate(t,e){let r={};for(let c of t.parameters){let u=e[c.key]??c.default;if(u===void 0)throw new Error(`Missing template parameter: ${c.key}`);if(c.type==="number"&&!Number.isFinite(Number(u)))throw new Error(`Invalid number for template parameter: ${c.key}`);if(c.type==="color"&&!Fe(u))throw new Error(`Invalid color for template parameter: ${c.key}`);r[c.key]=u}let s=Tr(t.svg.replace(/\{\{(\w+)(?:[|:]([^}]*))?\}\}/g,(c,u,d)=>{let g=r[u]??d;return g===void 0?c:wr(g)})),{objects:n,options:o}=await Ma(s),a=n.filter(c=>c!==null);if(a.length===0)throw new Error("Template SVG contains no renderable objects");let l=Ut.groupSVGElements(a,o);l.set({left:this.canvas.getWidth()/2,top:this.canvas.getHeight()/2,originX:"center",originY:"center"});let h=this.layers.add("template",l,t.name);return this.history.save(),h}removeLayer(t){this.crop.activeLayerId()===t&&this.crop.cancel(),this.layers.remove(t)&&this.history.save()}selectLayer(t){this.layers.select(t)}getSelectedLayer(){let t=this.canvas.getActiveObject();return t?this.layers.findByObject(t)??null:null}flipLayer(t,e){let r=this.layers.get(t);if(!r)return;let s=r.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 r=await e.fabricObject.clone();e.meta.pattern||r.set({left:(r.left??0)+15,top:(r.top??0)+15}),r.setCoords();let s=this.layers.add(e.type,r,`${e.name} copy`);return s.meta=structuredClone(e.meta),s.visible=e.visible,s.locked=e.locked,s.opacity=e.opacity,r.set({visible:e.visible,selectable:!e.locked,evented:!e.locked,opacity:e.opacity}),this.canvas.setActiveObject(r),this.canvas.requestRenderAll(),this.history.save(),s}applyImageAdjustments(t,e){let r=this.layers.get(t);if(!r||r.type!=="image")return!1;let s=r.fabricObject,o={...r.meta.imageAdjustments??{},...e},a=(l,h=-1)=>bt(l??0,h,1);return s.filters=[new Ti.Brightness({brightness:a(o.brightness)}),new Ti.Contrast({contrast:a(o.contrast)}),new Ti.Saturation({saturation:a(o.saturation)}),new Ti.Blur({blur:a(o.blur,0)})],r.meta.imageAdjustments=o,s.applyFilters(),this.canvas.requestRenderAll(),this.history.save(),!0}async groupLayers(t,e="Group"){let r=[...new Set(t)],s=r.map(n=>this.layers.get(n)).filter(n=>n!==void 0);return s.length<2||s.length!==r.length?null:this.history.transaction(()=>{let n=s.map(h=>structuredClone(h.toData())),o=s.map(h=>h.fabricObject);for(let h of s)this.layers.remove(h.id);let a=new Et(o),l=this.layers.add("group",a,e);return l.meta.groupChildren=n,this.layers.select(l.id),this.history.save(),l})}async ungroupLayer(t){let e=this.layers.get(t),r=e?.meta.groupChildren;if(!e||e.type!=="group"||!Array.isArray(r))return[];let s=e.fabricObject;return this.history.transaction(()=>{let n=s.calcTransformMatrix(),o=s.removeAll();this.layers.remove(t);let a=o.map((l,h)=>{Ut.addTransformToObject(l,n),l.setCoords();let c=r[h],u=this.layers.add(c?.type??"group",l,c?.name,c?.id);return c?.meta&&(u.meta=structuredClone(c.meta)),c&&!c.visible&&this.layers.setVisibility(u.id,!1),c?.locked&&this.layers.setLocked(u.id,!0),c&&c.opacity!==1&&this.layers.setOpacity(u.id,c.opacity),u});return this.history.save(),this.layers.select(a[0]?.id??null),a})}toJSON(){return yr(this)}async fromJSON(t){let e=this.history.isRestoring();e||(this.history.saveImmediate(),this.history.pause());try{await xr(this,t),this.patterns.repinAll()}catch(r){throw e||this.events.emit("error",{message:"Failed to load editor state",error:r}),r}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 toRaster(t,e){this.events.emit("export:start",{format:t});try{await this.fonts.ready();let r=await this.withDesignBackground(()=>br(this.canvas,{...e,format:t}));return this.events.emit("export:complete",{format:t}),this.licensing.track(`export:${t}`),r}catch(r){throw this.events.emit("error",{message:`Failed to export ${t.toUpperCase()}`,error:r}),r}}toSVG(){this.events.emit("export:start",{format:"svg"});try{let t=this.withDesignBackground(()=>Cr(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 r=await this.fonts.getEmbeddedCss();return e.replace(/(<svg\b[^>]*>)/i,`$1<defs><style>${r}</style></defs>`)}catch(r){throw this.events.emit("error",{message:"Failed to embed fonts in SVG",error:r}),r}}toDataURL(t="png",e=1){return this.withDesignBackground(()=>Sr(this.canvas,t,e))}async toMockupImage(t={}){if(!this.mockup)throw new Error("No mockup is configured");await this.fonts.ready();try{let e=await _r(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,r=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=r}}toPrintifyPositioning(){let t={},e=this.canvas.getWidth(),r=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 o=n.fabricObject,a=o.getCenterPoint(),l=t[n.name]?`${n.name}-${n.id}`:n.name;t[l]={x:q(a.x/e),y:q(a.y/r),scale:q(o.scaleX??1),angle:q(o.angle??0)}}return t}toNormalizedPositioning(){let t=this.canvas.getWidth(),e=this.canvas.getHeight();return this.layers.getAll().map(r=>{let s=r.fabricObject,n=s.getCenterPoint(),o=s.getBoundingRect();return{layerId:r.id,name:r.name,type:r.type,centerX:q(n.x/t),centerY:q(n.y/e),width:q(o.width/t),height:q(o.height/e),scaleX:q(s.scaleX??1),scaleY:q(s.scaleY??1),angle:q(s.angle??0)}})}toProviderPositioning(t){return t.map(this.toNormalizedPositioning(),{width:this.canvas.getWidth(),height:this.canvas.getHeight()})}async save(t,e){if(!this.fileAdapter)return;let r;e==="png"?r=await this.toPNG():e==="jpeg"?r=await this.toJPEG():e==="webp"?r=await this.toWebP():e==="svg"?r=await this.toSVGAsync():r=JSON.stringify(this.toJSON(),null,2);try{return await this.fileAdapter.save(r,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(r){throw this.events.emit("error",{message:"Failed to search images",error:r}),r}}async addProviderImage(t,e){try{await this.imageProvider?.trackUse?.(t)}catch(r){throw this.events.emit("error",{message:"Failed to record image use",error:r}),r}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}async setBackgroundImage(t,e={}){if(t===null){this.setBackgroundImageObject(null);return}try{let r=await ct.fromURL(t,{},{originX:"left",originY:"top"}),s=r.width||1,n=r.height||1,o=this.canvas.getWidth(),a=this.canvas.getHeight(),l=e.fit??"cover",h=o/s,c=a/n,u=l==="stretch"?h:l==="contain"?Math.min(h,c):Math.max(h,c),d=l==="stretch"?c:u;r.set({left:(o-s*u)/2,top:(a-n*d)/2,scaleX:u,scaleY:d,opacity:bt(e.opacity??1,0,1),selectable:!1,evented:!1}),this.setBackgroundImageObject(r)}catch(r){throw this.events.emit("error",{message:"Failed to set background image",error:r}),r}}setBackgroundImageObject(t,e=!0){this.designBackgroundImage=t,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,r={}){let s=this.units.toPixels(t),n=this.units.toPixels(e),o=this.canvas.getWidth(),a=this.canvas.getHeight();if((r.scaleContent??!0)&&o>0&&a>0){let h=s/o,c=n/a;for(let u of this.layers.getAll()){if(u.meta.pattern)continue;let d=u.fabricObject;d.set({left:(d.left??0)*h,top:(d.top??0)*c,scaleX:(d.scaleX??1)*h,scaleY:(d.scaleY??1)*c}),d.setCoords()}this.designBackgroundImage&&(this.designBackgroundImage.set({left:(this.designBackgroundImage.left??0)*h,top:(this.designBackgroundImage.top??0)*c,scaleX:(this.designBackgroundImage.scaleX??1)*h,scaleY:(this.designBackgroundImage.scaleY??1)*c}),this.designBackgroundImage.setCoords())}this.canvas.setDimensions({width:s,height:n}),this.patterns.repinAll(),this.canvas.requestRenderAll(),this.history.save(),this.events.emit("canvas:modified",{})}getImageDpi(t){let e=this.layers.get(t);if(!e||e.type!=="image")return null;let r=e.fabricObject,s=r.width??0,n=r.getScaledWidth();return s<=0||n<=0?null:q(s/(n/this.units.getDpi()))}validateImageDpi(t=300){return this.layers.getAll().filter(e=>e.type==="image"&&!e.meta.pattern).flatMap(e=>{let r=this.getImageDpi(e.id);return r!==null&&r<t?[{layerId:e.id,layerName:e.name,effectiveDpi:r,minimumDpi:t}]:[]})}toThumbnail(t=320,e=320,r="png"){let s=Math.min(1,t/this.canvas.getWidth(),e/this.canvas.getHeight());return this.toDataURL(r,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(r=>r.id===t);return e>=0&&this.layers.reorder(t,e+1)}sendBackward(t){let e=this.layers.getAll().findIndex(r=>r.id===t);return e>=0&&this.layers.reorder(t,e-1)}setZoom(t){let e=bt(q(t),Zc,Qc);e!==this.zoomLevel&&(this.zoomLevel=e,this.events.emit("zoom:changed",{zoom:e}))}zoom(t){this.setZoom(t)}getZoom(){return this.zoomLevel}zoomIn(t=.1){this.setZoom(this.zoomLevel+t)}zoomOut(t=.1){this.setZoom(this.zoomLevel-t)}resetZoom(){this.setZoom(1)}zoomToFit(t,e,r=0){let s=this.canvas.getWidth(),n=this.canvas.getHeight();if(s<=0||n<=0)return;let o=(t-r*2)/s,a=(e-r*2)/n;this.setZoom(Math.min(o,a))}zoomToSelection(t=24){let e=this.canvas.getActiveObject();if(!e)return;e.setCoords();let r=e.getBoundingRect();r.width<=0||r.height<=0||this.setZoom(Math.min((this.canvas.getWidth()-t*2)/r.width,(this.canvas.getHeight()-t*2)/r.height))}applyPattern(t,e){return this.patterns.apply(t,e)}clearPattern(t){return this.patterns.disable(t)}setMockup(t){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}),this.history.save()}clearMockup(){this.setMockup(null)}getMockup(){return this.mockup}dispose(){this.snapping.dispose(),this.crop.dispose(),this.history.dispose(),vr(),this.events.removeAllListeners(),this.canvas.dispose()}setupCanvasEvents(){this.canvas.on("object:modified",t=>{if(!t.target)return;let e=this.layers.findByObject(t.target);e&&(this.events.emit("layer:modified",{layerId:e.id}),this.history.save())}),this.canvas.on("selection:created",t=>{let e=(t.selected??[]).map(r=>this.layers.findByObject(r)?.id).filter(r=>r!==void 0);this.events.emit("selection:changed",{selected:e})}),this.canvas.on("selection:updated",t=>{let e=(t.selected??[]).map(r=>this.layers.findByObject(r)?.id).filter(r=>r!==void 0);this.events.emit("selection:changed",{selected:e})}),this.canvas.on("selection:cleared",()=>{this.events.emit("selection:changed",{selected:[]})})}};var Ya={mode:"grid",scale:100,horizontalSpacing:0,verticalSpacing:0,angle:0,horizontalOffset:0,offsetX:0,offsetY:0,rotationStepH:0,rotationStepV:0};var Wa=[{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}];return Ka(tu);})();
|
|
506
|
+
//# sourceMappingURL=index.global.js.map
|