From b74be89a7735ded00cc84dfe9191b09b68fb9500 Mon Sep 17 00:00:00 2001 From: herrstrietzel Date: Tue, 28 Jan 2025 02:40:38 +0100 Subject: [PATCH] fix bounding box, force 1st absolute M --- dist/svg-path-commander.cjs | 2 +- dist/svg-path-commander.cjs.map | 2 +- dist/svg-path-commander.d.ts | 4 +- dist/svg-path-commander.js | 2 +- dist/svg-path-commander.js.map | 2 +- dist/svg-path-commander.mjs | 2 +- dist/svg-path-commander.mjs.map | 2 +- package-lock.json | 4135 +++++++++++++++++++++++++++++++ package.json | 2 +- src/parser/parsePathString.ts | 3 +- 10 files changed, 4146 insertions(+), 10 deletions(-) create mode 100644 package-lock.json diff --git a/dist/svg-path-commander.cjs b/dist/svg-path-commander.cjs index b82c205..f0733d5 100644 --- a/dist/svg-path-commander.cjs +++ b/dist/svg-path-commander.cjs @@ -1,2 +1,2 @@ -"use strict";var Qe=Object.defineProperty;var Ze=(e,t,s)=>t in e?Qe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var b=(e,t,s)=>Ze(e,typeof t!="symbol"?t+"":t,s);var De=Object.defineProperty,Oe=(e,t,s)=>t in e?De(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,S=(e,t,s)=>Oe(e,typeof t!="symbol"?t+"":t,s);const Be={a:1,b:0,c:0,d:1,e:0,f:0,m11:1,m12:0,m13:0,m14:0,m21:0,m22:1,m23:0,m24:0,m31:0,m32:0,m33:1,m34:0,m41:0,m42:0,m43:0,m44:1,is2D:!0,isIdentity:!0},Gt=e=>(e instanceof Float64Array||e instanceof Float32Array||Array.isArray(e)&&e.every(t=>typeof t=="number"))&&[6,16].some(t=>e.length===t),te=e=>e instanceof DOMMatrix||e instanceof C||typeof e=="object"&&Object.keys(Be).every(t=>e&&t in e),lt=e=>{const t=new C,s=Array.from(e);if(!Gt(s))throw TypeError(`CSSMatrix: "${s.join(",")}" must be an array with 6/16 numbers.`);if(s.length===16){const[r,n,i,o,l,c,a,u,f,h,y,m,g,A,M,N]=s;t.m11=r,t.a=r,t.m21=l,t.c=l,t.m31=f,t.m41=g,t.e=g,t.m12=n,t.b=n,t.m22=c,t.d=c,t.m32=h,t.m42=A,t.f=A,t.m13=i,t.m23=a,t.m33=y,t.m43=M,t.m14=o,t.m24=u,t.m34=m,t.m44=N}else if(s.length===6){const[r,n,i,o,l,c]=s;t.m11=r,t.a=r,t.m12=n,t.b=n,t.m21=i,t.c=i,t.m22=o,t.d=o,t.m41=l,t.e=l,t.m42=c,t.f=c}return t},ee=e=>{if(te(e))return lt([e.m11,e.m12,e.m13,e.m14,e.m21,e.m22,e.m23,e.m24,e.m31,e.m32,e.m33,e.m34,e.m41,e.m42,e.m43,e.m44]);throw TypeError(`CSSMatrix: "${JSON.stringify(e)}" is not a DOMMatrix / CSSMatrix / JSON compatible object.`)},ne=e=>{if(typeof e!="string")throw TypeError(`CSSMatrix: "${JSON.stringify(e)}" is not a string.`);const t=String(e).replace(/\s/g,"");let s=new C;const r=`CSSMatrix: invalid transform string "${e}"`;return t.split(")").filter(n=>n).forEach(n=>{const[i,o]=n.split("(");if(!o)throw TypeError(r);const l=o.split(",").map(m=>m.includes("rad")?parseFloat(m)*(180/Math.PI):parseFloat(m)),[c,a,u,f]=l,h=[c,a,u],y=[c,a,u,f];if(i==="perspective"&&c&&[a,u].every(m=>m===void 0))s.m34=-1/c;else if(i.includes("matrix")&&[6,16].includes(l.length)&&l.every(m=>!Number.isNaN(+m))){const m=l.map(g=>Math.abs(g)<1e-6?0:g);s=s.multiply(lt(m))}else if(i==="translate3d"&&h.every(m=>!Number.isNaN(+m)))s=s.translate(c,a,u);else if(i==="translate"&&c&&u===void 0)s=s.translate(c,a||0,0);else if(i==="rotate3d"&&y.every(m=>!Number.isNaN(+m))&&f)s=s.rotateAxisAngle(c,a,u,f);else if(i==="rotate"&&c&&[a,u].every(m=>m===void 0))s=s.rotate(0,0,c);else if(i==="scale3d"&&h.every(m=>!Number.isNaN(+m))&&h.some(m=>m!==1))s=s.scale(c,a,u);else if(i==="scale"&&!Number.isNaN(c)&&(c!==1||a!==1)&&u===void 0){const m=Number.isNaN(+a)?c:a;s=s.scale(c,m,1)}else if(i==="skew"&&(c||!Number.isNaN(c)&&a)&&u===void 0)s=s.skew(c,a||0);else if(["translate","rotate","scale","skew"].some(m=>i.includes(m))&&/[XYZ]/.test(i)&&c&&[a,u].every(m=>m===void 0))if(i==="skewX"||i==="skewY")s=s[i](c);else{const m=i.replace(/[XYZ]/,""),g=i.replace(m,""),A=["X","Y","Z"].indexOf(g),M=m==="scale"?1:0,N=[A===0?c:M,A===1?c:M,A===2?c:M];s=s[m](...N)}else throw TypeError(r)}),s},zt=(e,t)=>t?[e.a,e.b,e.c,e.d,e.e,e.f]:[e.m11,e.m12,e.m13,e.m14,e.m21,e.m22,e.m23,e.m24,e.m31,e.m32,e.m33,e.m34,e.m41,e.m42,e.m43,e.m44],se=(e,t,s)=>{const r=new C;return r.m41=e,r.e=e,r.m42=t,r.f=t,r.m43=s,r},re=(e,t,s)=>{const r=new C,n=Math.PI/180,i=e*n,o=t*n,l=s*n,c=Math.cos(i),a=-Math.sin(i),u=Math.cos(o),f=-Math.sin(o),h=Math.cos(l),y=-Math.sin(l),m=u*h,g=-u*y;r.m11=m,r.a=m,r.m12=g,r.b=g,r.m13=f;const A=a*f*h+c*y;r.m21=A,r.c=A;const M=c*h-a*f*y;return r.m22=M,r.d=M,r.m23=-a*u,r.m31=a*y-c*f*h,r.m32=a*h+c*f*y,r.m33=c*u,r},ie=(e,t,s,r)=>{const n=new C,i=Math.sqrt(e*e+t*t+s*s);if(i===0)return n;const o=e/i,l=t/i,c=s/i,a=r*(Math.PI/360),u=Math.sin(a),f=Math.cos(a),h=u*u,y=o*o,m=l*l,g=c*c,A=1-2*(m+g)*h;n.m11=A,n.a=A;const M=2*(o*l*h+c*u*f);n.m12=M,n.b=M,n.m13=2*(o*c*h-l*u*f);const N=2*(l*o*h-c*u*f);n.m21=N,n.c=N;const x=1-2*(g+y)*h;return n.m22=x,n.d=x,n.m23=2*(l*c*h+o*u*f),n.m31=2*(c*o*h+l*u*f),n.m32=2*(c*l*h-o*u*f),n.m33=1-2*(y+m)*h,n},oe=(e,t,s)=>{const r=new C;return r.m11=e,r.a=e,r.m22=t,r.d=t,r.m33=s,r},At=(e,t)=>{const s=new C;if(e){const r=e*Math.PI/180,n=Math.tan(r);s.m21=n,s.c=n}if(t){const r=t*Math.PI/180,n=Math.tan(r);s.m12=n,s.b=n}return s},ce=e=>At(e,0),le=e=>At(0,e),U=(e,t)=>{const s=t.m11*e.m11+t.m12*e.m21+t.m13*e.m31+t.m14*e.m41,r=t.m11*e.m12+t.m12*e.m22+t.m13*e.m32+t.m14*e.m42,n=t.m11*e.m13+t.m12*e.m23+t.m13*e.m33+t.m14*e.m43,i=t.m11*e.m14+t.m12*e.m24+t.m13*e.m34+t.m14*e.m44,o=t.m21*e.m11+t.m22*e.m21+t.m23*e.m31+t.m24*e.m41,l=t.m21*e.m12+t.m22*e.m22+t.m23*e.m32+t.m24*e.m42,c=t.m21*e.m13+t.m22*e.m23+t.m23*e.m33+t.m24*e.m43,a=t.m21*e.m14+t.m22*e.m24+t.m23*e.m34+t.m24*e.m44,u=t.m31*e.m11+t.m32*e.m21+t.m33*e.m31+t.m34*e.m41,f=t.m31*e.m12+t.m32*e.m22+t.m33*e.m32+t.m34*e.m42,h=t.m31*e.m13+t.m32*e.m23+t.m33*e.m33+t.m34*e.m43,y=t.m31*e.m14+t.m32*e.m24+t.m33*e.m34+t.m34*e.m44,m=t.m41*e.m11+t.m42*e.m21+t.m43*e.m31+t.m44*e.m41,g=t.m41*e.m12+t.m42*e.m22+t.m43*e.m32+t.m44*e.m42,A=t.m41*e.m13+t.m42*e.m23+t.m43*e.m33+t.m44*e.m43,M=t.m41*e.m14+t.m42*e.m24+t.m43*e.m34+t.m44*e.m44;return lt([s,r,n,i,o,l,c,a,u,f,h,y,m,g,A,M])};class C{constructor(t){return this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this.m11=1,this.m12=0,this.m13=0,this.m14=0,this.m21=0,this.m22=1,this.m23=0,this.m24=0,this.m31=0,this.m32=0,this.m33=1,this.m34=0,this.m41=0,this.m42=0,this.m43=0,this.m44=1,t?this.setMatrixValue(t):this}get isIdentity(){return this.m11===1&&this.m12===0&&this.m13===0&&this.m14===0&&this.m21===0&&this.m22===1&&this.m23===0&&this.m24===0&&this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m41===0&&this.m42===0&&this.m43===0&&this.m44===1}get is2D(){return this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m43===0&&this.m44===1}setMatrixValue(t){return typeof t=="string"&&t.length&&t!=="none"?ne(t):Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?lt(t):typeof t=="object"?ee(t):this}toFloat32Array(t){return Float32Array.from(zt(this,t))}toFloat64Array(t){return Float64Array.from(zt(this,t))}toString(){const{is2D:t}=this,s=this.toFloat64Array(t).join(", ");return`${t?"matrix":"matrix3d"}(${s})`}toJSON(){const{is2D:t,isIdentity:s}=this;return{...this,is2D:t,isIdentity:s}}multiply(t){return U(this,t)}translate(t,s,r){const n=t;let i=s,o=r;return typeof i>"u"&&(i=0),typeof o>"u"&&(o=0),U(this,se(n,i,o))}scale(t,s,r){const n=t;let i=s,o=r;return typeof i>"u"&&(i=t),typeof o>"u"&&(o=1),U(this,oe(n,i,o))}rotate(t,s,r){let n=t,i=s||0,o=r||0;return typeof t=="number"&&typeof s>"u"&&typeof r>"u"&&(o=n,n=0,i=0),U(this,re(n,i,o))}rotateAxisAngle(t,s,r,n){if([t,s,r,n].some(i=>Number.isNaN(+i)))throw new TypeError("CSSMatrix: expecting 4 values");return U(this,ie(t,s,r,n))}skewX(t){return U(this,ce(t))}skewY(t){return U(this,le(t))}skew(t,s){return U(this,At(t,s))}transformPoint(t){const s=this.m11*t.x+this.m21*t.y+this.m31*t.z+this.m41*t.w,r=this.m12*t.x+this.m22*t.y+this.m32*t.z+this.m42*t.w,n=this.m13*t.x+this.m23*t.y+this.m33*t.z+this.m43*t.w,i=this.m14*t.x+this.m24*t.y+this.m34*t.z+this.m44*t.w;return t instanceof DOMPoint?new DOMPoint(s,r,n,i):{x:s,y:r,z:n,w:i}}}S(C,"Translate",se),S(C,"Rotate",re),S(C,"RotateAxisAngle",ie),S(C,"Scale",oe),S(C,"SkewX",ce),S(C,"SkewY",le),S(C,"Skew",At),S(C,"Multiply",U),S(C,"fromArray",lt),S(C,"fromMatrix",ee),S(C,"fromString",ne),S(C,"toArray",zt),S(C,"isCompatibleArray",Gt),S(C,"isCompatibleObject",te);const V={origin:[0,0,0],round:4},tt={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},qt=e=>{let t=e.pathValue[e.segmentStart],s=t.toLowerCase();const{data:r}=e;for(;r.length>=tt[s]&&(s==="m"&&r.length>2?(e.segments.push([t].concat(r.splice(0,2))),s="l",t=t==="m"?"l":"L"):e.segments.push([t].concat(r.splice(0,tt[s]))),!!tt[s]););},Z="SVGPathCommander Error",ae=e=>{const{index:t,pathValue:s}=e,r=s.charCodeAt(t);if(r===48){e.param=0,e.index+=1;return}if(r===49){e.param=1,e.index+=1;return}e.err=`${Z}: invalid Arc flag "${s[t]}", expecting 0 or 1 at index ${t}`},J=e=>e>=48&&e<=57,K="Invalid path value",ue=e=>{const{max:t,pathValue:s,index:r}=e;let n=r,i=!1,o=!1,l=!1,c=!1,a;if(n>=t){e.err=`${Z}: ${K} at index ${n}, "pathValue" is missing param`;return}if(a=s.charCodeAt(n),(a===43||a===45)&&(n+=1,a=s.charCodeAt(n)),!J(a)&&a!==46){e.err=`${Z}: ${K} at index ${n}, "${s[n]}" is not a number`;return}if(a!==46){if(i=a===48,n+=1,a=s.charCodeAt(n),i&&n[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279,10,13,8232,8233,32,9,11,12,160].includes(e),et=e=>{const{pathValue:t,max:s}=e;for(;e.index{switch(e|32){case 109:case 122:case 108:case 104:case 118:case 99:case 115:case 113:case 116:case 97:return!0;default:return!1}},he=e=>J(e)||e===43||e===45||e===46,ye=e=>(e|32)===97,ge=e=>{switch(e|32){case 109:case 77:return!0;default:return!1}},Dt=e=>{var c;const{max:t,pathValue:s,index:r,segments:n}=e,i=s.charCodeAt(r),o=tt[s[r].toLowerCase()];if(e.segmentStart=r,!fe(i)){e.err=`${Z}: ${K} "${s[r]}" is not a path command at index ${r}`;return}const l=n[n.length-1];if(!ge(i)&&((c=l==null?void 0:l[0])==null?void 0:c.toLocaleLowerCase())==="z"){e.err=`${Z}: ${K} "${s[r]}" is not a MoveTo path command at index ${r}`;return}if(e.index+=1,et(e),e.data=[],!o){qt(e);return}for(;;){for(let a=o;a>0;a-=1){if(ye(i)&&(a===3||a===4)?ae(e):ue(e),e.err.length)return;e.data.push(e.param),et(e),e.index=e.max||!he(s.charCodeAt(e.index)))break}qt(e)};class Ot{constructor(t){this.segments=[],this.pathValue=t,this.max=t.length,this.index=0,this.param=0,this.segmentStart=0,this.data=[],this.err=""}}const D=e=>{if(typeof e!="string")return e.slice(0);const t=new Ot(e);for(et(t);t.index{const[n]=e,i=n.toUpperCase();if(t===0||i===n)return e;if(i==="A")return[i,e[1],e[2],e[3],e[4],e[5],e[6]+s,e[7]+r];if(i==="V")return[i,e[1]+r];if(i==="H")return[i,e[1]+s];if(i==="L")return[i,e[1]+s,e[2]+r];{const l=[],c=e.length;for(let a=1;a{let s=e.length,r,n="M",i="M",o=!1,l=0,c=0,a=0,u=0,f=0;for(let h=0;h{const t=D(e);return O(t,at)},Bt=(e,t,s,r)=>{const[n]=e,i=n.toLowerCase();if(t===0||n===i)return e;if(i==="a")return[i,e[1],e[2],e[3],e[4],e[5],e[6]-s,e[7]-r];if(i==="v")return[i,e[1]-r];if(i==="h")return[i,e[1]-s];if(i==="l")return[i,e[1]-s,e[2]-r];{const l=[],c=e.length;for(let a=1;a{const t=D(e);return O(t,Bt)},st=(e,t,s)=>{const{sin:r,cos:n}=Math,i=e*n(s)-t*r(s),o=e*r(s)+t*n(s);return{x:i,y:o}},Mt=(e,t,s,r,n,i,o,l,c,a)=>{let u=e,f=t,h=s,y=r,m=l,g=c;const A=Math.PI*120/180,M=Math.PI/180*(+n||0);let N=[],x,p,w,T,k;if(a)[p,w,T,k]=a;else{x=st(u,f,-M),u=x.x,f=x.y,x=st(m,g,-M),m=x.x,g=x.y;const $=(u-m)/2,j=(f-g)/2;let q=$*$/(h*h)+j*j/(y*y);q>1&&(q=Math.sqrt(q),h*=q,y*=q);const vt=h*h,$t=y*y,Jt=(i===o?-1:1)*Math.sqrt(Math.abs((vt*$t-vt*j*j-$t*$*$)/(vt*j*j+$t*$*$)));T=Jt*h*j/y+(u+m)/2,k=Jt*-y*$/h+(f+g)/2,p=Math.asin(((f-k)/y*10**9>>0)/10**9),w=Math.asin(((g-k)/y*10**9>>0)/10**9),p=uw&&(p-=Math.PI*2),!o&&w>p&&(w-=Math.PI*2)}let I=w-p;if(Math.abs(I)>A){const $=w,j=m,q=g;w=p+A*(o&&w>p?1:-1),m=T+h*Math.cos(w),g=k+y*Math.sin(w),N=Mt(m,g,h,y,n,0,o,j,q,[w,$,T,k])}I=w-p;const z=Math.cos(p),v=Math.sin(p),B=Math.cos(w),W=Math.sin(w),E=Math.tan(I/4),L=4/3*h*E,R=4/3*y*E,H=[u,f],Q=[u+L*v,f-R*z],_=[m+L*W,g-R*B],G=[m,g];if(Q[0]=2*H[0]-Q[0],Q[1]=2*H[1]-Q[1],a)return[Q[0],Q[1],_[0],_[1],G[0],G[1]].concat(N);N=[Q[0],Q[1],_[0],_[1],G[0],G[1]].concat(N);const X=[];for(let $=0,j=N.length;${const o=.3333333333333333,l=2/3;return[o*e+l*s,o*t+l*r,o*n+l*s,o*i+l*r,n,i]},F=(e,t,s)=>{const[r,n]=e,[i,o]=t;return[r+(i-r)*s,n+(o-n)*s]},Pt=(e,t,s,r)=>{const n=F([e,t],[s,r],.3333333333333333),i=F([e,t],[s,r],2/3);return[n[0],n[1],i[0],i[1],s,r]},pe=(e,t)=>{const[s]=e,r=e.slice(1).map(Number),[n,i]=r,{x1:o,y1:l,x:c,y:a}=t;return"TQ".includes(s)||(t.qx=null,t.qy=null),s==="M"?(t.x=n,t.y=i,e):s==="A"?["C"].concat(Mt(o,l,r[0],r[1],r[2],r[3],r[4],r[5],r[6])):s==="Q"?(t.qx=n,t.qy=i,["C"].concat(xe(o,l,r[0],r[1],r[2],r[3]))):s==="L"?["C"].concat(Pt(o,l,n,i)):s==="Z"?["C"].concat(Pt(o,l,c,a)):e},Nt=(e,t)=>{const[s]=e,r=s.toUpperCase(),n=s!==r,{x1:i,y1:o,x2:l,y2:c,x:a,y:u}=t,f=e.slice(1);let h=f.map((y,m)=>y+(n?m%2?u:a:0));if("TQ".includes(r)||(t.qx=null,t.qy=null),r==="A")return h=f.slice(0,-2).concat(f[5]+(n?a:0),f[6]+(n?u:0)),["A"].concat(h);if(r==="H")return["L",e[1]+(n?a:0),o];if(r==="V")return["L",i,e[1]+(n?u:0)];if(r==="L")return["L",e[1]+(n?a:0),e[2]+(n?u:0)];if(r==="M")return["M",e[1]+(n?a:0),e[2]+(n?u:0)];if(r==="C")return["C"].concat(h);if(r==="S"){const y=i*2-l,m=o*2-c;return t.x1=y,t.y1=m,["C",y,m].concat(h)}else if(r==="T"){const y=i*2-(t.qx?t.qx:0),m=o*2-(t.qy?t.qy:0);return t.qx=y,t.qy=m,["Q",y,m].concat(h)}else if(r==="Q"){const[y,m]=h;return t.qx=y,t.qy=m,["Q"].concat(h)}else if(r==="Z")return["Z"];return e},ut={x1:0,y1:0,x2:0,y2:0,x:0,y:0,qx:null,qy:null},yt=e=>{const t={...ut},s=D(e);return O(s,(r,n,i,o)=>{t.x=i,t.y=o;const l=Nt(r,t);let c=pe(l,t);c[0]==="C"&&c.length>7&&(s.splice(n+1,0,["C"].concat(c.slice(7))),c=c.slice(0,7));const u=c.length;return t.x1=+c[u-2],t.y1=+c[u-1],t.x2=+c[u-4]||t.x1,t.y2=+c[u-3]||t.y1,c})},P=(e,t)=>{const s=t>=1?10**t:1;return t>0?Math.round(e*s)/s:Math.round(e)},kt=(e,t)=>{const s=e.length;let{round:r}=V,n=e[0],i="";r=t==="off"||typeof t=="number"&&t>=0?t:typeof r=="number"&&r>=0?r:"off";for(let o=0;oMath.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])),it=(e,t,s,r)=>wt([e,t],[s,r]),Ht=(e,t,s,r,n)=>{let i={x:e,y:t};if(typeof n=="number"){const o=wt([e,t],[s,r]);if(n<=0)i={x:e,y:t};else if(n>=o)i={x:s,y:r};else{const[l,c]=F([e,t],[s,r],n/o);i={x:l,y:c}}}return i},It=(e,t,s,r)=>{const{min:n,max:i}=Math;return[n(e,s),n(t,r),i(e,s),i(t,r)]},Ft=(e,t,s)=>{const r=s/2,n=Math.sin(r),i=Math.cos(r),o=e**2*n**2,l=t**2*i**2,c=Math.sqrt(o+l)*s;return Math.abs(c)},Y=(e,t,s,r,n,i)=>{const{sin:o,cos:l}=Math,c=l(n),a=o(n),u=s*l(i),f=r*o(i);return[e+c*u-a*f,t+a*u+c*f]},Et=(e,t)=>{const{x:s,y:r}=e,{x:n,y:i}=t,o=s*n+r*i,l=Math.sqrt((s**2+r**2)*(n**2+i**2));return(s*i-r*n<0?-1:1)*Math.acos(o/l)},Lt=(e,t,s,r,n,i,o,l,c)=>{const{abs:a,sin:u,cos:f,sqrt:h,PI:y}=Math;let m=a(s),g=a(r);const M=(n%360+360)%360*(y/180);if(e===l&&t===c)return{rx:m,ry:g,startAngle:0,endAngle:0,center:{x:l,y:c}};if(m===0||g===0)return{rx:m,ry:g,startAngle:0,endAngle:0,center:{x:(l+e)/2,y:(c+t)/2}};const N=(e-l)/2,x=(t-c)/2,p={x:f(M)*N+u(M)*x,y:-u(M)*N+f(M)*x},w=p.x**2/m**2+p.y**2/g**2;w>1&&(m*=h(w),g*=h(w));const T=m**2*g**2-m**2*p.y**2-g**2*p.x**2,k=m**2*p.y**2+g**2*p.x**2;let I=T/k;I=I<0?0:I;const z=(i!==o?1:-1)*h(I),v={x:z*(m*p.y/g),y:z*(-(g*p.x)/m)},B={x:f(M)*v.x-u(M)*v.y+(e+l)/2,y:u(M)*v.x+f(M)*v.y+(t+c)/2},W={x:(p.x-v.x)/m,y:(p.y-v.y)/g},E=Et({x:1,y:0},W),L={x:(-p.x-v.x)/m,y:(-p.y-v.y)/g};let R=Et(W,L);!o&&R>0?R-=2*y:o&&R<0&&(R+=2*y),R%=2*y;const H=E+R;return{center:B,startAngle:E,endAngle:H,rx:m,ry:g}},_t=(e,t,s,r,n,i,o,l,c)=>{const{rx:a,ry:u,startAngle:f,endAngle:h}=Lt(e,t,s,r,n,i,o,l,c);return Ft(a,u,h-f)},be=(e,t,s,r,n,i,o,l,c,a)=>{let u={x:e,y:t};const{center:f,rx:h,ry:y,startAngle:m,endAngle:g}=Lt(e,t,s,r,n,i,o,l,c);if(typeof a=="number"){const A=Ft(h,y,g-m);if(a<=0)u={x:e,y:t};else if(a>=A)u={x:l,y:c};else{if(e===l&&t===c)return{x:l,y:c};if(h===0||y===0)return Ht(e,t,l,c,a);const{PI:M,cos:N,sin:x}=Math,p=g-m,T=(n%360+360)%360*(M/180),k=m+p*(a/A),I=h*N(k),z=y*x(k);u={x:N(T)*I-x(T)*z+f.x,y:x(T)*I+N(T)*z+f.y}}}return u},de=(e,t,s,r,n,i,o,l,c)=>{const{center:a,rx:u,ry:f,startAngle:h,endAngle:y}=Lt(e,t,s,r,n,i,o,l,c),m=y-h,{min:g,max:A,tan:M,atan2:N,PI:x}=Math,{x:p,y:w}=a,T=n*x/180,k=M(T),I=N(-f*k,u),z=I,v=I+x,B=N(f,u*k),W=B+x,E=[l],L=[c];let R=g(e,l),H=A(e,l),Q=g(t,c),_=A(t,c);const G=y-m*1e-5,X=Y(p,w,u,f,T,G),$=y-m*.99999,j=Y(p,w,u,f,T,$);if(X[0]>H||j[0]>H){const q=Y(p,w,u,f,T,z);E.push(q[0]),L.push(q[1])}if(X[0]_||j[1]>_){const q=Y(p,w,u,f,T,B);E.push(q[0]),L.push(q[1])}return R=g.apply([],E),Q=g.apply([],L),H=A.apply([],E),_=A.apply([],L),[R,Q,H,_]},He=Object.freeze(Object.defineProperty({__proto__:null,angleBetween:Et,arcLength:Ft,arcPoint:Y,getArcBBox:de,getArcLength:_t,getArcProps:Lt,getPointAtArcLength:be},Symbol.toStringTag,{value:"Module"})),Rt=[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213],Ae=[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872],Me=e=>{const t=[];for(let s=e,r=s.length,n=r-1;r>1;r-=1,n-=1){const i=[];for(let o=0;o{if(t===0)return e[0].t=0,e[0];const s=e.length-1;if(t===1)return e[s].t=1,e[s];const r=1-t;let n=e;if(s===0)return e[0].t=t,e[0];if(s===1)return{x:r*n[0].x+t*n[1].x,y:r*n[0].y+t*n[1].y,t};const i=r*r,o=t*t;let l=0,c=0,a=0,u=0;return s===2?(n=[n[0],n[1],n[2],{x:0,y:0}],l=i,c=r*t*2,a=o):s===3&&(l=i*r,c=i*t*3,a=r*o*3,u=t*o),{x:l*n[0].x+c*n[1].x+a*n[2].x+u*n[3].x,y:l*n[0].y+c*n[1].y+a*n[2].y+u*n[3].y,t}},we=(e,t)=>{const s=e(t),r=s.x*s.x+s.y*s.y;return Math.sqrt(r)},Le=e=>{const s=Rt.length;let r=0;for(let n=0,i;n{const t=[];for(let r=0,n=e.length,i=2;rNe(s[0],r))},Te=1e-8,gt=([e,t,s])=>{const r=Math.min(e,s),n=Math.max(e,s);if(t>=e?s>=t:s<=t)return[r,n];const i=(e*s-t*t)/(e-2*t+s);return i{const n=e-3*t+3*s-r;if(Math.abs(n)0&&u<1){const h=e*(1-u)*(1-u)*(1-u)+t*3*(1-u)*(1-u)*u+s*3*(1-u)*u*u+r*u*u*u;hc&&(c=h)}return[l,c]},Ce=([e,t,s,r,n,i,o,l],c)=>{const a=1-c;return{x:a**3*e+3*a**2*c*s+3*a*c**2*n+c**3*o,y:a**3*t+3*a**2*c*r+3*a*c**2*i+c**3*l}},xt=(e,t,s,r,n,i,o,l)=>mt([e,t,s,r,n,i,o,l]),ve=(e,t,s,r,n,i,o,l,c)=>{const a=typeof c=="number";let u={x:e,y:t};if(a){const f=mt([e,t,s,r,n,i,o,l]);c<=0||(c>=f?u={x:o,y:l}:u=Ce([e,t,s,r,n,i,o,l],c/f))}return u},St=(e,t,s,r,n,i,o,l)=>{const c=jt([e,s,n,o]),a=jt([t,r,i,l]);return[c[0],a[0],c[1],a[1]]},$e=([e,t,s,r,n,i],o)=>{const l=1-o;return{x:l**2*e+2*l*o*s+o**2*n,y:l**2*t+2*l*o*r+o**2*i}},pt=(e,t,s,r,n,i)=>mt([e,t,s,r,n,i]),ze=(e,t,s,r,n,i,o)=>{const l=typeof o=="number";let c={x:e,y:t};if(l){const a=mt([e,t,s,r,n,i]);o<=0||(o>=a?c={x:n,y:i}:c=$e([e,t,s,r,n,i],o/a))}return c},Qt=(e,t,s,r,n,i)=>{const o=gt([e,s,n]),l=gt([t,r,i]);return[o[0],l[0],o[1],l[1]]},Fe=e=>{const t=e.length;let s=-1,r,n=e[t-1],i=0;for(;++se.reduce((t,s,r)=>r?t+wt(e[r-1],s):0,0),bt=1e-5,ot=e=>{const t=D(e),s={...ut};return O(t,(r,n,i,o)=>{s.x=i,s.y=o;const l=Nt(r,s),c=l.length;return s.x1=+l[c-2],s.y1=+l[c-1],s.x2=+l[c-4]||s.x1,s.y2=+l[c-3]||s.y1,l})},rt=(e,t)=>{const s=ot(e);let r=!1,n=[],i="M",o=0,l=0,[c,a]=s[0].slice(1);const u=typeof t=="number";let f={x:c,y:a},h=0,y=f,m=0;return!u||t{if([i]=g,r=i==="M",n=r?n:[M,N].concat(g.slice(1)),r?([,c,a]=g,f={x:c,y:a},h=0):i==="L"?(f=Ht(n[0],n[1],n[2],n[3],t-m),h=it(n[0],n[1],n[2],n[3])):i==="A"?(f=be(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8],t-m),h=_t(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8])):i==="C"?(f=ve(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],t-m),h=xt(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7])):i==="Q"?(f=ze(n[0],n[1],n[2],n[3],n[4],n[5],t-m),h=pt(n[0],n[1],n[2],n[3],n[4],n[5])):i==="Z"&&(n=[M,N,c,a],f={x:c,y:a},h=it(n[0],n[1],n[2],n[3])),[o,l]=n.slice(-2),mm-bt?{x:o,y:l}:y)},nt=e=>{const t=D(e);let s=0,r=0,n=0,i=0,o=0,l=0,c="M",a=0,u=0,f=0;return O(t,(h,y,m,g)=>{[c]=h;const A=c.toUpperCase(),N=A!==c?at(h,y,m,g):h.slice(0),x=A==="V"?["L",m,N[1]]:A==="H"?["L",N[1],g]:N;if([c]=x,"TQ".includes(A)||(o=0,l=0),c==="M")[,a,u]=x;else if(c==="L")f+=it(m,g,x[1],x[2]);else if(c==="A")f+=_t(m,g,x[1],x[2],x[3],x[4],x[5],x[6],x[7]);else if(c==="S"){const p=s*2-n,w=r*2-i;f+=xt(m,g,p,w,x[1],x[2],x[3],x[4])}else c==="C"?f+=xt(m,g,x[1],x[2],x[3],x[4],x[5],x[6]):c==="T"?(o=s*2-o,l=r*2-l,f+=pt(m,g,o,l,x[1],x[2])):c==="Q"?(o=x[1],l=x[2],f+=pt(m,g,x[1],x[2],x[3],x[4])):c==="Z"&&(f+=it(m,g,a,u));[s,r]=c==="Z"?[a,u]:x.slice(-2),[n,i]=c==="C"?[x[3],x[4]]:c==="S"?[x[1],x[2]]:[s,r]}),f},Ut=(e,t)=>{const s=D(e);let r=s.slice(0),n=nt(r),i=r.length-1,o=0,l=0,c=s[0];if(i<=0||!t||!Number.isFinite(t))return{segment:c,index:0,length:l,lengthAtSegment:o};if(t>=n)return r=s.slice(0,-1),o=nt(r),l=n-o,c=s[i],{segment:c,index:i,length:l,lengthAtSegment:o};const a=[];for(;i>0;)c=r[i],r=r.slice(0,-1),o=nt(r),l=n-o,n=o,a.push({segment:c,index:i,length:l,lengthAtSegment:o}),i-=1;return a.find(({lengthAtSegment:u})=>u<=t)},Tt=(e,t)=>{const s=D(e),r=ot(s),n=nt(r),i=p=>{const w=p.x-t.x,T=p.y-t.y;return w*w+T*T};let o=8,l,c={x:0,y:0},a=0,u=0,f=1/0;for(let p=0;p<=n;p+=o)l=rt(r,p),a=i(l),a1e-6&&(m=u-o,h=rt(r,m),A=i(h),g=u+o,y=rt(r,g),M=i(y),m>=0&&ATt(e,t).closest,Je=(e,t,s,r,n,i,o,l)=>3*((l-t)*(s+n)-(o-e)*(r+i)+r*(e-n)-s*(t-i)+l*(n+e/3)-o*(i+t/3))/20,qe=e=>{let t=0,s=0,r=0;return yt(e).map(n=>{switch(n[0]){case"M":return[,t,s]=n,0;default:return r=Je(t,s,n[1],n[2],n[3],n[4],n[5],n[6]),[t,s]=n.slice(-2),r}}).reduce((n,i)=>n+i,0)},Ke=e=>qe(yt(e))>=0,Wt=e=>{if(!e)return{x:0,y:0,width:0,height:0,x2:0,y2:0,cx:0,cy:0,cz:0};const t=D(e);let s="M",r=0,n=0;const{max:i,min:o}=Math;let l=1/0,c=1/0,a=-1/0,u=-1/0,f=0,h=0,y=0,m=0,g=0,A=0,M=0,N=0,x=0,p=0;O(t,(k,I,z,v)=>{[s]=k;const B=s.toUpperCase(),E=B!==s?at(k,I,z,v):k.slice(0),L=B==="V"?["L",z,E[1]]:B==="H"?["L",E[1],v]:E;if([s]=L,"TQ".includes(B)||(x=0,p=0),s==="M")[,r,n]=L,f=r,h=n,y=r,m=n;else if(s==="L")[f,h,y,m]=It(z,v,L[1],L[2]);else if(s==="A")[f,h,y,m]=de(z,v,L[1],L[2],L[3],L[4],L[5],L[6],L[7]);else if(s==="S"){const R=g*2-M,H=A*2-N;[f,h,y,m]=St(z,v,R,H,L[1],L[2],L[3],L[4])}else s==="C"?[f,h,y,m]=St(z,v,L[1],L[2],L[3],L[4],L[5],L[6]):s==="T"?(x=g*2-x,p=A*2-p,[f,h,y,m]=Qt(z,v,x,p,L[1],L[2])):s==="Q"?(x=L[1],p=L[2],[f,h,y,m]=Qt(z,v,L[1],L[2],L[3],L[4])):s==="Z"&&([f,h,y,m]=It(z,v,r,n));l=o(f,l),c=o(h,c),a=i(y,a),u=i(m,u),[g,A]=s==="Z"?[r,n]:L.slice(-2),[M,N]=s==="C"?[L[3],L[4]]:s==="S"?[L[1],L[2]]:[g,A]});const w=a-l,T=u-c;return{width:w,height:T,x:l,y:c,x2:a,y2:u,cx:l+w/2,cy:c+T/2,cz:Math.max(w,T)+Math.min(w,T)/2}},We=(e,t)=>Ut(e,t).segment,Xe=(e,t)=>Tt(e,t).segment,Ct=e=>Array.isArray(e)&&e.every(t=>{const s=t[0].toLowerCase();return tt[s]===t.length-1&&"achlmqstvz".includes(s)&&t.slice(1).every(Number.isFinite)})&&e.length>0,Pe=e=>Ct(e)&&e.every(([t])=>t===t.toUpperCase()),ke=e=>Pe(e)&&e.every(([t])=>"ACLMQZ".includes(t)),Ye=e=>ke(e)&&e.every(([t])=>"MC".includes(t)),Ve=(e,t)=>{const{distance:s}=Tt(e,t);return Math.abs(s)Ct(e)&&e.slice(1).every(([t])=>t===t.toLowerCase()),Ie=e=>{if(typeof e!="string"||!e.length)return!1;const t=new Ot(e);for(et(t);t.indexe!=null&&typeof e=="object"&&e.nodeType===1,tn=e=>{let{x1:t,y1:s,x2:r,y2:n}=e;return[t,s,r,n]=[t,s,r,n].map(i=>+i),[["M",t,s],["L",r,n]]},en=e=>{const t=[],s=(e.points||"").trim().split(/[\s|,]/).map(n=>+n);let r=0;for(;r{let{cx:t,cy:s,r}=e;return[t,s,r]=[t,s,r].map(n=>+n),[["M",t-r,s],["a",r,r,0,1,0,2*r,0],["a",r,r,0,1,0,-2*r,0]]},sn=e=>{let{cx:t,cy:s}=e,r=e.rx||0,n=e.ry||r;return[t,s,r,n]=[t,s,r,n].map(i=>+i),[["M",t-r,s],["a",r,n,0,1,0,2*r,0],["a",r,n,0,1,0,-2*r,0]]},rn=e=>{const t=+e.x||0,s=+e.y||0,r=+e.width,n=+e.height;let i=+(e.rx||0),o=+(e.ry||i);return i||o?(i*2>r&&(i-=(i*2-r)/2),o*2>n&&(o-=(o*2-n)/2),[["M",t+i,s],["h",r-i*2],["s",i,0,i,o],["v",n-o*2],["s",0,o,-i,o],["h",-r+i*2],["s",-i,0,-i,-o],["v",-n+o*2],["s",0,-o,i,-o]]):[["M",t,s],["h",r],["v",n],["H",t],["Z"]]},Re=e=>{const t=Object.keys(ct),s=Ee(e),r=s?e.tagName:null;if(r&&[...t,"path"].every(c=>r!==c))throw TypeError(`${Z}: "${r}" is not SVGElement`);const n=s?r:e.type,i=ct[n],o={type:n};s?i.forEach(c=>{o[c]=e.getAttribute(c)}):Object.assign(o,e);let l=[];return n==="circle"?l=nn(o):n==="ellipse"?l=sn(o):["polyline","polygon"].includes(n)?l=en(o):n==="rect"?l=rn(o):n==="line"?l=tn(o):["glyph","path"].includes(n)&&(l=D(s?e.getAttribute("d")||"":e.d||"")),Ct(l)&&l.length?l:!1},on=(e,t,s)=>{const r=s||document,n=Object.keys(ct),i=Ee(e),o=i?e.tagName:null;if(o==="path")throw TypeError(`${Z}: "${o}" is already SVGPathElement`);if(o&&n.every(m=>o!==m))throw TypeError(`${Z}: "${o}" is not SVGElement`);const l=r.createElementNS("http://www.w3.org/2000/svg","path"),c=i?o:e.type,a=ct[c],u={type:c},f=V.round,h=Re(e),y=h&&h.length?kt(h,f):"";return i?(a.forEach(m=>{u[m]=e.getAttribute(m)}),Object.values(e.attributes).forEach(({name:m,value:g})=>{a.includes(m)||l.setAttribute(m,g)})):(Object.assign(u,e),Object.keys(u).forEach(m=>{!a.includes(m)&&m!=="type"&&l.setAttribute(m.replace(/[A-Z]/g,g=>`-${g.toLowerCase()}`),u[m])})),Ie(y)?(l.setAttribute("d",y),t&&i&&(e.before(l,e),e.remove()),l):!1},je=e=>{let t=new C;const{origin:s}=e,[r,n]=s,{translate:i}=e,{rotate:o}=e,{skew:l}=e,{scale:c}=e;return Array.isArray(i)&&i.length>=2&&i.every(a=>!Number.isNaN(+a))&&i.some(a=>a!==0)?t=t.translate(...i):typeof i=="number"&&!Number.isNaN(i)&&(t=t.translate(i)),(o||l||c)&&(t=t.translate(r,n),Array.isArray(o)&&o.length>=2&&o.every(a=>!Number.isNaN(+a))&&o.some(a=>a!==0)?t=t.rotate(...o):typeof o=="number"&&!Number.isNaN(o)&&(t=t.rotate(o)),Array.isArray(l)&&l.length===2&&l.every(a=>!Number.isNaN(+a))&&l.some(a=>a!==0)?(t=l[0]?t.skewX(l[0]):t,t=l[1]?t.skewY(l[1]):t):typeof l=="number"&&!Number.isNaN(l)&&(t=t.skewX(l)),Array.isArray(c)&&c.length>=2&&c.every(a=>!Number.isNaN(+a))&&c.some(a=>a!==1)?t=t.scale(...c):typeof c=="number"&&!Number.isNaN(c)&&(t=t.scale(c)),t=t.translate(-r,-n)),t},Se=(e,t,s,r)=>{const[n]=e,{round:i}=V,o=typeof i=="number"?i:4,l=t.slice(1),{x1:c,y1:a,x2:u,y2:f,x:h,y}=s,[m,g]=l.slice(-2),A=e;if("TQ".includes(n)||(s.qx=null,s.qy=null),n==="L"){if(P(h,o)===P(m,o))return["V",g];if(P(y,o)===P(g,o))return["H",m]}else if(n==="C"){const[M,N]=l;if(s.x1=M,s.y1=N,"CS".includes(r)&&(P(M,o)===P(c*2-u,o)&&P(N,o)===P(a*2-f,o)||P(c,o)===P(u*2-h,o)&&P(a,o)===P(f*2-y,o)))return["S",l[2],l[3],l[4],l[5]]}else if(n==="Q"){const[M,N]=l;if(s.qx=M,s.qy=N,"QT".includes(r)&&P(M,o)===P(c*2-u,o)&&P(N,o)===P(a*2-f,o))return["T",l[2],l[3]]}return A},dt=(e,t)=>{const s=e.slice(1).map(r=>P(r,t));return[e[0]].concat(s)},Xt=(e,t)=>{const s=ht(e),r=typeof t=="number"&&t>=0?t:2,n={...ut},i=[];let o="M",l="Z";return O(s,(c,a,u,f)=>{n.x=u,n.y=f;const h=Nt(c,n);let y=c;if([o]=c,i[a]=o,a){l=i[a-1];const g=Se(c,h,n,l),A=dt(g,r),M=A.join(""),N=Bt(g,a,u,f),x=dt(N,r),p=x.join("");y=M.length{let s=C.Translate(t[0],t[1],t[2]);return[,,,s.m44]=t,s=e.multiply(s),[s.m41,s.m42,s.m43,s.m44]},Zt=(e,t,s)=>{const[r,n,i]=s,[o,l,c]=cn(e,[t[0],t[1],0,1]),a=o-r,u=l-n,f=c-i;return[a*(Math.abs(i)/Math.abs(f)||1)+r,u*(Math.abs(i)/Math.abs(f)||1)+n]},ln=e=>{const t=e.slice(1).map((s,r,n)=>r?n[r-1].slice(-2).concat(s.slice(1)):e[0].slice(1).concat(s.slice(1))).map(s=>s.map((r,n)=>s[s.length-n-2*(1-n%2)])).reverse();return[["M"].concat(t[0].slice(0,2))].concat(t.map(s=>["C"].concat(s.slice(2))))},ft=e=>{const t=ht(e),s=ot(t),r=t.length,n=t[r-1][0]==="Z",i=O(t,(o,l)=>{const c=s[l],a=l&&t[l-1],u=a&&a[0],f=t[l+1],h=f&&f[0],[y]=o,[m,g]=s[l?l-1:r-1].slice(-2);let A=o;switch(y){case"M":A=n?["Z"]:[y,m,g];break;case"A":A=[y,o[1],o[2],o[3],o[4],o[5]===1?0:1,m,g];break;case"C":f&&h==="S"?A=["S",o[1],o[2],m,g]:A=[y,o[3],o[4],o[1],o[2],m,g];break;case"S":u&&"CS".includes(u)&&(!f||h!=="S")?A=["C",c[3],c[4],c[1],c[2],m,g]:A=[y,c[1],c[2],m,g];break;case"Q":f&&h==="T"?A=["T",m,g]:A=[y,o[1],o[2],m,g];break;case"T":u&&"QT".includes(u)&&(!f||h!=="T")?A=["Q",c[1],c[2],m,g]:A=[y,m,g];break;case"Z":A=["M",m,g];break;case"H":A=[y,m];break;case"V":A=[y,g];break;default:A=[y].concat(o.slice(1,-2),m,g)}return A});return n?i.reverse():[i[0]].concat(i.slice(1).reverse())},an=(e,t)=>{let{round:s}=V;return s=t==="off"||typeof t=="number"&&t>=0?t:typeof s=="number"&&s>=0?s:"off",s==="off"?e.slice(0):O(e,r=>dt(r,s))},un=(e,t=.5)=>{const s=t,r=e.slice(0,2),n=e.slice(2,4),i=e.slice(4,6),o=e.slice(6,8),l=F(r,n,s),c=F(n,i,s),a=F(i,o,s),u=F(l,c,s),f=F(c,a,s),h=F(u,f,s);return[["C",l[0],l[1],u[0],u[1],h[0],h[1]],["C",f[0],f[1],a[0],a[1],o[0],o[1]]]},Yt=e=>{const t=[];let s,r=-1,n=0,i=0,o=0,l=0;const c={...ut};return e.forEach(a=>{const[u]=a,f=u.toUpperCase(),h=u.toLowerCase(),y=u===h,m=a.slice(1);f==="M"?(r+=1,[n,i]=m,n+=y?c.x:0,i+=y?c.y:0,o=n,l=i,s=[y?[f,o,l]:a]):(f==="Z"?(n=o,i=l):f==="H"?([,n]=a,n+=y?c.x:0):f==="V"?([,i]=a,i+=y?c.y:0):([n,i]=a.slice(-2),n+=y?c.x:0,i+=y?c.y:0),s.push(a)),c.x=n,c.y=i,t[r]=s}),t},Vt=(e,t)=>{let s=0,r=0,n=0,i=0,o=0,l=0,c="M";const a=D(e),u=t&&Object.keys(t);if(!t||u&&!u.length)return a.slice(0);t.origin||Object.assign(t,{origin:V.origin});const f=t.origin,h=je(t);return h.isIdentity?a.slice(0):O(a,(y,m,g,A)=>{[c]=y;const M=c.toUpperCase(),x=M!==c?at(y,m,g,A):y.slice(0);let p=M==="A"?["C"].concat(Mt(g,A,x[1],x[2],x[3],x[4],x[5],x[6],x[7])):M==="V"?["L",g,x[1]]:M==="H"?["L",x[1],A]:x;c=p[0];const w=c==="C"&&p.length>7,T=w?p.slice(0,7):p.slice(0);if(w&&(a.splice(m+1,0,["C"].concat(p.slice(7))),p=T),c==="L")[n,i]=Zt(h,[p[1],p[2]],f),s!==n&&r!==i?p=["L",n,i]:r===i?p=["H",n]:s===n&&(p=["V",i]);else for(o=1,l=p.length;o"u";if(n||!t.length)throw TypeError(`${Z}: "pathValue" is ${n?"undefined":"empty"}`);this.segments=D(t);const{round:i,origin:o}=r;let l;Number.isInteger(i)||i==="off"?l=i:l=V.round;let c=V.origin;if(Array.isArray(o)&&o.length>=2){const[a,u,f]=o.map(Number);c=[Number.isNaN(a)?0:a,Number.isNaN(u)?0:u,Number.isNaN(f)?0:f]}return this.round=l,this.origin=c,this}get bbox(){return Wt(this.segments)}get length(){return nt(this.segments)}getBBox(){return this.bbox}getTotalLength(){return this.length}getPointAtLength(t){return rt(this.segments,t)}toAbsolute(){const{segments:t}=this;return this.segments=ht(t),this}toRelative(){const{segments:t}=this;return this.segments=Kt(t),this}toCurve(){const{segments:t}=this;return this.segments=yt(t),this}reverse(t){const{segments:s}=this,r=Yt(s),n=r.length>1?r:!1,i=n?n.map((l,c)=>t?c?ft(l):l.slice(0):ft(l)):s.slice(0);let o=[];return n?o=i.flat(1):o=t?s:ft(s),this.segments=o.slice(0),this}normalize(){const{segments:t}=this;return this.segments=ot(t),this}optimize(){const{segments:t}=this,s=this.round==="off"?2:this.round;return this.segments=Xt(t,s),this}transform(t){if(!t||typeof t!="object"||typeof t=="object"&&!["translate","rotate","skew","scale"].some(c=>c in t))return this;const{segments:s,origin:[r,n,i]}=this,o={};for(const[c,a]of Object.entries(t))c==="skew"&&Array.isArray(a)||(c==="rotate"||c==="translate"||c==="origin"||c==="scale")&&Array.isArray(a)?o[c]=a.map(Number):c!=="origin"&&typeof Number(a)=="number"&&(o[c]=Number(a));const{origin:l}=o;if(Array.isArray(l)&&l.length>=2){const[c,a,u]=l.map(Number);o.origin=[Number.isNaN(c)?r:c,Number.isNaN(a)?n:a,u||i]}else o.origin=[r,n,i];return this.segments=Vt(s,o),this}flipX(){const{cx:t,cy:s}=this.bbox;return this.transform({rotate:[0,180,0],origin:[t,s,0]}),this}flipY(){const{cx:t,cy:s}=this.bbox;return this.transform({rotate:[180,0,0],origin:[t,s,0]}),this}toString(){return kt(this.segments,this.round)}dispose(){Object.keys(this).forEach(t=>delete this[t])}}b(d,"CSSMatrix",C),b(d,"pathToAbsolute",ht),b(d,"pathToRelative",Kt),b(d,"pathToCurve",yt),b(d,"pathToString",kt),b(d,"arcTools",He),b(d,"bezierTools",{Cvalues:Ae,Tvalues:Rt,minmaxC:jt,minmaxQ:gt,getBezierLength:mt,bezierLength:Le,calculateBezier:we,computeBezier:Ne,deriveBezier:Me,CBEZIER_MINMAX_EPSILON:Te}),b(d,"cubicTools",{getCubicLength:xt,getCubicBBox:St,getPointAtCubicLength:ve,getPointAtCubicSegmentLength:Ce}),b(d,"lineTools",{getPointAtLineLength:Ht,getLineBBox:It,getLineLength:it}),b(d,"quadTools",{getPointAtQuadSegmentLength:$e,getQuadLength:pt,getQuadBBox:Qt,getPointAtQuadLength:ze}),b(d,"polygonTools",{polygonArea:Fe,polygonLength:_e}),b(d,"distanceSquareRoot",wt),b(d,"distanceEpsilon",bt),b(d,"midPoint",F),b(d,"rotateVector",st),b(d,"roundTo",P),b(d,"finalizeSegment",qt),b(d,"invalidPathValue",K),b(d,"isArcCommand",ye),b(d,"isDigit",J),b(d,"isDigitStart",he),b(d,"isMoveCommand",ge),b(d,"isPathCommand",fe),b(d,"isSpace",me),b(d,"paramsCount",tt),b(d,"paramsParser",ut),b(d,"pathParser",Ot),b(d,"scanFlag",ae),b(d,"scanParam",ue),b(d,"scanSegment",Dt),b(d,"skipSpaces",et),b(d,"getPathBBox",Wt),b(d,"getPathArea",qe),b(d,"getTotalLength",nt),b(d,"getDrawDirection",Ke),b(d,"getPointAtLength",rt),b(d,"getPropertiesAtLength",Ut),b(d,"getPropertiesAtPoint",Tt),b(d,"getClosestPoint",Ue),b(d,"getSegmentOfPoint",Xe),b(d,"getSegmentAtLength",We),b(d,"isPointInStroke",Ve),b(d,"isValidPath",Ie),b(d,"isPathArray",Ct),b(d,"isAbsoluteArray",Pe),b(d,"isRelativeArray",Ge),b(d,"isCurveArray",Ye),b(d,"isNormalizedArray",ke),b(d,"shapeToPath",on),b(d,"shapeToPathArray",Re),b(d,"shapeParams",ct),b(d,"parsePathString",D),b(d,"absolutizeSegment",at),b(d,"arcToCubic",Mt),b(d,"getSVGMatrix",je),b(d,"iterate",O),b(d,"lineToCubic",Pt),b(d,"normalizePath",ot),b(d,"normalizeSegment",Nt),b(d,"optimizePath",Xt),b(d,"projection2d",Zt),b(d,"quadToCubic",xe),b(d,"relativizeSegment",Bt),b(d,"reverseCurve",ln),b(d,"reversePath",ft),b(d,"roundPath",an),b(d,"roundSegment",dt),b(d,"segmentToCubic",pe),b(d,"shortenSegment",Se),b(d,"splitCubic",un),b(d,"splitPath",Yt),b(d,"transformPath",Vt);module.exports=d; +"use strict";var Qe=Object.defineProperty;var Ze=(e,t,s)=>t in e?Qe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s;var b=(e,t,s)=>Ze(e,typeof t!="symbol"?t+"":t,s);var De=Object.defineProperty,Oe=(e,t,s)=>t in e?De(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,S=(e,t,s)=>Oe(e,typeof t!="symbol"?t+"":t,s);const Be={a:1,b:0,c:0,d:1,e:0,f:0,m11:1,m12:0,m13:0,m14:0,m21:0,m22:1,m23:0,m24:0,m31:0,m32:0,m33:1,m34:0,m41:0,m42:0,m43:0,m44:1,is2D:!0,isIdentity:!0},Gt=e=>(e instanceof Float64Array||e instanceof Float32Array||Array.isArray(e)&&e.every(t=>typeof t=="number"))&&[6,16].some(t=>e.length===t),te=e=>e instanceof DOMMatrix||e instanceof C||typeof e=="object"&&Object.keys(Be).every(t=>e&&t in e),lt=e=>{const t=new C,s=Array.from(e);if(!Gt(s))throw TypeError(`CSSMatrix: "${s.join(",")}" must be an array with 6/16 numbers.`);if(s.length===16){const[r,n,i,o,l,c,a,u,f,h,y,m,g,A,M,N]=s;t.m11=r,t.a=r,t.m21=l,t.c=l,t.m31=f,t.m41=g,t.e=g,t.m12=n,t.b=n,t.m22=c,t.d=c,t.m32=h,t.m42=A,t.f=A,t.m13=i,t.m23=a,t.m33=y,t.m43=M,t.m14=o,t.m24=u,t.m34=m,t.m44=N}else if(s.length===6){const[r,n,i,o,l,c]=s;t.m11=r,t.a=r,t.m12=n,t.b=n,t.m21=i,t.c=i,t.m22=o,t.d=o,t.m41=l,t.e=l,t.m42=c,t.f=c}return t},ee=e=>{if(te(e))return lt([e.m11,e.m12,e.m13,e.m14,e.m21,e.m22,e.m23,e.m24,e.m31,e.m32,e.m33,e.m34,e.m41,e.m42,e.m43,e.m44]);throw TypeError(`CSSMatrix: "${JSON.stringify(e)}" is not a DOMMatrix / CSSMatrix / JSON compatible object.`)},ne=e=>{if(typeof e!="string")throw TypeError(`CSSMatrix: "${JSON.stringify(e)}" is not a string.`);const t=String(e).replace(/\s/g,"");let s=new C;const r=`CSSMatrix: invalid transform string "${e}"`;return t.split(")").filter(n=>n).forEach(n=>{const[i,o]=n.split("(");if(!o)throw TypeError(r);const l=o.split(",").map(m=>m.includes("rad")?parseFloat(m)*(180/Math.PI):parseFloat(m)),[c,a,u,f]=l,h=[c,a,u],y=[c,a,u,f];if(i==="perspective"&&c&&[a,u].every(m=>m===void 0))s.m34=-1/c;else if(i.includes("matrix")&&[6,16].includes(l.length)&&l.every(m=>!Number.isNaN(+m))){const m=l.map(g=>Math.abs(g)<1e-6?0:g);s=s.multiply(lt(m))}else if(i==="translate3d"&&h.every(m=>!Number.isNaN(+m)))s=s.translate(c,a,u);else if(i==="translate"&&c&&u===void 0)s=s.translate(c,a||0,0);else if(i==="rotate3d"&&y.every(m=>!Number.isNaN(+m))&&f)s=s.rotateAxisAngle(c,a,u,f);else if(i==="rotate"&&c&&[a,u].every(m=>m===void 0))s=s.rotate(0,0,c);else if(i==="scale3d"&&h.every(m=>!Number.isNaN(+m))&&h.some(m=>m!==1))s=s.scale(c,a,u);else if(i==="scale"&&!Number.isNaN(c)&&(c!==1||a!==1)&&u===void 0){const m=Number.isNaN(+a)?c:a;s=s.scale(c,m,1)}else if(i==="skew"&&(c||!Number.isNaN(c)&&a)&&u===void 0)s=s.skew(c,a||0);else if(["translate","rotate","scale","skew"].some(m=>i.includes(m))&&/[XYZ]/.test(i)&&c&&[a,u].every(m=>m===void 0))if(i==="skewX"||i==="skewY")s=s[i](c);else{const m=i.replace(/[XYZ]/,""),g=i.replace(m,""),A=["X","Y","Z"].indexOf(g),M=m==="scale"?1:0,N=[A===0?c:M,A===1?c:M,A===2?c:M];s=s[m](...N)}else throw TypeError(r)}),s},zt=(e,t)=>t?[e.a,e.b,e.c,e.d,e.e,e.f]:[e.m11,e.m12,e.m13,e.m14,e.m21,e.m22,e.m23,e.m24,e.m31,e.m32,e.m33,e.m34,e.m41,e.m42,e.m43,e.m44],se=(e,t,s)=>{const r=new C;return r.m41=e,r.e=e,r.m42=t,r.f=t,r.m43=s,r},re=(e,t,s)=>{const r=new C,n=Math.PI/180,i=e*n,o=t*n,l=s*n,c=Math.cos(i),a=-Math.sin(i),u=Math.cos(o),f=-Math.sin(o),h=Math.cos(l),y=-Math.sin(l),m=u*h,g=-u*y;r.m11=m,r.a=m,r.m12=g,r.b=g,r.m13=f;const A=a*f*h+c*y;r.m21=A,r.c=A;const M=c*h-a*f*y;return r.m22=M,r.d=M,r.m23=-a*u,r.m31=a*y-c*f*h,r.m32=a*h+c*f*y,r.m33=c*u,r},ie=(e,t,s,r)=>{const n=new C,i=Math.sqrt(e*e+t*t+s*s);if(i===0)return n;const o=e/i,l=t/i,c=s/i,a=r*(Math.PI/360),u=Math.sin(a),f=Math.cos(a),h=u*u,y=o*o,m=l*l,g=c*c,A=1-2*(m+g)*h;n.m11=A,n.a=A;const M=2*(o*l*h+c*u*f);n.m12=M,n.b=M,n.m13=2*(o*c*h-l*u*f);const N=2*(l*o*h-c*u*f);n.m21=N,n.c=N;const x=1-2*(g+y)*h;return n.m22=x,n.d=x,n.m23=2*(l*c*h+o*u*f),n.m31=2*(c*o*h+l*u*f),n.m32=2*(c*l*h-o*u*f),n.m33=1-2*(y+m)*h,n},oe=(e,t,s)=>{const r=new C;return r.m11=e,r.a=e,r.m22=t,r.d=t,r.m33=s,r},At=(e,t)=>{const s=new C;if(e){const r=e*Math.PI/180,n=Math.tan(r);s.m21=n,s.c=n}if(t){const r=t*Math.PI/180,n=Math.tan(r);s.m12=n,s.b=n}return s},ce=e=>At(e,0),le=e=>At(0,e),U=(e,t)=>{const s=t.m11*e.m11+t.m12*e.m21+t.m13*e.m31+t.m14*e.m41,r=t.m11*e.m12+t.m12*e.m22+t.m13*e.m32+t.m14*e.m42,n=t.m11*e.m13+t.m12*e.m23+t.m13*e.m33+t.m14*e.m43,i=t.m11*e.m14+t.m12*e.m24+t.m13*e.m34+t.m14*e.m44,o=t.m21*e.m11+t.m22*e.m21+t.m23*e.m31+t.m24*e.m41,l=t.m21*e.m12+t.m22*e.m22+t.m23*e.m32+t.m24*e.m42,c=t.m21*e.m13+t.m22*e.m23+t.m23*e.m33+t.m24*e.m43,a=t.m21*e.m14+t.m22*e.m24+t.m23*e.m34+t.m24*e.m44,u=t.m31*e.m11+t.m32*e.m21+t.m33*e.m31+t.m34*e.m41,f=t.m31*e.m12+t.m32*e.m22+t.m33*e.m32+t.m34*e.m42,h=t.m31*e.m13+t.m32*e.m23+t.m33*e.m33+t.m34*e.m43,y=t.m31*e.m14+t.m32*e.m24+t.m33*e.m34+t.m34*e.m44,m=t.m41*e.m11+t.m42*e.m21+t.m43*e.m31+t.m44*e.m41,g=t.m41*e.m12+t.m42*e.m22+t.m43*e.m32+t.m44*e.m42,A=t.m41*e.m13+t.m42*e.m23+t.m43*e.m33+t.m44*e.m43,M=t.m41*e.m14+t.m42*e.m24+t.m43*e.m34+t.m44*e.m44;return lt([s,r,n,i,o,l,c,a,u,f,h,y,m,g,A,M])};class C{constructor(t){return this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this.m11=1,this.m12=0,this.m13=0,this.m14=0,this.m21=0,this.m22=1,this.m23=0,this.m24=0,this.m31=0,this.m32=0,this.m33=1,this.m34=0,this.m41=0,this.m42=0,this.m43=0,this.m44=1,t?this.setMatrixValue(t):this}get isIdentity(){return this.m11===1&&this.m12===0&&this.m13===0&&this.m14===0&&this.m21===0&&this.m22===1&&this.m23===0&&this.m24===0&&this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m41===0&&this.m42===0&&this.m43===0&&this.m44===1}get is2D(){return this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m43===0&&this.m44===1}setMatrixValue(t){return typeof t=="string"&&t.length&&t!=="none"?ne(t):Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?lt(t):typeof t=="object"?ee(t):this}toFloat32Array(t){return Float32Array.from(zt(this,t))}toFloat64Array(t){return Float64Array.from(zt(this,t))}toString(){const{is2D:t}=this,s=this.toFloat64Array(t).join(", ");return`${t?"matrix":"matrix3d"}(${s})`}toJSON(){const{is2D:t,isIdentity:s}=this;return{...this,is2D:t,isIdentity:s}}multiply(t){return U(this,t)}translate(t,s,r){const n=t;let i=s,o=r;return typeof i>"u"&&(i=0),typeof o>"u"&&(o=0),U(this,se(n,i,o))}scale(t,s,r){const n=t;let i=s,o=r;return typeof i>"u"&&(i=t),typeof o>"u"&&(o=1),U(this,oe(n,i,o))}rotate(t,s,r){let n=t,i=s||0,o=r||0;return typeof t=="number"&&typeof s>"u"&&typeof r>"u"&&(o=n,n=0,i=0),U(this,re(n,i,o))}rotateAxisAngle(t,s,r,n){if([t,s,r,n].some(i=>Number.isNaN(+i)))throw new TypeError("CSSMatrix: expecting 4 values");return U(this,ie(t,s,r,n))}skewX(t){return U(this,ce(t))}skewY(t){return U(this,le(t))}skew(t,s){return U(this,At(t,s))}transformPoint(t){const s=this.m11*t.x+this.m21*t.y+this.m31*t.z+this.m41*t.w,r=this.m12*t.x+this.m22*t.y+this.m32*t.z+this.m42*t.w,n=this.m13*t.x+this.m23*t.y+this.m33*t.z+this.m43*t.w,i=this.m14*t.x+this.m24*t.y+this.m34*t.z+this.m44*t.w;return t instanceof DOMPoint?new DOMPoint(s,r,n,i):{x:s,y:r,z:n,w:i}}}S(C,"Translate",se),S(C,"Rotate",re),S(C,"RotateAxisAngle",ie),S(C,"Scale",oe),S(C,"SkewX",ce),S(C,"SkewY",le),S(C,"Skew",At),S(C,"Multiply",U),S(C,"fromArray",lt),S(C,"fromMatrix",ee),S(C,"fromString",ne),S(C,"toArray",zt),S(C,"isCompatibleArray",Gt),S(C,"isCompatibleObject",te);const V={origin:[0,0,0],round:4},tt={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},qt=e=>{let t=e.pathValue[e.segmentStart],s=t.toLowerCase();const{data:r}=e;for(;r.length>=tt[s]&&(s==="m"&&r.length>2?(e.segments.push([t].concat(r.splice(0,2))),s="l",t=t==="m"?"l":"L"):e.segments.push([t].concat(r.splice(0,tt[s]))),!!tt[s]););},Z="SVGPathCommander Error",ae=e=>{const{index:t,pathValue:s}=e,r=s.charCodeAt(t);if(r===48){e.param=0,e.index+=1;return}if(r===49){e.param=1,e.index+=1;return}e.err=`${Z}: invalid Arc flag "${s[t]}", expecting 0 or 1 at index ${t}`},J=e=>e>=48&&e<=57,K="Invalid path value",ue=e=>{const{max:t,pathValue:s,index:r}=e;let n=r,i=!1,o=!1,l=!1,c=!1,a;if(n>=t){e.err=`${Z}: ${K} at index ${n}, "pathValue" is missing param`;return}if(a=s.charCodeAt(n),(a===43||a===45)&&(n+=1,a=s.charCodeAt(n)),!J(a)&&a!==46){e.err=`${Z}: ${K} at index ${n}, "${s[n]}" is not a number`;return}if(a!==46){if(i=a===48,n+=1,a=s.charCodeAt(n),i&&n[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279,10,13,8232,8233,32,9,11,12,160].includes(e),et=e=>{const{pathValue:t,max:s}=e;for(;e.index{switch(e|32){case 109:case 122:case 108:case 104:case 118:case 99:case 115:case 113:case 116:case 97:return!0;default:return!1}},he=e=>J(e)||e===43||e===45||e===46,ye=e=>(e|32)===97,ge=e=>{switch(e|32){case 109:case 77:return!0;default:return!1}},Dt=e=>{var c;const{max:t,pathValue:s,index:r,segments:n}=e,i=s.charCodeAt(r),o=tt[s[r].toLowerCase()];if(e.segmentStart=r,!fe(i)){e.err=`${Z}: ${K} "${s[r]}" is not a path command at index ${r}`;return}const l=n[n.length-1];if(!ge(i)&&((c=l==null?void 0:l[0])==null?void 0:c.toLocaleLowerCase())==="z"){e.err=`${Z}: ${K} "${s[r]}" is not a MoveTo path command at index ${r}`;return}if(e.index+=1,et(e),e.data=[],!o){qt(e);return}for(;;){for(let a=o;a>0;a-=1){if(ye(i)&&(a===3||a===4)?ae(e):ue(e),e.err.length)return;e.data.push(e.param),et(e),e.index=e.max||!he(s.charCodeAt(e.index)))break}qt(e)};class Ot{constructor(t){this.segments=[],this.pathValue=t,this.max=t.length,this.index=0,this.param=0,this.segmentStart=0,this.data=[],this.err=""}}const D=e=>{if(typeof e!="string")return e.slice(0);const t=new Ot(e);for(et(t);t.index{const[n]=e,i=n.toUpperCase();if(t===0||i===n)return e;if(i==="A")return[i,e[1],e[2],e[3],e[4],e[5],e[6]+s,e[7]+r];if(i==="V")return[i,e[1]+r];if(i==="H")return[i,e[1]+s];if(i==="L")return[i,e[1]+s,e[2]+r];{const l=[],c=e.length;for(let a=1;a{let s=e.length,r,n="M",i="M",o=!1,l=0,c=0,a=0,u=0,f=0;for(let h=0;h{const t=D(e);return O(t,at)},Bt=(e,t,s,r)=>{const[n]=e,i=n.toLowerCase();if(t===0||n===i)return e;if(i==="a")return[i,e[1],e[2],e[3],e[4],e[5],e[6]-s,e[7]-r];if(i==="v")return[i,e[1]-r];if(i==="h")return[i,e[1]-s];if(i==="l")return[i,e[1]-s,e[2]-r];{const l=[],c=e.length;for(let a=1;a{const t=D(e);return O(t,Bt)},st=(e,t,s)=>{const{sin:r,cos:n}=Math,i=e*n(s)-t*r(s),o=e*r(s)+t*n(s);return{x:i,y:o}},Mt=(e,t,s,r,n,i,o,l,c,a)=>{let u=e,f=t,h=s,y=r,m=l,g=c;const A=Math.PI*120/180,M=Math.PI/180*(+n||0);let N=[],x,p,w,T,k;if(a)[p,w,T,k]=a;else{x=st(u,f,-M),u=x.x,f=x.y,x=st(m,g,-M),m=x.x,g=x.y;const $=(u-m)/2,j=(f-g)/2;let q=$*$/(h*h)+j*j/(y*y);q>1&&(q=Math.sqrt(q),h*=q,y*=q);const vt=h*h,$t=y*y,Jt=(i===o?-1:1)*Math.sqrt(Math.abs((vt*$t-vt*j*j-$t*$*$)/(vt*j*j+$t*$*$)));T=Jt*h*j/y+(u+m)/2,k=Jt*-y*$/h+(f+g)/2,p=Math.asin(((f-k)/y*10**9>>0)/10**9),w=Math.asin(((g-k)/y*10**9>>0)/10**9),p=uw&&(p-=Math.PI*2),!o&&w>p&&(w-=Math.PI*2)}let I=w-p;if(Math.abs(I)>A){const $=w,j=m,q=g;w=p+A*(o&&w>p?1:-1),m=T+h*Math.cos(w),g=k+y*Math.sin(w),N=Mt(m,g,h,y,n,0,o,j,q,[w,$,T,k])}I=w-p;const z=Math.cos(p),v=Math.sin(p),B=Math.cos(w),W=Math.sin(w),E=Math.tan(I/4),L=4/3*h*E,R=4/3*y*E,H=[u,f],Q=[u+L*v,f-R*z],_=[m+L*W,g-R*B],G=[m,g];if(Q[0]=2*H[0]-Q[0],Q[1]=2*H[1]-Q[1],a)return[Q[0],Q[1],_[0],_[1],G[0],G[1]].concat(N);N=[Q[0],Q[1],_[0],_[1],G[0],G[1]].concat(N);const X=[];for(let $=0,j=N.length;${const o=.3333333333333333,l=2/3;return[o*e+l*s,o*t+l*r,o*n+l*s,o*i+l*r,n,i]},F=(e,t,s)=>{const[r,n]=e,[i,o]=t;return[r+(i-r)*s,n+(o-n)*s]},Pt=(e,t,s,r)=>{const n=F([e,t],[s,r],.3333333333333333),i=F([e,t],[s,r],2/3);return[n[0],n[1],i[0],i[1],s,r]},pe=(e,t)=>{const[s]=e,r=e.slice(1).map(Number),[n,i]=r,{x1:o,y1:l,x:c,y:a}=t;return"TQ".includes(s)||(t.qx=null,t.qy=null),s==="M"?(t.x=n,t.y=i,e):s==="A"?["C"].concat(Mt(o,l,r[0],r[1],r[2],r[3],r[4],r[5],r[6])):s==="Q"?(t.qx=n,t.qy=i,["C"].concat(xe(o,l,r[0],r[1],r[2],r[3]))):s==="L"?["C"].concat(Pt(o,l,n,i)):s==="Z"?["C"].concat(Pt(o,l,c,a)):e},Nt=(e,t)=>{const[s]=e,r=s.toUpperCase(),n=s!==r,{x1:i,y1:o,x2:l,y2:c,x:a,y:u}=t,f=e.slice(1);let h=f.map((y,m)=>y+(n?m%2?u:a:0));if("TQ".includes(r)||(t.qx=null,t.qy=null),r==="A")return h=f.slice(0,-2).concat(f[5]+(n?a:0),f[6]+(n?u:0)),["A"].concat(h);if(r==="H")return["L",e[1]+(n?a:0),o];if(r==="V")return["L",i,e[1]+(n?u:0)];if(r==="L")return["L",e[1]+(n?a:0),e[2]+(n?u:0)];if(r==="M")return["M",e[1]+(n?a:0),e[2]+(n?u:0)];if(r==="C")return["C"].concat(h);if(r==="S"){const y=i*2-l,m=o*2-c;return t.x1=y,t.y1=m,["C",y,m].concat(h)}else if(r==="T"){const y=i*2-(t.qx?t.qx:0),m=o*2-(t.qy?t.qy:0);return t.qx=y,t.qy=m,["Q",y,m].concat(h)}else if(r==="Q"){const[y,m]=h;return t.qx=y,t.qy=m,["Q"].concat(h)}else if(r==="Z")return["Z"];return e},ut={x1:0,y1:0,x2:0,y2:0,x:0,y:0,qx:null,qy:null},yt=e=>{const t={...ut},s=D(e);return O(s,(r,n,i,o)=>{t.x=i,t.y=o;const l=Nt(r,t);let c=pe(l,t);c[0]==="C"&&c.length>7&&(s.splice(n+1,0,["C"].concat(c.slice(7))),c=c.slice(0,7));const u=c.length;return t.x1=+c[u-2],t.y1=+c[u-1],t.x2=+c[u-4]||t.x1,t.y2=+c[u-3]||t.y1,c})},P=(e,t)=>{const s=t>=1?10**t:1;return t>0?Math.round(e*s)/s:Math.round(e)},kt=(e,t)=>{const s=e.length;let{round:r}=V,n=e[0],i="";r=t==="off"||typeof t=="number"&&t>=0?t:typeof r=="number"&&r>=0?r:"off";for(let o=0;oMath.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])),it=(e,t,s,r)=>wt([e,t],[s,r]),Ht=(e,t,s,r,n)=>{let i={x:e,y:t};if(typeof n=="number"){const o=wt([e,t],[s,r]);if(n<=0)i={x:e,y:t};else if(n>=o)i={x:s,y:r};else{const[l,c]=F([e,t],[s,r],n/o);i={x:l,y:c}}}return i},It=(e,t,s,r)=>{const{min:n,max:i}=Math;return[n(e,s),n(t,r),i(e,s),i(t,r)]},Ft=(e,t,s)=>{const r=s/2,n=Math.sin(r),i=Math.cos(r),o=e**2*n**2,l=t**2*i**2,c=Math.sqrt(o+l)*s;return Math.abs(c)},Y=(e,t,s,r,n,i)=>{const{sin:o,cos:l}=Math,c=l(n),a=o(n),u=s*l(i),f=r*o(i);return[e+c*u-a*f,t+a*u+c*f]},Et=(e,t)=>{const{x:s,y:r}=e,{x:n,y:i}=t,o=s*n+r*i,l=Math.sqrt((s**2+r**2)*(n**2+i**2));return(s*i-r*n<0?-1:1)*Math.acos(o/l)},Lt=(e,t,s,r,n,i,o,l,c)=>{const{abs:a,sin:u,cos:f,sqrt:h,PI:y}=Math;let m=a(s),g=a(r);const M=(n%360+360)%360*(y/180);if(e===l&&t===c)return{rx:m,ry:g,startAngle:0,endAngle:0,center:{x:l,y:c}};if(m===0||g===0)return{rx:m,ry:g,startAngle:0,endAngle:0,center:{x:(l+e)/2,y:(c+t)/2}};const N=(e-l)/2,x=(t-c)/2,p={x:f(M)*N+u(M)*x,y:-u(M)*N+f(M)*x},w=p.x**2/m**2+p.y**2/g**2;w>1&&(m*=h(w),g*=h(w));const T=m**2*g**2-m**2*p.y**2-g**2*p.x**2,k=m**2*p.y**2+g**2*p.x**2;let I=T/k;I=I<0?0:I;const z=(i!==o?1:-1)*h(I),v={x:z*(m*p.y/g),y:z*(-(g*p.x)/m)},B={x:f(M)*v.x-u(M)*v.y+(e+l)/2,y:u(M)*v.x+f(M)*v.y+(t+c)/2},W={x:(p.x-v.x)/m,y:(p.y-v.y)/g},E=Et({x:1,y:0},W),L={x:(-p.x-v.x)/m,y:(-p.y-v.y)/g};let R=Et(W,L);!o&&R>0?R-=2*y:o&&R<0&&(R+=2*y),R%=2*y;const H=E+R;return{center:B,startAngle:E,endAngle:H,rx:m,ry:g}},_t=(e,t,s,r,n,i,o,l,c)=>{const{rx:a,ry:u,startAngle:f,endAngle:h}=Lt(e,t,s,r,n,i,o,l,c);return Ft(a,u,h-f)},be=(e,t,s,r,n,i,o,l,c,a)=>{let u={x:e,y:t};const{center:f,rx:h,ry:y,startAngle:m,endAngle:g}=Lt(e,t,s,r,n,i,o,l,c);if(typeof a=="number"){const A=Ft(h,y,g-m);if(a<=0)u={x:e,y:t};else if(a>=A)u={x:l,y:c};else{if(e===l&&t===c)return{x:l,y:c};if(h===0||y===0)return Ht(e,t,l,c,a);const{PI:M,cos:N,sin:x}=Math,p=g-m,T=(n%360+360)%360*(M/180),k=m+p*(a/A),I=h*N(k),z=y*x(k);u={x:N(T)*I-x(T)*z+f.x,y:x(T)*I+N(T)*z+f.y}}}return u},de=(e,t,s,r,n,i,o,l,c)=>{const{center:a,rx:u,ry:f,startAngle:h,endAngle:y}=Lt(e,t,s,r,n,i,o,l,c),m=y-h,{min:g,max:A,tan:M,atan2:N,PI:x}=Math,{x:p,y:w}=a,T=n*x/180,k=M(T),I=N(-f*k,u),z=I,v=I+x,B=N(f,u*k),W=B+x,E=[l],L=[c];let R=g(e,l),H=A(e,l),Q=g(t,c),_=A(t,c);const G=y-m*1e-5,X=Y(p,w,u,f,T,G),$=y-m*.99999,j=Y(p,w,u,f,T,$);if(X[0]>H||j[0]>H){const q=Y(p,w,u,f,T,z);E.push(q[0]),L.push(q[1])}if(X[0]_||j[1]>_){const q=Y(p,w,u,f,T,B);E.push(q[0]),L.push(q[1])}return R=g.apply([],E),Q=g.apply([],L),H=A.apply([],E),_=A.apply([],L),[R,Q,H,_]},He=Object.freeze(Object.defineProperty({__proto__:null,angleBetween:Et,arcLength:Ft,arcPoint:Y,getArcBBox:de,getArcLength:_t,getArcProps:Lt,getPointAtArcLength:be},Symbol.toStringTag,{value:"Module"})),Rt=[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213],Ae=[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872],Me=e=>{const t=[];for(let s=e,r=s.length,n=r-1;r>1;r-=1,n-=1){const i=[];for(let o=0;o{if(t===0)return e[0].t=0,e[0];const s=e.length-1;if(t===1)return e[s].t=1,e[s];const r=1-t;let n=e;if(s===0)return e[0].t=t,e[0];if(s===1)return{x:r*n[0].x+t*n[1].x,y:r*n[0].y+t*n[1].y,t};const i=r*r,o=t*t;let l=0,c=0,a=0,u=0;return s===2?(n=[n[0],n[1],n[2],{x:0,y:0}],l=i,c=r*t*2,a=o):s===3&&(l=i*r,c=i*t*3,a=r*o*3,u=t*o),{x:l*n[0].x+c*n[1].x+a*n[2].x+u*n[3].x,y:l*n[0].y+c*n[1].y+a*n[2].y+u*n[3].y,t}},we=(e,t)=>{const s=e(t),r=s.x*s.x+s.y*s.y;return Math.sqrt(r)},Le=e=>{const s=Rt.length;let r=0;for(let n=0,i;n{const t=[];for(let r=0,n=e.length,i=2;rNe(s[0],r))},Te=1e-8,gt=([e,t,s])=>{const r=Math.min(e,s),n=Math.max(e,s);if(t>=e?s>=t:s<=t)return[r,n];const i=(e*s-t*t)/(e-2*t+s);return i{const n=e-3*t+3*s-r;if(Math.abs(n)0&&u<1){const h=e*(1-u)*(1-u)*(1-u)+t*3*(1-u)*(1-u)*u+s*3*(1-u)*u*u+r*u*u*u;hc&&(c=h)}return[l,c]},Ce=([e,t,s,r,n,i,o,l],c)=>{const a=1-c;return{x:a**3*e+3*a**2*c*s+3*a*c**2*n+c**3*o,y:a**3*t+3*a**2*c*r+3*a*c**2*i+c**3*l}},xt=(e,t,s,r,n,i,o,l)=>mt([e,t,s,r,n,i,o,l]),ve=(e,t,s,r,n,i,o,l,c)=>{const a=typeof c=="number";let u={x:e,y:t};if(a){const f=mt([e,t,s,r,n,i,o,l]);c<=0||(c>=f?u={x:o,y:l}:u=Ce([e,t,s,r,n,i,o,l],c/f))}return u},St=(e,t,s,r,n,i,o,l)=>{const c=jt([e,s,n,o]),a=jt([t,r,i,l]);return[c[0],a[0],c[1],a[1]]},$e=([e,t,s,r,n,i],o)=>{const l=1-o;return{x:l**2*e+2*l*o*s+o**2*n,y:l**2*t+2*l*o*r+o**2*i}},pt=(e,t,s,r,n,i)=>mt([e,t,s,r,n,i]),ze=(e,t,s,r,n,i,o)=>{const l=typeof o=="number";let c={x:e,y:t};if(l){const a=mt([e,t,s,r,n,i]);o<=0||(o>=a?c={x:n,y:i}:c=$e([e,t,s,r,n,i],o/a))}return c},Qt=(e,t,s,r,n,i)=>{const o=gt([e,s,n]),l=gt([t,r,i]);return[o[0],l[0],o[1],l[1]]},Fe=e=>{const t=e.length;let s=-1,r,n=e[t-1],i=0;for(;++se.reduce((t,s,r)=>r?t+wt(e[r-1],s):0,0),bt=1e-5,ot=e=>{const t=D(e),s={...ut};return O(t,(r,n,i,o)=>{s.x=i,s.y=o;const l=Nt(r,s),c=l.length;return s.x1=+l[c-2],s.y1=+l[c-1],s.x2=+l[c-4]||s.x1,s.y2=+l[c-3]||s.y1,l})},rt=(e,t)=>{const s=ot(e);let r=!1,n=[],i="M",o=0,l=0,[c,a]=s[0].slice(1);const u=typeof t=="number";let f={x:c,y:a},h=0,y=f,m=0;return!u||t{if([i]=g,r=i==="M",n=r?n:[M,N].concat(g.slice(1)),r?([,c,a]=g,f={x:c,y:a},h=0):i==="L"?(f=Ht(n[0],n[1],n[2],n[3],t-m),h=it(n[0],n[1],n[2],n[3])):i==="A"?(f=be(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8],t-m),h=_t(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8])):i==="C"?(f=ve(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],t-m),h=xt(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7])):i==="Q"?(f=ze(n[0],n[1],n[2],n[3],n[4],n[5],t-m),h=pt(n[0],n[1],n[2],n[3],n[4],n[5])):i==="Z"&&(n=[M,N,c,a],f={x:c,y:a},h=it(n[0],n[1],n[2],n[3])),[o,l]=n.slice(-2),mm-bt?{x:o,y:l}:y)},nt=e=>{const t=D(e);let s=0,r=0,n=0,i=0,o=0,l=0,c="M",a=0,u=0,f=0;return O(t,(h,y,m,g)=>{[c]=h;const A=c.toUpperCase(),N=A!==c?at(h,y,m,g):h.slice(0),x=A==="V"?["L",m,N[1]]:A==="H"?["L",N[1],g]:N;if([c]=x,"TQ".includes(A)||(o=0,l=0),c==="M")[,a,u]=x;else if(c==="L")f+=it(m,g,x[1],x[2]);else if(c==="A")f+=_t(m,g,x[1],x[2],x[3],x[4],x[5],x[6],x[7]);else if(c==="S"){const p=s*2-n,w=r*2-i;f+=xt(m,g,p,w,x[1],x[2],x[3],x[4])}else c==="C"?f+=xt(m,g,x[1],x[2],x[3],x[4],x[5],x[6]):c==="T"?(o=s*2-o,l=r*2-l,f+=pt(m,g,o,l,x[1],x[2])):c==="Q"?(o=x[1],l=x[2],f+=pt(m,g,x[1],x[2],x[3],x[4])):c==="Z"&&(f+=it(m,g,a,u));[s,r]=c==="Z"?[a,u]:x.slice(-2),[n,i]=c==="C"?[x[3],x[4]]:c==="S"?[x[1],x[2]]:[s,r]}),f},Ut=(e,t)=>{const s=D(e);let r=s.slice(0),n=nt(r),i=r.length-1,o=0,l=0,c=s[0];if(i<=0||!t||!Number.isFinite(t))return{segment:c,index:0,length:l,lengthAtSegment:o};if(t>=n)return r=s.slice(0,-1),o=nt(r),l=n-o,c=s[i],{segment:c,index:i,length:l,lengthAtSegment:o};const a=[];for(;i>0;)c=r[i],r=r.slice(0,-1),o=nt(r),l=n-o,n=o,a.push({segment:c,index:i,length:l,lengthAtSegment:o}),i-=1;return a.find(({lengthAtSegment:u})=>u<=t)},Tt=(e,t)=>{const s=D(e),r=ot(s),n=nt(r),i=p=>{const w=p.x-t.x,T=p.y-t.y;return w*w+T*T};let o=8,l,c={x:0,y:0},a=0,u=0,f=1/0;for(let p=0;p<=n;p+=o)l=rt(r,p),a=i(l),a1e-6&&(m=u-o,h=rt(r,m),A=i(h),g=u+o,y=rt(r,g),M=i(y),m>=0&&ATt(e,t).closest,Je=(e,t,s,r,n,i,o,l)=>3*((l-t)*(s+n)-(o-e)*(r+i)+r*(e-n)-s*(t-i)+l*(n+e/3)-o*(i+t/3))/20,qe=e=>{let t=0,s=0,r=0;return yt(e).map(n=>{switch(n[0]){case"M":return[,t,s]=n,0;default:return r=Je(t,s,n[1],n[2],n[3],n[4],n[5],n[6]),[t,s]=n.slice(-2),r}}).reduce((n,i)=>n+i,0)},Ke=e=>qe(yt(e))>=0,Wt=e=>{if(!e)return{x:0,y:0,width:0,height:0,x2:0,y2:0,cx:0,cy:0,cz:0};const t=D(e);let s="M",r=0,n=0;const{max:i,min:o}=Math;let l=1/0,c=1/0,a=-1/0,u=-1/0,f=0,h=0,y=0,m=0,g=0,A=0,M=0,N=0,x=0,p=0;O(t,(k,I,z,v)=>{[s]=k;const B=s.toUpperCase(),E=B!==s?at(k,I,z,v):k.slice(0),L=B==="V"?["L",z,E[1]]:B==="H"?["L",E[1],v]:E;if([s]=L,"TQ".includes(B)||(x=0,p=0),s==="M")[,r,n]=L,f=r,h=n,y=r,m=n;else if(s==="L")[f,h,y,m]=It(z,v,L[1],L[2]);else if(s==="A")[f,h,y,m]=de(z,v,L[1],L[2],L[3],L[4],L[5],L[6],L[7]);else if(s==="S"){const R=g*2-M,H=A*2-N;[f,h,y,m]=St(z,v,R,H,L[1],L[2],L[3],L[4])}else s==="C"?[f,h,y,m]=St(z,v,L[1],L[2],L[3],L[4],L[5],L[6]):s==="T"?(x=g*2-x,p=A*2-p,[f,h,y,m]=Qt(z,v,x,p,L[1],L[2])):s==="Q"?(x=L[1],p=L[2],[f,h,y,m]=Qt(z,v,L[1],L[2],L[3],L[4])):s==="Z"&&([f,h,y,m]=It(z,v,r,n));l=o(f,l),c=o(h,c),a=i(y,a),u=i(m,u),[g,A]=s==="Z"?[r,n]:L.slice(-2),[M,N]=s==="C"?[L[3],L[4]]:s==="S"?[L[1],L[2]]:[g,A]});const w=a-l,T=u-c;return{width:w,height:T,x:l,y:c,x2:a,y2:u,cx:l+w/2,cy:c+T/2,cz:Math.max(w,T)+Math.min(w,T)/2}},We=(e,t)=>Ut(e,t).segment,Xe=(e,t)=>Tt(e,t).segment,Ct=e=>Array.isArray(e)&&e.every(t=>{const s=t[0].toLowerCase();return tt[s]===t.length-1&&"achlmqstvz".includes(s)&&t.slice(1).every(Number.isFinite)})&&e.length>0,Pe=e=>Ct(e)&&e.every(([t])=>t===t.toUpperCase()),ke=e=>Pe(e)&&e.every(([t])=>"ACLMQZ".includes(t)),Ye=e=>ke(e)&&e.every(([t])=>"MC".includes(t)),Ve=(e,t)=>{const{distance:s}=Tt(e,t);return Math.abs(s)Ct(e)&&e.slice(1).every(([t])=>t===t.toLowerCase()),Ie=e=>{if(typeof e!="string"||!e.length)return!1;const t=new Ot(e);for(et(t);t.indexe!=null&&typeof e=="object"&&e.nodeType===1,tn=e=>{let{x1:t,y1:s,x2:r,y2:n}=e;return[t,s,r,n]=[t,s,r,n].map(i=>+i),[["M",t,s],["L",r,n]]},en=e=>{const t=[],s=(e.points||"").trim().split(/[\s|,]/).map(n=>+n);let r=0;for(;r{let{cx:t,cy:s,r}=e;return[t,s,r]=[t,s,r].map(n=>+n),[["M",t-r,s],["a",r,r,0,1,0,2*r,0],["a",r,r,0,1,0,-2*r,0]]},sn=e=>{let{cx:t,cy:s}=e,r=e.rx||0,n=e.ry||r;return[t,s,r,n]=[t,s,r,n].map(i=>+i),[["M",t-r,s],["a",r,n,0,1,0,2*r,0],["a",r,n,0,1,0,-2*r,0]]},rn=e=>{const t=+e.x||0,s=+e.y||0,r=+e.width,n=+e.height;let i=+(e.rx||0),o=+(e.ry||i);return i||o?(i*2>r&&(i-=(i*2-r)/2),o*2>n&&(o-=(o*2-n)/2),[["M",t+i,s],["h",r-i*2],["s",i,0,i,o],["v",n-o*2],["s",0,o,-i,o],["h",-r+i*2],["s",-i,0,-i,-o],["v",-n+o*2],["s",0,-o,i,-o]]):[["M",t,s],["h",r],["v",n],["H",t],["Z"]]},Re=e=>{const t=Object.keys(ct),s=Ee(e),r=s?e.tagName:null;if(r&&[...t,"path"].every(c=>r!==c))throw TypeError(`${Z}: "${r}" is not SVGElement`);const n=s?r:e.type,i=ct[n],o={type:n};s?i.forEach(c=>{o[c]=e.getAttribute(c)}):Object.assign(o,e);let l=[];return n==="circle"?l=nn(o):n==="ellipse"?l=sn(o):["polyline","polygon"].includes(n)?l=en(o):n==="rect"?l=rn(o):n==="line"?l=tn(o):["glyph","path"].includes(n)&&(l=D(s?e.getAttribute("d")||"":e.d||"")),Ct(l)&&l.length?l:!1},on=(e,t,s)=>{const r=s||document,n=Object.keys(ct),i=Ee(e),o=i?e.tagName:null;if(o==="path")throw TypeError(`${Z}: "${o}" is already SVGPathElement`);if(o&&n.every(m=>o!==m))throw TypeError(`${Z}: "${o}" is not SVGElement`);const l=r.createElementNS("http://www.w3.org/2000/svg","path"),c=i?o:e.type,a=ct[c],u={type:c},f=V.round,h=Re(e),y=h&&h.length?kt(h,f):"";return i?(a.forEach(m=>{u[m]=e.getAttribute(m)}),Object.values(e.attributes).forEach(({name:m,value:g})=>{a.includes(m)||l.setAttribute(m,g)})):(Object.assign(u,e),Object.keys(u).forEach(m=>{!a.includes(m)&&m!=="type"&&l.setAttribute(m.replace(/[A-Z]/g,g=>`-${g.toLowerCase()}`),u[m])})),Ie(y)?(l.setAttribute("d",y),t&&i&&(e.before(l,e),e.remove()),l):!1},je=e=>{let t=new C;const{origin:s}=e,[r,n]=s,{translate:i}=e,{rotate:o}=e,{skew:l}=e,{scale:c}=e;return Array.isArray(i)&&i.length>=2&&i.every(a=>!Number.isNaN(+a))&&i.some(a=>a!==0)?t=t.translate(...i):typeof i=="number"&&!Number.isNaN(i)&&(t=t.translate(i)),(o||l||c)&&(t=t.translate(r,n),Array.isArray(o)&&o.length>=2&&o.every(a=>!Number.isNaN(+a))&&o.some(a=>a!==0)?t=t.rotate(...o):typeof o=="number"&&!Number.isNaN(o)&&(t=t.rotate(o)),Array.isArray(l)&&l.length===2&&l.every(a=>!Number.isNaN(+a))&&l.some(a=>a!==0)?(t=l[0]?t.skewX(l[0]):t,t=l[1]?t.skewY(l[1]):t):typeof l=="number"&&!Number.isNaN(l)&&(t=t.skewX(l)),Array.isArray(c)&&c.length>=2&&c.every(a=>!Number.isNaN(+a))&&c.some(a=>a!==1)?t=t.scale(...c):typeof c=="number"&&!Number.isNaN(c)&&(t=t.scale(c)),t=t.translate(-r,-n)),t},Se=(e,t,s,r)=>{const[n]=e,{round:i}=V,o=typeof i=="number"?i:4,l=t.slice(1),{x1:c,y1:a,x2:u,y2:f,x:h,y}=s,[m,g]=l.slice(-2),A=e;if("TQ".includes(n)||(s.qx=null,s.qy=null),n==="L"){if(P(h,o)===P(m,o))return["V",g];if(P(y,o)===P(g,o))return["H",m]}else if(n==="C"){const[M,N]=l;if(s.x1=M,s.y1=N,"CS".includes(r)&&(P(M,o)===P(c*2-u,o)&&P(N,o)===P(a*2-f,o)||P(c,o)===P(u*2-h,o)&&P(a,o)===P(f*2-y,o)))return["S",l[2],l[3],l[4],l[5]]}else if(n==="Q"){const[M,N]=l;if(s.qx=M,s.qy=N,"QT".includes(r)&&P(M,o)===P(c*2-u,o)&&P(N,o)===P(a*2-f,o))return["T",l[2],l[3]]}return A},dt=(e,t)=>{const s=e.slice(1).map(r=>P(r,t));return[e[0]].concat(s)},Xt=(e,t)=>{const s=ht(e),r=typeof t=="number"&&t>=0?t:2,n={...ut},i=[];let o="M",l="Z";return O(s,(c,a,u,f)=>{n.x=u,n.y=f;const h=Nt(c,n);let y=c;if([o]=c,i[a]=o,a){l=i[a-1];const g=Se(c,h,n,l),A=dt(g,r),M=A.join(""),N=Bt(g,a,u,f),x=dt(N,r),p=x.join("");y=M.length{let s=C.Translate(t[0],t[1],t[2]);return[,,,s.m44]=t,s=e.multiply(s),[s.m41,s.m42,s.m43,s.m44]},Zt=(e,t,s)=>{const[r,n,i]=s,[o,l,c]=cn(e,[t[0],t[1],0,1]),a=o-r,u=l-n,f=c-i;return[a*(Math.abs(i)/Math.abs(f)||1)+r,u*(Math.abs(i)/Math.abs(f)||1)+n]},ln=e=>{const t=e.slice(1).map((s,r,n)=>r?n[r-1].slice(-2).concat(s.slice(1)):e[0].slice(1).concat(s.slice(1))).map(s=>s.map((r,n)=>s[s.length-n-2*(1-n%2)])).reverse();return[["M"].concat(t[0].slice(0,2))].concat(t.map(s=>["C"].concat(s.slice(2))))},ft=e=>{const t=ht(e),s=ot(t),r=t.length,n=t[r-1][0]==="Z",i=O(t,(o,l)=>{const c=s[l],a=l&&t[l-1],u=a&&a[0],f=t[l+1],h=f&&f[0],[y]=o,[m,g]=s[l?l-1:r-1].slice(-2);let A=o;switch(y){case"M":A=n?["Z"]:[y,m,g];break;case"A":A=[y,o[1],o[2],o[3],o[4],o[5]===1?0:1,m,g];break;case"C":f&&h==="S"?A=["S",o[1],o[2],m,g]:A=[y,o[3],o[4],o[1],o[2],m,g];break;case"S":u&&"CS".includes(u)&&(!f||h!=="S")?A=["C",c[3],c[4],c[1],c[2],m,g]:A=[y,c[1],c[2],m,g];break;case"Q":f&&h==="T"?A=["T",m,g]:A=[y,o[1],o[2],m,g];break;case"T":u&&"QT".includes(u)&&(!f||h!=="T")?A=["Q",c[1],c[2],m,g]:A=[y,m,g];break;case"Z":A=["M",m,g];break;case"H":A=[y,m];break;case"V":A=[y,g];break;default:A=[y].concat(o.slice(1,-2),m,g)}return A});return n?i.reverse():[i[0]].concat(i.slice(1).reverse())},an=(e,t)=>{let{round:s}=V;return s=t==="off"||typeof t=="number"&&t>=0?t:typeof s=="number"&&s>=0?s:"off",s==="off"?e.slice(0):O(e,r=>dt(r,s))},un=(e,t=.5)=>{const s=t,r=e.slice(0,2),n=e.slice(2,4),i=e.slice(4,6),o=e.slice(6,8),l=F(r,n,s),c=F(n,i,s),a=F(i,o,s),u=F(l,c,s),f=F(c,a,s),h=F(u,f,s);return[["C",l[0],l[1],u[0],u[1],h[0],h[1]],["C",f[0],f[1],a[0],a[1],o[0],o[1]]]},Yt=e=>{const t=[];let s,r=-1,n=0,i=0,o=0,l=0;const c={...ut};return e.forEach(a=>{const[u]=a,f=u.toUpperCase(),h=u.toLowerCase(),y=u===h,m=a.slice(1);f==="M"?(r+=1,[n,i]=m,n+=y?c.x:0,i+=y?c.y:0,o=n,l=i,s=[y?[f,o,l]:a]):(f==="Z"?(n=o,i=l):f==="H"?([,n]=a,n+=y?c.x:0):f==="V"?([,i]=a,i+=y?c.y:0):([n,i]=a.slice(-2),n+=y?c.x:0,i+=y?c.y:0),s.push(a)),c.x=n,c.y=i,t[r]=s}),t},Vt=(e,t)=>{let s=0,r=0,n=0,i=0,o=0,l=0,c="M";const a=D(e),u=t&&Object.keys(t);if(!t||u&&!u.length)return a.slice(0);t.origin||Object.assign(t,{origin:V.origin});const f=t.origin,h=je(t);return h.isIdentity?a.slice(0):O(a,(y,m,g,A)=>{[c]=y;const M=c.toUpperCase(),x=M!==c?at(y,m,g,A):y.slice(0);let p=M==="A"?["C"].concat(Mt(g,A,x[1],x[2],x[3],x[4],x[5],x[6],x[7])):M==="V"?["L",g,x[1]]:M==="H"?["L",x[1],A]:x;c=p[0];const w=c==="C"&&p.length>7,T=w?p.slice(0,7):p.slice(0);if(w&&(a.splice(m+1,0,["C"].concat(p.slice(7))),p=T),c==="L")[n,i]=Zt(h,[p[1],p[2]],f),s!==n&&r!==i?p=["L",n,i]:r===i?p=["H",n]:s===n&&(p=["V",i]);else for(o=1,l=p.length;o"u";if(n||!t.length)throw TypeError(`${Z}: "pathValue" is ${n?"undefined":"empty"}`);this.segments=D(t);const{round:i,origin:o}=r;let l;Number.isInteger(i)||i==="off"?l=i:l=V.round;let c=V.origin;if(Array.isArray(o)&&o.length>=2){const[a,u,f]=o.map(Number);c=[Number.isNaN(a)?0:a,Number.isNaN(u)?0:u,Number.isNaN(f)?0:f]}return this.round=l,this.origin=c,this}get bbox(){return Wt(this.segments)}get length(){return nt(this.segments)}getBBox(){return this.bbox}getTotalLength(){return this.length}getPointAtLength(t){return rt(this.segments,t)}toAbsolute(){const{segments:t}=this;return this.segments=ht(t),this}toRelative(){const{segments:t}=this;return this.segments=Kt(t),this}toCurve(){const{segments:t}=this;return this.segments=yt(t),this}reverse(t){const{segments:s}=this,r=Yt(s),n=r.length>1?r:!1,i=n?n.map((l,c)=>t?c?ft(l):l.slice(0):ft(l)):s.slice(0);let o=[];return n?o=i.flat(1):o=t?s:ft(s),this.segments=o.slice(0),this}normalize(){const{segments:t}=this;return this.segments=ot(t),this}optimize(){const{segments:t}=this,s=this.round==="off"?2:this.round;return this.segments=Xt(t,s),this}transform(t){if(!t||typeof t!="object"||typeof t=="object"&&!["translate","rotate","skew","scale"].some(c=>c in t))return this;const{segments:s,origin:[r,n,i]}=this,o={};for(const[c,a]of Object.entries(t))c==="skew"&&Array.isArray(a)||(c==="rotate"||c==="translate"||c==="origin"||c==="scale")&&Array.isArray(a)?o[c]=a.map(Number):c!=="origin"&&typeof Number(a)=="number"&&(o[c]=Number(a));const{origin:l}=o;if(Array.isArray(l)&&l.length>=2){const[c,a,u]=l.map(Number);o.origin=[Number.isNaN(c)?r:c,Number.isNaN(a)?n:a,u||i]}else o.origin=[r,n,i];return this.segments=Vt(s,o),this}flipX(){const{cx:t,cy:s}=this.bbox;return this.transform({rotate:[0,180,0],origin:[t,s,0]}),this}flipY(){const{cx:t,cy:s}=this.bbox;return this.transform({rotate:[180,0,0],origin:[t,s,0]}),this}toString(){return kt(this.segments,this.round)}dispose(){Object.keys(this).forEach(t=>delete this[t])}}b(d,"CSSMatrix",C),b(d,"pathToAbsolute",ht),b(d,"pathToRelative",Kt),b(d,"pathToCurve",yt),b(d,"pathToString",kt),b(d,"arcTools",He),b(d,"bezierTools",{Cvalues:Ae,Tvalues:Rt,minmaxC:jt,minmaxQ:gt,getBezierLength:mt,bezierLength:Le,calculateBezier:we,computeBezier:Ne,deriveBezier:Me,CBEZIER_MINMAX_EPSILON:Te}),b(d,"cubicTools",{getCubicLength:xt,getCubicBBox:St,getPointAtCubicLength:ve,getPointAtCubicSegmentLength:Ce}),b(d,"lineTools",{getPointAtLineLength:Ht,getLineBBox:It,getLineLength:it}),b(d,"quadTools",{getPointAtQuadSegmentLength:$e,getQuadLength:pt,getQuadBBox:Qt,getPointAtQuadLength:ze}),b(d,"polygonTools",{polygonArea:Fe,polygonLength:_e}),b(d,"distanceSquareRoot",wt),b(d,"distanceEpsilon",bt),b(d,"midPoint",F),b(d,"rotateVector",st),b(d,"roundTo",P),b(d,"finalizeSegment",qt),b(d,"invalidPathValue",K),b(d,"isArcCommand",ye),b(d,"isDigit",J),b(d,"isDigitStart",he),b(d,"isMoveCommand",ge),b(d,"isPathCommand",fe),b(d,"isSpace",me),b(d,"paramsCount",tt),b(d,"paramsParser",ut),b(d,"pathParser",Ot),b(d,"scanFlag",ae),b(d,"scanParam",ue),b(d,"scanSegment",Dt),b(d,"skipSpaces",et),b(d,"getPathBBox",Wt),b(d,"getPathArea",qe),b(d,"getTotalLength",nt),b(d,"getDrawDirection",Ke),b(d,"getPointAtLength",rt),b(d,"getPropertiesAtLength",Ut),b(d,"getPropertiesAtPoint",Tt),b(d,"getClosestPoint",Ue),b(d,"getSegmentOfPoint",Xe),b(d,"getSegmentAtLength",We),b(d,"isPointInStroke",Ve),b(d,"isValidPath",Ie),b(d,"isPathArray",Ct),b(d,"isAbsoluteArray",Pe),b(d,"isRelativeArray",Ge),b(d,"isCurveArray",Ye),b(d,"isNormalizedArray",ke),b(d,"shapeToPath",on),b(d,"shapeToPathArray",Re),b(d,"shapeParams",ct),b(d,"parsePathString",D),b(d,"absolutizeSegment",at),b(d,"arcToCubic",Mt),b(d,"getSVGMatrix",je),b(d,"iterate",O),b(d,"lineToCubic",Pt),b(d,"normalizePath",ot),b(d,"normalizeSegment",Nt),b(d,"optimizePath",Xt),b(d,"projection2d",Zt),b(d,"quadToCubic",xe),b(d,"relativizeSegment",Bt),b(d,"reverseCurve",ln),b(d,"reversePath",ft),b(d,"roundPath",an),b(d,"roundSegment",dt),b(d,"segmentToCubic",pe),b(d,"shortenSegment",Se),b(d,"splitCubic",un),b(d,"splitPath",Yt),b(d,"transformPath",Vt);module.exports=d; //# sourceMappingURL=svg-path-commander.cjs.map diff --git a/dist/svg-path-commander.cjs.map b/dist/svg-path-commander.cjs.map index b510801..b17d25e 100644 --- a/dist/svg-path-commander.cjs.map +++ b/dist/svg-path-commander.cjs.map @@ -1 +1 @@ -{"version":3,"file":"svg-path-commander.cjs","sources":["../node_modules/.pnpm/@thednp+dommatrix@2.0.11/node_modules/@thednp/dommatrix/dist/dommatrix.mjs","../src/options/options.ts","../src/parser/paramsCount.ts","../src/parser/finalizeSegment.ts","../src/parser/error.ts","../src/parser/scanFlag.ts","../src/parser/isDigit.ts","../src/parser/invalidPathValue.ts","../src/parser/scanParam.ts","../src/parser/isSpace.ts","../src/parser/skipSpaces.ts","../src/parser/isPathCommand.ts","../src/parser/isDigitStart.ts","../src/parser/isArcCommand.ts","../src/parser/isMoveCommand.ts","../src/parser/scanSegment.ts","../src/parser/pathParser.ts","../src/parser/parsePathString.ts","../src/process/absolutizeSegment.ts","../src/process/iterate.ts","../src/convert/pathToAbsolute.ts","../src/process/relativizeSegment.ts","../src/convert/pathToRelative.ts","../src/math/rotateVector.ts","../src/process/arcToCubic.ts","../src/process/quadToCubic.ts","../src/math/midPoint.ts","../src/process/lineToCubic.ts","../src/process/segmentToCubic.ts","../src/process/normalizeSegment.ts","../src/parser/paramsParser.ts","../src/convert/pathToCurve.ts","../src/math/roundTo.ts","../src/convert/pathToString.ts","../src/math/distanceSquareRoot.ts","../src/math/lineTools.ts","../src/math/arcTools.ts","../src/math/bezier.ts","../src/math/cubicTools.ts","../src/math/quadTools.ts","../src/math/polygonTools.ts","../src/util/distanceEpsilon.ts","../src/process/normalizePath.ts","../src/util/getPointAtLength.ts","../src/util/getTotalLength.ts","../src/util/getPropertiesAtLength.ts","../src/util/getPropertiesAtPoint.ts","../src/util/getClosestPoint.ts","../src/util/getPathArea.ts","../src/util/getDrawDirection.ts","../src/util/getPathBBox.ts","../src/util/getSegmentAtLength.ts","../src/util/getSegmentOfPoint.ts","../src/util/isPathArray.ts","../src/util/isAbsoluteArray.ts","../src/util/isNormalizedArray.ts","../src/util/isCurveArray.ts","../src/util/isPointInStroke.ts","../src/util/isRelativeArray.ts","../src/util/isValidPath.ts","../src/util/shapeParams.ts","../src/util/isElement.ts","../src/util/shapeToPathArray.ts","../src/util/shapeToPath.ts","../src/process/getSVGMatrix.ts","../src/process/shortenSegment.ts","../src/process/roundSegment.ts","../src/process/optimizePath.ts","../src/process/projection2d.ts","../src/process/reverseCurve.ts","../src/process/reversePath.ts","../src/process/roundPath.ts","../src/process/splitCubic.ts","../src/process/splitPath.ts","../src/process/transformPath.ts","../src/index.ts"],"sourcesContent":["var Z = Object.defineProperty;\nvar z = (s, t, e) => t in s ? Z(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e;\nvar p = (s, t, e) => z(s, typeof t != \"symbol\" ? t + \"\" : t, e);\nconst $ = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: 0,\n f: 0,\n m11: 1,\n m12: 0,\n m13: 0,\n m14: 0,\n m21: 0,\n m22: 1,\n m23: 0,\n m24: 0,\n m31: 0,\n m32: 0,\n m33: 1,\n m34: 0,\n m41: 0,\n m42: 0,\n m43: 0,\n m44: 1,\n is2D: !0,\n isIdentity: !0\n}, E = (s) => (s instanceof Float64Array || s instanceof Float32Array || Array.isArray(s) && s.every((t) => typeof t == \"number\")) && [6, 16].some((t) => s.length === t), P = (s) => s instanceof DOMMatrix || s instanceof y || typeof s == \"object\" && Object.keys($).every((t) => s && t in s), g = (s) => {\n const t = new y(), e = Array.from(s);\n if (!E(e))\n throw TypeError(\n `CSSMatrix: \"${e.join(\",\")}\" must be an array with 6/16 numbers.`\n );\n // istanbul ignore else @preserve\n if (e.length === 16) {\n const [\n n,\n i,\n r,\n a,\n l,\n m,\n h,\n c,\n u,\n f,\n w,\n o,\n d,\n A,\n M,\n b\n ] = e;\n t.m11 = n, t.a = n, t.m21 = l, t.c = l, t.m31 = u, t.m41 = d, t.e = d, t.m12 = i, t.b = i, t.m22 = m, t.d = m, t.m32 = f, t.m42 = A, t.f = A, t.m13 = r, t.m23 = h, t.m33 = w, t.m43 = M, t.m14 = a, t.m24 = c, t.m34 = o, t.m44 = b;\n } else if (e.length === 6) {\n const [n, i, r, a, l, m] = e;\n t.m11 = n, t.a = n, t.m12 = i, t.b = i, t.m21 = r, t.c = r, t.m22 = a, t.d = a, t.m41 = l, t.e = l, t.m42 = m, t.f = m;\n }\n return t;\n}, X = (s) => {\n if (P(s))\n return g([\n s.m11,\n s.m12,\n s.m13,\n s.m14,\n s.m21,\n s.m22,\n s.m23,\n s.m24,\n s.m31,\n s.m32,\n s.m33,\n s.m34,\n s.m41,\n s.m42,\n s.m43,\n s.m44\n ]);\n throw TypeError(\n `CSSMatrix: \"${JSON.stringify(s)}\" is not a DOMMatrix / CSSMatrix / JSON compatible object.`\n );\n}, O = (s) => {\n if (typeof s != \"string\")\n throw TypeError(`CSSMatrix: \"${JSON.stringify(s)}\" is not a string.`);\n const t = String(s).replace(/\\s/g, \"\");\n let e = new y();\n const n = `CSSMatrix: invalid transform string \"${s}\"`;\n return t.split(\")\").filter((i) => i).forEach((i) => {\n const [r, a] = i.split(\"(\");\n if (!a) throw TypeError(n);\n const l = a.split(\",\").map(\n (o) => o.includes(\"rad\") ? parseFloat(o) * (180 / Math.PI) : parseFloat(o)\n ), [m, h, c, u] = l, f = [m, h, c], w = [m, h, c, u];\n if (r === \"perspective\" && m && [h, c].every((o) => o === void 0))\n e.m34 = -1 / m;\n else if (r.includes(\"matrix\") && [6, 16].includes(l.length) && l.every((o) => !Number.isNaN(+o))) {\n const o = l.map((d) => Math.abs(d) < 1e-6 ? 0 : d);\n e = e.multiply(g(o));\n } else if (r === \"translate3d\" && f.every((o) => !Number.isNaN(+o)))\n e = e.translate(m, h, c);\n else if (r === \"translate\" && m && c === void 0)\n e = e.translate(m, h || 0, 0);\n else if (r === \"rotate3d\" && w.every((o) => !Number.isNaN(+o)) && u)\n e = e.rotateAxisAngle(m, h, c, u);\n else if (r === \"rotate\" && m && [h, c].every((o) => o === void 0))\n e = e.rotate(0, 0, m);\n else if (r === \"scale3d\" && f.every((o) => !Number.isNaN(+o)) && f.some((o) => o !== 1))\n e = e.scale(m, h, c);\n else if (\n // prop === \"scale\" && !Number.isNaN(x) && x !== 1 && z === undefined\n // prop === \"scale\" && !Number.isNaN(x) && [x, y].some((n) => n !== 1) &&\n r === \"scale\" && !Number.isNaN(m) && (m !== 1 || h !== 1) && c === void 0\n ) {\n const d = Number.isNaN(+h) ? m : h;\n e = e.scale(m, d, 1);\n } else if (r === \"skew\" && (m || !Number.isNaN(m) && h) && c === void 0)\n e = e.skew(m, h || 0);\n else if ([\"translate\", \"rotate\", \"scale\", \"skew\"].some(\n (o) => r.includes(o)\n ) && /[XYZ]/.test(r) && m && [h, c].every((o) => o === void 0))\n if (r === \"skewX\" || r === \"skewY\")\n e = e[r](m);\n else {\n const o = r.replace(/[XYZ]/, \"\"), d = r.replace(o, \"\"), A = [\"X\", \"Y\", \"Z\"].indexOf(d), M = o === \"scale\" ? 1 : 0, b = [\n A === 0 ? m : M,\n A === 1 ? m : M,\n A === 2 ? m : M\n ];\n e = e[o](...b);\n }\n else\n throw TypeError(n);\n }), e;\n}, x = (s, t) => t ? [s.a, s.b, s.c, s.d, s.e, s.f] : [\n s.m11,\n s.m12,\n s.m13,\n s.m14,\n s.m21,\n s.m22,\n s.m23,\n s.m24,\n s.m31,\n s.m32,\n s.m33,\n s.m34,\n s.m41,\n s.m42,\n s.m43,\n s.m44\n], Y = (s, t, e) => {\n const n = new y();\n return n.m41 = s, n.e = s, n.m42 = t, n.f = t, n.m43 = e, n;\n}, F = (s, t, e) => {\n const n = new y(), i = Math.PI / 180, r = s * i, a = t * i, l = e * i, m = Math.cos(r), h = -Math.sin(r), c = Math.cos(a), u = -Math.sin(a), f = Math.cos(l), w = -Math.sin(l), o = c * f, d = -c * w;\n n.m11 = o, n.a = o, n.m12 = d, n.b = d, n.m13 = u;\n const A = h * u * f + m * w;\n n.m21 = A, n.c = A;\n const M = m * f - h * u * w;\n return n.m22 = M, n.d = M, n.m23 = -h * c, n.m31 = h * w - m * u * f, n.m32 = h * f + m * u * w, n.m33 = m * c, n;\n}, T = (s, t, e, n) => {\n const i = new y(), r = Math.sqrt(s * s + t * t + e * e);\n if (r === 0)\n return i;\n const a = s / r, l = t / r, m = e / r, h = n * (Math.PI / 360), c = Math.sin(h), u = Math.cos(h), f = c * c, w = a * a, o = l * l, d = m * m, A = 1 - 2 * (o + d) * f;\n i.m11 = A, i.a = A;\n const M = 2 * (a * l * f + m * c * u);\n i.m12 = M, i.b = M, i.m13 = 2 * (a * m * f - l * c * u);\n const b = 2 * (l * a * f - m * c * u);\n i.m21 = b, i.c = b;\n const k = 1 - 2 * (d + w) * f;\n return i.m22 = k, i.d = k, i.m23 = 2 * (l * m * f + a * c * u), i.m31 = 2 * (m * a * f + l * c * u), i.m32 = 2 * (m * l * f - a * c * u), i.m33 = 1 - 2 * (w + o) * f, i;\n}, I = (s, t, e) => {\n const n = new y();\n return n.m11 = s, n.a = s, n.m22 = t, n.d = t, n.m33 = e, n;\n}, v = (s, t) => {\n const e = new y();\n if (s) {\n const n = s * Math.PI / 180, i = Math.tan(n);\n e.m21 = i, e.c = i;\n }\n if (t) {\n const n = t * Math.PI / 180, i = Math.tan(n);\n e.m12 = i, e.b = i;\n }\n return e;\n}, R = (s) => v(s, 0), D = (s) => v(0, s), N = (s, t) => {\n const e = t.m11 * s.m11 + t.m12 * s.m21 + t.m13 * s.m31 + t.m14 * s.m41, n = t.m11 * s.m12 + t.m12 * s.m22 + t.m13 * s.m32 + t.m14 * s.m42, i = t.m11 * s.m13 + t.m12 * s.m23 + t.m13 * s.m33 + t.m14 * s.m43, r = t.m11 * s.m14 + t.m12 * s.m24 + t.m13 * s.m34 + t.m14 * s.m44, a = t.m21 * s.m11 + t.m22 * s.m21 + t.m23 * s.m31 + t.m24 * s.m41, l = t.m21 * s.m12 + t.m22 * s.m22 + t.m23 * s.m32 + t.m24 * s.m42, m = t.m21 * s.m13 + t.m22 * s.m23 + t.m23 * s.m33 + t.m24 * s.m43, h = t.m21 * s.m14 + t.m22 * s.m24 + t.m23 * s.m34 + t.m24 * s.m44, c = t.m31 * s.m11 + t.m32 * s.m21 + t.m33 * s.m31 + t.m34 * s.m41, u = t.m31 * s.m12 + t.m32 * s.m22 + t.m33 * s.m32 + t.m34 * s.m42, f = t.m31 * s.m13 + t.m32 * s.m23 + t.m33 * s.m33 + t.m34 * s.m43, w = t.m31 * s.m14 + t.m32 * s.m24 + t.m33 * s.m34 + t.m34 * s.m44, o = t.m41 * s.m11 + t.m42 * s.m21 + t.m43 * s.m31 + t.m44 * s.m41, d = t.m41 * s.m12 + t.m42 * s.m22 + t.m43 * s.m32 + t.m44 * s.m42, A = t.m41 * s.m13 + t.m42 * s.m23 + t.m43 * s.m33 + t.m44 * s.m43, M = t.m41 * s.m14 + t.m42 * s.m24 + t.m43 * s.m34 + t.m44 * s.m44;\n return g([\n e,\n n,\n i,\n r,\n a,\n l,\n m,\n h,\n c,\n u,\n f,\n w,\n o,\n d,\n A,\n M\n ]);\n};\nclass y {\n /**\n * @constructor\n * @param init accepts all parameter configurations:\n * * valid CSS transform string,\n * * CSSMatrix/DOMMatrix instance,\n * * a 6/16 elements *Array*.\n */\n constructor(t) {\n return this.a = 1, this.b = 0, this.c = 0, this.d = 1, this.e = 0, this.f = 0, this.m11 = 1, this.m12 = 0, this.m13 = 0, this.m14 = 0, this.m21 = 0, this.m22 = 1, this.m23 = 0, this.m24 = 0, this.m31 = 0, this.m32 = 0, this.m33 = 1, this.m34 = 0, this.m41 = 0, this.m42 = 0, this.m43 = 0, this.m44 = 1, t ? this.setMatrixValue(t) : this;\n }\n /**\n * A `Boolean` whose value is `true` if the matrix is the identity matrix. The identity\n * matrix is one in which every value is 0 except those on the main diagonal from top-left\n * to bottom-right corner (in other words, where the offsets in each direction are equal).\n *\n * @return the current property value\n */\n get isIdentity() {\n return this.m11 === 1 && this.m12 === 0 && this.m13 === 0 && this.m14 === 0 && this.m21 === 0 && this.m22 === 1 && this.m23 === 0 && this.m24 === 0 && this.m31 === 0 && this.m32 === 0 && this.m33 === 1 && this.m34 === 0 && this.m41 === 0 && this.m42 === 0 && this.m43 === 0 && this.m44 === 1;\n }\n /**\n * A `Boolean` flag whose value is `true` if the matrix was initialized as a 2D matrix\n * and `false` if the matrix is 3D.\n *\n * @return the current property value\n */\n get is2D() {\n return this.m31 === 0 && this.m32 === 0 && this.m33 === 1 && this.m34 === 0 && this.m43 === 0 && this.m44 === 1;\n }\n /**\n * The `setMatrixValue` method replaces the existing matrix with one computed\n * in the browser. EG: `matrix(1,0.25,-0.25,1,0,0)`\n *\n * The method accepts any *Array* values, the result of\n * `DOMMatrix` instance method `toFloat64Array()` / `toFloat32Array()` calls\n * or `CSSMatrix` instance method `toArray()`.\n *\n * This method expects valid *matrix()* / *matrix3d()* string values, as well\n * as other transform functions like *translateX(10px)*.\n *\n * @param source\n * @return the matrix instance\n */\n setMatrixValue(t) {\n return typeof t == \"string\" && t.length && t !== \"none\" ? O(t) : Array.isArray(t) || t instanceof Float64Array || t instanceof Float32Array ? g(t) : typeof t == \"object\" ? X(t) : this;\n }\n /**\n * Returns a *Float32Array* containing elements which comprise the matrix.\n * The method can return either the 16 elements or the 6 elements\n * depending on the value of the `is2D` parameter.\n *\n * @param is2D *Array* representation of the matrix\n * @return an *Array* representation of the matrix\n */\n toFloat32Array(t) {\n return Float32Array.from(x(this, t));\n }\n /**\n * Returns a *Float64Array* containing elements which comprise the matrix.\n * The method can return either the 16 elements or the 6 elements\n * depending on the value of the `is2D` parameter.\n *\n * @param is2D *Array* representation of the matrix\n * @return an *Array* representation of the matrix\n */\n toFloat64Array(t) {\n return Float64Array.from(x(this, t));\n }\n /**\n * Creates and returns a string representation of the matrix in `CSS` matrix syntax,\n * using the appropriate `CSS` matrix notation.\n *\n * matrix3d *matrix3d(m11, m12, m13, m14, m21, ...)*\n * matrix *matrix(a, b, c, d, e, f)*\n *\n * @return a string representation of the matrix\n */\n toString() {\n const { is2D: t } = this, e = this.toFloat64Array(t).join(\", \");\n return `${t ? \"matrix\" : \"matrix3d\"}(${e})`;\n }\n /**\n * Returns a JSON representation of the `CSSMatrix` instance, a standard *Object*\n * that includes `{a,b,c,d,e,f}` and `{m11,m12,m13,..m44}` properties as well\n * as the `is2D` & `isIdentity` properties.\n *\n * The result can also be used as a second parameter for the `fromMatrix` static method\n * to load values into another matrix instance.\n *\n * @return an *Object* with all matrix values.\n */\n toJSON() {\n const { is2D: t, isIdentity: e } = this;\n return { ...this, is2D: t, isIdentity: e };\n }\n /**\n * The Multiply method returns a new CSSMatrix which is the result of this\n * matrix multiplied by the passed matrix, with the passed matrix to the right.\n * This matrix is not modified.\n *\n * @param m2 CSSMatrix\n * @return The resulted matrix.\n */\n multiply(t) {\n return N(this, t);\n }\n /**\n * The translate method returns a new matrix which is this matrix post\n * multiplied by a translation matrix containing the passed values. If the z\n * component is undefined, a 0 value is used in its place. This matrix is not\n * modified.\n *\n * @param x X component of the translation value.\n * @param y Y component of the translation value.\n * @param z Z component of the translation value.\n * @return The resulted matrix\n */\n translate(t, e, n) {\n const i = t;\n let r = e, a = n;\n return typeof r > \"u\" && (r = 0), typeof a > \"u\" && (a = 0), N(this, Y(i, r, a));\n }\n /**\n * The scale method returns a new matrix which is this matrix post multiplied by\n * a scale matrix containing the passed values. If the z component is undefined,\n * a 1 value is used in its place. If the y component is undefined, the x\n * component value is used in its place. This matrix is not modified.\n *\n * @param x The X component of the scale value.\n * @param y The Y component of the scale value.\n * @param z The Z component of the scale value.\n * @return The resulted matrix\n */\n scale(t, e, n) {\n const i = t;\n let r = e, a = n;\n return typeof r > \"u\" && (r = t), typeof a > \"u\" && (a = 1), N(this, I(i, r, a));\n }\n /**\n * The rotate method returns a new matrix which is this matrix post multiplied\n * by each of 3 rotation matrices about the major axes, first X, then Y, then Z.\n * If the y and z components are undefined, the x value is used to rotate the\n * object about the z axis, as though the vector (0,0,x) were passed. All\n * rotation values are in degrees. This matrix is not modified.\n *\n * @param rx The X component of the rotation, or Z if Y and Z are null.\n * @param ry The (optional) Y component of the rotation value.\n * @param rz The (optional) Z component of the rotation value.\n * @return The resulted matrix\n */\n rotate(t, e, n) {\n let i = t, r = e || 0, a = n || 0;\n return typeof t == \"number\" && typeof e > \"u\" && typeof n > \"u\" && (a = i, i = 0, r = 0), N(this, F(i, r, a));\n }\n /**\n * The rotateAxisAngle method returns a new matrix which is this matrix post\n * multiplied by a rotation matrix with the given axis and `angle`. The right-hand\n * rule is used to determine the direction of rotation. All rotation values are\n * in degrees. This matrix is not modified.\n *\n * @param x The X component of the axis vector.\n * @param y The Y component of the axis vector.\n * @param z The Z component of the axis vector.\n * @param angle The angle of rotation about the axis vector, in degrees.\n * @return The resulted matrix\n */\n rotateAxisAngle(t, e, n, i) {\n if ([t, e, n, i].some((r) => Number.isNaN(+r)))\n throw new TypeError(\"CSSMatrix: expecting 4 values\");\n return N(this, T(t, e, n, i));\n }\n /**\n * Specifies a skew transformation along the `x-axis` by the given angle.\n * This matrix is not modified.\n *\n * @param angle The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skewX(t) {\n return N(this, R(t));\n }\n /**\n * Specifies a skew transformation along the `y-axis` by the given angle.\n * This matrix is not modified.\n *\n * @param angle The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skewY(t) {\n return N(this, D(t));\n }\n /**\n * Specifies a skew transformation along both the `x-axis` and `y-axis`.\n * This matrix is not modified.\n *\n * @param angleX The X-angle amount in degrees to skew.\n * @param angleY The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skew(t, e) {\n return N(this, v(t, e));\n }\n /**\n * Transforms a specified vector using the matrix, returning a new\n * {x,y,z,w} Tuple *Object* comprising the transformed vector.\n * Neither the matrix nor the original vector are altered.\n *\n * The method is equivalent with `transformPoint()` method\n * of the `DOMMatrix` constructor.\n *\n * @param t Tuple with `{x,y,z,w}` components\n * @return the resulting Tuple\n */\n transformPoint(t) {\n const e = this.m11 * t.x + this.m21 * t.y + this.m31 * t.z + this.m41 * t.w, n = this.m12 * t.x + this.m22 * t.y + this.m32 * t.z + this.m42 * t.w, i = this.m13 * t.x + this.m23 * t.y + this.m33 * t.z + this.m43 * t.w, r = this.m14 * t.x + this.m24 * t.y + this.m34 * t.z + this.m44 * t.w;\n return t instanceof DOMPoint ? new DOMPoint(e, n, i, r) : {\n x: e,\n y: n,\n z: i,\n w: r\n };\n }\n}\np(y, \"Translate\", Y), p(y, \"Rotate\", F), p(y, \"RotateAxisAngle\", T), p(y, \"Scale\", I), p(y, \"SkewX\", R), p(y, \"SkewY\", D), p(y, \"Skew\", v), p(y, \"Multiply\", N), p(y, \"fromArray\", g), p(y, \"fromMatrix\", X), p(y, \"fromString\", O), p(y, \"toArray\", x), p(y, \"isCompatibleArray\", E), p(y, \"isCompatibleObject\", P);\nexport {\n y as default\n};\n//# sourceMappingURL=dommatrix.mjs.map\n","import { Options } from \"../interface\";\n\n/** SVGPathCommander default options */\nconst defaultOptions: Options = {\n origin: [0, 0, 0],\n round: 4,\n};\n\nexport default defaultOptions;\n","/** Segment params length */\nconst paramsCount = {\n a: 7,\n c: 6,\n h: 1,\n l: 2,\n m: 2,\n r: 4,\n q: 4,\n s: 4,\n t: 2,\n v: 1,\n z: 0,\n};\n\nexport default paramsCount;\n","import paramsCount from \"./paramsCount\";\nimport PathParser from \"./pathParser\";\nimport type { PathCommand, PathSegment, RelativeCommand } from \"../types\";\n\n/**\n * Breaks the parsing of a pathString once a segment is finalized.\n *\n * @param path the `PathParser` instance\n */\nconst finalizeSegment = (path: PathParser) => {\n let pathCommand = path.pathValue[path.segmentStart] as PathCommand;\n let relativeCommand = pathCommand.toLowerCase() as RelativeCommand;\n const { data } = path;\n\n while (data.length >= paramsCount[relativeCommand]) {\n // overloaded `moveTo`\n // https://github.com/rveciana/svg-path-properties/blob/master/src/parse.ts\n if (relativeCommand === \"m\" && data.length > 2) {\n path.segments.push(\n [pathCommand as PathCommand | number].concat(\n data.splice(0, 2) as number[],\n ) as PathSegment,\n );\n relativeCommand = \"l\";\n pathCommand = pathCommand === \"m\" ? \"l\" : \"L\";\n } else {\n path.segments.push(\n [pathCommand as PathCommand | number].concat(\n data.splice(0, paramsCount[relativeCommand]) as number[],\n ) as PathSegment,\n );\n }\n\n if (!paramsCount[relativeCommand]) {\n break;\n }\n }\n};\nexport default finalizeSegment;\n","const error = \"SVGPathCommander Error\";\nexport default error;\n","import error from \"./error\";\nimport type PathParser from \"./pathParser\";\n\n/**\n * Validates an A (arc-to) specific path command value.\n * Usually a `large-arc-flag` or `sweep-flag`.\n *\n * @param path the `PathParser` instance\n */\nconst scanFlag = (path: PathParser) => {\n const { index, pathValue } = path;\n const code = pathValue.charCodeAt(index);\n\n if (code === 0x30 /* 0 */) {\n path.param = 0;\n path.index += 1;\n return;\n }\n\n if (code === 0x31 /* 1 */) {\n path.param = 1;\n path.index += 1;\n return;\n }\n\n path.err = `${error}: invalid Arc flag \"${\n pathValue[index]\n }\", expecting 0 or 1 at index ${index}`;\n};\n\nexport default scanFlag;\n","import { DigitNumber } from \"../types\";\n\n/**\n * Checks if a character is a digit.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isDigit = (code: number): code is DigitNumber => {\n return code >= 48 && code <= 57; // 0..9\n};\nexport default isDigit;\n","const invalidPathValue = \"Invalid path value\";\nexport default invalidPathValue;\n","import isDigit from \"./isDigit\";\nimport invalidPathValue from \"./invalidPathValue\";\nimport error from \"./error\";\nimport type PathParser from \"./pathParser\";\n\n/**\n * Validates every character of the path string,\n * every path command, negative numbers or floating point numbers.\n *\n * @param path the `PathParser` instance\n */\nconst scanParam = (path: PathParser) => {\n const { max, pathValue, index: start } = path;\n let index = start;\n let zeroFirst = false;\n let hasCeiling = false;\n let hasDecimal = false;\n let hasDot = false;\n let ch;\n\n if (index >= max) {\n path.err =\n `${error}: ${invalidPathValue} at index ${index}, \"pathValue\" is missing param`;\n return;\n }\n ch = pathValue.charCodeAt(index);\n\n if (ch === 0x2b /* + */ || ch === 0x2d /* - */) {\n index += 1;\n // ch = (index < max) ? pathValue.charCodeAt(index) : 0;\n ch = pathValue.charCodeAt(index);\n }\n\n // This logic is shamelessly borrowed from Esprima\n // https://github.com/ariya/esprimas\n if (!isDigit(ch) && ch !== 0x2e /* . */) {\n // path.err = 'SvgPath: param should start with 0..9 or `.` (at pos ' + index + ')';\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\n pathValue[index]\n }\" is not a number`;\n return;\n }\n\n if (ch !== 0x2e /* . */) {\n zeroFirst = ch === 0x30 /* 0 */;\n index += 1;\n\n ch = pathValue.charCodeAt(index);\n\n if (zeroFirst && index < max) {\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDigit(ch)) {\n // path.err = 'SvgPath: numbers started with `0` such as `09`\n // are illegal (at pos ' + start + ')';\n path.err = `${error}: ${invalidPathValue} at index ${start}, \"${\n pathValue[start]\n }\" illegal number`;\n return;\n }\n }\n\n while (index < max && isDigit(pathValue.charCodeAt(index))) {\n index += 1;\n hasCeiling = true;\n }\n\n ch = pathValue.charCodeAt(index);\n }\n\n if (ch === 0x2e /* . */) {\n hasDot = true;\n index += 1;\n while (isDigit(pathValue.charCodeAt(index))) {\n index += 1;\n hasDecimal = true;\n }\n\n ch = pathValue.charCodeAt(index);\n }\n\n if (ch === 0x65 /* e */ || ch === 0x45 /* E */) {\n if (hasDot && !hasCeiling && !hasDecimal) {\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\n pathValue[index]\n }\" invalid float exponent`;\n return;\n }\n\n index += 1;\n\n ch = pathValue.charCodeAt(index);\n\n if (ch === 0x2b /* + */ || ch === 0x2d /* - */) {\n index += 1;\n }\n if (index < max && isDigit(pathValue.charCodeAt(index))) {\n while (index < max && isDigit(pathValue.charCodeAt(index))) {\n index += 1;\n }\n } else {\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\n pathValue[index]\n }\" invalid integer exponent`;\n return;\n }\n }\n\n path.index = index;\n path.param = +path.pathValue.slice(start, index);\n};\nexport default scanParam;\n","import type { SpaceNumber } from \"../types\";\n\n/**\n * Checks if the character is a space.\n *\n * @param ch the character to check\n * @returns check result\n */\n\nconst isSpace = (ch: number): ch is SpaceNumber => {\n const allSpaces = [\n // Special spaces\n 0x1680,\n 0x180e,\n 0x2000,\n 0x2001,\n 0x2002,\n 0x2003,\n 0x2004,\n 0x2005,\n 0x2006,\n 0x2007,\n 0x2008,\n 0x2009,\n 0x200a,\n 0x202f,\n 0x205f,\n 0x3000,\n 0xfeff,\n // Line terminators\n 0x0a,\n 0x0d,\n 0x2028,\n 0x2029,\n // White spaces\n 0x20,\n 0x09,\n 0x0b,\n 0x0c,\n 0xa0,\n ];\n\n return allSpaces.includes(ch);\n};\nexport default isSpace;\n","import isSpace from \"./isSpace\";\nimport type PathParser from \"./pathParser\";\n\n/**\n * Points the parser to the next character in the\n * path string every time it encounters any kind of\n * space character.\n *\n * @param path the `PathParser` instance\n */\nconst skipSpaces = (path: PathParser) => {\n const { pathValue, max } = path;\n while (path.index < max && isSpace(pathValue.charCodeAt(path.index))) {\n path.index += 1;\n }\n};\nexport default skipSpaces;\n","import type { PathCommandNumber } from \"../types\";\n\n/**\n * Checks if the character is a path command.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isPathCommand = (code: number): code is PathCommandNumber => {\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\n switch (code | 0x20) {\n case 0x6d /* m */:\n case 0x7a /* z */:\n case 0x6c /* l */:\n case 0x68 /* h */:\n case 0x76 /* v */:\n case 0x63 /* c */:\n case 0x73 /* s */:\n case 0x71 /* q */:\n case 0x74 /* t */:\n case 0x61 /* a */:\n // case 0x72/* r */:\n return true;\n default:\n return false;\n }\n};\nexport default isPathCommand;\n","import isDigit from \"./isDigit\";\nimport type { DigitNumber } from \"../types\";\n\n/**\n * Checks if the character is or belongs to a number.\n * [0-9]|+|-|.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isDigitStart = (\n code: number,\n): code is DigitNumber | 0x2b | 0x2d | 0x2e => {\n return isDigit(code) /* 0..9 */ || code === 0x2b /* + */ ||\n code === 0x2d /* - */ || code === 0x2e; /* . */\n};\nexport default isDigitStart;\n","/**\n * Checks if the character is an A (arc-to) path command.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isArcCommand = (code: number): code is 0x61 => {\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\n return (code | 0x20) === 0x61;\n};\nexport default isArcCommand;\n","/**\n * Checks if the character is a MoveTo command.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isMoveCommand = (code: number): code is 0x6d | 0x4d => {\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\n switch (code | 0x20) {\n case 0x6d /* m */:\n case 0x4d /* M */:\n return true;\n default:\n return false;\n }\n};\nexport default isMoveCommand;\n","import finalizeSegment from \"./finalizeSegment\";\nimport paramCounts from \"./paramsCount\";\nimport scanFlag from \"./scanFlag\";\nimport scanParam from \"./scanParam\";\nimport skipSpaces from \"./skipSpaces\";\nimport isPathCommand from \"./isPathCommand\";\nimport isDigitStart from \"./isDigitStart\";\nimport isArcCommand from \"./isArcCommand\";\nimport isMoveCommand from \"./isMoveCommand\";\nimport invalidPathValue from \"./invalidPathValue\";\nimport error from \"./error\";\n\nimport type PathParser from \"./pathParser\";\nimport type { PathSegment, RelativeCommand } from \"../types\";\n\n/**\n * Scans every character in the path string to determine\n * where a segment starts and where it ends.\n *\n * @param path the `PathParser` instance\n */\nconst scanSegment = (path: PathParser) => {\n const { max, pathValue, index, segments } = path;\n const cmdCode = pathValue.charCodeAt(index);\n const reqParams =\n paramCounts[pathValue[index].toLowerCase() as RelativeCommand];\n\n path.segmentStart = index;\n\n // segments always start with a path command\n if (!isPathCommand(cmdCode)) {\n path.err = `${error}: ${invalidPathValue} \"${\n pathValue[index]\n }\" is not a path command at index ${index}`;\n return;\n }\n\n // after a Z segment, we only expect a MoveTo path command\n const lastSegment = segments[segments.length - 1] as PathSegment | undefined;\n if (\n !isMoveCommand(cmdCode) && lastSegment?.[0]?.toLocaleLowerCase() === \"z\"\n ) {\n path.err = `${error}: ${invalidPathValue} \"${\n pathValue[index]\n }\" is not a MoveTo path command at index ${index}`;\n return;\n }\n\n path.index += 1;\n skipSpaces(path);\n\n path.data = [];\n\n if (!reqParams) {\n // Z\n finalizeSegment(path);\n return;\n }\n\n for (;;) {\n for (let i = reqParams; i > 0; i -= 1) {\n if (isArcCommand(cmdCode) && (i === 3 || i === 4)) scanFlag(path);\n else scanParam(path);\n\n if (path.err.length) {\n return;\n }\n path.data.push(path.param);\n\n skipSpaces(path);\n\n // after ',' param is mandatory\n if (\n path.index < max && pathValue.charCodeAt(path.index) === 0x2c /* , */\n ) {\n path.index += 1;\n skipSpaces(path);\n }\n }\n\n if (path.index >= path.max) {\n break;\n }\n\n // Stop on next segment\n if (!isDigitStart(pathValue.charCodeAt(path.index))) {\n break;\n }\n }\n\n finalizeSegment(path);\n};\nexport default scanSegment;\n","import type { PathArray, PathSegment } from \"../types\";\n\n/**\n * The `PathParser` is used by the `parsePathString` static method\n * to generate a `pathArray`.\n *\n * @param pathString\n */\nexport default class PathParser {\n declare segments: PathArray | PathSegment[];\n declare pathValue: string;\n declare max: number;\n declare index: number;\n declare param: number;\n declare segmentStart: number;\n declare data: (string | number)[];\n declare err: string;\n\n constructor(pathString: string) {\n this.segments = [];\n this.pathValue = pathString;\n this.max = pathString.length;\n this.index = 0;\n this.param = 0.0;\n this.segmentStart = 0;\n this.data = [];\n this.err = \"\";\n }\n}\n","import scanSegment from \"./scanSegment\";\nimport skipSpaces from \"./skipSpaces\";\nimport PathParser from \"./pathParser\";\nimport type { PathArray } from \"../types\";\n\n/**\n * Parses a path string value and returns an array\n * of segments we like to call `pathArray`.\n *\n * @param pathInput the string to be parsed\n * @returns the resulted `pathArray` or error string\n */\nconst parsePathString = (pathInput: string | T) => {\n if (typeof pathInput !== \"string\") {\n return pathInput.slice(0) as typeof pathInput;\n }\n\n const path = new PathParser(pathInput);\n\n skipSpaces(path);\n\n while (path.index < path.max && !path.err.length) {\n scanSegment(path);\n }\n\n if (path?.err.length) {\n throw TypeError(path.err);\n }\n\n return path.segments as PathArray;\n};\n\nexport default parsePathString;\n","import type {\n AbsoluteCommand,\n AbsoluteSegment,\n ASegment,\n CSegment,\n HSegment,\n LSegment,\n MSegment,\n PathSegment,\n QSegment,\n SSegment,\n TSegment,\n VSegment,\n} from \"../types\";\n\n/**\n * Returns an absolute segment of a `PathArray` object.\n *\n * @param segment the segment object\n * @param index the segment index\n * @param lastX the last known X value\n * @param lastY the last known Y value\n * @returns the absolute segment\n */\nconst absolutizeSegment = (\n segment: PathSegment,\n index: number,\n lastX: number,\n lastY: number,\n) => {\n const [pathCommand] = segment;\n const absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\n const isAbsolute = absCommand === pathCommand;\n\n /* istanbul ignore else @preserve */\n if (index === 0 || isAbsolute) return segment as MSegment | AbsoluteSegment;\n // const values = segment.slice(1) as number[];\n if (absCommand === \"A\") {\n return [\n absCommand,\n segment[1],\n segment[2],\n segment[3],\n segment[4],\n segment[5],\n (segment as ASegment)[6] + lastX,\n (segment as ASegment)[7] + lastY,\n ] as ASegment;\n } else if (absCommand === \"V\") {\n return [absCommand, (segment as VSegment)[1] + lastY] as VSegment;\n } else if (absCommand === \"H\") {\n return [absCommand, (segment as HSegment)[1] + lastX] as HSegment;\n } else if (absCommand === \"L\") {\n return [\n absCommand,\n (segment as LSegment)[1] + lastX,\n (segment as LSegment)[2] + lastY,\n ] as LSegment;\n } else {\n // use brakets for `eslint: no-case-declaration`\n // https://stackoverflow.com/a/50753272/803358\n const absValues = [] as number[];\n const seglen = segment.length;\n for (let j = 1; j < seglen; j += 1) {\n absValues.push((segment[j] as number) + (j % 2 ? lastX : lastY));\n }\n // for c, s, q, t\n return [absCommand as typeof absCommand | number].concat(absValues) as\n | MSegment\n | QSegment\n | TSegment\n | SSegment\n | CSegment;\n }\n};\nexport default absolutizeSegment;\n","// import paramsParser from '../parser/paramsParser';\nimport type {\n AbsoluteCommand,\n IteratorCallback,\n PathArray,\n PathCommand,\n PathSegment,\n} from \"../types\";\n\nconst iterate = (\n path: PathArray,\n iterator: IteratorCallback,\n) => {\n let pathLen = path.length;\n let segment: PathSegment;\n let pathCommand = \"M\" as PathCommand;\n let absCommand = \"M\" as AbsoluteCommand;\n let isRelative = false;\n let x = 0;\n let y = 0;\n let mx = 0;\n let my = 0;\n let segLen = 0;\n\n for (let i = 0; i < pathLen; i += 1) {\n segment = path[i];\n [pathCommand] = segment;\n segLen = segment.length;\n absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\n isRelative = absCommand !== pathCommand;\n\n const iteratorResult = iterator(segment, i, x, y);\n // some methods like getPointAtLength would like to break\n // when task is complete\n if (iteratorResult === false) {\n break;\n }\n\n // segment = path[i];\n if (absCommand === \"Z\") {\n x = mx;\n y = my;\n } else if (absCommand === \"H\") {\n x = (segment[1] as number) + (isRelative ? x : 0);\n } else if (absCommand === \"V\") {\n y = (segment[1] as number) + (isRelative ? y : 0);\n } else {\n x = (segment[segLen - 2] as number) + (isRelative ? x : 0);\n y = (segment[segLen - 1] as number) + (isRelative ? y : 0);\n\n if (absCommand === \"M\") {\n mx = x;\n my = y;\n }\n }\n\n if (iteratorResult) {\n path[i] = iteratorResult;\n if (iteratorResult[0] === \"C\") {\n pathLen = path.length;\n }\n }\n }\n return path as T;\n};\n\nexport default iterate;\n","import parsePathString from \"../parser/parsePathString\";\nimport absolutizeSegment from \"../process/absolutizeSegment\";\nimport type { AbsoluteArray, PathArray } from \"../types\";\nimport iterate from \"../process/iterate\";\n\n/**\n * Parses a path string value or object and returns an array\n * of segments, all converted to absolute values.\n *\n * @param pathInput the path string | object\n * @returns the resulted `pathArray` with absolute values\n */\nconst pathToAbsolute = (pathInput: string | PathArray) => {\n const path = parsePathString(pathInput);\n\n return iterate(path, absolutizeSegment);\n};\nexport default pathToAbsolute;\n","import type {\n aSegment,\n cSegment,\n hSegment,\n lSegment,\n MSegment,\n PathSegment,\n qSegment,\n RelativeCommand,\n RelativeSegment,\n sSegment,\n tSegment,\n vSegment,\n} from \"../types\";\n\n/**\n * Returns a relative segment of a `PathArray` object.\n *\n * @param segment the segment object\n * @param index the segment index\n * @param lastX the last known X value\n * @param lastY the last known Y value\n * @returns the relative segment\n */\nconst relativizeSegment = (\n segment: PathSegment,\n index: number,\n lastX: number,\n lastY: number,\n) => {\n const [pathCommand] = segment;\n const relCommand = pathCommand.toLowerCase() as RelativeCommand;\n const isRelative = pathCommand === relCommand;\n\n /* istanbul ignore else @preserve */\n if (index === 0 || isRelative) return segment as MSegment | RelativeSegment;\n\n if (relCommand === \"a\") {\n return [\n relCommand,\n segment[1],\n segment[2],\n segment[3],\n segment[4],\n segment[5],\n (segment as aSegment)[6] - lastX,\n (segment as aSegment)[7] - lastY,\n ] as aSegment;\n } else if (relCommand === \"v\") {\n return [relCommand, (segment as vSegment)[1] - lastY] as vSegment;\n } else if (relCommand === \"h\") {\n return [relCommand, (segment as hSegment)[1] - lastX] as hSegment;\n } else if (relCommand === \"l\") {\n return [\n relCommand,\n (segment as lSegment)[1] - lastX,\n (segment as lSegment)[2] - lastY,\n ] as lSegment;\n } else {\n // use brakets for `eslint: no-case-declaration`\n // https://stackoverflow.com/a/50753272/803358\n const relValues = [] as number[];\n const seglen = segment.length;\n for (let j = 1; j < seglen; j += 1) {\n relValues.push((segment[j] as number) - (j % 2 ? lastX : lastY));\n }\n // for c, s, q, t\n return [relCommand as RelativeCommand | number].concat(relValues) as\n | qSegment\n | tSegment\n | sSegment\n | cSegment;\n }\n};\n\nexport default relativizeSegment;\n","import type { PathArray, RelativeArray } from \"../types\";\nimport parsePathString from \"../parser/parsePathString\";\nimport iterate from \"../process/iterate\";\nimport relativizeSegment from \"../process/relativizeSegment\";\n\n/**\n * Parses a path string value or object and returns an array\n * of segments, all converted to relative values.\n *\n * @param pathInput the path string | object\n * @returns the resulted `pathArray` with relative values\n */\nconst pathToRelative = (pathInput: string | PathArray): RelativeArray => {\n const path = parsePathString(pathInput);\n\n return iterate(path, relativizeSegment);\n};\nexport default pathToRelative;\n","/**\n * Returns an {x,y} vector rotated by a given\n * angle in radian.\n *\n * @param x the initial vector x\n * @param y the initial vector y\n * @param rad the radian vector angle\n * @returns the rotated vector\n */\nconst rotateVector = (\n x: number,\n y: number,\n rad: number,\n): { x: number; y: number } => {\n const { sin, cos } = Math;\n const X = x * cos(rad) - y * sin(rad);\n const Y = x * sin(rad) + y * cos(rad);\n return { x: X, y: Y };\n};\n\nexport default rotateVector;\n","import rotateVector from \"../math/rotateVector\";\n\n/**\n * Converts A (arc-to) segments to C (cubic-bezier-to).\n *\n * For more information of where this math came from visit:\n * http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n *\n * @param X1 the starting x position\n * @param Y1 the starting y position\n * @param RX x-radius of the arc\n * @param RY y-radius of the arc\n * @param angle x-axis-rotation of the arc\n * @param LAF large-arc-flag of the arc\n * @param SF sweep-flag of the arc\n * @param X2 the ending x position\n * @param Y2 the ending y position\n * @param recursive the parameters needed to split arc into 2 segments\n * @return the resulting cubic-bezier segment(s)\n */\nconst arcToCubic = (\n X1: number,\n Y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n X2: number,\n Y2: number,\n recursive?: [number, number, number, number],\n): number[] => {\n let x1 = X1;\n let y1 = Y1;\n let rx = RX;\n let ry = RY;\n let x2 = X2;\n let y2 = Y2;\n // for more information of where this Math came from visit:\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n const d120 = (Math.PI * 120) / 180;\n\n const rad = (Math.PI / 180) * (+angle || 0);\n let res = [] as number[];\n let xy;\n let f1;\n let f2;\n let cx;\n let cy;\n\n if (!recursive) {\n xy = rotateVector(x1, y1, -rad);\n x1 = xy.x;\n y1 = xy.y;\n xy = rotateVector(x2, y2, -rad);\n x2 = xy.x;\n y2 = xy.y;\n\n const x = (x1 - x2) / 2;\n const y = (y1 - y2) / 2;\n let h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n if (h > 1) {\n h = Math.sqrt(h);\n rx *= h;\n ry *= h;\n }\n const rx2 = rx * rx;\n const ry2 = ry * ry;\n\n const k = (LAF === SF ? -1 : 1) *\n Math.sqrt(\n Math.abs(\n (rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x),\n ),\n );\n\n cx = (k * rx * y) / ry + (x1 + x2) / 2;\n cy = (k * -ry * x) / rx + (y1 + y2) / 2;\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\n f1 = Math.asin(((((y1 - cy) / ry) * 10 ** 9) >> 0) / 10 ** 9);\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\n f2 = Math.asin(((((y2 - cy) / ry) * 10 ** 9) >> 0) / 10 ** 9);\n\n f1 = x1 < cx ? Math.PI - f1 : f1;\n f2 = x2 < cx ? Math.PI - f2 : f2;\n if (f1 < 0) f1 = Math.PI * 2 + f1;\n if (f2 < 0) f2 = Math.PI * 2 + f2;\n if (SF && f1 > f2) {\n f1 -= Math.PI * 2;\n }\n if (!SF && f2 > f1) {\n f2 -= Math.PI * 2;\n }\n } else {\n [f1, f2, cx, cy] = recursive;\n }\n let df = f2 - f1;\n if (Math.abs(df) > d120) {\n const f2old = f2;\n const x2old = x2;\n const y2old = y2;\n f2 = f1 + d120 * (SF && f2 > f1 ? 1 : -1);\n x2 = cx + rx * Math.cos(f2);\n y2 = cy + ry * Math.sin(f2);\n res = arcToCubic(x2, y2, rx, ry, angle, 0, SF, x2old, y2old, [\n f2,\n f2old,\n cx,\n cy,\n ]);\n }\n df = f2 - f1;\n const c1 = Math.cos(f1);\n const s1 = Math.sin(f1);\n const c2 = Math.cos(f2);\n const s2 = Math.sin(f2);\n const t = Math.tan(df / 4);\n const hx = (4 / 3) * rx * t;\n const hy = (4 / 3) * ry * t;\n const m1 = [x1, y1];\n const m2 = [x1 + hx * s1, y1 - hy * c1];\n const m3 = [x2 + hx * s2, y2 - hy * c2];\n const m4 = [x2, y2];\n m2[0] = 2 * m1[0] - m2[0];\n m2[1] = 2 * m1[1] - m2[1];\n if (recursive) {\n return [m2[0], m2[1], m3[0], m3[1], m4[0], m4[1]].concat(res);\n }\n res = [m2[0], m2[1], m3[0], m3[1], m4[0], m4[1]].concat(res);\n const newres = [];\n for (let i = 0, ii = res.length; i < ii; i += 1) {\n newres[i] = i % 2\n ? rotateVector(res[i - 1], res[i], rad).y\n : rotateVector(res[i], res[i + 1], rad).x;\n }\n return newres;\n};\nexport default arcToCubic;\n","/**\n * Converts a Q (quadratic-bezier) segment to C (cubic-bezier).\n *\n * @param x1 curve start x\n * @param y1 curve start y\n * @param qx control point x\n * @param qy control point y\n * @param x2 curve end x\n * @param y2 curve end y\n * @returns the cubic-bezier segment\n */\nconst quadToCubic = (\n x1: number,\n y1: number,\n qx: number,\n qy: number,\n x2: number,\n y2: number,\n): [number, number, number, number, number, number] => {\n const r13 = 1 / 3;\n const r23 = 2 / 3;\n return [\n r13 * x1 + r23 * qx, // cpx1\n r13 * y1 + r23 * qy, // cpy1\n r13 * x2 + r23 * qx, // cpx2\n r13 * y2 + r23 * qy, // cpy2\n x2,\n y2, // x,y\n ];\n};\nexport default quadToCubic;\n","import { PointTuple } from \"../types\";\n\n/**\n * Returns the coordinates of a specified distance\n * ratio between two points.\n *\n * @param a the first point coordinates\n * @param b the second point coordinates\n * @param t the ratio\n * @returns the midpoint coordinates\n */\nconst midPoint = (a: PointTuple, b: PointTuple, t: number): PointTuple => {\n const [ax, ay] = a;\n const [bx, by] = b;\n return [ax + (bx - ax) * t, ay + (by - ay) * t];\n};\n\nexport default midPoint;\n","import midPoint from \"../math/midPoint\";\n\n/**\n * Converts an L (line-to) segment to C (cubic-bezier).\n *\n * @param x1 line start x\n * @param y1 line start y\n * @param x2 line end x\n * @param y2 line end y\n * @returns the cubic-bezier segment\n */\nconst lineToCubic = (x1: number, y1: number, x2: number, y2: number) => {\n const c1 = midPoint([x1, y1], [x2, y2], 1.0 / 3.0);\n const c2 = midPoint([x1, y1], [x2, y2], 2.0 / 3.0);\n return [c1[0], c1[1], c2[0], c2[1], x2, y2];\n};\nexport default lineToCubic;\n","import arcToCubic from \"./arcToCubic\";\nimport quadToCubic from \"./quadToCubic\";\nimport lineToCubic from \"./lineToCubic\";\nimport type { CSegment, MSegment, PathSegment } from \"../types\";\nimport type { ParserParams } from \"../interface\";\n\n/**\n * Converts any segment to C (cubic-bezier).\n *\n * @param segment the source segment\n * @param params the source segment parameters\n * @returns the cubic-bezier segment\n */\nconst segmentToCubic = (segment: PathSegment, params: ParserParams) => {\n const [pathCommand] = segment;\n const values = segment.slice(1).map(Number);\n const [x, y] = values;\n // let args;\n const { x1: px1, y1: py1, x: px, y: py } = params;\n\n if (!\"TQ\".includes(pathCommand)) {\n params.qx = null;\n params.qy = null;\n }\n\n if (pathCommand === \"M\") {\n params.x = x;\n params.y = y;\n return segment;\n } else if (pathCommand === \"A\") {\n return [\"C\" as string | number].concat(\n arcToCubic(\n px1,\n py1,\n values[0],\n values[1],\n values[2],\n values[3],\n values[4],\n values[5],\n values[6],\n ),\n ) as CSegment;\n } else if (pathCommand === \"Q\") {\n params.qx = x;\n params.qy = y;\n return [\"C\" as string | number].concat(\n quadToCubic(px1, py1, values[0], values[1], values[2], values[3]),\n ) as CSegment;\n } else if (pathCommand === \"L\") {\n return [\"C\" as string | number].concat(\n lineToCubic(px1, py1, x, y),\n ) as CSegment;\n } else if (pathCommand === \"Z\") {\n return [\"C\" as string | number].concat(\n lineToCubic(px1, py1, px, py),\n ) as CSegment;\n }\n\n return segment as MSegment | CSegment;\n};\nexport default segmentToCubic;\n","import type { ParserParams } from \"../interface\";\nimport type {\n ASegment,\n CSegment,\n HSegment,\n LSegment,\n MSegment,\n NormalSegment,\n PathCommand,\n PathSegment,\n PointTuple,\n QSegment,\n VSegment,\n} from \"../types\";\n\n/**\n * Normalizes a single segment of a `pathArray` object.\n *\n * @param segment the segment object\n * @param params the normalization parameters\n * @returns the normalized segment\n */\nconst normalizeSegment = (segment: PathSegment, params: ParserParams) => {\n const [pathCommand] = segment;\n const absCommand = pathCommand.toUpperCase();\n const isRelative = pathCommand !== absCommand;\n const { x1: px1, y1: py1, x2: px2, y2: py2, x, y } = params;\n const values = segment.slice(1) as number[];\n let absValues = values.map((n, j) => n + (isRelative ? (j % 2 ? y : x) : 0));\n\n if (!\"TQ\".includes(absCommand)) {\n // optional but good to be cautious\n params.qx = null;\n params.qy = null;\n }\n\n // istanbul ignore else @preserve\n if (absCommand === \"A\") {\n absValues = values.slice(0, -2).concat(\n values[5] + (isRelative ? x : 0),\n values[6] + (isRelative ? y : 0),\n );\n\n return [\"A\" as PathCommand | number].concat(absValues) as ASegment;\n } else if (absCommand === \"H\") {\n return [\n \"L\",\n (segment as HSegment)[1] + (isRelative ? x : 0),\n py1,\n ] as LSegment;\n } else if (absCommand === \"V\") {\n return [\n \"L\",\n px1,\n (segment as VSegment)[1] + (isRelative ? y : 0),\n ] as LSegment;\n } else if (absCommand === \"L\") {\n return [\n \"L\",\n (segment as LSegment)[1] + (isRelative ? x : 0),\n (segment as LSegment)[2] + (isRelative ? y : 0),\n ] as LSegment;\n } else if (absCommand === \"M\") {\n return [\n \"M\",\n (segment as MSegment)[1] + (isRelative ? x : 0),\n (segment as MSegment)[2] + (isRelative ? y : 0),\n ] as MSegment;\n } else if (absCommand === \"C\") {\n return [\"C\" as PathCommand | number].concat(absValues) as CSegment;\n } else if (absCommand === \"S\") {\n const x1 = px1 * 2 - px2;\n const y1 = py1 * 2 - py2;\n params.x1 = x1;\n params.y1 = y1;\n return [\"C\", x1, y1].concat(absValues) as CSegment;\n } else if (absCommand === \"T\") {\n const qx = px1 * 2 - (params.qx ? params.qx : /* istanbul ignore next */ 0);\n const qy = py1 * 2 - (params.qy ? params.qy : /* istanbul ignore next */ 0);\n params.qx = qx;\n params.qy = qy;\n return [\"Q\", qx, qy].concat(absValues) as QSegment;\n } else if (absCommand === \"Q\") {\n const [nqx, nqy] = absValues as PointTuple;\n params.qx = nqx;\n params.qy = nqy;\n return [\"Q\" as PathCommand | number].concat(absValues) as QSegment;\n } else if (absCommand === \"Z\") {\n return [\"Z\"] as NormalSegment;\n }\n\n // istanbul ignore next @preserve\n return segment as NormalSegment;\n};\nexport default normalizeSegment;\n","import type { ParserParams } from \"../interface\";\n\nconst paramsParser: ParserParams = {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n x: 0,\n y: 0,\n qx: null,\n qy: null,\n};\n\nexport default paramsParser;\n","import segmentToCubic from \"../process/segmentToCubic\";\nimport { AbsoluteCommand, CSegment, CurveArray, PathArray } from \"../types\";\nimport iterate from \"../process/iterate\";\nimport parsePathString from \"../parser/parsePathString\";\nimport normalizeSegment from \"../process/normalizeSegment\";\nimport paramsParser from \"../parser/paramsParser\";\n\n/**\n * Parses a path string value or 'pathArray' and returns a new one\n * in which all segments are converted to cubic-bezier.\n *\n * In addition, un-necessary `Z` segment is removed if previous segment\n * extends to the `M` segment.\n *\n * @param pathInput the string to be parsed or 'pathArray'\n * @returns the resulted `pathArray` converted to cubic-bezier\n */\nconst pathToCurve = (pathInput: string | PathArray): CurveArray => {\n const params = { ...paramsParser };\n const path = parsePathString(pathInput);\n\n return iterate(path, (seg, index, lastX, lastY) => {\n params.x = lastX;\n params.y = lastY;\n const normalSegment = normalizeSegment(seg, params);\n let result = segmentToCubic(normalSegment, params);\n const isLongArc = result[0] === \"C\" && result.length > 7;\n\n if (isLongArc) {\n path.splice(\n index + 1,\n 0,\n [\"C\" as AbsoluteCommand | number].concat(result.slice(7)) as CSegment,\n );\n result = result.slice(0, 7) as CSegment;\n }\n\n const seglen = result.length;\n params.x1 = +result[seglen - 2];\n params.y1 = +result[seglen - 1];\n params.x2 = +result[seglen - 4] || params.x1;\n params.y2 = +result[seglen - 3] || params.y1;\n\n return result;\n });\n};\nexport default pathToCurve;\n","const roundTo = (n: number, round: number) => {\n const pow = round >= 1 ? 10 ** round : 1;\n\n return round > 0 ? Math.round(n * pow) / pow : Math.round(n);\n};\n\nexport default roundTo;\n","import type { PathArray, PathSegment } from \"../types\";\nimport defaultOptions from \"../options/options\";\nimport roundTo from \"../math/roundTo\";\n\n/**\n * Returns a valid `d` attribute string value created\n * by rounding values and concatenating the `pathArray` segments.\n *\n * @param path the `pathArray` object\n * @param roundOption amount of decimals to round values to\n * @returns the concatenated path string\n */\nconst pathToString = (\n path: PathArray,\n roundOption?: number | \"off\",\n): string => {\n const pathLen = path.length;\n let { round } = defaultOptions;\n let segment = path[0] as PathSegment;\n let result = \"\";\n\n // allow for ZERO decimals\n round = roundOption === \"off\"\n ? roundOption\n : typeof roundOption === \"number\" && roundOption >= 0\n ? roundOption\n : typeof round === \"number\" && round >= 0\n ? round\n : /* istanbul ignore next @preserve */ \"off\";\n\n for (let i = 0; i < pathLen; i += 1) {\n segment = path[i];\n const [pathCommand] = segment;\n const values = segment.slice(1) as number[];\n result += pathCommand;\n if (round === \"off\") {\n result += values.join(\" \");\n } else {\n let j = 0;\n const valLen = values.length;\n while (j < valLen) {\n result += roundTo(values[j], round);\n if (j !== valLen - 1) result += \" \";\n j += 1;\n }\n }\n }\n\n return result;\n};\n\nexport default pathToString;\n","import { type PointTuple } from \"../types\";\n\n/**\n * Returns the square root of the distance\n * between two given points.\n *\n * @param a the first point coordinates\n * @param b the second point coordinates\n * @returns the distance value\n */\nconst distanceSquareRoot = (a: PointTuple, b: PointTuple) => {\n return Math.sqrt(\n (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]),\n );\n};\n\nexport default distanceSquareRoot;\n","import midPoint from \"./midPoint\";\nimport distanceSquareRoot from \"./distanceSquareRoot\";\n\n/**\n * Returns length for line segments (MoveTo, LineTo).\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the line segment length\n */\nconst getLineLength = (x1: number, y1: number, x2: number, y2: number) => {\n return distanceSquareRoot([x1, y1], [x2, y2]);\n};\n\n/**\n * Returns a point along the line segments (MoveTo, LineTo).\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance the distance to point in [0-1] range\n * @returns the point at length\n */\nconst getPointAtLineLength = (\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n distance?: number,\n) => {\n let point = { x: x1, y: y1 };\n\n /* istanbul ignore else @preserve */\n if (typeof distance === \"number\") {\n const length = distanceSquareRoot([x1, y1], [x2, y2]);\n if (distance <= 0) {\n point = { x: x1, y: y1 };\n } else if (distance >= length) {\n point = { x: x2, y: y2 };\n } else {\n const [x, y] = midPoint([x1, y1], [x2, y2], distance / length);\n point = { x, y };\n }\n }\n return point;\n};\n\n/**\n * Returns bounding box for line segments (MoveTo, LineTo).\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance the distance to point in [0-1] range\n * @returns the extrema for line segments\n */\nconst getLineBBox = (x1: number, y1: number, x2: number, y2: number) => {\n const { min, max } = Math;\n\n return [min(x1, x2), min(y1, y2), max(x1, x2), max(y1, y2)] as [\n number,\n number,\n number,\n number,\n ];\n};\n\nexport { getLineBBox, getLineLength, getPointAtLineLength };\n","import { getPointAtLineLength } from \"./lineTools\";\nimport type { Point, PointTuple } from \"../types\";\n\n/**\n * Returns the Arc segment length.\n * @param rx radius along X axis\n * @param ry radius along Y axis\n * @param theta the angle in radians\n * @returns the arc length\n */\nconst arcLength = (rx: number, ry: number, theta: number) => {\n const halfTheta = theta / 2;\n const sinHalfTheta = Math.sin(halfTheta);\n const cosHalfTheta = Math.cos(halfTheta);\n const term1 = rx ** 2 * sinHalfTheta ** 2;\n const term2 = ry ** 2 * cosHalfTheta ** 2;\n const length = Math.sqrt(term1 + term2) * theta;\n return Math.abs(length);\n};\n\n/**\n * Find point on ellipse at given angle around ellipse (theta);\n * @param cx the center X\n * @param cy the center Y\n * @param rx the radius X\n * @param ry the radius Y\n * @param alpha the arc rotation angle in radians\n * @param theta the arc sweep angle in radians\n * @returns a point around ellipse at given angle\n */\nconst arcPoint = (\n cx: number,\n cy: number,\n rx: number,\n ry: number,\n alpha: number,\n theta: number,\n) => {\n const { sin, cos } = Math;\n // theta is angle in radians around arc\n // alpha is angle of rotation of ellipse in radians\n const cosA = cos(alpha);\n const sinA = sin(alpha);\n const x = rx * cos(theta);\n const y = ry * sin(theta);\n\n return [cx + cosA * x - sinA * y, cy + sinA * x + cosA * y] as PointTuple;\n};\n\n/**\n * Returns the angle between two points.\n * @param v0 starting point\n * @param v1 ending point\n * @returns the angle in radian\n */\nconst angleBetween = (v0: Point, v1: Point) => {\n const { x: v0x, y: v0y } = v0;\n const { x: v1x, y: v1y } = v1;\n const p = v0x * v1x + v0y * v1y;\n const n = Math.sqrt((v0x ** 2 + v0y ** 2) * (v1x ** 2 + v1y ** 2));\n const sign = v0x * v1y - v0y * v1x < 0 ? -1 : 1;\n return sign * Math.acos(p / n);\n};\n\n/**\n * Returns the following properties for an Arc segment: center, start angle,\n * end angle, and radiuses on X and Y axis.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param RX the radius on X axis\n * @param RY the radius on Y axis\n * @param angle the ellipse rotation in degrees\n * @param LAF the large arc flag\n * @param SF the sweep flag\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns properties specific to Arc segments\n */\nconst getArcProps = (\n x1: number,\n y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n x: number,\n y: number,\n) => {\n const { abs, sin, cos, sqrt, PI } = Math;\n let rx = abs(RX);\n let ry = abs(RY);\n const xRot = ((angle % 360) + 360) % 360;\n const xRotRad = xRot * (PI / 180);\n\n // istanbul ignore next @preserve\n if (x1 === x && y1 === y) {\n return {\n rx,\n ry,\n startAngle: 0,\n endAngle: 0,\n center: { x, y },\n };\n }\n\n if (rx === 0 || ry === 0) {\n return {\n rx,\n ry,\n startAngle: 0,\n endAngle: 0,\n center: { x: (x + x1) / 2, y: (y + y1) / 2 },\n };\n }\n\n const dx = (x1 - x) / 2;\n const dy = (y1 - y) / 2;\n\n const transformedPoint = {\n x: cos(xRotRad) * dx + sin(xRotRad) * dy,\n y: -sin(xRotRad) * dx + cos(xRotRad) * dy,\n };\n\n const radiiCheck = transformedPoint.x ** 2 / rx ** 2 +\n transformedPoint.y ** 2 / ry ** 2;\n\n if (radiiCheck > 1) {\n rx *= sqrt(radiiCheck);\n ry *= sqrt(radiiCheck);\n }\n\n const cSquareNumerator = rx ** 2 * ry ** 2 -\n rx ** 2 * transformedPoint.y ** 2 - ry ** 2 * transformedPoint.x ** 2;\n const cSquareRootDenom = rx ** 2 * transformedPoint.y ** 2 +\n ry ** 2 * transformedPoint.x ** 2;\n\n let cRadicand = cSquareNumerator / cSquareRootDenom;\n /* istanbul ignore next @preserve */\n cRadicand = cRadicand < 0 ? 0 : cRadicand;\n const cCoef = (LAF !== SF ? 1 : -1) * sqrt(cRadicand);\n const transformedCenter = {\n x: cCoef * ((rx * transformedPoint.y) / ry),\n y: cCoef * (-(ry * transformedPoint.x) / rx),\n };\n\n const center = {\n x: cos(xRotRad) * transformedCenter.x - sin(xRotRad) * transformedCenter.y +\n (x1 + x) / 2,\n y: sin(xRotRad) * transformedCenter.x + cos(xRotRad) * transformedCenter.y +\n (y1 + y) / 2,\n };\n\n const startVector = {\n x: (transformedPoint.x - transformedCenter.x) / rx,\n y: (transformedPoint.y - transformedCenter.y) / ry,\n };\n\n const startAngle = angleBetween({ x: 1, y: 0 }, startVector);\n\n const endVector = {\n x: (-transformedPoint.x - transformedCenter.x) / rx,\n y: (-transformedPoint.y - transformedCenter.y) / ry,\n };\n\n let sweepAngle = angleBetween(startVector, endVector);\n if (!SF && sweepAngle > 0) {\n sweepAngle -= 2 * PI;\n } else if (SF && sweepAngle < 0) {\n sweepAngle += 2 * PI;\n }\n sweepAngle %= 2 * PI;\n\n const endAngle = startAngle + sweepAngle;\n\n // point.ellipticalArcStartAngle = startAngle;\n // point.ellipticalArcEndAngle = startAngle + sweepAngle;\n // point.ellipticalArcAngle = alpha;\n\n // point.ellipticalArcCenter = center;\n // point.resultantRx = rx;\n // point.resultantRy = ry;\n\n return {\n center,\n startAngle,\n endAngle,\n rx,\n ry,\n };\n};\n\n/**\n * Returns the length of an Arc segment.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the length of the Arc segment\n */\nconst getArcLength = (\n x1: number,\n y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n x: number,\n y: number,\n) => {\n const { rx, ry, startAngle, endAngle } = getArcProps(\n x1,\n y1,\n RX,\n RY,\n angle,\n LAF,\n SF,\n x,\n y,\n );\n return arcLength(rx, ry, endAngle - startAngle);\n};\n\n/**\n * Returns a point along an Arc segment at a given distance.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param RX the radius on X axis\n * @param RY the radius on Y axis\n * @param angle the ellipse rotation in degrees\n * @param LAF the large arc flag\n * @param SF the sweep flag\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance a [0-1] ratio\n * @returns a point along the Arc segment\n */\nconst getPointAtArcLength = (\n x1: number,\n y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n x: number,\n y: number,\n distance?: number,\n) => {\n let point = { x: x1, y: y1 };\n const { center, rx, ry, startAngle, endAngle } = getArcProps(\n x1,\n y1,\n RX,\n RY,\n angle,\n LAF,\n SF,\n x,\n y,\n );\n\n /* istanbul ignore else @preserve */\n if (typeof distance === \"number\") {\n const length = arcLength(rx, ry, endAngle - startAngle);\n if (distance <= 0) {\n point = { x: x1, y: y1 };\n } else if (distance >= length) {\n point = { x, y };\n } else {\n /* istanbul ignore next @preserve */\n if (x1 === x && y1 === y) {\n return { x, y };\n }\n /* istanbul ignore next @preserve */\n if (rx === 0 || ry === 0) {\n return getPointAtLineLength(x1, y1, x, y, distance);\n }\n const { PI, cos, sin } = Math;\n const sweepAngle = endAngle - startAngle;\n const xRot = ((angle % 360) + 360) % 360;\n const xRotRad = xRot * (PI / 180);\n const alpha = startAngle + sweepAngle * (distance / length);\n const ellipseComponentX = rx * cos(alpha);\n const ellipseComponentY = ry * sin(alpha);\n\n point = {\n x: cos(xRotRad) * ellipseComponentX - sin(xRotRad) * ellipseComponentY +\n center.x,\n y: sin(xRotRad) * ellipseComponentX + cos(xRotRad) * ellipseComponentY +\n center.y,\n };\n }\n }\n\n return point;\n};\n\n/**\n * Returns the extrema for an Arc segment in the following format:\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\n *\n * @see https://github.com/herrstrietzel/svg-pathdata-getbbox\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param RX the radius on X axis\n * @param RY the radius on Y axis\n * @param angle the ellipse rotation in degrees\n * @param LAF the large arc flag\n * @param SF the sweep flag\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the extrema of the Arc segment\n */\nconst getArcBBox = (\n x1: number,\n y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n x: number,\n y: number,\n) => {\n const { center, rx, ry, startAngle, endAngle } = getArcProps(\n x1,\n y1,\n RX,\n RY,\n angle,\n LAF,\n SF,\n x,\n y,\n );\n const deltaAngle = endAngle - startAngle;\n const { min, max, tan, atan2, PI } = Math;\n\n // circle/elipse center coordinates\n const { x: cx, y: cy } = center;\n\n // rotation to radians\n const alpha = (angle * PI) / 180;\n const tangent = tan(alpha);\n\n /**\n * find min/max from zeroes of directional derivative along x and y\n * along x axis\n */\n const theta = atan2(-ry * tangent, rx);\n const angle1 = theta;\n const angle2 = theta + PI;\n const angle3 = atan2(ry, rx * tangent);\n const angle4 = angle3 + PI;\n const xArray = [x];\n const yArray = [y];\n\n // inner bounding box\n let xMin = min(x1, x);\n let xMax = max(x1, x);\n let yMin = min(y1, y);\n let yMax = max(y1, y);\n\n // on path point close after start\n const angleAfterStart = endAngle - deltaAngle * 0.00001;\n const pP2 = arcPoint(cx, cy, rx, ry, alpha, angleAfterStart);\n\n // on path point close before end\n const angleBeforeEnd = endAngle - deltaAngle * 0.99999;\n const pP3 = arcPoint(cx, cy, rx, ry, alpha, angleBeforeEnd);\n\n /**\n * expected extremes\n * if leaving inner bounding box\n * (between segment start and end point)\n * otherwise exclude elliptic extreme points\n */\n\n // right\n if (pP2[0] > xMax || pP3[0] > xMax) {\n // get point for this theta\n const p1 = arcPoint(cx, cy, rx, ry, alpha, angle1);\n xArray.push(p1[0]);\n yArray.push(p1[1]);\n }\n\n // left\n if (pP2[0] < xMin || pP3[0] < xMin) {\n // get anti-symmetric point\n const p2 = arcPoint(cx, cy, rx, ry, alpha, angle2);\n xArray.push(p2[0]);\n yArray.push(p2[1]);\n }\n\n // top\n if (pP2[1] < yMin || pP3[1] < yMin) {\n // get anti-symmetric point\n const p4 = arcPoint(cx, cy, rx, ry, alpha, angle4);\n xArray.push(p4[0]);\n yArray.push(p4[1]);\n }\n\n // bottom\n if (pP2[1] > yMax || pP3[1] > yMax) {\n // get point for this theta\n const p3 = arcPoint(cx, cy, rx, ry, alpha, angle3);\n xArray.push(p3[0]);\n yArray.push(p3[1]);\n }\n\n xMin = min.apply([], xArray);\n yMin = min.apply([], yArray);\n xMax = max.apply([], xArray);\n yMax = max.apply([], yArray);\n\n return [xMin, yMin, xMax, yMax] as [number, number, number, number];\n};\n\nexport {\n angleBetween,\n arcLength,\n arcPoint,\n getArcBBox,\n getArcLength,\n getArcProps,\n getPointAtArcLength,\n};\n","import type {\n CubicCoordinates,\n CubicPoints,\n DeriveCallback,\n DerivedCubicPoints,\n DerivedPoint,\n DerivedQuadPoints,\n PointTuple,\n QuadCoordinates,\n QuadPoints,\n} from \"../types\";\n\n/**\n * Tools from bezier.js by Mike 'Pomax' Kamermans\n * @see https://github.com/Pomax/bezierjs\n */\n\nconst Tvalues = [\n -0.0640568928626056260850430826247450385909,\n 0.0640568928626056260850430826247450385909,\n -0.1911188674736163091586398207570696318404,\n 0.1911188674736163091586398207570696318404,\n -0.3150426796961633743867932913198102407864,\n 0.3150426796961633743867932913198102407864,\n -0.4337935076260451384870842319133497124524,\n 0.4337935076260451384870842319133497124524,\n -0.5454214713888395356583756172183723700107,\n 0.5454214713888395356583756172183723700107,\n -0.6480936519369755692524957869107476266696,\n 0.6480936519369755692524957869107476266696,\n -0.7401241915785543642438281030999784255232,\n 0.7401241915785543642438281030999784255232,\n -0.8200019859739029219539498726697452080761,\n 0.8200019859739029219539498726697452080761,\n -0.8864155270044010342131543419821967550873,\n 0.8864155270044010342131543419821967550873,\n -0.9382745520027327585236490017087214496548,\n 0.9382745520027327585236490017087214496548,\n -0.9747285559713094981983919930081690617411,\n 0.9747285559713094981983919930081690617411,\n -0.9951872199970213601799974097007368118745,\n 0.9951872199970213601799974097007368118745,\n];\n\nconst Cvalues = [\n 0.1279381953467521569740561652246953718517,\n 0.1279381953467521569740561652246953718517,\n 0.1258374563468282961213753825111836887264,\n 0.1258374563468282961213753825111836887264,\n 0.121670472927803391204463153476262425607,\n 0.121670472927803391204463153476262425607,\n 0.1155056680537256013533444839067835598622,\n 0.1155056680537256013533444839067835598622,\n 0.1074442701159656347825773424466062227946,\n 0.1074442701159656347825773424466062227946,\n 0.0976186521041138882698806644642471544279,\n 0.0976186521041138882698806644642471544279,\n 0.086190161531953275917185202983742667185,\n 0.086190161531953275917185202983742667185,\n 0.0733464814110803057340336152531165181193,\n 0.0733464814110803057340336152531165181193,\n 0.0592985849154367807463677585001085845412,\n 0.0592985849154367807463677585001085845412,\n 0.0442774388174198061686027482113382288593,\n 0.0442774388174198061686027482113382288593,\n 0.0285313886289336631813078159518782864491,\n 0.0285313886289336631813078159518782864491,\n 0.0123412297999871995468056670700372915759,\n 0.0123412297999871995468056670700372915759,\n];\n\n/**\n * @param points\n * @returns\n */\nconst deriveBezier = (points: QuadPoints | CubicPoints) => {\n const dpoints = [] as (DerivedCubicPoints | DerivedQuadPoints)[];\n for (let p = points, d = p.length, c = d - 1; d > 1; d -= 1, c -= 1) {\n const list = [] as unknown as DerivedCubicPoints | DerivedQuadPoints;\n for (let j = 0; j < c; j += 1) {\n list.push({\n x: c * (p[j + 1].x - p[j].x),\n y: c * (p[j + 1].y - p[j].y),\n t: 0,\n });\n }\n dpoints.push(list);\n p = list;\n }\n return dpoints;\n};\n\n/**\n * @param points\n * @param t\n */\nconst computeBezier = (\n points: DerivedQuadPoints | DerivedCubicPoints,\n t: number,\n) => {\n // shortcuts\n /* istanbul ignore next @preserve */\n if (t === 0) {\n points[0].t = 0;\n return points[0];\n }\n\n const order = points.length - 1;\n\n /* istanbul ignore next @preserve */\n if (t === 1) {\n points[order].t = 1;\n return points[order];\n }\n\n const mt = 1 - t;\n let p = points as typeof points | [\n DerivedPoint,\n DerivedPoint,\n DerivedPoint,\n DerivedPoint,\n ];\n\n // constant?\n /* istanbul ignore next @preserve */\n if (order === 0) {\n points[0].t = t;\n return points[0];\n }\n\n // linear?\n /* istanbul ignore else @preserve */\n if (order === 1) {\n return {\n x: mt * p[0].x + t * p[1].x,\n y: mt * p[0].y + t * p[1].y,\n t,\n };\n }\n\n // quadratic/cubic curve?\n const mt2 = mt * mt;\n const t2 = t * t;\n let a = 0;\n let b = 0;\n let c = 0;\n let d = 0;\n /* istanbul ignore else @preserve */\n if (order === 2) {\n p = [p[0], p[1], p[2], { x: 0, y: 0 } as DerivedPoint];\n a = mt2;\n b = mt * t * 2;\n c = t2;\n } else if (order === 3) {\n a = mt2 * mt;\n b = mt2 * t * 3;\n c = mt * t2 * 3;\n d = t * t2;\n }\n return {\n x: a * p[0].x + b * p[1].x + c * p[2].x + d * p[3].x,\n y: a * p[0].y + b * p[1].y + c * p[2].y + d * p[3].y,\n t,\n };\n};\n\nconst calculateBezier = (derivativeFn: DeriveCallback, t: number) => {\n const d = derivativeFn(t);\n const l = d.x * d.x + d.y * d.y;\n\n return Math.sqrt(l);\n};\n\nconst bezierLength = (derivativeFn: DeriveCallback) => {\n const z = 0.5;\n const len = Tvalues.length;\n\n let sum = 0;\n\n for (let i = 0, t; i < len; i++) {\n t = z * Tvalues[i] + z;\n sum += Cvalues[i] * calculateBezier(derivativeFn, t);\n }\n return z * sum;\n};\n\n/**\n * Returns the length of CubicBezier / Quad segment.\n * @param curve cubic / quad bezier segment\n */\nconst getBezierLength = (curve: CubicCoordinates | QuadCoordinates) => {\n const points = [] as unknown as CubicPoints | QuadPoints;\n for (let idx = 0, len = curve.length, step = 2; idx < len; idx += step) {\n points.push({\n x: curve[idx],\n y: curve[idx + 1],\n });\n }\n const dpoints = deriveBezier(points);\n return bezierLength((t: number) => {\n return computeBezier(dpoints[0], t);\n });\n};\n\n// Precision for consider cubic polynom as quadratic one\nconst CBEZIER_MINMAX_EPSILON = 0.00000001;\n\n/**\n * Returns the most extreme points in a Quad Bezier segment.\n * @param A an array which consist of X/Y values\n */\n// https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L89\nconst minmaxQ = ([v1, cp, v2]: [number, number, number]) => {\n const min = Math.min(v1, v2);\n const max = Math.max(v1, v2);\n\n /* istanbul ignore next @preserve */\n if (cp >= v1 ? v2 >= cp : v2 <= cp) {\n // if no extremum in ]0,1[\n return [min, max] as PointTuple;\n }\n\n // check if the extremum E is min or max\n const E = (v1 * v2 - cp * cp) / (v1 - 2 * cp + v2);\n return (E < min ? [E, max] : [min, E]) as PointTuple;\n};\n\n/**\n * Returns the most extreme points in a Cubic Bezier segment.\n * @param A an array which consist of X/Y values\n * @see https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L127\n */\nconst minmaxC = ([v1, cp1, cp2, v2]: [number, number, number, number]) => {\n const K = v1 - 3 * cp1 + 3 * cp2 - v2;\n\n // if the polynomial is (almost) quadratic and not cubic\n /* istanbul ignore next @preserve */\n if (Math.abs(K) < CBEZIER_MINMAX_EPSILON) {\n if (v1 === v2 && v1 === cp1) {\n // no curve, point targeting same location\n return [v1, v2] as PointTuple;\n }\n\n return minmaxQ([v1, -0.5 * v1 + 1.5 * cp1, v1 - 3 * cp1 + 3 * cp2]);\n }\n\n // the reduced discriminant of the derivative\n const T = -v1 * cp2 + v1 * v2 - cp1 * cp2 - cp1 * v2 + cp1 * cp1 + cp2 * cp2;\n\n // if the polynomial is monotone in [0,1]\n if (T <= 0) {\n return [Math.min(v1, v2), Math.max(v1, v2)] as PointTuple;\n }\n const S = Math.sqrt(T);\n\n // potential extrema\n let min = Math.min(v1, v2);\n let max = Math.max(v1, v2);\n\n const L = v1 - 2 * cp1 + cp2;\n // check local extrema\n for (let R = (L + S) / K, i = 1; i <= 2; R = (L - S) / K, i++) {\n // istanbul ignore next @preserve\n if (R > 0 && R < 1) {\n // if the extrema is for R in [0,1]\n const Q = v1 * (1 - R) * (1 - R) * (1 - R) +\n cp1 * 3 * (1 - R) * (1 - R) * R + cp2 * 3 * (1 - R) * R * R +\n v2 * R * R * R;\n if (Q < min) {\n min = Q;\n }\n if (Q > max) {\n max = Q;\n }\n }\n }\n\n return [min, max] as PointTuple;\n};\n\nexport {\n bezierLength,\n calculateBezier,\n CBEZIER_MINMAX_EPSILON,\n computeBezier,\n Cvalues,\n deriveBezier,\n getBezierLength,\n minmaxC,\n minmaxQ,\n Tvalues,\n};\n","import { getBezierLength, minmaxC } from \"./bezier\";\nimport { type CubicCoordinates } from \"../types\";\n\n/**\n * Returns a point at a given length of a CubicBezier segment.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param t a [0-1] ratio\n * @returns the point at cubic-bezier segment length\n */\nconst getPointAtCubicSegmentLength = (\n [x1, y1, c1x, c1y, c2x, c2y, x2, y2]: CubicCoordinates,\n t: number,\n) => {\n const t1 = 1 - t;\n return {\n x: t1 ** 3 * x1 + 3 * t1 ** 2 * t * c1x + 3 * t1 * t ** 2 * c2x +\n t ** 3 * x2,\n y: t1 ** 3 * y1 + 3 * t1 ** 2 * t * c1y + 3 * t1 * t ** 2 * c2y +\n t ** 3 * y2,\n };\n};\n\n/**\n * Returns the length of a CubicBezier segment.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the CubicBezier segment length\n */\nconst getCubicLength = (\n x1: number,\n y1: number,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x2: number,\n y2: number,\n) => {\n return getBezierLength([x1, y1, c1x, c1y, c2x, c2y, x2, y2]);\n};\n\n/**\n * Returns the point along a CubicBezier segment at a given distance.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance the distance to look at\n * @returns the point at CubicBezier length\n */\nconst getPointAtCubicLength = (\n x1: number,\n y1: number,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x2: number,\n y2: number,\n distance?: number,\n) => {\n const distanceIsNumber = typeof distance === \"number\";\n let point = { x: x1, y: y1 };\n /* istanbul ignore else @preserve */\n if (distanceIsNumber) {\n const currentLength = getBezierLength([x1, y1, c1x, c1y, c2x, c2y, x2, y2]);\n if (distance <= 0) {\n // first point already defined\n } else if (distance >= currentLength) {\n point = { x: x2, y: y2 };\n } else {\n point = getPointAtCubicSegmentLength(\n [x1, y1, c1x, c1y, c2x, c2y, x2, y2],\n distance / currentLength,\n );\n }\n }\n return point;\n};\n\n/**\n * Returns the boundig box of a CubicBezier segment in the following format:\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the extrema of the CubicBezier segment\n */\nconst getCubicBBox = (\n x1: number,\n y1: number,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x2: number,\n y2: number,\n) => {\n const cxMinMax = minmaxC([x1, c1x, c2x, x2]);\n const cyMinMax = minmaxC([y1, c1y, c2y, y2]);\n\n return [cxMinMax[0], cyMinMax[0], cxMinMax[1], cyMinMax[1]] as [\n number,\n number,\n number,\n number,\n ];\n};\n\nexport {\n getCubicBBox,\n getCubicLength,\n getPointAtCubicLength,\n getPointAtCubicSegmentLength,\n};\n","import { getBezierLength, minmaxQ } from \"./bezier\";\nimport { type QuadCoordinates } from \"../types\";\n\n/**\n * Returns the {x,y} coordinates of a point at a\n * given length of a quadratic-bezier segment.\n *\n * @see https://github.com/substack/point-at-length\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param cx the control point X\n * @param cy the control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param t a [0-1] ratio\n * @returns the requested {x,y} coordinates\n */\nconst getPointAtQuadSegmentLength = (\n [x1, y1, cx, cy, x2, y2]: QuadCoordinates,\n t: number,\n) => {\n const t1 = 1 - t;\n return {\n x: t1 ** 2 * x1 + 2 * t1 * t * cx + t ** 2 * x2,\n y: t1 ** 2 * y1 + 2 * t1 * t * cy + t ** 2 * y2,\n };\n};\n\n/**\n * Returns the length of a QuadraticBezier segment.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param cx the control point X\n * @param cy the control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the QuadraticBezier segment length\n */\nconst getQuadLength = (\n x1: number,\n y1: number,\n cx: number,\n cy: number,\n x2: number,\n y2: number,\n) => {\n return getBezierLength([x1, y1, cx, cy, x2, y2]);\n};\n\n/**\n * Returns the point along a QuadraticBezier segment at a given distance.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param cx the control point X\n * @param cy the control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance the distance to look at\n * @returns the point at QuadraticBezier length\n */\nconst getPointAtQuadLength = (\n x1: number,\n y1: number,\n cx: number,\n cy: number,\n x2: number,\n y2: number,\n distance?: number,\n) => {\n const distanceIsNumber = typeof distance === \"number\";\n let point = { x: x1, y: y1 };\n\n /* istanbul ignore else @preserve */\n if (distanceIsNumber) {\n const currentLength = getBezierLength([x1, y1, cx, cy, x2, y2]);\n if (distance <= 0) {\n // first point already defined\n } else if (distance >= currentLength) {\n point = { x: x2, y: y2 };\n } else {\n point = getPointAtQuadSegmentLength(\n [x1, y1, cx, cy, x2, y2],\n distance / currentLength,\n );\n }\n }\n return point;\n};\n\n/**\n * Returns the boundig box of a QuadraticBezier segment in the following format:\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param cx the control point X\n * @param cy the control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the extrema of the QuadraticBezier segment\n */\nconst getQuadBBox = (\n x1: number,\n y1: number,\n cx: number,\n cy: number,\n x2: number,\n y2: number,\n) => {\n const cxMinMax = minmaxQ([x1, cx, x2]);\n const cyMinMax = minmaxQ([y1, cy, y2]);\n return [cxMinMax[0], cyMinMax[0], cxMinMax[1], cyMinMax[1]] as [\n number,\n number,\n number,\n number,\n ];\n};\n\nexport {\n getPointAtQuadLength,\n getPointAtQuadSegmentLength,\n getQuadBBox,\n getQuadLength,\n};\n","import distanceSquareRoot from \"./distanceSquareRoot\";\nimport { type PointTuple } from \"../types\";\n\n/**\n * d3-polygon-area\n * https://github.com/d3/d3-polygon\n *\n * Returns the area of a polygon.\n *\n * @param polygon an array of coordinates\n * @returns the polygon area\n */\nconst polygonArea = (polygon: PointTuple[]) => {\n const n = polygon.length;\n let i = -1;\n let a: PointTuple;\n let b = polygon[n - 1];\n let area = 0;\n\n /* eslint-disable-next-line */\n while (++i < n) {\n a = b;\n b = polygon[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n\n return area / 2;\n};\n\n/**\n * d3-polygon-length\n * https://github.com/d3/d3-polygon\n *\n * Returns the perimeter of a polygon.\n *\n * @param polygon an array of coordinates\n * @returns the polygon length\n */\nconst polygonLength = (polygon: PointTuple[]) => {\n return polygon.reduce((length, point, i) => {\n if (i) {\n return length + distanceSquareRoot(polygon[i - 1], point);\n }\n return 0;\n }, 0);\n};\n\nexport { polygonArea, polygonLength };\n","const DISTANCE_EPSILON = 0.00001;\n\nexport default DISTANCE_EPSILON;\n","import normalizeSegment from \"./normalizeSegment\";\nimport type { NormalArray, PathArray } from \"../types\";\nimport iterate from \"./iterate\";\nimport parsePathString from \"../parser/parsePathString\";\nimport paramsParser from \"../parser/paramsParser\";\n\n/**\n * Normalizes a `pathArray` object for further processing:\n * * convert segments to absolute values\n * * convert shorthand path commands to their non-shorthand notation\n *\n * @param pathInput the string to be parsed or 'pathArray'\n * @returns the normalized `pathArray`\n */\nconst normalizePath = (pathInput: string | PathArray) => {\n const path = parsePathString(pathInput);\n const params = { ...paramsParser };\n\n return iterate(path, (seg, _, lastX, lastY) => {\n params.x = lastX;\n params.y = lastY;\n const result = normalizeSegment(seg, params);\n\n const seglen = result.length;\n params.x1 = +result[seglen - 2];\n params.y1 = +result[seglen - 1];\n params.x2 = +result[seglen - 4] || params.x1;\n params.y2 = +result[seglen - 3] || params.y1;\n\n return result;\n });\n};\nexport default normalizePath;\n","import DISTANCE_EPSILON from \"./distanceEpsilon\";\nimport type { MSegment, PathArray, PointTuple } from \"../types\";\nimport iterate from \"../process/iterate\";\nimport { getLineLength, getPointAtLineLength } from \"../math/lineTools\";\nimport { getArcLength, getPointAtArcLength } from \"../math/arcTools\";\nimport { getCubicLength, getPointAtCubicLength } from \"../math/cubicTools\";\nimport { getPointAtQuadLength, getQuadLength } from \"../math/quadTools\";\nimport normalizePath from \"../process/normalizePath\";\n\n/**\n * Returns [x,y] coordinates of a point at a given length of a shape.\n *\n * @param pathInput the `pathArray` to look into\n * @param distance the length of the shape to look at\n * @returns the requested {x, y} point coordinates\n */\nconst getPointAtLength = (pathInput: string | PathArray, distance?: number) => {\n const path = normalizePath(pathInput);\n let isM = false;\n let data = [] as number[];\n let pathCommand = \"M\";\n let x = 0;\n let y = 0;\n let [mx, my] = path[0].slice(1) as PointTuple;\n const distanceIsNumber = typeof distance === \"number\";\n let point = { x: mx, y: my };\n let length = 0;\n let POINT = point;\n let totalLength = 0;\n\n if (!distanceIsNumber || distance < DISTANCE_EPSILON) return point;\n\n // for (let i = 0; i < pathLen; i += 1) {\n iterate(path, (seg, _, lastX, lastY) => {\n [pathCommand] = seg;\n isM = pathCommand === \"M\";\n data = !isM ? [lastX, lastY].concat(seg.slice(1) as number[]) : data;\n\n // this segment is always ZERO\n /* istanbul ignore else @preserve */\n if (isM) {\n // remember mx, my for Z\n [, mx, my] = seg as MSegment;\n point = { x: mx, y: my };\n length = 0;\n } else if (pathCommand === \"L\") {\n point = getPointAtLineLength(\n data[0],\n data[1],\n data[2],\n data[3],\n distance - totalLength,\n );\n length = getLineLength(data[0], data[1], data[2], data[3]);\n } else if (pathCommand === \"A\") {\n point = getPointAtArcLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n data[6],\n data[7],\n data[8],\n distance - totalLength,\n );\n length = getArcLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n data[6],\n data[7],\n data[8],\n );\n } else if (pathCommand === \"C\") {\n point = getPointAtCubicLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n data[6],\n data[7],\n distance - totalLength,\n );\n length = getCubicLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n data[6],\n data[7],\n );\n } else if (pathCommand === \"Q\") {\n point = getPointAtQuadLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n distance - totalLength,\n );\n length = getQuadLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n );\n } else if (pathCommand === \"Z\") {\n data = [lastX, lastY, mx, my];\n point = { x: mx, y: my };\n\n length = getLineLength(data[0], data[1], data[2], data[3]);\n }\n\n [x, y] = data.slice(-2);\n\n if (totalLength < distance) {\n POINT = point;\n } else {\n // totalLength >= distance\n // stop right here\n // stop iterator now!\n return false;\n }\n\n totalLength += length;\n return;\n });\n\n // native `getPointAtLength` behavior when the given distance\n // is higher than total length\n if (distance > totalLength - DISTANCE_EPSILON) {\n return { x, y };\n }\n\n return POINT;\n};\n\nexport default getPointAtLength;\n","import type { LSegment, MSegment, PathArray, PointTuple } from \"../types\";\nimport { getLineLength } from \"../math/lineTools\";\nimport { getArcLength } from \"../math/arcTools\";\nimport { getCubicLength } from \"../math/cubicTools\";\nimport { getQuadLength } from \"../math/quadTools\";\nimport iterate from \"../process/iterate\";\nimport parsePathString from \"../parser/parsePathString\";\nimport absolutizeSegment from \"../process/absolutizeSegment\";\n\n/**\n * Returns the shape total length, or the equivalent to `shape.getTotalLength()`.\n *\n * @param pathInput the target `pathArray`\n * @returns the shape total length\n */\nconst getTotalLength = (pathInput: string | PathArray) => {\n const path = parsePathString(pathInput);\n let paramX1 = 0;\n let paramY1 = 0;\n let paramX2 = 0;\n let paramY2 = 0;\n let paramQX = 0;\n let paramQY = 0;\n let pathCommand = \"M\";\n let mx = 0;\n let my = 0;\n let totalLength = 0;\n\n iterate(path, (seg, index, lastX, lastY) => {\n [pathCommand] = seg;\n const absCommand = pathCommand.toUpperCase();\n const isRelative = absCommand !== pathCommand;\n const absoluteSegment = isRelative\n ? absolutizeSegment(seg, index, lastX, lastY)\n : (seg.slice(0) as typeof seg);\n\n const normalSegment = absCommand === \"V\"\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\n : absCommand === \"H\"\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\n : absoluteSegment;\n [pathCommand] = normalSegment;\n\n if (!\"TQ\".includes(absCommand)) {\n // optional but good to be cautious\n paramQX = 0;\n paramQY = 0;\n }\n\n // this segment is always ZERO\n /* istanbul ignore else @preserve */\n if (pathCommand === \"M\") {\n // remember mx, my for Z\n [, mx, my] = normalSegment as MSegment;\n } else if (pathCommand === \"L\") {\n totalLength += getLineLength(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n );\n } else if (pathCommand === \"A\") {\n totalLength += getArcLength(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n normalSegment[5] as number,\n normalSegment[6] as number,\n normalSegment[7] as number,\n );\n } else if (pathCommand === \"S\") {\n const cp1x = paramX1 * 2 - paramX2;\n const cp1y = paramY1 * 2 - paramY2;\n\n totalLength += getCubicLength(\n lastX,\n lastY,\n cp1x,\n cp1y,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n );\n } else if (pathCommand === \"C\") {\n totalLength += getCubicLength(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n normalSegment[5] as number,\n normalSegment[6] as number,\n );\n } else if (pathCommand === \"T\") {\n paramQX = paramX1 * 2 - paramQX;\n paramQY = paramY1 * 2 - paramQY;\n totalLength += getQuadLength(\n lastX,\n lastY,\n paramQX,\n paramQY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n );\n } else if (pathCommand === \"Q\") {\n paramQX = normalSegment[1] as number;\n paramQY = normalSegment[2] as number;\n totalLength += getQuadLength(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n );\n } else if (pathCommand === \"Z\") {\n totalLength += getLineLength(lastX, lastY, mx, my);\n }\n\n // update params\n [paramX1, paramY1] = pathCommand === \"Z\"\n ? [mx, my]\n : (normalSegment.slice(-2) as PointTuple);\n [paramX2, paramY2] = pathCommand === \"C\"\n ? ([normalSegment[3], normalSegment[4]] as PointTuple)\n : pathCommand === \"S\"\n ? ([normalSegment[1], normalSegment[2]] as PointTuple)\n : [paramX1, paramY1];\n });\n\n return totalLength;\n};\n\nexport default getTotalLength;\n","import type { PathArray, PathSegment } from \"../types\";\nimport type { SegmentProperties } from \"../interface\";\nimport parsePathString from \"../parser/parsePathString\";\nimport getTotalLength from \"./getTotalLength\";\n\n/**\n * Returns the segment, its index and length as well as\n * the length to that segment at a given length in a path.\n *\n * @param pathInput target `pathArray`\n * @param distance the given length\n * @returns the requested properties\n */\nconst getPropertiesAtLength = (\n pathInput: string | PathArray,\n distance?: number,\n): SegmentProperties => {\n const pathArray = parsePathString(pathInput);\n\n let pathTemp = pathArray.slice(0) as PathArray;\n let pathLength = getTotalLength(pathTemp);\n let index = pathTemp.length - 1;\n let lengthAtSegment = 0;\n let length = 0;\n let segment = pathArray[0] as PathSegment;\n\n // If the path is empty, return 0.\n if (index <= 0 || !distance || !Number.isFinite(distance)) {\n return {\n segment,\n index: 0,\n length,\n lengthAtSegment,\n };\n }\n\n if (distance >= pathLength) {\n pathTemp = pathArray.slice(0, -1) as PathArray;\n lengthAtSegment = getTotalLength(pathTemp);\n length = pathLength - lengthAtSegment;\n segment = pathArray[index];\n return {\n segment,\n index,\n length,\n lengthAtSegment,\n };\n }\n\n const segments = [] as SegmentProperties[];\n while (index > 0) {\n segment = pathTemp[index];\n pathTemp = pathTemp.slice(0, -1) as PathArray;\n lengthAtSegment = getTotalLength(pathTemp);\n length = pathLength - lengthAtSegment;\n pathLength = lengthAtSegment;\n\n segments.push({\n segment,\n index,\n length,\n lengthAtSegment,\n });\n index -= 1;\n }\n\n return segments.find(({ lengthAtSegment: l }) =>\n l <= distance\n ) as SegmentProperties;\n};\n\nexport default getPropertiesAtLength;\n","import type { PathArray, Point } from \"../types\";\nimport type { PointProperties } from \"../interface\";\nimport getPointAtLength from \"./getPointAtLength\";\nimport getPropertiesAtLength from \"./getPropertiesAtLength\";\nimport getTotalLength from \"./getTotalLength\";\nimport parsePathString from \"../parser/parsePathString\";\nimport normalizePath from \"../process/normalizePath\";\n\n/**\n * Returns the point and segment in path closest to a given point as well as\n * the distance to the path stroke.\n *\n * @see https://bl.ocks.org/mbostock/8027637\n *\n * @param pathInput target `pathArray`\n * @param point the given point\n * @returns the requested properties\n */\nconst getPropertiesAtPoint = (\n pathInput: string | PathArray,\n point: Point,\n): PointProperties => {\n const path = parsePathString(pathInput);\n const normalPath = normalizePath(path);\n const pathLength = getTotalLength(normalPath);\n const distanceTo = (p: Point) => {\n const dx = p.x - point.x;\n const dy = p.y - point.y;\n return dx * dx + dy * dy;\n };\n let precision = 8;\n let scan: Point;\n let closest = { x: 0, y: 0 }; // make TS happy\n let scanDistance = 0;\n let bestLength = 0;\n let bestDistance = Infinity;\n\n // linear scan for coarse approximation\n for (let scanLength = 0; scanLength <= pathLength; scanLength += precision) {\n scan = getPointAtLength(normalPath, scanLength);\n scanDistance = distanceTo(scan);\n\n if (scanDistance < bestDistance) {\n closest = scan;\n bestLength = scanLength;\n bestDistance = scanDistance;\n }\n }\n\n // binary search for precise estimate\n precision /= 2;\n let before: { x: number; y: number };\n let after: { x: number; y: number };\n let beforeLength = 0;\n let afterLength = 0;\n let beforeDistance = 0;\n let afterDistance = 0;\n\n while (precision > 0.000001) {\n beforeLength = bestLength - precision;\n before = getPointAtLength(normalPath, beforeLength);\n beforeDistance = distanceTo(before);\n afterLength = bestLength + precision;\n after = getPointAtLength(normalPath, afterLength);\n afterDistance = distanceTo(after);\n\n if (beforeLength >= 0 && beforeDistance < bestDistance) {\n closest = before;\n bestLength = beforeLength;\n bestDistance = beforeDistance;\n } else if (afterLength <= pathLength && afterDistance < bestDistance) {\n closest = after;\n bestLength = afterLength;\n bestDistance = afterDistance;\n } else {\n precision /= 2;\n }\n if (precision < 0.00001) break;\n }\n\n const segment = getPropertiesAtLength(path, bestLength);\n const distance = Math.sqrt(bestDistance);\n\n return { closest, distance, segment };\n};\n\nexport default getPropertiesAtPoint;\n","import type { PathArray } from \"../types\";\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\n\n/**\n * Returns the point in path closest to a given point.\n *\n * @param pathInput target `pathArray`\n * @param point the given point\n * @returns the best match\n */\nconst getClosestPoint = (\n pathInput: string | PathArray,\n point: { x: number; y: number },\n) => {\n return getPropertiesAtPoint(pathInput, point).closest;\n};\n\nexport default getClosestPoint;\n","import pathToCurve from \"../convert/pathToCurve\";\nimport type { PathArray, PointTuple } from \"../types\";\n\n/**\n * Returns the area of a single cubic-bezier segment.\n *\n * http://objectmix.com/graphics/133553-area-closed-bezier-curve.html\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the area of the cubic-bezier segment\n */\nconst getCubicSegArea = (\n x1: number,\n y1: number,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x2: number,\n y2: number,\n) => {\n return (\n (3 *\n ((y2 - y1) * (c1x + c2x) -\n (x2 - x1) * (c1y + c2y) +\n c1y * (x1 - c2x) -\n c1x * (y1 - c2y) +\n y2 * (c2x + x1 / 3) -\n x2 * (c2y + y1 / 3))) /\n 20\n );\n};\n\n/**\n * Returns the area of a shape.\n *\n * @author Jürg Lehni & Jonathan Puckey\n *\n * @see https://github.com/paperjs/paper.js/blob/develop/src/path/Path.js\n *\n * @param path the shape `pathArray`\n * @returns the length of the cubic-bezier segment\n */\nconst getPathArea = (path: PathArray) => {\n let x = 0;\n let y = 0;\n let len = 0;\n\n return pathToCurve(path)\n .map((seg) => {\n switch (seg[0]) {\n case \"M\":\n [, x, y] = seg;\n return 0;\n default:\n len = getCubicSegArea(\n x,\n y,\n seg[1],\n seg[2],\n seg[3],\n seg[4],\n seg[5],\n seg[6],\n );\n [x, y] = seg.slice(-2) as PointTuple;\n return len;\n }\n })\n .reduce((a, b) => a + b, 0);\n};\nexport default getPathArea;\n","import getPathArea from \"./getPathArea\";\nimport pathToCurve from \"../convert/pathToCurve\";\nimport type { PathArray } from \"../types\";\n\n/**\n * Check if a path is drawn clockwise and returns true if so,\n * false otherwise.\n *\n * @param path the path string or `pathArray`\n * @returns true when clockwise or false if not\n */\nconst getDrawDirection = (path: string | PathArray) => {\n return getPathArea(pathToCurve(path)) >= 0;\n};\n\nexport default getDrawDirection;\n","import iterate from \"../process/iterate\";\nimport { PathBBox } from \"../interface\";\nimport { LSegment, MSegment, PathArray, PointTuple } from \"../types\";\nimport { getLineBBox } from \"../math/lineTools\";\nimport { getArcBBox } from \"../math/arcTools\";\nimport { getCubicBBox } from \"../math/cubicTools\";\nimport { getQuadBBox } from \"../math/quadTools\";\nimport parsePathString from \"../parser/parsePathString\";\nimport absolutizeSegment from \"../process/absolutizeSegment\";\n\nconst getPathBBox = (pathInput: PathArray | string) => {\n if (!pathInput) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n x2: 0,\n y2: 0,\n cx: 0,\n cy: 0,\n cz: 0,\n };\n }\n\n const path = parsePathString(pathInput);\n let pathCommand = \"M\";\n let mx = 0;\n let my = 0;\n const { max, min } = Math;\n let xMin = Infinity;\n let yMin = Infinity;\n let xMax = -Infinity;\n let yMax = -Infinity;\n let minX = 0;\n let minY = 0;\n let maxX = 0;\n let maxY = 0;\n let paramX1 = 0;\n let paramY1 = 0;\n let paramX2 = 0;\n let paramY2 = 0;\n let paramQX = 0;\n let paramQY = 0;\n\n iterate(path, (seg, index, lastX, lastY) => {\n [pathCommand] = seg;\n const absCommand = pathCommand.toUpperCase();\n const isRelative = absCommand !== pathCommand;\n const absoluteSegment = isRelative\n ? absolutizeSegment(seg, index, lastX, lastY)\n : (seg.slice(0) as typeof seg);\n\n const normalSegment = absCommand === \"V\"\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\n : absCommand === \"H\"\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\n : absoluteSegment;\n\n [pathCommand] = normalSegment;\n\n if (!\"TQ\".includes(absCommand)) {\n // optional but good to be cautious\n paramQX = 0;\n paramQY = 0;\n }\n\n // this segment is always ZERO\n /* istanbul ignore else @preserve */\n if (pathCommand === \"M\") {\n [, mx, my] = normalSegment as MSegment;\n minX = mx;\n minY = my;\n maxX = mx;\n maxY = my;\n } else if (pathCommand === \"L\") {\n [minX, minY, maxX, maxY] = getLineBBox(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n );\n } else if (pathCommand === \"A\") {\n [minX, minY, maxX, maxY] = getArcBBox(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n normalSegment[5] as number,\n normalSegment[6] as number,\n normalSegment[7] as number,\n );\n } else if (pathCommand === \"S\") {\n const cp1x = paramX1 * 2 - paramX2;\n const cp1y = paramY1 * 2 - paramY2;\n\n [minX, minY, maxX, maxY] = getCubicBBox(\n lastX,\n lastY,\n cp1x,\n cp1y,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n );\n } else if (pathCommand === \"C\") {\n [minX, minY, maxX, maxY] = getCubicBBox(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n normalSegment[5] as number,\n normalSegment[6] as number,\n );\n } else if (pathCommand === \"T\") {\n paramQX = paramX1 * 2 - paramQX;\n paramQY = paramY1 * 2 - paramQY;\n [minX, minY, maxX, maxY] = getQuadBBox(\n lastX,\n lastY,\n paramQX,\n paramQY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n );\n } else if (pathCommand === \"Q\") {\n paramQX = normalSegment[1] as number;\n paramQY = normalSegment[2] as number;\n [minX, minY, maxX, maxY] = getQuadBBox(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n );\n } else if (pathCommand === \"Z\") {\n [minX, minY, maxX, maxY] = getLineBBox(lastX, lastY, mx, my);\n }\n xMin = min(minX, xMin);\n yMin = min(minY, yMin);\n xMax = max(maxX, xMax);\n yMax = max(maxY, yMax);\n\n // update params\n [paramX1, paramY1] = pathCommand === \"Z\"\n ? [mx, my]\n : (normalSegment.slice(-2) as PointTuple);\n [paramX2, paramY2] = pathCommand === \"C\"\n ? ([normalSegment[3], normalSegment[4]] as PointTuple)\n : pathCommand === \"S\"\n ? ([normalSegment[1], normalSegment[2]] as PointTuple)\n : [paramX1, paramY1];\n });\n\n const width = xMax - xMin;\n const height = yMax - yMin;\n\n return {\n width,\n height,\n x: xMin,\n y: yMin,\n x2: xMax,\n y2: yMax,\n cx: xMin + width / 2,\n cy: yMin + height / 2,\n // an estimated guess\n cz: Math.max(width, height) + Math.min(width, height) / 2,\n } satisfies PathBBox;\n};\n\nexport default getPathBBox;\n","import type { PathArray, PathSegment } from \"../types\";\nimport getPropertiesAtLength from \"./getPropertiesAtLength\";\n\n/**\n * Returns the segment at a given length.\n *\n * @param pathInput the target `pathArray`\n * @param distance the distance in path to look at\n * @returns the requested segment\n */\nconst getSegmentAtLength = (\n pathInput: string | PathArray,\n distance?: number,\n): PathSegment | undefined => {\n return getPropertiesAtLength(pathInput, distance).segment;\n};\n\nexport default getSegmentAtLength;\n","import type { SegmentProperties } from \"../interface\";\nimport type { PathArray } from \"../types\";\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\n\n/**\n * Returns the path segment which contains a given point.\n *\n * @param path the `pathArray` to look into\n * @param point the point of the shape to look for\n * @returns the requested segment\n */\nconst getSegmentOfPoint = (\n path: string | PathArray,\n point: { x: number; y: number },\n): SegmentProperties | undefined => {\n return getPropertiesAtPoint(path, point).segment;\n};\nexport default getSegmentOfPoint;\n","import type { PathArray, PathSegment, RelativeCommand } from \"../types\";\nimport paramsCount from \"../parser/paramsCount\";\n\n/**\n * Iterates an array to check if it's an actual `pathArray`.\n *\n * @param path the `pathArray` to be checked\n * @returns iteration result\n */\nconst isPathArray = (path: unknown): path is PathArray => {\n return (\n Array.isArray(path) &&\n path.every((seg: PathSegment) => {\n const lk = seg[0].toLowerCase() as RelativeCommand;\n return (\n paramsCount[lk] === seg.length - 1 &&\n \"achlmqstvz\".includes(lk) &&\n (seg.slice(1) as unknown[]).every(Number.isFinite)\n );\n }) &&\n path.length > 0\n );\n};\nexport default isPathArray;\n","import type { AbsoluteArray } from \"../types\";\nimport isPathArray from \"./isPathArray\";\n\n/**\n * Iterates an array to check if it's a `pathArray`\n * with all absolute values.\n *\n * @param path the `pathArray` to be checked\n * @returns iteration result\n */\nconst isAbsoluteArray = (path: unknown): path is AbsoluteArray => {\n return (\n isPathArray(path) &&\n // `isPathArray` also checks if it's `Array`\n path.every(([x]) => x === x.toUpperCase())\n );\n};\nexport default isAbsoluteArray;\n","import type { NormalArray } from \"../types\";\nimport isAbsoluteArray from \"./isAbsoluteArray\";\n\n/**\n * Iterates an array to check if it's a `pathArray`\n * with all segments are in non-shorthand notation\n * with absolute values.\n *\n * @param {string | SVGPath.pathArray} path the `pathArray` to be checked\n * @returns {boolean} iteration result\n */\nconst isNormalizedArray = (path: unknown): path is NormalArray => {\n // `isAbsoluteArray` also checks if it's `Array`\n return isAbsoluteArray(path) && path.every(([pc]) => \"ACLMQZ\".includes(pc));\n};\nexport default isNormalizedArray;\n","import { CurveArray } from \"../types\";\nimport isNormalizedArray from \"./isNormalizedArray\";\n\n/**\n * Iterates an array to check if it's a `pathArray`\n * with all C (cubic bezier) segments.\n *\n * @param path the `Array` to be checked\n * @returns iteration result\n */\nconst isCurveArray = (path: unknown): path is CurveArray => {\n // `isPathArray` also checks if it's `Array`\n return isNormalizedArray(path) && path.every(([pc]) => \"MC\".includes(pc));\n};\nexport default isCurveArray;\n","import type { PathArray } from \"../types\";\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\nimport DISTANCE_EPSILON from \"./distanceEpsilon\";\n\n/**\n * Checks if a given point is in the stroke of a path.\n *\n * @param pathInput target path\n * @param point the given `{x,y}` point\n * @returns the query result\n */\nconst isPointInStroke = (\n pathInput: string | PathArray,\n point: { x: number; y: number },\n) => {\n const { distance } = getPropertiesAtPoint(pathInput, point);\n return Math.abs(distance) < DISTANCE_EPSILON; // 0.01 might be more permissive\n};\nexport default isPointInStroke;\n","import type { RelativeArray } from \"../types\";\nimport isPathArray from \"./isPathArray\";\n\n/**\n * Iterates an array to check if it's a `pathArray`\n * with relative values.\n *\n * @param path the `pathArray` to be checked\n * @returns iteration result\n */\nconst isRelativeArray = (path: unknown): path is RelativeArray => {\n return (\n isPathArray(path) &&\n // `isPathArray` checks if it's `Array`\n path.slice(1).every(([pc]) => pc === pc.toLowerCase())\n );\n};\nexport default isRelativeArray;\n","import scanSegment from \"../parser/scanSegment\";\nimport skipSpaces from \"../parser/skipSpaces\";\nimport PathParser from \"../parser/pathParser\";\n\n/**\n * Parses a path string value to determine its validity\n * then returns true if it's valid or false otherwise.\n *\n * @param pathString the path string to be parsed\n * @returns the path string validity\n */\nconst isValidPath = (pathString: string) => {\n if (typeof pathString !== \"string\" || !pathString.length) {\n return false;\n }\n\n const path = new PathParser(pathString);\n\n skipSpaces(path);\n\n while (path.index < path.max && !path.err.length) {\n scanSegment(path);\n }\n\n return !path.err.length && \"mM\".includes(path.segments[0][0]);\n};\nexport default isValidPath;\n","import type { ShapeParams } from \"../interface\";\n\n/**\n * Supported shapes and their specific parameters.\n */\nconst shapeParams: ShapeParams = {\n line: [\"x1\", \"y1\", \"x2\", \"y2\"],\n circle: [\"cx\", \"cy\", \"r\"],\n ellipse: [\"cx\", \"cy\", \"rx\", \"ry\"],\n rect: [\"width\", \"height\", \"x\", \"y\", \"rx\", \"ry\"],\n polygon: [\"points\"],\n polyline: [\"points\"],\n glyph: [\"d\"],\n};\n\nexport default shapeParams;\n","const isElement = (node?: unknown): node is Element =>\n node !== undefined && node !== null &&\n typeof node === \"object\" &&\n (node as Node).nodeType === 1; // ELEMENT_NODE\n\nexport default isElement;\n","import type {\n CircleAttr,\n EllipseAttr,\n GlyphAttr,\n LineAttr,\n PolyAttr,\n RectAttr,\n ShapeParams,\n} from \"../interface\";\nimport type { PathArray, PathSegment, ShapeOps, ShapeTypes } from \"../types\";\nimport error from \"../parser/error\";\nimport parsePathString from \"../parser/parsePathString\";\nimport shapeParams from \"./shapeParams\";\nimport isPathArray from \"./isPathArray\";\nimport isElement from \"./isElement\";\n\n/**\n * Returns a new `pathArray` from line attributes.\n *\n * @param attr shape configuration\n * @returns a new line `pathArray`\n */\nexport const getLinePath = (attr: LineAttr): PathArray => {\n let { x1, y1, x2, y2 } = attr;\n [x1, y1, x2, y2] = [x1, y1, x2, y2].map((a) => +a);\n return [\n [\"M\", x1, y1],\n [\"L\", x2, y2],\n ];\n};\n\n/**\n * Returns a new `pathArray` like from polyline/polygon attributes.\n *\n * @param attr shape configuration\n * @return a new polygon/polyline `pathArray`\n */\nexport const getPolyPath = (attr: PolyAttr): PathArray => {\n const pathArray = [] as PathSegment[];\n const points = (attr.points || \"\")\n .trim()\n .split(/[\\s|,]/)\n .map((a) => +a);\n\n let index = 0;\n while (index < points.length) {\n pathArray.push([index ? \"L\" : \"M\", points[index], points[index + 1]]);\n index += 2;\n }\n\n return (attr.type === \"polygon\"\n ? [...pathArray, [\"z\"]]\n : pathArray) as PathArray;\n};\n\n/**\n * Returns a new `pathArray` from circle attributes.\n *\n * @param attr shape configuration\n * @return a circle `pathArray`\n */\nexport const getCirclePath = (attr: CircleAttr): PathArray => {\n let { cx, cy, r } = attr;\n [cx, cy, r] = [cx, cy, r].map((a) => +a);\n\n return [\n [\"M\", cx - r, cy],\n [\"a\", r, r, 0, 1, 0, 2 * r, 0],\n [\"a\", r, r, 0, 1, 0, -2 * r, 0],\n ];\n};\n\n/**\n * Returns a new `pathArray` from ellipse attributes.\n *\n * @param attr shape configuration\n * @return an ellipse `pathArray`\n */\nexport const getEllipsePath = (attr: EllipseAttr): PathArray => {\n let { cx, cy } = attr;\n let rx = attr.rx || 0;\n let ry = attr.ry || rx;\n [cx, cy, rx, ry] = [cx, cy, rx, ry].map((a) => +a);\n\n return [\n [\"M\", cx - rx, cy],\n [\"a\", rx, ry, 0, 1, 0, 2 * rx, 0],\n [\"a\", rx, ry, 0, 1, 0, -2 * rx, 0],\n ];\n};\n\n/**\n * Returns a new `pathArray` like from rect attributes.\n *\n * @param attr object with properties above\n * @return a new `pathArray` from `` attributes\n */\nexport const getRectanglePath = (attr: RectAttr): PathArray => {\n const x = +attr.x || 0;\n const y = +attr.y || 0;\n const w = +attr.width;\n const h = +attr.height;\n let rx = +(attr.rx || 0);\n let ry = +(attr.ry || rx);\n\n // Validity checks from http://www.w3.org/TR/SVG/shapes.html#RectElement:\n if (rx || ry) {\n // rx = !rx ? ry : rx;\n // ry = !ry ? rx : ry;\n\n /* istanbul ignore else @preserve */\n if (rx * 2 > w) rx -= (rx * 2 - w) / 2;\n /* istanbul ignore else @preserve */\n if (ry * 2 > h) ry -= (ry * 2 - h) / 2;\n\n return [\n [\"M\", x + rx, y],\n [\"h\", w - rx * 2],\n [\"s\", rx, 0, rx, ry],\n [\"v\", h - ry * 2],\n [\"s\", 0, ry, -rx, ry],\n [\"h\", -w + rx * 2],\n [\"s\", -rx, 0, -rx, -ry],\n [\"v\", -h + ry * 2],\n [\"s\", 0, -ry, rx, -ry],\n ];\n }\n\n return [[\"M\", x, y], [\"h\", w], [\"v\", h], [\"H\", x], [\"Z\"]];\n};\n\n/**\n * Returns a new `pathArray` created from attributes of a ``, ``,\n * ``, ``, ``, ``, or ``.\n *\n * It can also work with an options object, see the type below\n * @see ShapeOps\n *\n * @param element target shape\n * @return the newly created `` element\n */\nconst shapeToPathArray = (\n element: ShapeTypes | ShapeOps,\n) => {\n const supportedShapes = Object.keys(shapeParams) as (keyof ShapeParams)[];\n const targetIsElement = isElement(element);\n const tagName = targetIsElement ? element.tagName : null;\n\n if (tagName && [...supportedShapes, \"path\"].every((s) => tagName !== s)) {\n throw TypeError(`${error}: \"${tagName}\" is not SVGElement`);\n }\n\n const type =\n (targetIsElement ? tagName : (element as ShapeOps).type) as ShapeOps[\n \"type\"\n ];\n const shapeAttrs = shapeParams[type] as string[];\n const config = { type } as Record;\n\n if (targetIsElement) {\n shapeAttrs.forEach((p) => {\n config[p] = element.getAttribute(p) as string;\n });\n } else {\n Object.assign(config, element);\n }\n\n // set d\n let pathArray = [] as unknown as PathArray;\n\n /* istanbul ignore else */\n if (type === \"circle\") {\n pathArray = getCirclePath(config as unknown as CircleAttr);\n } else if (type === \"ellipse\") {\n pathArray = getEllipsePath(config as unknown as EllipseAttr);\n } else if ([\"polyline\", \"polygon\"].includes(type)) {\n pathArray = getPolyPath(config as unknown as PolyAttr);\n } else if (type === \"rect\") {\n pathArray = getRectanglePath(config as unknown as RectAttr);\n } else if (type === \"line\") {\n pathArray = getLinePath(config as unknown as LineAttr);\n } else if ([\"glyph\", \"path\"].includes(type)) {\n pathArray = parsePathString(\n targetIsElement\n ? element.getAttribute(\"d\") || /* istanbul ignore next @preserve */ \"\"\n : (element as GlyphAttr).d || \"\",\n );\n }\n\n // replace target element\n if (isPathArray(pathArray) && pathArray.length) {\n return pathArray;\n }\n return false;\n};\nexport default shapeToPathArray;\n","import type { ShapeParams } from \"../interface\";\nimport type { ShapeOps, ShapeTypes } from \"../types\";\nimport pathToString from \"../convert/pathToString\";\nimport defaultOptions from \"../options/options\";\nimport error from \"../parser/error\";\nimport isValidPath from \"./isValidPath\";\nimport isElement from \"./isElement\";\nimport shapeToPathArray from \"./shapeToPathArray\";\nimport shapeParams from \"./shapeParams\";\n\n/**\n * Returns a new `` element created from attributes of a ``, ``,\n * ``, ``, ``, `` or ``. If `replace` parameter\n * is `true`, it will replace the target. The default `ownerDocument` is your current\n * `document` browser page, if you want to use in server-side using `jsdom`, you can\n * pass the `jsdom` `document` to `ownDocument`.\n *\n * It can also work with an options object, see the type below\n * @see ShapeOps\n *\n * The newly created `` element keeps all non-specific\n * attributes like `class`, `fill`, etc.\n *\n * @param element target shape\n * @param replace option to replace target\n * @param ownerDocument document for create element\n * @return the newly created `` element\n */\nconst shapeToPath = (\n element: ShapeTypes | ShapeOps,\n replace?: boolean,\n ownerDocument?: Document,\n): SVGPathElement | false => {\n const doc = ownerDocument || document;\n const supportedShapes = Object.keys(shapeParams) as (keyof ShapeParams)[];\n const targetIsElement = isElement(element);\n const tagName = targetIsElement ? element.tagName : null;\n\n if (tagName === \"path\") {\n throw TypeError(`${error}: \"${tagName}\" is already SVGPathElement`);\n }\n if (tagName && supportedShapes.every((s) => tagName !== s)) {\n throw TypeError(`${error}: \"${tagName}\" is not SVGElement`);\n }\n\n const path = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n const type =\n (targetIsElement ? tagName : (element as ShapeOps).type) as ShapeOps[\n \"type\"\n ];\n const shapeAttrs = shapeParams[type] as string[];\n const config = { type } as Record;\n\n // set d\n const round = defaultOptions.round as number;\n const pathArray = shapeToPathArray(element);\n const description = pathArray && pathArray.length\n ? pathToString(pathArray, round)\n : \"\";\n\n if (targetIsElement) {\n shapeAttrs.forEach((p) => {\n config[p] = element.getAttribute(p) as string;\n });\n // set no-specific shape attributes: fill, stroke, etc\n Object.values(element.attributes).forEach(({ name, value }) => {\n if (!shapeAttrs.includes(name)) path.setAttribute(name, value);\n });\n } else {\n Object.assign(config, element);\n // set no-specific shape attributes: fill, stroke, etc\n Object.keys(config).forEach((k) => {\n if (!shapeAttrs.includes(k) && k !== \"type\") {\n path.setAttribute(\n k.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`),\n config[k],\n );\n }\n });\n }\n\n // replace target element\n if (isValidPath(description)) {\n path.setAttribute(\"d\", description);\n if (replace && targetIsElement) {\n element.before(path, element);\n element.remove();\n }\n return path;\n }\n return false;\n};\n\nexport default shapeToPath;\n","import CSSMatrix from \"@thednp/dommatrix\";\n// import type { TransformObject } from '../interface';\nimport type { TransformObjectValues } from \"../types\";\n\n/**\n * Returns a transformation matrix to apply to `` elements.\n *\n * @see TransformObjectValues\n *\n * @param transform the `transformObject`\n * @returns a new transformation matrix\n */\nconst getSVGMatrix = (transform: TransformObjectValues): CSSMatrix => {\n let matrix = new CSSMatrix();\n const { origin } = transform;\n const [originX, originY] = origin as [number, number, number];\n const { translate } = transform;\n const { rotate } = transform;\n const { skew } = transform;\n const { scale } = transform;\n\n // set translate\n if (\n Array.isArray(translate) &&\n translate.length >= 2 &&\n translate.every((x) => !Number.isNaN(+x)) &&\n translate.some((x) => x !== 0)\n ) {\n matrix = matrix.translate(...(translate as [number, number, number?]));\n } else if (typeof translate === \"number\" && !Number.isNaN(translate)) {\n matrix = matrix.translate(translate);\n }\n\n if (rotate || skew || scale) {\n // set SVG transform-origin, always defined\n matrix = matrix.translate(originX, originY);\n\n // set rotation\n if (\n Array.isArray(rotate) &&\n rotate.length >= 2 &&\n rotate.every((x) => !Number.isNaN(+x)) &&\n rotate.some((x) => x !== 0)\n ) {\n matrix = matrix.rotate(...(rotate as [number, number, number?]));\n } else if (typeof rotate === \"number\" && !Number.isNaN(rotate)) {\n matrix = matrix.rotate(rotate);\n }\n\n // set skew(s)\n if (\n Array.isArray(skew) && skew.length === 2 && skew.every((x) =>\n !Number.isNaN(+x)\n ) && skew.some((x) => x !== 0)\n ) {\n matrix = skew[0] ? matrix.skewX(skew[0]) : matrix;\n matrix = skew[1] ? matrix.skewY(skew[1]) : matrix;\n } else if (typeof skew === \"number\" && !Number.isNaN(skew)) {\n matrix = matrix.skewX(skew);\n }\n\n // set scale\n if (\n Array.isArray(scale) && scale.length >= 2 && scale.every((x) =>\n !Number.isNaN(+x)\n ) && scale.some((x) => x !== 1)\n ) {\n matrix = matrix.scale(...(scale as [number, number, number?]));\n } else if (typeof scale === \"number\" && !Number.isNaN(scale)) {\n matrix = matrix.scale(scale);\n }\n // set SVG transform-origin\n matrix = matrix.translate(-originX, -originY);\n }\n\n return matrix;\n};\nexport default getSVGMatrix;\n","import defaultOptions from \"../options/options\";\nimport type { ParserParams } from \"../interface\";\nimport roundTo from \"../math/roundTo\";\nimport type {\n AbsoluteSegment,\n NormalSegment,\n PathCommand,\n ShortSegment,\n SSegment,\n TSegment,\n} from \"../types\";\n\n/**\n * Shorten a single segment of a `pathArray` object.\n *\n * @param segment the `absoluteSegment` object\n * @param normalSegment the `normalSegment` object\n * @param params the coordinates of the previous segment\n * @param prevCommand the path command of the previous segment\n * @returns the shortened segment\n */\nconst shortenSegment = (\n segment: AbsoluteSegment,\n normalSegment: NormalSegment,\n params: ParserParams,\n prevCommand: PathCommand,\n): ShortSegment => {\n const [pathCommand] = segment;\n const { round: defaultRound } = defaultOptions;\n const round = typeof defaultRound === \"number\"\n ? defaultRound\n : /* istanbul ignore next */ 4;\n const normalValues = normalSegment.slice(1) as number[];\n const { x1, y1, x2, y2, x, y } = params;\n const [nx, ny] = normalValues.slice(-2);\n const result = segment;\n\n if (!\"TQ\".includes(pathCommand)) {\n // optional but good to be cautious\n params.qx = null;\n params.qy = null;\n }\n\n if (pathCommand === \"L\") {\n if (roundTo(x, round) === roundTo(nx, round)) {\n return [\"V\", ny];\n } else if (roundTo(y, round) === roundTo(ny, round)) {\n return [\"H\", nx];\n }\n } else if (pathCommand === \"C\") {\n const [nx1, ny1] = normalValues;\n params.x1 = nx1;\n params.y1 = ny1;\n\n if (\n \"CS\".includes(prevCommand) &&\n ((roundTo(nx1, round) === roundTo(x1 * 2 - x2, round) &&\n roundTo(ny1, round) === roundTo(y1 * 2 - y2, round)) ||\n (roundTo(x1, round) === roundTo(x2 * 2 - x, round) &&\n roundTo(y1, round) === roundTo(y2 * 2 - y, round)))\n ) {\n return [\n \"S\",\n normalValues[2],\n normalValues[3],\n normalValues[4],\n normalValues[5],\n ] as SSegment;\n }\n } else if (pathCommand === \"Q\") {\n const [qx, qy] = normalValues;\n params.qx = qx;\n params.qy = qy;\n\n if (\n \"QT\".includes(prevCommand) &&\n roundTo(qx, round) === roundTo(x1 * 2 - x2, round) &&\n roundTo(qy, round) === roundTo(y1 * 2 - y2, round)\n ) {\n return [\"T\", normalValues[2], normalValues[3]] as TSegment;\n }\n }\n\n // ['V', 'H', 'S', 'T', 'Z'].includes(pathCommand)\n return result as ShortSegment;\n};\n\nexport default shortenSegment;\n","import type { PathCommand, PathSegment } from \"../types\";\nimport roundTo from \"../math/roundTo\";\n\nconst roundSegment = (\n segment: T,\n roundOption: number,\n) => {\n const values = (segment.slice(1) as number[]).map((n) =>\n roundTo(n, roundOption)\n );\n return [segment[0] as PathCommand | number].concat(values) as T;\n};\n\nexport default roundSegment;\n","import type { AbsoluteSegment, PathArray, PathCommand } from \"../types\";\nimport pathToAbsolute from \"../convert/pathToAbsolute\";\nimport shortenSegment from \"./shortenSegment\";\nimport paramsParser from \"../parser/paramsParser\";\nimport iterate from \"./iterate\";\nimport normalizeSegment from \"./normalizeSegment\";\nimport relativizeSegment from \"./relativizeSegment\";\nimport roundSegment from \"./roundSegment\";\n\n/**\n * Optimizes a `pathArray` object:\n * * convert segments to shorthand if possible\n * * select shortest segments from absolute and relative `pathArray`s\n *\n * @param pathInput a string or `pathArray`\n * @param roundOption the amount of decimals to round values to\n * @returns the optimized `pathArray`\n */\nconst optimizePath = (pathInput: PathArray, roundOption?: number) => {\n const path = pathToAbsolute(pathInput);\n // allow for ZERO decimals or use an aggressive value of 2\n const round = typeof roundOption === \"number\" && roundOption >= 0\n ? roundOption\n : /* istanbul ignore next @preserve */ 2;\n // this utility overrides the iterator params\n const optimParams = { ...paramsParser };\n\n const allPathCommands = [] as PathCommand[];\n let pathCommand = \"M\" as PathCommand;\n let prevCommand = \"Z\" as PathCommand;\n\n return iterate(path, (seg, i, lastX, lastY) => {\n optimParams.x = lastX;\n optimParams.y = lastY;\n const normalizedSegment = normalizeSegment(seg, optimParams);\n let result = seg;\n [pathCommand] = seg;\n\n // Save current path command\n allPathCommands[i] = pathCommand;\n if (i) {\n // Get previous path command for `shortenSegment`\n prevCommand = allPathCommands[i - 1];\n const shortSegment = shortenSegment(\n seg as AbsoluteSegment,\n normalizedSegment,\n optimParams,\n prevCommand,\n );\n const absSegment = roundSegment(shortSegment, round);\n const absString = absSegment.join(\"\");\n const relativeSegment = relativizeSegment(shortSegment, i, lastX, lastY);\n const relSegment = roundSegment(relativeSegment, round);\n const relString = relSegment.join(\"\");\n result = absString.length < relString.length ? absSegment : relSegment;\n }\n\n const seglen = normalizedSegment.length;\n optimParams.x1 = +normalizedSegment[seglen - 2];\n optimParams.y1 = +normalizedSegment[seglen - 1];\n optimParams.x2 = +normalizedSegment[seglen - 4] || optimParams.x1;\n optimParams.y2 = +normalizedSegment[seglen - 3] || optimParams.y1;\n\n return result;\n });\n};\n\nexport default optimizePath;\n","import CSSMatrix from \"@thednp/dommatrix\";\nimport { type PointTuple } from \"../types\";\n\n/**\n * Transforms a specified point using a matrix, returning a new\n * Tuple *Object* comprising of the transformed point.\n * Neither the matrix nor the original point are altered.\n *\n * @copyright thednp © 2021\n *\n * @param cssm CSSMatrix instance\n * @param v Tuple\n * @return the resulting Tuple\n */\nconst translatePoint = (\n cssm: CSSMatrix,\n v: [number, number, number, number],\n): [number, number, number, number] => {\n let m = CSSMatrix.Translate(v[0], v[1], v[2]);\n\n [, , , m.m44] = v;\n m = cssm.multiply(m);\n\n return [m.m41, m.m42, m.m43, m.m44];\n};\n\n/**\n * Returns the [x,y] projected coordinates for a given an [x,y] point\n * and an [x,y,z] perspective origin point.\n *\n * Equation found here =>\n * http://en.wikipedia.org/wiki/3D_projection#Diagram\n * Details =>\n * https://stackoverflow.com/questions/23792505/predicted-rendering-of-css-3d-transformed-pixel\n *\n * @param m the transformation matrix\n * @param point2D the initial [x,y] coordinates\n * @param origin the [x,y,z] transform origin\n * @returns the projected [x,y] coordinates\n */\nconst projection2d = (\n m: CSSMatrix,\n point2D: PointTuple,\n origin: [number, number, number],\n): PointTuple => {\n const [originX, originY, originZ] = origin;\n const [x, y, z] = translatePoint(m, [point2D[0], point2D[1], 0, 1]);\n\n const relativePositionX = x - originX;\n const relativePositionY = y - originY;\n const relativePositionZ = z - originZ;\n\n return [\n // protect against division by ZERO\n relativePositionX * (Math.abs(originZ) / Math.abs(relativePositionZ) || 1) +\n originX,\n relativePositionY * (Math.abs(originZ) / Math.abs(relativePositionZ) || 1) +\n originY,\n ];\n};\nexport default projection2d;\n","import type { CSegment, CurveArray, MSegment, PathCommand } from \"../types\";\n\n/**\n * Reverses all segments of a `pathArray`\n * which consists of only C (cubic-bezier) path commands.\n *\n * @param path the source `pathArray`\n * @returns the reversed `pathArray`\n */\nconst reverseCurve = (path: CurveArray) => {\n const rotatedCurve = path\n .slice(1)\n .map((x, i, curveOnly) =>\n !i\n ? path[0].slice(1).concat(x.slice(1) as number[])\n : curveOnly[i - 1].slice(-2).concat(x.slice(1))\n )\n .map((x) => x.map((_, i) => x[x.length - i - 2 * (1 - (i % 2))]))\n .reverse() as (MSegment | CSegment)[];\n\n return [[\"M\" as PathCommand | number].concat(rotatedCurve[0].slice(0, 2))]\n .concat(\n rotatedCurve.map((x) => [\"C\" as PathCommand | number].concat(x.slice(2))),\n ) as CurveArray;\n};\n\nexport default reverseCurve;\n","import type {\n ASegment,\n CSegment,\n HSegment,\n MSegment,\n PathArray,\n PathSegment,\n PointTuple,\n QSegment,\n SSegment,\n TSegment,\n VSegment,\n} from \"../types\";\nimport pathToAbsolute from \"../convert/pathToAbsolute\";\nimport normalizePath from \"./normalizePath\";\nimport iterate from \"./iterate\";\n\n/**\n * Reverses all segments of a `pathArray` and returns a new `pathArray` instance\n * with absolute values.\n *\n * @param pathInput the source `pathArray`\n * @returns the reversed `pathArray`\n */\nconst reversePath = (pathInput: PathArray) => {\n const absolutePath = pathToAbsolute(pathInput);\n const normalizedPath = normalizePath(absolutePath);\n const pLen = absolutePath.length;\n const isClosed = absolutePath[pLen - 1][0] === \"Z\";\n\n const reversedPath = iterate(absolutePath, (segment, i) => {\n const normalizedSegment = normalizedPath[i];\n const prevSeg = i && absolutePath[i - 1];\n const prevCommand = prevSeg && prevSeg[0];\n const nextSeg = absolutePath[i + 1];\n const nextCommand = nextSeg && nextSeg[0];\n const [pathCommand] = segment;\n const [x, y] = normalizedPath[i ? i - 1 : pLen - 1].slice(-2) as PointTuple;\n let result = segment;\n\n switch (pathCommand) {\n case \"M\":\n result = (isClosed ? [\"Z\"] : [pathCommand, x, y]) as PathSegment;\n break;\n case \"A\":\n result = [\n pathCommand,\n segment[1],\n segment[2],\n segment[3],\n segment[4],\n segment[5] === 1 ? 0 : 1,\n x,\n y,\n ] as ASegment;\n break;\n case \"C\":\n if (nextSeg && nextCommand === \"S\") {\n result = [\"S\", segment[1], segment[2], x, y] as SSegment;\n } else {\n result = [\n pathCommand,\n segment[3],\n segment[4],\n segment[1],\n segment[2],\n x,\n y,\n ] as CSegment;\n }\n break;\n case \"S\":\n if (\n prevCommand && \"CS\".includes(prevCommand) &&\n (!nextSeg || nextCommand !== \"S\")\n ) {\n result = [\n \"C\",\n normalizedSegment[3],\n normalizedSegment[4],\n normalizedSegment[1],\n normalizedSegment[2],\n x,\n y,\n ] as CSegment;\n } else {\n result = [\n pathCommand,\n normalizedSegment[1],\n normalizedSegment[2],\n x,\n y,\n ] as SSegment;\n }\n break;\n case \"Q\":\n if (nextSeg && nextCommand === \"T\") {\n result = [\"T\", x, y] as TSegment;\n } else {\n result = [pathCommand, segment[1], segment[2], x, y] as QSegment;\n }\n break;\n case \"T\":\n if (\n prevCommand && \"QT\".includes(prevCommand) &&\n (!nextSeg || nextCommand !== \"T\")\n ) {\n result = [\n \"Q\",\n normalizedSegment[1],\n normalizedSegment[2],\n x,\n y,\n ] as QSegment;\n } else {\n result = [pathCommand, x, y] as TSegment;\n }\n break;\n case \"Z\":\n result = [\"M\", x, y] as MSegment;\n break;\n case \"H\":\n result = [pathCommand, x] as HSegment;\n break;\n case \"V\":\n result = [pathCommand, y] as VSegment;\n break;\n default:\n result = [pathCommand as typeof pathCommand | number].concat(\n segment.slice(1, -2),\n x,\n y,\n ) as PathSegment;\n }\n\n return result;\n });\n\n return (\n isClosed\n ? reversedPath.reverse()\n : [reversedPath[0] as PathSegment].concat(reversedPath.slice(1).reverse())\n ) as PathArray;\n};\n\nexport default reversePath;\n","import type { PathArray } from \"../types\";\nimport defaultOptions from \"../options/options\";\nimport iterate from \"./iterate\";\nimport roundSegment from \"./roundSegment\";\n\n/**\n * Rounds the values of a `pathArray` instance to\n * a specified amount of decimals and returns it.\n *\n * @param path the source `pathArray`\n * @param roundOption the amount of decimals to round numbers to\n * @returns the resulted `pathArray` with rounded values\n */\nconst roundPath = (path: PathArray, roundOption?: number | \"off\") => {\n let { round } = defaultOptions;\n // allow for ZERO decimals\n round = roundOption === \"off\"\n ? roundOption\n : typeof roundOption === \"number\" && roundOption >= 0\n ? roundOption\n : typeof round === \"number\" && round >= 0\n ? round\n : /* istanbul ignore next @preserve */ \"off\";\n\n /* istanbul ignore else @preserve */\n if (round === \"off\") return path.slice(0) as PathArray;\n\n return iterate(path, (segment) => {\n return roundSegment(segment, round);\n });\n};\nexport default roundPath;\n","import midPoint from \"../math/midPoint\";\nimport type { CubicSegment, PointTuple } from \"../types\";\n\n/**\n * Split a cubic-bezier segment into two.\n *\n * @param pts the cubic-bezier parameters\n * @param ratio the cubic-bezier parameters\n * @return two new cubic-bezier segments\n */\nconst splitCubic = (\n pts: number[],\n ratio = 0.5,\n): [CubicSegment, CubicSegment] => {\n const t = ratio;\n const p0 = pts.slice(0, 2) as PointTuple;\n const p1 = pts.slice(2, 4) as PointTuple;\n const p2 = pts.slice(4, 6) as PointTuple;\n const p3 = pts.slice(6, 8) as PointTuple;\n const p4 = midPoint(p0, p1, t);\n const p5 = midPoint(p1, p2, t);\n const p6 = midPoint(p2, p3, t);\n const p7 = midPoint(p4, p5, t);\n const p8 = midPoint(p5, p6, t);\n const p9 = midPoint(p7, p8, t);\n\n return [\n [\"C\", p4[0], p4[1], p7[0], p7[1], p9[0], p9[1]],\n [\"C\", p8[0], p8[1], p6[0], p6[1], p3[0], p3[1]],\n ];\n};\nexport default splitCubic;\n","import paramsParser from \"../parser/paramsParser\";\nimport type {\n AbsoluteCommand,\n HSegment,\n MSegment,\n PathArray,\n PointTuple,\n RelativeCommand,\n VSegment,\n} from \"../types\";\n\n/**\n * Split a path into an `Array` of sub-path strings.\n *\n * In the process, values are converted to absolute\n * for visual consistency.\n *\n * @param pathInput the source `pathArray`\n * @return an array with all sub-path strings\n */\nconst splitPath = (pathInput: PathArray): PathArray[] => {\n const composite = [] as PathArray[];\n let path: PathArray;\n let pi = -1;\n let x = 0;\n let y = 0;\n let mx = 0;\n let my = 0;\n const params = { ...paramsParser };\n\n pathInput.forEach((seg) => {\n const [pathCommand] = seg;\n const absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\n const relCommand = pathCommand.toLowerCase() as RelativeCommand;\n const isRelative = pathCommand === relCommand;\n const values = seg.slice(1) as number[];\n\n if (absCommand === \"M\") {\n pi += 1;\n [x, y] = values as PointTuple;\n x += isRelative ? params.x : 0;\n y += isRelative ? params.y : 0;\n mx = x;\n my = y;\n path = [(isRelative ? [absCommand, mx, my] : seg) as MSegment];\n } else {\n if (absCommand === \"Z\") {\n x = mx;\n y = my;\n } else if (absCommand === \"H\") {\n [, x] = seg as HSegment;\n x += isRelative ? params.x : /* istanbul ignore next @preserve */ 0;\n } else if (absCommand === \"V\") {\n [, y] = seg as VSegment;\n y += isRelative ? params.y : /* istanbul ignore next @preserve */ 0;\n } else {\n [x, y] = seg.slice(-2) as PointTuple;\n x += isRelative ? params.x : 0;\n y += isRelative ? params.y : 0;\n }\n path.push(seg);\n }\n\n params.x = x;\n params.y = y;\n composite[pi] = path;\n });\n\n return composite;\n};\nexport default splitPath;\n","import getSVGMatrix from \"./getSVGMatrix\";\nimport projection2d from \"./projection2d\";\nimport defaultOptions from \"../options/options\";\nimport type {\n AbsoluteArray,\n AbsoluteSegment,\n CSegment,\n LSegment,\n PathArray,\n TransformObjectValues,\n} from \"../types\";\nimport type { TransformObject } from \"../interface\";\nimport iterate from \"./iterate\";\nimport parsePathString from \"../parser/parsePathString\";\nimport absolutizeSegment from \"./absolutizeSegment\";\nimport arcToCubic from \"./arcToCubic\";\n\n/**\n * Apply a 2D / 3D transformation to a `pathArray` instance.\n *\n * Since *SVGElement* doesn't support 3D transformation, this function\n * creates a 2D projection of the element.\n *\n * @param path the `pathArray` to apply transformation\n * @param transform the transform functions `Object`\n * @returns the resulted `pathArray`\n */\nconst transformPath = (\n pathInput: PathArray | string,\n transform?: Partial,\n) => {\n // last x and y transformed values\n let x = 0;\n let y = 0;\n // new x and y transformed\n let lx = 0;\n let ly = 0;\n // segment params iteration index and length\n let j = 0;\n let jj = 0;\n let pathCommand = \"M\";\n // transform uses it's own set of params\n const path = parsePathString(pathInput);\n const transformProps = transform && Object.keys(transform);\n\n // when used as a static method, invalidate somehow\n if (!transform || (transformProps && !transformProps.length)) {\n return path.slice(0) as typeof path;\n }\n\n // transform origin is extremely important\n if (!transform.origin) {\n Object.assign(transform, { origin: defaultOptions.origin });\n }\n const origin = transform.origin as [number, number, number];\n const matrixInstance = getSVGMatrix(transform as TransformObjectValues);\n\n if (matrixInstance.isIdentity) return path.slice(0) as typeof path;\n\n return iterate(path, (seg, index, lastX, lastY) => {\n [pathCommand] = seg;\n const absCommand = pathCommand.toUpperCase();\n const isRelative = absCommand !== pathCommand;\n const absoluteSegment = isRelative\n ? absolutizeSegment(seg, index, lastX, lastY)\n : (seg.slice(0) as AbsoluteSegment);\n\n let result = absCommand === \"A\"\n // ? segmentToCubic(absoluteSegment, transformParams)\n ? ([\"C\" as string | number].concat(\n arcToCubic(\n lastX,\n lastY,\n absoluteSegment[1] as number,\n absoluteSegment[2] as number,\n absoluteSegment[3] as number,\n absoluteSegment[4] as number,\n absoluteSegment[5] as number,\n absoluteSegment[6] as number,\n absoluteSegment[7] as number,\n ),\n ) as CSegment)\n : absCommand === \"V\"\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\n : absCommand === \"H\"\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\n : absoluteSegment;\n\n // update pathCommand\n pathCommand = result[0];\n const isLongArc = pathCommand === \"C\" && result.length > 7;\n const tempSegment =\n (isLongArc ? result.slice(0, 7) : result.slice(0)) as AbsoluteSegment;\n\n if (isLongArc) {\n path.splice(\n index + 1,\n 0,\n [\"C\" as typeof pathCommand | number].concat(\n result.slice(7),\n ) as CSegment,\n );\n result = tempSegment as CSegment;\n }\n\n if (pathCommand === \"L\") {\n [lx, ly] = projection2d(matrixInstance, [\n (result as LSegment)[1],\n (result as LSegment)[2],\n ], origin);\n\n /* istanbul ignore else @preserve */\n if (x !== lx && y !== ly) {\n result = [\"L\", lx, ly];\n } else if (y === ly) {\n result = [\"H\", lx];\n } else if (x === lx) {\n result = [\"V\", ly];\n }\n } else {\n for (j = 1, jj = result.length; j < jj; j += 2) {\n [lx, ly] = projection2d(\n matrixInstance,\n [+result[j], +result[j + 1]],\n origin,\n );\n result[j] = lx;\n result[j + 1] = ly;\n }\n }\n // now update x and y\n x = lx;\n y = ly;\n\n return result;\n });\n};\n\nexport default transformPath;\n","\"use strict\";\nimport CSSMatrix from \"@thednp/dommatrix\";\nimport { PathArray, PointTuple, TransformObjectValues } from \"./types\";\nimport type { Options, TransformEntries, TransformObject } from \"./interface\";\nexport * from \"./types\";\nexport * from \"./interface\";\nimport defaultOptions from \"./options/options\";\n\nimport pathToAbsolute from \"./convert/pathToAbsolute\";\nimport pathToRelative from \"./convert/pathToRelative\";\nimport pathToCurve from \"./convert/pathToCurve\";\nimport pathToString from \"./convert/pathToString\";\nimport * as arcTools from \"./math/arcTools\";\nimport {\n bezierLength,\n calculateBezier,\n CBEZIER_MINMAX_EPSILON,\n computeBezier,\n Cvalues,\n deriveBezier,\n getBezierLength,\n minmaxC,\n minmaxQ,\n Tvalues,\n} from \"./math/bezier\";\nimport {\n getCubicBBox,\n getCubicLength,\n getPointAtCubicLength,\n getPointAtCubicSegmentLength,\n} from \"./math/cubicTools\";\nimport {\n getLineBBox,\n getLineLength,\n getPointAtLineLength,\n} from \"./math/lineTools\";\nimport {\n getPointAtQuadLength,\n getPointAtQuadSegmentLength,\n getQuadBBox,\n getQuadLength,\n} from \"./math/quadTools\";\nimport { polygonArea, polygonLength } from \"./math/polygonTools\";\n\nimport distanceSquareRoot from \"./math/distanceSquareRoot\";\nimport midPoint from \"./math/midPoint\";\nimport rotateVector from \"./math/rotateVector\";\nimport roundTo from \"./math/roundTo\";\n\nimport error from \"./parser/error\";\nimport parsePathString from \"./parser/parsePathString\";\nimport finalizeSegment from \"./parser/finalizeSegment\";\nimport invalidPathValue from \"./parser/invalidPathValue\";\nimport isArcCommand from \"./parser/isArcCommand\";\nimport isDigit from \"./parser/isDigit\";\nimport isDigitStart from \"./parser/isDigitStart\";\nimport isMoveCommand from \"./parser/isMoveCommand\";\nimport isPathCommand from \"./parser/isPathCommand\";\nimport isSpace from \"./parser/isSpace\";\nimport paramsCount from \"./parser/paramsCount\";\nimport paramsParser from \"./parser/paramsParser\";\nimport pathParser from \"./parser/pathParser\";\nimport scanFlag from \"./parser/scanFlag\";\nimport scanParam from \"./parser/scanParam\";\nimport scanSegment from \"./parser/scanSegment\";\nimport skipSpaces from \"./parser/skipSpaces\";\n\nimport distanceEpsilon from \"./util/distanceEpsilon\";\nimport getClosestPoint from \"./util/getClosestPoint\";\nimport getDrawDirection from \"./util/getDrawDirection\";\nimport getPathArea from \"./util/getPathArea\";\nimport getPathBBox from \"./util/getPathBBox\";\nimport getPointAtLength from \"./util/getPointAtLength\";\nimport getPropertiesAtLength from \"./util/getPropertiesAtLength\";\nimport getPropertiesAtPoint from \"./util/getPropertiesAtPoint\";\nimport getSegmentAtLength from \"./util/getSegmentAtLength\";\nimport getSegmentOfPoint from \"./util/getSegmentOfPoint\";\nimport getTotalLength from \"./util/getTotalLength\";\n\nimport isAbsoluteArray from \"./util/isAbsoluteArray\";\nimport isCurveArray from \"./util/isCurveArray\";\nimport isNormalizedArray from \"./util/isNormalizedArray\";\nimport isPathArray from \"./util/isPathArray\";\nimport isPointInStroke from \"./util/isPointInStroke\";\nimport isRelativeArray from \"./util/isRelativeArray\";\nimport isValidPath from \"./util/isValidPath\";\nimport shapeParams from \"./util/shapeParams\";\nimport shapeToPath from \"./util/shapeToPath\";\nimport shapeToPathArray from \"./util/shapeToPathArray\";\n\nimport absolutizeSegment from \"./process/absolutizeSegment\";\nimport arcToCubic from \"./process/arcToCubic\";\nimport getSVGMatrix from \"./process/getSVGMatrix\";\nimport iterate from \"./process/iterate\";\nimport lineToCubic from \"./process/lineToCubic\";\nimport normalizePath from \"./process/normalizePath\";\nimport normalizeSegment from \"./process/normalizeSegment\";\nimport optimizePath from \"./process/optimizePath\";\nimport projection2d from \"./process/projection2d\";\nimport quadToCubic from \"./process/quadToCubic\";\nimport relativizeSegment from \"./process/relativizeSegment\";\nimport reverseCurve from \"./process/reverseCurve\";\nimport reversePath from \"./process/reversePath\";\nimport roundPath from \"./process/roundPath\";\nimport roundSegment from \"./process/roundSegment\";\nimport segmentToCubic from \"./process/segmentToCubic\";\nimport shortenSegment from \"./process/shortenSegment\";\nimport splitCubic from \"./process/splitCubic\";\nimport splitPath from \"./process/splitPath\";\nimport transformPath from \"./process/transformPath\";\n\n/**\n * Creates a new SVGPathCommander instance with the following properties:\n * * segments: `pathArray`\n * * round: number\n * * origin: [number, number, number?]\n *\n * @class\n * @author thednp \n * @returns a new SVGPathCommander instance\n */\nclass SVGPathCommander {\n public static CSSMatrix = CSSMatrix;\n public static pathToAbsolute = pathToAbsolute;\n public static pathToRelative = pathToRelative;\n public static pathToCurve = pathToCurve;\n public static pathToString = pathToString;\n public static arcTools = arcTools;\n public static bezierTools = {\n Cvalues,\n Tvalues,\n minmaxC,\n minmaxQ,\n getBezierLength,\n bezierLength,\n calculateBezier,\n computeBezier,\n deriveBezier,\n CBEZIER_MINMAX_EPSILON,\n };\n public static cubicTools = {\n getCubicLength,\n getCubicBBox,\n getPointAtCubicLength,\n getPointAtCubicSegmentLength,\n };\n public static lineTools = {\n getPointAtLineLength,\n getLineBBox,\n getLineLength,\n };\n public static quadTools = {\n getPointAtQuadSegmentLength,\n getQuadLength,\n getQuadBBox,\n getPointAtQuadLength,\n };\n public static polygonTools = { polygonArea, polygonLength };\n public static distanceSquareRoot = distanceSquareRoot;\n public static distanceEpsilon = distanceEpsilon;\n public static midPoint = midPoint;\n public static rotateVector = rotateVector;\n public static roundTo = roundTo;\n public static finalizeSegment = finalizeSegment;\n public static invalidPathValue = invalidPathValue;\n public static isArcCommand = isArcCommand;\n public static isDigit = isDigit;\n public static isDigitStart = isDigitStart;\n public static isMoveCommand = isMoveCommand;\n public static isPathCommand = isPathCommand;\n public static isSpace = isSpace;\n public static paramsCount = paramsCount;\n public static paramsParser = paramsParser;\n public static pathParser = pathParser;\n public static scanFlag = scanFlag;\n public static scanParam = scanParam;\n public static scanSegment = scanSegment;\n public static skipSpaces = skipSpaces;\n public static getPathBBox = getPathBBox;\n public static getPathArea = getPathArea;\n public static getTotalLength = getTotalLength;\n public static getDrawDirection = getDrawDirection;\n public static getPointAtLength = getPointAtLength;\n public static getPropertiesAtLength = getPropertiesAtLength;\n public static getPropertiesAtPoint = getPropertiesAtPoint;\n public static getClosestPoint = getClosestPoint;\n public static getSegmentOfPoint = getSegmentOfPoint;\n public static getSegmentAtLength = getSegmentAtLength;\n public static isPointInStroke = isPointInStroke;\n public static isValidPath = isValidPath;\n public static isPathArray = isPathArray;\n public static isAbsoluteArray = isAbsoluteArray;\n public static isRelativeArray = isRelativeArray;\n public static isCurveArray = isCurveArray;\n public static isNormalizedArray = isNormalizedArray;\n public static shapeToPath = shapeToPath;\n public static shapeToPathArray = shapeToPathArray;\n public static shapeParams = shapeParams;\n public static parsePathString = parsePathString;\n public static absolutizeSegment = absolutizeSegment;\n public static arcToCubic = arcToCubic;\n public static getSVGMatrix = getSVGMatrix;\n public static iterate = iterate;\n public static lineToCubic = lineToCubic;\n public static normalizePath = normalizePath;\n public static normalizeSegment = normalizeSegment;\n public static optimizePath = optimizePath;\n public static projection2d = projection2d;\n public static quadToCubic = quadToCubic;\n public static relativizeSegment = relativizeSegment;\n public static reverseCurve = reverseCurve;\n public static reversePath = reversePath;\n public static roundPath = roundPath;\n public static roundSegment = roundSegment;\n public static segmentToCubic = segmentToCubic;\n public static shortenSegment = shortenSegment;\n public static splitCubic = splitCubic;\n public static splitPath = splitPath;\n public static transformPath = transformPath;\n // declare class properties\n declare segments: PathArray;\n declare round: number | \"off\";\n declare origin: [number, number, number];\n\n /**\n * @constructor\n * @param pathValue the path string\n * @param config instance options\n */\n constructor(pathValue: string, config?: Partial) {\n const instanceOptions = config || {};\n const undefPath = typeof pathValue === \"undefined\";\n\n if (undefPath || !pathValue.length) {\n throw TypeError(\n `${error}: \"pathValue\" is ${undefPath ? \"undefined\" : \"empty\"}`,\n );\n }\n\n this.segments = parsePathString(pathValue);\n\n // // set instance options.round\n const { round: roundOption, origin: originOption } = instanceOptions;\n let round: number | \"off\";\n\n if (Number.isInteger(roundOption) || roundOption === \"off\") {\n round = roundOption as number | \"off\";\n } else {\n round = defaultOptions.round as number;\n }\n\n // set instance options.origin\n // the SVGPathCommander class will always override the default origin\n let origin = defaultOptions.origin as [number, number, number];\n /* istanbul ignore else @preserve */\n if (Array.isArray(originOption) && originOption.length >= 2) {\n const [originX, originY, originZ] = originOption.map(Number);\n origin = [\n !Number.isNaN(originX) ? originX : 0,\n !Number.isNaN(originY) ? originY : 0,\n !Number.isNaN(originZ) ? originZ : 0,\n ];\n }\n\n this.round = round;\n this.origin = origin;\n\n return this;\n }\n get bbox() {\n return getPathBBox(this.segments);\n }\n get length() {\n return getTotalLength(this.segments);\n }\n\n /**\n * Returns the path bounding box, equivalent to native `path.getBBox()`.\n *\n * @public\n * @returns the pathBBox\n */\n getBBox() {\n return this.bbox;\n }\n\n /**\n * Returns the total path length, equivalent to native `path.getTotalLength()`.\n *\n * @public\n * @returns the path total length\n */\n getTotalLength() {\n return this.length;\n }\n\n /**\n * Returns an `{x,y}` point in the path stroke at a given length,\n * equivalent to the native `path.getPointAtLength()`.\n *\n * @public\n * @param length the length\n * @returns the requested point\n */\n getPointAtLength(length: number) {\n return getPointAtLength(this.segments, length);\n }\n\n /**\n * Convert path to absolute values\n *\n * @public\n */\n toAbsolute() {\n const { segments } = this;\n this.segments = pathToAbsolute(segments);\n return this;\n }\n\n /**\n * Convert path to relative values\n *\n * @public\n */\n toRelative() {\n const { segments } = this;\n this.segments = pathToRelative(segments);\n return this;\n }\n\n /**\n * Convert path to cubic-bezier values. In addition, un-necessary `Z`\n * segment is removed if previous segment extends to the `M` segment.\n *\n * @public\n */\n toCurve() {\n const { segments } = this;\n this.segments = pathToCurve(segments);\n return this;\n }\n\n /**\n * Reverse the order of the segments and their values.\n *\n * @param onlySubpath option to reverse all sub-paths except first\n * @public\n */\n reverse(onlySubpath?: boolean) {\n const { segments } = this;\n const split = splitPath(segments);\n const subPath = split.length > 1 ? split : false;\n\n const absoluteMultiPath = subPath\n ? subPath.map((x, i) => {\n if (onlySubpath) {\n return i ? reversePath(x) : x.slice(0);\n }\n return reversePath(x);\n })\n : segments.slice(0);\n\n let path = [] as unknown as PathArray;\n if (subPath) {\n path = absoluteMultiPath.flat(1) as PathArray;\n } else {\n path = onlySubpath ? segments : reversePath(segments);\n }\n\n this.segments = path.slice(0) as PathArray;\n return this;\n }\n\n /**\n * Normalize path in 2 steps:\n * * convert `pathArray`(s) to absolute values\n * * convert shorthand notation to standard notation\n *\n * @public\n */\n normalize() {\n const { segments } = this;\n this.segments = normalizePath(segments);\n return this;\n }\n\n /**\n * Optimize `pathArray` values:\n * * convert segments to absolute and/or relative values\n * * select segments with shortest resulted string\n * * round values to the specified `decimals` option value\n *\n * @public\n */\n optimize() {\n const { segments } = this;\n const round = this.round === \"off\" ? 2 : this.round;\n\n this.segments = optimizePath(segments, round);\n return this;\n }\n\n /**\n * Transform path using values from an `Object` defined as `transformObject`.\n *\n * @see TransformObject for a quick refference\n *\n * @param source a `transformObject`as described above\n * @public\n */\n transform(source?: Partial) {\n if (\n !source ||\n typeof source !== \"object\" ||\n (typeof source === \"object\" &&\n ![\"translate\", \"rotate\", \"skew\", \"scale\"].some((x) => x in source))\n ) {\n return this;\n }\n\n const {\n segments,\n origin: [cx, cy, cz],\n } = this;\n const transform = {} as TransformObjectValues;\n for (const [k, v] of Object.entries(source) as TransformEntries) {\n // istanbul ignore else @preserve\n if (k === \"skew\" && Array.isArray(v)) {\n transform[k] = v.map(Number) as PointTuple;\n } else if (\n (k === \"rotate\" || k === \"translate\" || k === \"origin\" ||\n k === \"scale\") && Array.isArray(v)\n ) {\n transform[k] = v.map(Number) as [number, number, number];\n } else if (k !== \"origin\" && typeof Number(v) === \"number\") {\n transform[k] = Number(v);\n }\n }\n\n // if origin is not specified\n // it's important that we have one\n const { origin } = transform;\n\n if (Array.isArray(origin) && origin.length >= 2) {\n const [originX, originY, originZ] = origin.map(Number);\n transform.origin = [\n !Number.isNaN(originX) ? originX : cx,\n !Number.isNaN(originY) ? originY : cy,\n originZ || cz,\n ];\n } else {\n transform.origin = [cx, cy, cz];\n }\n\n this.segments = transformPath(segments, transform);\n return this;\n }\n\n /**\n * Rotate path 180deg vertically\n *\n * @public\n */\n flipX() {\n const { cx, cy } = this.bbox;\n this.transform({ rotate: [0, 180, 0], origin: [cx, cy, 0] });\n return this;\n }\n\n /**\n * Rotate path 180deg horizontally\n *\n * @public\n */\n flipY() {\n const { cx, cy } = this.bbox;\n this.transform({ rotate: [180, 0, 0], origin: [cx, cy, 0] });\n return this;\n }\n\n /**\n * Export the current path to be used\n * for the `d` (description) attribute.\n *\n * @public\n * @return the path string\n */\n toString() {\n return pathToString(this.segments, this.round);\n }\n\n /**\n * Remove the instance.\n *\n * @public\n * @return void\n */\n dispose() {\n Object.keys(this).forEach((key) => delete this[key as keyof typeof this]);\n }\n}\n\nexport default SVGPathCommander;\n"],"names":["Z","z","s","e","p","$","E","P","y","g","n","i","r","a","m","h","c","u","f","w","o","d","b","X","O","x","Y","F","T","k","I","v","R","D","N","defaultOptions","paramsCount","finalizeSegment","path","pathCommand","relativeCommand","data","error","scanFlag","index","pathValue","code","isDigit","invalidPathValue","scanParam","max","start","zeroFirst","hasCeiling","hasDecimal","hasDot","ch","isSpace","skipSpaces","isPathCommand","isDigitStart","isArcCommand","isMoveCommand","scanSegment","segments","cmdCode","reqParams","paramCounts","lastSegment","_a","PathParser","pathString","parsePathString","pathInput","absolutizeSegment","segment","lastX","lastY","absCommand","absValues","seglen","j","iterate","iterator","pathLen","isRelative","mx","my","segLen","iteratorResult","pathToAbsolute","relativizeSegment","relCommand","relValues","pathToRelative","rotateVector","rad","sin","cos","arcToCubic","X1","Y1","RX","RY","angle","LAF","SF","X2","Y2","recursive","x1","y1","rx","ry","x2","y2","d120","res","xy","f1","f2","cx","cy","rx2","ry2","df","f2old","x2old","y2old","c1","s1","c2","s2","t","hx","hy","m1","m2","m3","m4","newres","ii","quadToCubic","qx","qy","r13","r23","midPoint","ax","ay","bx","by","lineToCubic","segmentToCubic","params","values","px1","py1","px","py","normalizeSegment","px2","py2","nqx","nqy","paramsParser","pathToCurve","seg","normalSegment","result","roundTo","round","pow","pathToString","roundOption","valLen","distanceSquareRoot","getLineLength","getPointAtLineLength","distance","point","length","getLineBBox","min","arcLength","theta","halfTheta","sinHalfTheta","cosHalfTheta","term1","term2","arcPoint","alpha","cosA","sinA","angleBetween","v0","v1","v0x","v0y","v1x","v1y","getArcProps","abs","sqrt","PI","xRotRad","dx","dy","transformedPoint","radiiCheck","cSquareNumerator","cSquareRootDenom","cRadicand","cCoef","transformedCenter","center","startVector","startAngle","endVector","sweepAngle","endAngle","getArcLength","getPointAtArcLength","ellipseComponentX","ellipseComponentY","getArcBBox","deltaAngle","tan","atan2","tangent","angle1","angle2","angle3","angle4","xArray","yArray","xMin","xMax","yMin","yMax","angleAfterStart","pP2","angleBeforeEnd","pP3","p1","p2","p4","p3","Tvalues","Cvalues","deriveBezier","points","dpoints","list","computeBezier","order","mt","mt2","t2","calculateBezier","derivativeFn","l","bezierLength","len","sum","getBezierLength","curve","idx","step","CBEZIER_MINMAX_EPSILON","minmaxQ","cp","v2","minmaxC","cp1","cp2","K","S","L","Q","getPointAtCubicSegmentLength","c1x","c1y","c2x","c2y","t1","getCubicLength","getPointAtCubicLength","distanceIsNumber","currentLength","getCubicBBox","cxMinMax","cyMinMax","getPointAtQuadSegmentLength","getQuadLength","getPointAtQuadLength","getQuadBBox","polygonArea","polygon","area","polygonLength","DISTANCE_EPSILON","normalizePath","_","getPointAtLength","isM","POINT","totalLength","getTotalLength","paramX1","paramY1","paramX2","paramY2","paramQX","paramQY","absoluteSegment","cp1x","cp1y","getPropertiesAtLength","pathArray","pathTemp","pathLength","lengthAtSegment","getPropertiesAtPoint","normalPath","distanceTo","precision","scan","closest","scanDistance","bestLength","bestDistance","scanLength","before","after","beforeLength","afterLength","beforeDistance","afterDistance","getClosestPoint","getCubicSegArea","getPathArea","getDrawDirection","getPathBBox","minX","minY","maxX","maxY","width","height","getSegmentAtLength","getSegmentOfPoint","isPathArray","lk","isAbsoluteArray","isNormalizedArray","pc","isCurveArray","isPointInStroke","isRelativeArray","isValidPath","shapeParams","isElement","node","getLinePath","attr","getPolyPath","getCirclePath","getEllipsePath","getRectanglePath","shapeToPathArray","element","supportedShapes","targetIsElement","tagName","type","shapeAttrs","config","shapeToPath","replace","ownerDocument","doc","description","name","value","getSVGMatrix","transform","matrix","CSSMatrix","origin","originX","originY","translate","rotate","skew","scale","shortenSegment","prevCommand","defaultRound","normalValues","nx","ny","nx1","ny1","roundSegment","optimizePath","optimParams","allPathCommands","normalizedSegment","shortSegment","absSegment","absString","relativeSegment","relSegment","relString","translatePoint","cssm","projection2d","point2D","originZ","relativePositionX","relativePositionY","relativePositionZ","reverseCurve","rotatedCurve","curveOnly","reversePath","absolutePath","normalizedPath","pLen","isClosed","reversedPath","prevSeg","nextSeg","nextCommand","roundPath","splitCubic","pts","ratio","p0","p5","p6","p7","p8","p9","splitPath","composite","pi","transformPath","lx","ly","jj","transformProps","matrixInstance","isLongArc","tempSegment","SVGPathCommander","instanceOptions","undefPath","originOption","onlySubpath","split","subPath","absoluteMultiPath","source","cz","key","__publicField","arcTools","distanceEpsilon","pathParser"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"svg-path-commander.cjs","sources":["../node_modules/@thednp/dommatrix/dist/dommatrix.mjs","../src/options/options.ts","../src/parser/paramsCount.ts","../src/parser/finalizeSegment.ts","../src/parser/error.ts","../src/parser/scanFlag.ts","../src/parser/isDigit.ts","../src/parser/invalidPathValue.ts","../src/parser/scanParam.ts","../src/parser/isSpace.ts","../src/parser/skipSpaces.ts","../src/parser/isPathCommand.ts","../src/parser/isDigitStart.ts","../src/parser/isArcCommand.ts","../src/parser/isMoveCommand.ts","../src/parser/scanSegment.ts","../src/parser/pathParser.ts","../src/parser/parsePathString.ts","../src/process/absolutizeSegment.ts","../src/process/iterate.ts","../src/convert/pathToAbsolute.ts","../src/process/relativizeSegment.ts","../src/convert/pathToRelative.ts","../src/math/rotateVector.ts","../src/process/arcToCubic.ts","../src/process/quadToCubic.ts","../src/math/midPoint.ts","../src/process/lineToCubic.ts","../src/process/segmentToCubic.ts","../src/process/normalizeSegment.ts","../src/parser/paramsParser.ts","../src/convert/pathToCurve.ts","../src/math/roundTo.ts","../src/convert/pathToString.ts","../src/math/distanceSquareRoot.ts","../src/math/lineTools.ts","../src/math/arcTools.ts","../src/math/bezier.ts","../src/math/cubicTools.ts","../src/math/quadTools.ts","../src/math/polygonTools.ts","../src/util/distanceEpsilon.ts","../src/process/normalizePath.ts","../src/util/getPointAtLength.ts","../src/util/getTotalLength.ts","../src/util/getPropertiesAtLength.ts","../src/util/getPropertiesAtPoint.ts","../src/util/getClosestPoint.ts","../src/util/getPathArea.ts","../src/util/getDrawDirection.ts","../src/util/getPathBBox.ts","../src/util/getSegmentAtLength.ts","../src/util/getSegmentOfPoint.ts","../src/util/isPathArray.ts","../src/util/isAbsoluteArray.ts","../src/util/isNormalizedArray.ts","../src/util/isCurveArray.ts","../src/util/isPointInStroke.ts","../src/util/isRelativeArray.ts","../src/util/isValidPath.ts","../src/util/shapeParams.ts","../src/util/isElement.ts","../src/util/shapeToPathArray.ts","../src/util/shapeToPath.ts","../src/process/getSVGMatrix.ts","../src/process/shortenSegment.ts","../src/process/roundSegment.ts","../src/process/optimizePath.ts","../src/process/projection2d.ts","../src/process/reverseCurve.ts","../src/process/reversePath.ts","../src/process/roundPath.ts","../src/process/splitCubic.ts","../src/process/splitPath.ts","../src/process/transformPath.ts","../src/index.ts"],"sourcesContent":["var Z = Object.defineProperty;\nvar z = (s, t, e) => t in s ? Z(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e;\nvar p = (s, t, e) => z(s, typeof t != \"symbol\" ? t + \"\" : t, e);\nconst $ = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: 0,\n f: 0,\n m11: 1,\n m12: 0,\n m13: 0,\n m14: 0,\n m21: 0,\n m22: 1,\n m23: 0,\n m24: 0,\n m31: 0,\n m32: 0,\n m33: 1,\n m34: 0,\n m41: 0,\n m42: 0,\n m43: 0,\n m44: 1,\n is2D: !0,\n isIdentity: !0\n}, E = (s) => (s instanceof Float64Array || s instanceof Float32Array || Array.isArray(s) && s.every((t) => typeof t == \"number\")) && [6, 16].some((t) => s.length === t), P = (s) => s instanceof DOMMatrix || s instanceof y || typeof s == \"object\" && Object.keys($).every((t) => s && t in s), g = (s) => {\n const t = new y(), e = Array.from(s);\n if (!E(e))\n throw TypeError(\n `CSSMatrix: \"${e.join(\",\")}\" must be an array with 6/16 numbers.`\n );\n // istanbul ignore else @preserve\n if (e.length === 16) {\n const [\n n,\n i,\n r,\n a,\n l,\n m,\n h,\n c,\n u,\n f,\n w,\n o,\n d,\n A,\n M,\n b\n ] = e;\n t.m11 = n, t.a = n, t.m21 = l, t.c = l, t.m31 = u, t.m41 = d, t.e = d, t.m12 = i, t.b = i, t.m22 = m, t.d = m, t.m32 = f, t.m42 = A, t.f = A, t.m13 = r, t.m23 = h, t.m33 = w, t.m43 = M, t.m14 = a, t.m24 = c, t.m34 = o, t.m44 = b;\n } else if (e.length === 6) {\n const [n, i, r, a, l, m] = e;\n t.m11 = n, t.a = n, t.m12 = i, t.b = i, t.m21 = r, t.c = r, t.m22 = a, t.d = a, t.m41 = l, t.e = l, t.m42 = m, t.f = m;\n }\n return t;\n}, X = (s) => {\n if (P(s))\n return g([\n s.m11,\n s.m12,\n s.m13,\n s.m14,\n s.m21,\n s.m22,\n s.m23,\n s.m24,\n s.m31,\n s.m32,\n s.m33,\n s.m34,\n s.m41,\n s.m42,\n s.m43,\n s.m44\n ]);\n throw TypeError(\n `CSSMatrix: \"${JSON.stringify(s)}\" is not a DOMMatrix / CSSMatrix / JSON compatible object.`\n );\n}, O = (s) => {\n if (typeof s != \"string\")\n throw TypeError(`CSSMatrix: \"${JSON.stringify(s)}\" is not a string.`);\n const t = String(s).replace(/\\s/g, \"\");\n let e = new y();\n const n = `CSSMatrix: invalid transform string \"${s}\"`;\n return t.split(\")\").filter((i) => i).forEach((i) => {\n const [r, a] = i.split(\"(\");\n if (!a) throw TypeError(n);\n const l = a.split(\",\").map(\n (o) => o.includes(\"rad\") ? parseFloat(o) * (180 / Math.PI) : parseFloat(o)\n ), [m, h, c, u] = l, f = [m, h, c], w = [m, h, c, u];\n if (r === \"perspective\" && m && [h, c].every((o) => o === void 0))\n e.m34 = -1 / m;\n else if (r.includes(\"matrix\") && [6, 16].includes(l.length) && l.every((o) => !Number.isNaN(+o))) {\n const o = l.map((d) => Math.abs(d) < 1e-6 ? 0 : d);\n e = e.multiply(g(o));\n } else if (r === \"translate3d\" && f.every((o) => !Number.isNaN(+o)))\n e = e.translate(m, h, c);\n else if (r === \"translate\" && m && c === void 0)\n e = e.translate(m, h || 0, 0);\n else if (r === \"rotate3d\" && w.every((o) => !Number.isNaN(+o)) && u)\n e = e.rotateAxisAngle(m, h, c, u);\n else if (r === \"rotate\" && m && [h, c].every((o) => o === void 0))\n e = e.rotate(0, 0, m);\n else if (r === \"scale3d\" && f.every((o) => !Number.isNaN(+o)) && f.some((o) => o !== 1))\n e = e.scale(m, h, c);\n else if (\n // prop === \"scale\" && !Number.isNaN(x) && x !== 1 && z === undefined\n // prop === \"scale\" && !Number.isNaN(x) && [x, y].some((n) => n !== 1) &&\n r === \"scale\" && !Number.isNaN(m) && (m !== 1 || h !== 1) && c === void 0\n ) {\n const d = Number.isNaN(+h) ? m : h;\n e = e.scale(m, d, 1);\n } else if (r === \"skew\" && (m || !Number.isNaN(m) && h) && c === void 0)\n e = e.skew(m, h || 0);\n else if ([\"translate\", \"rotate\", \"scale\", \"skew\"].some(\n (o) => r.includes(o)\n ) && /[XYZ]/.test(r) && m && [h, c].every((o) => o === void 0))\n if (r === \"skewX\" || r === \"skewY\")\n e = e[r](m);\n else {\n const o = r.replace(/[XYZ]/, \"\"), d = r.replace(o, \"\"), A = [\"X\", \"Y\", \"Z\"].indexOf(d), M = o === \"scale\" ? 1 : 0, b = [\n A === 0 ? m : M,\n A === 1 ? m : M,\n A === 2 ? m : M\n ];\n e = e[o](...b);\n }\n else\n throw TypeError(n);\n }), e;\n}, x = (s, t) => t ? [s.a, s.b, s.c, s.d, s.e, s.f] : [\n s.m11,\n s.m12,\n s.m13,\n s.m14,\n s.m21,\n s.m22,\n s.m23,\n s.m24,\n s.m31,\n s.m32,\n s.m33,\n s.m34,\n s.m41,\n s.m42,\n s.m43,\n s.m44\n], Y = (s, t, e) => {\n const n = new y();\n return n.m41 = s, n.e = s, n.m42 = t, n.f = t, n.m43 = e, n;\n}, F = (s, t, e) => {\n const n = new y(), i = Math.PI / 180, r = s * i, a = t * i, l = e * i, m = Math.cos(r), h = -Math.sin(r), c = Math.cos(a), u = -Math.sin(a), f = Math.cos(l), w = -Math.sin(l), o = c * f, d = -c * w;\n n.m11 = o, n.a = o, n.m12 = d, n.b = d, n.m13 = u;\n const A = h * u * f + m * w;\n n.m21 = A, n.c = A;\n const M = m * f - h * u * w;\n return n.m22 = M, n.d = M, n.m23 = -h * c, n.m31 = h * w - m * u * f, n.m32 = h * f + m * u * w, n.m33 = m * c, n;\n}, T = (s, t, e, n) => {\n const i = new y(), r = Math.sqrt(s * s + t * t + e * e);\n if (r === 0)\n return i;\n const a = s / r, l = t / r, m = e / r, h = n * (Math.PI / 360), c = Math.sin(h), u = Math.cos(h), f = c * c, w = a * a, o = l * l, d = m * m, A = 1 - 2 * (o + d) * f;\n i.m11 = A, i.a = A;\n const M = 2 * (a * l * f + m * c * u);\n i.m12 = M, i.b = M, i.m13 = 2 * (a * m * f - l * c * u);\n const b = 2 * (l * a * f - m * c * u);\n i.m21 = b, i.c = b;\n const k = 1 - 2 * (d + w) * f;\n return i.m22 = k, i.d = k, i.m23 = 2 * (l * m * f + a * c * u), i.m31 = 2 * (m * a * f + l * c * u), i.m32 = 2 * (m * l * f - a * c * u), i.m33 = 1 - 2 * (w + o) * f, i;\n}, I = (s, t, e) => {\n const n = new y();\n return n.m11 = s, n.a = s, n.m22 = t, n.d = t, n.m33 = e, n;\n}, v = (s, t) => {\n const e = new y();\n if (s) {\n const n = s * Math.PI / 180, i = Math.tan(n);\n e.m21 = i, e.c = i;\n }\n if (t) {\n const n = t * Math.PI / 180, i = Math.tan(n);\n e.m12 = i, e.b = i;\n }\n return e;\n}, R = (s) => v(s, 0), D = (s) => v(0, s), N = (s, t) => {\n const e = t.m11 * s.m11 + t.m12 * s.m21 + t.m13 * s.m31 + t.m14 * s.m41, n = t.m11 * s.m12 + t.m12 * s.m22 + t.m13 * s.m32 + t.m14 * s.m42, i = t.m11 * s.m13 + t.m12 * s.m23 + t.m13 * s.m33 + t.m14 * s.m43, r = t.m11 * s.m14 + t.m12 * s.m24 + t.m13 * s.m34 + t.m14 * s.m44, a = t.m21 * s.m11 + t.m22 * s.m21 + t.m23 * s.m31 + t.m24 * s.m41, l = t.m21 * s.m12 + t.m22 * s.m22 + t.m23 * s.m32 + t.m24 * s.m42, m = t.m21 * s.m13 + t.m22 * s.m23 + t.m23 * s.m33 + t.m24 * s.m43, h = t.m21 * s.m14 + t.m22 * s.m24 + t.m23 * s.m34 + t.m24 * s.m44, c = t.m31 * s.m11 + t.m32 * s.m21 + t.m33 * s.m31 + t.m34 * s.m41, u = t.m31 * s.m12 + t.m32 * s.m22 + t.m33 * s.m32 + t.m34 * s.m42, f = t.m31 * s.m13 + t.m32 * s.m23 + t.m33 * s.m33 + t.m34 * s.m43, w = t.m31 * s.m14 + t.m32 * s.m24 + t.m33 * s.m34 + t.m34 * s.m44, o = t.m41 * s.m11 + t.m42 * s.m21 + t.m43 * s.m31 + t.m44 * s.m41, d = t.m41 * s.m12 + t.m42 * s.m22 + t.m43 * s.m32 + t.m44 * s.m42, A = t.m41 * s.m13 + t.m42 * s.m23 + t.m43 * s.m33 + t.m44 * s.m43, M = t.m41 * s.m14 + t.m42 * s.m24 + t.m43 * s.m34 + t.m44 * s.m44;\n return g([\n e,\n n,\n i,\n r,\n a,\n l,\n m,\n h,\n c,\n u,\n f,\n w,\n o,\n d,\n A,\n M\n ]);\n};\nclass y {\n /**\n * @constructor\n * @param init accepts all parameter configurations:\n * * valid CSS transform string,\n * * CSSMatrix/DOMMatrix instance,\n * * a 6/16 elements *Array*.\n */\n constructor(t) {\n return this.a = 1, this.b = 0, this.c = 0, this.d = 1, this.e = 0, this.f = 0, this.m11 = 1, this.m12 = 0, this.m13 = 0, this.m14 = 0, this.m21 = 0, this.m22 = 1, this.m23 = 0, this.m24 = 0, this.m31 = 0, this.m32 = 0, this.m33 = 1, this.m34 = 0, this.m41 = 0, this.m42 = 0, this.m43 = 0, this.m44 = 1, t ? this.setMatrixValue(t) : this;\n }\n /**\n * A `Boolean` whose value is `true` if the matrix is the identity matrix. The identity\n * matrix is one in which every value is 0 except those on the main diagonal from top-left\n * to bottom-right corner (in other words, where the offsets in each direction are equal).\n *\n * @return the current property value\n */\n get isIdentity() {\n return this.m11 === 1 && this.m12 === 0 && this.m13 === 0 && this.m14 === 0 && this.m21 === 0 && this.m22 === 1 && this.m23 === 0 && this.m24 === 0 && this.m31 === 0 && this.m32 === 0 && this.m33 === 1 && this.m34 === 0 && this.m41 === 0 && this.m42 === 0 && this.m43 === 0 && this.m44 === 1;\n }\n /**\n * A `Boolean` flag whose value is `true` if the matrix was initialized as a 2D matrix\n * and `false` if the matrix is 3D.\n *\n * @return the current property value\n */\n get is2D() {\n return this.m31 === 0 && this.m32 === 0 && this.m33 === 1 && this.m34 === 0 && this.m43 === 0 && this.m44 === 1;\n }\n /**\n * The `setMatrixValue` method replaces the existing matrix with one computed\n * in the browser. EG: `matrix(1,0.25,-0.25,1,0,0)`\n *\n * The method accepts any *Array* values, the result of\n * `DOMMatrix` instance method `toFloat64Array()` / `toFloat32Array()` calls\n * or `CSSMatrix` instance method `toArray()`.\n *\n * This method expects valid *matrix()* / *matrix3d()* string values, as well\n * as other transform functions like *translateX(10px)*.\n *\n * @param source\n * @return the matrix instance\n */\n setMatrixValue(t) {\n return typeof t == \"string\" && t.length && t !== \"none\" ? O(t) : Array.isArray(t) || t instanceof Float64Array || t instanceof Float32Array ? g(t) : typeof t == \"object\" ? X(t) : this;\n }\n /**\n * Returns a *Float32Array* containing elements which comprise the matrix.\n * The method can return either the 16 elements or the 6 elements\n * depending on the value of the `is2D` parameter.\n *\n * @param is2D *Array* representation of the matrix\n * @return an *Array* representation of the matrix\n */\n toFloat32Array(t) {\n return Float32Array.from(x(this, t));\n }\n /**\n * Returns a *Float64Array* containing elements which comprise the matrix.\n * The method can return either the 16 elements or the 6 elements\n * depending on the value of the `is2D` parameter.\n *\n * @param is2D *Array* representation of the matrix\n * @return an *Array* representation of the matrix\n */\n toFloat64Array(t) {\n return Float64Array.from(x(this, t));\n }\n /**\n * Creates and returns a string representation of the matrix in `CSS` matrix syntax,\n * using the appropriate `CSS` matrix notation.\n *\n * matrix3d *matrix3d(m11, m12, m13, m14, m21, ...)*\n * matrix *matrix(a, b, c, d, e, f)*\n *\n * @return a string representation of the matrix\n */\n toString() {\n const { is2D: t } = this, e = this.toFloat64Array(t).join(\", \");\n return `${t ? \"matrix\" : \"matrix3d\"}(${e})`;\n }\n /**\n * Returns a JSON representation of the `CSSMatrix` instance, a standard *Object*\n * that includes `{a,b,c,d,e,f}` and `{m11,m12,m13,..m44}` properties as well\n * as the `is2D` & `isIdentity` properties.\n *\n * The result can also be used as a second parameter for the `fromMatrix` static method\n * to load values into another matrix instance.\n *\n * @return an *Object* with all matrix values.\n */\n toJSON() {\n const { is2D: t, isIdentity: e } = this;\n return { ...this, is2D: t, isIdentity: e };\n }\n /**\n * The Multiply method returns a new CSSMatrix which is the result of this\n * matrix multiplied by the passed matrix, with the passed matrix to the right.\n * This matrix is not modified.\n *\n * @param m2 CSSMatrix\n * @return The resulted matrix.\n */\n multiply(t) {\n return N(this, t);\n }\n /**\n * The translate method returns a new matrix which is this matrix post\n * multiplied by a translation matrix containing the passed values. If the z\n * component is undefined, a 0 value is used in its place. This matrix is not\n * modified.\n *\n * @param x X component of the translation value.\n * @param y Y component of the translation value.\n * @param z Z component of the translation value.\n * @return The resulted matrix\n */\n translate(t, e, n) {\n const i = t;\n let r = e, a = n;\n return typeof r > \"u\" && (r = 0), typeof a > \"u\" && (a = 0), N(this, Y(i, r, a));\n }\n /**\n * The scale method returns a new matrix which is this matrix post multiplied by\n * a scale matrix containing the passed values. If the z component is undefined,\n * a 1 value is used in its place. If the y component is undefined, the x\n * component value is used in its place. This matrix is not modified.\n *\n * @param x The X component of the scale value.\n * @param y The Y component of the scale value.\n * @param z The Z component of the scale value.\n * @return The resulted matrix\n */\n scale(t, e, n) {\n const i = t;\n let r = e, a = n;\n return typeof r > \"u\" && (r = t), typeof a > \"u\" && (a = 1), N(this, I(i, r, a));\n }\n /**\n * The rotate method returns a new matrix which is this matrix post multiplied\n * by each of 3 rotation matrices about the major axes, first X, then Y, then Z.\n * If the y and z components are undefined, the x value is used to rotate the\n * object about the z axis, as though the vector (0,0,x) were passed. All\n * rotation values are in degrees. This matrix is not modified.\n *\n * @param rx The X component of the rotation, or Z if Y and Z are null.\n * @param ry The (optional) Y component of the rotation value.\n * @param rz The (optional) Z component of the rotation value.\n * @return The resulted matrix\n */\n rotate(t, e, n) {\n let i = t, r = e || 0, a = n || 0;\n return typeof t == \"number\" && typeof e > \"u\" && typeof n > \"u\" && (a = i, i = 0, r = 0), N(this, F(i, r, a));\n }\n /**\n * The rotateAxisAngle method returns a new matrix which is this matrix post\n * multiplied by a rotation matrix with the given axis and `angle`. The right-hand\n * rule is used to determine the direction of rotation. All rotation values are\n * in degrees. This matrix is not modified.\n *\n * @param x The X component of the axis vector.\n * @param y The Y component of the axis vector.\n * @param z The Z component of the axis vector.\n * @param angle The angle of rotation about the axis vector, in degrees.\n * @return The resulted matrix\n */\n rotateAxisAngle(t, e, n, i) {\n if ([t, e, n, i].some((r) => Number.isNaN(+r)))\n throw new TypeError(\"CSSMatrix: expecting 4 values\");\n return N(this, T(t, e, n, i));\n }\n /**\n * Specifies a skew transformation along the `x-axis` by the given angle.\n * This matrix is not modified.\n *\n * @param angle The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skewX(t) {\n return N(this, R(t));\n }\n /**\n * Specifies a skew transformation along the `y-axis` by the given angle.\n * This matrix is not modified.\n *\n * @param angle The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skewY(t) {\n return N(this, D(t));\n }\n /**\n * Specifies a skew transformation along both the `x-axis` and `y-axis`.\n * This matrix is not modified.\n *\n * @param angleX The X-angle amount in degrees to skew.\n * @param angleY The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skew(t, e) {\n return N(this, v(t, e));\n }\n /**\n * Transforms a specified vector using the matrix, returning a new\n * {x,y,z,w} Tuple *Object* comprising the transformed vector.\n * Neither the matrix nor the original vector are altered.\n *\n * The method is equivalent with `transformPoint()` method\n * of the `DOMMatrix` constructor.\n *\n * @param t Tuple with `{x,y,z,w}` components\n * @return the resulting Tuple\n */\n transformPoint(t) {\n const e = this.m11 * t.x + this.m21 * t.y + this.m31 * t.z + this.m41 * t.w, n = this.m12 * t.x + this.m22 * t.y + this.m32 * t.z + this.m42 * t.w, i = this.m13 * t.x + this.m23 * t.y + this.m33 * t.z + this.m43 * t.w, r = this.m14 * t.x + this.m24 * t.y + this.m34 * t.z + this.m44 * t.w;\n return t instanceof DOMPoint ? new DOMPoint(e, n, i, r) : {\n x: e,\n y: n,\n z: i,\n w: r\n };\n }\n}\np(y, \"Translate\", Y), p(y, \"Rotate\", F), p(y, \"RotateAxisAngle\", T), p(y, \"Scale\", I), p(y, \"SkewX\", R), p(y, \"SkewY\", D), p(y, \"Skew\", v), p(y, \"Multiply\", N), p(y, \"fromArray\", g), p(y, \"fromMatrix\", X), p(y, \"fromString\", O), p(y, \"toArray\", x), p(y, \"isCompatibleArray\", E), p(y, \"isCompatibleObject\", P);\nexport {\n y as default\n};\n//# sourceMappingURL=dommatrix.mjs.map\n","import { Options } from \"../interface\";\r\n\r\n/** SVGPathCommander default options */\r\nconst defaultOptions: Options = {\r\n origin: [0, 0, 0],\r\n round: 4,\r\n};\r\n\r\nexport default defaultOptions;\r\n","/** Segment params length */\r\nconst paramsCount = {\r\n a: 7,\r\n c: 6,\r\n h: 1,\r\n l: 2,\r\n m: 2,\r\n r: 4,\r\n q: 4,\r\n s: 4,\r\n t: 2,\r\n v: 1,\r\n z: 0,\r\n};\r\n\r\nexport default paramsCount;\r\n","import paramsCount from \"./paramsCount\";\r\nimport PathParser from \"./pathParser\";\r\nimport type { PathCommand, PathSegment, RelativeCommand } from \"../types\";\r\n\r\n/**\r\n * Breaks the parsing of a pathString once a segment is finalized.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst finalizeSegment = (path: PathParser) => {\r\n let pathCommand = path.pathValue[path.segmentStart] as PathCommand;\r\n let relativeCommand = pathCommand.toLowerCase() as RelativeCommand;\r\n const { data } = path;\r\n\r\n while (data.length >= paramsCount[relativeCommand]) {\r\n // overloaded `moveTo`\r\n // https://github.com/rveciana/svg-path-properties/blob/master/src/parse.ts\r\n if (relativeCommand === \"m\" && data.length > 2) {\r\n path.segments.push(\r\n [pathCommand as PathCommand | number].concat(\r\n data.splice(0, 2) as number[],\r\n ) as PathSegment,\r\n );\r\n relativeCommand = \"l\";\r\n pathCommand = pathCommand === \"m\" ? \"l\" : \"L\";\r\n } else {\r\n path.segments.push(\r\n [pathCommand as PathCommand | number].concat(\r\n data.splice(0, paramsCount[relativeCommand]) as number[],\r\n ) as PathSegment,\r\n );\r\n }\r\n\r\n if (!paramsCount[relativeCommand]) {\r\n break;\r\n }\r\n }\r\n};\r\nexport default finalizeSegment;\r\n","const error = \"SVGPathCommander Error\";\r\nexport default error;\r\n","import error from \"./error\";\r\nimport type PathParser from \"./pathParser\";\r\n\r\n/**\r\n * Validates an A (arc-to) specific path command value.\r\n * Usually a `large-arc-flag` or `sweep-flag`.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst scanFlag = (path: PathParser) => {\r\n const { index, pathValue } = path;\r\n const code = pathValue.charCodeAt(index);\r\n\r\n if (code === 0x30 /* 0 */) {\r\n path.param = 0;\r\n path.index += 1;\r\n return;\r\n }\r\n\r\n if (code === 0x31 /* 1 */) {\r\n path.param = 1;\r\n path.index += 1;\r\n return;\r\n }\r\n\r\n path.err = `${error}: invalid Arc flag \"${\r\n pathValue[index]\r\n }\", expecting 0 or 1 at index ${index}`;\r\n};\r\n\r\nexport default scanFlag;\r\n","import { DigitNumber } from \"../types\";\r\n\r\n/**\r\n * Checks if a character is a digit.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isDigit = (code: number): code is DigitNumber => {\r\n return code >= 48 && code <= 57; // 0..9\r\n};\r\nexport default isDigit;\r\n","const invalidPathValue = \"Invalid path value\";\r\nexport default invalidPathValue;\r\n","import isDigit from \"./isDigit\";\r\nimport invalidPathValue from \"./invalidPathValue\";\r\nimport error from \"./error\";\r\nimport type PathParser from \"./pathParser\";\r\n\r\n/**\r\n * Validates every character of the path string,\r\n * every path command, negative numbers or floating point numbers.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst scanParam = (path: PathParser) => {\r\n const { max, pathValue, index: start } = path;\r\n let index = start;\r\n let zeroFirst = false;\r\n let hasCeiling = false;\r\n let hasDecimal = false;\r\n let hasDot = false;\r\n let ch;\r\n\r\n if (index >= max) {\r\n path.err =\r\n `${error}: ${invalidPathValue} at index ${index}, \"pathValue\" is missing param`;\r\n return;\r\n }\r\n ch = pathValue.charCodeAt(index);\r\n\r\n if (ch === 0x2b /* + */ || ch === 0x2d /* - */) {\r\n index += 1;\r\n // ch = (index < max) ? pathValue.charCodeAt(index) : 0;\r\n ch = pathValue.charCodeAt(index);\r\n }\r\n\r\n // This logic is shamelessly borrowed from Esprima\r\n // https://github.com/ariya/esprimas\r\n if (!isDigit(ch) && ch !== 0x2e /* . */) {\r\n // path.err = 'SvgPath: param should start with 0..9 or `.` (at pos ' + index + ')';\r\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\r\n pathValue[index]\r\n }\" is not a number`;\r\n return;\r\n }\r\n\r\n if (ch !== 0x2e /* . */) {\r\n zeroFirst = ch === 0x30 /* 0 */;\r\n index += 1;\r\n\r\n ch = pathValue.charCodeAt(index);\r\n\r\n if (zeroFirst && index < max) {\r\n // decimal number starts with '0' such as '09' is illegal.\r\n if (ch && isDigit(ch)) {\r\n // path.err = 'SvgPath: numbers started with `0` such as `09`\r\n // are illegal (at pos ' + start + ')';\r\n path.err = `${error}: ${invalidPathValue} at index ${start}, \"${\r\n pathValue[start]\r\n }\" illegal number`;\r\n return;\r\n }\r\n }\r\n\r\n while (index < max && isDigit(pathValue.charCodeAt(index))) {\r\n index += 1;\r\n hasCeiling = true;\r\n }\r\n\r\n ch = pathValue.charCodeAt(index);\r\n }\r\n\r\n if (ch === 0x2e /* . */) {\r\n hasDot = true;\r\n index += 1;\r\n while (isDigit(pathValue.charCodeAt(index))) {\r\n index += 1;\r\n hasDecimal = true;\r\n }\r\n\r\n ch = pathValue.charCodeAt(index);\r\n }\r\n\r\n if (ch === 0x65 /* e */ || ch === 0x45 /* E */) {\r\n if (hasDot && !hasCeiling && !hasDecimal) {\r\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\r\n pathValue[index]\r\n }\" invalid float exponent`;\r\n return;\r\n }\r\n\r\n index += 1;\r\n\r\n ch = pathValue.charCodeAt(index);\r\n\r\n if (ch === 0x2b /* + */ || ch === 0x2d /* - */) {\r\n index += 1;\r\n }\r\n if (index < max && isDigit(pathValue.charCodeAt(index))) {\r\n while (index < max && isDigit(pathValue.charCodeAt(index))) {\r\n index += 1;\r\n }\r\n } else {\r\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\r\n pathValue[index]\r\n }\" invalid integer exponent`;\r\n return;\r\n }\r\n }\r\n\r\n path.index = index;\r\n path.param = +path.pathValue.slice(start, index);\r\n};\r\nexport default scanParam;\r\n","import type { SpaceNumber } from \"../types\";\r\n\r\n/**\r\n * Checks if the character is a space.\r\n *\r\n * @param ch the character to check\r\n * @returns check result\r\n */\r\n\r\nconst isSpace = (ch: number): ch is SpaceNumber => {\r\n const allSpaces = [\r\n // Special spaces\r\n 0x1680,\r\n 0x180e,\r\n 0x2000,\r\n 0x2001,\r\n 0x2002,\r\n 0x2003,\r\n 0x2004,\r\n 0x2005,\r\n 0x2006,\r\n 0x2007,\r\n 0x2008,\r\n 0x2009,\r\n 0x200a,\r\n 0x202f,\r\n 0x205f,\r\n 0x3000,\r\n 0xfeff,\r\n // Line terminators\r\n 0x0a,\r\n 0x0d,\r\n 0x2028,\r\n 0x2029,\r\n // White spaces\r\n 0x20,\r\n 0x09,\r\n 0x0b,\r\n 0x0c,\r\n 0xa0,\r\n ];\r\n\r\n return allSpaces.includes(ch);\r\n};\r\nexport default isSpace;\r\n","import isSpace from \"./isSpace\";\r\nimport type PathParser from \"./pathParser\";\r\n\r\n/**\r\n * Points the parser to the next character in the\r\n * path string every time it encounters any kind of\r\n * space character.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst skipSpaces = (path: PathParser) => {\r\n const { pathValue, max } = path;\r\n while (path.index < max && isSpace(pathValue.charCodeAt(path.index))) {\r\n path.index += 1;\r\n }\r\n};\r\nexport default skipSpaces;\r\n","import type { PathCommandNumber } from \"../types\";\r\n\r\n/**\r\n * Checks if the character is a path command.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isPathCommand = (code: number): code is PathCommandNumber => {\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\r\n switch (code | 0x20) {\r\n case 0x6d /* m */:\r\n case 0x7a /* z */:\r\n case 0x6c /* l */:\r\n case 0x68 /* h */:\r\n case 0x76 /* v */:\r\n case 0x63 /* c */:\r\n case 0x73 /* s */:\r\n case 0x71 /* q */:\r\n case 0x74 /* t */:\r\n case 0x61 /* a */:\r\n // case 0x72/* r */:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n};\r\nexport default isPathCommand;\r\n","import isDigit from \"./isDigit\";\r\nimport type { DigitNumber } from \"../types\";\r\n\r\n/**\r\n * Checks if the character is or belongs to a number.\r\n * [0-9]|+|-|.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isDigitStart = (\r\n code: number,\r\n): code is DigitNumber | 0x2b | 0x2d | 0x2e => {\r\n return isDigit(code) /* 0..9 */ || code === 0x2b /* + */ ||\r\n code === 0x2d /* - */ || code === 0x2e; /* . */\r\n};\r\nexport default isDigitStart;\r\n","/**\r\n * Checks if the character is an A (arc-to) path command.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isArcCommand = (code: number): code is 0x61 => {\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\r\n return (code | 0x20) === 0x61;\r\n};\r\nexport default isArcCommand;\r\n","/**\r\n * Checks if the character is a MoveTo command.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isMoveCommand = (code: number): code is 0x6d | 0x4d => {\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\r\n switch (code | 0x20) {\r\n case 0x6d /* m */:\r\n case 0x4d /* M */:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n};\r\nexport default isMoveCommand;\r\n","import finalizeSegment from \"./finalizeSegment\";\r\nimport paramCounts from \"./paramsCount\";\r\nimport scanFlag from \"./scanFlag\";\r\nimport scanParam from \"./scanParam\";\r\nimport skipSpaces from \"./skipSpaces\";\r\nimport isPathCommand from \"./isPathCommand\";\r\nimport isDigitStart from \"./isDigitStart\";\r\nimport isArcCommand from \"./isArcCommand\";\r\nimport isMoveCommand from \"./isMoveCommand\";\r\nimport invalidPathValue from \"./invalidPathValue\";\r\nimport error from \"./error\";\r\n\r\nimport type PathParser from \"./pathParser\";\r\nimport type { PathSegment, RelativeCommand } from \"../types\";\r\n\r\n/**\r\n * Scans every character in the path string to determine\r\n * where a segment starts and where it ends.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst scanSegment = (path: PathParser) => {\r\n const { max, pathValue, index, segments } = path;\r\n const cmdCode = pathValue.charCodeAt(index);\r\n const reqParams =\r\n paramCounts[pathValue[index].toLowerCase() as RelativeCommand];\r\n\r\n path.segmentStart = index;\r\n\r\n // segments always start with a path command\r\n if (!isPathCommand(cmdCode)) {\r\n path.err = `${error}: ${invalidPathValue} \"${\r\n pathValue[index]\r\n }\" is not a path command at index ${index}`;\r\n return;\r\n }\r\n\r\n // after a Z segment, we only expect a MoveTo path command\r\n const lastSegment = segments[segments.length - 1] as PathSegment | undefined;\r\n if (\r\n !isMoveCommand(cmdCode) && lastSegment?.[0]?.toLocaleLowerCase() === \"z\"\r\n ) {\r\n path.err = `${error}: ${invalidPathValue} \"${\r\n pathValue[index]\r\n }\" is not a MoveTo path command at index ${index}`;\r\n return;\r\n }\r\n\r\n path.index += 1;\r\n skipSpaces(path);\r\n\r\n path.data = [];\r\n\r\n if (!reqParams) {\r\n // Z\r\n finalizeSegment(path);\r\n return;\r\n }\r\n\r\n for (;;) {\r\n for (let i = reqParams; i > 0; i -= 1) {\r\n if (isArcCommand(cmdCode) && (i === 3 || i === 4)) scanFlag(path);\r\n else scanParam(path);\r\n\r\n if (path.err.length) {\r\n return;\r\n }\r\n path.data.push(path.param);\r\n\r\n skipSpaces(path);\r\n\r\n // after ',' param is mandatory\r\n if (\r\n path.index < max && pathValue.charCodeAt(path.index) === 0x2c /* , */\r\n ) {\r\n path.index += 1;\r\n skipSpaces(path);\r\n }\r\n }\r\n\r\n if (path.index >= path.max) {\r\n break;\r\n }\r\n\r\n // Stop on next segment\r\n if (!isDigitStart(pathValue.charCodeAt(path.index))) {\r\n break;\r\n }\r\n }\r\n\r\n finalizeSegment(path);\r\n};\r\nexport default scanSegment;\r\n","import type { PathArray, PathSegment } from \"../types\";\r\n\r\n/**\r\n * The `PathParser` is used by the `parsePathString` static method\r\n * to generate a `pathArray`.\r\n *\r\n * @param pathString\r\n */\r\nexport default class PathParser {\r\n declare segments: PathArray | PathSegment[];\r\n declare pathValue: string;\r\n declare max: number;\r\n declare index: number;\r\n declare param: number;\r\n declare segmentStart: number;\r\n declare data: (string | number)[];\r\n declare err: string;\r\n\r\n constructor(pathString: string) {\r\n this.segments = [];\r\n this.pathValue = pathString;\r\n this.max = pathString.length;\r\n this.index = 0;\r\n this.param = 0.0;\r\n this.segmentStart = 0;\r\n this.data = [];\r\n this.err = \"\";\r\n }\r\n}\r\n","import scanSegment from \"./scanSegment\";\r\nimport skipSpaces from \"./skipSpaces\";\r\nimport PathParser from \"./pathParser\";\r\nimport type { PathArray } from \"../types\";\r\n\r\n/**\r\n * Parses a path string value and returns an array\r\n * of segments we like to call `pathArray`.\r\n *\r\n * @param pathInput the string to be parsed\r\n * @returns the resulted `pathArray` or error string\r\n */\r\nconst parsePathString = (pathInput: string | T) => {\r\n if (typeof pathInput !== \"string\") {\r\n return pathInput.slice(0) as typeof pathInput;\r\n }\r\n\r\n const path = new PathParser(pathInput);\r\n\r\n skipSpaces(path);\r\n\r\n while (path.index < path.max && !path.err.length) {\r\n scanSegment(path);\r\n }\r\n\r\n if (path?.err.length) {\r\n throw TypeError(path.err);\r\n }\r\n // force absolute first M\r\n path.segments[0][0]='M';\r\n return path.segments as PathArray;\r\n};\r\n\r\nexport default parsePathString;\r\n","import type {\r\n AbsoluteCommand,\r\n AbsoluteSegment,\r\n ASegment,\r\n CSegment,\r\n HSegment,\r\n LSegment,\r\n MSegment,\r\n PathSegment,\r\n QSegment,\r\n SSegment,\r\n TSegment,\r\n VSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Returns an absolute segment of a `PathArray` object.\r\n *\r\n * @param segment the segment object\r\n * @param index the segment index\r\n * @param lastX the last known X value\r\n * @param lastY the last known Y value\r\n * @returns the absolute segment\r\n */\r\nconst absolutizeSegment = (\r\n segment: PathSegment,\r\n index: number,\r\n lastX: number,\r\n lastY: number,\r\n) => {\r\n const [pathCommand] = segment;\r\n const absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\r\n const isAbsolute = absCommand === pathCommand;\r\n\r\n /* istanbul ignore else @preserve */\r\n if (index === 0 || isAbsolute) return segment as MSegment | AbsoluteSegment;\r\n // const values = segment.slice(1) as number[];\r\n if (absCommand === \"A\") {\r\n return [\r\n absCommand,\r\n segment[1],\r\n segment[2],\r\n segment[3],\r\n segment[4],\r\n segment[5],\r\n (segment as ASegment)[6] + lastX,\r\n (segment as ASegment)[7] + lastY,\r\n ] as ASegment;\r\n } else if (absCommand === \"V\") {\r\n return [absCommand, (segment as VSegment)[1] + lastY] as VSegment;\r\n } else if (absCommand === \"H\") {\r\n return [absCommand, (segment as HSegment)[1] + lastX] as HSegment;\r\n } else if (absCommand === \"L\") {\r\n return [\r\n absCommand,\r\n (segment as LSegment)[1] + lastX,\r\n (segment as LSegment)[2] + lastY,\r\n ] as LSegment;\r\n } else {\r\n // use brakets for `eslint: no-case-declaration`\r\n // https://stackoverflow.com/a/50753272/803358\r\n const absValues = [] as number[];\r\n const seglen = segment.length;\r\n for (let j = 1; j < seglen; j += 1) {\r\n absValues.push((segment[j] as number) + (j % 2 ? lastX : lastY));\r\n }\r\n // for c, s, q, t\r\n return [absCommand as typeof absCommand | number].concat(absValues) as\r\n | MSegment\r\n | QSegment\r\n | TSegment\r\n | SSegment\r\n | CSegment;\r\n }\r\n};\r\nexport default absolutizeSegment;\r\n","// import paramsParser from '../parser/paramsParser';\r\nimport type {\r\n AbsoluteCommand,\r\n IteratorCallback,\r\n PathArray,\r\n PathCommand,\r\n PathSegment,\r\n} from \"../types\";\r\n\r\nconst iterate = (\r\n path: PathArray,\r\n iterator: IteratorCallback,\r\n) => {\r\n let pathLen = path.length;\r\n let segment: PathSegment;\r\n let pathCommand = \"M\" as PathCommand;\r\n let absCommand = \"M\" as AbsoluteCommand;\r\n let isRelative = false;\r\n let x = 0;\r\n let y = 0;\r\n let mx = 0;\r\n let my = 0;\r\n let segLen = 0;\r\n\r\n for (let i = 0; i < pathLen; i += 1) {\r\n segment = path[i];\r\n [pathCommand] = segment;\r\n segLen = segment.length;\r\n absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\r\n isRelative = absCommand !== pathCommand;\r\n\r\n const iteratorResult = iterator(segment, i, x, y);\r\n // some methods like getPointAtLength would like to break\r\n // when task is complete\r\n if (iteratorResult === false) {\r\n break;\r\n }\r\n\r\n // segment = path[i];\r\n if (absCommand === \"Z\") {\r\n x = mx;\r\n y = my;\r\n } else if (absCommand === \"H\") {\r\n x = (segment[1] as number) + (isRelative ? x : 0);\r\n } else if (absCommand === \"V\") {\r\n y = (segment[1] as number) + (isRelative ? y : 0);\r\n } else {\r\n x = (segment[segLen - 2] as number) + (isRelative ? x : 0);\r\n y = (segment[segLen - 1] as number) + (isRelative ? y : 0);\r\n\r\n if (absCommand === \"M\") {\r\n mx = x;\r\n my = y;\r\n }\r\n }\r\n\r\n if (iteratorResult) {\r\n path[i] = iteratorResult;\r\n if (iteratorResult[0] === \"C\") {\r\n pathLen = path.length;\r\n }\r\n }\r\n }\r\n return path as T;\r\n};\r\n\r\nexport default iterate;\r\n","import parsePathString from \"../parser/parsePathString\";\r\nimport absolutizeSegment from \"../process/absolutizeSegment\";\r\nimport type { AbsoluteArray, PathArray } from \"../types\";\r\nimport iterate from \"../process/iterate\";\r\n\r\n/**\r\n * Parses a path string value or object and returns an array\r\n * of segments, all converted to absolute values.\r\n *\r\n * @param pathInput the path string | object\r\n * @returns the resulted `pathArray` with absolute values\r\n */\r\nconst pathToAbsolute = (pathInput: string | PathArray) => {\r\n const path = parsePathString(pathInput);\r\n\r\n return iterate(path, absolutizeSegment);\r\n};\r\nexport default pathToAbsolute;\r\n","import type {\r\n aSegment,\r\n cSegment,\r\n hSegment,\r\n lSegment,\r\n MSegment,\r\n PathSegment,\r\n qSegment,\r\n RelativeCommand,\r\n RelativeSegment,\r\n sSegment,\r\n tSegment,\r\n vSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Returns a relative segment of a `PathArray` object.\r\n *\r\n * @param segment the segment object\r\n * @param index the segment index\r\n * @param lastX the last known X value\r\n * @param lastY the last known Y value\r\n * @returns the relative segment\r\n */\r\nconst relativizeSegment = (\r\n segment: PathSegment,\r\n index: number,\r\n lastX: number,\r\n lastY: number,\r\n) => {\r\n const [pathCommand] = segment;\r\n const relCommand = pathCommand.toLowerCase() as RelativeCommand;\r\n const isRelative = pathCommand === relCommand;\r\n\r\n /* istanbul ignore else @preserve */\r\n if (index === 0 || isRelative) return segment as MSegment | RelativeSegment;\r\n\r\n if (relCommand === \"a\") {\r\n return [\r\n relCommand,\r\n segment[1],\r\n segment[2],\r\n segment[3],\r\n segment[4],\r\n segment[5],\r\n (segment as aSegment)[6] - lastX,\r\n (segment as aSegment)[7] - lastY,\r\n ] as aSegment;\r\n } else if (relCommand === \"v\") {\r\n return [relCommand, (segment as vSegment)[1] - lastY] as vSegment;\r\n } else if (relCommand === \"h\") {\r\n return [relCommand, (segment as hSegment)[1] - lastX] as hSegment;\r\n } else if (relCommand === \"l\") {\r\n return [\r\n relCommand,\r\n (segment as lSegment)[1] - lastX,\r\n (segment as lSegment)[2] - lastY,\r\n ] as lSegment;\r\n } else {\r\n // use brakets for `eslint: no-case-declaration`\r\n // https://stackoverflow.com/a/50753272/803358\r\n const relValues = [] as number[];\r\n const seglen = segment.length;\r\n for (let j = 1; j < seglen; j += 1) {\r\n relValues.push((segment[j] as number) - (j % 2 ? lastX : lastY));\r\n }\r\n // for c, s, q, t\r\n return [relCommand as RelativeCommand | number].concat(relValues) as\r\n | qSegment\r\n | tSegment\r\n | sSegment\r\n | cSegment;\r\n }\r\n};\r\n\r\nexport default relativizeSegment;\r\n","import type { PathArray, RelativeArray } from \"../types\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport iterate from \"../process/iterate\";\r\nimport relativizeSegment from \"../process/relativizeSegment\";\r\n\r\n/**\r\n * Parses a path string value or object and returns an array\r\n * of segments, all converted to relative values.\r\n *\r\n * @param pathInput the path string | object\r\n * @returns the resulted `pathArray` with relative values\r\n */\r\nconst pathToRelative = (pathInput: string | PathArray): RelativeArray => {\r\n const path = parsePathString(pathInput);\r\n\r\n return iterate(path, relativizeSegment);\r\n};\r\nexport default pathToRelative;\r\n","/**\r\n * Returns an {x,y} vector rotated by a given\r\n * angle in radian.\r\n *\r\n * @param x the initial vector x\r\n * @param y the initial vector y\r\n * @param rad the radian vector angle\r\n * @returns the rotated vector\r\n */\r\nconst rotateVector = (\r\n x: number,\r\n y: number,\r\n rad: number,\r\n): { x: number; y: number } => {\r\n const { sin, cos } = Math;\r\n const X = x * cos(rad) - y * sin(rad);\r\n const Y = x * sin(rad) + y * cos(rad);\r\n return { x: X, y: Y };\r\n};\r\n\r\nexport default rotateVector;\r\n","import rotateVector from \"../math/rotateVector\";\r\n\r\n/**\r\n * Converts A (arc-to) segments to C (cubic-bezier-to).\r\n *\r\n * For more information of where this math came from visit:\r\n * http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\r\n *\r\n * @param X1 the starting x position\r\n * @param Y1 the starting y position\r\n * @param RX x-radius of the arc\r\n * @param RY y-radius of the arc\r\n * @param angle x-axis-rotation of the arc\r\n * @param LAF large-arc-flag of the arc\r\n * @param SF sweep-flag of the arc\r\n * @param X2 the ending x position\r\n * @param Y2 the ending y position\r\n * @param recursive the parameters needed to split arc into 2 segments\r\n * @return the resulting cubic-bezier segment(s)\r\n */\r\nconst arcToCubic = (\r\n X1: number,\r\n Y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n X2: number,\r\n Y2: number,\r\n recursive?: [number, number, number, number],\r\n): number[] => {\r\n let x1 = X1;\r\n let y1 = Y1;\r\n let rx = RX;\r\n let ry = RY;\r\n let x2 = X2;\r\n let y2 = Y2;\r\n // for more information of where this Math came from visit:\r\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\r\n const d120 = (Math.PI * 120) / 180;\r\n\r\n const rad = (Math.PI / 180) * (+angle || 0);\r\n let res = [] as number[];\r\n let xy;\r\n let f1;\r\n let f2;\r\n let cx;\r\n let cy;\r\n\r\n if (!recursive) {\r\n xy = rotateVector(x1, y1, -rad);\r\n x1 = xy.x;\r\n y1 = xy.y;\r\n xy = rotateVector(x2, y2, -rad);\r\n x2 = xy.x;\r\n y2 = xy.y;\r\n\r\n const x = (x1 - x2) / 2;\r\n const y = (y1 - y2) / 2;\r\n let h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\r\n if (h > 1) {\r\n h = Math.sqrt(h);\r\n rx *= h;\r\n ry *= h;\r\n }\r\n const rx2 = rx * rx;\r\n const ry2 = ry * ry;\r\n\r\n const k = (LAF === SF ? -1 : 1) *\r\n Math.sqrt(\r\n Math.abs(\r\n (rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x),\r\n ),\r\n );\r\n\r\n cx = (k * rx * y) / ry + (x1 + x2) / 2;\r\n cy = (k * -ry * x) / rx + (y1 + y2) / 2;\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\r\n f1 = Math.asin(((((y1 - cy) / ry) * 10 ** 9) >> 0) / 10 ** 9);\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\r\n f2 = Math.asin(((((y2 - cy) / ry) * 10 ** 9) >> 0) / 10 ** 9);\r\n\r\n f1 = x1 < cx ? Math.PI - f1 : f1;\r\n f2 = x2 < cx ? Math.PI - f2 : f2;\r\n if (f1 < 0) f1 = Math.PI * 2 + f1;\r\n if (f2 < 0) f2 = Math.PI * 2 + f2;\r\n if (SF && f1 > f2) {\r\n f1 -= Math.PI * 2;\r\n }\r\n if (!SF && f2 > f1) {\r\n f2 -= Math.PI * 2;\r\n }\r\n } else {\r\n [f1, f2, cx, cy] = recursive;\r\n }\r\n let df = f2 - f1;\r\n if (Math.abs(df) > d120) {\r\n const f2old = f2;\r\n const x2old = x2;\r\n const y2old = y2;\r\n f2 = f1 + d120 * (SF && f2 > f1 ? 1 : -1);\r\n x2 = cx + rx * Math.cos(f2);\r\n y2 = cy + ry * Math.sin(f2);\r\n res = arcToCubic(x2, y2, rx, ry, angle, 0, SF, x2old, y2old, [\r\n f2,\r\n f2old,\r\n cx,\r\n cy,\r\n ]);\r\n }\r\n df = f2 - f1;\r\n const c1 = Math.cos(f1);\r\n const s1 = Math.sin(f1);\r\n const c2 = Math.cos(f2);\r\n const s2 = Math.sin(f2);\r\n const t = Math.tan(df / 4);\r\n const hx = (4 / 3) * rx * t;\r\n const hy = (4 / 3) * ry * t;\r\n const m1 = [x1, y1];\r\n const m2 = [x1 + hx * s1, y1 - hy * c1];\r\n const m3 = [x2 + hx * s2, y2 - hy * c2];\r\n const m4 = [x2, y2];\r\n m2[0] = 2 * m1[0] - m2[0];\r\n m2[1] = 2 * m1[1] - m2[1];\r\n if (recursive) {\r\n return [m2[0], m2[1], m3[0], m3[1], m4[0], m4[1]].concat(res);\r\n }\r\n res = [m2[0], m2[1], m3[0], m3[1], m4[0], m4[1]].concat(res);\r\n const newres = [];\r\n for (let i = 0, ii = res.length; i < ii; i += 1) {\r\n newres[i] = i % 2\r\n ? rotateVector(res[i - 1], res[i], rad).y\r\n : rotateVector(res[i], res[i + 1], rad).x;\r\n }\r\n return newres;\r\n};\r\nexport default arcToCubic;\r\n","/**\r\n * Converts a Q (quadratic-bezier) segment to C (cubic-bezier).\r\n *\r\n * @param x1 curve start x\r\n * @param y1 curve start y\r\n * @param qx control point x\r\n * @param qy control point y\r\n * @param x2 curve end x\r\n * @param y2 curve end y\r\n * @returns the cubic-bezier segment\r\n */\r\nconst quadToCubic = (\r\n x1: number,\r\n y1: number,\r\n qx: number,\r\n qy: number,\r\n x2: number,\r\n y2: number,\r\n): [number, number, number, number, number, number] => {\r\n const r13 = 1 / 3;\r\n const r23 = 2 / 3;\r\n return [\r\n r13 * x1 + r23 * qx, // cpx1\r\n r13 * y1 + r23 * qy, // cpy1\r\n r13 * x2 + r23 * qx, // cpx2\r\n r13 * y2 + r23 * qy, // cpy2\r\n x2,\r\n y2, // x,y\r\n ];\r\n};\r\nexport default quadToCubic;\r\n","import { PointTuple } from \"../types\";\r\n\r\n/**\r\n * Returns the coordinates of a specified distance\r\n * ratio between two points.\r\n *\r\n * @param a the first point coordinates\r\n * @param b the second point coordinates\r\n * @param t the ratio\r\n * @returns the midpoint coordinates\r\n */\r\nconst midPoint = (a: PointTuple, b: PointTuple, t: number): PointTuple => {\r\n const [ax, ay] = a;\r\n const [bx, by] = b;\r\n return [ax + (bx - ax) * t, ay + (by - ay) * t];\r\n};\r\n\r\nexport default midPoint;\r\n","import midPoint from \"../math/midPoint\";\r\n\r\n/**\r\n * Converts an L (line-to) segment to C (cubic-bezier).\r\n *\r\n * @param x1 line start x\r\n * @param y1 line start y\r\n * @param x2 line end x\r\n * @param y2 line end y\r\n * @returns the cubic-bezier segment\r\n */\r\nconst lineToCubic = (x1: number, y1: number, x2: number, y2: number) => {\r\n const c1 = midPoint([x1, y1], [x2, y2], 1.0 / 3.0);\r\n const c2 = midPoint([x1, y1], [x2, y2], 2.0 / 3.0);\r\n return [c1[0], c1[1], c2[0], c2[1], x2, y2];\r\n};\r\nexport default lineToCubic;\r\n","import arcToCubic from \"./arcToCubic\";\r\nimport quadToCubic from \"./quadToCubic\";\r\nimport lineToCubic from \"./lineToCubic\";\r\nimport type { CSegment, MSegment, PathSegment } from \"../types\";\r\nimport type { ParserParams } from \"../interface\";\r\n\r\n/**\r\n * Converts any segment to C (cubic-bezier).\r\n *\r\n * @param segment the source segment\r\n * @param params the source segment parameters\r\n * @returns the cubic-bezier segment\r\n */\r\nconst segmentToCubic = (segment: PathSegment, params: ParserParams) => {\r\n const [pathCommand] = segment;\r\n const values = segment.slice(1).map(Number);\r\n const [x, y] = values;\r\n // let args;\r\n const { x1: px1, y1: py1, x: px, y: py } = params;\r\n\r\n if (!\"TQ\".includes(pathCommand)) {\r\n params.qx = null;\r\n params.qy = null;\r\n }\r\n\r\n if (pathCommand === \"M\") {\r\n params.x = x;\r\n params.y = y;\r\n return segment;\r\n } else if (pathCommand === \"A\") {\r\n return [\"C\" as string | number].concat(\r\n arcToCubic(\r\n px1,\r\n py1,\r\n values[0],\r\n values[1],\r\n values[2],\r\n values[3],\r\n values[4],\r\n values[5],\r\n values[6],\r\n ),\r\n ) as CSegment;\r\n } else if (pathCommand === \"Q\") {\r\n params.qx = x;\r\n params.qy = y;\r\n return [\"C\" as string | number].concat(\r\n quadToCubic(px1, py1, values[0], values[1], values[2], values[3]),\r\n ) as CSegment;\r\n } else if (pathCommand === \"L\") {\r\n return [\"C\" as string | number].concat(\r\n lineToCubic(px1, py1, x, y),\r\n ) as CSegment;\r\n } else if (pathCommand === \"Z\") {\r\n return [\"C\" as string | number].concat(\r\n lineToCubic(px1, py1, px, py),\r\n ) as CSegment;\r\n }\r\n\r\n return segment as MSegment | CSegment;\r\n};\r\nexport default segmentToCubic;\r\n","import type { ParserParams } from \"../interface\";\r\nimport type {\r\n ASegment,\r\n CSegment,\r\n HSegment,\r\n LSegment,\r\n MSegment,\r\n NormalSegment,\r\n PathCommand,\r\n PathSegment,\r\n PointTuple,\r\n QSegment,\r\n VSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Normalizes a single segment of a `pathArray` object.\r\n *\r\n * @param segment the segment object\r\n * @param params the normalization parameters\r\n * @returns the normalized segment\r\n */\r\nconst normalizeSegment = (segment: PathSegment, params: ParserParams) => {\r\n const [pathCommand] = segment;\r\n const absCommand = pathCommand.toUpperCase();\r\n const isRelative = pathCommand !== absCommand;\r\n const { x1: px1, y1: py1, x2: px2, y2: py2, x, y } = params;\r\n const values = segment.slice(1) as number[];\r\n let absValues = values.map((n, j) => n + (isRelative ? (j % 2 ? y : x) : 0));\r\n\r\n if (!\"TQ\".includes(absCommand)) {\r\n // optional but good to be cautious\r\n params.qx = null;\r\n params.qy = null;\r\n }\r\n\r\n // istanbul ignore else @preserve\r\n if (absCommand === \"A\") {\r\n absValues = values.slice(0, -2).concat(\r\n values[5] + (isRelative ? x : 0),\r\n values[6] + (isRelative ? y : 0),\r\n );\r\n\r\n return [\"A\" as PathCommand | number].concat(absValues) as ASegment;\r\n } else if (absCommand === \"H\") {\r\n return [\r\n \"L\",\r\n (segment as HSegment)[1] + (isRelative ? x : 0),\r\n py1,\r\n ] as LSegment;\r\n } else if (absCommand === \"V\") {\r\n return [\r\n \"L\",\r\n px1,\r\n (segment as VSegment)[1] + (isRelative ? y : 0),\r\n ] as LSegment;\r\n } else if (absCommand === \"L\") {\r\n return [\r\n \"L\",\r\n (segment as LSegment)[1] + (isRelative ? x : 0),\r\n (segment as LSegment)[2] + (isRelative ? y : 0),\r\n ] as LSegment;\r\n } else if (absCommand === \"M\") {\r\n return [\r\n \"M\",\r\n (segment as MSegment)[1] + (isRelative ? x : 0),\r\n (segment as MSegment)[2] + (isRelative ? y : 0),\r\n ] as MSegment;\r\n } else if (absCommand === \"C\") {\r\n return [\"C\" as PathCommand | number].concat(absValues) as CSegment;\r\n } else if (absCommand === \"S\") {\r\n const x1 = px1 * 2 - px2;\r\n const y1 = py1 * 2 - py2;\r\n params.x1 = x1;\r\n params.y1 = y1;\r\n return [\"C\", x1, y1].concat(absValues) as CSegment;\r\n } else if (absCommand === \"T\") {\r\n const qx = px1 * 2 - (params.qx ? params.qx : /* istanbul ignore next */ 0);\r\n const qy = py1 * 2 - (params.qy ? params.qy : /* istanbul ignore next */ 0);\r\n params.qx = qx;\r\n params.qy = qy;\r\n return [\"Q\", qx, qy].concat(absValues) as QSegment;\r\n } else if (absCommand === \"Q\") {\r\n const [nqx, nqy] = absValues as PointTuple;\r\n params.qx = nqx;\r\n params.qy = nqy;\r\n return [\"Q\" as PathCommand | number].concat(absValues) as QSegment;\r\n } else if (absCommand === \"Z\") {\r\n return [\"Z\"] as NormalSegment;\r\n }\r\n\r\n // istanbul ignore next @preserve\r\n return segment as NormalSegment;\r\n};\r\nexport default normalizeSegment;\r\n","import type { ParserParams } from \"../interface\";\r\n\r\nconst paramsParser: ParserParams = {\r\n x1: 0,\r\n y1: 0,\r\n x2: 0,\r\n y2: 0,\r\n x: 0,\r\n y: 0,\r\n qx: null,\r\n qy: null,\r\n};\r\n\r\nexport default paramsParser;\r\n","import segmentToCubic from \"../process/segmentToCubic\";\r\nimport { AbsoluteCommand, CSegment, CurveArray, PathArray } from \"../types\";\r\nimport iterate from \"../process/iterate\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport normalizeSegment from \"../process/normalizeSegment\";\r\nimport paramsParser from \"../parser/paramsParser\";\r\n\r\n/**\r\n * Parses a path string value or 'pathArray' and returns a new one\r\n * in which all segments are converted to cubic-bezier.\r\n *\r\n * In addition, un-necessary `Z` segment is removed if previous segment\r\n * extends to the `M` segment.\r\n *\r\n * @param pathInput the string to be parsed or 'pathArray'\r\n * @returns the resulted `pathArray` converted to cubic-bezier\r\n */\r\nconst pathToCurve = (pathInput: string | PathArray): CurveArray => {\r\n const params = { ...paramsParser };\r\n const path = parsePathString(pathInput);\r\n\r\n return iterate(path, (seg, index, lastX, lastY) => {\r\n params.x = lastX;\r\n params.y = lastY;\r\n const normalSegment = normalizeSegment(seg, params);\r\n let result = segmentToCubic(normalSegment, params);\r\n const isLongArc = result[0] === \"C\" && result.length > 7;\r\n\r\n if (isLongArc) {\r\n path.splice(\r\n index + 1,\r\n 0,\r\n [\"C\" as AbsoluteCommand | number].concat(result.slice(7)) as CSegment,\r\n );\r\n result = result.slice(0, 7) as CSegment;\r\n }\r\n\r\n const seglen = result.length;\r\n params.x1 = +result[seglen - 2];\r\n params.y1 = +result[seglen - 1];\r\n params.x2 = +result[seglen - 4] || params.x1;\r\n params.y2 = +result[seglen - 3] || params.y1;\r\n\r\n return result;\r\n });\r\n};\r\nexport default pathToCurve;\r\n","const roundTo = (n: number, round: number) => {\r\n const pow = round >= 1 ? 10 ** round : 1;\r\n\r\n return round > 0 ? Math.round(n * pow) / pow : Math.round(n);\r\n};\r\n\r\nexport default roundTo;\r\n","import type { PathArray, PathSegment } from \"../types\";\r\nimport defaultOptions from \"../options/options\";\r\nimport roundTo from \"../math/roundTo\";\r\n\r\n/**\r\n * Returns a valid `d` attribute string value created\r\n * by rounding values and concatenating the `pathArray` segments.\r\n *\r\n * @param path the `pathArray` object\r\n * @param roundOption amount of decimals to round values to\r\n * @returns the concatenated path string\r\n */\r\nconst pathToString = (\r\n path: PathArray,\r\n roundOption?: number | \"off\",\r\n): string => {\r\n const pathLen = path.length;\r\n let { round } = defaultOptions;\r\n let segment = path[0] as PathSegment;\r\n let result = \"\";\r\n\r\n // allow for ZERO decimals\r\n round = roundOption === \"off\"\r\n ? roundOption\r\n : typeof roundOption === \"number\" && roundOption >= 0\r\n ? roundOption\r\n : typeof round === \"number\" && round >= 0\r\n ? round\r\n : /* istanbul ignore next @preserve */ \"off\";\r\n\r\n for (let i = 0; i < pathLen; i += 1) {\r\n segment = path[i];\r\n const [pathCommand] = segment;\r\n const values = segment.slice(1) as number[];\r\n result += pathCommand;\r\n if (round === \"off\") {\r\n result += values.join(\" \");\r\n } else {\r\n let j = 0;\r\n const valLen = values.length;\r\n while (j < valLen) {\r\n result += roundTo(values[j], round);\r\n if (j !== valLen - 1) result += \" \";\r\n j += 1;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport default pathToString;\r\n","import { type PointTuple } from \"../types\";\r\n\r\n/**\r\n * Returns the square root of the distance\r\n * between two given points.\r\n *\r\n * @param a the first point coordinates\r\n * @param b the second point coordinates\r\n * @returns the distance value\r\n */\r\nconst distanceSquareRoot = (a: PointTuple, b: PointTuple) => {\r\n return Math.sqrt(\r\n (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]),\r\n );\r\n};\r\n\r\nexport default distanceSquareRoot;\r\n","import midPoint from \"./midPoint\";\r\nimport distanceSquareRoot from \"./distanceSquareRoot\";\r\n\r\n/**\r\n * Returns length for line segments (MoveTo, LineTo).\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the line segment length\r\n */\r\nconst getLineLength = (x1: number, y1: number, x2: number, y2: number) => {\r\n return distanceSquareRoot([x1, y1], [x2, y2]);\r\n};\r\n\r\n/**\r\n * Returns a point along the line segments (MoveTo, LineTo).\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance the distance to point in [0-1] range\r\n * @returns the point at length\r\n */\r\nconst getPointAtLineLength = (\r\n x1: number,\r\n y1: number,\r\n x2: number,\r\n y2: number,\r\n distance?: number,\r\n) => {\r\n let point = { x: x1, y: y1 };\r\n\r\n /* istanbul ignore else @preserve */\r\n if (typeof distance === \"number\") {\r\n const length = distanceSquareRoot([x1, y1], [x2, y2]);\r\n if (distance <= 0) {\r\n point = { x: x1, y: y1 };\r\n } else if (distance >= length) {\r\n point = { x: x2, y: y2 };\r\n } else {\r\n const [x, y] = midPoint([x1, y1], [x2, y2], distance / length);\r\n point = { x, y };\r\n }\r\n }\r\n return point;\r\n};\r\n\r\n/**\r\n * Returns bounding box for line segments (MoveTo, LineTo).\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance the distance to point in [0-1] range\r\n * @returns the extrema for line segments\r\n */\r\nconst getLineBBox = (x1: number, y1: number, x2: number, y2: number) => {\r\n const { min, max } = Math;\r\n\r\n return [min(x1, x2), min(y1, y2), max(x1, x2), max(y1, y2)] as [\r\n number,\r\n number,\r\n number,\r\n number,\r\n ];\r\n};\r\n\r\nexport { getLineBBox, getLineLength, getPointAtLineLength };\r\n","import { getPointAtLineLength } from \"./lineTools\";\r\nimport type { Point, PointTuple } from \"../types\";\r\n\r\n/**\r\n * Returns the Arc segment length.\r\n * @param rx radius along X axis\r\n * @param ry radius along Y axis\r\n * @param theta the angle in radians\r\n * @returns the arc length\r\n */\r\nconst arcLength = (rx: number, ry: number, theta: number) => {\r\n const halfTheta = theta / 2;\r\n const sinHalfTheta = Math.sin(halfTheta);\r\n const cosHalfTheta = Math.cos(halfTheta);\r\n const term1 = rx ** 2 * sinHalfTheta ** 2;\r\n const term2 = ry ** 2 * cosHalfTheta ** 2;\r\n const length = Math.sqrt(term1 + term2) * theta;\r\n return Math.abs(length);\r\n};\r\n\r\n/**\r\n * Find point on ellipse at given angle around ellipse (theta);\r\n * @param cx the center X\r\n * @param cy the center Y\r\n * @param rx the radius X\r\n * @param ry the radius Y\r\n * @param alpha the arc rotation angle in radians\r\n * @param theta the arc sweep angle in radians\r\n * @returns a point around ellipse at given angle\r\n */\r\nconst arcPoint = (\r\n cx: number,\r\n cy: number,\r\n rx: number,\r\n ry: number,\r\n alpha: number,\r\n theta: number,\r\n) => {\r\n const { sin, cos } = Math;\r\n // theta is angle in radians around arc\r\n // alpha is angle of rotation of ellipse in radians\r\n const cosA = cos(alpha);\r\n const sinA = sin(alpha);\r\n const x = rx * cos(theta);\r\n const y = ry * sin(theta);\r\n\r\n return [cx + cosA * x - sinA * y, cy + sinA * x + cosA * y] as PointTuple;\r\n};\r\n\r\n/**\r\n * Returns the angle between two points.\r\n * @param v0 starting point\r\n * @param v1 ending point\r\n * @returns the angle in radian\r\n */\r\nconst angleBetween = (v0: Point, v1: Point) => {\r\n const { x: v0x, y: v0y } = v0;\r\n const { x: v1x, y: v1y } = v1;\r\n const p = v0x * v1x + v0y * v1y;\r\n const n = Math.sqrt((v0x ** 2 + v0y ** 2) * (v1x ** 2 + v1y ** 2));\r\n const sign = v0x * v1y - v0y * v1x < 0 ? -1 : 1;\r\n return sign * Math.acos(p / n);\r\n};\r\n\r\n/**\r\n * Returns the following properties for an Arc segment: center, start angle,\r\n * end angle, and radiuses on X and Y axis.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param RX the radius on X axis\r\n * @param RY the radius on Y axis\r\n * @param angle the ellipse rotation in degrees\r\n * @param LAF the large arc flag\r\n * @param SF the sweep flag\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns properties specific to Arc segments\r\n */\r\nconst getArcProps = (\r\n x1: number,\r\n y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n x: number,\r\n y: number,\r\n) => {\r\n const { abs, sin, cos, sqrt, PI } = Math;\r\n let rx = abs(RX);\r\n let ry = abs(RY);\r\n const xRot = ((angle % 360) + 360) % 360;\r\n const xRotRad = xRot * (PI / 180);\r\n\r\n // istanbul ignore next @preserve\r\n if (x1 === x && y1 === y) {\r\n return {\r\n rx,\r\n ry,\r\n startAngle: 0,\r\n endAngle: 0,\r\n center: { x, y },\r\n };\r\n }\r\n\r\n if (rx === 0 || ry === 0) {\r\n return {\r\n rx,\r\n ry,\r\n startAngle: 0,\r\n endAngle: 0,\r\n center: { x: (x + x1) / 2, y: (y + y1) / 2 },\r\n };\r\n }\r\n\r\n const dx = (x1 - x) / 2;\r\n const dy = (y1 - y) / 2;\r\n\r\n const transformedPoint = {\r\n x: cos(xRotRad) * dx + sin(xRotRad) * dy,\r\n y: -sin(xRotRad) * dx + cos(xRotRad) * dy,\r\n };\r\n\r\n const radiiCheck = transformedPoint.x ** 2 / rx ** 2 +\r\n transformedPoint.y ** 2 / ry ** 2;\r\n\r\n if (radiiCheck > 1) {\r\n rx *= sqrt(radiiCheck);\r\n ry *= sqrt(radiiCheck);\r\n }\r\n\r\n const cSquareNumerator = rx ** 2 * ry ** 2 -\r\n rx ** 2 * transformedPoint.y ** 2 - ry ** 2 * transformedPoint.x ** 2;\r\n const cSquareRootDenom = rx ** 2 * transformedPoint.y ** 2 +\r\n ry ** 2 * transformedPoint.x ** 2;\r\n\r\n let cRadicand = cSquareNumerator / cSquareRootDenom;\r\n /* istanbul ignore next @preserve */\r\n cRadicand = cRadicand < 0 ? 0 : cRadicand;\r\n const cCoef = (LAF !== SF ? 1 : -1) * sqrt(cRadicand);\r\n const transformedCenter = {\r\n x: cCoef * ((rx * transformedPoint.y) / ry),\r\n y: cCoef * (-(ry * transformedPoint.x) / rx),\r\n };\r\n\r\n const center = {\r\n x: cos(xRotRad) * transformedCenter.x - sin(xRotRad) * transformedCenter.y +\r\n (x1 + x) / 2,\r\n y: sin(xRotRad) * transformedCenter.x + cos(xRotRad) * transformedCenter.y +\r\n (y1 + y) / 2,\r\n };\r\n\r\n const startVector = {\r\n x: (transformedPoint.x - transformedCenter.x) / rx,\r\n y: (transformedPoint.y - transformedCenter.y) / ry,\r\n };\r\n\r\n const startAngle = angleBetween({ x: 1, y: 0 }, startVector);\r\n\r\n const endVector = {\r\n x: (-transformedPoint.x - transformedCenter.x) / rx,\r\n y: (-transformedPoint.y - transformedCenter.y) / ry,\r\n };\r\n\r\n let sweepAngle = angleBetween(startVector, endVector);\r\n if (!SF && sweepAngle > 0) {\r\n sweepAngle -= 2 * PI;\r\n } else if (SF && sweepAngle < 0) {\r\n sweepAngle += 2 * PI;\r\n }\r\n sweepAngle %= 2 * PI;\r\n\r\n const endAngle = startAngle + sweepAngle;\r\n\r\n // point.ellipticalArcStartAngle = startAngle;\r\n // point.ellipticalArcEndAngle = startAngle + sweepAngle;\r\n // point.ellipticalArcAngle = alpha;\r\n\r\n // point.ellipticalArcCenter = center;\r\n // point.resultantRx = rx;\r\n // point.resultantRy = ry;\r\n\r\n return {\r\n center,\r\n startAngle,\r\n endAngle,\r\n rx,\r\n ry,\r\n };\r\n};\r\n\r\n/**\r\n * Returns the length of an Arc segment.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the length of the Arc segment\r\n */\r\nconst getArcLength = (\r\n x1: number,\r\n y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n x: number,\r\n y: number,\r\n) => {\r\n const { rx, ry, startAngle, endAngle } = getArcProps(\r\n x1,\r\n y1,\r\n RX,\r\n RY,\r\n angle,\r\n LAF,\r\n SF,\r\n x,\r\n y,\r\n );\r\n return arcLength(rx, ry, endAngle - startAngle);\r\n};\r\n\r\n/**\r\n * Returns a point along an Arc segment at a given distance.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param RX the radius on X axis\r\n * @param RY the radius on Y axis\r\n * @param angle the ellipse rotation in degrees\r\n * @param LAF the large arc flag\r\n * @param SF the sweep flag\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance a [0-1] ratio\r\n * @returns a point along the Arc segment\r\n */\r\nconst getPointAtArcLength = (\r\n x1: number,\r\n y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n x: number,\r\n y: number,\r\n distance?: number,\r\n) => {\r\n let point = { x: x1, y: y1 };\r\n const { center, rx, ry, startAngle, endAngle } = getArcProps(\r\n x1,\r\n y1,\r\n RX,\r\n RY,\r\n angle,\r\n LAF,\r\n SF,\r\n x,\r\n y,\r\n );\r\n\r\n /* istanbul ignore else @preserve */\r\n if (typeof distance === \"number\") {\r\n const length = arcLength(rx, ry, endAngle - startAngle);\r\n if (distance <= 0) {\r\n point = { x: x1, y: y1 };\r\n } else if (distance >= length) {\r\n point = { x, y };\r\n } else {\r\n /* istanbul ignore next @preserve */\r\n if (x1 === x && y1 === y) {\r\n return { x, y };\r\n }\r\n /* istanbul ignore next @preserve */\r\n if (rx === 0 || ry === 0) {\r\n return getPointAtLineLength(x1, y1, x, y, distance);\r\n }\r\n const { PI, cos, sin } = Math;\r\n const sweepAngle = endAngle - startAngle;\r\n const xRot = ((angle % 360) + 360) % 360;\r\n const xRotRad = xRot * (PI / 180);\r\n const alpha = startAngle + sweepAngle * (distance / length);\r\n const ellipseComponentX = rx * cos(alpha);\r\n const ellipseComponentY = ry * sin(alpha);\r\n\r\n point = {\r\n x: cos(xRotRad) * ellipseComponentX - sin(xRotRad) * ellipseComponentY +\r\n center.x,\r\n y: sin(xRotRad) * ellipseComponentX + cos(xRotRad) * ellipseComponentY +\r\n center.y,\r\n };\r\n }\r\n }\r\n\r\n return point;\r\n};\r\n\r\n/**\r\n * Returns the extrema for an Arc segment in the following format:\r\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\r\n *\r\n * @see https://github.com/herrstrietzel/svg-pathdata-getbbox\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param RX the radius on X axis\r\n * @param RY the radius on Y axis\r\n * @param angle the ellipse rotation in degrees\r\n * @param LAF the large arc flag\r\n * @param SF the sweep flag\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the extrema of the Arc segment\r\n */\r\nconst getArcBBox = (\r\n x1: number,\r\n y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n x: number,\r\n y: number,\r\n) => {\r\n const { center, rx, ry, startAngle, endAngle } = getArcProps(\r\n x1,\r\n y1,\r\n RX,\r\n RY,\r\n angle,\r\n LAF,\r\n SF,\r\n x,\r\n y,\r\n );\r\n const deltaAngle = endAngle - startAngle;\r\n const { min, max, tan, atan2, PI } = Math;\r\n\r\n // circle/elipse center coordinates\r\n const { x: cx, y: cy } = center;\r\n\r\n // rotation to radians\r\n const alpha = (angle * PI) / 180;\r\n const tangent = tan(alpha);\r\n\r\n /**\r\n * find min/max from zeroes of directional derivative along x and y\r\n * along x axis\r\n */\r\n const theta = atan2(-ry * tangent, rx);\r\n const angle1 = theta;\r\n const angle2 = theta + PI;\r\n const angle3 = atan2(ry, rx * tangent);\r\n const angle4 = angle3 + PI;\r\n const xArray = [x];\r\n const yArray = [y];\r\n\r\n // inner bounding box\r\n let xMin = min(x1, x);\r\n let xMax = max(x1, x);\r\n let yMin = min(y1, y);\r\n let yMax = max(y1, y);\r\n\r\n // on path point close after start\r\n const angleAfterStart = endAngle - deltaAngle * 0.00001;\r\n const pP2 = arcPoint(cx, cy, rx, ry, alpha, angleAfterStart);\r\n\r\n // on path point close before end\r\n const angleBeforeEnd = endAngle - deltaAngle * 0.99999;\r\n const pP3 = arcPoint(cx, cy, rx, ry, alpha, angleBeforeEnd);\r\n\r\n /**\r\n * expected extremes\r\n * if leaving inner bounding box\r\n * (between segment start and end point)\r\n * otherwise exclude elliptic extreme points\r\n */\r\n\r\n // right\r\n if (pP2[0] > xMax || pP3[0] > xMax) {\r\n // get point for this theta\r\n const p1 = arcPoint(cx, cy, rx, ry, alpha, angle1);\r\n xArray.push(p1[0]);\r\n yArray.push(p1[1]);\r\n }\r\n\r\n // left\r\n if (pP2[0] < xMin || pP3[0] < xMin) {\r\n // get anti-symmetric point\r\n const p2 = arcPoint(cx, cy, rx, ry, alpha, angle2);\r\n xArray.push(p2[0]);\r\n yArray.push(p2[1]);\r\n }\r\n\r\n // top\r\n if (pP2[1] < yMin || pP3[1] < yMin) {\r\n // get anti-symmetric point\r\n const p4 = arcPoint(cx, cy, rx, ry, alpha, angle4);\r\n xArray.push(p4[0]);\r\n yArray.push(p4[1]);\r\n }\r\n\r\n // bottom\r\n if (pP2[1] > yMax || pP3[1] > yMax) {\r\n // get point for this theta\r\n const p3 = arcPoint(cx, cy, rx, ry, alpha, angle3);\r\n xArray.push(p3[0]);\r\n yArray.push(p3[1]);\r\n }\r\n\r\n xMin = min.apply([], xArray);\r\n yMin = min.apply([], yArray);\r\n xMax = max.apply([], xArray);\r\n yMax = max.apply([], yArray);\r\n\r\n return [xMin, yMin, xMax, yMax] as [number, number, number, number];\r\n};\r\n\r\nexport {\r\n angleBetween,\r\n arcLength,\r\n arcPoint,\r\n getArcBBox,\r\n getArcLength,\r\n getArcProps,\r\n getPointAtArcLength,\r\n};\r\n","import type {\r\n CubicCoordinates,\r\n CubicPoints,\r\n DeriveCallback,\r\n DerivedCubicPoints,\r\n DerivedPoint,\r\n DerivedQuadPoints,\r\n PointTuple,\r\n QuadCoordinates,\r\n QuadPoints,\r\n} from \"../types\";\r\n\r\n/**\r\n * Tools from bezier.js by Mike 'Pomax' Kamermans\r\n * @see https://github.com/Pomax/bezierjs\r\n */\r\n\r\nconst Tvalues = [\r\n -0.0640568928626056260850430826247450385909,\r\n 0.0640568928626056260850430826247450385909,\r\n -0.1911188674736163091586398207570696318404,\r\n 0.1911188674736163091586398207570696318404,\r\n -0.3150426796961633743867932913198102407864,\r\n 0.3150426796961633743867932913198102407864,\r\n -0.4337935076260451384870842319133497124524,\r\n 0.4337935076260451384870842319133497124524,\r\n -0.5454214713888395356583756172183723700107,\r\n 0.5454214713888395356583756172183723700107,\r\n -0.6480936519369755692524957869107476266696,\r\n 0.6480936519369755692524957869107476266696,\r\n -0.7401241915785543642438281030999784255232,\r\n 0.7401241915785543642438281030999784255232,\r\n -0.8200019859739029219539498726697452080761,\r\n 0.8200019859739029219539498726697452080761,\r\n -0.8864155270044010342131543419821967550873,\r\n 0.8864155270044010342131543419821967550873,\r\n -0.9382745520027327585236490017087214496548,\r\n 0.9382745520027327585236490017087214496548,\r\n -0.9747285559713094981983919930081690617411,\r\n 0.9747285559713094981983919930081690617411,\r\n -0.9951872199970213601799974097007368118745,\r\n 0.9951872199970213601799974097007368118745,\r\n];\r\n\r\nconst Cvalues = [\r\n 0.1279381953467521569740561652246953718517,\r\n 0.1279381953467521569740561652246953718517,\r\n 0.1258374563468282961213753825111836887264,\r\n 0.1258374563468282961213753825111836887264,\r\n 0.121670472927803391204463153476262425607,\r\n 0.121670472927803391204463153476262425607,\r\n 0.1155056680537256013533444839067835598622,\r\n 0.1155056680537256013533444839067835598622,\r\n 0.1074442701159656347825773424466062227946,\r\n 0.1074442701159656347825773424466062227946,\r\n 0.0976186521041138882698806644642471544279,\r\n 0.0976186521041138882698806644642471544279,\r\n 0.086190161531953275917185202983742667185,\r\n 0.086190161531953275917185202983742667185,\r\n 0.0733464814110803057340336152531165181193,\r\n 0.0733464814110803057340336152531165181193,\r\n 0.0592985849154367807463677585001085845412,\r\n 0.0592985849154367807463677585001085845412,\r\n 0.0442774388174198061686027482113382288593,\r\n 0.0442774388174198061686027482113382288593,\r\n 0.0285313886289336631813078159518782864491,\r\n 0.0285313886289336631813078159518782864491,\r\n 0.0123412297999871995468056670700372915759,\r\n 0.0123412297999871995468056670700372915759,\r\n];\r\n\r\n/**\r\n * @param points\r\n * @returns\r\n */\r\nconst deriveBezier = (points: QuadPoints | CubicPoints) => {\r\n const dpoints = [] as (DerivedCubicPoints | DerivedQuadPoints)[];\r\n for (let p = points, d = p.length, c = d - 1; d > 1; d -= 1, c -= 1) {\r\n const list = [] as unknown as DerivedCubicPoints | DerivedQuadPoints;\r\n for (let j = 0; j < c; j += 1) {\r\n list.push({\r\n x: c * (p[j + 1].x - p[j].x),\r\n y: c * (p[j + 1].y - p[j].y),\r\n t: 0,\r\n });\r\n }\r\n dpoints.push(list);\r\n p = list;\r\n }\r\n return dpoints;\r\n};\r\n\r\n/**\r\n * @param points\r\n * @param t\r\n */\r\nconst computeBezier = (\r\n points: DerivedQuadPoints | DerivedCubicPoints,\r\n t: number,\r\n) => {\r\n // shortcuts\r\n /* istanbul ignore next @preserve */\r\n if (t === 0) {\r\n points[0].t = 0;\r\n return points[0];\r\n }\r\n\r\n const order = points.length - 1;\r\n\r\n /* istanbul ignore next @preserve */\r\n if (t === 1) {\r\n points[order].t = 1;\r\n return points[order];\r\n }\r\n\r\n const mt = 1 - t;\r\n let p = points as typeof points | [\r\n DerivedPoint,\r\n DerivedPoint,\r\n DerivedPoint,\r\n DerivedPoint,\r\n ];\r\n\r\n // constant?\r\n /* istanbul ignore next @preserve */\r\n if (order === 0) {\r\n points[0].t = t;\r\n return points[0];\r\n }\r\n\r\n // linear?\r\n /* istanbul ignore else @preserve */\r\n if (order === 1) {\r\n return {\r\n x: mt * p[0].x + t * p[1].x,\r\n y: mt * p[0].y + t * p[1].y,\r\n t,\r\n };\r\n }\r\n\r\n // quadratic/cubic curve?\r\n const mt2 = mt * mt;\r\n const t2 = t * t;\r\n let a = 0;\r\n let b = 0;\r\n let c = 0;\r\n let d = 0;\r\n /* istanbul ignore else @preserve */\r\n if (order === 2) {\r\n p = [p[0], p[1], p[2], { x: 0, y: 0 } as DerivedPoint];\r\n a = mt2;\r\n b = mt * t * 2;\r\n c = t2;\r\n } else if (order === 3) {\r\n a = mt2 * mt;\r\n b = mt2 * t * 3;\r\n c = mt * t2 * 3;\r\n d = t * t2;\r\n }\r\n return {\r\n x: a * p[0].x + b * p[1].x + c * p[2].x + d * p[3].x,\r\n y: a * p[0].y + b * p[1].y + c * p[2].y + d * p[3].y,\r\n t,\r\n };\r\n};\r\n\r\nconst calculateBezier = (derivativeFn: DeriveCallback, t: number) => {\r\n const d = derivativeFn(t);\r\n const l = d.x * d.x + d.y * d.y;\r\n\r\n return Math.sqrt(l);\r\n};\r\n\r\nconst bezierLength = (derivativeFn: DeriveCallback) => {\r\n const z = 0.5;\r\n const len = Tvalues.length;\r\n\r\n let sum = 0;\r\n\r\n for (let i = 0, t; i < len; i++) {\r\n t = z * Tvalues[i] + z;\r\n sum += Cvalues[i] * calculateBezier(derivativeFn, t);\r\n }\r\n return z * sum;\r\n};\r\n\r\n/**\r\n * Returns the length of CubicBezier / Quad segment.\r\n * @param curve cubic / quad bezier segment\r\n */\r\nconst getBezierLength = (curve: CubicCoordinates | QuadCoordinates) => {\r\n const points = [] as unknown as CubicPoints | QuadPoints;\r\n for (let idx = 0, len = curve.length, step = 2; idx < len; idx += step) {\r\n points.push({\r\n x: curve[idx],\r\n y: curve[idx + 1],\r\n });\r\n }\r\n const dpoints = deriveBezier(points);\r\n return bezierLength((t: number) => {\r\n return computeBezier(dpoints[0], t);\r\n });\r\n};\r\n\r\n// Precision for consider cubic polynom as quadratic one\r\nconst CBEZIER_MINMAX_EPSILON = 0.00000001;\r\n\r\n/**\r\n * Returns the most extreme points in a Quad Bezier segment.\r\n * @param A an array which consist of X/Y values\r\n */\r\n// https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L89\r\nconst minmaxQ = ([v1, cp, v2]: [number, number, number]) => {\r\n const min = Math.min(v1, v2);\r\n const max = Math.max(v1, v2);\r\n\r\n /* istanbul ignore next @preserve */\r\n if (cp >= v1 ? v2 >= cp : v2 <= cp) {\r\n // if no extremum in ]0,1[\r\n return [min, max] as PointTuple;\r\n }\r\n\r\n // check if the extremum E is min or max\r\n const E = (v1 * v2 - cp * cp) / (v1 - 2 * cp + v2);\r\n return (E < min ? [E, max] : [min, E]) as PointTuple;\r\n};\r\n\r\n/**\r\n * Returns the most extreme points in a Cubic Bezier segment.\r\n * @param A an array which consist of X/Y values\r\n * @see https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L127\r\n */\r\nconst minmaxC = ([v1, cp1, cp2, v2]: [number, number, number, number]) => {\r\n const K = v1 - 3 * cp1 + 3 * cp2 - v2;\r\n\r\n // if the polynomial is (almost) quadratic and not cubic\r\n /* istanbul ignore next @preserve */\r\n if (Math.abs(K) < CBEZIER_MINMAX_EPSILON) {\r\n if (v1 === v2 && v1 === cp1) {\r\n // no curve, point targeting same location\r\n return [v1, v2] as PointTuple;\r\n }\r\n\r\n return minmaxQ([v1, -0.5 * v1 + 1.5 * cp1, v1 - 3 * cp1 + 3 * cp2]);\r\n }\r\n\r\n // the reduced discriminant of the derivative\r\n const T = -v1 * cp2 + v1 * v2 - cp1 * cp2 - cp1 * v2 + cp1 * cp1 + cp2 * cp2;\r\n\r\n // if the polynomial is monotone in [0,1]\r\n if (T <= 0) {\r\n return [Math.min(v1, v2), Math.max(v1, v2)] as PointTuple;\r\n }\r\n const S = Math.sqrt(T);\r\n\r\n // potential extrema\r\n let min = Math.min(v1, v2);\r\n let max = Math.max(v1, v2);\r\n\r\n const L = v1 - 2 * cp1 + cp2;\r\n // check local extrema\r\n for (let R = (L + S) / K, i = 1; i <= 2; R = (L - S) / K, i++) {\r\n // istanbul ignore next @preserve\r\n if (R > 0 && R < 1) {\r\n // if the extrema is for R in [0,1]\r\n const Q = v1 * (1 - R) * (1 - R) * (1 - R) +\r\n cp1 * 3 * (1 - R) * (1 - R) * R + cp2 * 3 * (1 - R) * R * R +\r\n v2 * R * R * R;\r\n if (Q < min) {\r\n min = Q;\r\n }\r\n if (Q > max) {\r\n max = Q;\r\n }\r\n }\r\n }\r\n\r\n return [min, max] as PointTuple;\r\n};\r\n\r\nexport {\r\n bezierLength,\r\n calculateBezier,\r\n CBEZIER_MINMAX_EPSILON,\r\n computeBezier,\r\n Cvalues,\r\n deriveBezier,\r\n getBezierLength,\r\n minmaxC,\r\n minmaxQ,\r\n Tvalues,\r\n};\r\n","import { getBezierLength, minmaxC } from \"./bezier\";\r\nimport { type CubicCoordinates } from \"../types\";\r\n\r\n/**\r\n * Returns a point at a given length of a CubicBezier segment.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param t a [0-1] ratio\r\n * @returns the point at cubic-bezier segment length\r\n */\r\nconst getPointAtCubicSegmentLength = (\r\n [x1, y1, c1x, c1y, c2x, c2y, x2, y2]: CubicCoordinates,\r\n t: number,\r\n) => {\r\n const t1 = 1 - t;\r\n return {\r\n x: t1 ** 3 * x1 + 3 * t1 ** 2 * t * c1x + 3 * t1 * t ** 2 * c2x +\r\n t ** 3 * x2,\r\n y: t1 ** 3 * y1 + 3 * t1 ** 2 * t * c1y + 3 * t1 * t ** 2 * c2y +\r\n t ** 3 * y2,\r\n };\r\n};\r\n\r\n/**\r\n * Returns the length of a CubicBezier segment.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the CubicBezier segment length\r\n */\r\nconst getCubicLength = (\r\n x1: number,\r\n y1: number,\r\n c1x: number,\r\n c1y: number,\r\n c2x: number,\r\n c2y: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n return getBezierLength([x1, y1, c1x, c1y, c2x, c2y, x2, y2]);\r\n};\r\n\r\n/**\r\n * Returns the point along a CubicBezier segment at a given distance.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance the distance to look at\r\n * @returns the point at CubicBezier length\r\n */\r\nconst getPointAtCubicLength = (\r\n x1: number,\r\n y1: number,\r\n c1x: number,\r\n c1y: number,\r\n c2x: number,\r\n c2y: number,\r\n x2: number,\r\n y2: number,\r\n distance?: number,\r\n) => {\r\n const distanceIsNumber = typeof distance === \"number\";\r\n let point = { x: x1, y: y1 };\r\n /* istanbul ignore else @preserve */\r\n if (distanceIsNumber) {\r\n const currentLength = getBezierLength([x1, y1, c1x, c1y, c2x, c2y, x2, y2]);\r\n if (distance <= 0) {\r\n // first point already defined\r\n } else if (distance >= currentLength) {\r\n point = { x: x2, y: y2 };\r\n } else {\r\n point = getPointAtCubicSegmentLength(\r\n [x1, y1, c1x, c1y, c2x, c2y, x2, y2],\r\n distance / currentLength,\r\n );\r\n }\r\n }\r\n return point;\r\n};\r\n\r\n/**\r\n * Returns the boundig box of a CubicBezier segment in the following format:\r\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the extrema of the CubicBezier segment\r\n */\r\nconst getCubicBBox = (\r\n x1: number,\r\n y1: number,\r\n c1x: number,\r\n c1y: number,\r\n c2x: number,\r\n c2y: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n const cxMinMax = minmaxC([x1, c1x, c2x, x2]);\r\n const cyMinMax = minmaxC([y1, c1y, c2y, y2]);\r\n\r\n return [cxMinMax[0], cyMinMax[0], cxMinMax[1], cyMinMax[1]] as [\r\n number,\r\n number,\r\n number,\r\n number,\r\n ];\r\n};\r\n\r\nexport {\r\n getCubicBBox,\r\n getCubicLength,\r\n getPointAtCubicLength,\r\n getPointAtCubicSegmentLength,\r\n};\r\n","import { getBezierLength, minmaxQ } from \"./bezier\";\r\nimport { type QuadCoordinates } from \"../types\";\r\n\r\n/**\r\n * Returns the {x,y} coordinates of a point at a\r\n * given length of a quadratic-bezier segment.\r\n *\r\n * @see https://github.com/substack/point-at-length\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param cx the control point X\r\n * @param cy the control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param t a [0-1] ratio\r\n * @returns the requested {x,y} coordinates\r\n */\r\nconst getPointAtQuadSegmentLength = (\r\n [x1, y1, cx, cy, x2, y2]: QuadCoordinates,\r\n t: number,\r\n) => {\r\n const t1 = 1 - t;\r\n return {\r\n x: t1 ** 2 * x1 + 2 * t1 * t * cx + t ** 2 * x2,\r\n y: t1 ** 2 * y1 + 2 * t1 * t * cy + t ** 2 * y2,\r\n };\r\n};\r\n\r\n/**\r\n * Returns the length of a QuadraticBezier segment.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param cx the control point X\r\n * @param cy the control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the QuadraticBezier segment length\r\n */\r\nconst getQuadLength = (\r\n x1: number,\r\n y1: number,\r\n cx: number,\r\n cy: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n return getBezierLength([x1, y1, cx, cy, x2, y2]);\r\n};\r\n\r\n/**\r\n * Returns the point along a QuadraticBezier segment at a given distance.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param cx the control point X\r\n * @param cy the control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance the distance to look at\r\n * @returns the point at QuadraticBezier length\r\n */\r\nconst getPointAtQuadLength = (\r\n x1: number,\r\n y1: number,\r\n cx: number,\r\n cy: number,\r\n x2: number,\r\n y2: number,\r\n distance?: number,\r\n) => {\r\n const distanceIsNumber = typeof distance === \"number\";\r\n let point = { x: x1, y: y1 };\r\n\r\n /* istanbul ignore else @preserve */\r\n if (distanceIsNumber) {\r\n const currentLength = getBezierLength([x1, y1, cx, cy, x2, y2]);\r\n if (distance <= 0) {\r\n // first point already defined\r\n } else if (distance >= currentLength) {\r\n point = { x: x2, y: y2 };\r\n } else {\r\n point = getPointAtQuadSegmentLength(\r\n [x1, y1, cx, cy, x2, y2],\r\n distance / currentLength,\r\n );\r\n }\r\n }\r\n return point;\r\n};\r\n\r\n/**\r\n * Returns the boundig box of a QuadraticBezier segment in the following format:\r\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param cx the control point X\r\n * @param cy the control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the extrema of the QuadraticBezier segment\r\n */\r\nconst getQuadBBox = (\r\n x1: number,\r\n y1: number,\r\n cx: number,\r\n cy: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n const cxMinMax = minmaxQ([x1, cx, x2]);\r\n const cyMinMax = minmaxQ([y1, cy, y2]);\r\n return [cxMinMax[0], cyMinMax[0], cxMinMax[1], cyMinMax[1]] as [\r\n number,\r\n number,\r\n number,\r\n number,\r\n ];\r\n};\r\n\r\nexport {\r\n getPointAtQuadLength,\r\n getPointAtQuadSegmentLength,\r\n getQuadBBox,\r\n getQuadLength,\r\n};\r\n","import distanceSquareRoot from \"./distanceSquareRoot\";\r\nimport { type PointTuple } from \"../types\";\r\n\r\n/**\r\n * d3-polygon-area\r\n * https://github.com/d3/d3-polygon\r\n *\r\n * Returns the area of a polygon.\r\n *\r\n * @param polygon an array of coordinates\r\n * @returns the polygon area\r\n */\r\nconst polygonArea = (polygon: PointTuple[]) => {\r\n const n = polygon.length;\r\n let i = -1;\r\n let a: PointTuple;\r\n let b = polygon[n - 1];\r\n let area = 0;\r\n\r\n /* eslint-disable-next-line */\r\n while (++i < n) {\r\n a = b;\r\n b = polygon[i];\r\n area += a[1] * b[0] - a[0] * b[1];\r\n }\r\n\r\n return area / 2;\r\n};\r\n\r\n/**\r\n * d3-polygon-length\r\n * https://github.com/d3/d3-polygon\r\n *\r\n * Returns the perimeter of a polygon.\r\n *\r\n * @param polygon an array of coordinates\r\n * @returns the polygon length\r\n */\r\nconst polygonLength = (polygon: PointTuple[]) => {\r\n return polygon.reduce((length, point, i) => {\r\n if (i) {\r\n return length + distanceSquareRoot(polygon[i - 1], point);\r\n }\r\n return 0;\r\n }, 0);\r\n};\r\n\r\nexport { polygonArea, polygonLength };\r\n","const DISTANCE_EPSILON = 0.00001;\r\n\r\nexport default DISTANCE_EPSILON;\r\n","import normalizeSegment from \"./normalizeSegment\";\r\nimport type { NormalArray, PathArray } from \"../types\";\r\nimport iterate from \"./iterate\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport paramsParser from \"../parser/paramsParser\";\r\n\r\n/**\r\n * Normalizes a `pathArray` object for further processing:\r\n * * convert segments to absolute values\r\n * * convert shorthand path commands to their non-shorthand notation\r\n *\r\n * @param pathInput the string to be parsed or 'pathArray'\r\n * @returns the normalized `pathArray`\r\n */\r\nconst normalizePath = (pathInput: string | PathArray) => {\r\n const path = parsePathString(pathInput);\r\n const params = { ...paramsParser };\r\n\r\n return iterate(path, (seg, _, lastX, lastY) => {\r\n params.x = lastX;\r\n params.y = lastY;\r\n const result = normalizeSegment(seg, params);\r\n\r\n const seglen = result.length;\r\n params.x1 = +result[seglen - 2];\r\n params.y1 = +result[seglen - 1];\r\n params.x2 = +result[seglen - 4] || params.x1;\r\n params.y2 = +result[seglen - 3] || params.y1;\r\n\r\n return result;\r\n });\r\n};\r\nexport default normalizePath;\r\n","import DISTANCE_EPSILON from \"./distanceEpsilon\";\r\nimport type { MSegment, PathArray, PointTuple } from \"../types\";\r\nimport iterate from \"../process/iterate\";\r\nimport { getLineLength, getPointAtLineLength } from \"../math/lineTools\";\r\nimport { getArcLength, getPointAtArcLength } from \"../math/arcTools\";\r\nimport { getCubicLength, getPointAtCubicLength } from \"../math/cubicTools\";\r\nimport { getPointAtQuadLength, getQuadLength } from \"../math/quadTools\";\r\nimport normalizePath from \"../process/normalizePath\";\r\n\r\n/**\r\n * Returns [x,y] coordinates of a point at a given length of a shape.\r\n *\r\n * @param pathInput the `pathArray` to look into\r\n * @param distance the length of the shape to look at\r\n * @returns the requested {x, y} point coordinates\r\n */\r\nconst getPointAtLength = (pathInput: string | PathArray, distance?: number) => {\r\n const path = normalizePath(pathInput);\r\n let isM = false;\r\n let data = [] as number[];\r\n let pathCommand = \"M\";\r\n let x = 0;\r\n let y = 0;\r\n let [mx, my] = path[0].slice(1) as PointTuple;\r\n const distanceIsNumber = typeof distance === \"number\";\r\n let point = { x: mx, y: my };\r\n let length = 0;\r\n let POINT = point;\r\n let totalLength = 0;\r\n\r\n if (!distanceIsNumber || distance < DISTANCE_EPSILON) return point;\r\n\r\n // for (let i = 0; i < pathLen; i += 1) {\r\n iterate(path, (seg, _, lastX, lastY) => {\r\n [pathCommand] = seg;\r\n isM = pathCommand === \"M\";\r\n data = !isM ? [lastX, lastY].concat(seg.slice(1) as number[]) : data;\r\n\r\n // this segment is always ZERO\r\n /* istanbul ignore else @preserve */\r\n if (isM) {\r\n // remember mx, my for Z\r\n [, mx, my] = seg as MSegment;\r\n point = { x: mx, y: my };\r\n length = 0;\r\n } else if (pathCommand === \"L\") {\r\n point = getPointAtLineLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n distance - totalLength,\r\n );\r\n length = getLineLength(data[0], data[1], data[2], data[3]);\r\n } else if (pathCommand === \"A\") {\r\n point = getPointAtArcLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n data[6],\r\n data[7],\r\n data[8],\r\n distance - totalLength,\r\n );\r\n length = getArcLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n data[6],\r\n data[7],\r\n data[8],\r\n );\r\n } else if (pathCommand === \"C\") {\r\n point = getPointAtCubicLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n data[6],\r\n data[7],\r\n distance - totalLength,\r\n );\r\n length = getCubicLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n data[6],\r\n data[7],\r\n );\r\n } else if (pathCommand === \"Q\") {\r\n point = getPointAtQuadLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n distance - totalLength,\r\n );\r\n length = getQuadLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n );\r\n } else if (pathCommand === \"Z\") {\r\n data = [lastX, lastY, mx, my];\r\n point = { x: mx, y: my };\r\n\r\n length = getLineLength(data[0], data[1], data[2], data[3]);\r\n }\r\n\r\n [x, y] = data.slice(-2);\r\n\r\n if (totalLength < distance) {\r\n POINT = point;\r\n } else {\r\n // totalLength >= distance\r\n // stop right here\r\n // stop iterator now!\r\n return false;\r\n }\r\n\r\n totalLength += length;\r\n return;\r\n });\r\n\r\n // native `getPointAtLength` behavior when the given distance\r\n // is higher than total length\r\n if (distance > totalLength - DISTANCE_EPSILON) {\r\n return { x, y };\r\n }\r\n\r\n return POINT;\r\n};\r\n\r\nexport default getPointAtLength;\r\n","import type { LSegment, MSegment, PathArray, PointTuple } from \"../types\";\r\nimport { getLineLength } from \"../math/lineTools\";\r\nimport { getArcLength } from \"../math/arcTools\";\r\nimport { getCubicLength } from \"../math/cubicTools\";\r\nimport { getQuadLength } from \"../math/quadTools\";\r\nimport iterate from \"../process/iterate\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport absolutizeSegment from \"../process/absolutizeSegment\";\r\n\r\n/**\r\n * Returns the shape total length, or the equivalent to `shape.getTotalLength()`.\r\n *\r\n * @param pathInput the target `pathArray`\r\n * @returns the shape total length\r\n */\r\nconst getTotalLength = (pathInput: string | PathArray) => {\r\n const path = parsePathString(pathInput);\r\n let paramX1 = 0;\r\n let paramY1 = 0;\r\n let paramX2 = 0;\r\n let paramY2 = 0;\r\n let paramQX = 0;\r\n let paramQY = 0;\r\n let pathCommand = \"M\";\r\n let mx = 0;\r\n let my = 0;\r\n let totalLength = 0;\r\n\r\n iterate(path, (seg, index, lastX, lastY) => {\r\n [pathCommand] = seg;\r\n const absCommand = pathCommand.toUpperCase();\r\n const isRelative = absCommand !== pathCommand;\r\n const absoluteSegment = isRelative\r\n ? absolutizeSegment(seg, index, lastX, lastY)\r\n : (seg.slice(0) as typeof seg);\r\n\r\n const normalSegment = absCommand === \"V\"\r\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\r\n : absCommand === \"H\"\r\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\r\n : absoluteSegment;\r\n [pathCommand] = normalSegment;\r\n\r\n if (!\"TQ\".includes(absCommand)) {\r\n // optional but good to be cautious\r\n paramQX = 0;\r\n paramQY = 0;\r\n }\r\n\r\n // this segment is always ZERO\r\n /* istanbul ignore else @preserve */\r\n if (pathCommand === \"M\") {\r\n // remember mx, my for Z\r\n [, mx, my] = normalSegment as MSegment;\r\n } else if (pathCommand === \"L\") {\r\n totalLength += getLineLength(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n );\r\n } else if (pathCommand === \"A\") {\r\n totalLength += getArcLength(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n normalSegment[5] as number,\r\n normalSegment[6] as number,\r\n normalSegment[7] as number,\r\n );\r\n } else if (pathCommand === \"S\") {\r\n const cp1x = paramX1 * 2 - paramX2;\r\n const cp1y = paramY1 * 2 - paramY2;\r\n\r\n totalLength += getCubicLength(\r\n lastX,\r\n lastY,\r\n cp1x,\r\n cp1y,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n );\r\n } else if (pathCommand === \"C\") {\r\n totalLength += getCubicLength(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n normalSegment[5] as number,\r\n normalSegment[6] as number,\r\n );\r\n } else if (pathCommand === \"T\") {\r\n paramQX = paramX1 * 2 - paramQX;\r\n paramQY = paramY1 * 2 - paramQY;\r\n totalLength += getQuadLength(\r\n lastX,\r\n lastY,\r\n paramQX,\r\n paramQY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n );\r\n } else if (pathCommand === \"Q\") {\r\n paramQX = normalSegment[1] as number;\r\n paramQY = normalSegment[2] as number;\r\n totalLength += getQuadLength(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n );\r\n } else if (pathCommand === \"Z\") {\r\n totalLength += getLineLength(lastX, lastY, mx, my);\r\n }\r\n\r\n // update params\r\n [paramX1, paramY1] = pathCommand === \"Z\"\r\n ? [mx, my]\r\n : (normalSegment.slice(-2) as PointTuple);\r\n [paramX2, paramY2] = pathCommand === \"C\"\r\n ? ([normalSegment[3], normalSegment[4]] as PointTuple)\r\n : pathCommand === \"S\"\r\n ? ([normalSegment[1], normalSegment[2]] as PointTuple)\r\n : [paramX1, paramY1];\r\n });\r\n\r\n return totalLength;\r\n};\r\n\r\nexport default getTotalLength;\r\n","import type { PathArray, PathSegment } from \"../types\";\r\nimport type { SegmentProperties } from \"../interface\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport getTotalLength from \"./getTotalLength\";\r\n\r\n/**\r\n * Returns the segment, its index and length as well as\r\n * the length to that segment at a given length in a path.\r\n *\r\n * @param pathInput target `pathArray`\r\n * @param distance the given length\r\n * @returns the requested properties\r\n */\r\nconst getPropertiesAtLength = (\r\n pathInput: string | PathArray,\r\n distance?: number,\r\n): SegmentProperties => {\r\n const pathArray = parsePathString(pathInput);\r\n\r\n let pathTemp = pathArray.slice(0) as PathArray;\r\n let pathLength = getTotalLength(pathTemp);\r\n let index = pathTemp.length - 1;\r\n let lengthAtSegment = 0;\r\n let length = 0;\r\n let segment = pathArray[0] as PathSegment;\r\n\r\n // If the path is empty, return 0.\r\n if (index <= 0 || !distance || !Number.isFinite(distance)) {\r\n return {\r\n segment,\r\n index: 0,\r\n length,\r\n lengthAtSegment,\r\n };\r\n }\r\n\r\n if (distance >= pathLength) {\r\n pathTemp = pathArray.slice(0, -1) as PathArray;\r\n lengthAtSegment = getTotalLength(pathTemp);\r\n length = pathLength - lengthAtSegment;\r\n segment = pathArray[index];\r\n return {\r\n segment,\r\n index,\r\n length,\r\n lengthAtSegment,\r\n };\r\n }\r\n\r\n const segments = [] as SegmentProperties[];\r\n while (index > 0) {\r\n segment = pathTemp[index];\r\n pathTemp = pathTemp.slice(0, -1) as PathArray;\r\n lengthAtSegment = getTotalLength(pathTemp);\r\n length = pathLength - lengthAtSegment;\r\n pathLength = lengthAtSegment;\r\n\r\n segments.push({\r\n segment,\r\n index,\r\n length,\r\n lengthAtSegment,\r\n });\r\n index -= 1;\r\n }\r\n\r\n return segments.find(({ lengthAtSegment: l }) =>\r\n l <= distance\r\n ) as SegmentProperties;\r\n};\r\n\r\nexport default getPropertiesAtLength;\r\n","import type { PathArray, Point } from \"../types\";\r\nimport type { PointProperties } from \"../interface\";\r\nimport getPointAtLength from \"./getPointAtLength\";\r\nimport getPropertiesAtLength from \"./getPropertiesAtLength\";\r\nimport getTotalLength from \"./getTotalLength\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport normalizePath from \"../process/normalizePath\";\r\n\r\n/**\r\n * Returns the point and segment in path closest to a given point as well as\r\n * the distance to the path stroke.\r\n *\r\n * @see https://bl.ocks.org/mbostock/8027637\r\n *\r\n * @param pathInput target `pathArray`\r\n * @param point the given point\r\n * @returns the requested properties\r\n */\r\nconst getPropertiesAtPoint = (\r\n pathInput: string | PathArray,\r\n point: Point,\r\n): PointProperties => {\r\n const path = parsePathString(pathInput);\r\n const normalPath = normalizePath(path);\r\n const pathLength = getTotalLength(normalPath);\r\n const distanceTo = (p: Point) => {\r\n const dx = p.x - point.x;\r\n const dy = p.y - point.y;\r\n return dx * dx + dy * dy;\r\n };\r\n let precision = 8;\r\n let scan: Point;\r\n let closest = { x: 0, y: 0 }; // make TS happy\r\n let scanDistance = 0;\r\n let bestLength = 0;\r\n let bestDistance = Infinity;\r\n\r\n // linear scan for coarse approximation\r\n for (let scanLength = 0; scanLength <= pathLength; scanLength += precision) {\r\n scan = getPointAtLength(normalPath, scanLength);\r\n scanDistance = distanceTo(scan);\r\n\r\n if (scanDistance < bestDistance) {\r\n closest = scan;\r\n bestLength = scanLength;\r\n bestDistance = scanDistance;\r\n }\r\n }\r\n\r\n // binary search for precise estimate\r\n precision /= 2;\r\n let before: { x: number; y: number };\r\n let after: { x: number; y: number };\r\n let beforeLength = 0;\r\n let afterLength = 0;\r\n let beforeDistance = 0;\r\n let afterDistance = 0;\r\n\r\n while (precision > 0.000001) {\r\n beforeLength = bestLength - precision;\r\n before = getPointAtLength(normalPath, beforeLength);\r\n beforeDistance = distanceTo(before);\r\n afterLength = bestLength + precision;\r\n after = getPointAtLength(normalPath, afterLength);\r\n afterDistance = distanceTo(after);\r\n\r\n if (beforeLength >= 0 && beforeDistance < bestDistance) {\r\n closest = before;\r\n bestLength = beforeLength;\r\n bestDistance = beforeDistance;\r\n } else if (afterLength <= pathLength && afterDistance < bestDistance) {\r\n closest = after;\r\n bestLength = afterLength;\r\n bestDistance = afterDistance;\r\n } else {\r\n precision /= 2;\r\n }\r\n if (precision < 0.00001) break;\r\n }\r\n\r\n const segment = getPropertiesAtLength(path, bestLength);\r\n const distance = Math.sqrt(bestDistance);\r\n\r\n return { closest, distance, segment };\r\n};\r\n\r\nexport default getPropertiesAtPoint;\r\n","import type { PathArray } from \"../types\";\r\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\r\n\r\n/**\r\n * Returns the point in path closest to a given point.\r\n *\r\n * @param pathInput target `pathArray`\r\n * @param point the given point\r\n * @returns the best match\r\n */\r\nconst getClosestPoint = (\r\n pathInput: string | PathArray,\r\n point: { x: number; y: number },\r\n) => {\r\n return getPropertiesAtPoint(pathInput, point).closest;\r\n};\r\n\r\nexport default getClosestPoint;\r\n","import pathToCurve from \"../convert/pathToCurve\";\r\nimport type { PathArray, PointTuple } from \"../types\";\r\n\r\n/**\r\n * Returns the area of a single cubic-bezier segment.\r\n *\r\n * http://objectmix.com/graphics/133553-area-closed-bezier-curve.html\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the area of the cubic-bezier segment\r\n */\r\nconst getCubicSegArea = (\r\n x1: number,\r\n y1: number,\r\n c1x: number,\r\n c1y: number,\r\n c2x: number,\r\n c2y: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n return (\r\n (3 *\r\n ((y2 - y1) * (c1x + c2x) -\r\n (x2 - x1) * (c1y + c2y) +\r\n c1y * (x1 - c2x) -\r\n c1x * (y1 - c2y) +\r\n y2 * (c2x + x1 / 3) -\r\n x2 * (c2y + y1 / 3))) /\r\n 20\r\n );\r\n};\r\n\r\n/**\r\n * Returns the area of a shape.\r\n *\r\n * @author Jürg Lehni & Jonathan Puckey\r\n *\r\n * @see https://github.com/paperjs/paper.js/blob/develop/src/path/Path.js\r\n *\r\n * @param path the shape `pathArray`\r\n * @returns the length of the cubic-bezier segment\r\n */\r\nconst getPathArea = (path: PathArray) => {\r\n let x = 0;\r\n let y = 0;\r\n let len = 0;\r\n\r\n return pathToCurve(path)\r\n .map((seg) => {\r\n switch (seg[0]) {\r\n case \"M\":\r\n [, x, y] = seg;\r\n return 0;\r\n default:\r\n len = getCubicSegArea(\r\n x,\r\n y,\r\n seg[1],\r\n seg[2],\r\n seg[3],\r\n seg[4],\r\n seg[5],\r\n seg[6],\r\n );\r\n [x, y] = seg.slice(-2) as PointTuple;\r\n return len;\r\n }\r\n })\r\n .reduce((a, b) => a + b, 0);\r\n};\r\nexport default getPathArea;\r\n","import getPathArea from \"./getPathArea\";\r\nimport pathToCurve from \"../convert/pathToCurve\";\r\nimport type { PathArray } from \"../types\";\r\n\r\n/**\r\n * Check if a path is drawn clockwise and returns true if so,\r\n * false otherwise.\r\n *\r\n * @param path the path string or `pathArray`\r\n * @returns true when clockwise or false if not\r\n */\r\nconst getDrawDirection = (path: string | PathArray) => {\r\n return getPathArea(pathToCurve(path)) >= 0;\r\n};\r\n\r\nexport default getDrawDirection;\r\n","import iterate from \"../process/iterate\";\r\nimport { PathBBox } from \"../interface\";\r\nimport { LSegment, MSegment, PathArray, PointTuple } from \"../types\";\r\nimport { getLineBBox } from \"../math/lineTools\";\r\nimport { getArcBBox } from \"../math/arcTools\";\r\nimport { getCubicBBox } from \"../math/cubicTools\";\r\nimport { getQuadBBox } from \"../math/quadTools\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport absolutizeSegment from \"../process/absolutizeSegment\";\r\n\r\nconst getPathBBox = (pathInput: PathArray | string) => {\r\n if (!pathInput) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n x2: 0,\r\n y2: 0,\r\n cx: 0,\r\n cy: 0,\r\n cz: 0,\r\n };\r\n }\r\n\r\n const path = parsePathString(pathInput);\r\n let pathCommand = \"M\";\r\n let mx = 0;\r\n let my = 0;\r\n const { max, min } = Math;\r\n let xMin = Infinity;\r\n let yMin = Infinity;\r\n let xMax = -Infinity;\r\n let yMax = -Infinity;\r\n let minX = 0;\r\n let minY = 0;\r\n let maxX = 0;\r\n let maxY = 0;\r\n let paramX1 = 0;\r\n let paramY1 = 0;\r\n let paramX2 = 0;\r\n let paramY2 = 0;\r\n let paramQX = 0;\r\n let paramQY = 0;\r\n\r\n iterate(path, (seg, index, lastX, lastY) => {\r\n [pathCommand] = seg;\r\n const absCommand = pathCommand.toUpperCase();\r\n const isRelative = absCommand !== pathCommand;\r\n const absoluteSegment = isRelative\r\n ? absolutizeSegment(seg, index, lastX, lastY)\r\n : (seg.slice(0) as typeof seg);\r\n\r\n const normalSegment = absCommand === \"V\"\r\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\r\n : absCommand === \"H\"\r\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\r\n : absoluteSegment;\r\n\r\n [pathCommand] = normalSegment;\r\n\r\n if (!\"TQ\".includes(absCommand)) {\r\n // optional but good to be cautious\r\n paramQX = 0;\r\n paramQY = 0;\r\n }\r\n\r\n // this segment is always ZERO\r\n /* istanbul ignore else @preserve */\r\n if (pathCommand === \"M\") {\r\n [, mx, my] = normalSegment as MSegment;\r\n minX = mx;\r\n minY = my;\r\n maxX = mx;\r\n maxY = my;\r\n } else if (pathCommand === \"L\") {\r\n [minX, minY, maxX, maxY] = getLineBBox(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n );\r\n } else if (pathCommand === \"A\") {\r\n [minX, minY, maxX, maxY] = getArcBBox(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n normalSegment[5] as number,\r\n normalSegment[6] as number,\r\n normalSegment[7] as number,\r\n );\r\n } else if (pathCommand === \"S\") {\r\n const cp1x = paramX1 * 2 - paramX2;\r\n const cp1y = paramY1 * 2 - paramY2;\r\n\r\n [minX, minY, maxX, maxY] = getCubicBBox(\r\n lastX,\r\n lastY,\r\n cp1x,\r\n cp1y,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n );\r\n } else if (pathCommand === \"C\") {\r\n [minX, minY, maxX, maxY] = getCubicBBox(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n normalSegment[5] as number,\r\n normalSegment[6] as number,\r\n );\r\n } else if (pathCommand === \"T\") {\r\n paramQX = paramX1 * 2 - paramQX;\r\n paramQY = paramY1 * 2 - paramQY;\r\n [minX, minY, maxX, maxY] = getQuadBBox(\r\n lastX,\r\n lastY,\r\n paramQX,\r\n paramQY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n );\r\n } else if (pathCommand === \"Q\") {\r\n paramQX = normalSegment[1] as number;\r\n paramQY = normalSegment[2] as number;\r\n [minX, minY, maxX, maxY] = getQuadBBox(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n );\r\n } else if (pathCommand === \"Z\") {\r\n [minX, minY, maxX, maxY] = getLineBBox(lastX, lastY, mx, my);\r\n }\r\n xMin = min(minX, xMin);\r\n yMin = min(minY, yMin);\r\n xMax = max(maxX, xMax);\r\n yMax = max(maxY, yMax);\r\n\r\n // update params\r\n [paramX1, paramY1] = pathCommand === \"Z\"\r\n ? [mx, my]\r\n : (normalSegment.slice(-2) as PointTuple);\r\n [paramX2, paramY2] = pathCommand === \"C\"\r\n ? ([normalSegment[3], normalSegment[4]] as PointTuple)\r\n : pathCommand === \"S\"\r\n ? ([normalSegment[1], normalSegment[2]] as PointTuple)\r\n : [paramX1, paramY1];\r\n });\r\n\r\n const width = xMax - xMin;\r\n const height = yMax - yMin;\r\n\r\n return {\r\n width,\r\n height,\r\n x: xMin,\r\n y: yMin,\r\n x2: xMax,\r\n y2: yMax,\r\n cx: xMin + width / 2,\r\n cy: yMin + height / 2,\r\n // an estimated guess\r\n cz: Math.max(width, height) + Math.min(width, height) / 2,\r\n } satisfies PathBBox;\r\n};\r\n\r\nexport default getPathBBox;\r\n","import type { PathArray, PathSegment } from \"../types\";\r\nimport getPropertiesAtLength from \"./getPropertiesAtLength\";\r\n\r\n/**\r\n * Returns the segment at a given length.\r\n *\r\n * @param pathInput the target `pathArray`\r\n * @param distance the distance in path to look at\r\n * @returns the requested segment\r\n */\r\nconst getSegmentAtLength = (\r\n pathInput: string | PathArray,\r\n distance?: number,\r\n): PathSegment | undefined => {\r\n return getPropertiesAtLength(pathInput, distance).segment;\r\n};\r\n\r\nexport default getSegmentAtLength;\r\n","import type { SegmentProperties } from \"../interface\";\r\nimport type { PathArray } from \"../types\";\r\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\r\n\r\n/**\r\n * Returns the path segment which contains a given point.\r\n *\r\n * @param path the `pathArray` to look into\r\n * @param point the point of the shape to look for\r\n * @returns the requested segment\r\n */\r\nconst getSegmentOfPoint = (\r\n path: string | PathArray,\r\n point: { x: number; y: number },\r\n): SegmentProperties | undefined => {\r\n return getPropertiesAtPoint(path, point).segment;\r\n};\r\nexport default getSegmentOfPoint;\r\n","import type { PathArray, PathSegment, RelativeCommand } from \"../types\";\r\nimport paramsCount from \"../parser/paramsCount\";\r\n\r\n/**\r\n * Iterates an array to check if it's an actual `pathArray`.\r\n *\r\n * @param path the `pathArray` to be checked\r\n * @returns iteration result\r\n */\r\nconst isPathArray = (path: unknown): path is PathArray => {\r\n return (\r\n Array.isArray(path) &&\r\n path.every((seg: PathSegment) => {\r\n const lk = seg[0].toLowerCase() as RelativeCommand;\r\n return (\r\n paramsCount[lk] === seg.length - 1 &&\r\n \"achlmqstvz\".includes(lk) &&\r\n (seg.slice(1) as unknown[]).every(Number.isFinite)\r\n );\r\n }) &&\r\n path.length > 0\r\n );\r\n};\r\nexport default isPathArray;\r\n","import type { AbsoluteArray } from \"../types\";\r\nimport isPathArray from \"./isPathArray\";\r\n\r\n/**\r\n * Iterates an array to check if it's a `pathArray`\r\n * with all absolute values.\r\n *\r\n * @param path the `pathArray` to be checked\r\n * @returns iteration result\r\n */\r\nconst isAbsoluteArray = (path: unknown): path is AbsoluteArray => {\r\n return (\r\n isPathArray(path) &&\r\n // `isPathArray` also checks if it's `Array`\r\n path.every(([x]) => x === x.toUpperCase())\r\n );\r\n};\r\nexport default isAbsoluteArray;\r\n","import type { NormalArray } from \"../types\";\r\nimport isAbsoluteArray from \"./isAbsoluteArray\";\r\n\r\n/**\r\n * Iterates an array to check if it's a `pathArray`\r\n * with all segments are in non-shorthand notation\r\n * with absolute values.\r\n *\r\n * @param {string | SVGPath.pathArray} path the `pathArray` to be checked\r\n * @returns {boolean} iteration result\r\n */\r\nconst isNormalizedArray = (path: unknown): path is NormalArray => {\r\n // `isAbsoluteArray` also checks if it's `Array`\r\n return isAbsoluteArray(path) && path.every(([pc]) => \"ACLMQZ\".includes(pc));\r\n};\r\nexport default isNormalizedArray;\r\n","import { CurveArray } from \"../types\";\r\nimport isNormalizedArray from \"./isNormalizedArray\";\r\n\r\n/**\r\n * Iterates an array to check if it's a `pathArray`\r\n * with all C (cubic bezier) segments.\r\n *\r\n * @param path the `Array` to be checked\r\n * @returns iteration result\r\n */\r\nconst isCurveArray = (path: unknown): path is CurveArray => {\r\n // `isPathArray` also checks if it's `Array`\r\n return isNormalizedArray(path) && path.every(([pc]) => \"MC\".includes(pc));\r\n};\r\nexport default isCurveArray;\r\n","import type { PathArray } from \"../types\";\r\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\r\nimport DISTANCE_EPSILON from \"./distanceEpsilon\";\r\n\r\n/**\r\n * Checks if a given point is in the stroke of a path.\r\n *\r\n * @param pathInput target path\r\n * @param point the given `{x,y}` point\r\n * @returns the query result\r\n */\r\nconst isPointInStroke = (\r\n pathInput: string | PathArray,\r\n point: { x: number; y: number },\r\n) => {\r\n const { distance } = getPropertiesAtPoint(pathInput, point);\r\n return Math.abs(distance) < DISTANCE_EPSILON; // 0.01 might be more permissive\r\n};\r\nexport default isPointInStroke;\r\n","import type { RelativeArray } from \"../types\";\r\nimport isPathArray from \"./isPathArray\";\r\n\r\n/**\r\n * Iterates an array to check if it's a `pathArray`\r\n * with relative values.\r\n *\r\n * @param path the `pathArray` to be checked\r\n * @returns iteration result\r\n */\r\nconst isRelativeArray = (path: unknown): path is RelativeArray => {\r\n return (\r\n isPathArray(path) &&\r\n // `isPathArray` checks if it's `Array`\r\n path.slice(1).every(([pc]) => pc === pc.toLowerCase())\r\n );\r\n};\r\nexport default isRelativeArray;\r\n","import scanSegment from \"../parser/scanSegment\";\r\nimport skipSpaces from \"../parser/skipSpaces\";\r\nimport PathParser from \"../parser/pathParser\";\r\n\r\n/**\r\n * Parses a path string value to determine its validity\r\n * then returns true if it's valid or false otherwise.\r\n *\r\n * @param pathString the path string to be parsed\r\n * @returns the path string validity\r\n */\r\nconst isValidPath = (pathString: string) => {\r\n if (typeof pathString !== \"string\" || !pathString.length) {\r\n return false;\r\n }\r\n\r\n const path = new PathParser(pathString);\r\n\r\n skipSpaces(path);\r\n\r\n while (path.index < path.max && !path.err.length) {\r\n scanSegment(path);\r\n }\r\n\r\n return !path.err.length && \"mM\".includes(path.segments[0][0]);\r\n};\r\nexport default isValidPath;\r\n","import type { ShapeParams } from \"../interface\";\r\n\r\n/**\r\n * Supported shapes and their specific parameters.\r\n */\r\nconst shapeParams: ShapeParams = {\r\n line: [\"x1\", \"y1\", \"x2\", \"y2\"],\r\n circle: [\"cx\", \"cy\", \"r\"],\r\n ellipse: [\"cx\", \"cy\", \"rx\", \"ry\"],\r\n rect: [\"width\", \"height\", \"x\", \"y\", \"rx\", \"ry\"],\r\n polygon: [\"points\"],\r\n polyline: [\"points\"],\r\n glyph: [\"d\"],\r\n};\r\n\r\nexport default shapeParams;\r\n","const isElement = (node?: unknown): node is Element =>\r\n node !== undefined && node !== null &&\r\n typeof node === \"object\" &&\r\n (node as Node).nodeType === 1; // ELEMENT_NODE\r\n\r\nexport default isElement;\r\n","import type {\r\n CircleAttr,\r\n EllipseAttr,\r\n GlyphAttr,\r\n LineAttr,\r\n PolyAttr,\r\n RectAttr,\r\n ShapeParams,\r\n} from \"../interface\";\r\nimport type { PathArray, PathSegment, ShapeOps, ShapeTypes } from \"../types\";\r\nimport error from \"../parser/error\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport shapeParams from \"./shapeParams\";\r\nimport isPathArray from \"./isPathArray\";\r\nimport isElement from \"./isElement\";\r\n\r\n/**\r\n * Returns a new `pathArray` from line attributes.\r\n *\r\n * @param attr shape configuration\r\n * @returns a new line `pathArray`\r\n */\r\nexport const getLinePath = (attr: LineAttr): PathArray => {\r\n let { x1, y1, x2, y2 } = attr;\r\n [x1, y1, x2, y2] = [x1, y1, x2, y2].map((a) => +a);\r\n return [\r\n [\"M\", x1, y1],\r\n [\"L\", x2, y2],\r\n ];\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` like from polyline/polygon attributes.\r\n *\r\n * @param attr shape configuration\r\n * @return a new polygon/polyline `pathArray`\r\n */\r\nexport const getPolyPath = (attr: PolyAttr): PathArray => {\r\n const pathArray = [] as PathSegment[];\r\n const points = (attr.points || \"\")\r\n .trim()\r\n .split(/[\\s|,]/)\r\n .map((a) => +a);\r\n\r\n let index = 0;\r\n while (index < points.length) {\r\n pathArray.push([index ? \"L\" : \"M\", points[index], points[index + 1]]);\r\n index += 2;\r\n }\r\n\r\n return (attr.type === \"polygon\"\r\n ? [...pathArray, [\"z\"]]\r\n : pathArray) as PathArray;\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` from circle attributes.\r\n *\r\n * @param attr shape configuration\r\n * @return a circle `pathArray`\r\n */\r\nexport const getCirclePath = (attr: CircleAttr): PathArray => {\r\n let { cx, cy, r } = attr;\r\n [cx, cy, r] = [cx, cy, r].map((a) => +a);\r\n\r\n return [\r\n [\"M\", cx - r, cy],\r\n [\"a\", r, r, 0, 1, 0, 2 * r, 0],\r\n [\"a\", r, r, 0, 1, 0, -2 * r, 0],\r\n ];\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` from ellipse attributes.\r\n *\r\n * @param attr shape configuration\r\n * @return an ellipse `pathArray`\r\n */\r\nexport const getEllipsePath = (attr: EllipseAttr): PathArray => {\r\n let { cx, cy } = attr;\r\n let rx = attr.rx || 0;\r\n let ry = attr.ry || rx;\r\n [cx, cy, rx, ry] = [cx, cy, rx, ry].map((a) => +a);\r\n\r\n return [\r\n [\"M\", cx - rx, cy],\r\n [\"a\", rx, ry, 0, 1, 0, 2 * rx, 0],\r\n [\"a\", rx, ry, 0, 1, 0, -2 * rx, 0],\r\n ];\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` like from rect attributes.\r\n *\r\n * @param attr object with properties above\r\n * @return a new `pathArray` from `` attributes\r\n */\r\nexport const getRectanglePath = (attr: RectAttr): PathArray => {\r\n const x = +attr.x || 0;\r\n const y = +attr.y || 0;\r\n const w = +attr.width;\r\n const h = +attr.height;\r\n let rx = +(attr.rx || 0);\r\n let ry = +(attr.ry || rx);\r\n\r\n // Validity checks from http://www.w3.org/TR/SVG/shapes.html#RectElement:\r\n if (rx || ry) {\r\n // rx = !rx ? ry : rx;\r\n // ry = !ry ? rx : ry;\r\n\r\n /* istanbul ignore else @preserve */\r\n if (rx * 2 > w) rx -= (rx * 2 - w) / 2;\r\n /* istanbul ignore else @preserve */\r\n if (ry * 2 > h) ry -= (ry * 2 - h) / 2;\r\n\r\n return [\r\n [\"M\", x + rx, y],\r\n [\"h\", w - rx * 2],\r\n [\"s\", rx, 0, rx, ry],\r\n [\"v\", h - ry * 2],\r\n [\"s\", 0, ry, -rx, ry],\r\n [\"h\", -w + rx * 2],\r\n [\"s\", -rx, 0, -rx, -ry],\r\n [\"v\", -h + ry * 2],\r\n [\"s\", 0, -ry, rx, -ry],\r\n ];\r\n }\r\n\r\n return [[\"M\", x, y], [\"h\", w], [\"v\", h], [\"H\", x], [\"Z\"]];\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` created from attributes of a ``, ``,\r\n * ``, ``, ``, ``, or ``.\r\n *\r\n * It can also work with an options object, see the type below\r\n * @see ShapeOps\r\n *\r\n * @param element target shape\r\n * @return the newly created `` element\r\n */\r\nconst shapeToPathArray = (\r\n element: ShapeTypes | ShapeOps,\r\n) => {\r\n const supportedShapes = Object.keys(shapeParams) as (keyof ShapeParams)[];\r\n const targetIsElement = isElement(element);\r\n const tagName = targetIsElement ? element.tagName : null;\r\n\r\n if (tagName && [...supportedShapes, \"path\"].every((s) => tagName !== s)) {\r\n throw TypeError(`${error}: \"${tagName}\" is not SVGElement`);\r\n }\r\n\r\n const type =\r\n (targetIsElement ? tagName : (element as ShapeOps).type) as ShapeOps[\r\n \"type\"\r\n ];\r\n const shapeAttrs = shapeParams[type] as string[];\r\n const config = { type } as Record;\r\n\r\n if (targetIsElement) {\r\n shapeAttrs.forEach((p) => {\r\n config[p] = element.getAttribute(p) as string;\r\n });\r\n } else {\r\n Object.assign(config, element);\r\n }\r\n\r\n // set d\r\n let pathArray = [] as unknown as PathArray;\r\n\r\n /* istanbul ignore else */\r\n if (type === \"circle\") {\r\n pathArray = getCirclePath(config as unknown as CircleAttr);\r\n } else if (type === \"ellipse\") {\r\n pathArray = getEllipsePath(config as unknown as EllipseAttr);\r\n } else if ([\"polyline\", \"polygon\"].includes(type)) {\r\n pathArray = getPolyPath(config as unknown as PolyAttr);\r\n } else if (type === \"rect\") {\r\n pathArray = getRectanglePath(config as unknown as RectAttr);\r\n } else if (type === \"line\") {\r\n pathArray = getLinePath(config as unknown as LineAttr);\r\n } else if ([\"glyph\", \"path\"].includes(type)) {\r\n pathArray = parsePathString(\r\n targetIsElement\r\n ? element.getAttribute(\"d\") || /* istanbul ignore next @preserve */ \"\"\r\n : (element as GlyphAttr).d || \"\",\r\n );\r\n }\r\n\r\n // replace target element\r\n if (isPathArray(pathArray) && pathArray.length) {\r\n return pathArray;\r\n }\r\n return false;\r\n};\r\nexport default shapeToPathArray;\r\n","import type { ShapeParams } from \"../interface\";\r\nimport type { ShapeOps, ShapeTypes } from \"../types\";\r\nimport pathToString from \"../convert/pathToString\";\r\nimport defaultOptions from \"../options/options\";\r\nimport error from \"../parser/error\";\r\nimport isValidPath from \"./isValidPath\";\r\nimport isElement from \"./isElement\";\r\nimport shapeToPathArray from \"./shapeToPathArray\";\r\nimport shapeParams from \"./shapeParams\";\r\n\r\n/**\r\n * Returns a new `` element created from attributes of a ``, ``,\r\n * ``, ``, ``, `` or ``. If `replace` parameter\r\n * is `true`, it will replace the target. The default `ownerDocument` is your current\r\n * `document` browser page, if you want to use in server-side using `jsdom`, you can\r\n * pass the `jsdom` `document` to `ownDocument`.\r\n *\r\n * It can also work with an options object, see the type below\r\n * @see ShapeOps\r\n *\r\n * The newly created `` element keeps all non-specific\r\n * attributes like `class`, `fill`, etc.\r\n *\r\n * @param element target shape\r\n * @param replace option to replace target\r\n * @param ownerDocument document for create element\r\n * @return the newly created `` element\r\n */\r\nconst shapeToPath = (\r\n element: ShapeTypes | ShapeOps,\r\n replace?: boolean,\r\n ownerDocument?: Document,\r\n): SVGPathElement | false => {\r\n const doc = ownerDocument || document;\r\n const supportedShapes = Object.keys(shapeParams) as (keyof ShapeParams)[];\r\n const targetIsElement = isElement(element);\r\n const tagName = targetIsElement ? element.tagName : null;\r\n\r\n if (tagName === \"path\") {\r\n throw TypeError(`${error}: \"${tagName}\" is already SVGPathElement`);\r\n }\r\n if (tagName && supportedShapes.every((s) => tagName !== s)) {\r\n throw TypeError(`${error}: \"${tagName}\" is not SVGElement`);\r\n }\r\n\r\n const path = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n const type =\r\n (targetIsElement ? tagName : (element as ShapeOps).type) as ShapeOps[\r\n \"type\"\r\n ];\r\n const shapeAttrs = shapeParams[type] as string[];\r\n const config = { type } as Record;\r\n\r\n // set d\r\n const round = defaultOptions.round as number;\r\n const pathArray = shapeToPathArray(element);\r\n const description = pathArray && pathArray.length\r\n ? pathToString(pathArray, round)\r\n : \"\";\r\n\r\n if (targetIsElement) {\r\n shapeAttrs.forEach((p) => {\r\n config[p] = element.getAttribute(p) as string;\r\n });\r\n // set no-specific shape attributes: fill, stroke, etc\r\n Object.values(element.attributes).forEach(({ name, value }) => {\r\n if (!shapeAttrs.includes(name)) path.setAttribute(name, value);\r\n });\r\n } else {\r\n Object.assign(config, element);\r\n // set no-specific shape attributes: fill, stroke, etc\r\n Object.keys(config).forEach((k) => {\r\n if (!shapeAttrs.includes(k) && k !== \"type\") {\r\n path.setAttribute(\r\n k.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`),\r\n config[k],\r\n );\r\n }\r\n });\r\n }\r\n\r\n // replace target element\r\n if (isValidPath(description)) {\r\n path.setAttribute(\"d\", description);\r\n if (replace && targetIsElement) {\r\n element.before(path, element);\r\n element.remove();\r\n }\r\n return path;\r\n }\r\n return false;\r\n};\r\n\r\nexport default shapeToPath;\r\n","import CSSMatrix from \"@thednp/dommatrix\";\r\n// import type { TransformObject } from '../interface';\r\nimport type { TransformObjectValues } from \"../types\";\r\n\r\n/**\r\n * Returns a transformation matrix to apply to `` elements.\r\n *\r\n * @see TransformObjectValues\r\n *\r\n * @param transform the `transformObject`\r\n * @returns a new transformation matrix\r\n */\r\nconst getSVGMatrix = (transform: TransformObjectValues): CSSMatrix => {\r\n let matrix = new CSSMatrix();\r\n const { origin } = transform;\r\n const [originX, originY] = origin as [number, number, number];\r\n const { translate } = transform;\r\n const { rotate } = transform;\r\n const { skew } = transform;\r\n const { scale } = transform;\r\n\r\n // set translate\r\n if (\r\n Array.isArray(translate) &&\r\n translate.length >= 2 &&\r\n translate.every((x) => !Number.isNaN(+x)) &&\r\n translate.some((x) => x !== 0)\r\n ) {\r\n matrix = matrix.translate(...(translate as [number, number, number?]));\r\n } else if (typeof translate === \"number\" && !Number.isNaN(translate)) {\r\n matrix = matrix.translate(translate);\r\n }\r\n\r\n if (rotate || skew || scale) {\r\n // set SVG transform-origin, always defined\r\n matrix = matrix.translate(originX, originY);\r\n\r\n // set rotation\r\n if (\r\n Array.isArray(rotate) &&\r\n rotate.length >= 2 &&\r\n rotate.every((x) => !Number.isNaN(+x)) &&\r\n rotate.some((x) => x !== 0)\r\n ) {\r\n matrix = matrix.rotate(...(rotate as [number, number, number?]));\r\n } else if (typeof rotate === \"number\" && !Number.isNaN(rotate)) {\r\n matrix = matrix.rotate(rotate);\r\n }\r\n\r\n // set skew(s)\r\n if (\r\n Array.isArray(skew) && skew.length === 2 && skew.every((x) =>\r\n !Number.isNaN(+x)\r\n ) && skew.some((x) => x !== 0)\r\n ) {\r\n matrix = skew[0] ? matrix.skewX(skew[0]) : matrix;\r\n matrix = skew[1] ? matrix.skewY(skew[1]) : matrix;\r\n } else if (typeof skew === \"number\" && !Number.isNaN(skew)) {\r\n matrix = matrix.skewX(skew);\r\n }\r\n\r\n // set scale\r\n if (\r\n Array.isArray(scale) && scale.length >= 2 && scale.every((x) =>\r\n !Number.isNaN(+x)\r\n ) && scale.some((x) => x !== 1)\r\n ) {\r\n matrix = matrix.scale(...(scale as [number, number, number?]));\r\n } else if (typeof scale === \"number\" && !Number.isNaN(scale)) {\r\n matrix = matrix.scale(scale);\r\n }\r\n // set SVG transform-origin\r\n matrix = matrix.translate(-originX, -originY);\r\n }\r\n\r\n return matrix;\r\n};\r\nexport default getSVGMatrix;\r\n","import defaultOptions from \"../options/options\";\r\nimport type { ParserParams } from \"../interface\";\r\nimport roundTo from \"../math/roundTo\";\r\nimport type {\r\n AbsoluteSegment,\r\n NormalSegment,\r\n PathCommand,\r\n ShortSegment,\r\n SSegment,\r\n TSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Shorten a single segment of a `pathArray` object.\r\n *\r\n * @param segment the `absoluteSegment` object\r\n * @param normalSegment the `normalSegment` object\r\n * @param params the coordinates of the previous segment\r\n * @param prevCommand the path command of the previous segment\r\n * @returns the shortened segment\r\n */\r\nconst shortenSegment = (\r\n segment: AbsoluteSegment,\r\n normalSegment: NormalSegment,\r\n params: ParserParams,\r\n prevCommand: PathCommand,\r\n): ShortSegment => {\r\n const [pathCommand] = segment;\r\n const { round: defaultRound } = defaultOptions;\r\n const round = typeof defaultRound === \"number\"\r\n ? defaultRound\r\n : /* istanbul ignore next */ 4;\r\n const normalValues = normalSegment.slice(1) as number[];\r\n const { x1, y1, x2, y2, x, y } = params;\r\n const [nx, ny] = normalValues.slice(-2);\r\n const result = segment;\r\n\r\n if (!\"TQ\".includes(pathCommand)) {\r\n // optional but good to be cautious\r\n params.qx = null;\r\n params.qy = null;\r\n }\r\n\r\n if (pathCommand === \"L\") {\r\n if (roundTo(x, round) === roundTo(nx, round)) {\r\n return [\"V\", ny];\r\n } else if (roundTo(y, round) === roundTo(ny, round)) {\r\n return [\"H\", nx];\r\n }\r\n } else if (pathCommand === \"C\") {\r\n const [nx1, ny1] = normalValues;\r\n params.x1 = nx1;\r\n params.y1 = ny1;\r\n\r\n if (\r\n \"CS\".includes(prevCommand) &&\r\n ((roundTo(nx1, round) === roundTo(x1 * 2 - x2, round) &&\r\n roundTo(ny1, round) === roundTo(y1 * 2 - y2, round)) ||\r\n (roundTo(x1, round) === roundTo(x2 * 2 - x, round) &&\r\n roundTo(y1, round) === roundTo(y2 * 2 - y, round)))\r\n ) {\r\n return [\r\n \"S\",\r\n normalValues[2],\r\n normalValues[3],\r\n normalValues[4],\r\n normalValues[5],\r\n ] as SSegment;\r\n }\r\n } else if (pathCommand === \"Q\") {\r\n const [qx, qy] = normalValues;\r\n params.qx = qx;\r\n params.qy = qy;\r\n\r\n if (\r\n \"QT\".includes(prevCommand) &&\r\n roundTo(qx, round) === roundTo(x1 * 2 - x2, round) &&\r\n roundTo(qy, round) === roundTo(y1 * 2 - y2, round)\r\n ) {\r\n return [\"T\", normalValues[2], normalValues[3]] as TSegment;\r\n }\r\n }\r\n\r\n // ['V', 'H', 'S', 'T', 'Z'].includes(pathCommand)\r\n return result as ShortSegment;\r\n};\r\n\r\nexport default shortenSegment;\r\n","import type { PathCommand, PathSegment } from \"../types\";\r\nimport roundTo from \"../math/roundTo\";\r\n\r\nconst roundSegment = (\r\n segment: T,\r\n roundOption: number,\r\n) => {\r\n const values = (segment.slice(1) as number[]).map((n) =>\r\n roundTo(n, roundOption)\r\n );\r\n return [segment[0] as PathCommand | number].concat(values) as T;\r\n};\r\n\r\nexport default roundSegment;\r\n","import type { AbsoluteSegment, PathArray, PathCommand } from \"../types\";\r\nimport pathToAbsolute from \"../convert/pathToAbsolute\";\r\nimport shortenSegment from \"./shortenSegment\";\r\nimport paramsParser from \"../parser/paramsParser\";\r\nimport iterate from \"./iterate\";\r\nimport normalizeSegment from \"./normalizeSegment\";\r\nimport relativizeSegment from \"./relativizeSegment\";\r\nimport roundSegment from \"./roundSegment\";\r\n\r\n/**\r\n * Optimizes a `pathArray` object:\r\n * * convert segments to shorthand if possible\r\n * * select shortest segments from absolute and relative `pathArray`s\r\n *\r\n * @param pathInput a string or `pathArray`\r\n * @param roundOption the amount of decimals to round values to\r\n * @returns the optimized `pathArray`\r\n */\r\nconst optimizePath = (pathInput: PathArray, roundOption?: number) => {\r\n const path = pathToAbsolute(pathInput);\r\n // allow for ZERO decimals or use an aggressive value of 2\r\n const round = typeof roundOption === \"number\" && roundOption >= 0\r\n ? roundOption\r\n : /* istanbul ignore next @preserve */ 2;\r\n // this utility overrides the iterator params\r\n const optimParams = { ...paramsParser };\r\n\r\n const allPathCommands = [] as PathCommand[];\r\n let pathCommand = \"M\" as PathCommand;\r\n let prevCommand = \"Z\" as PathCommand;\r\n\r\n return iterate(path, (seg, i, lastX, lastY) => {\r\n optimParams.x = lastX;\r\n optimParams.y = lastY;\r\n const normalizedSegment = normalizeSegment(seg, optimParams);\r\n let result = seg;\r\n [pathCommand] = seg;\r\n\r\n // Save current path command\r\n allPathCommands[i] = pathCommand;\r\n if (i) {\r\n // Get previous path command for `shortenSegment`\r\n prevCommand = allPathCommands[i - 1];\r\n const shortSegment = shortenSegment(\r\n seg as AbsoluteSegment,\r\n normalizedSegment,\r\n optimParams,\r\n prevCommand,\r\n );\r\n const absSegment = roundSegment(shortSegment, round);\r\n const absString = absSegment.join(\"\");\r\n const relativeSegment = relativizeSegment(shortSegment, i, lastX, lastY);\r\n const relSegment = roundSegment(relativeSegment, round);\r\n const relString = relSegment.join(\"\");\r\n result = absString.length < relString.length ? absSegment : relSegment;\r\n }\r\n\r\n const seglen = normalizedSegment.length;\r\n optimParams.x1 = +normalizedSegment[seglen - 2];\r\n optimParams.y1 = +normalizedSegment[seglen - 1];\r\n optimParams.x2 = +normalizedSegment[seglen - 4] || optimParams.x1;\r\n optimParams.y2 = +normalizedSegment[seglen - 3] || optimParams.y1;\r\n\r\n return result;\r\n });\r\n};\r\n\r\nexport default optimizePath;\r\n","import CSSMatrix from \"@thednp/dommatrix\";\r\nimport { type PointTuple } from \"../types\";\r\n\r\n/**\r\n * Transforms a specified point using a matrix, returning a new\r\n * Tuple *Object* comprising of the transformed point.\r\n * Neither the matrix nor the original point are altered.\r\n *\r\n * @copyright thednp © 2021\r\n *\r\n * @param cssm CSSMatrix instance\r\n * @param v Tuple\r\n * @return the resulting Tuple\r\n */\r\nconst translatePoint = (\r\n cssm: CSSMatrix,\r\n v: [number, number, number, number],\r\n): [number, number, number, number] => {\r\n let m = CSSMatrix.Translate(v[0], v[1], v[2]);\r\n\r\n [, , , m.m44] = v;\r\n m = cssm.multiply(m);\r\n\r\n return [m.m41, m.m42, m.m43, m.m44];\r\n};\r\n\r\n/**\r\n * Returns the [x,y] projected coordinates for a given an [x,y] point\r\n * and an [x,y,z] perspective origin point.\r\n *\r\n * Equation found here =>\r\n * http://en.wikipedia.org/wiki/3D_projection#Diagram\r\n * Details =>\r\n * https://stackoverflow.com/questions/23792505/predicted-rendering-of-css-3d-transformed-pixel\r\n *\r\n * @param m the transformation matrix\r\n * @param point2D the initial [x,y] coordinates\r\n * @param origin the [x,y,z] transform origin\r\n * @returns the projected [x,y] coordinates\r\n */\r\nconst projection2d = (\r\n m: CSSMatrix,\r\n point2D: PointTuple,\r\n origin: [number, number, number],\r\n): PointTuple => {\r\n const [originX, originY, originZ] = origin;\r\n const [x, y, z] = translatePoint(m, [point2D[0], point2D[1], 0, 1]);\r\n\r\n const relativePositionX = x - originX;\r\n const relativePositionY = y - originY;\r\n const relativePositionZ = z - originZ;\r\n\r\n return [\r\n // protect against division by ZERO\r\n relativePositionX * (Math.abs(originZ) / Math.abs(relativePositionZ) || 1) +\r\n originX,\r\n relativePositionY * (Math.abs(originZ) / Math.abs(relativePositionZ) || 1) +\r\n originY,\r\n ];\r\n};\r\nexport default projection2d;\r\n","import type { CSegment, CurveArray, MSegment, PathCommand } from \"../types\";\r\n\r\n/**\r\n * Reverses all segments of a `pathArray`\r\n * which consists of only C (cubic-bezier) path commands.\r\n *\r\n * @param path the source `pathArray`\r\n * @returns the reversed `pathArray`\r\n */\r\nconst reverseCurve = (path: CurveArray) => {\r\n const rotatedCurve = path\r\n .slice(1)\r\n .map((x, i, curveOnly) =>\r\n !i\r\n ? path[0].slice(1).concat(x.slice(1) as number[])\r\n : curveOnly[i - 1].slice(-2).concat(x.slice(1))\r\n )\r\n .map((x) => x.map((_, i) => x[x.length - i - 2 * (1 - (i % 2))]))\r\n .reverse() as (MSegment | CSegment)[];\r\n\r\n return [[\"M\" as PathCommand | number].concat(rotatedCurve[0].slice(0, 2))]\r\n .concat(\r\n rotatedCurve.map((x) => [\"C\" as PathCommand | number].concat(x.slice(2))),\r\n ) as CurveArray;\r\n};\r\n\r\nexport default reverseCurve;\r\n","import type {\r\n ASegment,\r\n CSegment,\r\n HSegment,\r\n MSegment,\r\n PathArray,\r\n PathSegment,\r\n PointTuple,\r\n QSegment,\r\n SSegment,\r\n TSegment,\r\n VSegment,\r\n} from \"../types\";\r\nimport pathToAbsolute from \"../convert/pathToAbsolute\";\r\nimport normalizePath from \"./normalizePath\";\r\nimport iterate from \"./iterate\";\r\n\r\n/**\r\n * Reverses all segments of a `pathArray` and returns a new `pathArray` instance\r\n * with absolute values.\r\n *\r\n * @param pathInput the source `pathArray`\r\n * @returns the reversed `pathArray`\r\n */\r\nconst reversePath = (pathInput: PathArray) => {\r\n const absolutePath = pathToAbsolute(pathInput);\r\n const normalizedPath = normalizePath(absolutePath);\r\n const pLen = absolutePath.length;\r\n const isClosed = absolutePath[pLen - 1][0] === \"Z\";\r\n\r\n const reversedPath = iterate(absolutePath, (segment, i) => {\r\n const normalizedSegment = normalizedPath[i];\r\n const prevSeg = i && absolutePath[i - 1];\r\n const prevCommand = prevSeg && prevSeg[0];\r\n const nextSeg = absolutePath[i + 1];\r\n const nextCommand = nextSeg && nextSeg[0];\r\n const [pathCommand] = segment;\r\n const [x, y] = normalizedPath[i ? i - 1 : pLen - 1].slice(-2) as PointTuple;\r\n let result = segment;\r\n\r\n switch (pathCommand) {\r\n case \"M\":\r\n result = (isClosed ? [\"Z\"] : [pathCommand, x, y]) as PathSegment;\r\n break;\r\n case \"A\":\r\n result = [\r\n pathCommand,\r\n segment[1],\r\n segment[2],\r\n segment[3],\r\n segment[4],\r\n segment[5] === 1 ? 0 : 1,\r\n x,\r\n y,\r\n ] as ASegment;\r\n break;\r\n case \"C\":\r\n if (nextSeg && nextCommand === \"S\") {\r\n result = [\"S\", segment[1], segment[2], x, y] as SSegment;\r\n } else {\r\n result = [\r\n pathCommand,\r\n segment[3],\r\n segment[4],\r\n segment[1],\r\n segment[2],\r\n x,\r\n y,\r\n ] as CSegment;\r\n }\r\n break;\r\n case \"S\":\r\n if (\r\n prevCommand && \"CS\".includes(prevCommand) &&\r\n (!nextSeg || nextCommand !== \"S\")\r\n ) {\r\n result = [\r\n \"C\",\r\n normalizedSegment[3],\r\n normalizedSegment[4],\r\n normalizedSegment[1],\r\n normalizedSegment[2],\r\n x,\r\n y,\r\n ] as CSegment;\r\n } else {\r\n result = [\r\n pathCommand,\r\n normalizedSegment[1],\r\n normalizedSegment[2],\r\n x,\r\n y,\r\n ] as SSegment;\r\n }\r\n break;\r\n case \"Q\":\r\n if (nextSeg && nextCommand === \"T\") {\r\n result = [\"T\", x, y] as TSegment;\r\n } else {\r\n result = [pathCommand, segment[1], segment[2], x, y] as QSegment;\r\n }\r\n break;\r\n case \"T\":\r\n if (\r\n prevCommand && \"QT\".includes(prevCommand) &&\r\n (!nextSeg || nextCommand !== \"T\")\r\n ) {\r\n result = [\r\n \"Q\",\r\n normalizedSegment[1],\r\n normalizedSegment[2],\r\n x,\r\n y,\r\n ] as QSegment;\r\n } else {\r\n result = [pathCommand, x, y] as TSegment;\r\n }\r\n break;\r\n case \"Z\":\r\n result = [\"M\", x, y] as MSegment;\r\n break;\r\n case \"H\":\r\n result = [pathCommand, x] as HSegment;\r\n break;\r\n case \"V\":\r\n result = [pathCommand, y] as VSegment;\r\n break;\r\n default:\r\n result = [pathCommand as typeof pathCommand | number].concat(\r\n segment.slice(1, -2),\r\n x,\r\n y,\r\n ) as PathSegment;\r\n }\r\n\r\n return result;\r\n });\r\n\r\n return (\r\n isClosed\r\n ? reversedPath.reverse()\r\n : [reversedPath[0] as PathSegment].concat(reversedPath.slice(1).reverse())\r\n ) as PathArray;\r\n};\r\n\r\nexport default reversePath;\r\n","import type { PathArray } from \"../types\";\r\nimport defaultOptions from \"../options/options\";\r\nimport iterate from \"./iterate\";\r\nimport roundSegment from \"./roundSegment\";\r\n\r\n/**\r\n * Rounds the values of a `pathArray` instance to\r\n * a specified amount of decimals and returns it.\r\n *\r\n * @param path the source `pathArray`\r\n * @param roundOption the amount of decimals to round numbers to\r\n * @returns the resulted `pathArray` with rounded values\r\n */\r\nconst roundPath = (path: PathArray, roundOption?: number | \"off\") => {\r\n let { round } = defaultOptions;\r\n // allow for ZERO decimals\r\n round = roundOption === \"off\"\r\n ? roundOption\r\n : typeof roundOption === \"number\" && roundOption >= 0\r\n ? roundOption\r\n : typeof round === \"number\" && round >= 0\r\n ? round\r\n : /* istanbul ignore next @preserve */ \"off\";\r\n\r\n /* istanbul ignore else @preserve */\r\n if (round === \"off\") return path.slice(0) as PathArray;\r\n\r\n return iterate(path, (segment) => {\r\n return roundSegment(segment, round);\r\n });\r\n};\r\nexport default roundPath;\r\n","import midPoint from \"../math/midPoint\";\r\nimport type { CubicSegment, PointTuple } from \"../types\";\r\n\r\n/**\r\n * Split a cubic-bezier segment into two.\r\n *\r\n * @param pts the cubic-bezier parameters\r\n * @param ratio the cubic-bezier parameters\r\n * @return two new cubic-bezier segments\r\n */\r\nconst splitCubic = (\r\n pts: number[],\r\n ratio = 0.5,\r\n): [CubicSegment, CubicSegment] => {\r\n const t = ratio;\r\n const p0 = pts.slice(0, 2) as PointTuple;\r\n const p1 = pts.slice(2, 4) as PointTuple;\r\n const p2 = pts.slice(4, 6) as PointTuple;\r\n const p3 = pts.slice(6, 8) as PointTuple;\r\n const p4 = midPoint(p0, p1, t);\r\n const p5 = midPoint(p1, p2, t);\r\n const p6 = midPoint(p2, p3, t);\r\n const p7 = midPoint(p4, p5, t);\r\n const p8 = midPoint(p5, p6, t);\r\n const p9 = midPoint(p7, p8, t);\r\n\r\n return [\r\n [\"C\", p4[0], p4[1], p7[0], p7[1], p9[0], p9[1]],\r\n [\"C\", p8[0], p8[1], p6[0], p6[1], p3[0], p3[1]],\r\n ];\r\n};\r\nexport default splitCubic;\r\n","import paramsParser from \"../parser/paramsParser\";\r\nimport type {\r\n AbsoluteCommand,\r\n HSegment,\r\n MSegment,\r\n PathArray,\r\n PointTuple,\r\n RelativeCommand,\r\n VSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Split a path into an `Array` of sub-path strings.\r\n *\r\n * In the process, values are converted to absolute\r\n * for visual consistency.\r\n *\r\n * @param pathInput the source `pathArray`\r\n * @return an array with all sub-path strings\r\n */\r\nconst splitPath = (pathInput: PathArray): PathArray[] => {\r\n const composite = [] as PathArray[];\r\n let path: PathArray;\r\n let pi = -1;\r\n let x = 0;\r\n let y = 0;\r\n let mx = 0;\r\n let my = 0;\r\n const params = { ...paramsParser };\r\n\r\n pathInput.forEach((seg) => {\r\n const [pathCommand] = seg;\r\n const absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\r\n const relCommand = pathCommand.toLowerCase() as RelativeCommand;\r\n const isRelative = pathCommand === relCommand;\r\n const values = seg.slice(1) as number[];\r\n\r\n if (absCommand === \"M\") {\r\n pi += 1;\r\n [x, y] = values as PointTuple;\r\n x += isRelative ? params.x : 0;\r\n y += isRelative ? params.y : 0;\r\n mx = x;\r\n my = y;\r\n path = [(isRelative ? [absCommand, mx, my] : seg) as MSegment];\r\n } else {\r\n if (absCommand === \"Z\") {\r\n x = mx;\r\n y = my;\r\n } else if (absCommand === \"H\") {\r\n [, x] = seg as HSegment;\r\n x += isRelative ? params.x : /* istanbul ignore next @preserve */ 0;\r\n } else if (absCommand === \"V\") {\r\n [, y] = seg as VSegment;\r\n y += isRelative ? params.y : /* istanbul ignore next @preserve */ 0;\r\n } else {\r\n [x, y] = seg.slice(-2) as PointTuple;\r\n x += isRelative ? params.x : 0;\r\n y += isRelative ? params.y : 0;\r\n }\r\n path.push(seg);\r\n }\r\n\r\n params.x = x;\r\n params.y = y;\r\n composite[pi] = path;\r\n });\r\n\r\n return composite;\r\n};\r\nexport default splitPath;\r\n","import getSVGMatrix from \"./getSVGMatrix\";\r\nimport projection2d from \"./projection2d\";\r\nimport defaultOptions from \"../options/options\";\r\nimport type {\r\n AbsoluteArray,\r\n AbsoluteSegment,\r\n CSegment,\r\n LSegment,\r\n PathArray,\r\n TransformObjectValues,\r\n} from \"../types\";\r\nimport type { TransformObject } from \"../interface\";\r\nimport iterate from \"./iterate\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport absolutizeSegment from \"./absolutizeSegment\";\r\nimport arcToCubic from \"./arcToCubic\";\r\n\r\n/**\r\n * Apply a 2D / 3D transformation to a `pathArray` instance.\r\n *\r\n * Since *SVGElement* doesn't support 3D transformation, this function\r\n * creates a 2D projection of the element.\r\n *\r\n * @param path the `pathArray` to apply transformation\r\n * @param transform the transform functions `Object`\r\n * @returns the resulted `pathArray`\r\n */\r\nconst transformPath = (\r\n pathInput: PathArray | string,\r\n transform?: Partial,\r\n) => {\r\n // last x and y transformed values\r\n let x = 0;\r\n let y = 0;\r\n // new x and y transformed\r\n let lx = 0;\r\n let ly = 0;\r\n // segment params iteration index and length\r\n let j = 0;\r\n let jj = 0;\r\n let pathCommand = \"M\";\r\n // transform uses it's own set of params\r\n const path = parsePathString(pathInput);\r\n const transformProps = transform && Object.keys(transform);\r\n\r\n // when used as a static method, invalidate somehow\r\n if (!transform || (transformProps && !transformProps.length)) {\r\n return path.slice(0) as typeof path;\r\n }\r\n\r\n // transform origin is extremely important\r\n if (!transform.origin) {\r\n Object.assign(transform, { origin: defaultOptions.origin });\r\n }\r\n const origin = transform.origin as [number, number, number];\r\n const matrixInstance = getSVGMatrix(transform as TransformObjectValues);\r\n\r\n if (matrixInstance.isIdentity) return path.slice(0) as typeof path;\r\n\r\n return iterate(path, (seg, index, lastX, lastY) => {\r\n [pathCommand] = seg;\r\n const absCommand = pathCommand.toUpperCase();\r\n const isRelative = absCommand !== pathCommand;\r\n const absoluteSegment = isRelative\r\n ? absolutizeSegment(seg, index, lastX, lastY)\r\n : (seg.slice(0) as AbsoluteSegment);\r\n\r\n let result = absCommand === \"A\"\r\n // ? segmentToCubic(absoluteSegment, transformParams)\r\n ? ([\"C\" as string | number].concat(\r\n arcToCubic(\r\n lastX,\r\n lastY,\r\n absoluteSegment[1] as number,\r\n absoluteSegment[2] as number,\r\n absoluteSegment[3] as number,\r\n absoluteSegment[4] as number,\r\n absoluteSegment[5] as number,\r\n absoluteSegment[6] as number,\r\n absoluteSegment[7] as number,\r\n ),\r\n ) as CSegment)\r\n : absCommand === \"V\"\r\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\r\n : absCommand === \"H\"\r\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\r\n : absoluteSegment;\r\n\r\n // update pathCommand\r\n pathCommand = result[0];\r\n const isLongArc = pathCommand === \"C\" && result.length > 7;\r\n const tempSegment =\r\n (isLongArc ? result.slice(0, 7) : result.slice(0)) as AbsoluteSegment;\r\n\r\n if (isLongArc) {\r\n path.splice(\r\n index + 1,\r\n 0,\r\n [\"C\" as typeof pathCommand | number].concat(\r\n result.slice(7),\r\n ) as CSegment,\r\n );\r\n result = tempSegment as CSegment;\r\n }\r\n\r\n if (pathCommand === \"L\") {\r\n [lx, ly] = projection2d(matrixInstance, [\r\n (result as LSegment)[1],\r\n (result as LSegment)[2],\r\n ], origin);\r\n\r\n /* istanbul ignore else @preserve */\r\n if (x !== lx && y !== ly) {\r\n result = [\"L\", lx, ly];\r\n } else if (y === ly) {\r\n result = [\"H\", lx];\r\n } else if (x === lx) {\r\n result = [\"V\", ly];\r\n }\r\n } else {\r\n for (j = 1, jj = result.length; j < jj; j += 2) {\r\n [lx, ly] = projection2d(\r\n matrixInstance,\r\n [+result[j], +result[j + 1]],\r\n origin,\r\n );\r\n result[j] = lx;\r\n result[j + 1] = ly;\r\n }\r\n }\r\n // now update x and y\r\n x = lx;\r\n y = ly;\r\n\r\n return result;\r\n });\r\n};\r\n\r\nexport default transformPath;\r\n","\"use strict\";\r\nimport CSSMatrix from \"@thednp/dommatrix\";\r\nimport { PathArray, PointTuple, TransformObjectValues } from \"./types\";\r\nimport type { Options, TransformEntries, TransformObject } from \"./interface\";\r\nexport * from \"./types\";\r\nexport * from \"./interface\";\r\nimport defaultOptions from \"./options/options\";\r\n\r\nimport pathToAbsolute from \"./convert/pathToAbsolute\";\r\nimport pathToRelative from \"./convert/pathToRelative\";\r\nimport pathToCurve from \"./convert/pathToCurve\";\r\nimport pathToString from \"./convert/pathToString\";\r\nimport * as arcTools from \"./math/arcTools\";\r\nimport {\r\n bezierLength,\r\n calculateBezier,\r\n CBEZIER_MINMAX_EPSILON,\r\n computeBezier,\r\n Cvalues,\r\n deriveBezier,\r\n getBezierLength,\r\n minmaxC,\r\n minmaxQ,\r\n Tvalues,\r\n} from \"./math/bezier\";\r\nimport {\r\n getCubicBBox,\r\n getCubicLength,\r\n getPointAtCubicLength,\r\n getPointAtCubicSegmentLength,\r\n} from \"./math/cubicTools\";\r\nimport {\r\n getLineBBox,\r\n getLineLength,\r\n getPointAtLineLength,\r\n} from \"./math/lineTools\";\r\nimport {\r\n getPointAtQuadLength,\r\n getPointAtQuadSegmentLength,\r\n getQuadBBox,\r\n getQuadLength,\r\n} from \"./math/quadTools\";\r\nimport { polygonArea, polygonLength } from \"./math/polygonTools\";\r\n\r\nimport distanceSquareRoot from \"./math/distanceSquareRoot\";\r\nimport midPoint from \"./math/midPoint\";\r\nimport rotateVector from \"./math/rotateVector\";\r\nimport roundTo from \"./math/roundTo\";\r\n\r\nimport error from \"./parser/error\";\r\nimport parsePathString from \"./parser/parsePathString\";\r\nimport finalizeSegment from \"./parser/finalizeSegment\";\r\nimport invalidPathValue from \"./parser/invalidPathValue\";\r\nimport isArcCommand from \"./parser/isArcCommand\";\r\nimport isDigit from \"./parser/isDigit\";\r\nimport isDigitStart from \"./parser/isDigitStart\";\r\nimport isMoveCommand from \"./parser/isMoveCommand\";\r\nimport isPathCommand from \"./parser/isPathCommand\";\r\nimport isSpace from \"./parser/isSpace\";\r\nimport paramsCount from \"./parser/paramsCount\";\r\nimport paramsParser from \"./parser/paramsParser\";\r\nimport pathParser from \"./parser/pathParser\";\r\nimport scanFlag from \"./parser/scanFlag\";\r\nimport scanParam from \"./parser/scanParam\";\r\nimport scanSegment from \"./parser/scanSegment\";\r\nimport skipSpaces from \"./parser/skipSpaces\";\r\n\r\nimport distanceEpsilon from \"./util/distanceEpsilon\";\r\nimport getClosestPoint from \"./util/getClosestPoint\";\r\nimport getDrawDirection from \"./util/getDrawDirection\";\r\nimport getPathArea from \"./util/getPathArea\";\r\nimport getPathBBox from \"./util/getPathBBox\";\r\nimport getPointAtLength from \"./util/getPointAtLength\";\r\nimport getPropertiesAtLength from \"./util/getPropertiesAtLength\";\r\nimport getPropertiesAtPoint from \"./util/getPropertiesAtPoint\";\r\nimport getSegmentAtLength from \"./util/getSegmentAtLength\";\r\nimport getSegmentOfPoint from \"./util/getSegmentOfPoint\";\r\nimport getTotalLength from \"./util/getTotalLength\";\r\n\r\nimport isAbsoluteArray from \"./util/isAbsoluteArray\";\r\nimport isCurveArray from \"./util/isCurveArray\";\r\nimport isNormalizedArray from \"./util/isNormalizedArray\";\r\nimport isPathArray from \"./util/isPathArray\";\r\nimport isPointInStroke from \"./util/isPointInStroke\";\r\nimport isRelativeArray from \"./util/isRelativeArray\";\r\nimport isValidPath from \"./util/isValidPath\";\r\nimport shapeParams from \"./util/shapeParams\";\r\nimport shapeToPath from \"./util/shapeToPath\";\r\nimport shapeToPathArray from \"./util/shapeToPathArray\";\r\n\r\nimport absolutizeSegment from \"./process/absolutizeSegment\";\r\nimport arcToCubic from \"./process/arcToCubic\";\r\nimport getSVGMatrix from \"./process/getSVGMatrix\";\r\nimport iterate from \"./process/iterate\";\r\nimport lineToCubic from \"./process/lineToCubic\";\r\nimport normalizePath from \"./process/normalizePath\";\r\nimport normalizeSegment from \"./process/normalizeSegment\";\r\nimport optimizePath from \"./process/optimizePath\";\r\nimport projection2d from \"./process/projection2d\";\r\nimport quadToCubic from \"./process/quadToCubic\";\r\nimport relativizeSegment from \"./process/relativizeSegment\";\r\nimport reverseCurve from \"./process/reverseCurve\";\r\nimport reversePath from \"./process/reversePath\";\r\nimport roundPath from \"./process/roundPath\";\r\nimport roundSegment from \"./process/roundSegment\";\r\nimport segmentToCubic from \"./process/segmentToCubic\";\r\nimport shortenSegment from \"./process/shortenSegment\";\r\nimport splitCubic from \"./process/splitCubic\";\r\nimport splitPath from \"./process/splitPath\";\r\nimport transformPath from \"./process/transformPath\";\r\n\r\n/**\r\n * Creates a new SVGPathCommander instance with the following properties:\r\n * * segments: `pathArray`\r\n * * round: number\r\n * * origin: [number, number, number?]\r\n *\r\n * @class\r\n * @author thednp \r\n * @returns a new SVGPathCommander instance\r\n */\r\nclass SVGPathCommander {\r\n public static CSSMatrix = CSSMatrix;\r\n public static pathToAbsolute = pathToAbsolute;\r\n public static pathToRelative = pathToRelative;\r\n public static pathToCurve = pathToCurve;\r\n public static pathToString = pathToString;\r\n public static arcTools = arcTools;\r\n public static bezierTools = {\r\n Cvalues,\r\n Tvalues,\r\n minmaxC,\r\n minmaxQ,\r\n getBezierLength,\r\n bezierLength,\r\n calculateBezier,\r\n computeBezier,\r\n deriveBezier,\r\n CBEZIER_MINMAX_EPSILON,\r\n };\r\n public static cubicTools = {\r\n getCubicLength,\r\n getCubicBBox,\r\n getPointAtCubicLength,\r\n getPointAtCubicSegmentLength,\r\n };\r\n public static lineTools = {\r\n getPointAtLineLength,\r\n getLineBBox,\r\n getLineLength,\r\n };\r\n public static quadTools = {\r\n getPointAtQuadSegmentLength,\r\n getQuadLength,\r\n getQuadBBox,\r\n getPointAtQuadLength,\r\n };\r\n public static polygonTools = { polygonArea, polygonLength };\r\n public static distanceSquareRoot = distanceSquareRoot;\r\n public static distanceEpsilon = distanceEpsilon;\r\n public static midPoint = midPoint;\r\n public static rotateVector = rotateVector;\r\n public static roundTo = roundTo;\r\n public static finalizeSegment = finalizeSegment;\r\n public static invalidPathValue = invalidPathValue;\r\n public static isArcCommand = isArcCommand;\r\n public static isDigit = isDigit;\r\n public static isDigitStart = isDigitStart;\r\n public static isMoveCommand = isMoveCommand;\r\n public static isPathCommand = isPathCommand;\r\n public static isSpace = isSpace;\r\n public static paramsCount = paramsCount;\r\n public static paramsParser = paramsParser;\r\n public static pathParser = pathParser;\r\n public static scanFlag = scanFlag;\r\n public static scanParam = scanParam;\r\n public static scanSegment = scanSegment;\r\n public static skipSpaces = skipSpaces;\r\n public static getPathBBox = getPathBBox;\r\n public static getPathArea = getPathArea;\r\n public static getTotalLength = getTotalLength;\r\n public static getDrawDirection = getDrawDirection;\r\n public static getPointAtLength = getPointAtLength;\r\n public static getPropertiesAtLength = getPropertiesAtLength;\r\n public static getPropertiesAtPoint = getPropertiesAtPoint;\r\n public static getClosestPoint = getClosestPoint;\r\n public static getSegmentOfPoint = getSegmentOfPoint;\r\n public static getSegmentAtLength = getSegmentAtLength;\r\n public static isPointInStroke = isPointInStroke;\r\n public static isValidPath = isValidPath;\r\n public static isPathArray = isPathArray;\r\n public static isAbsoluteArray = isAbsoluteArray;\r\n public static isRelativeArray = isRelativeArray;\r\n public static isCurveArray = isCurveArray;\r\n public static isNormalizedArray = isNormalizedArray;\r\n public static shapeToPath = shapeToPath;\r\n public static shapeToPathArray = shapeToPathArray;\r\n public static shapeParams = shapeParams;\r\n public static parsePathString = parsePathString;\r\n public static absolutizeSegment = absolutizeSegment;\r\n public static arcToCubic = arcToCubic;\r\n public static getSVGMatrix = getSVGMatrix;\r\n public static iterate = iterate;\r\n public static lineToCubic = lineToCubic;\r\n public static normalizePath = normalizePath;\r\n public static normalizeSegment = normalizeSegment;\r\n public static optimizePath = optimizePath;\r\n public static projection2d = projection2d;\r\n public static quadToCubic = quadToCubic;\r\n public static relativizeSegment = relativizeSegment;\r\n public static reverseCurve = reverseCurve;\r\n public static reversePath = reversePath;\r\n public static roundPath = roundPath;\r\n public static roundSegment = roundSegment;\r\n public static segmentToCubic = segmentToCubic;\r\n public static shortenSegment = shortenSegment;\r\n public static splitCubic = splitCubic;\r\n public static splitPath = splitPath;\r\n public static transformPath = transformPath;\r\n // declare class properties\r\n declare segments: PathArray;\r\n declare round: number | \"off\";\r\n declare origin: [number, number, number];\r\n\r\n /**\r\n * @constructor\r\n * @param pathValue the path string\r\n * @param config instance options\r\n */\r\n constructor(pathValue: string, config?: Partial) {\r\n const instanceOptions = config || {};\r\n const undefPath = typeof pathValue === \"undefined\";\r\n\r\n if (undefPath || !pathValue.length) {\r\n throw TypeError(\r\n `${error}: \"pathValue\" is ${undefPath ? \"undefined\" : \"empty\"}`,\r\n );\r\n }\r\n\r\n this.segments = parsePathString(pathValue);\r\n\r\n // // set instance options.round\r\n const { round: roundOption, origin: originOption } = instanceOptions;\r\n let round: number | \"off\";\r\n\r\n if (Number.isInteger(roundOption) || roundOption === \"off\") {\r\n round = roundOption as number | \"off\";\r\n } else {\r\n round = defaultOptions.round as number;\r\n }\r\n\r\n // set instance options.origin\r\n // the SVGPathCommander class will always override the default origin\r\n let origin = defaultOptions.origin as [number, number, number];\r\n /* istanbul ignore else @preserve */\r\n if (Array.isArray(originOption) && originOption.length >= 2) {\r\n const [originX, originY, originZ] = originOption.map(Number);\r\n origin = [\r\n !Number.isNaN(originX) ? originX : 0,\r\n !Number.isNaN(originY) ? originY : 0,\r\n !Number.isNaN(originZ) ? originZ : 0,\r\n ];\r\n }\r\n\r\n this.round = round;\r\n this.origin = origin;\r\n\r\n return this;\r\n }\r\n get bbox() {\r\n return getPathBBox(this.segments);\r\n }\r\n get length() {\r\n return getTotalLength(this.segments);\r\n }\r\n\r\n /**\r\n * Returns the path bounding box, equivalent to native `path.getBBox()`.\r\n *\r\n * @public\r\n * @returns the pathBBox\r\n */\r\n getBBox() {\r\n return this.bbox;\r\n }\r\n\r\n /**\r\n * Returns the total path length, equivalent to native `path.getTotalLength()`.\r\n *\r\n * @public\r\n * @returns the path total length\r\n */\r\n getTotalLength() {\r\n return this.length;\r\n }\r\n\r\n /**\r\n * Returns an `{x,y}` point in the path stroke at a given length,\r\n * equivalent to the native `path.getPointAtLength()`.\r\n *\r\n * @public\r\n * @param length the length\r\n * @returns the requested point\r\n */\r\n getPointAtLength(length: number) {\r\n return getPointAtLength(this.segments, length);\r\n }\r\n\r\n /**\r\n * Convert path to absolute values\r\n *\r\n * @public\r\n */\r\n toAbsolute() {\r\n const { segments } = this;\r\n this.segments = pathToAbsolute(segments);\r\n return this;\r\n }\r\n\r\n /**\r\n * Convert path to relative values\r\n *\r\n * @public\r\n */\r\n toRelative() {\r\n const { segments } = this;\r\n this.segments = pathToRelative(segments);\r\n return this;\r\n }\r\n\r\n /**\r\n * Convert path to cubic-bezier values. In addition, un-necessary `Z`\r\n * segment is removed if previous segment extends to the `M` segment.\r\n *\r\n * @public\r\n */\r\n toCurve() {\r\n const { segments } = this;\r\n this.segments = pathToCurve(segments);\r\n return this;\r\n }\r\n\r\n /**\r\n * Reverse the order of the segments and their values.\r\n *\r\n * @param onlySubpath option to reverse all sub-paths except first\r\n * @public\r\n */\r\n reverse(onlySubpath?: boolean) {\r\n const { segments } = this;\r\n const split = splitPath(segments);\r\n const subPath = split.length > 1 ? split : false;\r\n\r\n const absoluteMultiPath = subPath\r\n ? subPath.map((x, i) => {\r\n if (onlySubpath) {\r\n return i ? reversePath(x) : x.slice(0);\r\n }\r\n return reversePath(x);\r\n })\r\n : segments.slice(0);\r\n\r\n let path = [] as unknown as PathArray;\r\n if (subPath) {\r\n path = absoluteMultiPath.flat(1) as PathArray;\r\n } else {\r\n path = onlySubpath ? segments : reversePath(segments);\r\n }\r\n\r\n this.segments = path.slice(0) as PathArray;\r\n return this;\r\n }\r\n\r\n /**\r\n * Normalize path in 2 steps:\r\n * * convert `pathArray`(s) to absolute values\r\n * * convert shorthand notation to standard notation\r\n *\r\n * @public\r\n */\r\n normalize() {\r\n const { segments } = this;\r\n this.segments = normalizePath(segments);\r\n return this;\r\n }\r\n\r\n /**\r\n * Optimize `pathArray` values:\r\n * * convert segments to absolute and/or relative values\r\n * * select segments with shortest resulted string\r\n * * round values to the specified `decimals` option value\r\n *\r\n * @public\r\n */\r\n optimize() {\r\n const { segments } = this;\r\n const round = this.round === \"off\" ? 2 : this.round;\r\n\r\n this.segments = optimizePath(segments, round);\r\n return this;\r\n }\r\n\r\n /**\r\n * Transform path using values from an `Object` defined as `transformObject`.\r\n *\r\n * @see TransformObject for a quick refference\r\n *\r\n * @param source a `transformObject`as described above\r\n * @public\r\n */\r\n transform(source?: Partial) {\r\n if (\r\n !source ||\r\n typeof source !== \"object\" ||\r\n (typeof source === \"object\" &&\r\n ![\"translate\", \"rotate\", \"skew\", \"scale\"].some((x) => x in source))\r\n ) {\r\n return this;\r\n }\r\n\r\n const {\r\n segments,\r\n origin: [cx, cy, cz],\r\n } = this;\r\n const transform = {} as TransformObjectValues;\r\n for (const [k, v] of Object.entries(source) as TransformEntries) {\r\n // istanbul ignore else @preserve\r\n if (k === \"skew\" && Array.isArray(v)) {\r\n transform[k] = v.map(Number) as PointTuple;\r\n } else if (\r\n (k === \"rotate\" || k === \"translate\" || k === \"origin\" ||\r\n k === \"scale\") && Array.isArray(v)\r\n ) {\r\n transform[k] = v.map(Number) as [number, number, number];\r\n } else if (k !== \"origin\" && typeof Number(v) === \"number\") {\r\n transform[k] = Number(v);\r\n }\r\n }\r\n\r\n // if origin is not specified\r\n // it's important that we have one\r\n const { origin } = transform;\r\n\r\n if (Array.isArray(origin) && origin.length >= 2) {\r\n const [originX, originY, originZ] = origin.map(Number);\r\n transform.origin = [\r\n !Number.isNaN(originX) ? originX : cx,\r\n !Number.isNaN(originY) ? originY : cy,\r\n originZ || cz,\r\n ];\r\n } else {\r\n transform.origin = [cx, cy, cz];\r\n }\r\n\r\n this.segments = transformPath(segments, transform);\r\n return this;\r\n }\r\n\r\n /**\r\n * Rotate path 180deg vertically\r\n *\r\n * @public\r\n */\r\n flipX() {\r\n const { cx, cy } = this.bbox;\r\n this.transform({ rotate: [0, 180, 0], origin: [cx, cy, 0] });\r\n return this;\r\n }\r\n\r\n /**\r\n * Rotate path 180deg horizontally\r\n *\r\n * @public\r\n */\r\n flipY() {\r\n const { cx, cy } = this.bbox;\r\n this.transform({ rotate: [180, 0, 0], origin: [cx, cy, 0] });\r\n return this;\r\n }\r\n\r\n /**\r\n * Export the current path to be used\r\n * for the `d` (description) attribute.\r\n *\r\n * @public\r\n * @return the path string\r\n */\r\n toString() {\r\n return pathToString(this.segments, this.round);\r\n }\r\n\r\n /**\r\n * Remove the instance.\r\n *\r\n * @public\r\n * @return void\r\n */\r\n dispose() {\r\n Object.keys(this).forEach((key) => delete this[key as keyof typeof this]);\r\n }\r\n}\r\n\r\nexport default SVGPathCommander;\r\n"],"names":["Z","z","s","e","p","$","E","P","y","g","n","i","r","a","m","h","c","u","f","w","o","d","b","X","O","x","Y","F","T","k","I","v","R","D","N","defaultOptions","paramsCount","finalizeSegment","path","pathCommand","relativeCommand","data","error","scanFlag","index","pathValue","code","isDigit","invalidPathValue","scanParam","max","start","zeroFirst","hasCeiling","hasDecimal","hasDot","ch","isSpace","skipSpaces","isPathCommand","isDigitStart","isArcCommand","isMoveCommand","scanSegment","segments","cmdCode","reqParams","paramCounts","lastSegment","_a","PathParser","pathString","parsePathString","pathInput","absolutizeSegment","segment","lastX","lastY","absCommand","absValues","seglen","j","iterate","iterator","pathLen","isRelative","mx","my","segLen","iteratorResult","pathToAbsolute","relativizeSegment","relCommand","relValues","pathToRelative","rotateVector","rad","sin","cos","arcToCubic","X1","Y1","RX","RY","angle","LAF","SF","X2","Y2","recursive","x1","y1","rx","ry","x2","y2","d120","res","xy","f1","f2","cx","cy","rx2","ry2","df","f2old","x2old","y2old","c1","s1","c2","s2","t","hx","hy","m1","m2","m3","m4","newres","ii","quadToCubic","qx","qy","r13","r23","midPoint","ax","ay","bx","by","lineToCubic","segmentToCubic","params","values","px1","py1","px","py","normalizeSegment","px2","py2","nqx","nqy","paramsParser","pathToCurve","seg","normalSegment","result","roundTo","round","pow","pathToString","roundOption","valLen","distanceSquareRoot","getLineLength","getPointAtLineLength","distance","point","length","getLineBBox","min","arcLength","theta","halfTheta","sinHalfTheta","cosHalfTheta","term1","term2","arcPoint","alpha","cosA","sinA","angleBetween","v0","v1","v0x","v0y","v1x","v1y","getArcProps","abs","sqrt","PI","xRotRad","dx","dy","transformedPoint","radiiCheck","cSquareNumerator","cSquareRootDenom","cRadicand","cCoef","transformedCenter","center","startVector","startAngle","endVector","sweepAngle","endAngle","getArcLength","getPointAtArcLength","ellipseComponentX","ellipseComponentY","getArcBBox","deltaAngle","tan","atan2","tangent","angle1","angle2","angle3","angle4","xArray","yArray","xMin","xMax","yMin","yMax","angleAfterStart","pP2","angleBeforeEnd","pP3","p1","p2","p4","p3","Tvalues","Cvalues","deriveBezier","points","dpoints","list","computeBezier","order","mt","mt2","t2","calculateBezier","derivativeFn","l","bezierLength","len","sum","getBezierLength","curve","idx","step","CBEZIER_MINMAX_EPSILON","minmaxQ","cp","v2","minmaxC","cp1","cp2","K","S","L","Q","getPointAtCubicSegmentLength","c1x","c1y","c2x","c2y","t1","getCubicLength","getPointAtCubicLength","distanceIsNumber","currentLength","getCubicBBox","cxMinMax","cyMinMax","getPointAtQuadSegmentLength","getQuadLength","getPointAtQuadLength","getQuadBBox","polygonArea","polygon","area","polygonLength","DISTANCE_EPSILON","normalizePath","_","getPointAtLength","isM","POINT","totalLength","getTotalLength","paramX1","paramY1","paramX2","paramY2","paramQX","paramQY","absoluteSegment","cp1x","cp1y","getPropertiesAtLength","pathArray","pathTemp","pathLength","lengthAtSegment","getPropertiesAtPoint","normalPath","distanceTo","precision","scan","closest","scanDistance","bestLength","bestDistance","scanLength","before","after","beforeLength","afterLength","beforeDistance","afterDistance","getClosestPoint","getCubicSegArea","getPathArea","getDrawDirection","getPathBBox","minX","minY","maxX","maxY","width","height","getSegmentAtLength","getSegmentOfPoint","isPathArray","lk","isAbsoluteArray","isNormalizedArray","pc","isCurveArray","isPointInStroke","isRelativeArray","isValidPath","shapeParams","isElement","node","getLinePath","attr","getPolyPath","getCirclePath","getEllipsePath","getRectanglePath","shapeToPathArray","element","supportedShapes","targetIsElement","tagName","type","shapeAttrs","config","shapeToPath","replace","ownerDocument","doc","description","name","value","getSVGMatrix","transform","matrix","CSSMatrix","origin","originX","originY","translate","rotate","skew","scale","shortenSegment","prevCommand","defaultRound","normalValues","nx","ny","nx1","ny1","roundSegment","optimizePath","optimParams","allPathCommands","normalizedSegment","shortSegment","absSegment","absString","relativeSegment","relSegment","relString","translatePoint","cssm","projection2d","point2D","originZ","relativePositionX","relativePositionY","relativePositionZ","reverseCurve","rotatedCurve","curveOnly","reversePath","absolutePath","normalizedPath","pLen","isClosed","reversedPath","prevSeg","nextSeg","nextCommand","roundPath","splitCubic","pts","ratio","p0","p5","p6","p7","p8","p9","splitPath","composite","pi","transformPath","lx","ly","jj","transformProps","matrixInstance","isLongArc","tempSegment","SVGPathCommander","instanceOptions","undefPath","originOption","onlySubpath","split","subPath","absoluteMultiPath","source","cz","key","__publicField","arcTools","distanceEpsilon","pathParser"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/dist/svg-path-commander.d.ts b/dist/svg-path-commander.d.ts index c0fdf6b..dd50103 100644 --- a/dist/svg-path-commander.d.ts +++ b/dist/svg-path-commander.d.ts @@ -406,7 +406,7 @@ export declare type sSegment = [sCommand, number, number, number, number]; * @author thednp * @returns a new SVGPathCommander instance */ -declare class SVGPathCommander_2 { +declare class SVGPathCommander { static CSSMatrix: typeof default_2; static pathToAbsolute: (pathInput: string | PathArray) => AbsoluteArray_2; static pathToRelative: (pathInput: string | PathArray) => RelativeArray_2; @@ -699,7 +699,7 @@ declare class SVGPathCommander_2 { */ dispose(): void; } -export default SVGPathCommander_2; +export default SVGPathCommander; export declare type TCommand = "T"; diff --git a/dist/svg-path-commander.js b/dist/svg-path-commander.js index 2ea7790..653f8ac 100644 --- a/dist/svg-path-commander.js +++ b/dist/svg-path-commander.js @@ -1,2 +1,2 @@ -var SVGPathCommander=function(){"use strict";var an=Object.defineProperty;var un=(X,_,z)=>_ in X?an(X,_,{enumerable:!0,configurable:!0,writable:!0,value:z}):X[_]=z;var d=(X,_,z)=>un(X,typeof _!="symbol"?_+"":_,z);var X=Object.defineProperty,_=(e,t,s)=>t in e?X(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,z=(e,t,s)=>_(e,typeof t!="symbol"?t+"":t,s);const De={a:1,b:0,c:0,d:1,e:0,f:0,m11:1,m12:0,m13:0,m14:0,m21:0,m22:1,m23:0,m24:0,m31:0,m32:0,m33:1,m34:0,m41:0,m42:0,m43:0,m44:1,is2D:!0,isIdentity:!0},Wt=e=>(e instanceof Float64Array||e instanceof Float32Array||Array.isArray(e)&&e.every(t=>typeof t=="number"))&&[6,16].some(t=>e.length===t),Xt=e=>e instanceof DOMMatrix||e instanceof T||typeof e=="object"&&Object.keys(De).every(t=>e&&t in e),it=e=>{const t=new T,s=Array.from(e);if(!Wt(s))throw TypeError(`CSSMatrix: "${s.join(",")}" must be an array with 6/16 numbers.`);if(s.length===16){const[r,n,i,o,l,c,a,u,f,h,y,m,g,A,M,N]=s;t.m11=r,t.a=r,t.m21=l,t.c=l,t.m31=f,t.m41=g,t.e=g,t.m12=n,t.b=n,t.m22=c,t.d=c,t.m32=h,t.m42=A,t.f=A,t.m13=i,t.m23=a,t.m33=y,t.m43=M,t.m14=o,t.m24=u,t.m34=m,t.m44=N}else if(s.length===6){const[r,n,i,o,l,c]=s;t.m11=r,t.a=r,t.m12=n,t.b=n,t.m21=i,t.c=i,t.m22=o,t.d=o,t.m41=l,t.e=l,t.m42=c,t.f=c}return t},Yt=e=>{if(Xt(e))return it([e.m11,e.m12,e.m13,e.m14,e.m21,e.m22,e.m23,e.m24,e.m31,e.m32,e.m33,e.m34,e.m41,e.m42,e.m43,e.m44]);throw TypeError(`CSSMatrix: "${JSON.stringify(e)}" is not a DOMMatrix / CSSMatrix / JSON compatible object.`)},Vt=e=>{if(typeof e!="string")throw TypeError(`CSSMatrix: "${JSON.stringify(e)}" is not a string.`);const t=String(e).replace(/\s/g,"");let s=new T;const r=`CSSMatrix: invalid transform string "${e}"`;return t.split(")").filter(n=>n).forEach(n=>{const[i,o]=n.split("(");if(!o)throw TypeError(r);const l=o.split(",").map(m=>m.includes("rad")?parseFloat(m)*(180/Math.PI):parseFloat(m)),[c,a,u,f]=l,h=[c,a,u],y=[c,a,u,f];if(i==="perspective"&&c&&[a,u].every(m=>m===void 0))s.m34=-1/c;else if(i.includes("matrix")&&[6,16].includes(l.length)&&l.every(m=>!Number.isNaN(+m))){const m=l.map(g=>Math.abs(g)<1e-6?0:g);s=s.multiply(it(m))}else if(i==="translate3d"&&h.every(m=>!Number.isNaN(+m)))s=s.translate(c,a,u);else if(i==="translate"&&c&&u===void 0)s=s.translate(c,a||0,0);else if(i==="rotate3d"&&y.every(m=>!Number.isNaN(+m))&&f)s=s.rotateAxisAngle(c,a,u,f);else if(i==="rotate"&&c&&[a,u].every(m=>m===void 0))s=s.rotate(0,0,c);else if(i==="scale3d"&&h.every(m=>!Number.isNaN(+m))&&h.some(m=>m!==1))s=s.scale(c,a,u);else if(i==="scale"&&!Number.isNaN(c)&&(c!==1||a!==1)&&u===void 0){const m=Number.isNaN(+a)?c:a;s=s.scale(c,m,1)}else if(i==="skew"&&(c||!Number.isNaN(c)&&a)&&u===void 0)s=s.skew(c,a||0);else if(["translate","rotate","scale","skew"].some(m=>i.includes(m))&&/[XYZ]/.test(i)&&c&&[a,u].every(m=>m===void 0))if(i==="skewX"||i==="skewY")s=s[i](c);else{const m=i.replace(/[XYZ]/,""),g=i.replace(m,""),A=["X","Y","Z"].indexOf(g),M=m==="scale"?1:0,N=[A===0?c:M,A===1?c:M,A===2?c:M];s=s[m](...N)}else throw TypeError(r)}),s},zt=(e,t)=>t?[e.a,e.b,e.c,e.d,e.e,e.f]:[e.m11,e.m12,e.m13,e.m14,e.m21,e.m22,e.m23,e.m24,e.m31,e.m32,e.m33,e.m34,e.m41,e.m42,e.m43,e.m44],Gt=(e,t,s)=>{const r=new T;return r.m41=e,r.e=e,r.m42=t,r.f=t,r.m43=s,r},te=(e,t,s)=>{const r=new T,n=Math.PI/180,i=e*n,o=t*n,l=s*n,c=Math.cos(i),a=-Math.sin(i),u=Math.cos(o),f=-Math.sin(o),h=Math.cos(l),y=-Math.sin(l),m=u*h,g=-u*y;r.m11=m,r.a=m,r.m12=g,r.b=g,r.m13=f;const A=a*f*h+c*y;r.m21=A,r.c=A;const M=c*h-a*f*y;return r.m22=M,r.d=M,r.m23=-a*u,r.m31=a*y-c*f*h,r.m32=a*h+c*f*y,r.m33=c*u,r},ee=(e,t,s,r)=>{const n=new T,i=Math.sqrt(e*e+t*t+s*s);if(i===0)return n;const o=e/i,l=t/i,c=s/i,a=r*(Math.PI/360),u=Math.sin(a),f=Math.cos(a),h=u*u,y=o*o,m=l*l,g=c*c,A=1-2*(m+g)*h;n.m11=A,n.a=A;const M=2*(o*l*h+c*u*f);n.m12=M,n.b=M,n.m13=2*(o*c*h-l*u*f);const N=2*(l*o*h-c*u*f);n.m21=N,n.c=N;const x=1-2*(g+y)*h;return n.m22=x,n.d=x,n.m23=2*(l*c*h+o*u*f),n.m31=2*(c*o*h+l*u*f),n.m32=2*(c*l*h-o*u*f),n.m33=1-2*(y+m)*h,n},ne=(e,t,s)=>{const r=new T;return r.m11=e,r.a=e,r.m22=t,r.d=t,r.m33=s,r},yt=(e,t)=>{const s=new T;if(e){const r=e*Math.PI/180,n=Math.tan(r);s.m21=n,s.c=n}if(t){const r=t*Math.PI/180,n=Math.tan(r);s.m12=n,s.b=n}return s},se=e=>yt(e,0),re=e=>yt(0,e),U=(e,t)=>{const s=t.m11*e.m11+t.m12*e.m21+t.m13*e.m31+t.m14*e.m41,r=t.m11*e.m12+t.m12*e.m22+t.m13*e.m32+t.m14*e.m42,n=t.m11*e.m13+t.m12*e.m23+t.m13*e.m33+t.m14*e.m43,i=t.m11*e.m14+t.m12*e.m24+t.m13*e.m34+t.m14*e.m44,o=t.m21*e.m11+t.m22*e.m21+t.m23*e.m31+t.m24*e.m41,l=t.m21*e.m12+t.m22*e.m22+t.m23*e.m32+t.m24*e.m42,c=t.m21*e.m13+t.m22*e.m23+t.m23*e.m33+t.m24*e.m43,a=t.m21*e.m14+t.m22*e.m24+t.m23*e.m34+t.m24*e.m44,u=t.m31*e.m11+t.m32*e.m21+t.m33*e.m31+t.m34*e.m41,f=t.m31*e.m12+t.m32*e.m22+t.m33*e.m32+t.m34*e.m42,h=t.m31*e.m13+t.m32*e.m23+t.m33*e.m33+t.m34*e.m43,y=t.m31*e.m14+t.m32*e.m24+t.m33*e.m34+t.m34*e.m44,m=t.m41*e.m11+t.m42*e.m21+t.m43*e.m31+t.m44*e.m41,g=t.m41*e.m12+t.m42*e.m22+t.m43*e.m32+t.m44*e.m42,A=t.m41*e.m13+t.m42*e.m23+t.m43*e.m33+t.m44*e.m43,M=t.m41*e.m14+t.m42*e.m24+t.m43*e.m34+t.m44*e.m44;return it([s,r,n,i,o,l,c,a,u,f,h,y,m,g,A,M])};class T{constructor(t){return this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this.m11=1,this.m12=0,this.m13=0,this.m14=0,this.m21=0,this.m22=1,this.m23=0,this.m24=0,this.m31=0,this.m32=0,this.m33=1,this.m34=0,this.m41=0,this.m42=0,this.m43=0,this.m44=1,t?this.setMatrixValue(t):this}get isIdentity(){return this.m11===1&&this.m12===0&&this.m13===0&&this.m14===0&&this.m21===0&&this.m22===1&&this.m23===0&&this.m24===0&&this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m41===0&&this.m42===0&&this.m43===0&&this.m44===1}get is2D(){return this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m43===0&&this.m44===1}setMatrixValue(t){return typeof t=="string"&&t.length&&t!=="none"?Vt(t):Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?it(t):typeof t=="object"?Yt(t):this}toFloat32Array(t){return Float32Array.from(zt(this,t))}toFloat64Array(t){return Float64Array.from(zt(this,t))}toString(){const{is2D:t}=this,s=this.toFloat64Array(t).join(", ");return`${t?"matrix":"matrix3d"}(${s})`}toJSON(){const{is2D:t,isIdentity:s}=this;return{...this,is2D:t,isIdentity:s}}multiply(t){return U(this,t)}translate(t,s,r){const n=t;let i=s,o=r;return typeof i>"u"&&(i=0),typeof o>"u"&&(o=0),U(this,Gt(n,i,o))}scale(t,s,r){const n=t;let i=s,o=r;return typeof i>"u"&&(i=t),typeof o>"u"&&(o=1),U(this,ne(n,i,o))}rotate(t,s,r){let n=t,i=s||0,o=r||0;return typeof t=="number"&&typeof s>"u"&&typeof r>"u"&&(o=n,n=0,i=0),U(this,te(n,i,o))}rotateAxisAngle(t,s,r,n){if([t,s,r,n].some(i=>Number.isNaN(+i)))throw new TypeError("CSSMatrix: expecting 4 values");return U(this,ee(t,s,r,n))}skewX(t){return U(this,se(t))}skewY(t){return U(this,re(t))}skew(t,s){return U(this,yt(t,s))}transformPoint(t){const s=this.m11*t.x+this.m21*t.y+this.m31*t.z+this.m41*t.w,r=this.m12*t.x+this.m22*t.y+this.m32*t.z+this.m42*t.w,n=this.m13*t.x+this.m23*t.y+this.m33*t.z+this.m43*t.w,i=this.m14*t.x+this.m24*t.y+this.m34*t.z+this.m44*t.w;return t instanceof DOMPoint?new DOMPoint(s,r,n,i):{x:s,y:r,z:n,w:i}}}z(T,"Translate",Gt),z(T,"Rotate",te),z(T,"RotateAxisAngle",ee),z(T,"Scale",ne),z(T,"SkewX",se),z(T,"SkewY",re),z(T,"Skew",yt),z(T,"Multiply",U),z(T,"fromArray",it),z(T,"fromMatrix",Yt),z(T,"fromString",Vt),z(T,"toArray",zt),z(T,"isCompatibleArray",Wt),z(T,"isCompatibleObject",Xt);const Y={origin:[0,0,0],round:4},et={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},Pt=e=>{let t=e.pathValue[e.segmentStart],s=t.toLowerCase();const{data:r}=e;for(;r.length>=et[s]&&(s==="m"&&r.length>2?(e.segments.push([t].concat(r.splice(0,2))),s="l",t=t==="m"?"l":"L"):e.segments.push([t].concat(r.splice(0,et[s]))),!!et[s]););},Z="SVGPathCommander Error",ie=e=>{const{index:t,pathValue:s}=e,r=s.charCodeAt(t);if(r===48){e.param=0,e.index+=1;return}if(r===49){e.param=1,e.index+=1;return}e.err=`${Z}: invalid Arc flag "${s[t]}", expecting 0 or 1 at index ${t}`},K=e=>e>=48&&e<=57,W="Invalid path value",oe=e=>{const{max:t,pathValue:s,index:r}=e;let n=r,i=!1,o=!1,l=!1,c=!1,a;if(n>=t){e.err=`${Z}: ${W} at index ${n}, "pathValue" is missing param`;return}if(a=s.charCodeAt(n),(a===43||a===45)&&(n+=1,a=s.charCodeAt(n)),!K(a)&&a!==46){e.err=`${Z}: ${W} at index ${n}, "${s[n]}" is not a number`;return}if(a!==46){if(i=a===48,n+=1,a=s.charCodeAt(n),i&&n[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279,10,13,8232,8233,32,9,11,12,160].includes(e),nt=e=>{const{pathValue:t,max:s}=e;for(;e.index{switch(e|32){case 109:case 122:case 108:case 104:case 118:case 99:case 115:case 113:case 116:case 97:return!0;default:return!1}},ae=e=>K(e)||e===43||e===45||e===46,ue=e=>(e|32)===97,me=e=>{switch(e|32){case 109:case 77:return!0;default:return!1}},qt=e=>{var c;const{max:t,pathValue:s,index:r,segments:n}=e,i=s.charCodeAt(r),o=et[s[r].toLowerCase()];if(e.segmentStart=r,!le(i)){e.err=`${Z}: ${W} "${s[r]}" is not a path command at index ${r}`;return}const l=n[n.length-1];if(!me(i)&&((c=l==null?void 0:l[0])==null?void 0:c.toLocaleLowerCase())==="z"){e.err=`${Z}: ${W} "${s[r]}" is not a MoveTo path command at index ${r}`;return}if(e.index+=1,nt(e),e.data=[],!o){Pt(e);return}for(;;){for(let a=o;a>0;a-=1){if(ue(i)&&(a===3||a===4)?ie(e):oe(e),e.err.length)return;e.data.push(e.param),nt(e),e.index=e.max||!ae(s.charCodeAt(e.index)))break}Pt(e)};class kt{constructor(t){this.segments=[],this.pathValue=t,this.max=t.length,this.index=0,this.param=0,this.segmentStart=0,this.data=[],this.err=""}}const D=e=>{if(typeof e!="string")return e.slice(0);const t=new kt(e);for(nt(t);t.index{const[n]=e,i=n.toUpperCase();if(t===0||i===n)return e;if(i==="A")return[i,e[1],e[2],e[3],e[4],e[5],e[6]+s,e[7]+r];if(i==="V")return[i,e[1]+r];if(i==="H")return[i,e[1]+s];if(i==="L")return[i,e[1]+s,e[2]+r];{const l=[],c=e.length;for(let a=1;a{let s=e.length,r,n="M",i="M",o=!1,l=0,c=0,a=0,u=0,f=0;for(let h=0;h{const t=D(e);return O(t,ot)},It=(e,t,s,r)=>{const[n]=e,i=n.toLowerCase();if(t===0||n===i)return e;if(i==="a")return[i,e[1],e[2],e[3],e[4],e[5],e[6]-s,e[7]-r];if(i==="v")return[i,e[1]-r];if(i==="h")return[i,e[1]-s];if(i==="l")return[i,e[1]-s,e[2]-r];{const l=[],c=e.length;for(let a=1;a{const t=D(e);return O(t,It)},ct=(e,t,s)=>{const{sin:r,cos:n}=Math,i=e*n(s)-t*r(s),o=e*r(s)+t*n(s);return{x:i,y:o}},xt=(e,t,s,r,n,i,o,l,c,a)=>{let u=e,f=t,h=s,y=r,m=l,g=c;const A=Math.PI*120/180,M=Math.PI/180*(+n||0);let N=[],x,p,w,C,I;if(a)[p,w,C,I]=a;else{x=ct(u,f,-M),u=x.x,f=x.y,x=ct(m,g,-M),m=x.x,g=x.y;const $=(u-m)/2,S=(f-g)/2;let k=$*$/(h*h)+S*S/(y*y);k>1&&(k=Math.sqrt(k),h*=k,y*=k);const Jt=h*h,Kt=y*y,Ze=(i===o?-1:1)*Math.sqrt(Math.abs((Jt*Kt-Jt*S*S-Kt*$*$)/(Jt*S*S+Kt*$*$)));C=Ze*h*S/y+(u+m)/2,I=Ze*-y*$/h+(f+g)/2,p=Math.asin(((f-I)/y*10**9>>0)/10**9),w=Math.asin(((g-I)/y*10**9>>0)/10**9),p=uw&&(p-=Math.PI*2),!o&&w>p&&(w-=Math.PI*2)}let E=w-p;if(Math.abs(E)>A){const $=w,S=m,k=g;w=p+A*(o&&w>p?1:-1),m=C+h*Math.cos(w),g=I+y*Math.sin(w),N=xt(m,g,h,y,n,0,o,S,k,[w,$,C,I])}E=w-p;const q=Math.cos(p),v=Math.sin(p),B=Math.cos(w),G=Math.sin(w),R=Math.tan(E/4),L=4/3*h*R,j=4/3*y*R,H=[u,f],Q=[u+L*v,f-j*q],J=[m+L*G,g-j*B],rt=[m,g];if(Q[0]=2*H[0]-Q[0],Q[1]=2*H[1]-Q[1],a)return[Q[0],Q[1],J[0],J[1],rt[0],rt[1]].concat(N);N=[Q[0],Q[1],J[0],J[1],rt[0],rt[1]].concat(N);const tt=[];for(let $=0,S=N.length;${const o=.3333333333333333,l=2/3;return[o*e+l*s,o*t+l*r,o*n+l*s,o*i+l*r,n,i]},F=(e,t,s)=>{const[r,n]=e,[i,o]=t;return[r+(i-r)*s,n+(o-n)*s]},Et=(e,t,s,r)=>{const n=F([e,t],[s,r],.3333333333333333),i=F([e,t],[s,r],2/3);return[n[0],n[1],i[0],i[1],s,r]},ye=(e,t)=>{const[s]=e,r=e.slice(1).map(Number),[n,i]=r,{x1:o,y1:l,x:c,y:a}=t;return"TQ".includes(s)||(t.qx=null,t.qy=null),s==="M"?(t.x=n,t.y=i,e):s==="A"?["C"].concat(xt(o,l,r[0],r[1],r[2],r[3],r[4],r[5],r[6])):s==="Q"?(t.qx=n,t.qy=i,["C"].concat(he(o,l,r[0],r[1],r[2],r[3]))):s==="L"?["C"].concat(Et(o,l,n,i)):s==="Z"?["C"].concat(Et(o,l,c,a)):e},pt=(e,t)=>{const[s]=e,r=s.toUpperCase(),n=s!==r,{x1:i,y1:o,x2:l,y2:c,x:a,y:u}=t,f=e.slice(1);let h=f.map((y,m)=>y+(n?m%2?u:a:0));if("TQ".includes(r)||(t.qx=null,t.qy=null),r==="A")return h=f.slice(0,-2).concat(f[5]+(n?a:0),f[6]+(n?u:0)),["A"].concat(h);if(r==="H")return["L",e[1]+(n?a:0),o];if(r==="V")return["L",i,e[1]+(n?u:0)];if(r==="L")return["L",e[1]+(n?a:0),e[2]+(n?u:0)];if(r==="M")return["M",e[1]+(n?a:0),e[2]+(n?u:0)];if(r==="C")return["C"].concat(h);if(r==="S"){const y=i*2-l,m=o*2-c;return t.x1=y,t.y1=m,["C",y,m].concat(h)}else if(r==="T"){const y=i*2-(t.qx?t.qx:0),m=o*2-(t.qy?t.qy:0);return t.qx=y,t.qy=m,["Q",y,m].concat(h)}else if(r==="Q"){const[y,m]=h;return t.qx=y,t.qy=m,["Q"].concat(h)}else if(r==="Z")return["Z"];return e},lt={x1:0,y1:0,x2:0,y2:0,x:0,y:0,qx:null,qy:null},bt=e=>{const t={...lt},s=D(e);return O(s,(r,n,i,o)=>{t.x=i,t.y=o;const l=pt(r,t);let c=ye(l,t);c[0]==="C"&&c.length>7&&(s.splice(n+1,0,["C"].concat(c.slice(7))),c=c.slice(0,7));const u=c.length;return t.x1=+c[u-2],t.y1=+c[u-1],t.x2=+c[u-4]||t.x1,t.y2=+c[u-3]||t.y1,c})},P=(e,t)=>{const s=t>=1?10**t:1;return t>0?Math.round(e*s)/s:Math.round(e)},Rt=(e,t)=>{const s=e.length;let{round:r}=Y,n=e[0],i="";r=t==="off"||typeof t=="number"&&t>=0?t:typeof r=="number"&&r>=0?r:"off";for(let o=0;oMath.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])),at=(e,t,s,r)=>dt([e,t],[s,r]),jt=(e,t,s,r,n)=>{let i={x:e,y:t};if(typeof n=="number"){const o=dt([e,t],[s,r]);if(n<=0)i={x:e,y:t};else if(n>=o)i={x:s,y:r};else{const[l,c]=F([e,t],[s,r],n/o);i={x:l,y:c}}}return i},St=(e,t,s,r)=>{const{min:n,max:i}=Math;return[n(e,s),n(t,r),i(e,s),i(t,r)]},Qt=(e,t,s)=>{const r=s/2,n=Math.sin(r),i=Math.cos(r),o=e**2*n**2,l=t**2*i**2,c=Math.sqrt(o+l)*s;return Math.abs(c)},V=(e,t,s,r,n,i)=>{const{sin:o,cos:l}=Math,c=l(n),a=o(n),u=s*l(i),f=r*o(i);return[e+c*u-a*f,t+a*u+c*f]},Zt=(e,t)=>{const{x:s,y:r}=e,{x:n,y:i}=t,o=s*n+r*i,l=Math.sqrt((s**2+r**2)*(n**2+i**2));return(s*i-r*n<0?-1:1)*Math.acos(o/l)},At=(e,t,s,r,n,i,o,l,c)=>{const{abs:a,sin:u,cos:f,sqrt:h,PI:y}=Math;let m=a(s),g=a(r);const M=(n%360+360)%360*(y/180);if(e===l&&t===c)return{rx:m,ry:g,startAngle:0,endAngle:0,center:{x:l,y:c}};if(m===0||g===0)return{rx:m,ry:g,startAngle:0,endAngle:0,center:{x:(l+e)/2,y:(c+t)/2}};const N=(e-l)/2,x=(t-c)/2,p={x:f(M)*N+u(M)*x,y:-u(M)*N+f(M)*x},w=p.x**2/m**2+p.y**2/g**2;w>1&&(m*=h(w),g*=h(w));const C=m**2*g**2-m**2*p.y**2-g**2*p.x**2,I=m**2*p.y**2+g**2*p.x**2;let E=C/I;E=E<0?0:E;const q=(i!==o?1:-1)*h(E),v={x:q*(m*p.y/g),y:q*(-(g*p.x)/m)},B={x:f(M)*v.x-u(M)*v.y+(e+l)/2,y:u(M)*v.x+f(M)*v.y+(t+c)/2},G={x:(p.x-v.x)/m,y:(p.y-v.y)/g},R=Zt({x:1,y:0},G),L={x:(-p.x-v.x)/m,y:(-p.y-v.y)/g};let j=Zt(G,L);!o&&j>0?j-=2*y:o&&j<0&&(j+=2*y),j%=2*y;const H=R+j;return{center:B,startAngle:R,endAngle:H,rx:m,ry:g}},Dt=(e,t,s,r,n,i,o,l,c)=>{const{rx:a,ry:u,startAngle:f,endAngle:h}=At(e,t,s,r,n,i,o,l,c);return Qt(a,u,h-f)},ge=(e,t,s,r,n,i,o,l,c,a)=>{let u={x:e,y:t};const{center:f,rx:h,ry:y,startAngle:m,endAngle:g}=At(e,t,s,r,n,i,o,l,c);if(typeof a=="number"){const A=Qt(h,y,g-m);if(a<=0)u={x:e,y:t};else if(a>=A)u={x:l,y:c};else{if(e===l&&t===c)return{x:l,y:c};if(h===0||y===0)return jt(e,t,l,c,a);const{PI:M,cos:N,sin:x}=Math,p=g-m,C=(n%360+360)%360*(M/180),I=m+p*(a/A),E=h*N(I),q=y*x(I);u={x:N(C)*E-x(C)*q+f.x,y:x(C)*E+N(C)*q+f.y}}}return u},xe=(e,t,s,r,n,i,o,l,c)=>{const{center:a,rx:u,ry:f,startAngle:h,endAngle:y}=At(e,t,s,r,n,i,o,l,c),m=y-h,{min:g,max:A,tan:M,atan2:N,PI:x}=Math,{x:p,y:w}=a,C=n*x/180,I=M(C),E=N(-f*I,u),q=E,v=E+x,B=N(f,u*I),G=B+x,R=[l],L=[c];let j=g(e,l),H=A(e,l),Q=g(t,c),J=A(t,c);const rt=y-m*1e-5,tt=V(p,w,u,f,C,rt),$=y-m*.99999,S=V(p,w,u,f,C,$);if(tt[0]>H||S[0]>H){const k=V(p,w,u,f,C,q);R.push(k[0]),L.push(k[1])}if(tt[0]J||S[1]>J){const k=V(p,w,u,f,C,B);R.push(k[0]),L.push(k[1])}return j=g.apply([],R),Q=g.apply([],L),H=A.apply([],R),J=A.apply([],L),[j,Q,H,J]},Oe=Object.freeze(Object.defineProperty({__proto__:null,angleBetween:Zt,arcLength:Qt,arcPoint:V,getArcBBox:xe,getArcLength:Dt,getArcProps:At,getPointAtArcLength:ge},Symbol.toStringTag,{value:"Module"})),Ot=[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213],pe=[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872],be=e=>{const t=[];for(let s=e,r=s.length,n=r-1;r>1;r-=1,n-=1){const i=[];for(let o=0;o{if(t===0)return e[0].t=0,e[0];const s=e.length-1;if(t===1)return e[s].t=1,e[s];const r=1-t;let n=e;if(s===0)return e[0].t=t,e[0];if(s===1)return{x:r*n[0].x+t*n[1].x,y:r*n[0].y+t*n[1].y,t};const i=r*r,o=t*t;let l=0,c=0,a=0,u=0;return s===2?(n=[n[0],n[1],n[2],{x:0,y:0}],l=i,c=r*t*2,a=o):s===3&&(l=i*r,c=i*t*3,a=r*o*3,u=t*o),{x:l*n[0].x+c*n[1].x+a*n[2].x+u*n[3].x,y:l*n[0].y+c*n[1].y+a*n[2].y+u*n[3].y,t}},Ae=(e,t)=>{const s=e(t),r=s.x*s.x+s.y*s.y;return Math.sqrt(r)},Me=e=>{const s=Ot.length;let r=0;for(let n=0,i;n{const t=[];for(let r=0,n=e.length,i=2;rde(s[0],r))},Ne=1e-8,Mt=([e,t,s])=>{const r=Math.min(e,s),n=Math.max(e,s);if(t>=e?s>=t:s<=t)return[r,n];const i=(e*s-t*t)/(e-2*t+s);return i{const n=e-3*t+3*s-r;if(Math.abs(n)0&&u<1){const h=e*(1-u)*(1-u)*(1-u)+t*3*(1-u)*(1-u)*u+s*3*(1-u)*u*u+r*u*u*u;hc&&(c=h)}return[l,c]},we=([e,t,s,r,n,i,o,l],c)=>{const a=1-c;return{x:a**3*e+3*a**2*c*s+3*a*c**2*n+c**3*o,y:a**3*t+3*a**2*c*r+3*a*c**2*i+c**3*l}},Nt=(e,t,s,r,n,i,o,l)=>ut([e,t,s,r,n,i,o,l]),Le=(e,t,s,r,n,i,o,l,c)=>{const a=typeof c=="number";let u={x:e,y:t};if(a){const f=ut([e,t,s,r,n,i,o,l]);c<=0||(c>=f?u={x:o,y:l}:u=we([e,t,s,r,n,i,o,l],c/f))}return u},Ht=(e,t,s,r,n,i,o,l)=>{const c=Bt([e,s,n,o]),a=Bt([t,r,i,l]);return[c[0],a[0],c[1],a[1]]},Ce=([e,t,s,r,n,i],o)=>{const l=1-o;return{x:l**2*e+2*l*o*s+o**2*n,y:l**2*t+2*l*o*r+o**2*i}},wt=(e,t,s,r,n,i)=>ut([e,t,s,r,n,i]),Te=(e,t,s,r,n,i,o)=>{const l=typeof o=="number";let c={x:e,y:t};if(l){const a=ut([e,t,s,r,n,i]);o<=0||(o>=a?c={x:n,y:i}:c=Ce([e,t,s,r,n,i],o/a))}return c},Ft=(e,t,s,r,n,i)=>{const o=Mt([e,s,n]),l=Mt([t,r,i]);return[o[0],l[0],o[1],l[1]]},Be=e=>{const t=e.length;let s=-1,r,n=e[t-1],i=0;for(;++se.reduce((t,s,r)=>r?t+dt(e[r-1],s):0,0),Lt=1e-5,mt=e=>{const t=D(e),s={...lt};return O(t,(r,n,i,o)=>{s.x=i,s.y=o;const l=pt(r,s),c=l.length;return s.x1=+l[c-2],s.y1=+l[c-1],s.x2=+l[c-4]||s.x1,s.y2=+l[c-3]||s.y1,l})},ft=(e,t)=>{const s=mt(e);let r=!1,n=[],i="M",o=0,l=0,[c,a]=s[0].slice(1);const u=typeof t=="number";let f={x:c,y:a},h=0,y=f,m=0;return!u||t{if([i]=g,r=i==="M",n=r?n:[M,N].concat(g.slice(1)),r?([,c,a]=g,f={x:c,y:a},h=0):i==="L"?(f=jt(n[0],n[1],n[2],n[3],t-m),h=at(n[0],n[1],n[2],n[3])):i==="A"?(f=ge(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8],t-m),h=Dt(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8])):i==="C"?(f=Le(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],t-m),h=Nt(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7])):i==="Q"?(f=Te(n[0],n[1],n[2],n[3],n[4],n[5],t-m),h=wt(n[0],n[1],n[2],n[3],n[4],n[5])):i==="Z"&&(n=[M,N,c,a],f={x:c,y:a},h=at(n[0],n[1],n[2],n[3])),[o,l]=n.slice(-2),mm-Lt?{x:o,y:l}:y)},st=e=>{const t=D(e);let s=0,r=0,n=0,i=0,o=0,l=0,c="M",a=0,u=0,f=0;return O(t,(h,y,m,g)=>{[c]=h;const A=c.toUpperCase(),N=A!==c?ot(h,y,m,g):h.slice(0),x=A==="V"?["L",m,N[1]]:A==="H"?["L",N[1],g]:N;if([c]=x,"TQ".includes(A)||(o=0,l=0),c==="M")[,a,u]=x;else if(c==="L")f+=at(m,g,x[1],x[2]);else if(c==="A")f+=Dt(m,g,x[1],x[2],x[3],x[4],x[5],x[6],x[7]);else if(c==="S"){const p=s*2-n,w=r*2-i;f+=Nt(m,g,p,w,x[1],x[2],x[3],x[4])}else c==="C"?f+=Nt(m,g,x[1],x[2],x[3],x[4],x[5],x[6]):c==="T"?(o=s*2-o,l=r*2-l,f+=wt(m,g,o,l,x[1],x[2])):c==="Q"?(o=x[1],l=x[2],f+=wt(m,g,x[1],x[2],x[3],x[4])):c==="Z"&&(f+=at(m,g,a,u));[s,r]=c==="Z"?[a,u]:x.slice(-2),[n,i]=c==="C"?[x[3],x[4]]:c==="S"?[x[1],x[2]]:[s,r]}),f},_t=(e,t)=>{const s=D(e);let r=s.slice(0),n=st(r),i=r.length-1,o=0,l=0,c=s[0];if(i<=0||!t||!Number.isFinite(t))return{segment:c,index:0,length:l,lengthAtSegment:o};if(t>=n)return r=s.slice(0,-1),o=st(r),l=n-o,c=s[i],{segment:c,index:i,length:l,lengthAtSegment:o};const a=[];for(;i>0;)c=r[i],r=r.slice(0,-1),o=st(r),l=n-o,n=o,a.push({segment:c,index:i,length:l,lengthAtSegment:o}),i-=1;return a.find(({lengthAtSegment:u})=>u<=t)},Ct=(e,t)=>{const s=D(e),r=mt(s),n=st(r),i=p=>{const w=p.x-t.x,C=p.y-t.y;return w*w+C*C};let o=8,l,c={x:0,y:0},a=0,u=0,f=1/0;for(let p=0;p<=n;p+=o)l=ft(r,p),a=i(l),a1e-6&&(m=u-o,h=ft(r,m),A=i(h),g=u+o,y=ft(r,g),M=i(y),m>=0&&ACt(e,t).closest,_e=(e,t,s,r,n,i,o,l)=>3*((l-t)*(s+n)-(o-e)*(r+i)+r*(e-n)-s*(t-i)+l*(n+e/3)-o*(i+t/3))/20,ve=e=>{let t=0,s=0,r=0;return bt(e).map(n=>{switch(n[0]){case"M":return[,t,s]=n,0;default:return r=_e(t,s,n[1],n[2],n[3],n[4],n[5],n[6]),[t,s]=n.slice(-2),r}}).reduce((n,i)=>n+i,0)},Ue=e=>ve(bt(e))>=0,$e=e=>{if(!e)return{x:0,y:0,width:0,height:0,x2:0,y2:0,cx:0,cy:0,cz:0};const t=D(e);let s="M",r=0,n=0;const{max:i,min:o}=Math;let l=1/0,c=1/0,a=-1/0,u=-1/0,f=0,h=0,y=0,m=0,g=0,A=0,M=0,N=0,x=0,p=0;O(t,(I,E,q,v)=>{[s]=I;const B=s.toUpperCase(),R=B!==s?ot(I,E,q,v):I.slice(0),L=B==="V"?["L",q,R[1]]:B==="H"?["L",R[1],v]:R;if([s]=L,"TQ".includes(B)||(x=0,p=0),s==="M")[,r,n]=L,f=r,h=n,y=r,m=n;else if(s==="L")[f,h,y,m]=St(q,v,L[1],L[2]);else if(s==="A")[f,h,y,m]=xe(q,v,L[1],L[2],L[3],L[4],L[5],L[6],L[7]);else if(s==="S"){const j=g*2-M,H=A*2-N;[f,h,y,m]=Ht(q,v,j,H,L[1],L[2],L[3],L[4])}else s==="C"?[f,h,y,m]=Ht(q,v,L[1],L[2],L[3],L[4],L[5],L[6]):s==="T"?(x=g*2-x,p=A*2-p,[f,h,y,m]=Ft(q,v,x,p,L[1],L[2])):s==="Q"?(x=L[1],p=L[2],[f,h,y,m]=Ft(q,v,L[1],L[2],L[3],L[4])):s==="Z"&&([f,h,y,m]=St(q,v,r,n));l=o(f,l),c=o(h,c),a=i(y,a),u=i(m,u),[g,A]=s==="Z"?[r,n]:L.slice(-2),[M,N]=s==="C"?[L[3],L[4]]:s==="S"?[L[1],L[2]]:[g,A]});const w=a-l,C=u-c;return{width:w,height:C,x:l,y:c,x2:a,y2:u,cx:l+w/2,cy:c+C/2,cz:Math.max(w,C)+Math.min(w,C)/2}},Je=(e,t)=>_t(e,t).segment,Ke=(e,t)=>Ct(e,t).segment,Tt=e=>Array.isArray(e)&&e.every(t=>{const s=t[0].toLowerCase();return et[s]===t.length-1&&"achlmqstvz".includes(s)&&t.slice(1).every(Number.isFinite)})&&e.length>0,ze=e=>Tt(e)&&e.every(([t])=>t===t.toUpperCase()),Pe=e=>ze(e)&&e.every(([t])=>"ACLMQZ".includes(t)),We=e=>Pe(e)&&e.every(([t])=>"MC".includes(t)),Xe=(e,t)=>{const{distance:s}=Ct(e,t);return Math.abs(s)Tt(e)&&e.slice(1).every(([t])=>t===t.toLowerCase()),qe=e=>{if(typeof e!="string"||!e.length)return!1;const t=new kt(e);for(nt(t);t.indexe!=null&&typeof e=="object"&&e.nodeType===1,Ve=e=>{let{x1:t,y1:s,x2:r,y2:n}=e;return[t,s,r,n]=[t,s,r,n].map(i=>+i),[["M",t,s],["L",r,n]]},Ge=e=>{const t=[],s=(e.points||"").trim().split(/[\s|,]/).map(n=>+n);let r=0;for(;r{let{cx:t,cy:s,r}=e;return[t,s,r]=[t,s,r].map(n=>+n),[["M",t-r,s],["a",r,r,0,1,0,2*r,0],["a",r,r,0,1,0,-2*r,0]]},en=e=>{let{cx:t,cy:s}=e,r=e.rx||0,n=e.ry||r;return[t,s,r,n]=[t,s,r,n].map(i=>+i),[["M",t-r,s],["a",r,n,0,1,0,2*r,0],["a",r,n,0,1,0,-2*r,0]]},nn=e=>{const t=+e.x||0,s=+e.y||0,r=+e.width,n=+e.height;let i=+(e.rx||0),o=+(e.ry||i);return i||o?(i*2>r&&(i-=(i*2-r)/2),o*2>n&&(o-=(o*2-n)/2),[["M",t+i,s],["h",r-i*2],["s",i,0,i,o],["v",n-o*2],["s",0,o,-i,o],["h",-r+i*2],["s",-i,0,-i,-o],["v",-n+o*2],["s",0,-o,i,-o]]):[["M",t,s],["h",r],["v",n],["H",t],["Z"]]},Ie=e=>{const t=Object.keys(ht),s=ke(e),r=s?e.tagName:null;if(r&&[...t,"path"].every(c=>r!==c))throw TypeError(`${Z}: "${r}" is not SVGElement`);const n=s?r:e.type,i=ht[n],o={type:n};s?i.forEach(c=>{o[c]=e.getAttribute(c)}):Object.assign(o,e);let l=[];return n==="circle"?l=tn(o):n==="ellipse"?l=en(o):["polyline","polygon"].includes(n)?l=Ge(o):n==="rect"?l=nn(o):n==="line"?l=Ve(o):["glyph","path"].includes(n)&&(l=D(s?e.getAttribute("d")||"":e.d||"")),Tt(l)&&l.length?l:!1},sn=(e,t,s)=>{const r=s||document,n=Object.keys(ht),i=ke(e),o=i?e.tagName:null;if(o==="path")throw TypeError(`${Z}: "${o}" is already SVGPathElement`);if(o&&n.every(m=>o!==m))throw TypeError(`${Z}: "${o}" is not SVGElement`);const l=r.createElementNS("http://www.w3.org/2000/svg","path"),c=i?o:e.type,a=ht[c],u={type:c},f=Y.round,h=Ie(e),y=h&&h.length?Rt(h,f):"";return i?(a.forEach(m=>{u[m]=e.getAttribute(m)}),Object.values(e.attributes).forEach(({name:m,value:g})=>{a.includes(m)||l.setAttribute(m,g)})):(Object.assign(u,e),Object.keys(u).forEach(m=>{!a.includes(m)&&m!=="type"&&l.setAttribute(m.replace(/[A-Z]/g,g=>`-${g.toLowerCase()}`),u[m])})),qe(y)?(l.setAttribute("d",y),t&&i&&(e.before(l,e),e.remove()),l):!1},Ee=e=>{let t=new T;const{origin:s}=e,[r,n]=s,{translate:i}=e,{rotate:o}=e,{skew:l}=e,{scale:c}=e;return Array.isArray(i)&&i.length>=2&&i.every(a=>!Number.isNaN(+a))&&i.some(a=>a!==0)?t=t.translate(...i):typeof i=="number"&&!Number.isNaN(i)&&(t=t.translate(i)),(o||l||c)&&(t=t.translate(r,n),Array.isArray(o)&&o.length>=2&&o.every(a=>!Number.isNaN(+a))&&o.some(a=>a!==0)?t=t.rotate(...o):typeof o=="number"&&!Number.isNaN(o)&&(t=t.rotate(o)),Array.isArray(l)&&l.length===2&&l.every(a=>!Number.isNaN(+a))&&l.some(a=>a!==0)?(t=l[0]?t.skewX(l[0]):t,t=l[1]?t.skewY(l[1]):t):typeof l=="number"&&!Number.isNaN(l)&&(t=t.skewX(l)),Array.isArray(c)&&c.length>=2&&c.every(a=>!Number.isNaN(+a))&&c.some(a=>a!==1)?t=t.scale(...c):typeof c=="number"&&!Number.isNaN(c)&&(t=t.scale(c)),t=t.translate(-r,-n)),t},Re=(e,t,s,r)=>{const[n]=e,{round:i}=Y,o=typeof i=="number"?i:4,l=t.slice(1),{x1:c,y1:a,x2:u,y2:f,x:h,y}=s,[m,g]=l.slice(-2),A=e;if("TQ".includes(n)||(s.qx=null,s.qy=null),n==="L"){if(P(h,o)===P(m,o))return["V",g];if(P(y,o)===P(g,o))return["H",m]}else if(n==="C"){const[M,N]=l;if(s.x1=M,s.y1=N,"CS".includes(r)&&(P(M,o)===P(c*2-u,o)&&P(N,o)===P(a*2-f,o)||P(c,o)===P(u*2-h,o)&&P(a,o)===P(f*2-y,o)))return["S",l[2],l[3],l[4],l[5]]}else if(n==="Q"){const[M,N]=l;if(s.qx=M,s.qy=N,"QT".includes(r)&&P(M,o)===P(c*2-u,o)&&P(N,o)===P(a*2-f,o))return["T",l[2],l[3]]}return A},vt=(e,t)=>{const s=e.slice(1).map(r=>P(r,t));return[e[0]].concat(s)},je=(e,t)=>{const s=gt(e),r=typeof t=="number"&&t>=0?t:2,n={...lt},i=[];let o="M",l="Z";return O(s,(c,a,u,f)=>{n.x=u,n.y=f;const h=pt(c,n);let y=c;if([o]=c,i[a]=o,a){l=i[a-1];const g=Re(c,h,n,l),A=vt(g,r),M=A.join(""),N=It(g,a,u,f),x=vt(N,r),p=x.join("");y=M.length{let s=T.Translate(t[0],t[1],t[2]);return[,,,s.m44]=t,s=e.multiply(s),[s.m41,s.m42,s.m43,s.m44]},Ut=(e,t,s)=>{const[r,n,i]=s,[o,l,c]=rn(e,[t[0],t[1],0,1]),a=o-r,u=l-n,f=c-i;return[a*(Math.abs(i)/Math.abs(f)||1)+r,u*(Math.abs(i)/Math.abs(f)||1)+n]},on=e=>{const t=e.slice(1).map((s,r,n)=>r?n[r-1].slice(-2).concat(s.slice(1)):e[0].slice(1).concat(s.slice(1))).map(s=>s.map((r,n)=>s[s.length-n-2*(1-n%2)])).reverse();return[["M"].concat(t[0].slice(0,2))].concat(t.map(s=>["C"].concat(s.slice(2))))},$t=e=>{const t=gt(e),s=mt(t),r=t.length,n=t[r-1][0]==="Z",i=O(t,(o,l)=>{const c=s[l],a=l&&t[l-1],u=a&&a[0],f=t[l+1],h=f&&f[0],[y]=o,[m,g]=s[l?l-1:r-1].slice(-2);let A=o;switch(y){case"M":A=n?["Z"]:[y,m,g];break;case"A":A=[y,o[1],o[2],o[3],o[4],o[5]===1?0:1,m,g];break;case"C":f&&h==="S"?A=["S",o[1],o[2],m,g]:A=[y,o[3],o[4],o[1],o[2],m,g];break;case"S":u&&"CS".includes(u)&&(!f||h!=="S")?A=["C",c[3],c[4],c[1],c[2],m,g]:A=[y,c[1],c[2],m,g];break;case"Q":f&&h==="T"?A=["T",m,g]:A=[y,o[1],o[2],m,g];break;case"T":u&&"QT".includes(u)&&(!f||h!=="T")?A=["Q",c[1],c[2],m,g]:A=[y,m,g];break;case"Z":A=["M",m,g];break;case"H":A=[y,m];break;case"V":A=[y,g];break;default:A=[y].concat(o.slice(1,-2),m,g)}return A});return n?i.reverse():[i[0]].concat(i.slice(1).reverse())},cn=(e,t)=>{let{round:s}=Y;return s=t==="off"||typeof t=="number"&&t>=0?t:typeof s=="number"&&s>=0?s:"off",s==="off"?e.slice(0):O(e,r=>vt(r,s))},ln=(e,t=.5)=>{const s=t,r=e.slice(0,2),n=e.slice(2,4),i=e.slice(4,6),o=e.slice(6,8),l=F(r,n,s),c=F(n,i,s),a=F(i,o,s),u=F(l,c,s),f=F(c,a,s),h=F(u,f,s);return[["C",l[0],l[1],u[0],u[1],h[0],h[1]],["C",f[0],f[1],a[0],a[1],o[0],o[1]]]},Se=e=>{const t=[];let s,r=-1,n=0,i=0,o=0,l=0;const c={...lt};return e.forEach(a=>{const[u]=a,f=u.toUpperCase(),h=u.toLowerCase(),y=u===h,m=a.slice(1);f==="M"?(r+=1,[n,i]=m,n+=y?c.x:0,i+=y?c.y:0,o=n,l=i,s=[y?[f,o,l]:a]):(f==="Z"?(n=o,i=l):f==="H"?([,n]=a,n+=y?c.x:0):f==="V"?([,i]=a,i+=y?c.y:0):([n,i]=a.slice(-2),n+=y?c.x:0,i+=y?c.y:0),s.push(a)),c.x=n,c.y=i,t[r]=s}),t},Qe=(e,t)=>{let s=0,r=0,n=0,i=0,o=0,l=0,c="M";const a=D(e),u=t&&Object.keys(t);if(!t||u&&!u.length)return a.slice(0);t.origin||Object.assign(t,{origin:Y.origin});const f=t.origin,h=Ee(t);return h.isIdentity?a.slice(0):O(a,(y,m,g,A)=>{[c]=y;const M=c.toUpperCase(),x=M!==c?ot(y,m,g,A):y.slice(0);let p=M==="A"?["C"].concat(xt(g,A,x[1],x[2],x[3],x[4],x[5],x[6],x[7])):M==="V"?["L",g,x[1]]:M==="H"?["L",x[1],A]:x;c=p[0];const w=c==="C"&&p.length>7,C=w?p.slice(0,7):p.slice(0);if(w&&(a.splice(m+1,0,["C"].concat(p.slice(7))),p=C),c==="L")[n,i]=Ut(h,[p[1],p[2]],f),s!==n&&r!==i?p=["L",n,i]:r===i?p=["H",n]:s===n&&(p=["V",i]);else for(o=1,l=p.length;o"u";if(n||!t.length)throw TypeError(`${Z}: "pathValue" is ${n?"undefined":"empty"}`);this.segments=D(t);const{round:i,origin:o}=r;let l;Number.isInteger(i)||i==="off"?l=i:l=Y.round;let c=Y.origin;if(Array.isArray(o)&&o.length>=2){const[a,u,f]=o.map(Number);c=[Number.isNaN(a)?0:a,Number.isNaN(u)?0:u,Number.isNaN(f)?0:f]}return this.round=l,this.origin=c,this}get bbox(){return $e(this.segments)}get length(){return st(this.segments)}getBBox(){return this.bbox}getTotalLength(){return this.length}getPointAtLength(t){return ft(this.segments,t)}toAbsolute(){const{segments:t}=this;return this.segments=gt(t),this}toRelative(){const{segments:t}=this;return this.segments=fe(t),this}toCurve(){const{segments:t}=this;return this.segments=bt(t),this}reverse(t){const{segments:s}=this,r=Se(s),n=r.length>1?r:!1,i=n?n.map((l,c)=>t?c?$t(l):l.slice(0):$t(l)):s.slice(0);let o=[];return n?o=i.flat(1):o=t?s:$t(s),this.segments=o.slice(0),this}normalize(){const{segments:t}=this;return this.segments=mt(t),this}optimize(){const{segments:t}=this,s=this.round==="off"?2:this.round;return this.segments=je(t,s),this}transform(t){if(!t||typeof t!="object"||typeof t=="object"&&!["translate","rotate","skew","scale"].some(c=>c in t))return this;const{segments:s,origin:[r,n,i]}=this,o={};for(const[c,a]of Object.entries(t))c==="skew"&&Array.isArray(a)||(c==="rotate"||c==="translate"||c==="origin"||c==="scale")&&Array.isArray(a)?o[c]=a.map(Number):c!=="origin"&&typeof Number(a)=="number"&&(o[c]=Number(a));const{origin:l}=o;if(Array.isArray(l)&&l.length>=2){const[c,a,u]=l.map(Number);o.origin=[Number.isNaN(c)?r:c,Number.isNaN(a)?n:a,u||i]}else o.origin=[r,n,i];return this.segments=Qe(s,o),this}flipX(){const{cx:t,cy:s}=this.bbox;return this.transform({rotate:[0,180,0],origin:[t,s,0]}),this}flipY(){const{cx:t,cy:s}=this.bbox;return this.transform({rotate:[180,0,0],origin:[t,s,0]}),this}toString(){return Rt(this.segments,this.round)}dispose(){Object.keys(this).forEach(t=>delete this[t])}}return d(b,"CSSMatrix",T),d(b,"pathToAbsolute",gt),d(b,"pathToRelative",fe),d(b,"pathToCurve",bt),d(b,"pathToString",Rt),d(b,"arcTools",Oe),d(b,"bezierTools",{Cvalues:pe,Tvalues:Ot,minmaxC:Bt,minmaxQ:Mt,getBezierLength:ut,bezierLength:Me,calculateBezier:Ae,computeBezier:de,deriveBezier:be,CBEZIER_MINMAX_EPSILON:Ne}),d(b,"cubicTools",{getCubicLength:Nt,getCubicBBox:Ht,getPointAtCubicLength:Le,getPointAtCubicSegmentLength:we}),d(b,"lineTools",{getPointAtLineLength:jt,getLineBBox:St,getLineLength:at}),d(b,"quadTools",{getPointAtQuadSegmentLength:Ce,getQuadLength:wt,getQuadBBox:Ft,getPointAtQuadLength:Te}),d(b,"polygonTools",{polygonArea:Be,polygonLength:He}),d(b,"distanceSquareRoot",dt),d(b,"distanceEpsilon",Lt),d(b,"midPoint",F),d(b,"rotateVector",ct),d(b,"roundTo",P),d(b,"finalizeSegment",Pt),d(b,"invalidPathValue",W),d(b,"isArcCommand",ue),d(b,"isDigit",K),d(b,"isDigitStart",ae),d(b,"isMoveCommand",me),d(b,"isPathCommand",le),d(b,"isSpace",ce),d(b,"paramsCount",et),d(b,"paramsParser",lt),d(b,"pathParser",kt),d(b,"scanFlag",ie),d(b,"scanParam",oe),d(b,"scanSegment",qt),d(b,"skipSpaces",nt),d(b,"getPathBBox",$e),d(b,"getPathArea",ve),d(b,"getTotalLength",st),d(b,"getDrawDirection",Ue),d(b,"getPointAtLength",ft),d(b,"getPropertiesAtLength",_t),d(b,"getPropertiesAtPoint",Ct),d(b,"getClosestPoint",Fe),d(b,"getSegmentOfPoint",Ke),d(b,"getSegmentAtLength",Je),d(b,"isPointInStroke",Xe),d(b,"isValidPath",qe),d(b,"isPathArray",Tt),d(b,"isAbsoluteArray",ze),d(b,"isRelativeArray",Ye),d(b,"isCurveArray",We),d(b,"isNormalizedArray",Pe),d(b,"shapeToPath",sn),d(b,"shapeToPathArray",Ie),d(b,"shapeParams",ht),d(b,"parsePathString",D),d(b,"absolutizeSegment",ot),d(b,"arcToCubic",xt),d(b,"getSVGMatrix",Ee),d(b,"iterate",O),d(b,"lineToCubic",Et),d(b,"normalizePath",mt),d(b,"normalizeSegment",pt),d(b,"optimizePath",je),d(b,"projection2d",Ut),d(b,"quadToCubic",he),d(b,"relativizeSegment",It),d(b,"reverseCurve",on),d(b,"reversePath",$t),d(b,"roundPath",cn),d(b,"roundSegment",vt),d(b,"segmentToCubic",ye),d(b,"shortenSegment",Re),d(b,"splitCubic",ln),d(b,"splitPath",Se),d(b,"transformPath",Qe),b}(); +var SVGPathCommander=function(){"use strict";var an=Object.defineProperty;var un=(X,_,z)=>_ in X?an(X,_,{enumerable:!0,configurable:!0,writable:!0,value:z}):X[_]=z;var d=(X,_,z)=>un(X,typeof _!="symbol"?_+"":_,z);var X=Object.defineProperty,_=(e,t,s)=>t in e?X(e,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):e[t]=s,z=(e,t,s)=>_(e,typeof t!="symbol"?t+"":t,s);const De={a:1,b:0,c:0,d:1,e:0,f:0,m11:1,m12:0,m13:0,m14:0,m21:0,m22:1,m23:0,m24:0,m31:0,m32:0,m33:1,m34:0,m41:0,m42:0,m43:0,m44:1,is2D:!0,isIdentity:!0},Wt=e=>(e instanceof Float64Array||e instanceof Float32Array||Array.isArray(e)&&e.every(t=>typeof t=="number"))&&[6,16].some(t=>e.length===t),Xt=e=>e instanceof DOMMatrix||e instanceof T||typeof e=="object"&&Object.keys(De).every(t=>e&&t in e),it=e=>{const t=new T,s=Array.from(e);if(!Wt(s))throw TypeError(`CSSMatrix: "${s.join(",")}" must be an array with 6/16 numbers.`);if(s.length===16){const[r,n,i,o,l,c,a,u,f,h,y,m,g,A,M,N]=s;t.m11=r,t.a=r,t.m21=l,t.c=l,t.m31=f,t.m41=g,t.e=g,t.m12=n,t.b=n,t.m22=c,t.d=c,t.m32=h,t.m42=A,t.f=A,t.m13=i,t.m23=a,t.m33=y,t.m43=M,t.m14=o,t.m24=u,t.m34=m,t.m44=N}else if(s.length===6){const[r,n,i,o,l,c]=s;t.m11=r,t.a=r,t.m12=n,t.b=n,t.m21=i,t.c=i,t.m22=o,t.d=o,t.m41=l,t.e=l,t.m42=c,t.f=c}return t},Yt=e=>{if(Xt(e))return it([e.m11,e.m12,e.m13,e.m14,e.m21,e.m22,e.m23,e.m24,e.m31,e.m32,e.m33,e.m34,e.m41,e.m42,e.m43,e.m44]);throw TypeError(`CSSMatrix: "${JSON.stringify(e)}" is not a DOMMatrix / CSSMatrix / JSON compatible object.`)},Vt=e=>{if(typeof e!="string")throw TypeError(`CSSMatrix: "${JSON.stringify(e)}" is not a string.`);const t=String(e).replace(/\s/g,"");let s=new T;const r=`CSSMatrix: invalid transform string "${e}"`;return t.split(")").filter(n=>n).forEach(n=>{const[i,o]=n.split("(");if(!o)throw TypeError(r);const l=o.split(",").map(m=>m.includes("rad")?parseFloat(m)*(180/Math.PI):parseFloat(m)),[c,a,u,f]=l,h=[c,a,u],y=[c,a,u,f];if(i==="perspective"&&c&&[a,u].every(m=>m===void 0))s.m34=-1/c;else if(i.includes("matrix")&&[6,16].includes(l.length)&&l.every(m=>!Number.isNaN(+m))){const m=l.map(g=>Math.abs(g)<1e-6?0:g);s=s.multiply(it(m))}else if(i==="translate3d"&&h.every(m=>!Number.isNaN(+m)))s=s.translate(c,a,u);else if(i==="translate"&&c&&u===void 0)s=s.translate(c,a||0,0);else if(i==="rotate3d"&&y.every(m=>!Number.isNaN(+m))&&f)s=s.rotateAxisAngle(c,a,u,f);else if(i==="rotate"&&c&&[a,u].every(m=>m===void 0))s=s.rotate(0,0,c);else if(i==="scale3d"&&h.every(m=>!Number.isNaN(+m))&&h.some(m=>m!==1))s=s.scale(c,a,u);else if(i==="scale"&&!Number.isNaN(c)&&(c!==1||a!==1)&&u===void 0){const m=Number.isNaN(+a)?c:a;s=s.scale(c,m,1)}else if(i==="skew"&&(c||!Number.isNaN(c)&&a)&&u===void 0)s=s.skew(c,a||0);else if(["translate","rotate","scale","skew"].some(m=>i.includes(m))&&/[XYZ]/.test(i)&&c&&[a,u].every(m=>m===void 0))if(i==="skewX"||i==="skewY")s=s[i](c);else{const m=i.replace(/[XYZ]/,""),g=i.replace(m,""),A=["X","Y","Z"].indexOf(g),M=m==="scale"?1:0,N=[A===0?c:M,A===1?c:M,A===2?c:M];s=s[m](...N)}else throw TypeError(r)}),s},zt=(e,t)=>t?[e.a,e.b,e.c,e.d,e.e,e.f]:[e.m11,e.m12,e.m13,e.m14,e.m21,e.m22,e.m23,e.m24,e.m31,e.m32,e.m33,e.m34,e.m41,e.m42,e.m43,e.m44],Gt=(e,t,s)=>{const r=new T;return r.m41=e,r.e=e,r.m42=t,r.f=t,r.m43=s,r},te=(e,t,s)=>{const r=new T,n=Math.PI/180,i=e*n,o=t*n,l=s*n,c=Math.cos(i),a=-Math.sin(i),u=Math.cos(o),f=-Math.sin(o),h=Math.cos(l),y=-Math.sin(l),m=u*h,g=-u*y;r.m11=m,r.a=m,r.m12=g,r.b=g,r.m13=f;const A=a*f*h+c*y;r.m21=A,r.c=A;const M=c*h-a*f*y;return r.m22=M,r.d=M,r.m23=-a*u,r.m31=a*y-c*f*h,r.m32=a*h+c*f*y,r.m33=c*u,r},ee=(e,t,s,r)=>{const n=new T,i=Math.sqrt(e*e+t*t+s*s);if(i===0)return n;const o=e/i,l=t/i,c=s/i,a=r*(Math.PI/360),u=Math.sin(a),f=Math.cos(a),h=u*u,y=o*o,m=l*l,g=c*c,A=1-2*(m+g)*h;n.m11=A,n.a=A;const M=2*(o*l*h+c*u*f);n.m12=M,n.b=M,n.m13=2*(o*c*h-l*u*f);const N=2*(l*o*h-c*u*f);n.m21=N,n.c=N;const x=1-2*(g+y)*h;return n.m22=x,n.d=x,n.m23=2*(l*c*h+o*u*f),n.m31=2*(c*o*h+l*u*f),n.m32=2*(c*l*h-o*u*f),n.m33=1-2*(y+m)*h,n},ne=(e,t,s)=>{const r=new T;return r.m11=e,r.a=e,r.m22=t,r.d=t,r.m33=s,r},yt=(e,t)=>{const s=new T;if(e){const r=e*Math.PI/180,n=Math.tan(r);s.m21=n,s.c=n}if(t){const r=t*Math.PI/180,n=Math.tan(r);s.m12=n,s.b=n}return s},se=e=>yt(e,0),re=e=>yt(0,e),U=(e,t)=>{const s=t.m11*e.m11+t.m12*e.m21+t.m13*e.m31+t.m14*e.m41,r=t.m11*e.m12+t.m12*e.m22+t.m13*e.m32+t.m14*e.m42,n=t.m11*e.m13+t.m12*e.m23+t.m13*e.m33+t.m14*e.m43,i=t.m11*e.m14+t.m12*e.m24+t.m13*e.m34+t.m14*e.m44,o=t.m21*e.m11+t.m22*e.m21+t.m23*e.m31+t.m24*e.m41,l=t.m21*e.m12+t.m22*e.m22+t.m23*e.m32+t.m24*e.m42,c=t.m21*e.m13+t.m22*e.m23+t.m23*e.m33+t.m24*e.m43,a=t.m21*e.m14+t.m22*e.m24+t.m23*e.m34+t.m24*e.m44,u=t.m31*e.m11+t.m32*e.m21+t.m33*e.m31+t.m34*e.m41,f=t.m31*e.m12+t.m32*e.m22+t.m33*e.m32+t.m34*e.m42,h=t.m31*e.m13+t.m32*e.m23+t.m33*e.m33+t.m34*e.m43,y=t.m31*e.m14+t.m32*e.m24+t.m33*e.m34+t.m34*e.m44,m=t.m41*e.m11+t.m42*e.m21+t.m43*e.m31+t.m44*e.m41,g=t.m41*e.m12+t.m42*e.m22+t.m43*e.m32+t.m44*e.m42,A=t.m41*e.m13+t.m42*e.m23+t.m43*e.m33+t.m44*e.m43,M=t.m41*e.m14+t.m42*e.m24+t.m43*e.m34+t.m44*e.m44;return it([s,r,n,i,o,l,c,a,u,f,h,y,m,g,A,M])};class T{constructor(t){return this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0,this.m11=1,this.m12=0,this.m13=0,this.m14=0,this.m21=0,this.m22=1,this.m23=0,this.m24=0,this.m31=0,this.m32=0,this.m33=1,this.m34=0,this.m41=0,this.m42=0,this.m43=0,this.m44=1,t?this.setMatrixValue(t):this}get isIdentity(){return this.m11===1&&this.m12===0&&this.m13===0&&this.m14===0&&this.m21===0&&this.m22===1&&this.m23===0&&this.m24===0&&this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m41===0&&this.m42===0&&this.m43===0&&this.m44===1}get is2D(){return this.m31===0&&this.m32===0&&this.m33===1&&this.m34===0&&this.m43===0&&this.m44===1}setMatrixValue(t){return typeof t=="string"&&t.length&&t!=="none"?Vt(t):Array.isArray(t)||t instanceof Float64Array||t instanceof Float32Array?it(t):typeof t=="object"?Yt(t):this}toFloat32Array(t){return Float32Array.from(zt(this,t))}toFloat64Array(t){return Float64Array.from(zt(this,t))}toString(){const{is2D:t}=this,s=this.toFloat64Array(t).join(", ");return`${t?"matrix":"matrix3d"}(${s})`}toJSON(){const{is2D:t,isIdentity:s}=this;return{...this,is2D:t,isIdentity:s}}multiply(t){return U(this,t)}translate(t,s,r){const n=t;let i=s,o=r;return typeof i>"u"&&(i=0),typeof o>"u"&&(o=0),U(this,Gt(n,i,o))}scale(t,s,r){const n=t;let i=s,o=r;return typeof i>"u"&&(i=t),typeof o>"u"&&(o=1),U(this,ne(n,i,o))}rotate(t,s,r){let n=t,i=s||0,o=r||0;return typeof t=="number"&&typeof s>"u"&&typeof r>"u"&&(o=n,n=0,i=0),U(this,te(n,i,o))}rotateAxisAngle(t,s,r,n){if([t,s,r,n].some(i=>Number.isNaN(+i)))throw new TypeError("CSSMatrix: expecting 4 values");return U(this,ee(t,s,r,n))}skewX(t){return U(this,se(t))}skewY(t){return U(this,re(t))}skew(t,s){return U(this,yt(t,s))}transformPoint(t){const s=this.m11*t.x+this.m21*t.y+this.m31*t.z+this.m41*t.w,r=this.m12*t.x+this.m22*t.y+this.m32*t.z+this.m42*t.w,n=this.m13*t.x+this.m23*t.y+this.m33*t.z+this.m43*t.w,i=this.m14*t.x+this.m24*t.y+this.m34*t.z+this.m44*t.w;return t instanceof DOMPoint?new DOMPoint(s,r,n,i):{x:s,y:r,z:n,w:i}}}z(T,"Translate",Gt),z(T,"Rotate",te),z(T,"RotateAxisAngle",ee),z(T,"Scale",ne),z(T,"SkewX",se),z(T,"SkewY",re),z(T,"Skew",yt),z(T,"Multiply",U),z(T,"fromArray",it),z(T,"fromMatrix",Yt),z(T,"fromString",Vt),z(T,"toArray",zt),z(T,"isCompatibleArray",Wt),z(T,"isCompatibleObject",Xt);const Y={origin:[0,0,0],round:4},et={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},Pt=e=>{let t=e.pathValue[e.segmentStart],s=t.toLowerCase();const{data:r}=e;for(;r.length>=et[s]&&(s==="m"&&r.length>2?(e.segments.push([t].concat(r.splice(0,2))),s="l",t=t==="m"?"l":"L"):e.segments.push([t].concat(r.splice(0,et[s]))),!!et[s]););},Z="SVGPathCommander Error",ie=e=>{const{index:t,pathValue:s}=e,r=s.charCodeAt(t);if(r===48){e.param=0,e.index+=1;return}if(r===49){e.param=1,e.index+=1;return}e.err=`${Z}: invalid Arc flag "${s[t]}", expecting 0 or 1 at index ${t}`},K=e=>e>=48&&e<=57,W="Invalid path value",oe=e=>{const{max:t,pathValue:s,index:r}=e;let n=r,i=!1,o=!1,l=!1,c=!1,a;if(n>=t){e.err=`${Z}: ${W} at index ${n}, "pathValue" is missing param`;return}if(a=s.charCodeAt(n),(a===43||a===45)&&(n+=1,a=s.charCodeAt(n)),!K(a)&&a!==46){e.err=`${Z}: ${W} at index ${n}, "${s[n]}" is not a number`;return}if(a!==46){if(i=a===48,n+=1,a=s.charCodeAt(n),i&&n[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279,10,13,8232,8233,32,9,11,12,160].includes(e),nt=e=>{const{pathValue:t,max:s}=e;for(;e.index{switch(e|32){case 109:case 122:case 108:case 104:case 118:case 99:case 115:case 113:case 116:case 97:return!0;default:return!1}},ae=e=>K(e)||e===43||e===45||e===46,ue=e=>(e|32)===97,me=e=>{switch(e|32){case 109:case 77:return!0;default:return!1}},qt=e=>{var c;const{max:t,pathValue:s,index:r,segments:n}=e,i=s.charCodeAt(r),o=et[s[r].toLowerCase()];if(e.segmentStart=r,!le(i)){e.err=`${Z}: ${W} "${s[r]}" is not a path command at index ${r}`;return}const l=n[n.length-1];if(!me(i)&&((c=l==null?void 0:l[0])==null?void 0:c.toLocaleLowerCase())==="z"){e.err=`${Z}: ${W} "${s[r]}" is not a MoveTo path command at index ${r}`;return}if(e.index+=1,nt(e),e.data=[],!o){Pt(e);return}for(;;){for(let a=o;a>0;a-=1){if(ue(i)&&(a===3||a===4)?ie(e):oe(e),e.err.length)return;e.data.push(e.param),nt(e),e.index=e.max||!ae(s.charCodeAt(e.index)))break}Pt(e)};class kt{constructor(t){this.segments=[],this.pathValue=t,this.max=t.length,this.index=0,this.param=0,this.segmentStart=0,this.data=[],this.err=""}}const D=e=>{if(typeof e!="string")return e.slice(0);const t=new kt(e);for(nt(t);t.index{const[n]=e,i=n.toUpperCase();if(t===0||i===n)return e;if(i==="A")return[i,e[1],e[2],e[3],e[4],e[5],e[6]+s,e[7]+r];if(i==="V")return[i,e[1]+r];if(i==="H")return[i,e[1]+s];if(i==="L")return[i,e[1]+s,e[2]+r];{const l=[],c=e.length;for(let a=1;a{let s=e.length,r,n="M",i="M",o=!1,l=0,c=0,a=0,u=0,f=0;for(let h=0;h{const t=D(e);return O(t,ot)},It=(e,t,s,r)=>{const[n]=e,i=n.toLowerCase();if(t===0||n===i)return e;if(i==="a")return[i,e[1],e[2],e[3],e[4],e[5],e[6]-s,e[7]-r];if(i==="v")return[i,e[1]-r];if(i==="h")return[i,e[1]-s];if(i==="l")return[i,e[1]-s,e[2]-r];{const l=[],c=e.length;for(let a=1;a{const t=D(e);return O(t,It)},ct=(e,t,s)=>{const{sin:r,cos:n}=Math,i=e*n(s)-t*r(s),o=e*r(s)+t*n(s);return{x:i,y:o}},xt=(e,t,s,r,n,i,o,l,c,a)=>{let u=e,f=t,h=s,y=r,m=l,g=c;const A=Math.PI*120/180,M=Math.PI/180*(+n||0);let N=[],x,p,w,C,I;if(a)[p,w,C,I]=a;else{x=ct(u,f,-M),u=x.x,f=x.y,x=ct(m,g,-M),m=x.x,g=x.y;const $=(u-m)/2,S=(f-g)/2;let k=$*$/(h*h)+S*S/(y*y);k>1&&(k=Math.sqrt(k),h*=k,y*=k);const Jt=h*h,Kt=y*y,Ze=(i===o?-1:1)*Math.sqrt(Math.abs((Jt*Kt-Jt*S*S-Kt*$*$)/(Jt*S*S+Kt*$*$)));C=Ze*h*S/y+(u+m)/2,I=Ze*-y*$/h+(f+g)/2,p=Math.asin(((f-I)/y*10**9>>0)/10**9),w=Math.asin(((g-I)/y*10**9>>0)/10**9),p=uw&&(p-=Math.PI*2),!o&&w>p&&(w-=Math.PI*2)}let E=w-p;if(Math.abs(E)>A){const $=w,S=m,k=g;w=p+A*(o&&w>p?1:-1),m=C+h*Math.cos(w),g=I+y*Math.sin(w),N=xt(m,g,h,y,n,0,o,S,k,[w,$,C,I])}E=w-p;const q=Math.cos(p),v=Math.sin(p),B=Math.cos(w),G=Math.sin(w),R=Math.tan(E/4),L=4/3*h*R,j=4/3*y*R,H=[u,f],Q=[u+L*v,f-j*q],J=[m+L*G,g-j*B],rt=[m,g];if(Q[0]=2*H[0]-Q[0],Q[1]=2*H[1]-Q[1],a)return[Q[0],Q[1],J[0],J[1],rt[0],rt[1]].concat(N);N=[Q[0],Q[1],J[0],J[1],rt[0],rt[1]].concat(N);const tt=[];for(let $=0,S=N.length;${const o=.3333333333333333,l=2/3;return[o*e+l*s,o*t+l*r,o*n+l*s,o*i+l*r,n,i]},F=(e,t,s)=>{const[r,n]=e,[i,o]=t;return[r+(i-r)*s,n+(o-n)*s]},Et=(e,t,s,r)=>{const n=F([e,t],[s,r],.3333333333333333),i=F([e,t],[s,r],2/3);return[n[0],n[1],i[0],i[1],s,r]},ye=(e,t)=>{const[s]=e,r=e.slice(1).map(Number),[n,i]=r,{x1:o,y1:l,x:c,y:a}=t;return"TQ".includes(s)||(t.qx=null,t.qy=null),s==="M"?(t.x=n,t.y=i,e):s==="A"?["C"].concat(xt(o,l,r[0],r[1],r[2],r[3],r[4],r[5],r[6])):s==="Q"?(t.qx=n,t.qy=i,["C"].concat(he(o,l,r[0],r[1],r[2],r[3]))):s==="L"?["C"].concat(Et(o,l,n,i)):s==="Z"?["C"].concat(Et(o,l,c,a)):e},pt=(e,t)=>{const[s]=e,r=s.toUpperCase(),n=s!==r,{x1:i,y1:o,x2:l,y2:c,x:a,y:u}=t,f=e.slice(1);let h=f.map((y,m)=>y+(n?m%2?u:a:0));if("TQ".includes(r)||(t.qx=null,t.qy=null),r==="A")return h=f.slice(0,-2).concat(f[5]+(n?a:0),f[6]+(n?u:0)),["A"].concat(h);if(r==="H")return["L",e[1]+(n?a:0),o];if(r==="V")return["L",i,e[1]+(n?u:0)];if(r==="L")return["L",e[1]+(n?a:0),e[2]+(n?u:0)];if(r==="M")return["M",e[1]+(n?a:0),e[2]+(n?u:0)];if(r==="C")return["C"].concat(h);if(r==="S"){const y=i*2-l,m=o*2-c;return t.x1=y,t.y1=m,["C",y,m].concat(h)}else if(r==="T"){const y=i*2-(t.qx?t.qx:0),m=o*2-(t.qy?t.qy:0);return t.qx=y,t.qy=m,["Q",y,m].concat(h)}else if(r==="Q"){const[y,m]=h;return t.qx=y,t.qy=m,["Q"].concat(h)}else if(r==="Z")return["Z"];return e},lt={x1:0,y1:0,x2:0,y2:0,x:0,y:0,qx:null,qy:null},bt=e=>{const t={...lt},s=D(e);return O(s,(r,n,i,o)=>{t.x=i,t.y=o;const l=pt(r,t);let c=ye(l,t);c[0]==="C"&&c.length>7&&(s.splice(n+1,0,["C"].concat(c.slice(7))),c=c.slice(0,7));const u=c.length;return t.x1=+c[u-2],t.y1=+c[u-1],t.x2=+c[u-4]||t.x1,t.y2=+c[u-3]||t.y1,c})},P=(e,t)=>{const s=t>=1?10**t:1;return t>0?Math.round(e*s)/s:Math.round(e)},Rt=(e,t)=>{const s=e.length;let{round:r}=Y,n=e[0],i="";r=t==="off"||typeof t=="number"&&t>=0?t:typeof r=="number"&&r>=0?r:"off";for(let o=0;oMath.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])),at=(e,t,s,r)=>dt([e,t],[s,r]),jt=(e,t,s,r,n)=>{let i={x:e,y:t};if(typeof n=="number"){const o=dt([e,t],[s,r]);if(n<=0)i={x:e,y:t};else if(n>=o)i={x:s,y:r};else{const[l,c]=F([e,t],[s,r],n/o);i={x:l,y:c}}}return i},St=(e,t,s,r)=>{const{min:n,max:i}=Math;return[n(e,s),n(t,r),i(e,s),i(t,r)]},Qt=(e,t,s)=>{const r=s/2,n=Math.sin(r),i=Math.cos(r),o=e**2*n**2,l=t**2*i**2,c=Math.sqrt(o+l)*s;return Math.abs(c)},V=(e,t,s,r,n,i)=>{const{sin:o,cos:l}=Math,c=l(n),a=o(n),u=s*l(i),f=r*o(i);return[e+c*u-a*f,t+a*u+c*f]},Zt=(e,t)=>{const{x:s,y:r}=e,{x:n,y:i}=t,o=s*n+r*i,l=Math.sqrt((s**2+r**2)*(n**2+i**2));return(s*i-r*n<0?-1:1)*Math.acos(o/l)},At=(e,t,s,r,n,i,o,l,c)=>{const{abs:a,sin:u,cos:f,sqrt:h,PI:y}=Math;let m=a(s),g=a(r);const M=(n%360+360)%360*(y/180);if(e===l&&t===c)return{rx:m,ry:g,startAngle:0,endAngle:0,center:{x:l,y:c}};if(m===0||g===0)return{rx:m,ry:g,startAngle:0,endAngle:0,center:{x:(l+e)/2,y:(c+t)/2}};const N=(e-l)/2,x=(t-c)/2,p={x:f(M)*N+u(M)*x,y:-u(M)*N+f(M)*x},w=p.x**2/m**2+p.y**2/g**2;w>1&&(m*=h(w),g*=h(w));const C=m**2*g**2-m**2*p.y**2-g**2*p.x**2,I=m**2*p.y**2+g**2*p.x**2;let E=C/I;E=E<0?0:E;const q=(i!==o?1:-1)*h(E),v={x:q*(m*p.y/g),y:q*(-(g*p.x)/m)},B={x:f(M)*v.x-u(M)*v.y+(e+l)/2,y:u(M)*v.x+f(M)*v.y+(t+c)/2},G={x:(p.x-v.x)/m,y:(p.y-v.y)/g},R=Zt({x:1,y:0},G),L={x:(-p.x-v.x)/m,y:(-p.y-v.y)/g};let j=Zt(G,L);!o&&j>0?j-=2*y:o&&j<0&&(j+=2*y),j%=2*y;const H=R+j;return{center:B,startAngle:R,endAngle:H,rx:m,ry:g}},Dt=(e,t,s,r,n,i,o,l,c)=>{const{rx:a,ry:u,startAngle:f,endAngle:h}=At(e,t,s,r,n,i,o,l,c);return Qt(a,u,h-f)},ge=(e,t,s,r,n,i,o,l,c,a)=>{let u={x:e,y:t};const{center:f,rx:h,ry:y,startAngle:m,endAngle:g}=At(e,t,s,r,n,i,o,l,c);if(typeof a=="number"){const A=Qt(h,y,g-m);if(a<=0)u={x:e,y:t};else if(a>=A)u={x:l,y:c};else{if(e===l&&t===c)return{x:l,y:c};if(h===0||y===0)return jt(e,t,l,c,a);const{PI:M,cos:N,sin:x}=Math,p=g-m,C=(n%360+360)%360*(M/180),I=m+p*(a/A),E=h*N(I),q=y*x(I);u={x:N(C)*E-x(C)*q+f.x,y:x(C)*E+N(C)*q+f.y}}}return u},xe=(e,t,s,r,n,i,o,l,c)=>{const{center:a,rx:u,ry:f,startAngle:h,endAngle:y}=At(e,t,s,r,n,i,o,l,c),m=y-h,{min:g,max:A,tan:M,atan2:N,PI:x}=Math,{x:p,y:w}=a,C=n*x/180,I=M(C),E=N(-f*I,u),q=E,v=E+x,B=N(f,u*I),G=B+x,R=[l],L=[c];let j=g(e,l),H=A(e,l),Q=g(t,c),J=A(t,c);const rt=y-m*1e-5,tt=V(p,w,u,f,C,rt),$=y-m*.99999,S=V(p,w,u,f,C,$);if(tt[0]>H||S[0]>H){const k=V(p,w,u,f,C,q);R.push(k[0]),L.push(k[1])}if(tt[0]J||S[1]>J){const k=V(p,w,u,f,C,B);R.push(k[0]),L.push(k[1])}return j=g.apply([],R),Q=g.apply([],L),H=A.apply([],R),J=A.apply([],L),[j,Q,H,J]},Oe=Object.freeze(Object.defineProperty({__proto__:null,angleBetween:Zt,arcLength:Qt,arcPoint:V,getArcBBox:xe,getArcLength:Dt,getArcProps:At,getPointAtArcLength:ge},Symbol.toStringTag,{value:"Module"})),Ot=[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213],pe=[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872],be=e=>{const t=[];for(let s=e,r=s.length,n=r-1;r>1;r-=1,n-=1){const i=[];for(let o=0;o{if(t===0)return e[0].t=0,e[0];const s=e.length-1;if(t===1)return e[s].t=1,e[s];const r=1-t;let n=e;if(s===0)return e[0].t=t,e[0];if(s===1)return{x:r*n[0].x+t*n[1].x,y:r*n[0].y+t*n[1].y,t};const i=r*r,o=t*t;let l=0,c=0,a=0,u=0;return s===2?(n=[n[0],n[1],n[2],{x:0,y:0}],l=i,c=r*t*2,a=o):s===3&&(l=i*r,c=i*t*3,a=r*o*3,u=t*o),{x:l*n[0].x+c*n[1].x+a*n[2].x+u*n[3].x,y:l*n[0].y+c*n[1].y+a*n[2].y+u*n[3].y,t}},Ae=(e,t)=>{const s=e(t),r=s.x*s.x+s.y*s.y;return Math.sqrt(r)},Me=e=>{const s=Ot.length;let r=0;for(let n=0,i;n{const t=[];for(let r=0,n=e.length,i=2;rde(s[0],r))},Ne=1e-8,Mt=([e,t,s])=>{const r=Math.min(e,s),n=Math.max(e,s);if(t>=e?s>=t:s<=t)return[r,n];const i=(e*s-t*t)/(e-2*t+s);return i{const n=e-3*t+3*s-r;if(Math.abs(n)0&&u<1){const h=e*(1-u)*(1-u)*(1-u)+t*3*(1-u)*(1-u)*u+s*3*(1-u)*u*u+r*u*u*u;hc&&(c=h)}return[l,c]},we=([e,t,s,r,n,i,o,l],c)=>{const a=1-c;return{x:a**3*e+3*a**2*c*s+3*a*c**2*n+c**3*o,y:a**3*t+3*a**2*c*r+3*a*c**2*i+c**3*l}},Nt=(e,t,s,r,n,i,o,l)=>ut([e,t,s,r,n,i,o,l]),Le=(e,t,s,r,n,i,o,l,c)=>{const a=typeof c=="number";let u={x:e,y:t};if(a){const f=ut([e,t,s,r,n,i,o,l]);c<=0||(c>=f?u={x:o,y:l}:u=we([e,t,s,r,n,i,o,l],c/f))}return u},Ht=(e,t,s,r,n,i,o,l)=>{const c=Bt([e,s,n,o]),a=Bt([t,r,i,l]);return[c[0],a[0],c[1],a[1]]},Ce=([e,t,s,r,n,i],o)=>{const l=1-o;return{x:l**2*e+2*l*o*s+o**2*n,y:l**2*t+2*l*o*r+o**2*i}},wt=(e,t,s,r,n,i)=>ut([e,t,s,r,n,i]),Te=(e,t,s,r,n,i,o)=>{const l=typeof o=="number";let c={x:e,y:t};if(l){const a=ut([e,t,s,r,n,i]);o<=0||(o>=a?c={x:n,y:i}:c=Ce([e,t,s,r,n,i],o/a))}return c},Ft=(e,t,s,r,n,i)=>{const o=Mt([e,s,n]),l=Mt([t,r,i]);return[o[0],l[0],o[1],l[1]]},Be=e=>{const t=e.length;let s=-1,r,n=e[t-1],i=0;for(;++se.reduce((t,s,r)=>r?t+dt(e[r-1],s):0,0),Lt=1e-5,mt=e=>{const t=D(e),s={...lt};return O(t,(r,n,i,o)=>{s.x=i,s.y=o;const l=pt(r,s),c=l.length;return s.x1=+l[c-2],s.y1=+l[c-1],s.x2=+l[c-4]||s.x1,s.y2=+l[c-3]||s.y1,l})},ft=(e,t)=>{const s=mt(e);let r=!1,n=[],i="M",o=0,l=0,[c,a]=s[0].slice(1);const u=typeof t=="number";let f={x:c,y:a},h=0,y=f,m=0;return!u||t{if([i]=g,r=i==="M",n=r?n:[M,N].concat(g.slice(1)),r?([,c,a]=g,f={x:c,y:a},h=0):i==="L"?(f=jt(n[0],n[1],n[2],n[3],t-m),h=at(n[0],n[1],n[2],n[3])):i==="A"?(f=ge(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8],t-m),h=Dt(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],n[8])):i==="C"?(f=Le(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7],t-m),h=Nt(n[0],n[1],n[2],n[3],n[4],n[5],n[6],n[7])):i==="Q"?(f=Te(n[0],n[1],n[2],n[3],n[4],n[5],t-m),h=wt(n[0],n[1],n[2],n[3],n[4],n[5])):i==="Z"&&(n=[M,N,c,a],f={x:c,y:a},h=at(n[0],n[1],n[2],n[3])),[o,l]=n.slice(-2),mm-Lt?{x:o,y:l}:y)},st=e=>{const t=D(e);let s=0,r=0,n=0,i=0,o=0,l=0,c="M",a=0,u=0,f=0;return O(t,(h,y,m,g)=>{[c]=h;const A=c.toUpperCase(),N=A!==c?ot(h,y,m,g):h.slice(0),x=A==="V"?["L",m,N[1]]:A==="H"?["L",N[1],g]:N;if([c]=x,"TQ".includes(A)||(o=0,l=0),c==="M")[,a,u]=x;else if(c==="L")f+=at(m,g,x[1],x[2]);else if(c==="A")f+=Dt(m,g,x[1],x[2],x[3],x[4],x[5],x[6],x[7]);else if(c==="S"){const p=s*2-n,w=r*2-i;f+=Nt(m,g,p,w,x[1],x[2],x[3],x[4])}else c==="C"?f+=Nt(m,g,x[1],x[2],x[3],x[4],x[5],x[6]):c==="T"?(o=s*2-o,l=r*2-l,f+=wt(m,g,o,l,x[1],x[2])):c==="Q"?(o=x[1],l=x[2],f+=wt(m,g,x[1],x[2],x[3],x[4])):c==="Z"&&(f+=at(m,g,a,u));[s,r]=c==="Z"?[a,u]:x.slice(-2),[n,i]=c==="C"?[x[3],x[4]]:c==="S"?[x[1],x[2]]:[s,r]}),f},_t=(e,t)=>{const s=D(e);let r=s.slice(0),n=st(r),i=r.length-1,o=0,l=0,c=s[0];if(i<=0||!t||!Number.isFinite(t))return{segment:c,index:0,length:l,lengthAtSegment:o};if(t>=n)return r=s.slice(0,-1),o=st(r),l=n-o,c=s[i],{segment:c,index:i,length:l,lengthAtSegment:o};const a=[];for(;i>0;)c=r[i],r=r.slice(0,-1),o=st(r),l=n-o,n=o,a.push({segment:c,index:i,length:l,lengthAtSegment:o}),i-=1;return a.find(({lengthAtSegment:u})=>u<=t)},Ct=(e,t)=>{const s=D(e),r=mt(s),n=st(r),i=p=>{const w=p.x-t.x,C=p.y-t.y;return w*w+C*C};let o=8,l,c={x:0,y:0},a=0,u=0,f=1/0;for(let p=0;p<=n;p+=o)l=ft(r,p),a=i(l),a1e-6&&(m=u-o,h=ft(r,m),A=i(h),g=u+o,y=ft(r,g),M=i(y),m>=0&&ACt(e,t).closest,_e=(e,t,s,r,n,i,o,l)=>3*((l-t)*(s+n)-(o-e)*(r+i)+r*(e-n)-s*(t-i)+l*(n+e/3)-o*(i+t/3))/20,ve=e=>{let t=0,s=0,r=0;return bt(e).map(n=>{switch(n[0]){case"M":return[,t,s]=n,0;default:return r=_e(t,s,n[1],n[2],n[3],n[4],n[5],n[6]),[t,s]=n.slice(-2),r}}).reduce((n,i)=>n+i,0)},Ue=e=>ve(bt(e))>=0,$e=e=>{if(!e)return{x:0,y:0,width:0,height:0,x2:0,y2:0,cx:0,cy:0,cz:0};const t=D(e);let s="M",r=0,n=0;const{max:i,min:o}=Math;let l=1/0,c=1/0,a=-1/0,u=-1/0,f=0,h=0,y=0,m=0,g=0,A=0,M=0,N=0,x=0,p=0;O(t,(I,E,q,v)=>{[s]=I;const B=s.toUpperCase(),R=B!==s?ot(I,E,q,v):I.slice(0),L=B==="V"?["L",q,R[1]]:B==="H"?["L",R[1],v]:R;if([s]=L,"TQ".includes(B)||(x=0,p=0),s==="M")[,r,n]=L,f=r,h=n,y=r,m=n;else if(s==="L")[f,h,y,m]=St(q,v,L[1],L[2]);else if(s==="A")[f,h,y,m]=xe(q,v,L[1],L[2],L[3],L[4],L[5],L[6],L[7]);else if(s==="S"){const j=g*2-M,H=A*2-N;[f,h,y,m]=Ht(q,v,j,H,L[1],L[2],L[3],L[4])}else s==="C"?[f,h,y,m]=Ht(q,v,L[1],L[2],L[3],L[4],L[5],L[6]):s==="T"?(x=g*2-x,p=A*2-p,[f,h,y,m]=Ft(q,v,x,p,L[1],L[2])):s==="Q"?(x=L[1],p=L[2],[f,h,y,m]=Ft(q,v,L[1],L[2],L[3],L[4])):s==="Z"&&([f,h,y,m]=St(q,v,r,n));l=o(f,l),c=o(h,c),a=i(y,a),u=i(m,u),[g,A]=s==="Z"?[r,n]:L.slice(-2),[M,N]=s==="C"?[L[3],L[4]]:s==="S"?[L[1],L[2]]:[g,A]});const w=a-l,C=u-c;return{width:w,height:C,x:l,y:c,x2:a,y2:u,cx:l+w/2,cy:c+C/2,cz:Math.max(w,C)+Math.min(w,C)/2}},Je=(e,t)=>_t(e,t).segment,Ke=(e,t)=>Ct(e,t).segment,Tt=e=>Array.isArray(e)&&e.every(t=>{const s=t[0].toLowerCase();return et[s]===t.length-1&&"achlmqstvz".includes(s)&&t.slice(1).every(Number.isFinite)})&&e.length>0,ze=e=>Tt(e)&&e.every(([t])=>t===t.toUpperCase()),Pe=e=>ze(e)&&e.every(([t])=>"ACLMQZ".includes(t)),We=e=>Pe(e)&&e.every(([t])=>"MC".includes(t)),Xe=(e,t)=>{const{distance:s}=Ct(e,t);return Math.abs(s)Tt(e)&&e.slice(1).every(([t])=>t===t.toLowerCase()),qe=e=>{if(typeof e!="string"||!e.length)return!1;const t=new kt(e);for(nt(t);t.indexe!=null&&typeof e=="object"&&e.nodeType===1,Ve=e=>{let{x1:t,y1:s,x2:r,y2:n}=e;return[t,s,r,n]=[t,s,r,n].map(i=>+i),[["M",t,s],["L",r,n]]},Ge=e=>{const t=[],s=(e.points||"").trim().split(/[\s|,]/).map(n=>+n);let r=0;for(;r{let{cx:t,cy:s,r}=e;return[t,s,r]=[t,s,r].map(n=>+n),[["M",t-r,s],["a",r,r,0,1,0,2*r,0],["a",r,r,0,1,0,-2*r,0]]},en=e=>{let{cx:t,cy:s}=e,r=e.rx||0,n=e.ry||r;return[t,s,r,n]=[t,s,r,n].map(i=>+i),[["M",t-r,s],["a",r,n,0,1,0,2*r,0],["a",r,n,0,1,0,-2*r,0]]},nn=e=>{const t=+e.x||0,s=+e.y||0,r=+e.width,n=+e.height;let i=+(e.rx||0),o=+(e.ry||i);return i||o?(i*2>r&&(i-=(i*2-r)/2),o*2>n&&(o-=(o*2-n)/2),[["M",t+i,s],["h",r-i*2],["s",i,0,i,o],["v",n-o*2],["s",0,o,-i,o],["h",-r+i*2],["s",-i,0,-i,-o],["v",-n+o*2],["s",0,-o,i,-o]]):[["M",t,s],["h",r],["v",n],["H",t],["Z"]]},Ie=e=>{const t=Object.keys(ht),s=ke(e),r=s?e.tagName:null;if(r&&[...t,"path"].every(c=>r!==c))throw TypeError(`${Z}: "${r}" is not SVGElement`);const n=s?r:e.type,i=ht[n],o={type:n};s?i.forEach(c=>{o[c]=e.getAttribute(c)}):Object.assign(o,e);let l=[];return n==="circle"?l=tn(o):n==="ellipse"?l=en(o):["polyline","polygon"].includes(n)?l=Ge(o):n==="rect"?l=nn(o):n==="line"?l=Ve(o):["glyph","path"].includes(n)&&(l=D(s?e.getAttribute("d")||"":e.d||"")),Tt(l)&&l.length?l:!1},sn=(e,t,s)=>{const r=s||document,n=Object.keys(ht),i=ke(e),o=i?e.tagName:null;if(o==="path")throw TypeError(`${Z}: "${o}" is already SVGPathElement`);if(o&&n.every(m=>o!==m))throw TypeError(`${Z}: "${o}" is not SVGElement`);const l=r.createElementNS("http://www.w3.org/2000/svg","path"),c=i?o:e.type,a=ht[c],u={type:c},f=Y.round,h=Ie(e),y=h&&h.length?Rt(h,f):"";return i?(a.forEach(m=>{u[m]=e.getAttribute(m)}),Object.values(e.attributes).forEach(({name:m,value:g})=>{a.includes(m)||l.setAttribute(m,g)})):(Object.assign(u,e),Object.keys(u).forEach(m=>{!a.includes(m)&&m!=="type"&&l.setAttribute(m.replace(/[A-Z]/g,g=>`-${g.toLowerCase()}`),u[m])})),qe(y)?(l.setAttribute("d",y),t&&i&&(e.before(l,e),e.remove()),l):!1},Ee=e=>{let t=new T;const{origin:s}=e,[r,n]=s,{translate:i}=e,{rotate:o}=e,{skew:l}=e,{scale:c}=e;return Array.isArray(i)&&i.length>=2&&i.every(a=>!Number.isNaN(+a))&&i.some(a=>a!==0)?t=t.translate(...i):typeof i=="number"&&!Number.isNaN(i)&&(t=t.translate(i)),(o||l||c)&&(t=t.translate(r,n),Array.isArray(o)&&o.length>=2&&o.every(a=>!Number.isNaN(+a))&&o.some(a=>a!==0)?t=t.rotate(...o):typeof o=="number"&&!Number.isNaN(o)&&(t=t.rotate(o)),Array.isArray(l)&&l.length===2&&l.every(a=>!Number.isNaN(+a))&&l.some(a=>a!==0)?(t=l[0]?t.skewX(l[0]):t,t=l[1]?t.skewY(l[1]):t):typeof l=="number"&&!Number.isNaN(l)&&(t=t.skewX(l)),Array.isArray(c)&&c.length>=2&&c.every(a=>!Number.isNaN(+a))&&c.some(a=>a!==1)?t=t.scale(...c):typeof c=="number"&&!Number.isNaN(c)&&(t=t.scale(c)),t=t.translate(-r,-n)),t},Re=(e,t,s,r)=>{const[n]=e,{round:i}=Y,o=typeof i=="number"?i:4,l=t.slice(1),{x1:c,y1:a,x2:u,y2:f,x:h,y}=s,[m,g]=l.slice(-2),A=e;if("TQ".includes(n)||(s.qx=null,s.qy=null),n==="L"){if(P(h,o)===P(m,o))return["V",g];if(P(y,o)===P(g,o))return["H",m]}else if(n==="C"){const[M,N]=l;if(s.x1=M,s.y1=N,"CS".includes(r)&&(P(M,o)===P(c*2-u,o)&&P(N,o)===P(a*2-f,o)||P(c,o)===P(u*2-h,o)&&P(a,o)===P(f*2-y,o)))return["S",l[2],l[3],l[4],l[5]]}else if(n==="Q"){const[M,N]=l;if(s.qx=M,s.qy=N,"QT".includes(r)&&P(M,o)===P(c*2-u,o)&&P(N,o)===P(a*2-f,o))return["T",l[2],l[3]]}return A},vt=(e,t)=>{const s=e.slice(1).map(r=>P(r,t));return[e[0]].concat(s)},je=(e,t)=>{const s=gt(e),r=typeof t=="number"&&t>=0?t:2,n={...lt},i=[];let o="M",l="Z";return O(s,(c,a,u,f)=>{n.x=u,n.y=f;const h=pt(c,n);let y=c;if([o]=c,i[a]=o,a){l=i[a-1];const g=Re(c,h,n,l),A=vt(g,r),M=A.join(""),N=It(g,a,u,f),x=vt(N,r),p=x.join("");y=M.length{let s=T.Translate(t[0],t[1],t[2]);return[,,,s.m44]=t,s=e.multiply(s),[s.m41,s.m42,s.m43,s.m44]},Ut=(e,t,s)=>{const[r,n,i]=s,[o,l,c]=rn(e,[t[0],t[1],0,1]),a=o-r,u=l-n,f=c-i;return[a*(Math.abs(i)/Math.abs(f)||1)+r,u*(Math.abs(i)/Math.abs(f)||1)+n]},on=e=>{const t=e.slice(1).map((s,r,n)=>r?n[r-1].slice(-2).concat(s.slice(1)):e[0].slice(1).concat(s.slice(1))).map(s=>s.map((r,n)=>s[s.length-n-2*(1-n%2)])).reverse();return[["M"].concat(t[0].slice(0,2))].concat(t.map(s=>["C"].concat(s.slice(2))))},$t=e=>{const t=gt(e),s=mt(t),r=t.length,n=t[r-1][0]==="Z",i=O(t,(o,l)=>{const c=s[l],a=l&&t[l-1],u=a&&a[0],f=t[l+1],h=f&&f[0],[y]=o,[m,g]=s[l?l-1:r-1].slice(-2);let A=o;switch(y){case"M":A=n?["Z"]:[y,m,g];break;case"A":A=[y,o[1],o[2],o[3],o[4],o[5]===1?0:1,m,g];break;case"C":f&&h==="S"?A=["S",o[1],o[2],m,g]:A=[y,o[3],o[4],o[1],o[2],m,g];break;case"S":u&&"CS".includes(u)&&(!f||h!=="S")?A=["C",c[3],c[4],c[1],c[2],m,g]:A=[y,c[1],c[2],m,g];break;case"Q":f&&h==="T"?A=["T",m,g]:A=[y,o[1],o[2],m,g];break;case"T":u&&"QT".includes(u)&&(!f||h!=="T")?A=["Q",c[1],c[2],m,g]:A=[y,m,g];break;case"Z":A=["M",m,g];break;case"H":A=[y,m];break;case"V":A=[y,g];break;default:A=[y].concat(o.slice(1,-2),m,g)}return A});return n?i.reverse():[i[0]].concat(i.slice(1).reverse())},cn=(e,t)=>{let{round:s}=Y;return s=t==="off"||typeof t=="number"&&t>=0?t:typeof s=="number"&&s>=0?s:"off",s==="off"?e.slice(0):O(e,r=>vt(r,s))},ln=(e,t=.5)=>{const s=t,r=e.slice(0,2),n=e.slice(2,4),i=e.slice(4,6),o=e.slice(6,8),l=F(r,n,s),c=F(n,i,s),a=F(i,o,s),u=F(l,c,s),f=F(c,a,s),h=F(u,f,s);return[["C",l[0],l[1],u[0],u[1],h[0],h[1]],["C",f[0],f[1],a[0],a[1],o[0],o[1]]]},Se=e=>{const t=[];let s,r=-1,n=0,i=0,o=0,l=0;const c={...lt};return e.forEach(a=>{const[u]=a,f=u.toUpperCase(),h=u.toLowerCase(),y=u===h,m=a.slice(1);f==="M"?(r+=1,[n,i]=m,n+=y?c.x:0,i+=y?c.y:0,o=n,l=i,s=[y?[f,o,l]:a]):(f==="Z"?(n=o,i=l):f==="H"?([,n]=a,n+=y?c.x:0):f==="V"?([,i]=a,i+=y?c.y:0):([n,i]=a.slice(-2),n+=y?c.x:0,i+=y?c.y:0),s.push(a)),c.x=n,c.y=i,t[r]=s}),t},Qe=(e,t)=>{let s=0,r=0,n=0,i=0,o=0,l=0,c="M";const a=D(e),u=t&&Object.keys(t);if(!t||u&&!u.length)return a.slice(0);t.origin||Object.assign(t,{origin:Y.origin});const f=t.origin,h=Ee(t);return h.isIdentity?a.slice(0):O(a,(y,m,g,A)=>{[c]=y;const M=c.toUpperCase(),x=M!==c?ot(y,m,g,A):y.slice(0);let p=M==="A"?["C"].concat(xt(g,A,x[1],x[2],x[3],x[4],x[5],x[6],x[7])):M==="V"?["L",g,x[1]]:M==="H"?["L",x[1],A]:x;c=p[0];const w=c==="C"&&p.length>7,C=w?p.slice(0,7):p.slice(0);if(w&&(a.splice(m+1,0,["C"].concat(p.slice(7))),p=C),c==="L")[n,i]=Ut(h,[p[1],p[2]],f),s!==n&&r!==i?p=["L",n,i]:r===i?p=["H",n]:s===n&&(p=["V",i]);else for(o=1,l=p.length;o"u";if(n||!t.length)throw TypeError(`${Z}: "pathValue" is ${n?"undefined":"empty"}`);this.segments=D(t);const{round:i,origin:o}=r;let l;Number.isInteger(i)||i==="off"?l=i:l=Y.round;let c=Y.origin;if(Array.isArray(o)&&o.length>=2){const[a,u,f]=o.map(Number);c=[Number.isNaN(a)?0:a,Number.isNaN(u)?0:u,Number.isNaN(f)?0:f]}return this.round=l,this.origin=c,this}get bbox(){return $e(this.segments)}get length(){return st(this.segments)}getBBox(){return this.bbox}getTotalLength(){return this.length}getPointAtLength(t){return ft(this.segments,t)}toAbsolute(){const{segments:t}=this;return this.segments=gt(t),this}toRelative(){const{segments:t}=this;return this.segments=fe(t),this}toCurve(){const{segments:t}=this;return this.segments=bt(t),this}reverse(t){const{segments:s}=this,r=Se(s),n=r.length>1?r:!1,i=n?n.map((l,c)=>t?c?$t(l):l.slice(0):$t(l)):s.slice(0);let o=[];return n?o=i.flat(1):o=t?s:$t(s),this.segments=o.slice(0),this}normalize(){const{segments:t}=this;return this.segments=mt(t),this}optimize(){const{segments:t}=this,s=this.round==="off"?2:this.round;return this.segments=je(t,s),this}transform(t){if(!t||typeof t!="object"||typeof t=="object"&&!["translate","rotate","skew","scale"].some(c=>c in t))return this;const{segments:s,origin:[r,n,i]}=this,o={};for(const[c,a]of Object.entries(t))c==="skew"&&Array.isArray(a)||(c==="rotate"||c==="translate"||c==="origin"||c==="scale")&&Array.isArray(a)?o[c]=a.map(Number):c!=="origin"&&typeof Number(a)=="number"&&(o[c]=Number(a));const{origin:l}=o;if(Array.isArray(l)&&l.length>=2){const[c,a,u]=l.map(Number);o.origin=[Number.isNaN(c)?r:c,Number.isNaN(a)?n:a,u||i]}else o.origin=[r,n,i];return this.segments=Qe(s,o),this}flipX(){const{cx:t,cy:s}=this.bbox;return this.transform({rotate:[0,180,0],origin:[t,s,0]}),this}flipY(){const{cx:t,cy:s}=this.bbox;return this.transform({rotate:[180,0,0],origin:[t,s,0]}),this}toString(){return Rt(this.segments,this.round)}dispose(){Object.keys(this).forEach(t=>delete this[t])}}return d(b,"CSSMatrix",T),d(b,"pathToAbsolute",gt),d(b,"pathToRelative",fe),d(b,"pathToCurve",bt),d(b,"pathToString",Rt),d(b,"arcTools",Oe),d(b,"bezierTools",{Cvalues:pe,Tvalues:Ot,minmaxC:Bt,minmaxQ:Mt,getBezierLength:ut,bezierLength:Me,calculateBezier:Ae,computeBezier:de,deriveBezier:be,CBEZIER_MINMAX_EPSILON:Ne}),d(b,"cubicTools",{getCubicLength:Nt,getCubicBBox:Ht,getPointAtCubicLength:Le,getPointAtCubicSegmentLength:we}),d(b,"lineTools",{getPointAtLineLength:jt,getLineBBox:St,getLineLength:at}),d(b,"quadTools",{getPointAtQuadSegmentLength:Ce,getQuadLength:wt,getQuadBBox:Ft,getPointAtQuadLength:Te}),d(b,"polygonTools",{polygonArea:Be,polygonLength:He}),d(b,"distanceSquareRoot",dt),d(b,"distanceEpsilon",Lt),d(b,"midPoint",F),d(b,"rotateVector",ct),d(b,"roundTo",P),d(b,"finalizeSegment",Pt),d(b,"invalidPathValue",W),d(b,"isArcCommand",ue),d(b,"isDigit",K),d(b,"isDigitStart",ae),d(b,"isMoveCommand",me),d(b,"isPathCommand",le),d(b,"isSpace",ce),d(b,"paramsCount",et),d(b,"paramsParser",lt),d(b,"pathParser",kt),d(b,"scanFlag",ie),d(b,"scanParam",oe),d(b,"scanSegment",qt),d(b,"skipSpaces",nt),d(b,"getPathBBox",$e),d(b,"getPathArea",ve),d(b,"getTotalLength",st),d(b,"getDrawDirection",Ue),d(b,"getPointAtLength",ft),d(b,"getPropertiesAtLength",_t),d(b,"getPropertiesAtPoint",Ct),d(b,"getClosestPoint",Fe),d(b,"getSegmentOfPoint",Ke),d(b,"getSegmentAtLength",Je),d(b,"isPointInStroke",Xe),d(b,"isValidPath",qe),d(b,"isPathArray",Tt),d(b,"isAbsoluteArray",ze),d(b,"isRelativeArray",Ye),d(b,"isCurveArray",We),d(b,"isNormalizedArray",Pe),d(b,"shapeToPath",sn),d(b,"shapeToPathArray",Ie),d(b,"shapeParams",ht),d(b,"parsePathString",D),d(b,"absolutizeSegment",ot),d(b,"arcToCubic",xt),d(b,"getSVGMatrix",Ee),d(b,"iterate",O),d(b,"lineToCubic",Et),d(b,"normalizePath",mt),d(b,"normalizeSegment",pt),d(b,"optimizePath",je),d(b,"projection2d",Ut),d(b,"quadToCubic",he),d(b,"relativizeSegment",It),d(b,"reverseCurve",on),d(b,"reversePath",$t),d(b,"roundPath",cn),d(b,"roundSegment",vt),d(b,"segmentToCubic",ye),d(b,"shortenSegment",Re),d(b,"splitCubic",ln),d(b,"splitPath",Se),d(b,"transformPath",Qe),b}(); //# sourceMappingURL=svg-path-commander.js.map diff --git a/dist/svg-path-commander.js.map b/dist/svg-path-commander.js.map index ceba31b..c816b58 100644 --- a/dist/svg-path-commander.js.map +++ b/dist/svg-path-commander.js.map @@ -1 +1 @@ -{"version":3,"file":"svg-path-commander.js","sources":["../node_modules/.pnpm/@thednp+dommatrix@2.0.11/node_modules/@thednp/dommatrix/dist/dommatrix.mjs","../src/options/options.ts","../src/parser/paramsCount.ts","../src/parser/finalizeSegment.ts","../src/parser/error.ts","../src/parser/scanFlag.ts","../src/parser/isDigit.ts","../src/parser/invalidPathValue.ts","../src/parser/scanParam.ts","../src/parser/isSpace.ts","../src/parser/skipSpaces.ts","../src/parser/isPathCommand.ts","../src/parser/isDigitStart.ts","../src/parser/isArcCommand.ts","../src/parser/isMoveCommand.ts","../src/parser/scanSegment.ts","../src/parser/pathParser.ts","../src/parser/parsePathString.ts","../src/process/absolutizeSegment.ts","../src/process/iterate.ts","../src/convert/pathToAbsolute.ts","../src/process/relativizeSegment.ts","../src/convert/pathToRelative.ts","../src/math/rotateVector.ts","../src/process/arcToCubic.ts","../src/process/quadToCubic.ts","../src/math/midPoint.ts","../src/process/lineToCubic.ts","../src/process/segmentToCubic.ts","../src/process/normalizeSegment.ts","../src/parser/paramsParser.ts","../src/convert/pathToCurve.ts","../src/math/roundTo.ts","../src/convert/pathToString.ts","../src/math/distanceSquareRoot.ts","../src/math/lineTools.ts","../src/math/arcTools.ts","../src/math/bezier.ts","../src/math/cubicTools.ts","../src/math/quadTools.ts","../src/math/polygonTools.ts","../src/util/distanceEpsilon.ts","../src/process/normalizePath.ts","../src/util/getPointAtLength.ts","../src/util/getTotalLength.ts","../src/util/getPropertiesAtLength.ts","../src/util/getPropertiesAtPoint.ts","../src/util/getClosestPoint.ts","../src/util/getPathArea.ts","../src/util/getDrawDirection.ts","../src/util/getPathBBox.ts","../src/util/getSegmentAtLength.ts","../src/util/getSegmentOfPoint.ts","../src/util/isPathArray.ts","../src/util/isAbsoluteArray.ts","../src/util/isNormalizedArray.ts","../src/util/isCurveArray.ts","../src/util/isPointInStroke.ts","../src/util/isRelativeArray.ts","../src/util/isValidPath.ts","../src/util/shapeParams.ts","../src/util/isElement.ts","../src/util/shapeToPathArray.ts","../src/util/shapeToPath.ts","../src/process/getSVGMatrix.ts","../src/process/shortenSegment.ts","../src/process/roundSegment.ts","../src/process/optimizePath.ts","../src/process/projection2d.ts","../src/process/reverseCurve.ts","../src/process/reversePath.ts","../src/process/roundPath.ts","../src/process/splitCubic.ts","../src/process/splitPath.ts","../src/process/transformPath.ts","../src/index.ts"],"sourcesContent":["var Z = Object.defineProperty;\nvar z = (s, t, e) => t in s ? Z(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e;\nvar p = (s, t, e) => z(s, typeof t != \"symbol\" ? t + \"\" : t, e);\nconst $ = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: 0,\n f: 0,\n m11: 1,\n m12: 0,\n m13: 0,\n m14: 0,\n m21: 0,\n m22: 1,\n m23: 0,\n m24: 0,\n m31: 0,\n m32: 0,\n m33: 1,\n m34: 0,\n m41: 0,\n m42: 0,\n m43: 0,\n m44: 1,\n is2D: !0,\n isIdentity: !0\n}, E = (s) => (s instanceof Float64Array || s instanceof Float32Array || Array.isArray(s) && s.every((t) => typeof t == \"number\")) && [6, 16].some((t) => s.length === t), P = (s) => s instanceof DOMMatrix || s instanceof y || typeof s == \"object\" && Object.keys($).every((t) => s && t in s), g = (s) => {\n const t = new y(), e = Array.from(s);\n if (!E(e))\n throw TypeError(\n `CSSMatrix: \"${e.join(\",\")}\" must be an array with 6/16 numbers.`\n );\n // istanbul ignore else @preserve\n if (e.length === 16) {\n const [\n n,\n i,\n r,\n a,\n l,\n m,\n h,\n c,\n u,\n f,\n w,\n o,\n d,\n A,\n M,\n b\n ] = e;\n t.m11 = n, t.a = n, t.m21 = l, t.c = l, t.m31 = u, t.m41 = d, t.e = d, t.m12 = i, t.b = i, t.m22 = m, t.d = m, t.m32 = f, t.m42 = A, t.f = A, t.m13 = r, t.m23 = h, t.m33 = w, t.m43 = M, t.m14 = a, t.m24 = c, t.m34 = o, t.m44 = b;\n } else if (e.length === 6) {\n const [n, i, r, a, l, m] = e;\n t.m11 = n, t.a = n, t.m12 = i, t.b = i, t.m21 = r, t.c = r, t.m22 = a, t.d = a, t.m41 = l, t.e = l, t.m42 = m, t.f = m;\n }\n return t;\n}, X = (s) => {\n if (P(s))\n return g([\n s.m11,\n s.m12,\n s.m13,\n s.m14,\n s.m21,\n s.m22,\n s.m23,\n s.m24,\n s.m31,\n s.m32,\n s.m33,\n s.m34,\n s.m41,\n s.m42,\n s.m43,\n s.m44\n ]);\n throw TypeError(\n `CSSMatrix: \"${JSON.stringify(s)}\" is not a DOMMatrix / CSSMatrix / JSON compatible object.`\n );\n}, O = (s) => {\n if (typeof s != \"string\")\n throw TypeError(`CSSMatrix: \"${JSON.stringify(s)}\" is not a string.`);\n const t = String(s).replace(/\\s/g, \"\");\n let e = new y();\n const n = `CSSMatrix: invalid transform string \"${s}\"`;\n return t.split(\")\").filter((i) => i).forEach((i) => {\n const [r, a] = i.split(\"(\");\n if (!a) throw TypeError(n);\n const l = a.split(\",\").map(\n (o) => o.includes(\"rad\") ? parseFloat(o) * (180 / Math.PI) : parseFloat(o)\n ), [m, h, c, u] = l, f = [m, h, c], w = [m, h, c, u];\n if (r === \"perspective\" && m && [h, c].every((o) => o === void 0))\n e.m34 = -1 / m;\n else if (r.includes(\"matrix\") && [6, 16].includes(l.length) && l.every((o) => !Number.isNaN(+o))) {\n const o = l.map((d) => Math.abs(d) < 1e-6 ? 0 : d);\n e = e.multiply(g(o));\n } else if (r === \"translate3d\" && f.every((o) => !Number.isNaN(+o)))\n e = e.translate(m, h, c);\n else if (r === \"translate\" && m && c === void 0)\n e = e.translate(m, h || 0, 0);\n else if (r === \"rotate3d\" && w.every((o) => !Number.isNaN(+o)) && u)\n e = e.rotateAxisAngle(m, h, c, u);\n else if (r === \"rotate\" && m && [h, c].every((o) => o === void 0))\n e = e.rotate(0, 0, m);\n else if (r === \"scale3d\" && f.every((o) => !Number.isNaN(+o)) && f.some((o) => o !== 1))\n e = e.scale(m, h, c);\n else if (\n // prop === \"scale\" && !Number.isNaN(x) && x !== 1 && z === undefined\n // prop === \"scale\" && !Number.isNaN(x) && [x, y].some((n) => n !== 1) &&\n r === \"scale\" && !Number.isNaN(m) && (m !== 1 || h !== 1) && c === void 0\n ) {\n const d = Number.isNaN(+h) ? m : h;\n e = e.scale(m, d, 1);\n } else if (r === \"skew\" && (m || !Number.isNaN(m) && h) && c === void 0)\n e = e.skew(m, h || 0);\n else if ([\"translate\", \"rotate\", \"scale\", \"skew\"].some(\n (o) => r.includes(o)\n ) && /[XYZ]/.test(r) && m && [h, c].every((o) => o === void 0))\n if (r === \"skewX\" || r === \"skewY\")\n e = e[r](m);\n else {\n const o = r.replace(/[XYZ]/, \"\"), d = r.replace(o, \"\"), A = [\"X\", \"Y\", \"Z\"].indexOf(d), M = o === \"scale\" ? 1 : 0, b = [\n A === 0 ? m : M,\n A === 1 ? m : M,\n A === 2 ? m : M\n ];\n e = e[o](...b);\n }\n else\n throw TypeError(n);\n }), e;\n}, x = (s, t) => t ? [s.a, s.b, s.c, s.d, s.e, s.f] : [\n s.m11,\n s.m12,\n s.m13,\n s.m14,\n s.m21,\n s.m22,\n s.m23,\n s.m24,\n s.m31,\n s.m32,\n s.m33,\n s.m34,\n s.m41,\n s.m42,\n s.m43,\n s.m44\n], Y = (s, t, e) => {\n const n = new y();\n return n.m41 = s, n.e = s, n.m42 = t, n.f = t, n.m43 = e, n;\n}, F = (s, t, e) => {\n const n = new y(), i = Math.PI / 180, r = s * i, a = t * i, l = e * i, m = Math.cos(r), h = -Math.sin(r), c = Math.cos(a), u = -Math.sin(a), f = Math.cos(l), w = -Math.sin(l), o = c * f, d = -c * w;\n n.m11 = o, n.a = o, n.m12 = d, n.b = d, n.m13 = u;\n const A = h * u * f + m * w;\n n.m21 = A, n.c = A;\n const M = m * f - h * u * w;\n return n.m22 = M, n.d = M, n.m23 = -h * c, n.m31 = h * w - m * u * f, n.m32 = h * f + m * u * w, n.m33 = m * c, n;\n}, T = (s, t, e, n) => {\n const i = new y(), r = Math.sqrt(s * s + t * t + e * e);\n if (r === 0)\n return i;\n const a = s / r, l = t / r, m = e / r, h = n * (Math.PI / 360), c = Math.sin(h), u = Math.cos(h), f = c * c, w = a * a, o = l * l, d = m * m, A = 1 - 2 * (o + d) * f;\n i.m11 = A, i.a = A;\n const M = 2 * (a * l * f + m * c * u);\n i.m12 = M, i.b = M, i.m13 = 2 * (a * m * f - l * c * u);\n const b = 2 * (l * a * f - m * c * u);\n i.m21 = b, i.c = b;\n const k = 1 - 2 * (d + w) * f;\n return i.m22 = k, i.d = k, i.m23 = 2 * (l * m * f + a * c * u), i.m31 = 2 * (m * a * f + l * c * u), i.m32 = 2 * (m * l * f - a * c * u), i.m33 = 1 - 2 * (w + o) * f, i;\n}, I = (s, t, e) => {\n const n = new y();\n return n.m11 = s, n.a = s, n.m22 = t, n.d = t, n.m33 = e, n;\n}, v = (s, t) => {\n const e = new y();\n if (s) {\n const n = s * Math.PI / 180, i = Math.tan(n);\n e.m21 = i, e.c = i;\n }\n if (t) {\n const n = t * Math.PI / 180, i = Math.tan(n);\n e.m12 = i, e.b = i;\n }\n return e;\n}, R = (s) => v(s, 0), D = (s) => v(0, s), N = (s, t) => {\n const e = t.m11 * s.m11 + t.m12 * s.m21 + t.m13 * s.m31 + t.m14 * s.m41, n = t.m11 * s.m12 + t.m12 * s.m22 + t.m13 * s.m32 + t.m14 * s.m42, i = t.m11 * s.m13 + t.m12 * s.m23 + t.m13 * s.m33 + t.m14 * s.m43, r = t.m11 * s.m14 + t.m12 * s.m24 + t.m13 * s.m34 + t.m14 * s.m44, a = t.m21 * s.m11 + t.m22 * s.m21 + t.m23 * s.m31 + t.m24 * s.m41, l = t.m21 * s.m12 + t.m22 * s.m22 + t.m23 * s.m32 + t.m24 * s.m42, m = t.m21 * s.m13 + t.m22 * s.m23 + t.m23 * s.m33 + t.m24 * s.m43, h = t.m21 * s.m14 + t.m22 * s.m24 + t.m23 * s.m34 + t.m24 * s.m44, c = t.m31 * s.m11 + t.m32 * s.m21 + t.m33 * s.m31 + t.m34 * s.m41, u = t.m31 * s.m12 + t.m32 * s.m22 + t.m33 * s.m32 + t.m34 * s.m42, f = t.m31 * s.m13 + t.m32 * s.m23 + t.m33 * s.m33 + t.m34 * s.m43, w = t.m31 * s.m14 + t.m32 * s.m24 + t.m33 * s.m34 + t.m34 * s.m44, o = t.m41 * s.m11 + t.m42 * s.m21 + t.m43 * s.m31 + t.m44 * s.m41, d = t.m41 * s.m12 + t.m42 * s.m22 + t.m43 * s.m32 + t.m44 * s.m42, A = t.m41 * s.m13 + t.m42 * s.m23 + t.m43 * s.m33 + t.m44 * s.m43, M = t.m41 * s.m14 + t.m42 * s.m24 + t.m43 * s.m34 + t.m44 * s.m44;\n return g([\n e,\n n,\n i,\n r,\n a,\n l,\n m,\n h,\n c,\n u,\n f,\n w,\n o,\n d,\n A,\n M\n ]);\n};\nclass y {\n /**\n * @constructor\n * @param init accepts all parameter configurations:\n * * valid CSS transform string,\n * * CSSMatrix/DOMMatrix instance,\n * * a 6/16 elements *Array*.\n */\n constructor(t) {\n return this.a = 1, this.b = 0, this.c = 0, this.d = 1, this.e = 0, this.f = 0, this.m11 = 1, this.m12 = 0, this.m13 = 0, this.m14 = 0, this.m21 = 0, this.m22 = 1, this.m23 = 0, this.m24 = 0, this.m31 = 0, this.m32 = 0, this.m33 = 1, this.m34 = 0, this.m41 = 0, this.m42 = 0, this.m43 = 0, this.m44 = 1, t ? this.setMatrixValue(t) : this;\n }\n /**\n * A `Boolean` whose value is `true` if the matrix is the identity matrix. The identity\n * matrix is one in which every value is 0 except those on the main diagonal from top-left\n * to bottom-right corner (in other words, where the offsets in each direction are equal).\n *\n * @return the current property value\n */\n get isIdentity() {\n return this.m11 === 1 && this.m12 === 0 && this.m13 === 0 && this.m14 === 0 && this.m21 === 0 && this.m22 === 1 && this.m23 === 0 && this.m24 === 0 && this.m31 === 0 && this.m32 === 0 && this.m33 === 1 && this.m34 === 0 && this.m41 === 0 && this.m42 === 0 && this.m43 === 0 && this.m44 === 1;\n }\n /**\n * A `Boolean` flag whose value is `true` if the matrix was initialized as a 2D matrix\n * and `false` if the matrix is 3D.\n *\n * @return the current property value\n */\n get is2D() {\n return this.m31 === 0 && this.m32 === 0 && this.m33 === 1 && this.m34 === 0 && this.m43 === 0 && this.m44 === 1;\n }\n /**\n * The `setMatrixValue` method replaces the existing matrix with one computed\n * in the browser. EG: `matrix(1,0.25,-0.25,1,0,0)`\n *\n * The method accepts any *Array* values, the result of\n * `DOMMatrix` instance method `toFloat64Array()` / `toFloat32Array()` calls\n * or `CSSMatrix` instance method `toArray()`.\n *\n * This method expects valid *matrix()* / *matrix3d()* string values, as well\n * as other transform functions like *translateX(10px)*.\n *\n * @param source\n * @return the matrix instance\n */\n setMatrixValue(t) {\n return typeof t == \"string\" && t.length && t !== \"none\" ? O(t) : Array.isArray(t) || t instanceof Float64Array || t instanceof Float32Array ? g(t) : typeof t == \"object\" ? X(t) : this;\n }\n /**\n * Returns a *Float32Array* containing elements which comprise the matrix.\n * The method can return either the 16 elements or the 6 elements\n * depending on the value of the `is2D` parameter.\n *\n * @param is2D *Array* representation of the matrix\n * @return an *Array* representation of the matrix\n */\n toFloat32Array(t) {\n return Float32Array.from(x(this, t));\n }\n /**\n * Returns a *Float64Array* containing elements which comprise the matrix.\n * The method can return either the 16 elements or the 6 elements\n * depending on the value of the `is2D` parameter.\n *\n * @param is2D *Array* representation of the matrix\n * @return an *Array* representation of the matrix\n */\n toFloat64Array(t) {\n return Float64Array.from(x(this, t));\n }\n /**\n * Creates and returns a string representation of the matrix in `CSS` matrix syntax,\n * using the appropriate `CSS` matrix notation.\n *\n * matrix3d *matrix3d(m11, m12, m13, m14, m21, ...)*\n * matrix *matrix(a, b, c, d, e, f)*\n *\n * @return a string representation of the matrix\n */\n toString() {\n const { is2D: t } = this, e = this.toFloat64Array(t).join(\", \");\n return `${t ? \"matrix\" : \"matrix3d\"}(${e})`;\n }\n /**\n * Returns a JSON representation of the `CSSMatrix` instance, a standard *Object*\n * that includes `{a,b,c,d,e,f}` and `{m11,m12,m13,..m44}` properties as well\n * as the `is2D` & `isIdentity` properties.\n *\n * The result can also be used as a second parameter for the `fromMatrix` static method\n * to load values into another matrix instance.\n *\n * @return an *Object* with all matrix values.\n */\n toJSON() {\n const { is2D: t, isIdentity: e } = this;\n return { ...this, is2D: t, isIdentity: e };\n }\n /**\n * The Multiply method returns a new CSSMatrix which is the result of this\n * matrix multiplied by the passed matrix, with the passed matrix to the right.\n * This matrix is not modified.\n *\n * @param m2 CSSMatrix\n * @return The resulted matrix.\n */\n multiply(t) {\n return N(this, t);\n }\n /**\n * The translate method returns a new matrix which is this matrix post\n * multiplied by a translation matrix containing the passed values. If the z\n * component is undefined, a 0 value is used in its place. This matrix is not\n * modified.\n *\n * @param x X component of the translation value.\n * @param y Y component of the translation value.\n * @param z Z component of the translation value.\n * @return The resulted matrix\n */\n translate(t, e, n) {\n const i = t;\n let r = e, a = n;\n return typeof r > \"u\" && (r = 0), typeof a > \"u\" && (a = 0), N(this, Y(i, r, a));\n }\n /**\n * The scale method returns a new matrix which is this matrix post multiplied by\n * a scale matrix containing the passed values. If the z component is undefined,\n * a 1 value is used in its place. If the y component is undefined, the x\n * component value is used in its place. This matrix is not modified.\n *\n * @param x The X component of the scale value.\n * @param y The Y component of the scale value.\n * @param z The Z component of the scale value.\n * @return The resulted matrix\n */\n scale(t, e, n) {\n const i = t;\n let r = e, a = n;\n return typeof r > \"u\" && (r = t), typeof a > \"u\" && (a = 1), N(this, I(i, r, a));\n }\n /**\n * The rotate method returns a new matrix which is this matrix post multiplied\n * by each of 3 rotation matrices about the major axes, first X, then Y, then Z.\n * If the y and z components are undefined, the x value is used to rotate the\n * object about the z axis, as though the vector (0,0,x) were passed. All\n * rotation values are in degrees. This matrix is not modified.\n *\n * @param rx The X component of the rotation, or Z if Y and Z are null.\n * @param ry The (optional) Y component of the rotation value.\n * @param rz The (optional) Z component of the rotation value.\n * @return The resulted matrix\n */\n rotate(t, e, n) {\n let i = t, r = e || 0, a = n || 0;\n return typeof t == \"number\" && typeof e > \"u\" && typeof n > \"u\" && (a = i, i = 0, r = 0), N(this, F(i, r, a));\n }\n /**\n * The rotateAxisAngle method returns a new matrix which is this matrix post\n * multiplied by a rotation matrix with the given axis and `angle`. The right-hand\n * rule is used to determine the direction of rotation. All rotation values are\n * in degrees. This matrix is not modified.\n *\n * @param x The X component of the axis vector.\n * @param y The Y component of the axis vector.\n * @param z The Z component of the axis vector.\n * @param angle The angle of rotation about the axis vector, in degrees.\n * @return The resulted matrix\n */\n rotateAxisAngle(t, e, n, i) {\n if ([t, e, n, i].some((r) => Number.isNaN(+r)))\n throw new TypeError(\"CSSMatrix: expecting 4 values\");\n return N(this, T(t, e, n, i));\n }\n /**\n * Specifies a skew transformation along the `x-axis` by the given angle.\n * This matrix is not modified.\n *\n * @param angle The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skewX(t) {\n return N(this, R(t));\n }\n /**\n * Specifies a skew transformation along the `y-axis` by the given angle.\n * This matrix is not modified.\n *\n * @param angle The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skewY(t) {\n return N(this, D(t));\n }\n /**\n * Specifies a skew transformation along both the `x-axis` and `y-axis`.\n * This matrix is not modified.\n *\n * @param angleX The X-angle amount in degrees to skew.\n * @param angleY The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skew(t, e) {\n return N(this, v(t, e));\n }\n /**\n * Transforms a specified vector using the matrix, returning a new\n * {x,y,z,w} Tuple *Object* comprising the transformed vector.\n * Neither the matrix nor the original vector are altered.\n *\n * The method is equivalent with `transformPoint()` method\n * of the `DOMMatrix` constructor.\n *\n * @param t Tuple with `{x,y,z,w}` components\n * @return the resulting Tuple\n */\n transformPoint(t) {\n const e = this.m11 * t.x + this.m21 * t.y + this.m31 * t.z + this.m41 * t.w, n = this.m12 * t.x + this.m22 * t.y + this.m32 * t.z + this.m42 * t.w, i = this.m13 * t.x + this.m23 * t.y + this.m33 * t.z + this.m43 * t.w, r = this.m14 * t.x + this.m24 * t.y + this.m34 * t.z + this.m44 * t.w;\n return t instanceof DOMPoint ? new DOMPoint(e, n, i, r) : {\n x: e,\n y: n,\n z: i,\n w: r\n };\n }\n}\np(y, \"Translate\", Y), p(y, \"Rotate\", F), p(y, \"RotateAxisAngle\", T), p(y, \"Scale\", I), p(y, \"SkewX\", R), p(y, \"SkewY\", D), p(y, \"Skew\", v), p(y, \"Multiply\", N), p(y, \"fromArray\", g), p(y, \"fromMatrix\", X), p(y, \"fromString\", O), p(y, \"toArray\", x), p(y, \"isCompatibleArray\", E), p(y, \"isCompatibleObject\", P);\nexport {\n y as default\n};\n//# sourceMappingURL=dommatrix.mjs.map\n","import { Options } from \"../interface\";\n\n/** SVGPathCommander default options */\nconst defaultOptions: Options = {\n origin: [0, 0, 0],\n round: 4,\n};\n\nexport default defaultOptions;\n","/** Segment params length */\nconst paramsCount = {\n a: 7,\n c: 6,\n h: 1,\n l: 2,\n m: 2,\n r: 4,\n q: 4,\n s: 4,\n t: 2,\n v: 1,\n z: 0,\n};\n\nexport default paramsCount;\n","import paramsCount from \"./paramsCount\";\nimport PathParser from \"./pathParser\";\nimport type { PathCommand, PathSegment, RelativeCommand } from \"../types\";\n\n/**\n * Breaks the parsing of a pathString once a segment is finalized.\n *\n * @param path the `PathParser` instance\n */\nconst finalizeSegment = (path: PathParser) => {\n let pathCommand = path.pathValue[path.segmentStart] as PathCommand;\n let relativeCommand = pathCommand.toLowerCase() as RelativeCommand;\n const { data } = path;\n\n while (data.length >= paramsCount[relativeCommand]) {\n // overloaded `moveTo`\n // https://github.com/rveciana/svg-path-properties/blob/master/src/parse.ts\n if (relativeCommand === \"m\" && data.length > 2) {\n path.segments.push(\n [pathCommand as PathCommand | number].concat(\n data.splice(0, 2) as number[],\n ) as PathSegment,\n );\n relativeCommand = \"l\";\n pathCommand = pathCommand === \"m\" ? \"l\" : \"L\";\n } else {\n path.segments.push(\n [pathCommand as PathCommand | number].concat(\n data.splice(0, paramsCount[relativeCommand]) as number[],\n ) as PathSegment,\n );\n }\n\n if (!paramsCount[relativeCommand]) {\n break;\n }\n }\n};\nexport default finalizeSegment;\n","const error = \"SVGPathCommander Error\";\nexport default error;\n","import error from \"./error\";\nimport type PathParser from \"./pathParser\";\n\n/**\n * Validates an A (arc-to) specific path command value.\n * Usually a `large-arc-flag` or `sweep-flag`.\n *\n * @param path the `PathParser` instance\n */\nconst scanFlag = (path: PathParser) => {\n const { index, pathValue } = path;\n const code = pathValue.charCodeAt(index);\n\n if (code === 0x30 /* 0 */) {\n path.param = 0;\n path.index += 1;\n return;\n }\n\n if (code === 0x31 /* 1 */) {\n path.param = 1;\n path.index += 1;\n return;\n }\n\n path.err = `${error}: invalid Arc flag \"${\n pathValue[index]\n }\", expecting 0 or 1 at index ${index}`;\n};\n\nexport default scanFlag;\n","import { DigitNumber } from \"../types\";\n\n/**\n * Checks if a character is a digit.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isDigit = (code: number): code is DigitNumber => {\n return code >= 48 && code <= 57; // 0..9\n};\nexport default isDigit;\n","const invalidPathValue = \"Invalid path value\";\nexport default invalidPathValue;\n","import isDigit from \"./isDigit\";\nimport invalidPathValue from \"./invalidPathValue\";\nimport error from \"./error\";\nimport type PathParser from \"./pathParser\";\n\n/**\n * Validates every character of the path string,\n * every path command, negative numbers or floating point numbers.\n *\n * @param path the `PathParser` instance\n */\nconst scanParam = (path: PathParser) => {\n const { max, pathValue, index: start } = path;\n let index = start;\n let zeroFirst = false;\n let hasCeiling = false;\n let hasDecimal = false;\n let hasDot = false;\n let ch;\n\n if (index >= max) {\n path.err =\n `${error}: ${invalidPathValue} at index ${index}, \"pathValue\" is missing param`;\n return;\n }\n ch = pathValue.charCodeAt(index);\n\n if (ch === 0x2b /* + */ || ch === 0x2d /* - */) {\n index += 1;\n // ch = (index < max) ? pathValue.charCodeAt(index) : 0;\n ch = pathValue.charCodeAt(index);\n }\n\n // This logic is shamelessly borrowed from Esprima\n // https://github.com/ariya/esprimas\n if (!isDigit(ch) && ch !== 0x2e /* . */) {\n // path.err = 'SvgPath: param should start with 0..9 or `.` (at pos ' + index + ')';\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\n pathValue[index]\n }\" is not a number`;\n return;\n }\n\n if (ch !== 0x2e /* . */) {\n zeroFirst = ch === 0x30 /* 0 */;\n index += 1;\n\n ch = pathValue.charCodeAt(index);\n\n if (zeroFirst && index < max) {\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDigit(ch)) {\n // path.err = 'SvgPath: numbers started with `0` such as `09`\n // are illegal (at pos ' + start + ')';\n path.err = `${error}: ${invalidPathValue} at index ${start}, \"${\n pathValue[start]\n }\" illegal number`;\n return;\n }\n }\n\n while (index < max && isDigit(pathValue.charCodeAt(index))) {\n index += 1;\n hasCeiling = true;\n }\n\n ch = pathValue.charCodeAt(index);\n }\n\n if (ch === 0x2e /* . */) {\n hasDot = true;\n index += 1;\n while (isDigit(pathValue.charCodeAt(index))) {\n index += 1;\n hasDecimal = true;\n }\n\n ch = pathValue.charCodeAt(index);\n }\n\n if (ch === 0x65 /* e */ || ch === 0x45 /* E */) {\n if (hasDot && !hasCeiling && !hasDecimal) {\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\n pathValue[index]\n }\" invalid float exponent`;\n return;\n }\n\n index += 1;\n\n ch = pathValue.charCodeAt(index);\n\n if (ch === 0x2b /* + */ || ch === 0x2d /* - */) {\n index += 1;\n }\n if (index < max && isDigit(pathValue.charCodeAt(index))) {\n while (index < max && isDigit(pathValue.charCodeAt(index))) {\n index += 1;\n }\n } else {\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\n pathValue[index]\n }\" invalid integer exponent`;\n return;\n }\n }\n\n path.index = index;\n path.param = +path.pathValue.slice(start, index);\n};\nexport default scanParam;\n","import type { SpaceNumber } from \"../types\";\n\n/**\n * Checks if the character is a space.\n *\n * @param ch the character to check\n * @returns check result\n */\n\nconst isSpace = (ch: number): ch is SpaceNumber => {\n const allSpaces = [\n // Special spaces\n 0x1680,\n 0x180e,\n 0x2000,\n 0x2001,\n 0x2002,\n 0x2003,\n 0x2004,\n 0x2005,\n 0x2006,\n 0x2007,\n 0x2008,\n 0x2009,\n 0x200a,\n 0x202f,\n 0x205f,\n 0x3000,\n 0xfeff,\n // Line terminators\n 0x0a,\n 0x0d,\n 0x2028,\n 0x2029,\n // White spaces\n 0x20,\n 0x09,\n 0x0b,\n 0x0c,\n 0xa0,\n ];\n\n return allSpaces.includes(ch);\n};\nexport default isSpace;\n","import isSpace from \"./isSpace\";\nimport type PathParser from \"./pathParser\";\n\n/**\n * Points the parser to the next character in the\n * path string every time it encounters any kind of\n * space character.\n *\n * @param path the `PathParser` instance\n */\nconst skipSpaces = (path: PathParser) => {\n const { pathValue, max } = path;\n while (path.index < max && isSpace(pathValue.charCodeAt(path.index))) {\n path.index += 1;\n }\n};\nexport default skipSpaces;\n","import type { PathCommandNumber } from \"../types\";\n\n/**\n * Checks if the character is a path command.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isPathCommand = (code: number): code is PathCommandNumber => {\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\n switch (code | 0x20) {\n case 0x6d /* m */:\n case 0x7a /* z */:\n case 0x6c /* l */:\n case 0x68 /* h */:\n case 0x76 /* v */:\n case 0x63 /* c */:\n case 0x73 /* s */:\n case 0x71 /* q */:\n case 0x74 /* t */:\n case 0x61 /* a */:\n // case 0x72/* r */:\n return true;\n default:\n return false;\n }\n};\nexport default isPathCommand;\n","import isDigit from \"./isDigit\";\nimport type { DigitNumber } from \"../types\";\n\n/**\n * Checks if the character is or belongs to a number.\n * [0-9]|+|-|.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isDigitStart = (\n code: number,\n): code is DigitNumber | 0x2b | 0x2d | 0x2e => {\n return isDigit(code) /* 0..9 */ || code === 0x2b /* + */ ||\n code === 0x2d /* - */ || code === 0x2e; /* . */\n};\nexport default isDigitStart;\n","/**\n * Checks if the character is an A (arc-to) path command.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isArcCommand = (code: number): code is 0x61 => {\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\n return (code | 0x20) === 0x61;\n};\nexport default isArcCommand;\n","/**\n * Checks if the character is a MoveTo command.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isMoveCommand = (code: number): code is 0x6d | 0x4d => {\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\n switch (code | 0x20) {\n case 0x6d /* m */:\n case 0x4d /* M */:\n return true;\n default:\n return false;\n }\n};\nexport default isMoveCommand;\n","import finalizeSegment from \"./finalizeSegment\";\nimport paramCounts from \"./paramsCount\";\nimport scanFlag from \"./scanFlag\";\nimport scanParam from \"./scanParam\";\nimport skipSpaces from \"./skipSpaces\";\nimport isPathCommand from \"./isPathCommand\";\nimport isDigitStart from \"./isDigitStart\";\nimport isArcCommand from \"./isArcCommand\";\nimport isMoveCommand from \"./isMoveCommand\";\nimport invalidPathValue from \"./invalidPathValue\";\nimport error from \"./error\";\n\nimport type PathParser from \"./pathParser\";\nimport type { PathSegment, RelativeCommand } from \"../types\";\n\n/**\n * Scans every character in the path string to determine\n * where a segment starts and where it ends.\n *\n * @param path the `PathParser` instance\n */\nconst scanSegment = (path: PathParser) => {\n const { max, pathValue, index, segments } = path;\n const cmdCode = pathValue.charCodeAt(index);\n const reqParams =\n paramCounts[pathValue[index].toLowerCase() as RelativeCommand];\n\n path.segmentStart = index;\n\n // segments always start with a path command\n if (!isPathCommand(cmdCode)) {\n path.err = `${error}: ${invalidPathValue} \"${\n pathValue[index]\n }\" is not a path command at index ${index}`;\n return;\n }\n\n // after a Z segment, we only expect a MoveTo path command\n const lastSegment = segments[segments.length - 1] as PathSegment | undefined;\n if (\n !isMoveCommand(cmdCode) && lastSegment?.[0]?.toLocaleLowerCase() === \"z\"\n ) {\n path.err = `${error}: ${invalidPathValue} \"${\n pathValue[index]\n }\" is not a MoveTo path command at index ${index}`;\n return;\n }\n\n path.index += 1;\n skipSpaces(path);\n\n path.data = [];\n\n if (!reqParams) {\n // Z\n finalizeSegment(path);\n return;\n }\n\n for (;;) {\n for (let i = reqParams; i > 0; i -= 1) {\n if (isArcCommand(cmdCode) && (i === 3 || i === 4)) scanFlag(path);\n else scanParam(path);\n\n if (path.err.length) {\n return;\n }\n path.data.push(path.param);\n\n skipSpaces(path);\n\n // after ',' param is mandatory\n if (\n path.index < max && pathValue.charCodeAt(path.index) === 0x2c /* , */\n ) {\n path.index += 1;\n skipSpaces(path);\n }\n }\n\n if (path.index >= path.max) {\n break;\n }\n\n // Stop on next segment\n if (!isDigitStart(pathValue.charCodeAt(path.index))) {\n break;\n }\n }\n\n finalizeSegment(path);\n};\nexport default scanSegment;\n","import type { PathArray, PathSegment } from \"../types\";\n\n/**\n * The `PathParser` is used by the `parsePathString` static method\n * to generate a `pathArray`.\n *\n * @param pathString\n */\nexport default class PathParser {\n declare segments: PathArray | PathSegment[];\n declare pathValue: string;\n declare max: number;\n declare index: number;\n declare param: number;\n declare segmentStart: number;\n declare data: (string | number)[];\n declare err: string;\n\n constructor(pathString: string) {\n this.segments = [];\n this.pathValue = pathString;\n this.max = pathString.length;\n this.index = 0;\n this.param = 0.0;\n this.segmentStart = 0;\n this.data = [];\n this.err = \"\";\n }\n}\n","import scanSegment from \"./scanSegment\";\nimport skipSpaces from \"./skipSpaces\";\nimport PathParser from \"./pathParser\";\nimport type { PathArray } from \"../types\";\n\n/**\n * Parses a path string value and returns an array\n * of segments we like to call `pathArray`.\n *\n * @param pathInput the string to be parsed\n * @returns the resulted `pathArray` or error string\n */\nconst parsePathString = (pathInput: string | T) => {\n if (typeof pathInput !== \"string\") {\n return pathInput.slice(0) as typeof pathInput;\n }\n\n const path = new PathParser(pathInput);\n\n skipSpaces(path);\n\n while (path.index < path.max && !path.err.length) {\n scanSegment(path);\n }\n\n if (path?.err.length) {\n throw TypeError(path.err);\n }\n\n return path.segments as PathArray;\n};\n\nexport default parsePathString;\n","import type {\n AbsoluteCommand,\n AbsoluteSegment,\n ASegment,\n CSegment,\n HSegment,\n LSegment,\n MSegment,\n PathSegment,\n QSegment,\n SSegment,\n TSegment,\n VSegment,\n} from \"../types\";\n\n/**\n * Returns an absolute segment of a `PathArray` object.\n *\n * @param segment the segment object\n * @param index the segment index\n * @param lastX the last known X value\n * @param lastY the last known Y value\n * @returns the absolute segment\n */\nconst absolutizeSegment = (\n segment: PathSegment,\n index: number,\n lastX: number,\n lastY: number,\n) => {\n const [pathCommand] = segment;\n const absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\n const isAbsolute = absCommand === pathCommand;\n\n /* istanbul ignore else @preserve */\n if (index === 0 || isAbsolute) return segment as MSegment | AbsoluteSegment;\n // const values = segment.slice(1) as number[];\n if (absCommand === \"A\") {\n return [\n absCommand,\n segment[1],\n segment[2],\n segment[3],\n segment[4],\n segment[5],\n (segment as ASegment)[6] + lastX,\n (segment as ASegment)[7] + lastY,\n ] as ASegment;\n } else if (absCommand === \"V\") {\n return [absCommand, (segment as VSegment)[1] + lastY] as VSegment;\n } else if (absCommand === \"H\") {\n return [absCommand, (segment as HSegment)[1] + lastX] as HSegment;\n } else if (absCommand === \"L\") {\n return [\n absCommand,\n (segment as LSegment)[1] + lastX,\n (segment as LSegment)[2] + lastY,\n ] as LSegment;\n } else {\n // use brakets for `eslint: no-case-declaration`\n // https://stackoverflow.com/a/50753272/803358\n const absValues = [] as number[];\n const seglen = segment.length;\n for (let j = 1; j < seglen; j += 1) {\n absValues.push((segment[j] as number) + (j % 2 ? lastX : lastY));\n }\n // for c, s, q, t\n return [absCommand as typeof absCommand | number].concat(absValues) as\n | MSegment\n | QSegment\n | TSegment\n | SSegment\n | CSegment;\n }\n};\nexport default absolutizeSegment;\n","// import paramsParser from '../parser/paramsParser';\nimport type {\n AbsoluteCommand,\n IteratorCallback,\n PathArray,\n PathCommand,\n PathSegment,\n} from \"../types\";\n\nconst iterate = (\n path: PathArray,\n iterator: IteratorCallback,\n) => {\n let pathLen = path.length;\n let segment: PathSegment;\n let pathCommand = \"M\" as PathCommand;\n let absCommand = \"M\" as AbsoluteCommand;\n let isRelative = false;\n let x = 0;\n let y = 0;\n let mx = 0;\n let my = 0;\n let segLen = 0;\n\n for (let i = 0; i < pathLen; i += 1) {\n segment = path[i];\n [pathCommand] = segment;\n segLen = segment.length;\n absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\n isRelative = absCommand !== pathCommand;\n\n const iteratorResult = iterator(segment, i, x, y);\n // some methods like getPointAtLength would like to break\n // when task is complete\n if (iteratorResult === false) {\n break;\n }\n\n // segment = path[i];\n if (absCommand === \"Z\") {\n x = mx;\n y = my;\n } else if (absCommand === \"H\") {\n x = (segment[1] as number) + (isRelative ? x : 0);\n } else if (absCommand === \"V\") {\n y = (segment[1] as number) + (isRelative ? y : 0);\n } else {\n x = (segment[segLen - 2] as number) + (isRelative ? x : 0);\n y = (segment[segLen - 1] as number) + (isRelative ? y : 0);\n\n if (absCommand === \"M\") {\n mx = x;\n my = y;\n }\n }\n\n if (iteratorResult) {\n path[i] = iteratorResult;\n if (iteratorResult[0] === \"C\") {\n pathLen = path.length;\n }\n }\n }\n return path as T;\n};\n\nexport default iterate;\n","import parsePathString from \"../parser/parsePathString\";\nimport absolutizeSegment from \"../process/absolutizeSegment\";\nimport type { AbsoluteArray, PathArray } from \"../types\";\nimport iterate from \"../process/iterate\";\n\n/**\n * Parses a path string value or object and returns an array\n * of segments, all converted to absolute values.\n *\n * @param pathInput the path string | object\n * @returns the resulted `pathArray` with absolute values\n */\nconst pathToAbsolute = (pathInput: string | PathArray) => {\n const path = parsePathString(pathInput);\n\n return iterate(path, absolutizeSegment);\n};\nexport default pathToAbsolute;\n","import type {\n aSegment,\n cSegment,\n hSegment,\n lSegment,\n MSegment,\n PathSegment,\n qSegment,\n RelativeCommand,\n RelativeSegment,\n sSegment,\n tSegment,\n vSegment,\n} from \"../types\";\n\n/**\n * Returns a relative segment of a `PathArray` object.\n *\n * @param segment the segment object\n * @param index the segment index\n * @param lastX the last known X value\n * @param lastY the last known Y value\n * @returns the relative segment\n */\nconst relativizeSegment = (\n segment: PathSegment,\n index: number,\n lastX: number,\n lastY: number,\n) => {\n const [pathCommand] = segment;\n const relCommand = pathCommand.toLowerCase() as RelativeCommand;\n const isRelative = pathCommand === relCommand;\n\n /* istanbul ignore else @preserve */\n if (index === 0 || isRelative) return segment as MSegment | RelativeSegment;\n\n if (relCommand === \"a\") {\n return [\n relCommand,\n segment[1],\n segment[2],\n segment[3],\n segment[4],\n segment[5],\n (segment as aSegment)[6] - lastX,\n (segment as aSegment)[7] - lastY,\n ] as aSegment;\n } else if (relCommand === \"v\") {\n return [relCommand, (segment as vSegment)[1] - lastY] as vSegment;\n } else if (relCommand === \"h\") {\n return [relCommand, (segment as hSegment)[1] - lastX] as hSegment;\n } else if (relCommand === \"l\") {\n return [\n relCommand,\n (segment as lSegment)[1] - lastX,\n (segment as lSegment)[2] - lastY,\n ] as lSegment;\n } else {\n // use brakets for `eslint: no-case-declaration`\n // https://stackoverflow.com/a/50753272/803358\n const relValues = [] as number[];\n const seglen = segment.length;\n for (let j = 1; j < seglen; j += 1) {\n relValues.push((segment[j] as number) - (j % 2 ? lastX : lastY));\n }\n // for c, s, q, t\n return [relCommand as RelativeCommand | number].concat(relValues) as\n | qSegment\n | tSegment\n | sSegment\n | cSegment;\n }\n};\n\nexport default relativizeSegment;\n","import type { PathArray, RelativeArray } from \"../types\";\nimport parsePathString from \"../parser/parsePathString\";\nimport iterate from \"../process/iterate\";\nimport relativizeSegment from \"../process/relativizeSegment\";\n\n/**\n * Parses a path string value or object and returns an array\n * of segments, all converted to relative values.\n *\n * @param pathInput the path string | object\n * @returns the resulted `pathArray` with relative values\n */\nconst pathToRelative = (pathInput: string | PathArray): RelativeArray => {\n const path = parsePathString(pathInput);\n\n return iterate(path, relativizeSegment);\n};\nexport default pathToRelative;\n","/**\n * Returns an {x,y} vector rotated by a given\n * angle in radian.\n *\n * @param x the initial vector x\n * @param y the initial vector y\n * @param rad the radian vector angle\n * @returns the rotated vector\n */\nconst rotateVector = (\n x: number,\n y: number,\n rad: number,\n): { x: number; y: number } => {\n const { sin, cos } = Math;\n const X = x * cos(rad) - y * sin(rad);\n const Y = x * sin(rad) + y * cos(rad);\n return { x: X, y: Y };\n};\n\nexport default rotateVector;\n","import rotateVector from \"../math/rotateVector\";\n\n/**\n * Converts A (arc-to) segments to C (cubic-bezier-to).\n *\n * For more information of where this math came from visit:\n * http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n *\n * @param X1 the starting x position\n * @param Y1 the starting y position\n * @param RX x-radius of the arc\n * @param RY y-radius of the arc\n * @param angle x-axis-rotation of the arc\n * @param LAF large-arc-flag of the arc\n * @param SF sweep-flag of the arc\n * @param X2 the ending x position\n * @param Y2 the ending y position\n * @param recursive the parameters needed to split arc into 2 segments\n * @return the resulting cubic-bezier segment(s)\n */\nconst arcToCubic = (\n X1: number,\n Y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n X2: number,\n Y2: number,\n recursive?: [number, number, number, number],\n): number[] => {\n let x1 = X1;\n let y1 = Y1;\n let rx = RX;\n let ry = RY;\n let x2 = X2;\n let y2 = Y2;\n // for more information of where this Math came from visit:\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n const d120 = (Math.PI * 120) / 180;\n\n const rad = (Math.PI / 180) * (+angle || 0);\n let res = [] as number[];\n let xy;\n let f1;\n let f2;\n let cx;\n let cy;\n\n if (!recursive) {\n xy = rotateVector(x1, y1, -rad);\n x1 = xy.x;\n y1 = xy.y;\n xy = rotateVector(x2, y2, -rad);\n x2 = xy.x;\n y2 = xy.y;\n\n const x = (x1 - x2) / 2;\n const y = (y1 - y2) / 2;\n let h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n if (h > 1) {\n h = Math.sqrt(h);\n rx *= h;\n ry *= h;\n }\n const rx2 = rx * rx;\n const ry2 = ry * ry;\n\n const k = (LAF === SF ? -1 : 1) *\n Math.sqrt(\n Math.abs(\n (rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x),\n ),\n );\n\n cx = (k * rx * y) / ry + (x1 + x2) / 2;\n cy = (k * -ry * x) / rx + (y1 + y2) / 2;\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\n f1 = Math.asin(((((y1 - cy) / ry) * 10 ** 9) >> 0) / 10 ** 9);\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\n f2 = Math.asin(((((y2 - cy) / ry) * 10 ** 9) >> 0) / 10 ** 9);\n\n f1 = x1 < cx ? Math.PI - f1 : f1;\n f2 = x2 < cx ? Math.PI - f2 : f2;\n if (f1 < 0) f1 = Math.PI * 2 + f1;\n if (f2 < 0) f2 = Math.PI * 2 + f2;\n if (SF && f1 > f2) {\n f1 -= Math.PI * 2;\n }\n if (!SF && f2 > f1) {\n f2 -= Math.PI * 2;\n }\n } else {\n [f1, f2, cx, cy] = recursive;\n }\n let df = f2 - f1;\n if (Math.abs(df) > d120) {\n const f2old = f2;\n const x2old = x2;\n const y2old = y2;\n f2 = f1 + d120 * (SF && f2 > f1 ? 1 : -1);\n x2 = cx + rx * Math.cos(f2);\n y2 = cy + ry * Math.sin(f2);\n res = arcToCubic(x2, y2, rx, ry, angle, 0, SF, x2old, y2old, [\n f2,\n f2old,\n cx,\n cy,\n ]);\n }\n df = f2 - f1;\n const c1 = Math.cos(f1);\n const s1 = Math.sin(f1);\n const c2 = Math.cos(f2);\n const s2 = Math.sin(f2);\n const t = Math.tan(df / 4);\n const hx = (4 / 3) * rx * t;\n const hy = (4 / 3) * ry * t;\n const m1 = [x1, y1];\n const m2 = [x1 + hx * s1, y1 - hy * c1];\n const m3 = [x2 + hx * s2, y2 - hy * c2];\n const m4 = [x2, y2];\n m2[0] = 2 * m1[0] - m2[0];\n m2[1] = 2 * m1[1] - m2[1];\n if (recursive) {\n return [m2[0], m2[1], m3[0], m3[1], m4[0], m4[1]].concat(res);\n }\n res = [m2[0], m2[1], m3[0], m3[1], m4[0], m4[1]].concat(res);\n const newres = [];\n for (let i = 0, ii = res.length; i < ii; i += 1) {\n newres[i] = i % 2\n ? rotateVector(res[i - 1], res[i], rad).y\n : rotateVector(res[i], res[i + 1], rad).x;\n }\n return newres;\n};\nexport default arcToCubic;\n","/**\n * Converts a Q (quadratic-bezier) segment to C (cubic-bezier).\n *\n * @param x1 curve start x\n * @param y1 curve start y\n * @param qx control point x\n * @param qy control point y\n * @param x2 curve end x\n * @param y2 curve end y\n * @returns the cubic-bezier segment\n */\nconst quadToCubic = (\n x1: number,\n y1: number,\n qx: number,\n qy: number,\n x2: number,\n y2: number,\n): [number, number, number, number, number, number] => {\n const r13 = 1 / 3;\n const r23 = 2 / 3;\n return [\n r13 * x1 + r23 * qx, // cpx1\n r13 * y1 + r23 * qy, // cpy1\n r13 * x2 + r23 * qx, // cpx2\n r13 * y2 + r23 * qy, // cpy2\n x2,\n y2, // x,y\n ];\n};\nexport default quadToCubic;\n","import { PointTuple } from \"../types\";\n\n/**\n * Returns the coordinates of a specified distance\n * ratio between two points.\n *\n * @param a the first point coordinates\n * @param b the second point coordinates\n * @param t the ratio\n * @returns the midpoint coordinates\n */\nconst midPoint = (a: PointTuple, b: PointTuple, t: number): PointTuple => {\n const [ax, ay] = a;\n const [bx, by] = b;\n return [ax + (bx - ax) * t, ay + (by - ay) * t];\n};\n\nexport default midPoint;\n","import midPoint from \"../math/midPoint\";\n\n/**\n * Converts an L (line-to) segment to C (cubic-bezier).\n *\n * @param x1 line start x\n * @param y1 line start y\n * @param x2 line end x\n * @param y2 line end y\n * @returns the cubic-bezier segment\n */\nconst lineToCubic = (x1: number, y1: number, x2: number, y2: number) => {\n const c1 = midPoint([x1, y1], [x2, y2], 1.0 / 3.0);\n const c2 = midPoint([x1, y1], [x2, y2], 2.0 / 3.0);\n return [c1[0], c1[1], c2[0], c2[1], x2, y2];\n};\nexport default lineToCubic;\n","import arcToCubic from \"./arcToCubic\";\nimport quadToCubic from \"./quadToCubic\";\nimport lineToCubic from \"./lineToCubic\";\nimport type { CSegment, MSegment, PathSegment } from \"../types\";\nimport type { ParserParams } from \"../interface\";\n\n/**\n * Converts any segment to C (cubic-bezier).\n *\n * @param segment the source segment\n * @param params the source segment parameters\n * @returns the cubic-bezier segment\n */\nconst segmentToCubic = (segment: PathSegment, params: ParserParams) => {\n const [pathCommand] = segment;\n const values = segment.slice(1).map(Number);\n const [x, y] = values;\n // let args;\n const { x1: px1, y1: py1, x: px, y: py } = params;\n\n if (!\"TQ\".includes(pathCommand)) {\n params.qx = null;\n params.qy = null;\n }\n\n if (pathCommand === \"M\") {\n params.x = x;\n params.y = y;\n return segment;\n } else if (pathCommand === \"A\") {\n return [\"C\" as string | number].concat(\n arcToCubic(\n px1,\n py1,\n values[0],\n values[1],\n values[2],\n values[3],\n values[4],\n values[5],\n values[6],\n ),\n ) as CSegment;\n } else if (pathCommand === \"Q\") {\n params.qx = x;\n params.qy = y;\n return [\"C\" as string | number].concat(\n quadToCubic(px1, py1, values[0], values[1], values[2], values[3]),\n ) as CSegment;\n } else if (pathCommand === \"L\") {\n return [\"C\" as string | number].concat(\n lineToCubic(px1, py1, x, y),\n ) as CSegment;\n } else if (pathCommand === \"Z\") {\n return [\"C\" as string | number].concat(\n lineToCubic(px1, py1, px, py),\n ) as CSegment;\n }\n\n return segment as MSegment | CSegment;\n};\nexport default segmentToCubic;\n","import type { ParserParams } from \"../interface\";\nimport type {\n ASegment,\n CSegment,\n HSegment,\n LSegment,\n MSegment,\n NormalSegment,\n PathCommand,\n PathSegment,\n PointTuple,\n QSegment,\n VSegment,\n} from \"../types\";\n\n/**\n * Normalizes a single segment of a `pathArray` object.\n *\n * @param segment the segment object\n * @param params the normalization parameters\n * @returns the normalized segment\n */\nconst normalizeSegment = (segment: PathSegment, params: ParserParams) => {\n const [pathCommand] = segment;\n const absCommand = pathCommand.toUpperCase();\n const isRelative = pathCommand !== absCommand;\n const { x1: px1, y1: py1, x2: px2, y2: py2, x, y } = params;\n const values = segment.slice(1) as number[];\n let absValues = values.map((n, j) => n + (isRelative ? (j % 2 ? y : x) : 0));\n\n if (!\"TQ\".includes(absCommand)) {\n // optional but good to be cautious\n params.qx = null;\n params.qy = null;\n }\n\n // istanbul ignore else @preserve\n if (absCommand === \"A\") {\n absValues = values.slice(0, -2).concat(\n values[5] + (isRelative ? x : 0),\n values[6] + (isRelative ? y : 0),\n );\n\n return [\"A\" as PathCommand | number].concat(absValues) as ASegment;\n } else if (absCommand === \"H\") {\n return [\n \"L\",\n (segment as HSegment)[1] + (isRelative ? x : 0),\n py1,\n ] as LSegment;\n } else if (absCommand === \"V\") {\n return [\n \"L\",\n px1,\n (segment as VSegment)[1] + (isRelative ? y : 0),\n ] as LSegment;\n } else if (absCommand === \"L\") {\n return [\n \"L\",\n (segment as LSegment)[1] + (isRelative ? x : 0),\n (segment as LSegment)[2] + (isRelative ? y : 0),\n ] as LSegment;\n } else if (absCommand === \"M\") {\n return [\n \"M\",\n (segment as MSegment)[1] + (isRelative ? x : 0),\n (segment as MSegment)[2] + (isRelative ? y : 0),\n ] as MSegment;\n } else if (absCommand === \"C\") {\n return [\"C\" as PathCommand | number].concat(absValues) as CSegment;\n } else if (absCommand === \"S\") {\n const x1 = px1 * 2 - px2;\n const y1 = py1 * 2 - py2;\n params.x1 = x1;\n params.y1 = y1;\n return [\"C\", x1, y1].concat(absValues) as CSegment;\n } else if (absCommand === \"T\") {\n const qx = px1 * 2 - (params.qx ? params.qx : /* istanbul ignore next */ 0);\n const qy = py1 * 2 - (params.qy ? params.qy : /* istanbul ignore next */ 0);\n params.qx = qx;\n params.qy = qy;\n return [\"Q\", qx, qy].concat(absValues) as QSegment;\n } else if (absCommand === \"Q\") {\n const [nqx, nqy] = absValues as PointTuple;\n params.qx = nqx;\n params.qy = nqy;\n return [\"Q\" as PathCommand | number].concat(absValues) as QSegment;\n } else if (absCommand === \"Z\") {\n return [\"Z\"] as NormalSegment;\n }\n\n // istanbul ignore next @preserve\n return segment as NormalSegment;\n};\nexport default normalizeSegment;\n","import type { ParserParams } from \"../interface\";\n\nconst paramsParser: ParserParams = {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n x: 0,\n y: 0,\n qx: null,\n qy: null,\n};\n\nexport default paramsParser;\n","import segmentToCubic from \"../process/segmentToCubic\";\nimport { AbsoluteCommand, CSegment, CurveArray, PathArray } from \"../types\";\nimport iterate from \"../process/iterate\";\nimport parsePathString from \"../parser/parsePathString\";\nimport normalizeSegment from \"../process/normalizeSegment\";\nimport paramsParser from \"../parser/paramsParser\";\n\n/**\n * Parses a path string value or 'pathArray' and returns a new one\n * in which all segments are converted to cubic-bezier.\n *\n * In addition, un-necessary `Z` segment is removed if previous segment\n * extends to the `M` segment.\n *\n * @param pathInput the string to be parsed or 'pathArray'\n * @returns the resulted `pathArray` converted to cubic-bezier\n */\nconst pathToCurve = (pathInput: string | PathArray): CurveArray => {\n const params = { ...paramsParser };\n const path = parsePathString(pathInput);\n\n return iterate(path, (seg, index, lastX, lastY) => {\n params.x = lastX;\n params.y = lastY;\n const normalSegment = normalizeSegment(seg, params);\n let result = segmentToCubic(normalSegment, params);\n const isLongArc = result[0] === \"C\" && result.length > 7;\n\n if (isLongArc) {\n path.splice(\n index + 1,\n 0,\n [\"C\" as AbsoluteCommand | number].concat(result.slice(7)) as CSegment,\n );\n result = result.slice(0, 7) as CSegment;\n }\n\n const seglen = result.length;\n params.x1 = +result[seglen - 2];\n params.y1 = +result[seglen - 1];\n params.x2 = +result[seglen - 4] || params.x1;\n params.y2 = +result[seglen - 3] || params.y1;\n\n return result;\n });\n};\nexport default pathToCurve;\n","const roundTo = (n: number, round: number) => {\n const pow = round >= 1 ? 10 ** round : 1;\n\n return round > 0 ? Math.round(n * pow) / pow : Math.round(n);\n};\n\nexport default roundTo;\n","import type { PathArray, PathSegment } from \"../types\";\nimport defaultOptions from \"../options/options\";\nimport roundTo from \"../math/roundTo\";\n\n/**\n * Returns a valid `d` attribute string value created\n * by rounding values and concatenating the `pathArray` segments.\n *\n * @param path the `pathArray` object\n * @param roundOption amount of decimals to round values to\n * @returns the concatenated path string\n */\nconst pathToString = (\n path: PathArray,\n roundOption?: number | \"off\",\n): string => {\n const pathLen = path.length;\n let { round } = defaultOptions;\n let segment = path[0] as PathSegment;\n let result = \"\";\n\n // allow for ZERO decimals\n round = roundOption === \"off\"\n ? roundOption\n : typeof roundOption === \"number\" && roundOption >= 0\n ? roundOption\n : typeof round === \"number\" && round >= 0\n ? round\n : /* istanbul ignore next @preserve */ \"off\";\n\n for (let i = 0; i < pathLen; i += 1) {\n segment = path[i];\n const [pathCommand] = segment;\n const values = segment.slice(1) as number[];\n result += pathCommand;\n if (round === \"off\") {\n result += values.join(\" \");\n } else {\n let j = 0;\n const valLen = values.length;\n while (j < valLen) {\n result += roundTo(values[j], round);\n if (j !== valLen - 1) result += \" \";\n j += 1;\n }\n }\n }\n\n return result;\n};\n\nexport default pathToString;\n","import { type PointTuple } from \"../types\";\n\n/**\n * Returns the square root of the distance\n * between two given points.\n *\n * @param a the first point coordinates\n * @param b the second point coordinates\n * @returns the distance value\n */\nconst distanceSquareRoot = (a: PointTuple, b: PointTuple) => {\n return Math.sqrt(\n (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]),\n );\n};\n\nexport default distanceSquareRoot;\n","import midPoint from \"./midPoint\";\nimport distanceSquareRoot from \"./distanceSquareRoot\";\n\n/**\n * Returns length for line segments (MoveTo, LineTo).\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the line segment length\n */\nconst getLineLength = (x1: number, y1: number, x2: number, y2: number) => {\n return distanceSquareRoot([x1, y1], [x2, y2]);\n};\n\n/**\n * Returns a point along the line segments (MoveTo, LineTo).\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance the distance to point in [0-1] range\n * @returns the point at length\n */\nconst getPointAtLineLength = (\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n distance?: number,\n) => {\n let point = { x: x1, y: y1 };\n\n /* istanbul ignore else @preserve */\n if (typeof distance === \"number\") {\n const length = distanceSquareRoot([x1, y1], [x2, y2]);\n if (distance <= 0) {\n point = { x: x1, y: y1 };\n } else if (distance >= length) {\n point = { x: x2, y: y2 };\n } else {\n const [x, y] = midPoint([x1, y1], [x2, y2], distance / length);\n point = { x, y };\n }\n }\n return point;\n};\n\n/**\n * Returns bounding box for line segments (MoveTo, LineTo).\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance the distance to point in [0-1] range\n * @returns the extrema for line segments\n */\nconst getLineBBox = (x1: number, y1: number, x2: number, y2: number) => {\n const { min, max } = Math;\n\n return [min(x1, x2), min(y1, y2), max(x1, x2), max(y1, y2)] as [\n number,\n number,\n number,\n number,\n ];\n};\n\nexport { getLineBBox, getLineLength, getPointAtLineLength };\n","import { getPointAtLineLength } from \"./lineTools\";\nimport type { Point, PointTuple } from \"../types\";\n\n/**\n * Returns the Arc segment length.\n * @param rx radius along X axis\n * @param ry radius along Y axis\n * @param theta the angle in radians\n * @returns the arc length\n */\nconst arcLength = (rx: number, ry: number, theta: number) => {\n const halfTheta = theta / 2;\n const sinHalfTheta = Math.sin(halfTheta);\n const cosHalfTheta = Math.cos(halfTheta);\n const term1 = rx ** 2 * sinHalfTheta ** 2;\n const term2 = ry ** 2 * cosHalfTheta ** 2;\n const length = Math.sqrt(term1 + term2) * theta;\n return Math.abs(length);\n};\n\n/**\n * Find point on ellipse at given angle around ellipse (theta);\n * @param cx the center X\n * @param cy the center Y\n * @param rx the radius X\n * @param ry the radius Y\n * @param alpha the arc rotation angle in radians\n * @param theta the arc sweep angle in radians\n * @returns a point around ellipse at given angle\n */\nconst arcPoint = (\n cx: number,\n cy: number,\n rx: number,\n ry: number,\n alpha: number,\n theta: number,\n) => {\n const { sin, cos } = Math;\n // theta is angle in radians around arc\n // alpha is angle of rotation of ellipse in radians\n const cosA = cos(alpha);\n const sinA = sin(alpha);\n const x = rx * cos(theta);\n const y = ry * sin(theta);\n\n return [cx + cosA * x - sinA * y, cy + sinA * x + cosA * y] as PointTuple;\n};\n\n/**\n * Returns the angle between two points.\n * @param v0 starting point\n * @param v1 ending point\n * @returns the angle in radian\n */\nconst angleBetween = (v0: Point, v1: Point) => {\n const { x: v0x, y: v0y } = v0;\n const { x: v1x, y: v1y } = v1;\n const p = v0x * v1x + v0y * v1y;\n const n = Math.sqrt((v0x ** 2 + v0y ** 2) * (v1x ** 2 + v1y ** 2));\n const sign = v0x * v1y - v0y * v1x < 0 ? -1 : 1;\n return sign * Math.acos(p / n);\n};\n\n/**\n * Returns the following properties for an Arc segment: center, start angle,\n * end angle, and radiuses on X and Y axis.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param RX the radius on X axis\n * @param RY the radius on Y axis\n * @param angle the ellipse rotation in degrees\n * @param LAF the large arc flag\n * @param SF the sweep flag\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns properties specific to Arc segments\n */\nconst getArcProps = (\n x1: number,\n y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n x: number,\n y: number,\n) => {\n const { abs, sin, cos, sqrt, PI } = Math;\n let rx = abs(RX);\n let ry = abs(RY);\n const xRot = ((angle % 360) + 360) % 360;\n const xRotRad = xRot * (PI / 180);\n\n // istanbul ignore next @preserve\n if (x1 === x && y1 === y) {\n return {\n rx,\n ry,\n startAngle: 0,\n endAngle: 0,\n center: { x, y },\n };\n }\n\n if (rx === 0 || ry === 0) {\n return {\n rx,\n ry,\n startAngle: 0,\n endAngle: 0,\n center: { x: (x + x1) / 2, y: (y + y1) / 2 },\n };\n }\n\n const dx = (x1 - x) / 2;\n const dy = (y1 - y) / 2;\n\n const transformedPoint = {\n x: cos(xRotRad) * dx + sin(xRotRad) * dy,\n y: -sin(xRotRad) * dx + cos(xRotRad) * dy,\n };\n\n const radiiCheck = transformedPoint.x ** 2 / rx ** 2 +\n transformedPoint.y ** 2 / ry ** 2;\n\n if (radiiCheck > 1) {\n rx *= sqrt(radiiCheck);\n ry *= sqrt(radiiCheck);\n }\n\n const cSquareNumerator = rx ** 2 * ry ** 2 -\n rx ** 2 * transformedPoint.y ** 2 - ry ** 2 * transformedPoint.x ** 2;\n const cSquareRootDenom = rx ** 2 * transformedPoint.y ** 2 +\n ry ** 2 * transformedPoint.x ** 2;\n\n let cRadicand = cSquareNumerator / cSquareRootDenom;\n /* istanbul ignore next @preserve */\n cRadicand = cRadicand < 0 ? 0 : cRadicand;\n const cCoef = (LAF !== SF ? 1 : -1) * sqrt(cRadicand);\n const transformedCenter = {\n x: cCoef * ((rx * transformedPoint.y) / ry),\n y: cCoef * (-(ry * transformedPoint.x) / rx),\n };\n\n const center = {\n x: cos(xRotRad) * transformedCenter.x - sin(xRotRad) * transformedCenter.y +\n (x1 + x) / 2,\n y: sin(xRotRad) * transformedCenter.x + cos(xRotRad) * transformedCenter.y +\n (y1 + y) / 2,\n };\n\n const startVector = {\n x: (transformedPoint.x - transformedCenter.x) / rx,\n y: (transformedPoint.y - transformedCenter.y) / ry,\n };\n\n const startAngle = angleBetween({ x: 1, y: 0 }, startVector);\n\n const endVector = {\n x: (-transformedPoint.x - transformedCenter.x) / rx,\n y: (-transformedPoint.y - transformedCenter.y) / ry,\n };\n\n let sweepAngle = angleBetween(startVector, endVector);\n if (!SF && sweepAngle > 0) {\n sweepAngle -= 2 * PI;\n } else if (SF && sweepAngle < 0) {\n sweepAngle += 2 * PI;\n }\n sweepAngle %= 2 * PI;\n\n const endAngle = startAngle + sweepAngle;\n\n // point.ellipticalArcStartAngle = startAngle;\n // point.ellipticalArcEndAngle = startAngle + sweepAngle;\n // point.ellipticalArcAngle = alpha;\n\n // point.ellipticalArcCenter = center;\n // point.resultantRx = rx;\n // point.resultantRy = ry;\n\n return {\n center,\n startAngle,\n endAngle,\n rx,\n ry,\n };\n};\n\n/**\n * Returns the length of an Arc segment.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the length of the Arc segment\n */\nconst getArcLength = (\n x1: number,\n y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n x: number,\n y: number,\n) => {\n const { rx, ry, startAngle, endAngle } = getArcProps(\n x1,\n y1,\n RX,\n RY,\n angle,\n LAF,\n SF,\n x,\n y,\n );\n return arcLength(rx, ry, endAngle - startAngle);\n};\n\n/**\n * Returns a point along an Arc segment at a given distance.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param RX the radius on X axis\n * @param RY the radius on Y axis\n * @param angle the ellipse rotation in degrees\n * @param LAF the large arc flag\n * @param SF the sweep flag\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance a [0-1] ratio\n * @returns a point along the Arc segment\n */\nconst getPointAtArcLength = (\n x1: number,\n y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n x: number,\n y: number,\n distance?: number,\n) => {\n let point = { x: x1, y: y1 };\n const { center, rx, ry, startAngle, endAngle } = getArcProps(\n x1,\n y1,\n RX,\n RY,\n angle,\n LAF,\n SF,\n x,\n y,\n );\n\n /* istanbul ignore else @preserve */\n if (typeof distance === \"number\") {\n const length = arcLength(rx, ry, endAngle - startAngle);\n if (distance <= 0) {\n point = { x: x1, y: y1 };\n } else if (distance >= length) {\n point = { x, y };\n } else {\n /* istanbul ignore next @preserve */\n if (x1 === x && y1 === y) {\n return { x, y };\n }\n /* istanbul ignore next @preserve */\n if (rx === 0 || ry === 0) {\n return getPointAtLineLength(x1, y1, x, y, distance);\n }\n const { PI, cos, sin } = Math;\n const sweepAngle = endAngle - startAngle;\n const xRot = ((angle % 360) + 360) % 360;\n const xRotRad = xRot * (PI / 180);\n const alpha = startAngle + sweepAngle * (distance / length);\n const ellipseComponentX = rx * cos(alpha);\n const ellipseComponentY = ry * sin(alpha);\n\n point = {\n x: cos(xRotRad) * ellipseComponentX - sin(xRotRad) * ellipseComponentY +\n center.x,\n y: sin(xRotRad) * ellipseComponentX + cos(xRotRad) * ellipseComponentY +\n center.y,\n };\n }\n }\n\n return point;\n};\n\n/**\n * Returns the extrema for an Arc segment in the following format:\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\n *\n * @see https://github.com/herrstrietzel/svg-pathdata-getbbox\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param RX the radius on X axis\n * @param RY the radius on Y axis\n * @param angle the ellipse rotation in degrees\n * @param LAF the large arc flag\n * @param SF the sweep flag\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the extrema of the Arc segment\n */\nconst getArcBBox = (\n x1: number,\n y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n x: number,\n y: number,\n) => {\n const { center, rx, ry, startAngle, endAngle } = getArcProps(\n x1,\n y1,\n RX,\n RY,\n angle,\n LAF,\n SF,\n x,\n y,\n );\n const deltaAngle = endAngle - startAngle;\n const { min, max, tan, atan2, PI } = Math;\n\n // circle/elipse center coordinates\n const { x: cx, y: cy } = center;\n\n // rotation to radians\n const alpha = (angle * PI) / 180;\n const tangent = tan(alpha);\n\n /**\n * find min/max from zeroes of directional derivative along x and y\n * along x axis\n */\n const theta = atan2(-ry * tangent, rx);\n const angle1 = theta;\n const angle2 = theta + PI;\n const angle3 = atan2(ry, rx * tangent);\n const angle4 = angle3 + PI;\n const xArray = [x];\n const yArray = [y];\n\n // inner bounding box\n let xMin = min(x1, x);\n let xMax = max(x1, x);\n let yMin = min(y1, y);\n let yMax = max(y1, y);\n\n // on path point close after start\n const angleAfterStart = endAngle - deltaAngle * 0.00001;\n const pP2 = arcPoint(cx, cy, rx, ry, alpha, angleAfterStart);\n\n // on path point close before end\n const angleBeforeEnd = endAngle - deltaAngle * 0.99999;\n const pP3 = arcPoint(cx, cy, rx, ry, alpha, angleBeforeEnd);\n\n /**\n * expected extremes\n * if leaving inner bounding box\n * (between segment start and end point)\n * otherwise exclude elliptic extreme points\n */\n\n // right\n if (pP2[0] > xMax || pP3[0] > xMax) {\n // get point for this theta\n const p1 = arcPoint(cx, cy, rx, ry, alpha, angle1);\n xArray.push(p1[0]);\n yArray.push(p1[1]);\n }\n\n // left\n if (pP2[0] < xMin || pP3[0] < xMin) {\n // get anti-symmetric point\n const p2 = arcPoint(cx, cy, rx, ry, alpha, angle2);\n xArray.push(p2[0]);\n yArray.push(p2[1]);\n }\n\n // top\n if (pP2[1] < yMin || pP3[1] < yMin) {\n // get anti-symmetric point\n const p4 = arcPoint(cx, cy, rx, ry, alpha, angle4);\n xArray.push(p4[0]);\n yArray.push(p4[1]);\n }\n\n // bottom\n if (pP2[1] > yMax || pP3[1] > yMax) {\n // get point for this theta\n const p3 = arcPoint(cx, cy, rx, ry, alpha, angle3);\n xArray.push(p3[0]);\n yArray.push(p3[1]);\n }\n\n xMin = min.apply([], xArray);\n yMin = min.apply([], yArray);\n xMax = max.apply([], xArray);\n yMax = max.apply([], yArray);\n\n return [xMin, yMin, xMax, yMax] as [number, number, number, number];\n};\n\nexport {\n angleBetween,\n arcLength,\n arcPoint,\n getArcBBox,\n getArcLength,\n getArcProps,\n getPointAtArcLength,\n};\n","import type {\n CubicCoordinates,\n CubicPoints,\n DeriveCallback,\n DerivedCubicPoints,\n DerivedPoint,\n DerivedQuadPoints,\n PointTuple,\n QuadCoordinates,\n QuadPoints,\n} from \"../types\";\n\n/**\n * Tools from bezier.js by Mike 'Pomax' Kamermans\n * @see https://github.com/Pomax/bezierjs\n */\n\nconst Tvalues = [\n -0.0640568928626056260850430826247450385909,\n 0.0640568928626056260850430826247450385909,\n -0.1911188674736163091586398207570696318404,\n 0.1911188674736163091586398207570696318404,\n -0.3150426796961633743867932913198102407864,\n 0.3150426796961633743867932913198102407864,\n -0.4337935076260451384870842319133497124524,\n 0.4337935076260451384870842319133497124524,\n -0.5454214713888395356583756172183723700107,\n 0.5454214713888395356583756172183723700107,\n -0.6480936519369755692524957869107476266696,\n 0.6480936519369755692524957869107476266696,\n -0.7401241915785543642438281030999784255232,\n 0.7401241915785543642438281030999784255232,\n -0.8200019859739029219539498726697452080761,\n 0.8200019859739029219539498726697452080761,\n -0.8864155270044010342131543419821967550873,\n 0.8864155270044010342131543419821967550873,\n -0.9382745520027327585236490017087214496548,\n 0.9382745520027327585236490017087214496548,\n -0.9747285559713094981983919930081690617411,\n 0.9747285559713094981983919930081690617411,\n -0.9951872199970213601799974097007368118745,\n 0.9951872199970213601799974097007368118745,\n];\n\nconst Cvalues = [\n 0.1279381953467521569740561652246953718517,\n 0.1279381953467521569740561652246953718517,\n 0.1258374563468282961213753825111836887264,\n 0.1258374563468282961213753825111836887264,\n 0.121670472927803391204463153476262425607,\n 0.121670472927803391204463153476262425607,\n 0.1155056680537256013533444839067835598622,\n 0.1155056680537256013533444839067835598622,\n 0.1074442701159656347825773424466062227946,\n 0.1074442701159656347825773424466062227946,\n 0.0976186521041138882698806644642471544279,\n 0.0976186521041138882698806644642471544279,\n 0.086190161531953275917185202983742667185,\n 0.086190161531953275917185202983742667185,\n 0.0733464814110803057340336152531165181193,\n 0.0733464814110803057340336152531165181193,\n 0.0592985849154367807463677585001085845412,\n 0.0592985849154367807463677585001085845412,\n 0.0442774388174198061686027482113382288593,\n 0.0442774388174198061686027482113382288593,\n 0.0285313886289336631813078159518782864491,\n 0.0285313886289336631813078159518782864491,\n 0.0123412297999871995468056670700372915759,\n 0.0123412297999871995468056670700372915759,\n];\n\n/**\n * @param points\n * @returns\n */\nconst deriveBezier = (points: QuadPoints | CubicPoints) => {\n const dpoints = [] as (DerivedCubicPoints | DerivedQuadPoints)[];\n for (let p = points, d = p.length, c = d - 1; d > 1; d -= 1, c -= 1) {\n const list = [] as unknown as DerivedCubicPoints | DerivedQuadPoints;\n for (let j = 0; j < c; j += 1) {\n list.push({\n x: c * (p[j + 1].x - p[j].x),\n y: c * (p[j + 1].y - p[j].y),\n t: 0,\n });\n }\n dpoints.push(list);\n p = list;\n }\n return dpoints;\n};\n\n/**\n * @param points\n * @param t\n */\nconst computeBezier = (\n points: DerivedQuadPoints | DerivedCubicPoints,\n t: number,\n) => {\n // shortcuts\n /* istanbul ignore next @preserve */\n if (t === 0) {\n points[0].t = 0;\n return points[0];\n }\n\n const order = points.length - 1;\n\n /* istanbul ignore next @preserve */\n if (t === 1) {\n points[order].t = 1;\n return points[order];\n }\n\n const mt = 1 - t;\n let p = points as typeof points | [\n DerivedPoint,\n DerivedPoint,\n DerivedPoint,\n DerivedPoint,\n ];\n\n // constant?\n /* istanbul ignore next @preserve */\n if (order === 0) {\n points[0].t = t;\n return points[0];\n }\n\n // linear?\n /* istanbul ignore else @preserve */\n if (order === 1) {\n return {\n x: mt * p[0].x + t * p[1].x,\n y: mt * p[0].y + t * p[1].y,\n t,\n };\n }\n\n // quadratic/cubic curve?\n const mt2 = mt * mt;\n const t2 = t * t;\n let a = 0;\n let b = 0;\n let c = 0;\n let d = 0;\n /* istanbul ignore else @preserve */\n if (order === 2) {\n p = [p[0], p[1], p[2], { x: 0, y: 0 } as DerivedPoint];\n a = mt2;\n b = mt * t * 2;\n c = t2;\n } else if (order === 3) {\n a = mt2 * mt;\n b = mt2 * t * 3;\n c = mt * t2 * 3;\n d = t * t2;\n }\n return {\n x: a * p[0].x + b * p[1].x + c * p[2].x + d * p[3].x,\n y: a * p[0].y + b * p[1].y + c * p[2].y + d * p[3].y,\n t,\n };\n};\n\nconst calculateBezier = (derivativeFn: DeriveCallback, t: number) => {\n const d = derivativeFn(t);\n const l = d.x * d.x + d.y * d.y;\n\n return Math.sqrt(l);\n};\n\nconst bezierLength = (derivativeFn: DeriveCallback) => {\n const z = 0.5;\n const len = Tvalues.length;\n\n let sum = 0;\n\n for (let i = 0, t; i < len; i++) {\n t = z * Tvalues[i] + z;\n sum += Cvalues[i] * calculateBezier(derivativeFn, t);\n }\n return z * sum;\n};\n\n/**\n * Returns the length of CubicBezier / Quad segment.\n * @param curve cubic / quad bezier segment\n */\nconst getBezierLength = (curve: CubicCoordinates | QuadCoordinates) => {\n const points = [] as unknown as CubicPoints | QuadPoints;\n for (let idx = 0, len = curve.length, step = 2; idx < len; idx += step) {\n points.push({\n x: curve[idx],\n y: curve[idx + 1],\n });\n }\n const dpoints = deriveBezier(points);\n return bezierLength((t: number) => {\n return computeBezier(dpoints[0], t);\n });\n};\n\n// Precision for consider cubic polynom as quadratic one\nconst CBEZIER_MINMAX_EPSILON = 0.00000001;\n\n/**\n * Returns the most extreme points in a Quad Bezier segment.\n * @param A an array which consist of X/Y values\n */\n// https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L89\nconst minmaxQ = ([v1, cp, v2]: [number, number, number]) => {\n const min = Math.min(v1, v2);\n const max = Math.max(v1, v2);\n\n /* istanbul ignore next @preserve */\n if (cp >= v1 ? v2 >= cp : v2 <= cp) {\n // if no extremum in ]0,1[\n return [min, max] as PointTuple;\n }\n\n // check if the extremum E is min or max\n const E = (v1 * v2 - cp * cp) / (v1 - 2 * cp + v2);\n return (E < min ? [E, max] : [min, E]) as PointTuple;\n};\n\n/**\n * Returns the most extreme points in a Cubic Bezier segment.\n * @param A an array which consist of X/Y values\n * @see https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L127\n */\nconst minmaxC = ([v1, cp1, cp2, v2]: [number, number, number, number]) => {\n const K = v1 - 3 * cp1 + 3 * cp2 - v2;\n\n // if the polynomial is (almost) quadratic and not cubic\n /* istanbul ignore next @preserve */\n if (Math.abs(K) < CBEZIER_MINMAX_EPSILON) {\n if (v1 === v2 && v1 === cp1) {\n // no curve, point targeting same location\n return [v1, v2] as PointTuple;\n }\n\n return minmaxQ([v1, -0.5 * v1 + 1.5 * cp1, v1 - 3 * cp1 + 3 * cp2]);\n }\n\n // the reduced discriminant of the derivative\n const T = -v1 * cp2 + v1 * v2 - cp1 * cp2 - cp1 * v2 + cp1 * cp1 + cp2 * cp2;\n\n // if the polynomial is monotone in [0,1]\n if (T <= 0) {\n return [Math.min(v1, v2), Math.max(v1, v2)] as PointTuple;\n }\n const S = Math.sqrt(T);\n\n // potential extrema\n let min = Math.min(v1, v2);\n let max = Math.max(v1, v2);\n\n const L = v1 - 2 * cp1 + cp2;\n // check local extrema\n for (let R = (L + S) / K, i = 1; i <= 2; R = (L - S) / K, i++) {\n // istanbul ignore next @preserve\n if (R > 0 && R < 1) {\n // if the extrema is for R in [0,1]\n const Q = v1 * (1 - R) * (1 - R) * (1 - R) +\n cp1 * 3 * (1 - R) * (1 - R) * R + cp2 * 3 * (1 - R) * R * R +\n v2 * R * R * R;\n if (Q < min) {\n min = Q;\n }\n if (Q > max) {\n max = Q;\n }\n }\n }\n\n return [min, max] as PointTuple;\n};\n\nexport {\n bezierLength,\n calculateBezier,\n CBEZIER_MINMAX_EPSILON,\n computeBezier,\n Cvalues,\n deriveBezier,\n getBezierLength,\n minmaxC,\n minmaxQ,\n Tvalues,\n};\n","import { getBezierLength, minmaxC } from \"./bezier\";\nimport { type CubicCoordinates } from \"../types\";\n\n/**\n * Returns a point at a given length of a CubicBezier segment.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param t a [0-1] ratio\n * @returns the point at cubic-bezier segment length\n */\nconst getPointAtCubicSegmentLength = (\n [x1, y1, c1x, c1y, c2x, c2y, x2, y2]: CubicCoordinates,\n t: number,\n) => {\n const t1 = 1 - t;\n return {\n x: t1 ** 3 * x1 + 3 * t1 ** 2 * t * c1x + 3 * t1 * t ** 2 * c2x +\n t ** 3 * x2,\n y: t1 ** 3 * y1 + 3 * t1 ** 2 * t * c1y + 3 * t1 * t ** 2 * c2y +\n t ** 3 * y2,\n };\n};\n\n/**\n * Returns the length of a CubicBezier segment.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the CubicBezier segment length\n */\nconst getCubicLength = (\n x1: number,\n y1: number,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x2: number,\n y2: number,\n) => {\n return getBezierLength([x1, y1, c1x, c1y, c2x, c2y, x2, y2]);\n};\n\n/**\n * Returns the point along a CubicBezier segment at a given distance.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance the distance to look at\n * @returns the point at CubicBezier length\n */\nconst getPointAtCubicLength = (\n x1: number,\n y1: number,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x2: number,\n y2: number,\n distance?: number,\n) => {\n const distanceIsNumber = typeof distance === \"number\";\n let point = { x: x1, y: y1 };\n /* istanbul ignore else @preserve */\n if (distanceIsNumber) {\n const currentLength = getBezierLength([x1, y1, c1x, c1y, c2x, c2y, x2, y2]);\n if (distance <= 0) {\n // first point already defined\n } else if (distance >= currentLength) {\n point = { x: x2, y: y2 };\n } else {\n point = getPointAtCubicSegmentLength(\n [x1, y1, c1x, c1y, c2x, c2y, x2, y2],\n distance / currentLength,\n );\n }\n }\n return point;\n};\n\n/**\n * Returns the boundig box of a CubicBezier segment in the following format:\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the extrema of the CubicBezier segment\n */\nconst getCubicBBox = (\n x1: number,\n y1: number,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x2: number,\n y2: number,\n) => {\n const cxMinMax = minmaxC([x1, c1x, c2x, x2]);\n const cyMinMax = minmaxC([y1, c1y, c2y, y2]);\n\n return [cxMinMax[0], cyMinMax[0], cxMinMax[1], cyMinMax[1]] as [\n number,\n number,\n number,\n number,\n ];\n};\n\nexport {\n getCubicBBox,\n getCubicLength,\n getPointAtCubicLength,\n getPointAtCubicSegmentLength,\n};\n","import { getBezierLength, minmaxQ } from \"./bezier\";\nimport { type QuadCoordinates } from \"../types\";\n\n/**\n * Returns the {x,y} coordinates of a point at a\n * given length of a quadratic-bezier segment.\n *\n * @see https://github.com/substack/point-at-length\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param cx the control point X\n * @param cy the control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param t a [0-1] ratio\n * @returns the requested {x,y} coordinates\n */\nconst getPointAtQuadSegmentLength = (\n [x1, y1, cx, cy, x2, y2]: QuadCoordinates,\n t: number,\n) => {\n const t1 = 1 - t;\n return {\n x: t1 ** 2 * x1 + 2 * t1 * t * cx + t ** 2 * x2,\n y: t1 ** 2 * y1 + 2 * t1 * t * cy + t ** 2 * y2,\n };\n};\n\n/**\n * Returns the length of a QuadraticBezier segment.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param cx the control point X\n * @param cy the control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the QuadraticBezier segment length\n */\nconst getQuadLength = (\n x1: number,\n y1: number,\n cx: number,\n cy: number,\n x2: number,\n y2: number,\n) => {\n return getBezierLength([x1, y1, cx, cy, x2, y2]);\n};\n\n/**\n * Returns the point along a QuadraticBezier segment at a given distance.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param cx the control point X\n * @param cy the control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance the distance to look at\n * @returns the point at QuadraticBezier length\n */\nconst getPointAtQuadLength = (\n x1: number,\n y1: number,\n cx: number,\n cy: number,\n x2: number,\n y2: number,\n distance?: number,\n) => {\n const distanceIsNumber = typeof distance === \"number\";\n let point = { x: x1, y: y1 };\n\n /* istanbul ignore else @preserve */\n if (distanceIsNumber) {\n const currentLength = getBezierLength([x1, y1, cx, cy, x2, y2]);\n if (distance <= 0) {\n // first point already defined\n } else if (distance >= currentLength) {\n point = { x: x2, y: y2 };\n } else {\n point = getPointAtQuadSegmentLength(\n [x1, y1, cx, cy, x2, y2],\n distance / currentLength,\n );\n }\n }\n return point;\n};\n\n/**\n * Returns the boundig box of a QuadraticBezier segment in the following format:\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param cx the control point X\n * @param cy the control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the extrema of the QuadraticBezier segment\n */\nconst getQuadBBox = (\n x1: number,\n y1: number,\n cx: number,\n cy: number,\n x2: number,\n y2: number,\n) => {\n const cxMinMax = minmaxQ([x1, cx, x2]);\n const cyMinMax = minmaxQ([y1, cy, y2]);\n return [cxMinMax[0], cyMinMax[0], cxMinMax[1], cyMinMax[1]] as [\n number,\n number,\n number,\n number,\n ];\n};\n\nexport {\n getPointAtQuadLength,\n getPointAtQuadSegmentLength,\n getQuadBBox,\n getQuadLength,\n};\n","import distanceSquareRoot from \"./distanceSquareRoot\";\nimport { type PointTuple } from \"../types\";\n\n/**\n * d3-polygon-area\n * https://github.com/d3/d3-polygon\n *\n * Returns the area of a polygon.\n *\n * @param polygon an array of coordinates\n * @returns the polygon area\n */\nconst polygonArea = (polygon: PointTuple[]) => {\n const n = polygon.length;\n let i = -1;\n let a: PointTuple;\n let b = polygon[n - 1];\n let area = 0;\n\n /* eslint-disable-next-line */\n while (++i < n) {\n a = b;\n b = polygon[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n\n return area / 2;\n};\n\n/**\n * d3-polygon-length\n * https://github.com/d3/d3-polygon\n *\n * Returns the perimeter of a polygon.\n *\n * @param polygon an array of coordinates\n * @returns the polygon length\n */\nconst polygonLength = (polygon: PointTuple[]) => {\n return polygon.reduce((length, point, i) => {\n if (i) {\n return length + distanceSquareRoot(polygon[i - 1], point);\n }\n return 0;\n }, 0);\n};\n\nexport { polygonArea, polygonLength };\n","const DISTANCE_EPSILON = 0.00001;\n\nexport default DISTANCE_EPSILON;\n","import normalizeSegment from \"./normalizeSegment\";\nimport type { NormalArray, PathArray } from \"../types\";\nimport iterate from \"./iterate\";\nimport parsePathString from \"../parser/parsePathString\";\nimport paramsParser from \"../parser/paramsParser\";\n\n/**\n * Normalizes a `pathArray` object for further processing:\n * * convert segments to absolute values\n * * convert shorthand path commands to their non-shorthand notation\n *\n * @param pathInput the string to be parsed or 'pathArray'\n * @returns the normalized `pathArray`\n */\nconst normalizePath = (pathInput: string | PathArray) => {\n const path = parsePathString(pathInput);\n const params = { ...paramsParser };\n\n return iterate(path, (seg, _, lastX, lastY) => {\n params.x = lastX;\n params.y = lastY;\n const result = normalizeSegment(seg, params);\n\n const seglen = result.length;\n params.x1 = +result[seglen - 2];\n params.y1 = +result[seglen - 1];\n params.x2 = +result[seglen - 4] || params.x1;\n params.y2 = +result[seglen - 3] || params.y1;\n\n return result;\n });\n};\nexport default normalizePath;\n","import DISTANCE_EPSILON from \"./distanceEpsilon\";\nimport type { MSegment, PathArray, PointTuple } from \"../types\";\nimport iterate from \"../process/iterate\";\nimport { getLineLength, getPointAtLineLength } from \"../math/lineTools\";\nimport { getArcLength, getPointAtArcLength } from \"../math/arcTools\";\nimport { getCubicLength, getPointAtCubicLength } from \"../math/cubicTools\";\nimport { getPointAtQuadLength, getQuadLength } from \"../math/quadTools\";\nimport normalizePath from \"../process/normalizePath\";\n\n/**\n * Returns [x,y] coordinates of a point at a given length of a shape.\n *\n * @param pathInput the `pathArray` to look into\n * @param distance the length of the shape to look at\n * @returns the requested {x, y} point coordinates\n */\nconst getPointAtLength = (pathInput: string | PathArray, distance?: number) => {\n const path = normalizePath(pathInput);\n let isM = false;\n let data = [] as number[];\n let pathCommand = \"M\";\n let x = 0;\n let y = 0;\n let [mx, my] = path[0].slice(1) as PointTuple;\n const distanceIsNumber = typeof distance === \"number\";\n let point = { x: mx, y: my };\n let length = 0;\n let POINT = point;\n let totalLength = 0;\n\n if (!distanceIsNumber || distance < DISTANCE_EPSILON) return point;\n\n // for (let i = 0; i < pathLen; i += 1) {\n iterate(path, (seg, _, lastX, lastY) => {\n [pathCommand] = seg;\n isM = pathCommand === \"M\";\n data = !isM ? [lastX, lastY].concat(seg.slice(1) as number[]) : data;\n\n // this segment is always ZERO\n /* istanbul ignore else @preserve */\n if (isM) {\n // remember mx, my for Z\n [, mx, my] = seg as MSegment;\n point = { x: mx, y: my };\n length = 0;\n } else if (pathCommand === \"L\") {\n point = getPointAtLineLength(\n data[0],\n data[1],\n data[2],\n data[3],\n distance - totalLength,\n );\n length = getLineLength(data[0], data[1], data[2], data[3]);\n } else if (pathCommand === \"A\") {\n point = getPointAtArcLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n data[6],\n data[7],\n data[8],\n distance - totalLength,\n );\n length = getArcLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n data[6],\n data[7],\n data[8],\n );\n } else if (pathCommand === \"C\") {\n point = getPointAtCubicLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n data[6],\n data[7],\n distance - totalLength,\n );\n length = getCubicLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n data[6],\n data[7],\n );\n } else if (pathCommand === \"Q\") {\n point = getPointAtQuadLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n distance - totalLength,\n );\n length = getQuadLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n );\n } else if (pathCommand === \"Z\") {\n data = [lastX, lastY, mx, my];\n point = { x: mx, y: my };\n\n length = getLineLength(data[0], data[1], data[2], data[3]);\n }\n\n [x, y] = data.slice(-2);\n\n if (totalLength < distance) {\n POINT = point;\n } else {\n // totalLength >= distance\n // stop right here\n // stop iterator now!\n return false;\n }\n\n totalLength += length;\n return;\n });\n\n // native `getPointAtLength` behavior when the given distance\n // is higher than total length\n if (distance > totalLength - DISTANCE_EPSILON) {\n return { x, y };\n }\n\n return POINT;\n};\n\nexport default getPointAtLength;\n","import type { LSegment, MSegment, PathArray, PointTuple } from \"../types\";\nimport { getLineLength } from \"../math/lineTools\";\nimport { getArcLength } from \"../math/arcTools\";\nimport { getCubicLength } from \"../math/cubicTools\";\nimport { getQuadLength } from \"../math/quadTools\";\nimport iterate from \"../process/iterate\";\nimport parsePathString from \"../parser/parsePathString\";\nimport absolutizeSegment from \"../process/absolutizeSegment\";\n\n/**\n * Returns the shape total length, or the equivalent to `shape.getTotalLength()`.\n *\n * @param pathInput the target `pathArray`\n * @returns the shape total length\n */\nconst getTotalLength = (pathInput: string | PathArray) => {\n const path = parsePathString(pathInput);\n let paramX1 = 0;\n let paramY1 = 0;\n let paramX2 = 0;\n let paramY2 = 0;\n let paramQX = 0;\n let paramQY = 0;\n let pathCommand = \"M\";\n let mx = 0;\n let my = 0;\n let totalLength = 0;\n\n iterate(path, (seg, index, lastX, lastY) => {\n [pathCommand] = seg;\n const absCommand = pathCommand.toUpperCase();\n const isRelative = absCommand !== pathCommand;\n const absoluteSegment = isRelative\n ? absolutizeSegment(seg, index, lastX, lastY)\n : (seg.slice(0) as typeof seg);\n\n const normalSegment = absCommand === \"V\"\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\n : absCommand === \"H\"\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\n : absoluteSegment;\n [pathCommand] = normalSegment;\n\n if (!\"TQ\".includes(absCommand)) {\n // optional but good to be cautious\n paramQX = 0;\n paramQY = 0;\n }\n\n // this segment is always ZERO\n /* istanbul ignore else @preserve */\n if (pathCommand === \"M\") {\n // remember mx, my for Z\n [, mx, my] = normalSegment as MSegment;\n } else if (pathCommand === \"L\") {\n totalLength += getLineLength(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n );\n } else if (pathCommand === \"A\") {\n totalLength += getArcLength(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n normalSegment[5] as number,\n normalSegment[6] as number,\n normalSegment[7] as number,\n );\n } else if (pathCommand === \"S\") {\n const cp1x = paramX1 * 2 - paramX2;\n const cp1y = paramY1 * 2 - paramY2;\n\n totalLength += getCubicLength(\n lastX,\n lastY,\n cp1x,\n cp1y,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n );\n } else if (pathCommand === \"C\") {\n totalLength += getCubicLength(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n normalSegment[5] as number,\n normalSegment[6] as number,\n );\n } else if (pathCommand === \"T\") {\n paramQX = paramX1 * 2 - paramQX;\n paramQY = paramY1 * 2 - paramQY;\n totalLength += getQuadLength(\n lastX,\n lastY,\n paramQX,\n paramQY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n );\n } else if (pathCommand === \"Q\") {\n paramQX = normalSegment[1] as number;\n paramQY = normalSegment[2] as number;\n totalLength += getQuadLength(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n );\n } else if (pathCommand === \"Z\") {\n totalLength += getLineLength(lastX, lastY, mx, my);\n }\n\n // update params\n [paramX1, paramY1] = pathCommand === \"Z\"\n ? [mx, my]\n : (normalSegment.slice(-2) as PointTuple);\n [paramX2, paramY2] = pathCommand === \"C\"\n ? ([normalSegment[3], normalSegment[4]] as PointTuple)\n : pathCommand === \"S\"\n ? ([normalSegment[1], normalSegment[2]] as PointTuple)\n : [paramX1, paramY1];\n });\n\n return totalLength;\n};\n\nexport default getTotalLength;\n","import type { PathArray, PathSegment } from \"../types\";\nimport type { SegmentProperties } from \"../interface\";\nimport parsePathString from \"../parser/parsePathString\";\nimport getTotalLength from \"./getTotalLength\";\n\n/**\n * Returns the segment, its index and length as well as\n * the length to that segment at a given length in a path.\n *\n * @param pathInput target `pathArray`\n * @param distance the given length\n * @returns the requested properties\n */\nconst getPropertiesAtLength = (\n pathInput: string | PathArray,\n distance?: number,\n): SegmentProperties => {\n const pathArray = parsePathString(pathInput);\n\n let pathTemp = pathArray.slice(0) as PathArray;\n let pathLength = getTotalLength(pathTemp);\n let index = pathTemp.length - 1;\n let lengthAtSegment = 0;\n let length = 0;\n let segment = pathArray[0] as PathSegment;\n\n // If the path is empty, return 0.\n if (index <= 0 || !distance || !Number.isFinite(distance)) {\n return {\n segment,\n index: 0,\n length,\n lengthAtSegment,\n };\n }\n\n if (distance >= pathLength) {\n pathTemp = pathArray.slice(0, -1) as PathArray;\n lengthAtSegment = getTotalLength(pathTemp);\n length = pathLength - lengthAtSegment;\n segment = pathArray[index];\n return {\n segment,\n index,\n length,\n lengthAtSegment,\n };\n }\n\n const segments = [] as SegmentProperties[];\n while (index > 0) {\n segment = pathTemp[index];\n pathTemp = pathTemp.slice(0, -1) as PathArray;\n lengthAtSegment = getTotalLength(pathTemp);\n length = pathLength - lengthAtSegment;\n pathLength = lengthAtSegment;\n\n segments.push({\n segment,\n index,\n length,\n lengthAtSegment,\n });\n index -= 1;\n }\n\n return segments.find(({ lengthAtSegment: l }) =>\n l <= distance\n ) as SegmentProperties;\n};\n\nexport default getPropertiesAtLength;\n","import type { PathArray, Point } from \"../types\";\nimport type { PointProperties } from \"../interface\";\nimport getPointAtLength from \"./getPointAtLength\";\nimport getPropertiesAtLength from \"./getPropertiesAtLength\";\nimport getTotalLength from \"./getTotalLength\";\nimport parsePathString from \"../parser/parsePathString\";\nimport normalizePath from \"../process/normalizePath\";\n\n/**\n * Returns the point and segment in path closest to a given point as well as\n * the distance to the path stroke.\n *\n * @see https://bl.ocks.org/mbostock/8027637\n *\n * @param pathInput target `pathArray`\n * @param point the given point\n * @returns the requested properties\n */\nconst getPropertiesAtPoint = (\n pathInput: string | PathArray,\n point: Point,\n): PointProperties => {\n const path = parsePathString(pathInput);\n const normalPath = normalizePath(path);\n const pathLength = getTotalLength(normalPath);\n const distanceTo = (p: Point) => {\n const dx = p.x - point.x;\n const dy = p.y - point.y;\n return dx * dx + dy * dy;\n };\n let precision = 8;\n let scan: Point;\n let closest = { x: 0, y: 0 }; // make TS happy\n let scanDistance = 0;\n let bestLength = 0;\n let bestDistance = Infinity;\n\n // linear scan for coarse approximation\n for (let scanLength = 0; scanLength <= pathLength; scanLength += precision) {\n scan = getPointAtLength(normalPath, scanLength);\n scanDistance = distanceTo(scan);\n\n if (scanDistance < bestDistance) {\n closest = scan;\n bestLength = scanLength;\n bestDistance = scanDistance;\n }\n }\n\n // binary search for precise estimate\n precision /= 2;\n let before: { x: number; y: number };\n let after: { x: number; y: number };\n let beforeLength = 0;\n let afterLength = 0;\n let beforeDistance = 0;\n let afterDistance = 0;\n\n while (precision > 0.000001) {\n beforeLength = bestLength - precision;\n before = getPointAtLength(normalPath, beforeLength);\n beforeDistance = distanceTo(before);\n afterLength = bestLength + precision;\n after = getPointAtLength(normalPath, afterLength);\n afterDistance = distanceTo(after);\n\n if (beforeLength >= 0 && beforeDistance < bestDistance) {\n closest = before;\n bestLength = beforeLength;\n bestDistance = beforeDistance;\n } else if (afterLength <= pathLength && afterDistance < bestDistance) {\n closest = after;\n bestLength = afterLength;\n bestDistance = afterDistance;\n } else {\n precision /= 2;\n }\n if (precision < 0.00001) break;\n }\n\n const segment = getPropertiesAtLength(path, bestLength);\n const distance = Math.sqrt(bestDistance);\n\n return { closest, distance, segment };\n};\n\nexport default getPropertiesAtPoint;\n","import type { PathArray } from \"../types\";\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\n\n/**\n * Returns the point in path closest to a given point.\n *\n * @param pathInput target `pathArray`\n * @param point the given point\n * @returns the best match\n */\nconst getClosestPoint = (\n pathInput: string | PathArray,\n point: { x: number; y: number },\n) => {\n return getPropertiesAtPoint(pathInput, point).closest;\n};\n\nexport default getClosestPoint;\n","import pathToCurve from \"../convert/pathToCurve\";\nimport type { PathArray, PointTuple } from \"../types\";\n\n/**\n * Returns the area of a single cubic-bezier segment.\n *\n * http://objectmix.com/graphics/133553-area-closed-bezier-curve.html\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the area of the cubic-bezier segment\n */\nconst getCubicSegArea = (\n x1: number,\n y1: number,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x2: number,\n y2: number,\n) => {\n return (\n (3 *\n ((y2 - y1) * (c1x + c2x) -\n (x2 - x1) * (c1y + c2y) +\n c1y * (x1 - c2x) -\n c1x * (y1 - c2y) +\n y2 * (c2x + x1 / 3) -\n x2 * (c2y + y1 / 3))) /\n 20\n );\n};\n\n/**\n * Returns the area of a shape.\n *\n * @author Jürg Lehni & Jonathan Puckey\n *\n * @see https://github.com/paperjs/paper.js/blob/develop/src/path/Path.js\n *\n * @param path the shape `pathArray`\n * @returns the length of the cubic-bezier segment\n */\nconst getPathArea = (path: PathArray) => {\n let x = 0;\n let y = 0;\n let len = 0;\n\n return pathToCurve(path)\n .map((seg) => {\n switch (seg[0]) {\n case \"M\":\n [, x, y] = seg;\n return 0;\n default:\n len = getCubicSegArea(\n x,\n y,\n seg[1],\n seg[2],\n seg[3],\n seg[4],\n seg[5],\n seg[6],\n );\n [x, y] = seg.slice(-2) as PointTuple;\n return len;\n }\n })\n .reduce((a, b) => a + b, 0);\n};\nexport default getPathArea;\n","import getPathArea from \"./getPathArea\";\nimport pathToCurve from \"../convert/pathToCurve\";\nimport type { PathArray } from \"../types\";\n\n/**\n * Check if a path is drawn clockwise and returns true if so,\n * false otherwise.\n *\n * @param path the path string or `pathArray`\n * @returns true when clockwise or false if not\n */\nconst getDrawDirection = (path: string | PathArray) => {\n return getPathArea(pathToCurve(path)) >= 0;\n};\n\nexport default getDrawDirection;\n","import iterate from \"../process/iterate\";\nimport { PathBBox } from \"../interface\";\nimport { LSegment, MSegment, PathArray, PointTuple } from \"../types\";\nimport { getLineBBox } from \"../math/lineTools\";\nimport { getArcBBox } from \"../math/arcTools\";\nimport { getCubicBBox } from \"../math/cubicTools\";\nimport { getQuadBBox } from \"../math/quadTools\";\nimport parsePathString from \"../parser/parsePathString\";\nimport absolutizeSegment from \"../process/absolutizeSegment\";\n\nconst getPathBBox = (pathInput: PathArray | string) => {\n if (!pathInput) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n x2: 0,\n y2: 0,\n cx: 0,\n cy: 0,\n cz: 0,\n };\n }\n\n const path = parsePathString(pathInput);\n let pathCommand = \"M\";\n let mx = 0;\n let my = 0;\n const { max, min } = Math;\n let xMin = Infinity;\n let yMin = Infinity;\n let xMax = -Infinity;\n let yMax = -Infinity;\n let minX = 0;\n let minY = 0;\n let maxX = 0;\n let maxY = 0;\n let paramX1 = 0;\n let paramY1 = 0;\n let paramX2 = 0;\n let paramY2 = 0;\n let paramQX = 0;\n let paramQY = 0;\n\n iterate(path, (seg, index, lastX, lastY) => {\n [pathCommand] = seg;\n const absCommand = pathCommand.toUpperCase();\n const isRelative = absCommand !== pathCommand;\n const absoluteSegment = isRelative\n ? absolutizeSegment(seg, index, lastX, lastY)\n : (seg.slice(0) as typeof seg);\n\n const normalSegment = absCommand === \"V\"\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\n : absCommand === \"H\"\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\n : absoluteSegment;\n\n [pathCommand] = normalSegment;\n\n if (!\"TQ\".includes(absCommand)) {\n // optional but good to be cautious\n paramQX = 0;\n paramQY = 0;\n }\n\n // this segment is always ZERO\n /* istanbul ignore else @preserve */\n if (pathCommand === \"M\") {\n [, mx, my] = normalSegment as MSegment;\n minX = mx;\n minY = my;\n maxX = mx;\n maxY = my;\n } else if (pathCommand === \"L\") {\n [minX, minY, maxX, maxY] = getLineBBox(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n );\n } else if (pathCommand === \"A\") {\n [minX, minY, maxX, maxY] = getArcBBox(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n normalSegment[5] as number,\n normalSegment[6] as number,\n normalSegment[7] as number,\n );\n } else if (pathCommand === \"S\") {\n const cp1x = paramX1 * 2 - paramX2;\n const cp1y = paramY1 * 2 - paramY2;\n\n [minX, minY, maxX, maxY] = getCubicBBox(\n lastX,\n lastY,\n cp1x,\n cp1y,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n );\n } else if (pathCommand === \"C\") {\n [minX, minY, maxX, maxY] = getCubicBBox(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n normalSegment[5] as number,\n normalSegment[6] as number,\n );\n } else if (pathCommand === \"T\") {\n paramQX = paramX1 * 2 - paramQX;\n paramQY = paramY1 * 2 - paramQY;\n [minX, minY, maxX, maxY] = getQuadBBox(\n lastX,\n lastY,\n paramQX,\n paramQY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n );\n } else if (pathCommand === \"Q\") {\n paramQX = normalSegment[1] as number;\n paramQY = normalSegment[2] as number;\n [minX, minY, maxX, maxY] = getQuadBBox(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n );\n } else if (pathCommand === \"Z\") {\n [minX, minY, maxX, maxY] = getLineBBox(lastX, lastY, mx, my);\n }\n xMin = min(minX, xMin);\n yMin = min(minY, yMin);\n xMax = max(maxX, xMax);\n yMax = max(maxY, yMax);\n\n // update params\n [paramX1, paramY1] = pathCommand === \"Z\"\n ? [mx, my]\n : (normalSegment.slice(-2) as PointTuple);\n [paramX2, paramY2] = pathCommand === \"C\"\n ? ([normalSegment[3], normalSegment[4]] as PointTuple)\n : pathCommand === \"S\"\n ? ([normalSegment[1], normalSegment[2]] as PointTuple)\n : [paramX1, paramY1];\n });\n\n const width = xMax - xMin;\n const height = yMax - yMin;\n\n return {\n width,\n height,\n x: xMin,\n y: yMin,\n x2: xMax,\n y2: yMax,\n cx: xMin + width / 2,\n cy: yMin + height / 2,\n // an estimated guess\n cz: Math.max(width, height) + Math.min(width, height) / 2,\n } satisfies PathBBox;\n};\n\nexport default getPathBBox;\n","import type { PathArray, PathSegment } from \"../types\";\nimport getPropertiesAtLength from \"./getPropertiesAtLength\";\n\n/**\n * Returns the segment at a given length.\n *\n * @param pathInput the target `pathArray`\n * @param distance the distance in path to look at\n * @returns the requested segment\n */\nconst getSegmentAtLength = (\n pathInput: string | PathArray,\n distance?: number,\n): PathSegment | undefined => {\n return getPropertiesAtLength(pathInput, distance).segment;\n};\n\nexport default getSegmentAtLength;\n","import type { SegmentProperties } from \"../interface\";\nimport type { PathArray } from \"../types\";\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\n\n/**\n * Returns the path segment which contains a given point.\n *\n * @param path the `pathArray` to look into\n * @param point the point of the shape to look for\n * @returns the requested segment\n */\nconst getSegmentOfPoint = (\n path: string | PathArray,\n point: { x: number; y: number },\n): SegmentProperties | undefined => {\n return getPropertiesAtPoint(path, point).segment;\n};\nexport default getSegmentOfPoint;\n","import type { PathArray, PathSegment, RelativeCommand } from \"../types\";\nimport paramsCount from \"../parser/paramsCount\";\n\n/**\n * Iterates an array to check if it's an actual `pathArray`.\n *\n * @param path the `pathArray` to be checked\n * @returns iteration result\n */\nconst isPathArray = (path: unknown): path is PathArray => {\n return (\n Array.isArray(path) &&\n path.every((seg: PathSegment) => {\n const lk = seg[0].toLowerCase() as RelativeCommand;\n return (\n paramsCount[lk] === seg.length - 1 &&\n \"achlmqstvz\".includes(lk) &&\n (seg.slice(1) as unknown[]).every(Number.isFinite)\n );\n }) &&\n path.length > 0\n );\n};\nexport default isPathArray;\n","import type { AbsoluteArray } from \"../types\";\nimport isPathArray from \"./isPathArray\";\n\n/**\n * Iterates an array to check if it's a `pathArray`\n * with all absolute values.\n *\n * @param path the `pathArray` to be checked\n * @returns iteration result\n */\nconst isAbsoluteArray = (path: unknown): path is AbsoluteArray => {\n return (\n isPathArray(path) &&\n // `isPathArray` also checks if it's `Array`\n path.every(([x]) => x === x.toUpperCase())\n );\n};\nexport default isAbsoluteArray;\n","import type { NormalArray } from \"../types\";\nimport isAbsoluteArray from \"./isAbsoluteArray\";\n\n/**\n * Iterates an array to check if it's a `pathArray`\n * with all segments are in non-shorthand notation\n * with absolute values.\n *\n * @param {string | SVGPath.pathArray} path the `pathArray` to be checked\n * @returns {boolean} iteration result\n */\nconst isNormalizedArray = (path: unknown): path is NormalArray => {\n // `isAbsoluteArray` also checks if it's `Array`\n return isAbsoluteArray(path) && path.every(([pc]) => \"ACLMQZ\".includes(pc));\n};\nexport default isNormalizedArray;\n","import { CurveArray } from \"../types\";\nimport isNormalizedArray from \"./isNormalizedArray\";\n\n/**\n * Iterates an array to check if it's a `pathArray`\n * with all C (cubic bezier) segments.\n *\n * @param path the `Array` to be checked\n * @returns iteration result\n */\nconst isCurveArray = (path: unknown): path is CurveArray => {\n // `isPathArray` also checks if it's `Array`\n return isNormalizedArray(path) && path.every(([pc]) => \"MC\".includes(pc));\n};\nexport default isCurveArray;\n","import type { PathArray } from \"../types\";\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\nimport DISTANCE_EPSILON from \"./distanceEpsilon\";\n\n/**\n * Checks if a given point is in the stroke of a path.\n *\n * @param pathInput target path\n * @param point the given `{x,y}` point\n * @returns the query result\n */\nconst isPointInStroke = (\n pathInput: string | PathArray,\n point: { x: number; y: number },\n) => {\n const { distance } = getPropertiesAtPoint(pathInput, point);\n return Math.abs(distance) < DISTANCE_EPSILON; // 0.01 might be more permissive\n};\nexport default isPointInStroke;\n","import type { RelativeArray } from \"../types\";\nimport isPathArray from \"./isPathArray\";\n\n/**\n * Iterates an array to check if it's a `pathArray`\n * with relative values.\n *\n * @param path the `pathArray` to be checked\n * @returns iteration result\n */\nconst isRelativeArray = (path: unknown): path is RelativeArray => {\n return (\n isPathArray(path) &&\n // `isPathArray` checks if it's `Array`\n path.slice(1).every(([pc]) => pc === pc.toLowerCase())\n );\n};\nexport default isRelativeArray;\n","import scanSegment from \"../parser/scanSegment\";\nimport skipSpaces from \"../parser/skipSpaces\";\nimport PathParser from \"../parser/pathParser\";\n\n/**\n * Parses a path string value to determine its validity\n * then returns true if it's valid or false otherwise.\n *\n * @param pathString the path string to be parsed\n * @returns the path string validity\n */\nconst isValidPath = (pathString: string) => {\n if (typeof pathString !== \"string\" || !pathString.length) {\n return false;\n }\n\n const path = new PathParser(pathString);\n\n skipSpaces(path);\n\n while (path.index < path.max && !path.err.length) {\n scanSegment(path);\n }\n\n return !path.err.length && \"mM\".includes(path.segments[0][0]);\n};\nexport default isValidPath;\n","import type { ShapeParams } from \"../interface\";\n\n/**\n * Supported shapes and their specific parameters.\n */\nconst shapeParams: ShapeParams = {\n line: [\"x1\", \"y1\", \"x2\", \"y2\"],\n circle: [\"cx\", \"cy\", \"r\"],\n ellipse: [\"cx\", \"cy\", \"rx\", \"ry\"],\n rect: [\"width\", \"height\", \"x\", \"y\", \"rx\", \"ry\"],\n polygon: [\"points\"],\n polyline: [\"points\"],\n glyph: [\"d\"],\n};\n\nexport default shapeParams;\n","const isElement = (node?: unknown): node is Element =>\n node !== undefined && node !== null &&\n typeof node === \"object\" &&\n (node as Node).nodeType === 1; // ELEMENT_NODE\n\nexport default isElement;\n","import type {\n CircleAttr,\n EllipseAttr,\n GlyphAttr,\n LineAttr,\n PolyAttr,\n RectAttr,\n ShapeParams,\n} from \"../interface\";\nimport type { PathArray, PathSegment, ShapeOps, ShapeTypes } from \"../types\";\nimport error from \"../parser/error\";\nimport parsePathString from \"../parser/parsePathString\";\nimport shapeParams from \"./shapeParams\";\nimport isPathArray from \"./isPathArray\";\nimport isElement from \"./isElement\";\n\n/**\n * Returns a new `pathArray` from line attributes.\n *\n * @param attr shape configuration\n * @returns a new line `pathArray`\n */\nexport const getLinePath = (attr: LineAttr): PathArray => {\n let { x1, y1, x2, y2 } = attr;\n [x1, y1, x2, y2] = [x1, y1, x2, y2].map((a) => +a);\n return [\n [\"M\", x1, y1],\n [\"L\", x2, y2],\n ];\n};\n\n/**\n * Returns a new `pathArray` like from polyline/polygon attributes.\n *\n * @param attr shape configuration\n * @return a new polygon/polyline `pathArray`\n */\nexport const getPolyPath = (attr: PolyAttr): PathArray => {\n const pathArray = [] as PathSegment[];\n const points = (attr.points || \"\")\n .trim()\n .split(/[\\s|,]/)\n .map((a) => +a);\n\n let index = 0;\n while (index < points.length) {\n pathArray.push([index ? \"L\" : \"M\", points[index], points[index + 1]]);\n index += 2;\n }\n\n return (attr.type === \"polygon\"\n ? [...pathArray, [\"z\"]]\n : pathArray) as PathArray;\n};\n\n/**\n * Returns a new `pathArray` from circle attributes.\n *\n * @param attr shape configuration\n * @return a circle `pathArray`\n */\nexport const getCirclePath = (attr: CircleAttr): PathArray => {\n let { cx, cy, r } = attr;\n [cx, cy, r] = [cx, cy, r].map((a) => +a);\n\n return [\n [\"M\", cx - r, cy],\n [\"a\", r, r, 0, 1, 0, 2 * r, 0],\n [\"a\", r, r, 0, 1, 0, -2 * r, 0],\n ];\n};\n\n/**\n * Returns a new `pathArray` from ellipse attributes.\n *\n * @param attr shape configuration\n * @return an ellipse `pathArray`\n */\nexport const getEllipsePath = (attr: EllipseAttr): PathArray => {\n let { cx, cy } = attr;\n let rx = attr.rx || 0;\n let ry = attr.ry || rx;\n [cx, cy, rx, ry] = [cx, cy, rx, ry].map((a) => +a);\n\n return [\n [\"M\", cx - rx, cy],\n [\"a\", rx, ry, 0, 1, 0, 2 * rx, 0],\n [\"a\", rx, ry, 0, 1, 0, -2 * rx, 0],\n ];\n};\n\n/**\n * Returns a new `pathArray` like from rect attributes.\n *\n * @param attr object with properties above\n * @return a new `pathArray` from `` attributes\n */\nexport const getRectanglePath = (attr: RectAttr): PathArray => {\n const x = +attr.x || 0;\n const y = +attr.y || 0;\n const w = +attr.width;\n const h = +attr.height;\n let rx = +(attr.rx || 0);\n let ry = +(attr.ry || rx);\n\n // Validity checks from http://www.w3.org/TR/SVG/shapes.html#RectElement:\n if (rx || ry) {\n // rx = !rx ? ry : rx;\n // ry = !ry ? rx : ry;\n\n /* istanbul ignore else @preserve */\n if (rx * 2 > w) rx -= (rx * 2 - w) / 2;\n /* istanbul ignore else @preserve */\n if (ry * 2 > h) ry -= (ry * 2 - h) / 2;\n\n return [\n [\"M\", x + rx, y],\n [\"h\", w - rx * 2],\n [\"s\", rx, 0, rx, ry],\n [\"v\", h - ry * 2],\n [\"s\", 0, ry, -rx, ry],\n [\"h\", -w + rx * 2],\n [\"s\", -rx, 0, -rx, -ry],\n [\"v\", -h + ry * 2],\n [\"s\", 0, -ry, rx, -ry],\n ];\n }\n\n return [[\"M\", x, y], [\"h\", w], [\"v\", h], [\"H\", x], [\"Z\"]];\n};\n\n/**\n * Returns a new `pathArray` created from attributes of a ``, ``,\n * ``, ``, ``, ``, or ``.\n *\n * It can also work with an options object, see the type below\n * @see ShapeOps\n *\n * @param element target shape\n * @return the newly created `` element\n */\nconst shapeToPathArray = (\n element: ShapeTypes | ShapeOps,\n) => {\n const supportedShapes = Object.keys(shapeParams) as (keyof ShapeParams)[];\n const targetIsElement = isElement(element);\n const tagName = targetIsElement ? element.tagName : null;\n\n if (tagName && [...supportedShapes, \"path\"].every((s) => tagName !== s)) {\n throw TypeError(`${error}: \"${tagName}\" is not SVGElement`);\n }\n\n const type =\n (targetIsElement ? tagName : (element as ShapeOps).type) as ShapeOps[\n \"type\"\n ];\n const shapeAttrs = shapeParams[type] as string[];\n const config = { type } as Record;\n\n if (targetIsElement) {\n shapeAttrs.forEach((p) => {\n config[p] = element.getAttribute(p) as string;\n });\n } else {\n Object.assign(config, element);\n }\n\n // set d\n let pathArray = [] as unknown as PathArray;\n\n /* istanbul ignore else */\n if (type === \"circle\") {\n pathArray = getCirclePath(config as unknown as CircleAttr);\n } else if (type === \"ellipse\") {\n pathArray = getEllipsePath(config as unknown as EllipseAttr);\n } else if ([\"polyline\", \"polygon\"].includes(type)) {\n pathArray = getPolyPath(config as unknown as PolyAttr);\n } else if (type === \"rect\") {\n pathArray = getRectanglePath(config as unknown as RectAttr);\n } else if (type === \"line\") {\n pathArray = getLinePath(config as unknown as LineAttr);\n } else if ([\"glyph\", \"path\"].includes(type)) {\n pathArray = parsePathString(\n targetIsElement\n ? element.getAttribute(\"d\") || /* istanbul ignore next @preserve */ \"\"\n : (element as GlyphAttr).d || \"\",\n );\n }\n\n // replace target element\n if (isPathArray(pathArray) && pathArray.length) {\n return pathArray;\n }\n return false;\n};\nexport default shapeToPathArray;\n","import type { ShapeParams } from \"../interface\";\nimport type { ShapeOps, ShapeTypes } from \"../types\";\nimport pathToString from \"../convert/pathToString\";\nimport defaultOptions from \"../options/options\";\nimport error from \"../parser/error\";\nimport isValidPath from \"./isValidPath\";\nimport isElement from \"./isElement\";\nimport shapeToPathArray from \"./shapeToPathArray\";\nimport shapeParams from \"./shapeParams\";\n\n/**\n * Returns a new `` element created from attributes of a ``, ``,\n * ``, ``, ``, `` or ``. If `replace` parameter\n * is `true`, it will replace the target. The default `ownerDocument` is your current\n * `document` browser page, if you want to use in server-side using `jsdom`, you can\n * pass the `jsdom` `document` to `ownDocument`.\n *\n * It can also work with an options object, see the type below\n * @see ShapeOps\n *\n * The newly created `` element keeps all non-specific\n * attributes like `class`, `fill`, etc.\n *\n * @param element target shape\n * @param replace option to replace target\n * @param ownerDocument document for create element\n * @return the newly created `` element\n */\nconst shapeToPath = (\n element: ShapeTypes | ShapeOps,\n replace?: boolean,\n ownerDocument?: Document,\n): SVGPathElement | false => {\n const doc = ownerDocument || document;\n const supportedShapes = Object.keys(shapeParams) as (keyof ShapeParams)[];\n const targetIsElement = isElement(element);\n const tagName = targetIsElement ? element.tagName : null;\n\n if (tagName === \"path\") {\n throw TypeError(`${error}: \"${tagName}\" is already SVGPathElement`);\n }\n if (tagName && supportedShapes.every((s) => tagName !== s)) {\n throw TypeError(`${error}: \"${tagName}\" is not SVGElement`);\n }\n\n const path = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n const type =\n (targetIsElement ? tagName : (element as ShapeOps).type) as ShapeOps[\n \"type\"\n ];\n const shapeAttrs = shapeParams[type] as string[];\n const config = { type } as Record;\n\n // set d\n const round = defaultOptions.round as number;\n const pathArray = shapeToPathArray(element);\n const description = pathArray && pathArray.length\n ? pathToString(pathArray, round)\n : \"\";\n\n if (targetIsElement) {\n shapeAttrs.forEach((p) => {\n config[p] = element.getAttribute(p) as string;\n });\n // set no-specific shape attributes: fill, stroke, etc\n Object.values(element.attributes).forEach(({ name, value }) => {\n if (!shapeAttrs.includes(name)) path.setAttribute(name, value);\n });\n } else {\n Object.assign(config, element);\n // set no-specific shape attributes: fill, stroke, etc\n Object.keys(config).forEach((k) => {\n if (!shapeAttrs.includes(k) && k !== \"type\") {\n path.setAttribute(\n k.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`),\n config[k],\n );\n }\n });\n }\n\n // replace target element\n if (isValidPath(description)) {\n path.setAttribute(\"d\", description);\n if (replace && targetIsElement) {\n element.before(path, element);\n element.remove();\n }\n return path;\n }\n return false;\n};\n\nexport default shapeToPath;\n","import CSSMatrix from \"@thednp/dommatrix\";\n// import type { TransformObject } from '../interface';\nimport type { TransformObjectValues } from \"../types\";\n\n/**\n * Returns a transformation matrix to apply to `` elements.\n *\n * @see TransformObjectValues\n *\n * @param transform the `transformObject`\n * @returns a new transformation matrix\n */\nconst getSVGMatrix = (transform: TransformObjectValues): CSSMatrix => {\n let matrix = new CSSMatrix();\n const { origin } = transform;\n const [originX, originY] = origin as [number, number, number];\n const { translate } = transform;\n const { rotate } = transform;\n const { skew } = transform;\n const { scale } = transform;\n\n // set translate\n if (\n Array.isArray(translate) &&\n translate.length >= 2 &&\n translate.every((x) => !Number.isNaN(+x)) &&\n translate.some((x) => x !== 0)\n ) {\n matrix = matrix.translate(...(translate as [number, number, number?]));\n } else if (typeof translate === \"number\" && !Number.isNaN(translate)) {\n matrix = matrix.translate(translate);\n }\n\n if (rotate || skew || scale) {\n // set SVG transform-origin, always defined\n matrix = matrix.translate(originX, originY);\n\n // set rotation\n if (\n Array.isArray(rotate) &&\n rotate.length >= 2 &&\n rotate.every((x) => !Number.isNaN(+x)) &&\n rotate.some((x) => x !== 0)\n ) {\n matrix = matrix.rotate(...(rotate as [number, number, number?]));\n } else if (typeof rotate === \"number\" && !Number.isNaN(rotate)) {\n matrix = matrix.rotate(rotate);\n }\n\n // set skew(s)\n if (\n Array.isArray(skew) && skew.length === 2 && skew.every((x) =>\n !Number.isNaN(+x)\n ) && skew.some((x) => x !== 0)\n ) {\n matrix = skew[0] ? matrix.skewX(skew[0]) : matrix;\n matrix = skew[1] ? matrix.skewY(skew[1]) : matrix;\n } else if (typeof skew === \"number\" && !Number.isNaN(skew)) {\n matrix = matrix.skewX(skew);\n }\n\n // set scale\n if (\n Array.isArray(scale) && scale.length >= 2 && scale.every((x) =>\n !Number.isNaN(+x)\n ) && scale.some((x) => x !== 1)\n ) {\n matrix = matrix.scale(...(scale as [number, number, number?]));\n } else if (typeof scale === \"number\" && !Number.isNaN(scale)) {\n matrix = matrix.scale(scale);\n }\n // set SVG transform-origin\n matrix = matrix.translate(-originX, -originY);\n }\n\n return matrix;\n};\nexport default getSVGMatrix;\n","import defaultOptions from \"../options/options\";\nimport type { ParserParams } from \"../interface\";\nimport roundTo from \"../math/roundTo\";\nimport type {\n AbsoluteSegment,\n NormalSegment,\n PathCommand,\n ShortSegment,\n SSegment,\n TSegment,\n} from \"../types\";\n\n/**\n * Shorten a single segment of a `pathArray` object.\n *\n * @param segment the `absoluteSegment` object\n * @param normalSegment the `normalSegment` object\n * @param params the coordinates of the previous segment\n * @param prevCommand the path command of the previous segment\n * @returns the shortened segment\n */\nconst shortenSegment = (\n segment: AbsoluteSegment,\n normalSegment: NormalSegment,\n params: ParserParams,\n prevCommand: PathCommand,\n): ShortSegment => {\n const [pathCommand] = segment;\n const { round: defaultRound } = defaultOptions;\n const round = typeof defaultRound === \"number\"\n ? defaultRound\n : /* istanbul ignore next */ 4;\n const normalValues = normalSegment.slice(1) as number[];\n const { x1, y1, x2, y2, x, y } = params;\n const [nx, ny] = normalValues.slice(-2);\n const result = segment;\n\n if (!\"TQ\".includes(pathCommand)) {\n // optional but good to be cautious\n params.qx = null;\n params.qy = null;\n }\n\n if (pathCommand === \"L\") {\n if (roundTo(x, round) === roundTo(nx, round)) {\n return [\"V\", ny];\n } else if (roundTo(y, round) === roundTo(ny, round)) {\n return [\"H\", nx];\n }\n } else if (pathCommand === \"C\") {\n const [nx1, ny1] = normalValues;\n params.x1 = nx1;\n params.y1 = ny1;\n\n if (\n \"CS\".includes(prevCommand) &&\n ((roundTo(nx1, round) === roundTo(x1 * 2 - x2, round) &&\n roundTo(ny1, round) === roundTo(y1 * 2 - y2, round)) ||\n (roundTo(x1, round) === roundTo(x2 * 2 - x, round) &&\n roundTo(y1, round) === roundTo(y2 * 2 - y, round)))\n ) {\n return [\n \"S\",\n normalValues[2],\n normalValues[3],\n normalValues[4],\n normalValues[5],\n ] as SSegment;\n }\n } else if (pathCommand === \"Q\") {\n const [qx, qy] = normalValues;\n params.qx = qx;\n params.qy = qy;\n\n if (\n \"QT\".includes(prevCommand) &&\n roundTo(qx, round) === roundTo(x1 * 2 - x2, round) &&\n roundTo(qy, round) === roundTo(y1 * 2 - y2, round)\n ) {\n return [\"T\", normalValues[2], normalValues[3]] as TSegment;\n }\n }\n\n // ['V', 'H', 'S', 'T', 'Z'].includes(pathCommand)\n return result as ShortSegment;\n};\n\nexport default shortenSegment;\n","import type { PathCommand, PathSegment } from \"../types\";\nimport roundTo from \"../math/roundTo\";\n\nconst roundSegment = (\n segment: T,\n roundOption: number,\n) => {\n const values = (segment.slice(1) as number[]).map((n) =>\n roundTo(n, roundOption)\n );\n return [segment[0] as PathCommand | number].concat(values) as T;\n};\n\nexport default roundSegment;\n","import type { AbsoluteSegment, PathArray, PathCommand } from \"../types\";\nimport pathToAbsolute from \"../convert/pathToAbsolute\";\nimport shortenSegment from \"./shortenSegment\";\nimport paramsParser from \"../parser/paramsParser\";\nimport iterate from \"./iterate\";\nimport normalizeSegment from \"./normalizeSegment\";\nimport relativizeSegment from \"./relativizeSegment\";\nimport roundSegment from \"./roundSegment\";\n\n/**\n * Optimizes a `pathArray` object:\n * * convert segments to shorthand if possible\n * * select shortest segments from absolute and relative `pathArray`s\n *\n * @param pathInput a string or `pathArray`\n * @param roundOption the amount of decimals to round values to\n * @returns the optimized `pathArray`\n */\nconst optimizePath = (pathInput: PathArray, roundOption?: number) => {\n const path = pathToAbsolute(pathInput);\n // allow for ZERO decimals or use an aggressive value of 2\n const round = typeof roundOption === \"number\" && roundOption >= 0\n ? roundOption\n : /* istanbul ignore next @preserve */ 2;\n // this utility overrides the iterator params\n const optimParams = { ...paramsParser };\n\n const allPathCommands = [] as PathCommand[];\n let pathCommand = \"M\" as PathCommand;\n let prevCommand = \"Z\" as PathCommand;\n\n return iterate(path, (seg, i, lastX, lastY) => {\n optimParams.x = lastX;\n optimParams.y = lastY;\n const normalizedSegment = normalizeSegment(seg, optimParams);\n let result = seg;\n [pathCommand] = seg;\n\n // Save current path command\n allPathCommands[i] = pathCommand;\n if (i) {\n // Get previous path command for `shortenSegment`\n prevCommand = allPathCommands[i - 1];\n const shortSegment = shortenSegment(\n seg as AbsoluteSegment,\n normalizedSegment,\n optimParams,\n prevCommand,\n );\n const absSegment = roundSegment(shortSegment, round);\n const absString = absSegment.join(\"\");\n const relativeSegment = relativizeSegment(shortSegment, i, lastX, lastY);\n const relSegment = roundSegment(relativeSegment, round);\n const relString = relSegment.join(\"\");\n result = absString.length < relString.length ? absSegment : relSegment;\n }\n\n const seglen = normalizedSegment.length;\n optimParams.x1 = +normalizedSegment[seglen - 2];\n optimParams.y1 = +normalizedSegment[seglen - 1];\n optimParams.x2 = +normalizedSegment[seglen - 4] || optimParams.x1;\n optimParams.y2 = +normalizedSegment[seglen - 3] || optimParams.y1;\n\n return result;\n });\n};\n\nexport default optimizePath;\n","import CSSMatrix from \"@thednp/dommatrix\";\nimport { type PointTuple } from \"../types\";\n\n/**\n * Transforms a specified point using a matrix, returning a new\n * Tuple *Object* comprising of the transformed point.\n * Neither the matrix nor the original point are altered.\n *\n * @copyright thednp © 2021\n *\n * @param cssm CSSMatrix instance\n * @param v Tuple\n * @return the resulting Tuple\n */\nconst translatePoint = (\n cssm: CSSMatrix,\n v: [number, number, number, number],\n): [number, number, number, number] => {\n let m = CSSMatrix.Translate(v[0], v[1], v[2]);\n\n [, , , m.m44] = v;\n m = cssm.multiply(m);\n\n return [m.m41, m.m42, m.m43, m.m44];\n};\n\n/**\n * Returns the [x,y] projected coordinates for a given an [x,y] point\n * and an [x,y,z] perspective origin point.\n *\n * Equation found here =>\n * http://en.wikipedia.org/wiki/3D_projection#Diagram\n * Details =>\n * https://stackoverflow.com/questions/23792505/predicted-rendering-of-css-3d-transformed-pixel\n *\n * @param m the transformation matrix\n * @param point2D the initial [x,y] coordinates\n * @param origin the [x,y,z] transform origin\n * @returns the projected [x,y] coordinates\n */\nconst projection2d = (\n m: CSSMatrix,\n point2D: PointTuple,\n origin: [number, number, number],\n): PointTuple => {\n const [originX, originY, originZ] = origin;\n const [x, y, z] = translatePoint(m, [point2D[0], point2D[1], 0, 1]);\n\n const relativePositionX = x - originX;\n const relativePositionY = y - originY;\n const relativePositionZ = z - originZ;\n\n return [\n // protect against division by ZERO\n relativePositionX * (Math.abs(originZ) / Math.abs(relativePositionZ) || 1) +\n originX,\n relativePositionY * (Math.abs(originZ) / Math.abs(relativePositionZ) || 1) +\n originY,\n ];\n};\nexport default projection2d;\n","import type { CSegment, CurveArray, MSegment, PathCommand } from \"../types\";\n\n/**\n * Reverses all segments of a `pathArray`\n * which consists of only C (cubic-bezier) path commands.\n *\n * @param path the source `pathArray`\n * @returns the reversed `pathArray`\n */\nconst reverseCurve = (path: CurveArray) => {\n const rotatedCurve = path\n .slice(1)\n .map((x, i, curveOnly) =>\n !i\n ? path[0].slice(1).concat(x.slice(1) as number[])\n : curveOnly[i - 1].slice(-2).concat(x.slice(1))\n )\n .map((x) => x.map((_, i) => x[x.length - i - 2 * (1 - (i % 2))]))\n .reverse() as (MSegment | CSegment)[];\n\n return [[\"M\" as PathCommand | number].concat(rotatedCurve[0].slice(0, 2))]\n .concat(\n rotatedCurve.map((x) => [\"C\" as PathCommand | number].concat(x.slice(2))),\n ) as CurveArray;\n};\n\nexport default reverseCurve;\n","import type {\n ASegment,\n CSegment,\n HSegment,\n MSegment,\n PathArray,\n PathSegment,\n PointTuple,\n QSegment,\n SSegment,\n TSegment,\n VSegment,\n} from \"../types\";\nimport pathToAbsolute from \"../convert/pathToAbsolute\";\nimport normalizePath from \"./normalizePath\";\nimport iterate from \"./iterate\";\n\n/**\n * Reverses all segments of a `pathArray` and returns a new `pathArray` instance\n * with absolute values.\n *\n * @param pathInput the source `pathArray`\n * @returns the reversed `pathArray`\n */\nconst reversePath = (pathInput: PathArray) => {\n const absolutePath = pathToAbsolute(pathInput);\n const normalizedPath = normalizePath(absolutePath);\n const pLen = absolutePath.length;\n const isClosed = absolutePath[pLen - 1][0] === \"Z\";\n\n const reversedPath = iterate(absolutePath, (segment, i) => {\n const normalizedSegment = normalizedPath[i];\n const prevSeg = i && absolutePath[i - 1];\n const prevCommand = prevSeg && prevSeg[0];\n const nextSeg = absolutePath[i + 1];\n const nextCommand = nextSeg && nextSeg[0];\n const [pathCommand] = segment;\n const [x, y] = normalizedPath[i ? i - 1 : pLen - 1].slice(-2) as PointTuple;\n let result = segment;\n\n switch (pathCommand) {\n case \"M\":\n result = (isClosed ? [\"Z\"] : [pathCommand, x, y]) as PathSegment;\n break;\n case \"A\":\n result = [\n pathCommand,\n segment[1],\n segment[2],\n segment[3],\n segment[4],\n segment[5] === 1 ? 0 : 1,\n x,\n y,\n ] as ASegment;\n break;\n case \"C\":\n if (nextSeg && nextCommand === \"S\") {\n result = [\"S\", segment[1], segment[2], x, y] as SSegment;\n } else {\n result = [\n pathCommand,\n segment[3],\n segment[4],\n segment[1],\n segment[2],\n x,\n y,\n ] as CSegment;\n }\n break;\n case \"S\":\n if (\n prevCommand && \"CS\".includes(prevCommand) &&\n (!nextSeg || nextCommand !== \"S\")\n ) {\n result = [\n \"C\",\n normalizedSegment[3],\n normalizedSegment[4],\n normalizedSegment[1],\n normalizedSegment[2],\n x,\n y,\n ] as CSegment;\n } else {\n result = [\n pathCommand,\n normalizedSegment[1],\n normalizedSegment[2],\n x,\n y,\n ] as SSegment;\n }\n break;\n case \"Q\":\n if (nextSeg && nextCommand === \"T\") {\n result = [\"T\", x, y] as TSegment;\n } else {\n result = [pathCommand, segment[1], segment[2], x, y] as QSegment;\n }\n break;\n case \"T\":\n if (\n prevCommand && \"QT\".includes(prevCommand) &&\n (!nextSeg || nextCommand !== \"T\")\n ) {\n result = [\n \"Q\",\n normalizedSegment[1],\n normalizedSegment[2],\n x,\n y,\n ] as QSegment;\n } else {\n result = [pathCommand, x, y] as TSegment;\n }\n break;\n case \"Z\":\n result = [\"M\", x, y] as MSegment;\n break;\n case \"H\":\n result = [pathCommand, x] as HSegment;\n break;\n case \"V\":\n result = [pathCommand, y] as VSegment;\n break;\n default:\n result = [pathCommand as typeof pathCommand | number].concat(\n segment.slice(1, -2),\n x,\n y,\n ) as PathSegment;\n }\n\n return result;\n });\n\n return (\n isClosed\n ? reversedPath.reverse()\n : [reversedPath[0] as PathSegment].concat(reversedPath.slice(1).reverse())\n ) as PathArray;\n};\n\nexport default reversePath;\n","import type { PathArray } from \"../types\";\nimport defaultOptions from \"../options/options\";\nimport iterate from \"./iterate\";\nimport roundSegment from \"./roundSegment\";\n\n/**\n * Rounds the values of a `pathArray` instance to\n * a specified amount of decimals and returns it.\n *\n * @param path the source `pathArray`\n * @param roundOption the amount of decimals to round numbers to\n * @returns the resulted `pathArray` with rounded values\n */\nconst roundPath = (path: PathArray, roundOption?: number | \"off\") => {\n let { round } = defaultOptions;\n // allow for ZERO decimals\n round = roundOption === \"off\"\n ? roundOption\n : typeof roundOption === \"number\" && roundOption >= 0\n ? roundOption\n : typeof round === \"number\" && round >= 0\n ? round\n : /* istanbul ignore next @preserve */ \"off\";\n\n /* istanbul ignore else @preserve */\n if (round === \"off\") return path.slice(0) as PathArray;\n\n return iterate(path, (segment) => {\n return roundSegment(segment, round);\n });\n};\nexport default roundPath;\n","import midPoint from \"../math/midPoint\";\nimport type { CubicSegment, PointTuple } from \"../types\";\n\n/**\n * Split a cubic-bezier segment into two.\n *\n * @param pts the cubic-bezier parameters\n * @param ratio the cubic-bezier parameters\n * @return two new cubic-bezier segments\n */\nconst splitCubic = (\n pts: number[],\n ratio = 0.5,\n): [CubicSegment, CubicSegment] => {\n const t = ratio;\n const p0 = pts.slice(0, 2) as PointTuple;\n const p1 = pts.slice(2, 4) as PointTuple;\n const p2 = pts.slice(4, 6) as PointTuple;\n const p3 = pts.slice(6, 8) as PointTuple;\n const p4 = midPoint(p0, p1, t);\n const p5 = midPoint(p1, p2, t);\n const p6 = midPoint(p2, p3, t);\n const p7 = midPoint(p4, p5, t);\n const p8 = midPoint(p5, p6, t);\n const p9 = midPoint(p7, p8, t);\n\n return [\n [\"C\", p4[0], p4[1], p7[0], p7[1], p9[0], p9[1]],\n [\"C\", p8[0], p8[1], p6[0], p6[1], p3[0], p3[1]],\n ];\n};\nexport default splitCubic;\n","import paramsParser from \"../parser/paramsParser\";\nimport type {\n AbsoluteCommand,\n HSegment,\n MSegment,\n PathArray,\n PointTuple,\n RelativeCommand,\n VSegment,\n} from \"../types\";\n\n/**\n * Split a path into an `Array` of sub-path strings.\n *\n * In the process, values are converted to absolute\n * for visual consistency.\n *\n * @param pathInput the source `pathArray`\n * @return an array with all sub-path strings\n */\nconst splitPath = (pathInput: PathArray): PathArray[] => {\n const composite = [] as PathArray[];\n let path: PathArray;\n let pi = -1;\n let x = 0;\n let y = 0;\n let mx = 0;\n let my = 0;\n const params = { ...paramsParser };\n\n pathInput.forEach((seg) => {\n const [pathCommand] = seg;\n const absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\n const relCommand = pathCommand.toLowerCase() as RelativeCommand;\n const isRelative = pathCommand === relCommand;\n const values = seg.slice(1) as number[];\n\n if (absCommand === \"M\") {\n pi += 1;\n [x, y] = values as PointTuple;\n x += isRelative ? params.x : 0;\n y += isRelative ? params.y : 0;\n mx = x;\n my = y;\n path = [(isRelative ? [absCommand, mx, my] : seg) as MSegment];\n } else {\n if (absCommand === \"Z\") {\n x = mx;\n y = my;\n } else if (absCommand === \"H\") {\n [, x] = seg as HSegment;\n x += isRelative ? params.x : /* istanbul ignore next @preserve */ 0;\n } else if (absCommand === \"V\") {\n [, y] = seg as VSegment;\n y += isRelative ? params.y : /* istanbul ignore next @preserve */ 0;\n } else {\n [x, y] = seg.slice(-2) as PointTuple;\n x += isRelative ? params.x : 0;\n y += isRelative ? params.y : 0;\n }\n path.push(seg);\n }\n\n params.x = x;\n params.y = y;\n composite[pi] = path;\n });\n\n return composite;\n};\nexport default splitPath;\n","import getSVGMatrix from \"./getSVGMatrix\";\nimport projection2d from \"./projection2d\";\nimport defaultOptions from \"../options/options\";\nimport type {\n AbsoluteArray,\n AbsoluteSegment,\n CSegment,\n LSegment,\n PathArray,\n TransformObjectValues,\n} from \"../types\";\nimport type { TransformObject } from \"../interface\";\nimport iterate from \"./iterate\";\nimport parsePathString from \"../parser/parsePathString\";\nimport absolutizeSegment from \"./absolutizeSegment\";\nimport arcToCubic from \"./arcToCubic\";\n\n/**\n * Apply a 2D / 3D transformation to a `pathArray` instance.\n *\n * Since *SVGElement* doesn't support 3D transformation, this function\n * creates a 2D projection of the element.\n *\n * @param path the `pathArray` to apply transformation\n * @param transform the transform functions `Object`\n * @returns the resulted `pathArray`\n */\nconst transformPath = (\n pathInput: PathArray | string,\n transform?: Partial,\n) => {\n // last x and y transformed values\n let x = 0;\n let y = 0;\n // new x and y transformed\n let lx = 0;\n let ly = 0;\n // segment params iteration index and length\n let j = 0;\n let jj = 0;\n let pathCommand = \"M\";\n // transform uses it's own set of params\n const path = parsePathString(pathInput);\n const transformProps = transform && Object.keys(transform);\n\n // when used as a static method, invalidate somehow\n if (!transform || (transformProps && !transformProps.length)) {\n return path.slice(0) as typeof path;\n }\n\n // transform origin is extremely important\n if (!transform.origin) {\n Object.assign(transform, { origin: defaultOptions.origin });\n }\n const origin = transform.origin as [number, number, number];\n const matrixInstance = getSVGMatrix(transform as TransformObjectValues);\n\n if (matrixInstance.isIdentity) return path.slice(0) as typeof path;\n\n return iterate(path, (seg, index, lastX, lastY) => {\n [pathCommand] = seg;\n const absCommand = pathCommand.toUpperCase();\n const isRelative = absCommand !== pathCommand;\n const absoluteSegment = isRelative\n ? absolutizeSegment(seg, index, lastX, lastY)\n : (seg.slice(0) as AbsoluteSegment);\n\n let result = absCommand === \"A\"\n // ? segmentToCubic(absoluteSegment, transformParams)\n ? ([\"C\" as string | number].concat(\n arcToCubic(\n lastX,\n lastY,\n absoluteSegment[1] as number,\n absoluteSegment[2] as number,\n absoluteSegment[3] as number,\n absoluteSegment[4] as number,\n absoluteSegment[5] as number,\n absoluteSegment[6] as number,\n absoluteSegment[7] as number,\n ),\n ) as CSegment)\n : absCommand === \"V\"\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\n : absCommand === \"H\"\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\n : absoluteSegment;\n\n // update pathCommand\n pathCommand = result[0];\n const isLongArc = pathCommand === \"C\" && result.length > 7;\n const tempSegment =\n (isLongArc ? result.slice(0, 7) : result.slice(0)) as AbsoluteSegment;\n\n if (isLongArc) {\n path.splice(\n index + 1,\n 0,\n [\"C\" as typeof pathCommand | number].concat(\n result.slice(7),\n ) as CSegment,\n );\n result = tempSegment as CSegment;\n }\n\n if (pathCommand === \"L\") {\n [lx, ly] = projection2d(matrixInstance, [\n (result as LSegment)[1],\n (result as LSegment)[2],\n ], origin);\n\n /* istanbul ignore else @preserve */\n if (x !== lx && y !== ly) {\n result = [\"L\", lx, ly];\n } else if (y === ly) {\n result = [\"H\", lx];\n } else if (x === lx) {\n result = [\"V\", ly];\n }\n } else {\n for (j = 1, jj = result.length; j < jj; j += 2) {\n [lx, ly] = projection2d(\n matrixInstance,\n [+result[j], +result[j + 1]],\n origin,\n );\n result[j] = lx;\n result[j + 1] = ly;\n }\n }\n // now update x and y\n x = lx;\n y = ly;\n\n return result;\n });\n};\n\nexport default transformPath;\n","\"use strict\";\nimport CSSMatrix from \"@thednp/dommatrix\";\nimport { PathArray, PointTuple, TransformObjectValues } from \"./types\";\nimport type { Options, TransformEntries, TransformObject } from \"./interface\";\nexport * from \"./types\";\nexport * from \"./interface\";\nimport defaultOptions from \"./options/options\";\n\nimport pathToAbsolute from \"./convert/pathToAbsolute\";\nimport pathToRelative from \"./convert/pathToRelative\";\nimport pathToCurve from \"./convert/pathToCurve\";\nimport pathToString from \"./convert/pathToString\";\nimport * as arcTools from \"./math/arcTools\";\nimport {\n bezierLength,\n calculateBezier,\n CBEZIER_MINMAX_EPSILON,\n computeBezier,\n Cvalues,\n deriveBezier,\n getBezierLength,\n minmaxC,\n minmaxQ,\n Tvalues,\n} from \"./math/bezier\";\nimport {\n getCubicBBox,\n getCubicLength,\n getPointAtCubicLength,\n getPointAtCubicSegmentLength,\n} from \"./math/cubicTools\";\nimport {\n getLineBBox,\n getLineLength,\n getPointAtLineLength,\n} from \"./math/lineTools\";\nimport {\n getPointAtQuadLength,\n getPointAtQuadSegmentLength,\n getQuadBBox,\n getQuadLength,\n} from \"./math/quadTools\";\nimport { polygonArea, polygonLength } from \"./math/polygonTools\";\n\nimport distanceSquareRoot from \"./math/distanceSquareRoot\";\nimport midPoint from \"./math/midPoint\";\nimport rotateVector from \"./math/rotateVector\";\nimport roundTo from \"./math/roundTo\";\n\nimport error from \"./parser/error\";\nimport parsePathString from \"./parser/parsePathString\";\nimport finalizeSegment from \"./parser/finalizeSegment\";\nimport invalidPathValue from \"./parser/invalidPathValue\";\nimport isArcCommand from \"./parser/isArcCommand\";\nimport isDigit from \"./parser/isDigit\";\nimport isDigitStart from \"./parser/isDigitStart\";\nimport isMoveCommand from \"./parser/isMoveCommand\";\nimport isPathCommand from \"./parser/isPathCommand\";\nimport isSpace from \"./parser/isSpace\";\nimport paramsCount from \"./parser/paramsCount\";\nimport paramsParser from \"./parser/paramsParser\";\nimport pathParser from \"./parser/pathParser\";\nimport scanFlag from \"./parser/scanFlag\";\nimport scanParam from \"./parser/scanParam\";\nimport scanSegment from \"./parser/scanSegment\";\nimport skipSpaces from \"./parser/skipSpaces\";\n\nimport distanceEpsilon from \"./util/distanceEpsilon\";\nimport getClosestPoint from \"./util/getClosestPoint\";\nimport getDrawDirection from \"./util/getDrawDirection\";\nimport getPathArea from \"./util/getPathArea\";\nimport getPathBBox from \"./util/getPathBBox\";\nimport getPointAtLength from \"./util/getPointAtLength\";\nimport getPropertiesAtLength from \"./util/getPropertiesAtLength\";\nimport getPropertiesAtPoint from \"./util/getPropertiesAtPoint\";\nimport getSegmentAtLength from \"./util/getSegmentAtLength\";\nimport getSegmentOfPoint from \"./util/getSegmentOfPoint\";\nimport getTotalLength from \"./util/getTotalLength\";\n\nimport isAbsoluteArray from \"./util/isAbsoluteArray\";\nimport isCurveArray from \"./util/isCurveArray\";\nimport isNormalizedArray from \"./util/isNormalizedArray\";\nimport isPathArray from \"./util/isPathArray\";\nimport isPointInStroke from \"./util/isPointInStroke\";\nimport isRelativeArray from \"./util/isRelativeArray\";\nimport isValidPath from \"./util/isValidPath\";\nimport shapeParams from \"./util/shapeParams\";\nimport shapeToPath from \"./util/shapeToPath\";\nimport shapeToPathArray from \"./util/shapeToPathArray\";\n\nimport absolutizeSegment from \"./process/absolutizeSegment\";\nimport arcToCubic from \"./process/arcToCubic\";\nimport getSVGMatrix from \"./process/getSVGMatrix\";\nimport iterate from \"./process/iterate\";\nimport lineToCubic from \"./process/lineToCubic\";\nimport normalizePath from \"./process/normalizePath\";\nimport normalizeSegment from \"./process/normalizeSegment\";\nimport optimizePath from \"./process/optimizePath\";\nimport projection2d from \"./process/projection2d\";\nimport quadToCubic from \"./process/quadToCubic\";\nimport relativizeSegment from \"./process/relativizeSegment\";\nimport reverseCurve from \"./process/reverseCurve\";\nimport reversePath from \"./process/reversePath\";\nimport roundPath from \"./process/roundPath\";\nimport roundSegment from \"./process/roundSegment\";\nimport segmentToCubic from \"./process/segmentToCubic\";\nimport shortenSegment from \"./process/shortenSegment\";\nimport splitCubic from \"./process/splitCubic\";\nimport splitPath from \"./process/splitPath\";\nimport transformPath from \"./process/transformPath\";\n\n/**\n * Creates a new SVGPathCommander instance with the following properties:\n * * segments: `pathArray`\n * * round: number\n * * origin: [number, number, number?]\n *\n * @class\n * @author thednp \n * @returns a new SVGPathCommander instance\n */\nclass SVGPathCommander {\n public static CSSMatrix = CSSMatrix;\n public static pathToAbsolute = pathToAbsolute;\n public static pathToRelative = pathToRelative;\n public static pathToCurve = pathToCurve;\n public static pathToString = pathToString;\n public static arcTools = arcTools;\n public static bezierTools = {\n Cvalues,\n Tvalues,\n minmaxC,\n minmaxQ,\n getBezierLength,\n bezierLength,\n calculateBezier,\n computeBezier,\n deriveBezier,\n CBEZIER_MINMAX_EPSILON,\n };\n public static cubicTools = {\n getCubicLength,\n getCubicBBox,\n getPointAtCubicLength,\n getPointAtCubicSegmentLength,\n };\n public static lineTools = {\n getPointAtLineLength,\n getLineBBox,\n getLineLength,\n };\n public static quadTools = {\n getPointAtQuadSegmentLength,\n getQuadLength,\n getQuadBBox,\n getPointAtQuadLength,\n };\n public static polygonTools = { polygonArea, polygonLength };\n public static distanceSquareRoot = distanceSquareRoot;\n public static distanceEpsilon = distanceEpsilon;\n public static midPoint = midPoint;\n public static rotateVector = rotateVector;\n public static roundTo = roundTo;\n public static finalizeSegment = finalizeSegment;\n public static invalidPathValue = invalidPathValue;\n public static isArcCommand = isArcCommand;\n public static isDigit = isDigit;\n public static isDigitStart = isDigitStart;\n public static isMoveCommand = isMoveCommand;\n public static isPathCommand = isPathCommand;\n public static isSpace = isSpace;\n public static paramsCount = paramsCount;\n public static paramsParser = paramsParser;\n public static pathParser = pathParser;\n public static scanFlag = scanFlag;\n public static scanParam = scanParam;\n public static scanSegment = scanSegment;\n public static skipSpaces = skipSpaces;\n public static getPathBBox = getPathBBox;\n public static getPathArea = getPathArea;\n public static getTotalLength = getTotalLength;\n public static getDrawDirection = getDrawDirection;\n public static getPointAtLength = getPointAtLength;\n public static getPropertiesAtLength = getPropertiesAtLength;\n public static getPropertiesAtPoint = getPropertiesAtPoint;\n public static getClosestPoint = getClosestPoint;\n public static getSegmentOfPoint = getSegmentOfPoint;\n public static getSegmentAtLength = getSegmentAtLength;\n public static isPointInStroke = isPointInStroke;\n public static isValidPath = isValidPath;\n public static isPathArray = isPathArray;\n public static isAbsoluteArray = isAbsoluteArray;\n public static isRelativeArray = isRelativeArray;\n public static isCurveArray = isCurveArray;\n public static isNormalizedArray = isNormalizedArray;\n public static shapeToPath = shapeToPath;\n public static shapeToPathArray = shapeToPathArray;\n public static shapeParams = shapeParams;\n public static parsePathString = parsePathString;\n public static absolutizeSegment = absolutizeSegment;\n public static arcToCubic = arcToCubic;\n public static getSVGMatrix = getSVGMatrix;\n public static iterate = iterate;\n public static lineToCubic = lineToCubic;\n public static normalizePath = normalizePath;\n public static normalizeSegment = normalizeSegment;\n public static optimizePath = optimizePath;\n public static projection2d = projection2d;\n public static quadToCubic = quadToCubic;\n public static relativizeSegment = relativizeSegment;\n public static reverseCurve = reverseCurve;\n public static reversePath = reversePath;\n public static roundPath = roundPath;\n public static roundSegment = roundSegment;\n public static segmentToCubic = segmentToCubic;\n public static shortenSegment = shortenSegment;\n public static splitCubic = splitCubic;\n public static splitPath = splitPath;\n public static transformPath = transformPath;\n // declare class properties\n declare segments: PathArray;\n declare round: number | \"off\";\n declare origin: [number, number, number];\n\n /**\n * @constructor\n * @param pathValue the path string\n * @param config instance options\n */\n constructor(pathValue: string, config?: Partial) {\n const instanceOptions = config || {};\n const undefPath = typeof pathValue === \"undefined\";\n\n if (undefPath || !pathValue.length) {\n throw TypeError(\n `${error}: \"pathValue\" is ${undefPath ? \"undefined\" : \"empty\"}`,\n );\n }\n\n this.segments = parsePathString(pathValue);\n\n // // set instance options.round\n const { round: roundOption, origin: originOption } = instanceOptions;\n let round: number | \"off\";\n\n if (Number.isInteger(roundOption) || roundOption === \"off\") {\n round = roundOption as number | \"off\";\n } else {\n round = defaultOptions.round as number;\n }\n\n // set instance options.origin\n // the SVGPathCommander class will always override the default origin\n let origin = defaultOptions.origin as [number, number, number];\n /* istanbul ignore else @preserve */\n if (Array.isArray(originOption) && originOption.length >= 2) {\n const [originX, originY, originZ] = originOption.map(Number);\n origin = [\n !Number.isNaN(originX) ? originX : 0,\n !Number.isNaN(originY) ? originY : 0,\n !Number.isNaN(originZ) ? originZ : 0,\n ];\n }\n\n this.round = round;\n this.origin = origin;\n\n return this;\n }\n get bbox() {\n return getPathBBox(this.segments);\n }\n get length() {\n return getTotalLength(this.segments);\n }\n\n /**\n * Returns the path bounding box, equivalent to native `path.getBBox()`.\n *\n * @public\n * @returns the pathBBox\n */\n getBBox() {\n return this.bbox;\n }\n\n /**\n * Returns the total path length, equivalent to native `path.getTotalLength()`.\n *\n * @public\n * @returns the path total length\n */\n getTotalLength() {\n return this.length;\n }\n\n /**\n * Returns an `{x,y}` point in the path stroke at a given length,\n * equivalent to the native `path.getPointAtLength()`.\n *\n * @public\n * @param length the length\n * @returns the requested point\n */\n getPointAtLength(length: number) {\n return getPointAtLength(this.segments, length);\n }\n\n /**\n * Convert path to absolute values\n *\n * @public\n */\n toAbsolute() {\n const { segments } = this;\n this.segments = pathToAbsolute(segments);\n return this;\n }\n\n /**\n * Convert path to relative values\n *\n * @public\n */\n toRelative() {\n const { segments } = this;\n this.segments = pathToRelative(segments);\n return this;\n }\n\n /**\n * Convert path to cubic-bezier values. In addition, un-necessary `Z`\n * segment is removed if previous segment extends to the `M` segment.\n *\n * @public\n */\n toCurve() {\n const { segments } = this;\n this.segments = pathToCurve(segments);\n return this;\n }\n\n /**\n * Reverse the order of the segments and their values.\n *\n * @param onlySubpath option to reverse all sub-paths except first\n * @public\n */\n reverse(onlySubpath?: boolean) {\n const { segments } = this;\n const split = splitPath(segments);\n const subPath = split.length > 1 ? split : false;\n\n const absoluteMultiPath = subPath\n ? subPath.map((x, i) => {\n if (onlySubpath) {\n return i ? reversePath(x) : x.slice(0);\n }\n return reversePath(x);\n })\n : segments.slice(0);\n\n let path = [] as unknown as PathArray;\n if (subPath) {\n path = absoluteMultiPath.flat(1) as PathArray;\n } else {\n path = onlySubpath ? segments : reversePath(segments);\n }\n\n this.segments = path.slice(0) as PathArray;\n return this;\n }\n\n /**\n * Normalize path in 2 steps:\n * * convert `pathArray`(s) to absolute values\n * * convert shorthand notation to standard notation\n *\n * @public\n */\n normalize() {\n const { segments } = this;\n this.segments = normalizePath(segments);\n return this;\n }\n\n /**\n * Optimize `pathArray` values:\n * * convert segments to absolute and/or relative values\n * * select segments with shortest resulted string\n * * round values to the specified `decimals` option value\n *\n * @public\n */\n optimize() {\n const { segments } = this;\n const round = this.round === \"off\" ? 2 : this.round;\n\n this.segments = optimizePath(segments, round);\n return this;\n }\n\n /**\n * Transform path using values from an `Object` defined as `transformObject`.\n *\n * @see TransformObject for a quick refference\n *\n * @param source a `transformObject`as described above\n * @public\n */\n transform(source?: Partial) {\n if (\n !source ||\n typeof source !== \"object\" ||\n (typeof source === \"object\" &&\n ![\"translate\", \"rotate\", \"skew\", \"scale\"].some((x) => x in source))\n ) {\n return this;\n }\n\n const {\n segments,\n origin: [cx, cy, cz],\n } = this;\n const transform = {} as TransformObjectValues;\n for (const [k, v] of Object.entries(source) as TransformEntries) {\n // istanbul ignore else @preserve\n if (k === \"skew\" && Array.isArray(v)) {\n transform[k] = v.map(Number) as PointTuple;\n } else if (\n (k === \"rotate\" || k === \"translate\" || k === \"origin\" ||\n k === \"scale\") && Array.isArray(v)\n ) {\n transform[k] = v.map(Number) as [number, number, number];\n } else if (k !== \"origin\" && typeof Number(v) === \"number\") {\n transform[k] = Number(v);\n }\n }\n\n // if origin is not specified\n // it's important that we have one\n const { origin } = transform;\n\n if (Array.isArray(origin) && origin.length >= 2) {\n const [originX, originY, originZ] = origin.map(Number);\n transform.origin = [\n !Number.isNaN(originX) ? originX : cx,\n !Number.isNaN(originY) ? originY : cy,\n originZ || cz,\n ];\n } else {\n transform.origin = [cx, cy, cz];\n }\n\n this.segments = transformPath(segments, transform);\n return this;\n }\n\n /**\n * Rotate path 180deg vertically\n *\n * @public\n */\n flipX() {\n const { cx, cy } = this.bbox;\n this.transform({ rotate: [0, 180, 0], origin: [cx, cy, 0] });\n return this;\n }\n\n /**\n * Rotate path 180deg horizontally\n *\n * @public\n */\n flipY() {\n const { cx, cy } = this.bbox;\n this.transform({ rotate: [180, 0, 0], origin: [cx, cy, 0] });\n return this;\n }\n\n /**\n * Export the current path to be used\n * for the `d` (description) attribute.\n *\n * @public\n * @return the path string\n */\n toString() {\n return pathToString(this.segments, this.round);\n }\n\n /**\n * Remove the instance.\n *\n * @public\n * @return void\n */\n dispose() {\n Object.keys(this).forEach((key) => delete this[key as keyof typeof this]);\n }\n}\n\nexport default SVGPathCommander;\n"],"names":["Z","z","s","e","p","$","E","P","y","g","n","i","r","a","m","h","c","u","f","w","o","d","b","X","O","x","Y","F","T","k","I","v","R","D","N","defaultOptions","paramsCount","finalizeSegment","path","pathCommand","relativeCommand","data","error","scanFlag","index","pathValue","code","isDigit","invalidPathValue","scanParam","max","start","zeroFirst","hasCeiling","hasDecimal","hasDot","ch","isSpace","skipSpaces","isPathCommand","isDigitStart","isArcCommand","isMoveCommand","scanSegment","segments","cmdCode","reqParams","paramCounts","lastSegment","_a","PathParser","pathString","parsePathString","pathInput","absolutizeSegment","segment","lastX","lastY","absCommand","absValues","seglen","j","iterate","iterator","pathLen","isRelative","mx","my","segLen","iteratorResult","pathToAbsolute","relativizeSegment","relCommand","relValues","pathToRelative","rotateVector","rad","sin","cos","arcToCubic","X1","Y1","RX","RY","angle","LAF","SF","X2","Y2","recursive","x1","y1","rx","ry","x2","y2","d120","res","xy","f1","f2","cx","cy","rx2","ry2","df","f2old","x2old","y2old","c1","s1","c2","s2","t","hx","hy","m1","m2","m3","m4","newres","ii","quadToCubic","qx","qy","r13","r23","midPoint","ax","ay","bx","by","lineToCubic","segmentToCubic","params","values","px1","py1","px","py","normalizeSegment","px2","py2","nqx","nqy","paramsParser","pathToCurve","seg","normalSegment","result","roundTo","round","pow","pathToString","roundOption","valLen","distanceSquareRoot","getLineLength","getPointAtLineLength","distance","point","length","getLineBBox","min","arcLength","theta","halfTheta","sinHalfTheta","cosHalfTheta","term1","term2","arcPoint","alpha","cosA","sinA","angleBetween","v0","v1","v0x","v0y","v1x","v1y","getArcProps","abs","sqrt","PI","xRotRad","dx","dy","transformedPoint","radiiCheck","cSquareNumerator","cSquareRootDenom","cRadicand","cCoef","transformedCenter","center","startVector","startAngle","endVector","sweepAngle","endAngle","getArcLength","getPointAtArcLength","ellipseComponentX","ellipseComponentY","getArcBBox","deltaAngle","tan","atan2","tangent","angle1","angle2","angle3","angle4","xArray","yArray","xMin","xMax","yMin","yMax","angleAfterStart","pP2","angleBeforeEnd","pP3","p1","p2","p4","p3","Tvalues","Cvalues","deriveBezier","points","dpoints","list","computeBezier","order","mt","mt2","t2","calculateBezier","derivativeFn","l","bezierLength","len","sum","getBezierLength","curve","idx","step","CBEZIER_MINMAX_EPSILON","minmaxQ","cp","v2","minmaxC","cp1","cp2","K","S","L","Q","getPointAtCubicSegmentLength","c1x","c1y","c2x","c2y","t1","getCubicLength","getPointAtCubicLength","distanceIsNumber","currentLength","getCubicBBox","cxMinMax","cyMinMax","getPointAtQuadSegmentLength","getQuadLength","getPointAtQuadLength","getQuadBBox","polygonArea","polygon","area","polygonLength","DISTANCE_EPSILON","normalizePath","_","getPointAtLength","isM","POINT","totalLength","getTotalLength","paramX1","paramY1","paramX2","paramY2","paramQX","paramQY","absoluteSegment","cp1x","cp1y","getPropertiesAtLength","pathArray","pathTemp","pathLength","lengthAtSegment","getPropertiesAtPoint","normalPath","distanceTo","precision","scan","closest","scanDistance","bestLength","bestDistance","scanLength","before","after","beforeLength","afterLength","beforeDistance","afterDistance","getClosestPoint","getCubicSegArea","getPathArea","getDrawDirection","getPathBBox","minX","minY","maxX","maxY","width","height","getSegmentAtLength","getSegmentOfPoint","isPathArray","lk","isAbsoluteArray","isNormalizedArray","pc","isCurveArray","isPointInStroke","isRelativeArray","isValidPath","shapeParams","isElement","node","getLinePath","attr","getPolyPath","getCirclePath","getEllipsePath","getRectanglePath","shapeToPathArray","element","supportedShapes","targetIsElement","tagName","type","shapeAttrs","config","shapeToPath","replace","ownerDocument","doc","description","name","value","getSVGMatrix","transform","matrix","CSSMatrix","origin","originX","originY","translate","rotate","skew","scale","shortenSegment","prevCommand","defaultRound","normalValues","nx","ny","nx1","ny1","roundSegment","optimizePath","optimParams","allPathCommands","normalizedSegment","shortSegment","absSegment","absString","relativeSegment","relSegment","relString","translatePoint","cssm","projection2d","point2D","originZ","relativePositionX","relativePositionY","relativePositionZ","reverseCurve","rotatedCurve","curveOnly","reversePath","absolutePath","normalizedPath","pLen","isClosed","reversedPath","prevSeg","nextSeg","nextCommand","roundPath","splitCubic","pts","ratio","p0","p5","p6","p7","p8","p9","splitPath","composite","pi","transformPath","lx","ly","jj","transformProps","matrixInstance","isLongArc","tempSegment","SVGPathCommander","instanceOptions","undefPath","originOption","onlySubpath","split","subPath","absoluteMultiPath","source","cz","key","__publicField","arcTools","distanceEpsilon","pathParser"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"svg-path-commander.js","sources":["../node_modules/@thednp/dommatrix/dist/dommatrix.mjs","../src/options/options.ts","../src/parser/paramsCount.ts","../src/parser/finalizeSegment.ts","../src/parser/error.ts","../src/parser/scanFlag.ts","../src/parser/isDigit.ts","../src/parser/invalidPathValue.ts","../src/parser/scanParam.ts","../src/parser/isSpace.ts","../src/parser/skipSpaces.ts","../src/parser/isPathCommand.ts","../src/parser/isDigitStart.ts","../src/parser/isArcCommand.ts","../src/parser/isMoveCommand.ts","../src/parser/scanSegment.ts","../src/parser/pathParser.ts","../src/parser/parsePathString.ts","../src/process/absolutizeSegment.ts","../src/process/iterate.ts","../src/convert/pathToAbsolute.ts","../src/process/relativizeSegment.ts","../src/convert/pathToRelative.ts","../src/math/rotateVector.ts","../src/process/arcToCubic.ts","../src/process/quadToCubic.ts","../src/math/midPoint.ts","../src/process/lineToCubic.ts","../src/process/segmentToCubic.ts","../src/process/normalizeSegment.ts","../src/parser/paramsParser.ts","../src/convert/pathToCurve.ts","../src/math/roundTo.ts","../src/convert/pathToString.ts","../src/math/distanceSquareRoot.ts","../src/math/lineTools.ts","../src/math/arcTools.ts","../src/math/bezier.ts","../src/math/cubicTools.ts","../src/math/quadTools.ts","../src/math/polygonTools.ts","../src/util/distanceEpsilon.ts","../src/process/normalizePath.ts","../src/util/getPointAtLength.ts","../src/util/getTotalLength.ts","../src/util/getPropertiesAtLength.ts","../src/util/getPropertiesAtPoint.ts","../src/util/getClosestPoint.ts","../src/util/getPathArea.ts","../src/util/getDrawDirection.ts","../src/util/getPathBBox.ts","../src/util/getSegmentAtLength.ts","../src/util/getSegmentOfPoint.ts","../src/util/isPathArray.ts","../src/util/isAbsoluteArray.ts","../src/util/isNormalizedArray.ts","../src/util/isCurveArray.ts","../src/util/isPointInStroke.ts","../src/util/isRelativeArray.ts","../src/util/isValidPath.ts","../src/util/shapeParams.ts","../src/util/isElement.ts","../src/util/shapeToPathArray.ts","../src/util/shapeToPath.ts","../src/process/getSVGMatrix.ts","../src/process/shortenSegment.ts","../src/process/roundSegment.ts","../src/process/optimizePath.ts","../src/process/projection2d.ts","../src/process/reverseCurve.ts","../src/process/reversePath.ts","../src/process/roundPath.ts","../src/process/splitCubic.ts","../src/process/splitPath.ts","../src/process/transformPath.ts","../src/index.ts"],"sourcesContent":["var Z = Object.defineProperty;\nvar z = (s, t, e) => t in s ? Z(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e;\nvar p = (s, t, e) => z(s, typeof t != \"symbol\" ? t + \"\" : t, e);\nconst $ = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: 0,\n f: 0,\n m11: 1,\n m12: 0,\n m13: 0,\n m14: 0,\n m21: 0,\n m22: 1,\n m23: 0,\n m24: 0,\n m31: 0,\n m32: 0,\n m33: 1,\n m34: 0,\n m41: 0,\n m42: 0,\n m43: 0,\n m44: 1,\n is2D: !0,\n isIdentity: !0\n}, E = (s) => (s instanceof Float64Array || s instanceof Float32Array || Array.isArray(s) && s.every((t) => typeof t == \"number\")) && [6, 16].some((t) => s.length === t), P = (s) => s instanceof DOMMatrix || s instanceof y || typeof s == \"object\" && Object.keys($).every((t) => s && t in s), g = (s) => {\n const t = new y(), e = Array.from(s);\n if (!E(e))\n throw TypeError(\n `CSSMatrix: \"${e.join(\",\")}\" must be an array with 6/16 numbers.`\n );\n // istanbul ignore else @preserve\n if (e.length === 16) {\n const [\n n,\n i,\n r,\n a,\n l,\n m,\n h,\n c,\n u,\n f,\n w,\n o,\n d,\n A,\n M,\n b\n ] = e;\n t.m11 = n, t.a = n, t.m21 = l, t.c = l, t.m31 = u, t.m41 = d, t.e = d, t.m12 = i, t.b = i, t.m22 = m, t.d = m, t.m32 = f, t.m42 = A, t.f = A, t.m13 = r, t.m23 = h, t.m33 = w, t.m43 = M, t.m14 = a, t.m24 = c, t.m34 = o, t.m44 = b;\n } else if (e.length === 6) {\n const [n, i, r, a, l, m] = e;\n t.m11 = n, t.a = n, t.m12 = i, t.b = i, t.m21 = r, t.c = r, t.m22 = a, t.d = a, t.m41 = l, t.e = l, t.m42 = m, t.f = m;\n }\n return t;\n}, X = (s) => {\n if (P(s))\n return g([\n s.m11,\n s.m12,\n s.m13,\n s.m14,\n s.m21,\n s.m22,\n s.m23,\n s.m24,\n s.m31,\n s.m32,\n s.m33,\n s.m34,\n s.m41,\n s.m42,\n s.m43,\n s.m44\n ]);\n throw TypeError(\n `CSSMatrix: \"${JSON.stringify(s)}\" is not a DOMMatrix / CSSMatrix / JSON compatible object.`\n );\n}, O = (s) => {\n if (typeof s != \"string\")\n throw TypeError(`CSSMatrix: \"${JSON.stringify(s)}\" is not a string.`);\n const t = String(s).replace(/\\s/g, \"\");\n let e = new y();\n const n = `CSSMatrix: invalid transform string \"${s}\"`;\n return t.split(\")\").filter((i) => i).forEach((i) => {\n const [r, a] = i.split(\"(\");\n if (!a) throw TypeError(n);\n const l = a.split(\",\").map(\n (o) => o.includes(\"rad\") ? parseFloat(o) * (180 / Math.PI) : parseFloat(o)\n ), [m, h, c, u] = l, f = [m, h, c], w = [m, h, c, u];\n if (r === \"perspective\" && m && [h, c].every((o) => o === void 0))\n e.m34 = -1 / m;\n else if (r.includes(\"matrix\") && [6, 16].includes(l.length) && l.every((o) => !Number.isNaN(+o))) {\n const o = l.map((d) => Math.abs(d) < 1e-6 ? 0 : d);\n e = e.multiply(g(o));\n } else if (r === \"translate3d\" && f.every((o) => !Number.isNaN(+o)))\n e = e.translate(m, h, c);\n else if (r === \"translate\" && m && c === void 0)\n e = e.translate(m, h || 0, 0);\n else if (r === \"rotate3d\" && w.every((o) => !Number.isNaN(+o)) && u)\n e = e.rotateAxisAngle(m, h, c, u);\n else if (r === \"rotate\" && m && [h, c].every((o) => o === void 0))\n e = e.rotate(0, 0, m);\n else if (r === \"scale3d\" && f.every((o) => !Number.isNaN(+o)) && f.some((o) => o !== 1))\n e = e.scale(m, h, c);\n else if (\n // prop === \"scale\" && !Number.isNaN(x) && x !== 1 && z === undefined\n // prop === \"scale\" && !Number.isNaN(x) && [x, y].some((n) => n !== 1) &&\n r === \"scale\" && !Number.isNaN(m) && (m !== 1 || h !== 1) && c === void 0\n ) {\n const d = Number.isNaN(+h) ? m : h;\n e = e.scale(m, d, 1);\n } else if (r === \"skew\" && (m || !Number.isNaN(m) && h) && c === void 0)\n e = e.skew(m, h || 0);\n else if ([\"translate\", \"rotate\", \"scale\", \"skew\"].some(\n (o) => r.includes(o)\n ) && /[XYZ]/.test(r) && m && [h, c].every((o) => o === void 0))\n if (r === \"skewX\" || r === \"skewY\")\n e = e[r](m);\n else {\n const o = r.replace(/[XYZ]/, \"\"), d = r.replace(o, \"\"), A = [\"X\", \"Y\", \"Z\"].indexOf(d), M = o === \"scale\" ? 1 : 0, b = [\n A === 0 ? m : M,\n A === 1 ? m : M,\n A === 2 ? m : M\n ];\n e = e[o](...b);\n }\n else\n throw TypeError(n);\n }), e;\n}, x = (s, t) => t ? [s.a, s.b, s.c, s.d, s.e, s.f] : [\n s.m11,\n s.m12,\n s.m13,\n s.m14,\n s.m21,\n s.m22,\n s.m23,\n s.m24,\n s.m31,\n s.m32,\n s.m33,\n s.m34,\n s.m41,\n s.m42,\n s.m43,\n s.m44\n], Y = (s, t, e) => {\n const n = new y();\n return n.m41 = s, n.e = s, n.m42 = t, n.f = t, n.m43 = e, n;\n}, F = (s, t, e) => {\n const n = new y(), i = Math.PI / 180, r = s * i, a = t * i, l = e * i, m = Math.cos(r), h = -Math.sin(r), c = Math.cos(a), u = -Math.sin(a), f = Math.cos(l), w = -Math.sin(l), o = c * f, d = -c * w;\n n.m11 = o, n.a = o, n.m12 = d, n.b = d, n.m13 = u;\n const A = h * u * f + m * w;\n n.m21 = A, n.c = A;\n const M = m * f - h * u * w;\n return n.m22 = M, n.d = M, n.m23 = -h * c, n.m31 = h * w - m * u * f, n.m32 = h * f + m * u * w, n.m33 = m * c, n;\n}, T = (s, t, e, n) => {\n const i = new y(), r = Math.sqrt(s * s + t * t + e * e);\n if (r === 0)\n return i;\n const a = s / r, l = t / r, m = e / r, h = n * (Math.PI / 360), c = Math.sin(h), u = Math.cos(h), f = c * c, w = a * a, o = l * l, d = m * m, A = 1 - 2 * (o + d) * f;\n i.m11 = A, i.a = A;\n const M = 2 * (a * l * f + m * c * u);\n i.m12 = M, i.b = M, i.m13 = 2 * (a * m * f - l * c * u);\n const b = 2 * (l * a * f - m * c * u);\n i.m21 = b, i.c = b;\n const k = 1 - 2 * (d + w) * f;\n return i.m22 = k, i.d = k, i.m23 = 2 * (l * m * f + a * c * u), i.m31 = 2 * (m * a * f + l * c * u), i.m32 = 2 * (m * l * f - a * c * u), i.m33 = 1 - 2 * (w + o) * f, i;\n}, I = (s, t, e) => {\n const n = new y();\n return n.m11 = s, n.a = s, n.m22 = t, n.d = t, n.m33 = e, n;\n}, v = (s, t) => {\n const e = new y();\n if (s) {\n const n = s * Math.PI / 180, i = Math.tan(n);\n e.m21 = i, e.c = i;\n }\n if (t) {\n const n = t * Math.PI / 180, i = Math.tan(n);\n e.m12 = i, e.b = i;\n }\n return e;\n}, R = (s) => v(s, 0), D = (s) => v(0, s), N = (s, t) => {\n const e = t.m11 * s.m11 + t.m12 * s.m21 + t.m13 * s.m31 + t.m14 * s.m41, n = t.m11 * s.m12 + t.m12 * s.m22 + t.m13 * s.m32 + t.m14 * s.m42, i = t.m11 * s.m13 + t.m12 * s.m23 + t.m13 * s.m33 + t.m14 * s.m43, r = t.m11 * s.m14 + t.m12 * s.m24 + t.m13 * s.m34 + t.m14 * s.m44, a = t.m21 * s.m11 + t.m22 * s.m21 + t.m23 * s.m31 + t.m24 * s.m41, l = t.m21 * s.m12 + t.m22 * s.m22 + t.m23 * s.m32 + t.m24 * s.m42, m = t.m21 * s.m13 + t.m22 * s.m23 + t.m23 * s.m33 + t.m24 * s.m43, h = t.m21 * s.m14 + t.m22 * s.m24 + t.m23 * s.m34 + t.m24 * s.m44, c = t.m31 * s.m11 + t.m32 * s.m21 + t.m33 * s.m31 + t.m34 * s.m41, u = t.m31 * s.m12 + t.m32 * s.m22 + t.m33 * s.m32 + t.m34 * s.m42, f = t.m31 * s.m13 + t.m32 * s.m23 + t.m33 * s.m33 + t.m34 * s.m43, w = t.m31 * s.m14 + t.m32 * s.m24 + t.m33 * s.m34 + t.m34 * s.m44, o = t.m41 * s.m11 + t.m42 * s.m21 + t.m43 * s.m31 + t.m44 * s.m41, d = t.m41 * s.m12 + t.m42 * s.m22 + t.m43 * s.m32 + t.m44 * s.m42, A = t.m41 * s.m13 + t.m42 * s.m23 + t.m43 * s.m33 + t.m44 * s.m43, M = t.m41 * s.m14 + t.m42 * s.m24 + t.m43 * s.m34 + t.m44 * s.m44;\n return g([\n e,\n n,\n i,\n r,\n a,\n l,\n m,\n h,\n c,\n u,\n f,\n w,\n o,\n d,\n A,\n M\n ]);\n};\nclass y {\n /**\n * @constructor\n * @param init accepts all parameter configurations:\n * * valid CSS transform string,\n * * CSSMatrix/DOMMatrix instance,\n * * a 6/16 elements *Array*.\n */\n constructor(t) {\n return this.a = 1, this.b = 0, this.c = 0, this.d = 1, this.e = 0, this.f = 0, this.m11 = 1, this.m12 = 0, this.m13 = 0, this.m14 = 0, this.m21 = 0, this.m22 = 1, this.m23 = 0, this.m24 = 0, this.m31 = 0, this.m32 = 0, this.m33 = 1, this.m34 = 0, this.m41 = 0, this.m42 = 0, this.m43 = 0, this.m44 = 1, t ? this.setMatrixValue(t) : this;\n }\n /**\n * A `Boolean` whose value is `true` if the matrix is the identity matrix. The identity\n * matrix is one in which every value is 0 except those on the main diagonal from top-left\n * to bottom-right corner (in other words, where the offsets in each direction are equal).\n *\n * @return the current property value\n */\n get isIdentity() {\n return this.m11 === 1 && this.m12 === 0 && this.m13 === 0 && this.m14 === 0 && this.m21 === 0 && this.m22 === 1 && this.m23 === 0 && this.m24 === 0 && this.m31 === 0 && this.m32 === 0 && this.m33 === 1 && this.m34 === 0 && this.m41 === 0 && this.m42 === 0 && this.m43 === 0 && this.m44 === 1;\n }\n /**\n * A `Boolean` flag whose value is `true` if the matrix was initialized as a 2D matrix\n * and `false` if the matrix is 3D.\n *\n * @return the current property value\n */\n get is2D() {\n return this.m31 === 0 && this.m32 === 0 && this.m33 === 1 && this.m34 === 0 && this.m43 === 0 && this.m44 === 1;\n }\n /**\n * The `setMatrixValue` method replaces the existing matrix with one computed\n * in the browser. EG: `matrix(1,0.25,-0.25,1,0,0)`\n *\n * The method accepts any *Array* values, the result of\n * `DOMMatrix` instance method `toFloat64Array()` / `toFloat32Array()` calls\n * or `CSSMatrix` instance method `toArray()`.\n *\n * This method expects valid *matrix()* / *matrix3d()* string values, as well\n * as other transform functions like *translateX(10px)*.\n *\n * @param source\n * @return the matrix instance\n */\n setMatrixValue(t) {\n return typeof t == \"string\" && t.length && t !== \"none\" ? O(t) : Array.isArray(t) || t instanceof Float64Array || t instanceof Float32Array ? g(t) : typeof t == \"object\" ? X(t) : this;\n }\n /**\n * Returns a *Float32Array* containing elements which comprise the matrix.\n * The method can return either the 16 elements or the 6 elements\n * depending on the value of the `is2D` parameter.\n *\n * @param is2D *Array* representation of the matrix\n * @return an *Array* representation of the matrix\n */\n toFloat32Array(t) {\n return Float32Array.from(x(this, t));\n }\n /**\n * Returns a *Float64Array* containing elements which comprise the matrix.\n * The method can return either the 16 elements or the 6 elements\n * depending on the value of the `is2D` parameter.\n *\n * @param is2D *Array* representation of the matrix\n * @return an *Array* representation of the matrix\n */\n toFloat64Array(t) {\n return Float64Array.from(x(this, t));\n }\n /**\n * Creates and returns a string representation of the matrix in `CSS` matrix syntax,\n * using the appropriate `CSS` matrix notation.\n *\n * matrix3d *matrix3d(m11, m12, m13, m14, m21, ...)*\n * matrix *matrix(a, b, c, d, e, f)*\n *\n * @return a string representation of the matrix\n */\n toString() {\n const { is2D: t } = this, e = this.toFloat64Array(t).join(\", \");\n return `${t ? \"matrix\" : \"matrix3d\"}(${e})`;\n }\n /**\n * Returns a JSON representation of the `CSSMatrix` instance, a standard *Object*\n * that includes `{a,b,c,d,e,f}` and `{m11,m12,m13,..m44}` properties as well\n * as the `is2D` & `isIdentity` properties.\n *\n * The result can also be used as a second parameter for the `fromMatrix` static method\n * to load values into another matrix instance.\n *\n * @return an *Object* with all matrix values.\n */\n toJSON() {\n const { is2D: t, isIdentity: e } = this;\n return { ...this, is2D: t, isIdentity: e };\n }\n /**\n * The Multiply method returns a new CSSMatrix which is the result of this\n * matrix multiplied by the passed matrix, with the passed matrix to the right.\n * This matrix is not modified.\n *\n * @param m2 CSSMatrix\n * @return The resulted matrix.\n */\n multiply(t) {\n return N(this, t);\n }\n /**\n * The translate method returns a new matrix which is this matrix post\n * multiplied by a translation matrix containing the passed values. If the z\n * component is undefined, a 0 value is used in its place. This matrix is not\n * modified.\n *\n * @param x X component of the translation value.\n * @param y Y component of the translation value.\n * @param z Z component of the translation value.\n * @return The resulted matrix\n */\n translate(t, e, n) {\n const i = t;\n let r = e, a = n;\n return typeof r > \"u\" && (r = 0), typeof a > \"u\" && (a = 0), N(this, Y(i, r, a));\n }\n /**\n * The scale method returns a new matrix which is this matrix post multiplied by\n * a scale matrix containing the passed values. If the z component is undefined,\n * a 1 value is used in its place. If the y component is undefined, the x\n * component value is used in its place. This matrix is not modified.\n *\n * @param x The X component of the scale value.\n * @param y The Y component of the scale value.\n * @param z The Z component of the scale value.\n * @return The resulted matrix\n */\n scale(t, e, n) {\n const i = t;\n let r = e, a = n;\n return typeof r > \"u\" && (r = t), typeof a > \"u\" && (a = 1), N(this, I(i, r, a));\n }\n /**\n * The rotate method returns a new matrix which is this matrix post multiplied\n * by each of 3 rotation matrices about the major axes, first X, then Y, then Z.\n * If the y and z components are undefined, the x value is used to rotate the\n * object about the z axis, as though the vector (0,0,x) were passed. All\n * rotation values are in degrees. This matrix is not modified.\n *\n * @param rx The X component of the rotation, or Z if Y and Z are null.\n * @param ry The (optional) Y component of the rotation value.\n * @param rz The (optional) Z component of the rotation value.\n * @return The resulted matrix\n */\n rotate(t, e, n) {\n let i = t, r = e || 0, a = n || 0;\n return typeof t == \"number\" && typeof e > \"u\" && typeof n > \"u\" && (a = i, i = 0, r = 0), N(this, F(i, r, a));\n }\n /**\n * The rotateAxisAngle method returns a new matrix which is this matrix post\n * multiplied by a rotation matrix with the given axis and `angle`. The right-hand\n * rule is used to determine the direction of rotation. All rotation values are\n * in degrees. This matrix is not modified.\n *\n * @param x The X component of the axis vector.\n * @param y The Y component of the axis vector.\n * @param z The Z component of the axis vector.\n * @param angle The angle of rotation about the axis vector, in degrees.\n * @return The resulted matrix\n */\n rotateAxisAngle(t, e, n, i) {\n if ([t, e, n, i].some((r) => Number.isNaN(+r)))\n throw new TypeError(\"CSSMatrix: expecting 4 values\");\n return N(this, T(t, e, n, i));\n }\n /**\n * Specifies a skew transformation along the `x-axis` by the given angle.\n * This matrix is not modified.\n *\n * @param angle The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skewX(t) {\n return N(this, R(t));\n }\n /**\n * Specifies a skew transformation along the `y-axis` by the given angle.\n * This matrix is not modified.\n *\n * @param angle The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skewY(t) {\n return N(this, D(t));\n }\n /**\n * Specifies a skew transformation along both the `x-axis` and `y-axis`.\n * This matrix is not modified.\n *\n * @param angleX The X-angle amount in degrees to skew.\n * @param angleY The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skew(t, e) {\n return N(this, v(t, e));\n }\n /**\n * Transforms a specified vector using the matrix, returning a new\n * {x,y,z,w} Tuple *Object* comprising the transformed vector.\n * Neither the matrix nor the original vector are altered.\n *\n * The method is equivalent with `transformPoint()` method\n * of the `DOMMatrix` constructor.\n *\n * @param t Tuple with `{x,y,z,w}` components\n * @return the resulting Tuple\n */\n transformPoint(t) {\n const e = this.m11 * t.x + this.m21 * t.y + this.m31 * t.z + this.m41 * t.w, n = this.m12 * t.x + this.m22 * t.y + this.m32 * t.z + this.m42 * t.w, i = this.m13 * t.x + this.m23 * t.y + this.m33 * t.z + this.m43 * t.w, r = this.m14 * t.x + this.m24 * t.y + this.m34 * t.z + this.m44 * t.w;\n return t instanceof DOMPoint ? new DOMPoint(e, n, i, r) : {\n x: e,\n y: n,\n z: i,\n w: r\n };\n }\n}\np(y, \"Translate\", Y), p(y, \"Rotate\", F), p(y, \"RotateAxisAngle\", T), p(y, \"Scale\", I), p(y, \"SkewX\", R), p(y, \"SkewY\", D), p(y, \"Skew\", v), p(y, \"Multiply\", N), p(y, \"fromArray\", g), p(y, \"fromMatrix\", X), p(y, \"fromString\", O), p(y, \"toArray\", x), p(y, \"isCompatibleArray\", E), p(y, \"isCompatibleObject\", P);\nexport {\n y as default\n};\n//# sourceMappingURL=dommatrix.mjs.map\n","import { Options } from \"../interface\";\r\n\r\n/** SVGPathCommander default options */\r\nconst defaultOptions: Options = {\r\n origin: [0, 0, 0],\r\n round: 4,\r\n};\r\n\r\nexport default defaultOptions;\r\n","/** Segment params length */\r\nconst paramsCount = {\r\n a: 7,\r\n c: 6,\r\n h: 1,\r\n l: 2,\r\n m: 2,\r\n r: 4,\r\n q: 4,\r\n s: 4,\r\n t: 2,\r\n v: 1,\r\n z: 0,\r\n};\r\n\r\nexport default paramsCount;\r\n","import paramsCount from \"./paramsCount\";\r\nimport PathParser from \"./pathParser\";\r\nimport type { PathCommand, PathSegment, RelativeCommand } from \"../types\";\r\n\r\n/**\r\n * Breaks the parsing of a pathString once a segment is finalized.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst finalizeSegment = (path: PathParser) => {\r\n let pathCommand = path.pathValue[path.segmentStart] as PathCommand;\r\n let relativeCommand = pathCommand.toLowerCase() as RelativeCommand;\r\n const { data } = path;\r\n\r\n while (data.length >= paramsCount[relativeCommand]) {\r\n // overloaded `moveTo`\r\n // https://github.com/rveciana/svg-path-properties/blob/master/src/parse.ts\r\n if (relativeCommand === \"m\" && data.length > 2) {\r\n path.segments.push(\r\n [pathCommand as PathCommand | number].concat(\r\n data.splice(0, 2) as number[],\r\n ) as PathSegment,\r\n );\r\n relativeCommand = \"l\";\r\n pathCommand = pathCommand === \"m\" ? \"l\" : \"L\";\r\n } else {\r\n path.segments.push(\r\n [pathCommand as PathCommand | number].concat(\r\n data.splice(0, paramsCount[relativeCommand]) as number[],\r\n ) as PathSegment,\r\n );\r\n }\r\n\r\n if (!paramsCount[relativeCommand]) {\r\n break;\r\n }\r\n }\r\n};\r\nexport default finalizeSegment;\r\n","const error = \"SVGPathCommander Error\";\r\nexport default error;\r\n","import error from \"./error\";\r\nimport type PathParser from \"./pathParser\";\r\n\r\n/**\r\n * Validates an A (arc-to) specific path command value.\r\n * Usually a `large-arc-flag` or `sweep-flag`.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst scanFlag = (path: PathParser) => {\r\n const { index, pathValue } = path;\r\n const code = pathValue.charCodeAt(index);\r\n\r\n if (code === 0x30 /* 0 */) {\r\n path.param = 0;\r\n path.index += 1;\r\n return;\r\n }\r\n\r\n if (code === 0x31 /* 1 */) {\r\n path.param = 1;\r\n path.index += 1;\r\n return;\r\n }\r\n\r\n path.err = `${error}: invalid Arc flag \"${\r\n pathValue[index]\r\n }\", expecting 0 or 1 at index ${index}`;\r\n};\r\n\r\nexport default scanFlag;\r\n","import { DigitNumber } from \"../types\";\r\n\r\n/**\r\n * Checks if a character is a digit.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isDigit = (code: number): code is DigitNumber => {\r\n return code >= 48 && code <= 57; // 0..9\r\n};\r\nexport default isDigit;\r\n","const invalidPathValue = \"Invalid path value\";\r\nexport default invalidPathValue;\r\n","import isDigit from \"./isDigit\";\r\nimport invalidPathValue from \"./invalidPathValue\";\r\nimport error from \"./error\";\r\nimport type PathParser from \"./pathParser\";\r\n\r\n/**\r\n * Validates every character of the path string,\r\n * every path command, negative numbers or floating point numbers.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst scanParam = (path: PathParser) => {\r\n const { max, pathValue, index: start } = path;\r\n let index = start;\r\n let zeroFirst = false;\r\n let hasCeiling = false;\r\n let hasDecimal = false;\r\n let hasDot = false;\r\n let ch;\r\n\r\n if (index >= max) {\r\n path.err =\r\n `${error}: ${invalidPathValue} at index ${index}, \"pathValue\" is missing param`;\r\n return;\r\n }\r\n ch = pathValue.charCodeAt(index);\r\n\r\n if (ch === 0x2b /* + */ || ch === 0x2d /* - */) {\r\n index += 1;\r\n // ch = (index < max) ? pathValue.charCodeAt(index) : 0;\r\n ch = pathValue.charCodeAt(index);\r\n }\r\n\r\n // This logic is shamelessly borrowed from Esprima\r\n // https://github.com/ariya/esprimas\r\n if (!isDigit(ch) && ch !== 0x2e /* . */) {\r\n // path.err = 'SvgPath: param should start with 0..9 or `.` (at pos ' + index + ')';\r\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\r\n pathValue[index]\r\n }\" is not a number`;\r\n return;\r\n }\r\n\r\n if (ch !== 0x2e /* . */) {\r\n zeroFirst = ch === 0x30 /* 0 */;\r\n index += 1;\r\n\r\n ch = pathValue.charCodeAt(index);\r\n\r\n if (zeroFirst && index < max) {\r\n // decimal number starts with '0' such as '09' is illegal.\r\n if (ch && isDigit(ch)) {\r\n // path.err = 'SvgPath: numbers started with `0` such as `09`\r\n // are illegal (at pos ' + start + ')';\r\n path.err = `${error}: ${invalidPathValue} at index ${start}, \"${\r\n pathValue[start]\r\n }\" illegal number`;\r\n return;\r\n }\r\n }\r\n\r\n while (index < max && isDigit(pathValue.charCodeAt(index))) {\r\n index += 1;\r\n hasCeiling = true;\r\n }\r\n\r\n ch = pathValue.charCodeAt(index);\r\n }\r\n\r\n if (ch === 0x2e /* . */) {\r\n hasDot = true;\r\n index += 1;\r\n while (isDigit(pathValue.charCodeAt(index))) {\r\n index += 1;\r\n hasDecimal = true;\r\n }\r\n\r\n ch = pathValue.charCodeAt(index);\r\n }\r\n\r\n if (ch === 0x65 /* e */ || ch === 0x45 /* E */) {\r\n if (hasDot && !hasCeiling && !hasDecimal) {\r\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\r\n pathValue[index]\r\n }\" invalid float exponent`;\r\n return;\r\n }\r\n\r\n index += 1;\r\n\r\n ch = pathValue.charCodeAt(index);\r\n\r\n if (ch === 0x2b /* + */ || ch === 0x2d /* - */) {\r\n index += 1;\r\n }\r\n if (index < max && isDigit(pathValue.charCodeAt(index))) {\r\n while (index < max && isDigit(pathValue.charCodeAt(index))) {\r\n index += 1;\r\n }\r\n } else {\r\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\r\n pathValue[index]\r\n }\" invalid integer exponent`;\r\n return;\r\n }\r\n }\r\n\r\n path.index = index;\r\n path.param = +path.pathValue.slice(start, index);\r\n};\r\nexport default scanParam;\r\n","import type { SpaceNumber } from \"../types\";\r\n\r\n/**\r\n * Checks if the character is a space.\r\n *\r\n * @param ch the character to check\r\n * @returns check result\r\n */\r\n\r\nconst isSpace = (ch: number): ch is SpaceNumber => {\r\n const allSpaces = [\r\n // Special spaces\r\n 0x1680,\r\n 0x180e,\r\n 0x2000,\r\n 0x2001,\r\n 0x2002,\r\n 0x2003,\r\n 0x2004,\r\n 0x2005,\r\n 0x2006,\r\n 0x2007,\r\n 0x2008,\r\n 0x2009,\r\n 0x200a,\r\n 0x202f,\r\n 0x205f,\r\n 0x3000,\r\n 0xfeff,\r\n // Line terminators\r\n 0x0a,\r\n 0x0d,\r\n 0x2028,\r\n 0x2029,\r\n // White spaces\r\n 0x20,\r\n 0x09,\r\n 0x0b,\r\n 0x0c,\r\n 0xa0,\r\n ];\r\n\r\n return allSpaces.includes(ch);\r\n};\r\nexport default isSpace;\r\n","import isSpace from \"./isSpace\";\r\nimport type PathParser from \"./pathParser\";\r\n\r\n/**\r\n * Points the parser to the next character in the\r\n * path string every time it encounters any kind of\r\n * space character.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst skipSpaces = (path: PathParser) => {\r\n const { pathValue, max } = path;\r\n while (path.index < max && isSpace(pathValue.charCodeAt(path.index))) {\r\n path.index += 1;\r\n }\r\n};\r\nexport default skipSpaces;\r\n","import type { PathCommandNumber } from \"../types\";\r\n\r\n/**\r\n * Checks if the character is a path command.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isPathCommand = (code: number): code is PathCommandNumber => {\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\r\n switch (code | 0x20) {\r\n case 0x6d /* m */:\r\n case 0x7a /* z */:\r\n case 0x6c /* l */:\r\n case 0x68 /* h */:\r\n case 0x76 /* v */:\r\n case 0x63 /* c */:\r\n case 0x73 /* s */:\r\n case 0x71 /* q */:\r\n case 0x74 /* t */:\r\n case 0x61 /* a */:\r\n // case 0x72/* r */:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n};\r\nexport default isPathCommand;\r\n","import isDigit from \"./isDigit\";\r\nimport type { DigitNumber } from \"../types\";\r\n\r\n/**\r\n * Checks if the character is or belongs to a number.\r\n * [0-9]|+|-|.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isDigitStart = (\r\n code: number,\r\n): code is DigitNumber | 0x2b | 0x2d | 0x2e => {\r\n return isDigit(code) /* 0..9 */ || code === 0x2b /* + */ ||\r\n code === 0x2d /* - */ || code === 0x2e; /* . */\r\n};\r\nexport default isDigitStart;\r\n","/**\r\n * Checks if the character is an A (arc-to) path command.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isArcCommand = (code: number): code is 0x61 => {\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\r\n return (code | 0x20) === 0x61;\r\n};\r\nexport default isArcCommand;\r\n","/**\r\n * Checks if the character is a MoveTo command.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isMoveCommand = (code: number): code is 0x6d | 0x4d => {\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\r\n switch (code | 0x20) {\r\n case 0x6d /* m */:\r\n case 0x4d /* M */:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n};\r\nexport default isMoveCommand;\r\n","import finalizeSegment from \"./finalizeSegment\";\r\nimport paramCounts from \"./paramsCount\";\r\nimport scanFlag from \"./scanFlag\";\r\nimport scanParam from \"./scanParam\";\r\nimport skipSpaces from \"./skipSpaces\";\r\nimport isPathCommand from \"./isPathCommand\";\r\nimport isDigitStart from \"./isDigitStart\";\r\nimport isArcCommand from \"./isArcCommand\";\r\nimport isMoveCommand from \"./isMoveCommand\";\r\nimport invalidPathValue from \"./invalidPathValue\";\r\nimport error from \"./error\";\r\n\r\nimport type PathParser from \"./pathParser\";\r\nimport type { PathSegment, RelativeCommand } from \"../types\";\r\n\r\n/**\r\n * Scans every character in the path string to determine\r\n * where a segment starts and where it ends.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst scanSegment = (path: PathParser) => {\r\n const { max, pathValue, index, segments } = path;\r\n const cmdCode = pathValue.charCodeAt(index);\r\n const reqParams =\r\n paramCounts[pathValue[index].toLowerCase() as RelativeCommand];\r\n\r\n path.segmentStart = index;\r\n\r\n // segments always start with a path command\r\n if (!isPathCommand(cmdCode)) {\r\n path.err = `${error}: ${invalidPathValue} \"${\r\n pathValue[index]\r\n }\" is not a path command at index ${index}`;\r\n return;\r\n }\r\n\r\n // after a Z segment, we only expect a MoveTo path command\r\n const lastSegment = segments[segments.length - 1] as PathSegment | undefined;\r\n if (\r\n !isMoveCommand(cmdCode) && lastSegment?.[0]?.toLocaleLowerCase() === \"z\"\r\n ) {\r\n path.err = `${error}: ${invalidPathValue} \"${\r\n pathValue[index]\r\n }\" is not a MoveTo path command at index ${index}`;\r\n return;\r\n }\r\n\r\n path.index += 1;\r\n skipSpaces(path);\r\n\r\n path.data = [];\r\n\r\n if (!reqParams) {\r\n // Z\r\n finalizeSegment(path);\r\n return;\r\n }\r\n\r\n for (;;) {\r\n for (let i = reqParams; i > 0; i -= 1) {\r\n if (isArcCommand(cmdCode) && (i === 3 || i === 4)) scanFlag(path);\r\n else scanParam(path);\r\n\r\n if (path.err.length) {\r\n return;\r\n }\r\n path.data.push(path.param);\r\n\r\n skipSpaces(path);\r\n\r\n // after ',' param is mandatory\r\n if (\r\n path.index < max && pathValue.charCodeAt(path.index) === 0x2c /* , */\r\n ) {\r\n path.index += 1;\r\n skipSpaces(path);\r\n }\r\n }\r\n\r\n if (path.index >= path.max) {\r\n break;\r\n }\r\n\r\n // Stop on next segment\r\n if (!isDigitStart(pathValue.charCodeAt(path.index))) {\r\n break;\r\n }\r\n }\r\n\r\n finalizeSegment(path);\r\n};\r\nexport default scanSegment;\r\n","import type { PathArray, PathSegment } from \"../types\";\r\n\r\n/**\r\n * The `PathParser` is used by the `parsePathString` static method\r\n * to generate a `pathArray`.\r\n *\r\n * @param pathString\r\n */\r\nexport default class PathParser {\r\n declare segments: PathArray | PathSegment[];\r\n declare pathValue: string;\r\n declare max: number;\r\n declare index: number;\r\n declare param: number;\r\n declare segmentStart: number;\r\n declare data: (string | number)[];\r\n declare err: string;\r\n\r\n constructor(pathString: string) {\r\n this.segments = [];\r\n this.pathValue = pathString;\r\n this.max = pathString.length;\r\n this.index = 0;\r\n this.param = 0.0;\r\n this.segmentStart = 0;\r\n this.data = [];\r\n this.err = \"\";\r\n }\r\n}\r\n","import scanSegment from \"./scanSegment\";\r\nimport skipSpaces from \"./skipSpaces\";\r\nimport PathParser from \"./pathParser\";\r\nimport type { PathArray } from \"../types\";\r\n\r\n/**\r\n * Parses a path string value and returns an array\r\n * of segments we like to call `pathArray`.\r\n *\r\n * @param pathInput the string to be parsed\r\n * @returns the resulted `pathArray` or error string\r\n */\r\nconst parsePathString = (pathInput: string | T) => {\r\n if (typeof pathInput !== \"string\") {\r\n return pathInput.slice(0) as typeof pathInput;\r\n }\r\n\r\n const path = new PathParser(pathInput);\r\n\r\n skipSpaces(path);\r\n\r\n while (path.index < path.max && !path.err.length) {\r\n scanSegment(path);\r\n }\r\n\r\n if (path?.err.length) {\r\n throw TypeError(path.err);\r\n }\r\n // force absolute first M\r\n path.segments[0][0]='M';\r\n return path.segments as PathArray;\r\n};\r\n\r\nexport default parsePathString;\r\n","import type {\r\n AbsoluteCommand,\r\n AbsoluteSegment,\r\n ASegment,\r\n CSegment,\r\n HSegment,\r\n LSegment,\r\n MSegment,\r\n PathSegment,\r\n QSegment,\r\n SSegment,\r\n TSegment,\r\n VSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Returns an absolute segment of a `PathArray` object.\r\n *\r\n * @param segment the segment object\r\n * @param index the segment index\r\n * @param lastX the last known X value\r\n * @param lastY the last known Y value\r\n * @returns the absolute segment\r\n */\r\nconst absolutizeSegment = (\r\n segment: PathSegment,\r\n index: number,\r\n lastX: number,\r\n lastY: number,\r\n) => {\r\n const [pathCommand] = segment;\r\n const absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\r\n const isAbsolute = absCommand === pathCommand;\r\n\r\n /* istanbul ignore else @preserve */\r\n if (index === 0 || isAbsolute) return segment as MSegment | AbsoluteSegment;\r\n // const values = segment.slice(1) as number[];\r\n if (absCommand === \"A\") {\r\n return [\r\n absCommand,\r\n segment[1],\r\n segment[2],\r\n segment[3],\r\n segment[4],\r\n segment[5],\r\n (segment as ASegment)[6] + lastX,\r\n (segment as ASegment)[7] + lastY,\r\n ] as ASegment;\r\n } else if (absCommand === \"V\") {\r\n return [absCommand, (segment as VSegment)[1] + lastY] as VSegment;\r\n } else if (absCommand === \"H\") {\r\n return [absCommand, (segment as HSegment)[1] + lastX] as HSegment;\r\n } else if (absCommand === \"L\") {\r\n return [\r\n absCommand,\r\n (segment as LSegment)[1] + lastX,\r\n (segment as LSegment)[2] + lastY,\r\n ] as LSegment;\r\n } else {\r\n // use brakets for `eslint: no-case-declaration`\r\n // https://stackoverflow.com/a/50753272/803358\r\n const absValues = [] as number[];\r\n const seglen = segment.length;\r\n for (let j = 1; j < seglen; j += 1) {\r\n absValues.push((segment[j] as number) + (j % 2 ? lastX : lastY));\r\n }\r\n // for c, s, q, t\r\n return [absCommand as typeof absCommand | number].concat(absValues) as\r\n | MSegment\r\n | QSegment\r\n | TSegment\r\n | SSegment\r\n | CSegment;\r\n }\r\n};\r\nexport default absolutizeSegment;\r\n","// import paramsParser from '../parser/paramsParser';\r\nimport type {\r\n AbsoluteCommand,\r\n IteratorCallback,\r\n PathArray,\r\n PathCommand,\r\n PathSegment,\r\n} from \"../types\";\r\n\r\nconst iterate = (\r\n path: PathArray,\r\n iterator: IteratorCallback,\r\n) => {\r\n let pathLen = path.length;\r\n let segment: PathSegment;\r\n let pathCommand = \"M\" as PathCommand;\r\n let absCommand = \"M\" as AbsoluteCommand;\r\n let isRelative = false;\r\n let x = 0;\r\n let y = 0;\r\n let mx = 0;\r\n let my = 0;\r\n let segLen = 0;\r\n\r\n for (let i = 0; i < pathLen; i += 1) {\r\n segment = path[i];\r\n [pathCommand] = segment;\r\n segLen = segment.length;\r\n absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\r\n isRelative = absCommand !== pathCommand;\r\n\r\n const iteratorResult = iterator(segment, i, x, y);\r\n // some methods like getPointAtLength would like to break\r\n // when task is complete\r\n if (iteratorResult === false) {\r\n break;\r\n }\r\n\r\n // segment = path[i];\r\n if (absCommand === \"Z\") {\r\n x = mx;\r\n y = my;\r\n } else if (absCommand === \"H\") {\r\n x = (segment[1] as number) + (isRelative ? x : 0);\r\n } else if (absCommand === \"V\") {\r\n y = (segment[1] as number) + (isRelative ? y : 0);\r\n } else {\r\n x = (segment[segLen - 2] as number) + (isRelative ? x : 0);\r\n y = (segment[segLen - 1] as number) + (isRelative ? y : 0);\r\n\r\n if (absCommand === \"M\") {\r\n mx = x;\r\n my = y;\r\n }\r\n }\r\n\r\n if (iteratorResult) {\r\n path[i] = iteratorResult;\r\n if (iteratorResult[0] === \"C\") {\r\n pathLen = path.length;\r\n }\r\n }\r\n }\r\n return path as T;\r\n};\r\n\r\nexport default iterate;\r\n","import parsePathString from \"../parser/parsePathString\";\r\nimport absolutizeSegment from \"../process/absolutizeSegment\";\r\nimport type { AbsoluteArray, PathArray } from \"../types\";\r\nimport iterate from \"../process/iterate\";\r\n\r\n/**\r\n * Parses a path string value or object and returns an array\r\n * of segments, all converted to absolute values.\r\n *\r\n * @param pathInput the path string | object\r\n * @returns the resulted `pathArray` with absolute values\r\n */\r\nconst pathToAbsolute = (pathInput: string | PathArray) => {\r\n const path = parsePathString(pathInput);\r\n\r\n return iterate(path, absolutizeSegment);\r\n};\r\nexport default pathToAbsolute;\r\n","import type {\r\n aSegment,\r\n cSegment,\r\n hSegment,\r\n lSegment,\r\n MSegment,\r\n PathSegment,\r\n qSegment,\r\n RelativeCommand,\r\n RelativeSegment,\r\n sSegment,\r\n tSegment,\r\n vSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Returns a relative segment of a `PathArray` object.\r\n *\r\n * @param segment the segment object\r\n * @param index the segment index\r\n * @param lastX the last known X value\r\n * @param lastY the last known Y value\r\n * @returns the relative segment\r\n */\r\nconst relativizeSegment = (\r\n segment: PathSegment,\r\n index: number,\r\n lastX: number,\r\n lastY: number,\r\n) => {\r\n const [pathCommand] = segment;\r\n const relCommand = pathCommand.toLowerCase() as RelativeCommand;\r\n const isRelative = pathCommand === relCommand;\r\n\r\n /* istanbul ignore else @preserve */\r\n if (index === 0 || isRelative) return segment as MSegment | RelativeSegment;\r\n\r\n if (relCommand === \"a\") {\r\n return [\r\n relCommand,\r\n segment[1],\r\n segment[2],\r\n segment[3],\r\n segment[4],\r\n segment[5],\r\n (segment as aSegment)[6] - lastX,\r\n (segment as aSegment)[7] - lastY,\r\n ] as aSegment;\r\n } else if (relCommand === \"v\") {\r\n return [relCommand, (segment as vSegment)[1] - lastY] as vSegment;\r\n } else if (relCommand === \"h\") {\r\n return [relCommand, (segment as hSegment)[1] - lastX] as hSegment;\r\n } else if (relCommand === \"l\") {\r\n return [\r\n relCommand,\r\n (segment as lSegment)[1] - lastX,\r\n (segment as lSegment)[2] - lastY,\r\n ] as lSegment;\r\n } else {\r\n // use brakets for `eslint: no-case-declaration`\r\n // https://stackoverflow.com/a/50753272/803358\r\n const relValues = [] as number[];\r\n const seglen = segment.length;\r\n for (let j = 1; j < seglen; j += 1) {\r\n relValues.push((segment[j] as number) - (j % 2 ? lastX : lastY));\r\n }\r\n // for c, s, q, t\r\n return [relCommand as RelativeCommand | number].concat(relValues) as\r\n | qSegment\r\n | tSegment\r\n | sSegment\r\n | cSegment;\r\n }\r\n};\r\n\r\nexport default relativizeSegment;\r\n","import type { PathArray, RelativeArray } from \"../types\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport iterate from \"../process/iterate\";\r\nimport relativizeSegment from \"../process/relativizeSegment\";\r\n\r\n/**\r\n * Parses a path string value or object and returns an array\r\n * of segments, all converted to relative values.\r\n *\r\n * @param pathInput the path string | object\r\n * @returns the resulted `pathArray` with relative values\r\n */\r\nconst pathToRelative = (pathInput: string | PathArray): RelativeArray => {\r\n const path = parsePathString(pathInput);\r\n\r\n return iterate(path, relativizeSegment);\r\n};\r\nexport default pathToRelative;\r\n","/**\r\n * Returns an {x,y} vector rotated by a given\r\n * angle in radian.\r\n *\r\n * @param x the initial vector x\r\n * @param y the initial vector y\r\n * @param rad the radian vector angle\r\n * @returns the rotated vector\r\n */\r\nconst rotateVector = (\r\n x: number,\r\n y: number,\r\n rad: number,\r\n): { x: number; y: number } => {\r\n const { sin, cos } = Math;\r\n const X = x * cos(rad) - y * sin(rad);\r\n const Y = x * sin(rad) + y * cos(rad);\r\n return { x: X, y: Y };\r\n};\r\n\r\nexport default rotateVector;\r\n","import rotateVector from \"../math/rotateVector\";\r\n\r\n/**\r\n * Converts A (arc-to) segments to C (cubic-bezier-to).\r\n *\r\n * For more information of where this math came from visit:\r\n * http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\r\n *\r\n * @param X1 the starting x position\r\n * @param Y1 the starting y position\r\n * @param RX x-radius of the arc\r\n * @param RY y-radius of the arc\r\n * @param angle x-axis-rotation of the arc\r\n * @param LAF large-arc-flag of the arc\r\n * @param SF sweep-flag of the arc\r\n * @param X2 the ending x position\r\n * @param Y2 the ending y position\r\n * @param recursive the parameters needed to split arc into 2 segments\r\n * @return the resulting cubic-bezier segment(s)\r\n */\r\nconst arcToCubic = (\r\n X1: number,\r\n Y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n X2: number,\r\n Y2: number,\r\n recursive?: [number, number, number, number],\r\n): number[] => {\r\n let x1 = X1;\r\n let y1 = Y1;\r\n let rx = RX;\r\n let ry = RY;\r\n let x2 = X2;\r\n let y2 = Y2;\r\n // for more information of where this Math came from visit:\r\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\r\n const d120 = (Math.PI * 120) / 180;\r\n\r\n const rad = (Math.PI / 180) * (+angle || 0);\r\n let res = [] as number[];\r\n let xy;\r\n let f1;\r\n let f2;\r\n let cx;\r\n let cy;\r\n\r\n if (!recursive) {\r\n xy = rotateVector(x1, y1, -rad);\r\n x1 = xy.x;\r\n y1 = xy.y;\r\n xy = rotateVector(x2, y2, -rad);\r\n x2 = xy.x;\r\n y2 = xy.y;\r\n\r\n const x = (x1 - x2) / 2;\r\n const y = (y1 - y2) / 2;\r\n let h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\r\n if (h > 1) {\r\n h = Math.sqrt(h);\r\n rx *= h;\r\n ry *= h;\r\n }\r\n const rx2 = rx * rx;\r\n const ry2 = ry * ry;\r\n\r\n const k = (LAF === SF ? -1 : 1) *\r\n Math.sqrt(\r\n Math.abs(\r\n (rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x),\r\n ),\r\n );\r\n\r\n cx = (k * rx * y) / ry + (x1 + x2) / 2;\r\n cy = (k * -ry * x) / rx + (y1 + y2) / 2;\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\r\n f1 = Math.asin(((((y1 - cy) / ry) * 10 ** 9) >> 0) / 10 ** 9);\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\r\n f2 = Math.asin(((((y2 - cy) / ry) * 10 ** 9) >> 0) / 10 ** 9);\r\n\r\n f1 = x1 < cx ? Math.PI - f1 : f1;\r\n f2 = x2 < cx ? Math.PI - f2 : f2;\r\n if (f1 < 0) f1 = Math.PI * 2 + f1;\r\n if (f2 < 0) f2 = Math.PI * 2 + f2;\r\n if (SF && f1 > f2) {\r\n f1 -= Math.PI * 2;\r\n }\r\n if (!SF && f2 > f1) {\r\n f2 -= Math.PI * 2;\r\n }\r\n } else {\r\n [f1, f2, cx, cy] = recursive;\r\n }\r\n let df = f2 - f1;\r\n if (Math.abs(df) > d120) {\r\n const f2old = f2;\r\n const x2old = x2;\r\n const y2old = y2;\r\n f2 = f1 + d120 * (SF && f2 > f1 ? 1 : -1);\r\n x2 = cx + rx * Math.cos(f2);\r\n y2 = cy + ry * Math.sin(f2);\r\n res = arcToCubic(x2, y2, rx, ry, angle, 0, SF, x2old, y2old, [\r\n f2,\r\n f2old,\r\n cx,\r\n cy,\r\n ]);\r\n }\r\n df = f2 - f1;\r\n const c1 = Math.cos(f1);\r\n const s1 = Math.sin(f1);\r\n const c2 = Math.cos(f2);\r\n const s2 = Math.sin(f2);\r\n const t = Math.tan(df / 4);\r\n const hx = (4 / 3) * rx * t;\r\n const hy = (4 / 3) * ry * t;\r\n const m1 = [x1, y1];\r\n const m2 = [x1 + hx * s1, y1 - hy * c1];\r\n const m3 = [x2 + hx * s2, y2 - hy * c2];\r\n const m4 = [x2, y2];\r\n m2[0] = 2 * m1[0] - m2[0];\r\n m2[1] = 2 * m1[1] - m2[1];\r\n if (recursive) {\r\n return [m2[0], m2[1], m3[0], m3[1], m4[0], m4[1]].concat(res);\r\n }\r\n res = [m2[0], m2[1], m3[0], m3[1], m4[0], m4[1]].concat(res);\r\n const newres = [];\r\n for (let i = 0, ii = res.length; i < ii; i += 1) {\r\n newres[i] = i % 2\r\n ? rotateVector(res[i - 1], res[i], rad).y\r\n : rotateVector(res[i], res[i + 1], rad).x;\r\n }\r\n return newres;\r\n};\r\nexport default arcToCubic;\r\n","/**\r\n * Converts a Q (quadratic-bezier) segment to C (cubic-bezier).\r\n *\r\n * @param x1 curve start x\r\n * @param y1 curve start y\r\n * @param qx control point x\r\n * @param qy control point y\r\n * @param x2 curve end x\r\n * @param y2 curve end y\r\n * @returns the cubic-bezier segment\r\n */\r\nconst quadToCubic = (\r\n x1: number,\r\n y1: number,\r\n qx: number,\r\n qy: number,\r\n x2: number,\r\n y2: number,\r\n): [number, number, number, number, number, number] => {\r\n const r13 = 1 / 3;\r\n const r23 = 2 / 3;\r\n return [\r\n r13 * x1 + r23 * qx, // cpx1\r\n r13 * y1 + r23 * qy, // cpy1\r\n r13 * x2 + r23 * qx, // cpx2\r\n r13 * y2 + r23 * qy, // cpy2\r\n x2,\r\n y2, // x,y\r\n ];\r\n};\r\nexport default quadToCubic;\r\n","import { PointTuple } from \"../types\";\r\n\r\n/**\r\n * Returns the coordinates of a specified distance\r\n * ratio between two points.\r\n *\r\n * @param a the first point coordinates\r\n * @param b the second point coordinates\r\n * @param t the ratio\r\n * @returns the midpoint coordinates\r\n */\r\nconst midPoint = (a: PointTuple, b: PointTuple, t: number): PointTuple => {\r\n const [ax, ay] = a;\r\n const [bx, by] = b;\r\n return [ax + (bx - ax) * t, ay + (by - ay) * t];\r\n};\r\n\r\nexport default midPoint;\r\n","import midPoint from \"../math/midPoint\";\r\n\r\n/**\r\n * Converts an L (line-to) segment to C (cubic-bezier).\r\n *\r\n * @param x1 line start x\r\n * @param y1 line start y\r\n * @param x2 line end x\r\n * @param y2 line end y\r\n * @returns the cubic-bezier segment\r\n */\r\nconst lineToCubic = (x1: number, y1: number, x2: number, y2: number) => {\r\n const c1 = midPoint([x1, y1], [x2, y2], 1.0 / 3.0);\r\n const c2 = midPoint([x1, y1], [x2, y2], 2.0 / 3.0);\r\n return [c1[0], c1[1], c2[0], c2[1], x2, y2];\r\n};\r\nexport default lineToCubic;\r\n","import arcToCubic from \"./arcToCubic\";\r\nimport quadToCubic from \"./quadToCubic\";\r\nimport lineToCubic from \"./lineToCubic\";\r\nimport type { CSegment, MSegment, PathSegment } from \"../types\";\r\nimport type { ParserParams } from \"../interface\";\r\n\r\n/**\r\n * Converts any segment to C (cubic-bezier).\r\n *\r\n * @param segment the source segment\r\n * @param params the source segment parameters\r\n * @returns the cubic-bezier segment\r\n */\r\nconst segmentToCubic = (segment: PathSegment, params: ParserParams) => {\r\n const [pathCommand] = segment;\r\n const values = segment.slice(1).map(Number);\r\n const [x, y] = values;\r\n // let args;\r\n const { x1: px1, y1: py1, x: px, y: py } = params;\r\n\r\n if (!\"TQ\".includes(pathCommand)) {\r\n params.qx = null;\r\n params.qy = null;\r\n }\r\n\r\n if (pathCommand === \"M\") {\r\n params.x = x;\r\n params.y = y;\r\n return segment;\r\n } else if (pathCommand === \"A\") {\r\n return [\"C\" as string | number].concat(\r\n arcToCubic(\r\n px1,\r\n py1,\r\n values[0],\r\n values[1],\r\n values[2],\r\n values[3],\r\n values[4],\r\n values[5],\r\n values[6],\r\n ),\r\n ) as CSegment;\r\n } else if (pathCommand === \"Q\") {\r\n params.qx = x;\r\n params.qy = y;\r\n return [\"C\" as string | number].concat(\r\n quadToCubic(px1, py1, values[0], values[1], values[2], values[3]),\r\n ) as CSegment;\r\n } else if (pathCommand === \"L\") {\r\n return [\"C\" as string | number].concat(\r\n lineToCubic(px1, py1, x, y),\r\n ) as CSegment;\r\n } else if (pathCommand === \"Z\") {\r\n return [\"C\" as string | number].concat(\r\n lineToCubic(px1, py1, px, py),\r\n ) as CSegment;\r\n }\r\n\r\n return segment as MSegment | CSegment;\r\n};\r\nexport default segmentToCubic;\r\n","import type { ParserParams } from \"../interface\";\r\nimport type {\r\n ASegment,\r\n CSegment,\r\n HSegment,\r\n LSegment,\r\n MSegment,\r\n NormalSegment,\r\n PathCommand,\r\n PathSegment,\r\n PointTuple,\r\n QSegment,\r\n VSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Normalizes a single segment of a `pathArray` object.\r\n *\r\n * @param segment the segment object\r\n * @param params the normalization parameters\r\n * @returns the normalized segment\r\n */\r\nconst normalizeSegment = (segment: PathSegment, params: ParserParams) => {\r\n const [pathCommand] = segment;\r\n const absCommand = pathCommand.toUpperCase();\r\n const isRelative = pathCommand !== absCommand;\r\n const { x1: px1, y1: py1, x2: px2, y2: py2, x, y } = params;\r\n const values = segment.slice(1) as number[];\r\n let absValues = values.map((n, j) => n + (isRelative ? (j % 2 ? y : x) : 0));\r\n\r\n if (!\"TQ\".includes(absCommand)) {\r\n // optional but good to be cautious\r\n params.qx = null;\r\n params.qy = null;\r\n }\r\n\r\n // istanbul ignore else @preserve\r\n if (absCommand === \"A\") {\r\n absValues = values.slice(0, -2).concat(\r\n values[5] + (isRelative ? x : 0),\r\n values[6] + (isRelative ? y : 0),\r\n );\r\n\r\n return [\"A\" as PathCommand | number].concat(absValues) as ASegment;\r\n } else if (absCommand === \"H\") {\r\n return [\r\n \"L\",\r\n (segment as HSegment)[1] + (isRelative ? x : 0),\r\n py1,\r\n ] as LSegment;\r\n } else if (absCommand === \"V\") {\r\n return [\r\n \"L\",\r\n px1,\r\n (segment as VSegment)[1] + (isRelative ? y : 0),\r\n ] as LSegment;\r\n } else if (absCommand === \"L\") {\r\n return [\r\n \"L\",\r\n (segment as LSegment)[1] + (isRelative ? x : 0),\r\n (segment as LSegment)[2] + (isRelative ? y : 0),\r\n ] as LSegment;\r\n } else if (absCommand === \"M\") {\r\n return [\r\n \"M\",\r\n (segment as MSegment)[1] + (isRelative ? x : 0),\r\n (segment as MSegment)[2] + (isRelative ? y : 0),\r\n ] as MSegment;\r\n } else if (absCommand === \"C\") {\r\n return [\"C\" as PathCommand | number].concat(absValues) as CSegment;\r\n } else if (absCommand === \"S\") {\r\n const x1 = px1 * 2 - px2;\r\n const y1 = py1 * 2 - py2;\r\n params.x1 = x1;\r\n params.y1 = y1;\r\n return [\"C\", x1, y1].concat(absValues) as CSegment;\r\n } else if (absCommand === \"T\") {\r\n const qx = px1 * 2 - (params.qx ? params.qx : /* istanbul ignore next */ 0);\r\n const qy = py1 * 2 - (params.qy ? params.qy : /* istanbul ignore next */ 0);\r\n params.qx = qx;\r\n params.qy = qy;\r\n return [\"Q\", qx, qy].concat(absValues) as QSegment;\r\n } else if (absCommand === \"Q\") {\r\n const [nqx, nqy] = absValues as PointTuple;\r\n params.qx = nqx;\r\n params.qy = nqy;\r\n return [\"Q\" as PathCommand | number].concat(absValues) as QSegment;\r\n } else if (absCommand === \"Z\") {\r\n return [\"Z\"] as NormalSegment;\r\n }\r\n\r\n // istanbul ignore next @preserve\r\n return segment as NormalSegment;\r\n};\r\nexport default normalizeSegment;\r\n","import type { ParserParams } from \"../interface\";\r\n\r\nconst paramsParser: ParserParams = {\r\n x1: 0,\r\n y1: 0,\r\n x2: 0,\r\n y2: 0,\r\n x: 0,\r\n y: 0,\r\n qx: null,\r\n qy: null,\r\n};\r\n\r\nexport default paramsParser;\r\n","import segmentToCubic from \"../process/segmentToCubic\";\r\nimport { AbsoluteCommand, CSegment, CurveArray, PathArray } from \"../types\";\r\nimport iterate from \"../process/iterate\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport normalizeSegment from \"../process/normalizeSegment\";\r\nimport paramsParser from \"../parser/paramsParser\";\r\n\r\n/**\r\n * Parses a path string value or 'pathArray' and returns a new one\r\n * in which all segments are converted to cubic-bezier.\r\n *\r\n * In addition, un-necessary `Z` segment is removed if previous segment\r\n * extends to the `M` segment.\r\n *\r\n * @param pathInput the string to be parsed or 'pathArray'\r\n * @returns the resulted `pathArray` converted to cubic-bezier\r\n */\r\nconst pathToCurve = (pathInput: string | PathArray): CurveArray => {\r\n const params = { ...paramsParser };\r\n const path = parsePathString(pathInput);\r\n\r\n return iterate(path, (seg, index, lastX, lastY) => {\r\n params.x = lastX;\r\n params.y = lastY;\r\n const normalSegment = normalizeSegment(seg, params);\r\n let result = segmentToCubic(normalSegment, params);\r\n const isLongArc = result[0] === \"C\" && result.length > 7;\r\n\r\n if (isLongArc) {\r\n path.splice(\r\n index + 1,\r\n 0,\r\n [\"C\" as AbsoluteCommand | number].concat(result.slice(7)) as CSegment,\r\n );\r\n result = result.slice(0, 7) as CSegment;\r\n }\r\n\r\n const seglen = result.length;\r\n params.x1 = +result[seglen - 2];\r\n params.y1 = +result[seglen - 1];\r\n params.x2 = +result[seglen - 4] || params.x1;\r\n params.y2 = +result[seglen - 3] || params.y1;\r\n\r\n return result;\r\n });\r\n};\r\nexport default pathToCurve;\r\n","const roundTo = (n: number, round: number) => {\r\n const pow = round >= 1 ? 10 ** round : 1;\r\n\r\n return round > 0 ? Math.round(n * pow) / pow : Math.round(n);\r\n};\r\n\r\nexport default roundTo;\r\n","import type { PathArray, PathSegment } from \"../types\";\r\nimport defaultOptions from \"../options/options\";\r\nimport roundTo from \"../math/roundTo\";\r\n\r\n/**\r\n * Returns a valid `d` attribute string value created\r\n * by rounding values and concatenating the `pathArray` segments.\r\n *\r\n * @param path the `pathArray` object\r\n * @param roundOption amount of decimals to round values to\r\n * @returns the concatenated path string\r\n */\r\nconst pathToString = (\r\n path: PathArray,\r\n roundOption?: number | \"off\",\r\n): string => {\r\n const pathLen = path.length;\r\n let { round } = defaultOptions;\r\n let segment = path[0] as PathSegment;\r\n let result = \"\";\r\n\r\n // allow for ZERO decimals\r\n round = roundOption === \"off\"\r\n ? roundOption\r\n : typeof roundOption === \"number\" && roundOption >= 0\r\n ? roundOption\r\n : typeof round === \"number\" && round >= 0\r\n ? round\r\n : /* istanbul ignore next @preserve */ \"off\";\r\n\r\n for (let i = 0; i < pathLen; i += 1) {\r\n segment = path[i];\r\n const [pathCommand] = segment;\r\n const values = segment.slice(1) as number[];\r\n result += pathCommand;\r\n if (round === \"off\") {\r\n result += values.join(\" \");\r\n } else {\r\n let j = 0;\r\n const valLen = values.length;\r\n while (j < valLen) {\r\n result += roundTo(values[j], round);\r\n if (j !== valLen - 1) result += \" \";\r\n j += 1;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport default pathToString;\r\n","import { type PointTuple } from \"../types\";\r\n\r\n/**\r\n * Returns the square root of the distance\r\n * between two given points.\r\n *\r\n * @param a the first point coordinates\r\n * @param b the second point coordinates\r\n * @returns the distance value\r\n */\r\nconst distanceSquareRoot = (a: PointTuple, b: PointTuple) => {\r\n return Math.sqrt(\r\n (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]),\r\n );\r\n};\r\n\r\nexport default distanceSquareRoot;\r\n","import midPoint from \"./midPoint\";\r\nimport distanceSquareRoot from \"./distanceSquareRoot\";\r\n\r\n/**\r\n * Returns length for line segments (MoveTo, LineTo).\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the line segment length\r\n */\r\nconst getLineLength = (x1: number, y1: number, x2: number, y2: number) => {\r\n return distanceSquareRoot([x1, y1], [x2, y2]);\r\n};\r\n\r\n/**\r\n * Returns a point along the line segments (MoveTo, LineTo).\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance the distance to point in [0-1] range\r\n * @returns the point at length\r\n */\r\nconst getPointAtLineLength = (\r\n x1: number,\r\n y1: number,\r\n x2: number,\r\n y2: number,\r\n distance?: number,\r\n) => {\r\n let point = { x: x1, y: y1 };\r\n\r\n /* istanbul ignore else @preserve */\r\n if (typeof distance === \"number\") {\r\n const length = distanceSquareRoot([x1, y1], [x2, y2]);\r\n if (distance <= 0) {\r\n point = { x: x1, y: y1 };\r\n } else if (distance >= length) {\r\n point = { x: x2, y: y2 };\r\n } else {\r\n const [x, y] = midPoint([x1, y1], [x2, y2], distance / length);\r\n point = { x, y };\r\n }\r\n }\r\n return point;\r\n};\r\n\r\n/**\r\n * Returns bounding box for line segments (MoveTo, LineTo).\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance the distance to point in [0-1] range\r\n * @returns the extrema for line segments\r\n */\r\nconst getLineBBox = (x1: number, y1: number, x2: number, y2: number) => {\r\n const { min, max } = Math;\r\n\r\n return [min(x1, x2), min(y1, y2), max(x1, x2), max(y1, y2)] as [\r\n number,\r\n number,\r\n number,\r\n number,\r\n ];\r\n};\r\n\r\nexport { getLineBBox, getLineLength, getPointAtLineLength };\r\n","import { getPointAtLineLength } from \"./lineTools\";\r\nimport type { Point, PointTuple } from \"../types\";\r\n\r\n/**\r\n * Returns the Arc segment length.\r\n * @param rx radius along X axis\r\n * @param ry radius along Y axis\r\n * @param theta the angle in radians\r\n * @returns the arc length\r\n */\r\nconst arcLength = (rx: number, ry: number, theta: number) => {\r\n const halfTheta = theta / 2;\r\n const sinHalfTheta = Math.sin(halfTheta);\r\n const cosHalfTheta = Math.cos(halfTheta);\r\n const term1 = rx ** 2 * sinHalfTheta ** 2;\r\n const term2 = ry ** 2 * cosHalfTheta ** 2;\r\n const length = Math.sqrt(term1 + term2) * theta;\r\n return Math.abs(length);\r\n};\r\n\r\n/**\r\n * Find point on ellipse at given angle around ellipse (theta);\r\n * @param cx the center X\r\n * @param cy the center Y\r\n * @param rx the radius X\r\n * @param ry the radius Y\r\n * @param alpha the arc rotation angle in radians\r\n * @param theta the arc sweep angle in radians\r\n * @returns a point around ellipse at given angle\r\n */\r\nconst arcPoint = (\r\n cx: number,\r\n cy: number,\r\n rx: number,\r\n ry: number,\r\n alpha: number,\r\n theta: number,\r\n) => {\r\n const { sin, cos } = Math;\r\n // theta is angle in radians around arc\r\n // alpha is angle of rotation of ellipse in radians\r\n const cosA = cos(alpha);\r\n const sinA = sin(alpha);\r\n const x = rx * cos(theta);\r\n const y = ry * sin(theta);\r\n\r\n return [cx + cosA * x - sinA * y, cy + sinA * x + cosA * y] as PointTuple;\r\n};\r\n\r\n/**\r\n * Returns the angle between two points.\r\n * @param v0 starting point\r\n * @param v1 ending point\r\n * @returns the angle in radian\r\n */\r\nconst angleBetween = (v0: Point, v1: Point) => {\r\n const { x: v0x, y: v0y } = v0;\r\n const { x: v1x, y: v1y } = v1;\r\n const p = v0x * v1x + v0y * v1y;\r\n const n = Math.sqrt((v0x ** 2 + v0y ** 2) * (v1x ** 2 + v1y ** 2));\r\n const sign = v0x * v1y - v0y * v1x < 0 ? -1 : 1;\r\n return sign * Math.acos(p / n);\r\n};\r\n\r\n/**\r\n * Returns the following properties for an Arc segment: center, start angle,\r\n * end angle, and radiuses on X and Y axis.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param RX the radius on X axis\r\n * @param RY the radius on Y axis\r\n * @param angle the ellipse rotation in degrees\r\n * @param LAF the large arc flag\r\n * @param SF the sweep flag\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns properties specific to Arc segments\r\n */\r\nconst getArcProps = (\r\n x1: number,\r\n y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n x: number,\r\n y: number,\r\n) => {\r\n const { abs, sin, cos, sqrt, PI } = Math;\r\n let rx = abs(RX);\r\n let ry = abs(RY);\r\n const xRot = ((angle % 360) + 360) % 360;\r\n const xRotRad = xRot * (PI / 180);\r\n\r\n // istanbul ignore next @preserve\r\n if (x1 === x && y1 === y) {\r\n return {\r\n rx,\r\n ry,\r\n startAngle: 0,\r\n endAngle: 0,\r\n center: { x, y },\r\n };\r\n }\r\n\r\n if (rx === 0 || ry === 0) {\r\n return {\r\n rx,\r\n ry,\r\n startAngle: 0,\r\n endAngle: 0,\r\n center: { x: (x + x1) / 2, y: (y + y1) / 2 },\r\n };\r\n }\r\n\r\n const dx = (x1 - x) / 2;\r\n const dy = (y1 - y) / 2;\r\n\r\n const transformedPoint = {\r\n x: cos(xRotRad) * dx + sin(xRotRad) * dy,\r\n y: -sin(xRotRad) * dx + cos(xRotRad) * dy,\r\n };\r\n\r\n const radiiCheck = transformedPoint.x ** 2 / rx ** 2 +\r\n transformedPoint.y ** 2 / ry ** 2;\r\n\r\n if (radiiCheck > 1) {\r\n rx *= sqrt(radiiCheck);\r\n ry *= sqrt(radiiCheck);\r\n }\r\n\r\n const cSquareNumerator = rx ** 2 * ry ** 2 -\r\n rx ** 2 * transformedPoint.y ** 2 - ry ** 2 * transformedPoint.x ** 2;\r\n const cSquareRootDenom = rx ** 2 * transformedPoint.y ** 2 +\r\n ry ** 2 * transformedPoint.x ** 2;\r\n\r\n let cRadicand = cSquareNumerator / cSquareRootDenom;\r\n /* istanbul ignore next @preserve */\r\n cRadicand = cRadicand < 0 ? 0 : cRadicand;\r\n const cCoef = (LAF !== SF ? 1 : -1) * sqrt(cRadicand);\r\n const transformedCenter = {\r\n x: cCoef * ((rx * transformedPoint.y) / ry),\r\n y: cCoef * (-(ry * transformedPoint.x) / rx),\r\n };\r\n\r\n const center = {\r\n x: cos(xRotRad) * transformedCenter.x - sin(xRotRad) * transformedCenter.y +\r\n (x1 + x) / 2,\r\n y: sin(xRotRad) * transformedCenter.x + cos(xRotRad) * transformedCenter.y +\r\n (y1 + y) / 2,\r\n };\r\n\r\n const startVector = {\r\n x: (transformedPoint.x - transformedCenter.x) / rx,\r\n y: (transformedPoint.y - transformedCenter.y) / ry,\r\n };\r\n\r\n const startAngle = angleBetween({ x: 1, y: 0 }, startVector);\r\n\r\n const endVector = {\r\n x: (-transformedPoint.x - transformedCenter.x) / rx,\r\n y: (-transformedPoint.y - transformedCenter.y) / ry,\r\n };\r\n\r\n let sweepAngle = angleBetween(startVector, endVector);\r\n if (!SF && sweepAngle > 0) {\r\n sweepAngle -= 2 * PI;\r\n } else if (SF && sweepAngle < 0) {\r\n sweepAngle += 2 * PI;\r\n }\r\n sweepAngle %= 2 * PI;\r\n\r\n const endAngle = startAngle + sweepAngle;\r\n\r\n // point.ellipticalArcStartAngle = startAngle;\r\n // point.ellipticalArcEndAngle = startAngle + sweepAngle;\r\n // point.ellipticalArcAngle = alpha;\r\n\r\n // point.ellipticalArcCenter = center;\r\n // point.resultantRx = rx;\r\n // point.resultantRy = ry;\r\n\r\n return {\r\n center,\r\n startAngle,\r\n endAngle,\r\n rx,\r\n ry,\r\n };\r\n};\r\n\r\n/**\r\n * Returns the length of an Arc segment.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the length of the Arc segment\r\n */\r\nconst getArcLength = (\r\n x1: number,\r\n y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n x: number,\r\n y: number,\r\n) => {\r\n const { rx, ry, startAngle, endAngle } = getArcProps(\r\n x1,\r\n y1,\r\n RX,\r\n RY,\r\n angle,\r\n LAF,\r\n SF,\r\n x,\r\n y,\r\n );\r\n return arcLength(rx, ry, endAngle - startAngle);\r\n};\r\n\r\n/**\r\n * Returns a point along an Arc segment at a given distance.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param RX the radius on X axis\r\n * @param RY the radius on Y axis\r\n * @param angle the ellipse rotation in degrees\r\n * @param LAF the large arc flag\r\n * @param SF the sweep flag\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance a [0-1] ratio\r\n * @returns a point along the Arc segment\r\n */\r\nconst getPointAtArcLength = (\r\n x1: number,\r\n y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n x: number,\r\n y: number,\r\n distance?: number,\r\n) => {\r\n let point = { x: x1, y: y1 };\r\n const { center, rx, ry, startAngle, endAngle } = getArcProps(\r\n x1,\r\n y1,\r\n RX,\r\n RY,\r\n angle,\r\n LAF,\r\n SF,\r\n x,\r\n y,\r\n );\r\n\r\n /* istanbul ignore else @preserve */\r\n if (typeof distance === \"number\") {\r\n const length = arcLength(rx, ry, endAngle - startAngle);\r\n if (distance <= 0) {\r\n point = { x: x1, y: y1 };\r\n } else if (distance >= length) {\r\n point = { x, y };\r\n } else {\r\n /* istanbul ignore next @preserve */\r\n if (x1 === x && y1 === y) {\r\n return { x, y };\r\n }\r\n /* istanbul ignore next @preserve */\r\n if (rx === 0 || ry === 0) {\r\n return getPointAtLineLength(x1, y1, x, y, distance);\r\n }\r\n const { PI, cos, sin } = Math;\r\n const sweepAngle = endAngle - startAngle;\r\n const xRot = ((angle % 360) + 360) % 360;\r\n const xRotRad = xRot * (PI / 180);\r\n const alpha = startAngle + sweepAngle * (distance / length);\r\n const ellipseComponentX = rx * cos(alpha);\r\n const ellipseComponentY = ry * sin(alpha);\r\n\r\n point = {\r\n x: cos(xRotRad) * ellipseComponentX - sin(xRotRad) * ellipseComponentY +\r\n center.x,\r\n y: sin(xRotRad) * ellipseComponentX + cos(xRotRad) * ellipseComponentY +\r\n center.y,\r\n };\r\n }\r\n }\r\n\r\n return point;\r\n};\r\n\r\n/**\r\n * Returns the extrema for an Arc segment in the following format:\r\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\r\n *\r\n * @see https://github.com/herrstrietzel/svg-pathdata-getbbox\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param RX the radius on X axis\r\n * @param RY the radius on Y axis\r\n * @param angle the ellipse rotation in degrees\r\n * @param LAF the large arc flag\r\n * @param SF the sweep flag\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the extrema of the Arc segment\r\n */\r\nconst getArcBBox = (\r\n x1: number,\r\n y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n x: number,\r\n y: number,\r\n) => {\r\n const { center, rx, ry, startAngle, endAngle } = getArcProps(\r\n x1,\r\n y1,\r\n RX,\r\n RY,\r\n angle,\r\n LAF,\r\n SF,\r\n x,\r\n y,\r\n );\r\n const deltaAngle = endAngle - startAngle;\r\n const { min, max, tan, atan2, PI } = Math;\r\n\r\n // circle/elipse center coordinates\r\n const { x: cx, y: cy } = center;\r\n\r\n // rotation to radians\r\n const alpha = (angle * PI) / 180;\r\n const tangent = tan(alpha);\r\n\r\n /**\r\n * find min/max from zeroes of directional derivative along x and y\r\n * along x axis\r\n */\r\n const theta = atan2(-ry * tangent, rx);\r\n const angle1 = theta;\r\n const angle2 = theta + PI;\r\n const angle3 = atan2(ry, rx * tangent);\r\n const angle4 = angle3 + PI;\r\n const xArray = [x];\r\n const yArray = [y];\r\n\r\n // inner bounding box\r\n let xMin = min(x1, x);\r\n let xMax = max(x1, x);\r\n let yMin = min(y1, y);\r\n let yMax = max(y1, y);\r\n\r\n // on path point close after start\r\n const angleAfterStart = endAngle - deltaAngle * 0.00001;\r\n const pP2 = arcPoint(cx, cy, rx, ry, alpha, angleAfterStart);\r\n\r\n // on path point close before end\r\n const angleBeforeEnd = endAngle - deltaAngle * 0.99999;\r\n const pP3 = arcPoint(cx, cy, rx, ry, alpha, angleBeforeEnd);\r\n\r\n /**\r\n * expected extremes\r\n * if leaving inner bounding box\r\n * (between segment start and end point)\r\n * otherwise exclude elliptic extreme points\r\n */\r\n\r\n // right\r\n if (pP2[0] > xMax || pP3[0] > xMax) {\r\n // get point for this theta\r\n const p1 = arcPoint(cx, cy, rx, ry, alpha, angle1);\r\n xArray.push(p1[0]);\r\n yArray.push(p1[1]);\r\n }\r\n\r\n // left\r\n if (pP2[0] < xMin || pP3[0] < xMin) {\r\n // get anti-symmetric point\r\n const p2 = arcPoint(cx, cy, rx, ry, alpha, angle2);\r\n xArray.push(p2[0]);\r\n yArray.push(p2[1]);\r\n }\r\n\r\n // top\r\n if (pP2[1] < yMin || pP3[1] < yMin) {\r\n // get anti-symmetric point\r\n const p4 = arcPoint(cx, cy, rx, ry, alpha, angle4);\r\n xArray.push(p4[0]);\r\n yArray.push(p4[1]);\r\n }\r\n\r\n // bottom\r\n if (pP2[1] > yMax || pP3[1] > yMax) {\r\n // get point for this theta\r\n const p3 = arcPoint(cx, cy, rx, ry, alpha, angle3);\r\n xArray.push(p3[0]);\r\n yArray.push(p3[1]);\r\n }\r\n\r\n xMin = min.apply([], xArray);\r\n yMin = min.apply([], yArray);\r\n xMax = max.apply([], xArray);\r\n yMax = max.apply([], yArray);\r\n\r\n return [xMin, yMin, xMax, yMax] as [number, number, number, number];\r\n};\r\n\r\nexport {\r\n angleBetween,\r\n arcLength,\r\n arcPoint,\r\n getArcBBox,\r\n getArcLength,\r\n getArcProps,\r\n getPointAtArcLength,\r\n};\r\n","import type {\r\n CubicCoordinates,\r\n CubicPoints,\r\n DeriveCallback,\r\n DerivedCubicPoints,\r\n DerivedPoint,\r\n DerivedQuadPoints,\r\n PointTuple,\r\n QuadCoordinates,\r\n QuadPoints,\r\n} from \"../types\";\r\n\r\n/**\r\n * Tools from bezier.js by Mike 'Pomax' Kamermans\r\n * @see https://github.com/Pomax/bezierjs\r\n */\r\n\r\nconst Tvalues = [\r\n -0.0640568928626056260850430826247450385909,\r\n 0.0640568928626056260850430826247450385909,\r\n -0.1911188674736163091586398207570696318404,\r\n 0.1911188674736163091586398207570696318404,\r\n -0.3150426796961633743867932913198102407864,\r\n 0.3150426796961633743867932913198102407864,\r\n -0.4337935076260451384870842319133497124524,\r\n 0.4337935076260451384870842319133497124524,\r\n -0.5454214713888395356583756172183723700107,\r\n 0.5454214713888395356583756172183723700107,\r\n -0.6480936519369755692524957869107476266696,\r\n 0.6480936519369755692524957869107476266696,\r\n -0.7401241915785543642438281030999784255232,\r\n 0.7401241915785543642438281030999784255232,\r\n -0.8200019859739029219539498726697452080761,\r\n 0.8200019859739029219539498726697452080761,\r\n -0.8864155270044010342131543419821967550873,\r\n 0.8864155270044010342131543419821967550873,\r\n -0.9382745520027327585236490017087214496548,\r\n 0.9382745520027327585236490017087214496548,\r\n -0.9747285559713094981983919930081690617411,\r\n 0.9747285559713094981983919930081690617411,\r\n -0.9951872199970213601799974097007368118745,\r\n 0.9951872199970213601799974097007368118745,\r\n];\r\n\r\nconst Cvalues = [\r\n 0.1279381953467521569740561652246953718517,\r\n 0.1279381953467521569740561652246953718517,\r\n 0.1258374563468282961213753825111836887264,\r\n 0.1258374563468282961213753825111836887264,\r\n 0.121670472927803391204463153476262425607,\r\n 0.121670472927803391204463153476262425607,\r\n 0.1155056680537256013533444839067835598622,\r\n 0.1155056680537256013533444839067835598622,\r\n 0.1074442701159656347825773424466062227946,\r\n 0.1074442701159656347825773424466062227946,\r\n 0.0976186521041138882698806644642471544279,\r\n 0.0976186521041138882698806644642471544279,\r\n 0.086190161531953275917185202983742667185,\r\n 0.086190161531953275917185202983742667185,\r\n 0.0733464814110803057340336152531165181193,\r\n 0.0733464814110803057340336152531165181193,\r\n 0.0592985849154367807463677585001085845412,\r\n 0.0592985849154367807463677585001085845412,\r\n 0.0442774388174198061686027482113382288593,\r\n 0.0442774388174198061686027482113382288593,\r\n 0.0285313886289336631813078159518782864491,\r\n 0.0285313886289336631813078159518782864491,\r\n 0.0123412297999871995468056670700372915759,\r\n 0.0123412297999871995468056670700372915759,\r\n];\r\n\r\n/**\r\n * @param points\r\n * @returns\r\n */\r\nconst deriveBezier = (points: QuadPoints | CubicPoints) => {\r\n const dpoints = [] as (DerivedCubicPoints | DerivedQuadPoints)[];\r\n for (let p = points, d = p.length, c = d - 1; d > 1; d -= 1, c -= 1) {\r\n const list = [] as unknown as DerivedCubicPoints | DerivedQuadPoints;\r\n for (let j = 0; j < c; j += 1) {\r\n list.push({\r\n x: c * (p[j + 1].x - p[j].x),\r\n y: c * (p[j + 1].y - p[j].y),\r\n t: 0,\r\n });\r\n }\r\n dpoints.push(list);\r\n p = list;\r\n }\r\n return dpoints;\r\n};\r\n\r\n/**\r\n * @param points\r\n * @param t\r\n */\r\nconst computeBezier = (\r\n points: DerivedQuadPoints | DerivedCubicPoints,\r\n t: number,\r\n) => {\r\n // shortcuts\r\n /* istanbul ignore next @preserve */\r\n if (t === 0) {\r\n points[0].t = 0;\r\n return points[0];\r\n }\r\n\r\n const order = points.length - 1;\r\n\r\n /* istanbul ignore next @preserve */\r\n if (t === 1) {\r\n points[order].t = 1;\r\n return points[order];\r\n }\r\n\r\n const mt = 1 - t;\r\n let p = points as typeof points | [\r\n DerivedPoint,\r\n DerivedPoint,\r\n DerivedPoint,\r\n DerivedPoint,\r\n ];\r\n\r\n // constant?\r\n /* istanbul ignore next @preserve */\r\n if (order === 0) {\r\n points[0].t = t;\r\n return points[0];\r\n }\r\n\r\n // linear?\r\n /* istanbul ignore else @preserve */\r\n if (order === 1) {\r\n return {\r\n x: mt * p[0].x + t * p[1].x,\r\n y: mt * p[0].y + t * p[1].y,\r\n t,\r\n };\r\n }\r\n\r\n // quadratic/cubic curve?\r\n const mt2 = mt * mt;\r\n const t2 = t * t;\r\n let a = 0;\r\n let b = 0;\r\n let c = 0;\r\n let d = 0;\r\n /* istanbul ignore else @preserve */\r\n if (order === 2) {\r\n p = [p[0], p[1], p[2], { x: 0, y: 0 } as DerivedPoint];\r\n a = mt2;\r\n b = mt * t * 2;\r\n c = t2;\r\n } else if (order === 3) {\r\n a = mt2 * mt;\r\n b = mt2 * t * 3;\r\n c = mt * t2 * 3;\r\n d = t * t2;\r\n }\r\n return {\r\n x: a * p[0].x + b * p[1].x + c * p[2].x + d * p[3].x,\r\n y: a * p[0].y + b * p[1].y + c * p[2].y + d * p[3].y,\r\n t,\r\n };\r\n};\r\n\r\nconst calculateBezier = (derivativeFn: DeriveCallback, t: number) => {\r\n const d = derivativeFn(t);\r\n const l = d.x * d.x + d.y * d.y;\r\n\r\n return Math.sqrt(l);\r\n};\r\n\r\nconst bezierLength = (derivativeFn: DeriveCallback) => {\r\n const z = 0.5;\r\n const len = Tvalues.length;\r\n\r\n let sum = 0;\r\n\r\n for (let i = 0, t; i < len; i++) {\r\n t = z * Tvalues[i] + z;\r\n sum += Cvalues[i] * calculateBezier(derivativeFn, t);\r\n }\r\n return z * sum;\r\n};\r\n\r\n/**\r\n * Returns the length of CubicBezier / Quad segment.\r\n * @param curve cubic / quad bezier segment\r\n */\r\nconst getBezierLength = (curve: CubicCoordinates | QuadCoordinates) => {\r\n const points = [] as unknown as CubicPoints | QuadPoints;\r\n for (let idx = 0, len = curve.length, step = 2; idx < len; idx += step) {\r\n points.push({\r\n x: curve[idx],\r\n y: curve[idx + 1],\r\n });\r\n }\r\n const dpoints = deriveBezier(points);\r\n return bezierLength((t: number) => {\r\n return computeBezier(dpoints[0], t);\r\n });\r\n};\r\n\r\n// Precision for consider cubic polynom as quadratic one\r\nconst CBEZIER_MINMAX_EPSILON = 0.00000001;\r\n\r\n/**\r\n * Returns the most extreme points in a Quad Bezier segment.\r\n * @param A an array which consist of X/Y values\r\n */\r\n// https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L89\r\nconst minmaxQ = ([v1, cp, v2]: [number, number, number]) => {\r\n const min = Math.min(v1, v2);\r\n const max = Math.max(v1, v2);\r\n\r\n /* istanbul ignore next @preserve */\r\n if (cp >= v1 ? v2 >= cp : v2 <= cp) {\r\n // if no extremum in ]0,1[\r\n return [min, max] as PointTuple;\r\n }\r\n\r\n // check if the extremum E is min or max\r\n const E = (v1 * v2 - cp * cp) / (v1 - 2 * cp + v2);\r\n return (E < min ? [E, max] : [min, E]) as PointTuple;\r\n};\r\n\r\n/**\r\n * Returns the most extreme points in a Cubic Bezier segment.\r\n * @param A an array which consist of X/Y values\r\n * @see https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L127\r\n */\r\nconst minmaxC = ([v1, cp1, cp2, v2]: [number, number, number, number]) => {\r\n const K = v1 - 3 * cp1 + 3 * cp2 - v2;\r\n\r\n // if the polynomial is (almost) quadratic and not cubic\r\n /* istanbul ignore next @preserve */\r\n if (Math.abs(K) < CBEZIER_MINMAX_EPSILON) {\r\n if (v1 === v2 && v1 === cp1) {\r\n // no curve, point targeting same location\r\n return [v1, v2] as PointTuple;\r\n }\r\n\r\n return minmaxQ([v1, -0.5 * v1 + 1.5 * cp1, v1 - 3 * cp1 + 3 * cp2]);\r\n }\r\n\r\n // the reduced discriminant of the derivative\r\n const T = -v1 * cp2 + v1 * v2 - cp1 * cp2 - cp1 * v2 + cp1 * cp1 + cp2 * cp2;\r\n\r\n // if the polynomial is monotone in [0,1]\r\n if (T <= 0) {\r\n return [Math.min(v1, v2), Math.max(v1, v2)] as PointTuple;\r\n }\r\n const S = Math.sqrt(T);\r\n\r\n // potential extrema\r\n let min = Math.min(v1, v2);\r\n let max = Math.max(v1, v2);\r\n\r\n const L = v1 - 2 * cp1 + cp2;\r\n // check local extrema\r\n for (let R = (L + S) / K, i = 1; i <= 2; R = (L - S) / K, i++) {\r\n // istanbul ignore next @preserve\r\n if (R > 0 && R < 1) {\r\n // if the extrema is for R in [0,1]\r\n const Q = v1 * (1 - R) * (1 - R) * (1 - R) +\r\n cp1 * 3 * (1 - R) * (1 - R) * R + cp2 * 3 * (1 - R) * R * R +\r\n v2 * R * R * R;\r\n if (Q < min) {\r\n min = Q;\r\n }\r\n if (Q > max) {\r\n max = Q;\r\n }\r\n }\r\n }\r\n\r\n return [min, max] as PointTuple;\r\n};\r\n\r\nexport {\r\n bezierLength,\r\n calculateBezier,\r\n CBEZIER_MINMAX_EPSILON,\r\n computeBezier,\r\n Cvalues,\r\n deriveBezier,\r\n getBezierLength,\r\n minmaxC,\r\n minmaxQ,\r\n Tvalues,\r\n};\r\n","import { getBezierLength, minmaxC } from \"./bezier\";\r\nimport { type CubicCoordinates } from \"../types\";\r\n\r\n/**\r\n * Returns a point at a given length of a CubicBezier segment.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param t a [0-1] ratio\r\n * @returns the point at cubic-bezier segment length\r\n */\r\nconst getPointAtCubicSegmentLength = (\r\n [x1, y1, c1x, c1y, c2x, c2y, x2, y2]: CubicCoordinates,\r\n t: number,\r\n) => {\r\n const t1 = 1 - t;\r\n return {\r\n x: t1 ** 3 * x1 + 3 * t1 ** 2 * t * c1x + 3 * t1 * t ** 2 * c2x +\r\n t ** 3 * x2,\r\n y: t1 ** 3 * y1 + 3 * t1 ** 2 * t * c1y + 3 * t1 * t ** 2 * c2y +\r\n t ** 3 * y2,\r\n };\r\n};\r\n\r\n/**\r\n * Returns the length of a CubicBezier segment.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the CubicBezier segment length\r\n */\r\nconst getCubicLength = (\r\n x1: number,\r\n y1: number,\r\n c1x: number,\r\n c1y: number,\r\n c2x: number,\r\n c2y: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n return getBezierLength([x1, y1, c1x, c1y, c2x, c2y, x2, y2]);\r\n};\r\n\r\n/**\r\n * Returns the point along a CubicBezier segment at a given distance.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance the distance to look at\r\n * @returns the point at CubicBezier length\r\n */\r\nconst getPointAtCubicLength = (\r\n x1: number,\r\n y1: number,\r\n c1x: number,\r\n c1y: number,\r\n c2x: number,\r\n c2y: number,\r\n x2: number,\r\n y2: number,\r\n distance?: number,\r\n) => {\r\n const distanceIsNumber = typeof distance === \"number\";\r\n let point = { x: x1, y: y1 };\r\n /* istanbul ignore else @preserve */\r\n if (distanceIsNumber) {\r\n const currentLength = getBezierLength([x1, y1, c1x, c1y, c2x, c2y, x2, y2]);\r\n if (distance <= 0) {\r\n // first point already defined\r\n } else if (distance >= currentLength) {\r\n point = { x: x2, y: y2 };\r\n } else {\r\n point = getPointAtCubicSegmentLength(\r\n [x1, y1, c1x, c1y, c2x, c2y, x2, y2],\r\n distance / currentLength,\r\n );\r\n }\r\n }\r\n return point;\r\n};\r\n\r\n/**\r\n * Returns the boundig box of a CubicBezier segment in the following format:\r\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the extrema of the CubicBezier segment\r\n */\r\nconst getCubicBBox = (\r\n x1: number,\r\n y1: number,\r\n c1x: number,\r\n c1y: number,\r\n c2x: number,\r\n c2y: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n const cxMinMax = minmaxC([x1, c1x, c2x, x2]);\r\n const cyMinMax = minmaxC([y1, c1y, c2y, y2]);\r\n\r\n return [cxMinMax[0], cyMinMax[0], cxMinMax[1], cyMinMax[1]] as [\r\n number,\r\n number,\r\n number,\r\n number,\r\n ];\r\n};\r\n\r\nexport {\r\n getCubicBBox,\r\n getCubicLength,\r\n getPointAtCubicLength,\r\n getPointAtCubicSegmentLength,\r\n};\r\n","import { getBezierLength, minmaxQ } from \"./bezier\";\r\nimport { type QuadCoordinates } from \"../types\";\r\n\r\n/**\r\n * Returns the {x,y} coordinates of a point at a\r\n * given length of a quadratic-bezier segment.\r\n *\r\n * @see https://github.com/substack/point-at-length\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param cx the control point X\r\n * @param cy the control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param t a [0-1] ratio\r\n * @returns the requested {x,y} coordinates\r\n */\r\nconst getPointAtQuadSegmentLength = (\r\n [x1, y1, cx, cy, x2, y2]: QuadCoordinates,\r\n t: number,\r\n) => {\r\n const t1 = 1 - t;\r\n return {\r\n x: t1 ** 2 * x1 + 2 * t1 * t * cx + t ** 2 * x2,\r\n y: t1 ** 2 * y1 + 2 * t1 * t * cy + t ** 2 * y2,\r\n };\r\n};\r\n\r\n/**\r\n * Returns the length of a QuadraticBezier segment.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param cx the control point X\r\n * @param cy the control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the QuadraticBezier segment length\r\n */\r\nconst getQuadLength = (\r\n x1: number,\r\n y1: number,\r\n cx: number,\r\n cy: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n return getBezierLength([x1, y1, cx, cy, x2, y2]);\r\n};\r\n\r\n/**\r\n * Returns the point along a QuadraticBezier segment at a given distance.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param cx the control point X\r\n * @param cy the control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance the distance to look at\r\n * @returns the point at QuadraticBezier length\r\n */\r\nconst getPointAtQuadLength = (\r\n x1: number,\r\n y1: number,\r\n cx: number,\r\n cy: number,\r\n x2: number,\r\n y2: number,\r\n distance?: number,\r\n) => {\r\n const distanceIsNumber = typeof distance === \"number\";\r\n let point = { x: x1, y: y1 };\r\n\r\n /* istanbul ignore else @preserve */\r\n if (distanceIsNumber) {\r\n const currentLength = getBezierLength([x1, y1, cx, cy, x2, y2]);\r\n if (distance <= 0) {\r\n // first point already defined\r\n } else if (distance >= currentLength) {\r\n point = { x: x2, y: y2 };\r\n } else {\r\n point = getPointAtQuadSegmentLength(\r\n [x1, y1, cx, cy, x2, y2],\r\n distance / currentLength,\r\n );\r\n }\r\n }\r\n return point;\r\n};\r\n\r\n/**\r\n * Returns the boundig box of a QuadraticBezier segment in the following format:\r\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param cx the control point X\r\n * @param cy the control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the extrema of the QuadraticBezier segment\r\n */\r\nconst getQuadBBox = (\r\n x1: number,\r\n y1: number,\r\n cx: number,\r\n cy: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n const cxMinMax = minmaxQ([x1, cx, x2]);\r\n const cyMinMax = minmaxQ([y1, cy, y2]);\r\n return [cxMinMax[0], cyMinMax[0], cxMinMax[1], cyMinMax[1]] as [\r\n number,\r\n number,\r\n number,\r\n number,\r\n ];\r\n};\r\n\r\nexport {\r\n getPointAtQuadLength,\r\n getPointAtQuadSegmentLength,\r\n getQuadBBox,\r\n getQuadLength,\r\n};\r\n","import distanceSquareRoot from \"./distanceSquareRoot\";\r\nimport { type PointTuple } from \"../types\";\r\n\r\n/**\r\n * d3-polygon-area\r\n * https://github.com/d3/d3-polygon\r\n *\r\n * Returns the area of a polygon.\r\n *\r\n * @param polygon an array of coordinates\r\n * @returns the polygon area\r\n */\r\nconst polygonArea = (polygon: PointTuple[]) => {\r\n const n = polygon.length;\r\n let i = -1;\r\n let a: PointTuple;\r\n let b = polygon[n - 1];\r\n let area = 0;\r\n\r\n /* eslint-disable-next-line */\r\n while (++i < n) {\r\n a = b;\r\n b = polygon[i];\r\n area += a[1] * b[0] - a[0] * b[1];\r\n }\r\n\r\n return area / 2;\r\n};\r\n\r\n/**\r\n * d3-polygon-length\r\n * https://github.com/d3/d3-polygon\r\n *\r\n * Returns the perimeter of a polygon.\r\n *\r\n * @param polygon an array of coordinates\r\n * @returns the polygon length\r\n */\r\nconst polygonLength = (polygon: PointTuple[]) => {\r\n return polygon.reduce((length, point, i) => {\r\n if (i) {\r\n return length + distanceSquareRoot(polygon[i - 1], point);\r\n }\r\n return 0;\r\n }, 0);\r\n};\r\n\r\nexport { polygonArea, polygonLength };\r\n","const DISTANCE_EPSILON = 0.00001;\r\n\r\nexport default DISTANCE_EPSILON;\r\n","import normalizeSegment from \"./normalizeSegment\";\r\nimport type { NormalArray, PathArray } from \"../types\";\r\nimport iterate from \"./iterate\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport paramsParser from \"../parser/paramsParser\";\r\n\r\n/**\r\n * Normalizes a `pathArray` object for further processing:\r\n * * convert segments to absolute values\r\n * * convert shorthand path commands to their non-shorthand notation\r\n *\r\n * @param pathInput the string to be parsed or 'pathArray'\r\n * @returns the normalized `pathArray`\r\n */\r\nconst normalizePath = (pathInput: string | PathArray) => {\r\n const path = parsePathString(pathInput);\r\n const params = { ...paramsParser };\r\n\r\n return iterate(path, (seg, _, lastX, lastY) => {\r\n params.x = lastX;\r\n params.y = lastY;\r\n const result = normalizeSegment(seg, params);\r\n\r\n const seglen = result.length;\r\n params.x1 = +result[seglen - 2];\r\n params.y1 = +result[seglen - 1];\r\n params.x2 = +result[seglen - 4] || params.x1;\r\n params.y2 = +result[seglen - 3] || params.y1;\r\n\r\n return result;\r\n });\r\n};\r\nexport default normalizePath;\r\n","import DISTANCE_EPSILON from \"./distanceEpsilon\";\r\nimport type { MSegment, PathArray, PointTuple } from \"../types\";\r\nimport iterate from \"../process/iterate\";\r\nimport { getLineLength, getPointAtLineLength } from \"../math/lineTools\";\r\nimport { getArcLength, getPointAtArcLength } from \"../math/arcTools\";\r\nimport { getCubicLength, getPointAtCubicLength } from \"../math/cubicTools\";\r\nimport { getPointAtQuadLength, getQuadLength } from \"../math/quadTools\";\r\nimport normalizePath from \"../process/normalizePath\";\r\n\r\n/**\r\n * Returns [x,y] coordinates of a point at a given length of a shape.\r\n *\r\n * @param pathInput the `pathArray` to look into\r\n * @param distance the length of the shape to look at\r\n * @returns the requested {x, y} point coordinates\r\n */\r\nconst getPointAtLength = (pathInput: string | PathArray, distance?: number) => {\r\n const path = normalizePath(pathInput);\r\n let isM = false;\r\n let data = [] as number[];\r\n let pathCommand = \"M\";\r\n let x = 0;\r\n let y = 0;\r\n let [mx, my] = path[0].slice(1) as PointTuple;\r\n const distanceIsNumber = typeof distance === \"number\";\r\n let point = { x: mx, y: my };\r\n let length = 0;\r\n let POINT = point;\r\n let totalLength = 0;\r\n\r\n if (!distanceIsNumber || distance < DISTANCE_EPSILON) return point;\r\n\r\n // for (let i = 0; i < pathLen; i += 1) {\r\n iterate(path, (seg, _, lastX, lastY) => {\r\n [pathCommand] = seg;\r\n isM = pathCommand === \"M\";\r\n data = !isM ? [lastX, lastY].concat(seg.slice(1) as number[]) : data;\r\n\r\n // this segment is always ZERO\r\n /* istanbul ignore else @preserve */\r\n if (isM) {\r\n // remember mx, my for Z\r\n [, mx, my] = seg as MSegment;\r\n point = { x: mx, y: my };\r\n length = 0;\r\n } else if (pathCommand === \"L\") {\r\n point = getPointAtLineLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n distance - totalLength,\r\n );\r\n length = getLineLength(data[0], data[1], data[2], data[3]);\r\n } else if (pathCommand === \"A\") {\r\n point = getPointAtArcLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n data[6],\r\n data[7],\r\n data[8],\r\n distance - totalLength,\r\n );\r\n length = getArcLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n data[6],\r\n data[7],\r\n data[8],\r\n );\r\n } else if (pathCommand === \"C\") {\r\n point = getPointAtCubicLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n data[6],\r\n data[7],\r\n distance - totalLength,\r\n );\r\n length = getCubicLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n data[6],\r\n data[7],\r\n );\r\n } else if (pathCommand === \"Q\") {\r\n point = getPointAtQuadLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n distance - totalLength,\r\n );\r\n length = getQuadLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n );\r\n } else if (pathCommand === \"Z\") {\r\n data = [lastX, lastY, mx, my];\r\n point = { x: mx, y: my };\r\n\r\n length = getLineLength(data[0], data[1], data[2], data[3]);\r\n }\r\n\r\n [x, y] = data.slice(-2);\r\n\r\n if (totalLength < distance) {\r\n POINT = point;\r\n } else {\r\n // totalLength >= distance\r\n // stop right here\r\n // stop iterator now!\r\n return false;\r\n }\r\n\r\n totalLength += length;\r\n return;\r\n });\r\n\r\n // native `getPointAtLength` behavior when the given distance\r\n // is higher than total length\r\n if (distance > totalLength - DISTANCE_EPSILON) {\r\n return { x, y };\r\n }\r\n\r\n return POINT;\r\n};\r\n\r\nexport default getPointAtLength;\r\n","import type { LSegment, MSegment, PathArray, PointTuple } from \"../types\";\r\nimport { getLineLength } from \"../math/lineTools\";\r\nimport { getArcLength } from \"../math/arcTools\";\r\nimport { getCubicLength } from \"../math/cubicTools\";\r\nimport { getQuadLength } from \"../math/quadTools\";\r\nimport iterate from \"../process/iterate\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport absolutizeSegment from \"../process/absolutizeSegment\";\r\n\r\n/**\r\n * Returns the shape total length, or the equivalent to `shape.getTotalLength()`.\r\n *\r\n * @param pathInput the target `pathArray`\r\n * @returns the shape total length\r\n */\r\nconst getTotalLength = (pathInput: string | PathArray) => {\r\n const path = parsePathString(pathInput);\r\n let paramX1 = 0;\r\n let paramY1 = 0;\r\n let paramX2 = 0;\r\n let paramY2 = 0;\r\n let paramQX = 0;\r\n let paramQY = 0;\r\n let pathCommand = \"M\";\r\n let mx = 0;\r\n let my = 0;\r\n let totalLength = 0;\r\n\r\n iterate(path, (seg, index, lastX, lastY) => {\r\n [pathCommand] = seg;\r\n const absCommand = pathCommand.toUpperCase();\r\n const isRelative = absCommand !== pathCommand;\r\n const absoluteSegment = isRelative\r\n ? absolutizeSegment(seg, index, lastX, lastY)\r\n : (seg.slice(0) as typeof seg);\r\n\r\n const normalSegment = absCommand === \"V\"\r\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\r\n : absCommand === \"H\"\r\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\r\n : absoluteSegment;\r\n [pathCommand] = normalSegment;\r\n\r\n if (!\"TQ\".includes(absCommand)) {\r\n // optional but good to be cautious\r\n paramQX = 0;\r\n paramQY = 0;\r\n }\r\n\r\n // this segment is always ZERO\r\n /* istanbul ignore else @preserve */\r\n if (pathCommand === \"M\") {\r\n // remember mx, my for Z\r\n [, mx, my] = normalSegment as MSegment;\r\n } else if (pathCommand === \"L\") {\r\n totalLength += getLineLength(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n );\r\n } else if (pathCommand === \"A\") {\r\n totalLength += getArcLength(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n normalSegment[5] as number,\r\n normalSegment[6] as number,\r\n normalSegment[7] as number,\r\n );\r\n } else if (pathCommand === \"S\") {\r\n const cp1x = paramX1 * 2 - paramX2;\r\n const cp1y = paramY1 * 2 - paramY2;\r\n\r\n totalLength += getCubicLength(\r\n lastX,\r\n lastY,\r\n cp1x,\r\n cp1y,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n );\r\n } else if (pathCommand === \"C\") {\r\n totalLength += getCubicLength(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n normalSegment[5] as number,\r\n normalSegment[6] as number,\r\n );\r\n } else if (pathCommand === \"T\") {\r\n paramQX = paramX1 * 2 - paramQX;\r\n paramQY = paramY1 * 2 - paramQY;\r\n totalLength += getQuadLength(\r\n lastX,\r\n lastY,\r\n paramQX,\r\n paramQY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n );\r\n } else if (pathCommand === \"Q\") {\r\n paramQX = normalSegment[1] as number;\r\n paramQY = normalSegment[2] as number;\r\n totalLength += getQuadLength(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n );\r\n } else if (pathCommand === \"Z\") {\r\n totalLength += getLineLength(lastX, lastY, mx, my);\r\n }\r\n\r\n // update params\r\n [paramX1, paramY1] = pathCommand === \"Z\"\r\n ? [mx, my]\r\n : (normalSegment.slice(-2) as PointTuple);\r\n [paramX2, paramY2] = pathCommand === \"C\"\r\n ? ([normalSegment[3], normalSegment[4]] as PointTuple)\r\n : pathCommand === \"S\"\r\n ? ([normalSegment[1], normalSegment[2]] as PointTuple)\r\n : [paramX1, paramY1];\r\n });\r\n\r\n return totalLength;\r\n};\r\n\r\nexport default getTotalLength;\r\n","import type { PathArray, PathSegment } from \"../types\";\r\nimport type { SegmentProperties } from \"../interface\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport getTotalLength from \"./getTotalLength\";\r\n\r\n/**\r\n * Returns the segment, its index and length as well as\r\n * the length to that segment at a given length in a path.\r\n *\r\n * @param pathInput target `pathArray`\r\n * @param distance the given length\r\n * @returns the requested properties\r\n */\r\nconst getPropertiesAtLength = (\r\n pathInput: string | PathArray,\r\n distance?: number,\r\n): SegmentProperties => {\r\n const pathArray = parsePathString(pathInput);\r\n\r\n let pathTemp = pathArray.slice(0) as PathArray;\r\n let pathLength = getTotalLength(pathTemp);\r\n let index = pathTemp.length - 1;\r\n let lengthAtSegment = 0;\r\n let length = 0;\r\n let segment = pathArray[0] as PathSegment;\r\n\r\n // If the path is empty, return 0.\r\n if (index <= 0 || !distance || !Number.isFinite(distance)) {\r\n return {\r\n segment,\r\n index: 0,\r\n length,\r\n lengthAtSegment,\r\n };\r\n }\r\n\r\n if (distance >= pathLength) {\r\n pathTemp = pathArray.slice(0, -1) as PathArray;\r\n lengthAtSegment = getTotalLength(pathTemp);\r\n length = pathLength - lengthAtSegment;\r\n segment = pathArray[index];\r\n return {\r\n segment,\r\n index,\r\n length,\r\n lengthAtSegment,\r\n };\r\n }\r\n\r\n const segments = [] as SegmentProperties[];\r\n while (index > 0) {\r\n segment = pathTemp[index];\r\n pathTemp = pathTemp.slice(0, -1) as PathArray;\r\n lengthAtSegment = getTotalLength(pathTemp);\r\n length = pathLength - lengthAtSegment;\r\n pathLength = lengthAtSegment;\r\n\r\n segments.push({\r\n segment,\r\n index,\r\n length,\r\n lengthAtSegment,\r\n });\r\n index -= 1;\r\n }\r\n\r\n return segments.find(({ lengthAtSegment: l }) =>\r\n l <= distance\r\n ) as SegmentProperties;\r\n};\r\n\r\nexport default getPropertiesAtLength;\r\n","import type { PathArray, Point } from \"../types\";\r\nimport type { PointProperties } from \"../interface\";\r\nimport getPointAtLength from \"./getPointAtLength\";\r\nimport getPropertiesAtLength from \"./getPropertiesAtLength\";\r\nimport getTotalLength from \"./getTotalLength\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport normalizePath from \"../process/normalizePath\";\r\n\r\n/**\r\n * Returns the point and segment in path closest to a given point as well as\r\n * the distance to the path stroke.\r\n *\r\n * @see https://bl.ocks.org/mbostock/8027637\r\n *\r\n * @param pathInput target `pathArray`\r\n * @param point the given point\r\n * @returns the requested properties\r\n */\r\nconst getPropertiesAtPoint = (\r\n pathInput: string | PathArray,\r\n point: Point,\r\n): PointProperties => {\r\n const path = parsePathString(pathInput);\r\n const normalPath = normalizePath(path);\r\n const pathLength = getTotalLength(normalPath);\r\n const distanceTo = (p: Point) => {\r\n const dx = p.x - point.x;\r\n const dy = p.y - point.y;\r\n return dx * dx + dy * dy;\r\n };\r\n let precision = 8;\r\n let scan: Point;\r\n let closest = { x: 0, y: 0 }; // make TS happy\r\n let scanDistance = 0;\r\n let bestLength = 0;\r\n let bestDistance = Infinity;\r\n\r\n // linear scan for coarse approximation\r\n for (let scanLength = 0; scanLength <= pathLength; scanLength += precision) {\r\n scan = getPointAtLength(normalPath, scanLength);\r\n scanDistance = distanceTo(scan);\r\n\r\n if (scanDistance < bestDistance) {\r\n closest = scan;\r\n bestLength = scanLength;\r\n bestDistance = scanDistance;\r\n }\r\n }\r\n\r\n // binary search for precise estimate\r\n precision /= 2;\r\n let before: { x: number; y: number };\r\n let after: { x: number; y: number };\r\n let beforeLength = 0;\r\n let afterLength = 0;\r\n let beforeDistance = 0;\r\n let afterDistance = 0;\r\n\r\n while (precision > 0.000001) {\r\n beforeLength = bestLength - precision;\r\n before = getPointAtLength(normalPath, beforeLength);\r\n beforeDistance = distanceTo(before);\r\n afterLength = bestLength + precision;\r\n after = getPointAtLength(normalPath, afterLength);\r\n afterDistance = distanceTo(after);\r\n\r\n if (beforeLength >= 0 && beforeDistance < bestDistance) {\r\n closest = before;\r\n bestLength = beforeLength;\r\n bestDistance = beforeDistance;\r\n } else if (afterLength <= pathLength && afterDistance < bestDistance) {\r\n closest = after;\r\n bestLength = afterLength;\r\n bestDistance = afterDistance;\r\n } else {\r\n precision /= 2;\r\n }\r\n if (precision < 0.00001) break;\r\n }\r\n\r\n const segment = getPropertiesAtLength(path, bestLength);\r\n const distance = Math.sqrt(bestDistance);\r\n\r\n return { closest, distance, segment };\r\n};\r\n\r\nexport default getPropertiesAtPoint;\r\n","import type { PathArray } from \"../types\";\r\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\r\n\r\n/**\r\n * Returns the point in path closest to a given point.\r\n *\r\n * @param pathInput target `pathArray`\r\n * @param point the given point\r\n * @returns the best match\r\n */\r\nconst getClosestPoint = (\r\n pathInput: string | PathArray,\r\n point: { x: number; y: number },\r\n) => {\r\n return getPropertiesAtPoint(pathInput, point).closest;\r\n};\r\n\r\nexport default getClosestPoint;\r\n","import pathToCurve from \"../convert/pathToCurve\";\r\nimport type { PathArray, PointTuple } from \"../types\";\r\n\r\n/**\r\n * Returns the area of a single cubic-bezier segment.\r\n *\r\n * http://objectmix.com/graphics/133553-area-closed-bezier-curve.html\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the area of the cubic-bezier segment\r\n */\r\nconst getCubicSegArea = (\r\n x1: number,\r\n y1: number,\r\n c1x: number,\r\n c1y: number,\r\n c2x: number,\r\n c2y: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n return (\r\n (3 *\r\n ((y2 - y1) * (c1x + c2x) -\r\n (x2 - x1) * (c1y + c2y) +\r\n c1y * (x1 - c2x) -\r\n c1x * (y1 - c2y) +\r\n y2 * (c2x + x1 / 3) -\r\n x2 * (c2y + y1 / 3))) /\r\n 20\r\n );\r\n};\r\n\r\n/**\r\n * Returns the area of a shape.\r\n *\r\n * @author Jürg Lehni & Jonathan Puckey\r\n *\r\n * @see https://github.com/paperjs/paper.js/blob/develop/src/path/Path.js\r\n *\r\n * @param path the shape `pathArray`\r\n * @returns the length of the cubic-bezier segment\r\n */\r\nconst getPathArea = (path: PathArray) => {\r\n let x = 0;\r\n let y = 0;\r\n let len = 0;\r\n\r\n return pathToCurve(path)\r\n .map((seg) => {\r\n switch (seg[0]) {\r\n case \"M\":\r\n [, x, y] = seg;\r\n return 0;\r\n default:\r\n len = getCubicSegArea(\r\n x,\r\n y,\r\n seg[1],\r\n seg[2],\r\n seg[3],\r\n seg[4],\r\n seg[5],\r\n seg[6],\r\n );\r\n [x, y] = seg.slice(-2) as PointTuple;\r\n return len;\r\n }\r\n })\r\n .reduce((a, b) => a + b, 0);\r\n};\r\nexport default getPathArea;\r\n","import getPathArea from \"./getPathArea\";\r\nimport pathToCurve from \"../convert/pathToCurve\";\r\nimport type { PathArray } from \"../types\";\r\n\r\n/**\r\n * Check if a path is drawn clockwise and returns true if so,\r\n * false otherwise.\r\n *\r\n * @param path the path string or `pathArray`\r\n * @returns true when clockwise or false if not\r\n */\r\nconst getDrawDirection = (path: string | PathArray) => {\r\n return getPathArea(pathToCurve(path)) >= 0;\r\n};\r\n\r\nexport default getDrawDirection;\r\n","import iterate from \"../process/iterate\";\r\nimport { PathBBox } from \"../interface\";\r\nimport { LSegment, MSegment, PathArray, PointTuple } from \"../types\";\r\nimport { getLineBBox } from \"../math/lineTools\";\r\nimport { getArcBBox } from \"../math/arcTools\";\r\nimport { getCubicBBox } from \"../math/cubicTools\";\r\nimport { getQuadBBox } from \"../math/quadTools\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport absolutizeSegment from \"../process/absolutizeSegment\";\r\n\r\nconst getPathBBox = (pathInput: PathArray | string) => {\r\n if (!pathInput) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n x2: 0,\r\n y2: 0,\r\n cx: 0,\r\n cy: 0,\r\n cz: 0,\r\n };\r\n }\r\n\r\n const path = parsePathString(pathInput);\r\n let pathCommand = \"M\";\r\n let mx = 0;\r\n let my = 0;\r\n const { max, min } = Math;\r\n let xMin = Infinity;\r\n let yMin = Infinity;\r\n let xMax = -Infinity;\r\n let yMax = -Infinity;\r\n let minX = 0;\r\n let minY = 0;\r\n let maxX = 0;\r\n let maxY = 0;\r\n let paramX1 = 0;\r\n let paramY1 = 0;\r\n let paramX2 = 0;\r\n let paramY2 = 0;\r\n let paramQX = 0;\r\n let paramQY = 0;\r\n\r\n iterate(path, (seg, index, lastX, lastY) => {\r\n [pathCommand] = seg;\r\n const absCommand = pathCommand.toUpperCase();\r\n const isRelative = absCommand !== pathCommand;\r\n const absoluteSegment = isRelative\r\n ? absolutizeSegment(seg, index, lastX, lastY)\r\n : (seg.slice(0) as typeof seg);\r\n\r\n const normalSegment = absCommand === \"V\"\r\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\r\n : absCommand === \"H\"\r\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\r\n : absoluteSegment;\r\n\r\n [pathCommand] = normalSegment;\r\n\r\n if (!\"TQ\".includes(absCommand)) {\r\n // optional but good to be cautious\r\n paramQX = 0;\r\n paramQY = 0;\r\n }\r\n\r\n // this segment is always ZERO\r\n /* istanbul ignore else @preserve */\r\n if (pathCommand === \"M\") {\r\n [, mx, my] = normalSegment as MSegment;\r\n minX = mx;\r\n minY = my;\r\n maxX = mx;\r\n maxY = my;\r\n } else if (pathCommand === \"L\") {\r\n [minX, minY, maxX, maxY] = getLineBBox(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n );\r\n } else if (pathCommand === \"A\") {\r\n [minX, minY, maxX, maxY] = getArcBBox(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n normalSegment[5] as number,\r\n normalSegment[6] as number,\r\n normalSegment[7] as number,\r\n );\r\n } else if (pathCommand === \"S\") {\r\n const cp1x = paramX1 * 2 - paramX2;\r\n const cp1y = paramY1 * 2 - paramY2;\r\n\r\n [minX, minY, maxX, maxY] = getCubicBBox(\r\n lastX,\r\n lastY,\r\n cp1x,\r\n cp1y,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n );\r\n } else if (pathCommand === \"C\") {\r\n [minX, minY, maxX, maxY] = getCubicBBox(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n normalSegment[5] as number,\r\n normalSegment[6] as number,\r\n );\r\n } else if (pathCommand === \"T\") {\r\n paramQX = paramX1 * 2 - paramQX;\r\n paramQY = paramY1 * 2 - paramQY;\r\n [minX, minY, maxX, maxY] = getQuadBBox(\r\n lastX,\r\n lastY,\r\n paramQX,\r\n paramQY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n );\r\n } else if (pathCommand === \"Q\") {\r\n paramQX = normalSegment[1] as number;\r\n paramQY = normalSegment[2] as number;\r\n [minX, minY, maxX, maxY] = getQuadBBox(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n );\r\n } else if (pathCommand === \"Z\") {\r\n [minX, minY, maxX, maxY] = getLineBBox(lastX, lastY, mx, my);\r\n }\r\n xMin = min(minX, xMin);\r\n yMin = min(minY, yMin);\r\n xMax = max(maxX, xMax);\r\n yMax = max(maxY, yMax);\r\n\r\n // update params\r\n [paramX1, paramY1] = pathCommand === \"Z\"\r\n ? [mx, my]\r\n : (normalSegment.slice(-2) as PointTuple);\r\n [paramX2, paramY2] = pathCommand === \"C\"\r\n ? ([normalSegment[3], normalSegment[4]] as PointTuple)\r\n : pathCommand === \"S\"\r\n ? ([normalSegment[1], normalSegment[2]] as PointTuple)\r\n : [paramX1, paramY1];\r\n });\r\n\r\n const width = xMax - xMin;\r\n const height = yMax - yMin;\r\n\r\n return {\r\n width,\r\n height,\r\n x: xMin,\r\n y: yMin,\r\n x2: xMax,\r\n y2: yMax,\r\n cx: xMin + width / 2,\r\n cy: yMin + height / 2,\r\n // an estimated guess\r\n cz: Math.max(width, height) + Math.min(width, height) / 2,\r\n } satisfies PathBBox;\r\n};\r\n\r\nexport default getPathBBox;\r\n","import type { PathArray, PathSegment } from \"../types\";\r\nimport getPropertiesAtLength from \"./getPropertiesAtLength\";\r\n\r\n/**\r\n * Returns the segment at a given length.\r\n *\r\n * @param pathInput the target `pathArray`\r\n * @param distance the distance in path to look at\r\n * @returns the requested segment\r\n */\r\nconst getSegmentAtLength = (\r\n pathInput: string | PathArray,\r\n distance?: number,\r\n): PathSegment | undefined => {\r\n return getPropertiesAtLength(pathInput, distance).segment;\r\n};\r\n\r\nexport default getSegmentAtLength;\r\n","import type { SegmentProperties } from \"../interface\";\r\nimport type { PathArray } from \"../types\";\r\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\r\n\r\n/**\r\n * Returns the path segment which contains a given point.\r\n *\r\n * @param path the `pathArray` to look into\r\n * @param point the point of the shape to look for\r\n * @returns the requested segment\r\n */\r\nconst getSegmentOfPoint = (\r\n path: string | PathArray,\r\n point: { x: number; y: number },\r\n): SegmentProperties | undefined => {\r\n return getPropertiesAtPoint(path, point).segment;\r\n};\r\nexport default getSegmentOfPoint;\r\n","import type { PathArray, PathSegment, RelativeCommand } from \"../types\";\r\nimport paramsCount from \"../parser/paramsCount\";\r\n\r\n/**\r\n * Iterates an array to check if it's an actual `pathArray`.\r\n *\r\n * @param path the `pathArray` to be checked\r\n * @returns iteration result\r\n */\r\nconst isPathArray = (path: unknown): path is PathArray => {\r\n return (\r\n Array.isArray(path) &&\r\n path.every((seg: PathSegment) => {\r\n const lk = seg[0].toLowerCase() as RelativeCommand;\r\n return (\r\n paramsCount[lk] === seg.length - 1 &&\r\n \"achlmqstvz\".includes(lk) &&\r\n (seg.slice(1) as unknown[]).every(Number.isFinite)\r\n );\r\n }) &&\r\n path.length > 0\r\n );\r\n};\r\nexport default isPathArray;\r\n","import type { AbsoluteArray } from \"../types\";\r\nimport isPathArray from \"./isPathArray\";\r\n\r\n/**\r\n * Iterates an array to check if it's a `pathArray`\r\n * with all absolute values.\r\n *\r\n * @param path the `pathArray` to be checked\r\n * @returns iteration result\r\n */\r\nconst isAbsoluteArray = (path: unknown): path is AbsoluteArray => {\r\n return (\r\n isPathArray(path) &&\r\n // `isPathArray` also checks if it's `Array`\r\n path.every(([x]) => x === x.toUpperCase())\r\n );\r\n};\r\nexport default isAbsoluteArray;\r\n","import type { NormalArray } from \"../types\";\r\nimport isAbsoluteArray from \"./isAbsoluteArray\";\r\n\r\n/**\r\n * Iterates an array to check if it's a `pathArray`\r\n * with all segments are in non-shorthand notation\r\n * with absolute values.\r\n *\r\n * @param {string | SVGPath.pathArray} path the `pathArray` to be checked\r\n * @returns {boolean} iteration result\r\n */\r\nconst isNormalizedArray = (path: unknown): path is NormalArray => {\r\n // `isAbsoluteArray` also checks if it's `Array`\r\n return isAbsoluteArray(path) && path.every(([pc]) => \"ACLMQZ\".includes(pc));\r\n};\r\nexport default isNormalizedArray;\r\n","import { CurveArray } from \"../types\";\r\nimport isNormalizedArray from \"./isNormalizedArray\";\r\n\r\n/**\r\n * Iterates an array to check if it's a `pathArray`\r\n * with all C (cubic bezier) segments.\r\n *\r\n * @param path the `Array` to be checked\r\n * @returns iteration result\r\n */\r\nconst isCurveArray = (path: unknown): path is CurveArray => {\r\n // `isPathArray` also checks if it's `Array`\r\n return isNormalizedArray(path) && path.every(([pc]) => \"MC\".includes(pc));\r\n};\r\nexport default isCurveArray;\r\n","import type { PathArray } from \"../types\";\r\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\r\nimport DISTANCE_EPSILON from \"./distanceEpsilon\";\r\n\r\n/**\r\n * Checks if a given point is in the stroke of a path.\r\n *\r\n * @param pathInput target path\r\n * @param point the given `{x,y}` point\r\n * @returns the query result\r\n */\r\nconst isPointInStroke = (\r\n pathInput: string | PathArray,\r\n point: { x: number; y: number },\r\n) => {\r\n const { distance } = getPropertiesAtPoint(pathInput, point);\r\n return Math.abs(distance) < DISTANCE_EPSILON; // 0.01 might be more permissive\r\n};\r\nexport default isPointInStroke;\r\n","import type { RelativeArray } from \"../types\";\r\nimport isPathArray from \"./isPathArray\";\r\n\r\n/**\r\n * Iterates an array to check if it's a `pathArray`\r\n * with relative values.\r\n *\r\n * @param path the `pathArray` to be checked\r\n * @returns iteration result\r\n */\r\nconst isRelativeArray = (path: unknown): path is RelativeArray => {\r\n return (\r\n isPathArray(path) &&\r\n // `isPathArray` checks if it's `Array`\r\n path.slice(1).every(([pc]) => pc === pc.toLowerCase())\r\n );\r\n};\r\nexport default isRelativeArray;\r\n","import scanSegment from \"../parser/scanSegment\";\r\nimport skipSpaces from \"../parser/skipSpaces\";\r\nimport PathParser from \"../parser/pathParser\";\r\n\r\n/**\r\n * Parses a path string value to determine its validity\r\n * then returns true if it's valid or false otherwise.\r\n *\r\n * @param pathString the path string to be parsed\r\n * @returns the path string validity\r\n */\r\nconst isValidPath = (pathString: string) => {\r\n if (typeof pathString !== \"string\" || !pathString.length) {\r\n return false;\r\n }\r\n\r\n const path = new PathParser(pathString);\r\n\r\n skipSpaces(path);\r\n\r\n while (path.index < path.max && !path.err.length) {\r\n scanSegment(path);\r\n }\r\n\r\n return !path.err.length && \"mM\".includes(path.segments[0][0]);\r\n};\r\nexport default isValidPath;\r\n","import type { ShapeParams } from \"../interface\";\r\n\r\n/**\r\n * Supported shapes and their specific parameters.\r\n */\r\nconst shapeParams: ShapeParams = {\r\n line: [\"x1\", \"y1\", \"x2\", \"y2\"],\r\n circle: [\"cx\", \"cy\", \"r\"],\r\n ellipse: [\"cx\", \"cy\", \"rx\", \"ry\"],\r\n rect: [\"width\", \"height\", \"x\", \"y\", \"rx\", \"ry\"],\r\n polygon: [\"points\"],\r\n polyline: [\"points\"],\r\n glyph: [\"d\"],\r\n};\r\n\r\nexport default shapeParams;\r\n","const isElement = (node?: unknown): node is Element =>\r\n node !== undefined && node !== null &&\r\n typeof node === \"object\" &&\r\n (node as Node).nodeType === 1; // ELEMENT_NODE\r\n\r\nexport default isElement;\r\n","import type {\r\n CircleAttr,\r\n EllipseAttr,\r\n GlyphAttr,\r\n LineAttr,\r\n PolyAttr,\r\n RectAttr,\r\n ShapeParams,\r\n} from \"../interface\";\r\nimport type { PathArray, PathSegment, ShapeOps, ShapeTypes } from \"../types\";\r\nimport error from \"../parser/error\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport shapeParams from \"./shapeParams\";\r\nimport isPathArray from \"./isPathArray\";\r\nimport isElement from \"./isElement\";\r\n\r\n/**\r\n * Returns a new `pathArray` from line attributes.\r\n *\r\n * @param attr shape configuration\r\n * @returns a new line `pathArray`\r\n */\r\nexport const getLinePath = (attr: LineAttr): PathArray => {\r\n let { x1, y1, x2, y2 } = attr;\r\n [x1, y1, x2, y2] = [x1, y1, x2, y2].map((a) => +a);\r\n return [\r\n [\"M\", x1, y1],\r\n [\"L\", x2, y2],\r\n ];\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` like from polyline/polygon attributes.\r\n *\r\n * @param attr shape configuration\r\n * @return a new polygon/polyline `pathArray`\r\n */\r\nexport const getPolyPath = (attr: PolyAttr): PathArray => {\r\n const pathArray = [] as PathSegment[];\r\n const points = (attr.points || \"\")\r\n .trim()\r\n .split(/[\\s|,]/)\r\n .map((a) => +a);\r\n\r\n let index = 0;\r\n while (index < points.length) {\r\n pathArray.push([index ? \"L\" : \"M\", points[index], points[index + 1]]);\r\n index += 2;\r\n }\r\n\r\n return (attr.type === \"polygon\"\r\n ? [...pathArray, [\"z\"]]\r\n : pathArray) as PathArray;\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` from circle attributes.\r\n *\r\n * @param attr shape configuration\r\n * @return a circle `pathArray`\r\n */\r\nexport const getCirclePath = (attr: CircleAttr): PathArray => {\r\n let { cx, cy, r } = attr;\r\n [cx, cy, r] = [cx, cy, r].map((a) => +a);\r\n\r\n return [\r\n [\"M\", cx - r, cy],\r\n [\"a\", r, r, 0, 1, 0, 2 * r, 0],\r\n [\"a\", r, r, 0, 1, 0, -2 * r, 0],\r\n ];\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` from ellipse attributes.\r\n *\r\n * @param attr shape configuration\r\n * @return an ellipse `pathArray`\r\n */\r\nexport const getEllipsePath = (attr: EllipseAttr): PathArray => {\r\n let { cx, cy } = attr;\r\n let rx = attr.rx || 0;\r\n let ry = attr.ry || rx;\r\n [cx, cy, rx, ry] = [cx, cy, rx, ry].map((a) => +a);\r\n\r\n return [\r\n [\"M\", cx - rx, cy],\r\n [\"a\", rx, ry, 0, 1, 0, 2 * rx, 0],\r\n [\"a\", rx, ry, 0, 1, 0, -2 * rx, 0],\r\n ];\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` like from rect attributes.\r\n *\r\n * @param attr object with properties above\r\n * @return a new `pathArray` from `` attributes\r\n */\r\nexport const getRectanglePath = (attr: RectAttr): PathArray => {\r\n const x = +attr.x || 0;\r\n const y = +attr.y || 0;\r\n const w = +attr.width;\r\n const h = +attr.height;\r\n let rx = +(attr.rx || 0);\r\n let ry = +(attr.ry || rx);\r\n\r\n // Validity checks from http://www.w3.org/TR/SVG/shapes.html#RectElement:\r\n if (rx || ry) {\r\n // rx = !rx ? ry : rx;\r\n // ry = !ry ? rx : ry;\r\n\r\n /* istanbul ignore else @preserve */\r\n if (rx * 2 > w) rx -= (rx * 2 - w) / 2;\r\n /* istanbul ignore else @preserve */\r\n if (ry * 2 > h) ry -= (ry * 2 - h) / 2;\r\n\r\n return [\r\n [\"M\", x + rx, y],\r\n [\"h\", w - rx * 2],\r\n [\"s\", rx, 0, rx, ry],\r\n [\"v\", h - ry * 2],\r\n [\"s\", 0, ry, -rx, ry],\r\n [\"h\", -w + rx * 2],\r\n [\"s\", -rx, 0, -rx, -ry],\r\n [\"v\", -h + ry * 2],\r\n [\"s\", 0, -ry, rx, -ry],\r\n ];\r\n }\r\n\r\n return [[\"M\", x, y], [\"h\", w], [\"v\", h], [\"H\", x], [\"Z\"]];\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` created from attributes of a ``, ``,\r\n * ``, ``, ``, ``, or ``.\r\n *\r\n * It can also work with an options object, see the type below\r\n * @see ShapeOps\r\n *\r\n * @param element target shape\r\n * @return the newly created `` element\r\n */\r\nconst shapeToPathArray = (\r\n element: ShapeTypes | ShapeOps,\r\n) => {\r\n const supportedShapes = Object.keys(shapeParams) as (keyof ShapeParams)[];\r\n const targetIsElement = isElement(element);\r\n const tagName = targetIsElement ? element.tagName : null;\r\n\r\n if (tagName && [...supportedShapes, \"path\"].every((s) => tagName !== s)) {\r\n throw TypeError(`${error}: \"${tagName}\" is not SVGElement`);\r\n }\r\n\r\n const type =\r\n (targetIsElement ? tagName : (element as ShapeOps).type) as ShapeOps[\r\n \"type\"\r\n ];\r\n const shapeAttrs = shapeParams[type] as string[];\r\n const config = { type } as Record;\r\n\r\n if (targetIsElement) {\r\n shapeAttrs.forEach((p) => {\r\n config[p] = element.getAttribute(p) as string;\r\n });\r\n } else {\r\n Object.assign(config, element);\r\n }\r\n\r\n // set d\r\n let pathArray = [] as unknown as PathArray;\r\n\r\n /* istanbul ignore else */\r\n if (type === \"circle\") {\r\n pathArray = getCirclePath(config as unknown as CircleAttr);\r\n } else if (type === \"ellipse\") {\r\n pathArray = getEllipsePath(config as unknown as EllipseAttr);\r\n } else if ([\"polyline\", \"polygon\"].includes(type)) {\r\n pathArray = getPolyPath(config as unknown as PolyAttr);\r\n } else if (type === \"rect\") {\r\n pathArray = getRectanglePath(config as unknown as RectAttr);\r\n } else if (type === \"line\") {\r\n pathArray = getLinePath(config as unknown as LineAttr);\r\n } else if ([\"glyph\", \"path\"].includes(type)) {\r\n pathArray = parsePathString(\r\n targetIsElement\r\n ? element.getAttribute(\"d\") || /* istanbul ignore next @preserve */ \"\"\r\n : (element as GlyphAttr).d || \"\",\r\n );\r\n }\r\n\r\n // replace target element\r\n if (isPathArray(pathArray) && pathArray.length) {\r\n return pathArray;\r\n }\r\n return false;\r\n};\r\nexport default shapeToPathArray;\r\n","import type { ShapeParams } from \"../interface\";\r\nimport type { ShapeOps, ShapeTypes } from \"../types\";\r\nimport pathToString from \"../convert/pathToString\";\r\nimport defaultOptions from \"../options/options\";\r\nimport error from \"../parser/error\";\r\nimport isValidPath from \"./isValidPath\";\r\nimport isElement from \"./isElement\";\r\nimport shapeToPathArray from \"./shapeToPathArray\";\r\nimport shapeParams from \"./shapeParams\";\r\n\r\n/**\r\n * Returns a new `` element created from attributes of a ``, ``,\r\n * ``, ``, ``, `` or ``. If `replace` parameter\r\n * is `true`, it will replace the target. The default `ownerDocument` is your current\r\n * `document` browser page, if you want to use in server-side using `jsdom`, you can\r\n * pass the `jsdom` `document` to `ownDocument`.\r\n *\r\n * It can also work with an options object, see the type below\r\n * @see ShapeOps\r\n *\r\n * The newly created `` element keeps all non-specific\r\n * attributes like `class`, `fill`, etc.\r\n *\r\n * @param element target shape\r\n * @param replace option to replace target\r\n * @param ownerDocument document for create element\r\n * @return the newly created `` element\r\n */\r\nconst shapeToPath = (\r\n element: ShapeTypes | ShapeOps,\r\n replace?: boolean,\r\n ownerDocument?: Document,\r\n): SVGPathElement | false => {\r\n const doc = ownerDocument || document;\r\n const supportedShapes = Object.keys(shapeParams) as (keyof ShapeParams)[];\r\n const targetIsElement = isElement(element);\r\n const tagName = targetIsElement ? element.tagName : null;\r\n\r\n if (tagName === \"path\") {\r\n throw TypeError(`${error}: \"${tagName}\" is already SVGPathElement`);\r\n }\r\n if (tagName && supportedShapes.every((s) => tagName !== s)) {\r\n throw TypeError(`${error}: \"${tagName}\" is not SVGElement`);\r\n }\r\n\r\n const path = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n const type =\r\n (targetIsElement ? tagName : (element as ShapeOps).type) as ShapeOps[\r\n \"type\"\r\n ];\r\n const shapeAttrs = shapeParams[type] as string[];\r\n const config = { type } as Record;\r\n\r\n // set d\r\n const round = defaultOptions.round as number;\r\n const pathArray = shapeToPathArray(element);\r\n const description = pathArray && pathArray.length\r\n ? pathToString(pathArray, round)\r\n : \"\";\r\n\r\n if (targetIsElement) {\r\n shapeAttrs.forEach((p) => {\r\n config[p] = element.getAttribute(p) as string;\r\n });\r\n // set no-specific shape attributes: fill, stroke, etc\r\n Object.values(element.attributes).forEach(({ name, value }) => {\r\n if (!shapeAttrs.includes(name)) path.setAttribute(name, value);\r\n });\r\n } else {\r\n Object.assign(config, element);\r\n // set no-specific shape attributes: fill, stroke, etc\r\n Object.keys(config).forEach((k) => {\r\n if (!shapeAttrs.includes(k) && k !== \"type\") {\r\n path.setAttribute(\r\n k.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`),\r\n config[k],\r\n );\r\n }\r\n });\r\n }\r\n\r\n // replace target element\r\n if (isValidPath(description)) {\r\n path.setAttribute(\"d\", description);\r\n if (replace && targetIsElement) {\r\n element.before(path, element);\r\n element.remove();\r\n }\r\n return path;\r\n }\r\n return false;\r\n};\r\n\r\nexport default shapeToPath;\r\n","import CSSMatrix from \"@thednp/dommatrix\";\r\n// import type { TransformObject } from '../interface';\r\nimport type { TransformObjectValues } from \"../types\";\r\n\r\n/**\r\n * Returns a transformation matrix to apply to `` elements.\r\n *\r\n * @see TransformObjectValues\r\n *\r\n * @param transform the `transformObject`\r\n * @returns a new transformation matrix\r\n */\r\nconst getSVGMatrix = (transform: TransformObjectValues): CSSMatrix => {\r\n let matrix = new CSSMatrix();\r\n const { origin } = transform;\r\n const [originX, originY] = origin as [number, number, number];\r\n const { translate } = transform;\r\n const { rotate } = transform;\r\n const { skew } = transform;\r\n const { scale } = transform;\r\n\r\n // set translate\r\n if (\r\n Array.isArray(translate) &&\r\n translate.length >= 2 &&\r\n translate.every((x) => !Number.isNaN(+x)) &&\r\n translate.some((x) => x !== 0)\r\n ) {\r\n matrix = matrix.translate(...(translate as [number, number, number?]));\r\n } else if (typeof translate === \"number\" && !Number.isNaN(translate)) {\r\n matrix = matrix.translate(translate);\r\n }\r\n\r\n if (rotate || skew || scale) {\r\n // set SVG transform-origin, always defined\r\n matrix = matrix.translate(originX, originY);\r\n\r\n // set rotation\r\n if (\r\n Array.isArray(rotate) &&\r\n rotate.length >= 2 &&\r\n rotate.every((x) => !Number.isNaN(+x)) &&\r\n rotate.some((x) => x !== 0)\r\n ) {\r\n matrix = matrix.rotate(...(rotate as [number, number, number?]));\r\n } else if (typeof rotate === \"number\" && !Number.isNaN(rotate)) {\r\n matrix = matrix.rotate(rotate);\r\n }\r\n\r\n // set skew(s)\r\n if (\r\n Array.isArray(skew) && skew.length === 2 && skew.every((x) =>\r\n !Number.isNaN(+x)\r\n ) && skew.some((x) => x !== 0)\r\n ) {\r\n matrix = skew[0] ? matrix.skewX(skew[0]) : matrix;\r\n matrix = skew[1] ? matrix.skewY(skew[1]) : matrix;\r\n } else if (typeof skew === \"number\" && !Number.isNaN(skew)) {\r\n matrix = matrix.skewX(skew);\r\n }\r\n\r\n // set scale\r\n if (\r\n Array.isArray(scale) && scale.length >= 2 && scale.every((x) =>\r\n !Number.isNaN(+x)\r\n ) && scale.some((x) => x !== 1)\r\n ) {\r\n matrix = matrix.scale(...(scale as [number, number, number?]));\r\n } else if (typeof scale === \"number\" && !Number.isNaN(scale)) {\r\n matrix = matrix.scale(scale);\r\n }\r\n // set SVG transform-origin\r\n matrix = matrix.translate(-originX, -originY);\r\n }\r\n\r\n return matrix;\r\n};\r\nexport default getSVGMatrix;\r\n","import defaultOptions from \"../options/options\";\r\nimport type { ParserParams } from \"../interface\";\r\nimport roundTo from \"../math/roundTo\";\r\nimport type {\r\n AbsoluteSegment,\r\n NormalSegment,\r\n PathCommand,\r\n ShortSegment,\r\n SSegment,\r\n TSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Shorten a single segment of a `pathArray` object.\r\n *\r\n * @param segment the `absoluteSegment` object\r\n * @param normalSegment the `normalSegment` object\r\n * @param params the coordinates of the previous segment\r\n * @param prevCommand the path command of the previous segment\r\n * @returns the shortened segment\r\n */\r\nconst shortenSegment = (\r\n segment: AbsoluteSegment,\r\n normalSegment: NormalSegment,\r\n params: ParserParams,\r\n prevCommand: PathCommand,\r\n): ShortSegment => {\r\n const [pathCommand] = segment;\r\n const { round: defaultRound } = defaultOptions;\r\n const round = typeof defaultRound === \"number\"\r\n ? defaultRound\r\n : /* istanbul ignore next */ 4;\r\n const normalValues = normalSegment.slice(1) as number[];\r\n const { x1, y1, x2, y2, x, y } = params;\r\n const [nx, ny] = normalValues.slice(-2);\r\n const result = segment;\r\n\r\n if (!\"TQ\".includes(pathCommand)) {\r\n // optional but good to be cautious\r\n params.qx = null;\r\n params.qy = null;\r\n }\r\n\r\n if (pathCommand === \"L\") {\r\n if (roundTo(x, round) === roundTo(nx, round)) {\r\n return [\"V\", ny];\r\n } else if (roundTo(y, round) === roundTo(ny, round)) {\r\n return [\"H\", nx];\r\n }\r\n } else if (pathCommand === \"C\") {\r\n const [nx1, ny1] = normalValues;\r\n params.x1 = nx1;\r\n params.y1 = ny1;\r\n\r\n if (\r\n \"CS\".includes(prevCommand) &&\r\n ((roundTo(nx1, round) === roundTo(x1 * 2 - x2, round) &&\r\n roundTo(ny1, round) === roundTo(y1 * 2 - y2, round)) ||\r\n (roundTo(x1, round) === roundTo(x2 * 2 - x, round) &&\r\n roundTo(y1, round) === roundTo(y2 * 2 - y, round)))\r\n ) {\r\n return [\r\n \"S\",\r\n normalValues[2],\r\n normalValues[3],\r\n normalValues[4],\r\n normalValues[5],\r\n ] as SSegment;\r\n }\r\n } else if (pathCommand === \"Q\") {\r\n const [qx, qy] = normalValues;\r\n params.qx = qx;\r\n params.qy = qy;\r\n\r\n if (\r\n \"QT\".includes(prevCommand) &&\r\n roundTo(qx, round) === roundTo(x1 * 2 - x2, round) &&\r\n roundTo(qy, round) === roundTo(y1 * 2 - y2, round)\r\n ) {\r\n return [\"T\", normalValues[2], normalValues[3]] as TSegment;\r\n }\r\n }\r\n\r\n // ['V', 'H', 'S', 'T', 'Z'].includes(pathCommand)\r\n return result as ShortSegment;\r\n};\r\n\r\nexport default shortenSegment;\r\n","import type { PathCommand, PathSegment } from \"../types\";\r\nimport roundTo from \"../math/roundTo\";\r\n\r\nconst roundSegment = (\r\n segment: T,\r\n roundOption: number,\r\n) => {\r\n const values = (segment.slice(1) as number[]).map((n) =>\r\n roundTo(n, roundOption)\r\n );\r\n return [segment[0] as PathCommand | number].concat(values) as T;\r\n};\r\n\r\nexport default roundSegment;\r\n","import type { AbsoluteSegment, PathArray, PathCommand } from \"../types\";\r\nimport pathToAbsolute from \"../convert/pathToAbsolute\";\r\nimport shortenSegment from \"./shortenSegment\";\r\nimport paramsParser from \"../parser/paramsParser\";\r\nimport iterate from \"./iterate\";\r\nimport normalizeSegment from \"./normalizeSegment\";\r\nimport relativizeSegment from \"./relativizeSegment\";\r\nimport roundSegment from \"./roundSegment\";\r\n\r\n/**\r\n * Optimizes a `pathArray` object:\r\n * * convert segments to shorthand if possible\r\n * * select shortest segments from absolute and relative `pathArray`s\r\n *\r\n * @param pathInput a string or `pathArray`\r\n * @param roundOption the amount of decimals to round values to\r\n * @returns the optimized `pathArray`\r\n */\r\nconst optimizePath = (pathInput: PathArray, roundOption?: number) => {\r\n const path = pathToAbsolute(pathInput);\r\n // allow for ZERO decimals or use an aggressive value of 2\r\n const round = typeof roundOption === \"number\" && roundOption >= 0\r\n ? roundOption\r\n : /* istanbul ignore next @preserve */ 2;\r\n // this utility overrides the iterator params\r\n const optimParams = { ...paramsParser };\r\n\r\n const allPathCommands = [] as PathCommand[];\r\n let pathCommand = \"M\" as PathCommand;\r\n let prevCommand = \"Z\" as PathCommand;\r\n\r\n return iterate(path, (seg, i, lastX, lastY) => {\r\n optimParams.x = lastX;\r\n optimParams.y = lastY;\r\n const normalizedSegment = normalizeSegment(seg, optimParams);\r\n let result = seg;\r\n [pathCommand] = seg;\r\n\r\n // Save current path command\r\n allPathCommands[i] = pathCommand;\r\n if (i) {\r\n // Get previous path command for `shortenSegment`\r\n prevCommand = allPathCommands[i - 1];\r\n const shortSegment = shortenSegment(\r\n seg as AbsoluteSegment,\r\n normalizedSegment,\r\n optimParams,\r\n prevCommand,\r\n );\r\n const absSegment = roundSegment(shortSegment, round);\r\n const absString = absSegment.join(\"\");\r\n const relativeSegment = relativizeSegment(shortSegment, i, lastX, lastY);\r\n const relSegment = roundSegment(relativeSegment, round);\r\n const relString = relSegment.join(\"\");\r\n result = absString.length < relString.length ? absSegment : relSegment;\r\n }\r\n\r\n const seglen = normalizedSegment.length;\r\n optimParams.x1 = +normalizedSegment[seglen - 2];\r\n optimParams.y1 = +normalizedSegment[seglen - 1];\r\n optimParams.x2 = +normalizedSegment[seglen - 4] || optimParams.x1;\r\n optimParams.y2 = +normalizedSegment[seglen - 3] || optimParams.y1;\r\n\r\n return result;\r\n });\r\n};\r\n\r\nexport default optimizePath;\r\n","import CSSMatrix from \"@thednp/dommatrix\";\r\nimport { type PointTuple } from \"../types\";\r\n\r\n/**\r\n * Transforms a specified point using a matrix, returning a new\r\n * Tuple *Object* comprising of the transformed point.\r\n * Neither the matrix nor the original point are altered.\r\n *\r\n * @copyright thednp © 2021\r\n *\r\n * @param cssm CSSMatrix instance\r\n * @param v Tuple\r\n * @return the resulting Tuple\r\n */\r\nconst translatePoint = (\r\n cssm: CSSMatrix,\r\n v: [number, number, number, number],\r\n): [number, number, number, number] => {\r\n let m = CSSMatrix.Translate(v[0], v[1], v[2]);\r\n\r\n [, , , m.m44] = v;\r\n m = cssm.multiply(m);\r\n\r\n return [m.m41, m.m42, m.m43, m.m44];\r\n};\r\n\r\n/**\r\n * Returns the [x,y] projected coordinates for a given an [x,y] point\r\n * and an [x,y,z] perspective origin point.\r\n *\r\n * Equation found here =>\r\n * http://en.wikipedia.org/wiki/3D_projection#Diagram\r\n * Details =>\r\n * https://stackoverflow.com/questions/23792505/predicted-rendering-of-css-3d-transformed-pixel\r\n *\r\n * @param m the transformation matrix\r\n * @param point2D the initial [x,y] coordinates\r\n * @param origin the [x,y,z] transform origin\r\n * @returns the projected [x,y] coordinates\r\n */\r\nconst projection2d = (\r\n m: CSSMatrix,\r\n point2D: PointTuple,\r\n origin: [number, number, number],\r\n): PointTuple => {\r\n const [originX, originY, originZ] = origin;\r\n const [x, y, z] = translatePoint(m, [point2D[0], point2D[1], 0, 1]);\r\n\r\n const relativePositionX = x - originX;\r\n const relativePositionY = y - originY;\r\n const relativePositionZ = z - originZ;\r\n\r\n return [\r\n // protect against division by ZERO\r\n relativePositionX * (Math.abs(originZ) / Math.abs(relativePositionZ) || 1) +\r\n originX,\r\n relativePositionY * (Math.abs(originZ) / Math.abs(relativePositionZ) || 1) +\r\n originY,\r\n ];\r\n};\r\nexport default projection2d;\r\n","import type { CSegment, CurveArray, MSegment, PathCommand } from \"../types\";\r\n\r\n/**\r\n * Reverses all segments of a `pathArray`\r\n * which consists of only C (cubic-bezier) path commands.\r\n *\r\n * @param path the source `pathArray`\r\n * @returns the reversed `pathArray`\r\n */\r\nconst reverseCurve = (path: CurveArray) => {\r\n const rotatedCurve = path\r\n .slice(1)\r\n .map((x, i, curveOnly) =>\r\n !i\r\n ? path[0].slice(1).concat(x.slice(1) as number[])\r\n : curveOnly[i - 1].slice(-2).concat(x.slice(1))\r\n )\r\n .map((x) => x.map((_, i) => x[x.length - i - 2 * (1 - (i % 2))]))\r\n .reverse() as (MSegment | CSegment)[];\r\n\r\n return [[\"M\" as PathCommand | number].concat(rotatedCurve[0].slice(0, 2))]\r\n .concat(\r\n rotatedCurve.map((x) => [\"C\" as PathCommand | number].concat(x.slice(2))),\r\n ) as CurveArray;\r\n};\r\n\r\nexport default reverseCurve;\r\n","import type {\r\n ASegment,\r\n CSegment,\r\n HSegment,\r\n MSegment,\r\n PathArray,\r\n PathSegment,\r\n PointTuple,\r\n QSegment,\r\n SSegment,\r\n TSegment,\r\n VSegment,\r\n} from \"../types\";\r\nimport pathToAbsolute from \"../convert/pathToAbsolute\";\r\nimport normalizePath from \"./normalizePath\";\r\nimport iterate from \"./iterate\";\r\n\r\n/**\r\n * Reverses all segments of a `pathArray` and returns a new `pathArray` instance\r\n * with absolute values.\r\n *\r\n * @param pathInput the source `pathArray`\r\n * @returns the reversed `pathArray`\r\n */\r\nconst reversePath = (pathInput: PathArray) => {\r\n const absolutePath = pathToAbsolute(pathInput);\r\n const normalizedPath = normalizePath(absolutePath);\r\n const pLen = absolutePath.length;\r\n const isClosed = absolutePath[pLen - 1][0] === \"Z\";\r\n\r\n const reversedPath = iterate(absolutePath, (segment, i) => {\r\n const normalizedSegment = normalizedPath[i];\r\n const prevSeg = i && absolutePath[i - 1];\r\n const prevCommand = prevSeg && prevSeg[0];\r\n const nextSeg = absolutePath[i + 1];\r\n const nextCommand = nextSeg && nextSeg[0];\r\n const [pathCommand] = segment;\r\n const [x, y] = normalizedPath[i ? i - 1 : pLen - 1].slice(-2) as PointTuple;\r\n let result = segment;\r\n\r\n switch (pathCommand) {\r\n case \"M\":\r\n result = (isClosed ? [\"Z\"] : [pathCommand, x, y]) as PathSegment;\r\n break;\r\n case \"A\":\r\n result = [\r\n pathCommand,\r\n segment[1],\r\n segment[2],\r\n segment[3],\r\n segment[4],\r\n segment[5] === 1 ? 0 : 1,\r\n x,\r\n y,\r\n ] as ASegment;\r\n break;\r\n case \"C\":\r\n if (nextSeg && nextCommand === \"S\") {\r\n result = [\"S\", segment[1], segment[2], x, y] as SSegment;\r\n } else {\r\n result = [\r\n pathCommand,\r\n segment[3],\r\n segment[4],\r\n segment[1],\r\n segment[2],\r\n x,\r\n y,\r\n ] as CSegment;\r\n }\r\n break;\r\n case \"S\":\r\n if (\r\n prevCommand && \"CS\".includes(prevCommand) &&\r\n (!nextSeg || nextCommand !== \"S\")\r\n ) {\r\n result = [\r\n \"C\",\r\n normalizedSegment[3],\r\n normalizedSegment[4],\r\n normalizedSegment[1],\r\n normalizedSegment[2],\r\n x,\r\n y,\r\n ] as CSegment;\r\n } else {\r\n result = [\r\n pathCommand,\r\n normalizedSegment[1],\r\n normalizedSegment[2],\r\n x,\r\n y,\r\n ] as SSegment;\r\n }\r\n break;\r\n case \"Q\":\r\n if (nextSeg && nextCommand === \"T\") {\r\n result = [\"T\", x, y] as TSegment;\r\n } else {\r\n result = [pathCommand, segment[1], segment[2], x, y] as QSegment;\r\n }\r\n break;\r\n case \"T\":\r\n if (\r\n prevCommand && \"QT\".includes(prevCommand) &&\r\n (!nextSeg || nextCommand !== \"T\")\r\n ) {\r\n result = [\r\n \"Q\",\r\n normalizedSegment[1],\r\n normalizedSegment[2],\r\n x,\r\n y,\r\n ] as QSegment;\r\n } else {\r\n result = [pathCommand, x, y] as TSegment;\r\n }\r\n break;\r\n case \"Z\":\r\n result = [\"M\", x, y] as MSegment;\r\n break;\r\n case \"H\":\r\n result = [pathCommand, x] as HSegment;\r\n break;\r\n case \"V\":\r\n result = [pathCommand, y] as VSegment;\r\n break;\r\n default:\r\n result = [pathCommand as typeof pathCommand | number].concat(\r\n segment.slice(1, -2),\r\n x,\r\n y,\r\n ) as PathSegment;\r\n }\r\n\r\n return result;\r\n });\r\n\r\n return (\r\n isClosed\r\n ? reversedPath.reverse()\r\n : [reversedPath[0] as PathSegment].concat(reversedPath.slice(1).reverse())\r\n ) as PathArray;\r\n};\r\n\r\nexport default reversePath;\r\n","import type { PathArray } from \"../types\";\r\nimport defaultOptions from \"../options/options\";\r\nimport iterate from \"./iterate\";\r\nimport roundSegment from \"./roundSegment\";\r\n\r\n/**\r\n * Rounds the values of a `pathArray` instance to\r\n * a specified amount of decimals and returns it.\r\n *\r\n * @param path the source `pathArray`\r\n * @param roundOption the amount of decimals to round numbers to\r\n * @returns the resulted `pathArray` with rounded values\r\n */\r\nconst roundPath = (path: PathArray, roundOption?: number | \"off\") => {\r\n let { round } = defaultOptions;\r\n // allow for ZERO decimals\r\n round = roundOption === \"off\"\r\n ? roundOption\r\n : typeof roundOption === \"number\" && roundOption >= 0\r\n ? roundOption\r\n : typeof round === \"number\" && round >= 0\r\n ? round\r\n : /* istanbul ignore next @preserve */ \"off\";\r\n\r\n /* istanbul ignore else @preserve */\r\n if (round === \"off\") return path.slice(0) as PathArray;\r\n\r\n return iterate(path, (segment) => {\r\n return roundSegment(segment, round);\r\n });\r\n};\r\nexport default roundPath;\r\n","import midPoint from \"../math/midPoint\";\r\nimport type { CubicSegment, PointTuple } from \"../types\";\r\n\r\n/**\r\n * Split a cubic-bezier segment into two.\r\n *\r\n * @param pts the cubic-bezier parameters\r\n * @param ratio the cubic-bezier parameters\r\n * @return two new cubic-bezier segments\r\n */\r\nconst splitCubic = (\r\n pts: number[],\r\n ratio = 0.5,\r\n): [CubicSegment, CubicSegment] => {\r\n const t = ratio;\r\n const p0 = pts.slice(0, 2) as PointTuple;\r\n const p1 = pts.slice(2, 4) as PointTuple;\r\n const p2 = pts.slice(4, 6) as PointTuple;\r\n const p3 = pts.slice(6, 8) as PointTuple;\r\n const p4 = midPoint(p0, p1, t);\r\n const p5 = midPoint(p1, p2, t);\r\n const p6 = midPoint(p2, p3, t);\r\n const p7 = midPoint(p4, p5, t);\r\n const p8 = midPoint(p5, p6, t);\r\n const p9 = midPoint(p7, p8, t);\r\n\r\n return [\r\n [\"C\", p4[0], p4[1], p7[0], p7[1], p9[0], p9[1]],\r\n [\"C\", p8[0], p8[1], p6[0], p6[1], p3[0], p3[1]],\r\n ];\r\n};\r\nexport default splitCubic;\r\n","import paramsParser from \"../parser/paramsParser\";\r\nimport type {\r\n AbsoluteCommand,\r\n HSegment,\r\n MSegment,\r\n PathArray,\r\n PointTuple,\r\n RelativeCommand,\r\n VSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Split a path into an `Array` of sub-path strings.\r\n *\r\n * In the process, values are converted to absolute\r\n * for visual consistency.\r\n *\r\n * @param pathInput the source `pathArray`\r\n * @return an array with all sub-path strings\r\n */\r\nconst splitPath = (pathInput: PathArray): PathArray[] => {\r\n const composite = [] as PathArray[];\r\n let path: PathArray;\r\n let pi = -1;\r\n let x = 0;\r\n let y = 0;\r\n let mx = 0;\r\n let my = 0;\r\n const params = { ...paramsParser };\r\n\r\n pathInput.forEach((seg) => {\r\n const [pathCommand] = seg;\r\n const absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\r\n const relCommand = pathCommand.toLowerCase() as RelativeCommand;\r\n const isRelative = pathCommand === relCommand;\r\n const values = seg.slice(1) as number[];\r\n\r\n if (absCommand === \"M\") {\r\n pi += 1;\r\n [x, y] = values as PointTuple;\r\n x += isRelative ? params.x : 0;\r\n y += isRelative ? params.y : 0;\r\n mx = x;\r\n my = y;\r\n path = [(isRelative ? [absCommand, mx, my] : seg) as MSegment];\r\n } else {\r\n if (absCommand === \"Z\") {\r\n x = mx;\r\n y = my;\r\n } else if (absCommand === \"H\") {\r\n [, x] = seg as HSegment;\r\n x += isRelative ? params.x : /* istanbul ignore next @preserve */ 0;\r\n } else if (absCommand === \"V\") {\r\n [, y] = seg as VSegment;\r\n y += isRelative ? params.y : /* istanbul ignore next @preserve */ 0;\r\n } else {\r\n [x, y] = seg.slice(-2) as PointTuple;\r\n x += isRelative ? params.x : 0;\r\n y += isRelative ? params.y : 0;\r\n }\r\n path.push(seg);\r\n }\r\n\r\n params.x = x;\r\n params.y = y;\r\n composite[pi] = path;\r\n });\r\n\r\n return composite;\r\n};\r\nexport default splitPath;\r\n","import getSVGMatrix from \"./getSVGMatrix\";\r\nimport projection2d from \"./projection2d\";\r\nimport defaultOptions from \"../options/options\";\r\nimport type {\r\n AbsoluteArray,\r\n AbsoluteSegment,\r\n CSegment,\r\n LSegment,\r\n PathArray,\r\n TransformObjectValues,\r\n} from \"../types\";\r\nimport type { TransformObject } from \"../interface\";\r\nimport iterate from \"./iterate\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport absolutizeSegment from \"./absolutizeSegment\";\r\nimport arcToCubic from \"./arcToCubic\";\r\n\r\n/**\r\n * Apply a 2D / 3D transformation to a `pathArray` instance.\r\n *\r\n * Since *SVGElement* doesn't support 3D transformation, this function\r\n * creates a 2D projection of the element.\r\n *\r\n * @param path the `pathArray` to apply transformation\r\n * @param transform the transform functions `Object`\r\n * @returns the resulted `pathArray`\r\n */\r\nconst transformPath = (\r\n pathInput: PathArray | string,\r\n transform?: Partial,\r\n) => {\r\n // last x and y transformed values\r\n let x = 0;\r\n let y = 0;\r\n // new x and y transformed\r\n let lx = 0;\r\n let ly = 0;\r\n // segment params iteration index and length\r\n let j = 0;\r\n let jj = 0;\r\n let pathCommand = \"M\";\r\n // transform uses it's own set of params\r\n const path = parsePathString(pathInput);\r\n const transformProps = transform && Object.keys(transform);\r\n\r\n // when used as a static method, invalidate somehow\r\n if (!transform || (transformProps && !transformProps.length)) {\r\n return path.slice(0) as typeof path;\r\n }\r\n\r\n // transform origin is extremely important\r\n if (!transform.origin) {\r\n Object.assign(transform, { origin: defaultOptions.origin });\r\n }\r\n const origin = transform.origin as [number, number, number];\r\n const matrixInstance = getSVGMatrix(transform as TransformObjectValues);\r\n\r\n if (matrixInstance.isIdentity) return path.slice(0) as typeof path;\r\n\r\n return iterate(path, (seg, index, lastX, lastY) => {\r\n [pathCommand] = seg;\r\n const absCommand = pathCommand.toUpperCase();\r\n const isRelative = absCommand !== pathCommand;\r\n const absoluteSegment = isRelative\r\n ? absolutizeSegment(seg, index, lastX, lastY)\r\n : (seg.slice(0) as AbsoluteSegment);\r\n\r\n let result = absCommand === \"A\"\r\n // ? segmentToCubic(absoluteSegment, transformParams)\r\n ? ([\"C\" as string | number].concat(\r\n arcToCubic(\r\n lastX,\r\n lastY,\r\n absoluteSegment[1] as number,\r\n absoluteSegment[2] as number,\r\n absoluteSegment[3] as number,\r\n absoluteSegment[4] as number,\r\n absoluteSegment[5] as number,\r\n absoluteSegment[6] as number,\r\n absoluteSegment[7] as number,\r\n ),\r\n ) as CSegment)\r\n : absCommand === \"V\"\r\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\r\n : absCommand === \"H\"\r\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\r\n : absoluteSegment;\r\n\r\n // update pathCommand\r\n pathCommand = result[0];\r\n const isLongArc = pathCommand === \"C\" && result.length > 7;\r\n const tempSegment =\r\n (isLongArc ? result.slice(0, 7) : result.slice(0)) as AbsoluteSegment;\r\n\r\n if (isLongArc) {\r\n path.splice(\r\n index + 1,\r\n 0,\r\n [\"C\" as typeof pathCommand | number].concat(\r\n result.slice(7),\r\n ) as CSegment,\r\n );\r\n result = tempSegment as CSegment;\r\n }\r\n\r\n if (pathCommand === \"L\") {\r\n [lx, ly] = projection2d(matrixInstance, [\r\n (result as LSegment)[1],\r\n (result as LSegment)[2],\r\n ], origin);\r\n\r\n /* istanbul ignore else @preserve */\r\n if (x !== lx && y !== ly) {\r\n result = [\"L\", lx, ly];\r\n } else if (y === ly) {\r\n result = [\"H\", lx];\r\n } else if (x === lx) {\r\n result = [\"V\", ly];\r\n }\r\n } else {\r\n for (j = 1, jj = result.length; j < jj; j += 2) {\r\n [lx, ly] = projection2d(\r\n matrixInstance,\r\n [+result[j], +result[j + 1]],\r\n origin,\r\n );\r\n result[j] = lx;\r\n result[j + 1] = ly;\r\n }\r\n }\r\n // now update x and y\r\n x = lx;\r\n y = ly;\r\n\r\n return result;\r\n });\r\n};\r\n\r\nexport default transformPath;\r\n","\"use strict\";\r\nimport CSSMatrix from \"@thednp/dommatrix\";\r\nimport { PathArray, PointTuple, TransformObjectValues } from \"./types\";\r\nimport type { Options, TransformEntries, TransformObject } from \"./interface\";\r\nexport * from \"./types\";\r\nexport * from \"./interface\";\r\nimport defaultOptions from \"./options/options\";\r\n\r\nimport pathToAbsolute from \"./convert/pathToAbsolute\";\r\nimport pathToRelative from \"./convert/pathToRelative\";\r\nimport pathToCurve from \"./convert/pathToCurve\";\r\nimport pathToString from \"./convert/pathToString\";\r\nimport * as arcTools from \"./math/arcTools\";\r\nimport {\r\n bezierLength,\r\n calculateBezier,\r\n CBEZIER_MINMAX_EPSILON,\r\n computeBezier,\r\n Cvalues,\r\n deriveBezier,\r\n getBezierLength,\r\n minmaxC,\r\n minmaxQ,\r\n Tvalues,\r\n} from \"./math/bezier\";\r\nimport {\r\n getCubicBBox,\r\n getCubicLength,\r\n getPointAtCubicLength,\r\n getPointAtCubicSegmentLength,\r\n} from \"./math/cubicTools\";\r\nimport {\r\n getLineBBox,\r\n getLineLength,\r\n getPointAtLineLength,\r\n} from \"./math/lineTools\";\r\nimport {\r\n getPointAtQuadLength,\r\n getPointAtQuadSegmentLength,\r\n getQuadBBox,\r\n getQuadLength,\r\n} from \"./math/quadTools\";\r\nimport { polygonArea, polygonLength } from \"./math/polygonTools\";\r\n\r\nimport distanceSquareRoot from \"./math/distanceSquareRoot\";\r\nimport midPoint from \"./math/midPoint\";\r\nimport rotateVector from \"./math/rotateVector\";\r\nimport roundTo from \"./math/roundTo\";\r\n\r\nimport error from \"./parser/error\";\r\nimport parsePathString from \"./parser/parsePathString\";\r\nimport finalizeSegment from \"./parser/finalizeSegment\";\r\nimport invalidPathValue from \"./parser/invalidPathValue\";\r\nimport isArcCommand from \"./parser/isArcCommand\";\r\nimport isDigit from \"./parser/isDigit\";\r\nimport isDigitStart from \"./parser/isDigitStart\";\r\nimport isMoveCommand from \"./parser/isMoveCommand\";\r\nimport isPathCommand from \"./parser/isPathCommand\";\r\nimport isSpace from \"./parser/isSpace\";\r\nimport paramsCount from \"./parser/paramsCount\";\r\nimport paramsParser from \"./parser/paramsParser\";\r\nimport pathParser from \"./parser/pathParser\";\r\nimport scanFlag from \"./parser/scanFlag\";\r\nimport scanParam from \"./parser/scanParam\";\r\nimport scanSegment from \"./parser/scanSegment\";\r\nimport skipSpaces from \"./parser/skipSpaces\";\r\n\r\nimport distanceEpsilon from \"./util/distanceEpsilon\";\r\nimport getClosestPoint from \"./util/getClosestPoint\";\r\nimport getDrawDirection from \"./util/getDrawDirection\";\r\nimport getPathArea from \"./util/getPathArea\";\r\nimport getPathBBox from \"./util/getPathBBox\";\r\nimport getPointAtLength from \"./util/getPointAtLength\";\r\nimport getPropertiesAtLength from \"./util/getPropertiesAtLength\";\r\nimport getPropertiesAtPoint from \"./util/getPropertiesAtPoint\";\r\nimport getSegmentAtLength from \"./util/getSegmentAtLength\";\r\nimport getSegmentOfPoint from \"./util/getSegmentOfPoint\";\r\nimport getTotalLength from \"./util/getTotalLength\";\r\n\r\nimport isAbsoluteArray from \"./util/isAbsoluteArray\";\r\nimport isCurveArray from \"./util/isCurveArray\";\r\nimport isNormalizedArray from \"./util/isNormalizedArray\";\r\nimport isPathArray from \"./util/isPathArray\";\r\nimport isPointInStroke from \"./util/isPointInStroke\";\r\nimport isRelativeArray from \"./util/isRelativeArray\";\r\nimport isValidPath from \"./util/isValidPath\";\r\nimport shapeParams from \"./util/shapeParams\";\r\nimport shapeToPath from \"./util/shapeToPath\";\r\nimport shapeToPathArray from \"./util/shapeToPathArray\";\r\n\r\nimport absolutizeSegment from \"./process/absolutizeSegment\";\r\nimport arcToCubic from \"./process/arcToCubic\";\r\nimport getSVGMatrix from \"./process/getSVGMatrix\";\r\nimport iterate from \"./process/iterate\";\r\nimport lineToCubic from \"./process/lineToCubic\";\r\nimport normalizePath from \"./process/normalizePath\";\r\nimport normalizeSegment from \"./process/normalizeSegment\";\r\nimport optimizePath from \"./process/optimizePath\";\r\nimport projection2d from \"./process/projection2d\";\r\nimport quadToCubic from \"./process/quadToCubic\";\r\nimport relativizeSegment from \"./process/relativizeSegment\";\r\nimport reverseCurve from \"./process/reverseCurve\";\r\nimport reversePath from \"./process/reversePath\";\r\nimport roundPath from \"./process/roundPath\";\r\nimport roundSegment from \"./process/roundSegment\";\r\nimport segmentToCubic from \"./process/segmentToCubic\";\r\nimport shortenSegment from \"./process/shortenSegment\";\r\nimport splitCubic from \"./process/splitCubic\";\r\nimport splitPath from \"./process/splitPath\";\r\nimport transformPath from \"./process/transformPath\";\r\n\r\n/**\r\n * Creates a new SVGPathCommander instance with the following properties:\r\n * * segments: `pathArray`\r\n * * round: number\r\n * * origin: [number, number, number?]\r\n *\r\n * @class\r\n * @author thednp \r\n * @returns a new SVGPathCommander instance\r\n */\r\nclass SVGPathCommander {\r\n public static CSSMatrix = CSSMatrix;\r\n public static pathToAbsolute = pathToAbsolute;\r\n public static pathToRelative = pathToRelative;\r\n public static pathToCurve = pathToCurve;\r\n public static pathToString = pathToString;\r\n public static arcTools = arcTools;\r\n public static bezierTools = {\r\n Cvalues,\r\n Tvalues,\r\n minmaxC,\r\n minmaxQ,\r\n getBezierLength,\r\n bezierLength,\r\n calculateBezier,\r\n computeBezier,\r\n deriveBezier,\r\n CBEZIER_MINMAX_EPSILON,\r\n };\r\n public static cubicTools = {\r\n getCubicLength,\r\n getCubicBBox,\r\n getPointAtCubicLength,\r\n getPointAtCubicSegmentLength,\r\n };\r\n public static lineTools = {\r\n getPointAtLineLength,\r\n getLineBBox,\r\n getLineLength,\r\n };\r\n public static quadTools = {\r\n getPointAtQuadSegmentLength,\r\n getQuadLength,\r\n getQuadBBox,\r\n getPointAtQuadLength,\r\n };\r\n public static polygonTools = { polygonArea, polygonLength };\r\n public static distanceSquareRoot = distanceSquareRoot;\r\n public static distanceEpsilon = distanceEpsilon;\r\n public static midPoint = midPoint;\r\n public static rotateVector = rotateVector;\r\n public static roundTo = roundTo;\r\n public static finalizeSegment = finalizeSegment;\r\n public static invalidPathValue = invalidPathValue;\r\n public static isArcCommand = isArcCommand;\r\n public static isDigit = isDigit;\r\n public static isDigitStart = isDigitStart;\r\n public static isMoveCommand = isMoveCommand;\r\n public static isPathCommand = isPathCommand;\r\n public static isSpace = isSpace;\r\n public static paramsCount = paramsCount;\r\n public static paramsParser = paramsParser;\r\n public static pathParser = pathParser;\r\n public static scanFlag = scanFlag;\r\n public static scanParam = scanParam;\r\n public static scanSegment = scanSegment;\r\n public static skipSpaces = skipSpaces;\r\n public static getPathBBox = getPathBBox;\r\n public static getPathArea = getPathArea;\r\n public static getTotalLength = getTotalLength;\r\n public static getDrawDirection = getDrawDirection;\r\n public static getPointAtLength = getPointAtLength;\r\n public static getPropertiesAtLength = getPropertiesAtLength;\r\n public static getPropertiesAtPoint = getPropertiesAtPoint;\r\n public static getClosestPoint = getClosestPoint;\r\n public static getSegmentOfPoint = getSegmentOfPoint;\r\n public static getSegmentAtLength = getSegmentAtLength;\r\n public static isPointInStroke = isPointInStroke;\r\n public static isValidPath = isValidPath;\r\n public static isPathArray = isPathArray;\r\n public static isAbsoluteArray = isAbsoluteArray;\r\n public static isRelativeArray = isRelativeArray;\r\n public static isCurveArray = isCurveArray;\r\n public static isNormalizedArray = isNormalizedArray;\r\n public static shapeToPath = shapeToPath;\r\n public static shapeToPathArray = shapeToPathArray;\r\n public static shapeParams = shapeParams;\r\n public static parsePathString = parsePathString;\r\n public static absolutizeSegment = absolutizeSegment;\r\n public static arcToCubic = arcToCubic;\r\n public static getSVGMatrix = getSVGMatrix;\r\n public static iterate = iterate;\r\n public static lineToCubic = lineToCubic;\r\n public static normalizePath = normalizePath;\r\n public static normalizeSegment = normalizeSegment;\r\n public static optimizePath = optimizePath;\r\n public static projection2d = projection2d;\r\n public static quadToCubic = quadToCubic;\r\n public static relativizeSegment = relativizeSegment;\r\n public static reverseCurve = reverseCurve;\r\n public static reversePath = reversePath;\r\n public static roundPath = roundPath;\r\n public static roundSegment = roundSegment;\r\n public static segmentToCubic = segmentToCubic;\r\n public static shortenSegment = shortenSegment;\r\n public static splitCubic = splitCubic;\r\n public static splitPath = splitPath;\r\n public static transformPath = transformPath;\r\n // declare class properties\r\n declare segments: PathArray;\r\n declare round: number | \"off\";\r\n declare origin: [number, number, number];\r\n\r\n /**\r\n * @constructor\r\n * @param pathValue the path string\r\n * @param config instance options\r\n */\r\n constructor(pathValue: string, config?: Partial) {\r\n const instanceOptions = config || {};\r\n const undefPath = typeof pathValue === \"undefined\";\r\n\r\n if (undefPath || !pathValue.length) {\r\n throw TypeError(\r\n `${error}: \"pathValue\" is ${undefPath ? \"undefined\" : \"empty\"}`,\r\n );\r\n }\r\n\r\n this.segments = parsePathString(pathValue);\r\n\r\n // // set instance options.round\r\n const { round: roundOption, origin: originOption } = instanceOptions;\r\n let round: number | \"off\";\r\n\r\n if (Number.isInteger(roundOption) || roundOption === \"off\") {\r\n round = roundOption as number | \"off\";\r\n } else {\r\n round = defaultOptions.round as number;\r\n }\r\n\r\n // set instance options.origin\r\n // the SVGPathCommander class will always override the default origin\r\n let origin = defaultOptions.origin as [number, number, number];\r\n /* istanbul ignore else @preserve */\r\n if (Array.isArray(originOption) && originOption.length >= 2) {\r\n const [originX, originY, originZ] = originOption.map(Number);\r\n origin = [\r\n !Number.isNaN(originX) ? originX : 0,\r\n !Number.isNaN(originY) ? originY : 0,\r\n !Number.isNaN(originZ) ? originZ : 0,\r\n ];\r\n }\r\n\r\n this.round = round;\r\n this.origin = origin;\r\n\r\n return this;\r\n }\r\n get bbox() {\r\n return getPathBBox(this.segments);\r\n }\r\n get length() {\r\n return getTotalLength(this.segments);\r\n }\r\n\r\n /**\r\n * Returns the path bounding box, equivalent to native `path.getBBox()`.\r\n *\r\n * @public\r\n * @returns the pathBBox\r\n */\r\n getBBox() {\r\n return this.bbox;\r\n }\r\n\r\n /**\r\n * Returns the total path length, equivalent to native `path.getTotalLength()`.\r\n *\r\n * @public\r\n * @returns the path total length\r\n */\r\n getTotalLength() {\r\n return this.length;\r\n }\r\n\r\n /**\r\n * Returns an `{x,y}` point in the path stroke at a given length,\r\n * equivalent to the native `path.getPointAtLength()`.\r\n *\r\n * @public\r\n * @param length the length\r\n * @returns the requested point\r\n */\r\n getPointAtLength(length: number) {\r\n return getPointAtLength(this.segments, length);\r\n }\r\n\r\n /**\r\n * Convert path to absolute values\r\n *\r\n * @public\r\n */\r\n toAbsolute() {\r\n const { segments } = this;\r\n this.segments = pathToAbsolute(segments);\r\n return this;\r\n }\r\n\r\n /**\r\n * Convert path to relative values\r\n *\r\n * @public\r\n */\r\n toRelative() {\r\n const { segments } = this;\r\n this.segments = pathToRelative(segments);\r\n return this;\r\n }\r\n\r\n /**\r\n * Convert path to cubic-bezier values. In addition, un-necessary `Z`\r\n * segment is removed if previous segment extends to the `M` segment.\r\n *\r\n * @public\r\n */\r\n toCurve() {\r\n const { segments } = this;\r\n this.segments = pathToCurve(segments);\r\n return this;\r\n }\r\n\r\n /**\r\n * Reverse the order of the segments and their values.\r\n *\r\n * @param onlySubpath option to reverse all sub-paths except first\r\n * @public\r\n */\r\n reverse(onlySubpath?: boolean) {\r\n const { segments } = this;\r\n const split = splitPath(segments);\r\n const subPath = split.length > 1 ? split : false;\r\n\r\n const absoluteMultiPath = subPath\r\n ? subPath.map((x, i) => {\r\n if (onlySubpath) {\r\n return i ? reversePath(x) : x.slice(0);\r\n }\r\n return reversePath(x);\r\n })\r\n : segments.slice(0);\r\n\r\n let path = [] as unknown as PathArray;\r\n if (subPath) {\r\n path = absoluteMultiPath.flat(1) as PathArray;\r\n } else {\r\n path = onlySubpath ? segments : reversePath(segments);\r\n }\r\n\r\n this.segments = path.slice(0) as PathArray;\r\n return this;\r\n }\r\n\r\n /**\r\n * Normalize path in 2 steps:\r\n * * convert `pathArray`(s) to absolute values\r\n * * convert shorthand notation to standard notation\r\n *\r\n * @public\r\n */\r\n normalize() {\r\n const { segments } = this;\r\n this.segments = normalizePath(segments);\r\n return this;\r\n }\r\n\r\n /**\r\n * Optimize `pathArray` values:\r\n * * convert segments to absolute and/or relative values\r\n * * select segments with shortest resulted string\r\n * * round values to the specified `decimals` option value\r\n *\r\n * @public\r\n */\r\n optimize() {\r\n const { segments } = this;\r\n const round = this.round === \"off\" ? 2 : this.round;\r\n\r\n this.segments = optimizePath(segments, round);\r\n return this;\r\n }\r\n\r\n /**\r\n * Transform path using values from an `Object` defined as `transformObject`.\r\n *\r\n * @see TransformObject for a quick refference\r\n *\r\n * @param source a `transformObject`as described above\r\n * @public\r\n */\r\n transform(source?: Partial) {\r\n if (\r\n !source ||\r\n typeof source !== \"object\" ||\r\n (typeof source === \"object\" &&\r\n ![\"translate\", \"rotate\", \"skew\", \"scale\"].some((x) => x in source))\r\n ) {\r\n return this;\r\n }\r\n\r\n const {\r\n segments,\r\n origin: [cx, cy, cz],\r\n } = this;\r\n const transform = {} as TransformObjectValues;\r\n for (const [k, v] of Object.entries(source) as TransformEntries) {\r\n // istanbul ignore else @preserve\r\n if (k === \"skew\" && Array.isArray(v)) {\r\n transform[k] = v.map(Number) as PointTuple;\r\n } else if (\r\n (k === \"rotate\" || k === \"translate\" || k === \"origin\" ||\r\n k === \"scale\") && Array.isArray(v)\r\n ) {\r\n transform[k] = v.map(Number) as [number, number, number];\r\n } else if (k !== \"origin\" && typeof Number(v) === \"number\") {\r\n transform[k] = Number(v);\r\n }\r\n }\r\n\r\n // if origin is not specified\r\n // it's important that we have one\r\n const { origin } = transform;\r\n\r\n if (Array.isArray(origin) && origin.length >= 2) {\r\n const [originX, originY, originZ] = origin.map(Number);\r\n transform.origin = [\r\n !Number.isNaN(originX) ? originX : cx,\r\n !Number.isNaN(originY) ? originY : cy,\r\n originZ || cz,\r\n ];\r\n } else {\r\n transform.origin = [cx, cy, cz];\r\n }\r\n\r\n this.segments = transformPath(segments, transform);\r\n return this;\r\n }\r\n\r\n /**\r\n * Rotate path 180deg vertically\r\n *\r\n * @public\r\n */\r\n flipX() {\r\n const { cx, cy } = this.bbox;\r\n this.transform({ rotate: [0, 180, 0], origin: [cx, cy, 0] });\r\n return this;\r\n }\r\n\r\n /**\r\n * Rotate path 180deg horizontally\r\n *\r\n * @public\r\n */\r\n flipY() {\r\n const { cx, cy } = this.bbox;\r\n this.transform({ rotate: [180, 0, 0], origin: [cx, cy, 0] });\r\n return this;\r\n }\r\n\r\n /**\r\n * Export the current path to be used\r\n * for the `d` (description) attribute.\r\n *\r\n * @public\r\n * @return the path string\r\n */\r\n toString() {\r\n return pathToString(this.segments, this.round);\r\n }\r\n\r\n /**\r\n * Remove the instance.\r\n *\r\n * @public\r\n * @return void\r\n */\r\n dispose() {\r\n Object.keys(this).forEach((key) => delete this[key as keyof typeof this]);\r\n }\r\n}\r\n\r\nexport default SVGPathCommander;\r\n"],"names":["Z","z","s","e","p","$","E","P","y","g","n","i","r","a","m","h","c","u","f","w","o","d","b","X","O","x","Y","F","T","k","I","v","R","D","N","defaultOptions","paramsCount","finalizeSegment","path","pathCommand","relativeCommand","data","error","scanFlag","index","pathValue","code","isDigit","invalidPathValue","scanParam","max","start","zeroFirst","hasCeiling","hasDecimal","hasDot","ch","isSpace","skipSpaces","isPathCommand","isDigitStart","isArcCommand","isMoveCommand","scanSegment","segments","cmdCode","reqParams","paramCounts","lastSegment","_a","PathParser","pathString","parsePathString","pathInput","absolutizeSegment","segment","lastX","lastY","absCommand","absValues","seglen","j","iterate","iterator","pathLen","isRelative","mx","my","segLen","iteratorResult","pathToAbsolute","relativizeSegment","relCommand","relValues","pathToRelative","rotateVector","rad","sin","cos","arcToCubic","X1","Y1","RX","RY","angle","LAF","SF","X2","Y2","recursive","x1","y1","rx","ry","x2","y2","d120","res","xy","f1","f2","cx","cy","rx2","ry2","df","f2old","x2old","y2old","c1","s1","c2","s2","t","hx","hy","m1","m2","m3","m4","newres","ii","quadToCubic","qx","qy","r13","r23","midPoint","ax","ay","bx","by","lineToCubic","segmentToCubic","params","values","px1","py1","px","py","normalizeSegment","px2","py2","nqx","nqy","paramsParser","pathToCurve","seg","normalSegment","result","roundTo","round","pow","pathToString","roundOption","valLen","distanceSquareRoot","getLineLength","getPointAtLineLength","distance","point","length","getLineBBox","min","arcLength","theta","halfTheta","sinHalfTheta","cosHalfTheta","term1","term2","arcPoint","alpha","cosA","sinA","angleBetween","v0","v1","v0x","v0y","v1x","v1y","getArcProps","abs","sqrt","PI","xRotRad","dx","dy","transformedPoint","radiiCheck","cSquareNumerator","cSquareRootDenom","cRadicand","cCoef","transformedCenter","center","startVector","startAngle","endVector","sweepAngle","endAngle","getArcLength","getPointAtArcLength","ellipseComponentX","ellipseComponentY","getArcBBox","deltaAngle","tan","atan2","tangent","angle1","angle2","angle3","angle4","xArray","yArray","xMin","xMax","yMin","yMax","angleAfterStart","pP2","angleBeforeEnd","pP3","p1","p2","p4","p3","Tvalues","Cvalues","deriveBezier","points","dpoints","list","computeBezier","order","mt","mt2","t2","calculateBezier","derivativeFn","l","bezierLength","len","sum","getBezierLength","curve","idx","step","CBEZIER_MINMAX_EPSILON","minmaxQ","cp","v2","minmaxC","cp1","cp2","K","S","L","Q","getPointAtCubicSegmentLength","c1x","c1y","c2x","c2y","t1","getCubicLength","getPointAtCubicLength","distanceIsNumber","currentLength","getCubicBBox","cxMinMax","cyMinMax","getPointAtQuadSegmentLength","getQuadLength","getPointAtQuadLength","getQuadBBox","polygonArea","polygon","area","polygonLength","DISTANCE_EPSILON","normalizePath","_","getPointAtLength","isM","POINT","totalLength","getTotalLength","paramX1","paramY1","paramX2","paramY2","paramQX","paramQY","absoluteSegment","cp1x","cp1y","getPropertiesAtLength","pathArray","pathTemp","pathLength","lengthAtSegment","getPropertiesAtPoint","normalPath","distanceTo","precision","scan","closest","scanDistance","bestLength","bestDistance","scanLength","before","after","beforeLength","afterLength","beforeDistance","afterDistance","getClosestPoint","getCubicSegArea","getPathArea","getDrawDirection","getPathBBox","minX","minY","maxX","maxY","width","height","getSegmentAtLength","getSegmentOfPoint","isPathArray","lk","isAbsoluteArray","isNormalizedArray","pc","isCurveArray","isPointInStroke","isRelativeArray","isValidPath","shapeParams","isElement","node","getLinePath","attr","getPolyPath","getCirclePath","getEllipsePath","getRectanglePath","shapeToPathArray","element","supportedShapes","targetIsElement","tagName","type","shapeAttrs","config","shapeToPath","replace","ownerDocument","doc","description","name","value","getSVGMatrix","transform","matrix","CSSMatrix","origin","originX","originY","translate","rotate","skew","scale","shortenSegment","prevCommand","defaultRound","normalValues","nx","ny","nx1","ny1","roundSegment","optimizePath","optimParams","allPathCommands","normalizedSegment","shortSegment","absSegment","absString","relativeSegment","relSegment","relString","translatePoint","cssm","projection2d","point2D","originZ","relativePositionX","relativePositionY","relativePositionZ","reverseCurve","rotatedCurve","curveOnly","reversePath","absolutePath","normalizedPath","pLen","isClosed","reversedPath","prevSeg","nextSeg","nextCommand","roundPath","splitCubic","pts","ratio","p0","p5","p6","p7","p8","p9","splitPath","composite","pi","transformPath","lx","ly","jj","transformProps","matrixInstance","isLongArc","tempSegment","SVGPathCommander","instanceOptions","undefPath","originOption","onlySubpath","split","subPath","absoluteMultiPath","source","cz","key","__publicField","arcTools","distanceEpsilon","pathParser"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/dist/svg-path-commander.mjs b/dist/svg-path-commander.mjs index 34b4043..65611e4 100644 --- a/dist/svg-path-commander.mjs +++ b/dist/svg-path-commander.mjs @@ -608,7 +608,7 @@ const D = (e) => { Dt(t); if (t != null && t.err.length) throw TypeError(t.err); - return t.segments; + return t.segments[0][0] = "M", t.segments; }, at = (e, t, s, r) => { const [n] = e, i = n.toUpperCase(); if (t === 0 || i === n) return e; diff --git a/dist/svg-path-commander.mjs.map b/dist/svg-path-commander.mjs.map index c91222f..135e293 100644 --- a/dist/svg-path-commander.mjs.map +++ b/dist/svg-path-commander.mjs.map @@ -1 +1 @@ -{"version":3,"file":"svg-path-commander.mjs","sources":["../node_modules/.pnpm/@thednp+dommatrix@2.0.11/node_modules/@thednp/dommatrix/dist/dommatrix.mjs","../src/options/options.ts","../src/parser/paramsCount.ts","../src/parser/finalizeSegment.ts","../src/parser/error.ts","../src/parser/scanFlag.ts","../src/parser/isDigit.ts","../src/parser/invalidPathValue.ts","../src/parser/scanParam.ts","../src/parser/isSpace.ts","../src/parser/skipSpaces.ts","../src/parser/isPathCommand.ts","../src/parser/isDigitStart.ts","../src/parser/isArcCommand.ts","../src/parser/isMoveCommand.ts","../src/parser/scanSegment.ts","../src/parser/pathParser.ts","../src/parser/parsePathString.ts","../src/process/absolutizeSegment.ts","../src/process/iterate.ts","../src/convert/pathToAbsolute.ts","../src/process/relativizeSegment.ts","../src/convert/pathToRelative.ts","../src/math/rotateVector.ts","../src/process/arcToCubic.ts","../src/process/quadToCubic.ts","../src/math/midPoint.ts","../src/process/lineToCubic.ts","../src/process/segmentToCubic.ts","../src/process/normalizeSegment.ts","../src/parser/paramsParser.ts","../src/convert/pathToCurve.ts","../src/math/roundTo.ts","../src/convert/pathToString.ts","../src/math/distanceSquareRoot.ts","../src/math/lineTools.ts","../src/math/arcTools.ts","../src/math/bezier.ts","../src/math/cubicTools.ts","../src/math/quadTools.ts","../src/math/polygonTools.ts","../src/util/distanceEpsilon.ts","../src/process/normalizePath.ts","../src/util/getPointAtLength.ts","../src/util/getTotalLength.ts","../src/util/getPropertiesAtLength.ts","../src/util/getPropertiesAtPoint.ts","../src/util/getClosestPoint.ts","../src/util/getPathArea.ts","../src/util/getDrawDirection.ts","../src/util/getPathBBox.ts","../src/util/getSegmentAtLength.ts","../src/util/getSegmentOfPoint.ts","../src/util/isPathArray.ts","../src/util/isAbsoluteArray.ts","../src/util/isNormalizedArray.ts","../src/util/isCurveArray.ts","../src/util/isPointInStroke.ts","../src/util/isRelativeArray.ts","../src/util/isValidPath.ts","../src/util/shapeParams.ts","../src/util/isElement.ts","../src/util/shapeToPathArray.ts","../src/util/shapeToPath.ts","../src/process/getSVGMatrix.ts","../src/process/shortenSegment.ts","../src/process/roundSegment.ts","../src/process/optimizePath.ts","../src/process/projection2d.ts","../src/process/reverseCurve.ts","../src/process/reversePath.ts","../src/process/roundPath.ts","../src/process/splitCubic.ts","../src/process/splitPath.ts","../src/process/transformPath.ts","../src/index.ts"],"sourcesContent":["var Z = Object.defineProperty;\nvar z = (s, t, e) => t in s ? Z(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e;\nvar p = (s, t, e) => z(s, typeof t != \"symbol\" ? t + \"\" : t, e);\nconst $ = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: 0,\n f: 0,\n m11: 1,\n m12: 0,\n m13: 0,\n m14: 0,\n m21: 0,\n m22: 1,\n m23: 0,\n m24: 0,\n m31: 0,\n m32: 0,\n m33: 1,\n m34: 0,\n m41: 0,\n m42: 0,\n m43: 0,\n m44: 1,\n is2D: !0,\n isIdentity: !0\n}, E = (s) => (s instanceof Float64Array || s instanceof Float32Array || Array.isArray(s) && s.every((t) => typeof t == \"number\")) && [6, 16].some((t) => s.length === t), P = (s) => s instanceof DOMMatrix || s instanceof y || typeof s == \"object\" && Object.keys($).every((t) => s && t in s), g = (s) => {\n const t = new y(), e = Array.from(s);\n if (!E(e))\n throw TypeError(\n `CSSMatrix: \"${e.join(\",\")}\" must be an array with 6/16 numbers.`\n );\n // istanbul ignore else @preserve\n if (e.length === 16) {\n const [\n n,\n i,\n r,\n a,\n l,\n m,\n h,\n c,\n u,\n f,\n w,\n o,\n d,\n A,\n M,\n b\n ] = e;\n t.m11 = n, t.a = n, t.m21 = l, t.c = l, t.m31 = u, t.m41 = d, t.e = d, t.m12 = i, t.b = i, t.m22 = m, t.d = m, t.m32 = f, t.m42 = A, t.f = A, t.m13 = r, t.m23 = h, t.m33 = w, t.m43 = M, t.m14 = a, t.m24 = c, t.m34 = o, t.m44 = b;\n } else if (e.length === 6) {\n const [n, i, r, a, l, m] = e;\n t.m11 = n, t.a = n, t.m12 = i, t.b = i, t.m21 = r, t.c = r, t.m22 = a, t.d = a, t.m41 = l, t.e = l, t.m42 = m, t.f = m;\n }\n return t;\n}, X = (s) => {\n if (P(s))\n return g([\n s.m11,\n s.m12,\n s.m13,\n s.m14,\n s.m21,\n s.m22,\n s.m23,\n s.m24,\n s.m31,\n s.m32,\n s.m33,\n s.m34,\n s.m41,\n s.m42,\n s.m43,\n s.m44\n ]);\n throw TypeError(\n `CSSMatrix: \"${JSON.stringify(s)}\" is not a DOMMatrix / CSSMatrix / JSON compatible object.`\n );\n}, O = (s) => {\n if (typeof s != \"string\")\n throw TypeError(`CSSMatrix: \"${JSON.stringify(s)}\" is not a string.`);\n const t = String(s).replace(/\\s/g, \"\");\n let e = new y();\n const n = `CSSMatrix: invalid transform string \"${s}\"`;\n return t.split(\")\").filter((i) => i).forEach((i) => {\n const [r, a] = i.split(\"(\");\n if (!a) throw TypeError(n);\n const l = a.split(\",\").map(\n (o) => o.includes(\"rad\") ? parseFloat(o) * (180 / Math.PI) : parseFloat(o)\n ), [m, h, c, u] = l, f = [m, h, c], w = [m, h, c, u];\n if (r === \"perspective\" && m && [h, c].every((o) => o === void 0))\n e.m34 = -1 / m;\n else if (r.includes(\"matrix\") && [6, 16].includes(l.length) && l.every((o) => !Number.isNaN(+o))) {\n const o = l.map((d) => Math.abs(d) < 1e-6 ? 0 : d);\n e = e.multiply(g(o));\n } else if (r === \"translate3d\" && f.every((o) => !Number.isNaN(+o)))\n e = e.translate(m, h, c);\n else if (r === \"translate\" && m && c === void 0)\n e = e.translate(m, h || 0, 0);\n else if (r === \"rotate3d\" && w.every((o) => !Number.isNaN(+o)) && u)\n e = e.rotateAxisAngle(m, h, c, u);\n else if (r === \"rotate\" && m && [h, c].every((o) => o === void 0))\n e = e.rotate(0, 0, m);\n else if (r === \"scale3d\" && f.every((o) => !Number.isNaN(+o)) && f.some((o) => o !== 1))\n e = e.scale(m, h, c);\n else if (\n // prop === \"scale\" && !Number.isNaN(x) && x !== 1 && z === undefined\n // prop === \"scale\" && !Number.isNaN(x) && [x, y].some((n) => n !== 1) &&\n r === \"scale\" && !Number.isNaN(m) && (m !== 1 || h !== 1) && c === void 0\n ) {\n const d = Number.isNaN(+h) ? m : h;\n e = e.scale(m, d, 1);\n } else if (r === \"skew\" && (m || !Number.isNaN(m) && h) && c === void 0)\n e = e.skew(m, h || 0);\n else if ([\"translate\", \"rotate\", \"scale\", \"skew\"].some(\n (o) => r.includes(o)\n ) && /[XYZ]/.test(r) && m && [h, c].every((o) => o === void 0))\n if (r === \"skewX\" || r === \"skewY\")\n e = e[r](m);\n else {\n const o = r.replace(/[XYZ]/, \"\"), d = r.replace(o, \"\"), A = [\"X\", \"Y\", \"Z\"].indexOf(d), M = o === \"scale\" ? 1 : 0, b = [\n A === 0 ? m : M,\n A === 1 ? m : M,\n A === 2 ? m : M\n ];\n e = e[o](...b);\n }\n else\n throw TypeError(n);\n }), e;\n}, x = (s, t) => t ? [s.a, s.b, s.c, s.d, s.e, s.f] : [\n s.m11,\n s.m12,\n s.m13,\n s.m14,\n s.m21,\n s.m22,\n s.m23,\n s.m24,\n s.m31,\n s.m32,\n s.m33,\n s.m34,\n s.m41,\n s.m42,\n s.m43,\n s.m44\n], Y = (s, t, e) => {\n const n = new y();\n return n.m41 = s, n.e = s, n.m42 = t, n.f = t, n.m43 = e, n;\n}, F = (s, t, e) => {\n const n = new y(), i = Math.PI / 180, r = s * i, a = t * i, l = e * i, m = Math.cos(r), h = -Math.sin(r), c = Math.cos(a), u = -Math.sin(a), f = Math.cos(l), w = -Math.sin(l), o = c * f, d = -c * w;\n n.m11 = o, n.a = o, n.m12 = d, n.b = d, n.m13 = u;\n const A = h * u * f + m * w;\n n.m21 = A, n.c = A;\n const M = m * f - h * u * w;\n return n.m22 = M, n.d = M, n.m23 = -h * c, n.m31 = h * w - m * u * f, n.m32 = h * f + m * u * w, n.m33 = m * c, n;\n}, T = (s, t, e, n) => {\n const i = new y(), r = Math.sqrt(s * s + t * t + e * e);\n if (r === 0)\n return i;\n const a = s / r, l = t / r, m = e / r, h = n * (Math.PI / 360), c = Math.sin(h), u = Math.cos(h), f = c * c, w = a * a, o = l * l, d = m * m, A = 1 - 2 * (o + d) * f;\n i.m11 = A, i.a = A;\n const M = 2 * (a * l * f + m * c * u);\n i.m12 = M, i.b = M, i.m13 = 2 * (a * m * f - l * c * u);\n const b = 2 * (l * a * f - m * c * u);\n i.m21 = b, i.c = b;\n const k = 1 - 2 * (d + w) * f;\n return i.m22 = k, i.d = k, i.m23 = 2 * (l * m * f + a * c * u), i.m31 = 2 * (m * a * f + l * c * u), i.m32 = 2 * (m * l * f - a * c * u), i.m33 = 1 - 2 * (w + o) * f, i;\n}, I = (s, t, e) => {\n const n = new y();\n return n.m11 = s, n.a = s, n.m22 = t, n.d = t, n.m33 = e, n;\n}, v = (s, t) => {\n const e = new y();\n if (s) {\n const n = s * Math.PI / 180, i = Math.tan(n);\n e.m21 = i, e.c = i;\n }\n if (t) {\n const n = t * Math.PI / 180, i = Math.tan(n);\n e.m12 = i, e.b = i;\n }\n return e;\n}, R = (s) => v(s, 0), D = (s) => v(0, s), N = (s, t) => {\n const e = t.m11 * s.m11 + t.m12 * s.m21 + t.m13 * s.m31 + t.m14 * s.m41, n = t.m11 * s.m12 + t.m12 * s.m22 + t.m13 * s.m32 + t.m14 * s.m42, i = t.m11 * s.m13 + t.m12 * s.m23 + t.m13 * s.m33 + t.m14 * s.m43, r = t.m11 * s.m14 + t.m12 * s.m24 + t.m13 * s.m34 + t.m14 * s.m44, a = t.m21 * s.m11 + t.m22 * s.m21 + t.m23 * s.m31 + t.m24 * s.m41, l = t.m21 * s.m12 + t.m22 * s.m22 + t.m23 * s.m32 + t.m24 * s.m42, m = t.m21 * s.m13 + t.m22 * s.m23 + t.m23 * s.m33 + t.m24 * s.m43, h = t.m21 * s.m14 + t.m22 * s.m24 + t.m23 * s.m34 + t.m24 * s.m44, c = t.m31 * s.m11 + t.m32 * s.m21 + t.m33 * s.m31 + t.m34 * s.m41, u = t.m31 * s.m12 + t.m32 * s.m22 + t.m33 * s.m32 + t.m34 * s.m42, f = t.m31 * s.m13 + t.m32 * s.m23 + t.m33 * s.m33 + t.m34 * s.m43, w = t.m31 * s.m14 + t.m32 * s.m24 + t.m33 * s.m34 + t.m34 * s.m44, o = t.m41 * s.m11 + t.m42 * s.m21 + t.m43 * s.m31 + t.m44 * s.m41, d = t.m41 * s.m12 + t.m42 * s.m22 + t.m43 * s.m32 + t.m44 * s.m42, A = t.m41 * s.m13 + t.m42 * s.m23 + t.m43 * s.m33 + t.m44 * s.m43, M = t.m41 * s.m14 + t.m42 * s.m24 + t.m43 * s.m34 + t.m44 * s.m44;\n return g([\n e,\n n,\n i,\n r,\n a,\n l,\n m,\n h,\n c,\n u,\n f,\n w,\n o,\n d,\n A,\n M\n ]);\n};\nclass y {\n /**\n * @constructor\n * @param init accepts all parameter configurations:\n * * valid CSS transform string,\n * * CSSMatrix/DOMMatrix instance,\n * * a 6/16 elements *Array*.\n */\n constructor(t) {\n return this.a = 1, this.b = 0, this.c = 0, this.d = 1, this.e = 0, this.f = 0, this.m11 = 1, this.m12 = 0, this.m13 = 0, this.m14 = 0, this.m21 = 0, this.m22 = 1, this.m23 = 0, this.m24 = 0, this.m31 = 0, this.m32 = 0, this.m33 = 1, this.m34 = 0, this.m41 = 0, this.m42 = 0, this.m43 = 0, this.m44 = 1, t ? this.setMatrixValue(t) : this;\n }\n /**\n * A `Boolean` whose value is `true` if the matrix is the identity matrix. The identity\n * matrix is one in which every value is 0 except those on the main diagonal from top-left\n * to bottom-right corner (in other words, where the offsets in each direction are equal).\n *\n * @return the current property value\n */\n get isIdentity() {\n return this.m11 === 1 && this.m12 === 0 && this.m13 === 0 && this.m14 === 0 && this.m21 === 0 && this.m22 === 1 && this.m23 === 0 && this.m24 === 0 && this.m31 === 0 && this.m32 === 0 && this.m33 === 1 && this.m34 === 0 && this.m41 === 0 && this.m42 === 0 && this.m43 === 0 && this.m44 === 1;\n }\n /**\n * A `Boolean` flag whose value is `true` if the matrix was initialized as a 2D matrix\n * and `false` if the matrix is 3D.\n *\n * @return the current property value\n */\n get is2D() {\n return this.m31 === 0 && this.m32 === 0 && this.m33 === 1 && this.m34 === 0 && this.m43 === 0 && this.m44 === 1;\n }\n /**\n * The `setMatrixValue` method replaces the existing matrix with one computed\n * in the browser. EG: `matrix(1,0.25,-0.25,1,0,0)`\n *\n * The method accepts any *Array* values, the result of\n * `DOMMatrix` instance method `toFloat64Array()` / `toFloat32Array()` calls\n * or `CSSMatrix` instance method `toArray()`.\n *\n * This method expects valid *matrix()* / *matrix3d()* string values, as well\n * as other transform functions like *translateX(10px)*.\n *\n * @param source\n * @return the matrix instance\n */\n setMatrixValue(t) {\n return typeof t == \"string\" && t.length && t !== \"none\" ? O(t) : Array.isArray(t) || t instanceof Float64Array || t instanceof Float32Array ? g(t) : typeof t == \"object\" ? X(t) : this;\n }\n /**\n * Returns a *Float32Array* containing elements which comprise the matrix.\n * The method can return either the 16 elements or the 6 elements\n * depending on the value of the `is2D` parameter.\n *\n * @param is2D *Array* representation of the matrix\n * @return an *Array* representation of the matrix\n */\n toFloat32Array(t) {\n return Float32Array.from(x(this, t));\n }\n /**\n * Returns a *Float64Array* containing elements which comprise the matrix.\n * The method can return either the 16 elements or the 6 elements\n * depending on the value of the `is2D` parameter.\n *\n * @param is2D *Array* representation of the matrix\n * @return an *Array* representation of the matrix\n */\n toFloat64Array(t) {\n return Float64Array.from(x(this, t));\n }\n /**\n * Creates and returns a string representation of the matrix in `CSS` matrix syntax,\n * using the appropriate `CSS` matrix notation.\n *\n * matrix3d *matrix3d(m11, m12, m13, m14, m21, ...)*\n * matrix *matrix(a, b, c, d, e, f)*\n *\n * @return a string representation of the matrix\n */\n toString() {\n const { is2D: t } = this, e = this.toFloat64Array(t).join(\", \");\n return `${t ? \"matrix\" : \"matrix3d\"}(${e})`;\n }\n /**\n * Returns a JSON representation of the `CSSMatrix` instance, a standard *Object*\n * that includes `{a,b,c,d,e,f}` and `{m11,m12,m13,..m44}` properties as well\n * as the `is2D` & `isIdentity` properties.\n *\n * The result can also be used as a second parameter for the `fromMatrix` static method\n * to load values into another matrix instance.\n *\n * @return an *Object* with all matrix values.\n */\n toJSON() {\n const { is2D: t, isIdentity: e } = this;\n return { ...this, is2D: t, isIdentity: e };\n }\n /**\n * The Multiply method returns a new CSSMatrix which is the result of this\n * matrix multiplied by the passed matrix, with the passed matrix to the right.\n * This matrix is not modified.\n *\n * @param m2 CSSMatrix\n * @return The resulted matrix.\n */\n multiply(t) {\n return N(this, t);\n }\n /**\n * The translate method returns a new matrix which is this matrix post\n * multiplied by a translation matrix containing the passed values. If the z\n * component is undefined, a 0 value is used in its place. This matrix is not\n * modified.\n *\n * @param x X component of the translation value.\n * @param y Y component of the translation value.\n * @param z Z component of the translation value.\n * @return The resulted matrix\n */\n translate(t, e, n) {\n const i = t;\n let r = e, a = n;\n return typeof r > \"u\" && (r = 0), typeof a > \"u\" && (a = 0), N(this, Y(i, r, a));\n }\n /**\n * The scale method returns a new matrix which is this matrix post multiplied by\n * a scale matrix containing the passed values. If the z component is undefined,\n * a 1 value is used in its place. If the y component is undefined, the x\n * component value is used in its place. This matrix is not modified.\n *\n * @param x The X component of the scale value.\n * @param y The Y component of the scale value.\n * @param z The Z component of the scale value.\n * @return The resulted matrix\n */\n scale(t, e, n) {\n const i = t;\n let r = e, a = n;\n return typeof r > \"u\" && (r = t), typeof a > \"u\" && (a = 1), N(this, I(i, r, a));\n }\n /**\n * The rotate method returns a new matrix which is this matrix post multiplied\n * by each of 3 rotation matrices about the major axes, first X, then Y, then Z.\n * If the y and z components are undefined, the x value is used to rotate the\n * object about the z axis, as though the vector (0,0,x) were passed. All\n * rotation values are in degrees. This matrix is not modified.\n *\n * @param rx The X component of the rotation, or Z if Y and Z are null.\n * @param ry The (optional) Y component of the rotation value.\n * @param rz The (optional) Z component of the rotation value.\n * @return The resulted matrix\n */\n rotate(t, e, n) {\n let i = t, r = e || 0, a = n || 0;\n return typeof t == \"number\" && typeof e > \"u\" && typeof n > \"u\" && (a = i, i = 0, r = 0), N(this, F(i, r, a));\n }\n /**\n * The rotateAxisAngle method returns a new matrix which is this matrix post\n * multiplied by a rotation matrix with the given axis and `angle`. The right-hand\n * rule is used to determine the direction of rotation. All rotation values are\n * in degrees. This matrix is not modified.\n *\n * @param x The X component of the axis vector.\n * @param y The Y component of the axis vector.\n * @param z The Z component of the axis vector.\n * @param angle The angle of rotation about the axis vector, in degrees.\n * @return The resulted matrix\n */\n rotateAxisAngle(t, e, n, i) {\n if ([t, e, n, i].some((r) => Number.isNaN(+r)))\n throw new TypeError(\"CSSMatrix: expecting 4 values\");\n return N(this, T(t, e, n, i));\n }\n /**\n * Specifies a skew transformation along the `x-axis` by the given angle.\n * This matrix is not modified.\n *\n * @param angle The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skewX(t) {\n return N(this, R(t));\n }\n /**\n * Specifies a skew transformation along the `y-axis` by the given angle.\n * This matrix is not modified.\n *\n * @param angle The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skewY(t) {\n return N(this, D(t));\n }\n /**\n * Specifies a skew transformation along both the `x-axis` and `y-axis`.\n * This matrix is not modified.\n *\n * @param angleX The X-angle amount in degrees to skew.\n * @param angleY The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skew(t, e) {\n return N(this, v(t, e));\n }\n /**\n * Transforms a specified vector using the matrix, returning a new\n * {x,y,z,w} Tuple *Object* comprising the transformed vector.\n * Neither the matrix nor the original vector are altered.\n *\n * The method is equivalent with `transformPoint()` method\n * of the `DOMMatrix` constructor.\n *\n * @param t Tuple with `{x,y,z,w}` components\n * @return the resulting Tuple\n */\n transformPoint(t) {\n const e = this.m11 * t.x + this.m21 * t.y + this.m31 * t.z + this.m41 * t.w, n = this.m12 * t.x + this.m22 * t.y + this.m32 * t.z + this.m42 * t.w, i = this.m13 * t.x + this.m23 * t.y + this.m33 * t.z + this.m43 * t.w, r = this.m14 * t.x + this.m24 * t.y + this.m34 * t.z + this.m44 * t.w;\n return t instanceof DOMPoint ? new DOMPoint(e, n, i, r) : {\n x: e,\n y: n,\n z: i,\n w: r\n };\n }\n}\np(y, \"Translate\", Y), p(y, \"Rotate\", F), p(y, \"RotateAxisAngle\", T), p(y, \"Scale\", I), p(y, \"SkewX\", R), p(y, \"SkewY\", D), p(y, \"Skew\", v), p(y, \"Multiply\", N), p(y, \"fromArray\", g), p(y, \"fromMatrix\", X), p(y, \"fromString\", O), p(y, \"toArray\", x), p(y, \"isCompatibleArray\", E), p(y, \"isCompatibleObject\", P);\nexport {\n y as default\n};\n//# sourceMappingURL=dommatrix.mjs.map\n","import { Options } from \"../interface\";\n\n/** SVGPathCommander default options */\nconst defaultOptions: Options = {\n origin: [0, 0, 0],\n round: 4,\n};\n\nexport default defaultOptions;\n","/** Segment params length */\nconst paramsCount = {\n a: 7,\n c: 6,\n h: 1,\n l: 2,\n m: 2,\n r: 4,\n q: 4,\n s: 4,\n t: 2,\n v: 1,\n z: 0,\n};\n\nexport default paramsCount;\n","import paramsCount from \"./paramsCount\";\nimport PathParser from \"./pathParser\";\nimport type { PathCommand, PathSegment, RelativeCommand } from \"../types\";\n\n/**\n * Breaks the parsing of a pathString once a segment is finalized.\n *\n * @param path the `PathParser` instance\n */\nconst finalizeSegment = (path: PathParser) => {\n let pathCommand = path.pathValue[path.segmentStart] as PathCommand;\n let relativeCommand = pathCommand.toLowerCase() as RelativeCommand;\n const { data } = path;\n\n while (data.length >= paramsCount[relativeCommand]) {\n // overloaded `moveTo`\n // https://github.com/rveciana/svg-path-properties/blob/master/src/parse.ts\n if (relativeCommand === \"m\" && data.length > 2) {\n path.segments.push(\n [pathCommand as PathCommand | number].concat(\n data.splice(0, 2) as number[],\n ) as PathSegment,\n );\n relativeCommand = \"l\";\n pathCommand = pathCommand === \"m\" ? \"l\" : \"L\";\n } else {\n path.segments.push(\n [pathCommand as PathCommand | number].concat(\n data.splice(0, paramsCount[relativeCommand]) as number[],\n ) as PathSegment,\n );\n }\n\n if (!paramsCount[relativeCommand]) {\n break;\n }\n }\n};\nexport default finalizeSegment;\n","const error = \"SVGPathCommander Error\";\nexport default error;\n","import error from \"./error\";\nimport type PathParser from \"./pathParser\";\n\n/**\n * Validates an A (arc-to) specific path command value.\n * Usually a `large-arc-flag` or `sweep-flag`.\n *\n * @param path the `PathParser` instance\n */\nconst scanFlag = (path: PathParser) => {\n const { index, pathValue } = path;\n const code = pathValue.charCodeAt(index);\n\n if (code === 0x30 /* 0 */) {\n path.param = 0;\n path.index += 1;\n return;\n }\n\n if (code === 0x31 /* 1 */) {\n path.param = 1;\n path.index += 1;\n return;\n }\n\n path.err = `${error}: invalid Arc flag \"${\n pathValue[index]\n }\", expecting 0 or 1 at index ${index}`;\n};\n\nexport default scanFlag;\n","import { DigitNumber } from \"../types\";\n\n/**\n * Checks if a character is a digit.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isDigit = (code: number): code is DigitNumber => {\n return code >= 48 && code <= 57; // 0..9\n};\nexport default isDigit;\n","const invalidPathValue = \"Invalid path value\";\nexport default invalidPathValue;\n","import isDigit from \"./isDigit\";\nimport invalidPathValue from \"./invalidPathValue\";\nimport error from \"./error\";\nimport type PathParser from \"./pathParser\";\n\n/**\n * Validates every character of the path string,\n * every path command, negative numbers or floating point numbers.\n *\n * @param path the `PathParser` instance\n */\nconst scanParam = (path: PathParser) => {\n const { max, pathValue, index: start } = path;\n let index = start;\n let zeroFirst = false;\n let hasCeiling = false;\n let hasDecimal = false;\n let hasDot = false;\n let ch;\n\n if (index >= max) {\n path.err =\n `${error}: ${invalidPathValue} at index ${index}, \"pathValue\" is missing param`;\n return;\n }\n ch = pathValue.charCodeAt(index);\n\n if (ch === 0x2b /* + */ || ch === 0x2d /* - */) {\n index += 1;\n // ch = (index < max) ? pathValue.charCodeAt(index) : 0;\n ch = pathValue.charCodeAt(index);\n }\n\n // This logic is shamelessly borrowed from Esprima\n // https://github.com/ariya/esprimas\n if (!isDigit(ch) && ch !== 0x2e /* . */) {\n // path.err = 'SvgPath: param should start with 0..9 or `.` (at pos ' + index + ')';\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\n pathValue[index]\n }\" is not a number`;\n return;\n }\n\n if (ch !== 0x2e /* . */) {\n zeroFirst = ch === 0x30 /* 0 */;\n index += 1;\n\n ch = pathValue.charCodeAt(index);\n\n if (zeroFirst && index < max) {\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDigit(ch)) {\n // path.err = 'SvgPath: numbers started with `0` such as `09`\n // are illegal (at pos ' + start + ')';\n path.err = `${error}: ${invalidPathValue} at index ${start}, \"${\n pathValue[start]\n }\" illegal number`;\n return;\n }\n }\n\n while (index < max && isDigit(pathValue.charCodeAt(index))) {\n index += 1;\n hasCeiling = true;\n }\n\n ch = pathValue.charCodeAt(index);\n }\n\n if (ch === 0x2e /* . */) {\n hasDot = true;\n index += 1;\n while (isDigit(pathValue.charCodeAt(index))) {\n index += 1;\n hasDecimal = true;\n }\n\n ch = pathValue.charCodeAt(index);\n }\n\n if (ch === 0x65 /* e */ || ch === 0x45 /* E */) {\n if (hasDot && !hasCeiling && !hasDecimal) {\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\n pathValue[index]\n }\" invalid float exponent`;\n return;\n }\n\n index += 1;\n\n ch = pathValue.charCodeAt(index);\n\n if (ch === 0x2b /* + */ || ch === 0x2d /* - */) {\n index += 1;\n }\n if (index < max && isDigit(pathValue.charCodeAt(index))) {\n while (index < max && isDigit(pathValue.charCodeAt(index))) {\n index += 1;\n }\n } else {\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\n pathValue[index]\n }\" invalid integer exponent`;\n return;\n }\n }\n\n path.index = index;\n path.param = +path.pathValue.slice(start, index);\n};\nexport default scanParam;\n","import type { SpaceNumber } from \"../types\";\n\n/**\n * Checks if the character is a space.\n *\n * @param ch the character to check\n * @returns check result\n */\n\nconst isSpace = (ch: number): ch is SpaceNumber => {\n const allSpaces = [\n // Special spaces\n 0x1680,\n 0x180e,\n 0x2000,\n 0x2001,\n 0x2002,\n 0x2003,\n 0x2004,\n 0x2005,\n 0x2006,\n 0x2007,\n 0x2008,\n 0x2009,\n 0x200a,\n 0x202f,\n 0x205f,\n 0x3000,\n 0xfeff,\n // Line terminators\n 0x0a,\n 0x0d,\n 0x2028,\n 0x2029,\n // White spaces\n 0x20,\n 0x09,\n 0x0b,\n 0x0c,\n 0xa0,\n ];\n\n return allSpaces.includes(ch);\n};\nexport default isSpace;\n","import isSpace from \"./isSpace\";\nimport type PathParser from \"./pathParser\";\n\n/**\n * Points the parser to the next character in the\n * path string every time it encounters any kind of\n * space character.\n *\n * @param path the `PathParser` instance\n */\nconst skipSpaces = (path: PathParser) => {\n const { pathValue, max } = path;\n while (path.index < max && isSpace(pathValue.charCodeAt(path.index))) {\n path.index += 1;\n }\n};\nexport default skipSpaces;\n","import type { PathCommandNumber } from \"../types\";\n\n/**\n * Checks if the character is a path command.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isPathCommand = (code: number): code is PathCommandNumber => {\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\n switch (code | 0x20) {\n case 0x6d /* m */:\n case 0x7a /* z */:\n case 0x6c /* l */:\n case 0x68 /* h */:\n case 0x76 /* v */:\n case 0x63 /* c */:\n case 0x73 /* s */:\n case 0x71 /* q */:\n case 0x74 /* t */:\n case 0x61 /* a */:\n // case 0x72/* r */:\n return true;\n default:\n return false;\n }\n};\nexport default isPathCommand;\n","import isDigit from \"./isDigit\";\nimport type { DigitNumber } from \"../types\";\n\n/**\n * Checks if the character is or belongs to a number.\n * [0-9]|+|-|.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isDigitStart = (\n code: number,\n): code is DigitNumber | 0x2b | 0x2d | 0x2e => {\n return isDigit(code) /* 0..9 */ || code === 0x2b /* + */ ||\n code === 0x2d /* - */ || code === 0x2e; /* . */\n};\nexport default isDigitStart;\n","/**\n * Checks if the character is an A (arc-to) path command.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isArcCommand = (code: number): code is 0x61 => {\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\n return (code | 0x20) === 0x61;\n};\nexport default isArcCommand;\n","/**\n * Checks if the character is a MoveTo command.\n *\n * @param code the character to check\n * @returns check result\n */\nconst isMoveCommand = (code: number): code is 0x6d | 0x4d => {\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\n switch (code | 0x20) {\n case 0x6d /* m */:\n case 0x4d /* M */:\n return true;\n default:\n return false;\n }\n};\nexport default isMoveCommand;\n","import finalizeSegment from \"./finalizeSegment\";\nimport paramCounts from \"./paramsCount\";\nimport scanFlag from \"./scanFlag\";\nimport scanParam from \"./scanParam\";\nimport skipSpaces from \"./skipSpaces\";\nimport isPathCommand from \"./isPathCommand\";\nimport isDigitStart from \"./isDigitStart\";\nimport isArcCommand from \"./isArcCommand\";\nimport isMoveCommand from \"./isMoveCommand\";\nimport invalidPathValue from \"./invalidPathValue\";\nimport error from \"./error\";\n\nimport type PathParser from \"./pathParser\";\nimport type { PathSegment, RelativeCommand } from \"../types\";\n\n/**\n * Scans every character in the path string to determine\n * where a segment starts and where it ends.\n *\n * @param path the `PathParser` instance\n */\nconst scanSegment = (path: PathParser) => {\n const { max, pathValue, index, segments } = path;\n const cmdCode = pathValue.charCodeAt(index);\n const reqParams =\n paramCounts[pathValue[index].toLowerCase() as RelativeCommand];\n\n path.segmentStart = index;\n\n // segments always start with a path command\n if (!isPathCommand(cmdCode)) {\n path.err = `${error}: ${invalidPathValue} \"${\n pathValue[index]\n }\" is not a path command at index ${index}`;\n return;\n }\n\n // after a Z segment, we only expect a MoveTo path command\n const lastSegment = segments[segments.length - 1] as PathSegment | undefined;\n if (\n !isMoveCommand(cmdCode) && lastSegment?.[0]?.toLocaleLowerCase() === \"z\"\n ) {\n path.err = `${error}: ${invalidPathValue} \"${\n pathValue[index]\n }\" is not a MoveTo path command at index ${index}`;\n return;\n }\n\n path.index += 1;\n skipSpaces(path);\n\n path.data = [];\n\n if (!reqParams) {\n // Z\n finalizeSegment(path);\n return;\n }\n\n for (;;) {\n for (let i = reqParams; i > 0; i -= 1) {\n if (isArcCommand(cmdCode) && (i === 3 || i === 4)) scanFlag(path);\n else scanParam(path);\n\n if (path.err.length) {\n return;\n }\n path.data.push(path.param);\n\n skipSpaces(path);\n\n // after ',' param is mandatory\n if (\n path.index < max && pathValue.charCodeAt(path.index) === 0x2c /* , */\n ) {\n path.index += 1;\n skipSpaces(path);\n }\n }\n\n if (path.index >= path.max) {\n break;\n }\n\n // Stop on next segment\n if (!isDigitStart(pathValue.charCodeAt(path.index))) {\n break;\n }\n }\n\n finalizeSegment(path);\n};\nexport default scanSegment;\n","import type { PathArray, PathSegment } from \"../types\";\n\n/**\n * The `PathParser` is used by the `parsePathString` static method\n * to generate a `pathArray`.\n *\n * @param pathString\n */\nexport default class PathParser {\n declare segments: PathArray | PathSegment[];\n declare pathValue: string;\n declare max: number;\n declare index: number;\n declare param: number;\n declare segmentStart: number;\n declare data: (string | number)[];\n declare err: string;\n\n constructor(pathString: string) {\n this.segments = [];\n this.pathValue = pathString;\n this.max = pathString.length;\n this.index = 0;\n this.param = 0.0;\n this.segmentStart = 0;\n this.data = [];\n this.err = \"\";\n }\n}\n","import scanSegment from \"./scanSegment\";\nimport skipSpaces from \"./skipSpaces\";\nimport PathParser from \"./pathParser\";\nimport type { PathArray } from \"../types\";\n\n/**\n * Parses a path string value and returns an array\n * of segments we like to call `pathArray`.\n *\n * @param pathInput the string to be parsed\n * @returns the resulted `pathArray` or error string\n */\nconst parsePathString = (pathInput: string | T) => {\n if (typeof pathInput !== \"string\") {\n return pathInput.slice(0) as typeof pathInput;\n }\n\n const path = new PathParser(pathInput);\n\n skipSpaces(path);\n\n while (path.index < path.max && !path.err.length) {\n scanSegment(path);\n }\n\n if (path?.err.length) {\n throw TypeError(path.err);\n }\n\n return path.segments as PathArray;\n};\n\nexport default parsePathString;\n","import type {\n AbsoluteCommand,\n AbsoluteSegment,\n ASegment,\n CSegment,\n HSegment,\n LSegment,\n MSegment,\n PathSegment,\n QSegment,\n SSegment,\n TSegment,\n VSegment,\n} from \"../types\";\n\n/**\n * Returns an absolute segment of a `PathArray` object.\n *\n * @param segment the segment object\n * @param index the segment index\n * @param lastX the last known X value\n * @param lastY the last known Y value\n * @returns the absolute segment\n */\nconst absolutizeSegment = (\n segment: PathSegment,\n index: number,\n lastX: number,\n lastY: number,\n) => {\n const [pathCommand] = segment;\n const absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\n const isAbsolute = absCommand === pathCommand;\n\n /* istanbul ignore else @preserve */\n if (index === 0 || isAbsolute) return segment as MSegment | AbsoluteSegment;\n // const values = segment.slice(1) as number[];\n if (absCommand === \"A\") {\n return [\n absCommand,\n segment[1],\n segment[2],\n segment[3],\n segment[4],\n segment[5],\n (segment as ASegment)[6] + lastX,\n (segment as ASegment)[7] + lastY,\n ] as ASegment;\n } else if (absCommand === \"V\") {\n return [absCommand, (segment as VSegment)[1] + lastY] as VSegment;\n } else if (absCommand === \"H\") {\n return [absCommand, (segment as HSegment)[1] + lastX] as HSegment;\n } else if (absCommand === \"L\") {\n return [\n absCommand,\n (segment as LSegment)[1] + lastX,\n (segment as LSegment)[2] + lastY,\n ] as LSegment;\n } else {\n // use brakets for `eslint: no-case-declaration`\n // https://stackoverflow.com/a/50753272/803358\n const absValues = [] as number[];\n const seglen = segment.length;\n for (let j = 1; j < seglen; j += 1) {\n absValues.push((segment[j] as number) + (j % 2 ? lastX : lastY));\n }\n // for c, s, q, t\n return [absCommand as typeof absCommand | number].concat(absValues) as\n | MSegment\n | QSegment\n | TSegment\n | SSegment\n | CSegment;\n }\n};\nexport default absolutizeSegment;\n","// import paramsParser from '../parser/paramsParser';\nimport type {\n AbsoluteCommand,\n IteratorCallback,\n PathArray,\n PathCommand,\n PathSegment,\n} from \"../types\";\n\nconst iterate = (\n path: PathArray,\n iterator: IteratorCallback,\n) => {\n let pathLen = path.length;\n let segment: PathSegment;\n let pathCommand = \"M\" as PathCommand;\n let absCommand = \"M\" as AbsoluteCommand;\n let isRelative = false;\n let x = 0;\n let y = 0;\n let mx = 0;\n let my = 0;\n let segLen = 0;\n\n for (let i = 0; i < pathLen; i += 1) {\n segment = path[i];\n [pathCommand] = segment;\n segLen = segment.length;\n absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\n isRelative = absCommand !== pathCommand;\n\n const iteratorResult = iterator(segment, i, x, y);\n // some methods like getPointAtLength would like to break\n // when task is complete\n if (iteratorResult === false) {\n break;\n }\n\n // segment = path[i];\n if (absCommand === \"Z\") {\n x = mx;\n y = my;\n } else if (absCommand === \"H\") {\n x = (segment[1] as number) + (isRelative ? x : 0);\n } else if (absCommand === \"V\") {\n y = (segment[1] as number) + (isRelative ? y : 0);\n } else {\n x = (segment[segLen - 2] as number) + (isRelative ? x : 0);\n y = (segment[segLen - 1] as number) + (isRelative ? y : 0);\n\n if (absCommand === \"M\") {\n mx = x;\n my = y;\n }\n }\n\n if (iteratorResult) {\n path[i] = iteratorResult;\n if (iteratorResult[0] === \"C\") {\n pathLen = path.length;\n }\n }\n }\n return path as T;\n};\n\nexport default iterate;\n","import parsePathString from \"../parser/parsePathString\";\nimport absolutizeSegment from \"../process/absolutizeSegment\";\nimport type { AbsoluteArray, PathArray } from \"../types\";\nimport iterate from \"../process/iterate\";\n\n/**\n * Parses a path string value or object and returns an array\n * of segments, all converted to absolute values.\n *\n * @param pathInput the path string | object\n * @returns the resulted `pathArray` with absolute values\n */\nconst pathToAbsolute = (pathInput: string | PathArray) => {\n const path = parsePathString(pathInput);\n\n return iterate(path, absolutizeSegment);\n};\nexport default pathToAbsolute;\n","import type {\n aSegment,\n cSegment,\n hSegment,\n lSegment,\n MSegment,\n PathSegment,\n qSegment,\n RelativeCommand,\n RelativeSegment,\n sSegment,\n tSegment,\n vSegment,\n} from \"../types\";\n\n/**\n * Returns a relative segment of a `PathArray` object.\n *\n * @param segment the segment object\n * @param index the segment index\n * @param lastX the last known X value\n * @param lastY the last known Y value\n * @returns the relative segment\n */\nconst relativizeSegment = (\n segment: PathSegment,\n index: number,\n lastX: number,\n lastY: number,\n) => {\n const [pathCommand] = segment;\n const relCommand = pathCommand.toLowerCase() as RelativeCommand;\n const isRelative = pathCommand === relCommand;\n\n /* istanbul ignore else @preserve */\n if (index === 0 || isRelative) return segment as MSegment | RelativeSegment;\n\n if (relCommand === \"a\") {\n return [\n relCommand,\n segment[1],\n segment[2],\n segment[3],\n segment[4],\n segment[5],\n (segment as aSegment)[6] - lastX,\n (segment as aSegment)[7] - lastY,\n ] as aSegment;\n } else if (relCommand === \"v\") {\n return [relCommand, (segment as vSegment)[1] - lastY] as vSegment;\n } else if (relCommand === \"h\") {\n return [relCommand, (segment as hSegment)[1] - lastX] as hSegment;\n } else if (relCommand === \"l\") {\n return [\n relCommand,\n (segment as lSegment)[1] - lastX,\n (segment as lSegment)[2] - lastY,\n ] as lSegment;\n } else {\n // use brakets for `eslint: no-case-declaration`\n // https://stackoverflow.com/a/50753272/803358\n const relValues = [] as number[];\n const seglen = segment.length;\n for (let j = 1; j < seglen; j += 1) {\n relValues.push((segment[j] as number) - (j % 2 ? lastX : lastY));\n }\n // for c, s, q, t\n return [relCommand as RelativeCommand | number].concat(relValues) as\n | qSegment\n | tSegment\n | sSegment\n | cSegment;\n }\n};\n\nexport default relativizeSegment;\n","import type { PathArray, RelativeArray } from \"../types\";\nimport parsePathString from \"../parser/parsePathString\";\nimport iterate from \"../process/iterate\";\nimport relativizeSegment from \"../process/relativizeSegment\";\n\n/**\n * Parses a path string value or object and returns an array\n * of segments, all converted to relative values.\n *\n * @param pathInput the path string | object\n * @returns the resulted `pathArray` with relative values\n */\nconst pathToRelative = (pathInput: string | PathArray): RelativeArray => {\n const path = parsePathString(pathInput);\n\n return iterate(path, relativizeSegment);\n};\nexport default pathToRelative;\n","/**\n * Returns an {x,y} vector rotated by a given\n * angle in radian.\n *\n * @param x the initial vector x\n * @param y the initial vector y\n * @param rad the radian vector angle\n * @returns the rotated vector\n */\nconst rotateVector = (\n x: number,\n y: number,\n rad: number,\n): { x: number; y: number } => {\n const { sin, cos } = Math;\n const X = x * cos(rad) - y * sin(rad);\n const Y = x * sin(rad) + y * cos(rad);\n return { x: X, y: Y };\n};\n\nexport default rotateVector;\n","import rotateVector from \"../math/rotateVector\";\n\n/**\n * Converts A (arc-to) segments to C (cubic-bezier-to).\n *\n * For more information of where this math came from visit:\n * http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n *\n * @param X1 the starting x position\n * @param Y1 the starting y position\n * @param RX x-radius of the arc\n * @param RY y-radius of the arc\n * @param angle x-axis-rotation of the arc\n * @param LAF large-arc-flag of the arc\n * @param SF sweep-flag of the arc\n * @param X2 the ending x position\n * @param Y2 the ending y position\n * @param recursive the parameters needed to split arc into 2 segments\n * @return the resulting cubic-bezier segment(s)\n */\nconst arcToCubic = (\n X1: number,\n Y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n X2: number,\n Y2: number,\n recursive?: [number, number, number, number],\n): number[] => {\n let x1 = X1;\n let y1 = Y1;\n let rx = RX;\n let ry = RY;\n let x2 = X2;\n let y2 = Y2;\n // for more information of where this Math came from visit:\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n const d120 = (Math.PI * 120) / 180;\n\n const rad = (Math.PI / 180) * (+angle || 0);\n let res = [] as number[];\n let xy;\n let f1;\n let f2;\n let cx;\n let cy;\n\n if (!recursive) {\n xy = rotateVector(x1, y1, -rad);\n x1 = xy.x;\n y1 = xy.y;\n xy = rotateVector(x2, y2, -rad);\n x2 = xy.x;\n y2 = xy.y;\n\n const x = (x1 - x2) / 2;\n const y = (y1 - y2) / 2;\n let h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\n if (h > 1) {\n h = Math.sqrt(h);\n rx *= h;\n ry *= h;\n }\n const rx2 = rx * rx;\n const ry2 = ry * ry;\n\n const k = (LAF === SF ? -1 : 1) *\n Math.sqrt(\n Math.abs(\n (rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x),\n ),\n );\n\n cx = (k * rx * y) / ry + (x1 + x2) / 2;\n cy = (k * -ry * x) / rx + (y1 + y2) / 2;\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\n f1 = Math.asin(((((y1 - cy) / ry) * 10 ** 9) >> 0) / 10 ** 9);\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\n f2 = Math.asin(((((y2 - cy) / ry) * 10 ** 9) >> 0) / 10 ** 9);\n\n f1 = x1 < cx ? Math.PI - f1 : f1;\n f2 = x2 < cx ? Math.PI - f2 : f2;\n if (f1 < 0) f1 = Math.PI * 2 + f1;\n if (f2 < 0) f2 = Math.PI * 2 + f2;\n if (SF && f1 > f2) {\n f1 -= Math.PI * 2;\n }\n if (!SF && f2 > f1) {\n f2 -= Math.PI * 2;\n }\n } else {\n [f1, f2, cx, cy] = recursive;\n }\n let df = f2 - f1;\n if (Math.abs(df) > d120) {\n const f2old = f2;\n const x2old = x2;\n const y2old = y2;\n f2 = f1 + d120 * (SF && f2 > f1 ? 1 : -1);\n x2 = cx + rx * Math.cos(f2);\n y2 = cy + ry * Math.sin(f2);\n res = arcToCubic(x2, y2, rx, ry, angle, 0, SF, x2old, y2old, [\n f2,\n f2old,\n cx,\n cy,\n ]);\n }\n df = f2 - f1;\n const c1 = Math.cos(f1);\n const s1 = Math.sin(f1);\n const c2 = Math.cos(f2);\n const s2 = Math.sin(f2);\n const t = Math.tan(df / 4);\n const hx = (4 / 3) * rx * t;\n const hy = (4 / 3) * ry * t;\n const m1 = [x1, y1];\n const m2 = [x1 + hx * s1, y1 - hy * c1];\n const m3 = [x2 + hx * s2, y2 - hy * c2];\n const m4 = [x2, y2];\n m2[0] = 2 * m1[0] - m2[0];\n m2[1] = 2 * m1[1] - m2[1];\n if (recursive) {\n return [m2[0], m2[1], m3[0], m3[1], m4[0], m4[1]].concat(res);\n }\n res = [m2[0], m2[1], m3[0], m3[1], m4[0], m4[1]].concat(res);\n const newres = [];\n for (let i = 0, ii = res.length; i < ii; i += 1) {\n newres[i] = i % 2\n ? rotateVector(res[i - 1], res[i], rad).y\n : rotateVector(res[i], res[i + 1], rad).x;\n }\n return newres;\n};\nexport default arcToCubic;\n","/**\n * Converts a Q (quadratic-bezier) segment to C (cubic-bezier).\n *\n * @param x1 curve start x\n * @param y1 curve start y\n * @param qx control point x\n * @param qy control point y\n * @param x2 curve end x\n * @param y2 curve end y\n * @returns the cubic-bezier segment\n */\nconst quadToCubic = (\n x1: number,\n y1: number,\n qx: number,\n qy: number,\n x2: number,\n y2: number,\n): [number, number, number, number, number, number] => {\n const r13 = 1 / 3;\n const r23 = 2 / 3;\n return [\n r13 * x1 + r23 * qx, // cpx1\n r13 * y1 + r23 * qy, // cpy1\n r13 * x2 + r23 * qx, // cpx2\n r13 * y2 + r23 * qy, // cpy2\n x2,\n y2, // x,y\n ];\n};\nexport default quadToCubic;\n","import { PointTuple } from \"../types\";\n\n/**\n * Returns the coordinates of a specified distance\n * ratio between two points.\n *\n * @param a the first point coordinates\n * @param b the second point coordinates\n * @param t the ratio\n * @returns the midpoint coordinates\n */\nconst midPoint = (a: PointTuple, b: PointTuple, t: number): PointTuple => {\n const [ax, ay] = a;\n const [bx, by] = b;\n return [ax + (bx - ax) * t, ay + (by - ay) * t];\n};\n\nexport default midPoint;\n","import midPoint from \"../math/midPoint\";\n\n/**\n * Converts an L (line-to) segment to C (cubic-bezier).\n *\n * @param x1 line start x\n * @param y1 line start y\n * @param x2 line end x\n * @param y2 line end y\n * @returns the cubic-bezier segment\n */\nconst lineToCubic = (x1: number, y1: number, x2: number, y2: number) => {\n const c1 = midPoint([x1, y1], [x2, y2], 1.0 / 3.0);\n const c2 = midPoint([x1, y1], [x2, y2], 2.0 / 3.0);\n return [c1[0], c1[1], c2[0], c2[1], x2, y2];\n};\nexport default lineToCubic;\n","import arcToCubic from \"./arcToCubic\";\nimport quadToCubic from \"./quadToCubic\";\nimport lineToCubic from \"./lineToCubic\";\nimport type { CSegment, MSegment, PathSegment } from \"../types\";\nimport type { ParserParams } from \"../interface\";\n\n/**\n * Converts any segment to C (cubic-bezier).\n *\n * @param segment the source segment\n * @param params the source segment parameters\n * @returns the cubic-bezier segment\n */\nconst segmentToCubic = (segment: PathSegment, params: ParserParams) => {\n const [pathCommand] = segment;\n const values = segment.slice(1).map(Number);\n const [x, y] = values;\n // let args;\n const { x1: px1, y1: py1, x: px, y: py } = params;\n\n if (!\"TQ\".includes(pathCommand)) {\n params.qx = null;\n params.qy = null;\n }\n\n if (pathCommand === \"M\") {\n params.x = x;\n params.y = y;\n return segment;\n } else if (pathCommand === \"A\") {\n return [\"C\" as string | number].concat(\n arcToCubic(\n px1,\n py1,\n values[0],\n values[1],\n values[2],\n values[3],\n values[4],\n values[5],\n values[6],\n ),\n ) as CSegment;\n } else if (pathCommand === \"Q\") {\n params.qx = x;\n params.qy = y;\n return [\"C\" as string | number].concat(\n quadToCubic(px1, py1, values[0], values[1], values[2], values[3]),\n ) as CSegment;\n } else if (pathCommand === \"L\") {\n return [\"C\" as string | number].concat(\n lineToCubic(px1, py1, x, y),\n ) as CSegment;\n } else if (pathCommand === \"Z\") {\n return [\"C\" as string | number].concat(\n lineToCubic(px1, py1, px, py),\n ) as CSegment;\n }\n\n return segment as MSegment | CSegment;\n};\nexport default segmentToCubic;\n","import type { ParserParams } from \"../interface\";\nimport type {\n ASegment,\n CSegment,\n HSegment,\n LSegment,\n MSegment,\n NormalSegment,\n PathCommand,\n PathSegment,\n PointTuple,\n QSegment,\n VSegment,\n} from \"../types\";\n\n/**\n * Normalizes a single segment of a `pathArray` object.\n *\n * @param segment the segment object\n * @param params the normalization parameters\n * @returns the normalized segment\n */\nconst normalizeSegment = (segment: PathSegment, params: ParserParams) => {\n const [pathCommand] = segment;\n const absCommand = pathCommand.toUpperCase();\n const isRelative = pathCommand !== absCommand;\n const { x1: px1, y1: py1, x2: px2, y2: py2, x, y } = params;\n const values = segment.slice(1) as number[];\n let absValues = values.map((n, j) => n + (isRelative ? (j % 2 ? y : x) : 0));\n\n if (!\"TQ\".includes(absCommand)) {\n // optional but good to be cautious\n params.qx = null;\n params.qy = null;\n }\n\n // istanbul ignore else @preserve\n if (absCommand === \"A\") {\n absValues = values.slice(0, -2).concat(\n values[5] + (isRelative ? x : 0),\n values[6] + (isRelative ? y : 0),\n );\n\n return [\"A\" as PathCommand | number].concat(absValues) as ASegment;\n } else if (absCommand === \"H\") {\n return [\n \"L\",\n (segment as HSegment)[1] + (isRelative ? x : 0),\n py1,\n ] as LSegment;\n } else if (absCommand === \"V\") {\n return [\n \"L\",\n px1,\n (segment as VSegment)[1] + (isRelative ? y : 0),\n ] as LSegment;\n } else if (absCommand === \"L\") {\n return [\n \"L\",\n (segment as LSegment)[1] + (isRelative ? x : 0),\n (segment as LSegment)[2] + (isRelative ? y : 0),\n ] as LSegment;\n } else if (absCommand === \"M\") {\n return [\n \"M\",\n (segment as MSegment)[1] + (isRelative ? x : 0),\n (segment as MSegment)[2] + (isRelative ? y : 0),\n ] as MSegment;\n } else if (absCommand === \"C\") {\n return [\"C\" as PathCommand | number].concat(absValues) as CSegment;\n } else if (absCommand === \"S\") {\n const x1 = px1 * 2 - px2;\n const y1 = py1 * 2 - py2;\n params.x1 = x1;\n params.y1 = y1;\n return [\"C\", x1, y1].concat(absValues) as CSegment;\n } else if (absCommand === \"T\") {\n const qx = px1 * 2 - (params.qx ? params.qx : /* istanbul ignore next */ 0);\n const qy = py1 * 2 - (params.qy ? params.qy : /* istanbul ignore next */ 0);\n params.qx = qx;\n params.qy = qy;\n return [\"Q\", qx, qy].concat(absValues) as QSegment;\n } else if (absCommand === \"Q\") {\n const [nqx, nqy] = absValues as PointTuple;\n params.qx = nqx;\n params.qy = nqy;\n return [\"Q\" as PathCommand | number].concat(absValues) as QSegment;\n } else if (absCommand === \"Z\") {\n return [\"Z\"] as NormalSegment;\n }\n\n // istanbul ignore next @preserve\n return segment as NormalSegment;\n};\nexport default normalizeSegment;\n","import type { ParserParams } from \"../interface\";\n\nconst paramsParser: ParserParams = {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n x: 0,\n y: 0,\n qx: null,\n qy: null,\n};\n\nexport default paramsParser;\n","import segmentToCubic from \"../process/segmentToCubic\";\nimport { AbsoluteCommand, CSegment, CurveArray, PathArray } from \"../types\";\nimport iterate from \"../process/iterate\";\nimport parsePathString from \"../parser/parsePathString\";\nimport normalizeSegment from \"../process/normalizeSegment\";\nimport paramsParser from \"../parser/paramsParser\";\n\n/**\n * Parses a path string value or 'pathArray' and returns a new one\n * in which all segments are converted to cubic-bezier.\n *\n * In addition, un-necessary `Z` segment is removed if previous segment\n * extends to the `M` segment.\n *\n * @param pathInput the string to be parsed or 'pathArray'\n * @returns the resulted `pathArray` converted to cubic-bezier\n */\nconst pathToCurve = (pathInput: string | PathArray): CurveArray => {\n const params = { ...paramsParser };\n const path = parsePathString(pathInput);\n\n return iterate(path, (seg, index, lastX, lastY) => {\n params.x = lastX;\n params.y = lastY;\n const normalSegment = normalizeSegment(seg, params);\n let result = segmentToCubic(normalSegment, params);\n const isLongArc = result[0] === \"C\" && result.length > 7;\n\n if (isLongArc) {\n path.splice(\n index + 1,\n 0,\n [\"C\" as AbsoluteCommand | number].concat(result.slice(7)) as CSegment,\n );\n result = result.slice(0, 7) as CSegment;\n }\n\n const seglen = result.length;\n params.x1 = +result[seglen - 2];\n params.y1 = +result[seglen - 1];\n params.x2 = +result[seglen - 4] || params.x1;\n params.y2 = +result[seglen - 3] || params.y1;\n\n return result;\n });\n};\nexport default pathToCurve;\n","const roundTo = (n: number, round: number) => {\n const pow = round >= 1 ? 10 ** round : 1;\n\n return round > 0 ? Math.round(n * pow) / pow : Math.round(n);\n};\n\nexport default roundTo;\n","import type { PathArray, PathSegment } from \"../types\";\nimport defaultOptions from \"../options/options\";\nimport roundTo from \"../math/roundTo\";\n\n/**\n * Returns a valid `d` attribute string value created\n * by rounding values and concatenating the `pathArray` segments.\n *\n * @param path the `pathArray` object\n * @param roundOption amount of decimals to round values to\n * @returns the concatenated path string\n */\nconst pathToString = (\n path: PathArray,\n roundOption?: number | \"off\",\n): string => {\n const pathLen = path.length;\n let { round } = defaultOptions;\n let segment = path[0] as PathSegment;\n let result = \"\";\n\n // allow for ZERO decimals\n round = roundOption === \"off\"\n ? roundOption\n : typeof roundOption === \"number\" && roundOption >= 0\n ? roundOption\n : typeof round === \"number\" && round >= 0\n ? round\n : /* istanbul ignore next @preserve */ \"off\";\n\n for (let i = 0; i < pathLen; i += 1) {\n segment = path[i];\n const [pathCommand] = segment;\n const values = segment.slice(1) as number[];\n result += pathCommand;\n if (round === \"off\") {\n result += values.join(\" \");\n } else {\n let j = 0;\n const valLen = values.length;\n while (j < valLen) {\n result += roundTo(values[j], round);\n if (j !== valLen - 1) result += \" \";\n j += 1;\n }\n }\n }\n\n return result;\n};\n\nexport default pathToString;\n","import { type PointTuple } from \"../types\";\n\n/**\n * Returns the square root of the distance\n * between two given points.\n *\n * @param a the first point coordinates\n * @param b the second point coordinates\n * @returns the distance value\n */\nconst distanceSquareRoot = (a: PointTuple, b: PointTuple) => {\n return Math.sqrt(\n (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]),\n );\n};\n\nexport default distanceSquareRoot;\n","import midPoint from \"./midPoint\";\nimport distanceSquareRoot from \"./distanceSquareRoot\";\n\n/**\n * Returns length for line segments (MoveTo, LineTo).\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the line segment length\n */\nconst getLineLength = (x1: number, y1: number, x2: number, y2: number) => {\n return distanceSquareRoot([x1, y1], [x2, y2]);\n};\n\n/**\n * Returns a point along the line segments (MoveTo, LineTo).\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance the distance to point in [0-1] range\n * @returns the point at length\n */\nconst getPointAtLineLength = (\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n distance?: number,\n) => {\n let point = { x: x1, y: y1 };\n\n /* istanbul ignore else @preserve */\n if (typeof distance === \"number\") {\n const length = distanceSquareRoot([x1, y1], [x2, y2]);\n if (distance <= 0) {\n point = { x: x1, y: y1 };\n } else if (distance >= length) {\n point = { x: x2, y: y2 };\n } else {\n const [x, y] = midPoint([x1, y1], [x2, y2], distance / length);\n point = { x, y };\n }\n }\n return point;\n};\n\n/**\n * Returns bounding box for line segments (MoveTo, LineTo).\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance the distance to point in [0-1] range\n * @returns the extrema for line segments\n */\nconst getLineBBox = (x1: number, y1: number, x2: number, y2: number) => {\n const { min, max } = Math;\n\n return [min(x1, x2), min(y1, y2), max(x1, x2), max(y1, y2)] as [\n number,\n number,\n number,\n number,\n ];\n};\n\nexport { getLineBBox, getLineLength, getPointAtLineLength };\n","import { getPointAtLineLength } from \"./lineTools\";\nimport type { Point, PointTuple } from \"../types\";\n\n/**\n * Returns the Arc segment length.\n * @param rx radius along X axis\n * @param ry radius along Y axis\n * @param theta the angle in radians\n * @returns the arc length\n */\nconst arcLength = (rx: number, ry: number, theta: number) => {\n const halfTheta = theta / 2;\n const sinHalfTheta = Math.sin(halfTheta);\n const cosHalfTheta = Math.cos(halfTheta);\n const term1 = rx ** 2 * sinHalfTheta ** 2;\n const term2 = ry ** 2 * cosHalfTheta ** 2;\n const length = Math.sqrt(term1 + term2) * theta;\n return Math.abs(length);\n};\n\n/**\n * Find point on ellipse at given angle around ellipse (theta);\n * @param cx the center X\n * @param cy the center Y\n * @param rx the radius X\n * @param ry the radius Y\n * @param alpha the arc rotation angle in radians\n * @param theta the arc sweep angle in radians\n * @returns a point around ellipse at given angle\n */\nconst arcPoint = (\n cx: number,\n cy: number,\n rx: number,\n ry: number,\n alpha: number,\n theta: number,\n) => {\n const { sin, cos } = Math;\n // theta is angle in radians around arc\n // alpha is angle of rotation of ellipse in radians\n const cosA = cos(alpha);\n const sinA = sin(alpha);\n const x = rx * cos(theta);\n const y = ry * sin(theta);\n\n return [cx + cosA * x - sinA * y, cy + sinA * x + cosA * y] as PointTuple;\n};\n\n/**\n * Returns the angle between two points.\n * @param v0 starting point\n * @param v1 ending point\n * @returns the angle in radian\n */\nconst angleBetween = (v0: Point, v1: Point) => {\n const { x: v0x, y: v0y } = v0;\n const { x: v1x, y: v1y } = v1;\n const p = v0x * v1x + v0y * v1y;\n const n = Math.sqrt((v0x ** 2 + v0y ** 2) * (v1x ** 2 + v1y ** 2));\n const sign = v0x * v1y - v0y * v1x < 0 ? -1 : 1;\n return sign * Math.acos(p / n);\n};\n\n/**\n * Returns the following properties for an Arc segment: center, start angle,\n * end angle, and radiuses on X and Y axis.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param RX the radius on X axis\n * @param RY the radius on Y axis\n * @param angle the ellipse rotation in degrees\n * @param LAF the large arc flag\n * @param SF the sweep flag\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns properties specific to Arc segments\n */\nconst getArcProps = (\n x1: number,\n y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n x: number,\n y: number,\n) => {\n const { abs, sin, cos, sqrt, PI } = Math;\n let rx = abs(RX);\n let ry = abs(RY);\n const xRot = ((angle % 360) + 360) % 360;\n const xRotRad = xRot * (PI / 180);\n\n // istanbul ignore next @preserve\n if (x1 === x && y1 === y) {\n return {\n rx,\n ry,\n startAngle: 0,\n endAngle: 0,\n center: { x, y },\n };\n }\n\n if (rx === 0 || ry === 0) {\n return {\n rx,\n ry,\n startAngle: 0,\n endAngle: 0,\n center: { x: (x + x1) / 2, y: (y + y1) / 2 },\n };\n }\n\n const dx = (x1 - x) / 2;\n const dy = (y1 - y) / 2;\n\n const transformedPoint = {\n x: cos(xRotRad) * dx + sin(xRotRad) * dy,\n y: -sin(xRotRad) * dx + cos(xRotRad) * dy,\n };\n\n const radiiCheck = transformedPoint.x ** 2 / rx ** 2 +\n transformedPoint.y ** 2 / ry ** 2;\n\n if (radiiCheck > 1) {\n rx *= sqrt(radiiCheck);\n ry *= sqrt(radiiCheck);\n }\n\n const cSquareNumerator = rx ** 2 * ry ** 2 -\n rx ** 2 * transformedPoint.y ** 2 - ry ** 2 * transformedPoint.x ** 2;\n const cSquareRootDenom = rx ** 2 * transformedPoint.y ** 2 +\n ry ** 2 * transformedPoint.x ** 2;\n\n let cRadicand = cSquareNumerator / cSquareRootDenom;\n /* istanbul ignore next @preserve */\n cRadicand = cRadicand < 0 ? 0 : cRadicand;\n const cCoef = (LAF !== SF ? 1 : -1) * sqrt(cRadicand);\n const transformedCenter = {\n x: cCoef * ((rx * transformedPoint.y) / ry),\n y: cCoef * (-(ry * transformedPoint.x) / rx),\n };\n\n const center = {\n x: cos(xRotRad) * transformedCenter.x - sin(xRotRad) * transformedCenter.y +\n (x1 + x) / 2,\n y: sin(xRotRad) * transformedCenter.x + cos(xRotRad) * transformedCenter.y +\n (y1 + y) / 2,\n };\n\n const startVector = {\n x: (transformedPoint.x - transformedCenter.x) / rx,\n y: (transformedPoint.y - transformedCenter.y) / ry,\n };\n\n const startAngle = angleBetween({ x: 1, y: 0 }, startVector);\n\n const endVector = {\n x: (-transformedPoint.x - transformedCenter.x) / rx,\n y: (-transformedPoint.y - transformedCenter.y) / ry,\n };\n\n let sweepAngle = angleBetween(startVector, endVector);\n if (!SF && sweepAngle > 0) {\n sweepAngle -= 2 * PI;\n } else if (SF && sweepAngle < 0) {\n sweepAngle += 2 * PI;\n }\n sweepAngle %= 2 * PI;\n\n const endAngle = startAngle + sweepAngle;\n\n // point.ellipticalArcStartAngle = startAngle;\n // point.ellipticalArcEndAngle = startAngle + sweepAngle;\n // point.ellipticalArcAngle = alpha;\n\n // point.ellipticalArcCenter = center;\n // point.resultantRx = rx;\n // point.resultantRy = ry;\n\n return {\n center,\n startAngle,\n endAngle,\n rx,\n ry,\n };\n};\n\n/**\n * Returns the length of an Arc segment.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the length of the Arc segment\n */\nconst getArcLength = (\n x1: number,\n y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n x: number,\n y: number,\n) => {\n const { rx, ry, startAngle, endAngle } = getArcProps(\n x1,\n y1,\n RX,\n RY,\n angle,\n LAF,\n SF,\n x,\n y,\n );\n return arcLength(rx, ry, endAngle - startAngle);\n};\n\n/**\n * Returns a point along an Arc segment at a given distance.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param RX the radius on X axis\n * @param RY the radius on Y axis\n * @param angle the ellipse rotation in degrees\n * @param LAF the large arc flag\n * @param SF the sweep flag\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance a [0-1] ratio\n * @returns a point along the Arc segment\n */\nconst getPointAtArcLength = (\n x1: number,\n y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n x: number,\n y: number,\n distance?: number,\n) => {\n let point = { x: x1, y: y1 };\n const { center, rx, ry, startAngle, endAngle } = getArcProps(\n x1,\n y1,\n RX,\n RY,\n angle,\n LAF,\n SF,\n x,\n y,\n );\n\n /* istanbul ignore else @preserve */\n if (typeof distance === \"number\") {\n const length = arcLength(rx, ry, endAngle - startAngle);\n if (distance <= 0) {\n point = { x: x1, y: y1 };\n } else if (distance >= length) {\n point = { x, y };\n } else {\n /* istanbul ignore next @preserve */\n if (x1 === x && y1 === y) {\n return { x, y };\n }\n /* istanbul ignore next @preserve */\n if (rx === 0 || ry === 0) {\n return getPointAtLineLength(x1, y1, x, y, distance);\n }\n const { PI, cos, sin } = Math;\n const sweepAngle = endAngle - startAngle;\n const xRot = ((angle % 360) + 360) % 360;\n const xRotRad = xRot * (PI / 180);\n const alpha = startAngle + sweepAngle * (distance / length);\n const ellipseComponentX = rx * cos(alpha);\n const ellipseComponentY = ry * sin(alpha);\n\n point = {\n x: cos(xRotRad) * ellipseComponentX - sin(xRotRad) * ellipseComponentY +\n center.x,\n y: sin(xRotRad) * ellipseComponentX + cos(xRotRad) * ellipseComponentY +\n center.y,\n };\n }\n }\n\n return point;\n};\n\n/**\n * Returns the extrema for an Arc segment in the following format:\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\n *\n * @see https://github.com/herrstrietzel/svg-pathdata-getbbox\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param RX the radius on X axis\n * @param RY the radius on Y axis\n * @param angle the ellipse rotation in degrees\n * @param LAF the large arc flag\n * @param SF the sweep flag\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the extrema of the Arc segment\n */\nconst getArcBBox = (\n x1: number,\n y1: number,\n RX: number,\n RY: number,\n angle: number,\n LAF: number,\n SF: number,\n x: number,\n y: number,\n) => {\n const { center, rx, ry, startAngle, endAngle } = getArcProps(\n x1,\n y1,\n RX,\n RY,\n angle,\n LAF,\n SF,\n x,\n y,\n );\n const deltaAngle = endAngle - startAngle;\n const { min, max, tan, atan2, PI } = Math;\n\n // circle/elipse center coordinates\n const { x: cx, y: cy } = center;\n\n // rotation to radians\n const alpha = (angle * PI) / 180;\n const tangent = tan(alpha);\n\n /**\n * find min/max from zeroes of directional derivative along x and y\n * along x axis\n */\n const theta = atan2(-ry * tangent, rx);\n const angle1 = theta;\n const angle2 = theta + PI;\n const angle3 = atan2(ry, rx * tangent);\n const angle4 = angle3 + PI;\n const xArray = [x];\n const yArray = [y];\n\n // inner bounding box\n let xMin = min(x1, x);\n let xMax = max(x1, x);\n let yMin = min(y1, y);\n let yMax = max(y1, y);\n\n // on path point close after start\n const angleAfterStart = endAngle - deltaAngle * 0.00001;\n const pP2 = arcPoint(cx, cy, rx, ry, alpha, angleAfterStart);\n\n // on path point close before end\n const angleBeforeEnd = endAngle - deltaAngle * 0.99999;\n const pP3 = arcPoint(cx, cy, rx, ry, alpha, angleBeforeEnd);\n\n /**\n * expected extremes\n * if leaving inner bounding box\n * (between segment start and end point)\n * otherwise exclude elliptic extreme points\n */\n\n // right\n if (pP2[0] > xMax || pP3[0] > xMax) {\n // get point for this theta\n const p1 = arcPoint(cx, cy, rx, ry, alpha, angle1);\n xArray.push(p1[0]);\n yArray.push(p1[1]);\n }\n\n // left\n if (pP2[0] < xMin || pP3[0] < xMin) {\n // get anti-symmetric point\n const p2 = arcPoint(cx, cy, rx, ry, alpha, angle2);\n xArray.push(p2[0]);\n yArray.push(p2[1]);\n }\n\n // top\n if (pP2[1] < yMin || pP3[1] < yMin) {\n // get anti-symmetric point\n const p4 = arcPoint(cx, cy, rx, ry, alpha, angle4);\n xArray.push(p4[0]);\n yArray.push(p4[1]);\n }\n\n // bottom\n if (pP2[1] > yMax || pP3[1] > yMax) {\n // get point for this theta\n const p3 = arcPoint(cx, cy, rx, ry, alpha, angle3);\n xArray.push(p3[0]);\n yArray.push(p3[1]);\n }\n\n xMin = min.apply([], xArray);\n yMin = min.apply([], yArray);\n xMax = max.apply([], xArray);\n yMax = max.apply([], yArray);\n\n return [xMin, yMin, xMax, yMax] as [number, number, number, number];\n};\n\nexport {\n angleBetween,\n arcLength,\n arcPoint,\n getArcBBox,\n getArcLength,\n getArcProps,\n getPointAtArcLength,\n};\n","import type {\n CubicCoordinates,\n CubicPoints,\n DeriveCallback,\n DerivedCubicPoints,\n DerivedPoint,\n DerivedQuadPoints,\n PointTuple,\n QuadCoordinates,\n QuadPoints,\n} from \"../types\";\n\n/**\n * Tools from bezier.js by Mike 'Pomax' Kamermans\n * @see https://github.com/Pomax/bezierjs\n */\n\nconst Tvalues = [\n -0.0640568928626056260850430826247450385909,\n 0.0640568928626056260850430826247450385909,\n -0.1911188674736163091586398207570696318404,\n 0.1911188674736163091586398207570696318404,\n -0.3150426796961633743867932913198102407864,\n 0.3150426796961633743867932913198102407864,\n -0.4337935076260451384870842319133497124524,\n 0.4337935076260451384870842319133497124524,\n -0.5454214713888395356583756172183723700107,\n 0.5454214713888395356583756172183723700107,\n -0.6480936519369755692524957869107476266696,\n 0.6480936519369755692524957869107476266696,\n -0.7401241915785543642438281030999784255232,\n 0.7401241915785543642438281030999784255232,\n -0.8200019859739029219539498726697452080761,\n 0.8200019859739029219539498726697452080761,\n -0.8864155270044010342131543419821967550873,\n 0.8864155270044010342131543419821967550873,\n -0.9382745520027327585236490017087214496548,\n 0.9382745520027327585236490017087214496548,\n -0.9747285559713094981983919930081690617411,\n 0.9747285559713094981983919930081690617411,\n -0.9951872199970213601799974097007368118745,\n 0.9951872199970213601799974097007368118745,\n];\n\nconst Cvalues = [\n 0.1279381953467521569740561652246953718517,\n 0.1279381953467521569740561652246953718517,\n 0.1258374563468282961213753825111836887264,\n 0.1258374563468282961213753825111836887264,\n 0.121670472927803391204463153476262425607,\n 0.121670472927803391204463153476262425607,\n 0.1155056680537256013533444839067835598622,\n 0.1155056680537256013533444839067835598622,\n 0.1074442701159656347825773424466062227946,\n 0.1074442701159656347825773424466062227946,\n 0.0976186521041138882698806644642471544279,\n 0.0976186521041138882698806644642471544279,\n 0.086190161531953275917185202983742667185,\n 0.086190161531953275917185202983742667185,\n 0.0733464814110803057340336152531165181193,\n 0.0733464814110803057340336152531165181193,\n 0.0592985849154367807463677585001085845412,\n 0.0592985849154367807463677585001085845412,\n 0.0442774388174198061686027482113382288593,\n 0.0442774388174198061686027482113382288593,\n 0.0285313886289336631813078159518782864491,\n 0.0285313886289336631813078159518782864491,\n 0.0123412297999871995468056670700372915759,\n 0.0123412297999871995468056670700372915759,\n];\n\n/**\n * @param points\n * @returns\n */\nconst deriveBezier = (points: QuadPoints | CubicPoints) => {\n const dpoints = [] as (DerivedCubicPoints | DerivedQuadPoints)[];\n for (let p = points, d = p.length, c = d - 1; d > 1; d -= 1, c -= 1) {\n const list = [] as unknown as DerivedCubicPoints | DerivedQuadPoints;\n for (let j = 0; j < c; j += 1) {\n list.push({\n x: c * (p[j + 1].x - p[j].x),\n y: c * (p[j + 1].y - p[j].y),\n t: 0,\n });\n }\n dpoints.push(list);\n p = list;\n }\n return dpoints;\n};\n\n/**\n * @param points\n * @param t\n */\nconst computeBezier = (\n points: DerivedQuadPoints | DerivedCubicPoints,\n t: number,\n) => {\n // shortcuts\n /* istanbul ignore next @preserve */\n if (t === 0) {\n points[0].t = 0;\n return points[0];\n }\n\n const order = points.length - 1;\n\n /* istanbul ignore next @preserve */\n if (t === 1) {\n points[order].t = 1;\n return points[order];\n }\n\n const mt = 1 - t;\n let p = points as typeof points | [\n DerivedPoint,\n DerivedPoint,\n DerivedPoint,\n DerivedPoint,\n ];\n\n // constant?\n /* istanbul ignore next @preserve */\n if (order === 0) {\n points[0].t = t;\n return points[0];\n }\n\n // linear?\n /* istanbul ignore else @preserve */\n if (order === 1) {\n return {\n x: mt * p[0].x + t * p[1].x,\n y: mt * p[0].y + t * p[1].y,\n t,\n };\n }\n\n // quadratic/cubic curve?\n const mt2 = mt * mt;\n const t2 = t * t;\n let a = 0;\n let b = 0;\n let c = 0;\n let d = 0;\n /* istanbul ignore else @preserve */\n if (order === 2) {\n p = [p[0], p[1], p[2], { x: 0, y: 0 } as DerivedPoint];\n a = mt2;\n b = mt * t * 2;\n c = t2;\n } else if (order === 3) {\n a = mt2 * mt;\n b = mt2 * t * 3;\n c = mt * t2 * 3;\n d = t * t2;\n }\n return {\n x: a * p[0].x + b * p[1].x + c * p[2].x + d * p[3].x,\n y: a * p[0].y + b * p[1].y + c * p[2].y + d * p[3].y,\n t,\n };\n};\n\nconst calculateBezier = (derivativeFn: DeriveCallback, t: number) => {\n const d = derivativeFn(t);\n const l = d.x * d.x + d.y * d.y;\n\n return Math.sqrt(l);\n};\n\nconst bezierLength = (derivativeFn: DeriveCallback) => {\n const z = 0.5;\n const len = Tvalues.length;\n\n let sum = 0;\n\n for (let i = 0, t; i < len; i++) {\n t = z * Tvalues[i] + z;\n sum += Cvalues[i] * calculateBezier(derivativeFn, t);\n }\n return z * sum;\n};\n\n/**\n * Returns the length of CubicBezier / Quad segment.\n * @param curve cubic / quad bezier segment\n */\nconst getBezierLength = (curve: CubicCoordinates | QuadCoordinates) => {\n const points = [] as unknown as CubicPoints | QuadPoints;\n for (let idx = 0, len = curve.length, step = 2; idx < len; idx += step) {\n points.push({\n x: curve[idx],\n y: curve[idx + 1],\n });\n }\n const dpoints = deriveBezier(points);\n return bezierLength((t: number) => {\n return computeBezier(dpoints[0], t);\n });\n};\n\n// Precision for consider cubic polynom as quadratic one\nconst CBEZIER_MINMAX_EPSILON = 0.00000001;\n\n/**\n * Returns the most extreme points in a Quad Bezier segment.\n * @param A an array which consist of X/Y values\n */\n// https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L89\nconst minmaxQ = ([v1, cp, v2]: [number, number, number]) => {\n const min = Math.min(v1, v2);\n const max = Math.max(v1, v2);\n\n /* istanbul ignore next @preserve */\n if (cp >= v1 ? v2 >= cp : v2 <= cp) {\n // if no extremum in ]0,1[\n return [min, max] as PointTuple;\n }\n\n // check if the extremum E is min or max\n const E = (v1 * v2 - cp * cp) / (v1 - 2 * cp + v2);\n return (E < min ? [E, max] : [min, E]) as PointTuple;\n};\n\n/**\n * Returns the most extreme points in a Cubic Bezier segment.\n * @param A an array which consist of X/Y values\n * @see https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L127\n */\nconst minmaxC = ([v1, cp1, cp2, v2]: [number, number, number, number]) => {\n const K = v1 - 3 * cp1 + 3 * cp2 - v2;\n\n // if the polynomial is (almost) quadratic and not cubic\n /* istanbul ignore next @preserve */\n if (Math.abs(K) < CBEZIER_MINMAX_EPSILON) {\n if (v1 === v2 && v1 === cp1) {\n // no curve, point targeting same location\n return [v1, v2] as PointTuple;\n }\n\n return minmaxQ([v1, -0.5 * v1 + 1.5 * cp1, v1 - 3 * cp1 + 3 * cp2]);\n }\n\n // the reduced discriminant of the derivative\n const T = -v1 * cp2 + v1 * v2 - cp1 * cp2 - cp1 * v2 + cp1 * cp1 + cp2 * cp2;\n\n // if the polynomial is monotone in [0,1]\n if (T <= 0) {\n return [Math.min(v1, v2), Math.max(v1, v2)] as PointTuple;\n }\n const S = Math.sqrt(T);\n\n // potential extrema\n let min = Math.min(v1, v2);\n let max = Math.max(v1, v2);\n\n const L = v1 - 2 * cp1 + cp2;\n // check local extrema\n for (let R = (L + S) / K, i = 1; i <= 2; R = (L - S) / K, i++) {\n // istanbul ignore next @preserve\n if (R > 0 && R < 1) {\n // if the extrema is for R in [0,1]\n const Q = v1 * (1 - R) * (1 - R) * (1 - R) +\n cp1 * 3 * (1 - R) * (1 - R) * R + cp2 * 3 * (1 - R) * R * R +\n v2 * R * R * R;\n if (Q < min) {\n min = Q;\n }\n if (Q > max) {\n max = Q;\n }\n }\n }\n\n return [min, max] as PointTuple;\n};\n\nexport {\n bezierLength,\n calculateBezier,\n CBEZIER_MINMAX_EPSILON,\n computeBezier,\n Cvalues,\n deriveBezier,\n getBezierLength,\n minmaxC,\n minmaxQ,\n Tvalues,\n};\n","import { getBezierLength, minmaxC } from \"./bezier\";\nimport { type CubicCoordinates } from \"../types\";\n\n/**\n * Returns a point at a given length of a CubicBezier segment.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param t a [0-1] ratio\n * @returns the point at cubic-bezier segment length\n */\nconst getPointAtCubicSegmentLength = (\n [x1, y1, c1x, c1y, c2x, c2y, x2, y2]: CubicCoordinates,\n t: number,\n) => {\n const t1 = 1 - t;\n return {\n x: t1 ** 3 * x1 + 3 * t1 ** 2 * t * c1x + 3 * t1 * t ** 2 * c2x +\n t ** 3 * x2,\n y: t1 ** 3 * y1 + 3 * t1 ** 2 * t * c1y + 3 * t1 * t ** 2 * c2y +\n t ** 3 * y2,\n };\n};\n\n/**\n * Returns the length of a CubicBezier segment.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the CubicBezier segment length\n */\nconst getCubicLength = (\n x1: number,\n y1: number,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x2: number,\n y2: number,\n) => {\n return getBezierLength([x1, y1, c1x, c1y, c2x, c2y, x2, y2]);\n};\n\n/**\n * Returns the point along a CubicBezier segment at a given distance.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance the distance to look at\n * @returns the point at CubicBezier length\n */\nconst getPointAtCubicLength = (\n x1: number,\n y1: number,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x2: number,\n y2: number,\n distance?: number,\n) => {\n const distanceIsNumber = typeof distance === \"number\";\n let point = { x: x1, y: y1 };\n /* istanbul ignore else @preserve */\n if (distanceIsNumber) {\n const currentLength = getBezierLength([x1, y1, c1x, c1y, c2x, c2y, x2, y2]);\n if (distance <= 0) {\n // first point already defined\n } else if (distance >= currentLength) {\n point = { x: x2, y: y2 };\n } else {\n point = getPointAtCubicSegmentLength(\n [x1, y1, c1x, c1y, c2x, c2y, x2, y2],\n distance / currentLength,\n );\n }\n }\n return point;\n};\n\n/**\n * Returns the boundig box of a CubicBezier segment in the following format:\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the extrema of the CubicBezier segment\n */\nconst getCubicBBox = (\n x1: number,\n y1: number,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x2: number,\n y2: number,\n) => {\n const cxMinMax = minmaxC([x1, c1x, c2x, x2]);\n const cyMinMax = minmaxC([y1, c1y, c2y, y2]);\n\n return [cxMinMax[0], cyMinMax[0], cxMinMax[1], cyMinMax[1]] as [\n number,\n number,\n number,\n number,\n ];\n};\n\nexport {\n getCubicBBox,\n getCubicLength,\n getPointAtCubicLength,\n getPointAtCubicSegmentLength,\n};\n","import { getBezierLength, minmaxQ } from \"./bezier\";\nimport { type QuadCoordinates } from \"../types\";\n\n/**\n * Returns the {x,y} coordinates of a point at a\n * given length of a quadratic-bezier segment.\n *\n * @see https://github.com/substack/point-at-length\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param cx the control point X\n * @param cy the control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param t a [0-1] ratio\n * @returns the requested {x,y} coordinates\n */\nconst getPointAtQuadSegmentLength = (\n [x1, y1, cx, cy, x2, y2]: QuadCoordinates,\n t: number,\n) => {\n const t1 = 1 - t;\n return {\n x: t1 ** 2 * x1 + 2 * t1 * t * cx + t ** 2 * x2,\n y: t1 ** 2 * y1 + 2 * t1 * t * cy + t ** 2 * y2,\n };\n};\n\n/**\n * Returns the length of a QuadraticBezier segment.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param cx the control point X\n * @param cy the control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the QuadraticBezier segment length\n */\nconst getQuadLength = (\n x1: number,\n y1: number,\n cx: number,\n cy: number,\n x2: number,\n y2: number,\n) => {\n return getBezierLength([x1, y1, cx, cy, x2, y2]);\n};\n\n/**\n * Returns the point along a QuadraticBezier segment at a given distance.\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param cx the control point X\n * @param cy the control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @param distance the distance to look at\n * @returns the point at QuadraticBezier length\n */\nconst getPointAtQuadLength = (\n x1: number,\n y1: number,\n cx: number,\n cy: number,\n x2: number,\n y2: number,\n distance?: number,\n) => {\n const distanceIsNumber = typeof distance === \"number\";\n let point = { x: x1, y: y1 };\n\n /* istanbul ignore else @preserve */\n if (distanceIsNumber) {\n const currentLength = getBezierLength([x1, y1, cx, cy, x2, y2]);\n if (distance <= 0) {\n // first point already defined\n } else if (distance >= currentLength) {\n point = { x: x2, y: y2 };\n } else {\n point = getPointAtQuadSegmentLength(\n [x1, y1, cx, cy, x2, y2],\n distance / currentLength,\n );\n }\n }\n return point;\n};\n\n/**\n * Returns the boundig box of a QuadraticBezier segment in the following format:\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param cx the control point X\n * @param cy the control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the extrema of the QuadraticBezier segment\n */\nconst getQuadBBox = (\n x1: number,\n y1: number,\n cx: number,\n cy: number,\n x2: number,\n y2: number,\n) => {\n const cxMinMax = minmaxQ([x1, cx, x2]);\n const cyMinMax = minmaxQ([y1, cy, y2]);\n return [cxMinMax[0], cyMinMax[0], cxMinMax[1], cyMinMax[1]] as [\n number,\n number,\n number,\n number,\n ];\n};\n\nexport {\n getPointAtQuadLength,\n getPointAtQuadSegmentLength,\n getQuadBBox,\n getQuadLength,\n};\n","import distanceSquareRoot from \"./distanceSquareRoot\";\nimport { type PointTuple } from \"../types\";\n\n/**\n * d3-polygon-area\n * https://github.com/d3/d3-polygon\n *\n * Returns the area of a polygon.\n *\n * @param polygon an array of coordinates\n * @returns the polygon area\n */\nconst polygonArea = (polygon: PointTuple[]) => {\n const n = polygon.length;\n let i = -1;\n let a: PointTuple;\n let b = polygon[n - 1];\n let area = 0;\n\n /* eslint-disable-next-line */\n while (++i < n) {\n a = b;\n b = polygon[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n\n return area / 2;\n};\n\n/**\n * d3-polygon-length\n * https://github.com/d3/d3-polygon\n *\n * Returns the perimeter of a polygon.\n *\n * @param polygon an array of coordinates\n * @returns the polygon length\n */\nconst polygonLength = (polygon: PointTuple[]) => {\n return polygon.reduce((length, point, i) => {\n if (i) {\n return length + distanceSquareRoot(polygon[i - 1], point);\n }\n return 0;\n }, 0);\n};\n\nexport { polygonArea, polygonLength };\n","const DISTANCE_EPSILON = 0.00001;\n\nexport default DISTANCE_EPSILON;\n","import normalizeSegment from \"./normalizeSegment\";\nimport type { NormalArray, PathArray } from \"../types\";\nimport iterate from \"./iterate\";\nimport parsePathString from \"../parser/parsePathString\";\nimport paramsParser from \"../parser/paramsParser\";\n\n/**\n * Normalizes a `pathArray` object for further processing:\n * * convert segments to absolute values\n * * convert shorthand path commands to their non-shorthand notation\n *\n * @param pathInput the string to be parsed or 'pathArray'\n * @returns the normalized `pathArray`\n */\nconst normalizePath = (pathInput: string | PathArray) => {\n const path = parsePathString(pathInput);\n const params = { ...paramsParser };\n\n return iterate(path, (seg, _, lastX, lastY) => {\n params.x = lastX;\n params.y = lastY;\n const result = normalizeSegment(seg, params);\n\n const seglen = result.length;\n params.x1 = +result[seglen - 2];\n params.y1 = +result[seglen - 1];\n params.x2 = +result[seglen - 4] || params.x1;\n params.y2 = +result[seglen - 3] || params.y1;\n\n return result;\n });\n};\nexport default normalizePath;\n","import DISTANCE_EPSILON from \"./distanceEpsilon\";\nimport type { MSegment, PathArray, PointTuple } from \"../types\";\nimport iterate from \"../process/iterate\";\nimport { getLineLength, getPointAtLineLength } from \"../math/lineTools\";\nimport { getArcLength, getPointAtArcLength } from \"../math/arcTools\";\nimport { getCubicLength, getPointAtCubicLength } from \"../math/cubicTools\";\nimport { getPointAtQuadLength, getQuadLength } from \"../math/quadTools\";\nimport normalizePath from \"../process/normalizePath\";\n\n/**\n * Returns [x,y] coordinates of a point at a given length of a shape.\n *\n * @param pathInput the `pathArray` to look into\n * @param distance the length of the shape to look at\n * @returns the requested {x, y} point coordinates\n */\nconst getPointAtLength = (pathInput: string | PathArray, distance?: number) => {\n const path = normalizePath(pathInput);\n let isM = false;\n let data = [] as number[];\n let pathCommand = \"M\";\n let x = 0;\n let y = 0;\n let [mx, my] = path[0].slice(1) as PointTuple;\n const distanceIsNumber = typeof distance === \"number\";\n let point = { x: mx, y: my };\n let length = 0;\n let POINT = point;\n let totalLength = 0;\n\n if (!distanceIsNumber || distance < DISTANCE_EPSILON) return point;\n\n // for (let i = 0; i < pathLen; i += 1) {\n iterate(path, (seg, _, lastX, lastY) => {\n [pathCommand] = seg;\n isM = pathCommand === \"M\";\n data = !isM ? [lastX, lastY].concat(seg.slice(1) as number[]) : data;\n\n // this segment is always ZERO\n /* istanbul ignore else @preserve */\n if (isM) {\n // remember mx, my for Z\n [, mx, my] = seg as MSegment;\n point = { x: mx, y: my };\n length = 0;\n } else if (pathCommand === \"L\") {\n point = getPointAtLineLength(\n data[0],\n data[1],\n data[2],\n data[3],\n distance - totalLength,\n );\n length = getLineLength(data[0], data[1], data[2], data[3]);\n } else if (pathCommand === \"A\") {\n point = getPointAtArcLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n data[6],\n data[7],\n data[8],\n distance - totalLength,\n );\n length = getArcLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n data[6],\n data[7],\n data[8],\n );\n } else if (pathCommand === \"C\") {\n point = getPointAtCubicLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n data[6],\n data[7],\n distance - totalLength,\n );\n length = getCubicLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n data[6],\n data[7],\n );\n } else if (pathCommand === \"Q\") {\n point = getPointAtQuadLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n distance - totalLength,\n );\n length = getQuadLength(\n data[0],\n data[1],\n data[2],\n data[3],\n data[4],\n data[5],\n );\n } else if (pathCommand === \"Z\") {\n data = [lastX, lastY, mx, my];\n point = { x: mx, y: my };\n\n length = getLineLength(data[0], data[1], data[2], data[3]);\n }\n\n [x, y] = data.slice(-2);\n\n if (totalLength < distance) {\n POINT = point;\n } else {\n // totalLength >= distance\n // stop right here\n // stop iterator now!\n return false;\n }\n\n totalLength += length;\n return;\n });\n\n // native `getPointAtLength` behavior when the given distance\n // is higher than total length\n if (distance > totalLength - DISTANCE_EPSILON) {\n return { x, y };\n }\n\n return POINT;\n};\n\nexport default getPointAtLength;\n","import type { LSegment, MSegment, PathArray, PointTuple } from \"../types\";\nimport { getLineLength } from \"../math/lineTools\";\nimport { getArcLength } from \"../math/arcTools\";\nimport { getCubicLength } from \"../math/cubicTools\";\nimport { getQuadLength } from \"../math/quadTools\";\nimport iterate from \"../process/iterate\";\nimport parsePathString from \"../parser/parsePathString\";\nimport absolutizeSegment from \"../process/absolutizeSegment\";\n\n/**\n * Returns the shape total length, or the equivalent to `shape.getTotalLength()`.\n *\n * @param pathInput the target `pathArray`\n * @returns the shape total length\n */\nconst getTotalLength = (pathInput: string | PathArray) => {\n const path = parsePathString(pathInput);\n let paramX1 = 0;\n let paramY1 = 0;\n let paramX2 = 0;\n let paramY2 = 0;\n let paramQX = 0;\n let paramQY = 0;\n let pathCommand = \"M\";\n let mx = 0;\n let my = 0;\n let totalLength = 0;\n\n iterate(path, (seg, index, lastX, lastY) => {\n [pathCommand] = seg;\n const absCommand = pathCommand.toUpperCase();\n const isRelative = absCommand !== pathCommand;\n const absoluteSegment = isRelative\n ? absolutizeSegment(seg, index, lastX, lastY)\n : (seg.slice(0) as typeof seg);\n\n const normalSegment = absCommand === \"V\"\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\n : absCommand === \"H\"\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\n : absoluteSegment;\n [pathCommand] = normalSegment;\n\n if (!\"TQ\".includes(absCommand)) {\n // optional but good to be cautious\n paramQX = 0;\n paramQY = 0;\n }\n\n // this segment is always ZERO\n /* istanbul ignore else @preserve */\n if (pathCommand === \"M\") {\n // remember mx, my for Z\n [, mx, my] = normalSegment as MSegment;\n } else if (pathCommand === \"L\") {\n totalLength += getLineLength(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n );\n } else if (pathCommand === \"A\") {\n totalLength += getArcLength(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n normalSegment[5] as number,\n normalSegment[6] as number,\n normalSegment[7] as number,\n );\n } else if (pathCommand === \"S\") {\n const cp1x = paramX1 * 2 - paramX2;\n const cp1y = paramY1 * 2 - paramY2;\n\n totalLength += getCubicLength(\n lastX,\n lastY,\n cp1x,\n cp1y,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n );\n } else if (pathCommand === \"C\") {\n totalLength += getCubicLength(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n normalSegment[5] as number,\n normalSegment[6] as number,\n );\n } else if (pathCommand === \"T\") {\n paramQX = paramX1 * 2 - paramQX;\n paramQY = paramY1 * 2 - paramQY;\n totalLength += getQuadLength(\n lastX,\n lastY,\n paramQX,\n paramQY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n );\n } else if (pathCommand === \"Q\") {\n paramQX = normalSegment[1] as number;\n paramQY = normalSegment[2] as number;\n totalLength += getQuadLength(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n );\n } else if (pathCommand === \"Z\") {\n totalLength += getLineLength(lastX, lastY, mx, my);\n }\n\n // update params\n [paramX1, paramY1] = pathCommand === \"Z\"\n ? [mx, my]\n : (normalSegment.slice(-2) as PointTuple);\n [paramX2, paramY2] = pathCommand === \"C\"\n ? ([normalSegment[3], normalSegment[4]] as PointTuple)\n : pathCommand === \"S\"\n ? ([normalSegment[1], normalSegment[2]] as PointTuple)\n : [paramX1, paramY1];\n });\n\n return totalLength;\n};\n\nexport default getTotalLength;\n","import type { PathArray, PathSegment } from \"../types\";\nimport type { SegmentProperties } from \"../interface\";\nimport parsePathString from \"../parser/parsePathString\";\nimport getTotalLength from \"./getTotalLength\";\n\n/**\n * Returns the segment, its index and length as well as\n * the length to that segment at a given length in a path.\n *\n * @param pathInput target `pathArray`\n * @param distance the given length\n * @returns the requested properties\n */\nconst getPropertiesAtLength = (\n pathInput: string | PathArray,\n distance?: number,\n): SegmentProperties => {\n const pathArray = parsePathString(pathInput);\n\n let pathTemp = pathArray.slice(0) as PathArray;\n let pathLength = getTotalLength(pathTemp);\n let index = pathTemp.length - 1;\n let lengthAtSegment = 0;\n let length = 0;\n let segment = pathArray[0] as PathSegment;\n\n // If the path is empty, return 0.\n if (index <= 0 || !distance || !Number.isFinite(distance)) {\n return {\n segment,\n index: 0,\n length,\n lengthAtSegment,\n };\n }\n\n if (distance >= pathLength) {\n pathTemp = pathArray.slice(0, -1) as PathArray;\n lengthAtSegment = getTotalLength(pathTemp);\n length = pathLength - lengthAtSegment;\n segment = pathArray[index];\n return {\n segment,\n index,\n length,\n lengthAtSegment,\n };\n }\n\n const segments = [] as SegmentProperties[];\n while (index > 0) {\n segment = pathTemp[index];\n pathTemp = pathTemp.slice(0, -1) as PathArray;\n lengthAtSegment = getTotalLength(pathTemp);\n length = pathLength - lengthAtSegment;\n pathLength = lengthAtSegment;\n\n segments.push({\n segment,\n index,\n length,\n lengthAtSegment,\n });\n index -= 1;\n }\n\n return segments.find(({ lengthAtSegment: l }) =>\n l <= distance\n ) as SegmentProperties;\n};\n\nexport default getPropertiesAtLength;\n","import type { PathArray, Point } from \"../types\";\nimport type { PointProperties } from \"../interface\";\nimport getPointAtLength from \"./getPointAtLength\";\nimport getPropertiesAtLength from \"./getPropertiesAtLength\";\nimport getTotalLength from \"./getTotalLength\";\nimport parsePathString from \"../parser/parsePathString\";\nimport normalizePath from \"../process/normalizePath\";\n\n/**\n * Returns the point and segment in path closest to a given point as well as\n * the distance to the path stroke.\n *\n * @see https://bl.ocks.org/mbostock/8027637\n *\n * @param pathInput target `pathArray`\n * @param point the given point\n * @returns the requested properties\n */\nconst getPropertiesAtPoint = (\n pathInput: string | PathArray,\n point: Point,\n): PointProperties => {\n const path = parsePathString(pathInput);\n const normalPath = normalizePath(path);\n const pathLength = getTotalLength(normalPath);\n const distanceTo = (p: Point) => {\n const dx = p.x - point.x;\n const dy = p.y - point.y;\n return dx * dx + dy * dy;\n };\n let precision = 8;\n let scan: Point;\n let closest = { x: 0, y: 0 }; // make TS happy\n let scanDistance = 0;\n let bestLength = 0;\n let bestDistance = Infinity;\n\n // linear scan for coarse approximation\n for (let scanLength = 0; scanLength <= pathLength; scanLength += precision) {\n scan = getPointAtLength(normalPath, scanLength);\n scanDistance = distanceTo(scan);\n\n if (scanDistance < bestDistance) {\n closest = scan;\n bestLength = scanLength;\n bestDistance = scanDistance;\n }\n }\n\n // binary search for precise estimate\n precision /= 2;\n let before: { x: number; y: number };\n let after: { x: number; y: number };\n let beforeLength = 0;\n let afterLength = 0;\n let beforeDistance = 0;\n let afterDistance = 0;\n\n while (precision > 0.000001) {\n beforeLength = bestLength - precision;\n before = getPointAtLength(normalPath, beforeLength);\n beforeDistance = distanceTo(before);\n afterLength = bestLength + precision;\n after = getPointAtLength(normalPath, afterLength);\n afterDistance = distanceTo(after);\n\n if (beforeLength >= 0 && beforeDistance < bestDistance) {\n closest = before;\n bestLength = beforeLength;\n bestDistance = beforeDistance;\n } else if (afterLength <= pathLength && afterDistance < bestDistance) {\n closest = after;\n bestLength = afterLength;\n bestDistance = afterDistance;\n } else {\n precision /= 2;\n }\n if (precision < 0.00001) break;\n }\n\n const segment = getPropertiesAtLength(path, bestLength);\n const distance = Math.sqrt(bestDistance);\n\n return { closest, distance, segment };\n};\n\nexport default getPropertiesAtPoint;\n","import type { PathArray } from \"../types\";\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\n\n/**\n * Returns the point in path closest to a given point.\n *\n * @param pathInput target `pathArray`\n * @param point the given point\n * @returns the best match\n */\nconst getClosestPoint = (\n pathInput: string | PathArray,\n point: { x: number; y: number },\n) => {\n return getPropertiesAtPoint(pathInput, point).closest;\n};\n\nexport default getClosestPoint;\n","import pathToCurve from \"../convert/pathToCurve\";\nimport type { PathArray, PointTuple } from \"../types\";\n\n/**\n * Returns the area of a single cubic-bezier segment.\n *\n * http://objectmix.com/graphics/133553-area-closed-bezier-curve.html\n *\n * @param x1 the starting point X\n * @param y1 the starting point Y\n * @param c1x the first control point X\n * @param c1y the first control point Y\n * @param c2x the second control point X\n * @param c2y the second control point Y\n * @param x2 the ending point X\n * @param y2 the ending point Y\n * @returns the area of the cubic-bezier segment\n */\nconst getCubicSegArea = (\n x1: number,\n y1: number,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x2: number,\n y2: number,\n) => {\n return (\n (3 *\n ((y2 - y1) * (c1x + c2x) -\n (x2 - x1) * (c1y + c2y) +\n c1y * (x1 - c2x) -\n c1x * (y1 - c2y) +\n y2 * (c2x + x1 / 3) -\n x2 * (c2y + y1 / 3))) /\n 20\n );\n};\n\n/**\n * Returns the area of a shape.\n *\n * @author Jürg Lehni & Jonathan Puckey\n *\n * @see https://github.com/paperjs/paper.js/blob/develop/src/path/Path.js\n *\n * @param path the shape `pathArray`\n * @returns the length of the cubic-bezier segment\n */\nconst getPathArea = (path: PathArray) => {\n let x = 0;\n let y = 0;\n let len = 0;\n\n return pathToCurve(path)\n .map((seg) => {\n switch (seg[0]) {\n case \"M\":\n [, x, y] = seg;\n return 0;\n default:\n len = getCubicSegArea(\n x,\n y,\n seg[1],\n seg[2],\n seg[3],\n seg[4],\n seg[5],\n seg[6],\n );\n [x, y] = seg.slice(-2) as PointTuple;\n return len;\n }\n })\n .reduce((a, b) => a + b, 0);\n};\nexport default getPathArea;\n","import getPathArea from \"./getPathArea\";\nimport pathToCurve from \"../convert/pathToCurve\";\nimport type { PathArray } from \"../types\";\n\n/**\n * Check if a path is drawn clockwise and returns true if so,\n * false otherwise.\n *\n * @param path the path string or `pathArray`\n * @returns true when clockwise or false if not\n */\nconst getDrawDirection = (path: string | PathArray) => {\n return getPathArea(pathToCurve(path)) >= 0;\n};\n\nexport default getDrawDirection;\n","import iterate from \"../process/iterate\";\nimport { PathBBox } from \"../interface\";\nimport { LSegment, MSegment, PathArray, PointTuple } from \"../types\";\nimport { getLineBBox } from \"../math/lineTools\";\nimport { getArcBBox } from \"../math/arcTools\";\nimport { getCubicBBox } from \"../math/cubicTools\";\nimport { getQuadBBox } from \"../math/quadTools\";\nimport parsePathString from \"../parser/parsePathString\";\nimport absolutizeSegment from \"../process/absolutizeSegment\";\n\nconst getPathBBox = (pathInput: PathArray | string) => {\n if (!pathInput) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n x2: 0,\n y2: 0,\n cx: 0,\n cy: 0,\n cz: 0,\n };\n }\n\n const path = parsePathString(pathInput);\n let pathCommand = \"M\";\n let mx = 0;\n let my = 0;\n const { max, min } = Math;\n let xMin = Infinity;\n let yMin = Infinity;\n let xMax = -Infinity;\n let yMax = -Infinity;\n let minX = 0;\n let minY = 0;\n let maxX = 0;\n let maxY = 0;\n let paramX1 = 0;\n let paramY1 = 0;\n let paramX2 = 0;\n let paramY2 = 0;\n let paramQX = 0;\n let paramQY = 0;\n\n iterate(path, (seg, index, lastX, lastY) => {\n [pathCommand] = seg;\n const absCommand = pathCommand.toUpperCase();\n const isRelative = absCommand !== pathCommand;\n const absoluteSegment = isRelative\n ? absolutizeSegment(seg, index, lastX, lastY)\n : (seg.slice(0) as typeof seg);\n\n const normalSegment = absCommand === \"V\"\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\n : absCommand === \"H\"\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\n : absoluteSegment;\n\n [pathCommand] = normalSegment;\n\n if (!\"TQ\".includes(absCommand)) {\n // optional but good to be cautious\n paramQX = 0;\n paramQY = 0;\n }\n\n // this segment is always ZERO\n /* istanbul ignore else @preserve */\n if (pathCommand === \"M\") {\n [, mx, my] = normalSegment as MSegment;\n minX = mx;\n minY = my;\n maxX = mx;\n maxY = my;\n } else if (pathCommand === \"L\") {\n [minX, minY, maxX, maxY] = getLineBBox(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n );\n } else if (pathCommand === \"A\") {\n [minX, minY, maxX, maxY] = getArcBBox(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n normalSegment[5] as number,\n normalSegment[6] as number,\n normalSegment[7] as number,\n );\n } else if (pathCommand === \"S\") {\n const cp1x = paramX1 * 2 - paramX2;\n const cp1y = paramY1 * 2 - paramY2;\n\n [minX, minY, maxX, maxY] = getCubicBBox(\n lastX,\n lastY,\n cp1x,\n cp1y,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n );\n } else if (pathCommand === \"C\") {\n [minX, minY, maxX, maxY] = getCubicBBox(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n normalSegment[5] as number,\n normalSegment[6] as number,\n );\n } else if (pathCommand === \"T\") {\n paramQX = paramX1 * 2 - paramQX;\n paramQY = paramY1 * 2 - paramQY;\n [minX, minY, maxX, maxY] = getQuadBBox(\n lastX,\n lastY,\n paramQX,\n paramQY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n );\n } else if (pathCommand === \"Q\") {\n paramQX = normalSegment[1] as number;\n paramQY = normalSegment[2] as number;\n [minX, minY, maxX, maxY] = getQuadBBox(\n lastX,\n lastY,\n normalSegment[1] as number,\n normalSegment[2] as number,\n normalSegment[3] as number,\n normalSegment[4] as number,\n );\n } else if (pathCommand === \"Z\") {\n [minX, minY, maxX, maxY] = getLineBBox(lastX, lastY, mx, my);\n }\n xMin = min(minX, xMin);\n yMin = min(minY, yMin);\n xMax = max(maxX, xMax);\n yMax = max(maxY, yMax);\n\n // update params\n [paramX1, paramY1] = pathCommand === \"Z\"\n ? [mx, my]\n : (normalSegment.slice(-2) as PointTuple);\n [paramX2, paramY2] = pathCommand === \"C\"\n ? ([normalSegment[3], normalSegment[4]] as PointTuple)\n : pathCommand === \"S\"\n ? ([normalSegment[1], normalSegment[2]] as PointTuple)\n : [paramX1, paramY1];\n });\n\n const width = xMax - xMin;\n const height = yMax - yMin;\n\n return {\n width,\n height,\n x: xMin,\n y: yMin,\n x2: xMax,\n y2: yMax,\n cx: xMin + width / 2,\n cy: yMin + height / 2,\n // an estimated guess\n cz: Math.max(width, height) + Math.min(width, height) / 2,\n } satisfies PathBBox;\n};\n\nexport default getPathBBox;\n","import type { PathArray, PathSegment } from \"../types\";\nimport getPropertiesAtLength from \"./getPropertiesAtLength\";\n\n/**\n * Returns the segment at a given length.\n *\n * @param pathInput the target `pathArray`\n * @param distance the distance in path to look at\n * @returns the requested segment\n */\nconst getSegmentAtLength = (\n pathInput: string | PathArray,\n distance?: number,\n): PathSegment | undefined => {\n return getPropertiesAtLength(pathInput, distance).segment;\n};\n\nexport default getSegmentAtLength;\n","import type { SegmentProperties } from \"../interface\";\nimport type { PathArray } from \"../types\";\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\n\n/**\n * Returns the path segment which contains a given point.\n *\n * @param path the `pathArray` to look into\n * @param point the point of the shape to look for\n * @returns the requested segment\n */\nconst getSegmentOfPoint = (\n path: string | PathArray,\n point: { x: number; y: number },\n): SegmentProperties | undefined => {\n return getPropertiesAtPoint(path, point).segment;\n};\nexport default getSegmentOfPoint;\n","import type { PathArray, PathSegment, RelativeCommand } from \"../types\";\nimport paramsCount from \"../parser/paramsCount\";\n\n/**\n * Iterates an array to check if it's an actual `pathArray`.\n *\n * @param path the `pathArray` to be checked\n * @returns iteration result\n */\nconst isPathArray = (path: unknown): path is PathArray => {\n return (\n Array.isArray(path) &&\n path.every((seg: PathSegment) => {\n const lk = seg[0].toLowerCase() as RelativeCommand;\n return (\n paramsCount[lk] === seg.length - 1 &&\n \"achlmqstvz\".includes(lk) &&\n (seg.slice(1) as unknown[]).every(Number.isFinite)\n );\n }) &&\n path.length > 0\n );\n};\nexport default isPathArray;\n","import type { AbsoluteArray } from \"../types\";\nimport isPathArray from \"./isPathArray\";\n\n/**\n * Iterates an array to check if it's a `pathArray`\n * with all absolute values.\n *\n * @param path the `pathArray` to be checked\n * @returns iteration result\n */\nconst isAbsoluteArray = (path: unknown): path is AbsoluteArray => {\n return (\n isPathArray(path) &&\n // `isPathArray` also checks if it's `Array`\n path.every(([x]) => x === x.toUpperCase())\n );\n};\nexport default isAbsoluteArray;\n","import type { NormalArray } from \"../types\";\nimport isAbsoluteArray from \"./isAbsoluteArray\";\n\n/**\n * Iterates an array to check if it's a `pathArray`\n * with all segments are in non-shorthand notation\n * with absolute values.\n *\n * @param {string | SVGPath.pathArray} path the `pathArray` to be checked\n * @returns {boolean} iteration result\n */\nconst isNormalizedArray = (path: unknown): path is NormalArray => {\n // `isAbsoluteArray` also checks if it's `Array`\n return isAbsoluteArray(path) && path.every(([pc]) => \"ACLMQZ\".includes(pc));\n};\nexport default isNormalizedArray;\n","import { CurveArray } from \"../types\";\nimport isNormalizedArray from \"./isNormalizedArray\";\n\n/**\n * Iterates an array to check if it's a `pathArray`\n * with all C (cubic bezier) segments.\n *\n * @param path the `Array` to be checked\n * @returns iteration result\n */\nconst isCurveArray = (path: unknown): path is CurveArray => {\n // `isPathArray` also checks if it's `Array`\n return isNormalizedArray(path) && path.every(([pc]) => \"MC\".includes(pc));\n};\nexport default isCurveArray;\n","import type { PathArray } from \"../types\";\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\nimport DISTANCE_EPSILON from \"./distanceEpsilon\";\n\n/**\n * Checks if a given point is in the stroke of a path.\n *\n * @param pathInput target path\n * @param point the given `{x,y}` point\n * @returns the query result\n */\nconst isPointInStroke = (\n pathInput: string | PathArray,\n point: { x: number; y: number },\n) => {\n const { distance } = getPropertiesAtPoint(pathInput, point);\n return Math.abs(distance) < DISTANCE_EPSILON; // 0.01 might be more permissive\n};\nexport default isPointInStroke;\n","import type { RelativeArray } from \"../types\";\nimport isPathArray from \"./isPathArray\";\n\n/**\n * Iterates an array to check if it's a `pathArray`\n * with relative values.\n *\n * @param path the `pathArray` to be checked\n * @returns iteration result\n */\nconst isRelativeArray = (path: unknown): path is RelativeArray => {\n return (\n isPathArray(path) &&\n // `isPathArray` checks if it's `Array`\n path.slice(1).every(([pc]) => pc === pc.toLowerCase())\n );\n};\nexport default isRelativeArray;\n","import scanSegment from \"../parser/scanSegment\";\nimport skipSpaces from \"../parser/skipSpaces\";\nimport PathParser from \"../parser/pathParser\";\n\n/**\n * Parses a path string value to determine its validity\n * then returns true if it's valid or false otherwise.\n *\n * @param pathString the path string to be parsed\n * @returns the path string validity\n */\nconst isValidPath = (pathString: string) => {\n if (typeof pathString !== \"string\" || !pathString.length) {\n return false;\n }\n\n const path = new PathParser(pathString);\n\n skipSpaces(path);\n\n while (path.index < path.max && !path.err.length) {\n scanSegment(path);\n }\n\n return !path.err.length && \"mM\".includes(path.segments[0][0]);\n};\nexport default isValidPath;\n","import type { ShapeParams } from \"../interface\";\n\n/**\n * Supported shapes and their specific parameters.\n */\nconst shapeParams: ShapeParams = {\n line: [\"x1\", \"y1\", \"x2\", \"y2\"],\n circle: [\"cx\", \"cy\", \"r\"],\n ellipse: [\"cx\", \"cy\", \"rx\", \"ry\"],\n rect: [\"width\", \"height\", \"x\", \"y\", \"rx\", \"ry\"],\n polygon: [\"points\"],\n polyline: [\"points\"],\n glyph: [\"d\"],\n};\n\nexport default shapeParams;\n","const isElement = (node?: unknown): node is Element =>\n node !== undefined && node !== null &&\n typeof node === \"object\" &&\n (node as Node).nodeType === 1; // ELEMENT_NODE\n\nexport default isElement;\n","import type {\n CircleAttr,\n EllipseAttr,\n GlyphAttr,\n LineAttr,\n PolyAttr,\n RectAttr,\n ShapeParams,\n} from \"../interface\";\nimport type { PathArray, PathSegment, ShapeOps, ShapeTypes } from \"../types\";\nimport error from \"../parser/error\";\nimport parsePathString from \"../parser/parsePathString\";\nimport shapeParams from \"./shapeParams\";\nimport isPathArray from \"./isPathArray\";\nimport isElement from \"./isElement\";\n\n/**\n * Returns a new `pathArray` from line attributes.\n *\n * @param attr shape configuration\n * @returns a new line `pathArray`\n */\nexport const getLinePath = (attr: LineAttr): PathArray => {\n let { x1, y1, x2, y2 } = attr;\n [x1, y1, x2, y2] = [x1, y1, x2, y2].map((a) => +a);\n return [\n [\"M\", x1, y1],\n [\"L\", x2, y2],\n ];\n};\n\n/**\n * Returns a new `pathArray` like from polyline/polygon attributes.\n *\n * @param attr shape configuration\n * @return a new polygon/polyline `pathArray`\n */\nexport const getPolyPath = (attr: PolyAttr): PathArray => {\n const pathArray = [] as PathSegment[];\n const points = (attr.points || \"\")\n .trim()\n .split(/[\\s|,]/)\n .map((a) => +a);\n\n let index = 0;\n while (index < points.length) {\n pathArray.push([index ? \"L\" : \"M\", points[index], points[index + 1]]);\n index += 2;\n }\n\n return (attr.type === \"polygon\"\n ? [...pathArray, [\"z\"]]\n : pathArray) as PathArray;\n};\n\n/**\n * Returns a new `pathArray` from circle attributes.\n *\n * @param attr shape configuration\n * @return a circle `pathArray`\n */\nexport const getCirclePath = (attr: CircleAttr): PathArray => {\n let { cx, cy, r } = attr;\n [cx, cy, r] = [cx, cy, r].map((a) => +a);\n\n return [\n [\"M\", cx - r, cy],\n [\"a\", r, r, 0, 1, 0, 2 * r, 0],\n [\"a\", r, r, 0, 1, 0, -2 * r, 0],\n ];\n};\n\n/**\n * Returns a new `pathArray` from ellipse attributes.\n *\n * @param attr shape configuration\n * @return an ellipse `pathArray`\n */\nexport const getEllipsePath = (attr: EllipseAttr): PathArray => {\n let { cx, cy } = attr;\n let rx = attr.rx || 0;\n let ry = attr.ry || rx;\n [cx, cy, rx, ry] = [cx, cy, rx, ry].map((a) => +a);\n\n return [\n [\"M\", cx - rx, cy],\n [\"a\", rx, ry, 0, 1, 0, 2 * rx, 0],\n [\"a\", rx, ry, 0, 1, 0, -2 * rx, 0],\n ];\n};\n\n/**\n * Returns a new `pathArray` like from rect attributes.\n *\n * @param attr object with properties above\n * @return a new `pathArray` from `` attributes\n */\nexport const getRectanglePath = (attr: RectAttr): PathArray => {\n const x = +attr.x || 0;\n const y = +attr.y || 0;\n const w = +attr.width;\n const h = +attr.height;\n let rx = +(attr.rx || 0);\n let ry = +(attr.ry || rx);\n\n // Validity checks from http://www.w3.org/TR/SVG/shapes.html#RectElement:\n if (rx || ry) {\n // rx = !rx ? ry : rx;\n // ry = !ry ? rx : ry;\n\n /* istanbul ignore else @preserve */\n if (rx * 2 > w) rx -= (rx * 2 - w) / 2;\n /* istanbul ignore else @preserve */\n if (ry * 2 > h) ry -= (ry * 2 - h) / 2;\n\n return [\n [\"M\", x + rx, y],\n [\"h\", w - rx * 2],\n [\"s\", rx, 0, rx, ry],\n [\"v\", h - ry * 2],\n [\"s\", 0, ry, -rx, ry],\n [\"h\", -w + rx * 2],\n [\"s\", -rx, 0, -rx, -ry],\n [\"v\", -h + ry * 2],\n [\"s\", 0, -ry, rx, -ry],\n ];\n }\n\n return [[\"M\", x, y], [\"h\", w], [\"v\", h], [\"H\", x], [\"Z\"]];\n};\n\n/**\n * Returns a new `pathArray` created from attributes of a ``, ``,\n * ``, ``, ``, ``, or ``.\n *\n * It can also work with an options object, see the type below\n * @see ShapeOps\n *\n * @param element target shape\n * @return the newly created `` element\n */\nconst shapeToPathArray = (\n element: ShapeTypes | ShapeOps,\n) => {\n const supportedShapes = Object.keys(shapeParams) as (keyof ShapeParams)[];\n const targetIsElement = isElement(element);\n const tagName = targetIsElement ? element.tagName : null;\n\n if (tagName && [...supportedShapes, \"path\"].every((s) => tagName !== s)) {\n throw TypeError(`${error}: \"${tagName}\" is not SVGElement`);\n }\n\n const type =\n (targetIsElement ? tagName : (element as ShapeOps).type) as ShapeOps[\n \"type\"\n ];\n const shapeAttrs = shapeParams[type] as string[];\n const config = { type } as Record;\n\n if (targetIsElement) {\n shapeAttrs.forEach((p) => {\n config[p] = element.getAttribute(p) as string;\n });\n } else {\n Object.assign(config, element);\n }\n\n // set d\n let pathArray = [] as unknown as PathArray;\n\n /* istanbul ignore else */\n if (type === \"circle\") {\n pathArray = getCirclePath(config as unknown as CircleAttr);\n } else if (type === \"ellipse\") {\n pathArray = getEllipsePath(config as unknown as EllipseAttr);\n } else if ([\"polyline\", \"polygon\"].includes(type)) {\n pathArray = getPolyPath(config as unknown as PolyAttr);\n } else if (type === \"rect\") {\n pathArray = getRectanglePath(config as unknown as RectAttr);\n } else if (type === \"line\") {\n pathArray = getLinePath(config as unknown as LineAttr);\n } else if ([\"glyph\", \"path\"].includes(type)) {\n pathArray = parsePathString(\n targetIsElement\n ? element.getAttribute(\"d\") || /* istanbul ignore next @preserve */ \"\"\n : (element as GlyphAttr).d || \"\",\n );\n }\n\n // replace target element\n if (isPathArray(pathArray) && pathArray.length) {\n return pathArray;\n }\n return false;\n};\nexport default shapeToPathArray;\n","import type { ShapeParams } from \"../interface\";\nimport type { ShapeOps, ShapeTypes } from \"../types\";\nimport pathToString from \"../convert/pathToString\";\nimport defaultOptions from \"../options/options\";\nimport error from \"../parser/error\";\nimport isValidPath from \"./isValidPath\";\nimport isElement from \"./isElement\";\nimport shapeToPathArray from \"./shapeToPathArray\";\nimport shapeParams from \"./shapeParams\";\n\n/**\n * Returns a new `` element created from attributes of a ``, ``,\n * ``, ``, ``, `` or ``. If `replace` parameter\n * is `true`, it will replace the target. The default `ownerDocument` is your current\n * `document` browser page, if you want to use in server-side using `jsdom`, you can\n * pass the `jsdom` `document` to `ownDocument`.\n *\n * It can also work with an options object, see the type below\n * @see ShapeOps\n *\n * The newly created `` element keeps all non-specific\n * attributes like `class`, `fill`, etc.\n *\n * @param element target shape\n * @param replace option to replace target\n * @param ownerDocument document for create element\n * @return the newly created `` element\n */\nconst shapeToPath = (\n element: ShapeTypes | ShapeOps,\n replace?: boolean,\n ownerDocument?: Document,\n): SVGPathElement | false => {\n const doc = ownerDocument || document;\n const supportedShapes = Object.keys(shapeParams) as (keyof ShapeParams)[];\n const targetIsElement = isElement(element);\n const tagName = targetIsElement ? element.tagName : null;\n\n if (tagName === \"path\") {\n throw TypeError(`${error}: \"${tagName}\" is already SVGPathElement`);\n }\n if (tagName && supportedShapes.every((s) => tagName !== s)) {\n throw TypeError(`${error}: \"${tagName}\" is not SVGElement`);\n }\n\n const path = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n const type =\n (targetIsElement ? tagName : (element as ShapeOps).type) as ShapeOps[\n \"type\"\n ];\n const shapeAttrs = shapeParams[type] as string[];\n const config = { type } as Record;\n\n // set d\n const round = defaultOptions.round as number;\n const pathArray = shapeToPathArray(element);\n const description = pathArray && pathArray.length\n ? pathToString(pathArray, round)\n : \"\";\n\n if (targetIsElement) {\n shapeAttrs.forEach((p) => {\n config[p] = element.getAttribute(p) as string;\n });\n // set no-specific shape attributes: fill, stroke, etc\n Object.values(element.attributes).forEach(({ name, value }) => {\n if (!shapeAttrs.includes(name)) path.setAttribute(name, value);\n });\n } else {\n Object.assign(config, element);\n // set no-specific shape attributes: fill, stroke, etc\n Object.keys(config).forEach((k) => {\n if (!shapeAttrs.includes(k) && k !== \"type\") {\n path.setAttribute(\n k.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`),\n config[k],\n );\n }\n });\n }\n\n // replace target element\n if (isValidPath(description)) {\n path.setAttribute(\"d\", description);\n if (replace && targetIsElement) {\n element.before(path, element);\n element.remove();\n }\n return path;\n }\n return false;\n};\n\nexport default shapeToPath;\n","import CSSMatrix from \"@thednp/dommatrix\";\n// import type { TransformObject } from '../interface';\nimport type { TransformObjectValues } from \"../types\";\n\n/**\n * Returns a transformation matrix to apply to `` elements.\n *\n * @see TransformObjectValues\n *\n * @param transform the `transformObject`\n * @returns a new transformation matrix\n */\nconst getSVGMatrix = (transform: TransformObjectValues): CSSMatrix => {\n let matrix = new CSSMatrix();\n const { origin } = transform;\n const [originX, originY] = origin as [number, number, number];\n const { translate } = transform;\n const { rotate } = transform;\n const { skew } = transform;\n const { scale } = transform;\n\n // set translate\n if (\n Array.isArray(translate) &&\n translate.length >= 2 &&\n translate.every((x) => !Number.isNaN(+x)) &&\n translate.some((x) => x !== 0)\n ) {\n matrix = matrix.translate(...(translate as [number, number, number?]));\n } else if (typeof translate === \"number\" && !Number.isNaN(translate)) {\n matrix = matrix.translate(translate);\n }\n\n if (rotate || skew || scale) {\n // set SVG transform-origin, always defined\n matrix = matrix.translate(originX, originY);\n\n // set rotation\n if (\n Array.isArray(rotate) &&\n rotate.length >= 2 &&\n rotate.every((x) => !Number.isNaN(+x)) &&\n rotate.some((x) => x !== 0)\n ) {\n matrix = matrix.rotate(...(rotate as [number, number, number?]));\n } else if (typeof rotate === \"number\" && !Number.isNaN(rotate)) {\n matrix = matrix.rotate(rotate);\n }\n\n // set skew(s)\n if (\n Array.isArray(skew) && skew.length === 2 && skew.every((x) =>\n !Number.isNaN(+x)\n ) && skew.some((x) => x !== 0)\n ) {\n matrix = skew[0] ? matrix.skewX(skew[0]) : matrix;\n matrix = skew[1] ? matrix.skewY(skew[1]) : matrix;\n } else if (typeof skew === \"number\" && !Number.isNaN(skew)) {\n matrix = matrix.skewX(skew);\n }\n\n // set scale\n if (\n Array.isArray(scale) && scale.length >= 2 && scale.every((x) =>\n !Number.isNaN(+x)\n ) && scale.some((x) => x !== 1)\n ) {\n matrix = matrix.scale(...(scale as [number, number, number?]));\n } else if (typeof scale === \"number\" && !Number.isNaN(scale)) {\n matrix = matrix.scale(scale);\n }\n // set SVG transform-origin\n matrix = matrix.translate(-originX, -originY);\n }\n\n return matrix;\n};\nexport default getSVGMatrix;\n","import defaultOptions from \"../options/options\";\nimport type { ParserParams } from \"../interface\";\nimport roundTo from \"../math/roundTo\";\nimport type {\n AbsoluteSegment,\n NormalSegment,\n PathCommand,\n ShortSegment,\n SSegment,\n TSegment,\n} from \"../types\";\n\n/**\n * Shorten a single segment of a `pathArray` object.\n *\n * @param segment the `absoluteSegment` object\n * @param normalSegment the `normalSegment` object\n * @param params the coordinates of the previous segment\n * @param prevCommand the path command of the previous segment\n * @returns the shortened segment\n */\nconst shortenSegment = (\n segment: AbsoluteSegment,\n normalSegment: NormalSegment,\n params: ParserParams,\n prevCommand: PathCommand,\n): ShortSegment => {\n const [pathCommand] = segment;\n const { round: defaultRound } = defaultOptions;\n const round = typeof defaultRound === \"number\"\n ? defaultRound\n : /* istanbul ignore next */ 4;\n const normalValues = normalSegment.slice(1) as number[];\n const { x1, y1, x2, y2, x, y } = params;\n const [nx, ny] = normalValues.slice(-2);\n const result = segment;\n\n if (!\"TQ\".includes(pathCommand)) {\n // optional but good to be cautious\n params.qx = null;\n params.qy = null;\n }\n\n if (pathCommand === \"L\") {\n if (roundTo(x, round) === roundTo(nx, round)) {\n return [\"V\", ny];\n } else if (roundTo(y, round) === roundTo(ny, round)) {\n return [\"H\", nx];\n }\n } else if (pathCommand === \"C\") {\n const [nx1, ny1] = normalValues;\n params.x1 = nx1;\n params.y1 = ny1;\n\n if (\n \"CS\".includes(prevCommand) &&\n ((roundTo(nx1, round) === roundTo(x1 * 2 - x2, round) &&\n roundTo(ny1, round) === roundTo(y1 * 2 - y2, round)) ||\n (roundTo(x1, round) === roundTo(x2 * 2 - x, round) &&\n roundTo(y1, round) === roundTo(y2 * 2 - y, round)))\n ) {\n return [\n \"S\",\n normalValues[2],\n normalValues[3],\n normalValues[4],\n normalValues[5],\n ] as SSegment;\n }\n } else if (pathCommand === \"Q\") {\n const [qx, qy] = normalValues;\n params.qx = qx;\n params.qy = qy;\n\n if (\n \"QT\".includes(prevCommand) &&\n roundTo(qx, round) === roundTo(x1 * 2 - x2, round) &&\n roundTo(qy, round) === roundTo(y1 * 2 - y2, round)\n ) {\n return [\"T\", normalValues[2], normalValues[3]] as TSegment;\n }\n }\n\n // ['V', 'H', 'S', 'T', 'Z'].includes(pathCommand)\n return result as ShortSegment;\n};\n\nexport default shortenSegment;\n","import type { PathCommand, PathSegment } from \"../types\";\nimport roundTo from \"../math/roundTo\";\n\nconst roundSegment = (\n segment: T,\n roundOption: number,\n) => {\n const values = (segment.slice(1) as number[]).map((n) =>\n roundTo(n, roundOption)\n );\n return [segment[0] as PathCommand | number].concat(values) as T;\n};\n\nexport default roundSegment;\n","import type { AbsoluteSegment, PathArray, PathCommand } from \"../types\";\nimport pathToAbsolute from \"../convert/pathToAbsolute\";\nimport shortenSegment from \"./shortenSegment\";\nimport paramsParser from \"../parser/paramsParser\";\nimport iterate from \"./iterate\";\nimport normalizeSegment from \"./normalizeSegment\";\nimport relativizeSegment from \"./relativizeSegment\";\nimport roundSegment from \"./roundSegment\";\n\n/**\n * Optimizes a `pathArray` object:\n * * convert segments to shorthand if possible\n * * select shortest segments from absolute and relative `pathArray`s\n *\n * @param pathInput a string or `pathArray`\n * @param roundOption the amount of decimals to round values to\n * @returns the optimized `pathArray`\n */\nconst optimizePath = (pathInput: PathArray, roundOption?: number) => {\n const path = pathToAbsolute(pathInput);\n // allow for ZERO decimals or use an aggressive value of 2\n const round = typeof roundOption === \"number\" && roundOption >= 0\n ? roundOption\n : /* istanbul ignore next @preserve */ 2;\n // this utility overrides the iterator params\n const optimParams = { ...paramsParser };\n\n const allPathCommands = [] as PathCommand[];\n let pathCommand = \"M\" as PathCommand;\n let prevCommand = \"Z\" as PathCommand;\n\n return iterate(path, (seg, i, lastX, lastY) => {\n optimParams.x = lastX;\n optimParams.y = lastY;\n const normalizedSegment = normalizeSegment(seg, optimParams);\n let result = seg;\n [pathCommand] = seg;\n\n // Save current path command\n allPathCommands[i] = pathCommand;\n if (i) {\n // Get previous path command for `shortenSegment`\n prevCommand = allPathCommands[i - 1];\n const shortSegment = shortenSegment(\n seg as AbsoluteSegment,\n normalizedSegment,\n optimParams,\n prevCommand,\n );\n const absSegment = roundSegment(shortSegment, round);\n const absString = absSegment.join(\"\");\n const relativeSegment = relativizeSegment(shortSegment, i, lastX, lastY);\n const relSegment = roundSegment(relativeSegment, round);\n const relString = relSegment.join(\"\");\n result = absString.length < relString.length ? absSegment : relSegment;\n }\n\n const seglen = normalizedSegment.length;\n optimParams.x1 = +normalizedSegment[seglen - 2];\n optimParams.y1 = +normalizedSegment[seglen - 1];\n optimParams.x2 = +normalizedSegment[seglen - 4] || optimParams.x1;\n optimParams.y2 = +normalizedSegment[seglen - 3] || optimParams.y1;\n\n return result;\n });\n};\n\nexport default optimizePath;\n","import CSSMatrix from \"@thednp/dommatrix\";\nimport { type PointTuple } from \"../types\";\n\n/**\n * Transforms a specified point using a matrix, returning a new\n * Tuple *Object* comprising of the transformed point.\n * Neither the matrix nor the original point are altered.\n *\n * @copyright thednp © 2021\n *\n * @param cssm CSSMatrix instance\n * @param v Tuple\n * @return the resulting Tuple\n */\nconst translatePoint = (\n cssm: CSSMatrix,\n v: [number, number, number, number],\n): [number, number, number, number] => {\n let m = CSSMatrix.Translate(v[0], v[1], v[2]);\n\n [, , , m.m44] = v;\n m = cssm.multiply(m);\n\n return [m.m41, m.m42, m.m43, m.m44];\n};\n\n/**\n * Returns the [x,y] projected coordinates for a given an [x,y] point\n * and an [x,y,z] perspective origin point.\n *\n * Equation found here =>\n * http://en.wikipedia.org/wiki/3D_projection#Diagram\n * Details =>\n * https://stackoverflow.com/questions/23792505/predicted-rendering-of-css-3d-transformed-pixel\n *\n * @param m the transformation matrix\n * @param point2D the initial [x,y] coordinates\n * @param origin the [x,y,z] transform origin\n * @returns the projected [x,y] coordinates\n */\nconst projection2d = (\n m: CSSMatrix,\n point2D: PointTuple,\n origin: [number, number, number],\n): PointTuple => {\n const [originX, originY, originZ] = origin;\n const [x, y, z] = translatePoint(m, [point2D[0], point2D[1], 0, 1]);\n\n const relativePositionX = x - originX;\n const relativePositionY = y - originY;\n const relativePositionZ = z - originZ;\n\n return [\n // protect against division by ZERO\n relativePositionX * (Math.abs(originZ) / Math.abs(relativePositionZ) || 1) +\n originX,\n relativePositionY * (Math.abs(originZ) / Math.abs(relativePositionZ) || 1) +\n originY,\n ];\n};\nexport default projection2d;\n","import type { CSegment, CurveArray, MSegment, PathCommand } from \"../types\";\n\n/**\n * Reverses all segments of a `pathArray`\n * which consists of only C (cubic-bezier) path commands.\n *\n * @param path the source `pathArray`\n * @returns the reversed `pathArray`\n */\nconst reverseCurve = (path: CurveArray) => {\n const rotatedCurve = path\n .slice(1)\n .map((x, i, curveOnly) =>\n !i\n ? path[0].slice(1).concat(x.slice(1) as number[])\n : curveOnly[i - 1].slice(-2).concat(x.slice(1))\n )\n .map((x) => x.map((_, i) => x[x.length - i - 2 * (1 - (i % 2))]))\n .reverse() as (MSegment | CSegment)[];\n\n return [[\"M\" as PathCommand | number].concat(rotatedCurve[0].slice(0, 2))]\n .concat(\n rotatedCurve.map((x) => [\"C\" as PathCommand | number].concat(x.slice(2))),\n ) as CurveArray;\n};\n\nexport default reverseCurve;\n","import type {\n ASegment,\n CSegment,\n HSegment,\n MSegment,\n PathArray,\n PathSegment,\n PointTuple,\n QSegment,\n SSegment,\n TSegment,\n VSegment,\n} from \"../types\";\nimport pathToAbsolute from \"../convert/pathToAbsolute\";\nimport normalizePath from \"./normalizePath\";\nimport iterate from \"./iterate\";\n\n/**\n * Reverses all segments of a `pathArray` and returns a new `pathArray` instance\n * with absolute values.\n *\n * @param pathInput the source `pathArray`\n * @returns the reversed `pathArray`\n */\nconst reversePath = (pathInput: PathArray) => {\n const absolutePath = pathToAbsolute(pathInput);\n const normalizedPath = normalizePath(absolutePath);\n const pLen = absolutePath.length;\n const isClosed = absolutePath[pLen - 1][0] === \"Z\";\n\n const reversedPath = iterate(absolutePath, (segment, i) => {\n const normalizedSegment = normalizedPath[i];\n const prevSeg = i && absolutePath[i - 1];\n const prevCommand = prevSeg && prevSeg[0];\n const nextSeg = absolutePath[i + 1];\n const nextCommand = nextSeg && nextSeg[0];\n const [pathCommand] = segment;\n const [x, y] = normalizedPath[i ? i - 1 : pLen - 1].slice(-2) as PointTuple;\n let result = segment;\n\n switch (pathCommand) {\n case \"M\":\n result = (isClosed ? [\"Z\"] : [pathCommand, x, y]) as PathSegment;\n break;\n case \"A\":\n result = [\n pathCommand,\n segment[1],\n segment[2],\n segment[3],\n segment[4],\n segment[5] === 1 ? 0 : 1,\n x,\n y,\n ] as ASegment;\n break;\n case \"C\":\n if (nextSeg && nextCommand === \"S\") {\n result = [\"S\", segment[1], segment[2], x, y] as SSegment;\n } else {\n result = [\n pathCommand,\n segment[3],\n segment[4],\n segment[1],\n segment[2],\n x,\n y,\n ] as CSegment;\n }\n break;\n case \"S\":\n if (\n prevCommand && \"CS\".includes(prevCommand) &&\n (!nextSeg || nextCommand !== \"S\")\n ) {\n result = [\n \"C\",\n normalizedSegment[3],\n normalizedSegment[4],\n normalizedSegment[1],\n normalizedSegment[2],\n x,\n y,\n ] as CSegment;\n } else {\n result = [\n pathCommand,\n normalizedSegment[1],\n normalizedSegment[2],\n x,\n y,\n ] as SSegment;\n }\n break;\n case \"Q\":\n if (nextSeg && nextCommand === \"T\") {\n result = [\"T\", x, y] as TSegment;\n } else {\n result = [pathCommand, segment[1], segment[2], x, y] as QSegment;\n }\n break;\n case \"T\":\n if (\n prevCommand && \"QT\".includes(prevCommand) &&\n (!nextSeg || nextCommand !== \"T\")\n ) {\n result = [\n \"Q\",\n normalizedSegment[1],\n normalizedSegment[2],\n x,\n y,\n ] as QSegment;\n } else {\n result = [pathCommand, x, y] as TSegment;\n }\n break;\n case \"Z\":\n result = [\"M\", x, y] as MSegment;\n break;\n case \"H\":\n result = [pathCommand, x] as HSegment;\n break;\n case \"V\":\n result = [pathCommand, y] as VSegment;\n break;\n default:\n result = [pathCommand as typeof pathCommand | number].concat(\n segment.slice(1, -2),\n x,\n y,\n ) as PathSegment;\n }\n\n return result;\n });\n\n return (\n isClosed\n ? reversedPath.reverse()\n : [reversedPath[0] as PathSegment].concat(reversedPath.slice(1).reverse())\n ) as PathArray;\n};\n\nexport default reversePath;\n","import type { PathArray } from \"../types\";\nimport defaultOptions from \"../options/options\";\nimport iterate from \"./iterate\";\nimport roundSegment from \"./roundSegment\";\n\n/**\n * Rounds the values of a `pathArray` instance to\n * a specified amount of decimals and returns it.\n *\n * @param path the source `pathArray`\n * @param roundOption the amount of decimals to round numbers to\n * @returns the resulted `pathArray` with rounded values\n */\nconst roundPath = (path: PathArray, roundOption?: number | \"off\") => {\n let { round } = defaultOptions;\n // allow for ZERO decimals\n round = roundOption === \"off\"\n ? roundOption\n : typeof roundOption === \"number\" && roundOption >= 0\n ? roundOption\n : typeof round === \"number\" && round >= 0\n ? round\n : /* istanbul ignore next @preserve */ \"off\";\n\n /* istanbul ignore else @preserve */\n if (round === \"off\") return path.slice(0) as PathArray;\n\n return iterate(path, (segment) => {\n return roundSegment(segment, round);\n });\n};\nexport default roundPath;\n","import midPoint from \"../math/midPoint\";\nimport type { CubicSegment, PointTuple } from \"../types\";\n\n/**\n * Split a cubic-bezier segment into two.\n *\n * @param pts the cubic-bezier parameters\n * @param ratio the cubic-bezier parameters\n * @return two new cubic-bezier segments\n */\nconst splitCubic = (\n pts: number[],\n ratio = 0.5,\n): [CubicSegment, CubicSegment] => {\n const t = ratio;\n const p0 = pts.slice(0, 2) as PointTuple;\n const p1 = pts.slice(2, 4) as PointTuple;\n const p2 = pts.slice(4, 6) as PointTuple;\n const p3 = pts.slice(6, 8) as PointTuple;\n const p4 = midPoint(p0, p1, t);\n const p5 = midPoint(p1, p2, t);\n const p6 = midPoint(p2, p3, t);\n const p7 = midPoint(p4, p5, t);\n const p8 = midPoint(p5, p6, t);\n const p9 = midPoint(p7, p8, t);\n\n return [\n [\"C\", p4[0], p4[1], p7[0], p7[1], p9[0], p9[1]],\n [\"C\", p8[0], p8[1], p6[0], p6[1], p3[0], p3[1]],\n ];\n};\nexport default splitCubic;\n","import paramsParser from \"../parser/paramsParser\";\nimport type {\n AbsoluteCommand,\n HSegment,\n MSegment,\n PathArray,\n PointTuple,\n RelativeCommand,\n VSegment,\n} from \"../types\";\n\n/**\n * Split a path into an `Array` of sub-path strings.\n *\n * In the process, values are converted to absolute\n * for visual consistency.\n *\n * @param pathInput the source `pathArray`\n * @return an array with all sub-path strings\n */\nconst splitPath = (pathInput: PathArray): PathArray[] => {\n const composite = [] as PathArray[];\n let path: PathArray;\n let pi = -1;\n let x = 0;\n let y = 0;\n let mx = 0;\n let my = 0;\n const params = { ...paramsParser };\n\n pathInput.forEach((seg) => {\n const [pathCommand] = seg;\n const absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\n const relCommand = pathCommand.toLowerCase() as RelativeCommand;\n const isRelative = pathCommand === relCommand;\n const values = seg.slice(1) as number[];\n\n if (absCommand === \"M\") {\n pi += 1;\n [x, y] = values as PointTuple;\n x += isRelative ? params.x : 0;\n y += isRelative ? params.y : 0;\n mx = x;\n my = y;\n path = [(isRelative ? [absCommand, mx, my] : seg) as MSegment];\n } else {\n if (absCommand === \"Z\") {\n x = mx;\n y = my;\n } else if (absCommand === \"H\") {\n [, x] = seg as HSegment;\n x += isRelative ? params.x : /* istanbul ignore next @preserve */ 0;\n } else if (absCommand === \"V\") {\n [, y] = seg as VSegment;\n y += isRelative ? params.y : /* istanbul ignore next @preserve */ 0;\n } else {\n [x, y] = seg.slice(-2) as PointTuple;\n x += isRelative ? params.x : 0;\n y += isRelative ? params.y : 0;\n }\n path.push(seg);\n }\n\n params.x = x;\n params.y = y;\n composite[pi] = path;\n });\n\n return composite;\n};\nexport default splitPath;\n","import getSVGMatrix from \"./getSVGMatrix\";\nimport projection2d from \"./projection2d\";\nimport defaultOptions from \"../options/options\";\nimport type {\n AbsoluteArray,\n AbsoluteSegment,\n CSegment,\n LSegment,\n PathArray,\n TransformObjectValues,\n} from \"../types\";\nimport type { TransformObject } from \"../interface\";\nimport iterate from \"./iterate\";\nimport parsePathString from \"../parser/parsePathString\";\nimport absolutizeSegment from \"./absolutizeSegment\";\nimport arcToCubic from \"./arcToCubic\";\n\n/**\n * Apply a 2D / 3D transformation to a `pathArray` instance.\n *\n * Since *SVGElement* doesn't support 3D transformation, this function\n * creates a 2D projection of the element.\n *\n * @param path the `pathArray` to apply transformation\n * @param transform the transform functions `Object`\n * @returns the resulted `pathArray`\n */\nconst transformPath = (\n pathInput: PathArray | string,\n transform?: Partial,\n) => {\n // last x and y transformed values\n let x = 0;\n let y = 0;\n // new x and y transformed\n let lx = 0;\n let ly = 0;\n // segment params iteration index and length\n let j = 0;\n let jj = 0;\n let pathCommand = \"M\";\n // transform uses it's own set of params\n const path = parsePathString(pathInput);\n const transformProps = transform && Object.keys(transform);\n\n // when used as a static method, invalidate somehow\n if (!transform || (transformProps && !transformProps.length)) {\n return path.slice(0) as typeof path;\n }\n\n // transform origin is extremely important\n if (!transform.origin) {\n Object.assign(transform, { origin: defaultOptions.origin });\n }\n const origin = transform.origin as [number, number, number];\n const matrixInstance = getSVGMatrix(transform as TransformObjectValues);\n\n if (matrixInstance.isIdentity) return path.slice(0) as typeof path;\n\n return iterate(path, (seg, index, lastX, lastY) => {\n [pathCommand] = seg;\n const absCommand = pathCommand.toUpperCase();\n const isRelative = absCommand !== pathCommand;\n const absoluteSegment = isRelative\n ? absolutizeSegment(seg, index, lastX, lastY)\n : (seg.slice(0) as AbsoluteSegment);\n\n let result = absCommand === \"A\"\n // ? segmentToCubic(absoluteSegment, transformParams)\n ? ([\"C\" as string | number].concat(\n arcToCubic(\n lastX,\n lastY,\n absoluteSegment[1] as number,\n absoluteSegment[2] as number,\n absoluteSegment[3] as number,\n absoluteSegment[4] as number,\n absoluteSegment[5] as number,\n absoluteSegment[6] as number,\n absoluteSegment[7] as number,\n ),\n ) as CSegment)\n : absCommand === \"V\"\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\n : absCommand === \"H\"\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\n : absoluteSegment;\n\n // update pathCommand\n pathCommand = result[0];\n const isLongArc = pathCommand === \"C\" && result.length > 7;\n const tempSegment =\n (isLongArc ? result.slice(0, 7) : result.slice(0)) as AbsoluteSegment;\n\n if (isLongArc) {\n path.splice(\n index + 1,\n 0,\n [\"C\" as typeof pathCommand | number].concat(\n result.slice(7),\n ) as CSegment,\n );\n result = tempSegment as CSegment;\n }\n\n if (pathCommand === \"L\") {\n [lx, ly] = projection2d(matrixInstance, [\n (result as LSegment)[1],\n (result as LSegment)[2],\n ], origin);\n\n /* istanbul ignore else @preserve */\n if (x !== lx && y !== ly) {\n result = [\"L\", lx, ly];\n } else if (y === ly) {\n result = [\"H\", lx];\n } else if (x === lx) {\n result = [\"V\", ly];\n }\n } else {\n for (j = 1, jj = result.length; j < jj; j += 2) {\n [lx, ly] = projection2d(\n matrixInstance,\n [+result[j], +result[j + 1]],\n origin,\n );\n result[j] = lx;\n result[j + 1] = ly;\n }\n }\n // now update x and y\n x = lx;\n y = ly;\n\n return result;\n });\n};\n\nexport default transformPath;\n","\"use strict\";\nimport CSSMatrix from \"@thednp/dommatrix\";\nimport { PathArray, PointTuple, TransformObjectValues } from \"./types\";\nimport type { Options, TransformEntries, TransformObject } from \"./interface\";\nexport * from \"./types\";\nexport * from \"./interface\";\nimport defaultOptions from \"./options/options\";\n\nimport pathToAbsolute from \"./convert/pathToAbsolute\";\nimport pathToRelative from \"./convert/pathToRelative\";\nimport pathToCurve from \"./convert/pathToCurve\";\nimport pathToString from \"./convert/pathToString\";\nimport * as arcTools from \"./math/arcTools\";\nimport {\n bezierLength,\n calculateBezier,\n CBEZIER_MINMAX_EPSILON,\n computeBezier,\n Cvalues,\n deriveBezier,\n getBezierLength,\n minmaxC,\n minmaxQ,\n Tvalues,\n} from \"./math/bezier\";\nimport {\n getCubicBBox,\n getCubicLength,\n getPointAtCubicLength,\n getPointAtCubicSegmentLength,\n} from \"./math/cubicTools\";\nimport {\n getLineBBox,\n getLineLength,\n getPointAtLineLength,\n} from \"./math/lineTools\";\nimport {\n getPointAtQuadLength,\n getPointAtQuadSegmentLength,\n getQuadBBox,\n getQuadLength,\n} from \"./math/quadTools\";\nimport { polygonArea, polygonLength } from \"./math/polygonTools\";\n\nimport distanceSquareRoot from \"./math/distanceSquareRoot\";\nimport midPoint from \"./math/midPoint\";\nimport rotateVector from \"./math/rotateVector\";\nimport roundTo from \"./math/roundTo\";\n\nimport error from \"./parser/error\";\nimport parsePathString from \"./parser/parsePathString\";\nimport finalizeSegment from \"./parser/finalizeSegment\";\nimport invalidPathValue from \"./parser/invalidPathValue\";\nimport isArcCommand from \"./parser/isArcCommand\";\nimport isDigit from \"./parser/isDigit\";\nimport isDigitStart from \"./parser/isDigitStart\";\nimport isMoveCommand from \"./parser/isMoveCommand\";\nimport isPathCommand from \"./parser/isPathCommand\";\nimport isSpace from \"./parser/isSpace\";\nimport paramsCount from \"./parser/paramsCount\";\nimport paramsParser from \"./parser/paramsParser\";\nimport pathParser from \"./parser/pathParser\";\nimport scanFlag from \"./parser/scanFlag\";\nimport scanParam from \"./parser/scanParam\";\nimport scanSegment from \"./parser/scanSegment\";\nimport skipSpaces from \"./parser/skipSpaces\";\n\nimport distanceEpsilon from \"./util/distanceEpsilon\";\nimport getClosestPoint from \"./util/getClosestPoint\";\nimport getDrawDirection from \"./util/getDrawDirection\";\nimport getPathArea from \"./util/getPathArea\";\nimport getPathBBox from \"./util/getPathBBox\";\nimport getPointAtLength from \"./util/getPointAtLength\";\nimport getPropertiesAtLength from \"./util/getPropertiesAtLength\";\nimport getPropertiesAtPoint from \"./util/getPropertiesAtPoint\";\nimport getSegmentAtLength from \"./util/getSegmentAtLength\";\nimport getSegmentOfPoint from \"./util/getSegmentOfPoint\";\nimport getTotalLength from \"./util/getTotalLength\";\n\nimport isAbsoluteArray from \"./util/isAbsoluteArray\";\nimport isCurveArray from \"./util/isCurveArray\";\nimport isNormalizedArray from \"./util/isNormalizedArray\";\nimport isPathArray from \"./util/isPathArray\";\nimport isPointInStroke from \"./util/isPointInStroke\";\nimport isRelativeArray from \"./util/isRelativeArray\";\nimport isValidPath from \"./util/isValidPath\";\nimport shapeParams from \"./util/shapeParams\";\nimport shapeToPath from \"./util/shapeToPath\";\nimport shapeToPathArray from \"./util/shapeToPathArray\";\n\nimport absolutizeSegment from \"./process/absolutizeSegment\";\nimport arcToCubic from \"./process/arcToCubic\";\nimport getSVGMatrix from \"./process/getSVGMatrix\";\nimport iterate from \"./process/iterate\";\nimport lineToCubic from \"./process/lineToCubic\";\nimport normalizePath from \"./process/normalizePath\";\nimport normalizeSegment from \"./process/normalizeSegment\";\nimport optimizePath from \"./process/optimizePath\";\nimport projection2d from \"./process/projection2d\";\nimport quadToCubic from \"./process/quadToCubic\";\nimport relativizeSegment from \"./process/relativizeSegment\";\nimport reverseCurve from \"./process/reverseCurve\";\nimport reversePath from \"./process/reversePath\";\nimport roundPath from \"./process/roundPath\";\nimport roundSegment from \"./process/roundSegment\";\nimport segmentToCubic from \"./process/segmentToCubic\";\nimport shortenSegment from \"./process/shortenSegment\";\nimport splitCubic from \"./process/splitCubic\";\nimport splitPath from \"./process/splitPath\";\nimport transformPath from \"./process/transformPath\";\n\n/**\n * Creates a new SVGPathCommander instance with the following properties:\n * * segments: `pathArray`\n * * round: number\n * * origin: [number, number, number?]\n *\n * @class\n * @author thednp \n * @returns a new SVGPathCommander instance\n */\nclass SVGPathCommander {\n public static CSSMatrix = CSSMatrix;\n public static pathToAbsolute = pathToAbsolute;\n public static pathToRelative = pathToRelative;\n public static pathToCurve = pathToCurve;\n public static pathToString = pathToString;\n public static arcTools = arcTools;\n public static bezierTools = {\n Cvalues,\n Tvalues,\n minmaxC,\n minmaxQ,\n getBezierLength,\n bezierLength,\n calculateBezier,\n computeBezier,\n deriveBezier,\n CBEZIER_MINMAX_EPSILON,\n };\n public static cubicTools = {\n getCubicLength,\n getCubicBBox,\n getPointAtCubicLength,\n getPointAtCubicSegmentLength,\n };\n public static lineTools = {\n getPointAtLineLength,\n getLineBBox,\n getLineLength,\n };\n public static quadTools = {\n getPointAtQuadSegmentLength,\n getQuadLength,\n getQuadBBox,\n getPointAtQuadLength,\n };\n public static polygonTools = { polygonArea, polygonLength };\n public static distanceSquareRoot = distanceSquareRoot;\n public static distanceEpsilon = distanceEpsilon;\n public static midPoint = midPoint;\n public static rotateVector = rotateVector;\n public static roundTo = roundTo;\n public static finalizeSegment = finalizeSegment;\n public static invalidPathValue = invalidPathValue;\n public static isArcCommand = isArcCommand;\n public static isDigit = isDigit;\n public static isDigitStart = isDigitStart;\n public static isMoveCommand = isMoveCommand;\n public static isPathCommand = isPathCommand;\n public static isSpace = isSpace;\n public static paramsCount = paramsCount;\n public static paramsParser = paramsParser;\n public static pathParser = pathParser;\n public static scanFlag = scanFlag;\n public static scanParam = scanParam;\n public static scanSegment = scanSegment;\n public static skipSpaces = skipSpaces;\n public static getPathBBox = getPathBBox;\n public static getPathArea = getPathArea;\n public static getTotalLength = getTotalLength;\n public static getDrawDirection = getDrawDirection;\n public static getPointAtLength = getPointAtLength;\n public static getPropertiesAtLength = getPropertiesAtLength;\n public static getPropertiesAtPoint = getPropertiesAtPoint;\n public static getClosestPoint = getClosestPoint;\n public static getSegmentOfPoint = getSegmentOfPoint;\n public static getSegmentAtLength = getSegmentAtLength;\n public static isPointInStroke = isPointInStroke;\n public static isValidPath = isValidPath;\n public static isPathArray = isPathArray;\n public static isAbsoluteArray = isAbsoluteArray;\n public static isRelativeArray = isRelativeArray;\n public static isCurveArray = isCurveArray;\n public static isNormalizedArray = isNormalizedArray;\n public static shapeToPath = shapeToPath;\n public static shapeToPathArray = shapeToPathArray;\n public static shapeParams = shapeParams;\n public static parsePathString = parsePathString;\n public static absolutizeSegment = absolutizeSegment;\n public static arcToCubic = arcToCubic;\n public static getSVGMatrix = getSVGMatrix;\n public static iterate = iterate;\n public static lineToCubic = lineToCubic;\n public static normalizePath = normalizePath;\n public static normalizeSegment = normalizeSegment;\n public static optimizePath = optimizePath;\n public static projection2d = projection2d;\n public static quadToCubic = quadToCubic;\n public static relativizeSegment = relativizeSegment;\n public static reverseCurve = reverseCurve;\n public static reversePath = reversePath;\n public static roundPath = roundPath;\n public static roundSegment = roundSegment;\n public static segmentToCubic = segmentToCubic;\n public static shortenSegment = shortenSegment;\n public static splitCubic = splitCubic;\n public static splitPath = splitPath;\n public static transformPath = transformPath;\n // declare class properties\n declare segments: PathArray;\n declare round: number | \"off\";\n declare origin: [number, number, number];\n\n /**\n * @constructor\n * @param pathValue the path string\n * @param config instance options\n */\n constructor(pathValue: string, config?: Partial) {\n const instanceOptions = config || {};\n const undefPath = typeof pathValue === \"undefined\";\n\n if (undefPath || !pathValue.length) {\n throw TypeError(\n `${error}: \"pathValue\" is ${undefPath ? \"undefined\" : \"empty\"}`,\n );\n }\n\n this.segments = parsePathString(pathValue);\n\n // // set instance options.round\n const { round: roundOption, origin: originOption } = instanceOptions;\n let round: number | \"off\";\n\n if (Number.isInteger(roundOption) || roundOption === \"off\") {\n round = roundOption as number | \"off\";\n } else {\n round = defaultOptions.round as number;\n }\n\n // set instance options.origin\n // the SVGPathCommander class will always override the default origin\n let origin = defaultOptions.origin as [number, number, number];\n /* istanbul ignore else @preserve */\n if (Array.isArray(originOption) && originOption.length >= 2) {\n const [originX, originY, originZ] = originOption.map(Number);\n origin = [\n !Number.isNaN(originX) ? originX : 0,\n !Number.isNaN(originY) ? originY : 0,\n !Number.isNaN(originZ) ? originZ : 0,\n ];\n }\n\n this.round = round;\n this.origin = origin;\n\n return this;\n }\n get bbox() {\n return getPathBBox(this.segments);\n }\n get length() {\n return getTotalLength(this.segments);\n }\n\n /**\n * Returns the path bounding box, equivalent to native `path.getBBox()`.\n *\n * @public\n * @returns the pathBBox\n */\n getBBox() {\n return this.bbox;\n }\n\n /**\n * Returns the total path length, equivalent to native `path.getTotalLength()`.\n *\n * @public\n * @returns the path total length\n */\n getTotalLength() {\n return this.length;\n }\n\n /**\n * Returns an `{x,y}` point in the path stroke at a given length,\n * equivalent to the native `path.getPointAtLength()`.\n *\n * @public\n * @param length the length\n * @returns the requested point\n */\n getPointAtLength(length: number) {\n return getPointAtLength(this.segments, length);\n }\n\n /**\n * Convert path to absolute values\n *\n * @public\n */\n toAbsolute() {\n const { segments } = this;\n this.segments = pathToAbsolute(segments);\n return this;\n }\n\n /**\n * Convert path to relative values\n *\n * @public\n */\n toRelative() {\n const { segments } = this;\n this.segments = pathToRelative(segments);\n return this;\n }\n\n /**\n * Convert path to cubic-bezier values. In addition, un-necessary `Z`\n * segment is removed if previous segment extends to the `M` segment.\n *\n * @public\n */\n toCurve() {\n const { segments } = this;\n this.segments = pathToCurve(segments);\n return this;\n }\n\n /**\n * Reverse the order of the segments and their values.\n *\n * @param onlySubpath option to reverse all sub-paths except first\n * @public\n */\n reverse(onlySubpath?: boolean) {\n const { segments } = this;\n const split = splitPath(segments);\n const subPath = split.length > 1 ? split : false;\n\n const absoluteMultiPath = subPath\n ? subPath.map((x, i) => {\n if (onlySubpath) {\n return i ? reversePath(x) : x.slice(0);\n }\n return reversePath(x);\n })\n : segments.slice(0);\n\n let path = [] as unknown as PathArray;\n if (subPath) {\n path = absoluteMultiPath.flat(1) as PathArray;\n } else {\n path = onlySubpath ? segments : reversePath(segments);\n }\n\n this.segments = path.slice(0) as PathArray;\n return this;\n }\n\n /**\n * Normalize path in 2 steps:\n * * convert `pathArray`(s) to absolute values\n * * convert shorthand notation to standard notation\n *\n * @public\n */\n normalize() {\n const { segments } = this;\n this.segments = normalizePath(segments);\n return this;\n }\n\n /**\n * Optimize `pathArray` values:\n * * convert segments to absolute and/or relative values\n * * select segments with shortest resulted string\n * * round values to the specified `decimals` option value\n *\n * @public\n */\n optimize() {\n const { segments } = this;\n const round = this.round === \"off\" ? 2 : this.round;\n\n this.segments = optimizePath(segments, round);\n return this;\n }\n\n /**\n * Transform path using values from an `Object` defined as `transformObject`.\n *\n * @see TransformObject for a quick refference\n *\n * @param source a `transformObject`as described above\n * @public\n */\n transform(source?: Partial) {\n if (\n !source ||\n typeof source !== \"object\" ||\n (typeof source === \"object\" &&\n ![\"translate\", \"rotate\", \"skew\", \"scale\"].some((x) => x in source))\n ) {\n return this;\n }\n\n const {\n segments,\n origin: [cx, cy, cz],\n } = this;\n const transform = {} as TransformObjectValues;\n for (const [k, v] of Object.entries(source) as TransformEntries) {\n // istanbul ignore else @preserve\n if (k === \"skew\" && Array.isArray(v)) {\n transform[k] = v.map(Number) as PointTuple;\n } else if (\n (k === \"rotate\" || k === \"translate\" || k === \"origin\" ||\n k === \"scale\") && Array.isArray(v)\n ) {\n transform[k] = v.map(Number) as [number, number, number];\n } else if (k !== \"origin\" && typeof Number(v) === \"number\") {\n transform[k] = Number(v);\n }\n }\n\n // if origin is not specified\n // it's important that we have one\n const { origin } = transform;\n\n if (Array.isArray(origin) && origin.length >= 2) {\n const [originX, originY, originZ] = origin.map(Number);\n transform.origin = [\n !Number.isNaN(originX) ? originX : cx,\n !Number.isNaN(originY) ? originY : cy,\n originZ || cz,\n ];\n } else {\n transform.origin = [cx, cy, cz];\n }\n\n this.segments = transformPath(segments, transform);\n return this;\n }\n\n /**\n * Rotate path 180deg vertically\n *\n * @public\n */\n flipX() {\n const { cx, cy } = this.bbox;\n this.transform({ rotate: [0, 180, 0], origin: [cx, cy, 0] });\n return this;\n }\n\n /**\n * Rotate path 180deg horizontally\n *\n * @public\n */\n flipY() {\n const { cx, cy } = this.bbox;\n this.transform({ rotate: [180, 0, 0], origin: [cx, cy, 0] });\n return this;\n }\n\n /**\n * Export the current path to be used\n * for the `d` (description) attribute.\n *\n * @public\n * @return the path string\n */\n toString() {\n return pathToString(this.segments, this.round);\n }\n\n /**\n * Remove the instance.\n *\n * @public\n * @return void\n */\n dispose() {\n Object.keys(this).forEach((key) => delete this[key as keyof typeof this]);\n }\n}\n\nexport default SVGPathCommander;\n"],"names":["Z","z","s","e","p","$","E","P","y","g","n","i","r","a","m","h","c","u","f","w","o","d","b","X","O","x","Y","F","T","k","I","v","R","D","N","defaultOptions","paramsCount","finalizeSegment","path","pathCommand","relativeCommand","data","error","scanFlag","index","pathValue","code","isDigit","invalidPathValue","scanParam","max","start","zeroFirst","hasCeiling","hasDecimal","hasDot","ch","isSpace","skipSpaces","isPathCommand","isDigitStart","isArcCommand","isMoveCommand","scanSegment","_a","segments","cmdCode","reqParams","paramCounts","lastSegment","PathParser","pathString","parsePathString","pathInput","absolutizeSegment","segment","lastX","lastY","absCommand","absValues","seglen","j","iterate","iterator","pathLen","isRelative","mx","my","segLen","iteratorResult","pathToAbsolute","relativizeSegment","relCommand","relValues","pathToRelative","rotateVector","rad","sin","cos","arcToCubic","X1","Y1","RX","RY","angle","LAF","SF","X2","Y2","recursive","x1","y1","rx","ry","x2","y2","d120","res","xy","f1","f2","cx","cy","rx2","ry2","df","f2old","x2old","y2old","c1","s1","c2","s2","t","hx","hy","m1","m2","m3","m4","newres","ii","quadToCubic","qx","qy","r13","r23","midPoint","ax","ay","bx","by","lineToCubic","segmentToCubic","params","values","px1","py1","px","py","normalizeSegment","px2","py2","nqx","nqy","paramsParser","pathToCurve","seg","normalSegment","result","roundTo","round","pow","pathToString","roundOption","valLen","distanceSquareRoot","getLineLength","getPointAtLineLength","distance","point","length","getLineBBox","min","arcLength","theta","halfTheta","sinHalfTheta","cosHalfTheta","term1","term2","arcPoint","alpha","cosA","sinA","angleBetween","v0","v1","v0x","v0y","v1x","v1y","getArcProps","abs","sqrt","PI","xRotRad","dx","dy","transformedPoint","radiiCheck","cSquareNumerator","cSquareRootDenom","cRadicand","cCoef","transformedCenter","center","startVector","startAngle","endVector","sweepAngle","endAngle","getArcLength","getPointAtArcLength","ellipseComponentX","ellipseComponentY","getArcBBox","deltaAngle","tan","atan2","tangent","angle1","angle2","angle3","angle4","xArray","yArray","xMin","xMax","yMin","yMax","angleAfterStart","pP2","angleBeforeEnd","pP3","p1","p2","p4","p3","Tvalues","Cvalues","deriveBezier","points","dpoints","list","computeBezier","order","mt","mt2","t2","calculateBezier","derivativeFn","l","bezierLength","len","sum","getBezierLength","curve","idx","step","CBEZIER_MINMAX_EPSILON","minmaxQ","cp","v2","minmaxC","cp1","cp2","K","S","L","Q","getPointAtCubicSegmentLength","c1x","c1y","c2x","c2y","t1","getCubicLength","getPointAtCubicLength","distanceIsNumber","currentLength","getCubicBBox","cxMinMax","cyMinMax","getPointAtQuadSegmentLength","getQuadLength","getPointAtQuadLength","getQuadBBox","polygonArea","polygon","area","polygonLength","DISTANCE_EPSILON","normalizePath","_","getPointAtLength","isM","POINT","totalLength","getTotalLength","paramX1","paramY1","paramX2","paramY2","paramQX","paramQY","absoluteSegment","cp1x","cp1y","getPropertiesAtLength","pathArray","pathTemp","pathLength","lengthAtSegment","getPropertiesAtPoint","normalPath","distanceTo","precision","scan","closest","scanDistance","bestLength","bestDistance","scanLength","before","after","beforeLength","afterLength","beforeDistance","afterDistance","getClosestPoint","getCubicSegArea","getPathArea","getDrawDirection","getPathBBox","minX","minY","maxX","maxY","width","height","getSegmentAtLength","getSegmentOfPoint","isPathArray","lk","isAbsoluteArray","isNormalizedArray","pc","isCurveArray","isPointInStroke","isRelativeArray","isValidPath","shapeParams","isElement","node","getLinePath","attr","getPolyPath","getCirclePath","getEllipsePath","getRectanglePath","shapeToPathArray","element","supportedShapes","targetIsElement","tagName","type","shapeAttrs","config","shapeToPath","replace","ownerDocument","doc","description","name","value","getSVGMatrix","transform","matrix","CSSMatrix","origin","originX","originY","translate","rotate","skew","scale","shortenSegment","prevCommand","defaultRound","normalValues","nx","ny","nx1","ny1","roundSegment","optimizePath","optimParams","allPathCommands","normalizedSegment","shortSegment","absSegment","absString","relativeSegment","relSegment","relString","translatePoint","cssm","projection2d","point2D","originZ","relativePositionX","relativePositionY","relativePositionZ","reverseCurve","rotatedCurve","curveOnly","reversePath","absolutePath","normalizedPath","pLen","isClosed","reversedPath","prevSeg","nextSeg","nextCommand","roundPath","splitCubic","pts","ratio","p0","p5","p6","p7","p8","p9","splitPath","composite","pi","transformPath","lx","ly","jj","transformProps","matrixInstance","isLongArc","tempSegment","SVGPathCommander","instanceOptions","undefPath","originOption","onlySubpath","split","subPath","absoluteMultiPath","source","cz","key","__publicField","arcTools","distanceEpsilon","pathParser"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"svg-path-commander.mjs","sources":["../node_modules/@thednp/dommatrix/dist/dommatrix.mjs","../src/options/options.ts","../src/parser/paramsCount.ts","../src/parser/finalizeSegment.ts","../src/parser/error.ts","../src/parser/scanFlag.ts","../src/parser/isDigit.ts","../src/parser/invalidPathValue.ts","../src/parser/scanParam.ts","../src/parser/isSpace.ts","../src/parser/skipSpaces.ts","../src/parser/isPathCommand.ts","../src/parser/isDigitStart.ts","../src/parser/isArcCommand.ts","../src/parser/isMoveCommand.ts","../src/parser/scanSegment.ts","../src/parser/pathParser.ts","../src/parser/parsePathString.ts","../src/process/absolutizeSegment.ts","../src/process/iterate.ts","../src/convert/pathToAbsolute.ts","../src/process/relativizeSegment.ts","../src/convert/pathToRelative.ts","../src/math/rotateVector.ts","../src/process/arcToCubic.ts","../src/process/quadToCubic.ts","../src/math/midPoint.ts","../src/process/lineToCubic.ts","../src/process/segmentToCubic.ts","../src/process/normalizeSegment.ts","../src/parser/paramsParser.ts","../src/convert/pathToCurve.ts","../src/math/roundTo.ts","../src/convert/pathToString.ts","../src/math/distanceSquareRoot.ts","../src/math/lineTools.ts","../src/math/arcTools.ts","../src/math/bezier.ts","../src/math/cubicTools.ts","../src/math/quadTools.ts","../src/math/polygonTools.ts","../src/util/distanceEpsilon.ts","../src/process/normalizePath.ts","../src/util/getPointAtLength.ts","../src/util/getTotalLength.ts","../src/util/getPropertiesAtLength.ts","../src/util/getPropertiesAtPoint.ts","../src/util/getClosestPoint.ts","../src/util/getPathArea.ts","../src/util/getDrawDirection.ts","../src/util/getPathBBox.ts","../src/util/getSegmentAtLength.ts","../src/util/getSegmentOfPoint.ts","../src/util/isPathArray.ts","../src/util/isAbsoluteArray.ts","../src/util/isNormalizedArray.ts","../src/util/isCurveArray.ts","../src/util/isPointInStroke.ts","../src/util/isRelativeArray.ts","../src/util/isValidPath.ts","../src/util/shapeParams.ts","../src/util/isElement.ts","../src/util/shapeToPathArray.ts","../src/util/shapeToPath.ts","../src/process/getSVGMatrix.ts","../src/process/shortenSegment.ts","../src/process/roundSegment.ts","../src/process/optimizePath.ts","../src/process/projection2d.ts","../src/process/reverseCurve.ts","../src/process/reversePath.ts","../src/process/roundPath.ts","../src/process/splitCubic.ts","../src/process/splitPath.ts","../src/process/transformPath.ts","../src/index.ts"],"sourcesContent":["var Z = Object.defineProperty;\nvar z = (s, t, e) => t in s ? Z(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e;\nvar p = (s, t, e) => z(s, typeof t != \"symbol\" ? t + \"\" : t, e);\nconst $ = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: 0,\n f: 0,\n m11: 1,\n m12: 0,\n m13: 0,\n m14: 0,\n m21: 0,\n m22: 1,\n m23: 0,\n m24: 0,\n m31: 0,\n m32: 0,\n m33: 1,\n m34: 0,\n m41: 0,\n m42: 0,\n m43: 0,\n m44: 1,\n is2D: !0,\n isIdentity: !0\n}, E = (s) => (s instanceof Float64Array || s instanceof Float32Array || Array.isArray(s) && s.every((t) => typeof t == \"number\")) && [6, 16].some((t) => s.length === t), P = (s) => s instanceof DOMMatrix || s instanceof y || typeof s == \"object\" && Object.keys($).every((t) => s && t in s), g = (s) => {\n const t = new y(), e = Array.from(s);\n if (!E(e))\n throw TypeError(\n `CSSMatrix: \"${e.join(\",\")}\" must be an array with 6/16 numbers.`\n );\n // istanbul ignore else @preserve\n if (e.length === 16) {\n const [\n n,\n i,\n r,\n a,\n l,\n m,\n h,\n c,\n u,\n f,\n w,\n o,\n d,\n A,\n M,\n b\n ] = e;\n t.m11 = n, t.a = n, t.m21 = l, t.c = l, t.m31 = u, t.m41 = d, t.e = d, t.m12 = i, t.b = i, t.m22 = m, t.d = m, t.m32 = f, t.m42 = A, t.f = A, t.m13 = r, t.m23 = h, t.m33 = w, t.m43 = M, t.m14 = a, t.m24 = c, t.m34 = o, t.m44 = b;\n } else if (e.length === 6) {\n const [n, i, r, a, l, m] = e;\n t.m11 = n, t.a = n, t.m12 = i, t.b = i, t.m21 = r, t.c = r, t.m22 = a, t.d = a, t.m41 = l, t.e = l, t.m42 = m, t.f = m;\n }\n return t;\n}, X = (s) => {\n if (P(s))\n return g([\n s.m11,\n s.m12,\n s.m13,\n s.m14,\n s.m21,\n s.m22,\n s.m23,\n s.m24,\n s.m31,\n s.m32,\n s.m33,\n s.m34,\n s.m41,\n s.m42,\n s.m43,\n s.m44\n ]);\n throw TypeError(\n `CSSMatrix: \"${JSON.stringify(s)}\" is not a DOMMatrix / CSSMatrix / JSON compatible object.`\n );\n}, O = (s) => {\n if (typeof s != \"string\")\n throw TypeError(`CSSMatrix: \"${JSON.stringify(s)}\" is not a string.`);\n const t = String(s).replace(/\\s/g, \"\");\n let e = new y();\n const n = `CSSMatrix: invalid transform string \"${s}\"`;\n return t.split(\")\").filter((i) => i).forEach((i) => {\n const [r, a] = i.split(\"(\");\n if (!a) throw TypeError(n);\n const l = a.split(\",\").map(\n (o) => o.includes(\"rad\") ? parseFloat(o) * (180 / Math.PI) : parseFloat(o)\n ), [m, h, c, u] = l, f = [m, h, c], w = [m, h, c, u];\n if (r === \"perspective\" && m && [h, c].every((o) => o === void 0))\n e.m34 = -1 / m;\n else if (r.includes(\"matrix\") && [6, 16].includes(l.length) && l.every((o) => !Number.isNaN(+o))) {\n const o = l.map((d) => Math.abs(d) < 1e-6 ? 0 : d);\n e = e.multiply(g(o));\n } else if (r === \"translate3d\" && f.every((o) => !Number.isNaN(+o)))\n e = e.translate(m, h, c);\n else if (r === \"translate\" && m && c === void 0)\n e = e.translate(m, h || 0, 0);\n else if (r === \"rotate3d\" && w.every((o) => !Number.isNaN(+o)) && u)\n e = e.rotateAxisAngle(m, h, c, u);\n else if (r === \"rotate\" && m && [h, c].every((o) => o === void 0))\n e = e.rotate(0, 0, m);\n else if (r === \"scale3d\" && f.every((o) => !Number.isNaN(+o)) && f.some((o) => o !== 1))\n e = e.scale(m, h, c);\n else if (\n // prop === \"scale\" && !Number.isNaN(x) && x !== 1 && z === undefined\n // prop === \"scale\" && !Number.isNaN(x) && [x, y].some((n) => n !== 1) &&\n r === \"scale\" && !Number.isNaN(m) && (m !== 1 || h !== 1) && c === void 0\n ) {\n const d = Number.isNaN(+h) ? m : h;\n e = e.scale(m, d, 1);\n } else if (r === \"skew\" && (m || !Number.isNaN(m) && h) && c === void 0)\n e = e.skew(m, h || 0);\n else if ([\"translate\", \"rotate\", \"scale\", \"skew\"].some(\n (o) => r.includes(o)\n ) && /[XYZ]/.test(r) && m && [h, c].every((o) => o === void 0))\n if (r === \"skewX\" || r === \"skewY\")\n e = e[r](m);\n else {\n const o = r.replace(/[XYZ]/, \"\"), d = r.replace(o, \"\"), A = [\"X\", \"Y\", \"Z\"].indexOf(d), M = o === \"scale\" ? 1 : 0, b = [\n A === 0 ? m : M,\n A === 1 ? m : M,\n A === 2 ? m : M\n ];\n e = e[o](...b);\n }\n else\n throw TypeError(n);\n }), e;\n}, x = (s, t) => t ? [s.a, s.b, s.c, s.d, s.e, s.f] : [\n s.m11,\n s.m12,\n s.m13,\n s.m14,\n s.m21,\n s.m22,\n s.m23,\n s.m24,\n s.m31,\n s.m32,\n s.m33,\n s.m34,\n s.m41,\n s.m42,\n s.m43,\n s.m44\n], Y = (s, t, e) => {\n const n = new y();\n return n.m41 = s, n.e = s, n.m42 = t, n.f = t, n.m43 = e, n;\n}, F = (s, t, e) => {\n const n = new y(), i = Math.PI / 180, r = s * i, a = t * i, l = e * i, m = Math.cos(r), h = -Math.sin(r), c = Math.cos(a), u = -Math.sin(a), f = Math.cos(l), w = -Math.sin(l), o = c * f, d = -c * w;\n n.m11 = o, n.a = o, n.m12 = d, n.b = d, n.m13 = u;\n const A = h * u * f + m * w;\n n.m21 = A, n.c = A;\n const M = m * f - h * u * w;\n return n.m22 = M, n.d = M, n.m23 = -h * c, n.m31 = h * w - m * u * f, n.m32 = h * f + m * u * w, n.m33 = m * c, n;\n}, T = (s, t, e, n) => {\n const i = new y(), r = Math.sqrt(s * s + t * t + e * e);\n if (r === 0)\n return i;\n const a = s / r, l = t / r, m = e / r, h = n * (Math.PI / 360), c = Math.sin(h), u = Math.cos(h), f = c * c, w = a * a, o = l * l, d = m * m, A = 1 - 2 * (o + d) * f;\n i.m11 = A, i.a = A;\n const M = 2 * (a * l * f + m * c * u);\n i.m12 = M, i.b = M, i.m13 = 2 * (a * m * f - l * c * u);\n const b = 2 * (l * a * f - m * c * u);\n i.m21 = b, i.c = b;\n const k = 1 - 2 * (d + w) * f;\n return i.m22 = k, i.d = k, i.m23 = 2 * (l * m * f + a * c * u), i.m31 = 2 * (m * a * f + l * c * u), i.m32 = 2 * (m * l * f - a * c * u), i.m33 = 1 - 2 * (w + o) * f, i;\n}, I = (s, t, e) => {\n const n = new y();\n return n.m11 = s, n.a = s, n.m22 = t, n.d = t, n.m33 = e, n;\n}, v = (s, t) => {\n const e = new y();\n if (s) {\n const n = s * Math.PI / 180, i = Math.tan(n);\n e.m21 = i, e.c = i;\n }\n if (t) {\n const n = t * Math.PI / 180, i = Math.tan(n);\n e.m12 = i, e.b = i;\n }\n return e;\n}, R = (s) => v(s, 0), D = (s) => v(0, s), N = (s, t) => {\n const e = t.m11 * s.m11 + t.m12 * s.m21 + t.m13 * s.m31 + t.m14 * s.m41, n = t.m11 * s.m12 + t.m12 * s.m22 + t.m13 * s.m32 + t.m14 * s.m42, i = t.m11 * s.m13 + t.m12 * s.m23 + t.m13 * s.m33 + t.m14 * s.m43, r = t.m11 * s.m14 + t.m12 * s.m24 + t.m13 * s.m34 + t.m14 * s.m44, a = t.m21 * s.m11 + t.m22 * s.m21 + t.m23 * s.m31 + t.m24 * s.m41, l = t.m21 * s.m12 + t.m22 * s.m22 + t.m23 * s.m32 + t.m24 * s.m42, m = t.m21 * s.m13 + t.m22 * s.m23 + t.m23 * s.m33 + t.m24 * s.m43, h = t.m21 * s.m14 + t.m22 * s.m24 + t.m23 * s.m34 + t.m24 * s.m44, c = t.m31 * s.m11 + t.m32 * s.m21 + t.m33 * s.m31 + t.m34 * s.m41, u = t.m31 * s.m12 + t.m32 * s.m22 + t.m33 * s.m32 + t.m34 * s.m42, f = t.m31 * s.m13 + t.m32 * s.m23 + t.m33 * s.m33 + t.m34 * s.m43, w = t.m31 * s.m14 + t.m32 * s.m24 + t.m33 * s.m34 + t.m34 * s.m44, o = t.m41 * s.m11 + t.m42 * s.m21 + t.m43 * s.m31 + t.m44 * s.m41, d = t.m41 * s.m12 + t.m42 * s.m22 + t.m43 * s.m32 + t.m44 * s.m42, A = t.m41 * s.m13 + t.m42 * s.m23 + t.m43 * s.m33 + t.m44 * s.m43, M = t.m41 * s.m14 + t.m42 * s.m24 + t.m43 * s.m34 + t.m44 * s.m44;\n return g([\n e,\n n,\n i,\n r,\n a,\n l,\n m,\n h,\n c,\n u,\n f,\n w,\n o,\n d,\n A,\n M\n ]);\n};\nclass y {\n /**\n * @constructor\n * @param init accepts all parameter configurations:\n * * valid CSS transform string,\n * * CSSMatrix/DOMMatrix instance,\n * * a 6/16 elements *Array*.\n */\n constructor(t) {\n return this.a = 1, this.b = 0, this.c = 0, this.d = 1, this.e = 0, this.f = 0, this.m11 = 1, this.m12 = 0, this.m13 = 0, this.m14 = 0, this.m21 = 0, this.m22 = 1, this.m23 = 0, this.m24 = 0, this.m31 = 0, this.m32 = 0, this.m33 = 1, this.m34 = 0, this.m41 = 0, this.m42 = 0, this.m43 = 0, this.m44 = 1, t ? this.setMatrixValue(t) : this;\n }\n /**\n * A `Boolean` whose value is `true` if the matrix is the identity matrix. The identity\n * matrix is one in which every value is 0 except those on the main diagonal from top-left\n * to bottom-right corner (in other words, where the offsets in each direction are equal).\n *\n * @return the current property value\n */\n get isIdentity() {\n return this.m11 === 1 && this.m12 === 0 && this.m13 === 0 && this.m14 === 0 && this.m21 === 0 && this.m22 === 1 && this.m23 === 0 && this.m24 === 0 && this.m31 === 0 && this.m32 === 0 && this.m33 === 1 && this.m34 === 0 && this.m41 === 0 && this.m42 === 0 && this.m43 === 0 && this.m44 === 1;\n }\n /**\n * A `Boolean` flag whose value is `true` if the matrix was initialized as a 2D matrix\n * and `false` if the matrix is 3D.\n *\n * @return the current property value\n */\n get is2D() {\n return this.m31 === 0 && this.m32 === 0 && this.m33 === 1 && this.m34 === 0 && this.m43 === 0 && this.m44 === 1;\n }\n /**\n * The `setMatrixValue` method replaces the existing matrix with one computed\n * in the browser. EG: `matrix(1,0.25,-0.25,1,0,0)`\n *\n * The method accepts any *Array* values, the result of\n * `DOMMatrix` instance method `toFloat64Array()` / `toFloat32Array()` calls\n * or `CSSMatrix` instance method `toArray()`.\n *\n * This method expects valid *matrix()* / *matrix3d()* string values, as well\n * as other transform functions like *translateX(10px)*.\n *\n * @param source\n * @return the matrix instance\n */\n setMatrixValue(t) {\n return typeof t == \"string\" && t.length && t !== \"none\" ? O(t) : Array.isArray(t) || t instanceof Float64Array || t instanceof Float32Array ? g(t) : typeof t == \"object\" ? X(t) : this;\n }\n /**\n * Returns a *Float32Array* containing elements which comprise the matrix.\n * The method can return either the 16 elements or the 6 elements\n * depending on the value of the `is2D` parameter.\n *\n * @param is2D *Array* representation of the matrix\n * @return an *Array* representation of the matrix\n */\n toFloat32Array(t) {\n return Float32Array.from(x(this, t));\n }\n /**\n * Returns a *Float64Array* containing elements which comprise the matrix.\n * The method can return either the 16 elements or the 6 elements\n * depending on the value of the `is2D` parameter.\n *\n * @param is2D *Array* representation of the matrix\n * @return an *Array* representation of the matrix\n */\n toFloat64Array(t) {\n return Float64Array.from(x(this, t));\n }\n /**\n * Creates and returns a string representation of the matrix in `CSS` matrix syntax,\n * using the appropriate `CSS` matrix notation.\n *\n * matrix3d *matrix3d(m11, m12, m13, m14, m21, ...)*\n * matrix *matrix(a, b, c, d, e, f)*\n *\n * @return a string representation of the matrix\n */\n toString() {\n const { is2D: t } = this, e = this.toFloat64Array(t).join(\", \");\n return `${t ? \"matrix\" : \"matrix3d\"}(${e})`;\n }\n /**\n * Returns a JSON representation of the `CSSMatrix` instance, a standard *Object*\n * that includes `{a,b,c,d,e,f}` and `{m11,m12,m13,..m44}` properties as well\n * as the `is2D` & `isIdentity` properties.\n *\n * The result can also be used as a second parameter for the `fromMatrix` static method\n * to load values into another matrix instance.\n *\n * @return an *Object* with all matrix values.\n */\n toJSON() {\n const { is2D: t, isIdentity: e } = this;\n return { ...this, is2D: t, isIdentity: e };\n }\n /**\n * The Multiply method returns a new CSSMatrix which is the result of this\n * matrix multiplied by the passed matrix, with the passed matrix to the right.\n * This matrix is not modified.\n *\n * @param m2 CSSMatrix\n * @return The resulted matrix.\n */\n multiply(t) {\n return N(this, t);\n }\n /**\n * The translate method returns a new matrix which is this matrix post\n * multiplied by a translation matrix containing the passed values. If the z\n * component is undefined, a 0 value is used in its place. This matrix is not\n * modified.\n *\n * @param x X component of the translation value.\n * @param y Y component of the translation value.\n * @param z Z component of the translation value.\n * @return The resulted matrix\n */\n translate(t, e, n) {\n const i = t;\n let r = e, a = n;\n return typeof r > \"u\" && (r = 0), typeof a > \"u\" && (a = 0), N(this, Y(i, r, a));\n }\n /**\n * The scale method returns a new matrix which is this matrix post multiplied by\n * a scale matrix containing the passed values. If the z component is undefined,\n * a 1 value is used in its place. If the y component is undefined, the x\n * component value is used in its place. This matrix is not modified.\n *\n * @param x The X component of the scale value.\n * @param y The Y component of the scale value.\n * @param z The Z component of the scale value.\n * @return The resulted matrix\n */\n scale(t, e, n) {\n const i = t;\n let r = e, a = n;\n return typeof r > \"u\" && (r = t), typeof a > \"u\" && (a = 1), N(this, I(i, r, a));\n }\n /**\n * The rotate method returns a new matrix which is this matrix post multiplied\n * by each of 3 rotation matrices about the major axes, first X, then Y, then Z.\n * If the y and z components are undefined, the x value is used to rotate the\n * object about the z axis, as though the vector (0,0,x) were passed. All\n * rotation values are in degrees. This matrix is not modified.\n *\n * @param rx The X component of the rotation, or Z if Y and Z are null.\n * @param ry The (optional) Y component of the rotation value.\n * @param rz The (optional) Z component of the rotation value.\n * @return The resulted matrix\n */\n rotate(t, e, n) {\n let i = t, r = e || 0, a = n || 0;\n return typeof t == \"number\" && typeof e > \"u\" && typeof n > \"u\" && (a = i, i = 0, r = 0), N(this, F(i, r, a));\n }\n /**\n * The rotateAxisAngle method returns a new matrix which is this matrix post\n * multiplied by a rotation matrix with the given axis and `angle`. The right-hand\n * rule is used to determine the direction of rotation. All rotation values are\n * in degrees. This matrix is not modified.\n *\n * @param x The X component of the axis vector.\n * @param y The Y component of the axis vector.\n * @param z The Z component of the axis vector.\n * @param angle The angle of rotation about the axis vector, in degrees.\n * @return The resulted matrix\n */\n rotateAxisAngle(t, e, n, i) {\n if ([t, e, n, i].some((r) => Number.isNaN(+r)))\n throw new TypeError(\"CSSMatrix: expecting 4 values\");\n return N(this, T(t, e, n, i));\n }\n /**\n * Specifies a skew transformation along the `x-axis` by the given angle.\n * This matrix is not modified.\n *\n * @param angle The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skewX(t) {\n return N(this, R(t));\n }\n /**\n * Specifies a skew transformation along the `y-axis` by the given angle.\n * This matrix is not modified.\n *\n * @param angle The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skewY(t) {\n return N(this, D(t));\n }\n /**\n * Specifies a skew transformation along both the `x-axis` and `y-axis`.\n * This matrix is not modified.\n *\n * @param angleX The X-angle amount in degrees to skew.\n * @param angleY The angle amount in degrees to skew.\n * @return The resulted matrix\n */\n skew(t, e) {\n return N(this, v(t, e));\n }\n /**\n * Transforms a specified vector using the matrix, returning a new\n * {x,y,z,w} Tuple *Object* comprising the transformed vector.\n * Neither the matrix nor the original vector are altered.\n *\n * The method is equivalent with `transformPoint()` method\n * of the `DOMMatrix` constructor.\n *\n * @param t Tuple with `{x,y,z,w}` components\n * @return the resulting Tuple\n */\n transformPoint(t) {\n const e = this.m11 * t.x + this.m21 * t.y + this.m31 * t.z + this.m41 * t.w, n = this.m12 * t.x + this.m22 * t.y + this.m32 * t.z + this.m42 * t.w, i = this.m13 * t.x + this.m23 * t.y + this.m33 * t.z + this.m43 * t.w, r = this.m14 * t.x + this.m24 * t.y + this.m34 * t.z + this.m44 * t.w;\n return t instanceof DOMPoint ? new DOMPoint(e, n, i, r) : {\n x: e,\n y: n,\n z: i,\n w: r\n };\n }\n}\np(y, \"Translate\", Y), p(y, \"Rotate\", F), p(y, \"RotateAxisAngle\", T), p(y, \"Scale\", I), p(y, \"SkewX\", R), p(y, \"SkewY\", D), p(y, \"Skew\", v), p(y, \"Multiply\", N), p(y, \"fromArray\", g), p(y, \"fromMatrix\", X), p(y, \"fromString\", O), p(y, \"toArray\", x), p(y, \"isCompatibleArray\", E), p(y, \"isCompatibleObject\", P);\nexport {\n y as default\n};\n//# sourceMappingURL=dommatrix.mjs.map\n","import { Options } from \"../interface\";\r\n\r\n/** SVGPathCommander default options */\r\nconst defaultOptions: Options = {\r\n origin: [0, 0, 0],\r\n round: 4,\r\n};\r\n\r\nexport default defaultOptions;\r\n","/** Segment params length */\r\nconst paramsCount = {\r\n a: 7,\r\n c: 6,\r\n h: 1,\r\n l: 2,\r\n m: 2,\r\n r: 4,\r\n q: 4,\r\n s: 4,\r\n t: 2,\r\n v: 1,\r\n z: 0,\r\n};\r\n\r\nexport default paramsCount;\r\n","import paramsCount from \"./paramsCount\";\r\nimport PathParser from \"./pathParser\";\r\nimport type { PathCommand, PathSegment, RelativeCommand } from \"../types\";\r\n\r\n/**\r\n * Breaks the parsing of a pathString once a segment is finalized.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst finalizeSegment = (path: PathParser) => {\r\n let pathCommand = path.pathValue[path.segmentStart] as PathCommand;\r\n let relativeCommand = pathCommand.toLowerCase() as RelativeCommand;\r\n const { data } = path;\r\n\r\n while (data.length >= paramsCount[relativeCommand]) {\r\n // overloaded `moveTo`\r\n // https://github.com/rveciana/svg-path-properties/blob/master/src/parse.ts\r\n if (relativeCommand === \"m\" && data.length > 2) {\r\n path.segments.push(\r\n [pathCommand as PathCommand | number].concat(\r\n data.splice(0, 2) as number[],\r\n ) as PathSegment,\r\n );\r\n relativeCommand = \"l\";\r\n pathCommand = pathCommand === \"m\" ? \"l\" : \"L\";\r\n } else {\r\n path.segments.push(\r\n [pathCommand as PathCommand | number].concat(\r\n data.splice(0, paramsCount[relativeCommand]) as number[],\r\n ) as PathSegment,\r\n );\r\n }\r\n\r\n if (!paramsCount[relativeCommand]) {\r\n break;\r\n }\r\n }\r\n};\r\nexport default finalizeSegment;\r\n","const error = \"SVGPathCommander Error\";\r\nexport default error;\r\n","import error from \"./error\";\r\nimport type PathParser from \"./pathParser\";\r\n\r\n/**\r\n * Validates an A (arc-to) specific path command value.\r\n * Usually a `large-arc-flag` or `sweep-flag`.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst scanFlag = (path: PathParser) => {\r\n const { index, pathValue } = path;\r\n const code = pathValue.charCodeAt(index);\r\n\r\n if (code === 0x30 /* 0 */) {\r\n path.param = 0;\r\n path.index += 1;\r\n return;\r\n }\r\n\r\n if (code === 0x31 /* 1 */) {\r\n path.param = 1;\r\n path.index += 1;\r\n return;\r\n }\r\n\r\n path.err = `${error}: invalid Arc flag \"${\r\n pathValue[index]\r\n }\", expecting 0 or 1 at index ${index}`;\r\n};\r\n\r\nexport default scanFlag;\r\n","import { DigitNumber } from \"../types\";\r\n\r\n/**\r\n * Checks if a character is a digit.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isDigit = (code: number): code is DigitNumber => {\r\n return code >= 48 && code <= 57; // 0..9\r\n};\r\nexport default isDigit;\r\n","const invalidPathValue = \"Invalid path value\";\r\nexport default invalidPathValue;\r\n","import isDigit from \"./isDigit\";\r\nimport invalidPathValue from \"./invalidPathValue\";\r\nimport error from \"./error\";\r\nimport type PathParser from \"./pathParser\";\r\n\r\n/**\r\n * Validates every character of the path string,\r\n * every path command, negative numbers or floating point numbers.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst scanParam = (path: PathParser) => {\r\n const { max, pathValue, index: start } = path;\r\n let index = start;\r\n let zeroFirst = false;\r\n let hasCeiling = false;\r\n let hasDecimal = false;\r\n let hasDot = false;\r\n let ch;\r\n\r\n if (index >= max) {\r\n path.err =\r\n `${error}: ${invalidPathValue} at index ${index}, \"pathValue\" is missing param`;\r\n return;\r\n }\r\n ch = pathValue.charCodeAt(index);\r\n\r\n if (ch === 0x2b /* + */ || ch === 0x2d /* - */) {\r\n index += 1;\r\n // ch = (index < max) ? pathValue.charCodeAt(index) : 0;\r\n ch = pathValue.charCodeAt(index);\r\n }\r\n\r\n // This logic is shamelessly borrowed from Esprima\r\n // https://github.com/ariya/esprimas\r\n if (!isDigit(ch) && ch !== 0x2e /* . */) {\r\n // path.err = 'SvgPath: param should start with 0..9 or `.` (at pos ' + index + ')';\r\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\r\n pathValue[index]\r\n }\" is not a number`;\r\n return;\r\n }\r\n\r\n if (ch !== 0x2e /* . */) {\r\n zeroFirst = ch === 0x30 /* 0 */;\r\n index += 1;\r\n\r\n ch = pathValue.charCodeAt(index);\r\n\r\n if (zeroFirst && index < max) {\r\n // decimal number starts with '0' such as '09' is illegal.\r\n if (ch && isDigit(ch)) {\r\n // path.err = 'SvgPath: numbers started with `0` such as `09`\r\n // are illegal (at pos ' + start + ')';\r\n path.err = `${error}: ${invalidPathValue} at index ${start}, \"${\r\n pathValue[start]\r\n }\" illegal number`;\r\n return;\r\n }\r\n }\r\n\r\n while (index < max && isDigit(pathValue.charCodeAt(index))) {\r\n index += 1;\r\n hasCeiling = true;\r\n }\r\n\r\n ch = pathValue.charCodeAt(index);\r\n }\r\n\r\n if (ch === 0x2e /* . */) {\r\n hasDot = true;\r\n index += 1;\r\n while (isDigit(pathValue.charCodeAt(index))) {\r\n index += 1;\r\n hasDecimal = true;\r\n }\r\n\r\n ch = pathValue.charCodeAt(index);\r\n }\r\n\r\n if (ch === 0x65 /* e */ || ch === 0x45 /* E */) {\r\n if (hasDot && !hasCeiling && !hasDecimal) {\r\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\r\n pathValue[index]\r\n }\" invalid float exponent`;\r\n return;\r\n }\r\n\r\n index += 1;\r\n\r\n ch = pathValue.charCodeAt(index);\r\n\r\n if (ch === 0x2b /* + */ || ch === 0x2d /* - */) {\r\n index += 1;\r\n }\r\n if (index < max && isDigit(pathValue.charCodeAt(index))) {\r\n while (index < max && isDigit(pathValue.charCodeAt(index))) {\r\n index += 1;\r\n }\r\n } else {\r\n path.err = `${error}: ${invalidPathValue} at index ${index}, \"${\r\n pathValue[index]\r\n }\" invalid integer exponent`;\r\n return;\r\n }\r\n }\r\n\r\n path.index = index;\r\n path.param = +path.pathValue.slice(start, index);\r\n};\r\nexport default scanParam;\r\n","import type { SpaceNumber } from \"../types\";\r\n\r\n/**\r\n * Checks if the character is a space.\r\n *\r\n * @param ch the character to check\r\n * @returns check result\r\n */\r\n\r\nconst isSpace = (ch: number): ch is SpaceNumber => {\r\n const allSpaces = [\r\n // Special spaces\r\n 0x1680,\r\n 0x180e,\r\n 0x2000,\r\n 0x2001,\r\n 0x2002,\r\n 0x2003,\r\n 0x2004,\r\n 0x2005,\r\n 0x2006,\r\n 0x2007,\r\n 0x2008,\r\n 0x2009,\r\n 0x200a,\r\n 0x202f,\r\n 0x205f,\r\n 0x3000,\r\n 0xfeff,\r\n // Line terminators\r\n 0x0a,\r\n 0x0d,\r\n 0x2028,\r\n 0x2029,\r\n // White spaces\r\n 0x20,\r\n 0x09,\r\n 0x0b,\r\n 0x0c,\r\n 0xa0,\r\n ];\r\n\r\n return allSpaces.includes(ch);\r\n};\r\nexport default isSpace;\r\n","import isSpace from \"./isSpace\";\r\nimport type PathParser from \"./pathParser\";\r\n\r\n/**\r\n * Points the parser to the next character in the\r\n * path string every time it encounters any kind of\r\n * space character.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst skipSpaces = (path: PathParser) => {\r\n const { pathValue, max } = path;\r\n while (path.index < max && isSpace(pathValue.charCodeAt(path.index))) {\r\n path.index += 1;\r\n }\r\n};\r\nexport default skipSpaces;\r\n","import type { PathCommandNumber } from \"../types\";\r\n\r\n/**\r\n * Checks if the character is a path command.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isPathCommand = (code: number): code is PathCommandNumber => {\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\r\n switch (code | 0x20) {\r\n case 0x6d /* m */:\r\n case 0x7a /* z */:\r\n case 0x6c /* l */:\r\n case 0x68 /* h */:\r\n case 0x76 /* v */:\r\n case 0x63 /* c */:\r\n case 0x73 /* s */:\r\n case 0x71 /* q */:\r\n case 0x74 /* t */:\r\n case 0x61 /* a */:\r\n // case 0x72/* r */:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n};\r\nexport default isPathCommand;\r\n","import isDigit from \"./isDigit\";\r\nimport type { DigitNumber } from \"../types\";\r\n\r\n/**\r\n * Checks if the character is or belongs to a number.\r\n * [0-9]|+|-|.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isDigitStart = (\r\n code: number,\r\n): code is DigitNumber | 0x2b | 0x2d | 0x2e => {\r\n return isDigit(code) /* 0..9 */ || code === 0x2b /* + */ ||\r\n code === 0x2d /* - */ || code === 0x2e; /* . */\r\n};\r\nexport default isDigitStart;\r\n","/**\r\n * Checks if the character is an A (arc-to) path command.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isArcCommand = (code: number): code is 0x61 => {\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\r\n return (code | 0x20) === 0x61;\r\n};\r\nexport default isArcCommand;\r\n","/**\r\n * Checks if the character is a MoveTo command.\r\n *\r\n * @param code the character to check\r\n * @returns check result\r\n */\r\nconst isMoveCommand = (code: number): code is 0x6d | 0x4d => {\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy\r\n switch (code | 0x20) {\r\n case 0x6d /* m */:\r\n case 0x4d /* M */:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n};\r\nexport default isMoveCommand;\r\n","import finalizeSegment from \"./finalizeSegment\";\r\nimport paramCounts from \"./paramsCount\";\r\nimport scanFlag from \"./scanFlag\";\r\nimport scanParam from \"./scanParam\";\r\nimport skipSpaces from \"./skipSpaces\";\r\nimport isPathCommand from \"./isPathCommand\";\r\nimport isDigitStart from \"./isDigitStart\";\r\nimport isArcCommand from \"./isArcCommand\";\r\nimport isMoveCommand from \"./isMoveCommand\";\r\nimport invalidPathValue from \"./invalidPathValue\";\r\nimport error from \"./error\";\r\n\r\nimport type PathParser from \"./pathParser\";\r\nimport type { PathSegment, RelativeCommand } from \"../types\";\r\n\r\n/**\r\n * Scans every character in the path string to determine\r\n * where a segment starts and where it ends.\r\n *\r\n * @param path the `PathParser` instance\r\n */\r\nconst scanSegment = (path: PathParser) => {\r\n const { max, pathValue, index, segments } = path;\r\n const cmdCode = pathValue.charCodeAt(index);\r\n const reqParams =\r\n paramCounts[pathValue[index].toLowerCase() as RelativeCommand];\r\n\r\n path.segmentStart = index;\r\n\r\n // segments always start with a path command\r\n if (!isPathCommand(cmdCode)) {\r\n path.err = `${error}: ${invalidPathValue} \"${\r\n pathValue[index]\r\n }\" is not a path command at index ${index}`;\r\n return;\r\n }\r\n\r\n // after a Z segment, we only expect a MoveTo path command\r\n const lastSegment = segments[segments.length - 1] as PathSegment | undefined;\r\n if (\r\n !isMoveCommand(cmdCode) && lastSegment?.[0]?.toLocaleLowerCase() === \"z\"\r\n ) {\r\n path.err = `${error}: ${invalidPathValue} \"${\r\n pathValue[index]\r\n }\" is not a MoveTo path command at index ${index}`;\r\n return;\r\n }\r\n\r\n path.index += 1;\r\n skipSpaces(path);\r\n\r\n path.data = [];\r\n\r\n if (!reqParams) {\r\n // Z\r\n finalizeSegment(path);\r\n return;\r\n }\r\n\r\n for (;;) {\r\n for (let i = reqParams; i > 0; i -= 1) {\r\n if (isArcCommand(cmdCode) && (i === 3 || i === 4)) scanFlag(path);\r\n else scanParam(path);\r\n\r\n if (path.err.length) {\r\n return;\r\n }\r\n path.data.push(path.param);\r\n\r\n skipSpaces(path);\r\n\r\n // after ',' param is mandatory\r\n if (\r\n path.index < max && pathValue.charCodeAt(path.index) === 0x2c /* , */\r\n ) {\r\n path.index += 1;\r\n skipSpaces(path);\r\n }\r\n }\r\n\r\n if (path.index >= path.max) {\r\n break;\r\n }\r\n\r\n // Stop on next segment\r\n if (!isDigitStart(pathValue.charCodeAt(path.index))) {\r\n break;\r\n }\r\n }\r\n\r\n finalizeSegment(path);\r\n};\r\nexport default scanSegment;\r\n","import type { PathArray, PathSegment } from \"../types\";\r\n\r\n/**\r\n * The `PathParser` is used by the `parsePathString` static method\r\n * to generate a `pathArray`.\r\n *\r\n * @param pathString\r\n */\r\nexport default class PathParser {\r\n declare segments: PathArray | PathSegment[];\r\n declare pathValue: string;\r\n declare max: number;\r\n declare index: number;\r\n declare param: number;\r\n declare segmentStart: number;\r\n declare data: (string | number)[];\r\n declare err: string;\r\n\r\n constructor(pathString: string) {\r\n this.segments = [];\r\n this.pathValue = pathString;\r\n this.max = pathString.length;\r\n this.index = 0;\r\n this.param = 0.0;\r\n this.segmentStart = 0;\r\n this.data = [];\r\n this.err = \"\";\r\n }\r\n}\r\n","import scanSegment from \"./scanSegment\";\r\nimport skipSpaces from \"./skipSpaces\";\r\nimport PathParser from \"./pathParser\";\r\nimport type { PathArray } from \"../types\";\r\n\r\n/**\r\n * Parses a path string value and returns an array\r\n * of segments we like to call `pathArray`.\r\n *\r\n * @param pathInput the string to be parsed\r\n * @returns the resulted `pathArray` or error string\r\n */\r\nconst parsePathString = (pathInput: string | T) => {\r\n if (typeof pathInput !== \"string\") {\r\n return pathInput.slice(0) as typeof pathInput;\r\n }\r\n\r\n const path = new PathParser(pathInput);\r\n\r\n skipSpaces(path);\r\n\r\n while (path.index < path.max && !path.err.length) {\r\n scanSegment(path);\r\n }\r\n\r\n if (path?.err.length) {\r\n throw TypeError(path.err);\r\n }\r\n // force absolute first M\r\n path.segments[0][0]='M';\r\n return path.segments as PathArray;\r\n};\r\n\r\nexport default parsePathString;\r\n","import type {\r\n AbsoluteCommand,\r\n AbsoluteSegment,\r\n ASegment,\r\n CSegment,\r\n HSegment,\r\n LSegment,\r\n MSegment,\r\n PathSegment,\r\n QSegment,\r\n SSegment,\r\n TSegment,\r\n VSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Returns an absolute segment of a `PathArray` object.\r\n *\r\n * @param segment the segment object\r\n * @param index the segment index\r\n * @param lastX the last known X value\r\n * @param lastY the last known Y value\r\n * @returns the absolute segment\r\n */\r\nconst absolutizeSegment = (\r\n segment: PathSegment,\r\n index: number,\r\n lastX: number,\r\n lastY: number,\r\n) => {\r\n const [pathCommand] = segment;\r\n const absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\r\n const isAbsolute = absCommand === pathCommand;\r\n\r\n /* istanbul ignore else @preserve */\r\n if (index === 0 || isAbsolute) return segment as MSegment | AbsoluteSegment;\r\n // const values = segment.slice(1) as number[];\r\n if (absCommand === \"A\") {\r\n return [\r\n absCommand,\r\n segment[1],\r\n segment[2],\r\n segment[3],\r\n segment[4],\r\n segment[5],\r\n (segment as ASegment)[6] + lastX,\r\n (segment as ASegment)[7] + lastY,\r\n ] as ASegment;\r\n } else if (absCommand === \"V\") {\r\n return [absCommand, (segment as VSegment)[1] + lastY] as VSegment;\r\n } else if (absCommand === \"H\") {\r\n return [absCommand, (segment as HSegment)[1] + lastX] as HSegment;\r\n } else if (absCommand === \"L\") {\r\n return [\r\n absCommand,\r\n (segment as LSegment)[1] + lastX,\r\n (segment as LSegment)[2] + lastY,\r\n ] as LSegment;\r\n } else {\r\n // use brakets for `eslint: no-case-declaration`\r\n // https://stackoverflow.com/a/50753272/803358\r\n const absValues = [] as number[];\r\n const seglen = segment.length;\r\n for (let j = 1; j < seglen; j += 1) {\r\n absValues.push((segment[j] as number) + (j % 2 ? lastX : lastY));\r\n }\r\n // for c, s, q, t\r\n return [absCommand as typeof absCommand | number].concat(absValues) as\r\n | MSegment\r\n | QSegment\r\n | TSegment\r\n | SSegment\r\n | CSegment;\r\n }\r\n};\r\nexport default absolutizeSegment;\r\n","// import paramsParser from '../parser/paramsParser';\r\nimport type {\r\n AbsoluteCommand,\r\n IteratorCallback,\r\n PathArray,\r\n PathCommand,\r\n PathSegment,\r\n} from \"../types\";\r\n\r\nconst iterate = (\r\n path: PathArray,\r\n iterator: IteratorCallback,\r\n) => {\r\n let pathLen = path.length;\r\n let segment: PathSegment;\r\n let pathCommand = \"M\" as PathCommand;\r\n let absCommand = \"M\" as AbsoluteCommand;\r\n let isRelative = false;\r\n let x = 0;\r\n let y = 0;\r\n let mx = 0;\r\n let my = 0;\r\n let segLen = 0;\r\n\r\n for (let i = 0; i < pathLen; i += 1) {\r\n segment = path[i];\r\n [pathCommand] = segment;\r\n segLen = segment.length;\r\n absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\r\n isRelative = absCommand !== pathCommand;\r\n\r\n const iteratorResult = iterator(segment, i, x, y);\r\n // some methods like getPointAtLength would like to break\r\n // when task is complete\r\n if (iteratorResult === false) {\r\n break;\r\n }\r\n\r\n // segment = path[i];\r\n if (absCommand === \"Z\") {\r\n x = mx;\r\n y = my;\r\n } else if (absCommand === \"H\") {\r\n x = (segment[1] as number) + (isRelative ? x : 0);\r\n } else if (absCommand === \"V\") {\r\n y = (segment[1] as number) + (isRelative ? y : 0);\r\n } else {\r\n x = (segment[segLen - 2] as number) + (isRelative ? x : 0);\r\n y = (segment[segLen - 1] as number) + (isRelative ? y : 0);\r\n\r\n if (absCommand === \"M\") {\r\n mx = x;\r\n my = y;\r\n }\r\n }\r\n\r\n if (iteratorResult) {\r\n path[i] = iteratorResult;\r\n if (iteratorResult[0] === \"C\") {\r\n pathLen = path.length;\r\n }\r\n }\r\n }\r\n return path as T;\r\n};\r\n\r\nexport default iterate;\r\n","import parsePathString from \"../parser/parsePathString\";\r\nimport absolutizeSegment from \"../process/absolutizeSegment\";\r\nimport type { AbsoluteArray, PathArray } from \"../types\";\r\nimport iterate from \"../process/iterate\";\r\n\r\n/**\r\n * Parses a path string value or object and returns an array\r\n * of segments, all converted to absolute values.\r\n *\r\n * @param pathInput the path string | object\r\n * @returns the resulted `pathArray` with absolute values\r\n */\r\nconst pathToAbsolute = (pathInput: string | PathArray) => {\r\n const path = parsePathString(pathInput);\r\n\r\n return iterate(path, absolutizeSegment);\r\n};\r\nexport default pathToAbsolute;\r\n","import type {\r\n aSegment,\r\n cSegment,\r\n hSegment,\r\n lSegment,\r\n MSegment,\r\n PathSegment,\r\n qSegment,\r\n RelativeCommand,\r\n RelativeSegment,\r\n sSegment,\r\n tSegment,\r\n vSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Returns a relative segment of a `PathArray` object.\r\n *\r\n * @param segment the segment object\r\n * @param index the segment index\r\n * @param lastX the last known X value\r\n * @param lastY the last known Y value\r\n * @returns the relative segment\r\n */\r\nconst relativizeSegment = (\r\n segment: PathSegment,\r\n index: number,\r\n lastX: number,\r\n lastY: number,\r\n) => {\r\n const [pathCommand] = segment;\r\n const relCommand = pathCommand.toLowerCase() as RelativeCommand;\r\n const isRelative = pathCommand === relCommand;\r\n\r\n /* istanbul ignore else @preserve */\r\n if (index === 0 || isRelative) return segment as MSegment | RelativeSegment;\r\n\r\n if (relCommand === \"a\") {\r\n return [\r\n relCommand,\r\n segment[1],\r\n segment[2],\r\n segment[3],\r\n segment[4],\r\n segment[5],\r\n (segment as aSegment)[6] - lastX,\r\n (segment as aSegment)[7] - lastY,\r\n ] as aSegment;\r\n } else if (relCommand === \"v\") {\r\n return [relCommand, (segment as vSegment)[1] - lastY] as vSegment;\r\n } else if (relCommand === \"h\") {\r\n return [relCommand, (segment as hSegment)[1] - lastX] as hSegment;\r\n } else if (relCommand === \"l\") {\r\n return [\r\n relCommand,\r\n (segment as lSegment)[1] - lastX,\r\n (segment as lSegment)[2] - lastY,\r\n ] as lSegment;\r\n } else {\r\n // use brakets for `eslint: no-case-declaration`\r\n // https://stackoverflow.com/a/50753272/803358\r\n const relValues = [] as number[];\r\n const seglen = segment.length;\r\n for (let j = 1; j < seglen; j += 1) {\r\n relValues.push((segment[j] as number) - (j % 2 ? lastX : lastY));\r\n }\r\n // for c, s, q, t\r\n return [relCommand as RelativeCommand | number].concat(relValues) as\r\n | qSegment\r\n | tSegment\r\n | sSegment\r\n | cSegment;\r\n }\r\n};\r\n\r\nexport default relativizeSegment;\r\n","import type { PathArray, RelativeArray } from \"../types\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport iterate from \"../process/iterate\";\r\nimport relativizeSegment from \"../process/relativizeSegment\";\r\n\r\n/**\r\n * Parses a path string value or object and returns an array\r\n * of segments, all converted to relative values.\r\n *\r\n * @param pathInput the path string | object\r\n * @returns the resulted `pathArray` with relative values\r\n */\r\nconst pathToRelative = (pathInput: string | PathArray): RelativeArray => {\r\n const path = parsePathString(pathInput);\r\n\r\n return iterate(path, relativizeSegment);\r\n};\r\nexport default pathToRelative;\r\n","/**\r\n * Returns an {x,y} vector rotated by a given\r\n * angle in radian.\r\n *\r\n * @param x the initial vector x\r\n * @param y the initial vector y\r\n * @param rad the radian vector angle\r\n * @returns the rotated vector\r\n */\r\nconst rotateVector = (\r\n x: number,\r\n y: number,\r\n rad: number,\r\n): { x: number; y: number } => {\r\n const { sin, cos } = Math;\r\n const X = x * cos(rad) - y * sin(rad);\r\n const Y = x * sin(rad) + y * cos(rad);\r\n return { x: X, y: Y };\r\n};\r\n\r\nexport default rotateVector;\r\n","import rotateVector from \"../math/rotateVector\";\r\n\r\n/**\r\n * Converts A (arc-to) segments to C (cubic-bezier-to).\r\n *\r\n * For more information of where this math came from visit:\r\n * http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\r\n *\r\n * @param X1 the starting x position\r\n * @param Y1 the starting y position\r\n * @param RX x-radius of the arc\r\n * @param RY y-radius of the arc\r\n * @param angle x-axis-rotation of the arc\r\n * @param LAF large-arc-flag of the arc\r\n * @param SF sweep-flag of the arc\r\n * @param X2 the ending x position\r\n * @param Y2 the ending y position\r\n * @param recursive the parameters needed to split arc into 2 segments\r\n * @return the resulting cubic-bezier segment(s)\r\n */\r\nconst arcToCubic = (\r\n X1: number,\r\n Y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n X2: number,\r\n Y2: number,\r\n recursive?: [number, number, number, number],\r\n): number[] => {\r\n let x1 = X1;\r\n let y1 = Y1;\r\n let rx = RX;\r\n let ry = RY;\r\n let x2 = X2;\r\n let y2 = Y2;\r\n // for more information of where this Math came from visit:\r\n // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\r\n const d120 = (Math.PI * 120) / 180;\r\n\r\n const rad = (Math.PI / 180) * (+angle || 0);\r\n let res = [] as number[];\r\n let xy;\r\n let f1;\r\n let f2;\r\n let cx;\r\n let cy;\r\n\r\n if (!recursive) {\r\n xy = rotateVector(x1, y1, -rad);\r\n x1 = xy.x;\r\n y1 = xy.y;\r\n xy = rotateVector(x2, y2, -rad);\r\n x2 = xy.x;\r\n y2 = xy.y;\r\n\r\n const x = (x1 - x2) / 2;\r\n const y = (y1 - y2) / 2;\r\n let h = (x * x) / (rx * rx) + (y * y) / (ry * ry);\r\n if (h > 1) {\r\n h = Math.sqrt(h);\r\n rx *= h;\r\n ry *= h;\r\n }\r\n const rx2 = rx * rx;\r\n const ry2 = ry * ry;\r\n\r\n const k = (LAF === SF ? -1 : 1) *\r\n Math.sqrt(\r\n Math.abs(\r\n (rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x),\r\n ),\r\n );\r\n\r\n cx = (k * rx * y) / ry + (x1 + x2) / 2;\r\n cy = (k * -ry * x) / rx + (y1 + y2) / 2;\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\r\n f1 = Math.asin(((((y1 - cy) / ry) * 10 ** 9) >> 0) / 10 ** 9);\r\n // eslint-disable-next-line no-bitwise -- Impossible to satisfy no-bitwise\r\n f2 = Math.asin(((((y2 - cy) / ry) * 10 ** 9) >> 0) / 10 ** 9);\r\n\r\n f1 = x1 < cx ? Math.PI - f1 : f1;\r\n f2 = x2 < cx ? Math.PI - f2 : f2;\r\n if (f1 < 0) f1 = Math.PI * 2 + f1;\r\n if (f2 < 0) f2 = Math.PI * 2 + f2;\r\n if (SF && f1 > f2) {\r\n f1 -= Math.PI * 2;\r\n }\r\n if (!SF && f2 > f1) {\r\n f2 -= Math.PI * 2;\r\n }\r\n } else {\r\n [f1, f2, cx, cy] = recursive;\r\n }\r\n let df = f2 - f1;\r\n if (Math.abs(df) > d120) {\r\n const f2old = f2;\r\n const x2old = x2;\r\n const y2old = y2;\r\n f2 = f1 + d120 * (SF && f2 > f1 ? 1 : -1);\r\n x2 = cx + rx * Math.cos(f2);\r\n y2 = cy + ry * Math.sin(f2);\r\n res = arcToCubic(x2, y2, rx, ry, angle, 0, SF, x2old, y2old, [\r\n f2,\r\n f2old,\r\n cx,\r\n cy,\r\n ]);\r\n }\r\n df = f2 - f1;\r\n const c1 = Math.cos(f1);\r\n const s1 = Math.sin(f1);\r\n const c2 = Math.cos(f2);\r\n const s2 = Math.sin(f2);\r\n const t = Math.tan(df / 4);\r\n const hx = (4 / 3) * rx * t;\r\n const hy = (4 / 3) * ry * t;\r\n const m1 = [x1, y1];\r\n const m2 = [x1 + hx * s1, y1 - hy * c1];\r\n const m3 = [x2 + hx * s2, y2 - hy * c2];\r\n const m4 = [x2, y2];\r\n m2[0] = 2 * m1[0] - m2[0];\r\n m2[1] = 2 * m1[1] - m2[1];\r\n if (recursive) {\r\n return [m2[0], m2[1], m3[0], m3[1], m4[0], m4[1]].concat(res);\r\n }\r\n res = [m2[0], m2[1], m3[0], m3[1], m4[0], m4[1]].concat(res);\r\n const newres = [];\r\n for (let i = 0, ii = res.length; i < ii; i += 1) {\r\n newres[i] = i % 2\r\n ? rotateVector(res[i - 1], res[i], rad).y\r\n : rotateVector(res[i], res[i + 1], rad).x;\r\n }\r\n return newres;\r\n};\r\nexport default arcToCubic;\r\n","/**\r\n * Converts a Q (quadratic-bezier) segment to C (cubic-bezier).\r\n *\r\n * @param x1 curve start x\r\n * @param y1 curve start y\r\n * @param qx control point x\r\n * @param qy control point y\r\n * @param x2 curve end x\r\n * @param y2 curve end y\r\n * @returns the cubic-bezier segment\r\n */\r\nconst quadToCubic = (\r\n x1: number,\r\n y1: number,\r\n qx: number,\r\n qy: number,\r\n x2: number,\r\n y2: number,\r\n): [number, number, number, number, number, number] => {\r\n const r13 = 1 / 3;\r\n const r23 = 2 / 3;\r\n return [\r\n r13 * x1 + r23 * qx, // cpx1\r\n r13 * y1 + r23 * qy, // cpy1\r\n r13 * x2 + r23 * qx, // cpx2\r\n r13 * y2 + r23 * qy, // cpy2\r\n x2,\r\n y2, // x,y\r\n ];\r\n};\r\nexport default quadToCubic;\r\n","import { PointTuple } from \"../types\";\r\n\r\n/**\r\n * Returns the coordinates of a specified distance\r\n * ratio between two points.\r\n *\r\n * @param a the first point coordinates\r\n * @param b the second point coordinates\r\n * @param t the ratio\r\n * @returns the midpoint coordinates\r\n */\r\nconst midPoint = (a: PointTuple, b: PointTuple, t: number): PointTuple => {\r\n const [ax, ay] = a;\r\n const [bx, by] = b;\r\n return [ax + (bx - ax) * t, ay + (by - ay) * t];\r\n};\r\n\r\nexport default midPoint;\r\n","import midPoint from \"../math/midPoint\";\r\n\r\n/**\r\n * Converts an L (line-to) segment to C (cubic-bezier).\r\n *\r\n * @param x1 line start x\r\n * @param y1 line start y\r\n * @param x2 line end x\r\n * @param y2 line end y\r\n * @returns the cubic-bezier segment\r\n */\r\nconst lineToCubic = (x1: number, y1: number, x2: number, y2: number) => {\r\n const c1 = midPoint([x1, y1], [x2, y2], 1.0 / 3.0);\r\n const c2 = midPoint([x1, y1], [x2, y2], 2.0 / 3.0);\r\n return [c1[0], c1[1], c2[0], c2[1], x2, y2];\r\n};\r\nexport default lineToCubic;\r\n","import arcToCubic from \"./arcToCubic\";\r\nimport quadToCubic from \"./quadToCubic\";\r\nimport lineToCubic from \"./lineToCubic\";\r\nimport type { CSegment, MSegment, PathSegment } from \"../types\";\r\nimport type { ParserParams } from \"../interface\";\r\n\r\n/**\r\n * Converts any segment to C (cubic-bezier).\r\n *\r\n * @param segment the source segment\r\n * @param params the source segment parameters\r\n * @returns the cubic-bezier segment\r\n */\r\nconst segmentToCubic = (segment: PathSegment, params: ParserParams) => {\r\n const [pathCommand] = segment;\r\n const values = segment.slice(1).map(Number);\r\n const [x, y] = values;\r\n // let args;\r\n const { x1: px1, y1: py1, x: px, y: py } = params;\r\n\r\n if (!\"TQ\".includes(pathCommand)) {\r\n params.qx = null;\r\n params.qy = null;\r\n }\r\n\r\n if (pathCommand === \"M\") {\r\n params.x = x;\r\n params.y = y;\r\n return segment;\r\n } else if (pathCommand === \"A\") {\r\n return [\"C\" as string | number].concat(\r\n arcToCubic(\r\n px1,\r\n py1,\r\n values[0],\r\n values[1],\r\n values[2],\r\n values[3],\r\n values[4],\r\n values[5],\r\n values[6],\r\n ),\r\n ) as CSegment;\r\n } else if (pathCommand === \"Q\") {\r\n params.qx = x;\r\n params.qy = y;\r\n return [\"C\" as string | number].concat(\r\n quadToCubic(px1, py1, values[0], values[1], values[2], values[3]),\r\n ) as CSegment;\r\n } else if (pathCommand === \"L\") {\r\n return [\"C\" as string | number].concat(\r\n lineToCubic(px1, py1, x, y),\r\n ) as CSegment;\r\n } else if (pathCommand === \"Z\") {\r\n return [\"C\" as string | number].concat(\r\n lineToCubic(px1, py1, px, py),\r\n ) as CSegment;\r\n }\r\n\r\n return segment as MSegment | CSegment;\r\n};\r\nexport default segmentToCubic;\r\n","import type { ParserParams } from \"../interface\";\r\nimport type {\r\n ASegment,\r\n CSegment,\r\n HSegment,\r\n LSegment,\r\n MSegment,\r\n NormalSegment,\r\n PathCommand,\r\n PathSegment,\r\n PointTuple,\r\n QSegment,\r\n VSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Normalizes a single segment of a `pathArray` object.\r\n *\r\n * @param segment the segment object\r\n * @param params the normalization parameters\r\n * @returns the normalized segment\r\n */\r\nconst normalizeSegment = (segment: PathSegment, params: ParserParams) => {\r\n const [pathCommand] = segment;\r\n const absCommand = pathCommand.toUpperCase();\r\n const isRelative = pathCommand !== absCommand;\r\n const { x1: px1, y1: py1, x2: px2, y2: py2, x, y } = params;\r\n const values = segment.slice(1) as number[];\r\n let absValues = values.map((n, j) => n + (isRelative ? (j % 2 ? y : x) : 0));\r\n\r\n if (!\"TQ\".includes(absCommand)) {\r\n // optional but good to be cautious\r\n params.qx = null;\r\n params.qy = null;\r\n }\r\n\r\n // istanbul ignore else @preserve\r\n if (absCommand === \"A\") {\r\n absValues = values.slice(0, -2).concat(\r\n values[5] + (isRelative ? x : 0),\r\n values[6] + (isRelative ? y : 0),\r\n );\r\n\r\n return [\"A\" as PathCommand | number].concat(absValues) as ASegment;\r\n } else if (absCommand === \"H\") {\r\n return [\r\n \"L\",\r\n (segment as HSegment)[1] + (isRelative ? x : 0),\r\n py1,\r\n ] as LSegment;\r\n } else if (absCommand === \"V\") {\r\n return [\r\n \"L\",\r\n px1,\r\n (segment as VSegment)[1] + (isRelative ? y : 0),\r\n ] as LSegment;\r\n } else if (absCommand === \"L\") {\r\n return [\r\n \"L\",\r\n (segment as LSegment)[1] + (isRelative ? x : 0),\r\n (segment as LSegment)[2] + (isRelative ? y : 0),\r\n ] as LSegment;\r\n } else if (absCommand === \"M\") {\r\n return [\r\n \"M\",\r\n (segment as MSegment)[1] + (isRelative ? x : 0),\r\n (segment as MSegment)[2] + (isRelative ? y : 0),\r\n ] as MSegment;\r\n } else if (absCommand === \"C\") {\r\n return [\"C\" as PathCommand | number].concat(absValues) as CSegment;\r\n } else if (absCommand === \"S\") {\r\n const x1 = px1 * 2 - px2;\r\n const y1 = py1 * 2 - py2;\r\n params.x1 = x1;\r\n params.y1 = y1;\r\n return [\"C\", x1, y1].concat(absValues) as CSegment;\r\n } else if (absCommand === \"T\") {\r\n const qx = px1 * 2 - (params.qx ? params.qx : /* istanbul ignore next */ 0);\r\n const qy = py1 * 2 - (params.qy ? params.qy : /* istanbul ignore next */ 0);\r\n params.qx = qx;\r\n params.qy = qy;\r\n return [\"Q\", qx, qy].concat(absValues) as QSegment;\r\n } else if (absCommand === \"Q\") {\r\n const [nqx, nqy] = absValues as PointTuple;\r\n params.qx = nqx;\r\n params.qy = nqy;\r\n return [\"Q\" as PathCommand | number].concat(absValues) as QSegment;\r\n } else if (absCommand === \"Z\") {\r\n return [\"Z\"] as NormalSegment;\r\n }\r\n\r\n // istanbul ignore next @preserve\r\n return segment as NormalSegment;\r\n};\r\nexport default normalizeSegment;\r\n","import type { ParserParams } from \"../interface\";\r\n\r\nconst paramsParser: ParserParams = {\r\n x1: 0,\r\n y1: 0,\r\n x2: 0,\r\n y2: 0,\r\n x: 0,\r\n y: 0,\r\n qx: null,\r\n qy: null,\r\n};\r\n\r\nexport default paramsParser;\r\n","import segmentToCubic from \"../process/segmentToCubic\";\r\nimport { AbsoluteCommand, CSegment, CurveArray, PathArray } from \"../types\";\r\nimport iterate from \"../process/iterate\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport normalizeSegment from \"../process/normalizeSegment\";\r\nimport paramsParser from \"../parser/paramsParser\";\r\n\r\n/**\r\n * Parses a path string value or 'pathArray' and returns a new one\r\n * in which all segments are converted to cubic-bezier.\r\n *\r\n * In addition, un-necessary `Z` segment is removed if previous segment\r\n * extends to the `M` segment.\r\n *\r\n * @param pathInput the string to be parsed or 'pathArray'\r\n * @returns the resulted `pathArray` converted to cubic-bezier\r\n */\r\nconst pathToCurve = (pathInput: string | PathArray): CurveArray => {\r\n const params = { ...paramsParser };\r\n const path = parsePathString(pathInput);\r\n\r\n return iterate(path, (seg, index, lastX, lastY) => {\r\n params.x = lastX;\r\n params.y = lastY;\r\n const normalSegment = normalizeSegment(seg, params);\r\n let result = segmentToCubic(normalSegment, params);\r\n const isLongArc = result[0] === \"C\" && result.length > 7;\r\n\r\n if (isLongArc) {\r\n path.splice(\r\n index + 1,\r\n 0,\r\n [\"C\" as AbsoluteCommand | number].concat(result.slice(7)) as CSegment,\r\n );\r\n result = result.slice(0, 7) as CSegment;\r\n }\r\n\r\n const seglen = result.length;\r\n params.x1 = +result[seglen - 2];\r\n params.y1 = +result[seglen - 1];\r\n params.x2 = +result[seglen - 4] || params.x1;\r\n params.y2 = +result[seglen - 3] || params.y1;\r\n\r\n return result;\r\n });\r\n};\r\nexport default pathToCurve;\r\n","const roundTo = (n: number, round: number) => {\r\n const pow = round >= 1 ? 10 ** round : 1;\r\n\r\n return round > 0 ? Math.round(n * pow) / pow : Math.round(n);\r\n};\r\n\r\nexport default roundTo;\r\n","import type { PathArray, PathSegment } from \"../types\";\r\nimport defaultOptions from \"../options/options\";\r\nimport roundTo from \"../math/roundTo\";\r\n\r\n/**\r\n * Returns a valid `d` attribute string value created\r\n * by rounding values and concatenating the `pathArray` segments.\r\n *\r\n * @param path the `pathArray` object\r\n * @param roundOption amount of decimals to round values to\r\n * @returns the concatenated path string\r\n */\r\nconst pathToString = (\r\n path: PathArray,\r\n roundOption?: number | \"off\",\r\n): string => {\r\n const pathLen = path.length;\r\n let { round } = defaultOptions;\r\n let segment = path[0] as PathSegment;\r\n let result = \"\";\r\n\r\n // allow for ZERO decimals\r\n round = roundOption === \"off\"\r\n ? roundOption\r\n : typeof roundOption === \"number\" && roundOption >= 0\r\n ? roundOption\r\n : typeof round === \"number\" && round >= 0\r\n ? round\r\n : /* istanbul ignore next @preserve */ \"off\";\r\n\r\n for (let i = 0; i < pathLen; i += 1) {\r\n segment = path[i];\r\n const [pathCommand] = segment;\r\n const values = segment.slice(1) as number[];\r\n result += pathCommand;\r\n if (round === \"off\") {\r\n result += values.join(\" \");\r\n } else {\r\n let j = 0;\r\n const valLen = values.length;\r\n while (j < valLen) {\r\n result += roundTo(values[j], round);\r\n if (j !== valLen - 1) result += \" \";\r\n j += 1;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport default pathToString;\r\n","import { type PointTuple } from \"../types\";\r\n\r\n/**\r\n * Returns the square root of the distance\r\n * between two given points.\r\n *\r\n * @param a the first point coordinates\r\n * @param b the second point coordinates\r\n * @returns the distance value\r\n */\r\nconst distanceSquareRoot = (a: PointTuple, b: PointTuple) => {\r\n return Math.sqrt(\r\n (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]),\r\n );\r\n};\r\n\r\nexport default distanceSquareRoot;\r\n","import midPoint from \"./midPoint\";\r\nimport distanceSquareRoot from \"./distanceSquareRoot\";\r\n\r\n/**\r\n * Returns length for line segments (MoveTo, LineTo).\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the line segment length\r\n */\r\nconst getLineLength = (x1: number, y1: number, x2: number, y2: number) => {\r\n return distanceSquareRoot([x1, y1], [x2, y2]);\r\n};\r\n\r\n/**\r\n * Returns a point along the line segments (MoveTo, LineTo).\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance the distance to point in [0-1] range\r\n * @returns the point at length\r\n */\r\nconst getPointAtLineLength = (\r\n x1: number,\r\n y1: number,\r\n x2: number,\r\n y2: number,\r\n distance?: number,\r\n) => {\r\n let point = { x: x1, y: y1 };\r\n\r\n /* istanbul ignore else @preserve */\r\n if (typeof distance === \"number\") {\r\n const length = distanceSquareRoot([x1, y1], [x2, y2]);\r\n if (distance <= 0) {\r\n point = { x: x1, y: y1 };\r\n } else if (distance >= length) {\r\n point = { x: x2, y: y2 };\r\n } else {\r\n const [x, y] = midPoint([x1, y1], [x2, y2], distance / length);\r\n point = { x, y };\r\n }\r\n }\r\n return point;\r\n};\r\n\r\n/**\r\n * Returns bounding box for line segments (MoveTo, LineTo).\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance the distance to point in [0-1] range\r\n * @returns the extrema for line segments\r\n */\r\nconst getLineBBox = (x1: number, y1: number, x2: number, y2: number) => {\r\n const { min, max } = Math;\r\n\r\n return [min(x1, x2), min(y1, y2), max(x1, x2), max(y1, y2)] as [\r\n number,\r\n number,\r\n number,\r\n number,\r\n ];\r\n};\r\n\r\nexport { getLineBBox, getLineLength, getPointAtLineLength };\r\n","import { getPointAtLineLength } from \"./lineTools\";\r\nimport type { Point, PointTuple } from \"../types\";\r\n\r\n/**\r\n * Returns the Arc segment length.\r\n * @param rx radius along X axis\r\n * @param ry radius along Y axis\r\n * @param theta the angle in radians\r\n * @returns the arc length\r\n */\r\nconst arcLength = (rx: number, ry: number, theta: number) => {\r\n const halfTheta = theta / 2;\r\n const sinHalfTheta = Math.sin(halfTheta);\r\n const cosHalfTheta = Math.cos(halfTheta);\r\n const term1 = rx ** 2 * sinHalfTheta ** 2;\r\n const term2 = ry ** 2 * cosHalfTheta ** 2;\r\n const length = Math.sqrt(term1 + term2) * theta;\r\n return Math.abs(length);\r\n};\r\n\r\n/**\r\n * Find point on ellipse at given angle around ellipse (theta);\r\n * @param cx the center X\r\n * @param cy the center Y\r\n * @param rx the radius X\r\n * @param ry the radius Y\r\n * @param alpha the arc rotation angle in radians\r\n * @param theta the arc sweep angle in radians\r\n * @returns a point around ellipse at given angle\r\n */\r\nconst arcPoint = (\r\n cx: number,\r\n cy: number,\r\n rx: number,\r\n ry: number,\r\n alpha: number,\r\n theta: number,\r\n) => {\r\n const { sin, cos } = Math;\r\n // theta is angle in radians around arc\r\n // alpha is angle of rotation of ellipse in radians\r\n const cosA = cos(alpha);\r\n const sinA = sin(alpha);\r\n const x = rx * cos(theta);\r\n const y = ry * sin(theta);\r\n\r\n return [cx + cosA * x - sinA * y, cy + sinA * x + cosA * y] as PointTuple;\r\n};\r\n\r\n/**\r\n * Returns the angle between two points.\r\n * @param v0 starting point\r\n * @param v1 ending point\r\n * @returns the angle in radian\r\n */\r\nconst angleBetween = (v0: Point, v1: Point) => {\r\n const { x: v0x, y: v0y } = v0;\r\n const { x: v1x, y: v1y } = v1;\r\n const p = v0x * v1x + v0y * v1y;\r\n const n = Math.sqrt((v0x ** 2 + v0y ** 2) * (v1x ** 2 + v1y ** 2));\r\n const sign = v0x * v1y - v0y * v1x < 0 ? -1 : 1;\r\n return sign * Math.acos(p / n);\r\n};\r\n\r\n/**\r\n * Returns the following properties for an Arc segment: center, start angle,\r\n * end angle, and radiuses on X and Y axis.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param RX the radius on X axis\r\n * @param RY the radius on Y axis\r\n * @param angle the ellipse rotation in degrees\r\n * @param LAF the large arc flag\r\n * @param SF the sweep flag\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns properties specific to Arc segments\r\n */\r\nconst getArcProps = (\r\n x1: number,\r\n y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n x: number,\r\n y: number,\r\n) => {\r\n const { abs, sin, cos, sqrt, PI } = Math;\r\n let rx = abs(RX);\r\n let ry = abs(RY);\r\n const xRot = ((angle % 360) + 360) % 360;\r\n const xRotRad = xRot * (PI / 180);\r\n\r\n // istanbul ignore next @preserve\r\n if (x1 === x && y1 === y) {\r\n return {\r\n rx,\r\n ry,\r\n startAngle: 0,\r\n endAngle: 0,\r\n center: { x, y },\r\n };\r\n }\r\n\r\n if (rx === 0 || ry === 0) {\r\n return {\r\n rx,\r\n ry,\r\n startAngle: 0,\r\n endAngle: 0,\r\n center: { x: (x + x1) / 2, y: (y + y1) / 2 },\r\n };\r\n }\r\n\r\n const dx = (x1 - x) / 2;\r\n const dy = (y1 - y) / 2;\r\n\r\n const transformedPoint = {\r\n x: cos(xRotRad) * dx + sin(xRotRad) * dy,\r\n y: -sin(xRotRad) * dx + cos(xRotRad) * dy,\r\n };\r\n\r\n const radiiCheck = transformedPoint.x ** 2 / rx ** 2 +\r\n transformedPoint.y ** 2 / ry ** 2;\r\n\r\n if (radiiCheck > 1) {\r\n rx *= sqrt(radiiCheck);\r\n ry *= sqrt(radiiCheck);\r\n }\r\n\r\n const cSquareNumerator = rx ** 2 * ry ** 2 -\r\n rx ** 2 * transformedPoint.y ** 2 - ry ** 2 * transformedPoint.x ** 2;\r\n const cSquareRootDenom = rx ** 2 * transformedPoint.y ** 2 +\r\n ry ** 2 * transformedPoint.x ** 2;\r\n\r\n let cRadicand = cSquareNumerator / cSquareRootDenom;\r\n /* istanbul ignore next @preserve */\r\n cRadicand = cRadicand < 0 ? 0 : cRadicand;\r\n const cCoef = (LAF !== SF ? 1 : -1) * sqrt(cRadicand);\r\n const transformedCenter = {\r\n x: cCoef * ((rx * transformedPoint.y) / ry),\r\n y: cCoef * (-(ry * transformedPoint.x) / rx),\r\n };\r\n\r\n const center = {\r\n x: cos(xRotRad) * transformedCenter.x - sin(xRotRad) * transformedCenter.y +\r\n (x1 + x) / 2,\r\n y: sin(xRotRad) * transformedCenter.x + cos(xRotRad) * transformedCenter.y +\r\n (y1 + y) / 2,\r\n };\r\n\r\n const startVector = {\r\n x: (transformedPoint.x - transformedCenter.x) / rx,\r\n y: (transformedPoint.y - transformedCenter.y) / ry,\r\n };\r\n\r\n const startAngle = angleBetween({ x: 1, y: 0 }, startVector);\r\n\r\n const endVector = {\r\n x: (-transformedPoint.x - transformedCenter.x) / rx,\r\n y: (-transformedPoint.y - transformedCenter.y) / ry,\r\n };\r\n\r\n let sweepAngle = angleBetween(startVector, endVector);\r\n if (!SF && sweepAngle > 0) {\r\n sweepAngle -= 2 * PI;\r\n } else if (SF && sweepAngle < 0) {\r\n sweepAngle += 2 * PI;\r\n }\r\n sweepAngle %= 2 * PI;\r\n\r\n const endAngle = startAngle + sweepAngle;\r\n\r\n // point.ellipticalArcStartAngle = startAngle;\r\n // point.ellipticalArcEndAngle = startAngle + sweepAngle;\r\n // point.ellipticalArcAngle = alpha;\r\n\r\n // point.ellipticalArcCenter = center;\r\n // point.resultantRx = rx;\r\n // point.resultantRy = ry;\r\n\r\n return {\r\n center,\r\n startAngle,\r\n endAngle,\r\n rx,\r\n ry,\r\n };\r\n};\r\n\r\n/**\r\n * Returns the length of an Arc segment.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the length of the Arc segment\r\n */\r\nconst getArcLength = (\r\n x1: number,\r\n y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n x: number,\r\n y: number,\r\n) => {\r\n const { rx, ry, startAngle, endAngle } = getArcProps(\r\n x1,\r\n y1,\r\n RX,\r\n RY,\r\n angle,\r\n LAF,\r\n SF,\r\n x,\r\n y,\r\n );\r\n return arcLength(rx, ry, endAngle - startAngle);\r\n};\r\n\r\n/**\r\n * Returns a point along an Arc segment at a given distance.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param RX the radius on X axis\r\n * @param RY the radius on Y axis\r\n * @param angle the ellipse rotation in degrees\r\n * @param LAF the large arc flag\r\n * @param SF the sweep flag\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance a [0-1] ratio\r\n * @returns a point along the Arc segment\r\n */\r\nconst getPointAtArcLength = (\r\n x1: number,\r\n y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n x: number,\r\n y: number,\r\n distance?: number,\r\n) => {\r\n let point = { x: x1, y: y1 };\r\n const { center, rx, ry, startAngle, endAngle } = getArcProps(\r\n x1,\r\n y1,\r\n RX,\r\n RY,\r\n angle,\r\n LAF,\r\n SF,\r\n x,\r\n y,\r\n );\r\n\r\n /* istanbul ignore else @preserve */\r\n if (typeof distance === \"number\") {\r\n const length = arcLength(rx, ry, endAngle - startAngle);\r\n if (distance <= 0) {\r\n point = { x: x1, y: y1 };\r\n } else if (distance >= length) {\r\n point = { x, y };\r\n } else {\r\n /* istanbul ignore next @preserve */\r\n if (x1 === x && y1 === y) {\r\n return { x, y };\r\n }\r\n /* istanbul ignore next @preserve */\r\n if (rx === 0 || ry === 0) {\r\n return getPointAtLineLength(x1, y1, x, y, distance);\r\n }\r\n const { PI, cos, sin } = Math;\r\n const sweepAngle = endAngle - startAngle;\r\n const xRot = ((angle % 360) + 360) % 360;\r\n const xRotRad = xRot * (PI / 180);\r\n const alpha = startAngle + sweepAngle * (distance / length);\r\n const ellipseComponentX = rx * cos(alpha);\r\n const ellipseComponentY = ry * sin(alpha);\r\n\r\n point = {\r\n x: cos(xRotRad) * ellipseComponentX - sin(xRotRad) * ellipseComponentY +\r\n center.x,\r\n y: sin(xRotRad) * ellipseComponentX + cos(xRotRad) * ellipseComponentY +\r\n center.y,\r\n };\r\n }\r\n }\r\n\r\n return point;\r\n};\r\n\r\n/**\r\n * Returns the extrema for an Arc segment in the following format:\r\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\r\n *\r\n * @see https://github.com/herrstrietzel/svg-pathdata-getbbox\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param RX the radius on X axis\r\n * @param RY the radius on Y axis\r\n * @param angle the ellipse rotation in degrees\r\n * @param LAF the large arc flag\r\n * @param SF the sweep flag\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the extrema of the Arc segment\r\n */\r\nconst getArcBBox = (\r\n x1: number,\r\n y1: number,\r\n RX: number,\r\n RY: number,\r\n angle: number,\r\n LAF: number,\r\n SF: number,\r\n x: number,\r\n y: number,\r\n) => {\r\n const { center, rx, ry, startAngle, endAngle } = getArcProps(\r\n x1,\r\n y1,\r\n RX,\r\n RY,\r\n angle,\r\n LAF,\r\n SF,\r\n x,\r\n y,\r\n );\r\n const deltaAngle = endAngle - startAngle;\r\n const { min, max, tan, atan2, PI } = Math;\r\n\r\n // circle/elipse center coordinates\r\n const { x: cx, y: cy } = center;\r\n\r\n // rotation to radians\r\n const alpha = (angle * PI) / 180;\r\n const tangent = tan(alpha);\r\n\r\n /**\r\n * find min/max from zeroes of directional derivative along x and y\r\n * along x axis\r\n */\r\n const theta = atan2(-ry * tangent, rx);\r\n const angle1 = theta;\r\n const angle2 = theta + PI;\r\n const angle3 = atan2(ry, rx * tangent);\r\n const angle4 = angle3 + PI;\r\n const xArray = [x];\r\n const yArray = [y];\r\n\r\n // inner bounding box\r\n let xMin = min(x1, x);\r\n let xMax = max(x1, x);\r\n let yMin = min(y1, y);\r\n let yMax = max(y1, y);\r\n\r\n // on path point close after start\r\n const angleAfterStart = endAngle - deltaAngle * 0.00001;\r\n const pP2 = arcPoint(cx, cy, rx, ry, alpha, angleAfterStart);\r\n\r\n // on path point close before end\r\n const angleBeforeEnd = endAngle - deltaAngle * 0.99999;\r\n const pP3 = arcPoint(cx, cy, rx, ry, alpha, angleBeforeEnd);\r\n\r\n /**\r\n * expected extremes\r\n * if leaving inner bounding box\r\n * (between segment start and end point)\r\n * otherwise exclude elliptic extreme points\r\n */\r\n\r\n // right\r\n if (pP2[0] > xMax || pP3[0] > xMax) {\r\n // get point for this theta\r\n const p1 = arcPoint(cx, cy, rx, ry, alpha, angle1);\r\n xArray.push(p1[0]);\r\n yArray.push(p1[1]);\r\n }\r\n\r\n // left\r\n if (pP2[0] < xMin || pP3[0] < xMin) {\r\n // get anti-symmetric point\r\n const p2 = arcPoint(cx, cy, rx, ry, alpha, angle2);\r\n xArray.push(p2[0]);\r\n yArray.push(p2[1]);\r\n }\r\n\r\n // top\r\n if (pP2[1] < yMin || pP3[1] < yMin) {\r\n // get anti-symmetric point\r\n const p4 = arcPoint(cx, cy, rx, ry, alpha, angle4);\r\n xArray.push(p4[0]);\r\n yArray.push(p4[1]);\r\n }\r\n\r\n // bottom\r\n if (pP2[1] > yMax || pP3[1] > yMax) {\r\n // get point for this theta\r\n const p3 = arcPoint(cx, cy, rx, ry, alpha, angle3);\r\n xArray.push(p3[0]);\r\n yArray.push(p3[1]);\r\n }\r\n\r\n xMin = min.apply([], xArray);\r\n yMin = min.apply([], yArray);\r\n xMax = max.apply([], xArray);\r\n yMax = max.apply([], yArray);\r\n\r\n return [xMin, yMin, xMax, yMax] as [number, number, number, number];\r\n};\r\n\r\nexport {\r\n angleBetween,\r\n arcLength,\r\n arcPoint,\r\n getArcBBox,\r\n getArcLength,\r\n getArcProps,\r\n getPointAtArcLength,\r\n};\r\n","import type {\r\n CubicCoordinates,\r\n CubicPoints,\r\n DeriveCallback,\r\n DerivedCubicPoints,\r\n DerivedPoint,\r\n DerivedQuadPoints,\r\n PointTuple,\r\n QuadCoordinates,\r\n QuadPoints,\r\n} from \"../types\";\r\n\r\n/**\r\n * Tools from bezier.js by Mike 'Pomax' Kamermans\r\n * @see https://github.com/Pomax/bezierjs\r\n */\r\n\r\nconst Tvalues = [\r\n -0.0640568928626056260850430826247450385909,\r\n 0.0640568928626056260850430826247450385909,\r\n -0.1911188674736163091586398207570696318404,\r\n 0.1911188674736163091586398207570696318404,\r\n -0.3150426796961633743867932913198102407864,\r\n 0.3150426796961633743867932913198102407864,\r\n -0.4337935076260451384870842319133497124524,\r\n 0.4337935076260451384870842319133497124524,\r\n -0.5454214713888395356583756172183723700107,\r\n 0.5454214713888395356583756172183723700107,\r\n -0.6480936519369755692524957869107476266696,\r\n 0.6480936519369755692524957869107476266696,\r\n -0.7401241915785543642438281030999784255232,\r\n 0.7401241915785543642438281030999784255232,\r\n -0.8200019859739029219539498726697452080761,\r\n 0.8200019859739029219539498726697452080761,\r\n -0.8864155270044010342131543419821967550873,\r\n 0.8864155270044010342131543419821967550873,\r\n -0.9382745520027327585236490017087214496548,\r\n 0.9382745520027327585236490017087214496548,\r\n -0.9747285559713094981983919930081690617411,\r\n 0.9747285559713094981983919930081690617411,\r\n -0.9951872199970213601799974097007368118745,\r\n 0.9951872199970213601799974097007368118745,\r\n];\r\n\r\nconst Cvalues = [\r\n 0.1279381953467521569740561652246953718517,\r\n 0.1279381953467521569740561652246953718517,\r\n 0.1258374563468282961213753825111836887264,\r\n 0.1258374563468282961213753825111836887264,\r\n 0.121670472927803391204463153476262425607,\r\n 0.121670472927803391204463153476262425607,\r\n 0.1155056680537256013533444839067835598622,\r\n 0.1155056680537256013533444839067835598622,\r\n 0.1074442701159656347825773424466062227946,\r\n 0.1074442701159656347825773424466062227946,\r\n 0.0976186521041138882698806644642471544279,\r\n 0.0976186521041138882698806644642471544279,\r\n 0.086190161531953275917185202983742667185,\r\n 0.086190161531953275917185202983742667185,\r\n 0.0733464814110803057340336152531165181193,\r\n 0.0733464814110803057340336152531165181193,\r\n 0.0592985849154367807463677585001085845412,\r\n 0.0592985849154367807463677585001085845412,\r\n 0.0442774388174198061686027482113382288593,\r\n 0.0442774388174198061686027482113382288593,\r\n 0.0285313886289336631813078159518782864491,\r\n 0.0285313886289336631813078159518782864491,\r\n 0.0123412297999871995468056670700372915759,\r\n 0.0123412297999871995468056670700372915759,\r\n];\r\n\r\n/**\r\n * @param points\r\n * @returns\r\n */\r\nconst deriveBezier = (points: QuadPoints | CubicPoints) => {\r\n const dpoints = [] as (DerivedCubicPoints | DerivedQuadPoints)[];\r\n for (let p = points, d = p.length, c = d - 1; d > 1; d -= 1, c -= 1) {\r\n const list = [] as unknown as DerivedCubicPoints | DerivedQuadPoints;\r\n for (let j = 0; j < c; j += 1) {\r\n list.push({\r\n x: c * (p[j + 1].x - p[j].x),\r\n y: c * (p[j + 1].y - p[j].y),\r\n t: 0,\r\n });\r\n }\r\n dpoints.push(list);\r\n p = list;\r\n }\r\n return dpoints;\r\n};\r\n\r\n/**\r\n * @param points\r\n * @param t\r\n */\r\nconst computeBezier = (\r\n points: DerivedQuadPoints | DerivedCubicPoints,\r\n t: number,\r\n) => {\r\n // shortcuts\r\n /* istanbul ignore next @preserve */\r\n if (t === 0) {\r\n points[0].t = 0;\r\n return points[0];\r\n }\r\n\r\n const order = points.length - 1;\r\n\r\n /* istanbul ignore next @preserve */\r\n if (t === 1) {\r\n points[order].t = 1;\r\n return points[order];\r\n }\r\n\r\n const mt = 1 - t;\r\n let p = points as typeof points | [\r\n DerivedPoint,\r\n DerivedPoint,\r\n DerivedPoint,\r\n DerivedPoint,\r\n ];\r\n\r\n // constant?\r\n /* istanbul ignore next @preserve */\r\n if (order === 0) {\r\n points[0].t = t;\r\n return points[0];\r\n }\r\n\r\n // linear?\r\n /* istanbul ignore else @preserve */\r\n if (order === 1) {\r\n return {\r\n x: mt * p[0].x + t * p[1].x,\r\n y: mt * p[0].y + t * p[1].y,\r\n t,\r\n };\r\n }\r\n\r\n // quadratic/cubic curve?\r\n const mt2 = mt * mt;\r\n const t2 = t * t;\r\n let a = 0;\r\n let b = 0;\r\n let c = 0;\r\n let d = 0;\r\n /* istanbul ignore else @preserve */\r\n if (order === 2) {\r\n p = [p[0], p[1], p[2], { x: 0, y: 0 } as DerivedPoint];\r\n a = mt2;\r\n b = mt * t * 2;\r\n c = t2;\r\n } else if (order === 3) {\r\n a = mt2 * mt;\r\n b = mt2 * t * 3;\r\n c = mt * t2 * 3;\r\n d = t * t2;\r\n }\r\n return {\r\n x: a * p[0].x + b * p[1].x + c * p[2].x + d * p[3].x,\r\n y: a * p[0].y + b * p[1].y + c * p[2].y + d * p[3].y,\r\n t,\r\n };\r\n};\r\n\r\nconst calculateBezier = (derivativeFn: DeriveCallback, t: number) => {\r\n const d = derivativeFn(t);\r\n const l = d.x * d.x + d.y * d.y;\r\n\r\n return Math.sqrt(l);\r\n};\r\n\r\nconst bezierLength = (derivativeFn: DeriveCallback) => {\r\n const z = 0.5;\r\n const len = Tvalues.length;\r\n\r\n let sum = 0;\r\n\r\n for (let i = 0, t; i < len; i++) {\r\n t = z * Tvalues[i] + z;\r\n sum += Cvalues[i] * calculateBezier(derivativeFn, t);\r\n }\r\n return z * sum;\r\n};\r\n\r\n/**\r\n * Returns the length of CubicBezier / Quad segment.\r\n * @param curve cubic / quad bezier segment\r\n */\r\nconst getBezierLength = (curve: CubicCoordinates | QuadCoordinates) => {\r\n const points = [] as unknown as CubicPoints | QuadPoints;\r\n for (let idx = 0, len = curve.length, step = 2; idx < len; idx += step) {\r\n points.push({\r\n x: curve[idx],\r\n y: curve[idx + 1],\r\n });\r\n }\r\n const dpoints = deriveBezier(points);\r\n return bezierLength((t: number) => {\r\n return computeBezier(dpoints[0], t);\r\n });\r\n};\r\n\r\n// Precision for consider cubic polynom as quadratic one\r\nconst CBEZIER_MINMAX_EPSILON = 0.00000001;\r\n\r\n/**\r\n * Returns the most extreme points in a Quad Bezier segment.\r\n * @param A an array which consist of X/Y values\r\n */\r\n// https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L89\r\nconst minmaxQ = ([v1, cp, v2]: [number, number, number]) => {\r\n const min = Math.min(v1, v2);\r\n const max = Math.max(v1, v2);\r\n\r\n /* istanbul ignore next @preserve */\r\n if (cp >= v1 ? v2 >= cp : v2 <= cp) {\r\n // if no extremum in ]0,1[\r\n return [min, max] as PointTuple;\r\n }\r\n\r\n // check if the extremum E is min or max\r\n const E = (v1 * v2 - cp * cp) / (v1 - 2 * cp + v2);\r\n return (E < min ? [E, max] : [min, E]) as PointTuple;\r\n};\r\n\r\n/**\r\n * Returns the most extreme points in a Cubic Bezier segment.\r\n * @param A an array which consist of X/Y values\r\n * @see https://github.com/kpym/SVGPathy/blob/acd1a50c626b36d81969f6e98e8602e128ba4302/lib/box.js#L127\r\n */\r\nconst minmaxC = ([v1, cp1, cp2, v2]: [number, number, number, number]) => {\r\n const K = v1 - 3 * cp1 + 3 * cp2 - v2;\r\n\r\n // if the polynomial is (almost) quadratic and not cubic\r\n /* istanbul ignore next @preserve */\r\n if (Math.abs(K) < CBEZIER_MINMAX_EPSILON) {\r\n if (v1 === v2 && v1 === cp1) {\r\n // no curve, point targeting same location\r\n return [v1, v2] as PointTuple;\r\n }\r\n\r\n return minmaxQ([v1, -0.5 * v1 + 1.5 * cp1, v1 - 3 * cp1 + 3 * cp2]);\r\n }\r\n\r\n // the reduced discriminant of the derivative\r\n const T = -v1 * cp2 + v1 * v2 - cp1 * cp2 - cp1 * v2 + cp1 * cp1 + cp2 * cp2;\r\n\r\n // if the polynomial is monotone in [0,1]\r\n if (T <= 0) {\r\n return [Math.min(v1, v2), Math.max(v1, v2)] as PointTuple;\r\n }\r\n const S = Math.sqrt(T);\r\n\r\n // potential extrema\r\n let min = Math.min(v1, v2);\r\n let max = Math.max(v1, v2);\r\n\r\n const L = v1 - 2 * cp1 + cp2;\r\n // check local extrema\r\n for (let R = (L + S) / K, i = 1; i <= 2; R = (L - S) / K, i++) {\r\n // istanbul ignore next @preserve\r\n if (R > 0 && R < 1) {\r\n // if the extrema is for R in [0,1]\r\n const Q = v1 * (1 - R) * (1 - R) * (1 - R) +\r\n cp1 * 3 * (1 - R) * (1 - R) * R + cp2 * 3 * (1 - R) * R * R +\r\n v2 * R * R * R;\r\n if (Q < min) {\r\n min = Q;\r\n }\r\n if (Q > max) {\r\n max = Q;\r\n }\r\n }\r\n }\r\n\r\n return [min, max] as PointTuple;\r\n};\r\n\r\nexport {\r\n bezierLength,\r\n calculateBezier,\r\n CBEZIER_MINMAX_EPSILON,\r\n computeBezier,\r\n Cvalues,\r\n deriveBezier,\r\n getBezierLength,\r\n minmaxC,\r\n minmaxQ,\r\n Tvalues,\r\n};\r\n","import { getBezierLength, minmaxC } from \"./bezier\";\r\nimport { type CubicCoordinates } from \"../types\";\r\n\r\n/**\r\n * Returns a point at a given length of a CubicBezier segment.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param t a [0-1] ratio\r\n * @returns the point at cubic-bezier segment length\r\n */\r\nconst getPointAtCubicSegmentLength = (\r\n [x1, y1, c1x, c1y, c2x, c2y, x2, y2]: CubicCoordinates,\r\n t: number,\r\n) => {\r\n const t1 = 1 - t;\r\n return {\r\n x: t1 ** 3 * x1 + 3 * t1 ** 2 * t * c1x + 3 * t1 * t ** 2 * c2x +\r\n t ** 3 * x2,\r\n y: t1 ** 3 * y1 + 3 * t1 ** 2 * t * c1y + 3 * t1 * t ** 2 * c2y +\r\n t ** 3 * y2,\r\n };\r\n};\r\n\r\n/**\r\n * Returns the length of a CubicBezier segment.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the CubicBezier segment length\r\n */\r\nconst getCubicLength = (\r\n x1: number,\r\n y1: number,\r\n c1x: number,\r\n c1y: number,\r\n c2x: number,\r\n c2y: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n return getBezierLength([x1, y1, c1x, c1y, c2x, c2y, x2, y2]);\r\n};\r\n\r\n/**\r\n * Returns the point along a CubicBezier segment at a given distance.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance the distance to look at\r\n * @returns the point at CubicBezier length\r\n */\r\nconst getPointAtCubicLength = (\r\n x1: number,\r\n y1: number,\r\n c1x: number,\r\n c1y: number,\r\n c2x: number,\r\n c2y: number,\r\n x2: number,\r\n y2: number,\r\n distance?: number,\r\n) => {\r\n const distanceIsNumber = typeof distance === \"number\";\r\n let point = { x: x1, y: y1 };\r\n /* istanbul ignore else @preserve */\r\n if (distanceIsNumber) {\r\n const currentLength = getBezierLength([x1, y1, c1x, c1y, c2x, c2y, x2, y2]);\r\n if (distance <= 0) {\r\n // first point already defined\r\n } else if (distance >= currentLength) {\r\n point = { x: x2, y: y2 };\r\n } else {\r\n point = getPointAtCubicSegmentLength(\r\n [x1, y1, c1x, c1y, c2x, c2y, x2, y2],\r\n distance / currentLength,\r\n );\r\n }\r\n }\r\n return point;\r\n};\r\n\r\n/**\r\n * Returns the boundig box of a CubicBezier segment in the following format:\r\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the extrema of the CubicBezier segment\r\n */\r\nconst getCubicBBox = (\r\n x1: number,\r\n y1: number,\r\n c1x: number,\r\n c1y: number,\r\n c2x: number,\r\n c2y: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n const cxMinMax = minmaxC([x1, c1x, c2x, x2]);\r\n const cyMinMax = minmaxC([y1, c1y, c2y, y2]);\r\n\r\n return [cxMinMax[0], cyMinMax[0], cxMinMax[1], cyMinMax[1]] as [\r\n number,\r\n number,\r\n number,\r\n number,\r\n ];\r\n};\r\n\r\nexport {\r\n getCubicBBox,\r\n getCubicLength,\r\n getPointAtCubicLength,\r\n getPointAtCubicSegmentLength,\r\n};\r\n","import { getBezierLength, minmaxQ } from \"./bezier\";\r\nimport { type QuadCoordinates } from \"../types\";\r\n\r\n/**\r\n * Returns the {x,y} coordinates of a point at a\r\n * given length of a quadratic-bezier segment.\r\n *\r\n * @see https://github.com/substack/point-at-length\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param cx the control point X\r\n * @param cy the control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param t a [0-1] ratio\r\n * @returns the requested {x,y} coordinates\r\n */\r\nconst getPointAtQuadSegmentLength = (\r\n [x1, y1, cx, cy, x2, y2]: QuadCoordinates,\r\n t: number,\r\n) => {\r\n const t1 = 1 - t;\r\n return {\r\n x: t1 ** 2 * x1 + 2 * t1 * t * cx + t ** 2 * x2,\r\n y: t1 ** 2 * y1 + 2 * t1 * t * cy + t ** 2 * y2,\r\n };\r\n};\r\n\r\n/**\r\n * Returns the length of a QuadraticBezier segment.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param cx the control point X\r\n * @param cy the control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the QuadraticBezier segment length\r\n */\r\nconst getQuadLength = (\r\n x1: number,\r\n y1: number,\r\n cx: number,\r\n cy: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n return getBezierLength([x1, y1, cx, cy, x2, y2]);\r\n};\r\n\r\n/**\r\n * Returns the point along a QuadraticBezier segment at a given distance.\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param cx the control point X\r\n * @param cy the control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @param distance the distance to look at\r\n * @returns the point at QuadraticBezier length\r\n */\r\nconst getPointAtQuadLength = (\r\n x1: number,\r\n y1: number,\r\n cx: number,\r\n cy: number,\r\n x2: number,\r\n y2: number,\r\n distance?: number,\r\n) => {\r\n const distanceIsNumber = typeof distance === \"number\";\r\n let point = { x: x1, y: y1 };\r\n\r\n /* istanbul ignore else @preserve */\r\n if (distanceIsNumber) {\r\n const currentLength = getBezierLength([x1, y1, cx, cy, x2, y2]);\r\n if (distance <= 0) {\r\n // first point already defined\r\n } else if (distance >= currentLength) {\r\n point = { x: x2, y: y2 };\r\n } else {\r\n point = getPointAtQuadSegmentLength(\r\n [x1, y1, cx, cy, x2, y2],\r\n distance / currentLength,\r\n );\r\n }\r\n }\r\n return point;\r\n};\r\n\r\n/**\r\n * Returns the boundig box of a QuadraticBezier segment in the following format:\r\n * [MIN_X, MIN_Y, MAX_X, MAX_Y]\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param cx the control point X\r\n * @param cy the control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the extrema of the QuadraticBezier segment\r\n */\r\nconst getQuadBBox = (\r\n x1: number,\r\n y1: number,\r\n cx: number,\r\n cy: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n const cxMinMax = minmaxQ([x1, cx, x2]);\r\n const cyMinMax = minmaxQ([y1, cy, y2]);\r\n return [cxMinMax[0], cyMinMax[0], cxMinMax[1], cyMinMax[1]] as [\r\n number,\r\n number,\r\n number,\r\n number,\r\n ];\r\n};\r\n\r\nexport {\r\n getPointAtQuadLength,\r\n getPointAtQuadSegmentLength,\r\n getQuadBBox,\r\n getQuadLength,\r\n};\r\n","import distanceSquareRoot from \"./distanceSquareRoot\";\r\nimport { type PointTuple } from \"../types\";\r\n\r\n/**\r\n * d3-polygon-area\r\n * https://github.com/d3/d3-polygon\r\n *\r\n * Returns the area of a polygon.\r\n *\r\n * @param polygon an array of coordinates\r\n * @returns the polygon area\r\n */\r\nconst polygonArea = (polygon: PointTuple[]) => {\r\n const n = polygon.length;\r\n let i = -1;\r\n let a: PointTuple;\r\n let b = polygon[n - 1];\r\n let area = 0;\r\n\r\n /* eslint-disable-next-line */\r\n while (++i < n) {\r\n a = b;\r\n b = polygon[i];\r\n area += a[1] * b[0] - a[0] * b[1];\r\n }\r\n\r\n return area / 2;\r\n};\r\n\r\n/**\r\n * d3-polygon-length\r\n * https://github.com/d3/d3-polygon\r\n *\r\n * Returns the perimeter of a polygon.\r\n *\r\n * @param polygon an array of coordinates\r\n * @returns the polygon length\r\n */\r\nconst polygonLength = (polygon: PointTuple[]) => {\r\n return polygon.reduce((length, point, i) => {\r\n if (i) {\r\n return length + distanceSquareRoot(polygon[i - 1], point);\r\n }\r\n return 0;\r\n }, 0);\r\n};\r\n\r\nexport { polygonArea, polygonLength };\r\n","const DISTANCE_EPSILON = 0.00001;\r\n\r\nexport default DISTANCE_EPSILON;\r\n","import normalizeSegment from \"./normalizeSegment\";\r\nimport type { NormalArray, PathArray } from \"../types\";\r\nimport iterate from \"./iterate\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport paramsParser from \"../parser/paramsParser\";\r\n\r\n/**\r\n * Normalizes a `pathArray` object for further processing:\r\n * * convert segments to absolute values\r\n * * convert shorthand path commands to their non-shorthand notation\r\n *\r\n * @param pathInput the string to be parsed or 'pathArray'\r\n * @returns the normalized `pathArray`\r\n */\r\nconst normalizePath = (pathInput: string | PathArray) => {\r\n const path = parsePathString(pathInput);\r\n const params = { ...paramsParser };\r\n\r\n return iterate(path, (seg, _, lastX, lastY) => {\r\n params.x = lastX;\r\n params.y = lastY;\r\n const result = normalizeSegment(seg, params);\r\n\r\n const seglen = result.length;\r\n params.x1 = +result[seglen - 2];\r\n params.y1 = +result[seglen - 1];\r\n params.x2 = +result[seglen - 4] || params.x1;\r\n params.y2 = +result[seglen - 3] || params.y1;\r\n\r\n return result;\r\n });\r\n};\r\nexport default normalizePath;\r\n","import DISTANCE_EPSILON from \"./distanceEpsilon\";\r\nimport type { MSegment, PathArray, PointTuple } from \"../types\";\r\nimport iterate from \"../process/iterate\";\r\nimport { getLineLength, getPointAtLineLength } from \"../math/lineTools\";\r\nimport { getArcLength, getPointAtArcLength } from \"../math/arcTools\";\r\nimport { getCubicLength, getPointAtCubicLength } from \"../math/cubicTools\";\r\nimport { getPointAtQuadLength, getQuadLength } from \"../math/quadTools\";\r\nimport normalizePath from \"../process/normalizePath\";\r\n\r\n/**\r\n * Returns [x,y] coordinates of a point at a given length of a shape.\r\n *\r\n * @param pathInput the `pathArray` to look into\r\n * @param distance the length of the shape to look at\r\n * @returns the requested {x, y} point coordinates\r\n */\r\nconst getPointAtLength = (pathInput: string | PathArray, distance?: number) => {\r\n const path = normalizePath(pathInput);\r\n let isM = false;\r\n let data = [] as number[];\r\n let pathCommand = \"M\";\r\n let x = 0;\r\n let y = 0;\r\n let [mx, my] = path[0].slice(1) as PointTuple;\r\n const distanceIsNumber = typeof distance === \"number\";\r\n let point = { x: mx, y: my };\r\n let length = 0;\r\n let POINT = point;\r\n let totalLength = 0;\r\n\r\n if (!distanceIsNumber || distance < DISTANCE_EPSILON) return point;\r\n\r\n // for (let i = 0; i < pathLen; i += 1) {\r\n iterate(path, (seg, _, lastX, lastY) => {\r\n [pathCommand] = seg;\r\n isM = pathCommand === \"M\";\r\n data = !isM ? [lastX, lastY].concat(seg.slice(1) as number[]) : data;\r\n\r\n // this segment is always ZERO\r\n /* istanbul ignore else @preserve */\r\n if (isM) {\r\n // remember mx, my for Z\r\n [, mx, my] = seg as MSegment;\r\n point = { x: mx, y: my };\r\n length = 0;\r\n } else if (pathCommand === \"L\") {\r\n point = getPointAtLineLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n distance - totalLength,\r\n );\r\n length = getLineLength(data[0], data[1], data[2], data[3]);\r\n } else if (pathCommand === \"A\") {\r\n point = getPointAtArcLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n data[6],\r\n data[7],\r\n data[8],\r\n distance - totalLength,\r\n );\r\n length = getArcLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n data[6],\r\n data[7],\r\n data[8],\r\n );\r\n } else if (pathCommand === \"C\") {\r\n point = getPointAtCubicLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n data[6],\r\n data[7],\r\n distance - totalLength,\r\n );\r\n length = getCubicLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n data[6],\r\n data[7],\r\n );\r\n } else if (pathCommand === \"Q\") {\r\n point = getPointAtQuadLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n distance - totalLength,\r\n );\r\n length = getQuadLength(\r\n data[0],\r\n data[1],\r\n data[2],\r\n data[3],\r\n data[4],\r\n data[5],\r\n );\r\n } else if (pathCommand === \"Z\") {\r\n data = [lastX, lastY, mx, my];\r\n point = { x: mx, y: my };\r\n\r\n length = getLineLength(data[0], data[1], data[2], data[3]);\r\n }\r\n\r\n [x, y] = data.slice(-2);\r\n\r\n if (totalLength < distance) {\r\n POINT = point;\r\n } else {\r\n // totalLength >= distance\r\n // stop right here\r\n // stop iterator now!\r\n return false;\r\n }\r\n\r\n totalLength += length;\r\n return;\r\n });\r\n\r\n // native `getPointAtLength` behavior when the given distance\r\n // is higher than total length\r\n if (distance > totalLength - DISTANCE_EPSILON) {\r\n return { x, y };\r\n }\r\n\r\n return POINT;\r\n};\r\n\r\nexport default getPointAtLength;\r\n","import type { LSegment, MSegment, PathArray, PointTuple } from \"../types\";\r\nimport { getLineLength } from \"../math/lineTools\";\r\nimport { getArcLength } from \"../math/arcTools\";\r\nimport { getCubicLength } from \"../math/cubicTools\";\r\nimport { getQuadLength } from \"../math/quadTools\";\r\nimport iterate from \"../process/iterate\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport absolutizeSegment from \"../process/absolutizeSegment\";\r\n\r\n/**\r\n * Returns the shape total length, or the equivalent to `shape.getTotalLength()`.\r\n *\r\n * @param pathInput the target `pathArray`\r\n * @returns the shape total length\r\n */\r\nconst getTotalLength = (pathInput: string | PathArray) => {\r\n const path = parsePathString(pathInput);\r\n let paramX1 = 0;\r\n let paramY1 = 0;\r\n let paramX2 = 0;\r\n let paramY2 = 0;\r\n let paramQX = 0;\r\n let paramQY = 0;\r\n let pathCommand = \"M\";\r\n let mx = 0;\r\n let my = 0;\r\n let totalLength = 0;\r\n\r\n iterate(path, (seg, index, lastX, lastY) => {\r\n [pathCommand] = seg;\r\n const absCommand = pathCommand.toUpperCase();\r\n const isRelative = absCommand !== pathCommand;\r\n const absoluteSegment = isRelative\r\n ? absolutizeSegment(seg, index, lastX, lastY)\r\n : (seg.slice(0) as typeof seg);\r\n\r\n const normalSegment = absCommand === \"V\"\r\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\r\n : absCommand === \"H\"\r\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\r\n : absoluteSegment;\r\n [pathCommand] = normalSegment;\r\n\r\n if (!\"TQ\".includes(absCommand)) {\r\n // optional but good to be cautious\r\n paramQX = 0;\r\n paramQY = 0;\r\n }\r\n\r\n // this segment is always ZERO\r\n /* istanbul ignore else @preserve */\r\n if (pathCommand === \"M\") {\r\n // remember mx, my for Z\r\n [, mx, my] = normalSegment as MSegment;\r\n } else if (pathCommand === \"L\") {\r\n totalLength += getLineLength(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n );\r\n } else if (pathCommand === \"A\") {\r\n totalLength += getArcLength(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n normalSegment[5] as number,\r\n normalSegment[6] as number,\r\n normalSegment[7] as number,\r\n );\r\n } else if (pathCommand === \"S\") {\r\n const cp1x = paramX1 * 2 - paramX2;\r\n const cp1y = paramY1 * 2 - paramY2;\r\n\r\n totalLength += getCubicLength(\r\n lastX,\r\n lastY,\r\n cp1x,\r\n cp1y,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n );\r\n } else if (pathCommand === \"C\") {\r\n totalLength += getCubicLength(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n normalSegment[5] as number,\r\n normalSegment[6] as number,\r\n );\r\n } else if (pathCommand === \"T\") {\r\n paramQX = paramX1 * 2 - paramQX;\r\n paramQY = paramY1 * 2 - paramQY;\r\n totalLength += getQuadLength(\r\n lastX,\r\n lastY,\r\n paramQX,\r\n paramQY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n );\r\n } else if (pathCommand === \"Q\") {\r\n paramQX = normalSegment[1] as number;\r\n paramQY = normalSegment[2] as number;\r\n totalLength += getQuadLength(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n );\r\n } else if (pathCommand === \"Z\") {\r\n totalLength += getLineLength(lastX, lastY, mx, my);\r\n }\r\n\r\n // update params\r\n [paramX1, paramY1] = pathCommand === \"Z\"\r\n ? [mx, my]\r\n : (normalSegment.slice(-2) as PointTuple);\r\n [paramX2, paramY2] = pathCommand === \"C\"\r\n ? ([normalSegment[3], normalSegment[4]] as PointTuple)\r\n : pathCommand === \"S\"\r\n ? ([normalSegment[1], normalSegment[2]] as PointTuple)\r\n : [paramX1, paramY1];\r\n });\r\n\r\n return totalLength;\r\n};\r\n\r\nexport default getTotalLength;\r\n","import type { PathArray, PathSegment } from \"../types\";\r\nimport type { SegmentProperties } from \"../interface\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport getTotalLength from \"./getTotalLength\";\r\n\r\n/**\r\n * Returns the segment, its index and length as well as\r\n * the length to that segment at a given length in a path.\r\n *\r\n * @param pathInput target `pathArray`\r\n * @param distance the given length\r\n * @returns the requested properties\r\n */\r\nconst getPropertiesAtLength = (\r\n pathInput: string | PathArray,\r\n distance?: number,\r\n): SegmentProperties => {\r\n const pathArray = parsePathString(pathInput);\r\n\r\n let pathTemp = pathArray.slice(0) as PathArray;\r\n let pathLength = getTotalLength(pathTemp);\r\n let index = pathTemp.length - 1;\r\n let lengthAtSegment = 0;\r\n let length = 0;\r\n let segment = pathArray[0] as PathSegment;\r\n\r\n // If the path is empty, return 0.\r\n if (index <= 0 || !distance || !Number.isFinite(distance)) {\r\n return {\r\n segment,\r\n index: 0,\r\n length,\r\n lengthAtSegment,\r\n };\r\n }\r\n\r\n if (distance >= pathLength) {\r\n pathTemp = pathArray.slice(0, -1) as PathArray;\r\n lengthAtSegment = getTotalLength(pathTemp);\r\n length = pathLength - lengthAtSegment;\r\n segment = pathArray[index];\r\n return {\r\n segment,\r\n index,\r\n length,\r\n lengthAtSegment,\r\n };\r\n }\r\n\r\n const segments = [] as SegmentProperties[];\r\n while (index > 0) {\r\n segment = pathTemp[index];\r\n pathTemp = pathTemp.slice(0, -1) as PathArray;\r\n lengthAtSegment = getTotalLength(pathTemp);\r\n length = pathLength - lengthAtSegment;\r\n pathLength = lengthAtSegment;\r\n\r\n segments.push({\r\n segment,\r\n index,\r\n length,\r\n lengthAtSegment,\r\n });\r\n index -= 1;\r\n }\r\n\r\n return segments.find(({ lengthAtSegment: l }) =>\r\n l <= distance\r\n ) as SegmentProperties;\r\n};\r\n\r\nexport default getPropertiesAtLength;\r\n","import type { PathArray, Point } from \"../types\";\r\nimport type { PointProperties } from \"../interface\";\r\nimport getPointAtLength from \"./getPointAtLength\";\r\nimport getPropertiesAtLength from \"./getPropertiesAtLength\";\r\nimport getTotalLength from \"./getTotalLength\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport normalizePath from \"../process/normalizePath\";\r\n\r\n/**\r\n * Returns the point and segment in path closest to a given point as well as\r\n * the distance to the path stroke.\r\n *\r\n * @see https://bl.ocks.org/mbostock/8027637\r\n *\r\n * @param pathInput target `pathArray`\r\n * @param point the given point\r\n * @returns the requested properties\r\n */\r\nconst getPropertiesAtPoint = (\r\n pathInput: string | PathArray,\r\n point: Point,\r\n): PointProperties => {\r\n const path = parsePathString(pathInput);\r\n const normalPath = normalizePath(path);\r\n const pathLength = getTotalLength(normalPath);\r\n const distanceTo = (p: Point) => {\r\n const dx = p.x - point.x;\r\n const dy = p.y - point.y;\r\n return dx * dx + dy * dy;\r\n };\r\n let precision = 8;\r\n let scan: Point;\r\n let closest = { x: 0, y: 0 }; // make TS happy\r\n let scanDistance = 0;\r\n let bestLength = 0;\r\n let bestDistance = Infinity;\r\n\r\n // linear scan for coarse approximation\r\n for (let scanLength = 0; scanLength <= pathLength; scanLength += precision) {\r\n scan = getPointAtLength(normalPath, scanLength);\r\n scanDistance = distanceTo(scan);\r\n\r\n if (scanDistance < bestDistance) {\r\n closest = scan;\r\n bestLength = scanLength;\r\n bestDistance = scanDistance;\r\n }\r\n }\r\n\r\n // binary search for precise estimate\r\n precision /= 2;\r\n let before: { x: number; y: number };\r\n let after: { x: number; y: number };\r\n let beforeLength = 0;\r\n let afterLength = 0;\r\n let beforeDistance = 0;\r\n let afterDistance = 0;\r\n\r\n while (precision > 0.000001) {\r\n beforeLength = bestLength - precision;\r\n before = getPointAtLength(normalPath, beforeLength);\r\n beforeDistance = distanceTo(before);\r\n afterLength = bestLength + precision;\r\n after = getPointAtLength(normalPath, afterLength);\r\n afterDistance = distanceTo(after);\r\n\r\n if (beforeLength >= 0 && beforeDistance < bestDistance) {\r\n closest = before;\r\n bestLength = beforeLength;\r\n bestDistance = beforeDistance;\r\n } else if (afterLength <= pathLength && afterDistance < bestDistance) {\r\n closest = after;\r\n bestLength = afterLength;\r\n bestDistance = afterDistance;\r\n } else {\r\n precision /= 2;\r\n }\r\n if (precision < 0.00001) break;\r\n }\r\n\r\n const segment = getPropertiesAtLength(path, bestLength);\r\n const distance = Math.sqrt(bestDistance);\r\n\r\n return { closest, distance, segment };\r\n};\r\n\r\nexport default getPropertiesAtPoint;\r\n","import type { PathArray } from \"../types\";\r\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\r\n\r\n/**\r\n * Returns the point in path closest to a given point.\r\n *\r\n * @param pathInput target `pathArray`\r\n * @param point the given point\r\n * @returns the best match\r\n */\r\nconst getClosestPoint = (\r\n pathInput: string | PathArray,\r\n point: { x: number; y: number },\r\n) => {\r\n return getPropertiesAtPoint(pathInput, point).closest;\r\n};\r\n\r\nexport default getClosestPoint;\r\n","import pathToCurve from \"../convert/pathToCurve\";\r\nimport type { PathArray, PointTuple } from \"../types\";\r\n\r\n/**\r\n * Returns the area of a single cubic-bezier segment.\r\n *\r\n * http://objectmix.com/graphics/133553-area-closed-bezier-curve.html\r\n *\r\n * @param x1 the starting point X\r\n * @param y1 the starting point Y\r\n * @param c1x the first control point X\r\n * @param c1y the first control point Y\r\n * @param c2x the second control point X\r\n * @param c2y the second control point Y\r\n * @param x2 the ending point X\r\n * @param y2 the ending point Y\r\n * @returns the area of the cubic-bezier segment\r\n */\r\nconst getCubicSegArea = (\r\n x1: number,\r\n y1: number,\r\n c1x: number,\r\n c1y: number,\r\n c2x: number,\r\n c2y: number,\r\n x2: number,\r\n y2: number,\r\n) => {\r\n return (\r\n (3 *\r\n ((y2 - y1) * (c1x + c2x) -\r\n (x2 - x1) * (c1y + c2y) +\r\n c1y * (x1 - c2x) -\r\n c1x * (y1 - c2y) +\r\n y2 * (c2x + x1 / 3) -\r\n x2 * (c2y + y1 / 3))) /\r\n 20\r\n );\r\n};\r\n\r\n/**\r\n * Returns the area of a shape.\r\n *\r\n * @author Jürg Lehni & Jonathan Puckey\r\n *\r\n * @see https://github.com/paperjs/paper.js/blob/develop/src/path/Path.js\r\n *\r\n * @param path the shape `pathArray`\r\n * @returns the length of the cubic-bezier segment\r\n */\r\nconst getPathArea = (path: PathArray) => {\r\n let x = 0;\r\n let y = 0;\r\n let len = 0;\r\n\r\n return pathToCurve(path)\r\n .map((seg) => {\r\n switch (seg[0]) {\r\n case \"M\":\r\n [, x, y] = seg;\r\n return 0;\r\n default:\r\n len = getCubicSegArea(\r\n x,\r\n y,\r\n seg[1],\r\n seg[2],\r\n seg[3],\r\n seg[4],\r\n seg[5],\r\n seg[6],\r\n );\r\n [x, y] = seg.slice(-2) as PointTuple;\r\n return len;\r\n }\r\n })\r\n .reduce((a, b) => a + b, 0);\r\n};\r\nexport default getPathArea;\r\n","import getPathArea from \"./getPathArea\";\r\nimport pathToCurve from \"../convert/pathToCurve\";\r\nimport type { PathArray } from \"../types\";\r\n\r\n/**\r\n * Check if a path is drawn clockwise and returns true if so,\r\n * false otherwise.\r\n *\r\n * @param path the path string or `pathArray`\r\n * @returns true when clockwise or false if not\r\n */\r\nconst getDrawDirection = (path: string | PathArray) => {\r\n return getPathArea(pathToCurve(path)) >= 0;\r\n};\r\n\r\nexport default getDrawDirection;\r\n","import iterate from \"../process/iterate\";\r\nimport { PathBBox } from \"../interface\";\r\nimport { LSegment, MSegment, PathArray, PointTuple } from \"../types\";\r\nimport { getLineBBox } from \"../math/lineTools\";\r\nimport { getArcBBox } from \"../math/arcTools\";\r\nimport { getCubicBBox } from \"../math/cubicTools\";\r\nimport { getQuadBBox } from \"../math/quadTools\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport absolutizeSegment from \"../process/absolutizeSegment\";\r\n\r\nconst getPathBBox = (pathInput: PathArray | string) => {\r\n if (!pathInput) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n x2: 0,\r\n y2: 0,\r\n cx: 0,\r\n cy: 0,\r\n cz: 0,\r\n };\r\n }\r\n\r\n const path = parsePathString(pathInput);\r\n let pathCommand = \"M\";\r\n let mx = 0;\r\n let my = 0;\r\n const { max, min } = Math;\r\n let xMin = Infinity;\r\n let yMin = Infinity;\r\n let xMax = -Infinity;\r\n let yMax = -Infinity;\r\n let minX = 0;\r\n let minY = 0;\r\n let maxX = 0;\r\n let maxY = 0;\r\n let paramX1 = 0;\r\n let paramY1 = 0;\r\n let paramX2 = 0;\r\n let paramY2 = 0;\r\n let paramQX = 0;\r\n let paramQY = 0;\r\n\r\n iterate(path, (seg, index, lastX, lastY) => {\r\n [pathCommand] = seg;\r\n const absCommand = pathCommand.toUpperCase();\r\n const isRelative = absCommand !== pathCommand;\r\n const absoluteSegment = isRelative\r\n ? absolutizeSegment(seg, index, lastX, lastY)\r\n : (seg.slice(0) as typeof seg);\r\n\r\n const normalSegment = absCommand === \"V\"\r\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\r\n : absCommand === \"H\"\r\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\r\n : absoluteSegment;\r\n\r\n [pathCommand] = normalSegment;\r\n\r\n if (!\"TQ\".includes(absCommand)) {\r\n // optional but good to be cautious\r\n paramQX = 0;\r\n paramQY = 0;\r\n }\r\n\r\n // this segment is always ZERO\r\n /* istanbul ignore else @preserve */\r\n if (pathCommand === \"M\") {\r\n [, mx, my] = normalSegment as MSegment;\r\n minX = mx;\r\n minY = my;\r\n maxX = mx;\r\n maxY = my;\r\n } else if (pathCommand === \"L\") {\r\n [minX, minY, maxX, maxY] = getLineBBox(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n );\r\n } else if (pathCommand === \"A\") {\r\n [minX, minY, maxX, maxY] = getArcBBox(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n normalSegment[5] as number,\r\n normalSegment[6] as number,\r\n normalSegment[7] as number,\r\n );\r\n } else if (pathCommand === \"S\") {\r\n const cp1x = paramX1 * 2 - paramX2;\r\n const cp1y = paramY1 * 2 - paramY2;\r\n\r\n [minX, minY, maxX, maxY] = getCubicBBox(\r\n lastX,\r\n lastY,\r\n cp1x,\r\n cp1y,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n );\r\n } else if (pathCommand === \"C\") {\r\n [minX, minY, maxX, maxY] = getCubicBBox(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n normalSegment[5] as number,\r\n normalSegment[6] as number,\r\n );\r\n } else if (pathCommand === \"T\") {\r\n paramQX = paramX1 * 2 - paramQX;\r\n paramQY = paramY1 * 2 - paramQY;\r\n [minX, minY, maxX, maxY] = getQuadBBox(\r\n lastX,\r\n lastY,\r\n paramQX,\r\n paramQY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n );\r\n } else if (pathCommand === \"Q\") {\r\n paramQX = normalSegment[1] as number;\r\n paramQY = normalSegment[2] as number;\r\n [minX, minY, maxX, maxY] = getQuadBBox(\r\n lastX,\r\n lastY,\r\n normalSegment[1] as number,\r\n normalSegment[2] as number,\r\n normalSegment[3] as number,\r\n normalSegment[4] as number,\r\n );\r\n } else if (pathCommand === \"Z\") {\r\n [minX, minY, maxX, maxY] = getLineBBox(lastX, lastY, mx, my);\r\n }\r\n xMin = min(minX, xMin);\r\n yMin = min(minY, yMin);\r\n xMax = max(maxX, xMax);\r\n yMax = max(maxY, yMax);\r\n\r\n // update params\r\n [paramX1, paramY1] = pathCommand === \"Z\"\r\n ? [mx, my]\r\n : (normalSegment.slice(-2) as PointTuple);\r\n [paramX2, paramY2] = pathCommand === \"C\"\r\n ? ([normalSegment[3], normalSegment[4]] as PointTuple)\r\n : pathCommand === \"S\"\r\n ? ([normalSegment[1], normalSegment[2]] as PointTuple)\r\n : [paramX1, paramY1];\r\n });\r\n\r\n const width = xMax - xMin;\r\n const height = yMax - yMin;\r\n\r\n return {\r\n width,\r\n height,\r\n x: xMin,\r\n y: yMin,\r\n x2: xMax,\r\n y2: yMax,\r\n cx: xMin + width / 2,\r\n cy: yMin + height / 2,\r\n // an estimated guess\r\n cz: Math.max(width, height) + Math.min(width, height) / 2,\r\n } satisfies PathBBox;\r\n};\r\n\r\nexport default getPathBBox;\r\n","import type { PathArray, PathSegment } from \"../types\";\r\nimport getPropertiesAtLength from \"./getPropertiesAtLength\";\r\n\r\n/**\r\n * Returns the segment at a given length.\r\n *\r\n * @param pathInput the target `pathArray`\r\n * @param distance the distance in path to look at\r\n * @returns the requested segment\r\n */\r\nconst getSegmentAtLength = (\r\n pathInput: string | PathArray,\r\n distance?: number,\r\n): PathSegment | undefined => {\r\n return getPropertiesAtLength(pathInput, distance).segment;\r\n};\r\n\r\nexport default getSegmentAtLength;\r\n","import type { SegmentProperties } from \"../interface\";\r\nimport type { PathArray } from \"../types\";\r\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\r\n\r\n/**\r\n * Returns the path segment which contains a given point.\r\n *\r\n * @param path the `pathArray` to look into\r\n * @param point the point of the shape to look for\r\n * @returns the requested segment\r\n */\r\nconst getSegmentOfPoint = (\r\n path: string | PathArray,\r\n point: { x: number; y: number },\r\n): SegmentProperties | undefined => {\r\n return getPropertiesAtPoint(path, point).segment;\r\n};\r\nexport default getSegmentOfPoint;\r\n","import type { PathArray, PathSegment, RelativeCommand } from \"../types\";\r\nimport paramsCount from \"../parser/paramsCount\";\r\n\r\n/**\r\n * Iterates an array to check if it's an actual `pathArray`.\r\n *\r\n * @param path the `pathArray` to be checked\r\n * @returns iteration result\r\n */\r\nconst isPathArray = (path: unknown): path is PathArray => {\r\n return (\r\n Array.isArray(path) &&\r\n path.every((seg: PathSegment) => {\r\n const lk = seg[0].toLowerCase() as RelativeCommand;\r\n return (\r\n paramsCount[lk] === seg.length - 1 &&\r\n \"achlmqstvz\".includes(lk) &&\r\n (seg.slice(1) as unknown[]).every(Number.isFinite)\r\n );\r\n }) &&\r\n path.length > 0\r\n );\r\n};\r\nexport default isPathArray;\r\n","import type { AbsoluteArray } from \"../types\";\r\nimport isPathArray from \"./isPathArray\";\r\n\r\n/**\r\n * Iterates an array to check if it's a `pathArray`\r\n * with all absolute values.\r\n *\r\n * @param path the `pathArray` to be checked\r\n * @returns iteration result\r\n */\r\nconst isAbsoluteArray = (path: unknown): path is AbsoluteArray => {\r\n return (\r\n isPathArray(path) &&\r\n // `isPathArray` also checks if it's `Array`\r\n path.every(([x]) => x === x.toUpperCase())\r\n );\r\n};\r\nexport default isAbsoluteArray;\r\n","import type { NormalArray } from \"../types\";\r\nimport isAbsoluteArray from \"./isAbsoluteArray\";\r\n\r\n/**\r\n * Iterates an array to check if it's a `pathArray`\r\n * with all segments are in non-shorthand notation\r\n * with absolute values.\r\n *\r\n * @param {string | SVGPath.pathArray} path the `pathArray` to be checked\r\n * @returns {boolean} iteration result\r\n */\r\nconst isNormalizedArray = (path: unknown): path is NormalArray => {\r\n // `isAbsoluteArray` also checks if it's `Array`\r\n return isAbsoluteArray(path) && path.every(([pc]) => \"ACLMQZ\".includes(pc));\r\n};\r\nexport default isNormalizedArray;\r\n","import { CurveArray } from \"../types\";\r\nimport isNormalizedArray from \"./isNormalizedArray\";\r\n\r\n/**\r\n * Iterates an array to check if it's a `pathArray`\r\n * with all C (cubic bezier) segments.\r\n *\r\n * @param path the `Array` to be checked\r\n * @returns iteration result\r\n */\r\nconst isCurveArray = (path: unknown): path is CurveArray => {\r\n // `isPathArray` also checks if it's `Array`\r\n return isNormalizedArray(path) && path.every(([pc]) => \"MC\".includes(pc));\r\n};\r\nexport default isCurveArray;\r\n","import type { PathArray } from \"../types\";\r\nimport getPropertiesAtPoint from \"./getPropertiesAtPoint\";\r\nimport DISTANCE_EPSILON from \"./distanceEpsilon\";\r\n\r\n/**\r\n * Checks if a given point is in the stroke of a path.\r\n *\r\n * @param pathInput target path\r\n * @param point the given `{x,y}` point\r\n * @returns the query result\r\n */\r\nconst isPointInStroke = (\r\n pathInput: string | PathArray,\r\n point: { x: number; y: number },\r\n) => {\r\n const { distance } = getPropertiesAtPoint(pathInput, point);\r\n return Math.abs(distance) < DISTANCE_EPSILON; // 0.01 might be more permissive\r\n};\r\nexport default isPointInStroke;\r\n","import type { RelativeArray } from \"../types\";\r\nimport isPathArray from \"./isPathArray\";\r\n\r\n/**\r\n * Iterates an array to check if it's a `pathArray`\r\n * with relative values.\r\n *\r\n * @param path the `pathArray` to be checked\r\n * @returns iteration result\r\n */\r\nconst isRelativeArray = (path: unknown): path is RelativeArray => {\r\n return (\r\n isPathArray(path) &&\r\n // `isPathArray` checks if it's `Array`\r\n path.slice(1).every(([pc]) => pc === pc.toLowerCase())\r\n );\r\n};\r\nexport default isRelativeArray;\r\n","import scanSegment from \"../parser/scanSegment\";\r\nimport skipSpaces from \"../parser/skipSpaces\";\r\nimport PathParser from \"../parser/pathParser\";\r\n\r\n/**\r\n * Parses a path string value to determine its validity\r\n * then returns true if it's valid or false otherwise.\r\n *\r\n * @param pathString the path string to be parsed\r\n * @returns the path string validity\r\n */\r\nconst isValidPath = (pathString: string) => {\r\n if (typeof pathString !== \"string\" || !pathString.length) {\r\n return false;\r\n }\r\n\r\n const path = new PathParser(pathString);\r\n\r\n skipSpaces(path);\r\n\r\n while (path.index < path.max && !path.err.length) {\r\n scanSegment(path);\r\n }\r\n\r\n return !path.err.length && \"mM\".includes(path.segments[0][0]);\r\n};\r\nexport default isValidPath;\r\n","import type { ShapeParams } from \"../interface\";\r\n\r\n/**\r\n * Supported shapes and their specific parameters.\r\n */\r\nconst shapeParams: ShapeParams = {\r\n line: [\"x1\", \"y1\", \"x2\", \"y2\"],\r\n circle: [\"cx\", \"cy\", \"r\"],\r\n ellipse: [\"cx\", \"cy\", \"rx\", \"ry\"],\r\n rect: [\"width\", \"height\", \"x\", \"y\", \"rx\", \"ry\"],\r\n polygon: [\"points\"],\r\n polyline: [\"points\"],\r\n glyph: [\"d\"],\r\n};\r\n\r\nexport default shapeParams;\r\n","const isElement = (node?: unknown): node is Element =>\r\n node !== undefined && node !== null &&\r\n typeof node === \"object\" &&\r\n (node as Node).nodeType === 1; // ELEMENT_NODE\r\n\r\nexport default isElement;\r\n","import type {\r\n CircleAttr,\r\n EllipseAttr,\r\n GlyphAttr,\r\n LineAttr,\r\n PolyAttr,\r\n RectAttr,\r\n ShapeParams,\r\n} from \"../interface\";\r\nimport type { PathArray, PathSegment, ShapeOps, ShapeTypes } from \"../types\";\r\nimport error from \"../parser/error\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport shapeParams from \"./shapeParams\";\r\nimport isPathArray from \"./isPathArray\";\r\nimport isElement from \"./isElement\";\r\n\r\n/**\r\n * Returns a new `pathArray` from line attributes.\r\n *\r\n * @param attr shape configuration\r\n * @returns a new line `pathArray`\r\n */\r\nexport const getLinePath = (attr: LineAttr): PathArray => {\r\n let { x1, y1, x2, y2 } = attr;\r\n [x1, y1, x2, y2] = [x1, y1, x2, y2].map((a) => +a);\r\n return [\r\n [\"M\", x1, y1],\r\n [\"L\", x2, y2],\r\n ];\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` like from polyline/polygon attributes.\r\n *\r\n * @param attr shape configuration\r\n * @return a new polygon/polyline `pathArray`\r\n */\r\nexport const getPolyPath = (attr: PolyAttr): PathArray => {\r\n const pathArray = [] as PathSegment[];\r\n const points = (attr.points || \"\")\r\n .trim()\r\n .split(/[\\s|,]/)\r\n .map((a) => +a);\r\n\r\n let index = 0;\r\n while (index < points.length) {\r\n pathArray.push([index ? \"L\" : \"M\", points[index], points[index + 1]]);\r\n index += 2;\r\n }\r\n\r\n return (attr.type === \"polygon\"\r\n ? [...pathArray, [\"z\"]]\r\n : pathArray) as PathArray;\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` from circle attributes.\r\n *\r\n * @param attr shape configuration\r\n * @return a circle `pathArray`\r\n */\r\nexport const getCirclePath = (attr: CircleAttr): PathArray => {\r\n let { cx, cy, r } = attr;\r\n [cx, cy, r] = [cx, cy, r].map((a) => +a);\r\n\r\n return [\r\n [\"M\", cx - r, cy],\r\n [\"a\", r, r, 0, 1, 0, 2 * r, 0],\r\n [\"a\", r, r, 0, 1, 0, -2 * r, 0],\r\n ];\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` from ellipse attributes.\r\n *\r\n * @param attr shape configuration\r\n * @return an ellipse `pathArray`\r\n */\r\nexport const getEllipsePath = (attr: EllipseAttr): PathArray => {\r\n let { cx, cy } = attr;\r\n let rx = attr.rx || 0;\r\n let ry = attr.ry || rx;\r\n [cx, cy, rx, ry] = [cx, cy, rx, ry].map((a) => +a);\r\n\r\n return [\r\n [\"M\", cx - rx, cy],\r\n [\"a\", rx, ry, 0, 1, 0, 2 * rx, 0],\r\n [\"a\", rx, ry, 0, 1, 0, -2 * rx, 0],\r\n ];\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` like from rect attributes.\r\n *\r\n * @param attr object with properties above\r\n * @return a new `pathArray` from `` attributes\r\n */\r\nexport const getRectanglePath = (attr: RectAttr): PathArray => {\r\n const x = +attr.x || 0;\r\n const y = +attr.y || 0;\r\n const w = +attr.width;\r\n const h = +attr.height;\r\n let rx = +(attr.rx || 0);\r\n let ry = +(attr.ry || rx);\r\n\r\n // Validity checks from http://www.w3.org/TR/SVG/shapes.html#RectElement:\r\n if (rx || ry) {\r\n // rx = !rx ? ry : rx;\r\n // ry = !ry ? rx : ry;\r\n\r\n /* istanbul ignore else @preserve */\r\n if (rx * 2 > w) rx -= (rx * 2 - w) / 2;\r\n /* istanbul ignore else @preserve */\r\n if (ry * 2 > h) ry -= (ry * 2 - h) / 2;\r\n\r\n return [\r\n [\"M\", x + rx, y],\r\n [\"h\", w - rx * 2],\r\n [\"s\", rx, 0, rx, ry],\r\n [\"v\", h - ry * 2],\r\n [\"s\", 0, ry, -rx, ry],\r\n [\"h\", -w + rx * 2],\r\n [\"s\", -rx, 0, -rx, -ry],\r\n [\"v\", -h + ry * 2],\r\n [\"s\", 0, -ry, rx, -ry],\r\n ];\r\n }\r\n\r\n return [[\"M\", x, y], [\"h\", w], [\"v\", h], [\"H\", x], [\"Z\"]];\r\n};\r\n\r\n/**\r\n * Returns a new `pathArray` created from attributes of a ``, ``,\r\n * ``, ``, ``, ``, or ``.\r\n *\r\n * It can also work with an options object, see the type below\r\n * @see ShapeOps\r\n *\r\n * @param element target shape\r\n * @return the newly created `` element\r\n */\r\nconst shapeToPathArray = (\r\n element: ShapeTypes | ShapeOps,\r\n) => {\r\n const supportedShapes = Object.keys(shapeParams) as (keyof ShapeParams)[];\r\n const targetIsElement = isElement(element);\r\n const tagName = targetIsElement ? element.tagName : null;\r\n\r\n if (tagName && [...supportedShapes, \"path\"].every((s) => tagName !== s)) {\r\n throw TypeError(`${error}: \"${tagName}\" is not SVGElement`);\r\n }\r\n\r\n const type =\r\n (targetIsElement ? tagName : (element as ShapeOps).type) as ShapeOps[\r\n \"type\"\r\n ];\r\n const shapeAttrs = shapeParams[type] as string[];\r\n const config = { type } as Record;\r\n\r\n if (targetIsElement) {\r\n shapeAttrs.forEach((p) => {\r\n config[p] = element.getAttribute(p) as string;\r\n });\r\n } else {\r\n Object.assign(config, element);\r\n }\r\n\r\n // set d\r\n let pathArray = [] as unknown as PathArray;\r\n\r\n /* istanbul ignore else */\r\n if (type === \"circle\") {\r\n pathArray = getCirclePath(config as unknown as CircleAttr);\r\n } else if (type === \"ellipse\") {\r\n pathArray = getEllipsePath(config as unknown as EllipseAttr);\r\n } else if ([\"polyline\", \"polygon\"].includes(type)) {\r\n pathArray = getPolyPath(config as unknown as PolyAttr);\r\n } else if (type === \"rect\") {\r\n pathArray = getRectanglePath(config as unknown as RectAttr);\r\n } else if (type === \"line\") {\r\n pathArray = getLinePath(config as unknown as LineAttr);\r\n } else if ([\"glyph\", \"path\"].includes(type)) {\r\n pathArray = parsePathString(\r\n targetIsElement\r\n ? element.getAttribute(\"d\") || /* istanbul ignore next @preserve */ \"\"\r\n : (element as GlyphAttr).d || \"\",\r\n );\r\n }\r\n\r\n // replace target element\r\n if (isPathArray(pathArray) && pathArray.length) {\r\n return pathArray;\r\n }\r\n return false;\r\n};\r\nexport default shapeToPathArray;\r\n","import type { ShapeParams } from \"../interface\";\r\nimport type { ShapeOps, ShapeTypes } from \"../types\";\r\nimport pathToString from \"../convert/pathToString\";\r\nimport defaultOptions from \"../options/options\";\r\nimport error from \"../parser/error\";\r\nimport isValidPath from \"./isValidPath\";\r\nimport isElement from \"./isElement\";\r\nimport shapeToPathArray from \"./shapeToPathArray\";\r\nimport shapeParams from \"./shapeParams\";\r\n\r\n/**\r\n * Returns a new `` element created from attributes of a ``, ``,\r\n * ``, ``, ``, `` or ``. If `replace` parameter\r\n * is `true`, it will replace the target. The default `ownerDocument` is your current\r\n * `document` browser page, if you want to use in server-side using `jsdom`, you can\r\n * pass the `jsdom` `document` to `ownDocument`.\r\n *\r\n * It can also work with an options object, see the type below\r\n * @see ShapeOps\r\n *\r\n * The newly created `` element keeps all non-specific\r\n * attributes like `class`, `fill`, etc.\r\n *\r\n * @param element target shape\r\n * @param replace option to replace target\r\n * @param ownerDocument document for create element\r\n * @return the newly created `` element\r\n */\r\nconst shapeToPath = (\r\n element: ShapeTypes | ShapeOps,\r\n replace?: boolean,\r\n ownerDocument?: Document,\r\n): SVGPathElement | false => {\r\n const doc = ownerDocument || document;\r\n const supportedShapes = Object.keys(shapeParams) as (keyof ShapeParams)[];\r\n const targetIsElement = isElement(element);\r\n const tagName = targetIsElement ? element.tagName : null;\r\n\r\n if (tagName === \"path\") {\r\n throw TypeError(`${error}: \"${tagName}\" is already SVGPathElement`);\r\n }\r\n if (tagName && supportedShapes.every((s) => tagName !== s)) {\r\n throw TypeError(`${error}: \"${tagName}\" is not SVGElement`);\r\n }\r\n\r\n const path = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n const type =\r\n (targetIsElement ? tagName : (element as ShapeOps).type) as ShapeOps[\r\n \"type\"\r\n ];\r\n const shapeAttrs = shapeParams[type] as string[];\r\n const config = { type } as Record;\r\n\r\n // set d\r\n const round = defaultOptions.round as number;\r\n const pathArray = shapeToPathArray(element);\r\n const description = pathArray && pathArray.length\r\n ? pathToString(pathArray, round)\r\n : \"\";\r\n\r\n if (targetIsElement) {\r\n shapeAttrs.forEach((p) => {\r\n config[p] = element.getAttribute(p) as string;\r\n });\r\n // set no-specific shape attributes: fill, stroke, etc\r\n Object.values(element.attributes).forEach(({ name, value }) => {\r\n if (!shapeAttrs.includes(name)) path.setAttribute(name, value);\r\n });\r\n } else {\r\n Object.assign(config, element);\r\n // set no-specific shape attributes: fill, stroke, etc\r\n Object.keys(config).forEach((k) => {\r\n if (!shapeAttrs.includes(k) && k !== \"type\") {\r\n path.setAttribute(\r\n k.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`),\r\n config[k],\r\n );\r\n }\r\n });\r\n }\r\n\r\n // replace target element\r\n if (isValidPath(description)) {\r\n path.setAttribute(\"d\", description);\r\n if (replace && targetIsElement) {\r\n element.before(path, element);\r\n element.remove();\r\n }\r\n return path;\r\n }\r\n return false;\r\n};\r\n\r\nexport default shapeToPath;\r\n","import CSSMatrix from \"@thednp/dommatrix\";\r\n// import type { TransformObject } from '../interface';\r\nimport type { TransformObjectValues } from \"../types\";\r\n\r\n/**\r\n * Returns a transformation matrix to apply to `` elements.\r\n *\r\n * @see TransformObjectValues\r\n *\r\n * @param transform the `transformObject`\r\n * @returns a new transformation matrix\r\n */\r\nconst getSVGMatrix = (transform: TransformObjectValues): CSSMatrix => {\r\n let matrix = new CSSMatrix();\r\n const { origin } = transform;\r\n const [originX, originY] = origin as [number, number, number];\r\n const { translate } = transform;\r\n const { rotate } = transform;\r\n const { skew } = transform;\r\n const { scale } = transform;\r\n\r\n // set translate\r\n if (\r\n Array.isArray(translate) &&\r\n translate.length >= 2 &&\r\n translate.every((x) => !Number.isNaN(+x)) &&\r\n translate.some((x) => x !== 0)\r\n ) {\r\n matrix = matrix.translate(...(translate as [number, number, number?]));\r\n } else if (typeof translate === \"number\" && !Number.isNaN(translate)) {\r\n matrix = matrix.translate(translate);\r\n }\r\n\r\n if (rotate || skew || scale) {\r\n // set SVG transform-origin, always defined\r\n matrix = matrix.translate(originX, originY);\r\n\r\n // set rotation\r\n if (\r\n Array.isArray(rotate) &&\r\n rotate.length >= 2 &&\r\n rotate.every((x) => !Number.isNaN(+x)) &&\r\n rotate.some((x) => x !== 0)\r\n ) {\r\n matrix = matrix.rotate(...(rotate as [number, number, number?]));\r\n } else if (typeof rotate === \"number\" && !Number.isNaN(rotate)) {\r\n matrix = matrix.rotate(rotate);\r\n }\r\n\r\n // set skew(s)\r\n if (\r\n Array.isArray(skew) && skew.length === 2 && skew.every((x) =>\r\n !Number.isNaN(+x)\r\n ) && skew.some((x) => x !== 0)\r\n ) {\r\n matrix = skew[0] ? matrix.skewX(skew[0]) : matrix;\r\n matrix = skew[1] ? matrix.skewY(skew[1]) : matrix;\r\n } else if (typeof skew === \"number\" && !Number.isNaN(skew)) {\r\n matrix = matrix.skewX(skew);\r\n }\r\n\r\n // set scale\r\n if (\r\n Array.isArray(scale) && scale.length >= 2 && scale.every((x) =>\r\n !Number.isNaN(+x)\r\n ) && scale.some((x) => x !== 1)\r\n ) {\r\n matrix = matrix.scale(...(scale as [number, number, number?]));\r\n } else if (typeof scale === \"number\" && !Number.isNaN(scale)) {\r\n matrix = matrix.scale(scale);\r\n }\r\n // set SVG transform-origin\r\n matrix = matrix.translate(-originX, -originY);\r\n }\r\n\r\n return matrix;\r\n};\r\nexport default getSVGMatrix;\r\n","import defaultOptions from \"../options/options\";\r\nimport type { ParserParams } from \"../interface\";\r\nimport roundTo from \"../math/roundTo\";\r\nimport type {\r\n AbsoluteSegment,\r\n NormalSegment,\r\n PathCommand,\r\n ShortSegment,\r\n SSegment,\r\n TSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Shorten a single segment of a `pathArray` object.\r\n *\r\n * @param segment the `absoluteSegment` object\r\n * @param normalSegment the `normalSegment` object\r\n * @param params the coordinates of the previous segment\r\n * @param prevCommand the path command of the previous segment\r\n * @returns the shortened segment\r\n */\r\nconst shortenSegment = (\r\n segment: AbsoluteSegment,\r\n normalSegment: NormalSegment,\r\n params: ParserParams,\r\n prevCommand: PathCommand,\r\n): ShortSegment => {\r\n const [pathCommand] = segment;\r\n const { round: defaultRound } = defaultOptions;\r\n const round = typeof defaultRound === \"number\"\r\n ? defaultRound\r\n : /* istanbul ignore next */ 4;\r\n const normalValues = normalSegment.slice(1) as number[];\r\n const { x1, y1, x2, y2, x, y } = params;\r\n const [nx, ny] = normalValues.slice(-2);\r\n const result = segment;\r\n\r\n if (!\"TQ\".includes(pathCommand)) {\r\n // optional but good to be cautious\r\n params.qx = null;\r\n params.qy = null;\r\n }\r\n\r\n if (pathCommand === \"L\") {\r\n if (roundTo(x, round) === roundTo(nx, round)) {\r\n return [\"V\", ny];\r\n } else if (roundTo(y, round) === roundTo(ny, round)) {\r\n return [\"H\", nx];\r\n }\r\n } else if (pathCommand === \"C\") {\r\n const [nx1, ny1] = normalValues;\r\n params.x1 = nx1;\r\n params.y1 = ny1;\r\n\r\n if (\r\n \"CS\".includes(prevCommand) &&\r\n ((roundTo(nx1, round) === roundTo(x1 * 2 - x2, round) &&\r\n roundTo(ny1, round) === roundTo(y1 * 2 - y2, round)) ||\r\n (roundTo(x1, round) === roundTo(x2 * 2 - x, round) &&\r\n roundTo(y1, round) === roundTo(y2 * 2 - y, round)))\r\n ) {\r\n return [\r\n \"S\",\r\n normalValues[2],\r\n normalValues[3],\r\n normalValues[4],\r\n normalValues[5],\r\n ] as SSegment;\r\n }\r\n } else if (pathCommand === \"Q\") {\r\n const [qx, qy] = normalValues;\r\n params.qx = qx;\r\n params.qy = qy;\r\n\r\n if (\r\n \"QT\".includes(prevCommand) &&\r\n roundTo(qx, round) === roundTo(x1 * 2 - x2, round) &&\r\n roundTo(qy, round) === roundTo(y1 * 2 - y2, round)\r\n ) {\r\n return [\"T\", normalValues[2], normalValues[3]] as TSegment;\r\n }\r\n }\r\n\r\n // ['V', 'H', 'S', 'T', 'Z'].includes(pathCommand)\r\n return result as ShortSegment;\r\n};\r\n\r\nexport default shortenSegment;\r\n","import type { PathCommand, PathSegment } from \"../types\";\r\nimport roundTo from \"../math/roundTo\";\r\n\r\nconst roundSegment = (\r\n segment: T,\r\n roundOption: number,\r\n) => {\r\n const values = (segment.slice(1) as number[]).map((n) =>\r\n roundTo(n, roundOption)\r\n );\r\n return [segment[0] as PathCommand | number].concat(values) as T;\r\n};\r\n\r\nexport default roundSegment;\r\n","import type { AbsoluteSegment, PathArray, PathCommand } from \"../types\";\r\nimport pathToAbsolute from \"../convert/pathToAbsolute\";\r\nimport shortenSegment from \"./shortenSegment\";\r\nimport paramsParser from \"../parser/paramsParser\";\r\nimport iterate from \"./iterate\";\r\nimport normalizeSegment from \"./normalizeSegment\";\r\nimport relativizeSegment from \"./relativizeSegment\";\r\nimport roundSegment from \"./roundSegment\";\r\n\r\n/**\r\n * Optimizes a `pathArray` object:\r\n * * convert segments to shorthand if possible\r\n * * select shortest segments from absolute and relative `pathArray`s\r\n *\r\n * @param pathInput a string or `pathArray`\r\n * @param roundOption the amount of decimals to round values to\r\n * @returns the optimized `pathArray`\r\n */\r\nconst optimizePath = (pathInput: PathArray, roundOption?: number) => {\r\n const path = pathToAbsolute(pathInput);\r\n // allow for ZERO decimals or use an aggressive value of 2\r\n const round = typeof roundOption === \"number\" && roundOption >= 0\r\n ? roundOption\r\n : /* istanbul ignore next @preserve */ 2;\r\n // this utility overrides the iterator params\r\n const optimParams = { ...paramsParser };\r\n\r\n const allPathCommands = [] as PathCommand[];\r\n let pathCommand = \"M\" as PathCommand;\r\n let prevCommand = \"Z\" as PathCommand;\r\n\r\n return iterate(path, (seg, i, lastX, lastY) => {\r\n optimParams.x = lastX;\r\n optimParams.y = lastY;\r\n const normalizedSegment = normalizeSegment(seg, optimParams);\r\n let result = seg;\r\n [pathCommand] = seg;\r\n\r\n // Save current path command\r\n allPathCommands[i] = pathCommand;\r\n if (i) {\r\n // Get previous path command for `shortenSegment`\r\n prevCommand = allPathCommands[i - 1];\r\n const shortSegment = shortenSegment(\r\n seg as AbsoluteSegment,\r\n normalizedSegment,\r\n optimParams,\r\n prevCommand,\r\n );\r\n const absSegment = roundSegment(shortSegment, round);\r\n const absString = absSegment.join(\"\");\r\n const relativeSegment = relativizeSegment(shortSegment, i, lastX, lastY);\r\n const relSegment = roundSegment(relativeSegment, round);\r\n const relString = relSegment.join(\"\");\r\n result = absString.length < relString.length ? absSegment : relSegment;\r\n }\r\n\r\n const seglen = normalizedSegment.length;\r\n optimParams.x1 = +normalizedSegment[seglen - 2];\r\n optimParams.y1 = +normalizedSegment[seglen - 1];\r\n optimParams.x2 = +normalizedSegment[seglen - 4] || optimParams.x1;\r\n optimParams.y2 = +normalizedSegment[seglen - 3] || optimParams.y1;\r\n\r\n return result;\r\n });\r\n};\r\n\r\nexport default optimizePath;\r\n","import CSSMatrix from \"@thednp/dommatrix\";\r\nimport { type PointTuple } from \"../types\";\r\n\r\n/**\r\n * Transforms a specified point using a matrix, returning a new\r\n * Tuple *Object* comprising of the transformed point.\r\n * Neither the matrix nor the original point are altered.\r\n *\r\n * @copyright thednp © 2021\r\n *\r\n * @param cssm CSSMatrix instance\r\n * @param v Tuple\r\n * @return the resulting Tuple\r\n */\r\nconst translatePoint = (\r\n cssm: CSSMatrix,\r\n v: [number, number, number, number],\r\n): [number, number, number, number] => {\r\n let m = CSSMatrix.Translate(v[0], v[1], v[2]);\r\n\r\n [, , , m.m44] = v;\r\n m = cssm.multiply(m);\r\n\r\n return [m.m41, m.m42, m.m43, m.m44];\r\n};\r\n\r\n/**\r\n * Returns the [x,y] projected coordinates for a given an [x,y] point\r\n * and an [x,y,z] perspective origin point.\r\n *\r\n * Equation found here =>\r\n * http://en.wikipedia.org/wiki/3D_projection#Diagram\r\n * Details =>\r\n * https://stackoverflow.com/questions/23792505/predicted-rendering-of-css-3d-transformed-pixel\r\n *\r\n * @param m the transformation matrix\r\n * @param point2D the initial [x,y] coordinates\r\n * @param origin the [x,y,z] transform origin\r\n * @returns the projected [x,y] coordinates\r\n */\r\nconst projection2d = (\r\n m: CSSMatrix,\r\n point2D: PointTuple,\r\n origin: [number, number, number],\r\n): PointTuple => {\r\n const [originX, originY, originZ] = origin;\r\n const [x, y, z] = translatePoint(m, [point2D[0], point2D[1], 0, 1]);\r\n\r\n const relativePositionX = x - originX;\r\n const relativePositionY = y - originY;\r\n const relativePositionZ = z - originZ;\r\n\r\n return [\r\n // protect against division by ZERO\r\n relativePositionX * (Math.abs(originZ) / Math.abs(relativePositionZ) || 1) +\r\n originX,\r\n relativePositionY * (Math.abs(originZ) / Math.abs(relativePositionZ) || 1) +\r\n originY,\r\n ];\r\n};\r\nexport default projection2d;\r\n","import type { CSegment, CurveArray, MSegment, PathCommand } from \"../types\";\r\n\r\n/**\r\n * Reverses all segments of a `pathArray`\r\n * which consists of only C (cubic-bezier) path commands.\r\n *\r\n * @param path the source `pathArray`\r\n * @returns the reversed `pathArray`\r\n */\r\nconst reverseCurve = (path: CurveArray) => {\r\n const rotatedCurve = path\r\n .slice(1)\r\n .map((x, i, curveOnly) =>\r\n !i\r\n ? path[0].slice(1).concat(x.slice(1) as number[])\r\n : curveOnly[i - 1].slice(-2).concat(x.slice(1))\r\n )\r\n .map((x) => x.map((_, i) => x[x.length - i - 2 * (1 - (i % 2))]))\r\n .reverse() as (MSegment | CSegment)[];\r\n\r\n return [[\"M\" as PathCommand | number].concat(rotatedCurve[0].slice(0, 2))]\r\n .concat(\r\n rotatedCurve.map((x) => [\"C\" as PathCommand | number].concat(x.slice(2))),\r\n ) as CurveArray;\r\n};\r\n\r\nexport default reverseCurve;\r\n","import type {\r\n ASegment,\r\n CSegment,\r\n HSegment,\r\n MSegment,\r\n PathArray,\r\n PathSegment,\r\n PointTuple,\r\n QSegment,\r\n SSegment,\r\n TSegment,\r\n VSegment,\r\n} from \"../types\";\r\nimport pathToAbsolute from \"../convert/pathToAbsolute\";\r\nimport normalizePath from \"./normalizePath\";\r\nimport iterate from \"./iterate\";\r\n\r\n/**\r\n * Reverses all segments of a `pathArray` and returns a new `pathArray` instance\r\n * with absolute values.\r\n *\r\n * @param pathInput the source `pathArray`\r\n * @returns the reversed `pathArray`\r\n */\r\nconst reversePath = (pathInput: PathArray) => {\r\n const absolutePath = pathToAbsolute(pathInput);\r\n const normalizedPath = normalizePath(absolutePath);\r\n const pLen = absolutePath.length;\r\n const isClosed = absolutePath[pLen - 1][0] === \"Z\";\r\n\r\n const reversedPath = iterate(absolutePath, (segment, i) => {\r\n const normalizedSegment = normalizedPath[i];\r\n const prevSeg = i && absolutePath[i - 1];\r\n const prevCommand = prevSeg && prevSeg[0];\r\n const nextSeg = absolutePath[i + 1];\r\n const nextCommand = nextSeg && nextSeg[0];\r\n const [pathCommand] = segment;\r\n const [x, y] = normalizedPath[i ? i - 1 : pLen - 1].slice(-2) as PointTuple;\r\n let result = segment;\r\n\r\n switch (pathCommand) {\r\n case \"M\":\r\n result = (isClosed ? [\"Z\"] : [pathCommand, x, y]) as PathSegment;\r\n break;\r\n case \"A\":\r\n result = [\r\n pathCommand,\r\n segment[1],\r\n segment[2],\r\n segment[3],\r\n segment[4],\r\n segment[5] === 1 ? 0 : 1,\r\n x,\r\n y,\r\n ] as ASegment;\r\n break;\r\n case \"C\":\r\n if (nextSeg && nextCommand === \"S\") {\r\n result = [\"S\", segment[1], segment[2], x, y] as SSegment;\r\n } else {\r\n result = [\r\n pathCommand,\r\n segment[3],\r\n segment[4],\r\n segment[1],\r\n segment[2],\r\n x,\r\n y,\r\n ] as CSegment;\r\n }\r\n break;\r\n case \"S\":\r\n if (\r\n prevCommand && \"CS\".includes(prevCommand) &&\r\n (!nextSeg || nextCommand !== \"S\")\r\n ) {\r\n result = [\r\n \"C\",\r\n normalizedSegment[3],\r\n normalizedSegment[4],\r\n normalizedSegment[1],\r\n normalizedSegment[2],\r\n x,\r\n y,\r\n ] as CSegment;\r\n } else {\r\n result = [\r\n pathCommand,\r\n normalizedSegment[1],\r\n normalizedSegment[2],\r\n x,\r\n y,\r\n ] as SSegment;\r\n }\r\n break;\r\n case \"Q\":\r\n if (nextSeg && nextCommand === \"T\") {\r\n result = [\"T\", x, y] as TSegment;\r\n } else {\r\n result = [pathCommand, segment[1], segment[2], x, y] as QSegment;\r\n }\r\n break;\r\n case \"T\":\r\n if (\r\n prevCommand && \"QT\".includes(prevCommand) &&\r\n (!nextSeg || nextCommand !== \"T\")\r\n ) {\r\n result = [\r\n \"Q\",\r\n normalizedSegment[1],\r\n normalizedSegment[2],\r\n x,\r\n y,\r\n ] as QSegment;\r\n } else {\r\n result = [pathCommand, x, y] as TSegment;\r\n }\r\n break;\r\n case \"Z\":\r\n result = [\"M\", x, y] as MSegment;\r\n break;\r\n case \"H\":\r\n result = [pathCommand, x] as HSegment;\r\n break;\r\n case \"V\":\r\n result = [pathCommand, y] as VSegment;\r\n break;\r\n default:\r\n result = [pathCommand as typeof pathCommand | number].concat(\r\n segment.slice(1, -2),\r\n x,\r\n y,\r\n ) as PathSegment;\r\n }\r\n\r\n return result;\r\n });\r\n\r\n return (\r\n isClosed\r\n ? reversedPath.reverse()\r\n : [reversedPath[0] as PathSegment].concat(reversedPath.slice(1).reverse())\r\n ) as PathArray;\r\n};\r\n\r\nexport default reversePath;\r\n","import type { PathArray } from \"../types\";\r\nimport defaultOptions from \"../options/options\";\r\nimport iterate from \"./iterate\";\r\nimport roundSegment from \"./roundSegment\";\r\n\r\n/**\r\n * Rounds the values of a `pathArray` instance to\r\n * a specified amount of decimals and returns it.\r\n *\r\n * @param path the source `pathArray`\r\n * @param roundOption the amount of decimals to round numbers to\r\n * @returns the resulted `pathArray` with rounded values\r\n */\r\nconst roundPath = (path: PathArray, roundOption?: number | \"off\") => {\r\n let { round } = defaultOptions;\r\n // allow for ZERO decimals\r\n round = roundOption === \"off\"\r\n ? roundOption\r\n : typeof roundOption === \"number\" && roundOption >= 0\r\n ? roundOption\r\n : typeof round === \"number\" && round >= 0\r\n ? round\r\n : /* istanbul ignore next @preserve */ \"off\";\r\n\r\n /* istanbul ignore else @preserve */\r\n if (round === \"off\") return path.slice(0) as PathArray;\r\n\r\n return iterate(path, (segment) => {\r\n return roundSegment(segment, round);\r\n });\r\n};\r\nexport default roundPath;\r\n","import midPoint from \"../math/midPoint\";\r\nimport type { CubicSegment, PointTuple } from \"../types\";\r\n\r\n/**\r\n * Split a cubic-bezier segment into two.\r\n *\r\n * @param pts the cubic-bezier parameters\r\n * @param ratio the cubic-bezier parameters\r\n * @return two new cubic-bezier segments\r\n */\r\nconst splitCubic = (\r\n pts: number[],\r\n ratio = 0.5,\r\n): [CubicSegment, CubicSegment] => {\r\n const t = ratio;\r\n const p0 = pts.slice(0, 2) as PointTuple;\r\n const p1 = pts.slice(2, 4) as PointTuple;\r\n const p2 = pts.slice(4, 6) as PointTuple;\r\n const p3 = pts.slice(6, 8) as PointTuple;\r\n const p4 = midPoint(p0, p1, t);\r\n const p5 = midPoint(p1, p2, t);\r\n const p6 = midPoint(p2, p3, t);\r\n const p7 = midPoint(p4, p5, t);\r\n const p8 = midPoint(p5, p6, t);\r\n const p9 = midPoint(p7, p8, t);\r\n\r\n return [\r\n [\"C\", p4[0], p4[1], p7[0], p7[1], p9[0], p9[1]],\r\n [\"C\", p8[0], p8[1], p6[0], p6[1], p3[0], p3[1]],\r\n ];\r\n};\r\nexport default splitCubic;\r\n","import paramsParser from \"../parser/paramsParser\";\r\nimport type {\r\n AbsoluteCommand,\r\n HSegment,\r\n MSegment,\r\n PathArray,\r\n PointTuple,\r\n RelativeCommand,\r\n VSegment,\r\n} from \"../types\";\r\n\r\n/**\r\n * Split a path into an `Array` of sub-path strings.\r\n *\r\n * In the process, values are converted to absolute\r\n * for visual consistency.\r\n *\r\n * @param pathInput the source `pathArray`\r\n * @return an array with all sub-path strings\r\n */\r\nconst splitPath = (pathInput: PathArray): PathArray[] => {\r\n const composite = [] as PathArray[];\r\n let path: PathArray;\r\n let pi = -1;\r\n let x = 0;\r\n let y = 0;\r\n let mx = 0;\r\n let my = 0;\r\n const params = { ...paramsParser };\r\n\r\n pathInput.forEach((seg) => {\r\n const [pathCommand] = seg;\r\n const absCommand = pathCommand.toUpperCase() as AbsoluteCommand;\r\n const relCommand = pathCommand.toLowerCase() as RelativeCommand;\r\n const isRelative = pathCommand === relCommand;\r\n const values = seg.slice(1) as number[];\r\n\r\n if (absCommand === \"M\") {\r\n pi += 1;\r\n [x, y] = values as PointTuple;\r\n x += isRelative ? params.x : 0;\r\n y += isRelative ? params.y : 0;\r\n mx = x;\r\n my = y;\r\n path = [(isRelative ? [absCommand, mx, my] : seg) as MSegment];\r\n } else {\r\n if (absCommand === \"Z\") {\r\n x = mx;\r\n y = my;\r\n } else if (absCommand === \"H\") {\r\n [, x] = seg as HSegment;\r\n x += isRelative ? params.x : /* istanbul ignore next @preserve */ 0;\r\n } else if (absCommand === \"V\") {\r\n [, y] = seg as VSegment;\r\n y += isRelative ? params.y : /* istanbul ignore next @preserve */ 0;\r\n } else {\r\n [x, y] = seg.slice(-2) as PointTuple;\r\n x += isRelative ? params.x : 0;\r\n y += isRelative ? params.y : 0;\r\n }\r\n path.push(seg);\r\n }\r\n\r\n params.x = x;\r\n params.y = y;\r\n composite[pi] = path;\r\n });\r\n\r\n return composite;\r\n};\r\nexport default splitPath;\r\n","import getSVGMatrix from \"./getSVGMatrix\";\r\nimport projection2d from \"./projection2d\";\r\nimport defaultOptions from \"../options/options\";\r\nimport type {\r\n AbsoluteArray,\r\n AbsoluteSegment,\r\n CSegment,\r\n LSegment,\r\n PathArray,\r\n TransformObjectValues,\r\n} from \"../types\";\r\nimport type { TransformObject } from \"../interface\";\r\nimport iterate from \"./iterate\";\r\nimport parsePathString from \"../parser/parsePathString\";\r\nimport absolutizeSegment from \"./absolutizeSegment\";\r\nimport arcToCubic from \"./arcToCubic\";\r\n\r\n/**\r\n * Apply a 2D / 3D transformation to a `pathArray` instance.\r\n *\r\n * Since *SVGElement* doesn't support 3D transformation, this function\r\n * creates a 2D projection of the element.\r\n *\r\n * @param path the `pathArray` to apply transformation\r\n * @param transform the transform functions `Object`\r\n * @returns the resulted `pathArray`\r\n */\r\nconst transformPath = (\r\n pathInput: PathArray | string,\r\n transform?: Partial,\r\n) => {\r\n // last x and y transformed values\r\n let x = 0;\r\n let y = 0;\r\n // new x and y transformed\r\n let lx = 0;\r\n let ly = 0;\r\n // segment params iteration index and length\r\n let j = 0;\r\n let jj = 0;\r\n let pathCommand = \"M\";\r\n // transform uses it's own set of params\r\n const path = parsePathString(pathInput);\r\n const transformProps = transform && Object.keys(transform);\r\n\r\n // when used as a static method, invalidate somehow\r\n if (!transform || (transformProps && !transformProps.length)) {\r\n return path.slice(0) as typeof path;\r\n }\r\n\r\n // transform origin is extremely important\r\n if (!transform.origin) {\r\n Object.assign(transform, { origin: defaultOptions.origin });\r\n }\r\n const origin = transform.origin as [number, number, number];\r\n const matrixInstance = getSVGMatrix(transform as TransformObjectValues);\r\n\r\n if (matrixInstance.isIdentity) return path.slice(0) as typeof path;\r\n\r\n return iterate(path, (seg, index, lastX, lastY) => {\r\n [pathCommand] = seg;\r\n const absCommand = pathCommand.toUpperCase();\r\n const isRelative = absCommand !== pathCommand;\r\n const absoluteSegment = isRelative\r\n ? absolutizeSegment(seg, index, lastX, lastY)\r\n : (seg.slice(0) as AbsoluteSegment);\r\n\r\n let result = absCommand === \"A\"\r\n // ? segmentToCubic(absoluteSegment, transformParams)\r\n ? ([\"C\" as string | number].concat(\r\n arcToCubic(\r\n lastX,\r\n lastY,\r\n absoluteSegment[1] as number,\r\n absoluteSegment[2] as number,\r\n absoluteSegment[3] as number,\r\n absoluteSegment[4] as number,\r\n absoluteSegment[5] as number,\r\n absoluteSegment[6] as number,\r\n absoluteSegment[7] as number,\r\n ),\r\n ) as CSegment)\r\n : absCommand === \"V\"\r\n ? ([\"L\", lastX, absoluteSegment[1]] as LSegment)\r\n : absCommand === \"H\"\r\n ? ([\"L\", absoluteSegment[1], lastY] as LSegment)\r\n : absoluteSegment;\r\n\r\n // update pathCommand\r\n pathCommand = result[0];\r\n const isLongArc = pathCommand === \"C\" && result.length > 7;\r\n const tempSegment =\r\n (isLongArc ? result.slice(0, 7) : result.slice(0)) as AbsoluteSegment;\r\n\r\n if (isLongArc) {\r\n path.splice(\r\n index + 1,\r\n 0,\r\n [\"C\" as typeof pathCommand | number].concat(\r\n result.slice(7),\r\n ) as CSegment,\r\n );\r\n result = tempSegment as CSegment;\r\n }\r\n\r\n if (pathCommand === \"L\") {\r\n [lx, ly] = projection2d(matrixInstance, [\r\n (result as LSegment)[1],\r\n (result as LSegment)[2],\r\n ], origin);\r\n\r\n /* istanbul ignore else @preserve */\r\n if (x !== lx && y !== ly) {\r\n result = [\"L\", lx, ly];\r\n } else if (y === ly) {\r\n result = [\"H\", lx];\r\n } else if (x === lx) {\r\n result = [\"V\", ly];\r\n }\r\n } else {\r\n for (j = 1, jj = result.length; j < jj; j += 2) {\r\n [lx, ly] = projection2d(\r\n matrixInstance,\r\n [+result[j], +result[j + 1]],\r\n origin,\r\n );\r\n result[j] = lx;\r\n result[j + 1] = ly;\r\n }\r\n }\r\n // now update x and y\r\n x = lx;\r\n y = ly;\r\n\r\n return result;\r\n });\r\n};\r\n\r\nexport default transformPath;\r\n","\"use strict\";\r\nimport CSSMatrix from \"@thednp/dommatrix\";\r\nimport { PathArray, PointTuple, TransformObjectValues } from \"./types\";\r\nimport type { Options, TransformEntries, TransformObject } from \"./interface\";\r\nexport * from \"./types\";\r\nexport * from \"./interface\";\r\nimport defaultOptions from \"./options/options\";\r\n\r\nimport pathToAbsolute from \"./convert/pathToAbsolute\";\r\nimport pathToRelative from \"./convert/pathToRelative\";\r\nimport pathToCurve from \"./convert/pathToCurve\";\r\nimport pathToString from \"./convert/pathToString\";\r\nimport * as arcTools from \"./math/arcTools\";\r\nimport {\r\n bezierLength,\r\n calculateBezier,\r\n CBEZIER_MINMAX_EPSILON,\r\n computeBezier,\r\n Cvalues,\r\n deriveBezier,\r\n getBezierLength,\r\n minmaxC,\r\n minmaxQ,\r\n Tvalues,\r\n} from \"./math/bezier\";\r\nimport {\r\n getCubicBBox,\r\n getCubicLength,\r\n getPointAtCubicLength,\r\n getPointAtCubicSegmentLength,\r\n} from \"./math/cubicTools\";\r\nimport {\r\n getLineBBox,\r\n getLineLength,\r\n getPointAtLineLength,\r\n} from \"./math/lineTools\";\r\nimport {\r\n getPointAtQuadLength,\r\n getPointAtQuadSegmentLength,\r\n getQuadBBox,\r\n getQuadLength,\r\n} from \"./math/quadTools\";\r\nimport { polygonArea, polygonLength } from \"./math/polygonTools\";\r\n\r\nimport distanceSquareRoot from \"./math/distanceSquareRoot\";\r\nimport midPoint from \"./math/midPoint\";\r\nimport rotateVector from \"./math/rotateVector\";\r\nimport roundTo from \"./math/roundTo\";\r\n\r\nimport error from \"./parser/error\";\r\nimport parsePathString from \"./parser/parsePathString\";\r\nimport finalizeSegment from \"./parser/finalizeSegment\";\r\nimport invalidPathValue from \"./parser/invalidPathValue\";\r\nimport isArcCommand from \"./parser/isArcCommand\";\r\nimport isDigit from \"./parser/isDigit\";\r\nimport isDigitStart from \"./parser/isDigitStart\";\r\nimport isMoveCommand from \"./parser/isMoveCommand\";\r\nimport isPathCommand from \"./parser/isPathCommand\";\r\nimport isSpace from \"./parser/isSpace\";\r\nimport paramsCount from \"./parser/paramsCount\";\r\nimport paramsParser from \"./parser/paramsParser\";\r\nimport pathParser from \"./parser/pathParser\";\r\nimport scanFlag from \"./parser/scanFlag\";\r\nimport scanParam from \"./parser/scanParam\";\r\nimport scanSegment from \"./parser/scanSegment\";\r\nimport skipSpaces from \"./parser/skipSpaces\";\r\n\r\nimport distanceEpsilon from \"./util/distanceEpsilon\";\r\nimport getClosestPoint from \"./util/getClosestPoint\";\r\nimport getDrawDirection from \"./util/getDrawDirection\";\r\nimport getPathArea from \"./util/getPathArea\";\r\nimport getPathBBox from \"./util/getPathBBox\";\r\nimport getPointAtLength from \"./util/getPointAtLength\";\r\nimport getPropertiesAtLength from \"./util/getPropertiesAtLength\";\r\nimport getPropertiesAtPoint from \"./util/getPropertiesAtPoint\";\r\nimport getSegmentAtLength from \"./util/getSegmentAtLength\";\r\nimport getSegmentOfPoint from \"./util/getSegmentOfPoint\";\r\nimport getTotalLength from \"./util/getTotalLength\";\r\n\r\nimport isAbsoluteArray from \"./util/isAbsoluteArray\";\r\nimport isCurveArray from \"./util/isCurveArray\";\r\nimport isNormalizedArray from \"./util/isNormalizedArray\";\r\nimport isPathArray from \"./util/isPathArray\";\r\nimport isPointInStroke from \"./util/isPointInStroke\";\r\nimport isRelativeArray from \"./util/isRelativeArray\";\r\nimport isValidPath from \"./util/isValidPath\";\r\nimport shapeParams from \"./util/shapeParams\";\r\nimport shapeToPath from \"./util/shapeToPath\";\r\nimport shapeToPathArray from \"./util/shapeToPathArray\";\r\n\r\nimport absolutizeSegment from \"./process/absolutizeSegment\";\r\nimport arcToCubic from \"./process/arcToCubic\";\r\nimport getSVGMatrix from \"./process/getSVGMatrix\";\r\nimport iterate from \"./process/iterate\";\r\nimport lineToCubic from \"./process/lineToCubic\";\r\nimport normalizePath from \"./process/normalizePath\";\r\nimport normalizeSegment from \"./process/normalizeSegment\";\r\nimport optimizePath from \"./process/optimizePath\";\r\nimport projection2d from \"./process/projection2d\";\r\nimport quadToCubic from \"./process/quadToCubic\";\r\nimport relativizeSegment from \"./process/relativizeSegment\";\r\nimport reverseCurve from \"./process/reverseCurve\";\r\nimport reversePath from \"./process/reversePath\";\r\nimport roundPath from \"./process/roundPath\";\r\nimport roundSegment from \"./process/roundSegment\";\r\nimport segmentToCubic from \"./process/segmentToCubic\";\r\nimport shortenSegment from \"./process/shortenSegment\";\r\nimport splitCubic from \"./process/splitCubic\";\r\nimport splitPath from \"./process/splitPath\";\r\nimport transformPath from \"./process/transformPath\";\r\n\r\n/**\r\n * Creates a new SVGPathCommander instance with the following properties:\r\n * * segments: `pathArray`\r\n * * round: number\r\n * * origin: [number, number, number?]\r\n *\r\n * @class\r\n * @author thednp \r\n * @returns a new SVGPathCommander instance\r\n */\r\nclass SVGPathCommander {\r\n public static CSSMatrix = CSSMatrix;\r\n public static pathToAbsolute = pathToAbsolute;\r\n public static pathToRelative = pathToRelative;\r\n public static pathToCurve = pathToCurve;\r\n public static pathToString = pathToString;\r\n public static arcTools = arcTools;\r\n public static bezierTools = {\r\n Cvalues,\r\n Tvalues,\r\n minmaxC,\r\n minmaxQ,\r\n getBezierLength,\r\n bezierLength,\r\n calculateBezier,\r\n computeBezier,\r\n deriveBezier,\r\n CBEZIER_MINMAX_EPSILON,\r\n };\r\n public static cubicTools = {\r\n getCubicLength,\r\n getCubicBBox,\r\n getPointAtCubicLength,\r\n getPointAtCubicSegmentLength,\r\n };\r\n public static lineTools = {\r\n getPointAtLineLength,\r\n getLineBBox,\r\n getLineLength,\r\n };\r\n public static quadTools = {\r\n getPointAtQuadSegmentLength,\r\n getQuadLength,\r\n getQuadBBox,\r\n getPointAtQuadLength,\r\n };\r\n public static polygonTools = { polygonArea, polygonLength };\r\n public static distanceSquareRoot = distanceSquareRoot;\r\n public static distanceEpsilon = distanceEpsilon;\r\n public static midPoint = midPoint;\r\n public static rotateVector = rotateVector;\r\n public static roundTo = roundTo;\r\n public static finalizeSegment = finalizeSegment;\r\n public static invalidPathValue = invalidPathValue;\r\n public static isArcCommand = isArcCommand;\r\n public static isDigit = isDigit;\r\n public static isDigitStart = isDigitStart;\r\n public static isMoveCommand = isMoveCommand;\r\n public static isPathCommand = isPathCommand;\r\n public static isSpace = isSpace;\r\n public static paramsCount = paramsCount;\r\n public static paramsParser = paramsParser;\r\n public static pathParser = pathParser;\r\n public static scanFlag = scanFlag;\r\n public static scanParam = scanParam;\r\n public static scanSegment = scanSegment;\r\n public static skipSpaces = skipSpaces;\r\n public static getPathBBox = getPathBBox;\r\n public static getPathArea = getPathArea;\r\n public static getTotalLength = getTotalLength;\r\n public static getDrawDirection = getDrawDirection;\r\n public static getPointAtLength = getPointAtLength;\r\n public static getPropertiesAtLength = getPropertiesAtLength;\r\n public static getPropertiesAtPoint = getPropertiesAtPoint;\r\n public static getClosestPoint = getClosestPoint;\r\n public static getSegmentOfPoint = getSegmentOfPoint;\r\n public static getSegmentAtLength = getSegmentAtLength;\r\n public static isPointInStroke = isPointInStroke;\r\n public static isValidPath = isValidPath;\r\n public static isPathArray = isPathArray;\r\n public static isAbsoluteArray = isAbsoluteArray;\r\n public static isRelativeArray = isRelativeArray;\r\n public static isCurveArray = isCurveArray;\r\n public static isNormalizedArray = isNormalizedArray;\r\n public static shapeToPath = shapeToPath;\r\n public static shapeToPathArray = shapeToPathArray;\r\n public static shapeParams = shapeParams;\r\n public static parsePathString = parsePathString;\r\n public static absolutizeSegment = absolutizeSegment;\r\n public static arcToCubic = arcToCubic;\r\n public static getSVGMatrix = getSVGMatrix;\r\n public static iterate = iterate;\r\n public static lineToCubic = lineToCubic;\r\n public static normalizePath = normalizePath;\r\n public static normalizeSegment = normalizeSegment;\r\n public static optimizePath = optimizePath;\r\n public static projection2d = projection2d;\r\n public static quadToCubic = quadToCubic;\r\n public static relativizeSegment = relativizeSegment;\r\n public static reverseCurve = reverseCurve;\r\n public static reversePath = reversePath;\r\n public static roundPath = roundPath;\r\n public static roundSegment = roundSegment;\r\n public static segmentToCubic = segmentToCubic;\r\n public static shortenSegment = shortenSegment;\r\n public static splitCubic = splitCubic;\r\n public static splitPath = splitPath;\r\n public static transformPath = transformPath;\r\n // declare class properties\r\n declare segments: PathArray;\r\n declare round: number | \"off\";\r\n declare origin: [number, number, number];\r\n\r\n /**\r\n * @constructor\r\n * @param pathValue the path string\r\n * @param config instance options\r\n */\r\n constructor(pathValue: string, config?: Partial) {\r\n const instanceOptions = config || {};\r\n const undefPath = typeof pathValue === \"undefined\";\r\n\r\n if (undefPath || !pathValue.length) {\r\n throw TypeError(\r\n `${error}: \"pathValue\" is ${undefPath ? \"undefined\" : \"empty\"}`,\r\n );\r\n }\r\n\r\n this.segments = parsePathString(pathValue);\r\n\r\n // // set instance options.round\r\n const { round: roundOption, origin: originOption } = instanceOptions;\r\n let round: number | \"off\";\r\n\r\n if (Number.isInteger(roundOption) || roundOption === \"off\") {\r\n round = roundOption as number | \"off\";\r\n } else {\r\n round = defaultOptions.round as number;\r\n }\r\n\r\n // set instance options.origin\r\n // the SVGPathCommander class will always override the default origin\r\n let origin = defaultOptions.origin as [number, number, number];\r\n /* istanbul ignore else @preserve */\r\n if (Array.isArray(originOption) && originOption.length >= 2) {\r\n const [originX, originY, originZ] = originOption.map(Number);\r\n origin = [\r\n !Number.isNaN(originX) ? originX : 0,\r\n !Number.isNaN(originY) ? originY : 0,\r\n !Number.isNaN(originZ) ? originZ : 0,\r\n ];\r\n }\r\n\r\n this.round = round;\r\n this.origin = origin;\r\n\r\n return this;\r\n }\r\n get bbox() {\r\n return getPathBBox(this.segments);\r\n }\r\n get length() {\r\n return getTotalLength(this.segments);\r\n }\r\n\r\n /**\r\n * Returns the path bounding box, equivalent to native `path.getBBox()`.\r\n *\r\n * @public\r\n * @returns the pathBBox\r\n */\r\n getBBox() {\r\n return this.bbox;\r\n }\r\n\r\n /**\r\n * Returns the total path length, equivalent to native `path.getTotalLength()`.\r\n *\r\n * @public\r\n * @returns the path total length\r\n */\r\n getTotalLength() {\r\n return this.length;\r\n }\r\n\r\n /**\r\n * Returns an `{x,y}` point in the path stroke at a given length,\r\n * equivalent to the native `path.getPointAtLength()`.\r\n *\r\n * @public\r\n * @param length the length\r\n * @returns the requested point\r\n */\r\n getPointAtLength(length: number) {\r\n return getPointAtLength(this.segments, length);\r\n }\r\n\r\n /**\r\n * Convert path to absolute values\r\n *\r\n * @public\r\n */\r\n toAbsolute() {\r\n const { segments } = this;\r\n this.segments = pathToAbsolute(segments);\r\n return this;\r\n }\r\n\r\n /**\r\n * Convert path to relative values\r\n *\r\n * @public\r\n */\r\n toRelative() {\r\n const { segments } = this;\r\n this.segments = pathToRelative(segments);\r\n return this;\r\n }\r\n\r\n /**\r\n * Convert path to cubic-bezier values. In addition, un-necessary `Z`\r\n * segment is removed if previous segment extends to the `M` segment.\r\n *\r\n * @public\r\n */\r\n toCurve() {\r\n const { segments } = this;\r\n this.segments = pathToCurve(segments);\r\n return this;\r\n }\r\n\r\n /**\r\n * Reverse the order of the segments and their values.\r\n *\r\n * @param onlySubpath option to reverse all sub-paths except first\r\n * @public\r\n */\r\n reverse(onlySubpath?: boolean) {\r\n const { segments } = this;\r\n const split = splitPath(segments);\r\n const subPath = split.length > 1 ? split : false;\r\n\r\n const absoluteMultiPath = subPath\r\n ? subPath.map((x, i) => {\r\n if (onlySubpath) {\r\n return i ? reversePath(x) : x.slice(0);\r\n }\r\n return reversePath(x);\r\n })\r\n : segments.slice(0);\r\n\r\n let path = [] as unknown as PathArray;\r\n if (subPath) {\r\n path = absoluteMultiPath.flat(1) as PathArray;\r\n } else {\r\n path = onlySubpath ? segments : reversePath(segments);\r\n }\r\n\r\n this.segments = path.slice(0) as PathArray;\r\n return this;\r\n }\r\n\r\n /**\r\n * Normalize path in 2 steps:\r\n * * convert `pathArray`(s) to absolute values\r\n * * convert shorthand notation to standard notation\r\n *\r\n * @public\r\n */\r\n normalize() {\r\n const { segments } = this;\r\n this.segments = normalizePath(segments);\r\n return this;\r\n }\r\n\r\n /**\r\n * Optimize `pathArray` values:\r\n * * convert segments to absolute and/or relative values\r\n * * select segments with shortest resulted string\r\n * * round values to the specified `decimals` option value\r\n *\r\n * @public\r\n */\r\n optimize() {\r\n const { segments } = this;\r\n const round = this.round === \"off\" ? 2 : this.round;\r\n\r\n this.segments = optimizePath(segments, round);\r\n return this;\r\n }\r\n\r\n /**\r\n * Transform path using values from an `Object` defined as `transformObject`.\r\n *\r\n * @see TransformObject for a quick refference\r\n *\r\n * @param source a `transformObject`as described above\r\n * @public\r\n */\r\n transform(source?: Partial) {\r\n if (\r\n !source ||\r\n typeof source !== \"object\" ||\r\n (typeof source === \"object\" &&\r\n ![\"translate\", \"rotate\", \"skew\", \"scale\"].some((x) => x in source))\r\n ) {\r\n return this;\r\n }\r\n\r\n const {\r\n segments,\r\n origin: [cx, cy, cz],\r\n } = this;\r\n const transform = {} as TransformObjectValues;\r\n for (const [k, v] of Object.entries(source) as TransformEntries) {\r\n // istanbul ignore else @preserve\r\n if (k === \"skew\" && Array.isArray(v)) {\r\n transform[k] = v.map(Number) as PointTuple;\r\n } else if (\r\n (k === \"rotate\" || k === \"translate\" || k === \"origin\" ||\r\n k === \"scale\") && Array.isArray(v)\r\n ) {\r\n transform[k] = v.map(Number) as [number, number, number];\r\n } else if (k !== \"origin\" && typeof Number(v) === \"number\") {\r\n transform[k] = Number(v);\r\n }\r\n }\r\n\r\n // if origin is not specified\r\n // it's important that we have one\r\n const { origin } = transform;\r\n\r\n if (Array.isArray(origin) && origin.length >= 2) {\r\n const [originX, originY, originZ] = origin.map(Number);\r\n transform.origin = [\r\n !Number.isNaN(originX) ? originX : cx,\r\n !Number.isNaN(originY) ? originY : cy,\r\n originZ || cz,\r\n ];\r\n } else {\r\n transform.origin = [cx, cy, cz];\r\n }\r\n\r\n this.segments = transformPath(segments, transform);\r\n return this;\r\n }\r\n\r\n /**\r\n * Rotate path 180deg vertically\r\n *\r\n * @public\r\n */\r\n flipX() {\r\n const { cx, cy } = this.bbox;\r\n this.transform({ rotate: [0, 180, 0], origin: [cx, cy, 0] });\r\n return this;\r\n }\r\n\r\n /**\r\n * Rotate path 180deg horizontally\r\n *\r\n * @public\r\n */\r\n flipY() {\r\n const { cx, cy } = this.bbox;\r\n this.transform({ rotate: [180, 0, 0], origin: [cx, cy, 0] });\r\n return this;\r\n }\r\n\r\n /**\r\n * Export the current path to be used\r\n * for the `d` (description) attribute.\r\n *\r\n * @public\r\n * @return the path string\r\n */\r\n toString() {\r\n return pathToString(this.segments, this.round);\r\n }\r\n\r\n /**\r\n * Remove the instance.\r\n *\r\n * @public\r\n * @return void\r\n */\r\n dispose() {\r\n Object.keys(this).forEach((key) => delete this[key as keyof typeof this]);\r\n }\r\n}\r\n\r\nexport default SVGPathCommander;\r\n"],"names":["Z","z","s","e","p","$","E","P","y","g","n","i","r","a","m","h","c","u","f","w","o","d","b","X","O","x","Y","F","T","k","I","v","R","D","N","defaultOptions","paramsCount","finalizeSegment","path","pathCommand","relativeCommand","data","error","scanFlag","index","pathValue","code","isDigit","invalidPathValue","scanParam","max","start","zeroFirst","hasCeiling","hasDecimal","hasDot","ch","isSpace","skipSpaces","isPathCommand","isDigitStart","isArcCommand","isMoveCommand","scanSegment","_a","segments","cmdCode","reqParams","paramCounts","lastSegment","PathParser","pathString","parsePathString","pathInput","absolutizeSegment","segment","lastX","lastY","absCommand","absValues","seglen","j","iterate","iterator","pathLen","isRelative","mx","my","segLen","iteratorResult","pathToAbsolute","relativizeSegment","relCommand","relValues","pathToRelative","rotateVector","rad","sin","cos","arcToCubic","X1","Y1","RX","RY","angle","LAF","SF","X2","Y2","recursive","x1","y1","rx","ry","x2","y2","d120","res","xy","f1","f2","cx","cy","rx2","ry2","df","f2old","x2old","y2old","c1","s1","c2","s2","t","hx","hy","m1","m2","m3","m4","newres","ii","quadToCubic","qx","qy","r13","r23","midPoint","ax","ay","bx","by","lineToCubic","segmentToCubic","params","values","px1","py1","px","py","normalizeSegment","px2","py2","nqx","nqy","paramsParser","pathToCurve","seg","normalSegment","result","roundTo","round","pow","pathToString","roundOption","valLen","distanceSquareRoot","getLineLength","getPointAtLineLength","distance","point","length","getLineBBox","min","arcLength","theta","halfTheta","sinHalfTheta","cosHalfTheta","term1","term2","arcPoint","alpha","cosA","sinA","angleBetween","v0","v1","v0x","v0y","v1x","v1y","getArcProps","abs","sqrt","PI","xRotRad","dx","dy","transformedPoint","radiiCheck","cSquareNumerator","cSquareRootDenom","cRadicand","cCoef","transformedCenter","center","startVector","startAngle","endVector","sweepAngle","endAngle","getArcLength","getPointAtArcLength","ellipseComponentX","ellipseComponentY","getArcBBox","deltaAngle","tan","atan2","tangent","angle1","angle2","angle3","angle4","xArray","yArray","xMin","xMax","yMin","yMax","angleAfterStart","pP2","angleBeforeEnd","pP3","p1","p2","p4","p3","Tvalues","Cvalues","deriveBezier","points","dpoints","list","computeBezier","order","mt","mt2","t2","calculateBezier","derivativeFn","l","bezierLength","len","sum","getBezierLength","curve","idx","step","CBEZIER_MINMAX_EPSILON","minmaxQ","cp","v2","minmaxC","cp1","cp2","K","S","L","Q","getPointAtCubicSegmentLength","c1x","c1y","c2x","c2y","t1","getCubicLength","getPointAtCubicLength","distanceIsNumber","currentLength","getCubicBBox","cxMinMax","cyMinMax","getPointAtQuadSegmentLength","getQuadLength","getPointAtQuadLength","getQuadBBox","polygonArea","polygon","area","polygonLength","DISTANCE_EPSILON","normalizePath","_","getPointAtLength","isM","POINT","totalLength","getTotalLength","paramX1","paramY1","paramX2","paramY2","paramQX","paramQY","absoluteSegment","cp1x","cp1y","getPropertiesAtLength","pathArray","pathTemp","pathLength","lengthAtSegment","getPropertiesAtPoint","normalPath","distanceTo","precision","scan","closest","scanDistance","bestLength","bestDistance","scanLength","before","after","beforeLength","afterLength","beforeDistance","afterDistance","getClosestPoint","getCubicSegArea","getPathArea","getDrawDirection","getPathBBox","minX","minY","maxX","maxY","width","height","getSegmentAtLength","getSegmentOfPoint","isPathArray","lk","isAbsoluteArray","isNormalizedArray","pc","isCurveArray","isPointInStroke","isRelativeArray","isValidPath","shapeParams","isElement","node","getLinePath","attr","getPolyPath","getCirclePath","getEllipsePath","getRectanglePath","shapeToPathArray","element","supportedShapes","targetIsElement","tagName","type","shapeAttrs","config","shapeToPath","replace","ownerDocument","doc","description","name","value","getSVGMatrix","transform","matrix","CSSMatrix","origin","originX","originY","translate","rotate","skew","scale","shortenSegment","prevCommand","defaultRound","normalValues","nx","ny","nx1","ny1","roundSegment","optimizePath","optimParams","allPathCommands","normalizedSegment","shortSegment","absSegment","absString","relativeSegment","relSegment","relString","translatePoint","cssm","projection2d","point2D","originZ","relativePositionX","relativePositionY","relativePositionZ","reverseCurve","rotatedCurve","curveOnly","reversePath","absolutePath","normalizedPath","pLen","isClosed","reversedPath","prevSeg","nextSeg","nextCommand","roundPath","splitCubic","pts","ratio","p0","p5","p6","p7","p8","p9","splitPath","composite","pi","transformPath","lx","ly","jj","transformProps","matrixInstance","isLongArc","tempSegment","SVGPathCommander","instanceOptions","undefPath","originOption","onlySubpath","split","subPath","absoluteMultiPath","source","cz","key","__publicField","arcTools","distanceEpsilon","pathParser"],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..693273b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4135 @@ +{ + "name": "svg-path-commander", + "version": "2.1.8", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "svg-path-commander", + "version": "2.1.8", + "license": "MIT", + "dependencies": { + "@thednp/dommatrix": "^2.0.11" + }, + "devDependencies": { + "@vitest/browser": "^3.0.4", + "@vitest/coverage-istanbul": "^3.0.4", + "@vitest/ui": "^3.0.4", + "playwright": "^1.50.0", + "typescript": "5.6.3", + "vite": "^6.0.11", + "vite-plugin-dts": "^4.5.0", + "vitest": "^3.0.4" + }, + "engines": { + "node": ">=16", + "pnpm": ">=8.6.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz", + "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz", + "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.7", + "@babel/parser": "^7.26.7", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.26.7", + "@babel/types": "^7.26.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz", + "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.26.5", + "@babel/types": "^7.26.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz", + "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", + "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.26.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", + "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz", + "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.5", + "@babel/parser": "^7.26.7", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", + "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bundled-es-modules/cookie": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==", + "dev": true, + "dependencies": { + "cookie": "^0.7.2" + } + }, + "node_modules/@bundled-es-modules/statuses": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", + "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", + "dev": true, + "dependencies": { + "statuses": "^2.0.1" + } + }, + "node_modules/@bundled-es-modules/tough-cookie": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", + "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", + "dev": true, + "dependencies": { + "@types/tough-cookie": "^4.0.5", + "tough-cookie": "^4.1.4" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.3.tgz", + "integrity": "sha512-fuF9laMmHoOgWapF9h9hv6opA5WvmGFHsTYGCmuFxcghIhEhb3dN0CdQR4BUMqa2H506NCj8cGX4jwMsE4t6dA==", + "dev": true, + "dependencies": { + "@inquirer/core": "^10.1.4", + "@inquirer/type": "^3.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "10.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.4.tgz", + "integrity": "sha512-5y4/PUJVnRb4bwWY67KLdebWOhOc7xj5IP2J80oWXa64mVag24rwQ1VAdnj7/eDY/odhguW0zQ1Mp1pj6fO/2w==", + "dev": true, + "dependencies": { + "@inquirer/figures": "^1.0.9", + "@inquirer/type": "^3.0.2", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.9.tgz", + "integrity": "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.2.tgz", + "integrity": "sha512-ZhQ4TvhwHZF+lGhQ2O/rsjo80XoZR5/5qhOY3t6FJuX5XBg5Be8YzYTvaUGJnc12AUGI2nr4QSUE4PhKSigx7g==", + "dev": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@microsoft/api-extractor": { + "version": "7.49.1", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.49.1.tgz", + "integrity": "sha512-jRTR/XbQF2kb+dYn8hfYSicOGA99+Fo00GrsdMwdfE3eIgLtKdH6Qa2M3wZV9S2XmbgCaGX1OdPtYctbfu5jQg==", + "dev": true, + "dependencies": { + "@microsoft/api-extractor-model": "7.30.2", + "@microsoft/tsdoc": "~0.15.1", + "@microsoft/tsdoc-config": "~0.17.1", + "@rushstack/node-core-library": "5.10.2", + "@rushstack/rig-package": "0.5.3", + "@rushstack/terminal": "0.14.5", + "@rushstack/ts-command-line": "4.23.3", + "lodash": "~4.17.15", + "minimatch": "~3.0.3", + "resolve": "~1.22.1", + "semver": "~7.5.4", + "source-map": "~0.6.1", + "typescript": "5.7.2" + }, + "bin": { + "api-extractor": "bin/api-extractor" + } + }, + "node_modules/@microsoft/api-extractor-model": { + "version": "7.30.2", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor-model/-/api-extractor-model-7.30.2.tgz", + "integrity": "sha512-3/t2F+WhkJgBzSNwlkTIL0tBgUoBqDqL66pT+nh2mPbM0NIDGVGtpqbGWPgHIzn/mn7kGS/Ep8D8po58e8UUIw==", + "dev": true, + "dependencies": { + "@microsoft/tsdoc": "~0.15.1", + "@microsoft/tsdoc-config": "~0.17.1", + "@rushstack/node-core-library": "5.10.2" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@microsoft/api-extractor/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz", + "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==", + "dev": true + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.17.1.tgz", + "integrity": "sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==", + "dev": true, + "dependencies": { + "@microsoft/tsdoc": "0.15.1", + "ajv": "~8.12.0", + "jju": "~1.4.0", + "resolve": "~1.22.2" + } + }, + "node_modules/@mswjs/interceptors": { + "version": "0.37.5", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.5.tgz", + "integrity": "sha512-AAwRb5vXFcY4L+FvZ7LZusDuZ0vEe0Zm8ohn1FM6/X7A3bj4mqmkAcGRWuvC2JwSygNwHAAmMnAI73vPHeqsHA==", + "dev": true, + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "dev": true + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "dev": true, + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", + "dev": true + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.28", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "dev": true + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.0.tgz", + "integrity": "sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.32.0.tgz", + "integrity": "sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.32.0.tgz", + "integrity": "sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.32.0.tgz", + "integrity": "sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.32.0.tgz", + "integrity": "sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.32.0.tgz", + "integrity": "sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.32.0.tgz", + "integrity": "sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.32.0.tgz", + "integrity": "sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.32.0.tgz", + "integrity": "sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.32.0.tgz", + "integrity": "sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.32.0.tgz", + "integrity": "sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.32.0.tgz", + "integrity": "sha512-Sts5DST1jXAc9YH/iik1C9QRsLcCoOScf3dfbY5i4kH9RJpKxiTBXqm7qU5O6zTXBTEZry69bGszr3SMgYmMcQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.32.0.tgz", + "integrity": "sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.32.0.tgz", + "integrity": "sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.32.0.tgz", + "integrity": "sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.32.0.tgz", + "integrity": "sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.32.0.tgz", + "integrity": "sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.32.0.tgz", + "integrity": "sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.32.0.tgz", + "integrity": "sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rushstack/node-core-library": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-5.10.2.tgz", + "integrity": "sha512-xOF/2gVJZTfjTxbo4BDj9RtQq/HFnrrKdtem4JkyRLnwsRz2UDTg8gA1/et10fBx5RxmZD9bYVGST69W8ME5OQ==", + "dev": true, + "dependencies": { + "ajv": "~8.13.0", + "ajv-draft-04": "~1.0.0", + "ajv-formats": "~3.0.1", + "fs-extra": "~7.0.1", + "import-lazy": "~4.0.0", + "jju": "~1.4.0", + "resolve": "~1.22.1", + "semver": "~7.5.4" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/node-core-library/node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rushstack/node-core-library/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@rushstack/rig-package": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@rushstack/rig-package/-/rig-package-0.5.3.tgz", + "integrity": "sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==", + "dev": true, + "dependencies": { + "resolve": "~1.22.1", + "strip-json-comments": "~3.1.1" + } + }, + "node_modules/@rushstack/terminal": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.14.5.tgz", + "integrity": "sha512-TEOpNwwmsZVrkp0omnuTUTGZRJKTr6n6m4OITiNjkqzLAkcazVpwR1SOtBg6uzpkIBLgrcNHETqI8rbw3uiUfw==", + "dev": true, + "dependencies": { + "@rushstack/node-core-library": "5.10.2", + "supports-color": "~8.1.1" + }, + "peerDependencies": { + "@types/node": "*" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@rushstack/terminal/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/@rushstack/ts-command-line": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-4.23.3.tgz", + "integrity": "sha512-HazKL8fv4HMQMzrKJCrOrhyBPPdzk7iajUXgsASwjQ8ROo1cmgyqxt/k9+SdmrNLGE1zATgRqMUH3s/6smbRMA==", + "dev": true, + "dependencies": { + "@rushstack/terminal": "0.14.5", + "@types/argparse": "1.0.38", + "argparse": "~1.0.9", + "string-argv": "~0.3.1" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@thednp/dommatrix": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@thednp/dommatrix/-/dommatrix-2.0.11.tgz", + "integrity": "sha512-e4X97qU68a4ycieaGiRgmeE4KltnV8GPE1pUxdtgvJQBe4VvzL4a6Xxb+X8dI1cQrUVAkl3uSe5nGRXrAmNpkQ==", + "engines": { + "node": ">=20", + "pnpm": ">=8.6.0" + } + }, + "node_modules/@types/argparse": { + "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", + "dev": true + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.10.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.10.tgz", + "integrity": "sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==", + "dev": true, + "peer": true, + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/statuses": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", + "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==", + "dev": true + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, + "node_modules/@vitest/browser": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-3.0.4.tgz", + "integrity": "sha512-CMUG+OYJvXoe5ylGzmAU3eVX6d848FvRc+1j/STOi3bHBIv4kfXgUrvPuxJVzl6kOad57Vg+SKBvNjeBoc4esw==", + "dev": true, + "dependencies": { + "@testing-library/dom": "^10.4.0", + "@testing-library/user-event": "^14.6.1", + "@vitest/mocker": "3.0.4", + "@vitest/utils": "3.0.4", + "magic-string": "^0.30.17", + "msw": "^2.7.0", + "sirv": "^3.0.0", + "tinyrainbow": "^2.0.0", + "ws": "^8.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "playwright": "*", + "vitest": "3.0.4", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/@vitest/coverage-istanbul": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-3.0.4.tgz", + "integrity": "sha512-a+SgPMom0PlRTuDasoucL2V7FDpS8j7p6jpHLNgt3d7oOSWYwtAFVCfZ3iQ+a+cOnh76g4mOftVR5Y9HokB/GQ==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.3", + "debug": "^4.4.0", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-instrument": "^6.0.3", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magicast": "^0.3.5", + "test-exclude": "^7.0.1", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "3.0.4" + } + }, + "node_modules/@vitest/expect": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.4.tgz", + "integrity": "sha512-Nm5kJmYw6P2BxhJPkO3eKKhGYKRsnqJqf+r0yOGRKpEP+bSCBDsjXgiu1/5QFrnPMEgzfC38ZEjvCFgaNBC0Eg==", + "dev": true, + "dependencies": { + "@vitest/spy": "3.0.4", + "@vitest/utils": "3.0.4", + "chai": "^5.1.2", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.4.tgz", + "integrity": "sha512-gEef35vKafJlfQbnyOXZ0Gcr9IBUsMTyTLXsEQwuyYAerpHqvXhzdBnDFuHLpFqth3F7b6BaFr4qV/Cs1ULx5A==", + "dev": true, + "dependencies": { + "@vitest/spy": "3.0.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.4.tgz", + "integrity": "sha512-ts0fba+dEhK2aC9PFuZ9LTpULHpY/nd6jhAQ5IMU7Gaj7crPCTdCFfgvXxruRBLFS+MLraicCuFXxISEq8C93g==", + "dev": true, + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.4.tgz", + "integrity": "sha512-dKHzTQ7n9sExAcWH/0sh1elVgwc7OJ2lMOBrAm73J7AH6Pf9T12Zh3lNE1TETZaqrWFXtLlx3NVrLRb5hCK+iw==", + "dev": true, + "dependencies": { + "@vitest/utils": "3.0.4", + "pathe": "^2.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.4.tgz", + "integrity": "sha512-+p5knMLwIk7lTQkM3NonZ9zBewzVp9EVkVpvNta0/PlFWpiqLaRcF4+33L1it3uRUCh0BGLOaXPPGEjNKfWb4w==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "3.0.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.4.tgz", + "integrity": "sha512-sXIMF0oauYyUy2hN49VFTYodzEAu744MmGcPR3ZBsPM20G+1/cSW/n1U+3Yu/zHxX2bIDe1oJASOkml+osTU6Q==", + "dev": true, + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/ui": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-3.0.4.tgz", + "integrity": "sha512-e+s2F9e9FUURkZ5aFIe1Fi3Y8M7UF6gEuShcaV/ur7y/Ldri+1tzWQ1TJq9Vas42NXnXvCAIrU39Z4U2RyET6g==", + "dev": true, + "dependencies": { + "@vitest/utils": "3.0.4", + "fflate": "^0.8.2", + "flatted": "^3.3.2", + "pathe": "^2.0.2", + "sirv": "^3.0.0", + "tinyglobby": "^0.2.10", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "3.0.4" + } + }, + "node_modules/@vitest/utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.4.tgz", + "integrity": "sha512-8BqC1ksYsHtbWH+DfpOAKrFw3jl3Uf9J7yeFh85Pz52IWuh1hBBtyfEbRNNZNjl8H8A5yMLH9/t+k7HIKzQcZQ==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "3.0.4", + "loupe": "^3.1.2", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.11.tgz", + "integrity": "sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==", + "dev": true, + "dependencies": { + "@volar/source-map": "2.4.11" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.11.tgz", + "integrity": "sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==", + "dev": true + }, + "node_modules/@volar/typescript": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.11.tgz", + "integrity": "sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==", + "dev": true, + "dependencies": { + "@volar/language-core": "2.4.11", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-core/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/language-core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz", + "integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==", + "dev": true, + "dependencies": { + "@volar/language-core": "~2.4.11", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^0.4.9", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "dev": true, + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/alien-signals": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz", + "integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==", + "dev": true + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001695", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", + "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chai": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "dev": true, + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "engines": { + "node": ">= 16" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.88", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.88.tgz", + "integrity": "sha512-K3C2qf1o+bGzbilTDCTBhTQcMS9KW60yTAaTeeXsfvQuTDDwlokLam/AdqlqcSy9u4UainDgsHV23ksXAOgamw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphql": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz", + "integrity": "sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/headers-polyfill": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", + "dev": true + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true + }, + "node_modules/local-pkg": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", + "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", + "dev": true, + "dependencies": { + "mlly": "^1.7.3", + "pkg-types": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/loupe": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "dev": true, + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/msw": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.7.0.tgz", + "integrity": "sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@bundled-es-modules/cookie": "^2.0.1", + "@bundled-es-modules/statuses": "^1.0.1", + "@bundled-es-modules/tough-cookie": "^0.1.6", + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.37.0", + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "graphql": "^16.8.1", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.26.1", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.8.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "node_modules/outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", + "dev": true + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true + }, + "node_modules/pathe": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", + "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", + "dev": true + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/playwright": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.50.0.tgz", + "integrity": "sha512-+GinGfGTrd2IfX1TA4N2gNmeIksSb+IAe589ZH+FlmpV3MYTx6+buChGIuDLQwrGNCw2lWibqV50fU510N7S+w==", + "dev": true, + "dependencies": { + "playwright-core": "1.50.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.50.0.tgz", + "integrity": "sha512-CXkSSlr4JaZs2tZHI40DsZUN/NIwgaUPsyLuOAaIZp2CyF2sN5MM5NJsyB188lFSSozFxQ5fPT4qM+f0tH/6wQ==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/postcss": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", + "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup": { + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.32.0.tgz", + "integrity": "sha512-JmrhfQR31Q4AuNBjjAX4s+a/Pu/Q8Q9iwjWBsjRH1q52SPFE2NqRMK6fUZKKnvKO6id+h7JIRf0oYsph53eATg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.32.0", + "@rollup/rollup-android-arm64": "4.32.0", + "@rollup/rollup-darwin-arm64": "4.32.0", + "@rollup/rollup-darwin-x64": "4.32.0", + "@rollup/rollup-freebsd-arm64": "4.32.0", + "@rollup/rollup-freebsd-x64": "4.32.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.32.0", + "@rollup/rollup-linux-arm-musleabihf": "4.32.0", + "@rollup/rollup-linux-arm64-gnu": "4.32.0", + "@rollup/rollup-linux-arm64-musl": "4.32.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.32.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.32.0", + "@rollup/rollup-linux-riscv64-gnu": "4.32.0", + "@rollup/rollup-linux-s390x-gnu": "4.32.0", + "@rollup/rollup-linux-x64-gnu": "4.32.0", + "@rollup/rollup-linux-x64-musl": "4.32.0", + "@rollup/rollup-win32-arm64-msvc": "4.32.0", + "@rollup/rollup-win32-ia32-msvc": "4.32.0", + "@rollup/rollup-win32-x64-msvc": "4.32.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", + "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "dev": true + }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "dev": true + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true + }, + "node_modules/tinyglobby": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.10.tgz", + "integrity": "sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==", + "dev": true, + "dependencies": { + "fdir": "^6.4.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/type-fest": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.33.0.tgz", + "integrity": "sha512-s6zVrxuyKbbAsSAD5ZPTB77q4YIdRctkTbJ2/Dqlinwz+8ooH2gd+YA7VA6Pa93KML9GockVvoxjZ2vHP+mu8g==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "dev": true + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "peer": true + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/vite": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.11.tgz", + "integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==", + "dev": true, + "dependencies": { + "esbuild": "^0.24.2", + "postcss": "^8.4.49", + "rollup": "^4.23.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.4.tgz", + "integrity": "sha512-7JZKEzcYV2Nx3u6rlvN8qdo3QV7Fxyt6hx+CCKz9fbWxdX5IvUOmTWEAxMrWxaiSf7CKGLJQ5rFu8prb/jBjOA==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.0", + "es-module-lexer": "^1.6.0", + "pathe": "^2.0.2", + "vite": "^5.0.0 || ^6.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-plugin-dts": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-4.5.0.tgz", + "integrity": "sha512-M1lrPTdi7gilLYRZoLmGYnl4fbPryVYsehPN9JgaxjJKTs8/f7tuAlvCCvOLB5gRDQTTKnptBcB0ACsaw2wNLw==", + "dev": true, + "dependencies": { + "@microsoft/api-extractor": "^7.49.1", + "@rollup/pluginutils": "^5.1.4", + "@volar/typescript": "^2.4.11", + "@vue/language-core": "2.2.0", + "compare-versions": "^6.1.1", + "debug": "^4.4.0", + "kolorist": "^1.8.0", + "local-pkg": "^0.5.1", + "magic-string": "^0.30.17" + }, + "peerDependencies": { + "typescript": "*", + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vitest": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.4.tgz", + "integrity": "sha512-6XG8oTKy2gnJIFTHP6LD7ExFeNLxiTkK3CfMvT7IfR8IN+BYICCf0lXUQmX7i7JoxUP8QmeP4mTnWXgflu4yjw==", + "dev": true, + "dependencies": { + "@vitest/expect": "3.0.4", + "@vitest/mocker": "3.0.4", + "@vitest/pretty-format": "^3.0.4", + "@vitest/runner": "3.0.4", + "@vitest/snapshot": "3.0.4", + "@vitest/spy": "3.0.4", + "@vitest/utils": "3.0.4", + "chai": "^5.1.2", + "debug": "^4.4.0", + "expect-type": "^1.1.0", + "magic-string": "^0.30.17", + "pathe": "^2.0.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinypool": "^1.0.2", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0", + "vite-node": "3.0.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.0.4", + "@vitest/ui": "3.0.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json index 5e2ca46..ad4cf96 100755 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "svg-path-commander", "author": "thednp", "license": "MIT", - "version": "2.1.8", + "version": "2.1.8.1", "description": "🛹 Modern TypeScript tools for SVG", "source": "./src/index.ts", "main": "./dist/svg-path-commander.js", diff --git a/src/parser/parsePathString.ts b/src/parser/parsePathString.ts index fa27607..15a78e2 100755 --- a/src/parser/parsePathString.ts +++ b/src/parser/parsePathString.ts @@ -26,7 +26,8 @@ const parsePathString = (pathInput: string | T) => { if (path?.err.length) { throw TypeError(path.err); } - + // force absolute first M + path.segments[0][0]='M'; return path.segments as PathArray; };