modern-path2d 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2704,10 +2704,23 @@ function parseNode(node, style, paths = []) {
2704
2704
  return paths;
2705
2705
  }
2706
2706
 
2707
+ const dataUri = "data:image/svg+xml;";
2708
+ const base64DataUri = `${dataUri}base64,`;
2709
+ const utf8DataUri = `${dataUri}charset=utf8,`;
2707
2710
  function parseSvg(svg) {
2708
2711
  let node;
2712
+ let xml;
2709
2713
  if (typeof svg === "string") {
2710
- node = new DOMParser().parseFromString(svg, "image/svg+xml").documentElement;
2714
+ if (svg.startsWith(base64DataUri)) {
2715
+ svg = svg.substring(base64DataUri.length, svg.length);
2716
+ xml = atob(svg);
2717
+ } else if (svg.startsWith(utf8DataUri)) {
2718
+ svg = svg.substring(utf8DataUri.length, svg.length);
2719
+ xml = decodeURIComponent(svg);
2720
+ } else {
2721
+ xml = svg;
2722
+ }
2723
+ node = new DOMParser().parseFromString(xml, "image/svg+xml").documentElement;
2711
2724
  } else {
2712
2725
  node = svg;
2713
2726
  }
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- (function(M,l){typeof exports=="object"&&typeof module<"u"?l(exports):typeof define=="function"&&define.amd?define(["exports"],l):(M=typeof globalThis<"u"?globalThis:M||self,l(M.modernPath2d={}))})(this,function(M){"use strict";var Vt=Object.defineProperty;var Bt=(M,l,S)=>l in M?Vt(M,l,{enumerable:!0,configurable:!0,writable:!0,value:S}):M[l]=S;var w=(M,l,S)=>Bt(M,typeof l!="symbol"?l+"":l,S);class l{constructor(e=0,t=0){this.x=e,this.y=t}static get MAX(){return new l(1/0,1/0)}static get MIN(){return new l(-1/0,-1/0)}set(e,t){return this.x=e,this.y=t,this}add(e){return this.x+=e.x,this.y+=e.y,this}sub(e){return this.x-=e.x,this.y-=e.y,this}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,s=this.y-e.y;return t*t+s*s}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}multiplyScalar(e){return this.x*=e,this.y*=e,this}divideScalar(e){return this.multiplyScalar(1/e)}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}normalize(){return this.divideScalar(this.length()||1)}lerpVectors(e,t,s){return this.x=e.x+(t.x-e.x)*s,this.y=e.y+(t.y-e.y)*s,this}equals(e){return this.x===e.x&&this.y===e.y}applyMatrix3(e){const t=this.x,s=this.y,n=e.elements;return this.x=n[0]*t+n[3]*s+n[6],this.y=n[1]*t+n[4]*s+n[7],this}copy(e){return this.x=e.x,this.y=e.y,this}clone(){return new l(this.x,this.y)}}class S{constructor(e=0,t=0,s=0,n=0){this.left=e,this.top=t,this.width=s,this.height=n}get x(){return this.left}set x(e){this.left=e}get y(){return this.top}set y(e){this.top=e}get right(){return this.left+this.width}get bottom(){return this.top+this.height}static from(...e){const t=e[0],s=e.slice(1).reduce((n,o)=>(n.left=Math.min(n.left,o.left),n.top=Math.min(n.top,o.top),n.right=Math.max(n.right,o.right),n.bottom=Math.max(n.bottom,o.bottom),n),{left:(t==null?void 0:t.left)??0,top:(t==null?void 0:t.top)??0,right:(t==null?void 0:t.right)??0,bottom:(t==null?void 0:t.bottom)??0});return new S(s.left,s.top,s.right-s.left,s.bottom-s.top)}translate(e,t){return this.left+=e,this.top+=t,this}getCenterPoint(){return new l((this.left+this.right)/2,(this.top+this.bottom)/2)}clone(){return new S(this.left,this.top,this.width,this.height)}toArray(){return[this.left,this.top,this.width,this.height]}}class I{constructor(e=1,t=0,s=0,n=0,o=1,a=0,h=0,c=0,i=1){w(this,"elements",[]);this.set(e,t,s,n,o,a,h,c,i)}set(e,t,s,n,o,a,h,c,i){const u=this.elements;return u[0]=e,u[1]=n,u[2]=h,u[3]=t,u[4]=o,u[5]=c,u[6]=s,u[7]=a,u[8]=i,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,s=e.elements;return t[0]=s[0],t[1]=s[1],t[2]=s[2],t[3]=s[3],t[4]=s[4],t[5]=s[5],t[6]=s[6],t[7]=s[7],t[8]=s[8],this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const s=e.elements,n=t.elements,o=this.elements,a=s[0],h=s[3],c=s[6],i=s[1],u=s[4],y=s[7],f=s[2],x=s[5],g=s[8],p=n[0],m=n[3],T=n[6],C=n[1],P=n[4],A=n[7],b=n[2],$=n[5],z=n[8];return o[0]=a*p+h*C+c*b,o[3]=a*m+h*P+c*$,o[6]=a*T+h*A+c*z,o[1]=i*p+u*C+y*b,o[4]=i*m+u*P+y*$,o[7]=i*T+u*A+y*z,o[2]=f*p+x*C+g*b,o[5]=f*m+x*P+g*$,o[8]=f*T+x*A+g*z,this}invert(){const e=this.elements,t=e[0],s=e[1],n=e[2],o=e[3],a=e[4],h=e[5],c=e[6],i=e[7],u=e[8],y=u*a-h*i,f=h*c-u*o,x=i*o-a*c,g=t*y+s*f+n*x;if(g===0)return this.set(0,0,0,0,0,0,0,0,0);const p=1/g;return e[0]=y*p,e[1]=(n*i-u*s)*p,e[2]=(h*s-n*a)*p,e[3]=f*p,e[4]=(u*t-n*c)*p,e[5]=(n*o-h*t)*p,e[6]=x*p,e[7]=(s*c-i*t)*p,e[8]=(a*t-s*o)*p,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}scale(e,t){return this.premultiply(G.makeScale(e,t)),this}rotate(e){return this.premultiply(G.makeRotation(-e)),this}translate(e,t){return this.premultiply(G.makeTranslation(e,t)),this}makeTranslation(e,t){return this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),s=Math.sin(e);return this.set(t,-s,0,s,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}fromArray(e,t=0){for(let s=0;s<9;s++)this.elements[s]=e[s+t];return this}clone(){return new this.constructor().fromArray(this.elements)}}const G=new I;function B(r,e,t,s){const n=r*t+e*s,o=Math.sqrt(r*r+e*e)*Math.sqrt(t*t+s*s);let a=Math.acos(Math.max(-1,Math.min(1,n/o)));return r*s-e*t<0&&(a=-a),a}function yt(r,e,t,s,n,o,a,h){if(e===0||t===0){r.lineTo(h.x,h.y);return}s=s*Math.PI/180,e=Math.abs(e),t=Math.abs(t);const c=(a.x-h.x)/2,i=(a.y-h.y)/2,u=Math.cos(s)*c+Math.sin(s)*i,y=-Math.sin(s)*c+Math.cos(s)*i;let f=e*e,x=t*t;const g=u*u,p=y*y,m=g/f+p/x;if(m>1){const lt=Math.sqrt(m);e=lt*e,t=lt*t,f=e*e,x=t*t}const T=f*p+x*g,C=(f*x-T)/T;let P=Math.sqrt(Math.max(0,C));n===o&&(P=-P);const A=P*e*y/t,b=-P*t*u/e,$=Math.cos(s)*A-Math.sin(s)*b+(a.x+h.x)/2,z=Math.sin(s)*A+Math.cos(s)*b+(a.y+h.y)/2,Y=B(1,0,(u-A)/e,(y-b)/t),V=B((u-A)/e,(y-b)/t,(-u-A)/e,(-y-b)/t)%(Math.PI*2);r.currentPath.absellipse($,z,e,t,Y,Y+V,o===0,s)}function D(r,e){return r-(e-r)}function gt(r,e){const t=new l,s=new l,n=new l;let o=!0,a=!1;for(let h=0,c=r.length;h<c;h++){const i=r[h];if(o&&(a=!0,o=!1),i.type==="m"||i.type==="M")i.type==="m"?(t.x+=i.x,t.y+=i.y):(t.x=i.x,t.y=i.y),s.x=t.x,s.y=t.y,e.moveTo(t.x,t.y),n.copy(t);else if(i.type==="h"||i.type==="H")i.type==="h"?t.x+=i.x:t.x=i.x,s.x=t.x,s.y=t.y,e.lineTo(t.x,t.y),a&&n.copy(t);else if(i.type==="v"||i.type==="V")i.type==="v"?t.y+=i.y:t.y=i.y,s.x=t.x,s.y=t.y,e.lineTo(t.x,t.y),a&&n.copy(t);else if(i.type==="l"||i.type==="L")i.type==="l"?(t.x+=i.x,t.y+=i.y):(t.x=i.x,t.y=i.y),s.x=t.x,s.y=t.y,e.lineTo(t.x,t.y),a&&n.copy(t);else if(i.type==="c"||i.type==="C")i.type==="c"?(e.bezierCurveTo(t.x+i.x1,t.y+i.y1,t.x+i.x2,t.y+i.y2,t.x+i.x,t.y+i.y),s.x=t.x+i.x2,s.y=t.y+i.y2,t.x+=i.x,t.y+=i.y):(e.bezierCurveTo(i.x1,i.y1,i.x2,i.y2,i.x,i.y),s.x=i.x2,s.y=i.y2,t.x=i.x,t.y=i.y),a&&n.copy(t);else if(i.type==="s"||i.type==="S")i.type==="s"?(e.bezierCurveTo(D(t.x,s.x),D(t.y,s.y),t.x+i.x2,t.y+i.y2,t.x+i.x,t.y+i.y),s.x=t.x+i.x2,s.y=t.y+i.y2,t.x+=i.x,t.y+=i.y):(e.bezierCurveTo(D(t.x,s.x),D(t.y,s.y),i.x2,i.y2,i.x,i.y),s.x=i.x2,s.y=i.y2,t.x=i.x,t.y=i.y),a&&n.copy(t);else if(i.type==="q"||i.type==="Q")i.type==="q"?(e.quadraticCurveTo(t.x+i.x1,t.y+i.y1,t.x+i.x,t.y+i.y),s.x=t.x+i.x1,s.y=t.y+i.y1,t.x+=i.x,t.y+=i.y):(e.quadraticCurveTo(i.x1,i.y1,i.x,i.y),s.x=i.x1,s.y=i.y1,t.x=i.x,t.y=i.y),a&&n.copy(t);else if(i.type==="t"||i.type==="T"){const u=D(t.x,s.x),y=D(t.y,s.y);s.x=u,s.y=y,i.type==="t"?(e.quadraticCurveTo(u,y,t.x+i.x,t.y+i.y),t.x+=i.x,t.y+=i.y):(e.quadraticCurveTo(u,y,i.x,i.y),t.x=i.x,t.y=i.y),a&&n.copy(t)}else if(i.type==="a"||i.type==="A"){if(i.type==="a"){if(i.x===0&&i.y===0)continue;t.x+=i.x,t.y+=i.y}else{if(i.x===t.x&&i.y===t.y)continue;t.x=i.x,t.y=i.y}const u=t.clone();s.x=t.x,s.y=t.y,yt(e,i.rx,i.ry,i.angle,i.largeArcFlag,i.sweepFlag,u,t),a&&n.copy(t)}else i.type==="z"||i.type==="Z"?(e.currentPath.autoClose=!0,e.currentPath.curves.length>0&&(t.copy(n),e.currentPath.currentPoint.copy(t),o=!0)):console.warn("Unsupported commands",i);a=!1}}const d={SEPARATOR:/[ \t\r\n,.\-+]/,WHITESPACE:/[ \t\r\n]/,DIGIT:/\d/,SIGN:/[-+]/,POINT:/\./,COMMA:/,/,EXP:/e/i,FLAGS:/[01]/};function N(r,e,t=0){let h=0,c=!0,i="",u="";const y=[];function f(m,T,C){const P=new SyntaxError(`Unexpected character "${m}" at index ${T}.`);throw P.partial=C,P}function x(){i!==""&&(u===""?y.push(Number(i)):y.push(Number(i)*10**Number(u))),i="",u=""}let g;const p=r.length;for(let m=0;m<p;m++){if(g=r[m],Array.isArray(e)&&e.includes(y.length%t)&&d.FLAGS.test(g)){h=1,i=g,x();continue}if(h===0){if(d.WHITESPACE.test(g))continue;if(d.DIGIT.test(g)||d.SIGN.test(g)){h=1,i=g;continue}if(d.POINT.test(g)){h=2,i=g;continue}d.COMMA.test(g)&&(c&&f(g,m,y),c=!0)}if(h===1){if(d.DIGIT.test(g)){i+=g;continue}if(d.POINT.test(g)){i+=g,h=2;continue}if(d.EXP.test(g)){h=3;continue}d.SIGN.test(g)&&i.length===1&&d.SIGN.test(i[0])&&f(g,m,y)}if(h===2){if(d.DIGIT.test(g)){i+=g;continue}if(d.EXP.test(g)){h=3;continue}d.POINT.test(g)&&i[i.length-1]==="."&&f(g,m,y)}if(h===3){if(d.DIGIT.test(g)){u+=g;continue}if(d.SIGN.test(g)){if(u===""){u+=g;continue}u.length===1&&d.SIGN.test(u)&&f(g,m,y)}}d.WHITESPACE.test(g)?(x(),h=0,c=!1):d.COMMA.test(g)?(x(),h=0,c=!0):d.SIGN.test(g)?(x(),h=1,i=g):d.POINT.test(g)?(x(),h=2,i=g):f(g,m,y)}return x(),y}function ft(r){switch(r.type){case"m":case"M":return`${r.type} ${r.x} ${r.y}`;case"h":case"H":return`${r.type} ${r.x}`;case"v":case"V":return`${r.type} ${r.y}`;case"l":case"L":return`${r.type} ${r.x} ${r.y}`;case"c":case"C":return`${r.type} ${r.x1} ${r.y1} ${r.x2} ${r.y2} ${r.x} ${r.y}`;case"s":case"S":return`${r.type} ${r.x2} ${r.y2} ${r.x} ${r.y}`;case"q":case"Q":return`${r.type} ${r.x1} ${r.y1} ${r.x} ${r.y}`;case"t":case"T":return`${r.type} ${r.x} ${r.y}`;case"a":case"A":return`${r.type} ${r.rx} ${r.ry} ${r.angle} ${r.largeArcFlag} ${r.sweepFlag} ${r.x} ${r.y}`;case"z":case"Z":return r.type;default:return""}}function pt(r){let e="";for(let t=0,s=r.length;t<s;t++)e+=`${ft(r[t])} `;return e}const xt=/[a-df-z][^a-df-z]*/gi;function Mt(r){const e=[],t=r.match(xt);if(!t)return e;for(let s=0,n=t.length;s<n;s++){const o=t[s],a=o.charAt(0),h=o.slice(1).trim();let c;switch(a){case"m":case"M":c=N(h);for(let i=0,u=c.length;i<u;i+=2)i===0?e.push({type:a,x:c[i],y:c[i+1]}):e.push({type:a==="m"?"l":"L",x:c[i],y:c[i+1]});break;case"h":case"H":c=N(h);for(let i=0,u=c.length;i<u;i++)e.push({type:a,x:c[i]});break;case"v":case"V":c=N(h);for(let i=0,u=c.length;i<u;i++)e.push({type:a,y:c[i]});break;case"l":case"L":c=N(h);for(let i=0,u=c.length;i<u;i+=2)e.push({type:a,x:c[i],y:c[i+1]});break;case"c":case"C":c=N(h);for(let i=0,u=c.length;i<u;i+=6)e.push({type:a,x1:c[i],y1:c[i+1],x2:c[i+2],y2:c[i+3],x:c[i+4],y:c[i+5]});break;case"s":case"S":c=N(h);for(let i=0,u=c.length;i<u;i+=4)e.push({type:a,x2:c[i],y2:c[i+1],x:c[i+2],y:c[i+3]});break;case"q":case"Q":c=N(h);for(let i=0,u=c.length;i<u;i+=4)e.push({type:a,x1:c[i],y1:c[i+1],x:c[i+2],y:c[i+3]});break;case"t":case"T":c=N(h);for(let i=0,u=c.length;i<u;i+=2)e.push({type:a,x:c[i],y:c[i+1]});break;case"a":case"A":c=N(h,[3,4],7);for(let i=0,u=c.length;i<u;i+=7)e.push({type:a,rx:c[i],ry:c[i+1],angle:c[i+2],largeArcFlag:c[i+3],sweepFlag:c[i+4],x:c[i+5],y:c[i+6]});break;case"z":case"Z":e.push({type:a});break;default:console.warn(o)}}return e}class k{constructor(){w(this,"arcLengthDivisions",200);w(this,"_cacheArcLengths");w(this,"_needsUpdate",!1)}getPointAt(e,t=new l){return this.getPoint(this.getUtoTmapping(e),t)}getPoints(e=5){const t=[];for(let s=0;s<=e;s++)t.push(this.getPoint(s/e));return t}getSpacedPoints(e=5){const t=[];for(let s=0;s<=e;s++)t.push(this.getPointAt(s/e));return t}getLength(){const e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this._cacheArcLengths&&this._cacheArcLengths.length===e+1&&!this._needsUpdate)return this._cacheArcLengths;this._needsUpdate=!1;const t=[];let s,n=this.getPoint(0),o=0;t.push(0);for(let a=1;a<=e;a++)s=this.getPoint(a/e),o+=s.distanceTo(n),t.push(o),n=s;return this._cacheArcLengths=t,t}updateArcLengths(){this._needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){const s=this.getLengths();let n=0;const o=s.length;let a;t?a=t:a=e*s[o-1];let h=0,c=o-1,i;for(;h<=c;)if(n=Math.floor(h+(c-h)/2),i=s[n]-a,i<0)h=n+1;else if(i>0)c=n-1;else{c=n;break}if(n=c,s[n]===a)return n/(o-1);const u=s[n],f=s[n+1]-u,x=(a-u)/f;return(n+x)/(o-1)}getTangent(e,t=new l){let n=e-1e-4,o=e+1e-4;return n<0&&(n=0),o>1&&(o=1),t.copy(this.getPoint(o)).sub(this.getPoint(n)).normalize()}getTangentAt(e,t=new l){return this.getTangent(this.getUtoTmapping(e),t)}transform(e){return this}getDivisions(e){return e}getMinMax(e=l.MAX,t=l.MIN){return{min:e,max:t}}getCommands(){return[]}getData(){return pt(this.getCommands())}drawTo(e){return this}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}clone(){return new this.constructor().copy(this)}}class O extends k{constructor(e,t,s=0,n=Math.PI*2){super(),this.center=e,this.radius=t,this.start=s,this.end=n}getPoint(e){const{radius:t,center:s}=this;return s.clone().add(this.getNormal(e).clone().multiplyScalar(t))}getTangent(e){const{x:t,y:s}=this.getNormal(e);return new l(-s,t)}getNormal(e){const{start:t,end:s}=this,n=e*(s-t)+t-.5*Math.PI;return new l(Math.cos(n),Math.sin(n))}getMinMax(e=l.MAX,t=l.MIN){return e.x=Math.min(e.x,this.center.x-this.radius),e.y=Math.min(e.y,this.center.y-this.radius),t.x=Math.max(t.x,this.center.x+this.radius),t.y=Math.max(t.y,this.center.y+this.radius),{min:e,max:t}}}function H(r,e,t,s,n){const o=(s-e)*.5,a=(n-t)*.5,h=r*r,c=r*h;return(2*t-2*s+o+a)*c+(-3*t+3*s-2*o-a)*h+o*r+t}function mt(r,e){const t=1-r;return t*t*e}function vt(r,e){return 2*(1-r)*r*e}function dt(r,e){return r*r*e}function W(r,e,t,s){return mt(r,e)+vt(r,t)+dt(r,s)}function Pt(r,e){const t=1-r;return t*t*t*e}function Tt(r,e){const t=1-r;return 3*t*t*r*e}function wt(r,e){return 3*(1-r)*r*r*e}function bt(r,e){return r*r*r*e}function j(r,e,t,s,n){return Pt(r,e)+Tt(r,t)+wt(r,s)+bt(r,n)}class Z extends k{constructor(e=new l,t=new l,s=new l,n=new l){super(),this.v0=e,this.v1=t,this.v2=s,this.v3=n}getPoint(e,t=new l){const{v0:s,v1:n,v2:o,v3:a}=this;return t.set(j(e,s.x,n.x,o.x,a.x),j(e,s.y,n.y,o.y,a.y)),t}transform(e){return this.v0.applyMatrix3(e),this.v1.applyMatrix3(e),this.v2.applyMatrix3(e),this.v3.applyMatrix3(e),this}getMinMax(e=l.MAX,t=l.MIN){const{v0:s,v1:n,v2:o,v3:a}=this;return e.x=Math.min(e.x,s.x,n.x,o.x,a.x),e.y=Math.min(e.y,s.y,n.y,o.y,a.y),t.x=Math.max(t.x,s.x,n.x,o.x,a.x),t.y=Math.max(t.y,s.y,n.y,o.y,a.y),{min:e,max:t}}getCommands(){const{v0:e,v1:t,v2:s,v3:n}=this;return[{type:"M",x:e.x,y:e.y},{type:"C",x1:t.x,y1:t.y,x2:s.x,y2:s.y,x:n.x,y:n.y}]}drawTo(e){const{v1:t,v2:s,v3:n}=this;return e.bezierCurveTo(t.x,t.y,s.x,s.y,n.x,n.y),this}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}}const At=new I,J=new I,K=new I,R=new l;class tt extends k{constructor(e=0,t=0,s=1,n=1,o=0,a=Math.PI*2,h=!1,c=0){super(),this.x=e,this.y=t,this.radiusX=s,this.radiusY=n,this.startAngle=o,this.endAngle=a,this.clockwise=h,this.rotation=c}getPoint(e,t=new l){const s=Math.PI*2;let n=this.endAngle-this.startAngle;const o=Math.abs(n)<Number.EPSILON;for(;n<0;)n+=s;for(;n>s;)n-=s;n<Number.EPSILON&&(o?n=0:n=s),this.clockwise&&!o&&(n===s?n=-s:n=n-s);const a=this.startAngle+e*n;let h=this.x+this.radiusX*Math.cos(a),c=this.y+this.radiusY*Math.sin(a);if(this.rotation!==0){const i=Math.cos(this.rotation),u=Math.sin(this.rotation),y=h-this.x,f=c-this.y;h=y*i-f*u+this.x,c=y*u+f*i+this.y}return t.set(h,c)}getDivisions(e=12){return e*2}getCommands(){const{x:e,y:t,radiusX:s,radiusY:n,startAngle:o,endAngle:a,clockwise:h}=this,c=!h,i=e+s*Math.cos(o),u=t+n*Math.sin(o),y=e+s*Math.cos(a),f=t+n*Math.sin(a),x=Math.abs(o-a),g=x>Math.PI?1:0,p=c?0:1,m=e+s*Math.cos(o+(a-o)/2),T=t+n*Math.sin(o+(a-o)/2);return x>=2*Math.PI?[{type:"M",x:i,y:u},{type:"A",rx:s,ry:n,angle:0,largeArcFlag:1,sweepFlag:p,x:m,y:T},{type:"A",rx:s,ry:n,angle:0,largeArcFlag:1,sweepFlag:p,x:i,y:u}]:[{type:"M",x:i,y:u},{type:"A",rx:s,ry:n,angle:0,largeArcFlag:g,sweepFlag:p,x:y,y:f}]}drawTo(e){const{x:t,y:s,radiusX:n,radiusY:o,rotation:a,startAngle:h,endAngle:c,clockwise:i}=this,u=t+n*Math.cos(h),y=s+o*Math.sin(h);return e.moveTo(u,y),e.ellipse(t,s,n,o,a,h,c,!i),this}transform(e){return R.set(this.x,this.y),R.applyMatrix3(e),this.x=R.x,this.y=R.y,kt(e)?Ct(this,e):It(this,e),this}copy(e){return super.copy(e),this.x=e.x,this.y=e.y,this.radiusX=e.radiusX,this.radiusY=e.radiusY,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this.clockwise=e.clockwise,this.rotation=e.rotation,this}}function Ct(r,e){const t=r.radiusX,s=r.radiusY,n=Math.cos(r.rotation),o=Math.sin(r.rotation),a=new l(t*n,t*o),h=new l(-s*o,s*n),c=a.applyMatrix3(e),i=h.applyMatrix3(e),u=At.set(c.x,i.x,0,c.y,i.y,0,0,0,1),y=J.copy(u).invert(),g=K.copy(y).transpose().multiply(y).elements,p=Lt(g[0],g[1],g[4]),m=Math.sqrt(p.rt1),T=Math.sqrt(p.rt2);if(r.radiusX=1/m,r.radiusY=1/T,r.rotation=Math.atan2(p.sn,p.cs),!((r.endAngle-r.startAngle)%(2*Math.PI)<Number.EPSILON)){const P=J.set(m,0,0,0,T,0,0,0,1),A=K.set(p.cs,p.sn,0,-p.sn,p.cs,0,0,0,1),b=P.multiply(A).multiply(u),$=z=>{const{x:Y,y:V}=new l(Math.cos(z),Math.sin(z)).applyMatrix3(b);return Math.atan2(V,Y)};r.startAngle=$(r.startAngle),r.endAngle=$(r.endAngle),et(e)&&(r.clockwise=!r.clockwise)}}function It(r,e){const t=st(e),s=nt(e);r.radiusX*=t,r.radiusY*=s;const n=t>Number.EPSILON?Math.atan2(e.elements[1],e.elements[0]):Math.atan2(-e.elements[3],e.elements[4]);r.rotation+=n,et(e)&&(r.startAngle*=-1,r.endAngle*=-1,r.clockwise=!r.clockwise)}function et(r){const e=r.elements;return e[0]*e[4]-e[1]*e[3]<0}function kt(r){const e=r.elements,t=e[0]*e[3]+e[1]*e[4];if(t===0)return!1;const s=st(r),n=nt(r);return Math.abs(t/(s*n))>Number.EPSILON}function st(r){const e=r.elements;return Math.sqrt(e[0]*e[0]+e[1]*e[1])}function nt(r){const e=r.elements;return Math.sqrt(e[3]*e[3]+e[4]*e[4])}function Lt(r,e,t){let s,n,o,a,h;const c=r+t,i=r-t,u=Math.sqrt(i*i+4*e*e);return c>0?(s=.5*(c+u),h=1/s,n=r*h*t-e*h*e):c<0?n=.5*(c-u):(s=.5*u,n=-.5*u),i>0?o=i+u:o=i-u,Math.abs(o)>2*Math.abs(e)?(h=-2*e/o,a=1/Math.sqrt(1+h*h),o=h*a):Math.abs(e)===0?(o=1,a=0):(h=-.5*o/e,o=1/Math.sqrt(1+h*h),a=h*o),i>0&&(h=o,o=-a,a=h),{rt1:s,rt2:n,cs:o,sn:a}}class q extends k{constructor(e=new l,t=new l){super(),this.v1=e,this.v2=t}getPoint(e,t=new l){return e===1?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1)),t}getPointAt(e,t=new l){return this.getPoint(e,t)}getTangent(e,t=new l){return t.subVectors(this.v2,this.v1).normalize()}getTangentAt(e,t=new l){return this.getTangent(e,t)}transform(e){return this.v1.applyMatrix3(e),this.v2.applyMatrix3(e),this}getDivisions(){return 1}getMinMax(e=l.MAX,t=l.MIN){const{v1:s,v2:n}=this;return e.x=Math.min(e.x,s.x,n.x),e.y=Math.min(e.y,s.y,n.y),t.x=Math.max(t.x,s.x,n.x),t.y=Math.max(t.y,s.y,n.y),{min:e,max:t}}getCommands(){const{v1:e,v2:t}=this;return[{type:"M",x:e.x,y:e.y},{type:"L",x:t.x,y:t.y}]}drawTo(e){const{v2:t}=this;return e.lineTo(t.x,t.y),this}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}}class St extends k{constructor(t,s,n=0,o=1){super();w(this,"curves");w(this,"pointT",0);this.center=t,this.size=s,this.start=n,this.end=o;const{x:a,y:h}=this.center,c=new l(a+.5*this.size,h-.5*this.size),i=new l(a-.5*this.size,h-.5*this.size),u=new l(a,h+.5*this.size),y=new O(c,Math.SQRT1_2*this.size,-.25*Math.PI,.75*Math.PI),f=new O(i,Math.SQRT1_2*this.size,-.75*Math.PI,.25*Math.PI),x=new O(u,.5*Math.SQRT1_2*this.size,.75*Math.PI,1.25*Math.PI),g=new l(a,h+this.size),p=new l(a+this.size,h),m=new l().lerpVectors(p,g,.75),T=new l(a-this.size,h),C=new l().lerpVectors(T,g,.75),P=new q(p,m),A=new q(C,T);this.curves=[y,P,x,A,f]}getPoint(t){return this.getCurrentLine(t).getPoint(this.pointT)}getPointAt(t){return this.getPoint(t)}getCurrentLine(t){let s=(t*(this.end-this.start)+this.start)%1;s<0&&(s+=1),s*=9*Math.PI/8+1.5;let n;const o=.5*Math.PI;return s<o?(n=0,this.pointT=s/o):s<o+.75?(n=1,this.pointT=(s-o)/.75):s<5*Math.PI/8+.75?(n=2,this.pointT=(s-o-.75)/(Math.PI/8)):s<5*Math.PI/8+1.5?(n=3,this.pointT=(s-5*Math.PI/8-.75)/.75):(n=4,this.pointT=(s-5*Math.PI/8-1.5)/o),this.curves[n]}getTangent(t){return this.getCurrentLine(t).getTangent(this.pointT).normalize()}getNormal(t){const s=this.getCurrentLine(t);return new l(s.v2.y-s.v1.y,-(s.v2.x-s.v1.x)).normalize()}transform(t){return this.curves.forEach(s=>s.transform(t)),this}getMinMax(t=l.MAX,s=l.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}getCommands(){return this.curves.flatMap(t=>t.getCommands())}drawTo(t){return this.curves.forEach(s=>s.drawTo(t)),this}}class Nt extends k{constructor(t,s=0,n=0,o=0,a=1){super();w(this,"curves",[]);w(this,"points",[]);this.center=t,this.radius=s,this.num=n,this.start=o,this.end=a;for(let h=0;h<this.num;h++){let c=h*2*Math.PI/this.num;c-=.5*Math.PI;const i=new l(this.radius*Math.cos(c),this.radius*Math.sin(c));i.add(this.center),this.points.push(i)}for(let h=0;h<this.num;h++)this.curves.push(new q(this.points[h],this.points[(h+1)%this.num]))}getPoint(t){return this.getCurrentLine(t),this.currentLine.getPoint(this.pointK)}getPointAt(t){return this.getPoint(t)}getCurrentLine(t){let s=(t*(this.end-this.start)+this.start)%1;s<0&&(s+=1);const n=s*this.num,o=Math.floor(n);return this.pointK=n-o,this.currentLine=this.curves[o],this.currentLine}getTangent(t){return this.getCurrentLine(t).getTangent(0).normalize()}getNormal(t){const s=this.getCurrentLine(t);return new l(s.v2.y-s.v1.y,-(s.v2.x-s.v1.x)).normalize()}transform(t){return this.curves.forEach(s=>s.transform(t)),this}getMinMax(t=l.MAX,s=l.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}getCommands(){return this.curves.flatMap(t=>t.getCommands())}drawTo(t){return this.curves.forEach(s=>s.drawTo(t)),this}}class it extends k{constructor(e=new l,t=new l,s=new l){super(),this.v0=e,this.v1=t,this.v2=s}getPoint(e,t=new l){const{v0:s,v1:n,v2:o}=this;return t.set(W(e,s.x,n.x,o.x),W(e,s.y,n.y,o.y)),t}transform(e){return this.v0.applyMatrix3(e),this.v1.applyMatrix3(e),this.v2.applyMatrix3(e),this}getMinMax(e=l.MAX,t=l.MIN){const{v0:s,v1:n,v2:o}=this,a=.5*(s.x+n.x),h=.5*(s.y+n.y),c=.5*(s.x+o.x),i=.5*(s.y+o.y);return e.x=Math.min(e.x,s.x,o.x,a,c),e.y=Math.min(e.y,s.y,o.y,h,i),t.x=Math.max(t.x,s.x,o.x,a,c),t.y=Math.max(t.y,s.y,o.y,h,i),{min:e,max:t}}getCommands(){const{v0:e,v1:t,v2:s}=this;return[{type:"M",x:e.x,y:e.y},{type:"Q",x1:t.x,y1:t.y,x:s.x,y:s.y}]}drawTo(e){const{v1:t,v2:s}=this;return e.quadraticCurveTo(t.x,t.y,s.x,s.y),this}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}}class rt extends k{constructor(t,s,n=1,o=0,a=1){super();w(this,"curves",[]);w(this,"pointT",0);this.center=t,this.rx=s,this.aspectRatio=n,this.start=o,this.end=a;const{x:h,y:c}=this.center,i=this.rx,u=this.rx/this.aspectRatio,y=[new l(h-i,c-u),new l(h+i,c-u),new l(h+i,c+u),new l(h-i,c+u)];for(let f=0;f<4;f++)this.curves.push(new q(y[f].clone(),y[(f+1)%4].clone()))}get x(){return this.center.x-this.rx}get y(){return this.center.y-this.rx/this.aspectRatio}get width(){return this.rx*2}get height(){return this.rx/this.aspectRatio*2}getPoint(t){return this.getCurrentLine(t).getPoint(this.pointT)}getPointAt(t){return this.getPoint(t)}getCurrentLine(t){let s=(t*(this.end-this.start)+this.start)%1;s<0&&(s+=1),s*=(1+this.aspectRatio)*2;let n;return s<this.aspectRatio?(n=0,this.pointT=s/this.aspectRatio):s<this.aspectRatio+1?(n=1,this.pointT=(s-this.aspectRatio)/1):s<2*this.aspectRatio+1?(n=2,this.pointT=(s-this.aspectRatio-1)/this.aspectRatio):(n=3,this.pointT=(s-2*this.aspectRatio-1)/1),this.curves[n]}getTangent(t){return this.getCurrentLine(t).getTangent(0).normalize()}getNormal(t){const{v1:s,v2:n}=this.getCurrentLine(t);return new l(n.y-s.y,-(n.x-s.x)).normalize()}transform(t){return this.curves.forEach(s=>s.transform(t)),this}getMinMax(t=l.MAX,s=l.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}getCommands(){return this.curves.flatMap(t=>t.getCommands())}drawTo(t){return this.curves.forEach(s=>s.drawTo(t)),this}}class ot extends k{constructor(e=[]){super(),this.points=e}getDivisions(e=12){return e*this.points.length}getPoint(e,t=new l){const{points:s}=this,n=(s.length-1)*e,o=Math.floor(n),a=n-o,h=s[o===0?o:o-1],c=s[o],i=s[o>s.length-2?s.length-1:o+1],u=s[o>s.length-3?s.length-1:o+2];return t.set(H(a,h.x,c.x,i.x,u.x),H(a,h.y,c.y,i.y,u.y)),t}copy(e){super.copy(e),this.points=[];for(let t=0,s=e.points.length;t<s;t++)this.points.push(e.points[t].clone());return this}}class X extends k{constructor(t){super();w(this,"curves",[]);w(this,"currentPoint",new l);w(this,"autoClose",!1);w(this,"_cacheLengths",[]);t&&this.setFromPoints(t)}addCurve(t){return this.curves.push(t),this}closePath(){const t=this.curves[0].getPoint(0),s=this.curves[this.curves.length-1].getPoint(1);return t.equals(s)||this.curves.push(new q(s,t)),this}getPoint(t,s=new l){const n=t*this.getLength(),o=this.getCurveLengths();let a=0;for(;a<o.length;){if(o[a]>=n){const h=o[a]-n,c=this.curves[a],i=c.getLength();return c.getPointAt(i===0?0:1-h/i,s)}a++}return s}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){super.updateArcLengths(),this._cacheLengths=[],this.getCurveLengths()}getCurveLengths(){if(this._cacheLengths.length===this.curves.length)return this._cacheLengths;const t=[];let s=0;for(let n=0,o=this.curves.length;n<o;n++)s+=this.curves[n].getLength(),t.push(s);return this._cacheLengths=t,t}getSpacedPoints(t=40){const s=[];for(let n=0;n<=t;n++)s.push(this.getPoint(n/t));return this.autoClose&&s.push(s[0]),s}getPoints(t=12){const s=[];let n;for(let o=0,a=this.curves;o<a.length;o++){const h=a[o],c=h.getPoints(h.getDivisions(t));for(let i=0;i<c.length;i++){const u=c[i];n&&n.equals(u)||(s.push(u),n=u)}}return this.autoClose&&s.length>1&&!s[s.length-1].equals(s[0])&&s.push(s[0]),s}setFromPoints(t){this.moveTo(t[0].x,t[0].y);for(let s=1,n=t.length;s<n;s++)this.lineTo(t[s].x,t[s].y);return this}bezierCurveTo(t,s,n,o,a,h){return this.curves.push(new Z(this.currentPoint.clone(),new l(t,s),new l(n,o),new l(a,h))),this.currentPoint.set(a,h),this}lineTo(t,s){return this.curves.push(new q(this.currentPoint.clone(),new l(t,s))),this.currentPoint.set(t,s),this}moveTo(t,s){return this.currentPoint.set(t,s),this}quadraticCurveTo(t,s,n,o){return this.curves.push(new it(this.currentPoint.clone(),new l(t,s),new l(n,o))),this.currentPoint.set(n,o),this}rect(t,s,n,o){return this.curves.push(new rt(new l(t+n/2,s+o/2),n/2,n/o)),this.currentPoint.set(t,s),this}splineThru(t){const s=[this.currentPoint.clone()].concat(t);return this.curves.push(new ot(s)),this.currentPoint.copy(t[t.length-1]),this}arc(t,s,n,o,a,h=!1){const c=this.currentPoint;return this.absarc(t+c.x,s+c.y,n,o,a,h),this}absarc(t,s,n,o,a,h=!1){return this.absellipse(t,s,n,n,o,a,h),this}ellipse(t,s,n,o,a,h,c=!1,i=0){const u=this.currentPoint;return this.absellipse(t+u.x,s+u.y,n,o,a,h,c,i),this}absellipse(t,s,n,o,a,h,c=!1,i=0){const u=new tt(t,s,n,o,a,h,c,i);if(this.curves.length>0){const y=u.getPoint(0);y.equals(this.currentPoint)||this.lineTo(y.x,y.y)}return this.curves.push(u),this.currentPoint.copy(u.getPoint(1)),this}getCommands(){return this.curves.flatMap(t=>t.getCommands())}getMinMax(t=l.MAX,s=l.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}drawTo(t){var n;const s=(n=this.curves[0])==null?void 0:n.getPoint(0);return s&&t.moveTo(s.x,s.y),this.curves.forEach(o=>o.drawTo(t)),this.autoClose&&t.closePath(),this}copy(t){super.copy(t),this.curves=[];for(let s=0,n=t.curves.length;s<n;s++)this.curves.push(t.curves[s].clone());return this.autoClose=t.autoClose,this.currentPoint.copy(t.currentPoint),this}}class L{constructor(e){w(this,"currentPath",new X);w(this,"paths",[this.currentPath]);w(this,"userData");e&&(e instanceof L?this.addPath(e):Array.isArray(e)?this.addCommands(e):this.addData(e))}addPath(e){return e instanceof L?this.paths.push(...e.paths.map(t=>t.clone())):this.paths.push(e),this}closePath(){return this.currentPath.closePath(),this}moveTo(e,t){const{currentPoint:s,curves:n}=this.currentPath;return(s.x!==e||s.y!==t)&&(n.length?(this.currentPath=new X().moveTo(e,t),this.paths.push(this.currentPath)):this.currentPath.moveTo(e,t)),this}lineTo(e,t){return this.currentPath.lineTo(e,t),this}bezierCurveTo(e,t,s,n,o,a){return this.currentPath.bezierCurveTo(e,t,s,n,o,a),this}quadraticCurveTo(e,t,s,n){return this.currentPath.quadraticCurveTo(e,t,s,n),this}arc(e,t,s,n,o,a){return this.currentPath.absarc(e,t,s,n,o,!a),this}arcTo(e,t,s,n,o){const a=this.currentPath.currentPoint,h=a.x,c=a.y,i=e-h,u=t-c,y=s-e,f=n-t,x=Math.sqrt(i*i+u*u),g=Math.sqrt(y*y+f*f);if(x<o||g<o)return this.lineTo(s,n),this;const p={x:i/x,y:u/x},m={x:y/g,y:f/g},T=e-p.y*o,C=t+p.x*o,P=Math.atan2(p.y,p.x);let b=Math.atan2(m.y,m.x)-P;return b>Math.PI?b-=2*Math.PI:b<-Math.PI&&(b+=2*Math.PI),this.arc(T,C,o,P,P+b,!1),this.lineTo(s,n),this}ellipse(e,t,s,n,o,a,h,c){return this.currentPath.absellipse(e,t,s,n,a,h,!c,o),this}rect(e,t,s,n){return this.currentPath.rect(e,t,s,n),this}addCommands(e){return gt(e,this),this}addData(e){return this.addCommands(Mt(e)),this}splineThru(e){return this.currentPath.splineThru(e),this}forEachCurve(e){return this.paths.forEach(t=>t.curves.forEach(s=>e(s))),this}transform(e){return this.forEachCurve(t=>t.transform(e)),this}getMinMax(e=l.MAX,t=l.MIN){return this.forEachCurve(s=>s.getMinMax(e,t)),{min:e,max:t}}getBoundingBox(){const{min:e,max:t}=this.getMinMax();return new S(e.x,e.y,t.x-e.x,t.y-e.y)}getCommands(){return this.paths.flatMap(e=>e.curves.flatMap(t=>t.getCommands()))}getData(){return this.paths.map(e=>e.getData()).join(" ")}getSvgString(){const{x:e,y:t,width:s,height:n}=this.getBoundingBox();return`<svg viewBox="${e} ${t} ${s} ${n}" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" d="${this.getData()}"></path></svg>`}getSvgDataUri(){return`data:image/svg+xml;base64,${btoa(this.getSvgString())}`}drawTo(e){this.paths.forEach(t=>{t.drawTo(e)})}strokeTo(e){this.drawTo(e),e.stroke()}fillTo(e){this.drawTo(e),e.fill()}copy(e){return this.currentPath=e.currentPath.clone(),this.paths=e.paths.map(t=>t.clone()),this.userData=e.userData,this}toCanvas(e=!0){const t=document.createElement("canvas"),{left:s,top:n,width:o,height:a}=this.getBoundingBox();t.width=o,t.height=a;const h=t.getContext("2d");return h&&(h.translate(-s,-n),e?this.fillTo(h):this.strokeTo(h)),t}clone(){return new this.constructor().copy(this)}}const _="px",ht=90,at=["mm","cm","in","pt","pc","px"],U={mm:{mm:1,cm:.1,in:1/25.4,pt:72/25.4,pc:6/25.4,px:-1},cm:{mm:10,cm:1,in:1/2.54,pt:72/2.54,pc:6/2.54,px:-1},in:{mm:25.4,cm:2.54,in:1,pt:72,pc:6,px:-1},pt:{mm:25.4/72,cm:2.54/72,in:1/72,pt:1,pc:6/72,px:-1},pc:{mm:25.4/6,cm:2.54/6,in:1/6,pt:72/6,pc:1,px:-1},px:{px:1}};function v(r){let e="px";if(typeof r=="string"||r instanceof String)for(let s=0,n=at.length;s<n;s++){const o=at[s];if(r.endsWith(o)){e=o,r=r.substring(0,r.length-o.length);break}}let t;return e==="px"&&_!=="px"?t=U.in[_]/ht:(t=U[e][_],t<0&&(t=U[e].in*ht)),t*Number.parseFloat(r)}const Et=new I,F=new I,ct=new I,ut=new I;function $t(r,e,t){if(!(r.hasAttribute("transform")||r.nodeName==="use"&&(r.hasAttribute("x")||r.hasAttribute("y"))))return null;const s=zt(r);return t.length>0&&s.premultiply(t[t.length-1]),e.copy(s),t.push(s),s}function zt(r){const e=new I,t=Et;if(r.nodeName==="use"&&(r.hasAttribute("x")||r.hasAttribute("y"))&&e.translate(v(r.getAttribute("x")),v(r.getAttribute("y"))),r.hasAttribute("transform")){const s=r.getAttribute("transform").split(")");for(let n=s.length-1;n>=0;n--){const o=s[n].trim();if(o==="")continue;const a=o.indexOf("("),h=o.length;if(a>0&&a<h){const c=o.slice(0,a),i=N(o.slice(a+1));switch(t.identity(),c){case"translate":if(i.length>=1){const u=i[0];let y=0;i.length>=2&&(y=i[1]),t.translate(u,y)}break;case"rotate":if(i.length>=1){let u=0,y=0,f=0;u=i[0]*Math.PI/180,i.length>=3&&(y=i[1],f=i[2]),F.makeTranslation(-y,-f),ct.makeRotation(u),ut.multiplyMatrices(ct,F),F.makeTranslation(y,f),t.multiplyMatrices(F,ut)}break;case"scale":i.length>=1&&t.scale(i[0],i[1]??i[0]);break;case"skewX":i.length===1&&t.set(1,Math.tan(i[0]*Math.PI/180),0,0,1,0,0,0,1);break;case"skewY":i.length===1&&t.set(1,0,0,Math.tan(i[0]*Math.PI/180),1,0,0,0,1);break;case"matrix":i.length===6&&t.set(i[0],i[2],i[4],i[1],i[3],i[5],0,0,1);break}}e.premultiply(t)}}return e}function qt(r){return new L().addPath(new X().absarc(v(r.getAttribute("cx")||0),v(r.getAttribute("cy")||0),v(r.getAttribute("r")||0),0,Math.PI*2))}function Dt(r,e){if(!(!r.sheet||!r.sheet.cssRules||!r.sheet.cssRules.length))for(let t=0;t<r.sheet.cssRules.length;t++){const s=r.sheet.cssRules[t];if(s.type!==1)continue;const n=s.selectorText.split(/,/g).filter(Boolean).map(o=>o.trim());for(let o=0;o<n.length;o++){const a=Object.fromEntries(Object.entries(s.style).filter(([,h])=>h!==""));e[n[o]]=Object.assign(e[n[o]]||{},a)}}}function Xt(r){return new L().addPath(new X().absellipse(v(r.getAttribute("cx")||0),v(r.getAttribute("cy")||0),v(r.getAttribute("rx")||0),v(r.getAttribute("ry")||0),0,Math.PI*2))}function Ot(r){return new L().moveTo(v(r.getAttribute("x1")||0),v(r.getAttribute("y1")||0)).lineTo(v(r.getAttribute("x2")||0),v(r.getAttribute("y2")||0))}function Rt(r){const e=new L,t=r.getAttribute("d");return!t||t==="none"?null:(e.addData(t),e)}const Ft=/([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;function Yt(r){var s;const e=new L;let t=0;return(s=r.getAttribute("points"))==null||s.replace(Ft,(n,o,a)=>{const h=v(o),c=v(a);return t===0?e.moveTo(h,c):e.lineTo(h,c),t++,n}),e.currentPath.autoClose=!0,e}const Gt=/([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;function _t(r){var s;const e=new L;let t=0;return(s=r.getAttribute("points"))==null||s.replace(Gt,(n,o,a)=>{const h=v(o),c=v(a);return t===0?e.moveTo(h,c):e.lineTo(h,c),t++,n}),e.currentPath.autoClose=!1,e}function Ut(r){const e=v(r.getAttribute("x")||0),t=v(r.getAttribute("y")||0),s=v(r.getAttribute("rx")||r.getAttribute("ry")||0),n=v(r.getAttribute("ry")||r.getAttribute("rx")||0),o=v(r.getAttribute("width")),a=v(r.getAttribute("height")),h=1-.551915024494,c=new L;return c.moveTo(e+s,t),c.lineTo(e+o-s,t),(s!==0||n!==0)&&c.bezierCurveTo(e+o-s*h,t,e+o,t+n*h,e+o,t+n),c.lineTo(e+o,t+a-n),(s!==0||n!==0)&&c.bezierCurveTo(e+o,t+a-n*h,e+o-s*h,t+a,e+o-s,t+a),c.lineTo(e+s,t+a),(s!==0||n!==0)&&c.bezierCurveTo(e+s*h,t+a,e,t+a-n*h,e,t+a-n),c.lineTo(e,t+n),(s!==0||n!==0)&&c.bezierCurveTo(e,t+n*h,e+s*h,t,e+s,t),c}function E(r,e,t){e=Object.assign({},e);let s={};if(r.hasAttribute("class")){const h=r.getAttribute("class").split(/\s/).filter(Boolean).map(c=>c.trim());for(let c=0;c<h.length;c++)s=Object.assign(s,t[`.${h[c]}`])}r.hasAttribute("id")&&(s=Object.assign(s,t[`#${r.getAttribute("id")}`]));function n(h,c,i){i===void 0&&(i=function(y){return y.startsWith("url")&&console.warn("url access in attributes is not implemented."),y}),r.hasAttribute(h)&&(e[c]=i(r.getAttribute(h))),s[h]&&(e[c]=i(s[h])),r.style&&r.style[h]!==""&&(e[c]=i(r.style[h]))}function o(h){return Math.max(0,Math.min(1,v(h)))}function a(h){return Math.max(0,v(h))}return n("fill","fill"),n("fill-opacity","fillOpacity",o),n("fill-rule","fillRule"),n("opacity","opacity",o),n("stroke","stroke"),n("stroke-dashoffset","strokeDashoffset"),n("stroke-dasharray","strokeDasharray"),n("stroke-linecap","strokeLineCap"),n("stroke-linejoin","strokeLineJoin"),n("stroke-miterlimit","strokeMiterLimit",a),n("stroke-opacity","strokeOpacity",o),n("stroke-width","strokeWidth",a),n("visibility","visibility"),e}function Q(r,e,t=[]){var u;if(r.nodeType!==1)return t;let s=!1,n=null;const o={};switch(r.nodeName){case"svg":e=E(r,e,o);break;case"style":Dt(r,o);break;case"g":e=E(r,e,o);break;case"path":e=E(r,e,o),r.hasAttribute("d")&&(n=Rt(r));break;case"rect":e=E(r,e,o),n=Ut(r);break;case"polygon":e=E(r,e,o),n=Yt(r);break;case"polyline":e=E(r,e,o),n=_t(r);break;case"circle":e=E(r,e,o),n=qt(r);break;case"ellipse":e=E(r,e,o),n=Xt(r);break;case"line":e=E(r,e,o),n=Ot(r);break;case"defs":s=!0;break;case"use":{e=E(r,e,o);const f=(r.getAttributeNS("http://www.w3.org/1999/xlink","href")||"").substring(1),x=(u=r.viewportElement)==null?void 0:u.getElementById(f);x?Q(x,e,t):console.warn(`'use node' references non-existent node id: ${f}`);break}default:console.warn(r);break}const a=new I,h=[],c=$t(r,a,h);n&&(n.transform(a),t.push(n),n.userData={node:r,style:e});const i=r.childNodes;for(let y=0,f=i.length;y<f;y++){const x=i[y];s&&x.nodeName!=="style"&&x.nodeName!=="defs"||Q(x,e,t)}return c&&(h.pop(),h.length>0?a.copy(h[h.length-1]):a.identity()),t}function Qt(r){let e;return typeof r=="string"?e=new DOMParser().parseFromString(r,"image/svg+xml").documentElement:e=r,Q(e,{fill:"#000",fillOpacity:1,strokeOpacity:1,strokeWidth:1,strokeLineJoin:"miter",strokeLineCap:"butt",strokeMiterLimit:4})}M.BoundingBox=S,M.CircleCurve=O,M.CubicBezierCurve=Z,M.Curve=k,M.CurvePath=X,M.EllipseCurve=tt,M.HeartCurve=St,M.LineCurve=q,M.Matrix3=I,M.Path2D=L,M.PloygonCurve=Nt,M.Point2D=l,M.QuadraticBezierCurve=it,M.RectangularCurve=rt,M.SplineCurve=ot,M.parseSvg=Qt,Object.defineProperty(M,Symbol.toStringTag,{value:"Module"})});
1
+ (function(M,u){typeof exports=="object"&&typeof module<"u"?u(exports):typeof define=="function"&&define.amd?define(["exports"],u):(M=typeof globalThis<"u"?globalThis:M||self,u(M.modernPath2d={}))})(this,function(M){"use strict";var Ht=Object.defineProperty;var jt=(M,u,S)=>u in M?Ht(M,u,{enumerable:!0,configurable:!0,writable:!0,value:S}):M[u]=S;var w=(M,u,S)=>jt(M,typeof u!="symbol"?u+"":u,S);class u{constructor(e=0,t=0){this.x=e,this.y=t}static get MAX(){return new u(1/0,1/0)}static get MIN(){return new u(-1/0,-1/0)}set(e,t){return this.x=e,this.y=t,this}add(e){return this.x+=e.x,this.y+=e.y,this}sub(e){return this.x-=e.x,this.y-=e.y,this}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,s=this.y-e.y;return t*t+s*s}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}multiplyScalar(e){return this.x*=e,this.y*=e,this}divideScalar(e){return this.multiplyScalar(1/e)}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}normalize(){return this.divideScalar(this.length()||1)}lerpVectors(e,t,s){return this.x=e.x+(t.x-e.x)*s,this.y=e.y+(t.y-e.y)*s,this}equals(e){return this.x===e.x&&this.y===e.y}applyMatrix3(e){const t=this.x,s=this.y,n=e.elements;return this.x=n[0]*t+n[3]*s+n[6],this.y=n[1]*t+n[4]*s+n[7],this}copy(e){return this.x=e.x,this.y=e.y,this}clone(){return new u(this.x,this.y)}}class S{constructor(e=0,t=0,s=0,n=0){this.left=e,this.top=t,this.width=s,this.height=n}get x(){return this.left}set x(e){this.left=e}get y(){return this.top}set y(e){this.top=e}get right(){return this.left+this.width}get bottom(){return this.top+this.height}static from(...e){const t=e[0],s=e.slice(1).reduce((n,o)=>(n.left=Math.min(n.left,o.left),n.top=Math.min(n.top,o.top),n.right=Math.max(n.right,o.right),n.bottom=Math.max(n.bottom,o.bottom),n),{left:(t==null?void 0:t.left)??0,top:(t==null?void 0:t.top)??0,right:(t==null?void 0:t.right)??0,bottom:(t==null?void 0:t.bottom)??0});return new S(s.left,s.top,s.right-s.left,s.bottom-s.top)}translate(e,t){return this.left+=e,this.top+=t,this}getCenterPoint(){return new u((this.left+this.right)/2,(this.top+this.bottom)/2)}clone(){return new S(this.left,this.top,this.width,this.height)}toArray(){return[this.left,this.top,this.width,this.height]}}class I{constructor(e=1,t=0,s=0,n=0,o=1,h=0,a=0,c=0,i=1){w(this,"elements",[]);this.set(e,t,s,n,o,h,a,c,i)}set(e,t,s,n,o,h,a,c,i){const l=this.elements;return l[0]=e,l[1]=n,l[2]=a,l[3]=t,l[4]=o,l[5]=c,l[6]=s,l[7]=h,l[8]=i,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,s=e.elements;return t[0]=s[0],t[1]=s[1],t[2]=s[2],t[3]=s[3],t[4]=s[4],t[5]=s[5],t[6]=s[6],t[7]=s[7],t[8]=s[8],this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const s=e.elements,n=t.elements,o=this.elements,h=s[0],a=s[3],c=s[6],i=s[1],l=s[4],y=s[7],p=s[2],x=s[5],f=s[8],g=n[0],m=n[3],T=n[6],C=n[1],P=n[4],A=n[7],b=n[2],$=n[5],z=n[8];return o[0]=h*g+a*C+c*b,o[3]=h*m+a*P+c*$,o[6]=h*T+a*A+c*z,o[1]=i*g+l*C+y*b,o[4]=i*m+l*P+y*$,o[7]=i*T+l*A+y*z,o[2]=p*g+x*C+f*b,o[5]=p*m+x*P+f*$,o[8]=p*T+x*A+f*z,this}invert(){const e=this.elements,t=e[0],s=e[1],n=e[2],o=e[3],h=e[4],a=e[5],c=e[6],i=e[7],l=e[8],y=l*h-a*i,p=a*c-l*o,x=i*o-h*c,f=t*y+s*p+n*x;if(f===0)return this.set(0,0,0,0,0,0,0,0,0);const g=1/f;return e[0]=y*g,e[1]=(n*i-l*s)*g,e[2]=(a*s-n*h)*g,e[3]=p*g,e[4]=(l*t-n*c)*g,e[5]=(n*o-a*t)*g,e[6]=x*g,e[7]=(s*c-i*t)*g,e[8]=(h*t-s*o)*g,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}scale(e,t){return this.premultiply(U.makeScale(e,t)),this}rotate(e){return this.premultiply(U.makeRotation(-e)),this}translate(e,t){return this.premultiply(U.makeTranslation(e,t)),this}makeTranslation(e,t){return this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),s=Math.sin(e);return this.set(t,-s,0,s,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}fromArray(e,t=0){for(let s=0;s<9;s++)this.elements[s]=e[s+t];return this}clone(){return new this.constructor().fromArray(this.elements)}}const U=new I;function B(r,e,t,s){const n=r*t+e*s,o=Math.sqrt(r*r+e*e)*Math.sqrt(t*t+s*s);let h=Math.acos(Math.max(-1,Math.min(1,n/o)));return r*s-e*t<0&&(h=-h),h}function gt(r,e,t,s,n,o,h,a){if(e===0||t===0){r.lineTo(a.x,a.y);return}s=s*Math.PI/180,e=Math.abs(e),t=Math.abs(t);const c=(h.x-a.x)/2,i=(h.y-a.y)/2,l=Math.cos(s)*c+Math.sin(s)*i,y=-Math.sin(s)*c+Math.cos(s)*i;let p=e*e,x=t*t;const f=l*l,g=y*y,m=f/p+g/x;if(m>1){const pt=Math.sqrt(m);e=pt*e,t=pt*t,p=e*e,x=t*t}const T=p*g+x*f,C=(p*x-T)/T;let P=Math.sqrt(Math.max(0,C));n===o&&(P=-P);const A=P*e*y/t,b=-P*t*l/e,$=Math.cos(s)*A-Math.sin(s)*b+(h.x+a.x)/2,z=Math.sin(s)*A+Math.cos(s)*b+(h.y+a.y)/2,Y=B(1,0,(l-A)/e,(y-b)/t),V=B((l-A)/e,(y-b)/t,(-l-A)/e,(-y-b)/t)%(Math.PI*2);r.currentPath.absellipse($,z,e,t,Y,Y+V,o===0,s)}function D(r,e){return r-(e-r)}function xt(r,e){const t=new u,s=new u,n=new u;let o=!0,h=!1;for(let a=0,c=r.length;a<c;a++){const i=r[a];if(o&&(h=!0,o=!1),i.type==="m"||i.type==="M")i.type==="m"?(t.x+=i.x,t.y+=i.y):(t.x=i.x,t.y=i.y),s.x=t.x,s.y=t.y,e.moveTo(t.x,t.y),n.copy(t);else if(i.type==="h"||i.type==="H")i.type==="h"?t.x+=i.x:t.x=i.x,s.x=t.x,s.y=t.y,e.lineTo(t.x,t.y),h&&n.copy(t);else if(i.type==="v"||i.type==="V")i.type==="v"?t.y+=i.y:t.y=i.y,s.x=t.x,s.y=t.y,e.lineTo(t.x,t.y),h&&n.copy(t);else if(i.type==="l"||i.type==="L")i.type==="l"?(t.x+=i.x,t.y+=i.y):(t.x=i.x,t.y=i.y),s.x=t.x,s.y=t.y,e.lineTo(t.x,t.y),h&&n.copy(t);else if(i.type==="c"||i.type==="C")i.type==="c"?(e.bezierCurveTo(t.x+i.x1,t.y+i.y1,t.x+i.x2,t.y+i.y2,t.x+i.x,t.y+i.y),s.x=t.x+i.x2,s.y=t.y+i.y2,t.x+=i.x,t.y+=i.y):(e.bezierCurveTo(i.x1,i.y1,i.x2,i.y2,i.x,i.y),s.x=i.x2,s.y=i.y2,t.x=i.x,t.y=i.y),h&&n.copy(t);else if(i.type==="s"||i.type==="S")i.type==="s"?(e.bezierCurveTo(D(t.x,s.x),D(t.y,s.y),t.x+i.x2,t.y+i.y2,t.x+i.x,t.y+i.y),s.x=t.x+i.x2,s.y=t.y+i.y2,t.x+=i.x,t.y+=i.y):(e.bezierCurveTo(D(t.x,s.x),D(t.y,s.y),i.x2,i.y2,i.x,i.y),s.x=i.x2,s.y=i.y2,t.x=i.x,t.y=i.y),h&&n.copy(t);else if(i.type==="q"||i.type==="Q")i.type==="q"?(e.quadraticCurveTo(t.x+i.x1,t.y+i.y1,t.x+i.x,t.y+i.y),s.x=t.x+i.x1,s.y=t.y+i.y1,t.x+=i.x,t.y+=i.y):(e.quadraticCurveTo(i.x1,i.y1,i.x,i.y),s.x=i.x1,s.y=i.y1,t.x=i.x,t.y=i.y),h&&n.copy(t);else if(i.type==="t"||i.type==="T"){const l=D(t.x,s.x),y=D(t.y,s.y);s.x=l,s.y=y,i.type==="t"?(e.quadraticCurveTo(l,y,t.x+i.x,t.y+i.y),t.x+=i.x,t.y+=i.y):(e.quadraticCurveTo(l,y,i.x,i.y),t.x=i.x,t.y=i.y),h&&n.copy(t)}else if(i.type==="a"||i.type==="A"){if(i.type==="a"){if(i.x===0&&i.y===0)continue;t.x+=i.x,t.y+=i.y}else{if(i.x===t.x&&i.y===t.y)continue;t.x=i.x,t.y=i.y}const l=t.clone();s.x=t.x,s.y=t.y,gt(e,i.rx,i.ry,i.angle,i.largeArcFlag,i.sweepFlag,l,t),h&&n.copy(t)}else i.type==="z"||i.type==="Z"?(e.currentPath.autoClose=!0,e.currentPath.curves.length>0&&(t.copy(n),e.currentPath.currentPoint.copy(t),o=!0)):console.warn("Unsupported commands",i);h=!1}}const d={SEPARATOR:/[ \t\r\n,.\-+]/,WHITESPACE:/[ \t\r\n]/,DIGIT:/\d/,SIGN:/[-+]/,POINT:/\./,COMMA:/,/,EXP:/e/i,FLAGS:/[01]/};function N(r,e,t=0){let a=0,c=!0,i="",l="";const y=[];function p(m,T,C){const P=new SyntaxError(`Unexpected character "${m}" at index ${T}.`);throw P.partial=C,P}function x(){i!==""&&(l===""?y.push(Number(i)):y.push(Number(i)*10**Number(l))),i="",l=""}let f;const g=r.length;for(let m=0;m<g;m++){if(f=r[m],Array.isArray(e)&&e.includes(y.length%t)&&d.FLAGS.test(f)){a=1,i=f,x();continue}if(a===0){if(d.WHITESPACE.test(f))continue;if(d.DIGIT.test(f)||d.SIGN.test(f)){a=1,i=f;continue}if(d.POINT.test(f)){a=2,i=f;continue}d.COMMA.test(f)&&(c&&p(f,m,y),c=!0)}if(a===1){if(d.DIGIT.test(f)){i+=f;continue}if(d.POINT.test(f)){i+=f,a=2;continue}if(d.EXP.test(f)){a=3;continue}d.SIGN.test(f)&&i.length===1&&d.SIGN.test(i[0])&&p(f,m,y)}if(a===2){if(d.DIGIT.test(f)){i+=f;continue}if(d.EXP.test(f)){a=3;continue}d.POINT.test(f)&&i[i.length-1]==="."&&p(f,m,y)}if(a===3){if(d.DIGIT.test(f)){l+=f;continue}if(d.SIGN.test(f)){if(l===""){l+=f;continue}l.length===1&&d.SIGN.test(l)&&p(f,m,y)}}d.WHITESPACE.test(f)?(x(),a=0,c=!1):d.COMMA.test(f)?(x(),a=0,c=!0):d.SIGN.test(f)?(x(),a=1,i=f):d.POINT.test(f)?(x(),a=2,i=f):p(f,m,y)}return x(),y}function Mt(r){switch(r.type){case"m":case"M":return`${r.type} ${r.x} ${r.y}`;case"h":case"H":return`${r.type} ${r.x}`;case"v":case"V":return`${r.type} ${r.y}`;case"l":case"L":return`${r.type} ${r.x} ${r.y}`;case"c":case"C":return`${r.type} ${r.x1} ${r.y1} ${r.x2} ${r.y2} ${r.x} ${r.y}`;case"s":case"S":return`${r.type} ${r.x2} ${r.y2} ${r.x} ${r.y}`;case"q":case"Q":return`${r.type} ${r.x1} ${r.y1} ${r.x} ${r.y}`;case"t":case"T":return`${r.type} ${r.x} ${r.y}`;case"a":case"A":return`${r.type} ${r.rx} ${r.ry} ${r.angle} ${r.largeArcFlag} ${r.sweepFlag} ${r.x} ${r.y}`;case"z":case"Z":return r.type;default:return""}}function mt(r){let e="";for(let t=0,s=r.length;t<s;t++)e+=`${Mt(r[t])} `;return e}const vt=/[a-df-z][^a-df-z]*/gi;function dt(r){const e=[],t=r.match(vt);if(!t)return e;for(let s=0,n=t.length;s<n;s++){const o=t[s],h=o.charAt(0),a=o.slice(1).trim();let c;switch(h){case"m":case"M":c=N(a);for(let i=0,l=c.length;i<l;i+=2)i===0?e.push({type:h,x:c[i],y:c[i+1]}):e.push({type:h==="m"?"l":"L",x:c[i],y:c[i+1]});break;case"h":case"H":c=N(a);for(let i=0,l=c.length;i<l;i++)e.push({type:h,x:c[i]});break;case"v":case"V":c=N(a);for(let i=0,l=c.length;i<l;i++)e.push({type:h,y:c[i]});break;case"l":case"L":c=N(a);for(let i=0,l=c.length;i<l;i+=2)e.push({type:h,x:c[i],y:c[i+1]});break;case"c":case"C":c=N(a);for(let i=0,l=c.length;i<l;i+=6)e.push({type:h,x1:c[i],y1:c[i+1],x2:c[i+2],y2:c[i+3],x:c[i+4],y:c[i+5]});break;case"s":case"S":c=N(a);for(let i=0,l=c.length;i<l;i+=4)e.push({type:h,x2:c[i],y2:c[i+1],x:c[i+2],y:c[i+3]});break;case"q":case"Q":c=N(a);for(let i=0,l=c.length;i<l;i+=4)e.push({type:h,x1:c[i],y1:c[i+1],x:c[i+2],y:c[i+3]});break;case"t":case"T":c=N(a);for(let i=0,l=c.length;i<l;i+=2)e.push({type:h,x:c[i],y:c[i+1]});break;case"a":case"A":c=N(a,[3,4],7);for(let i=0,l=c.length;i<l;i+=7)e.push({type:h,rx:c[i],ry:c[i+1],angle:c[i+2],largeArcFlag:c[i+3],sweepFlag:c[i+4],x:c[i+5],y:c[i+6]});break;case"z":case"Z":e.push({type:h});break;default:console.warn(o)}}return e}class k{constructor(){w(this,"arcLengthDivisions",200);w(this,"_cacheArcLengths");w(this,"_needsUpdate",!1)}getPointAt(e,t=new u){return this.getPoint(this.getUtoTmapping(e),t)}getPoints(e=5){const t=[];for(let s=0;s<=e;s++)t.push(this.getPoint(s/e));return t}getSpacedPoints(e=5){const t=[];for(let s=0;s<=e;s++)t.push(this.getPointAt(s/e));return t}getLength(){const e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this._cacheArcLengths&&this._cacheArcLengths.length===e+1&&!this._needsUpdate)return this._cacheArcLengths;this._needsUpdate=!1;const t=[];let s,n=this.getPoint(0),o=0;t.push(0);for(let h=1;h<=e;h++)s=this.getPoint(h/e),o+=s.distanceTo(n),t.push(o),n=s;return this._cacheArcLengths=t,t}updateArcLengths(){this._needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){const s=this.getLengths();let n=0;const o=s.length;let h;t?h=t:h=e*s[o-1];let a=0,c=o-1,i;for(;a<=c;)if(n=Math.floor(a+(c-a)/2),i=s[n]-h,i<0)a=n+1;else if(i>0)c=n-1;else{c=n;break}if(n=c,s[n]===h)return n/(o-1);const l=s[n],p=s[n+1]-l,x=(h-l)/p;return(n+x)/(o-1)}getTangent(e,t=new u){let n=e-1e-4,o=e+1e-4;return n<0&&(n=0),o>1&&(o=1),t.copy(this.getPoint(o)).sub(this.getPoint(n)).normalize()}getTangentAt(e,t=new u){return this.getTangent(this.getUtoTmapping(e),t)}transform(e){return this}getDivisions(e){return e}getMinMax(e=u.MAX,t=u.MIN){return{min:e,max:t}}getCommands(){return[]}getData(){return mt(this.getCommands())}drawTo(e){return this}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}clone(){return new this.constructor().copy(this)}}class O extends k{constructor(e,t,s=0,n=Math.PI*2){super(),this.center=e,this.radius=t,this.start=s,this.end=n}getPoint(e){const{radius:t,center:s}=this;return s.clone().add(this.getNormal(e).clone().multiplyScalar(t))}getTangent(e){const{x:t,y:s}=this.getNormal(e);return new u(-s,t)}getNormal(e){const{start:t,end:s}=this,n=e*(s-t)+t-.5*Math.PI;return new u(Math.cos(n),Math.sin(n))}getMinMax(e=u.MAX,t=u.MIN){return e.x=Math.min(e.x,this.center.x-this.radius),e.y=Math.min(e.y,this.center.y-this.radius),t.x=Math.max(t.x,this.center.x+this.radius),t.y=Math.max(t.y,this.center.y+this.radius),{min:e,max:t}}}function W(r,e,t,s,n){const o=(s-e)*.5,h=(n-t)*.5,a=r*r,c=r*a;return(2*t-2*s+o+h)*c+(-3*t+3*s-2*o-h)*a+o*r+t}function Pt(r,e){const t=1-r;return t*t*e}function Tt(r,e){return 2*(1-r)*r*e}function wt(r,e){return r*r*e}function H(r,e,t,s){return Pt(r,e)+Tt(r,t)+wt(r,s)}function bt(r,e){const t=1-r;return t*t*t*e}function At(r,e){const t=1-r;return 3*t*t*r*e}function Ct(r,e){return 3*(1-r)*r*r*e}function It(r,e){return r*r*r*e}function j(r,e,t,s,n){return bt(r,e)+At(r,t)+Ct(r,s)+It(r,n)}class Z extends k{constructor(e=new u,t=new u,s=new u,n=new u){super(),this.v0=e,this.v1=t,this.v2=s,this.v3=n}getPoint(e,t=new u){const{v0:s,v1:n,v2:o,v3:h}=this;return t.set(j(e,s.x,n.x,o.x,h.x),j(e,s.y,n.y,o.y,h.y)),t}transform(e){return this.v0.applyMatrix3(e),this.v1.applyMatrix3(e),this.v2.applyMatrix3(e),this.v3.applyMatrix3(e),this}getMinMax(e=u.MAX,t=u.MIN){const{v0:s,v1:n,v2:o,v3:h}=this;return e.x=Math.min(e.x,s.x,n.x,o.x,h.x),e.y=Math.min(e.y,s.y,n.y,o.y,h.y),t.x=Math.max(t.x,s.x,n.x,o.x,h.x),t.y=Math.max(t.y,s.y,n.y,o.y,h.y),{min:e,max:t}}getCommands(){const{v0:e,v1:t,v2:s,v3:n}=this;return[{type:"M",x:e.x,y:e.y},{type:"C",x1:t.x,y1:t.y,x2:s.x,y2:s.y,x:n.x,y:n.y}]}drawTo(e){const{v1:t,v2:s,v3:n}=this;return e.bezierCurveTo(t.x,t.y,s.x,s.y,n.x,n.y),this}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}}const kt=new I,J=new I,K=new I,R=new u;class tt extends k{constructor(e=0,t=0,s=1,n=1,o=0,h=Math.PI*2,a=!1,c=0){super(),this.x=e,this.y=t,this.radiusX=s,this.radiusY=n,this.startAngle=o,this.endAngle=h,this.clockwise=a,this.rotation=c}getPoint(e,t=new u){const s=Math.PI*2;let n=this.endAngle-this.startAngle;const o=Math.abs(n)<Number.EPSILON;for(;n<0;)n+=s;for(;n>s;)n-=s;n<Number.EPSILON&&(o?n=0:n=s),this.clockwise&&!o&&(n===s?n=-s:n=n-s);const h=this.startAngle+e*n;let a=this.x+this.radiusX*Math.cos(h),c=this.y+this.radiusY*Math.sin(h);if(this.rotation!==0){const i=Math.cos(this.rotation),l=Math.sin(this.rotation),y=a-this.x,p=c-this.y;a=y*i-p*l+this.x,c=y*l+p*i+this.y}return t.set(a,c)}getDivisions(e=12){return e*2}getCommands(){const{x:e,y:t,radiusX:s,radiusY:n,startAngle:o,endAngle:h,clockwise:a}=this,c=!a,i=e+s*Math.cos(o),l=t+n*Math.sin(o),y=e+s*Math.cos(h),p=t+n*Math.sin(h),x=Math.abs(o-h),f=x>Math.PI?1:0,g=c?0:1,m=e+s*Math.cos(o+(h-o)/2),T=t+n*Math.sin(o+(h-o)/2);return x>=2*Math.PI?[{type:"M",x:i,y:l},{type:"A",rx:s,ry:n,angle:0,largeArcFlag:1,sweepFlag:g,x:m,y:T},{type:"A",rx:s,ry:n,angle:0,largeArcFlag:1,sweepFlag:g,x:i,y:l}]:[{type:"M",x:i,y:l},{type:"A",rx:s,ry:n,angle:0,largeArcFlag:f,sweepFlag:g,x:y,y:p}]}drawTo(e){const{x:t,y:s,radiusX:n,radiusY:o,rotation:h,startAngle:a,endAngle:c,clockwise:i}=this,l=t+n*Math.cos(a),y=s+o*Math.sin(a);return e.moveTo(l,y),e.ellipse(t,s,n,o,h,a,c,!i),this}transform(e){return R.set(this.x,this.y),R.applyMatrix3(e),this.x=R.x,this.y=R.y,Nt(e)?Lt(this,e):St(this,e),this}copy(e){return super.copy(e),this.x=e.x,this.y=e.y,this.radiusX=e.radiusX,this.radiusY=e.radiusY,this.startAngle=e.startAngle,this.endAngle=e.endAngle,this.clockwise=e.clockwise,this.rotation=e.rotation,this}}function Lt(r,e){const t=r.radiusX,s=r.radiusY,n=Math.cos(r.rotation),o=Math.sin(r.rotation),h=new u(t*n,t*o),a=new u(-s*o,s*n),c=h.applyMatrix3(e),i=a.applyMatrix3(e),l=kt.set(c.x,i.x,0,c.y,i.y,0,0,0,1),y=J.copy(l).invert(),f=K.copy(y).transpose().multiply(y).elements,g=Et(f[0],f[1],f[4]),m=Math.sqrt(g.rt1),T=Math.sqrt(g.rt2);if(r.radiusX=1/m,r.radiusY=1/T,r.rotation=Math.atan2(g.sn,g.cs),!((r.endAngle-r.startAngle)%(2*Math.PI)<Number.EPSILON)){const P=J.set(m,0,0,0,T,0,0,0,1),A=K.set(g.cs,g.sn,0,-g.sn,g.cs,0,0,0,1),b=P.multiply(A).multiply(l),$=z=>{const{x:Y,y:V}=new u(Math.cos(z),Math.sin(z)).applyMatrix3(b);return Math.atan2(V,Y)};r.startAngle=$(r.startAngle),r.endAngle=$(r.endAngle),et(e)&&(r.clockwise=!r.clockwise)}}function St(r,e){const t=st(e),s=nt(e);r.radiusX*=t,r.radiusY*=s;const n=t>Number.EPSILON?Math.atan2(e.elements[1],e.elements[0]):Math.atan2(-e.elements[3],e.elements[4]);r.rotation+=n,et(e)&&(r.startAngle*=-1,r.endAngle*=-1,r.clockwise=!r.clockwise)}function et(r){const e=r.elements;return e[0]*e[4]-e[1]*e[3]<0}function Nt(r){const e=r.elements,t=e[0]*e[3]+e[1]*e[4];if(t===0)return!1;const s=st(r),n=nt(r);return Math.abs(t/(s*n))>Number.EPSILON}function st(r){const e=r.elements;return Math.sqrt(e[0]*e[0]+e[1]*e[1])}function nt(r){const e=r.elements;return Math.sqrt(e[3]*e[3]+e[4]*e[4])}function Et(r,e,t){let s,n,o,h,a;const c=r+t,i=r-t,l=Math.sqrt(i*i+4*e*e);return c>0?(s=.5*(c+l),a=1/s,n=r*a*t-e*a*e):c<0?n=.5*(c-l):(s=.5*l,n=-.5*l),i>0?o=i+l:o=i-l,Math.abs(o)>2*Math.abs(e)?(a=-2*e/o,h=1/Math.sqrt(1+a*a),o=a*h):Math.abs(e)===0?(o=1,h=0):(a=-.5*o/e,o=1/Math.sqrt(1+a*a),h=a*o),i>0&&(a=o,o=-h,h=a),{rt1:s,rt2:n,cs:o,sn:h}}class q extends k{constructor(e=new u,t=new u){super(),this.v1=e,this.v2=t}getPoint(e,t=new u){return e===1?t.copy(this.v2):(t.copy(this.v2).sub(this.v1),t.multiplyScalar(e).add(this.v1)),t}getPointAt(e,t=new u){return this.getPoint(e,t)}getTangent(e,t=new u){return t.subVectors(this.v2,this.v1).normalize()}getTangentAt(e,t=new u){return this.getTangent(e,t)}transform(e){return this.v1.applyMatrix3(e),this.v2.applyMatrix3(e),this}getDivisions(){return 1}getMinMax(e=u.MAX,t=u.MIN){const{v1:s,v2:n}=this;return e.x=Math.min(e.x,s.x,n.x),e.y=Math.min(e.y,s.y,n.y),t.x=Math.max(t.x,s.x,n.x),t.y=Math.max(t.y,s.y,n.y),{min:e,max:t}}getCommands(){const{v1:e,v2:t}=this;return[{type:"M",x:e.x,y:e.y},{type:"L",x:t.x,y:t.y}]}drawTo(e){const{v2:t}=this;return e.lineTo(t.x,t.y),this}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}}class $t extends k{constructor(t,s,n=0,o=1){super();w(this,"curves");w(this,"pointT",0);this.center=t,this.size=s,this.start=n,this.end=o;const{x:h,y:a}=this.center,c=new u(h+.5*this.size,a-.5*this.size),i=new u(h-.5*this.size,a-.5*this.size),l=new u(h,a+.5*this.size),y=new O(c,Math.SQRT1_2*this.size,-.25*Math.PI,.75*Math.PI),p=new O(i,Math.SQRT1_2*this.size,-.75*Math.PI,.25*Math.PI),x=new O(l,.5*Math.SQRT1_2*this.size,.75*Math.PI,1.25*Math.PI),f=new u(h,a+this.size),g=new u(h+this.size,a),m=new u().lerpVectors(g,f,.75),T=new u(h-this.size,a),C=new u().lerpVectors(T,f,.75),P=new q(g,m),A=new q(C,T);this.curves=[y,P,x,A,p]}getPoint(t){return this.getCurrentLine(t).getPoint(this.pointT)}getPointAt(t){return this.getPoint(t)}getCurrentLine(t){let s=(t*(this.end-this.start)+this.start)%1;s<0&&(s+=1),s*=9*Math.PI/8+1.5;let n;const o=.5*Math.PI;return s<o?(n=0,this.pointT=s/o):s<o+.75?(n=1,this.pointT=(s-o)/.75):s<5*Math.PI/8+.75?(n=2,this.pointT=(s-o-.75)/(Math.PI/8)):s<5*Math.PI/8+1.5?(n=3,this.pointT=(s-5*Math.PI/8-.75)/.75):(n=4,this.pointT=(s-5*Math.PI/8-1.5)/o),this.curves[n]}getTangent(t){return this.getCurrentLine(t).getTangent(this.pointT).normalize()}getNormal(t){const s=this.getCurrentLine(t);return new u(s.v2.y-s.v1.y,-(s.v2.x-s.v1.x)).normalize()}transform(t){return this.curves.forEach(s=>s.transform(t)),this}getMinMax(t=u.MAX,s=u.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}getCommands(){return this.curves.flatMap(t=>t.getCommands())}drawTo(t){return this.curves.forEach(s=>s.drawTo(t)),this}}class zt extends k{constructor(t,s=0,n=0,o=0,h=1){super();w(this,"curves",[]);w(this,"points",[]);this.center=t,this.radius=s,this.num=n,this.start=o,this.end=h;for(let a=0;a<this.num;a++){let c=a*2*Math.PI/this.num;c-=.5*Math.PI;const i=new u(this.radius*Math.cos(c),this.radius*Math.sin(c));i.add(this.center),this.points.push(i)}for(let a=0;a<this.num;a++)this.curves.push(new q(this.points[a],this.points[(a+1)%this.num]))}getPoint(t){return this.getCurrentLine(t),this.currentLine.getPoint(this.pointK)}getPointAt(t){return this.getPoint(t)}getCurrentLine(t){let s=(t*(this.end-this.start)+this.start)%1;s<0&&(s+=1);const n=s*this.num,o=Math.floor(n);return this.pointK=n-o,this.currentLine=this.curves[o],this.currentLine}getTangent(t){return this.getCurrentLine(t).getTangent(0).normalize()}getNormal(t){const s=this.getCurrentLine(t);return new u(s.v2.y-s.v1.y,-(s.v2.x-s.v1.x)).normalize()}transform(t){return this.curves.forEach(s=>s.transform(t)),this}getMinMax(t=u.MAX,s=u.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}getCommands(){return this.curves.flatMap(t=>t.getCommands())}drawTo(t){return this.curves.forEach(s=>s.drawTo(t)),this}}class it extends k{constructor(e=new u,t=new u,s=new u){super(),this.v0=e,this.v1=t,this.v2=s}getPoint(e,t=new u){const{v0:s,v1:n,v2:o}=this;return t.set(H(e,s.x,n.x,o.x),H(e,s.y,n.y,o.y)),t}transform(e){return this.v0.applyMatrix3(e),this.v1.applyMatrix3(e),this.v2.applyMatrix3(e),this}getMinMax(e=u.MAX,t=u.MIN){const{v0:s,v1:n,v2:o}=this,h=.5*(s.x+n.x),a=.5*(s.y+n.y),c=.5*(s.x+o.x),i=.5*(s.y+o.y);return e.x=Math.min(e.x,s.x,o.x,h,c),e.y=Math.min(e.y,s.y,o.y,a,i),t.x=Math.max(t.x,s.x,o.x,h,c),t.y=Math.max(t.y,s.y,o.y,a,i),{min:e,max:t}}getCommands(){const{v0:e,v1:t,v2:s}=this;return[{type:"M",x:e.x,y:e.y},{type:"Q",x1:t.x,y1:t.y,x:s.x,y:s.y}]}drawTo(e){const{v1:t,v2:s}=this;return e.quadraticCurveTo(t.x,t.y,s.x,s.y),this}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}}class rt extends k{constructor(t,s,n=1,o=0,h=1){super();w(this,"curves",[]);w(this,"pointT",0);this.center=t,this.rx=s,this.aspectRatio=n,this.start=o,this.end=h;const{x:a,y:c}=this.center,i=this.rx,l=this.rx/this.aspectRatio,y=[new u(a-i,c-l),new u(a+i,c-l),new u(a+i,c+l),new u(a-i,c+l)];for(let p=0;p<4;p++)this.curves.push(new q(y[p].clone(),y[(p+1)%4].clone()))}get x(){return this.center.x-this.rx}get y(){return this.center.y-this.rx/this.aspectRatio}get width(){return this.rx*2}get height(){return this.rx/this.aspectRatio*2}getPoint(t){return this.getCurrentLine(t).getPoint(this.pointT)}getPointAt(t){return this.getPoint(t)}getCurrentLine(t){let s=(t*(this.end-this.start)+this.start)%1;s<0&&(s+=1),s*=(1+this.aspectRatio)*2;let n;return s<this.aspectRatio?(n=0,this.pointT=s/this.aspectRatio):s<this.aspectRatio+1?(n=1,this.pointT=(s-this.aspectRatio)/1):s<2*this.aspectRatio+1?(n=2,this.pointT=(s-this.aspectRatio-1)/this.aspectRatio):(n=3,this.pointT=(s-2*this.aspectRatio-1)/1),this.curves[n]}getTangent(t){return this.getCurrentLine(t).getTangent(0).normalize()}getNormal(t){const{v1:s,v2:n}=this.getCurrentLine(t);return new u(n.y-s.y,-(n.x-s.x)).normalize()}transform(t){return this.curves.forEach(s=>s.transform(t)),this}getMinMax(t=u.MAX,s=u.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}getCommands(){return this.curves.flatMap(t=>t.getCommands())}drawTo(t){return this.curves.forEach(s=>s.drawTo(t)),this}}class ot extends k{constructor(e=[]){super(),this.points=e}getDivisions(e=12){return e*this.points.length}getPoint(e,t=new u){const{points:s}=this,n=(s.length-1)*e,o=Math.floor(n),h=n-o,a=s[o===0?o:o-1],c=s[o],i=s[o>s.length-2?s.length-1:o+1],l=s[o>s.length-3?s.length-1:o+2];return t.set(W(h,a.x,c.x,i.x,l.x),W(h,a.y,c.y,i.y,l.y)),t}copy(e){super.copy(e),this.points=[];for(let t=0,s=e.points.length;t<s;t++)this.points.push(e.points[t].clone());return this}}class X extends k{constructor(t){super();w(this,"curves",[]);w(this,"currentPoint",new u);w(this,"autoClose",!1);w(this,"_cacheLengths",[]);t&&this.setFromPoints(t)}addCurve(t){return this.curves.push(t),this}closePath(){const t=this.curves[0].getPoint(0),s=this.curves[this.curves.length-1].getPoint(1);return t.equals(s)||this.curves.push(new q(s,t)),this}getPoint(t,s=new u){const n=t*this.getLength(),o=this.getCurveLengths();let h=0;for(;h<o.length;){if(o[h]>=n){const a=o[h]-n,c=this.curves[h],i=c.getLength();return c.getPointAt(i===0?0:1-a/i,s)}h++}return s}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){super.updateArcLengths(),this._cacheLengths=[],this.getCurveLengths()}getCurveLengths(){if(this._cacheLengths.length===this.curves.length)return this._cacheLengths;const t=[];let s=0;for(let n=0,o=this.curves.length;n<o;n++)s+=this.curves[n].getLength(),t.push(s);return this._cacheLengths=t,t}getSpacedPoints(t=40){const s=[];for(let n=0;n<=t;n++)s.push(this.getPoint(n/t));return this.autoClose&&s.push(s[0]),s}getPoints(t=12){const s=[];let n;for(let o=0,h=this.curves;o<h.length;o++){const a=h[o],c=a.getPoints(a.getDivisions(t));for(let i=0;i<c.length;i++){const l=c[i];n&&n.equals(l)||(s.push(l),n=l)}}return this.autoClose&&s.length>1&&!s[s.length-1].equals(s[0])&&s.push(s[0]),s}setFromPoints(t){this.moveTo(t[0].x,t[0].y);for(let s=1,n=t.length;s<n;s++)this.lineTo(t[s].x,t[s].y);return this}bezierCurveTo(t,s,n,o,h,a){return this.curves.push(new Z(this.currentPoint.clone(),new u(t,s),new u(n,o),new u(h,a))),this.currentPoint.set(h,a),this}lineTo(t,s){return this.curves.push(new q(this.currentPoint.clone(),new u(t,s))),this.currentPoint.set(t,s),this}moveTo(t,s){return this.currentPoint.set(t,s),this}quadraticCurveTo(t,s,n,o){return this.curves.push(new it(this.currentPoint.clone(),new u(t,s),new u(n,o))),this.currentPoint.set(n,o),this}rect(t,s,n,o){return this.curves.push(new rt(new u(t+n/2,s+o/2),n/2,n/o)),this.currentPoint.set(t,s),this}splineThru(t){const s=[this.currentPoint.clone()].concat(t);return this.curves.push(new ot(s)),this.currentPoint.copy(t[t.length-1]),this}arc(t,s,n,o,h,a=!1){const c=this.currentPoint;return this.absarc(t+c.x,s+c.y,n,o,h,a),this}absarc(t,s,n,o,h,a=!1){return this.absellipse(t,s,n,n,o,h,a),this}ellipse(t,s,n,o,h,a,c=!1,i=0){const l=this.currentPoint;return this.absellipse(t+l.x,s+l.y,n,o,h,a,c,i),this}absellipse(t,s,n,o,h,a,c=!1,i=0){const l=new tt(t,s,n,o,h,a,c,i);if(this.curves.length>0){const y=l.getPoint(0);y.equals(this.currentPoint)||this.lineTo(y.x,y.y)}return this.curves.push(l),this.currentPoint.copy(l.getPoint(1)),this}getCommands(){return this.curves.flatMap(t=>t.getCommands())}getMinMax(t=u.MAX,s=u.MIN){return this.curves.forEach(n=>n.getMinMax(t,s)),{min:t,max:s}}drawTo(t){var n;const s=(n=this.curves[0])==null?void 0:n.getPoint(0);return s&&t.moveTo(s.x,s.y),this.curves.forEach(o=>o.drawTo(t)),this.autoClose&&t.closePath(),this}copy(t){super.copy(t),this.curves=[];for(let s=0,n=t.curves.length;s<n;s++)this.curves.push(t.curves[s].clone());return this.autoClose=t.autoClose,this.currentPoint.copy(t.currentPoint),this}}class L{constructor(e){w(this,"currentPath",new X);w(this,"paths",[this.currentPath]);w(this,"userData");e&&(e instanceof L?this.addPath(e):Array.isArray(e)?this.addCommands(e):this.addData(e))}addPath(e){return e instanceof L?this.paths.push(...e.paths.map(t=>t.clone())):this.paths.push(e),this}closePath(){return this.currentPath.closePath(),this}moveTo(e,t){const{currentPoint:s,curves:n}=this.currentPath;return(s.x!==e||s.y!==t)&&(n.length?(this.currentPath=new X().moveTo(e,t),this.paths.push(this.currentPath)):this.currentPath.moveTo(e,t)),this}lineTo(e,t){return this.currentPath.lineTo(e,t),this}bezierCurveTo(e,t,s,n,o,h){return this.currentPath.bezierCurveTo(e,t,s,n,o,h),this}quadraticCurveTo(e,t,s,n){return this.currentPath.quadraticCurveTo(e,t,s,n),this}arc(e,t,s,n,o,h){return this.currentPath.absarc(e,t,s,n,o,!h),this}arcTo(e,t,s,n,o){const h=this.currentPath.currentPoint,a=h.x,c=h.y,i=e-a,l=t-c,y=s-e,p=n-t,x=Math.sqrt(i*i+l*l),f=Math.sqrt(y*y+p*p);if(x<o||f<o)return this.lineTo(s,n),this;const g={x:i/x,y:l/x},m={x:y/f,y:p/f},T=e-g.y*o,C=t+g.x*o,P=Math.atan2(g.y,g.x);let b=Math.atan2(m.y,m.x)-P;return b>Math.PI?b-=2*Math.PI:b<-Math.PI&&(b+=2*Math.PI),this.arc(T,C,o,P,P+b,!1),this.lineTo(s,n),this}ellipse(e,t,s,n,o,h,a,c){return this.currentPath.absellipse(e,t,s,n,h,a,!c,o),this}rect(e,t,s,n){return this.currentPath.rect(e,t,s,n),this}addCommands(e){return xt(e,this),this}addData(e){return this.addCommands(dt(e)),this}splineThru(e){return this.currentPath.splineThru(e),this}forEachCurve(e){return this.paths.forEach(t=>t.curves.forEach(s=>e(s))),this}transform(e){return this.forEachCurve(t=>t.transform(e)),this}getMinMax(e=u.MAX,t=u.MIN){return this.forEachCurve(s=>s.getMinMax(e,t)),{min:e,max:t}}getBoundingBox(){const{min:e,max:t}=this.getMinMax();return new S(e.x,e.y,t.x-e.x,t.y-e.y)}getCommands(){return this.paths.flatMap(e=>e.curves.flatMap(t=>t.getCommands()))}getData(){return this.paths.map(e=>e.getData()).join(" ")}getSvgString(){const{x:e,y:t,width:s,height:n}=this.getBoundingBox();return`<svg viewBox="${e} ${t} ${s} ${n}" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="currentColor" d="${this.getData()}"></path></svg>`}getSvgDataUri(){return`data:image/svg+xml;base64,${btoa(this.getSvgString())}`}drawTo(e){this.paths.forEach(t=>{t.drawTo(e)})}strokeTo(e){this.drawTo(e),e.stroke()}fillTo(e){this.drawTo(e),e.fill()}copy(e){return this.currentPath=e.currentPath.clone(),this.paths=e.paths.map(t=>t.clone()),this.userData=e.userData,this}toCanvas(e=!0){const t=document.createElement("canvas"),{left:s,top:n,width:o,height:h}=this.getBoundingBox();t.width=o,t.height=h;const a=t.getContext("2d");return a&&(a.translate(-s,-n),e?this.fillTo(a):this.strokeTo(a)),t}clone(){return new this.constructor().copy(this)}}const G="px",at=90,ht=["mm","cm","in","pt","pc","px"],_={mm:{mm:1,cm:.1,in:1/25.4,pt:72/25.4,pc:6/25.4,px:-1},cm:{mm:10,cm:1,in:1/2.54,pt:72/2.54,pc:6/2.54,px:-1},in:{mm:25.4,cm:2.54,in:1,pt:72,pc:6,px:-1},pt:{mm:25.4/72,cm:2.54/72,in:1/72,pt:1,pc:6/72,px:-1},pc:{mm:25.4/6,cm:2.54/6,in:1/6,pt:72/6,pc:1,px:-1},px:{px:1}};function v(r){let e="px";if(typeof r=="string"||r instanceof String)for(let s=0,n=ht.length;s<n;s++){const o=ht[s];if(r.endsWith(o)){e=o,r=r.substring(0,r.length-o.length);break}}let t;return e==="px"&&G!=="px"?t=_.in[G]/at:(t=_[e][G],t<0&&(t=_[e].in*at)),t*Number.parseFloat(r)}const qt=new I,F=new I,ct=new I,lt=new I;function Dt(r,e,t){if(!(r.hasAttribute("transform")||r.nodeName==="use"&&(r.hasAttribute("x")||r.hasAttribute("y"))))return null;const s=Xt(r);return t.length>0&&s.premultiply(t[t.length-1]),e.copy(s),t.push(s),s}function Xt(r){const e=new I,t=qt;if(r.nodeName==="use"&&(r.hasAttribute("x")||r.hasAttribute("y"))&&e.translate(v(r.getAttribute("x")),v(r.getAttribute("y"))),r.hasAttribute("transform")){const s=r.getAttribute("transform").split(")");for(let n=s.length-1;n>=0;n--){const o=s[n].trim();if(o==="")continue;const h=o.indexOf("("),a=o.length;if(h>0&&h<a){const c=o.slice(0,h),i=N(o.slice(h+1));switch(t.identity(),c){case"translate":if(i.length>=1){const l=i[0];let y=0;i.length>=2&&(y=i[1]),t.translate(l,y)}break;case"rotate":if(i.length>=1){let l=0,y=0,p=0;l=i[0]*Math.PI/180,i.length>=3&&(y=i[1],p=i[2]),F.makeTranslation(-y,-p),ct.makeRotation(l),lt.multiplyMatrices(ct,F),F.makeTranslation(y,p),t.multiplyMatrices(F,lt)}break;case"scale":i.length>=1&&t.scale(i[0],i[1]??i[0]);break;case"skewX":i.length===1&&t.set(1,Math.tan(i[0]*Math.PI/180),0,0,1,0,0,0,1);break;case"skewY":i.length===1&&t.set(1,0,0,Math.tan(i[0]*Math.PI/180),1,0,0,0,1);break;case"matrix":i.length===6&&t.set(i[0],i[2],i[4],i[1],i[3],i[5],0,0,1);break}}e.premultiply(t)}}return e}function Ot(r){return new L().addPath(new X().absarc(v(r.getAttribute("cx")||0),v(r.getAttribute("cy")||0),v(r.getAttribute("r")||0),0,Math.PI*2))}function Rt(r,e){if(!(!r.sheet||!r.sheet.cssRules||!r.sheet.cssRules.length))for(let t=0;t<r.sheet.cssRules.length;t++){const s=r.sheet.cssRules[t];if(s.type!==1)continue;const n=s.selectorText.split(/,/g).filter(Boolean).map(o=>o.trim());for(let o=0;o<n.length;o++){const h=Object.fromEntries(Object.entries(s.style).filter(([,a])=>a!==""));e[n[o]]=Object.assign(e[n[o]]||{},h)}}}function Ft(r){return new L().addPath(new X().absellipse(v(r.getAttribute("cx")||0),v(r.getAttribute("cy")||0),v(r.getAttribute("rx")||0),v(r.getAttribute("ry")||0),0,Math.PI*2))}function Yt(r){return new L().moveTo(v(r.getAttribute("x1")||0),v(r.getAttribute("y1")||0)).lineTo(v(r.getAttribute("x2")||0),v(r.getAttribute("y2")||0))}function Ut(r){const e=new L,t=r.getAttribute("d");return!t||t==="none"?null:(e.addData(t),e)}const Gt=/([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;function _t(r){var s;const e=new L;let t=0;return(s=r.getAttribute("points"))==null||s.replace(Gt,(n,o,h)=>{const a=v(o),c=v(h);return t===0?e.moveTo(a,c):e.lineTo(a,c),t++,n}),e.currentPath.autoClose=!0,e}const Qt=/([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g;function Vt(r){var s;const e=new L;let t=0;return(s=r.getAttribute("points"))==null||s.replace(Qt,(n,o,h)=>{const a=v(o),c=v(h);return t===0?e.moveTo(a,c):e.lineTo(a,c),t++,n}),e.currentPath.autoClose=!1,e}function Bt(r){const e=v(r.getAttribute("x")||0),t=v(r.getAttribute("y")||0),s=v(r.getAttribute("rx")||r.getAttribute("ry")||0),n=v(r.getAttribute("ry")||r.getAttribute("rx")||0),o=v(r.getAttribute("width")),h=v(r.getAttribute("height")),a=1-.551915024494,c=new L;return c.moveTo(e+s,t),c.lineTo(e+o-s,t),(s!==0||n!==0)&&c.bezierCurveTo(e+o-s*a,t,e+o,t+n*a,e+o,t+n),c.lineTo(e+o,t+h-n),(s!==0||n!==0)&&c.bezierCurveTo(e+o,t+h-n*a,e+o-s*a,t+h,e+o-s,t+h),c.lineTo(e+s,t+h),(s!==0||n!==0)&&c.bezierCurveTo(e+s*a,t+h,e,t+h-n*a,e,t+h-n),c.lineTo(e,t+n),(s!==0||n!==0)&&c.bezierCurveTo(e,t+n*a,e+s*a,t,e+s,t),c}function E(r,e,t){e=Object.assign({},e);let s={};if(r.hasAttribute("class")){const a=r.getAttribute("class").split(/\s/).filter(Boolean).map(c=>c.trim());for(let c=0;c<a.length;c++)s=Object.assign(s,t[`.${a[c]}`])}r.hasAttribute("id")&&(s=Object.assign(s,t[`#${r.getAttribute("id")}`]));function n(a,c,i){i===void 0&&(i=function(y){return y.startsWith("url")&&console.warn("url access in attributes is not implemented."),y}),r.hasAttribute(a)&&(e[c]=i(r.getAttribute(a))),s[a]&&(e[c]=i(s[a])),r.style&&r.style[a]!==""&&(e[c]=i(r.style[a]))}function o(a){return Math.max(0,Math.min(1,v(a)))}function h(a){return Math.max(0,v(a))}return n("fill","fill"),n("fill-opacity","fillOpacity",o),n("fill-rule","fillRule"),n("opacity","opacity",o),n("stroke","stroke"),n("stroke-dashoffset","strokeDashoffset"),n("stroke-dasharray","strokeDasharray"),n("stroke-linecap","strokeLineCap"),n("stroke-linejoin","strokeLineJoin"),n("stroke-miterlimit","strokeMiterLimit",h),n("stroke-opacity","strokeOpacity",o),n("stroke-width","strokeWidth",h),n("visibility","visibility"),e}function Q(r,e,t=[]){var l;if(r.nodeType!==1)return t;let s=!1,n=null;const o={};switch(r.nodeName){case"svg":e=E(r,e,o);break;case"style":Rt(r,o);break;case"g":e=E(r,e,o);break;case"path":e=E(r,e,o),r.hasAttribute("d")&&(n=Ut(r));break;case"rect":e=E(r,e,o),n=Bt(r);break;case"polygon":e=E(r,e,o),n=_t(r);break;case"polyline":e=E(r,e,o),n=Vt(r);break;case"circle":e=E(r,e,o),n=Ot(r);break;case"ellipse":e=E(r,e,o),n=Ft(r);break;case"line":e=E(r,e,o),n=Yt(r);break;case"defs":s=!0;break;case"use":{e=E(r,e,o);const p=(r.getAttributeNS("http://www.w3.org/1999/xlink","href")||"").substring(1),x=(l=r.viewportElement)==null?void 0:l.getElementById(p);x?Q(x,e,t):console.warn(`'use node' references non-existent node id: ${p}`);break}default:console.warn(r);break}const h=new I,a=[],c=Dt(r,h,a);n&&(n.transform(h),t.push(n),n.userData={node:r,style:e});const i=r.childNodes;for(let y=0,p=i.length;y<p;y++){const x=i[y];s&&x.nodeName!=="style"&&x.nodeName!=="defs"||Q(x,e,t)}return c&&(a.pop(),a.length>0?h.copy(a[a.length-1]):h.identity()),t}const ut="data:image/svg+xml;",yt=`${ut}base64,`,ft=`${ut}charset=utf8,`;function Wt(r){let e,t;return typeof r=="string"?(r.startsWith(yt)?(r=r.substring(yt.length,r.length),t=atob(r)):r.startsWith(ft)?(r=r.substring(ft.length,r.length),t=decodeURIComponent(r)):t=r,e=new DOMParser().parseFromString(t,"image/svg+xml").documentElement):e=r,Q(e,{fill:"#000",fillOpacity:1,strokeOpacity:1,strokeWidth:1,strokeLineJoin:"miter",strokeLineCap:"butt",strokeMiterLimit:4})}M.BoundingBox=S,M.CircleCurve=O,M.CubicBezierCurve=Z,M.Curve=k,M.CurvePath=X,M.EllipseCurve=tt,M.HeartCurve=$t,M.LineCurve=q,M.Matrix3=I,M.Path2D=L,M.PloygonCurve=zt,M.Point2D=u,M.QuadraticBezierCurve=it,M.RectangularCurve=rt,M.SplineCurve=ot,M.parseSvg=Wt,Object.defineProperty(M,Symbol.toStringTag,{value:"Module"})});
package/dist/index.mjs CHANGED
@@ -2702,10 +2702,23 @@ function parseNode(node, style, paths = []) {
2702
2702
  return paths;
2703
2703
  }
2704
2704
 
2705
+ const dataUri = "data:image/svg+xml;";
2706
+ const base64DataUri = `${dataUri}base64,`;
2707
+ const utf8DataUri = `${dataUri}charset=utf8,`;
2705
2708
  function parseSvg(svg) {
2706
2709
  let node;
2710
+ let xml;
2707
2711
  if (typeof svg === "string") {
2708
- node = new DOMParser().parseFromString(svg, "image/svg+xml").documentElement;
2712
+ if (svg.startsWith(base64DataUri)) {
2713
+ svg = svg.substring(base64DataUri.length, svg.length);
2714
+ xml = atob(svg);
2715
+ } else if (svg.startsWith(utf8DataUri)) {
2716
+ svg = svg.substring(utf8DataUri.length, svg.length);
2717
+ xml = decodeURIComponent(svg);
2718
+ } else {
2719
+ xml = svg;
2720
+ }
2721
+ node = new DOMParser().parseFromString(xml, "image/svg+xml").documentElement;
2709
2722
  } else {
2710
2723
  node = svg;
2711
2724
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "modern-path2d",
3
3
  "type": "module",
4
- "version": "0.1.5",
4
+ "version": "0.1.6",
5
5
  "packageManager": "pnpm@9.9.0",
6
6
  "description": "A modern Path2D library, fully compatible with Web Path2D, with additional support for path animation, path deformation, path playback, etc.",
7
7
  "author": "wxm",