glyphcss 0.0.3 → 0.0.5
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/{elements-DVWVBIG0.d.cts → elements-ycVyIlYL.d.cts} +145 -26
- package/dist/{elements-DVWVBIG0.d.ts → elements-ycVyIlYL.d.ts} +145 -26
- package/dist/elements.cjs +5 -4
- package/dist/elements.d.cts +1 -1
- package/dist/elements.d.ts +1 -1
- package/dist/elements.js +5 -4
- package/dist/index.cjs +5 -4
- package/dist/index.d.cts +121 -6
- package/dist/index.d.ts +121 -6
- package/dist/index.js +5 -4
- package/package.json +2 -2
package/dist/elements.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";var ve=Object.defineProperty;var tt=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames;var rt=Object.prototype.hasOwnProperty;var ot=(n,t)=>{for(var e in t)ve(n,e,{get:t[e],enumerable:!0})},it=(n,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of nt(t))!rt.call(n,r)&&r!==e&&ve(n,r,{get:()=>t[r],enumerable:!(o=tt(t,r))||o.enumerable});return n};var st=n=>it(ve({},"__esModule",{value:!0}),n);var Xt={};ot(Xt,{GlyphHotspotElement:()=>te,GlyphMapControlsElement:()=>oe,GlyphMeshElement:()=>ee,GlyphOrbitControlsElement:()=>re,GlyphOrthographicCameraElement:()=>j,GlyphPerspectiveCameraElement:()=>ne,GlyphSceneElement:()=>Q});module.exports=st(Xt);function He(n,t,e){let o=Math.cos(t),r=Math.sin(t),a=o*n[1]-r*n[0],i=r*n[1]+o*n[0],s=n[2],c=Math.cos(e),l=Math.sin(e),p=c*i-l*s,h=l*i+c*s;return[a,p,h]}function le(n={}){let t={rotX:n.rotX??0,rotY:n.rotY??0,distance:n.distance??3,zoom:n.zoom??.4,stretch:n.stretch??1,target:[0,0,0],eyeMode:!1,focal:5},[e,o]=n.center??[.5,.5];return{kind:"perspective",get rotX(){return t.rotX},set rotX(r){t.rotX=r},get rotY(){return t.rotY},set rotY(r){t.rotY=r},get distance(){return t.distance},set distance(r){t.distance=r},get zoom(){return t.zoom},set zoom(r){t.zoom=r},get stretch(){return t.stretch},set stretch(r){t.stretch=r},get target(){return t.target},set target(r){t.target=r},get eyeMode(){return t.eyeMode},set eyeMode(r){t.eyeMode=r},project(r,a,i,s){let c=[r[0]-t.target[0],r[1]-t.target[1],r[2]-t.target[2]],l=He(c,t.rotY,t.rotX);if(t.eyeMode){if(l[2]>=-.001)return[NaN,NaN,l[2]];let C=t.focal/-l[2],d=Math.min(a,i)*t.zoom*C,b=a*e+l[0]*d*s*t.stretch,u=i*o+l[1]*d;return[b,u,l[2]]}let p=30,h=1.5,f=l[2]*p,y=.001,g=1-f/t.distance;if(g<y)return[NaN,NaN,l[2]];let L=1/g,E=Math.min(a,i)*t.zoom*h*L,w=a*e+l[0]*E*s*t.stretch,x=i*o+l[1]*E;return[w,x,l[2]]}}}function Pe(n={}){let t={rotX:n.rotX??0,rotY:n.rotY??0,distance:0,zoom:n.zoom??.4,stretch:1,target:[0,0,0]},[e,o]=n.center??[.5,.5];return{kind:"orthographic",get rotX(){return t.rotX},set rotX(r){t.rotX=r},get rotY(){return t.rotY},set rotY(r){t.rotY=r},get distance(){return t.distance},set distance(r){t.distance=r},get zoom(){return t.zoom},set zoom(r){t.zoom=r},get stretch(){return t.stretch},set stretch(r){t.stretch=r},get target(){return t.target},set target(r){t.target=r},get eyeMode(){return!1},set eyeMode(r){},project(r,a,i,s){let c=[r[0]-t.target[0],r[1]-t.target[1],r[2]-t.target[2]],l=He(c,t.rotY,t.rotX),h=Math.min(a,i)*t.zoom*1.5,f=a*e+l[0]*h*s*t.stretch,y=i*o+l[1]*h;return[f,y,l[2]]}}}var lt={direction:[.5,.7,.5],intensity:1},at={intensity:.4};function ct(n){let t=new Set,e=[];for(let o of n){let r=o.vertices;if(!(r.length<2))for(let a=0;a<r.length;a++){let i=r[a],s=r[(a+1)%r.length],c=`${i[0]},${i[1]},${i[2]}`,l=`${s[0]},${s[1]},${s[2]}`,p=c<l?`${c}|${l}`:`${l}|${c}`;if(t.has(p))continue;t.add(p);let h={from:i,to:s,weight:2};o.color&&(h.color=o.color),e.push(h)}}return e}function Oe(n){let t=n.polygons??[],e=n.mode??(t.length?"solid":"wireframe"),o=n.wireframe??(e==="wireframe"?ct(t):[]);return{camera:n.camera,grid:n.grid,polygons:t,wireframe:o,mode:e,directionalLight:n.directionalLight??lt,ambientLight:n.ambientLight??at,glyphPalette:n.glyphPalette??"default",useColors:n.useColors??!0,smoothShading:n.smoothShading??!1,creaseAngle:n.creaseAngle??60}}var Bt=" .:-=+*#%@".split(""),$t=" .:-=+*#%@".split(""),Ee={default:{thin:"\xB7\u22C5\u2219\u02D9\xB7\u22C5\u2219".split(""),normal:"\u254B\u256C\u253C\u2573\u25C6\u25C7\u25CA\u25B2\u25B3\u25BC\u25BD\u25C8\u2B21\u2B22\u2234\u2235\u22A5\u2295\u2297\u2299\u229A\u229B".split(""),core:"\u2726\u2727\u2729\u25C9\u2299\u25CE".split(""),solid:" .:-=+*#%@".split("")},ascii:{thin:".'".split(""),normal:"+*x".split(""),core:"#@".split(""),solid:" .,:;!+=*xX#@".split("")},dots:{thin:"\xB7\u22C5".split(""),normal:"\u2022\u25CF".split(""),core:"\u25C9\u25CE".split(""),solid:" \xB7\u22C5\u2218\u2022\u25CF\u25C9\u25CE\u2B24".split("")},lines:{thin:"\u2500\u2502".split(""),normal:"\u2550\u2551".split(""),core:"\u2588".split(""),solid:" \u2500\u2550\u256C\u2551\u2588\u2593\u2592\u2591".split("")},blocks:{thin:"\u2591\u2581".split(""),normal:"\u2592\u2593\u258C\u2590\u2580\u2584".split(""),core:"\u2588".split(""),solid:" \u2591\u2592\u2593\u258C\u2590\u2588\u2580\u2584\u25A0".split("")},stars:{thin:"\xB7\u22C6".split(""),normal:"\u2726\u2727\u2729\u272A".split(""),core:"\u272B\u272C\u272D\u2605".split(""),solid:" \xB7\u22C6\u2217\u2726\u2727\u2729\u272A\u272B\u2605".split("")},arrows:{thin:"\xB7\u2219".split(""),normal:"\u2190\u2191\u2192\u2193".split(""),core:"\u2196\u2197\u2198\u2199\u2921\u2922".split(""),solid:" \xB7\u2219\u2191\u2197\u2192\u2198\u2193\u2199\u2190\u2196".split("")},braille:{thin:"\u2801\u2802\u2804\u2808".split(""),normal:"\u2803\u2805\u2806\u2809\u280A\u280B\u280C\u280D\u280E\u280F".split(""),core:"\u283F\u28FF".split(""),solid:" \u2801\u2803\u2807\u2827\u2837\u283F\u287F\u28FF".split("")},runes:{thin:".\xB7".split(""),normal:"\u16A0\u16A1\u16A2\u16A3\u16A4\u16A6\u16A8\u16B1\u16B2\u16B3\u16B7\u16B9\u16C3\u16C7\u16C9".split(""),core:"\u16DE\u16DF\u16E1\u16E2\u16E3".split(""),solid:" \xB7\u16A0\u16A3\u16A4\u16A8\u16B1\u16B7\u16DE\u16E2".split("")},math:{thin:"\u2219\u2218".split(""),normal:"\u2211\u220F\u222B\u221A\u221E\u2248\u2260\u2264\u2265\u2282\u2283\u2286\u2287".split(""),core:"\u222E\u222F\u2230\u2202".split(""),solid:" \u2219\u2218\u2211\u222B\u221A\u221E\u2248\u2295\u2297".split("")},binary:{thin:"\xB7.".split(""),normal:"01".split(""),core:"\u2588".split(""),solid:" .:01\u2588\u2588".split("")},hex:{thin:"\xB7\u2219".split(""),normal:"0123456789ABCDEF".split(""),core:"FFAA".split(""),solid:" 0123456789AF".split("")}},Wt=Ee.default;function Me(n){return Ee[n]??Ee.default}function Re(n){let{camera:t,grid:e,wireframe:o,mode:r}=n,{cols:a,rows:i,cellAspect:s}=e;if(r==="solid")return ut(n,a,i,s);let c=Me(n.glyphPalette),l=new Uint8Array(a*i),p=n.useColors?new Array(a*i).fill(null):null;for(let h of o){let f=t.project(h.from,a,i,s),y=t.project(h.to,a,i,s);f[0]!==f[0]||y[0]!==y[0]||ft(l,p,f[0]|0,f[1]|0,y[0]|0,y[1]|0,h.weight??2,h.color??null,a,i)}return yt(l,p,a,i,c)}function ut(n,t,e,o){let{camera:r,polygons:a,directionalLight:i,ambientLight:s,smoothShading:c,creaseAngle:l}=n,p=Me(n.glyphPalette).solid,h=p.length-1,f=new Array(t*e).fill(" "),y=n.useColors,g=y?new Array(t*e).fill(null):null,L=new Float64Array(t*e).fill(-1/0),E=i.direction,w=Math.hypot(E[0],E[1],E[2])||1,x=E[0]/w,M=E[1]/w,C=E[2]/w,d=i.intensity??1,b=s.intensity??.4,u=Ae(i.color??"#ffffff"),v=Ae(s.color??"#ffffff"),A=c&&l>0?pt(a,l):null;for(let G=0;G<a.length;G++){let m=a[G],_=m.vertices;if(!(_.length<3))for(let S=1;S<_.length-1;S++){let z=S,I=S+1,H=_[0],P=_[z],N=_[I],O=r.project(H,t,e,o),R=r.project(P,t,e,o),Y=r.project(N,t,e,o);if(O[0]!==O[0]||R[0]!==R[0]||Y[0]!==Y[0])continue;let X=P[0]-H[0],B=P[1]-H[1],ae=P[2]-H[2],U=N[0]-H[0],F=N[1]-H[1],ie=N[2]-H[2],se=B*ie-ae*F,q=ae*U-X*ie,we=X*F-B*U,ce=Math.hypot(se,q,we)||1,Be=se/ce,$e=q/ce,We=we/ce,ue,de,he,pe,me,fe,ye,ge,be;if(A){let Z=A[G],D=Z[0],V=Z[z],K=Z[I];ue=D[0],de=D[1],he=D[2],pe=V[0],me=V[1],fe=V[2],ye=K[0],ge=K[1],be=K[2]}else ue=pe=ye=Be,de=me=ge=$e,he=fe=be=We;let je=ue*x+de*M+he*C,Ue=pe*x+me*M+fe*C,qe=ye*x+ge*M+be*C,_e=Math.min(1,b+Math.max(0,je)*d),Se=Math.min(1,b+Math.max(0,Ue)*d),ze=Math.min(1,b+Math.max(0,qe)*d),Te=null;if(y){let Z=(_e+Se+ze)/3,D=Math.max(0,Z-b),V=m.color?Ae(m.color):[255,255,255],K=b*v[0]/255+D*u[0]/255,Ze=b*v[1]/255+D*u[1]/255,Ke=b*v[2]/255+D*u[2]/255,Je=Math.min(255,V[0]*K),Qe=Math.min(255,V[1]*Ze),et=Math.min(255,V[2]*Ke);Te=`#${Ce(Je)}${Ce(Qe)}${Ce(et)}`}ht(O[0],O[1],O[2],_e,R[0],R[1],R[2],Se,Y[0],Y[1],Y[2],ze,p,h,Te,f,g,L,t,e)}}return mt(f,g,t,e)}var dt=new Float64Array([(0+.5)/16,(8+.5)/16,(2+.5)/16,(10+.5)/16,(12+.5)/16,(4+.5)/16,(14+.5)/16,(6+.5)/16,(3+.5)/16,(11+.5)/16,(1+.5)/16,(9+.5)/16,(15+.5)/16,(7+.5)/16,(13+.5)/16,(5+.5)/16]);function ht(n,t,e,o,r,a,i,s,c,l,p,h,f,y,g,L,E,w,x,M){let C=(r-n)*(l-t)-(a-t)*(c-n);if(C===0||C>0)return;let d=1/C,b=C>0,u=n<r?n:r;c<u&&(u=c);let v=n>r?n:r;c>v&&(v=c);let A=t<a?t:a;l<A&&(A=l);let G=t>a?t:a;l>G&&(G=l);let m=Math.max(0,Math.ceil(u)),_=Math.min(x-1,Math.floor(v)),S=Math.max(0,Math.ceil(A)),T=Math.min(M-1,Math.floor(G));if(!(m>_||S>T))for(let z=S;z<=T;z++){let I=z;for(let H=m;H<=_;H++){let P=H,N=(r-P)*(l-I)-(a-I)*(c-P),O=(c-P)*(t-I)-(l-I)*(n-P),R=(n-P)*(a-I)-(t-I)*(r-P);if(b?N<0||O<0||R<0:N>0||O>0||R>0)continue;let Y=(N*e+O*i+R*p)*d,X=z*x+H;if(Y>w[X]){w[X]=Y;let B=(N*o+O*s+R*h)*d,U=(B<0?0:B>1?1:B)*y,F=U|0,ie=U-F,se=dt[(z&3)*4+(H&3)],q=ie>se&&F<y?F+1:F;L[X]=f[q>y?y:q],E&&(E[X]=g)}}}}function pt(n,t){let e=n.length,o=new Array(e);for(let s=0;s<e;s++){let c=n[s].vertices;if(c.length<3){o[s]=[0,0,0];continue}let l=c[0],p=c[1],h=c[2],f=p[0]-l[0],y=p[1]-l[1],g=p[2]-l[2],L=h[0]-l[0],E=h[1]-l[1],w=h[2]-l[2],x=y*w-g*E,M=g*L-f*w,C=f*E-y*L,d=Math.hypot(x,M,C)||1;o[s]=[x/d,M/d,C/d]}let r=new Map;for(let s=0;s<e;s++){let c=n[s].vertices;for(let l=0;l<c.length;l++){let p=c[l],h=`${p[0]},${p[1]},${p[2]}`,f=r.get(h);f||(f=[],r.set(h,f)),(f.length===0||f[f.length-1]!==s)&&f.push(s)}}let a=Math.cos(t*Math.PI/180),i=new Array(e);for(let s=0;s<e;s++){let c=n[s].vertices,l=o[s],p=new Array(c.length);for(let h=0;h<c.length;h++){let f=c[h],y=r.get(`${f[0]},${f[1]},${f[2]}`),g=0,L=0,E=0;for(let x=0;x<y.length;x++){let M=y[x],C=o[M];l[0]*C[0]+l[1]*C[1]+l[2]*C[2]>=a&&(g+=C[0],L+=C[1],E+=C[2])}let w=Math.hypot(g,L,E)||1;p[h]=[g/w,L/w,E/w]}i[s]=p}return i}function mt(n,t,e,o){let r=[],a=null,i="",s=()=>{i&&(a!==null?r.push(`<span style="color:${a}">${i}</span>`):r.push(i),i="")};for(let c=0;c<o;c++){for(let l=0;l<e;l++){let p=c*e+l,h=n[p],f=t&&h!==" "?t[p]??null:null;f!==a&&(s(),a=f),i+=h}s(),a=null,c<o-1&&r.push(`
|
|
2
|
-
`)}return r.join("")}function
|
|
3
|
-
`)}return
|
|
1
|
+
"use strict";var ht=Object.defineProperty;var Jt=Object.getOwnPropertyDescriptor;var Qt=Object.getOwnPropertyNames;var en=Object.prototype.hasOwnProperty;var tn=(n,e)=>{for(var t in e)ht(n,t,{get:e[t],enumerable:!0})},nn=(n,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Qt(e))!en.call(n,r)&&r!==t&&ht(n,r,{get:()=>e[r],enumerable:!(o=Jt(e,r))||o.enumerable});return n};var rn=n=>nn(ht({},"__esModule",{value:!0}),n);var Xn={};tn(Xn,{GlyphHotspotElement:()=>We,GlyphMapControlsElement:()=>Ue,GlyphMeshElement:()=>$e,GlyphOrbitControlsElement:()=>qe,GlyphOrthographicCameraElement:()=>Ne,GlyphPerspectiveCameraElement:()=>je,GlyphSceneElement:()=>Xe});module.exports=rn(Xn);var Bt=require("@glyphcss/core");var Gt=Math.PI/180,Lt=.01,on=32e3,sn=Lt*1.01;function ft(n,e,t){let o=n[1],r=n[0],s=n[2],l=t*Gt,i=Math.cos(l),c=Math.sin(l),u=o*i-r*c,p=o*c+r*i,d=s,m=e*Gt,h=Math.cos(m),f=Math.sin(m),b=p*h-d*f,C=p*f+d*h;return[u,b,C]}function Ie(n={}){let e={rotX:n.rotX??65,rotY:n.rotY??45,distance:n.distance??6,perspective:n.perspective??on,zoom:n.zoom??.65,stretch:n.stretch??1,fovScale:n.fovScale??1,target:[0,0,0],eyeMode:!1,focal:1},[t,o]=n.center??[.5,.5];return{kind:"perspective",get rotX(){return e.rotX},set rotX(r){e.rotX=r},get rotY(){return e.rotY},set rotY(r){e.rotY=r},get distance(){return e.distance},set distance(r){e.distance=r},get perspective(){return e.perspective},set perspective(r){e.perspective=r},get zoom(){return e.zoom},set zoom(r){e.zoom=r},get stretch(){return e.stretch},set stretch(r){e.stretch=r},get fovScale(){return e.fovScale},set fovScale(r){e.fovScale=r},get target(){return e.target},set target(r){e.target=r},get eyeMode(){return e.eyeMode},set eyeMode(r){e.eyeMode=r},eyeDepth(r){let s=ft([r[0]-e.target[0],r[1]-e.target[1],r[2]-e.target[2]],e.rotX,e.rotY),l=.001*1.01;if(e.eyeMode)return-s[2]-l;if(e.perspective>0){let i=s[2]*e.zoom*50-e.distance;return e.perspective-i-e.perspective*sn}return e.distance-s[2]-l},project(r,s,l,i){let u=50/i,p=[r[0]-e.target[0],r[1]-e.target[1],r[2]-e.target[2]],d=ft(p,e.rotX,e.rotY);if(e.eyeMode){if(d[2]>=-.001)return[NaN,NaN,d[2],NaN];let y=e.focal/-d[2],w=d[0]*y*e.zoom*50,P=d[1]*y*e.zoom*50,H=s*t+w/u*e.stretch,v=l*o+P/50;return[H,v,d[2],-1/d[2]]}if(e.perspective>0){let x=e.perspective,y=d[0]*e.zoom*50,w=d[1]*e.zoom*50,P=d[2]*e.zoom*50-e.distance,H=x-P,v=x*Lt;if(H<v)return[NaN,NaN,P,NaN];let A=x/H,L=s*t+y*A/u*e.stretch*e.fovScale,a=l*o+w*A/50*e.fovScale;return[L,a,P,1/H]}let m=.001,h=e.distance-d[2];if(h<m)return[NaN,NaN,d[2],NaN];let f=e.distance/h,b=d[0]*f*e.zoom*50,C=d[1]*f*e.zoom*50,_=s*t+b/u*e.stretch*e.fovScale,M=l*o+C/50*e.fovScale;return[_,M,d[2],1/h]}}}function Tt(n={}){let e={rotX:n.rotX??65,rotY:n.rotY??45,distance:0,zoom:n.zoom??.65,stretch:1,fovScale:1,target:[0,0,0]},[t,o]=n.center??[.5,.5];return{kind:"orthographic",get rotX(){return e.rotX},set rotX(r){e.rotX=r},get rotY(){return e.rotY},set rotY(r){e.rotY=r},get distance(){return e.distance},set distance(r){e.distance=r},get perspective(){return 0},set perspective(r){},get zoom(){return e.zoom},set zoom(r){e.zoom=r},get stretch(){return e.stretch},set stretch(r){e.stretch=r},get fovScale(){return e.fovScale},set fovScale(r){e.fovScale=r},get target(){return e.target},set target(r){e.target=r},get eyeMode(){return!1},set eyeMode(r){},eyeDepth(r){return Number.POSITIVE_INFINITY},project(r,s,l,i){let u=50/i,p=[r[0]-e.target[0],r[1]-e.target[1],r[2]-e.target[2]],d=ft(p,e.rotX,e.rotY),m=d[0]*e.zoom*50,h=d[1]*e.zoom*50,f=s*t+m/u*e.fovScale,b=l*o+h/50*e.fovScale;return[f,b,d[2]]}}}var ln={direction:[-.5,-.7,-.5],intensity:1},an={intensity:.4};function cn(n){let e=new Set,t=[];for(let o of n){let r=o.vertices;if(!(r.length<2))for(let s=0;s<r.length;s++){let l=r[s],i=r[(s+1)%r.length],c=`${l[0]},${l[1]},${l[2]}`,u=`${i[0]},${i[1]},${i[2]}`,p=c<u?`${c}|${u}`:`${u}|${c}`;if(e.has(p))continue;e.add(p);let d={from:l,to:i,weight:2};o.color&&(d.color=o.color),t.push(d)}}return t}function _t(n){let e=n.polygons??[],t=n.mode??(e.length?"solid":"wireframe"),o=n.wireframe??(t==="wireframe"?cn(e):[]);return{camera:n.camera,grid:n.grid,polygons:e,wireframe:o,mode:t,directionalLight:n.directionalLight??ln,ambientLight:n.ambientLight??an,glyphPalette:n.glyphPalette??"default",useColors:n.useColors??!0,smoothShading:n.smoothShading??!1,creaseAngle:n.creaseAngle??60,doubleSided:n.doubleSided??!1,supersample:n.supersample??1,temporalBlend:n.temporalBlend??0,shadow:n.shadow,castShadowFlags:n.castShadowFlags??[],receiveShadowFlags:n.receiveShadowFlags??[],...n.depthBiases?{depthBiases:n.depthBiases}:{},...n.depthEpsilon?{depthEpsilon:n.depthEpsilon}:{}}}var nt=require("@glyphcss/core");var qn=" .:-=+*#%@".split(""),Un=" .:-=+*#%@".split(""),gt={default:{thin:"\xB7\u22C5\u2219\u02D9\xB7\u22C5\u2219".split(""),normal:"\u254B\u256C\u253C\u2573\u25C6\u25C7\u25CA\u25B2\u25B3\u25BC\u25BD\u25C8\u2B21\u2B22\u2234\u2235\u22A5\u2295\u2297\u2299\u229A\u229B".split(""),core:"\u2726\u2727\u2729\u25C9\u2299\u25CE".split(""),solid:" .:-=+*#%@".split("")},ascii:{thin:".'".split(""),normal:"+*x".split(""),core:"#@".split(""),solid:" .,:;!+=*xX#@".split("")},dots:{thin:"\xB7\u22C5".split(""),normal:"\u2022\u25CF".split(""),core:"\u25C9\u25CE".split(""),solid:" \xB7\u22C5\u2218\u2022\u25CF\u25C9\u25CE\u2B24".split("")},lines:{thin:"\u2500\u2502".split(""),normal:"\u2550\u2551".split(""),core:"\u2588".split(""),solid:" \u2500\u2550\u256C\u2551\u2588\u2593\u2592\u2591".split("")},blocks:{thin:"\u2591\u2581".split(""),normal:"\u2592\u2593\u258C\u2590\u2580\u2584".split(""),core:"\u2588".split(""),solid:" \u2591\u2592\u2593\u258C\u2590\u2588\u2580\u2584\u25A0".split("")},stars:{thin:"\xB7\u22C6".split(""),normal:"\u2726\u2727\u2729\u272A".split(""),core:"\u272B\u272C\u272D\u2605".split(""),solid:" \xB7\u22C6\u2217\u2726\u2727\u2729\u272A\u272B\u2605".split("")},arrows:{thin:"\xB7\u2219".split(""),normal:"\u2190\u2191\u2192\u2193".split(""),core:"\u2196\u2197\u2198\u2199\u2921\u2922".split(""),solid:" \xB7\u2219\u2191\u2197\u2192\u2198\u2193\u2199\u2190\u2196".split("")},braille:{thin:"\u2801\u2802\u2804\u2808".split(""),normal:"\u2803\u2805\u2806\u2809\u280A\u280B\u280C\u280D\u280E\u280F".split(""),core:"\u283F\u28FF".split(""),solid:" \u2801\u2803\u2807\u2827\u2837\u283F\u287F\u28FF".split("")},runes:{thin:".\xB7".split(""),normal:"\u16A0\u16A1\u16A2\u16A3\u16A4\u16A6\u16A8\u16B1\u16B2\u16B3\u16B7\u16B9\u16C3\u16C7\u16C9".split(""),core:"\u16DE\u16DF\u16E1\u16E2\u16E3".split(""),solid:" \xB7\u16A0\u16A3\u16A4\u16A8\u16B1\u16B7\u16DE\u16E2".split("")},math:{thin:"\u2219\u2218".split(""),normal:"\u2211\u220F\u222B\u221A\u221E\u2248\u2260\u2264\u2265\u2282\u2283\u2286\u2287".split(""),core:"\u222E\u222F\u2230\u2202".split(""),solid:" \u2219\u2218\u2211\u222B\u221A\u221E\u2248\u2295\u2297".split("")},binary:{thin:"\xB7.".split(""),normal:"01".split(""),core:"\u2588".split(""),solid:" .:01\u2588\u2588".split("")},hex:{thin:"\xB7\u2219".split(""),normal:"0123456789ABCDEF".split(""),core:"FFAA".split(""),solid:" 0123456789AF".split("")}},Kn=gt.default;function yt(n){return gt[n]??gt.default}function Ht(n){let{camera:e,grid:t,wireframe:o,mode:r}=n,{cols:s,rows:l,cellAspect:i}=t;if(r==="solid"){let d=n.supersample&&n.supersample>1?Math.floor(n.supersample):1;return un(n,s,l,i,d)}let c=yt(n.glyphPalette),u=new Uint8Array(s*l),p=n.useColors?new Array(s*l).fill(null):null;for(let d of o){let m=e.project(d.from,s,l,i),h=e.project(d.to,s,l,i);m[0]!==m[0]||h[0]!==h[0]||bn(u,p,m[0]|0,m[1]|0,h[0]|0,h[1]|0,d.weight??2,d.color??null,s,l)}return vn(u,p,s,l,c)}function un(n,e,t,o,r){let s=e*r,l=t*r,{camera:i,polygons:c,directionalLight:u,ambientLight:p,smoothShading:d,creaseAngle:m,doubleSided:h,castShadowFlags:f,receiveShadowFlags:b}=n,C=n.depthBiases,_=n.depthEpsilon??0,M=r>1?{zoom:i.zoom,eyeDepth:B=>i.eyeDepth(B),project:(B,V,X,Y)=>{let S=i.project(B,V,X,Y);return[V*.5+(S[0]-V*.5)*r,X*.5+(S[1]-X*.5)*r,S[2],S[3]]}}:i,x=yt(n.glyphPalette).solid,y=x.length-1,w=new Array(s*l).fill(" "),P=n.useColors,H=P?new Array(s*l).fill(null):null,v=new Float64Array(s*l).fill(-1/0),A=n.temporalBlend>0&&!!n.temporalHistory,L=A?new Float32Array(s*l*3).fill(NaN):null,a=u.direction,E=Math.hypot(a[0],a[1],a[2])||1,g=a[0]/E,G=a[1]/E,z=a[2]/E,F=u.intensity??1,T=p.intensity??.4,W=ze(u.color??"#ffffff"),R=ze(p.color??"#ffffff"),j=d&&m>0?gn(c,m):null,N=new Map,re=n.textureSamplers??null,k=n.shadow,q=k!=null&&f.length>0?fn(c,f,g,G,z):null,oe=k?.opacity??.25,K=k?.lift??.05,Z=k?.color??"#000000",ie=q?ze(Z):[0,0,0],O=globalThis.__glyphPerfDetail,Ke=O?performance.now():0,ge=[],J=n.shadeCache??null,Q=-1,ve=(B,V,X,Y)=>{if(q===null||!Y)return null;let S=q,I=Oe(B,S.right[0],S.right[1],S.right[2],S.up[0],S.up[1],S.up[2],S.dir[0],S.dir[1],S.dir[2],S.uMin,S.uMax,S.vMin,S.vMax),ee=Oe(V,S.right[0],S.right[1],S.right[2],S.up[0],S.up[1],S.up[2],S.dir[0],S.dir[1],S.dir[2],S.uMin,S.uMax,S.vMin,S.vMax),de=Oe(X,S.right[0],S.right[1],S.right[2],S.up[0],S.up[1],S.up[2],S.dir[0],S.dir[1],S.dir[2],S.uMin,S.uMax,S.vMin,S.vMax);return{map:S,luA:I[0],lvA:I[1],ldA:I[2],luB:ee[0],lvB:ee[1],ldB:ee[2],luC:de[0],lvC:de[1],ldC:de[2],lift:K,opacity:oe,shadowColorRgb:ie,shadowColorHex:Z,litCache:N}};for(let B=0;B<c.length;B++){let V=c[B],X=V.vertices;if(X.length<3)continue;let Y=V.uvs,S=null;if(re!==null&&Y&&Y.length>=X.length){let I=(0,nt.polygonTexture)(V);I&&(S=re.get(I)??null)}for(let I=0;I<X.length;I++)ge[I]=M.project(X[I],s,l,o);for(let I=1;I<X.length-1;I++){Q++;let ee=0,de=I,Ee=I+1,se=X[ee],pe=X[de],we=X[Ee],ae=ge[ee],ye=ge[de],xe=ge[Ee],it=(ae[0]!==ae[0]?1:0)+(ye[0]!==ye[0]?1:0)+(xe[0]!==xe[0]?1:0);if(it===3||it===0&&!h&&(ye[0]-ae[0])*(xe[1]-ae[1])-(ye[1]-ae[1])*(xe[0]-ae[0])>0)continue;let Ge,Le,Te,ke=null;if(J!==null&&J.iA[Q]!==void 0)Ge=J.iA[Q],Le=J.iB[Q],Te=J.iC[Q],ke=J.lit[Q];else{let $=pe[0]-se[0],me=pe[1]-se[1],Ae=pe[2]-se[2],he=we[0]-se[0],Je=we[1]-se[1],Qe=we[2]-se[2],et=me*Qe-Ae*Je,Ye=Ae*he-$*Qe,U=$*Je-me*he,D=Math.hypot(et,Ye,U)||1,te=et/D,fe=Ye/D,le=U/D,ce,_e,st,lt,at,ct,ut,dt,pt;if(j){let De=j[B],Me=De[ee],Fe=De[de],Ve=De[Ee];ce=Me[0],_e=Me[1],st=Me[2],lt=Fe[0],at=Fe[1],ct=Fe[2],ut=Ve[0],dt=Ve[1],pt=Ve[2]}else ce=lt=ut=te,_e=at=dt=fe,st=ct=pt=le;let St=ce*g+_e*G+st*z,xt=lt*g+at*G+ct*z,Mt=ut*g+dt*G+pt*z,Vt=h?Math.abs(St):Math.max(0,-St),Xt=h?Math.abs(xt):Math.max(0,-xt),$t=h?Math.abs(Mt):Math.max(0,-Mt);if(Ge=Math.min(1,T+Vt*F),Le=Math.min(1,T+Xt*F),Te=Math.min(1,T+$t*F),P){let De=(Ge+Le+Te)/3,Me=Math.max(0,De-T),Fe=V.color??"#ffffff",Ve=Me*255|0,Ct=`${Fe}:${Ve}`,tt=N.get(Ct);if(tt===void 0){let mt=ze(Fe),Wt=T*R[0]/255+Me*W[0]/255,jt=T*R[1]/255+Me*W[1]/255,qt=T*R[2]/255+Me*W[2]/255,Ut=Math.min(255,mt[0]*Wt),Kt=Math.min(255,mt[1]*jt),Zt=Math.min(255,mt[2]*qt);tt=`#${ne(Ut)}${ne(Kt)}${ne(Zt)}`,N.set(Ct,tt)}ke=tt}J!==null&&(J.iA[Q]=Ge,J.iB[Q]=Le,J.iC[Q]=Te,J.lit[Q]=ke)}let wt=b[B]??!1,He=1+(C?.[B]??0),At=null;if(S!==null&&Y){let $=Y[ee],me=Y[de],Ae=Y[Ee],he=Math.max(0,(Ge+Le+Te)/3-T);At={sampler:S,ua:$[0],va:$[1],ub:me[0],vb:me[1],uc:Ae[0],vc:Ae[1],tintR:T*R[0]/255+he*W[0]/255,tintG:T*R[1]/255+he*W[1]/255,tintB:T*R[2]/255+he*W[2]/255}}if(it===0)zt(ae[0],ae[1],(ae[3]??ae[2])*He,Ge,ye[0],ye[1],(ye[3]??ye[2])*He,Le,xe[0],xe[1],(xe[3]??xe[2])*He,Te,x,y,ke,w,H,v,s,l,ve(se,pe,we,wt),h,se,pe,we,L,_,At);else{let $=[],me=[],Ae=[se,pe,we],he=[Ge,Le,Te],Je=M.eyeDepth(se),Qe=M.eyeDepth(pe),et=M.eyeDepth(we),Ye=[Je,Qe,et];for(let U=0;U<3;U++){let D=(U+1)%3,te=Ye[U],fe=Ye[D];if(te>0&&($.push(Ae[U]),me.push(he[U])),te>0!=fe>0){let le=te/(te-fe),ce=Ae[U],_e=Ae[D];$.push([ce[0]+le*(_e[0]-ce[0]),ce[1]+le*(_e[1]-ce[1]),ce[2]+le*(_e[2]-ce[2])]),me.push(he[U]+le*(he[D]-he[U]))}}if($.length>=3){let U=$.map(D=>M.project(D,s,l,o));for(let D=1;D<$.length-1;D++){let te=U[0],fe=U[D],le=U[D+1],ce=(fe[0]-te[0])*(le[1]-te[1])-(fe[1]-te[1])*(le[0]-te[0]);!h&&ce>0||zt(te[0],te[1],(te[3]??te[2])*He,me[0],fe[0],fe[1],(fe[3]??fe[2])*He,me[D],le[0],le[1],(le[3]??le[2])*He,me[D+1],x,y,ke,w,H,v,s,l,ve($[0],$[D],$[D+1],wt),h,$[0],$[D],$[D+1],L,_,null)}}}}}O&&(O.loop??(O.loop=[])).push(performance.now()-Ke);let Et=O?performance.now():0,Pe=w,Se=H,Ze=L;if(r>1){let B=pn(w,H,v,L,e,t,r,x);Pe=B.glyphBuf,Se=B.colorBuf,Ze=B.worldPos}A&&dn(Pe,Se,Ze,e,t,o,x,n.temporalBlend,n.temporalHistory,i);let ot=yn(Pe,Se,e,t);return O&&(O.string??(O.string=[])).push(performance.now()-Et),ot}function dn(n,e,t,o,r,s,l,i,c,u){let p=o*r,d=l.length-1,m=new Map;for(let x=0;x<l.length;x++)m.set(l[x],x);let h=c.cam;(c.cols!==o||c.rows!==r||c.idx.length!==p)&&(c.cols=o,c.rows=r,c.idx=new Float32Array(p),c.r=new Float32Array(p),c.g=new Float32Array(p),c.b=new Float32Array(p),h=null);let f=null;if(h){let x=Ie({rotX:h.rotX,rotY:h.rotY,distance:h.distance,perspective:h.perspective,zoom:h.zoom,stretch:h.stretch});x.target=h.target,f=y=>x.project(y,o,r,s)}let b=new Float32Array(p),C=new Float32Array(p),_=new Float32Array(p),M=new Float32Array(p);for(let x=0;x<r;x++)for(let y=0;y<o;y++){let w=x*o+y,P=m.get(n[w])??0,H=0,v=0,A=0,L=e?e[w]:null;if(L){let k=ze(L);H=k[0],v=k[1],A=k[2]}let a=0,E=0,g=0,G=0,z=0,F=t[w*3];if(f&&F===F){let k=f([F,t[w*3+1],t[w*3+2]]),q=Math.round(k[0]),oe=Math.round(k[1]);if(k[0]===k[0]&&q>=0&&q<o&&oe>=0&&oe<r){let K=oe*o+q;E=c.idx[K],g=c.r[K],G=c.g[K],z=c.b[K],a=i}}let T=1-a,W=T*P+a*E,R=T*H+a*g,j=T*v+a*G,N=T*A+a*z;b[w]=W,C[w]=R,_[w]=j,M[w]=N;let re=Math.round(W);re<0?re=0:re>d&&(re=d),n[w]=l[re],e&&(e[w]=re===0?null:`#${ne(R)}${ne(j)}${ne(N)}`)}c.idx=b,c.r=C,c.g=_,c.b=M,c.cam={rotX:u.rotX,rotY:u.rotY,target:[u.target[0],u.target[1],u.target[2]],zoom:u.zoom,perspective:u.perspective,distance:u.distance,stretch:u.stretch}}function pn(n,e,t,o,r,s,l,i){let c=new Map;for(let b=0;b<i.length;b++)c.set(i[b],b);let u=i.length-1,p=r*l,d=new Array(r*s).fill(" "),m=e?new Array(r*s).fill(null):null,h=o?new Float32Array(r*s*3).fill(NaN):null,f=1/(l*l);for(let b=0;b<s;b++)for(let C=0;C<r;C++){let _=0,M=0,x=0,y=0,w=0,P=0,H=0,v=0;for(let a=0;a<l;a++){let E=(b*l+a)*p+C*l;for(let g=0;g<l;g++){let G=E+g;if(t[G]!==-1/0){if(_+=c.get(n[G])??0,M++,m){let z=e[G];if(z){let F=ze(z);x+=F[0],y+=F[1],w+=F[2]}}h&&(P+=o[G*3],H+=o[G*3+1],v+=o[G*3+2])}}}let A=b*r+C;if(M===0)continue;let L=Math.round(_*f);L<0?L=0:L>u&&(L=u),d[A]=i[L],m&&(m[A]=`#${ne(x/M)}${ne(y/M)}${ne(w/M)}`),h&&(h[A*3]=P/M,h[A*3+1]=H/M,h[A*3+2]=v/M)}return{glyphBuf:d,colorBuf:m,worldPos:h}}var mn=new Float64Array([(0+.5)/16,(8+.5)/16,(2+.5)/16,(10+.5)/16,(12+.5)/16,(4+.5)/16,(14+.5)/16,(6+.5)/16,(3+.5)/16,(11+.5)/16,(1+.5)/16,(9+.5)/16,(15+.5)/16,(7+.5)/16,(13+.5)/16,(5+.5)/16]),be=256;function Oe(n,e,t,o,r,s,l,i,c,u,p,d,m,h){let f=e*n[0]+t*n[1]+o*n[2],b=r*n[0]+s*n[1]+l*n[2],C=-(i*n[0]+c*n[1]+u*n[2]),_=(f-p)/(d-p)*(be-1),M=(b-m)/(h-m)*(be-1);return[_,M,C]}function hn(n,e,t,o){let r=e[0],s=e[1],l=e[2],i=t[0],c=t[1],u=t[2],p=o[0],d=o[1],m=o[2],h=(i-r)*(d-s)-(c-s)*(p-r);if(h===0)return;let f=1/h,b=r<i?r:i;p<b&&(b=p);let C=r>i?r:i;p>C&&(C=p);let _=s<c?s:c;d<_&&(_=d);let M=s>c?s:c;d>M&&(M=d);let x=Math.max(0,Math.ceil(b)),y=Math.min(be-1,Math.floor(C)),w=Math.max(0,Math.ceil(_)),P=Math.min(be-1,Math.floor(M));if(x>y||w>P)return;let H=h>0;for(let v=w;v<=P;v++)for(let A=x;A<=y;A++){let L=A,a=v,E=(i-L)*(d-a)-(c-a)*(p-L),g=(p-L)*(s-a)-(d-a)*(r-L),G=(r-L)*(c-a)-(s-a)*(i-L);if(H?E<0||g<0||G<0:E>0||g>0||G>0)continue;let z=(E*l+g*u+G*m)*f,F=v*be+A;z>n[F]&&(n[F]=z)}}function fn(n,e,t,o,r){let s,l,i;Math.abs(t)<.9?(s=0,l=r,i=-o):(s=-r,l=0,i=t);let c=Math.hypot(s,l,i);s/=c,l/=c,i/=c;let u=l*r-i*o,p=i*t-s*r,d=s*o-l*t,m=1/0,h=-1/0,f=1/0,b=-1/0,C=!1;for(let y=0;y<n.length;y++)if(e[y]){C=!0;for(let w of n[y].vertices){let P=s*w[0]+l*w[1]+i*w[2],H=u*w[0]+p*w[1]+d*w[2];P<m&&(m=P),P>h&&(h=P),H<f&&(f=H),H>b&&(b=H)}}if(!C)return null;let _=(h-m)*.05+.01,M=(b-f)*.05+.01;m-=_,h+=_,f-=M,b+=M;let x=new Float64Array(be*be).fill(-1/0);for(let y=0;y<n.length;y++){if(!e[y])continue;let w=n[y].vertices;if(!(w.length<3))for(let P=1;P<w.length-1;P++){let H=w[0],v=w[P],A=w[P+1],L=Oe(H,s,l,i,u,p,d,t,o,r,m,h,f,b),a=Oe(v,s,l,i,u,p,d,t,o,r,m,h,f,b),E=Oe(A,s,l,i,u,p,d,t,o,r,m,h,f,b);hn(x,L,a,E)}}return{buf:x,right:[s,l,i],up:[u,p,d],dir:[t,o,r],uMin:m,uMax:h,vMin:f,vMax:b}}function zt(n,e,t,o,r,s,l,i,c,u,p,d,m,h,f,b,C,_,M,x,y,w,P,H,v,A,L,a){let E=(r-n)*(u-e)-(s-e)*(c-n);if(E===0||!w&&E>0)return;let g=1/E,G=E>0,z=n<r?n:r;c<z&&(z=c);let F=n>r?n:r;c>F&&(F=c);let T=e<s?e:s;u<T&&(T=u);let W=e>s?e:s;u>W&&(W=u);let R=Math.max(0,Math.ceil(z)),j=Math.min(M-1,Math.floor(F)),N=Math.max(0,Math.ceil(T)),re=Math.min(x-1,Math.floor(W));if(!(R>j||N>re))for(let k=N;k<=re;k++){let q=k;for(let oe=R;oe<=j;oe++){let K=oe,Z=(r-K)*(u-q)-(s-q)*(c-K),ie=(c-K)*(e-q)-(u-q)*(n-K),O=(n-K)*(s-q)-(e-q)*(r-K);if(G?Z<0||ie<0||O<0:Z>0||ie>0||O>0)continue;let Ke=(Z*t+ie*l+O*p)*g,ge=k*M+oe,J=_[ge];if(Ke>(J>0?J*(1-L):J)){if(_[ge]=Ke,A!==null){let V=ge*3;A[V]=(Z*P[0]+ie*H[0]+O*v[0])*g,A[V+1]=(Z*P[1]+ie*H[1]+O*v[1])*g,A[V+2]=(Z*P[2]+ie*H[2]+O*v[2])*g}let Q=(Z*o+ie*i+O*d)*g,ve=f;if(a!==null){let V=(Z*a.ua+ie*a.ub+O*a.uc)*g,X=(Z*a.va+ie*a.vb+O*a.vc)*g,Y=(0,nt.sampleTexel)(a.sampler,V,X);if(Y!==null&&Y.a>8){let S=Y.r*a.tintR|0;S>255&&(S=255);let I=Y.g*a.tintG|0;I>255&&(I=255);let ee=Y.b*a.tintB|0;ee>255&&(ee=255),ve=`#${ne(S)}${ne(I)}${ne(ee)}`,Q*=(.299*Y.r+.587*Y.g+.114*Y.b)/255}}let Pe=(Q<0?0:Q>1?1:Q)*h,Se=Pe|0,Ze=Pe-Se,ot=mn[(k&3)*4+(oe&3)],B=Ze>ot&&Se<h?Se+1:Se;if(B>h&&(B=h),y!==null){let V=(Z*y.luA+ie*y.luB+O*y.luC)*g,X=(Z*y.lvA+ie*y.lvB+O*y.lvC)*g,Y=(Z*y.ldA+ie*y.ldB+O*y.ldC)*g,S=V|0,I=X|0;if(S>=0&&S<be&&I>=0&&I<be){let ee=y.map.buf[I*be+S];if(ee>-1/0&&Y+y.lift<ee&&(B=Math.max(0,B-Math.round(y.opacity*h)),ve!==null)){let de=`shadow:${ve}:${B}`,Ee=y.litCache.get(de);if(Ee===void 0){let se=ze(ve),pe=y.shadowColorRgb,we=Math.round(se[0]*(1-y.opacity)+pe[0]*y.opacity),ae=Math.round(se[1]*(1-y.opacity)+pe[1]*y.opacity),ye=Math.round(se[2]*(1-y.opacity)+pe[2]*y.opacity);Ee=`#${ne(we)}${ne(ae)}${ne(ye)}`,y.litCache.set(de,Ee)}ve=Ee}}}b[ge]=m[B],C&&(C[ge]=ve)}}}}function gn(n,e){let t=n.length,o=new Array(t);for(let i=0;i<t;i++){let c=n[i].vertices;if(c.length<3){o[i]=[0,0,0];continue}let u=c[0],p=c[1],d=c[2],m=p[0]-u[0],h=p[1]-u[1],f=p[2]-u[2],b=d[0]-u[0],C=d[1]-u[1],_=d[2]-u[2],M=h*_-f*C,x=f*b-m*_,y=m*C-h*b,w=Math.hypot(M,x,y)||1;o[i]=[M/w,x/w,y/w]}let r=new Map;for(let i=0;i<t;i++){let c=n[i].vertices;for(let u=0;u<c.length;u++){let p=c[u],d=`${p[0]},${p[1]},${p[2]}`,m=r.get(d);m||(m=[],r.set(d,m)),(m.length===0||m[m.length-1]!==i)&&m.push(i)}}let s=Math.cos(e*Math.PI/180),l=new Array(t);for(let i=0;i<t;i++){let c=n[i].vertices,u=o[i],p=new Array(c.length);for(let d=0;d<c.length;d++){let m=c[d],h=r.get(`${m[0]},${m[1]},${m[2]}`),f=0,b=0,C=0;for(let M=0;M<h.length;M++){let x=h[M],y=o[x];u[0]*y[0]+u[1]*y[1]+u[2]*y[2]>=s&&(f+=y[0],b+=y[1],C+=y[2])}let _=Math.hypot(f,b,C)||1;p[d]=[f/_,b/_,C/_]}l[i]=p}return l}function yn(n,e,t,o){let r=[],s=null,l="",i=()=>{l&&(s!==null?r.push(`<span style="color:${s}">${l}</span>`):r.push(l),l="")};for(let c=0;c<o;c++){for(let u=0;u<t;u++){let p=c*t+u,d=n[p],m=e&&d!==" "?e[p]??null:null;m!==s&&(i(),s=m),l+=d}i(),s=null,c<o-1&&r.push(`
|
|
2
|
+
`)}return r.join("")}function bn(n,e,t,o,r,s,l,i,c,u){let p=Math.abs(r-t),d=-Math.abs(s-o),m=t<r?1:-1,h=o<s?1:-1,f=p+d;for(;;){if(t>=0&&t<c&&o>=0&&o<u){let C=o*c+t;n[C]<l&&(n[C]=l,e&&(e[C]=i))}if(t===r&&o===s)break;let b=2*f;b>=d&&(f+=d,t+=m),b<=p&&(f+=p,o+=h)}}function vn(n,e,t,o,r){let s=[],l=null,i="",c=()=>{i&&(l!==null?s.push(`<span style="color:${l}">${i}</span>`):s.push(i),i="")};for(let u=0;u<o;u++){for(let p=0;p<t;p++){let d=u*t+p,m=n[d],h,f;m===0?(h=" ",f=null):(h=m===1?r.thin[Math.random()*r.thin.length|0]:m===2?r.normal[Math.random()*r.normal.length|0]:r.core[Math.random()*r.core.length|0],f=e?e[d]??null:null),f!==l&&(c(),l=f),i+=h}c(),l=null,u<o-1&&s.push(`
|
|
3
|
+
`)}return s.join("")}var Pt=new Map;function ze(n){let e=Pt.get(n);if(e!==void 0)return e;let t=En(n);return Pt.set(n,t),t}function En(n){let e=n.startsWith("#")?n.slice(1):n;if(e.length===3){let t=parseInt(e[0]+e[0],16),o=parseInt(e[1]+e[1],16),r=parseInt(e[2]+e[2],16);return[t||0,o||0,r||0]}if(e.length===6){let t=parseInt(e.slice(0,2),16),o=parseInt(e.slice(2,4),16),r=parseInt(e.slice(4,6),16);return[t||0,o||0,r||0]}return[255,255,255]}function ne(n){let e=Math.max(0,Math.min(255,n|0)).toString(16);return e.length===1?"0"+e:e}var Ft="glyph-styles";function It(n){let e=n??(typeof document<"u"?document:void 0);if(!e||e.getElementById(Ft))return;let t=e.createElement("style");t.id=Ft,t.textContent=wn,e.head.appendChild(t)}var wn=`
|
|
4
4
|
/* \u2500\u2500 React / Vue host wrapper \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
|
|
5
5
|
|
|
6
6
|
.glyph-host {
|
|
@@ -59,4 +59,5 @@
|
|
|
59
59
|
the content from the 3D vertex being labelled. */
|
|
60
60
|
transform: translate(-50%, -50%);
|
|
61
61
|
}
|
|
62
|
-
`;function Ne(n,t,e,o,r){return n.map(a=>{let[i,s,c]=t.project(a.at,e,o,r),l=c>-3&&i>=0&&i<e&&s>=0&&s<o;return{id:a.id,col:i,row:s,depth:c,visible:l}})}var bt=1;function vt(n,t){let{position:e,scale:o,rotation:r}=t;if(!e&&!o&&!r)return n;let[a,i,s]=e??[0,0,0],c=1,l=1,p=1;o!==void 0&&(typeof o=="number"?c=l=p=o:[c,l,p]=o);let[h,f,y]=r??[0,0,0],g=Math.cos(h),L=Math.sin(h),E=Math.cos(f),w=Math.sin(f),x=Math.cos(y),M=Math.sin(y);function C(d){let b=d[0]*c,u=d[1]*l,v=d[2]*p,A=x*b-M*u,G=M*b+x*u,m=v;return b=E*A+w*m,u=G,v=-w*A+E*m,A=b,G=g*u-L*v,m=L*u+g*v,[A+a,G+i,m+s]}return n.map(d=>({...d,vertices:d.vertices.map(C)}))}function Ye(n,t={}){Ie(n.ownerDocument??void 0);let e={mode:t.mode??"solid",glyphPalette:t.glyphPalette??"default",useColors:t.useColors??!0,cols:t.cols??80,rows:t.rows??24,cellAspect:t.cellAspect??2,directionalLight:t.directionalLight??{direction:[.5,.7,.5],intensity:1},ambientLight:t.ambientLight??{intensity:.4},camera:t.camera??le(),smoothShading:t.smoothShading??!1,creaseAngle:t.creaseAngle??60,autoSize:t.autoSize??!1},o=n.ownerDocument.createElement("div");o.className="glyph-scene";let r=n.ownerDocument.createElement("pre");r.className="glyph-output";let a=n.ownerDocument.createElement("div");a.className="glyph-hotspot-layer",o.appendChild(r),o.appendChild(a),n.appendChild(o);let i=new Map,s=[],c=!1;function l(){c||(c=!0,Promise.resolve().then(()=>{c=!1,p()}))}function p(){let d=[];for(let v of i.values()){let A=vt(v.polygons,v.transform);for(let G of A)d.push(G)}let b=Oe({camera:e.camera,grid:{cols:e.cols,rows:e.rows,cellAspect:e.cellAspect},polygons:d,mode:e.mode,directionalLight:e.directionalLight,ambientLight:e.ambientLight,glyphPalette:e.glyphPalette,useColors:e.useColors,smoothShading:e.smoothShading,creaseAngle:e.creaseAngle}),u=Re(b);e.useColors?r.innerHTML=u:r.textContent=u,h()}function h(){let{cols:d,rows:b,cellAspect:u,camera:v}=e,A=Ne(s.map(S=>S.hotspot),v,d,b,u),G=r.getBoundingClientRect(),m=d>0?G.width/d:8,_=b>0?G.height/b:16;for(let S=0;S<s.length;S++){let{el:T}=s[S],z=A[S];z.visible?(T.style.display="",T.style.left=`${(z.col+.5)*m}px`,T.style.top=`${(z.row+.5)*_}px`,T.style.zIndex=String(Math.round(z.depth*1e3))):T.style.display="none"}}function f(d,b={}){let u=bt++;return i.set(u,{id:u,polygons:d,transform:b}),l(),{get id(){return u},get name(){return i.get(u)?.transform.id},get polygons(){return d},setTransform(v){let A=i.get(u);A&&(A.transform=v,l())},dispose(){i.delete(u),l()}}}function y(d,b){let u=n.ownerDocument.createElement("div");u.className="glyph-hotspot",u.setAttribute("data-hotspot-id",d.id);let[v,A]=d.size??[1,1];u.style.position="absolute",u.style.width=`${v}ch`,u.style.height=`${A*e.cellAspect}ch`,b&&u.addEventListener("click",b),a.appendChild(u);let G={hotspot:{id:d.id,at:d.at,size:d.size},el:u,onClick:b};return s.push(G),l(),{get el(){return u},remove(){let m=s.indexOf(G);m>=0&&s.splice(m,1),b&&u.removeEventListener("click",b),a.removeChild(u),l()}}}function g(){p()}function L(d){d.mode!==void 0&&(e.mode=d.mode),d.glyphPalette!==void 0&&(e.glyphPalette=d.glyphPalette),d.useColors!==void 0&&(e.useColors=d.useColors),d.cols!==void 0&&(e.cols=d.cols),d.rows!==void 0&&(e.rows=d.rows),d.cellAspect!==void 0&&(e.cellAspect=d.cellAspect),d.directionalLight!==void 0&&(e.directionalLight=d.directionalLight),d.ambientLight!==void 0&&(e.ambientLight=d.ambientLight),d.camera!==void 0&&(e.camera=d.camera),d.smoothShading!==void 0&&(e.smoothShading=d.smoothShading),d.creaseAngle!==void 0&&(e.creaseAngle=d.creaseAngle),d.autoSize!==void 0&&(e.autoSize=d.autoSize,e.autoSize&&!M&&typeof ResizeObserver<"u"?(M=new ResizeObserver(()=>x()),M.observe(n),x()):!e.autoSize&&M&&(M.disconnect(),M=null)),l()}function E(){return{...e}}function w(){let d=n.ownerDocument.createElement("span");d.textContent="M",d.style.cssText="position:absolute;visibility:hidden;font-family:inherit;font-size:inherit;line-height:inherit;white-space:pre;padding:0;margin:0",r.appendChild(d);let b=d.getBoundingClientRect();return d.remove(),{w:b.width||8,h:b.height||16}}function x(){let d=n.clientWidth,b=n.clientHeight;if(!d||!b)return;let u=w(),v=Math.max(20,Math.floor(d/u.w)),A=Math.max(8,Math.floor(b/u.h)),G=u.h/u.w,m=!1;e.cols!==v&&(e.cols=v,m=!0),e.rows!==A&&(e.rows=A,m=!0),Math.abs(e.cellAspect-G)>.01&&(e.cellAspect=G,m=!0),m&&l()}let M=null;e.autoSize&&typeof ResizeObserver<"u"&&(M=new ResizeObserver(()=>x()),M.observe(n),x());function C(){M&&(M.disconnect(),M=null),i.clear(),n.contains(o)&&n.removeChild(o)}return l(),{get host(){return n},get output(){return r},get camera(){return e.camera},add:f,addHotspot:y,rerender:g,setOptions:L,getOptions:E,fit:x,destroy:C}}var Et=typeof HTMLElement<"u"?HTMLElement:class{},Mt=["mode","glyph-palette","use-colors","cols","rows","cell-aspect","directional-direction","directional-intensity","ambient-intensity","auto-size"];function J(n){if(n==null)return;let t=parseFloat(n);return Number.isFinite(t)?t:void 0}function At(n){if(n==="wireframe"||n==="solid"||n==="voxel")return n}function Ct(n){if(n!==null){if(n==="false")return!1;if(n==="true"||n==="")return!0}}var Q=class extends Et{constructor(){super(...arguments);this._scene=null}static get observedAttributes(){return[...Mt]}getScene(){return this._scene}_readOptions(){let e={},o=At(this.getAttribute("mode"));o!==void 0&&(e.mode=o);let r=this.getAttribute("glyph-palette");r&&(e.glyphPalette=r);let a=Ct(this.getAttribute("use-colors"));a!==void 0&&(e.useColors=a);let i=J(this.getAttribute("cols"));i!==void 0&&(e.cols=i);let s=J(this.getAttribute("rows"));s!==void 0&&(e.rows=s);let c=J(this.getAttribute("cell-aspect"));c!==void 0&&(e.cellAspect=c);let l=J(this.getAttribute("directional-intensity"));l!==void 0&&(e.directionalLight={direction:[.5,.7,.5],intensity:l});let p=J(this.getAttribute("ambient-intensity"));return p!==void 0&&(e.ambientLight={intensity:p}),this.hasAttribute("auto-size")&&(e.autoSize=!0),e}_findCameraAncestor(){let e=this.parentElement;for(;e;){let o=e.tagName.toLowerCase();if(o==="glyph-perspective-camera"||o==="glyph-orthographic-camera"||o==="glyph-camera")return e;e=e.parentElement}return null}_initScene(e){let o=typeof e.getCamera=="function"?e.getCamera():void 0,r=this._readOptions();o&&(r.camera=o),this._scene=Ye(this,r),this.dispatchEvent(new CustomEvent("glyphcss:scene-ready",{bubbles:!1}))}connectedCallback(){if(this._scene)return;let e=this._findCameraAncestor();if(!e)throw new Error("glyphcss: <glyph-scene> must be placed inside a <glyph-camera>, <glyph-perspective-camera>, or <glyph-orthographic-camera>.");if((typeof e.getCamera=="function"?e.getCamera():null)!==null)this._initScene(e);else{let r=()=>{e.removeEventListener("glyph:camera-ready",r),this._scene||this._initScene(e)};e.addEventListener("glyph:camera-ready",r)}}rerender(){this._scene?.rerender()}disconnectedCallback(){this._scene&&(this._scene.destroy(),this._scene=null)}attributeChangedCallback(e,o,r){o!==r&&this._scene&&this._scene.setOptions(this._readOptions())}};var $=require("@glyphcss/core"),Gt=typeof HTMLElement<"u"?HTMLElement:class{},xt=["src","geometry","size","color","position","scale","rotation","normalize"];function Lt(n){let t=(0,$.computeSceneBbox)(n),e=(t.min[0]+t.max[0])/2,o=(t.min[1]+t.max[1])/2,r=(t.min[2]+t.max[2])/2,i=2/(Math.max(t.max[0]-t.min[0],t.max[1]-t.min[1],t.max[2]-t.min[2])||1);return n.map(s=>({...s,vertices:s.vertices.map(c=>[(c[0]-e)*i,(c[1]-o)*i,(c[2]-r)*i])}))}function Ge(n){if(!n)return;let t=n.split(",").map(e=>parseFloat(e.trim()));if(!(t.length!==3||t.some(e=>!Number.isFinite(e))))return[t[0],t[1],t[2]]}function wt(n){if(n){if(!n.includes(",")){let t=parseFloat(n);return Number.isFinite(t)?t:void 0}return Ge(n)}}function _t(n){return n.closest("glyph-scene")??null}var ee=class extends Gt{constructor(){super(...arguments);this._handle=null;this._loadToken=0}static get observedAttributes(){return[...xt]}getMeshHandle(){return this._handle}connectedCallback(){this._maybeLoad()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(e,o,r){if(o!==r){if(e==="src"||e==="geometry"||e==="size"||e==="color"){this._tearDown(),this._maybeLoad();return}this._handle&&this._handle.setTransform(this._readTransform())}}_readTransform(){return{position:Ge(this.getAttribute("position")),scale:wt(this.getAttribute("scale")),rotation:Ge(this.getAttribute("rotation"))}}_tearDown(){if(this._loadToken+=1,this._handle){try{this._handle.dispose()}catch{}this._handle=null}}async _maybeLoad(){let e=this.getAttribute("src"),o=this.getAttribute("geometry"),r=_t(this);if(r){if(!r.getScene()){let a=()=>{r.removeEventListener("glyphcss:scene-ready",a),this._maybeLoad()};r.addEventListener("glyphcss:scene-ready",a);return}if(e){let a=++this._loadToken,i;try{i=await(0,$.loadMesh)(e)}catch(p){this.dispatchEvent(new CustomEvent("glyphcss:error",{detail:p,bubbles:!0}));return}if(a!==this._loadToken){try{i.dispose()}catch{}return}let s=r.getScene();if(!s){try{i.dispose()}catch{}return}let l=this.hasAttribute("normalize")?Lt(i.polygons):i.polygons;this._handle=s.add(l,this._readTransform()),this.dispatchEvent(new CustomEvent("glyphcss:loaded",{detail:{polygons:l},bubbles:!0}));return}if(o){let a=r.getScene();if(!a)return;let i=this.getAttribute("size"),s=i!==null?parseFloat(i):1,c=this.getAttribute("color")??void 0,l;try{l=(0,$.resolveGeometry)(o,{size:Number.isFinite(s)?s:1,color:c})}catch(p){this.dispatchEvent(new CustomEvent("glyphcss:error",{detail:p,bubbles:!0}));return}this._handle=a.add(l,this._readTransform()),this.dispatchEvent(new CustomEvent("glyphcss:loaded",{detail:{polygons:l},bubbles:!0}))}}}};var St=typeof HTMLElement<"u"?HTMLElement:class{};function zt(n){if(!n)return;let t=n.split(",").map(e=>parseFloat(e.trim()));if(!(t.length!==3||t.some(e=>!Number.isFinite(e))))return[t[0],t[1],t[2]]}function Tt(n){if(!n)return;let t=n.split(",").map(e=>parseFloat(e.trim()));if(!(t.length!==2||t.some(e=>!Number.isFinite(e))))return[t[0],t[1]]}function Ht(n){return n.closest("glyph-scene")??null}var te=class extends St{constructor(){super(...arguments);this._handle=null}static get observedAttributes(){return["at","size","hotspot-id"]}connectedCallback(){this._register()}disconnectedCallback(){this._handle&&this._unregister()}attributeChangedCallback(e,o,r){o!==r&&(this._handle&&this._unregister(),this._register())}_unregister(){if(!this._handle)return;let e=this._handle.el;for(;e.firstChild;)this.appendChild(e.firstChild);this._handle.remove(),this._handle=null}_register(){let e=zt(this.getAttribute("at"));if(!e)return;let o=Ht(this);if(!o)return;if(!o.getScene()){let c=()=>{o.removeEventListener("glyphcss:scene-ready",c),this._register()};o.addEventListener("glyphcss:scene-ready",c);return}let r=o.getScene();if(!r)return;let a=this.getAttribute("hotspot-id")??this.getAttribute("id")??String(Math.random()),i=Tt(this.getAttribute("size"));this._handle=r.addHotspot({id:a,at:e,size:i},()=>this.dispatchEvent(new CustomEvent("glyphcss:hotspot-click",{detail:{id:a},bubbles:!0})));let s=this._handle.el;for(;this.firstChild;)s.appendChild(this.firstChild)}};var Pt=typeof HTMLElement<"u"?HTMLElement:class{};function k(n){if(n==null)return;let t=parseFloat(n);return Number.isFinite(t)?t:void 0}var ne=class extends Pt{constructor(){super(...arguments);this._camera=null}static get observedAttributes(){return["rot-x","rot-y","distance","zoom","stretch"]}getCamera(){return this._camera}connectedCallback(){this._camera=le({rotX:k(this.getAttribute("rot-x")),rotY:k(this.getAttribute("rot-y")),distance:k(this.getAttribute("distance")),zoom:k(this.getAttribute("zoom")),stretch:k(this.getAttribute("stretch"))}),this.dispatchEvent(new CustomEvent("glyph:camera-ready",{bubbles:!1}))}disconnectedCallback(){this._camera=null}attributeChangedCallback(e,o,r){if(o===r)return;let a=this._camera;if(!a)return;let i=k(this.getAttribute("rot-x")),s=k(this.getAttribute("rot-y")),c=k(this.getAttribute("distance")),l=k(this.getAttribute("zoom")),p=k(this.getAttribute("stretch")),h=!1;i!==void 0&&a.rotX!==i&&(a.rotX=i,h=!0),s!==void 0&&a.rotY!==s&&(a.rotY=s,h=!0),c!==void 0&&a.distance!==c&&(a.distance=c,h=!0),l!==void 0&&a.zoom!==l&&(a.zoom=l,h=!0),p!==void 0&&a.stretch!==p&&(a.stretch=p,h=!0),h&&this.querySelector("glyph-scene")?.rerender?.()}};var Ot=typeof HTMLElement<"u"?HTMLElement:class{};function W(n){if(n==null)return;let t=parseFloat(n);return Number.isFinite(t)?t:void 0}var j=class extends Ot{constructor(){super(...arguments);this._camera=null}static get observedAttributes(){return["rot-x","rot-y","zoom"]}getCamera(){return this._camera}connectedCallback(){this._camera=Pe({rotX:W(this.getAttribute("rot-x")),rotY:W(this.getAttribute("rot-y")),zoom:W(this.getAttribute("zoom"))}),this.dispatchEvent(new CustomEvent("glyph:camera-ready",{bubbles:!1}))}disconnectedCallback(){this._camera=null}attributeChangedCallback(e,o,r){if(o===r)return;let a=this._camera;if(!a)return;let i=W(this.getAttribute("rot-x")),s=W(this.getAttribute("rot-y")),c=W(this.getAttribute("zoom")),l=!1;i!==void 0&&a.rotX!==i&&(a.rotX=i,l=!0),s!==void 0&&a.rotY!==s&&(a.rotY=s,l=!0),c!==void 0&&a.zoom!==c&&(a.zoom=c,l=!0),l&&this.querySelector("glyph-scene")?.rerender?.()}};function Fe(n,t={}){let e=n.host,o=t.drag??!0,r=t.wheel??!0,a=Xe(t.invert),i=t.animate??!1,s=!1,c=!1,l=null,p=null,h=null,f={x:0,y:0},y=n.camera;function g(u){if(!(!o||s)&&h===null&&u.isPrimary!==!1){u.preventDefault(),h=u.pointerId,f={x:u.clientX,y:u.clientY},e.style.cursor="grabbing";try{u.target.setPointerCapture(u.pointerId)}catch{}i&&i.pauseOnInteraction!==!1&&(c=!0)}}function L(u){if(h===null||u.pointerId!==h||!o||s)return;u.preventDefault();let v=u.clientX-f.x,A=u.clientY-f.y;f={x:u.clientX,y:u.clientY};let G=a,_=1/4*Math.PI/180;y.rotY=y.rotY-v*_*G,y.rotX=Math.max(-Math.PI/2,Math.min(Math.PI/2,y.rotX-A*_*G)),n.rerender()}function E(u){if(h===u.pointerId){h=null,e.style.cursor=o&&!s?"grab":"";try{u.target.releasePointerCapture(u.pointerId)}catch{}i&&(c=!1)}}function w(u){if(!r||s)return;u.preventDefault();let v=u.deltaY*.001;y.zoom=Math.max(.05,Math.min(10,y.zoom*(1-v))),n.rerender()}function x(u){if(!(s||!i)){if(!c){let v=p!==null?Math.min(u-p,50):16.67,A=typeof i=="object"&&i.speed?i.speed:.3,G=typeof i=="object"&&i.axis?i.axis:"y",m=A*(Math.PI/180)*(v/16.67);G==="y"?y.rotY=y.rotY+m:y.rotX=y.rotX+m,n.rerender()}p=u,l=requestAnimationFrame(x)}}function M(){l===null&&typeof requestAnimationFrame<"u"&&i&&(l=requestAnimationFrame(x))}function C(){l!==null&&(typeof cancelAnimationFrame<"u"&&cancelAnimationFrame(l),l=null),p=null}function d(){e.addEventListener("pointerdown",g),e.addEventListener("pointermove",L),e.addEventListener("pointerup",E),e.addEventListener("pointercancel",E),e.addEventListener("wheel",w,{passive:!1}),e.style.cursor=o?"grab":"",e.style.touchAction="none",e.style.userSelect="none"}function b(){e.removeEventListener("pointerdown",g),e.removeEventListener("pointermove",L),e.removeEventListener("pointerup",E),e.removeEventListener("pointercancel",E),e.removeEventListener("wheel",w),e.style.cursor="",e.style.touchAction="",e.style.userSelect=""}return d(),M(),{update(u){let v=!!i;o=u.drag??o,r=u.wheel??r,a=Xe(u.invert),i=u.animate??i,!s&&h===null&&(e.style.cursor=o?"grab":"");let A=!!i;v&&!A?C():!v&&A&&M()},pause(){s||(s=!0,b(),C(),h=null,c=!1)},resume(){s&&(s=!1,d(),M())},destroy(){s||b(),C(),s=!0}}}function Xe(n){return n===void 0||n===!1?1:n===!0?-1:n}var Rt=typeof HTMLElement<"u"?HTMLElement:class{};function kt(n){if(n==null)return;let t=parseFloat(n);return Number.isFinite(t)?t:void 0}function xe(n){if(n!==null){if(n==="false")return!1;if(n==="true"||n==="")return!0}}function It(n){return n.closest("glyph-scene")??null}var re=class extends Rt{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return["drag","wheel","invert","animate-speed","animate-axis"]}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(e,o,r){o!==r&&this._controls?.update(this._readOptions())}_readOptions(){let e=xe(this.getAttribute("drag")),o=xe(this.getAttribute("wheel")),r=xe(this.getAttribute("invert")),a=kt(this.getAttribute("animate-speed")),i=this.getAttribute("animate-axis")==="x"?"x":"y";return{...e!==void 0?{drag:e}:{},...o!==void 0?{wheel:o}:{},...r!==void 0?{invert:r}:{},...a!==void 0?{animate:{speed:a,axis:i}}:{}}}_attach(){if(this._controls)return;let e=It(this);if(!e)return;let o=e.getScene();if(!o){let r=()=>{e.removeEventListener("glyphcss:scene-ready",r),this._attach()};e.addEventListener("glyphcss:scene-ready",r);return}this._controls=Fe(o,this._readOptions())}};function Ve(n,t={}){let e=n.host,o=t.drag??!0,r=t.wheel??!0,a=De(t.invert),i=t.animate??!1,s=!1,c=!1,l=null,p=null,h=null,f={x:0,y:0},y=!1,g=n.camera,L=1/4*Math.PI/180,E=.02;function w(m){if(!(!o||s)&&h===null&&m.isPrimary!==!1){m.preventDefault(),h=m.pointerId,f={x:m.clientX,y:m.clientY},y=m.button===2,e.style.cursor="grabbing";try{m.target.setPointerCapture(m.pointerId)}catch{}i&&i.pauseOnInteraction!==!1&&(c=!0)}}function x(m){if(h===null||m.pointerId!==h||!o||s)return;m.preventDefault();let _=m.clientX-f.x,S=m.clientY-f.y;f={x:m.clientX,y:m.clientY};let T=a;if(y||m.shiftKey)g.rotY=g.rotY-_*L*T,g.rotX=Math.max(-Math.PI/2,Math.min(Math.PI/2,g.rotX+S*L*T));else{let z=g.target;g.target=[z[0]-_*E/g.zoom,z[1]-S*E/g.zoom,z[2]]}n.rerender()}function M(m){if(h===m.pointerId){h=null,y=!1,e.style.cursor=o&&!s?"grab":"";try{m.target.releasePointerCapture(m.pointerId)}catch{}i&&(c=!1)}}function C(m){m.preventDefault()}function d(m){if(!r||s)return;m.preventDefault();let _=m.deltaY*.001;g.zoom=Math.max(.05,Math.min(10,g.zoom*(1-_))),n.rerender()}function b(m){if(!(s||!i)){if(!c){let _=p!==null?Math.min(m-p,50):16.67,S=typeof i=="object"&&i.speed?i.speed:.3,T=typeof i=="object"&&i.axis?i.axis:"y",z=S*(Math.PI/180)*(_/16.67);T==="y"?g.rotY=g.rotY+z:g.rotX=g.rotX+z,n.rerender()}p=m,l=requestAnimationFrame(b)}}function u(){l===null&&typeof requestAnimationFrame<"u"&&i&&(l=requestAnimationFrame(b))}function v(){l!==null&&(typeof cancelAnimationFrame<"u"&&cancelAnimationFrame(l),l=null),p=null}function A(){e.addEventListener("pointerdown",w),e.addEventListener("pointermove",x),e.addEventListener("pointerup",M),e.addEventListener("pointercancel",M),e.addEventListener("contextmenu",C),e.addEventListener("wheel",d,{passive:!1}),e.style.cursor=o?"grab":"",e.style.touchAction="none",e.style.userSelect="none"}function G(){e.removeEventListener("pointerdown",w),e.removeEventListener("pointermove",x),e.removeEventListener("pointerup",M),e.removeEventListener("pointercancel",M),e.removeEventListener("contextmenu",C),e.removeEventListener("wheel",d),e.style.cursor="",e.style.touchAction="",e.style.userSelect=""}return A(),u(),{update(m){let _=!!i;o=m.drag??o,r=m.wheel??r,a=De(m.invert),i=m.animate??i,!s&&h===null&&(e.style.cursor=o?"grab":"");let S=!!i;_&&!S?v():!_&&S&&u()},pause(){s||(s=!0,G(),v(),h=null,c=!1)},resume(){s&&(s=!1,A(),u())},destroy(){s||G(),v(),s=!0}}}function De(n){return n===void 0||n===!1?1:n===!0?-1:n}var Nt=typeof HTMLElement<"u"?HTMLElement:class{};function Le(n){if(n!==null){if(n==="false")return!1;if(n==="true"||n==="")return!0}}function Yt(n){return n.closest("glyph-scene")??null}var oe=class extends Nt{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return["drag","wheel","invert"]}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(e,o,r){o!==r&&this._controls?.update(this._readOptions())}_readOptions(){let e=Le(this.getAttribute("drag")),o=Le(this.getAttribute("wheel")),r=Le(this.getAttribute("invert"));return{...e!==void 0?{drag:e}:{},...o!==void 0?{wheel:o}:{},...r!==void 0?{invert:r}:{}}}_attach(){if(this._controls)return;let e=Yt(this);if(!e)return;let o=e.getScene();if(!o){let r=()=>{e.removeEventListener("glyphcss:scene-ready",r),this._attach()};e.addEventListener("glyphcss:scene-ready",r);return}this._controls=Ve(o,this._readOptions())}};if(typeof customElements<"u"){if(customElements.get("glyph-scene")||customElements.define("glyph-scene",Q),customElements.get("glyph-mesh")||customElements.define("glyph-mesh",ee),customElements.get("glyph-hotspot")||customElements.define("glyph-hotspot",te),customElements.get("glyph-perspective-camera")||customElements.define("glyph-perspective-camera",ne),customElements.get("glyph-orthographic-camera")||customElements.define("glyph-orthographic-camera",j),!customElements.get("glyph-camera")){class n extends j{}customElements.define("glyph-camera",n)}customElements.get("glyph-orbit-controls")||customElements.define("glyph-orbit-controls",re),customElements.get("glyph-map-controls")||customElements.define("glyph-map-controls",oe)}0&&(module.exports={GlyphHotspotElement,GlyphMapControlsElement,GlyphMeshElement,GlyphOrbitControlsElement,GlyphOrthographicCameraElement,GlyphPerspectiveCameraElement,GlyphSceneElement});
|
|
62
|
+
`;function Ot(n,e,t,o,r){return n.map(s=>{let[l,i,c]=e.project(s.at,t,o,r),u=c>-3&&l>=0&&l<t&&i>=0&&i<o;return{id:s.id,col:l,row:i,depth:c,visible:u}})}var An=1;function Sn(n,e){let{position:t,scale:o,rotation:r}=e;if(!t&&!o&&!r)return n;let[s,l,i]=t??[0,0,0],c=1,u=1,p=1;o!==void 0&&(typeof o=="number"?c=u=p=o:[c,u,p]=o);let d=Math.PI/180,[m,h,f]=r??[0,0,0],b=m*d,C=h*d,_=f*d,M=Math.cos(b),x=Math.sin(b),y=Math.cos(C),w=Math.sin(C),P=Math.cos(_),H=Math.sin(_);function v(A){let L=A[0]*c,a=A[1]*u,E=A[2]*p,g=P*L-H*a,G=H*L+P*a,z=E;return L=y*g+w*z,a=G,E=-w*g+y*z,g=L,G=M*a-x*E,z=x*a+M*E,[g+s,G+l,z+i]}return n.map(A=>({...A,vertices:A.vertices.map(v)}))}function Rt(n,e={}){It(n.ownerDocument??void 0);let t={mode:e.mode??"solid",glyphPalette:e.glyphPalette??"default",useColors:e.useColors??!0,cols:e.cols??80,rows:e.rows??24,cellAspect:e.cellAspect??2,directionalLight:e.directionalLight??{direction:[-.5,-.7,-.5],intensity:1},ambientLight:e.ambientLight??{intensity:.4},camera:e.camera??Ie(),smoothShading:e.smoothShading??!1,creaseAngle:e.creaseAngle??60,doubleSided:e.doubleSided??!1,supersample:e.supersample??1,depthEpsilon:e.depthEpsilon??0,temporalBlend:e.temporalBlend??0,autoSize:e.autoSize??!1,shadow:e.shadow},o=n.ownerDocument.createElement("div");o.className="glyph-scene";let r=n.ownerDocument.createElement("pre");r.className="glyph-output";let s=n.ownerDocument.createElement("div");s.className="glyph-hotspot-layer",o.appendChild(r),o.appendChild(s),n.appendChild(o);let l=new Map,i=[],c=!1,u={iA:[],iB:[],iC:[],lit:[]},p={idx:new Float32Array(0),r:new Float32Array(0),g:new Float32Array(0),b:new Float32Array(0),cols:0,rows:0,cam:null};function d(){u.iA.length=0,u.iB.length=0,u.iC.length=0,u.lit.length=0}let m=null,h=0;function f(){let a=[];for(let g of l.values())for(let G of g.polygons)(G.texture||G.material?.texture)&&a.push(G);if(a.length===0){m&&(m=null,b());return}let E=++h;(0,Bt.buildTextureSamplers)(a).then(g=>{E===h&&(m=g.size>0?g:null,b())})}function b(){c||(c=!0,Promise.resolve().then(()=>{c=!1,C()}))}function C(){let a=[],E=[],g=[],G=[],z=!1;for(let N of l.values()){let re=Sn(N.polygons,N.transform),k=N.transform.castShadow??!1,q=N.transform.receiveShadow??!1,oe=N.transform.depthBias??0;oe!==0&&(z=!0);for(let K of re)a.push(K),E.push(k),g.push(q),G.push(oe)}let F=_t({camera:t.camera,grid:{cols:t.cols,rows:t.rows,cellAspect:t.cellAspect},polygons:a,mode:t.mode,directionalLight:t.directionalLight,ambientLight:t.ambientLight,glyphPalette:t.glyphPalette,useColors:t.useColors,smoothShading:t.smoothShading,creaseAngle:t.creaseAngle,doubleSided:t.doubleSided,supersample:t.supersample,depthEpsilon:t.depthEpsilon,temporalBlend:t.temporalBlend,shadow:t.shadow,castShadowFlags:E,receiveShadowFlags:g,depthBiases:z?G:void 0});F.shadeCache=u,F.textureSamplers=m,F.temporalHistory=p;let T=globalThis.__glyphPerf,W=T?performance.now():0,R=Ht(F),j=T?performance.now():0;if(t.useColors?r.innerHTML=R:r.textContent=R,T){let N=performance.now();(T.raster??(T.raster=[])).push(j-W),(T.dom??(T.dom=[])).push(N-j),(T.polys??(T.polys=[])).push(a.length)}_()}function _(){let{cols:a,rows:E,cellAspect:g,camera:G}=t,z=Ot(i.map(R=>R.hotspot),G,a,E,g),F=r.getBoundingClientRect(),T=a>0?F.width/a:8,W=E>0?F.height/E:16;for(let R=0;R<i.length;R++){let{el:j}=i[R],N=z[R];N.visible?(j.style.display="",j.style.left=`${(N.col+.5)*T}px`,j.style.top=`${(N.row+.5)*W}px`,j.style.zIndex=String(Math.round(N.depth*1e3))):j.style.display="none"}}function M(a,E={}){let g=An++;return l.set(g,{id:g,polygons:a,transform:E}),d(),f(),b(),{get id(){return g},get name(){return l.get(g)?.transform.id},get polygons(){return a},setTransform(G){let z=l.get(g);z&&(z.transform=G,d(),b())},dispose(){l.delete(g),d(),f(),b()}}}function x(a,E){let g=n.ownerDocument.createElement("div");g.className="glyph-hotspot",g.setAttribute("data-hotspot-id",a.id);let[G,z]=a.size??[1,1];g.style.position="absolute",g.style.width=`${G}ch`,g.style.height=`${z*t.cellAspect}ch`,E&&g.addEventListener("click",E),s.appendChild(g);let F={hotspot:{id:a.id,at:a.at,size:a.size},el:g,onClick:E};return i.push(F),b(),{get el(){return g},remove(){let T=i.indexOf(F);T>=0&&i.splice(T,1),E&&g.removeEventListener("click",E),s.removeChild(g),b()}}}function y(){C()}function w(a){a.mode!==void 0&&(t.mode=a.mode),a.glyphPalette!==void 0&&(t.glyphPalette=a.glyphPalette),a.useColors!==void 0&&(t.useColors=a.useColors),a.cols!==void 0&&(t.cols=a.cols),a.rows!==void 0&&(t.rows=a.rows),a.cellAspect!==void 0&&(t.cellAspect=a.cellAspect),a.directionalLight!==void 0&&(t.directionalLight=a.directionalLight),a.ambientLight!==void 0&&(t.ambientLight=a.ambientLight),a.camera!==void 0&&(t.camera=a.camera),a.smoothShading!==void 0&&(t.smoothShading=a.smoothShading),a.creaseAngle!==void 0&&(t.creaseAngle=a.creaseAngle),"shadow"in a&&(t.shadow=a.shadow),a.autoSize!==void 0&&(t.autoSize=a.autoSize,t.autoSize&&!A&&typeof ResizeObserver<"u"?(A=new ResizeObserver(()=>v()),A.observe(n),v()):!t.autoSize&&A&&(A.disconnect(),A=null)),(a.mode!==void 0||a.useColors!==void 0||a.directionalLight!==void 0||a.ambientLight!==void 0||a.smoothShading!==void 0||a.creaseAngle!==void 0||a.glyphPalette!==void 0)&&d(),b()}function P(){return{...t}}function H(){let E=n.ownerDocument.createElement("span");E.textContent=Array(20).fill("M").join(`
|
|
63
|
+
`),E.style.cssText="position:absolute;visibility:hidden;font-family:inherit;font-size:inherit;line-height:inherit;white-space:pre;padding:0;margin:0",r.appendChild(E);let g=E.getBoundingClientRect();return E.remove(),{w:g.width||8,h:g.height?g.height/20:16}}function v(){let a=n.clientWidth,E=n.clientHeight;if(!a||!E)return;let g=H(),G=Math.max(20,Math.floor(a/g.w)),z=Math.max(8,Math.floor(E/g.h)),F=g.h/g.w,T=!1;t.cols!==G&&(t.cols=G,T=!0),t.rows!==z&&(t.rows=z,T=!0),Math.abs(t.cellAspect-F)>.01&&(t.cellAspect=F,T=!0),T&&b()}let A=null;t.autoSize&&typeof ResizeObserver<"u"&&(A=new ResizeObserver(()=>v()),A.observe(n),v());function L(){A&&(A.disconnect(),A=null),l.clear(),n.contains(o)&&n.removeChild(o)}return b(),{get host(){return n},get output(){return r},get camera(){return t.camera},add:M,addHotspot:x,rerender:y,setOptions:w,getOptions:P,fit:v,destroy:L}}var xn=typeof HTMLElement<"u"?HTMLElement:class{},Mn=["mode","glyph-palette","use-colors","cols","rows","cell-aspect","directional-direction","directional-intensity","ambient-intensity","auto-size","shadow","shadow-color","shadow-opacity","shadow-lift","shadow-max-extend"];function Ce(n){if(n==null)return;let e=parseFloat(n);return Number.isFinite(e)?e:void 0}function Cn(n){if(n==="wireframe"||n==="solid"||n==="voxel")return n}function Gn(n){if(n!==null){if(n==="false")return!1;if(n==="true"||n==="")return!0}}var Xe=class extends xn{constructor(){super(...arguments);this._scene=null}static get observedAttributes(){return[...Mn]}getScene(){return this._scene}_readOptions(){let t={},o=Cn(this.getAttribute("mode"));o!==void 0&&(t.mode=o);let r=this.getAttribute("glyph-palette");r&&(t.glyphPalette=r);let s=Gn(this.getAttribute("use-colors"));s!==void 0&&(t.useColors=s);let l=Ce(this.getAttribute("cols"));l!==void 0&&(t.cols=l);let i=Ce(this.getAttribute("rows"));i!==void 0&&(t.rows=i);let c=Ce(this.getAttribute("cell-aspect"));c!==void 0&&(t.cellAspect=c);let u=Ce(this.getAttribute("directional-intensity"));u!==void 0&&(t.directionalLight={direction:[-.5,-.7,-.5],intensity:u});let p=Ce(this.getAttribute("ambient-intensity"));if(p!==void 0&&(t.ambientLight={intensity:p}),this.hasAttribute("auto-size")&&(t.autoSize=!0),this.hasAttribute("shadow")){let d={color:"#000000",opacity:.25,lift:.05,maxExtend:2e3},m=this.getAttribute("shadow-color");m&&(d.color=m);let h=Ce(this.getAttribute("shadow-opacity"));h!==void 0&&(d.opacity=h);let f=Ce(this.getAttribute("shadow-lift"));f!==void 0&&(d.lift=f);let b=Ce(this.getAttribute("shadow-max-extend"));b!==void 0&&(d.maxExtend=b),t.shadow=d}return t}_findCameraAncestor(){let t=this.parentElement;for(;t;){let o=t.tagName.toLowerCase();if(o==="glyph-perspective-camera"||o==="glyph-orthographic-camera"||o==="glyph-camera")return t;t=t.parentElement}return null}_initScene(t){let o=typeof t.getCamera=="function"?t.getCamera():void 0,r=this._readOptions();o&&(r.camera=o),this._scene=Rt(this,r),this.dispatchEvent(new CustomEvent("glyphcss:scene-ready",{bubbles:!1}))}connectedCallback(){if(this._scene)return;let t=this._findCameraAncestor();if(!t)throw new Error("glyphcss: <glyph-scene> must be placed inside a <glyph-camera>, <glyph-perspective-camera>, or <glyph-orthographic-camera>.");if((typeof t.getCamera=="function"?t.getCamera():null)!==null)this._initScene(t);else{let r=()=>{t.removeEventListener("glyph:camera-ready",r),this._scene||this._initScene(t)};t.addEventListener("glyph:camera-ready",r)}}rerender(){this._scene?.rerender()}disconnectedCallback(){this._scene&&(this._scene.destroy(),this._scene=null)}attributeChangedCallback(t,o,r){o!==r&&this._scene&&this._scene.setOptions(this._readOptions())}};var Be=require("@glyphcss/core"),Ln=typeof HTMLElement<"u"?HTMLElement:class{},Tn=["src","geometry","size","color","position","scale","rotation","normalize","cast-shadow","receive-shadow"];function _n(n){let e=(0,Be.computeSceneBbox)(n),t=(e.min[0]+e.max[0])/2,o=(e.min[1]+e.max[1])/2,r=(e.min[2]+e.max[2])/2,l=2/(Math.max(e.max[0]-e.min[0],e.max[1]-e.min[1],e.max[2]-e.min[2])||1);return n.map(i=>({...i,vertices:i.vertices.map(c=>[(c[0]-t)*l,(c[1]-o)*l,(c[2]-r)*l])}))}function bt(n){if(!n)return;let e=n.split(",").map(t=>parseFloat(t.trim()));if(!(e.length!==3||e.some(t=>!Number.isFinite(t))))return[e[0],e[1],e[2]]}function zn(n){if(n){if(!n.includes(",")){let e=parseFloat(n);return Number.isFinite(e)?e:void 0}return bt(n)}}function Pn(n){return n.closest("glyph-scene")??null}var $e=class extends Ln{constructor(){super(...arguments);this._handle=null;this._loadToken=0}static get observedAttributes(){return[...Tn]}getMeshHandle(){return this._handle}connectedCallback(){this._maybeLoad()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,r){if(o!==r){if(t==="src"||t==="geometry"||t==="size"||t==="color"){this._tearDown(),this._maybeLoad();return}this._handle&&this._handle.setTransform(this._readTransform())}}_readTransform(){return{position:bt(this.getAttribute("position")),scale:zn(this.getAttribute("scale")),rotation:bt(this.getAttribute("rotation")),castShadow:this.hasAttribute("cast-shadow"),receiveShadow:this.hasAttribute("receive-shadow")}}_tearDown(){if(this._loadToken+=1,this._handle){try{this._handle.dispose()}catch{}this._handle=null}}async _maybeLoad(){let t=this.getAttribute("src"),o=this.getAttribute("geometry"),r=Pn(this);if(r){if(!r.getScene()){let s=()=>{r.removeEventListener("glyphcss:scene-ready",s),this._maybeLoad()};r.addEventListener("glyphcss:scene-ready",s);return}if(t){let s=++this._loadToken,l;try{l=await(0,Be.loadMesh)(t)}catch(p){this.dispatchEvent(new CustomEvent("glyphcss:error",{detail:p,bubbles:!0}));return}if(s!==this._loadToken){try{l.dispose()}catch{}return}let i=r.getScene();if(!i){try{l.dispose()}catch{}return}let u=this.hasAttribute("normalize")?_n(l.polygons):l.polygons;this._handle=i.add(u,this._readTransform()),this.dispatchEvent(new CustomEvent("glyphcss:loaded",{detail:{polygons:u},bubbles:!0}));return}if(o){let s=r.getScene();if(!s)return;let l=this.getAttribute("size"),i=l!==null?parseFloat(l):1,c=this.getAttribute("color")??void 0,u;try{u=(0,Be.resolveGeometry)(o,{size:Number.isFinite(i)?i:1,color:c})}catch(p){this.dispatchEvent(new CustomEvent("glyphcss:error",{detail:p,bubbles:!0}));return}this._handle=s.add(u,this._readTransform()),this.dispatchEvent(new CustomEvent("glyphcss:loaded",{detail:{polygons:u},bubbles:!0}))}}}};var Hn=typeof HTMLElement<"u"?HTMLElement:class{};function Fn(n){if(!n)return;let e=n.split(",").map(t=>parseFloat(t.trim()));if(!(e.length!==3||e.some(t=>!Number.isFinite(t))))return[e[0],e[1],e[2]]}function In(n){if(!n)return;let e=n.split(",").map(t=>parseFloat(t.trim()));if(!(e.length!==2||e.some(t=>!Number.isFinite(t))))return[e[0],e[1]]}function On(n){return n.closest("glyph-scene")??null}var We=class extends Hn{constructor(){super(...arguments);this._handle=null}static get observedAttributes(){return["at","size","hotspot-id"]}connectedCallback(){this._register()}disconnectedCallback(){this._handle&&this._unregister()}attributeChangedCallback(t,o,r){o!==r&&(this._handle&&this._unregister(),this._register())}_unregister(){if(!this._handle)return;let t=this._handle.el;for(;t.firstChild;)this.appendChild(t.firstChild);this._handle.remove(),this._handle=null}_register(){let t=Fn(this.getAttribute("at"));if(!t)return;let o=On(this);if(!o)return;if(!o.getScene()){let c=()=>{o.removeEventListener("glyphcss:scene-ready",c),this._register()};o.addEventListener("glyphcss:scene-ready",c);return}let r=o.getScene();if(!r)return;let s=this.getAttribute("hotspot-id")??this.getAttribute("id")??String(Math.random()),l=In(this.getAttribute("size"));this._handle=r.addHotspot({id:s,at:t,size:l},()=>this.dispatchEvent(new CustomEvent("glyphcss:hotspot-click",{detail:{id:s},bubbles:!0})));let i=this._handle.el;for(;this.firstChild;)i.appendChild(this.firstChild)}};var Bn=typeof HTMLElement<"u"?HTMLElement:class{};function ue(n){if(n==null)return;let e=parseFloat(n);return Number.isFinite(e)?e:void 0}var je=class extends Bn{constructor(){super(...arguments);this._camera=null}static get observedAttributes(){return["rot-x","rot-y","distance","perspective","zoom","stretch"]}getCamera(){return this._camera}connectedCallback(){this._camera=Ie({rotX:ue(this.getAttribute("rot-x")),rotY:ue(this.getAttribute("rot-y")),distance:ue(this.getAttribute("distance")),perspective:ue(this.getAttribute("perspective")),zoom:ue(this.getAttribute("zoom")),stretch:ue(this.getAttribute("stretch"))}),this.dispatchEvent(new CustomEvent("glyph:camera-ready",{bubbles:!1}))}disconnectedCallback(){this._camera=null}attributeChangedCallback(t,o,r){if(o===r)return;let s=this._camera;if(!s)return;let l=ue(this.getAttribute("rot-x")),i=ue(this.getAttribute("rot-y")),c=ue(this.getAttribute("distance")),u=ue(this.getAttribute("perspective")),p=ue(this.getAttribute("zoom")),d=ue(this.getAttribute("stretch")),m=!1;l!==void 0&&s.rotX!==l&&(s.rotX=l,m=!0),i!==void 0&&s.rotY!==i&&(s.rotY=i,m=!0),c!==void 0&&s.distance!==c&&(s.distance=c,m=!0),u!==void 0&&s.perspective!==u&&(s.perspective=u,m=!0),p!==void 0&&s.zoom!==p&&(s.zoom=p,m=!0),d!==void 0&&s.stretch!==d&&(s.stretch=d,m=!0),m&&this.querySelector("glyph-scene")?.rerender?.()}};var Rn=typeof HTMLElement<"u"?HTMLElement:class{};function Re(n){if(n==null)return;let e=parseFloat(n);return Number.isFinite(e)?e:void 0}var Ne=class extends Rn{constructor(){super(...arguments);this._camera=null}static get observedAttributes(){return["rot-x","rot-y","zoom"]}getCamera(){return this._camera}connectedCallback(){this._camera=Tt({rotX:Re(this.getAttribute("rot-x")),rotY:Re(this.getAttribute("rot-y")),zoom:Re(this.getAttribute("zoom"))}),this.dispatchEvent(new CustomEvent("glyph:camera-ready",{bubbles:!1}))}disconnectedCallback(){this._camera=null}attributeChangedCallback(t,o,r){if(o===r)return;let s=this._camera;if(!s)return;let l=Re(this.getAttribute("rot-x")),i=Re(this.getAttribute("rot-y")),c=Re(this.getAttribute("zoom")),u=!1;l!==void 0&&s.rotX!==l&&(s.rotX=l,u=!0),i!==void 0&&s.rotY!==i&&(s.rotY=i,u=!0),c!==void 0&&s.zoom!==c&&(s.zoom=c,u=!0),u&&this.querySelector("glyph-scene")?.rerender?.()}};function kt(n,e={}){let t=n.host,o=e.drag??!0,r=e.wheel??!0,s=Nt(e.invert),l=e.clampPitch??!0,i=e.animate??!1,c=!1,u=!1,p=null,d=null,m=null,h={x:0,y:0},f=n.camera;function b(v){if(!(!o||c)&&m===null&&v.isPrimary!==!1){v.preventDefault(),m=v.pointerId,h={x:v.clientX,y:v.clientY},t.style.cursor="grabbing";try{v.target.setPointerCapture(v.pointerId)}catch{}i&&i.pauseOnInteraction!==!1&&(u=!0)}}function C(v){if(m===null||v.pointerId!==m||!o||c)return;v.preventDefault();let A=v.clientX-h.x,L=v.clientY-h.y;h={x:v.clientX,y:v.clientY};let a=s,E=1/4;f.rotY=f.rotY-A*E*a;let g=f.rotX-L*E*a;f.rotX=l?Math.max(-90,Math.min(90,g)):g,n.rerender()}function _(v){if(m===v.pointerId){m=null,t.style.cursor=o&&!c?"grab":"";try{v.target.releasePointerCapture(v.pointerId)}catch{}i&&(u=!1)}}function M(v){if(!r||c)return;v.preventDefault();let A=v.deltaY*.001;f.zoom=Math.max(.1,Math.min(500,f.zoom*(1-A))),n.rerender()}function x(v){if(!(c||!i)){if(!u){let A=d!==null?Math.min(v-d,50):16.67,L=typeof i=="object"&&i.speed?i.speed:.3,a=typeof i=="object"&&i.axis?i.axis:"y",E=L*(A/16.67);a==="y"?f.rotY=f.rotY+E:f.rotX=f.rotX+E,n.rerender()}d=v,p=requestAnimationFrame(x)}}function y(){p===null&&typeof requestAnimationFrame<"u"&&i&&(p=requestAnimationFrame(x))}function w(){p!==null&&(typeof cancelAnimationFrame<"u"&&cancelAnimationFrame(p),p=null),d=null}function P(){t.addEventListener("pointerdown",b),t.addEventListener("pointermove",C),t.addEventListener("pointerup",_),t.addEventListener("pointercancel",_),t.addEventListener("wheel",M,{passive:!1}),t.style.cursor=o?"grab":"",t.style.touchAction="none",t.style.userSelect="none"}function H(){t.removeEventListener("pointerdown",b),t.removeEventListener("pointermove",C),t.removeEventListener("pointerup",_),t.removeEventListener("pointercancel",_),t.removeEventListener("wheel",M),t.style.cursor="",t.style.touchAction="",t.style.userSelect=""}return P(),y(),{update(v){let A=!!i;o=v.drag??o,r=v.wheel??r,s=Nt(v.invert),v.clampPitch!==void 0&&(l=v.clampPitch),i=v.animate??i,!c&&m===null&&(t.style.cursor=o?"grab":"");let L=!!i;A&&!L?w():!A&&L&&y()},pause(){c||(c=!0,H(),w(),m=null,u=!1)},resume(){c&&(c=!1,P(),y())},destroy(){c||H(),w(),c=!0}}}function Nt(n){return n===void 0||n===!1?1:n===!0?-1:n}var Nn=typeof HTMLElement<"u"?HTMLElement:class{};function kn(n){if(n==null)return;let e=parseFloat(n);return Number.isFinite(e)?e:void 0}function rt(n){if(n!==null){if(n==="false")return!1;if(n==="true"||n==="")return!0}}function Yn(n){return n.closest("glyph-scene")??null}var qe=class extends Nn{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return["drag","wheel","invert","clamp-pitch","animate-speed","animate-axis"]}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,r){o!==r&&this._controls?.update(this._readOptions())}_readOptions(){let t=rt(this.getAttribute("drag")),o=rt(this.getAttribute("wheel")),r=rt(this.getAttribute("invert")),s=rt(this.getAttribute("clamp-pitch")),l=kn(this.getAttribute("animate-speed")),i=this.getAttribute("animate-axis")==="x"?"x":"y";return{...t!==void 0?{drag:t}:{},...o!==void 0?{wheel:o}:{},...r!==void 0?{invert:r}:{},...s!==void 0?{clampPitch:s}:{},...l!==void 0?{animate:{speed:l,axis:i}}:{}}}_attach(){if(this._controls)return;let t=Yn(this);if(!t)return;let o=t.getScene();if(!o){let r=()=>{t.removeEventListener("glyphcss:scene-ready",r),this._attach()};t.addEventListener("glyphcss:scene-ready",r);return}this._controls=kt(o,this._readOptions())}};function Dt(n,e={}){let t=n.host,o=e.drag??!0,r=e.wheel??!0,s=Yt(e.invert),l=e.animate??!1,i=!1,c=!1,u=null,p=null,d=null,m={x:0,y:0},h=!1,f=n.camera,b=1/4,C=.02;function _(a){if(!(!o||i)&&d===null&&a.isPrimary!==!1){a.preventDefault(),d=a.pointerId,m={x:a.clientX,y:a.clientY},h=a.button===2,t.style.cursor="grabbing";try{a.target.setPointerCapture(a.pointerId)}catch{}l&&l.pauseOnInteraction!==!1&&(c=!0)}}function M(a){if(d===null||a.pointerId!==d||!o||i)return;a.preventDefault();let E=a.clientX-m.x,g=a.clientY-m.y;m={x:a.clientX,y:a.clientY};let G=s;if(h||a.shiftKey)f.rotY=f.rotY-E*b*G,f.rotX=Math.max(-90,Math.min(90,f.rotX+g*b*G));else{let z=f.target;f.target=[z[0]-E*C/f.zoom,z[1]-g*C/f.zoom,z[2]]}n.rerender()}function x(a){if(d===a.pointerId){d=null,h=!1,t.style.cursor=o&&!i?"grab":"";try{a.target.releasePointerCapture(a.pointerId)}catch{}l&&(c=!1)}}function y(a){a.preventDefault()}function w(a){if(!r||i)return;a.preventDefault();let E=a.deltaY*.001;f.zoom=Math.max(.1,Math.min(500,f.zoom*(1-E))),n.rerender()}function P(a){if(!(i||!l)){if(!c){let E=p!==null?Math.min(a-p,50):16.67,g=typeof l=="object"&&l.speed?l.speed:.3,G=typeof l=="object"&&l.axis?l.axis:"y",z=g*(E/16.67);G==="y"?f.rotY=f.rotY+z:f.rotX=f.rotX+z,n.rerender()}p=a,u=requestAnimationFrame(P)}}function H(){u===null&&typeof requestAnimationFrame<"u"&&l&&(u=requestAnimationFrame(P))}function v(){u!==null&&(typeof cancelAnimationFrame<"u"&&cancelAnimationFrame(u),u=null),p=null}function A(){t.addEventListener("pointerdown",_),t.addEventListener("pointermove",M),t.addEventListener("pointerup",x),t.addEventListener("pointercancel",x),t.addEventListener("contextmenu",y),t.addEventListener("wheel",w,{passive:!1}),t.style.cursor=o?"grab":"",t.style.touchAction="none",t.style.userSelect="none"}function L(){t.removeEventListener("pointerdown",_),t.removeEventListener("pointermove",M),t.removeEventListener("pointerup",x),t.removeEventListener("pointercancel",x),t.removeEventListener("contextmenu",y),t.removeEventListener("wheel",w),t.style.cursor="",t.style.touchAction="",t.style.userSelect=""}return A(),H(),{update(a){let E=!!l;o=a.drag??o,r=a.wheel??r,s=Yt(a.invert),l=a.animate??l,!i&&d===null&&(t.style.cursor=o?"grab":"");let g=!!l;E&&!g?v():!E&&g&&H()},pause(){i||(i=!0,L(),v(),d=null,c=!1)},resume(){i&&(i=!1,A(),H())},destroy(){i||L(),v(),i=!0}}}function Yt(n){return n===void 0||n===!1?1:n===!0?-1:n}var Dn=typeof HTMLElement<"u"?HTMLElement:class{};function vt(n){if(n!==null){if(n==="false")return!1;if(n==="true"||n==="")return!0}}function Vn(n){return n.closest("glyph-scene")??null}var Ue=class extends Dn{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return["drag","wheel","invert"]}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,r){o!==r&&this._controls?.update(this._readOptions())}_readOptions(){let t=vt(this.getAttribute("drag")),o=vt(this.getAttribute("wheel")),r=vt(this.getAttribute("invert"));return{...t!==void 0?{drag:t}:{},...o!==void 0?{wheel:o}:{},...r!==void 0?{invert:r}:{}}}_attach(){if(this._controls)return;let t=Vn(this);if(!t)return;let o=t.getScene();if(!o){let r=()=>{t.removeEventListener("glyphcss:scene-ready",r),this._attach()};t.addEventListener("glyphcss:scene-ready",r);return}this._controls=Dt(o,this._readOptions())}};if(typeof customElements<"u"){if(customElements.get("glyph-scene")||customElements.define("glyph-scene",Xe),customElements.get("glyph-mesh")||customElements.define("glyph-mesh",$e),customElements.get("glyph-hotspot")||customElements.define("glyph-hotspot",We),customElements.get("glyph-perspective-camera")||customElements.define("glyph-perspective-camera",je),customElements.get("glyph-orthographic-camera")||customElements.define("glyph-orthographic-camera",Ne),!customElements.get("glyph-camera")){class n extends Ne{}customElements.define("glyph-camera",n)}customElements.get("glyph-orbit-controls")||customElements.define("glyph-orbit-controls",qe),customElements.get("glyph-map-controls")||customElements.define("glyph-map-controls",Ue)}0&&(module.exports={GlyphHotspotElement,GlyphMapControlsElement,GlyphMeshElement,GlyphOrbitControlsElement,GlyphOrthographicCameraElement,GlyphPerspectiveCameraElement,GlyphSceneElement});
|
package/dist/elements.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { e as GlyphHotspotElement, h as GlyphMapControlsElement, i as GlyphMeshElement, l as GlyphOrbitControlsElement, m as GlyphOrthographicCameraElement, p as GlyphPerspectiveCameraElement, s as GlyphSceneElement } from './elements-ycVyIlYL.cjs';
|
|
2
2
|
import '@glyphcss/core';
|
package/dist/elements.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { e as GlyphHotspotElement, h as GlyphMapControlsElement, i as GlyphMeshElement, l as GlyphOrbitControlsElement, m as GlyphOrthographicCameraElement, p as GlyphPerspectiveCameraElement, s as GlyphSceneElement } from './elements-ycVyIlYL.js';
|
|
2
2
|
import '@glyphcss/core';
|
package/dist/elements.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
function ze(n,t,e){let o=Math.cos(t),r=Math.sin(t),a=o*n[1]-r*n[0],i=r*n[1]+o*n[0],s=n[2],c=Math.cos(e),l=Math.sin(e),p=c*i-l*s,h=l*i+c*s;return[a,p,h]}function ee(n={}){let t={rotX:n.rotX??0,rotY:n.rotY??0,distance:n.distance??3,zoom:n.zoom??.4,stretch:n.stretch??1,target:[0,0,0],eyeMode:!1,focal:5},[e,o]=n.center??[.5,.5];return{kind:"perspective",get rotX(){return t.rotX},set rotX(r){t.rotX=r},get rotY(){return t.rotY},set rotY(r){t.rotY=r},get distance(){return t.distance},set distance(r){t.distance=r},get zoom(){return t.zoom},set zoom(r){t.zoom=r},get stretch(){return t.stretch},set stretch(r){t.stretch=r},get target(){return t.target},set target(r){t.target=r},get eyeMode(){return t.eyeMode},set eyeMode(r){t.eyeMode=r},project(r,a,i,s){let c=[r[0]-t.target[0],r[1]-t.target[1],r[2]-t.target[2]],l=ze(c,t.rotY,t.rotX);if(t.eyeMode){if(l[2]>=-.001)return[NaN,NaN,l[2]];let C=t.focal/-l[2],d=Math.min(a,i)*t.zoom*C,b=a*e+l[0]*d*s*t.stretch,u=i*o+l[1]*d;return[b,u,l[2]]}let p=30,h=1.5,f=l[2]*p,y=.001,g=1-f/t.distance;if(g<y)return[NaN,NaN,l[2]];let L=1/g,E=Math.min(a,i)*t.zoom*h*L,w=a*e+l[0]*E*s*t.stretch,x=i*o+l[1]*E;return[w,x,l[2]]}}}function Te(n={}){let t={rotX:n.rotX??0,rotY:n.rotY??0,distance:0,zoom:n.zoom??.4,stretch:1,target:[0,0,0]},[e,o]=n.center??[.5,.5];return{kind:"orthographic",get rotX(){return t.rotX},set rotX(r){t.rotX=r},get rotY(){return t.rotY},set rotY(r){t.rotY=r},get distance(){return t.distance},set distance(r){t.distance=r},get zoom(){return t.zoom},set zoom(r){t.zoom=r},get stretch(){return t.stretch},set stretch(r){t.stretch=r},get target(){return t.target},set target(r){t.target=r},get eyeMode(){return!1},set eyeMode(r){},project(r,a,i,s){let c=[r[0]-t.target[0],r[1]-t.target[1],r[2]-t.target[2]],l=ze(c,t.rotY,t.rotX),h=Math.min(a,i)*t.zoom*1.5,f=a*e+l[0]*h*s*t.stretch,y=i*o+l[1]*h;return[f,y,l[2]]}}}var Qe={direction:[.5,.7,.5],intensity:1},et={intensity:.4};function tt(n){let t=new Set,e=[];for(let o of n){let r=o.vertices;if(!(r.length<2))for(let a=0;a<r.length;a++){let i=r[a],s=r[(a+1)%r.length],c=`${i[0]},${i[1]},${i[2]}`,l=`${s[0]},${s[1]},${s[2]}`,p=c<l?`${c}|${l}`:`${l}|${c}`;if(t.has(p))continue;t.add(p);let h={from:i,to:s,weight:2};o.color&&(h.color=o.color),e.push(h)}}return e}function He(n){let t=n.polygons??[],e=n.mode??(t.length?"solid":"wireframe"),o=n.wireframe??(e==="wireframe"?tt(t):[]);return{camera:n.camera,grid:n.grid,polygons:t,wireframe:o,mode:e,directionalLight:n.directionalLight??Qe,ambientLight:n.ambientLight??et,glyphPalette:n.glyphPalette??"default",useColors:n.useColors??!0,smoothShading:n.smoothShading??!1,creaseAngle:n.creaseAngle??60}}var It=" .:-=+*#%@".split(""),Nt=" .:-=+*#%@".split(""),be={default:{thin:"\xB7\u22C5\u2219\u02D9\xB7\u22C5\u2219".split(""),normal:"\u254B\u256C\u253C\u2573\u25C6\u25C7\u25CA\u25B2\u25B3\u25BC\u25BD\u25C8\u2B21\u2B22\u2234\u2235\u22A5\u2295\u2297\u2299\u229A\u229B".split(""),core:"\u2726\u2727\u2729\u25C9\u2299\u25CE".split(""),solid:" .:-=+*#%@".split("")},ascii:{thin:".'".split(""),normal:"+*x".split(""),core:"#@".split(""),solid:" .,:;!+=*xX#@".split("")},dots:{thin:"\xB7\u22C5".split(""),normal:"\u2022\u25CF".split(""),core:"\u25C9\u25CE".split(""),solid:" \xB7\u22C5\u2218\u2022\u25CF\u25C9\u25CE\u2B24".split("")},lines:{thin:"\u2500\u2502".split(""),normal:"\u2550\u2551".split(""),core:"\u2588".split(""),solid:" \u2500\u2550\u256C\u2551\u2588\u2593\u2592\u2591".split("")},blocks:{thin:"\u2591\u2581".split(""),normal:"\u2592\u2593\u258C\u2590\u2580\u2584".split(""),core:"\u2588".split(""),solid:" \u2591\u2592\u2593\u258C\u2590\u2588\u2580\u2584\u25A0".split("")},stars:{thin:"\xB7\u22C6".split(""),normal:"\u2726\u2727\u2729\u272A".split(""),core:"\u272B\u272C\u272D\u2605".split(""),solid:" \xB7\u22C6\u2217\u2726\u2727\u2729\u272A\u272B\u2605".split("")},arrows:{thin:"\xB7\u2219".split(""),normal:"\u2190\u2191\u2192\u2193".split(""),core:"\u2196\u2197\u2198\u2199\u2921\u2922".split(""),solid:" \xB7\u2219\u2191\u2197\u2192\u2198\u2193\u2199\u2190\u2196".split("")},braille:{thin:"\u2801\u2802\u2804\u2808".split(""),normal:"\u2803\u2805\u2806\u2809\u280A\u280B\u280C\u280D\u280E\u280F".split(""),core:"\u283F\u28FF".split(""),solid:" \u2801\u2803\u2807\u2827\u2837\u283F\u287F\u28FF".split("")},runes:{thin:".\xB7".split(""),normal:"\u16A0\u16A1\u16A2\u16A3\u16A4\u16A6\u16A8\u16B1\u16B2\u16B3\u16B7\u16B9\u16C3\u16C7\u16C9".split(""),core:"\u16DE\u16DF\u16E1\u16E2\u16E3".split(""),solid:" \xB7\u16A0\u16A3\u16A4\u16A8\u16B1\u16B7\u16DE\u16E2".split("")},math:{thin:"\u2219\u2218".split(""),normal:"\u2211\u220F\u222B\u221A\u221E\u2248\u2260\u2264\u2265\u2282\u2283\u2286\u2287".split(""),core:"\u222E\u222F\u2230\u2202".split(""),solid:" \u2219\u2218\u2211\u222B\u221A\u221E\u2248\u2295\u2297".split("")},binary:{thin:"\xB7.".split(""),normal:"01".split(""),core:"\u2588".split(""),solid:" .:01\u2588\u2588".split("")},hex:{thin:"\xB7\u2219".split(""),normal:"0123456789ABCDEF".split(""),core:"FFAA".split(""),solid:" 0123456789AF".split("")}},Yt=be.default;function ve(n){return be[n]??be.default}function Pe(n){let{camera:t,grid:e,wireframe:o,mode:r}=n,{cols:a,rows:i,cellAspect:s}=e;if(r==="solid")return nt(n,a,i,s);let c=ve(n.glyphPalette),l=new Uint8Array(a*i),p=n.useColors?new Array(a*i).fill(null):null;for(let h of o){let f=t.project(h.from,a,i,s),y=t.project(h.to,a,i,s);f[0]!==f[0]||y[0]!==y[0]||lt(l,p,f[0]|0,f[1]|0,y[0]|0,y[1]|0,h.weight??2,h.color??null,a,i)}return at(l,p,a,i,c)}function nt(n,t,e,o){let{camera:r,polygons:a,directionalLight:i,ambientLight:s,smoothShading:c,creaseAngle:l}=n,p=ve(n.glyphPalette).solid,h=p.length-1,f=new Array(t*e).fill(" "),y=n.useColors,g=y?new Array(t*e).fill(null):null,L=new Float64Array(t*e).fill(-1/0),E=i.direction,w=Math.hypot(E[0],E[1],E[2])||1,x=E[0]/w,M=E[1]/w,C=E[2]/w,d=i.intensity??1,b=s.intensity??.4,u=Ee(i.color??"#ffffff"),v=Ee(s.color??"#ffffff"),A=c&&l>0?it(a,l):null;for(let G=0;G<a.length;G++){let m=a[G],_=m.vertices;if(!(_.length<3))for(let S=1;S<_.length-1;S++){let z=S,I=S+1,H=_[0],P=_[z],N=_[I],O=r.project(H,t,e,o),R=r.project(P,t,e,o),Y=r.project(N,t,e,o);if(O[0]!==O[0]||R[0]!==R[0]||Y[0]!==Y[0])continue;let X=P[0]-H[0],B=P[1]-H[1],le=P[2]-H[2],W=N[0]-H[0],F=N[1]-H[1],J=N[2]-H[2],Q=B*J-le*F,j=le*W-X*J,xe=X*F-B*W,ae=Math.hypot(Q,j,xe)||1,De=Q/ae,Ve=j/ae,Be=xe/ae,ce,ue,de,he,pe,me,fe,ye,ge;if(A){let U=A[G],D=U[0],V=U[z],q=U[I];ce=D[0],ue=D[1],de=D[2],he=V[0],pe=V[1],me=V[2],fe=q[0],ye=q[1],ge=q[2]}else ce=he=fe=De,ue=pe=ye=Ve,de=me=ge=Be;let $e=ce*x+ue*M+de*C,We=he*x+pe*M+me*C,je=fe*x+ye*M+ge*C,Le=Math.min(1,b+Math.max(0,$e)*d),we=Math.min(1,b+Math.max(0,We)*d),_e=Math.min(1,b+Math.max(0,je)*d),Se=null;if(y){let U=(Le+we+_e)/3,D=Math.max(0,U-b),V=m.color?Ee(m.color):[255,255,255],q=b*v[0]/255+D*u[0]/255,Ue=b*v[1]/255+D*u[1]/255,qe=b*v[2]/255+D*u[2]/255,Ze=Math.min(255,V[0]*q),Ke=Math.min(255,V[1]*Ue),Je=Math.min(255,V[2]*qe);Se=`#${Me(Ze)}${Me(Ke)}${Me(Je)}`}ot(O[0],O[1],O[2],Le,R[0],R[1],R[2],we,Y[0],Y[1],Y[2],_e,p,h,Se,f,g,L,t,e)}}return st(f,g,t,e)}var rt=new Float64Array([(0+.5)/16,(8+.5)/16,(2+.5)/16,(10+.5)/16,(12+.5)/16,(4+.5)/16,(14+.5)/16,(6+.5)/16,(3+.5)/16,(11+.5)/16,(1+.5)/16,(9+.5)/16,(15+.5)/16,(7+.5)/16,(13+.5)/16,(5+.5)/16]);function ot(n,t,e,o,r,a,i,s,c,l,p,h,f,y,g,L,E,w,x,M){let C=(r-n)*(l-t)-(a-t)*(c-n);if(C===0||C>0)return;let d=1/C,b=C>0,u=n<r?n:r;c<u&&(u=c);let v=n>r?n:r;c>v&&(v=c);let A=t<a?t:a;l<A&&(A=l);let G=t>a?t:a;l>G&&(G=l);let m=Math.max(0,Math.ceil(u)),_=Math.min(x-1,Math.floor(v)),S=Math.max(0,Math.ceil(A)),T=Math.min(M-1,Math.floor(G));if(!(m>_||S>T))for(let z=S;z<=T;z++){let I=z;for(let H=m;H<=_;H++){let P=H,N=(r-P)*(l-I)-(a-I)*(c-P),O=(c-P)*(t-I)-(l-I)*(n-P),R=(n-P)*(a-I)-(t-I)*(r-P);if(b?N<0||O<0||R<0:N>0||O>0||R>0)continue;let Y=(N*e+O*i+R*p)*d,X=z*x+H;if(Y>w[X]){w[X]=Y;let B=(N*o+O*s+R*h)*d,W=(B<0?0:B>1?1:B)*y,F=W|0,J=W-F,Q=rt[(z&3)*4+(H&3)],j=J>Q&&F<y?F+1:F;L[X]=f[j>y?y:j],E&&(E[X]=g)}}}}function it(n,t){let e=n.length,o=new Array(e);for(let s=0;s<e;s++){let c=n[s].vertices;if(c.length<3){o[s]=[0,0,0];continue}let l=c[0],p=c[1],h=c[2],f=p[0]-l[0],y=p[1]-l[1],g=p[2]-l[2],L=h[0]-l[0],E=h[1]-l[1],w=h[2]-l[2],x=y*w-g*E,M=g*L-f*w,C=f*E-y*L,d=Math.hypot(x,M,C)||1;o[s]=[x/d,M/d,C/d]}let r=new Map;for(let s=0;s<e;s++){let c=n[s].vertices;for(let l=0;l<c.length;l++){let p=c[l],h=`${p[0]},${p[1]},${p[2]}`,f=r.get(h);f||(f=[],r.set(h,f)),(f.length===0||f[f.length-1]!==s)&&f.push(s)}}let a=Math.cos(t*Math.PI/180),i=new Array(e);for(let s=0;s<e;s++){let c=n[s].vertices,l=o[s],p=new Array(c.length);for(let h=0;h<c.length;h++){let f=c[h],y=r.get(`${f[0]},${f[1]},${f[2]}`),g=0,L=0,E=0;for(let x=0;x<y.length;x++){let M=y[x],C=o[M];l[0]*C[0]+l[1]*C[1]+l[2]*C[2]>=a&&(g+=C[0],L+=C[1],E+=C[2])}let w=Math.hypot(g,L,E)||1;p[h]=[g/w,L/w,E/w]}i[s]=p}return i}function st(n,t,e,o){let r=[],a=null,i="",s=()=>{i&&(a!==null?r.push(`<span style="color:${a}">${i}</span>`):r.push(i),i="")};for(let c=0;c<o;c++){for(let l=0;l<e;l++){let p=c*e+l,h=n[p],f=t&&h!==" "?t[p]??null:null;f!==a&&(s(),a=f),i+=h}s(),a=null,c<o-1&&r.push(`
|
|
2
|
-
`)}return r.join("")}function
|
|
3
|
-
`)}return
|
|
1
|
+
import{buildTextureSamplers as hn}from"@glyphcss/core";var xt=Math.PI/180,Mt=.01,qt=32e3,Ut=Mt*1.01;function pt(n,e,t){let o=n[1],r=n[0],s=n[2],l=t*xt,i=Math.cos(l),c=Math.sin(l),u=o*i-r*c,p=o*c+r*i,d=s,m=e*xt,h=Math.cos(m),f=Math.sin(m),b=p*h-d*f,C=p*f+d*h;return[u,b,C]}function Ie(n={}){let e={rotX:n.rotX??65,rotY:n.rotY??45,distance:n.distance??6,perspective:n.perspective??qt,zoom:n.zoom??.65,stretch:n.stretch??1,fovScale:n.fovScale??1,target:[0,0,0],eyeMode:!1,focal:1},[t,o]=n.center??[.5,.5];return{kind:"perspective",get rotX(){return e.rotX},set rotX(r){e.rotX=r},get rotY(){return e.rotY},set rotY(r){e.rotY=r},get distance(){return e.distance},set distance(r){e.distance=r},get perspective(){return e.perspective},set perspective(r){e.perspective=r},get zoom(){return e.zoom},set zoom(r){e.zoom=r},get stretch(){return e.stretch},set stretch(r){e.stretch=r},get fovScale(){return e.fovScale},set fovScale(r){e.fovScale=r},get target(){return e.target},set target(r){e.target=r},get eyeMode(){return e.eyeMode},set eyeMode(r){e.eyeMode=r},eyeDepth(r){let s=pt([r[0]-e.target[0],r[1]-e.target[1],r[2]-e.target[2]],e.rotX,e.rotY),l=.001*1.01;if(e.eyeMode)return-s[2]-l;if(e.perspective>0){let i=s[2]*e.zoom*50-e.distance;return e.perspective-i-e.perspective*Ut}return e.distance-s[2]-l},project(r,s,l,i){let u=50/i,p=[r[0]-e.target[0],r[1]-e.target[1],r[2]-e.target[2]],d=pt(p,e.rotX,e.rotY);if(e.eyeMode){if(d[2]>=-.001)return[NaN,NaN,d[2],NaN];let y=e.focal/-d[2],w=d[0]*y*e.zoom*50,P=d[1]*y*e.zoom*50,H=s*t+w/u*e.stretch,v=l*o+P/50;return[H,v,d[2],-1/d[2]]}if(e.perspective>0){let x=e.perspective,y=d[0]*e.zoom*50,w=d[1]*e.zoom*50,P=d[2]*e.zoom*50-e.distance,H=x-P,v=x*Mt;if(H<v)return[NaN,NaN,P,NaN];let A=x/H,L=s*t+y*A/u*e.stretch*e.fovScale,a=l*o+w*A/50*e.fovScale;return[L,a,P,1/H]}let m=.001,h=e.distance-d[2];if(h<m)return[NaN,NaN,d[2],NaN];let f=e.distance/h,b=d[0]*f*e.zoom*50,C=d[1]*f*e.zoom*50,_=s*t+b/u*e.stretch*e.fovScale,M=l*o+C/50*e.fovScale;return[_,M,d[2],1/h]}}}function Ct(n={}){let e={rotX:n.rotX??65,rotY:n.rotY??45,distance:0,zoom:n.zoom??.65,stretch:1,fovScale:1,target:[0,0,0]},[t,o]=n.center??[.5,.5];return{kind:"orthographic",get rotX(){return e.rotX},set rotX(r){e.rotX=r},get rotY(){return e.rotY},set rotY(r){e.rotY=r},get distance(){return e.distance},set distance(r){e.distance=r},get perspective(){return 0},set perspective(r){},get zoom(){return e.zoom},set zoom(r){e.zoom=r},get stretch(){return e.stretch},set stretch(r){e.stretch=r},get fovScale(){return e.fovScale},set fovScale(r){e.fovScale=r},get target(){return e.target},set target(r){e.target=r},get eyeMode(){return!1},set eyeMode(r){},eyeDepth(r){return Number.POSITIVE_INFINITY},project(r,s,l,i){let u=50/i,p=[r[0]-e.target[0],r[1]-e.target[1],r[2]-e.target[2]],d=pt(p,e.rotX,e.rotY),m=d[0]*e.zoom*50,h=d[1]*e.zoom*50,f=s*t+m/u*e.fovScale,b=l*o+h/50*e.fovScale;return[f,b,d[2]]}}}var Kt={direction:[-.5,-.7,-.5],intensity:1},Zt={intensity:.4};function Jt(n){let e=new Set,t=[];for(let o of n){let r=o.vertices;if(!(r.length<2))for(let s=0;s<r.length;s++){let l=r[s],i=r[(s+1)%r.length],c=`${l[0]},${l[1]},${l[2]}`,u=`${i[0]},${i[1]},${i[2]}`,p=c<u?`${c}|${u}`:`${u}|${c}`;if(e.has(p))continue;e.add(p);let d={from:l,to:i,weight:2};o.color&&(d.color=o.color),t.push(d)}}return t}function Gt(n){let e=n.polygons??[],t=n.mode??(e.length?"solid":"wireframe"),o=n.wireframe??(t==="wireframe"?Jt(e):[]);return{camera:n.camera,grid:n.grid,polygons:e,wireframe:o,mode:t,directionalLight:n.directionalLight??Kt,ambientLight:n.ambientLight??Zt,glyphPalette:n.glyphPalette??"default",useColors:n.useColors??!0,smoothShading:n.smoothShading??!1,creaseAngle:n.creaseAngle??60,doubleSided:n.doubleSided??!1,supersample:n.supersample??1,temporalBlend:n.temporalBlend??0,shadow:n.shadow,castShadowFlags:n.castShadowFlags??[],receiveShadowFlags:n.receiveShadowFlags??[],...n.depthBiases?{depthBiases:n.depthBiases}:{},...n.depthEpsilon?{depthEpsilon:n.depthEpsilon}:{}}}import{sampleTexel as Qt,polygonTexture as en}from"@glyphcss/core";var Dn=" .:-=+*#%@".split(""),Vn=" .:-=+*#%@".split(""),mt={default:{thin:"\xB7\u22C5\u2219\u02D9\xB7\u22C5\u2219".split(""),normal:"\u254B\u256C\u253C\u2573\u25C6\u25C7\u25CA\u25B2\u25B3\u25BC\u25BD\u25C8\u2B21\u2B22\u2234\u2235\u22A5\u2295\u2297\u2299\u229A\u229B".split(""),core:"\u2726\u2727\u2729\u25C9\u2299\u25CE".split(""),solid:" .:-=+*#%@".split("")},ascii:{thin:".'".split(""),normal:"+*x".split(""),core:"#@".split(""),solid:" .,:;!+=*xX#@".split("")},dots:{thin:"\xB7\u22C5".split(""),normal:"\u2022\u25CF".split(""),core:"\u25C9\u25CE".split(""),solid:" \xB7\u22C5\u2218\u2022\u25CF\u25C9\u25CE\u2B24".split("")},lines:{thin:"\u2500\u2502".split(""),normal:"\u2550\u2551".split(""),core:"\u2588".split(""),solid:" \u2500\u2550\u256C\u2551\u2588\u2593\u2592\u2591".split("")},blocks:{thin:"\u2591\u2581".split(""),normal:"\u2592\u2593\u258C\u2590\u2580\u2584".split(""),core:"\u2588".split(""),solid:" \u2591\u2592\u2593\u258C\u2590\u2588\u2580\u2584\u25A0".split("")},stars:{thin:"\xB7\u22C6".split(""),normal:"\u2726\u2727\u2729\u272A".split(""),core:"\u272B\u272C\u272D\u2605".split(""),solid:" \xB7\u22C6\u2217\u2726\u2727\u2729\u272A\u272B\u2605".split("")},arrows:{thin:"\xB7\u2219".split(""),normal:"\u2190\u2191\u2192\u2193".split(""),core:"\u2196\u2197\u2198\u2199\u2921\u2922".split(""),solid:" \xB7\u2219\u2191\u2197\u2192\u2198\u2193\u2199\u2190\u2196".split("")},braille:{thin:"\u2801\u2802\u2804\u2808".split(""),normal:"\u2803\u2805\u2806\u2809\u280A\u280B\u280C\u280D\u280E\u280F".split(""),core:"\u283F\u28FF".split(""),solid:" \u2801\u2803\u2807\u2827\u2837\u283F\u287F\u28FF".split("")},runes:{thin:".\xB7".split(""),normal:"\u16A0\u16A1\u16A2\u16A3\u16A4\u16A6\u16A8\u16B1\u16B2\u16B3\u16B7\u16B9\u16C3\u16C7\u16C9".split(""),core:"\u16DE\u16DF\u16E1\u16E2\u16E3".split(""),solid:" \xB7\u16A0\u16A3\u16A4\u16A8\u16B1\u16B7\u16DE\u16E2".split("")},math:{thin:"\u2219\u2218".split(""),normal:"\u2211\u220F\u222B\u221A\u221E\u2248\u2260\u2264\u2265\u2282\u2283\u2286\u2287".split(""),core:"\u222E\u222F\u2230\u2202".split(""),solid:" \u2219\u2218\u2211\u222B\u221A\u221E\u2248\u2295\u2297".split("")},binary:{thin:"\xB7.".split(""),normal:"01".split(""),core:"\u2588".split(""),solid:" .:01\u2588\u2588".split("")},hex:{thin:"\xB7\u2219".split(""),normal:"0123456789ABCDEF".split(""),core:"FFAA".split(""),solid:" 0123456789AF".split("")}},Xn=mt.default;function ht(n){return mt[n]??mt.default}function _t(n){let{camera:e,grid:t,wireframe:o,mode:r}=n,{cols:s,rows:l,cellAspect:i}=t;if(r==="solid"){let d=n.supersample&&n.supersample>1?Math.floor(n.supersample):1;return tn(n,s,l,i,d)}let c=ht(n.glyphPalette),u=new Uint8Array(s*l),p=n.useColors?new Array(s*l).fill(null):null;for(let d of o){let m=e.project(d.from,s,l,i),h=e.project(d.to,s,l,i);m[0]!==m[0]||h[0]!==h[0]||un(u,p,m[0]|0,m[1]|0,h[0]|0,h[1]|0,d.weight??2,d.color??null,s,l)}return dn(u,p,s,l,c)}function tn(n,e,t,o,r){let s=e*r,l=t*r,{camera:i,polygons:c,directionalLight:u,ambientLight:p,smoothShading:d,creaseAngle:m,doubleSided:h,castShadowFlags:f,receiveShadowFlags:b}=n,C=n.depthBiases,_=n.depthEpsilon??0,M=r>1?{zoom:i.zoom,eyeDepth:B=>i.eyeDepth(B),project:(B,V,X,Y)=>{let S=i.project(B,V,X,Y);return[V*.5+(S[0]-V*.5)*r,X*.5+(S[1]-X*.5)*r,S[2],S[3]]}}:i,x=ht(n.glyphPalette).solid,y=x.length-1,w=new Array(s*l).fill(" "),P=n.useColors,H=P?new Array(s*l).fill(null):null,v=new Float64Array(s*l).fill(-1/0),A=n.temporalBlend>0&&!!n.temporalHistory,L=A?new Float32Array(s*l*3).fill(NaN):null,a=u.direction,E=Math.hypot(a[0],a[1],a[2])||1,g=a[0]/E,G=a[1]/E,z=a[2]/E,F=u.intensity??1,T=p.intensity??.4,W=ze(u.color??"#ffffff"),R=ze(p.color??"#ffffff"),j=d&&m>0?an(c,m):null,N=new Map,re=n.textureSamplers??null,k=n.shadow,q=k!=null&&f.length>0?ln(c,f,g,G,z):null,oe=k?.opacity??.25,K=k?.lift??.05,Z=k?.color??"#000000",ie=q?ze(Z):[0,0,0],O=globalThis.__glyphPerfDetail,Ve=O?performance.now():0,ge=[],J=n.shadeCache??null,Q=-1,ve=(B,V,X,Y)=>{if(q===null||!Y)return null;let S=q,I=Oe(B,S.right[0],S.right[1],S.right[2],S.up[0],S.up[1],S.up[2],S.dir[0],S.dir[1],S.dir[2],S.uMin,S.uMax,S.vMin,S.vMax),ee=Oe(V,S.right[0],S.right[1],S.right[2],S.up[0],S.up[1],S.up[2],S.dir[0],S.dir[1],S.dir[2],S.uMin,S.uMax,S.vMin,S.vMax),de=Oe(X,S.right[0],S.right[1],S.right[2],S.up[0],S.up[1],S.up[2],S.dir[0],S.dir[1],S.dir[2],S.uMin,S.uMax,S.vMin,S.vMax);return{map:S,luA:I[0],lvA:I[1],ldA:I[2],luB:ee[0],lvB:ee[1],ldB:ee[2],luC:de[0],lvC:de[1],ldC:de[2],lift:K,opacity:oe,shadowColorRgb:ie,shadowColorHex:Z,litCache:N}};for(let B=0;B<c.length;B++){let V=c[B],X=V.vertices;if(X.length<3)continue;let Y=V.uvs,S=null;if(re!==null&&Y&&Y.length>=X.length){let I=en(V);I&&(S=re.get(I)??null)}for(let I=0;I<X.length;I++)ge[I]=M.project(X[I],s,l,o);for(let I=1;I<X.length-1;I++){Q++;let ee=0,de=I,Ee=I+1,se=X[ee],pe=X[de],we=X[Ee],ae=ge[ee],ye=ge[de],xe=ge[Ee],rt=(ae[0]!==ae[0]?1:0)+(ye[0]!==ye[0]?1:0)+(xe[0]!==xe[0]?1:0);if(rt===3||rt===0&&!h&&(ye[0]-ae[0])*(xe[1]-ae[1])-(ye[1]-ae[1])*(xe[0]-ae[0])>0)continue;let Ge,Le,Te,Re=null;if(J!==null&&J.iA[Q]!==void 0)Ge=J.iA[Q],Le=J.iB[Q],Te=J.iC[Q],Re=J.lit[Q];else{let $=pe[0]-se[0],me=pe[1]-se[1],Ae=pe[2]-se[2],he=we[0]-se[0],$e=we[1]-se[1],We=we[2]-se[2],je=me*We-Ae*$e,Ne=Ae*he-$*We,U=$*$e-me*he,D=Math.hypot(je,Ne,U)||1,te=je/D,fe=Ne/D,le=U/D,ce,_e,ot,it,st,lt,at,ct,ut;if(j){let ke=j[B],Me=ke[ee],Fe=ke[de],Ye=ke[Ee];ce=Me[0],_e=Me[1],ot=Me[2],it=Fe[0],st=Fe[1],lt=Fe[2],at=Ye[0],ct=Ye[1],ut=Ye[2]}else ce=it=at=te,_e=st=ct=fe,ot=lt=ut=le;let Et=ce*g+_e*G+ot*z,wt=it*g+st*G+lt*z,At=at*g+ct*G+ut*z,Nt=h?Math.abs(Et):Math.max(0,-Et),kt=h?Math.abs(wt):Math.max(0,-wt),Yt=h?Math.abs(At):Math.max(0,-At);if(Ge=Math.min(1,T+Nt*F),Le=Math.min(1,T+kt*F),Te=Math.min(1,T+Yt*F),P){let ke=(Ge+Le+Te)/3,Me=Math.max(0,ke-T),Fe=V.color??"#ffffff",Ye=Me*255|0,St=`${Fe}:${Ye}`,qe=N.get(St);if(qe===void 0){let dt=ze(Fe),Dt=T*R[0]/255+Me*W[0]/255,Vt=T*R[1]/255+Me*W[1]/255,Xt=T*R[2]/255+Me*W[2]/255,$t=Math.min(255,dt[0]*Dt),Wt=Math.min(255,dt[1]*Vt),jt=Math.min(255,dt[2]*Xt);qe=`#${ne($t)}${ne(Wt)}${ne(jt)}`,N.set(St,qe)}Re=qe}J!==null&&(J.iA[Q]=Ge,J.iB[Q]=Le,J.iC[Q]=Te,J.lit[Q]=Re)}let bt=b[B]??!1,He=1+(C?.[B]??0),vt=null;if(S!==null&&Y){let $=Y[ee],me=Y[de],Ae=Y[Ee],he=Math.max(0,(Ge+Le+Te)/3-T);vt={sampler:S,ua:$[0],va:$[1],ub:me[0],vb:me[1],uc:Ae[0],vc:Ae[1],tintR:T*R[0]/255+he*W[0]/255,tintG:T*R[1]/255+he*W[1]/255,tintB:T*R[2]/255+he*W[2]/255}}if(rt===0)Lt(ae[0],ae[1],(ae[3]??ae[2])*He,Ge,ye[0],ye[1],(ye[3]??ye[2])*He,Le,xe[0],xe[1],(xe[3]??xe[2])*He,Te,x,y,Re,w,H,v,s,l,ve(se,pe,we,bt),h,se,pe,we,L,_,vt);else{let $=[],me=[],Ae=[se,pe,we],he=[Ge,Le,Te],$e=M.eyeDepth(se),We=M.eyeDepth(pe),je=M.eyeDepth(we),Ne=[$e,We,je];for(let U=0;U<3;U++){let D=(U+1)%3,te=Ne[U],fe=Ne[D];if(te>0&&($.push(Ae[U]),me.push(he[U])),te>0!=fe>0){let le=te/(te-fe),ce=Ae[U],_e=Ae[D];$.push([ce[0]+le*(_e[0]-ce[0]),ce[1]+le*(_e[1]-ce[1]),ce[2]+le*(_e[2]-ce[2])]),me.push(he[U]+le*(he[D]-he[U]))}}if($.length>=3){let U=$.map(D=>M.project(D,s,l,o));for(let D=1;D<$.length-1;D++){let te=U[0],fe=U[D],le=U[D+1],ce=(fe[0]-te[0])*(le[1]-te[1])-(fe[1]-te[1])*(le[0]-te[0]);!h&&ce>0||Lt(te[0],te[1],(te[3]??te[2])*He,me[0],fe[0],fe[1],(fe[3]??fe[2])*He,me[D],le[0],le[1],(le[3]??le[2])*He,me[D+1],x,y,Re,w,H,v,s,l,ve($[0],$[D],$[D+1],bt),h,$[0],$[D],$[D+1],L,_,null)}}}}}O&&(O.loop??(O.loop=[])).push(performance.now()-Ve);let yt=O?performance.now():0,Pe=w,Se=H,Xe=L;if(r>1){let B=rn(w,H,v,L,e,t,r,x);Pe=B.glyphBuf,Se=B.colorBuf,Xe=B.worldPos}A&&nn(Pe,Se,Xe,e,t,o,x,n.temporalBlend,n.temporalHistory,i);let nt=cn(Pe,Se,e,t);return O&&(O.string??(O.string=[])).push(performance.now()-yt),nt}function nn(n,e,t,o,r,s,l,i,c,u){let p=o*r,d=l.length-1,m=new Map;for(let x=0;x<l.length;x++)m.set(l[x],x);let h=c.cam;(c.cols!==o||c.rows!==r||c.idx.length!==p)&&(c.cols=o,c.rows=r,c.idx=new Float32Array(p),c.r=new Float32Array(p),c.g=new Float32Array(p),c.b=new Float32Array(p),h=null);let f=null;if(h){let x=Ie({rotX:h.rotX,rotY:h.rotY,distance:h.distance,perspective:h.perspective,zoom:h.zoom,stretch:h.stretch});x.target=h.target,f=y=>x.project(y,o,r,s)}let b=new Float32Array(p),C=new Float32Array(p),_=new Float32Array(p),M=new Float32Array(p);for(let x=0;x<r;x++)for(let y=0;y<o;y++){let w=x*o+y,P=m.get(n[w])??0,H=0,v=0,A=0,L=e?e[w]:null;if(L){let k=ze(L);H=k[0],v=k[1],A=k[2]}let a=0,E=0,g=0,G=0,z=0,F=t[w*3];if(f&&F===F){let k=f([F,t[w*3+1],t[w*3+2]]),q=Math.round(k[0]),oe=Math.round(k[1]);if(k[0]===k[0]&&q>=0&&q<o&&oe>=0&&oe<r){let K=oe*o+q;E=c.idx[K],g=c.r[K],G=c.g[K],z=c.b[K],a=i}}let T=1-a,W=T*P+a*E,R=T*H+a*g,j=T*v+a*G,N=T*A+a*z;b[w]=W,C[w]=R,_[w]=j,M[w]=N;let re=Math.round(W);re<0?re=0:re>d&&(re=d),n[w]=l[re],e&&(e[w]=re===0?null:`#${ne(R)}${ne(j)}${ne(N)}`)}c.idx=b,c.r=C,c.g=_,c.b=M,c.cam={rotX:u.rotX,rotY:u.rotY,target:[u.target[0],u.target[1],u.target[2]],zoom:u.zoom,perspective:u.perspective,distance:u.distance,stretch:u.stretch}}function rn(n,e,t,o,r,s,l,i){let c=new Map;for(let b=0;b<i.length;b++)c.set(i[b],b);let u=i.length-1,p=r*l,d=new Array(r*s).fill(" "),m=e?new Array(r*s).fill(null):null,h=o?new Float32Array(r*s*3).fill(NaN):null,f=1/(l*l);for(let b=0;b<s;b++)for(let C=0;C<r;C++){let _=0,M=0,x=0,y=0,w=0,P=0,H=0,v=0;for(let a=0;a<l;a++){let E=(b*l+a)*p+C*l;for(let g=0;g<l;g++){let G=E+g;if(t[G]!==-1/0){if(_+=c.get(n[G])??0,M++,m){let z=e[G];if(z){let F=ze(z);x+=F[0],y+=F[1],w+=F[2]}}h&&(P+=o[G*3],H+=o[G*3+1],v+=o[G*3+2])}}}let A=b*r+C;if(M===0)continue;let L=Math.round(_*f);L<0?L=0:L>u&&(L=u),d[A]=i[L],m&&(m[A]=`#${ne(x/M)}${ne(y/M)}${ne(w/M)}`),h&&(h[A*3]=P/M,h[A*3+1]=H/M,h[A*3+2]=v/M)}return{glyphBuf:d,colorBuf:m,worldPos:h}}var on=new Float64Array([(0+.5)/16,(8+.5)/16,(2+.5)/16,(10+.5)/16,(12+.5)/16,(4+.5)/16,(14+.5)/16,(6+.5)/16,(3+.5)/16,(11+.5)/16,(1+.5)/16,(9+.5)/16,(15+.5)/16,(7+.5)/16,(13+.5)/16,(5+.5)/16]),be=256;function Oe(n,e,t,o,r,s,l,i,c,u,p,d,m,h){let f=e*n[0]+t*n[1]+o*n[2],b=r*n[0]+s*n[1]+l*n[2],C=-(i*n[0]+c*n[1]+u*n[2]),_=(f-p)/(d-p)*(be-1),M=(b-m)/(h-m)*(be-1);return[_,M,C]}function sn(n,e,t,o){let r=e[0],s=e[1],l=e[2],i=t[0],c=t[1],u=t[2],p=o[0],d=o[1],m=o[2],h=(i-r)*(d-s)-(c-s)*(p-r);if(h===0)return;let f=1/h,b=r<i?r:i;p<b&&(b=p);let C=r>i?r:i;p>C&&(C=p);let _=s<c?s:c;d<_&&(_=d);let M=s>c?s:c;d>M&&(M=d);let x=Math.max(0,Math.ceil(b)),y=Math.min(be-1,Math.floor(C)),w=Math.max(0,Math.ceil(_)),P=Math.min(be-1,Math.floor(M));if(x>y||w>P)return;let H=h>0;for(let v=w;v<=P;v++)for(let A=x;A<=y;A++){let L=A,a=v,E=(i-L)*(d-a)-(c-a)*(p-L),g=(p-L)*(s-a)-(d-a)*(r-L),G=(r-L)*(c-a)-(s-a)*(i-L);if(H?E<0||g<0||G<0:E>0||g>0||G>0)continue;let z=(E*l+g*u+G*m)*f,F=v*be+A;z>n[F]&&(n[F]=z)}}function ln(n,e,t,o,r){let s,l,i;Math.abs(t)<.9?(s=0,l=r,i=-o):(s=-r,l=0,i=t);let c=Math.hypot(s,l,i);s/=c,l/=c,i/=c;let u=l*r-i*o,p=i*t-s*r,d=s*o-l*t,m=1/0,h=-1/0,f=1/0,b=-1/0,C=!1;for(let y=0;y<n.length;y++)if(e[y]){C=!0;for(let w of n[y].vertices){let P=s*w[0]+l*w[1]+i*w[2],H=u*w[0]+p*w[1]+d*w[2];P<m&&(m=P),P>h&&(h=P),H<f&&(f=H),H>b&&(b=H)}}if(!C)return null;let _=(h-m)*.05+.01,M=(b-f)*.05+.01;m-=_,h+=_,f-=M,b+=M;let x=new Float64Array(be*be).fill(-1/0);for(let y=0;y<n.length;y++){if(!e[y])continue;let w=n[y].vertices;if(!(w.length<3))for(let P=1;P<w.length-1;P++){let H=w[0],v=w[P],A=w[P+1],L=Oe(H,s,l,i,u,p,d,t,o,r,m,h,f,b),a=Oe(v,s,l,i,u,p,d,t,o,r,m,h,f,b),E=Oe(A,s,l,i,u,p,d,t,o,r,m,h,f,b);sn(x,L,a,E)}}return{buf:x,right:[s,l,i],up:[u,p,d],dir:[t,o,r],uMin:m,uMax:h,vMin:f,vMax:b}}function Lt(n,e,t,o,r,s,l,i,c,u,p,d,m,h,f,b,C,_,M,x,y,w,P,H,v,A,L,a){let E=(r-n)*(u-e)-(s-e)*(c-n);if(E===0||!w&&E>0)return;let g=1/E,G=E>0,z=n<r?n:r;c<z&&(z=c);let F=n>r?n:r;c>F&&(F=c);let T=e<s?e:s;u<T&&(T=u);let W=e>s?e:s;u>W&&(W=u);let R=Math.max(0,Math.ceil(z)),j=Math.min(M-1,Math.floor(F)),N=Math.max(0,Math.ceil(T)),re=Math.min(x-1,Math.floor(W));if(!(R>j||N>re))for(let k=N;k<=re;k++){let q=k;for(let oe=R;oe<=j;oe++){let K=oe,Z=(r-K)*(u-q)-(s-q)*(c-K),ie=(c-K)*(e-q)-(u-q)*(n-K),O=(n-K)*(s-q)-(e-q)*(r-K);if(G?Z<0||ie<0||O<0:Z>0||ie>0||O>0)continue;let Ve=(Z*t+ie*l+O*p)*g,ge=k*M+oe,J=_[ge];if(Ve>(J>0?J*(1-L):J)){if(_[ge]=Ve,A!==null){let V=ge*3;A[V]=(Z*P[0]+ie*H[0]+O*v[0])*g,A[V+1]=(Z*P[1]+ie*H[1]+O*v[1])*g,A[V+2]=(Z*P[2]+ie*H[2]+O*v[2])*g}let Q=(Z*o+ie*i+O*d)*g,ve=f;if(a!==null){let V=(Z*a.ua+ie*a.ub+O*a.uc)*g,X=(Z*a.va+ie*a.vb+O*a.vc)*g,Y=Qt(a.sampler,V,X);if(Y!==null&&Y.a>8){let S=Y.r*a.tintR|0;S>255&&(S=255);let I=Y.g*a.tintG|0;I>255&&(I=255);let ee=Y.b*a.tintB|0;ee>255&&(ee=255),ve=`#${ne(S)}${ne(I)}${ne(ee)}`,Q*=(.299*Y.r+.587*Y.g+.114*Y.b)/255}}let Pe=(Q<0?0:Q>1?1:Q)*h,Se=Pe|0,Xe=Pe-Se,nt=on[(k&3)*4+(oe&3)],B=Xe>nt&&Se<h?Se+1:Se;if(B>h&&(B=h),y!==null){let V=(Z*y.luA+ie*y.luB+O*y.luC)*g,X=(Z*y.lvA+ie*y.lvB+O*y.lvC)*g,Y=(Z*y.ldA+ie*y.ldB+O*y.ldC)*g,S=V|0,I=X|0;if(S>=0&&S<be&&I>=0&&I<be){let ee=y.map.buf[I*be+S];if(ee>-1/0&&Y+y.lift<ee&&(B=Math.max(0,B-Math.round(y.opacity*h)),ve!==null)){let de=`shadow:${ve}:${B}`,Ee=y.litCache.get(de);if(Ee===void 0){let se=ze(ve),pe=y.shadowColorRgb,we=Math.round(se[0]*(1-y.opacity)+pe[0]*y.opacity),ae=Math.round(se[1]*(1-y.opacity)+pe[1]*y.opacity),ye=Math.round(se[2]*(1-y.opacity)+pe[2]*y.opacity);Ee=`#${ne(we)}${ne(ae)}${ne(ye)}`,y.litCache.set(de,Ee)}ve=Ee}}}b[ge]=m[B],C&&(C[ge]=ve)}}}}function an(n,e){let t=n.length,o=new Array(t);for(let i=0;i<t;i++){let c=n[i].vertices;if(c.length<3){o[i]=[0,0,0];continue}let u=c[0],p=c[1],d=c[2],m=p[0]-u[0],h=p[1]-u[1],f=p[2]-u[2],b=d[0]-u[0],C=d[1]-u[1],_=d[2]-u[2],M=h*_-f*C,x=f*b-m*_,y=m*C-h*b,w=Math.hypot(M,x,y)||1;o[i]=[M/w,x/w,y/w]}let r=new Map;for(let i=0;i<t;i++){let c=n[i].vertices;for(let u=0;u<c.length;u++){let p=c[u],d=`${p[0]},${p[1]},${p[2]}`,m=r.get(d);m||(m=[],r.set(d,m)),(m.length===0||m[m.length-1]!==i)&&m.push(i)}}let s=Math.cos(e*Math.PI/180),l=new Array(t);for(let i=0;i<t;i++){let c=n[i].vertices,u=o[i],p=new Array(c.length);for(let d=0;d<c.length;d++){let m=c[d],h=r.get(`${m[0]},${m[1]},${m[2]}`),f=0,b=0,C=0;for(let M=0;M<h.length;M++){let x=h[M],y=o[x];u[0]*y[0]+u[1]*y[1]+u[2]*y[2]>=s&&(f+=y[0],b+=y[1],C+=y[2])}let _=Math.hypot(f,b,C)||1;p[d]=[f/_,b/_,C/_]}l[i]=p}return l}function cn(n,e,t,o){let r=[],s=null,l="",i=()=>{l&&(s!==null?r.push(`<span style="color:${s}">${l}</span>`):r.push(l),l="")};for(let c=0;c<o;c++){for(let u=0;u<t;u++){let p=c*t+u,d=n[p],m=e&&d!==" "?e[p]??null:null;m!==s&&(i(),s=m),l+=d}i(),s=null,c<o-1&&r.push(`
|
|
2
|
+
`)}return r.join("")}function un(n,e,t,o,r,s,l,i,c,u){let p=Math.abs(r-t),d=-Math.abs(s-o),m=t<r?1:-1,h=o<s?1:-1,f=p+d;for(;;){if(t>=0&&t<c&&o>=0&&o<u){let C=o*c+t;n[C]<l&&(n[C]=l,e&&(e[C]=i))}if(t===r&&o===s)break;let b=2*f;b>=d&&(f+=d,t+=m),b<=p&&(f+=p,o+=h)}}function dn(n,e,t,o,r){let s=[],l=null,i="",c=()=>{i&&(l!==null?s.push(`<span style="color:${l}">${i}</span>`):s.push(i),i="")};for(let u=0;u<o;u++){for(let p=0;p<t;p++){let d=u*t+p,m=n[d],h,f;m===0?(h=" ",f=null):(h=m===1?r.thin[Math.random()*r.thin.length|0]:m===2?r.normal[Math.random()*r.normal.length|0]:r.core[Math.random()*r.core.length|0],f=e?e[d]??null:null),f!==l&&(c(),l=f),i+=h}c(),l=null,u<o-1&&s.push(`
|
|
3
|
+
`)}return s.join("")}var Tt=new Map;function ze(n){let e=Tt.get(n);if(e!==void 0)return e;let t=pn(n);return Tt.set(n,t),t}function pn(n){let e=n.startsWith("#")?n.slice(1):n;if(e.length===3){let t=parseInt(e[0]+e[0],16),o=parseInt(e[1]+e[1],16),r=parseInt(e[2]+e[2],16);return[t||0,o||0,r||0]}if(e.length===6){let t=parseInt(e.slice(0,2),16),o=parseInt(e.slice(2,4),16),r=parseInt(e.slice(4,6),16);return[t||0,o||0,r||0]}return[255,255,255]}function ne(n){let e=Math.max(0,Math.min(255,n|0)).toString(16);return e.length===1?"0"+e:e}var zt="glyph-styles";function Pt(n){let e=n??(typeof document<"u"?document:void 0);if(!e||e.getElementById(zt))return;let t=e.createElement("style");t.id=zt,t.textContent=mn,e.head.appendChild(t)}var mn=`
|
|
4
4
|
/* \u2500\u2500 React / Vue host wrapper \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
|
|
5
5
|
|
|
6
6
|
.glyph-host {
|
|
@@ -59,4 +59,5 @@ function ze(n,t,e){let o=Math.cos(t),r=Math.sin(t),a=o*n[1]-r*n[0],i=r*n[1]+o*n[
|
|
|
59
59
|
the content from the 3D vertex being labelled. */
|
|
60
60
|
transform: translate(-50%, -50%);
|
|
61
61
|
}
|
|
62
|
-
`;function ke(n,t,e,o,r){return n.map(a=>{let[i,s,c]=t.project(a.at,e,o,r),l=c>-3&&i>=0&&i<e&&s>=0&&s<o;return{id:a.id,col:i,row:s,depth:c,visible:l}})}var ut=1;function dt(n,t){let{position:e,scale:o,rotation:r}=t;if(!e&&!o&&!r)return n;let[a,i,s]=e??[0,0,0],c=1,l=1,p=1;o!==void 0&&(typeof o=="number"?c=l=p=o:[c,l,p]=o);let[h,f,y]=r??[0,0,0],g=Math.cos(h),L=Math.sin(h),E=Math.cos(f),w=Math.sin(f),x=Math.cos(y),M=Math.sin(y);function C(d){let b=d[0]*c,u=d[1]*l,v=d[2]*p,A=x*b-M*u,G=M*b+x*u,m=v;return b=E*A+w*m,u=G,v=-w*A+E*m,A=b,G=g*u-L*v,m=L*u+g*v,[A+a,G+i,m+s]}return n.map(d=>({...d,vertices:d.vertices.map(C)}))}function Ie(n,t={}){Re(n.ownerDocument??void 0);let e={mode:t.mode??"solid",glyphPalette:t.glyphPalette??"default",useColors:t.useColors??!0,cols:t.cols??80,rows:t.rows??24,cellAspect:t.cellAspect??2,directionalLight:t.directionalLight??{direction:[.5,.7,.5],intensity:1},ambientLight:t.ambientLight??{intensity:.4},camera:t.camera??ee(),smoothShading:t.smoothShading??!1,creaseAngle:t.creaseAngle??60,autoSize:t.autoSize??!1},o=n.ownerDocument.createElement("div");o.className="glyph-scene";let r=n.ownerDocument.createElement("pre");r.className="glyph-output";let a=n.ownerDocument.createElement("div");a.className="glyph-hotspot-layer",o.appendChild(r),o.appendChild(a),n.appendChild(o);let i=new Map,s=[],c=!1;function l(){c||(c=!0,Promise.resolve().then(()=>{c=!1,p()}))}function p(){let d=[];for(let v of i.values()){let A=dt(v.polygons,v.transform);for(let G of A)d.push(G)}let b=He({camera:e.camera,grid:{cols:e.cols,rows:e.rows,cellAspect:e.cellAspect},polygons:d,mode:e.mode,directionalLight:e.directionalLight,ambientLight:e.ambientLight,glyphPalette:e.glyphPalette,useColors:e.useColors,smoothShading:e.smoothShading,creaseAngle:e.creaseAngle}),u=Pe(b);e.useColors?r.innerHTML=u:r.textContent=u,h()}function h(){let{cols:d,rows:b,cellAspect:u,camera:v}=e,A=ke(s.map(S=>S.hotspot),v,d,b,u),G=r.getBoundingClientRect(),m=d>0?G.width/d:8,_=b>0?G.height/b:16;for(let S=0;S<s.length;S++){let{el:T}=s[S],z=A[S];z.visible?(T.style.display="",T.style.left=`${(z.col+.5)*m}px`,T.style.top=`${(z.row+.5)*_}px`,T.style.zIndex=String(Math.round(z.depth*1e3))):T.style.display="none"}}function f(d,b={}){let u=ut++;return i.set(u,{id:u,polygons:d,transform:b}),l(),{get id(){return u},get name(){return i.get(u)?.transform.id},get polygons(){return d},setTransform(v){let A=i.get(u);A&&(A.transform=v,l())},dispose(){i.delete(u),l()}}}function y(d,b){let u=n.ownerDocument.createElement("div");u.className="glyph-hotspot",u.setAttribute("data-hotspot-id",d.id);let[v,A]=d.size??[1,1];u.style.position="absolute",u.style.width=`${v}ch`,u.style.height=`${A*e.cellAspect}ch`,b&&u.addEventListener("click",b),a.appendChild(u);let G={hotspot:{id:d.id,at:d.at,size:d.size},el:u,onClick:b};return s.push(G),l(),{get el(){return u},remove(){let m=s.indexOf(G);m>=0&&s.splice(m,1),b&&u.removeEventListener("click",b),a.removeChild(u),l()}}}function g(){p()}function L(d){d.mode!==void 0&&(e.mode=d.mode),d.glyphPalette!==void 0&&(e.glyphPalette=d.glyphPalette),d.useColors!==void 0&&(e.useColors=d.useColors),d.cols!==void 0&&(e.cols=d.cols),d.rows!==void 0&&(e.rows=d.rows),d.cellAspect!==void 0&&(e.cellAspect=d.cellAspect),d.directionalLight!==void 0&&(e.directionalLight=d.directionalLight),d.ambientLight!==void 0&&(e.ambientLight=d.ambientLight),d.camera!==void 0&&(e.camera=d.camera),d.smoothShading!==void 0&&(e.smoothShading=d.smoothShading),d.creaseAngle!==void 0&&(e.creaseAngle=d.creaseAngle),d.autoSize!==void 0&&(e.autoSize=d.autoSize,e.autoSize&&!M&&typeof ResizeObserver<"u"?(M=new ResizeObserver(()=>x()),M.observe(n),x()):!e.autoSize&&M&&(M.disconnect(),M=null)),l()}function E(){return{...e}}function w(){let d=n.ownerDocument.createElement("span");d.textContent="M",d.style.cssText="position:absolute;visibility:hidden;font-family:inherit;font-size:inherit;line-height:inherit;white-space:pre;padding:0;margin:0",r.appendChild(d);let b=d.getBoundingClientRect();return d.remove(),{w:b.width||8,h:b.height||16}}function x(){let d=n.clientWidth,b=n.clientHeight;if(!d||!b)return;let u=w(),v=Math.max(20,Math.floor(d/u.w)),A=Math.max(8,Math.floor(b/u.h)),G=u.h/u.w,m=!1;e.cols!==v&&(e.cols=v,m=!0),e.rows!==A&&(e.rows=A,m=!0),Math.abs(e.cellAspect-G)>.01&&(e.cellAspect=G,m=!0),m&&l()}let M=null;e.autoSize&&typeof ResizeObserver<"u"&&(M=new ResizeObserver(()=>x()),M.observe(n),x());function C(){M&&(M.disconnect(),M=null),i.clear(),n.contains(o)&&n.removeChild(o)}return l(),{get host(){return n},get output(){return r},get camera(){return e.camera},add:f,addHotspot:y,rerender:g,setOptions:L,getOptions:E,fit:x,destroy:C}}var ht=typeof HTMLElement<"u"?HTMLElement:class{},pt=["mode","glyph-palette","use-colors","cols","rows","cell-aspect","directional-direction","directional-intensity","ambient-intensity","auto-size"];function Z(n){if(n==null)return;let t=parseFloat(n);return Number.isFinite(t)?t:void 0}function mt(n){if(n==="wireframe"||n==="solid"||n==="voxel")return n}function ft(n){if(n!==null){if(n==="false")return!1;if(n==="true"||n==="")return!0}}var te=class extends ht{constructor(){super(...arguments);this._scene=null}static get observedAttributes(){return[...pt]}getScene(){return this._scene}_readOptions(){let e={},o=mt(this.getAttribute("mode"));o!==void 0&&(e.mode=o);let r=this.getAttribute("glyph-palette");r&&(e.glyphPalette=r);let a=ft(this.getAttribute("use-colors"));a!==void 0&&(e.useColors=a);let i=Z(this.getAttribute("cols"));i!==void 0&&(e.cols=i);let s=Z(this.getAttribute("rows"));s!==void 0&&(e.rows=s);let c=Z(this.getAttribute("cell-aspect"));c!==void 0&&(e.cellAspect=c);let l=Z(this.getAttribute("directional-intensity"));l!==void 0&&(e.directionalLight={direction:[.5,.7,.5],intensity:l});let p=Z(this.getAttribute("ambient-intensity"));return p!==void 0&&(e.ambientLight={intensity:p}),this.hasAttribute("auto-size")&&(e.autoSize=!0),e}_findCameraAncestor(){let e=this.parentElement;for(;e;){let o=e.tagName.toLowerCase();if(o==="glyph-perspective-camera"||o==="glyph-orthographic-camera"||o==="glyph-camera")return e;e=e.parentElement}return null}_initScene(e){let o=typeof e.getCamera=="function"?e.getCamera():void 0,r=this._readOptions();o&&(r.camera=o),this._scene=Ie(this,r),this.dispatchEvent(new CustomEvent("glyphcss:scene-ready",{bubbles:!1}))}connectedCallback(){if(this._scene)return;let e=this._findCameraAncestor();if(!e)throw new Error("glyphcss: <glyph-scene> must be placed inside a <glyph-camera>, <glyph-perspective-camera>, or <glyph-orthographic-camera>.");if((typeof e.getCamera=="function"?e.getCamera():null)!==null)this._initScene(e);else{let r=()=>{e.removeEventListener("glyph:camera-ready",r),this._scene||this._initScene(e)};e.addEventListener("glyph:camera-ready",r)}}rerender(){this._scene?.rerender()}disconnectedCallback(){this._scene&&(this._scene.destroy(),this._scene=null)}attributeChangedCallback(e,o,r){o!==r&&this._scene&&this._scene.setOptions(this._readOptions())}};import{loadMesh as yt,resolveGeometry as gt,computeSceneBbox as bt}from"@glyphcss/core";var vt=typeof HTMLElement<"u"?HTMLElement:class{},Et=["src","geometry","size","color","position","scale","rotation","normalize"];function Mt(n){let t=bt(n),e=(t.min[0]+t.max[0])/2,o=(t.min[1]+t.max[1])/2,r=(t.min[2]+t.max[2])/2,i=2/(Math.max(t.max[0]-t.min[0],t.max[1]-t.min[1],t.max[2]-t.min[2])||1);return n.map(s=>({...s,vertices:s.vertices.map(c=>[(c[0]-e)*i,(c[1]-o)*i,(c[2]-r)*i])}))}function Ae(n){if(!n)return;let t=n.split(",").map(e=>parseFloat(e.trim()));if(!(t.length!==3||t.some(e=>!Number.isFinite(e))))return[t[0],t[1],t[2]]}function At(n){if(n){if(!n.includes(",")){let t=parseFloat(n);return Number.isFinite(t)?t:void 0}return Ae(n)}}function Ct(n){return n.closest("glyph-scene")??null}var ne=class extends vt{constructor(){super(...arguments);this._handle=null;this._loadToken=0}static get observedAttributes(){return[...Et]}getMeshHandle(){return this._handle}connectedCallback(){this._maybeLoad()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(e,o,r){if(o!==r){if(e==="src"||e==="geometry"||e==="size"||e==="color"){this._tearDown(),this._maybeLoad();return}this._handle&&this._handle.setTransform(this._readTransform())}}_readTransform(){return{position:Ae(this.getAttribute("position")),scale:At(this.getAttribute("scale")),rotation:Ae(this.getAttribute("rotation"))}}_tearDown(){if(this._loadToken+=1,this._handle){try{this._handle.dispose()}catch{}this._handle=null}}async _maybeLoad(){let e=this.getAttribute("src"),o=this.getAttribute("geometry"),r=Ct(this);if(r){if(!r.getScene()){let a=()=>{r.removeEventListener("glyphcss:scene-ready",a),this._maybeLoad()};r.addEventListener("glyphcss:scene-ready",a);return}if(e){let a=++this._loadToken,i;try{i=await yt(e)}catch(p){this.dispatchEvent(new CustomEvent("glyphcss:error",{detail:p,bubbles:!0}));return}if(a!==this._loadToken){try{i.dispose()}catch{}return}let s=r.getScene();if(!s){try{i.dispose()}catch{}return}let l=this.hasAttribute("normalize")?Mt(i.polygons):i.polygons;this._handle=s.add(l,this._readTransform()),this.dispatchEvent(new CustomEvent("glyphcss:loaded",{detail:{polygons:l},bubbles:!0}));return}if(o){let a=r.getScene();if(!a)return;let i=this.getAttribute("size"),s=i!==null?parseFloat(i):1,c=this.getAttribute("color")??void 0,l;try{l=gt(o,{size:Number.isFinite(s)?s:1,color:c})}catch(p){this.dispatchEvent(new CustomEvent("glyphcss:error",{detail:p,bubbles:!0}));return}this._handle=a.add(l,this._readTransform()),this.dispatchEvent(new CustomEvent("glyphcss:loaded",{detail:{polygons:l},bubbles:!0}))}}}};var Gt=typeof HTMLElement<"u"?HTMLElement:class{};function xt(n){if(!n)return;let t=n.split(",").map(e=>parseFloat(e.trim()));if(!(t.length!==3||t.some(e=>!Number.isFinite(e))))return[t[0],t[1],t[2]]}function Lt(n){if(!n)return;let t=n.split(",").map(e=>parseFloat(e.trim()));if(!(t.length!==2||t.some(e=>!Number.isFinite(e))))return[t[0],t[1]]}function wt(n){return n.closest("glyph-scene")??null}var re=class extends Gt{constructor(){super(...arguments);this._handle=null}static get observedAttributes(){return["at","size","hotspot-id"]}connectedCallback(){this._register()}disconnectedCallback(){this._handle&&this._unregister()}attributeChangedCallback(e,o,r){o!==r&&(this._handle&&this._unregister(),this._register())}_unregister(){if(!this._handle)return;let e=this._handle.el;for(;e.firstChild;)this.appendChild(e.firstChild);this._handle.remove(),this._handle=null}_register(){let e=xt(this.getAttribute("at"));if(!e)return;let o=wt(this);if(!o)return;if(!o.getScene()){let c=()=>{o.removeEventListener("glyphcss:scene-ready",c),this._register()};o.addEventListener("glyphcss:scene-ready",c);return}let r=o.getScene();if(!r)return;let a=this.getAttribute("hotspot-id")??this.getAttribute("id")??String(Math.random()),i=Lt(this.getAttribute("size"));this._handle=r.addHotspot({id:a,at:e,size:i},()=>this.dispatchEvent(new CustomEvent("glyphcss:hotspot-click",{detail:{id:a},bubbles:!0})));let s=this._handle.el;for(;this.firstChild;)s.appendChild(this.firstChild)}};var _t=typeof HTMLElement<"u"?HTMLElement:class{};function k(n){if(n==null)return;let t=parseFloat(n);return Number.isFinite(t)?t:void 0}var oe=class extends _t{constructor(){super(...arguments);this._camera=null}static get observedAttributes(){return["rot-x","rot-y","distance","zoom","stretch"]}getCamera(){return this._camera}connectedCallback(){this._camera=ee({rotX:k(this.getAttribute("rot-x")),rotY:k(this.getAttribute("rot-y")),distance:k(this.getAttribute("distance")),zoom:k(this.getAttribute("zoom")),stretch:k(this.getAttribute("stretch"))}),this.dispatchEvent(new CustomEvent("glyph:camera-ready",{bubbles:!1}))}disconnectedCallback(){this._camera=null}attributeChangedCallback(e,o,r){if(o===r)return;let a=this._camera;if(!a)return;let i=k(this.getAttribute("rot-x")),s=k(this.getAttribute("rot-y")),c=k(this.getAttribute("distance")),l=k(this.getAttribute("zoom")),p=k(this.getAttribute("stretch")),h=!1;i!==void 0&&a.rotX!==i&&(a.rotX=i,h=!0),s!==void 0&&a.rotY!==s&&(a.rotY=s,h=!0),c!==void 0&&a.distance!==c&&(a.distance=c,h=!0),l!==void 0&&a.zoom!==l&&(a.zoom=l,h=!0),p!==void 0&&a.stretch!==p&&(a.stretch=p,h=!0),h&&this.querySelector("glyph-scene")?.rerender?.()}};var St=typeof HTMLElement<"u"?HTMLElement:class{};function $(n){if(n==null)return;let t=parseFloat(n);return Number.isFinite(t)?t:void 0}var K=class extends St{constructor(){super(...arguments);this._camera=null}static get observedAttributes(){return["rot-x","rot-y","zoom"]}getCamera(){return this._camera}connectedCallback(){this._camera=Te({rotX:$(this.getAttribute("rot-x")),rotY:$(this.getAttribute("rot-y")),zoom:$(this.getAttribute("zoom"))}),this.dispatchEvent(new CustomEvent("glyph:camera-ready",{bubbles:!1}))}disconnectedCallback(){this._camera=null}attributeChangedCallback(e,o,r){if(o===r)return;let a=this._camera;if(!a)return;let i=$(this.getAttribute("rot-x")),s=$(this.getAttribute("rot-y")),c=$(this.getAttribute("zoom")),l=!1;i!==void 0&&a.rotX!==i&&(a.rotX=i,l=!0),s!==void 0&&a.rotY!==s&&(a.rotY=s,l=!0),c!==void 0&&a.zoom!==c&&(a.zoom=c,l=!0),l&&this.querySelector("glyph-scene")?.rerender?.()}};function Ye(n,t={}){let e=n.host,o=t.drag??!0,r=t.wheel??!0,a=Ne(t.invert),i=t.animate??!1,s=!1,c=!1,l=null,p=null,h=null,f={x:0,y:0},y=n.camera;function g(u){if(!(!o||s)&&h===null&&u.isPrimary!==!1){u.preventDefault(),h=u.pointerId,f={x:u.clientX,y:u.clientY},e.style.cursor="grabbing";try{u.target.setPointerCapture(u.pointerId)}catch{}i&&i.pauseOnInteraction!==!1&&(c=!0)}}function L(u){if(h===null||u.pointerId!==h||!o||s)return;u.preventDefault();let v=u.clientX-f.x,A=u.clientY-f.y;f={x:u.clientX,y:u.clientY};let G=a,_=1/4*Math.PI/180;y.rotY=y.rotY-v*_*G,y.rotX=Math.max(-Math.PI/2,Math.min(Math.PI/2,y.rotX-A*_*G)),n.rerender()}function E(u){if(h===u.pointerId){h=null,e.style.cursor=o&&!s?"grab":"";try{u.target.releasePointerCapture(u.pointerId)}catch{}i&&(c=!1)}}function w(u){if(!r||s)return;u.preventDefault();let v=u.deltaY*.001;y.zoom=Math.max(.05,Math.min(10,y.zoom*(1-v))),n.rerender()}function x(u){if(!(s||!i)){if(!c){let v=p!==null?Math.min(u-p,50):16.67,A=typeof i=="object"&&i.speed?i.speed:.3,G=typeof i=="object"&&i.axis?i.axis:"y",m=A*(Math.PI/180)*(v/16.67);G==="y"?y.rotY=y.rotY+m:y.rotX=y.rotX+m,n.rerender()}p=u,l=requestAnimationFrame(x)}}function M(){l===null&&typeof requestAnimationFrame<"u"&&i&&(l=requestAnimationFrame(x))}function C(){l!==null&&(typeof cancelAnimationFrame<"u"&&cancelAnimationFrame(l),l=null),p=null}function d(){e.addEventListener("pointerdown",g),e.addEventListener("pointermove",L),e.addEventListener("pointerup",E),e.addEventListener("pointercancel",E),e.addEventListener("wheel",w,{passive:!1}),e.style.cursor=o?"grab":"",e.style.touchAction="none",e.style.userSelect="none"}function b(){e.removeEventListener("pointerdown",g),e.removeEventListener("pointermove",L),e.removeEventListener("pointerup",E),e.removeEventListener("pointercancel",E),e.removeEventListener("wheel",w),e.style.cursor="",e.style.touchAction="",e.style.userSelect=""}return d(),M(),{update(u){let v=!!i;o=u.drag??o,r=u.wheel??r,a=Ne(u.invert),i=u.animate??i,!s&&h===null&&(e.style.cursor=o?"grab":"");let A=!!i;v&&!A?C():!v&&A&&M()},pause(){s||(s=!0,b(),C(),h=null,c=!1)},resume(){s&&(s=!1,d(),M())},destroy(){s||b(),C(),s=!0}}}function Ne(n){return n===void 0||n===!1?1:n===!0?-1:n}var zt=typeof HTMLElement<"u"?HTMLElement:class{};function Tt(n){if(n==null)return;let t=parseFloat(n);return Number.isFinite(t)?t:void 0}function Ce(n){if(n!==null){if(n==="false")return!1;if(n==="true"||n==="")return!0}}function Ht(n){return n.closest("glyph-scene")??null}var ie=class extends zt{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return["drag","wheel","invert","animate-speed","animate-axis"]}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(e,o,r){o!==r&&this._controls?.update(this._readOptions())}_readOptions(){let e=Ce(this.getAttribute("drag")),o=Ce(this.getAttribute("wheel")),r=Ce(this.getAttribute("invert")),a=Tt(this.getAttribute("animate-speed")),i=this.getAttribute("animate-axis")==="x"?"x":"y";return{...e!==void 0?{drag:e}:{},...o!==void 0?{wheel:o}:{},...r!==void 0?{invert:r}:{},...a!==void 0?{animate:{speed:a,axis:i}}:{}}}_attach(){if(this._controls)return;let e=Ht(this);if(!e)return;let o=e.getScene();if(!o){let r=()=>{e.removeEventListener("glyphcss:scene-ready",r),this._attach()};e.addEventListener("glyphcss:scene-ready",r);return}this._controls=Ye(o,this._readOptions())}};function Fe(n,t={}){let e=n.host,o=t.drag??!0,r=t.wheel??!0,a=Xe(t.invert),i=t.animate??!1,s=!1,c=!1,l=null,p=null,h=null,f={x:0,y:0},y=!1,g=n.camera,L=1/4*Math.PI/180,E=.02;function w(m){if(!(!o||s)&&h===null&&m.isPrimary!==!1){m.preventDefault(),h=m.pointerId,f={x:m.clientX,y:m.clientY},y=m.button===2,e.style.cursor="grabbing";try{m.target.setPointerCapture(m.pointerId)}catch{}i&&i.pauseOnInteraction!==!1&&(c=!0)}}function x(m){if(h===null||m.pointerId!==h||!o||s)return;m.preventDefault();let _=m.clientX-f.x,S=m.clientY-f.y;f={x:m.clientX,y:m.clientY};let T=a;if(y||m.shiftKey)g.rotY=g.rotY-_*L*T,g.rotX=Math.max(-Math.PI/2,Math.min(Math.PI/2,g.rotX+S*L*T));else{let z=g.target;g.target=[z[0]-_*E/g.zoom,z[1]-S*E/g.zoom,z[2]]}n.rerender()}function M(m){if(h===m.pointerId){h=null,y=!1,e.style.cursor=o&&!s?"grab":"";try{m.target.releasePointerCapture(m.pointerId)}catch{}i&&(c=!1)}}function C(m){m.preventDefault()}function d(m){if(!r||s)return;m.preventDefault();let _=m.deltaY*.001;g.zoom=Math.max(.05,Math.min(10,g.zoom*(1-_))),n.rerender()}function b(m){if(!(s||!i)){if(!c){let _=p!==null?Math.min(m-p,50):16.67,S=typeof i=="object"&&i.speed?i.speed:.3,T=typeof i=="object"&&i.axis?i.axis:"y",z=S*(Math.PI/180)*(_/16.67);T==="y"?g.rotY=g.rotY+z:g.rotX=g.rotX+z,n.rerender()}p=m,l=requestAnimationFrame(b)}}function u(){l===null&&typeof requestAnimationFrame<"u"&&i&&(l=requestAnimationFrame(b))}function v(){l!==null&&(typeof cancelAnimationFrame<"u"&&cancelAnimationFrame(l),l=null),p=null}function A(){e.addEventListener("pointerdown",w),e.addEventListener("pointermove",x),e.addEventListener("pointerup",M),e.addEventListener("pointercancel",M),e.addEventListener("contextmenu",C),e.addEventListener("wheel",d,{passive:!1}),e.style.cursor=o?"grab":"",e.style.touchAction="none",e.style.userSelect="none"}function G(){e.removeEventListener("pointerdown",w),e.removeEventListener("pointermove",x),e.removeEventListener("pointerup",M),e.removeEventListener("pointercancel",M),e.removeEventListener("contextmenu",C),e.removeEventListener("wheel",d),e.style.cursor="",e.style.touchAction="",e.style.userSelect=""}return A(),u(),{update(m){let _=!!i;o=m.drag??o,r=m.wheel??r,a=Xe(m.invert),i=m.animate??i,!s&&h===null&&(e.style.cursor=o?"grab":"");let S=!!i;_&&!S?v():!_&&S&&u()},pause(){s||(s=!0,G(),v(),h=null,c=!1)},resume(){s&&(s=!1,A(),u())},destroy(){s||G(),v(),s=!0}}}function Xe(n){return n===void 0||n===!1?1:n===!0?-1:n}var Pt=typeof HTMLElement<"u"?HTMLElement:class{};function Ge(n){if(n!==null){if(n==="false")return!1;if(n==="true"||n==="")return!0}}function Ot(n){return n.closest("glyph-scene")??null}var se=class extends Pt{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return["drag","wheel","invert"]}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(e,o,r){o!==r&&this._controls?.update(this._readOptions())}_readOptions(){let e=Ge(this.getAttribute("drag")),o=Ge(this.getAttribute("wheel")),r=Ge(this.getAttribute("invert"));return{...e!==void 0?{drag:e}:{},...o!==void 0?{wheel:o}:{},...r!==void 0?{invert:r}:{}}}_attach(){if(this._controls)return;let e=Ot(this);if(!e)return;let o=e.getScene();if(!o){let r=()=>{e.removeEventListener("glyphcss:scene-ready",r),this._attach()};e.addEventListener("glyphcss:scene-ready",r);return}this._controls=Fe(o,this._readOptions())}};if(typeof customElements<"u"){if(customElements.get("glyph-scene")||customElements.define("glyph-scene",te),customElements.get("glyph-mesh")||customElements.define("glyph-mesh",ne),customElements.get("glyph-hotspot")||customElements.define("glyph-hotspot",re),customElements.get("glyph-perspective-camera")||customElements.define("glyph-perspective-camera",oe),customElements.get("glyph-orthographic-camera")||customElements.define("glyph-orthographic-camera",K),!customElements.get("glyph-camera")){class n extends K{}customElements.define("glyph-camera",n)}customElements.get("glyph-orbit-controls")||customElements.define("glyph-orbit-controls",ie),customElements.get("glyph-map-controls")||customElements.define("glyph-map-controls",se)}export{re as GlyphHotspotElement,se as GlyphMapControlsElement,ne as GlyphMeshElement,ie as GlyphOrbitControlsElement,K as GlyphOrthographicCameraElement,oe as GlyphPerspectiveCameraElement,te as GlyphSceneElement};
|
|
62
|
+
`;function Ht(n,e,t,o,r){return n.map(s=>{let[l,i,c]=e.project(s.at,t,o,r),u=c>-3&&l>=0&&l<t&&i>=0&&i<o;return{id:s.id,col:l,row:i,depth:c,visible:u}})}var fn=1;function gn(n,e){let{position:t,scale:o,rotation:r}=e;if(!t&&!o&&!r)return n;let[s,l,i]=t??[0,0,0],c=1,u=1,p=1;o!==void 0&&(typeof o=="number"?c=u=p=o:[c,u,p]=o);let d=Math.PI/180,[m,h,f]=r??[0,0,0],b=m*d,C=h*d,_=f*d,M=Math.cos(b),x=Math.sin(b),y=Math.cos(C),w=Math.sin(C),P=Math.cos(_),H=Math.sin(_);function v(A){let L=A[0]*c,a=A[1]*u,E=A[2]*p,g=P*L-H*a,G=H*L+P*a,z=E;return L=y*g+w*z,a=G,E=-w*g+y*z,g=L,G=M*a-x*E,z=x*a+M*E,[g+s,G+l,z+i]}return n.map(A=>({...A,vertices:A.vertices.map(v)}))}function Ft(n,e={}){Pt(n.ownerDocument??void 0);let t={mode:e.mode??"solid",glyphPalette:e.glyphPalette??"default",useColors:e.useColors??!0,cols:e.cols??80,rows:e.rows??24,cellAspect:e.cellAspect??2,directionalLight:e.directionalLight??{direction:[-.5,-.7,-.5],intensity:1},ambientLight:e.ambientLight??{intensity:.4},camera:e.camera??Ie(),smoothShading:e.smoothShading??!1,creaseAngle:e.creaseAngle??60,doubleSided:e.doubleSided??!1,supersample:e.supersample??1,depthEpsilon:e.depthEpsilon??0,temporalBlend:e.temporalBlend??0,autoSize:e.autoSize??!1,shadow:e.shadow},o=n.ownerDocument.createElement("div");o.className="glyph-scene";let r=n.ownerDocument.createElement("pre");r.className="glyph-output";let s=n.ownerDocument.createElement("div");s.className="glyph-hotspot-layer",o.appendChild(r),o.appendChild(s),n.appendChild(o);let l=new Map,i=[],c=!1,u={iA:[],iB:[],iC:[],lit:[]},p={idx:new Float32Array(0),r:new Float32Array(0),g:new Float32Array(0),b:new Float32Array(0),cols:0,rows:0,cam:null};function d(){u.iA.length=0,u.iB.length=0,u.iC.length=0,u.lit.length=0}let m=null,h=0;function f(){let a=[];for(let g of l.values())for(let G of g.polygons)(G.texture||G.material?.texture)&&a.push(G);if(a.length===0){m&&(m=null,b());return}let E=++h;hn(a).then(g=>{E===h&&(m=g.size>0?g:null,b())})}function b(){c||(c=!0,Promise.resolve().then(()=>{c=!1,C()}))}function C(){let a=[],E=[],g=[],G=[],z=!1;for(let N of l.values()){let re=gn(N.polygons,N.transform),k=N.transform.castShadow??!1,q=N.transform.receiveShadow??!1,oe=N.transform.depthBias??0;oe!==0&&(z=!0);for(let K of re)a.push(K),E.push(k),g.push(q),G.push(oe)}let F=Gt({camera:t.camera,grid:{cols:t.cols,rows:t.rows,cellAspect:t.cellAspect},polygons:a,mode:t.mode,directionalLight:t.directionalLight,ambientLight:t.ambientLight,glyphPalette:t.glyphPalette,useColors:t.useColors,smoothShading:t.smoothShading,creaseAngle:t.creaseAngle,doubleSided:t.doubleSided,supersample:t.supersample,depthEpsilon:t.depthEpsilon,temporalBlend:t.temporalBlend,shadow:t.shadow,castShadowFlags:E,receiveShadowFlags:g,depthBiases:z?G:void 0});F.shadeCache=u,F.textureSamplers=m,F.temporalHistory=p;let T=globalThis.__glyphPerf,W=T?performance.now():0,R=_t(F),j=T?performance.now():0;if(t.useColors?r.innerHTML=R:r.textContent=R,T){let N=performance.now();(T.raster??(T.raster=[])).push(j-W),(T.dom??(T.dom=[])).push(N-j),(T.polys??(T.polys=[])).push(a.length)}_()}function _(){let{cols:a,rows:E,cellAspect:g,camera:G}=t,z=Ht(i.map(R=>R.hotspot),G,a,E,g),F=r.getBoundingClientRect(),T=a>0?F.width/a:8,W=E>0?F.height/E:16;for(let R=0;R<i.length;R++){let{el:j}=i[R],N=z[R];N.visible?(j.style.display="",j.style.left=`${(N.col+.5)*T}px`,j.style.top=`${(N.row+.5)*W}px`,j.style.zIndex=String(Math.round(N.depth*1e3))):j.style.display="none"}}function M(a,E={}){let g=fn++;return l.set(g,{id:g,polygons:a,transform:E}),d(),f(),b(),{get id(){return g},get name(){return l.get(g)?.transform.id},get polygons(){return a},setTransform(G){let z=l.get(g);z&&(z.transform=G,d(),b())},dispose(){l.delete(g),d(),f(),b()}}}function x(a,E){let g=n.ownerDocument.createElement("div");g.className="glyph-hotspot",g.setAttribute("data-hotspot-id",a.id);let[G,z]=a.size??[1,1];g.style.position="absolute",g.style.width=`${G}ch`,g.style.height=`${z*t.cellAspect}ch`,E&&g.addEventListener("click",E),s.appendChild(g);let F={hotspot:{id:a.id,at:a.at,size:a.size},el:g,onClick:E};return i.push(F),b(),{get el(){return g},remove(){let T=i.indexOf(F);T>=0&&i.splice(T,1),E&&g.removeEventListener("click",E),s.removeChild(g),b()}}}function y(){C()}function w(a){a.mode!==void 0&&(t.mode=a.mode),a.glyphPalette!==void 0&&(t.glyphPalette=a.glyphPalette),a.useColors!==void 0&&(t.useColors=a.useColors),a.cols!==void 0&&(t.cols=a.cols),a.rows!==void 0&&(t.rows=a.rows),a.cellAspect!==void 0&&(t.cellAspect=a.cellAspect),a.directionalLight!==void 0&&(t.directionalLight=a.directionalLight),a.ambientLight!==void 0&&(t.ambientLight=a.ambientLight),a.camera!==void 0&&(t.camera=a.camera),a.smoothShading!==void 0&&(t.smoothShading=a.smoothShading),a.creaseAngle!==void 0&&(t.creaseAngle=a.creaseAngle),"shadow"in a&&(t.shadow=a.shadow),a.autoSize!==void 0&&(t.autoSize=a.autoSize,t.autoSize&&!A&&typeof ResizeObserver<"u"?(A=new ResizeObserver(()=>v()),A.observe(n),v()):!t.autoSize&&A&&(A.disconnect(),A=null)),(a.mode!==void 0||a.useColors!==void 0||a.directionalLight!==void 0||a.ambientLight!==void 0||a.smoothShading!==void 0||a.creaseAngle!==void 0||a.glyphPalette!==void 0)&&d(),b()}function P(){return{...t}}function H(){let E=n.ownerDocument.createElement("span");E.textContent=Array(20).fill("M").join(`
|
|
63
|
+
`),E.style.cssText="position:absolute;visibility:hidden;font-family:inherit;font-size:inherit;line-height:inherit;white-space:pre;padding:0;margin:0",r.appendChild(E);let g=E.getBoundingClientRect();return E.remove(),{w:g.width||8,h:g.height?g.height/20:16}}function v(){let a=n.clientWidth,E=n.clientHeight;if(!a||!E)return;let g=H(),G=Math.max(20,Math.floor(a/g.w)),z=Math.max(8,Math.floor(E/g.h)),F=g.h/g.w,T=!1;t.cols!==G&&(t.cols=G,T=!0),t.rows!==z&&(t.rows=z,T=!0),Math.abs(t.cellAspect-F)>.01&&(t.cellAspect=F,T=!0),T&&b()}let A=null;t.autoSize&&typeof ResizeObserver<"u"&&(A=new ResizeObserver(()=>v()),A.observe(n),v());function L(){A&&(A.disconnect(),A=null),l.clear(),n.contains(o)&&n.removeChild(o)}return b(),{get host(){return n},get output(){return r},get camera(){return t.camera},add:M,addHotspot:x,rerender:y,setOptions:w,getOptions:P,fit:v,destroy:L}}var yn=typeof HTMLElement<"u"?HTMLElement:class{},bn=["mode","glyph-palette","use-colors","cols","rows","cell-aspect","directional-direction","directional-intensity","ambient-intensity","auto-size","shadow","shadow-color","shadow-opacity","shadow-lift","shadow-max-extend"];function Ce(n){if(n==null)return;let e=parseFloat(n);return Number.isFinite(e)?e:void 0}function vn(n){if(n==="wireframe"||n==="solid"||n==="voxel")return n}function En(n){if(n!==null){if(n==="false")return!1;if(n==="true"||n==="")return!0}}var Ue=class extends yn{constructor(){super(...arguments);this._scene=null}static get observedAttributes(){return[...bn]}getScene(){return this._scene}_readOptions(){let t={},o=vn(this.getAttribute("mode"));o!==void 0&&(t.mode=o);let r=this.getAttribute("glyph-palette");r&&(t.glyphPalette=r);let s=En(this.getAttribute("use-colors"));s!==void 0&&(t.useColors=s);let l=Ce(this.getAttribute("cols"));l!==void 0&&(t.cols=l);let i=Ce(this.getAttribute("rows"));i!==void 0&&(t.rows=i);let c=Ce(this.getAttribute("cell-aspect"));c!==void 0&&(t.cellAspect=c);let u=Ce(this.getAttribute("directional-intensity"));u!==void 0&&(t.directionalLight={direction:[-.5,-.7,-.5],intensity:u});let p=Ce(this.getAttribute("ambient-intensity"));if(p!==void 0&&(t.ambientLight={intensity:p}),this.hasAttribute("auto-size")&&(t.autoSize=!0),this.hasAttribute("shadow")){let d={color:"#000000",opacity:.25,lift:.05,maxExtend:2e3},m=this.getAttribute("shadow-color");m&&(d.color=m);let h=Ce(this.getAttribute("shadow-opacity"));h!==void 0&&(d.opacity=h);let f=Ce(this.getAttribute("shadow-lift"));f!==void 0&&(d.lift=f);let b=Ce(this.getAttribute("shadow-max-extend"));b!==void 0&&(d.maxExtend=b),t.shadow=d}return t}_findCameraAncestor(){let t=this.parentElement;for(;t;){let o=t.tagName.toLowerCase();if(o==="glyph-perspective-camera"||o==="glyph-orthographic-camera"||o==="glyph-camera")return t;t=t.parentElement}return null}_initScene(t){let o=typeof t.getCamera=="function"?t.getCamera():void 0,r=this._readOptions();o&&(r.camera=o),this._scene=Ft(this,r),this.dispatchEvent(new CustomEvent("glyphcss:scene-ready",{bubbles:!1}))}connectedCallback(){if(this._scene)return;let t=this._findCameraAncestor();if(!t)throw new Error("glyphcss: <glyph-scene> must be placed inside a <glyph-camera>, <glyph-perspective-camera>, or <glyph-orthographic-camera>.");if((typeof t.getCamera=="function"?t.getCamera():null)!==null)this._initScene(t);else{let r=()=>{t.removeEventListener("glyph:camera-ready",r),this._scene||this._initScene(t)};t.addEventListener("glyph:camera-ready",r)}}rerender(){this._scene?.rerender()}disconnectedCallback(){this._scene&&(this._scene.destroy(),this._scene=null)}attributeChangedCallback(t,o,r){o!==r&&this._scene&&this._scene.setOptions(this._readOptions())}};import{loadMesh as wn,resolveGeometry as An,computeSceneBbox as Sn}from"@glyphcss/core";var xn=typeof HTMLElement<"u"?HTMLElement:class{},Mn=["src","geometry","size","color","position","scale","rotation","normalize","cast-shadow","receive-shadow"];function Cn(n){let e=Sn(n),t=(e.min[0]+e.max[0])/2,o=(e.min[1]+e.max[1])/2,r=(e.min[2]+e.max[2])/2,l=2/(Math.max(e.max[0]-e.min[0],e.max[1]-e.min[1],e.max[2]-e.min[2])||1);return n.map(i=>({...i,vertices:i.vertices.map(c=>[(c[0]-t)*l,(c[1]-o)*l,(c[2]-r)*l])}))}function ft(n){if(!n)return;let e=n.split(",").map(t=>parseFloat(t.trim()));if(!(e.length!==3||e.some(t=>!Number.isFinite(t))))return[e[0],e[1],e[2]]}function Gn(n){if(n){if(!n.includes(",")){let e=parseFloat(n);return Number.isFinite(e)?e:void 0}return ft(n)}}function Ln(n){return n.closest("glyph-scene")??null}var Ke=class extends xn{constructor(){super(...arguments);this._handle=null;this._loadToken=0}static get observedAttributes(){return[...Mn]}getMeshHandle(){return this._handle}connectedCallback(){this._maybeLoad()}disconnectedCallback(){this._tearDown()}attributeChangedCallback(t,o,r){if(o!==r){if(t==="src"||t==="geometry"||t==="size"||t==="color"){this._tearDown(),this._maybeLoad();return}this._handle&&this._handle.setTransform(this._readTransform())}}_readTransform(){return{position:ft(this.getAttribute("position")),scale:Gn(this.getAttribute("scale")),rotation:ft(this.getAttribute("rotation")),castShadow:this.hasAttribute("cast-shadow"),receiveShadow:this.hasAttribute("receive-shadow")}}_tearDown(){if(this._loadToken+=1,this._handle){try{this._handle.dispose()}catch{}this._handle=null}}async _maybeLoad(){let t=this.getAttribute("src"),o=this.getAttribute("geometry"),r=Ln(this);if(r){if(!r.getScene()){let s=()=>{r.removeEventListener("glyphcss:scene-ready",s),this._maybeLoad()};r.addEventListener("glyphcss:scene-ready",s);return}if(t){let s=++this._loadToken,l;try{l=await wn(t)}catch(p){this.dispatchEvent(new CustomEvent("glyphcss:error",{detail:p,bubbles:!0}));return}if(s!==this._loadToken){try{l.dispose()}catch{}return}let i=r.getScene();if(!i){try{l.dispose()}catch{}return}let u=this.hasAttribute("normalize")?Cn(l.polygons):l.polygons;this._handle=i.add(u,this._readTransform()),this.dispatchEvent(new CustomEvent("glyphcss:loaded",{detail:{polygons:u},bubbles:!0}));return}if(o){let s=r.getScene();if(!s)return;let l=this.getAttribute("size"),i=l!==null?parseFloat(l):1,c=this.getAttribute("color")??void 0,u;try{u=An(o,{size:Number.isFinite(i)?i:1,color:c})}catch(p){this.dispatchEvent(new CustomEvent("glyphcss:error",{detail:p,bubbles:!0}));return}this._handle=s.add(u,this._readTransform()),this.dispatchEvent(new CustomEvent("glyphcss:loaded",{detail:{polygons:u},bubbles:!0}))}}}};var Tn=typeof HTMLElement<"u"?HTMLElement:class{};function _n(n){if(!n)return;let e=n.split(",").map(t=>parseFloat(t.trim()));if(!(e.length!==3||e.some(t=>!Number.isFinite(t))))return[e[0],e[1],e[2]]}function zn(n){if(!n)return;let e=n.split(",").map(t=>parseFloat(t.trim()));if(!(e.length!==2||e.some(t=>!Number.isFinite(t))))return[e[0],e[1]]}function Pn(n){return n.closest("glyph-scene")??null}var Ze=class extends Tn{constructor(){super(...arguments);this._handle=null}static get observedAttributes(){return["at","size","hotspot-id"]}connectedCallback(){this._register()}disconnectedCallback(){this._handle&&this._unregister()}attributeChangedCallback(t,o,r){o!==r&&(this._handle&&this._unregister(),this._register())}_unregister(){if(!this._handle)return;let t=this._handle.el;for(;t.firstChild;)this.appendChild(t.firstChild);this._handle.remove(),this._handle=null}_register(){let t=_n(this.getAttribute("at"));if(!t)return;let o=Pn(this);if(!o)return;if(!o.getScene()){let c=()=>{o.removeEventListener("glyphcss:scene-ready",c),this._register()};o.addEventListener("glyphcss:scene-ready",c);return}let r=o.getScene();if(!r)return;let s=this.getAttribute("hotspot-id")??this.getAttribute("id")??String(Math.random()),l=zn(this.getAttribute("size"));this._handle=r.addHotspot({id:s,at:t,size:l},()=>this.dispatchEvent(new CustomEvent("glyphcss:hotspot-click",{detail:{id:s},bubbles:!0})));let i=this._handle.el;for(;this.firstChild;)i.appendChild(this.firstChild)}};var Hn=typeof HTMLElement<"u"?HTMLElement:class{};function ue(n){if(n==null)return;let e=parseFloat(n);return Number.isFinite(e)?e:void 0}var Je=class extends Hn{constructor(){super(...arguments);this._camera=null}static get observedAttributes(){return["rot-x","rot-y","distance","perspective","zoom","stretch"]}getCamera(){return this._camera}connectedCallback(){this._camera=Ie({rotX:ue(this.getAttribute("rot-x")),rotY:ue(this.getAttribute("rot-y")),distance:ue(this.getAttribute("distance")),perspective:ue(this.getAttribute("perspective")),zoom:ue(this.getAttribute("zoom")),stretch:ue(this.getAttribute("stretch"))}),this.dispatchEvent(new CustomEvent("glyph:camera-ready",{bubbles:!1}))}disconnectedCallback(){this._camera=null}attributeChangedCallback(t,o,r){if(o===r)return;let s=this._camera;if(!s)return;let l=ue(this.getAttribute("rot-x")),i=ue(this.getAttribute("rot-y")),c=ue(this.getAttribute("distance")),u=ue(this.getAttribute("perspective")),p=ue(this.getAttribute("zoom")),d=ue(this.getAttribute("stretch")),m=!1;l!==void 0&&s.rotX!==l&&(s.rotX=l,m=!0),i!==void 0&&s.rotY!==i&&(s.rotY=i,m=!0),c!==void 0&&s.distance!==c&&(s.distance=c,m=!0),u!==void 0&&s.perspective!==u&&(s.perspective=u,m=!0),p!==void 0&&s.zoom!==p&&(s.zoom=p,m=!0),d!==void 0&&s.stretch!==d&&(s.stretch=d,m=!0),m&&this.querySelector("glyph-scene")?.rerender?.()}};var Fn=typeof HTMLElement<"u"?HTMLElement:class{};function Be(n){if(n==null)return;let e=parseFloat(n);return Number.isFinite(e)?e:void 0}var De=class extends Fn{constructor(){super(...arguments);this._camera=null}static get observedAttributes(){return["rot-x","rot-y","zoom"]}getCamera(){return this._camera}connectedCallback(){this._camera=Ct({rotX:Be(this.getAttribute("rot-x")),rotY:Be(this.getAttribute("rot-y")),zoom:Be(this.getAttribute("zoom"))}),this.dispatchEvent(new CustomEvent("glyph:camera-ready",{bubbles:!1}))}disconnectedCallback(){this._camera=null}attributeChangedCallback(t,o,r){if(o===r)return;let s=this._camera;if(!s)return;let l=Be(this.getAttribute("rot-x")),i=Be(this.getAttribute("rot-y")),c=Be(this.getAttribute("zoom")),u=!1;l!==void 0&&s.rotX!==l&&(s.rotX=l,u=!0),i!==void 0&&s.rotY!==i&&(s.rotY=i,u=!0),c!==void 0&&s.zoom!==c&&(s.zoom=c,u=!0),u&&this.querySelector("glyph-scene")?.rerender?.()}};function Ot(n,e={}){let t=n.host,o=e.drag??!0,r=e.wheel??!0,s=It(e.invert),l=e.clampPitch??!0,i=e.animate??!1,c=!1,u=!1,p=null,d=null,m=null,h={x:0,y:0},f=n.camera;function b(v){if(!(!o||c)&&m===null&&v.isPrimary!==!1){v.preventDefault(),m=v.pointerId,h={x:v.clientX,y:v.clientY},t.style.cursor="grabbing";try{v.target.setPointerCapture(v.pointerId)}catch{}i&&i.pauseOnInteraction!==!1&&(u=!0)}}function C(v){if(m===null||v.pointerId!==m||!o||c)return;v.preventDefault();let A=v.clientX-h.x,L=v.clientY-h.y;h={x:v.clientX,y:v.clientY};let a=s,E=1/4;f.rotY=f.rotY-A*E*a;let g=f.rotX-L*E*a;f.rotX=l?Math.max(-90,Math.min(90,g)):g,n.rerender()}function _(v){if(m===v.pointerId){m=null,t.style.cursor=o&&!c?"grab":"";try{v.target.releasePointerCapture(v.pointerId)}catch{}i&&(u=!1)}}function M(v){if(!r||c)return;v.preventDefault();let A=v.deltaY*.001;f.zoom=Math.max(.1,Math.min(500,f.zoom*(1-A))),n.rerender()}function x(v){if(!(c||!i)){if(!u){let A=d!==null?Math.min(v-d,50):16.67,L=typeof i=="object"&&i.speed?i.speed:.3,a=typeof i=="object"&&i.axis?i.axis:"y",E=L*(A/16.67);a==="y"?f.rotY=f.rotY+E:f.rotX=f.rotX+E,n.rerender()}d=v,p=requestAnimationFrame(x)}}function y(){p===null&&typeof requestAnimationFrame<"u"&&i&&(p=requestAnimationFrame(x))}function w(){p!==null&&(typeof cancelAnimationFrame<"u"&&cancelAnimationFrame(p),p=null),d=null}function P(){t.addEventListener("pointerdown",b),t.addEventListener("pointermove",C),t.addEventListener("pointerup",_),t.addEventListener("pointercancel",_),t.addEventListener("wheel",M,{passive:!1}),t.style.cursor=o?"grab":"",t.style.touchAction="none",t.style.userSelect="none"}function H(){t.removeEventListener("pointerdown",b),t.removeEventListener("pointermove",C),t.removeEventListener("pointerup",_),t.removeEventListener("pointercancel",_),t.removeEventListener("wheel",M),t.style.cursor="",t.style.touchAction="",t.style.userSelect=""}return P(),y(),{update(v){let A=!!i;o=v.drag??o,r=v.wheel??r,s=It(v.invert),v.clampPitch!==void 0&&(l=v.clampPitch),i=v.animate??i,!c&&m===null&&(t.style.cursor=o?"grab":"");let L=!!i;A&&!L?w():!A&&L&&y()},pause(){c||(c=!0,H(),w(),m=null,u=!1)},resume(){c&&(c=!1,P(),y())},destroy(){c||H(),w(),c=!0}}}function It(n){return n===void 0||n===!1?1:n===!0?-1:n}var In=typeof HTMLElement<"u"?HTMLElement:class{};function On(n){if(n==null)return;let e=parseFloat(n);return Number.isFinite(e)?e:void 0}function Qe(n){if(n!==null){if(n==="false")return!1;if(n==="true"||n==="")return!0}}function Bn(n){return n.closest("glyph-scene")??null}var et=class extends In{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return["drag","wheel","invert","clamp-pitch","animate-speed","animate-axis"]}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,r){o!==r&&this._controls?.update(this._readOptions())}_readOptions(){let t=Qe(this.getAttribute("drag")),o=Qe(this.getAttribute("wheel")),r=Qe(this.getAttribute("invert")),s=Qe(this.getAttribute("clamp-pitch")),l=On(this.getAttribute("animate-speed")),i=this.getAttribute("animate-axis")==="x"?"x":"y";return{...t!==void 0?{drag:t}:{},...o!==void 0?{wheel:o}:{},...r!==void 0?{invert:r}:{},...s!==void 0?{clampPitch:s}:{},...l!==void 0?{animate:{speed:l,axis:i}}:{}}}_attach(){if(this._controls)return;let t=Bn(this);if(!t)return;let o=t.getScene();if(!o){let r=()=>{t.removeEventListener("glyphcss:scene-ready",r),this._attach()};t.addEventListener("glyphcss:scene-ready",r);return}this._controls=Ot(o,this._readOptions())}};function Rt(n,e={}){let t=n.host,o=e.drag??!0,r=e.wheel??!0,s=Bt(e.invert),l=e.animate??!1,i=!1,c=!1,u=null,p=null,d=null,m={x:0,y:0},h=!1,f=n.camera,b=1/4,C=.02;function _(a){if(!(!o||i)&&d===null&&a.isPrimary!==!1){a.preventDefault(),d=a.pointerId,m={x:a.clientX,y:a.clientY},h=a.button===2,t.style.cursor="grabbing";try{a.target.setPointerCapture(a.pointerId)}catch{}l&&l.pauseOnInteraction!==!1&&(c=!0)}}function M(a){if(d===null||a.pointerId!==d||!o||i)return;a.preventDefault();let E=a.clientX-m.x,g=a.clientY-m.y;m={x:a.clientX,y:a.clientY};let G=s;if(h||a.shiftKey)f.rotY=f.rotY-E*b*G,f.rotX=Math.max(-90,Math.min(90,f.rotX+g*b*G));else{let z=f.target;f.target=[z[0]-E*C/f.zoom,z[1]-g*C/f.zoom,z[2]]}n.rerender()}function x(a){if(d===a.pointerId){d=null,h=!1,t.style.cursor=o&&!i?"grab":"";try{a.target.releasePointerCapture(a.pointerId)}catch{}l&&(c=!1)}}function y(a){a.preventDefault()}function w(a){if(!r||i)return;a.preventDefault();let E=a.deltaY*.001;f.zoom=Math.max(.1,Math.min(500,f.zoom*(1-E))),n.rerender()}function P(a){if(!(i||!l)){if(!c){let E=p!==null?Math.min(a-p,50):16.67,g=typeof l=="object"&&l.speed?l.speed:.3,G=typeof l=="object"&&l.axis?l.axis:"y",z=g*(E/16.67);G==="y"?f.rotY=f.rotY+z:f.rotX=f.rotX+z,n.rerender()}p=a,u=requestAnimationFrame(P)}}function H(){u===null&&typeof requestAnimationFrame<"u"&&l&&(u=requestAnimationFrame(P))}function v(){u!==null&&(typeof cancelAnimationFrame<"u"&&cancelAnimationFrame(u),u=null),p=null}function A(){t.addEventListener("pointerdown",_),t.addEventListener("pointermove",M),t.addEventListener("pointerup",x),t.addEventListener("pointercancel",x),t.addEventListener("contextmenu",y),t.addEventListener("wheel",w,{passive:!1}),t.style.cursor=o?"grab":"",t.style.touchAction="none",t.style.userSelect="none"}function L(){t.removeEventListener("pointerdown",_),t.removeEventListener("pointermove",M),t.removeEventListener("pointerup",x),t.removeEventListener("pointercancel",x),t.removeEventListener("contextmenu",y),t.removeEventListener("wheel",w),t.style.cursor="",t.style.touchAction="",t.style.userSelect=""}return A(),H(),{update(a){let E=!!l;o=a.drag??o,r=a.wheel??r,s=Bt(a.invert),l=a.animate??l,!i&&d===null&&(t.style.cursor=o?"grab":"");let g=!!l;E&&!g?v():!E&&g&&H()},pause(){i||(i=!0,L(),v(),d=null,c=!1)},resume(){i&&(i=!1,A(),H())},destroy(){i||L(),v(),i=!0}}}function Bt(n){return n===void 0||n===!1?1:n===!0?-1:n}var Rn=typeof HTMLElement<"u"?HTMLElement:class{};function gt(n){if(n!==null){if(n==="false")return!1;if(n==="true"||n==="")return!0}}function Nn(n){return n.closest("glyph-scene")??null}var tt=class extends Rn{constructor(){super(...arguments);this._controls=null}static get observedAttributes(){return["drag","wheel","invert"]}connectedCallback(){this._attach()}disconnectedCallback(){this._controls&&(this._controls.destroy(),this._controls=null)}attributeChangedCallback(t,o,r){o!==r&&this._controls?.update(this._readOptions())}_readOptions(){let t=gt(this.getAttribute("drag")),o=gt(this.getAttribute("wheel")),r=gt(this.getAttribute("invert"));return{...t!==void 0?{drag:t}:{},...o!==void 0?{wheel:o}:{},...r!==void 0?{invert:r}:{}}}_attach(){if(this._controls)return;let t=Nn(this);if(!t)return;let o=t.getScene();if(!o){let r=()=>{t.removeEventListener("glyphcss:scene-ready",r),this._attach()};t.addEventListener("glyphcss:scene-ready",r);return}this._controls=Rt(o,this._readOptions())}};if(typeof customElements<"u"){if(customElements.get("glyph-scene")||customElements.define("glyph-scene",Ue),customElements.get("glyph-mesh")||customElements.define("glyph-mesh",Ke),customElements.get("glyph-hotspot")||customElements.define("glyph-hotspot",Ze),customElements.get("glyph-perspective-camera")||customElements.define("glyph-perspective-camera",Je),customElements.get("glyph-orthographic-camera")||customElements.define("glyph-orthographic-camera",De),!customElements.get("glyph-camera")){class n extends De{}customElements.define("glyph-camera",n)}customElements.get("glyph-orbit-controls")||customElements.define("glyph-orbit-controls",et),customElements.get("glyph-map-controls")||customElements.define("glyph-map-controls",tt)}export{Ze as GlyphHotspotElement,tt as GlyphMapControlsElement,Ke as GlyphMeshElement,et as GlyphOrbitControlsElement,De as GlyphOrthographicCameraElement,Je as GlyphPerspectiveCameraElement,Ue as GlyphSceneElement};
|