@splinetool/loader 0.9.63 → 0.9.66
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/build/SplineLoader.cjs +943 -0
- package/build/SplineLoader.js +84 -83
- package/package.json +13 -4
|
@@ -0,0 +1,943 @@
|
|
|
1
|
+
var Nm=Object.create;var kn=Object.defineProperty;var Lm=Object.getOwnPropertyDescriptor;var Cm=Object.getOwnPropertyNames;var Tm=Object.getPrototypeOf,Mm=Object.prototype.hasOwnProperty;var Pm=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),Va=(n,t)=>{for(var e in t)kn(n,e,{get:t[e],enumerable:!0})},pc=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Cm(t))!Mm.call(n,o)&&o!==e&&kn(n,o,{get:()=>t[o],enumerable:!(r=Lm(t,o))||r.enumerable});return n};var Im=(n,t,e)=>(e=n!=null?Nm(Tm(n)):{},pc(t||!n||!n.__esModule?kn(e,"default",{value:n,enumerable:!0}):e,n)),Om=n=>pc(kn({},"__esModule",{value:!0}),n);var $d=Pm((Ea,Wd)=>{(function(n,t){typeof Ea=="object"&&typeof Wd<"u"?t(Ea):typeof define=="function"&&define.amd?define(["exports"],t):t((n=typeof globalThis<"u"?globalThis:n||self).SVDJS={})})(Ea,function(n){"use strict";n.SVD=function(t,e,r,o,i){if(e=e===void 0||e,r=r===void 0||r,i=1e-64/(o=o||Math.pow(2,-52)),!t)throw new TypeError("Matrix a is not defined");var s,a,l,c,h,p,u,d,m,g,x,y,b=t[0].length,C=t.length;if(C<b)throw new TypeError("Invalid matrix: m < n");for(var S=[],v=[],z=[],w=e==="f"?C:b,f=g=u=0;f<C;f++)v[f]=new Array(w).fill(0);for(f=0;f<b;f++)z[f]=new Array(b).fill(0);var D,L=new Array(b).fill(0);for(f=0;f<C;f++)for(s=0;s<b;s++)v[f][s]=t[f][s];for(f=0;f<b;f++){for(S[f]=u,m=0,l=f+1,s=f;s<C;s++)m+=Math.pow(v[s][f],2);if(m<i)u=0;else for(d=(p=v[f][f])*(u=p<0?Math.sqrt(m):-Math.sqrt(m))-m,v[f][f]=p-u,s=l;s<b;s++){for(m=0,a=f;a<C;a++)m+=v[a][f]*v[a][s];for(p=m/d,a=f;a<C;a++)v[a][s]=v[a][s]+p*v[a][f]}for(L[f]=u,m=0,s=l;s<b;s++)m+=Math.pow(v[f][s],2);if(m<i)u=0;else{for(d=(p=v[f][f+1])*(u=p<0?Math.sqrt(m):-Math.sqrt(m))-m,v[f][f+1]=p-u,s=l;s<b;s++)S[s]=v[f][s]/d;for(s=l;s<C;s++){for(m=0,a=l;a<b;a++)m+=v[s][a]*v[f][a];for(a=l;a<b;a++)v[s][a]=v[s][a]+m*S[a]}}g<(x=Math.abs(L[f])+Math.abs(S[f]))&&(g=x)}if(r)for(f=b-1;0<=f;f--){if(u!==0){for(d=v[f][f+1]*u,s=l;s<b;s++)z[s][f]=v[f][s]/d;for(s=l;s<b;s++){for(m=0,a=l;a<b;a++)m+=v[f][a]*z[a][s];for(a=l;a<b;a++)z[a][s]=z[a][s]+m*z[a][f]}}for(s=l;s<b;s++)z[f][s]=0,z[s][f]=0;z[f][f]=1,u=S[f],l=f}if(e){if(e==="f")for(f=b;f<C;f++){for(s=b;s<C;s++)v[f][s]=0;v[f][f]=1}for(f=b-1;0<=f;f--){for(l=f+1,u=L[f],s=l;s<w;s++)v[f][s]=0;if(u!==0){for(d=v[f][f]*u,s=l;s<w;s++){for(m=0,a=l;a<C;a++)m+=v[a][f]*v[a][s];for(p=m/d,a=f;a<C;a++)v[a][s]=v[a][s]+p*v[a][f]}for(s=f;s<C;s++)v[s][f]=v[s][f]/u}else for(s=f;s<C;s++)v[s][f]=0;v[f][f]=v[f][f]+1}}for(o*=g,a=b-1;0<=a;a--)for(var P=0;P<50;P++){for(D=!1,l=a;0<=l;l--){if(Math.abs(S[l])<=o){D=!0;break}if(Math.abs(L[l-1])<=o)break}if(!D){for(h=0,c=l-(m=1),f=l;f<a+1&&(p=m*S[f],S[f]=h*S[f],!(Math.abs(p)<=o));f++)if(u=L[f],L[f]=Math.sqrt(p*p+u*u),h=u/(d=L[f]),m=-p/d,e)for(s=0;s<C;s++)x=v[s][c],y=v[s][f],v[s][c]=x*h+y*m,v[s][f]=-x*m+y*h}if(y=L[a],l===a){if(y<0&&(L[a]=-y,r))for(s=0;s<b;s++)z[s][a]=-z[s][a];break}for(g=L[l],p=(((x=L[a-1])-y)*(x+y)+((u=S[a-1])-(d=S[a]))*(u+d))/(2*d*x),u=Math.sqrt(p*p+1),p=((g-y)*(g+y)+d*(x/(p<0?p-u:p+u)-d))/g,f=l+(m=h=1);f<a+1;f++){if(u=S[f],x=L[f],d=m*u,u*=h,y=Math.sqrt(p*p+d*d),p=g*(h=p/(S[f-1]=y))+u*(m=d/y),u=-g*m+u*h,d=x*m,x*=h,r)for(s=0;s<b;s++)g=z[s][f-1],y=z[s][f],z[s][f-1]=g*h+y*m,z[s][f]=-g*m+y*h;if(y=Math.sqrt(p*p+d*d),p=(h=p/(L[f-1]=y))*u+(m=d/y)*x,g=-m*u+h*x,e)for(s=0;s<C;s++)x=v[s][f-1],y=v[s][f],v[s][f-1]=x*h+y*m,v[s][f]=-x*m+y*h}S[l]=0,S[a]=p,L[a]=g}for(f=0;f<b;f++)L[f]<o&&(L[f]=0);return{u:v,q:L,v:z}},n.VERSION="1.1.1",Object.defineProperty(n,"__esModule",{value:!0})})});var Yv={};Va(Yv,{default:()=>za});module.exports=Om(Yv);var Ra=require("three");function uc(n){return Array.isArray(n)?n:[n]}var Am=typeof global=="object"&&global&&global.Object===Object&&global,Hn=Am;var Dm=typeof self=="object"&&self&&self.Object===Object&&self,Bm=Hn||Dm||Function("return this")(),Ke=Bm;var Em=Ke.Symbol,yt=Em;var dc=Object.prototype,_m=dc.hasOwnProperty,Gm=dc.toString,Ui=yt?yt.toStringTag:void 0;function zm(n){var t=_m.call(n,Ui),e=n[Ui];try{n[Ui]=void 0;var r=!0}catch{}var o=Gm.call(n);return r&&(t?n[Ui]=e:delete n[Ui]),o}var mc=zm;var Rm=Object.prototype,Fm=Rm.toString;function Vm(n){return Fm.call(n)}var fc=Vm;var Um="[object Null]",jm="[object Undefined]",gc=yt?yt.toStringTag:void 0;function km(n){return n==null?n===void 0?jm:Um:gc&&gc in Object(n)?mc(n):fc(n)}var _t=km;function Hm(n){return n!=null&&typeof n=="object"}var ht=Hm;var qm="[object Symbol]";function Wm(n){return typeof n=="symbol"||ht(n)&&_t(n)==qm}var Mo=Wm;function $m(n,t){for(var e=-1,r=n==null?0:n.length,o=Array(r);++e<r;)o[e]=t(n[e],e,n);return o}var qn=$m;var Jm=Array.isArray,Xe=Jm;var Ym=1/0,yc=yt?yt.prototype:void 0,xc=yc?yc.toString:void 0;function bc(n){if(typeof n=="string")return n;if(Xe(n))return qn(n,bc)+"";if(Mo(n))return xc?xc.call(n):"";var t=n+"";return t=="0"&&1/n==-Ym?"-0":t}var vc=bc;function Km(n){var t=typeof n;return n!=null&&(t=="object"||t=="function")}var pt=Km;function Xm(n){return n}var Wn=Xm;var Qm="[object AsyncFunction]",Zm="[object Function]",ef="[object GeneratorFunction]",tf="[object Proxy]";function rf(n){if(!pt(n))return!1;var t=_t(n);return t==Zm||t==ef||t==Qm||t==tf}var Po=rf;var of=Ke["__core-js_shared__"],$n=of;var Sc=function(){var n=/[^.]+$/.exec($n&&$n.keys&&$n.keys.IE_PROTO||"");return n?"Symbol(src)_1."+n:""}();function nf(n){return!!Sc&&Sc in n}var wc=nf;var sf=Function.prototype,af=sf.toString;function lf(n){if(n!=null){try{return af.call(n)}catch{}try{return n+""}catch{}}return""}var Pr=lf;var cf=/[\\^$.*+?()[\]{}|]/g,hf=/^\[object .+?Constructor\]$/,pf=Function.prototype,uf=Object.prototype,df=pf.toString,mf=uf.hasOwnProperty,ff=RegExp("^"+df.call(mf).replace(cf,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function gf(n){if(!pt(n)||wc(n))return!1;var t=Po(n)?ff:hf;return t.test(Pr(n))}var Nc=gf;function yf(n,t){return n?.[t]}var Lc=yf;function xf(n,t){var e=Lc(n,t);return Nc(e)?e:void 0}var Tt=xf;var bf=Tt(Ke,"WeakMap"),Jn=bf;var Cc=Object.create,vf=function(){function n(){}return function(t){if(!pt(t))return{};if(Cc)return Cc(t);n.prototype=t;var e=new n;return n.prototype=void 0,e}}(),Tc=vf;function Sf(n,t,e){switch(e.length){case 0:return n.call(t);case 1:return n.call(t,e[0]);case 2:return n.call(t,e[0],e[1]);case 3:return n.call(t,e[0],e[1],e[2])}return n.apply(t,e)}var Mc=Sf;function wf(n,t){var e=-1,r=n.length;for(t||(t=Array(r));++e<r;)t[e]=n[e];return t}var Yn=wf;var Nf=800,Lf=16,Cf=Date.now;function Tf(n){var t=0,e=0;return function(){var r=Cf(),o=Lf-(r-e);if(e=r,o>0){if(++t>=Nf)return arguments[0]}else t=0;return n.apply(void 0,arguments)}}var Pc=Tf;function Mf(n){return function(){return n}}var Ic=Mf;var Pf=function(){try{var n=Tt(Object,"defineProperty");return n({},"",{}),n}catch{}}(),Io=Pf;var If=Io?function(n,t){return Io(n,"toString",{configurable:!0,enumerable:!1,value:Ic(t),writable:!0})}:Wn,Oc=If;var Of=Pc(Oc),Kn=Of;function Af(n,t){for(var e=-1,r=n==null?0:n.length;++e<r&&t(n[e],e,n)!==!1;);return n}var Ac=Af;var Df=9007199254740991,Bf=/^(?:0|[1-9]\d*)$/;function Ef(n,t){var e=typeof n;return t=t??Df,!!t&&(e=="number"||e!="symbol"&&Bf.test(n))&&n>-1&&n%1==0&&n<t}var Xn=Ef;function _f(n,t,e){t=="__proto__"&&Io?Io(n,t,{configurable:!0,enumerable:!0,value:e,writable:!0}):n[t]=e}var Oo=_f;function Gf(n,t){return n===t||n!==n&&t!==t}var Fr=Gf;var zf=Object.prototype,Rf=zf.hasOwnProperty;function Ff(n,t,e){var r=n[t];(!(Rf.call(n,t)&&Fr(r,e))||e===void 0&&!(t in n))&&Oo(n,t,e)}var Qn=Ff;function Vf(n,t,e,r){var o=!e;e||(e={});for(var i=-1,s=t.length;++i<s;){var a=t[i],l=r?r(e[a],n[a],a,e,n):void 0;l===void 0&&(l=n[a]),o?Oo(e,a,l):Qn(e,a,l)}return e}var jt=Vf;var Dc=Math.max;function Uf(n,t,e){return t=Dc(t===void 0?n.length-1:t,0),function(){for(var r=arguments,o=-1,i=Dc(r.length-t,0),s=Array(i);++o<i;)s[o]=r[t+o];o=-1;for(var a=Array(t+1);++o<t;)a[o]=r[o];return a[t]=e(s),Mc(n,this,a)}}var Zn=Uf;function jf(n,t){return Kn(Zn(n,t,Wn),n+"")}var Bc=jf;var kf=9007199254740991;function Hf(n){return typeof n=="number"&&n>-1&&n%1==0&&n<=kf}var es=Hf;function qf(n){return n!=null&&es(n.length)&&!Po(n)}var Vr=qf;function Wf(n,t,e){if(!pt(e))return!1;var r=typeof t;return(r=="number"?Vr(e)&&Xn(t,e.length):r=="string"&&t in e)?Fr(e[t],n):!1}var Ec=Wf;function $f(n){return Bc(function(t,e){var r=-1,o=e.length,i=o>1?e[o-1]:void 0,s=o>2?e[2]:void 0;for(i=n.length>3&&typeof i=="function"?(o--,i):void 0,s&&Ec(e[0],e[1],s)&&(i=o<3?void 0:i,o=1),t=Object(t);++r<o;){var a=e[r];a&&n(t,a,r,i)}return t})}var _c=$f;var Jf=Object.prototype;function Yf(n){var t=n&&n.constructor,e=typeof t=="function"&&t.prototype||Jf;return n===e}var Ao=Yf;function Kf(n,t){for(var e=-1,r=Array(n);++e<n;)r[e]=t(e);return r}var Gc=Kf;var Xf="[object Arguments]";function Qf(n){return ht(n)&&_t(n)==Xf}var Ua=Qf;var zc=Object.prototype,Zf=zc.hasOwnProperty,eg=zc.propertyIsEnumerable,tg=Ua(function(){return arguments}())?Ua:function(n){return ht(n)&&Zf.call(n,"callee")&&!eg.call(n,"callee")},so=tg;function rg(){return!1}var Rc=rg;var Uc=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Fc=Uc&&typeof module=="object"&&module&&!module.nodeType&&module,og=Fc&&Fc.exports===Uc,Vc=og?Ke.Buffer:void 0,ig=Vc?Vc.isBuffer:void 0,ng=ig||Rc,Do=ng;var sg="[object Arguments]",ag="[object Array]",lg="[object Boolean]",cg="[object Date]",hg="[object Error]",pg="[object Function]",ug="[object Map]",dg="[object Number]",mg="[object Object]",fg="[object RegExp]",gg="[object Set]",yg="[object String]",xg="[object WeakMap]",bg="[object ArrayBuffer]",vg="[object DataView]",Sg="[object Float32Array]",wg="[object Float64Array]",Ng="[object Int8Array]",Lg="[object Int16Array]",Cg="[object Int32Array]",Tg="[object Uint8Array]",Mg="[object Uint8ClampedArray]",Pg="[object Uint16Array]",Ig="[object Uint32Array]",Be={};Be[Sg]=Be[wg]=Be[Ng]=Be[Lg]=Be[Cg]=Be[Tg]=Be[Mg]=Be[Pg]=Be[Ig]=!0;Be[sg]=Be[ag]=Be[bg]=Be[lg]=Be[vg]=Be[cg]=Be[hg]=Be[pg]=Be[ug]=Be[dg]=Be[mg]=Be[fg]=Be[gg]=Be[yg]=Be[xg]=!1;function Og(n){return ht(n)&&es(n.length)&&!!Be[_t(n)]}var jc=Og;function Ag(n){return function(t){return n(t)}}var Bo=Ag;var kc=typeof exports=="object"&&exports&&!exports.nodeType&&exports,ji=kc&&typeof module=="object"&&module&&!module.nodeType&&module,Dg=ji&&ji.exports===kc,ja=Dg&&Hn.process,Bg=function(){try{var n=ji&&ji.require&&ji.require("util").types;return n||ja&&ja.binding&&ja.binding("util")}catch{}}(),Ir=Bg;var Hc=Ir&&Ir.isTypedArray,Eg=Hc?Bo(Hc):jc,ts=Eg;var _g=Object.prototype,Gg=_g.hasOwnProperty;function zg(n,t){var e=Xe(n),r=!e&&so(n),o=!e&&!r&&Do(n),i=!e&&!r&&!o&&ts(n),s=e||r||o||i,a=s?Gc(n.length,String):[],l=a.length;for(var c in n)(t||Gg.call(n,c))&&!(s&&(c=="length"||o&&(c=="offset"||c=="parent")||i&&(c=="buffer"||c=="byteLength"||c=="byteOffset")||Xn(c,l)))&&a.push(c);return a}var rs=zg;function Rg(n,t){return function(e){return n(t(e))}}var os=Rg;var Fg=os(Object.keys,Object),qc=Fg;var Vg=Object.prototype,Ug=Vg.hasOwnProperty;function jg(n){if(!Ao(n))return qc(n);var t=[];for(var e in Object(n))Ug.call(n,e)&&e!="constructor"&&t.push(e);return t}var Wc=jg;function kg(n){return Vr(n)?rs(n):Wc(n)}var Eo=kg;function Hg(n){var t=[];if(n!=null)for(var e in Object(n))t.push(e);return t}var $c=Hg;var qg=Object.prototype,Wg=qg.hasOwnProperty;function $g(n){if(!pt(n))return $c(n);var t=Ao(n),e=[];for(var r in n)r=="constructor"&&(t||!Wg.call(n,r))||e.push(r);return e}var Jc=$g;function Jg(n){return Vr(n)?rs(n,!0):Jc(n)}var ar=Jg;var Yg=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Kg=/^\w*$/;function Xg(n,t){if(Xe(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||Mo(n)?!0:Kg.test(n)||!Yg.test(n)||t!=null&&n in Object(t)}var Yc=Xg;var Qg=Tt(Object,"create"),Or=Qg;function Zg(){this.__data__=Or?Or(null):{},this.size=0}var Kc=Zg;function ey(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t}var Xc=ey;var ty="__lodash_hash_undefined__",ry=Object.prototype,oy=ry.hasOwnProperty;function iy(n){var t=this.__data__;if(Or){var e=t[n];return e===ty?void 0:e}return oy.call(t,n)?t[n]:void 0}var Qc=iy;var ny=Object.prototype,sy=ny.hasOwnProperty;function ay(n){var t=this.__data__;return Or?t[n]!==void 0:sy.call(t,n)}var Zc=ay;var ly="__lodash_hash_undefined__";function cy(n,t){var e=this.__data__;return this.size+=this.has(n)?0:1,e[n]=Or&&t===void 0?ly:t,this}var eh=cy;function _o(n){var t=-1,e=n==null?0:n.length;for(this.clear();++t<e;){var r=n[t];this.set(r[0],r[1])}}_o.prototype.clear=Kc;_o.prototype.delete=Xc;_o.prototype.get=Qc;_o.prototype.has=Zc;_o.prototype.set=eh;var ka=_o;function hy(){this.__data__=[],this.size=0}var th=hy;function py(n,t){for(var e=n.length;e--;)if(Fr(n[e][0],t))return e;return-1}var Ur=py;var uy=Array.prototype,dy=uy.splice;function my(n){var t=this.__data__,e=Ur(t,n);if(e<0)return!1;var r=t.length-1;return e==r?t.pop():dy.call(t,e,1),--this.size,!0}var rh=my;function fy(n){var t=this.__data__,e=Ur(t,n);return e<0?void 0:t[e][1]}var oh=fy;function gy(n){return Ur(this.__data__,n)>-1}var ih=gy;function yy(n,t){var e=this.__data__,r=Ur(e,n);return r<0?(++this.size,e.push([n,t])):e[r][1]=t,this}var nh=yy;function Go(n){var t=-1,e=n==null?0:n.length;for(this.clear();++t<e;){var r=n[t];this.set(r[0],r[1])}}Go.prototype.clear=th;Go.prototype.delete=rh;Go.prototype.get=oh;Go.prototype.has=ih;Go.prototype.set=nh;var jr=Go;var xy=Tt(Ke,"Map"),kr=xy;function by(){this.size=0,this.__data__={hash:new ka,map:new(kr||jr),string:new ka}}var sh=by;function vy(n){var t=typeof n;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?n!=="__proto__":n===null}var ah=vy;function Sy(n,t){var e=n.__data__;return ah(t)?e[typeof t=="string"?"string":"hash"]:e.map}var Hr=Sy;function wy(n){var t=Hr(this,n).delete(n);return this.size-=t?1:0,t}var lh=wy;function Ny(n){return Hr(this,n).get(n)}var ch=Ny;function Ly(n){return Hr(this,n).has(n)}var hh=Ly;function Cy(n,t){var e=Hr(this,n),r=e.size;return e.set(n,t),this.size+=e.size==r?0:1,this}var ph=Cy;function zo(n){var t=-1,e=n==null?0:n.length;for(this.clear();++t<e;){var r=n[t];this.set(r[0],r[1])}}zo.prototype.clear=sh;zo.prototype.delete=lh;zo.prototype.get=ch;zo.prototype.has=hh;zo.prototype.set=ph;var ki=zo;var Ty="Expected a function";function Ha(n,t){if(typeof n!="function"||t!=null&&typeof t!="function")throw new TypeError(Ty);var e=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=e.cache;if(i.has(o))return i.get(o);var s=n.apply(this,r);return e.cache=i.set(o,s)||i,s};return e.cache=new(Ha.Cache||ki),e}Ha.Cache=ki;var uh=Ha;var My=500;function Py(n){var t=uh(n,function(r){return e.size===My&&e.clear(),r}),e=t.cache;return t}var dh=Py;var Iy=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Oy=/\\(\\)?/g,Ay=dh(function(n){var t=[];return n.charCodeAt(0)===46&&t.push(""),n.replace(Iy,function(e,r,o,i){t.push(o?i.replace(Oy,"$1"):r||e)}),t}),mh=Ay;function Dy(n){return n==null?"":vc(n)}var fh=Dy;function By(n,t){return Xe(n)?n:Yc(n,t)?[n]:mh(fh(n))}var Ro=By;var Ey=1/0;function _y(n){if(typeof n=="string"||Mo(n))return n;var t=n+"";return t=="0"&&1/n==-Ey?"-0":t}var is=_y;function Gy(n,t){t=Ro(t,n);for(var e=0,r=t.length;n!=null&&e<r;)n=n[is(t[e++])];return e&&e==r?n:void 0}var gh=Gy;function zy(n,t){for(var e=-1,r=t.length,o=n.length;++e<r;)n[o+e]=t[e];return n}var Fo=zy;var yh=yt?yt.isConcatSpreadable:void 0;function Ry(n){return Xe(n)||so(n)||!!(yh&&n&&n[yh])}var xh=Ry;function bh(n,t,e,r,o){var i=-1,s=n.length;for(e||(e=xh),o||(o=[]);++i<s;){var a=n[i];t>0&&e(a)?t>1?bh(a,t-1,e,r,o):Fo(o,a):r||(o[o.length]=a)}return o}var vh=bh;function Fy(n){var t=n==null?0:n.length;return t?vh(n,1):[]}var Sh=Fy;function Vy(n){return Kn(Zn(n,void 0,Sh),n+"")}var wh=Vy;var Uy=os(Object.getPrototypeOf,Object),Vo=Uy;var jy="[object Object]",ky=Function.prototype,Hy=Object.prototype,Nh=ky.toString,qy=Hy.hasOwnProperty,Wy=Nh.call(Object);function $y(n){if(!ht(n)||_t(n)!=jy)return!1;var t=Vo(n);if(t===null)return!0;var e=qy.call(t,"constructor")&&t.constructor;return typeof e=="function"&&e instanceof e&&Nh.call(e)==Wy}var ns=$y;function Jy(n,t,e){var r=-1,o=n.length;t<0&&(t=-t>o?0:o+t),e=e>o?o:e,e<0&&(e+=o),o=t>e?0:e-t>>>0,t>>>=0;for(var i=Array(o);++r<o;)i[r]=n[r+t];return i}var Lh=Jy;function Yy(){this.__data__=new jr,this.size=0}var Ch=Yy;function Ky(n){var t=this.__data__,e=t.delete(n);return this.size=t.size,e}var Th=Ky;function Xy(n){return this.__data__.get(n)}var Mh=Xy;function Qy(n){return this.__data__.has(n)}var Ph=Qy;var Zy=200;function ex(n,t){var e=this.__data__;if(e instanceof jr){var r=e.__data__;if(!kr||r.length<Zy-1)return r.push([n,t]),this.size=++e.size,this;e=this.__data__=new ki(r)}return e.set(n,t),this.size=e.size,this}var Ih=ex;function Uo(n){var t=this.__data__=new jr(n);this.size=t.size}Uo.prototype.clear=Ch;Uo.prototype.delete=Th;Uo.prototype.get=Mh;Uo.prototype.has=Ph;Uo.prototype.set=Ih;var ss=Uo;function tx(n,t){return n&&jt(t,Eo(t),n)}var Oh=tx;function rx(n,t){return n&&jt(t,ar(t),n)}var Ah=rx;var _h=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Dh=_h&&typeof module=="object"&&module&&!module.nodeType&&module,ox=Dh&&Dh.exports===_h,Bh=ox?Ke.Buffer:void 0,Eh=Bh?Bh.allocUnsafe:void 0;function ix(n,t){if(t)return n.slice();var e=n.length,r=Eh?Eh(e):new n.constructor(e);return n.copy(r),r}var as=ix;function nx(n,t){for(var e=-1,r=n==null?0:n.length,o=0,i=[];++e<r;){var s=n[e];t(s,e,n)&&(i[o++]=s)}return i}var Gh=nx;function sx(){return[]}var ls=sx;var ax=Object.prototype,lx=ax.propertyIsEnumerable,zh=Object.getOwnPropertySymbols,cx=zh?function(n){return n==null?[]:(n=Object(n),Gh(zh(n),function(t){return lx.call(n,t)}))}:ls,jo=cx;function hx(n,t){return jt(n,jo(n),t)}var Rh=hx;var px=Object.getOwnPropertySymbols,ux=px?function(n){for(var t=[];n;)Fo(t,jo(n)),n=Vo(n);return t}:ls,cs=ux;function dx(n,t){return jt(n,cs(n),t)}var Fh=dx;function mx(n,t,e){var r=t(n);return Xe(n)?r:Fo(r,e(n))}var hs=mx;function fx(n){return hs(n,Eo,jo)}var Vh=fx;function gx(n){return hs(n,ar,cs)}var ps=gx;var yx=Tt(Ke,"DataView"),us=yx;var xx=Tt(Ke,"Promise"),ds=xx;var bx=Tt(Ke,"Set"),ms=bx;var Uh="[object Map]",vx="[object Object]",jh="[object Promise]",kh="[object Set]",Hh="[object WeakMap]",qh="[object DataView]",Sx=Pr(us),wx=Pr(kr),Nx=Pr(ds),Lx=Pr(ms),Cx=Pr(Jn),ao=_t;(us&&ao(new us(new ArrayBuffer(1)))!=qh||kr&&ao(new kr)!=Uh||ds&&ao(ds.resolve())!=jh||ms&&ao(new ms)!=kh||Jn&&ao(new Jn)!=Hh)&&(ao=function(n){var t=_t(n),e=t==vx?n.constructor:void 0,r=e?Pr(e):"";if(r)switch(r){case Sx:return qh;case wx:return Uh;case Nx:return jh;case Lx:return kh;case Cx:return Hh}return t});var ko=ao;var Tx=Object.prototype,Mx=Tx.hasOwnProperty;function Px(n){var t=n.length,e=new n.constructor(t);return t&&typeof n[0]=="string"&&Mx.call(n,"index")&&(e.index=n.index,e.input=n.input),e}var Wh=Px;var Ix=Ke.Uint8Array,qa=Ix;function Ox(n){var t=new n.constructor(n.byteLength);return new qa(t).set(new qa(n)),t}var Ho=Ox;function Ax(n,t){var e=t?Ho(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.byteLength)}var $h=Ax;var Dx=/\w*$/;function Bx(n){var t=new n.constructor(n.source,Dx.exec(n));return t.lastIndex=n.lastIndex,t}var Jh=Bx;var Yh=yt?yt.prototype:void 0,Kh=Yh?Yh.valueOf:void 0;function Ex(n){return Kh?Object(Kh.call(n)):{}}var Xh=Ex;function _x(n,t){var e=t?Ho(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.length)}var fs=_x;var Gx="[object Boolean]",zx="[object Date]",Rx="[object Map]",Fx="[object Number]",Vx="[object RegExp]",Ux="[object Set]",jx="[object String]",kx="[object Symbol]",Hx="[object ArrayBuffer]",qx="[object DataView]",Wx="[object Float32Array]",$x="[object Float64Array]",Jx="[object Int8Array]",Yx="[object Int16Array]",Kx="[object Int32Array]",Xx="[object Uint8Array]",Qx="[object Uint8ClampedArray]",Zx="[object Uint16Array]",e0="[object Uint32Array]";function t0(n,t,e){var r=n.constructor;switch(t){case Hx:return Ho(n);case Gx:case zx:return new r(+n);case qx:return $h(n,e);case Wx:case $x:case Jx:case Yx:case Kx:case Xx:case Qx:case Zx:case e0:return fs(n,e);case Rx:return new r;case Fx:case jx:return new r(n);case Vx:return Jh(n);case Ux:return new r;case kx:return Xh(n)}}var Qh=t0;function r0(n){return typeof n.constructor=="function"&&!Ao(n)?Tc(Vo(n)):{}}var gs=r0;var o0="[object Map]";function i0(n){return ht(n)&&ko(n)==o0}var Zh=i0;var ep=Ir&&Ir.isMap,n0=ep?Bo(ep):Zh,tp=n0;var s0="[object Set]";function a0(n){return ht(n)&&ko(n)==s0}var rp=a0;var op=Ir&&Ir.isSet,l0=op?Bo(op):rp,ip=l0;var c0=1,h0=2,p0=4,np="[object Arguments]",u0="[object Array]",d0="[object Boolean]",m0="[object Date]",f0="[object Error]",sp="[object Function]",g0="[object GeneratorFunction]",y0="[object Map]",x0="[object Number]",ap="[object Object]",b0="[object RegExp]",v0="[object Set]",S0="[object String]",w0="[object Symbol]",N0="[object WeakMap]",L0="[object ArrayBuffer]",C0="[object DataView]",T0="[object Float32Array]",M0="[object Float64Array]",P0="[object Int8Array]",I0="[object Int16Array]",O0="[object Int32Array]",A0="[object Uint8Array]",D0="[object Uint8ClampedArray]",B0="[object Uint16Array]",E0="[object Uint32Array]",Ae={};Ae[np]=Ae[u0]=Ae[L0]=Ae[C0]=Ae[d0]=Ae[m0]=Ae[T0]=Ae[M0]=Ae[P0]=Ae[I0]=Ae[O0]=Ae[y0]=Ae[x0]=Ae[ap]=Ae[b0]=Ae[v0]=Ae[S0]=Ae[w0]=Ae[A0]=Ae[D0]=Ae[B0]=Ae[E0]=!0;Ae[f0]=Ae[sp]=Ae[N0]=!1;function ys(n,t,e,r,o,i){var s,a=t&c0,l=t&h0,c=t&p0;if(e&&(s=o?e(n,r,o,i):e(n)),s!==void 0)return s;if(!pt(n))return n;var h=Xe(n);if(h){if(s=Wh(n),!a)return Yn(n,s)}else{var p=ko(n),u=p==sp||p==g0;if(Do(n))return as(n,a);if(p==ap||p==np||u&&!o){if(s=l||u?{}:gs(n),!a)return l?Fh(n,Ah(s,n)):Rh(n,Oh(s,n))}else{if(!Ae[p])return o?n:{};s=Qh(n,p,a)}}i||(i=new ss);var d=i.get(n);if(d)return d;i.set(n,s),ip(n)?n.forEach(function(x){s.add(ys(x,t,e,x,n,i))}):tp(n)&&n.forEach(function(x,y){s.set(y,ys(x,t,e,y,n,i))});var m=c?l?ps:Vh:l?ar:Eo,g=h?void 0:m(n);return Ac(g||n,function(x,y){g&&(y=x,x=n[y]),Qn(s,y,ys(x,t,e,y,n,i))}),s}var xs=ys;var _0=1,G0=4;function z0(n){return xs(n,_0|G0)}var Hi=z0;function R0(n){return function(t,e,r){for(var o=-1,i=Object(t),s=r(t),a=s.length;a--;){var l=s[n?a:++o];if(e(i[l],l,i)===!1)break}return t}}var lp=R0;var F0=lp(),cp=F0;function V0(n,t,e){(e!==void 0&&!Fr(n[t],e)||e===void 0&&!(t in n))&&Oo(n,t,e)}var qi=V0;function U0(n){return ht(n)&&Vr(n)}var hp=U0;function j0(n,t){if(!(t==="constructor"&&typeof n[t]=="function")&&t!="__proto__")return n[t]}var Wi=j0;function k0(n){return jt(n,ar(n))}var pp=k0;function H0(n,t,e,r,o,i,s){var a=Wi(n,e),l=Wi(t,e),c=s.get(l);if(c){qi(n,e,c);return}var h=i?i(a,l,e+"",n,t,s):void 0,p=h===void 0;if(p){var u=Xe(l),d=!u&&Do(l),m=!u&&!d&&ts(l);h=l,u||d||m?Xe(a)?h=a:hp(a)?h=Yn(a):d?(p=!1,h=as(l,!0)):m?(p=!1,h=fs(l,!0)):h=[]:ns(l)||so(l)?(h=a,so(a)?h=pp(a):(!pt(a)||Po(a))&&(h=gs(l))):p=!1}p&&(s.set(l,h),o(h,l,r,i,s),s.delete(l)),qi(n,e,h)}var up=H0;function dp(n,t,e,r,o){n!==t&&cp(t,function(i,s){if(o||(o=new ss),pt(i))up(n,t,s,e,dp,r,o);else{var a=r?r(Wi(n,s),i,s+"",n,t,o):void 0;a===void 0&&(a=i),qi(n,s,a)}},ar)}var mp=dp;function q0(n){var t=n==null?0:n.length;return t?n[t-1]:void 0}var fp=q0;function W0(n,t){return t.length<2?n:gh(n,Lh(t,0,-1))}var gp=W0;var $0=_c(function(n,t,e){mp(n,t,e)}),lo=$0;function J0(n,t){return t=Ro(t,n),n=gp(n,t),n==null||delete n[is(fp(t))]}var yp=J0;function Y0(n){return ns(n)?void 0:n}var xp=Y0;var K0=1,X0=2,Q0=4,Z0=wh(function(n,t){var e={};if(n==null)return e;var r=!1;t=qn(t,function(i){return i=Ro(i,n),r||(r=i.length>1),i}),jt(n,ps(n),e),r&&(e=xs(e,K0|X0|Q0,xp));for(var o=t.length;o--;)yp(e,t[o]);return e}),qo=Z0;var Wo;(e=>{e.all=["PerspectiveCamera","OrthographicCamera"];function t(r){return e.all.includes(r)}e.is=t})(Wo||(Wo={}));var co;(o=>{o.DefaultUp=[0,1,0],o.DefaultTargetOffset=1e3,o.defaultData={far:1e5,type:"OrthographicCamera",perspective:{near:5,fov:45,zoom:1},orthographic:{near:-1e5,zoom:1},up:o.DefaultUp,isUpVectorFlipped:!1,targetOffset:o.DefaultTargetOffset};function r(i){return i.type==="PerspectiveCamera"?i.perspective.zoom:i.orthographic.zoom}o.getZoom=r})(co||(co={}));var bp;(e=>{function n(r,o){return r[0]===o[0]&&r[1]===o[1]}e.isEqual=n;function t(r,o,i){return[r[0]+(o[0]-r[0])*i,r[1]+(o[1]-r[1])*i]}e.lerp=t})(bp||(bp={}));var $o;(o=>{function n(i,s){return i[0]===s[0]&&i[1]===s[1]&&i[2]===s[2]}o.isEqual=n;function t(i,s){return[i[0]+s[0],i[1]+s[1],i[2]+s[2]]}o.add=t;function e(i,s){return[i[0]-s[0],i[1]-s[1],i[2]-s[2]]}o.sub=e;function r(i,s,a){return[i[0]+(s[0]-i[0])*a,i[1]+(s[1]-i[1])*a,i[2]+(s[2]-i[2])*a]}o.lerp=r})($o||($o={}));var vp;(e=>{function n(r,o){return r[0]===o[0]&&r[1]===o[1]&&r[2]===o[2]&&r[3]===o[3]}e.isEqual=n;function t(r,o,i){return[r[0]+(o[0]-r[0])*i,r[1]+(o[1]-r[1])*i,r[2]+(o[2]-r[2])*i,r[3]+(o[3]-r[3])*i]}e.lerp=t})(vp||(vp={}));var qr;(o=>{o.identity=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function t(i,s){for(let a=0;a<16;a++)if(i[a]!==s[a])return!1;return!0}o.isEqual=t;function e(i){return i??o.identity}o.simplify=e;function r(i,s){let a=s.slice(0);for(var l=0,c=s.length;l<c;l+=3){let h=i[3]*s[l]+i[7]*s[l+1]+i[11]*s[l+2]+i[15];a[l]=(i[0]*s[l]+i[4]*s[l+1]+i[8]*s[l+2]+i[12])/h,a[l+1]=(i[1]*s[l]+i[5]*s[l+1]+i[9]*s[l+2]+i[13])/h,a[l+2]=(i[2]*s[l]+i[6]*s[l+1]+i[10]*s[l+2]+i[14])/h}return a}o.applyMatrix4=r})(qr||(qr={}));var Gt;(l=>{l.white={r:1,g:1,b:1},l.red={r:1,g:0,b:0},l.black={r:0,g:0,b:0};function r(c){return{r:Math.round(c.r*255),g:Math.round(c.g*255),b:Math.round(c.b*255),a:1}}l.toRgb255a1=r;function o(c){return{r:c.r,g:c.g,b:c.b}}l.clone=o;function i(c){return c=Math.floor(c),{r:(c>>16&255)/255,g:(c>>8&255)/255,b:(c&255)/255}}l.fromHex=i;function s(c,h){return c.r===h.r&&c.g===h.g&&c.b===h.b}l.equals=s;function a(c,h,p){return{r:c.r+(h.r-c.r)*p,g:c.g+(h.g-c.g)*p,b:c.b+(h.b-c.b)*p}}l.lerp=a})(Gt||(Gt={}));var lr;(s=>{s.white={...Gt.white,a:1};function t(a){return{r:a[0],g:a[1],b:a[2],a:a[3]}}s.from0to1=t;function e(a,l){return{...Gt.fromHex(a),a:l}}s.fromHexAndA=e;function r(a){return{r:Math.round(a.r*255),g:Math.round(a.g*255),b:Math.round(a.b*255),a:a.a}}s.toRgb255a1=r;function o(a,l){return Gt.equals(a,l)&&a.a===l.a}s.equals=o;function i(a,l,c){return{r:a.r+(l.r-a.r)*c,g:a.g+(l.g-a.g)*c,b:a.b+(l.b-a.b)*c,a:a.a+(l.a-a.a)*c}}s.lerp=i})(lr||(lr={}));var bs;(t=>t.identity={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1]})(bs||(bs={}));var Sp;(t=>t.defaultData={mass:1,stiffness:80,damping:10,velocity:0})(Sp||(Sp={}));var wp;(t=>t.defaultData={control1:[.5,.05],control2:[.1,.3]})(wp||(wp={}));var vs;(t=>{function n(e,r=.1){return{type:"radial",hideBase:!1,count:3,radial:{radius:Math.max(e[0],e[1])*2,start:0,end:360,alignment:!1,axis:"y",scale:[1,1,1],rotation:[0,0,0],position:[0,0,0]},linear:{scale:[1,1,1],rotation:[0,0,0],position:[e[0]+e[0]*r,0,0]},grid:{count:[2,2,2],size:e.map(o=>o*(1+r)),useCenter:!0}}}t.defaultData=n})(vs||(vs={}));var kt=class{modifyById(t,e){let r=this;if(r[t]===void 0)throw new Error("not expected");{let i={...r,[t]:e};return Object.setPrototypeOf(i,kt.prototype),i}}add(t,e){return this.runOp({type:1,id:t,data:e})?.data??this}runOp(t){let e=this;if(t.type===1){let r=e[t.id],o;r===void 0?o={type:2,id:t.id}:o={type:1,id:t.id,data:r};let{id:i,data:s}=t,a={...e,[i]:s};return Object.setPrototypeOf(a,kt.prototype),{data:a,actual:t,reverse:o}}else if(t.type===2){let{id:r}=t,o=e[r];if(o===void 0)return null;{let i={...e};return Object.setPrototypeOf(i,kt.prototype),delete i[r],{data:i,actual:t,reverse:{type:1,id:r,data:o}}}}throw new Error("illegal arg")}};function $i(n){if(n.deepFreeze!==void 0){n.deepFreeze(n);return}let t=Object.getOwnPropertyNames(n);for(let e of t){let r=n[e];r&&typeof r=="object"&&$i(r)}return Object.freeze(n)}function Np(n,t){let e=0;for(;e<n.length&&e<t.length;){if(n[e]<t[e])return-1;if(n[e]>t[e])return 1;e+=1}return e!==t.length?-1:e!==n.length?1:0}var Ss=class extends Error{};function cr(n,t,e){if(n===void 0?t===void 0?(n=0,t=10):n=t-10:t===void 0&&(t=n+10),n>t){let i=n;n=t,t=i}let r=[],o=1/(e+1);for(let i=0;i<e;i++){let s=n+(t-n)*(i+.75+Math.random()*.5)*o;r.push(s)}return r}function ws(n){return n instanceof Uint8Array||n instanceof Uint16Array||n instanceof Uint32Array||n instanceof Int8Array||n instanceof Int16Array||n instanceof Int32Array||n instanceof Float32Array||n instanceof Float64Array}function Lp(){return typeof process<"u"}function Cp(n,t){for(let e of n)t(e.id,e.data),Cp(e.children,t)}function Tp(n,t){t(n.id,n.data);for(let e of n.children)Tp(e,t)}var Ht=class extends Array{constructor(...e){super(...e);Object.setPrototypeOf(this,Ht.prototype)}deepFreeze(){let e=0;for(;e<this.length;)$i(this[e]),e++}fillCaches0(e,r){this.objCaches.set(e.id,e),this.parentCaches.set(e.id,r);for(let o of e.children)this.fillCaches0(o,e.id)}fillCaches(){if(this.objCaches===void 0){this.objCaches=new Map,this.parentCaches=new Map;for(let e of this)this.fillCaches0(e,null)}}randomId(){this.fillCaches();let e=Array.from(this.objCaches.keys());if(e.length!==0)return e[Math.max(0,Math.floor(Math.random()*e.length)-1)]}isDescendantOf(e,r){for(;e;){let o=this.parent(e);if(o===r)return!0;e=o}return!1}data(e){return this.get(e)?.data}has(e){return this.childrenOf(e)!==void 0}get(e){return this.fillCaches(),this.objCaches.get(e)}childrenOf(e){return e===null?this:this.get(e)?.children}traverseFrom(e,r){if(e===null)this.traverse(r);else{let o=this.get(e);o&&Tp(o,r)}}traverse(e){Cp(this,e)}totalSize(){return this.fillCaches(),this.objCaches.size}parent(e){return this.fillCaches(),this.parentCaches.get(e)}childrenArray(e){return e===null?this:this.get(e).children}modifyById(e,r){if(this.get(e)===void 0)throw new Error("not expected");{let i=this.parent(e),s=this.childrenArray(i),a=s.findIndex(h=>h.id===e);if(a<0)throw new Error("not expected");let l=s[a];return s=[...s],s[a]={...l,data:r},this.modifyArrayBy(i,s)}}modifyArrayBy(e,r){let o=e,i=r;for(;o!==null;){let a=i,l=o;if(o=this.parent(o),o===void 0)throw new Error;i=this.childrenArray(o);let c=i.findIndex(h=>h.id===l);if(c<0)throw new Error;i=[...i],i[c]={...i[c],children:a}}Object.setPrototypeOf(i,Ht.prototype);let s=i;return s.fillCaches(),s}runOp(e){switch(e.type){case 7:return this.addOp(e);case 8:return this.deleteOp(e);case 9:return this.moveOp(e)}}checkDuplicatedIdRec({id:e,children:r}){if(this.get(e)!==void 0)return!0;for(let o of r)if(this.checkDuplicatedIdRec(o))return!0;return!1}addOp(e){let{parent:r,fi:o,id:i,data:s,children:a}=e;if(r!==null&&this.get(r)===void 0)return null;if(this.checkDuplicatedIdRec(e))return null;{let l=r,c=this.childrenArray(l),h={fi:o,id:i,data:s,children:a};return c=[...c,h],c.sort((u,d)=>u.fi-d.fi),e.localIndex=c.indexOf(h),{data:this.modifyArrayBy(l,c),actual:e,reverse:{type:8,id:i}}}}deleteOp(e){let{id:r}=e;if(this.get(r)===null)return null;{let o=this.parent(r);if(o===void 0)return null;let i=this.childrenArray(o),s=i.findIndex(c=>c.id===r);e.localIndex=s,i=[...i];let a=i.splice(s,1)[0];return{data:this.modifyArrayBy(o,i),actual:e,reverse:{type:7,...a,parent:o}}}}moveOp(e){let{parent:r,fi:o,id:i}=e;if(r!==null&&this.get(r)===void 0)return this.deleteOp({type:8,id:i});if(r!==null){let d=r;for(;d!==null;){if(d===void 0)throw new Error;if(d===i)throw new Ss("cyclic tree");d=this.parent(d)}}let s=this.parent(i);if(s===void 0)return null;let a=s,l=this.childrenArray(s),c=l.findIndex(d=>d.id===i);l=[...l];let h=l.splice(c,1)[0],p=this.modifyArrayBy(s,l);s=r,l=p.childrenArray(s);let u=h.fi;return h={...h,fi:o},l=[...l,h],l.sort((d,m)=>d.fi-m.fi),e.localIndex=l.indexOf(h),p=p.modifyArrayBy(s,l),{data:p,actual:e,reverse:{type:9,parent:a,fi:u,id:i}}}previous(e,r){if(r===null){let i=this.childrenArray(e);return i.length===0?null:i[i.length-1].id}let o=null;for(let i of this.childrenArray(e)){if(i.id===r)return o;o=i.id}return null}traverseSortNext(e){let r=this.parent(e);if(r!==void 0){let o=this.childrenArray(r),i=o.findIndex(s=>s.id===e)+1;if(i<o.length)return o[i].id;if(r)return this.traverseSortNext(r)}}sortNext(e){let r=this.childrenArray(e);return r.length>0?r[0].id:this.traverseSortNext(e)}traverseSortPrevious(e){let r=this.childrenArray(e);return r.length>0?this.traverseSortPrevious(r[r.length-1].id):e}sortPrevious(e){let r=this.parent(e);if(r!==void 0){let o=this.childrenArray(r),i=o.findIndex(s=>s.id===e)-1;return i>=0?this.traverseSortPrevious(o[i].id):r}}getAllSorted(e){let r=[];for(let o of e){let i=this.getWithSortKey(o.id);i!==void 0&&r.push({...o,...i})}r.sort((o,i)=>Np(o.sortKey,i.sortKey));for(let o of r)delete o.sortKey;return r}getWithSortKey(e){var r=e;let o=[],i=this.get(r),s=i;if(i!==void 0){for(;r;)o.splice(0,0,i.fi),r=this.parent(r),r!==null&&(i=this.get(r));return{...s,sortKey:o}}}insertBeforeHelper(e,r,o){return this.insertAfterHelper(e,this.previous(e,r),o)}insertAfterHelper(e,r,o){let i=this.childrenArray(e);if(r===null){if(i.length===0)return cr(0,o,o);{let s=i[0].fi;return cr(s-o,s,o)}}else{let s=this.get(r);if(s===void 0||this.parent(r)!==e)throw new Error("illegal args");let a=i.find(l=>l.fi>s.fi);if(a===void 0){let l=i[i.length-1].fi;return cr(l,l+o,o)}else return cr(s.fi,a.fi,o)}}};var Ns;(t=>{function n(e,r){if(Array.isArray(e)){let o=r.props,i={},s=[...e],a=!1;if(o)for(let l of Object.keys(o)){let c=parseInt(l);if(isNaN(c))throw new Error("wrong index");i[l]=s[c],s[c]=o[l],a=!0}return a?{data:s,actual:r,reverse:{type:0,props:i}}:null}else{let o=r.props,i={},s={...e},a=!1;if(o)for(let l of Object.keys(o)){i[l]=s[l];let c=o[l];c===void 0?delete s[l]:s[l]=c,a=!0}return a?{data:s,actual:r,reverse:{type:0,props:i}}:null}}t.runOp=n})(Ns||(Ns={}));var Fe=class extends Array{constructor(...e){super(...e);Object.setPrototypeOf(this,Fe.prototype)}deepFreeze(){let e=0;for(;e<this.length;)$i(this[e]),e++}fillCaches0(e){this.objCaches.set(e.id,e)}fillCaches(){if(this.objCaches===void 0){this.objCaches=new Map,Object.getOwnPropertyDescriptor(this,"objCaches").enumerable=!1;for(let e of this)this.fillCaches0(e)}}randomId(){this.fillCaches();let e=Array.from(this.objCaches.keys());if(e.length!==0)return e[Math.max(0,Math.floor(Math.random()*e.length)-1)]}data(e){return this.get(e)?.data}get(e){return this.fillCaches(),this.objCaches.get(e)}modifyById(e,r){if(this.get(e)===void 0)throw new Error("not expected");{let i=this,s=i.findIndex(c=>c.id===e);if(s<0)throw new Error("not expected");let a=i[s];return i=[...i],i[s]={...a,data:r},this.modifyArrayBy(i)}}modifyArrayBy(e){Object.setPrototypeOf(e,Fe.prototype);let r=e;return Lp()||r.fillCaches(),r}runOp(e){switch(e.type){case 4:return this.addOp(e);case 5:return this.deleteOp(e);case 6:return this.moveOp(e)}}addOp(e){let{fi:r,id:o,data:i}=e,s=this,a={fi:r,id:o,data:i};return s=[...s,a],s.sort((c,h)=>c.fi-h.fi),e.localIndex=s.indexOf(a),{data:this.modifyArrayBy(s),actual:e,reverse:{type:5,id:o}}}deleteOp(e){let{id:r}=e,o=this,i=o.findIndex(l=>l.id===r);if(i===-1)return null;e.localIndex=i,o=[...o];let s=o.splice(i,1)[0];return{data:this.modifyArrayBy(o),actual:e,reverse:{type:4,...s}}}moveOp(e){let{fi:r,id:o}=e,i=this;i=[...i];let s=i.findIndex(h=>h.id===o);if(s===-1)return null;let a=i[s].fi,l={...i[s],fi:r};return i[s]=l,i.sort((h,p)=>h.fi-p.fi),e.localIndex=i.indexOf(l),{data:this.modifyArrayBy(i),actual:e,reverse:{type:6,fi:a,id:o}}}previous(e){if(e===null)return this.length===0?null:this[this.length-1].id;let r=null;for(let o of this){if(o.id===e)return r;r=o.id}return null}insertBeforeHelper(e,r){return this.insertAfterHelper(this.previous(e),r)}insertAfterHelper(e,r){let o=this;if(e===null){if(o.length===0)return cr(0,r,r);{let i=o[0].fi;return cr(i-r,i,r)}}else{let i=this.get(e);if(i===void 0)throw new Error("illegal args");let s=o.find(a=>a.fi>i.fi);if(s===void 0){let a=o[o.length-1].fi;return cr(a,a+r,r)}else return cr(i.fi,s.fi,r)}}};var Mp=Symbol(),Cs=Symbol(),Jo=class{reportOp(t,e){let r=this;if(e===null)return;r._current=e.data;let o=[];for(;!(r instanceof Ls);){let i=r._path,s=r._current;if(i!==""&&o.splice(0,0,i),r=r._parent,r===null)return;r.update(i,s)}r.push(o,t,e.actual,e.reverse)}deleteChildren(t){if(this._children){let e=this._children[t];if(e){let r=e[Cs];r&&r(),delete this._children[t]}}}},$a=class extends Jo{constructor(t,e,r){super(),this._parent=t,this._path=e,this._current=r}update(t,e){if(Array.isArray(this._current)){if(typeof t=="string"&&(t=parseInt(t),isNaN(t)))throw new Error("Invalid path");this._current=[...this._current],this._current[t]=e}else this._current={...this._current,[t]:e}}runOp(t){this.reportOp(t,Ns.runOp(this._current,t))}},Ja=class extends Jo{constructor(t,e,r){super(),this._parent=t,this._path=e,this._current=r}update(t,e){this._current={...this._current,[t]:e},Object.setPrototypeOf(this._current,kt.prototype)}runOp(t){this.reportOp(t,this._current.runOp(t))}},Pp={get(n,t){if(t===Cs)return()=>{n._parent=null};if(t===Mp)return n._current;let{_current:e,_children:r}=n;if(t==="push"&&Array.isArray(e))throw new Error("not supported to expand array");let o=r===void 0?void 0:r[t];if(o!==void 0)return o;let i=e[t],s=Ts(n,t,i);return s!==i?(r===void 0&&(r={},n._children=r),r[t]=s,s):i},has(n,t){return t in n._current},ownKeys(n){return Reflect.ownKeys(n._current)},defineProperty(){throw Error("not supported")},getPrototypeOf(n){return Object.getPrototypeOf(n._current)},setPrototypeOf(){throw Error("not supported")},getOwnPropertyDescriptor(n,t){let e=n._current,r=Reflect.getOwnPropertyDescriptor(e,t);return r&&{writable:!0,configurable:!0,enumerable:r.enumerable,value:e[t]}}},eb={...Pp,set(n,t,e){let r={type:0,props:{[t]:Xa(e)??e}};return n.deleteChildren(t),n.runOp(r),!0},deleteProperty(n,t){let e={type:0,props:{[t]:void 0}};return n.deleteChildren(t),n.runOp(e),!0}},tb={...Pp,set(n,t,e){return e===void 0?this.deleteProperty(n,t):(n.deleteChildren(t),n.runOp({type:1,id:t,data:e})),!0},deleteProperty(n,t){return n.runOp({type:2,id:t}),!0}},Yo=class extends Jo{constructor(t,e,r){super(),this._children={},this._parent=t,this._path=e,this._current=r,this[Cs]=()=>{this._parent=null}}unproxy(){return this._current}update(t,e){this._current=this._current.modifyById(t,e)}runOp(t){this.reportOp(t,this._current.runOp(t))}randomId(){return this._current.randomId()}isDescendantOf(t,e){return this._current.isDescendantOf(t,e)}childrenOf(t){return this._current.childrenOf(t)}traverse(t){return this._current.traverse(t)}get(t){return this._current.get(t)}parent(t){return this._current.parent(t)}traverse(t){this._current.traverse((e,r)=>{t(e,this.data(e))})}data(t){let{_current:e,_children:r}=this,o=r===void 0?void 0:r[t];if(o!==void 0)return o;let i=e.get(t)?.data,s=Ts(this,t,i);return s!==i?(r===void 0&&(r={},this._children=r),r[t]=s,s):i}add(t,e,r,o,i){this.runOp({type:7,parent:t,fi:e,id:r,data:o,children:i})}move(t,e,r){this.runOp({type:9,parent:t,fi:e,id:r})}insertAfter(t,e,r){let o=this._current.insertAfterHelper(t,e,r.length);for(let i=0;i<r.length;i++){let s=r[i];this.add(t,o[i],s.id,s.data,s.children)}}insertBefore(t,e,r){let o=this._current.insertBeforeHelper(t,e,r.length);for(let i=0;i<r.length;i++){let s=r[i];this.add(t,o[i],s.id,s.data,s.children)}}moveAfter(t,e,r){let o=this._current.insertAfterHelper(t,e,r.length);for(let i=0;i<r.length;i++){let s=r[i];this.move(t,o[i],s)}}moveBefore(t,e,r){let o=this._current.insertBeforeHelper(t,e,r.length);for(let i=0;i<r.length;i++){let s=r[i];this.move(t,o[i],s)}}delete(t){this.deleteChildren(t),this.runOp({type:8,id:t})}sortNext(t){return this._current.sortNext(t)}sortPrevious(t){return this._current.sortPrevious(t)}getAllSorted(t){return this._current.getAllSorted(t)}},Ko=class extends Jo{constructor(t,e,r){super(),this._children={},this._parent=t,this._path=e,this._current=r,this[Cs]=()=>{this._parent=null}}unproxy(){return this._current}get length(){return this._current.length}forEach(t){let e=this.length;for(let r=0;r<e;r++){let o=this._current[r].id;t(this.data(this._current[r].id),o)}}update(t,e){this._current=this._current.modifyById(t,e)}randomId(){return this._current.randomId()}get(t){return{...this._current.get(t),data:this.data(t)}}data(t){let{_current:e,_children:r}=this,o=r===void 0?void 0:r[t];if(o!==void 0)return o;let i=e.get(t)?.data,s=Ts(this,t,i);return s!==i?(r===void 0&&(r={},this._children=r),r[t]=s,s):i}runOp(t){this.reportOp(t,this._current.runOp(t))}add(t,e,r){this.runOp({type:4,fi:t,id:e,data:r})}move(t,e){this.runOp({type:6,fi:t,id:e})}insertAfter(t,e){let r=this._current.insertAfterHelper(t,e.length);for(let o=0;o<e.length;o++){let i=e[o];this.add(r[o],i.id,i.data)}}insertBefore(t,e){let r=this._current.insertBeforeHelper(t,e.length);for(let o=0;o<e.length;o++){let i=e[o];this.add(r[o],i.id,i.data)}}moveAfter(t,e){let r=this._current.insertAfterHelper(t,e.length);for(let o=0;o<e.length;o++){let i=e[o];this.move(r[o],i)}}moveBefore(t,e){let r=this._current.insertBeforeHelper(t,e.length);for(let o=0;o<e.length;o++){let i=e[o];this.move(r[o],i)}}delete(t){this.deleteChildren(t),this.runOp({type:5,id:t})}};function Wa(n,t,e){if(n.length>0){let r=n[n.length-1];if(r.type===0&&t.type===0&&Ms.equal(r.path,e)){Object.assign(r.props,t.props);return}}n.push({...t,path:e})}var Ls=class{constructor(t){this.ts=[],this.actual=[],this.reverse=[],this._current=t}update(t,e){if(t!=="")throw new Error("");this._current=e}push(t,e,r,o){Wa(this.ts,e,t),Wa(this.actual,r,t),Wa(this.reverse,o,t)}result(){return{data:this._current,ts:this.ts,actual:this.actual,reverse:this.reverse.reverse()}}};function Ts(n,t,e){return e instanceof Ht?new Yo(n,t,e):e instanceof Fe?new Ko(n,t,e):e instanceof kt?new Proxy(new Ja(n,t,e),tb):e!==null&&typeof e=="object"?ws(e)?e:new Proxy(new $a(n,t,e),eb):e}function Ya(n){let t=new Ls(n);return[Ts(t,"",n),t]}function Ka(n,t){let[e,r]=Ya(n);return t(e),r.result()}function Xa(n){return n instanceof Yo||n instanceof Ko?n._current:n!==null&&typeof n=="object"?n[Mp]:n}var Ms;(r=>{function n(o,i){if(i.length===o.length)for(var s=0;s<o.length;){if(o[s]!==i[s])return!1;s+=1}else return!1;return!0}r.equal=n;function t(o,i,s){let a=e(s,o);if(a!==void 0&&typeof a=="object"&&a!==null){let l={...i};return Object.keys(a).forEach(c=>{delete l[c]}),l}else return i}r.removeOverridden=t;function e(o,i,s=0){if(i.length<=s)return o;if((o instanceof Ht||o instanceof Yo)&&typeof i[s]=="string")return e(o.data(i[s]),i,s+1);if((o instanceof Fe||o instanceof Ko)&&typeof i[s]=="string")return e(o.data(i[s]),i,s+1);if(typeof i[s]=="number"&&Array.isArray(o))return e(o[i[s]],i,s+1);if(typeof i[s]=="string"&&typeof o=="object")return e(o[i[s]],i,s+1)}r.zoom=e})(Ms||(Ms={}));var Ps=class{},Ji=class extends Ps{constructor(e){super();this.id=e}},Yi=class extends Ps{constructor(e){super();this.data=e}};var Za;try{Za=new TextDecoder}catch{}var Z,$r,N=0;var Gp=[],el=Gp,tl=0,Mt={},Ce,Wr,qt=0,hr=0,zt,Ar,xt=[],Me,Ip={useRecords:!1,mapsAsObjects:!0},Ki=class{},ol=new Ki;ol.name="MessagePack 0xC1";var Xo=!1,pr=class{constructor(t){t&&(t.useRecords===!1&&t.mapsAsObjects===void 0&&(t.mapsAsObjects=!0),t.structures?t.structures.sharedLength=t.structures.length:t.getStructures&&((t.structures=[]).uninitialized=!0,t.structures.sharedLength=0)),Object.assign(this,t)}unpack(t,e){if(Z)return Up(()=>(Os(),this?this.unpack(t,e):pr.prototype.unpack.call(Ip,t,e)));$r=e>-1?e:t.length,N=0,tl=0,hr=0,Wr=null,el=Gp,zt=null,Z=t;try{Me=t.dataView||(t.dataView=new DataView(t.buffer,t.byteOffset,t.byteLength))}catch(r){throw Z=null,t instanceof Uint8Array?r:new Error("Source must be a Uint8Array or Buffer but was a "+(t&&typeof t=="object"?t.constructor.name:typeof t))}if(this instanceof pr){if(Mt=this,this.structures)return Ce=this.structures,Is();(!Ce||Ce.length>0)&&(Ce=[])}else Mt=Ip,(!Ce||Ce.length>0)&&(Ce=[]);return Is()}unpackMultiple(t,e){let r,o=0;try{Xo=!0;let i=t.length,s=this?this.unpack(t,i):Bs.unpack(t,i);if(e){for(e(s);N<i;)if(o=N,e(Is())===!1)return}else{for(r=[s];N<i;)o=N,r.push(Is());return r}}catch(i){throw i.lastPosition=o,i.values=r,i}finally{Xo=!1,Os()}}_mergeStructures(t,e){t=t||[];for(let r=0,o=t.length;r<o;r++){let i=t[r];i&&(i.isShared=!0,r>=32&&(i.highByte=r-32>>5))}t.sharedLength=t.length;for(let r in e||[])if(r>=0){let o=t[r],i=e[r];i&&(o&&((t.restoreStructures||(t.restoreStructures=[]))[r]=o),t[r]=i)}return this.structures=t}decode(t,e){return this.unpack(t,e)}};function Is(){try{if(!Mt.trusted&&!Xo){let t=Ce.sharedLength||0;t<Ce.length&&(Ce.length=t)}let n=Ue();if(N==$r)Ce.restoreStructures&&Op(),Ce=null,Z=null,Ar&&(Ar=null);else if(N>$r){let t=new Error("Unexpected end of MessagePack data");throw t.incomplete=!0,t}else if(!Xo)throw new Error("Data read, but end of buffer not reached");return n}catch(n){throw Ce.restoreStructures&&Op(),Os(),(n instanceof RangeError||n.message.startsWith("Unexpected end of buffer"))&&(n.incomplete=!0),n}}function Op(){for(let n in Ce.restoreStructures)Ce[n]=Ce.restoreStructures[n];Ce.restoreStructures=null}function Ue(){let n=Z[N++];if(n<160)if(n<128){if(n<64)return n;{let t=Ce[n&63]||Mt.getStructures&&zp()[n&63];return t?(t.read||(t.read=il(t,n&63)),t.read()):n}}else if(n<144)if(n-=128,Mt.mapsAsObjects){let t={};for(let e=0;e<n;e++)t[Fp()]=Ue();return t}else{let t=new Map;for(let e=0;e<n;e++)t.set(Ue(),Ue());return t}else{n-=144;let t=new Array(n);for(let e=0;e<n;e++)t[e]=Ue();return t}else if(n<192){let t=n-160;if(hr>=N)return Wr.slice(N-qt,(N+=t)-qt);if(hr==0&&$r<140){let e=t<16?nl(t):Rp(t);if(e!=null)return e}return rl(t)}else{let t;switch(n){case 192:return null;case 193:return zt?(t=Ue(),t>0?zt[1].slice(zt.position1,zt.position1+=t):zt[0].slice(zt.position0,zt.position0-=t)):ol;case 194:return!1;case 195:return!0;case 196:return Qa(Z[N++]);case 197:return t=Me.getUint16(N),N+=2,Qa(t);case 198:return t=Me.getUint32(N),N+=4,Qa(t);case 199:return ho(Z[N++]);case 200:return t=Me.getUint16(N),N+=2,ho(t);case 201:return t=Me.getUint32(N),N+=4,ho(t);case 202:if(t=Me.getFloat32(N),Mt.useFloat32>2){let e=Ds[(Z[N]&127)<<1|Z[N+1]>>7];return N+=4,(e*t+(t>0?.5:-.5)>>0)/e}return N+=4,t;case 203:return t=Me.getFloat64(N),N+=8,t;case 204:return Z[N++];case 205:return t=Me.getUint16(N),N+=2,t;case 206:return t=Me.getUint32(N),N+=4,t;case 207:return Mt.int64AsNumber?(t=Me.getUint32(N)*4294967296,t+=Me.getUint32(N+4)):t=Me.getBigUint64(N),N+=8,t;case 208:return Me.getInt8(N++);case 209:return t=Me.getInt16(N),N+=2,t;case 210:return t=Me.getInt32(N),N+=4,t;case 211:return Mt.int64AsNumber?(t=Me.getInt32(N)*4294967296,t+=Me.getUint32(N+4)):t=Me.getBigInt64(N),N+=8,t;case 212:if(t=Z[N++],t==114)return _p(Z[N++]&63);{let e=xt[t];if(e)return e.read?(N++,e.read(Ue())):e.noBuffer?(N++,e()):e(Z.subarray(N,++N));throw new Error("Unknown extension "+t)}case 213:return t=Z[N],t==114?(N++,_p(Z[N++]&63,Z[N++])):ho(2);case 214:return ho(4);case 215:return ho(8);case 216:return ho(16);case 217:return t=Z[N++],hr>=N?Wr.slice(N-qt,(N+=t)-qt):ob(t);case 218:return t=Me.getUint16(N),N+=2,hr>=N?Wr.slice(N-qt,(N+=t)-qt):ib(t);case 219:return t=Me.getUint32(N),N+=4,hr>=N?Wr.slice(N-qt,(N+=t)-qt):nb(t);case 220:return t=Me.getUint16(N),N+=2,Dp(t);case 221:return t=Me.getUint32(N),N+=4,Dp(t);case 222:return t=Me.getUint16(N),N+=2,Bp(t);case 223:return t=Me.getUint32(N),N+=4,Bp(t);default:if(n>=224)return n-256;if(n===void 0){let e=new Error("Unexpected end of MessagePack data");throw e.incomplete=!0,e}throw new Error("Unknown MessagePack token "+n)}}}var rb=/^[a-zA-Z_$][a-zA-Z\d_$]*$/;function il(n,t){function e(){if(e.count++>2){let o=n.read=new Function("r","return function(){return {"+n.map(i=>rb.test(i)?i+":r()":"["+JSON.stringify(i)+"]:r()").join(",")+"}}")(Ue);return n.highByte===0&&(n.read=Ap(t,n.read)),o()}let r={};for(let o=0,i=n.length;o<i;o++){let s=n[o];r[s]=Ue()}return r}return e.count=0,n.highByte===0?Ap(t,e):e}var Ap=(n,t)=>function(){let e=Z[N++];if(e===0)return t();let r=n<32?-(n+(e<<5)):n+(e<<5),o=Ce[r]||zp()[r];if(!o)throw new Error("Record id is not defined for "+r);return o.read||(o.read=il(o,n)),o.read()};function zp(){let n=Up(()=>(Z=null,Mt.getStructures()));return Ce=Mt._mergeStructures(n,Ce)}var rl=As,ob=As,ib=As,nb=As;function As(n){let t;if(n<16&&(t=nl(n)))return t;if(n>64&&Za)return Za.decode(Z.subarray(N,N+=n));let e=N+n,r=[];for(t="";N<e;){let o=Z[N++];if((o&128)===0)r.push(o);else if((o&224)===192){let i=Z[N++]&63;r.push((o&31)<<6|i)}else if((o&240)===224){let i=Z[N++]&63,s=Z[N++]&63;r.push((o&31)<<12|i<<6|s)}else if((o&248)===240){let i=Z[N++]&63,s=Z[N++]&63,a=Z[N++]&63,l=(o&7)<<18|i<<12|s<<6|a;l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|l&1023),r.push(l)}else r.push(o);r.length>=4096&&(t+=ot.apply(String,r),r.length=0)}return r.length>0&&(t+=ot.apply(String,r)),t}function Dp(n){let t=new Array(n);for(let e=0;e<n;e++)t[e]=Ue();return t}function Bp(n){if(Mt.mapsAsObjects){let t={};for(let e=0;e<n;e++)t[Fp()]=Ue();return t}else{let t=new Map;for(let e=0;e<n;e++)t.set(Ue(),Ue());return t}}var ot=String.fromCharCode;function Rp(n){let t=N,e=new Array(n);for(let r=0;r<n;r++){let o=Z[N++];if((o&128)>0){N=t;return}e[r]=o}return ot.apply(String,e)}function nl(n){if(n<4)if(n<2){if(n===0)return"";{let t=Z[N++];if((t&128)>1){N-=1;return}return ot(t)}}else{let t=Z[N++],e=Z[N++];if((t&128)>0||(e&128)>0){N-=2;return}if(n<3)return ot(t,e);let r=Z[N++];if((r&128)>0){N-=3;return}return ot(t,e,r)}else{let t=Z[N++],e=Z[N++],r=Z[N++],o=Z[N++];if((t&128)>0||(e&128)>0||(r&128)>0||(o&128)>0){N-=4;return}if(n<6){if(n===4)return ot(t,e,r,o);{let i=Z[N++];if((i&128)>0){N-=5;return}return ot(t,e,r,o,i)}}else if(n<8){let i=Z[N++],s=Z[N++];if((i&128)>0||(s&128)>0){N-=6;return}if(n<7)return ot(t,e,r,o,i,s);let a=Z[N++];if((a&128)>0){N-=7;return}return ot(t,e,r,o,i,s,a)}else{let i=Z[N++],s=Z[N++],a=Z[N++],l=Z[N++];if((i&128)>0||(s&128)>0||(a&128)>0||(l&128)>0){N-=8;return}if(n<10){if(n===8)return ot(t,e,r,o,i,s,a,l);{let c=Z[N++];if((c&128)>0){N-=9;return}return ot(t,e,r,o,i,s,a,l,c)}}else if(n<12){let c=Z[N++],h=Z[N++];if((c&128)>0||(h&128)>0){N-=10;return}if(n<11)return ot(t,e,r,o,i,s,a,l,c,h);let p=Z[N++];if((p&128)>0){N-=11;return}return ot(t,e,r,o,i,s,a,l,c,h,p)}else{let c=Z[N++],h=Z[N++],p=Z[N++],u=Z[N++];if((c&128)>0||(h&128)>0||(p&128)>0||(u&128)>0){N-=12;return}if(n<14){if(n===12)return ot(t,e,r,o,i,s,a,l,c,h,p,u);{let d=Z[N++];if((d&128)>0){N-=13;return}return ot(t,e,r,o,i,s,a,l,c,h,p,u,d)}}else{let d=Z[N++],m=Z[N++];if((d&128)>0||(m&128)>0){N-=14;return}if(n<15)return ot(t,e,r,o,i,s,a,l,c,h,p,u,d,m);let g=Z[N++];if((g&128)>0){N-=15;return}return ot(t,e,r,o,i,s,a,l,c,h,p,u,d,m,g)}}}}}function Qa(n){return Mt.copyBuffers?Uint8Array.prototype.slice.call(Z,N,N+=n):Z.subarray(N,N+=n)}function ho(n){let t=Z[N++];if(xt[t])return xt[t](Z.subarray(N,N+=n));throw new Error("Unknown extension type "+t)}var Ep=new Array(4096);function Fp(){let n=Z[N++];if(n>=160&&n<192){if(n=n-160,hr>=N)return Wr.slice(N-qt,(N+=n)-qt);if(!(hr==0&&$r<180))return rl(n)}else return N--,Ue();let t=(n<<5^(n>1?Me.getUint16(N):n>0?Z[N]:0))&4095,e=Ep[t],r=N,o=N+n-3,i,s=0;if(e&&e.bytes==n){for(;r<o;){if(i=Me.getUint32(r),i!=e[s++]){r=1879048192;break}r+=4}for(o+=3;r<o;)if(i=Z[r++],i!=e[s++]){r=1879048192;break}if(r===o)return N=r,e.string;o-=3,r=N}for(e=[],Ep[t]=e,e.bytes=n;r<o;)i=Me.getUint32(r),e.push(i),r+=4;for(o+=3;r<o;)i=Z[r++],e.push(i);let a=n<16?nl(n):Rp(n);return a!=null?e.string=a:e.string=rl(n)}var _p=(n,t)=>{var e=Ue();let r=n;t!==void 0&&(n=n<32?-((t<<5)+n):(t<<5)+n,e.highByte=t);let o=Ce[n];return o&&o.isShared&&((Ce.restoreStructures||(Ce.restoreStructures=[]))[n]=o),Ce[n]=e,e.read=il(e,r),e.read()},Vp=typeof self=="object"?self:global;xt[0]=()=>{};xt[0].noBuffer=!0;xt[101]=()=>{let n=Ue();return(Vp[n[0]]||Error)(n[1])};xt[105]=n=>{let t=Me.getUint32(N-4);Ar||(Ar=new Map);let e=Z[N],r;e>=144&&e<160||e==220||e==221?r=[]:r={};let o={target:r};Ar.set(t,o);let i=Ue();return o.used?Object.assign(r,i):(o.target=i,i)};xt[112]=n=>{let t=Me.getUint32(N-4),e=Ar.get(t);return e.used=!0,e.target};xt[115]=()=>new Set(Ue());var sl=["Int8","Uint8","Uint8Clamped","Int16","Uint16","Int32","Uint32","Float32","Float64","BigInt64","BigUint64"].map(n=>n+"Array");xt[116]=n=>{let t=n[0],e=sl[t];if(!e)throw new Error("Could not find typed array for code "+t);return new Vp[e](Uint8Array.prototype.slice.call(n,1).buffer)};xt[120]=()=>{let n=Ue();return new RegExp(n[0],n[1])};xt[98]=n=>{let t=(n[0]<<24)+(n[1]<<16)+(n[2]<<8)+n[3],e=N;N+=t-4,zt=[Ue(),Ue()],zt.position0=0,zt.position1=0;let r=N;N=e;try{return Ue()}finally{N=r}};xt[255]=n=>n.length==4?new Date((n[0]*16777216+(n[1]<<16)+(n[2]<<8)+n[3])*1e3):n.length==8?new Date(((n[0]<<22)+(n[1]<<14)+(n[2]<<6)+(n[3]>>2))/1e6+((n[3]&3)*4294967296+n[4]*16777216+(n[5]<<16)+(n[6]<<8)+n[7])*1e3):n.length==12?new Date(((n[0]<<24)+(n[1]<<16)+(n[2]<<8)+n[3])/1e6+((n[4]&128?-281474976710656:0)+n[6]*1099511627776+n[7]*4294967296+n[8]*16777216+(n[9]<<16)+(n[10]<<8)+n[11])*1e3):new Date("invalid");function Up(n){let t=$r,e=N,r=tl,o=qt,i=hr,s=Wr,a=el,l=Ar,c=zt,h=new Uint8Array(Z.slice(0,$r)),p=Ce,u=Ce.slice(0,Ce.length),d=Mt,m=Xo,g=n();return $r=t,N=e,tl=r,qt=o,hr=i,Wr=s,el=a,Ar=l,zt=c,Z=h,Xo=m,Ce=p,Ce.splice(0,Ce.length,...u),Mt=d,Me=new DataView(Z.buffer,Z.byteOffset,Z.byteLength),g}function Os(){Z=null,Ar=null,Ce=null}function jp(n){n.unpack?xt[n.type]=n.unpack:xt[n.type]=n}var Ds=new Array(147);for(let n=0;n<256;n++)Ds[n]=+("1e"+Math.floor(45.15-n*.30103));var Bs=new pr({useRecords:!1}),sb=Bs.unpack,ab=Bs.unpackMultiple,lb=Bs.unpack,Es={NEVER:0,ALWAYS:1,DECIMAL_ROUND:3,DECIMAL_FIT:4},cb=new Float32Array(1),CP=new Uint8Array(cb.buffer,0,4);var _s;try{_s=new TextEncoder}catch{}var Gs,ll,zs=typeof Buffer<"u",al=zs?Buffer.allocUnsafeSlow:Uint8Array,Wp=zs?Buffer:Uint8Array,kp=zs?4294967296:2144337920,G,qe,T=0,ur,dr=null,hb=/[\u0080-\uFFFF]/,Xi=Symbol("record-id"),po=class extends pr{constructor(t){super(t),this.offset=0;let e,r,o,i,s,a,l=0,c=Wp.prototype.utf8Write?function(f,D,L){return G.utf8Write(f,D,L)}:_s&&_s.encodeInto?function(f,D){return _s.encodeInto(f,G.subarray(D)).written}:!1,h=this;t||(t={});let p=t&&t.sequential,u=t.structures||t.saveStructures,d=t.maxSharedStructures;if(d==null&&(d=u?32:0),d>8160)throw new Error("Maximum maxSharedStructure is 8160");let m=t.maxOwnStructures;m==null&&(m=u?32:64),p&&!t.saveStructures&&(this.structures=[]);let g=d>32||m+d>64,x=d+64,y=d+m+64;if(y>8256)throw new Error("Maximum maxSharedStructure + maxOwnStructure is 8192");let b=[],C=0,S=0;this.pack=this.encode=function(f,D){if(G||(G=new al(8192),qe=new DataView(G.buffer,0,8192),T=0),ur=G.length-10,ur-T<2048?(G=new al(G.length),qe=new DataView(G.buffer,0,G.length),ur=G.length-10,T=0):T=T+7&2147483640,r=T,a=h.structuredClone?new Map:null,h.bundleStrings?(dr=["",""],G[T++]=214,G[T++]=98,dr.position=T-r,T+=4):dr=null,o=h.structures,o){o.uninitialized&&(o=h._mergeStructures(h.getStructures()));let L=o.sharedLength||0;if(L>d)throw new Error("Shared structures is larger than maximum shared structures, try increasing maxSharedStructures to "+o.sharedLength);if(!o.transitions){o.transitions=Object.create(null);for(let P=0;P<L;P++){let M=o[P];if(!M)continue;let I,k=o.transitions;for(let q=0,ie=M.length;q<ie;q++){let he=M[q];I=k[he],I||(I=k[he]=Object.create(null)),k=I}k[Xi]=P+64}l=L}p||(o.nextId=L+64)}i&&(i=!1),s=o||[];try{if(v(f),dr){qe.setUint32(dr.position+r,T-dr.position-r);let L=dr;dr=null,v(L[0]),v(L[1])}if(h.offset=T,a&&a.idsToInsert){T+=a.idsToInsert.length*6,T>ur&&w(T),h.offset=T;let L=ub(G.subarray(r,T),a.idsToInsert);return a=null,L}return D&Jp?(G.start=r,G.end=T,G):G.subarray(r,T)}finally{if(o){if(S<10&&S++,C>1e4)o.transitions=null,S=0,C=0,b.length>0&&(b=[]);else if(b.length>0&&!p){for(let L=0,P=b.length;L<P;L++)b[L][Xi]=0;b=[]}if(i&&h.saveStructures){let L=o.sharedLength||d;o.length>L&&(o=o.slice(0,L));let P=G.subarray(r,T);return h.saveStructures(o,l)===!1?(h._mergeStructures(h.getStructures()),h.pack(f)):(l=L,P)}}D&bb&&(T=r)}};let v=f=>{T>ur&&(G=w(T));var D=typeof f,L;if(D==="string"){let P=f.length;if(dr&&P>=8&&P<4096){let k=hb.test(f);dr[k?0:1]+=f,G[T++]=193,v(k?-P:P);return}let M;P<32?M=1:P<256?M=2:P<65536?M=3:M=5;let I=P*3;if(T+I>ur&&(G=w(T+I)),P<64||!c){let k,q,ie,he=T+M;for(k=0;k<P;k++)q=f.charCodeAt(k),q<128?G[he++]=q:q<2048?(G[he++]=q>>6|192,G[he++]=q&63|128):(q&64512)===55296&&((ie=f.charCodeAt(k+1))&64512)===56320?(q=65536+((q&1023)<<10)+(ie&1023),k++,G[he++]=q>>18|240,G[he++]=q>>12&63|128,G[he++]=q>>6&63|128,G[he++]=q&63|128):(G[he++]=q>>12|224,G[he++]=q>>6&63|128,G[he++]=q&63|128);L=he-T-M}else L=c(f,T+M,I);L<32?G[T++]=160|L:L<256?(M<2&&G.copyWithin(T+2,T+1,T+1+L),G[T++]=217,G[T++]=L):L<65536?(M<3&&G.copyWithin(T+3,T+2,T+2+L),G[T++]=218,G[T++]=L>>8,G[T++]=L&255):(M<5&&G.copyWithin(T+5,T+3,T+3+L),G[T++]=219,qe.setUint32(T,L),T+=4),T+=L}else if(D==="number")if(f>>>0===f)f<64?G[T++]=f:f<256?(G[T++]=204,G[T++]=f):f<65536?(G[T++]=205,G[T++]=f>>8,G[T++]=f&255):(G[T++]=206,qe.setUint32(T,f),T+=4);else if(f>>0===f)f>=-32?G[T++]=256+f:f>=-128?(G[T++]=208,G[T++]=f+256):f>=-32768?(G[T++]=209,qe.setInt16(T,f),T+=2):(G[T++]=210,qe.setInt32(T,f),T+=4);else{let P;if((P=this.useFloat32)>0&&f<4294967296&&f>=-2147483648){G[T++]=202,qe.setFloat32(T,f);let M;if(P<4||(M=f*Ds[(G[T]&127)<<1|G[T+1]>>7])>>0===M){T+=4;return}else T--}G[T++]=203,qe.setFloat64(T,f),T+=8}else if(D==="object")if(!f)G[T++]=192;else{if(a){let M=a.get(f);if(M){if(!M.id){let I=a.idsToInsert||(a.idsToInsert=[]);M.id=I.push(M)}G[T++]=214,G[T++]=112,qe.setUint32(T,M.id),T+=4;return}else a.set(f,{offset:T-r})}let P=f.constructor;if(P===Object)z(f,!0);else if(P===Array){L=f.length,L<16?G[T++]=144|L:L<65536?(G[T++]=220,G[T++]=L>>8,G[T++]=L&255):(G[T++]=221,qe.setUint32(T,L),T+=4);for(let M=0;M<L;M++)v(f[M])}else if(P===Map){L=f.size,L<16?G[T++]=128|L:L<65536?(G[T++]=222,G[T++]=L>>8,G[T++]=L&255):(G[T++]=223,qe.setUint32(T,L),T+=4);for(let[M,I]of f)v(M),v(I)}else{for(let M=0,I=Gs.length;M<I;M++){let k=ll[M];if(f instanceof k){let q=Gs[M];if(q.write){q.type&&(G[T++]=212,G[T++]=q.type,G[T++]=0),v(q.write.call(this,f));return}let ie=G,he=qe,se=T;G=null;let J;try{J=q.pack.call(this,f,U=>(G=ie,ie=null,T+=U,T>ur&&w(T),{target:G,targetView:qe,position:T-U}),v)}finally{ie&&(G=ie,qe=he,T=se,ur=G.length-10)}J&&(J.length+T>ur&&w(J.length+T),T=pb(J,G,T,q.type));return}}z(f,!f.hasOwnProperty)}}else if(D==="boolean")G[T++]=f?195:194;else if(D==="bigint"){if(f<BigInt(1)<<BigInt(63)&&f>=-(BigInt(1)<<BigInt(63)))G[T++]=211,qe.setBigInt64(T,f);else if(f<BigInt(1)<<BigInt(64)&&f>0)G[T++]=207,qe.setBigUint64(T,f);else if(this.largeBigIntToFloat)G[T++]=203,qe.setFloat64(T,Number(f));else throw new RangeError(f+" was too large to fit in MessagePack 64-bit integer format, set largeBigIntToFloat to convert to float-64");T+=8}else if(D==="undefined")this.encodeUndefinedAsNil?G[T++]=192:(G[T++]=212,G[T++]=0,G[T++]=0);else if(D==="function")v(this.writeFunction&&this.writeFunction());else throw new Error("Unknown type: "+D)},z=this.useRecords===!1?this.variableMapSize?f=>{let D=Object.keys(f),L=D.length;L<16?G[T++]=128|L:L<65536?(G[T++]=222,G[T++]=L>>8,G[T++]=L&255):(G[T++]=223,qe.setUint32(T,L),T+=4);let P;for(let M=0;M<L;M++)v(P=D[M]),v(f[P])}:(f,D)=>{G[T++]=222;let L=T-r;T+=2;let P=0;for(let M in f)(D||f.hasOwnProperty(M))&&(v(M),v(f[M]),P++);G[L+++r]=P>>8,G[L+r]=P&255}:f=>{let D=Object.keys(f),L,P=s.transitions||(s.transitions=Object.create(null)),M=0;for(let k=0,q=D.length;k<q;k++){let ie=D[k];L=P[ie],L||(L=P[ie]=Object.create(null),M++),P=L}let I=P[Xi];if(I)I>=96&&g?(G[T++]=((I-=96)&31)+96,G[T++]=I>>5):G[T++]=I;else{I=s.nextId,I||(I=64),I<x&&this.shouldShareStructure&&!this.shouldShareStructure(D)?(I=s.nextOwnId,I<y||(I=x),s.nextOwnId=I+1):(I>=y&&(I=x),s.nextId=I+1);let k=D.highByte=I>=96&&g?I-96>>5:-1;P[Xi]=I,s[I-64]=D,I<x?(D.isShared=!0,s.sharedLength=I-63,i=!0,k>=0?(G[T++]=(I&31)+96,G[T++]=k):G[T++]=I):(k>=0?(G[T++]=213,G[T++]=114,G[T++]=(I&31)+96,G[T++]=k):(G[T++]=212,G[T++]=114,G[T++]=I),M&&(C+=S*M),b.length>=m&&(b.shift()[Xi]=0),b.push(P),v(D))}for(let k=0,q=D.length;k<q;k++)v(f[D[k]])},w=f=>{let D;if(f>16777216){if(f-r>kp)throw new Error("Packed buffer would be larger than maximum buffer size");D=Math.min(kp,Math.round(Math.max((f-r)*(f>67108864?1.25:2),4194304)/4096)*4096)}else D=(Math.max(f-r<<2,G.length-1)>>12)+1<<12;let L=new al(D);return qe=new DataView(L.buffer,0,D),G.copy?G.copy(L,0,r,f):L.set(G.slice(r,f)),T-=r,r=0,ur=L.length-10,G=L}}useBuffer(t){G=t,qe=new DataView(G.buffer,G.byteOffset,G.byteLength),T=0}};ll=[Date,Set,Error,RegExp,ArrayBuffer,Object.getPrototypeOf(Uint8Array.prototype).constructor,Ki];Gs=[{pack(n,t,e){let r=n.getTime()/1e3;if((this.useTimestamp32||n.getMilliseconds()===0)&&r>=0&&r<4294967296){let{target:o,targetView:i,position:s}=t(6);o[s++]=214,o[s++]=255,i.setUint32(s,r)}else if(r>0&&r<17179869184){let{target:o,targetView:i,position:s}=t(10);o[s++]=215,o[s++]=255,i.setUint32(s,n.getMilliseconds()*4e6+(r/1e3/4294967296>>0)),i.setUint32(s+4,r)}else if(isNaN(r)){if(this.onInvalidDate)return t(0),e(this.onInvalidDate());let{target:o,targetView:i,position:s}=t(3);o[s++]=212,o[s++]=255,o[s++]=255}else{let{target:o,targetView:i,position:s}=t(15);o[s++]=199,o[s++]=12,o[s++]=255,i.setUint32(s,n.getMilliseconds()*1e6),i.setBigInt64(s+4,BigInt(Math.floor(r)))}}},{pack(n,t,e){let r=Array.from(n),{target:o,position:i}=t(this.structuredClone?3:0);this.structuredClone&&(o[i++]=212,o[i++]=115,o[i++]=0),e(r)}},{pack(n,t,e){let{target:r,position:o}=t(this.structuredClone?3:0);this.structuredClone&&(r[o++]=212,r[o++]=101,r[o++]=0),e([n.name,n.message])}},{pack(n,t,e){let{target:r,position:o}=t(this.structuredClone?3:0);this.structuredClone&&(r[o++]=212,r[o++]=120,r[o++]=0),e([n.source,n.flags])}},{pack(n,t){this.structuredClone?Hp(n,16,t):qp(zs?Buffer.from(n):new Uint8Array(n),t)}},{pack(n,t){let e=n.constructor;e!==Wp&&this.structuredClone?Hp(n,sl.indexOf(e.name),t):qp(n,t)}},{pack(n,t){let{target:e,position:r}=t(1);e[r]=193}}];function Hp(n,t,e,r){let o=n.byteLength;if(o+1<256){var{target:i,position:s}=e(4+o);i[s++]=199,i[s++]=o+1}else if(o+1<65536){var{target:i,position:s}=e(5+o);i[s++]=200,i[s++]=o+1>>8,i[s++]=o+1&255}else{var{target:i,position:s,targetView:a}=e(7+o);i[s++]=201,a.setUint32(s,o+1),s+=4}i[s++]=116,i[s++]=t,i.set(new Uint8Array(n.buffer,n.byteOffset,n.byteLength),s)}function qp(n,t){let e=n.byteLength;var r,o;if(e<256){var{target:r,position:o}=t(e+2);r[o++]=196,r[o++]=e}else if(e<65536){var{target:r,position:o}=t(e+3);r[o++]=197,r[o++]=e>>8,r[o++]=e&255}else{var{target:r,position:o,targetView:i}=t(e+5);r[o++]=198,i.setUint32(o,e),o+=4}r.set(n,o)}function pb(n,t,e,r){let o=n.length;switch(o){case 1:t[e++]=212;break;case 2:t[e++]=213;break;case 4:t[e++]=214;break;case 8:t[e++]=215;break;case 16:t[e++]=216;break;default:o<256?(t[e++]=199,t[e++]=o):o<65536?(t[e++]=200,t[e++]=o>>8,t[e++]=o&255):(t[e++]=201,t[e++]=o>>24,t[e++]=o>>16&255,t[e++]=o>>8&255,t[e++]=o&255)}return t[e++]=r,t.set(n,e),e+=o,e}function ub(n,t){let e,r=t.length*6,o=n.length-r;for(t.sort((i,s)=>i.offset>s.offset?1:-1);e=t.pop();){let i=e.offset,s=e.id;n.copyWithin(i+r,i,o),r-=6;let a=i+r;n[a++]=214,n[a++]=105,n[a++]=s>>24,n[a++]=s>>16&255,n[a++]=s>>8&255,n[a++]=s&255,o=i}return n}function uo(n){if(n.Class){if(!n.pack&&!n.write)throw new Error("Extension has no pack or write function");if(n.pack&&!n.type)throw new Error("Extension has no type (numeric code to identify the extension)");ll.unshift(n.Class),Gs.unshift(n)}jp(n)}var $p=new po({useRecords:!1}),db=$p.pack,mb=$p.pack;var{NEVER:fb,ALWAYS:gb,DECIMAL_ROUND:yb,DECIMAL_FIT:xb}=Es,Jp=512,bb=1024;var Yp=new po({structuredClone:!0});uo({Class:kt.prototype.constructor,type:1,write(n){return{...n}},read(n){return Object.setPrototypeOf(n,kt.prototype),n}});uo({Class:Fe.prototype.constructor,type:2,write(n){return[...n]},read(n){return Object.setPrototypeOf(n,Fe.prototype),n}});uo({Class:Ht.prototype.constructor,type:3,write(n){return[...n]},read(n){return Object.setPrototypeOf(n,Ht.prototype),n}});uo({Class:Ji.prototype.constructor,type:4,write(n){return n.id},read(n){return new Ji(n)}});uo({Class:Yi.prototype.constructor,type:5,write(n){return n.data},read(n){return new Yi(n)}});function vb(n){var t=0;if(n.length===0)return t;for(let e=0;e<n.length;e++){let r=n[e];t=(t<<5)-t+r,t=t&t}return t}function cl(n){if(ws(n))return n;if(Array.isArray(n))return n.map(cl);if(typeof n=="object"&&n!==null){let t={};for(let e of Object.keys(n).sort())t[e]=cl(n[e]);return Object.setPrototypeOf(t,Object.getPrototypeOf(n)),t}else return n}var Rs;(r=>{function n(o){return Yp.pack(o)}r.serialize=n;function t(o){return Yp.unpack(o)}r.deserialize=t;function e(o){return vb(n(cl(o))).toString()}r.checksum=e})(Rs||(Rs={}));var Fs;(e=>{e.all=["PointLight","SpotLight","DirectionalLight","HemisphereLight"];function t(r){return e.all.includes(r)}e.is=t})(Fs||(Fs={}));var Vs;(e=>{function n(r){return t(r)}e.defaultData=n;function t(r){if(r==="PointLight")return{type:r,color:lr.white,intensity:1,distance:2e3,decay:1,shadows:!0,shadowResolution:1024,shadowRadius:1,depth:1e5,helper:!0};if(r==="SpotLight")return{type:r,color:lr.white,intensity:1,distance:2e3,decay:1,shadows:!0,penumbra:0,angle:30/180*Math.PI,depth:1e5,helper:!0,shadowResolution:1024,shadowRadius:1};if(r==="DirectionalLight")return{type:r,color:lr.white,intensity:1,shadows:!0,size:1e3,depth:1e5,shadowResolution:1024,helper:!0,shadowRadius:1};throw new Error("not implemented")}})(Vs||(Vs={}));var hl;(e=>{e.defaultData={castShadow:!0,receiveShadow:!0};function t(r,o){return r.castShadow===o.castShadow&&r.receiveShadow===o.receiveShadow}e.equals=t})(hl||(hl={}));var pl;(e=>{e.defaultData={flatShading:!1,wireframe:!1,side:0};function t(r,o){return r.flatShading===o.flatShading&&r.side===o.side&&r.wireframe===o.wireframe}e.equals=t})(pl||(pl={}));var Us;(t=>t.defaultData={...pl.defaultData,...hl.defaultData,cloner:null,booleanExclude:null})(Us||(Us={}));var ul=(o=>(o[o.Left=1]="Left",o[o.Right=2]="Right",o[o.Center=3]="Center",o[o.Justify=4]="Justify",o))(ul||{}),dl=(r=>(r[r.Top=1]="Top",r[r.Center=2]="Center",r[r.Bottom=3]="Bottom",r))(dl||{}),ml=(r=>(r[r.None=1]="None",r[r.Upper=2]="Upper",r[r.Lower=3]="Lower",r))(ml||{}),js;(t=>t.defaultData={width:100,height:100,horizontalAlign:1,verticalAlign:1,fontSize:16,lineHeight:1.5,letterSpacing:1,text:"",textTransform:1,color:lr.fromHexAndA(6974058,1),alpha:1,font:"roboto_regular"})(js||(js={}));var Qo;(r=>{function n(o,i){return o==="light"&&i?t(i):e(o)}r.defaultData=n;function t(o){switch(o){case"basic":return{type:"light",category:"basic",alpha:1,visible:!0,mode:0};case"phong":return{category:"phong",specular:{r:.2,g:.2,b:.2},shininess:10,type:"light",alpha:1,visible:!0,mode:0};case"toon":return{category:"toon",specular:{r:.2,g:.2,b:.2},shininess:10,type:"light",alpha:1,visible:!0,mode:0};case"lambert":return{category:"lambert",emissive:{r:0,g:0,b:0,a:1},type:"light",alpha:1,visible:!0,mode:0};case"physical":return{category:"physical",roughness:.2,metalness:.2,reflectivity:.2,type:"light",alpha:1,visible:!0,mode:0}}}function e(o){switch(o){case"texture":return{alpha:1,visible:!0,size:[128,128],mode:0,axis:"x",side:2,type:"texture",projection:0,texture:{image:"image_0",wrapping:1001,repeat:[1,1],offset:[0,0]},crop:!0};case"color":return{type:"color",alpha:1,visible:!0,mode:0,color:Gt.fromHex(4737101)};case"depth":return{type:"depth",alpha:1,visible:!0,mode:0,gradientType:1,smooth:!1,isVector:!0,isWorldSpace:!1,origin:[0,0,0],direction:[1,0,0],colors:[[1,1,1,1],[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],steps:[0,1,1,1,1,1,1,1,1,1,1],num:2,near:50,far:200};case"normal":return{type:"normal",alpha:1,visible:!0,mode:0,cnormal:[1,1,1]};case"gradient":return{type:"gradient",alpha:1,visible:!0,mode:0,gradientType:0,smooth:!1,colors:[[0,0,0,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]],steps:[0,1,1,1,1,1,1,1,1,1],num:2,angle:0,offset:[0,0],morph:[0,0]};case"noise":return{type:"noise",alpha:1,visible:!0,mode:0,size:[100,100,100],noiseType:0,scale:1,move:1,colorA:{...Gt.fromHex(6710886),a:1},colorB:{...Gt.fromHex(6710886),a:1},colorC:{...Gt.fromHex(16777215),a:1},colorD:{...Gt.fromHex(16777215),a:1},distortion:[1,1],fA:[1.7,9.2],fB:[8.3,2.8]};case"fresnel":return{type:"fresnel",alpha:1,visible:!0,mode:0,color:lr.fromHexAndA(16777215,1),bias:.1,scale:1,intensity:2,factor:1};case"rainbow":return{type:"rainbow",alpha:1,visible:!0,mode:0,filmThickness:30,movement:0,wavelengths:[0,0,0],noiseStrength:0,noiseScale:1,offset:[0,0,0]};case"matcap":return{type:"matcap",alpha:1,visible:!0,mode:0,texture:{image:"matcap_0",wrapping:1001,repeat:[1,1],offset:[0,0]}};case"transmission":return{type:"transmission",alpha:1,visible:!0,mode:0,thickness:10,ior:1.5,roughness:1};case"displace":return{type:"displace",displacementType:"noise",noiseType:0,scale:10,movement:1,offset:[0,0,0],intensity:8,visible:!0}}}})(Qo||(Qo={}));var mo;(a=>{function n(l){return!l.layers.some(h=>{if(h.data.type==="texture"&&h.data.projection!==0||h.data.type==="depth"&&!h.data.isWorldSpace||h.data.type==="noise"||h.data.type==="displace")return!0})&&!e(l)}a.isMergable=n;function t(l){let c="";return l.layers.forEach(h=>{Object.entries(h.data).forEach(([p,u])=>{c+=`${p}${u}`,Array.isArray(u)?u.forEach(d=>c+=`${d}`):typeof u=="object"?Object.values(u).forEach(d=>{typeof d=="number"?c+=`${d.toFixed(4)}`:c+=`${d}`}):c+=`${u}`})}),c}a.getHash=t;function e(l){let c=0;for(let h of l.layers)"alpha"in h.data&&h.data.type!=="light"&&h.data.type!=="fresnel"&&(c+=(1-c)*h.data.alpha);return c<1}a.isTransparent=e;function r(){return{layers:new Fe}}a.defaultEmptyData=r;function o(l="layer1",c="layer2"){return i("phong",l,c)}a.defaultData=o;function i(l,c="layer1",h="layer2"){let p=new Fe;return p.push({fi:0,data:Qo.defaultData("light",l),id:c}),p.push({fi:1,data:Qo.defaultData("color"),id:h}),{layers:p}}a.defaultTwoLayerData=i;function s(l,c="basic",h="layer1",p="layer2"){let u=Qo.defaultData("texture");Object.assign(u.texture,{image:l});let d=new Fe;return d.push({fi:0,data:u,id:h}),d.push({fi:1,data:Qo.defaultData("light",c),id:p}),{layers:d}}a.defaultTwoLayerTextureData=s})(mo||(mo={}));var Zo;(t=>{function n(){return{points:new Fe,roundness:0,shapeHoles:[],isClosed:!1}}t.defaultData=n})(Zo||(Zo={}));var ks;(t=>{function n(e){return e==="PolygonGeometry"||e==="RectangleGeometry"||e==="StarGeometry"||e==="TriangleGeometry"||e==="EllipseGeometry"}t.is2DParametricMesh=n})(ks||(ks={}));var Qi;(t=>{function n(e){if(e==="RectangleGeometry")return{width:320,height:320,type:e,cornerRadius:[0,0,0,0],cornerType:0,depth:0,extrudeBevelSize:0,extrudeBevelSegments:1};if(e==="VectorGeometry")return{width:1,height:1,type:e,subdivisions:12,shape:Zo.defaultData(),depth:0,extrudeBevelSize:0,extrudeBevelSegments:1};if(e==="BooleanGeometry")return{type:e,operation:2,width:0,height:0,depth:0,phongAngle:35};throw new Error("not implemented")}t.defaultData=n})(Qi||(Qi={}));var Zi;(o=>{o.identity={...bs.identity,hiddenMatrix:qr.identity};function t(i){return{position:i.position,rotation:i.rotation,scale:i.scale,hiddenMatrix:i.hiddenMatrix}}o.fromObject=t;function e(i,s){return{position:s?.position||i.position,rotation:s?.rotation||i.rotation,scale:s?.scale||i.scale,hiddenMatrix:s?.hiddenMatrix||i.hiddenMatrix}}o.merge=e;function r(i,s){return{position:$o.isEqual(i.position,s.position)?null:s.position,rotation:$o.isEqual(i.rotation,s.rotation)?null:s.rotation,scale:$o.isEqual(i.scale,s.scale)?null:s.scale,hiddenMatrix:qr.isEqual(i.hiddenMatrix,s.hiddenMatrix)?null:s.hiddenMatrix}}o.diff=r})(Zi||(Zi={}));var Dr;(t=>t.defaultData={states:new Fe,events:new Fe,visible:!0,raycastLock:!1,...Zi.identity})(Dr||(Dr={}));var Kp;(t=>t.defaultData={type:"Empty",...Dr.defaultData})(Kp||(Kp={}));var Hs;(t=>t.defaultData={type:"Mesh",...Dr.defaultData,...Us.defaultData})(Hs||(Hs={}));var Xp;(t=>t.defaultData={type:"TextFrame",...Dr.defaultData,...js.defaultData})(Xp||(Xp={}));var qs;(t=>t.defaultData={...Dr.defaultData,...Zi.identity,...co.defaultData})(qs||(qs={}));var Qp;(t=>{function n(e){return{...Dr.defaultData,...Vs.defaultData(e)}}t.defaultData=n})(Qp||(Qp={}));var Zp;(r=>(r.defaultCamera={position:[0,0,1e3],scale:[1,1,1],rotation:[0,0,0],hiddenMatrix:qr.identity,name:"Play Camera",visible:!0,raycastLock:!1,states:new Fe,events:new Fe,...co.defaultData},r.defaultMeshObject={name:"Rectangle",...Dr.defaultData,...Hs.defaultData,geometry:Qi.defaultData("RectangleGeometry"),material:mo.defaultTwoLayerData("basic","layer1","layer2")},r.defaultBooleanObject={name:"Boolean",...Dr.defaultData,...Hs.defaultData,geometry:Qi.defaultData("BooleanGeometry"),material:mo.defaultTwoLayerData("phong","layer1","layer2")}))(Zp||(Zp={}));var eu;(e=>{function n(r,o){if(o===void 0)return r;let i={...r};return"material"in i&&"material"in o&&o.material&&(i.material=Ka(i.material,s=>{if(typeof s!="string")for(let[a,l]of Object.entries(o.material.layers)){let c=s.layers.data(a);c&&lo(c,l)}}).data),i.materials&&o.materials&&(i.materials=Ka(i.materials,s=>{for(let a=0;a<i.materials.length;a++){let l=o.materials[a];if(typeof l!="string")for(let[c,h]of Object.entries(l.layers)){let p=s[a]?.layers?.data(c);p&&lo(p,h)}}}).data),i}e.patchMaterialState=n;function t(r,o){if(o===void 0)return r;let i={...r};if(Object.assign(i,Zi.merge(i,o)),Wo.is(r.type)){i.orthographic={...i.orthographic},i.perspective={...i.perspective};let s=o;s.orthographic?.zoom!==void 0&&(i.orthographic.zoom=s.orthographic.zoom),s.perspective?.zoom!==void 0&&(i.perspective.zoom=s.perspective.zoom),s.isUpVectorFlipped!==void 0&&(i.isUpVectorFlipped=s.isUpVectorFlipped),s.targetOffset!==void 0&&(i.targetOffset=s.targetOffset)}else if(r.type==="Mesh")i.geometry={...i.geometry},Object.assign(i.geometry,o.geometry),i=n(i,o);else if(Fs.is(r.type)){let s=o;i.intensity!==void 0&&(i.intensity=s.intensity),s.color!==void 0&&(typeof s.color=="string"?i.color=s.color:i.color=Gt.clone(s.color))}return i}e.patch=t})(eu||(eu={}));var ou=require("three");var Ee=require("three"),ru=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,radialSegments:64,heightSegments:1,openEnded:!1,thetaStart:0,thetaLength:360,cornerRadius:0,cornerSegments:8,hollow:0},n.parameters),r=e.width/2,o=e.radiusTop??r,i=e.radiusBottom??r;return o===i?(o=r,i=r):o>i?(o=r,i=i*r/o):(o=o*r/i,i=r),{parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??e.width),radiusTop:o,radiusBottom:i})}}static build(n){let{width:t,depth:e,height:r,radialSegments:o,heightSegments:i,openEnded:s,thetaStart:a,thetaLength:l,radiusTop:c,radiusBottom:h,cornerRadius:p,cornerSegments:u,hollow:d}=n.parameters,m;return p||d?m=new en(c,h,r,o,i,s,a,l*Math.PI/180,p,p,u,d):m=new Ee.CylinderBufferGeometry(c,h,r,o,i,s,a,l*Math.PI/180),m.scale(1,1,e/t),Object.assign(m,{userData:{...n,type:"CylinderGeometry"}})}};function Jr(n,t,e){e.x=n.x*t.x,e.y=n.y,e.z=n.x*t.y}function tu(n){return new Ee.Vector2(n.y,-n.x)}var en=class extends Ee.BufferGeometry{constructor(t,e,r,o,i,s,a,l,c,h,p,u,d=!1){super(),this.type="RoundedCylinderBufferGeometry",t=t!==void 0?t:1,e=e!==void 0?e:1,r=r||1,o=Math.floor(o)||8,i=Math.floor(i)||1,s=s!==void 0?s:!1,a=a!==void 0?a:0,l=l!==void 0?l:Math.PI*2,s&&(c=0,h=0);let m=[],g=[],x=[],y=[],b=0,C=r/2,S=new Ee.Vector3,v=new Ee.Vector3;d&&t==0&&(t=c),d&&e==0&&(e=h);let z=new Ee.Vector2(t,C),w=new Ee.Vector2(e,-C),f=null,D=null,L=null,P=null,M=z.clone().sub(w),I=0,k=0,q=0;u>0&&(I=Math.min(t,e)*(1-u),k=t-I,q=e-I);let ie=z.clone();ie.x-=I;let he=Math.PI-M.angle(),se=M.angle(),J=Math.tan(se/2),U=Math.tan(he/2),R=J+U,E=u?R:U,B=u?R:J;if(c=Math.min(c,(t-k)/E,M.length()/R),h=Math.min(h,(e-q)/B,M.length()/R),c>0){let V=c/J;f=z.clone().sub(new Ee.Vector2(V,c)),u&&(L=f.clone(),L.x-=I-R*c),z.sub(M.clone().setLength(V))}if(h>0){let V=h/U;D=w.clone().sub(new Ee.Vector2(V,-h)),w.add(M.clone().setLength(V)),u&&(P=D.clone(),P.x-=I-R*h,ie.sub(M.clone().setLength(V)))}M=z.clone().sub(w);let O=M.length()<.5,_=[];for(let V=0;V<=o;V++){let A=[],W=V/o,X=W*l+a,Q=new Ee.Vector2(Math.sin(X),Math.cos(X));P&&D?(Y(A,W,Q,he,h,P,-1,!0),Y(A,W,Q,se,h,D,-1,!1)):D?(j(A,Q,D.x,0,-1),Y(A,W,Q,se,h,D,-1,!1)):s||j(A,Q,e,q,-1);let H=tu(M).normalize();if(Jr(H,Q,S),!O)for(let K=0;K<=i;K++){let $=K/i,re=M.clone().multiplyScalar($).add(w);Jr(re,Q,v),g.push(v.x,v.y,v.z),x.push(S.x,S.y,S.z),y.push(W,.5+v.y/r),A.push(b++)}if(L&&f?(Y(A,W,Q,he,c,f,1,!1),Y(A,W,Q,se,c,L,1,!0)):f?(Y(A,W,Q,he,c,f,1,!1),j(A,Q,f.x,0,1)):s||j(A,Q,t,k,1),u&&!O){let K=tu(M).multiplyScalar(-1).normalize();Jr(K,Q,S);for(let $=0;$<=i;$++){let re=$/i,le=M.clone().multiplyScalar(-re).add(ie);Jr(le,Q,v),g.push(v.x,v.y,v.z),x.push(S.x,S.y,S.z),y.push(W,.5+v.y/r),A.push(b++)}}u&&!s&&A.push(A[0]),_.push(A)}for(let V=0;V<_.length-1;V++)for(let A=0;A<_[0].length-1;A++){if(s&&u&&A==i)continue;let W=_[V][A],X=_[V+1][A],Q=_[V+1][A+1],H=_[V][A+1],K=g[Q*3+0],$=g[Q*3+2];m.push(W,X,H),(K!=0||$!=0)&&m.push(X,Q,H)}l<Math.PI*2&&(F(-1,_[0],a),F(1,_[_.length-1],a+l)),this.setIndex(m),this.setAttribute("position",new Ee.Float32BufferAttribute(g,3)),this.setAttribute("normal",new Ee.Float32BufferAttribute(x,3)),this.setAttribute("uv",new Ee.Float32BufferAttribute(y,2));function Y(V,A,W,X,Q,H,K,$){for(let re=0;re<p+1;re++){let le=re/p,ne=K<0?le:1-le;$&&(ne-=1),ne*=X;let fe=new Ee.Vector2(Math.sin(ne),Math.cos(ne)*K),Ve=fe.clone().multiplyScalar(Q).add(H);Jr(Ve,W,v),g.push(v.x,v.y,v.z),Jr(fe,W,S),x.push(S.x,S.y,S.z),y.push(A,.5+v.y/r),V.push(b++)}}function j(V,A,W,X,Q){let H=new Ee.Vector3,K=new Ee.Vector2,$=[W,X];Q<0&&$.reverse();for(let re of $)K.set(re,C*Q),Jr(K,A,H),g.push(H.x,H.y,H.z),x.push(0,Q,0),y.push(.5,.5),V.push(b++)}function F(V,A,W){let X=new Ee.Vector2(Math.sin(W),Math.cos(W)),Q=new Ee.Vector2(-Math.cos(W),Math.sin(W)),H=new Ee.Vector3,K=V<0?(le,ne,fe)=>m.push(le,ne,fe):(le,ne,fe)=>m.push(le,fe,ne),$=new Ee.Vector2((t+e+k+q)/4,0);Jr($,X,H),g.push(H.x,H.y,H.z),x.push(Q.x,0,Q.y),y.push(.5,.5);let re=b++;for(let le of A){let ne=g.slice(le*3,le*3+3);g.push(...ne),x.push(Q.x,0,Q.y);let fe=y.slice(le*2,le*2+2);y.push(...fe),b++}for(let le=re+1;le<b-1;le++)K(re,le,le+1);K(re,b-1,re+1)}}};var iu=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,radialSegments:32,heightSegments:8,openEnded:!1,thetaStart:0,thetaLength:360,cornerRadiusTop:0,cornerRadiusBottom:0,cornerSegments:8},n.parameters);return{parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??e.width)})}}static build(n){let{width:t,depth:e,height:r,radialSegments:o,heightSegments:i,openEnded:s,thetaStart:a,thetaLength:l,cornerRadiusTop:c,cornerRadiusBottom:h,cornerSegments:p}=n.parameters,u;return c>0||h>0||l<360?u=new en(0,t/2,r,o,i,s,a,l*Math.PI/180,c,h,p,0,!0):u=new ou.ConeBufferGeometry(t/2,r,o,i,s),u.scale(1,1,e/t),Object.assign(u,{userData:{...n,type:"ConeGeometry"}})}};var Pt=require("three"),nu=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,widthSegments:1,heightSegments:1,depthSegments:1,cornerRadius:0,cornerSegments:8},n.parameters);return{parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??e.width)})}}static build(n){let{width:t,height:e,depth:r,widthSegments:o,heightSegments:i,depthSegments:s,cornerRadius:a,cornerSegments:l}=n.parameters,c;return a==0?c=new Pt.BoxBufferGeometry(t,e,r,o,i,s):c=new gl(t,e,r,o,i,s,a,l),Object.assign(c,{userData:{...n,type:"CubeGeometry"}})}},fl=Math.PI/2,gl=class extends Pt.BufferGeometry{constructor(t=1,e=1,r=1,o=1,i=1,s=1,a=0,l=4){super(),this.type="BoxBufferGeometry";let c=this;o=Math.floor(o),i=Math.floor(i),s=Math.floor(s),l=Math.floor(l),a=Math.min(a,t/2,e/2,r/2);let h=[],p=[],u=[],d=[],m=0,g=0;x("z","y","x",-1,-1,r,e,t,s,i,0),x("z","y","x",1,-1,r,e,-t,s,i,1),x("x","z","y",1,1,t,r,e,o,s,2),x("x","z","y",1,-1,t,r,-e,o,s,3),x("x","y","z",1,-1,t,e,r,o,i,4),x("x","y","z",-1,-1,t,e,-r,o,i,5),a>0&&(y("z","y","x",-1,-1,1,r,e,t,s,0),y("z","y","x",1,-1,-1,r,e,t,s,1),y("z","y","x",-1,1,-1,r,e,t,s,1),y("z","y","x",1,1,1,r,e,t,s,0),y("x","y","z",-1,-1,-1,t,e,r,o,0),y("x","y","z",1,-1,1,t,e,r,o,1),y("x","y","z",-1,1,1,t,e,r,o,0),y("x","y","z",1,1,-1,t,e,r,o,1),y("y","x","z",-1,-1,1,e,t,r,i,0),y("y","x","z",1,-1,-1,e,t,r,i,1),y("y","x","z",1,1,1,e,t,r,i,1),y("y","x","z",-1,1,-1,e,t,r,i,0),b(1,1,1),b(-1,1,1),b(1,-1,1),b(-1,-1,1),b(1,1,-1),b(-1,1,-1),b(1,-1,-1),b(-1,-1,-1)),this.setIndex(h),this.setAttribute("position",new Pt.Float32BufferAttribute(p,3)),this.setAttribute("normal",new Pt.Float32BufferAttribute(u,3)),this.setAttribute("uv",new Pt.Float32BufferAttribute(d,2));function x(C,S,v,z,w,f,D,L,P,M,I){let k=(f-2*a)/P,q=(D-2*a)/M,ie=f/2-a,he=D/2-a,se=L/2,J=P+1,U=M+1,R=0,E=0,B=new Pt.Vector3;for(let O=0;O<U;O++){let _=O*q-he;for(let Y=0;Y<J;Y++){let j=Y*k-ie;B[C]=j*z,B[S]=_*w,B[v]=se,p.push(B.x,B.y,B.z),B[C]=0,B[S]=0,B[v]=L>0?1:-1,u.push(B.x,B.y,B.z),d.push(Y/P),d.push(1-O/M),R+=1}}for(let O=0;O<M;O++)for(let _=0;_<P;_++){let Y=m+_+J*O,j=m+_+J*(O+1),F=m+(_+1)+J*(O+1),V=m+(_+1)+J*O;h.push(Y,j,V),h.push(j,F,V),E+=6}c.addGroup(g,E,I),g+=E,m+=R}function y(C,S,v,z,w,f,D,L,P,M,I){let k=(D-2*a)/M,q=D/2-a,ie=L/2-a,he=P/2,se=M+1,J=0,U=0,R=new Pt.Vector3,E=new Pt.Vector3;for(let B=0;B<l+1;B++){let O=B/l*fl,_=Math.sin(O)*a,Y=(1-Math.cos(O))*a,j=Math.sin(O),F=Math.cos(O);R[S]=(ie+_)*w,R[v]=(he-Y)*f,E[C]=0,E[S]=j*Math.sign(R[S]),E[v]=F*Math.sign(R[v]);for(let V=0;V<se;V++){let A=V*k-q;R[C]=A*z,p.push(R.x,R.y,R.z),u.push(E.x,E.y,E.z),d.push(V/M),d.push(0),J+=1}}for(let B=0;B<l;B++)for(let O=0;O<M;O++){let _=m+O+se*B,Y=m+O+se*(B+1),j=m+(O+1)+se*(B+1),F=m+(O+1)+se*B;h.push(_,Y,F),h.push(Y,j,F),U+=6}c.addGroup(g,U,I),g+=U,m+=J}function b(C,S,v){let z=new Pt.Vector3,w=new Pt.Vector3(t/2,e/2,r/2);w.subScalar(a);let f=[],D=C*S*v>0?(P,M,I)=>h.push(P,M,I):(P,M,I)=>h.push(P,I,M);for(let P=0;P<=l;P++){let M=[],I=fl*(1-P/l),k=Math.cos(I),q=Math.sin(I),ie=0;for(let he=0;he<=P;he++){let se=Math.cos(ie),J=Math.sin(ie);z.x=k*se,z.y=q,z.z=k*J;let U=w.clone().addScaledVector(z,a);p.push(C*U.x,S*U.y,v*U.z),u.push(C*z.x,S*z.y,v*z.z),d.push(0,0),M.push(m++),ie+=fl/P}f.push(M)}let L=f.length-1;for(let P=0;P<L;P++){let M=f[P],I=f[P+1],k=M.length-1;D(M[0],I[1],I[0]);for(let q=1;q<=k;q++)D(M[q-1],M[q],I[q]),D(M[q],I[q+1],I[q])}}}};var je=require("three"),Yr=class extends je.BufferGeometry{constructor(t=[],e=[],r="",o=1,i=.2,s=4){super(),this.type="PolyhedronGeometryRound";let a=[],l=[],c=[];h(),p(),this.setAttribute("position",new je.Float32BufferAttribute(a,3)),this.setAttribute("normal",new je.Float32BufferAttribute(c,3)),this.setAttribute("uv",new je.Float32BufferAttribute(l,2));return;function h(){i=Math.min(1-1e-5,i),i==0&&(s=0);let d={IcosahedronGeometry:5,DodecahedronGeometry:3,HexahedronGeometry:3,OctahedronGeometry:4,TetrahedronGeometry:3}[r],m=new je.Vector3,g=m.clone(),x=new je.Triangle,y=i*o,b=o-y,C=s+1,S=new je.Vector3,v=(J,U)=>S.subVectors(J,U).normalize(),z=(J,U)=>Array(J).fill(void 0).map(U),w=z(t.length/3,(J,U)=>new je.Vector3().fromArray(t,U*3).setLength(o)),f=[],D=1e6;for(let J=0;J<w.length;J++){let U=w[J],R=[],E,B,O,_=1e10,Y=-1;for(;(Y=e.indexOf(J,Y+1))!=-1;){let A=Y-Y%3;E=e[A+(Y+1)%3],B=e[A+(Y+2)%3],O=U.distanceToSquared(w[E]),_=Math.min(_,O),R.push([E,B,O])}_+=1e-6;let j=[],F=0,V=R.length;for(let A=0;A<V;A++){[E,B,O]=R[F];let W=f[E]?.includes(J)==!0;O<=_&&j.push(E+ +W*D),F=R.findIndex(X=>X[0]==B)}f.push(j)}let L=[];{let J=0,U=0,R,E,B=d==3;for(let O=0;O<=s;O++){R=O*(O+1)/2,E=(O+1)*(O+2)/2;for(let _=0;_<s-O;_++)[J,U]=[R+_+O+2,E+_+O+3],L.push(R,E,...B?[U,R]:[J,E],U,J),[R,E]=[J,U];L.push(R,E,R+s+2)}}let P=m.clone(),M=m.clone(),I=m.clone(),k=m.clone(),q=m.clone(),ie=[],he=z(w.length,()=>z(d,()=>m.clone()));for(let J=0;J<w.length;J++){m.copy(w[J]).normalize(),P.copy(m).multiplyScalar(b);let U=f[J];for(let j=0;j<U.length;j++){let F=U[j],V=U[(j+1)%d];x.setFromPointsAndIndices(w,J,F%D,V%D),x.b.sub(x.a).setLength(1e10).add(x.a),x.c.sub(x.a).setLength(1e10).add(x.a),x.closestPointToPoint(P,he[J][j])}let R=[],E=[],B=[],O=new je.Vector3;s==0&&[...he[J]].reduce((j,F)=>j.add(F),O).multiplyScalar(1/d);for(let j=0;j<d;j++){let F=[],V=(j-1+d)%d,A=he[J][V],W=he[J][j];m.copy(A).sub(P),g.copy(W).sub(P);let X=P.angleTo(m),Q=m.angleTo(g),H=Math.cos(X)*y;s==0?M.copy(O):M.copy(P).setLength(b+H),E.push(H);let K=[M,A,W];for(let $=0;$<2;$++){let re=K[$],le=K[$+1];k.subVectors(re,P),q.subVectors(le,P),I.crossVectors(k,q).normalize();for(let ne=0;ne<C;ne++){let fe=[X,Q][$]*ne/C;m.copy(k).applyAxisAngle(I,fe).add(P),R.push(m.clone()),$&&(v(m,P),F.push([ne==0?re:m.clone(),S.clone()]))}$&&(v(le,P),F.push([le,S.clone()]))}B.push(F)}ie.push(B);let _=2*C,Y=2;for(let j=0;j<d;j++){let F=_*j,V=_*((j+1)%d),A=[R[F]];for(let X=1;X<C;X++){k=R[F+X],q=R[V+X],A.push(k);for(let Q=1,H=X-Y+1;Q<=H;Q++)m.lerpVectors(k,q,Q/(H+1)),m.sub(P).setLength(E[j]).add(P),A.push(m.clone());A.push(q)}for(let X=0;X<C;X++)A.push(R[X+C+F]);A.push(R[V+C]);let W=L.map(X=>A[X]);a.push(...W.map(X=>[X.x,X.y,X.z]).flat()),c.push(...W.map(X=>(v(X,P),[S.x,S.y,S.z])).flat())}}let se=[];for(let J=0;J<f.length;J++)for(let U=0;U<d;U++){let R=f[J][U];if(R<D){let E=f[R].findIndex(_=>_%D==J),B=ie[J][U],O=ie[R][E];for(let _=0;_<C;_++){let Y=B[_],j=O[C-_],F=B[_+1],V=O[C-(_+1)];[Y,j,F,F,j,V].forEach(A=>{a.push(A[0].x,A[0].y,A[0].z),c.push(A[1].x,A[1].y,A[1].z)})}se.push(B[0][0],O[C][0],B[C][0],O[0][0])}}for(;se.length;){let J,U,R,E;[J,U]=se.splice(0,2);let B=[J];for(;J!=U;)B.push(U),R=se.indexOf(U),E=R%2,U=se.splice(R-E,2)[1-E];S.subVectors(B[0],B[1]).cross(m.subVectors(B[0],B[2])).normalize();let O=S.dot(B[0])<0;O&&S.negate();for(let _=1;_<=B.length-2;_++)[B[_+ +O],B[_+1-+O],B[0]].forEach(Y=>{a.push(Y.x,Y.y,Y.z),c.push(S.x,S.y,S.z)})}}function p(){let u=new je.Vector3;for(let w=0;w<a.length;w+=3){u.x=a[w+0],u.y=a[w+1],u.z=a[w+2];let f=v(u)/2/Math.PI+.5,D=z(u)/Math.PI+.5;l.push(f,1-D)}let d=new je.Vector3,m=new je.Vector3,g=new je.Vector3,x=new je.Vector3,y=new je.Vector2,b=new je.Vector2,C=new je.Vector2,S=(w,f,D,L)=>{L<0&&w.x===1&&(l[f]=w.x-1),D.x===0&&D.z===0&&(l[f]=L/2/Math.PI+.5)};for(let w=0,f=0;w<a.length;w+=9,f+=6){d.set(a[w+0],a[w+1],a[w+2]),m.set(a[w+3],a[w+4],a[w+5]),g.set(a[w+6],a[w+7],a[w+8]),y.set(l[f+0],l[f+1]),b.set(l[f+2],l[f+3]),C.set(l[f+4],l[f+5]),x.copy(d).add(m).add(g).divideScalar(3);let D=v(x);S(y,f+0,d,D),S(b,f+2,m,D),S(C,f+4,g,D)}for(let w=0;w<l.length;w+=6){let f=l[w+0],D=l[w+2],L=l[w+4],P=Math.max(f,D,L),M=Math.min(f,D,L);P>.9&&M<.1&&(f<.2&&(l[w+0]+=1),D<.2&&(l[w+2]+=1),L<.2&&(l[w+4]+=1))}function v(w){return Math.atan2(w.z,-w.x)}function z(w){return Math.atan2(-w.y,Math.sqrt(w.x*w.x+w.z*w.z))}}}static fromJSON(t){return new Yr(t.vertices,t.indices,t.radius,t.corner,t.cornerSides)}};var su=require("three"),au=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,detail:0,corner:0,cornerSides:4},n.parameters);return{parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??e.width)})}}static build(n){let{width:t,height:e,depth:r,detail:o,corner:i,cornerSides:s}=n.parameters,a=o===0&&i!==0?new tn(t*.5,i,s):new su.DodecahedronBufferGeometry(t*.5,o);return a.scale(1,e/t,r/t),Object.assign(a,{userData:{...n,type:"DodecahedronGeometry"}})}},tn=class extends Yr{constructor(t=1,e=.2,r=4){let o=(1+Math.sqrt(5))/2,i=1/o,s=[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-i,-o,0,-i,o,0,i,-o,0,i,o,-i,-o,0,-i,o,0,i,-o,0,i,o,0,-o,0,-i,o,0,-i,-o,0,i,o,0,i],a=[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],l="DodecahedronGeometry";super(s,a,l,t,e,r),this.type=l}static fromJSON(t){return new tn(t.radius,t.corner,t.cornerSides)}};var Se=require("three");var ge=require("three"),rn=1e-12,ei=class{constructor(t){this.position=new ge.Vector2;this.startPosition=new ge.Vector2;this.uuid=ge.MathUtils.generateUUID();this.position=t.clone()}start(){this.reset()}reset(){this.startPosition.copy(this.position)}applyOffset(t){this.position.copy(this.startPosition).add(t)}copy(t){return this.position.copy(t.position),this.startPosition.copy(t.startPosition),this}clone(){return new ei(this.position).copy(this)}toJSON(){return[this.position.x,this.position.y]}},ti=class extends ei{constructor(e){super(e.position);this.parent=e}copy(e){return super.copy(e),this}clone(){return new ti(this.parent).copy(this)}},Xt=class extends ei{constructor(e,r){super(r);this.controls=[];this.roundness=0;this.areControlsDirectionsMirrored=!0;this.uuid=e,this.controls.push(new ti(this),new ti(this))}static create(e,r){let o=new Xt(e,new ge.Vector2(...r.position));return o.controls[0].position.set(...r.controlPrevious.position),o.controls[1].position.set(...r.controlNext.position),o.roundness=r.roundness,o.areControlsDirectionsMirrored=r.areControlsDirectionsMirrored,o}getOppositeControl(e){let r=this.controls.indexOf(e);return r===0?this.controls[1]:r===1?this.controls[0]:null}applyOffsetToControls(e,r=1){for(let o=0,i=this.controls.length;o<i;o++){let s=this.controls[o];this.position.distanceTo(s.position)<=r?s.position.copy(this.position):s.applyOffset(e)}}controlsMoved(){return!(this.position.equals(this.controls[0].position)&&this.position.equals(this.controls[1].position))}copy(e){return super.copy(e),this.controls[0].copy(e.controls[0]),this.controls[1].copy(e.controls[1]),this.roundness=e.roundness,this.uuid=e.uuid,this}clone(){return new Xt(this.uuid,this.position).copy(this)}toJSON(){return super.toJSON().concat(this.controls[0].toJSON(),this.controls[1].toJSON(),[this.roundness])}computeTangents(){let e=this.curveBefore?.getTangentAt(1),r=this.curveAfter?.getTangentAt(0);return[e,r]}computeNormals(e=new ge.Vector2,r=new ge.Vector2){let[o,i]=this.computeTangents();return o&&i&&(lu(o,e),lu(i,r)),[e,r]}computeTangent(e=new ge.Vector2){let[r,o]=this.computeTangents();return r&&o&&e.copy(r).add(o).normalize(),e}computeNormal(e=new ge.Vector2){let[r,o]=this.computeNormals();return e.copy(r).add(o).normalize(),e}};function lu(n,t=new ge.Vector2){let e=n.length();return t.set(-n.y/e,n.x/e)}var xl=n=>n,ri=new ge.Vector2,Ws=new ge.Vector2,Sb=new ge.Vector2,wb=new ge.Vector2,Nb=new ge.Vector2,Lb=new ge.Vector2,hu=new ge.Vector3,pu=new ge.Vector3;function uu(n){let t=new ge.Vector2;t.addVectors(n.v0,ri.subVectors(n.v1,n.v0).multiplyScalar(2/3));let e=new ge.Vector2;return e.addVectors(n.v2,Ws.subVectors(n.v1,n.v2).multiplyScalar(2/3)),new ge.CubicBezierCurve(n.v0,t,e,n.v2)}function on(n,t,e=Number.EPSILON){return Math.abs(n-t)<e}function Cb(n,t,e=Number.EPSILON){return n.distanceTo(t)<e}function Tb(n,t,e=Number.EPSILON){return n.distanceTo(t)<e}function bl(n,t,e){let r=Math.sqrt(Math.pow(t.x-n.x,2)+Math.pow(t.y-n.y,2)),o=Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)),i=Math.sqrt(Math.pow(e.x-n.x,2)+Math.pow(e.y-n.y,2));return Math.acos((o*o+r*r-i*i)/(2*o*r))}function du(n,t,e){return cu(n,t)&&cu(t,e)&&yl(n.position,t.position,e.position)}function yl(n,t,e){return ri.copy(t).sub(n).cross(Ws.copy(e).sub(n))===0}function mu(n,t,e,r,o){let i=Math.sqrt(Math.pow(t.x-n.x,2)+Math.pow(t.y-n.y,2)),s=(n.y+t.y)/2,a=(n.x+t.x)/2,l=Math.sqrt(Math.pow(e,2)-Math.pow(i/2,2))*(n.y-t.y)/i,c=Math.sqrt(Math.pow(e,2)-Math.pow(i/2,2))*(t.x-n.x)/i;return r.set(a+l,s+c),o.set(a-l,s-c),[r,o]}function fu(n,t,e){let r=n.distanceTo(e),o=t.distanceTo(e);return r<o?t:n}function gu(n,t,e,r,o,i){let s=t.x-n.x,a=t.y-n.y,l=e.x-n.x,c=e.y-n.y,h=Math.sqrt((s+l)*(s+l)+(a+c)*(a+c)),p;return bl(t,n,e)>Math.PI&&(h*=-1),on(c,a)?p=(a+c)*(r/h-.5)*8/3/(s-l):p=(s+l)*(r/h-.5)*8/3/(c-a),o.set(t.x-p*a,t.y+p*s),i.set(e.x+p*c,e.y-p*l),[o,i]}function vl(n,t){return n.position.equals(n.controls[1].position)&&t.position.equals(t.controls[0].position)}function cu(n,t){return yl(n.position,n.controls[1].position,t.position)&&yl(n.position,t.controls[0].position,t.position)}function yu(n,t,e,r,o=.5){let i=ri.subVectors(t,n).multiplyScalar(o).add(n),s=Ws.subVectors(e,t).multiplyScalar(o).add(t),a=Sb.subVectors(r,e).multiplyScalar(o).add(e),l=i,c=wb.subVectors(s,i).multiplyScalar(o).add(i),h=Nb.subVectors(a,s).multiplyScalar(o).add(s),p=a,u=Lb.subVectors(h,c).multiplyScalar(o).add(c);return[n.x,n.y,l.x,l.y,c.x,c.y,u.x,u.y,h.x,h.y,p.x,p.y,r.x,r.y]}function xu(n,t,e=12,r=!0){let o=pu.set(0,0,0),i,s=0,a=[];for(let l=0;l<t.length;l++){let c=xl(t[l]),h=ri,p=Kr(c,e);a.push(p);for(let u=0;u<=p;u++)if(c instanceof ge.CubicBezierCurve||c instanceof ge.QuadraticBezierCurve||c instanceof ge.LineCurve){if(c.getPoint(u/p,h),o.set(h.x,h.y,0),i!==void 0&&Tb(i,o))continue;i===void 0&&(i=hu),i.copy(o),n.setXYZ(s,o.x,o.y,o.z),s++}}return r&&s>1&&!(n.getX(s-1)===n.getX(0)&&n.getY(s-1)===n.getY(0)&&n.getZ(s-1)===n.getZ(0))&&(n.setXYZ(s,n.getX(0),n.getY(0),n.getZ(0)),s++),n}function bu(n,t,e,r=12,o=!0){let i=pu.set(0,0,0),s=0,a=[];for(let l=0;l<t.length;l++){if(e[l]===!1)continue;let c,h=xl(t[l]),p=ri,u=Kr(h,r);a.push(u);for(let d=0;d<=u;d++)if(h instanceof ge.CubicBezierCurve||h instanceof ge.QuadraticBezierCurve||h instanceof ge.LineCurve){if(h.getPoint(d/u,p),i.set(p.x,p.y,0),c?.equals(i))continue;c===void 0?c=hu:(n.setXYZ(s,c.x,c.y,c.z),s++,n.setXYZ(s,i.x,i.y,i.z),s++),c.copy(i)}}return o&&s>1&&!(n.getX(s-1)===n.getX(0)&&n.getY(s-1)===n.getY(0)&&n.getZ(s-1)===n.getZ(0))&&(n.setXYZ(s,n.getX(0),n.getY(0),n.getZ(0)),s++),a}function Sl(n,t=12,e=!1){let r=[];for(let o=0,i=n.length;o<i;o++){let s=n[o],a=0;if(e&&s.roundedCurveCorner!==void 0){let l=Kr(s.roundedCurveCorner,t)*.5;o>0&&(r[o-1]+=l),a+=l}s.curveAfter!==void 0&&(a+=Kr(s.curveAfter,t)),r.push(a)}return n.length>0&&e&&n[0].roundedCurveCorner!==void 0&&(r[n.length-1]+=Kr(n[0].roundedCurveCorner,t)*.5),r}function Kr(n,t=12){return n&&n instanceof ge.EllipseCurve?t*2:n&&(n instanceof ge.LineCurve||n instanceof ge.LineCurve3)?1:n&&n instanceof ge.SplineCurve?t*n.points.length:t}function vu(n,t,e=12,r=!0){let o,i=0;for(let s=0;s<t.length;s++){let a=xl(t[s]),l=Kr(a,e),c=ri;for(let h=0;h<=l;h++)if(a instanceof ge.CubicBezierCurve||a instanceof ge.QuadraticBezierCurve||a instanceof ge.LineCurve){if(a.getPoint(h/l,c),o!==void 0&&Cb(o,c,rn))continue;o===void 0&&(o=Ws),o.copy(c),n.push(c.x,c.y),i++}}return on(n[0],n[n.length-2],rn)&&on(n[1],n[n.length-1],rn)&&(n.pop(),n.pop()),r&&i>1&&!(on(n[i-1],n[1],rn)&&on(n[i-2],n[0],rn))&&(n.push(n[0],n[1]),i++),n}var wl=new Se.Vector2,Mb=new Se.Vector2,Pb=new Se.Vector2,Ib=new Se.Vector2,Ob=new Se.Vector2,Ab=new Se.Vector2,Ne=class extends Se.Shape{constructor(e=100,r=100){super();this.points=[];this.shapeHoles=[];this.eventDispatcher=new Se.EventDispatcher;this.plane=new Se.Plane(new Se.Vector3(0,0,-1));this.subdivision=0;this.controlSnapDistance=4;this.pointIDs=0;this.isMesh2D=!1;this._roundness=0;this.isClosed=!1;this.useCubicForRoundedCorners=!0;this.uuid=Se.MathUtils.generateUUID();this.needsUpdate=!1;this.roundedCurves=[];this._width=e,this._height=r}static createFromState(e,r,o){let i=new Ne;return i.isClosed=e.isClosed,i.points=e.points.map(s=>Xt.create(s.id,s.data)),typeof e.roundness=="number"&&(i.roundness=e.roundness),i.shapeHoles=e.shapeHoles.map(s=>Ne.createFromState(s)),r!==void 0&&o!==void 0&&i.applySize(r,o),i.update(),i}get width(){return this._width}get height(){return this._height}get roundness(){return this._roundness}set roundness(e){if(this._roundness!==e){this._roundness=e;for(let r=0,o=this.points.length;r<o;r++)this.points[r].roundness=e;this.needsUpdate=!0}}getPointsIndexesByIds(e){return e.map(r=>this.getPointIndexById(r)).filter(r=>r>=0)}getPointIndexById(e){let r=this.points.length,o=this.points.findIndex(i=>i.uuid===e);if(o<0){let i=r;for(let s=0,a=this.shapeHoles.length;s<a;s++){let l=this.shapeHoles[s],c=l.points.length-1,h=l.getPointIndexById(e);if(h<0)i+=c;else return h+i}}return o}getLineIndexById(e){return this.getPointIndexById(e)}getBezierPoint(e){if(e<=this.points.length-1)return this.points[e];if(this.shapeHoles.length>0)for(let r=0,o=this.shapeHoles.length;r<o;r++){let i=this.shapeHoles[r],s=e-this.points.length;if(s<=i.points.length-1)return i.points[s]}throw new Error("This shape does not have a point for this index: "+e)}getBezierPointIndex(e){let r=this.points.indexOf(e);if(r>=0)return r;if(r=this.points.length,this.shapeHoles.length>0)for(let o=0,i=this.shapeHoles.length;o<i;o++){let s=this.shapeHoles[o],a=s.points.indexOf(e);if(a>=0)return r+a;r+=s.points.length}return-1}getAllPoints(){let e=[].concat(...this.shapeHoles.map(r=>r.points));return[...this.points,...e]}applySize(e,r){e===0&&(e=.001),r===0&&(r=.001),this._width=e,this._height=r}applyScale(e,r){let o=wl.set(e,r);for(let i=0,s=this.points.length;i<s;i++){let a=this.points[i];a.position.multiply(o),a.controls[0].position.multiply(o),a.controls[1].position.multiply(o)}for(let i=0,s=this.shapeHoles.length;i<s;i++)this.shapeHoles[i].applyScale(e,r);this._update(!1)}createPoint(e,r=0,o=Se.MathUtils.generateUUID()){let i;e instanceof Se.Vector2?i=e:i=new Se.Vector2(e,r);let s=new Xt(o,i);return s.roundness=this.roundness,s}addPoint(e){this.points.push(e),this.needsUpdate=!0}addPointAt(e,r){this.points.splice(r,0,e),this.needsUpdate=!0}getPointByUuid(e){for(let r=0,o=this.points.length;r<o;r++){let i=this.points[r];if(i.uuid===e)return i}for(let r=0,o=this.shapeHoles.length;r<o;r++){let s=this.shapeHoles[r].getPointByUuid(e);if(s)return s}}getFirstPoint(){return this.points[0]}getLastPoint(){return this.points[this.points.length-1]}removePoint(e){let r=this.points.indexOf(e);r>=0&&this.points.splice(r,1),this.needsUpdate=!0}removePointById(e){let r=this.points.find(o=>o.uuid===e);r&&this.removePoint(r)}update(e=!0){for(let r=0,o=this.shapeHoles.length;r<o;r++)this.shapeHoles[r].update(!1);this._update(e)}extractShapePointsToBuffer(e,r=12,o=!1){this.subdivision=r,this.curveDivisions===void 0&&this.computeCurveDivisions(r);let i=o?this.roundedCurveDivisions:this.curveDivisions;return xu(e,o?this.roundedCurves:this.curves,r,this.autoClose),i.reduce((s,a)=>s+a,0)+1}computeCurveDivisions(e=12){return this.curveDivisions=Sl(this.points,e,!1),this.roundedCurveDivisions=Sl(this.points,e,!0),this.curveDivisions}extractFilteredShapePointsToBuffer(e,r,o=12){return bu(e,this.curves,r,o,this.autoClose).reduce((s,a)=>s+a,0)*2}extractShapePointsToFlatArray(e,r=12){return this.subdivision=r,this.curveDivisions===void 0&&this.computeCurveDivisions(r),vu(e,this.roundedCurves,r,this.autoClose)}getCurveIndexFromVertexId(e,r=!1){let o=0;this.curveDivisions===void 0&&this.computeCurveDivisions(this.subdivision);let i=r?this.roundedCurveDivisions:this.curveDivisions,s=0;r&&this.points[0].roundedCurveCorner!==void 0&&(s=Kr(this.points[0].roundedCurveCorner,this.subdivision)*.5);let a=e-s;a<0&&(a+=i.reduce((l,c)=>l+c,0));for(let l=0,c=i.length;l<c;l++){let h=i[l];if(a<o+h)return[l,(a-o+1)/h];o+=h}return[0,1]}getCurveT(e,r,o){let i=this.points[e],s=this.points[e>=this.points.length-1?0:e+1],a=this.curveDivisions,l=a[e];if(vl(i,s)){let p=i.position.distanceTo(s.position);return i.position.distanceTo(wl.set(o.x,o.y))/p}let c=0;for(let p=0;p<e;p++)c+=a[p];return(r-c)/l}dispose(){this.eventDispatcher=null}_applyCurveForPoint(e,r){vl(r,e)?this.lineTo(e.position.x,e.position.y):this.bezierCurveTo(r.controls[1].position.x,r.controls[1].position.y,e.controls[0].position.x,e.controls[0].position.y,e.position.x,e.position.y);let o=this.curves[this.curves.length-1];e.curveBefore=o,r.curveAfter=o;let i=o.clone();e.roundedCurveBefore=i,r.roundedCurveAfter=i,e.roundedCurveCorner=void 0,this.roundedCurves.push(i)}_update(e=!0){if(this.curves=[],this.roundedCurves=[],!this.points.length)return;for(let o=0,i=this.points.length;o<i;o++){let s=this.points[o];if(o===0)this.moveTo(s.position.x,s.position.y);else{let a=this.points[o-1];this._applyCurveForPoint(s,a)}}let r=this.getLastPoint();if(r?.curveAfter&&(r.curveAfter=void 0),this.isClosed){let o=this.points[0],i=this.points[this.points.length-1];this._applyCurveForPoint(o,i)}if(this.points.length>2){let o=0;for(let i=0,s=this.points.length;i<s;i++){let a=this.points[i],l=this.points[i-1]??this.points[this.points.length-1],c=this.points[i+1]??this.points[0],h=a.roundness,p=l&&c&&du(l,a,c);if(!a.controlsMoved()&&h>0&&!p){let u=a.curveBefore,d=a.curveAfter;if(u===void 0||d===void 0)continue;let m=a.roundedCurveBefore,g=a.roundedCurveAfter,x=u.getLength(),y=d.getLength(),b=Math.min(h,x*.499),C=Math.min(h,y*.499),S=Math.min(b,C),v=1-S/x,z=S/y,w=u.getPointAt(v,wl),f=d.getPointAt(z,Mb);this._subSplitCurve(u,m,v,w,void 0),this._subSplitCurve(d,g,z,void 0,f);let D;if(this.useCubicForRoundedCorners){let L=bl(w,a.position,f)/2,P=Math.tan(L)*w.distanceTo(a.position),[M,I]=mu(w,f,P,Pb,Ib),k=fu(M,I,a.position),[q,ie]=gu(k,w,f,P,Ob,Ab);D=new Se.CubicBezierCurve(w.clone(),q.clone(),ie.clone(),f.clone())}else D=new Se.QuadraticBezierCurve(w.clone(),a.position.clone(),f.clone());a.roundedCurveCorner=D,this.roundedCurves.splice(i+o,0,D),o++}}}e&&this.eventDispatcher?.dispatchEvent({type:"update"})}_subSplitCurve(e,r,o,i,s){if(e instanceof Se.LineCurve)i!==void 0&&r.v2.copy(i),s!==void 0&&r.v1.copy(s);else{let a=e,l=r,c=a.getUtoTmapping(o,0),h=yu(a.v0,a.v1,a.v2,a.v3,c);return i!==void 0&&(l.v0.set(h[0],h[1]),l.v1.set(h[2],h[3]),l.v2.set(h[4],h[5]),l.v3.set(h[6],h[7])),s!==void 0&&(l.v0.set(h[6],h[7]),l.v1.set(h[8],h[9]),l.v2.set(h[10],h[11]),l.v3.set(h[12],h[13])),l}return r}clone(){let e=new Ne(this._width,this._height);return e.points=this.points.map(r=>r.clone()),e.isClosed=this.isClosed,e.roundness=this.roundness,e.isMesh2D=this.isMesh2D,e.shapeHoles=this.shapeHoles.map(r=>r.clone()),e}toJSON(){return{points:this.points.reduce((e,r)=>e.concat(r.toJSON()),[]),shapeHoles:this.shapeHoles.map(e=>e.toJSON()),isClosed:this.isClosed,roundness:this.roundness}}fromJSON(e){this.points=[],this.pointIDs=0;let r=e.points.length/7;for(let o=0;o<r;o++){let i=o*7,s=e.points[i+0],a=e.points[i+1],l=e.points[i+2],c=e.points[i+3],h=e.points[i+4],p=e.points[i+5],u=e.points[i+6],d=new Xt(Se.MathUtils.generateUUID(),new Se.Vector2(s,a));d.controls[0].position.set(l,c),d.controls[1].position.set(h,p),d.roundness=u,this.points.push(d)}return this.shapeHoles=e.shapeHoles?.length?e.shapeHoles.map(o=>{let i=new Ne;return i.fromJSON(o),i}):[],this.isClosed=e.isClosed,this._roundness=e.roundness,this._update(),this}fromShape(e){let r=(i,s)=>{s instanceof Se.CubicBezierCurve&&s.v3.equals(i.position)&&i.controls[0].position.copy(s.v2)},o=i=>{let s=[],a,l;for(a=0,l=i.length;a<l;a++)i[a]instanceof Se.QuadraticBezierCurve&&(i[a]=uu(i[a]));for(a=0,l=i.length;a<l;a++){let p=i[a],u=a>0?i[a-1]:null,d;p instanceof Se.CubicBezierCurve?(d=this.createPoint(p.v0),d.controls[1].position.copy(p.v1)):p instanceof Se.LineCurve&&(d=this.createPoint(p.v1)),d!==void 0&&(u!==null&&r(d,u),s.push(d))}let c=i[i.length-1],h=!1;return c instanceof Se.CubicBezierCurve?c.v3.equals(s[0].position)&&(s[0].controls[0].position.copy(c.v2),h=!0):c instanceof Se.LineCurve&&c.v2.equals(s[0].position)&&(h=!0),this.isClosed=h,s};return this.points=o(e.curves),e instanceof Se.Shape&&(this.shapeHoles=e.holes.map(i=>{let s=new Ne;return s.fromShape(i),s})),this.update(),this}};var Ll=Math.PI*2;function Nl({x:n,y:t},e,r,o,i){return{x:n*e+o,y:t*r+i}}function Db(n,t){let e=t===1.5707963267948966?.551915024494:t===-1.5707963267948966?-.551915024494:1.3333333333333333*Math.tan(t/4),r=Math.cos(n),o=Math.sin(n),i=Math.cos(n+t),s=Math.sin(n+t);return[{x:r-o*e,y:o+r*e},{x:i+s*e,y:s-i*e},{x:i,y:s}]}function Su(n,t,e,r){let o=n*r-t*e<0?-1:1,i=Math.min(1,Math.max(-1,n*e+t*r));return o*Math.acos(i)}function Bb(n,t,e,r,o,i,s,a,l,c){let h=Math.pow(o,2),p=Math.pow(i,2),u=Math.pow(s,2),d=Math.pow(a,2),m=h*p-h*d-p*u;m<0&&(m=0),m/=h*d+p*u,m=Math.sqrt(m)*(l===c?-1:1);let g=m*o/i*a,x=m*-i/o*s,y=g+(n+e)/2,b=x+(t+r)/2,C=(s-g)/o,S=(a-x)/i,v=(-s-g)/o,z=(-a-x)/i,w=Su(1,0,C,S),f=Su(C,S,v,z);return!c&&f>0&&(f-=Ll),c&&f<0&&(f+=Ll),{centerx:y,centery:b,ang1:w,ang2:f}}function wu({px:n,py:t,cx:e,cy:r,rx:o,ry:i,largeArcFlag:s,sweepFlag:a}){let l=[];if(o===0||i===0)return[];let c=(n-e)/2,h=(t-r)/2;if(c===0&&h===0)return[];o=Math.abs(o),i=Math.abs(i);let p=Math.pow(c,2)/Math.pow(o,2)+Math.pow(h,2)/Math.pow(i,2);p>1&&(o*=Math.sqrt(p),i*=Math.sqrt(p));let u=Bb(n,t,e,r,o,i,c,h,s,a),{ang1:d,ang2:m}=u,{centerx:g,centery:x}=u,y=Math.abs(m)/(Ll/4);Math.abs(1-y)<1e-7&&(y=1);let b=Math.max(Math.ceil(y),1);m/=b;for(let C=0;C<b;C++)l.push(Db(d,m)),d+=m;return l.map(C=>{let{x:S,y:v}=Nl(C[0],o,i,g,x),{x:z,y:w}=Nl(C[1],o,i,g,x),{x:f,y:D}=Nl(C[2],o,i,g,x);return{x1:S,y1:v,x2:z,y2:w,x:f,y:D}})}var go=require("three");var ze;(function(n){n[n.ODD=0]="ODD",n[n.NONZERO=1]="NONZERO",n[n.POSITIVE=2]="POSITIVE",n[n.NEGATIVE=3]="NEGATIVE",n[n.ABS_GEQ_TWO=4]="ABS_GEQ_TWO"})(ze||(ze={}));var et;(function(n){n[n.POLYGONS=0]="POLYGONS",n[n.CONNECTED_POLYGONS=1]="CONNECTED_POLYGONS",n[n.BOUNDARY_CONTOURS=2]="BOUNDARY_CONTOURS"})(et||(et={}));function pe(n,t){if(!n)throw t||"Assertion Failed!"}var ae=function(){function n(){}return n.vertEq=function(t,e){return t.s===e.s&&t.t===e.t},n.vertLeq=function(t,e){return t.s<e.s||t.s===e.s&&t.t<=e.t},n.transLeq=function(t,e){return t.t<e.t||t.t===e.t&&t.s<=e.s},n.edgeGoesLeft=function(t){return n.vertLeq(t.Dst,t.Org)},n.edgeGoesRight=function(t){return n.vertLeq(t.Org,t.Dst)},n.vertL1dist=function(t,e){return Math.abs(t.s-e.s)+Math.abs(t.t-e.t)},n.edgeEval=function(t,e,r){pe(n.vertLeq(t,e)&&n.vertLeq(e,r));var o=e.s-t.s,i=r.s-e.s;return o+i>0?o<i?e.t-t.t+(t.t-r.t)*(o/(o+i)):e.t-r.t+(r.t-t.t)*(i/(o+i)):0},n.edgeSign=function(t,e,r){pe(n.vertLeq(t,e)&&n.vertLeq(e,r));var o=e.s-t.s,i=r.s-e.s;return o+i>0?(e.t-r.t)*o+(e.t-t.t)*i:0},n.transEval=function(t,e,r){pe(n.transLeq(t,e)&&n.transLeq(e,r));var o=e.t-t.t,i=r.t-e.t;return o+i>0?o<i?e.s-t.s+(t.s-r.s)*(o/(o+i)):e.s-r.s+(r.s-t.s)*(i/(o+i)):0},n.transSign=function(t,e,r){pe(n.transLeq(t,e)&&n.transLeq(e,r));var o=e.t-t.t,i=r.t-e.t;return o+i>0?(e.s-r.s)*o+(e.s-t.s)*i:0},n.vertCCW=function(t,e,r){return t.s*(e.t-r.t)+e.s*(r.t-t.t)+r.s*(t.t-e.t)>=0},n.interpolate=function(t,e,r,o){return t=t<0?0:t,r=r<0?0:r,t<=r?r===0?(e+o)/2:e+(o-e)*(t/(t+r)):o+(e-o)*(r/(t+r))},n.intersect=function(t,e,r,o,i){var s,a,l;n.vertLeq(t,e)||(l=t,t=e,e=l),n.vertLeq(r,o)||(l=r,r=o,o=l),n.vertLeq(t,r)||(l=t,t=r,r=l,l=e,e=o,o=l),n.vertLeq(r,e)?n.vertLeq(e,o)?(s=n.edgeEval(t,r,e),a=n.edgeEval(r,e,o),s+a<0&&(s=-s,a=-a),i.s=n.interpolate(s,r.s,a,e.s)):(s=n.edgeSign(t,r,e),a=-n.edgeSign(t,o,e),s+a<0&&(s=-s,a=-a),i.s=n.interpolate(s,r.s,a,o.s)):i.s=(r.s+e.s)/2,n.transLeq(t,e)||(l=t,t=e,e=l),n.transLeq(r,o)||(l=r,r=o,o=l),n.transLeq(t,r)||(l=t,t=r,r=l,l=e,e=o,o=l),n.transLeq(r,e)?n.transLeq(e,o)?(s=n.transEval(t,r,e),a=n.transEval(r,e,o),s+a<0&&(s=-s,a=-a),i.t=n.interpolate(s,r.t,a,e.t)):(s=n.transSign(t,r,e),a=-n.transSign(t,o,e),s+a<0&&(s=-s,a=-a),i.t=n.interpolate(s,r.t,a,o.t)):i.t=(r.t+e.t)/2},n}(),nn=function(){function n(){this.next=null,this.prev=null,this.anEdge=null,this.trail=null,this.n=0,this.marked=!1,this.inside=!1}return n}(),$s=function(){function n(t){this.side=t,this.next=null,this.Org=null,this.Sym=null,this.Onext=null,this.Lnext=null,this.Lface=null,this.activeRegion=null,this.winding=0}return Object.defineProperty(n.prototype,"Rface",{get:function(){return this.Sym.Lface},set:function(t){this.Sym.Lface=t},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"Dst",{get:function(){return this.Sym.Org},set:function(t){this.Sym.Org=t},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"Oprev",{get:function(){return this.Sym.Lnext},set:function(t){this.Sym.Lnext=t},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"Lprev",{get:function(){return this.Onext.Sym},set:function(t){this.Onext.Sym=t},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"Dprev",{get:function(){return this.Lnext.Sym},set:function(t){this.Lnext.Sym=t},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"Rprev",{get:function(){return this.Sym.Onext},set:function(t){this.Sym.Onext=t},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"Dnext",{get:function(){return this.Sym.Onext.Sym},set:function(t){this.Sym.Onext.Sym=t},enumerable:!0,configurable:!0}),Object.defineProperty(n.prototype,"Rnext",{get:function(){return this.Sym.Lnext.Sym},set:function(t){this.Sym.Lnext.Sym=t},enumerable:!0,configurable:!0}),n}(),oi=function(){function n(){this.next=null,this.prev=null,this.anEdge=null,this.coords=[0,0,0],this.s=0,this.t=0,this.pqHandle=0,this.n=0,this.idx=0}return n}(),Nu=function(){function n(){var t=new oi,e=new nn,r=new $s(0),o=new $s(1);t.next=t.prev=t,t.anEdge=null,e.next=e.prev=e,r.next=r,r.Sym=o,o.next=o,o.Sym=r,this.vHead=t,this.fHead=e,this.eHead=r,this.eHeadSym=o}return n.prototype.makeEdge_=function(t){var e=new $s(0),r=new $s(1);t.Sym.side<t.side&&(t=t.Sym);var o=t.Sym.next;return r.next=o,o.Sym.next=e,e.next=t,t.Sym.next=r,e.Sym=r,e.Onext=e,e.Lnext=r,e.Org=null,e.Lface=null,e.winding=0,e.activeRegion=null,r.Sym=e,r.Onext=r,r.Lnext=e,r.Org=null,r.Lface=null,r.winding=0,r.activeRegion=null,e},n.prototype.splice_=function(t,e){var r=t.Onext,o=e.Onext;r.Sym.Lnext=e,o.Sym.Lnext=t,t.Onext=o,e.Onext=r},n.prototype.makeVertex_=function(t,e,r){var o=t;pe(o,"Vertex can't be null!");var i=r.prev;o.prev=i,i.next=o,o.next=r,r.prev=o,o.anEdge=e;var s=e;do s.Org=o,s=s.Onext;while(s!==e)},n.prototype.makeFace_=function(t,e,r){var o=t;pe(o,"Face can't be null");var i=r.prev;o.prev=i,i.next=o,o.next=r,r.prev=o,o.anEdge=e,o.trail=null,o.marked=!1,o.inside=r.inside;var s=e;do s.Lface=o,s=s.Lnext;while(s!==e)},n.prototype.killEdge_=function(t){t.Sym.side<t.side&&(t=t.Sym);var e=t.next,r=t.Sym.next;e.Sym.next=r,r.Sym.next=e},n.prototype.killVertex_=function(t,e){var r=t.anEdge,o=r;do o.Org=e,o=o.Onext;while(o!==r);var i=t.prev,s=t.next;s.prev=i,i.next=s},n.prototype.killFace_=function(t,e){var r=t.anEdge,o=r;do o.Lface=e,o=o.Lnext;while(o!==r);var i=t.prev,s=t.next;s.prev=i,i.next=s},n.prototype.makeEdge=function(){var t=new oi,e=new oi,r=new nn,o=this.makeEdge_(this.eHead);return this.makeVertex_(t,o,this.vHead),this.makeVertex_(e,o.Sym,this.vHead),this.makeFace_(r,o,this.fHead),o},n.prototype.splice=function(t,e){var r=!1,o=!1;if(t!==e){if(e.Org!==t.Org&&(o=!0,this.killVertex_(e.Org,t.Org)),e.Lface!==t.Lface&&(r=!0,this.killFace_(e.Lface,t.Lface)),this.splice_(e,t),!o){var i=new oi;this.makeVertex_(i,e,t.Org),t.Org.anEdge=t}if(!r){var s=new nn;this.makeFace_(s,e,t.Lface),t.Lface.anEdge=t}}},n.prototype.delete=function(t){var e=t.Sym,r=!1;if(t.Lface!==t.Rface&&(r=!0,this.killFace_(t.Lface,t.Rface)),t.Onext===t)this.killVertex_(t.Org,null);else if(t.Rface.anEdge=t.Oprev,t.Org.anEdge=t.Onext,this.splice_(t,t.Oprev),!r){var o=new nn;this.makeFace_(o,t,t.Lface)}e.Onext===e?(this.killVertex_(e.Org,null),this.killFace_(e.Lface,null)):(t.Lface.anEdge=e.Oprev,e.Org.anEdge=e.Onext,this.splice_(e,e.Oprev)),this.killEdge_(t)},n.prototype.addEdgeVertex=function(t){var e=this.makeEdge_(t),r=e.Sym;this.splice_(e,t.Lnext),e.Org=t.Dst;var o=new oi;return this.makeVertex_(o,r,e.Org),e.Lface=r.Lface=t.Lface,e},n.prototype.splitEdge=function(t){var e=this.addEdgeVertex(t),r=e.Sym;return this.splice_(t.Sym,t.Sym.Oprev),this.splice_(t.Sym,r),t.Dst=r.Org,r.Dst.anEdge=r.Sym,r.Rface=t.Rface,r.winding=t.winding,r.Sym.winding=t.Sym.winding,r.idx=t.idx,r.Sym.idx=t.Sym.idx,r},n.prototype.connect=function(t,e){var r=!1,o=this.makeEdge_(t),i=o.Sym;if(e.Lface!==t.Lface&&(r=!0,this.killFace_(e.Lface,t.Lface)),this.splice_(o,t.Lnext),this.splice_(i,e),o.Org=t.Dst,i.Org=e.Org,o.Lface=i.Lface=t.Lface,t.Lface.anEdge=i,!r){var s=new nn;this.makeFace_(s,o,t.Lface)}return o},n.prototype.zapFace=function(t){var e=t.anEdge,r,o,i,s,a;o=e.Lnext;do r=o,o=r.Lnext,r.Lface=null,r.Rface===null&&(r.Onext===r?this.killVertex_(r.Org,null):(r.Org.anEdge=r.Onext,this.splice_(r,r.Oprev)),i=r.Sym,i.Onext===i?this.killVertex_(i.Org,null):(i.Org.anEdge=i.Onext,this.splice_(i,i.Oprev)),this.killEdge_(r));while(r!=e);s=t.prev,a=t.next,a.prev=s,s.next=a},n.prototype.countFaceVerts_=function(t){var e=t.anEdge,r=0;do r++,e=e.Lnext;while(e!==t.anEdge);return r},n.prototype.mergeConvexFaces=function(t){var e,r,o,i,s,a,l;for(e=this.fHead.next;e!==this.fHead;e=e.next)if(!!e.inside)for(r=e.anEdge,s=r.Org;o=r.Lnext,i=r.Sym,i&&i.Lface&&i.Lface.inside&&(a=this.countFaceVerts_(e),l=this.countFaceVerts_(i.Lface),a+l-2<=t&&ae.vertCCW(r.Lprev.Org,r.Org,i.Lnext.Lnext.Org)&&ae.vertCCW(i.Lprev.Org,i.Org,r.Lnext.Lnext.Org)&&(o=i.Lnext,this.delete(i),r=null,i=null)),!(r&&r.Lnext.Org===s);)r=o;return!0},n.prototype.check=function(){var t=this.fHead,e=this.vHead,r=this.eHead,o,i,s,a,l,c;for(i=t,i=t;(o=i.next)!==t;i=o){pe(o.prev===i),l=o.anEdge;do pe(l.Sym!==l),pe(l.Sym.Sym===l),pe(l.Lnext.Onext.Sym===l),pe(l.Onext.Sym.Lnext===l),pe(l.Lface===o),l=l.Lnext;while(l!==o.anEdge)}for(pe(o.prev===i&&o.anEdge===null),a=e,a=e;(s=a.next)!==e;a=s){pe(s.prev===a),l=s.anEdge;do pe(l.Sym!==l),pe(l.Sym.Sym===l),pe(l.Lnext.Onext.Sym===l),pe(l.Onext.Sym.Lnext===l),pe(l.Org===s),l=l.Onext;while(l!==s.anEdge)}for(pe(s.prev===a&&s.anEdge===null),c=r,c=r;(l=c.next)!==r;c=l)pe(l.Sym.next===c.Sym),pe(l.Sym!==l),pe(l.Sym.Sym===l),pe(l.Org!==null),pe(l.Dst!==null),pe(l.Lnext.Onext.Sym===l),pe(l.Onext.Sym.Lnext===l);pe(l.Sym.next===c.Sym&&l.Sym===this.eHeadSym&&l.Sym.Sym===l&&l.Org===null&&l.Dst===null&&l.Lface===null&&l.Rface===null)},n}(),Lu=function(){function n(){this.handle=null}return n}(),Cu=function(){function n(){this.key=null,this.node=0}return n}(),Eb=function(){function n(t,e){this.leq=e,this.max=0,this.nodes=[],this.handles=[],this.initialized=!1,this.freeList=0,this.size=0,this.max=t,this.nodes=[],this.handles=[];for(var r=0;r<t+1;r++)this.nodes[r]=new Lu,this.handles[r]=new Cu;this.initialized=!1,this.nodes[1].handle=1,this.handles[1].key=null}return n.prototype.floatDown_=function(t){var e=this.nodes,r=this.handles,o,i,s;for(o=e[t].handle;;){if(s=t<<1,s<this.size&&this.leq(r[e[s+1].handle].key,r[e[s].handle].key)&&++s,pe(s<=this.max),i=e[s].handle,s>this.size||this.leq(r[o].key,r[i].key)){e[t].handle=o,r[o].node=t;break}e[t].handle=i,r[i].node=t,t=s}},n.prototype.floatUp_=function(t){var e=this.nodes,r=this.handles,o,i,s;for(o=e[t].handle;;){if(s=t>>1,i=e[s].handle,s===0||this.leq(r[i].key,r[o].key)){e[t].handle=o,r[o].node=t;break}e[t].handle=i,r[i].node=t,t=s}},n.prototype.init=function(){for(var t=this.size;t>=1;--t)this.floatDown_(t);this.initialized=!0},n.prototype.min=function(){return this.handles[this.nodes[1].handle].key},n.prototype.insert=function(t){var e,r;if(e=++this.size,e*2>this.max){this.max*=2;var o,i;for(i=this.nodes.length,this.nodes.length=this.max+1,o=i;o<this.nodes.length;o++)this.nodes[o]=new Lu;for(i=this.handles.length,this.handles.length=this.max+1,o=i;o<this.handles.length;o++)this.handles[o]=new Cu}return this.freeList===0?r=e:(r=this.freeList,this.freeList=this.handles[r].node),this.nodes[e].handle=r,this.handles[r].node=e,this.handles[r].key=t,this.initialized&&this.floatUp_(e),r},n.prototype.extractMin=function(){var t=this.nodes,e=this.handles,r=t[1].handle,o=e[r].key;return this.size>0&&(t[1].handle=t[this.size].handle,e[t[1].handle].node=1,e[r].key=null,e[r].node=this.freeList,this.freeList=r,--this.size,this.size>0&&this.floatDown_(1)),o},n.prototype.delete=function(t){var e=this.nodes,r=this.handles,o;pe(t>=1&&t<=this.max&&r[t].key!==null),o=r[t].node,e[o].handle=e[this.size].handle,r[e[o].handle].node=o,--this.size,o<=this.size&&(o<=1||this.leq(r[e[o>>1].handle].key,r[e[o].handle].key)?this.floatDown_(o):this.floatUp_(o)),r[t].key=null,r[t].node=this.freeList,this.freeList=t},n}(),Cl=function(){function n(){this.eUp=null,this.nodeUp=null,this.windingNumber=0,this.inside=!1,this.sentinel=!1,this.dirty=!1,this.fixUpperEdge=!1}return n}(),Tu=function(){function n(){this.key=null,this.next=null,this.prev=null}return n}(),_b=function(){function n(t,e){this.frame=t,this.leq=e,this.head=new Tu,this.head.next=this.head,this.head.prev=this.head}return n.prototype.min=function(){return this.head.next},n.prototype.max=function(){return this.head.prev},n.prototype.insert=function(t){return this.insertBefore(this.head,t)},n.prototype.search=function(t){var e=this.head;do e=e.next;while(e.key!==null&&!this.leq(this.frame,t,e.key));return e},n.prototype.insertBefore=function(t,e){do t=t.prev;while(t.key!==null&&!this.leq(this.frame,t.key,e));var r=new Tu;return r.key=e,r.next=t.next,t.next.prev=r,r.prev=t,t.next=r,r},n.prototype.delete=function(t){t.next.prev=t.prev,t.prev.next=t.next},n}(),Gb=function(){function n(){}return n.regionBelow=function(t){return t.nodeUp.prev.key},n.regionAbove=function(t){return t.nodeUp.next.key},n.debugEvent=function(t){},n.addWinding=function(t,e){t.winding+=e.winding,t.Sym.winding+=e.Sym.winding},n.edgeLeq=function(t,e,r){var o=t.event,i=e.eUp,s=r.eUp;if(i.Dst===o)return s.Dst===o?ae.vertLeq(i.Org,s.Org)?ae.edgeSign(s.Dst,i.Org,s.Org)<=0:ae.edgeSign(i.Dst,s.Org,i.Org)>=0:ae.edgeSign(s.Dst,o,s.Org)<=0;if(s.Dst===o)return ae.edgeSign(i.Dst,o,i.Org)>=0;var a=ae.edgeEval(i.Dst,o,i.Org),l=ae.edgeEval(s.Dst,o,s.Org);return a>=l},n.deleteRegion=function(t,e){e.fixUpperEdge&&pe(e.eUp.winding===0),e.eUp.activeRegion=null,t.dict.delete(e.nodeUp)},n.fixUpperEdge=function(t,e,r){pe(e.fixUpperEdge),t.mesh.delete(e.eUp),e.fixUpperEdge=!1,e.eUp=r,r.activeRegion=e},n.topLeftRegion=function(t,e){var r=e.eUp.Org,o;do e=n.regionAbove(e);while(e.eUp.Org===r);if(e.fixUpperEdge){if(o=t.mesh.connect(n.regionBelow(e).eUp.Sym,e.eUp.Lnext),o===null)return null;n.fixUpperEdge(t,e,o),e=n.regionAbove(e)}return e},n.topRightRegion=function(t){var e=t.eUp.Dst;do t=n.regionAbove(t);while(t.eUp.Dst===e);return t},n.addRegionBelow=function(t,e,r){var o=new Cl;return o.eUp=r,o.nodeUp=t.dict.insertBefore(e.nodeUp,o),o.fixUpperEdge=!1,o.sentinel=!1,o.dirty=!1,r.activeRegion=o,o},n.isWindingInside=function(t,e){switch(t.windingRule){case ze.ODD:return(e&1)!==0;case ze.NONZERO:return e!==0;case ze.POSITIVE:return e>0;case ze.NEGATIVE:return e<0;case ze.ABS_GEQ_TWO:return e>=2||e<=-2}throw new Error("Invalid winding rulle")},n.computeWinding=function(t,e){e.windingNumber=n.regionAbove(e).windingNumber+e.eUp.winding,e.inside=n.isWindingInside(t,e.windingNumber)},n.finishRegion=function(t,e){var r=e.eUp,o=r.Lface;o.inside=e.inside,o.anEdge=r,n.deleteRegion(t,e)},n.finishLeftRegions=function(t,e,r){for(var o,i=null,s=e,a=e.eUp;s!==r;){if(s.fixUpperEdge=!1,i=n.regionBelow(s),o=i.eUp,o.Org!=a.Org){if(!i.fixUpperEdge){n.finishRegion(t,s);break}o=t.mesh.connect(a.Lprev,o.Sym),n.fixUpperEdge(t,i,o)}a.Onext!==o&&(t.mesh.splice(o.Oprev,o),t.mesh.splice(a,o)),n.finishRegion(t,s),a=i.eUp,s=i}return a},n.addRightEdges=function(t,e,r,o,i,s){var a,l,c,h,p=!0;c=r;do pe(ae.vertLeq(c.Org,c.Dst)),n.addRegionBelow(t,e,c.Sym),c=c.Onext;while(c!==o);for(i===null&&(i=n.regionBelow(e).eUp.Rprev),l=e,h=i;a=n.regionBelow(l),c=a.eUp.Sym,c.Org===h.Org;)c.Onext!==h&&(t.mesh.splice(c.Oprev,c),t.mesh.splice(h.Oprev,c)),a.windingNumber=l.windingNumber-c.winding,a.inside=n.isWindingInside(t,a.windingNumber),l.dirty=!0,!p&&n.checkForRightSplice(t,l)&&(n.addWinding(c,h),n.deleteRegion(t,l),t.mesh.delete(h)),p=!1,l=a,h=c;l.dirty=!0,pe(l.windingNumber-c.winding===a.windingNumber),s&&n.walkDirtyRegions(t,l)},n.spliceMergeVertices=function(t,e,r){t.mesh.splice(e,r)},n.vertexWeights=function(t,e,r){var o=ae.vertL1dist(e,t),i=ae.vertL1dist(r,t),s=.5*i/(o+i),a=.5*o/(o+i);t.coords[0]+=s*e.coords[0]+a*r.coords[0],t.coords[1]+=s*e.coords[1]+a*r.coords[1],t.coords[2]+=s*e.coords[2]+a*r.coords[2]},n.getIntersectData=function(t,e,r,o,i,s){e.coords[0]=e.coords[1]=e.coords[2]=0,e.idx=-1,n.vertexWeights(e,r,o),n.vertexWeights(e,i,s)},n.checkForRightSplice=function(t,e){var r=n.regionBelow(e),o=e.eUp,i=r.eUp;if(ae.vertLeq(o.Org,i.Org)){if(ae.edgeSign(i.Dst,o.Org,i.Org)>0)return!1;ae.vertEq(o.Org,i.Org)?o.Org!==i.Org&&(t.pq.delete(o.Org.pqHandle),n.spliceMergeVertices(t,i.Oprev,o)):(t.mesh.splitEdge(i.Sym),t.mesh.splice(o,i.Oprev),e.dirty=r.dirty=!0)}else{if(ae.edgeSign(o.Dst,i.Org,o.Org)<0)return!1;n.regionAbove(e).dirty=e.dirty=!0,t.mesh.splitEdge(o.Sym),t.mesh.splice(i.Oprev,o)}return!0},n.checkForLeftSplice=function(t,e){var r=n.regionBelow(e),o=e.eUp,i=r.eUp,s;if(pe(!ae.vertEq(o.Dst,i.Dst)),ae.vertLeq(o.Dst,i.Dst)){if(ae.edgeSign(o.Dst,i.Dst,o.Org)<0)return!1;n.regionAbove(e).dirty=e.dirty=!0,s=t.mesh.splitEdge(o),t.mesh.splice(i.Sym,s),s.Lface.inside=e.inside}else{if(ae.edgeSign(i.Dst,o.Dst,i.Org)>0)return!1;e.dirty=r.dirty=!0,s=t.mesh.splitEdge(i),t.mesh.splice(o.Lnext,i.Sym),s.Rface.inside=e.inside}return!0},n.checkForIntersect=function(t,e){var r=n.regionBelow(e),o=e.eUp,i=r.eUp,s=o.Org,a=i.Org,l=o.Dst,c=i.Dst,h,p,u=new oi,d,m;if(pe(!ae.vertEq(c,l)),pe(ae.edgeSign(l,t.event,s)<=0),pe(ae.edgeSign(c,t.event,a)>=0),pe(s!==t.event&&a!==t.event),pe(!e.fixUpperEdge&&!r.fixUpperEdge),s===a||(h=Math.min(s.t,l.t),p=Math.max(a.t,c.t),h>p))return!1;if(ae.vertLeq(s,a)){if(ae.edgeSign(c,s,a)>0)return!1}else if(ae.edgeSign(l,a,s)<0)return!1;return n.debugEvent(t),ae.intersect(l,s,c,a,u),pe(Math.min(s.t,l.t)<=u.t),pe(u.t<=Math.max(a.t,c.t)),pe(Math.min(c.s,l.s)<=u.s),pe(u.s<=Math.max(a.s,s.s)),ae.vertLeq(u,t.event)&&(u.s=t.event.s,u.t=t.event.t),d=ae.vertLeq(s,a)?s:a,ae.vertLeq(d,u)&&(u.s=d.s,u.t=d.t),ae.vertEq(u,s)||ae.vertEq(u,a)?(n.checkForRightSplice(t,e),!1):!ae.vertEq(l,t.event)&&ae.edgeSign(l,t.event,u)>=0||!ae.vertEq(c,t.event)&&ae.edgeSign(c,t.event,u)<=0?c===t.event?(t.mesh.splitEdge(o.Sym),t.mesh.splice(i.Sym,o),e=n.topLeftRegion(t,e),o=n.regionBelow(e).eUp,n.finishLeftRegions(t,n.regionBelow(e),r),n.addRightEdges(t,e,o.Oprev,o,o,!0),!0):l===t.event?(t.mesh.splitEdge(i.Sym),t.mesh.splice(o.Lnext,i.Oprev),r=e,e=n.topRightRegion(e),m=n.regionBelow(e).eUp.Rprev,r.eUp=i.Oprev,i=n.finishLeftRegions(t,r,null),n.addRightEdges(t,e,i.Onext,o.Rprev,m,!0),!0):(ae.edgeSign(l,t.event,u)>=0&&(n.regionAbove(e).dirty=e.dirty=!0,t.mesh.splitEdge(o.Sym),o.Org.s=t.event.s,o.Org.t=t.event.t),ae.edgeSign(c,t.event,u)<=0&&(e.dirty=r.dirty=!0,t.mesh.splitEdge(i.Sym),i.Org.s=t.event.s,i.Org.t=t.event.t),!1):(t.mesh.splitEdge(o.Sym),t.mesh.splitEdge(i.Sym),t.mesh.splice(i.Oprev,o),o.Org.s=u.s,o.Org.t=u.t,o.Org.pqHandle=t.pq.insert(o.Org),n.getIntersectData(t,o.Org,s,l,a,c),n.regionAbove(e).dirty=e.dirty=r.dirty=!0,!1)},n.walkDirtyRegions=function(t,e){for(var r=n.regionBelow(e),o,i;;){for(;r.dirty;)e=r,r=n.regionBelow(r);if(!e.dirty&&(r=e,e=n.regionAbove(e),e===null||!e.dirty))return;if(e.dirty=!1,o=e.eUp,i=r.eUp,o.Dst!==i.Dst&&n.checkForLeftSplice(t,e)&&(r.fixUpperEdge?(n.deleteRegion(t,r),t.mesh.delete(i),r=n.regionBelow(e),i=r.eUp):e.fixUpperEdge&&(n.deleteRegion(t,e),t.mesh.delete(o),e=n.regionAbove(r),o=e.eUp)),o.Org!==i.Org)if(o.Dst!==i.Dst&&!e.fixUpperEdge&&!r.fixUpperEdge&&(o.Dst===t.event||i.Dst===t.event)){if(n.checkForIntersect(t,e))return}else n.checkForRightSplice(t,e);o.Org===i.Org&&o.Dst===i.Dst&&(n.addWinding(i,o),n.deleteRegion(t,e),t.mesh.delete(o),e=n.regionAbove(r))}},n.connectRightVertex=function(t,e,r){var o,i=r.Onext,s=n.regionBelow(e),a=e.eUp,l=s.eUp,c=!1;if(a.Dst!==l.Dst&&n.checkForIntersect(t,e),ae.vertEq(a.Org,t.event)&&(t.mesh.splice(i.Oprev,a),e=n.topLeftRegion(t,e),i=n.regionBelow(e).eUp,n.finishLeftRegions(t,n.regionBelow(e),s),c=!0),ae.vertEq(l.Org,t.event)&&(t.mesh.splice(r,l.Oprev),r=n.finishLeftRegions(t,s,null),c=!0),c){n.addRightEdges(t,e,r.Onext,i,i,!0);return}ae.vertLeq(l.Org,a.Org)?o=l.Oprev:o=a,o=t.mesh.connect(r.Lprev,o),n.addRightEdges(t,e,o,o.Onext,o.Onext,!1),o.Sym.activeRegion.fixUpperEdge=!0,n.walkDirtyRegions(t,e)},n.connectLeftDegenerate=function(t,e,r){var o,i,s,a,l;if(o=e.eUp,ae.vertEq(o.Org,r)){pe(!1),n.spliceMergeVertices(t,o,r.anEdge);return}if(!ae.vertEq(o.Dst,r)){t.mesh.splitEdge(o.Sym),e.fixUpperEdge&&(t.mesh.delete(o.Onext),e.fixUpperEdge=!1),t.mesh.splice(r.anEdge,o),n.sweepEvent(t,r);return}pe(!1),e=n.topRightRegion(e),l=n.regionBelow(e),s=l.eUp.Sym,i=a=s.Onext,l.fixUpperEdge&&(pe(i!==s),n.deleteRegion(t,l),t.mesh.delete(s),s=i.Oprev),t.mesh.splice(r.anEdge,s),ae.edgeGoesLeft(i)||(i=null),n.addRightEdges(t,e,s.Onext,a,i,!0)},n.connectLeftVertex=function(t,e){var r,o,i,s,a,l,c=new Cl;if(c.eUp=e.anEdge.Sym,r=t.dict.search(c).key,o=n.regionBelow(r),!!o){if(s=r.eUp,a=o.eUp,ae.edgeSign(s.Dst,e,s.Org)===0){n.connectLeftDegenerate(t,r,e);return}if(i=ae.vertLeq(a.Dst,s.Dst)?r:o,r.inside||i.fixUpperEdge){if(i===r)l=t.mesh.connect(e.anEdge.Sym,s.Lnext);else{var h=t.mesh.connect(a.Dnext,e.anEdge);l=h.Sym}i.fixUpperEdge?n.fixUpperEdge(t,i,l):n.computeWinding(t,n.addRegionBelow(t,r,l)),n.sweepEvent(t,e)}else n.addRightEdges(t,r,e.anEdge,e.anEdge,null,!0)}},n.sweepEvent=function(t,e){t.event=e,n.debugEvent(t);for(var r=e.anEdge;r.activeRegion===null;)if(r=r.Onext,r===e.anEdge){n.connectLeftVertex(t,e);return}var o=n.topLeftRegion(t,r.activeRegion);pe(o!==null);var i=n.regionBelow(o),s=i.eUp,a=n.finishLeftRegions(t,i,null);a.Onext===s?n.connectRightVertex(t,o,a):n.addRightEdges(t,o,a.Onext,s,s,!0)},n.addSentinel=function(t,e,r,o){var i=new Cl,s=t.mesh.makeEdge();s.Org.s=r,s.Org.t=o,s.Dst.s=e,s.Dst.t=o,t.event=s.Dst,i.eUp=s,i.windingNumber=0,i.inside=!1,i.fixUpperEdge=!1,i.sentinel=!0,i.dirty=!1,i.nodeUp=t.dict.insert(i)},n.initEdgeDict=function(t){t.dict=new _b(t,n.edgeLeq);var e=t.bmax[0]-t.bmin[0],r=t.bmax[1]-t.bmin[1],o=t.bmin[0]-e,i=t.bmax[0]+e,s=t.bmin[1]-r,a=t.bmax[1]+r;n.addSentinel(t,o,i,s),n.addSentinel(t,o,i,a)},n.doneEdgeDict=function(t){for(var e,r=0;(e=t.dict.min().key)!==null;)e.sentinel||(pe(e.fixUpperEdge),pe(++r===1)),pe(e.windingNumber===0),n.deleteRegion(t,e)},n.removeDegenerateEdges=function(t){var e,r,o,i=t.mesh.eHead;for(e=i.next;e!==i;e=r)r=e.next,o=e.Lnext,ae.vertEq(e.Org,e.Dst)&&e.Lnext.Lnext!==e&&(n.spliceMergeVertices(t,o,e),t.mesh.delete(e),e=o,o=e.Lnext),o.Lnext===e&&(o!==e&&((o===r||o===r.Sym)&&(r=r.next),t.mesh.delete(o)),(e===r||e===r.Sym)&&(r=r.next),t.mesh.delete(e))},n.initPriorityQ=function(t){var e,r,o,i=0;for(o=t.mesh.vHead,r=o.next;r!==o;r=r.next)i++;for(i+=8,e=t.pq=new Eb(i,ae.vertLeq),o=t.mesh.vHead,r=o.next;r!==o;r=r.next)r.pqHandle=e.insert(r);return r!==o?!1:(e.init(),!0)},n.donePriorityQ=function(t){t.pq=null},n.removeDegenerateFaces=function(t,e){var r,o,i;for(r=e.fHead.next;r!==e.fHead;r=o)o=r.next,i=r.anEdge,pe(i.Lnext!==i),i.Lnext.Lnext===i&&(n.addWinding(i.Onext,i),t.mesh.delete(i));return!0},n.computeInterior=function(t,e){e===void 0&&(e=!0);var r,o;if(n.removeDegenerateEdges(t),!n.initPriorityQ(t))return!1;for(n.initEdgeDict(t);(r=t.pq.extractMin())!==null;){for(;o=t.pq.min(),!(o===null||!ae.vertEq(o,r));)o=t.pq.extractMin(),n.spliceMergeVertices(t,r.anEdge,o.anEdge);n.sweepEvent(t,r)}return t.event=t.dict.min().key.eUp.Org,n.debugEvent(t),n.doneEdgeDict(t),n.donePriorityQ(t),n.removeDegenerateFaces(t,t.mesh)?(e&&t.mesh.check(),!0):!1},n}(),zb=function(){function n(){this.mesh=new Nu,this.normal=[0,0,0],this.sUnit=[0,0,0],this.tUnit=[0,0,0],this.bmin=[0,0],this.bmax=[0,0],this.windingRule=ze.ODD,this.dict=null,this.pq=null,this.event=null,this.vertexIndexCounter=0,this.vertices=[],this.vertexIndices=[],this.vertexCount=0,this.elements=[],this.elementCount=0}return n.prototype.dot_=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]},n.prototype.normalize_=function(t){var e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2];if(!e)throw"Zero-size vector!";e=Math.sqrt(e),t[0]/=e,t[1]/=e,t[2]/=e},n.prototype.longAxis_=function(t){var e=0;return Math.abs(t[1])>Math.abs(t[0])&&(e=1),Math.abs(t[2])>Math.abs(t[e])&&(e=2),e},n.prototype.computeNormal_=function(t){var e,r,o,i,s,a,l=[0,0,0],c=[0,0,0],h=[0,0,0],p=[0,0,0],u=[0,0,0],d=[null,null,null],m=[null,null,null],g=this.mesh.vHead;e=g.next;for(var x=0;x<3;++x)i=e.coords[x],c[x]=i,m[x]=e,l[x]=i,d[x]=e;for(e=g.next;e!==g;e=e.next)for(var y=0;y<3;++y)i=e.coords[y],i<c[y]&&(c[y]=i,m[y]=e),i>l[y]&&(l[y]=i,d[y]=e);var b=0;if(l[1]-c[1]>l[0]-c[0]&&(b=1),l[2]-c[2]>l[b]-c[b]&&(b=2),c[b]>=l[b]){t[0]=0,t[1]=0,t[2]=1;return}for(a=0,r=m[b],o=d[b],h[0]=r.coords[0]-o.coords[0],h[1]=r.coords[1]-o.coords[1],h[2]=r.coords[2]-o.coords[2],e=g.next;e!==g;e=e.next)p[0]=e.coords[0]-o.coords[0],p[1]=e.coords[1]-o.coords[1],p[2]=e.coords[2]-o.coords[2],u[0]=h[1]*p[2]-h[2]*p[1],u[1]=h[2]*p[0]-h[0]*p[2],u[2]=h[0]*p[1]-h[1]*p[0],s=u[0]*u[0]+u[1]*u[1]+u[2]*u[2],s>a&&(a=s,t[0]=u[0],t[1]=u[1],t[2]=u[2]);a<=0&&(t[0]=t[1]=t[2]=0,t[this.longAxis_(h)]=1)},n.prototype.checkOrientation_=function(){for(var t=this.mesh.fHead,e,r=this.mesh.vHead,o,i=0,s=t.next;s!==t;s=s.next)if(o=s.anEdge,!(o.winding<=0))do i+=(o.Org.s-o.Dst.s)*(o.Org.t+o.Dst.t),o=o.Lnext;while(o!==s.anEdge);if(i<0){for(e=r.next;e!==r;e=e.next)e.t=-e.t;this.tUnit[0]=-this.tUnit[0],this.tUnit[1]=-this.tUnit[1],this.tUnit[2]=-this.tUnit[2]}},n.prototype.projectPolygon_=function(){var t=this.mesh.vHead,e=[0,0,0],r,o,i=!1;e[0]=this.normal[0],e[1]=this.normal[1],e[2]=this.normal[2],!e[0]&&!e[1]&&!e[2]&&(this.computeNormal_(e),i=!0),r=this.sUnit,o=this.tUnit;var s=this.longAxis_(e);r[s]=0,r[(s+1)%3]=1,r[(s+2)%3]=0,o[s]=0,o[(s+1)%3]=0,o[(s+2)%3]=e[s]>0?1:-1;for(var a=t.next;a!==t;a=a.next)a.s=this.dot_(a.coords,r),a.t=this.dot_(a.coords,o);i&&this.checkOrientation_();for(var l=!0,c=t.next;c!==t;c=c.next)l?(this.bmin[0]=this.bmax[0]=c.s,this.bmin[1]=this.bmax[1]=c.t,l=!1):(c.s<this.bmin[0]&&(this.bmin[0]=c.s),c.s>this.bmax[0]&&(this.bmax[0]=c.s),c.t<this.bmin[1]&&(this.bmin[1]=c.t),c.t>this.bmax[1]&&(this.bmax[1]=c.t))},n.prototype.addWinding_=function(t,e){t.winding+=e.winding,t.Sym.winding+=e.Sym.winding},n.prototype.tessellateMonoRegion_=function(t,e){var r,o;if(r=e.anEdge,!(r.Lnext!==r&&r.Lnext.Lnext!==r))throw"Mono region invalid";for(;ae.vertLeq(r.Dst,r.Org);r=r.Lprev);for(;ae.vertLeq(r.Org,r.Dst);r=r.Lnext);o=r.Lprev;for(var i=void 0;r.Lnext!==o;)if(ae.vertLeq(r.Dst,o.Org)){for(;o.Lnext!==r&&(ae.edgeGoesLeft(o.Lnext)||ae.edgeSign(o.Org,o.Dst,o.Lnext.Dst)<=0);)i=t.connect(o.Lnext,o),o=i.Sym;o=o.Lprev}else{for(;o.Lnext!==r&&(ae.edgeGoesRight(r.Lprev)||ae.edgeSign(r.Dst,r.Org,r.Lprev.Org)>=0);)i=t.connect(r,r.Lprev),r=i.Sym;r=r.Lnext}if(o.Lnext===r)throw"Mono region invalid";for(;o.Lnext.Lnext!==r;)i=t.connect(o.Lnext,o),o=i.Sym;return!0},n.prototype.tessellateInterior_=function(t){for(var e,r=t.fHead.next;r!==t.fHead;r=e)if(e=r.next,r.inside&&!this.tessellateMonoRegion_(t,r))return!1;return!0},n.prototype.discardExterior_=function(t){for(var e,r=t.fHead.next;r!==t.fHead;r=e)e=r.next,r.inside||t.zapFace(r)},n.prototype.setWindingNumber_=function(t,e,r){for(var o,i=t.eHead.next;i!==t.eHead;i=o)o=i.next,i.Rface.inside!==i.Lface.inside?i.winding=i.Lface.inside?e:-e:r?t.delete(i):i.winding=0},n.prototype.getNeighbourFace_=function(t){return!t.Rface||!t.Rface.inside?-1:t.Rface.n},n.prototype.outputPolymesh_=function(t,e,r,o){var i,s=0,a=0,l;r>3&&t.mergeConvexFaces(r);for(var c=t.vHead.next;c!==t.vHead;c=c.next)c.n=-1;for(var h=t.fHead.next;h!==t.fHead;h=h.next)if(h.n=-1,!!h.inside){i=h.anEdge,l=0;do{var c=i.Org;c.n===-1&&(c.n=a,a++),l++,i=i.Lnext}while(i!==h.anEdge);if(l>r)throw"Face vertex greater that support polygon";h.n=s,++s}this.elementCount=s,e===et.CONNECTED_POLYGONS&&(s*=2),this.elements=[],this.elements.length=s*r,this.vertexCount=a,this.vertices=[],this.vertices.length=a*o,this.vertexIndices=[],this.vertexIndices.length=a;for(var c=t.vHead.next;c!==t.vHead;c=c.next)if(c.n!==-1){var p=c.n*o;this.vertices[p+0]=c.coords[0],this.vertices[p+1]=c.coords[1],o>2&&(this.vertices[p+2]=c.coords[2]),this.vertexIndices[c.n]=c.idx}for(var u=0,h=t.fHead.next;h!==t.fHead;h=h.next)if(!!h.inside){i=h.anEdge,l=0;do{var c=i.Org;this.elements[u++]=c.n,l++,i=i.Lnext}while(i!==h.anEdge);for(var d=l;d<r;++d)this.elements[u++]=-1;if(e===et.CONNECTED_POLYGONS){i=h.anEdge;do this.elements[u++]=this.getNeighbourFace_(i),i=i.Lnext;while(i!==h.anEdge);for(var m=l;m<r;++m)this.elements[u++]=-1}}},n.prototype.outputContours_=function(t,e){var r,o,i=0,s=0;this.vertexCount=0,this.elementCount=0;for(var a=t.fHead.next;a!==t.fHead;a=a.next)if(!!a.inside){o=r=a.anEdge;do this.vertexCount++,r=r.Lnext;while(r!==o);this.elementCount++}this.elements=[],this.elements.length=this.elementCount*2,this.vertices=[],this.vertices.length=this.vertexCount*e,this.vertexIndices=[],this.vertexIndices.length=this.vertexCount;var l=0,c=0,h=0;i=0;for(var a=t.fHead.next;a!==t.fHead;a=a.next)if(!!a.inside){s=0,o=r=a.anEdge;do this.vertices[l++]=r.Org.coords[0],this.vertices[l++]=r.Org.coords[1],e>2&&(this.vertices[l++]=r.Org.coords[2]),this.vertexIndices[c++]=this.vertexIdCallback?this.vertexIdCallback(r):r.Org.idx,s++,r=r.Lnext;while(r!==o);this.elements[h++]=i,this.elements[h++]=s,i+=s}},n.prototype.addContour=function(t,e){this.mesh===null&&(this.mesh=new Nu),t<2&&(t=2),t>3&&(t=3);for(var r=null,o=0;o<e.length;o+=t)r===null?(r=this.mesh.makeEdge(),this.mesh.splice(r,r.Sym)):(this.mesh.splitEdge(r),r=r.Lnext),r.Org.coords[0]=e[o+0],r.Org.coords[1]=e[o+1],t>2?r.Org.coords[2]=e[o+2]:r.Org.coords[2]=0,r.Org.idx=this.vertexIndexCounter++,this.edgeCreateCallback&&this.edgeCreateCallback(r),r.winding=1,r.Sym.winding=-1},n.prototype.tesselate=function(t,e,r,o,i,s){if(t===void 0&&(t=ze.ODD),e===void 0&&(e=et.POLYGONS),s===void 0&&(s=!0),this.vertices=[],this.elements=[],this.vertexIndices=[],this.vertexIndexCounter=0,i&&(this.normal[0]=i[0],this.normal[1]=i[1],this.normal[2]=i[2]),this.windingRule=t,o<2&&(o=2),o>3&&(o=3),!this.mesh)return!1;this.projectPolygon_(),Gb.computeInterior(this,s);var a=this.mesh;return e===et.BOUNDARY_CONTOURS?this.setWindingNumber_(a,1,!0):this.tessellateInterior_(a),s&&a.check(),e===et.BOUNDARY_CONTOURS?this.outputContours_(a,o):this.outputPolymesh_(a,e,r,o),!0},n}();function fo(n){var t=n.windingRule,e=t===void 0?ze.ODD:t,r=n.elementType,o=r===void 0?et.POLYGONS:r,i=n.polySize,s=i===void 0?3:i,a=n.vertexSize,l=a===void 0?2:a,c=n.normal,h=c===void 0?[0,0,1]:c,p=n.contours,u=p===void 0?[]:p,d=n.strict,m=d===void 0?!0:d,g=n.debug,x=g===void 0?!1:g;if(!u&&m)throw new Error("Contours can't be empty");if(!!u){var y=new zb;n.edgeCreateCallback&&(y.edgeCreateCallback=n.edgeCreateCallback),n.vertexIdCallback&&(y.vertexIdCallback=n.vertexIdCallback);for(var b=0;b<u.length;b++)y.addContour(l||2,u[b]);return y.tesselate(e,o,s,l,h,m),{vertices:y.vertices,vertexIndices:y.vertexIndices,vertexCount:y.vertexCount,elements:y.elements,elementCount:y.elementCount,mesh:x?y.mesh:void 0}}}var aO=ze.ODD,lO=ze.NONZERO,cO=ze.POSITIVE,hO=ze.NEGATIVE,pO=ze.ABS_GEQ_TWO,uO=et.POLYGONS,dO=et.CONNECTED_POLYGONS,mO=et.BOUNDARY_CONTOURS;var ii=class extends go.BufferGeometry{constructor(e,r=12,o={}){super();this.type="ShapeGeometry";this.windingRule=ze.ODD;this.elementType=et.POLYGONS;this.polySize=3;this.vertexSize=2;this.strict=!0;this._shape=e,this._curveSegments=r,this._triangulationOptions=Object.assign({windingRule:ze.ODD,elementType:et.POLYGONS,polySize:3,vertexSize:2,strict:!0},o);let i=this._shape.extractShapePointsToFlatArray([],this._curveSegments),s=this._shape.shapeHoles.map(m=>m.extractShapePointsToFlatArray([],this._curveSegments)),a,l=!0,c=!0,h,p;for(let m=0,g=i.length/2;m<g;m++){let x=m*2,y=i[x+0],b=i[x+1];if(h!==void 0&&y!==h&&(l=!1),p!==void 0&&b!==p&&(c=!1),h=y,p=b,!l&&!c)break}!l&&!c&&(a=fo({contours:[i,...s],windingRule:this._triangulationOptions.windingRule,elementType:this._triangulationOptions.elementType,polySize:this._triangulationOptions.polySize,vertexSize:this._triangulationOptions.vertexSize,strict:this._triangulationOptions.strict}));let u=a?.vertexCount??1,d=a?.elementCount??1;if(this._positionAttribute=new go.BufferAttribute(new Float32Array(u*3),3),this._normalAttribute=new go.BufferAttribute(new Float32Array(u*3),3),this._uvAttribute=new go.BufferAttribute(new Float32Array(u*2),2),this._indexAttribute=new go.BufferAttribute(new Uint32Array(d*3),1),a){let m=1/0,g=-1/0,x=1/0,y=-1/0;for(let S=0,v=u;S<v;S++){let z=S*2,w=a.vertices[z+0],f=a.vertices[z+1];w<m&&(m=w),w>g&&(g=w),f<x&&(x=f),f>y&&(y=f)}let b=g-m,C=y-x;for(let S=0,v=u;S<v;S++){let z=S*2,w=a.vertices[z+0],f=a.vertices[z+1],D=(w-m)/b,L=(f-x)/C;this._positionAttribute.setXYZ(S,w,f,0),this._normalAttribute.setXYZ(S,0,0,1),this._uvAttribute.setXY(S,D,L)}for(let S=0,v=d;S<v;S++){let z=S*3,w=a.elements[z+0],f=a.elements[z+1],D=a.elements[z+2];this._indexAttribute.setX(z+0,w),this._indexAttribute.setX(z+1,f),this._indexAttribute.setX(z+2,D)}}this.setAttribute("position",this._positionAttribute),this.setAttribute("normal",this._normalAttribute),this.setAttribute("uv",this._uvAttribute),this.setIndex(this._indexAttribute),this.setDrawRange(0,(a?.elementCount??1)*3)}clone(){let e=new ii(this._shape,this._curveSegments);return e.userData=Hi(this.userData),e}};var yo=require("three");var Js=class{constructor(t=256,e=!1){this.capacity=t,this.size=0,this.debug=e,this.debug&&console.log(`allocating with cap ${t}`);let r=t*Js.eSize;this.buffer=new ArrayBuffer(r);let o=Float32Array.BYTES_PER_ELEMENT,i=0;this.positions=new Float32Array(this.buffer,i*o,3*t),i+=3*t,this.normals=new Float32Array(this.buffer,i*o,3*t),i+=3*t,this.uvs=new Float32Array(this.buffer,i*o,2*t)}realloc(t,e=!1){if(t<this.size)throw Error("cannot shrink buffer");if(t<=this.capacity&&!e)return;this.debug&&console.log(`resizing from ${this.capacity} \u2192 ${t}`);let r=t*Js.eSize,o=new ArrayBuffer(r),i=Float32Array.BYTES_PER_ELEMENT,s=0,a=new Float32Array(o,s*i,3*t);s+=3*t;let l=new Float32Array(o,s*i,3*t);s+=3*t;let c=new Float32Array(o,s*i,2*t);a.set(this.positions.slice(0,this.size*3)),l.set(this.normals.slice(0,this.size*3)),c.set(this.uvs.slice(0,this.size*2)),this.buffer=o,this.positions=a,this.normals=l,this.uvs=c,this.capacity=t}get(t=1){let e=this.size+t;if(e>this.capacity){let o=this.capacity;for(;e>o;)o*=2;this.realloc(o)}let r=this.size;return this.size=e,r}reserve(t){let e=this.size+t;e>this.capacity&&this.realloc(e)}shrink(){this.debug&&console.log(`shrinking ${this.capacity} \u2192 ${this.size}`),this.realloc(this.size,!0)}},sn=Js;sn.eSize=(3+3+2)*Float32Array.BYTES_PER_ELEMENT;var Tl=(n,t)=>([e,r])=>(r<e&&(r+=t),(n>=e?n:n+t)<=r),ni=class extends yo.BufferGeometry{constructor(e,r,o=0,i=12,s=3){super();this.type="ShapeGeometry";this.vertexCache={};this._shape=e,this._depth=r,this._bevel=o,this._curveSegments=i,this._bevelSegmentsInput=s,o<=0?(this._bevelSize=0,this._bevelSegments=0):(this._bevelSize=Math.min(o,r/2-1e-12),this._bevelSegments=Math.floor(s));let a=this._shape.extractShapePointsToFlatArray([],i),l=this._shape.shapeHoles.map(w=>{let f=w.extractShapePointsToFlatArray([],i),D=[];for(let L=f.length-1;L>=1;L-=2){let P=f[L-1],M=f[L-0];D.push(P,M)}return D}),c=fo({windingRule:ze.ODD,elementType:et.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[a]}),h=fo({windingRule:ze.ODD,elementType:et.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[...l]});if(!c)throw new Error("error generating geometry");let p=c.elementCount;if(h){c.elementCount+=h.elementCount;for(let w=0;w<h.elements.length;w++){let f=h.elements[w],D=w%2===0?c.vertexCount:0;c.elements.push(f+D)}for(let w=0;w<h.vertexIndices.length;w++){let f=h.vertexIndices[w],D=c.vertexCount;c.vertexIndices.push(f+D)}for(let w=0;w<h.vertices.length;w++){let f=h.vertices[w];c.vertices.push(f)}}let u=1/0,d=-1/0,m=1/0,g=-1/0;for(let w=0,f=c.vertexCount;w<f;w++){let D=w*2,L=c.vertices[D+0],P=c.vertices[D+1];L<u&&(u=L),L>d&&(d=L),P<m&&(m=P),P>g&&(g=P)}this._minX=u,this._minY=m,this._width=d-u,this._height=g-m;let x=c.vertexCount*2*(2+this._bevelSegments);this._buffer=new sn(x);let y=[],b=[];for(let w=c.elementCount-1;w>=0;w--){let f=w>=p,D=w*2,L=c.elements[D+0],P=c.elements[D+1],M=L+P,I={start:L,count:P,normals:[],continuous:[],concave:[]},k=L,q=M-1,ie=L+1,he=this._shape.roundedCurves.length;do{let R=k-L,E=c.vertices[q*2+0],B=c.vertices[q*2+1],O=c.vertices[k*2+0],_=c.vertices[k*2+1],Y=c.vertices[ie*2+0],j=c.vertices[ie*2+1],F=O-E,V=_-B,A=Math.sqrt(F*F+V*V);F/=A,V/=A;let W=O-Y,X=_-j,Q=Math.sqrt(W*W+X*X);W/=Q,X/=Q,I.normals[R*2+0]=-X,I.normals[R*2+1]=W,I.concave[R]=F*X-V*W>0;let H=c.vertexIndices[k];if(Array.isArray(H))I.continuous[R]=!1;else{let[K,$]=this._shape.getCurveIndexFromVertexId(H-1,!0);if($>0&&$<1)I.continuous[R]=!0;else{let re=$===1?K+1:K-1;re=(re+he)%he;let le=$===1?0:1,ne=this._shape.roundedCurves[K].getTangent($),fe=this._shape.roundedCurves[re].getTangent(le);I.continuous[R]=ne.dot(fe)>.95}}f&&(I.normals[R*2+0]*=-1,I.normals[R*2+1]*=-1),[q,k,ie]=[k,ie,ie+1],ie>=M&&(ie-=P)}while(ie!==L+1);let se=[];se.push({bevelI:0,angle:0,size:0,boundary:{vertices:c.vertices.slice(L*2,M*2),vertexCount:P,vertexIndices:new Array(P).fill(!0).map((R,E)=>[E,E]),elements:[0,P],elementCount:1,mesh:null},reverseMap:[],insetPoints:c.vertices.slice(L*2,M*2)});for(let R=1;R<=this._bevelSegments;R++){let E=R/this._bevelSegments*Math.PI/2,B=(1-Math.cos(E))*this._bevelSize,O=[],_=[],Y=[],j=[],F=0;for(let A=0;A<P;A++){let W=A*2,X=(A-1+P)%P*2,Q=c.vertices[I.start*2+W+0],H=c.vertices[I.start*2+W+1],K=-I.normals[X+0]*B,$=-I.normals[X+1]*B,re=-I.normals[W+0]*B,le=-I.normals[W+1]*B;if(I.concave[A]||!I.concave[A]&&f){let ne=Math.atan2($,K),fe=Math.atan2(le,re);fe>ne&&(fe-=Math.PI*2);let Ve=fe-ne;if(I.continuous[A]||f){let xe=ne+Ve/2,Ye=Math.cos(xe)*B,Te=Math.sin(xe)*B;O[2*F+0]=Q+Ye*(f?-1:1),O[2*F+1]=H+Te*(f?-1:1),j[F]=A,F++}else{let xe=Math.max(1,Math.floor(i/4*Math.abs(Ve)/Math.PI));for(let Ye=0;Ye<=xe;Ye++){let Te=ne+Ve*(Ye/xe),Lt=Math.cos(Te)*B,Ut=Math.sin(Te)*B;O[2*F+0]=Q+Lt,O[2*F+1]=H+Ut,j[F]=A,F++}}}else O[2*F+0]=Q+K,O[2*F+1]=H+$,j[F]=A,_[A]=F,F++,O[2*F+0]=Q,O[2*F+1]=H,j[F]=A,F++,O[2*F+0]=Q+re,O[2*F+1]=H+le,j[F]=A,Y[A]=F,F++}let V=fo({windingRule:ze.POSITIVE,elementType:et.BOUNDARY_CONTOURS,vertexSize:2,strict:!0,contours:[O],edgeCreateCallback:A=>{let X=A.Org.idx,Q=j[X],H=j[(X+1)%j.length];A.idx=[Q,H],A.Sym.idx=[H,Q]},vertexIdCallback:A=>{let W=A.Lprev.idx;return[W?W[1]:0,A.idx[0]]}});if(!V)throw console.log("Error"),new Error(`error generating bevel geometry for ${R}'th loop`);if(!V.vertexCount)break;for(let A=0;A<V.vertexIndices.length;A++){let[W,X]=V.vertexIndices[A];if(W===X)continue;let Q=X;X<W&&(Q+=P);for(let H=W;H<Q;H++){let K=H%P,$=(H+1)%P;if(!I.continuous[K]||!I.continuous[$]){V.vertexIndices[A]=[W,K],V.vertexIndices.splice(A+1,0,[$,X]),V.vertices.splice((A+1)*2,0,V.vertices[A*2],V.vertices[A*2+1]);break}}}se.push({bevelI:R,angle:E,size:B,boundary:V,reverseMap:j,insetPoints:O})}let J=(R,E,B)=>{let O=0,_=R.boundary.vertexIndices.length;for(;O<_&&B(R.boundary.vertexIndices[E]);)E=(E+1)%_,O++;return O},U=y.length;for(let R=1;R<se.length;R++){let E=se[R-1],B=se[R],O=E.boundary.vertexIndices.length,_=B.boundary.vertexIndices.length;if(!O||!_)break;let Y=I.concave.length,j=0,F=Tl(j,P);for(;!E.boundary.vertexIndices.filter(F).length||!B.boundary.vertexIndices.filter(F).length;)j++,F=Tl(j,P);let V=E.boundary.vertexIndices.findIndex(F),A=B.boundary.vertexIndices.findIndex(F);do V=(V+1)%O;while(F(E.boundary.vertexIndices[V]));do A=(A+1)%_;while(F(B.boundary.vertexIndices[A]));j=(j+1)%P;let W=j,X=this.buildBevelVert(I,E,(V-1+O)%O),Q=this.buildBevelVert(I,B,(A-1+_)%_),H=X,K=Q,$,re,le=!1;do{F=Tl(j,P);let ne=J(E,V,F),fe=J(B,A,F),Ve=le;if(le=!1,ne&&!fe){for(let xe=0;xe<ne;xe++)$=this.buildBevelVert(I,E,(V+xe)%O,xe/(ne-1)),y.push(H.topN,$.topP,K.topN),y.push($.bottomP,H.bottomN,K.bottomN),H=$;le=!0}else if(!ne&&fe)for(let xe=0;xe<fe;xe++)re=this.buildBevelVert(I,B,(A+xe)%_,xe/(fe-1)),y.push(K.topN,H.topP,re.topP),y.push(H.bottomP,K.bottomN,re.bottomP),K=re;else if(ne&&fe)if($=this.buildBevelVert(I,E,V,0),re=this.buildBevelVert(I,B,A,0),Ve?(y.push(H.topN,re.topP,K.topN),y.push(H.topN,$.topP,re.topP),y.push(re.bottomP,H.bottomN,K.bottomN),y.push(re.bottomP,$.bottomP,H.bottomN)):(y.push(K.topN,H.topN,$.topP),y.push(K.topN,$.topP,re.topP),y.push($.bottomP,H.bottomN,K.bottomN),y.push($.bottomP,K.bottomN,re.bottomP)),H=$,K=re,ne===fe)for(let xe=1;xe<ne;xe++)$=this.buildBevelVert(I,E,(V+xe)%O,xe/(ne-1)),re=this.buildBevelVert(I,B,(A+xe)%_,xe/(fe-1)),y.push(H.topN,$.topP,K.topN),y.push(K.topN,$.topP,re.topP),y.push($.bottomP,H.bottomN,K.bottomN),y.push($.bottomP,K.bottomN,re.bottomP),H=$,K=re;else if(ne>fe){let xe=ne/fe,Ye=0;for(let Te=1;Te<ne;Te++)$=this.buildBevelVert(I,E,(V+Te)%O,Te/(ne-1)),y.push(H.topN,$.topP,K.topN),y.push($.bottomP,H.bottomN,K.bottomN),H=$,Te>(Ye+1)*xe&&(Ye++,re=this.buildBevelVert(I,B,(A+Ye)%_,Ye/(fe-1)),y.push(K.topN,$.topP,re.topP),y.push($.bottomP,K.bottomN,re.bottomP),K=re)}else{let xe=fe/ne,Ye=0;for(let Te=1;Te<fe;Te++)re=this.buildBevelVert(I,B,(A+Te)%_,Te/(fe-1)),y.push(K.topN,$.topP,re.topP),y.push($.bottomP,K.bottomN,re.bottomP),K=re,Te>(Ye+1)*xe&&(Ye++,$=this.buildBevelVert(I,E,(V+Ye)%O,Ye/(ne-1)),y.push(H.topN,$.topP,K.topN),y.push($.bottomP,H.bottomN,K.bottomN),H=$)}V=(V+ne)%O,A=(A+fe)%_,j=(j+1)%Y}while(j!==W)}{let R=se[0];for(let E=0,B=R.boundary.vertexCount;E<B;E++){let O=this.buildBevelVert(I,R,E),_=this.buildBevelVert(I,R,(E+1)%B);y.push(_.topP,O.topN,O.bottomN),y.push(_.topP,O.bottomN,_.bottomP)}}if(f){let R=[];for(let E=y.length-1;E>=U+2;E-=3){let B=y[E-2],O=y[E-1],_=y[E-0];R.push(_,O,B)}y.splice(U,y.length-U,...R)}if(f){let R=[];for(let E=se[se.length-1].boundary.vertices.length-1;E>=1;E-=2){let B=se[se.length-1].boundary.vertices[E-1],O=se[se.length-1].boundary.vertices[E-0];R.push(B,O)}b.push(R)}if(!f){let R=se[se.length-1],E=fo({windingRule:se.length>1?ze.POSITIVE:ze.ODD,elementType:et.POLYGONS,vertexSize:2,strict:!0,contours:[R.insetPoints,...b]});if(!E)throw new Error("Error generating geometry for surface");Object.assign(this,{capStartIndex:y.length});for(let B=0;B<E.elementCount*3;B+=3){let O=this.buildSurfaceVert(E,E.elements[B+0]),_=this.buildSurfaceVert(E,E.elements[B+1]),Y=this.buildSurfaceVert(E,E.elements[B+2]);y.push(O.top,_.top,Y.top),y.push(Y.bottom,_.bottom,O.bottom)}}this.vertexCache={}}this._buffer.shrink();let C=new yo.BufferAttribute(Uint32Array.from(y),1),S=new yo.BufferAttribute(this._buffer.positions,3),v=new yo.BufferAttribute(this._buffer.normals,3),z=new yo.BufferAttribute(this._buffer.uvs,2);S.needsUpdate=!0,v.needsUpdate=!0,z.needsUpdate=!0,C.needsUpdate=!0,this.setAttribute("position",S),this.setAttribute("normal",v),this.setAttribute("uv",z),this.setIndex(C)}buildSurfaceVert(e,r){let o=r.toString();if(o in this.vertexCache)return this.vertexCache[o];let i=e.vertices[r*2+0],s=e.vertices[r*2+1],a=(i-this._minX)/this._width,l=(s-this._minY)/this._height,c=this._buffer.get(2),h=c*3,p=c*2,u={top:c+0,bottom:c+1};return this._buffer.positions[h+0]=i,this._buffer.positions[h+1]=s,this._buffer.positions[h+2]=this._depth,this._buffer.normals[h+0]=0,this._buffer.normals[h+1]=0,this._buffer.normals[h+2]=1,this._buffer.uvs[p+0]=a,this._buffer.uvs[p+1]=l,this._buffer.positions[h+3]=i,this._buffer.positions[h+4]=s,this._buffer.positions[h+5]=0,this._buffer.normals[h+3]=0,this._buffer.normals[h+4]=0,this._buffer.normals[h+5]=-1,this._buffer.uvs[p+2]=a,this._buffer.uvs[p+3]=l,this.vertexCache[o]=u,u}buildBevelVert(e,r,o,i=1){let s=`${r.bevelI}:${o}`;if(s in this.vertexCache)return this.vertexCache[s];let[a,l]=r.boundary.vertexIndices[o],c,h,p,u;a!==l?(h=a,c=l,u=!1,p=e.continuous[h]&&e.continuous[c]):(c=a,h=(c-1+e.count)%e.count,u=e.concave[c]&&r.bevelI>0,p=e.continuous[c]||u);let d=Math.cos(r.angle),m=Math.sin(r.angle),g=o*2,x=c*2,y=h*2,b=r.boundary.vertices[g+0],C=r.boundary.vertices[g+1],S=(1-m)*this._bevelSize,v=(b-this._minX)/this._width,z=(C-this._minY)/this._height,w=e.normals[x+0],f=e.normals[x+1],D=e.normals[y+0],L=e.normals[y+1];if(u){let q=D-w,ie=L-f;w=w+q*(1-i),f=f+ie*(1-i);let he=Math.sqrt(w*w+f*f);w/=he,f/=he}let P=this._buffer.get(p?2:4),M=P*3,I=P*2,k={i:o,fi:c,topP:P+0,topN:P+0,bottomP:P+1,bottomN:P+1};return this._buffer.positions[M+0]=b,this._buffer.positions[M+1]=C,this._buffer.positions[M+2]=this._depth-S,this._buffer.normals[M+0]=w*d,this._buffer.normals[M+1]=f*d,this._buffer.normals[M+2]=m,this._buffer.uvs[I+0]=v,this._buffer.uvs[I+1]=z,this._buffer.positions[M+3]=b,this._buffer.positions[M+4]=C,this._buffer.positions[M+5]=S,this._buffer.normals[M+3]=w*d,this._buffer.normals[M+4]=f*d,this._buffer.normals[M+5]=-m,this._buffer.uvs[I+2]=z,this._buffer.uvs[I+3]=v,p||(P+=2,M+=6,I+=4,k.topP=P+0,k.bottomP=P+1,this._buffer.positions[M+0]=b,this._buffer.positions[M+1]=C,this._buffer.positions[M+2]=this._depth-S,this._buffer.normals[M+0]=D*d,this._buffer.normals[M+1]=L*d,this._buffer.normals[M+2]=m,this._buffer.uvs[I+0]=v,this._buffer.uvs[I+1]=z,this._buffer.positions[M+3]=b,this._buffer.positions[M+4]=C,this._buffer.positions[M+5]=S,this._buffer.normals[M+3]=D*d,this._buffer.normals[M+4]=L*d,this._buffer.normals[M+5]=-m,this._buffer.uvs[I+2]=z,this._buffer.uvs[I+3]=v),this.vertexCache[s]=k,k}clone(){let e=new ni(this._shape,this._depth,this._bevel,this._curveSegments,this._bevelSegmentsInput);return e.userData=Hi(this.userData),e}};var nt=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,subdivisions:40,roundness:0,extrudeBevelSize:0,extrudeBevelSegments:3},n.parameters),r=Math.abs(e.width),o=Math.abs(e.height??e.width),i=Math.abs(e.depth??0),s=n.shape??t?.shape,a=s?.roundness??e.roundness;s!==void 0&&(s instanceof Ne?(s.width!==r||s.height!==o)&&s.applySize(r,o):s=new Ne(r,o).fromJSON(s),n.parameters?.roundness!==void 0&&n.parameters?.roundness>0&&s.update(!1));let l=s??new Ne(r,o);return{parameters:Object.assign(e,{width:r,height:o,depth:i,roundness:a}),shape:l}}static build(n){let{depth:t,extrudeBevelSize:e,extrudeBevelSegments:r,subdivisions:o,roundness:i}=n.parameters;n.shape.roundness=i;let s;return t<=0?s=new ii(n.shape,o):s=new ni(n.shape,t,e,o,r),Object.assign(s,{userData:{...n,type:"VectorGeometry"}})}};var ai=require("three"),Pu=Math.PI*2,Iu=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,depth:0,spikes:64,angle:360,innerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:1},n.parameters);return{shape:n.shape&&n.shape instanceof Ne?n.shape:new Ne,parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??0)})}}static build(n){let{width:t,height:e,spikes:r,angle:o,innerRadius:i,depth:s,extrudeBevelSize:a,extrudeBevelSegments:l}=n.parameters,c=n.shape,h=t*.5,p=e*.5,u=Rb(c,h,p,o*Math.PI/180,r,i);c.isClosed=!0,c.update();let d=nt.create({shape:c,parameters:{subdivisions:u,depth:s,extrudeBevelSize:a,extrudeBevelSegments:l}});return Object.assign(d,{userData:{...n,type:"EllipseGeometry"}})}};function Rb(n,t,e,r,o,i){if(r>=Pu)return o>30||o%4===0?(Vb(n,t,e,i),Math.round(o/4)):Mu(n,r,o,t,e,i);let s={x:0,y:e},a=r+Math.PI*.5,l={x:Math.cos(a)*t,y:Math.sin(a)*e},c=wu({px:s.x,py:s.y,cx:l.x,cy:l.y,rx:t,ry:e,largeArcFlag:r>Math.PI,sweepFlag:!0});return o>30||o%c.length===0?Fb(n,s.x,s.y,c,o,t,e,i):Mu(n,r,o,t,e,i)}function Fb(n,t,e,r,o,i,s,a){let l=Math.round(o/r.length);n.addPoint(si(t,e));for(let c=0,h=r.length;c<h;c++){let p=r[c],u=n.points[c],d=si(p.x,p.y);u.controls[1].position.set(p.x1,p.y1),d.controls[0].position.set(p.x2,p.y2),n.addPoint(d)}return a>0?Ou(n,i,s,a):n.addPoint(si(0,0)),l}function Mu(n,t,e,r,o,i){let s=-t/e;for(let a=0;a<=e;a++){let l=s*a,c=Math.sin(l)*r,h=Math.cos(l)*o;n.addPoint(si(c,h))}return t<Pu?i>0?Ou(n,r,o,i):n.addPoint(si(0,0)):(n.removePoint(n.points[n.points.length-1]),i>0&&Au(n,r,o,i)),1}function Vb(n,t,e,r=0,o=0,i=0){let s=.5522847498,a=t*s,l=e*s;n.addPoint(Ys(o-t,i,o-t,i-l,o-t,i+l)),n.addPoint(Ys(o,i+e,o-a,i+e,o+a,i+e)),n.addPoint(Ys(o+t,i,o+t,i+l,o+t,i-l)),n.addPoint(Ys(o,i-e,o+a,i-e,o-a,i-e)),r>0&&Au(n,t,e,r)}function si(n,t){return new Xt(ai.MathUtils.generateUUID(),new ai.Vector2(n,t))}function Ys(n,t,e,r,o,i){let s=si(n,t);return s.controls[0].position.set(e,r),s.controls[1].position.set(o,i),s}function Ou(n,t,e,r){Du(n,t,e,r).forEach(i=>n.addPoint(i))}function Au(n,t,e,r){let o=Du(n,t,e,r),i=new Ne;o.forEach(s=>i.addPoint(s)),i.isClosed=!0,n.shapeHoles.push(i)}function Du(n,t,e,r){let o=r*t/100,i=o*(Math.abs(e)/Math.abs(t)),s=new ai.Vector2(o/t,i/e),a=n.points.map(l=>{let c=l.clone();return c.uuid=ai.MathUtils.generateUUID(),c}).reverse();return a.forEach(l=>{l.position.multiply(s);let c=l.controls[0].position.clone().multiply(s),h=l.controls[1].position.clone().multiply(s);l.controls[0].position.copy(h),l.controls[1].position.copy(c)}),a}var Br=require("three"),Bu=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,revolutions:2,segments:40,pathRadius:10,pathType:0,pathSegments:30,cornerRadius:30,cornerSegments:4},n.parameters),r=Math.abs(e.width),o=Math.abs(e.height??r),i=Math.abs(e.depth??r),s=Math.abs(Math.min(r,i))/2;return{parameters:Object.assign(e,{width:r,height:o,depth:i,radius:s,segments:Math.round(e.segments),pathSegments:Math.round(e.pathSegments),cornerSegments:Math.round(e.cornerSegments)})}}static build(n){let{width:t,height:e,depth:r,radius:o,revolutions:i,segments:s,pathRadius:a,pathType:l,pathSegments:c,cornerRadius:h,cornerSegments:p}=n.parameters,u=new an(!1,t,e,r,o,i,s,a,l,c,h,p);return Object.assign(u,{userData:{...n,type:"HelixGeometry"}})}},an=class extends Br.BufferGeometry{constructor(t=!0,e=1,r=1,o=1,i=1,s=1,a=1,l=1,c=1,h=1,p=1,u=1){super();let d=t&&s===1;d&&(u=0),p>100&&(p=100);let m=()=>new Br.Vector3,g=new Br.Vector3,x=m(),y=m(),b=m(),C,S,v,z,w,f,D,L,P=m(),M=m(),I=m(),k=m(),q=m(),ie=m(),he=m(),se=m(),J=r-2*l+.001,U=J/s,R=Math.ceil(a*s),E=R+1,B=J/R,O=-J/2,_=h+1,Y=2*Math.PI/h,j=Math.PI/2/u,F=.01,V=Math.min((1-p/100)*l,l-F),A=l-V,W=0,X=2,Q=u*X+X,H=_*Q/X,K=H+_*E,$=_*(E+Q),[re,le,ne]=[3,3,2].map(He=>Array($*He).fill(0)),fe=[],Ve=i-l;function xe(He,Et){let sr=Math.PI/2;f=Et*B,L=2*Math.PI*(f%U)/U+sr,f+=O,D=Math.sin(L)*Ve,w=Math.cos(L)*Ve,t?He.set(w,D,f):He.set(w,f,D)}xe(g,-1e-10),xe(x,0),P.copy(g),xe(g,1);let Ye=g.distanceTo(x),Te=A+V,Lt=Ye*R+2*Te,Ut=V,Co=Lt-Te;for(let He=0;He<=R;He++){xe(y,He),se.subVectors(y,P).normalize(),P.copy(y),ie.copy(y).setComponent(+t+1,0).normalize(),he.crossVectors(se,ie).normalize();let Et=He===0,sr=He===R,gm=Et?3*Math.PI/2:j,ym=Et?Ut:Co,xm=Et?_:K,bm=Et?0:$-_,vm=se.clone().multiplyScalar(Et?-A:A).add(y),Sm=se.clone().multiplyScalar(Et?-1:1).normalize();for(let Mr=0;Mr<_;Mr++){let hc=Mr*Y;if(M.addVectors(g.copy(ie).multiplyScalar(l*Math.cos(hc)),x.copy(he).multiplyScalar(l*Math.sin(hc))),I.copy(M).normalize(),Et||sr){d||(W=bm+Mr,[0,1,2].forEach(Ct=>{re[W*3+Ct]=vm.getComponent(Ct),le[W*3+Ct]=Sm.getComponent(Ct)}),ne[W*2]=+sr,ne[W*2+1]=Mr/h),x.copy(I).multiplyScalar(V),b.addVectors(y,x);for(let Ct=0;Ct<u;Ct++){let Fa=Ct*j+gm;k.addVectors(g.copy(se).multiplyScalar(A*Math.sin(Fa)),x.copy(I).multiplyScalar(A*Math.cos(Fa))),q.copy(k).normalize(),x.addVectors(b,k),k.normalize(),W=xm+Ct*_+Mr,[0,1,2].forEach(jn=>{re[W*3+jn]=x.getComponent(jn),le[W*3+jn]=q.getComponent(jn)});let wm=+Et+Math.sin(Fa);ne[W*2]=(ym+A*wm)/Lt,ne[W*2+1]=Mr/h}}x.addVectors(y,M),W=H+He*_+Mr,[0,1,2].forEach(Ct=>{re[W*3+Ct]=x.getComponent(Ct),le[W*3+Ct]=I.getComponent(Ct)}),ne[W*2]=(Te+He*Ye)/Lt,ne[W*2+1]=Mr/h}}let Bt=E+2*u+X,To=1,[Vn,Un]=d?[To,To+E-1]:[0,Bt-1];for(let He=Vn;He<=Un-1;He++){let Et=d&&He===Un-1;for(let sr=0;sr<_-1;sr++)C=He*_+sr,S=C+1,v=(Et?sr:C)+_,z=(Et?sr+1:S)+_,He===0?fe.push(S,z,v):He===Bt-2?fe.push(C,S,v):fe.push(C,S,v,S,z,v)}this.setIndex(fe),this.setAttribute("position",new Br.Float32BufferAttribute(re,3)),this.setAttribute("normal",new Br.Float32BufferAttribute(le,3)),this.setAttribute("uv",new Br.Float32BufferAttribute(ne,2))}};var Eu=require("three");var _u=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,detail:0,corner:0,cornerSides:4},n.parameters);return{parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??e.width)})}}static build(n){let{width:t,height:e,depth:r,detail:o,corner:i,cornerSides:s}=n.parameters,a=o===0&&i!==0?new ln(t*.5,i,s):new Eu.IcosahedronBufferGeometry(t*.5,o);return a.scale(1,e/t,r/t),Object.assign(a,{userData:{...n,type:"IcosahedronGeometry"}})}},ln=class extends Yr{constructor(t=1,e=.2,r=4){let o=(1+Math.sqrt(5))/2,i=[-1,o,0,1,o,0,-1,-o,0,1,-o,0,0,-1,o,0,1,o,0,-1,-o,0,1,-o,o,0,-1,o,0,1,-o,0,-1,-o,0,1],s=[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],a="IcosahedronGeometry";super(i,s,a,t,e,r),this.type=a}static fromJSON(t){return new ln(t.radius,t.corner,t.cornerSides)}};var Ks=require("three"),Gu=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){(n.parameters?.points??[]).forEach(r=>{Array.isArray(r)&&(r.x=r[0],r.y=r[1])});let e=Object.assign({},t?.parameters??{width:100,segments:64,verticalSegments:64,points:[{x:0,y:-50,id:0},{x:50,y:-50,id:1},{x:50,y:50,id:2},{x:0,y:50,id:3}]},n.parameters);return{parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??e.width)})}}static build(n){let{points:t,segments:e,verticalSegments:r}=n.parameters,o=new Ks.Shape;o.moveTo(t[0].x,t[0].y),o.bezierCurveTo(t[1].x,t[1].y,t[2].x,t[2].y,t[3].x,t[3].y);let i=new Ks.LatheBufferGeometry(o.extractPoints(r).shape,e);return i.rotateZ(Math.PI),Object.assign(i,{userData:{...n,type:"LatheGeometry"}})}};var fr=require("three");var Er=require("three");var oe=require("three"),mr=new oe.Matrix4,Ml=new oe.Object3D,Xs=new oe.Vector3,Xr=class extends oe.EventDispatcher{constructor(){super(),this.uuid=oe.MathUtils.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}applyMatrix4(t){let e=new oe.Matrix3().getNormalMatrix(t);for(let r=0,o=this.vertices.length;r<o;r++)this.vertices[r].applyMatrix4(t);for(let r=0,o=this.faces.length;r<o;r++){let i=this.faces[r];i.normal.applyMatrix3(e).normalize();for(let s=0,a=i.vertexNormals.length;s<a;s++)i.vertexNormals[s].applyMatrix3(e).normalize()}return this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this.verticesNeedUpdate=!0,this.normalsNeedUpdate=!0,this}rotateX(t){return mr.makeRotationX(t),this.applyMatrix4(mr),this}rotateY(t){return mr.makeRotationY(t),this.applyMatrix4(mr),this}rotateZ(t){return mr.makeRotationZ(t),this.applyMatrix4(mr),this}translate(t,e,r){return mr.makeTranslation(t,e,r),this.applyMatrix4(mr),this}scale(t,e,r){return mr.makeScale(t,e,r),this.applyMatrix4(mr),this}lookAt(t){return Ml.lookAt(t),Ml.updateMatrix(),this.applyMatrix4(Ml.matrix),this}fromBufferGeometry(t){let e=this,r=t.index!==null?t.index:void 0,o=t.attributes;if(o.position===void 0)return console.error("THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion."),this;let i=o.position,s=o.normal,a=o.color,l=o.uv,c=o.uv2;c!==void 0&&(this.faceVertexUvs[1]=[]);for(let u=0;u<i.count;u++)e.vertices.push(new oe.Vector3().fromBufferAttribute(i,u)),a!==void 0&&e.colors.push(new oe.Color().fromBufferAttribute(a,u));function h(u,d,m,g){let x=a===void 0?[]:[e.colors[u].clone(),e.colors[d].clone(),e.colors[m].clone()],y=s===void 0?[]:[new oe.Vector3().fromBufferAttribute(s,u),new oe.Vector3().fromBufferAttribute(s,d),new oe.Vector3().fromBufferAttribute(s,m)],b=new li(u,d,m,y,x,g);e.faces.push(b),l!==void 0&&e.faceVertexUvs[0].push([new oe.Vector2().fromBufferAttribute(l,u),new oe.Vector2().fromBufferAttribute(l,d),new oe.Vector2().fromBufferAttribute(l,m)]),c!==void 0&&e.faceVertexUvs[1].push([new oe.Vector2().fromBufferAttribute(c,u),new oe.Vector2().fromBufferAttribute(c,d),new oe.Vector2().fromBufferAttribute(c,m)])}let p=t.groups;if(p.length>0)for(let u=0;u<p.length;u++){let d=p[u],m=d.start,g=d.count;for(let x=m,y=m+g;x<y;x+=3)r!==void 0?h(r.getX(x),r.getX(x+1),r.getX(x+2),d.materialIndex):h(x,x+1,x+2,d.materialIndex)}else if(r!==void 0)for(let u=0;u<r.count;u+=3)h(r.getX(u),r.getX(u+1),r.getX(u+2));else for(let u=0;u<i.count;u+=3)h(u,u+1,u+2);return this.computeFaceNormals(),t.boundingBox!==null&&(this.boundingBox=t.boundingBox.clone()),t.boundingSphere!==null&&(this.boundingSphere=t.boundingSphere.clone()),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Xs).negate(),this.translate(Xs.x,Xs.y,Xs.z),this}normalize(){this.computeBoundingSphere();let t=this.boundingSphere.center,e=this.boundingSphere.radius,r=e===0?1:1/e,o=new oe.Matrix4;return o.set(r,0,0,-r*t.x,0,r,0,-r*t.y,0,0,r,-r*t.z,0,0,0,1),this.applyMatrix4(o),this}computeFaceNormals(){let t=new oe.Vector3,e=new oe.Vector3;for(let r=0,o=this.faces.length;r<o;r++){let i=this.faces[r],s=this.vertices[i.a],a=this.vertices[i.b],l=this.vertices[i.c];t.subVectors(l,a),e.subVectors(s,a),t.cross(e),t.normalize(),i.normal.copy(t)}}computeVertexNormals(t=!0){let e=new Array(this.vertices.length);for(let r=0,o=this.vertices.length;r<o;r++)e[r]=new oe.Vector3;if(t){let r=new oe.Vector3,o=new oe.Vector3;for(let i=0,s=this.faces.length;i<s;i++){let a=this.faces[i],l=this.vertices[a.a],c=this.vertices[a.b],h=this.vertices[a.c];r.subVectors(h,c),o.subVectors(l,c),r.cross(o),e[a.a].add(r),e[a.b].add(r),e[a.c].add(r)}}else{this.computeFaceNormals();for(let r=0,o=this.faces.length;r<o;r++){let i=this.faces[r];e[i.a].add(i.normal),e[i.b].add(i.normal),e[i.c].add(i.normal)}}for(let r=0,o=this.vertices.length;r<o;r++)e[r].normalize();for(let r=0,o=this.faces.length;r<o;r++){let i=this.faces[r],s=i.vertexNormals;s.length===3?(s[0].copy(e[i.a]),s[1].copy(e[i.b]),s[2].copy(e[i.c])):(s[0]=e[i.a].clone(),s[1]=e[i.b].clone(),s[2]=e[i.c].clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeFlatVertexNormals(){this.computeFaceNormals();for(let t=0,e=this.faces.length;t<e;t++){let r=this.faces[t],o=r.vertexNormals;o.length===3?(o[0].copy(r.normal),o[1].copy(r.normal),o[2].copy(r.normal)):(o[0]=r.normal.clone(),o[1]=r.normal.clone(),o[2]=r.normal.clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeMorphNormals(){for(let e=0,r=this.faces.length;e<r;e++){let o=this.faces[e];o.__originalFaceNormal?o.__originalFaceNormal.copy(o.normal):o.__originalFaceNormal=o.normal.clone(),o.__originalVertexNormals||(o.__originalVertexNormals=[]);for(let i=0,s=o.vertexNormals.length;i<s;i++)o.__originalVertexNormals[i]?o.__originalVertexNormals[i].copy(o.vertexNormals[i]):o.__originalVertexNormals[i]=o.vertexNormals[i].clone()}let t=new Xr;t.faces=this.faces;for(let e=0,r=this.morphTargets.length;e<r;e++){if(!this.morphNormals[e]){this.morphNormals[e]={},this.morphNormals[e].faceNormals=[],this.morphNormals[e].vertexNormals=[];let i=this.morphNormals[e].faceNormals,s=this.morphNormals[e].vertexNormals;for(let a=0,l=this.faces.length;a<l;a++){let c=new oe.Vector3,h={a:new oe.Vector3,b:new oe.Vector3,c:new oe.Vector3};i.push(c),s.push(h)}}let o=this.morphNormals[e];t.vertices=this.morphTargets[e].vertices,t.computeFaceNormals(),t.computeVertexNormals();for(let i=0,s=this.faces.length;i<s;i++){let a=this.faces[i],l=o.faceNormals[i],c=o.vertexNormals[i];l.copy(a.normal),c.a.copy(a.vertexNormals[0]),c.b.copy(a.vertexNormals[1]),c.c.copy(a.vertexNormals[2])}}for(let e=0,r=this.faces.length;e<r;e++){let o=this.faces[e];o.normal=o.__originalFaceNormal,o.vertexNormals=o.__originalVertexNormals}}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new oe.Box3),this.boundingBox.setFromPoints(this.vertices)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new oe.Sphere),this.boundingSphere.setFromPoints(this.vertices)}merge(t,e,r=0){if(!(t&&t.isGeometry)){console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",t);return}let o,i=this.vertices.length,s=this.vertices,a=t.vertices,l=this.faces,c=t.faces,h=this.colors,p=t.colors;e!==void 0&&(o=new oe.Matrix3().getNormalMatrix(e));for(let u=0,d=a.length;u<d;u++){let g=a[u].clone();e!==void 0&&g.applyMatrix4(e),s.push(g)}for(let u=0,d=p.length;u<d;u++)h.push(p[u].clone());for(let u=0,d=c.length;u<d;u++){let m=c[u],g,x,y=m.vertexNormals,b=m.vertexColors,C=new li(m.a+i,m.b+i,m.c+i);C.normal.copy(m.normal),o!==void 0&&C.normal.applyMatrix3(o).normalize();for(let S=0,v=y.length;S<v;S++)g=y[S].clone(),o!==void 0&&g.applyMatrix3(o).normalize(),C.vertexNormals.push(g);C.color.copy(m.color);for(let S=0,v=b.length;S<v;S++)x=b[S],C.vertexColors.push(x.clone());C.materialIndex=m.materialIndex+r,l.push(C)}for(let u=0,d=t.faceVertexUvs.length;u<d;u++){let m=t.faceVertexUvs[u];this.faceVertexUvs[u]===void 0&&(this.faceVertexUvs[u]=[]);for(let g=0,x=m.length;g<x;g++){let y=m[g],b=[];for(let C=0,S=y.length;C<S;C++)b.push(y[C].clone());this.faceVertexUvs[u].push(b)}}}mergeMesh(t){if(!(t&&t.isMesh)){console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",t);return}t.matrixAutoUpdate&&t.updateMatrix(),this.merge(t.geometry,t.matrix)}mergeVertices(t=4){let e={},r=[],o=[],i=Math.pow(10,t);for(let l=0,c=this.vertices.length;l<c;l++){let h=this.vertices[l],p=Math.round(h.x*i)+"_"+Math.round(h.y*i)+"_"+Math.round(h.z*i);e[p]===void 0?(e[p]=l,r.push(this.vertices[l]),o[l]=r.length-1):o[l]=o[e[p]]}let s=[];for(let l=0,c=this.faces.length;l<c;l++){let h=this.faces[l];h.a=o[h.a],h.b=o[h.b],h.c=o[h.c];let p=[h.a,h.b,h.c];for(let u=0;u<3;u++)if(p[u]===p[(u+1)%3]){s.push(l);break}}for(let l=s.length-1;l>=0;l--){let c=s[l];this.faces.splice(c,1);for(let h=0,p=this.faceVertexUvs.length;h<p;h++)this.faceVertexUvs[h].splice(c,1)}let a=this.vertices.length-r.length;return this.vertices=r,a}setFromPoints(t){this.vertices=[];for(let e=0,r=t.length;e<r;e++){let o=t[e];this.vertices.push(new oe.Vector3(o.x,o.y,o.z||0))}return this}sortFacesByMaterialIndex(){let t=this.faces,e=t.length;for(let l=0;l<e;l++)t[l]._id=l;function r(l,c){return l.materialIndex-c.materialIndex}t.sort(r);let o=this.faceVertexUvs[0],i=this.faceVertexUvs[1],s,a;o&&o.length===e&&(s=[]),i&&i.length===e&&(a=[]);for(let l=0;l<e;l++){let c=t[l]._id;s&&s.push(o[c]),a&&a.push(i[c])}s&&(this.faceVertexUvs[0]=s),a&&(this.faceVertexUvs[1]=a)}toJSON(){let t={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==""&&(t.name=this.name),this.parameters!==void 0){let m=this.parameters;for(let g in m)m[g]!==void 0&&(t[g]=m[g]);return t}let e=[];for(let m=0;m<this.vertices.length;m++){let g=this.vertices[m];e.push(g.x,g.y,g.z)}let r=[],o=[],i={},s=[],a={},l=[],c={};for(let m=0;m<this.faces.length;m++){let g=this.faces[m],x=!0,y=!1,b=this.faceVertexUvs[0][m]!==void 0,C=g.normal.length()>0,S=g.vertexNormals.length>0,v=g.color.r!==1||g.color.g!==1||g.color.b!==1,z=g.vertexColors.length>0,w=0;if(w=h(w,0,0),w=h(w,1,x),w=h(w,2,y),w=h(w,3,b),w=h(w,4,C),w=h(w,5,S),w=h(w,6,v),w=h(w,7,z),r.push(w),r.push(g.a,g.b,g.c),r.push(g.materialIndex),b){let f=this.faceVertexUvs[0][m];r.push(d(f[0]),d(f[1]),d(f[2]))}if(C&&r.push(p(g.normal)),S){let f=g.vertexNormals;r.push(p(f[0]),p(f[1]),p(f[2]))}if(v&&r.push(u(g.color)),z){let f=g.vertexColors;r.push(u(f[0]),u(f[1]),u(f[2]))}}function h(m,g,x){return x?m|1<<g:m&~(1<<g)}function p(m){let g=m.x.toString()+m.y.toString()+m.z.toString();return i[g]!==void 0||(i[g]=o.length/3,o.push(m.x,m.y,m.z)),i[g]}function u(m){let g=m.r.toString()+m.g.toString()+m.b.toString();return a[g]!==void 0||(a[g]=s.length,s.push(m.getHex())),a[g]}function d(m){let g=m.x.toString()+m.y.toString();return c[g]!==void 0||(c[g]=l.length/2,l.push(m.x,m.y)),c[g]}return t.data={},t.data.vertices=e,t.data.normals=o,s.length>0&&(t.data.colors=s),l.length>0&&(t.data.uvs=[l]),t.data.faces=r,t}clone(){return new Xr().copy(this)}copy(t){this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;let e=t.vertices;for(let u=0,d=e.length;u<d;u++)this.vertices.push(e[u].clone());let r=t.colors;for(let u=0,d=r.length;u<d;u++)this.colors.push(r[u].clone());let o=t.faces;for(let u=0,d=o.length;u<d;u++)this.faces.push(o[u].clone());for(let u=0,d=t.faceVertexUvs.length;u<d;u++){let m=t.faceVertexUvs[u];this.faceVertexUvs[u]===void 0&&(this.faceVertexUvs[u]=[]);for(let g=0,x=m.length;g<x;g++){let y=m[g],b=[];for(let C=0,S=y.length;C<S;C++){let v=y[C];b.push(v.clone())}this.faceVertexUvs[u].push(b)}}let i=t.morphTargets;for(let u=0,d=i.length;u<d;u++){let m={};if(m.name=i[u].name,i[u].vertices!==void 0){m.vertices=[];for(let g=0,x=i[u].vertices.length;g<x;g++)m.vertices.push(i[u].vertices[g].clone())}if(i[u].normals!==void 0){m.normals=[];for(let g=0,x=i[u].normals.length;g<x;g++)m.normals.push(i[u].normals[g].clone())}this.morphTargets.push(m)}let s=t.morphNormals;for(let u=0,d=s.length;u<d;u++){let m={};if(s[u].vertexNormals!==void 0){m.vertexNormals=[];for(let g=0,x=s[u].vertexNormals.length;g<x;g++){let y=s[u].vertexNormals[g],b={};b.a=y.a.clone(),b.b=y.b.clone(),b.c=y.c.clone(),m.vertexNormals.push(b)}}if(s[u].faceNormals!==void 0){m.faceNormals=[];for(let g=0,x=s[u].faceNormals.length;g<x;g++)m.faceNormals.push(s[u].faceNormals[g].clone())}this.morphNormals.push(m)}let a=t.skinWeights;for(let u=0,d=a.length;u<d;u++)this.skinWeights.push(a[u].clone());let l=t.skinIndices;for(let u=0,d=l.length;u<d;u++)this.skinIndices.push(l[u].clone());let c=t.lineDistances;for(let u=0,d=c.length;u<d;u++)this.lineDistances.push(c[u]);let h=t.boundingBox;h!==null&&(this.boundingBox=h.clone());let p=t.boundingSphere;return p!==null&&(this.boundingSphere=p.clone()),this.elementsNeedUpdate=t.elementsNeedUpdate,this.verticesNeedUpdate=t.verticesNeedUpdate,this.uvsNeedUpdate=t.uvsNeedUpdate,this.normalsNeedUpdate=t.normalsNeedUpdate,this.colorsNeedUpdate=t.colorsNeedUpdate,this.lineDistancesNeedUpdate=t.lineDistancesNeedUpdate,this.groupsNeedUpdate=t.groupsNeedUpdate,this}toBufferGeometry(){let t=new Pl().fromGeometry(this),e=new oe.BufferGeometry,r=new Float32Array(t.vertices.length*3);if(e.setAttribute("position",new oe.BufferAttribute(r,3).copyVector3sArray(t.vertices)),t.normals.length>0){let o=new Float32Array(t.normals.length*3);e.setAttribute("normal",new oe.BufferAttribute(o,3).copyVector3sArray(t.normals))}if(t.colors.length>0){let o=new Float32Array(t.colors.length*3);e.setAttribute("color",new oe.BufferAttribute(o,3).copyColorsArray(t.colors))}if(t.uvs.length>0){let o=new Float32Array(t.uvs.length*2);e.setAttribute("uv",new oe.BufferAttribute(o,2).copyVector2sArray(t.uvs))}if(t.uvs2.length>0){let o=new Float32Array(t.uvs2.length*2);e.setAttribute("uv2",new oe.BufferAttribute(o,2).copyVector2sArray(t.uvs2))}e.groups=t.groups;for(let o in t.morphTargets){let i=[],s=t.morphTargets[o];for(let a=0,l=s.length;a<l;a++){let c=s[a],h=new oe.Float32BufferAttribute(c.data.length*3,3);h.name=c.name,i.push(h.copyVector3sArray(c.data))}e.morphAttributes[o]=i}if(t.skinIndices.length>0){let o=new oe.Float32BufferAttribute(t.skinIndices.length*4,4);e.setAttribute("skinIndex",o.copyVector4sArray(t.skinIndices))}if(t.skinWeights.length>0){let o=new oe.Float32BufferAttribute(t.skinWeights.length*4,4);e.setAttribute("skinWeight",o.copyVector4sArray(t.skinWeights))}return t.boundingSphere!==null&&(e.boundingSphere=t.boundingSphere.clone()),t.boundingBox!==null&&(e.boundingBox=t.boundingBox.clone()),e}computeTangents(){console.error("THREE.Geometry: .computeTangents() has been removed.")}computeLineDistances(){console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")}applyMatrix(t){return console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4()."),this.applyMatrix4(t)}dispose(){this.dispatchEvent({type:"dispose"})}static createBufferGeometryFromObject(t){let e=new oe.BufferGeometry,r=t.geometry;if(t.isPoints||t.isLine){let o=new oe.Float32BufferAttribute(r.vertices.length*3,3),i=new oe.Float32BufferAttribute(r.colors.length*3,3);if(e.setAttribute("position",o.copyVector3sArray(r.vertices)),e.setAttribute("color",i.copyColorsArray(r.colors)),r.lineDistances&&r.lineDistances.length===r.vertices.length){let s=new oe.Float32BufferAttribute(r.lineDistances.length,1);e.setAttribute("lineDistance",s.copyArray(r.lineDistances))}r.boundingSphere!==null&&(e.boundingSphere=r.boundingSphere.clone()),r.boundingBox!==null&&(e.boundingBox=r.boundingBox.clone())}else t.isMesh&&(e=r.toBufferGeometry());return e}};Xr.prototype.isGeometry=!0;var Pl=class{constructor(){this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.uvs2=[],this.groups=[],this.morphTargets={},this.skinWeights=[],this.skinIndices=[],this.boundingBox=null,this.boundingSphere=null,this.verticesNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.uvsNeedUpdate=!1,this.groupsNeedUpdate=!1}computeGroups(t){let e=[],r,o,i,s=t.faces;for(o=0;o<s.length;o++){let a=s[o];a.materialIndex!==i&&(i=a.materialIndex,r!==void 0&&(r.count=o*3-r.start,e.push(r)),r={start:o*3,materialIndex:i})}r!==void 0&&(r.count=o*3-r.start,e.push(r)),this.groups=e}fromGeometry(t){let e=t.faces,r=t.vertices,o=t.faceVertexUvs,i=o[0]&&o[0].length>0,s=o[1]&&o[1].length>0,a=t.morphTargets,l=a.length,c;if(l>0){c=[];for(let y=0;y<l;y++)c[y]={name:a[y].name,data:[]};this.morphTargets.position=c}let h=t.morphNormals,p=h.length,u;if(p>0){u=[];for(let y=0;y<p;y++)u[y]={name:h[y].name,data:[]};this.morphTargets.normal=u}let d=t.skinIndices,m=t.skinWeights,g=d.length===r.length,x=m.length===r.length;r.length>0&&e.length===0&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(let y=0;y<e.length;y++){let b=e[y];this.vertices.push(r[b.a],r[b.b],r[b.c]);let C=b.vertexNormals;if(C.length===3)this.normals.push(C[0],C[1],C[2]);else{let v=b.normal;this.normals.push(v,v,v)}let S=b.vertexColors;if(S.length===3)this.colors.push(S[0],S[1],S[2]);else{let v=b.color;this.colors.push(v,v,v)}if(i===!0){let v=o[0][y];v!==void 0?this.uvs.push(v[0],v[1],v[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",y),this.uvs.push(new oe.Vector2,new oe.Vector2,new oe.Vector2))}if(s===!0){let v=o[1][y];v!==void 0?this.uvs2.push(v[0],v[1],v[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",y),this.uvs2.push(new oe.Vector2,new oe.Vector2,new oe.Vector2))}for(let v=0;v<l;v++){let z=a[v].vertices;c[v].data.push(z[b.a],z[b.b],z[b.c])}for(let v=0;v<p;v++){let z=h[v].vertexNormals[y];u[v].data.push(z.a,z.b,z.c)}g&&this.skinIndices.push(d[b.a],d[b.b],d[b.c]),x&&this.skinWeights.push(m[b.a],m[b.b],m[b.c])}return this.computeGroups(t),this.verticesNeedUpdate=t.verticesNeedUpdate,this.normalsNeedUpdate=t.normalsNeedUpdate,this.colorsNeedUpdate=t.colorsNeedUpdate,this.uvsNeedUpdate=t.uvsNeedUpdate,this.groupsNeedUpdate=t.groupsNeedUpdate,t.boundingSphere!==null&&(this.boundingSphere=t.boundingSphere.clone()),t.boundingBox!==null&&(this.boundingBox=t.boundingBox.clone()),this}},li=class{constructor(t,e,r,o,i,s=0){this.a=t,this.b=e,this.c=r,this.normal=o&&o.isVector3?o:new oe.Vector3,this.vertexNormals=Array.isArray(o)?o:[],this.color=i&&i.isColor?i:new oe.Color,this.vertexColors=Array.isArray(i)?i:[],this.materialIndex=s}clone(){return new this.constructor().copy(this)}copy(t){this.a=t.a,this.b=t.b,this.c=t.c,this.normal.copy(t.normal),this.color.copy(t.color),this.materialIndex=t.materialIndex;for(let e=0,r=t.vertexNormals.length;e<r;e++)this.vertexNormals[e]=t.vertexNormals[e].clone();for(let e=0,r=t.vertexColors.length;e<r;e++)this.vertexColors[e]=t.vertexColors[e].clone();return this}};var Ub=["a","b","c"];function jb(n,t){switch(t){case"c":return n.c;case"b":return n.b;case"a":default:return n.a}}function Il(n,t,e){let r=Math.min(n,t),o=Math.max(n,t),i=r+"_"+o;return e.get(i)}function Ol(n,t,e,r,o,i){let s=Math.min(n,t),a=Math.max(n,t),l=s+"_"+a,c;if(r.has(l))c=r.get(l);else{let h=e[s],p=e[a];c={a:h,b:p,newEdge:null,faces:[]},r.set(l,c)}c.faces.push(o),i[n].edges.push(c),i[t].edges.push(c)}function kb(n,t,e,r){let o,i,s;for(o=0,i=n.length;o<i;o++)e[o]={edges:[]};for(o=0,i=t.length;o<i;o++)s=t[o],Ol(s.a,s.b,n,r,s,e),Ol(s.b,s.c,n,r,s,e),Ol(s.c,s.a,n,r,s,e)}function Qs(n,t,e,r,o){n.push(new li(t,e,r,void 0,void 0,o))}function ci(n,t){return Math.abs(t-n)/2+Math.min(n,t)}function Zs(n,t,e,r){n.push([t.clone(),e.clone(),r.clone()])}var ea=class{constructor(t=1){this.subdivisions=t}modify(t){t instanceof Er.BufferGeometry?t=new Xr().fromBufferGeometry(t):t=t.clone(),t.mergeVertices();let e=this.subdivisions;for(;e-- >0;)this._smooth(t);return t.computeFaceNormals(),t.computeVertexNormals(),t}_smooth(t){let e=new Er.Vector3,r,o,i,s,a,l=t.vertices,c=t.faces,h=t.faceVertexUvs[0],p=h!==void 0&&h.length>0,u=[],d=new Map;kb(l,c,u,d);let m=[],g,x,y,b,C,S,v;for(let F of Array.from(d.keys())){for(x=d.get(F),y=new Er.Vector3,C=3/8,S=1/8,v=x.faces.length,v!=2&&(C=.5,S=0,v!=1),y.addVectors(x.a,x.b).multiplyScalar(C),e.set(0,0,0),s=0;s<v;s++){for(b=x.faces[s],a=0;a<3&&(g=l[jb(b,Ub[a])],!(g!==x.a&&g!==x.b));a++);g&&e.add(g)}e.multiplyScalar(S),y.add(e),x.newEdge=m.length,m.push(y)}let z,w,f,D,L,P,M,I=[];for(o=0,i=l.length;o<i;o++){for(P=l[o],L=u[o].edges,r=L.length,r==3?z=3/16:r>3&&(z=3/(8*r)),w=1-r*Number(z),f=z,r<=2&&(r==2?(w=3/4,f=1/8):r==1||r==0),M=P.clone().multiplyScalar(w),e.set(0,0,0),s=0;s<r;s++)D=L[s],g=D.a!==P?D.a:D.b,e.add(g);e.multiplyScalar(Number(f)),M.add(e),I.push(M)}let k=I.concat(m),q=I.length,ie,he,se,J=[],U=[],R,E,B,O,_=new Er.Vector2,Y=new Er.Vector2,j=new Er.Vector2;for(o=0,i=c.length;o<i;o++)b=c[o],ie=Number(Il(b.a,b.b,d).newEdge)+q,he=Number(Il(b.b,b.c,d).newEdge)+q,se=Number(Il(b.c,b.a,d).newEdge)+q,Qs(J,ie,he,se,b.materialIndex),Qs(J,b.a,ie,se,b.materialIndex),Qs(J,b.b,he,ie,b.materialIndex),Qs(J,b.c,se,he,b.materialIndex),p&&(R=h[o],E=R[0],B=R[1],O=R[2],_.set(ci(E.x,B.x),ci(E.y,B.y)),Y.set(ci(B.x,O.x),ci(B.y,O.y)),j.set(ci(E.x,O.x),ci(E.y,O.y)),Zs(U,_,Y,j),Zs(U,E,_,j),Zs(U,B,Y,_),Zs(U,O,j,Y));t.vertices=k,t.faces=J,p&&(t.faceVertexUvs[0]=U)}};var tt=new fr.Vector3,zu=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=n.geometry??t?.geometry??new fr.BufferGeometry().copy(new fr.BoxBufferGeometry(100,100,100)),r;t===void 0?(e.computeBoundingBox(),e.boundingBox.getSize(tt),r={width:tt.x,height:tt.y,depth:tt.z,subdivisions:0}):r=t.parameters;let o={...r,...n.parameters};return{parameters:{width:Math.abs(o.width),height:Math.abs(o.height),depth:Math.abs(o.depth),subdivisions:Math.abs(o.subdivisions)},geometry:e}}static build(n){let{width:t,height:e,depth:r,subdivisions:o}=n.parameters,i=n.geometry??new fr.BufferGeometry().copy(new fr.BoxBufferGeometry(100,100,100)),s=i.userData.parameters;s===void 0?(i.computeBoundingBox(),i.boundingBox.getSize(tt)):tt.set(s.width,s.height,s.depth),(t!==tt.x||e!==tt.y||r!==tt.z)&&i.scale(tt.x===0?1:t/tt.x,tt.y===0?1:e/tt.y,tt.z===0?1:r/tt.z);let a=i.originalGeometry;return o>0?(a===void 0||s?.subdivisions!==o)&&(a===void 0&&(a=i),i=new ea(o).modify(a).toBufferGeometry()):(a!==void 0&&(i=a),a=void 0,i.getAttribute("normal")===void 0&&i.computeVertexNormals()),a!==void 0&&Object.assign(i,{originalGeometry:a}),delete n.geometry,Object.assign(i,{userData:{...n,type:"NonParametricGeometry"}})}static loadFromUrl(n,t,e){new fr.BufferGeometryLoader(e).load(n,o=>{let i=this.normalizeInputs({geometry:o});o.boundingBox.getSize(tt);let s=100/tt.x;Object.assign(i.parameters,{width:100,height:tt.y*s,depth:tt.z*s}),t(this.build(i))})}};var Ru=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,depth:0,spikes:5,cornerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:3},n.parameters);return{shape:n.shape&&n.shape instanceof Ne?n.shape:new Ne,parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??0)})}}static build(n){let{width:t,height:e,spikes:r,cornerRadius:o,depth:i,extrudeBevelSize:s,extrudeBevelSegments:a}=n.parameters,l=n.shape,c=t*.5,h=e*.5,p=0,u=0,d=2*Math.PI/r;for(let g=0;g<r;g++){let x=d*g,y=p+Math.sin(x)*c,b=u+Math.cos(x)*h;l.addPoint(l.createPoint(y,b))}l.isClosed=!0;for(let g=0,x=l.points.length;g<x;g++)l.points[g].roundness=o;l.roundness=o,l.update();let m=nt.create({shape:l,parameters:{roundness:o,depth:i,extrudeBevelSize:s,extrudeBevelSegments:a}});return Object.assign(m,{userData:{...n,type:"PolygonGeometry"}})}};var ve=require("three"),Fu=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,radialSegments:4,heightSegments:1,cornerRadius:0,cornerSegments:8,openEnded:!1},n.parameters);return{parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??e.width)})}}static build(n){let{width:t,height:e,depth:r,radialSegments:o,heightSegments:i,openEnded:s,cornerRadius:a,cornerSegments:l}=n.parameters,c=new Dl(t*.5,e,o,i,s,a,l);return c.scale(1,1,r/t),Object.assign(c,{userData:{...n,type:"PyramidGeometry"}})}};function cn(n,t,e){e.x=n.x*t.x,e.y=n.y,e.z=n.x*t.y}function Al(n,t,e,r,o,i){let s=t.clone().sub(n),a=e.clone().sub(n),l=s.angleTo(a);if(s.normalize(),a.normalize(),r===o){let c=s.add(a).normalize();i.copy(n).addScaledVector(c,r/Math.sin(l/2))}else{let c=s.angleTo(a);i.copy(n),i.addScaledVector(s,o/Math.sin(c)),i.addScaledVector(a,r/Math.sin(c))}}function Hb(n,t,e){let r=n.clone().sub(t),o=e.clone().sub(t);return r.projectOnVector(o),r.add(t)}var Dl=class extends ve.BufferGeometry{constructor(t=.5,e=1,r=4,o=1,i=!1,s=0,a=4){super(),r=Math.floor(Math.max(3,r)),o=Math.floor(o),a=Math.floor(a);let l=[],c=[],h=[],p=[],u=0,d=e/2,m=Math.PI/r,g=t*Math.cos(Math.PI/r),x=2*Math.PI/r,y=(r-2)*Math.PI/r,b=Math.PI-y,C=new ve.Vector3(0,-d,0),S=new ve.Vector3(0,d,0),v=new ve.Vector2(t,-d),z=new ve.Vector2(g,-d),w=new ve.Vector2(0,S.y).sub(z),f=new ve.Vector2(0,S.y).sub(v),D=new ve.Vector2(w.y,-w.x).normalize(),L=new ve.Vector2(f.y,-f.x).normalize(),M=t*Math.cos(Math.PI/r)*Math.tan((Math.PI-w.angle())/2)-1e-8;s=Math.min(s,M);let I;{let U=new ve.Vector3(D.x,D.y,0),R=new ve.Vector3(Math.cos(x)*U.x,U.y,Math.sin(x)*U.x);I=U.angleTo(R)}let k=s/Math.tan((Math.PI-w.angle())/2),q=s/Math.tan((Math.PI-I)/2),ie=new ve.Vector3;if(!i){c.push(C.x,C.y,C.z),h.push(0,-1,0),p.push(0,0);let U=u++,R=[],E=v.clone(),B=k/Math.cos(Math.PI/r);E.x-=B;for(let O=0;O<r;O++){let _=O/r*Math.PI*2+m,Y=new ve.Vector2(Math.sin(_),Math.cos(_));cn(E,Y,ie),c.push(ie.x,ie.y,ie.z),h.push(0,-1,0),p.push(0,0),R.push(u++)}for(let O=0;O<R.length;O++)l.push(R[O],U,R[(O+1)%R.length])}let he=[];{let U=new ve.Vector3,R=new ve.Vector3,E=new ve.Vector3,B=new ve.Vector3,O=new ve.Vector3,_=new ve.Vector3;for(let Y=0;Y<r;Y++){let j=Y/r*Math.PI*2+m,F=(Y+.5)/r*Math.PI*2+m,V=(Y+1)/r*Math.PI*2+m,A=new ve.Vector2(Math.sin(j),Math.cos(j)),W=new ve.Vector2(Math.sin(F),Math.cos(F)),X=new ve.Vector2(Math.sin(V),Math.cos(V));cn(v,A,R),cn(v,X,E),cn(D,W,U),Al(S,R,E,q,q,B),c.push(B.x,B.y,B.z),Al(R,S,E,q,k,O),c.push(O.x,O.y,O.z),Al(E,R,S,k,q,_),c.push(_.x,_.y,_.z),h.push(U.x,U.y,U.z),h.push(U.x,U.y,U.z),h.push(U.x,U.y,U.z),p.push(0,0),p.push(0,0),p.push(0,0);let Q=u++,H=u++,K=u++;if(l.push(Q,H,K),s>0){{let le=R.clone().add(E).multiplyScalar(.5),ne=S.clone().sub(le).normalize(),Ve=C.clone().sub(le).normalize().add(ne).normalize().multiplyScalar(-1),xe=_.clone().sub(O);se(le,xe,Ve,w.angle())}let $,re;{let le=new ve.Vector3;cn(L,X,le);let ne=_.clone().add(B).multiplyScalar(.5);ne=Hb(ne,E,S);let fe=_.clone().sub(B);[$,re]=se(ne,fe,le,I,B.y)}{let le=$,ne=le.clone().setY(0).normalize(),fe=new ve.Vector3(0,-1,0),Ve=ne.clone().cross(fe);J(le,ne,fe,Ve)}he.concat(re);{let le=w.angle(),ne=Math.PI-le,fe=S.clone();fe.y-=s/Math.sin(le-Math.PI/2);let Ve=new ve.Vector3,xe=[];for(let Te=0;Te<a;Te++){let Lt=[],Ut=Math.PI/2-ne*Te/a,Co=Math.cos(Ut),Bt=Math.sin(Ut),To=F;for(let Vn=0;Vn<=Te;Vn++){let Un=Math.cos(To),He=Math.sin(To);U.x=Co*He,U.y=Bt,U.z=Co*Un,Ve.copy(fe).addScaledVector(U,s),c.push(Ve.x,Ve.y,Ve.z),h.push(U.x,U.y,U.z),p.push(0,0),Lt.push(u++),To+=Math.PI*2/Te/r}xe.push(Lt)}re.reverse(),xe.push(re);let Ye=xe.length-1;for(let Te=0;Te<Ye;Te++){let Lt=xe[Te],Ut=xe[Te+1],Co=Lt.length-1;l.push(Ut[1],Lt[0],Ut[0]);for(let Bt=1;Bt<=Co;Bt++)l.push(Lt[Bt],Lt[Bt-1],Ut[Bt]),l.push(Ut[Bt+1],Lt[Bt],Ut[Bt])}}}}}this.setIndex(l),this.setAttribute("position",new ve.Float32BufferAttribute(c,3)),this.setAttribute("normal",new ve.Float32BufferAttribute(h,3)),this.setAttribute("uv",new ve.Float32BufferAttribute(p,2));function se(U,R,E,B,O){let _=-B/2,Y=(Math.PI-B)/2,j=R.clone().normalize().cross(E);U.addScaledVector(E,-s/Math.sin(Y));let F=new ve.Vector3,V=new ve.Vector3,A=1,W=u,X=[];for(let Q=0;Q<=a;Q++){let H=_+Q/a*B;V.set(0,0,0),V.addScaledVector(j,Math.sin(H)),V.addScaledVector(E,Math.cos(H));for(let K=0;K<=A;K++){let $=K/A-.5;if(F.copy(U),F.addScaledVector(R,$),F.addScaledVector(V,s),O!=null){let re=Math.max(0,F.y-O);F.addScaledVector(R,-re/R.y)}c.push(F.x,F.y,F.z),h.push(V.x,V.y,V.z),p.push(0,0),K===0&&X.push(u),u++}}for(let Q=0;Q<a;Q++)for(let H=0;H<A;H++){let K=W+H+(A+1)*Q,$=K+(A+1),re=$+1,le=K+1;l.push(K,$,le),l.push($,re,le)}return[U.clone().addScaledVector(R,.5),X]}function J(U,R,E,B){let O=Math.PI/2,_=f.angle()-O,Y=[],j=new ve.Vector3,F=new ve.Vector3;for(let A=0;A<=a;A++){let W=[],X=A/a;for(let Q=0;Q<=A;Q++){let K=((A?Q/A:0)-.5)*b,$=Math.cos(K),re=Math.sin(K),le=Math.atan(Math.tan(_)*$),ne=(O+le)*X,fe=Math.cos(ne),Ve=Math.sin(ne);j.set(0,0,0),j.addScaledVector(R,Ve*$),j.addScaledVector(E,fe),j.addScaledVector(B,Ve*re),F.copy(U).addScaledVector(j,s),c.push(F.x,F.y,F.z),h.push(j.x,j.y,j.z),p.push(0,0),W.push(u++)}Y.push(W)}let V=Y.length-1;for(let A=0;A<V;A++){let W=Y[A],X=Y[A+1],Q=W.length-1;l.push(W[0],X[1],X[0]);for(let H=1;H<=Q;H++)l.push(W[H-1],W[H],X[H]),l.push(W[H],X[H+1],X[H])}}}};var ta=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,depth:0,cornerRadius:[0,0,0,0],cornerType:1,extrudeBevelSize:0,extrudeBevelSegments:1},n.parameters),r=Object.assign(t?.ui??{enabledIndieCorners:!1},n.ui);return{shape:n.shape&&n.shape instanceof Ne?n.shape:new Ne,parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??0)}),ui:r}}static build(n){let t=n.shape,{width:e,height:r,cornerRadius:o,cornerType:i,depth:s,extrudeBevelSize:a,extrudeBevelSegments:l}=n.parameters,c={x:e*.5,y:r*.5},h={x:-c.x,y:-c.y},p={x:c.x,y:c.y};function u(S,v,z){return v>e&&z>r?Math.min(S*e/v,S*r/z):v>e?S*e/v:z>r?S*r/z:S}let d=[];d[0]=o[0]===0?0:u(o[0],o[0]+o[3],o[0]+o[1]),d[1]=o[1]===0?0:u(o[1],o[1]+o[2],o[1]+o[0]),d[2]=o[2]===0?0:u(o[2],o[2]+o[1],o[2]+o[3]),d[3]=o[3]===0?0:u(o[3],o[3]+o[0],o[3]+o[2]);let m=h.x,g=p.x,x=p.y,y=h.y;t.addPoint(t.createPoint(m,x)),t.addPoint(t.createPoint(g,x)),t.addPoint(t.createPoint(g,y)),t.addPoint(t.createPoint(m,y)),t.isClosed=!0;let b=!0;for(let S=0,v=t.points.length;S<v;S++)t.points[S].roundness=d[S],S>0&&d[S]!==d[S-1]&&(b=!1);b&&(t.roundness=d[0]),t.useCubicForRoundedCorners=i!==1,t.update();let C=nt.create({shape:t,parameters:{depth:s,extrudeBevelSize:a,extrudeBevelSegments:l}});return Object.assign(C,{userData:{...n,type:"RectangleGeometry"}})}};var Vu=require("three"),Uu=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,widthSegments:64,heightSegments:64,phiStart:0,phiLength:2*Math.PI,thetaStart:0,thetaLength:Math.PI},n.parameters);return{parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??e.width)})}}static build(n){let{width:t=100,height:e=t,depth:r=t,widthSegments:o=64,heightSegments:i=64,phiStart:s,phiLength:a,thetaStart:l,thetaLength:c}=n.parameters,h=new Vu.SphereBufferGeometry(.5*t,o,i,s,a,l,c);return h.scale(1,e/t,r/t),Object.assign(h,{userData:{...n,type:"SphereGeometry"}})}};var ju=require("three"),ku=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,depth:0,widthSegments:8,heightSegments:8},n.parameters);return{parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:0})}}static build(n){let{width:t=100,height:e=t,widthSegments:r=8,heightSegments:o=8}=n.parameters,i=new ju.PlaneBufferGeometry(t,e,r,o);return i.scale(1,1,1),Object.assign(i,{userData:{...n,type:"PlaneGeometry"}})}};var Qr=require("three"),Hu=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,angle:90,cornerRadius:24,cornerSegments:8},n.parameters);return{parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??e.width)})}}static build(n){let{width:t,height:e,depth:r,angle:o,cornerRadius:i,cornerSegments:s}=n.parameters,a=new Bl(t,e,r,o,i,s);return Object.assign(a,{userData:{...n,type:"BackdropGeometry"}})}},Bl=class extends Qr.BufferGeometry{constructor(t=1,e=1,r=1,o=90,i=10,s=24){super(),this.type="BackdropGeometry";let a=[],l=[],c=[],h=.001;i==0&&(s=1),s=Math.max(1,Math.floor(s)),i=Math.min(i,100),o=Math.min(180-h,o),o*=Math.PI/180;let p=[],u=(F=0,V=0,A=0)=>new Qr.Vector3(F,V,A),d=u(),m=u(),[g,x,y]=[e/2,t/2,r/2],b=-x,C=+x,[S,v,z]=[u(b,-g,+y),u(b,-g,-y),u(b,+g,-y)],[w,f]=[F=>Math.sin(F),F=>Math.cos(F)],D=(F,V=!1)=>Math.sin(F-Math.PI/(1+ +V)),L=(F,V=!1)=>Math.cos(F-Math.PI/(1+ +V));z.y=w(o)*e-g;let P=f(o)*e-y;o<=Math.PI/2?z.z=Math.min(P,S.z-h):v.z=Math.min(v.z-P-y,S.z-h),d.subVectors(S,v),m.subVectors(z,v);let M=Math.min(d.length(),m.length())*i/100,I=M*Math.tan(o/2),k=M/Math.cos(o/2),q=d.clone().normalize().add(m.normalize()).setLength(k).add(v);d.set(0,D(o,!0),L(o,!0)),p.push([z,d.clone()]);let ie=(Math.PI-o)/s;for(let F=0;F<=s;F++){let V=Math.PI/2+o+F*ie;d.set(0,w(V)*I,f(V)*I),d.add(q),m.set(0,D(V),L(V)),p.push([d.clone(),m.clone()])}p.push([S,u(0,1,0)]);let he=Math.sin(ie/2)*I*2,se=p.length-1,J=p[0][0].distanceTo(p[1][0]),U=p[se-1][0].distanceTo(p[se][0]),R=J+he*s+U;p[0].push(1);for(let F=0;F<=s;F++)p[F+1].push(1-(J+F*he)/R);p[se].push(0);let[E,B,O]=p[0],_,Y,j;for(let F=1;F<p.length;F++)[_,Y,j]=p[F],a.push(b,E.y,E.z,b,_.y,_.z,C,E.y,E.z,C,E.y,E.z,b,_.y,_.z,C,_.y,_.z),l.push(0,B.y,B.z,0,Y.y,Y.z,0,B.y,B.z,0,B.y,B.z,0,Y.y,Y.z,0,Y.y,Y.z),c.push(0,O,0,j,1,O,1,O,0,j,1,j),[E,B,O]=[_,Y,j];this.setAttribute("position",new Qr.Float32BufferAttribute(a,3)),this.setAttribute("normal",new Qr.Float32BufferAttribute(l,3)),this.setAttribute("uv",new Qr.Float32BufferAttribute(c,2))}};var qu=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,depth:0,innerRadiusPercent:38.19,spikes:5,cornerRadius:0,angle:360,extrudeBevelSize:0,extrudeBevelSegments:1},n.parameters);return{shape:n.shape&&n.shape instanceof Ne?n.shape:new Ne,parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??0)})}}static build(n){let{width:t,height:e,innerRadiusPercent:r,spikes:o,cornerRadius:i,angle:s,depth:a,extrudeBevelSize:l,extrudeBevelSegments:c}=n.parameters,h=n.shape,p=t*.5,u=e*.5,d=0,m=0,g=s*Math.PI/360/o,x=Math.PI/2*3*-1,y=p*r/100,b=u*r/100;if(o===3&&r===50){g=2*Math.PI/o;for(let S=0;S<o;S++){let v=g*S,z=d+Math.sin(v)*p,w=m+Math.cos(v)*u;h.addPoint(h.createPoint(z,w))}}else for(let S=0;S<o;S++){let v=d+Math.cos(x)*p,z=m+Math.sin(x)*u;h.addPoint(h.createPoint(v,z)),x+=g,v=d+Math.cos(x)*y,z=m+Math.sin(x)*b,S<=o,h.addPoint(h.createPoint(v,z)),x+=g}h.isClosed=!0;for(let S=0,v=h.points.length;S<v;S++)h.points[S].roundness=i;h.roundness=i,h.update();let C=nt.create({shape:h,parameters:{roundness:i,depth:a,extrudeBevelSize:l,extrudeBevelSegments:c}});return Object.assign(C,{userData:{...n,type:"StarGeometry"}})}};var Wu=require("three"),ra=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,depth:0},n.parameters);return{parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??0)})}}static build(n){let{width:t,height:e}=n.parameters,r=new Wu.PlaneBufferGeometry(t,e);return Object.assign(r,{userData:{...n,type:"TextFrameGeometry"}})}};var $u=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,radialSegments:32,tubularSegments:64,arc:Math.PI*2,cornerRadius:30,cornerSegments:8},n.parameters),r=Math.abs(e.width),o=Math.abs(e.height??e.width),i=Math.abs(e.depth??e.width*.25);return{parameters:Object.assign(e,{width:r,height:o,depth:i})}}static build(n){let{width:t,height:e,depth:r,radialSegments:o,tubularSegments:i,arc:s,cornerRadius:a,cornerSegments:l}=n.parameters,c=qb(t,e,r,t*.5,s,i,0,0,o,a,l);return c.scale(1,e/t,1),Object.assign(c,{userData:{...n,type:"TorusGeometry"}})}};function qb(n,t,e,r,o,i,s,a,l,c,h){return[t,e]=[e,t],s=t/2,o/=2*Math.PI,o==1&&(c=0),new an(!0,n,t,e,r,o,i,s,a,l,c,h)}var Ju=require("three"),Yu=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,tubularSegments:64,radialSegments:32,p:2,q:3},n.parameters);return{parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width),depth:Math.abs(e.depth??e.width),tube:e.tube??e.width*.125})}}static build(n){let{width:t,tube:e,tubularSegments:r,radialSegments:o,p:i,q:s}=n.parameters,a=t*.5;a!==e&&(a-=e);let l=new Ju.TorusKnotBufferGeometry(a,e,r,o,i,s);return Object.assign(l,{userData:{...n,type:"TorusKnotGeometry"}})}};var Ku=class{static create(n){return this.build(this.normalizeInputs(n))}static normalizeInputs(n,t){let e=Object.assign({},t?.parameters??{width:100,depth:0,spikes:5,cornerRadius:0,extrudeBevelSize:0,extrudeBevelSegments:1,isRect:!1},n.parameters);return{shape:n.shape&&n.shape instanceof Ne?n.shape:new Ne,parameters:Object.assign(e,{width:Math.abs(e.width),height:Math.abs(e.height??e.width*(e.isRect?1:Math.sqrt(3)/2)),depth:Math.abs(e.depth??0)})}}static build(n){let{width:t=100,height:e,cornerRadius:r,depth:o,extrudeBevelSize:i,extrudeBevelSegments:s,isRect:a}=n.parameters,l=n.shape,c=t*.5,h=e*.5;a?(l.addPoint(l.createPoint(-c,h)),l.addPoint(l.createPoint(c,-h)),l.addPoint(l.createPoint(-c,-h))):(l.addPoint(l.createPoint(0,h)),l.addPoint(l.createPoint(c,-h)),l.addPoint(l.createPoint(-c,-h))),l.isClosed=!0;for(let u=0,d=l.points.length;u<d;u++)l.points[u].roundness=r;l.roundness=r,l.update();let p=nt.create({shape:l,parameters:{roundness:r,depth:o,extrudeBevelSize:i,extrudeBevelSegments:s}});return Object.assign(p,{userData:{...n,type:"TriangleGeometry"}})}};var oa={};Va(oa,{addBarycentricAttribute:()=>Jb,fixUvs:()=>Kb,loadFromUrl:()=>Yb,resizeGeometry:()=>$b,roundShapePolygon:()=>Wb});var Zr=require("three"),Xu=function(n,t){let e=t.x-n.x,r=t.y-n.y,o=Math.sqrt(e*e+r*r),i=e/o,s=r/o,a=Math.atan2(s,i);return{x:e,y:r,len:o,nx:i,ny:s,ang:a}},Wb=(n,t,e)=>{let r,o,i,s,a,l,c,h,p,u,d,m,g,x,y=t.length;for(s=t[y-2],n.curves=[],r=1;r<y-1;r++){a=t[r%y],l=t[(r+1)%y];let b=Xu(a,s),C=Xu(a,l);c=b.nx*C.ny-b.ny*C.nx,h=b.nx*C.nx-b.ny*-C.ny,d=Math.asin(c),p=1,u=!1,h<0?d<0?d=Math.PI+d:(d=Math.PI-d,p=-1,u=!0):d>0&&(p=-1,u=!0),m=d/2,x=Math.abs(Math.cos(m)*e/Math.sin(m)),x>Math.min(b.len/2,C.len/2)?(x=Math.min(b.len/2,C.len/2),g=Math.abs(x*Math.sin(m)/Math.cos(m))):g=e,o=a.x+C.nx*x,i=a.y+C.ny*x,o+=-C.ny*g*p,i+=C.nx*g*p,n.absarc(o,i,g,b.ang+Math.PI/2*p,C.ang-Math.PI/2*p,u),s=a,a=l}n.closePath()},$b=(n,{width:t,height:e,depth:r})=>{t=Math.abs(t),e=Math.abs(e),r=Math.abs(r);let o=n.userData.parameters,i,s,a;t===0?(t=o.width,i=1):i=t/o.width,e===0?(e=o.height,s=1):s=e/o.height,r===0?(r=o.depth,a=1):a=r/o.depth,n.scale(i,s,a),o.width=t,o.height=e,o.depth=r},Jb=(n,t)=>{let e=[new Zr.Vector3(1,0,0),new Zr.Vector3(0,1,0),new Zr.Vector3(0,0,1)],r=n.attributes.position,o=new Float32Array(r.count*3);for(let i=0,s=r.count;i<s;i++)e[i%3].toArray(o,i*3);n.setAttribute(t,new Zr.Float32BufferAttribute(o,3))},Yb=n=>new Promise(t=>{new Zr.BufferGeometryLoader().load(n,r=>t(r))}),Kb=(n,t,e)=>{let r=n.getAttribute("uv");if(r)for(let o=0;o<r.count;o++){let i=r.getX(o),s=r.getY(o);r.setXY(o,(i+t/2)/t,1-(s-e/2)/e*-1)}};var $e=require("three");var Xb,ia=new Promise(n=>{Xb=n});var Cd=require("three");var Nr=require("three");var xi=require("three");var Zt=require("three");var hn=class{constructor(t){t=t??{},this.name=t.name,this.type=t.type,this.node=t.node,this.size=t.size,this.needsUpdate=t.needsUpdate}get value(){return this.node.value}set value(t){this.node.value=t}};var Qu=require("three"),ce=class{constructor(t){this.hashProperties=void 0;this.isNode=!0;this.shortcuts={};this.uuid=Qu.MathUtils.generateUUID(),this.type=t,this.name="",this.userData={}}analyze(t,e){e=e??{},t.analyzing=!0,this.build(t.addFlow(e.slot,e.cache,e.context),"v4"),t.clearVertexNodeCode(),t.clearFragmentNodeCode(),t.removeFlow(),t.analyzing=!1}analyzeAndFlow(t,e,r){return r=r??{},this.analyze(t,r),this.flow(t,e,r)}flow(t,e,r){r=r??{},t.addFlow(r.slot,r.cache,r.context);let o={result:this.build(t,e),code:t.clearNodeCode(),extra:t.context.extra};return t.removeFlow(),o}build(t,e,r){e=e??this.getType(t,e);let o=t.getNodeData(r??this);return t.analyzing&&this.appendDepsNode(t,o,e),t.nodes.indexOf(this)===-1&&t.nodes.push(this),this.updateFrame!==void 0&&t.updaters.indexOf(this)===-1&&t.updaters.push(this),this.generate(t,e,r)}updateFrame(t){}generateReadonly(t,e,r,o,i,s){return""}generate(t,e,r,o,i){return""}parse(t,e,r,o){}appendDepsNode(t,e,r){e.deps=(e.deps||0)+1;let o=t.getTypeLength(r);(o>(e.outputMax||0)||this.getType(t,r))&&(e.outputMax=o,e.output=r)}setName(t){this.name=t}getName(){return this.name}getType(t,e){return e==="sampler2D"||e==="samplerCube"?e:this.type}getJSONNode(t){if(t?.materials&&t?.materials[this.uuid]!==void 0)return t.materials[this.uuid]}getHash(){let t="{",e,r;for(e in this)r=this[e],r instanceof ce&&(t+='"'+e+'":'+r.getHash()+",");if(this.hashProperties)for(let o=0;o<this.hashProperties.length;o++)e=this.hashProperties[o],r=this[e],t+='"'+e+'":"'+String(r)+'",';return t+='"id":"'+this.uuid+'"}',t}copy(t){return this.name=t.name,t.type&&(this.type=t.type),t.frameId&&(this.frameId=t.frameId),t.hashProperties&&(this.hashProperties=t.hashProperties.map(e=>e)),this.userData=JSON.parse(JSON.stringify(t.userData)),this.shortcuts=JSON.parse(JSON.stringify(t.shortcuts)),this}clone(){return new this.constructor().copy(this)}createJSONNode(t){let e=t===void 0||typeof t=="string";if(typeof this.type!="string")throw new Error("Node does not allow serialization.");let r={};return r.uuid=this.uuid,r.type=this.type,this.name!==""&&(r.name=this.name),JSON.stringify(this.userData)!=="{}"&&(r.userData=this.userData),!e&&t&&(t.nodes[this.uuid]=r),r}toJSON(t){return this.getJSONNode(t)??this.createJSONNode(t)}fromJSON(t,e){return this.uuid=t.uuid,this.type=t.type,t.name&&(this.name=t.name),t.userData&&(this.userData=t.userData),this}};var El=class{constructor(){this.nodes={};this.keywords={}}add(t){this.nodes[t.name]=t}addKeyword(t,e,r){r=r!==void 0?r:!0,this.keywords[t]={callback:e,cache:r}}remove(t){delete this.nodes[t.name]}removeKeyword(t){delete this.keywords[t]}get(t){return this.nodes[t]}getKeyword(t,e){return this.keywords[t].callback(e)}getKeywordData(t){return this.keywords[t]}contains(t){return this.nodes[t]!==void 0}containsKeyword(t){return this.keywords[t]!==void 0}},rt=new El;var _l=require("three");var Zu=require("three"),ue=class extends ce{constructor(e,r){super(e);this.scope="";r=r??{},this.shared=r.shared!==void 0?r.shared:!0,this.unique=r.unique!==void 0?r.unique:!1}build(e,r,o,i){if(r=r??this.getType(e),this.getShared(e,r)){let s=this.getUnique(e,r);s&&this.uuid===void 0&&(this.uuid=Zu.MathUtils.generateUUID()),o=e.getUUID(o??this.getUUID(),!s);let a=e.getNodeData(o),l=a.output||this.getType(e);if(e.analyzing)return(a.deps||0)>0||this.getLabel()?(this.appendDepsNode(e,a,r),this.generate(e,r,o)):super.build(e,r,o);if(s)return a.name=a.name||super.build(e,r,o),a.name;if(!this.getLabel()&&(!this.getShared(e,l)||e.context.ignoreCache||a.deps===1))return super.build(e,r,o);o=this.getUUID(!1);let c=this.getTemp(e,o);if(c)return e.format(c,l,r);{c=super.generate(e,r,o,a.output,i);let h=this.generate(e,l,o);return e.addNodeCode(c+" = "+h+";"),e.format(c,l,r)}}return super.build(e,r,o)}getShared(e,r){return r!=="sampler2D"&&r!=="samplerCube"&&this.shared}getUnique(e,r){return this.unique}setLabel(e){return this.label=e,this}getLabel(){return this.label}getUUID(e){let r=this.uuid;return typeof this.scope=="string"&&(r=this.scope+"-"+r),r}getTemp(e,r){r=r||this.uuid;let o=e.getVars()[r];return o?o.name:void 0}generate(e,r,o,i,s){return this.getShared(e,r)||console.error("TempNode is not shared"),o=o??this.uuid,e.getTempVar(o,i??this.getType(e),s,this.getLabel()).name}};var De=class extends ue{constructor(e,r){r=r??{},r.shared=r.shared!==void 0?r.shared:!1;super(e,r);this.readonly=!1}setReadonly(e){return this.readonly=e,this.hashProperties=this.readonly?["value"]:void 0,this}getReadonly(){return this.readonly}createJSONNode(e){let r=super.createJSONNode(e);return this.readonly===!0&&(r.readonly=this.readonly),r}fromJSON(e,r){return super.fromJSON(e,r),e.readonly!==void 0&&this.setReadonly(e.readonly),this}generate(e,r,o,i,s,a){o=e.getUUID(o??this.getUUID()),i=i??this.getType(e);let l=e.getNodeData(o);return this.getReadonly()&&this.generateReadonly!==void 0?this.generateReadonly(e,r,o,i,s,a):e.isShader("vertex")?(l.vertex||(l.vertex=e.createVertexUniform(i,this,s,a,this.getLabel())),e.format(l.vertex.name,i,r)):(l.fragment||(l.fragment=e.createFragmentUniform(i,this,s,a,this.getLabel())),e.format(l.fragment.name,i,r))}copy(e){return super.copy(e),this.readonly=e.readonly,this}};var ut=class extends De{constructor(e=0,r){super("v2");this.nodeType="Vector2";this.value=e instanceof _l.Vector2?e:new _l.Vector2(e,r)}get x(){return this.value.x}set x(e){this.value.x=e}get y(){return this.value.y}set y(e){this.value.y=e}generateReadonly(e,r,o,i,s,a){return e.format("vec2("+this.value.x+", "+this.value.y+")",i,r)}copy(e){return super.copy(e),this.value.copy(e.value),this}};var Gl=require("three");var dt=class extends De{constructor(e=0,r,o){super("v3");this.nodeType="Vector3";this.value=e instanceof Gl.Vector3?e:new Gl.Vector3(e,r,o)}get x(){return this.value.x}set x(e){this.value.x=e}get y(){return this.value.y}set y(e){this.value.y=e}get z(){return this.value.z}set z(e){this.value.z=e}generateReadonly(e,r,o,i,s,a){return e.format("vec3("+this.value.x+", "+this.value.y+", "+this.value.z+")",i,r)}copy(e){return super.copy(e),this.value.copy(e.value),this}};var ed=require("three"),It=class extends ed.Color{constructor(e,r,o,i){super(e,r,o);this.isColorA=!0;this.a=i}setRGBA(e,r,o,i){super.setRGB(e,r,o),this.a=i}copy(e){return super.copy(e),this.a="a"in e?e.a:1,this}clone(){return new this.constructor(this.r,this.g,this.b,this.a)}get x(){return this.r}get y(){return this.g}get z(){return this.b}get w(){return this.a}set x(e){this.r=e}set y(e){this.g=e}set z(e){this.b=e}set w(e){this.a=e}};var _r=class extends De{constructor(e){super("v4");this.nodeType="Vector4";this.value=e instanceof It?e:new It(e.r,e.g,e.b,e.a)}generateReadonly(e,r,o,i,s,a){return e.format("vec4("+this.value.r+", "+this.value.g+", "+this.value.b+", "+this.value.a+")",i,r)}copy(e){return super.copy(e),this.value.copy(e.value),this}};var Qb=/^\s*([a-z_0-9]+)\s([a-z_0-9]+)\s*\((.*?)\)/i,td=/[a-z_0-9]+/gi,te=class extends ue{constructor(e,r,o,i,s){super(s);this.src="";this.nodeType="Function";this.useKeywords=!0;this.includes=[];this.extensions={};this.keywords={};this.isMethod=s===void 0,this.isInterface=!1,this.parse(e,r,o,i)}getShared(e,r){return!this.isMethod}getType(e){return e.getTypeByFormat(this.type)}getInputByName(e){if(this.inputs){let r=this.inputs.length;for(;r--;)if(this.inputs[r].name===e)return this.inputs[r]}}getIncludeByName(e){if(this.includes){let r=this.includes.length;for(;r--;)if(this.includes[r].name===e)return this.includes[r]}}generate(e,r,o,i,s){let a,l=0,c=this.src;if(this.includes)for(let p=0;p<this.includes.length;p++)e.include(this.includes[p],this);for(let p in this.extensions)e.extensions[p]=!0;let h=[];for(;a=td.exec(this.src);)h.push(a);for(let p=0;p<h.length;p++){let u=h[p],d=u[0],m=this.isMethod?!this.getInputByName(d):!0,g=d;if(this.keywords[d]||this.useKeywords&&m&&rt.containsKeyword(d)){let x=this.keywords[d];if(!x){let y=rt.getKeywordData(d);y.cache&&(x=e.keywords[d]),x=x||rt.getKeyword(d,e),y.cache&&(e.keywords[d]=x)}g=x.build(e)}d!==g&&(c=c.substring(0,u.index+l)+g+c.substring(u.index+d.length+l),l+=g.length-d.length),this.getIncludeByName(g)===void 0&&rt.contains(g)&&e.include(rt.get(g))}return r==="source"?c:this.isMethod?(this.isInterface||e.include(this,void 0,c),this.name):e.format("( "+c+" )",this.getType(e),r)}parse(e,r,o,i){if(this.src=e||"",this.includes=r??[],this.extensions=o??{},this.keywords=i??{},this.isMethod){let s=Qb.exec(this.src);if(this.inputs=[],s&&s.length==4){this.type=s[1],this.name=s[2];let a=s[3].match(td);if(a){let l=0;for(;l<a.length;){let c=a[l++],h;c==="in"||c==="out"||c==="inout"?h=a[l++]:(h=c,c="");let p=a[l++];this.inputs.push({name:p,type:h,qualifier:c})}}this.isInterface=this.src.indexOf("{")===-1}else this.type="",this.name=""}}copy(e){return super.copy(e),this.isMethod=e.isMethod,this.useKeywords=e.useKeywords,e.type!==void 0&&(this.type=e.type),this.parse(e.src,e.includes,e.extensions,e.keywords),this}toJSON(e){let r=this.getJSONNode(e);if(!r){r=this.createJSONNode(e),r.src=this.src,r.isMethod=this.isMethod,r.useKeywords=this.useKeywords,this.isMethod||(r.type=this.type),r.extensions=JSON.parse(JSON.stringify(this.extensions));let o={};for(let i in this.keywords)o[i]=this.keywords[i].toJSON(e).uuid;if(r.keywords=o,this.includes?.length){let i=[];for(let s=0;s<this.includes.length;s++)i.push(this.includes[s].toJSON(e).uuid);r.includes=i}r.isMethod=this.isMethod,r.inputs=this.inputs}return r.nodeType=this.nodeType,r}fromJSON(e,r){if(super.fromJSON(e,r),e.inputs!==void 0&&(this.inputs=e.inputs),e.isMethod!==void 0&&(this.isMethod=e.isMethod),e.src&&(this.src=e.src),e.isMethod&&(this.isMethod=e.isMethod),e.useKeywords&&(this.useKeywords=e.useKeywords),e.type&&(this.type=e.type),e.extensions&&(this.extensions=e.extensions),e.keywords&&r){this.keywords={};for(let o in e.keywords)this.keywords[o]=r.getNode(e.keywords[o])}return e.includes&&r&&(this.includes=e.includes.map(o=>r.getNode(o))),this}};var Zb=/^([a-z_0-9]+)\s([a-z_0-9]+)\s?\=?\s?(.*?)(\;|$)/i,zl=class extends ue{constructor(e="",r){super();this.src="";this.useDefine=!1;this.nodeType="Const";this.parse(e||zl.PI,void 0,void 0,void 0,r)}getType(e){return e.getTypeByFormat(this.type)}parse(e,r,o,i,s){this.src=e||"";let a,l,c="",h=Zb.exec(e);this.useDefine=s??this.src.charAt(0)==="#",h&&h.length>1?(l=h[1],a=h[2],c=h[3]):(a=this.src,l="f"),this.name=a,this.type=l,this.value=c}build(e,r){if(r==="source"){if(this.value)return this.useDefine?"#define "+this.name+" "+this.value:"const "+this.type+" "+this.name+" = "+this.value+";";if(this.useDefine)return this.src}return e.include(this),e.format(this.name,this.getType(e),r)}generate(e,r,o,i,s){return e.format(this.name,this.getType(e),r)}copy(e){return super.copy(e),this.parse(e.src,void 0,void 0,void 0,e.useDefine),this}},we=zl;we.PI="PI",we.PI2="PI2",we.RECIPROCAL_PI="RECIPROCAL_PI",we.RECIPROCAL_PI2="RECIPROCAL_PI2",we.LOG2="LOG2",we.EPSILON="EPSILON";var ev=new RegExp(`^structs*([a-z_0-9]+)s*{s*((.|
|
|
2
|
+
)*?)}`,"gim"),tv=new RegExp("s*(w*?)s*(w*?)(=|;)","gim"),hi=class extends ue{constructor(e=""){super();this.inputs=[];this.src="";this.nodeType="Struct";this.parse(e)}getType(e){return e.getTypeByFormat(this.name)}getInputByName(e){let r=this.inputs.length;for(;r--;)if(this.inputs[r].name===e)return this.inputs[r]}generate(e,r,o,i,s){return r==="source"?this.src+";":e.format("( "+this.src+" )",this.getType(e),r)}parse(e=""){this.src=e,this.inputs=[];let r=ev.exec(e);if(r){let o=r[2],i;for(;i=tv.exec(o);)this.inputs.push({type:i[1],name:i[2]});this.name=r[1]}else this.name="";this.type=this.name}};var pi=class extends ue{constructor(e){super("v2",{shared:!1});this.nodeType="UV";this.index=e??0}generate(e,r){e.requires.uv[this.index]=!0;let o=this.index>0?this.index+1:"",i=e.isShader("vertex")?"uv"+o:"vUv"+o;return e.format(i,this.getType(e),r)}copy(e){return super.copy(e),this.index=e.index,this}toJSON(e){let r=this.getJSONNode(e);return r||(r=this.createJSONNode(e),r.index=this.index),r.nodeType=this.nodeType,r}fromJSON(e,r){return super.fromJSON(e,r),e.index&&(this.index=e.index),this}};rt.addKeyword("uv",function(){return new pi});rt.addKeyword("uv2",function(){return new pi(1)});var na=require("three");var xo=class extends ue{constructor(e=new ce,r){super("v4");this.nodeType="ColorSpace";this.factor=new ce;this.input=e,this.method=r??xo.LINEAR_TO_LINEAR,this.hashProperties=["method"]}static getEncodingComponents(e){switch(e){case na.LinearEncoding:return["Linear"];case na.sRGBEncoding:return["sRGB"];default:return[]}}generate(e,r){let o=this.input.build(e,"v4"),i=this.getType(e),s=xo.Nodes[this.method],a=e.include(s);if(a===xo.LINEAR_TO_LINEAR)return e.format(o,i,r);if(s.inputs?.length===2){let l=this.factor.build(e,"f");return e.format(a+"( "+o+", "+l+" )",i,r)}else return e.format(a+"( "+o+" )",i,r)}fromEncoding(e){let r=xo.getEncodingComponents(e);this.method="LinearTo"+r[0],this.factor=r[1]}fromDecoding(e){let r=xo.getEncodingComponents(e);this.method=r[0]+"ToLinear",this.factor=r[1]}copy(e){return super.copy(e),this.input.copy(e.input),this.method=e.method,this.factor.copy(e.factor),this}},bt=xo;bt.Nodes={LinearToLinear:new te(["vec4 LinearToLinear( in vec4 value ) {"," return value;","}"].join(`
|
|
3
|
+
`)),sRGBToLinear:new te(["vec4 sRGBToLinear( in vec4 value ) {"," return vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );","}"].join(`
|
|
4
|
+
`)),LinearTosRGB:new te(["vec4 LinearTosRGB( in vec4 value ) {"," return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );","}"].join(`
|
|
5
|
+
`))},bt.LINEAR_TO_LINEAR="LinearToLinear",bt.SRGB_TO_LINEAR="sRGBToLinear",bt.LINEAR_TO_SRGB="LinearTosRGB";var Ie=class extends te{constructor(e="",r,o,i,s){super(e,s,i,o,r);this.nodeType="Expression"}};var od=require("three"),gr=class extends od.Texture{toJSON(t){let e=super.toJSON(t),r=t===void 0||typeof t=="string";if(this.image!==void 0&&!r){let o=this.image;if(Array.isArray(o)){t.images[o.uuid].url=[];for(let i=0;i<o.length;i++)t.images[o.uuid].url[i]=rd(o[i])}else t.images[o.uuid].url=rd(o)}return e}};function rd(n){return typeof HTMLImageElement<"u"&&n instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&n instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&n instanceof ImageBitmap?rv(n):(console.warn("THREE.Texture: Unable to serialize Texture."),"")}var ui;function rv(n){if(/^data:/i.test(n.src))return n.src;let t;if(n instanceof HTMLCanvasElement)t=n;else{ui===void 0&&(ui=document.createElement("canvas")),ui.width=n.width,ui.height=n.height;let r=ui.getContext("2d");n instanceof ImageData?r.putImageData(n,0,0):r.drawImage(n,0,0,n.width,n.height),t=ui}let e=n.src.startsWith("blob:")?n.fileName:n.src;return/\.jpe?g$/i.test(e)?t.toDataURL("image/jpeg",.6):t.toDataURL("image/png")}var vt=class extends De{constructor(e=new gr,r,o,i){super("v4",{shared:!0});this.nodeType="Texture";this.value=e,this.uv=r??new pi,this.bias=o,this.project=i!==void 0?i:!1}getTexture(e,r){return super.generate(e,r,this.value.uuid,"t")}generate(e,r){if(r==="sampler2D")return this.getTexture(e,r);let o=this.getTexture(e,r),i=this.uv.build(e,this.project?"v4":"v2"),s=this.bias?this.bias.build(e,"f"):void 0;s===void 0&&e.context.bias&&(s=e.context.bias.setTexture(this).build(e,"f"));let a,l;this.project?a="texture2DProj":a=s?"tex2DBias":"tex2D",s?l=a+"( "+o+", "+i+", "+s+" )":l=a+"( "+o+", "+i+" )";let c={include:e.isShader("vertex"),ignoreCache:!0},h=this.getType(e);return e.addContext(c),this.colorSpace=this.colorSpace??new bt(new Ie("",h)),this.colorSpace.fromDecoding(e.getTextureEncodingFromMap(this.value)),this.colorSpace.input.parse(l),l=this.colorSpace.build(e,h),e.removeContext(),e.format(l,h,r)}copy(e){return super.copy(e),e.value.isRenderTargetTexture?this.value=e.value:this.value.copy(e.value),this.uv.copy(e.uv),e.bias?this.bias?this.bias.copy(e.bias):this.bias=e.bias.clone():this.bias=void 0,e.colorSpace?this.colorSpace?this.colorSpace.copy(e.colorSpace):this.colorSpace=e.colorSpace.clone():this.colorSpace=void 0,this.project=e.project,e.value.isRenderTargetTexture||(this.value.updateMatrix(),this.value.needsUpdate=!0),this}};var ee=class extends De{constructor(e){super("f");this.nodeType="Float";this.value=e??0}generateReadonly(e,r,o,i,s,a){return e.format(this.value+(this.value%1?"":".0"),i,r)}copy(e){return super.copy(e),this.value=e.value,this}};var pn=class extends ue{constructor(e,r){super();this.inputs=[];this.nodeType="FunctionCall";this.value=e,this.inputs=r??[]}getFunction(){return this.value}getType(e){return this.value.getType(e)}generate(e,r,o,i,s){i=this.getType(e);let a=this.value,l=a.build(e,r)+"( ",c=[];if(a.inputs){for(let h=0;h<a.inputs.length;h++){let p=a.inputs[h],u=this.inputs[h]||this.inputs[p.name];c.push(u.build(e,e.getTypeByFormat(p.type)))}l+=c.join(", ")+" )"}return e.format(l,i,r)}copy(e){return super.copy(e),this.value.copy(e.value),this.inputs=e.inputs.map(r=>r.clone()),this}toJSON(e){let r=this.getJSONNode(e);if(!r){let o=this.value;if(r=this.createJSONNode(e),r.value=this.value.toJSON(e).uuid,o.inputs?.length){r.inputs={};for(let i=0;i<o.inputs.length;i++){let s=o.inputs[i],a=this.inputs[i];r.inputs[s.name]=a.toJSON(e).uuid}}}return r}};var Rl=class extends ue{constructor(e=new ce,r=new ce,o=Rl.ADD){super();this.nodeType="Operator";this.type=e.type,this.a=e,this.b=r,this.op=o}getType(e){let r=this.a.getType(e),o=this.b.getType(e);return e.isTypeMatrix(r)?"v4":e.getTypeLength(o)>e.getTypeLength(r)?o:r}generate(e,r){let o=this.getType(e);this.type=o;let i=this.a.build(e,o),s=this.b.build(e,o);return e.format("( "+i+" "+this.op+" "+s+" )",o,r)}copy(e){return super.copy(e),this.a.copy(e.a),this.b.copy(e.b),this.op=e.op,this}},Ot=Rl;Ot.ADD="+",Ot.SUB="-",Ot.MUL="*",Ot.DIV="/";var Pe=class extends ue{constructor(e=new ce,r=Pe.ABS,o,i){super();this.nodeType="Math";this.a=e,typeof r!="string"?this.b=r:i=r,typeof o!="string"?this.c=o:i=o,this.method=i,this.hashProperties=["method"]}getNumInputs(e){switch(this.method){case Pe.MIX:case Pe.CLAMP:case Pe.REFRACT:case Pe.SMOOTHSTEP:case Pe.FACEFORWARD:return 3;case Pe.MIN:case Pe.MAX:case Pe.MOD:case Pe.STEP:case Pe.REFLECT:case Pe.DISTANCE:case Pe.DOT:case Pe.CROSS:case Pe.POW:return 2;default:return 1}}getInputType(e){let r=e.getTypeLength(this.a.getType(e)),o=this.b?e.getTypeLength(this.b.getType(e)):0,i=this.c?e.getTypeLength(this.c.getType(e)):0;return r>o&&r>i?this.a.getType(e):o>i?this.b.getType(e):this.c.getType(e)}getType(e){switch(this.method){case Pe.LENGTH:case Pe.DISTANCE:case Pe.DOT:return"f";case Pe.CROSS:return"v3"}return this.getInputType(e)}generate(e,r){let o,i,s,a=this.a?e.getTypeLength(this.a.getType(e)):0,l=this.b?e.getTypeLength(this.b.getType(e)):0,c=this.c?e.getTypeLength(this.c.getType(e)):0,h=this.getInputType(e),p=this.getType(e);switch(this.type=p,this.method){case Pe.NEGATE:return e.format("( -"+this.a.build(e,h)+" )",h,r);case Pe.INVERT:return e.format("( 1.0 - "+this.a.build(e,h)+" )",h,r);case Pe.CROSS:o=this.a.build(e,"v3"),i=this.b.build(e,"v3");break;case Pe.STEP:o=this.a.build(e,a===1?"f":h),i=this.b.build(e,h);break;case Pe.MIN:case Pe.MAX:case Pe.MOD:o=this.a.build(e,h),i=this.b.build(e,l===1?"f":h);break;case Pe.REFRACT:o=this.a.build(e,h),i=this.b.build(e,h),s=this.c.build(e,"f");break;case Pe.MIX:o=this.a.build(e,h),i=this.b.build(e,h),s=this.c.build(e,c===1?"f":h);break;default:o=this.a.build(e,h),this.b&&(i=this.b.build(e,h)),this.c&&(s=this.c.build(e,h));break}let u=[];u.push(o),i&&u.push(i),s&&u.push(s);let d=this.getNumInputs(e);if(u.length!==d)throw Error(`Arguments not match used in "${this.method}". Require ${d}, currently ${u.length}.`);return e.format(this.method+"( "+u.join(", ")+" )",p,r)}copy(e){return super.copy(e),this.a.copy(e.a),this.b=e.b instanceof ce?e.b.clone():e.b,this.c=e.c instanceof ce?e.c.clone():e.c,this.method=e.method,this}},me=Pe;me.RAD="radians",me.DEG="degrees",me.EXP="exp",me.EXP2="exp2",me.LOG="log",me.LOG2="log2",me.SQRT="sqrt",me.INV_SQRT="inversesqrt",me.FLOOR="floor",me.CEIL="ceil",me.NORMALIZE="normalize",me.FRACT="fract",me.SATURATE="saturate",me.SIN="sin",me.COS="cos",me.TAN="tan",me.ASIN="asin",me.ACOS="acos",me.ARCTAN="atan",me.ABS="abs",me.SIGN="sign",me.LENGTH="length",me.NEGATE="negate",me.INVERT="invert",me.MIN="min",me.MAX="max",me.MOD="mod",me.STEP="step",me.REFLECT="reflect",me.DISTANCE="distance",me.DOT="dot",me.CROSS="cross",me.POW="pow",me.MIX="mix",me.CLAMP="clamp",me.REFRACT="refract",me.SMOOTHSTEP="smoothstep",me.FACEFORWARD="faceforward";var di=class extends ue{constructor(e=new ce,r=new ce,o=new ce){super("v4");this.nodeType="TextureCubeUV";this.value=e,this.uv=r,this.bias=o}bilinearCubeUV(e,r,o,i){let s=new pn(di.Nodes.bilinearCubeUV,[r,o,i]);this.colorSpaceTL=this.colorSpaceTL??new bt(new Ie("","v4")),this.colorSpaceTL.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceTL.input.parse(s.build(e)+".tl"),this.colorSpaceTR=this.colorSpaceTR??new bt(new Ie("","v4")),this.colorSpaceTR.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceTR.input.parse(s.build(e)+".tr"),this.colorSpaceBL=this.colorSpaceBL??new bt(new Ie("","v4")),this.colorSpaceBL.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceBL.input.parse(s.build(e)+".bl"),this.colorSpaceBR=this.colorSpaceBR??new bt(new Ie("","v4")),this.colorSpaceBR.fromDecoding(e.getTextureEncodingFromMap(this.value.value)),this.colorSpaceBR.input.parse(s.build(e)+".br");let a={include:e.isShader("vertex"),ignoreCache:!0};e.addContext(a),this.colorSpaceTLExp=new Ie(this.colorSpaceTL.build(e,"v4"),"v4"),this.colorSpaceTRExp=new Ie(this.colorSpaceTR.build(e,"v4"),"v4"),this.colorSpaceBLExp=new Ie(this.colorSpaceBL.build(e,"v4"),"v4"),this.colorSpaceBRExp=new Ie(this.colorSpaceBR.build(e,"v4"),"v4"),e.removeContext();let l=new Ie("mix( mix( cubeUV_TL, cubeUV_TR, cubeUV.f.x ), mix( cubeUV_BL, cubeUV_BR, cubeUV.f.x ), cubeUV.f.y )","v4");return l.keywords.cubeUV_TL=this.colorSpaceTLExp,l.keywords.cubeUV_TR=this.colorSpaceTRExp,l.keywords.cubeUV_BL=this.colorSpaceBLExp,l.keywords.cubeUV_BR=this.colorSpaceBRExp,l.keywords.cubeUV=s,l}generate(e,r){if(e.isShader("fragment")){let o=this.uv,i=this.bias||e.context.roughness,s=new pn(di.Nodes.roughnessToMip,[i]),a=new me(s,di.Nodes.m0,di.Nodes.cubeUV_maxMipLevel,me.CLAMP),l=new me(a,me.FLOOR),c=new me(a,me.FRACT),h=this.bilinearCubeUV(e,this.value,o,l),p=this.bilinearCubeUV(e,this.value,o,new Ot(l,new ee(1).setReadonly(!0),Ot.ADD)),u=new me(h,p,c,me.MIX);return e.format(u.build(e),"v4",r)}else return console.warn("TextureCubeUVNode is not compatible with "+e.shader+" shader."),e.format("vec4( 0.0 )",this.getType(e),r)}copy(e){return super.copy(e),this.uv.copy(e.uv),this.bias.copy(e.bias),this.value.copy(e.value),e.colorSpaceTL?this.colorSpaceTL?this.colorSpaceTL.copy(e.colorSpaceTL):this.colorSpaceTL=e.colorSpaceTL.clone():this.colorSpaceTL=void 0,e.colorSpaceTR?this.colorSpaceTR?this.colorSpaceTR.copy(e.colorSpaceTR):this.colorSpaceTR=e.colorSpaceTR.clone():this.colorSpaceTR=void 0,e.colorSpaceBL?this.colorSpaceBL?this.colorSpaceBL.copy(e.colorSpaceBL):this.colorSpaceBL=e.colorSpaceBL.clone():this.colorSpaceBL=void 0,e.colorSpaceBR?this.colorSpaceBR?this.colorSpaceBR.copy(e.colorSpaceBR):this.colorSpaceBR=e.colorSpaceBR.clone():this.colorSpaceBR=void 0,e.colorSpaceTLExp?this.colorSpaceTLExp?this.colorSpaceTLExp.copy(e.colorSpaceTLExp):this.colorSpaceTLExp=e.colorSpaceTLExp.clone():this.colorSpaceTLExp=void 0,e.colorSpaceTRExp?this.colorSpaceTRExp?this.colorSpaceTRExp.copy(e.colorSpaceTRExp):this.colorSpaceTRExp=e.colorSpaceTRExp.clone():this.colorSpaceTRExp=void 0,e.colorSpaceBLExp?this.colorSpaceBLExp?this.colorSpaceBLExp.copy(e.colorSpaceBLExp):this.colorSpaceBLExp=e.colorSpaceBLExp.clone():this.colorSpaceBLExp=void 0,e.colorSpaceBRExp?this.colorSpaceBRExp?this.colorSpaceBRExp.copy(e.colorSpaceBRExp):this.colorSpaceBRExp=e.colorSpaceBRExp.clone():this.colorSpaceBRExp=void 0,this}},mi=di;mi.Nodes=function(){let e=new hi(`struct TextureCubeUVData {
|
|
6
|
+
vec4 tl;
|
|
7
|
+
vec4 tr;
|
|
8
|
+
vec4 br;
|
|
9
|
+
vec4 bl;
|
|
10
|
+
vec2 f;
|
|
11
|
+
}`),r=new we("float cubeUV_maxMipLevel 8.0",!0),o=new we("float cubeUV_minMipLevel 4.0",!0),i=new we("float cubeUV_maxTileSize 256.0",!0),s=new we("float cubeUV_minTileSize 16.0",!0),a=new te(`float getFace(vec3 direction) {
|
|
12
|
+
vec3 absDirection = abs(direction);
|
|
13
|
+
float face = -1.0;
|
|
14
|
+
if (absDirection.x > absDirection.z) {
|
|
15
|
+
if (absDirection.x > absDirection.y)
|
|
16
|
+
face = direction.x > 0.0 ? 0.0 : 3.0;
|
|
17
|
+
else
|
|
18
|
+
face = direction.y > 0.0 ? 1.0 : 4.0;
|
|
19
|
+
} else {
|
|
20
|
+
if (absDirection.z > absDirection.y)
|
|
21
|
+
face = direction.z > 0.0 ? 2.0 : 5.0;
|
|
22
|
+
else
|
|
23
|
+
face = direction.y > 0.0 ? 1.0 : 4.0;
|
|
24
|
+
}
|
|
25
|
+
return face;
|
|
26
|
+
}`);a.useKeywords=!1;let l=new te(`vec2 getUV(vec3 direction, float face) {
|
|
27
|
+
vec2 uv;
|
|
28
|
+
if (face == 0.0) {
|
|
29
|
+
uv = vec2(direction.z, direction.y) / abs(direction.x); // pos x
|
|
30
|
+
} else if (face == 1.0) {
|
|
31
|
+
uv = vec2(-direction.x, -direction.z) / abs(direction.y); // pos y
|
|
32
|
+
} else if (face == 2.0) {
|
|
33
|
+
uv = vec2(-direction.x, direction.y) / abs(direction.z); // pos z
|
|
34
|
+
} else if (face == 3.0) {
|
|
35
|
+
uv = vec2(-direction.z, direction.y) / abs(direction.x); // neg x
|
|
36
|
+
} else if (face == 4.0) {
|
|
37
|
+
uv = vec2(-direction.x, direction.z) / abs(direction.y); // neg y
|
|
38
|
+
} else {
|
|
39
|
+
uv = vec2(direction.x, direction.y) / abs(direction.z); // neg z
|
|
40
|
+
}
|
|
41
|
+
return 0.5 * (uv + 1.0);
|
|
42
|
+
}`);l.useKeywords=!1;let c=new te(`TextureCubeUVData bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {
|
|
43
|
+
float face = getFace(direction);
|
|
44
|
+
float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);
|
|
45
|
+
mipInt = max(mipInt, cubeUV_minMipLevel);
|
|
46
|
+
float faceSize = exp2(mipInt);
|
|
47
|
+
float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);
|
|
48
|
+
vec2 uv = getUV(direction, face) * (faceSize - 1.0);
|
|
49
|
+
vec2 f = fract(uv);
|
|
50
|
+
uv += 0.5 - f;
|
|
51
|
+
if (face > 2.0) {
|
|
52
|
+
uv.y += faceSize;
|
|
53
|
+
face -= 3.0;
|
|
54
|
+
}
|
|
55
|
+
uv.x += face * faceSize;
|
|
56
|
+
if(mipInt < cubeUV_maxMipLevel){
|
|
57
|
+
uv.y += 2.0 * cubeUV_maxTileSize;
|
|
58
|
+
}
|
|
59
|
+
uv.y += filterInt * 2.0 * cubeUV_minTileSize;
|
|
60
|
+
uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);
|
|
61
|
+
uv *= texelSize;
|
|
62
|
+
vec4 tl = texture2D(envMap, uv);
|
|
63
|
+
uv.x += texelSize;
|
|
64
|
+
vec4 tr = texture2D(envMap, uv);
|
|
65
|
+
uv.y += texelSize;
|
|
66
|
+
vec4 br = texture2D(envMap, uv);
|
|
67
|
+
uv.x -= texelSize;
|
|
68
|
+
vec4 bl = texture2D(envMap, uv);
|
|
69
|
+
return TextureCubeUVData( tl, tr, br, bl, f );
|
|
70
|
+
}`,[e,a,l,r,o,i,s]);c.useKeywords=!1;let h=new we("float r0 1.0",!0),p=new we("float v0 0.339",!0),u=new we("float m0 -2.0",!0),d=new we("float r1 0.8",!0),m=new we("float v1 0.276",!0),g=new we("float m1 -1.0",!0),x=new we("float r4 0.4",!0),y=new we("float v4 0.046",!0),b=new we("float m4 2.0",!0),C=new we("float r5 0.305",!0),S=new we("float v5 0.016",!0),v=new we("float m5 3.0",!0),z=new we("float r6 0.21",!0),w=new we("float v6 0.0038",!0),f=new we("float m6 4.0",!0),D=[h,p,u,d,m,g,x,y,b,C,S,v,z,w,f],L=new te(`float roughnessToMip(float roughness) {
|
|
71
|
+
float mip = 0.0;
|
|
72
|
+
if (roughness >= r1) {
|
|
73
|
+
mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;
|
|
74
|
+
} else if (roughness >= r4) {
|
|
75
|
+
mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;
|
|
76
|
+
} else if (roughness >= r5) {
|
|
77
|
+
mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;
|
|
78
|
+
} else if (roughness >= r6) {
|
|
79
|
+
mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;
|
|
80
|
+
} else {
|
|
81
|
+
mip = -2.0 * log2(1.16 * roughness);// 1.16 = 1.79^0.25
|
|
82
|
+
}
|
|
83
|
+
return mip;
|
|
84
|
+
}`,D);return{bilinearCubeUV:c,roughnessToMip:L,m0:u,cubeUV_maxMipLevel:r}}();var bo=class extends ue{constructor(e){super("v3");this.nodeType="Normal";this.scope=e??bo.VIEW}getShared(){return this.scope===bo.WORLD}build(e,r,o,i){let s=e.context[this.scope+"Normal"];return s?s.build(e,r,o,i):super.build(e,r,o)}generate(e,r,o,i,s){let a;switch(this.scope){case bo.VIEW:e.isShader("vertex")?a="transformedNormal":a="geometryNormal";break;case bo.LOCAL:e.isShader("vertex")?a="objectNormal":(e.requires.normal=!0,a="vObjectNormal");break;case bo.WORLD:e.isShader("vertex")?a="inverseTransformDirection( transformedNormal, viewMatrix ).xyz":(e.requires.worldNormal=!0,a="vWNormal");break}return e.format(a,this.getType(e),r)}copy(e){return super.copy(e),this.scope=e.scope,this}toJSON(e){let r=this.getJSONNode(e);return r||(r=this.createJSONNode(e),r.scope=this.scope),r.nodeType=this.nodeType,r}fromJSON(e,r){return super.fromJSON(e,r),e.scope&&(this.scope=e.scope),this}},it=bo;it.LOCAL="local",it.WORLD="world",it.VIEW="view",it.NORMAL="normal";rt.addKeyword("viewNormal",function(){return new it(it.VIEW)});rt.addKeyword("localNormal",function(){return new it(it.NORMAL)});rt.addKeyword("worldNormal",function(){return new it(it.WORLD)});var yr=class extends ue{constructor(e){super("v3");this.nodeType="Position";this.scope=e??yr.LOCAL}getType(){switch(this.scope){case yr.PROJECTION:return"v4"}return this.type}getShader(){switch(this.scope){case yr.LOCAL:case yr.WORLD:return!1}return!0}generate(e,r,o,i,s){let a;switch(this.scope){case yr.LOCAL:e.isShader("vertex")?a="transformed":(e.requires.position=!0,a="vPosition");break;case yr.WORLD:if(e.isShader("vertex"))return"( modelMatrix * vec4( transformed, 1.0 ) ).xyz";e.requires.worldPosition=!0,a="vWPosition";break;case yr.VIEW:a=e.isShader("vertex")?"-mvPosition.xyz":"vViewPosition";break;case yr.PROJECTION:a=e.isShader("vertex")?"( projectionMatrix * modelViewMatrix * vec4( position, 1.0 ) )":"vec4( 0.0 )";break}return e.format(a,this.getType(),r)}copy(e){return super.copy(e),this.scope=e.scope,this}toJSON(e){let r=this.getJSONNode(e);return r||(r=this.createJSONNode(e),r.scope=this.scope),r.nodeType=this.nodeType,r}fromJSON(e,r){return super.fromJSON(e,r),e.scope&&(this.scope=e.scope),this}},st=yr;st.LOCAL="local",st.WORLD="world",st.VIEW="view",st.PROJECTION="projection";rt.addKeyword("position",function(){return new st});rt.addKeyword("worldPosition",function(){return new st(st.WORLD)});rt.addKeyword("viewPosition",function(){return new st(st.VIEW)});var Qt=class extends ue{constructor(e){super("v3");this.nodeType="Reflect";this.scope=e??Qt.CUBE}getUnique(e){return!e.context.viewNormal}getType(){switch(this.scope){case Qt.SPHERE:return"v2"}return this.type}generate(e,r){let o=this.getUnique(e);if(e.isShader("fragment")){let i;switch(this.scope){case Qt.VECTOR:{let s=new it(it.VIEW),a=e.context.roughness,l=s.build(e,"v3"),c=new st(st.VIEW).build(e,"v3"),h=a?a.build(e,"f"):void 0,p=`reflect( -normalize( ${c} ), ${l} )`;h&&(p=`normalize( mix( ${p}, ${l}, ${h} * ${h} ) )`);let u=`inverseTransformDirection( ${p}, viewMatrix )`;o?(e.addNodeCode(`vec3 reflectVec = ${u};`),i="reflectVec"):i=u;break}case Qt.CUBE:{let s=new Qt(Qt.VECTOR).build(e,"v3"),a="vec3( -"+s+".x, "+s+".yz )";o?(e.addNodeCode(`vec3 reflectCubeVec = ${a};`),i="reflectCubeVec"):i=a;break}case Qt.SPHERE:{let s=new Qt(Qt.VECTOR).build(e,"v3"),a="normalize( ( viewMatrix * vec4( "+s+", 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) ).xy * 0.5 + 0.5";o?(e.addNodeCode(`vec2 reflectSphereVec = ${a};`),i="reflectSphereVec"):i=a;break}}return e.format(i,this.getType(),r)}else return console.warn("ReflectNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.type,r)}copy(e){return super.copy(e),this.scope=e.scope,this}toJSON(e){let r=this.getJSONNode(e);return r||(r=this.createJSONNode(e),r.scope=this.scope),r.nodeType=this.nodeType,r}fromJSON(e,r){return super.fromJSON(e,r),e.scope&&(this.scope=e.scope),this}},xr=Qt;xr.CUBE="cube",xr.SPHERE="sphere",xr.VECTOR="vector";var sa=class extends ue{constructor(e=new vt,r,o){super("v4");this.nodeType="TextureCube";this.value=e,this.radianceNode=new mi(this.value,r??new xr(xr.VECTOR),o),this.irradianceNode=new mi(this.value,new it(it.WORLD),new ee(1).setReadonly(!0))}generate(e,r){return e.isShader("fragment")?(e.require("irradiance"),e.context.bias&&e.context.bias.setTexture(this.value),(e.slot==="irradiance"?this.irradianceNode:this.radianceNode).build(e,r)):(console.warn("TextureCubeNode is not compatible with "+e.shader+" shader."),e.format("vec4( 0.0 )",this.getType(e),r))}copy(e){return super.copy(e),this.value.copy(e.value),this.radianceNode.copy(e.radianceNode),this.irradianceNode.copy(e.irradianceNode),this}};var id=require("three");var aa=class extends De{constructor(e=new id.CubeTexture,r,o){super("v4",{shared:!0});this.nodeType="CubeTexture";this.value=e,this.uv=r??new xr,this.bias=o}getTexture(e,r){return super.generate(e,r,this.value.uuid,"tc")}generate(e,r){if(r==="samplerCube")return this.getTexture(e,r);let o=this.getTexture(e,r),i=this.uv?.build(e,"v3"),s=this.bias?this.bias.build(e,"f"):void 0;s===void 0&&e.context.bias&&(s=e.context.bias.setTexture(this).build(e,"f"));let a;s?a="texCubeBias( "+o+", "+i+", "+s+" )":a="texCube( "+o+", "+i+" )";let l={include:e.isShader("vertex"),ignoreCache:!0},c=this.getType(e);return e.addContext(l),this.colorSpace=this.colorSpace??new bt(new Ie("",c)),this.colorSpace.fromDecoding(e.getTextureEncodingFromMap(this.value)),this.colorSpace.input.parse(a),a=this.colorSpace.build(e,c),e.removeContext(),e.format(a,c,r)}copy(e){return super.copy(e),this.value.copy(e.value),e.uv?this.uv?this.uv.copy(e.uv):this.uv=e.uv.clone():this.uv=void 0,e.bias?this.bias?this.bias.copy(e.bias):this.bias=e.bias.clone():this.bias=void 0,this}};var nd=["x","y","z","w"],ov=["float","vec2","vec3","vec4"],iv={float:"f",vec2:"v2",vec3:"v3",vec4:"v4",mat4:"v4",int:"i",bool:"b","float[]":"f[]","vec4[]":"v4[]"},nv={t:"sampler2D",tc:"samplerCube",b:"bool",i:"int",f:"float",c:"vec3",v2:"vec2",v3:"vec3",v4:"vec4",m3:"mat3",m4:"mat4","f[]":"float[]","v4[]":"vec4[]"},la=class{constructor(){this.includes={consts:{},functions:{},structs:{}};this.cache="";this.slot="";this.shader="";this.context={};this.getIncludesCode=function(){function t(e,r){return e.deps.length-r.deps.length}return function(r,o){let i=this.getIncludes(r,o);if(!i)return"";let s="";i=i.sort(t);for(let a=0;a<i.length;a++)i[a].src&&(s+=i[a].src+`
|
|
85
|
+
`);return s}}();this.slots=[],this.caches=[],this.contexts=[],this.keywords={},this.nodeData={},this.fragmentVariables={},this.requires={uv:[],color:[],lights:!1,fog:!1,transparent:!1,irradiance:!1,position:!1,worldPosition:!1,normal:!1,worldNormal:!1,vWorldViewDir:!1,modelMatrix:!1,viewMatrix:!1,projectionMatrix:!1},this.includes={consts:[],functions:[],structs:[]},this.attributes={},this.prefixCode=["#ifdef TEXTURE_LOD_EXT"," #define texCube(a, b) textureCube(a, b)"," #define texCubeBias(a, b, c) textureCubeLodEXT(a, b, c)"," #define tex2D(a, b) texture2D(a, b)"," #define tex2DBias(a, b, c) texture2DLodEXT(a, b, c)","#else"," #define texCube(a, b) textureCube(a, b)"," #define texCubeBias(a, b, c) textureCube(a, b, c)"," #define tex2D(a, b) texture2D(a, b)"," #define tex2DBias(a, b, c) texture2D(a, b, c)","#endif",`
|
|
86
|
+
// NOTE: Include Spline's blending modes. This could be part of BlendNode
|
|
87
|
+
#define SPE_BLENDING_NORMAL 0
|
|
88
|
+
#define SPE_BLENDING_MULTIPLY 1
|
|
89
|
+
#define SPE_BLENDING_SCREEN 2
|
|
90
|
+
#define SPE_BLENDING_OVERLAY 3
|
|
91
|
+
|
|
92
|
+
vec3 spe_normalBlend( vec3 a, vec3 b, float alpha ) {
|
|
93
|
+
return mix( a, b, alpha );
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
vec3 spe_multiplyBlend( vec3 a, vec3 b, float alpha ) {
|
|
97
|
+
return mix( a, a * b, alpha );
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
vec3 spe_screenBlend( vec3 a, vec3 b, float alpha ) {
|
|
101
|
+
vec3 tmp = 1.0 - ( 1.0 - a ) * ( 1.0 - b );
|
|
102
|
+
return mix( a, tmp, alpha );
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
vec3 spe_overlayBlend( vec3 a, vec3 b, float alpha ) {
|
|
106
|
+
vec3 tmp = mix( 1. - 2. * (1. - a) * (1. - b), 2. * a * b, step( a, vec3(.5) ) );
|
|
107
|
+
return clamp( mix( a, tmp, alpha ), 0.0, 1.0 );
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
vec3 spe_blend( vec3 a, vec3 b, float alpha, int mode ) {
|
|
111
|
+
if ( mode == SPE_BLENDING_NORMAL ) return spe_normalBlend( a, b, alpha );
|
|
112
|
+
else if ( mode == SPE_BLENDING_MULTIPLY ) return spe_multiplyBlend( a, b, alpha );
|
|
113
|
+
else if ( mode == SPE_BLENDING_SCREEN ) return spe_screenBlend( a, b, alpha );
|
|
114
|
+
else if ( mode == SPE_BLENDING_OVERLAY ) return spe_overlayBlend( a, b, alpha );
|
|
115
|
+
return vec3( 1.0 );
|
|
116
|
+
}
|
|
117
|
+
`,"#include <packing>","#include <common>"].join(`
|
|
118
|
+
`),this.parsCode={vertex:["float neighbor_offset = 0.0001;",""].join(`
|
|
119
|
+
`),fragment:["float accumAlpha = 0.0;",`void accumulateAlpha(float alpha) {
|
|
120
|
+
accumAlpha += (1.0 - accumAlpha) * alpha;
|
|
121
|
+
}`,""].join(`
|
|
122
|
+
`)},this.code={vertex:"",fragment:""},this.nodeCode={vertex:"",fragment:""},this.resultCode={vertex:"",fragment:""},this.finalCode={vertex:"",fragment:""},this.inputs={uniforms:{list:[],vertex:[],fragment:[]},arrayUniforms:{list:[],vertex:[],fragment:[]},vars:{varying:[],vertex:[],fragment:[]}},this.defines={},this.uniforms={},this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.updaters=[],this.nodes=[],this.analyzing=!1}build(t,e){this.buildShader("vertex",t),this.buildShader("fragment",e);for(let r=0;r<this.requires.uv.length;r++)if(this.requires.uv[r]){let o=r>0?r+1:"";this.addVaryCode("varying vec2 vUv"+o+";"),r>0&&this.addVertexParsCode("attribute vec2 uv"+o+";"),this.addVertexFinalCode("vUv"+o+" = uv"+o+";")}return this.requires.color[0]&&(this.addVaryCode("varying vec4 vColor;"),this.addVertexParsCode("attribute vec4 color;"),this.addVertexFinalCode("vColor = color;")),this.requires.color[1]&&(this.addVaryCode("varying vec4 vColor2;"),this.addVertexParsCode("attribute vec4 color2;"),this.addVertexFinalCode("vColor2 = color2;")),this.requires.position&&(this.addVaryCode("varying vec3 vPosition;"),this.addVertexFinalCode("vPosition = transformed;")),this.requires.worldPosition,this.requires.normal&&(this.addVaryCode("varying vec3 vObjectNormal;"),this.addVertexFinalCode("vObjectNormal = normal;")),this.requires.modelMatrix&&this.addFragmentParsCode("uniform mat4 modelMatrix;"),this.requires.viewMatrix&&this.addFragmentParsCode("uniform mat4 viewMatrix;"),this.requires.projectionMatrix&&this.addFragmentParsCode("uniform mat4 projectionMatrix;"),this.requires.worldNormal&&(this.addVaryCode("varying vec3 vWNormal;"),this.addVertexFinalCode("vWNormal = inverseTransformDirection( transformedNormal, viewMatrix ).xyz;")),this.requires.vWorldViewDir&&(this.addVaryCode("varying vec3 vWorldViewDir;"),this.addVertexFinalCode("vWorldViewDir = isPerspectiveMatrix( projectionMatrix ) ? ( (modelMatrix * vec4(position, 1.0)).xyz - cameraPosition ) : vec3( -viewMatrix[0][2], -viewMatrix[1][2], -viewMatrix[2][2] );")),this}buildShader(t,e){this.resultCode[t]=e.build(this.setShader(t),"v4")}setMaterial(t,e){return this.material=t,this.renderer=e,this.requires.lights=t.lights,this.requires.fog=t.fog,this.mergeDefines(t.defines),this}addFlow(t,e,r){return this.addSlot(t).addCache(e).addContext(r)}removeFlow(){return this.removeSlot().removeCache().removeContext()}addCache(t){return this.cache=t??"",this.caches.push(this.cache),this}removeCache(){return this.caches.pop(),this.cache=this.caches[this.caches.length-1]||"",this}addContext(t){return this.context=Object.assign({},this.context,t),this.context.extra=this.context.extra||{},this.contexts.push(this.context),this}removeContext(){return this.contexts.pop(),this.context=this.contexts[this.contexts.length-1]||{},this}addSlot(t){return this.slot=t||"",this.slots.push(this.slot),this}removeSlot(){return this.slots.pop(),this.slot=this.slots[this.slots.length-1]||"",this}addFragmentVariable(t,e){this.fragmentVariables[t]===void 0&&(this.addFragmentCode(`${e} ${t};`),this.fragmentVariables[t]="")}addVertexCode(t){this.addCode(t,"vertex")}addFragmentCode(t){this.addCode(t,"fragment")}addCode(t,e){this.code[e??this.shader]+=t+`
|
|
123
|
+
`}addVertexNodeCode(t){this.addNodeCode(t,"vertex")}addFragmentNodeCode(t){this.addNodeCode(t,"fragment")}addNodeCode(t,e){this.nodeCode[e??this.shader]+=t+`
|
|
124
|
+
`}clearNodeCode(t){t=t??this.shader;let e=this.nodeCode[t];return this.nodeCode[t]="",e}clearVertexNodeCode(){return this.clearNodeCode("vertex")}clearFragmentNodeCode(){return this.clearNodeCode("fragment")}addVertexFinalCode(t){this.addFinalCode(t,"vertex")}addFragmentFinalCode(t){this.addFinalCode(t,"fragment")}addFinalCode(t,e){this.finalCode[e??this.shader]+=t+`
|
|
125
|
+
`}addVertexParsCode(t){this.addParsCode(t,"vertex")}addFragmentParsCode(t){this.addParsCode(t,"fragment")}addParsCode(t,e){this.parsCode[e??this.shader]+=t+`
|
|
126
|
+
`}addVaryCode(t){this.addVertexParsCode(t),this.addFragmentParsCode(t)}isCache(t){return this.caches.indexOf(t)!==-1}isSlot(t){return this.slots.indexOf(t)!==-1}define(t,e){this.defines[t]=e===void 0?1:e}require(t){this.requires[t]=!0}isDefined(t){return this.defines[t]!==void 0}getVar(t,e,r,o="varying",i="V",s=""){let a=this.getVars(o),l=a[t];if(!l){let c=a.length;l={name:r||"node"+i+c+(s?"_"+s:""),type:e},a.push(l),a[t]=l}return l}getTempVar(t,e,r,o){return this.getVar(t,e,r,this.shader,"T",o)}getAttribute(t,e){if(!this.attributes[t]){let r=this.getVar(t,e);this.addVertexParsCode("attribute "+e+" "+t+";"),this.addVertexFinalCode(r.name+" = "+t+";"),this.attributes[t]={varying:r,name:t,type:e}}return this.attributes[t]}getCode(t){return[this.prefixCode,this.parsCode[t],this.getVarListCode(this.getVars("varying"),"varying"),this.getVarListCode(this.inputs.uniforms[t],"uniform"),this.getVarListCode(this.inputs.arrayUniforms[t],"uniform"),this.getIncludesCode("consts",t),this.getIncludesCode("structs",t),this.getIncludesCode("functions",t),"void main() {",this.getVarListCode(this.getVars(t)),this.code[t],this.resultCode[t],this.finalCode[t],"}"].join(`
|
|
127
|
+
`)}getVarListCode(t,e){e=e??"";let r="";for(let o=0,i=t.length;o<i;++o){let s=t[o],a=s.type,l=s.name,c=s.size,h=this.getFormatByType(a);if(h===void 0)throw new Error("Node pars "+h+" not found.");h.includes("[]")?r+=e+" "+h.substring(0,h.length-2)+" "+l+`[${c}];
|
|
128
|
+
`:r+=e+" "+h+" "+l+`;
|
|
129
|
+
`}return r}getVars(t){return this.inputs.vars[t??this.shader]}getNodeData(t){let e=t instanceof ce?t.uuid:t;return this.nodeData[e]=this.nodeData[e]||{}}createUniform(t,e,r,o,i,s){if(e.includes("[]")){let a=this.inputs.arrayUniforms,l=a.list.length,c=new hn({type:e,size:r.size,name:o||"nodeUA"+l+(s?"_"+s:""),node:r,needsUpdate:i});return a.list.push(c),a[t].push(c),a[t][c.name]=c,this.uniforms[c.name]=c,c}else{let a=this.inputs.uniforms,l=a.list.length,c=new hn({type:e,name:o||"nodeU"+l+(s?"_"+s:""),node:r,needsUpdate:i});return a.list.push(c),a[t].push(c),a[t][c.name]=c,this.uniforms[c.name]=c,c}}createVertexUniform(t,e,r,o,i){return this.createUniform("vertex",t,e,r,o,i)}createFragmentUniform(t,e,r,o,i){return this.createUniform("fragment",t,e,r,o,i)}include(t,e,r){let o;if(t=typeof t=="string"?rt.get(t):t,this.context.include===!1)return t.name;t instanceof te?o=this.includes.functions:t instanceof we?o=this.includes.consts:t instanceof hi&&(o=this.includes.structs);let i=o[this.shader]=o[this.shader]||[];if(t){let s=i[t.name];if(s||(s=i[t.name]={node:t,deps:[]},i.push(s),s.src=t.build(this,"source")),t instanceof te&&e&&i[e.name]&&i[e.name].deps.indexOf(t)===-1&&(i[e.name].deps.push(t),t.includes?.length)){let a=0;do this.include(t.includes[a++],e);while(a<t.includes.length)}return r&&(s.src=r),t.name}else throw new Error("Include not found.")}colorToVectorProperties(t){return t.replace("r","x").replace("g","y").replace("b","z").replace("a","w")}colorToVector(t){return t.replace(/c/g,"v3")}getIncludes(t,e){return this.includes[t][e||this.shader]}getConstructorFromLength(t){return ov[t-1]}isTypeMatrix(t){return/^m/.test(t)}getTypeLength(t){return t==="f"?1:parseInt(this.colorToVector(t).substr(1))}getTypeFromLength(t){return t===1?"f":"v"+t}findNode(...t){for(let e=0;e<arguments.length;e++){let r=t[e];if(r?.isNode)return r}}resolve(...t){for(let e=0;e<arguments.length;e++){let r=t[e];if(r!==void 0){if(r.isNode)return r;if(r.isTexture)switch(r.mapping){case Zt.CubeReflectionMapping:case Zt.CubeRefractionMapping:return new aa(r);case Zt.CubeUVReflectionMapping:return new sa(new vt(r));default:return new vt(r)}else{if(r.isVector2)return new ut(r);if(r.isVector3)return new dt(r);if(r.isVector4)return new _r(r)}}}}format(t,e,r){switch(this.colorToVector(r+" <- "+e)){case"f <- v2":return t+".x";case"f <- v3":return t+".x";case"f <- v4":return t+".x";case"f <- i":case"f <- b":return"float( "+t+" )";case"v2 <- f":return"vec2( "+t+" )";case"v2 <- v3":return t+".xy";case"v2 <- v4":return t+".xy";case"v2 <- i":case"v2 <- b":return"vec2( float( "+t+" ) )";case"v3 <- f":return"vec3( "+t+" )";case"v3 <- v2":return"vec3( "+t+", 0.0 )";case"v3 <- v4":return t+".xyz";case"v3 <- i":case"v3 <- b":return"vec2( float( "+t+" ) )";case"v4 <- f":return"vec4( "+t+" )";case"v4 <- v2":return"vec4( "+t+", 0.0, 1.0 )";case"v4 <- v3":return"vec4( "+t+", 1.0 )";case"v4 <- i":case"v4 <- b":return"vec4( float( "+t+" ) )";case"i <- f":case"i <- b":return"int( "+t+" )";case"i <- v2":return"int( "+t+".x )";case"i <- v3":return"int( "+t+".x )";case"i <- v4":return"int( "+t+".x )";case"b <- f":return"( "+t+" != 0.0 )";case"b <- v2":return"( "+t+" != vec2( 0.0 ) )";case"b <- v3":return"( "+t+" != vec3( 0.0 ) )";case"b <- v4":return"( "+t+" != vec4( 0.0 ) )";case"b <- i":return"( "+t+" != 0 )"}return t}getTypeByFormat(t){return iv[t]||t}getFormatByType(t){return nv[t]||t}getUUID(t,e){return e=e!==void 0?e:!0,e&&this.cache&&(t=this.cache+"-"+t),t}getElementByIndex(t){return nd[t]}getIndexByElement(t){return nd.indexOf(t)}isShader(t){return this.shader===t}setShader(t){return this.shader=t,this}mergeDefines(t){for(let e in t)this.defines[e]=t[e];return this.defines}mergeUniform(t){for(let e in t)this.uniforms[e]=t[e];return this.uniforms}getTextureEncodingFromMap(t){let e;return t?t.isTexture&&(e=t.encoding):e=Zt.LinearEncoding,e===Zt.LinearEncoding&&this.context.gamma&&(e=Zt.sRGBEncoding),e}};var un=class extends ce{constructor(e=new ce){super("v4");this.nodeType="Raw";this.value=e}generate(e){let r=this.value.analyzeAndFlow(e,this.type),o=r.code+`
|
|
130
|
+
`;return e.isShader("vertex")?o+="gl_Position = "+r.result+";":o+="gl_FragColor = "+r.result+";",o}copy(e){return super.copy(e),this.value.copy(e.value),this}};var Oe=class extends De{constructor(e=0,r,o,i){super("c");this.nodeType="Color";this.value=e instanceof It?e:new It(e||0,r,o,i)}setRGBA(e){this.value.setRGBA(e.r,e.g,e.b,e.a)}generate(e,r,o,i,s,a){o=e.getUUID(o??this.getUUID()),i=i??this.getType(e);let l=e.getNodeData(o),c=this.getReadonly()&&this.generateReadonly!==void 0;if(this.alpha){let h=this.alpha.build(e,"f");e.addFragmentNodeCode(`accumAlpha += ( 1.0 - accumAlpha ) * ${h};`)}return c?this.generateReadonly(e,r,o,i,s,a):e.isShader("vertex")?(l.vertex||(l.vertex=e.createVertexUniform(i,this,s,a,this.getLabel())),e.format(l.vertex.name,i,r)):(l.fragment||(l.fragment=e.createFragmentUniform(i,this,s,a,this.getLabel())),e.format(l.fragment.name,i,r))}generateReadonly(e,r,o,i,s,a){return e.format("vec3("+this.value.r+", "+this.value.g+", "+this.value.b+")",i,r)}};var Le=require("three");var sd=require("three");var ye=class extends De{constructor(e){super("i");this.nodeType="Int";this.value=Math.floor(e??0)}generateReadonly(e,r,o,i,s,a){return e.format(this.value.toString(),i,r)}copy(e){return super.copy(e),this.value=e.value,this}};var Re=class{constructor(t,e,r,o){this.next=void 0;this.uniforms={};this.textures={};this.defines={};if(this.id=t,this.uuid=e,r){this.type=r.type;for(let i in r)i!=="type"&&i!=="calpha"&&(this.uniforms[`f${this.id}_${i}`]=r[i]);for(let i in o)this.defines[i]=o[i]}}copy(t){this.id=t.id,this.type=t.type,this.defines={...t.defines};for(let e in t.uniforms)this.getName(e)==="transmissionSamplerMap"||this.getName(e)==="transmissionDepthMap"||(this.uniforms[e]?this.uniforms[e].copy(t.uniforms[e]):this.uniforms[e]=t.uniforms[e].clone());return this}clone(){return new Re(this.id).copy(this)}fromJSON(t,e){this.id=t.id,this.defines={...t.defines};for(let r in t.uniforms)this.uniforms[r]=e.getNode(t.uniforms[r]);if(t.type==="texture"){if(!(`f${this.id}_textureSize`in this.uniforms)){let r=this.uniforms[`f${this.id}_texture`].value.image;this.uniforms[`f${t.id}_textureSize`]=new dt(r.width,r.height)}`f${this.id}_size`in this.uniforms||(this.uniforms[`f${t.id}_size`]=new ut(200,200)),`f${t.id}_axis`in this.uniforms||(this.uniforms[`f${t.id}_axis`]=new ye(0)),`f${t.id}_side`in this.uniforms||(this.uniforms[`f${t.id}_side`]=new ye(0)),`f${t.id}_projection`in this.uniforms||(this.uniforms[`f${t.id}_projection`]=new ye(0))}else t.type==="noise"?(`f${t.id}_noiseType`in this.uniforms||(this.uniforms[`f${t.id}_noiseType`]=new ye(0)),`f${t.id}_size`in this.uniforms||(this.uniforms[`f${t.id}_size`]=new dt(-1,-1,-1))):t.type==="depth"&&(`f${t.id}_isWorldSpace`in this.uniforms||(this.uniforms[`f${t.id}_isWorldSpace`]=new ee(1)));return this}toJSON(t){let e={};for(let o in this.uniforms)e[o]=this.uniforms[o].toJSON(t).uuid;return{id:this.id,type:this.type,defines:JSON.parse(JSON.stringify(this.defines)),uniforms:e,next:this.next==null?void 0:this.next.toJSON(t)}}copyUniforms(t){for(let e in this.uniforms){let r=this.getName(e);r!==void 0&&t.uniforms[`f${t.id}_${r}`]&&r!=="transmissionDepthMap"&&r!=="transmissionSamplerMap"&&this.uniforms[e].copy(t.uniforms[`f${t.id}_${r}`])}return this}hasValueByKey(t){return this.uniforms[t]!==void 0}hasValue(t){return this.hasValueByKey(`f${this.id}_${t}`)}setValue(t,e){let r=`f${this.id}_${t}`;this.hasValueByKey(r)&&e!==void 0&&(this.uniforms[r].value=e)}getValue(t){let e=`f${this.id}_${t}`;if(this.hasValueByKey(e))return this.uniforms[e].value}getValues(){let t={type:this.type};for(let e in this.uniforms){let r=this.getName(e);if(r===void 0)continue;let i=this.uniforms[`f${this.id}_${r}`].value;i!==void 0&&(Array.isArray(i)?t[r]=i.map(s=>s.clone?s.clone():s):t[r]=i.clone?i.clone():i)}return t}getName(t){let r=/f\d+_(.*)/.exec(t);if(r&&r.length>1)return r[1];console.log(`Layer.getName: error ${t}`)}getNames(){let t=[];for(let e in this.uniforms){let r=this.getName(e);r&&t.push(r)}return t}isEqual(t){for(let e in t.uniforms){let r=t.getName(e);if(!r)return!1;let o=this.getValue(r),i=t.uniforms[e].value;if(i.value instanceof sd.Texture){if(o.image!==i.image)return!1}else if(Array.isArray(i)){let s=o;for(let a=0,l=s.length;a<l;++a)if(s[a]!==i[a])return!1}else{let s=o;if(s.equals){if(!s.equals(i))return!1}else if(o!==i)return!1}}return!0}dispose(){}};function ad(n){let t=n instanceof Re?n.type:n;return t==="texture"||t==="displace_map"||t==="matcap"}var dn=class extends De{constructor(e){super("b");this.nodeType="Bool";this.value=e??!1}generateReadonly(e,r,o,i){return e.format(this.value?"true":"false",i,r)}copy(e){return super.copy(e),this.value=e.value,this}};var Fl=require("three");var vo=class extends De{constructor(e=1,r){super("v4[]");this.nodeType="Vector4Array";this.size=e,this.value=Array.isArray(r)?r:r instanceof Fl.Vector4?new Array(e).fill(r):new Array(e).fill(new Fl.Vector4(0))}copy(e){return super.copy(e),this.value=e.value.map(r=>r.clone()),this}};var at=class extends De{constructor(e=1,r){super("f[]");this.nodeType="FloatArray";this.size=e,this.value=Array.isArray(r)?r:typeof r=="number"?new Array(e).fill(r):new Array(e).fill(0)}copy(e){return super.copy(e),this.size=e.size,this.value=[...e.value],this}};var ld=require("three");var fi=class extends De{constructor(e){super("m3");this.nodeType="Matrix3";this.value=e??new ld.Matrix3}generateReadonly(e,r,o,i,s,a){return e.format("mat3("+this.value.elements.join(", ")+")",i,r)}copy(e){return super.copy(e),this.elements=e.elements,this}get elements(){return this.value.elements}set elements(e){this.value.fromArray(e)}};var fn=class extends ue{constructor(e=new vt,r,o,i,s,a,l,c,h){super("v3");this.nodeType="CustomTexture";this.firstTime=!0,this.texture=e,this.textureSize=r,this.crop=o,this.projection=i,this.axis=s,this.side=a,this.size=l,this.mat=new fi(this.texture.value.matrix),this.alpha=c,this.mode=h,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,r){e.require("position"),e.require("normal"),e.require("uv"),e.requires.uv=[!0],e.extensions.shaderTextureLOD=!0,e.extensions.derivatives=!0;let o=`g${this.uuid.toString().replace(/-/g,"")}`,i;switch(this.projection.value){case 3:i=e.include(fn.Nodes.cylindrical);break;case 2:i=e.include(fn.Nodes.spherical);break;case 1:let a=["vec3(1.0, 0.0, 0.0)","vec3(0.0, 1.0, 0.0)","vec3(0.0, 0.0, 1.0)"][this.axis.value],l=new te(`
|
|
131
|
+
vec3 ${o}_planarTexture(sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float alpha, int mode, out float calpha) {
|
|
132
|
+
|
|
133
|
+
vec2 uvs = ( mat * vec3( (${o}_vCustomUv * 2. - 1.) / (size * .5), 1. ) / 2. + 0.5 ).xy;
|
|
134
|
+
|
|
135
|
+
vec4 tmp = texture2D( tex, uvs );
|
|
136
|
+
|
|
137
|
+
vec3 col = tmp.rgb;
|
|
138
|
+
float lalpha = alpha * tmp.a;
|
|
139
|
+
${this.side.value===0?"":`lalpha *= step(0.0, ${this.side.value===2?"-1.0 * ":""}dot(vObjectNormal, mat * ${a}));`}
|
|
140
|
+
|
|
141
|
+
if ( crop > 0.5 ) {
|
|
142
|
+
if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) {
|
|
143
|
+
lalpha = 0.0;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
|
|
147
|
+
accumAlpha += ( 1.0 - accumAlpha ) * lalpha;
|
|
148
|
+
return col;
|
|
149
|
+
}`);i=e.include(l);break;default:i=e.include(fn.Nodes.uv);break}if(this.projection.value===1&&this.firstTime){e.addVertexParsCode(`varying vec2 ${o}_vCustomUv;`),e.addFragmentParsCode(`varying vec2 ${o}_vCustomUv;`);let a=["zy","xz","xy"][this.axis.value];e.addVertexFinalCode(`${o}_vCustomUv = (1. + (transformed.${a})) / 2.;`)}e.addFragmentVariable(this.calpha,"float");let s=[];return s.push(this.texture.getTexture(e,"t")),s.push(this.textureSize.build(e,"v2")),s.push(this.crop.build(e,"f")),s.push(this.mat.build(e,"mat3")),s.push(this.size.build(e,"v2")),s.push(this.alpha.build(e,"f")),s.push(this.mode.build(e,"i")),s.push(this.calpha),this.firstTime=!this.firstTime,e.format(i+"("+s.join(",")+")",this.getType(e),r)}copy(e){return super.copy(e),this.texture.copy(e.texture),this.textureSize=e.textureSize.clone(),this.crop=e.crop.clone(),this.projection=e.projection.clone(),this.axis=e.axis.clone(),this.size=e.size.clone(),this.alpha=e.alpha.clone(),this.mode=e.mode.clone(),this}},mn=fn;mn.Nodes=function(){let e=new te(`
|
|
150
|
+
vec3 cylindricalTexture(sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float alpha, int mode, out float calpha) {
|
|
151
|
+
vec3 posN = normalize(position);
|
|
152
|
+
float u = 0.5 + atan(posN.z, posN.x) / (2.*3.1415);
|
|
153
|
+
float scaledHeight = position.y / (size.y * 0.5);
|
|
154
|
+
float v = (scaledHeight / 2.) + .5;
|
|
155
|
+
|
|
156
|
+
vec2 calculatedUv = vec2(u,v);
|
|
157
|
+
vec2 uvs = ( mat * vec3( calculatedUv * 2. - 1., 1. ) / 2. + 0.5 ).xy;
|
|
158
|
+
|
|
159
|
+
vec2 df = fwidth(uvs);
|
|
160
|
+
if(df.x > 0.5) df.x = 0.;
|
|
161
|
+
|
|
162
|
+
#ifdef GL_EXT_shader_texture_lod
|
|
163
|
+
vec4 tmp = texture2DLodEXT(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y)));
|
|
164
|
+
#else
|
|
165
|
+
vec4 tmp = textureLod(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y)));
|
|
166
|
+
#endif
|
|
167
|
+
|
|
168
|
+
vec3 col = tmp.rgb;
|
|
169
|
+
float lalpha = alpha * tmp.a;
|
|
170
|
+
if ( crop > 0.5 ) {
|
|
171
|
+
if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) {
|
|
172
|
+
lalpha = 0.0;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
|
|
176
|
+
accumAlpha += ( 1.0 - accumAlpha ) * lalpha;
|
|
177
|
+
return col;
|
|
178
|
+
}
|
|
179
|
+
`),r=new te(`
|
|
180
|
+
vec3 sphericalTexture(sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float alpha, int mode, out float calpha) {
|
|
181
|
+
vec3 posN = normalize(vPosition);
|
|
182
|
+
float u = 0.5 + atan(posN.z, posN.x) / (2.*3.1415);
|
|
183
|
+
float v = 0.5 + asin(posN.y) / 3.1415;
|
|
184
|
+
|
|
185
|
+
vec2 calculatedUv = vec2(u,v);
|
|
186
|
+
vec2 uvs = ( mat * vec3( calculatedUv * 2. - 1., 1. ) / 2. + 0.5 ).xy;
|
|
187
|
+
|
|
188
|
+
vec2 df = fwidth(uvs);
|
|
189
|
+
if(df.x > 0.5) df.x = 0.;
|
|
190
|
+
#ifdef GL_EXT_shader_texture_lod
|
|
191
|
+
vec4 tmp = texture2DLodEXT(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y)));
|
|
192
|
+
#else
|
|
193
|
+
vec4 tmp = textureLod(tex, uvs, log2(max(df.x, df.y)*min(textureSize.x, textureSize.y)));
|
|
194
|
+
#endif
|
|
195
|
+
|
|
196
|
+
vec3 col = tmp.rgb;
|
|
197
|
+
float lalpha = alpha * tmp.a;
|
|
198
|
+
if ( crop > 0.5 ) {
|
|
199
|
+
if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) {
|
|
200
|
+
lalpha = 0.0;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
|
|
204
|
+
accumAlpha += ( 1.0 - accumAlpha ) * lalpha;
|
|
205
|
+
return col;
|
|
206
|
+
}
|
|
207
|
+
`),o=new te(`vec3 uvTexture(sampler2D tex, vec2 textureSize, float crop, mat3 mat, vec2 size, float alpha, int mode, out float calpha) {
|
|
208
|
+
|
|
209
|
+
vec2 uvs = ( mat * vec3( vUv * 2. - 1., 1. ) / 2. + 0.5 ).xy;
|
|
210
|
+
vec4 tmp = texture2D( tex, uvs );
|
|
211
|
+
|
|
212
|
+
vec3 col = tmp.rgb;
|
|
213
|
+
|
|
214
|
+
float lalpha = alpha * tmp.a;
|
|
215
|
+
if ( crop > 0.5 ) {
|
|
216
|
+
if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) {
|
|
217
|
+
lalpha = 0.0;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
|
|
221
|
+
accumAlpha += ( 1.0 - accumAlpha ) * lalpha;
|
|
222
|
+
return col;
|
|
223
|
+
}`);return{cylindrical:e,spherical:r,uv:o}}();var Vl=class extends ue{constructor(e,r,o,i,s,a,l){super("v3");this.nodeType="Fresnel";this.color=e,this.bias=r,this.scale=o,this.intensity=i,this.factor=s,this.alpha=a,this.mode=l,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,r){if(e.require("vWorldViewDir"),e.require("worldNormal"),e.isShader("fragment")){e.addFragmentVariable(this.calpha,"float");let o=e.include(Vl.Nodes.fresnel),i=[];return i.push(this.color.build(e,"c")),i.push(this.bias.build(e,"f")),i.push(this.scale.build(e,"f")),i.push(this.intensity.build(e,"f")),i.push(this.factor.build(e,"f")),i.push(this.alpha.build(e,"f")),i.push(this.mode.build(e,"i")),i.push(this.calpha),e.format(o+"("+i.join(",")+")",this.getType(e),r)}else return console.warn("FresnelNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),r)}copy(e){return super.copy(e),this.color=e.color.clone(),this.bias=e.bias.clone(),this.scale=e.scale.clone(),this.intensity=e.intensity.clone(),this.factor=e.factor.clone(),this.alpha=e.alpha.clone(),this.mode=e.mode.clone(),this.calpha=e.calpha,this}},gn=Vl;gn.Nodes=function(){return{fresnel:new te(`vec3 fresnel(vec3 color, float bias, float scale, float intensity, float factor, float alpha, int mode, out float calpha) {
|
|
224
|
+
float fresnel = bias + scale * pow( abs( factor + dot( normalize( vWorldViewDir ), normalize( vWNormal ) ) ), intensity );
|
|
225
|
+
|
|
226
|
+
float lalpha = clamp( fresnel, 0.0, 1.0 ) * alpha;
|
|
227
|
+
calpha = lalpha / clamp(lalpha + accumAlpha, 0.001, 1.0);
|
|
228
|
+
accumAlpha += (1.0 - accumAlpha) * lalpha;
|
|
229
|
+
return color;
|
|
230
|
+
}`)}}();var yn=(i=>(i.SIMPLEX="simplex3d",i.SIMPLEX_FRACTAL="simplex3dFractal",i.ASHIMA="simplexAshima",i.FBM="fbm",i.PERLIN="perlin",i))(yn||{}),At=function(){let t=new te(`vec3 random3(vec3 c) {
|
|
231
|
+
float j = 4096.0*sin(dot(c,vec3(17.0, 59.4, 15.0)));
|
|
232
|
+
vec3 r;
|
|
233
|
+
r.z = fract(512.0*j);
|
|
234
|
+
j *= .125;
|
|
235
|
+
r.x = fract(512.0*j);
|
|
236
|
+
j *= .125;
|
|
237
|
+
r.y = fract(512.0*j);
|
|
238
|
+
return r-0.5;
|
|
239
|
+
}`),e=new te(`float simplex3d(vec3 p) {
|
|
240
|
+
vec3 s = floor(p + dot(p, vec3(F3)));
|
|
241
|
+
vec3 x = p - s + dot(s, vec3(G3));
|
|
242
|
+
|
|
243
|
+
vec3 e = step(vec3(0.0), x - x.yzx);
|
|
244
|
+
vec3 i1 = e*(1.0 - e.zxy);
|
|
245
|
+
vec3 i2 = 1.0 - e.zxy*(1.0 - e);
|
|
246
|
+
|
|
247
|
+
vec3 x1 = x - i1 + G3;
|
|
248
|
+
vec3 x2 = x - i2 + 2.0*G3;
|
|
249
|
+
vec3 x3 = x - 1.0 + 3.0*G3;
|
|
250
|
+
|
|
251
|
+
vec4 w, d;
|
|
252
|
+
|
|
253
|
+
w.x = dot(x, x);
|
|
254
|
+
w.y = dot(x1, x1);
|
|
255
|
+
w.z = dot(x2, x2);
|
|
256
|
+
w.w = dot(x3, x3);
|
|
257
|
+
|
|
258
|
+
w = max(0.6 - w, 0.0);
|
|
259
|
+
|
|
260
|
+
d.x = dot(random3(s), x);
|
|
261
|
+
d.y = dot(random3(s + i1), x1);
|
|
262
|
+
d.z = dot(random3(s + i2), x2);
|
|
263
|
+
d.w = dot(random3(s + 1.0), x3);
|
|
264
|
+
|
|
265
|
+
w *= w;
|
|
266
|
+
w *= w;
|
|
267
|
+
d *= w;
|
|
268
|
+
|
|
269
|
+
return dot(d, vec4(52.0));
|
|
270
|
+
}`,[t]);e.keywords.F3=new we("float F3 0.3333333"),e.keywords.G3=new we("float G3 0.1666667");let r=new te(`float simplex3dFractal(vec3 m) {
|
|
271
|
+
mat3 rot1 = mat3(-0.37, 0.36, 0.85,-0.14,-0.93, 0.34,0.92, 0.01,0.4);
|
|
272
|
+
mat3 rot2 = mat3(-0.55,-0.39, 0.74, 0.33,-0.91,-0.24,0.77, 0.12,0.63);
|
|
273
|
+
mat3 rot3 = mat3(-0.71, 0.52,-0.47,-0.08,-0.72,-0.68,-0.7,-0.45,0.56);
|
|
274
|
+
return 0.5333333 * simplex3d(m * rot1)
|
|
275
|
+
+ 0.2666667 * simplex3d(2.0 * m * rot2)
|
|
276
|
+
+ 0.1333333 * simplex3d(4.0 * m * rot3)
|
|
277
|
+
+ 0.0666667 * simplex3d(8.0 * m);
|
|
278
|
+
}`,[e]),o=new te("vec4 permute(vec4 x){return mod(((x*34.0)+1.0)*x, 289.0);}"),i=new te("vec4 taylorInvSqrt(vec4 r){return 1.79284291400159 - 0.85373472095314 * r;}"),s=new te(`float simplexAshima(vec3 v) {
|
|
279
|
+
const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;
|
|
280
|
+
const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
|
|
281
|
+
vec3 i = floor(v + dot(v, C.yyy) );
|
|
282
|
+
vec3 x0 = v - i + dot(i, C.xxx) ;
|
|
283
|
+
vec3 g = step(x0.yzx, x0.xyz);
|
|
284
|
+
vec3 l = 1.0 - g;
|
|
285
|
+
vec3 i1 = min( g.xyz, l.zxy );
|
|
286
|
+
vec3 i2 = max( g.xyz, l.zxy );
|
|
287
|
+
vec3 x1 = x0 - i1 + 1.0 * C.xxx;
|
|
288
|
+
vec3 x2 = x0 - i2 + 2.0 * C.xxx;
|
|
289
|
+
vec3 x3 = x0 - 1. + 3.0 * C.xxx;
|
|
290
|
+
i = mod(i, 289.0 );
|
|
291
|
+
vec4 p = permute( permute( permute(
|
|
292
|
+
i.z + vec4(0.0, i1.z, i2.z, 1.0 ))
|
|
293
|
+
+ i.y + vec4(0.0, i1.y, i2.y, 1.0 ))
|
|
294
|
+
+ i.x + vec4(0.0, i1.x, i2.x, 1.0 ));
|
|
295
|
+
float n_ = 1.0/7.0; // N=7
|
|
296
|
+
vec3 ns = n_ * D.wyz - D.xzx;
|
|
297
|
+
vec4 j = p - 49.0 * floor(p * ns.z *ns.z); // mod(p,N*N)
|
|
298
|
+
vec4 x_ = floor(j * ns.z);
|
|
299
|
+
vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)
|
|
300
|
+
vec4 x = x_ *ns.x + ns.yyyy;
|
|
301
|
+
vec4 y = y_ *ns.x + ns.yyyy;
|
|
302
|
+
vec4 h = 1.0 - abs(x) - abs(y);
|
|
303
|
+
vec4 b0 = vec4( x.xy, y.xy );
|
|
304
|
+
vec4 b1 = vec4( x.zw, y.zw );
|
|
305
|
+
vec4 s0 = floor(b0)*2.0 + 1.0;
|
|
306
|
+
vec4 s1 = floor(b1)*2.0 + 1.0;
|
|
307
|
+
vec4 sh = -step(h, vec4(0.0));
|
|
308
|
+
vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
|
|
309
|
+
vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
|
|
310
|
+
vec3 p0 = vec3(a0.xy,h.x);
|
|
311
|
+
vec3 p1 = vec3(a0.zw,h.y);
|
|
312
|
+
vec3 p2 = vec3(a1.xy,h.z);
|
|
313
|
+
vec3 p3 = vec3(a1.zw,h.w);
|
|
314
|
+
vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
|
|
315
|
+
p0 *= norm.x;
|
|
316
|
+
p1 *= norm.y;
|
|
317
|
+
p2 *= norm.z;
|
|
318
|
+
p3 *= norm.w;
|
|
319
|
+
vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);
|
|
320
|
+
m = m * m;
|
|
321
|
+
return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),
|
|
322
|
+
dot(p2,x2), dot(p3,x3) ) );
|
|
323
|
+
}`,[o,i]),a=new te("vec4 mod289(vec4 x){return x - floor(x * (1.0 / 289.0)) * 289.0;}"),l=new te("vec4 perm(vec4 x){return mod289(((x * 34.0) + 1.0) * x);}",[a]),c=new te(`float noise(vec3 p){
|
|
324
|
+
vec3 a = floor(p);
|
|
325
|
+
vec3 d = p - a;
|
|
326
|
+
d = d * d * (3.0 - 2.0 * d);
|
|
327
|
+
vec4 b = a.xxyy + vec4(0.0, 1.0, 0.0, 1.0);
|
|
328
|
+
vec4 k1 = perm(b.xyxy);
|
|
329
|
+
vec4 k2 = perm(k1.xyxy + b.zzww);
|
|
330
|
+
vec4 c = k2 + a.zzzz;
|
|
331
|
+
vec4 k3 = perm(c);
|
|
332
|
+
vec4 k4 = perm(c + 1.0);
|
|
333
|
+
vec4 o1 = fract(k3 * (1.0 / 41.0));
|
|
334
|
+
vec4 o2 = fract(k4 * (1.0 / 41.0));
|
|
335
|
+
vec4 o3 = o2 * d.z + o1 * (1.0 - d.z);
|
|
336
|
+
vec2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x);
|
|
337
|
+
return o4.y * d.y + o4.x * (1.0 - d.y);
|
|
338
|
+
}`,[l]),h=new te(`float fbm(vec3 x) {
|
|
339
|
+
float v = 0.0;
|
|
340
|
+
float a = 0.5;
|
|
341
|
+
vec3 shift = vec3(100);
|
|
342
|
+
for (int i = 0; i < NUM_OCTAVES; ++i) {
|
|
343
|
+
v += a * noise(x);
|
|
344
|
+
x = x * 2.0 + shift;
|
|
345
|
+
a *= 0.5;
|
|
346
|
+
}
|
|
347
|
+
return v;
|
|
348
|
+
}`,[c]);h.keywords.NUM_OCTAVES=new we(`int NUM_OCTAVES ${5}`);let p=new te("vec3 fade(vec3 t) {return t*t*t*(t*(t*6.0-15.0)+10.0);}"),u=new te(`float perlin(vec3 P){
|
|
349
|
+
vec3 Pi0 = floor(P);
|
|
350
|
+
vec3 Pi1 = Pi0 + vec3(1.0);
|
|
351
|
+
Pi0 = mod(Pi0, 289.0);
|
|
352
|
+
Pi1 = mod(Pi1, 289.0);
|
|
353
|
+
vec3 Pf0 = fract(P);
|
|
354
|
+
vec3 Pf1 = Pf0 - vec3(1.0);
|
|
355
|
+
vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);
|
|
356
|
+
vec4 iy = vec4(Pi0.yy, Pi1.yy);
|
|
357
|
+
vec4 iz0 = Pi0.zzzz;
|
|
358
|
+
vec4 iz1 = Pi1.zzzz;
|
|
359
|
+
vec4 ixy = permute(permute(ix) + iy);
|
|
360
|
+
vec4 ixy0 = permute(ixy + iz0);
|
|
361
|
+
vec4 ixy1 = permute(ixy + iz1);
|
|
362
|
+
vec4 gx0 = ixy0 / 7.0;
|
|
363
|
+
vec4 gy0 = fract(floor(gx0) / 7.0) - 0.5;
|
|
364
|
+
gx0 = fract(gx0);
|
|
365
|
+
vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);
|
|
366
|
+
vec4 sz0 = step(gz0, vec4(0.0));
|
|
367
|
+
gx0 -= sz0 * (step(0.0, gx0) - 0.5);
|
|
368
|
+
gy0 -= sz0 * (step(0.0, gy0) - 0.5);
|
|
369
|
+
vec4 gx1 = ixy1 / 7.0;
|
|
370
|
+
vec4 gy1 = fract(floor(gx1) / 7.0) - 0.5;
|
|
371
|
+
gx1 = fract(gx1);
|
|
372
|
+
vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);
|
|
373
|
+
vec4 sz1 = step(gz1, vec4(0.0));
|
|
374
|
+
gx1 -= sz1 * (step(0.0, gx1) - 0.5);
|
|
375
|
+
gy1 -= sz1 * (step(0.0, gy1) - 0.5);
|
|
376
|
+
vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);
|
|
377
|
+
vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);
|
|
378
|
+
vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);
|
|
379
|
+
vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);
|
|
380
|
+
vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);
|
|
381
|
+
vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);
|
|
382
|
+
vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);
|
|
383
|
+
vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);
|
|
384
|
+
vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));
|
|
385
|
+
g000 *= norm0.x;
|
|
386
|
+
g010 *= norm0.y;
|
|
387
|
+
g100 *= norm0.z;
|
|
388
|
+
g110 *= norm0.w;
|
|
389
|
+
vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));
|
|
390
|
+
g001 *= norm1.x;
|
|
391
|
+
g011 *= norm1.y;
|
|
392
|
+
g101 *= norm1.z;
|
|
393
|
+
g111 *= norm1.w;
|
|
394
|
+
float n000 = dot(g000, Pf0);
|
|
395
|
+
float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));
|
|
396
|
+
float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));
|
|
397
|
+
float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));
|
|
398
|
+
float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));
|
|
399
|
+
float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));
|
|
400
|
+
float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));
|
|
401
|
+
float n111 = dot(g111, Pf1);
|
|
402
|
+
vec3 fade_xyz = fade(Pf0);
|
|
403
|
+
vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);
|
|
404
|
+
vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);
|
|
405
|
+
float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);
|
|
406
|
+
return 2.2 * n_xyz;
|
|
407
|
+
}`,[o,i,p]);return{simplex:e,simplexFractal:r,simplexAshima:s,fbm:h,perlin:u}}();var Ul=class extends ue{constructor(e,r,o,i,s,a,l){super("v3");this.nodeType="Rainbow";this.filmThickness=e,this.movement=r,this.wavelengths=o,this.noiseStrength=i,this.noiseScale=s,this.offset=a,this.alpha=l,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,r){if(e.require("vWorldViewDir"),e.require("worldNormal"),e.isShader("fragment")){e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let o=e.include(Ul.Nodes.rainbow),i=[];return i.push(this.filmThickness.build(e,"f")),i.push(this.movement.build(e,"f")),i.push(this.wavelengths.build(e,"v3")),i.push(this.noiseStrength.build(e,"f")),i.push(this.noiseScale.build(e,"f")),i.push(this.offset.build(e,"v3")),i.push(this.alpha.build(e,"f")),i.push(this.calpha),e.format(o+"("+i.join(",")+")",this.getType(e),r)}else return console.warn("RainbowNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),r)}copy(e){return super.copy(e),this.filmThickness=e.filmThickness.clone(),this.movement=e.movement.clone(),this.wavelengths=e.wavelengths.clone(),this.noiseStrength=e.noiseStrength.clone(),this.noiseScale=e.noiseScale.clone(),this.offset=e.offset.clone(),this.alpha=e.alpha.clone(),this.calpha=e.calpha,this}},xn=Ul;xn.Nodes=function(){let e=new te(`vec3 attenuation(vec3 wavelengths, float filmThickness, float movement, float noiseStrength, float noiseScale, vec3 offset) {
|
|
408
|
+
vec3 st = position / noiseScale;
|
|
409
|
+
vec3 q = vec3(simplex3d(st),
|
|
410
|
+
simplex3d(st + vec3(1.0)),
|
|
411
|
+
simplex3d(st + vec3(1.0)));
|
|
412
|
+
|
|
413
|
+
vec3 r = vec3(simplex3d(st + vec3(1.4, 1.3, 1.0) * q + vec3(1.7, 9.2, 1.0)),
|
|
414
|
+
simplex3d(st + vec3(2.0, 1.2, 1.0) * q + vec3(8.3, 2.8, 1.0)),
|
|
415
|
+
simplex3d(st * q));
|
|
416
|
+
|
|
417
|
+
float noise = simplex3d(st + r);
|
|
418
|
+
|
|
419
|
+
return .5 + .5 * cos((((filmThickness + (noise * noiseStrength)) / (vec3(wavelengths.r * 1.0, wavelengths.g * 0.8, wavelengths.b * 0.6) + 1.0)) * dot(normalize(vWorldViewDir + (offset * -0.001)), normalize(vWNormal))) + movement);
|
|
420
|
+
}`,[At.simplex]);return{rainbow:new te(`vec3 rainbow(float filmThickness, float movement, vec3 wavelengths, float noiseStrength, float noiseScale, vec3 offset, float alpha, out float calpha) {
|
|
421
|
+
vec3 res = clamp(attenuation(wavelengths, filmThickness, movement, noiseStrength, noiseScale, offset), 0.0, 2.0);
|
|
422
|
+
|
|
423
|
+
float rainbowContribution = clamp(res.r + res.g + res.b, 0.0, 1.0);
|
|
424
|
+
float lalpha = alpha * rainbowContribution;
|
|
425
|
+
calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
|
|
426
|
+
accumAlpha += ( 1.0 - accumAlpha ) * lalpha;
|
|
427
|
+
|
|
428
|
+
return res;
|
|
429
|
+
}`,[e])}}();var jl=class extends ue{constructor(e,r,o,i,s,a,l,c){super("v3");this.nodeType="Transmission";this.thickness=e,this.ior=r,this.roughness=o,this.transmissionSamplerSize=i,this.transmissionSamplerMap=s,this.transmissionDepthMap=a,this.aspectRatio=l,this.alpha=c,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,r){if(e.extensions.shaderTextureLOD=!0,e.extensions.derivatives=!0,e.isShader("fragment")){e.define("NUM_SAMPLES",30),e.require("worldPosition"),e.requires.worldNormal=!0,e.requires.modelMatrix=!0,e.requires.projectionMatrix=!0,e.addFragmentVariable(this.calpha,"float");let o=e.include(jl.Nodes.transmission),i=[];return i.push(this.thickness.build(e,"f")),i.push(this.ior.build(e,"f")),i.push(this.roughness.build(e,"f")),i.push(this.transmissionSamplerSize.build(e,"v2")),i.push(this.transmissionSamplerMap.getTexture(e,"t")),i.push(this.transmissionDepthMap.getTexture(e,"t")),i.push(this.aspectRatio.build(e,"v2")),i.push("normal"),i.push(this.alpha.build(e,"f")),i.push(this.calpha),e.format(o+"("+i.join(",")+")",this.getType(e),r)}else return console.warn("TransmissionNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),r)}copy(e){return super.copy(this),this.thickness=e.thickness.clone(),this.ior=e.ior.clone(),this.roughness=e.roughness.clone(),this.transmissionSamplerSize=e.transmissionSamplerSize.clone(),this.transmissionSamplerMap=e.transmissionSamplerMap,this.transmissionDepthMap=e.transmissionDepthMap,this.alpha=e.alpha.clone(),this.calpha=e.calpha,this}},bn=jl;bn.Nodes=function(){let e=new te(`
|
|
430
|
+
float gaussian(vec2 i) {
|
|
431
|
+
const float sigma = float(NUM_SAMPLES) * .25;
|
|
432
|
+
return exp( -.5* dot(i/=sigma,i) ) / ( 6.28 * sigma*sigma );
|
|
433
|
+
}`),r=new te(`
|
|
434
|
+
vec4 blur(sampler2D sp, vec2 U, vec2 scale, float lod, sampler2D dm, vec2 unrefractedU, vec2 aspectRatio) {
|
|
435
|
+
// Slightly modified version of this:
|
|
436
|
+
// https://www.shadertoy.com/view/ltScRG
|
|
437
|
+
|
|
438
|
+
const int LOD = 2;
|
|
439
|
+
const int sLOD = 4; // tile size = 2^LOD
|
|
440
|
+
|
|
441
|
+
vec4 O = vec4(0);
|
|
442
|
+
const int s = NUM_SAMPLES/sLOD;
|
|
443
|
+
for ( int i = 0; i < s*s; i++ ) {
|
|
444
|
+
int modulo = (i)-((i)/(s))*(s);
|
|
445
|
+
vec2 d = vec2(float(modulo), float(i/s))*float(sLOD) - float(NUM_SAMPLES)/2.;
|
|
446
|
+
vec2 uv = U + (scale * aspectRatio) * d;
|
|
447
|
+
// What is the depth of the opaque object we're trying to sample
|
|
448
|
+
float opaqueDepth = texture2D(dm, uv).r;
|
|
449
|
+
if (opaqueDepth < gl_FragCoord.z) {
|
|
450
|
+
uv = unrefractedU + ((scale * min(lod / 2., 1.)) * aspectRatio) * d;
|
|
451
|
+
lod = lod > 4.0 ? lod : lod / 2.0;
|
|
452
|
+
}
|
|
453
|
+
#ifdef TEXTURE_LOD_EXT
|
|
454
|
+
O += gaussian(d) * texture2DLodEXT( sp, uv, lod);
|
|
455
|
+
#else
|
|
456
|
+
O += gaussian(d) * textureLod( sp, uv, lod);
|
|
457
|
+
#endif
|
|
458
|
+
}
|
|
459
|
+
return O / O.a;
|
|
460
|
+
}`,[e]),o=new te(`
|
|
461
|
+
vec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) {
|
|
462
|
+
// Direction of refracted light.
|
|
463
|
+
vec3 refractionVector = refract( -v, n, 1.0 / ior );
|
|
464
|
+
// Compute rotation-independant scaling of the model matrix.
|
|
465
|
+
vec3 modelScale;
|
|
466
|
+
modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );
|
|
467
|
+
modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );
|
|
468
|
+
modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );
|
|
469
|
+
// The thickness is specified in local space.
|
|
470
|
+
return normalize( refractionVector ) * thickness * modelScale;
|
|
471
|
+
}`),i=new te(`
|
|
472
|
+
float applyIorToRoughness( float roughness, float ior ) {
|
|
473
|
+
// Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and
|
|
474
|
+
// an IOR of 1.5 results in the default amount of microfacet refraction.
|
|
475
|
+
return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );
|
|
476
|
+
} `),s=new te(`
|
|
477
|
+
vec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 unrefractedCoords, vec2 aspectRatio) {
|
|
478
|
+
float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );
|
|
479
|
+
float lod = applyIorToRoughness(roughness, ior);
|
|
480
|
+
|
|
481
|
+
return blur(transmissionSamplerMap, fragCoord, vec2(lod / (transmissionSamplerSize.x / 2.)), min(framebufferLod / 5.5, 8.5), transmissionDepthMap, unrefractedCoords, aspectRatio);
|
|
482
|
+
}`,[i,r]),a=new te(`
|
|
483
|
+
vec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 aspectRatio ) {
|
|
484
|
+
vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );
|
|
485
|
+
vec3 refractedRayExit = position + transmissionRay;
|
|
486
|
+
|
|
487
|
+
// Project refracted vector on the framebuffer, while mapping to normalized device coordinates.
|
|
488
|
+
vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );
|
|
489
|
+
vec2 refractionCoords = ndcPos.xy / ndcPos.w;
|
|
490
|
+
refractionCoords += 1.0;
|
|
491
|
+
refractionCoords /= 2.0;
|
|
492
|
+
|
|
493
|
+
vec4 ndcPosUnrefracted = projMatrix * viewMatrix * vec4(position, 1.0 );
|
|
494
|
+
vec2 unrefractedCoords = ndcPosUnrefracted.xy / ndcPosUnrefracted.w;
|
|
495
|
+
unrefractedCoords += 1.0;
|
|
496
|
+
unrefractedCoords /= 2.0;
|
|
497
|
+
|
|
498
|
+
// Sample framebuffer to get pixel the refracted ray hits.
|
|
499
|
+
vec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior, transmissionSamplerSize, transmissionSamplerMap, transmissionDepthMap, unrefractedCoords, aspectRatio );
|
|
500
|
+
// Get the specular component.
|
|
501
|
+
return vec4( ( 1.0 ) * transmittedLight.rgb, transmittedLight.a );
|
|
502
|
+
}`,[s,o]);return{transmission:new te(`
|
|
503
|
+
vec3 transmission(float thickness, float ior, float roughness, vec2 transmissionSamplerSize, sampler2D transmissionSamplerMap, sampler2D transmissionDepthMap, vec2 aspectRatio, vec3 normal, float alpha, out float calpha) {
|
|
504
|
+
vec3 v = vec3(0.);
|
|
505
|
+
if (isOrthographic) {
|
|
506
|
+
v = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );
|
|
507
|
+
} else {
|
|
508
|
+
v = normalize(vWPosition - cameraPosition);
|
|
509
|
+
}
|
|
510
|
+
vec4 transmission = getIBLVolumeRefraction(vWNormal, -v, roughness, vWPosition, modelMatrix, viewMatrix, projectionMatrix, ior, thickness, transmissionSamplerSize, transmissionSamplerMap, transmissionDepthMap, aspectRatio );
|
|
511
|
+
float lalpha = alpha;
|
|
512
|
+
|
|
513
|
+
calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
|
|
514
|
+
accumAlpha += ( 1.0 - accumAlpha ) * lalpha;
|
|
515
|
+
return transmission.rgb;
|
|
516
|
+
}`,[a])}}();var kl=class extends ue{constructor(e,r){super("v3");this.nodeType="CustomNormal";this.cnormal=e,this.alpha=r}generate(e,r){if(e.isShader("fragment")){let o=e.include(kl.Nodes.customNormal),i=[];return i.push(this.cnormal.build(e,"v3")),i.push("normal"),i.push(this.alpha.build(e,"f")),e.format(o+"("+i.join(",")+")",this.getType(e),r)}else return console.warn("CustomNormalNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),r)}copy(e){return super.copy(e),this.cnormal.copy(e.cnormal),this.alpha.copy(e.alpha),this}},vn=kl;vn.Nodes=function(){return{customNormal:new te(`vec3 customNormal(vec3 cnormal, vec3 norm, float alpha) {
|
|
517
|
+
vec3 normal = packNormalToRGB( norm ).rgb;
|
|
518
|
+
normal *= step( vec3(0.5), cnormal );
|
|
519
|
+
|
|
520
|
+
accumAlpha += ( 1.0 - accumAlpha ) * alpha;
|
|
521
|
+
|
|
522
|
+
return normal;
|
|
523
|
+
}`)}}();var Hl=class extends ue{constructor(e,r,o,i,s,a,l,c){super("v3");this.nodeType="Gradient";this.gradientType=e,this.smooth=r,this.colors=o,this.steps=i,this.offset=s,this.morph=a,this.angle=l,this.alpha=c,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,r){if(e.isShader("fragment")){e.define("GRAD_MAX",10),e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let o=e.include(Hl.Nodes.gradient),i=[];return i.push(this.gradientType.build(e,"i")),i.push(this.smooth.build(e,"b")),i.push(this.colors.build(e,"v4[]")),i.push(this.steps.build(e,"f[]")),i.push(this.offset.build(e,"v2")),i.push(this.morph.build(e,"v2")),i.push(this.angle.build(e,"f")),i.push(this.alpha.build(e,"f")),i.push(this.calpha),e.format(o+"("+i.join(",")+")",this.getType(e),r)}else return console.warn("GradientNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),r)}copy(e){return super.copy(e),this.gradientType=e.gradientType.clone(),this.smooth=e.smooth.clone(),this.colors=e.colors.clone(),this.steps=e.steps.clone(),this.offset=e.offset.clone(),this.morph=e.morph.clone(),this.angle=e.angle.clone(),this.alpha=e.alpha.clone(),this.calpha=e.calpha,this}},Sn=Hl;Sn.Nodes=function(){return{gradient:new te(`vec3 gradient(int gradientType, bool smoothed, vec4 colors[GRAD_MAX], float steps[GRAD_MAX], vec2 offset, vec2 morph, float angle, float alpha, out float calpha) {
|
|
524
|
+
vec4 color = colors[0];
|
|
525
|
+
vec2 m = morph / vUv.xy;
|
|
526
|
+
vec2 rot = vec2( 0.5 + m.x, m.y );
|
|
527
|
+
vec2 dt = vec2(
|
|
528
|
+
cos( angle ) * rot.x - sin( angle ) * rot.y,
|
|
529
|
+
sin( angle ) * rot.x + cos( angle ) * rot.y
|
|
530
|
+
);
|
|
531
|
+
vec2 pt = ( vUv - 0.5 + offset ) / 2.0 + dt / 2.0;
|
|
532
|
+
float t = dot( pt, dt ) / dot( dt, dt );
|
|
533
|
+
if ( gradientType == 1 ) {
|
|
534
|
+
t = distance (
|
|
535
|
+
( vUv + morph ) * 3.0,
|
|
536
|
+
( vUv + offset ) + 1.0
|
|
537
|
+
) + angle;
|
|
538
|
+
} else if ( gradientType == 2 ) {
|
|
539
|
+
float polar = atan(
|
|
540
|
+
vUv.x + morph.x - 0.5 + offset.x,
|
|
541
|
+
vUv.y + morph.y - 0.5 + offset.y
|
|
542
|
+
) * -1.0;
|
|
543
|
+
t = fract( ( angle / PI / -2.0 ) + 0.5 * ( polar / PI ) );
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
float p;
|
|
547
|
+
if (smoothed) {
|
|
548
|
+
for ( int i = 1; i < GRAD_MAX; i++ ) {
|
|
549
|
+
p = clamp( ( t - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 );
|
|
550
|
+
color = mix(color, colors[i], smoothstep(0.0, 1.0, p));
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
} else {
|
|
554
|
+
for ( int i = 1; i < GRAD_MAX; i++ ) {
|
|
555
|
+
p = clamp( ( t - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 );
|
|
556
|
+
color = mix(color, colors[i], p);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
float lalpha = alpha * color.a;
|
|
561
|
+
calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
|
|
562
|
+
accumAlpha += ( 1.0 - accumAlpha ) * lalpha;
|
|
563
|
+
|
|
564
|
+
return color.xyz;
|
|
565
|
+
}`)}}();var ql=(e=>(e.NOISE="noise",e.MAP="map",e))(ql||{}),Wl=class extends ue{constructor(e=new ye(0),r,o,i,s,a){super("v3");this.nodeType="VertexDisplacement";this.displacementTypeIndex=e,this.intensity=r,this.movementOrTexture=o,Object.values(ql)[this.displacementTypeIndex.value]==="map"&&(this.mat=new fi(this.movementOrTexture.value.matrix)),this.cropOrOffset=i,this.scale=s,this.noiseFunctionIndex=a}generate(e,r){if(e.isShader("vertex")){e.define("USE_LAYER_DISPLACE");let o,i=[];switch(i.push("displaced_position"),i.push("displaced_normal"),Object.values(ql)[this.displacementTypeIndex.value]){case"map":{o=e.include(Wl.Nodes.map),i.push(this.movementOrTexture.getTexture(e,"t")),i.push("uv"),i.push(this.cropOrOffset.build(e,"f")),this.mat&&i.push(this.mat.build(e,"mat3"));break}case"noise":{let a=Object.values(yn)[this.noiseFunctionIndex.value],l=new te(`vec3 orthogonal(vec3 v) {
|
|
566
|
+
return normalize(abs(v.x) > abs(v.z) ? vec3(-v.y, v.x, 0.0) : vec3(0.0, -v.z, v.y));
|
|
567
|
+
}`),c=new te(`vec3 distorted(vec3 p, vec3 n, float scale, float intensity, vec3 offset, float neighbour_offset, float movement) {
|
|
568
|
+
return p + n * ${a}((p + offset) * scale * 0.001 + neighbour_offset + (movement * 0.1)) * intensity;
|
|
569
|
+
}`,[At.simplex,At.simplexFractal,At.simplexAshima,At.fbm,At.perlin]),h=new te(`vec3 vertexDisplacementNoise(vec3 position, vec3 normal, float scale, vec3 offset, float movement, float intensity, out vec3 displaced_normal) {
|
|
570
|
+
vec3 displaced_position = distorted(position, normal, scale, intensity, offset, neighbor_offset, movement);
|
|
571
|
+
vec3 tangent1 = orthogonal(normal);
|
|
572
|
+
vec3 tangent2 = normalize(cross(normal, tangent1));
|
|
573
|
+
|
|
574
|
+
// TODO(Max): The distance to the neighbors was originally scaled by 0.1.
|
|
575
|
+
// This caused some small oval/circular visual artifacts in the lighting.
|
|
576
|
+
// For now, simply using neighbors further away betters the problem,
|
|
577
|
+
// but we should figure out the underlying cause when we have some time.
|
|
578
|
+
// Maybe its related to how we calculate the tangent and bitangent?
|
|
579
|
+
vec3 nearby1 = position + tangent1;
|
|
580
|
+
vec3 nearby2 = position + tangent2;
|
|
581
|
+
vec3 distorted1 = distorted(nearby1, normal, scale, intensity, offset, neighbor_offset, movement);
|
|
582
|
+
vec3 distorted2 = distorted(nearby2, normal, scale, intensity, offset, neighbor_offset, movement);
|
|
583
|
+
displaced_normal = normalize(cross(distorted1 - displaced_position, distorted2 - displaced_position));
|
|
584
|
+
return displaced_position;
|
|
585
|
+
}`,[c,l]);o=e.include(h),i.push(this.scale.build(e,"f")),i.push(this.cropOrOffset.build(e,"v3")),i.push(this.movementOrTexture.build(e,"f"));break}}return i.push(this.intensity.build(e,"f")),i.push("displaced_normal"),e.format(o+"("+i.join(",")+")",this.getType(e),r)}else return console.warn("VertexDisplacementNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),r)}copy(e){return super.copy(e),this.noiseFunctionIndex=e.noiseFunctionIndex?.clone(),this.scale=e.scale?.clone(),this.cropOrOffset=e.cropOrOffset.clone(),this.intensity=e.intensity.clone(),this.movementOrTexture=e.movementOrTexture.clone(),this}},gi=Wl;gi.Nodes=function(){let e=new te(`vec3 orthogonal(vec3 v) {
|
|
586
|
+
return normalize(abs(v.x) > abs(v.z) ? vec3(-v.y, v.x, 0.0) : vec3(0.0, -v.z, v.y));
|
|
587
|
+
}`),r=new te(`float displacementMapTexture(sampler2D tex, float crop, vec2 uv, mat3 mat, vec2 offset) {
|
|
588
|
+
vec2 uvs = (mat * vec3(uv * 2.0 - 1.0, 1.0) / 2.0 + 0.5).xy + offset;
|
|
589
|
+
vec4 tmp = texture2D(tex, uvs);
|
|
590
|
+
vec3 col = tmp.rgb;
|
|
591
|
+
if (crop > 0.5) {
|
|
592
|
+
if ( uvs.x < 0.0 || uvs.x > 1.0 || uvs.y < 0.0 || uvs.y > 1.0 ) {
|
|
593
|
+
return 0.0;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
return col.r;
|
|
597
|
+
}`);return{map:new te(`vec3 vertexDisplacementMap(vec3 position, vec3 normal, sampler2D tex, vec2 uv, float crop, mat3 mat, float intensity, out vec3 displaced_normal) {
|
|
598
|
+
vec3 displaced_position = position + normal * displacementMapTexture(tex, crop, uv, mat, vec2(0.0)) * intensity;
|
|
599
|
+
vec3 tangent1 = normalize(orthogonal(normal));
|
|
600
|
+
vec3 tangent2 = normalize(cross(normal, tangent1));
|
|
601
|
+
vec3 nearby1 = position + tangent1 * 0.1;
|
|
602
|
+
vec3 nearby2 = position + tangent2 * 0.1;
|
|
603
|
+
vec3 distorted1 = nearby1 + normal * displacementMapTexture(tex, crop, uv, mat, vec2(neighbor_offset)) * intensity;
|
|
604
|
+
vec3 distorted2 = nearby2 + normal * displacementMapTexture(tex, crop, uv, mat, vec2(neighbor_offset)) * intensity;
|
|
605
|
+
displaced_normal = normalize(cross(distorted1 - displaced_position, distorted2 - displaced_position));
|
|
606
|
+
return displaced_position;
|
|
607
|
+
}`,[e,r])}}();var wn=class extends ue{constructor(e=new ce,r=new ce,o=new ce,i=new ce,s=new ce,a=new ce,l=new ce,c=new ce,h=new ce,p=new ce,u=new ce,d=new ce){super("v3");this.nodeType="Noise";this.scale=e,this.size=r,this.move=o,this.fA=i,this.fB=s,this.distortion=a,this.colorA=l,this.colorB=c,this.colorC=h,this.colorD=p,this.alpha=u,this.noiseType=d,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,r,o,i,s){e.require("uv"),e.requires.uv=[!0],e.addFragmentVariable(this.calpha,"float");let a=Object.values(yn)[this.noiseType.value],l=new te(`vec3 ${a}customNoise(float scale, vec3 size, float move, vec2 fA, vec2 fB, vec2 distortion, vec4 colorA, vec4 colorB, vec4 colorC, vec4 colorD, float alpha, out float calpha) {
|
|
608
|
+
vec3 st = position / size;
|
|
609
|
+
st /= scale;
|
|
610
|
+
vec3 q = vec3(${a}(st),
|
|
611
|
+
${a}(st + vec3(1.0)),
|
|
612
|
+
${a}(st + vec3(1.0)));
|
|
613
|
+
vec3 r = vec3(${a}(st + vec3(distortion, 1.0) * q + vec3(fA, 1.0) + move),
|
|
614
|
+
${a}(st + vec3(distortion, 1.0) * q + vec3(fB, 1.0) + move),
|
|
615
|
+
${a}(st * q));
|
|
616
|
+
float f = ${a}(st + r);
|
|
617
|
+
vec4 color;
|
|
618
|
+
color = mix(colorA, colorB, clamp((f * f) * 4.0, 0.0, 1.0));
|
|
619
|
+
color = mix(color, colorC, clamp(length(q), 0.0, 1.0));
|
|
620
|
+
color = mix(color, colorD, clamp(length(r.x), 0.0, 1.0));
|
|
621
|
+
|
|
622
|
+
float lalpha = alpha * color.a;
|
|
623
|
+
calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
|
|
624
|
+
|
|
625
|
+
accumAlpha += ( 1.0 - accumAlpha ) * lalpha;
|
|
626
|
+
return clamp(color, 0.0, 1.0).rgb;
|
|
627
|
+
}`,[At.simplex,At.simplexFractal,At.simplexAshima,At.fbm,At.perlin]),c=e.include(l),h=[];return h.push(this.scale.build(e,"f")),h.push(this.size.build(e,"v3")),h.push(this.move.build(e,"f")),h.push(this.fA.build(e,"v2")),h.push(this.fB.build(e,"v2")),h.push(this.distortion.build(e,"v2")),h.push(this.colorA.build(e,"v4")),h.push(this.colorB.build(e,"v4")),h.push(this.colorC.build(e,"v4")),h.push(this.colorD.build(e,"v4")),h.push(this.alpha.build(e,"f")),h.push(this.calpha),e.format(c+"("+h.join(",")+")",this.getType(e),r)}copy(e){return super.copy(e),this.scale.copy(e.scale),this.size.copy(e.size),this.move.copy(e.move),this.fA.copy(e.fA),this.fB.copy(e.fB),this.distortion.copy(e.distortion),this.colorA.copy(e.colorA),this.colorB.copy(e.colorB),this.colorC.copy(e.colorC),this.colorD.copy(e.colorD),this.alpha.copy(e.alpha),this.calpha=e.calpha,this.noiseType.copy(e.noiseType),this}};wn.numOctaves=5;var Nn=class extends ue{constructor(e=new ce,r=new ce,o=new ce,i=new ce){super("v3");this.nodeType="Blend";this.a=e,this.b=r,this.alpha=o,this.mode=i}generate(e,r){if(e.isShader("fragment")){let o=[];return o.push(this.a.build(e,"c")),o.push(this.b.build(e,"c")),o.push(this.alpha.build(e,"f")),o.push(this.mode.build(e,"i")),e.format("spe_blend("+o.join(",")+")",this.getType(e),r)}else return console.warn("BlendNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),r)}copy(e){return super.copy(e),this.a.copy(e.a),this.b.copy(e.b),this.alpha.copy(e.alpha),this.mode.copy(e.mode),this}};var yi=class extends ue{constructor(e,r,o,i,s,a,l,c,h,p,u,d){super("v3");this.nodeType="Depth";this.gradientType=e,this.smooth=r,this.near=o,this.far=i,this.isVector=s,this.isWorldSpace=a,this.origin=l,this.direction=c,this.colors=h,this.steps=p,this.num=u,this.alpha=d,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,r){let o=`g${this.uuid.toString().replace(/-/g,"")}`,i=new te(`vec3 ${o}_sdepth(float near, float far, vec3 origin, vec3 direction, vec4 colors[${o}_MAX_COLORS], float steps[${o}_MAX_COLORS], float alpha, out float calpha) {
|
|
628
|
+
vec4 color = colors[0];
|
|
629
|
+
#ifdef ${o}_IS_VECTOR
|
|
630
|
+
#ifdef ${o}_LINEAR
|
|
631
|
+
#ifdef ${o}_WORLDSPACE
|
|
632
|
+
float depth = vectorLinearWorldSpaceDepth(direction, origin, near, far);
|
|
633
|
+
#else
|
|
634
|
+
float depth = vectorLinearObjectSpaceDepth(direction, origin, near, far);
|
|
635
|
+
#endif
|
|
636
|
+
#else
|
|
637
|
+
#ifdef ${o}_WORLDSPACE
|
|
638
|
+
float depth = vectorSphericalWorldSpaceDepth(origin, near, far);
|
|
639
|
+
#else
|
|
640
|
+
float depth = vectorSphericalObjectSpaceDepth(origin, near, far);
|
|
641
|
+
#endif
|
|
642
|
+
#endif
|
|
643
|
+
#else
|
|
644
|
+
float dist = length(vWPosition - cameraPosition);
|
|
645
|
+
float depth = ( dist - near ) / ( far - near );
|
|
646
|
+
#endif
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
float p;
|
|
650
|
+
#ifdef ${o}_SMOOTH
|
|
651
|
+
for ( int i = 1; i < ${o}_MAX_COLORS; i++ ) {
|
|
652
|
+
p = clamp( ( depth - steps[i-1] ) / ( steps[i] - steps[i-1] ), 0.0, 1.0 );
|
|
653
|
+
color = mix(color, colors[i], smoothstep(0.0, 1.0, p));
|
|
654
|
+
}
|
|
655
|
+
#else
|
|
656
|
+
for ( int i = 1; i < ${o}_MAX_COLORS; i++ ) {
|
|
657
|
+
p = clamp(( depth - steps[i - 1] ) / ( steps[i] - steps[i - 1] ), 0.0, 1.0);
|
|
658
|
+
color = mix(color, colors[i], p);
|
|
659
|
+
}
|
|
660
|
+
#endif
|
|
661
|
+
|
|
662
|
+
float lalpha = alpha * color.a;
|
|
663
|
+
calpha = lalpha / clamp( lalpha + accumAlpha, 0.00001, 1.0 );
|
|
664
|
+
|
|
665
|
+
accumAlpha += ( 1.0 - accumAlpha ) * lalpha;
|
|
666
|
+
return color.rgb;
|
|
667
|
+
}`,[yi.Nodes.vectorLinearWorldSpaceDepth,yi.Nodes.vectorLinearObjectSpaceDepth,yi.Nodes.vectorSphericalObjectSpaceDepth,yi.Nodes.vectorSphericalWorldSpaceDepth]);if(e.isShader("fragment")){e.define(`${o}_MAX_COLORS`,this.num.value+1),this.smooth.value&&e.define(`${o}_SMOOTH`),this.isVector.value>.5&&e.define(`${o}_IS_VECTOR`),this.gradientType.value===0&&e.define(`${o}_LINEAR`),this.isWorldSpace.value>.5&&e.define(`${o}_WORLDSPACE`),e.require("worldPosition"),e.addFragmentVariable(this.calpha,"float");let s=e.include(i),a=[];return a.push(this.near.build(e,"f")),a.push(this.far.build(e,"f")),a.push(this.origin.build(e,"v3")),a.push(this.direction.build(e,"v3")),a.push(this.colors.build(e,"v4[]")),a.push(this.steps.build(e,"f[]")),a.push(this.alpha.build(e,"f")),a.push(this.calpha),e.format(s+"("+a.join(",")+")",this.getType(e),r)}else return console.warn("DepthNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),r)}copy(e){return super.copy(e),this.gradientType=e.gradientType.clone(),this.smooth=e.smooth.clone(),this.near=e.near.clone(),this.far=e.far.clone(),this.isVector=e.isVector.clone(),this.isWorldSpace=e.isWorldSpace.clone(),this.origin=e.origin.clone(),this.direction=e.direction.clone(),this.colors=e.colors.clone(),this.steps=e.steps.clone(),this.alpha=e.alpha.clone(),this.calpha=e.calpha,this}},Ln=yi;Ln.Nodes=function(){let e=new te(`float vectorLinearWorldSpaceDepth(vec3 direction, vec3 origin, float near, float far) {
|
|
668
|
+
vec3 n = normalize(direction);
|
|
669
|
+
float dist = (n.x*(vWPosition.x - origin.x) + n.y*(vWPosition.y - origin.y) + n.z*(vWPosition.z - origin.z));
|
|
670
|
+
return ( dist - near ) / ( far - near );
|
|
671
|
+
}`),r=new te(`float vectorLinearObjectSpaceDepth(vec3 direction, vec3 origin, float near, float far) {
|
|
672
|
+
vec3 n = normalize(direction);
|
|
673
|
+
float dist = (n.x*(position.x - origin.x) + n.y*(position.y - origin.y) + n.z*(position.z - origin.z));
|
|
674
|
+
return ( dist - near ) / ( far - near );
|
|
675
|
+
}`),o=new te(`float vectorSphericalWorldSpaceDepth(vec3 origin, float near, float far) {
|
|
676
|
+
float dist = length(vWPosition - origin);
|
|
677
|
+
return ( dist - near ) / ( far - near );
|
|
678
|
+
}`),i=new te(`float vectorSphericalObjectSpaceDepth(vec3 origin, float near, float far) {
|
|
679
|
+
float dist = length(position - origin);
|
|
680
|
+
return ( dist - near ) / ( far - near );
|
|
681
|
+
}`);return{vectorLinearWorldSpaceDepth:e,vectorLinearObjectSpaceDepth:r,vectorSphericalWorldSpaceDepth:o,vectorSphericalObjectSpaceDepth:i}}();var $l=class extends ue{constructor(e,r,o){super("v3");this.nodeType="Matcap";this.texture=e,this.alpha=r,this.mode=o,this.calpha=`g${this.uuid.toString().replace(/-/g,"")}_calpha`}generate(e,r){if(e.isShader("fragment")){e.addFragmentVariable(this.calpha,"float");let o=e.include($l.Nodes.matcap);e.require("normal"),e.requires.normal=!0;let i=[];return i.push(this.texture.getTexture(e,"t")),i.push("normal"),i.push(this.alpha.build(e,"f")),i.push(this.mode.build(e,"i")),i.push(this.calpha),e.format(o+"("+i.join(",")+")",this.getType(e),r)}else return console.warn("MatcapNode is not compatible with "+e.shader+" shader."),e.format("vec3( 0.0 )",this.getType(e),r)}copy(e){return super.copy(e),this.texture=e.texture.clone(),this.alpha=e.alpha.clone(),this.mode=e.mode.clone(),this.calpha=e.calpha,this}},Cn=$l;Cn.Nodes=function(){return{matcap:new te(`vec3 matcap(sampler2D matcapTex, vec3 normal, float alpha, int mode, out float calpha) {
|
|
682
|
+
vec3 viewDir = normalize( vViewPosition );
|
|
683
|
+
vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );
|
|
684
|
+
vec3 y = cross( viewDir, x );
|
|
685
|
+
vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; // 0.495 to remove artifacts caused by undersized matcap disks
|
|
686
|
+
vec4 matcapColor = texture2D( matcapTex, uv );
|
|
687
|
+
|
|
688
|
+
calpha = alpha / clamp( alpha + accumAlpha, 0.00001, 1.0 );
|
|
689
|
+
accumAlpha += ( 1.0 - accumAlpha ) * alpha;
|
|
690
|
+
|
|
691
|
+
return matcapColor.rgb;
|
|
692
|
+
}
|
|
693
|
+
`)}}();var mt=class{constructor(t){this.id=2,this.layerCount=2,this.uuid=Le.MathUtils.generateUUID(),this.needsUpdate=!1,this._material=t,this._layerNodes=[];let e=this._createLayer({id:0,type:"color"});this._material.color=e.color,this._material.alpha===void 0&&(this._material.alpha=new ee(1));let r=new ee(1),o=new ye(0);"shadingAlpha"in this._material&&"shadingBlend"in this._material&&(this._material.shadingAlpha=r,this._material.shadingBlend=o),this._layerNodes.push({id:0,type:"color",color:e.color,alpha:e.alpha,mode:e.mode}),this._layerNodes.push({id:1,type:"light",alpha:r,mode:o}),this.head=e.layer,this.head.next=new Re(1,void 0,{type:"light",alpha:r,mode:o}),this.attachLightNodes(this.getLightLayer())}get material(){return this._material}set material(t){this._material=t;let e,r,o=this.head;for(;o!==void 0;){if(o.type==="light"){e=o.uniforms[`f${o.id}_alpha`],r=o.uniforms[`f${o.id}_mode`];break}o=o.next}"shadingAlpha"in this._material&&"shadingBlend"in this._material&&(this._material.shadingAlpha=e,this._material.shadingBlend=r),this.attachLightNodes(t.userData.layers?.getLightLayer()),this.blendColors(),this.blendAfterColors(),this.blendPositions()}getLayersOfType(t){let e=[],r=this.head;for(;r;)r.type===t&&e.push(r),r=r.next;return e}addLayer(t){if(t.id=t.id??++this.id,this.layerCount++,t.type==="light"){let o=this.createLightLayer(t);return this.uuid=Le.MathUtils.generateUUID(),this.blendColors(),this.blendAfterColors(),this.blendPositions(),o}let e=this._createLayer(t),r=e.layer;if(this.head===void 0)this.head=r;else{let o=this.head;for(;o.next!=null;)o=o.next;o.next=r}return e.color&&this._layerNodes.push({id:r.id,type:"color",color:e.color,alpha:e.alpha,mode:e.mode}),e.position&&this._layerNodes.push({id:r.id,type:"position",position:e.position}),this.uuid=Le.MathUtils.generateUUID(),this.blendColors(),this.blendAfterColors(),this.blendPositions(),r}addLayerBeforeAt(t,e){let r=this.head;t.id=t.id??++this.id,this.layerCount++;let o=this._createLayer(t),i=o.layer;i.next=e;let s=0;if(r===e)this.head=i,o.color&&this._layerNodes.splice(0,0,{id:i.id,type:"color",color:o.color,alpha:o.alpha,mode:o.mode}),o.position&&this._layerNodes.splice(0,0,{id:i.id,type:"position",position:o.position});else{for(s=1;r?.next!==e;)r=r?.next,s++;r.next=i,o.color&&this._layerNodes.splice(s,0,{id:i.id,type:"color",color:o.color,alpha:o.alpha,mode:o.mode}),o.position&&this._layerNodes.splice(s,0,{id:i.id,type:"position",position:o.position})}return this.uuid=Le.MathUtils.generateUUID(),this.blendColors(),this.blendAfterColors(),this.blendPositions(),i}addLayerAt(t,e){e.id=e.id??++this.id,this.layerCount++;let r=this._createLayer(e),o=r.layer;if(r.color&&this._layerNodes.splice(t,0,{id:o.id,type:"color",color:r.color,alpha:r.alpha,mode:r.mode}),r.position&&this._layerNodes.splice(t,0,{id:o.id,type:"position",position:r.position}),t==0)o.next=this.head,this.head=o;else{let i=this.head,s=this.head.next;for(let a=0;a<t-1;a++)i=s,s=s.next;o.next=s,i.next=o}return this.uuid=Le.MathUtils.generateUUID(),this.blendColors(),this.blendAfterColors(),this.blendPositions(),o}removeLayer(t){let e=this.head,r,o=0;if(e?.id==t)this.head=e.next;else for(o=1,r=e,e=e?.next;e!=null;){if(e.id==t){r.next=e.next;break}o++,r=e,e=e.next}return this.cleanupChangedLayer(e),this.blendColors(),this.blendAfterColors(),this.blendPositions(),this.uuid=Le.MathUtils.generateUUID(),this.layerCount--,o}changeLayer(t,e){let r,o=this.head,i;if(o?.id==t){let s=this._createLayer({id:t,uuid:o.uuid,...e});i=s.layer,i.next=o.next,this.head=i,s.color&&(this._layerNodes[0]={id:i.id,type:"color",color:s.color,alpha:s.alpha,mode:s.mode}),s.position&&(this._layerNodes[0]={id:i.id,type:"position",position:s.position}),i.uniforms[`f${t}_mode`].value=o.uniforms[`f${t}_mode`].value,i.uniforms[`f${t}_alpha`].value=o.uniforms[`f${t}_alpha`].value}else{r=o,o=o.next;let s=1;for(;o!=null;){if(o.id==t){let a=this._createLayer({id:t,uuid:o.uuid,...e});i=a.layer,r.next=i,i.next=o.next,a.color&&(this._layerNodes[s]={id:t,type:"color",color:a.color,alpha:a.alpha,mode:a.mode}),a.position&&(this._layerNodes[s]={id:t,type:"position",position:a.position}),i.uniforms[`f${t}_mode`].value=o.uniforms[`f${t}_mode`].value,i.uniforms[`f${t}_alpha`].value=o.uniforms[`f${t}_alpha`].value;break}r=o,o=o.next,s++}}return this.uuid=Le.MathUtils.generateUUID(),this.blendColors(),this.blendAfterColors(),this.blendPositions(),i}getLayer(t){let e=this.head;for(;e!=null&&e.id!=t;)e=e.next;return e}getLayerByUuid(t){let e=this.head;for(;e!==void 0;){if(e.uuid===t)return e;e=e.next}}getLayers(){let t=[],e=this.head;for(;e!=null;)t.push(e),e=e.next;return t}getLayerPosition(t){let e=this.head,r=0;for(;e!==void 0&&e.id!=t;)r++,e=e.next;return r}getDefines(){}getBeforeProgram(){}getLightingProgram(){}getAfterProgram(){}getVarPrograms(){}getUniforms(){}moveLayer(t,e){let r,o=this.head,i;if(t==0)r=this.head,this.head=r.next;else{for(let a=0;a<t;a++)i=o,o=o.next;i.next=o.next,r=o}if(o=this.head,i=void 0,e==0)r.next=this.head,this.head=r;else{for(let a=0;a<e-1;a++)o=o.next;r.next=o?.next,o.next=r}let s=this._layerNodes.splice(t,1)[0];this._layerNodes.splice(e,0,s),this.uuid=Le.MathUtils.generateUUID(),this.blendColors(),this.blendAfterColors()}updateLayerUniform(){this.uuid=Le.MathUtils.generateUUID(),this.blendColors(),this.blendAfterColors()}copy(t){this.needsUpdate=!1,this.layerCount=t.layerCount,this._layerNodes=[],this.layerCount=0,this.head=void 0,this.rebuildLayerNodes(this.head,t.head);let e=t.head,r=this.head;for(;e.next!=null;)this.rebuildLayerNodes(r,e.next),r=r.next,e=e.next;return this.id=t.id,this.uuid=t.uuid,this.blendColors(),this.blendAfterColors(),this.blendPositions(),this}createLightLayer(t){let e=new ee(t.alpha),r=new ye(t.mode);this._material.shadingAlpha=e,this._material.shadingBlend=r,this._layerNodes.push({id:t.id,type:"light",alpha:e,mode:r});let o=new Re(t.id,void 0,{type:"light",alpha:e,mode:r});if(this.head===void 0)this.head=o;else{let i=this.head;for(;i.next!=null;)i=i.next;i.next=o}return this.attachLightNodes(this.getLightLayer()),o}rebuildLayerNodes(t,e,r=!1){if(e.type==="light"){let o=r?e.uniforms[`f${e.id}_alpha`]:new ee(e.uniforms[`f${e.id}_alpha`].value),i=r?e.uniforms[`f${e.id}_mode`]:new ye(e.uniforms[`f${e.id}_mode`].value);this._material.shadingAlpha=o,this._material.shadingBlend=i,this._layerNodes.push({id:e.id,type:"light",alpha:o,mode:i}),this.head===void 0?this.head=new Re(e.id,e.uuid,{type:"light",alpha:o,mode:i}):t&&(t.next=new Re(e.id,e.uuid,{type:"light",alpha:o,mode:i})),this.attachLightNodes(e)}else{let o={type:e.type,id:e.id};for(let i in e.uniforms){let s=e.getName(i);if(!s)continue;let a=`f${e.id}_${s}`;if(Array.isArray(e.uniforms[a].value))o[s]=e.uniforms[a].value.map(l=>l.clone&&!r?l.clone():l);else{let l=e.uniforms[a].value;if(s==="transmissionDepthMap"){o[s]=l;continue}l!=null&&(o[s]=l.clone&&!r&&!l.isRenderTargetTexture?l.clone():l)}}this.addLayer(o)}}attachLightNodes(t){let e={},r=this.getLightLayer();switch(this._material.userData.category){case"Lambert":e.emissive=new Oe(t?.getValue("emissive")?.clone()??0);break;case"Phong":e.shininess=new ee(t?.getValue("shininess")??30),e.specular=new Oe(t?.getValue("specular")?.clone()??1118481);break;case"Toon":e.shininess=new ee(t?.getValue("shininess")??30),e.specular=new Oe(t?.getValue("specular")?.clone()??1118481);break;case"Physical":e.roughness=new ee(t?.getValue("roughness")??.3),e.metalness=new ee(t?.getValue("metalness")??0),e.reflectivity=new ee(t?.getValue("reflectivity")??.5);break;default:break}Object.keys(e).forEach(o=>{this._material[o]=e[o],r.uniforms[`f${r.id}_${o}`]=e[o]})}clone(t){return new mt(t).copy(this)}toJSON(t){return{id:this.id,uuid:this.uuid,head:this.head.toJSON(t)}}fromJSON(t,e,r){let o=new Re(t.head.id,void 0,{type:t.head.type}).fromJSON(t.head,e),i=t.head.next,s=o;for(;i!=null;)s.next=new Re(i.id,void 0,{type:i.type}).fromJSON(i,e),i=i.next,s=s.next;this._layerNodes=[],this.head=void 0,this.rebuildLayerNodes(this.head,o,!0);let a=o;for(s=this.head;a.next!=null;)this.rebuildLayerNodes(s,a.next,!0),s=s.next,a=a.next;return this._material=r,this.id=t.id,this.uuid=t.uuid,this.blendColors(),this.blendAfterColors(),this.blendPositions(),this}getLightLayer(){let t=this.head;for(;t!==void 0&&t.type!=="light";)t=t.next??t;return t}dispose(){let t=this.head;for(this._layerNodes=[],this.layerCount=0;t!==void 0;)t.hasOwnProperty("dispose")===!0&&t.dispose(),t=t.next;this.head=void 0}_createLayer(t){let e=t.type;switch(e){case"color":{let r=new Oe(t.color??5855577),o=new ee(t.alpha??1),i=new Ie("alpha / clamp(alpha + accumAlpha, 0.00001, 1.0 )","f");i.keywords.alpha=o;let s=new ye(t.mode??0);return r.alpha=o,{layer:new Re(t.id,t.uuid,{type:e,color:r,alpha:o,calpha:i,mode:s}),color:r,alpha:i,mode:s}}case"texture":{let r=t.texture??new gr,o=r.matrix;t.mat&&o.copy(t.mat),r.needsUpdate=!0;let i=new ee(t.crop??0),s=new ye(t.projection??0),a=new ye(t.axis??0),l=new ye(t.side??0),c=new ut(t.size?new Le.Vector2(t.size[0],t.size[1]):new Le.Vector2(100,100)),h=new ee(t.alpha??1),p=new ye(t.mode??0),u=new vt(r),d=new dt(t.textureSize??new Le.Vector3(r.image?r.image.width:0,r.image?r.image.height:0)),m=new mn(u,d,i,s,a,l,c,h,p),g=new Ie(m.calpha,"f");return{layer:new Re(t.id,t.uuid,{type:e,texture:u,textureSize:d,crop:i,projection:s,axis:a,side:l,size:c,mat:m.mat,alpha:h,calpha:g,mode:p}),color:m,alpha:g,mode:p}}case"matcap":{let r=t.texture??new gr;r.needsUpdate=!0;let o=new ee(t.alpha??1),i=new vt(r),s=new ye(t.mode??0),a=new Cn(i,o,s),l=new Ie(a.calpha,"f");return{layer:new Re(t.id,t.uuid,{type:e,texture:i,alpha:o,calpha:l,mode:s}),color:a,alpha:l,mode:s}}case"fresnel":{let r=new Oe(t.color??16777215),o=new ee(t.bias??.1),i=new ee(t.scale??1),s=new ee(t.intensity??2),a=new ee(t.factor??1),l=new ee(t.alpha??1),c=new ye(t.mode??0),h=new gn(r,o,i,s,a,l,c),p=new Ie(h.calpha,"f");return{layer:new Re(t.id,t.uuid,{type:e,color:r,bias:o,scale:i,intensity:s,factor:a,alpha:l,calpha:p,mode:c}),color:h,alpha:p,mode:c}}case"rainbow":{let r=new ee(t.filmThickness??30),o=new ee(t.movement??0),i=new dt(t.wavelengths??new Le.Vector3(0,0,0)),s=new ee(t.noiseStrength??0),a=new ee(t.noiseScale??1),l=new dt(t.offset??new Le.Vector3(0,0,0)),c=new ee(t.alpha??1),h=new xn(r,o,i,s,a,l,c),p=new Ie(h.calpha,"f"),u=new ye(t.mode??0);return{layer:new Re(t.id,t.uuid,{type:e,filmThickness:r,movement:o,wavelengths:i,noiseStrength:s,noiseScale:a,offset:l,alpha:c,calpha:p,mode:u}),color:h,alpha:p,mode:u}}case"transmission":{let r=new ee(t.thickness??10),o=new ee(t.ior??1.5),i=new ee(t.roughness??.5),s=new ut(t.transmissionSamplerSize??new Le.Vector2(2048,2048)),a=t.transmissionSamplerMap??new gr,l=t.transmissionDepthMap??new gr,c=new vt(a),h=new vt(l),p=window.innerWidth,u=window.innerHeight,d=p>=u?new ut(u/p,1):new ut(1,p/u),m=new ee(t.alpha??1),g=new bn(r,o,i,s,c,h,d,m),x=new Ie(g.calpha,"f"),y=new ye(t.mode??0);return{layer:new Re(t.id,t.uuid,{type:e,thickness:r,ior:o,roughness:i,transmissionSamplerSize:s,transmissionSamplerMap:c,transmissionDepthMap:h,aspectRatio:d,alpha:m,calpha:x,mode:y}),color:g,alpha:x,mode:y}}case"depth":{let r=new ye(t.gradientType??0),o=new dn(t.smooth??!1),i=new ee(t.near??50),s=new ee(t.far??200),a=new ee(t.isVector??1),l=new ee(t.isWorldSpace??0),c=new dt(t.origin??new Le.Vector3),h=new dt(t.direction??new Le.Vector3),p=new ye(t.num??0),u;t.colors?u=new vo(p.value+1,t.colors):(u=new vo(p.value+1,new Le.Vector4(0,0,0,1)),u.value[1]=new Le.Vector4(1,1,1,1));let d;t.steps?d=new at(p.value+1,t.steps):(d=new at(p.value+1,1),d.value[0]=0);let m=new ee(t.alpha??1),g=new ye(t.mode??0),x=new Ln(r,o,i,s,a,l,c,h,u,d,p,m),y=new Ie(x.calpha,"f");return{layer:new Re(t.id,t.uuid,{type:e,gradientType:r,smooth:o,near:i,far:s,isVector:a,isWorldSpace:l,origin:c,direction:h,colors:u,steps:d,num:p,alpha:m,calpha:y,mode:g}),color:x,alpha:y,mode:g}}case"noise":{let r=new ee(t.scale??1),o=new dt(t.size??new Le.Vector3(100,100,100)),i=new ee(t.move??1),s=new ut(t.fA??new Le.Vector2(1.7,9.2)),a=new ut(t.fB??new Le.Vector2(8.3,2.8)),l=new ut(t.distortion??new Le.Vector2(1,1)),c=new _r(t.colorA),h=new _r(t.colorB),p=new _r(t.colorC),u=new _r(t.colorD),d=new ee(t.alpha??1),m=new ye(t.mode??0),g=new ye(t.noiseType??0),x=new wn(r,o,i,s,a,l,c,h,p,u,d,g),y=new Ie(x.calpha,"f");return{layer:new Re(t.id,t.uuid,{type:e,scale:r,size:o,move:i,fA:s,fB:a,distortion:l,colorA:c,colorB:h,colorC:p,colorD:u,alpha:d,calpha:y,mode:m,noiseType:g}),color:x,alpha:y,mode:m}}case"normal":{let r=new dt(t.cnormal??new Le.Vector3(1,1,1)),o=new ee(t.alpha??1),i=new ye(t.mode??0),s=new vn(r,o),a=new Ie("alpha / clamp(alpha + accumAlpha, 0.00001, 1.0 )","f");return a.keywords.alpha=o,{layer:new Re(t.id,t.uuid,{type:e,cnormal:r,alpha:o,calpha:a,mode:i}),color:s,alpha:a,mode:i}}case"gradient":{let r=new ye(t.gradientType??0),o=new dn(t.smooth??!1),i;t.colors?i=new vo(t.colors.length,t.colors):(i=new vo(10,new Le.Vector4(0,0,0,1)),i.value[1]=new Le.Vector4(1,1,1,1));let s;t.steps?s=new at(t.steps.length,t.steps):(s=new at(10,1),s.value[0]=0);let a=new ut(t.offset??new Le.Vector2(0,0)),l=new ut(t.morph??new Le.Vector2(0,0)),c=new ee(t.angle??0),h=new ee(t.alpha??1),p=new ye(t.mode??0),u=new Sn(r,o,i,s,a,l,c,h),d=new Ie(u.calpha,"f");return{layer:new Re(t.id,t.uuid,{type:e,gradientType:r,smooth:o,colors:i,steps:s,offset:a,morph:l,angle:c,alpha:h,calpha:d,mode:p}),color:u,alpha:d,mode:p}}case"displace":{let r=new ye(t.displacementType??0);if(r.value===0){let o=new dt(t.offset??new Le.Vector3(0,0,0)),i=new ee(t.scale??10),s=new ee(t.intensity??8),a=new ee(t.movement??1),l=new ee(t.alpha??1),c=new ye(t.mode??0),h=new ye(t.noiseType??0),p=new gi(r,s,a,o,i,h);return{layer:new Re(t.id,t.uuid,{displacementType:r,type:e,offset:o,scale:i,intensity:s,movement:a,alpha:l,mode:c,noiseType:h}),position:p}}else if(r.value===1){let o=t.texture??new gr,i=o.matrix;t.mat&&i.copy(t.mat),o.needsUpdate=!0;let s=new ee(t.intensity??8),a=new vt(o),l=new ee(t.crop??0),c=new ee(t.alpha??1),h=new ye(t.mode??0),p=new gi(r,s,a,l);return{layer:new Re(t.id,t.uuid,{displacementType:r,type:e,intensity:s,texture:a,crop:l,mat:p.mat,alpha:c,mode:h}),position:p}}return{}}}return{}}blendColors(){let t=this._layerNodes.findIndex(r=>r.type==="color"),e=this._layerNodes.findIndex(r=>r.type==="light");if(t!==-1&&t<e){let r=this._layerNodes[t].color;for(let o=t+1;o<e;++o){let i=this._layerNodes[o];i.type==="color"&&(r=new Nn(r,i.color,i.alpha,i.mode))}this._material.color=r}else this._material.color=void 0}blendAfterColors(){let t=new Ie("outgoingLight","f"),e=this._layerNodes.findIndex(r=>r.type==="light");if(this._layerNodes.length>e+1){for(let r=e+1;r<this._layerNodes.length;++r){let o=this._layerNodes[r];o.type==="color"&&(t=new Nn(t,o.color,o.alpha,o.mode))}"afterColor"in this._material&&(this._material.afterColor=t)}else"afterColor"in this._material&&(this._material.afterColor=void 0)}blendPositions(){let t=this._layerNodes.filter(e=>e.type==="position");if(t.length>0){let e=t[0].position;for(let r=1;r<t.length;++r)t[r]&&(e=new Ot(e,t[r].position,Ot.ADD),e=new Ot(e,new ee(.5).setReadonly(!0),Ot.MUL));this._material.position=e}else this._material.position=void 0}cleanupChangedLayer(t){switch(this._layerNodes=this._layerNodes.filter(e=>e.id!==t.id),t.type){case"displace":{this.blendPositions();break}default:{this.blendColors(),this.blendAfterColors();break}}}};var Rt=class extends xi.ShaderMaterial{constructor(e,r,o){super(o);this.isNodeMaterial=!0;this.type="NodeMaterial";this.wireframeLinecap="";this.wireframeLinejoin="";this.uniformsBackup={};this.userData={type:"",category:"",nodeType:""};this.fog=!0,this.vertex=e??new un(new st(st.PROJECTION)),this.fragment=r??new un(new Oe(5855577)),this.updaters=[],this.isDetached=!0,this.dithering=!0,this.onBeforeCompile=this._onBeforeCompile}getDefines(){return this.defines}getUniforms(){return this.uniforms}getVertexShader(){return this.vertexShader}getFragmentShader(){return this.fragmentShader}_onBeforeCompile(e,r){this.build({renderer:r}),e.defines=this.defines,e.uniforms=this.uniforms,e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.extensionDerivatives=this.extensions.derivatives===!0,e.extensionFragDepth=this.extensions.fragDepth===!0,e.extensionDrawBuffers=this.extensions.drawBuffers===!0,e.extensionShaderTextureLOD=this.extensions.shaderTextureLOD===!0}_getLayerStack(e){let r=new mt(this);return e&&(async()=>{for(;e.image===void 0;)await new Promise(o=>requestAnimationFrame(o));r.addLayerAt(1,{type:"texture",texture:e}),this.dispose()})(),r}clampUniformsForPreview(e,r){let o=(i,s,a)=>Math.min(Math.max(i,s),a);if(this.userData.layers){for(let i of this.userData.layers.getLayers())if(i.type=="displace"){this.uniformsBackup[`f${i.id}_intensity`]=i.uniforms[`f${i.id}_intensity`].value;let s=o(i.uniforms[`f${i.id}_intensity`].value,e,r);i.uniforms[`f${i.id}_intensity`].value=s}}}restoreClampedUniforms(){if(this.userData.layers)for(let e of this.userData.layers.getLayers())e.type=="displace"&&(e.uniforms[`f${e.id}_intensity`].value=this.uniformsBackup[`f${e.id}_intensity`])}customProgramCacheKey(){return this.getHash()}updateFrame(e){for(let r=0;r<this.updaters.length;++r)e.updateNode(this.updaters[r])}build(e){e=e??{};let r=e.builder??new la;return r.setMaterial(this,e.renderer),r.build(this.vertex,this.fragment),this.vertexShader=r.getCode("vertex"),this.fragmentShader=r.getCode("fragment"),this.defines=r.defines,this.uniforms=r.uniforms,this.extensions=r.extensions,this.updaters=r.updaters,this.fog=r.requires.fog,this.lights=r.requires.lights,this.transparent=r.requires.transparent||this.blending>xi.NormalBlending,this}getHash(){let e="{";return e+='"vertex":'+this.vertex.getHash()+",",e+='"fragment":'+this.fragment.getHash(),e+="}",e}copy(e){let r=this.uuid;for(let o in e)this[o]=e[o];return this.uuid=r,e.userData!==void 0&&(this.userData=JSON.parse(JSON.stringify(e.userData))),this}toJSON(e){let r=this.userData.layers;this.userData.layers=void 0;let o=super.toJSON(e);return o.type="ShaderMaterial",o.userData={type:this.userData.type,category:this.userData.category,nodeType:this.type,layers:r.toJSON(e)},o.vertex=this.vertex.toJSON(e).uuid,o.fragment=this.fragment.toJSON(e).uuid,delete o.vertexShader,delete o.fragmentShader,delete o.color,delete o.shininess,delete o.specular,delete o.roughness,delete o.metalness,delete o.uniforms,e&&!e.materials[this.uuid]&&(e.materials[this.uuid]=o),this.userData.layers=r,o}fromJSON(e,r){this.defines=e.defines??{},this.depthFunc=e.depthFunc,this.depthWrite=e.depthWrite,this.side=e.side!==void 0?e.side:xi.FrontSide,this.transparent=e.transparent,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.wireframe=e.wireframe,this.userData.layers.fromJSON(e.userData.layers,r,this)}get penumbraSizeNode(){return this.fragment.penumbraSize}set penumbraSizeNode(e){this.fragment.penumbraSize=e}};Object.defineProperties(Rt.prototype,{properties:{get:function(){return this.fragment.properties}},needsUpdate:{set:function(n){n===!0&&this.version++,this.needsCompile=n},get:function(){return this.needsCompile}}});var ha=require("three");var ca=class extends ce{constructor(){super("basic");this.nodeType="Basic";this.color=new Oe(5855577)}generate(e){let r;if(e.isShader("vertex")){let o=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform(ha.UniformsUtils.merge([ha.UniformsLib.fog])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <normal_pars_vertex>"].join(`
|
|
694
|
+
`));let i=["#include <beginnormal_vertex>",`
|
|
695
|
+
#if !defined( USE_LAYER_DISPLACE )
|
|
696
|
+
#include <defaultnormal_vertex>
|
|
697
|
+
#endif
|
|
698
|
+
|
|
699
|
+
vec3 displaced_position = position;
|
|
700
|
+
vec3 displaced_normal = normal;
|
|
701
|
+
|
|
702
|
+
#if defined( USE_LAYER_DISPLACE )
|
|
703
|
+
vec3 transformed;
|
|
704
|
+
vec3 transformedNormal;
|
|
705
|
+
#endif
|
|
706
|
+
`,"#include <normal_vertex>",`
|
|
707
|
+
#if !defined( USE_LAYER_DISPLACE )
|
|
708
|
+
#include <begin_vertex>
|
|
709
|
+
#endif /* !USE_LAYER_DISPLACE */
|
|
710
|
+
`];o&&i.push(o.code,o.result?"displaced_position = "+o.result+";":""),i.push("transformed = displaced_position;","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),i.push("#include <project_vertex>","#include <fog_vertex>","#include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;","#include <worldpos_vertex>"),i.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),r=i.join(`
|
|
711
|
+
`)}else{this.color===void 0&&(this.color=new Oe(5855577)),this.color.analyze(e,{slot:"color"}),this.alpha&&this.alpha.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"});let o=this.color.flow(e,"c",{slot:"color"}),i=this.alpha?this.alpha.flow(e,"f"):void 0,s=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0;e.requires.transparent=i!==void 0,e.addParsCode(["varying vec3 vWPosition;","#include <fog_pars_fragment>","#include <dithering_pars_fragment>","varying vec3 vViewPosition;","#include <normal_pars_fragment>"].join(`
|
|
712
|
+
`));let a=["#include <normal_fragment_begin>",o.code];i&&a.push(i.code,"#ifdef ALPHATEST"," if ( "+i.result+" <= ALPHATEST ) discard;","#endif"),s?a.push(s.code,`vec3 outgoingLight = ${o.result};`,`vec3 finalColor = spe_blend(outgoingLight, ${s.result}, 1.0, SPE_BLENDING_NORMAL);`):a.push(`vec3 finalColor = ${o.result};`),i?a.push(`gl_FragColor = vec4( finalColor, accumAlpha * ${i.result} );`):a.push("gl_FragColor = vec4("+o.result+", 1.0 );"),a.push("#include <fog_fragment>","#include <dithering_fragment>"),r=a.join(`
|
|
713
|
+
`)}return r}copy(e){return super.copy(e),e.color&&(this.color=e.color.clone()),e.position&&(this.position=e.position.clone()),e.alpha&&(this.alpha=e.alpha.clone()),e.afterColor&&(this.afterColor=e.afterColor.clone()),e.shadingAlpha&&(this.shadingAlpha=e.shadingAlpha.clone()),e.shadingBlend&&(this.shadingBlend=e.shadingBlend.clone()),this}};var pa=class extends Rt{constructor(e=new ca,r){super(e,e,r);this.type="BasicNodeMaterial",this.fragment=e}get color(){return this.fragment.color}set color(e){this.fragment.color=e}get afterColor(){return this.fragment.afterColor}set afterColor(e){this.fragment.afterColor=e}get alpha(){return this.fragment.alpha}set alpha(e){this.fragment.alpha=e}get shadingAlpha(){return this.fragment.shadingAlpha}set shadingAlpha(e){this.fragment.shadingAlpha=e}get shadingBlend(){return this.fragment.shadingBlend}set shadingBlend(e){this.fragment.shadingBlend=e}get position(){return this.fragment.position}set position(e){this.fragment.position=e}};var lt=class extends pa{constructor(t,e,r){super(e,t),this.userData.type="BasicMaterial",this.userData.category="Basic",this.userData.layers=r??this._getLayerStack(t?.map)}get layersList(){return this.userData.layers}set layersList(t){this.userData.layers=t}equals(t){return this.userData.type===t.userData.type&&this.userData.layers.uuid==t.userData.layers.uuid}copy(t){if(t.userData.layers!==void 0&&t.userData.layers instanceof mt){let e=t.userData.layers,r=t.fragment;super.copy(t);let o=r.clone();this.fragment=o,this.vertex=o;let i=e.clone(this);this.userData.layers=i}else super.copy(t);return this}static fromJSON(t,e,r){let o=r.getNode(e.vertex),i=new lt(void 0,o);return i.fromJSON(e,r),i}static fromMaterial(t){let e=new lt(t.map?{map:t.map}:{}),r=e.fragment;return r.color.value.copy(t.color),r.alpha.value=t.opacity,e}dispose(){super.dispose()}};var Tn=require("three");var ua=class extends ce{constructor(){super("phong");this.nodeType="Phong";this.color=new Oe(5855577),this.specular=new Oe(1118481),this.shininess=new ee(30),this.penumbraSize=new at(5,.5),this.shadingAlpha=new ee(1),this.shadingBlend=new ye(0)}build(e){let r;if(e.define("PHONG"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let o=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform(Tn.UniformsUtils.merge([Tn.UniformsLib.fog,Tn.UniformsLib.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <normal_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(`
|
|
714
|
+
`));let i=["#include <beginnormal_vertex>",`
|
|
715
|
+
#ifndef USE_LAYER_DISPLACE
|
|
716
|
+
#include <defaultnormal_vertex>
|
|
717
|
+
#endif
|
|
718
|
+
|
|
719
|
+
|
|
720
|
+
vec3 displaced_position = position;
|
|
721
|
+
vec3 displaced_normal = normal;
|
|
722
|
+
|
|
723
|
+
#ifdef USE_LAYER_DISPLACE
|
|
724
|
+
vec3 transformed;
|
|
725
|
+
vec3 transformedNormal;
|
|
726
|
+
#endif
|
|
727
|
+
`,"#include <normal_vertex>",`
|
|
728
|
+
#ifndef USE_LAYER_DISPLACE
|
|
729
|
+
#include <begin_vertex>
|
|
730
|
+
#endif
|
|
731
|
+
`];o&&i.push(o.code,o.result?"displaced_position = "+o.result+";":""),i.push("transformed = displaced_position;","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),i.push(" #include <project_vertex>"," #include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;"," #include <worldpos_vertex>"," #include <shadowmap_vertex>"," #include <fog_vertex>"),i.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),r=i.join(`
|
|
732
|
+
`)}else{e.mergeUniform({penumbraSize:this.penumbraSize}),this.color===void 0&&(this.color=new Oe(5855577)),this.color.analyze(e,{slot:"color"}),this.specular.analyze(e),this.shininess.analyze(e),this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let o=this.color.flow(e,"c",{slot:"color"}),i=this.specular.flow(e,"c"),s=this.shininess.flow(e,"f"),a=this.shadingAlpha.flow(e,"f"),l=this.shadingBlend.flow(e,"i"),c=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,h=this.alpha?this.alpha.flow(e,"f"):void 0;e.requires.transparent=h!==void 0,e.addParsCode(["varying vec3 vWPosition;","uniform vec3 emissive;",`uniform float penumbraSize[${5}];`,"#include <normal_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <lights_phong_pars_fragment>","#include <shadowmap_pars_fragment>","#include <dithering_pars_fragment>"].join(`
|
|
733
|
+
`));let p=["#include <normal_fragment_begin>",`
|
|
734
|
+
// NOTE: gl_FrontFacing alternative using face normal estimation.
|
|
735
|
+
vec3 viewdx = dFdx(vViewPosition);
|
|
736
|
+
vec3 viewdy = dFdy(vViewPosition);
|
|
737
|
+
vec3 faceNormal = normalize(cross(viewdx,viewdy));
|
|
738
|
+
if (dot(normal, faceNormal) < 0.0) {
|
|
739
|
+
normal *= -1.0;
|
|
740
|
+
}
|
|
741
|
+
`," BlinnPhongMaterial material;"];p.push(o.code," vec3 diffuseColor = "+o.result+";"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );"," vec3 totalEmissiveRadiance = emissive;",i.code," vec3 specular = "+i.result+";",s.code," float shininess = max( 0.0001, "+s.result+" );"," float specularStrength = 1.0;"),h&&p.push(h.code,"#ifdef ALPHATEST","if ( "+h.result+" <= ALPHATEST ) discard;","#endif"),p.push("material.diffuseColor = diffuseColor;"),p.push("material.specularColor = specular;","material.specularShininess = shininess;","material.specularStrength = specularStrength;","#include <lights_fragment_begin>","#include <lights_fragment_end>"),p.push("vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;"),p.push(`
|
|
742
|
+
if (outgoingLight != diffuseColor) {
|
|
743
|
+
float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 );
|
|
744
|
+
accumAlpha += ( 1.0 - accumAlpha ) * ${a.result} * lightAccu;
|
|
745
|
+
outgoingLight = spe_blend( diffuseColor, outgoingLight, ${a.result}, ${l.result} );
|
|
746
|
+
}
|
|
747
|
+
`),c&&p.push(c.code,`outgoingLight = spe_blend(outgoingLight, ${c.result}, 1.0, SPE_BLENDING_NORMAL);`),h?p.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${h.result} );`):p.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),p.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),r=p.join(`
|
|
748
|
+
`)}return r}copy(e){return super.copy(e),e.color&&(this.color=e.color.clone()),this.specular=e.specular.clone(),this.shininess=e.shininess.clone(),e.position&&(this.position=e.position.clone()),e.afterColor&&(this.afterColor=e.afterColor.clone()),e.alpha&&(this.alpha=e.alpha.clone()),e.shadingAlpha&&(this.shadingAlpha=e.shadingAlpha.clone()),e.shadingBlend&&(this.shadingBlend=e.shadingBlend.clone()),this}};var da=class extends Rt{constructor(e=new ua,r){super(e,e,r);this.type="PhongNodeMaterial",this.fragment=e}get color(){return this.fragment.color}set color(e){this.fragment.color=e}get afterColor(){return this.fragment.afterColor}set afterColor(e){this.fragment.afterColor=e}get alpha(){return this.fragment.alpha}set alpha(e){this.fragment.alpha=e}get shadingAlpha(){return this.fragment.shadingAlpha}set shadingAlpha(e){this.fragment.shadingAlpha=e}get shadingBlend(){return this.fragment.shadingBlend}set shadingBlend(e){this.fragment.shadingBlend=e}get position(){return this.fragment.position}set position(e){this.fragment.position=e}get specular(){return this.fragment.specular}set specular(e){this.fragment.specular=e}get shininess(){return this.fragment.shininess}set shininess(e){this.fragment.shininess=e}};var St=class extends da{constructor(t,e,r){super(e,t),this.userData.type="PhongMaterial",this.userData.category="Phong",this.userData.layers=r??this._getLayerStack(t?.map)}get layersList(){return this.userData.layers}set layersList(t){this.userData.layers=t}equals(t){return this.userData.type===t.userData.type&&this.userData.layers.uuid==t.userData.layers.uuid}copy(t){if(t.userData.layers!==void 0&&t.userData.layers instanceof mt){let e=t.userData.layers,r=t.fragment;super.copy(t);let o=r.clone();this.fragment=o,this.vertex=o;let i=e.clone(this);this.userData.layers=i,o.shadingAlpha.value=r.shadingAlpha.value,o.shadingBlend.value=r.shadingBlend.value}else super.copy(t);return this}static fromJSON(t,e,r){let o=r.getNode(e.vertex),i=new St(void 0,o);return i.fromJSON(e,r),i}static fromMaterial(t){let e=new St(t.map?{map:t.map}:{}),r=e.fragment;return r.color.value.copy(t.color),r.alpha.value=t.opacity,e}dispose(){super.dispose()}};var Mn=require("three");var ma=class extends ce{constructor(){super("lambert");this.nodeType="Lambert";this.color=new Oe(5855577),this.emissive=new Oe(0),this.emissiveIntensity=new ee(1),this.penumbraSize=new at(5,.5),this.shadingAlpha=new ee(1),this.shadingBlend=new ye(0)}build(e){let r;if(e.define("LAMBERT"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let o=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform(Mn.UniformsUtils.merge([Mn.UniformsLib.fog,Mn.UniformsLib.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","varying vec3 vLightFront;","varying vec3 vIndirectFront;","#ifndef DOUBLE_SIDED"," #define DOUBLE_SIDED","#endif","#ifdef DOUBLE_SIDED"," varying vec3 vLightBack;"," varying vec3 vIndirectBack;","#endif","#include <bsdfs>","#include <lights_pars_begin>","#include <color_pars_vertex>","#include <fog_pars_vertex>","#include <normal_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(`
|
|
749
|
+
`));let i=["#include <beginnormal_vertex>",`
|
|
750
|
+
#ifndef USE_LAYER_DISPLACE
|
|
751
|
+
#include <defaultnormal_vertex>
|
|
752
|
+
#endif
|
|
753
|
+
|
|
754
|
+
vec3 displaced_position = position;
|
|
755
|
+
vec3 displaced_normal = normal;
|
|
756
|
+
|
|
757
|
+
#ifdef USE_LAYER_DISPLACE
|
|
758
|
+
vec3 transformed;
|
|
759
|
+
vec3 transformedNormal;
|
|
760
|
+
#endif
|
|
761
|
+
`,"#include <normal_vertex>",`
|
|
762
|
+
#ifndef USE_LAYER_DISPLACE
|
|
763
|
+
#include <begin_vertex>
|
|
764
|
+
#endif
|
|
765
|
+
`];o&&i.push(o.code,o.result?"displaced_position = "+o.result+";":""),i.push("transformed = displaced_position;","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),i.push(" #include <project_vertex>"," #include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;"," #include <worldpos_vertex>",`
|
|
766
|
+
vec3 diffuse = vec3( 1.0 );
|
|
767
|
+
GeometricContext geometry;
|
|
768
|
+
geometry.position = mvPosition.xyz;
|
|
769
|
+
geometry.normal = normalize( transformedNormal );
|
|
770
|
+
geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );
|
|
771
|
+
GeometricContext backGeometry;
|
|
772
|
+
backGeometry.position = geometry.position;
|
|
773
|
+
backGeometry.normal = -geometry.normal;
|
|
774
|
+
backGeometry.viewDir = geometry.viewDir;
|
|
775
|
+
vLightFront = vec3( 0.0 );
|
|
776
|
+
vIndirectFront = vec3( 0.0 );
|
|
777
|
+
#ifdef DOUBLE_SIDED
|
|
778
|
+
vLightBack = vec3( 0.0 );
|
|
779
|
+
vIndirectBack = vec3( 0.0 );
|
|
780
|
+
#endif
|
|
781
|
+
IncidentLight directLight;
|
|
782
|
+
float dotNL;
|
|
783
|
+
vec3 directLightColor_Diffuse;
|
|
784
|
+
vIndirectFront += getAmbientLightIrradiance( ambientLightColor );
|
|
785
|
+
vIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );
|
|
786
|
+
#ifdef DOUBLE_SIDED
|
|
787
|
+
vIndirectBack += getAmbientLightIrradiance( ambientLightColor );
|
|
788
|
+
vIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );
|
|
789
|
+
#endif
|
|
790
|
+
#if NUM_POINT_LIGHTS > 0
|
|
791
|
+
#pragma unroll_loop_start
|
|
792
|
+
for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {
|
|
793
|
+
getPointLightInfo( pointLights[ i ], geometry, directLight );
|
|
794
|
+
dotNL = dot( geometry.normal, directLight.direction );
|
|
795
|
+
directLightColor_Diffuse = directLight.color;
|
|
796
|
+
vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
|
|
797
|
+
#ifdef DOUBLE_SIDED
|
|
798
|
+
vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;
|
|
799
|
+
#endif
|
|
800
|
+
}
|
|
801
|
+
#pragma unroll_loop_end
|
|
802
|
+
#endif
|
|
803
|
+
#if NUM_SPOT_LIGHTS > 0
|
|
804
|
+
#pragma unroll_loop_start
|
|
805
|
+
for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {
|
|
806
|
+
getSpotLightInfo( spotLights[ i ], geometry, directLight );
|
|
807
|
+
dotNL = dot( geometry.normal, directLight.direction );
|
|
808
|
+
directLightColor_Diffuse = directLight.color;
|
|
809
|
+
vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
|
|
810
|
+
#ifdef DOUBLE_SIDED
|
|
811
|
+
vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;
|
|
812
|
+
#endif
|
|
813
|
+
}
|
|
814
|
+
#pragma unroll_loop_end
|
|
815
|
+
#endif
|
|
816
|
+
#if NUM_DIR_LIGHTS > 0
|
|
817
|
+
#pragma unroll_loop_start
|
|
818
|
+
for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {
|
|
819
|
+
getDirectionalLightInfo( directionalLights[ i ], geometry, directLight );
|
|
820
|
+
dotNL = dot( geometry.normal, directLight.direction );
|
|
821
|
+
directLightColor_Diffuse = directLight.color;
|
|
822
|
+
vLightFront += saturate( dotNL ) * directLightColor_Diffuse;
|
|
823
|
+
#ifdef DOUBLE_SIDED
|
|
824
|
+
vLightBack += saturate( -dotNL ) * directLightColor_Diffuse;
|
|
825
|
+
#endif
|
|
826
|
+
}
|
|
827
|
+
#pragma unroll_loop_end
|
|
828
|
+
#endif
|
|
829
|
+
#if NUM_HEMI_LIGHTS > 0
|
|
830
|
+
#pragma unroll_loop_start
|
|
831
|
+
for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {
|
|
832
|
+
vIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );
|
|
833
|
+
#ifdef DOUBLE_SIDED
|
|
834
|
+
vIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );
|
|
835
|
+
#endif
|
|
836
|
+
}
|
|
837
|
+
#pragma unroll_loop_end
|
|
838
|
+
#endif
|
|
839
|
+
`," #include <shadowmap_vertex>"," #include <fog_vertex>"),i.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),r=i.join(`
|
|
840
|
+
`)}else{e.mergeUniform({penumbraSize:this.penumbraSize}),this.color===void 0&&(this.color=new Oe(5855577)),this.color.analyze(e,{slot:"color"}),this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let o=this.color.flow(e,"c",{slot:"color"}),i=this.emissive.flow(e,"c",{slot:"emissive"}),s=this.emissiveIntensity.flow(e,"f",{slot:"emissive"}),a=this.shadingAlpha.flow(e,"f"),l=this.shadingBlend.flow(e,"i"),c=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,h=this.alpha?this.alpha.flow(e,"f"):void 0;e.requires.transparent=h!==void 0,e.addParsCode([`uniform float penumbraSize[${5}];`,"varying vec3 vViewPosition;","varying vec3 vWPosition;","varying vec3 vLightFront;","varying vec3 vIndirectFront;","#ifndef DOUBLE_SIDED"," #define DOUBLE_SIDED","#endif","#include <normal_pars_fragment>","#ifdef DOUBLE_SIDED"," varying vec3 vLightBack;"," varying vec3 vIndirectBack;","#endif","#include <bsdfs>","#include <lights_pars_begin>","#include <fog_pars_fragment>","#include <shadowmap_pars_fragment>","#include <shadowmask_pars_fragment>","#include <clipping_planes_pars_fragment>","#include <dithering_pars_fragment>"].join(`
|
|
841
|
+
`));let p=["#include <normal_fragment_begin>",`
|
|
842
|
+
// NOTE: gl_FrontFacing alternative using face normal estimation.
|
|
843
|
+
vec3 viewdx = dFdx(vViewPosition);
|
|
844
|
+
vec3 viewdy = dFdy(vViewPosition);
|
|
845
|
+
vec3 faceNormal = normalize(cross(viewdx, viewdy));
|
|
846
|
+
bool isFrontFacing = (dot(normal, faceNormal) >= 0.0);
|
|
847
|
+
`,"#include <clipping_planes_fragment>"];p.push(o.code,"vec3 diffuseColor = "+o.result+";","ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );"),h&&p.push(h.code,"#ifdef ALPHATEST","if ( "+h.result+" <= ALPHATEST ) discard;","#endif"),p.push("#ifdef DOUBLE_SIDED"," reflectedLight.indirectDiffuse += ( isFrontFacing ) ? vIndirectFront : vIndirectBack;","#else"," reflectedLight.indirectDiffuse += vIndirectFront;","#endif","#include <lightmap_fragment>","reflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );","#ifdef DOUBLE_SIDED"," reflectedLight.directDiffuse = ( isFrontFacing ) ? vLightFront : vLightBack;","#else"," reflectedLight.directDiffuse = vLightFront;","#endif","reflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();"),i&&p.push(i.code,"reflectedLight.directDiffuse += "+i.result+" * "+s.result+";"),p.push("vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;"),p.push(`
|
|
848
|
+
if (outgoingLight != diffuseColor) {
|
|
849
|
+
float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 );
|
|
850
|
+
accumAlpha += ( 1.0 - accumAlpha ) * ${a.result} * lightAccu;
|
|
851
|
+
outgoingLight = spe_blend( diffuseColor, outgoingLight, ${a.result}, ${l.result} );
|
|
852
|
+
}
|
|
853
|
+
`),c&&p.push(c.code,`outgoingLight = spe_blend(outgoingLight, ${c.result}, 1.0, SPE_BLENDING_NORMAL);`),h?p.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${h.result} );`):p.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),p.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),r=p.join(`
|
|
854
|
+
`)}return r}copy(e){return super.copy(e),this.emissiveIntensity=e.emissiveIntensity.clone(),e.color&&(this.color=e.color.clone()),e.position&&(this.position=e.position.clone()),e.afterColor&&(this.afterColor=e.afterColor.clone()),e.alpha&&(this.alpha=e.alpha.clone()),e.shadingAlpha&&(this.shadingAlpha=e.shadingAlpha.clone()),e.shadingBlend&&(this.shadingBlend=e.shadingBlend.clone()),e.emissive&&(this.emissive=e.emissive.clone()),this}};var fa=class extends Rt{constructor(e=new ma,r){super(e,e,r);this.type="LambertNodeMaterial",this.fragment=e}get color(){return this.fragment.color}set color(e){this.fragment.color=e}get afterColor(){return this.fragment.afterColor}set afterColor(e){this.fragment.afterColor=e}get alpha(){return this.fragment.alpha}set alpha(e){this.fragment.alpha=e}get shadingAlpha(){return this.fragment.shadingAlpha}set shadingAlpha(e){this.fragment.shadingAlpha=e}get shadingBlend(){return this.fragment.shadingBlend}set shadingBlend(e){this.fragment.shadingBlend=e}get position(){return this.fragment.position}set position(e){this.fragment.position=e}get emissive(){return this.fragment.emissive}set emissive(e){this.fragment.emissive=e}get emissiveIntensity(){return this.fragment.emissiveIntensity}set emissiveIntensity(e){this.fragment.emissiveIntensity=e}};var bi=class extends fa{constructor(t,e,r){super(e,t),this.userData.type="LambertMaterial",this.userData.category="Lambert",this.userData.layers=r??this._getLayerStack(t?.map)}get layersList(){return this.userData.layers}set layersList(t){this.userData.layers=t}equals(t){return this.userData.type===t.userData.type&&this.userData.layers.uuid==t.userData.layers.uuid}copy(t){if(t.userData.layers!==void 0&&t.userData.layers instanceof mt){let e=t.userData.layers,r=t.fragment;super.copy(t);let o=r.clone();this.fragment=o,this.vertex=o;let i=e.clone(this);this.userData.layers=i,o.shadingAlpha.value=r.shadingAlpha.value,o.shadingBlend.value=r.shadingBlend.value}else super.copy(t);return this}static fromJSON(t,e,r){let o=r.getNode(e.vertex),i=new bi(void 0,o);return i.fromJSON(e,r),i}dispose(){super.dispose()}};var Pn=require("three");var ga=class extends ce{constructor(){super("toon");this.nodeType="Toon";this.color=new Oe(5855577),this.specular=new Oe(1118481),this.shininess=new ee(30),this.penumbraSize=new at(5,.5),this.shadingAlpha=new ee(1),this.shadingBlend=new ye(0)}build(e){let r;if(e.define("TOON"),e.requires.lights=!0,e.extensions.derivatives=!0,e.isShader("vertex")){let o=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform(Pn.UniformsUtils.merge([Pn.UniformsLib.fog,Pn.UniformsLib.lights])),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <normal_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(`
|
|
855
|
+
`));let i=["#include <beginnormal_vertex>",`
|
|
856
|
+
#ifndef USE_LAYER_DISPLACE
|
|
857
|
+
#include <defaultnormal_vertex>
|
|
858
|
+
#endif
|
|
859
|
+
|
|
860
|
+
vec3 displaced_position = position;
|
|
861
|
+
vec3 displaced_normal = normal;
|
|
862
|
+
|
|
863
|
+
#ifdef USE_LAYER_DISPLACE
|
|
864
|
+
vec3 transformed;
|
|
865
|
+
vec3 transformedNormal;
|
|
866
|
+
#endif
|
|
867
|
+
`,"#include <normal_vertex>",`
|
|
868
|
+
#ifndef USE_LAYER_DISPLACE
|
|
869
|
+
#include <begin_vertex>
|
|
870
|
+
#endif
|
|
871
|
+
`];o&&i.push(o.code,o.result?"displaced_position = "+o.result+";":""),i.push("transformed = displaced_position;","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),i.push(" #include <project_vertex>"," #include <fog_vertex>"," #include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;"," #include <worldpos_vertex>"," #include <shadowmap_vertex>"," #include <fog_vertex>"),i.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),r=i.join(`
|
|
872
|
+
`)}else{e.mergeUniform({penumbraSize:this.penumbraSize}),this.color===void 0&&(this.color=new Oe(5855577)),this.color.analyze(e,{slot:"color"}),this.specular.analyze(e),this.shininess.analyze(e),this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e);let o=this.color.flow(e,"c",{slot:"color"}),i=this.specular.flow(e,"c"),s=this.shininess.flow(e,"f"),a=this.shadingAlpha.flow(e,"f"),l=this.shadingBlend.flow(e,"i"),c=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,h=this.alpha?this.alpha.flow(e,"f"):void 0;e.requires.transparent=h!==void 0,e.addParsCode([`uniform float penumbraSize[${5}];`,"varying vec3 vWPosition;","#include <normal_pars_fragment>","#include <gradientmap_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <dithering_pars_fragment>",`
|
|
873
|
+
varying vec3 vViewPosition;
|
|
874
|
+
struct ToonMaterial {
|
|
875
|
+
vec3 diffuseColor;
|
|
876
|
+
vec3 specularColor;
|
|
877
|
+
float specularShininess;
|
|
878
|
+
float specularStrength;
|
|
879
|
+
};
|
|
880
|
+
void RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
|
|
881
|
+
vec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;
|
|
882
|
+
|
|
883
|
+
reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
|
|
884
|
+
reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;
|
|
885
|
+
}
|
|
886
|
+
void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {
|
|
887
|
+
reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );
|
|
888
|
+
}
|
|
889
|
+
#define RE_Direct RE_Direct_Toon
|
|
890
|
+
#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon
|
|
891
|
+
#define Material_LightProbeLOD( material ) (0)
|
|
892
|
+
`,"#include <shadowmap_pars_fragment>","#include <bumpmap_pars_fragment>","#include <normalmap_pars_fragment>"].join(`
|
|
893
|
+
`));let p=["#include <normal_fragment_begin>",`
|
|
894
|
+
// NOTE: gl_FrontFacing alternative using face normal estimation.
|
|
895
|
+
vec3 viewdx = dFdx(vViewPosition);
|
|
896
|
+
vec3 viewdy = dFdy(vViewPosition);
|
|
897
|
+
vec3 faceNormal = normalize(cross(viewdx,viewdy));
|
|
898
|
+
if (dot(normal, faceNormal) < 0.0) {
|
|
899
|
+
normal *= -1.0;
|
|
900
|
+
}
|
|
901
|
+
`," ToonMaterial material;"];p.push(o.code," vec3 diffuseColor = "+o.result+";"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",i.code," vec3 specular = "+i.result+";",s.code," float shininess = max( 0.0001, "+s.result+" );"," float specularStrength = 1.0;"),h&&p.push(h.code,"#ifdef ALPHATEST","if ( "+h.result+" <= ALPHATEST ) discard;","#endif"),p.push("material.diffuseColor = diffuseColor;"),p.push("material.specularColor = specular;","material.specularShininess = shininess;","material.specularStrength = specularStrength;","#include <lights_fragment_begin>","#include <lights_fragment_end>"),p.push("vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular;"),p.push(`
|
|
902
|
+
if (outgoingLight != diffuseColor) {
|
|
903
|
+
float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 );
|
|
904
|
+
accumAlpha += ( 1.0 - accumAlpha ) * ${a.result} * lightAccu;
|
|
905
|
+
outgoingLight = spe_blend( diffuseColor, outgoingLight, ${a.result}, ${l.result} );
|
|
906
|
+
}
|
|
907
|
+
`),c&&p.push(c.code,`outgoingLight = spe_blend(outgoingLight, ${c.result}, 1.0, SPE_BLENDING_NORMAL);`),h?p.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${h.result} );`):p.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),p.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),r=p.join(`
|
|
908
|
+
`)}return r}copy(e){return super.copy(e),e.color&&(this.color=e.color.clone()),this.specular=e.specular.clone(),this.shininess=e.shininess.clone(),e.position&&(this.position=e.position.clone()),e.afterColor&&(this.afterColor=e.afterColor.clone()),e.alpha&&(this.alpha=e.alpha.clone()),e.shadingAlpha&&(this.shadingAlpha=e.shadingAlpha.clone()),e.shadingBlend&&(this.shadingBlend=e.shadingBlend.clone()),this}};var ya=class extends Rt{constructor(e=new ga,r){super(e,e,r);this.type="ToonNodeMaterial",this.fragment=e}get color(){return this.fragment.color}set color(e){this.fragment.color=e}get afterColor(){return this.fragment.afterColor}set afterColor(e){this.fragment.afterColor=e}get alpha(){return this.fragment.alpha}set alpha(e){this.fragment.alpha=e}get shadingAlpha(){return this.fragment.shadingAlpha}set shadingAlpha(e){this.fragment.shadingAlpha=e}get shadingBlend(){return this.fragment.shadingBlend}set shadingBlend(e){this.fragment.shadingBlend=e}get position(){return this.fragment.position}set position(e){this.fragment.position=e}get specular(){return this.fragment.specular}set specular(e){this.fragment.specular=e}get shininess(){return this.fragment.shininess}set shininess(e){this.fragment.shininess=e}};var vi=class extends ya{constructor(t,e,r){super(e,t),this.userData.type="ToonMaterial",this.userData.category="Toon",this.userData.layers=r??this._getLayerStack(t?.map)}get layersList(){return this.userData.layers}set layersList(t){this.userData.layers=t}equals(t){return this.userData.type===t.userData.type&&this.userData.layers.uuid==t.userData.layers.uuid}copy(t){if(t.userData.layers!==void 0&&t.userData.layers instanceof mt){let e=t.userData.layers,r=t.fragment;super.copy(t);let o=r.clone();this.fragment=o,this.vertex=o;let i=e.clone(this);this.userData.layers=i,o.shadingAlpha.value=r.shadingAlpha.value,o.shadingBlend.value=r.shadingBlend.value}else super.copy(t);return this}static fromJSON(t,e,r){let o=r.getNode(e.vertex),i=new vi(void 0,o);return i.fromJSON(e,r),i}dispose(){super.dispose()}};var Si=require("three");var xa=class extends ce{constructor(){super("standard");this.nodeType="Standard";this.color=new Oe(5855577),this.roughness=new ee(.3),this.metalness=new ee(0),this.reflectivity=new ee(.5),this.penumbraSize=new at(5,.5),this.shadingAlpha=new ee(1),this.shadingBlend=new ye(0)}build(e){let r;if(e.define("STANDARD"),e.requires.lights=!0,e.extensions.derivatives=!0,e.extensions.shaderTextureLOD=!0,e.isShader("vertex")){let o=this.position?this.position.analyzeAndFlow(e,"v3",{cache:"position"}):void 0;e.mergeUniform(Si.UniformsUtils.merge([Si.UniformsLib.fog,Si.UniformsLib.lights])),Si.UniformsLib.LTC_1&&(e.uniforms.ltc_1={value:void 0},e.uniforms.ltc_2={value:void 0}),e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;","#include <fog_pars_vertex>","#include <normal_pars_vertex>","#include <shadowmap_pars_vertex>","#include <clipping_planes_pars_vertex>"].join(`
|
|
909
|
+
`));let i=["#include <beginnormal_vertex>",`
|
|
910
|
+
#if !defined( USE_LAYER_DISPLACE )
|
|
911
|
+
#include <defaultnormal_vertex>
|
|
912
|
+
#endif
|
|
913
|
+
|
|
914
|
+
vec3 displaced_position = position;
|
|
915
|
+
vec3 displaced_normal = normal;
|
|
916
|
+
|
|
917
|
+
#if defined( USE_LAYER_DISPLACE )
|
|
918
|
+
vec3 transformed;
|
|
919
|
+
vec3 transformedNormal;
|
|
920
|
+
#endif
|
|
921
|
+
`,"#include <normal_vertex>",`
|
|
922
|
+
#if !defined( USE_LAYER_DISPLACE )
|
|
923
|
+
#include <begin_vertex>
|
|
924
|
+
#endif /* !USE_LAYER_DISPLACE */
|
|
925
|
+
`];o&&i.push(o.code,o.result?"displaced_position = "+o.result+";":""),i.push("transformed = displaced_position;","transformedNormal = normalMatrix * displaced_normal;","#ifndef FLAT_SHADED"," vNormal = transformedNormal;","#endif"),i.push("#include <project_vertex>","#include <fog_vertex>","#include <clipping_planes_vertex>"," vViewPosition = - mvPosition.xyz;","#include <worldpos_vertex>","#include <shadowmap_vertex>"),i.push("vWPosition = ( modelMatrix * vec4( transformed, 1.0 ) ).xyz;"),r=i.join(`
|
|
926
|
+
`)}else{e.mergeUniform({penumbraSize:this.penumbraSize});let o={gamma:!0};this.color===void 0&&(this.color=new Oe(5855577)),this.color.analyze(e,{slot:"color",context:o}),this.roughness.analyze(e),this.metalness.analyze(e),this.shadingAlpha.analyze(e),this.shadingBlend.analyze(e),this.afterColor&&this.afterColor.analyze(e,{slot:"afterColor"}),this.alpha&&this.alpha.analyze(e),this.reflectivity&&this.reflectivity.analyze(e);let i=this.color.flow(e,"c",{slot:"color",context:o}),s=this.roughness.flow(e,"f"),a=this.metalness.flow(e,"f"),l=this.shadingAlpha.flow(e,"f"),c=this.shadingBlend.flow(e,"i"),h=this.afterColor?this.afterColor.flow(e,"c",{slot:"afterColor"}):void 0,p=this.alpha?this.alpha.flow(e,"f"):void 0,u=this.reflectivity?this.reflectivity.flow(e,"f"):void 0;e.requires.transparent=p!==void 0,e.addParsCode(["varying vec3 vViewPosition;","varying vec3 vWPosition;",`uniform float penumbraSize[${5}];`,"#include <normal_pars_fragment>","#include <dithering_pars_fragment>","#include <fog_pars_fragment>","#include <bsdfs>","#include <lights_pars_begin>","#include <lights_physical_pars_fragment>","#include <shadowmap_pars_fragment>"].join(`
|
|
927
|
+
`));let d=["#include <clipping_planes_fragment>"," #include <normal_fragment_begin>",`
|
|
928
|
+
// NOTE: gl_FrontFacing alternative using face normal estimation.
|
|
929
|
+
vec3 viewdx = dFdx(vViewPosition);
|
|
930
|
+
vec3 viewdy = dFdy(vViewPosition);
|
|
931
|
+
vec3 faceNormal = normalize(cross(viewdx,viewdy));
|
|
932
|
+
if (dot(normal, faceNormal) < 0.0) {
|
|
933
|
+
normal *= -1.0;
|
|
934
|
+
}
|
|
935
|
+
`," PhysicalMaterial material;"," material.diffuseColor = vec3( 1.0 );"];d.push(i.code," vec3 diffuseColor = "+i.result+";"," ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",s.code," float roughnessFactor = "+s.result+";",a.code," float metalnessFactor = "+a.result+";"),p&&d.push(p.code,"#ifdef ALPHATEST"," if ( "+p.result+" <= ALPHATEST ) discard;","#endif"),d.push("vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );","float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );"),d.push("material.diffuseColor = diffuseColor * ( 1.0 - metalnessFactor );","material.roughness = max( roughnessFactor, 0.0525 );","material.roughness += geometryRoughness;","material.roughness = min( material.roughness, 1.0 );","material.roughness = clamp( roughnessFactor, 0.04, 1.0 );"),u?d.push(u.code,"material.specularColor = mix( vec3( 0.16 * pow2( "+u.result+" ) ), diffuseColor, metalnessFactor );"):d.push("material.specularColor = mix( vec3( 0.04 ), diffuseColor, metalnessFactor );"),d.push("#include <lights_fragment_begin>"),d.push("#include <lights_fragment_end>"),d.push("vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular;"),d.push(`
|
|
936
|
+
if (outgoingLight != diffuseColor) {
|
|
937
|
+
float lightAccu = clamp( length( reflectedLight.directSpecular + reflectedLight.indirectSpecular ), 0.0, 1.0 );
|
|
938
|
+
accumAlpha += ( 1.0 - accumAlpha ) * ${l.result} * lightAccu;
|
|
939
|
+
outgoingLight = spe_blend( diffuseColor, outgoingLight, ${l.result}, ${c.result} );
|
|
940
|
+
}
|
|
941
|
+
`),h&&d.push(h.code,`outgoingLight = spe_blend(outgoingLight, ${h.result}, 1.0, SPE_BLENDING_NORMAL);`),p?d.push(`gl_FragColor = vec4( outgoingLight, accumAlpha * ${p.result} );`):d.push("gl_FragColor = vec4( outgoingLight, 1.0 );"),d.push("#include <encodings_fragment>","#include <fog_fragment>","#include <dithering_fragment>"),r=d.join(`
|
|
942
|
+
`)}return r}copy(e){return super.copy(e),e.color&&(this.color=e.color.clone()),this.roughness=e.roughness.clone(),this.metalness=e.metalness.clone(),e.position&&(this.position=e.position.clone()),e.afterColor&&(this.afterColor=e.afterColor.clone()),e.alpha&&(this.alpha=e.alpha.clone()),e.reflectivity&&(this.reflectivity=e.reflectivity.clone()),e.shadingAlpha&&(this.shadingAlpha=e.shadingAlpha.clone()),e.shadingBlend&&(this.shadingBlend=e.shadingBlend.clone()),this}};var ba=class extends Rt{constructor(e=new xa,r){super(e,e,r);this.type="StandardNodeMaterial",this.fragment=e}get color(){return this.fragment.color}set color(e){this.fragment.color=e}get afterColor(){return this.fragment.afterColor}set afterColor(e){this.fragment.afterColor=e}get alpha(){return this.fragment.alpha}set alpha(e){this.fragment.alpha=e}get shadingAlpha(){return this.fragment.shadingAlpha}set shadingAlpha(e){this.fragment.shadingAlpha=e}get shadingBlend(){return this.fragment.shadingBlend}set shadingBlend(e){this.fragment.shadingBlend=e}get position(){return this.fragment.position}set position(e){this.fragment.position=e}get roughness(){return this.fragment.roughness}set roughness(e){this.fragment.roughness=e}get metalness(){return this.fragment.metalness}set metalness(e){this.fragment.metalness=e}get reflectivity(){return this.fragment.reflectivity}set reflectivity(e){this.fragment.reflectivity=e}};var wi=class extends ba{constructor(t,e,r){super(e,t),this.userData.type="PhysicalMaterial",this.userData.category="Physical",this.userData.layers=r??this._getLayerStack(t?.map)}get layersList(){return this.userData.layers}set layersList(t){this.userData.layers=t}equals(t){return this.userData.type===t.userData.type&&this.userData.layers.uuid==t.userData.layers.uuid}copy(t){if(t.userData.layers!==void 0&&t.userData.layers instanceof mt){let e=t.userData.layers,r=t.fragment;super.copy(t);let o=r.clone();this.fragment=o,this.vertex=o;let i=e.clone(this);this.userData.layers=i,o.shadingAlpha.value=r.shadingAlpha.value,o.shadingBlend.value=r.shadingBlend.value}else super.copy(t);return this}static fromJSON(t,e,r){let o=r.getNode(e.vertex),i=new wi(void 0,o);return i.fromJSON(e,r),i}dispose(){super.dispose()}};var va=require("three");function We(n,t){let e;if(typeof n=="string"){let r=t?.getColor(n);r?e=r:(console.warn("Tried to create color layer params with a color key that does not exist in the assets manager"),e=new It(0,0,0,0))}else return"a"in n?new It(n.r,n.g,n.b,n.a):new It(n.r,n.g,n.b,1);return e}var _e=require("three");function hd(n,t){switch(n.data.type){case"light":return tr(n);case"fresnel":return av(n,t);case"gradient":return lv(n);case"depth":return cv(n);case"normal":return hv(n);case"noise":return pv(n,t);case"texture":return uv(n,t);case"rainbow":return dv(n);case"transmission":return mv(n,t);case"matcap":return fv(n,t);case"displace":return gv(n);case"color":default:return sv(n,t)}}function pd(n){return{type:n.data.type}}function tr(n){let{alpha:t,mode:e}=n.data;return{...pd(n),alpha:t,mode:e}}function sv(n,t){return{...tr(n),color:We(n.data.color,t)}}function av(n,t){let{bias:e,scale:r,intensity:o,factor:i,color:s}=n.data;return{...tr(n),color:We(s,t),bias:e,scale:r,intensity:o,factor:i}}function lv(n){let{gradientType:t,smooth:e,colors:r,steps:o,angle:i,offset:s,morph:a}=n.data;return{...tr(n),gradientType:t,smooth:e,colors:r.map(l=>new _e.Vector4(l[0],l[1],l[2],l[3])),num:r.length,steps:o,offset:new _e.Vector2(...s),morph:new _e.Vector2(...a),angle:i}}function cv(n){let{gradientType:t,near:e,far:r,isVector:o,isWorldSpace:i,origin:s,direction:a,colors:l,steps:c,smooth:h,num:p}=n.data;return{...tr(n),gradientType:t,near:e,far:r,isVector:o,isWorldSpace:i,origin:new _e.Vector3(...s),direction:a?new _e.Vector3(...a):new _e.Vector3(1,0,0),num:p,colors:l.map(u=>new _e.Vector4(u[0],u[1],u[2],u[3])),steps:c,smooth:h}}function hv(n){let{cnormal:t}=n.data;return{...tr(n),cnormal:new _e.Vector3(t[0],t[1],t[2])}}function pv(n,t){let{data:e}=n;return{...tr(n),scale:e.scale,move:e.move,fA:new _e.Vector2(...e.fA),fB:new _e.Vector2(...e.fB),size:new _e.Vector3(...e.size),distortion:new _e.Vector2(...e.distortion),colorA:We(e.colorA,t),colorB:We(e.colorB,t),colorC:We(e.colorC,t),colorD:We(e.colorD,t),noiseType:e.noiseType}}function uv(n,t){let{projection:e,axis:r,side:o,crop:i,size:s}=n.data,{image:a,wrapping:l,repeat:c,offset:h}=n.data.texture,p=new _e.Texture,u;if(typeof a=="string")u=t?.getImage(a);else{let d=new Image;d.src=Ni(a.data),d.onload=()=>{t?.onImageLoad&&t?.onImageLoad()},u=d}return p.image=u,p.repeat.set(c[0],c[1]),p.offset.set(h[0],h[1]),p.wrapS=p.wrapT=l,{...tr(n),texture:p,mat:new _e.Matrix3().setUvTransform(h[0],h[1],c[0],c[1],0,0,0),crop:i,projection:e,axis:["x","y","z"].indexOf(r),side:[2,0,1].indexOf(o),size:s}}function dv(n){let{data:t}=n;return{...tr(n),filmThickness:t.filmThickness,movement:t.movement,wavelengths:new _e.Vector3(...t.wavelengths),noiseStrength:t.noiseStrength,noiseScale:t.noiseScale,offset:new _e.Vector3(...t.offset)}}function mv(n,t){let{data:e}=n;return{...tr(n),thickness:e.thickness,ior:e.ior,roughness:e.roughness,transmissionSamplerMap:t.transmissionSamplerMap,transmissionDepthMap:t.transmissionDepthMap}}function fv(n,t){let e=new _e.Texture,{image:r}=n.data.texture,o;if(typeof r=="string")o=t?.getImage(r);else{let s=new Image;s.src=Ni(r.data),s.onload=()=>{t?.onImageLoad&&t?.onImageLoad()},o=s}e.image=o;let i=16777215;return{...tr(n),color:i,texture:e}}function gv(n){let{data:t}=n,e={...pd(n),intensity:t.intensity};if(t.displacementType==="noise")return{...e,offset:new _e.Vector3(...t.offset),scale:t.scale,movement:t.movement,noiseType:t.noiseType};{let r=new _e.Texture,o=new _e.Matrix3().setUvTransform(0,0,1,1,0,0,0);return{...e,texture:r,mat:o,crop:t.crop}}}function ud(n,t,e){if(e.type==="displace"&&(n==="intensity"||n==="visible")){let r=t.uniforms[`f${t.id}_intensity`];return r?(r.value=e.intensity*(e.visible?1:0),r):void 0}if(e.type!=="displace"&&(n==="alpha"||n==="visible")){let r=t.uniforms[`f${t.id}_alpha`];return r?(r.value=e.alpha*(e.visible?1:0),r):void 0}}var In=require("three"),Li;(t=>{function n(e){return new In.Color(e.x,e.y,e.z).getHex()}t.getHex=n})(Li||(Li={}));var dd;(t=>{function n(e){return new In.Vector4(e.r,e.g,e.b,e.a)}t.getThreeVector4=n})(dd||(dd={}));var md;(e=>{function n(r,o){r.setRGB(o.r,o.g,o.b)}e.setThreeColor=n;function t(r){return new In.Color(r.r,r.g,r.b).getHex()}e.getHex=t})(md||(md={}));function On(n,t){return typeof n=="string"?t.getMaterialOrDeletedPlaceholder(n):Jl(n,t)}function fd(n,t){return n.map(e=>On(e,t))}function Jl(n,t){let e=n.layers??mo.defaultTwoLayerData("phong").layers,r=yv(e),o;switch(r.category){case"basic":o=new lt;break;case"lambert":{o=new bi;break}case"toon":{o=new vi;break}case"physical":o=new wi;break;case"phong":default:{o=new St;break}}o.name=n.name??"Untitled Material";let i=o.userData.layers;xv(i);for(let s=e.length-1;s>=0;s--)bv(i,e[s],t);switch(r.category){case"basic":break;case"lambert":{let l=o,h=We(r.emissive,t);h instanceof va.Color?l.emissive.value=h:l.emissive.value.setHex(Li.getHex(h));break}case"toon":{let l=o,c=r;l.shininess.value=c.shininess;let h=We(c.specular,t);h instanceof va.Color?l.specular.value=h:l.specular.value.setHex(Li.getHex(h));break}case"physical":let s=o,a=r;s.metalness.value=a.metalness,s.roughness.value=a.roughness,s.reflectivity.value=a.reflectivity;break;case"phong":default:{let l=o,c=r;l.shininess.value=c.shininess;let h=We(c.specular,t);h instanceof va.Color?l.specular.value=h:l.specular.value.setHex(Li.getHex(h));break}}return o.penumbraSizeNode=t.penumbraSizeNode,i.blendColors(),i.blendAfterColors(),i.blendPositions(),o}function yv(n){for(let t of n)if(t.data.type==="light")return t.data;return{type:"light",category:"basic",visible:!0,alpha:1,mode:0}}function xv(n){for(let t of n.getLayers())n.removeLayer(t.id)}function bv(n,t,e){let r=hd(t,e);r.type==="transmission"&&(r.transmissionSamplerMap=e?.transmissionSamplerMap,r.transmissionDepthMap=e?.transmissionDepthMap);let o=n.addLayer(r);o.uuid=t.id;for(let i in t.data)ud(i,o,t.data)}var La=require("three");var Na=require("three");var ke=require("three");var Yl=require("three");var Sa=n=>"isEntity"in n,br=n=>"isAbstractMesh"in n,vr=n=>n!==null&&n.isBooleanMesh,gd=n=>n.objectType==="CombinedCamera";var Gr=n=>"objectHelper"in n;function vv(n,t){let e=!1;t.position&&(n.position.fromArray(t.position),e=!0),t.rotation&&(n.rotation.fromArray(t.rotation),e=!0),t.scale&&(e=!0,n.scale.fromArray(t.scale)),t.hiddenMatrix!==void 0&&"hiddenMatrix"in n&&(e=!0,n.hiddenMatrix.fromArray(t.hiddenMatrix??qr.identity)),e&&(n.updateMatrix(),vr(n.parent)&&br(n)&&n.invalidateDownstreamBooleanData(!0).recomputeBoolean()),t.position&&t.rotation&&t.scale&&t.hiddenMatrix!==void 0&&n.updateWorldMatrix(!1,!0),n.objectType==="CombinedCamera"&&(t.isUpVectorFlipped!==void 0&&(n.isUpVectorFlipped=t.isUpVectorFlipped),n.updateUp())}function Sv(n,t){vv(n,t),t.name!==void 0&&(n.name=t.name),t.visible!==void 0&&(n.isEntity?n.visibility=t.visible:n.visible=t.visible)}function yd(n,t,e){Sv(n,t),t.color!==void 0&&(n.color=We(t.color,e)),t.intensity!==void 0&&(n.intensity=t.intensity),t.shadows!==void 0&&!(n instanceof Yl.HemisphereLight)&&(n.castShadow=t.shadows),n.shadow&&!(n instanceof Yl.HemisphereLight)&&t.depth!==void 0&&(n.shadow.camera.far=t.depth,n.shadow.needsUpdate=!0),t.helper!==void 0&&Gr(n)&&(n.enableHelper=t.helper,n.gizmos.shadowmap.visible=t.helper)}function xd(n,t){n.shadow.camera.right=t/2,n.shadow.camera.left=-t/2,n.shadow.camera.top=t/2,n.shadow.camera.bottom=-t/2,n.shadow.needsUpdate=!0}var Ci=new ke.Box3,Sr=new ke.Vector3,wr=new ke.Vector3,Ti=new ke.Matrix4,vd=[new ke.Vector3(-1,1,1),new ke.Vector3(-1,-1,1),new ke.Vector3(1,-1,1),new ke.Vector3(1,1,1),new ke.Vector3(-1,1,-1),new ke.Vector3(-1,-1,-1),new ke.Vector3(1,-1,-1),new ke.Vector3(1,1,-1)],wv=[[0,3],[1,2],[5,6],[4,7],[0,1],[3,2],[7,6],[4,5],[0,4],[1,5],[2,6],[3,7]],Nv=[[0,2],[7,5],[4,1],[3,6],[4,3],[1,6]];function Lv(n,t,e=0,r=t.count){let o=1/0,i=1/0,s=1/0,a=-1/0,l=-1/0,c=-1/0;for(let h=e;h<r;h++){let p=t.getX(h),u=t.getY(h),d=t.getZ(h);p<o&&(o=p),u<i&&(i=u),d<s&&(s=d),p>a&&(a=p),u>l&&(l=u),d>c&&(c=d)}return n.min.set(o,i,s),n.max.set(a,l,c),n}var bd=(n,t,e,r)=>{if(br(n)){let o=n.geometry.userData.parameters,i=n.geometry.getAttribute("position");n.geometry.userData.type==="SubdivGeometry"?Sr.copy(n.originalGeometry.boundingSphere.center):i!==void 0&&(Lv(Ci,i,n.geometry.drawRange.start,n.geometry.drawRange.count<1/0?n.geometry.drawRange.count:i.count),Ci.getCenter(Sr)),n.forceComputeSize?Ci.getSize(wr).multiplyScalar(.5):wr.set(o.width,o.height,o.depth??0).multiplyScalar(.5)}else if(Gr(n)&&r===!0){let o=n.geometryHelper.getAttribute("position");Ci.setFromArray(o.array),Ci.getCenter(Sr),Ci.getSize(wr).multiplyScalar(.5)}else Sr.setScalar(0),wr.setScalar(0);Ti.copy(t).multiply(n.matrixWorld),wr.x===0&&wr.y===0&&wr.z===0?e.push(new ke.Vector3(Sr.x,Sr.y,Sr.z).applyMatrix4(Ti)):vd.forEach(o=>{e.push(o.clone().multiply(wr).add(Sr).applyMatrix4(Ti))})},An=class extends ke.Box3{constructor(){super(...arguments);this.matrix=new ke.Matrix4;this.vertices=[];this.faces=[];this.edges=[];this.centerEdges=[]}copy(e){return super.copy(e),this.matrix.copy(e.matrix),this.vertices=e.vertices.map(r=>r.clone()),this.faces=e.faces.map(r=>r.clone()),this.edges=e.edges.map(r=>r.clone()),this.centerEdges=e.centerEdges.map(r=>r.clone()),this}setFromObjectSize(e,r=!1){e.updateWorldMatrix(!1,r),this.makeEmpty(),this.matrix.copy(e.matrixWorld);let o=new ke.Matrix4().copy(e.matrixWorld).invert();return this.expandByObjectSize(e,o,r)}expandByObjectSize(e,r,o=!1){let i=[];return o===!0?e.traverseEntity(s=>{s.visible&&bd(s,r,i,e.enableHelper===!0)}):bd(e,r,i,e.enableHelper===!0),this.setFromPoints(i)}getCenter(e){return e=super.getCenter(e),e.applyMatrix4(this.matrix),e}getPositionToCenter(e){return e=super.getCenter(e),e.applyMatrix4(Ti.copy(this.matrix).setPosition(0,0,0)),e}computeVertices(){this.getSize(wr).multiplyScalar(.5),this.getCenter(Sr),Ti.copy(this.matrix).setPosition(Sr),this.vertices=vd.map(e=>e.clone().multiply(wr).applyMatrix4(Ti))}computeEdges(){this.vertices.length>0&&this.computeVertices(),this.edges=wv.map(([e,r])=>new ke.Line3(this.vertices[e],this.vertices[r])),this.centerEdges=this.edges.map(e=>e.getCenter(new ke.Vector3))}computeFaces(){this.vertices.length>0&&this.computeVertices(),this.faces=Nv.map(([e,r])=>this.vertices[e].clone().add(this.vertices[r]).multiplyScalar(.5))}};var Mi=require("three");function Dn(n){let t=[];for(let e in n){let r=n[e];delete r.metadata,t.push(r)}return t}function Cv(n){let t=[];for(let e in n)t.push(n[e]);return t}var wa=n=>class extends n{hasEntityChild(){return this.children.some(e=>Sa(e))}isDescendantOf(e){e instanceof Mi.Object3D&&(e=e.uuid);let r=this;for(;r.parent;){if(r.parent.uuid===e)return!0;r=r.parent}return!1}attach(e,r){this.updateWorldMatrix(!0,!1);let o=new Mi.Matrix4().copy(this.matrixWorld).invert();return e.parent!==null&&(e.parent.updateWorldMatrix(!0,!1),o.multiply(e.parent.matrixWorld)),Sa(e)?e.hiddenMatrix.premultiply(o):e.applyMatrix4(o),e.updateWorldMatrix(!1,!1),this.add(e),r!==void 0&&(this.children.pop(),this.children.splice(r,0,e)),this}copy(e,r=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.userData=JSON.parse(JSON.stringify(e.userData)),r===!0)for(let o=0;o<e.children.length;o++){let i=e.children[o];this.add(i.clone())}return this}toJSON(e){let r=e===void 0,o={object:{uuid:"",objectType:""}};e===void 0&&(e={geometries:{},materials:{},textures:{},images:{},interactionStates:{},nodes:{}},o.metadata={version:1.5,type:"Object",generator:"Object3D.toJSON"});let i={uuid:this.uuid,objectType:this.type};if(this.name!==""&&(i.name=this.name),i.matrix=this.matrix.toArray(),this.castShadow===!0&&(i.castShadow=!0),this.receiveShadow===!0&&(i.receiveShadow=!0),this.visible===!1&&(i.visible=!1),this.frustumCulled===!1&&(i.frustumCulled=!1),this.renderOrder!==0&&(i.renderOrder=this.renderOrder),i.layers=this.layers.mask,JSON.stringify(this.userData)!=="{}"&&(i.userData=this.userData),this.children.length>0){i.children=[];for(let s of this.children)(Sa(s)||s instanceof Mi.Light)&&i.children.push(s.toJSON(e).object)}if(r){let s=Dn(e.geometries),a=Dn(e.materials),l=Dn(e.textures),c=Dn(e.images),h=Dn(e.interactionStates),p=Cv(e.nodes);s.length>0&&(o.geometries=s),a.length>0&&(o.materials=a),l.length>0&&(o.textures=l),c.length>0&&(o.images=c),h.length>0&&(o.interactionStates=h),p.length>0&&(o.nodes=p)}return o.object=i,o}fromJSON(e){return this.uuid=e.uuid,e.name!==void 0&&(this.name=e.name),e.matrix!==void 0?(this.matrix.fromArray(e.matrix),e.matrixAutoUpdate!==void 0&&(this.matrixAutoUpdate=e.matrixAutoUpdate),this.matrixAutoUpdate&&this.matrix.decompose(this.position,this.quaternion,this.scale)):(e.position!==void 0&&this.position.fromArray(e.position),e.rotation!==void 0&&this.rotation.fromArray(e.rotation),e.quaternion!==void 0&&this.quaternion.fromArray(e.quaternion),e.scale!==void 0&&this.scale.fromArray(e.scale)),this.castShadow=e.castShadow!==void 0,this.receiveShadow=e.receiveShadow!==void 0,e.visible!==void 0&&(this.visible=e.visible),e.frustumCulled!==void 0&&(this.frustumCulled=e.frustumCulled),e.renderOrder!==void 0&&(this.renderOrder=e.renderOrder),e.layers!==void 0&&(this.layers.mask=e.layers),e.userData!==void 0&&(this.userData=e.userData),this}};var Wt=n=>"isEntity"in n,Sd=n=>"isAbstractMesh"in n,$t=n=>class extends wa(n){constructor(){super(...arguments);this.objectType="";this.isEntity=!0;this.raycastLock=!1;this.scaleLock=!1;this.hiddenMatrix=new Na.Matrix4;this._singleBBox=new An;this._recursiveBBox=new An;this.singleBBoxNeedsUpdate=!0;this.recursiveBBoxNeedsUpdate=!0;this.forceComputeSize=!1}set visibility(r){this.visible=r;for(let o of this.children)Wt(o)&&o.traverseEntity(i=>{Gr(i)&&i.visible&&(i.objectHelper.visible=r)})}get visibility(){return this.visible}get singleBBox(){return this.singleBBoxNeedsUpdate&&(this.singleBBoxNeedsUpdate=!1,this._singleBBox.setFromObjectSize(this,!1),this._singleBBox.computeVertices(),this._singleBBox.computeEdges(),this._singleBBox.computeFaces()),this._singleBBox}get recursiveBBox(){return this.recursiveBBoxNeedsUpdate&&(this.recursiveBBoxNeedsUpdate=!1,this._recursiveBBox.setFromObjectSize(this,!0),this._recursiveBBox.computeVertices(),this._recursiveBBox.computeEdges(),this._recursiveBBox.computeFaces()),this._recursiveBBox}resetBBoxNeedsUpdate(){this.singleBBoxNeedsUpdate=!0,this.recursiveBBoxNeedsUpdate=!0,this.traverseAncestors(r=>{Wt(r)&&(r.singleBBoxNeedsUpdate=!0,r.recursiveBBoxNeedsUpdate=!0)}),this.traverseEntity(r=>{r.singleBBoxNeedsUpdate=!0,r.recursiveBBoxNeedsUpdate=!0})}traverseEntity(r){r(this);for(let o of this.children)Wt(o)&&o.traverseEntity(r)}updateMatrixWorld(r){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||r)&&(this.parent===null?this.matrixWorld.multiplyMatrices(this.hiddenMatrix,this.matrix):(this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,r=!0);for(let o of this.children)o.updateMatrixWorld(r)}updateWorldMatrix(r,o){let i=this.parent;if(r&&i!==null&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.parent===null?this.matrixWorld.multiplyMatrices(this.hiddenMatrix,this.matrix):(this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.hiddenMatrix),this.matrixWorld.multiplyMatrices(this.matrixWorld,this.matrix)),o)for(let s of this.children)s.updateWorldMatrix(!1,!0)}shallowClone(r){return new this.constructor().shallowCopy(this,r)}shallowCopy(r,o=!0){if(super.copy(r,!1),this.raycastLock=r.raycastLock,this.scaleLock=r.scaleLock,this.hiddenMatrix.copy(r.hiddenMatrix),o===!0)for(let i of r.children)Wt(i)&&this.add(i.shallowClone());return this}clone(r){return new this.constructor().copy(this,r)}copy(r,o=!0){if(super.copy(r,!1),this.raycastLock=r.raycastLock,this.scaleLock=r.scaleLock,this.hiddenMatrix.copy(r.hiddenMatrix),o===!0)for(let i of r.children)Wt(i)&&this.add(i.clone());return this}keepChildrenMatrixWorld(){let r=new Na.Matrix4,o=this.matrixWorld.clone();this.updateWorldMatrix(!1,!1),r.copy(this.matrixWorld).invert(),r.multiply(o);for(let i of this.children)Wt(i)&&i.hiddenMatrix.premultiply(r)}toJSON(r){let o=super.toJSON(r),i=o.object;return this.raycastLock===!0&&(i.raycastLock=!0),this.scaleLock===!0&&(i.scaleLock=!0),i.hiddenMatrix=this.hiddenMatrix.toArray(),o}fromJSON(r){return super.fromJSON(r),r.raycastLock!==void 0&&(this.raycastLock=r.raycastLock),r.scaleLock!==void 0&&(this.scaleLock=r.scaleLock),this.hiddenMatrix.fromArray(r.hiddenMatrix),this}fromObject3D(r){let o=r.children;return r.children=[],Object.assign(r,{raycastLock:!1,scaleLock:!1,hiddenMatrix:new Na.Matrix4}),this.copy(r),r.children=o,this}toObjectTransformState(r=[]){this.updateWorldMatrix(!0,!1);let o={position:this.position.toArray(),rotation:[this.rotation.x,this.rotation.y,this.rotation.z],scale:this.scale.toArray(),hiddenMatrix:this.hiddenMatrix.toArray()};return qo(o,r)}fromObjectTransformState(r){return r.position&&this.position.fromArray(r.position),r.rotation&&this.rotation.fromArray(r.rotation),r.scale&&this.scale.fromArray(r.scale),r.hiddenMatrix&&this.hiddenMatrix.fromArray(r.hiddenMatrix),this.updateMatrix(),this}toState(r=[]){let o={name:this.name,visible:this.visible,raycastLock:this.raycastLock,...this.toObjectTransformState(r)};return qo(o,r)}fromState(r,o){return r.name&&(this.name=r.name),r.raycastLock!==void 0&&(this.raycastLock=r.raycastLock),r.type!=="OrthographicCamera"&&r.type!=="PerspectiveCamera"&&(this.matrixAutoUpdate=!1),r.visible!==void 0&&(this.visibility=r.visible),this.fromObjectTransformState(r),this}};var Qe=require("three");var So=class extends Qe.Object3D{constructor(e,r={}){super();this.object=e;let o=e.recursiveBBox.getSize(new Qe.Vector3),i=.1;this.parameters=vs.defaultData(o.toArray(),i),lo(this.parameters,r),this.update(),this.setHideBase(this.parameters.hideBase)}refreshMaterial(){if("material"in this.object)for(let e of this.children)e.material=this.object.material}setHideBase(e){if("material"in this.object){if(Array.isArray(this.object.material)){if(this.children.length>0){for(let r of this.object.material)r.visible=!0;if(e){let r=this.object.material.map(o=>o.clone());for(let o of this.children)o.material=r}else for(let r of this.children)r.material=this.object.material}for(let r of this.object.material)r.visible=!e}else{if(this.children.length>0)if(this.object.material.visible=!0,e){let r=this.object.material.clone();for(let o of this.children)o.material=r}else for(let r of this.children)r.material=this.object.material;this.object.material.visible=!e}this.parameters.hideBase=e}}update(){switch(this._updateCount(),this.parameters.type){case"radial":this._updateRadial(this.parameters);break;case"linear":this._updateLinear(this.parameters);break;case"grid":this._updateGrid(this.parameters)}this.children.forEach(e=>e.updateMatrix())}_updateCount(){let e=this.parameters.type==="grid"?this.parameters.grid.count[0]*this.parameters.grid.count[1]*this.parameters.grid.count[2]:this.parameters.count;if(this.children.length!==e)if(this.children.length<e)for(let r=0,o=e-this.children.length;r<o;++r){let i=this.object.shallowClone(!1);i.visible=!0,this.add(i),this.parameters.hideBase&&this.setHideBase(!0)}else for(let r=0,o=this.children.length-e;r<o;++r)this.remove(this.children[0])}_updateRadial(e){let r=e.radial,o=r.start*Qe.MathUtils.DEG2RAD,i=r.end*Qe.MathUtils.DEG2RAD,s=o-i,a=new Qe.Euler(r.rotation[0]*Qe.MathUtils.DEG2RAD,r.rotation[1]*Qe.MathUtils.DEG2RAD,r.rotation[2]*Qe.MathUtils.DEG2RAD),l;switch(r.axis){case"z":l=new Qe.Vector3(0,0,1);break;case"y":l=new Qe.Vector3(0,1,0);break;default:case"x":l=new Qe.Vector3(1,0,0);break}for(let[c,h]of this.children.entries()){h.hiddenMatrix.identity(),h.scale.x=r.scale[0],h.scale.y=r.scale[1],h.scale.z=r.scale[2],h.position.setScalar(0);let p=s/e.count*c-o;switch(r.axis){case"x":h.rotation.set(0,p,0);break;case"y":h.rotation.set(0,0,p);break;case"z":h.rotation.set(p,0,0);break}h.translateOnAxis(l,r.radius),h.position.x+=r.position[0],h.position.y+=r.position[1],h.position.z+=r.position[2],r.alignment===!0?(h.rotation.x+=a.x,h.rotation.y+=a.y,h.rotation.z+=a.z):h.rotation.copy(a)}}_updateLinear(e){if(e.type!=="linear")throw new Error;let r=e.linear,o=new Qe.Euler(r.rotation[0]*Qe.MathUtils.DEG2RAD,r.rotation[1]*Qe.MathUtils.DEG2RAD,r.rotation[2]*Qe.MathUtils.DEG2RAD);for(let[i,s]of this.children.entries())s.hiddenMatrix.identity(),s.scale.x=1+(r.scale[0]-1)*i,s.scale.y=1+(r.scale[1]-1)*i,s.scale.z=1+(r.scale[2]-1)*i,s.rotation.x=o.x*i,s.rotation.y=o.y*i,s.rotation.z=o.z*i,s.position.x=r.position[0]*i,s.position.y=r.position[1]*i,s.position.z=r.position[2]*i}_updateGrid(e){let r=0,o=e.grid;if(o.useCenter===!0){let i={x:o.count[0]%2===0?2:1,y:o.count[1]%2===0?2:1,z:o.count[2]%2===0?2:1},s=new Qe.Vector3(o.size[0]*(o.count[0]-i.x)*.5,o.size[1]*(o.count[1]-i.y)*.5,o.size[2]*(o.count[2]-i.z)*.5);for(let a=0;a<o.count[0];a++)for(let l=0;l<o.count[1];l++)for(let c=0;c<o.count[2];c++){let h=this.children[r++];h.hiddenMatrix.identity(),h.scale.setScalar(1),h.rotation.set(0,0,0),h.position.x=o.size[0]*a-s.x,h.position.y=o.size[1]*l-s.y,h.position.z=o.size[2]*c-s.z}}else for(let i=0;i<o.count[0];i++)for(let s=0;s<o.count[1];s++)for(let a=0;a<o.count[2];a++){let l=this.children[r++];l.hiddenMatrix.identity(),l.scale.setScalar(1),l.rotation.set(0,0,0),l.position.x=o.size[0]*i,l.position.y=-o.size[1]*s,l.position.z=-o.size[2]*a}}fromJSON(e){return this}toJSON(){return{}}fromClonerState(e){return e.hideBase!==void 0&&this.setHideBase(e.hideBase),lo(this.parameters,e),this.update(),this}};var Ze=class extends $t(La.Mesh){constructor(e,r){super(e,r);this.isAbstractMesh=!0;this.isBooleanMesh=!1;this.booleanMeshSetAddress=-1;this.booleanWasTransformed=!1;this.booleanMatrixInvOld=new La.Matrix4;this.booleanExclude=null;Array.isArray(r)&&(this.selectedMaterial=0,e.groups.length===0&&e.addGroup(0,e.getAttribute("position").count,0))}get cloner(){return this._cloner}set cloner(e){this._cloner&&this.remove(this._cloner),e&&this.add(e),this._cloner=e}getSelectedMaterial(e){return Array.isArray(this.material)?(this.selectedMaterial===void 0&&(this.selectedMaterial=e??0),this.material[e??this.selectedMaterial]):this.material}setSelectedMaterial(e,r){Array.isArray(this.material)?(this.selectedMaterial===void 0&&(this.selectedMaterial=r??0),r=r??this.selectedMaterial,this.material[r].dispose(),this.material[r]=e):(this.material.dispose(),this.material=e)}updateGeometry(e){let r=this.geometry,o=Kl[r.userData.type],i=this.objectType==="NonParametric"?Object.assign({},r.userData,{geometry:r}):r.userData,s=o.build(o.normalizeInputs(e,i)),a=r.uuid;if(this.geometry.dispose(),this.geometry=s,this.geometry.uuid=a,this.geometry.computeBoundingSphere(),this.cloner)for(let l of this.cloner.children)l.geometry=this.geometry}resizeGeometry(e,r,o){oa.resizeGeometry(this.geometry,{width:e,height:r,depth:o})}shallowClone(e){return new this.constructor(this.geometry,this.material).shallowCopy(this,e)}clone(e){let r=this.objectType==="NonParametric"?Object.assign({},this.geometry.userData,{geometry:this.geometry.clone()}):this.geometry.userData,o=Bn(r),i=Array.isArray(this.material)?this.material.map(s=>s.clone()):this.material.clone();return new this.constructor(o,i).copy(this,e)}copy(e,r=!0){return super.copy(e,r),e.cloner&&(this.cloner=new So(e,e.cloner.parameters),this.add(this.cloner)),this}setFromClonerState(e){e===null?this.cloner=void 0:(this.cloner===void 0&&(this.cloner=new So(this)),this.cloner.fromClonerState(e))}fromState(e,r){return super.fromState(e),e.type==="Mesh"&&(this.setFromClonerState(e.cloner),this.castShadow=e.castShadow??!0,this.receiveShadow=e.receiveShadow??!0,this.booleanExclude=e.booleanExclude??null),this}freeBooleanPointer(){this.booleanMeshSetAddress!==-1&&(rr.freeMeshSet(this.booleanMeshSetAddress),this.booleanMeshSetAddress=-1)}invalidateDownstreamBooleanData(e=!1){return e?this.booleanWasTransformed=!0:this.freeBooleanPointer(),vr(this.parent)?this.parent.invalidateDownstreamBooleanData():this}invalidateUpstreamBooleanData(){this.freeBooleanPointer();for(let e of this.children)br(e)&&(e.freeBooleanPointer(),vr(e)&&e.invalidateUpstreamBooleanData())}};var Tv=new Nr.Vector3(0,0,1),wd=new Nr.Vector3,Nd=new Nr.Vector3,Ld=new Nr.Matrix3,to=class extends Ze{constructor(e=nt.create({}),r=new lt({side:Nr.DoubleSide})){super(e,r);this.recursiveSelection=!1;this.objectType="VectorObject";this.eventDispatcher=new Nr.EventDispatcher;this._onShapeUpdate=()=>{this.updateGeometry({}),this.geometry.computeBoundingSphere(),this.geometry.computeBoundingBox()};this.castShadow=!0,this.receiveShadow=!0,this.forceComputeSize=!0,this.shape=e.userData.shape,this.shape.eventDispatcher?.addEventListener("update",this._onShapeUpdate)}toJSON(e){let r=super.toJSON(e);return r.object.objectType="VectorObject",r}fromState(e){return super.fromState(e),this.shape.update(),this}setHelperVisibility(){}updateGeometry(e){if(super.updateGeometry(e),"userData"in this.geometry){let r=this.geometry.userData.parameters;this.eventDispatcher.dispatchEvent({type:"geometryUpdate",parameters:r})}}setShape(e){this.shape&&this.shape.eventDispatcher?.removeEventListener("update",this._onShapeUpdate),this.shape=e,this.shape.eventDispatcher?.addEventListener("update",this._onShapeUpdate)}updateWorldMatrix(e,r){super.updateWorldMatrix(e,r),Ld.getNormalMatrix(this.matrixWorld),wd.copy(Tv).applyMatrix3(Ld).normalize(),Nd.setFromMatrixPosition(this.matrixWorld),this.shape.plane.setFromNormalAndCoplanarPoint(wd,Nd)}clone(e){let r=this.shape.clone(),o=this.material.clone(),i=this.geometry.userData,s=nt.create(Object.assign({},i,{shape:r})),a=new to(s,o).copy(this,e);return a.shape=r,r.update(),a}raycast(e,r){Ze.prototype.raycast.call(this,e,r)}};function Ca(n,t){return Mv(n)}function Mv(n){let t={parameters:n,type:n.type};if(n.type==="VectorGeometry"){let r=Ne.createFromState(n.shape,n.width,n.height);t.shape=r}else n.type==="NonParametricGeometry"&&(n.data.groups&&n.data.groups.forEach(r=>r.materialIndex=Math.max(r.materialIndex??0,0)),t.geometry=new Cd.BufferGeometryLoader().parse(n));let e;try{e=Bn(t)}catch(r){console.error(r)}if(!e){let r=Ne.createFromState(Zo.defaultData(),100,100);t.shape=r,e=Bn(t)}return e}var de;ia.then(n=>{de=n});var Td=new Float32Array([10,10,0,-10,10,0,-10,-10,0,10,-10,0]),Md=new Uint32Array([0,1,2,3]),Pd=new Uint8Array([4]),Jt=class{static build(n,t,e,r,o){let i,s,a,l=n?.phongAngle??t?.phongAngle??35;if(r===!1&&(l=-1),n.positionWASM!==void 0){e&&e!==0&&(de.free_bvh(e),de.free_subdivision_surface(e));try{i=Jt.allocate(n,o)}catch(c){console.error(c,n),i=Jt.allocate({positionWASM:Td,indexWASM:Md,verticesPerFaceWASM:Pd},o)}de.set_destination_refinement_level(i,0),s=Jt.buildLevel(i,!0,l)}else i=e,n.phongAngle!==void 0&&(s=Jt.buildLevel(i,!0,l));return n.subdivisions!==void 0&&(de.set_destination_refinement_level(i,n.subdivisions),n.subdivisions>0?a=Jt.buildLevel(i,!1,l):a=null),{subdivPointer:i,originalGeometry:s,subdividedGeometry:a}}static primitiveToQuads(n,t){n.widthSegments>16&&(n.widthSegments=16),n.heightSegments>16&&(n.heightSegments=16),n.depthSegments>16&&(n.depthSegments=16),n.radialSegments>16&&(n.radialSegments=16),n.type==="DodecahedronGeometry"&&(n.detail=0);let e=n.shape!==void 0?t.geometry:Ca(n),r,o,i,s;return{positions:r,triIndices:s}=ec(e.getAttribute("position"),e.getIndex()),{indices:o,verticesPerFace:i}=tc(r,s,e),{positions:r,indices:o,verticesPerFace:i}}static allocate(n,t){let e,r,o,i=[],s=[];n.positionWASM&&n.positionWASM.length>0?(e=n.positionWASM,r=n.indexWASM,o=n.verticesPerFaceWASM):(e=Td,r=Md,o=Pd);let a=e.length,l=r.length,c=o.length,h=e.length+i.length+s.length,p=r.length+o.length,u=h*Float32Array.BYTES_PER_ELEMENT+p*Uint32Array.BYTES_PER_ELEMENT,d=h*Float32Array.BYTES_PER_ELEMENT,m=p*Uint32Array.BYTES_PER_ELEMENT,g=de._malloc(u),x=new Float32Array(de.HEAPF32.buffer,g,h),y=new Uint32Array(de.HEAPU32.buffer,g+d,p);x.set(e,0),x.set(i,e.length),x.set(s,e.length+i.length),y.set(r,0),y.set(o,r.length);let b;n?.scaleBaked?.some(S=>S!==1)&&(b=new $e.Matrix4().makeScale(...n.scaleBaked)),t&&(b?b.premultiply(t):b=t);let C=b?de.alloc_subdivision_surface2(g,a,g+d,l,g+d+r.length*Uint32Array.BYTES_PER_ELEMENT,c,b.elements):de.alloc_subdivision_surface(g,a,g+d,l,g+d+r.length*Uint32Array.BYTES_PER_ELEMENT,c);return de._free(g),C}static buildLevel(n,t,e,r,o){let i=o?de.get_mesh_data2(n,t?de.Level.CONTROL:de.Level.REFINED,e,o.elements):de.get_mesh_data(n,t?de.Level.CONTROL:de.Level.REFINED,e),s=8,a=de.HEAPU32.subarray(i>>2,(i>>2)+s),l=a.subarray(4,4+4),c=0,h=de.HEAPU32[a[c]>>2],p=de.HEAPF32.subarray(h>>2,(h>>2)+l[c]);c++;let u=de.HEAPU32[a[c]>>2],d=de.HEAPF32.subarray(u>>2,(u>>2)+l[c]);c++;let m=de.HEAPU32[a[c]>>2],g=de.HEAPU32.subarray(m>>2,(m>>2)+l[c]);c++;let x=de.HEAPU32[a[c]>>2],y=de.HEAPU32.subarray(x>>2,(x>>2)+l[c]);if(c++,r===void 0){let b=new $e.BufferGeometry;if(b.setIndex(new $e.Uint32BufferAttribute(y,1)),b.setAttribute("position",new $e.Float32BufferAttribute(p,3)),b.setAttribute("normal",new $e.Float32BufferAttribute(d,3)),t){b.setAttribute("faceMap",new $e.Uint32BufferAttribute(g,1));let C=new Float32Array(d.length/3*4).fill(0);b.setAttribute("color",new $e.BufferAttribute(C,4))}return de.free_mesh_data(i),b.userData.type="SubdivGeometry",b}r.getAttribute("position").copyArray(p),r.getAttribute("normal").copyArray(d),r.attributes.position.needsUpdate=!0,r.attributes.normal.needsUpdate=!0,de.free_mesh_data(i)}static buildControlCageWireframe(n,t,e){let r=de.get_wireframe_data_for_base_level(n),o=4,i=de.HEAPU32.subarray(r>>2,(r>>2)+o),s=i.subarray(2,2+2),a=0,l=de.HEAPU32[i[a]>>2],c=de.HEAPF32.subarray(l>>2,(l>>2)+s[a]);a++;let h=de.HEAPU32[i[a]>>2],p=de.HEAPU32.subarray(h>>2,(h>>2)+s[a]);if(t===void 0){let u=new $e.BufferGeometry;u.setAttribute("position",new $e.Float32BufferAttribute(c,3));let d=new Float32Array(c.length);for(let m=0,g=c.length;m<g;)d[m++]=e.r,d[m++]=e.g,d[m++]=e.b;return u.setAttribute("color",new $e.BufferAttribute(d,3)),u.setIndex(new $e.Uint32BufferAttribute(p,1)),de.free_wireframe_data_for_base_level(r),u}t.getAttribute("position").copyArray(c),t.attributes.position.needsUpdate=!0,de.free_wireframe_data_for_base_level(r)}static updateCollabMesh(n,t,e){t||de.set_destination_refinement_level(n,1);let r=e?de.get_topological_data2(n,t?de.Level.CONTROL:de.Level.REFINED,e.elements):de.get_topological_data(n,t?de.Level.CONTROL:de.Level.REFINED),o=6,i=de.HEAPU32.subarray(r>>2,(r>>2)+o),s=i.subarray(3,3+3),a=0,l=de.HEAPU32[i[a]>>2],c=new Float32Array(de.HEAPF32.subarray(l>>2,(l>>2)+s[a]));a++;let h=de.HEAPU32[i[a]>>2],p=new Uint32Array(de.HEAPU32.subarray(h>>2,(h>>2)+s[a]));a++;let u=de.HEAPU32[i[a]>>2],d=new Uint8Array(de.HEAPU32.subarray(u>>2,(u>>2)+s[a]));return de.free_topological_data(r),{positions:c,indices:p,verticesPerFace:d}}};var Id=["getX","getY","getZ"];function ec(n,t){let e={},r=t?t.count:n.count,o=0,i=[],s=[],a=1e4;for(let c=0;c<r;c++){let h=t?t.getX(c):c,p="";for(let u=0;u<3;u++)p+=`${~~(n[Id[u]](h)*a)},`;if(p in e)i.push(e[p]);else{for(let u=0;u<3;u++)s.push(n[Id[u]](h));e[p]=o,i.push(o),o++}}let l=[];for(let c=0;c<i.length;c+=3)i[c]===i[c+1]||i[c]===i[c+2]||i[c+1]===i[c+2]||l.push(i[c],i[c+1],i[c+2]);return{positions:s,triIndices:l}}var Ta=new $e.Vector3,Xl=new $e.Vector3,Ql=new $e.Vector3,Zl=new $e.Vector3;function tc(n,t,e){let r=[],o=[];if(e.userData.shape!==void 0&&e.userData.parameters.depth===0){let i=e.userData.shape.extractShapePointsToFlatArray([]),s=0;for(let l=0;l<i.length;l+=2)s+=(i[l]-i[(l===0?i.length:l)-2])*(i[l+1]+i[(l===0?i.length:l)-1]);n.length=0;let a=0;if(s<0)for(let l=0;l<i.length;l+=2)n.push(i[l],i[l+1],0),r.push(a++);else for(let l=i.length-2;l>=0;l-=2)n.push(i[l],i[l+1],0),r.push(a++);return o.push(a),{indices:r,verticesPerFace:o}}for(let i=0,s=e.capStartIndex??t.length;i<s;)if(t[i+1]===t[i+3]&&t[i+2]===t[i+5]||t[i+0]===t[i+3]&&t[i+2]===t[i+4]){Ta.set(n[t[i]*3],n[t[i]*3+1],n[t[i]*3+2]),Xl.set(n[t[i+1]*3],n[t[i+1]*3+1],n[t[i+1]*3+2]),Ql.set(n[t[i+4]*3],n[t[i+4]*3+1],n[t[i+4]*3+2]),Zl.set(n[t[i+5]*3],n[t[i+5]*3+1],n[t[i+5]*3+2]),Xl.sub(Ta).normalize(),Ql.sub(Ta).normalize(),Zl.sub(Ta).normalize();let a=Xl.cross(Ql).dot(Zl);Math.abs(a)>.005?(r.push(t[i],t[i+1],t[i+2]),o.push(3),i+=3):(r.push(t[i],t[i+1],t[i+4],t[i+5]),o.push(4),i+=6)}else r.push(t[i],t[i+1],t[i+2]),o.push(3),i+=3;if(e.capStartIndex!==void 0){let i=[],s=[],a=0;for(let l=0,c=0;l<n.length;l+=3,c++)n[l+2]===0&&(i.push(c),a++),n[l+2]===e.userData.parameters.depth&&s.push(c);if(e.userData.parameters.extrudeBevelSize===0){let l=s[0];s[0]=s[1],s[1]=l}i.reverse(),r.push(...i,...s),o.push(a,a)}return{indices:r,verticesPerFace:o}}var rr={};Va(rr,{calcBoolean:()=>Av,calcBooleanTopological:()=>Ov,freeMeshSet:()=>Ev,getMeshSet:()=>Dv,transformMeshSet:()=>Bv});var Pv,Od=new Promise(n=>{Pv=n});var En=require("three");var be,Pi;Od.then(n=>be=n);function Iv(n,t){let e,{positions:r,triIndices:o}=ec(n.getAttribute("position"),n.getIndex()),i;if(t){let{indices:s,verticesPerFace:a}=tc(r,o,n);i=a.length,e=[];for(let l=0,c=0;l<i;l++){e.push(a[l]);for(let h=0;h<a[l];h++)e.push(s[c++])}}else{let s=o.length;e=Array(s+s/3),i=0;for(let a=0,l=0;l<e.length;)e[l++]=3,i++,e[l++]=o[a++],e[l++]=o[a++],e[l++]=o[a++]}return{positions:r,faceIndices:e,nFaces:i}}function Ad(n){let t=n.length,e=t*Uint32Array.BYTES_PER_ELEMENT,r=t*Float32Array.BYTES_PER_ELEMENT,o=Number.isInteger(n[0])?e:r,i=be._malloc(o);return(Number.isInteger(n[0])?new Uint32Array(be.HEAPU32.buffer,i,t):new Float32Array(be.HEAPF32.buffer,i,t)).set(n,0),i}function Dd(n){switch(n){case 0:return be.OP.UNION;case 1:return be.OP.INTERSECTION;case 2:return be.OP.A_MINUS_B;case 3:return be.OP.B_MINUS_A;case 4:return be.OP.SYMMETRIC_DIFFERENCE;case 5:return be.OP.ALL;default:throw new Error("Unknown boolean operation "+n)}}function Ov(n,t){Pi===void 0&&(Pi=be.init_csg());let e=Ad(n),r=be.csg_calc_topological(Pi,e,n.length,Dd(t));be._free(e);let o=6,i=be.HEAPU32.subarray(r>>2,(r>>2)+o),s=i.subarray(3,3+3),a=0,l=be.HEAPU32[i[a]>>2],c=new Float32Array(be.HEAPF32.subarray(l>>2,(l>>2)+s[a]));a++;let h=be.HEAPU32[i[a]>>2],p=new Uint32Array(be.HEAPU32.subarray(h>>2,(h>>2)+s[a]));a++;let u=be.HEAPU32[i[a]>>2],d=new Uint8Array(be.HEAPU32.subarray(u>>2,(u>>2)+s[a]));return be.free_mesh_data(r),{positions:c,indices:p,verticesPerFace:d}}function Av(n,t,e,r){Pi===void 0&&(Pi=be.init_csg());let o=Ad(n),i=be.csg_calc(Pi,o,n.length,r,Dd(t));be._free(o);let s=5,a=be.HEAPU32.subarray(i>>2,(i>>2)+s),l=a.subarray(2,2+3),c=0,h=be.HEAPU32[a[c]>>2],p=be.HEAPF32.subarray(h>>2,(h>>2)+l[c]);c++;let u=be.HEAPU32[a[c]>>2],d=be.HEAPF32.subarray(u>>2,(u>>2)+l[c]);c++;let m=l[c];e.setAttribute("position",new En.Float32BufferAttribute(p,3)),e.setAttribute("normal",new En.Float32BufferAttribute(d,3));let g=be.HEAPF32.subarray((i>>2)+5,(i>>2)+5+6);return e.boundingSphere===null&&(e.boundingSphere=new En.Sphere),e.boundingSphere.center.set(g[0],g[1],g[2]),e.boundingSphere.radius=(g[3]**2+g[4]**2+g[5]**2)**.5,e.userData.parameters={width:g[3]*2,height:g[4]*2,depth:g[5]*2},be.free_mesh_data(i),m}function Dv(n,t){if(be===void 0)return-1;let e,r,o;if(t&&n.userData.positions!==void 0){let g=n.userData;o=g.verticesPerFace.length,e=g.positions,r=Array(g.verticesPerFace.reduce((x,y)=>x+y,0)+o);for(let x=0,y=0,b=0;x<g.verticesPerFace.length;x++){r[b++]=g.verticesPerFace[x];for(let C=0;C<g.verticesPerFace[x];C++)r[b++]=g.indices[y++]}}else({positions:e,faceIndices:r,nFaces:o}=Iv(n,t));let i=e.length,s=r.length,a=e.length,l=r.length,c=a*Float32Array.BYTES_PER_ELEMENT+l*Uint32Array.BYTES_PER_ELEMENT,h=a*Float32Array.BYTES_PER_ELEMENT,p=l*Uint32Array.BYTES_PER_ELEMENT,u=be._malloc(c),d=new Float32Array(be.HEAPF32.buffer,u,a),m=new Uint32Array(be.HEAPU32.buffer,u+h,l);return d.set(e,0),m.set(r,0),be.get_csg_mesh(u,i,u+h,s,o)}function Bv(n,t){be.transform_csg_mesh(n,t.elements)}function Ev(n){be.free_csg_mesh(n)}var Kl={ConeGeometry:iu,CubeGeometry:nu,CylinderGeometry:ru,DodecahedronGeometry:au,EllipseGeometry:Iu,HelixGeometry:Bu,IcosahedronGeometry:_u,LatheGeometry:Gu,NonParametricGeometry:zu,PolygonGeometry:Ru,PyramidGeometry:Fu,RectangleGeometry:ta,SphereGeometry:Uu,PlaneGeometry:ku,BackdropGeometry:Hu,StarGeometry:qu,TextFrameGeometry:ra,TorusGeometry:$u,TorusKnotGeometry:Yu,TriangleGeometry:Ku,VectorGeometry:nt},Bn=n=>Kl[n.type].create(n);var _n=require("three");var Bd=new _n.Matrix4;var Ma=class extends Ze{constructor(e=new _n.BufferGeometry,r=new St){super(e,r);this.booleanOp=2;this.phongAngle=35;this.meshSetAddresses=[];this.needsTransformForDownstream=!1;this.isBooleanMesh=!0,this.castShadow=!0,this.receiveShadow=!0,this.geometry.userData.parameters={width:0,height:0,depth:0},this.onAfterRender=this.recomputeBoolean.bind(this)}reInit(){this.isBooleanMesh=!0,this.meshSetAddresses=[],this.needsTransformForDownstream=!1,this.geometry.userData.parameters={width:0,height:0,depth:0},this.onAfterRender=this.recomputeBoolean.bind(this)}recomputeBoolean(e){if(this.booleanMeshSetAddress!==-1)return;for(let o=0;o<this.children.length;o++){let i=this.children[o];vr(i)&&i.recomputeBoolean(e===!0)}this.meshSetAddresses=[];for(let o=0;o<this.children.length;o++){let i=this.children[o];if(Sd(i)&&i.booleanExclude===!1&&i.geometry.attributes.position?.count>0&&i.geometry.drawRange.count>0){if(i.booleanMeshSetAddress===-1){if(i.booleanMeshSetAddress=rr.getMeshSet(i.geometry,e===!0),i.booleanMeshSetAddress===-1)return;rr.transformMeshSet(i.booleanMeshSetAddress,i.matrix),i.booleanMatrixInvOld.copy(i.matrix).invert(),i.booleanWasTransformed=!1}else vr(i)&&i.needsTransformForDownstream===!0?(rr.transformMeshSet(i.booleanMeshSetAddress,i.matrix),i.needsTransformForDownstream=!1):i.booleanWasTransformed===!0&&(Bd.multiplyMatrices(i.matrix,i.booleanMatrixInvOld),rr.transformMeshSet(i.booleanMeshSetAddress,Bd),i.booleanMatrixInvOld.copy(i.matrix).invert(),i.booleanWasTransformed=!1);this.meshSetAddresses.push(i.booleanMeshSetAddress)}}if(this.meshSetAddresses.length===0){this.geometry.setDrawRange(0,0);return}if(e===!0)return rr.calcBooleanTopological(this.meshSetAddresses,this.booleanOp);let r=this.geometry;r.dispose(),this.geometry=new _n.BufferGeometry,this.geometry.userData=r.userData,this.geometry.boundingSphere=r.boundingSphere;try{this.booleanMeshSetAddress=rr.calcBoolean(this.meshSetAddresses,this.booleanOp,this.geometry,this.phongAngle)}catch(o){this.booleanMeshSetAddress=0,console.error(o)}this.booleanMatrixInvOld.copy(this.matrix).invert(),this.needsTransformForDownstream=!0}toJSON(e){let r=super.toJSON(e);return r.object.objectType="Mesh3D",r}updateGeometry(e){let r=e.parameters;r.operation!==void 0&&(this.booleanOp=r.operation),r.phongAngle!==void 0&&(this.phongAngle=r.phongAngle),this.invalidateDownstreamBooleanData().recomputeBoolean()}};var Ge=require("three");var Ed=require("three"),Lr=n=>{var t;return t=class extends n{constructor(){super(...arguments);this.isObjectHelper=!0}},t.geometryHelper=new Ed.BoxBufferGeometry(30,30,30),t};var ct=require("three");var ft=require("three"),Pa=new ft.Ray,rc=new ft.Sphere,_d=new ft.Matrix4,Cr=(n,t,e,r,o=!1)=>{let i=t,s=n.matrixWorld;if(i.boundingSphere===null&&i.computeBoundingSphere(),rc.copy(i.boundingSphere),rc.applyMatrix4(s),e.ray.intersectsSphere(rc)===!1||(_d.copy(s).invert(),Pa.copy(e.ray).applyMatrix4(_d),i.boundingBox!==null&&Pa.intersectsBox(i.boundingBox)===!1))return;let a,l,c,h,p=i.index,u=i.attributes.position,d=i.drawRange,m,g;if(o===!1){let y=Math.max(0,d.start),b=Math.min(p.count,d.start+d.count);for(m=y,g=b;m<g;m+=3)if(l=p.getX(m),c=p.getX(m+1),h=p.getX(m+2),a=x(n,e,Pa,u,l,c,h),a){a.faceIndex=Math.floor(m/3),r.push(a);return}}else{let b=i.attributes.position,C=new ft.Vector3,S=new ft.Vector3,v=new ft.Vector3,z=new ft.Vector3,w=2,D=1/((n.scale.x+n.scale.y+n.scale.z)/3),L=D*D,P=Math.max(0,d.start),M=Math.min(b.count,d.start+d.count);for(let I=P,k=M-1;I<k;I+=w){if(C.fromBufferAttribute(b,I),S.fromBufferAttribute(b,I+1),Pa.distanceSqToSegment(C,S,z,v)>L)continue;z.applyMatrix4(n.matrixWorld);let ie=e.ray.origin.distanceTo(z);ie<e.near||ie>e.far||r.push({distance:ie,point:v.clone().applyMatrix4(n.matrixWorld),object:n})}}function x(y,b,C,S,v,z,w){let f=new ft.Vector3,D=new ft.Vector3,L=new ft.Vector3,P=new ft.Vector3,M=new ft.Vector3;if(f.fromBufferAttribute(S,v),D.fromBufferAttribute(S,z),L.fromBufferAttribute(S,w),C.intersectTriangle(f,D,L,!1,P)===null)return null;M.copy(P),M.applyMatrix4(y.matrixWorld);let k=b.ray.origin.distanceTo(M);return k<b.near||k>b.far?null:{faceIndex:1,distance:k,point:M.clone(),object:y}}};var Ia=new ct.Vector3,Yt=new ct.Camera,oc=class extends ct.LineSegments{constructor(e){let r=new ct.BufferGeometry,o=new ct.LineBasicMaterial({color:16777215,vertexColors:!0,toneMapped:!1}),i=[],s=[],a={},l=new ct.Color(15711266),c=new ct.Color(15711266),h=new ct.Color(2857471);p("n1","n2",l),p("n2","n4",l),p("n4","n3",l),p("n3","n1",l),p("f1","f2",l),p("f2","f4",l),p("f4","f3",l),p("f3","f1",l),p("n1","f1",l),p("n2","f2",l),p("n3","f3",l),p("n4","f4",l),p("p","n1",c),p("p","n2",c),p("p","n3",c),p("p","n4",c),p("u1","u2",h),p("u2","u3",h),p("u3","u1",h);function p(d,m,g){u(d,g),u(m,g)}function u(d,m){i.push(0,0,0),s.push(m.r,m.g,m.b),a[d]===void 0&&(a[d]=[]),a[d].push(i.length/3-1)}r.setAttribute("position",new ct.Float32BufferAttribute(i,3)),r.setAttribute("color",new ct.Float32BufferAttribute(s,3));super(r,o);this.type="CameraHelper",this.camera=e,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=a,this.update()}update(){let e=this.geometry,r=this.pointMap,o=!0;Yt.projectionMatrixInverse.elements=[.5112609807824982,-0,-0,-0,-0,.41421356237309503,-0,-0,-0,-0,-0,-.099999,-0,-0,-1.0000000000000002,.100001];let i=1,s=1,a=o?.8:1e-4;or("n1",r,e,Yt,-i,-s,a),or("n2",r,e,Yt,i,-s,a),or("n3",r,e,Yt,-i,s,a),or("n4",r,e,Yt,i,s,a);let l=a;or("f1",r,e,Yt,-i,-s,l),or("f2",r,e,Yt,i,-s,l),or("f3",r,e,Yt,-i,s,l),or("f4",r,e,Yt,i,s,l);let c=l,h=.5;or("u1",r,e,Yt,i*.7*h,s*1.1,c),or("u2",r,e,Yt,-i*.7*h,s*1.1,c),or("u3",r,e,Yt,0,s*(1.1+.9*h),c),e.getAttribute("position").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}};function or(n,t,e,r,o,i,s){Ia.set(o,i,s).unproject(r);let a=t[n];if(a!==void 0){let l=e.getAttribute("position");for(let c=0,h=a.length;c<h;c++)l.setXYZ(a[c],Ia.x,Ia.y,Ia.z)}}var Oa=class extends Lr(oc){constructor(e){super(e);this.object=e;this.object=e,this.name=`CombinedCameraHelper: ${e.uuid}`}updateMatrixWorld(e){super.updateMatrixWorld(e),this.updateTarget()}updateTarget(){let e=this.object.getTarget();this.updateWorldMatrix(!0,!1),this.worldToLocal(e)}raycast(e,r){Cr(this.object,this.geometry,e,r,!0)}};var Gd=require("three");var Ii=class extends Lr(Gd.DirectionalLightHelper){constructor(e,r=15,o=10066329){super(e,r,o);this.object=e;this.added=!1;this.name=`DirectionalLightHelper: ${e.uuid}`}raycast(e,r){Cr(this.object,Ii.geometryHelper,e,r)}};var zd=require("three");var Oi=class extends Lr(zd.AxesHelper){constructor(e,r=15){super(r);this.object=e;this.object.updateMatrixWorld(),this.name=`EmptyObjectHelper: ${e.uuid}`,this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1}raycast(e,r){Cr(this.object,Oi.geometryHelper,e,r)}update(){}};var Rd=require("three");var Ai=class extends Lr(Rd.PointLightHelper){constructor(e,r=15,o=6710886){super(e,r,o);this.object=e;this.name=`PointLightHelper: ${e.uuid}`}raycast(e,r){Cr(this.object,Ai.geometryHelper,e,r)}};var Da=require("three");var Aa=class extends Lr(Da.SpotLightHelper){constructor(e,r=6710886){super(e,r);this.object=e;this.name=`SpotLightHelper: ${e.uuid}`}raycast(e,r){Cr(this.object,Aa.geometryHelper,e,r)}update(){if(this.object!==void 0){let e=Aa._vector,r=this.object.distance?this.object.distance:1e3,o=r*Math.tan(this.object.angle);this.cone.scale.set(o,o,r),e.setFromMatrixPosition(this.object.target.matrixWorld),this.cone.lookAt(e);let i=this.color!==void 0?this.color:this.light.color;if(this.cone.material instanceof Array)for(let s=0,a=this.cone.material.length;s<a;s++)this.cone.material[s].color.set(i);else this.cone.material.color.set(i)}}},Gn=Aa;Gn._vector=new Da.Vector3;var Tr=(n,t)=>class extends n{constructor(){super(...arguments);this.objectHelper=new t(this);this.enableHelper=!1}set visibility(o){this.visible=o,this.setHelperVisibility(o),this.setHelperChildrenVisibility(o)}get visibility(){return this.visible}get geometryHelper(){return t.geometryHelper}setHelperVisibility(o){this.objectHelper.visible=o}setHelperChildrenVisibility(o){for(let i of this.children)Wt(i)&&i.traverseEntity(s=>{Gr(s)&&s.visible&&(s.objectHelper.visible=o)})}raycast(o,i){this.objectHelper.raycast(o,i)}copy(o,i=!0){return super.copy(o,i),o.enableHelper!==void 0&&(this.enableHelper=o.enableHelper),o.objectHelper!==void 0&&(this.objectHelper.visible=o.objectHelper.visible),this}toJSON(o){let i=super.toJSON(o),s=i.object;return s.enableHelper=this.enableHelper,i}fromJSON(o){return super.fromJSON(o),o.enableHelper!==void 0&&(this.enableHelper=!0),this}fromLightState(o,i){if(this.objectType==="LightDirectional"||this.objectType==="LightPoint"||this.objectType==="LightSpot"){let s=this;o.color!==void 0&&(s.color=We(o.color,i)),o.intensity!==void 0&&(s.intensity=o.intensity),o.depth!==void 0&&(s.shadow.camera.far=o.depth,s.shadow.needsUpdate=!0),o.shadows!==void 0&&(this.castShadow=o.shadows),o.helper!==void 0&&(this.enableHelper=o.helper,s.gizmos.shadowmap.visible=o.helper)}return this}};var Di=new Ge.Vector3,ic=new Ge.Vector3,zr=class extends Tr($t(Ge.Camera),Oa){constructor(e=window.innerWidth,r=window.innerHeight,o=45,i,s=1e5){super();this.objectType="CombinedCamera";this._cameraType="OrthographicCamera";this.targetOffset=co.DefaultTargetOffset;this.isUpVectorFlipped=!1;this.angleOffsetFromUp=0;this.width=e,this.height=r,this.orthoCamera=new Ge.OrthographicCamera(e*-.5,e*.5,r*.5,r*-.5,i??-5e4,s),this.perspCamera=new Ge.PerspectiveCamera(o,e/r,i??50,s),this.left=this.orthoCamera.left,this.right=this.orthoCamera.right,this.top=this.orthoCamera.top,this.bottom=this.orthoCamera.bottom,this.far=this.orthoCamera.far,this.view=this.orthoCamera.view,this.aspect=this.perspCamera.aspect,this.fov=this.perspCamera.fov,this.focus=this.perspCamera.focus,this.filmGauge=this.perspCamera.filmGauge,this.filmOffset=this.perspCamera.filmOffset,this.toOrthographic(!0)}static createFromState(e,r){let o=new zr().fromState(r);return o.enableHelper=!0,o.objectHelper.update(),o.uuid=e,o}get isPerspectiveCamera(){return this.cameraType==="PerspectiveCamera"}get isOrthographicCamera(){return!this.isPerspectiveCamera}get cameraType(){return this._cameraType}setNear(e,r){e==="PerspectiveCamera"?this.perspCamera.near=r:this.orthoCamera.near=r}setZoom(e,r){r>=0&&(e==="PerspectiveCamera"?this.perspCamera.zoom=r:this.orthoCamera.zoom=r)}set cameraType(e){e==="PerspectiveCamera"?this.toPerspective():e==="OrthographicCamera"&&this.toOrthographic()}get near(){return this._cameraType==="PerspectiveCamera"?this.perspCamera.near:this.orthoCamera.near}set near(e){this._cameraType==="PerspectiveCamera"?this.perspCamera.near=e:this.orthoCamera.near=e}get zoom(){return this._cameraType==="PerspectiveCamera"?this.perspCamera.zoom:this.orthoCamera.zoom}set zoom(e){e>=0&&(this._cameraType==="PerspectiveCamera"?this.perspCamera.zoom=e:this.orthoCamera.zoom=e)}lookAt(e){super.lookAt(e),this.getWorldPosition(Di),this.targetOffset=Di.distanceTo(e)}getTarget(e=new Ge.Vector3){return this.getWorldDirection(ic),this.getWorldPosition(Di),ic.multiplyScalar(this.targetOffset),e.copy(Di).add(ic),e}getDistanceToTarget(){let e=this.getTarget();return this.getWorldPosition(Di),Di.distanceTo(e)}updateUp(){let e=this.getWorldQuaternion(new Ge.Quaternion),r=new Ge.Vector3(0,0,1).applyQuaternion(e),o=new Ge.Vector3().copy(Ge.Object3D.DefaultUp);this.isUpVectorFlipped&&o.negate(),o.applyQuaternion(e);let i=new Ge.Vector3().copy(Ge.Object3D.DefaultUp).projectOnPlane(r),s=new Ge.Vector3().crossVectors(i,o).dot(r)>=0?1:-1;this.angleOffsetFromUp=i.angleTo(o)*s}getViewFrontToObject(e){let r=e.getWorldPosition(new Ge.Vector3),i=e.getWorldDirection(new Ge.Vector3).multiplyScalar(this.targetOffset);return{position:r.clone().add(i),target:r}}getViewToObject(e){let r=e.getWorldPosition(new Ge.Vector3),i=this.getWorldDirection(new Ge.Vector3).multiplyScalar(this.targetOffset);return{position:r.clone().sub(i),target:r}}setViewplaneSize(e,r){this.left=-e*.5,this.right=e*.5,this.top=r*.5,this.bottom=-r*.5,this.aspect=e/r,this.updateProjectionMatrix()}toOrthographic(e){this.orthoCamera.left=this.left,this.orthoCamera.right=this.right,this.orthoCamera.top=this.top,this.orthoCamera.bottom=this.bottom,this.orthoCamera.view=this.view,this.orthoCamera.far=this.far,this.orthoCamera.updateProjectionMatrix(),this.projectionMatrix=this.orthoCamera.projectionMatrix,this.projectionMatrixInverse=this.orthoCamera.projectionMatrixInverse,this._cameraType="OrthographicCamera",(this.enableHelper===!0||e===!0)&&this.objectHelper.update()}toPerspective(e){this.perspCamera.aspect=this.aspect,this.perspCamera.fov=this.fov,this.perspCamera.view=this.view,this.perspCamera.far=this.far,this.perspCamera.updateProjectionMatrix(),this.projectionMatrix=this.perspCamera.projectionMatrix,this.projectionMatrixInverse=this.perspCamera.projectionMatrixInverse,this._cameraType="PerspectiveCamera",(this.enableHelper===!0||e===!0)&&this.objectHelper.update()}setFocalLength(e){this.perspCamera.setFocalLength(e),this.toPerspective()}getFocalLength(){return this.perspCamera.getFocalLength()}getEffectiveFOV(){return this.perspCamera.getEffectiveFOV()}getFilmWidth(){return this.perspCamera.getFilmWidth()}getFilmHeight(){return this.perspCamera.getFilmHeight()}setViewOffset(e,r,o,i,s,a){this._cameraType==="PerspectiveCamera"?this.perspCamera.setViewOffset(e,r,o,i,s,a):this.orthoCamera.setViewOffset(e,r,o,i,s,a)}clearViewOffset(){this._cameraType==="PerspectiveCamera"?(this.perspCamera.clearViewOffset(),this.toPerspective()):(this.orthoCamera.clearViewOffset(),this.toOrthographic())}updateProjectionMatrix(e){this._cameraType==="PerspectiveCamera"?this.toPerspective(e):this._cameraType==="OrthographicCamera"&&this.toOrthographic(e)}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,r){super.updateWorldMatrix(e,r),this.matrixWorldInverse.copy(this.matrixWorld).invert()}copy(e,r){return super.copy(e,r),this.orthoCamera.copy(e.orthoCamera),this.perspCamera.copy(e.perspCamera),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.far=e.far,this.view=e.view===null?null:Object.assign({},e.view),this._cameraType=e._cameraType,this.aspect=e.aspect,this.fov=e.fov,this.focus=e.focus,this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this.targetOffset=e.targetOffset,this.updateProjectionMatrix(),this}fromCameraRender(e){let r={near:this.orthoCamera.near,far:this.orthoCamera.far},o={near:this.perspCamera.near,far:this.perspCamera.far};return this.copy(e),this.name="",this.enableHelper=!0,this.objectHelper.visible=!0,this.orthoCamera.near=r.near,this.orthoCamera.far=r.far,this.perspCamera.near=o.near,this.perspCamera.far=o.far,this.updateProjectionMatrix(),this}toJSON(e){let r=super.toJSON(e),o=r.object;return o.objectType="CombinedCamera",o.cameraType=this.cameraType,o.targetOffset=this.targetOffset,o.isUpVectorFlipped=this.isUpVectorFlipped,o.angleOffsetFromUp=this.angleOffsetFromUp,o.left=this.left,o.right=this.right,o.top=this.top,o.bottom=this.bottom,this.view!==null&&(o.view=Object.assign({},this.view)),o.zoomOrtho=this.orthoCamera.zoom,o.nearOrtho=this.orthoCamera.near,o.far=this.far,o.aspect=this.aspect,o.fov=this.fov,o.focus=this.focus,o.filmGauge=this.filmGauge,o.filmOffset=this.filmOffset,o.zoomPersp=this.perspCamera.zoom,o.nearPersp=this.perspCamera.near,r}fromJSON(e){if(super.fromJSON(e),this.cameraType=e.cameraType,e.targetOffset!==void 0&&(this.targetOffset=e.targetOffset),e.orbitControlsTarget!==void 0){let r=this.getWorldPosition(new Ge.Vector3),o=new Ge.Vector3().fromArray(e.orbitControlsTarget);this.targetOffset=o.distanceTo(r)}else e.targetOffset!==void 0&&(this.targetOffset=e.targetOffset);return this.isUpVectorFlipped=!1,this.angleOffsetFromUp=e.angleOffsetFromUp??0,e.left!==void 0&&(this.left=e.left),e.right!==void 0&&(this.right=e.right),e.top!==void 0&&(this.top=e.top),e.bottom!==void 0&&(this.bottom=e.bottom),e.view!==void 0&&(this.view=Object.assign({},e.view)),e.zoomOrtho!==void 0&&(this.orthoCamera.zoom=e.zoomOrtho),e.nearOrtho!==void 0&&(this.orthoCamera.near=e.nearOrtho),e.far!==void 0&&(this.far=e.far),e.aspect!==void 0&&(this.aspect=e.aspect),e.fov!==void 0&&(this.fov=e.fov),e.focus!==void 0&&(this.focus=e.focus),e.filmGauge!==void 0&&(this.filmGauge=e.filmGauge),e.filmOffset!==void 0&&(this.filmOffset=e.filmOffset),e.zoomPersp!==void 0&&(this.perspCamera.zoom=e.zoomPersp),e.nearPersp!==void 0&&(this.perspCamera.near=e.nearPersp),this.updateProjectionMatrix(),this}toCameraState(e=[]){let r={type:this.cameraType,far:this.far,orthographic:{near:this.orthoCamera.near,zoom:this.orthoCamera.zoom},perspective:{near:this.perspCamera.near,fov:this.perspCamera.fov,zoom:this.perspCamera.zoom},up:this.up.toArray(),targetOffset:this.targetOffset,isUpVectorFlipped:this.isUpVectorFlipped};return qo(r,e)}fromCameraState(e){let{orthographic:r,perspective:o}=e;return e.type!==void 0&&(this.cameraType=e.type),e.far!==void 0&&(this.far=e.far),r!==void 0&&(r.near!==void 0&&(this.orthoCamera.near=r.near),r.zoom!==void 0&&(this.orthoCamera.zoom=r.zoom)),o!==void 0&&(o.near!==void 0&&(this.perspCamera.near=o.near),o.fov!==void 0&&(this.perspCamera.fov=o.fov),o.zoom!==void 0&&(this.perspCamera.zoom=o.zoom)),e.up!==void 0&&this.up.fromArray(e.up),e.targetOffset!==void 0&&(this.targetOffset=e.targetOffset),e.isUpVectorFlipped!==void 0&&(this.isUpVectorFlipped=e.isUpVectorFlipped),this.updateProjectionMatrix(),this}toState(e){return{...super.toState(e),...this.toCameraState(e),type:this.cameraType}}fromState(e){return super.fromState(e),this.fromCameraState(e),this}};var Fd=require("three");var Rr=class extends Tr($t(Fd.Group),Oi){constructor(){super(...arguments);this.objectType="EmptyObject"}static createFromState(e,r){let o=new Rr().fromState(r);return o.uuid=e,o.enableHelper=!0,o.objectHelper.update(),o}toJSON(e){let r=super.toJSON(e);return r.object.objectType="EmptyObject",r}};var wo=require("three");var Bi=class extends Tr($t(wo.DirectionalLight),Ii){constructor(...e){super(...e);this.objectType="LightDirectional";this._gizmos={};this.castShadow=!0,this.shadow.mapSize.width=2048,this.shadow.mapSize.height=2048,this.shadow.normalBias=1;let o=this.shadow.camera;o.top=1250,o.bottom=-1250,o.right=1250,o.left=-1250,o.near=-1e4,o.far=2500;let i=new wo.CameraHelper(this.shadow.camera);i.visible=!1,this._gizmos.shadowmap=i,this.update()}static createFromState(e,r,o){let i=new Bi().fromState(r,o);return i.uuid=e,i}get gizmos(){return this._gizmos}showGizmos(){for(let e in this._gizmos){let r=this._gizmos[e];r instanceof wo.CameraHelper&&(r.visible=!0)}}hideGizmos(){for(let e in this._gizmos){let r=this._gizmos[e];r instanceof wo.CameraHelper&&(r.visible=!1)}}update(){this.shadow.camera.updateProjectionMatrix();for(let e in this._gizmos){let r=this._gizmos[e];r instanceof wo.CameraHelper&&r.update()}}updateMatrixWorld(e){super.updateMatrixWorld(e),this.enableHelper===!0&&this.objectHelper.visible===!0&&this.objectHelper.update()}copy(e,r=!0){return super.copy(e,r),this.color.copy(e.color),this.intensity=e.intensity,this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}toJSON(e){let r=super.toJSON(e),o=r.object;return o.objectType="LightDirectional",o.color=this.color.getHex(),o.intensity=this.intensity,o.shadow=this.shadow.toJSON(),r}fromJSON(e){super.fromJSON(e),this.color.set(e.color),this.intensity=e.intensity,this.shadow.normalBias=e.shadow.normalBias??0,this.shadow.radius=e.shadow.radius,this.shadow.mapSize.fromArray(e.shadow.mapSize);let r=this.shadow.camera,o=e.shadow.camera;return r.near=o.near,r.far=o.far,r.zoom=o.zoom,r.left=o.left,r.right=o.right,r.top=o.top,r.bottom=o.bottom,o.view!==void 0&&(r.view=Object.assign({},o.view)),this}fromDirectionalLightState(e,r){let o=e.depth!==void 0&&e.depth!==this.shadow.camera.far||e.size!==void 0&&e.size/2!==this.shadow.camera.right;return super.fromLightState(e,r),e.size!==void 0&&xd(this,e.size),e.shadowRadius!==void 0&&(this.shadow.radius=e.shadowRadius),e.shadowResolution!==void 0&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null)),o&&this.update(),this}fromState(e,r){return super.fromState(e),this.fromDirectionalLightState(e,r),this}};var gt=require("three");var Ei=class extends Tr($t(gt.PointLight),Ai){constructor(...e){super(...e);this.objectType="LightPoint";this._gizmos={};this.castShadow=!0,this.shadow.mapSize.width=1024,this.shadow.mapSize.height=1024,this.shadow.normalBias=1;let o=this.shadow.camera;o.fov=90,o.aspect=1,o.near=100,o.far=2500;let i=new gt.Vector3(-o.far+this.position.x,-o.far+this.position.y,-o.far+this.position.z),s=new gt.Vector3(o.far+this.position.x,o.far+this.position.y,o.far+this.position.z),a=new gt.Box3(i,s),l=new gt.Box3Helper(a,new gt.Color(16755200));l.visible=!1,this._gizmos.shadowmap=l,this.update()}static createFromState(e,r,o){let i=new Ei().fromState(r,o);return i.uuid=e,i}get gizmos(){return this._gizmos}showGizmos(){for(let e in this._gizmos){let r=this._gizmos[e];r instanceof gt.Box3Helper&&(r.visible=!0)}}hideGizmos(){for(let e in this._gizmos){let r=this._gizmos[e];r instanceof gt.Box3Helper&&(r.visible=!1)}}update(){if(this.shadow&&(this.shadow.camera.updateProjectionMatrix(),this._gizmos))for(let e in this._gizmos){let r=this._gizmos[e];if(r instanceof gt.Box3Helper){let o=this.shadow.camera,i=new gt.Vector3(-o.far+this.position.x,-o.far+this.position.y,-o.far+this.position.z),s=new gt.Vector3(o.far+this.position.x,o.far+this.position.y,o.far+this.position.z);r.box.set(i,s),r.updateMatrixWorld(!0)}}}updateMatrixWorld(e){super.updateMatrixWorld(e),this.enableHelper===!0&&this.objectHelper.visible===!0&&this.objectHelper.update()}copy(e,r=!0){return super.copy(e,r),this.color.copy(e.color),this.intensity=e.intensity,this.distance=e.distance,this.decay=e.decay,this.shadow=e.shadow.clone(),this}toJSON(e){let r=super.toJSON(e),o=r.object;return o.objectType="LightPoint",o.color=this.color.getHex(),o.intensity=this.intensity,o.distance=this.distance,o.decay=this.decay,o.shadow=this.shadow.toJSON(),r}fromJSON(e){super.fromJSON(e),this.color.set(e.color),this.intensity=e.intensity,this.distance=e.distance,this.decay=e.decay,this.shadow.normalBias=e.shadow.normalBias??0,this.shadow.radius=e.shadow.radius,this.shadow.mapSize.fromArray(e.shadow.mapSize??[512,512]),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null);let r=this.shadow.camera,o=e.shadow.camera;return r.near=o.near,r.far=o.far,r.zoom=o.zoom,r.fov=o.fov,r.focus=o.focus,r.aspect=o.aspect,r.filmGauge=o.filmGauge,r.filmOffset=o.filmOffset,o.view!==void 0&&(r.view=Object.assign({},o.view)),this}fromPointLightState(e,r){return super.fromLightState(e,r),e.distance!==void 0&&(this.distance=e.distance),e.decay!==void 0&&(this.decay=e.decay),e.shadowRadius!==void 0&&(this.shadow.radius=e.shadowRadius),e.shadowResolution!==void 0&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null)),this}fromState(e,r){return super.fromState(e),this.fromPointLightState(e,r),this}};var Dt=require("three");var Vd=new Dt.Vector3,Ud=new Dt.Vector3,jd=new Dt.Quaternion,_i=class extends Tr($t(Dt.SpotLight),Gn){constructor(...e){super(...e);this.objectType="LightSpot";this._gizmos={};this.castShadow=!0,this.shadow.mapSize.width=1024,this.shadow.mapSize.height=1024,this.shadow.normalBias=1;let o=this.shadow.camera;o.fov=Dt.MathUtils.RAD2DEG*2*this.angle,o.aspect=1,o.near=100,o.far=2500;let i=new Dt.CameraHelper(this.shadow.camera);i.visible=!1,this._gizmos.shadowmap=i,this.update()}static createFromState(e,r,o){let i=new _i().fromState(r,o);return i.uuid=e,i}get gizmos(){return this._gizmos}showGizmos(){for(let e in this._gizmos){let r=this._gizmos[e];r instanceof Dt.CameraHelper&&(r.visible=!0)}}hideGizmos(){for(let e in this._gizmos){let r=this._gizmos[e];r instanceof Dt.CameraHelper&&(r.visible=!1)}}update(){this.shadow.camera.updateProjectionMatrix();for(let e in this._gizmos){let r=this._gizmos[e];r instanceof Dt.CameraHelper&&r.update()}}updateMatrixWorld(e){super.updateMatrixWorld(e),Ud.setFromMatrixPosition(this.matrixWorld),jd.setFromRotationMatrix(this.matrixWorld),Vd.copy(this.up).applyQuaternion(jd).negate().multiplyScalar(this.distance),this.target.position.copy(Ud).add(Vd),this.target.updateMatrixWorld(),this.enableHelper===!0&&this.objectHelper.visible===!0&&this.objectHelper.update()}copy(e,r=!0){return super.copy(e,r),this.color.copy(e.color),this.intensity=e.intensity,this.distance=e.distance,this.angle=e.angle,this.penumbra=e.penumbra,this.decay=e.decay,this.target=e.target.clone(),this.shadow=e.shadow.clone(),this}toJSON(e){let r=super.toJSON(e),o=r.object;return o.objectType="LightSpot",o.color=this.color.getHex(),o.intensity=this.intensity,o.distance=this.distance,o.angle=this.angle,o.decay=this.decay,o.penumbra=this.penumbra,o.shadow=this.shadow.toJSON(),r}fromJSON(e){super.fromJSON(e),this.color.set(e.color),this.intensity=e.intensity,this.distance=e.distance,this.angle=e.angle,this.decay=e.decay,this.penumbra=e.penumbra,this.shadow.normalBias=e.shadow.normalBias??0,this.shadow.radius=e.shadow.radius,this.shadow.mapSize.fromArray(e.shadow.mapSize);let r=this.shadow.camera,o=e.shadow.camera;return r.near=o.near,r.far=o.far,r.zoom=o.zoom,r.fov=o.fov,r.focus=o.focus,r.aspect=o.aspect,r.filmGauge=o.filmGauge,r.filmOffset=o.filmOffset,o.view!==void 0&&(r.view=Object.assign({},o.view)),this}fromSpotLightState(e,r){return super.fromLightState(e,r),e.distance!==void 0&&(this.distance=e.distance),e.decay!==void 0&&(this.decay=e.decay),e.angle!==void 0&&(this.angle=e.angle),e.penumbra!==void 0&&(this.penumbra=e.penumbra),e.shadowRadius!==void 0&&(this.shadow.radius=e.shadowRadius),e.shadowResolution!==void 0&&(this.shadow.mapSize.set(e.shadowResolution,e.shadowResolution),this.shadow.map&&(this.shadow.map.dispose(),this.shadow.map=null)),this}fromState(e,r){return super.fromState(e),this.fromSpotLightState(e,r),this}};var Hd=require("three");var kd=n=>n.tagName==="VIDEO",No=class{static resize(t,e,r){let o=t/e,i;if(!r.image)return;let s=r.image;kd(s)?i=s.videoWidth/s.videoHeight:i=s.width/s.height,o>i&&(r.imageType=="WEBCAM"?r.repeat.set(-1,1*i/o):r.repeat.set(1,1*i/o)),o<i&&(r.imageType=="WEBCAM"?r.repeat.set(1*o/i*-1,1):r.repeat.set(1*o/i,1)),o==i&&(r.imageType=="WEBCAM"?r.repeat.set(-1,1):r.repeat.set(1,1))}static resizeTextureLayer(t,e,r){let o=t/e,i=r.image!==void 0?r.image.width/r.image.height:1,s;o>i?s={x:1,y:i/o}:o<i?s={x:o/i,y:1}:s={x:1,y:1},r.repeat.set(s.x,s.y),r.updateMatrix()}static resizeTextureLayers(t,e,r){let o=r.userData.layers,i=o.getLayers();for(let s=0;s<i.length;s++){let a=i[s];ad(a)&&(No.resizeTextureLayer(t,e,a.uniforms[`f${a.id}_texture`].value),o.updateLayerUniform())}}static resizeComplex(t,e,r,o){let i=t/e,s,a=r.image;kd(a)?s=a.videoWidth/a.videoHeight:s=a.width/a.height,o.geometry.type.includes("Shape")?(i>s&&(r.imageType=="WEBCAM"?r.repeat.set(1/t*-1,1/e*s/i):r.repeat.set(1/t,1/e*s/i)),i<s&&(r.imageType=="WEBCAM"?r.repeat.set(1/t*i/s*-1,1/e):r.repeat.set(1/t*i/s,1/e)),i==s&&(r.imageType=="WEBCAM"?r.repeat.set(1/t*-1,1/e):r.repeat.set(1/t,1/e))):(i>s&&(r.imageType=="WEBCAM"?r.repeat.set(-1,1*s/i):r.repeat.set(1,1*s/i)),i<s&&(r.imageType=="WEBCAM"?r.repeat.set(1*i/s*-1,1):r.repeat.set(1*i/s,1)),i==s&&(r.imageType=="WEBCAM"?r.repeat.set(-1,1):r.repeat.set(1,1)))}};var Gi=class extends Ze{constructor(e,r=new lt){super(e,r);this.objectType="Mesh2D";this.castShadow=!0,this.receiveShadow=!0}updateGeometry(e){super.updateGeometry(e),this.material.userData.layers&&No.resizeTextureLayers(this.geometry.userData.parameters.width,this.geometry.userData.parameters.height,this.material)}resizeGeometry(e,r){super.resizeGeometry(e,r,0),this.material.userData.layers&&No.resizeTextureLayers(this.geometry.userData.parameters.width,this.geometry.userData.parameters.height,this.material)}toJSON(e){let r=super.toJSON(e);return r.object.objectType="Mesh2D",r}clone(){let e=super.clone();return e.updateGeometry({}),e}static fromTexture(e){let r,o;if(e instanceof Hd.VideoTexture){let a=e.image;r=a.videoWidth*.5,o=a.videoHeight*.5}else{let a=e.image;r=a.width*.5,o=a.height*.5}let i=ta.create({parameters:{width:r,height:o}}),s=new lt;return s.layersList.changeLayer(0,{type:"texture",texture:e}),s.layersList.moveLayer(0,1),s.dispose(),new Gi(i,s)}};var zi=class extends Ze{constructor(e,r=new St){super(e,r);this.objectType="Mesh3D";this.castShadow=!0,this.receiveShadow=!0}toJSON(e){let r=super.toJSON(e);return r.object.objectType="Mesh3D",r}};var Ri=class extends zi{constructor(e,r=new St){super(e,r);this.objectType="NonParametric"}toJSON(e){let r=super.toJSON(e);return r.object.objectType="NonParametric",r}};var Kt=require("three"),qd=require("three/examples/jsm/loaders/FontLoader.js"),Je=class extends Kt.Mesh{constructor({char:e,originalChar:r,fontFamily:o,letterSpacing:i,fontSize:s,LOD:a=16},l=new Kt.MeshBasicMaterial({color:0,opacity:1,visible:!0,transparent:!0,side:Kt.DoubleSide})){let c=Je.loadChar(e,o,a);super(c.geometry,l);this.char=e,this.originalChar=r??e,this.fontFamily=o,this.letterSpacing=i,this.fontSize=s,this.LOD=a,this.resolution=c.resolution,this.glyphsHa=c.glyphsHa,this.localPosition=new Kt.Vector2,this.charSize=0,this.geometry.userData={type:"CharacterGeometry",parameters:{char:this.char,fontFamily:this.fontFamily,letterSpacing:this.letterSpacing,fontSize:this.fontSize,lod:this.LOD,resolution:this.resolution,charSize:this.charSize,localPosition:this.localPosition}},this.updateFontSize(this.fontSize)}static get FONTS_PATH(){return Je._fontPath}static set FONTS_PATH(e){Je._fontPath=e}updatePosition(e,r){this.localPosition.copy(e);let o=new Kt.Vector3(this.localPosition.x,-this.localPosition.y,0);this.position.copy(o).add(r)}updateFontSize(e){let r=e/this.resolution;this.fontSize=e,this.scale.set(this.fontSize,this.fontSize,1),this.charSize=this.glyphsHa*r*this.letterSpacing}updateFontFamily(e){if(this.fontFamily===e)return;this.fontFamily=e;let r=Je.loadChar(this.char,e,this.LOD);this.geometry=r.geometry,this.resolution=r.resolution,this.glyphsHa=r.glyphsHa,this.geometry.userData={type:"CharacterGeometry",parameters:{char:this.char,fontFamily:this.fontFamily,letterSpacing:this.letterSpacing,fontSize:this.fontSize,lod:this.LOD,resolution:this.resolution,charSize:this.charSize,localPosition:this.localPosition}},this.updateFontSize(this.fontSize)}updateChar(e){if(this.char===e)return;this.char=e;let r=Je.loadChar(e,this.fontFamily,this.LOD);this.geometry=r.geometry,this.resolution=r.resolution,this.glyphsHa=r.glyphsHa,this.geometry.userData={type:"CharacterGeometry",parameters:{char:this.char,fontFamily:this.fontFamily,letterSpacing:this.letterSpacing,fontSize:this.fontSize,lod:this.LOD,resolution:this.resolution,charSize:this.charSize,localPosition:this.localPosition}},this.updateFontSize(this.fontSize)}updateLetterSpacing(e){this.letterSpacing!==e&&(this.letterSpacing=e,this.updateFontSize(this.fontSize))}updateLOD(e){if(this.LOD===e)return;this.LOD=e;let r=Je.loadChar(this.char,this.fontFamily,this.LOD);this.geometry=r.geometry,this.resolution=r.resolution,this.glyphsHa=r.glyphsHa,this.geometry.userData={type:"CharacterGeometry",parameters:{char:this.char,fontFamily:this.fontFamily,letterSpacing:this.letterSpacing,fontSize:this.fontSize,lod:this.LOD,resolution:this.resolution,charSize:this.charSize,localPosition:this.localPosition}},this.updateFontSize(this.fontSize)}clone(){let e={char:this.char,originalChar:this.originalChar,fontFamily:this.fontFamily,letterSpacing:this.letterSpacing,fontSize:this.fontSize,LOD:this.LOD};return new Je(e).copy(this)}static loadFont(e){return new Promise(function(r,o){Je.fontCache[e]?r(Je.fontCache[e]):new qd.FontLoader().load(Je.FONTS_PATH+e+".json",s=>{Je.fontCache[e]=s,r(s)},void 0,o)})}static loadChar(e,r,o){if(Je.charCache[e]){if(Je.charCache[e][o]&&Je.charCache[e][o].fontFamily===r)return Je.charCache[e][o]}else Je.charCache[e]={};let i=Je.fontCache[r],s=i.generateShapes(e,1);return Je.charCache[e][o]={geometry:new Kt.ShapeBufferGeometry(s,o),fontFamily:r,resolution:i.data.resolution,glyphsHa:i.data.glyphs[e].ha},Je.charCache[e][o]}},wt=Je;wt.charCache={},wt.fontCache={},wt._fontPath="/_assets/_fonts/";var Ft=require("three");var nc=require("three"),Ba=new nc.Vector2,ro=class{constructor(t,e,r){this.message=[];this.endLine=!0;this.yLinePos=t,this.lineHeight=e,this.maxCharSize=r,this.nextChar3DPos=new nc.Vector2(0,this.yLinePos+this.maxCharSize*this.lineHeight),this.align=1}addChar3D(t,e,r=this.message.length){this.message.splice(r,0,t),t.fontSize>this.maxCharSize?(this.maxCharSize=t.fontSize,this.nextChar3DPos.y=this.yLinePos+this.maxCharSize*this.lineHeight,this.fullUpdate(e)):(t.updatePosition(this.nextChar3DPos,e),this.nextChar3DPos.x+=t.charSize)}deleteChar3D(t=this.message.length-1){let e=this.message[t];if(e)return this.message.splice(t,1),this.nextChar3DPos.x-=e.charSize,e}isEndLine(t){this.endLine=t}fullUpdate(t,e=0){this.nextChar3DPos.x=0;for(let r=e,o=this.message.length;r<o;r+=1)this.message[r].updatePosition(this.nextChar3DPos,t),this.nextChar3DPos.x+=this.message[r].charSize}checkOverFlow(t){let e,r=this.message.length-1;if(r<=0)return!1;for(;r>=0;){if(this.message[r].char!==" "){e=this.message[r];break}r-=1}return!!(r>=0&&e&&e.localPosition.x+e.charSize>t)}containSpaceOverFlow(t=this.message.length-1){for(let e=t;e>=0;e-=1)if(this.message[e].char===" ")return!0;return!1}containSpace(t=this.message.length-1){if(this.endLine)return!0;for(let e=t;e>=0;e-=1)if(this.message[e].char===" ")return!0;return!1}popWord(t=this.message.length-1){let e=[],r=!0,o;for(o=t;o>=0;o-=1)if(this.message[o].char===" "){r=!1,e.length===0&&(o-=1,e.splice(0,0,this.message[o]));break}else e.splice(0,0,this.message[o]);return r?e=[]:this.message.splice(o+1,e.length),e}getWord(t=0,e=1){let r=[],o=t;for(o=t;;o+=e){if(!this.message[o]||this.message[o].char===" "){r.length===0&&this.message[o]&&(r.push(this.message[o]),this.message.splice(o,1));break}e>0?(r.push(this.message[o]),this.message.splice(o,1),o-=e):(r.splice(0,0,this.message[o]),this.message.splice(o,1))}return r}getWordAtIndex(t){let e=[];for(let r=t;r<this.message.length&&this.message[r].char!==" ";r++)e.push(this.message[r]);for(let r=t-1;r>=0&&this.message[r].char!==" ";r--)e.splice(0,0,this.message[r]);return e}wordSize(t=0,e=-1){let r=0,o=t;for(;o>=0&&o<this.message.length;){if(this.message[o].char===" "){r===0&&(r=this.message[o].charSize);break}r+=this.message[o].charSize,o+=e}return(o<0||o>=this.message.length)&&!this.endLine?this.message[t]?this.message[t].charSize:999999999:r===0?999999999:r}spaceLeft(t){return t-this.nextChar3DPos.x}popChar(t=this.message.length-1){return this.nextChar3DPos.x-=this.message[t].charSize,this.message.splice(t,1)}isEmpty(){return!this.message.length}updateNextCharPosY(){this.nextChar3DPos.y=this.yLinePos+this.maxCharSize*this.lineHeight}updateYLinePos(t){this.yLinePos=t,this.updateNextCharPosY()}updatelineHeight(t){this.lineHeight=t,this.updateNextCharPosY()}updateFontSize(t,e=0,r=this.message.length-1){for(let o=e;o<=r;o+=1)this.message[o].updateFontSize(t);this.maxCharSize=t,this.nextChar3DPos.y=this.yLinePos+this.maxCharSize*this.lineHeight}countSpaces(){let t=0;for(let e=0;e<this.message.length;e++)this.message[e].char===" "&&(t+=1);return t}alignText(t,e,r,o,i){switch(r){case 1:this.leftAlign(t,i);break;case 3:this.centerAlign(this.spaceLeft(e),t,i);break;case 2:this.rightAlign(this.spaceLeft(e),t,i);break;case 4:this.justifyAlign(this.spaceLeft(e),t,i);break}}offsetCharacters(t,e,r){Ba.set(e,r);let o=this.message.length;for(let i=0;i<o;i++)this.message[i].updatePosition(this.message[i].localPosition.add(Ba),t)}leftAlign(t,e){this.align=1,this.offsetCharacters(t,0,e)}centerAlign(t,e,r){this.align=3,this.offsetCharacters(e,t/2,r)}rightAlign(t,e,r){this.align=2,this.offsetCharacters(e,t,r)}justifyAlign(t,e,r){if(this.align=4,this.endLine){this.offsetCharacters(e,0,r);return}let o=this.countSpaces();if(o===0){this.offsetCharacters(e,0,r);return}let i=t/o,s=0;for(let a=0;a<this.message.length;a++)this.message[a].char===" "&&(s+=i),Ba.set(s,r),this.message[a].updatePosition(this.message[a].localPosition.add(Ba),e)}clone(){let t=new ro(this.yLinePos,this.lineHeight,this.maxCharSize);t.nextChar3DPos=this.nextChar3DPos.clone(),t.align=this.align,t.endLine=this.endLine;for(let e=0;e<this.message.length;e++)t.message.push(this.message[e].clone());return t}};var sc=class extends Ze{constructor(e,r=new lt({transparent:!0,opacity:1,visible:!1,side:Ft.DoubleSide})){super(e,r);this.objectType="TextFrame";this.charContainer=new Ft.Object3D,this.add(this.charContainer),this.material.visible=!1,this._geometryUserData=e.userData,this.userData.textFrame={hexColor:null,opacity:1,visible:!0,text:"",fontSize:16,lineHeight:1.5,letterSpacing:1,fontFamily:"roboto_regular",textTransform:1,horizontalAlignment:1,verticalAlignment:1,LOD:16,maxLineSize:this._geometryUserData.parameters.width,textOrigin:new Ft.Vector3(this._geometryUserData.parameters.width*-.5,this._geometryUserData.parameters.height*.5,0),textLines:[]},this.createTextLine()}static createFromState(e,r,o){let i=ra.create({parameters:{width:r.width,height:r.height}}),s=new sc(i).fromState(r,o);return s.uuid=e,s}async updateText(e){this.clearText();let r=this.userData.textFrame,o=r.fontFamily;await wt.loadFont(o),r.text=e;let i=r.textOrigin,s=new Ft.MeshBasicMaterial({visible:r.visible,transparent:!0,side:Ft.DoubleSide}),a=e.split(`
|
|
943
|
+
`),l=0;this.userData.textFrame.textLines=a.map((c,h)=>{let p=new ro(l,r.lineHeight,r.fontSize);return p.message=c.split("").map(u=>{let d={char:u,fontFamily:o,letterSpacing:r.letterSpacing,fontSize:r.fontSize,LOD:16},m=s.clone();m.color=r.hexColor,m.opacity=r.opacity;let g=new wt(d,m);return p.addChar3D(g,i),this.charContainer.add(g),g}),l+=p.maxCharSize*p.lineHeight,p}),this.textFullUpdate(),this.checkOverFlow()}clearText(){let e=this.userData.textFrame.textLines;for(;this.charContainer.children.length;){let r=this.charContainer.children[0];this.charContainer.remove(r)}for(;e.length;)e.pop()}raycast(e,r){let o=[];if(super.raycast(e,o),o.length>0){r.push(o[0]);return}let i=[];for(let s=0,a=this.charContainer.children.length;s<a;++s)if(this.charContainer.children[s]instanceof wt&&(e.intersectObject(this.charContainer.children[s],!1,i),i.length>0)){i[0].object=this,r.push(i[0]);return}}updateGeometry(e){let r=this.userData,o=this.geometry.userData,i=o.parameters.width,s=o.parameters.height,a=e.parameters?.width??i,l=e.parameters?.height??s,c=r.textFrame;super.updateGeometry(e),c.maxLineSize=a,c.textOrigin.set(-.5*a,.5*l,0),l!==s?(this.checkOverFlow(),this.checkCapacity()):a!==i&&(i<a?this.checkCapacity():i>a&&this.checkOverFlow())}checkOverFlow(e=0){let r=this.userData,o=r.textFrame.textOrigin,i=r.textFrame.textLines;for(let s=e;s<i.length;s++){i[s].updateYLinePos(this.getNewLinePosition(s)),i[s].fullUpdate(o);let a=[];for(;i[s].checkOverFlow(r.textFrame.maxLineSize);)i[s].containSpaceOverFlow()?a.unshift(i[s].getWord(i[s].message.length-1,-1)):a.unshift(i[s].popChar());if(a.length>0){i[s+1]===void 0?(i[s].isEndLine(!1),this.createTextLine()):i[s].endLine&&(this.createTextLine(s+1),i[s].isEndLine(!1),i[s+1].isEndLine(!0));let l=0;for(let c=0;c<a.length;c+=1)for(let h=0;h<a[c].length;h+=1)i[s+1].addChar3D(a[c][h],o,l),l+=1;i[s+1].fullUpdate(o)}i[s].fullUpdate(o)}this.textFullUpdate(e)}checkCapacity(e=0){let r=this.userData,o=r.textFrame.textOrigin,i=r.textFrame.maxLineSize,s=r.textFrame.textLines;for(let a=e;a<s.length;a+=1)if(s[a].updateYLinePos(this.getNewLinePosition(a)),s[a].fullUpdate(o),!!s[a-1])for(;!s[a-1].endLine;){let l,c=s[a-1].spaceLeft(i);if(s[a].wordSize(0,1)<=c){s[a].containSpace()?l=s[a].getWord(0,1):l=s[a].popChar(0);for(let h=0;h<l.length;h+=1)l[h]&&s[a-1].addChar3D(l[h],o)}else{s[a].isEmpty()?(s[a].endLine&&s[a-1].isEndLine(!0),s.splice(a,1),a-=1):(s[a].updateYLinePos(this.getNewLinePosition(a)),s[a].fullUpdate(o));break}}this.textFullUpdate(e)}createTextLine(e=this.userData.textFrame.textLines.length){let o=this.userData.textFrame;o.textLines.splice(e,0,new ro(this.getNewLinePosition(e),o.lineHeight,o.fontSize))}textFullUpdate(e=0){let o=this.userData.textFrame,i=o.textLines,s=this.getVerticalAlignmentOffSet();for(let a=e;a<i.length;a++)i[a].updateYLinePos(this.getNewLinePosition(a)),i[a].fullUpdate(o.textOrigin),i[a].alignText(o.textOrigin,o.maxLineSize,o.horizontalAlignment,o.verticalAlignment,s)}getVerticalAlignmentOffSet(){switch(this.userData.textFrame.verticalAlignment){case 1:return 0;case 2:return this.getRemainingVerticalSpace()/2;case 3:return this.getRemainingVerticalSpace();default:return 0}}getRemainingVerticalSpace(){let r=this.userData.textFrame.textLines;return this.geometry.userData.parameters.height-this.getNewLinePosition(r.length)}getNewLinePosition(e){let o=this.userData.textFrame.textLines,i=0;for(let s=0;s<e;s+=1)i+=o[s].maxCharSize*o[s].lineHeight;return i}updateColor(e){let r=this.userData;r.textFrame.hexColor=e;let o=r.textFrame.textLines;for(let i=0;i<o.length;i++){let s=o[i].message;for(let a=0;a<s.length;a++){let l=s[a].material;l.color?.isColor&&(l.color=e)}}}updateOpacity(e){let r=this.userData;r.textFrame.opacity=e;let o=r.textFrame.textLines;for(let i=0;i<o.length;i++){let s=o[i].message;for(let a=0;a<s.length;a++){let l=s[a].material;l.opacity=e}}}updateVisible(e){let r=this.userData;r.textFrame.visible=e;let o=r.textFrame.textLines;for(let i=0;i<o.length;i++){let s=o[i].message;for(let a=0;a<s.length;a++){let l=s[a].material;l.visible=e}}}async updateFontFamily(e){await wt.loadFont(e);let o=this.userData.textFrame,i=o.textLines;o.fontFamily=e;for(let s=0;s<i.length;s++){let a=i[s].message;for(let l=0;l<a.length;l++)a[l].updateFontFamily(e)}this.textFullUpdate(),this.checkOverFlow(),this.checkCapacity()}updateFontSize(e){let o=this.userData.textFrame,i=o.textLines,s=o.fontSize;o.fontSize=e;for(let a=0;a<i.length;a++)i[a].updateFontSize(e);this.textFullUpdate(),e>s?this.checkOverFlow():e<s&&this.checkCapacity()}async updateTextTransform(e){let o=this.userData.textFrame;await wt.loadFont(o.fontFamily);let i=o.textLines;switch(o.textTransform=e,e){case 2:for(let s=0;s<i.length;s++){let a=i[s].message;for(let l=0;l<a.length;l++)i[s].message[l].updateChar(a[l].char.toUpperCase())}break;case 3:for(let s=0;s<i.length;s++){let a=i[s].message;for(let l=0;l<a.length;l++)i[s].message[l].updateChar(a[l].char.toLowerCase())}break;default:for(let s=0;s<i.length;s++){let a=i[s].message;for(let l=0;l<a.length;l++)i[s].message[l].updateChar(a[l].originalChar)}}this.textFullUpdate(),this.checkOverFlow(),this.checkCapacity()}updateLetterSpacing(e){let r=this.userData,o=r.textFrame.textLines;r.textFrame.letterSpacing=e;for(let i=0;i<o.length;i++){let s=o[i].message;for(let a=0;a<s.length;a++)s[a].updateLetterSpacing(e)}this.textFullUpdate(),this.checkOverFlow(),this.checkCapacity()}updateLOD(e){let r=this.userData;r.textFrame.LOD=e;let o=r.textFrame.textLines;for(let i=0;i<o.length;i++);this.textFullUpdate(),this.checkOverFlow(),this.checkCapacity()}updateLineHeight(e){let r=this.userData,o=r.textFrame.textLines;r.textFrame.lineHeight=e;for(let i=0;i<o.length;i++)o[i].updatelineHeight(e);this.textFullUpdate()}updateVerticalAlignment(e){let r=this.userData;r.textFrame.verticalAlignment=e,this.textFullUpdate()}updateHorizontalAlignment(e){let r=this.userData;r.textFrame.horizontalAlignment=e,this.textFullUpdate()}toJSON(e){let r=super.toJSON(e),o=r.object;o.objectType="TextFrame";let s=this.userData.textFrame.textLines.map(a=>{let l=a.message.map(c=>({char:c.char,originalChar:c.originalChar,fontFamily:c.fontFamily,letterSpacing:c.letterSpacing,fontSize:c.fontSize,LOD:c.LOD}));return{align:a.align,endLine:a.endLine,lineHeight:a.lineHeight,maxCharSize:a.maxCharSize,yLinePos:a.yLinePos,message:l}});return o.userData.textFrame.textLinesData=s,r}async fromJSONasync(e){if(super.fromJSON(e),e.userData!==void 0){let r=e.userData.textFrame;await wt.loadFont(r.fontFamily),r.textOrigin=new Ft.Vector3(r.textOrigin.x,r.textOrigin.y,r.textOrigin.z);let o=new Ft.MeshBasicMaterial({color:r.hexColor,opacity:r.opacity,visible:r.visible,transparent:!0,side:Ft.DoubleSide});r.textLinesData&&(r.textLines=r.textLinesData.map((i,s)=>{let a=new ro(Number(i.yLinePos),Number(i.lineHeight),Number(i.maxCharSize)),l=i.message.map((c,h)=>{if(c.char===void 0){let d=r.textLines[s].message[h];if("geometries"in d){let m=d.geometries[0].userData.parameters;Object.assign(c,{LOD:m.lod,char:m.char,fontFamily:m.fontFamily,fontSize:m.fontSize,letterSpacing:m.letterSpacing,originalChar:m.char})}}let p={char:c.char,fontFamily:c.fontFamily,letterSpacing:Number(c.letterSpacing),fontSize:Number(c.fontSize),LOD:c.LOD},u=new wt(p,o.clone());return a.addChar3D(u,r.textOrigin),this.charContainer.add(u),u});return a.message=l,a}),this.userData.textFrame=r),this.textFullUpdate()}return this}fromTextFrameData(e,r){if(e.color!==void 0){let o=We(e.color,r);this.updateColor(o),this.updateOpacity(o.a)}e.alpha!==void 0&&this.updateOpacity(e.alpha),e.font!==void 0&&this.updateFontFamily(e.font),e.horizontalAlign!==void 0&&this.updateHorizontalAlignment(e.horizontalAlign),e.verticalAlign!==void 0&&this.updateVerticalAlignment(e.verticalAlign),e.textTransform!==void 0&&this.updateTextTransform(e.textTransform),e.fontSize!==void 0&&this.updateFontSize(e.fontSize),e.lineHeight!==void 0&&this.updateLineHeight(e.lineHeight),e.letterSpacing!==void 0&&this.updateLetterSpacing(e.letterSpacing),e.text!==void 0&&e.text!==""&&this.updateText(e.text),(e.width!==void 0||e.height!==void 0)&&this.updateGeometry({parameters:{width:e.width,height:e.height}})}fromState(e,r){return super.fromState(e),this.fromTextFrameData(e,r),this}convertToVector(){let{fontFamily:e,hexColor:r}=this.userData.textFrame,o=new Rr;o.name="Text Shape";let i=wt.fontCache[e];for(let s of this.charContainer.children)s instanceof wt&&i.generateShapes(s.char,1).forEach(a=>{let l=new Ne().fromShape(a);l.applyScale(s.scale.x,s.scale.y);let c=nt.create({shape:l}),h=new lt({side:Ft.DoubleSide});h.color=r;let p=new to(c,h);p.name=s.char,p.position.copy(s.position),p.rotation.copy(s.rotation),o.attach(p)});return o}},Lo=sc;Lo.VerticalAlign=dl,Lo.HorizontalAlign=ul,Lo.TextTransform=ml;var Vt=require("three");var Nt=require("three");var Yd=Im($d());var ac;ia.then(n=>{ac=n});var Kd=new Nt.Matrix4,Gv=new Nt.Matrix4,zv=new Nt.Matrix4,ir=new Nt.Box3,oo=new Nt.Vector3,Rv=new Nt.Matrix4,Fv=new Nt.Matrix4,Fi=class extends Ze{constructor(e,r,o,i=new St){super(o??r,i);this.subdivPointer=e;this.originalGeometry=r;this.subdividedGeometry=o;this.objectType="SubdivObject";this.hiddenMatrixOld=new Nt.Matrix4;this.smoothShading=!0;this.phongAngle=35;this.matrixWorldRigid=new Nt.Matrix4;this.castShadow=!0,this.receiveShadow=!0,this.forceComputeSize=!1}static createFromState(e,r,o){let{subdivPointer:i,originalGeometry:s,subdividedGeometry:a}=Jt.build(r.geometry,void 0,void 0,!r.flatShading),l=On(r.material,o),c=new Fi(i,s,a||void 0,l);return r.geometry.phongAngle!==void 0&&(c.phongAngle=r.geometry.phongAngle),c.calcBoundingBox(),c.freeSubdivPointer(),c.uuid=e,c.fromState(r),c}shallowClone(e){return new Ri(this.geometry,this.material).shallowCopy(this,e)}toJSON(e){let r=super.toJSON(e);return r.object.objectType="SubdivObject",r}buildFromStore(e,r){let{originalGeometry:o,subdividedGeometry:i,subdivPointer:s}=Jt.build(e,r,this.subdivPointer,this.smoothShading,this.shearScale);if(e.phongAngle!==void 0&&(this.phongAngle=e.phongAngle),this.subdivPointer=s,o!==void 0&&(this.originalGeometry?.dispose(),this.originalGeometry=o),i!==void 0&&(this.subdividedGeometry?.dispose(),this.subdividedGeometry=i??void 0),this.geometry=this.subdividedGeometry??this.originalGeometry,this.cloner)for(let a of this.cloner.children)a.geometry=this.geometry;e.width&&(this.geometry.userData.parameters={width:e.width,height:e.height,depth:e.depth})}updateMesh(e=!1){Jt.buildLevel(this.subdivPointer,!0,this.smoothShading?this.phongAngle:-1,this.originalGeometry,e?this.shearScaleInv:void 0),this.subdividedGeometry&&Jt.buildLevel(this.subdivPointer,!1,this.smoothShading?this.phongAngle:-1,this.subdividedGeometry,e?this.shearScaleInv:void 0)}updateTopology(){this.originalGeometry.dispose(),this.originalGeometry=Jt.buildLevel(this.subdivPointer,!0,this.smoothShading?this.phongAngle:-1),this.subdividedGeometry&&(this.subdividedGeometry.dispose(),this.subdividedGeometry=Jt.buildLevel(this.subdivPointer,!1,this.smoothShading?this.phongAngle:-1)),this.geometry=this.subdividedGeometry??this.originalGeometry}raycast(e,r){this.geometry=this.originalGeometry,Ze.prototype.raycast.call(this,e,r),this.geometry=this.subdividedGeometry??this.originalGeometry}updateMatrixWorldSVD(){let e=this.matrixWorld.elements,r=[[e[0],e[4],e[8]],[e[1],e[5],e[9]],[e[2],e[6],e[10]]],{u:o,v:i,q:s}=(0,Yd.SVD)(r),a=Kd.set(o[0][0],o[0][1],o[0][2],0,o[1][0],o[1][1],o[1][2],0,o[2][0],o[2][1],o[2][2],0,0,0,0,1),l=Gv.set(i[0][0],i[0][1],i[0][2],0,i[1][0],i[1][1],i[1][2],0,i[2][0],i[2][1],i[2][2],0,0,0,0,1),c=zv.copy(l).transpose();this.shearScale=Rv.makeScale(s[0],s[1],s[2]).multiply(c).premultiply(l),this.shearScaleInv=Fv.copy(this.shearScale).invert(),this.matrixWorldRigid.multiplyMatrices(a,c),s.every(h=>Math.abs(s[0]-h)<.01)&&(this.shearScale=void 0,this.shearScaleInv=void 0)}activateSVDCompensation(){this.shearScale!==void 0&&(this.matrixAutoUpdate=!1,this.matrix.copy(this.matrixWorldRigid).copyPosition(this.matrixWorld),this.hiddenMatrixOld.copy(this.hiddenMatrix),this.hiddenMatrix.copy(this.parent.matrixWorld).invert())}deactivateSVDCompensation(){this.shearScale!==void 0&&(this.shearScale=void 0,this.shearScaleInv=void 0,this.matrixAutoUpdate=!0,this.hiddenMatrix.copy(this.hiddenMatrixOld))}calcBoundingBox(){let e=this.originalGeometry;e.boundingSphere===null&&(e.boundingSphere=new Nt.Sphere);let r=e.attributes.position,o=e.boundingSphere.center;ir.setFromBufferAttribute(r),ir.getCenter(o),e.boundingSphere.radius=o.distanceTo(ir.max),isNaN(e.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this),ir.getSize(oo);let i={width:oo.x,height:oo.y,depth:oo.z};return this.geometry.userData.parameters=i,i}updateBoundingBox(e){let r=this.originalGeometry;ir.min.set(e[0],e[2],e[4]),ir.max.set(e[1],e[3],e[5]),this.shearScaleInv&&(ir.min.applyMatrix4(this.shearScaleInv),ir.max.applyMatrix4(this.shearScaleInv)),r.boundingSphere===null&&(r.boundingSphere=new Nt.Sphere);let o=r.boundingSphere.center;ir.getCenter(o),r.boundingSphere.radius=o.distanceTo(ir.max),isNaN(r.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this),ir.getSize(oo);let i={width:oo.x,height:oo.y,depth:oo.z};return this.geometry.userData.parameters=i,i}freeSubdivPointer(){this.subdivPointer&&(ac.free_bvh(this.subdivPointer),ac.free_subdivision_surface(this.subdivPointer),this.subdivPointer=0)}updateGeometry(e){this.geometry.userData.scale||(this.geometry.userData.scale=Array(3)),this.geometry.userData.scale[0]=this.geometry.userData.parameters.width===0?1:e.parameters.width/this.geometry.userData.parameters.width,this.geometry.userData.scale[1]=this.geometry.userData.parameters.height===0?1:e.parameters.height/this.geometry.userData.parameters.height,this.geometry.userData.scale[2]=this.geometry.userData.parameters.depth===0?1:e.parameters.depth/this.geometry.userData.parameters.depth,Jd(this.originalGeometry.attributes,...this.geometry.userData.scale),this.originalGeometry.attributes.position.needsUpdate=!0,this.originalGeometry.attributes.normal.needsUpdate=!0,this.subdividedGeometry&&(Jd(this.subdividedGeometry.attributes,...this.subdividedGeometry.userData.scale),this.subdividedGeometry.attributes.position.needsUpdate=!0,this.subdividedGeometry.attributes.normal.needsUpdate=!0),this.geometry.userData.parameters={...e.parameters}}};function Jd(n,t,e,r){let o=n.position.array,i=n.normal.array,s=Kd.makeScale(t,e,r).invert().elements,a,l,c;for(var h=0,p=o.length;h<p;h+=3)o[h]*=t,o[h+1]*=e,o[h+2]*=r,a=i[h],l=i[h+1],c=i[h+2],i[h]=s[0]*a+s[4]*l+s[8]*c,i[h+1]=s[1]*a+s[5]*l+s[9]*c,i[h+2]=s[2]*a+s[6]*l+s[10]*c}var io=require("three");function Xd(n,t){t.flatShading!==void 0&&(n.flatShading=t.flatShading,n.needsUpdate=!0),t.wireframe!==void 0&&(n.wireframe=t.wireframe),t.side!==void 0&&(t.side===0?n.side=io.FrontSide:t.side===1?n.side=io.BackSide:n.side=io.DoubleSide)}function Vv(n,t){if(Array.isArray(n.material))for(let e of n.material)Xd(e,t);else{let e=n.material;Xd(e,t)}n.objectType==="SubdivObject"&&t.flatShading!==void 0&&(n.material.flatShading=!1,n.smoothShading=!t.flatShading,n.updateMesh())}function Qd(n,t,e){let r;if(t.geometry.type==="SubdivGeometry")r=Fi.createFromState(n,t,e);else{let o=t.geometry.type==="BooleanGeometry"?new io.BufferGeometry:Ca(t.geometry,e),i="materials"in t?fd(t.materials,e):On(t.material,e);ks.is2DParametricMesh(o.userData.type)?r=new Gi(o,i):o?.userData.type==="VectorGeometry"?r=new to(o,i):t.geometry.type==="NonParametricGeometry"?r=new Ri(o,i):t.geometry.type==="BooleanGeometry"?(r=new Ma(void 0,i),r.booleanOp=t.geometry.operation,t.geometry.phongAngle!==void 0&&(r.phongAngle=t.geometry.phongAngle)):r=new zi(o,i),r.uuid=n,r.fromState(t)}return Vv(r,t),r}function Zd(n,t,e){return t.type==="Mesh"?Qd(n,t,e):t.type==="TextFrame"?Lo.createFromState(n,t,e):t.type==="Empty"?Rr.createFromState(n,t):t.type==="PointLight"?Ei.createFromState(n,t,e):t.type==="SpotLight"?_i.createFromState(n,t,e):t.type==="DirectionalLight"?Bi.createFromState(n,t,e):Wo.is(t.type)?zr.createFromState(n,t):(console.error(t),new Rr)}function Uv(n,t){t.uniforms[`f${t.id}_transmissionSamplerMap`].value=n.texture,t.uniforms[`f${t.id}_transmissionDepthMap`].value=n.depthTexture}function em(n,t,e){if(!e.userData.layers)return!1;let r=!1,o=e.userData.layers.getLayersOfType("transmission");return o.length>0?(t.layers.set(3),r=!0,n!==void 0&&o.forEach(i=>Uv(n,i))):t.layers.set(0),r}function tm(n,t){let e=!1;return t.traverseEntity(r=>{if(r instanceof Ze)if(Array.isArray(r.material))for(let o=0;o<r.material.length;o++)em(n,r,r.material[o])&&(e=!0);else em(n,r,r.material)&&(e=!0)}),e}function rm(n,t){"material"in n&&jv(n.material,t),"geometry"in n&&n.geometry.dispose()}function jv(n,t){uc(n).forEach(e=>{t.isSharedMaterial(e)||e.dispose()})}var om=new Vt.Vector3,lc=class extends wa(Vt.Scene){constructor(e,r){super();this.objectType="Scene";this.alpha=1;this.backupFog=new Vt.Fog(16777215,.1,2e3);this.fogUseBGColor=!1;this.wireframeState=!1;this.needsTransmissionDirty=!0;this._needsTransmission=!1;this._color=new Vt.Color(1,0,0);this.bgColor=new Vt.Color(1,1,1);this.entityByUuid={};this.ambientLight=new Vt.HemisphereLight(13882323,8553090,.75),this.ambientLight.name="Default Ambient Light",this.personalCamera=this.createPersonalCamera(),this.activeCamera=this.personalCamera,this.sharedAssetManager=r,this.init(e,r)}needsTransmission(e){return this.needsTransmissionDirty&&(this._needsTransmission=tm(e,this),e!==void 0&&(this.needsTransmissionDirty=!1)),this._needsTransmission}find(e){if(e===""||e===void 0)return;let r=this.entityByUuid[e];return r===void 0?this.getObjectByProperty("uuid",e):r}get color(){return this._color}set color(e){this.fogUseBGColor===!0&&this.backupFog.color.copy(e),this._color.copy(e)}get enableFog(){return this.fog!==null}set enableFog(e){this.fog=e===!0?this.backupFog:null}init(e,r){if(this.createChildrenObjects(e.objects,this,r),this.personalCamera.removeFromParent(),this.add(this.personalCamera),this.ambientLight.removeFromParent(),this.add(this.ambientLight),this.setBackgroundColor(We(e.backgroundColor,r)),this.updateFog(e.fog,r),this.updateAmbientLight(e.environment.ambientLight,r),this.activeCamera=this.personalCamera,e.publish.playCamera!==null){let o=this.find(e.publish.playCamera);o instanceof zr&&this.switchActiveCamera(o)}this.traverse(o=>{vr(o)&&o.recomputeBoolean()})}clearScene(e){this.traverseEntity(r=>{rm(r,e)});for(let r of this.children)Wt(r)&&r.removeFromParent()}resetAfterClear(e,r){this.init(e,r)}createPersonalCamera(){let e=zr.createFromState(lc.PERSONAL_CAMERA_ID,{...qs.defaultData,name:"Personal Camera"});return e.enableHelper=!1,e.objectHelper.visible=!1,delete e.isEntity,this.registerObjectCreatedInLegacy(e),e}raycast(e){let r=[],o=i=>{for(let s of i.children)Wt(s)&&!s.raycastLock&&s.visible&&((br(s)||Gr(s)&&s.enableHelper&&s.objectHelper.parent)&&e.intersectObject(s,!1,r),o(s))};return o(this),r}traverseEntity(e){for(let r of this.children)Wt(r)&&r.traverseEntity(e)}updateFog(e,r){this.enableFog=e.enabled,this.fogUseBGColor=e.useBackgroundColor,e.useBackgroundColor?this.backupFog.color.set(this.bgColor):this.backupFog.color=We(e.color,r),this.backupFog.near=e.near,this.backupFog.far=e.far}toJSON(e){return{}}fromJSON(e){return this}dispose(){this.clearScene(this.sharedAssetManager),this.sharedAssetManager.dispose()}updateAmbientLight(e,r){yd(this.ambientLight,e,r),e.groundColor!==void 0&&(this.ambientLight.groundColor=We(e.groundColor,r)),e.enabled!==void 0&&(this.ambientLight.visible=e.enabled)}switchActiveCamera(e){this.activeCamera!==this.personalCamera&&(this.activeCamera.enableHelper=!0),this.activeCamera=e,e.enableHelper=!1}setBackgroundColor(e){this.bgColor=e,this.alpha=e.a}createChildrenObjects(e,r,o){for(let i of e)this.createChildObject(i.id,i.data,i.children,r,o)}registerObjectCreatedInLegacy(e){this.entityByUuid[e.uuid]=e}unregisterObject(e){delete this.entityByUuid[e.uuid];for(let r of e.children)this.unregisterObject(r)}createChildObject(e,r,o,i,s){let a=Zd(e,r,s);return a&&(this.entityByUuid[e]=a,i.add(a),vr(i)&&br(a)&&(a.prevBooleanObjectParent=i),this.createChildrenObjects(o,a,s)),a}getCenter(e){let r=[];for(let i=0,s=e.length;i<s;++i){let{id:a,recursive:l}=e[i],c=this.find(a),h=l?c.recursiveBBox:c.singleBBox;r.push(...h.vertices)}let o=new Vt.Box3;return o.setFromPoints(r),o.getCenter(om),om}copyMatrixWorld(e,r){if(e===null){r.identity();return}let o=this.find(e);o?r.copy(o.matrixWorld):r.identity()}copyParentMatrixWorld(e,r){if(e===null){r.identity();return}let o=this.find(e)?.parent;o?r.copy(o.matrixWorld):r.identity()}traverseMaterial(e){this.traverseEntity(r=>{if(r instanceof Ze)if(Array.isArray(r.material))for(let o=0;o<r.material.length;o++)e(r.material[o]);else e(r.material)})}updateCanvasSize(e,r){this.activeCamera.setViewplaneSize(e,r);let o,i;e>=r?(o=r/e,i=1):(o=1,i=e/r),this.traverseMaterial(s=>{s.layersList.getLayersOfType("transmission").forEach(l=>{l.uniforms[`f${l.id}_aspectRatio`].value.x=o,l.uniforms[`f${l.id}_aspectRatio`].value.y=i})})}},zn=lc;zn.PERSONAL_CAMERA_ID="f23858d0-4a3b-4bd8-8173-66ed0af7f6fb-personalCamera";var im=require("three/examples/jsm/loaders/DRACOLoader.js");var no;function kv(){return no||(no=new im.DRACOLoader,no.setDecoderPath("https://www.gstatic.com/draco/versioned/decoders/1.5.2/").preload()),no.decoderPending}async function Hv(n){if(no){let t={attributeIDs:no.defaultAttributeIDs,attributeTypes:no.defaultAttributeTypes,useUniqueIDs:!1},e;try{e=await no.decodeGeometry(new Int8Array(n).buffer,t)}catch(r){console.error(r)}if(e)return{index:e.index?{array:e.index.array}:void 0,attributes:Object.entries(e.attributes).map(([r,o])=>({name:r,itemSize:o.itemSize,array:o.array}))}}return null}async function nm(n){let[t,e]=Ya(Rs.deserialize(new Uint8Array(n))),r=[];t.scene.objects.traverse((o,i)=>{i.type==="Mesh"&&i.geometry.type==="NonParametricGeometry"&&i.geometry.data.draco!==void 0&&r.push(i)}),r.length&&await kv();for(let o of r){let i=await Hv(Xa(o.geometry.data.draco));if(i){i.index&&(o.geometry.data.index={array:i.index.array,itemSize:1,normalized:!1,type:"Uint32Array"});let s={};i.attributes.forEach(({name:a,array:l,itemSize:c})=>{s[a]={array:l,itemSize:c,type:"Float32Array",normalized:!1}}),o.geometry.data.attributes=s,o.geometry.data.draco=void 0}}return e.result().data}var cc=new Map,Rn={url:"head",time:0,data:null,next:null,prev:null},Vi={url:"tail",time:1/0,data:null,next:null,prev:null};Rn.next=Vi;Vi.prev=Rn;var sm=0;function Ni(n){if(typeof n=="string")return n;let t=Date.now(),e=cc.get(n);return e===void 0?(e={url:URL.createObjectURL(new Blob([n])),data:n,time:t,next:null,prev:null},cc.set(n,e)):(e.time=t,e.prev.next=e.next,e.next.prev=e.prev),e.prev=Vi.prev,e.next=Vi,Vi.prev.next=e,Vi.prev=e,t-sm>1e3*10&&(sm=t+1e3,setTimeout(()=>{let r=Date.now(),o=Rn.next;for(;o.time<r-1e3*10;)URL.revokeObjectURL(o.url),cc.delete(o.data),o=o.next,o.prev=Rn,Rn.next=o},900)),e.url}var nr=require("three");var am=new lt,_a=class extends It{},Ga=class{constructor(t){this.materials={};this.images={};this.colors={};this.transmissionRenderTarget=new nr.WebGLRenderTarget(2048,2048,{generateMipmaps:!0,minFilter:nr.LinearMipmapLinearFilter,magFilter:nr.LinearFilter,wrapS:nr.ClampToEdgeWrapping,wrapT:nr.ClampToEdgeWrapping}),this.transmissionRenderTarget.depthTexture=new nr.DepthTexture(2048,2048),this.penumbraSizeNode=new at(5,t.penumbraSize),this.reset(t)}reset(t){for(let[e,r]of Object.entries(t.images))this.addImage(e,r.data);for(let[e,r]of Object.entries(t.colors))this.addColor(e,r);for(let[e,r]of Object.entries(t.materials))this.addMaterial(e,Jl(r,this))}get transmissionSamplerMap(){return this.transmissionRenderTarget.texture}get transmissionDepthMap(){return this.transmissionRenderTarget.depthTexture}addMaterial(t,e){e.uuid=t,this.materials[t]=e}deleteMaterial(t){this.materials[t]&&(this.materials[t].dispose(),delete this.materials[t])}isSharedMaterial(t){return t.uuid in this.materials||t===am}getMaterial(t){let e=this.materials[t];return e}getMaterialOrDeletedPlaceholder(t){return this.materials[t]??am}getMaterials(){return this.materials}addImage(t,e){if(this.images[t])return this.images[t].onload=()=>{this.onImageLoad&&this.onImageLoad()},this.images[t].src=Ni(e),!0;{let r=new Image;return r.src=Ni(e),r.onload=()=>{this.onImageLoad&&this.onImageLoad()},this.images[t]=r,!1}}deleteImage(t){this.images[t]&&delete this.images[t]}getDefaultImage(){return this.images.image_0}getImage(t){return this.images[t]}getImages(){return this.images}addColor(t,e){return this.colors[t]?("a"in e?this.colors[t].setRGBA(e.r,e.g,e.b,e.a):this.colors[t].setRGBA(e.r,e.g,e.b,1),!0):("a"in e?this.colors[t]=new _a(e.r,e.g,e.b,e.a):this.colors[t]=new _a(e.r,e.g,e.b,1),!1)}updateColor(t,e){if(this.colors[t]){let r=this.colors[t];return this.colors[t].r=e.r??r.r,this.colors[t].g=e.g??r.g,this.colors[t].b=e.b??r.b,this.colors[t].a=e.a??r.a,!0}return!1}deleteColor(t){this.colors[t]&&delete this.colors[t]}getColor(t){return this.colors[t]}dispose(){Object.keys(this.materials).forEach(e=>this.deleteMaterial(e)),this.transmissionRenderTarget.depthTexture.dispose(),this.transmissionRenderTarget.dispose(),this.onImageLoad=void 0}};var qv=require("three"),Wv=require("three/examples/jsm/utils/BufferGeometryUtils.js");function lm(n){let t;if(!!n.index)for(let e=0;e<n.index.array.length;e+=3)t=n.index.array[e],n.index.array[e]=n.index.array[e+2],n.index.array[e+2]=t}var Fn=require("three");function cm(n){let t=new Set;return n.traverse(e=>{if(br(e))if(Xe(e.material))e.material.forEach(r=>{let o=r;t.has(o)||t.add(o)});else{let r=e.material;t.has(r)||t.add(r)}}),t.forEach(e=>{if(e instanceof Array)return;let r=e.onBeforeCompile.bind(e);$v(e)?(Object.assign(e,{isMeshStandardMaterial:!0,isMeshPhysicalMaterial:!0,transmission:1,attenuationColor:new Fn.Color,specularColor:new Fn.Color}),e.onBeforeCompile=(o,i)=>{r&&r(o,i),o.uniforms=Object.assign(Fn.ShaderLib.physical.uniforms,o.uniforms),e.userData.layers.getLayersOfType("transmission").forEach(s=>{o.uniforms.transmissionSamplerMap.value&&(s.uniforms["f"+s.id+"_transmissionSamplerMap"].value=o.uniforms.transmissionSamplerMap.value,s.uniforms["f"+s.id+"_transmissionSamplerSize"].value=o.uniforms.transmissionSamplerSize.value)})}):Jv(e)||(e.onBeforeCompile=(o,i)=>{r&&r(o,i),e.transparent=!1})}),n}function $v(n){return n.userData.layers.getLayersOfType("transmission").length>0}function Jv(n){let t=n.userData.layers.head,e=0;for(;t!==void 0;){if(t.type!=="light"&&t.type!=="fresnel"){let r=t.uniforms["f"+t.id+"_alpha"];r&&(e+=(1-e)*r.value)}t=t.next}return e<1}function hm(n){return n.traverse(t=>{if(t.type==="Camera"){let e=t;e.type=e.cameraType}}),n}function pm(n){let t=[],e=(r,o=0)=>{let i=o>0?r+o:r;return t.includes(i)?e(r,o+1):i};return n.traverse(r=>{if(t.includes(r.name)){let o=r.name,i=e(r.name);if(r.name=i,r.isMesh){let s=r;s.material instanceof Array?s.material.forEach(a=>{a.name=a.name.replace(o,i)}):s.material.isAsset||(s.material.name=s.material.name.replace(o,i))}}t.push(r.name)}),n}var um=require("three/examples/jsm/utils/BufferGeometryUtils.js");function dm(n){let t=[];return n.traverse(e=>{e instanceof So&&t.push(e)}),t.forEach(e=>{let r=e.object,o=e.children,i=o.map(a=>{a.updateMatrix();let l=a.geometry.clone().applyMatrix4(a.matrix);return a.matrix.determinant()<0&&lm(l),l}),s=(0,um.mergeBufferGeometries)(e.parameters.hideBase?i:[r.geometry,...i]);r.geometry=s,r.material=o[0].material,r.remove(e)}),n}function mm(n){return n.traverse(t=>{t.matrixAutoUpdate=!0}),n}var fm="The SplineLoader only accepts .splinecode files that are generated from Spline export panel.",za=class extends Ra.Loader{load(t,e,r,o=console.error){let i=new Ra.FileLoader(this.manager);i.setPath(this.path),i.setResponseType("arraybuffer"),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials),t.endsWith(".spline")?console.warn(fm+" The .spline files are only meant to be used by the Editor."):t.endsWith(".splinecode")||console.warn(fm),i.load(t,async s=>{try{if(typeof s=="string")throw new Error("The .spline file is not binary!");let a=await this.parse(s);e(a)}catch(a){o(a)}},r,o)}async parse(t){let e=await nm(t),r=new Ga(e.shared);Object.values(r.getMaterials()).forEach(s=>Object.assign(s,{isAsset:!0}));let o=new zn(e.scene,r);o.remove(o.personalCamera),e.scene.environment.ambientLight.enabled||o.remove(o.ambientLight);let i=e.scene.publish.playCamera;if(i){let s=o.find(i);s&&gd(s)&&Object.assign(s,{makeDefault:!0})}return o=dm(o),o=cm(o),o=hm(o),o=pm(o),o=mm(o),o}};
|