svg-path-sdf
Version:
Get signed distance field for a svg path
2 lines (1 loc) • 8.31 kB
JavaScript
var mr=Object.create;var O=Object.defineProperty;var xr=Object.getOwnPropertyDescriptor;var pr=Object.getOwnPropertyNames;var br=Object.getPrototypeOf,Ar=Object.prototype.hasOwnProperty;var T=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var Mr=(e,r,n,l)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of pr(r))!Ar.call(e,i)&&i!==n&&O(e,i,{get:()=>r[i],enumerable:!(l=xr(r,i))||l.enumerable});return e};var P=(e,r,n)=>(n=e!=null?mr(br(e)):{},Mr(r||!e||!e.__esModule?O(n,"default",{value:e,enumerable:!0}):n,e));var N=T((_r,G)=>{G.exports=Sr;var V={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},Cr=/([astvzqmhlc])([^astvzqmhlc]*)/ig;function Sr(e){var r=[];return e.replace(Cr,function(n,l,i){var a=l.toLowerCase();for(i=Er(i),a=="m"&&i.length>2&&(r.push([l].concat(i.splice(0,2))),a="l",l=l=="m"?"l":"L");;){if(i.length==V[a])return i.unshift(l),r.push(i);if(i.length<V[a])throw new Error("malformed path data");r.push([l].concat(i.splice(0,V[a])))}}),r}var Tr=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/ig;function Er(e){var r=e.match(Tr);return r?r.map(Number):[]}});var Z=T(($r,Q)=>{Q.exports=Ir;function Ir(e){var r=0,n=0,l=0,i=0;return e.map(function(a){a=a.slice();var t=a[0],o=t.toUpperCase();if(t!=o)switch(a[0]=o,t){case"a":a[6]+=l,a[7]+=i;break;case"v":a[1]+=i;break;case"h":a[1]+=l;break;default:for(var u=1;u<a.length;)a[u++]+=l,a[u++]+=i}switch(o){case"Z":l=r,i=n;break;case"H":l=a[1];break;case"V":i=a[1];break;case"M":l=r=a[1],i=n=a[2];break;default:l=a[a.length-2],i=a[a.length-1]}return a})}});var K=T((U,J)=>{"use strict";Object.defineProperty(U,"__esModule",{value:!0});var Fr=function(){function e(r,n){var l=[],i=!0,a=!1,t=void 0;try{for(var o=r[Symbol.iterator](),u;!(i=(u=o.next()).done)&&(l.push(u.value),!(n&&l.length===n));i=!0);}catch(v){a=!0,t=v}finally{try{!i&&o.return&&o.return()}finally{if(a)throw t}}return l}return function(r,n){if(Array.isArray(r))return r;if(Symbol.iterator in Object(r))return e(r,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),z=Math.PI*2,L=function(r,n,l,i,a,t,o){var u=r.x,v=r.y;u*=n,v*=l;var h=i*u-a*v,y=a*u+i*v;return{x:h+t,y:y+o}},zr=function(r,n){var l=n===1.5707963267948966?.551915024494:n===-1.5707963267948966?-.551915024494:1.3333333333333333*Math.tan(n/4),i=Math.cos(r),a=Math.sin(r),t=Math.cos(r+n),o=Math.sin(r+n);return[{x:i-a*l,y:a+i*l},{x:t+o*l,y:o-t*l},{x:t,y:o}]},W=function(r,n,l,i){var a=r*i-n*l<0?-1:1,t=r*l+n*i;return t>1&&(t=1),t<-1&&(t=-1),a*Math.acos(t)},Dr=function(r,n,l,i,a,t,o,u,v,h,y,m){var f=Math.pow(a,2),c=Math.pow(t,2),s=Math.pow(y,2),w=Math.pow(m,2),d=f*c-f*w-c*s;d<0&&(d=0),d/=f*w+c*s,d=Math.sqrt(d)*(o===u?-1:1);var x=d*a/t*m,p=d*-t/a*y,E=h*x-v*p+(r+l)/2,M=v*x+h*p+(n+i)/2,b=(y-x)/a,C=(m-p)/t,R=(-y-x)/a,I=(-m-p)/t,F=W(1,0,b,C),S=W(b,C,R,I);return u===0&&S>0&&(S-=z),u===1&&S<0&&(S+=z),[E,M,F,S]},Rr=function(r){var n=r.px,l=r.py,i=r.cx,a=r.cy,t=r.rx,o=r.ry,u=r.xAxisRotation,v=u===void 0?0:u,h=r.largeArcFlag,y=h===void 0?0:h,m=r.sweepFlag,f=m===void 0?0:m,c=[];if(t===0||o===0)return[];var s=Math.sin(v*z/360),w=Math.cos(v*z/360),d=w*(n-i)/2+s*(l-a)/2,x=-s*(n-i)/2+w*(l-a)/2;if(d===0&&x===0)return[];t=Math.abs(t),o=Math.abs(o);var p=Math.pow(d,2)/Math.pow(t,2)+Math.pow(x,2)/Math.pow(o,2);p>1&&(t*=Math.sqrt(p),o*=Math.sqrt(p));var E=Dr(n,l,i,a,t,o,y,f,s,w,d,x),M=Fr(E,4),b=M[0],C=M[1],R=M[2],I=M[3],F=Math.abs(I)/(z/4);Math.abs(1-F)<1e-7&&(F=1);var S=Math.max(Math.ceil(F),1);I/=S;for(var X=0;X<S;X++)c.push(zr(R,I)),R+=I;return c.map(function(B){var Y=L(B[0],t,o,w,s,b,C),hr=Y.x,cr=Y.y,_=L(B[1],t,o,w,s,b,C),dr=_.x,sr=_.y,$=L(B[2],t,o,w,s,b,C),wr=$.x,yr=$.y;return{x1:hr,y1:cr,x2:dr,y2:sr,x:wr,y:yr}})};U.default=Rr;J.exports=U.default});var rr=T((Or,j)=>{"use strict";j.exports=qr;var Ur=K();function qr(e){for(var r,n=[],l=0,i=0,a=0,t=0,o=null,u=null,v=0,h=0,y=0,m=e.length;y<m;y++){var f=e[y],c=f[0];switch(c){case"M":a=f[1],t=f[2];break;case"A":var s=Ur({px:v,py:h,cx:f[6],cy:f[7],rx:f[1],ry:f[2],xAxisRotation:f[3],largeArcFlag:f[4],sweepFlag:f[5]});if(!s.length)continue;for(var w=0,d;w<s.length;w++)d=s[w],f=["C",d.x1,d.y1,d.x2,d.y2,d.x,d.y],w<s.length-1&&n.push(f);break;case"S":var x=v,p=h;(r=="C"||r=="S")&&(x+=x-l,p+=p-i),f=["C",x,p,f[1],f[2],f[3],f[4]];break;case"T":r=="Q"||r=="T"?(o=v*2-o,u=h*2-u):(o=v,u=h),f=g(v,h,o,u,f[1],f[2]);break;case"Q":o=f[1],u=f[2],f=g(v,h,f[1],f[2],f[3],f[4]);break;case"L":f=q(v,h,f[1],f[2]);break;case"H":f=q(v,h,f[1],h);break;case"V":f=q(v,h,v,f[1]);break;case"Z":f=q(v,h,a,t);break}r=c,v=f[f.length-2],h=f[f.length-1],f.length>4?(l=f[f.length-4],i=f[f.length-3]):(l=v,i=h),n.push(f)}return n}function q(e,r,n,l){return["C",e,r,n,l,n,l]}function g(e,r,n,l,i,a){return["C",e/3+2/3*n,r/3+2/3*l,i/3+2/3*n,a/3+2/3*l,i,a]}});var k=T((Gr,ar)=>{"use strict";ar.exports=function(r){return typeof r!="string"?!1:(r=r.trim(),!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(r)&&/[\dz]$/i.test(r)&&r.length>4))}});var er=T((Nr,tr)=>{"use strict";var Br=N(),Pr=Z(),Vr=rr(),Lr=k();tr.exports=kr;function kr(e){if(Array.isArray(e)&&e.length===1&&typeof e[0]=="string"&&(e=e[0]),typeof e=="string"){if(!Lr(e))throw Error("String is not an SVG path.");e=Br(e)}if(!Array.isArray(e))throw Error("Argument should be a string or an array of path segments.");if(e=Pr(e),e=Vr(e),!e.length)return[0,0,0,0];for(var r=[1/0,1/0,-1/0,-1/0],n=0,l=e.length;n<l;n++)for(var i=e[n].slice(1),a=0;a<i.length;a+=2)i[a+0]<r[0]&&(r[0]=i[a+0]),i[a+1]<r[1]&&(r[1]=i[a+1]),i[a+0]>r[2]&&(r[2]=i[a+0]),i[a+1]>r[3]&&(r[3]=i[a+1]);return r}});var or=T((Qr,lr)=>{"use strict";lr.exports=Hr;var D=1e20;function Hr(e,r){r||(r={});var n=r.cutoff==null?.25:r.cutoff,l=r.radius==null?8:r.radius,i=r.channel||0,a,t,o,u,v,h,y,m,f,c,s;if(ArrayBuffer.isView(e)||Array.isArray(e)){if(!r.width||!r.height)throw Error("For raw data width and height should be provided by options");a=r.width,t=r.height,u=e,r.stride?h=r.stride:h=Math.floor(e.length/a/t)}else window.HTMLCanvasElement&&e instanceof window.HTMLCanvasElement?(m=e,y=m.getContext("2d",{willReadFrequently:!0}),a=m.width,t=m.height,f=y.getImageData(0,0,a,t),u=f.data,h=4):window.CanvasRenderingContext2D&&e instanceof window.CanvasRenderingContext2D?(m=e.canvas,y=e,a=m.width,t=m.height,f=y.getImageData(0,0,a,t),u=f.data,h=4):window.ImageData&&e instanceof window.ImageData&&(f=e,a=e.width,t=e.height,u=f.data,h=4);if(o=Math.max(a,t),window.Uint8ClampedArray&&u instanceof window.Uint8ClampedArray||window.Uint8Array&&u instanceof window.Uint8Array)for(v=u,u=Array(a*t),c=0,s=Math.floor(v.length/h);c<s;c++)u[c]=v[c*h+i]/255;else if(h!==1)throw Error("Raw data can have only 1 value per pixel");var w=Array(a*t),d=Array(a*t),x=Array(o),p=Array(o),E=Array(o+1),M=Array(o);for(c=0,s=a*t;c<s;c++){var b=u[c];w[c]=b===1?0:b===0?D:Math.pow(Math.max(0,.5-b),2),d[c]=b===1?D:b===0?0:Math.pow(Math.max(0,b-.5),2)}nr(w,a,t,x,p,M,E),nr(d,a,t,x,p,M,E);var C=window.Float32Array?new Float32Array(a*t):new Array(a*t);for(c=0,s=a*t;c<s;c++)C[c]=Math.min(Math.max(1-((w[c]-d[c])/l+n),0),1);return C}function nr(e,r,n,l,i,a,t){for(var o=0;o<r;o++){for(var u=0;u<n;u++)l[u]=e[u*r+o];for(ir(l,i,a,t,n),u=0;u<n;u++)e[u*r+o]=i[u]}for(u=0;u<n;u++){for(o=0;o<r;o++)l[o]=e[u*r+o];for(ir(l,i,a,t,r),o=0;o<r;o++)e[u*r+o]=Math.sqrt(i[o])}}function ir(e,r,n,l,i){n[0]=0,l[0]=-D,l[1]=+D;for(var a=1,t=0;a<i;a++){for(var o=(e[a]+a*a-(e[n[t]]+n[t]*n[t]))/(2*a-2*n[t]);o<=l[t];)t--,o=(e[a]+a*a-(e[n[t]]+n[t]*n[t]))/(2*a-2*n[t]);t++,n[t]=a,l[t]=o,l[t+1]=+D}for(a=0,t=0;a<i;a++){for(;l[t+1]<a;)t++;r[a]=(a-n[t])*(a-n[t])+e[n[t]]}}});var fr=P(er()),ur=P(k()),vr=P(or()),H=document.createElement("canvas"),A=H.getContext("2d",{willReadFrequently:!0});function Xr(e,r={}){if(!(0,ur.default)(e))throw Error("Invalid SVG path");let n,l;r.shape||Array.isArray(r)?[n,l]=r.shape||r:(n=H.width=r.width||r.w||200,l=H.height=r.height||r.h||200);let i=Math.min(n,l),a=r.stroke||0,t=r.viewbox||r.viewBox||(0,fr.default)(e),o=[n/(t[2]-t[0]),l/(t[3]-t[1])],u=Math.min(o[0]||0,o[1]||0)/2;A.fillStyle="black",A.fillRect(0,0,n,l),A.fillStyle="white",a&&(typeof a!="number"&&(a=1),A.strokeStyle=a>0?"white":"black",A.lineWidth=Math.abs(a)),A.translate(n*.5,l*.5),A.scale(u,u);let v=new Path2D(e);return A.fill(v),a&&A.stroke(v),A.setTransform(1,0,0,1,0,0),(0,vr.default)(A,{cutoff:r.cutoff!=null?r.cutoff:.5,radius:r.radius!=null?r.radius:i*.5})}export{Xr as default};