UNPKG

svg-path-properties

Version:

Calculate the length for an SVG path, to use it with node or a Canvas element

2 lines 25.9 kB
// http://geoexamples.com/path-properties/ v2.0.0 Copyright 2025 Roger Veciana i Rovira "use strict";var t,e=Object.defineProperty,n=Object.getOwnPropertyDescriptor,h=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,s=(t,n)=>e(t,"name",{value:n,configurable:!0}),g={};((t,n)=>{for(var h in n)e(t,h,{get:n[h],enumerable:!0})})(g,{svgPathProperties:()=>F}),module.exports=(t=g,((t,s,g,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let r of h(s))i.call(t,r)||r===g||e(t,r,{get:()=>s[r],enumerable:!(a=n(s,r))||a.enumerable});return t})(e({},"__esModule",{value:!0}),t));var a={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},r=/([astvzqmhlc])([^astvzqmhlc]*)/gi,o=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi,l=s(t=>{const e=(t&&t.length>0?t:"M0,0").match(r);if(!e)throw new Error(`No path elements found in string ${t}`);return e.reduce((t,e)=>{let n=e.charAt(0),h=n.toLowerCase(),i=c(e.substring(1));if("m"===h&&i.length>2&&(t.push([n,...i.splice(0,2)]),h="l",n="m"===n?"l":"L"),"a"===h.toLowerCase()&&(5===i.length||6===i.length)){const t=e.substring(1).trim().split(" ");i=[Number(t[0]),Number(t[1]),Number(t[2]),Number(t[3].charAt(0)),Number(t[3].charAt(1)),Number(t[3].substring(2)),Number(t[4])]}for(;i.length>=0;){if(i.length===a[h]){t.push([n,...i.splice(0,a[h])]);break}if(i.length<a[h])throw new Error(`Malformed path data: "${n}" must have ${a[h]} elements and has ${i.length}: ${e}`);t.push([n,...i.splice(0,a[h])])}return t},[])},"default"),c=s(t=>{const e=t.match(o);return e?e.map(Number):[]},"parseValues"),u=class{static{s(this,"LinearPosition")}x0;x1;y0;y1;constructor(t,e,n,h){this.x0=t,this.x1=e,this.y0=n,this.y1=h}getTotalLength=s(()=>Math.sqrt(Math.pow(this.x0-this.x1,2)+Math.pow(this.y0-this.y1,2)),"getTotalLength");getPointAtLength=s(t=>{let e=t/Math.sqrt(Math.pow(this.x0-this.x1,2)+Math.pow(this.y0-this.y1,2));e=Number.isNaN(e)?1:e;const n=(this.x1-this.x0)*e,h=(this.y1-this.y0)*e;return{x:this.x0+n,y:this.y0+h}},"getPointAtLength");getTangentAtLength=s(t=>{const e=Math.sqrt((this.x1-this.x0)*(this.x1-this.x0)+(this.y1-this.y0)*(this.y1-this.y0));return{x:(this.x1-this.x0)/e,y:(this.y1-this.y0)/e}},"getTangentAtLength");getPropertiesAtLength=s(t=>{const e=this.getPointAtLength(t),n=this.getTangentAtLength(t);return{x:e.x,y:e.y,tangentX:n.x,tangentY:n.y}},"getPropertiesAtLength")},p=class{static{s(this,"Arc")}x0;y0;rx;ry;xAxisRotate;LargeArcFlag;SweepFlag;x1;y1;length;constructor(t,e,n,h,i,s,g,a,r){this.x0=t,this.y0=e,this.rx=n,this.ry=h,this.xAxisRotate=i,this.LargeArcFlag=s,this.SweepFlag=g,this.x1=a,this.y1=r;const o=y(300,function(o){return x({x:t,y:e},n,h,i,s,g,{x:a,y:r},o)});this.length=o.arcLength}getTotalLength=s(()=>this.length,"getTotalLength");getPointAtLength=s(t=>{t<0?t=0:t>this.length&&(t=this.length);const e=x({x:this.x0,y:this.y0},this.rx,this.ry,this.xAxisRotate,this.LargeArcFlag,this.SweepFlag,{x:this.x1,y:this.y1},t/this.length);return{x:e.x,y:e.y}},"getPointAtLength");getTangentAtLength=s(t=>{t<0?t=0:t>this.length&&(t=this.length);const e=.05,n=this.getPointAtLength(t);let h;t<0?t=0:t>this.length&&(t=this.length),h=t<this.length-e?this.getPointAtLength(t+e):this.getPointAtLength(t-e);const i=h.x-n.x,s=h.y-n.y,g=Math.sqrt(i*i+s*s);return t<this.length-e?{x:-i/g,y:-s/g}:{x:i/g,y:s/g}},"getTangentAtLength");getPropertiesAtLength=s(t=>{const e=this.getTangentAtLength(t),n=this.getPointAtLength(t);return{x:n.x,y:n.y,tangentX:e.x,tangentY:e.y}},"getPropertiesAtLength")},x=s((t,e,n,h,i,s,g,a)=>{e=Math.abs(e),n=Math.abs(n),h=f(h,360);const r=L(h);if(t.x===g.x&&t.y===g.y)return{x:t.x,y:t.y,ellipticalArcAngle:0};if(0===e||0===n)return{x:0,y:0,ellipticalArcAngle:0};const o=(t.x-g.x)/2,l=(t.y-g.y)/2,c={x:Math.cos(r)*o+Math.sin(r)*l,y:-Math.sin(r)*o+Math.cos(r)*l},u=Math.pow(c.x,2)/Math.pow(e,2)+Math.pow(c.y,2)/Math.pow(n,2);u>1&&(e=Math.sqrt(u)*e,n=Math.sqrt(u)*n);let p=(Math.pow(e,2)*Math.pow(n,2)-Math.pow(e,2)*Math.pow(c.y,2)-Math.pow(n,2)*Math.pow(c.x,2))/(Math.pow(e,2)*Math.pow(c.y,2)+Math.pow(n,2)*Math.pow(c.x,2));p=p<0?0:p;const x=(i!==s?1:-1)*Math.sqrt(p),y=x*(e*c.y/n),A=x*(-n*c.x/e),M={x:Math.cos(r)*y-Math.sin(r)*A+(t.x+g.x)/2,y:Math.sin(r)*y+Math.cos(r)*A+(t.y+g.y)/2},P={x:(c.x-y)/e,y:(c.y-A)/n},b=w({x:1,y:0},P);let d=w(P,{x:(-c.x-y)/e,y:(-c.y-A)/n});!s&&d>0?d-=2*Math.PI:s&&d<0&&(d+=2*Math.PI),d%=2*Math.PI;const T=b+d*a,v=e*Math.cos(T),m=n*Math.sin(T);return{x:Math.cos(r)*v-Math.sin(r)*m+M.x,y:Math.sin(r)*v+Math.cos(r)*m+M.y,ellipticalArcStartAngle:b,ellipticalArcEndAngle:b+d,ellipticalArcAngle:T,ellipticalArcCenter:M,resultantRx:e,resultantRy:n}},"pointOnEllipticalArc"),y=s((t,e)=>{t=t??500;let n=0;const h=[],i=[];let s,g=e(0);for(let a=0;a<t;a++){const r=M(a*(1/t),0,1);s=e(r),n+=A(g,s),i.push([g,s]),h.push({t:r,arcLength:n}),g=s}return s=e(1),i.push([g,s]),n+=A(g,s),h.push({t:1,arcLength:n}),{arcLength:n,arcLengthMap:h,approximationLines:i}},"approximateArcLengthOfCurve"),f=s((t,e)=>(t%e+e)%e,"mod"),L=s(t=>t*(Math.PI/180),"toRadians"),A=s((t,e)=>Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)),"distance"),M=s((t,e,n)=>Math.min(Math.max(t,e),n),"clamp"),w=s((t,e)=>{const n=t.x*e.x+t.y*e.y,h=Math.sqrt((Math.pow(t.x,2)+Math.pow(t.y,2))*(Math.pow(e.x,2)+Math.pow(e.y,2)));return(t.x*e.y-t.y*e.x<0?-1:1)*Math.acos(n/h)},"angleBetween"),P=[[],[],[-.5773502691896257,.5773502691896258],[0,-.7745966692414833,.7745966692414833],[-.33998104358485626,.33998104358485626,-.8611363115940526,.8611363115940526],[0,-.5384693101056831,.5384693101056831,-.906179845938664,.906179845938664],[.6612093864662645,-.6612093864662645,-.2386191860831969,.2386191860831969,-.932469514203152,.932469514203152],[0,.4058451513773972,-.4058451513773972,-.7415311855993945,.7415311855993945,-.9491079123427585,.9491079123427585],[-.1834346424956498,.1834346424956498,-.525532409916329,.525532409916329,-.7966664774136267,.7966664774136267,-.9602898564975363,.9602898564975363],[0,-.8360311073266358,.8360311073266358,-.9681602395076261,.9681602395076261,-.3242534234038089,.3242534234038089,-.6133714327005904,.6133714327005904],[-.14887433898163122,.14887433898163122,-.4333953941292472,.4333953941292472,-.6794095682990244,.6794095682990244,-.8650633666889845,.8650633666889845,-.9739065285171717,.9739065285171717],[0,-.26954315595234496,.26954315595234496,-.5190961292068118,.5190961292068118,-.7301520055740494,.7301520055740494,-.8870625997680953,.8870625997680953,-.978228658146057,.978228658146057],[-.1252334085114689,.1252334085114689,-.3678314989981802,.3678314989981802,-.5873179542866175,.5873179542866175,-.7699026741943047,.7699026741943047,-.9041172563704749,.9041172563704749,-.9815606342467192,.9815606342467192],[0,-.2304583159551348,.2304583159551348,-.44849275103644687,.44849275103644687,-.6423493394403402,.6423493394403402,-.8015780907333099,.8015780907333099,-.9175983992229779,.9175983992229779,-.9841830547185881,.9841830547185881],[-.10805494870734367,.10805494870734367,-.31911236892788974,.31911236892788974,-.5152486363581541,.5152486363581541,-.6872929048116855,.6872929048116855,-.827201315069765,.827201315069765,-.9284348836635735,.9284348836635735,-.9862838086968123,.9862838086968123],[0,-.20119409399743451,.20119409399743451,-.3941513470775634,.3941513470775634,-.5709721726085388,.5709721726085388,-.7244177313601701,.7244177313601701,-.8482065834104272,.8482065834104272,-.937273392400706,.937273392400706,-.9879925180204854,.9879925180204854],[-.09501250983763744,.09501250983763744,-.2816035507792589,.2816035507792589,-.45801677765722737,.45801677765722737,-.6178762444026438,.6178762444026438,-.755404408355003,.755404408355003,-.8656312023878318,.8656312023878318,-.9445750230732326,.9445750230732326,-.9894009349916499,.9894009349916499],[0,-.17848418149584785,.17848418149584785,-.3512317634538763,.3512317634538763,-.5126905370864769,.5126905370864769,-.6576711592166907,.6576711592166907,-.7815140038968014,.7815140038968014,-.8802391537269859,.8802391537269859,-.9506755217687678,.9506755217687678,-.9905754753144174,.9905754753144174],[-.0847750130417353,.0847750130417353,-.2518862256915055,.2518862256915055,-.41175116146284263,.41175116146284263,-.5597708310739475,.5597708310739475,-.6916870430603532,.6916870430603532,-.8037049589725231,.8037049589725231,-.8926024664975557,.8926024664975557,-.9558239495713977,.9558239495713977,-.9915651684209309,.9915651684209309],[0,-.16035864564022537,.16035864564022537,-.31656409996362983,.31656409996362983,-.46457074137596094,.46457074137596094,-.600545304661681,.600545304661681,-.7209661773352294,.7209661773352294,-.8227146565371428,.8227146565371428,-.9031559036148179,.9031559036148179,-.96020815213483,.96020815213483,-.9924068438435844,.9924068438435844],[-.07652652113349734,.07652652113349734,-.22778585114164507,.22778585114164507,-.37370608871541955,.37370608871541955,-.5108670019508271,.5108670019508271,-.636053680726515,.636053680726515,-.7463319064601508,.7463319064601508,-.8391169718222188,.8391169718222188,-.912234428251326,.912234428251326,-.9639719272779138,.9639719272779138,-.9931285991850949,.9931285991850949],[0,-.1455618541608951,.1455618541608951,-.2880213168024011,.2880213168024011,-.4243421202074388,.4243421202074388,-.5516188358872198,.5516188358872198,-.6671388041974123,.6671388041974123,-.7684399634756779,.7684399634756779,-.8533633645833173,.8533633645833173,-.9200993341504008,.9200993341504008,-.9672268385663063,.9672268385663063,-.9937521706203895,.9937521706203895],[-.06973927331972223,.06973927331972223,-.20786042668822127,.20786042668822127,-.34193582089208424,.34193582089208424,-.469355837986757,.469355837986757,-.5876404035069116,.5876404035069116,-.6944872631866827,.6944872631866827,-.7878168059792081,.7878168059792081,-.8658125777203002,.8658125777203002,-.926956772187174,.926956772187174,-.9700604978354287,.9700604978354287,-.9942945854823992,.9942945854823992],[0,-.1332568242984661,.1332568242984661,-.26413568097034495,.26413568097034495,-.3903010380302908,.3903010380302908,-.5095014778460075,.5095014778460075,-.6196098757636461,.6196098757636461,-.7186613631319502,.7186613631319502,-.8048884016188399,.8048884016188399,-.8767523582704416,.8767523582704416,-.9329710868260161,.9329710868260161,-.9725424712181152,.9725424712181152,-.9947693349975522,.9947693349975522],[-.06405689286260563,.06405689286260563,-.1911188674736163,.1911188674736163,-.3150426796961634,.3150426796961634,-.4337935076260451,.4337935076260451,-.5454214713888396,.5454214713888396,-.6480936519369755,.6480936519369755,-.7401241915785544,.7401241915785544,-.820001985973903,.820001985973903,-.8864155270044011,.8864155270044011,-.9382745520027328,.9382745520027328,-.9747285559713095,.9747285559713095,-.9951872199970213,.9951872199970213]],b=[[],[],[1,1],[.8888888888888888,.5555555555555556,.5555555555555556],[.6521451548625461,.6521451548625461,.34785484513745385,.34785484513745385],[.5688888888888889,.47862867049936647,.47862867049936647,.23692688505618908,.23692688505618908],[.3607615730481386,.3607615730481386,.46791393457269104,.46791393457269104,.17132449237917036,.17132449237917036],[.4179591836734694,.3818300505051189,.3818300505051189,.27970539148927664,.27970539148927664,.1294849661688697,.1294849661688697],[.362683783378362,.362683783378362,.31370664587788727,.31370664587788727,.22238103445337448,.22238103445337448,.10122853629037626,.10122853629037626],[.3302393550012598,.1806481606948574,.1806481606948574,.08127438836157441,.08127438836157441,.31234707704000286,.31234707704000286,.26061069640293544,.26061069640293544],[.29552422471475287,.29552422471475287,.26926671930999635,.26926671930999635,.21908636251598204,.21908636251598204,.1494513491505806,.1494513491505806,.06667134430868814,.06667134430868814],[.2729250867779006,.26280454451024665,.26280454451024665,.23319376459199048,.23319376459199048,.18629021092773426,.18629021092773426,.1255803694649046,.1255803694649046,.05566856711617366,.05566856711617366],[.24914704581340277,.24914704581340277,.2334925365383548,.2334925365383548,.20316742672306592,.20316742672306592,.16007832854334622,.16007832854334622,.10693932599531843,.10693932599531843,.04717533638651183,.04717533638651183],[.2325515532308739,.22628318026289723,.22628318026289723,.2078160475368885,.2078160475368885,.17814598076194574,.17814598076194574,.13887351021978725,.13887351021978725,.09212149983772845,.09212149983772845,.04048400476531588,.04048400476531588],[.2152638534631578,.2152638534631578,.2051984637212956,.2051984637212956,.18553839747793782,.18553839747793782,.15720316715819355,.15720316715819355,.12151857068790319,.12151857068790319,.08015808715976021,.08015808715976021,.03511946033175186,.03511946033175186],[.2025782419255613,.19843148532711158,.19843148532711158,.1861610000155622,.1861610000155622,.16626920581699392,.16626920581699392,.13957067792615432,.13957067792615432,.10715922046717194,.10715922046717194,.07036604748810812,.07036604748810812,.03075324199611727,.03075324199611727],[.1894506104550685,.1894506104550685,.18260341504492358,.18260341504492358,.16915651939500254,.16915651939500254,.14959598881657674,.14959598881657674,.12462897125553388,.12462897125553388,.09515851168249279,.09515851168249279,.062253523938647894,.062253523938647894,.027152459411754096,.027152459411754096],[.17944647035620653,.17656270536699264,.17656270536699264,.16800410215645004,.16800410215645004,.15404576107681028,.15404576107681028,.13513636846852548,.13513636846852548,.11188384719340397,.11188384719340397,.08503614831717918,.08503614831717918,.0554595293739872,.0554595293739872,.02414830286854793,.02414830286854793],[.1691423829631436,.1691423829631436,.16427648374583273,.16427648374583273,.15468467512626524,.15468467512626524,.14064291467065065,.14064291467065065,.12255520671147846,.12255520671147846,.10094204410628717,.10094204410628717,.07642573025488905,.07642573025488905,.0497145488949698,.0497145488949698,.02161601352648331,.02161601352648331],[.1610544498487837,.15896884339395434,.15896884339395434,.15276604206585967,.15276604206585967,.1426067021736066,.1426067021736066,.12875396253933621,.12875396253933621,.11156664554733399,.11156664554733399,.09149002162245,.09149002162245,.06904454273764123,.06904454273764123,.0448142267656996,.0448142267656996,.019461788229726478,.019461788229726478],[.15275338713072584,.15275338713072584,.14917298647260374,.14917298647260374,.14209610931838204,.14209610931838204,.13168863844917664,.13168863844917664,.11819453196151841,.11819453196151841,.10193011981724044,.10193011981724044,.08327674157670475,.08327674157670475,.06267204833410907,.06267204833410907,.04060142980038694,.04060142980038694,.017614007139152118,.017614007139152118],[.14608113364969041,.14452440398997005,.14452440398997005,.13988739479107315,.13988739479107315,.13226893863333747,.13226893863333747,.12183141605372853,.12183141605372853,.10879729916714838,.10879729916714838,.09344442345603386,.09344442345603386,.0761001136283793,.0761001136283793,.057134425426857205,.057134425426857205,.036953789770852494,.036953789770852494,.016017228257774335,.016017228257774335],[.13925187285563198,.13925187285563198,.13654149834601517,.13654149834601517,.13117350478706238,.13117350478706238,.12325237681051242,.12325237681051242,.11293229608053922,.11293229608053922,.10041414444288096,.10041414444288096,.08594160621706773,.08594160621706773,.06979646842452049,.06979646842452049,.052293335152683286,.052293335152683286,.03377490158481415,.03377490158481415,.0146279952982722,.0146279952982722],[.13365457218610619,.1324620394046966,.1324620394046966,.12890572218808216,.12890572218808216,.12304908430672953,.12304908430672953,.11499664022241136,.11499664022241136,.10489209146454141,.10489209146454141,.09291576606003515,.09291576606003515,.07928141177671895,.07928141177671895,.06423242140852585,.06423242140852585,.04803767173108467,.04803767173108467,.030988005856979445,.030988005856979445,.013411859487141771,.013411859487141771],[.12793819534675216,.12793819534675216,.1258374563468283,.1258374563468283,.12167047292780339,.12167047292780339,.1155056680537256,.1155056680537256,.10744427011596563,.10744427011596563,.09761865210411388,.09761865210411388,.08619016153195327,.08619016153195327,.0733464814110803,.0733464814110803,.05929858491543678,.05929858491543678,.04427743881741981,.04427743881741981,.028531388628933663,.028531388628933663,.0123412297999872,.0123412297999872]],d=[[1],[1,1],[1,2,1],[1,3,3,1]],T=s((t,e,n)=>({x:(1-n)*(1-n)*(1-n)*t[0]+3*(1-n)*(1-n)*n*t[1]+3*(1-n)*n*n*t[2]+n*n*n*t[3],y:(1-n)*(1-n)*(1-n)*e[0]+3*(1-n)*(1-n)*n*e[1]+3*(1-n)*n*n*e[2]+n*n*n*e[3]}),"cubicPoint"),v=s((t,e,n)=>q([3*(t[1]-t[0]),3*(t[2]-t[1]),3*(t[3]-t[2])],[3*(e[1]-e[0]),3*(e[2]-e[1]),3*(e[3]-e[2])],n),"cubicDerivative"),m=s((t,e,n)=>{let h,i;const s=n/2;h=0;for(let n=0;n<20;n++)i=s*P[20][n]+s,h+=b[20][n]*O(t,e,i);return s*h},"getCubicArcLength"),q=s((t,e,n)=>({x:(1-n)*(1-n)*t[0]+2*(1-n)*n*t[1]+n*n*t[2],y:(1-n)*(1-n)*e[0]+2*(1-n)*n*e[1]+n*n*e[2]}),"quadraticPoint"),_=s((t,e,n)=>{void 0===n&&(n=1);const h=t[0]-2*t[1]+t[2],i=e[0]-2*e[1]+e[2],s=2*t[1]-2*t[0],g=2*e[1]-2*e[0],a=4*(h*h+i*i),r=4*(h*s+i*g),o=s*s+g*g;if(0===a)return n*Math.sqrt(Math.pow(t[2]-t[0],2)+Math.pow(e[2]-e[0],2));const l=r/(2*a),c=n+l,u=o/a-l*l,p=c*c+u>0?Math.sqrt(c*c+u):0,x=l*l+u>0?Math.sqrt(l*l+u):0,y=l+Math.sqrt(l*l+u)!==0&&(c+p)/(l+x)!==0?u*Math.log(Math.abs((c+p)/(l+x))):0;return Math.sqrt(a)/2*(c*p-l*x+y)},"getQuadraticArcLength"),N=s((t,e,n)=>({x:2*(1-n)*(t[1]-t[0])+2*n*(t[2]-t[1]),y:2*(1-n)*(e[1]-e[0])+2*n*(e[2]-e[1])}),"quadraticDerivative");function O(t,e,n){const h=C(1,n,t),i=C(1,n,e),s=h*h+i*i;return Math.sqrt(s)}s(O,"BFunc");var C=s((t,e,n)=>{const h=n.length-1;let i,s;if(0===h)return 0;if(0===t){s=0;for(let t=0;t<=h;t++)s+=d[h][t]*Math.pow(1-e,h-t)*Math.pow(e,t)*n[t];return s}i=new Array(h);for(let t=0;t<h;t++)i[t]=h*(n[t+1]-n[t]);return C(t-1,e,i)},"getDerivative"),D=s((t,e,n)=>{let h=1,i=t/e,s=(t-n(i))/e,g=0;for(;h>.001;){const a=n(i+s),r=Math.abs(t-a)/e;if(r<h)h=r,i+=s;else{const g=n(i-s),a=Math.abs(t-g)/e;a<h?(h=a,i-=s):s/=2}if(g++,g>500)break}return i},"t2length"),S=class{static{s(this,"Bezier")}a;b;c;d;length;getArcLength;getPoint;getDerivative;constructor(t,e,n,h,i,s,g,a){this.a={x:t,y:e},this.b={x:n,y:h},this.c={x:i,y:s},void 0!==g&&void 0!==a?(this.getArcLength=m,this.getPoint=T,this.getDerivative=v,this.d={x:g,y:a}):(this.getArcLength=_,this.getPoint=q,this.getDerivative=N,this.d={x:0,y:0}),this.length=this.getArcLength([this.a.x,this.b.x,this.c.x,this.d.x],[this.a.y,this.b.y,this.c.y,this.d.y],1)}getTotalLength=s(()=>this.length,"getTotalLength");getPointAtLength=s(t=>{const e=[this.a.x,this.b.x,this.c.x,this.d.x],n=[this.a.y,this.b.y,this.c.y,this.d.y],h=D(t,this.length,t=>this.getArcLength(e,n,t));return this.getPoint(e,n,h)},"getPointAtLength");getTangentAtLength=s(t=>{const e=[this.a.x,this.b.x,this.c.x,this.d.x],n=[this.a.y,this.b.y,this.c.y,this.d.y],h=D(t,this.length,t=>this.getArcLength(e,n,t)),i=this.getDerivative(e,n,h),s=Math.sqrt(i.x*i.x+i.y*i.y);let g;return g=s>0?{x:i.x/s,y:i.y/s}:{x:0,y:0},g},"getTangentAtLength");getPropertiesAtLength=s(t=>{const e=[this.a.x,this.b.x,this.c.x,this.d.x],n=[this.a.y,this.b.y,this.c.y,this.d.y],h=D(t,this.length,t=>this.getArcLength(e,n,t)),i=this.getDerivative(e,n,h),s=Math.sqrt(i.x*i.x+i.y*i.y);let g;g=s>0?{x:i.x/s,y:i.y/s}:{x:0,y:0};const a=this.getPoint(e,n,h);return{x:a.x,y:a.y,tangentX:g.x,tangentY:g.y}},"getPropertiesAtLength");getC=s(()=>this.c,"getC");getD=s(()=>this.d,"getD")},E=class{static{s(this,"SVGPathProperties")}length=0;partial_lengths=[];functions=[];initial_point=null;constructor(t){const e=Array.isArray(t)?t:l(t);let n,h=[0,0],i=[0,0],s=[0,0];for(let t=0;t<e.length;t++){if("M"===e[t][0])h=[e[t][1],e[t][2]],s=[h[0],h[1]],this.functions.push(null),0===t&&(this.initial_point={x:e[t][1],y:e[t][2]});else if("m"===e[t][0])h=[e[t][1]+h[0],e[t][2]+h[1]],s=[h[0],h[1]],this.functions.push(null);else if("L"===e[t][0])this.length+=Math.sqrt(Math.pow(h[0]-e[t][1],2)+Math.pow(h[1]-e[t][2],2)),this.functions.push(new u(h[0],e[t][1],h[1],e[t][2])),h=[e[t][1],e[t][2]];else if("l"===e[t][0])this.length+=Math.sqrt(Math.pow(e[t][1],2)+Math.pow(e[t][2],2)),this.functions.push(new u(h[0],e[t][1]+h[0],h[1],e[t][2]+h[1])),h=[e[t][1]+h[0],e[t][2]+h[1]];else if("H"===e[t][0])this.length+=Math.abs(h[0]-e[t][1]),this.functions.push(new u(h[0],e[t][1],h[1],h[1])),h[0]=e[t][1];else if("h"===e[t][0])this.length+=Math.abs(e[t][1]),this.functions.push(new u(h[0],h[0]+e[t][1],h[1],h[1])),h[0]=e[t][1]+h[0];else if("V"===e[t][0])this.length+=Math.abs(h[1]-e[t][1]),this.functions.push(new u(h[0],h[0],h[1],e[t][1])),h[1]=e[t][1];else if("v"===e[t][0])this.length+=Math.abs(e[t][1]),this.functions.push(new u(h[0],h[0],h[1],h[1]+e[t][1])),h[1]=e[t][1]+h[1];else if("z"===e[t][0]||"Z"===e[t][0])this.length+=Math.sqrt(Math.pow(s[0]-h[0],2)+Math.pow(s[1]-h[1],2)),this.functions.push(new u(h[0],s[0],h[1],s[1])),h=[s[0],s[1]];else if("C"===e[t][0])n=new S(h[0],h[1],e[t][1],e[t][2],e[t][3],e[t][4],e[t][5],e[t][6]),this.length+=n.getTotalLength(),h=[e[t][5],e[t][6]],this.functions.push(n);else if("c"===e[t][0])n=new S(h[0],h[1],h[0]+e[t][1],h[1]+e[t][2],h[0]+e[t][3],h[1]+e[t][4],h[0]+e[t][5],h[1]+e[t][6]),n.getTotalLength()>0?(this.length+=n.getTotalLength(),this.functions.push(n),h=[e[t][5]+h[0],e[t][6]+h[1]]):this.functions.push(new u(h[0],h[0],h[1],h[1]));else if("S"===e[t][0]){if(t>0&&["C","c","S","s"].indexOf(e[t-1][0])>-1){if(n){const i=n.getC();n=new S(h[0],h[1],2*h[0]-i.x,2*h[1]-i.y,e[t][1],e[t][2],e[t][3],e[t][4])}}else n=new S(h[0],h[1],h[0],h[1],e[t][1],e[t][2],e[t][3],e[t][4]);n&&(this.length+=n.getTotalLength(),h=[e[t][3],e[t][4]],this.functions.push(n))}else if("s"===e[t][0]){if(t>0&&["C","c","S","s"].indexOf(e[t-1][0])>-1){if(n){const i=n.getC(),s=n.getD();n=new S(h[0],h[1],h[0]+s.x-i.x,h[1]+s.y-i.y,h[0]+e[t][1],h[1]+e[t][2],h[0]+e[t][3],h[1]+e[t][4])}}else n=new S(h[0],h[1],h[0],h[1],h[0]+e[t][1],h[1]+e[t][2],h[0]+e[t][3],h[1]+e[t][4]);n&&(this.length+=n.getTotalLength(),h=[e[t][3]+h[0],e[t][4]+h[1]],this.functions.push(n))}else if("Q"===e[t][0]){if(h[0]===e[t][1]&&h[1]===e[t][2]){const n=new u(e[t][1],e[t][3],e[t][2],e[t][4]);this.length+=n.getTotalLength(),this.functions.push(n)}else n=new S(h[0],h[1],e[t][1],e[t][2],e[t][3],e[t][4],void 0,void 0),this.length+=n.getTotalLength(),this.functions.push(n);h=[e[t][3],e[t][4]],i=[e[t][1],e[t][2]]}else if("q"===e[t][0]){if(0!==e[t][1]||0!==e[t][2])n=new S(h[0],h[1],h[0]+e[t][1],h[1]+e[t][2],h[0]+e[t][3],h[1]+e[t][4],void 0,void 0),this.length+=n.getTotalLength(),this.functions.push(n);else{const n=new u(h[0]+e[t][1],h[0]+e[t][3],h[1]+e[t][2],h[1]+e[t][4]);this.length+=n.getTotalLength(),this.functions.push(n)}i=[h[0]+e[t][1],h[1]+e[t][2]],h=[e[t][3]+h[0],e[t][4]+h[1]]}else if("T"===e[t][0]){if(t>0&&["Q","q","T","t"].indexOf(e[t-1][0])>-1)n=new S(h[0],h[1],2*h[0]-i[0],2*h[1]-i[1],e[t][1],e[t][2],void 0,void 0),this.functions.push(n),this.length+=n.getTotalLength();else{const n=new u(h[0],e[t][1],h[1],e[t][2]);this.functions.push(n),this.length+=n.getTotalLength()}i=[2*h[0]-i[0],2*h[1]-i[1]],h=[e[t][1],e[t][2]]}else if("t"===e[t][0]){if(t>0&&["Q","q","T","t"].indexOf(e[t-1][0])>-1)n=new S(h[0],h[1],2*h[0]-i[0],2*h[1]-i[1],h[0]+e[t][1],h[1]+e[t][2],void 0,void 0),this.length+=n.getTotalLength(),this.functions.push(n);else{const n=new u(h[0],h[0]+e[t][1],h[1],h[1]+e[t][2]);this.length+=n.getTotalLength(),this.functions.push(n)}i=[2*h[0]-i[0],2*h[1]-i[1]],h=[e[t][1]+h[0],e[t][2]+h[1]]}else if("A"===e[t][0]){const n=new p(h[0],h[1],e[t][1],e[t][2],e[t][3],1===e[t][4],1===e[t][5],e[t][6],e[t][7]);this.length+=n.getTotalLength(),h=[e[t][6],e[t][7]],this.functions.push(n)}else if("a"===e[t][0]){const n=new p(h[0],h[1],e[t][1],e[t][2],e[t][3],1===e[t][4],1===e[t][5],h[0]+e[t][6],h[1]+e[t][7]);this.length+=n.getTotalLength(),h=[h[0]+e[t][6],h[1]+e[t][7]],this.functions.push(n)}this.partial_lengths.push(this.length)}}getPartAtLength=s(t=>{t<0?t=0:t>this.length&&(t=this.length);let e=this.partial_lengths.length-1;for(;this.partial_lengths[e]>=t&&e>0;)e--;return e++,{fraction:t-this.partial_lengths[e-1],i:e}},"getPartAtLength");getTotalLength=s(()=>this.length,"getTotalLength");getPointAtLength=s(t=>{const e=this.getPartAtLength(t),n=this.functions[e.i];if(n)return n.getPointAtLength(e.fraction);if(this.initial_point)return this.initial_point;throw new Error("Wrong function at this part.")},"getPointAtLength");getTangentAtLength=s(t=>{const e=this.getPartAtLength(t),n=this.functions[e.i];if(n)return n.getTangentAtLength(e.fraction);if(this.initial_point)return{x:0,y:0};throw new Error("Wrong function at this part.")},"getTangentAtLength");getPropertiesAtLength=s(t=>{const e=this.getPartAtLength(t),n=this.functions[e.i];if(n)return n.getPropertiesAtLength(e.fraction);if(this.initial_point)return{x:this.initial_point.x,y:this.initial_point.y,tangentX:0,tangentY:0};throw new Error("Wrong function at this part.")},"getPropertiesAtLength");getParts=s(()=>{const t=[];for(let e=0;e<this.functions.length;e++)if(null!==this.functions[e]){this.functions[e]=this.functions[e];const n={start:this.functions[e].getPointAtLength(0),end:this.functions[e].getPointAtLength(this.partial_lengths[e]-this.partial_lengths[e-1]),length:this.partial_lengths[e]-this.partial_lengths[e-1],getPointAtLength:this.functions[e].getPointAtLength,getTangentAtLength:this.functions[e].getTangentAtLength,getPropertiesAtLength:this.functions[e].getPropertiesAtLength};t.push(n)}return t},"getParts")},F=class{static{s(this,"_svgPathProperties")}inst;constructor(t){if(this.inst=new E(t),!(this instanceof F))return new F(t)}getTotalLength=s(()=>this.inst.getTotalLength(),"getTotalLength");getPointAtLength=s(t=>this.inst.getPointAtLength(t),"getPointAtLength");getTangentAtLength=s(t=>this.inst.getTangentAtLength(t),"getTangentAtLength");getPropertiesAtLength=s(t=>this.inst.getPropertiesAtLength(t),"getPropertiesAtLength");getParts=s(()=>this.inst.getParts(),"getParts")};