pantograph2d 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{QuadraticBezier-DxieHk9z.js → QuadraticBezier-B2g_Iyyl.js} +15 -14
- package/dist/{QuadraticBezier-DxieHk9z.js.map → QuadraticBezier-B2g_Iyyl.js.map} +1 -1
- package/dist/{QuadraticBezier--UZr_xcV.cjs → QuadraticBezier-CuRsIP_D.cjs} +4 -4
- package/dist/{QuadraticBezier--UZr_xcV.cjs.map → QuadraticBezier-CuRsIP_D.cjs.map} +1 -1
- package/dist/{draw-BUUNobTS.cjs → draw-9Elv4xz6.cjs} +2 -2
- package/dist/{draw-BUUNobTS.cjs.map → draw-9Elv4xz6.cjs.map} +1 -1
- package/dist/{draw-lOWnIN1o.js → draw-BJW5kfm9.js} +3 -3
- package/dist/{draw-lOWnIN1o.js.map → draw-BJW5kfm9.js.map} +1 -1
- package/dist/{models-DCkOI0hV.js → models-DdZq-waE.js} +2 -2
- package/dist/{models-DCkOI0hV.js.map → models-DdZq-waE.js.map} +1 -1
- package/dist/{models-CCo90hZc.cjs → models-LHGiMarC.cjs} +2 -2
- package/dist/{models-CCo90hZc.cjs.map → models-LHGiMarC.cjs.map} +1 -1
- package/dist/pantograph/drawShape.cjs +1 -1
- package/dist/pantograph/drawShape.cjs.map +1 -1
- package/dist/pantograph/drawShape.js +374 -14
- package/dist/pantograph/drawShape.js.map +1 -1
- package/dist/pantograph/models.cjs +1 -1
- package/dist/pantograph/models.js +2 -2
- package/dist/pantograph/svg.cjs +1 -1
- package/dist/pantograph/svg.js +1 -1
- package/dist/pantograph.cjs +2 -2
- package/dist/pantograph.cjs.map +1 -1
- package/dist/pantograph.js +674 -568
- package/dist/pantograph.js.map +1 -1
- package/dist/{svg-BY5h3CDD.cjs → svg-BzloQ9l1.cjs} +2 -2
- package/dist/{svg-BY5h3CDD.cjs.map → svg-BzloQ9l1.cjs.map} +1 -1
- package/dist/{svg-BIphc_zE.js → svg-D8vwkQf7.js} +2 -2
- package/dist/{svg-BIphc_zE.js.map → svg-D8vwkQf7.js.map} +1 -1
- package/dist/types/src/algorithms/tesselate/tesselateSegment.d.ts +7 -0
- package/dist/types/src/api/drawShape.d.ts +3 -0
- package/dist/types/src/drawShape/index.d.ts +1 -1
- package/dist/types/src/main.d.ts +1 -1
- package/dist/types/src/operations.d.ts +1 -0
- package/dist/types/src/tesselationOperations.d.ts +15 -0
- package/package.json +3 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("../draw-9Elv4xz6.cjs"),D=require("../QuadraticBezier-CuRsIP_D.cjs");function N(c){return S.draw([-c,0]).sagittaArc(2*c,0,c).sagittaArc(-2*c,0,c).close()}function U(c,e,t=0){const{rx:a=0,ry:o=0}=typeof t=="number"?{ry:t,rx:t}:t;let n=Math.min(a??t??0,c/2),r=Math.min(o??t??0,e/2);const s=n&&r;s||(n=0,r=0);const i=n===r,f=S.draw([Math.min(0,-(c/2-n)),-e/2]),l=(k,h)=>{s&&(i?f.tangentArc(k,h):f.ellipse(k,h,n,r,0,!1,!1))};return n<c/2&&f.hLine(c-2*n),l(n,r),r<e/2&&f.vLine(e-2*r),l(-n,r),n<c/2&&f.hLine(-(c-2*n)),l(-n,-r),r<e/2&&f.vLine(-(e-2*r)),l(n,-r),f.close()}function X(c,e){const t=S.draw([-c,0]);return t.halfEllipse(2*c,0,e),t.halfEllipse(-2*c,0,e),t.close()}function Y(c,e,t){const a=D.range(e).map(n=>{const r=-(Math.PI*2/e)*n;return[c*Math.sin(r),c*Math.cos(r)]});let o=S.draw(a[a.length-1]);for(const n of a)t?o=o.sagittaArcTo(n,t):o=o.lineTo(n);return o.close()}const J=0,$=1,O=2,L={A:7,a:7,C:6,c:6,H:1,h:1,L:2,l:2,M:2,m:2,Q:4,q:4,S:4,s:4,T:2,t:2,V:1,v:1,Z:0,z:0};function K(c){const e=new Array;for(;c!=="";)if(c.match(/^([ \t\r\n,]+)/))c=c.substr(RegExp.$1.length);else if(c.match(/^([aAcChHlLmMqQsStTvVzZ])/))e[e.length]={type:J,text:RegExp.$1},c=c.substr(RegExp.$1.length);else if(c.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))e[e.length]={type:$,text:`${parseFloat(RegExp.$1)}`},c=c.substr(RegExp.$1.length);else return[];return e[e.length]={type:O,text:""},e}function z(c,e){return c.type===e}function Z(c){const e=[],t=K(c);let a="BOD",o=0,n=t[o];for(;!z(n,O);){let r=0;const s=[];if(a==="BOD")if(n.text==="M"||n.text==="m")o++,r=L[n.text],a=n.text;else return Z("M0,0"+c);else z(n,$)?r=L[a]:(o++,r=L[n.text],a=n.text);if(o+r<t.length){for(let i=o;i<o+r;i++){const f=t[i];if(z(f,$))s[s.length]=+f.text;else throw new Error("Param not a number: "+a+","+f.text)}if(typeof L[a]=="number"){const i={key:a,data:s};e.push(i),o+=r,n=t[o],a==="M"&&(a="L"),a==="m"&&(a="l")}else throw new Error("Bad segment: "+a)}else throw new Error("Path data ended short")}return e}function W(c){const e=[];for(const{key:t,data:a}of c)switch(e.push(t),t){case"C":case"c":e.push(a[0],`${a[1]},`,a[2],`${a[3]},`,a[4],a[5]);break;case"S":case"s":case"Q":case"q":e.push(a[0],`${a[1]},`,a[2],a[3]);break;default:e.push(...a);break}return e.join(" ")}function v(c){let e=0,t=0,a=0,o=0;const n=[];for(const{key:r,data:s}of c)switch(r){case"M":n.push({key:"M",data:[...s]}),[e,t]=s,[a,o]=s;break;case"m":e+=s[0],t+=s[1],n.push({key:"M",data:[e,t]}),a=e,o=t;break;case"L":n.push({key:"L",data:[...s]}),[e,t]=s;break;case"l":e+=s[0],t+=s[1],n.push({key:"L",data:[e,t]});break;case"C":n.push({key:"C",data:[...s]}),e=s[4],t=s[5];break;case"c":{const i=s.map((f,l)=>l%2?f+t:f+e);n.push({key:"C",data:i}),e=i[4],t=i[5];break}case"Q":n.push({key:"Q",data:[...s]}),e=s[2],t=s[3];break;case"q":{const i=s.map((f,l)=>l%2?f+t:f+e);n.push({key:"Q",data:i}),e=i[2],t=i[3];break}case"A":n.push({key:"A",data:[...s]}),e=s[5],t=s[6];break;case"a":e+=s[5],t+=s[6],n.push({key:"A",data:[s[0],s[1],s[2],s[3],s[4],e,t]});break;case"H":n.push({key:"H",data:[...s]}),e=s[0];break;case"h":e+=s[0],n.push({key:"H",data:[e]});break;case"V":n.push({key:"V",data:[...s]}),t=s[0];break;case"v":t+=s[0],n.push({key:"V",data:[t]});break;case"S":n.push({key:"S",data:[...s]}),e=s[2],t=s[3];break;case"s":{const i=s.map((f,l)=>l%2?f+t:f+e);n.push({key:"S",data:i}),e=i[2],t=i[3];break}case"T":n.push({key:"T",data:[...s]}),e=s[0],t=s[1];break;case"t":e+=s[0],t+=s[1],n.push({key:"T",data:[e,t]});break;case"Z":case"z":n.push({key:"Z",data:[]}),e=a,t=o;break}return n}function tt(c){const e=[];let t="",a=0,o=0,n=0,r=0,s=0,i=0;for(const{key:f,data:l}of c){switch(f){case"M":e.push({key:"M",data:[...l]}),[a,o]=l,[n,r]=l;break;case"C":e.push({key:"C",data:[...l]}),a=l[4],o=l[5],s=l[2],i=l[3];break;case"L":e.push({key:"L",data:[...l]}),[a,o]=l;break;case"H":a=l[0],e.push({key:"L",data:[a,o]});break;case"V":o=l[0],e.push({key:"L",data:[a,o]});break;case"S":{let k=0,h=0;t==="C"||t==="S"?(k=a+(a-s),h=o+(o-i)):(k=a,h=o),e.push({key:"C",data:[k,h,...l]}),s=l[0],i=l[1],a=l[2],o=l[3];break}case"T":{const[k,h]=l;let u=0,y=0;t==="Q"||t==="T"?(u=a+(a-s),y=o+(o-i)):(u=a,y=o);const p=a+2*(u-a)/3,b=o+2*(y-o)/3,M=k+2*(u-k)/3,g=h+2*(y-h)/3;e.push({key:"C",data:[p,b,M,g,k,h]}),s=u,i=y,a=k,o=h;break}case"Q":{const[k,h,u,y]=l,p=a+2*(k-a)/3,b=o+2*(h-o)/3,M=u+2*(k-u)/3,g=y+2*(h-y)/3;e.push({key:"C",data:[p,b,M,g,u,y]}),s=k,i=h,a=u,o=y;break}case"A":{const k=Math.abs(l[0]),h=Math.abs(l[1]),u=l[2],y=l[3],p=l[4],b=l[5],M=l[6];k===0||h===0?(e.push({key:"C",data:[a,o,b,M,b,M]}),a=b,o=M):(a!==b||o!==M)&&(F(a,o,b,M,k,h,u,y,p).forEach(function(m){e.push({key:"C",data:m})}),a=b,o=M);break}case"Z":e.push({key:"Z",data:[]}),a=n,o=r;break}t=f}return e}function et(c){return Math.PI*c/180}function A(c,e,t){const a=c*Math.cos(t)-e*Math.sin(t),o=c*Math.sin(t)+e*Math.cos(t);return[a,o]}function F(c,e,t,a,o,n,r,s,i,f){const l=et(r);let k=[],h=0,u=0,y=0,p=0;if(f)[h,u,y,p]=f;else{[c,e]=A(c,e,-l),[t,a]=A(t,a,-l);const w=(c-t)/2,d=(e-a)/2;let x=w*w/(o*o)+d*d/(n*n);x>1&&(x=Math.sqrt(x),o=x*o,n=x*n);const E=s===i?-1:1,T=o*o,R=n*n,G=T*R-T*d*d-R*w*w,_=T*d*d+R*w*w,B=E*Math.sqrt(Math.abs(G/_));y=B*o*d/n+(c+t)/2,p=B*-n*w/o+(e+a)/2,h=Math.asin(parseFloat(((e-p)/n).toFixed(9))),u=Math.asin(parseFloat(((a-p)/n).toFixed(9))),c<y&&(h=Math.PI-h),t<y&&(u=Math.PI-u),h<0&&(h=Math.PI*2+h),u<0&&(u=Math.PI*2+u),i&&h>u&&(h=h-Math.PI*2),!i&&u>h&&(u=u-Math.PI*2)}let b=u-h;if(Math.abs(b)>Math.PI*120/180){const w=u,d=t,x=a;i&&u>h?u=h+Math.PI*120/180*1:u=h+Math.PI*120/180*-1,t=y+o*Math.cos(u),a=p+n*Math.sin(u),k=F(t,a,d,x,o,n,r,0,i,[u,w,y,p])}b=u-h;const M=Math.cos(h),g=Math.sin(h),m=Math.cos(u),j=Math.sin(u),I=Math.tan(b/4),Q=4/3*o*I,V=4/3*n*I,q=[c,e],C=[c+Q*g,e-V*M],P=[t+Q*j,a-V*m],H=[t,a];if(C[0]=2*q[0]-C[0],C[1]=2*q[1]-C[1],f)return[C,P,H].concat(k);{k=[C,P,H].concat(k);const w=[];for(let d=0;d<k.length;d+=3){const x=A(k[d][0],k[d][1],l),E=A(k[d+1][0],k[d+1][1],l),T=A(k[d+2][0],k[d+2][1],l);w.push([x[0],x[1],E[0],E[1],T[0],T[1]])}return w}}const at=Object.freeze(Object.defineProperty({__proto__:null,absolutize:v,normalize:tt,parsePath:Z,serialize:W},Symbol.toStringTag,{value:"Module"})),{parsePath:st,absolutize:nt}=at,ct=(c,e,t)=>{let a,o=null,n=null;if(c.key==="M"){const[r,s]=c.data;return a=[r,s],{p:a}}if(c.key==="H"){const[r]=c.data;return a=[r,(e==null?void 0:e[1])||0],{p:a}}if(c.key==="V"){const[r]=c.data;return a=[(e==null?void 0:e[0])||0,r],{p:a}}if(c.key==="L"){const[r,s]=c.data;return a=[r,s],{p:a}}if(c.key==="C"){const[r,s,i,f,l,k]=c.data;return a=[l,k],o=[r,s],n=[i,f],{p:a,control1:o,control2:n}}if(c.key==="S"){const[r,s,i,f]=c.data;if(a=[i,f],n=[r,s],!e)throw new Error("S command without previous point");if(o=e,t.control2){const l=e;o=[l[0]+(l[0]-t.control2[0]),l[1]+(l[1]-t.control2[1])]}return{p:a,control1:o,control2:n}}if(c.key==="Q"){const[r,s,i,f]=c.data;return a=[i,f],o=[r,s],{p:a,control1:o}}if(c.key==="T"){const[r,s]=c.data;if(a=[r,s],!e)throw new Error("T command without previous point");if(o=e,t.control1&&!t.control2){const i=e;o=[i[0]+(i[0]-t.control1[0]),i[1]+(i[1]-t.control1[1])]}}if(c.key==="A"){const[r,s,i=0,f=0,l=0,k,h]=c.data;if(a=[k,h],!e)throw new Error("A command without previous point");const u=Math.sqrt((e[0]-k)**2+(e[1]-h)**2),y=Math.max(r,s);let p=r,b=s;if(y<u/2){const M=u/2/y;p=r*M,b=s*M}return{p:a,arcConfig:[p,b,i,!!f,!!l]}}throw new Error(`Unknown command ${c.key}`)};function*ot(c){const e=nt(st(c));let t=null,a=null,o={control1:null,control2:null};for(const n of e){if(n.key==="Z"){t&&(yield t.close(!0)),t=null;continue}const r=ct(n,a,o),s=r.p,i="control1"in r?r.control1:null,f="control1"in r?r.control2:null,l="arcConfig"in r?r.arcConfig:null;if(n.key==="M"){t&&(yield t.isClosed?t.close():t.asStrand()),t=S.draw(s),a=s;continue}if(a&&Math.abs(s[0]-a[0])<1e-9&&Math.abs(s[1]-a[1])<1e-9){a=s,o={control1:i,control2:f};continue}(n.key==="L"||n.key==="H"||n.key==="V")&&(t==null||t.lineTo(s)),(n.key==="C"||n.key==="S")&&(t==null||t.cubicBezierCurveTo(s,i,f)),(n.key==="Q"||n.key==="T")&&(t==null||t.quadraticBezierCurveTo(s,i)),n.key==="A"&&(t==null||t.ellipseTo(s,...l)),a=s,o={control1:i,control2:f}}t&&(yield t.isClosed?t.close():t.asStrand())}function rt(c){return Array.from(ot(c))}exports.drawCircle=N;exports.drawEllipse=X;exports.drawPolysides=Y;exports.drawRect=U;exports.drawSVGPath=rt;
|
|
2
2
|
//# sourceMappingURL=drawShape.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawShape.cjs","sources":["../../src/drawShape/drawCircle.ts","../../src/drawShape/drawRect.ts"],"sourcesContent":["import { draw } from \"../draw.js\";\nimport type { Diagram } from \"../models/Diagram.js\";\n\nexport function drawCircle(radius: number): Diagram {\n return draw([-radius, 0])\n .sagittaArc(2 * radius, 0, radius)\n .sagittaArc(-2 * radius, 0, radius)\n .close();\n}\n","import { draw } from \"../draw.js\";\nimport type { Diagram } from \"../models/Diagram.js\";\n\nexport function drawRect(\n width: number,\n height: number,\n r: number | { rx?: number; ry?: number } = 0,\n): Diagram {\n const { rx: inputRx = 0, ry: inputRy = 0 } =\n typeof r === \"number\" ? { ry: r, rx: r } : r;\n let rx = Math.min(inputRx ?? r ?? 0, width / 2);\n let ry = Math.min(inputRy ?? r ?? 0, height / 2);\n\n const withRadius = rx && ry;\n if (!withRadius) {\n rx = 0;\n ry = 0;\n }\n const symmetricRadius = rx === ry;\n\n const sk = draw([Math.min(0, -(width / 2 - rx)), -height / 2]);\n\n const addFillet = (xDist: number, yDist: number) => {\n if (withRadius) {\n if (symmetricRadius) sk.tangentArc(xDist, yDist);\n else {\n sk.ellipse(xDist, yDist, rx, ry, 0, false, false);\n }\n }\n };\n\n if (rx < width / 2) {\n sk.hLine(width - 2 * rx);\n }\n addFillet(rx, ry);\n if (ry < height / 2) {\n sk.vLine(height - 2 * ry);\n }\n addFillet(-rx, ry);\n if (rx < width / 2) {\n sk.hLine(-(width - 2 * rx));\n }\n addFillet(-rx, -ry);\n if (ry < height / 2) {\n sk.vLine(-(height - 2 * ry));\n }\n addFillet(rx, -ry);\n return sk.close();\n}\n"],"names":["drawCircle","radius","draw","drawRect","width","height","r","inputRx","inputRy","rx","ry","withRadius","symmetricRadius","sk","addFillet","xDist","yDist"],"mappings":"wHAGO,SAASA,EAAWC,EAAyB,CAClD,OAAOC,EAAAA,KAAK,CAAC,CAACD,EAAQ,CAAC,CAAC,EACrB,WAAW,EAAIA,EAAQ,EAAGA,CAAM,EAChC,WAAW,GAAKA,EAAQ,EAAGA,CAAM,EACjC,MAAM,CACX,CCLO,SAASE,EACdC,EACAC,EACAC,EAA2C,EAClC,CACT,KAAM,CAAE,GAAIC,EAAU,EAAG,GAAIC,EAAU,CAAE,EACvC,OAAOF,GAAM,SAAW,CAAE,GAAIA,EAAG,GAAIA,GAAMA,EAC7C,IAAIG,EAAK,KAAK,IAAIF,GAAWD,GAAK,EAAGF,EAAQ,CAAC,EAC1CM,EAAK,KAAK,IAAIF,GAAWF,GAAK,EAAGD,EAAS,CAAC,EAE/C,MAAMM,EAAaF,GAAMC,EACpBC,IACEF,EAAA,EACAC,EAAA,GAEP,MAAME,EAAkBH,IAAOC,EAEzBG,EAAKX,EAAA,KAAK,CAAC,KAAK,IAAI,EAAG,EAAEE,EAAQ,EAAIK,EAAG,EAAG,CAACJ,EAAS,CAAC,CAAC,EAEvDS,EAAY,CAACC,EAAeC,IAAkB,CAC9CL,IACEC,EAAiBC,EAAG,WAAWE,EAAOC,CAAK,EAE7CH,EAAG,QAAQE,EAAOC,EAAOP,EAAIC,EAAI,EAAG,GAAO,EAAK,EAGtD,EAEI,OAAAD,EAAKL,EAAQ,GACZS,EAAA,MAAMT,EAAQ,EAAIK,CAAE,EAEzBK,EAAUL,EAAIC,CAAE,EACZA,EAAKL,EAAS,GACbQ,EAAA,MAAMR,EAAS,EAAIK,CAAE,EAEhBI,EAAA,CAACL,EAAIC,CAAE,EACbD,EAAKL,EAAQ,GACfS,EAAG,MAAM,EAAET,EAAQ,EAAIK,EAAG,EAElBK,EAAA,CAACL,EAAI,CAACC,CAAE,EACdA,EAAKL,EAAS,GAChBQ,EAAG,MAAM,EAAER,EAAS,EAAIK,EAAG,EAEnBI,EAAAL,EAAI,CAACC,CAAE,EACVG,EAAG,MAAM,CAClB"}
|
|
1
|
+
{"version":3,"file":"drawShape.cjs","sources":["../../src/drawShape/drawCircle.ts","../../src/drawShape/drawRect.ts","../../src/drawShape/drawEllipse.ts","../../src/drawShape/drawPolysides.ts","../../../../node_modules/.pnpm/path-data-parser@0.1.0/node_modules/path-data-parser/lib/parser.js","../../../../node_modules/.pnpm/path-data-parser@0.1.0/node_modules/path-data-parser/lib/absolutize.js","../../../../node_modules/.pnpm/path-data-parser@0.1.0/node_modules/path-data-parser/lib/normalize.js","../../src/drawShape/drawSVGPath.ts"],"sourcesContent":["import { draw } from \"../draw.js\";\nimport type { Diagram } from \"../models/Diagram.js\";\n\nexport function drawCircle(radius: number): Diagram {\n return draw([-radius, 0])\n .sagittaArc(2 * radius, 0, radius)\n .sagittaArc(-2 * radius, 0, radius)\n .close();\n}\n","import { draw } from \"../draw.js\";\nimport type { Diagram } from \"../models/Diagram.js\";\n\nexport function drawRect(\n width: number,\n height: number,\n r: number | { rx?: number; ry?: number } = 0,\n): Diagram {\n const { rx: inputRx = 0, ry: inputRy = 0 } =\n typeof r === \"number\" ? { ry: r, rx: r } : r;\n let rx = Math.min(inputRx ?? r ?? 0, width / 2);\n let ry = Math.min(inputRy ?? r ?? 0, height / 2);\n\n const withRadius = rx && ry;\n if (!withRadius) {\n rx = 0;\n ry = 0;\n }\n const symmetricRadius = rx === ry;\n\n const sk = draw([Math.min(0, -(width / 2 - rx)), -height / 2]);\n\n const addFillet = (xDist: number, yDist: number) => {\n if (withRadius) {\n if (symmetricRadius) sk.tangentArc(xDist, yDist);\n else {\n sk.ellipse(xDist, yDist, rx, ry, 0, false, false);\n }\n }\n };\n\n if (rx < width / 2) {\n sk.hLine(width - 2 * rx);\n }\n addFillet(rx, ry);\n if (ry < height / 2) {\n sk.vLine(height - 2 * ry);\n }\n addFillet(-rx, ry);\n if (rx < width / 2) {\n sk.hLine(-(width - 2 * rx));\n }\n addFillet(-rx, -ry);\n if (ry < height / 2) {\n sk.vLine(-(height - 2 * ry));\n }\n addFillet(rx, -ry);\n return sk.close();\n}\n","import { draw } from \"../draw.js\";\nimport type { Diagram } from \"../main.js\";\n\nexport function drawEllipse(rx: number, ry: number): Diagram {\n const pen = draw([-rx, 0]);\n pen.halfEllipse(2 * rx, 0, ry);\n pen.halfEllipse(-2 * rx, 0, ry);\n return pen.close();\n}\n","import { draw } from \"../draw\";\nimport range from \"../utils/range\";\n\nexport function drawPolysides(\n radius: number,\n sidesCount: number,\n sagitta?: number,\n) {\n const points = range(sidesCount).map((i) => {\n const theta = -((Math.PI * 2) / sidesCount) * i;\n return [radius * Math.sin(theta), radius * Math.cos(theta)] as [\n number,\n number,\n ];\n });\n\n let drawing = draw(points[points.length - 1]);\n for (const point of points) {\n if (sagitta) {\n drawing = drawing.sagittaArcTo(point, sagitta);\n } else {\n drawing = drawing.lineTo(point);\n }\n }\n return drawing.close();\n}\n","const COMMAND = 0;\nconst NUMBER = 1;\nconst EOD = 2;\nconst PARAMS = { A: 7, a: 7, C: 6, c: 6, H: 1, h: 1, L: 2, l: 2, M: 2, m: 2, Q: 4, q: 4, S: 4, s: 4, T: 2, t: 2, V: 1, v: 1, Z: 0, z: 0 };\nfunction tokenize(d) {\n const tokens = new Array();\n while (d !== '') {\n if (d.match(/^([ \\t\\r\\n,]+)/)) {\n d = d.substr(RegExp.$1.length);\n }\n else if (d.match(/^([aAcChHlLmMqQsStTvVzZ])/)) {\n tokens[tokens.length] = { type: COMMAND, text: RegExp.$1 };\n d = d.substr(RegExp.$1.length);\n }\n else if (d.match(/^(([-+]?[0-9]+(\\.[0-9]*)?|[-+]?\\.[0-9]+)([eE][-+]?[0-9]+)?)/)) {\n tokens[tokens.length] = { type: NUMBER, text: `${parseFloat(RegExp.$1)}` };\n d = d.substr(RegExp.$1.length);\n }\n else {\n return [];\n }\n }\n tokens[tokens.length] = { type: EOD, text: '' };\n return tokens;\n}\nfunction isType(token, type) {\n return token.type === type;\n}\nexport function parsePath(d) {\n const segments = [];\n const tokens = tokenize(d);\n let mode = 'BOD';\n let index = 0;\n let token = tokens[index];\n while (!isType(token, EOD)) {\n let paramsCount = 0;\n const params = [];\n if (mode === 'BOD') {\n if (token.text === 'M' || token.text === 'm') {\n index++;\n paramsCount = PARAMS[token.text];\n mode = token.text;\n }\n else {\n return parsePath('M0,0' + d);\n }\n }\n else if (isType(token, NUMBER)) {\n paramsCount = PARAMS[mode];\n }\n else {\n index++;\n paramsCount = PARAMS[token.text];\n mode = token.text;\n }\n if ((index + paramsCount) < tokens.length) {\n for (let i = index; i < index + paramsCount; i++) {\n const numbeToken = tokens[i];\n if (isType(numbeToken, NUMBER)) {\n params[params.length] = +numbeToken.text;\n }\n else {\n throw new Error('Param not a number: ' + mode + ',' + numbeToken.text);\n }\n }\n if (typeof PARAMS[mode] === 'number') {\n const segment = { key: mode, data: params };\n segments.push(segment);\n index += paramsCount;\n token = tokens[index];\n if (mode === 'M')\n mode = 'L';\n if (mode === 'm')\n mode = 'l';\n }\n else {\n throw new Error('Bad segment: ' + mode);\n }\n }\n else {\n throw new Error('Path data ended short');\n }\n }\n return segments;\n}\nexport function serialize(segments) {\n const tokens = [];\n for (const { key, data } of segments) {\n tokens.push(key);\n switch (key) {\n case 'C':\n case 'c':\n tokens.push(data[0], `${data[1]},`, data[2], `${data[3]},`, data[4], data[5]);\n break;\n case 'S':\n case 's':\n case 'Q':\n case 'q':\n tokens.push(data[0], `${data[1]},`, data[2], data[3]);\n break;\n default:\n tokens.push(...data);\n break;\n }\n }\n return tokens.join(' ');\n}\n","// Translate relative commands to absolute commands\nexport function absolutize(segments) {\n let cx = 0, cy = 0;\n let subx = 0, suby = 0;\n const out = [];\n for (const { key, data } of segments) {\n switch (key) {\n case 'M':\n out.push({ key: 'M', data: [...data] });\n [cx, cy] = data;\n [subx, suby] = data;\n break;\n case 'm':\n cx += data[0];\n cy += data[1];\n out.push({ key: 'M', data: [cx, cy] });\n subx = cx;\n suby = cy;\n break;\n case 'L':\n out.push({ key: 'L', data: [...data] });\n [cx, cy] = data;\n break;\n case 'l':\n cx += data[0];\n cy += data[1];\n out.push({ key: 'L', data: [cx, cy] });\n break;\n case 'C':\n out.push({ key: 'C', data: [...data] });\n cx = data[4];\n cy = data[5];\n break;\n case 'c': {\n const newdata = data.map((d, i) => (i % 2) ? (d + cy) : (d + cx));\n out.push({ key: 'C', data: newdata });\n cx = newdata[4];\n cy = newdata[5];\n break;\n }\n case 'Q':\n out.push({ key: 'Q', data: [...data] });\n cx = data[2];\n cy = data[3];\n break;\n case 'q': {\n const newdata = data.map((d, i) => (i % 2) ? (d + cy) : (d + cx));\n out.push({ key: 'Q', data: newdata });\n cx = newdata[2];\n cy = newdata[3];\n break;\n }\n case 'A':\n out.push({ key: 'A', data: [...data] });\n cx = data[5];\n cy = data[6];\n break;\n case 'a':\n cx += data[5];\n cy += data[6];\n out.push({ key: 'A', data: [data[0], data[1], data[2], data[3], data[4], cx, cy] });\n break;\n case 'H':\n out.push({ key: 'H', data: [...data] });\n cx = data[0];\n break;\n case 'h':\n cx += data[0];\n out.push({ key: 'H', data: [cx] });\n break;\n case 'V':\n out.push({ key: 'V', data: [...data] });\n cy = data[0];\n break;\n case 'v':\n cy += data[0];\n out.push({ key: 'V', data: [cy] });\n break;\n case 'S':\n out.push({ key: 'S', data: [...data] });\n cx = data[2];\n cy = data[3];\n break;\n case 's': {\n const newdata = data.map((d, i) => (i % 2) ? (d + cy) : (d + cx));\n out.push({ key: 'S', data: newdata });\n cx = newdata[2];\n cy = newdata[3];\n break;\n }\n case 'T':\n out.push({ key: 'T', data: [...data] });\n cx = data[0];\n cy = data[1];\n break;\n case 't':\n cx += data[0];\n cy += data[1];\n out.push({ key: 'T', data: [cx, cy] });\n break;\n case 'Z':\n case 'z':\n out.push({ key: 'Z', data: [] });\n cx = subx;\n cy = suby;\n break;\n }\n }\n return out;\n}\n","// Normalize path to include only M, L, C, and Z commands\nexport function normalize(segments) {\n const out = [];\n let lastType = '';\n let cx = 0, cy = 0;\n let subx = 0, suby = 0;\n let lcx = 0, lcy = 0;\n for (const { key, data } of segments) {\n switch (key) {\n case 'M':\n out.push({ key: 'M', data: [...data] });\n [cx, cy] = data;\n [subx, suby] = data;\n break;\n case 'C':\n out.push({ key: 'C', data: [...data] });\n cx = data[4];\n cy = data[5];\n lcx = data[2];\n lcy = data[3];\n break;\n case 'L':\n out.push({ key: 'L', data: [...data] });\n [cx, cy] = data;\n break;\n case 'H':\n cx = data[0];\n out.push({ key: 'L', data: [cx, cy] });\n break;\n case 'V':\n cy = data[0];\n out.push({ key: 'L', data: [cx, cy] });\n break;\n case 'S': {\n let cx1 = 0, cy1 = 0;\n if (lastType === 'C' || lastType === 'S') {\n cx1 = cx + (cx - lcx);\n cy1 = cy + (cy - lcy);\n }\n else {\n cx1 = cx;\n cy1 = cy;\n }\n out.push({ key: 'C', data: [cx1, cy1, ...data] });\n lcx = data[0];\n lcy = data[1];\n cx = data[2];\n cy = data[3];\n break;\n }\n case 'T': {\n const [x, y] = data;\n let x1 = 0, y1 = 0;\n if (lastType === 'Q' || lastType === 'T') {\n x1 = cx + (cx - lcx);\n y1 = cy + (cy - lcy);\n }\n else {\n x1 = cx;\n y1 = cy;\n }\n const cx1 = cx + 2 * (x1 - cx) / 3;\n const cy1 = cy + 2 * (y1 - cy) / 3;\n const cx2 = x + 2 * (x1 - x) / 3;\n const cy2 = y + 2 * (y1 - y) / 3;\n out.push({ key: 'C', data: [cx1, cy1, cx2, cy2, x, y] });\n lcx = x1;\n lcy = y1;\n cx = x;\n cy = y;\n break;\n }\n case 'Q': {\n const [x1, y1, x, y] = data;\n const cx1 = cx + 2 * (x1 - cx) / 3;\n const cy1 = cy + 2 * (y1 - cy) / 3;\n const cx2 = x + 2 * (x1 - x) / 3;\n const cy2 = y + 2 * (y1 - y) / 3;\n out.push({ key: 'C', data: [cx1, cy1, cx2, cy2, x, y] });\n lcx = x1;\n lcy = y1;\n cx = x;\n cy = y;\n break;\n }\n case 'A': {\n const r1 = Math.abs(data[0]);\n const r2 = Math.abs(data[1]);\n const angle = data[2];\n const largeArcFlag = data[3];\n const sweepFlag = data[4];\n const x = data[5];\n const y = data[6];\n if (r1 === 0 || r2 === 0) {\n out.push({ key: 'C', data: [cx, cy, x, y, x, y] });\n cx = x;\n cy = y;\n }\n else {\n if (cx !== x || cy !== y) {\n const curves = arcToCubicCurves(cx, cy, x, y, r1, r2, angle, largeArcFlag, sweepFlag);\n curves.forEach(function (curve) {\n out.push({ key: 'C', data: curve });\n });\n cx = x;\n cy = y;\n }\n }\n break;\n }\n case 'Z':\n out.push({ key: 'Z', data: [] });\n cx = subx;\n cy = suby;\n break;\n }\n lastType = key;\n }\n return out;\n}\nfunction degToRad(degrees) {\n return (Math.PI * degrees) / 180;\n}\nfunction rotate(x, y, angleRad) {\n const X = x * Math.cos(angleRad) - y * Math.sin(angleRad);\n const Y = x * Math.sin(angleRad) + y * Math.cos(angleRad);\n return [X, Y];\n}\nfunction arcToCubicCurves(x1, y1, x2, y2, r1, r2, angle, largeArcFlag, sweepFlag, recursive) {\n const angleRad = degToRad(angle);\n let params = [];\n let f1 = 0, f2 = 0, cx = 0, cy = 0;\n if (recursive) {\n [f1, f2, cx, cy] = recursive;\n }\n else {\n [x1, y1] = rotate(x1, y1, -angleRad);\n [x2, y2] = rotate(x2, y2, -angleRad);\n const x = (x1 - x2) / 2;\n const y = (y1 - y2) / 2;\n let h = (x * x) / (r1 * r1) + (y * y) / (r2 * r2);\n if (h > 1) {\n h = Math.sqrt(h);\n r1 = h * r1;\n r2 = h * r2;\n }\n const sign = (largeArcFlag === sweepFlag) ? -1 : 1;\n const r1Pow = r1 * r1;\n const r2Pow = r2 * r2;\n const left = r1Pow * r2Pow - r1Pow * y * y - r2Pow * x * x;\n const right = r1Pow * y * y + r2Pow * x * x;\n const k = sign * Math.sqrt(Math.abs(left / right));\n cx = k * r1 * y / r2 + (x1 + x2) / 2;\n cy = k * -r2 * x / r1 + (y1 + y2) / 2;\n f1 = Math.asin(parseFloat(((y1 - cy) / r2).toFixed(9)));\n f2 = Math.asin(parseFloat(((y2 - cy) / r2).toFixed(9)));\n if (x1 < cx) {\n f1 = Math.PI - f1;\n }\n if (x2 < cx) {\n f2 = Math.PI - f2;\n }\n if (f1 < 0) {\n f1 = Math.PI * 2 + f1;\n }\n if (f2 < 0) {\n f2 = Math.PI * 2 + f2;\n }\n if (sweepFlag && f1 > f2) {\n f1 = f1 - Math.PI * 2;\n }\n if (!sweepFlag && f2 > f1) {\n f2 = f2 - Math.PI * 2;\n }\n }\n let df = f2 - f1;\n if (Math.abs(df) > (Math.PI * 120 / 180)) {\n const f2old = f2;\n const x2old = x2;\n const y2old = y2;\n if (sweepFlag && f2 > f1) {\n f2 = f1 + (Math.PI * 120 / 180) * (1);\n }\n else {\n f2 = f1 + (Math.PI * 120 / 180) * (-1);\n }\n x2 = cx + r1 * Math.cos(f2);\n y2 = cy + r2 * Math.sin(f2);\n params = arcToCubicCurves(x2, y2, x2old, y2old, r1, r2, angle, 0, sweepFlag, [f2, f2old, cx, cy]);\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 * r1 * t;\n const hy = 4 / 3 * r2 * 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, m3, m4].concat(params);\n }\n else {\n params = [m2, m3, m4].concat(params);\n const curves = [];\n for (let i = 0; i < params.length; i += 3) {\n const r1 = rotate(params[i][0], params[i][1], angleRad);\n const r2 = rotate(params[i + 1][0], params[i + 1][1], angleRad);\n const r3 = rotate(params[i + 2][0], params[i + 2][1], angleRad);\n curves.push([r1[0], r1[1], r2[0], r2[1], r3[0], r3[1]]);\n }\n return curves;\n }\n}\n","import * as pathDataParser from \"path-data-parser\";\n\nconst { parsePath, absolutize } = pathDataParser;\n\nimport { draw, DrawingPen } from \"../draw.js\";\nimport { Vector } from \"../definitions.js\";\n\nconst parseArgs = (\n command: { key: string; data: number[] },\n previousPoint: null | Vector,\n previousControls: {\n control1?: null | Vector;\n control2?: null | Vector;\n },\n):\n | { p: Vector; control1: Vector; control2: Vector }\n | { p: Vector }\n | { p: Vector; arcConfig: [number, number, number, boolean, boolean] } => {\n let p: Vector;\n let control1: null | Vector = null;\n let control2: null | Vector = null;\n\n if (command.key === \"M\") {\n const [x, y] = command.data;\n p = [x, y];\n return { p };\n }\n\n if (command.key === \"H\") {\n const [x] = command.data;\n p = [x, previousPoint?.[1] || 0];\n return { p };\n }\n\n if (command.key === \"V\") {\n const [y] = command.data;\n p = [previousPoint?.[0] || 0, y];\n return { p };\n }\n\n if (command.key === \"L\") {\n const [x, y] = command.data;\n p = [x, y];\n return { p };\n }\n\n if (command.key === \"C\") {\n const [x1, y1, x2, y2, x, y] = command.data;\n p = [x, y];\n control1 = [x1, y1];\n control2 = [x2, y2];\n\n return {\n p,\n control1,\n control2,\n };\n }\n\n if (command.key === \"S\") {\n const [x1, y1, x, y] = command.data;\n p = [x, y];\n control2 = [x1, y1];\n\n if (!previousPoint) {\n throw new Error(\"S command without previous point\");\n }\n\n control1 = previousPoint;\n if (previousControls.control2) {\n const pp = previousPoint;\n control1 = [\n pp[0] + (pp[0] - previousControls.control2[0]),\n pp[1] + (pp[1] - previousControls.control2[1]),\n ];\n }\n\n return {\n p,\n control1,\n control2,\n };\n }\n\n if (command.key === \"Q\") {\n const [x1, y1, x, y] = command.data;\n p = [x, y];\n control1 = [x1, y1];\n\n return {\n p,\n control1,\n };\n }\n\n if (command.key === \"T\") {\n const [x, y] = command.data;\n p = [x, y];\n\n if (!previousPoint) {\n throw new Error(\"T command without previous point\");\n }\n\n control1 = previousPoint;\n if (previousControls.control1 && !previousControls.control2) {\n const pp = previousPoint;\n control1 = [\n pp[0] + (pp[0] - previousControls.control1[0]),\n pp[1] + (pp[1] - previousControls.control1[1]),\n ];\n }\n }\n\n if (command.key === \"A\") {\n const [rx, ry, xAxisRotation = 0, largeArc = 0, sweepFlag = 0, x, y] =\n command.data;\n p = [x, y];\n\n if (!previousPoint) {\n throw new Error(\"A command without previous point\");\n }\n\n // The radius can be defined as smaller than what is needed. We need to fix\n // it in that case.\n const distance = Math.sqrt(\n (previousPoint[0] - x) ** 2 + (previousPoint[1] - y) ** 2,\n );\n const bigRadius = Math.max(rx, ry);\n let a = rx;\n let b = ry;\n\n if (bigRadius < distance / 2) {\n const ratio = distance / 2 / bigRadius;\n a = rx * ratio;\n b = ry * ratio;\n }\n\n return {\n p,\n arcConfig: [a, b, xAxisRotation, !!largeArc, !!sweepFlag],\n };\n }\n\n throw new Error(`Unknown command ${command.key}`);\n};\n\nexport function* drawSVGPathGenerator(SVGPath: string) {\n const commands = absolutize(parsePath(SVGPath));\n\n let pen: null | DrawingPen = null;\n let lastPoint: null | Vector = null;\n let lastControls: {\n control1: null | Vector;\n control2: null | Vector;\n } = { control1: null, control2: null };\n\n for (const command of commands) {\n if (command.key === \"Z\") {\n if (pen) yield pen.close(true);\n pen = null;\n continue;\n }\n\n const args = parseArgs(command, lastPoint, lastControls);\n const p = args.p;\n const control1 = \"control1\" in args ? args.control1 : null;\n const control2 = \"control1\" in args ? args.control2 : null;\n const arcConfig = \"arcConfig\" in args ? args.arcConfig : null;\n\n if (command.key === \"M\") {\n if (pen) {\n yield pen.isClosed ? pen.close() : pen.asStrand();\n }\n\n pen = draw(p);\n lastPoint = p;\n continue;\n }\n\n // We do not draw line of length 0\n if (\n lastPoint &&\n Math.abs(p[0] - lastPoint[0]) < 1e-9 &&\n Math.abs(p[1] - lastPoint[1]) < 1e-9\n ) {\n lastPoint = p;\n lastControls = { control1, control2 };\n continue;\n }\n\n if (command.key === \"L\" || command.key === \"H\" || command.key === \"V\") {\n pen?.lineTo(p);\n }\n\n if (command.key === \"C\" || command.key === \"S\") {\n pen?.cubicBezierCurveTo(p, control1!, control2!);\n }\n\n if (command.key === \"Q\" || command.key === \"T\") {\n pen?.quadraticBezierCurveTo(p, control1!);\n }\n\n if (command.key === \"A\") {\n pen?.ellipseTo(p, ...arcConfig!);\n }\n\n lastPoint = p;\n lastControls = { control1, control2 };\n }\n\n if (pen) yield pen.isClosed ? pen.close() : pen.asStrand();\n}\n\nexport function drawSVGPath(SVGPath: string) {\n return Array.from(drawSVGPathGenerator(SVGPath));\n}\n"],"names":["drawCircle","radius","draw","drawRect","width","height","r","inputRx","inputRy","rx","ry","withRadius","symmetricRadius","sk","addFillet","xDist","yDist","drawEllipse","pen","drawPolysides","sidesCount","sagitta","points","range","i","theta","drawing","point","COMMAND","NUMBER","EOD","PARAMS","tokenize","d","tokens","isType","token","type","parsePath","segments","mode","index","paramsCount","params","numbeToken","segment","serialize","key","data","absolutize","cx","cy","subx","suby","out","newdata","normalize","lastType","lcx","lcy","cx1","cy1","x","y","x1","y1","cx2","cy2","r1","r2","angle","largeArcFlag","sweepFlag","arcToCubicCurves","curve","degToRad","degrees","rotate","angleRad","X","Y","x2","y2","recursive","f1","f2","h","sign","r1Pow","r2Pow","left","right","k","df","f2old","x2old","y2old","c1","s1","c2","s2","t","hx","hy","m1","m2","m3","m4","curves","r3","pathDataParser","parseArgs","command","previousPoint","previousControls","p","control1","control2","pp","xAxisRotation","largeArc","distance","bigRadius","a","ratio","drawSVGPathGenerator","SVGPath","commands","lastPoint","lastControls","args","arcConfig","drawSVGPath"],"mappings":"qKAGO,SAASA,EAAWC,EAAyB,CAClD,OAAOC,EAAAA,KAAK,CAAC,CAACD,EAAQ,CAAC,CAAC,EACrB,WAAW,EAAIA,EAAQ,EAAGA,CAAM,EAChC,WAAW,GAAKA,EAAQ,EAAGA,CAAM,EACjC,MAAM,CACX,CCLO,SAASE,EACdC,EACAC,EACAC,EAA2C,EAClC,CACT,KAAM,CAAE,GAAIC,EAAU,EAAG,GAAIC,EAAU,CAAE,EACvC,OAAOF,GAAM,SAAW,CAAE,GAAIA,EAAG,GAAIA,GAAMA,EAC7C,IAAIG,EAAK,KAAK,IAAIF,GAAWD,GAAK,EAAGF,EAAQ,CAAC,EAC1CM,EAAK,KAAK,IAAIF,GAAWF,GAAK,EAAGD,EAAS,CAAC,EAE/C,MAAMM,EAAaF,GAAMC,EACpBC,IACEF,EAAA,EACAC,EAAA,GAEP,MAAME,EAAkBH,IAAOC,EAEzBG,EAAKX,EAAA,KAAK,CAAC,KAAK,IAAI,EAAG,EAAEE,EAAQ,EAAIK,EAAG,EAAG,CAACJ,EAAS,CAAC,CAAC,EAEvDS,EAAY,CAACC,EAAeC,IAAkB,CAC9CL,IACEC,EAAiBC,EAAG,WAAWE,EAAOC,CAAK,EAE7CH,EAAG,QAAQE,EAAOC,EAAOP,EAAIC,EAAI,EAAG,GAAO,EAAK,EAGtD,EAEI,OAAAD,EAAKL,EAAQ,GACZS,EAAA,MAAMT,EAAQ,EAAIK,CAAE,EAEzBK,EAAUL,EAAIC,CAAE,EACZA,EAAKL,EAAS,GACbQ,EAAA,MAAMR,EAAS,EAAIK,CAAE,EAEhBI,EAAA,CAACL,EAAIC,CAAE,EACbD,EAAKL,EAAQ,GACfS,EAAG,MAAM,EAAET,EAAQ,EAAIK,EAAG,EAElBK,EAAA,CAACL,EAAI,CAACC,CAAE,EACdA,EAAKL,EAAS,GAChBQ,EAAG,MAAM,EAAER,EAAS,EAAIK,EAAG,EAEnBI,EAAAL,EAAI,CAACC,CAAE,EACVG,EAAG,MAAM,CAClB,CC7CgB,SAAAI,EAAYR,EAAYC,EAAqB,CAC3D,MAAMQ,EAAMhB,EAAK,KAAA,CAAC,CAACO,EAAI,CAAC,CAAC,EACzB,OAAAS,EAAI,YAAY,EAAIT,EAAI,EAAGC,CAAE,EAC7BQ,EAAI,YAAY,GAAKT,EAAI,EAAGC,CAAE,EACvBQ,EAAI,MAAM,CACnB,CCLgB,SAAAC,EACdlB,EACAmB,EACAC,EACA,CACA,MAAMC,EAASC,EAAAA,MAAMH,CAAU,EAAE,IAAKI,GAAM,CAC1C,MAAMC,EAAQ,EAAG,KAAK,GAAK,EAAKL,GAAcI,EACvC,MAAA,CAACvB,EAAS,KAAK,IAAIwB,CAAK,EAAGxB,EAAS,KAAK,IAAIwB,CAAK,CAAC,CAAA,CAI3D,EAED,IAAIC,EAAUxB,EAAAA,KAAKoB,EAAOA,EAAO,OAAS,CAAC,CAAC,EAC5C,UAAWK,KAASL,EACdD,EACQK,EAAAA,EAAQ,aAAaC,EAAON,CAAO,EAEnCK,EAAAA,EAAQ,OAAOC,CAAK,EAGlC,OAAOD,EAAQ,MAAM,CACvB,CCzBA,MAAME,EAAU,EACVC,EAAS,EACTC,EAAM,EACNC,EAAS,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAAG,EACzI,SAASC,EAASC,EAAG,CACjB,MAAMC,EAAS,IAAI,MACnB,KAAOD,IAAM,IACT,GAAIA,EAAE,MAAM,gBAAgB,EACxBA,EAAIA,EAAE,OAAO,OAAO,GAAG,MAAM,UAExBA,EAAE,MAAM,2BAA2B,EACxCC,EAAOA,EAAO,MAAM,EAAI,CAAE,KAAMN,EAAS,KAAM,OAAO,EAAI,EAC1DK,EAAIA,EAAE,OAAO,OAAO,GAAG,MAAM,UAExBA,EAAE,MAAM,6DAA6D,EAC1EC,EAAOA,EAAO,MAAM,EAAI,CAAE,KAAML,EAAQ,KAAM,GAAG,WAAW,OAAO,EAAE,CAAC,EAAI,EAC1EI,EAAIA,EAAE,OAAO,OAAO,GAAG,MAAM,MAG7B,OAAO,CAAE,EAGjB,OAAAC,EAAOA,EAAO,MAAM,EAAI,CAAE,KAAMJ,EAAK,KAAM,EAAI,EACxCI,CACX,CACA,SAASC,EAAOC,EAAOC,EAAM,CACzB,OAAOD,EAAM,OAASC,CAC1B,CACO,SAASC,EAAUL,EAAG,CACzB,MAAMM,EAAW,CAAE,EACbL,EAASF,EAASC,CAAC,EACzB,IAAIO,EAAO,MACPC,EAAQ,EACRL,EAAQF,EAAOO,CAAK,EACxB,KAAO,CAACN,EAAOC,EAAON,CAAG,GAAG,CACxB,IAAIY,EAAc,EAClB,MAAMC,EAAS,CAAE,EACjB,GAAIH,IAAS,MACT,GAAIJ,EAAM,OAAS,KAAOA,EAAM,OAAS,IACrCK,IACAC,EAAcX,EAAOK,EAAM,IAAI,EAC/BI,EAAOJ,EAAM,SAGb,QAAOE,EAAU,OAASL,CAAC,OAG1BE,EAAOC,EAAOP,CAAM,EACzBa,EAAcX,EAAOS,CAAI,GAGzBC,IACAC,EAAcX,EAAOK,EAAM,IAAI,EAC/BI,EAAOJ,EAAM,MAEjB,GAAKK,EAAQC,EAAeR,EAAO,OAAQ,CACvC,QAAS,EAAIO,EAAO,EAAIA,EAAQC,EAAa,IAAK,CAC9C,MAAME,EAAaV,EAAO,CAAC,EAC3B,GAAIC,EAAOS,EAAYf,CAAM,EACzBc,EAAOA,EAAO,MAAM,EAAI,CAACC,EAAW,SAGpC,OAAM,IAAI,MAAM,uBAAyBJ,EAAO,IAAMI,EAAW,IAAI,CAEzF,CACY,GAAI,OAAOb,EAAOS,CAAI,GAAM,SAAU,CAClC,MAAMK,EAAU,CAAE,IAAKL,EAAM,KAAMG,CAAQ,EAC3CJ,EAAS,KAAKM,CAAO,EACrBJ,GAASC,EACTN,EAAQF,EAAOO,CAAK,EAChBD,IAAS,MACTA,EAAO,KACPA,IAAS,MACTA,EAAO,IAC3B,KAEgB,OAAM,IAAI,MAAM,gBAAkBA,CAAI,CAEtD,KAEY,OAAM,IAAI,MAAM,uBAAuB,CAEnD,CACI,OAAOD,CACX,CACO,SAASO,EAAUP,EAAU,CAChC,MAAML,EAAS,CAAE,EACjB,SAAW,CAAE,IAAAa,EAAK,KAAAC,CAAI,IAAMT,EAExB,OADAL,EAAO,KAAKa,CAAG,EACPA,EAAG,CACP,IAAK,IACL,IAAK,IACDb,EAAO,KAAKc,EAAK,CAAC,EAAG,GAAGA,EAAK,CAAC,CAAC,IAAKA,EAAK,CAAC,EAAG,GAAGA,EAAK,CAAC,CAAC,IAAKA,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EAC5E,MACJ,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACDd,EAAO,KAAKc,EAAK,CAAC,EAAG,GAAGA,EAAK,CAAC,CAAC,IAAKA,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EACpD,MACJ,QACId,EAAO,KAAK,GAAGc,CAAI,EACnB,KAChB,CAEI,OAAOd,EAAO,KAAK,GAAG,CAC1B,CCzGO,SAASe,EAAWV,EAAU,CACjC,IAAIW,EAAK,EAAGC,EAAK,EACbC,EAAO,EAAGC,EAAO,EACrB,MAAMC,EAAM,CAAE,EACd,SAAW,CAAE,IAAAP,EAAK,KAAAC,CAAI,IAAMT,EACxB,OAAQQ,EAAG,CACP,IAAK,IACDO,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAC,GAAGN,CAAI,EAAG,EACtC,CAACE,EAAIC,CAAE,EAAIH,EACX,CAACI,EAAMC,CAAI,EAAIL,EACf,MACJ,IAAK,IACDE,GAAMF,EAAK,CAAC,EACZG,GAAMH,EAAK,CAAC,EACZM,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAACJ,EAAIC,CAAE,EAAG,EACrCC,EAAOF,EACPG,EAAOF,EACP,MACJ,IAAK,IACDG,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAC,GAAGN,CAAI,EAAG,EACtC,CAACE,EAAIC,CAAE,EAAIH,EACX,MACJ,IAAK,IACDE,GAAMF,EAAK,CAAC,EACZG,GAAMH,EAAK,CAAC,EACZM,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAACJ,EAAIC,CAAE,EAAG,EACrC,MACJ,IAAK,IACDG,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAC,GAAGN,CAAI,EAAG,EACtCE,EAAKF,EAAK,CAAC,EACXG,EAAKH,EAAK,CAAC,EACX,MACJ,IAAK,IAAK,CACN,MAAMO,EAAUP,EAAK,IAAI,CAACf,EAAGT,IAAOA,EAAI,EAAMS,EAAIkB,EAAOlB,EAAIiB,CAAG,EAChEI,EAAI,KAAK,CAAE,IAAK,IAAK,KAAMC,EAAS,EACpCL,EAAKK,EAAQ,CAAC,EACdJ,EAAKI,EAAQ,CAAC,EACd,KAChB,CACY,IAAK,IACDD,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAC,GAAGN,CAAI,EAAG,EACtCE,EAAKF,EAAK,CAAC,EACXG,EAAKH,EAAK,CAAC,EACX,MACJ,IAAK,IAAK,CACN,MAAMO,EAAUP,EAAK,IAAI,CAACf,EAAGT,IAAOA,EAAI,EAAMS,EAAIkB,EAAOlB,EAAIiB,CAAG,EAChEI,EAAI,KAAK,CAAE,IAAK,IAAK,KAAMC,EAAS,EACpCL,EAAKK,EAAQ,CAAC,EACdJ,EAAKI,EAAQ,CAAC,EACd,KAChB,CACY,IAAK,IACDD,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAC,GAAGN,CAAI,EAAG,EACtCE,EAAKF,EAAK,CAAC,EACXG,EAAKH,EAAK,CAAC,EACX,MACJ,IAAK,IACDE,GAAMF,EAAK,CAAC,EACZG,GAAMH,EAAK,CAAC,EACZM,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAACN,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGE,EAAIC,CAAE,EAAG,EAClF,MACJ,IAAK,IACDG,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAC,GAAGN,CAAI,EAAG,EACtCE,EAAKF,EAAK,CAAC,EACX,MACJ,IAAK,IACDE,GAAMF,EAAK,CAAC,EACZM,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAACJ,CAAE,EAAG,EACjC,MACJ,IAAK,IACDI,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAC,GAAGN,CAAI,EAAG,EACtCG,EAAKH,EAAK,CAAC,EACX,MACJ,IAAK,IACDG,GAAMH,EAAK,CAAC,EACZM,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAACH,CAAE,EAAG,EACjC,MACJ,IAAK,IACDG,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAC,GAAGN,CAAI,EAAG,EACtCE,EAAKF,EAAK,CAAC,EACXG,EAAKH,EAAK,CAAC,EACX,MACJ,IAAK,IAAK,CACN,MAAMO,EAAUP,EAAK,IAAI,CAACf,EAAGT,IAAOA,EAAI,EAAMS,EAAIkB,EAAOlB,EAAIiB,CAAG,EAChEI,EAAI,KAAK,CAAE,IAAK,IAAK,KAAMC,EAAS,EACpCL,EAAKK,EAAQ,CAAC,EACdJ,EAAKI,EAAQ,CAAC,EACd,KAChB,CACY,IAAK,IACDD,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAC,GAAGN,CAAI,EAAG,EACtCE,EAAKF,EAAK,CAAC,EACXG,EAAKH,EAAK,CAAC,EACX,MACJ,IAAK,IACDE,GAAMF,EAAK,CAAC,EACZG,GAAMH,EAAK,CAAC,EACZM,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAACJ,EAAIC,CAAE,EAAG,EACrC,MACJ,IAAK,IACL,IAAK,IACDG,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAA,EAAI,EAC/BJ,EAAKE,EACLD,EAAKE,EACL,KAChB,CAEI,OAAOC,CACX,CC5GO,SAASE,GAAUjB,EAAU,CAChC,MAAMe,EAAM,CAAE,EACd,IAAIG,EAAW,GACXP,EAAK,EAAGC,EAAK,EACbC,EAAO,EAAGC,EAAO,EACjBK,EAAM,EAAGC,EAAM,EACnB,SAAW,CAAE,IAAAZ,EAAK,KAAAC,CAAI,IAAMT,EAAU,CAClC,OAAQQ,EAAG,CACP,IAAK,IACDO,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAC,GAAGN,CAAI,EAAG,EACtC,CAACE,EAAIC,CAAE,EAAIH,EACX,CAACI,EAAMC,CAAI,EAAIL,EACf,MACJ,IAAK,IACDM,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAC,GAAGN,CAAI,EAAG,EACtCE,EAAKF,EAAK,CAAC,EACXG,EAAKH,EAAK,CAAC,EACXU,EAAMV,EAAK,CAAC,EACZW,EAAMX,EAAK,CAAC,EACZ,MACJ,IAAK,IACDM,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAC,GAAGN,CAAI,EAAG,EACtC,CAACE,EAAIC,CAAE,EAAIH,EACX,MACJ,IAAK,IACDE,EAAKF,EAAK,CAAC,EACXM,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAACJ,EAAIC,CAAE,EAAG,EACrC,MACJ,IAAK,IACDA,EAAKH,EAAK,CAAC,EACXM,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAACJ,EAAIC,CAAE,EAAG,EACrC,MACJ,IAAK,IAAK,CACN,IAAIS,EAAM,EAAGC,EAAM,EACfJ,IAAa,KAAOA,IAAa,KACjCG,EAAMV,GAAMA,EAAKQ,GACjBG,EAAMV,GAAMA,EAAKQ,KAGjBC,EAAMV,EACNW,EAAMV,GAEVG,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAACM,EAAKC,EAAK,GAAGb,CAAI,EAAG,EAChDU,EAAMV,EAAK,CAAC,EACZW,EAAMX,EAAK,CAAC,EACZE,EAAKF,EAAK,CAAC,EACXG,EAAKH,EAAK,CAAC,EACX,KAChB,CACY,IAAK,IAAK,CACN,KAAM,CAACc,EAAGC,CAAC,EAAIf,EACf,IAAIgB,EAAK,EAAGC,EAAK,EACbR,IAAa,KAAOA,IAAa,KACjCO,EAAKd,GAAMA,EAAKQ,GAChBO,EAAKd,GAAMA,EAAKQ,KAGhBK,EAAKd,EACLe,EAAKd,GAET,MAAMS,EAAMV,EAAK,GAAKc,EAAKd,GAAM,EAC3BW,EAAMV,EAAK,GAAKc,EAAKd,GAAM,EAC3Be,EAAMJ,EAAI,GAAKE,EAAKF,GAAK,EACzBK,EAAMJ,EAAI,GAAKE,EAAKF,GAAK,EAC/BT,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAACM,EAAKC,EAAKK,EAAKC,EAAKL,EAAGC,CAAC,CAAC,CAAE,EACvDL,EAAMM,EACNL,EAAMM,EACNf,EAAKY,EACLX,EAAKY,EACL,KAChB,CACY,IAAK,IAAK,CACN,KAAM,CAACC,EAAIC,EAAIH,EAAG,CAAC,EAAId,EACjBY,EAAMV,EAAK,GAAKc,EAAKd,GAAM,EAC3BW,EAAMV,EAAK,GAAKc,EAAKd,GAAM,EAC3Be,EAAMJ,EAAI,GAAKE,EAAKF,GAAK,EACzBK,EAAM,EAAI,GAAKF,EAAK,GAAK,EAC/BX,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAACM,EAAKC,EAAKK,EAAKC,EAAKL,EAAG,CAAC,CAAC,CAAE,EACvDJ,EAAMM,EACNL,EAAMM,EACNf,EAAKY,EACLX,EAAK,EACL,KAChB,CACY,IAAK,IAAK,CACN,MAAMiB,EAAK,KAAK,IAAIpB,EAAK,CAAC,CAAC,EACrBqB,EAAK,KAAK,IAAIrB,EAAK,CAAC,CAAC,EACrBsB,EAAQtB,EAAK,CAAC,EACduB,EAAevB,EAAK,CAAC,EACrBwB,EAAYxB,EAAK,CAAC,EAClBc,EAAId,EAAK,CAAC,EACVe,EAAIf,EAAK,CAAC,EACZoB,IAAO,GAAKC,IAAO,GACnBf,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAACJ,EAAIC,EAAIW,EAAGC,EAAGD,EAAGC,CAAC,CAAC,CAAE,EACjDb,EAAKY,EACLX,EAAKY,IAGDb,IAAOY,GAAKX,IAAOY,KACJU,EAAiBvB,EAAIC,EAAIW,EAAGC,EAAGK,EAAIC,EAAIC,EAAOC,EAAcC,CAAS,EAC7E,QAAQ,SAAUE,EAAO,CAC5BpB,EAAI,KAAK,CAAE,IAAK,IAAK,KAAMoB,EAAO,CAC9D,CAAyB,EACDxB,EAAKY,EACLX,EAAKY,GAGb,KAChB,CACY,IAAK,IACDT,EAAI,KAAK,CAAE,IAAK,IAAK,KAAM,CAAA,EAAI,EAC/BJ,EAAKE,EACLD,EAAKE,EACL,KAChB,CACQI,EAAWV,CACnB,CACI,OAAOO,CACX,CACA,SAASqB,GAASC,EAAS,CACvB,OAAQ,KAAK,GAAKA,EAAW,GACjC,CACA,SAASC,EAAOf,EAAGC,EAAGe,EAAU,CAC5B,MAAMC,EAAIjB,EAAI,KAAK,IAAIgB,CAAQ,EAAIf,EAAI,KAAK,IAAIe,CAAQ,EAClDE,EAAIlB,EAAI,KAAK,IAAIgB,CAAQ,EAAIf,EAAI,KAAK,IAAIe,CAAQ,EACxD,MAAO,CAACC,EAAGC,CAAC,CAChB,CACA,SAASP,EAAiBT,EAAIC,EAAIgB,EAAIC,EAAId,EAAIC,EAAIC,EAAOC,EAAcC,EAAWW,EAAW,CACzF,MAAML,EAAWH,GAASL,CAAK,EAC/B,IAAI3B,EAAS,CAAE,EACXyC,EAAK,EAAGC,EAAK,EAAGnC,EAAK,EAAGC,EAAK,EACjC,GAAIgC,EACA,CAACC,EAAIC,EAAInC,EAAIC,CAAE,EAAIgC,MAElB,CACD,CAACnB,EAAIC,CAAE,EAAIY,EAAOb,EAAIC,EAAI,CAACa,CAAQ,EACnC,CAACG,EAAIC,CAAE,EAAIL,EAAOI,EAAIC,EAAI,CAACJ,CAAQ,EACnC,MAAMhB,GAAKE,EAAKiB,GAAM,EAChBlB,GAAKE,EAAKiB,GAAM,EACtB,IAAII,EAAKxB,EAAIA,GAAMM,EAAKA,GAAOL,EAAIA,GAAMM,EAAKA,GAC1CiB,EAAI,IACJA,EAAI,KAAK,KAAKA,CAAC,EACflB,EAAKkB,EAAIlB,EACTC,EAAKiB,EAAIjB,GAEb,MAAMkB,EAAQhB,IAAiBC,EAAa,GAAK,EAC3CgB,EAAQpB,EAAKA,EACbqB,EAAQpB,EAAKA,EACbqB,EAAOF,EAAQC,EAAQD,EAAQzB,EAAIA,EAAI0B,EAAQ3B,EAAIA,EACnD6B,EAAQH,EAAQzB,EAAIA,EAAI0B,EAAQ3B,EAAIA,EACpC8B,EAAIL,EAAO,KAAK,KAAK,KAAK,IAAIG,EAAOC,CAAK,CAAC,EACjDzC,EAAK0C,EAAIxB,EAAKL,EAAIM,GAAML,EAAKiB,GAAM,EACnC9B,EAAKyC,EAAI,CAACvB,EAAKP,EAAIM,GAAMH,EAAKiB,GAAM,EACpCE,EAAK,KAAK,KAAK,aAAanB,EAAKd,GAAMkB,GAAI,QAAQ,CAAC,CAAC,CAAC,EACtDgB,EAAK,KAAK,KAAK,aAAaH,EAAK/B,GAAMkB,GAAI,QAAQ,CAAC,CAAC,CAAC,EAClDL,EAAKd,IACLkC,EAAK,KAAK,GAAKA,GAEfH,EAAK/B,IACLmC,EAAK,KAAK,GAAKA,GAEfD,EAAK,IACLA,EAAK,KAAK,GAAK,EAAIA,GAEnBC,EAAK,IACLA,EAAK,KAAK,GAAK,EAAIA,GAEnBb,GAAaY,EAAKC,IAClBD,EAAKA,EAAK,KAAK,GAAK,GAEpB,CAACZ,GAAaa,EAAKD,IACnBC,EAAKA,EAAK,KAAK,GAAK,EAEhC,CACI,IAAIQ,EAAKR,EAAKD,EACd,GAAI,KAAK,IAAIS,CAAE,EAAK,KAAK,GAAK,IAAM,IAAM,CACtC,MAAMC,EAAQT,EACRU,EAAQd,EACRe,EAAQd,EACVV,GAAaa,EAAKD,EAClBC,EAAKD,EAAM,KAAK,GAAK,IAAM,IAAQ,EAGnCC,EAAKD,EAAM,KAAK,GAAK,IAAM,IAAQ,GAEvCH,EAAK/B,EAAKkB,EAAK,KAAK,IAAIiB,CAAE,EAC1BH,EAAK/B,EAAKkB,EAAK,KAAK,IAAIgB,CAAE,EAC1B1C,EAAS8B,EAAiBQ,EAAIC,EAAIa,EAAOC,EAAO5B,EAAIC,EAAIC,EAAO,EAAGE,EAAW,CAACa,EAAIS,EAAO5C,EAAIC,CAAE,CAAC,CACxG,CACI0C,EAAKR,EAAKD,EACV,MAAMa,EAAK,KAAK,IAAIb,CAAE,EAChBc,EAAK,KAAK,IAAId,CAAE,EAChBe,EAAK,KAAK,IAAId,CAAE,EAChBe,EAAK,KAAK,IAAIf,CAAE,EAChBgB,EAAI,KAAK,IAAIR,EAAK,CAAC,EACnBS,EAAK,EAAI,EAAIlC,EAAKiC,EAClBE,EAAK,EAAI,EAAIlC,EAAKgC,EAClBG,EAAK,CAACxC,EAAIC,CAAE,EACZwC,EAAK,CAACzC,EAAKsC,EAAKJ,EAAIjC,EAAKsC,EAAKN,CAAE,EAChCS,EAAK,CAACzB,EAAKqB,EAAKF,EAAIlB,EAAKqB,EAAKJ,CAAE,EAChCQ,EAAK,CAAC1B,EAAIC,CAAE,EAGlB,GAFAuB,EAAG,CAAC,EAAI,EAAID,EAAG,CAAC,EAAIC,EAAG,CAAC,EACxBA,EAAG,CAAC,EAAI,EAAID,EAAG,CAAC,EAAIC,EAAG,CAAC,EACpBtB,EACA,MAAO,CAACsB,EAAIC,EAAIC,CAAE,EAAE,OAAOhE,CAAM,EAEhC,CACDA,EAAS,CAAC8D,EAAIC,EAAIC,CAAE,EAAE,OAAOhE,CAAM,EACnC,MAAMiE,EAAS,CAAE,EACjB,QAASpF,EAAI,EAAGA,EAAImB,EAAO,OAAQnB,GAAK,EAAG,CACvC,MAAM4C,EAAKS,EAAOlC,EAAOnB,CAAC,EAAE,CAAC,EAAGmB,EAAOnB,CAAC,EAAE,CAAC,EAAGsD,CAAQ,EAChDT,EAAKQ,EAAOlC,EAAOnB,EAAI,CAAC,EAAE,CAAC,EAAGmB,EAAOnB,EAAI,CAAC,EAAE,CAAC,EAAGsD,CAAQ,EACxD+B,EAAKhC,EAAOlC,EAAOnB,EAAI,CAAC,EAAE,CAAC,EAAGmB,EAAOnB,EAAI,CAAC,EAAE,CAAC,EAAGsD,CAAQ,EAC9D8B,EAAO,KAAK,CAACxC,EAAG,CAAC,EAAGA,EAAG,CAAC,EAAGC,EAAG,CAAC,EAAGA,EAAG,CAAC,EAAGwC,EAAG,CAAC,EAAGA,EAAG,CAAC,CAAC,CAAC,CAClE,CACQ,OAAOD,CACf,CACA,uJCxNM,CAAE,UAAAtE,GAAW,WAAAW,EAAA,EAAe6D,GAK5BC,GAAY,CAChBC,EACAC,EACAC,IAO0E,CACtE,IAAAC,EACAC,EAA0B,KAC1BC,EAA0B,KAE1B,GAAAL,EAAQ,MAAQ,IAAK,CACvB,KAAM,CAAClD,EAAGC,CAAC,EAAIiD,EAAQ,KACnB,OAAAG,EAAA,CAACrD,EAAGC,CAAC,EACF,CAAE,EAAAoD,CAAE,CAAA,CAGT,GAAAH,EAAQ,MAAQ,IAAK,CACjB,KAAA,CAAClD,CAAC,EAAIkD,EAAQ,KACpB,OAAAG,EAAI,CAACrD,GAAGmD,GAAA,YAAAA,EAAgB,KAAM,CAAC,EACxB,CAAE,EAAAE,CAAE,CAAA,CAGT,GAAAH,EAAQ,MAAQ,IAAK,CACjB,KAAA,CAACjD,CAAC,EAAIiD,EAAQ,KACpB,OAAAG,EAAI,EAACF,GAAA,YAAAA,EAAgB,KAAM,EAAGlD,CAAC,EACxB,CAAE,EAAAoD,CAAE,CAAA,CAGT,GAAAH,EAAQ,MAAQ,IAAK,CACvB,KAAM,CAAClD,EAAGC,CAAC,EAAIiD,EAAQ,KACnB,OAAAG,EAAA,CAACrD,EAAGC,CAAC,EACF,CAAE,EAAAoD,CAAE,CAAA,CAGT,GAAAH,EAAQ,MAAQ,IAAK,CACjB,KAAA,CAAChD,EAAIC,EAAIgB,EAAIC,EAAIpB,EAAGC,CAAC,EAAIiD,EAAQ,KACnC,OAAAG,EAAA,CAACrD,EAAGC,CAAC,EACEqD,EAAA,CAACpD,EAAIC,CAAE,EACPoD,EAAA,CAACpC,EAAIC,CAAE,EAEX,CACL,EAAAiC,EACA,SAAAC,EACA,SAAAC,CACF,CAAA,CAGE,GAAAL,EAAQ,MAAQ,IAAK,CACvB,KAAM,CAAChD,EAAIC,EAAIH,EAAGC,CAAC,EAAIiD,EAAQ,KAI/B,GAHIG,EAAA,CAACrD,EAAGC,CAAC,EACEsD,EAAA,CAACrD,EAAIC,CAAE,EAEd,CAACgD,EACG,MAAA,IAAI,MAAM,kCAAkC,EAIpD,GADWG,EAAAH,EACPC,EAAiB,SAAU,CAC7B,MAAMI,EAAKL,EACAG,EAAA,CACTE,EAAG,CAAC,GAAKA,EAAG,CAAC,EAAIJ,EAAiB,SAAS,CAAC,GAC5CI,EAAG,CAAC,GAAKA,EAAG,CAAC,EAAIJ,EAAiB,SAAS,CAAC,EAC9C,CAAA,CAGK,MAAA,CACL,EAAAC,EACA,SAAAC,EACA,SAAAC,CACF,CAAA,CAGE,GAAAL,EAAQ,MAAQ,IAAK,CACvB,KAAM,CAAChD,EAAIC,EAAIH,EAAGC,CAAC,EAAIiD,EAAQ,KAC3B,OAAAG,EAAA,CAACrD,EAAGC,CAAC,EACEqD,EAAA,CAACpD,EAAIC,CAAE,EAEX,CACL,EAAAkD,EACA,SAAAC,CACF,CAAA,CAGE,GAAAJ,EAAQ,MAAQ,IAAK,CACvB,KAAM,CAAClD,EAAGC,CAAC,EAAIiD,EAAQ,KAGvB,GAFIG,EAAA,CAACrD,EAAGC,CAAC,EAEL,CAACkD,EACG,MAAA,IAAI,MAAM,kCAAkC,EAIpD,GADWG,EAAAH,EACPC,EAAiB,UAAY,CAACA,EAAiB,SAAU,CAC3D,MAAMI,EAAKL,EACAG,EAAA,CACTE,EAAG,CAAC,GAAKA,EAAG,CAAC,EAAIJ,EAAiB,SAAS,CAAC,GAC5CI,EAAG,CAAC,GAAKA,EAAG,CAAC,EAAIJ,EAAiB,SAAS,CAAC,EAC9C,CAAA,CACF,CAGE,GAAAF,EAAQ,MAAQ,IAAK,CACvB,KAAM,CAACvG,EAAIC,EAAI6G,EAAgB,EAAGC,EAAW,EAAGhD,EAAY,EAAGV,EAAGC,CAAC,EACjEiD,EAAQ,KAGV,GAFIG,EAAA,CAACrD,EAAGC,CAAC,EAEL,CAACkD,EACG,MAAA,IAAI,MAAM,kCAAkC,EAKpD,MAAMQ,EAAW,KAAK,MACnBR,EAAc,CAAC,EAAInD,IAAM,GAAKmD,EAAc,CAAC,EAAIlD,IAAM,CAC1D,EACM2D,EAAY,KAAK,IAAIjH,EAAIC,CAAE,EACjC,IAAIiH,EAAIlH,EACJ,EAAIC,EAEJ,GAAAgH,EAAYD,EAAW,EAAG,CACtB,MAAAG,EAAQH,EAAW,EAAIC,EAC7BC,EAAIlH,EAAKmH,EACT,EAAIlH,EAAKkH,CAAA,CAGJ,MAAA,CACL,EAAAT,EACA,UAAW,CAACQ,EAAG,EAAGJ,EAAe,CAAC,CAACC,EAAU,CAAC,CAAChD,CAAS,CAC1D,CAAA,CAGF,MAAM,IAAI,MAAM,mBAAmBwC,EAAQ,GAAG,EAAE,CAClD,EAEO,SAAUa,GAAqBC,EAAiB,CACrD,MAAMC,EAAW9E,GAAWX,GAAUwF,CAAO,CAAC,EAE9C,IAAI5G,EAAyB,KACzB8G,EAA2B,KAC3BC,EAGA,CAAE,SAAU,KAAM,SAAU,IAAK,EAErC,UAAWjB,KAAWe,EAAU,CAC1B,GAAAf,EAAQ,MAAQ,IAAK,CACnB9F,IAAK,MAAMA,EAAI,MAAM,EAAI,GACvBA,EAAA,KACN,QAAA,CAGF,MAAMgH,EAAOnB,GAAUC,EAASgB,EAAWC,CAAY,EACjDd,EAAIe,EAAK,EACTd,EAAW,aAAcc,EAAOA,EAAK,SAAW,KAChDb,EAAW,aAAca,EAAOA,EAAK,SAAW,KAChDC,EAAY,cAAeD,EAAOA,EAAK,UAAY,KAErD,GAAAlB,EAAQ,MAAQ,IAAK,CACnB9F,IACF,MAAMA,EAAI,SAAWA,EAAI,MAAM,EAAIA,EAAI,SAAS,GAGlDA,EAAMhB,OAAKiH,CAAC,EACAa,EAAAb,EACZ,QAAA,CAKA,GAAAa,GACA,KAAK,IAAIb,EAAE,CAAC,EAAIa,EAAU,CAAC,CAAC,EAAI,MAChC,KAAK,IAAIb,EAAE,CAAC,EAAIa,EAAU,CAAC,CAAC,EAAI,KAChC,CACYA,EAAAb,EACGc,EAAA,CAAE,SAAAb,EAAU,SAAAC,CAAS,EACpC,QAAA,EAGEL,EAAQ,MAAQ,KAAOA,EAAQ,MAAQ,KAAOA,EAAQ,MAAQ,OAChE9F,GAAA,MAAAA,EAAK,OAAOiG,KAGVH,EAAQ,MAAQ,KAAOA,EAAQ,MAAQ,OACpC9F,GAAA,MAAAA,EAAA,mBAAmBiG,EAAGC,EAAWC,KAGpCL,EAAQ,MAAQ,KAAOA,EAAQ,MAAQ,OACpC9F,GAAA,MAAAA,EAAA,uBAAuBiG,EAAGC,IAG7BJ,EAAQ,MAAQ,MACb9F,GAAA,MAAAA,EAAA,UAAUiG,EAAG,GAAGgB,IAGXH,EAAAb,EACGc,EAAA,CAAE,SAAAb,EAAU,SAAAC,CAAS,CAAA,CAGlCnG,UAAWA,EAAI,SAAWA,EAAI,MAAM,EAAIA,EAAI,SAAS,EAC3D,CAEO,SAASkH,GAAYN,EAAiB,CAC3C,OAAO,MAAM,KAAKD,GAAqBC,CAAO,CAAC,CACjD","x_google_ignoreList":[4,5,6]}
|
|
@@ -1,19 +1,379 @@
|
|
|
1
|
-
import { d as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { d as E } from "../draw-BJW5kfm9.js";
|
|
2
|
+
import { r as G } from "../QuadraticBezier-B2g_Iyyl.js";
|
|
3
|
+
function ct(c) {
|
|
4
|
+
return E([-c, 0]).sagittaArc(2 * c, 0, c).sagittaArc(-2 * c, 0, c).close();
|
|
5
|
+
}
|
|
6
|
+
function ot(c, e, t = 0) {
|
|
7
|
+
const { rx: a = 0, ry: o = 0 } = typeof t == "number" ? { ry: t, rx: t } : t;
|
|
8
|
+
let n = Math.min(a ?? t ?? 0, c / 2), r = Math.min(o ?? t ?? 0, e / 2);
|
|
9
|
+
const s = n && r;
|
|
10
|
+
s || (n = 0, r = 0);
|
|
11
|
+
const h = n === r, f = E([Math.min(0, -(c / 2 - n)), -e / 2]), l = (k, i) => {
|
|
12
|
+
s && (h ? f.tangentArc(k, i) : f.ellipse(k, i, n, r, 0, !1, !1));
|
|
12
13
|
};
|
|
13
|
-
return n <
|
|
14
|
+
return n < c / 2 && f.hLine(c - 2 * n), l(n, r), r < e / 2 && f.vLine(e - 2 * r), l(-n, r), n < c / 2 && f.hLine(-(c - 2 * n)), l(-n, -r), r < e / 2 && f.vLine(-(e - 2 * r)), l(n, -r), f.close();
|
|
15
|
+
}
|
|
16
|
+
function rt(c, e) {
|
|
17
|
+
const t = E([-c, 0]);
|
|
18
|
+
return t.halfEllipse(2 * c, 0, e), t.halfEllipse(-2 * c, 0, e), t.close();
|
|
19
|
+
}
|
|
20
|
+
function lt(c, e, t) {
|
|
21
|
+
const a = G(e).map((n) => {
|
|
22
|
+
const r = -(Math.PI * 2 / e) * n;
|
|
23
|
+
return [c * Math.sin(r), c * Math.cos(r)];
|
|
24
|
+
});
|
|
25
|
+
let o = E(a[a.length - 1]);
|
|
26
|
+
for (const n of a)
|
|
27
|
+
t ? o = o.sagittaArcTo(n, t) : o = o.lineTo(n);
|
|
28
|
+
return o.close();
|
|
29
|
+
}
|
|
30
|
+
const N = 0, $ = 1, B = 2, m = { A: 7, a: 7, C: 6, c: 6, H: 1, h: 1, L: 2, l: 2, M: 2, m: 2, Q: 4, q: 4, S: 4, s: 4, T: 2, t: 2, V: 1, v: 1, Z: 0, z: 0 };
|
|
31
|
+
function U(c) {
|
|
32
|
+
const e = new Array();
|
|
33
|
+
for (; c !== ""; )
|
|
34
|
+
if (c.match(/^([ \t\r\n,]+)/))
|
|
35
|
+
c = c.substr(RegExp.$1.length);
|
|
36
|
+
else if (c.match(/^([aAcChHlLmMqQsStTvVzZ])/))
|
|
37
|
+
e[e.length] = { type: N, text: RegExp.$1 }, c = c.substr(RegExp.$1.length);
|
|
38
|
+
else if (c.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))
|
|
39
|
+
e[e.length] = { type: $, text: `${parseFloat(RegExp.$1)}` }, c = c.substr(RegExp.$1.length);
|
|
40
|
+
else
|
|
41
|
+
return [];
|
|
42
|
+
return e[e.length] = { type: B, text: "" }, e;
|
|
43
|
+
}
|
|
44
|
+
function z(c, e) {
|
|
45
|
+
return c.type === e;
|
|
46
|
+
}
|
|
47
|
+
function O(c) {
|
|
48
|
+
const e = [], t = U(c);
|
|
49
|
+
let a = "BOD", o = 0, n = t[o];
|
|
50
|
+
for (; !z(n, B); ) {
|
|
51
|
+
let r = 0;
|
|
52
|
+
const s = [];
|
|
53
|
+
if (a === "BOD")
|
|
54
|
+
if (n.text === "M" || n.text === "m")
|
|
55
|
+
o++, r = m[n.text], a = n.text;
|
|
56
|
+
else
|
|
57
|
+
return O("M0,0" + c);
|
|
58
|
+
else z(n, $) ? r = m[a] : (o++, r = m[n.text], a = n.text);
|
|
59
|
+
if (o + r < t.length) {
|
|
60
|
+
for (let h = o; h < o + r; h++) {
|
|
61
|
+
const f = t[h];
|
|
62
|
+
if (z(f, $))
|
|
63
|
+
s[s.length] = +f.text;
|
|
64
|
+
else
|
|
65
|
+
throw new Error("Param not a number: " + a + "," + f.text);
|
|
66
|
+
}
|
|
67
|
+
if (typeof m[a] == "number") {
|
|
68
|
+
const h = { key: a, data: s };
|
|
69
|
+
e.push(h), o += r, n = t[o], a === "M" && (a = "L"), a === "m" && (a = "l");
|
|
70
|
+
} else
|
|
71
|
+
throw new Error("Bad segment: " + a);
|
|
72
|
+
} else
|
|
73
|
+
throw new Error("Path data ended short");
|
|
74
|
+
}
|
|
75
|
+
return e;
|
|
76
|
+
}
|
|
77
|
+
function X(c) {
|
|
78
|
+
const e = [];
|
|
79
|
+
for (const { key: t, data: a } of c)
|
|
80
|
+
switch (e.push(t), t) {
|
|
81
|
+
case "C":
|
|
82
|
+
case "c":
|
|
83
|
+
e.push(a[0], `${a[1]},`, a[2], `${a[3]},`, a[4], a[5]);
|
|
84
|
+
break;
|
|
85
|
+
case "S":
|
|
86
|
+
case "s":
|
|
87
|
+
case "Q":
|
|
88
|
+
case "q":
|
|
89
|
+
e.push(a[0], `${a[1]},`, a[2], a[3]);
|
|
90
|
+
break;
|
|
91
|
+
default:
|
|
92
|
+
e.push(...a);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
return e.join(" ");
|
|
96
|
+
}
|
|
97
|
+
function Y(c) {
|
|
98
|
+
let e = 0, t = 0, a = 0, o = 0;
|
|
99
|
+
const n = [];
|
|
100
|
+
for (const { key: r, data: s } of c)
|
|
101
|
+
switch (r) {
|
|
102
|
+
case "M":
|
|
103
|
+
n.push({ key: "M", data: [...s] }), [e, t] = s, [a, o] = s;
|
|
104
|
+
break;
|
|
105
|
+
case "m":
|
|
106
|
+
e += s[0], t += s[1], n.push({ key: "M", data: [e, t] }), a = e, o = t;
|
|
107
|
+
break;
|
|
108
|
+
case "L":
|
|
109
|
+
n.push({ key: "L", data: [...s] }), [e, t] = s;
|
|
110
|
+
break;
|
|
111
|
+
case "l":
|
|
112
|
+
e += s[0], t += s[1], n.push({ key: "L", data: [e, t] });
|
|
113
|
+
break;
|
|
114
|
+
case "C":
|
|
115
|
+
n.push({ key: "C", data: [...s] }), e = s[4], t = s[5];
|
|
116
|
+
break;
|
|
117
|
+
case "c": {
|
|
118
|
+
const h = s.map((f, l) => l % 2 ? f + t : f + e);
|
|
119
|
+
n.push({ key: "C", data: h }), e = h[4], t = h[5];
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case "Q":
|
|
123
|
+
n.push({ key: "Q", data: [...s] }), e = s[2], t = s[3];
|
|
124
|
+
break;
|
|
125
|
+
case "q": {
|
|
126
|
+
const h = s.map((f, l) => l % 2 ? f + t : f + e);
|
|
127
|
+
n.push({ key: "Q", data: h }), e = h[2], t = h[3];
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
case "A":
|
|
131
|
+
n.push({ key: "A", data: [...s] }), e = s[5], t = s[6];
|
|
132
|
+
break;
|
|
133
|
+
case "a":
|
|
134
|
+
e += s[5], t += s[6], n.push({ key: "A", data: [s[0], s[1], s[2], s[3], s[4], e, t] });
|
|
135
|
+
break;
|
|
136
|
+
case "H":
|
|
137
|
+
n.push({ key: "H", data: [...s] }), e = s[0];
|
|
138
|
+
break;
|
|
139
|
+
case "h":
|
|
140
|
+
e += s[0], n.push({ key: "H", data: [e] });
|
|
141
|
+
break;
|
|
142
|
+
case "V":
|
|
143
|
+
n.push({ key: "V", data: [...s] }), t = s[0];
|
|
144
|
+
break;
|
|
145
|
+
case "v":
|
|
146
|
+
t += s[0], n.push({ key: "V", data: [t] });
|
|
147
|
+
break;
|
|
148
|
+
case "S":
|
|
149
|
+
n.push({ key: "S", data: [...s] }), e = s[2], t = s[3];
|
|
150
|
+
break;
|
|
151
|
+
case "s": {
|
|
152
|
+
const h = s.map((f, l) => l % 2 ? f + t : f + e);
|
|
153
|
+
n.push({ key: "S", data: h }), e = h[2], t = h[3];
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case "T":
|
|
157
|
+
n.push({ key: "T", data: [...s] }), e = s[0], t = s[1];
|
|
158
|
+
break;
|
|
159
|
+
case "t":
|
|
160
|
+
e += s[0], t += s[1], n.push({ key: "T", data: [e, t] });
|
|
161
|
+
break;
|
|
162
|
+
case "Z":
|
|
163
|
+
case "z":
|
|
164
|
+
n.push({ key: "Z", data: [] }), e = a, t = o;
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
return n;
|
|
168
|
+
}
|
|
169
|
+
function J(c) {
|
|
170
|
+
const e = [];
|
|
171
|
+
let t = "", a = 0, o = 0, n = 0, r = 0, s = 0, h = 0;
|
|
172
|
+
for (const { key: f, data: l } of c) {
|
|
173
|
+
switch (f) {
|
|
174
|
+
case "M":
|
|
175
|
+
e.push({ key: "M", data: [...l] }), [a, o] = l, [n, r] = l;
|
|
176
|
+
break;
|
|
177
|
+
case "C":
|
|
178
|
+
e.push({ key: "C", data: [...l] }), a = l[4], o = l[5], s = l[2], h = l[3];
|
|
179
|
+
break;
|
|
180
|
+
case "L":
|
|
181
|
+
e.push({ key: "L", data: [...l] }), [a, o] = l;
|
|
182
|
+
break;
|
|
183
|
+
case "H":
|
|
184
|
+
a = l[0], e.push({ key: "L", data: [a, o] });
|
|
185
|
+
break;
|
|
186
|
+
case "V":
|
|
187
|
+
o = l[0], e.push({ key: "L", data: [a, o] });
|
|
188
|
+
break;
|
|
189
|
+
case "S": {
|
|
190
|
+
let k = 0, i = 0;
|
|
191
|
+
t === "C" || t === "S" ? (k = a + (a - s), i = o + (o - h)) : (k = a, i = o), e.push({ key: "C", data: [k, i, ...l] }), s = l[0], h = l[1], a = l[2], o = l[3];
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
case "T": {
|
|
195
|
+
const [k, i] = l;
|
|
196
|
+
let u = 0, y = 0;
|
|
197
|
+
t === "Q" || t === "T" ? (u = a + (a - s), y = o + (o - h)) : (u = a, y = o);
|
|
198
|
+
const M = a + 2 * (u - a) / 3, p = o + 2 * (y - o) / 3, d = k + 2 * (u - k) / 3, g = i + 2 * (y - i) / 3;
|
|
199
|
+
e.push({ key: "C", data: [M, p, d, g, k, i] }), s = u, h = y, a = k, o = i;
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
case "Q": {
|
|
203
|
+
const [k, i, u, y] = l, M = a + 2 * (k - a) / 3, p = o + 2 * (i - o) / 3, d = u + 2 * (k - u) / 3, g = y + 2 * (i - y) / 3;
|
|
204
|
+
e.push({ key: "C", data: [M, p, d, g, u, y] }), s = k, h = i, a = u, o = y;
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
case "A": {
|
|
208
|
+
const k = Math.abs(l[0]), i = Math.abs(l[1]), u = l[2], y = l[3], M = l[4], p = l[5], d = l[6];
|
|
209
|
+
k === 0 || i === 0 ? (e.push({ key: "C", data: [a, o, p, d, p, d] }), a = p, o = d) : (a !== p || o !== d) && (F(a, o, p, d, k, i, u, y, M).forEach(function(L) {
|
|
210
|
+
e.push({ key: "C", data: L });
|
|
211
|
+
}), a = p, o = d);
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
case "Z":
|
|
215
|
+
e.push({ key: "Z", data: [] }), a = n, o = r;
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
t = f;
|
|
219
|
+
}
|
|
220
|
+
return e;
|
|
221
|
+
}
|
|
222
|
+
function K(c) {
|
|
223
|
+
return Math.PI * c / 180;
|
|
224
|
+
}
|
|
225
|
+
function T(c, e, t) {
|
|
226
|
+
const a = c * Math.cos(t) - e * Math.sin(t), o = c * Math.sin(t) + e * Math.cos(t);
|
|
227
|
+
return [a, o];
|
|
228
|
+
}
|
|
229
|
+
function F(c, e, t, a, o, n, r, s, h, f) {
|
|
230
|
+
const l = K(r);
|
|
231
|
+
let k = [], i = 0, u = 0, y = 0, M = 0;
|
|
232
|
+
if (f)
|
|
233
|
+
[i, u, y, M] = f;
|
|
234
|
+
else {
|
|
235
|
+
[c, e] = T(c, e, -l), [t, a] = T(t, a, -l);
|
|
236
|
+
const x = (c - t) / 2, b = (e - a) / 2;
|
|
237
|
+
let w = x * x / (o * o) + b * b / (n * n);
|
|
238
|
+
w > 1 && (w = Math.sqrt(w), o = w * o, n = w * n);
|
|
239
|
+
const S = s === h ? -1 : 1, A = o * o, R = n * n, j = A * R - A * b * b - R * x * x, D = A * b * b + R * x * x, Z = S * Math.sqrt(Math.abs(j / D));
|
|
240
|
+
y = Z * o * b / n + (c + t) / 2, M = Z * -n * x / o + (e + a) / 2, i = Math.asin(parseFloat(((e - M) / n).toFixed(9))), u = Math.asin(parseFloat(((a - M) / n).toFixed(9))), c < y && (i = Math.PI - i), t < y && (u = Math.PI - u), i < 0 && (i = Math.PI * 2 + i), u < 0 && (u = Math.PI * 2 + u), h && i > u && (i = i - Math.PI * 2), !h && u > i && (u = u - Math.PI * 2);
|
|
241
|
+
}
|
|
242
|
+
let p = u - i;
|
|
243
|
+
if (Math.abs(p) > Math.PI * 120 / 180) {
|
|
244
|
+
const x = u, b = t, w = a;
|
|
245
|
+
h && u > i ? u = i + Math.PI * 120 / 180 * 1 : u = i + Math.PI * 120 / 180 * -1, t = y + o * Math.cos(u), a = M + n * Math.sin(u), k = F(t, a, b, w, o, n, r, 0, h, [u, x, y, M]);
|
|
246
|
+
}
|
|
247
|
+
p = u - i;
|
|
248
|
+
const d = Math.cos(i), g = Math.sin(i), L = Math.cos(u), _ = Math.sin(u), I = Math.tan(p / 4), Q = 4 / 3 * o * I, V = 4 / 3 * n * I, q = [c, e], C = [c + Q * g, e - V * d], H = [t + Q * _, a - V * L], P = [t, a];
|
|
249
|
+
if (C[0] = 2 * q[0] - C[0], C[1] = 2 * q[1] - C[1], f)
|
|
250
|
+
return [C, H, P].concat(k);
|
|
251
|
+
{
|
|
252
|
+
k = [C, H, P].concat(k);
|
|
253
|
+
const x = [];
|
|
254
|
+
for (let b = 0; b < k.length; b += 3) {
|
|
255
|
+
const w = T(k[b][0], k[b][1], l), S = T(k[b + 1][0], k[b + 1][1], l), A = T(k[b + 2][0], k[b + 2][1], l);
|
|
256
|
+
x.push([w[0], w[1], S[0], S[1], A[0], A[1]]);
|
|
257
|
+
}
|
|
258
|
+
return x;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
const W = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
262
|
+
__proto__: null,
|
|
263
|
+
absolutize: Y,
|
|
264
|
+
normalize: J,
|
|
265
|
+
parsePath: O,
|
|
266
|
+
serialize: X
|
|
267
|
+
}, Symbol.toStringTag, { value: "Module" })), { parsePath: v, absolutize: tt } = W, et = (c, e, t) => {
|
|
268
|
+
let a, o = null, n = null;
|
|
269
|
+
if (c.key === "M") {
|
|
270
|
+
const [r, s] = c.data;
|
|
271
|
+
return a = [r, s], { p: a };
|
|
272
|
+
}
|
|
273
|
+
if (c.key === "H") {
|
|
274
|
+
const [r] = c.data;
|
|
275
|
+
return a = [r, (e == null ? void 0 : e[1]) || 0], { p: a };
|
|
276
|
+
}
|
|
277
|
+
if (c.key === "V") {
|
|
278
|
+
const [r] = c.data;
|
|
279
|
+
return a = [(e == null ? void 0 : e[0]) || 0, r], { p: a };
|
|
280
|
+
}
|
|
281
|
+
if (c.key === "L") {
|
|
282
|
+
const [r, s] = c.data;
|
|
283
|
+
return a = [r, s], { p: a };
|
|
284
|
+
}
|
|
285
|
+
if (c.key === "C") {
|
|
286
|
+
const [r, s, h, f, l, k] = c.data;
|
|
287
|
+
return a = [l, k], o = [r, s], n = [h, f], {
|
|
288
|
+
p: a,
|
|
289
|
+
control1: o,
|
|
290
|
+
control2: n
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
if (c.key === "S") {
|
|
294
|
+
const [r, s, h, f] = c.data;
|
|
295
|
+
if (a = [h, f], n = [r, s], !e)
|
|
296
|
+
throw new Error("S command without previous point");
|
|
297
|
+
if (o = e, t.control2) {
|
|
298
|
+
const l = e;
|
|
299
|
+
o = [
|
|
300
|
+
l[0] + (l[0] - t.control2[0]),
|
|
301
|
+
l[1] + (l[1] - t.control2[1])
|
|
302
|
+
];
|
|
303
|
+
}
|
|
304
|
+
return {
|
|
305
|
+
p: a,
|
|
306
|
+
control1: o,
|
|
307
|
+
control2: n
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
if (c.key === "Q") {
|
|
311
|
+
const [r, s, h, f] = c.data;
|
|
312
|
+
return a = [h, f], o = [r, s], {
|
|
313
|
+
p: a,
|
|
314
|
+
control1: o
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
if (c.key === "T") {
|
|
318
|
+
const [r, s] = c.data;
|
|
319
|
+
if (a = [r, s], !e)
|
|
320
|
+
throw new Error("T command without previous point");
|
|
321
|
+
if (o = e, t.control1 && !t.control2) {
|
|
322
|
+
const h = e;
|
|
323
|
+
o = [
|
|
324
|
+
h[0] + (h[0] - t.control1[0]),
|
|
325
|
+
h[1] + (h[1] - t.control1[1])
|
|
326
|
+
];
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
if (c.key === "A") {
|
|
330
|
+
const [r, s, h = 0, f = 0, l = 0, k, i] = c.data;
|
|
331
|
+
if (a = [k, i], !e)
|
|
332
|
+
throw new Error("A command without previous point");
|
|
333
|
+
const u = Math.sqrt(
|
|
334
|
+
(e[0] - k) ** 2 + (e[1] - i) ** 2
|
|
335
|
+
), y = Math.max(r, s);
|
|
336
|
+
let M = r, p = s;
|
|
337
|
+
if (y < u / 2) {
|
|
338
|
+
const d = u / 2 / y;
|
|
339
|
+
M = r * d, p = s * d;
|
|
340
|
+
}
|
|
341
|
+
return {
|
|
342
|
+
p: a,
|
|
343
|
+
arcConfig: [M, p, h, !!f, !!l]
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
throw new Error(`Unknown command ${c.key}`);
|
|
347
|
+
};
|
|
348
|
+
function* at(c) {
|
|
349
|
+
const e = tt(v(c));
|
|
350
|
+
let t = null, a = null, o = { control1: null, control2: null };
|
|
351
|
+
for (const n of e) {
|
|
352
|
+
if (n.key === "Z") {
|
|
353
|
+
t && (yield t.close(!0)), t = null;
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
const r = et(n, a, o), s = r.p, h = "control1" in r ? r.control1 : null, f = "control1" in r ? r.control2 : null, l = "arcConfig" in r ? r.arcConfig : null;
|
|
357
|
+
if (n.key === "M") {
|
|
358
|
+
t && (yield t.isClosed ? t.close() : t.asStrand()), t = E(s), a = s;
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
if (a && Math.abs(s[0] - a[0]) < 1e-9 && Math.abs(s[1] - a[1]) < 1e-9) {
|
|
362
|
+
a = s, o = { control1: h, control2: f };
|
|
363
|
+
continue;
|
|
364
|
+
}
|
|
365
|
+
(n.key === "L" || n.key === "H" || n.key === "V") && (t == null || t.lineTo(s)), (n.key === "C" || n.key === "S") && (t == null || t.cubicBezierCurveTo(s, h, f)), (n.key === "Q" || n.key === "T") && (t == null || t.quadraticBezierCurveTo(s, h)), n.key === "A" && (t == null || t.ellipseTo(s, ...l)), a = s, o = { control1: h, control2: f };
|
|
366
|
+
}
|
|
367
|
+
t && (yield t.isClosed ? t.close() : t.asStrand());
|
|
368
|
+
}
|
|
369
|
+
function ht(c) {
|
|
370
|
+
return Array.from(at(c));
|
|
14
371
|
}
|
|
15
372
|
export {
|
|
16
|
-
|
|
17
|
-
|
|
373
|
+
ct as drawCircle,
|
|
374
|
+
rt as drawEllipse,
|
|
375
|
+
lt as drawPolysides,
|
|
376
|
+
ot as drawRect,
|
|
377
|
+
ht as drawSVGPath
|
|
18
378
|
};
|
|
19
379
|
//# sourceMappingURL=drawShape.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawShape.js","sources":["../../src/drawShape/drawCircle.ts","../../src/drawShape/drawRect.ts"],"sourcesContent":["import { draw } from \"../draw.js\";\nimport type { Diagram } from \"../models/Diagram.js\";\n\nexport function drawCircle(radius: number): Diagram {\n return draw([-radius, 0])\n .sagittaArc(2 * radius, 0, radius)\n .sagittaArc(-2 * radius, 0, radius)\n .close();\n}\n","import { draw } from \"../draw.js\";\nimport type { Diagram } from \"../models/Diagram.js\";\n\nexport function drawRect(\n width: number,\n height: number,\n r: number | { rx?: number; ry?: number } = 0,\n): Diagram {\n const { rx: inputRx = 0, ry: inputRy = 0 } =\n typeof r === \"number\" ? { ry: r, rx: r } : r;\n let rx = Math.min(inputRx ?? r ?? 0, width / 2);\n let ry = Math.min(inputRy ?? r ?? 0, height / 2);\n\n const withRadius = rx && ry;\n if (!withRadius) {\n rx = 0;\n ry = 0;\n }\n const symmetricRadius = rx === ry;\n\n const sk = draw([Math.min(0, -(width / 2 - rx)), -height / 2]);\n\n const addFillet = (xDist: number, yDist: number) => {\n if (withRadius) {\n if (symmetricRadius) sk.tangentArc(xDist, yDist);\n else {\n sk.ellipse(xDist, yDist, rx, ry, 0, false, false);\n }\n }\n };\n\n if (rx < width / 2) {\n sk.hLine(width - 2 * rx);\n }\n addFillet(rx, ry);\n if (ry < height / 2) {\n sk.vLine(height - 2 * ry);\n }\n addFillet(-rx, ry);\n if (rx < width / 2) {\n sk.hLine(-(width - 2 * rx));\n }\n addFillet(-rx, -ry);\n if (ry < height / 2) {\n sk.vLine(-(height - 2 * ry));\n }\n addFillet(rx, -ry);\n return sk.close();\n}\n"],"names":["drawCircle","radius","draw","drawRect","width","height","r","inputRx","inputRy","rx","ry","withRadius","symmetricRadius","sk","addFillet","xDist","yDist"],"mappings":";AAGO,SAASA,EAAWC,GAAyB;AAClD,SAAOC,EAAK,CAAC,CAACD,GAAQ,CAAC,CAAC,EACrB,WAAW,IAAIA,GAAQ,GAAGA,CAAM,EAChC,WAAW,KAAKA,GAAQ,GAAGA,CAAM,EACjC,MAAM;AACX;ACLO,SAASE,EACdC,GACAC,GACAC,IAA2C,GAClC;AACT,QAAM,EAAE,IAAIC,IAAU,GAAG,IAAIC,IAAU,EAAE,IACvC,OAAOF,KAAM,WAAW,EAAE,IAAIA,GAAG,IAAIA,MAAMA;AAC7C,MAAIG,IAAK,KAAK,IAAIF,KAAWD,KAAK,GAAGF,IAAQ,CAAC,GAC1CM,IAAK,KAAK,IAAIF,KAAWF,KAAK,GAAGD,IAAS,CAAC;AAE/C,QAAMM,IAAaF,KAAMC;AACzB,EAAKC,MACEF,IAAA,GACAC,IAAA;AAEP,QAAME,IAAkBH,MAAOC,GAEzBG,IAAKX,EAAK,CAAC,KAAK,IAAI,GAAG,EAAEE,IAAQ,IAAIK,EAAG,GAAG,CAACJ,IAAS,CAAC,CAAC,GAEvDS,IAAY,CAACC,GAAeC,MAAkB;AAClD,IAAIL,MACEC,IAAiBC,EAAG,WAAWE,GAAOC,CAAK,IAE7CH,EAAG,QAAQE,GAAOC,GAAOP,GAAIC,GAAI,GAAG,IAAO,EAAK;AAAA,EAGtD;AAEI,SAAAD,IAAKL,IAAQ,KACZS,EAAA,MAAMT,IAAQ,IAAIK,CAAE,GAEzBK,EAAUL,GAAIC,CAAE,GACZA,IAAKL,IAAS,KACbQ,EAAA,MAAMR,IAAS,IAAIK,CAAE,GAEhBI,EAAA,CAACL,GAAIC,CAAE,GACbD,IAAKL,IAAQ,KACfS,EAAG,MAAM,EAAET,IAAQ,IAAIK,EAAG,GAElBK,EAAA,CAACL,GAAI,CAACC,CAAE,GACdA,IAAKL,IAAS,KAChBQ,EAAG,MAAM,EAAER,IAAS,IAAIK,EAAG,GAEnBI,EAAAL,GAAI,CAACC,CAAE,GACVG,EAAG,MAAM;AAClB;"}
|
|
1
|
+
{"version":3,"file":"drawShape.js","sources":["../../src/drawShape/drawCircle.ts","../../src/drawShape/drawRect.ts","../../src/drawShape/drawEllipse.ts","../../src/drawShape/drawPolysides.ts","../../../../node_modules/.pnpm/path-data-parser@0.1.0/node_modules/path-data-parser/lib/parser.js","../../../../node_modules/.pnpm/path-data-parser@0.1.0/node_modules/path-data-parser/lib/absolutize.js","../../../../node_modules/.pnpm/path-data-parser@0.1.0/node_modules/path-data-parser/lib/normalize.js","../../src/drawShape/drawSVGPath.ts"],"sourcesContent":["import { draw } from \"../draw.js\";\nimport type { Diagram } from \"../models/Diagram.js\";\n\nexport function drawCircle(radius: number): Diagram {\n return draw([-radius, 0])\n .sagittaArc(2 * radius, 0, radius)\n .sagittaArc(-2 * radius, 0, radius)\n .close();\n}\n","import { draw } from \"../draw.js\";\nimport type { Diagram } from \"../models/Diagram.js\";\n\nexport function drawRect(\n width: number,\n height: number,\n r: number | { rx?: number; ry?: number } = 0,\n): Diagram {\n const { rx: inputRx = 0, ry: inputRy = 0 } =\n typeof r === \"number\" ? { ry: r, rx: r } : r;\n let rx = Math.min(inputRx ?? r ?? 0, width / 2);\n let ry = Math.min(inputRy ?? r ?? 0, height / 2);\n\n const withRadius = rx && ry;\n if (!withRadius) {\n rx = 0;\n ry = 0;\n }\n const symmetricRadius = rx === ry;\n\n const sk = draw([Math.min(0, -(width / 2 - rx)), -height / 2]);\n\n const addFillet = (xDist: number, yDist: number) => {\n if (withRadius) {\n if (symmetricRadius) sk.tangentArc(xDist, yDist);\n else {\n sk.ellipse(xDist, yDist, rx, ry, 0, false, false);\n }\n }\n };\n\n if (rx < width / 2) {\n sk.hLine(width - 2 * rx);\n }\n addFillet(rx, ry);\n if (ry < height / 2) {\n sk.vLine(height - 2 * ry);\n }\n addFillet(-rx, ry);\n if (rx < width / 2) {\n sk.hLine(-(width - 2 * rx));\n }\n addFillet(-rx, -ry);\n if (ry < height / 2) {\n sk.vLine(-(height - 2 * ry));\n }\n addFillet(rx, -ry);\n return sk.close();\n}\n","import { draw } from \"../draw.js\";\nimport type { Diagram } from \"../main.js\";\n\nexport function drawEllipse(rx: number, ry: number): Diagram {\n const pen = draw([-rx, 0]);\n pen.halfEllipse(2 * rx, 0, ry);\n pen.halfEllipse(-2 * rx, 0, ry);\n return pen.close();\n}\n","import { draw } from \"../draw\";\nimport range from \"../utils/range\";\n\nexport function drawPolysides(\n radius: number,\n sidesCount: number,\n sagitta?: number,\n) {\n const points = range(sidesCount).map((i) => {\n const theta = -((Math.PI * 2) / sidesCount) * i;\n return [radius * Math.sin(theta), radius * Math.cos(theta)] as [\n number,\n number,\n ];\n });\n\n let drawing = draw(points[points.length - 1]);\n for (const point of points) {\n if (sagitta) {\n drawing = drawing.sagittaArcTo(point, sagitta);\n } else {\n drawing = drawing.lineTo(point);\n }\n }\n return drawing.close();\n}\n","const COMMAND = 0;\nconst NUMBER = 1;\nconst EOD = 2;\nconst PARAMS = { A: 7, a: 7, C: 6, c: 6, H: 1, h: 1, L: 2, l: 2, M: 2, m: 2, Q: 4, q: 4, S: 4, s: 4, T: 2, t: 2, V: 1, v: 1, Z: 0, z: 0 };\nfunction tokenize(d) {\n const tokens = new Array();\n while (d !== '') {\n if (d.match(/^([ \\t\\r\\n,]+)/)) {\n d = d.substr(RegExp.$1.length);\n }\n else if (d.match(/^([aAcChHlLmMqQsStTvVzZ])/)) {\n tokens[tokens.length] = { type: COMMAND, text: RegExp.$1 };\n d = d.substr(RegExp.$1.length);\n }\n else if (d.match(/^(([-+]?[0-9]+(\\.[0-9]*)?|[-+]?\\.[0-9]+)([eE][-+]?[0-9]+)?)/)) {\n tokens[tokens.length] = { type: NUMBER, text: `${parseFloat(RegExp.$1)}` };\n d = d.substr(RegExp.$1.length);\n }\n else {\n return [];\n }\n }\n tokens[tokens.length] = { type: EOD, text: '' };\n return tokens;\n}\nfunction isType(token, type) {\n return token.type === type;\n}\nexport function parsePath(d) {\n const segments = [];\n const tokens = tokenize(d);\n let mode = 'BOD';\n let index = 0;\n let token = tokens[index];\n while (!isType(token, EOD)) {\n let paramsCount = 0;\n const params = [];\n if (mode === 'BOD') {\n if (token.text === 'M' || token.text === 'm') {\n index++;\n paramsCount = PARAMS[token.text];\n mode = token.text;\n }\n else {\n return parsePath('M0,0' + d);\n }\n }\n else if (isType(token, NUMBER)) {\n paramsCount = PARAMS[mode];\n }\n else {\n index++;\n paramsCount = PARAMS[token.text];\n mode = token.text;\n }\n if ((index + paramsCount) < tokens.length) {\n for (let i = index; i < index + paramsCount; i++) {\n const numbeToken = tokens[i];\n if (isType(numbeToken, NUMBER)) {\n params[params.length] = +numbeToken.text;\n }\n else {\n throw new Error('Param not a number: ' + mode + ',' + numbeToken.text);\n }\n }\n if (typeof PARAMS[mode] === 'number') {\n const segment = { key: mode, data: params };\n segments.push(segment);\n index += paramsCount;\n token = tokens[index];\n if (mode === 'M')\n mode = 'L';\n if (mode === 'm')\n mode = 'l';\n }\n else {\n throw new Error('Bad segment: ' + mode);\n }\n }\n else {\n throw new Error('Path data ended short');\n }\n }\n return segments;\n}\nexport function serialize(segments) {\n const tokens = [];\n for (const { key, data } of segments) {\n tokens.push(key);\n switch (key) {\n case 'C':\n case 'c':\n tokens.push(data[0], `${data[1]},`, data[2], `${data[3]},`, data[4], data[5]);\n break;\n case 'S':\n case 's':\n case 'Q':\n case 'q':\n tokens.push(data[0], `${data[1]},`, data[2], data[3]);\n break;\n default:\n tokens.push(...data);\n break;\n }\n }\n return tokens.join(' ');\n}\n","// Translate relative commands to absolute commands\nexport function absolutize(segments) {\n let cx = 0, cy = 0;\n let subx = 0, suby = 0;\n const out = [];\n for (const { key, data } of segments) {\n switch (key) {\n case 'M':\n out.push({ key: 'M', data: [...data] });\n [cx, cy] = data;\n [subx, suby] = data;\n break;\n case 'm':\n cx += data[0];\n cy += data[1];\n out.push({ key: 'M', data: [cx, cy] });\n subx = cx;\n suby = cy;\n break;\n case 'L':\n out.push({ key: 'L', data: [...data] });\n [cx, cy] = data;\n break;\n case 'l':\n cx += data[0];\n cy += data[1];\n out.push({ key: 'L', data: [cx, cy] });\n break;\n case 'C':\n out.push({ key: 'C', data: [...data] });\n cx = data[4];\n cy = data[5];\n break;\n case 'c': {\n const newdata = data.map((d, i) => (i % 2) ? (d + cy) : (d + cx));\n out.push({ key: 'C', data: newdata });\n cx = newdata[4];\n cy = newdata[5];\n break;\n }\n case 'Q':\n out.push({ key: 'Q', data: [...data] });\n cx = data[2];\n cy = data[3];\n break;\n case 'q': {\n const newdata = data.map((d, i) => (i % 2) ? (d + cy) : (d + cx));\n out.push({ key: 'Q', data: newdata });\n cx = newdata[2];\n cy = newdata[3];\n break;\n }\n case 'A':\n out.push({ key: 'A', data: [...data] });\n cx = data[5];\n cy = data[6];\n break;\n case 'a':\n cx += data[5];\n cy += data[6];\n out.push({ key: 'A', data: [data[0], data[1], data[2], data[3], data[4], cx, cy] });\n break;\n case 'H':\n out.push({ key: 'H', data: [...data] });\n cx = data[0];\n break;\n case 'h':\n cx += data[0];\n out.push({ key: 'H', data: [cx] });\n break;\n case 'V':\n out.push({ key: 'V', data: [...data] });\n cy = data[0];\n break;\n case 'v':\n cy += data[0];\n out.push({ key: 'V', data: [cy] });\n break;\n case 'S':\n out.push({ key: 'S', data: [...data] });\n cx = data[2];\n cy = data[3];\n break;\n case 's': {\n const newdata = data.map((d, i) => (i % 2) ? (d + cy) : (d + cx));\n out.push({ key: 'S', data: newdata });\n cx = newdata[2];\n cy = newdata[3];\n break;\n }\n case 'T':\n out.push({ key: 'T', data: [...data] });\n cx = data[0];\n cy = data[1];\n break;\n case 't':\n cx += data[0];\n cy += data[1];\n out.push({ key: 'T', data: [cx, cy] });\n break;\n case 'Z':\n case 'z':\n out.push({ key: 'Z', data: [] });\n cx = subx;\n cy = suby;\n break;\n }\n }\n return out;\n}\n","// Normalize path to include only M, L, C, and Z commands\nexport function normalize(segments) {\n const out = [];\n let lastType = '';\n let cx = 0, cy = 0;\n let subx = 0, suby = 0;\n let lcx = 0, lcy = 0;\n for (const { key, data } of segments) {\n switch (key) {\n case 'M':\n out.push({ key: 'M', data: [...data] });\n [cx, cy] = data;\n [subx, suby] = data;\n break;\n case 'C':\n out.push({ key: 'C', data: [...data] });\n cx = data[4];\n cy = data[5];\n lcx = data[2];\n lcy = data[3];\n break;\n case 'L':\n out.push({ key: 'L', data: [...data] });\n [cx, cy] = data;\n break;\n case 'H':\n cx = data[0];\n out.push({ key: 'L', data: [cx, cy] });\n break;\n case 'V':\n cy = data[0];\n out.push({ key: 'L', data: [cx, cy] });\n break;\n case 'S': {\n let cx1 = 0, cy1 = 0;\n if (lastType === 'C' || lastType === 'S') {\n cx1 = cx + (cx - lcx);\n cy1 = cy + (cy - lcy);\n }\n else {\n cx1 = cx;\n cy1 = cy;\n }\n out.push({ key: 'C', data: [cx1, cy1, ...data] });\n lcx = data[0];\n lcy = data[1];\n cx = data[2];\n cy = data[3];\n break;\n }\n case 'T': {\n const [x, y] = data;\n let x1 = 0, y1 = 0;\n if (lastType === 'Q' || lastType === 'T') {\n x1 = cx + (cx - lcx);\n y1 = cy + (cy - lcy);\n }\n else {\n x1 = cx;\n y1 = cy;\n }\n const cx1 = cx + 2 * (x1 - cx) / 3;\n const cy1 = cy + 2 * (y1 - cy) / 3;\n const cx2 = x + 2 * (x1 - x) / 3;\n const cy2 = y + 2 * (y1 - y) / 3;\n out.push({ key: 'C', data: [cx1, cy1, cx2, cy2, x, y] });\n lcx = x1;\n lcy = y1;\n cx = x;\n cy = y;\n break;\n }\n case 'Q': {\n const [x1, y1, x, y] = data;\n const cx1 = cx + 2 * (x1 - cx) / 3;\n const cy1 = cy + 2 * (y1 - cy) / 3;\n const cx2 = x + 2 * (x1 - x) / 3;\n const cy2 = y + 2 * (y1 - y) / 3;\n out.push({ key: 'C', data: [cx1, cy1, cx2, cy2, x, y] });\n lcx = x1;\n lcy = y1;\n cx = x;\n cy = y;\n break;\n }\n case 'A': {\n const r1 = Math.abs(data[0]);\n const r2 = Math.abs(data[1]);\n const angle = data[2];\n const largeArcFlag = data[3];\n const sweepFlag = data[4];\n const x = data[5];\n const y = data[6];\n if (r1 === 0 || r2 === 0) {\n out.push({ key: 'C', data: [cx, cy, x, y, x, y] });\n cx = x;\n cy = y;\n }\n else {\n if (cx !== x || cy !== y) {\n const curves = arcToCubicCurves(cx, cy, x, y, r1, r2, angle, largeArcFlag, sweepFlag);\n curves.forEach(function (curve) {\n out.push({ key: 'C', data: curve });\n });\n cx = x;\n cy = y;\n }\n }\n break;\n }\n case 'Z':\n out.push({ key: 'Z', data: [] });\n cx = subx;\n cy = suby;\n break;\n }\n lastType = key;\n }\n return out;\n}\nfunction degToRad(degrees) {\n return (Math.PI * degrees) / 180;\n}\nfunction rotate(x, y, angleRad) {\n const X = x * Math.cos(angleRad) - y * Math.sin(angleRad);\n const Y = x * Math.sin(angleRad) + y * Math.cos(angleRad);\n return [X, Y];\n}\nfunction arcToCubicCurves(x1, y1, x2, y2, r1, r2, angle, largeArcFlag, sweepFlag, recursive) {\n const angleRad = degToRad(angle);\n let params = [];\n let f1 = 0, f2 = 0, cx = 0, cy = 0;\n if (recursive) {\n [f1, f2, cx, cy] = recursive;\n }\n else {\n [x1, y1] = rotate(x1, y1, -angleRad);\n [x2, y2] = rotate(x2, y2, -angleRad);\n const x = (x1 - x2) / 2;\n const y = (y1 - y2) / 2;\n let h = (x * x) / (r1 * r1) + (y * y) / (r2 * r2);\n if (h > 1) {\n h = Math.sqrt(h);\n r1 = h * r1;\n r2 = h * r2;\n }\n const sign = (largeArcFlag === sweepFlag) ? -1 : 1;\n const r1Pow = r1 * r1;\n const r2Pow = r2 * r2;\n const left = r1Pow * r2Pow - r1Pow * y * y - r2Pow * x * x;\n const right = r1Pow * y * y + r2Pow * x * x;\n const k = sign * Math.sqrt(Math.abs(left / right));\n cx = k * r1 * y / r2 + (x1 + x2) / 2;\n cy = k * -r2 * x / r1 + (y1 + y2) / 2;\n f1 = Math.asin(parseFloat(((y1 - cy) / r2).toFixed(9)));\n f2 = Math.asin(parseFloat(((y2 - cy) / r2).toFixed(9)));\n if (x1 < cx) {\n f1 = Math.PI - f1;\n }\n if (x2 < cx) {\n f2 = Math.PI - f2;\n }\n if (f1 < 0) {\n f1 = Math.PI * 2 + f1;\n }\n if (f2 < 0) {\n f2 = Math.PI * 2 + f2;\n }\n if (sweepFlag && f1 > f2) {\n f1 = f1 - Math.PI * 2;\n }\n if (!sweepFlag && f2 > f1) {\n f2 = f2 - Math.PI * 2;\n }\n }\n let df = f2 - f1;\n if (Math.abs(df) > (Math.PI * 120 / 180)) {\n const f2old = f2;\n const x2old = x2;\n const y2old = y2;\n if (sweepFlag && f2 > f1) {\n f2 = f1 + (Math.PI * 120 / 180) * (1);\n }\n else {\n f2 = f1 + (Math.PI * 120 / 180) * (-1);\n }\n x2 = cx + r1 * Math.cos(f2);\n y2 = cy + r2 * Math.sin(f2);\n params = arcToCubicCurves(x2, y2, x2old, y2old, r1, r2, angle, 0, sweepFlag, [f2, f2old, cx, cy]);\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 * r1 * t;\n const hy = 4 / 3 * r2 * 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, m3, m4].concat(params);\n }\n else {\n params = [m2, m3, m4].concat(params);\n const curves = [];\n for (let i = 0; i < params.length; i += 3) {\n const r1 = rotate(params[i][0], params[i][1], angleRad);\n const r2 = rotate(params[i + 1][0], params[i + 1][1], angleRad);\n const r3 = rotate(params[i + 2][0], params[i + 2][1], angleRad);\n curves.push([r1[0], r1[1], r2[0], r2[1], r3[0], r3[1]]);\n }\n return curves;\n }\n}\n","import * as pathDataParser from \"path-data-parser\";\n\nconst { parsePath, absolutize } = pathDataParser;\n\nimport { draw, DrawingPen } from \"../draw.js\";\nimport { Vector } from \"../definitions.js\";\n\nconst parseArgs = (\n command: { key: string; data: number[] },\n previousPoint: null | Vector,\n previousControls: {\n control1?: null | Vector;\n control2?: null | Vector;\n },\n):\n | { p: Vector; control1: Vector; control2: Vector }\n | { p: Vector }\n | { p: Vector; arcConfig: [number, number, number, boolean, boolean] } => {\n let p: Vector;\n let control1: null | Vector = null;\n let control2: null | Vector = null;\n\n if (command.key === \"M\") {\n const [x, y] = command.data;\n p = [x, y];\n return { p };\n }\n\n if (command.key === \"H\") {\n const [x] = command.data;\n p = [x, previousPoint?.[1] || 0];\n return { p };\n }\n\n if (command.key === \"V\") {\n const [y] = command.data;\n p = [previousPoint?.[0] || 0, y];\n return { p };\n }\n\n if (command.key === \"L\") {\n const [x, y] = command.data;\n p = [x, y];\n return { p };\n }\n\n if (command.key === \"C\") {\n const [x1, y1, x2, y2, x, y] = command.data;\n p = [x, y];\n control1 = [x1, y1];\n control2 = [x2, y2];\n\n return {\n p,\n control1,\n control2,\n };\n }\n\n if (command.key === \"S\") {\n const [x1, y1, x, y] = command.data;\n p = [x, y];\n control2 = [x1, y1];\n\n if (!previousPoint) {\n throw new Error(\"S command without previous point\");\n }\n\n control1 = previousPoint;\n if (previousControls.control2) {\n const pp = previousPoint;\n control1 = [\n pp[0] + (pp[0] - previousControls.control2[0]),\n pp[1] + (pp[1] - previousControls.control2[1]),\n ];\n }\n\n return {\n p,\n control1,\n control2,\n };\n }\n\n if (command.key === \"Q\") {\n const [x1, y1, x, y] = command.data;\n p = [x, y];\n control1 = [x1, y1];\n\n return {\n p,\n control1,\n };\n }\n\n if (command.key === \"T\") {\n const [x, y] = command.data;\n p = [x, y];\n\n if (!previousPoint) {\n throw new Error(\"T command without previous point\");\n }\n\n control1 = previousPoint;\n if (previousControls.control1 && !previousControls.control2) {\n const pp = previousPoint;\n control1 = [\n pp[0] + (pp[0] - previousControls.control1[0]),\n pp[1] + (pp[1] - previousControls.control1[1]),\n ];\n }\n }\n\n if (command.key === \"A\") {\n const [rx, ry, xAxisRotation = 0, largeArc = 0, sweepFlag = 0, x, y] =\n command.data;\n p = [x, y];\n\n if (!previousPoint) {\n throw new Error(\"A command without previous point\");\n }\n\n // The radius can be defined as smaller than what is needed. We need to fix\n // it in that case.\n const distance = Math.sqrt(\n (previousPoint[0] - x) ** 2 + (previousPoint[1] - y) ** 2,\n );\n const bigRadius = Math.max(rx, ry);\n let a = rx;\n let b = ry;\n\n if (bigRadius < distance / 2) {\n const ratio = distance / 2 / bigRadius;\n a = rx * ratio;\n b = ry * ratio;\n }\n\n return {\n p,\n arcConfig: [a, b, xAxisRotation, !!largeArc, !!sweepFlag],\n };\n }\n\n throw new Error(`Unknown command ${command.key}`);\n};\n\nexport function* drawSVGPathGenerator(SVGPath: string) {\n const commands = absolutize(parsePath(SVGPath));\n\n let pen: null | DrawingPen = null;\n let lastPoint: null | Vector = null;\n let lastControls: {\n control1: null | Vector;\n control2: null | Vector;\n } = { control1: null, control2: null };\n\n for (const command of commands) {\n if (command.key === \"Z\") {\n if (pen) yield pen.close(true);\n pen = null;\n continue;\n }\n\n const args = parseArgs(command, lastPoint, lastControls);\n const p = args.p;\n const control1 = \"control1\" in args ? args.control1 : null;\n const control2 = \"control1\" in args ? args.control2 : null;\n const arcConfig = \"arcConfig\" in args ? args.arcConfig : null;\n\n if (command.key === \"M\") {\n if (pen) {\n yield pen.isClosed ? pen.close() : pen.asStrand();\n }\n\n pen = draw(p);\n lastPoint = p;\n continue;\n }\n\n // We do not draw line of length 0\n if (\n lastPoint &&\n Math.abs(p[0] - lastPoint[0]) < 1e-9 &&\n Math.abs(p[1] - lastPoint[1]) < 1e-9\n ) {\n lastPoint = p;\n lastControls = { control1, control2 };\n continue;\n }\n\n if (command.key === \"L\" || command.key === \"H\" || command.key === \"V\") {\n pen?.lineTo(p);\n }\n\n if (command.key === \"C\" || command.key === \"S\") {\n pen?.cubicBezierCurveTo(p, control1!, control2!);\n }\n\n if (command.key === \"Q\" || command.key === \"T\") {\n pen?.quadraticBezierCurveTo(p, control1!);\n }\n\n if (command.key === \"A\") {\n pen?.ellipseTo(p, ...arcConfig!);\n }\n\n lastPoint = p;\n lastControls = { control1, control2 };\n }\n\n if (pen) yield pen.isClosed ? pen.close() : pen.asStrand();\n}\n\nexport function drawSVGPath(SVGPath: string) {\n return Array.from(drawSVGPathGenerator(SVGPath));\n}\n"],"names":["drawCircle","radius","draw","drawRect","width","height","r","inputRx","inputRy","rx","ry","withRadius","symmetricRadius","sk","addFillet","xDist","yDist","drawEllipse","pen","drawPolysides","sidesCount","sagitta","points","range","i","theta","drawing","point","COMMAND","NUMBER","EOD","PARAMS","tokenize","d","tokens","isType","token","type","parsePath","segments","mode","index","paramsCount","params","numbeToken","segment","serialize","key","data","absolutize","cx","cy","subx","suby","out","newdata","normalize","lastType","lcx","lcy","cx1","cy1","x","y","x1","y1","cx2","cy2","r1","r2","angle","largeArcFlag","sweepFlag","arcToCubicCurves","curve","degToRad","degrees","rotate","angleRad","X","Y","x2","y2","recursive","f1","f2","h","sign","r1Pow","r2Pow","left","right","k","df","f2old","x2old","y2old","c1","s1","c2","s2","t","hx","hy","m1","m2","m3","m4","curves","r3","pathDataParser","parseArgs","command","previousPoint","previousControls","p","control1","control2","pp","xAxisRotation","largeArc","distance","bigRadius","a","b","ratio","drawSVGPathGenerator","SVGPath","commands","lastPoint","lastControls","args","arcConfig","drawSVGPath"],"mappings":"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","x_google_ignoreList":[4,5,6]}
|