shaders 2.5.133 → 2.5.135

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/js/bundle.js CHANGED
@@ -1,4 +1,4 @@
1
- /* shaders@2.5.133/js — ESM bundle for CDN consumption (no bundler required). https://shaders.com */
1
+ /* shaders@2.5.135/js — ESM bundle for CDN consumption (no bundler required). https://shaders.com */
2
2
  var fg=0,Sp=1,mg=2;var pA=0,kl=1,gg=2,Zr=3,Si=0,es=1,si=2,ii=0,gi=1,Vo=2,zo=3,Go=4,Ka=5,xg=6,ci=100,Tp=101,Mp=102,yg=103,bg=104,bo=200,wp=201,Ap=202,Cp=203,Nl=204,Pl=205,Ep=206,Rp=207,Np=208,Pp=209,Ip=210,gb=211,xb=212,yb=213,bb=214,lu=0,cu=1,uu=2,Lo=3,du=4,hu=5,pu=6,fu=7,Su=0,vg=1,_g=2,Bs=0,Dp=1,Tu=2,Mu=3,wu=4,Sg=5,Au=6,Cu=7;var Tg=300,Er=301,Kr=302,Vl=303,zl=304,Ho=306,jr=1e3,Fi=1001,$a=1002,Cn=1003,Fp=1004;var Jr=1005;var Yt=1006,Gl=1007;var Ti=1008,fA=1008,ns=1009,Wo=1010,$o=1011,fr=1012,Ds=1013,Kn=1014,en=1015,ss=1016,Eu=1017,Ru=1018,Li=1020,Nu=35902,Pu=35899,Qd=1021,Ja=1022,Hn=1023,ni=1026,xi=1027,vo=1028,qo=1029,hs=1030,Xo=1031,Mg=1032,Hl=1033,Yo=33776,jo=33777,Zo=33778,Ko=33779,Iu=35840,Du=35841,Fu=35842,Uu=35843,Wl=36196,$l=37492,ql=37496,Xl=37488,Yl=37489,Jo=37490,jl=37491,Zl=37808,Kl=37809,Jl=37810,Ql=37811,ec=37812,tc=37813,nc=37814,sc=37815,ic=37816,rc=37817,oc=37818,ac=37819,lc=37820,cc=37821,uc=36492,dc=36494,hc=36495,pc=36283,fc=36284,Qo=36285,mc=36286;var lp=2300,Im=2301,Nm=2302,lb=2303,cb=2400,ub=2401,db=2402;var mA=3200;var Rr=0,wg=1,Bi="",ts="srgb",Il="srgb-linear",Dl="linear",$t="srgb",Ag="",vb="rg",gA="ga",xA=0,El=7680,yA=7681,bA=7682,vA=7683,_A=34055,SA=34056,TA=5386,MA=512,wA=513,AA=514,CA=515,EA=516,RA=517,NA=518,Dm=519,Up=512,eh=513,Lp=514,ea=515,Lu=516,Bp=517,_o=518,Op=519,mu=35044,th=35048;var Cg="300 es",_i=2e3,wr=2001,So={COMPUTE:"compute",RENDER:"render"};var gc={TEXTURE_COMPARE:"depthTextureCompare"};function KU(s){for(let e=s.length-1;e>=0;--e)if(s[e]>=65535)return!0;return!1}function nh(s){return ArrayBuffer.isView(s)&&!(s instanceof DataView)}function Gd(s){return document.createElementNS("http://www.w3.org/1999/xhtml",s)}function Eg(){let s=Gd("canvas");return s.style.display="block",s}var Ww={},Hd=null;function gu(...s){let e="THREE."+s.shift();Hd?Hd("log",e,...s):console.log(e,...s)}function PA(s){let e=s[0];if(typeof e=="string"&&e.startsWith("TSL:")){let t=s[1];t&&t.isStackTrace?s[0]+=" "+t.getLocation():s[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return s}function lt(...s){s=PA(s);let e="THREE."+s.shift();if(Hd)Hd("warn",e,...s);else{let t=s[0];t&&t.isStackTrace?console.warn(t.getError(e)):console.warn(e,...s)}}function Ke(...s){s=PA(s);let e="THREE."+s.shift();if(Hd)Hd("error",e,...s);else{let t=s[0];t&&t.isStackTrace?console.error(t.getError(e)):console.error(e,...s)}}function On(...s){let e=s.join(" ");e in Ww||(Ww[e]=!0,lt(...s))}function _b(){return typeof self<"u"&&typeof self.scheduler<"u"&&typeof self.scheduler.yield<"u"?self.scheduler.yield():new Promise(s=>{requestAnimationFrame(s)})}function IA(s,e,t){return new Promise(function(n,i){function r(){switch(s.clientWaitSync(e,s.SYNC_FLUSH_COMMANDS_BIT,0)){case s.WAIT_FAILED:i();break;case s.TIMEOUT_EXPIRED:setTimeout(r,t);break;default:n()}}setTimeout(r,t)})}var kp={[lu]:cu,[uu]:pu,[du]:fu,[Lo]:hu,[cu]:lu,[pu]:uu,[fu]:du,[hu]:Lo},Ji=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){let n=this._listeners;return n===void 0?!1:n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){let n=this._listeners;if(n===void 0)return;let i=n[e];if(i!==void 0){let r=i.indexOf(t);r!==-1&&i.splice(r,1)}}dispatchEvent(e){let t=this._listeners;if(t===void 0)return;let n=t[e.type];if(n!==void 0){e.target=this;let i=n.slice(0);for(let r=0,o=i.length;r<o;r++)i[r].call(this,e);e.target=null}}},Ii=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"],$w=1234567,op=Math.PI/180,qa=180/Math.PI;function Ha(){let s=Math.random()*4294967295|0,e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,n=Math.random()*4294967295|0;return(Ii[s&255]+Ii[s>>8&255]+Ii[s>>16&255]+Ii[s>>24&255]+"-"+Ii[e&255]+Ii[e>>8&255]+"-"+Ii[e>>16&15|64]+Ii[e>>24&255]+"-"+Ii[t&63|128]+Ii[t>>8&255]+"-"+Ii[t>>16&255]+Ii[t>>24&255]+Ii[n&255]+Ii[n>>8&255]+Ii[n>>16&255]+Ii[n>>24&255]).toLowerCase()}function Gn(s,e,t){return Math.max(e,Math.min(t,s))}function Sb(s,e){return(s%e+e)%e}function JU(s,e,t,n,i){return n+(s-e)*(i-n)/(t-e)}function QU(s,e,t){return s!==e?(t-s)/(e-s):0}function ap(s,e,t){return(1-t)*s+t*e}function eL(s,e,t,n){return ap(s,e,1-Math.exp(-t*n))}function tL(s,e=1){return e-Math.abs(Sb(s,e*2)-e)}function nL(s,e,t){return s<=e?0:s>=t?1:(s=(s-e)/(t-e),s*s*(3-2*s))}function sL(s,e,t){return s<=e?0:s>=t?1:(s=(s-e)/(t-e),s*s*s*(s*(s*6-15)+10))}function iL(s,e){return s+Math.floor(Math.random()*(e-s+1))}function rL(s,e){return s+Math.random()*(e-s)}function oL(s){return s*(.5-Math.random())}function aL(s){s!==void 0&&($w=s);let e=$w+=1831565813;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}function lL(s){return s*op}function cL(s){return s*qa}function uL(s){return(s&s-1)===0&&s!==0}function dL(s){return Math.pow(2,Math.ceil(Math.log(s)/Math.LN2))}function hL(s){return Math.pow(2,Math.floor(Math.log(s)/Math.LN2))}function pL(s,e,t,n,i){let r=Math.cos,o=Math.sin,a=r(t/2),l=o(t/2),c=r((e+n)/2),u=o((e+n)/2),h=r((e-n)/2),p=o((e-n)/2),f=r((n-e)/2),m=o((n-e)/2);switch(i){case"XYX":s.set(a*u,l*h,l*p,a*c);break;case"YZY":s.set(l*p,a*u,l*h,a*c);break;case"ZXZ":s.set(l*h,l*p,a*u,a*c);break;case"XZX":s.set(a*u,l*m,l*f,a*c);break;case"YXY":s.set(l*f,a*u,l*m,a*c);break;case"ZYZ":s.set(l*m,l*f,a*u,a*c);break;default:lt("MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+i)}}function Ki(s,e){switch(e.constructor){case Float32Array:return s;case Uint32Array:return s/4294967295;case Uint16Array:return s/65535;case Uint8Array:return s/255;case Int32Array:return Math.max(s/2147483647,-1);case Int16Array:return Math.max(s/32767,-1);case Int8Array:return Math.max(s/127,-1);default:throw new Error("THREE.MathUtils: Invalid component type.")}}function Pn(s,e){switch(e.constructor){case Float32Array:return s;case Uint32Array:return Math.round(s*4294967295);case Uint16Array:return Math.round(s*65535);case Uint8Array:return Math.round(s*255);case Int32Array:return Math.round(s*2147483647);case Int16Array:return Math.round(s*32767);case Int8Array:return Math.round(s*127);default:throw new Error("THREE.MathUtils: Invalid component type.")}}var Tb={DEG2RAD:op,RAD2DEG:qa,generateUUID:Ha,clamp:Gn,euclideanModulo:Sb,mapLinear:JU,inverseLerp:QU,lerp:ap,damp:eL,pingpong:tL,smoothstep:nL,smootherstep:sL,randInt:iL,randFloat:rL,randFloatSpread:oL,seededRandom:aL,degToRad:lL,radToDeg:cL,isPowerOfTwo:uL,ceilPowerOfTwo:dL,floorPowerOfTwo:hL,setQuaternionFromProperEuler:pL,normalize:Pn,denormalize:Ki},on=class s{static{s.prototype.isVector2=!0}constructor(e=0,t=0){this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error("THREE.Vector2: index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("THREE.Vector2: index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){let t=this.x,n=this.y,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6],this.y=i[1]*t+i[4]*n+i[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Gn(this.x,e.x,t.x),this.y=Gn(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=Gn(this.x,e,t),this.y=Gn(this.y,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Gn(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(Gn(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){let n=Math.cos(t),i=Math.sin(t),r=this.x-e.x,o=this.y-e.y;return this.x=r*n-o*i+e.x,this.y=r*i+o*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},mo=class{constructor(e=0,t=0,n=0,i=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=i}static slerpFlat(e,t,n,i,r,o,a){let l=n[i+0],c=n[i+1],u=n[i+2],h=n[i+3],p=r[o+0],f=r[o+1],m=r[o+2],g=r[o+3];if(h!==g||l!==p||c!==f||u!==m){let y=l*p+c*f+u*m+h*g;y<0&&(p=-p,f=-f,m=-m,g=-g,y=-y);let x=1-a;if(y<.9995){let b=Math.acos(y),v=Math.sin(b);x=Math.sin(x*b)/v,a=Math.sin(a*b)/v,l=l*x+p*a,c=c*x+f*a,u=u*x+m*a,h=h*x+g*a}else{l=l*x+p*a,c=c*x+f*a,u=u*x+m*a,h=h*x+g*a;let b=1/Math.sqrt(l*l+c*c+u*u+h*h);l*=b,c*=b,u*=b,h*=b}}e[t]=l,e[t+1]=c,e[t+2]=u,e[t+3]=h}static multiplyQuaternionsFlat(e,t,n,i,r,o){let a=n[i],l=n[i+1],c=n[i+2],u=n[i+3],h=r[o],p=r[o+1],f=r[o+2],m=r[o+3];return e[t]=a*m+u*h+l*f-c*p,e[t+1]=l*m+u*p+c*h-a*f,e[t+2]=c*m+u*f+a*p-l*h,e[t+3]=u*m-a*h-l*p-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,n,i){return this._x=e,this._y=t,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){let n=e._x,i=e._y,r=e._z,o=e._order,a=Math.cos,l=Math.sin,c=a(n/2),u=a(i/2),h=a(r/2),p=l(n/2),f=l(i/2),m=l(r/2);switch(o){case"XYZ":this._x=p*u*h+c*f*m,this._y=c*f*h-p*u*m,this._z=c*u*m+p*f*h,this._w=c*u*h-p*f*m;break;case"YXZ":this._x=p*u*h+c*f*m,this._y=c*f*h-p*u*m,this._z=c*u*m-p*f*h,this._w=c*u*h+p*f*m;break;case"ZXY":this._x=p*u*h-c*f*m,this._y=c*f*h+p*u*m,this._z=c*u*m+p*f*h,this._w=c*u*h-p*f*m;break;case"ZYX":this._x=p*u*h-c*f*m,this._y=c*f*h+p*u*m,this._z=c*u*m-p*f*h,this._w=c*u*h+p*f*m;break;case"YZX":this._x=p*u*h+c*f*m,this._y=c*f*h+p*u*m,this._z=c*u*m-p*f*h,this._w=c*u*h-p*f*m;break;case"XZY":this._x=p*u*h-c*f*m,this._y=c*f*h-p*u*m,this._z=c*u*m+p*f*h,this._w=c*u*h+p*f*m;break;default:lt("Quaternion: .setFromEuler() encountered an unknown order: "+o)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,i=Math.sin(n);return this._x=e.x*i,this._y=e.y*i,this._z=e.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],i=t[4],r=t[8],o=t[1],a=t[5],l=t[9],c=t[2],u=t[6],h=t[10],p=n+a+h;if(p>0){let f=.5/Math.sqrt(p+1);this._w=.25/f,this._x=(u-l)*f,this._y=(r-c)*f,this._z=(o-i)*f}else if(n>a&&n>h){let f=2*Math.sqrt(1+n-a-h);this._w=(u-l)/f,this._x=.25*f,this._y=(i+o)/f,this._z=(r+c)/f}else if(a>h){let f=2*Math.sqrt(1+a-n-h);this._w=(r-c)/f,this._x=(i+o)/f,this._y=.25*f,this._z=(l+u)/f}else{let f=2*Math.sqrt(1+h-n-a);this._w=(o-i)/f,this._x=(r+c)/f,this._y=(l+u)/f,this._z=.25*f}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<1e-8?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Gn(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let i=Math.min(1,t/n);return this.slerp(e,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,i=e._y,r=e._z,o=e._w,a=t._x,l=t._y,c=t._z,u=t._w;return this._x=n*u+o*a+i*c-r*l,this._y=i*u+o*l+r*a-n*c,this._z=r*u+o*c+n*l-i*a,this._w=o*u-n*a-i*l-r*c,this._onChangeCallback(),this}slerp(e,t){let n=e._x,i=e._y,r=e._z,o=e._w,a=this.dot(e);a<0&&(n=-n,i=-i,r=-r,o=-o,a=-a);let l=1-t;if(a<.9995){let c=Math.acos(a),u=Math.sin(c);l=Math.sin(l*c)/u,t=Math.sin(t*c)/u,this._x=this._x*l+n*t,this._y=this._y*l+i*t,this._z=this._z*l+r*t,this._w=this._w*l+o*t,this._onChangeCallback()}else this._x=this._x*l+n*t,this._y=this._y*l+i*t,this._z=this._z*l+r*t,this._w=this._w*l+o*t,this.normalize();return this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),i=Math.sqrt(1-n),r=Math.sqrt(n);return this.set(i*Math.sin(e),i*Math.cos(e),r*Math.sin(t),r*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},ge=class s{static{s.prototype.isVector3=!0}constructor(e=0,t=0,n=0){this.x=e,this.y=t,this.z=n}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("THREE.Vector3: index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("THREE.Vector3: index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(qw.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(qw.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,i=this.z,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6]*i,this.y=r[1]*t+r[4]*n+r[7]*i,this.z=r[2]*t+r[5]*n+r[8]*i,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,i=this.z,r=e.elements,o=1/(r[3]*t+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*t+r[4]*n+r[8]*i+r[12])*o,this.y=(r[1]*t+r[5]*n+r[9]*i+r[13])*o,this.z=(r[2]*t+r[6]*n+r[10]*i+r[14])*o,this}applyQuaternion(e){let t=this.x,n=this.y,i=this.z,r=e.x,o=e.y,a=e.z,l=e.w,c=2*(o*i-a*n),u=2*(a*t-r*i),h=2*(r*n-o*t);return this.x=t+l*c+o*h-a*u,this.y=n+l*u+a*c-r*h,this.z=i+l*h+r*u-o*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){let t=this.x,n=this.y,i=this.z,r=e.elements;return this.x=r[0]*t+r[4]*n+r[8]*i,this.y=r[1]*t+r[5]*n+r[9]*i,this.z=r[2]*t+r[6]*n+r[10]*i,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Gn(this.x,e.x,t.x),this.y=Gn(this.y,e.y,t.y),this.z=Gn(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=Gn(this.x,e,t),this.y=Gn(this.y,e,t),this.z=Gn(this.z,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Gn(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,i=e.y,r=e.z,o=t.x,a=t.y,l=t.z;return this.x=i*l-r*a,this.y=r*o-n*l,this.z=n*a-i*o,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return Vy.copy(this).projectOnVector(e),this.sub(Vy)}reflect(e){return this.sub(Vy.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(Gn(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,i=this.z-e.z;return t*t+n*n+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,n){let i=Math.sin(t)*e;return this.x=i*Math.sin(n),this.y=Math.cos(t)*e,this.z=i*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){let t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),i=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=i,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let e=Math.random()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},Vy=new ge,qw=new mo,Tn=class s{static{s.prototype.isMatrix3=!0}constructor(e,t,n,i,r,o,a,l,c){this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,n,i,r,o,a,l,c)}set(e,t,n,i,r,o,a,l,c){let u=this.elements;return u[0]=e,u[1]=i,u[2]=a,u[3]=t,u[4]=r,u[5]=l,u[6]=n,u[7]=o,u[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(e){let t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,i=t.elements,r=this.elements,o=n[0],a=n[3],l=n[6],c=n[1],u=n[4],h=n[7],p=n[2],f=n[5],m=n[8],g=i[0],y=i[3],x=i[6],b=i[1],v=i[4],_=i[7],M=i[2],T=i[5],w=i[8];return r[0]=o*g+a*b+l*M,r[3]=o*y+a*v+l*T,r[6]=o*x+a*_+l*w,r[1]=c*g+u*b+h*M,r[4]=c*y+u*v+h*T,r[7]=c*x+u*_+h*w,r[2]=p*g+f*b+m*M,r[5]=p*y+f*v+m*T,r[8]=p*x+f*_+m*w,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],o=e[4],a=e[5],l=e[6],c=e[7],u=e[8];return t*o*u-t*a*c-n*r*u+n*a*l+i*r*c-i*o*l}invert(){let e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],o=e[4],a=e[5],l=e[6],c=e[7],u=e[8],h=u*o-a*c,p=a*l-u*r,f=c*r-o*l,m=t*h+n*p+i*f;if(m===0)return this.set(0,0,0,0,0,0,0,0,0);let g=1/m;return e[0]=h*g,e[1]=(i*c-u*n)*g,e[2]=(a*n-i*o)*g,e[3]=p*g,e[4]=(u*t-i*l)*g,e[5]=(i*r-a*t)*g,e[6]=f*g,e[7]=(n*l-c*t)*g,e[8]=(o*t-n*r)*g,this}transpose(){let e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){let t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,n,i,r,o,a){let l=Math.cos(r),c=Math.sin(r);return this.set(n*l,n*c,-n*(l*o+c*a)+o+e,-i*c,i*l,-i*(-c*o+l*a)+a+t,0,0,1),this}scale(e,t){return On("Matrix3: .scale() is deprecated. Use .makeScale() instead."),this.premultiply(zy.makeScale(e,t)),this}rotate(e){return On("Matrix3: .rotate() is deprecated. Use .makeRotation() instead."),this.premultiply(zy.makeRotation(-e)),this}translate(e,t){return On("Matrix3: .translate() is deprecated. Use .makeTranslation() instead."),this.premultiply(zy.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){let t=this.elements,n=e.elements;for(let i=0;i<9;i++)if(t[i]!==n[i])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}},zy=new Tn,Xw=new Tn().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Yw=new Tn().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function fL(){let s={enabled:!0,workingColorSpace:Il,spaces:{},convert:function(i,r,o){return this.enabled===!1||r===o||!r||!o||(this.spaces[r].transfer===$t&&(i.r=Wa(i.r),i.g=Wa(i.g),i.b=Wa(i.b)),this.spaces[r].primaries!==this.spaces[o].primaries&&(i.applyMatrix3(this.spaces[r].toXYZ),i.applyMatrix3(this.spaces[o].fromXYZ)),this.spaces[o].transfer===$t&&(i.r=zd(i.r),i.g=zd(i.g),i.b=zd(i.b))),i},workingToColorSpace:function(i,r){return this.convert(i,this.workingColorSpace,r)},colorSpaceToWorking:function(i,r){return this.convert(i,r,this.workingColorSpace)},getPrimaries:function(i){return this.spaces[i].primaries},getTransfer:function(i){return i===Bi?Dl:this.spaces[i].transfer},getToneMappingMode:function(i){return this.spaces[i].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(i,r=this.workingColorSpace){return i.fromArray(this.spaces[r].luminanceCoefficients)},define:function(i){Object.assign(this.spaces,i)},_getMatrix:function(i,r,o){return i.copy(this.spaces[r].toXYZ).multiply(this.spaces[o].fromXYZ)},_getDrawingBufferColorSpace:function(i){return this.spaces[i].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(i=this.workingColorSpace){return this.spaces[i].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(i,r){return On("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),s.workingToColorSpace(i,r)},toWorkingColorSpace:function(i,r){return On("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),s.colorSpaceToWorking(i,r)}},e=[.64,.33,.3,.6,.15,.06],t=[.2126,.7152,.0722],n=[.3127,.329];return s.define({[Il]:{primaries:e,whitePoint:n,transfer:Dl,toXYZ:Xw,fromXYZ:Yw,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:ts},outputColorSpaceConfig:{drawingBufferColorSpace:ts}},[ts]:{primaries:e,whitePoint:n,transfer:$t,toXYZ:Xw,fromXYZ:Yw,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:ts}}}),s}var dn=fL();function Wa(s){return s<.04045?s*.0773993808:Math.pow(s*.9478672986+.0521327014,2.4)}function zd(s){return s<.0031308?s*12.92:1.055*Math.pow(s,.41666)-.055}var Ed,Fm=class{static getDataURL(e,t="image/png"){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;let n;if(e instanceof HTMLCanvasElement)n=e;else{Ed===void 0&&(Ed=Gd("canvas")),Ed.width=e.width,Ed.height=e.height;let i=Ed.getContext("2d");e instanceof ImageData?i.putImageData(e,0,0):i.drawImage(e,0,0,e.width,e.height),n=Ed}return n.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap){let t=Gd("canvas");t.width=e.width,t.height=e.height;let n=t.getContext("2d");n.drawImage(e,0,0,e.width,e.height);let i=n.getImageData(0,0,e.width,e.height),r=i.data;for(let o=0;o<r.length;o++)r[o]=Wa(r[o]/255)*255;return n.putImageData(i,0,0),t}else if(e.data){let t=e.data.slice(0);for(let n=0;n<t.length;n++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[n]=Math.floor(Wa(t[n]/255)*255):t[n]=Wa(t[n]);return{data:t,width:e.width,height:e.height}}else return lt("ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),e}},mL=0,Wd=class{constructor(e=null){this.isSource=!0,Object.defineProperty(this,"id",{value:mL++}),this.uuid=Ha(),this.data=e,this.dataReady=!0,this.version=0}getSize(e){let t=this.data;return typeof HTMLVideoElement<"u"&&t instanceof HTMLVideoElement?e.set(t.videoWidth,t.videoHeight,0):typeof VideoFrame<"u"&&t instanceof VideoFrame?e.set(t.displayWidth,t.displayHeight,0):t!==null?e.set(t.width,t.height,t.depth||0):e.set(0,0,0),e}set needsUpdate(e){e===!0&&this.version++}toJSON(e){let t=e===void 0||typeof e=="string";if(!t&&e.images[this.uuid]!==void 0)return e.images[this.uuid];let n={uuid:this.uuid,url:""},i=this.data;if(i!==null){let r;if(Array.isArray(i)){r=[];for(let o=0,a=i.length;o<a;o++)i[o].isDataTexture?r.push(Gy(i[o].image)):r.push(Gy(i[o]))}else r=Gy(i);n.url=r}return t||(e.images[this.uuid]=n),n}};function Gy(s){return typeof HTMLImageElement<"u"&&s instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&s instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&s instanceof ImageBitmap?Fm.getDataURL(s):s.data?{data:Array.from(s.data),width:s.width,height:s.height,type:s.data.constructor.name}:(lt("Texture: Unable to serialize Texture."),{})}var gL=0,Hy=new ge,Ss=class s extends Ji{constructor(e=s.DEFAULT_IMAGE,t=s.DEFAULT_MAPPING,n=Fi,i=Fi,r=Yt,o=Ti,a=Hn,l=ns,c=s.DEFAULT_ANISOTROPY,u=Bi){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:gL++}),this.uuid=Ha(),this.name="",this.source=new Wd(e),this.mipmaps=[],this.mapping=t,this.channel=0,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=o,this.anisotropy=c,this.format=a,this.internalFormat=null,this.type=l,this.offset=new on(0,0),this.repeat=new on(1,1),this.center=new on(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Tn,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=u,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(e&&e.depth&&e.depth>1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(Hy).x}get height(){return this.source.getSize(Hy).y}get depth(){return this.source.getSize(Hy).z}get image(){return this.source.data}set image(e){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.normalized=e.normalized,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(let t in e){let n=e[t];if(n===void 0){lt(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}let i=this[t];if(i===void 0){lt(`Texture.setValues(): property '${t}' does not exist.`);continue}i&&n&&i.isVector2&&n.isVector2||i&&n&&i.isVector3&&n.isVector3||i&&n&&i.isMatrix3&&n.isMatrix3?i.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e=="string";if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let n={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(this.mapping!==Tg)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case jr:e.x=e.x-Math.floor(e.x);break;case Fi:e.x=e.x<0?0:1;break;case $a:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case jr:e.y=e.y-Math.floor(e.y);break;case Fi:e.y=e.y<0?0:1;break;case $a:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Ss.DEFAULT_IMAGE=null;Ss.DEFAULT_MAPPING=Tg;Ss.DEFAULT_ANISOTROPY=1;var vn=class s{static{s.prototype.isVector4=!0}constructor(e=0,t=0,n=0,i=1){this.x=e,this.y=t,this.z=n,this.w=i}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,n,i){return this.x=e,this.y=t,this.z=n,this.w=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("THREE.Vector4: index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("THREE.Vector4: index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){let t=this.x,n=this.y,i=this.z,r=this.w,o=e.elements;return this.x=o[0]*t+o[4]*n+o[8]*i+o[12]*r,this.y=o[1]*t+o[5]*n+o[9]*i+o[13]*r,this.z=o[2]*t+o[6]*n+o[10]*i+o[14]*r,this.w=o[3]*t+o[7]*n+o[11]*i+o[15]*r,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);let t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,n,i,r,l=e.elements,c=l[0],u=l[4],h=l[8],p=l[1],f=l[5],m=l[9],g=l[2],y=l[6],x=l[10];if(Math.abs(u-p)<.01&&Math.abs(h-g)<.01&&Math.abs(m-y)<.01){if(Math.abs(u+p)<.1&&Math.abs(h+g)<.1&&Math.abs(m+y)<.1&&Math.abs(c+f+x-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;let v=(c+1)/2,_=(f+1)/2,M=(x+1)/2,T=(u+p)/4,w=(h+g)/4,S=(m+y)/4;return v>_&&v>M?v<.01?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(v),i=T/n,r=w/n):_>M?_<.01?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(_),n=T/i,r=S/i):M<.01?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(M),n=w/r,i=S/r),this.set(n,i,r,t),this}let b=Math.sqrt((y-m)*(y-m)+(h-g)*(h-g)+(p-u)*(p-u));return Math.abs(b)<.001&&(b=1),this.x=(y-m)/b,this.y=(h-g)/b,this.z=(p-u)/b,this.w=Math.acos((c+f+x-1)/2),this}setFromMatrixPosition(e){let t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Gn(this.x,e.x,t.x),this.y=Gn(this.y,e.y,t.y),this.z=Gn(this.z,e.z,t.z),this.w=Gn(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=Gn(this.x,e,t),this.y=Gn(this.y,e,t),this.z=Gn(this.z,e,t),this.w=Gn(this.w,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(Gn(n,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this.w=e.w+(t.w-e.w)*n,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}},dr=class extends Ji{constructor(e=1,t=1,n={}){super(),n=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Yt,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1,useArrayDepthTexture:!1},n),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=n.depth,this.scissor=new vn(0,0,e,t),this.scissorTest=!1,this.viewport=new vn(0,0,e,t),this.textures=[];let i={width:e,height:t,depth:n.depth},r=new Ss(i),o=n.count;for(let a=0;a<o;a++)this.textures[a]=r.clone(),this.textures[a].isRenderTargetTexture=!0,this.textures[a].renderTarget=this;this._setTextureOptions(n),this.depthBuffer=n.depthBuffer,this.stencilBuffer=n.stencilBuffer,this.resolveDepthBuffer=n.resolveDepthBuffer,this.resolveStencilBuffer=n.resolveStencilBuffer,this._depthTexture=null,this.depthTexture=n.depthTexture,this.samples=n.samples,this.multiview=n.multiview,this.useArrayDepthTexture=n.useArrayDepthTexture}_setTextureOptions(e={}){let t={minFilter:Yt,generateMipmaps:!1,flipY:!1,internalFormat:null};e.mapping!==void 0&&(t.mapping=e.mapping),e.wrapS!==void 0&&(t.wrapS=e.wrapS),e.wrapT!==void 0&&(t.wrapT=e.wrapT),e.wrapR!==void 0&&(t.wrapR=e.wrapR),e.magFilter!==void 0&&(t.magFilter=e.magFilter),e.minFilter!==void 0&&(t.minFilter=e.minFilter),e.format!==void 0&&(t.format=e.format),e.type!==void 0&&(t.type=e.type),e.anisotropy!==void 0&&(t.anisotropy=e.anisotropy),e.colorSpace!==void 0&&(t.colorSpace=e.colorSpace),e.flipY!==void 0&&(t.flipY=e.flipY),e.generateMipmaps!==void 0&&(t.generateMipmaps=e.generateMipmaps),e.internalFormat!==void 0&&(t.internalFormat=e.internalFormat);for(let n=0;n<this.textures.length;n++)this.textures[n].setValues(t)}get texture(){return this.textures[0]}set texture(e){this.textures[0]=e}set depthTexture(e){this._depthTexture!==null&&(this._depthTexture.renderTarget=null),e!==null&&(e.renderTarget=this),this._depthTexture=e}get depthTexture(){return this._depthTexture}setSize(e,t,n=1){if(this.width!==e||this.height!==t||this.depth!==n){this.width=e,this.height=t,this.depth=n;for(let i=0,r=this.textures.length;i<r;i++)this.textures[i].image.width=e,this.textures[i].image.height=t,this.textures[i].image.depth=n,this.textures[i].isData3DTexture!==!0&&(this.textures[i].isArrayTexture=this.textures[i].image.depth>1);this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,n=e.textures.length;t<n;t++){this.textures[t]=e.textures[t].clone(),this.textures[t].isRenderTargetTexture=!0,this.textures[t].renderTarget=this;let i=Object.assign({},e.textures[t].image);this.textures[t].source=new Wd(i)}return this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,this.resolveDepthBuffer=e.resolveDepthBuffer,this.resolveStencilBuffer=e.resolveStencilBuffer,e.depthTexture!==null&&(this.depthTexture=e.depthTexture.clone()),this.samples=e.samples,this.multiview=e.multiview,this.useArrayDepthTexture=e.useArrayDepthTexture,this}dispose(){this.dispatchEvent({type:"dispose"})}},hr=class extends dr{constructor(e=1,t=1,n={}){super(e,t,n),this.isWebGLRenderTarget=!0}},xu=class extends Ss{constructor(e=null,t=1,n=1,i=1){super(null),this.isDataArrayTexture=!0,this.image={data:e,width:t,height:n,depth:i},this.magFilter=Cn,this.minFilter=Cn,this.wrapR=Fi,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.layerUpdates=new Set}addLayerUpdate(e){this.layerUpdates.add(e)}clearLayerUpdates(){this.layerUpdates.clear()}};var cp=class extends Ss{constructor(e=null,t=1,n=1,i=1){super(null),this.isData3DTexture=!0,this.image={data:e,width:t,height:n,depth:i},this.magFilter=Cn,this.minFilter=Cn,this.wrapR=Fi,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}};var An=class s{static{s.prototype.isMatrix4=!0}constructor(e,t,n,i,r,o,a,l,c,u,h,p,f,m,g,y){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0&&this.set(e,t,n,i,r,o,a,l,c,u,h,p,f,m,g,y)}set(e,t,n,i,r,o,a,l,c,u,h,p,f,m,g,y){let x=this.elements;return x[0]=e,x[4]=t,x[8]=n,x[12]=i,x[1]=r,x[5]=o,x[9]=a,x[13]=l,x[2]=c,x[6]=u,x[10]=h,x[14]=p,x[3]=f,x[7]=m,x[11]=g,x[15]=y,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new s().fromArray(this.elements)}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this}copyPosition(e){let t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this}setFromMatrix3(e){let t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,n){return this.determinantAffine()===0?(e.set(1,0,0),t.set(0,1,0),n.set(0,0,1),this):(e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this)}makeBasis(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this}extractRotation(e){if(e.determinantAffine()===0)return this.identity();let t=this.elements,n=e.elements,i=1/Rd.setFromMatrixColumn(e,0).length(),r=1/Rd.setFromMatrixColumn(e,1).length(),o=1/Rd.setFromMatrixColumn(e,2).length();return t[0]=n[0]*i,t[1]=n[1]*i,t[2]=n[2]*i,t[3]=0,t[4]=n[4]*r,t[5]=n[5]*r,t[6]=n[6]*r,t[7]=0,t[8]=n[8]*o,t[9]=n[9]*o,t[10]=n[10]*o,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){let t=this.elements,n=e.x,i=e.y,r=e.z,o=Math.cos(n),a=Math.sin(n),l=Math.cos(i),c=Math.sin(i),u=Math.cos(r),h=Math.sin(r);if(e.order==="XYZ"){let p=o*u,f=o*h,m=a*u,g=a*h;t[0]=l*u,t[4]=-l*h,t[8]=c,t[1]=f+m*c,t[5]=p-g*c,t[9]=-a*l,t[2]=g-p*c,t[6]=m+f*c,t[10]=o*l}else if(e.order==="YXZ"){let p=l*u,f=l*h,m=c*u,g=c*h;t[0]=p+g*a,t[4]=m*a-f,t[8]=o*c,t[1]=o*h,t[5]=o*u,t[9]=-a,t[2]=f*a-m,t[6]=g+p*a,t[10]=o*l}else if(e.order==="ZXY"){let p=l*u,f=l*h,m=c*u,g=c*h;t[0]=p-g*a,t[4]=-o*h,t[8]=m+f*a,t[1]=f+m*a,t[5]=o*u,t[9]=g-p*a,t[2]=-o*c,t[6]=a,t[10]=o*l}else if(e.order==="ZYX"){let p=o*u,f=o*h,m=a*u,g=a*h;t[0]=l*u,t[4]=m*c-f,t[8]=p*c+g,t[1]=l*h,t[5]=g*c+p,t[9]=f*c-m,t[2]=-c,t[6]=a*l,t[10]=o*l}else if(e.order==="YZX"){let p=o*l,f=o*c,m=a*l,g=a*c;t[0]=l*u,t[4]=g-p*h,t[8]=m*h+f,t[1]=h,t[5]=o*u,t[9]=-a*u,t[2]=-c*u,t[6]=f*h+m,t[10]=p-g*h}else if(e.order==="XZY"){let p=o*l,f=o*c,m=a*l,g=a*c;t[0]=l*u,t[4]=-h,t[8]=c*u,t[1]=p*h+g,t[5]=o*u,t[9]=f*h-m,t[2]=m*h-f,t[6]=a*u,t[10]=g*h+p}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(xL,e,yL)}lookAt(e,t,n){let i=this.elements;return _r.subVectors(e,t),_r.lengthSq()===0&&(_r.z=1),_r.normalize(),Sl.crossVectors(n,_r),Sl.lengthSq()===0&&(Math.abs(n.z)===1?_r.x+=1e-4:_r.z+=1e-4,_r.normalize(),Sl.crossVectors(n,_r)),Sl.normalize(),cm.crossVectors(_r,Sl),i[0]=Sl.x,i[4]=cm.x,i[8]=_r.x,i[1]=Sl.y,i[5]=cm.y,i[9]=_r.y,i[2]=Sl.z,i[6]=cm.z,i[10]=_r.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){let n=e.elements,i=t.elements,r=this.elements,o=n[0],a=n[4],l=n[8],c=n[12],u=n[1],h=n[5],p=n[9],f=n[13],m=n[2],g=n[6],y=n[10],x=n[14],b=n[3],v=n[7],_=n[11],M=n[15],T=i[0],w=i[4],S=i[8],A=i[12],I=i[1],N=i[5],P=i[9],B=i[13],U=i[2],D=i[6],L=i[10],k=i[14],W=i[3],$=i[7],ie=i[11],xe=i[15];return r[0]=o*T+a*I+l*U+c*W,r[4]=o*w+a*N+l*D+c*$,r[8]=o*S+a*P+l*L+c*ie,r[12]=o*A+a*B+l*k+c*xe,r[1]=u*T+h*I+p*U+f*W,r[5]=u*w+h*N+p*D+f*$,r[9]=u*S+h*P+p*L+f*ie,r[13]=u*A+h*B+p*k+f*xe,r[2]=m*T+g*I+y*U+x*W,r[6]=m*w+g*N+y*D+x*$,r[10]=m*S+g*P+y*L+x*ie,r[14]=m*A+g*B+y*k+x*xe,r[3]=b*T+v*I+_*U+M*W,r[7]=b*w+v*N+_*D+M*$,r[11]=b*S+v*P+_*L+M*ie,r[15]=b*A+v*B+_*k+M*xe,this}multiplyScalar(e){let t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){let e=this.elements,t=e[0],n=e[4],i=e[8],r=e[12],o=e[1],a=e[5],l=e[9],c=e[13],u=e[2],h=e[6],p=e[10],f=e[14],m=e[3],g=e[7],y=e[11],x=e[15],b=l*f-c*p,v=a*f-c*h,_=a*p-l*h,M=o*f-c*u,T=o*p-l*u,w=o*h-a*u;return t*(g*b-y*v+x*_)-n*(m*b-y*M+x*T)+i*(m*v-g*M+x*w)-r*(m*_-g*T+y*w)}determinantAffine(){let e=this.elements,t=e[0],n=e[4],i=e[8],r=e[1],o=e[5],a=e[9],l=e[2],c=e[6],u=e[10];return t*(o*u-a*c)-n*(r*u-a*l)+i*(r*c-o*l)}transpose(){let e=this.elements,t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,n){let i=this.elements;return e.isVector3?(i[12]=e.x,i[13]=e.y,i[14]=e.z):(i[12]=e,i[13]=t,i[14]=n),this}invert(){let e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],o=e[4],a=e[5],l=e[6],c=e[7],u=e[8],h=e[9],p=e[10],f=e[11],m=e[12],g=e[13],y=e[14],x=e[15],b=t*a-n*o,v=t*l-i*o,_=t*c-r*o,M=n*l-i*a,T=n*c-r*a,w=i*c-r*l,S=u*g-h*m,A=u*y-p*m,I=u*x-f*m,N=h*y-p*g,P=h*x-f*g,B=p*x-f*y,U=b*B-v*P+_*N+M*I-T*A+w*S;if(U===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let D=1/U;return e[0]=(a*B-l*P+c*N)*D,e[1]=(i*P-n*B-r*N)*D,e[2]=(g*w-y*T+x*M)*D,e[3]=(p*T-h*w-f*M)*D,e[4]=(l*I-o*B-c*A)*D,e[5]=(t*B-i*I+r*A)*D,e[6]=(y*_-m*w-x*v)*D,e[7]=(u*w-p*_+f*v)*D,e[8]=(o*P-a*I+c*S)*D,e[9]=(n*I-t*P-r*S)*D,e[10]=(m*T-g*_+x*b)*D,e[11]=(h*_-u*T-f*b)*D,e[12]=(a*A-o*N-l*S)*D,e[13]=(t*N-n*A+i*S)*D,e[14]=(g*v-m*M-y*b)*D,e[15]=(u*M-h*v+p*b)*D,this}scale(e){let t=this.elements,n=e.x,i=e.y,r=e.z;return t[0]*=n,t[4]*=i,t[8]*=r,t[1]*=n,t[5]*=i,t[9]*=r,t[2]*=n,t[6]*=i,t[10]*=r,t[3]*=n,t[7]*=i,t[11]*=r,this}getMaxScaleOnAxis(){let e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],i=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,i))}makeTranslation(e,t,n){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this}makeRotationX(e){let t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this}makeRotationY(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this}makeRotationZ(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){let n=Math.cos(t),i=Math.sin(t),r=1-n,o=e.x,a=e.y,l=e.z,c=r*o,u=r*a;return this.set(c*o+n,c*a-i*l,c*l+i*a,0,c*a+i*l,u*a+n,u*l-i*o,0,c*l-i*a,u*l+i*o,r*l*l+n,0,0,0,0,1),this}makeScale(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this}makeShear(e,t,n,i,r,o){return this.set(1,n,r,0,e,1,o,0,t,i,1,0,0,0,0,1),this}compose(e,t,n){let i=this.elements,r=t._x,o=t._y,a=t._z,l=t._w,c=r+r,u=o+o,h=a+a,p=r*c,f=r*u,m=r*h,g=o*u,y=o*h,x=a*h,b=l*c,v=l*u,_=l*h,M=n.x,T=n.y,w=n.z;return i[0]=(1-(g+x))*M,i[1]=(f+_)*M,i[2]=(m-v)*M,i[3]=0,i[4]=(f-_)*T,i[5]=(1-(p+x))*T,i[6]=(y+b)*T,i[7]=0,i[8]=(m+v)*w,i[9]=(y-b)*w,i[10]=(1-(p+g))*w,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,this}decompose(e,t,n){let i=this.elements;e.x=i[12],e.y=i[13],e.z=i[14];let r=this.determinantAffine();if(r===0)return n.set(1,1,1),t.identity(),this;let o=Rd.set(i[0],i[1],i[2]).length(),a=Rd.set(i[4],i[5],i[6]).length(),l=Rd.set(i[8],i[9],i[10]).length();r<0&&(o=-o),ho.copy(this);let c=1/o,u=1/a,h=1/l;return ho.elements[0]*=c,ho.elements[1]*=c,ho.elements[2]*=c,ho.elements[4]*=u,ho.elements[5]*=u,ho.elements[6]*=u,ho.elements[8]*=h,ho.elements[9]*=h,ho.elements[10]*=h,t.setFromRotationMatrix(ho),n.x=o,n.y=a,n.z=l,this}makePerspective(e,t,n,i,r,o,a=_i,l=!1){let c=this.elements,u=2*r/(t-e),h=2*r/(n-i),p=(t+e)/(t-e),f=(n+i)/(n-i),m,g;if(l)m=r/(o-r),g=o*r/(o-r);else if(a===_i)m=-(o+r)/(o-r),g=-2*o*r/(o-r);else if(a===wr)m=-o/(o-r),g=-o*r/(o-r);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+a);return c[0]=u,c[4]=0,c[8]=p,c[12]=0,c[1]=0,c[5]=h,c[9]=f,c[13]=0,c[2]=0,c[6]=0,c[10]=m,c[14]=g,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(e,t,n,i,r,o,a=_i,l=!1){let c=this.elements,u=2/(t-e),h=2/(n-i),p=-(t+e)/(t-e),f=-(n+i)/(n-i),m,g;if(l)m=1/(o-r),g=o/(o-r);else if(a===_i)m=-2/(o-r),g=-(o+r)/(o-r);else if(a===wr)m=-1/(o-r),g=-r/(o-r);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+a);return c[0]=u,c[4]=0,c[8]=0,c[12]=p,c[1]=0,c[5]=h,c[9]=0,c[13]=f,c[2]=0,c[6]=0,c[10]=m,c[14]=g,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(e){let t=this.elements,n=e.elements;for(let i=0;i<16;i++)if(t[i]!==n[i])return!1;return!0}fromArray(e,t=0){for(let n=0;n<16;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}},Rd=new ge,ho=new An,xL=new ge(0,0,0),yL=new ge(1,1,1),Sl=new ge,cm=new ge,_r=new ge,jw=new An,Zw=new mo,go=class s{constructor(e=0,t=0,n=0,i=s.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=n,this._order=i}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,n,i=this._order){return this._x=e,this._y=t,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,n=!0){let i=e.elements,r=i[0],o=i[4],a=i[8],l=i[1],c=i[5],u=i[9],h=i[2],p=i[6],f=i[10];switch(t){case"XYZ":this._y=Math.asin(Gn(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-u,f),this._z=Math.atan2(-o,r)):(this._x=Math.atan2(p,c),this._z=0);break;case"YXZ":this._x=Math.asin(-Gn(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(a,f),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-h,r),this._z=0);break;case"ZXY":this._x=Math.asin(Gn(p,-1,1)),Math.abs(p)<.9999999?(this._y=Math.atan2(-h,f),this._z=Math.atan2(-o,c)):(this._y=0,this._z=Math.atan2(l,r));break;case"ZYX":this._y=Math.asin(-Gn(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(p,f),this._z=Math.atan2(l,r)):(this._x=0,this._z=Math.atan2(-o,c));break;case"YZX":this._z=Math.asin(Gn(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-u,c),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(a,f));break;case"XZY":this._z=Math.asin(-Gn(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(p,c),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-u,f),this._y=0);break;default:lt("Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,n===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,n){return jw.makeRotationFromQuaternion(e),this.setFromRotationMatrix(jw,t,n)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return Zw.setFromEuler(this),this.setFromQuaternion(Zw,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};go.DEFAULT_ORDER="XYZ";var $d=class{constructor(){this.mask=1}set(e){this.mask=(1<<e|0)>>>0}enable(e){this.mask|=1<<e|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1<<e|0}disable(e){this.mask&=~(1<<e|0)}disableAll(){this.mask=0}test(e){return(this.mask&e.mask)!==0}isEnabled(e){return(this.mask&(1<<e|0))!==0}},bL=0,Kw=new ge,Nd=new mo,Ba=new An,um=new ge,np=new ge,vL=new ge,_L=new mo,Jw=new ge(1,0,0),Qw=new ge(0,1,0),eA=new ge(0,0,1),tA={type:"added"},SL={type:"removed"},Pd={type:"childadded",child:null},Wy={type:"childremoved",child:null},ui=class s extends Ji{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:bL++}),this.uuid=Ha(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=s.DEFAULT_UP.clone();let e=new ge,t=new go,n=new mo,i=new ge(1,1,1);function r(){n.setFromEuler(t,!1)}function o(){t.setFromQuaternion(n,void 0,!1)}t._onChange(r),n._onChange(o),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:e},rotation:{configurable:!0,enumerable:!0,value:t},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new An},normalMatrix:{value:new Tn}}),this.matrix=new An,this.matrixWorld=new An,this.matrixAutoUpdate=s.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=s.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new $d,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return Nd.setFromAxisAngle(e,t),this.quaternion.multiply(Nd),this}rotateOnWorldAxis(e,t){return Nd.setFromAxisAngle(e,t),this.quaternion.premultiply(Nd),this}rotateX(e){return this.rotateOnAxis(Jw,e)}rotateY(e){return this.rotateOnAxis(Qw,e)}rotateZ(e){return this.rotateOnAxis(eA,e)}translateOnAxis(e,t){return Kw.copy(e).applyQuaternion(this.quaternion),this.position.add(Kw.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(Jw,e)}translateY(e){return this.translateOnAxis(Qw,e)}translateZ(e){return this.translateOnAxis(eA,e)}localToWorld(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return this.updateWorldMatrix(!0,!1),e.applyMatrix4(Ba.copy(this.matrixWorld).invert())}lookAt(e,t,n){e.isVector3?um.copy(e):um.set(e,t,n);let i=this.parent;this.updateWorldMatrix(!0,!1),np.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?Ba.lookAt(np,um,this.up):Ba.lookAt(um,np,this.up),this.quaternion.setFromRotationMatrix(Ba),i&&(Ba.extractRotation(i.matrixWorld),Nd.setFromRotationMatrix(Ba),this.quaternion.premultiply(Nd.invert()))}add(e){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.add(arguments[t]);return this}return e===this?(Ke("Object3D.add: object can't be added as a child of itself.",e),this):(e&&e.isObject3D?(e.removeFromParent(),e.parent=this,this.children.push(e),e.dispatchEvent(tA),Pd.child=e,this.dispatchEvent(Pd),Pd.child=null):Ke("Object3D.add: object not an instance of THREE.Object3D.",e),this)}remove(e){if(arguments.length>1){for(let n=0;n<arguments.length;n++)this.remove(arguments[n]);return this}let t=this.children.indexOf(e);return t!==-1&&(e.parent=null,this.children.splice(t,1),e.dispatchEvent(SL),Wy.child=e,this.dispatchEvent(Wy),Wy.child=null),this}removeFromParent(){let e=this.parent;return e!==null&&e.remove(this),this}clear(){return this.remove(...this.children)}attach(e){return this.updateWorldMatrix(!0,!1),Ba.copy(this.matrixWorld).invert(),e.parent!==null&&(e.parent.updateWorldMatrix(!0,!1),Ba.multiply(e.parent.matrixWorld)),e.applyMatrix4(Ba),e.removeFromParent(),e.parent=this,this.children.push(e),e.updateWorldMatrix(!1,!0),e.dispatchEvent(tA),Pd.child=e,this.dispatchEvent(Pd),Pd.child=null,this}getObjectById(e){return this.getObjectByProperty("id",e)}getObjectByName(e){return this.getObjectByProperty("name",e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let n=0,i=this.children.length;n<i;n++){let o=this.children[n].getObjectByProperty(e,t);if(o!==void 0)return o}}getObjectsByProperty(e,t,n=[]){this[e]===t&&n.push(this);let i=this.children;for(let r=0,o=i.length;r<o;r++)i[r].getObjectsByProperty(e,t,n);return n}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(np,e,vL),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(np,_L,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);let t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(e){e(this);let t=this.children;for(let n=0,i=t.length;n<i;n++)t[n].traverse(e)}traverseVisible(e){if(this.visible===!1)return;e(this);let t=this.children;for(let n=0,i=t.length;n<i;n++)t[n].traverseVisible(e)}traverseAncestors(e){let t=this.parent;t!==null&&(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);let e=this.pivot;if(e!==null){let t=e.x,n=e.y,i=e.z,r=this.matrix.elements;r[12]+=t-r[0]*t-r[4]*n-r[8]*i,r[13]+=n-r[1]*t-r[5]*n-r[9]*i,r[14]+=i-r[2]*t-r[6]*n-r[10]*i}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,e=!0);let t=this.children;for(let n=0,i=t.length;n<i;n++)t[n].updateMatrixWorld(e)}updateWorldMatrix(e,t,n=!1){let i=this.parent;if(e===!0&&i!==null&&i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||n)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,n=!0),t===!0){let r=this.children;for(let o=0,a=r.length;o<a;o++)r[o].updateWorldMatrix(!1,!0,n)}}toJSON(e){let t=e===void 0||typeof e=="string",n={};t&&(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.7,type:"Object",generator:"Object3D.toJSON"});let i={};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),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),this.static!==!1&&(i.static=this.static),Object.keys(this.userData).length>0&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),i.up=this.up.toArray(),this.pivot!==null&&(i.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(i.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(i.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(i.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(i.type="InstancedMesh",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(i.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(i.type="BatchedMesh",i.perObjectFrustumCulled=this.perObjectFrustumCulled,i.sortObjects=this.sortObjects,i.drawRanges=this._drawRanges,i.reservedRanges=this._reservedRanges,i.geometryInfo=this._geometryInfo.map(a=>({...a,boundingBox:a.boundingBox?a.boundingBox.toJSON():void 0,boundingSphere:a.boundingSphere?a.boundingSphere.toJSON():void 0})),i.instanceInfo=this._instanceInfo.map(a=>({...a})),i.availableInstanceIds=this._availableInstanceIds.slice(),i.availableGeometryIds=this._availableGeometryIds.slice(),i.nextIndexStart=this._nextIndexStart,i.nextVertexStart=this._nextVertexStart,i.geometryCount=this._geometryCount,i.maxInstanceCount=this._maxInstanceCount,i.maxVertexCount=this._maxVertexCount,i.maxIndexCount=this._maxIndexCount,i.geometryInitialized=this._geometryInitialized,i.matricesTexture=this._matricesTexture.toJSON(e),i.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(i.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(i.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(i.boundingBox=this.boundingBox.toJSON()));function r(a,l){return a[l.uuid]===void 0&&(a[l.uuid]=l.toJSON(e)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(i.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=r(e.geometries,this.geometry);let a=this.geometry.parameters;if(a!==void 0&&a.shapes!==void 0){let l=a.shapes;if(Array.isArray(l))for(let c=0,u=l.length;c<u;c++){let h=l[c];r(e.shapes,h)}else r(e.shapes,l)}}if(this.isSkinnedMesh&&(i.bindMode=this.bindMode,i.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(r(e.skeletons,this.skeleton),i.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){let a=[];for(let l=0,c=this.material.length;l<c;l++)a.push(r(e.materials,this.material[l]));i.material=a}else i.material=r(e.materials,this.material);if(this.children.length>0){i.children=[];for(let a=0;a<this.children.length;a++)i.children.push(this.children[a].toJSON(e).object)}if(this.animations.length>0){i.animations=[];for(let a=0;a<this.animations.length;a++){let l=this.animations[a];i.animations.push(r(e.animations,l))}}if(t){let a=o(e.geometries),l=o(e.materials),c=o(e.textures),u=o(e.images),h=o(e.shapes),p=o(e.skeletons),f=o(e.animations),m=o(e.nodes);a.length>0&&(n.geometries=a),l.length>0&&(n.materials=l),c.length>0&&(n.textures=c),u.length>0&&(n.images=u),h.length>0&&(n.shapes=h),p.length>0&&(n.skeletons=p),f.length>0&&(n.animations=f),m.length>0&&(n.nodes=m)}return n.object=i,n;function o(a){let l=[];for(let c in a){let u=a[c];delete u.metadata,l.push(u)}return l}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!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.pivot=e.pivot!==null?e.pivot.clone():null,this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,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.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let n=0;n<e.children.length;n++){let i=e.children[n];this.add(i.clone())}return this}};ui.DEFAULT_UP=new ge(0,1,0);ui.DEFAULT_MATRIX_AUTO_UPDATE=!0;ui.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var au=class extends ui{constructor(){super(),this.isGroup=!0,this.type="Group"}},TL={type:"move"},Fl=class{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new au,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new au,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new ge,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new ge),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new au,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new ge,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new ge,this._grip.eventsEnabled=!1),this._grip}dispatchEvent(e){return this._targetRay!==null&&this._targetRay.dispatchEvent(e),this._grip!==null&&this._grip.dispatchEvent(e),this._hand!==null&&this._hand.dispatchEvent(e),this}connect(e){if(e&&e.hand){let t=this._hand;if(t)for(let n of e.hand.values())this._getHandJoint(t,n)}return this.dispatchEvent({type:"connected",data:e}),this}disconnect(e){return this.dispatchEvent({type:"disconnected",data:e}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(e,t,n){let i=null,r=null,o=null,a=this._targetRay,l=this._grip,c=this._hand;if(e&&t.session.visibilityState!=="visible-blurred"){if(c&&e.hand){o=!0;for(let g of e.hand.values()){let y=t.getJointPose(g,n),x=this._getHandJoint(c,g);y!==null&&(x.matrix.fromArray(y.transform.matrix),x.matrix.decompose(x.position,x.rotation,x.scale),x.matrixWorldNeedsUpdate=!0,x.jointRadius=y.radius),x.visible=y!==null}let u=c.joints["index-finger-tip"],h=c.joints["thumb-tip"],p=u.position.distanceTo(h.position),f=.02,m=.005;c.inputState.pinching&&p>f+m?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!c.inputState.pinching&&p<=f-m&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(r=t.getPose(e.gripSpace,n),r!==null&&(l.matrix.fromArray(r.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,r.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(r.linearVelocity)):l.hasLinearVelocity=!1,r.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(r.angularVelocity)):l.hasAngularVelocity=!1,l.eventsEnabled&&l.dispatchEvent({type:"gripUpdated",data:e,target:this})));a!==null&&(i=t.getPose(e.targetRaySpace,n),i===null&&r!==null&&(i=r),i!==null&&(a.matrix.fromArray(i.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),a.matrixWorldNeedsUpdate=!0,i.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(i.linearVelocity)):a.hasLinearVelocity=!1,i.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(i.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(TL)))}return a!==null&&(a.visible=i!==null),l!==null&&(l.visible=r!==null),c!==null&&(c.visible=o!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){let n=new au;n.matrixAutoUpdate=!1,n.visible=!1,e.joints[t.jointName]=n,e.add(n)}return e.joints[t.jointName]}},DA={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Tl={h:0,s:0,l:0},dm={h:0,s:0,l:0};function $y(s,e,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?s+(e-s)*6*t:t<1/2?e:t<2/3?s+(e-s)*6*(2/3-t):s}var an=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let i=e;i&&i.isColor?this.copy(i):typeof i=="number"?this.setHex(i):typeof i=="string"&&this.setStyle(i)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=ts){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,dn.colorSpaceToWorking(this,t),this}setRGB(e,t,n,i=dn.workingColorSpace){return this.r=e,this.g=t,this.b=n,dn.colorSpaceToWorking(this,i),this}setHSL(e,t,n,i=dn.workingColorSpace){if(e=Sb(e,1),t=Gn(t,0,1),n=Gn(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,o=2*n-r;this.r=$y(o,r,e+1/3),this.g=$y(o,r,e),this.b=$y(o,r,e-1/3)}return dn.colorSpaceToWorking(this,i),this}setStyle(e,t=ts){function n(r){r!==void 0&&parseFloat(r)<1&&lt("Color: Alpha component of "+e+" will be ignored.")}let i;if(i=/^(\w+)\(([^\)]*)\)/.exec(e)){let r,o=i[1],a=i[2];switch(o){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return n(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,t);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return n(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,t);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(a))return n(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,t);break;default:lt("Color: Unknown color model "+e)}}else if(i=/^\#([A-Fa-f\d]+)$/.exec(e)){let r=i[1],o=r.length;if(o===3)return this.setRGB(parseInt(r.charAt(0),16)/15,parseInt(r.charAt(1),16)/15,parseInt(r.charAt(2),16)/15,t);if(o===6)return this.setHex(parseInt(r,16),t);lt("Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=ts){let n=DA[e.toLowerCase()];return n!==void 0?this.setHex(n,t):lt("Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=Wa(e.r),this.g=Wa(e.g),this.b=Wa(e.b),this}copyLinearToSRGB(e){return this.r=zd(e.r),this.g=zd(e.g),this.b=zd(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=ts){return dn.workingToColorSpace(Di.copy(this),e),Math.round(Gn(Di.r*255,0,255))*65536+Math.round(Gn(Di.g*255,0,255))*256+Math.round(Gn(Di.b*255,0,255))}getHexString(e=ts){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=dn.workingColorSpace){dn.workingToColorSpace(Di.copy(this),t);let n=Di.r,i=Di.g,r=Di.b,o=Math.max(n,i,r),a=Math.min(n,i,r),l,c,u=(a+o)/2;if(a===o)l=0,c=0;else{let h=o-a;switch(c=u<=.5?h/(o+a):h/(2-o-a),o){case n:l=(i-r)/h+(i<r?6:0);break;case i:l=(r-n)/h+2;break;case r:l=(n-i)/h+4;break}l/=6}return e.h=l,e.s=c,e.l=u,e}getRGB(e,t=dn.workingColorSpace){return dn.workingToColorSpace(Di.copy(this),t),e.r=Di.r,e.g=Di.g,e.b=Di.b,e}getStyle(e=ts){dn.workingToColorSpace(Di.copy(this),e);let t=Di.r,n=Di.g,i=Di.b;return e!==ts?`color(${e} ${t.toFixed(3)} ${n.toFixed(3)} ${i.toFixed(3)})`:`rgb(${Math.round(t*255)},${Math.round(n*255)},${Math.round(i*255)})`}offsetHSL(e,t,n){return this.getHSL(Tl),this.setHSL(Tl.h+e,Tl.s+t,Tl.l+n)}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,n){return this.r=e.r+(t.r-e.r)*n,this.g=e.g+(t.g-e.g)*n,this.b=e.b+(t.b-e.b)*n,this}lerpHSL(e,t){this.getHSL(Tl),e.getHSL(dm);let n=ap(Tl.h,dm.h,t),i=ap(Tl.s,dm.s,t),r=ap(Tl.l,dm.l,t);return this.setHSL(n,i,r),this}setFromVector3(e){return this.r=e.x,this.g=e.y,this.b=e.z,this}applyMatrix3(e){let t=this.r,n=this.g,i=this.b,r=e.elements;return this.r=r[0]*t+r[3]*n+r[6]*i,this.g=r[1]*t+r[4]*n+r[7]*i,this.b=r[2]*t+r[5]*n+r[8]*i,this}equals(e){return e.r===this.r&&e.g===this.g&&e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}},Di=new an;an.NAMES=DA;var yu=class extends ui{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new go,this.environmentIntensity=1,this.environmentRotation=new go,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),e.background!==null&&(this.background=e.background.clone()),e.environment!==null&&(this.environment=e.environment.clone()),e.fog!==null&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,this.backgroundRotation.copy(e.backgroundRotation),this.environmentIntensity=e.environmentIntensity,this.environmentRotation.copy(e.environmentRotation),e.overrideMaterial!==null&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){let t=super.toJSON(e);return this.fog!==null&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}},po=new ge,Oa=new ge,qy=new ge,ka=new ge,Id=new ge,Dd=new ge,nA=new ge,Xy=new ge,Yy=new ge,jy=new ge,Zy=new vn,Ky=new vn,Jy=new vn,Rl=class s{constructor(e=new ge,t=new ge,n=new ge){this.a=e,this.b=t,this.c=n}static getNormal(e,t,n,i){i.subVectors(n,t),po.subVectors(e,t),i.cross(po);let r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(e,t,n,i,r){po.subVectors(i,t),Oa.subVectors(n,t),qy.subVectors(e,t);let o=po.dot(po),a=po.dot(Oa),l=po.dot(qy),c=Oa.dot(Oa),u=Oa.dot(qy),h=o*c-a*a;if(h===0)return r.set(0,0,0),null;let p=1/h,f=(c*l-a*u)*p,m=(o*u-a*l)*p;return r.set(1-f-m,m,f)}static containsPoint(e,t,n,i){return this.getBarycoord(e,t,n,i,ka)===null?!1:ka.x>=0&&ka.y>=0&&ka.x+ka.y<=1}static getInterpolation(e,t,n,i,r,o,a,l){return this.getBarycoord(e,t,n,i,ka)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(r,ka.x),l.addScaledVector(o,ka.y),l.addScaledVector(a,ka.z),l)}static getInterpolatedAttribute(e,t,n,i,r,o){return Zy.setScalar(0),Ky.setScalar(0),Jy.setScalar(0),Zy.fromBufferAttribute(e,t),Ky.fromBufferAttribute(e,n),Jy.fromBufferAttribute(e,i),o.setScalar(0),o.addScaledVector(Zy,r.x),o.addScaledVector(Ky,r.y),o.addScaledVector(Jy,r.z),o}static isFrontFacing(e,t,n,i){return po.subVectors(n,t),Oa.subVectors(e,t),po.cross(Oa).dot(i)<0}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,i){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[i]),this}setFromAttributeAndIndices(e,t,n,i){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),this.c.fromBufferAttribute(e,i),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return po.subVectors(this.c,this.b),Oa.subVectors(this.a,this.b),po.cross(Oa).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return s.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return s.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,n,i,r){return s.getInterpolation(e,this.a,this.b,this.c,t,n,i,r)}containsPoint(e){return s.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return s.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let n=this.a,i=this.b,r=this.c,o,a;Id.subVectors(i,n),Dd.subVectors(r,n),Xy.subVectors(e,n);let l=Id.dot(Xy),c=Dd.dot(Xy);if(l<=0&&c<=0)return t.copy(n);Yy.subVectors(e,i);let u=Id.dot(Yy),h=Dd.dot(Yy);if(u>=0&&h<=u)return t.copy(i);let p=l*h-u*c;if(p<=0&&l>=0&&u<=0)return o=l/(l-u),t.copy(n).addScaledVector(Id,o);jy.subVectors(e,r);let f=Id.dot(jy),m=Dd.dot(jy);if(m>=0&&f<=m)return t.copy(r);let g=f*c-l*m;if(g<=0&&c>=0&&m<=0)return a=c/(c-m),t.copy(n).addScaledVector(Dd,a);let y=u*m-f*h;if(y<=0&&h-u>=0&&f-m>=0)return nA.subVectors(r,i),a=(h-u)/(h-u+(f-m)),t.copy(i).addScaledVector(nA,a);let x=1/(y+g+p);return o=g*x,a=p*x,t.copy(n).addScaledVector(Id,o).addScaledVector(Dd,a)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},Ul=class{constructor(e=new ge(1/0,1/0,1/0),t=new ge(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t+=3)this.expandByPoint(fo.fromArray(e,t));return this}setFromBufferAttribute(e){this.makeEmpty();for(let t=0,n=e.count;t<n;t++)this.expandByPoint(fo.fromBufferAttribute(e,t));return this}setFromPoints(e){this.makeEmpty();for(let t=0,n=e.length;t<n;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){let n=fo.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(n),this.max.copy(e).add(n),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);let n=e.geometry;if(n!==void 0){let r=n.getAttribute("position");if(t===!0&&r!==void 0&&e.isInstancedMesh!==!0)for(let o=0,a=r.count;o<a;o++)e.isMesh===!0?e.getVertexPosition(o,fo):fo.fromBufferAttribute(r,o),fo.applyMatrix4(e.matrixWorld),this.expandByPoint(fo);else e.boundingBox!==void 0?(e.boundingBox===null&&e.computeBoundingBox(),hm.copy(e.boundingBox)):(n.boundingBox===null&&n.computeBoundingBox(),hm.copy(n.boundingBox)),hm.applyMatrix4(e.matrixWorld),this.union(hm)}let i=e.children;for(let r=0,o=i.length;r<o;r++)this.expandByObject(i[r],t);return this}containsPoint(e){return e.x>=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,fo),fo.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(sp),pm.subVectors(this.max,sp),Fd.subVectors(e.a,sp),Ud.subVectors(e.b,sp),Ld.subVectors(e.c,sp),Ml.subVectors(Ud,Fd),wl.subVectors(Ld,Ud),su.subVectors(Fd,Ld);let t=[0,-Ml.z,Ml.y,0,-wl.z,wl.y,0,-su.z,su.y,Ml.z,0,-Ml.x,wl.z,0,-wl.x,su.z,0,-su.x,-Ml.y,Ml.x,0,-wl.y,wl.x,0,-su.y,su.x,0];return!Qy(t,Fd,Ud,Ld,pm)||(t=[1,0,0,0,1,0,0,0,1],!Qy(t,Fd,Ud,Ld,pm))?!1:(fm.crossVectors(Ml,wl),t=[fm.x,fm.y,fm.z],Qy(t,Fd,Ud,Ld,pm))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,fo).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(fo).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(Va[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),Va[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),Va[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),Va[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),Va[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),Va[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),Va[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),Va[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(Va),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}},Va=[new ge,new ge,new ge,new ge,new ge,new ge,new ge,new ge],fo=new ge,hm=new Ul,Fd=new ge,Ud=new ge,Ld=new ge,Ml=new ge,wl=new ge,su=new ge,sp=new ge,pm=new ge,fm=new ge,iu=new ge;function Qy(s,e,t,n,i){for(let r=0,o=s.length-3;r<=o;r+=3){iu.fromArray(s,r);let a=i.x*Math.abs(iu.x)+i.y*Math.abs(iu.y)+i.z*Math.abs(iu.z),l=e.dot(iu),c=t.dot(iu),u=n.dot(iu);if(Math.max(-Math.max(l,c,u),Math.min(l,c,u))>a)return!1}return!0}var Ga=ML();function ML(){let s=new ArrayBuffer(4),e=new Float32Array(s),t=new Uint32Array(s),n=new Uint32Array(512),i=new Uint32Array(512);for(let l=0;l<256;++l){let c=l-127;c<-27?(n[l]=0,n[l|256]=32768,i[l]=24,i[l|256]=24):c<-14?(n[l]=1024>>-c-14,n[l|256]=1024>>-c-14|32768,i[l]=-c-1,i[l|256]=-c-1):c<=15?(n[l]=c+15<<10,n[l|256]=c+15<<10|32768,i[l]=13,i[l|256]=13):c<128?(n[l]=31744,n[l|256]=64512,i[l]=24,i[l|256]=24):(n[l]=31744,n[l|256]=64512,i[l]=13,i[l|256]=13)}let r=new Uint32Array(2048),o=new Uint32Array(64),a=new Uint32Array(64);for(let l=1;l<1024;++l){let c=l<<13,u=0;for(;(c&8388608)===0;)c<<=1,u-=8388608;c&=-8388609,u+=947912704,r[l]=c|u}for(let l=1024;l<2048;++l)r[l]=939524096+(l-1024<<13);for(let l=1;l<31;++l)o[l]=l<<23;o[31]=1199570944,o[32]=2147483648;for(let l=33;l<63;++l)o[l]=2147483648+(l-32<<23);o[63]=3347054592;for(let l=1;l<64;++l)l!==32&&(a[l]=1024);return{floatView:e,uint32View:t,baseTable:n,shiftTable:i,mantissaTable:r,exponentTable:o,offsetTable:a}}function Sr(s){Math.abs(s)>65504&&lt("DataUtils.toHalfFloat(): Value out of range."),s=Gn(s,-65504,65504),Ga.floatView[0]=s;let e=Ga.uint32View[0],t=e>>23&511;return Ga.baseTable[t]+((e&8388607)>>Ga.shiftTable[t])}function mm(s){let e=s>>10;return Ga.uint32View[0]=Ga.mantissaTable[Ga.offsetTable[e]+(s&1023)]+Ga.exponentTable[e],Ga.floatView[0]}var ti=new ge,gm=new on,wL=0,$s=class extends Ji{constructor(e,t,n=!1){if(super(),Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:wL++}),this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=n,this.usage=mu,this.updateRanges=[],this.gpuType=en,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let i=0,r=this.itemSize;i<r;i++)this.array[e+i]=t.array[n+i];return this}copyArray(e){return this.array.set(e),this}applyMatrix3(e){if(this.itemSize===2)for(let t=0,n=this.count;t<n;t++)gm.fromBufferAttribute(this,t),gm.applyMatrix3(e),this.setXY(t,gm.x,gm.y);else if(this.itemSize===3)for(let t=0,n=this.count;t<n;t++)ti.fromBufferAttribute(this,t),ti.applyMatrix3(e),this.setXYZ(t,ti.x,ti.y,ti.z);return this}applyMatrix4(e){for(let t=0,n=this.count;t<n;t++)ti.fromBufferAttribute(this,t),ti.applyMatrix4(e),this.setXYZ(t,ti.x,ti.y,ti.z);return this}applyNormalMatrix(e){for(let t=0,n=this.count;t<n;t++)ti.fromBufferAttribute(this,t),ti.applyNormalMatrix(e),this.setXYZ(t,ti.x,ti.y,ti.z);return this}transformDirection(e){for(let t=0,n=this.count;t<n;t++)ti.fromBufferAttribute(this,t),ti.transformDirection(e),this.setXYZ(t,ti.x,ti.y,ti.z);return this}set(e,t=0){return this.array.set(e,t),this}getComponent(e,t){let n=this.array[e*this.itemSize+t];return this.normalized&&(n=Ki(n,this.array)),n}setComponent(e,t,n){return this.normalized&&(n=Pn(n,this.array)),this.array[e*this.itemSize+t]=n,this}getX(e){let t=this.array[e*this.itemSize];return this.normalized&&(t=Ki(t,this.array)),t}setX(e,t){return this.normalized&&(t=Pn(t,this.array)),this.array[e*this.itemSize]=t,this}getY(e){let t=this.array[e*this.itemSize+1];return this.normalized&&(t=Ki(t,this.array)),t}setY(e,t){return this.normalized&&(t=Pn(t,this.array)),this.array[e*this.itemSize+1]=t,this}getZ(e){let t=this.array[e*this.itemSize+2];return this.normalized&&(t=Ki(t,this.array)),t}setZ(e,t){return this.normalized&&(t=Pn(t,this.array)),this.array[e*this.itemSize+2]=t,this}getW(e){let t=this.array[e*this.itemSize+3];return this.normalized&&(t=Ki(t,this.array)),t}setW(e,t){return this.normalized&&(t=Pn(t,this.array)),this.array[e*this.itemSize+3]=t,this}setXY(e,t,n){return e*=this.itemSize,this.normalized&&(t=Pn(t,this.array),n=Pn(n,this.array)),this.array[e+0]=t,this.array[e+1]=n,this}setXYZ(e,t,n,i){return e*=this.itemSize,this.normalized&&(t=Pn(t,this.array),n=Pn(n,this.array),i=Pn(i,this.array)),this.array[e+0]=t,this.array[e+1]=n,this.array[e+2]=i,this}setXYZW(e,t,n,i,r){return e*=this.itemSize,this.normalized&&(t=Pn(t,this.array),n=Pn(n,this.array),i=Pn(i,this.array),r=Pn(r,this.array)),this.array[e+0]=t,this.array[e+1]=n,this.array[e+2]=i,this.array[e+3]=r,this}onUpload(e){return this.onUploadCallback=e,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){let e={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(e.name=this.name),this.usage!==mu&&(e.usage=this.usage),e}dispose(){this.dispatchEvent({type:"dispose"})}};var bu=class extends $s{constructor(e,t,n){super(new Uint16Array(e),t,n)}};var vu=class extends $s{constructor(e,t,n){super(new Uint32Array(e),t,n)}},up=class extends $s{constructor(e,t,n){super(new Uint16Array(e),t,n),this.isFloat16BufferAttribute=!0}getX(e){let t=mm(this.array[e*this.itemSize]);return this.normalized&&(t=Ki(t,this.array)),t}setX(e,t){return this.normalized&&(t=Pn(t,this.array)),this.array[e*this.itemSize]=Sr(t),this}getY(e){let t=mm(this.array[e*this.itemSize+1]);return this.normalized&&(t=Ki(t,this.array)),t}setY(e,t){return this.normalized&&(t=Pn(t,this.array)),this.array[e*this.itemSize+1]=Sr(t),this}getZ(e){let t=mm(this.array[e*this.itemSize+2]);return this.normalized&&(t=Ki(t,this.array)),t}setZ(e,t){return this.normalized&&(t=Pn(t,this.array)),this.array[e*this.itemSize+2]=Sr(t),this}getW(e){let t=mm(this.array[e*this.itemSize+3]);return this.normalized&&(t=Ki(t,this.array)),t}setW(e,t){return this.normalized&&(t=Pn(t,this.array)),this.array[e*this.itemSize+3]=Sr(t),this}setXY(e,t,n){return e*=this.itemSize,this.normalized&&(t=Pn(t,this.array),n=Pn(n,this.array)),this.array[e+0]=Sr(t),this.array[e+1]=Sr(n),this}setXYZ(e,t,n,i){return e*=this.itemSize,this.normalized&&(t=Pn(t,this.array),n=Pn(n,this.array),i=Pn(i,this.array)),this.array[e+0]=Sr(t),this.array[e+1]=Sr(n),this.array[e+2]=Sr(i),this}setXYZW(e,t,n,i,r){return e*=this.itemSize,this.normalized&&(t=Pn(t,this.array),n=Pn(n,this.array),i=Pn(i,this.array),r=Pn(r,this.array)),this.array[e+0]=Sr(t),this.array[e+1]=Sr(n),this.array[e+2]=Sr(i),this.array[e+3]=Sr(r),this}},qs=class extends $s{constructor(e,t,n){super(new Float32Array(e),t,n)}},AL=new Ul,ip=new ge,eb=new ge,_u=class{constructor(e=new ge,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){let n=this.center;t!==void 0?n.copy(t):AL.setFromPoints(e).getCenter(n);let i=0;for(let r=0,o=e.length;r<o;r++)i=Math.max(i,n.distanceToSquared(e[r]));return this.radius=Math.sqrt(i),this}copy(e){return this.center.copy(e.center),this.radius=e.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(e){return e.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(e){return e.distanceTo(this.center)-this.radius}intersectsSphere(e){let t=this.radius+e.radius;return e.center.distanceToSquared(this.center)<=t*t}intersectsBox(e){return e.intersectsSphere(this)}intersectsPlane(e){return Math.abs(e.distanceToPoint(this.center))<=this.radius}clampPoint(e,t){let n=this.center.distanceToSquared(e);return t.copy(e),n>this.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;ip.subVectors(e,this.center);let t=ip.lengthSq();if(t>this.radius*this.radius){let n=Math.sqrt(t),i=(n-this.radius)*.5;this.center.addScaledVector(ip,i/n),this.radius+=i}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(eb.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(ip.copy(e.center).add(eb)),this.expandByPoint(ip.copy(e.center).sub(eb))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}},CL=0,Yr=new An,tb=new ui,Bd=new ge,Tr=new Ul,rp=new Ul,mi=new ge,Ui=class s extends Ji{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:CL++}),this.uuid=Ha(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={},this._transformed=!1}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(KU(e)?vu:bu)(e,1):this.index=e,this}setIndirect(e,t=0){return this.indirect=e,this.indirectOffset=t,this}getIndirect(){return this.indirect}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return this.attributes[e]!==void 0}addGroup(e,t,n=0){this.groups.push({start:e,count:t,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;t!==void 0&&(t.applyMatrix4(e),t.needsUpdate=!0);let n=this.attributes.normal;if(n!==void 0){let r=new Tn().getNormalMatrix(e);n.applyNormalMatrix(r),n.needsUpdate=!0}let i=this.attributes.tangent;return i!==void 0&&(i.transformDirection(e),i.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this._transformed=!0,this}applyQuaternion(e){return Yr.makeRotationFromQuaternion(e),this.applyMatrix4(Yr),this}rotateX(e){return Yr.makeRotationX(e),this.applyMatrix4(Yr),this}rotateY(e){return Yr.makeRotationY(e),this.applyMatrix4(Yr),this}rotateZ(e){return Yr.makeRotationZ(e),this.applyMatrix4(Yr),this}translate(e,t,n){return Yr.makeTranslation(e,t,n),this.applyMatrix4(Yr),this}scale(e,t,n){return Yr.makeScale(e,t,n),this.applyMatrix4(Yr),this}lookAt(e){return tb.lookAt(e),tb.updateMatrix(),this.applyMatrix4(tb.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Bd).negate(),this.translate(Bd.x,Bd.y,Bd.z),this}setFromPoints(e){let t=this.getAttribute("position");if(t===void 0){let n=[];for(let i=0,r=e.length;i<r;i++){let o=e[i];n.push(o.x,o.y,o.z||0)}this.setAttribute("position",new qs(n,3))}else{let n=Math.min(e.length,t.count);for(let i=0;i<n;i++){let r=e[i];t.setXYZ(i,r.x,r.y,r.z||0)}e.length>t.count&&lt("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new Ul);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){Ke("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new ge(-1/0,-1/0,-1/0),new ge(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let n=0,i=t.length;n<i;n++){let r=t[n];Tr.setFromBufferAttribute(r),this.morphTargetsRelative?(mi.addVectors(this.boundingBox.min,Tr.min),this.boundingBox.expandByPoint(mi),mi.addVectors(this.boundingBox.max,Tr.max),this.boundingBox.expandByPoint(mi)):(this.boundingBox.expandByPoint(Tr.min),this.boundingBox.expandByPoint(Tr.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&Ke('BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new _u);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){Ke("BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new ge,1/0);return}if(e){let n=this.boundingSphere.center;if(Tr.setFromBufferAttribute(e),t)for(let r=0,o=t.length;r<o;r++){let a=t[r];rp.setFromBufferAttribute(a),this.morphTargetsRelative?(mi.addVectors(Tr.min,rp.min),Tr.expandByPoint(mi),mi.addVectors(Tr.max,rp.max),Tr.expandByPoint(mi)):(Tr.expandByPoint(rp.min),Tr.expandByPoint(rp.max))}Tr.getCenter(n);let i=0;for(let r=0,o=e.count;r<o;r++)mi.fromBufferAttribute(e,r),i=Math.max(i,n.distanceToSquared(mi));if(t)for(let r=0,o=t.length;r<o;r++){let a=t[r],l=this.morphTargetsRelative;for(let c=0,u=a.count;c<u;c++)mi.fromBufferAttribute(a,c),l&&(Bd.fromBufferAttribute(e,c),mi.add(Bd)),i=Math.max(i,n.distanceToSquared(mi))}this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&Ke('BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){let e=this.index,t=this.attributes;if(e===null||t.position===void 0||t.normal===void 0||t.uv===void 0){Ke("BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}let n=t.position,i=t.normal,r=t.uv,o=this.getAttribute("tangent");(o===void 0||o.count!==n.count)&&(o=new $s(new Float32Array(4*n.count),4),this.setAttribute("tangent",o));let a=[],l=[];for(let S=0;S<n.count;S++)a[S]=new ge,l[S]=new ge;let c=new ge,u=new ge,h=new ge,p=new on,f=new on,m=new on,g=new ge,y=new ge;function x(S,A,I){c.fromBufferAttribute(n,S),u.fromBufferAttribute(n,A),h.fromBufferAttribute(n,I),p.fromBufferAttribute(r,S),f.fromBufferAttribute(r,A),m.fromBufferAttribute(r,I),u.sub(c),h.sub(c),f.sub(p),m.sub(p);let N=1/(f.x*m.y-m.x*f.y);isFinite(N)&&(g.copy(u).multiplyScalar(m.y).addScaledVector(h,-f.y).multiplyScalar(N),y.copy(h).multiplyScalar(f.x).addScaledVector(u,-m.x).multiplyScalar(N),a[S].add(g),a[A].add(g),a[I].add(g),l[S].add(y),l[A].add(y),l[I].add(y))}let b=this.groups;b.length===0&&(b=[{start:0,count:e.count}]);for(let S=0,A=b.length;S<A;++S){let I=b[S],N=I.start,P=I.count;for(let B=N,U=N+P;B<U;B+=3)x(e.getX(B+0),e.getX(B+1),e.getX(B+2))}let v=new ge,_=new ge,M=new ge,T=new ge;function w(S){M.fromBufferAttribute(i,S),T.copy(M);let A=a[S];v.copy(A),v.sub(M.multiplyScalar(M.dot(A))).normalize(),_.crossVectors(T,A);let N=_.dot(l[S])<0?-1:1;o.setXYZW(S,v.x,v.y,v.z,N)}for(let S=0,A=b.length;S<A;++S){let I=b[S],N=I.start,P=I.count;for(let B=N,U=N+P;B<U;B+=3)w(e.getX(B+0)),w(e.getX(B+1)),w(e.getX(B+2))}this._transformed=!0}computeVertexNormals(){let e=this.index,t=this.getAttribute("position");if(t!==void 0){let n=this.getAttribute("normal");if(n===void 0||n.count!==t.count)n=new $s(new Float32Array(t.count*3),3),this.setAttribute("normal",n);else for(let p=0,f=n.count;p<f;p++)n.setXYZ(p,0,0,0);let i=new ge,r=new ge,o=new ge,a=new ge,l=new ge,c=new ge,u=new ge,h=new ge;if(e)for(let p=0,f=e.count;p<f;p+=3){let m=e.getX(p+0),g=e.getX(p+1),y=e.getX(p+2);i.fromBufferAttribute(t,m),r.fromBufferAttribute(t,g),o.fromBufferAttribute(t,y),u.subVectors(o,r),h.subVectors(i,r),u.cross(h),a.fromBufferAttribute(n,m),l.fromBufferAttribute(n,g),c.fromBufferAttribute(n,y),a.add(u),l.add(u),c.add(u),n.setXYZ(m,a.x,a.y,a.z),n.setXYZ(g,l.x,l.y,l.z),n.setXYZ(y,c.x,c.y,c.z)}else for(let p=0,f=t.count;p<f;p+=3)i.fromBufferAttribute(t,p+0),r.fromBufferAttribute(t,p+1),o.fromBufferAttribute(t,p+2),u.subVectors(o,r),h.subVectors(i,r),u.cross(h),n.setXYZ(p+0,u.x,u.y,u.z),n.setXYZ(p+1,u.x,u.y,u.z),n.setXYZ(p+2,u.x,u.y,u.z);this.normalizeNormals(),n.needsUpdate=!0}}normalizeNormals(){let e=this.attributes.normal;for(let t=0,n=e.count;t<n;t++)mi.fromBufferAttribute(e,t),mi.normalize(),e.setXYZ(t,mi.x,mi.y,mi.z)}toNonIndexed(){function e(a,l){let c=a.array,u=a.itemSize,h=a.normalized,p=new c.constructor(l.length*u),f=0,m=0;for(let g=0,y=l.length;g<y;g++){a.isInterleavedBufferAttribute?f=l[g]*a.data.stride+a.offset:f=l[g]*u;for(let x=0;x<u;x++)p[m++]=c[f++]}return new $s(p,u,h)}if(this.index===null)return lt("BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;let t=new s,n=this.index.array,i=this.attributes;for(let a in i){let l=i[a],c=e(l,n);t.setAttribute(a,c)}let r=this.morphAttributes;for(let a in r){let l=[],c=r[a];for(let u=0,h=c.length;u<h;u++){let p=c[u],f=e(p,n);l.push(f)}t.morphAttributes[a]=l}t.morphTargetsRelative=this.morphTargetsRelative;let o=this.groups;for(let a=0,l=o.length;a<l;a++){let c=o[a];t.addGroup(c.start,c.count,c.materialIndex)}return t}toJSON(){let e={metadata:{version:4.7,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(e.uuid=this.uuid,e.type=this.parameters!==void 0&&this._transformed===!0?"BufferGeometry":this.type,this.name!==""&&(e.name=this.name),Object.keys(this.userData).length>0&&(e.userData=this.userData),this.parameters!==void 0&&this._transformed!==!0){let l=this.parameters;for(let c in l)l[c]!==void 0&&(e[c]=l[c]);return e}e.data={attributes:{}};let t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let n=this.attributes;for(let l in n){let c=n[l];e.data.attributes[l]=c.toJSON(e.data)}let i={},r=!1;for(let l in this.morphAttributes){let c=this.morphAttributes[l],u=[];for(let h=0,p=c.length;h<p;h++){let f=c[h];u.push(f.toJSON(e.data))}u.length>0&&(i[l]=u,r=!0)}r&&(e.data.morphAttributes=i,e.data.morphTargetsRelative=this.morphTargetsRelative);let o=this.groups;o.length>0&&(e.data.groups=JSON.parse(JSON.stringify(o)));let a=this.boundingSphere;return a!==null&&(e.data.boundingSphere=a.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let t={};this.name=e.name;let n=e.index;n!==null&&this.setIndex(n.clone());let i=e.attributes;for(let c in i){let u=i[c];this.setAttribute(c,u.clone(t))}let r=e.morphAttributes;for(let c in r){let u=[],h=r[c];for(let p=0,f=h.length;p<f;p++)u.push(h[p].clone(t));this.morphAttributes[c]=u}this.morphTargetsRelative=e.morphTargetsRelative;let o=e.groups;for(let c=0,u=o.length;c<u;c++){let h=o[c];this.addGroup(h.start,h.count,h.materialIndex)}let a=e.boundingBox;a!==null&&(this.boundingBox=a.clone());let l=e.boundingSphere;return l!==null&&(this.boundingSphere=l.clone()),this.drawRange.start=e.drawRange.start,this.drawRange.count=e.drawRange.count,this.userData=e.userData,this._transformed=e._transformed,this}dispose(){this.dispatchEvent({type:"dispose"})}},dp=class{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=e!==void 0?e.length/t:0,this.usage=mu,this.updateRanges=[],this.version=0,this.uuid=Ha()}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,n){e*=this.stride,n*=t.stride;for(let i=0,r=this.stride;i<r;i++)this.array[e+i]=t.array[n+i];return this}set(e,t=0){return this.array.set(e,t),this}clone(e){e.arrayBuffers===void 0&&(e.arrayBuffers={}),this.array.buffer._uuid===void 0&&(this.array.buffer._uuid=Ha()),e.arrayBuffers[this.array.buffer._uuid]===void 0&&(e.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);let t=new this.array.constructor(e.arrayBuffers[this.array.buffer._uuid]),n=new this.constructor(t,this.stride);return n.setUsage(this.usage),n}onUpload(e){return this.onUploadCallback=e,this}toJSON(e){return e.arrayBuffers===void 0&&(e.arrayBuffers={}),this.array.buffer._uuid===void 0&&(this.array.buffer._uuid=Ha()),e.arrayBuffers[this.array.buffer._uuid]===void 0&&(e.arrayBuffers[this.array.buffer._uuid]=Array.from(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}},Zi=new ge,Um=class s{constructor(e,t,n,i=!1){this.isInterleavedBufferAttribute=!0,this.name="",this.data=e,this.itemSize=t,this.offset=n,this.normalized=i}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(e){this.data.needsUpdate=e}applyMatrix4(e){for(let t=0,n=this.data.count;t<n;t++)Zi.fromBufferAttribute(this,t),Zi.applyMatrix4(e),this.setXYZ(t,Zi.x,Zi.y,Zi.z);return this}applyNormalMatrix(e){for(let t=0,n=this.count;t<n;t++)Zi.fromBufferAttribute(this,t),Zi.applyNormalMatrix(e),this.setXYZ(t,Zi.x,Zi.y,Zi.z);return this}transformDirection(e){for(let t=0,n=this.count;t<n;t++)Zi.fromBufferAttribute(this,t),Zi.transformDirection(e),this.setXYZ(t,Zi.x,Zi.y,Zi.z);return this}getComponent(e,t){let n=this.array[e*this.data.stride+this.offset+t];return this.normalized&&(n=Ki(n,this.array)),n}setComponent(e,t,n){return this.normalized&&(n=Pn(n,this.array)),this.data.array[e*this.data.stride+this.offset+t]=n,this}setX(e,t){return this.normalized&&(t=Pn(t,this.array)),this.data.array[e*this.data.stride+this.offset]=t,this}setY(e,t){return this.normalized&&(t=Pn(t,this.array)),this.data.array[e*this.data.stride+this.offset+1]=t,this}setZ(e,t){return this.normalized&&(t=Pn(t,this.array)),this.data.array[e*this.data.stride+this.offset+2]=t,this}setW(e,t){return this.normalized&&(t=Pn(t,this.array)),this.data.array[e*this.data.stride+this.offset+3]=t,this}getX(e){let t=this.data.array[e*this.data.stride+this.offset];return this.normalized&&(t=Ki(t,this.array)),t}getY(e){let t=this.data.array[e*this.data.stride+this.offset+1];return this.normalized&&(t=Ki(t,this.array)),t}getZ(e){let t=this.data.array[e*this.data.stride+this.offset+2];return this.normalized&&(t=Ki(t,this.array)),t}getW(e){let t=this.data.array[e*this.data.stride+this.offset+3];return this.normalized&&(t=Ki(t,this.array)),t}setXY(e,t,n){return e=e*this.data.stride+this.offset,this.normalized&&(t=Pn(t,this.array),n=Pn(n,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=n,this}setXYZ(e,t,n,i){return e=e*this.data.stride+this.offset,this.normalized&&(t=Pn(t,this.array),n=Pn(n,this.array),i=Pn(i,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=n,this.data.array[e+2]=i,this}setXYZW(e,t,n,i,r){return e=e*this.data.stride+this.offset,this.normalized&&(t=Pn(t,this.array),n=Pn(n,this.array),i=Pn(i,this.array),r=Pn(r,this.array)),this.data.array[e+0]=t,this.data.array[e+1]=n,this.data.array[e+2]=i,this.data.array[e+3]=r,this}clone(e){if(e===void 0){gu("InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.");let t=[];for(let n=0;n<this.count;n++){let i=n*this.data.stride+this.offset;for(let r=0;r<this.itemSize;r++)t.push(this.data.array[i+r])}return new $s(new this.array.constructor(t),this.itemSize,this.normalized)}else return e.interleavedBuffers===void 0&&(e.interleavedBuffers={}),e.interleavedBuffers[this.data.uuid]===void 0&&(e.interleavedBuffers[this.data.uuid]=this.data.clone(e)),new s(e.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(e){if(e===void 0){gu("InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.");let t=[];for(let n=0;n<this.count;n++){let i=n*this.data.stride+this.offset;for(let r=0;r<this.itemSize;r++)t.push(this.data.array[i+r])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:t,normalized:this.normalized}}else return e.interleavedBuffers===void 0&&(e.interleavedBuffers={}),e.interleavedBuffers[this.data.uuid]===void 0&&(e.interleavedBuffers[this.data.uuid]=this.data.toJSON(e)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}},EL=0,Xs=class extends Ji{constructor(){super(),this.isMaterial=!0,Object.defineProperty(this,"id",{value:EL++}),this.uuid=Ha(),this.name="",this.type="Material",this.blending=gi,this.side=Si,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.alphaHash=!1,this.blendSrc=Nl,this.blendDst=Pl,this.blendEquation=ci,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.blendColor=new an(0,0,0),this.blendAlpha=0,this.depthFunc=Lo,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=Dm,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=El,this.stencilZFail=El,this.stencilZPass=El,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.forceSinglePass=!1,this.allowOverride=!0,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest>0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(let t in e){let n=e[t];if(n===void 0){lt(`Material: parameter '${t}' has value of undefined.`);continue}let i=this[t];if(i===void 0){lt(`Material: '${t}' is not a property of THREE.${this.type}.`);continue}i&&i.isColor?i.set(n):i&&i.isVector2&&n&&n.isVector2||i&&i.isEuler&&n&&n.isEuler||i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e=="string";t&&(e={textures:{},images:{}});let n={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};n.uuid=this.uuid,n.type=this.type,this.name!==""&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),this.roughness!==void 0&&(n.roughness=this.roughness),this.metalness!==void 0&&(n.metalness=this.metalness),this.sheen!==void 0&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(n.shininess=this.shininess),this.clearcoat!==void 0&&(n.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(n.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(n.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(n.dispersion=this.dispersion),this.iridescence!==void 0&&(n.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(n.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(n.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(n.combine=this.combine)),this.envMapRotation!==void 0&&(n.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(n.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(n.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(n.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(n.size=this.size),this.shadowSide!==null&&(n.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(n.sizeAttenuation=this.sizeAttenuation),this.blending!==gi&&(n.blending=this.blending),this.side!==Si&&(n.side=this.side),this.vertexColors===!0&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.transparent===!0&&(n.transparent=!0),this.blendSrc!==Nl&&(n.blendSrc=this.blendSrc),this.blendDst!==Pl&&(n.blendDst=this.blendDst),this.blendEquation!==ci&&(n.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(n.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(n.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(n.blendAlpha=this.blendAlpha),this.depthFunc!==Lo&&(n.depthFunc=this.depthFunc),this.depthTest===!1&&(n.depthTest=this.depthTest),this.depthWrite===!1&&(n.depthWrite=this.depthWrite),this.colorWrite===!1&&(n.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(n.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==Dm&&(n.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(n.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(n.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==El&&(n.stencilFail=this.stencilFail),this.stencilZFail!==El&&(n.stencilZFail=this.stencilZFail),this.stencilZPass!==El&&(n.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(n.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(n.rotation=this.rotation),this.polygonOffset===!0&&(n.polygonOffset=!0),this.polygonOffsetFactor!==0&&(n.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(n.linewidth=this.linewidth),this.dashSize!==void 0&&(n.dashSize=this.dashSize),this.gapSize!==void 0&&(n.gapSize=this.gapSize),this.scale!==void 0&&(n.scale=this.scale),this.dithering===!0&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),this.alphaHash===!0&&(n.alphaHash=!0),this.alphaToCoverage===!0&&(n.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(n.premultipliedAlpha=!0),this.forceSinglePass===!0&&(n.forceSinglePass=!0),this.allowOverride===!1&&(n.allowOverride=!1),this.wireframe===!0&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(n.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(n.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(n.flatShading=!0),this.visible===!1&&(n.visible=!1),this.toneMapped===!1&&(n.toneMapped=!1),this.fog===!1&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData);function i(r){let o=[];for(let a in r){let l=r[a];delete l.metadata,o.push(l)}return o}if(t){let r=i(e.textures),o=i(e.images);r.length>0&&(n.textures=r),o.length>0&&(n.images=o)}return n}fromJSON(e,t){if(e.uuid!==void 0&&(this.uuid=e.uuid),e.name!==void 0&&(this.name=e.name),e.color!==void 0&&this.color!==void 0&&this.color.setHex(e.color),e.roughness!==void 0&&(this.roughness=e.roughness),e.metalness!==void 0&&(this.metalness=e.metalness),e.sheen!==void 0&&(this.sheen=e.sheen),e.sheenColor!==void 0&&(this.sheenColor=new an().setHex(e.sheenColor)),e.sheenRoughness!==void 0&&(this.sheenRoughness=e.sheenRoughness),e.emissive!==void 0&&this.emissive!==void 0&&this.emissive.setHex(e.emissive),e.specular!==void 0&&this.specular!==void 0&&this.specular.setHex(e.specular),e.specularIntensity!==void 0&&(this.specularIntensity=e.specularIntensity),e.specularColor!==void 0&&this.specularColor!==void 0&&this.specularColor.setHex(e.specularColor),e.shininess!==void 0&&(this.shininess=e.shininess),e.clearcoat!==void 0&&(this.clearcoat=e.clearcoat),e.clearcoatRoughness!==void 0&&(this.clearcoatRoughness=e.clearcoatRoughness),e.dispersion!==void 0&&(this.dispersion=e.dispersion),e.iridescence!==void 0&&(this.iridescence=e.iridescence),e.iridescenceIOR!==void 0&&(this.iridescenceIOR=e.iridescenceIOR),e.iridescenceThicknessRange!==void 0&&(this.iridescenceThicknessRange=e.iridescenceThicknessRange),e.transmission!==void 0&&(this.transmission=e.transmission),e.thickness!==void 0&&(this.thickness=e.thickness),e.attenuationDistance!==void 0&&(this.attenuationDistance=e.attenuationDistance),e.attenuationColor!==void 0&&this.attenuationColor!==void 0&&this.attenuationColor.setHex(e.attenuationColor),e.anisotropy!==void 0&&(this.anisotropy=e.anisotropy),e.anisotropyRotation!==void 0&&(this.anisotropyRotation=e.anisotropyRotation),e.fog!==void 0&&(this.fog=e.fog),e.flatShading!==void 0&&(this.flatShading=e.flatShading),e.blending!==void 0&&(this.blending=e.blending),e.combine!==void 0&&(this.combine=e.combine),e.side!==void 0&&(this.side=e.side),e.shadowSide!==void 0&&(this.shadowSide=e.shadowSide),e.opacity!==void 0&&(this.opacity=e.opacity),e.transparent!==void 0&&(this.transparent=e.transparent),e.alphaTest!==void 0&&(this.alphaTest=e.alphaTest),e.alphaHash!==void 0&&(this.alphaHash=e.alphaHash),e.depthFunc!==void 0&&(this.depthFunc=e.depthFunc),e.depthTest!==void 0&&(this.depthTest=e.depthTest),e.depthWrite!==void 0&&(this.depthWrite=e.depthWrite),e.colorWrite!==void 0&&(this.colorWrite=e.colorWrite),e.blendSrc!==void 0&&(this.blendSrc=e.blendSrc),e.blendDst!==void 0&&(this.blendDst=e.blendDst),e.blendEquation!==void 0&&(this.blendEquation=e.blendEquation),e.blendSrcAlpha!==void 0&&(this.blendSrcAlpha=e.blendSrcAlpha),e.blendDstAlpha!==void 0&&(this.blendDstAlpha=e.blendDstAlpha),e.blendEquationAlpha!==void 0&&(this.blendEquationAlpha=e.blendEquationAlpha),e.blendColor!==void 0&&this.blendColor!==void 0&&this.blendColor.setHex(e.blendColor),e.blendAlpha!==void 0&&(this.blendAlpha=e.blendAlpha),e.stencilWriteMask!==void 0&&(this.stencilWriteMask=e.stencilWriteMask),e.stencilFunc!==void 0&&(this.stencilFunc=e.stencilFunc),e.stencilRef!==void 0&&(this.stencilRef=e.stencilRef),e.stencilFuncMask!==void 0&&(this.stencilFuncMask=e.stencilFuncMask),e.stencilFail!==void 0&&(this.stencilFail=e.stencilFail),e.stencilZFail!==void 0&&(this.stencilZFail=e.stencilZFail),e.stencilZPass!==void 0&&(this.stencilZPass=e.stencilZPass),e.stencilWrite!==void 0&&(this.stencilWrite=e.stencilWrite),e.wireframe!==void 0&&(this.wireframe=e.wireframe),e.wireframeLinewidth!==void 0&&(this.wireframeLinewidth=e.wireframeLinewidth),e.wireframeLinecap!==void 0&&(this.wireframeLinecap=e.wireframeLinecap),e.wireframeLinejoin!==void 0&&(this.wireframeLinejoin=e.wireframeLinejoin),e.rotation!==void 0&&(this.rotation=e.rotation),e.linewidth!==void 0&&(this.linewidth=e.linewidth),e.dashSize!==void 0&&(this.dashSize=e.dashSize),e.gapSize!==void 0&&(this.gapSize=e.gapSize),e.scale!==void 0&&(this.scale=e.scale),e.polygonOffset!==void 0&&(this.polygonOffset=e.polygonOffset),e.polygonOffsetFactor!==void 0&&(this.polygonOffsetFactor=e.polygonOffsetFactor),e.polygonOffsetUnits!==void 0&&(this.polygonOffsetUnits=e.polygonOffsetUnits),e.dithering!==void 0&&(this.dithering=e.dithering),e.alphaToCoverage!==void 0&&(this.alphaToCoverage=e.alphaToCoverage),e.premultipliedAlpha!==void 0&&(this.premultipliedAlpha=e.premultipliedAlpha),e.forceSinglePass!==void 0&&(this.forceSinglePass=e.forceSinglePass),e.allowOverride!==void 0&&(this.allowOverride=e.allowOverride),e.visible!==void 0&&(this.visible=e.visible),e.toneMapped!==void 0&&(this.toneMapped=e.toneMapped),e.userData!==void 0&&(this.userData=e.userData),e.vertexColors!==void 0&&(typeof e.vertexColors=="number"?this.vertexColors=e.vertexColors>0:this.vertexColors=e.vertexColors),e.size!==void 0&&(this.size=e.size),e.sizeAttenuation!==void 0&&(this.sizeAttenuation=e.sizeAttenuation),e.map!==void 0&&(this.map=t[e.map]||null),e.matcap!==void 0&&(this.matcap=t[e.matcap]||null),e.alphaMap!==void 0&&(this.alphaMap=t[e.alphaMap]||null),e.bumpMap!==void 0&&(this.bumpMap=t[e.bumpMap]||null),e.bumpScale!==void 0&&(this.bumpScale=e.bumpScale),e.normalMap!==void 0&&(this.normalMap=t[e.normalMap]||null),e.normalMapType!==void 0&&(this.normalMapType=e.normalMapType),e.normalScale!==void 0){let n=e.normalScale;Array.isArray(n)===!1&&(n=[n,n]),this.normalScale=new on().fromArray(n)}return e.displacementMap!==void 0&&(this.displacementMap=t[e.displacementMap]||null),e.displacementScale!==void 0&&(this.displacementScale=e.displacementScale),e.displacementBias!==void 0&&(this.displacementBias=e.displacementBias),e.roughnessMap!==void 0&&(this.roughnessMap=t[e.roughnessMap]||null),e.metalnessMap!==void 0&&(this.metalnessMap=t[e.metalnessMap]||null),e.emissiveMap!==void 0&&(this.emissiveMap=t[e.emissiveMap]||null),e.emissiveIntensity!==void 0&&(this.emissiveIntensity=e.emissiveIntensity),e.specularMap!==void 0&&(this.specularMap=t[e.specularMap]||null),e.specularIntensityMap!==void 0&&(this.specularIntensityMap=t[e.specularIntensityMap]||null),e.specularColorMap!==void 0&&(this.specularColorMap=t[e.specularColorMap]||null),e.envMap!==void 0&&(this.envMap=t[e.envMap]||null),e.envMapRotation!==void 0&&this.envMapRotation.fromArray(e.envMapRotation),e.envMapIntensity!==void 0&&(this.envMapIntensity=e.envMapIntensity),e.reflectivity!==void 0&&(this.reflectivity=e.reflectivity),e.refractionRatio!==void 0&&(this.refractionRatio=e.refractionRatio),e.lightMap!==void 0&&(this.lightMap=t[e.lightMap]||null),e.lightMapIntensity!==void 0&&(this.lightMapIntensity=e.lightMapIntensity),e.aoMap!==void 0&&(this.aoMap=t[e.aoMap]||null),e.aoMapIntensity!==void 0&&(this.aoMapIntensity=e.aoMapIntensity),e.gradientMap!==void 0&&(this.gradientMap=t[e.gradientMap]||null),e.clearcoatMap!==void 0&&(this.clearcoatMap=t[e.clearcoatMap]||null),e.clearcoatRoughnessMap!==void 0&&(this.clearcoatRoughnessMap=t[e.clearcoatRoughnessMap]||null),e.clearcoatNormalMap!==void 0&&(this.clearcoatNormalMap=t[e.clearcoatNormalMap]||null),e.clearcoatNormalScale!==void 0&&(this.clearcoatNormalScale=new on().fromArray(e.clearcoatNormalScale)),e.iridescenceMap!==void 0&&(this.iridescenceMap=t[e.iridescenceMap]||null),e.iridescenceThicknessMap!==void 0&&(this.iridescenceThicknessMap=t[e.iridescenceThicknessMap]||null),e.transmissionMap!==void 0&&(this.transmissionMap=t[e.transmissionMap]||null),e.thicknessMap!==void 0&&(this.thicknessMap=t[e.thicknessMap]||null),e.anisotropyMap!==void 0&&(this.anisotropyMap=t[e.anisotropyMap]||null),e.sheenColorMap!==void 0&&(this.sheenColorMap=t[e.sheenColorMap]||null),e.sheenRoughnessMap!==void 0&&(this.sheenRoughnessMap=t[e.sheenRoughnessMap]||null),this}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;let t=e.clippingPlanes,n=null;if(t!==null){let i=t.length;n=new Array(i);for(let r=0;r!==i;++r)n[r]=t[r].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.allowOverride=e.allowOverride,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){e===!0&&this.version++}},Lm=class extends Xs{constructor(e){super(),this.isSpriteMaterial=!0,this.type="SpriteMaterial",this.color=new an(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.alphaMap=e.alphaMap,this.rotation=e.rotation,this.sizeAttenuation=e.sizeAttenuation,this.fog=e.fog,this}};var za=new ge,nb=new ge,xm=new ge,Al=new ge,sb=new ge,ym=new ge,ib=new ge,Bm=class{constructor(e=new ge,t=new ge(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,za)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);let n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){let t=za.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(za.copy(this.origin).addScaledVector(this.direction,t),za.distanceToSquared(e))}distanceSqToSegment(e,t,n,i){nb.copy(e).add(t).multiplyScalar(.5),xm.copy(t).sub(e).normalize(),Al.copy(this.origin).sub(nb);let r=e.distanceTo(t)*.5,o=-this.direction.dot(xm),a=Al.dot(this.direction),l=-Al.dot(xm),c=Al.lengthSq(),u=Math.abs(1-o*o),h,p,f,m;if(u>0)if(h=o*l-a,p=o*a-l,m=r*u,h>=0)if(p>=-m)if(p<=m){let g=1/u;h*=g,p*=g,f=h*(h+o*p+2*a)+p*(o*h+p+2*l)+c}else p=r,h=Math.max(0,-(o*p+a)),f=-h*h+p*(p+2*l)+c;else p=-r,h=Math.max(0,-(o*p+a)),f=-h*h+p*(p+2*l)+c;else p<=-m?(h=Math.max(0,-(-o*r+a)),p=h>0?-r:Math.min(Math.max(-r,-l),r),f=-h*h+p*(p+2*l)+c):p<=m?(h=0,p=Math.min(Math.max(-r,-l),r),f=p*(p+2*l)+c):(h=Math.max(0,-(o*r+a)),p=h>0?r:Math.min(Math.max(-r,-l),r),f=-h*h+p*(p+2*l)+c);else p=o>0?-r:r,h=Math.max(0,-(o*p+a)),f=-h*h+p*(p+2*l)+c;return n&&n.copy(this.origin).addScaledVector(this.direction,h),i&&i.copy(nb).addScaledVector(xm,p),f}intersectSphere(e,t){za.subVectors(e.center,this.origin);let n=za.dot(this.direction),i=za.dot(za)-n*n,r=e.radius*e.radius;if(i>r)return null;let o=Math.sqrt(r-i),a=n-o,l=n+o;return l<0?null:a<0?this.at(l,t):this.at(a,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);return n===null?null:this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,i,r,o,a,l,c=1/this.direction.x,u=1/this.direction.y,h=1/this.direction.z,p=this.origin;return c>=0?(n=(e.min.x-p.x)*c,i=(e.max.x-p.x)*c):(n=(e.max.x-p.x)*c,i=(e.min.x-p.x)*c),u>=0?(r=(e.min.y-p.y)*u,o=(e.max.y-p.y)*u):(r=(e.max.y-p.y)*u,o=(e.min.y-p.y)*u),n>o||r>i||((r>n||isNaN(n))&&(n=r),(o<i||isNaN(i))&&(i=o),h>=0?(a=(e.min.z-p.z)*h,l=(e.max.z-p.z)*h):(a=(e.max.z-p.z)*h,l=(e.min.z-p.z)*h),n>l||a>i)||((a>n||n!==n)&&(n=a),(l<i||i!==i)&&(i=l),i<0)?null:this.at(n>=0?n:i,t)}intersectsBox(e){return this.intersectBox(e,za)!==null}intersectTriangle(e,t,n,i,r){sb.subVectors(t,e),ym.subVectors(n,e),ib.crossVectors(sb,ym);let o=this.direction.dot(ib),a;if(o>0){if(i)return null;a=1}else if(o<0)a=-1,o=-o;else return null;Al.subVectors(this.origin,e);let l=a*this.direction.dot(ym.crossVectors(Al,ym));if(l<0)return null;let c=a*this.direction.dot(sb.cross(Al));if(c<0||l+c>o)return null;let u=-a*Al.dot(ib);return u<0?null:this.at(u/o,r)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}},Ar=class extends Xs{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new an(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new go,this.combine=Su,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},sA=new An,ru=new Bm,bm=new _u,iA=new ge,vm=new ge,_m=new ge,Sm=new ge,rb=new ge,Tm=new ge,rA=new ge,Mm=new ge,Is=class extends ui{constructor(e=new Ui,t=new Ar){super(),this.isMesh=!0,this.type="Mesh",this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),e.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),e.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}updateMorphTargets(){let t=this.geometry.morphAttributes,n=Object.keys(t);if(n.length>0){let i=t[n[0]];if(i!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,o=i.length;r<o;r++){let a=i[r].name||String(r);this.morphTargetInfluences.push(0),this.morphTargetDictionary[a]=r}}}}getVertexPosition(e,t){let n=this.geometry,i=n.attributes.position,r=n.morphAttributes.position,o=n.morphTargetsRelative;t.fromBufferAttribute(i,e);let a=this.morphTargetInfluences;if(r&&a){Tm.set(0,0,0);for(let l=0,c=r.length;l<c;l++){let u=a[l],h=r[l];u!==0&&(rb.fromBufferAttribute(h,e),o?Tm.addScaledVector(rb,u):Tm.addScaledVector(rb.sub(t),u))}t.add(Tm)}return t}raycast(e,t){let n=this.geometry,i=this.material,r=this.matrixWorld;i!==void 0&&(n.boundingSphere===null&&n.computeBoundingSphere(),bm.copy(n.boundingSphere),bm.applyMatrix4(r),ru.copy(e.ray).recast(e.near),!(bm.containsPoint(ru.origin)===!1&&(ru.intersectSphere(bm,iA)===null||ru.origin.distanceToSquared(iA)>(e.far-e.near)**2))&&(sA.copy(r).invert(),ru.copy(e.ray).applyMatrix4(sA),!(n.boundingBox!==null&&ru.intersectsBox(n.boundingBox)===!1)&&this._computeIntersections(e,t,ru)))}_computeIntersections(e,t,n){let i,r=this.geometry,o=this.material,a=r.index,l=r.attributes.position,c=r.attributes.uv,u=r.attributes.uv1,h=r.attributes.normal,p=r.groups,f=r.drawRange;if(a!==null)if(Array.isArray(o))for(let m=0,g=p.length;m<g;m++){let y=p[m],x=o[y.materialIndex],b=Math.max(y.start,f.start),v=Math.min(a.count,Math.min(y.start+y.count,f.start+f.count));for(let _=b,M=v;_<M;_+=3){let T=a.getX(_),w=a.getX(_+1),S=a.getX(_+2);i=wm(this,x,e,n,c,u,h,T,w,S),i&&(i.faceIndex=Math.floor(_/3),i.face.materialIndex=y.materialIndex,t.push(i))}}else{let m=Math.max(0,f.start),g=Math.min(a.count,f.start+f.count);for(let y=m,x=g;y<x;y+=3){let b=a.getX(y),v=a.getX(y+1),_=a.getX(y+2);i=wm(this,o,e,n,c,u,h,b,v,_),i&&(i.faceIndex=Math.floor(y/3),t.push(i))}}else if(l!==void 0)if(Array.isArray(o))for(let m=0,g=p.length;m<g;m++){let y=p[m],x=o[y.materialIndex],b=Math.max(y.start,f.start),v=Math.min(l.count,Math.min(y.start+y.count,f.start+f.count));for(let _=b,M=v;_<M;_+=3){let T=_,w=_+1,S=_+2;i=wm(this,x,e,n,c,u,h,T,w,S),i&&(i.faceIndex=Math.floor(_/3),i.face.materialIndex=y.materialIndex,t.push(i))}}else{let m=Math.max(0,f.start),g=Math.min(l.count,f.start+f.count);for(let y=m,x=g;y<x;y+=3){let b=y,v=y+1,_=y+2;i=wm(this,o,e,n,c,u,h,b,v,_),i&&(i.faceIndex=Math.floor(y/3),t.push(i))}}}};function RL(s,e,t,n,i,r,o,a){let l;if(e.side===es?l=n.intersectTriangle(o,r,i,!0,a):l=n.intersectTriangle(i,r,o,e.side===Si,a),l===null)return null;Mm.copy(a),Mm.applyMatrix4(s.matrixWorld);let c=t.ray.origin.distanceTo(Mm);return c<t.near||c>t.far?null:{distance:c,point:Mm.clone(),object:s}}function wm(s,e,t,n,i,r,o,a,l,c){s.getVertexPosition(a,vm),s.getVertexPosition(l,_m),s.getVertexPosition(c,Sm);let u=RL(s,e,t,n,vm,_m,Sm,rA);if(u){let h=new ge;Rl.getBarycoord(rA,vm,_m,Sm,h),i&&(u.uv=Rl.getInterpolatedAttribute(i,a,l,c,h,new on)),r&&(u.uv1=Rl.getInterpolatedAttribute(r,a,l,c,h,new on)),o&&(u.normal=Rl.getInterpolatedAttribute(o,a,l,c,h,new ge),u.normal.dot(n.direction)>0&&u.normal.multiplyScalar(-1));let p={a,b:l,c,normal:new ge,materialIndex:0};Rl.getNormal(vm,_m,Sm,p.normal),u.face=p,u.barycoord=h}return u}var Qn=class extends Ss{constructor(e=null,t=1,n=1,i,r,o,a,l,c=Cn,u=Cn,h,p){super(null,o,a,l,c,u,i,r,h,p),this.isDataTexture=!0,this.image={data:e,width:t,height:n},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}};var Xa=class extends $s{constructor(e,t,n,i=1){super(e,t,n),this.isInstancedBufferAttribute=!0,this.meshPerAttribute=i}copy(e){return super.copy(e),this.meshPerAttribute=e.meshPerAttribute,this}toJSON(){let e=super.toJSON();return e.meshPerAttribute=this.meshPerAttribute,e.isInstancedBufferAttribute=!0,e}};var ob=new ge,NL=new ge,PL=new Tn,Mr=class{constructor(e=new ge(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,n,i){return this.normal.set(e,t,n),this.constant=i,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(e,t,n){let i=ob.subVectors(n,t).cross(NL.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(i,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){let e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(e).addScaledVector(this.normal,-this.distanceToPoint(e))}intersectLine(e,t,n=!0){let i=e.delta(ob),r=this.normal.dot(i);if(r===0)return this.distanceToPoint(e.start)===0?t.copy(e.start):null;let o=-(e.start.dot(this.normal)+this.constant)/r;return n===!0&&(o<0||o>1)?null:t.copy(e.start).addScaledVector(i,o)}intersectsLine(e){let t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){let n=t||PL.getNormalMatrix(e),i=this.coplanarPoint(ob).applyMatrix4(e),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}},ou=new _u,IL=new on(.5,.5),Am=new ge,Bo=class{constructor(e=new Mr,t=new Mr,n=new Mr,i=new Mr,r=new Mr,o=new Mr){this.planes=[e,t,n,i,r,o]}set(e,t,n,i,r,o){let a=this.planes;return a[0].copy(e),a[1].copy(t),a[2].copy(n),a[3].copy(i),a[4].copy(r),a[5].copy(o),this}copy(e){let t=this.planes;for(let n=0;n<6;n++)t[n].copy(e.planes[n]);return this}setFromProjectionMatrix(e,t=_i,n=!1){let i=this.planes,r=e.elements,o=r[0],a=r[1],l=r[2],c=r[3],u=r[4],h=r[5],p=r[6],f=r[7],m=r[8],g=r[9],y=r[10],x=r[11],b=r[12],v=r[13],_=r[14],M=r[15];if(i[0].setComponents(c-o,f-u,x-m,M-b).normalize(),i[1].setComponents(c+o,f+u,x+m,M+b).normalize(),i[2].setComponents(c+a,f+h,x+g,M+v).normalize(),i[3].setComponents(c-a,f-h,x-g,M-v).normalize(),n)i[4].setComponents(l,p,y,_).normalize(),i[5].setComponents(c-l,f-p,x-y,M-_).normalize();else if(i[4].setComponents(c-l,f-p,x-y,M-_).normalize(),t===_i)i[5].setComponents(c+l,f+p,x+y,M+_).normalize();else if(t===wr)i[5].setComponents(l,p,y,_).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),ou.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),ou.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(ou)}intersectsSprite(e){ou.center.set(0,0,0);let t=IL.distanceTo(e.center);return ou.radius=.7071067811865476+t,ou.applyMatrix4(e.matrixWorld),this.intersectsSphere(ou)}intersectsSphere(e){let t=this.planes,n=e.center,i=-e.radius;for(let r=0;r<6;r++)if(t[r].distanceToPoint(n)<i)return!1;return!0}intersectsBox(e){let t=this.planes;for(let n=0;n<6;n++){let i=t[n];if(Am.x=i.normal.x>0?e.max.x:e.min.x,Am.y=i.normal.y>0?e.max.y:e.min.y,Am.z=i.normal.z>0?e.max.z:e.min.z,i.distanceToPoint(Am)<0)return!1}return!0}containsPoint(e){let t=this.planes;for(let n=0;n<6;n++)if(t[n].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}},oA=new An,Om=class s{constructor(){this.coordinateSystem=_i,this._frustums=[],this._count=0}setFromArrayCamera(e){let t=e.cameras,n=this._frustums;for(let i=0;i<t.length;i++){let r=t[i];oA.multiplyMatrices(r.projectionMatrix,r.matrixWorldInverse),n[i]===void 0&&(n[i]=new Bo),n[i].setFromProjectionMatrix(oA,r.coordinateSystem,r.reversedDepth)}return this._count=t.length,this}intersectsObject(e){let t=this._frustums;for(let n=0;n<this._count;n++)if(t[n].intersectsObject(e))return!0;return!1}intersectsSprite(e){let t=this._frustums;for(let n=0;n<this._count;n++)if(t[n].intersectsSprite(e))return!0;return!1}intersectsSphere(e){let t=this._frustums;for(let n=0;n<this._count;n++)if(t[n].intersectsSphere(e))return!0;return!1}intersectsBox(e){let t=this._frustums;for(let n=0;n<this._count;n++)if(t[n].intersectsBox(e))return!0;return!1}containsPoint(e){let t=this._frustums;for(let n=0;n<this._count;n++)if(t[n].containsPoint(e))return!0;return!1}copy(e){this.coordinateSystem=e.coordinateSystem;let t=this._frustums,n=e._frustums;for(let i=0;i<e._count;i++)t[i]===void 0&&(t[i]=new Bo),t[i].copy(n[i]);return this._count=e._count,this}clone(){return new s().copy(this)}};var hp=class extends Xs{constructor(e){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new an(16777215),this.map=null,this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this.fog=e.fog,this}};var km=class extends Xs{constructor(e){super(),this.isPointsMaterial=!0,this.type="PointsMaterial",this.color=new an(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.alphaMap=e.alphaMap,this.size=e.size,this.sizeAttenuation=e.sizeAttenuation,this.fog=e.fog,this}};var Ya=class extends Ss{constructor(e,t,n,i,r=Yt,o=Yt,a,l,c){super(e,t,n,i,r,o,a,l,c),this.isVideoTexture=!0,this.generateMipmaps=!1,this._requestVideoFrameCallbackId=0;let u=this;function h(){u.needsUpdate=!0,u._requestVideoFrameCallbackId=e.requestVideoFrameCallback(h)}"requestVideoFrameCallback"in e&&(this._requestVideoFrameCallbackId=e.requestVideoFrameCallback(h))}clone(){return new this.constructor(this.image).copy(this)}update(){let e=this.image;"requestVideoFrameCallback"in e===!1&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}dispose(){this._requestVideoFrameCallbackId!==0&&(this.source.data.cancelVideoFrameCallback(this._requestVideoFrameCallbackId),this._requestVideoFrameCallbackId=0),super.dispose()}};var qd=class extends Ss{constructor(e,t){super({width:e,height:t}),this.isFramebufferTexture=!0,this.magFilter=Cn,this.minFilter=Cn,this.generateMipmaps=!1,this.needsUpdate=!0}};var Oo=class extends Ss{constructor(e=[],t=Er,n,i,r,o,a,l,c,u){super(e,t,n,i,r,o,a,l,c,u),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},xo=class extends Ss{constructor(e,t,n,i,r,o,a,l,c){super(e,t,n,i,r,o,a,l,c),this.isCanvasTexture=!0,this.needsUpdate=!0}};var Ys=class extends Ss{constructor(e,t,n=Kn,i,r,o,a=Cn,l=Cn,c,u=ni,h=1){if(u!==ni&&u!==xi)throw new Error("THREE.DepthTexture: format must be either THREE.DepthFormat or THREE.DepthStencilFormat");let p={width:e,height:t,depth:h};super(p,i,r,o,a,l,u,n,c),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.source=new Wd(Object.assign({},e.image)),this.compareFunction=e.compareFunction,this}toJSON(e){let t=super.toJSON(e);return this.compareFunction!==null&&(t.compareFunction=this.compareFunction),t}},Xd=class extends Ys{constructor(e,t=Kn,n=Er,i,r,o=Cn,a=Cn,l,c=ni){let u={width:e,height:e,depth:1},h=[u,u,u,u,u,u];super(e,e,t,n,i,r,o,a,l,c),this.image=h,this.isCubeDepthTexture=!0,this.isCubeTexture=!0}get images(){return this.image}set images(e){this.image=e}},Yd=class extends Ss{constructor(e=null){super(),this.sourceTexture=e,this.isExternalTexture=!0}copy(e){return super.copy(e),this.sourceTexture=e.sourceTexture,this}},ja=class s extends Ui{constructor(e=1,t=1,n=1,i=1,r=1,o=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:n,widthSegments:i,heightSegments:r,depthSegments:o};let a=this;i=Math.floor(i),r=Math.floor(r),o=Math.floor(o);let l=[],c=[],u=[],h=[],p=0,f=0;m("z","y","x",-1,-1,n,t,e,o,r,0),m("z","y","x",1,-1,n,t,-e,o,r,1),m("x","z","y",1,1,e,n,t,i,o,2),m("x","z","y",1,-1,e,n,-t,i,o,3),m("x","y","z",1,-1,e,t,n,i,r,4),m("x","y","z",-1,-1,e,t,-n,i,r,5),this.setIndex(l),this.setAttribute("position",new qs(c,3)),this.setAttribute("normal",new qs(u,3)),this.setAttribute("uv",new qs(h,2));function m(g,y,x,b,v,_,M,T,w,S,A){let I=_/w,N=M/S,P=_/2,B=M/2,U=T/2,D=w+1,L=S+1,k=0,W=0,$=new ge;for(let ie=0;ie<L;ie++){let xe=ie*N-B;for(let he=0;he<D;he++){let Pe=he*I-P;$[g]=Pe*b,$[y]=xe*v,$[x]=U,c.push($.x,$.y,$.z),$[g]=0,$[y]=0,$[x]=T>0?1:-1,u.push($.x,$.y,$.z),h.push(he/w),h.push(1-ie/S),k+=1}}for(let ie=0;ie<S;ie++)for(let xe=0;xe<w;xe++){let he=p+xe+D*ie,Pe=p+xe+D*(ie+1),Ge=p+(xe+1)+D*(ie+1),He=p+(xe+1)+D*ie;l.push(he,Pe,He),l.push(Pe,Ge,He),W+=6}a.addGroup(f,W,A),f+=W,p+=k}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new s(e.width,e.height,e.depth,e.widthSegments,e.heightSegments,e.depthSegments)}};var Vm=class s extends Ui{constructor(e=1,t=1,n=1,i=32,r=1,o=!1,a=0,l=Math.PI*2){super(),this.type="CylinderGeometry",this.parameters={radiusTop:e,radiusBottom:t,height:n,radialSegments:i,heightSegments:r,openEnded:o,thetaStart:a,thetaLength:l};let c=this;i=Math.floor(i),r=Math.floor(r);let u=[],h=[],p=[],f=[],m=0,g=[],y=n/2,x=0;b(),o===!1&&(e>0&&v(!0),t>0&&v(!1)),this.setIndex(u),this.setAttribute("position",new qs(h,3)),this.setAttribute("normal",new qs(p,3)),this.setAttribute("uv",new qs(f,2));function b(){let _=new ge,M=new ge,T=0,w=(t-e)/n;for(let S=0;S<=r;S++){let A=[],I=S/r,N=I*(t-e)+e;for(let P=0;P<=i;P++){let B=P/i,U=B*l+a,D=Math.sin(U),L=Math.cos(U);M.x=N*D,M.y=-I*n+y,M.z=N*L,h.push(M.x,M.y,M.z),_.set(D,w,L).normalize(),p.push(_.x,_.y,_.z),f.push(B,1-I),A.push(m++)}g.push(A)}for(let S=0;S<i;S++)for(let A=0;A<r;A++){let I=g[A][S],N=g[A+1][S],P=g[A+1][S+1],B=g[A][S+1];(e>0||A!==0)&&(u.push(I,N,B),T+=3),(t>0||A!==r-1)&&(u.push(N,P,B),T+=3)}c.addGroup(x,T,0),x+=T}function v(_){let M=m,T=new on,w=new ge,S=0,A=_===!0?e:t,I=_===!0?1:-1;for(let P=1;P<=i;P++)h.push(0,y*I,0),p.push(0,I,0),f.push(.5,.5),m++;let N=m;for(let P=0;P<=i;P++){let U=P/i*l+a,D=Math.cos(U),L=Math.sin(U);w.x=A*L,w.y=y*I,w.z=A*D,h.push(w.x,w.y,w.z),p.push(0,I,0),T.x=D*.5+.5,T.y=L*.5*I+.5,f.push(T.x,T.y),m++}for(let P=0;P<i;P++){let B=M+P,U=N+P;_===!0?u.push(U,U+1,B):u.push(U+1,U,B),S+=3}c.addGroup(x,S,_===!0?1:2),x+=S}}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new s(e.radiusTop,e.radiusBottom,e.height,e.radialSegments,e.heightSegments,e.openEnded,e.thetaStart,e.thetaLength)}};var Za=class s extends Ui{constructor(e=1,t=1,n=1,i=1){super(),this.type="PlaneGeometry",this.parameters={width:e,height:t,widthSegments:n,heightSegments:i};let r=e/2,o=t/2,a=Math.floor(n),l=Math.floor(i),c=a+1,u=l+1,h=e/a,p=t/l,f=[],m=[],g=[],y=[];for(let x=0;x<u;x++){let b=x*p-o;for(let v=0;v<c;v++){let _=v*h-r;m.push(_,-b,0),g.push(0,0,1),y.push(v/a),y.push(1-x/l)}}for(let x=0;x<l;x++)for(let b=0;b<a;b++){let v=b+c*x,_=b+c*(x+1),M=b+1+c*(x+1),T=b+1+c*x;f.push(v,_,T),f.push(_,M,T)}this.setIndex(f),this.setAttribute("position",new qs(m,3)),this.setAttribute("normal",new qs(g,3)),this.setAttribute("uv",new qs(y,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new s(e.width,e.height,e.widthSegments,e.heightSegments)}};var zm=class s extends Ui{constructor(e=1,t=32,n=16,i=0,r=Math.PI*2,o=0,a=Math.PI){super(),this.type="SphereGeometry",this.parameters={radius:e,widthSegments:t,heightSegments:n,phiStart:i,phiLength:r,thetaStart:o,thetaLength:a},t=Math.max(3,Math.floor(t)),n=Math.max(2,Math.floor(n));let l=Math.min(o+a,Math.PI),c=0,u=[],h=new ge,p=new ge,f=[],m=[],g=[],y=[];for(let x=0;x<=n;x++){let b=[],v=x/n,_=o+v*a,M=e*Math.cos(_),T=Math.sqrt(e*e-M*M),w=0;x===0&&o===0?w=.5/t:x===n&&l===Math.PI&&(w=-.5/t);for(let S=0;S<=t;S++){let A=S/t,I=i+A*r;h.x=-T*Math.cos(I),h.y=M,h.z=T*Math.sin(I),m.push(h.x,h.y,h.z),p.copy(h).normalize(),g.push(p.x,p.y,p.z),y.push(A+w,1-v),b.push(c++)}u.push(b)}for(let x=0;x<n;x++)for(let b=0;b<t;b++){let v=u[x][b+1],_=u[x][b],M=u[x+1][b],T=u[x+1][b+1];(x!==0||o>0)&&f.push(v,_,T),(x!==n-1||l<Math.PI)&&f.push(_,M,T)}this.setIndex(f),this.setAttribute("position",new qs(m,3)),this.setAttribute("normal",new qs(g,3)),this.setAttribute("uv",new qs(y,2))}copy(e){return super.copy(e),this.parameters=Object.assign({},e.parameters),this}static fromJSON(e){return new s(e.radius,e.widthSegments,e.heightSegments,e.phiStart,e.phiLength,e.thetaStart,e.thetaLength)}};var Gm=class extends Xs{constructor(e){super(),this.isShadowMaterial=!0,this.type="ShadowMaterial",this.color=new an(0),this.transparent=!0,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.fog=e.fog,this}};function Bu(s){let e={};for(let t in s){e[t]={};for(let n in s[t]){let i=s[t][n];if(aA(i))i.isRenderTargetTexture?(lt("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),e[t][n]=null):e[t][n]=i.clone();else if(Array.isArray(i))if(aA(i[0])){let r=[];for(let o=0,a=i.length;o<a;o++)r[o]=i[o].clone();e[t][n]=r}else e[t][n]=i.slice();else e[t][n]=i}}return e}function Oi(s){let e={};for(let t=0;t<s.length;t++){let n=Bu(s[t]);for(let i in n)e[i]=n[i]}return e}function aA(s){return s&&(s.isColor||s.isMatrix3||s.isMatrix4||s.isVector2||s.isVector3||s.isVector4||s.isTexture||s.isQuaternion)}function DL(s){let e=[];for(let t=0;t<s.length;t++)e.push(s[t].clone());return e}function Mb(s){let e=s.getRenderTarget();return e===null?s.outputColorSpace:e.isXRRenderTarget===!0?e.texture.colorSpace:dn.workingColorSpace}var FA={clone:Bu,merge:Oi},FL=`void main() {
3
3
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
4
4
  }`,UL=`void main() {
@@ -4686,4 +4686,4 @@ The element must be a direct child of a <canvas layoutsubtree>.`,y),f=!0)}}}}),t
4686
4686
  Requested URL: ${S}
4687
4687
  Resolved URL: ${A}
4688
4688
  Path type: ${N?"relative":"absolute"}
4689
- Error:`,I),o=!1})}catch(A){console.error("[ImageTexture] Error initiating image load:",A),o=!1}}};setTimeout(()=>{let S=s?.url?.uniform?.value??"";S&&S.trim()!==""&&g(S)},0),t(()=>{let S=s?.url?.uniform?.value??"";S!==r&&!o&&g(S)}),e(()=>{a.dispose()});let y=n,x=X.x.div(X.y),b=s.objectFit.uniform.value,v;switch(b){case 1:{let S=fn(x.div(c),d(1));v=R(c.div(x).mul(S),S);break}case 2:v=R(1,1);break;case 3:{let S=fn(fn(x.div(c),d(1)),fn(X.x.div(u),X.y.div(h)));v=R(c.div(x).mul(S),S);break}case 4:{let S=fn(X.x.div(u),X.y.div(h));v=R(c.div(x).mul(S),S);break}default:{let S=St(x.div(c),d(1));v=R(c.div(x).mul(S),S);break}}let _=y.sub(R(.5)).div(v).add(R(.5)),M=R(_.x,d(1).sub(_.y)),T=l.sample(M),w=or(or(M.x.lessThan(0),M.x.greaterThan(1)),or(M.y.lessThan(0),M.y.greaterThan(1)));return F(T.rgb,ar(w,d(0),T.a))}};var gF={name:"Invert",category:"Adjustments",description:"Invert RGB colors while preserving alpha",requiresChild:!0,props:{},fragmentNode:({childNode:s})=>{if(!s)return console.error("You must pass a child component into the Invert shader."),F(0);let e=s||F(0,0,0,0);return F(de(1,1,1).sub(e.rgb),e.a)}};var xF={name:"Kaleidoscope",category:"Distortions",description:"Create a kaleidoscope effect with radial mirrored segments",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"The center point of the kaleidoscope effect",ui:{type:"position",label:"Center",group:"Position"}},segments:{default:6,description:"Number of radial segments in the kaleidoscope",ui:{type:["range","map"],min:2,max:24,step:1,label:"Segments",group:"Effect"}},angle:{default:0,description:"Rotation offset for the entire kaleidoscope pattern",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},edges:{default:"mirror",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=X.x.div(X.y),r=R(H.x.mul(i),H.y),o=R(s.center.uniform.x.mul(i),s.center.uniform.y.oneMinus()),a=r.sub(o),l=In(a),c=Jn(a.y,a.x),u=s.angle.uniform.mul(Math.PI/180),h=c.add(u),p=d(Math.PI*2).div(s.segments.uniform),f=ls(h,p.mul(2)),m=f.greaterThan(p).select(p.mul(2).sub(f),f),g=R(ke(m).mul(l),ue(m).mul(l)),y=o.add(g),x=R(y.x.div(i),y.y);return It(En(x,n.sample(x),n,s.edges.uniform.value))}};var Dq=Ne(([s])=>{let e=d(6.2831853);return de(ke(e.mul(s)).mul(.5).add(.5),ke(e.mul(s.sub(.333))).mul(.5).add(.5),ke(e.mul(s.sub(.666))).mul(.5).add(.5))}),yF={name:"LensFlare",category:"Stylize",description:"Realistic camera lens flare with artifacts.",props:{lightPosition:{default:{x:.3,y:.3},transform:ft,description:"Position of the light source",ui:{type:"position",label:"Light Position",group:"Light"}},intensity:{default:.5,description:"Master brightness of the entire lens flare effect",ui:{type:["range","map"],min:0,max:2,step:.01,label:"Intensity",group:"Light"}},ghostIntensity:{default:.4,description:"Brightness of internal reflection ghost discs along the flare axis",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Ghosts",group:"Reflections"}},ghostSpread:{default:.7,description:"Spacing between ghost reflections along the flare axis",ui:{type:"range",min:.1,max:2,step:.01,label:"Ghost Spread",group:"Reflections"}},ghostChroma:{default:.3,description:"Rainbow chromatic fringing around ghost element edges",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Ghost Chroma",group:"Reflections"}},haloIntensity:{default:.4,description:"Brightness of the circular halo ring from internal reflection",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Halo",group:"Reflections"}},haloRadius:{default:.6,description:"Radius of the halo ring",ui:{type:"range",min:.1,max:1,step:.01,label:"Halo Size",group:"Reflections"}},haloChroma:{default:.6,description:"Spectral dispersion on the halo creating rainbow color separation",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Halo Chroma",group:"Reflections"}},haloSoftness:{default:.8,description:"Thickness and softness of the halo ring",ui:{type:["range","map"],min:.01,max:3,step:.01,label:"Halo Softness",group:"Reflections"}},starburstIntensity:{default:.3,description:"Brightness of diffraction spikes radiating from the light source",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Starburst",group:"Effects"}},starburstPoints:{default:6,description:"Number of starburst spikes (simulates aperture blade count)",ui:{type:["range","map"],min:4,max:16,step:1,label:"Blades",group:"Effects"}},streakIntensity:{default:.15,description:"Brightness of horizontal anamorphic light streak",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Streak",group:"Effects"}},streakLength:{default:.5,description:"Horizontal extent of the anamorphic streak",ui:{type:["range","map"],min:.1,max:1,step:.01,label:"Streak Length",group:"Effects"}},glareIntensity:{default:.2,description:"Soft veiling glare that washes out contrast around the light",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Glare",group:"Effects"}},glareSize:{default:.5,description:"Size of the soft glare glow",ui:{type:["range","map"],min:.1,max:1,step:.01,label:"Glare Size",group:"Effects"}},edgeFade:{default:.2,description:"How much the flare fades when the light source is near the screen edge (0 = no fade, 1 = heavy fade)",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Edge Fade",group:"Light"}},speed:{default:.5,description:"Speed of subtle flare shimmer and starburst rotation",ui:{type:"range",min:0,max:3,step:.1,label:"Speed",group:"Animation"}}},fragmentNode:s=>{let{uniforms:e}=s,t=e.intensity.uniform,n=e.ghostIntensity.uniform,i=e.ghostSpread.uniform,r=e.ghostChroma.uniform,o=e.haloIntensity.uniform,a=e.haloRadius.uniform,l=e.haloChroma.uniform,c=e.haloSoftness.uniform,u=e.starburstIntensity.uniform,h=e.starburstPoints.uniform,p=e.streakIntensity.uniform,f=e.streakLength.uniform,m=e.glareIntensity.uniform,g=e.glareSize.uniform,y=X.x.div(X.y),x=H,b=R(e.lightPosition.uniform.x,e.lightPosition.uniform.y.oneMinus()),v=R(.5,.5).sub(b),_=cn(s,e.speed),M=ue(_.mul(3.7)).mul(.04).add(ue(_.mul(7.3)).mul(.03)).add(ue(_.mul(13.1)).mul(.02)).add(.97),T=e.edgeFade.uniform,w=St(bt(b.x.sub(.5)).mul(2),bt(b.y.sub(.5)).mul(2)),S=d(1).sub(T.mul(.5)),A=ve(d(1),we(S,d(1),w).oneMinus(),T),I=t.mul(A).mul(M),N=R(x.x.sub(b.x).mul(y),x.y.sub(b.y)),P=N.length(),B=[{offset:.15,size:.2,bright:.3,hollow:.1,r:1,g:.95,b:.9},{offset:.3,size:.12,bright:.25,hollow:.65,r:1,g:.85,b:.55},{offset:.5,size:.08,bright:.35,hollow:.15,r:.62,g:.82,b:1},{offset:.72,size:.14,bright:.18,hollow:.75,r:.75,g:1,b:.7},{offset:.95,size:.06,bright:.3,hollow:0,r:1,g:.6,b:.85},{offset:1.25,size:.1,bright:.15,hollow:.8,r:.55,g:.88,b:1},{offset:1.55,size:.07,bright:.2,hollow:.25,r:1,g:.92,b:.6}],U=de(0,0,0);for(let z=0;z<B.length;z++){let q=B[z],Q=b.add(v.mul(d(q.offset).mul(i).mul(2))),Se=R(x.x.sub(Q.x).mul(y),x.y.sub(Q.y)).length(),Ae=d(q.size),K=we(Ae.mul(.12),Ae,Se).oneMinus(),Z=we(Ae.mul(.05),Ae.mul(.45),Se).oneMinus(),me=K.mul(d(1).sub(Z.mul(d(q.hollow)))),Ze=d(z*2.17),Be=ue(_.mul(4.3).add(Ze)).mul(.08).add(ue(_.mul(9.1).add(Ze.mul(1.7))).mul(.05)).add(.95),Je=Ae.mul(.78),gt=Ae.mul(r).mul(.14),xt=Ae.mul(.1),Dt=we(d(0),xt,bt(Se.sub(Je.add(gt)))).oneMinus(),se=we(d(0),xt,bt(Se.sub(Je))).oneMinus(),st=we(d(0),xt,bt(Se.sub(Je.sub(gt)))).oneMinus(),De=d(q.bright).mul(n).mul(Be),dt=de(me.mul(d(q.r)).add(Dt.mul(r)).mul(De),me.mul(d(q.g)).add(se.mul(r)).mul(De),me.mul(d(q.b)).add(st.mul(r)).mul(De));U=U.add(dt)}let D=R(d(1).sub(b.x),d(1).sub(b.y)),L=R(x.x.sub(D.x).mul(y),x.y.sub(D.y)),k=L.length(),W=a.mul(l).mul(.06),$=c.mul(.12).add(.005),ie=we(d(0),$,bt(k.sub(a.add(W)))).oneMinus(),xe=we(d(0),$,bt(k.sub(a))).oneMinus(),he=we(d(0),$,bt(k.sub(a.sub(W)))).oneMinus(),Pe=ue(Jn(L.y,L.x).mul(3).add(_.mul(.5))).mul(.12).add(.88),Ge=de(ie,xe,he).mul(o).mul(Pe),He=Jn(N.y,N.x),oe=Jn(v.y,v.x.mul(y)).mul(.5).add(_.mul(.06)),be=He.add(oe),Te=Pt(bt(ke(be.mul(h.div(2)))),d(3.5)),Fe=Pt(bt(ke(be.add(.25).mul(h.div(2)))),d(7)).mul(.4),ze=d(1).div(d(1).add(P.mul(P).mul(60))),fe=Dq(be.div(d(6.2831853)).add(.5)),Xe=ve(de(1,.97,.92),fe,d(.12)),Re=Te.add(Fe).mul(ze).mul(u).mul(Xe),Y=bt(x.y.sub(b.y)),ye=bt(x.x.sub(b.x)),Me=d(-800).mul(Y).mul(Y).exp(),Le=f.mul(f).mul(.25).add(.001),Ye=d(-1).mul(ye).mul(ye).div(Le.mul(.7)).exp(),tt=d(-1).mul(ye).mul(ye).div(Le).exp(),et=d(-1).mul(ye).mul(ye).div(Le.mul(1.4)).exp(),Qe=de(Me.mul(Ye).mul(.5),Me.mul(tt).mul(.65),Me.mul(et).mul(.9)).mul(p),nt=d(1).div(g.mul(g).add(.01)),J=d(-1).mul(P).mul(P).mul(nt).exp().mul(m).mul(de(1,.98,.95)),Ie=d(-500).mul(P).mul(P).exp(),Ee=we(d(0),d(.025),P).oneMinus(),O=Ie.add(Ee.mul(1.5)).mul(de(1,.98,.96)).mul(t),E=U.add(Ge).add(Re).add(Qe).add(J).add(O).mul(I);return F(E,ht(Nt(E,de(.299,.587,.114)).mul(2),0,1))}};var bF=Array.from({length:32},(s,e)=>{let t=(e/31-.5)*2;return Math.exp(-.5*t*t/.64)}),Fq=bF.reduce((s,e)=>s+e),Uq=bF.map(s=>s/Fq),vF={name:"LinearBlur",category:"Blurs",description:"Directional motion blur in a specific angle",requiresRTT:!0,requiresChild:!0,props:{intensity:{default:30,description:"Intensity of the linear blur effect",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Effect"}},angle:{default:0,transform:cs,description:"Direction of the linear blur (in degrees)",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=Ls(s.angle.uniform),r=X.x.div(X.y),o=R(ke(i).div(r),ue(i));return Ne(()=>{let a=H,l=o.mul(s.intensity.uniform).div(X).mul(2),c=F(0).toVar();for(let u=0;u<32;u++){let h=a.add(l.mul(u/31-.5));c.assign(c.add(n.sample(h).mul(d(Uq[u]))))}return It(c)})()}};var _F={name:"LinearGradient",category:"Textures",description:"Create smooth linear color gradients",props:{colorA:{default:"#1aff00",transform:_e,description:"The starting color of the gradient",ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#0000ff",transform:_e,description:"The ending color of the gradient",ui:{type:"color",label:"Color B",group:"Colors"}},start:{default:{x:0,y:.5},transform:ft,description:"The starting point of the gradient",ui:{type:"position",label:"Start",group:"Position"}},end:{default:{x:1,y:.5},transform:ft,description:"The ending point of the gradient",ui:{type:"position",label:"End",group:"Position"}},angle:{default:0,transform:cs,description:"Additional rotation angle of the gradient (in degrees)",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},edges:{default:"stretch",transform:Fn,compileTime:!0,description:"How to handle areas beyond the gradient endpoints",ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=R(s.start.uniform[0],s.start.uniform[1].oneMinus()),n=R(s.end.uniform[0],s.end.uniform[1].oneMinus()),i=n.sub(t),r=In(i),o=xr(i),a=X.y.max(1e-6),l=X.x.div(a),c=Ls(s.angle.uniform).negate(),u=ke(c),h=ue(c),p=t.add(n).mul(.5),f=e.sub(p),m=R(f.x.mul(l),f.y),g=R(m.x.mul(u).sub(m.y.mul(h)),m.x.mul(h).add(m.y.mul(u))),y=Nt(R(g.x.div(l),g.y).add(p).sub(t),o).div(r.max(1e-6)),x=s.edges.uniform.value,b;switch(x){case 1:b=y;break;case 2:{let M=ls(bt(y),d(2));b=M.greaterThan(d(1)).select(d(2).sub(M),M);break}case 3:b=ct(y);break;default:b=y.clamp(d(0),d(1))}let v=wt(s.colorA.uniform,s.colorB.uniform,b.clamp(d(0),d(1)),s.colorSpace.uniform.value),_;if(x===1){let M=y.greaterThanEqual(d(0)).select(d(1),d(0)),T=y.lessThanEqual(d(1)).select(d(1),d(0)),w=M.mul(T);_=v.w.mul(w)}else _=v.w;return F(v.x,v.y,v.z,_)}};var bn=64,SF={name:"Liquify",category:"Interactive",description:"Liquid-like interactive deformation effect",requiresRTT:!0,requiresChild:!0,usesPointer:!0,props:{intensity:{default:10,description:"Scale of the fabric displacement effect",ui:{type:["range","map"],min:0,max:20,step:.1,label:"Intensity",group:"Effect"}},stiffness:{default:3,description:"Fabric rigidity (higher = stiffer canvas, lower = stretchy silk)",ui:{type:"range",min:1,max:30,step:.5,label:"Stiffness",group:"Effect"}},damping:{default:3,description:"How quickly fabric motion settles",ui:{type:"range",min:0,max:10,step:.1,label:"Damping",group:"Effect"}},radius:{default:1,description:"Cursor influence area",ui:{type:"range",min:.1,max:1.5,step:.1,label:"Radius",group:"Effect"}},edges:{default:"stretch",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},computeNode:({uniforms:s,onCleanup:e})=>{let t=fs(bn*bn,"vec4"),n=fs(bn*bn,"vec4"),i=new ys(bn,bn);i.type=en;let r=ds(i);e(()=>{i.dispose()});let o=ee(.5),a=ee(.5),l=ee(0),c=ee(0),u=ee(0),h=ee(.016),p=ee(.008),f=ee(3),m=ee(.97),g=ee(.08),y=ee(1),x=gn(bn),b=gn(bn-1),v=(P,B)=>Ne(()=>{let U=kt,D=U.mod(x),L=U.div(x);wn(L.greaterThan(gn(0)).and(L.lessThan(b)).and(D.greaterThan(gn(0))).and(D.lessThan(b)),()=>{let k=P.element(U),W=k.x,$=k.y,ie=k.z,xe=k.w,he=U.sub(gn(1)),Pe=U.add(gn(1)),Ge=U.sub(x),He=U.add(x),oe=U.sub(x).sub(gn(1)),be=U.sub(x).add(gn(1)),Te=U.add(x).sub(gn(1)),Fe=U.add(x).add(gn(1)),ze=f.mul(P.element(he).x.sub(W).add(P.element(Pe).x.sub(W)).add(P.element(Ge).x.sub(W)).add(P.element(He).x.sub(W))).toVar(),fe=f.mul(P.element(he).y.sub($).add(P.element(Pe).y.sub($)).add(P.element(Ge).y.sub($)).add(P.element(He).y.sub($))).toVar(),Xe=f.mul(d(.35));ze.assign(ze.add(Xe.mul(P.element(oe).x.sub(W).add(P.element(be).x.sub(W)).add(P.element(Te).x.sub(W)).add(P.element(Fe).x.sub(W))))),fe.assign(fe.add(Xe.mul(P.element(oe).y.sub($).add(P.element(be).y.sub($)).add(P.element(Te).y.sub($)).add(P.element(Fe).y.sub($))))),ze.assign(ze.sub(f.mul(d(.1)).mul(W))),fe.assign(fe.sub(f.mul(d(.1)).mul($)));let Re=ie.mul(m).add(ze.mul(p)).toVar(),Y=xe.mul(m).add(fe.mul(p)).toVar();wn(u.greaterThan(d(.01)),()=>{let Le=D.toFloat().add(d(.5)).div(d(bn)),Ye=L.toFloat().add(d(.5)).div(d(bn)),tt=y.greaterThanEqual(d(1)).select(Le.sub(o).mul(y),Le.sub(o)),et=y.greaterThanEqual(d(1)).select(Ye.sub(a),Ye.sub(a).div(y)),Qe=tt.mul(tt).add(et.mul(et)),nt=g.mul(d(3));wn(Qe.lessThan(nt.mul(nt)),()=>{let J=Qe.negate().div(g.mul(g)).exp().mul(u).mul(h).mul(d(2));Re.assign(Re.add(l.mul(J))),Y.assign(Y.add(c.mul(J)))})});let ye=W.add(Re.mul(p)).clamp(d(-.5),d(.5)),Me=$.add(Y.mul(p)).clamp(d(-.5),d(.5));B.element(U).assign(F(ye,Me,Re,Y))})})().compute(bn*bn,[256]),_=P=>Ne(()=>{let B=kt,U=B.mod(x),D=B.div(x),L=P.element(B);$n(r,Mn(U,D),F(L.x,L.y,d(0),d(1))).toWriteOnly()})().compute(bn*bn,[256]),M=v(t,n),T=v(n,t),w=_(t),S=.5,A=.5,I=Date.now(),N=Date.now();return{outputs:{displacement:i},getComputeNodes:P=>{let B=Date.now(),U=Math.min((B-I)/1e3,.016);if(I=B,U<=0)return null;let D=Math.max(1,P.dimensions.width)/Math.max(1,P.dimensions.height),L=s.stiffness.uniform.value,k=s.damping.uniform.value,W=s.radius.uniform.value*.08,$=(P.pointer.x-S)/U,ie=(P.pointer.y-A)/U,xe=Math.sqrt($*$+ie*ie),he=Math.min(xe,3);S=P.pointer.x,A=P.pointer.y,he>.01&&(N=B);let Pe=s.damping.uniform.value,Ge=Pe>0?Math.min(3e4,5e3/Pe):3e4;if(B-N>Ge)return null;let He=U/2;return o.value=P.pointer.x,a.value=P.pointer.y,l.value=xe>.01?$/xe:0,c.value=xe>.01?ie/xe:0,u.value=he,h.value=U,p.value=He,f.value=L,m.value=Math.max(0,Math.min(1,1-k*He)),g.value=W,y.value=D,[M,T,w]}}},fragmentNode:({uniforms:s,onBeforeRender:e,childNode:t,onCleanup:n,computeOutputs:i})=>{if(!t)return F(0,0,0,0);let r=i?.childTexture??_t(t);i||n(()=>{r?.renderTarget?.dispose&&r.renderTarget.dispose()});let o;if(i?.displacement)r.sample(H),o=hn(i.displacement).sample(H).xy;else{let p=new Float32Array(bn*bn),f=new Float32Array(bn*bn),m=new Float32Array(bn*bn),g=new Float32Array(bn*bn),y=new Float32Array(bn*bn),x=new Float32Array(bn*bn),b=new Float32Array(bn*bn),v=new Float32Array(bn*bn),_=new Float32Array(bn*bn*2),M=new Qn(_,bn,bn,hs,en);M.magFilter=Yt,M.minFilter=Yt,M.needsUpdate=!0;let T=hn(M),w=.5,S=.5,A=Date.now(),I=2;e(({pointer:N,dimensions:P})=>{let B=Date.now(),U=Math.min((B-A)/1e3,.016);if(A=B,U<=0)return;let D=Math.max(1,P.width)/Math.max(1,P.height),L=s.stiffness.uniform.value,k=s.damping.uniform.value,W=s.radius.uniform.value*.08,$=(N.x-w)/U,ie=(N.y-S)/U,xe=Math.sqrt($*$+ie*ie),he=Math.min(xe,3),Pe=0,Ge=0;xe>.01&&(Pe=$/xe,Ge=ie/xe);let He=U/I;for(let oe=0;oe<I;oe++){if(oe===0&&he>.01){let Fe=W*3,ze=Math.max(1,Math.floor((N.y-Fe)*bn)),fe=Math.min(bn-2,Math.ceil((N.y+Fe)*bn)),Xe=Math.max(1,Math.floor((N.x-Fe)*bn)),Re=Math.min(bn-2,Math.ceil((N.x+Fe)*bn));for(let Y=ze;Y<=fe;Y++)for(let ye=Xe;ye<=Re;ye++){let Me=Y*bn+ye,Le=(ye+.5)/bn,Ye=(Y+.5)/bn,tt=D>=1?(Le-N.x)*D:Le-N.x,et=D>=1?Ye-N.y:(Ye-N.y)/D,Qe=Math.sqrt(tt*tt+et*et);if(Qe<Fe){let nt=Math.exp(-Qe*Qe/(W*W))*he*U*2;m[Me]+=Pe*nt,g[Me]+=Ge*nt}}}let be=Math.max(0,Math.min(1,1-k*He)),Te=L*.35;y.set(m),x.set(g),b.set(p),v.set(f);for(let Fe=1;Fe<bn-1;Fe++)for(let ze=1;ze<bn-1;ze++){let fe=Fe*bn+ze,Xe=0,Re=0,Y=fe-1,ye=fe+1,Me=fe-bn,Le=fe+bn;Xe+=L*(p[Y]-p[fe]),Xe+=L*(p[ye]-p[fe]),Xe+=L*(p[Me]-p[fe]),Xe+=L*(p[Le]-p[fe]),Re+=L*(f[Y]-f[fe]),Re+=L*(f[ye]-f[fe]),Re+=L*(f[Me]-f[fe]),Re+=L*(f[Le]-f[fe]);let Ye=fe-bn-1,tt=fe-bn+1,et=fe+bn-1,Qe=fe+bn+1;Xe+=Te*(p[Ye]-p[fe]),Xe+=Te*(p[tt]-p[fe]),Xe+=Te*(p[et]-p[fe]),Xe+=Te*(p[Qe]-p[fe]),Re+=Te*(f[Ye]-f[fe]),Re+=Te*(f[tt]-f[fe]),Re+=Te*(f[et]-f[fe]),Re+=Te*(f[Qe]-f[fe]),Xe-=L*.1*p[fe],Re-=L*.1*f[fe],y[fe]=m[fe]*be+Xe*He,x[fe]=g[fe]*be+Re*He,b[fe]=p[fe]+y[fe]*He,v[fe]=f[fe]+x[fe]*He,b[fe]=Math.max(-.5,Math.min(.5,b[fe])),v[fe]=Math.max(-.5,Math.min(.5,v[fe]))}m.set(y),g.set(x),p.set(b),f.set(v)}for(let oe=0;oe<bn;oe++)for(let be=0;be<bn;be++){let Te=oe*bn+be,Fe=Te*2;_[Fe]=p[Te],_[Fe+1]=f[Te]}M.needsUpdate=!0,w=N.x,S=N.y}),n(()=>{M.dispose()}),o=T.sample(H).xy}let a=s.intensity.uniform.mul(.1),l=o.mul(a),c=d(.15),u=l.clamp(R(c.negate(),c.negate()),R(c,c)),h=H.sub(u);return It(En(h,r.sample(h),r,s.edges.uniform.value))}};var TF={name:"Marble",category:"Textures",description:"Classic marble swirl and vein texture using noise-warped sine waves",props:{colorA:{default:"#ffffff",transform:_e,description:"Base background color of the marble",ui:{type:"color",label:"Base",group:"Colors"}},colorB:{default:"#3a2d54",transform:_e,description:"Secondary marble tone",ui:{type:"color",label:"Tone",group:"Colors"}},colorC:{default:"#0f0f0f",transform:_e,description:"Deepest marble color",ui:{type:"color",label:"Depth",group:"Colors"}},scale:{default:2,description:"Scale and density of the marble vein pattern",ui:{type:["range","map"],min:.1,max:10,step:.1,label:"Scale",group:"Effect"}},turbulence:{default:10,description:"Amount of noise-driven distortion applied to the veins",ui:{type:["range","map"],min:0,max:50,step:.5,label:"Turbulence",group:"Effect"}},speed:{default:.05,description:"Animation speed",ui:{type:"range",min:0,max:.25,step:.005,label:"Speed",group:"Animation"}},seed:{default:0,description:"Random seed for pattern variation",ui:{type:["range","map"],min:0,max:100,step:1,label:"Seed",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=X.x.div(X.y),i=t.x.mul(n),r=t.y,o=cn(s,e.speed),a=e.scale.uniform,l=e.seed.uniform,c=Dn(R(i.mul(a).add(l),r.mul(a).add(o))),u=Dn(R(i.mul(a).mul(2).add(l.mul(1.7)),r.mul(a).mul(2).add(o.mul(.7)))).mul(.5),h=Dn(R(i.mul(a).mul(4).add(l.mul(3.1)),r.mul(a).mul(4).add(o.mul(1.3)))).mul(.25),p=c.add(u).add(h),f=e.turbulence.uniform,m=ue(i.mul(a).mul(d(Math.PI)).add(p.mul(f))).mul(.5).add(.5),g=Dn(R(r.mul(a).mul(1.5).add(l.mul(2)),i.mul(a).mul(1.2))).mul(.3).add(.5),y=we(d(.3),d(.6),m),x=we(d(.6),d(.9),m),b=wt(wt(e.colorA.uniform,e.colorB.uniform,y,e.colorSpace.uniform.value),e.colorC.uniform,x.mul(g),e.colorSpace.uniform.value);return F(b.rgb,b.a)}};var MF={name:"Mirror",category:"Distortions",description:"Mirror content across a line defined by center point and angle",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"The point the mirror line passes through",ui:{type:"position",label:"Center",group:"Position"}},angle:{default:0,description:"The angle of the mirror line in degrees",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},edges:{default:"mirror",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=X.x.div(X.y),r=R(H.x.mul(i),H.y),o=R(s.center.uniform.x.mul(i),s.center.uniform.y.oneMinus()),a=r.sub(o),l=s.angle.uniform.mul(Math.PI/180),c=R(ke(l),ue(l)),u=R(c.y.negate(),c.x),h=a.dot(u),p=a.sub(u.mul(h.mul(2))),f=o.add(p),m=R(f.x.div(i),f.y),g=ln(0,h);return It(ve(n.sample(H),En(m,n.sample(m),n,s.edges.uniform.value),g))}};var wF={name:"MultiPointGradient",category:"Textures",description:"Five individually placed color points blended together by proximity \u2014 drag each point to shape the gradient",props:{colorA:{default:"#4776E6",transform:_e,description:"Color of control point A",ui:{type:"color",label:"Color",group:"Point A"}},positionA:{default:{x:.2,y:.2},transform:ft,description:"Position of control point A",ui:{type:"position",label:"Position",group:"Point A"}},colorB:{default:"#C44DFF",transform:_e,description:"Color of control point B",ui:{type:"color",label:"Color",group:"Point B"}},positionB:{default:{x:.8,y:.2},transform:ft,description:"Position of control point B",ui:{type:"position",label:"Position",group:"Point B"}},colorC:{default:"#1ABC9C",transform:_e,description:"Color of control point C",ui:{type:"color",label:"Color",group:"Point C"}},positionC:{default:{x:.2,y:.8},transform:ft,description:"Position of control point C",ui:{type:"position",label:"Position",group:"Point C"}},colorD:{default:"#F8BBD9",transform:_e,description:"Color of control point D",ui:{type:"color",label:"Color",group:"Point D"}},positionD:{default:{x:.8,y:.8},transform:ft,description:"Position of control point D",ui:{type:"position",label:"Position",group:"Point D"}},colorE:{default:"#FF8C42",transform:_e,description:"Color of control point E",ui:{type:"color",label:"Color",group:"Point E"}},positionE:{default:{x:.5,y:.5},transform:ft,description:"Position of control point E",ui:{type:"position",label:"Position",group:"Point E"}},smoothness:{default:2,description:"Controls how smoothly colors blend.",ui:{type:["range","map"],min:0,max:5,step:.05,label:"Smoothness",group:"Effect"}}},fragmentNode:({uniforms:s})=>{let e=s.smoothness.uniform,t=X.x.div(X.y),n=R(H.x.mul(t),H.y),i=[{color:s.colorA.uniform,pos:R(s.positionA.uniform.x.mul(t),s.positionA.uniform.y.oneMinus())},{color:s.colorB.uniform,pos:R(s.positionB.uniform.x.mul(t),s.positionB.uniform.y.oneMinus())},{color:s.colorC.uniform,pos:R(s.positionC.uniform.x.mul(t),s.positionC.uniform.y.oneMinus())},{color:s.colorD.uniform,pos:R(s.positionD.uniform.x.mul(t),s.positionD.uniform.y.oneMinus())},{color:s.colorE.uniform,pos:R(s.positionE.uniform.x.mul(t),s.positionE.uniform.y.oneMinus())}];return Ne(()=>{let r=de(0).toVar(),o=d(0).toVar(),a=d(0).toVar();for(let{color:l,pos:c}of i){let u=n.x.sub(c.x),h=n.y.sub(c.y),p=yn(u.mul(u).add(h.mul(h))).add(d(.001)),f=d(8).div(e.add(d(.5))).min(d(8)),m=d(1).div(Pt(p,f));r.assign(r.add(l.rgb.mul(m))),o.assign(o.add(l.a.mul(m))),a.assign(a.add(m))}return F(r.div(a),o.div(a))})()}};var Iw=.7,lm=1/Math.sqrt(1+Iw*Iw),CF=Iw*lm,Dw=CF+1,Pw=1/Math.sqrt(lm*lm+Dw*Dw);function AF(s,e,t){return Ne(()=>{let n=H,i=X.x.div(X.y),r=R(e.center.uniform.x,e.center.uniform.y.oneMinus()),o=e.scale.uniform,a=R(n.x.sub(r.x).mul(i).div(o).add(d(.5)),n.y.sub(r.y).div(o).add(d(.5))),l=e.cornerSmoothing.uniform,c=d(.008).add(l.mul(d(.03))),u=s(a).r,h=s(a.add(R(c,d(0)))).r,p=s(a.sub(R(c,d(0)))).r,f=s(a.add(R(d(0),c))).r,m=s(a.sub(R(d(0),c))).r,g=h.sub(p).div(c.mul(d(2))),y=f.sub(m).div(c.mul(d(2))),x=ve(u,u.add(h).add(p).add(f).add(m).div(d(5)),l),b=d(1).div(X.y),v=e.glowRadius.uniform.max(d(.001)),_=St(b.div(o),d(.004)),M=F(0).toVar();return wn(x.greaterThan(v.mul(d(1.5)).add(_)),()=>{M.assign(F(0,0,0,0))}).Else(()=>{let T=yn(g.mul(g).add(y.mul(y))).max(d(1e-4)),w=g.div(T),S=y.div(T),A=e.tubeThickness.uniform,I=ht(x.negate().div(A.max(d(.001))),d(0),d(1)),N=we(_,_.negate(),x),P=we(A.add(_),A.sub(_),x.negate()),B=N.mul(P),U=I,D=yn(U.mul(d(2).sub(U)).max(d(0))),L=d(1).sub(U),k=w.mul(L),W=S.mul(L),$=D,ie=e.lightAngle.uniform.mul(d(Math.PI/180)),xe=ke(ie),he=ue(ie),Pe=xe.mul(d(lm)),Ge=he.mul(d(lm)),He=d(CF),oe=ht(k.mul(Pe).add(W.mul(Ge)).add($.mul(He)),d(0),d(1)),be=k.mul(Pe.mul(d(Pw))).add(W.mul(Ge.mul(d(Pw)))).add($.mul(d(Dw*Pw))),Te=Gh(d(8).sub(e.specularSize.uniform.mul(d(7)))),Fe=Pt(ht(be,d(0),d(1)),Te).mul(e.specularIntensity.uniform),ze=a.x.sub(d(.5)),fe=ue(Jn(a.y.sub(d(.5)),ze).mul(d(2)).add(t.mul(e.flowSpeed.uniform))).mul(d(.5)).add(d(.5)),Xe=ve(d(1),fe,e.flowAmount.uniform),Re=de(e.color.uniform.x,e.color.uniform.y,e.color.uniform.z),Y=de(e.secondaryColor.uniform.x,e.secondaryColor.uniform.y,e.secondaryColor.uniform.z),ye=e.secondaryBlend.uniform,Me=ve(Re,ve(Y,Re,oe),ye),Le=d(.12),Ye=D.mul(d(.35)),tt=Me.mul(Le.add(oe.mul(d(.55))).add(Ye)),et=de(Fe,Fe,Fe),Qe=tt.add(et),nt=we(d(.55),d(1),I).mul(e.hotCoreIntensity.uniform).mul(Xe),J=ve(Qe,ve(Re,de(1,1,1),d(.75)),nt).mul(ve(d(1),Xe,d(.4))),Ie=e.glowIntensity.uniform,Ee=St(x,d(0)),O=d(12).div(v),E=Ni(Ee.negate().mul(O)).mul(d(.7)),z=d(4).div(v),q=Ni(Ee.negate().mul(z)).mul(d(.35)),Q=E.add(q).mul(Ie),Se=we(d(-.003),d(.003),x),Ae=Q.mul(Se),K=de(e.glowColor.uniform.x,e.glowColor.uniform.y,e.glowColor.uniform.z),Z=t.mul(e.flickerSpeed.uniform),me=ue(Z.mul(d(17.13))),Ze=ue(Z.mul(d(31.71))),Be=ue(Z.mul(d(47.29))),Je=me.add(Ze.mul(d(.5))).add(Be.mul(d(.3))),gt=ve(d(-2),d(.8),e.flickerAmount.uniform),xt=we(gt.sub(d(.1)),gt.add(d(.1)),Je),Dt=e.intensity.uniform.mul(xt),se=J.mul(Dt),st=K.mul(Ae).mul(Dt),De=ve(st.x,se.x,B),dt=ve(st.y,se.y,B),Et=ve(st.z,se.z,B),ot=St(B,ht(Ae.mul(d(.6)),d(0),d(1)));M.assign(F(De,dt,Et,ot))}),M})()}var Lq=JSON.stringify({type:"circleSDF",radius:.35}),EF={name:"Neon",category:"Shape Effects",description:"Photorealistic neon tube / 3D pipe effect driven by a custom shape",props:{center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the neon shape",ui:{type:"position",label:"Center",group:"Position"}},scale:{default:1,description:"Scale of the neon shape (1 = default size)",ui:{type:"range",min:.1,max:3,step:.05,label:"Scale",group:"Position"}},color:{default:"#00ddff",transform:_e,description:"Primary neon tube color",ui:{type:"color",label:"Tube Color",group:"Colors"}},secondaryColor:{default:"#ff00aa",transform:_e,description:"Shadow-side color for a two-tone / dual-lit pipe look",ui:{type:"color",label:"Secondary Color",group:"Colors"}},secondaryBlend:{default:.5,description:"Blend between mono (0) and two-tone (1) tube coloring",ui:{type:"range",min:0,max:1,step:.01,label:"Blend",group:"Colors"}},glowColor:{default:"#00ddff",transform:_e,description:"Color of the outer glow / bloom",ui:{type:"color",label:"Glow Color",group:"Colors"}},tubeThickness:{default:.2,transform:s=>s*.05,description:"How far inward from the boundary the tube extends. Low = thin neon outline, high = thick 3D pipe",ui:{type:"range",min:0,max:1,step:.01,label:"Tube Thickness",group:"Tube"}},intensity:{default:1.5,description:"Overall brightness multiplier",ui:{type:"range",min:.5,max:4,step:.05,label:"Intensity",group:"Tube"}},hotCoreIntensity:{default:.6,description:"Bright white-hot center line \u2014 the gas discharge glow inside the tube",ui:{type:"range",min:0,max:1,step:.01,label:"Hot Core",group:"Tube"}},glowIntensity:{default:.6,description:"Outer glow / bloom strength",ui:{type:"range",min:0,max:2,step:.05,label:"Glow Intensity",group:"Glow"}},glowRadius:{default:.25,description:"How far the glow extends beyond the tube",ui:{type:"range",min:.01,max:1,step:.01,label:"Glow Radius",group:"Glow"}},lightAngle:{default:300,description:"Directional light angle in degrees \u2014 controls 3D shading on the tube",ui:{type:"range",min:0,max:360,step:1,label:"Light Angle",group:"Lighting"}},specularIntensity:{default:.5,description:"Specular highlight brightness on the tube surface",ui:{type:"range",min:0,max:2,step:.05,label:"Specular",group:"Lighting"}},specularSize:{default:.5,description:"Specular highlight size \u2014 0 = tight pinpoint, 1 = broad sheen",ui:{type:"range",min:0,max:1,step:.01,label:"Specular Size",group:"Lighting"}},cornerSmoothing:{default:.15,description:"Rounds sharp corners to mimic how real glass tubes curve at bends",ui:{type:"range",min:0,max:1,step:.01,label:"Corner Smoothing",group:"Tube"}},flickerSpeed:{default:0,description:"Flicker animation speed \u2014 0 = off, higher = faster sporadic on/off",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Flicker"}},flickerAmount:{default:.2,description:"How often the neon flickers off \u2014 0 = always on, 1 = frequent outages",ui:{type:"range",min:0,max:1,step:.01,label:"Amount",group:"Flicker"}},flowSpeed:{default:0,description:"Flow animation speed \u2014 0 = off, light rotates through the tube",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Flow"}},flowAmount:{default:.3,description:"Strength of the flowing brightness variation \u2014 0 = uniform, 1 = dramatic",ui:{type:"range",min:0,max:1,step:.01,label:"Amount",group:"Flow"}},shape:{default:Lq,description:"Serialized shape configuration (JSON)",ui:{type:"shape",label:"Shape",group:"Shape"}},shapeSdfUrl:{default:"",compileTime:!0,description:"URL to a pre-generated SDF .bin file \u2014 when non-empty, activates SVG mode and triggers a shader recompile"},shapeType:{default:"",compileTime:!0,description:"Active SDF shape type \u2014 triggers recompile when shape is switched. When empty, derived from shape JSON at mount time."}},fragmentNode:({uniforms:s,onCleanup:e,onBeforeRender:t})=>{let n=ee(0);t(({deltaTime:o})=>{n.value+=o});let i=s.shapeSdfUrl.uniform.value,r=(()=>{let o=s.shape.uniform.value;if(typeof o=="object"&&o!==null)return o;try{return JSON.parse(o)}catch{return{type:"circleSDF",radius:.35,centerX:.5,centerY:.5}}})();return AF(i?$r(i,t,e):qr(s.shapeType.uniform.value||r.type||"circleSDF",r,s.shape,t),s,n)}};var RF={name:"Paper",category:"Stylize",description:"Applies realistic paper grain and surface roughness to child content",requiresRTT:!0,requiresChild:!0,props:{roughness:{default:.3,description:"Surface roughness \u2014 higher values create more pronounced brightness variation",ui:{type:"range",min:0,max:1,step:.01,label:"Roughness",group:"Texture"}},grainScale:{default:1,description:"Scale of the paper grain \u2014 lower = coarser, higher = finer",ui:{type:"range",min:.1,max:3,step:.05,label:"Grain Scale",group:"Texture"}},displacement:{default:.15,description:"Surface micro-roughness \u2014 shifts pixels at grain scale like real paper fiber bumps",ui:{type:"range",min:0,max:1,step:.01,label:"Displacement",group:"Texture"}},seed:{default:0,description:"Random seed for pattern variation",ui:{type:"range",min:0,max:100,step:1,label:"Seed",group:"Texture"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=H,r=X.x.div(X.y),o=R(i.x.mul(r),i.y),a=s.seed.uniform,l=s.grainScale.uniform.mul(d(120)).add(d(120)),c=l.mul(d(.25)),u=o.mul(c).add(a.add(d(50))),h=Dn(de(u.x,u.y,d(22.3))),p=Dn(de(u.x,u.y,d(29.7))),f=s.displacement.uniform.mul(d(.002)),m=i.add(R(h.mul(f),p.mul(f))),g=n.sample(m),y=R(m.x.mul(r),m.y).add(R(h.mul(d(.005)),p.mul(d(.005)))),x=y.mul(l.mul(d(.1))).add(a),b=Dn(de(x.x,x.y,d(1.3))),v=y.mul(l.mul(d(.4))).add(a.add(d(33.7))),_=bt(Dn(de(v.x,v.y,d(4.1)))),M=y.mul(l).add(a.add(d(71.2))),T=Dn(de(M.x,M.y,d(9.8))),w=y.mul(l.mul(d(2))).add(a.add(d(107.3))),S=Dn(de(w.x,w.y,d(15.6))),A=b.mul(d(.3)).add(_.mul(d(.3))).add(T.mul(d(.25))).add(S.mul(d(.15))),I=s.roughness.uniform,N=ht(d(1).add(A.mul(I.mul(d(.4)))),d(0),d(1.5)),P=de(g.r,g.g,g.b).mul(N);return F(P.x,P.y,P.z,g.a)}};var NF={name:"Perspective",category:"Distortions",description:"Rotate the plane in 3D space with pan and tilt",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"Center point of rotation",ui:{type:"position",label:"Center",group:"Position"}},pan:{default:0,description:"Horizontal rotation (left/right)",ui:{type:["range","map"],min:-90,max:90,step:.1,label:"Pan",group:"Effect"}},tilt:{default:0,description:"Vertical rotation (up/down)",ui:{type:["range","map"],min:-90,max:90,step:.1,label:"Tilt",group:"Effect"}},fov:{default:60,description:"Field of view - controls perspective intensity",ui:{type:["range","map"],min:30,max:120,step:1,label:"FOV",group:"Effect"}},zoom:{default:1,description:"Zoom in to fill the frame after rotation",ui:{type:["range","map"],min:.5,max:3,step:.1,label:"Zoom",group:"Effect"}},offset:{default:{x:.5,y:.5},transform:ft,description:"Shift the result in X/Y",ui:{type:"position",label:"Offset",group:"Position"}},edges:{default:"transparent",description:"How to handle edges",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=R(s.center.uniform.x,s.center.uniform.y.oneMinus()),r=s.zoom.uniform,o=H.x.sub(i.x).div(r),a=H.y.sub(i.y).div(r),l=s.pan.uniform.mul(Math.PI/180),c=s.tilt.uniform.mul(Math.PI/180),u=s.fov.uniform.mul(Math.PI/180),h=ke(l),p=ue(l),f=ke(c),m=ue(c),g=w3(u.mul(.5)).mul(2),y=St(h.add(p.mul(o).mul(g)),d(.001)),x=o.div(y),b=a.mul(h).div(y),v=St(f.add(m.mul(b).mul(g)),d(.001)),_=x.mul(f).div(v),M=b.div(v),T=R(s.offset.uniform.x,s.offset.uniform.y.oneMinus()),w=R(_,M).add(i).sub(T).add(R(.5,.5));return It(En(w,n.sample(w),n,s.edges.uniform.value))}};var PF={name:"Pixelate",category:"Stylize",description:"Pixelation effect with adjustable cell size",requiresRTT:!0,requiresChild:!0,props:{scale:{default:50,description:"Number of pixels along the longest edge (higher = smaller pixels)",ui:{type:["range","map"],min:1,max:200,step:1,label:"Scale",group:"Effect"}},gap:{default:0,description:"Space between pixels as a fraction of cell size (0 = no gap, 1 = fully invisible)",ui:{type:["range","map"],min:0,max:.95,step:.01,label:"Gap",group:"Effect"}},roundness:{default:0,description:"Roundness of each pixel's corners (0 = square, 1 = circle)",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Roundness",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=X.x.div(X.y),r=s.scale.uniform,o=i.greaterThan(d(1)),a=o.select(r,r.mul(i)).max(d(1)),l=o.select(r.div(i),r).max(d(1)),c=R(Ht(H.x.mul(a)).div(a),Ht(H.y.mul(l)).div(l)),u=It(n.sample(c)),h=R(ct(H.x.mul(a)).sub(.5),ct(H.y.mul(l)).sub(.5)),p=d(.5).sub(s.gap.uniform.mul(.5)),f=s.roundness.uniform.mul(p),m=In(R(h.x.abs().sub(p).add(f).max(d(0)),h.y.abs().sub(p).add(f).max(d(0)))).sub(f).lessThanEqual(d(0)).select(d(1),d(0));return F(u.rgb,u.a.mul(m))}};var IF={name:"Plasma",category:"Textures",description:"Animated effect of glowing plasma",props:{density:{default:2,description:"Density of the plasma pattern",ui:{type:["range","map"],min:0,max:4,step:.1,label:"Density",group:"Effect"}},speed:{default:2,description:"Animation speed",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Effect"}},intensity:{default:1.5,description:"Brightness and spread of the plasma glow",ui:{type:["range","map"],min:.1,max:3,step:.1,label:"Intensity",group:"Colors"}},warp:{default:.4,description:"How much the flow distorts and swirls",ui:{type:"range",min:0,max:1,step:.01,label:"Warp",group:"Effect"}},contrast:{default:1,description:"Push darks darker and lights lighter",ui:{type:["range","map"],min:0,max:3,step:.1,label:"Contrast",group:"Colors"}},balance:{default:50,description:"Skew color balance toward A (higher) or B (lower)",ui:{type:["range","map"],min:0,max:100,step:1,label:"Balance",group:"Colors"}},colorA:{default:"#7018be",description:"Primary color",transform:_e,ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#000000",description:"Secondary color",transform:_e,ui:{type:"color",label:"Color B",group:"Colors"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:s=>{let{uniforms:e}=s,t=e.density.uniform,n=e.intensity.uniform,i=e.warp.uniform,r=cn(s,e.speed).mul(.125),o=X.x.div(X.y),a=de(H.x.mul(o),H.y,d(0)).mul(Ni(t.sub(1))).toVar(),l=i.mul(4),c=Dn(a.add(de(r.mul(.3),r.mul(-.2),0))),u=Dn(a.add(de(5.2,1.3,r.mul(.25)))),h=a.add(de(c,u,d(0)).mul(l)),p=Dn(h.add(de(1.7,9.2,r.mul(.15)))),f=Dn(h.add(de(8.3,2.8,r.mul(.13)))),m=ht(Pt(Dn(a.add(de(p,f,d(0)).mul(l))).mul(.5).add(.5),d(5).div(n)).sub(.5).mul(e.contrast.uniform).add(.5),0,1),g=e.balance.uniform.div(100).sub(.5),y=ht(m.add(g),0,1);return wt(e.colorB.uniform,e.colorA.uniform,y,e.colorSpace.uniform.value)}};var DF={name:"PolarCoordinates",category:"Distortions",description:"Convert rectangular coordinates to polar space",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"The center point for polar coordinate conversion",ui:{type:"position",label:"Center",group:"Position"}},wrap:{default:1,description:"Controls how much of the angular range to use (1 = full 360\xB0, 0.5 = 180\xB0)",ui:{type:["range","map"],min:0,max:2,step:.1,label:"Wrap",group:"Effect"}},radius:{default:1,description:"Controls how much of the radius range to use (affects the radial mapping)",ui:{type:["range","map"],min:0,max:2,step:.1,label:"Radius",group:"Effect"}},intensity:{default:1,description:"Blends between original UVs (0) and polar coordinates (1)",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Intensity",group:"Effect"}},edges:{default:"transparent",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=X.x.div(X.y),r=R(H.x.mul(i),H.y),o=R(s.center.uniform.x.mul(i),s.center.uniform.y.oneMinus()),a=r.sub(o),l=Jn(a.y,a.x).add(Qs).div(Qs.mul(2)),c=In(a),u=ve(H,R(l.mul(s.wrap.uniform),c.mul(s.radius.uniform)),s.intensity.uniform);return It(En(u,n.sample(u),n,s.edges.uniform.value))}};var Bq=s=>({outside:0,center:1,inside:2})[s?.toLowerCase()]??1,FF={name:"Polygon",category:"Shapes",description:"Regular polygon with adjustable sides and corner rounding",props:{color:{default:"#ffffff",transform:_e,description:"Fill color of the polygon",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the polygon",ui:{type:"position",label:"Center",group:"Position"}},radius:{default:.4,description:"Circumradius \u2014 distance from center to vertices in UV space",ui:{type:"range",min:0,max:1,step:.01,label:"Radius",group:"Shape"}},sides:{default:6,description:"Number of sides (3 = triangle, 4 = square, 6 = hexagon, etc.)",ui:{type:"range",min:3,max:12,step:1,label:"Sides",group:"Shape"}},rounding:{default:0,description:"Corner rounding \u2014 0 is sharp vertices, 1 morphs into a circle",ui:{type:"range",min:0,max:1,step:.01,label:"Rounding",group:"Shape"}},rotation:{default:0,description:"Rotation in degrees",ui:{type:"range",min:0,max:360,step:1,label:"Rotation",group:"Shape"}},softness:{default:0,description:"Edge softness for antialiasing",ui:{type:"range",min:0,max:.1,step:.001,label:"Softness",group:"Effect"}},strokeThickness:{default:0,description:"Stroke thickness. Zero means no stroke.",ui:{type:"range",min:0,max:.2,step:.005,label:"Stroke Thickness",group:"Stroke"}},strokeColor:{default:"#000000",transform:_e,description:"Color of the stroke outline",ui:{type:"color",label:"Stroke Color",group:"Colors"}},strokePosition:{default:"center",transform:Bq,description:"Position of the stroke relative to the shape edge",ui:{type:"select",options:[{label:"Outside",value:"outside"},{label:"Center",value:"center"},{label:"Inside",value:"inside"}],label:"Stroke Position",group:"Stroke"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for blending fill and stroke colors",ui:{type:"select",options:Ft,label:"Color Blending",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=n.x.sub(i.x),o=n.y.sub(i.y),a=s.rotation.uniform.mul(d(Math.PI/180)),l=ke(a),c=ue(a),u=r.mul(l).add(o.mul(c)),h=o.mul(l).sub(r.mul(c)),p=s.radius.uniform,f=ve(xw(u,h,p,s.sides.uniform),Fy(r,o,p),s.rounding.uniform),m=s.softness.uniform,g=s.strokeThickness.uniform,y=s.strokePosition.uniform,x=g.greaterThan(d(0)),b=y.greaterThanEqual(d(.5)).and(y.lessThan(d(1.5))),v=y.greaterThanEqual(d(1.5)),_=g.mul(.5),M=v.select(g.negate(),b.select(_.negate(),d(0))),T=v.select(d(0),b.select(_,g)),w=we(T.sub(m),T,f).oneMinus(),S=x.select(we(M.sub(m),M,f),d(0)),A=wt(F(s.color.uniform.rgb,s.color.uniform.a),F(s.strokeColor.uniform.rgb,s.strokeColor.uniform.a),S,s.colorSpace.uniform.value);return F(A.xyz,A.w.mul(w))}};var UF={name:"Posterize",category:"Adjustments",description:"Reduce color depth to create a poster effect",requiresChild:!0,props:{intensity:{default:5,description:"The intensity of the posterization effect (lower is more posterized)",ui:{type:["range","map"],min:2,max:20,step:1,label:"Intensity",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return console.error("You must pass a child component into the Posterize shader."),F(0);let t=d(s.intensity.uniform);return F(Ht(e.r.mul(t)).div(t),Ht(e.g.mul(t)).div(t),Ht(e.b.mul(t)).div(t),e.a)}};var LF={name:"ProgressiveBlur",category:"Blurs",description:"Blur that increases progressively in one direction",requiresRTT:!0,requiresChild:!0,props:{intensity:{default:50,description:"Maximum intensity of the blur effect",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Effect"}},angle:{default:0,transform:cs,description:"Direction of the blur gradient (in degrees)",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},center:{default:{x:0,y:.5},transform:ft,description:"Center point where blur begins",ui:{type:"position",label:"Center",group:"Position"}},falloff:{default:1,description:"Distance over which blur transitions to full strength",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Falloff",group:"Effect"}}},computeNode:({childNode:s,onCleanup:e,dimensions:t,renderer:n,uniforms:i,onResize:r})=>{if(!s||i.angle.mapComputeInfo||i.falloff.mapComputeInfo)return null;let o=_t(s);e(()=>{o?.renderTarget?.dispose&&o.renderTarget.dispose()});let a=n?.getPixelRatio?.()??1,l=Math.round(t.width*a),c=Math.round(t.height*a),u=Ia(o,l,c,e),{computeNodes:h,outputTexture:p,blurMapWriteNode:f,computeWidth:m,computeHeight:g}=u,y=ee(0),x=ee(0),b=ee(.5),v=ee(1),_=ee(1),M=ee(l),T=ee(c),w=gn(m),S=gn(g);function A(U){return U.getCpuValue?.()??(typeof U.uniform.value=="number"?U.uniform.value:null)}function I(){let U=A(i.angle);U!==null&&(y.value=U);let D=i.center.uniform.value?.x??i.center.uniform.x?.value;typeof D=="number"&&(x.value=D);let L=i.center.uniform.value?.y??i.center.uniform.y?.value;typeof L=="number"&&(b.value=L);let k=A(i.falloff);k!==null&&(v.value=k),_.value=t.width/t.height}let N=i.intensity.mapComputeInfo;if(N){let{sourceTexture:U,channel:D,inputMin:L,inputMax:k,outputMin:W,outputMax:$,curve:ie}=N,xe=Ne(()=>{let he=kt,Pe=he.mod(w),Ge=he.div(w);wn(Ge.lessThan(S),()=>{let He=Pe.toFloat().add(d(.5)).div(d(m)),oe=Ge.toFloat().add(d(.5)).div(d(g)),be=y.mul(d(Math.PI/180)),Te=R(be.cos().div(_),be.sin()),Fe=R(x,d(1).sub(b)),ze=R(He,oe).sub(Fe),fe=St(d(0),ze.dot(Te)),Xe=we(d(0),v,fe),Re=vi(U,Mn(He.mul(M).round().toInt().clamp(Tt(0),Tt(M.sub(1))).toUint(),oe.mul(T).round().toInt().clamp(Tt(0),Tt(T.sub(1))).toUint()),Tt(0)),Y;D==="alpha"?Y=Re.a:D==="alphaInverted"?Y=Re.a.oneMinus():D==="luminanceInverted"?Y=Nt(Re.rgb,de(.2126,.7152,.0722)).oneMinus():Y=Nt(Re.rgb,de(.2126,.7152,.0722));let ye=k.sub(L).max(d(1e-4)),Me=ve(W,$,Pt(ht(Y.sub(L).div(ye),d(0),d(1)),Pt(d(2),ie.negate().mul(d(2))))).mul(d(.36)),Le=Xe.mul(Me);$n(f,Mn(Pe,Ge),F(Le,d(0),d(0),d(1))).toWriteOnly()})})().compute(m*g,[256]);return r(({width:he,height:Pe})=>{let Ge=Math.round(he*a),He=Math.round(Pe*a);M.value=Ge,T.value=He,u.setInputDimensions(Ge,He)}),{outputs:{childTexture:o,blurredTexture:p},getComputeNodes:()=>(I(),[xe,...h])}}let P=ee(18),B=Ne(()=>{let U=kt,D=U.mod(w),L=U.div(w);wn(L.lessThan(S),()=>{let k=D.toFloat().add(d(.5)).div(d(m)),W=L.toFloat().add(d(.5)).div(d(g)),$=y.mul(d(Math.PI/180)),ie=R($.cos().div(_),$.sin()),xe=R(x,d(1).sub(b)),he=R(k,W).sub(xe),Pe=St(d(0),he.dot(ie)),Ge=we(d(0),v,Pe).mul(P);$n(f,Mn(D,L),F(Ge,d(0),d(0),d(1))).toWriteOnly()})})().compute(m*g,[256]);return r(({width:U,height:D})=>{u.setInputDimensions(Math.round(U*a),Math.round(D*a))}),{outputs:{childTexture:o,blurredTexture:p},getComputeNodes:()=>{I();let U=A(i.intensity);return U!==null&&(P.value=U*.36),[B,...h]}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t,computeOutputs:n})=>{if(!e)return F(0,0,0,0);if(n?.blurredTexture){let _=n.childTexture.sample(H),M=hn(n.blurredTexture).sample(H),T=s.intensity.uniform.mul(d(0)).add(s.angle.uniform.mul(d(0))).add(s.falloff.uniform.mul(d(0)));return It(F(M.rgb.add(T),_.a))}let i=_t(e);t(()=>{i?.renderTarget?.dispose&&i.renderTarget.dispose()});let r=X.x.div(X.y),o=Ls(s.angle.uniform),a=ke(o),l=ue(o),c=R(a.div(r),l),u=R(s.center.uniform[0],s.center.uniform[1].oneMinus()),h=H.sub(u),p=St(d(0),h.dot(c)),f=St(d(.001),s.falloff.uniform),m=we(d(0),f,p),g=s.intensity.uniform.mul(.06),y=m.mul(g),x=[.056,.135,.278,.487,.726,.923,1,.923,.726,.487,.278,.135,.056],b=6.214,v=_t(Ne(()=>{let _=H,M=R(1).div(X),T=F(0).toVar();for(let w=-6;w<=6;w++){let S=d(x[w+6]/b),A=R(d(w),d(0)).mul(y).mul(M),I=_.add(A),N=i.sample(I).mul(S);T.assign(T.add(N))}return T})());return t(()=>{v?.renderTarget?.dispose&&v.renderTarget.dispose()}),Ne(()=>{let _=H,M=R(1).div(X),T=F(0).toVar();for(let w=-6;w<=6;w++){let S=d(x[w+6]/b),A=R(d(0),d(w)).mul(y).mul(M),I=_.add(A),N=v.sample(I).mul(S);T.assign(T.add(N))}return It(T)})()}};var BF={name:"RadialGradient",category:"Textures",description:"Radial gradient radiating from a center point",props:{colorA:{default:"#ff0000",transform:_e,description:"The starting color at the center of the gradient",ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#0000ff",transform:_e,description:"The ending color at the edge of the gradient",ui:{type:"color",label:"Color B",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"The center point of the radial gradient",ui:{type:"position",label:"Center",group:"Position"}},radius:{default:1,description:"The radius of the gradient (normalized, 0.0-1.0)",ui:{type:["range","map"],min:0,max:2,step:.1,label:"Radius",group:"Effect"}},repeat:{default:1,description:"Number of times the gradient repeats. Values above 1 create concentric rings.",ui:{type:["range","map"],min:1,max:20,step:.5,label:"Repeat",group:"Effect"}},aspect:{default:1,description:"Stretches the gradient into an ellipse. Values below 1 compress vertically, above 1 compress horizontally.",ui:{type:["range","map"],min:.1,max:4,step:.05,label:"Aspect",group:"Effect"}},skewAngle:{default:0,description:"Rotates the ellipse axis in degrees. Only visible when Aspect is not 1.",ui:{type:["range","map"],min:0,max:360,step:1,label:"Skew Angle",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=n.x.sub(i.x),o=n.y.sub(i.y),a=s.skewAngle.uniform.mul(d(Math.PI/180)),l=ke(a),c=ue(a),u=r.mul(l).add(o.mul(c)),h=r.mul(c).negate().add(o.mul(l)),p=oy(R(u.mul(s.aspect.uniform),h),R(d(0),d(0))),f=s.radius.uniform.max(d(1e-6)),m=p.div(f).mul(s.repeat.uniform),g=s.repeat.uniform.greaterThan(d(1.0001)).select(ct(m),m.clamp(d(0),d(1)));return wt(s.colorA.uniform,s.colorB.uniform,g,s.colorSpace.uniform.value)}};var OF={name:"RectangularCoordinates",category:"Distortions",description:"Convert polar coordinates back to rectangular space",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"The center point for rectangular coordinate conversion",ui:{type:"position",label:"Center",group:"Position"}},scale:{default:1,description:"Scale factor for the rectangular output",ui:{type:["range","map"],min:.1,max:3,step:.1,label:"Scale",group:"Effect"}},intensity:{default:1,description:"Blends between original UVs (0) and rectangular coordinates (1)",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Intensity",group:"Effect"}},edges:{default:"transparent",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=H.x.mul(Qs.mul(2)).sub(Qs),r=H.y.mul(s.scale.uniform),o=r.mul(ke(i)),a=r.mul(ue(i)),l=X.x.div(X.y),c=R(s.center.uniform.x,s.center.uniform.y.oneMinus()),u=ve(H,R(o.div(l).add(c.x),a.add(c.y)),s.intensity.uniform);return It(En(u,n.sample(u),n,s.edges.uniform.value))}};var Oq=30,kq=12,Fw=[[0,0],[-.94,-.34],[.95,.31],[-.09,-.93],[.34,.94],[-.91,.41],[.88,-.46],[-.4,.71],[.51,.58],[-.49,-.59],[.4,-.68],[-.71,.05],[.07,.21]],Vq=1/Fw.length,kF={name:"ReflectivePlane",category:"Stylize",description:"Reflective floor that mirrors the content above it",requiresRTT:!0,requiresChild:!0,props:{height:{default:.7,description:"Vertical position of the reflective surface",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Floor Height",group:"Plane"}},distance:{default:.5,description:"How far below the floor the reflection remains visible before fully fading to transparent.",ui:{type:["range","map"],min:.01,max:1,step:.01,label:"Reflection Distance",group:"Plane"}},falloff:{default:.5,description:"Width of the fade zone, as a fraction of reflection distance.",ui:{type:["range","map"],min:0,max:3,step:.01,label:"Reflection Falloff",group:"Plane"}},blur:{default:3,description:"Maximum blur applied to the reflection far from the surface.",ui:{type:["range","map"],min:0,max:5,step:.05,label:"Blur",group:"Surface"}},blurDistance:{default:.3,description:"How far below the surface the blur takes to ramp from sharp to maximum.",ui:{type:"range",min:.01,max:1,step:.01,label:"Blur Distance",group:"Surface"}},edges:{default:"stretch",description:"How to handle reflected samples that fall outside the source content.",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Surface"}}},computeNode:({childNode:s,onCleanup:e,dimensions:t,renderer:n,uniforms:i,onResize:r})=>{if(!s||i.height.mapComputeInfo||i.blur.mapComputeInfo||i.blurDistance.mapComputeInfo)return null;let o=_t(s);e(()=>{o?.renderTarget?.dispose&&o.renderTarget.dispose()});let a=n?.getPixelRatio?.()??1,l=Ia(o,Math.round(t.width*a),Math.round(t.height*a),e,Oq),{computeNodes:c,outputTexture:u,blurMapWriteNode:h,computeWidth:p,computeHeight:f}=l,m=ee(.5),g=ee(1),y=ee(.5),x=gn(p),b=gn(f);function v(T){return T.getCpuValue?.()??(typeof T.uniform.value=="number"?T.uniform.value:null)}function _(){let T=v(i.height);T!==null&&(m.value=T);let w=v(i.blur);w!==null&&(g.value=w);let S=v(i.blurDistance);S!==null&&(y.value=Math.max(.01,S))}let M=Ne(()=>{let T=kt,w=T.mod(x),S=T.div(x);wn(S.lessThan(b),()=>{let A=S.toFloat().add(d(.5)).div(d(f)),I=m.sub(A).max(d(0)),N=we(d(0),y,I),P=g.mul(N).mul(d(kq));$n(h,Mn(w,S),F(P,d(0),d(0),d(1))).toWriteOnly()})})().compute(p*f,[256]);return r(({width:T,height:w})=>{l.setInputDimensions(Math.round(T*a),Math.round(w*a))}),{outputs:{childTexture:o,blurredTexture:u},getComputeNodes:()=>(_(),[M,...c])}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t,computeOutputs:n})=>{if(!e)return F(0,0,0,0);if(n?.blurredTexture&&n?.childTexture){let r=n.childTexture,o=hn(n.blurredTexture);return Ne(()=>{let a=s.height.uniform,l=H,c=l.y.sub(a).max(d(0)),u=r.sample(l),h=R(l.x,a.mul(2).sub(l.y)),p=En(h,o.sample(h),o,s.edges.uniform.value),f=s.distance.uniform.max(d(.001)),m=f.mul(s.falloff.uniform).max(d(1e-4)),g=f.sub(m),y=d(1).sub(we(g,f,c)),x=p.a.mul(y),b=p.rgb.mul(y),v=s.height.uniform.mul(d(0)).add(s.blur.uniform.mul(d(0))).add(s.blurDistance.uniform.mul(d(0))),_=x.oneMinus();return It(ve(u,F(b.add(u.rgb.mul(_)).add(v),x.add(u.a.mul(_))),ln(a,l.y)))})()}let i=_t(e);return t(()=>{i?.renderTarget?.dispose&&i.renderTarget.dispose()}),Ne(()=>{let r=s.height.uniform,o=H,a=X.x.div(X.y),l=o.y.sub(r).max(d(0)),c=i.sample(o),u=R(o.x,r.mul(2).sub(o.y)),h=s.blurDistance.uniform.max(d(.01)),p=we(d(0),h,l),f=s.blur.uniform.mul(p).mul(.02),m=F(0).toVar();for(let T=0;T<Fw.length;T++){let[w,S]=Fw[T],A=R(d(w).mul(f).div(a),d(S).mul(f)),I=u.add(A),N=En(I,i.sample(I),i,s.edges.uniform.value);m.assign(m.add(N.mul(d(Vq))))}let g=s.distance.uniform.max(d(.001)),y=g.mul(s.falloff.uniform).max(d(1e-4)),x=g.sub(y),b=d(1).sub(we(x,g,l)),v=m.a.mul(b),_=m.rgb.mul(b),M=v.oneMinus();return It(ve(c,F(_.add(c.rgb.mul(M)),v.add(c.a.mul(M))),ln(r,o.y)))})()}};var zq=s=>({outside:0,center:1,inside:2})[s?.toLowerCase()]??1,VF={name:"Ring",category:"Shapes",description:"Annular ring (donut) with adjustable radius and band thickness",props:{color:{default:"#ffffff",transform:_e,description:"Fill color of the ring",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the ring",ui:{type:"position",label:"Center",group:"Position"}},radius:{default:.3,description:"Distance from center to the ring's midline in UV space",ui:{type:"range",min:0,max:1,step:.01,label:"Radius",group:"Shape"}},thickness:{default:.07,description:"Half-width of the ring band \u2014 total ring width is twice this value",ui:{type:"range",min:.005,max:.3,step:.005,label:"Thickness",group:"Shape"}},softness:{default:0,description:"Edge softness for antialiasing (applied to both inner and outer ring edges)",ui:{type:"range",min:0,max:.1,step:.001,label:"Softness",group:"Effect"}},strokeThickness:{default:0,description:"Stroke thickness. Zero means no stroke.",ui:{type:"range",min:0,max:.1,step:.005,label:"Stroke Thickness",group:"Stroke"}},strokeColor:{default:"#000000",transform:_e,description:"Color of the stroke outline",ui:{type:"color",label:"Stroke Color",group:"Colors"}},strokePosition:{default:"center",transform:zq,description:"Position of the stroke relative to the ring edge",ui:{type:"select",options:[{label:"Outside",value:"outside"},{label:"Center",value:"center"},{label:"Inside",value:"inside"}],label:"Stroke Position",group:"Stroke"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for blending fill and stroke colors",ui:{type:"select",options:Ft,label:"Color Blending",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=vw(n.x.sub(i.x),n.y.sub(i.y),s.radius.uniform,s.thickness.uniform),o=s.softness.uniform,a=s.strokeThickness.uniform,l=s.strokePosition.uniform,c=a.greaterThan(d(0)),u=l.greaterThanEqual(d(.5)).and(l.lessThan(d(1.5))),h=l.greaterThanEqual(d(1.5)),p=a.mul(.5),f=h.select(a.negate(),u.select(p.negate(),d(0))),m=h.select(d(0),u.select(p,a)),g=we(m.sub(o),m,r).oneMinus(),y=c.select(we(f.sub(o),f,r),d(0)),x=wt(F(s.color.uniform.rgb,s.color.uniform.a),F(s.strokeColor.uniform.rgb,s.strokeColor.uniform.a),y,s.colorSpace.uniform.value);return F(x.xyz,x.w.mul(g))}};var zF={name:"Ripples",category:"Textures",description:"Concentric animated ripples emanating from a point",props:{center:{default:{x:.5,y:.5},transform:ft,description:"The center point where ripples emanate from",ui:{type:"position",label:"Center",group:"Position"}},colorA:{default:"#ffffff",transform:_e,description:"Color of the ripple waves",ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#000000",transform:_e,description:"Background color between ripples",ui:{type:"color",label:"Color B",group:"Colors"}},speed:{default:1,description:"Speed of ripple animation",ui:{type:"range",min:-5,max:5,step:.1,label:"Speed",group:"Animation"}},frequency:{default:20,description:"Number of ripples/spacing between them",ui:{type:["range","map"],min:1,max:80,step:.1,label:"Frequency",group:"Effect"}},softness:{default:0,description:"Softness of ripple edges",ui:{type:["range","map"],min:0,max:3,step:.1,label:"Softness",group:"Effect"}},thickness:{default:.5,description:"Thickness of each ripple band",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Thickness",group:"Effect"}},phase:{default:0,description:"Phase offset for ripple animation",ui:{type:["range","map"],min:0,max:6.28,step:.1,label:"Phase",group:"Animation"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=e.center.uniform,i=e.colorA.uniform,r=e.colorB.uniform,o=e.frequency.uniform,a=e.softness.uniform,l=e.thickness.uniform,c=e.phase.uniform,u=X.x.div(X.y),h=oy(R(t.x.mul(u),t.y),R(n.x.mul(u),n.y.oneMinus())),p=cn(s,e.speed),f=ue(h.mul(o).sub(p).add(c)),m=l.mul(d(2)).sub(d(1));return wt(r,i,we(m.sub(a),m.add(a),f).oneMinus(),0)}};var Gq=s=>({outside:0,center:1,inside:2})[s?.toLowerCase()]??1,GF={name:"RoundedRect",category:"Shapes",description:"Rounded rectangle with adjustable width, height, and corner rounding",props:{color:{default:"#ffffff",transform:_e,description:"Fill color of the rectangle",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the rectangle",ui:{type:"position",label:"Center",group:"Position"}},width:{default:.35,description:"Half-width of the rectangle",ui:{type:"range",min:.01,max:1,step:.01,label:"Width",group:"Shape"}},height:{default:.25,description:"Half-height of the rectangle",ui:{type:"range",min:.01,max:1,step:.01,label:"Height",group:"Shape"}},rounding:{default:.05,description:"Corner rounding radius \u2014 set to min(width, height) for a pill shape",ui:{type:"range",min:0,max:.5,step:.01,label:"Rounding",group:"Shape"}},rotation:{default:0,description:"Rotation in degrees",ui:{type:"range",min:0,max:360,step:1,label:"Rotation",group:"Shape"}},softness:{default:0,description:"Edge softness for antialiasing",ui:{type:"range",min:0,max:.1,step:.001,label:"Softness",group:"Effect"}},strokeThickness:{default:0,description:"Stroke thickness. Zero means no stroke.",ui:{type:"range",min:0,max:.2,step:.005,label:"Stroke Thickness",group:"Stroke"}},strokeColor:{default:"#000000",transform:_e,description:"Color of the stroke outline",ui:{type:"color",label:"Stroke Color",group:"Colors"}},strokePosition:{default:"center",transform:Gq,description:"Position of the stroke relative to the shape edge",ui:{type:"select",options:[{label:"Outside",value:"outside"},{label:"Center",value:"center"},{label:"Inside",value:"inside"}],label:"Stroke Position",group:"Stroke"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for blending fill and stroke colors",ui:{type:"select",options:Ft,label:"Color Blending",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=n.x.sub(i.x),o=n.y.sub(i.y),a=s.rotation.uniform.mul(d(Math.PI/180)),l=ke(a),c=ue(a),u=Sw(r.mul(l).add(o.mul(c)),o.mul(l).sub(r.mul(c)),s.width.uniform,s.height.uniform,s.rounding.uniform),h=s.softness.uniform,p=s.strokeThickness.uniform,f=s.strokePosition.uniform,m=p.greaterThan(d(0)),g=f.greaterThanEqual(d(.5)).and(f.lessThan(d(1.5))),y=f.greaterThanEqual(d(1.5)),x=p.mul(.5),b=y.select(p.negate(),g.select(x.negate(),d(0))),v=y.select(d(0),g.select(x,p)),_=we(v.sub(h),v,u).oneMinus(),M=m.select(we(b.sub(h),b,u),d(0)),T=wt(F(s.color.uniform.rgb,s.color.uniform.a),F(s.strokeColor.uniform.rgb,s.strokeColor.uniform.a),M,s.colorSpace.uniform.value);return F(T.xyz,T.w.mul(_))}};var HF={name:"Saturation",category:"Adjustments",description:"Adjust color saturation intensity",requiresChild:!0,props:{intensity:{default:1,description:"The intensity of the saturation effect (1 being no change)",compileTimeWhen:(s,e)=>s===1!=(e===1),ui:{type:["range","map"],min:0,max:3,step:.1,label:"Intensity",group:"Appearance"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return console.error("You must pass a child component into the Saturation shader."),F(0);if(s.intensity.uniform.value===1)return e;let t=Nt(e.rgb,de(.2126,.7152,.0722));return F(ve(de(t,t,t),e.rgb,s.intensity.uniform),e.a)}};var WF={name:"Sharpness",category:"Adjustments",description:"Adjust image sharpness using a convolution kernel",requiresRTT:!0,requiresChild:!0,props:{sharpness:{default:0,description:"How sharp to make the underlying image",compileTimeWhen:(s,e)=>s===0!=(e===0),ui:{type:["range","map"],min:0,max:5,step:.1,label:"Sharpness",group:"Appearance"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);if(s.sharpness.uniform.value===0)return e;let n=_t(e);return t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()}),Ne(()=>{let i=H,r=s.sharpness.uniform,o=R(1).div(X),a=n.sample(i),l=n.sample(i.add(R(0,o.y))),c=n.sample(i.sub(R(0,o.y))),u=n.sample(i.sub(R(o.x,0))),h=n.sample(i.add(R(o.x,0))),p=d(1).add(r.mul(4)),f=r.negate();return It(F(ht(a.rgb.mul(p).add(l.rgb.mul(f)).add(c.rgb.mul(f)).add(u.rgb.mul(f)).add(h.rgb.mul(f)),0,1),a.a))})()}};var Da=s=>{let e=Math.sin(s)*1e4;return e-Math.floor(e)},vr=16,ur=1024,$F={name:"Shatter",category:"Interactive",description:"Broken glass effect with tectonic plate displacement",requiresRTT:!0,requiresChild:!0,usesPointer:!0,props:{crackWidth:{default:1,description:"Thickness of crack lines",ui:{type:["range","map"],min:.5,max:5,step:.1,label:"Crack Width",group:"Effect"}},intensity:{default:4,description:"How much shards shift",ui:{type:"range",min:0,max:20,step:1,label:"Intensity",group:"Effect"}},radius:{default:.4,description:"Cursor influence radius",ui:{type:"range",min:.1,max:1,step:.1,label:"Radius",group:"Effect"}},decay:{default:1,description:"How fast shards return to rest",ui:{type:"range",min:.1,max:10,step:.1,label:"Decay",group:"Effect"}},seed:{default:2,description:"Random seed for pattern",ui:{type:"range",min:0,max:50,step:1,label:"Seed",group:"Effect"}},chromaticSplit:{default:1,description:"RGB separation for prismatic glass effect",ui:{type:["range","map"],min:0,max:5,step:.1,label:"Chromatic Split",group:"Effect"}},refractionStrength:{default:5,description:"How much cracks bend/distort the underlying image",ui:{type:["range","map"],min:0,max:10,step:.1,label:"Refraction",group:"Effect"}},shardLighting:{default:.1,description:"Subtle lighting on tilted shards for 3D depth",ui:{type:"range",min:0,max:.5,step:.1,label:"Shard Lighting",group:"Effect"}},edges:{default:"mirror",description:"How to handle edges when displacement pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},computeNode:({uniforms:s,onCleanup:e})=>{let t=Gc(new Array(vr*2).fill(0),"float"),n=new ys(ur,ur);n.type=en,n.magFilter=Cn,n.minFilter=Cn,n.generateMipmaps=!1;let i=ds(n);e(()=>{n.dispose()});let r=gn(ur),o=d(1/ur),a=Ne(()=>{let h=kt,p=h.mod(r),f=h.div(r);wn(f.lessThan(r),()=>{let m=p.toFloat().add(d(.5)).mul(o),g=f.toFloat().add(d(.5)).mul(o),y=d(99999).toVar(),x=d(99999).toVar(),b=d(0).toVar(),v=d(0).toVar();for(let _=0;_<vr;_++){let M=t.element(Tt(_*2)),T=t.element(Tt(_*2+1)),w=m.sub(M),S=g.sub(T),A=w.mul(w).add(S.mul(S));wn(A.lessThan(y),()=>{x.assign(y),v.assign(b),y.assign(A),b.assign(d(_))}).Else(()=>{wn(A.lessThan(x),()=>{x.assign(A),v.assign(d(_))})})}$n(i,Mn(p,f),F(b,v,d(0),d(0))).toWriteOnly()})})().compute(ur*ur,[256]),l=s.seed.uniform.value,c=!0,u=h=>{let p=new Array(vr*2);for(let f=0;f<vr;f++)p[f*2]=Da(h+f*2),p[f*2+1]=Da(h+f*2+1);t.array=p};return u(l),{outputs:{voronoiTexture:n},getComputeNodes:()=>{let h=s.seed.uniform.value;return h!==l&&(l=h,u(l),c=!0),c?(c=!1,[a]):null}}},fragmentNode:({uniforms:s,onBeforeRender:e,childNode:t,onCleanup:n,dimensions:i,computeOutputs:r})=>{let a=new Float32Array(vr*4),l=new Array(vr*2).fill(0),c=Gc(l,"float"),u=new Float32Array(vr*4),h=new Array(vr*2).fill(0),p=Gc(h,"float"),f=()=>{for(let Ee=0;Ee<vr;Ee++)l[Ee*2]=a[Ee*4],l[Ee*2+1]=a[Ee*4+1];c.array=l},m=()=>{for(let Ee=0;Ee<vr;Ee++)h[Ee*2]=u[Ee*4],h[Ee*2+1]=u[Ee*4+1];p.array=h},g;if(r?.voronoiTexture)g=hn(r.voronoiTexture);else{let Ee=new Float32Array(ur*ur*4),O=new Qn(Ee,ur,ur,Hn,en);O.magFilter=Cn,O.minFilter=Cn,g=hn(O);let E=()=>{for(let Q=0;Q<ur;Q++)for(let Se=0;Se<ur;Se++){let Ae=(Se+.5)/ur,K=(Q+.5)/ur,Z=1/0,me=1/0,Ze=0,Be=0;for(let gt=0;gt<vr;gt++){let xt=Ae-a[gt*4],Dt=K-a[gt*4+1],se=xt*xt+Dt*Dt;se<Z?(me=Z,Be=Ze,Z=se,Ze=gt):se<me&&(me=se,Be=gt)}let Je=(Q*ur+Se)*4;Ee[Je]=Ze,Ee[Je+1]=Be}O.needsUpdate=!0},z=s.seed.uniform.value,q=Q=>{for(let Se=0;Se<vr;Se++)a[Se*4]=Da(Q+Se*2),a[Se*4+1]=Da(Q+Se*2+1),a[Se*4+2]=Da(Q+Se*3),a[Se*4+3]=Da(Q+Se*3+1);f()};q(z),E(),e(()=>{let Q=s.seed.uniform.value;Q!==z&&(z=Q,q(z),E(),u.fill(0))}),n(()=>{O.dispose()})}let y=Ee=>{for(let O=0;O<vr;O++)a[O*4]=Da(Ee+O*2),a[O*4+1]=Da(Ee+O*2+1),a[O*4+2]=Da(Ee+O*3),a[O*4+3]=Da(Ee+O*3+1);f()},x=s.seed.uniform.value;y(x),u.fill(0),m();let b=.5,v=.5,_=Date.now();if(e(({pointer:Ee})=>{let O=Date.now(),E=Math.min((O-_)/1e3,.016);_=O;let z=i.width/i.height,q=s.seed.uniform.value;q!==x&&(x=q,y(x),u.fill(0));let Q=s.intensity.uniform.value,Se=s.radius.uniform.value,Ae=s.decay.uniform.value,K=E>0?(Ee.x-b)/E:0,Z=E>0?(Ee.y-v)/E:0,me=Math.sqrt(K*K+Z*Z),Ze=5+Q*2;if(me>Ze){let Be=Ze/me;K*=Be,Z*=Be,me=Ze}for(let Be=0;Be<vr;Be++){let Je=a[Be*4],gt=a[Be*4+1],xt=a[Be*4+2]-.5,Dt=a[Be*4+3]-.5,se=z>=1?(Je-Ee.x)*z:Je-Ee.x,st=z>=1?gt-Ee.y:(gt-Ee.y)/z,De=Math.sqrt(se*se+st*st),dt=u[Be*4],Et=u[Be*4+1],ot=Math.max(.01,Ae),Vt=Math.exp(-E/ot);dt*=Vt,Et*=Vt;let Lt=0,zn=0;if(De<Se&&me>.01){let Gs=Math.max(0,1-De/Se),ei=Gs*Gs,ml=ei*me*Q*E*.5;Lt=K*ml,zn=Z*ml;let gl=ei*me*Q*E*.1;Lt+=xt*gl,zn+=Dt*gl}let Rn=Math.min(1,1*E);u[Be*4]=dt+Lt*Rn,u[Be*4+1]=Et+zn*Rn,u[Be*4+2]=0,u[Be*4+3]=0}m(),b=Ee.x,v=Ee.y}),!t)return F(0,0,0,0);let M=_t(t);n(()=>{M?.renderTarget?.dispose&&M.renderTarget.dispose()});let T=g.sample(H),w=T.r.toInt(),S=T.g.toInt(),A=R(c.element(w.mul(2)),c.element(w.mul(2).add(1))),I=R(c.element(S.mul(2)),c.element(S.mul(2).add(1))),N=H.sub(A).length(),P=H.sub(I).length(),B=R(p.element(w.mul(2)),p.element(w.mul(2).add(1))),U=B.length(),D=P.sub(N),L=s.crackWidth.uniform.mul(.005),k=d(1).sub(we(d(0),L,D)),W=we(d(0),d(.01),U),$=k.mul(W),ie=H.sub(A).normalize(),xe=R(ie.y.negate(),ie.x),he=H.sub(B),Pe=xe.mul(s.refractionStrength.uniform).mul(.01),Ge=s.chromaticSplit.uniform.mul(.005),He=Pe.add(xe.mul(Ge)),oe=Pe,be=Pe.sub(xe.mul(Ge)),Te=he.add(He.mul($)),Fe=he.add(oe.mul($)),ze=he.add(be.mul($)),fe=En(Te,M.sample(Te),M,s.edges.uniform.value),Xe=En(Fe,M.sample(Fe),M,s.edges.uniform.value),Re=En(ze,M.sample(ze),M,s.edges.uniform.value),Y=F(fe.r,Xe.g,Re.b,Xe.a),ye=En(he,M.sample(he),M,s.edges.uniform.value),Me=ye.rgb.mul(d(1).sub($)).add(Y.rgb.mul($)),Le=B.length(),Ye=B.x.div(Le.add(.001)),tt=B.y.div(Le.add(.001)),et=R(.3,.6).normalize(),Qe=Ye.mul(et.x).add(tt.mul(et.y)),nt=d(1).add(Qe.mul(s.shardLighting.uniform)),J=we(d(0),d(.02),Le),Ie=d(1).add(nt.sub(1).mul(J));return It(F(Me.mul(Ie),ye.a))}};var qF={name:"SimplexNoise",category:"Textures",description:"Organic noise with animated movement",props:{colorA:{default:"#ffffff",description:"First color",transform:_e,ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#000000",description:"Second color",transform:_e,ui:{type:"color",label:"Color B",group:"Colors"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}},scale:{default:2,description:"Pattern scale (higher = larger patterns)",ui:{type:"range",min:-2,max:5,step:.1,label:"Scale",group:"Effect"}},balance:{default:0,description:"Balance between colors (negative = more colorB, positive = more colorA)",ui:{type:["range","map"],min:-1,max:1,step:.1,label:"Balance",group:"Effect"}},contrast:{default:0,description:"Pattern contrast (higher = sharper transitions)",ui:{type:["range","map"],min:-2,max:5,step:.1,label:"Contrast",group:"Effect"}},seed:{default:0,description:"Random seed for pattern variation",ui:{type:"range",min:0,max:100,step:1,label:"Seed",group:"Effect"}},speed:{default:1,description:"Animation speed",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Animation"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=X.x.div(X.y),i=R(t.x.mul(n),t.y),r=cn(s,e.speed),o=i.mul(Ni(e.scale.uniform)).add(e.seed.uniform),a=Dn(de(o.x,o.y,r.mul(.5))),l=e.contrast.uniform.add(1),c=ht(a.mul(l).add(e.balance.uniform).mul(.5).add(.5),0,1);return wt(e.colorB.uniform,e.colorA.uniform,c,e.colorSpace.uniform.value)}};var XF={name:"SineWave",category:"Textures",description:"Animated wave with thickness and softness",props:{color:{default:"#ffffff",transform:_e,description:"The color of the sine wave",ui:{type:"color",label:"Color",group:"Colors"}},amplitude:{default:.15,description:"The height/amplitude of the sine wave",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Amplitude",group:"Effect"}},frequency:{default:1,description:"The frequency/number of wave cycles",ui:{type:["range","map"],min:.1,max:20,step:.1,label:"Frequency",group:"Effect"}},speed:{default:1,description:"The animation speed of the wave",ui:{type:"range",min:-5,max:5,step:.1,label:"Speed",group:"Animation"}},angle:{default:0,transform:cs,description:"The rotation angle of the wave (in degrees)",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},position:{default:{x:.5,y:.5},transform:ft,description:"The center position of the wave",ui:{type:"position",label:"Position",group:"Position"}},thickness:{default:.2,description:"The thickness of the wave line",ui:{type:["range","map"],min:0,max:2,step:.1,label:"Thickness",group:"Effect"}},softness:{default:.4,description:"Edge softness of the wave line",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Softness",group:"Effect"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=X.x.div(X.y),i=R(t.x.mul(n),t.y),r=R(e.position.uniform.x.mul(n),e.position.uniform.y.oneMinus()),o=i.sub(r),a=Ls(e.angle.uniform),l=ke(a),c=ue(a),u=o.x.mul(l).sub(o.y.mul(c)),h=o.x.mul(c).add(o.y.mul(l)),p=cn(s,e.speed),f=ue(u.mul(e.frequency.uniform).mul(Qs.mul(2)).add(p)).mul(e.amplitude.uniform),m=bt(h.sub(f)),g=e.thickness.uniform.mul(.5),y=e.softness.uniform.mul(.5),x=we(g.sub(y),g.add(y),m).oneMinus();return F(e.color.uniform.rgb,e.color.uniform.a.mul(x))}};var YF=256,Hq=56,Wq=20,jF=.8,ZF=.2,KF={name:"Smoke",category:"Interactive",description:"Realistic fluid smoke simulation with vorticity dynamics",usesPointer:!0,props:{colorA:{default:"#fc83f9",transform:_e,description:"Color of fresh smoke",ui:{type:"color",label:"Start Color",group:"Colors"}},colorB:{default:"#c21c79",transform:_e,description:"Color smoke transitions to as it ages",ui:{type:"color",label:"End Color",group:"Colors"}},emitFrom:{default:{x:.5,y:1},transform:ft,description:"The emission source point",ui:{type:"position",label:"Emit From",group:"Emission"}},direction:{default:0,description:"Emission direction (0 = up, 90 = right, 180 = down, 270 = left)",ui:{type:"range",min:0,max:360,step:1,label:"Direction",group:"Emission"}},speed:{default:20,description:"Emission velocity strength",ui:{type:"range",min:.1,max:50,step:.1,label:"Speed",group:"Emission"}},spread:{default:60,description:"Emission cone angle in degrees",ui:{type:"range",min:0,max:180,step:1,label:"Spread",group:"Emission"}},emitRadius:{default:.08,description:"Size of the emission area",ui:{type:"range",min:.01,max:.3,step:.01,label:"Emit Size",group:"Emission"}},intensity:{default:1,description:"Smoke emission density",ui:{type:"range",min:.1,max:1,step:.05,label:"Intensity",group:"Effect"}},dissipation:{default:.2,description:"How fast smoke fades over time",ui:{type:"range",min:.1,max:3,step:.1,label:"Dissipation",group:"Effect"}},detail:{default:25,description:"Fine-scale swirling detail",ui:{type:"range",min:0,max:50,step:1,label:"Detail",group:"Effect"}},gravity:{default:.5,description:"Downward gravitational pull on smoke",ui:{type:"range",min:-2,max:2,step:.1,label:"Gravity",group:"Effect"}},colorDecay:{default:.4,description:"How quickly smoke shifts from Color A to Color B",ui:{type:"range",min:0,max:3,step:.1,label:"Color Decay",group:"Colors"}},mouseInfluence:{default:.1,description:"Strength of cursor influence",ui:{type:"range",min:0,max:2,step:.05,label:"Cursor Influence",group:"Interaction"}},mouseRadius:{default:.1,description:"Radius of cursor influence area",ui:{type:"range",min:.02,max:.5,step:.01,label:"Cursor Radius",group:"Interaction"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},computeNode:({uniforms:s,onCleanup:e,renderer:t})=>{let n=YF,i=gn(n),r=Tt(n),o=Tt(n-1),a=n*n,l=(Y,ye,Me,Le)=>Y.add(Tt(Me)).clamp(Tt(0),o).mul(r).add(ye.add(Tt(Le)).clamp(Tt(0),o)),c=fs(a,"vec4"),u=fs(a,"vec4"),h=fs(a,"vec4"),p=fs(a,"vec4"),f=fs(a,"vec4"),m=new ys(n,n);m.type=en;let g=ds(m);e(()=>{m.dispose()});let y=ee(.016),x=ee(128),b=ee(256),v=ee(0),_=ee(-50),M=ee(1),T=ee(0),w=ee(.5),S=ee(15),A=ee(.7),I=ee(1),N=ee(30),P=ee(.5),B=ee(128),U=ee(128),D=ee(0),L=ee(0),k=ee(0),W=ee(900),$=ee(1),ie=Ne(()=>{let Y=kt,ye=Y.mod(i),Me=Y.div(i),Le=ye.toFloat().add(d(.5)),Ye=Me.toFloat().add(d(.5)),tt=Le.sub(x),et=Ye.sub(b),Qe=tt.mul(tt).add(et.mul(et)),nt=S.mul(S).max(d(1)),J=Qe.negate().div(nt).exp(),Ie=h.element(Y),Ee=Ie.x,O=A.mul(J).mul(y).mul(d(8)),E=Ee.add(O).min(d(1)),z=O.div(E.max(d(.001)));h.element(Y).assign(F(E,Ie.y.mul(d(1).sub(z.min(d(1)))),d(0),d(0)));let q=c.element(Y),Q=tt.mul(M).add(et.mul(T)).div(S.max(d(1))),Se=v.mul(v).add(_.mul(_)).max(d(1)),Ae=v.add(M.mul(Q).mul(w).mul(Se.sqrt())),K=_.add(T.mul(Q).mul(w).mul(Se.sqrt())),Z=J.mul(y).mul(d(3)).min(d(1)),me=P.mul(Ee).mul(y).mul(d(n*.08)),Ze=Le.sub(B),Be=Ye.sub(U),Je=Ze.mul(Ze).add(Be.mul(Be)).negate().div(W.max(d(1))).exp().mul(k);c.element(Y).assign(F(ve(q.x,Ae,Z).add(D.mul(Je)),ve(q.y,K,Z).add(me).add(L.mul(Je)),q.z,d(0)))})().compute(a,[256]),xe=Ne(()=>{let Y=kt,ye=Y.mod(i).toInt(),Me=Y.div(i).toInt(),Le=c.element(l(Me,ye,0,-1)),Ye=c.element(l(Me,ye,0,1)),tt=c.element(l(Me,ye,-1,0)),et=c.element(l(Me,ye,1,0)),Qe=Ye.y.sub(Le.y).sub(et.x.sub(tt.x)).mul(d(.5)),nt=c.element(Y);c.element(Y).assign(F(nt.x,nt.y,Qe,d(0)))})().compute(a,[256]),he=Ne(()=>{let Y=kt,ye=Y.mod(i).toInt(),Me=Y.div(i).toInt(),Le=c.element(l(Me,ye,0,-1)).z.abs(),Ye=c.element(l(Me,ye,0,1)).z.abs(),tt=c.element(l(Me,ye,-1,0)).z.abs(),et=c.element(l(Me,ye,1,0)).z.abs(),Qe=c.element(Y).z,nt=Ye.sub(Le).mul(d(.5)),J=et.sub(tt).mul(d(.5)),Ie=nt.mul(nt).add(J.mul(J)).sqrt().max(d(1e-5)),Ee=J.div(Ie).mul(Qe).mul(N).mul(y),O=nt.div(Ie).negate().mul(Qe).mul(N).mul(y),E=c.element(Y);c.element(Y).assign(F(E.x.add(Ee),E.y.add(O),E.z,d(0)))})().compute(a,[256]),Pe=Ne(()=>{let Y=kt,ye=Y.mod(i).toInt(),Me=Y.div(i).toInt(),Le=ye.toFloat(),Ye=Me.toFloat(),tt=c.element(Y),et=c.element(l(Me,ye,0,-1)).x,Qe=c.element(l(Me,ye,0,1)).x,nt=c.element(l(Me,ye,-1,0)).y,J=c.element(l(Me,ye,1,0)).y,Ie=Le.lessThan(d(.5)).select(tt.x.negate(),et),Ee=Le.greaterThan(d(n-1.5)).select(tt.x.negate(),Qe),O=Ye.lessThan(d(.5)).select(tt.y.negate(),nt),E=Ye.greaterThan(d(n-1.5)).select(tt.y.negate(),J),z=Ee.sub(Ie).add(E.sub(O)).mul(d(.5)),q=f.element(Y).x.mul(d(jF));f.element(Y).assign(F(q,z,d(0),d(0)))})().compute(a,[256]),Ge=Ne(()=>{let Y=kt,ye=Y.mod(i).toInt(),Me=Y.div(i).toInt(),Le=f.element(l(Me,ye,0,-1)).x,Ye=f.element(l(Me,ye,0,1)).x,tt=f.element(l(Me,ye,-1,0)).x,et=f.element(l(Me,ye,1,0)).x,Qe=f.element(Y).y;f.element(Y).assign(F(Le.add(Ye).add(tt).add(et).sub(Qe).mul(d(.25)),Qe,d(0),d(0)))})().compute(a,[256]),He=Ne(()=>{let Y=kt,ye=Y.mod(i).toInt(),Me=Y.div(i).toInt(),Le=f.element(l(Me,ye,0,-1)).x,Ye=f.element(l(Me,ye,0,1)).x,tt=f.element(l(Me,ye,-1,0)).x,et=f.element(l(Me,ye,1,0)).x,Qe=c.element(Y);c.element(Y).assign(F(Qe.x.sub(Ye.sub(Le).mul(d(.5))),Qe.y.sub(et.sub(tt).mul(d(.5))),Qe.z,d(0)))})().compute(a,[256]),oe=Ne(()=>{let Y=kt,ye=Y.mod(i),Me=Y.div(i),Le=c.element(Y),Ye=ye.toFloat().sub(Le.x.mul(y)).clamp(d(0),d(n-1)),tt=Me.toFloat().sub(Le.y.mul(y)).clamp(d(0),d(n-1)),et=Ht(Ye).clamp(d(0),d(n-2)),Qe=Ht(tt).clamp(d(0),d(n-2)),nt=Ye.sub(et),J=tt.sub(Qe),Ie=et.toInt(),Ee=Qe.toInt(),O=c.element(Ee.mul(r).add(Ie)),E=c.element(Ee.mul(r).add(Ie.add(Tt(1)))),z=c.element(Ee.add(Tt(1)).mul(r).add(Ie)),q=c.element(Ee.add(Tt(1)).mul(r).add(Ie.add(Tt(1)))),Q=d(1).add(d(ZF).mul(y));u.element(Y).assign(F(ve(ve(O.x,E.x,nt),ve(z.x,q.x,nt),J).div(Q),ve(ve(O.y,E.y,nt),ve(z.y,q.y,nt),J).div(Q),d(0),d(0)))})().compute(a,[256]),be=Ne(()=>{let Y=u.element(kt);c.element(kt).assign(F(Y.x,Y.y,d(0),d(0)))})().compute(a,[256]),Te=Ne(()=>{let Y=kt,ye=Y.mod(i),Me=Y.div(i),Le=c.element(Y),Ye=ye.toFloat().sub(Le.x.mul(y)).clamp(d(0),d(n-1)),tt=Me.toFloat().sub(Le.y.mul(y)).clamp(d(0),d(n-1)),et=Ht(Ye).clamp(d(0),d(n-2)),Qe=Ht(tt).clamp(d(0),d(n-2)),nt=Ye.sub(et),J=tt.sub(Qe),Ie=et.toInt(),Ee=Qe.toInt(),O=h.element(Ee.mul(r).add(Ie)),E=h.element(Ee.mul(r).add(Ie.add(Tt(1)))),z=h.element(Ee.add(Tt(1)).mul(r).add(Ie)),q=h.element(Ee.add(Tt(1)).mul(r).add(Ie.add(Tt(1)))),Q=ve(ve(O.x,E.x,nt),ve(z.x,q.x,nt),J),Se=ve(ve(O.y,E.y,nt),ve(z.y,q.y,nt),J),Ae=d(1).add(I.mul(y));p.element(Y).assign(F(Q.div(Ae).max(d(0)),Se.add(y.mul(d(.4)).mul($)).min(d(1)),d(0),d(0)))})().compute(a,[256]),Fe=Ne(()=>{let Y=p.element(kt);h.element(kt).assign(F(Y.x,Y.y,d(0),d(0)))})().compute(a,[256]),ze=Ne(()=>{let Y=kt,ye=Y.mod(i),Me=Y.div(i),Le=h.element(Y);$n(g,Mn(ye,Me),F(Le.x,Le.y,d(0),d(0))).toWriteOnly()})().compute(a,[256]),fe=Date.now(),Xe=.5,Re=.5;return{outputs:{smokeTexture:m},getComputeNodes:Y=>{let ye=Date.now(),Me=Math.min((ye-fe)/1e3,.033);if(fe=ye,Me<.001)return null;let Le=(K,Z)=>{let me=s[K];if(!me)return Z;if(typeof me.getCpuValue=="function"){let Be=me.getCpuValue();return typeof Be=="number"?Be:Z}let Ze=me.uniform?.value;return typeof Ze=="number"?Ze:Z},Ye=Le("speed",3),tt=Le("direction",0)*Math.PI/180,et=Math.min(89*Math.PI/180,Le("spread",45)*Math.PI/360),Qe=s.emitFrom.uniform.value,nt=typeof Qe=="object"?Qe.x??.5:.5,J=typeof Qe=="object"?Qe.y??0:0;y.value=Me,x.value=nt*n,b.value=(1-J)*n;let Ie=Ye*n*.15;v.value=Math.sin(tt)*Ie,_.value=-Math.cos(tt)*Ie,M.value=Math.cos(tt),T.value=Math.sin(tt),w.value=Math.tan(et),S.value=Le("emitRadius",.06)*n,A.value=Le("intensity",.7),I.value=Le("dissipation",1),N.value=Le("detail",30),P.value=Le("gravity",.5),$.value=Le("colorDecay",1);let Ee=Le("mouseInfluence",.5),O=Le("mouseRadius",.12),E=Y?.pointer?.x??Xe,z=Y?.pointer?.y??Re,q=E-Xe,Q=z-Re;Xe=E,Re=z;let Se=Math.sqrt(q*q+Q*Q),Ae=O*n;W.value=Ae*Ae,Se>5e-4&&Ee>0?(B.value=E*n,U.value=z*n,D.value=q*n*15*Ee,L.value=Q*n*15*Ee,k.value=1):k.value=0,t.compute(ie),t.compute(xe),t.compute(he),t.compute(Pe);for(let K=0;K<Wq;K++)t.compute(Ge);return t.compute(He),t.compute(oe),t.compute(be),t.compute(Te),t.compute(Fe),[ze]}}},fragmentNode:({uniforms:s,onBeforeRender:e,onCleanup:t,computeOutputs:n})=>{let i;if(n?.smokeTexture)i=hn(n.smokeTexture);else{let l=Hq,c=l*l,u=new Float32Array(c),h=new Float32Array(c),p=new Float32Array(c),f=new Float32Array(c),m=new Float32Array(c),g=new Float32Array(c),y=new Float32Array(c),x=new Float32Array(c),b=new Float32Array(c),v=new Float32Array(c),_=new Float32Array(c),M=new Float32Array(c*4),T=new Qn(M,l,l,Hn,en);T.magFilter=Yt,T.minFilter=Yt,T.needsUpdate=!0,i=hn(T);let w=(B,U)=>{let D=s[B];if(!D)return U;if(typeof D.getCpuValue=="function"){let k=D.getCpuValue();return typeof k=="number"?k:U}let L=D.uniform?.value;return typeof L=="number"?L:U},S=Date.now(),A=.5,I=.5,N=(B,U,D)=>{let L=Math.max(0,Math.min(l-1,U)),k=Math.max(0,Math.min(l-1,D)),W=Math.max(0,Math.min(l-2,Math.floor(L))),$=Math.max(0,Math.min(l-2,Math.floor(k))),ie=L-W,xe=k-$,he=$*l+W;return(1-ie)*(1-xe)*B[he]+ie*(1-xe)*B[he+1]+(1-ie)*xe*B[he+l]+ie*xe*B[he+l+1]},P=(B,U,D,L)=>Math.max(0,Math.min(l-1,B+D))*l+Math.max(0,Math.min(l-1,U+L));e(({pointer:B})=>{let U=Date.now(),D=Math.min((U-S)/1e3,.033);if(S=U,D<.001)return;let L=w("speed",3),k=s.direction.uniform.value*Math.PI/180,W=Math.min(89*Math.PI/180,s.spread.uniform.value*Math.PI/360),$=s.emitFrom.uniform.value,ie=(typeof $=="object"?$.x??.5:.5)*l,xe=(1-(typeof $=="object"?$.y??0:0))*l,he=L*l*.15,Pe=Math.sin(k)*he,Ge=-Math.cos(k)*he,He=Math.cos(k),oe=Math.sin(k),be=Math.tan(W),Te=s.emitRadius.uniform.value*l,Fe=s.intensity.uniform.value,ze=w("detail",30),fe=w("gravity",.5),Xe=w("colorDecay",1),Re=w("dissipation",.2),Y=s.mouseInfluence.uniform.value,ye=s.mouseRadius.uniform.value*l,Me=B?.x??A,Le=B?.y??I,Ye=Me-A,tt=Le-I;A=Me,I=Le;let et=Math.sqrt(Ye*Ye+tt*tt)>5e-4&&Y>0,Qe=et?Ye*l*15*Y:0,nt=et?tt*l*15*Y:0,J=Me*l,Ie=Le*l;for(let E=0;E<l;E++)for(let z=0;z<l;z++){let q=E*l+z,Q=z+.5-ie,Se=E+.5-xe,Ae=Math.exp(-(Q*Q+Se*Se)/Math.max(1,Te*Te)),K=m[q],Z=Fe*Ae*D*8,me=Math.min(1,K+Z);g[q]*=1-Math.min(1,Z/Math.max(.001,me)),m[q]=me;let Ze=(Q*He+Se*oe)/Math.max(1,Te),Be=Math.sqrt(Pe*Pe+Ge*Ge),Je=Pe+He*Ze*be*Be,gt=Ge+oe*Ze*be*Be,xt=Math.min(1,Ae*D*3),Dt=z+.5-J,se=E+.5-Ie,st=et?Math.exp(-(Dt*Dt+se*se)/Math.max(1,ye*ye)):0;u[q]=u[q]*(1-xt)+Je*xt+Qe*st,h[q]=h[q]*(1-xt)+gt*xt+fe*K*D*l*.08+nt*st}if(ze>0){for(let E=0;E<l;E++)for(let z=0;z<l;z++)_[E*l+z]=.5*(h[P(E,z,0,1)]-h[P(E,z,0,-1)]-(u[P(E,z,1,0)]-u[P(E,z,-1,0)]));for(let E=0;E<l;E++)for(let z=0;z<l;z++){let q=E*l+z,Q=.5*(Math.abs(_[P(E,z,0,1)])-Math.abs(_[P(E,z,0,-1)])),Se=.5*(Math.abs(_[P(E,z,1,0)])-Math.abs(_[P(E,z,-1,0)])),Ae=Math.max(1e-5,Math.sqrt(Q*Q+Se*Se));u[q]+=Se/Ae*_[q]*ze*D,h[q]+=-(Q/Ae)*_[q]*ze*D}}for(let E=0;E<l;E++)for(let z=0;z<l;z++){let q=E*l+z,Q=z===0?-u[q]:u[P(E,z,0,-1)],Se=z===l-1?-u[q]:u[P(E,z,0,1)],Ae=E===0?-h[q]:h[P(E,z,-1,0)],K=E===l-1?-h[q]:h[P(E,z,1,0)];v[q]=.5*(Se-Q+K-Ae),b[q]*=jF}for(let E=0;E<6;E++)for(let z=0;z<l;z++)for(let q=0;q<l;q++){let Q=z*l+q;b[Q]=.25*(b[P(z,q,0,-1)]+b[P(z,q,0,1)]+b[P(z,q,-1,0)]+b[P(z,q,1,0)]-v[Q])}for(let E=0;E<l;E++)for(let z=0;z<l;z++){let q=E*l+z;u[q]-=.5*(b[P(E,z,0,1)]-b[P(E,z,0,-1)]),h[q]-=.5*(b[P(E,z,1,0)]-b[P(E,z,-1,0)])}let Ee=1+ZF*D;for(let E=0;E<l;E++)for(let z=0;z<l;z++){let q=E*l+z;p[q]=N(u,z-u[q]*D,E-h[q]*D)/Ee,f[q]=N(h,z-u[q]*D,E-h[q]*D)/Ee}u.set(p),h.set(f);let O=1+Re*D;for(let E=0;E<l;E++)for(let z=0;z<l;z++){let q=E*l+z,Q=z-u[q]*D,Se=E-h[q]*D;y[q]=Math.max(0,N(m,Q,Se)/O),x[q]=Math.min(1,N(g,Q,Se)+D*.4*Xe)}m.set(y),g.set(x);for(let E=0;E<c;E++)M[E*4]=m[E],M[E*4+1]=g[E];T.needsUpdate=!0}),t(()=>{T.dispose()})}let r,o;if(n?.smokeTexture){let l=d(1/YF),c=i.sample(H),u=i.sample(H.add(R(l,d(0)))),h=i.sample(H.add(R(d(0),l))),p=i.sample(H.add(R(l.negate(),d(0)))),f=i.sample(H.add(R(d(0),l.negate())));r=c.x.mul(d(.5)).add(u.x.mul(d(.125))).add(h.x.mul(d(.125))).add(p.x.mul(d(.125))).add(f.x.mul(d(.125))),o=c.y.mul(d(.5)).add(u.y.mul(d(.125))).add(h.y.mul(d(.125))).add(p.y.mul(d(.125))).add(f.y.mul(d(.125)))}else{let l=i.sample(H);r=l.x,o=l.y}let a=wt(s.colorA.uniform,s.colorB.uniform,o,s.colorSpace.uniform.value);return F(a.x,a.y,a.z,a.w.mul(r))}};var $q=JSON.stringify({type:"circleSDF",radius:.35}),Uw=256,JF=56,qq=20,Xq=.8,Yq=.2,QF={name:"SmokeFill",category:"Shape Effects",description:"Fill a shape with swirling fluid smoke that interacts with the shape boundary",requiresRTT:!1,requiresChild:!1,usesPointer:!0,props:{colorA:{default:"#8cf3ff",transform:_e,description:"Color of fresh smoke",ui:{type:"color",label:"Start Color",group:"Colors"}},colorB:{default:"#04a0d6",transform:_e,description:"Color smoke transitions to as it ages",ui:{type:"color",label:"End Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the shape",ui:{type:"position",label:"Center",group:"Position"}},scale:{default:1,description:"Scale of the shape (1 = default size)",ui:{type:"range",min:.1,max:3,step:.05,label:"Scale",group:"Position"}},emitFrom:{default:{x:.5,y:.5},transform:ft,description:"Emission source point within the shape",ui:{type:"position",label:"Emit From",group:"Emission"}},direction:{default:0,description:"Emission direction (0 = up, 90 = right, 180 = down, 270 = left)",ui:{type:"range",min:0,max:360,step:1,label:"Direction",group:"Emission"}},speed:{default:10,description:"Emission velocity strength",ui:{type:"range",min:.1,max:30,step:.1,label:"Speed",group:"Emission"}},spread:{default:60,description:"Emission cone angle in degrees",ui:{type:"range",min:0,max:180,step:1,label:"Spread",group:"Emission"}},emitRadius:{default:.03,description:"Size of the emission area",ui:{type:"range",min:.01,max:.3,step:.01,label:"Emit Size",group:"Emission"}},intensity:{default:1,description:"Smoke emission density",ui:{type:"range",min:.1,max:1,step:.05,label:"Intensity",group:"Effect"}},dissipation:{default:.3,description:"How fast smoke fades over time",ui:{type:"range",min:.1,max:5,step:.1,label:"Dissipation",group:"Effect"}},detail:{default:25,description:"Fine-scale swirling detail",ui:{type:"range",min:0,max:50,step:1,label:"Detail",group:"Effect"}},gravity:{default:.5,description:"Downward gravitational pull on smoke \u2014 0 = weightless, negative values = smoke rises",ui:{type:"range",min:-2,max:2,step:.1,label:"Gravity",group:"Effect"}},colorDecay:{default:.4,description:"How quickly smoke shifts from Color A to Color B",ui:{type:"range",min:0,max:3,step:.1,label:"Color Decay",group:"Colors"}},mouseInfluence:{default:.1,description:"Strength of cursor influence",ui:{type:"range",min:0,max:2,step:.05,label:"Cursor Influence",group:"Interaction"}},mouseRadius:{default:.1,description:"Radius of cursor influence area",ui:{type:"range",min:.02,max:.5,step:.01,label:"Cursor Radius",group:"Interaction"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}},shape:{default:$q,description:"Serialized shape configuration (JSON)",ui:{type:"shape",label:"Shape",group:"Shape"}},shapeSdfUrl:{default:"",compileTime:!0,description:"URL to a pre-generated SDF .bin file"},shapeType:{default:"",compileTime:!0,description:"Active SDF shape type"}},computeNode:({uniforms:s,onCleanup:e,onBeforeRender:t,renderer:n})=>{let i=Uw,r=gn(i),o=Tt(i),a=Tt(i-1),l=i*i,c=(Ie,Ee,O,E)=>Ie.add(Tt(O)).clamp(Tt(0),a).mul(o).add(Ee.add(Tt(E)).clamp(Tt(0),a)),u=s.shapeSdfUrl.uniform.value,h=(()=>{let Ie=s.shape.uniform.value;try{return JSON.parse(Ie)}catch{return{type:"circleSDF",radius:.35}}})(),p;u?p=$r(u,t,e):p=qr(s.shapeType.uniform.value||h.type||"circleSDF",h,s.shape,t);let f=fs(l,"vec4"),m=fs(l,"vec4"),g=fs(l,"vec4"),y=fs(l,"vec4"),x=fs(l,"vec4"),b=fs(l,"vec4"),v=new ys(i,i);v.type=en;let _=ds(v);e(()=>{v.dispose()});let M=ee(.016),T=ee(.5),w=ee(.5),S=ee(0),A=ee(-50),I=ee(1),N=ee(0),P=ee(.5),B=ee(10),U=ee(.8),D=ee(.5),L=ee(30),k=ee(.5),W=ee(1),$=ee(.5),ie=ee(.5),xe=ee(1),he=ee(1),Pe=ee(128),Ge=ee(128),He=ee(0),oe=ee(0),be=ee(0),Te=ee(900),Fe=Ne(()=>{let Ie=kt,Ee=Ie.mod(r),O=Ie.div(r),E=Ee.toFloat().add(d(.5)).div(d(i)),z=O.toFloat().add(d(.5)).div(d(i)),q=R(E.sub($).mul(he).div(xe).add(d(.5)),z.sub(ie).div(xe).add(d(.5))),Q=p(q).x,Se=Q.lessThan(d(0)).select(d(1),d(0));b.element(Ie).assign(F(Se,Q,d(0),d(0)))})().compute(l,[256]),ze=Ne(()=>{let Ie=kt,Ee=Ie.mod(r),O=Ie.div(r),E=b.element(Ie).x,z=Ee.toFloat().add(d(.5)),q=O.toFloat().add(d(.5)),Q=z.sub(T),Se=q.sub(w),Ae=Q.mul(Q).add(Se.mul(Se)),K=B.mul(B).max(d(1)),Z=Ae.negate().div(K).exp().mul(E),me=g.element(Ie),Ze=me.x,Be=U.mul(Z).mul(M).mul(d(8)),Je=Ze.add(Be).min(d(1)),gt=Be.div(Je.max(d(.001)));g.element(Ie).assign(F(Je,me.y.mul(d(1).sub(gt.min(d(1)))),d(0),d(0)));let xt=f.element(Ie),Dt=Q.mul(I).add(Se.mul(N)).div(B.max(d(1))),se=S.mul(S).add(A.mul(A)).max(d(1)),st=S.add(I.mul(Dt).mul(P).mul(se.sqrt())),De=A.add(N.mul(Dt).mul(P).mul(se.sqrt())),dt=Z.mul(M).mul(d(3)).min(d(1)),Et=k.mul(Ze).mul(M).mul(d(i*.08)).mul(E),ot=z.sub(Pe),Vt=q.sub(Ge),Lt=ot.mul(ot).add(Vt.mul(Vt)).negate().div(Te.max(d(1))).exp().mul(be).mul(E);f.element(Ie).assign(F(ve(xt.x,st,dt).add(He.mul(Lt)),ve(xt.y,De,dt).add(Et).add(oe.mul(Lt)),xt.z,d(0)))})().compute(l,[256]),fe=Ne(()=>{let Ie=kt,Ee=Ie.mod(r).toInt(),O=Ie.div(r).toInt(),E=f.element(c(O,Ee,0,-1)),z=f.element(c(O,Ee,0,1)),q=f.element(c(O,Ee,-1,0)),Q=f.element(c(O,Ee,1,0)),Se=z.y.sub(E.y).sub(Q.x.sub(q.x)).mul(d(.5)),Ae=f.element(Ie);f.element(Ie).assign(F(Ae.x,Ae.y,Se,d(0)))})().compute(l,[256]),Xe=Ne(()=>{let Ie=kt,Ee=Ie.mod(r).toInt(),O=Ie.div(r).toInt(),E=f.element(c(O,Ee,0,-1)).z.abs(),z=f.element(c(O,Ee,0,1)).z.abs(),q=f.element(c(O,Ee,-1,0)).z.abs(),Q=f.element(c(O,Ee,1,0)).z.abs(),Se=f.element(Ie).z,Ae=z.sub(E).mul(d(.5)),K=Q.sub(q).mul(d(.5)),Z=Ae.mul(Ae).add(K.mul(K)).sqrt().max(d(1e-5)),me=f.element(Ie);f.element(Ie).assign(F(me.x.add(K.div(Z).mul(Se).mul(L).mul(M)),me.y.add(Ae.div(Z).negate().mul(Se).mul(L).mul(M)),me.z,d(0)))})().compute(l,[256]),Re=Ne(()=>{let Ie=kt,Ee=Ie.mod(r).toInt(),O=Ie.div(r).toInt(),E=Ee.toFloat(),z=O.toFloat(),q=b.element(Ie).x,Q=f.element(Ie),Se=E.lessThan(d(.5)).or(b.element(c(O,Ee,0,-1)).x.lessThan(d(.5))),Ae=E.greaterThan(d(i-1.5)).or(b.element(c(O,Ee,0,1)).x.lessThan(d(.5))),K=z.lessThan(d(.5)).or(b.element(c(O,Ee,-1,0)).x.lessThan(d(.5))),Z=z.greaterThan(d(i-1.5)).or(b.element(c(O,Ee,1,0)).x.lessThan(d(.5))),me=Se.select(Q.x.negate(),f.element(c(O,Ee,0,-1)).x),Ze=Ae.select(Q.x.negate(),f.element(c(O,Ee,0,1)).x),Be=K.select(Q.y.negate(),f.element(c(O,Ee,-1,0)).y),Je=Z.select(Q.y.negate(),f.element(c(O,Ee,1,0)).y),gt=Ze.sub(me).add(Je.sub(Be)).mul(d(.5)).mul(q),xt=x.element(Ie).x.mul(d(Xq)).mul(q);x.element(Ie).assign(F(xt,gt,d(0),d(0)))})().compute(l,[256]),Y=Ne(()=>{let Ie=kt,Ee=Ie.mod(r).toInt(),O=Ie.div(r).toInt(),E=x.element(c(O,Ee,0,-1)).x,z=x.element(c(O,Ee,0,1)).x,q=x.element(c(O,Ee,-1,0)).x,Q=x.element(c(O,Ee,1,0)).x,Se=x.element(Ie).y;x.element(Ie).assign(F(E.add(z).add(q).add(Q).sub(Se).mul(d(.25)),Se,d(0),d(0)))})().compute(l,[256]),ye=Ne(()=>{let Ie=kt,Ee=Ie.mod(r).toInt(),O=Ie.div(r).toInt(),E=x.element(c(O,Ee,0,-1)).x,z=x.element(c(O,Ee,0,1)).x,q=x.element(c(O,Ee,-1,0)).x,Q=x.element(c(O,Ee,1,0)).x,Se=f.element(Ie);f.element(Ie).assign(F(Se.x.sub(z.sub(E).mul(d(.5))),Se.y.sub(Q.sub(q).mul(d(.5))),Se.z,d(0)))})().compute(l,[256]),Me=Ne(()=>{let Ie=kt,Ee=Ie.mod(r),O=Ie.div(r),E=f.element(Ie),z=Ee.toFloat().sub(E.x.mul(M)).clamp(d(0),d(i-1)),q=O.toFloat().sub(E.y.mul(M)).clamp(d(0),d(i-1)),Q=Ht(z).clamp(d(0),d(i-2)),Se=Ht(q).clamp(d(0),d(i-2)),Ae=z.sub(Q),K=q.sub(Se),Z=Q.toInt(),me=Se.toInt(),Ze=f.element(me.mul(o).add(Z)),Be=f.element(me.mul(o).add(Z.add(Tt(1)))),Je=f.element(me.add(Tt(1)).mul(o).add(Z)),gt=f.element(me.add(Tt(1)).mul(o).add(Z.add(Tt(1)))),xt=d(1).add(d(Yq).mul(M)),Dt=b.element(Ie).x;m.element(Ie).assign(F(ve(ve(Ze.x,Be.x,Ae),ve(Je.x,gt.x,Ae),K).div(xt).mul(Dt),ve(ve(Ze.y,Be.y,Ae),ve(Je.y,gt.y,Ae),K).div(xt).mul(Dt),d(0),d(0)))})().compute(l,[256]),Le=Ne(()=>{let Ie=m.element(kt);f.element(kt).assign(F(Ie.x,Ie.y,d(0),d(0)))})().compute(l,[256]),Ye=Ne(()=>{let Ie=kt,Ee=Ie.mod(r),O=Ie.div(r),E=f.element(Ie),z=Ee.toFloat().sub(E.x.mul(M)).clamp(d(0),d(i-1)),q=O.toFloat().sub(E.y.mul(M)).clamp(d(0),d(i-1)),Q=Ht(z).clamp(d(0),d(i-2)),Se=Ht(q).clamp(d(0),d(i-2)),Ae=z.sub(Q),K=q.sub(Se),Z=Q.toInt(),me=Se.toInt(),Ze=g.element(me.mul(o).add(Z)),Be=g.element(me.mul(o).add(Z.add(Tt(1)))),Je=g.element(me.add(Tt(1)).mul(o).add(Z)),gt=g.element(me.add(Tt(1)).mul(o).add(Z.add(Tt(1)))),xt=ve(ve(Ze.x,Be.x,Ae),ve(Je.x,gt.x,Ae),K),Dt=ve(ve(Ze.y,Be.y,Ae),ve(Je.y,gt.y,Ae),K),se=d(1).add(D.mul(M)),st=b.element(Ie).x;y.element(Ie).assign(F(xt.div(se).max(d(0)).mul(st),Dt.add(M.mul(d(.4)).mul(W)).min(d(1)),d(0),d(0)))})().compute(l,[256]),tt=Ne(()=>{let Ie=y.element(kt);g.element(kt).assign(F(Ie.x,Ie.y,d(0),d(0)))})().compute(l,[256]),et=Ne(()=>{let Ie=kt,Ee=Ie.mod(r),O=Ie.div(r),E=g.element(Ie);$n(_,Mn(Ee,O),F(E.x,E.y,d(0),d(0))).toWriteOnly()})().compute(l,[256]),Qe=Date.now(),nt=.5,J=.5;return{outputs:{smokeTexture:v},getComputeNodes:Ie=>{let Ee=Date.now(),O=Math.min((Ee-Qe)/1e3,.033);if(Qe=Ee,O<.001)return null;let E=(ot,Vt)=>{let Lt=s[ot];if(!Lt)return Vt;if(typeof Lt.getCpuValue=="function"){let Rn=Lt.getCpuValue();return typeof Rn=="number"?Rn:Vt}let zn=Lt.uniform?.value;return typeof zn=="number"?zn:Vt},z=E("speed",2),q=E("direction",0)*Math.PI/180,Q=Math.min(89*Math.PI/180,E("spread",60)*Math.PI/360),Se=s.center.uniform.value,Ae=typeof Se=="object"?Se.x??.5:.5,K=typeof Se=="object"?Se.y??.5:.5,Z=typeof window<"u"&&n?.domElement?n.domElement.width/Math.max(1,n.domElement.height):1;M.value=O,$.value=Ae,ie.value=1-K,xe.value=E("scale",1),he.value=Z;let me=s.emitFrom?.uniform?.value,Ze=typeof me=="object"?me.x??.5:.5,Be=typeof me=="object"?me.y??.5:.5;T.value=Ze*i,w.value=(1-Be)*i;let Je=z*i*.15;S.value=Math.sin(q)*Je,A.value=-Math.cos(q)*Je,I.value=Math.cos(q),N.value=Math.sin(q),P.value=Math.tan(Q),B.value=E("emitRadius",.03)*i,U.value=E("intensity",.8),D.value=E("dissipation",.5),L.value=E("detail",30),k.value=E("gravity",.5),W.value=E("colorDecay",1);let gt=E("mouseInfluence",.5),xt=E("mouseRadius",.12),Dt=Ie?.pointer?.x??nt,se=Ie?.pointer?.y??J,st=Dt-nt,De=se-J;nt=Dt,J=se;let dt=Math.sqrt(st*st+De*De),Et=xt*i;Te.value=Et*Et,dt>5e-4&&gt>0?(Pe.value=Dt*i,Ge.value=se*i,He.value=st*i*15*gt,oe.value=De*i*15*gt,be.value=1):be.value=0,n.compute(Fe),n.compute(ze),n.compute(fe),n.compute(Xe),n.compute(Re);for(let ot=0;ot<qq;ot++)n.compute(Y);return n.compute(ye),n.compute(Me),n.compute(Le),n.compute(Ye),n.compute(tt),[et]}}},fragmentNode:({uniforms:s,onBeforeRender:e,onCleanup:t,computeOutputs:n})=>{let i=s.shapeSdfUrl.uniform.value,r=(()=>{let b=s.shape.uniform.value;try{return JSON.parse(b)}catch{return{type:"circleSDF",radius:.35}}})(),o;i?o=$r(i,e,t):o=qr(s.shapeType.uniform.value||r.type||"circleSDF",r,s.shape,e);let a,l=n?.smokeTexture?Uw:JF;if(n?.smokeTexture)a=hn(n.smokeTexture);else{let b=JF,v=b*b,_=new Float32Array(v*4),M=new Qn(_,b,b,Hn,en);M.magFilter=Yt,M.minFilter=Yt,M.needsUpdate=!0,a=hn(M);let T=(S,A)=>{let I=s[S];if(!I)return A;if(typeof I.getCpuValue=="function"){let P=I.getCpuValue();return typeof P=="number"?P:A}let N=I.uniform?.value;return typeof N=="number"?N:A},w=Date.now();e(()=>{let S=Date.now(),A=Math.min((S-w)/1e3,.033);if(w=S,A<.001)return;let I=T("intensity",.8),N=T("dissipation",.5),P=s.emitFrom?.uniform?.value,B=(typeof P=="object"?P.x??.5:.5)*b,U=(1-(typeof P=="object"?P.y??.5:.5))*b,D=T("emitRadius",.03)*b;for(let L=0;L<b;L++)for(let k=0;k<b;k++){let W=L*b+k,$=k+.5-B,ie=L+.5-U,xe=Math.exp(-($*$+ie*ie)/Math.max(1,D*D));_[W*4]=Math.max(0,(_[W*4]+I*xe*A*8)/(1+N*A)),_[W*4+1]=Math.min(1,_[W*4+1]+A*.4*T("colorDecay",1))}M.needsUpdate=!0}),t(()=>{M.dispose()})}let c=H,u=X.x.div(X.y),h=R(s.center.uniform.x,s.center.uniform.y.oneMinus()),p=s.scale.uniform,f=R(c.x.sub(h.x).mul(u).div(p).add(d(.5)),c.y.sub(h.y).div(p).add(d(.5))),m=o(f).x.negate().mul(d(l*4)).clamp(d(0),d(1)),g,y;if(n?.smokeTexture){let b=d(1/Uw),v=a.sample(H),_=a.sample(H.add(R(b,d(0)))),M=a.sample(H.add(R(d(0),b))),T=a.sample(H.add(R(b.negate(),d(0)))),w=a.sample(H.add(R(d(0),b.negate())));g=v.x.mul(d(.5)).add(_.x.mul(d(.125))).add(M.x.mul(d(.125))).add(T.x.mul(d(.125))).add(w.x.mul(d(.125))),y=v.y.mul(d(.5)).add(_.y.mul(d(.125))).add(M.y.mul(d(.125))).add(T.y.mul(d(.125))).add(w.y.mul(d(.125)))}else{let b=a.sample(H);g=b.x,y=b.y}let x=wt(s.colorA.uniform,s.colorB.uniform,y,s.colorSpace.uniform.value);return F(x.x,x.y,x.z,x.w.mul(g).mul(m))}};var eU={name:"Solarize",category:"Adjustments",description:"Inverts tones above a luminance threshold \u2014 a classic darkroom and photo effect",requiresChild:!0,props:{threshold:{default:.5,description:"Luminance level above which colors are inverted. Pixels brighter than this threshold get flipped.",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Threshold",group:"Effect"}},strength:{default:1,description:"Blend between original (0) and fully solarized (1)",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Strength",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return console.error("You must pass a child component into the Solarize shader."),F(0);let t=s.threshold.uniform,n=s.strength.uniform,i=Nt(e.rgb,de(.299,.587,.114)),r=de(1).sub(e.rgb),o=i.greaterThan(t).select(r,e.rgb);return F(ve(e.rgb,o,n),e.a)}};var tU={name:"SolidColor",category:"Textures",description:"Fill the canvas with a single solid color",props:{color:{default:"#5b18ca",transform:_e,description:"The solid color to display",ui:{type:"color",label:"Color",group:"Colors"}}},fragmentNode:({uniforms:s})=>s.color.uniform};var nU={name:"Spherize",category:"Distortions",description:"Map content onto a 3D sphere surface with depth distortion",requiresRTT:!0,requiresChild:!0,props:{radius:{default:1,description:"Radius of the sphere (1 = half viewport height)",ui:{type:["range","map"],min:.1,max:3,step:.1,label:"Radius",group:"Effect"}},depth:{default:1,description:"How much the sphere bulges toward viewer (0 = flat, higher = more bulge)",ui:{type:["range","map"],min:0,max:3,step:.1,label:"Depth",group:"Effect"}},center:{default:{x:.5,y:.5},transform:ft,description:"The center point of the sphere",ui:{type:"position",label:"Center",group:"Position"}},lightPosition:{default:{x:.3,y:.3},transform:ft,description:"Position of the specular light source",ui:{type:"position",label:"Light Position",group:"Position"}},lightIntensity:{default:.5,description:"Intensity of the rim light (0 = off)",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Light Intensity",group:"Effect"}},lightSoftness:{default:.5,description:"Softness of the rim light falloff (0 = hard edge, 1 = soft glow)",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Light Softness",group:"Effect"}},lightColor:{default:"#ffffff",transform:_e,description:"Color of the specular highlight",ui:{type:"color",label:"Light Color",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=H,r=X.x.div(X.y),o=R(s.center.uniform.x,s.center.uniform.y.oneMinus()),a=s.radius.uniform,l=R(i.x.sub(o.x).mul(r),i.y.sub(o.y)).mul(2).div(a),c=l.x.mul(l.x).add(l.y.mul(l.y)),u=d(1).sub(we(d(.98),d(1),c)),h=yn(St(d(0),d(1).sub(c))),p=d(1).add(h.mul(s.depth.uniform)),f=l.div(p).mul(a).div(2),m=R(f.x.div(r).add(o.x),f.y.add(o.y)),g=It(n.sample(m)),y=R(s.lightPosition.uniform.x,s.lightPosition.uniform.y.oneMinus()),x=s.lightIntensity.uniform,b=s.lightSoftness.uniform,v=de(s.lightColor.uniform.x,s.lightColor.uniform.y,s.lightColor.uniform.z),_=xr(de(l.x,l.y,h)),M=de(0,0,1),T=d(1).add(d(4).mul(d(1).sub(b))),w=Pt(d(1).sub(St(Nt(_,M),d(0))),T),S=R(y.x.sub(d(.5)).mul(2),y.y.sub(d(.5)).mul(2)),A=xr(R(_.x,_.y).add(R(1e-4,1e-4))),I=xr(S.add(R(1e-4,1e-4))),N=Pt(St(d(0),Nt(A,I)),d(2)),P=w.mul(N).mul(x).mul(d(2));return F(g.x.add(v.x.mul(P)),g.y.add(v.y.mul(P)),g.z.add(v.z.mul(P)),g.w.mul(u))}};var sU={name:"Spiral",category:"Textures",description:"Rotating spiral pattern with animated movement",props:{colorA:{default:"#000000",transform:_e,description:"Background color",ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#ffffff",transform:_e,description:"Spiral stroke color",ui:{type:"color",label:"Color B",group:"Colors"}},strokeWidth:{default:.5,description:"Thickness of spiral stroke",ui:{type:["range","map"],min:0,max:2,step:.1,label:"Stroke Width",group:"Effect"}},strokeFalloff:{default:0,description:"Stroke losing width further from center",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Stroke Falloff",group:"Effect"}},softness:{default:0,description:"Color transition sharpness (0 = hard edge, 1 = smooth fade)",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Softness",group:"Effect"}},speed:{default:1,description:"Animation speed (negative values reverse direction)",ui:{type:"range",min:-3,max:3,step:.1,label:"Speed",group:"Animation"}},center:{default:{x:.5,y:.5},transform:ft,description:"The center point of the spiral",ui:{type:"position",label:"Center",group:"Position"}},scale:{default:1,description:"Scale factor for spiral bands (higher = more bands, lower = fewer bands)",ui:{type:["range","map"],min:.1,max:5,step:.1,label:"Scale",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=X.x.div(X.y),i=R(t.x.mul(n),t.y),r=R(e.center.uniform.x.mul(n),e.center.uniform.y.oneMinus()),o=i.sub(r),a=cn(s,e.speed),l=In(o),c=l,u=Jn(o.y,o.x).sub(a),h=d(6.283185307),p=u.div(h),f=c.mul(e.scale.uniform).add(p),m=bt(ct(f).sub(.5)).mul(2),g=ht(e.strokeWidth.uniform,e.strokeFalloff.uniform.mul(.005),1),y=ht(e.strokeFalloff.uniform,0,1).mul(l).oneMinus(),x=g.mul(y),b=zs(f),v=ve(d(4).sub(we(.05,.4,e.strokeWidth.uniform.mul(2)).mul(we(.05,.4,e.strokeWidth.uniform.oneMinus().mul(2))).mul(3)).mul(b),zs(m),ht(b,0,1)),_=we(x.sub(v).sub(e.softness.uniform),x.add(v).add(e.softness.uniform),m),M=wt(e.colorA.uniform,e.colorB.uniform,_,e.colorSpace.uniform.value);return F(M.rgb,M.a)}};var jq=s=>({outside:0,center:1,inside:2})[s?.toLowerCase()]??1,iU={name:"Star",category:"Shapes",description:"Classic star polygon with straight sides and sharp pointed tips",props:{color:{default:"#ffffff",transform:_e,description:"Fill color of the star",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the star",ui:{type:"position",label:"Center",group:"Position"}},radius:{default:.4,description:"Outer tip radius \u2014 distance from center to the pointed tips",ui:{type:"range",min:0,max:1,step:.01,label:"Radius",group:"Shape"}},sides:{default:5,description:"Number of points on the star",ui:{type:"range",min:3,max:12,step:1,label:"Points",group:"Shape"}},innerRatio:{default:.4,description:"Inner vertex radius as a ratio of outer radius (0.382 = golden-ratio 5-star)",ui:{type:"range",min:.1,max:.9,step:.01,label:"Inner Ratio",group:"Shape"}},rotation:{default:0,description:"Rotation in degrees",ui:{type:"range",min:0,max:360,step:1,label:"Rotation",group:"Shape"}},softness:{default:0,description:"Edge softness for antialiasing",ui:{type:"range",min:0,max:.1,step:.001,label:"Softness",group:"Effect"}},strokeThickness:{default:0,description:"Stroke thickness. Zero means no stroke.",ui:{type:"range",min:0,max:.2,step:.005,label:"Stroke Thickness",group:"Stroke"}},strokeColor:{default:"#000000",transform:_e,description:"Color of the stroke outline",ui:{type:"color",label:"Stroke Color",group:"Colors"}},strokePosition:{default:"center",transform:jq,description:"Position of the stroke relative to the shape edge",ui:{type:"select",options:[{label:"Outside",value:"outside"},{label:"Center",value:"center"},{label:"Inside",value:"inside"}],label:"Stroke Position",group:"Stroke"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for blending fill and stroke colors",ui:{type:"select",options:Ft,label:"Color Blending",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=n.x.sub(i.x),o=n.y.sub(i.y),a=s.rotation.uniform.mul(d(Math.PI/180)),l=ke(a),c=ue(a),u=bw(r.mul(l).add(o.mul(c)),o.mul(l).sub(r.mul(c)),s.radius.uniform,s.sides.uniform,s.innerRatio.uniform),h=s.softness.uniform,p=s.strokeThickness.uniform,f=s.strokePosition.uniform,m=p.greaterThan(d(0)),g=f.greaterThanEqual(d(.5)).and(f.lessThan(d(1.5))),y=f.greaterThanEqual(d(1.5)),x=p.mul(.5),b=y.select(p.negate(),g.select(x.negate(),d(0))),v=y.select(d(0),g.select(x,p)),_=we(v.sub(h),v,u).oneMinus(),M=m.select(we(b.sub(h),b,u),d(0)),T=wt(F(s.color.uniform.rgb,s.color.uniform.a),F(s.strokeColor.uniform.rgb,s.strokeColor.uniform.a),M,s.colorSpace.uniform.value);return F(T.xyz,T.w.mul(_))}};var rU={name:"Strands",category:"Textures",description:"Procedural wavy strands with layered animation",requiresRTT:!1,requiresChild:!1,props:{speed:{default:.5,description:"Overall animation speed",ui:{type:"range",min:0,max:1,step:.1,label:"Speed",group:"Animation"}},amplitude:{default:1,description:"Wave height amplitude",ui:{type:["range","map"],min:0,max:5,step:.1,label:"Amplitude",group:"Effect"}},frequency:{default:1,description:"Wave frequency",ui:{type:["range","map"],min:0,max:5,step:.1,label:"Frequency",group:"Effect"}},lineCount:{default:12,description:"Number of wave lines",ui:{type:"range",min:4,max:32,step:1,label:"Line Count",group:"Effect"}},lineWidth:{default:.1,description:"Width of wave lines",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Line Width",group:"Effect"}},waveColor:{default:"#f1c907",transform:_e,description:"Color of the waves",ui:{type:"color",label:"Wave Color",group:"Colors"}},pinEdges:{default:!0,description:"Pin waves at edges (fade effect)",ui:{type:"checkbox",label:"Pin Edges",group:"Effect"}},start:{default:{x:0,y:.5},transform:ft,description:"Starting point of the waves",ui:{type:"position",label:"Start",group:"Position"}},end:{default:{x:1,y:.5},transform:ft,description:"Ending point of the waves",ui:{type:"position",label:"End",group:"Position"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=cn(s,e.speed),i=Ne(([r])=>ke(r).add(ke(r.mul(1.2).add(1.6))).add(ke(r.mul(1.4).add(1.5))).div(3));return Ne(([r])=>{let o=X.x.div(X.y),a=R(e.start.uniform.x.mul(o),e.start.uniform.y.oneMinus()),l=R(e.end.uniform.x.mul(o),e.end.uniform.y.oneMinus()),c=R(r.x.mul(o),r.y),u=l.sub(a),h=u.length(),p=u.div(h),f=R(p.y.negate(),p.x),m=c.sub(a),g=m.dot(p).div(h),y=m.dot(f),x=g.mul(10),b=y.mul(10),v=e.pinEdges.uniform.select(we(d(0),d(.1),g).mul(we(d(.9),d(1),g).oneMinus()),d(1)),_=e.pinEdges.uniform.select(ke(g.mul(6.28)).mul(.5).add(.5).oneMinus(),d(1)),M=ke(g.mul(6.28)).mul(.5).add(.5).oneMinus(),T=F(0,0,0,0).toVar(),w=e.lineCount.uniform;for(let S=0;S<32;S++){let A=d(S).lessThan(w),I=d(S),N=I.div(w),P=d(.5),B=d(1.33),U=n.mul(B),D=I.add(x.mul(P)),L=i(D.add(U)).mul(.5).add(.5),k=ve(d(.01),e.lineWidth.uniform,L.mul(_)).mul(.5),W=d(.6),$=d(2),ie=i(D.add(U.mul(N.add(1)))).mul(ve(W,$,_)).mul(e.amplitude.uniform),xe=i(x.mul(e.frequency.uniform).add(n)).mul(_).mul(e.amplitude.uniform).add(ie),he=bt(b.sub(xe)),Pe=d(.01),Ge=we(k.sub(Pe),k.add(Pe),he).oneMinus(),He=F(e.waveColor.uniform.r,e.waveColor.uniform.g,e.waveColor.uniform.b,Ge).mul(L);T.assign(St(T,A.select(He,F(0,0,0,0))))}return T.mul(F(1,1,1,M.mul(v)))})(t)}};var oU={name:"Stretch",category:"Distortions",description:"Stretch content towards a direction from a center point",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"The center point of the stretch effect",ui:{type:"position",label:"Center",group:"Position"}},strength:{default:1,description:"The intensity of the stretch effect",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Strength",group:"Effect"}},angle:{default:0,description:"The direction of the stretch in degrees",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},falloff:{default:0,description:"Controls the sharpness of the transition (0 = sharp edge, 1 = gradual transition)",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Falloff",group:"Effect"}},edges:{default:"stretch",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=X.x.div(X.y),r=R(H.x.mul(i),H.y),o=R(s.center.uniform.x.mul(i),s.center.uniform.y.oneMinus()),a=r.sub(o),l=s.angle.uniform.mul(Math.PI/180),c=R(ke(l),ue(l)),u=a.dot(c),h=c.mul(u),p=a.sub(h),f=s.falloff.uniform,m=ve(d(.001),d(75),f),g=ht(u.div(m),d(0),d(1)),y=s.strength.uniform.mul(d(100)),x=d(1).add(y.mul(g)),b=u.div(x),v=c.mul(b).add(p),_=o.add(v),M=R(_.x.div(i),_.y);return It(En(M,n.sample(M),n,s.edges.uniform.value))}};var aU={name:"Stripes",category:"Textures",description:"Alternating colored stripes with animation",props:{colorA:{default:"#000000",transform:_e,description:"First stripe color",ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#ffffff",transform:_e,description:"Second stripe color",ui:{type:"color",label:"Color B",group:"Colors"}},angle:{default:45,transform:cs,description:"Angle of stripes in degrees",ui:{type:["range","map"],min:-180,max:180,step:1,label:"Angle",group:"Effect"}},density:{default:5,description:"Number of stripe pairs visible",ui:{type:["range","map"],min:1,max:30,step:1,label:"Density",group:"Effect"}},balance:{default:.5,description:"Ratio of the two colors",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Balance",group:"Effect"}},softness:{default:0,description:"Edge softness",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Softness",group:"Effect"}},speed:{default:.2,description:"Animation speed",ui:{type:"range",min:-1,max:1,step:.1,label:"Speed",group:"Animation"}},offset:{default:0,description:"Phase offset for pattern positioning",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Offset",group:"Animation"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=X.x.div(X.y),i=R(t.x.mul(n),t.y),r=e.angle.uniform.mul(.0174533),o=ke(r),a=ue(r),l=i.x.mul(o).add(i.y.mul(a)),c=cn(s,e.speed),u=l.mul(e.density.uniform).add(c).add(e.offset.uniform),h=ct(u),p=zs(u),f=e.balance.uniform,m=e.softness.uniform,g=we(f.sub(m).sub(p),f.add(m).add(p),h),y=wt(e.colorA.uniform,e.colorB.uniform,g,e.colorSpace.uniform.value);return F(y.rgb,y.a)}};var lU={name:"StudioBackground",category:"Textures",description:"Multi-light studio background with ambient motion.",props:{color:{default:"#d8dbec",transform:_e,description:"Base studio surface color",ui:{type:"color",label:"Surface Color",group:"Colors"}},keyColor:{default:"#d5e4ea",transform:_e,description:"Color of the overhead key light",ui:{type:"color",label:"Key Color",group:"Key Light"}},keyIntensity:{default:40,description:"Intensity of the key light",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Key Light"}},keySoftness:{default:50,description:"How diffuse the key light is",ui:{type:["range","map"],min:0,max:100,step:1,label:"Softness",group:"Key Light"}},fillColor:{default:"#d5e4ea",transform:_e,description:"Color of the side fill lights",ui:{type:"color",label:"Fill Color",group:"Fill Lights"}},fillIntensity:{default:10,description:"Intensity of the fill lights",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Fill Lights"}},fillSoftness:{default:70,description:"How diffuse the fill lights are",ui:{type:["range","map"],min:0,max:100,step:1,label:"Softness",group:"Fill Lights"}},fillAngle:{default:70,description:"How far apart the fill lights are from center",ui:{type:["range","map"],min:0,max:100,step:1,label:"Spread",group:"Fill Lights"}},backColor:{default:"#c8d4e8",transform:_e,description:"Color of the upward back wash",ui:{type:"color",label:"Back Color",group:"Back Light"}},backIntensity:{default:20,description:"Intensity of the back wash",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Back Light"}},backSoftness:{default:80,description:"How diffuse the back wash is",ui:{type:["range","map"],min:0,max:100,step:1,label:"Softness",group:"Back Light"}},brightness:{default:20,description:"Overall ambient light level",ui:{type:["range","map"],min:0,max:100,step:1,label:"Ambient",group:"Lighting"}},vignette:{default:0,description:"Edge darkening",ui:{type:["range","map"],min:0,max:100,step:1,label:"Vignette",group:"Lighting"}},center:{default:{x:.5,y:.8},transform:ft,description:"Where the spotlight meets the floor",ui:{type:"position",label:"Stage Center",group:"Scene"}},lightTarget:{default:100,description:"How far toward the floor vs wall the spotlights aim",ui:{type:["range","map"],min:0,max:100,step:1,label:"Light Depth",group:"Scene"}},wallCurvature:{default:10,description:"How rounded the cove is",ui:{type:["range","map"],min:0,max:100,step:1,label:"Wall Curvature",group:"Scene"}},ambientIntensity:{default:50,description:"Intensity of drifting ambient lights",ui:{type:["range","map"],min:0,max:100,step:1,label:"Ambient Detail",group:"Environment"}},ambientSpeed:{default:2,description:"Drift speed",ui:{type:"range",min:-5,max:5,step:.1,label:"Speed",group:"Environment"}},seed:{default:0,description:"Seed for ambient pattern",ui:{type:"range",min:0,max:100,step:1,label:"Seed",group:"Environment"}}},fragmentNode:s=>{let{uniforms:e}=s,t=e.color.uniform,n=e.brightness.uniform.mul(.02),i=e.keyColor.uniform,r=e.keyIntensity.uniform.mul(.015),o=e.fillColor.uniform,a=e.fillIntensity.uniform.mul(.015),l=e.fillAngle.uniform.mul(.005),c=e.backColor.uniform,u=e.backIntensity.uniform.mul(.015),h=e.center.uniform.x,p=e.center.uniform.y.oneMinus(),f=e.lightTarget.uniform.mul(.01),m=e.wallCurvature.uniform.mul(.01),g=e.vignette.uniform.mul(.025),y=e.ambientIntensity.uniform.mul(.012),x=e.seed.uniform,b=X.x.div(X.y),v=cn(s,e.ambientSpeed),_=ve(d(5),d(.8),e.keySoftness.uniform.mul(.01)),M=ve(d(5),d(.8),e.fillSoftness.uniform.mul(.01)),T=ve(d(5),d(.8),e.backSoftness.uniform.mul(.01)),w=A=>ct(ue(A.mul(12.9898)).mul(43758.5453)),S=Array.from({length:4},(A,I)=>{let N=x.add(d(I*73.1)),P=w(N.add(311)).mul(.12).add(.1);return{radiusX:w(N).mul(.5).add(.2),radiusY:w(N.add(37)).mul(.25).add(.1),freqX:w(N.add(91)).mul(.3).add(.1),freqY:w(N.add(143)).mul(.25).add(.08),phaseX:w(N.add(200)).mul(Math.PI*2),phaseY:w(N.add(257)).mul(Math.PI*2),sizeSq:P.mul(P)}});return Ne(()=>{let A=H,I=ve(d(.015),d(.15),m),N=we(p.sub(I),p.add(I),A.y),P=d(1).sub(N),B=ht(A.y.div(p),0,1),U=B.mul(B),D=ht(A.y.sub(p).div(d(1).sub(p)),0,1),L=A.x.sub(h).mul(b),k=ve(d(.05),d(.45),U),W=d(1).sub(B).mul(1.2),$=W.mul(W),ie=p.add(d(1).sub(p).mul(.3)),xe=A.y.sub(ie).mul(4),he=xe.mul(xe),Pe=ve(ve(d(.2),d(.4),B),ve(d(.38),d(.18),D),N).mul(n),Ge=A.y.sub(p).div(I.add(.001)),He=Ni(Ge.mul(Ge).mul(-.5)).mul(m).mul(n).mul(.1),oe=Pe.add(He),be=de(oe,oe,oe).toVar(),Te=d(1).sub(f).mul(1.4).add(.3),Fe=f.mul(1.4).add(.3),ze=(Q,Se)=>{let Ae=ve(Q,h,U),K=A.x.sub(Ae).mul(b).div(k),Z=Ni(K.mul(K).add($).mul(-1).mul(Se)).mul(P).mul(Te),me=ve(h,Q,d(.25)),Ze=A.x.sub(me).mul(b).mul(1.4),Be=Ni(Ze.mul(Ze).add(he).mul(-1).mul(Se.mul(1.5))).mul(N).mul(Fe);return Z.add(Be)},fe=ze(h,_).mul(r);be.assign(be.add(i.rgb.mul(fe)));let Xe=ze(h.sub(l),M).mul(a),Re=ze(h.add(l),M).mul(a);be.assign(be.add(o.rgb.mul(Xe.add(Re))));let Y=ve(d(1),p,d(.15)),ye=L.mul(.5),Me=A.y.sub(Y).mul(4),Le=Ni(ye.mul(ye).add(Me.mul(Me)).mul(-1).mul(T)).mul(N),Ye=L.mul(.6),tt=p.sub(A.y).mul(3),et=Ni(Ye.mul(Ye).add(tt.mul(tt)).mul(-1).mul(T.mul(.8))).mul(P).mul(U),Qe=Le.add(et).mul(u);be.assign(be.add(c.rgb.mul(Qe)));let nt=L.mul(.7),J=A.y.sub(p).add(.02).mul(10),Ie=Ni(nt.mul(nt).add(J.mul(J)).mul(-2.5)).mul(r.mul(.12)).mul(P);be.assign(be.add(de(Ie,Ie,Ie)));let Ee=y.mul(.25);for(let Q=0;Q<4;Q++){let Se=S[Q],Ae=h.add(ue(v.mul(Se.freqX).add(Se.phaseX)).mul(Se.radiusX)),K=p.sub(.2).add(ke(v.mul(Se.freqY).add(Se.phaseY)).mul(Se.radiusY)),Z=A.x.sub(Ae).mul(b),me=A.y.sub(K),Ze=Ni(Z.mul(Z).add(me.mul(me)).div(Se.sizeSq).mul(-.5)).mul(Ee);be.assign(be.add(de(Ze,Ze,Ze)))}let O=A.x.sub(.5).mul(b),E=A.y.sub(.5),z=O.mul(O).add(E.mul(E)),q=ht(d(1).sub(z.mul(g)),0,1);return be.assign(ht(be,0,3)),F(t.rgb.mul(be).mul(q).clamp(0,1),d(1))})()}};var cU={name:"SunBurst",category:"Textures",description:"Radial sunburst rays emanating from a center point",props:{color:{default:"#ffdd88",transform:_e,description:"Ray color",ui:{type:"color",label:"Color",group:"Colors"}},background:{default:"#000000",transform:_e,description:"Background color",ui:{type:"color",label:"Background",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center point of the sunburst",ui:{type:"position",label:"Center",group:"Position"}},rayCount:{default:12,description:"Number of rays",ui:{type:"range",min:3,max:64,step:1,label:"Ray Count",group:"Effect"}},softness:{default:.3,description:"Softness of ray edges",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Softness",group:"Effect"}},radius:{default:.8,description:"How far the rays extend from the center",ui:{type:["range","map"],min:0,max:1.2,step:.01,label:"Radius",group:"Effect"}},feather:{default:.5,description:"How gradually the rays fade at their outer edge",ui:{type:["range","map"],min:0,max:5,step:.01,label:"Feather",group:"Effect"}},speed:{default:.2,description:"Rotation speed \u2014 positive values rotate clockwise",ui:{type:"range",min:-2,max:2,step:.1,label:"Speed",group:"Animation"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=X.x.div(X.y),i=e.center.uniform.x,r=e.center.uniform.y.oneMinus(),o=t.x.mul(n).sub(i.mul(n)),a=t.y.sub(r),l=yn(o.mul(o).add(a.mul(a))),c=Jn(a,o),u=cn(s,e.speed),h=e.rayCount.uniform,p=Pt(ue(c.mul(h).sub(u)).mul(.5).add(.5),d(1).div(e.softness.uniform.add(d(.05))).mul(d(.3))),f=e.radius.uniform,m=e.feather.uniform,g=f.mul(d(1).sub(m)),y=d(1).sub(we(g,f,l)),x=p.mul(y),b=e.color.uniform,v=e.background.uniform;return F(ve(v.rgb,b.rgb,x),ve(v.a,b.a,x))}};var uU={name:"Swirl",category:"Textures",description:"Flowing swirl pattern with multi-layered noise",props:{colorA:{default:"#1275d8",description:"Primary gradient color",transform:_e,ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#e19136",description:"Secondary gradient color",transform:_e,ui:{type:"color",label:"Color B",group:"Colors"}},speed:{default:1,description:"Flow animation speed",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Animation"}},detail:{default:1,description:"Level of detail and intricacy in the swirl patterns",ui:{type:["range","map"],min:0,max:5,step:.1,label:"Detail",group:"Effect"}},blend:{default:50,description:"Skew color balance toward A (lower values) or B (higher values)",ui:{type:["range","map"],min:0,max:100,step:1,label:"Blend",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:s=>{let{uniforms:e}=s,t=cn(s,e.speed),n=e.detail.uniform,i=e.colorSpace.uniform.value;return Ne(()=>{let r=n,o=R(H.x.add(ue(H.y.mul(r.mul(1.7)).add(t.mul(.8))).mul(.12).add(ke(H.x.mul(r.mul(.9)).sub(t.mul(.5))).mul(.05))),H.y.add(ke(H.x.mul(r.mul(1.3)).sub(t.mul(.6))).mul(.12).add(ue(H.y.mul(r.mul(1.1)).add(t.mul(.7))).mul(.05)))).toVar(),a=ue(o.x.mul(r.mul(2.1)).add(o.y.mul(r.mul(1.8))).add(t.mul(.4))),l=n.mul(2.1),c=R(o.x.add(ke(o.y.mul(l.mul(2.7)).sub(t.mul(.45))).mul(.07).add(ue(o.x.mul(l.mul(1.9)).add(t.mul(.6))).mul(.04))),o.y.add(ue(o.x.mul(l.mul(2.3)).add(t.mul(.65))).mul(.07).add(ke(o.y.mul(l.mul(1.6)).sub(t.mul(.4))).mul(.04)))).toVar(),u=ke(c.x.mul(l.mul(1.4)).sub(c.y.mul(l.mul(1.9))).add(t.mul(.35))),h=n.mul(3.7),p=R(c.x.add(ue(c.y.mul(h.mul(1.8)).add(t.mul(.85))).mul(.04).add(ke(c.x.mul(h.mul(1.3)).sub(t.mul(.55))).mul(.025)).add(ue(c.x.add(c.y).mul(h.mul(.7)).add(t.mul(.9))).mul(.02))),c.y.add(ke(c.x.mul(h.mul(1.6)).sub(t.mul(.75))).mul(.04).add(ue(c.y.mul(h.mul(1.1)).add(t.mul(.5))).mul(.025)).add(ke(c.x.add(c.y).mul(h.mul(.8)).sub(t.mul(.95))).mul(.02)))).toVar(),f=ue(p.x.mul(h.mul(1.1)).add(p.y.mul(h.mul(1.5))).sub(t.mul(.55))),m=a.mul(.45).add(u.mul(.35)).add(f.mul(.2)).toVar(),g=e.blend.uniform.sub(50).mul(.006),y=we(.3,.7,m.mul(.5).add(.5).add(g)),x=wt(e.colorA.uniform,e.colorB.uniform,y,i),b=ue(t.mul(2.5).add(m.mul(8))).mul(.015).add(1),v=x.mul(b);return F(v.rgb,v.a)})()}};var Oy=Math.PI*2;function dU(s,e){let t=e.uniforms,n=ee(0),i=ee(0),r=()=>{let l=t.lightAngle.uniform.value*Math.PI/180;n.value=Math.cos(l),i.value=Math.sin(l)};r(),e.onBeforeRender(r);let o=cn(e,t.speed),a=t.mode.uniform.value;return Ne(()=>{let l=H,c=X.x.div(X.y),u=t.edgeSoftness.uniform.mul(d(.5)).max(d(.001)),h=R(t.center.uniform.x,t.center.uniform.y.oneMinus()),p=t.scale.uniform,f=R(l.x.sub(h.x).mul(c).div(p).add(d(.5)),l.y.sub(h.y).div(p).add(d(.5))),m=s(f).r,g=m.div(p),y=d(.01),x=s(f.add(R(y,d(0)))).r.sub(m).div(y),b=s(f.add(R(d(0),y))).r.sub(m).div(y),v=yn(x.mul(x).add(b.mul(b))).max(d(1e-4)),_=x.div(v),M=b.div(v),T=ht(g.negate().div(u).mul(d(32)),d(0),d(1)),w=t.rimWidth.uniform.mul(d(.1)).max(d(.001)),S=ht(g.negate().div(w),d(0),d(1)),A=d(1).sub(S).mul(d(1).sub(S)).mul(T),I=_.mul(n).add(M.mul(i)),N=M.mul(n).sub(_.mul(i)),P=o.mul(d(Oy)),B=I.mul(ke(P)).add(N.mul(ue(P))),U=t.hueShift.uniform.add(t.dispersion.uniform.mul(B)).add(t.thickness.uniform.mul(S).mul(d(2))),D;if(a==="custom"){let L=ct(U).mul(d(3)),k=ct(L),W=Ht(L),$=t.colorSpace.uniform.value,ie=wt(t.colorA.uniform,t.colorB.uniform,k,$),xe=wt(t.colorB.uniform,t.colorC.uniform,k,$),he=wt(t.colorC.uniform,t.colorA.uniform,k,$);he=ve(he,xe,ln(W,d(1.5))),he=ve(he,ie,ln(W,d(.5))),D=he.rgb}else D=de(ke(U.add(d(0)).mul(d(Oy))),ke(U.add(d(.3333)).mul(d(Oy))),ke(U.add(d(.6667)).mul(d(Oy)))).mul(d(.5)).add(d(.5));return F(ve(de(1),D,t.saturation.uniform).mul(A).mul(t.intensity.uniform),ht(A,d(0),d(1)))})()}var Zq=JSON.stringify({type:"circleSDF",radius:.35}),hU={name:"ThinFilm",category:"Shape Effects",description:"Iridescent thin-film edge",props:{center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the shape",ui:{type:"position",label:"Center",group:"Position"}},scale:{default:1,description:"Scale of the shape (1 = default size)",ui:{type:["range","map"],min:.1,max:3,step:.05,label:"Scale",group:"Position"}},intensity:{default:1,description:"Rim brightness \u2014 values above 1 push the edge past white for HDR bloom",ui:{type:["range","map"],min:0,max:4,step:.05,label:"Intensity",group:"Film"}},rimWidth:{default:1,description:"How far inward from the edge the iridescence reaches",ui:{type:["range","map"],min:0,max:3,step:.01,label:"Rim Width",group:"Film"}},edgeSoftness:{default:.3,description:"Softness of the shape boundary",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Edge Softness",group:"Film"}},thickness:{default:.5,description:"Film thickness \u2014 higher values pack more spectral bands across the rim",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Thickness",group:"Film"}},dispersion:{default:.5,description:"How strongly colour separates around the perimeter (warm vs cool sides)",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Dispersion",group:"Film"}},saturation:{default:1,description:"Spectral saturation \u2014 0 = white rim, 1 = full iridescence",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Saturation",group:"Film"}},hueShift:{default:0,description:"Rotate the spectrum to reposition the colours",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Hue Shift",group:"Film"}},lightAngle:{default:300,description:"Light angle in degrees \u2014 sets which side of the rim runs warm vs cool",ui:{type:"range",min:0,max:360,step:1,label:"Light Angle",group:"Film"}},mode:{default:"rainbow",compileTime:!0,description:"Rainbow uses the full iridescent spectrum; Custom cycles through your three chosen colours",ui:{type:"select",options:[{label:"Rainbow",value:"rainbow"},{label:"Custom",value:"custom"}],label:"Mode",group:"Colors"}},colorA:{default:"#2b6fff",transform:_e,description:"First colour in the rim cycle",ui:{type:"color",label:"Color 1",group:"Colors",condition:{mode:"custom"}}},colorB:{default:"#ffffff",transform:_e,description:"Second colour in the rim cycle",ui:{type:"color",label:"Color 2",group:"Colors",condition:{mode:"custom"}}},colorC:{default:"#ff7a21",transform:_e,description:"Third colour in the rim cycle",ui:{type:"color",label:"Color 3",group:"Colors",condition:{mode:"custom"}}},colorSpace:{default:"oklch",transform:Ut,compileTime:!0,description:"Colour space used to blend between custom colours",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors",condition:{mode:"custom"}}},speed:{default:.1,description:"Speed at which the colours rotate around the rim (0 = static)",ui:{type:"range",min:-1,max:1,step:.01,label:"Speed",group:"Animation"}},shape:{default:Zq,description:"Serialized shape configuration (JSON)",ui:{type:"shape",label:"Shape",group:"Shape"}},shapeSdfUrl:{default:"",compileTime:!0,description:"URL to a pre-generated SDF .bin file \u2014 when non-empty, activates SVG mode and triggers a shader recompile"},shapeType:{default:"",compileTime:!0,description:"Active SDF shape type \u2014 triggers recompile when shape is switched. When empty, derived from shape JSON at mount time."}},fragmentNode:s=>{let{uniforms:e,onCleanup:t,onBeforeRender:n}=s,i=e.shapeSdfUrl.uniform.value,r=(()=>{let o=e.shape.uniform.value;if(typeof o=="object"&&o!==null)return o;try{return JSON.parse(o)}catch{return{type:"circleSDF",radius:.35}}})();return dU(i?$r(i,n,t):qr(e.shapeType.uniform.value||r.type||"circleSDF",r,e.shape,n),s)}};var pU={name:"TiltShift",category:"Blurs",description:"Selective focus blur mimicking tilt-shift photography",requiresRTT:!0,requiresChild:!0,props:{intensity:{default:50,description:"Maximum blur intensity at edges",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Effect"}},width:{default:.3,description:"Width of the sharp focus area",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Width",group:"Effect"}},falloff:{default:.3,description:"Distance over which blur transitions to full strength",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Falloff",group:"Effect"}},angle:{default:0,transform:cs,description:"Rotation angle of the focus line (in degrees)",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center point of the focus line",ui:{type:"position",label:"Center",group:"Position"}}},computeNode:({childNode:s,onCleanup:e,dimensions:t,renderer:n,uniforms:i,onResize:r})=>{if(!s||i.angle.mapComputeInfo||i.width.mapComputeInfo||i.falloff.mapComputeInfo)return null;let o=_t(s);e(()=>{o?.renderTarget?.dispose&&o.renderTarget.dispose()});let a=n?.getPixelRatio?.()??1,l=Math.round(t.width*a),c=Math.round(t.height*a),u=Ia(o,l,c,e,14),{computeNodes:h,outputTexture:p,blurMapWriteNode:f,computeWidth:m,computeHeight:g}=u,y=ee(0),x=ee(.5),b=ee(.5),v=ee(.15),_=ee(.3),M=ee(1),T=ee(l),w=ee(c),S=gn(m),A=gn(g);function I(D){return D.getCpuValue?.()??(typeof D.uniform.value=="number"?D.uniform.value:null)}function N(){let D=I(i.angle);D!==null&&(y.value=D);let L=i.center.uniform.value?.x??i.center.uniform.x?.value;typeof L=="number"&&(x.value=L);let k=i.center.uniform.value?.y??i.center.uniform.y?.value;typeof k=="number"&&(b.value=k);let W=I(i.width);W!==null&&(v.value=W*.5);let $=I(i.falloff);$!==null&&(_.value=$),M.value=t.width/t.height}let P=i.intensity.mapComputeInfo;if(P){let{sourceTexture:D,channel:L,inputMin:k,inputMax:W,outputMin:$,outputMax:ie,curve:xe}=P,he=Ne(()=>{let Pe=kt,Ge=Pe.mod(S),He=Pe.div(S);wn(He.lessThan(A),()=>{let oe=Ge.toFloat().add(d(.5)).div(d(m)),be=He.toFloat().add(d(.5)).div(d(g)),Te=y.mul(d(Math.PI/180)),Fe=R(Te.sin().negate(),Te.cos()),ze=R(x,d(1).sub(b)),fe=R(oe,be).sub(ze),Xe=bt(Nt(R(fe.x.mul(M),fe.y),Fe)),Re=we(v,v.add(_),Xe),Y=vi(D,Mn(oe.mul(T).round().toInt().clamp(Tt(0),Tt(T.sub(1))).toUint(),be.mul(w).round().toInt().clamp(Tt(0),Tt(w.sub(1))).toUint()),Tt(0)),ye;L==="alpha"?ye=Y.a:L==="alphaInverted"?ye=Y.a.oneMinus():L==="luminanceInverted"?ye=Nt(Y.rgb,de(.2126,.7152,.0722)).oneMinus():ye=Nt(Y.rgb,de(.2126,.7152,.0722));let Me=W.sub(k).max(d(1e-4)),Le=ve($,ie,Pt(ht(ye.sub(k).div(Me),d(0),d(1)),Pt(d(2),xe.negate().mul(d(2))))).mul(d(.36)),Ye=Re.mul(Le);$n(f,Mn(Ge,He),F(Ye,d(0),d(0),d(1))).toWriteOnly()})})().compute(m*g,[256]);return r(({width:Pe,height:Ge})=>{let He=Math.round(Pe*a),oe=Math.round(Ge*a);T.value=He,w.value=oe,u.setInputDimensions(He,oe)}),{outputs:{childTexture:o,blurredTexture:p},getComputeNodes:()=>(N(),[he,...h])}}let B=ee(18),U=Ne(()=>{let D=kt,L=D.mod(S),k=D.div(S);wn(k.lessThan(A),()=>{let W=L.toFloat().add(d(.5)).div(d(m)),$=k.toFloat().add(d(.5)).div(d(g)),ie=y.mul(d(Math.PI/180)),xe=R(ie.sin().negate(),ie.cos()),he=R(x,d(1).sub(b)),Pe=R(W,$).sub(he),Ge=bt(Nt(R(Pe.x.mul(M),Pe.y),xe)),He=we(v,v.add(_),Ge).mul(B);$n(f,Mn(L,k),F(He,d(0),d(0),d(1))).toWriteOnly()})})().compute(m*g,[256]);return r(({width:D,height:L})=>{let k=Math.round(D*a),W=Math.round(L*a);T.value=k,w.value=W,u.setInputDimensions(k,W)}),{outputs:{childTexture:o,blurredTexture:p},getComputeNodes:()=>{N();let D=I(i.intensity);return D!==null&&(B.value=D*.36),[U,...h]}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t,computeOutputs:n})=>{if(!e)return F(0,0,0,0);if(n?.blurredTexture){let _=n.childTexture.sample(H),M=hn(n.blurredTexture).sample(H),T=X.x.div(X.y),w=Ls(s.angle.uniform),S=R(w.sin().negate(),w.cos()),A=R(s.center.uniform[0],s.center.uniform[1].oneMinus()),I=H.sub(A),N=bt(Nt(R(I.x.mul(T),I.y),S)),P=s.width.uniform.mul(.5),B=we(P,P.add(s.falloff.uniform),N),U=s.intensity.uniform.mul(d(0)).add(s.width.uniform.mul(d(0))).add(s.falloff.uniform.mul(d(0))).add(s.angle.uniform.mul(d(0))),D=ve(_,M,B);return It(F(D.rgb.add(U),D.a))}let i=_t(e);t(()=>{i?.renderTarget?.dispose&&i.renderTarget.dispose()});let r=X.x.div(X.y),o=Ls(s.angle.uniform),a=ke(o),l=R(ue(o).negate(),a),c=R(s.center.uniform[0],s.center.uniform[1].oneMinus()),u=H.sub(c),h=bt(Nt(R(u.x.mul(r),u.y),l)),p=s.width.uniform.mul(.5),f=s.falloff.uniform,m=we(p,p.add(f),h),g=s.intensity.uniform.mul(.06),y=m.mul(g),x=[.056,.135,.278,.487,.726,.923,1,.923,.726,.487,.278,.135,.056],b=6.21,v=_t(Ne(()=>{let _=H,M=R(1).div(X),T=F(0).toVar();for(let w=-6;w<=6;w++){let S=d(x[w+6]/b),A=R(d(w),d(0)).mul(y).mul(M),I=_.add(A),N=i.sample(I).mul(S);T.assign(T.add(N))}return T})());return t(()=>{v?.renderTarget?.dispose&&v.renderTarget.dispose()}),Ne(()=>{let _=H,M=R(1).div(X),T=F(0).toVar();for(let S=-6;S<=6;S++){let A=d(x[S+6]/b),I=R(d(0),d(S)).mul(y).mul(M),N=_.add(I),P=v.sample(N).mul(A);T.assign(T.add(P))}let w=T;return It(ve(i.sample(_),w,m))})()}};var fU={name:"Tint",category:"Adjustments",description:"Apply a color tint to the image",requiresChild:!0,props:{color:{default:"#ff8800",transform:_e,description:"Tint color",ui:{type:"color",label:"Tint Color",group:"Colors"}},amount:{default:.5,description:"Tint amount (0 = no tint, 1 = full tint)",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Amount",group:"Effect"}},preserveLuminosity:{default:!0,compileTime:!0,description:"Preserve original brightness",transform:s=>s?1:0,ui:{type:"checkbox",label:"Preserve Luminosity",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return console.error("You must pass a child component into the Tint shader."),F(0);let t=s.color.uniform,n=s.amount.uniform,i=de(e.r,e.g,e.b),r=ve(i,t.rgb,n),o=s.preserveLuminosity.uniform.value===1,a;if(o){let l=de(.299,.587,.114),c=Nt(i,l),u=Nt(r,l);a=r.mul(c.div(St(u,1e-4)))}else a=r;return F(a,e.a)}};var Kq=s=>({outside:0,center:1,inside:2})[s?.toLowerCase()]??1,mU={name:"Trapezoid",category:"Shapes",description:"Trapezoid with adjustable top and bottom widths and height",props:{color:{default:"#ffffff",transform:_e,description:"Fill color of the trapezoid",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the trapezoid",ui:{type:"position",label:"Center",group:"Position"}},bottomWidth:{default:.35,description:"Half-width of the bottom edge",ui:{type:"range",min:.01,max:1,step:.01,label:"Bottom Width",group:"Shape"}},topWidth:{default:.2,description:"Half-width of the top edge",ui:{type:"range",min:.01,max:1,step:.01,label:"Top Width",group:"Shape"}},height:{default:.25,description:"Half-height of the trapezoid",ui:{type:"range",min:.01,max:1,step:.01,label:"Height",group:"Shape"}},rotation:{default:0,description:"Rotation in degrees",ui:{type:"range",min:0,max:360,step:1,label:"Rotation",group:"Shape"}},softness:{default:0,description:"Edge softness for antialiasing",ui:{type:"range",min:0,max:.1,step:.001,label:"Softness",group:"Effect"}},strokeThickness:{default:0,description:"Stroke thickness. Zero means no stroke.",ui:{type:"range",min:0,max:.2,step:.005,label:"Stroke Thickness",group:"Stroke"}},strokeColor:{default:"#000000",transform:_e,description:"Color of the stroke outline",ui:{type:"color",label:"Stroke Color",group:"Colors"}},strokePosition:{default:"center",transform:Kq,description:"Position of the stroke relative to the shape edge",ui:{type:"select",options:[{label:"Outside",value:"outside"},{label:"Center",value:"center"},{label:"Inside",value:"inside"}],label:"Stroke Position",group:"Stroke"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for blending fill and stroke colors",ui:{type:"select",options:Ft,label:"Color Blending",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=n.x.sub(i.x),o=n.y.sub(i.y),a=s.rotation.uniform.mul(d(Math.PI/180)),l=ke(a),c=ue(a),u=Aw(r.mul(l).add(o.mul(c)),o.mul(l).sub(r.mul(c)),s.topWidth.uniform,s.bottomWidth.uniform,s.height.uniform),h=s.softness.uniform,p=s.strokeThickness.uniform,f=s.strokePosition.uniform,m=p.greaterThan(d(0)),g=f.greaterThanEqual(d(.5)).and(f.lessThan(d(1.5))),y=f.greaterThanEqual(d(1.5)),x=p.mul(.5),b=y.select(p.negate(),g.select(x.negate(),d(0))),v=y.select(d(0),g.select(x,p)),_=we(v.sub(h),v,u).oneMinus(),M=m.select(we(b.sub(h),b,u),d(0)),T=wt(F(s.color.uniform.rgb,s.color.uniform.a),F(s.strokeColor.uniform.rgb,s.strokeColor.uniform.a),M,s.colorSpace.uniform.value);return F(T.xyz,T.w.mul(_))}};var gU={name:"Tritone",category:"Adjustments",description:"Map colors to three tones: shadows, midtones, highlights",requiresChild:!0,props:{colorA:{default:"#ce1bea",transform:_e,description:"First color (used for shadows/darkest areas)",ui:{type:"color",label:"Color A (Shadows)",group:"Colors"}},colorB:{default:"#2fff00",transform:_e,description:"Second color (used for midtones)",ui:{type:"color",label:"Color B (Midtones)",group:"Colors"}},colorC:{default:"#ffff00",transform:_e,description:"Third color (used for highlights/brightest areas)",ui:{type:"color",label:"Color C (Highlights)",group:"Colors"}},blendMid:{default:.5,description:"Midpoint position between the three colors",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Midpoint",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return F(0,0,0,0);let t=Nt(de(e.r,e.g,e.b),de(.299,.587,.114)),n=we(s.blendMid.uniform.sub(.25),s.blendMid.uniform,t),i=s.colorSpace.uniform.value,r=wt(s.colorA.uniform,s.colorB.uniform,n,i),o=we(s.blendMid.uniform,s.blendMid.uniform.add(.25),t);return F(wt(r,wt(s.colorB.uniform,s.colorC.uniform,o,i),we(s.blendMid.uniform.sub(.1),s.blendMid.uniform.add(.1),t),i).rgb,e.a)}};var Jq=Ne(([s])=>ct(ue(Nt(s,R(127.1,311.7))).mul(d(43758.5453)))),xU={name:"Truchet",category:"Textures",description:"Quarter-circle arc tiles that connect to form organic, maze-like flowing curves",props:{colorA:{default:"#000000",transform:_e,description:"Background color between the arcs",ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#ffffff",transform:_e,description:"Arc line color",ui:{type:"color",label:"Color B",group:"Colors"}},cells:{default:10,description:"Number of tiles across the shortest canvas edge",ui:{type:["range","map"],min:2,max:40,step:1,label:"Cells",group:"Effect"}},thickness:{default:2,description:"Thickness of the arc lines",ui:{type:["range","map"],min:0,max:20,step:.1,label:"Thickness",group:"Effect"}},seed:{default:0,description:"Random seed \u2014 changes which tiles flip, producing a different maze pattern",ui:{type:["range","map"],min:0,max:100,step:1,label:"Seed",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y).mul(s.cells.uniform),i=Ht(n),r=ct(n),o=Jq(i.add(s.seed.uniform)).greaterThan(d(.5)),a=o.select(d(1),d(0)),l=o.select(d(0),d(0)),c=o.select(d(0),d(1)),u=o.select(d(1),d(1)),h=fn(bt(In(r.sub(R(a,l))).sub(d(.5))),bt(In(r.sub(R(c,u))).sub(d(.5)))),p=s.thickness.uniform.mul(d(.005)),f=zs(n.x).mul(d(.5)),m=we(p.add(f),p,h).mul(ln(d(1e-4),p));return wt(s.colorA.uniform,s.colorB.uniform,m,s.colorSpace.uniform.value)}};var yU={name:"Twirl",category:"Distortions",description:"Rotate and twist content around a center point",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"The center point of the twirl effect",ui:{type:"position",label:"Center",group:"Position"}},intensity:{default:1,description:"The strength of the twirl effect",ui:{type:["range","map"],min:-5,max:5,step:.1,label:"Intensity",group:"Effect"}},edges:{default:"stretch",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return console.error("You must pass a child component into the Twirl shader."),F(0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=H,r=X.x.div(X.y),o=R(s.center.uniform.x,s.center.uniform.y.oneMinus()),a=i.sub(o),l=R(a.x.mul(r),a.y),c=s.intensity.uniform.mul(In(l)),u=ke(c),h=ue(c),p=u.mul(l.x).sub(h.mul(l.y)),f=h.mul(l.x).add(u.mul(l.y)),m=R(p.div(r).add(o.x),f.add(o.y));return It(En(m,n.sample(m),n,s.edges.uniform.value))}};var Qq=s=>({outside:0,center:1,inside:2})[s?.toLowerCase()]??1,bU={name:"Vesica",category:"Shapes",description:"Vesica piscis (lens shape) formed by the intersection of two overlapping circles",props:{color:{default:"#ffffff",transform:_e,description:"Fill color of the vesica",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the vesica",ui:{type:"position",label:"Center",group:"Position"}},radius:{default:.35,description:"Radius of the two overlapping circles",ui:{type:"range",min:.05,max:1,step:.01,label:"Size",group:"Shape"}},spread:{default:.5,description:"Circle separation \u2014 0 = full circle overlap, 1 = infinitely thin lens",ui:{type:"range",min:.05,max:.95,step:.01,label:"Spread",group:"Shape"}},rotation:{default:0,description:"Rotation in degrees",ui:{type:"range",min:0,max:360,step:1,label:"Rotation",group:"Shape"}},softness:{default:0,description:"Edge softness for antialiasing",ui:{type:"range",min:0,max:.1,step:.001,label:"Softness",group:"Effect"}},strokeThickness:{default:0,description:"Stroke thickness. Zero means no stroke.",ui:{type:"range",min:0,max:.2,step:.005,label:"Stroke Thickness",group:"Stroke"}},strokeColor:{default:"#000000",transform:_e,description:"Color of the stroke outline",ui:{type:"color",label:"Stroke Color",group:"Colors"}},strokePosition:{default:"center",transform:Qq,description:"Position of the stroke relative to the shape edge",ui:{type:"select",options:[{label:"Outside",value:"outside"},{label:"Center",value:"center"},{label:"Inside",value:"inside"}],label:"Stroke Position",group:"Stroke"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for blending fill and stroke colors",ui:{type:"select",options:Ft,label:"Color Blending",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=n.x.sub(i.x),o=n.y.sub(i.y),a=s.rotation.uniform.mul(d(Math.PI/180)),l=ke(a),c=ue(a),u=Mw(r.mul(l).add(o.mul(c)),o.mul(l).sub(r.mul(c)),s.radius.uniform,s.spread.uniform),h=s.softness.uniform,p=s.strokeThickness.uniform,f=s.strokePosition.uniform,m=p.greaterThan(d(0)),g=f.greaterThanEqual(d(.5)).and(f.lessThan(d(1.5))),y=f.greaterThanEqual(d(1.5)),x=p.mul(.5),b=y.select(p.negate(),g.select(x.negate(),d(0))),v=y.select(d(0),g.select(x,p)),_=we(v.sub(h),v,u).oneMinus(),M=m.select(we(b.sub(h),b,u),d(0)),T=wt(F(s.color.uniform.rgb,s.color.uniform.a),F(s.strokeColor.uniform.rgb,s.strokeColor.uniform.a),M,s.colorSpace.uniform.value);return F(T.xyz,T.w.mul(_))}};var Lw=6,eX=487,vU={name:"VHS",category:"Stylize",description:"Analog VHS tape with intermittent tape damage, chroma bleed, and per-scanline noise",requiresRTT:!0,requiresChild:!0,props:{wobble:{default:1,description:"Overall amount of tape damage \u2014 waves, creases, and head-switching noise. Bursts on and off organically over time.",ui:{type:["range","map"],min:0,max:5,step:.01,label:"Wobble",group:"Effect"}},scanlineNoise:{default:.6,description:"Per-scanline fine chroma/luma jitter. Adds the classic horizontal-streak detail.",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Scanline Noise",group:"Effect"}},smear:{default:.2,description:"Horizontal chroma smear (color bleed) amount. Positive trails colour to the right (classic VHS), negative trails it to the left.",ui:{type:["range","map"],min:-2,max:2,step:.01,label:"Smear",group:"Effect"}},speed:{default:1,description:"Animation speed of the tape effects.",ui:{type:"range",min:.1,max:3,step:.1,label:"Speed",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=s.wobble.uniform,r=s.scanlineNoise.uniform,o=s.smear.uniform,a=s.speed.uniform,l=wa.mul(a),c=he=>ct(ue(Nt(he,R(12.9898,78.233))).mul(43758.5453)),u=he=>{let Pe=Ht(he),Ge=ct(he),He=Ge.mul(Ge).mul(Ge.mul(-2).add(3)),oe=c(Pe),be=c(Pe.add(R(1,0))),Te=c(Pe.add(R(0,1))),Fe=c(Pe.add(R(1,1)));return ve(ve(oe,be,He.x),ve(Te,Fe,He.x),He.y)},h=we(d(.45),d(.8),u(R(l.mul(.4),d(0)))),p=Ht(H.y.mul(eX)),f=he=>ct(ue(p.mul(12.9898).add(l.add(he).mul(78.233))).mul(43758.5453)).sub(.5).mul(2),m=d(.25).add(h.mul(.75)),g=f(0).mul(r).mul(.008).mul(m),y=f(69.42).mul(r).mul(.004).mul(m),x=u(R(H.y.mul(3),l.mul(.8))).sub(.5),b=u(R(H.y.mul(30),l.mul(6))).sub(.5),v=x.mul(.008).add(b.mul(.002)).mul(i),_=we(d(.92),d(.99),ue(H.y.mul(8).sub(l.mul(3.77)))),M=we(d(.3),d(1),u(R(H.y.mul(4.77),l))),T=_.mul(M).mul(i).mul(-.018),w=we(d(.06),d(0),H.y),S=u(R(H.y.mul(60),l.mul(14))).sub(.5),A=w.mul(S).mul(i).mul(.09),I=w.mul(i).mul(h).mul(.02),N=v.add(T).add(A),P=R(H.x.add(N).add(y),H.y.add(I)),B=R(H.x.add(N).add(g),H.y.add(I)),U=n.sample(P),D=U.rgb.dot(de(.299,.587,.114)),L=o.mul(.0075),k=d(0),W=d(0);for(let he=0;he<Lw;he++){let Pe=d(-he).mul(L),Ge=n.sample(R(B.x.add(Pe),B.y)),He=Ge.rgb.dot(de(.596,-.274,-.322)),oe=Ge.rgb.dot(de(.211,-.523,.312)),be=he/(Lw-1)*(2/Lw);k=k.add(He.mul(be)),W=W.add(oe.mul(be))}let $=de(D,k,W),ie=de($.x.add($.y.mul(.956)).add($.z.mul(.621)),$.x.sub($.y.mul(.272)).sub($.z.mul(.647)),$.x.sub($.y.mul(1.106)).add($.z.mul(1.703))),xe=d(1).add(ke(ls(l,6.2831853).mul(2).add(H.y.mul(.5))).mul(.015).mul(i));return It(F(ht(ie.mul(xe),de(0),de(1)),U.a))}};var _U={name:"Vibrance",category:"Adjustments",description:"Selective saturation adjustment protecting skin tones",requiresChild:!0,props:{intensity:{default:0,description:"The intensity of the vibrance effect",ui:{type:["range","map"],min:-2,max:2,step:.1,label:"Intensity",group:"Appearance"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return console.error("You must pass a child component into the Vibrance shader."),F(0);let t=e.rgb,n=s.intensity.uniform,i=un(t.r,un(t.g,t.b)).div(3),r=St(t.r,St(t.g,t.b)),o=r.sub(i).mul(n).mul(-3);return F(ve(t,de(r,r,r),o),e.a)}};var Bw=null;function Kc(){return Bw===null&&(Bw=typeof navigator<"u"&&/Firefox/.test(navigator.userAgent)),Bw}var SU={name:"VideoTexture",category:"Textures",description:"Display a video with customizable playback and object-fit modes",props:{url:{default:"https://shaders.com/sample.mp4",description:"Upload a video or provide a URL",ui:{type:"video-upload",label:"Video",group:"Media"}},objectFit:{default:"cover",description:"How the video should be sized within the viewport",transform:s=>({cover:0,contain:1,fill:2,"scale-down":3,none:4})[s]??0,compileTime:!0,ui:{type:"select",options:[{label:"Cover",value:"cover"},{label:"Contain",value:"contain"},{label:"Fill",value:"fill"},{label:"Scale Down",value:"scale-down"},{label:"None",value:"none"}],label:"Object Fit",group:"Appearance"}},loop:{default:!0,description:"Loop the video playback",ui:{type:"checkbox",label:"Loop",group:"Playback"}}},fragmentNode:({uniforms:s,onCleanup:e,onBeforeRender:t})=>{let n=H,i=null,r="",o=!1,a=!1,l=ee(1),c=ee(640),u=ee(480),h=null,p=null,f;if(Kc())h=document.createElement("canvas"),h.width=640,h.height=480,p=h.getContext("2d"),f=new xo(h);else{let S=document.createElement("video");S.playsInline=!0,S.muted=!0,f=new Ya(S)}f.colorSpace=ts;let m=hn(f),g=async S=>{if(!(!S||S.trim()===""||o||a)){o=!0;try{let A=document.createElement("video");if(A.src=S,A.playsInline=!0,A.crossOrigin="anonymous",A.muted=!0,A.loop=s.loop?.uniform?.value??!0,await new Promise((P,B)=>{A.onloadedmetadata=()=>{P()},A.onerror=()=>{B(new Error("Failed to load video"))},setTimeout(()=>{B(new Error("Video load timeout"))},1e4)}),a){A.src="";return}let I=A.videoWidth||640,N=A.videoHeight||480;l.value=I/N,c.value=I,u.value=N,i&&(i.pause(),i.src="",i=null),i=A,r=S;try{await A.play()}catch(P){console.warn("[VideoTexture] Autoplay failed (browser policy):",P)}f.dispose(),Kc()?(h.width=I,h.height=N,f=new xo(h)):f=new Ya(A),f.colorSpace=ts,m.value=f,o=!1}catch(A){console.error("[VideoTexture] Failed to load video:",A),o=!1}}};setTimeout(()=>{let S=s?.url?.uniform?.value??"";S&&S.trim()!==""&&g(S)},0),t(()=>{let S=s?.url?.uniform?.value??"";if(S!==r&&!o&&g(S),i){let A=s.loop?.uniform?.value??!0;i.loop!==A&&(i.loop=A),Kc()&&!i.paused&&i.readyState>=2&&(p.drawImage(i,0,0,h.width,h.height),f.needsUpdate=!0)}}),e(()=>{a=!0,i&&(i.pause(),i.src="",i=null),f.dispose(),r=""});let y=n,x=X.x.div(X.y),b=s.objectFit.uniform.value,v;switch(b){case 1:{let S=fn(x.div(l),d(1));v=R(l.div(x).mul(S),S);break}case 2:v=R(1,1);break;case 3:{let S=fn(fn(x.div(l),d(1)),fn(X.x.div(c),X.y.div(u)));v=R(l.div(x).mul(S),S);break}case 4:{let S=fn(X.x.div(c),X.y.div(u));v=R(l.div(x).mul(S),S);break}default:{let S=St(x.div(l),d(1));v=R(l.div(x).mul(S),S);break}}let _=y.sub(R(.5)).div(v).add(R(.5)),M=R(_.x,d(1).sub(_.y)),T=m.sample(M),w=or(or(M.x.lessThan(0),M.x.greaterThan(1)),or(M.y.lessThan(0),M.y.greaterThan(1)));return F(T.rgb,ar(w,d(0),T.a))}};var TU={name:"Vignette",category:"Stylize",description:"Darkens or tints the edges of the frame, drawing attention toward the center",requiresChild:!0,props:{color:{default:"#000000",transform:_e,description:"Color of the vignette at the edges",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center of the clear area where the vignette begins",ui:{type:"position",label:"Center",group:"Position"}},radius:{default:.5,description:"Distance from center where the vignette begins to fade in",ui:{type:["range","map"],min:0,max:1.5,step:.01,label:"Radius",group:"Effect"}},falloff:{default:.5,description:"Width of the transition zone from clear to full vignette",ui:{type:["range","map"],min:.01,max:1.5,step:.01,label:"Falloff",group:"Effect"}},intensity:{default:1,description:"Strength of the vignette effect",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Intensity",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return console.error("You must pass a child component into the Vignette shader."),F(0);let t=H,n=X.x.div(X.y),i=R(t.x.mul(n),t.y),r=R(s.center.uniform.x.mul(n),s.center.uniform.y.oneMinus()),o=In(i.sub(r)),a=we(s.radius.uniform,s.radius.uniform.add(s.falloff.uniform),o);return F(ve(e.rgb,s.color.uniform.rgb,a.mul(s.intensity.uniform)),e.a)}};var tX=Ne(([s])=>ct(ue(R(Nt(s,R(127.1,311.7)),Nt(s,R(269.5,183.3)))).mul(d(43758.5453)))),MU={name:"Voronoi",category:"Textures",description:"Cellular pattern where each pixel is colored by its distance to the nearest of many scattered points",props:{colorA:{default:"#3186cf",transform:_e,description:"Color near each cell's center point",ui:{type:"color",label:"Color A (Center)",group:"Colors"}},colorB:{default:"#fc02dd",transform:_e,description:"Color at cell boundaries, far from any center point",ui:{type:"color",label:"Color B (Edge)",group:"Colors"}},colorBorder:{default:"#000000",transform:_e,description:"Color of the cell boundary lines",ui:{type:"color",label:"Border Color",group:"Colors"}},scale:{default:6,description:"Number of cells across the canvas",ui:{type:["range","map"],min:1,max:20,step:.5,label:"Scale",group:"Effect"}},speed:{default:.5,description:"Animation speed \u2014 how fast the cell points drift",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Animation"}},seed:{default:0,description:"Random seed \u2014 shifts the cell pattern without changing the overall structure",ui:{type:["range","map"],min:0,max:100,step:1,label:"Seed",group:"Effect"}},edgeIntensity:{default:.5,description:"Controls how much of the cell interior is filled by the edge color. Low = center color dominates with a sharp boundary. High = edge color spreads further into the cell.",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Edge Intensity",group:"Effect"}},edgeSoftness:{default:.05,description:"Width of the cell boundary lines.",ui:{type:["range","map"],min:0,max:.4,step:.005,label:"Edge Softness",group:"Effect"}},colorSpace:{default:"oklch",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:s=>{let{uniforms:e}=s,t=e.colorA.uniform,n=e.colorB.uniform,i=e.colorBorder.uniform,r=e.colorSpace.uniform.value,o=e.scale.uniform,a=e.seed.uniform,l=cn(s,e.speed),c=X.x.div(X.y),u=R(H.x.mul(c),H.y).mul(o);return Ne(([h,p,f,m,g,y])=>{let x=Ht(h),b=ct(h),v=d(10),_=d(10);for(let I=-1;I<=1;I++)for(let N=-1;N<=1;N++){let P=R(d(N),d(I)),B=tX(x.add(P).add(f)),U=B.x.add(ue(p.add(B.x.mul(d(6.28)))).mul(d(.15))).clamp(d(.05),d(.95)),D=B.y.add(ke(p.mul(d(.7)).add(B.y.mul(d(6.28)))).mul(d(.15))).clamp(d(.05),d(.95)),L=In(b.sub(P.add(R(U,D)))),k=L.lessThan(v);_=k.select(v,L.lessThan(_).select(L,_)),v=k.select(L,v)}let M=v.add(_).max(d(1e-4)),T=wt(t,n,Pt(v.mul(d(2)).div(M).clamp(d(0),d(1)),d(4).sub(m.mul(d(3)))).clamp(d(0),d(1)),r),w=g.mul(o).div(d(6)),S=_.sub(v).div(M),A=we(d(0),w.add(d(.001)),S);return F(ve(y.rgb,T.rgb,A),T.a)})(u,l,a,e.edgeIntensity.uniform,e.edgeSoftness.uniform,i)}};var wU={name:"WaveDistortion",category:"Distortions",description:"Wave-based distortion with multiple waveform types",requiresRTT:!0,requiresChild:!0,props:{strength:{default:.3,description:"Distortion intensity",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Strength",group:"Effect"}},frequency:{default:1,description:"Number of bends/waves",ui:{type:["range","map"],min:.1,max:10,step:.1,label:"Frequency",group:"Effect"}},speed:{default:1,description:"Animation speed",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Animation"}},angle:{default:0,description:"Direction of wave distortion in degrees",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},waveType:{default:"sine",description:"Shape of the distortion wave",compileTime:!0,transform:s=>({sine:0,triangle:1,square:2,sawtooth:3,bounce:4})[s]??0,ui:{type:"select",options:[{label:"Sine",value:"sine"},{label:"Triangle",value:"triangle"},{label:"Square",value:"square"},{label:"Sawtooth",value:"sawtooth"},{label:"Bounce",value:"bounce"}],label:"Wave Type",group:"Effect"}},edges:{default:"stretch",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:s=>{let{uniforms:e,childNode:t,onCleanup:n,onBeforeRender:i}=s;if(!t)return F(0,0,0,0);let r=H,o=X.x.div(X.y),a=cn(s,e.speed).mul(.5),l,c;if(e.angle.uniform.isUniformNode){let M=ee(1),T=ee(0);i(()=>{let w=e.angle.uniform.value*Math.PI/180;M.value=Math.cos(w),T.value=Math.sin(w)}),l=M,c=T}else{let M=e.angle.uniform.mul(Qs).div(180);l=ke(M).toVar(),c=ue(M).toVar()}let u=r.sub(R(.5,.5)),h=R(u.x.mul(o),u.y),p=h.x.mul(c).add(h.y.mul(l)).add(.5).mul(e.frequency.uniform).mul(Qs.mul(2)).add(a),f;switch(e.waveType.uniform.value){case 1:f=bt(ct(p.div(Qs.mul(2))).mul(2).sub(1)).mul(2).sub(1);break;case 2:{let M=ct(p.div(Qs.mul(2)));f=ln(d(.5),M).mul(2).sub(1);break}case 3:f=ct(p.div(Qs.mul(2))).mul(2).sub(1);break;case 4:f=bt(ue(p));break;default:f=ue(p)}let m=f.mul(e.strength.uniform).mul(.5),g=m.mul(l).div(o),y=m.mul(c),x=R(r.x.add(g),r.y.add(y)),b=_t(t);n(()=>{b?.renderTarget?.dispose&&b.renderTarget.dispose()});let v=e.edges.uniform.value,_;if(v===2||v===3){let M=ay(x,v);_=b.sample(M)}else _=En(x,b.sample(x),b,v);return It(_)}};var AU={name:"Weave",category:"Textures",description:"Interlaced textile weave pattern with two thread colors going over and under each other",props:{colorA:{default:"#c4c4c4",transform:_e,description:"Horizontal thread color",ui:{type:"color",label:"X Color",group:"Colors"}},colorB:{default:"#4d4d4d",transform:_e,description:"Vertical thread color",ui:{type:"color",label:"Y Color",group:"Colors"}},cells:{default:10,description:"Number of threads across the shortest canvas edge",ui:{type:["range","map"],min:2,max:40,step:1,label:"Cells",group:"Effect"}},gap:{default:.25,description:"Gap between threads (0 = no gap, 0.5 = maximum gap)",ui:{type:["range","map"],min:0,max:.45,step:.01,label:"Gap",group:"Effect"}},rotation:{default:0,description:"Rotation of the weave pattern in degrees",ui:{type:["range","map"],min:0,max:360,step:1,label:"Rotation",group:"Effect"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=s.rotation.uniform.mul(d(Math.PI/180)),r=ke(i),o=ue(i),a=R(t.mul(d(.5)),d(.5)),l=n.sub(a),c=R(l.x.mul(r).sub(l.y.mul(o)),l.x.mul(o).add(l.y.mul(r))).add(a).mul(s.cells.uniform),u=Ht(c),h=ct(c),p=s.gap.uniform,f=zs(c.x).mul(d(.5)),m=we(p,p.add(f),h.y).mul(we(p,p.add(f),d(1).sub(h.y))),g=we(p,p.add(f),h.x).mul(we(p,p.add(f),d(1).sub(h.x))),y=ls(u.x.add(u.y),d(2)),x=m.mul(g),b=m.sub(x.mul(y)).clamp(d(0),d(1)),v=g.sub(x.mul(d(1).sub(y))).clamp(d(0),d(1)),_=s.colorA.uniform,M=s.colorB.uniform,T=_.a.mul(b),w=M.a.mul(v),S=T.add(w).clamp(d(0),d(1)),A=T.add(w).max(d(.001));return F(_.x.mul(T).add(M.x.mul(w)).div(A),_.y.mul(T).add(M.y.mul(w)).div(A),_.z.mul(T).add(M.z.mul(w)).div(A),S)}};var CU={name:"WebcamTexture",category:"Textures",description:"Display a live webcam feed with customizable object-fit modes",props:{objectFit:{default:"cover",description:"How the webcam feed should be sized within the viewport",transform:s=>({cover:0,contain:1,fill:2,"scale-down":3,none:4})[s]??0,compileTime:!0,ui:{type:"select",options:[{label:"Cover",value:"cover"},{label:"Contain",value:"contain"},{label:"Fill",value:"fill"},{label:"Scale Down",value:"scale-down"},{label:"None",value:"none"}],label:"Object Fit",group:"Appearance"}},mirror:{default:!0,description:"Mirror the webcam feed horizontally (selfie mode)",ui:{type:"checkbox",label:"Mirror",group:"Effect"}}},fragmentNode:({uniforms:s,onCleanup:e,onBeforeRender:t})=>{let n=H,i=null,r=null,o=!1,a=!1,l=ee(1),c=ee(640),u=ee(480),h=null,p=null,f;if(Kc())h=document.createElement("canvas"),h.width=640,h.height=480,p=h.getContext("2d"),f=new xo(h);else{let A=document.createElement("video");A.playsInline=!0,A.muted=!0,f=new Ya(A)}f.colorSpace=ts;let m=hn(f);(async()=>{if(!(o||a))try{if(i=await navigator.mediaDevices.getUserMedia({video:{width:{ideal:1280},height:{ideal:720},facingMode:"user"},audio:!1}),a){i.getTracks().forEach(N=>N.stop()),i=null;return}if(r=document.createElement("video"),r.srcObject=i,r.playsInline=!0,r.muted=!0,await new Promise((N,P)=>{if(!r)return P(new Error("Video element not created"));r.onloadedmetadata=()=>{N()},r.onerror=()=>{P(new Error("Failed to load video metadata"))}}),a||(await r.play(),a))return;let A=r.videoWidth||640,I=r.videoHeight||480;l.value=A/I,c.value=A,u.value=I,f.dispose(),Kc()?(h.width=A,h.height=I,f=new xo(h)):f=new Ya(r),f.colorSpace=ts,m.value=f,o=!0,console.log(`[WebcamTexture] Webcam started: ${A}x${I}`)}catch(A){A instanceof DOMException?A.name==="NotAllowedError"?console.error("[WebcamTexture] Camera permission denied by user"):A.name==="NotFoundError"?console.error("[WebcamTexture] No camera found on this device"):A.name==="NotReadableError"?console.error("[WebcamTexture] Camera is already in use by another application"):console.error("[WebcamTexture] Camera error:",A.message):console.error("[WebcamTexture] Failed to start webcam:",A)}})(),t(()=>{Kc()&&r&&o&&!r.paused&&r.readyState>=2&&(p.drawImage(r,0,0,h.width,h.height),f.needsUpdate=!0)}),e(()=>{a=!0,i&&(i.getTracks().forEach(A=>A.stop()),i=null),r&&(r.srcObject=null,r=null),f.dispose(),o=!1});let y=n,x=X.x.div(X.y),b=s.objectFit.uniform.value,v;switch(b){case 1:{let A=fn(x.div(l),d(1));v=R(l.div(x).mul(A),A);break}case 2:v=R(1,1);break;case 3:{let A=fn(fn(x.div(l),d(1)),fn(X.x.div(c),X.y.div(u)));v=R(l.div(x).mul(A),A);break}case 4:{let A=fn(X.x.div(c),X.y.div(u));v=R(l.div(x).mul(A),A);break}default:{let A=St(x.div(l),d(1));v=R(l.div(x).mul(A),A);break}}let _=y.sub(R(.5)).div(v).add(R(.5)),M=s.mirror.uniform,T=R(ar(M,d(1).sub(_.x),_.x),d(1).sub(_.y)),w=m.sample(T),S=or(or(T.x.lessThan(0),T.x.greaterThan(1)),or(T.y.lessThan(0),T.y.greaterThan(1)));return F(w.rgb,ar(S,d(0),w.a))}};var EU=d(Math.PI*2),RU=d(.15),NU=d(.5),PU=d(.05),IU=d(.95),nX=d(.7),DU=d(10),sX=Ne(([s])=>ct(ue(R(Nt(s,R(127.1,311.7)),Nt(s,R(269.5,183.3)))).mul(d(43758.5453)))),iX=s=>({f1:0,f2:1,f2MinusF1:2,f1PlusF2:3,f1TimesF2:4})[s]??0,rX=s=>({euclidean:0,manhattan:1,chebyshev:2})[s]??0,FU={name:"WorleyNoise",category:"Textures",description:"Cellular noise field \u2014 distance-based, with selectable feature combinations and fractal octaves",props:{colorA:{default:"#ffffff",transform:_e,description:"Color where the noise field is low (typically near cell centers)",ui:{type:"color",label:"Color A (Low)",group:"Colors"}},colorB:{default:"#000000",transform:_e,description:"Color where the noise field is high (typically near cell boundaries)",ui:{type:"color",label:"Color B (High)",group:"Colors"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}},scale:{default:6,description:"Number of cells across the canvas at the base octave",ui:{type:["range","map"],min:1,max:30,step:.5,label:"Scale",group:"Effect"}},mode:{default:"f1",transform:iX,compileTime:!0,description:"Field type. F1 = distance to nearest point. F2 = distance to second-nearest. F2 \u2212 F1 emphasises cell boundaries.",ui:{type:"select",options:[{label:"F1 (Cells)",value:"f1"},{label:"F2 (Wider Cells)",value:"f2"},{label:"F2 \u2212 F1 (Edges)",value:"f2MinusF1"},{label:"F1 + F2",value:"f1PlusF2"},{label:"F1 \xD7 F2",value:"f1TimesF2"}],label:"Mode",group:"Effect"}},distance:{default:"euclidean",transform:rX,compileTime:!0,description:"Distance metric. Euclidean = round cells. Manhattan = diamond. Chebyshev = square.",ui:{type:"select",options:[{label:"Euclidean",value:"euclidean"},{label:"Manhattan",value:"manhattan"},{label:"Chebyshev",value:"chebyshev"}],label:"Distance",group:"Effect"}},octaves:{default:1,compileTime:!0,description:"Number of fractal layers stacked at progressively finer scales",ui:{type:"range",min:1,max:4,step:1,label:"Octaves",group:"Effect"}},lacunarity:{default:2,description:"Scale multiplier between octaves (only active when Octaves > 1)",ui:{type:["range","map"],min:1.5,max:4,step:.1,label:"Lacunarity",group:"Effect",condition:{octaves:[2,3,4]}}},persistence:{default:.5,description:"Amplitude multiplier between octaves (only active when Octaves > 1)",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Persistence",group:"Effect",condition:{octaves:[2,3,4]}}},jitter:{default:1,description:"How much each cell's point drifts inside its cell. 0 = rigid grid (banded look), 1 = fully random.",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Jitter",group:"Effect"}},contrast:{default:1,description:"Steepness of the gradient between low and high regions",ui:{type:["range","map"],min:.25,max:4,step:.05,label:"Contrast",group:"Effect"}},balance:{default:0,description:"Shifts the gradient midpoint. Negative pulls the field toward Color A, positive toward Color B.",ui:{type:["range","map"],min:-1,max:1,step:.05,label:"Balance",group:"Effect"}},seed:{default:0,description:"Random seed \u2014 shifts the cell pattern without changing its overall structure",ui:{type:["range","map"],min:0,max:100,step:1,label:"Seed",group:"Effect"}},speed:{default:.5,description:"Animation speed \u2014 how fast each cell's point drifts",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Animation"}}},fragmentNode:s=>{let{uniforms:e}=s,t=e.colorA.uniform,n=e.colorB.uniform,i=e.colorSpace.uniform.value,r=e.mode.uniform.value,o=e.distance.uniform.value,a=Math.max(1,Math.min(4,Math.round(e.octaves.uniform.value))),l=cn(s,e.speed),c=X.x.div(X.y),u=R(H.x.mul(c),H.y),h=e.scale.uniform,p=e.seed.uniform,f=e.jitter.uniform,m=e.lacunarity.uniform,g=e.persistence.uniform,y=1.5;r===1?y=1:r===2?y=2.5:r===3?y=.6:r===4&&(y=2),o===1?y*=.7:o===2&&(y*=1.4);let x=o===0,b=r!==0,v=Ne(([S,A,I])=>{let N=A.mul(nX),P=Ht(S),B=ct(S),U=DU,D=DU;for(let k=-1;k<=1;k++)for(let W=-1;W<=1;W++){let $=R(d(W),d(k)),ie=sX(P.add($).add(I)),xe=ie.x.add(ue(A.add(ie.x.mul(EU))).mul(RU)),he=ie.y.add(ke(N.add(ie.y.mul(EU))).mul(RU)),Pe=ve(NU,xe.clamp(PU,IU),f),Ge=ve(NU,he.clamp(PU,IU),f),He=$.add(R(Pe,Ge)),oe=B.sub(He),be;o===1?be=bt(oe.x).add(bt(oe.y)):o===2?be=St(bt(oe.x),bt(oe.y)):be=T3(oe),b?(D=fn(D,St(be,U)),U=fn(U,be)):U=fn(U,be)}let L;return x?r===1?L=yn(D):r===2?L=yn(D).sub(yn(U)):r===3?L=yn(U).add(yn(D)):r===4?L=yn(U.mul(D)):L=yn(U):r===1?L=D:r===2?L=D.sub(U):r===3?L=U.add(D):r===4?L=U.mul(D):L=U,L}),_=d(0),M=d(0),T=d(1),w=h;for(let S=0;S<a;S++){let A=v(u.mul(w),l.add(d(S*17)),p.add(d(S*31)));_=_.add(A.mul(T)),M=M.add(T),T=T.mul(g),w=w.mul(m)}return wt(t,n,ht(_.div(M.max(d(1e-4))).mul(d(y)).mul(d(2)).sub(d(1)).mul(e.contrast.uniform).add(e.balance.uniform).mul(d(.5)).add(d(.5)),d(0),d(1)),i)}};var UU=Array.from({length:32},(s,e)=>{let t=(e/31-.5)*2;return Math.exp(-.5*t*t/.64)}),oX=UU.reduce((s,e)=>s+e),aX=UU.map(s=>s/oX),LU={name:"ZoomBlur",category:"Blurs",description:"Radial zoom blur expanding from a center point",requiresRTT:!0,requiresChild:!0,props:{intensity:{default:30,description:"Intensity of the zoom blur effect",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Effect"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center point of the zoom blur",ui:{type:"position",label:"Center",group:"Position"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=R(s.center.uniform.x,s.center.uniform.y.oneMinus()),r=s.intensity.uniform.mul(.01),o=X.x.div(X.y);return Ne(()=>{let a=H,l=F(0).toVar(),c=a.sub(i),u=R(c.x.mul(o),c.y);for(let h=0;h<32;h++){let p=d(1).add(r.mul(h/31)),f=u.div(p),m=R(f.x.div(o),f.y).add(i);l.assign(l.add(n.sample(m).mul(d(aX[h]))))}return It(l)})()}};var lX=()=>{let s={};return Object.entries({AngularBlur:GI,Ascii:cr,Aurora:QI,BarShift:eD,Beam:tD,Blob:nD,Blur:iD,BrickPattern:rD,BrightnessContrast:oD,Bulge:aD,ChannelBlur:lD,Checkerboard:cD,Chevron:uD,ChromaFlow:dD,ChromaticAberration:hD,Circle:pD,ColorWheel:fD,ConcentricSpin:mD,ConicGradient:gD,ContourLines:xD,Crescent:yD,Cross:bD,CRTScreen:vD,Crystal:SD,CursorRipples:TD,CursorTrail:MD,DiamondGradient:wD,DiffuseBlur:AD,Dither:CD,DOMTexture:ED,DotGrid:RD,DropShadow:ID,Duotone:DD,Ellipse:FD,Emboss:LD,Exposure:BD,FallingLines:OD,FilmGrain:kD,FloatingParticles:GD,Flower:HD,FlowField:WD,FlowingGradient:$D,FlutedGlass:qD,Fog:jD,Form3D:KD,FractalNoise:QD,Glass:nF,GlassTiles:sF,Glitch:iF,Glow:rF,Godrays:oF,Grayscale:aF,Grid:lF,GridDistortion:uF,Group:dF,Halftone:hF,HexGrid:pF,HueShift:fF,ImageTexture:mF,Invert:gF,Kaleidoscope:xF,LensFlare:yF,LinearBlur:vF,LinearGradient:_F,Liquify:SF,Marble:TF,Mirror:MF,MultiPointGradient:wF,Neon:EF,Paper:RF,Perspective:NF,Pixelate:PF,Plasma:IF,PolarCoordinates:DF,Polygon:FF,Posterize:UF,ProgressiveBlur:LF,RadialGradient:BF,RectangularCoordinates:OF,ReflectivePlane:kF,Ring:VF,Ripples:zF,RoundedRect:GF,Saturation:HF,Sharpness:WF,Shatter:$F,SimplexNoise:qF,SineWave:XF,Smoke:KF,SmokeFill:QF,Solarize:eU,SolidColor:tU,Spherize:nU,Spiral:sU,Star:iU,Strands:rU,Stretch:oU,Stripes:aU,StudioBackground:lU,SunBurst:cU,Swirl:uU,ThinFilm:hU,TiltShift:pU,Tint:fU,Trapezoid:mU,Tritone:gU,Truchet:xU,Twirl:yU,Vesica:bU,VHS:vU,Vibrance:_U,VideoTexture:SU,Vignette:TU,Voronoi:MU,WaveDistortion:wU,Weave:AU,WebcamTexture:CU,WorleyNoise:FU,ZoomBlur:LU}).forEach(([t,n])=>{let i={};n.props&&Object.entries(n.props).forEach(([r,o])=>{o.ui&&(i[r]={ui:o.ui,default:o.default,description:o.description})}),s[n.name]={name:n.name,fileName:t,category:n.category||"Uncategorized",definition:n,propsMetadata:i}}),s},BU=lX();function Ow(){return Object.values(BU)}function cX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(e.rgb,n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}var OU=s=>de(s.x.mul(1.2249401).sub(s.y.mul(.2249404)).sub(s.z.mul(0)),s.x.mul(-.0420569).add(s.y.mul(1.0420571)).add(s.z.mul(0)),s.x.mul(-.0196376).sub(s.y.mul(.0786361)).add(s.z.mul(1.0982735))),uX=s=>de(s.x.mul(.8224621).add(s.y.mul(.177538)).add(s.z.mul(0)),s.x.mul(.0331941).add(s.y.mul(.9668058)).add(s.z.mul(0)),s.x.mul(.0170826).add(s.y.mul(.0723974)).add(s.z.mul(.9105199))),kU=s=>{let e=s.x,t=s.y,n=s.z,i=e.mul(.4122214708).add(t.mul(.5363325363)).add(n.mul(.0514459929)),r=e.mul(.2119034982).add(t.mul(.6806995451).add(n.mul(.1073969566))),o=e.mul(.0883024619).add(t.mul(.2817188376)).add(n.mul(.6299787005)),a=Yi(i).mul(Pt(bt(i),d(1/3))),l=Yi(r).mul(Pt(bt(r),d(1/3))),c=Yi(o).mul(Pt(bt(o),d(1/3)));return de(a.mul(.2104542553).add(l.mul(.793617785)).sub(c.mul(.0040720468)),a.mul(1.9779984951).sub(l.mul(2.428592205)).add(c.mul(.4505937099)),a.mul(.0259040371).add(l.mul(.7827717662)).sub(c.mul(.808675766)))},dX=s=>{let e=s.x,t=s.y,n=s.z,i=e.add(t.mul(.3963377774)).add(n.mul(.2158037573)),r=e.sub(t.mul(.1055613458)).sub(n.mul(.0638541728)),o=e.sub(t.mul(.0894841775)).sub(n.mul(1.291485548)),a=Pt(i,d(3)),l=Pt(r,d(3)),c=Pt(o,d(3));return de(a.mul(4.0767416621).sub(l.mul(3.3077115913)).add(c.mul(.2309699292)),a.mul(-1.2684380046).add(l.mul(2.6097574011)).sub(c.mul(.3413193965)),a.mul(-.0041960863).sub(l.mul(.7034186147)).add(c.mul(1.707614701)))},VU=s=>{let e=s.x,t=s.y,n=s.z;return de(e,yn(t.mul(t).add(n.mul(n))),Jn(n,t))},hX=s=>{let e=s.x,t=s.y,n=s.z;return de(e,t.mul(ke(n)),t.mul(ue(n)))};function pX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=OU(de(s.r,s.g,s.b)),o=OU(de(e.r,e.g,e.b)),a=kU(r),l=kU(o),c=VU(a);return F(uX(dX(hX(un($e(VU(l),n),$e(c,$e(s.a,Qt(1,n))))))),i)}var zU=s=>de(s.x.mul(1.2249401).sub(s.y.mul(.2249404)).sub(s.z.mul(0)),s.x.mul(-.0420569).add(s.y.mul(1.0420571)).add(s.z.mul(0)),s.x.mul(-.0196376).sub(s.y.mul(.0786361)).add(s.z.mul(1.0982735))),fX=s=>de(s.x.mul(.8224621).add(s.y.mul(.177538)).add(s.z.mul(0)),s.x.mul(.0331941).add(s.y.mul(.9668058)).add(s.z.mul(0)),s.x.mul(.0170826).add(s.y.mul(.0723974)).add(s.z.mul(.9105199))),GU=s=>{let e=s.x,t=s.y,n=s.z,i=e.mul(.4122214708).add(t.mul(.5363325363)).add(n.mul(.0514459929)),r=e.mul(.2119034982).add(t.mul(.6806995451).add(n.mul(.1073969566))),o=e.mul(.0883024619).add(t.mul(.2817188376)).add(n.mul(.6299787005)),a=Yi(i).mul(Pt(bt(i),d(1/3))),l=Yi(r).mul(Pt(bt(r),d(1/3))),c=Yi(o).mul(Pt(bt(o),d(1/3)));return de(a.mul(.2104542553).add(l.mul(.793617785)).sub(c.mul(.0040720468)),a.mul(1.9779984951).sub(l.mul(2.428592205)).add(c.mul(.4505937099)),a.mul(.0259040371).add(l.mul(.7827717662)).sub(c.mul(.808675766)))},mX=s=>{let e=s.x,t=s.y,n=s.z,i=e.add(t.mul(.3963377774)).add(n.mul(.2158037573)),r=e.sub(t.mul(.1055613458)).sub(n.mul(.0638541728)),o=e.sub(t.mul(.0894841775)).sub(n.mul(1.291485548)),a=Pt(i,d(3)),l=Pt(r,d(3)),c=Pt(o,d(3));return de(a.mul(4.0767416621).sub(l.mul(3.3077115913)).add(c.mul(.2309699292)),a.mul(-1.2684380046).add(l.mul(2.6097574011)).sub(c.mul(.3413193965)),a.mul(-.0041960863).sub(l.mul(.7034186147)).add(c.mul(1.707614701)))};function gX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=zU(de(s.r,s.g,s.b)),o=zU(de(e.r,e.g,e.b)),a=GU(r);return F(fX(mX(un($e(GU(o),n),$e(a,$e(s.a,Qt(1,n)))))),i)}function xX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e($e(s.rgb,e.rgb),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function yX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(Qt(1,$e(Qt(1,s.rgb),Qt(1,e.rgb))),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function bX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(un(s.rgb,e.rgb),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function vX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(ve($e(2,$e(s.rgb,e.rgb)),Qt(1,$e(2,$e(Qt(1,s.rgb),Qt(1,e.rgb)))),ln(.5,s.rgb)),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function _X(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(bt(Qt(s.rgb,e.rgb)),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function SX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(ve(s.rgb,fn(pl(s.rgb,Qt(1,e.rgb)),1),ln(.001,Qt(1,e.rgb))),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function TX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(Qt(un(s.rgb,e.rgb),$e(2,$e(s.rgb,e.rgb))),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function Jc(s){return un(un($e(s.r,.2126),$e(s.g,.7152)),$e(s.b,.0722))}function MX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=Qt(Jc(s.rgb),Jc(e.rgb));return F(un($e(un(e.rgb,r),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function wX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=Jc(s.rgb),o=Jc(e.rgb).div(un(r,1e-4));return F(un($e($e(s.rgb,o),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function AX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(fn(s.rgb,e.rgb),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function CX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(St(s.rgb,e.rgb),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function EX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(ve(F(0,0,0,1).rgb,St(Qt(1,Qt(1,s.rgb).div(un(e.rgb,1e-4))),0),ln(1e-4,e.rgb)),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function RX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(St(un(un(s.rgb,e.rgb),-1),0),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function NX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=un($e(2,$e(s.rgb,e.rgb)),$e($e(s.rgb,s.rgb),Qt(1,$e(2,e.rgb)))),o=yn(s.rgb);return F(un($e(ve(r,un($e(2,$e(s.rgb,Qt(1,e.rgb))),$e(o,Qt($e(2,e.rgb),1))),ln(.5,e.rgb)),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function PX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(ve($e(2,$e(s.rgb,e.rgb)),Qt(1,$e(2,$e(Qt(1,s.rgb),Qt(1,e.rgb)))),ln(.5,e.rgb)),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function IX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=Jc(s.rgb),o=Jc(e.rgb),a=s.rgb.sub(r),l=e.rgb.sub(o),c=a.length();return F(un($e(un($e(l.normalize(),c),r),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function DX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=Jc(s.rgb),o=Jc(e.rgb),a=s.rgb.sub(r),l=e.rgb.sub(o);return F(un($e(un($e(a.normalize(),l.length()),r),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}var HU={normal:cX,"normal-oklch":pX,"normal-oklab":gX,multiply:xX,screen:yX,linearDodge:bX,overlay:vX,difference:_X,colorDodge:SX,exclusion:TX,color:MX,luminosity:wX,darken:AX,lighten:CX,colorBurn:EX,linearBurn:RX,softLight:NX,hardLight:PX,hue:IX,saturation:DX};function tp(s,e,t="normal",n=1){return(HU[t]||HU.normal)(s,e,n)}function FX(s,e){let t=$e(s.a,e.a);return F(s.rgb,t)}function UX(s,e){let t=Qt(1,e.a),n=$e(s.a,t);return F(s.rgb,n)}function LX(s,e){let t=de(.2126,.7152,.0722),n=Nt(e.rgb,t),i=$e(s.a,n);return F(s.rgb,i)}function BX(s,e){let t=de(.2126,.7152,.0722),n=Qt(1,Nt(e.rgb,t)),i=$e(s.a,n);return F(s.rgb,i)}var WU={alpha:FX,alphaInverted:UX,luminance:LX,luminanceInverted:BX};function OX(s,e,t="alpha"){return(WU[t]||WU.alpha)(s,e)}var kX=class{frameTimesMs=[];frameTimesIndex=0;frameTimesCount=0;maxSamples=60;targetFrameTime=16.67;jankFrameCount=0;totalFrameCount=0;memorySnapshots=[];memorySnapshotIndex=0;maxMemorySnapshots=300;nodeCount=0;rttNodeCount=0;lastCpuTime=null;lastGpuTime=null;isRendering=!1;lastFrameTimestamp=0;frameIntervals=[];frameIntervalsIndex=0;frameIntervalsCount=0;pushToCircularBuffer(s,e,t,n,i){return s.length<i?(s.push(e),{index:s.length,count:s.length}):(s[t%i]=e,{index:t+1,count:i})}getBufferValues(s,e){return e<=s.length?s.slice(0,e):s}recordFrame(s){let e=this.pushToCircularBuffer(this.frameTimesMs,s,this.frameTimesIndex,this.frameTimesCount,this.maxSamples);this.frameTimesIndex=e.index,this.frameTimesCount=e.count,this.totalFrameCount++,s>this.targetFrameTime&&this.jankFrameCount++;let t=performance.now();if(this.lastFrameTimestamp>0){let n=t-this.lastFrameTimestamp,i=this.pushToCircularBuffer(this.frameIntervals,n,this.frameIntervalsIndex,this.frameIntervalsCount,this.maxSamples);this.frameIntervalsIndex=i.index,this.frameIntervalsCount=i.count}this.lastFrameTimestamp=t,this.recordMemorySnapshot()}recordCpuTime(s){this.lastCpuTime=s}recordGpuTime(s){this.lastGpuTime=s}updateNodeCounts(s,e){this.nodeCount=s,this.rttNodeCount=e}setRendering(s){this.isRendering=s}recordMemorySnapshot(){if(!performance.memory)return;let s=performance.now(),e=performance.memory.usedJSHeapSize;if(this.memorySnapshots.length<this.maxMemorySnapshots)this.memorySnapshots.push({time:s,bytes:e});else{let t=this.memorySnapshots[this.memorySnapshotIndex];t.time=s,t.bytes=e,this.memorySnapshotIndex=(this.memorySnapshotIndex+1)%this.maxMemorySnapshots}}calculateMemoryGrowthRate(){if(this.memorySnapshots.length<2)return null;let s=this.memorySnapshots.length,e=s<this.maxMemorySnapshots?0:this.memorySnapshotIndex,t=s<this.maxMemorySnapshots?s-1:(this.memorySnapshotIndex-1+s)%s,n=this.memorySnapshots[e],i=this.memorySnapshots[t],r=(i.time-n.time)/1e3;return r<=0?null:(i.bytes-n.bytes)/(1024*1024)/r}calculateStdDev(s){if(s.length===0)return 0;let e=s.reduce((n,i)=>n+i,0)/s.length,t=0;for(let n=0;n<s.length;n++){let i=s[n]-e;t+=i*i}return Math.sqrt(t/s.length)}sortBuffer=[];calculateP99(s){let e=s.length;if(e===0)return 0;for(;this.sortBuffer.length<e;)this.sortBuffer.push(0);for(let n=0;n<e;n++)this.sortBuffer[n]=s[n];for(let n=1;n<e;n++){let i=this.sortBuffer[n],r=n-1;for(;r>=0&&this.sortBuffer[r]>i;)this.sortBuffer[r+1]=this.sortBuffer[r],r--;this.sortBuffer[r+1]=i}let t=Math.floor(e*.99);return this.sortBuffer[Math.min(t,e-1)]}calculateComplexityScore(){return this.nodeCount+this.rttNodeCount*10}calculateIntensityScore(){let s=this.getBufferValues(this.frameTimesMs,this.frameTimesCount),e=s.length;if(e===0)return{score:0,label:"N/A"};let t=s.reduce((u,h)=>u+h,0)/e,n=Math.min(t/16.67*100,100),i=this.calculateComplexityScore(),r=Math.min(i/100*100,100),o=0;this.lastGpuTime!==null&&(o=Math.min(this.lastGpuTime/16.67*100,100));let a=this.lastGpuTime!==null?{frame:.4,gpu:.4,complexity:.2}:{frame:.7,gpu:0,complexity:.3},l=Math.round(n*a.frame+o*a.gpu+r*a.complexity),c;return l<=20?c="Very Light":l<=40?c="Light":l<=60?c="Medium":l<=80?c="Heavy":c="Very Heavy",{score:Math.min(l,100),label:c}}getStats(s){let e=this.getBufferValues(this.frameTimesMs,this.frameTimesCount),t=this.getBufferValues(this.frameIntervals,this.frameIntervalsCount),n=e.length,i=t.length>0?1e3/(t.reduce((v,_)=>v+_,0)/t.length):0,r=n>0?e.reduce((v,_)=>v+_,0)/n:0,o=n>0?Math.min(...e):0,a=n>0?Math.max(...e):0,l=this.calculateP99(e),c=this.calculateStdDev(e),u=this.totalFrameCount>0?this.jankFrameCount/this.totalFrameCount*100:0,h=performance.memory,p=h?h.usedJSHeapSize/(1024*1024):null,f=this.calculateMemoryGrowthRate(),m=r>0?r/this.targetFrameTime*100:0,g=s?.render?.calls??null,y=s?.programs?.length??null,x=s?.memory?.textures??null,b=this.calculateIntensityScore();return{fps:Math.round(i),avgFrameTime:Math.round(r*100)/100,minFrameTime:Math.round(o*100)/100,maxFrameTime:Math.round(a*100)/100,p99FrameTime:Math.round(l*100)/100,stdDevFrameTime:Math.round(c*100)/100,jankCount:this.jankFrameCount,jankPercent:Math.round(u*10)/10,nodeCount:this.nodeCount,rttNodeCount:this.rttNodeCount,complexityScore:this.calculateComplexityScore(),memoryUsedMB:p!==null?Math.round(p*100)/100:null,memoryGrowthRate:f!==null?Math.round(f*1e3)/1e3:null,cpuTime:this.lastCpuTime!==null?Math.round(this.lastCpuTime*100)/100:null,gpuTime:this.lastGpuTime!==null?Math.round(this.lastGpuTime*100)/100:null,budgetUsed:Math.round(m*10)/10,drawCalls:g,shaderPrograms:y,textureCount:x,intensityScore:b.score,intensityLabel:b.label,isRendering:this.isRendering}}reset(){this.frameTimesMs.length=0,this.frameTimesIndex=0,this.frameTimesCount=0,this.frameIntervals.length=0,this.frameIntervalsIndex=0,this.frameIntervalsCount=0,this.lastFrameTimestamp=0,this.jankFrameCount=0,this.totalFrameCount=0,this.memorySnapshots.length=0,this.memorySnapshotIndex=0,this.sortBuffer.length=0,this.lastCpuTime=null,this.lastGpuTime=null}},kw=s=>s?s.offsetX!==0||s.offsetY!==0||s.rotation!==0||s.scale!==1||s.anchorX!==.5||s.anchorY!==.5:!1,VX=(s,e,t,n,i,r,o,a)=>{let l=n.mul(Qs).div(d(180)),c=ke(l),u=ue(l),h=R(r,o),p=s.sub(h).div(i),f=R(p.x.mul(a),p.y),m=R(f.x.mul(c).sub(f.y.mul(u)),f.x.mul(u).add(f.y.mul(c)));return R(m.x.div(a),m.y).sub(R(e,t)).add(h)},zX=new Map([[_e,kI],[ft,VI]]);function $U(s,e,t){let n={};return Object.entries(s.props).forEach(([i,r])=>{let o=e[i],a=o;if(r.transform){let c=r.transform(o);a=c?.node??c}if(a==null&&(a=r.default,r.transform&&a!==null&&a!==void 0)){let c=r.transform(a);a=c?.node??c}a==null&&(console.error(`[Shaders] Uniform "${i}" is null/undefined after fallback. PropConfig:`,{propName:i,initialValue:o,default:r.default,hasTransform:!!r.transform}),a=0);let l=ee(a).setName(`${i}_${t}`);typeof a=="string"&&l.value===null&&(l.value=a),n[i]={uniform:l,transform:r.transform||void 0,compileTime:r.compileTime||!1,...r.compileTimeWhen?{compileTimeWhen:r.compileTimeWhen,_lastCompiledValue:o??r.default}:{}}}),n}function GX(s,e){if(s?.transform){let t=zX.get(s.transform);if(t){let n=t(e);s.uniform.value&&typeof s.uniform.value.copy=="function"?s.uniform.value.copy(n):s.uniform.value=n}else{let n=s.transform(e),i=n?.data??n;s.uniform.value&&typeof s.uniform.value.copy=="function"&&i&&typeof i.copy=="function"?s.uniform.value.copy(i):s.uniform.value=i}}else s.uniform.value=e}var HX=(()=>{let s=0,e=new Set,t=o=>{e.forEach(a=>{try{a.onMouseMove(o)}catch(l){console.error("[Shaders] Error in mouse move handler:",l)}})},n=o=>{e.forEach(a=>{try{a.onTouchMove(o)}catch(l){console.error("[Shaders] Error in touch move handler:",l)}})},i=()=>{e.forEach(o=>{try{o.onMouseUp()}catch(a){console.error("[Shaders] Error in mouse up handler:",a)}})},r=()=>{e.forEach(o=>{try{o.onTouchEnd()}catch(a){console.error("[Shaders] Error in touch end handler:",a)}})};return{register(o){return e.add(o),s++,s===1&&(window.addEventListener("mousemove",t),window.addEventListener("touchmove",n),window.addEventListener("mouseup",i),window.addEventListener("touchend",r)),()=>{e.delete(o),s--,s===0&&(window.removeEventListener("mousemove",t),window.removeEventListener("touchmove",n),window.removeEventListener("mouseup",i),window.removeEventListener("touchend",r))}}}})(),Vw=(s,e,t,n,i,r)=>{if(n===0&&i===0)return[t,0];let o=200*Math.pow(.01,n),a=2*Math.sqrt(o)*(1-i*.85),l=e+(o*(t-s)-a*e)*r;return[s+l*r,l]};function qU(){let s=null,e,t=null,n=!1,i,r,o,a,l={nodes:new Map,rootId:null,idToNodeId:new Map},c=new Map,u=null,h=null,p=null,f=!1,m=!1,g="p3-linear",y="linear",x=!1,b=null,v=!1,_=!0,M=!1,T=0,w=0,S=0,A=0,I=!1,N=.5,P=.5,B=!1,U=null,D=!1,L=!1,k=null,W=null,$=null,ie=null,xe=8192,he=0,Pe=0,Ge=!0,He=new kX,oe=[],be=!1,Te=null,Fe=!1,ze=!1,fe=null,Xe=!1,Re=j=>{if(!Xe){Xe=!0;try{Fa()}catch{}fe&&queueMicrotask(()=>{try{fe?.(j)}catch(ae){console.error("[Shaders] onDeviceLost callback threw:",ae)}})}},Y=null,ye=new Set,Me=new Set,Le=0,Ye=new Set,tt=new Set,et=new Set,Qe=new Set,nt=new Set,J=new Set,Ie={deltaTime:0,pointer:{x:.5,y:.5},pointerActive:!1,dimensions:{width:0,height:0}},Ee=null,O=!1,E=(j,ae)=>{let re=e?.getPixelRatio?.()??1,pe=Math.max(1,Math.floor(xe/re)-1),vt=Math.min(j,window.innerWidth,pe),it=Math.min(ae,window.innerHeight,pe),At=Math.min(vt/j,it/ae,1);return{width:Math.max(1,Math.round(j*At)),height:Math.max(1,Math.round(ae*At))}},z=(j,ae)=>{j<=0||ae<=0||j===he&&ae===Pe||(he=j,Pe=ae,Ee={width:j,height:ae},O||(O=!0,requestAnimationFrame(()=>{if(O=!1,!Ee)return;let re=Ee;Ee=null;let{width:pe,height:vt}=E(re.width,re.height);T=pe,w=vt,x||(x=!0,l.nodes.size>0&&Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()}))),e.setSize(pe,vt,!1);let it=pe/vt,At=2,yt=At*it;i.left=-yt/2,i.right=yt/2,i.top=At/2,i.bottom=-At/2,i.updateProjectionMatrix(),o.scale.set(yt,At,1),l.nodes.forEach(je=>{je.transformUniforms?.aspectRatio&&(je.transformUniforms.aspectRatio.value=it),je.resizeCallbacks.forEach(Ct=>{try{Ct({width:pe,height:vt})}catch(rt){console.error("Error in resize callback:",rt)}})}),S=0,Hs()})))},q=()=>f&&!!e&&!!r&&!!i&&!!a&&T>0&&w>0,Q=j=>{if(!e||!i||!o)return;let ae=j[0];if(!ae)return;let re,pe;if(ae.contentBoxSize){let vt=Array.isArray(ae.contentBoxSize)?ae.contentBoxSize[0]:ae.contentBoxSize;vt?(re=Math.round(vt.inlineSize),pe=Math.round(vt.blockSize)):(re=Math.round(ae.contentRect.width),pe=Math.round(ae.contentRect.height))}else re=Math.round(ae.contentRect.width),pe=Math.round(ae.contentRect.height);re===0||pe===0||z(re,pe)},Se=j=>{let ae=j[0];ae&&(v=ae.isIntersecting)},Ae=(j,ae)=>{if(j.size!==ae.size)return!1;for(let re of j)if(!ae.has(re))return!1;return!0},K=()=>{et.clear(),Qe.clear(),nt.clear(),J.clear();for(let[j,ae]of l.nodes){ae.beforeRenderCallbacks.length>0&&et.add(j),ae.afterRenderCallbacks.length>0&&Qe.add(j),ae.computeGetNodes&&nt.add(j);let re=ae.mouseDriverState,pe=ae.autoAnimateState,vt=!!re&&Object.keys(re).length>0,it=!!pe&&Object.keys(pe).length>0;(vt||it)&&J.add(j)}},Z=j=>{Le++;let ae=_t(j);return Ye.add(ae),ae},me=()=>{tt.forEach(j=>{try{j?.renderTarget?.dispose&&j.renderTarget.dispose()}catch{}}),tt.clear()},Ze=j=>{let ae=de(j.x,j.y,j.z),re=j.w,pe=ae.mul(16),vt=pe.mul(pe.mul(.15).add(.05)).add(.004),it=pe.mul(pe.mul(.15).add(.5)).add(.06),At=vt.div(it).sub(.02/.3);return F(At.x,At.y,At.z,re)},Be=j=>{let ae=de(j.x,j.y,j.z),re=j.w,pe=ae.div(ae.add(.155)).mul(1.019);return F(pe.x,pe.y,pe.z,re)},Je=j=>{y=j,e&&(e.toneMapping={linear:Bs,reinhard:Tu,cineon:Mu,aces:wu,agx:Au,neutral:Cu}[j]??Bs)},gt=!1,xt=()=>{if(!(!l.rootId||!a||D)&&l.nodes.get(l.rootId)){if(T===0||w===0){gt||(gt=!0,requestAnimationFrame(()=>{gt=!1,T>0&&w>0&&xt()}));return}D=!0;try{tt=new Set(Ye),Ye.clear();let j=new Set;Me.clear(),l.nodes.forEach((re,pe)=>{(re.requiresRTT||re.transformRTTActive)&&Me.add(pe)}),Le=0;let ae=Gs(l.rootId,new Set,j);if(ae&&a){let re=!Ae(ye,j),pe=ae;y==="hable"?pe=Ze(ae):y==="unreal"&&(pe=Be(ae));let vt=a.fragmentNode!==pe;if(re||I||vt){me();try{a.dispose(),e.renderTarget&&e.renderTarget.dispose()}catch{}let it=new Dh({transparent:!0});it.fragmentNode=pe,it.needsUpdate=!0,o.material=it,a=it,I=!1,ye=j,!Fe&&j.size>0&&(ze=!0)}}}catch(j){console.error("Error composing shader tree:",j)}finally{D=!1,L=!1}K(),u||Hs()}},Dt=j=>{let ae=c.get(j);if(!ae)return[];let re=[];for(let pe of ae){let vt=l.nodes.get(pe);vt&&re.push(vt)}return re},se=j=>j.replace(/[^a-zA-Z0-9_]/g,"_"),st=j=>{let ae=se(j);for(let[re,pe]of l.nodes.entries())if(pe.metadata.id===ae)return re;return null},De=(j,ae,re,pe,vt)=>{if(!ae.metadata.mask?.source)return j;let it=ae.metadata.mask.source,At=st(it);if(!At)return j;if(pe.has(At))return console.error("Uh oh, looks like you've got a circular dependency in your shader masks."),j;let yt=new Set(pe);yt.add(re);let je=Gs(At,yt),Ct=je;vt&&(Ct=Z(je).sample(vt));let rt=ae.metadata.mask.type||"alpha";return OX(j,Ct,rt)},dt=(j,ae,re,pe,vt)=>{let it=st(j.source);if(!it)return null;if(ae.has(it))return console.error(`[Shaders] Circular dependency detected in prop maps: node "${j.source}" is already being processed.`),null;let At=new Set(ae);At.add(re);let yt=Z(Gs(it,At)),je=yt.sample(vt??H),Ct;switch(j.channel){case"alpha":Ct=je.a;break;case"alphaInverted":Ct=je.a.oneMinus();break;case"luminanceInverted":Ct=Nt(je.rgb,de(.2126,.7152,.0722)).oneMinus();break;default:Ct=Nt(je.rgb,de(.2126,.7152,.0722));break}let rt=l.nodes.get(re);if(!rt)return null;rt.mapUniforms||(rt.mapUniforms={}),rt.mapUniforms[pe]?(rt.mapUniforms[pe].inputMin.value=j.inputMin,rt.mapUniforms[pe].inputMax.value=j.inputMax,rt.mapUniforms[pe].outputMin.value=j.outputMin,rt.mapUniforms[pe].outputMax.value=j.outputMax,rt.mapUniforms[pe].curve.value=j.curve??0,rt.mapUniforms[pe].sourceTexture=yt,rt.mapUniforms[pe].channel=j.channel):rt.mapUniforms[pe]={inputMin:ee(j.inputMin),inputMax:ee(j.inputMax),outputMin:ee(j.outputMin),outputMax:ee(j.outputMax),curve:ee(j.curve??0),sourceTexture:yt,channel:j.channel};let{inputMin:Sn,inputMax:sn,outputMin:at,outputMax:qn,curve:zt}=rt.mapUniforms[pe],rn=St(sn.sub(Sn),1e-4);return ve(at,qn,Pt(ht(Ct.sub(Sn).div(rn),0,1),Pt(d(2),zt.negate().mul(2))))},Et=(j,ae,re)=>{let pe=l.nodes.get(ae);if(!pe)return null;if(pe.mouseDriverState||(pe.mouseDriverState={}),!pe.mouseDriverState[re]){let vt=j.x===void 0||j.x==="mouse",it=j.y===void 0||j.y==="mouse",At=vt?N:j.x,yt=it?P:j.y,je=ee(new on(At,1-yt));pe.mouseDriverState[re]={currentX:At,currentY:yt,velocityX:0,velocityY:0,smoothedUniform:je}}return pe.mouseDriverState[re].smoothedUniform},ot=(j,ae,re)=>{let pe=l.nodes.get(ae);if(!pe)return null;if(pe.mouseDriverState||(pe.mouseDriverState={}),!pe.mouseDriverState[re]){let je=Math.max(.001,j.axis==="x"?N:P),Ct=ee(je);pe.mouseDriverState[re]={currentX:je,currentY:0,velocityX:0,velocityY:0,smoothedUniform:Ct}}pe.mapUniforms||(pe.mapUniforms={}),pe.mapUniforms[re]?(pe.mapUniforms[re].outputMin.value=j.outputMin,pe.mapUniforms[re].outputMax.value=j.outputMax,pe.mapUniforms[re].curve.value=j.curve??0):pe.mapUniforms[re]={inputMin:ee(0,"float"),inputMax:ee(1,"float"),outputMin:ee(j.outputMin,"float"),outputMax:ee(j.outputMax,"float"),curve:ee(j.curve??0,"float")};let{outputMin:vt,outputMax:it,curve:At}=pe.mapUniforms[re],yt=pe.mouseDriverState[re].smoothedUniform;return ve(vt,it,Pt(yt,Pt(d(2),At.negate().mul(2))))},Vt=(j,ae,re)=>{let pe=l.nodes.get(ae);return pe?(pe.autoAnimateState||(pe.autoAnimateState={}),pe.autoAnimateState[re]||(pe.autoAnimateState[re]={smoothedUniform:ee(j.outputMin,"float")}),pe.autoAnimateState[re].smoothedUniform):null},Lt=(j,ae,re,pe)=>{if(!ae||Object.keys(ae).length===0)return j;let vt={...j},it=l.nodes.get(re),At=it?.mapSampleUVsFunc?.(j)??{};for(let[yt,je]of Object.entries(ae)){let Ct=null;if(je.type==="map"){if(!(yt in vt))continue;Ct=dt(je,pe,re,yt,At[yt])}else if(je.type==="mouse-position"){Ct=Et(je,re,yt),Ct!==null&&yt in vt&&(vt[yt]={...vt[yt],uniform:Ct});continue}else if(je.type==="mouse"){if(!(yt in vt))continue;Ct=ot(je,re,yt)}else if(je.type==="auto-animate"){if(!(yt in vt))continue;Ct=Vt(je,re,yt)}if(Ct!==null&&yt in vt){let rt;if(je.type==="map"){let sn=it?.mapUniforms?.[yt];sn?.sourceTexture&&sn?.channel&&(rt={sourceTexture:sn.sourceTexture,channel:sn.channel,inputMin:sn.inputMin,inputMax:sn.inputMax,outputMin:sn.outputMin,outputMax:sn.outputMax,curve:sn.curve})}let Sn;je.type==="mouse"&&(Sn=()=>{let sn=it?.mouseDriverState?.[yt],at=it?.mapUniforms?.[yt];if(!sn||!at)return 0;let qn=sn.smoothedUniform.value,zt=at.outputMin.value,rn=at.outputMax.value,vs=Math.pow(2,-(at.curve.value*2));return zt+(rn-zt)*Math.pow(qn,vs)}),vt[yt]={...vt[yt],uniform:Ct,...rt?{mapComputeInfo:rt}:{},...Sn?{getCpuValue:Sn}:{}}}}return vt},zn=(j,ae)=>{if(!ae.metadata.transform||!ae.transformUniforms||!kw(ae.metadata.transform)&&!ae.transformRTTActive)return j;let re=Z(j),pe=VX(H,ae.transformUniforms.offsetX,ae.transformUniforms.offsetY,ae.transformUniforms.rotation,ae.transformUniforms.scale,ae.transformUniforms.anchorX,ae.transformUniforms.anchorY,ae.transformUniforms.aspectRatio);return En(pe,re.sample(pe),re,ae.transformUniforms.edges.value)},Rn=(j,ae)=>{if(j.computeOutputs=void 0,j.computeGetNodes=void 0,!(typeof window<"u"&&window.sessionStorage?.getItem("__shadersForceWebGL")==="1")&&j.computeNodeFunc&&e.backend?.isWebGPUBackend===!0)try{let re=j.computeNodeFunc(ae);if(re)return j.computeOutputs=re.outputs,j.computeGetNodes=re.getComputeNodes,re.outputs}catch(re){console.error(`Error initializing compute for node ${j.id}:`,re)}},Gs=(j,ae=new Set,re)=>{if(T===0||w===0)return F(0,0,0,0);let pe=l.nodes.get(j);if(!pe)return F(0,0,0,0);let vt=Ct=>{pe.cleanupCallbacks.push(Ct)},it=Ct=>{pe.beforeRenderCallbacks.push(Ct)},At=Ct=>{pe.afterRenderCallbacks.push(Ct)},yt=Ct=>{pe.resizeCallbacks.push(Ct)},je=Dt(j);if(je.length===0){pe.cleanupCallbacks.forEach(rt=>{try{rt()}catch(Sn){console.error("Error in cleanup callback:",Sn)}}),pe.cleanupCallbacks=[],pe.beforeRenderCallbacks=[],pe.afterRenderCallbacks=[],pe.resizeCallbacks=[];let Ct={uniforms:Lt(pe.uniforms??{},pe.metadata.maps,j,ae),childNode:void 0,onCleanup:vt,onBeforeRender:it,onAfterRender:At,onResize:yt,canvas:s,dimensions:{width:T,height:w},renderer:e,domCanvas:pe.domCanvas};return Ct.computeOutputs=Rn(pe,Ct),De(zn(pe.fragmentNodeFunc(Ct),pe),pe,j,ae)}else{let Ct=[...je].sort((rt,Sn)=>rt.metadata.renderOrder-Sn.metadata.renderOrder);if(pe.parentId===null){let rt;for(let sn=0;sn<Ct.length;sn++){let at=Ct[sn],qn;if(at.metadata.opacity===void 0?(qn=1,at.opacityUniform.value=qn):(qn=at.metadata.opacity,at.opacityUniform.value=qn),at.metadata.visible===!1)continue;re&&re.add(at.id);let zt=Dt(at.id).length>0,rn;if(zt)rn=Gs(at.id,ae,re);else{let vs=li=>{at.cleanupCallbacks.push(li)},Vn=li=>{at.beforeRenderCallbacks.push(li)},fi=li=>{at.afterRenderCallbacks.push(li)},Xr=li=>{at.resizeCallbacks.push(li)},Fo=rt;at.requiresRTT&&rt!==void 0&&(Fo=tp(F(0,0,0,0),rt,"normal",1)),at.cleanupCallbacks.forEach(li=>{try{li()}catch(nu){console.error("Error in cleanup callback:",nu)}}),at.cleanupCallbacks=[],at.beforeRenderCallbacks=[],at.afterRenderCallbacks=[],at.resizeCallbacks=[];let La={uniforms:Lt(at.uniforms??{},at.metadata.maps,at.id,ae),childNode:Fo,onCleanup:vs,onBeforeRender:Vn,onAfterRender:fi,onResize:Xr,canvas:s,dimensions:{width:T,height:w},renderer:e,domCanvas:at.domCanvas};La.computeOutputs=Rn(at,La),rn=De(zn(at.fragmentNodeFunc(La),at),at,at.id,ae)}at.requiresChild&&at.metadata.blendMode==="normal"&&!zt?rt=ve(rt||F(0,0,0,0),rn,at.opacityUniform):rt===void 0?pe.requiresRTT||qn!==1?rt=tp(F(1,1,1,0),rn,at.metadata.blendMode,at.opacityUniform):rt=rn:rt=tp(rt,rn,at.metadata.blendMode,at.opacityUniform)}pe.cleanupCallbacks.forEach(sn=>{try{sn()}catch(at){console.error("Error in cleanup callback:",at)}}),pe.cleanupCallbacks=[],pe.beforeRenderCallbacks=[],pe.afterRenderCallbacks=[],pe.resizeCallbacks=[];let Sn={uniforms:Lt(pe.uniforms??{},pe.metadata.maps,j,ae),childNode:rt,onCleanup:vt,onBeforeRender:it,onAfterRender:At,onResize:yt,canvas:s,dimensions:{width:T,height:w},renderer:e,domCanvas:pe.domCanvas};return Sn.computeOutputs=Rn(pe,Sn),De(zn(pe.fragmentNodeFunc(Sn),pe),pe,j,ae)}else{let rt;for(let sn=0;sn<Ct.length;sn++){let at=Ct[sn],qn;if(at.metadata.opacity===void 0?(qn=1,at.opacityUniform.value=qn):(qn=at.metadata.opacity,at.opacityUniform.value=qn),at.metadata.visible===!1)continue;re&&re.add(at.id);let zt=Dt(at.id).length>0,rn;if(zt)rn=Gs(at.id,ae,re);else{let vs=li=>{at.cleanupCallbacks.push(li)},Vn=li=>{at.beforeRenderCallbacks.push(li)},fi=li=>{at.afterRenderCallbacks.push(li)},Xr=li=>{at.resizeCallbacks.push(li)},Fo=rt;at.requiresRTT&&rt!==void 0&&(Fo=tp(F(0,0,0,0),rt,"normal",1)),at.cleanupCallbacks=[],at.beforeRenderCallbacks=[],at.afterRenderCallbacks=[],at.resizeCallbacks=[];let La={uniforms:Lt(at.uniforms??{},at.metadata.maps,at.id,ae),childNode:Fo,onCleanup:vs,onBeforeRender:Vn,onAfterRender:fi,onResize:Xr,canvas:s,dimensions:{width:T,height:w},renderer:e,domCanvas:at.domCanvas};La.computeOutputs=Rn(at,La),rn=De(zn(at.fragmentNodeFunc(La),at),at,at.id,ae)}at.requiresChild&&at.metadata.blendMode==="normal"&&!zt?rt=ve(rt||F(0,0,0,0),rn,at.opacityUniform):rt===void 0?pe.requiresRTT||qn!==1?rt=tp(F(1,1,1,0),rn,at.metadata.blendMode,at.opacityUniform):rt=rn:rt=tp(rt,rn,at.metadata.blendMode,at.opacityUniform)}pe.cleanupCallbacks.forEach(sn=>{try{sn()}catch(at){console.error("Error in cleanup callback:",at)}}),pe.cleanupCallbacks=[],pe.beforeRenderCallbacks=[],pe.afterRenderCallbacks=[],pe.resizeCallbacks=[];let Sn={uniforms:Lt(pe.uniforms??{},pe.metadata.maps,j,ae),childNode:rt,onCleanup:vt,onBeforeRender:it,onAfterRender:At,onResize:yt,canvas:s,dimensions:{width:T,height:w},renderer:e,domCanvas:pe.domCanvas};return Sn.computeOutputs=Rn(pe,Sn),De(zn(pe.fragmentNodeFunc(Sn),pe),pe,j,ae)}}},ei=(j,ae,re,pe,vt={},it,At)=>{if(ae===null){let sn=oe.findIndex(at=>at.id===j);if(sn!==-1){oe.splice(sn,1);return}xl(j);return}if(!be){let sn=oe.findIndex(at=>at.id===j);sn!==-1?oe[sn]={id:j,fragmentNodeFunc:ae,parentId:re,metadata:pe,uniforms:vt,componentDefinition:it,domCanvas:At}:oe.push({id:j,fragmentNodeFunc:ae,parentId:re,metadata:pe,uniforms:vt,componentDefinition:it,domCanvas:At});return}let yt=0;if(re!==null){let sn=c.get(re);if(sn&&sn.size>0){let at=0;for(let qn of sn){let zt=l.nodes.get(qn);zt&&zt.metadata.renderOrder>at&&(at=zt.metadata.renderOrder)}yt=at+1}}let je=ee(pe?.opacity!==void 0?pe.opacity:1),Ct;if(pe?.transform){let sn=T/Math.max(1,w),at=pe.transform;Ct={offsetX:ee(at.offsetX??0),offsetY:ee(at.offsetY??0),rotation:ee(at.rotation??0),scale:ee(at.scale??1),anchorX:ee(at.anchorX??.5),anchorY:ee(at.anchorY??.5),edges:ee(at.edges==="stretch"?0:at.edges==="transparent"?1:at.edges==="mirror"?2:at.edges==="wrap"?3:1),aspectRatio:ee(sn)}}let rt={id:j,componentName:it?.name||"Unknown",fragmentNodeFunc:ae,parentId:re,requiresRTT:it?.requiresRTT||!1,requiresChild:it?.requiresChild||!1,opacityUniform:je,metadata:{blendMode:pe?.blendMode||"normal",opacity:pe?.opacity,visible:pe?.visible!==!1,id:pe?.id?se(pe.id):pe?.id,mask:pe?.mask,maps:pe?.maps,renderOrder:pe?.renderOrder!==void 0?pe?.renderOrder:yt,transform:pe?.transform},uniforms:vt,cleanupCallbacks:[],beforeRenderCallbacks:[],afterRenderCallbacks:[],resizeCallbacks:[],transformUniforms:Ct,transformRTTActive:!1,mapSampleUVsFunc:it?.mapSampleUVs,computeNodeFunc:it?.computeNode,usesPointer:it?.usesPointer,domCanvas:At};l.nodes.set(j,rt),re===null&&(l.rootId=j),Ua();let Sn=c.get(re)||new Set;Sn.add(j),c.set(re,Sn),a&&f&&T>0&&w>0?Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()})):a&&f&&(gt||(gt=!0,requestAnimationFrame(()=>{gt=!1,T>0&&w>0&&xt()})))},ml=(j,ae,re)=>{let pe=l.nodes.get(j);if(!pe||!pe.uniforms)return;let vt=pe.uniforms[ae];if(!(!vt||!vt.uniform)){if(vt.transform?(gw(g),GX(vt,re)):vt.uniform.value=re,vt.compileTime&&a&&f&&T>0&&w>0){Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()}));return}if(vt.compileTimeWhen&&a&&f&&T>0&&w>0){let it=vt._lastCompiledValue;if(vt.compileTimeWhen(it,re)){vt._lastCompiledValue=re,Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()}));return}}u||Hs()}},gl=(j,ae)=>{let re=l.nodes.get(j);if(!re)return;let pe=!1;ae.blendMode!==void 0&&re.metadata.blendMode!==ae.blendMode&&(re.metadata.blendMode=ae.blendMode,pe=!0),ae.opacity!==void 0&&re.metadata.opacity!==ae.opacity&&(re.metadata.opacity=ae.opacity,re.opacityUniform.value=ae.opacity),ae.renderOrder!==void 0&&re.metadata.renderOrder!==ae.renderOrder&&(re.metadata.renderOrder=ae.renderOrder,pe=!0);let vt=ae.visible!==!1;if(re.metadata.visible!==vt&&(re.metadata.visible=vt,pe=!0),ae.id!==void 0){let it=se(ae.id);re.metadata.id!==it&&(re.metadata.id=it,pe=!0)}if("mask"in ae&&(re.metadata.mask?.source!==ae.mask?.source||re.metadata.mask?.type!==ae.mask?.type)&&(re.metadata.mask=ae.mask,pe=!0),"maps"in ae&&JSON.stringify(re.metadata.maps)!==JSON.stringify(ae.maps)){let it=re.metadata.maps,At=ae.maps;if(re.metadata.maps=At,Ua(),(()=>{if(!it||!At)return!0;let yt=Object.keys(it),je=Object.keys(At);if(yt.length!==je.length||!yt.every(Ct=>Ct in At))return!0;for(let Ct of je){let rt=it[Ct],Sn=At[Ct];if(rt.type!==Sn.type)return!0;if(Sn.type==="map"){let sn=Sn,at=rt;if(at.source!==sn.source||at.channel!==sn.channel||!re.mapUniforms?.[Ct])return!0}else if(Sn.type==="mouse"){let sn=Sn;if(rt.axis!==sn.axis||!re.mouseDriverState?.[Ct])return!0}else if(Sn.type==="mouse-position"){if(!re.mouseDriverState?.[Ct])return!0}else if(Sn.type==="auto-animate"&&!re.autoAnimateState?.[Ct])return!0}return!1})()){if(it&&At)for(let yt of Object.keys(it))yt in At&&it[yt].type!==At[yt].type&&re.autoAnimateState&&delete re.autoAnimateState[yt];if(it&&At&&re.mouseDriverState)for(let yt of Object.keys(it))yt in At&&it[yt].type!==At[yt].type&&delete re.mouseDriverState[yt];pe=!0}else for(let[yt,je]of Object.entries(At))if(je.type==="map"){let Ct=je,rt=re.mapUniforms[yt];rt&&(rt.inputMin.value=Ct.inputMin,rt.inputMax.value=Ct.inputMax,rt.outputMin.value=Ct.outputMin,rt.outputMax.value=Ct.outputMax,rt.curve.value=Ct.curve??0)}else if(je.type==="mouse"){let Ct=je,rt=re.mapUniforms?.[yt];rt&&(rt.outputMin.value=Ct.outputMin,rt.outputMax.value=Ct.outputMax,rt.curve.value=Ct.curve??0)}else if(je.type==="auto-animate"){let Ct=je,rt=re.mapUniforms?.[yt];rt&&(rt.outputMin.value=Ct.outputMin,rt.outputMax.value=Ct.outputMax)}}if(ae.transform!==void 0){let it={offsetX:ae.transform.offsetX??re.metadata.transform?.offsetX??0,offsetY:ae.transform.offsetY??re.metadata.transform?.offsetY??0,rotation:ae.transform.rotation??re.metadata.transform?.rotation??0,scale:ae.transform.scale??re.metadata.transform?.scale??1,anchorX:ae.transform.anchorX??re.metadata.transform?.anchorX??.5,anchorY:ae.transform.anchorY??re.metadata.transform?.anchorY??.5,edges:ae.transform.edges??re.metadata.transform?.edges??"transparent"},At=kw(it);if(re.metadata.transform=it,!re.transformUniforms&&it){let yt=T/Math.max(1,w);re.transformUniforms={offsetX:ee(it.offsetX),offsetY:ee(it.offsetY),rotation:ee(it.rotation),scale:ee(it.scale),anchorX:ee(it.anchorX),anchorY:ee(it.anchorY),edges:ee(it.edges==="stretch"?0:it.edges==="transparent"?1:it.edges==="mirror"?2:3),aspectRatio:ee(yt)}}else if(re.transformUniforms){re.transformUniforms.offsetX.value=it.offsetX,re.transformUniforms.offsetY.value=it.offsetY,re.transformUniforms.rotation.value=it.rotation,re.transformUniforms.scale.value=it.scale,re.transformUniforms.anchorX.value=it.anchorX,re.transformUniforms.anchorY.value=it.anchorY;let yt=re.transformUniforms.edges.value;re.transformUniforms.edges.value=it.edges==="stretch"?0:it.edges==="transparent"?1:it.edges==="mirror"?2:3,re.transformUniforms.edges.value!==yt&&(pe=!0)}At&&!re.transformRTTActive&&(re.transformRTTActive=!0,pe=!0)}pe&&a&&f?Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()})):u||Hs()},xl=j=>{if(!l.nodes.has(j))return;let ae=l.nodes.get(j);if(ae&&ae.cleanupCallbacks.length>0)for(let pe of ae.cleanupCallbacks)try{pe()}catch(vt){console.error(`Error executing cleanup callback for node ${j}:`,vt)}let re=Dt(j);for(let pe of re)xl(pe.id);if(l.rootId===j&&(l.rootId=null),ae){let pe=c.get(ae.parentId);pe&&(pe.delete(j),pe.size===0&&c.delete(ae.parentId))}l.nodes.delete(j),et.delete(j),Qe.delete(j),nt.delete(j),J.delete(j),Ua(),L=!0,a&&f&&Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()}))},yl=j=>j<1/2.75?7.5625*j*j:j<2/2.75?(j-=1.5/2.75,7.5625*j*j+.75):j<2.5/2.75?(j-=2.25/2.75,7.5625*j*j+.9375):(j-=2.625/2.75,7.5625*j*j+.984375),Sd=(j,ae)=>{switch(ae){case"linear":return j;case"quad":return j<.5?2*j*j:1-Math.pow(-2*j+2,2)/2;case"expo":return j===0?0:j===1?1:j<.5?Math.pow(2,20*j-10)/2:(2-Math.pow(2,-20*j+10))/2;case"bounce":return yl(j);default:return(1-Math.cos(Math.PI*j))/2}},Td=()=>{let j=Ie.deltaTime;A+=j;for(let ae of J){let re=l.nodes.get(ae);if(!re)continue;let pe=re.metadata.maps;if(!pe)continue;let vt=re.mouseDriverState;for(let At in vt){let yt=vt[At],je=pe[At];if(je){if(je.type==="mouse-position"){let Ct=je.smoothing??0,rt=je.momentum??0,Sn=je.x===void 0||je.x==="mouse",sn=je.y===void 0||je.y==="mouse",at,qn;if(Sn){let[nu,ky]=Vw(yt.currentX,yt.velocityX,N,Ct,rt,j);yt.currentX=nu,yt.velocityX=ky,at=nu}else at=je.x,yt.velocityX=0;if(sn){let[nu,ky]=Vw(yt.currentY,yt.velocityY,P,Ct,rt,j);yt.currentY=nu,yt.velocityY=ky,qn=nu}else qn=je.y,yt.velocityY=0;let zt=je.reach??1,rn=je.originX??.5,vs=je.originY??.5,Vn=je.invertX?-1:1,fi=je.invertY?-1:1,Xr=rn+Vn*(at-rn)*zt,Fo=vs+fi*(qn-vs)*zt,La=Xr,li=1-Fo;yt.smoothedUniform.value.set(La,li)}else if(je.type==="mouse"){let Ct=je.smoothing??0,rt=je.momentum??0,Sn=je.axis==="x"?N:P,[sn,at]=Vw(yt.currentX,yt.velocityX,Sn,Ct,rt,j);yt.currentX=sn,yt.velocityX=at,yt.smoothedUniform.value=Math.max(.001,sn)}}}let it=re.autoAnimateState;if(it)for(let At in it){let yt=it[At],je=pe[At];if(!je||je.type!=="auto-animate")continue;let Ct=A*(je.speed??1)*.2,rt;if(je.mode==="loop")rt=Sd((Ct%1+1)%1,je.easing??je.waveform??"sine");else{let zt=(Ct%1+1)%1;rt=Sd(zt<.5?zt*2:(1-zt)*2,je.easing??je.waveform??"sine")}let{outputMin:Sn,outputMax:sn}=je,at=Sn+rt*(sn-Sn),qn=re.uniforms?.[At];if(qn?.compileTimeWhen&&a&&f&&T>0&&w>0){let zt=qn._lastCompiledValue;qn.compileTimeWhen(zt,at)&&(qn._lastCompiledValue=at,Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()})))}yt.smoothedUniform.value=at}}},Md=()=>{for(let j of nt){let ae=l.nodes.get(j);if(!(!ae||!ae.computeGetNodes))try{let re=ae.computeGetNodes(Ie);if(re)for(let pe of re)e.compute(pe)}catch(re){console.error(`Error dispatching compute for node ${ae.id}:`,re)}}},uo=()=>{for(let j of et){let ae=l.nodes.get(j);if(ae)for(let re of ae.beforeRenderCallbacks)try{re(Ie)}catch(pe){console.error(`Error executing before render callback for node ${ae.id}:`,pe)}}},Qc=()=>{for(let j of Qe){let ae=l.nodes.get(j);if(ae)for(let re of ae.afterRenderCallbacks)try{re(Ie)}catch(pe){console.error(`Error executing after render callback for node ${ae.id}:`,pe)}}},eu=async()=>{if(!q())throw new Error("Renderer is not ready");let j=u!==null;if(j&&Fa(),S=0,Hs(),e instanceof Bc)try{let ae=e.backend;ae?.device&&await ae.device.queue.onSubmittedWorkDone()}catch{await new Promise(re=>setTimeout(re,16))}j&&vl()},tu=j=>{if(L||!q())return;let ae=Ge?performance.now():0,re=ae||performance.now(),pe;if(j!==void 0)pe=j;else{let vt=S>0?(re-S)/1e3:.016,it=1e3,At=1e3/60-1;if(S>0){let yt=re-S;if(!v&&!M&&yt<it||(v||M)&&yt<At)return}pe=Math.min(vt,.1)}S=re,Ge&&performance.mark("shader-cpu-start"),Ie.deltaTime=pe,Ie.pointer.x=N,Ie.pointer.y=P,Ie.pointerActive=B,Ie.dimensions.width=T,Ie.dimensions.height=w,Td(),Md(),uo();try{if(D)return;if(Ge&&performance.mark("shader-gpu-start"),e.render(r,i),ze&&!Fe&&(Fe=!0,ze=!1,Te&&queueMicrotask(Te)),Qc(),Ge){performance.mark("shader-gpu-end");let vt=!1;if(e instanceof Bc)try{let it=e.backend;if(it&&it.get&&it.get(e)){let At=it.get(e);if(At?.timestampQuery){let yt=At.timestampQuery.getResult();yt!=null&&(He.recordGpuTime(yt/1e6),vt=!0)}}}catch{}try{if(!vt){performance.measure("shader-gpu-time","shader-gpu-start","shader-gpu-end");let it=performance.getEntriesByName("shader-gpu-time")[0];it&&He.recordGpuTime(it.duration),performance.clearMeasures("shader-gpu-time")}performance.clearMarks("shader-gpu-start"),performance.clearMarks("shader-gpu-end")}catch{}}if(Ge){performance.mark("shader-cpu-end");try{performance.measure("shader-cpu-time","shader-cpu-start","shader-cpu-end");let it=performance.getEntriesByName("shader-cpu-time")[0];it&&He.recordCpuTime(it.duration),performance.clearMarks("shader-cpu-start"),performance.clearMarks("shader-cpu-end"),performance.clearMeasures("shader-cpu-time")}catch{}let vt=performance.now()-ae;He.recordFrame(vt)}}catch(vt){console.error("Render frame error:",vt)}},Hs=()=>tu(void 0),wd=async j=>{if(tu(j),e instanceof Bc){let ae=e.backend;ae?.device&&await ae.device.queue.onSubmittedWorkDone()}},bl=()=>{let j=Math.max(0,l.nodes.size-1),ae=Le;He.updateNodeCounts(j,ae)},Ad=()=>{bl();let j=e?.info;return He.getStats(j)},vl=()=>{if(!(u||!_))if(He.setRendering(!0),e&&"setAnimationLoop"in e&&typeof e.setAnimationLoop=="function")e.setAnimationLoop(()=>{Hs()}),u=1;else{let j=()=>{Hs(),u=requestAnimationFrame(j)};j()}},Fa=()=>{u&&(e&&"setAnimationLoop"in e&&typeof e.setAnimationLoop=="function"?e.setAnimationLoop(null):cancelAnimationFrame(u),u=null),He.setRendering(!1)},_l=!1,Ua=()=>{let j=!1;for(let ae of l.nodes.values()){if(ae.usesPointer){j=!0;break}if(ae.metadata.maps){for(let re of Object.values(ae.metadata.maps))if(re&&typeof re=="object"&&"type"in re){let pe=re.type;if(pe==="mouse"||pe==="mouse-position"){j=!0;break}}if(j)break}}j&&!_l?(_l=!0,!k&&s&&(k=HX.register({onMouseMove:V,onTouchMove:Ce,onMouseUp:We,onTouchEnd:Oe}),s.addEventListener("mousedown",Ve),s.addEventListener("touchstart",Ot))):!j&&_l&&(_l=!1,k&&(k(),k=null),s&&(s.removeEventListener("mousedown",Ve),s.removeEventListener("touchstart",Ot)))},Cd=j=>{if(!s)return;U=s.getBoundingClientRect();let ae,re;if("touches"in j){if(j.touches.length===0)return;ae=j.touches[0].clientX,re=j.touches[0].clientY}else ae=j.clientX,re=j.clientY;let pe=(ae-U.left)/U.width,vt=(re-U.top)/U.height;N=pe,P=vt},V=j=>{!f||!s||Cd(j)},Ce=j=>{!f||!s||Cd(j)},We=()=>{f&&(B=!1,u||Hs())},Oe=()=>{f&&(B=!1,u||Hs())},Ve=()=>{B=!0,u||Hs()},Ot=()=>{B=!0,u||Hs()},Xt=()=>{if(oe.length===0)return;let j=[...oe];oe=[];for(let{id:ae,fragmentNodeFunc:re,parentId:pe,metadata:vt,uniforms:it,componentDefinition:At,domCanvas:yt}of j)re&&ei(ae,re,pe,vt,it,At,yt)},Bt=async({canvas:j,resizeTarget:ae,enablePerformanceTracking:re=!0,colorSpace:pe="p3-linear",toneMapping:vt="linear",context:it,gpu:At,forceFullFrameRate:yt=!1,observeElement:je=!0})=>{if(f||m)return;Ge=re,M=yt,g=pe,gw(pe),m=!0,b=new AbortController;let Ct=b;try{if(s=j,r=new yu,r.background=null,i=new yo(-1,1,1,-1,.1,10),i.position.z=1,i.lookAt(0,0,0),$=()=>{nn()},window.addEventListener("beforeunload",$),ie=()=>{if(he>0&&Pe>0){let zt=he,rn=Pe;he=0,Pe=0,z(zt,rn)}},window.addEventListener("resize",ie,{passive:!0}),Ct.signal.aborted)return;if(it){console.log("[Shaders] Using provided WebGL context"),e=new jf({canvas:j,context:it,antialias:!0,alpha:!0,depth:!1,stencil:!0,powerPreference:"high-performance"});let zt=rn=>{rn.preventDefault(),Re("webglcontextlost")};j.addEventListener("webglcontextlost",zt,!1),W=()=>{j.removeEventListener("webglcontextlost",zt,!1)}}else try{let zt={canvas:j,antialias:!0,alpha:!0,depth:!1,powerPreference:"high-performance"};if(At?.device&&(zt.device=At.device),e=new Bc(zt),n=!1,t=e.init(),t.finally(()=>{n=!0}).catch(()=>{}),await t,Ct.signal.aborted)return;try{let rn=e.backend?.device;rn?.lost&&typeof rn.lost.then=="function"&&rn.lost.then(vs=>{vs?.reason!=="destroyed"&&Re(vs?.message||vs?.reason||"unknown")}).catch(()=>{})}catch(rn){console.warn("[Shaders] could not attach WebGPU device.lost handler",rn)}}catch(zt){if(Ct.signal.aborted)return;console.warn("[Shaders] WebGPU initialization failed, falling back to WebGL:",zt);try{let rn={canvas:j,antialias:!0,alpha:!0,depth:!1,stencil:!0,powerPreference:"high-performance"};if(it&&(rn.context=it),e=new jf(rn),Ct.signal.aborted)return;let vs=Vn=>{Vn.preventDefault(),Re("webglcontextlost")};j.addEventListener("webglcontextlost",vs,!1),W=()=>{j.removeEventListener("webglcontextlost",vs,!1)}}catch(rn){if(Ct.signal.aborted)return;console.error("[Shaders] Both WebGPU and WebGL initialization failed:",rn);return}}if(Ct.signal.aborted)return;if(e.setPixelRatio(Math.min(window.devicePixelRatio,2)),e.outputColorSpace=ts,Je(vt),a=new Dh({transparent:!0}),a.fragmentNode=F(0,0,0,0),o=new Is(new Za(2,2),a),r.add(o),je){let zt=ae??j.parentElement;zt?(h=new ResizeObserver(Q),h.observe(zt)):console.warn("[Shaders] No element available for resize observation \u2014 use resize() manually"),p=new IntersectionObserver(Se,{threshold:0}),p.observe(j)}let rt=j.getBoundingClientRect();U=rt,v=!je||rt.width>0&&rt.height>0&&rt.top<window.innerHeight&&rt.bottom>0&&rt.left<window.innerWidth&&rt.right>0,_=!0;let Sn=rt.width>0?rt.width:j.width,sn=rt.height>0?rt.height:j.height,at=Math.round(Sn),qn=Math.round(sn);if(at>0&&qn>0){he=at,Pe=qn;let{width:zt,height:rn}=E(at,qn);T=zt,w=rn,x=!0,e.setSize(zt,rn,!1);let vs=zt/rn,Vn=2,fi=Vn*vs;i.left=-fi/2,i.right=fi/2,i.top=Vn/2,i.bottom=-Vn/2,i.updateProjectionMatrix(),o.scale.set(fi,Vn,1),Hs()}else x=!1;if(_&&vl(),!Ct.signal.aborted){try{if(e.backend?.isWebGPUBackend===!0){let zt=e.backend?.device?.limits?.maxTextureDimension2D;typeof zt=="number"&&zt>0&&(xe=zt)}else{let zt=e.capabilities?.maxTextureSize;typeof zt=="number"&&zt>0&&(xe=zt)}}catch{}if(he>0&&Pe>0){let zt=he,rn=Pe;he=0,Pe=0,z(zt,rn)}f=!0,be=!0,Xt()}}catch(rt){console.error("[Shaders] Initialization error:",rt)}finally{m=!1,b===Ct&&(b=null)}},nn=()=>{if(b&&b.abort(),h&&(h.disconnect(),h=null),p&&(p.disconnect(),p=null),k&&(k(),k=null),W&&(W(),W=null),s&&(s.removeEventListener("mousedown",Ve),s.removeEventListener("touchstart",Ot)),$&&(window.removeEventListener("beforeunload",$),$=null),ie&&(window.removeEventListener("resize",ie),ie=null),Fa(),me(),Ye.forEach(ae=>{try{ae?.renderTarget?.dispose&&ae.renderTarget.dispose()}catch{}}),Ye.clear(),l.nodes.clear(),l.rootId=null,l.idToNodeId.clear(),c.clear(),et.clear(),Qe.clear(),nt.clear(),J.clear(),oe=[],be=!1,Y!==null&&(cancelAnimationFrame(Y),Y=null),Ee=null,O=!1,o){r&&r.remove(o);try{o.geometry&&typeof o.geometry.dispose=="function"&&o.geometry.dispose()}catch{}try{o.material instanceof Xs&&typeof o.material.dispose=="function"&&o.material.dispose()}catch{}}let j=ae=>{try{typeof ae.forceContextLoss=="function"&&ae.forceContextLoss()}catch{}if(typeof ae.dispose=="function")try{ae.dispose()}catch{}};if(e){let ae=e,re=t;re&&!n?re.finally(()=>j(ae)).catch(()=>{}):j(ae)}t=null,n=!1,s=null,e=null,i=null,r=null,o=null,a=null,f=!1,m=!1,x=!1,b=null,T=0,w=0,v=!1,_=!0,N=.5,P=.5,B=!1,L=!1,Te=null,Fe=!1,ze=!1,fe=null,Xe=!1};return{initialize:Bt,cleanup:nn,registerNode:ei,removeNode:xl,updateUniformValue:ml,updateNodeMetadata:gl,isInitialized:()=>f,resize:(j,ae)=>{!e||!i||!o||z(j,ae)},startAnimation:vl,stopAnimation:Fa,renderAndWait:eu,renderSyntheticFrame:wd,getPerformanceStats:Ad,getNodeRegistry:()=>({nodes:new Map(l.nodes)}),getRendererType:()=>e?e instanceof Bc?"webgpu":"webgl":null,getInternalRenderer:()=>e??null,setForceFullFrameRate:j=>{let ae=M;return M=j,ae},setOnReady:j=>{Te=j},setOnDeviceLost:j=>{fe=j},__testing:{needsTransformation:kw,findChildNodes:Dt,applyMaskIfNeeded:De,applyNodeTransformation:zn,getNodeRegistry:()=>l,getParentToChildren:()=>c}}}var _d={samplingRate:.05,collectionDuration:5e3,warmupDuration:500,sampleInterval:500,apiEndpoint:"https://shaders.com/api/telemetry"};function WX(s){return s.includes("Edg/")||s.includes("EdgiOS")?"Edge":s.includes("OPR/")||s.includes("Opera/")?"Opera":s.includes("Chrome/")||s.includes("CriOS")?"Chrome":s.includes("Firefox/")||s.includes("FxiOS")?"Firefox":s.includes("Safari/")&&!s.includes("Chrome")?"Safari":"Other"}function $X(s){return/iPad|Tablet|PlayBook/i.test(s)||/Android/i.test(s)&&!/Mobile/i.test(s)?"tablet":/Mobile|Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(s)?"mobile":"desktop"}function qX(){if(typeof window>"u"||typeof navigator>"u")return{domain:"unknown",browserFamily:"unknown",deviceType:"unknown"};let s=navigator.userAgent;return{domain:window.location.hostname,browserFamily:WX(s),deviceType:$X(s)}}var XX=class{renderer;version;sourceType;sessionId;frameSamples=[];sampleInterval=null;stopped=!1;constructor(s,e,t){this.renderer=s,this.version=e,this.sourceType=t,this.sessionId=`tel_${Date.now()}_${Math.random().toString(36).substring(2,9)}`}stop(){this.stopped=!0,this.sampleInterval&&(clearInterval(this.sampleInterval),this.sampleInterval=null)}async start(){try{if(await this.sleep(_d.warmupDuration),this.stopped||(this.sampleInterval=setInterval(()=>{if(!this.stopped)try{let s=this.renderer.getPerformanceStats();this.frameSamples.push(s)}catch(s){console.error("Telemetry sampling error:",s)}},_d.sampleInterval),await this.sleep(_d.collectionDuration-_d.warmupDuration),this.stopped))return;if(this.sampleInterval&&(clearInterval(this.sampleInterval),this.sampleInterval=null),!this.stopped&&this.frameSamples.length>=5){let s=this.aggregateData();await this.sendTelemetry(s)}}catch(s){console.error("Telemetry collection error:",s)}}sleep(s){return new Promise(e=>setTimeout(e,s))}aggregateData(){let s=this.aggregatePerformance(),e=this.detectRendererType(),t=this.extractComponents(),n=qX();return{sessionId:this.sessionId,timestamp:Date.now(),collectionDuration:_d.collectionDuration,version:this.version,sourceType:this.sourceType,performance:s,renderer:e,components:t,environment:n}}aggregatePerformance(){if(this.frameSamples.length===0)return{fps:0,frameTime:{avg:0,min:0,max:0,p99:0},jankPercent:0,budgetUsed:0};let s=this.frameSamples.map(h=>h.avgFrameTime),e=this.frameSamples.map(h=>h.jankPercent),t=this.frameSamples.map(h=>h.budgetUsed),n=this.frameSamples.map(h=>h.fps),i=this.calculateMedian(n),r=this.calculateMean(s),o=Math.min(...s),a=Math.max(...s),l=this.calculatePercentile(s,99),c=this.calculateMean(e),u=this.calculateMean(t);return{fps:Math.round(i*10)/10,frameTime:{avg:Math.round(r*10)/10,min:Math.round(o*10)/10,max:Math.round(a*10)/10,p99:Math.round(l*10)/10},jankPercent:Math.round(c*10)/10,budgetUsed:Math.round(u*10)/10}}detectRendererType(){let s=this.frameSamples[this.frameSamples.length-1];return{type:this.renderer.getRendererType?.()||"webgl",drawCalls:s?.drawCalls??null,textureCount:s?.textureCount??null}}extractComponents(){try{let s=this.renderer.getNodeRegistry(),e=[];for(let[t,n]of s.nodes)n.parentId!==null&&e.push({name:n.componentName,requiresRTT:n.requiresRTT,renderOrder:n.metadata.renderOrder});return e.sort((t,n)=>t.renderOrder-n.renderOrder)}catch(s){return console.error("Failed to extract components:",s),[]}}async sendTelemetry(s){try{let e=await fetch(_d.apiEndpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});e.ok||console.warn("Telemetry send failed:",e.status,e.statusText)}catch(e){console.error("Telemetry send error:",e)}}calculateMean(s){return s.length===0?0:s.reduce((e,t)=>e+t,0)/s.length}calculateMedian(s){if(s.length===0)return 0;let e=[...s].sort((n,i)=>n-i),t=Math.floor(e.length/2);return e.length%2===0?(e[t-1]+e[t])/2:e[t]}calculatePercentile(s,e){if(s.length===0)return 0;let t=[...s].sort((i,r)=>i-r),n=Math.ceil(e/100*t.length)-1;return t[Math.max(0,n)]}};function YX(s=!1,e=!1){return s||typeof navigator<"u"&&navigator.doNotTrack==="1"?!1:e?!0:Math.random()<_d.samplingRate}function XU(s,e,t=!1,n=!1){return YX(t,n)?new XX(s,e,n?"preview":"shader"):null}function YU(){if(typeof window>"u"||!window.location)return!1;let s=window.location.hostname;return!s.includes("shaders.com")&&s!=="localhost"&&s!=="127.0.0.1"}function zw(s){if(typeof s!="object"||s===null||!("type"in s))return!1;let e=s;return e.type==="map"||e.type==="mouse"||e.type==="mouse-position"||e.type==="auto-animate"}var jU=new Set(["opacity","blendMode","visible","transform","maskSource","maskType"]);async function Gw(s,e,t){let n=new Map;if(Ow().forEach(x=>{n.set(x.definition.name,x.definition)}),!s.style.width||!s.style.height){let x=s.getBoundingClientRect(),b=x.width>0?x.width:s.width,v=x.height>0?x.height:s.height;b>0&&!s.style.width&&(s.style.width=`${b}px`),v>0&&!s.style.height&&(s.style.height=`${v}px`)}function i(x){return{...x,props:x.props?{...x.props}:void 0,children:x.children?.map(i)}}let r={...e,components:e.components.map(i)},o=null,a=!1,l=!1;function c(x,b,v,_,M){let T=n.get(v.type);if(!T){console.warn(`[createShader] Unknown component type: ${v.type}`);return}let w=v.id||`${v.type}_${Date.now()}_${Math.random()}`,S={};for(let[N,P]of Object.entries(v.props||{}))!jU.has(N)&&Object.prototype.hasOwnProperty.call(T.props,N)&&zw(P)&&(S[N]=P);let A=$U(T,Object.fromEntries(Object.entries(T.props).map(([N,P])=>{let B=v.props?.[N]!==void 0?v.props[N]:P.default;return[N,zw(B)?P.default:B]})),w),I={blendMode:v.props?.blendMode||"normal",opacity:v.props?.opacity,visible:v.props?.visible,renderOrder:M,id:v.id,maps:Object.keys(S).length>0?{...S}:void 0,mask:v.props?.maskSource?{source:v.props.maskSource,type:v.props.maskType||"alpha"}:void 0,transform:v.props?.transform?{offsetX:0,offsetY:0,rotation:0,scale:1,anchorX:.5,anchorY:.5,edges:"transparent",...v.props.transform}:void 0};x.registerNode(w,T.fragmentNode,_,I,A,T),b.set(w,{componentDef:T,uniforms:A,nodeId:w,component:v,currentMaps:{...S}}),v.children?.forEach((N,P)=>{c(x,b,N,w,P)})}async function u(){let x=qU(),b=new Map;t?.onReady&&x.setOnReady(t.onReady),await x.initialize({canvas:s,resizeTarget:s,enablePerformanceTracking:t?.enablePerformanceTracking||!1,colorSpace:t?.colorSpace,toneMapping:t?.toneMapping,observeElement:t?.observeElement,gpu:t?.gpu});let v={renderer:x,nodeEntryMap:b,telemetryCollector:null,telemetryStartTimeout:null};x.setOnDeviceLost(M=>{if(!(a||l)&&!(o!==null&&o!==v)){l=!0;try{t?.onError?.(M)}catch(T){console.error("[createShader] onError callback threw:",T)}(async()=>{try{if(h(v),o=null,a)return;let T=await u();if(a){h(T);return}o=T}catch(T){console.error("[createShader] rebuild after device loss failed:",T);try{t?.onError?.("rebuild_failed")}catch{}}finally{l=!1}})()}});let _="shader-root";if(x.registerNode(_,({childNode:M})=>M||F(0,0,0,0),null,null,{},void 0),r.components.forEach((M,T)=>{c(x,b,M,_,T)}),YU()){let M=()=>{if(a||o!==v){v.telemetryStartTimeout=null;return}x.getPerformanceStats().fps>0?(v.telemetryCollector=XU(x,"2.5.133",t?.disableTelemetry||!1,!1),v.telemetryCollector&&v.telemetryCollector.start(),v.telemetryStartTimeout=null):v.telemetryStartTimeout=setTimeout(M,500)};v.telemetryStartTimeout=setTimeout(M,500)}return v}function h(x){if(x.telemetryCollector){try{x.telemetryCollector.stop()}catch{}x.telemetryCollector=null}x.telemetryStartTimeout!==null&&(clearTimeout(x.telemetryStartTimeout),x.telemetryStartTimeout=null);try{x.renderer.cleanup()}catch{}}o=await u();function p(x,b){if(!o)return;let{renderer:v,nodeEntryMap:_}=o,M=_.get(x);if(!M){console.warn(`[createShader] Component ID not found: ${x}`);return}M.component.props||(M.component.props={});let T=M.component.props;for(let[w,S]of Object.entries(b))if(jU.has(w))if(w==="maskSource")v.updateNodeMetadata(M.nodeId,{mask:S?{source:S,type:b.maskType||T.maskType||"alpha"}:void 0}),T.maskSource=S,"maskType"in b&&(T.maskType=b.maskType);else{if(w==="maskType")continue;w==="transform"?(v.updateNodeMetadata(M.nodeId,{transform:S}),T.transform=S):(v.updateNodeMetadata(M.nodeId,{[w]:S}),T[w]=S)}else zw(S)?Object.prototype.hasOwnProperty.call(M.componentDef.props,w)?(M.currentMaps[w]=S,v.updateNodeMetadata(M.nodeId,{maps:{...M.currentMaps}}),T[w]=S):console.warn(`[createShader] Ignoring PropDriver for unknown prop "${w}" on ${M.component.type}`):(w in M.currentMaps&&(delete M.currentMaps[w],v.updateNodeMetadata(M.nodeId,{maps:Object.keys(M.currentMaps).length>0?{...M.currentMaps}:void 0})),Object.prototype.hasOwnProperty.call(M.componentDef.props,w)&&(v.updateUniformValue(M.nodeId,w,S),T[w]=S))}function f(x,b){let v=s.getBoundingClientRect(),_=x??(v.width>0?v.width:s.width),M=b??(v.height>0?v.height:s.height);_>0&&M>0&&(s.style.width=`${_}px`,s.style.height=`${M}px`,o&&o.renderer.resize(_,M))}function m(){a=!0,o&&(h(o),o=null)}function g(){o&&o.renderer.stopAnimation()}function y(){o&&o.renderer.startAnimation()}return{update:p,resize:f,pause:g,resume:y,destroy:m}}var jX="shaders-preview-key";function ZX(s,e){let t=new TextEncoder().encode(e),n=new Uint8Array(s.length);for(let i=0;i<s.length;i++)n[i]=s[i]^t[i%t.length];return n}function ZU(s){try{let e=atob(s),t=new Uint8Array(e.length);for(let o=0;o<e.length;o++)t[o]=e.charCodeAt(o);let n=ZX(t,jX),i=new TextDecoder().decode(n),r=JSON.parse(i);if(typeof r!="object"||r===null||Array.isArray(r))throw new Error("unexpected shape");return r}catch{throw new Error("Failed to decode preview definition: invalid data")}}var KX="https://shaders.com",JX="Unlock your Shaders Pro license",QX="https://shaders.com/dashboard?pricing=true",eY=new Set(["break","case","catch","class","const","continue","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","yield"]);function tY(s,e){let t=s.replace(/[^A-Za-z0-9]+/g," ").trim();if(!t)return e;let n=t.split(/\s+/).map((r,o)=>o===0?r.charAt(0).toLowerCase()+r.slice(1):r.charAt(0).toUpperCase()+r.slice(1)).join(""),i=/^[A-Za-z_$]/.test(n)?n:`_${n}`;return eY.has(i)?`_${i}`:i}function nY(s){let e=new Set(["style"]),t=new Map;return s?.length&&s.forEach((n,i)=>{if(!n.targets?.length)return;let r=tY(n.label,`keyProp${i}`),o=r,a=1;for(;e.has(o);)a++,o=`${r}${a}`;e.add(o),t.set(o,n)}),t}function Hw(s,e){for(let t of e){if(t.id===s)return t;let n=t.children;if(n?.length){let i=Hw(s,n);if(i)return i}}return null}function sY(s,e,t){if(e)for(let[n,i]of Object.entries(e)){let r=t.get(n);if(r)for(let o of r.targets??[]){let a=Hw(o.component_id,s);a?.props&&o.prop in a.props&&(a.props[o.prop]=i)}}}async function iY(s,e){if(!e.shader&&!e.presetId||e.shader&&e.presetId)throw new Error("Exactly one of shader (preview token) or presetId must be provided");let t=e.apiBaseUrl||KX,n=e.presetId&&e.version?`?version=${encodeURIComponent(e.version)}`:"",i=e.shader?`${t}/api/preview/shader/${encodeURIComponent(e.shader)}`:`${t}/api/preview/preset/${encodeURIComponent(e.presetId)}${n}`,r=await fetch(i);if(!r.ok)throw new Error(`Failed to fetch preview: ${r.status} ${r.statusText}`);let o=await r.json(),a=o.preset??o.shader;if(!a?.definition||typeof a.definition!="string")throw new Error("Preview response missing encoded definition");let l=ZU(a.definition),c=Array.isArray(a.key_props)?a.key_props:null,u=nY(c),h=new Map;for(let b of u.values())for(let v of b.targets??[]){let _=Hw(v.component_id,l.components);_?.props&&v.prop in _.props&&h.set(`${v.component_id}:${v.prop}`,_.props[v.prop])}sY(l.components,e.configuration,u);let p=await Gw(s,l,{isPreview:!0,enablePerformanceTracking:!0}),{overlay:f,savedPosition:m,parentEl:g}=rY(s),y=p.destroy.bind(p),x=p;return x.destroy=()=>{g&&m!==void 0&&(g.style.position=m),f.remove(),y()},x.setConfiguration=b=>{if(c?.length)for(let[v,_]of u){let M=Object.prototype.hasOwnProperty.call(b,v)&&b[v]!==void 0;for(let T of _.targets??[]){let w=M?b[v]:h.get(`${T.component_id}:${T.prop}`);w!==void 0&&p.update(T.component_id,{[T.prop]:w})}}},x}function rY(s){let e=s.parentElement,t;e&&getComputedStyle(e).position==="static"&&(t=e.style.position,e.style.position="relative");let n=document.createElement("a");return n.href=QX,n.target="_blank",n.rel="noopener noreferrer",n.textContent=JX,Object.assign(n.style,{position:"absolute",bottom:"8px",right:"12px",fontSize:"11px",fontFamily:"system-ui, -apple-system, sans-serif",color:"rgba(255, 255, 255, 0.5)",textDecoration:"none",zIndex:"10",pointerEvents:"auto",transition:"color 0.2s ease"}),n.addEventListener("mouseenter",()=>{n.style.color="rgba(255, 255, 255, 0.8)"}),n.addEventListener("mouseleave",()=>{n.style.color="rgba(255, 255, 255, 0.5)"}),e&&e.appendChild(n),{overlay:n,savedPosition:t,parentEl:e}}async function oY(s){if(typeof navigator>"u"||!navigator.gpu)return null;try{let e=await navigator.gpu.requestAdapter({powerPreference:s?.powerPreference??"high-performance"});return e?{device:await e.requestDevice({requiredFeatures:[...e.features]}),adapter:e}:null}catch(e){return console.warn("[shaders] createSharedDevice failed; callers should fall back to per-instance device:",e),null}}export{iY as createPreview,Gw as createShader,oY as createSharedDevice};
4689
+ Error:`,I),o=!1})}catch(A){console.error("[ImageTexture] Error initiating image load:",A),o=!1}}};setTimeout(()=>{let S=s?.url?.uniform?.value??"";S&&S.trim()!==""&&g(S)},0),t(()=>{let S=s?.url?.uniform?.value??"";S!==r&&!o&&g(S)}),e(()=>{a.dispose()});let y=n,x=X.x.div(X.y),b=s.objectFit.uniform.value,v;switch(b){case 1:{let S=fn(x.div(c),d(1));v=R(c.div(x).mul(S),S);break}case 2:v=R(1,1);break;case 3:{let S=fn(fn(x.div(c),d(1)),fn(X.x.div(u),X.y.div(h)));v=R(c.div(x).mul(S),S);break}case 4:{let S=fn(X.x.div(u),X.y.div(h));v=R(c.div(x).mul(S),S);break}default:{let S=St(x.div(c),d(1));v=R(c.div(x).mul(S),S);break}}let _=y.sub(R(.5)).div(v).add(R(.5)),M=R(_.x,d(1).sub(_.y)),T=l.sample(M),w=or(or(M.x.lessThan(0),M.x.greaterThan(1)),or(M.y.lessThan(0),M.y.greaterThan(1)));return F(T.rgb,ar(w,d(0),T.a))}};var gF={name:"Invert",category:"Adjustments",description:"Invert RGB colors while preserving alpha",requiresChild:!0,props:{},fragmentNode:({childNode:s})=>{if(!s)return console.error("You must pass a child component into the Invert shader."),F(0);let e=s||F(0,0,0,0);return F(de(1,1,1).sub(e.rgb),e.a)}};var xF={name:"Kaleidoscope",category:"Distortions",description:"Create a kaleidoscope effect with radial mirrored segments",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"The center point of the kaleidoscope effect",ui:{type:"position",label:"Center",group:"Position"}},segments:{default:6,description:"Number of radial segments in the kaleidoscope",ui:{type:["range","map"],min:2,max:24,step:1,label:"Segments",group:"Effect"}},angle:{default:0,description:"Rotation offset for the entire kaleidoscope pattern",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},edges:{default:"mirror",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=X.x.div(X.y),r=R(H.x.mul(i),H.y),o=R(s.center.uniform.x.mul(i),s.center.uniform.y.oneMinus()),a=r.sub(o),l=In(a),c=Jn(a.y,a.x),u=s.angle.uniform.mul(Math.PI/180),h=c.add(u),p=d(Math.PI*2).div(s.segments.uniform),f=ls(h,p.mul(2)),m=f.greaterThan(p).select(p.mul(2).sub(f),f),g=R(ke(m).mul(l),ue(m).mul(l)),y=o.add(g),x=R(y.x.div(i),y.y);return It(En(x,n.sample(x),n,s.edges.uniform.value))}};var Dq=Ne(([s])=>{let e=d(6.2831853);return de(ke(e.mul(s)).mul(.5).add(.5),ke(e.mul(s.sub(.333))).mul(.5).add(.5),ke(e.mul(s.sub(.666))).mul(.5).add(.5))}),yF={name:"LensFlare",category:"Stylize",description:"Realistic camera lens flare with artifacts.",props:{lightPosition:{default:{x:.3,y:.3},transform:ft,description:"Position of the light source",ui:{type:"position",label:"Light Position",group:"Light"}},intensity:{default:.5,description:"Master brightness of the entire lens flare effect",ui:{type:["range","map"],min:0,max:2,step:.01,label:"Intensity",group:"Light"}},ghostIntensity:{default:.4,description:"Brightness of internal reflection ghost discs along the flare axis",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Ghosts",group:"Reflections"}},ghostSpread:{default:.7,description:"Spacing between ghost reflections along the flare axis",ui:{type:"range",min:.1,max:2,step:.01,label:"Ghost Spread",group:"Reflections"}},ghostChroma:{default:.3,description:"Rainbow chromatic fringing around ghost element edges",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Ghost Chroma",group:"Reflections"}},haloIntensity:{default:.4,description:"Brightness of the circular halo ring from internal reflection",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Halo",group:"Reflections"}},haloRadius:{default:.6,description:"Radius of the halo ring",ui:{type:"range",min:.1,max:1,step:.01,label:"Halo Size",group:"Reflections"}},haloChroma:{default:.6,description:"Spectral dispersion on the halo creating rainbow color separation",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Halo Chroma",group:"Reflections"}},haloSoftness:{default:.8,description:"Thickness and softness of the halo ring",ui:{type:["range","map"],min:.01,max:3,step:.01,label:"Halo Softness",group:"Reflections"}},starburstIntensity:{default:.3,description:"Brightness of diffraction spikes radiating from the light source",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Starburst",group:"Effects"}},starburstPoints:{default:6,description:"Number of starburst spikes (simulates aperture blade count)",ui:{type:["range","map"],min:4,max:16,step:1,label:"Blades",group:"Effects"}},streakIntensity:{default:.15,description:"Brightness of horizontal anamorphic light streak",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Streak",group:"Effects"}},streakLength:{default:.5,description:"Horizontal extent of the anamorphic streak",ui:{type:["range","map"],min:.1,max:1,step:.01,label:"Streak Length",group:"Effects"}},glareIntensity:{default:.2,description:"Soft veiling glare that washes out contrast around the light",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Glare",group:"Effects"}},glareSize:{default:.5,description:"Size of the soft glare glow",ui:{type:["range","map"],min:.1,max:1,step:.01,label:"Glare Size",group:"Effects"}},edgeFade:{default:.2,description:"How much the flare fades when the light source is near the screen edge (0 = no fade, 1 = heavy fade)",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Edge Fade",group:"Light"}},speed:{default:.5,description:"Speed of subtle flare shimmer and starburst rotation",ui:{type:"range",min:0,max:3,step:.1,label:"Speed",group:"Animation"}}},fragmentNode:s=>{let{uniforms:e}=s,t=e.intensity.uniform,n=e.ghostIntensity.uniform,i=e.ghostSpread.uniform,r=e.ghostChroma.uniform,o=e.haloIntensity.uniform,a=e.haloRadius.uniform,l=e.haloChroma.uniform,c=e.haloSoftness.uniform,u=e.starburstIntensity.uniform,h=e.starburstPoints.uniform,p=e.streakIntensity.uniform,f=e.streakLength.uniform,m=e.glareIntensity.uniform,g=e.glareSize.uniform,y=X.x.div(X.y),x=H,b=R(e.lightPosition.uniform.x,e.lightPosition.uniform.y.oneMinus()),v=R(.5,.5).sub(b),_=cn(s,e.speed),M=ue(_.mul(3.7)).mul(.04).add(ue(_.mul(7.3)).mul(.03)).add(ue(_.mul(13.1)).mul(.02)).add(.97),T=e.edgeFade.uniform,w=St(bt(b.x.sub(.5)).mul(2),bt(b.y.sub(.5)).mul(2)),S=d(1).sub(T.mul(.5)),A=ve(d(1),we(S,d(1),w).oneMinus(),T),I=t.mul(A).mul(M),N=R(x.x.sub(b.x).mul(y),x.y.sub(b.y)),P=N.length(),B=[{offset:.15,size:.2,bright:.3,hollow:.1,r:1,g:.95,b:.9},{offset:.3,size:.12,bright:.25,hollow:.65,r:1,g:.85,b:.55},{offset:.5,size:.08,bright:.35,hollow:.15,r:.62,g:.82,b:1},{offset:.72,size:.14,bright:.18,hollow:.75,r:.75,g:1,b:.7},{offset:.95,size:.06,bright:.3,hollow:0,r:1,g:.6,b:.85},{offset:1.25,size:.1,bright:.15,hollow:.8,r:.55,g:.88,b:1},{offset:1.55,size:.07,bright:.2,hollow:.25,r:1,g:.92,b:.6}],U=de(0,0,0);for(let z=0;z<B.length;z++){let q=B[z],Q=b.add(v.mul(d(q.offset).mul(i).mul(2))),Se=R(x.x.sub(Q.x).mul(y),x.y.sub(Q.y)).length(),Ae=d(q.size),K=we(Ae.mul(.12),Ae,Se).oneMinus(),Z=we(Ae.mul(.05),Ae.mul(.45),Se).oneMinus(),me=K.mul(d(1).sub(Z.mul(d(q.hollow)))),Ze=d(z*2.17),Be=ue(_.mul(4.3).add(Ze)).mul(.08).add(ue(_.mul(9.1).add(Ze.mul(1.7))).mul(.05)).add(.95),Je=Ae.mul(.78),gt=Ae.mul(r).mul(.14),xt=Ae.mul(.1),Dt=we(d(0),xt,bt(Se.sub(Je.add(gt)))).oneMinus(),se=we(d(0),xt,bt(Se.sub(Je))).oneMinus(),st=we(d(0),xt,bt(Se.sub(Je.sub(gt)))).oneMinus(),De=d(q.bright).mul(n).mul(Be),dt=de(me.mul(d(q.r)).add(Dt.mul(r)).mul(De),me.mul(d(q.g)).add(se.mul(r)).mul(De),me.mul(d(q.b)).add(st.mul(r)).mul(De));U=U.add(dt)}let D=R(d(1).sub(b.x),d(1).sub(b.y)),L=R(x.x.sub(D.x).mul(y),x.y.sub(D.y)),k=L.length(),W=a.mul(l).mul(.06),$=c.mul(.12).add(.005),ie=we(d(0),$,bt(k.sub(a.add(W)))).oneMinus(),xe=we(d(0),$,bt(k.sub(a))).oneMinus(),he=we(d(0),$,bt(k.sub(a.sub(W)))).oneMinus(),Pe=ue(Jn(L.y,L.x).mul(3).add(_.mul(.5))).mul(.12).add(.88),Ge=de(ie,xe,he).mul(o).mul(Pe),He=Jn(N.y,N.x),oe=Jn(v.y,v.x.mul(y)).mul(.5).add(_.mul(.06)),be=He.add(oe),Te=Pt(bt(ke(be.mul(h.div(2)))),d(3.5)),Fe=Pt(bt(ke(be.add(.25).mul(h.div(2)))),d(7)).mul(.4),ze=d(1).div(d(1).add(P.mul(P).mul(60))),fe=Dq(be.div(d(6.2831853)).add(.5)),Xe=ve(de(1,.97,.92),fe,d(.12)),Re=Te.add(Fe).mul(ze).mul(u).mul(Xe),Y=bt(x.y.sub(b.y)),ye=bt(x.x.sub(b.x)),Me=d(-800).mul(Y).mul(Y).exp(),Le=f.mul(f).mul(.25).add(.001),Ye=d(-1).mul(ye).mul(ye).div(Le.mul(.7)).exp(),tt=d(-1).mul(ye).mul(ye).div(Le).exp(),et=d(-1).mul(ye).mul(ye).div(Le.mul(1.4)).exp(),Qe=de(Me.mul(Ye).mul(.5),Me.mul(tt).mul(.65),Me.mul(et).mul(.9)).mul(p),nt=d(1).div(g.mul(g).add(.01)),J=d(-1).mul(P).mul(P).mul(nt).exp().mul(m).mul(de(1,.98,.95)),Ie=d(-500).mul(P).mul(P).exp(),Ee=we(d(0),d(.025),P).oneMinus(),O=Ie.add(Ee.mul(1.5)).mul(de(1,.98,.96)).mul(t),E=U.add(Ge).add(Re).add(Qe).add(J).add(O).mul(I);return F(E,ht(Nt(E,de(.299,.587,.114)).mul(2),0,1))}};var bF=Array.from({length:32},(s,e)=>{let t=(e/31-.5)*2;return Math.exp(-.5*t*t/.64)}),Fq=bF.reduce((s,e)=>s+e),Uq=bF.map(s=>s/Fq),vF={name:"LinearBlur",category:"Blurs",description:"Directional motion blur in a specific angle",requiresRTT:!0,requiresChild:!0,props:{intensity:{default:30,description:"Intensity of the linear blur effect",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Effect"}},angle:{default:0,transform:cs,description:"Direction of the linear blur (in degrees)",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=Ls(s.angle.uniform),r=X.x.div(X.y),o=R(ke(i).div(r),ue(i));return Ne(()=>{let a=H,l=o.mul(s.intensity.uniform).div(X).mul(2),c=F(0).toVar();for(let u=0;u<32;u++){let h=a.add(l.mul(u/31-.5));c.assign(c.add(n.sample(h).mul(d(Uq[u]))))}return It(c)})()}};var _F={name:"LinearGradient",category:"Textures",description:"Create smooth linear color gradients",props:{colorA:{default:"#1aff00",transform:_e,description:"The starting color of the gradient",ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#0000ff",transform:_e,description:"The ending color of the gradient",ui:{type:"color",label:"Color B",group:"Colors"}},start:{default:{x:0,y:.5},transform:ft,description:"The starting point of the gradient",ui:{type:"position",label:"Start",group:"Position"}},end:{default:{x:1,y:.5},transform:ft,description:"The ending point of the gradient",ui:{type:"position",label:"End",group:"Position"}},angle:{default:0,transform:cs,description:"Additional rotation angle of the gradient (in degrees)",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},edges:{default:"stretch",transform:Fn,compileTime:!0,description:"How to handle areas beyond the gradient endpoints",ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=R(s.start.uniform[0],s.start.uniform[1].oneMinus()),n=R(s.end.uniform[0],s.end.uniform[1].oneMinus()),i=n.sub(t),r=In(i),o=xr(i),a=X.y.max(1e-6),l=X.x.div(a),c=Ls(s.angle.uniform).negate(),u=ke(c),h=ue(c),p=t.add(n).mul(.5),f=e.sub(p),m=R(f.x.mul(l),f.y),g=R(m.x.mul(u).sub(m.y.mul(h)),m.x.mul(h).add(m.y.mul(u))),y=Nt(R(g.x.div(l),g.y).add(p).sub(t),o).div(r.max(1e-6)),x=s.edges.uniform.value,b;switch(x){case 1:b=y;break;case 2:{let M=ls(bt(y),d(2));b=M.greaterThan(d(1)).select(d(2).sub(M),M);break}case 3:b=ct(y);break;default:b=y.clamp(d(0),d(1))}let v=wt(s.colorA.uniform,s.colorB.uniform,b.clamp(d(0),d(1)),s.colorSpace.uniform.value),_;if(x===1){let M=y.greaterThanEqual(d(0)).select(d(1),d(0)),T=y.lessThanEqual(d(1)).select(d(1),d(0)),w=M.mul(T);_=v.w.mul(w)}else _=v.w;return F(v.x,v.y,v.z,_)}};var bn=64,SF={name:"Liquify",category:"Interactive",description:"Liquid-like interactive deformation effect",requiresRTT:!0,requiresChild:!0,usesPointer:!0,props:{intensity:{default:10,description:"Scale of the fabric displacement effect",ui:{type:["range","map"],min:0,max:20,step:.1,label:"Intensity",group:"Effect"}},stiffness:{default:3,description:"Fabric rigidity (higher = stiffer canvas, lower = stretchy silk)",ui:{type:"range",min:1,max:30,step:.5,label:"Stiffness",group:"Effect"}},damping:{default:3,description:"How quickly fabric motion settles",ui:{type:"range",min:0,max:10,step:.1,label:"Damping",group:"Effect"}},radius:{default:1,description:"Cursor influence area",ui:{type:"range",min:.1,max:1.5,step:.1,label:"Radius",group:"Effect"}},edges:{default:"stretch",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},computeNode:({uniforms:s,onCleanup:e})=>{let t=fs(bn*bn,"vec4"),n=fs(bn*bn,"vec4"),i=new ys(bn,bn);i.type=en;let r=ds(i);e(()=>{i.dispose()});let o=ee(.5),a=ee(.5),l=ee(0),c=ee(0),u=ee(0),h=ee(.016),p=ee(.008),f=ee(3),m=ee(.97),g=ee(.08),y=ee(1),x=gn(bn),b=gn(bn-1),v=(P,B)=>Ne(()=>{let U=kt,D=U.mod(x),L=U.div(x);wn(L.greaterThan(gn(0)).and(L.lessThan(b)).and(D.greaterThan(gn(0))).and(D.lessThan(b)),()=>{let k=P.element(U),W=k.x,$=k.y,ie=k.z,xe=k.w,he=U.sub(gn(1)),Pe=U.add(gn(1)),Ge=U.sub(x),He=U.add(x),oe=U.sub(x).sub(gn(1)),be=U.sub(x).add(gn(1)),Te=U.add(x).sub(gn(1)),Fe=U.add(x).add(gn(1)),ze=f.mul(P.element(he).x.sub(W).add(P.element(Pe).x.sub(W)).add(P.element(Ge).x.sub(W)).add(P.element(He).x.sub(W))).toVar(),fe=f.mul(P.element(he).y.sub($).add(P.element(Pe).y.sub($)).add(P.element(Ge).y.sub($)).add(P.element(He).y.sub($))).toVar(),Xe=f.mul(d(.35));ze.assign(ze.add(Xe.mul(P.element(oe).x.sub(W).add(P.element(be).x.sub(W)).add(P.element(Te).x.sub(W)).add(P.element(Fe).x.sub(W))))),fe.assign(fe.add(Xe.mul(P.element(oe).y.sub($).add(P.element(be).y.sub($)).add(P.element(Te).y.sub($)).add(P.element(Fe).y.sub($))))),ze.assign(ze.sub(f.mul(d(.1)).mul(W))),fe.assign(fe.sub(f.mul(d(.1)).mul($)));let Re=ie.mul(m).add(ze.mul(p)).toVar(),Y=xe.mul(m).add(fe.mul(p)).toVar();wn(u.greaterThan(d(.01)),()=>{let Le=D.toFloat().add(d(.5)).div(d(bn)),Ye=L.toFloat().add(d(.5)).div(d(bn)),tt=y.greaterThanEqual(d(1)).select(Le.sub(o).mul(y),Le.sub(o)),et=y.greaterThanEqual(d(1)).select(Ye.sub(a),Ye.sub(a).div(y)),Qe=tt.mul(tt).add(et.mul(et)),nt=g.mul(d(3));wn(Qe.lessThan(nt.mul(nt)),()=>{let J=Qe.negate().div(g.mul(g)).exp().mul(u).mul(h).mul(d(2));Re.assign(Re.add(l.mul(J))),Y.assign(Y.add(c.mul(J)))})});let ye=W.add(Re.mul(p)).clamp(d(-.5),d(.5)),Me=$.add(Y.mul(p)).clamp(d(-.5),d(.5));B.element(U).assign(F(ye,Me,Re,Y))})})().compute(bn*bn,[256]),_=P=>Ne(()=>{let B=kt,U=B.mod(x),D=B.div(x),L=P.element(B);$n(r,Mn(U,D),F(L.x,L.y,d(0),d(1))).toWriteOnly()})().compute(bn*bn,[256]),M=v(t,n),T=v(n,t),w=_(t),S=.5,A=.5,I=Date.now(),N=Date.now();return{outputs:{displacement:i},getComputeNodes:P=>{let B=Date.now(),U=Math.min((B-I)/1e3,.016);if(I=B,U<=0)return null;let D=Math.max(1,P.dimensions.width)/Math.max(1,P.dimensions.height),L=s.stiffness.uniform.value,k=s.damping.uniform.value,W=s.radius.uniform.value*.08,$=(P.pointer.x-S)/U,ie=(P.pointer.y-A)/U,xe=Math.sqrt($*$+ie*ie),he=Math.min(xe,3);S=P.pointer.x,A=P.pointer.y,he>.01&&(N=B);let Pe=s.damping.uniform.value,Ge=Pe>0?Math.min(3e4,5e3/Pe):3e4;if(B-N>Ge)return null;let He=U/2;return o.value=P.pointer.x,a.value=P.pointer.y,l.value=xe>.01?$/xe:0,c.value=xe>.01?ie/xe:0,u.value=he,h.value=U,p.value=He,f.value=L,m.value=Math.max(0,Math.min(1,1-k*He)),g.value=W,y.value=D,[M,T,w]}}},fragmentNode:({uniforms:s,onBeforeRender:e,childNode:t,onCleanup:n,computeOutputs:i})=>{if(!t)return F(0,0,0,0);let r=i?.childTexture??_t(t);i||n(()=>{r?.renderTarget?.dispose&&r.renderTarget.dispose()});let o;if(i?.displacement)r.sample(H),o=hn(i.displacement).sample(H).xy;else{let p=new Float32Array(bn*bn),f=new Float32Array(bn*bn),m=new Float32Array(bn*bn),g=new Float32Array(bn*bn),y=new Float32Array(bn*bn),x=new Float32Array(bn*bn),b=new Float32Array(bn*bn),v=new Float32Array(bn*bn),_=new Float32Array(bn*bn*2),M=new Qn(_,bn,bn,hs,en);M.magFilter=Yt,M.minFilter=Yt,M.needsUpdate=!0;let T=hn(M),w=.5,S=.5,A=Date.now(),I=2;e(({pointer:N,dimensions:P})=>{let B=Date.now(),U=Math.min((B-A)/1e3,.016);if(A=B,U<=0)return;let D=Math.max(1,P.width)/Math.max(1,P.height),L=s.stiffness.uniform.value,k=s.damping.uniform.value,W=s.radius.uniform.value*.08,$=(N.x-w)/U,ie=(N.y-S)/U,xe=Math.sqrt($*$+ie*ie),he=Math.min(xe,3),Pe=0,Ge=0;xe>.01&&(Pe=$/xe,Ge=ie/xe);let He=U/I;for(let oe=0;oe<I;oe++){if(oe===0&&he>.01){let Fe=W*3,ze=Math.max(1,Math.floor((N.y-Fe)*bn)),fe=Math.min(bn-2,Math.ceil((N.y+Fe)*bn)),Xe=Math.max(1,Math.floor((N.x-Fe)*bn)),Re=Math.min(bn-2,Math.ceil((N.x+Fe)*bn));for(let Y=ze;Y<=fe;Y++)for(let ye=Xe;ye<=Re;ye++){let Me=Y*bn+ye,Le=(ye+.5)/bn,Ye=(Y+.5)/bn,tt=D>=1?(Le-N.x)*D:Le-N.x,et=D>=1?Ye-N.y:(Ye-N.y)/D,Qe=Math.sqrt(tt*tt+et*et);if(Qe<Fe){let nt=Math.exp(-Qe*Qe/(W*W))*he*U*2;m[Me]+=Pe*nt,g[Me]+=Ge*nt}}}let be=Math.max(0,Math.min(1,1-k*He)),Te=L*.35;y.set(m),x.set(g),b.set(p),v.set(f);for(let Fe=1;Fe<bn-1;Fe++)for(let ze=1;ze<bn-1;ze++){let fe=Fe*bn+ze,Xe=0,Re=0,Y=fe-1,ye=fe+1,Me=fe-bn,Le=fe+bn;Xe+=L*(p[Y]-p[fe]),Xe+=L*(p[ye]-p[fe]),Xe+=L*(p[Me]-p[fe]),Xe+=L*(p[Le]-p[fe]),Re+=L*(f[Y]-f[fe]),Re+=L*(f[ye]-f[fe]),Re+=L*(f[Me]-f[fe]),Re+=L*(f[Le]-f[fe]);let Ye=fe-bn-1,tt=fe-bn+1,et=fe+bn-1,Qe=fe+bn+1;Xe+=Te*(p[Ye]-p[fe]),Xe+=Te*(p[tt]-p[fe]),Xe+=Te*(p[et]-p[fe]),Xe+=Te*(p[Qe]-p[fe]),Re+=Te*(f[Ye]-f[fe]),Re+=Te*(f[tt]-f[fe]),Re+=Te*(f[et]-f[fe]),Re+=Te*(f[Qe]-f[fe]),Xe-=L*.1*p[fe],Re-=L*.1*f[fe],y[fe]=m[fe]*be+Xe*He,x[fe]=g[fe]*be+Re*He,b[fe]=p[fe]+y[fe]*He,v[fe]=f[fe]+x[fe]*He,b[fe]=Math.max(-.5,Math.min(.5,b[fe])),v[fe]=Math.max(-.5,Math.min(.5,v[fe]))}m.set(y),g.set(x),p.set(b),f.set(v)}for(let oe=0;oe<bn;oe++)for(let be=0;be<bn;be++){let Te=oe*bn+be,Fe=Te*2;_[Fe]=p[Te],_[Fe+1]=f[Te]}M.needsUpdate=!0,w=N.x,S=N.y}),n(()=>{M.dispose()}),o=T.sample(H).xy}let a=s.intensity.uniform.mul(.1),l=o.mul(a),c=d(.15),u=l.clamp(R(c.negate(),c.negate()),R(c,c)),h=H.sub(u);return It(En(h,r.sample(h),r,s.edges.uniform.value))}};var TF={name:"Marble",category:"Textures",description:"Classic marble swirl and vein texture using noise-warped sine waves",props:{colorA:{default:"#ffffff",transform:_e,description:"Base background color of the marble",ui:{type:"color",label:"Base",group:"Colors"}},colorB:{default:"#3a2d54",transform:_e,description:"Secondary marble tone",ui:{type:"color",label:"Tone",group:"Colors"}},colorC:{default:"#0f0f0f",transform:_e,description:"Deepest marble color",ui:{type:"color",label:"Depth",group:"Colors"}},scale:{default:2,description:"Scale and density of the marble vein pattern",ui:{type:["range","map"],min:.1,max:10,step:.1,label:"Scale",group:"Effect"}},turbulence:{default:10,description:"Amount of noise-driven distortion applied to the veins",ui:{type:["range","map"],min:0,max:50,step:.5,label:"Turbulence",group:"Effect"}},speed:{default:.05,description:"Animation speed",ui:{type:"range",min:0,max:.25,step:.005,label:"Speed",group:"Animation"}},seed:{default:0,description:"Random seed for pattern variation",ui:{type:["range","map"],min:0,max:100,step:1,label:"Seed",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=X.x.div(X.y),i=t.x.mul(n),r=t.y,o=cn(s,e.speed),a=e.scale.uniform,l=e.seed.uniform,c=Dn(R(i.mul(a).add(l),r.mul(a).add(o))),u=Dn(R(i.mul(a).mul(2).add(l.mul(1.7)),r.mul(a).mul(2).add(o.mul(.7)))).mul(.5),h=Dn(R(i.mul(a).mul(4).add(l.mul(3.1)),r.mul(a).mul(4).add(o.mul(1.3)))).mul(.25),p=c.add(u).add(h),f=e.turbulence.uniform,m=ue(i.mul(a).mul(d(Math.PI)).add(p.mul(f))).mul(.5).add(.5),g=Dn(R(r.mul(a).mul(1.5).add(l.mul(2)),i.mul(a).mul(1.2))).mul(.3).add(.5),y=we(d(.3),d(.6),m),x=we(d(.6),d(.9),m),b=wt(wt(e.colorA.uniform,e.colorB.uniform,y,e.colorSpace.uniform.value),e.colorC.uniform,x.mul(g),e.colorSpace.uniform.value);return F(b.rgb,b.a)}};var MF={name:"Mirror",category:"Distortions",description:"Mirror content across a line defined by center point and angle",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"The point the mirror line passes through",ui:{type:"position",label:"Center",group:"Position"}},angle:{default:0,description:"The angle of the mirror line in degrees",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},edges:{default:"mirror",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=X.x.div(X.y),r=R(H.x.mul(i),H.y),o=R(s.center.uniform.x.mul(i),s.center.uniform.y.oneMinus()),a=r.sub(o),l=s.angle.uniform.mul(Math.PI/180),c=R(ke(l),ue(l)),u=R(c.y.negate(),c.x),h=a.dot(u),p=a.sub(u.mul(h.mul(2))),f=o.add(p),m=R(f.x.div(i),f.y),g=ln(0,h);return It(ve(n.sample(H),En(m,n.sample(m),n,s.edges.uniform.value),g))}};var wF={name:"MultiPointGradient",category:"Textures",description:"Five individually placed color points blended together by proximity \u2014 drag each point to shape the gradient",props:{colorA:{default:"#4776E6",transform:_e,description:"Color of control point A",ui:{type:"color",label:"Color",group:"Point A"}},positionA:{default:{x:.2,y:.2},transform:ft,description:"Position of control point A",ui:{type:"position",label:"Position",group:"Point A"}},colorB:{default:"#C44DFF",transform:_e,description:"Color of control point B",ui:{type:"color",label:"Color",group:"Point B"}},positionB:{default:{x:.8,y:.2},transform:ft,description:"Position of control point B",ui:{type:"position",label:"Position",group:"Point B"}},colorC:{default:"#1ABC9C",transform:_e,description:"Color of control point C",ui:{type:"color",label:"Color",group:"Point C"}},positionC:{default:{x:.2,y:.8},transform:ft,description:"Position of control point C",ui:{type:"position",label:"Position",group:"Point C"}},colorD:{default:"#F8BBD9",transform:_e,description:"Color of control point D",ui:{type:"color",label:"Color",group:"Point D"}},positionD:{default:{x:.8,y:.8},transform:ft,description:"Position of control point D",ui:{type:"position",label:"Position",group:"Point D"}},colorE:{default:"#FF8C42",transform:_e,description:"Color of control point E",ui:{type:"color",label:"Color",group:"Point E"}},positionE:{default:{x:.5,y:.5},transform:ft,description:"Position of control point E",ui:{type:"position",label:"Position",group:"Point E"}},smoothness:{default:2,description:"Controls how smoothly colors blend.",ui:{type:["range","map"],min:0,max:5,step:.05,label:"Smoothness",group:"Effect"}}},fragmentNode:({uniforms:s})=>{let e=s.smoothness.uniform,t=X.x.div(X.y),n=R(H.x.mul(t),H.y),i=[{color:s.colorA.uniform,pos:R(s.positionA.uniform.x.mul(t),s.positionA.uniform.y.oneMinus())},{color:s.colorB.uniform,pos:R(s.positionB.uniform.x.mul(t),s.positionB.uniform.y.oneMinus())},{color:s.colorC.uniform,pos:R(s.positionC.uniform.x.mul(t),s.positionC.uniform.y.oneMinus())},{color:s.colorD.uniform,pos:R(s.positionD.uniform.x.mul(t),s.positionD.uniform.y.oneMinus())},{color:s.colorE.uniform,pos:R(s.positionE.uniform.x.mul(t),s.positionE.uniform.y.oneMinus())}];return Ne(()=>{let r=de(0).toVar(),o=d(0).toVar(),a=d(0).toVar();for(let{color:l,pos:c}of i){let u=n.x.sub(c.x),h=n.y.sub(c.y),p=yn(u.mul(u).add(h.mul(h))).add(d(.001)),f=d(8).div(e.add(d(.5))).min(d(8)),m=d(1).div(Pt(p,f));r.assign(r.add(l.rgb.mul(m))),o.assign(o.add(l.a.mul(m))),a.assign(a.add(m))}return F(r.div(a),o.div(a))})()}};var Iw=.7,lm=1/Math.sqrt(1+Iw*Iw),CF=Iw*lm,Dw=CF+1,Pw=1/Math.sqrt(lm*lm+Dw*Dw);function AF(s,e,t){return Ne(()=>{let n=H,i=X.x.div(X.y),r=R(e.center.uniform.x,e.center.uniform.y.oneMinus()),o=e.scale.uniform,a=R(n.x.sub(r.x).mul(i).div(o).add(d(.5)),n.y.sub(r.y).div(o).add(d(.5))),l=e.cornerSmoothing.uniform,c=d(.008).add(l.mul(d(.03))),u=s(a).r,h=s(a.add(R(c,d(0)))).r,p=s(a.sub(R(c,d(0)))).r,f=s(a.add(R(d(0),c))).r,m=s(a.sub(R(d(0),c))).r,g=h.sub(p).div(c.mul(d(2))),y=f.sub(m).div(c.mul(d(2))),x=ve(u,u.add(h).add(p).add(f).add(m).div(d(5)),l),b=d(1).div(X.y),v=e.glowRadius.uniform.max(d(.001)),_=St(b.div(o),d(.004)),M=F(0).toVar();return wn(x.greaterThan(v.mul(d(1.5)).add(_)),()=>{M.assign(F(0,0,0,0))}).Else(()=>{let T=yn(g.mul(g).add(y.mul(y))).max(d(1e-4)),w=g.div(T),S=y.div(T),A=e.tubeThickness.uniform,I=ht(x.negate().div(A.max(d(.001))),d(0),d(1)),N=we(_,_.negate(),x),P=we(A.add(_),A.sub(_),x.negate()),B=N.mul(P),U=I,D=yn(U.mul(d(2).sub(U)).max(d(0))),L=d(1).sub(U),k=w.mul(L),W=S.mul(L),$=D,ie=e.lightAngle.uniform.mul(d(Math.PI/180)),xe=ke(ie),he=ue(ie),Pe=xe.mul(d(lm)),Ge=he.mul(d(lm)),He=d(CF),oe=ht(k.mul(Pe).add(W.mul(Ge)).add($.mul(He)),d(0),d(1)),be=k.mul(Pe.mul(d(Pw))).add(W.mul(Ge.mul(d(Pw)))).add($.mul(d(Dw*Pw))),Te=Gh(d(8).sub(e.specularSize.uniform.mul(d(7)))),Fe=Pt(ht(be,d(0),d(1)),Te).mul(e.specularIntensity.uniform),ze=a.x.sub(d(.5)),fe=ue(Jn(a.y.sub(d(.5)),ze).mul(d(2)).add(t.mul(e.flowSpeed.uniform))).mul(d(.5)).add(d(.5)),Xe=ve(d(1),fe,e.flowAmount.uniform),Re=de(e.color.uniform.x,e.color.uniform.y,e.color.uniform.z),Y=de(e.secondaryColor.uniform.x,e.secondaryColor.uniform.y,e.secondaryColor.uniform.z),ye=e.secondaryBlend.uniform,Me=ve(Re,ve(Y,Re,oe),ye),Le=d(.12),Ye=D.mul(d(.35)),tt=Me.mul(Le.add(oe.mul(d(.55))).add(Ye)),et=de(Fe,Fe,Fe),Qe=tt.add(et),nt=we(d(.55),d(1),I).mul(e.hotCoreIntensity.uniform).mul(Xe),J=ve(Qe,ve(Re,de(1,1,1),d(.75)),nt).mul(ve(d(1),Xe,d(.4))),Ie=e.glowIntensity.uniform,Ee=St(x,d(0)),O=d(12).div(v),E=Ni(Ee.negate().mul(O)).mul(d(.7)),z=d(4).div(v),q=Ni(Ee.negate().mul(z)).mul(d(.35)),Q=E.add(q).mul(Ie),Se=we(d(-.003),d(.003),x),Ae=Q.mul(Se),K=de(e.glowColor.uniform.x,e.glowColor.uniform.y,e.glowColor.uniform.z),Z=t.mul(e.flickerSpeed.uniform),me=ue(Z.mul(d(17.13))),Ze=ue(Z.mul(d(31.71))),Be=ue(Z.mul(d(47.29))),Je=me.add(Ze.mul(d(.5))).add(Be.mul(d(.3))),gt=ve(d(-2),d(.8),e.flickerAmount.uniform),xt=we(gt.sub(d(.1)),gt.add(d(.1)),Je),Dt=e.intensity.uniform.mul(xt),se=J.mul(Dt),st=K.mul(Ae).mul(Dt),De=ve(st.x,se.x,B),dt=ve(st.y,se.y,B),Et=ve(st.z,se.z,B),ot=St(B,ht(Ae.mul(d(.6)),d(0),d(1)));M.assign(F(De,dt,Et,ot))}),M})()}var Lq=JSON.stringify({type:"circleSDF",radius:.35}),EF={name:"Neon",category:"Shape Effects",description:"Photorealistic neon tube / 3D pipe effect driven by a custom shape",props:{center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the neon shape",ui:{type:"position",label:"Center",group:"Position"}},scale:{default:1,description:"Scale of the neon shape (1 = default size)",ui:{type:"range",min:.1,max:3,step:.05,label:"Scale",group:"Position"}},color:{default:"#00ddff",transform:_e,description:"Primary neon tube color",ui:{type:"color",label:"Tube Color",group:"Colors"}},secondaryColor:{default:"#ff00aa",transform:_e,description:"Shadow-side color for a two-tone / dual-lit pipe look",ui:{type:"color",label:"Secondary Color",group:"Colors"}},secondaryBlend:{default:.5,description:"Blend between mono (0) and two-tone (1) tube coloring",ui:{type:"range",min:0,max:1,step:.01,label:"Blend",group:"Colors"}},glowColor:{default:"#00ddff",transform:_e,description:"Color of the outer glow / bloom",ui:{type:"color",label:"Glow Color",group:"Colors"}},tubeThickness:{default:.2,transform:s=>s*.05,description:"How far inward from the boundary the tube extends. Low = thin neon outline, high = thick 3D pipe",ui:{type:"range",min:0,max:1,step:.01,label:"Tube Thickness",group:"Tube"}},intensity:{default:1.5,description:"Overall brightness multiplier",ui:{type:"range",min:.5,max:4,step:.05,label:"Intensity",group:"Tube"}},hotCoreIntensity:{default:.6,description:"Bright white-hot center line \u2014 the gas discharge glow inside the tube",ui:{type:"range",min:0,max:1,step:.01,label:"Hot Core",group:"Tube"}},glowIntensity:{default:.6,description:"Outer glow / bloom strength",ui:{type:"range",min:0,max:2,step:.05,label:"Glow Intensity",group:"Glow"}},glowRadius:{default:.25,description:"How far the glow extends beyond the tube",ui:{type:"range",min:.01,max:1,step:.01,label:"Glow Radius",group:"Glow"}},lightAngle:{default:300,description:"Directional light angle in degrees \u2014 controls 3D shading on the tube",ui:{type:"range",min:0,max:360,step:1,label:"Light Angle",group:"Lighting"}},specularIntensity:{default:.5,description:"Specular highlight brightness on the tube surface",ui:{type:"range",min:0,max:2,step:.05,label:"Specular",group:"Lighting"}},specularSize:{default:.5,description:"Specular highlight size \u2014 0 = tight pinpoint, 1 = broad sheen",ui:{type:"range",min:0,max:1,step:.01,label:"Specular Size",group:"Lighting"}},cornerSmoothing:{default:.15,description:"Rounds sharp corners to mimic how real glass tubes curve at bends",ui:{type:"range",min:0,max:1,step:.01,label:"Corner Smoothing",group:"Tube"}},flickerSpeed:{default:0,description:"Flicker animation speed \u2014 0 = off, higher = faster sporadic on/off",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Flicker"}},flickerAmount:{default:.2,description:"How often the neon flickers off \u2014 0 = always on, 1 = frequent outages",ui:{type:"range",min:0,max:1,step:.01,label:"Amount",group:"Flicker"}},flowSpeed:{default:0,description:"Flow animation speed \u2014 0 = off, light rotates through the tube",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Flow"}},flowAmount:{default:.3,description:"Strength of the flowing brightness variation \u2014 0 = uniform, 1 = dramatic",ui:{type:"range",min:0,max:1,step:.01,label:"Amount",group:"Flow"}},shape:{default:Lq,description:"Serialized shape configuration (JSON)",ui:{type:"shape",label:"Shape",group:"Shape"}},shapeSdfUrl:{default:"",compileTime:!0,description:"URL to a pre-generated SDF .bin file \u2014 when non-empty, activates SVG mode and triggers a shader recompile"},shapeType:{default:"",compileTime:!0,description:"Active SDF shape type \u2014 triggers recompile when shape is switched. When empty, derived from shape JSON at mount time."}},fragmentNode:({uniforms:s,onCleanup:e,onBeforeRender:t})=>{let n=ee(0);t(({deltaTime:o})=>{n.value+=o});let i=s.shapeSdfUrl.uniform.value,r=(()=>{let o=s.shape.uniform.value;if(typeof o=="object"&&o!==null)return o;try{return JSON.parse(o)}catch{return{type:"circleSDF",radius:.35,centerX:.5,centerY:.5}}})();return AF(i?$r(i,t,e):qr(s.shapeType.uniform.value||r.type||"circleSDF",r,s.shape,t),s,n)}};var RF={name:"Paper",category:"Stylize",description:"Applies realistic paper grain and surface roughness to child content",requiresRTT:!0,requiresChild:!0,props:{roughness:{default:.3,description:"Surface roughness \u2014 higher values create more pronounced brightness variation",ui:{type:"range",min:0,max:1,step:.01,label:"Roughness",group:"Texture"}},grainScale:{default:1,description:"Scale of the paper grain \u2014 lower = coarser, higher = finer",ui:{type:"range",min:.1,max:3,step:.05,label:"Grain Scale",group:"Texture"}},displacement:{default:.15,description:"Surface micro-roughness \u2014 shifts pixels at grain scale like real paper fiber bumps",ui:{type:"range",min:0,max:1,step:.01,label:"Displacement",group:"Texture"}},seed:{default:0,description:"Random seed for pattern variation",ui:{type:"range",min:0,max:100,step:1,label:"Seed",group:"Texture"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=H,r=X.x.div(X.y),o=R(i.x.mul(r),i.y),a=s.seed.uniform,l=s.grainScale.uniform.mul(d(120)).add(d(120)),c=l.mul(d(.25)),u=o.mul(c).add(a.add(d(50))),h=Dn(de(u.x,u.y,d(22.3))),p=Dn(de(u.x,u.y,d(29.7))),f=s.displacement.uniform.mul(d(.002)),m=i.add(R(h.mul(f),p.mul(f))),g=n.sample(m),y=R(m.x.mul(r),m.y).add(R(h.mul(d(.005)),p.mul(d(.005)))),x=y.mul(l.mul(d(.1))).add(a),b=Dn(de(x.x,x.y,d(1.3))),v=y.mul(l.mul(d(.4))).add(a.add(d(33.7))),_=bt(Dn(de(v.x,v.y,d(4.1)))),M=y.mul(l).add(a.add(d(71.2))),T=Dn(de(M.x,M.y,d(9.8))),w=y.mul(l.mul(d(2))).add(a.add(d(107.3))),S=Dn(de(w.x,w.y,d(15.6))),A=b.mul(d(.3)).add(_.mul(d(.3))).add(T.mul(d(.25))).add(S.mul(d(.15))),I=s.roughness.uniform,N=ht(d(1).add(A.mul(I.mul(d(.4)))),d(0),d(1.5)),P=de(g.r,g.g,g.b).mul(N);return F(P.x,P.y,P.z,g.a)}};var NF={name:"Perspective",category:"Distortions",description:"Rotate the plane in 3D space with pan and tilt",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"Center point of rotation",ui:{type:"position",label:"Center",group:"Position"}},pan:{default:0,description:"Horizontal rotation (left/right)",ui:{type:["range","map"],min:-90,max:90,step:.1,label:"Pan",group:"Effect"}},tilt:{default:0,description:"Vertical rotation (up/down)",ui:{type:["range","map"],min:-90,max:90,step:.1,label:"Tilt",group:"Effect"}},fov:{default:60,description:"Field of view - controls perspective intensity",ui:{type:["range","map"],min:30,max:120,step:1,label:"FOV",group:"Effect"}},zoom:{default:1,description:"Zoom in to fill the frame after rotation",ui:{type:["range","map"],min:.5,max:3,step:.1,label:"Zoom",group:"Effect"}},offset:{default:{x:.5,y:.5},transform:ft,description:"Shift the result in X/Y",ui:{type:"position",label:"Offset",group:"Position"}},edges:{default:"transparent",description:"How to handle edges",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=R(s.center.uniform.x,s.center.uniform.y.oneMinus()),r=s.zoom.uniform,o=H.x.sub(i.x).div(r),a=H.y.sub(i.y).div(r),l=s.pan.uniform.mul(Math.PI/180),c=s.tilt.uniform.mul(Math.PI/180),u=s.fov.uniform.mul(Math.PI/180),h=ke(l),p=ue(l),f=ke(c),m=ue(c),g=w3(u.mul(.5)).mul(2),y=St(h.add(p.mul(o).mul(g)),d(.001)),x=o.div(y),b=a.mul(h).div(y),v=St(f.add(m.mul(b).mul(g)),d(.001)),_=x.mul(f).div(v),M=b.div(v),T=R(s.offset.uniform.x,s.offset.uniform.y.oneMinus()),w=R(_,M).add(i).sub(T).add(R(.5,.5));return It(En(w,n.sample(w),n,s.edges.uniform.value))}};var PF={name:"Pixelate",category:"Stylize",description:"Pixelation effect with adjustable cell size",requiresRTT:!0,requiresChild:!0,props:{scale:{default:50,description:"Number of pixels along the longest edge (higher = smaller pixels)",ui:{type:["range","map"],min:1,max:200,step:1,label:"Scale",group:"Effect"}},gap:{default:0,description:"Space between pixels as a fraction of cell size (0 = no gap, 1 = fully invisible)",ui:{type:["range","map"],min:0,max:.95,step:.01,label:"Gap",group:"Effect"}},roundness:{default:0,description:"Roundness of each pixel's corners (0 = square, 1 = circle)",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Roundness",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=X.x.div(X.y),r=s.scale.uniform,o=i.greaterThan(d(1)),a=o.select(r,r.mul(i)).max(d(1)),l=o.select(r.div(i),r).max(d(1)),c=R(Ht(H.x.mul(a)).div(a),Ht(H.y.mul(l)).div(l)),u=It(n.sample(c)),h=R(ct(H.x.mul(a)).sub(.5),ct(H.y.mul(l)).sub(.5)),p=d(.5).sub(s.gap.uniform.mul(.5)),f=s.roundness.uniform.mul(p),m=In(R(h.x.abs().sub(p).add(f).max(d(0)),h.y.abs().sub(p).add(f).max(d(0)))).sub(f).lessThanEqual(d(0)).select(d(1),d(0));return F(u.rgb,u.a.mul(m))}};var IF={name:"Plasma",category:"Textures",description:"Animated effect of glowing plasma",props:{density:{default:2,description:"Density of the plasma pattern",ui:{type:["range","map"],min:0,max:4,step:.1,label:"Density",group:"Effect"}},speed:{default:2,description:"Animation speed",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Effect"}},intensity:{default:1.5,description:"Brightness and spread of the plasma glow",ui:{type:["range","map"],min:.1,max:3,step:.1,label:"Intensity",group:"Colors"}},warp:{default:.4,description:"How much the flow distorts and swirls",ui:{type:"range",min:0,max:1,step:.01,label:"Warp",group:"Effect"}},contrast:{default:1,description:"Push darks darker and lights lighter",ui:{type:["range","map"],min:0,max:3,step:.1,label:"Contrast",group:"Colors"}},balance:{default:50,description:"Skew color balance toward A (higher) or B (lower)",ui:{type:["range","map"],min:0,max:100,step:1,label:"Balance",group:"Colors"}},colorA:{default:"#7018be",description:"Primary color",transform:_e,ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#000000",description:"Secondary color",transform:_e,ui:{type:"color",label:"Color B",group:"Colors"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:s=>{let{uniforms:e}=s,t=e.density.uniform,n=e.intensity.uniform,i=e.warp.uniform,r=cn(s,e.speed).mul(.125),o=X.x.div(X.y),a=de(H.x.mul(o),H.y,d(0)).mul(Ni(t.sub(1))).toVar(),l=i.mul(4),c=Dn(a.add(de(r.mul(.3),r.mul(-.2),0))),u=Dn(a.add(de(5.2,1.3,r.mul(.25)))),h=a.add(de(c,u,d(0)).mul(l)),p=Dn(h.add(de(1.7,9.2,r.mul(.15)))),f=Dn(h.add(de(8.3,2.8,r.mul(.13)))),m=ht(Pt(Dn(a.add(de(p,f,d(0)).mul(l))).mul(.5).add(.5),d(5).div(n)).sub(.5).mul(e.contrast.uniform).add(.5),0,1),g=e.balance.uniform.div(100).sub(.5),y=ht(m.add(g),0,1);return wt(e.colorB.uniform,e.colorA.uniform,y,e.colorSpace.uniform.value)}};var DF={name:"PolarCoordinates",category:"Distortions",description:"Convert rectangular coordinates to polar space",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"The center point for polar coordinate conversion",ui:{type:"position",label:"Center",group:"Position"}},wrap:{default:1,description:"Controls how much of the angular range to use (1 = full 360\xB0, 0.5 = 180\xB0)",ui:{type:["range","map"],min:0,max:2,step:.1,label:"Wrap",group:"Effect"}},radius:{default:1,description:"Controls how much of the radius range to use (affects the radial mapping)",ui:{type:["range","map"],min:0,max:2,step:.1,label:"Radius",group:"Effect"}},intensity:{default:1,description:"Blends between original UVs (0) and polar coordinates (1)",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Intensity",group:"Effect"}},edges:{default:"transparent",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=X.x.div(X.y),r=R(H.x.mul(i),H.y),o=R(s.center.uniform.x.mul(i),s.center.uniform.y.oneMinus()),a=r.sub(o),l=Jn(a.y,a.x).add(Qs).div(Qs.mul(2)),c=In(a),u=ve(H,R(l.mul(s.wrap.uniform),c.mul(s.radius.uniform)),s.intensity.uniform);return It(En(u,n.sample(u),n,s.edges.uniform.value))}};var Bq=s=>({outside:0,center:1,inside:2})[s?.toLowerCase()]??1,FF={name:"Polygon",category:"Shapes",description:"Regular polygon with adjustable sides and corner rounding",props:{color:{default:"#ffffff",transform:_e,description:"Fill color of the polygon",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the polygon",ui:{type:"position",label:"Center",group:"Position"}},radius:{default:.4,description:"Circumradius \u2014 distance from center to vertices in UV space",ui:{type:"range",min:0,max:1,step:.01,label:"Radius",group:"Shape"}},sides:{default:6,description:"Number of sides (3 = triangle, 4 = square, 6 = hexagon, etc.)",ui:{type:"range",min:3,max:12,step:1,label:"Sides",group:"Shape"}},rounding:{default:0,description:"Corner rounding \u2014 0 is sharp vertices, 1 morphs into a circle",ui:{type:"range",min:0,max:1,step:.01,label:"Rounding",group:"Shape"}},rotation:{default:0,description:"Rotation in degrees",ui:{type:"range",min:0,max:360,step:1,label:"Rotation",group:"Shape"}},softness:{default:0,description:"Edge softness for antialiasing",ui:{type:"range",min:0,max:.1,step:.001,label:"Softness",group:"Effect"}},strokeThickness:{default:0,description:"Stroke thickness. Zero means no stroke.",ui:{type:"range",min:0,max:.2,step:.005,label:"Stroke Thickness",group:"Stroke"}},strokeColor:{default:"#000000",transform:_e,description:"Color of the stroke outline",ui:{type:"color",label:"Stroke Color",group:"Colors"}},strokePosition:{default:"center",transform:Bq,description:"Position of the stroke relative to the shape edge",ui:{type:"select",options:[{label:"Outside",value:"outside"},{label:"Center",value:"center"},{label:"Inside",value:"inside"}],label:"Stroke Position",group:"Stroke"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for blending fill and stroke colors",ui:{type:"select",options:Ft,label:"Color Blending",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=n.x.sub(i.x),o=n.y.sub(i.y),a=s.rotation.uniform.mul(d(Math.PI/180)),l=ke(a),c=ue(a),u=r.mul(l).add(o.mul(c)),h=o.mul(l).sub(r.mul(c)),p=s.radius.uniform,f=ve(xw(u,h,p,s.sides.uniform),Fy(r,o,p),s.rounding.uniform),m=s.softness.uniform,g=s.strokeThickness.uniform,y=s.strokePosition.uniform,x=g.greaterThan(d(0)),b=y.greaterThanEqual(d(.5)).and(y.lessThan(d(1.5))),v=y.greaterThanEqual(d(1.5)),_=g.mul(.5),M=v.select(g.negate(),b.select(_.negate(),d(0))),T=v.select(d(0),b.select(_,g)),w=we(T.sub(m),T,f).oneMinus(),S=x.select(we(M.sub(m),M,f),d(0)),A=wt(F(s.color.uniform.rgb,s.color.uniform.a),F(s.strokeColor.uniform.rgb,s.strokeColor.uniform.a),S,s.colorSpace.uniform.value);return F(A.xyz,A.w.mul(w))}};var UF={name:"Posterize",category:"Adjustments",description:"Reduce color depth to create a poster effect",requiresChild:!0,props:{intensity:{default:5,description:"The intensity of the posterization effect (lower is more posterized)",ui:{type:["range","map"],min:2,max:20,step:1,label:"Intensity",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return console.error("You must pass a child component into the Posterize shader."),F(0);let t=d(s.intensity.uniform);return F(Ht(e.r.mul(t)).div(t),Ht(e.g.mul(t)).div(t),Ht(e.b.mul(t)).div(t),e.a)}};var LF={name:"ProgressiveBlur",category:"Blurs",description:"Blur that increases progressively in one direction",requiresRTT:!0,requiresChild:!0,props:{intensity:{default:50,description:"Maximum intensity of the blur effect",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Effect"}},angle:{default:0,transform:cs,description:"Direction of the blur gradient (in degrees)",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},center:{default:{x:0,y:.5},transform:ft,description:"Center point where blur begins",ui:{type:"position",label:"Center",group:"Position"}},falloff:{default:1,description:"Distance over which blur transitions to full strength",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Falloff",group:"Effect"}}},computeNode:({childNode:s,onCleanup:e,dimensions:t,renderer:n,uniforms:i,onResize:r})=>{if(!s||i.angle.mapComputeInfo||i.falloff.mapComputeInfo)return null;let o=_t(s);e(()=>{o?.renderTarget?.dispose&&o.renderTarget.dispose()});let a=n?.getPixelRatio?.()??1,l=Math.round(t.width*a),c=Math.round(t.height*a),u=Ia(o,l,c,e),{computeNodes:h,outputTexture:p,blurMapWriteNode:f,computeWidth:m,computeHeight:g}=u,y=ee(0),x=ee(0),b=ee(.5),v=ee(1),_=ee(1),M=ee(l),T=ee(c),w=gn(m),S=gn(g);function A(U){return U.getCpuValue?.()??(typeof U.uniform.value=="number"?U.uniform.value:null)}function I(){let U=A(i.angle);U!==null&&(y.value=U);let D=i.center.uniform.value?.x??i.center.uniform.x?.value;typeof D=="number"&&(x.value=D);let L=i.center.uniform.value?.y??i.center.uniform.y?.value;typeof L=="number"&&(b.value=L);let k=A(i.falloff);k!==null&&(v.value=k),_.value=t.width/t.height}let N=i.intensity.mapComputeInfo;if(N){let{sourceTexture:U,channel:D,inputMin:L,inputMax:k,outputMin:W,outputMax:$,curve:ie}=N,xe=Ne(()=>{let he=kt,Pe=he.mod(w),Ge=he.div(w);wn(Ge.lessThan(S),()=>{let He=Pe.toFloat().add(d(.5)).div(d(m)),oe=Ge.toFloat().add(d(.5)).div(d(g)),be=y.mul(d(Math.PI/180)),Te=R(be.cos().div(_),be.sin()),Fe=R(x,d(1).sub(b)),ze=R(He,oe).sub(Fe),fe=St(d(0),ze.dot(Te)),Xe=we(d(0),v,fe),Re=vi(U,Mn(He.mul(M).round().toInt().clamp(Tt(0),Tt(M.sub(1))).toUint(),oe.mul(T).round().toInt().clamp(Tt(0),Tt(T.sub(1))).toUint()),Tt(0)),Y;D==="alpha"?Y=Re.a:D==="alphaInverted"?Y=Re.a.oneMinus():D==="luminanceInverted"?Y=Nt(Re.rgb,de(.2126,.7152,.0722)).oneMinus():Y=Nt(Re.rgb,de(.2126,.7152,.0722));let ye=k.sub(L).max(d(1e-4)),Me=ve(W,$,Pt(ht(Y.sub(L).div(ye),d(0),d(1)),Pt(d(2),ie.negate().mul(d(2))))).mul(d(.36)),Le=Xe.mul(Me);$n(f,Mn(Pe,Ge),F(Le,d(0),d(0),d(1))).toWriteOnly()})})().compute(m*g,[256]);return r(({width:he,height:Pe})=>{let Ge=Math.round(he*a),He=Math.round(Pe*a);M.value=Ge,T.value=He,u.setInputDimensions(Ge,He)}),{outputs:{childTexture:o,blurredTexture:p},getComputeNodes:()=>(I(),[xe,...h])}}let P=ee(18),B=Ne(()=>{let U=kt,D=U.mod(w),L=U.div(w);wn(L.lessThan(S),()=>{let k=D.toFloat().add(d(.5)).div(d(m)),W=L.toFloat().add(d(.5)).div(d(g)),$=y.mul(d(Math.PI/180)),ie=R($.cos().div(_),$.sin()),xe=R(x,d(1).sub(b)),he=R(k,W).sub(xe),Pe=St(d(0),he.dot(ie)),Ge=we(d(0),v,Pe).mul(P);$n(f,Mn(D,L),F(Ge,d(0),d(0),d(1))).toWriteOnly()})})().compute(m*g,[256]);return r(({width:U,height:D})=>{u.setInputDimensions(Math.round(U*a),Math.round(D*a))}),{outputs:{childTexture:o,blurredTexture:p},getComputeNodes:()=>{I();let U=A(i.intensity);return U!==null&&(P.value=U*.36),[B,...h]}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t,computeOutputs:n})=>{if(!e)return F(0,0,0,0);if(n?.blurredTexture){let _=n.childTexture.sample(H),M=hn(n.blurredTexture).sample(H),T=s.intensity.uniform.mul(d(0)).add(s.angle.uniform.mul(d(0))).add(s.falloff.uniform.mul(d(0)));return It(F(M.rgb.add(T),_.a))}let i=_t(e);t(()=>{i?.renderTarget?.dispose&&i.renderTarget.dispose()});let r=X.x.div(X.y),o=Ls(s.angle.uniform),a=ke(o),l=ue(o),c=R(a.div(r),l),u=R(s.center.uniform[0],s.center.uniform[1].oneMinus()),h=H.sub(u),p=St(d(0),h.dot(c)),f=St(d(.001),s.falloff.uniform),m=we(d(0),f,p),g=s.intensity.uniform.mul(.06),y=m.mul(g),x=[.056,.135,.278,.487,.726,.923,1,.923,.726,.487,.278,.135,.056],b=6.214,v=_t(Ne(()=>{let _=H,M=R(1).div(X),T=F(0).toVar();for(let w=-6;w<=6;w++){let S=d(x[w+6]/b),A=R(d(w),d(0)).mul(y).mul(M),I=_.add(A),N=i.sample(I).mul(S);T.assign(T.add(N))}return T})());return t(()=>{v?.renderTarget?.dispose&&v.renderTarget.dispose()}),Ne(()=>{let _=H,M=R(1).div(X),T=F(0).toVar();for(let w=-6;w<=6;w++){let S=d(x[w+6]/b),A=R(d(0),d(w)).mul(y).mul(M),I=_.add(A),N=v.sample(I).mul(S);T.assign(T.add(N))}return It(T)})()}};var BF={name:"RadialGradient",category:"Textures",description:"Radial gradient radiating from a center point",props:{colorA:{default:"#ff0000",transform:_e,description:"The starting color at the center of the gradient",ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#0000ff",transform:_e,description:"The ending color at the edge of the gradient",ui:{type:"color",label:"Color B",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"The center point of the radial gradient",ui:{type:"position",label:"Center",group:"Position"}},radius:{default:1,description:"The radius of the gradient (normalized, 0.0-1.0)",ui:{type:["range","map"],min:0,max:2,step:.1,label:"Radius",group:"Effect"}},repeat:{default:1,description:"Number of times the gradient repeats. Values above 1 create concentric rings.",ui:{type:["range","map"],min:1,max:20,step:.5,label:"Repeat",group:"Effect"}},aspect:{default:1,description:"Stretches the gradient into an ellipse. Values below 1 compress vertically, above 1 compress horizontally.",ui:{type:["range","map"],min:.1,max:4,step:.05,label:"Aspect",group:"Effect"}},skewAngle:{default:0,description:"Rotates the ellipse axis in degrees. Only visible when Aspect is not 1.",ui:{type:["range","map"],min:0,max:360,step:1,label:"Skew Angle",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=n.x.sub(i.x),o=n.y.sub(i.y),a=s.skewAngle.uniform.mul(d(Math.PI/180)),l=ke(a),c=ue(a),u=r.mul(l).add(o.mul(c)),h=r.mul(c).negate().add(o.mul(l)),p=oy(R(u.mul(s.aspect.uniform),h),R(d(0),d(0))),f=s.radius.uniform.max(d(1e-6)),m=p.div(f).mul(s.repeat.uniform),g=s.repeat.uniform.greaterThan(d(1.0001)).select(ct(m),m.clamp(d(0),d(1)));return wt(s.colorA.uniform,s.colorB.uniform,g,s.colorSpace.uniform.value)}};var OF={name:"RectangularCoordinates",category:"Distortions",description:"Convert polar coordinates back to rectangular space",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"The center point for rectangular coordinate conversion",ui:{type:"position",label:"Center",group:"Position"}},scale:{default:1,description:"Scale factor for the rectangular output",ui:{type:["range","map"],min:.1,max:3,step:.1,label:"Scale",group:"Effect"}},intensity:{default:1,description:"Blends between original UVs (0) and rectangular coordinates (1)",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Intensity",group:"Effect"}},edges:{default:"transparent",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=H.x.mul(Qs.mul(2)).sub(Qs),r=H.y.mul(s.scale.uniform),o=r.mul(ke(i)),a=r.mul(ue(i)),l=X.x.div(X.y),c=R(s.center.uniform.x,s.center.uniform.y.oneMinus()),u=ve(H,R(o.div(l).add(c.x),a.add(c.y)),s.intensity.uniform);return It(En(u,n.sample(u),n,s.edges.uniform.value))}};var Oq=30,kq=12,Fw=[[0,0],[-.94,-.34],[.95,.31],[-.09,-.93],[.34,.94],[-.91,.41],[.88,-.46],[-.4,.71],[.51,.58],[-.49,-.59],[.4,-.68],[-.71,.05],[.07,.21]],Vq=1/Fw.length,kF={name:"ReflectivePlane",category:"Stylize",description:"Reflective floor that mirrors the content above it",requiresRTT:!0,requiresChild:!0,props:{height:{default:.7,description:"Vertical position of the reflective surface",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Floor Height",group:"Plane"}},distance:{default:.5,description:"How far below the floor the reflection remains visible before fully fading to transparent.",ui:{type:["range","map"],min:.01,max:1,step:.01,label:"Reflection Distance",group:"Plane"}},falloff:{default:.5,description:"Width of the fade zone, as a fraction of reflection distance.",ui:{type:["range","map"],min:0,max:3,step:.01,label:"Reflection Falloff",group:"Plane"}},blur:{default:3,description:"Maximum blur applied to the reflection far from the surface.",ui:{type:["range","map"],min:0,max:5,step:.05,label:"Blur",group:"Surface"}},blurDistance:{default:.3,description:"How far below the surface the blur takes to ramp from sharp to maximum.",ui:{type:"range",min:.01,max:1,step:.01,label:"Blur Distance",group:"Surface"}},edges:{default:"stretch",description:"How to handle reflected samples that fall outside the source content.",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Surface"}}},computeNode:({childNode:s,onCleanup:e,dimensions:t,renderer:n,uniforms:i,onResize:r})=>{if(!s||i.height.mapComputeInfo||i.blur.mapComputeInfo||i.blurDistance.mapComputeInfo)return null;let o=_t(s);e(()=>{o?.renderTarget?.dispose&&o.renderTarget.dispose()});let a=n?.getPixelRatio?.()??1,l=Ia(o,Math.round(t.width*a),Math.round(t.height*a),e,Oq),{computeNodes:c,outputTexture:u,blurMapWriteNode:h,computeWidth:p,computeHeight:f}=l,m=ee(.5),g=ee(1),y=ee(.5),x=gn(p),b=gn(f);function v(T){return T.getCpuValue?.()??(typeof T.uniform.value=="number"?T.uniform.value:null)}function _(){let T=v(i.height);T!==null&&(m.value=T);let w=v(i.blur);w!==null&&(g.value=w);let S=v(i.blurDistance);S!==null&&(y.value=Math.max(.01,S))}let M=Ne(()=>{let T=kt,w=T.mod(x),S=T.div(x);wn(S.lessThan(b),()=>{let A=S.toFloat().add(d(.5)).div(d(f)),I=m.sub(A).max(d(0)),N=we(d(0),y,I),P=g.mul(N).mul(d(kq));$n(h,Mn(w,S),F(P,d(0),d(0),d(1))).toWriteOnly()})})().compute(p*f,[256]);return r(({width:T,height:w})=>{l.setInputDimensions(Math.round(T*a),Math.round(w*a))}),{outputs:{childTexture:o,blurredTexture:u},getComputeNodes:()=>(_(),[M,...c])}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t,computeOutputs:n})=>{if(!e)return F(0,0,0,0);if(n?.blurredTexture&&n?.childTexture){let r=n.childTexture,o=hn(n.blurredTexture);return Ne(()=>{let a=s.height.uniform,l=H,c=l.y.sub(a).max(d(0)),u=r.sample(l),h=R(l.x,a.mul(2).sub(l.y)),p=En(h,o.sample(h),o,s.edges.uniform.value),f=s.distance.uniform.max(d(.001)),m=f.mul(s.falloff.uniform).max(d(1e-4)),g=f.sub(m),y=d(1).sub(we(g,f,c)),x=p.a.mul(y),b=p.rgb.mul(y),v=s.height.uniform.mul(d(0)).add(s.blur.uniform.mul(d(0))).add(s.blurDistance.uniform.mul(d(0))),_=x.oneMinus();return It(ve(u,F(b.add(u.rgb.mul(_)).add(v),x.add(u.a.mul(_))),ln(a,l.y)))})()}let i=_t(e);return t(()=>{i?.renderTarget?.dispose&&i.renderTarget.dispose()}),Ne(()=>{let r=s.height.uniform,o=H,a=X.x.div(X.y),l=o.y.sub(r).max(d(0)),c=i.sample(o),u=R(o.x,r.mul(2).sub(o.y)),h=s.blurDistance.uniform.max(d(.01)),p=we(d(0),h,l),f=s.blur.uniform.mul(p).mul(.02),m=F(0).toVar();for(let T=0;T<Fw.length;T++){let[w,S]=Fw[T],A=R(d(w).mul(f).div(a),d(S).mul(f)),I=u.add(A),N=En(I,i.sample(I),i,s.edges.uniform.value);m.assign(m.add(N.mul(d(Vq))))}let g=s.distance.uniform.max(d(.001)),y=g.mul(s.falloff.uniform).max(d(1e-4)),x=g.sub(y),b=d(1).sub(we(x,g,l)),v=m.a.mul(b),_=m.rgb.mul(b),M=v.oneMinus();return It(ve(c,F(_.add(c.rgb.mul(M)),v.add(c.a.mul(M))),ln(r,o.y)))})()}};var zq=s=>({outside:0,center:1,inside:2})[s?.toLowerCase()]??1,VF={name:"Ring",category:"Shapes",description:"Annular ring (donut) with adjustable radius and band thickness",props:{color:{default:"#ffffff",transform:_e,description:"Fill color of the ring",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the ring",ui:{type:"position",label:"Center",group:"Position"}},radius:{default:.3,description:"Distance from center to the ring's midline in UV space",ui:{type:"range",min:0,max:1,step:.01,label:"Radius",group:"Shape"}},thickness:{default:.07,description:"Half-width of the ring band \u2014 total ring width is twice this value",ui:{type:"range",min:.005,max:.3,step:.005,label:"Thickness",group:"Shape"}},softness:{default:0,description:"Edge softness for antialiasing (applied to both inner and outer ring edges)",ui:{type:"range",min:0,max:.1,step:.001,label:"Softness",group:"Effect"}},strokeThickness:{default:0,description:"Stroke thickness. Zero means no stroke.",ui:{type:"range",min:0,max:.1,step:.005,label:"Stroke Thickness",group:"Stroke"}},strokeColor:{default:"#000000",transform:_e,description:"Color of the stroke outline",ui:{type:"color",label:"Stroke Color",group:"Colors"}},strokePosition:{default:"center",transform:zq,description:"Position of the stroke relative to the ring edge",ui:{type:"select",options:[{label:"Outside",value:"outside"},{label:"Center",value:"center"},{label:"Inside",value:"inside"}],label:"Stroke Position",group:"Stroke"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for blending fill and stroke colors",ui:{type:"select",options:Ft,label:"Color Blending",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=vw(n.x.sub(i.x),n.y.sub(i.y),s.radius.uniform,s.thickness.uniform),o=s.softness.uniform,a=s.strokeThickness.uniform,l=s.strokePosition.uniform,c=a.greaterThan(d(0)),u=l.greaterThanEqual(d(.5)).and(l.lessThan(d(1.5))),h=l.greaterThanEqual(d(1.5)),p=a.mul(.5),f=h.select(a.negate(),u.select(p.negate(),d(0))),m=h.select(d(0),u.select(p,a)),g=we(m.sub(o),m,r).oneMinus(),y=c.select(we(f.sub(o),f,r),d(0)),x=wt(F(s.color.uniform.rgb,s.color.uniform.a),F(s.strokeColor.uniform.rgb,s.strokeColor.uniform.a),y,s.colorSpace.uniform.value);return F(x.xyz,x.w.mul(g))}};var zF={name:"Ripples",category:"Textures",description:"Concentric animated ripples emanating from a point",props:{center:{default:{x:.5,y:.5},transform:ft,description:"The center point where ripples emanate from",ui:{type:"position",label:"Center",group:"Position"}},colorA:{default:"#ffffff",transform:_e,description:"Color of the ripple waves",ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#000000",transform:_e,description:"Background color between ripples",ui:{type:"color",label:"Color B",group:"Colors"}},speed:{default:1,description:"Speed of ripple animation",ui:{type:"range",min:-5,max:5,step:.1,label:"Speed",group:"Animation"}},frequency:{default:20,description:"Number of ripples/spacing between them",ui:{type:["range","map"],min:1,max:80,step:.1,label:"Frequency",group:"Effect"}},softness:{default:0,description:"Softness of ripple edges",ui:{type:["range","map"],min:0,max:3,step:.1,label:"Softness",group:"Effect"}},thickness:{default:.5,description:"Thickness of each ripple band",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Thickness",group:"Effect"}},phase:{default:0,description:"Phase offset for ripple animation",ui:{type:["range","map"],min:0,max:6.28,step:.1,label:"Phase",group:"Animation"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=e.center.uniform,i=e.colorA.uniform,r=e.colorB.uniform,o=e.frequency.uniform,a=e.softness.uniform,l=e.thickness.uniform,c=e.phase.uniform,u=X.x.div(X.y),h=oy(R(t.x.mul(u),t.y),R(n.x.mul(u),n.y.oneMinus())),p=cn(s,e.speed),f=ue(h.mul(o).sub(p).add(c)),m=l.mul(d(2)).sub(d(1));return wt(r,i,we(m.sub(a),m.add(a),f).oneMinus(),0)}};var Gq=s=>({outside:0,center:1,inside:2})[s?.toLowerCase()]??1,GF={name:"RoundedRect",category:"Shapes",description:"Rounded rectangle with adjustable width, height, and corner rounding",props:{color:{default:"#ffffff",transform:_e,description:"Fill color of the rectangle",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the rectangle",ui:{type:"position",label:"Center",group:"Position"}},width:{default:.35,description:"Half-width of the rectangle",ui:{type:"range",min:.01,max:1,step:.01,label:"Width",group:"Shape"}},height:{default:.25,description:"Half-height of the rectangle",ui:{type:"range",min:.01,max:1,step:.01,label:"Height",group:"Shape"}},rounding:{default:.05,description:"Corner rounding radius \u2014 set to min(width, height) for a pill shape",ui:{type:"range",min:0,max:.5,step:.01,label:"Rounding",group:"Shape"}},rotation:{default:0,description:"Rotation in degrees",ui:{type:"range",min:0,max:360,step:1,label:"Rotation",group:"Shape"}},softness:{default:0,description:"Edge softness for antialiasing",ui:{type:"range",min:0,max:.1,step:.001,label:"Softness",group:"Effect"}},strokeThickness:{default:0,description:"Stroke thickness. Zero means no stroke.",ui:{type:"range",min:0,max:.2,step:.005,label:"Stroke Thickness",group:"Stroke"}},strokeColor:{default:"#000000",transform:_e,description:"Color of the stroke outline",ui:{type:"color",label:"Stroke Color",group:"Colors"}},strokePosition:{default:"center",transform:Gq,description:"Position of the stroke relative to the shape edge",ui:{type:"select",options:[{label:"Outside",value:"outside"},{label:"Center",value:"center"},{label:"Inside",value:"inside"}],label:"Stroke Position",group:"Stroke"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for blending fill and stroke colors",ui:{type:"select",options:Ft,label:"Color Blending",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=n.x.sub(i.x),o=n.y.sub(i.y),a=s.rotation.uniform.mul(d(Math.PI/180)),l=ke(a),c=ue(a),u=Sw(r.mul(l).add(o.mul(c)),o.mul(l).sub(r.mul(c)),s.width.uniform,s.height.uniform,s.rounding.uniform),h=s.softness.uniform,p=s.strokeThickness.uniform,f=s.strokePosition.uniform,m=p.greaterThan(d(0)),g=f.greaterThanEqual(d(.5)).and(f.lessThan(d(1.5))),y=f.greaterThanEqual(d(1.5)),x=p.mul(.5),b=y.select(p.negate(),g.select(x.negate(),d(0))),v=y.select(d(0),g.select(x,p)),_=we(v.sub(h),v,u).oneMinus(),M=m.select(we(b.sub(h),b,u),d(0)),T=wt(F(s.color.uniform.rgb,s.color.uniform.a),F(s.strokeColor.uniform.rgb,s.strokeColor.uniform.a),M,s.colorSpace.uniform.value);return F(T.xyz,T.w.mul(_))}};var HF={name:"Saturation",category:"Adjustments",description:"Adjust color saturation intensity",requiresChild:!0,props:{intensity:{default:1,description:"The intensity of the saturation effect (1 being no change)",compileTimeWhen:(s,e)=>s===1!=(e===1),ui:{type:["range","map"],min:0,max:3,step:.1,label:"Intensity",group:"Appearance"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return console.error("You must pass a child component into the Saturation shader."),F(0);if(s.intensity.uniform.value===1)return e;let t=Nt(e.rgb,de(.2126,.7152,.0722));return F(ve(de(t,t,t),e.rgb,s.intensity.uniform),e.a)}};var WF={name:"Sharpness",category:"Adjustments",description:"Adjust image sharpness using a convolution kernel",requiresRTT:!0,requiresChild:!0,props:{sharpness:{default:0,description:"How sharp to make the underlying image",compileTimeWhen:(s,e)=>s===0!=(e===0),ui:{type:["range","map"],min:0,max:5,step:.1,label:"Sharpness",group:"Appearance"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);if(s.sharpness.uniform.value===0)return e;let n=_t(e);return t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()}),Ne(()=>{let i=H,r=s.sharpness.uniform,o=R(1).div(X),a=n.sample(i),l=n.sample(i.add(R(0,o.y))),c=n.sample(i.sub(R(0,o.y))),u=n.sample(i.sub(R(o.x,0))),h=n.sample(i.add(R(o.x,0))),p=d(1).add(r.mul(4)),f=r.negate();return It(F(ht(a.rgb.mul(p).add(l.rgb.mul(f)).add(c.rgb.mul(f)).add(u.rgb.mul(f)).add(h.rgb.mul(f)),0,1),a.a))})()}};var Da=s=>{let e=Math.sin(s)*1e4;return e-Math.floor(e)},vr=16,ur=1024,$F={name:"Shatter",category:"Interactive",description:"Broken glass effect with tectonic plate displacement",requiresRTT:!0,requiresChild:!0,usesPointer:!0,props:{crackWidth:{default:1,description:"Thickness of crack lines",ui:{type:["range","map"],min:.5,max:5,step:.1,label:"Crack Width",group:"Effect"}},intensity:{default:4,description:"How much shards shift",ui:{type:"range",min:0,max:20,step:1,label:"Intensity",group:"Effect"}},radius:{default:.4,description:"Cursor influence radius",ui:{type:"range",min:.1,max:1,step:.1,label:"Radius",group:"Effect"}},decay:{default:1,description:"How fast shards return to rest",ui:{type:"range",min:.1,max:10,step:.1,label:"Decay",group:"Effect"}},seed:{default:2,description:"Random seed for pattern",ui:{type:"range",min:0,max:50,step:1,label:"Seed",group:"Effect"}},chromaticSplit:{default:1,description:"RGB separation for prismatic glass effect",ui:{type:["range","map"],min:0,max:5,step:.1,label:"Chromatic Split",group:"Effect"}},refractionStrength:{default:5,description:"How much cracks bend/distort the underlying image",ui:{type:["range","map"],min:0,max:10,step:.1,label:"Refraction",group:"Effect"}},shardLighting:{default:.1,description:"Subtle lighting on tilted shards for 3D depth",ui:{type:"range",min:0,max:.5,step:.1,label:"Shard Lighting",group:"Effect"}},edges:{default:"mirror",description:"How to handle edges when displacement pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},computeNode:({uniforms:s,onCleanup:e})=>{let t=Gc(new Array(vr*2).fill(0),"float"),n=new ys(ur,ur);n.type=en,n.magFilter=Cn,n.minFilter=Cn,n.generateMipmaps=!1;let i=ds(n);e(()=>{n.dispose()});let r=gn(ur),o=d(1/ur),a=Ne(()=>{let h=kt,p=h.mod(r),f=h.div(r);wn(f.lessThan(r),()=>{let m=p.toFloat().add(d(.5)).mul(o),g=f.toFloat().add(d(.5)).mul(o),y=d(99999).toVar(),x=d(99999).toVar(),b=d(0).toVar(),v=d(0).toVar();for(let _=0;_<vr;_++){let M=t.element(Tt(_*2)),T=t.element(Tt(_*2+1)),w=m.sub(M),S=g.sub(T),A=w.mul(w).add(S.mul(S));wn(A.lessThan(y),()=>{x.assign(y),v.assign(b),y.assign(A),b.assign(d(_))}).Else(()=>{wn(A.lessThan(x),()=>{x.assign(A),v.assign(d(_))})})}$n(i,Mn(p,f),F(b,v,d(0),d(0))).toWriteOnly()})})().compute(ur*ur,[256]),l=s.seed.uniform.value,c=!0,u=h=>{let p=new Array(vr*2);for(let f=0;f<vr;f++)p[f*2]=Da(h+f*2),p[f*2+1]=Da(h+f*2+1);t.array=p};return u(l),{outputs:{voronoiTexture:n},getComputeNodes:()=>{let h=s.seed.uniform.value;return h!==l&&(l=h,u(l),c=!0),c?(c=!1,[a]):null}}},fragmentNode:({uniforms:s,onBeforeRender:e,childNode:t,onCleanup:n,dimensions:i,computeOutputs:r})=>{let a=new Float32Array(vr*4),l=new Array(vr*2).fill(0),c=Gc(l,"float"),u=new Float32Array(vr*4),h=new Array(vr*2).fill(0),p=Gc(h,"float"),f=()=>{for(let Ee=0;Ee<vr;Ee++)l[Ee*2]=a[Ee*4],l[Ee*2+1]=a[Ee*4+1];c.array=l},m=()=>{for(let Ee=0;Ee<vr;Ee++)h[Ee*2]=u[Ee*4],h[Ee*2+1]=u[Ee*4+1];p.array=h},g;if(r?.voronoiTexture)g=hn(r.voronoiTexture);else{let Ee=new Float32Array(ur*ur*4),O=new Qn(Ee,ur,ur,Hn,en);O.magFilter=Cn,O.minFilter=Cn,g=hn(O);let E=()=>{for(let Q=0;Q<ur;Q++)for(let Se=0;Se<ur;Se++){let Ae=(Se+.5)/ur,K=(Q+.5)/ur,Z=1/0,me=1/0,Ze=0,Be=0;for(let gt=0;gt<vr;gt++){let xt=Ae-a[gt*4],Dt=K-a[gt*4+1],se=xt*xt+Dt*Dt;se<Z?(me=Z,Be=Ze,Z=se,Ze=gt):se<me&&(me=se,Be=gt)}let Je=(Q*ur+Se)*4;Ee[Je]=Ze,Ee[Je+1]=Be}O.needsUpdate=!0},z=s.seed.uniform.value,q=Q=>{for(let Se=0;Se<vr;Se++)a[Se*4]=Da(Q+Se*2),a[Se*4+1]=Da(Q+Se*2+1),a[Se*4+2]=Da(Q+Se*3),a[Se*4+3]=Da(Q+Se*3+1);f()};q(z),E(),e(()=>{let Q=s.seed.uniform.value;Q!==z&&(z=Q,q(z),E(),u.fill(0))}),n(()=>{O.dispose()})}let y=Ee=>{for(let O=0;O<vr;O++)a[O*4]=Da(Ee+O*2),a[O*4+1]=Da(Ee+O*2+1),a[O*4+2]=Da(Ee+O*3),a[O*4+3]=Da(Ee+O*3+1);f()},x=s.seed.uniform.value;y(x),u.fill(0),m();let b=.5,v=.5,_=Date.now();if(e(({pointer:Ee})=>{let O=Date.now(),E=Math.min((O-_)/1e3,.016);_=O;let z=i.width/i.height,q=s.seed.uniform.value;q!==x&&(x=q,y(x),u.fill(0));let Q=s.intensity.uniform.value,Se=s.radius.uniform.value,Ae=s.decay.uniform.value,K=E>0?(Ee.x-b)/E:0,Z=E>0?(Ee.y-v)/E:0,me=Math.sqrt(K*K+Z*Z),Ze=5+Q*2;if(me>Ze){let Be=Ze/me;K*=Be,Z*=Be,me=Ze}for(let Be=0;Be<vr;Be++){let Je=a[Be*4],gt=a[Be*4+1],xt=a[Be*4+2]-.5,Dt=a[Be*4+3]-.5,se=z>=1?(Je-Ee.x)*z:Je-Ee.x,st=z>=1?gt-Ee.y:(gt-Ee.y)/z,De=Math.sqrt(se*se+st*st),dt=u[Be*4],Et=u[Be*4+1],ot=Math.max(.01,Ae),Vt=Math.exp(-E/ot);dt*=Vt,Et*=Vt;let Lt=0,zn=0;if(De<Se&&me>.01){let Gs=Math.max(0,1-De/Se),ei=Gs*Gs,ml=ei*me*Q*E*.5;Lt=K*ml,zn=Z*ml;let gl=ei*me*Q*E*.1;Lt+=xt*gl,zn+=Dt*gl}let Rn=Math.min(1,1*E);u[Be*4]=dt+Lt*Rn,u[Be*4+1]=Et+zn*Rn,u[Be*4+2]=0,u[Be*4+3]=0}m(),b=Ee.x,v=Ee.y}),!t)return F(0,0,0,0);let M=_t(t);n(()=>{M?.renderTarget?.dispose&&M.renderTarget.dispose()});let T=g.sample(H),w=T.r.toInt(),S=T.g.toInt(),A=R(c.element(w.mul(2)),c.element(w.mul(2).add(1))),I=R(c.element(S.mul(2)),c.element(S.mul(2).add(1))),N=H.sub(A).length(),P=H.sub(I).length(),B=R(p.element(w.mul(2)),p.element(w.mul(2).add(1))),U=B.length(),D=P.sub(N),L=s.crackWidth.uniform.mul(.005),k=d(1).sub(we(d(0),L,D)),W=we(d(0),d(.01),U),$=k.mul(W),ie=H.sub(A).normalize(),xe=R(ie.y.negate(),ie.x),he=H.sub(B),Pe=xe.mul(s.refractionStrength.uniform).mul(.01),Ge=s.chromaticSplit.uniform.mul(.005),He=Pe.add(xe.mul(Ge)),oe=Pe,be=Pe.sub(xe.mul(Ge)),Te=he.add(He.mul($)),Fe=he.add(oe.mul($)),ze=he.add(be.mul($)),fe=En(Te,M.sample(Te),M,s.edges.uniform.value),Xe=En(Fe,M.sample(Fe),M,s.edges.uniform.value),Re=En(ze,M.sample(ze),M,s.edges.uniform.value),Y=F(fe.r,Xe.g,Re.b,Xe.a),ye=En(he,M.sample(he),M,s.edges.uniform.value),Me=ye.rgb.mul(d(1).sub($)).add(Y.rgb.mul($)),Le=B.length(),Ye=B.x.div(Le.add(.001)),tt=B.y.div(Le.add(.001)),et=R(.3,.6).normalize(),Qe=Ye.mul(et.x).add(tt.mul(et.y)),nt=d(1).add(Qe.mul(s.shardLighting.uniform)),J=we(d(0),d(.02),Le),Ie=d(1).add(nt.sub(1).mul(J));return It(F(Me.mul(Ie),ye.a))}};var qF={name:"SimplexNoise",category:"Textures",description:"Organic noise with animated movement",props:{colorA:{default:"#ffffff",description:"First color",transform:_e,ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#000000",description:"Second color",transform:_e,ui:{type:"color",label:"Color B",group:"Colors"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}},scale:{default:2,description:"Pattern scale (higher = larger patterns)",ui:{type:"range",min:-2,max:5,step:.1,label:"Scale",group:"Effect"}},balance:{default:0,description:"Balance between colors (negative = more colorB, positive = more colorA)",ui:{type:["range","map"],min:-1,max:1,step:.1,label:"Balance",group:"Effect"}},contrast:{default:0,description:"Pattern contrast (higher = sharper transitions)",ui:{type:["range","map"],min:-2,max:5,step:.1,label:"Contrast",group:"Effect"}},seed:{default:0,description:"Random seed for pattern variation",ui:{type:"range",min:0,max:100,step:1,label:"Seed",group:"Effect"}},speed:{default:1,description:"Animation speed",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Animation"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=X.x.div(X.y),i=R(t.x.mul(n),t.y),r=cn(s,e.speed),o=i.mul(Ni(e.scale.uniform)).add(e.seed.uniform),a=Dn(de(o.x,o.y,r.mul(.5))),l=e.contrast.uniform.add(1),c=ht(a.mul(l).add(e.balance.uniform).mul(.5).add(.5),0,1);return wt(e.colorB.uniform,e.colorA.uniform,c,e.colorSpace.uniform.value)}};var XF={name:"SineWave",category:"Textures",description:"Animated wave with thickness and softness",props:{color:{default:"#ffffff",transform:_e,description:"The color of the sine wave",ui:{type:"color",label:"Color",group:"Colors"}},amplitude:{default:.15,description:"The height/amplitude of the sine wave",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Amplitude",group:"Effect"}},frequency:{default:1,description:"The frequency/number of wave cycles",ui:{type:["range","map"],min:.1,max:20,step:.1,label:"Frequency",group:"Effect"}},speed:{default:1,description:"The animation speed of the wave",ui:{type:"range",min:-5,max:5,step:.1,label:"Speed",group:"Animation"}},angle:{default:0,transform:cs,description:"The rotation angle of the wave (in degrees)",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},position:{default:{x:.5,y:.5},transform:ft,description:"The center position of the wave",ui:{type:"position",label:"Position",group:"Position"}},thickness:{default:.2,description:"The thickness of the wave line",ui:{type:["range","map"],min:0,max:2,step:.1,label:"Thickness",group:"Effect"}},softness:{default:.4,description:"Edge softness of the wave line",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Softness",group:"Effect"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=X.x.div(X.y),i=R(t.x.mul(n),t.y),r=R(e.position.uniform.x.mul(n),e.position.uniform.y.oneMinus()),o=i.sub(r),a=Ls(e.angle.uniform),l=ke(a),c=ue(a),u=o.x.mul(l).sub(o.y.mul(c)),h=o.x.mul(c).add(o.y.mul(l)),p=cn(s,e.speed),f=ue(u.mul(e.frequency.uniform).mul(Qs.mul(2)).add(p)).mul(e.amplitude.uniform),m=bt(h.sub(f)),g=e.thickness.uniform.mul(.5),y=e.softness.uniform.mul(.5),x=we(g.sub(y),g.add(y),m).oneMinus();return F(e.color.uniform.rgb,e.color.uniform.a.mul(x))}};var YF=256,Hq=56,Wq=20,jF=.8,ZF=.2,KF={name:"Smoke",category:"Interactive",description:"Realistic fluid smoke simulation with vorticity dynamics",usesPointer:!0,props:{colorA:{default:"#fc83f9",transform:_e,description:"Color of fresh smoke",ui:{type:"color",label:"Start Color",group:"Colors"}},colorB:{default:"#c21c79",transform:_e,description:"Color smoke transitions to as it ages",ui:{type:"color",label:"End Color",group:"Colors"}},emitFrom:{default:{x:.5,y:1},transform:ft,description:"The emission source point",ui:{type:"position",label:"Emit From",group:"Emission"}},direction:{default:0,description:"Emission direction (0 = up, 90 = right, 180 = down, 270 = left)",ui:{type:"range",min:0,max:360,step:1,label:"Direction",group:"Emission"}},speed:{default:20,description:"Emission velocity strength",ui:{type:"range",min:.1,max:50,step:.1,label:"Speed",group:"Emission"}},spread:{default:60,description:"Emission cone angle in degrees",ui:{type:"range",min:0,max:180,step:1,label:"Spread",group:"Emission"}},emitRadius:{default:.08,description:"Size of the emission area",ui:{type:"range",min:.01,max:.3,step:.01,label:"Emit Size",group:"Emission"}},intensity:{default:1,description:"Smoke emission density",ui:{type:"range",min:.1,max:1,step:.05,label:"Intensity",group:"Effect"}},dissipation:{default:.2,description:"How fast smoke fades over time",ui:{type:"range",min:.1,max:3,step:.1,label:"Dissipation",group:"Effect"}},detail:{default:25,description:"Fine-scale swirling detail",ui:{type:"range",min:0,max:50,step:1,label:"Detail",group:"Effect"}},gravity:{default:.5,description:"Downward gravitational pull on smoke",ui:{type:"range",min:-2,max:2,step:.1,label:"Gravity",group:"Effect"}},colorDecay:{default:.4,description:"How quickly smoke shifts from Color A to Color B",ui:{type:"range",min:0,max:3,step:.1,label:"Color Decay",group:"Colors"}},mouseInfluence:{default:.1,description:"Strength of cursor influence",ui:{type:"range",min:0,max:2,step:.05,label:"Cursor Influence",group:"Interaction"}},mouseRadius:{default:.1,description:"Radius of cursor influence area",ui:{type:"range",min:.02,max:.5,step:.01,label:"Cursor Radius",group:"Interaction"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},computeNode:({uniforms:s,onCleanup:e,renderer:t})=>{let n=YF,i=gn(n),r=Tt(n),o=Tt(n-1),a=n*n,l=(Y,ye,Me,Le)=>Y.add(Tt(Me)).clamp(Tt(0),o).mul(r).add(ye.add(Tt(Le)).clamp(Tt(0),o)),c=fs(a,"vec4"),u=fs(a,"vec4"),h=fs(a,"vec4"),p=fs(a,"vec4"),f=fs(a,"vec4"),m=new ys(n,n);m.type=en;let g=ds(m);e(()=>{m.dispose()});let y=ee(.016),x=ee(128),b=ee(256),v=ee(0),_=ee(-50),M=ee(1),T=ee(0),w=ee(.5),S=ee(15),A=ee(.7),I=ee(1),N=ee(30),P=ee(.5),B=ee(128),U=ee(128),D=ee(0),L=ee(0),k=ee(0),W=ee(900),$=ee(1),ie=Ne(()=>{let Y=kt,ye=Y.mod(i),Me=Y.div(i),Le=ye.toFloat().add(d(.5)),Ye=Me.toFloat().add(d(.5)),tt=Le.sub(x),et=Ye.sub(b),Qe=tt.mul(tt).add(et.mul(et)),nt=S.mul(S).max(d(1)),J=Qe.negate().div(nt).exp(),Ie=h.element(Y),Ee=Ie.x,O=A.mul(J).mul(y).mul(d(8)),E=Ee.add(O).min(d(1)),z=O.div(E.max(d(.001)));h.element(Y).assign(F(E,Ie.y.mul(d(1).sub(z.min(d(1)))),d(0),d(0)));let q=c.element(Y),Q=tt.mul(M).add(et.mul(T)).div(S.max(d(1))),Se=v.mul(v).add(_.mul(_)).max(d(1)),Ae=v.add(M.mul(Q).mul(w).mul(Se.sqrt())),K=_.add(T.mul(Q).mul(w).mul(Se.sqrt())),Z=J.mul(y).mul(d(3)).min(d(1)),me=P.mul(Ee).mul(y).mul(d(n*.08)),Ze=Le.sub(B),Be=Ye.sub(U),Je=Ze.mul(Ze).add(Be.mul(Be)).negate().div(W.max(d(1))).exp().mul(k);c.element(Y).assign(F(ve(q.x,Ae,Z).add(D.mul(Je)),ve(q.y,K,Z).add(me).add(L.mul(Je)),q.z,d(0)))})().compute(a,[256]),xe=Ne(()=>{let Y=kt,ye=Y.mod(i).toInt(),Me=Y.div(i).toInt(),Le=c.element(l(Me,ye,0,-1)),Ye=c.element(l(Me,ye,0,1)),tt=c.element(l(Me,ye,-1,0)),et=c.element(l(Me,ye,1,0)),Qe=Ye.y.sub(Le.y).sub(et.x.sub(tt.x)).mul(d(.5)),nt=c.element(Y);c.element(Y).assign(F(nt.x,nt.y,Qe,d(0)))})().compute(a,[256]),he=Ne(()=>{let Y=kt,ye=Y.mod(i).toInt(),Me=Y.div(i).toInt(),Le=c.element(l(Me,ye,0,-1)).z.abs(),Ye=c.element(l(Me,ye,0,1)).z.abs(),tt=c.element(l(Me,ye,-1,0)).z.abs(),et=c.element(l(Me,ye,1,0)).z.abs(),Qe=c.element(Y).z,nt=Ye.sub(Le).mul(d(.5)),J=et.sub(tt).mul(d(.5)),Ie=nt.mul(nt).add(J.mul(J)).sqrt().max(d(1e-5)),Ee=J.div(Ie).mul(Qe).mul(N).mul(y),O=nt.div(Ie).negate().mul(Qe).mul(N).mul(y),E=c.element(Y);c.element(Y).assign(F(E.x.add(Ee),E.y.add(O),E.z,d(0)))})().compute(a,[256]),Pe=Ne(()=>{let Y=kt,ye=Y.mod(i).toInt(),Me=Y.div(i).toInt(),Le=ye.toFloat(),Ye=Me.toFloat(),tt=c.element(Y),et=c.element(l(Me,ye,0,-1)).x,Qe=c.element(l(Me,ye,0,1)).x,nt=c.element(l(Me,ye,-1,0)).y,J=c.element(l(Me,ye,1,0)).y,Ie=Le.lessThan(d(.5)).select(tt.x.negate(),et),Ee=Le.greaterThan(d(n-1.5)).select(tt.x.negate(),Qe),O=Ye.lessThan(d(.5)).select(tt.y.negate(),nt),E=Ye.greaterThan(d(n-1.5)).select(tt.y.negate(),J),z=Ee.sub(Ie).add(E.sub(O)).mul(d(.5)),q=f.element(Y).x.mul(d(jF));f.element(Y).assign(F(q,z,d(0),d(0)))})().compute(a,[256]),Ge=Ne(()=>{let Y=kt,ye=Y.mod(i).toInt(),Me=Y.div(i).toInt(),Le=f.element(l(Me,ye,0,-1)).x,Ye=f.element(l(Me,ye,0,1)).x,tt=f.element(l(Me,ye,-1,0)).x,et=f.element(l(Me,ye,1,0)).x,Qe=f.element(Y).y;f.element(Y).assign(F(Le.add(Ye).add(tt).add(et).sub(Qe).mul(d(.25)),Qe,d(0),d(0)))})().compute(a,[256]),He=Ne(()=>{let Y=kt,ye=Y.mod(i).toInt(),Me=Y.div(i).toInt(),Le=f.element(l(Me,ye,0,-1)).x,Ye=f.element(l(Me,ye,0,1)).x,tt=f.element(l(Me,ye,-1,0)).x,et=f.element(l(Me,ye,1,0)).x,Qe=c.element(Y);c.element(Y).assign(F(Qe.x.sub(Ye.sub(Le).mul(d(.5))),Qe.y.sub(et.sub(tt).mul(d(.5))),Qe.z,d(0)))})().compute(a,[256]),oe=Ne(()=>{let Y=kt,ye=Y.mod(i),Me=Y.div(i),Le=c.element(Y),Ye=ye.toFloat().sub(Le.x.mul(y)).clamp(d(0),d(n-1)),tt=Me.toFloat().sub(Le.y.mul(y)).clamp(d(0),d(n-1)),et=Ht(Ye).clamp(d(0),d(n-2)),Qe=Ht(tt).clamp(d(0),d(n-2)),nt=Ye.sub(et),J=tt.sub(Qe),Ie=et.toInt(),Ee=Qe.toInt(),O=c.element(Ee.mul(r).add(Ie)),E=c.element(Ee.mul(r).add(Ie.add(Tt(1)))),z=c.element(Ee.add(Tt(1)).mul(r).add(Ie)),q=c.element(Ee.add(Tt(1)).mul(r).add(Ie.add(Tt(1)))),Q=d(1).add(d(ZF).mul(y));u.element(Y).assign(F(ve(ve(O.x,E.x,nt),ve(z.x,q.x,nt),J).div(Q),ve(ve(O.y,E.y,nt),ve(z.y,q.y,nt),J).div(Q),d(0),d(0)))})().compute(a,[256]),be=Ne(()=>{let Y=u.element(kt);c.element(kt).assign(F(Y.x,Y.y,d(0),d(0)))})().compute(a,[256]),Te=Ne(()=>{let Y=kt,ye=Y.mod(i),Me=Y.div(i),Le=c.element(Y),Ye=ye.toFloat().sub(Le.x.mul(y)).clamp(d(0),d(n-1)),tt=Me.toFloat().sub(Le.y.mul(y)).clamp(d(0),d(n-1)),et=Ht(Ye).clamp(d(0),d(n-2)),Qe=Ht(tt).clamp(d(0),d(n-2)),nt=Ye.sub(et),J=tt.sub(Qe),Ie=et.toInt(),Ee=Qe.toInt(),O=h.element(Ee.mul(r).add(Ie)),E=h.element(Ee.mul(r).add(Ie.add(Tt(1)))),z=h.element(Ee.add(Tt(1)).mul(r).add(Ie)),q=h.element(Ee.add(Tt(1)).mul(r).add(Ie.add(Tt(1)))),Q=ve(ve(O.x,E.x,nt),ve(z.x,q.x,nt),J),Se=ve(ve(O.y,E.y,nt),ve(z.y,q.y,nt),J),Ae=d(1).add(I.mul(y));p.element(Y).assign(F(Q.div(Ae).max(d(0)),Se.add(y.mul(d(.4)).mul($)).min(d(1)),d(0),d(0)))})().compute(a,[256]),Fe=Ne(()=>{let Y=p.element(kt);h.element(kt).assign(F(Y.x,Y.y,d(0),d(0)))})().compute(a,[256]),ze=Ne(()=>{let Y=kt,ye=Y.mod(i),Me=Y.div(i),Le=h.element(Y);$n(g,Mn(ye,Me),F(Le.x,Le.y,d(0),d(0))).toWriteOnly()})().compute(a,[256]),fe=Date.now(),Xe=.5,Re=.5;return{outputs:{smokeTexture:m},getComputeNodes:Y=>{let ye=Date.now(),Me=Math.min((ye-fe)/1e3,.033);if(fe=ye,Me<.001)return null;let Le=(K,Z)=>{let me=s[K];if(!me)return Z;if(typeof me.getCpuValue=="function"){let Be=me.getCpuValue();return typeof Be=="number"?Be:Z}let Ze=me.uniform?.value;return typeof Ze=="number"?Ze:Z},Ye=Le("speed",3),tt=Le("direction",0)*Math.PI/180,et=Math.min(89*Math.PI/180,Le("spread",45)*Math.PI/360),Qe=s.emitFrom.uniform.value,nt=typeof Qe=="object"?Qe.x??.5:.5,J=typeof Qe=="object"?Qe.y??0:0;y.value=Me,x.value=nt*n,b.value=(1-J)*n;let Ie=Ye*n*.15;v.value=Math.sin(tt)*Ie,_.value=-Math.cos(tt)*Ie,M.value=Math.cos(tt),T.value=Math.sin(tt),w.value=Math.tan(et),S.value=Le("emitRadius",.06)*n,A.value=Le("intensity",.7),I.value=Le("dissipation",1),N.value=Le("detail",30),P.value=Le("gravity",.5),$.value=Le("colorDecay",1);let Ee=Le("mouseInfluence",.5),O=Le("mouseRadius",.12),E=Y?.pointer?.x??Xe,z=Y?.pointer?.y??Re,q=E-Xe,Q=z-Re;Xe=E,Re=z;let Se=Math.sqrt(q*q+Q*Q),Ae=O*n;W.value=Ae*Ae,Se>5e-4&&Ee>0?(B.value=E*n,U.value=z*n,D.value=q*n*15*Ee,L.value=Q*n*15*Ee,k.value=1):k.value=0,t.compute(ie),t.compute(xe),t.compute(he),t.compute(Pe);for(let K=0;K<Wq;K++)t.compute(Ge);return t.compute(He),t.compute(oe),t.compute(be),t.compute(Te),t.compute(Fe),[ze]}}},fragmentNode:({uniforms:s,onBeforeRender:e,onCleanup:t,computeOutputs:n})=>{let i;if(n?.smokeTexture)i=hn(n.smokeTexture);else{let l=Hq,c=l*l,u=new Float32Array(c),h=new Float32Array(c),p=new Float32Array(c),f=new Float32Array(c),m=new Float32Array(c),g=new Float32Array(c),y=new Float32Array(c),x=new Float32Array(c),b=new Float32Array(c),v=new Float32Array(c),_=new Float32Array(c),M=new Float32Array(c*4),T=new Qn(M,l,l,Hn,en);T.magFilter=Yt,T.minFilter=Yt,T.needsUpdate=!0,i=hn(T);let w=(B,U)=>{let D=s[B];if(!D)return U;if(typeof D.getCpuValue=="function"){let k=D.getCpuValue();return typeof k=="number"?k:U}let L=D.uniform?.value;return typeof L=="number"?L:U},S=Date.now(),A=.5,I=.5,N=(B,U,D)=>{let L=Math.max(0,Math.min(l-1,U)),k=Math.max(0,Math.min(l-1,D)),W=Math.max(0,Math.min(l-2,Math.floor(L))),$=Math.max(0,Math.min(l-2,Math.floor(k))),ie=L-W,xe=k-$,he=$*l+W;return(1-ie)*(1-xe)*B[he]+ie*(1-xe)*B[he+1]+(1-ie)*xe*B[he+l]+ie*xe*B[he+l+1]},P=(B,U,D,L)=>Math.max(0,Math.min(l-1,B+D))*l+Math.max(0,Math.min(l-1,U+L));e(({pointer:B})=>{let U=Date.now(),D=Math.min((U-S)/1e3,.033);if(S=U,D<.001)return;let L=w("speed",3),k=s.direction.uniform.value*Math.PI/180,W=Math.min(89*Math.PI/180,s.spread.uniform.value*Math.PI/360),$=s.emitFrom.uniform.value,ie=(typeof $=="object"?$.x??.5:.5)*l,xe=(1-(typeof $=="object"?$.y??0:0))*l,he=L*l*.15,Pe=Math.sin(k)*he,Ge=-Math.cos(k)*he,He=Math.cos(k),oe=Math.sin(k),be=Math.tan(W),Te=s.emitRadius.uniform.value*l,Fe=s.intensity.uniform.value,ze=w("detail",30),fe=w("gravity",.5),Xe=w("colorDecay",1),Re=w("dissipation",.2),Y=s.mouseInfluence.uniform.value,ye=s.mouseRadius.uniform.value*l,Me=B?.x??A,Le=B?.y??I,Ye=Me-A,tt=Le-I;A=Me,I=Le;let et=Math.sqrt(Ye*Ye+tt*tt)>5e-4&&Y>0,Qe=et?Ye*l*15*Y:0,nt=et?tt*l*15*Y:0,J=Me*l,Ie=Le*l;for(let E=0;E<l;E++)for(let z=0;z<l;z++){let q=E*l+z,Q=z+.5-ie,Se=E+.5-xe,Ae=Math.exp(-(Q*Q+Se*Se)/Math.max(1,Te*Te)),K=m[q],Z=Fe*Ae*D*8,me=Math.min(1,K+Z);g[q]*=1-Math.min(1,Z/Math.max(.001,me)),m[q]=me;let Ze=(Q*He+Se*oe)/Math.max(1,Te),Be=Math.sqrt(Pe*Pe+Ge*Ge),Je=Pe+He*Ze*be*Be,gt=Ge+oe*Ze*be*Be,xt=Math.min(1,Ae*D*3),Dt=z+.5-J,se=E+.5-Ie,st=et?Math.exp(-(Dt*Dt+se*se)/Math.max(1,ye*ye)):0;u[q]=u[q]*(1-xt)+Je*xt+Qe*st,h[q]=h[q]*(1-xt)+gt*xt+fe*K*D*l*.08+nt*st}if(ze>0){for(let E=0;E<l;E++)for(let z=0;z<l;z++)_[E*l+z]=.5*(h[P(E,z,0,1)]-h[P(E,z,0,-1)]-(u[P(E,z,1,0)]-u[P(E,z,-1,0)]));for(let E=0;E<l;E++)for(let z=0;z<l;z++){let q=E*l+z,Q=.5*(Math.abs(_[P(E,z,0,1)])-Math.abs(_[P(E,z,0,-1)])),Se=.5*(Math.abs(_[P(E,z,1,0)])-Math.abs(_[P(E,z,-1,0)])),Ae=Math.max(1e-5,Math.sqrt(Q*Q+Se*Se));u[q]+=Se/Ae*_[q]*ze*D,h[q]+=-(Q/Ae)*_[q]*ze*D}}for(let E=0;E<l;E++)for(let z=0;z<l;z++){let q=E*l+z,Q=z===0?-u[q]:u[P(E,z,0,-1)],Se=z===l-1?-u[q]:u[P(E,z,0,1)],Ae=E===0?-h[q]:h[P(E,z,-1,0)],K=E===l-1?-h[q]:h[P(E,z,1,0)];v[q]=.5*(Se-Q+K-Ae),b[q]*=jF}for(let E=0;E<6;E++)for(let z=0;z<l;z++)for(let q=0;q<l;q++){let Q=z*l+q;b[Q]=.25*(b[P(z,q,0,-1)]+b[P(z,q,0,1)]+b[P(z,q,-1,0)]+b[P(z,q,1,0)]-v[Q])}for(let E=0;E<l;E++)for(let z=0;z<l;z++){let q=E*l+z;u[q]-=.5*(b[P(E,z,0,1)]-b[P(E,z,0,-1)]),h[q]-=.5*(b[P(E,z,1,0)]-b[P(E,z,-1,0)])}let Ee=1+ZF*D;for(let E=0;E<l;E++)for(let z=0;z<l;z++){let q=E*l+z;p[q]=N(u,z-u[q]*D,E-h[q]*D)/Ee,f[q]=N(h,z-u[q]*D,E-h[q]*D)/Ee}u.set(p),h.set(f);let O=1+Re*D;for(let E=0;E<l;E++)for(let z=0;z<l;z++){let q=E*l+z,Q=z-u[q]*D,Se=E-h[q]*D;y[q]=Math.max(0,N(m,Q,Se)/O),x[q]=Math.min(1,N(g,Q,Se)+D*.4*Xe)}m.set(y),g.set(x);for(let E=0;E<c;E++)M[E*4]=m[E],M[E*4+1]=g[E];T.needsUpdate=!0}),t(()=>{T.dispose()})}let r,o;if(n?.smokeTexture){let l=d(1/YF),c=i.sample(H),u=i.sample(H.add(R(l,d(0)))),h=i.sample(H.add(R(d(0),l))),p=i.sample(H.add(R(l.negate(),d(0)))),f=i.sample(H.add(R(d(0),l.negate())));r=c.x.mul(d(.5)).add(u.x.mul(d(.125))).add(h.x.mul(d(.125))).add(p.x.mul(d(.125))).add(f.x.mul(d(.125))),o=c.y.mul(d(.5)).add(u.y.mul(d(.125))).add(h.y.mul(d(.125))).add(p.y.mul(d(.125))).add(f.y.mul(d(.125)))}else{let l=i.sample(H);r=l.x,o=l.y}let a=wt(s.colorA.uniform,s.colorB.uniform,o,s.colorSpace.uniform.value);return F(a.x,a.y,a.z,a.w.mul(r))}};var $q=JSON.stringify({type:"circleSDF",radius:.35}),Uw=256,JF=56,qq=20,Xq=.8,Yq=.2,QF={name:"SmokeFill",category:"Shape Effects",description:"Fill a shape with swirling fluid smoke that interacts with the shape boundary",requiresRTT:!1,requiresChild:!1,usesPointer:!0,props:{colorA:{default:"#8cf3ff",transform:_e,description:"Color of fresh smoke",ui:{type:"color",label:"Start Color",group:"Colors"}},colorB:{default:"#04a0d6",transform:_e,description:"Color smoke transitions to as it ages",ui:{type:"color",label:"End Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the shape",ui:{type:"position",label:"Center",group:"Position"}},scale:{default:1,description:"Scale of the shape (1 = default size)",ui:{type:"range",min:.1,max:3,step:.05,label:"Scale",group:"Position"}},emitFrom:{default:{x:.5,y:.5},transform:ft,description:"Emission source point within the shape",ui:{type:"position",label:"Emit From",group:"Emission"}},direction:{default:0,description:"Emission direction (0 = up, 90 = right, 180 = down, 270 = left)",ui:{type:"range",min:0,max:360,step:1,label:"Direction",group:"Emission"}},speed:{default:10,description:"Emission velocity strength",ui:{type:"range",min:.1,max:30,step:.1,label:"Speed",group:"Emission"}},spread:{default:60,description:"Emission cone angle in degrees",ui:{type:"range",min:0,max:180,step:1,label:"Spread",group:"Emission"}},emitRadius:{default:.03,description:"Size of the emission area",ui:{type:"range",min:.01,max:.3,step:.01,label:"Emit Size",group:"Emission"}},intensity:{default:1,description:"Smoke emission density",ui:{type:"range",min:.1,max:1,step:.05,label:"Intensity",group:"Effect"}},dissipation:{default:.3,description:"How fast smoke fades over time",ui:{type:"range",min:.1,max:5,step:.1,label:"Dissipation",group:"Effect"}},detail:{default:25,description:"Fine-scale swirling detail",ui:{type:"range",min:0,max:50,step:1,label:"Detail",group:"Effect"}},gravity:{default:.5,description:"Downward gravitational pull on smoke \u2014 0 = weightless, negative values = smoke rises",ui:{type:"range",min:-2,max:2,step:.1,label:"Gravity",group:"Effect"}},colorDecay:{default:.4,description:"How quickly smoke shifts from Color A to Color B",ui:{type:"range",min:0,max:3,step:.1,label:"Color Decay",group:"Colors"}},mouseInfluence:{default:.1,description:"Strength of cursor influence",ui:{type:"range",min:0,max:2,step:.05,label:"Cursor Influence",group:"Interaction"}},mouseRadius:{default:.1,description:"Radius of cursor influence area",ui:{type:"range",min:.02,max:.5,step:.01,label:"Cursor Radius",group:"Interaction"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}},shape:{default:$q,description:"Serialized shape configuration (JSON)",ui:{type:"shape",label:"Shape",group:"Shape"}},shapeSdfUrl:{default:"",compileTime:!0,description:"URL to a pre-generated SDF .bin file"},shapeType:{default:"",compileTime:!0,description:"Active SDF shape type"}},computeNode:({uniforms:s,onCleanup:e,onBeforeRender:t,renderer:n})=>{let i=Uw,r=gn(i),o=Tt(i),a=Tt(i-1),l=i*i,c=(Ie,Ee,O,E)=>Ie.add(Tt(O)).clamp(Tt(0),a).mul(o).add(Ee.add(Tt(E)).clamp(Tt(0),a)),u=s.shapeSdfUrl.uniform.value,h=(()=>{let Ie=s.shape.uniform.value;try{return JSON.parse(Ie)}catch{return{type:"circleSDF",radius:.35}}})(),p;u?p=$r(u,t,e):p=qr(s.shapeType.uniform.value||h.type||"circleSDF",h,s.shape,t);let f=fs(l,"vec4"),m=fs(l,"vec4"),g=fs(l,"vec4"),y=fs(l,"vec4"),x=fs(l,"vec4"),b=fs(l,"vec4"),v=new ys(i,i);v.type=en;let _=ds(v);e(()=>{v.dispose()});let M=ee(.016),T=ee(.5),w=ee(.5),S=ee(0),A=ee(-50),I=ee(1),N=ee(0),P=ee(.5),B=ee(10),U=ee(.8),D=ee(.5),L=ee(30),k=ee(.5),W=ee(1),$=ee(.5),ie=ee(.5),xe=ee(1),he=ee(1),Pe=ee(128),Ge=ee(128),He=ee(0),oe=ee(0),be=ee(0),Te=ee(900),Fe=Ne(()=>{let Ie=kt,Ee=Ie.mod(r),O=Ie.div(r),E=Ee.toFloat().add(d(.5)).div(d(i)),z=O.toFloat().add(d(.5)).div(d(i)),q=R(E.sub($).mul(he).div(xe).add(d(.5)),z.sub(ie).div(xe).add(d(.5))),Q=p(q).x,Se=Q.lessThan(d(0)).select(d(1),d(0));b.element(Ie).assign(F(Se,Q,d(0),d(0)))})().compute(l,[256]),ze=Ne(()=>{let Ie=kt,Ee=Ie.mod(r),O=Ie.div(r),E=b.element(Ie).x,z=Ee.toFloat().add(d(.5)),q=O.toFloat().add(d(.5)),Q=z.sub(T),Se=q.sub(w),Ae=Q.mul(Q).add(Se.mul(Se)),K=B.mul(B).max(d(1)),Z=Ae.negate().div(K).exp().mul(E),me=g.element(Ie),Ze=me.x,Be=U.mul(Z).mul(M).mul(d(8)),Je=Ze.add(Be).min(d(1)),gt=Be.div(Je.max(d(.001)));g.element(Ie).assign(F(Je,me.y.mul(d(1).sub(gt.min(d(1)))),d(0),d(0)));let xt=f.element(Ie),Dt=Q.mul(I).add(Se.mul(N)).div(B.max(d(1))),se=S.mul(S).add(A.mul(A)).max(d(1)),st=S.add(I.mul(Dt).mul(P).mul(se.sqrt())),De=A.add(N.mul(Dt).mul(P).mul(se.sqrt())),dt=Z.mul(M).mul(d(3)).min(d(1)),Et=k.mul(Ze).mul(M).mul(d(i*.08)).mul(E),ot=z.sub(Pe),Vt=q.sub(Ge),Lt=ot.mul(ot).add(Vt.mul(Vt)).negate().div(Te.max(d(1))).exp().mul(be).mul(E);f.element(Ie).assign(F(ve(xt.x,st,dt).add(He.mul(Lt)),ve(xt.y,De,dt).add(Et).add(oe.mul(Lt)),xt.z,d(0)))})().compute(l,[256]),fe=Ne(()=>{let Ie=kt,Ee=Ie.mod(r).toInt(),O=Ie.div(r).toInt(),E=f.element(c(O,Ee,0,-1)),z=f.element(c(O,Ee,0,1)),q=f.element(c(O,Ee,-1,0)),Q=f.element(c(O,Ee,1,0)),Se=z.y.sub(E.y).sub(Q.x.sub(q.x)).mul(d(.5)),Ae=f.element(Ie);f.element(Ie).assign(F(Ae.x,Ae.y,Se,d(0)))})().compute(l,[256]),Xe=Ne(()=>{let Ie=kt,Ee=Ie.mod(r).toInt(),O=Ie.div(r).toInt(),E=f.element(c(O,Ee,0,-1)).z.abs(),z=f.element(c(O,Ee,0,1)).z.abs(),q=f.element(c(O,Ee,-1,0)).z.abs(),Q=f.element(c(O,Ee,1,0)).z.abs(),Se=f.element(Ie).z,Ae=z.sub(E).mul(d(.5)),K=Q.sub(q).mul(d(.5)),Z=Ae.mul(Ae).add(K.mul(K)).sqrt().max(d(1e-5)),me=f.element(Ie);f.element(Ie).assign(F(me.x.add(K.div(Z).mul(Se).mul(L).mul(M)),me.y.add(Ae.div(Z).negate().mul(Se).mul(L).mul(M)),me.z,d(0)))})().compute(l,[256]),Re=Ne(()=>{let Ie=kt,Ee=Ie.mod(r).toInt(),O=Ie.div(r).toInt(),E=Ee.toFloat(),z=O.toFloat(),q=b.element(Ie).x,Q=f.element(Ie),Se=E.lessThan(d(.5)).or(b.element(c(O,Ee,0,-1)).x.lessThan(d(.5))),Ae=E.greaterThan(d(i-1.5)).or(b.element(c(O,Ee,0,1)).x.lessThan(d(.5))),K=z.lessThan(d(.5)).or(b.element(c(O,Ee,-1,0)).x.lessThan(d(.5))),Z=z.greaterThan(d(i-1.5)).or(b.element(c(O,Ee,1,0)).x.lessThan(d(.5))),me=Se.select(Q.x.negate(),f.element(c(O,Ee,0,-1)).x),Ze=Ae.select(Q.x.negate(),f.element(c(O,Ee,0,1)).x),Be=K.select(Q.y.negate(),f.element(c(O,Ee,-1,0)).y),Je=Z.select(Q.y.negate(),f.element(c(O,Ee,1,0)).y),gt=Ze.sub(me).add(Je.sub(Be)).mul(d(.5)).mul(q),xt=x.element(Ie).x.mul(d(Xq)).mul(q);x.element(Ie).assign(F(xt,gt,d(0),d(0)))})().compute(l,[256]),Y=Ne(()=>{let Ie=kt,Ee=Ie.mod(r).toInt(),O=Ie.div(r).toInt(),E=x.element(c(O,Ee,0,-1)).x,z=x.element(c(O,Ee,0,1)).x,q=x.element(c(O,Ee,-1,0)).x,Q=x.element(c(O,Ee,1,0)).x,Se=x.element(Ie).y;x.element(Ie).assign(F(E.add(z).add(q).add(Q).sub(Se).mul(d(.25)),Se,d(0),d(0)))})().compute(l,[256]),ye=Ne(()=>{let Ie=kt,Ee=Ie.mod(r).toInt(),O=Ie.div(r).toInt(),E=x.element(c(O,Ee,0,-1)).x,z=x.element(c(O,Ee,0,1)).x,q=x.element(c(O,Ee,-1,0)).x,Q=x.element(c(O,Ee,1,0)).x,Se=f.element(Ie);f.element(Ie).assign(F(Se.x.sub(z.sub(E).mul(d(.5))),Se.y.sub(Q.sub(q).mul(d(.5))),Se.z,d(0)))})().compute(l,[256]),Me=Ne(()=>{let Ie=kt,Ee=Ie.mod(r),O=Ie.div(r),E=f.element(Ie),z=Ee.toFloat().sub(E.x.mul(M)).clamp(d(0),d(i-1)),q=O.toFloat().sub(E.y.mul(M)).clamp(d(0),d(i-1)),Q=Ht(z).clamp(d(0),d(i-2)),Se=Ht(q).clamp(d(0),d(i-2)),Ae=z.sub(Q),K=q.sub(Se),Z=Q.toInt(),me=Se.toInt(),Ze=f.element(me.mul(o).add(Z)),Be=f.element(me.mul(o).add(Z.add(Tt(1)))),Je=f.element(me.add(Tt(1)).mul(o).add(Z)),gt=f.element(me.add(Tt(1)).mul(o).add(Z.add(Tt(1)))),xt=d(1).add(d(Yq).mul(M)),Dt=b.element(Ie).x;m.element(Ie).assign(F(ve(ve(Ze.x,Be.x,Ae),ve(Je.x,gt.x,Ae),K).div(xt).mul(Dt),ve(ve(Ze.y,Be.y,Ae),ve(Je.y,gt.y,Ae),K).div(xt).mul(Dt),d(0),d(0)))})().compute(l,[256]),Le=Ne(()=>{let Ie=m.element(kt);f.element(kt).assign(F(Ie.x,Ie.y,d(0),d(0)))})().compute(l,[256]),Ye=Ne(()=>{let Ie=kt,Ee=Ie.mod(r),O=Ie.div(r),E=f.element(Ie),z=Ee.toFloat().sub(E.x.mul(M)).clamp(d(0),d(i-1)),q=O.toFloat().sub(E.y.mul(M)).clamp(d(0),d(i-1)),Q=Ht(z).clamp(d(0),d(i-2)),Se=Ht(q).clamp(d(0),d(i-2)),Ae=z.sub(Q),K=q.sub(Se),Z=Q.toInt(),me=Se.toInt(),Ze=g.element(me.mul(o).add(Z)),Be=g.element(me.mul(o).add(Z.add(Tt(1)))),Je=g.element(me.add(Tt(1)).mul(o).add(Z)),gt=g.element(me.add(Tt(1)).mul(o).add(Z.add(Tt(1)))),xt=ve(ve(Ze.x,Be.x,Ae),ve(Je.x,gt.x,Ae),K),Dt=ve(ve(Ze.y,Be.y,Ae),ve(Je.y,gt.y,Ae),K),se=d(1).add(D.mul(M)),st=b.element(Ie).x;y.element(Ie).assign(F(xt.div(se).max(d(0)).mul(st),Dt.add(M.mul(d(.4)).mul(W)).min(d(1)),d(0),d(0)))})().compute(l,[256]),tt=Ne(()=>{let Ie=y.element(kt);g.element(kt).assign(F(Ie.x,Ie.y,d(0),d(0)))})().compute(l,[256]),et=Ne(()=>{let Ie=kt,Ee=Ie.mod(r),O=Ie.div(r),E=g.element(Ie);$n(_,Mn(Ee,O),F(E.x,E.y,d(0),d(0))).toWriteOnly()})().compute(l,[256]),Qe=Date.now(),nt=.5,J=.5;return{outputs:{smokeTexture:v},getComputeNodes:Ie=>{let Ee=Date.now(),O=Math.min((Ee-Qe)/1e3,.033);if(Qe=Ee,O<.001)return null;let E=(ot,Vt)=>{let Lt=s[ot];if(!Lt)return Vt;if(typeof Lt.getCpuValue=="function"){let Rn=Lt.getCpuValue();return typeof Rn=="number"?Rn:Vt}let zn=Lt.uniform?.value;return typeof zn=="number"?zn:Vt},z=E("speed",2),q=E("direction",0)*Math.PI/180,Q=Math.min(89*Math.PI/180,E("spread",60)*Math.PI/360),Se=s.center.uniform.value,Ae=typeof Se=="object"?Se.x??.5:.5,K=typeof Se=="object"?Se.y??.5:.5,Z=typeof window<"u"&&n?.domElement?n.domElement.width/Math.max(1,n.domElement.height):1;M.value=O,$.value=Ae,ie.value=1-K,xe.value=E("scale",1),he.value=Z;let me=s.emitFrom?.uniform?.value,Ze=typeof me=="object"?me.x??.5:.5,Be=typeof me=="object"?me.y??.5:.5;T.value=Ze*i,w.value=(1-Be)*i;let Je=z*i*.15;S.value=Math.sin(q)*Je,A.value=-Math.cos(q)*Je,I.value=Math.cos(q),N.value=Math.sin(q),P.value=Math.tan(Q),B.value=E("emitRadius",.03)*i,U.value=E("intensity",.8),D.value=E("dissipation",.5),L.value=E("detail",30),k.value=E("gravity",.5),W.value=E("colorDecay",1);let gt=E("mouseInfluence",.5),xt=E("mouseRadius",.12),Dt=Ie?.pointer?.x??nt,se=Ie?.pointer?.y??J,st=Dt-nt,De=se-J;nt=Dt,J=se;let dt=Math.sqrt(st*st+De*De),Et=xt*i;Te.value=Et*Et,dt>5e-4&&gt>0?(Pe.value=Dt*i,Ge.value=se*i,He.value=st*i*15*gt,oe.value=De*i*15*gt,be.value=1):be.value=0,n.compute(Fe),n.compute(ze),n.compute(fe),n.compute(Xe),n.compute(Re);for(let ot=0;ot<qq;ot++)n.compute(Y);return n.compute(ye),n.compute(Me),n.compute(Le),n.compute(Ye),n.compute(tt),[et]}}},fragmentNode:({uniforms:s,onBeforeRender:e,onCleanup:t,computeOutputs:n})=>{let i=s.shapeSdfUrl.uniform.value,r=(()=>{let b=s.shape.uniform.value;try{return JSON.parse(b)}catch{return{type:"circleSDF",radius:.35}}})(),o;i?o=$r(i,e,t):o=qr(s.shapeType.uniform.value||r.type||"circleSDF",r,s.shape,e);let a,l=n?.smokeTexture?Uw:JF;if(n?.smokeTexture)a=hn(n.smokeTexture);else{let b=JF,v=b*b,_=new Float32Array(v*4),M=new Qn(_,b,b,Hn,en);M.magFilter=Yt,M.minFilter=Yt,M.needsUpdate=!0,a=hn(M);let T=(S,A)=>{let I=s[S];if(!I)return A;if(typeof I.getCpuValue=="function"){let P=I.getCpuValue();return typeof P=="number"?P:A}let N=I.uniform?.value;return typeof N=="number"?N:A},w=Date.now();e(()=>{let S=Date.now(),A=Math.min((S-w)/1e3,.033);if(w=S,A<.001)return;let I=T("intensity",.8),N=T("dissipation",.5),P=s.emitFrom?.uniform?.value,B=(typeof P=="object"?P.x??.5:.5)*b,U=(1-(typeof P=="object"?P.y??.5:.5))*b,D=T("emitRadius",.03)*b;for(let L=0;L<b;L++)for(let k=0;k<b;k++){let W=L*b+k,$=k+.5-B,ie=L+.5-U,xe=Math.exp(-($*$+ie*ie)/Math.max(1,D*D));_[W*4]=Math.max(0,(_[W*4]+I*xe*A*8)/(1+N*A)),_[W*4+1]=Math.min(1,_[W*4+1]+A*.4*T("colorDecay",1))}M.needsUpdate=!0}),t(()=>{M.dispose()})}let c=H,u=X.x.div(X.y),h=R(s.center.uniform.x,s.center.uniform.y.oneMinus()),p=s.scale.uniform,f=R(c.x.sub(h.x).mul(u).div(p).add(d(.5)),c.y.sub(h.y).div(p).add(d(.5))),m=o(f).x.negate().mul(d(l*4)).clamp(d(0),d(1)),g,y;if(n?.smokeTexture){let b=d(1/Uw),v=a.sample(H),_=a.sample(H.add(R(b,d(0)))),M=a.sample(H.add(R(d(0),b))),T=a.sample(H.add(R(b.negate(),d(0)))),w=a.sample(H.add(R(d(0),b.negate())));g=v.x.mul(d(.5)).add(_.x.mul(d(.125))).add(M.x.mul(d(.125))).add(T.x.mul(d(.125))).add(w.x.mul(d(.125))),y=v.y.mul(d(.5)).add(_.y.mul(d(.125))).add(M.y.mul(d(.125))).add(T.y.mul(d(.125))).add(w.y.mul(d(.125)))}else{let b=a.sample(H);g=b.x,y=b.y}let x=wt(s.colorA.uniform,s.colorB.uniform,y,s.colorSpace.uniform.value);return F(x.x,x.y,x.z,x.w.mul(g).mul(m))}};var eU={name:"Solarize",category:"Adjustments",description:"Inverts tones above a luminance threshold \u2014 a classic darkroom and photo effect",requiresChild:!0,props:{threshold:{default:.5,description:"Luminance level above which colors are inverted. Pixels brighter than this threshold get flipped.",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Threshold",group:"Effect"}},strength:{default:1,description:"Blend between original (0) and fully solarized (1)",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Strength",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return console.error("You must pass a child component into the Solarize shader."),F(0);let t=s.threshold.uniform,n=s.strength.uniform,i=Nt(e.rgb,de(.299,.587,.114)),r=de(1).sub(e.rgb),o=i.greaterThan(t).select(r,e.rgb);return F(ve(e.rgb,o,n),e.a)}};var tU={name:"SolidColor",category:"Textures",description:"Fill the canvas with a single solid color",props:{color:{default:"#5b18ca",transform:_e,description:"The solid color to display",ui:{type:"color",label:"Color",group:"Colors"}}},fragmentNode:({uniforms:s})=>s.color.uniform};var nU={name:"Spherize",category:"Distortions",description:"Map content onto a 3D sphere surface with depth distortion",requiresRTT:!0,requiresChild:!0,props:{radius:{default:1,description:"Radius of the sphere (1 = half viewport height)",ui:{type:["range","map"],min:.1,max:3,step:.1,label:"Radius",group:"Effect"}},depth:{default:1,description:"How much the sphere bulges toward viewer (0 = flat, higher = more bulge)",ui:{type:["range","map"],min:0,max:3,step:.1,label:"Depth",group:"Effect"}},center:{default:{x:.5,y:.5},transform:ft,description:"The center point of the sphere",ui:{type:"position",label:"Center",group:"Position"}},lightPosition:{default:{x:.3,y:.3},transform:ft,description:"Position of the specular light source",ui:{type:"position",label:"Light Position",group:"Position"}},lightIntensity:{default:.5,description:"Intensity of the rim light (0 = off)",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Light Intensity",group:"Effect"}},lightSoftness:{default:.5,description:"Softness of the rim light falloff (0 = hard edge, 1 = soft glow)",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Light Softness",group:"Effect"}},lightColor:{default:"#ffffff",transform:_e,description:"Color of the specular highlight",ui:{type:"color",label:"Light Color",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=H,r=X.x.div(X.y),o=R(s.center.uniform.x,s.center.uniform.y.oneMinus()),a=s.radius.uniform,l=R(i.x.sub(o.x).mul(r),i.y.sub(o.y)).mul(2).div(a),c=l.x.mul(l.x).add(l.y.mul(l.y)),u=d(1).sub(we(d(.98),d(1),c)),h=yn(St(d(0),d(1).sub(c))),p=d(1).add(h.mul(s.depth.uniform)),f=l.div(p).mul(a).div(2),m=R(f.x.div(r).add(o.x),f.y.add(o.y)),g=It(n.sample(m)),y=R(s.lightPosition.uniform.x,s.lightPosition.uniform.y.oneMinus()),x=s.lightIntensity.uniform,b=s.lightSoftness.uniform,v=de(s.lightColor.uniform.x,s.lightColor.uniform.y,s.lightColor.uniform.z),_=xr(de(l.x,l.y,h)),M=de(0,0,1),T=d(1).add(d(4).mul(d(1).sub(b))),w=Pt(d(1).sub(St(Nt(_,M),d(0))),T),S=R(y.x.sub(d(.5)).mul(2),y.y.sub(d(.5)).mul(2)),A=xr(R(_.x,_.y).add(R(1e-4,1e-4))),I=xr(S.add(R(1e-4,1e-4))),N=Pt(St(d(0),Nt(A,I)),d(2)),P=w.mul(N).mul(x).mul(d(2));return F(g.x.add(v.x.mul(P)),g.y.add(v.y.mul(P)),g.z.add(v.z.mul(P)),g.w.mul(u))}};var sU={name:"Spiral",category:"Textures",description:"Rotating spiral pattern with animated movement",props:{colorA:{default:"#000000",transform:_e,description:"Background color",ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#ffffff",transform:_e,description:"Spiral stroke color",ui:{type:"color",label:"Color B",group:"Colors"}},strokeWidth:{default:.5,description:"Thickness of spiral stroke",ui:{type:["range","map"],min:0,max:2,step:.1,label:"Stroke Width",group:"Effect"}},strokeFalloff:{default:0,description:"Stroke losing width further from center",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Stroke Falloff",group:"Effect"}},softness:{default:0,description:"Color transition sharpness (0 = hard edge, 1 = smooth fade)",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Softness",group:"Effect"}},speed:{default:1,description:"Animation speed (negative values reverse direction)",ui:{type:"range",min:-3,max:3,step:.1,label:"Speed",group:"Animation"}},center:{default:{x:.5,y:.5},transform:ft,description:"The center point of the spiral",ui:{type:"position",label:"Center",group:"Position"}},scale:{default:1,description:"Scale factor for spiral bands (higher = more bands, lower = fewer bands)",ui:{type:["range","map"],min:.1,max:5,step:.1,label:"Scale",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=X.x.div(X.y),i=R(t.x.mul(n),t.y),r=R(e.center.uniform.x.mul(n),e.center.uniform.y.oneMinus()),o=i.sub(r),a=cn(s,e.speed),l=In(o),c=l,u=Jn(o.y,o.x).sub(a),h=d(6.283185307),p=u.div(h),f=c.mul(e.scale.uniform).add(p),m=bt(ct(f).sub(.5)).mul(2),g=ht(e.strokeWidth.uniform,e.strokeFalloff.uniform.mul(.005),1),y=ht(e.strokeFalloff.uniform,0,1).mul(l).oneMinus(),x=g.mul(y),b=zs(f),v=ve(d(4).sub(we(.05,.4,e.strokeWidth.uniform.mul(2)).mul(we(.05,.4,e.strokeWidth.uniform.oneMinus().mul(2))).mul(3)).mul(b),zs(m),ht(b,0,1)),_=we(x.sub(v).sub(e.softness.uniform),x.add(v).add(e.softness.uniform),m),M=wt(e.colorA.uniform,e.colorB.uniform,_,e.colorSpace.uniform.value);return F(M.rgb,M.a)}};var jq=s=>({outside:0,center:1,inside:2})[s?.toLowerCase()]??1,iU={name:"Star",category:"Shapes",description:"Classic star polygon with straight sides and sharp pointed tips",props:{color:{default:"#ffffff",transform:_e,description:"Fill color of the star",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the star",ui:{type:"position",label:"Center",group:"Position"}},radius:{default:.4,description:"Outer tip radius \u2014 distance from center to the pointed tips",ui:{type:"range",min:0,max:1,step:.01,label:"Radius",group:"Shape"}},sides:{default:5,description:"Number of points on the star",ui:{type:"range",min:3,max:12,step:1,label:"Points",group:"Shape"}},innerRatio:{default:.4,description:"Inner vertex radius as a ratio of outer radius (0.382 = golden-ratio 5-star)",ui:{type:"range",min:.1,max:.9,step:.01,label:"Inner Ratio",group:"Shape"}},rotation:{default:0,description:"Rotation in degrees",ui:{type:"range",min:0,max:360,step:1,label:"Rotation",group:"Shape"}},softness:{default:0,description:"Edge softness for antialiasing",ui:{type:"range",min:0,max:.1,step:.001,label:"Softness",group:"Effect"}},strokeThickness:{default:0,description:"Stroke thickness. Zero means no stroke.",ui:{type:"range",min:0,max:.2,step:.005,label:"Stroke Thickness",group:"Stroke"}},strokeColor:{default:"#000000",transform:_e,description:"Color of the stroke outline",ui:{type:"color",label:"Stroke Color",group:"Colors"}},strokePosition:{default:"center",transform:jq,description:"Position of the stroke relative to the shape edge",ui:{type:"select",options:[{label:"Outside",value:"outside"},{label:"Center",value:"center"},{label:"Inside",value:"inside"}],label:"Stroke Position",group:"Stroke"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for blending fill and stroke colors",ui:{type:"select",options:Ft,label:"Color Blending",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=n.x.sub(i.x),o=n.y.sub(i.y),a=s.rotation.uniform.mul(d(Math.PI/180)),l=ke(a),c=ue(a),u=bw(r.mul(l).add(o.mul(c)),o.mul(l).sub(r.mul(c)),s.radius.uniform,s.sides.uniform,s.innerRatio.uniform),h=s.softness.uniform,p=s.strokeThickness.uniform,f=s.strokePosition.uniform,m=p.greaterThan(d(0)),g=f.greaterThanEqual(d(.5)).and(f.lessThan(d(1.5))),y=f.greaterThanEqual(d(1.5)),x=p.mul(.5),b=y.select(p.negate(),g.select(x.negate(),d(0))),v=y.select(d(0),g.select(x,p)),_=we(v.sub(h),v,u).oneMinus(),M=m.select(we(b.sub(h),b,u),d(0)),T=wt(F(s.color.uniform.rgb,s.color.uniform.a),F(s.strokeColor.uniform.rgb,s.strokeColor.uniform.a),M,s.colorSpace.uniform.value);return F(T.xyz,T.w.mul(_))}};var rU={name:"Strands",category:"Textures",description:"Procedural wavy strands with layered animation",requiresRTT:!1,requiresChild:!1,props:{speed:{default:.5,description:"Overall animation speed",ui:{type:"range",min:0,max:1,step:.1,label:"Speed",group:"Animation"}},amplitude:{default:1,description:"Wave height amplitude",ui:{type:["range","map"],min:0,max:5,step:.1,label:"Amplitude",group:"Effect"}},frequency:{default:1,description:"Wave frequency",ui:{type:["range","map"],min:0,max:5,step:.1,label:"Frequency",group:"Effect"}},lineCount:{default:12,description:"Number of wave lines",ui:{type:"range",min:4,max:32,step:1,label:"Line Count",group:"Effect"}},lineWidth:{default:.1,description:"Width of wave lines",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Line Width",group:"Effect"}},waveColor:{default:"#f1c907",transform:_e,description:"Color of the waves",ui:{type:"color",label:"Wave Color",group:"Colors"}},pinEdges:{default:!0,description:"Pin waves at edges (fade effect)",ui:{type:"checkbox",label:"Pin Edges",group:"Effect"}},start:{default:{x:0,y:.5},transform:ft,description:"Starting point of the waves",ui:{type:"position",label:"Start",group:"Position"}},end:{default:{x:1,y:.5},transform:ft,description:"Ending point of the waves",ui:{type:"position",label:"End",group:"Position"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=cn(s,e.speed),i=Ne(([r])=>ke(r).add(ke(r.mul(1.2).add(1.6))).add(ke(r.mul(1.4).add(1.5))).div(3));return Ne(([r])=>{let o=X.x.div(X.y),a=R(e.start.uniform.x.mul(o),e.start.uniform.y.oneMinus()),l=R(e.end.uniform.x.mul(o),e.end.uniform.y.oneMinus()),c=R(r.x.mul(o),r.y),u=l.sub(a),h=u.length(),p=u.div(h),f=R(p.y.negate(),p.x),m=c.sub(a),g=m.dot(p).div(h),y=m.dot(f),x=g.mul(10),b=y.mul(10),v=e.pinEdges.uniform.select(we(d(0),d(.1),g).mul(we(d(.9),d(1),g).oneMinus()),d(1)),_=e.pinEdges.uniform.select(ke(g.mul(6.28)).mul(.5).add(.5).oneMinus(),d(1)),M=ke(g.mul(6.28)).mul(.5).add(.5).oneMinus(),T=F(0,0,0,0).toVar(),w=e.lineCount.uniform;for(let S=0;S<32;S++){let A=d(S).lessThan(w),I=d(S),N=I.div(w),P=d(.5),B=d(1.33),U=n.mul(B),D=I.add(x.mul(P)),L=i(D.add(U)).mul(.5).add(.5),k=ve(d(.01),e.lineWidth.uniform,L.mul(_)).mul(.5),W=d(.6),$=d(2),ie=i(D.add(U.mul(N.add(1)))).mul(ve(W,$,_)).mul(e.amplitude.uniform),xe=i(x.mul(e.frequency.uniform).add(n)).mul(_).mul(e.amplitude.uniform).add(ie),he=bt(b.sub(xe)),Pe=d(.01),Ge=we(k.sub(Pe),k.add(Pe),he).oneMinus(),He=F(e.waveColor.uniform.r,e.waveColor.uniform.g,e.waveColor.uniform.b,Ge).mul(L);T.assign(St(T,A.select(He,F(0,0,0,0))))}return T.mul(F(1,1,1,M.mul(v)))})(t)}};var oU={name:"Stretch",category:"Distortions",description:"Stretch content towards a direction from a center point",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"The center point of the stretch effect",ui:{type:"position",label:"Center",group:"Position"}},strength:{default:1,description:"The intensity of the stretch effect",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Strength",group:"Effect"}},angle:{default:0,description:"The direction of the stretch in degrees",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},falloff:{default:0,description:"Controls the sharpness of the transition (0 = sharp edge, 1 = gradual transition)",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Falloff",group:"Effect"}},edges:{default:"stretch",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=X.x.div(X.y),r=R(H.x.mul(i),H.y),o=R(s.center.uniform.x.mul(i),s.center.uniform.y.oneMinus()),a=r.sub(o),l=s.angle.uniform.mul(Math.PI/180),c=R(ke(l),ue(l)),u=a.dot(c),h=c.mul(u),p=a.sub(h),f=s.falloff.uniform,m=ve(d(.001),d(75),f),g=ht(u.div(m),d(0),d(1)),y=s.strength.uniform.mul(d(100)),x=d(1).add(y.mul(g)),b=u.div(x),v=c.mul(b).add(p),_=o.add(v),M=R(_.x.div(i),_.y);return It(En(M,n.sample(M),n,s.edges.uniform.value))}};var aU={name:"Stripes",category:"Textures",description:"Alternating colored stripes with animation",props:{colorA:{default:"#000000",transform:_e,description:"First stripe color",ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#ffffff",transform:_e,description:"Second stripe color",ui:{type:"color",label:"Color B",group:"Colors"}},angle:{default:45,transform:cs,description:"Angle of stripes in degrees",ui:{type:["range","map"],min:-180,max:180,step:1,label:"Angle",group:"Effect"}},density:{default:5,description:"Number of stripe pairs visible",ui:{type:["range","map"],min:1,max:30,step:1,label:"Density",group:"Effect"}},balance:{default:.5,description:"Ratio of the two colors",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Balance",group:"Effect"}},softness:{default:0,description:"Edge softness",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Softness",group:"Effect"}},speed:{default:.2,description:"Animation speed",ui:{type:"range",min:-1,max:1,step:.1,label:"Speed",group:"Animation"}},offset:{default:0,description:"Phase offset for pattern positioning",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Offset",group:"Animation"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=X.x.div(X.y),i=R(t.x.mul(n),t.y),r=e.angle.uniform.mul(.0174533),o=ke(r),a=ue(r),l=i.x.mul(o).add(i.y.mul(a)),c=cn(s,e.speed),u=l.mul(e.density.uniform).add(c).add(e.offset.uniform),h=ct(u),p=zs(u),f=e.balance.uniform,m=e.softness.uniform,g=we(f.sub(m).sub(p),f.add(m).add(p),h),y=wt(e.colorA.uniform,e.colorB.uniform,g,e.colorSpace.uniform.value);return F(y.rgb,y.a)}};var lU={name:"StudioBackground",category:"Textures",description:"Multi-light studio background with ambient motion.",props:{color:{default:"#d8dbec",transform:_e,description:"Base studio surface color",ui:{type:"color",label:"Surface Color",group:"Colors"}},keyColor:{default:"#d5e4ea",transform:_e,description:"Color of the overhead key light",ui:{type:"color",label:"Key Color",group:"Key Light"}},keyIntensity:{default:40,description:"Intensity of the key light",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Key Light"}},keySoftness:{default:50,description:"How diffuse the key light is",ui:{type:["range","map"],min:0,max:100,step:1,label:"Softness",group:"Key Light"}},fillColor:{default:"#d5e4ea",transform:_e,description:"Color of the side fill lights",ui:{type:"color",label:"Fill Color",group:"Fill Lights"}},fillIntensity:{default:10,description:"Intensity of the fill lights",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Fill Lights"}},fillSoftness:{default:70,description:"How diffuse the fill lights are",ui:{type:["range","map"],min:0,max:100,step:1,label:"Softness",group:"Fill Lights"}},fillAngle:{default:70,description:"How far apart the fill lights are from center",ui:{type:["range","map"],min:0,max:100,step:1,label:"Spread",group:"Fill Lights"}},backColor:{default:"#c8d4e8",transform:_e,description:"Color of the upward back wash",ui:{type:"color",label:"Back Color",group:"Back Light"}},backIntensity:{default:20,description:"Intensity of the back wash",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Back Light"}},backSoftness:{default:80,description:"How diffuse the back wash is",ui:{type:["range","map"],min:0,max:100,step:1,label:"Softness",group:"Back Light"}},brightness:{default:20,description:"Overall ambient light level",ui:{type:["range","map"],min:0,max:100,step:1,label:"Ambient",group:"Lighting"}},vignette:{default:0,description:"Edge darkening",ui:{type:["range","map"],min:0,max:100,step:1,label:"Vignette",group:"Lighting"}},center:{default:{x:.5,y:.8},transform:ft,description:"Where the spotlight meets the floor",ui:{type:"position",label:"Stage Center",group:"Scene"}},lightTarget:{default:100,description:"How far toward the floor vs wall the spotlights aim",ui:{type:["range","map"],min:0,max:100,step:1,label:"Light Depth",group:"Scene"}},wallCurvature:{default:10,description:"How rounded the cove is",ui:{type:["range","map"],min:0,max:100,step:1,label:"Wall Curvature",group:"Scene"}},ambientIntensity:{default:50,description:"Intensity of drifting ambient lights",ui:{type:["range","map"],min:0,max:100,step:1,label:"Ambient Detail",group:"Environment"}},ambientSpeed:{default:2,description:"Drift speed",ui:{type:"range",min:-5,max:5,step:.1,label:"Speed",group:"Environment"}},seed:{default:0,description:"Seed for ambient pattern",ui:{type:"range",min:0,max:100,step:1,label:"Seed",group:"Environment"}}},fragmentNode:s=>{let{uniforms:e}=s,t=e.color.uniform,n=e.brightness.uniform.mul(.02),i=e.keyColor.uniform,r=e.keyIntensity.uniform.mul(.015),o=e.fillColor.uniform,a=e.fillIntensity.uniform.mul(.015),l=e.fillAngle.uniform.mul(.005),c=e.backColor.uniform,u=e.backIntensity.uniform.mul(.015),h=e.center.uniform.x,p=e.center.uniform.y.oneMinus(),f=e.lightTarget.uniform.mul(.01),m=e.wallCurvature.uniform.mul(.01),g=e.vignette.uniform.mul(.025),y=e.ambientIntensity.uniform.mul(.012),x=e.seed.uniform,b=X.x.div(X.y),v=cn(s,e.ambientSpeed),_=ve(d(5),d(.8),e.keySoftness.uniform.mul(.01)),M=ve(d(5),d(.8),e.fillSoftness.uniform.mul(.01)),T=ve(d(5),d(.8),e.backSoftness.uniform.mul(.01)),w=A=>ct(ue(A.mul(12.9898)).mul(43758.5453)),S=Array.from({length:4},(A,I)=>{let N=x.add(d(I*73.1)),P=w(N.add(311)).mul(.12).add(.1);return{radiusX:w(N).mul(.5).add(.2),radiusY:w(N.add(37)).mul(.25).add(.1),freqX:w(N.add(91)).mul(.3).add(.1),freqY:w(N.add(143)).mul(.25).add(.08),phaseX:w(N.add(200)).mul(Math.PI*2),phaseY:w(N.add(257)).mul(Math.PI*2),sizeSq:P.mul(P)}});return Ne(()=>{let A=H,I=ve(d(.015),d(.15),m),N=we(p.sub(I),p.add(I),A.y),P=d(1).sub(N),B=ht(A.y.div(p),0,1),U=B.mul(B),D=ht(A.y.sub(p).div(d(1).sub(p)),0,1),L=A.x.sub(h).mul(b),k=ve(d(.05),d(.45),U),W=d(1).sub(B).mul(1.2),$=W.mul(W),ie=p.add(d(1).sub(p).mul(.3)),xe=A.y.sub(ie).mul(4),he=xe.mul(xe),Pe=ve(ve(d(.2),d(.4),B),ve(d(.38),d(.18),D),N).mul(n),Ge=A.y.sub(p).div(I.add(.001)),He=Ni(Ge.mul(Ge).mul(-.5)).mul(m).mul(n).mul(.1),oe=Pe.add(He),be=de(oe,oe,oe).toVar(),Te=d(1).sub(f).mul(1.4).add(.3),Fe=f.mul(1.4).add(.3),ze=(Q,Se)=>{let Ae=ve(Q,h,U),K=A.x.sub(Ae).mul(b).div(k),Z=Ni(K.mul(K).add($).mul(-1).mul(Se)).mul(P).mul(Te),me=ve(h,Q,d(.25)),Ze=A.x.sub(me).mul(b).mul(1.4),Be=Ni(Ze.mul(Ze).add(he).mul(-1).mul(Se.mul(1.5))).mul(N).mul(Fe);return Z.add(Be)},fe=ze(h,_).mul(r);be.assign(be.add(i.rgb.mul(fe)));let Xe=ze(h.sub(l),M).mul(a),Re=ze(h.add(l),M).mul(a);be.assign(be.add(o.rgb.mul(Xe.add(Re))));let Y=ve(d(1),p,d(.15)),ye=L.mul(.5),Me=A.y.sub(Y).mul(4),Le=Ni(ye.mul(ye).add(Me.mul(Me)).mul(-1).mul(T)).mul(N),Ye=L.mul(.6),tt=p.sub(A.y).mul(3),et=Ni(Ye.mul(Ye).add(tt.mul(tt)).mul(-1).mul(T.mul(.8))).mul(P).mul(U),Qe=Le.add(et).mul(u);be.assign(be.add(c.rgb.mul(Qe)));let nt=L.mul(.7),J=A.y.sub(p).add(.02).mul(10),Ie=Ni(nt.mul(nt).add(J.mul(J)).mul(-2.5)).mul(r.mul(.12)).mul(P);be.assign(be.add(de(Ie,Ie,Ie)));let Ee=y.mul(.25);for(let Q=0;Q<4;Q++){let Se=S[Q],Ae=h.add(ue(v.mul(Se.freqX).add(Se.phaseX)).mul(Se.radiusX)),K=p.sub(.2).add(ke(v.mul(Se.freqY).add(Se.phaseY)).mul(Se.radiusY)),Z=A.x.sub(Ae).mul(b),me=A.y.sub(K),Ze=Ni(Z.mul(Z).add(me.mul(me)).div(Se.sizeSq).mul(-.5)).mul(Ee);be.assign(be.add(de(Ze,Ze,Ze)))}let O=A.x.sub(.5).mul(b),E=A.y.sub(.5),z=O.mul(O).add(E.mul(E)),q=ht(d(1).sub(z.mul(g)),0,1);return be.assign(ht(be,0,3)),F(t.rgb.mul(be).mul(q).clamp(0,1),d(1))})()}};var cU={name:"SunBurst",category:"Textures",description:"Radial sunburst rays emanating from a center point",props:{color:{default:"#ffdd88",transform:_e,description:"Ray color",ui:{type:"color",label:"Color",group:"Colors"}},background:{default:"#000000",transform:_e,description:"Background color",ui:{type:"color",label:"Background",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center point of the sunburst",ui:{type:"position",label:"Center",group:"Position"}},rayCount:{default:12,description:"Number of rays",ui:{type:"range",min:3,max:64,step:1,label:"Ray Count",group:"Effect"}},softness:{default:.3,description:"Softness of ray edges",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Softness",group:"Effect"}},radius:{default:.8,description:"How far the rays extend from the center",ui:{type:["range","map"],min:0,max:1.2,step:.01,label:"Radius",group:"Effect"}},feather:{default:.5,description:"How gradually the rays fade at their outer edge",ui:{type:["range","map"],min:0,max:5,step:.01,label:"Feather",group:"Effect"}},speed:{default:.2,description:"Rotation speed \u2014 positive values rotate clockwise",ui:{type:"range",min:-2,max:2,step:.1,label:"Speed",group:"Animation"}}},fragmentNode:s=>{let{uniforms:e}=s,t=H,n=X.x.div(X.y),i=e.center.uniform.x,r=e.center.uniform.y.oneMinus(),o=t.x.mul(n).sub(i.mul(n)),a=t.y.sub(r),l=yn(o.mul(o).add(a.mul(a))),c=Jn(a,o),u=cn(s,e.speed),h=e.rayCount.uniform,p=Pt(ue(c.mul(h).sub(u)).mul(.5).add(.5),d(1).div(e.softness.uniform.add(d(.05))).mul(d(.3))),f=e.radius.uniform,m=e.feather.uniform,g=f.mul(d(1).sub(m)),y=d(1).sub(we(g,f,l)),x=p.mul(y),b=e.color.uniform,v=e.background.uniform;return F(ve(v.rgb,b.rgb,x),ve(v.a,b.a,x))}};var uU={name:"Swirl",category:"Textures",description:"Flowing swirl pattern with multi-layered noise",props:{colorA:{default:"#1275d8",description:"Primary gradient color",transform:_e,ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#e19136",description:"Secondary gradient color",transform:_e,ui:{type:"color",label:"Color B",group:"Colors"}},speed:{default:1,description:"Flow animation speed",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Animation"}},detail:{default:1,description:"Level of detail and intricacy in the swirl patterns",ui:{type:["range","map"],min:0,max:5,step:.1,label:"Detail",group:"Effect"}},blend:{default:50,description:"Skew color balance toward A (lower values) or B (higher values)",ui:{type:["range","map"],min:0,max:100,step:1,label:"Blend",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:s=>{let{uniforms:e}=s,t=cn(s,e.speed),n=e.detail.uniform,i=e.colorSpace.uniform.value;return Ne(()=>{let r=n,o=R(H.x.add(ue(H.y.mul(r.mul(1.7)).add(t.mul(.8))).mul(.12).add(ke(H.x.mul(r.mul(.9)).sub(t.mul(.5))).mul(.05))),H.y.add(ke(H.x.mul(r.mul(1.3)).sub(t.mul(.6))).mul(.12).add(ue(H.y.mul(r.mul(1.1)).add(t.mul(.7))).mul(.05)))).toVar(),a=ue(o.x.mul(r.mul(2.1)).add(o.y.mul(r.mul(1.8))).add(t.mul(.4))),l=n.mul(2.1),c=R(o.x.add(ke(o.y.mul(l.mul(2.7)).sub(t.mul(.45))).mul(.07).add(ue(o.x.mul(l.mul(1.9)).add(t.mul(.6))).mul(.04))),o.y.add(ue(o.x.mul(l.mul(2.3)).add(t.mul(.65))).mul(.07).add(ke(o.y.mul(l.mul(1.6)).sub(t.mul(.4))).mul(.04)))).toVar(),u=ke(c.x.mul(l.mul(1.4)).sub(c.y.mul(l.mul(1.9))).add(t.mul(.35))),h=n.mul(3.7),p=R(c.x.add(ue(c.y.mul(h.mul(1.8)).add(t.mul(.85))).mul(.04).add(ke(c.x.mul(h.mul(1.3)).sub(t.mul(.55))).mul(.025)).add(ue(c.x.add(c.y).mul(h.mul(.7)).add(t.mul(.9))).mul(.02))),c.y.add(ke(c.x.mul(h.mul(1.6)).sub(t.mul(.75))).mul(.04).add(ue(c.y.mul(h.mul(1.1)).add(t.mul(.5))).mul(.025)).add(ke(c.x.add(c.y).mul(h.mul(.8)).sub(t.mul(.95))).mul(.02)))).toVar(),f=ue(p.x.mul(h.mul(1.1)).add(p.y.mul(h.mul(1.5))).sub(t.mul(.55))),m=a.mul(.45).add(u.mul(.35)).add(f.mul(.2)).toVar(),g=e.blend.uniform.sub(50).mul(.006),y=we(.3,.7,m.mul(.5).add(.5).add(g)),x=wt(e.colorA.uniform,e.colorB.uniform,y,i),b=ue(t.mul(2.5).add(m.mul(8))).mul(.015).add(1),v=x.mul(b);return F(v.rgb,v.a)})()}};var Oy=Math.PI*2;function dU(s,e){let t=e.uniforms,n=ee(0),i=ee(0),r=()=>{let l=t.lightAngle.uniform.value*Math.PI/180;n.value=Math.cos(l),i.value=Math.sin(l)};r(),e.onBeforeRender(r);let o=cn(e,t.speed),a=t.mode.uniform.value;return Ne(()=>{let l=H,c=X.x.div(X.y),u=t.edgeSoftness.uniform.mul(d(.5)).max(d(.001)),h=R(t.center.uniform.x,t.center.uniform.y.oneMinus()),p=t.scale.uniform,f=R(l.x.sub(h.x).mul(c).div(p).add(d(.5)),l.y.sub(h.y).div(p).add(d(.5))),m=s(f).r,g=m.div(p),y=d(.01),x=s(f.add(R(y,d(0)))).r.sub(m).div(y),b=s(f.add(R(d(0),y))).r.sub(m).div(y),v=yn(x.mul(x).add(b.mul(b))).max(d(1e-4)),_=x.div(v),M=b.div(v),T=ht(g.negate().div(u).mul(d(32)),d(0),d(1)),w=t.rimWidth.uniform.mul(d(.1)).max(d(.001)),S=ht(g.negate().div(w),d(0),d(1)),A=d(1).sub(S).mul(d(1).sub(S)).mul(T),I=_.mul(n).add(M.mul(i)),N=M.mul(n).sub(_.mul(i)),P=o.mul(d(Oy)),B=I.mul(ke(P)).add(N.mul(ue(P))),U=t.hueShift.uniform.add(t.dispersion.uniform.mul(B)).add(t.thickness.uniform.mul(S).mul(d(2))),D;if(a==="custom"){let L=ct(U).mul(d(3)),k=ct(L),W=Ht(L),$=t.colorSpace.uniform.value,ie=wt(t.colorA.uniform,t.colorB.uniform,k,$),xe=wt(t.colorB.uniform,t.colorC.uniform,k,$),he=wt(t.colorC.uniform,t.colorA.uniform,k,$);he=ve(he,xe,ln(W,d(1.5))),he=ve(he,ie,ln(W,d(.5))),D=he.rgb}else D=de(ke(U.add(d(0)).mul(d(Oy))),ke(U.add(d(.3333)).mul(d(Oy))),ke(U.add(d(.6667)).mul(d(Oy)))).mul(d(.5)).add(d(.5));return F(ve(de(1),D,t.saturation.uniform).mul(A).mul(t.intensity.uniform),ht(A,d(0),d(1)))})()}var Zq=JSON.stringify({type:"circleSDF",radius:.35}),hU={name:"ThinFilm",category:"Shape Effects",description:"Iridescent thin-film edge",props:{center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the shape",ui:{type:"position",label:"Center",group:"Position"}},scale:{default:1,description:"Scale of the shape (1 = default size)",ui:{type:["range","map"],min:.1,max:3,step:.05,label:"Scale",group:"Position"}},intensity:{default:1,description:"Rim brightness \u2014 values above 1 push the edge past white for HDR bloom",ui:{type:["range","map"],min:0,max:4,step:.05,label:"Intensity",group:"Film"}},rimWidth:{default:1,description:"How far inward from the edge the iridescence reaches",ui:{type:["range","map"],min:0,max:3,step:.01,label:"Rim Width",group:"Film"}},edgeSoftness:{default:.3,description:"Softness of the shape boundary",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Edge Softness",group:"Film"}},thickness:{default:.5,description:"Film thickness \u2014 higher values pack more spectral bands across the rim",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Thickness",group:"Film"}},dispersion:{default:.5,description:"How strongly colour separates around the perimeter (warm vs cool sides)",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Dispersion",group:"Film"}},saturation:{default:1,description:"Spectral saturation \u2014 0 = white rim, 1 = full iridescence",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Saturation",group:"Film"}},hueShift:{default:0,description:"Rotate the spectrum to reposition the colours",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Hue Shift",group:"Film"}},lightAngle:{default:300,description:"Light angle in degrees \u2014 sets which side of the rim runs warm vs cool",ui:{type:"range",min:0,max:360,step:1,label:"Light Angle",group:"Film"}},mode:{default:"rainbow",compileTime:!0,description:"Rainbow uses the full iridescent spectrum; Custom cycles through your three chosen colours",ui:{type:"select",options:[{label:"Rainbow",value:"rainbow"},{label:"Custom",value:"custom"}],label:"Mode",group:"Colors"}},colorA:{default:"#2b6fff",transform:_e,description:"First colour in the rim cycle",ui:{type:"color",label:"Color 1",group:"Colors",condition:{mode:"custom"}}},colorB:{default:"#ffffff",transform:_e,description:"Second colour in the rim cycle",ui:{type:"color",label:"Color 2",group:"Colors",condition:{mode:"custom"}}},colorC:{default:"#ff7a21",transform:_e,description:"Third colour in the rim cycle",ui:{type:"color",label:"Color 3",group:"Colors",condition:{mode:"custom"}}},colorSpace:{default:"oklch",transform:Ut,compileTime:!0,description:"Colour space used to blend between custom colours",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors",condition:{mode:"custom"}}},speed:{default:.1,description:"Speed at which the colours rotate around the rim (0 = static)",ui:{type:"range",min:-1,max:1,step:.01,label:"Speed",group:"Animation"}},shape:{default:Zq,description:"Serialized shape configuration (JSON)",ui:{type:"shape",label:"Shape",group:"Shape"}},shapeSdfUrl:{default:"",compileTime:!0,description:"URL to a pre-generated SDF .bin file \u2014 when non-empty, activates SVG mode and triggers a shader recompile"},shapeType:{default:"",compileTime:!0,description:"Active SDF shape type \u2014 triggers recompile when shape is switched. When empty, derived from shape JSON at mount time."}},fragmentNode:s=>{let{uniforms:e,onCleanup:t,onBeforeRender:n}=s,i=e.shapeSdfUrl.uniform.value,r=(()=>{let o=e.shape.uniform.value;if(typeof o=="object"&&o!==null)return o;try{return JSON.parse(o)}catch{return{type:"circleSDF",radius:.35}}})();return dU(i?$r(i,n,t):qr(e.shapeType.uniform.value||r.type||"circleSDF",r,e.shape,n),s)}};var pU={name:"TiltShift",category:"Blurs",description:"Selective focus blur mimicking tilt-shift photography",requiresRTT:!0,requiresChild:!0,props:{intensity:{default:50,description:"Maximum blur intensity at edges",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Effect"}},width:{default:.3,description:"Width of the sharp focus area",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Width",group:"Effect"}},falloff:{default:.3,description:"Distance over which blur transitions to full strength",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Falloff",group:"Effect"}},angle:{default:0,transform:cs,description:"Rotation angle of the focus line (in degrees)",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center point of the focus line",ui:{type:"position",label:"Center",group:"Position"}}},computeNode:({childNode:s,onCleanup:e,dimensions:t,renderer:n,uniforms:i,onResize:r})=>{if(!s||i.angle.mapComputeInfo||i.width.mapComputeInfo||i.falloff.mapComputeInfo)return null;let o=_t(s);e(()=>{o?.renderTarget?.dispose&&o.renderTarget.dispose()});let a=n?.getPixelRatio?.()??1,l=Math.round(t.width*a),c=Math.round(t.height*a),u=Ia(o,l,c,e,14),{computeNodes:h,outputTexture:p,blurMapWriteNode:f,computeWidth:m,computeHeight:g}=u,y=ee(0),x=ee(.5),b=ee(.5),v=ee(.15),_=ee(.3),M=ee(1),T=ee(l),w=ee(c),S=gn(m),A=gn(g);function I(D){return D.getCpuValue?.()??(typeof D.uniform.value=="number"?D.uniform.value:null)}function N(){let D=I(i.angle);D!==null&&(y.value=D);let L=i.center.uniform.value?.x??i.center.uniform.x?.value;typeof L=="number"&&(x.value=L);let k=i.center.uniform.value?.y??i.center.uniform.y?.value;typeof k=="number"&&(b.value=k);let W=I(i.width);W!==null&&(v.value=W*.5);let $=I(i.falloff);$!==null&&(_.value=$),M.value=t.width/t.height}let P=i.intensity.mapComputeInfo;if(P){let{sourceTexture:D,channel:L,inputMin:k,inputMax:W,outputMin:$,outputMax:ie,curve:xe}=P,he=Ne(()=>{let Pe=kt,Ge=Pe.mod(S),He=Pe.div(S);wn(He.lessThan(A),()=>{let oe=Ge.toFloat().add(d(.5)).div(d(m)),be=He.toFloat().add(d(.5)).div(d(g)),Te=y.mul(d(Math.PI/180)),Fe=R(Te.sin().negate(),Te.cos()),ze=R(x,d(1).sub(b)),fe=R(oe,be).sub(ze),Xe=bt(Nt(R(fe.x.mul(M),fe.y),Fe)),Re=we(v,v.add(_),Xe),Y=vi(D,Mn(oe.mul(T).round().toInt().clamp(Tt(0),Tt(T.sub(1))).toUint(),be.mul(w).round().toInt().clamp(Tt(0),Tt(w.sub(1))).toUint()),Tt(0)),ye;L==="alpha"?ye=Y.a:L==="alphaInverted"?ye=Y.a.oneMinus():L==="luminanceInverted"?ye=Nt(Y.rgb,de(.2126,.7152,.0722)).oneMinus():ye=Nt(Y.rgb,de(.2126,.7152,.0722));let Me=W.sub(k).max(d(1e-4)),Le=ve($,ie,Pt(ht(ye.sub(k).div(Me),d(0),d(1)),Pt(d(2),xe.negate().mul(d(2))))).mul(d(.36)),Ye=Re.mul(Le);$n(f,Mn(Ge,He),F(Ye,d(0),d(0),d(1))).toWriteOnly()})})().compute(m*g,[256]);return r(({width:Pe,height:Ge})=>{let He=Math.round(Pe*a),oe=Math.round(Ge*a);T.value=He,w.value=oe,u.setInputDimensions(He,oe)}),{outputs:{childTexture:o,blurredTexture:p},getComputeNodes:()=>(N(),[he,...h])}}let B=ee(18),U=Ne(()=>{let D=kt,L=D.mod(S),k=D.div(S);wn(k.lessThan(A),()=>{let W=L.toFloat().add(d(.5)).div(d(m)),$=k.toFloat().add(d(.5)).div(d(g)),ie=y.mul(d(Math.PI/180)),xe=R(ie.sin().negate(),ie.cos()),he=R(x,d(1).sub(b)),Pe=R(W,$).sub(he),Ge=bt(Nt(R(Pe.x.mul(M),Pe.y),xe)),He=we(v,v.add(_),Ge).mul(B);$n(f,Mn(L,k),F(He,d(0),d(0),d(1))).toWriteOnly()})})().compute(m*g,[256]);return r(({width:D,height:L})=>{let k=Math.round(D*a),W=Math.round(L*a);T.value=k,w.value=W,u.setInputDimensions(k,W)}),{outputs:{childTexture:o,blurredTexture:p},getComputeNodes:()=>{N();let D=I(i.intensity);return D!==null&&(B.value=D*.36),[U,...h]}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t,computeOutputs:n})=>{if(!e)return F(0,0,0,0);if(n?.blurredTexture){let _=n.childTexture.sample(H),M=hn(n.blurredTexture).sample(H),T=X.x.div(X.y),w=Ls(s.angle.uniform),S=R(w.sin().negate(),w.cos()),A=R(s.center.uniform[0],s.center.uniform[1].oneMinus()),I=H.sub(A),N=bt(Nt(R(I.x.mul(T),I.y),S)),P=s.width.uniform.mul(.5),B=we(P,P.add(s.falloff.uniform),N),U=s.intensity.uniform.mul(d(0)).add(s.width.uniform.mul(d(0))).add(s.falloff.uniform.mul(d(0))).add(s.angle.uniform.mul(d(0))),D=ve(_,M,B);return It(F(D.rgb.add(U),D.a))}let i=_t(e);t(()=>{i?.renderTarget?.dispose&&i.renderTarget.dispose()});let r=X.x.div(X.y),o=Ls(s.angle.uniform),a=ke(o),l=R(ue(o).negate(),a),c=R(s.center.uniform[0],s.center.uniform[1].oneMinus()),u=H.sub(c),h=bt(Nt(R(u.x.mul(r),u.y),l)),p=s.width.uniform.mul(.5),f=s.falloff.uniform,m=we(p,p.add(f),h),g=s.intensity.uniform.mul(.06),y=m.mul(g),x=[.056,.135,.278,.487,.726,.923,1,.923,.726,.487,.278,.135,.056],b=6.21,v=_t(Ne(()=>{let _=H,M=R(1).div(X),T=F(0).toVar();for(let w=-6;w<=6;w++){let S=d(x[w+6]/b),A=R(d(w),d(0)).mul(y).mul(M),I=_.add(A),N=i.sample(I).mul(S);T.assign(T.add(N))}return T})());return t(()=>{v?.renderTarget?.dispose&&v.renderTarget.dispose()}),Ne(()=>{let _=H,M=R(1).div(X),T=F(0).toVar();for(let S=-6;S<=6;S++){let A=d(x[S+6]/b),I=R(d(0),d(S)).mul(y).mul(M),N=_.add(I),P=v.sample(N).mul(A);T.assign(T.add(P))}let w=T;return It(ve(i.sample(_),w,m))})()}};var fU={name:"Tint",category:"Adjustments",description:"Apply a color tint to the image",requiresChild:!0,props:{color:{default:"#ff8800",transform:_e,description:"Tint color",ui:{type:"color",label:"Tint Color",group:"Colors"}},amount:{default:.5,description:"Tint amount (0 = no tint, 1 = full tint)",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Amount",group:"Effect"}},preserveLuminosity:{default:!0,compileTime:!0,description:"Preserve original brightness",transform:s=>s?1:0,ui:{type:"checkbox",label:"Preserve Luminosity",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return console.error("You must pass a child component into the Tint shader."),F(0);let t=s.color.uniform,n=s.amount.uniform,i=de(e.r,e.g,e.b),r=ve(i,t.rgb,n),o=s.preserveLuminosity.uniform.value===1,a;if(o){let l=de(.299,.587,.114),c=Nt(i,l),u=Nt(r,l);a=r.mul(c.div(St(u,1e-4)))}else a=r;return F(a,e.a)}};var Kq=s=>({outside:0,center:1,inside:2})[s?.toLowerCase()]??1,mU={name:"Trapezoid",category:"Shapes",description:"Trapezoid with adjustable top and bottom widths and height",props:{color:{default:"#ffffff",transform:_e,description:"Fill color of the trapezoid",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the trapezoid",ui:{type:"position",label:"Center",group:"Position"}},bottomWidth:{default:.35,description:"Half-width of the bottom edge",ui:{type:"range",min:.01,max:1,step:.01,label:"Bottom Width",group:"Shape"}},topWidth:{default:.2,description:"Half-width of the top edge",ui:{type:"range",min:.01,max:1,step:.01,label:"Top Width",group:"Shape"}},height:{default:.25,description:"Half-height of the trapezoid",ui:{type:"range",min:.01,max:1,step:.01,label:"Height",group:"Shape"}},rotation:{default:0,description:"Rotation in degrees",ui:{type:"range",min:0,max:360,step:1,label:"Rotation",group:"Shape"}},softness:{default:0,description:"Edge softness for antialiasing",ui:{type:"range",min:0,max:.1,step:.001,label:"Softness",group:"Effect"}},strokeThickness:{default:0,description:"Stroke thickness. Zero means no stroke.",ui:{type:"range",min:0,max:.2,step:.005,label:"Stroke Thickness",group:"Stroke"}},strokeColor:{default:"#000000",transform:_e,description:"Color of the stroke outline",ui:{type:"color",label:"Stroke Color",group:"Colors"}},strokePosition:{default:"center",transform:Kq,description:"Position of the stroke relative to the shape edge",ui:{type:"select",options:[{label:"Outside",value:"outside"},{label:"Center",value:"center"},{label:"Inside",value:"inside"}],label:"Stroke Position",group:"Stroke"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for blending fill and stroke colors",ui:{type:"select",options:Ft,label:"Color Blending",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=n.x.sub(i.x),o=n.y.sub(i.y),a=s.rotation.uniform.mul(d(Math.PI/180)),l=ke(a),c=ue(a),u=Aw(r.mul(l).add(o.mul(c)),o.mul(l).sub(r.mul(c)),s.topWidth.uniform,s.bottomWidth.uniform,s.height.uniform),h=s.softness.uniform,p=s.strokeThickness.uniform,f=s.strokePosition.uniform,m=p.greaterThan(d(0)),g=f.greaterThanEqual(d(.5)).and(f.lessThan(d(1.5))),y=f.greaterThanEqual(d(1.5)),x=p.mul(.5),b=y.select(p.negate(),g.select(x.negate(),d(0))),v=y.select(d(0),g.select(x,p)),_=we(v.sub(h),v,u).oneMinus(),M=m.select(we(b.sub(h),b,u),d(0)),T=wt(F(s.color.uniform.rgb,s.color.uniform.a),F(s.strokeColor.uniform.rgb,s.strokeColor.uniform.a),M,s.colorSpace.uniform.value);return F(T.xyz,T.w.mul(_))}};var gU={name:"Tritone",category:"Adjustments",description:"Map colors to three tones: shadows, midtones, highlights",requiresChild:!0,props:{colorA:{default:"#ce1bea",transform:_e,description:"First color (used for shadows/darkest areas)",ui:{type:"color",label:"Color A (Shadows)",group:"Colors"}},colorB:{default:"#2fff00",transform:_e,description:"Second color (used for midtones)",ui:{type:"color",label:"Color B (Midtones)",group:"Colors"}},colorC:{default:"#ffff00",transform:_e,description:"Third color (used for highlights/brightest areas)",ui:{type:"color",label:"Color C (Highlights)",group:"Colors"}},blendMid:{default:.5,description:"Midpoint position between the three colors",ui:{type:["range","map"],min:0,max:1,step:.1,label:"Midpoint",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return F(0,0,0,0);let t=Nt(de(e.r,e.g,e.b),de(.299,.587,.114)),n=we(s.blendMid.uniform.sub(.25),s.blendMid.uniform,t),i=s.colorSpace.uniform.value,r=wt(s.colorA.uniform,s.colorB.uniform,n,i),o=we(s.blendMid.uniform,s.blendMid.uniform.add(.25),t);return F(wt(r,wt(s.colorB.uniform,s.colorC.uniform,o,i),we(s.blendMid.uniform.sub(.1),s.blendMid.uniform.add(.1),t),i).rgb,e.a)}};var Jq=Ne(([s])=>ct(ue(Nt(s,R(127.1,311.7))).mul(d(43758.5453)))),xU={name:"Truchet",category:"Textures",description:"Quarter-circle arc tiles that connect to form organic, maze-like flowing curves",props:{colorA:{default:"#000000",transform:_e,description:"Background color between the arcs",ui:{type:"color",label:"Color A",group:"Colors"}},colorB:{default:"#ffffff",transform:_e,description:"Arc line color",ui:{type:"color",label:"Color B",group:"Colors"}},cells:{default:10,description:"Number of tiles across the shortest canvas edge",ui:{type:["range","map"],min:2,max:40,step:1,label:"Cells",group:"Effect"}},thickness:{default:2,description:"Thickness of the arc lines",ui:{type:["range","map"],min:0,max:20,step:.1,label:"Thickness",group:"Effect"}},seed:{default:0,description:"Random seed \u2014 changes which tiles flip, producing a different maze pattern",ui:{type:["range","map"],min:0,max:100,step:1,label:"Seed",group:"Effect"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y).mul(s.cells.uniform),i=Ht(n),r=ct(n),o=Jq(i.add(s.seed.uniform)).greaterThan(d(.5)),a=o.select(d(1),d(0)),l=o.select(d(0),d(0)),c=o.select(d(0),d(1)),u=o.select(d(1),d(1)),h=fn(bt(In(r.sub(R(a,l))).sub(d(.5))),bt(In(r.sub(R(c,u))).sub(d(.5)))),p=s.thickness.uniform.mul(d(.005)),f=zs(n.x).mul(d(.5)),m=we(p.add(f),p,h).mul(ln(d(1e-4),p));return wt(s.colorA.uniform,s.colorB.uniform,m,s.colorSpace.uniform.value)}};var yU={name:"Twirl",category:"Distortions",description:"Rotate and twist content around a center point",requiresRTT:!0,requiresChild:!0,props:{center:{default:{x:.5,y:.5},transform:ft,description:"The center point of the twirl effect",ui:{type:"position",label:"Center",group:"Position"}},intensity:{default:1,description:"The strength of the twirl effect",ui:{type:["range","map"],min:-5,max:5,step:.1,label:"Intensity",group:"Effect"}},edges:{default:"stretch",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return console.error("You must pass a child component into the Twirl shader."),F(0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=H,r=X.x.div(X.y),o=R(s.center.uniform.x,s.center.uniform.y.oneMinus()),a=i.sub(o),l=R(a.x.mul(r),a.y),c=s.intensity.uniform.mul(In(l)),u=ke(c),h=ue(c),p=u.mul(l.x).sub(h.mul(l.y)),f=h.mul(l.x).add(u.mul(l.y)),m=R(p.div(r).add(o.x),f.add(o.y));return It(En(m,n.sample(m),n,s.edges.uniform.value))}};var Qq=s=>({outside:0,center:1,inside:2})[s?.toLowerCase()]??1,bU={name:"Vesica",category:"Shapes",description:"Vesica piscis (lens shape) formed by the intersection of two overlapping circles",props:{color:{default:"#ffffff",transform:_e,description:"Fill color of the vesica",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center position of the vesica",ui:{type:"position",label:"Center",group:"Position"}},radius:{default:.35,description:"Radius of the two overlapping circles",ui:{type:"range",min:.05,max:1,step:.01,label:"Size",group:"Shape"}},spread:{default:.5,description:"Circle separation \u2014 0 = full circle overlap, 1 = infinitely thin lens",ui:{type:"range",min:.05,max:.95,step:.01,label:"Spread",group:"Shape"}},rotation:{default:0,description:"Rotation in degrees",ui:{type:"range",min:0,max:360,step:1,label:"Rotation",group:"Shape"}},softness:{default:0,description:"Edge softness for antialiasing",ui:{type:"range",min:0,max:.1,step:.001,label:"Softness",group:"Effect"}},strokeThickness:{default:0,description:"Stroke thickness. Zero means no stroke.",ui:{type:"range",min:0,max:.2,step:.005,label:"Stroke Thickness",group:"Stroke"}},strokeColor:{default:"#000000",transform:_e,description:"Color of the stroke outline",ui:{type:"color",label:"Stroke Color",group:"Colors"}},strokePosition:{default:"center",transform:Qq,description:"Position of the stroke relative to the shape edge",ui:{type:"select",options:[{label:"Outside",value:"outside"},{label:"Center",value:"center"},{label:"Inside",value:"inside"}],label:"Stroke Position",group:"Stroke"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for blending fill and stroke colors",ui:{type:"select",options:Ft,label:"Color Blending",group:"Colors"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=R(s.center.uniform.x.mul(t),s.center.uniform.y.oneMinus()),r=n.x.sub(i.x),o=n.y.sub(i.y),a=s.rotation.uniform.mul(d(Math.PI/180)),l=ke(a),c=ue(a),u=Mw(r.mul(l).add(o.mul(c)),o.mul(l).sub(r.mul(c)),s.radius.uniform,s.spread.uniform),h=s.softness.uniform,p=s.strokeThickness.uniform,f=s.strokePosition.uniform,m=p.greaterThan(d(0)),g=f.greaterThanEqual(d(.5)).and(f.lessThan(d(1.5))),y=f.greaterThanEqual(d(1.5)),x=p.mul(.5),b=y.select(p.negate(),g.select(x.negate(),d(0))),v=y.select(d(0),g.select(x,p)),_=we(v.sub(h),v,u).oneMinus(),M=m.select(we(b.sub(h),b,u),d(0)),T=wt(F(s.color.uniform.rgb,s.color.uniform.a),F(s.strokeColor.uniform.rgb,s.strokeColor.uniform.a),M,s.colorSpace.uniform.value);return F(T.xyz,T.w.mul(_))}};var Lw=6,eX=487,vU={name:"VHS",category:"Stylize",description:"Analog VHS tape with intermittent tape damage, chroma bleed, and per-scanline noise",requiresRTT:!0,requiresChild:!0,props:{wobble:{default:1,description:"Overall amount of tape damage \u2014 waves, creases, and head-switching noise. Bursts on and off organically over time.",ui:{type:["range","map"],min:0,max:5,step:.01,label:"Wobble",group:"Effect"}},scanlineNoise:{default:.6,description:"Per-scanline fine chroma/luma jitter. Adds the classic horizontal-streak detail.",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Scanline Noise",group:"Effect"}},smear:{default:.2,description:"Horizontal chroma smear (color bleed) amount. Positive trails colour to the right (classic VHS), negative trails it to the left.",ui:{type:["range","map"],min:-2,max:2,step:.01,label:"Smear",group:"Effect"}},speed:{default:1,description:"Animation speed of the tape effects.",ui:{type:"range",min:.1,max:3,step:.1,label:"Speed",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=s.wobble.uniform,r=s.scanlineNoise.uniform,o=s.smear.uniform,a=s.speed.uniform,l=wa.mul(a),c=he=>ct(ue(Nt(he,R(12.9898,78.233))).mul(43758.5453)),u=he=>{let Pe=Ht(he),Ge=ct(he),He=Ge.mul(Ge).mul(Ge.mul(-2).add(3)),oe=c(Pe),be=c(Pe.add(R(1,0))),Te=c(Pe.add(R(0,1))),Fe=c(Pe.add(R(1,1)));return ve(ve(oe,be,He.x),ve(Te,Fe,He.x),He.y)},h=we(d(.45),d(.8),u(R(l.mul(.4),d(0)))),p=Ht(H.y.mul(eX)),f=he=>ct(ue(p.mul(12.9898).add(l.add(he).mul(78.233))).mul(43758.5453)).sub(.5).mul(2),m=d(.25).add(h.mul(.75)),g=f(0).mul(r).mul(.008).mul(m),y=f(69.42).mul(r).mul(.004).mul(m),x=u(R(H.y.mul(3),l.mul(.8))).sub(.5),b=u(R(H.y.mul(30),l.mul(6))).sub(.5),v=x.mul(.008).add(b.mul(.002)).mul(i),_=we(d(.92),d(.99),ue(H.y.mul(8).sub(l.mul(3.77)))),M=we(d(.3),d(1),u(R(H.y.mul(4.77),l))),T=_.mul(M).mul(i).mul(-.018),w=we(d(.06),d(0),H.y),S=u(R(H.y.mul(60),l.mul(14))).sub(.5),A=w.mul(S).mul(i).mul(.09),I=w.mul(i).mul(h).mul(.02),N=v.add(T).add(A),P=R(H.x.add(N).add(y),H.y.add(I)),B=R(H.x.add(N).add(g),H.y.add(I)),U=n.sample(P),D=U.rgb.dot(de(.299,.587,.114)),L=o.mul(.0075),k=d(0),W=d(0);for(let he=0;he<Lw;he++){let Pe=d(-he).mul(L),Ge=n.sample(R(B.x.add(Pe),B.y)),He=Ge.rgb.dot(de(.596,-.274,-.322)),oe=Ge.rgb.dot(de(.211,-.523,.312)),be=he/(Lw-1)*(2/Lw);k=k.add(He.mul(be)),W=W.add(oe.mul(be))}let $=de(D,k,W),ie=de($.x.add($.y.mul(.956)).add($.z.mul(.621)),$.x.sub($.y.mul(.272)).sub($.z.mul(.647)),$.x.sub($.y.mul(1.106)).add($.z.mul(1.703))),xe=d(1).add(ke(ls(l,6.2831853).mul(2).add(H.y.mul(.5))).mul(.015).mul(i));return It(F(ht(ie.mul(xe),de(0),de(1)),U.a))}};var _U={name:"Vibrance",category:"Adjustments",description:"Selective saturation adjustment protecting skin tones",requiresChild:!0,props:{intensity:{default:0,description:"The intensity of the vibrance effect",ui:{type:["range","map"],min:-2,max:2,step:.1,label:"Intensity",group:"Appearance"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return console.error("You must pass a child component into the Vibrance shader."),F(0);let t=e.rgb,n=s.intensity.uniform,i=un(t.r,un(t.g,t.b)).div(3),r=St(t.r,St(t.g,t.b)),o=r.sub(i).mul(n).mul(-3);return F(ve(t,de(r,r,r),o),e.a)}};var Bw=null;function Kc(){return Bw===null&&(Bw=typeof navigator<"u"&&/Firefox/.test(navigator.userAgent)),Bw}var SU={name:"VideoTexture",category:"Textures",description:"Display a video with customizable playback and object-fit modes",props:{url:{default:"https://shaders.com/sample.mp4",description:"Upload a video or provide a URL",ui:{type:"video-upload",label:"Video",group:"Media"}},objectFit:{default:"cover",description:"How the video should be sized within the viewport",transform:s=>({cover:0,contain:1,fill:2,"scale-down":3,none:4})[s]??0,compileTime:!0,ui:{type:"select",options:[{label:"Cover",value:"cover"},{label:"Contain",value:"contain"},{label:"Fill",value:"fill"},{label:"Scale Down",value:"scale-down"},{label:"None",value:"none"}],label:"Object Fit",group:"Appearance"}},loop:{default:!0,description:"Loop the video playback",ui:{type:"checkbox",label:"Loop",group:"Playback"}}},fragmentNode:({uniforms:s,onCleanup:e,onBeforeRender:t})=>{let n=H,i=null,r="",o=!1,a=!1,l=ee(1),c=ee(640),u=ee(480),h=null,p=null,f;if(Kc())h=document.createElement("canvas"),h.width=640,h.height=480,p=h.getContext("2d"),f=new xo(h);else{let S=document.createElement("video");S.playsInline=!0,S.muted=!0,f=new Ya(S)}f.colorSpace=ts;let m=hn(f),g=async S=>{if(!(!S||S.trim()===""||o||a)){o=!0;try{let A=document.createElement("video");if(A.src=S,A.playsInline=!0,A.crossOrigin="anonymous",A.muted=!0,A.loop=s.loop?.uniform?.value??!0,await new Promise((P,B)=>{A.onloadedmetadata=()=>{P()},A.onerror=()=>{B(new Error("Failed to load video"))},setTimeout(()=>{B(new Error("Video load timeout"))},1e4)}),a){A.src="";return}let I=A.videoWidth||640,N=A.videoHeight||480;l.value=I/N,c.value=I,u.value=N,i&&(i.pause(),i.src="",i=null),i=A,r=S;try{await A.play()}catch(P){console.warn("[VideoTexture] Autoplay failed (browser policy):",P)}f.dispose(),Kc()?(h.width=I,h.height=N,f=new xo(h)):f=new Ya(A),f.colorSpace=ts,m.value=f,o=!1}catch(A){console.error("[VideoTexture] Failed to load video:",A),o=!1}}};setTimeout(()=>{let S=s?.url?.uniform?.value??"";S&&S.trim()!==""&&g(S)},0),t(()=>{let S=s?.url?.uniform?.value??"";if(S!==r&&!o&&g(S),i){let A=s.loop?.uniform?.value??!0;i.loop!==A&&(i.loop=A),Kc()&&!i.paused&&i.readyState>=2&&(p.drawImage(i,0,0,h.width,h.height),f.needsUpdate=!0)}}),e(()=>{a=!0,i&&(i.pause(),i.src="",i=null),f.dispose(),r=""});let y=n,x=X.x.div(X.y),b=s.objectFit.uniform.value,v;switch(b){case 1:{let S=fn(x.div(l),d(1));v=R(l.div(x).mul(S),S);break}case 2:v=R(1,1);break;case 3:{let S=fn(fn(x.div(l),d(1)),fn(X.x.div(c),X.y.div(u)));v=R(l.div(x).mul(S),S);break}case 4:{let S=fn(X.x.div(c),X.y.div(u));v=R(l.div(x).mul(S),S);break}default:{let S=St(x.div(l),d(1));v=R(l.div(x).mul(S),S);break}}let _=y.sub(R(.5)).div(v).add(R(.5)),M=R(_.x,d(1).sub(_.y)),T=m.sample(M),w=or(or(M.x.lessThan(0),M.x.greaterThan(1)),or(M.y.lessThan(0),M.y.greaterThan(1)));return F(T.rgb,ar(w,d(0),T.a))}};var TU={name:"Vignette",category:"Stylize",description:"Darkens or tints the edges of the frame, drawing attention toward the center",requiresChild:!0,props:{color:{default:"#000000",transform:_e,description:"Color of the vignette at the edges",ui:{type:"color",label:"Color",group:"Colors"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center of the clear area where the vignette begins",ui:{type:"position",label:"Center",group:"Position"}},radius:{default:.5,description:"Distance from center where the vignette begins to fade in",ui:{type:["range","map"],min:0,max:1.5,step:.01,label:"Radius",group:"Effect"}},falloff:{default:.5,description:"Width of the transition zone from clear to full vignette",ui:{type:["range","map"],min:.01,max:1.5,step:.01,label:"Falloff",group:"Effect"}},intensity:{default:1,description:"Strength of the vignette effect",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Intensity",group:"Effect"}}},fragmentNode:({uniforms:s,childNode:e})=>{if(!e)return console.error("You must pass a child component into the Vignette shader."),F(0);let t=H,n=X.x.div(X.y),i=R(t.x.mul(n),t.y),r=R(s.center.uniform.x.mul(n),s.center.uniform.y.oneMinus()),o=In(i.sub(r)),a=we(s.radius.uniform,s.radius.uniform.add(s.falloff.uniform),o);return F(ve(e.rgb,s.color.uniform.rgb,a.mul(s.intensity.uniform)),e.a)}};var tX=Ne(([s])=>ct(ue(R(Nt(s,R(127.1,311.7)),Nt(s,R(269.5,183.3)))).mul(d(43758.5453)))),MU={name:"Voronoi",category:"Textures",description:"Cellular pattern where each pixel is colored by its distance to the nearest of many scattered points",props:{colorA:{default:"#3186cf",transform:_e,description:"Color near each cell's center point",ui:{type:"color",label:"Color A (Center)",group:"Colors"}},colorB:{default:"#fc02dd",transform:_e,description:"Color at cell boundaries, far from any center point",ui:{type:"color",label:"Color B (Edge)",group:"Colors"}},colorBorder:{default:"#000000",transform:_e,description:"Color of the cell boundary lines",ui:{type:"color",label:"Border Color",group:"Colors"}},scale:{default:6,description:"Number of cells across the canvas",ui:{type:["range","map"],min:1,max:20,step:.5,label:"Scale",group:"Effect"}},speed:{default:.5,description:"Animation speed \u2014 how fast the cell points drift",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Animation"}},seed:{default:0,description:"Random seed \u2014 shifts the cell pattern without changing the overall structure",ui:{type:["range","map"],min:0,max:100,step:1,label:"Seed",group:"Effect"}},edgeIntensity:{default:.5,description:"Controls how much of the cell interior is filled by the edge color. Low = center color dominates with a sharp boundary. High = edge color spreads further into the cell.",ui:{type:["range","map"],min:0,max:1,step:.01,label:"Edge Intensity",group:"Effect"}},edgeSoftness:{default:.05,description:"Width of the cell boundary lines.",ui:{type:["range","map"],min:0,max:.4,step:.005,label:"Edge Softness",group:"Effect"}},colorSpace:{default:"oklch",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}}},fragmentNode:s=>{let{uniforms:e}=s,t=e.colorA.uniform,n=e.colorB.uniform,i=e.colorBorder.uniform,r=e.colorSpace.uniform.value,o=e.scale.uniform,a=e.seed.uniform,l=cn(s,e.speed),c=X.x.div(X.y),u=R(H.x.mul(c),H.y).mul(o);return Ne(([h,p,f,m,g,y])=>{let x=Ht(h),b=ct(h),v=d(10),_=d(10);for(let I=-1;I<=1;I++)for(let N=-1;N<=1;N++){let P=R(d(N),d(I)),B=tX(x.add(P).add(f)),U=B.x.add(ue(p.add(B.x.mul(d(6.28)))).mul(d(.15))).clamp(d(.05),d(.95)),D=B.y.add(ke(p.mul(d(.7)).add(B.y.mul(d(6.28)))).mul(d(.15))).clamp(d(.05),d(.95)),L=In(b.sub(P.add(R(U,D)))),k=L.lessThan(v);_=k.select(v,L.lessThan(_).select(L,_)),v=k.select(L,v)}let M=v.add(_).max(d(1e-4)),T=wt(t,n,Pt(v.mul(d(2)).div(M).clamp(d(0),d(1)),d(4).sub(m.mul(d(3)))).clamp(d(0),d(1)),r),w=g.mul(o).div(d(6)),S=_.sub(v).div(M),A=we(d(0),w.add(d(.001)),S);return F(ve(y.rgb,T.rgb,A),T.a)})(u,l,a,e.edgeIntensity.uniform,e.edgeSoftness.uniform,i)}};var wU={name:"WaveDistortion",category:"Distortions",description:"Wave-based distortion with multiple waveform types",requiresRTT:!0,requiresChild:!0,props:{strength:{default:.3,description:"Distortion intensity",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Strength",group:"Effect"}},frequency:{default:1,description:"Number of bends/waves",ui:{type:["range","map"],min:.1,max:10,step:.1,label:"Frequency",group:"Effect"}},speed:{default:1,description:"Animation speed",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Animation"}},angle:{default:0,description:"Direction of wave distortion in degrees",ui:{type:["range","map"],min:0,max:360,step:1,label:"Angle",group:"Effect"}},waveType:{default:"sine",description:"Shape of the distortion wave",compileTime:!0,transform:s=>({sine:0,triangle:1,square:2,sawtooth:3,bounce:4})[s]??0,ui:{type:"select",options:[{label:"Sine",value:"sine"},{label:"Triangle",value:"triangle"},{label:"Square",value:"square"},{label:"Sawtooth",value:"sawtooth"},{label:"Bounce",value:"bounce"}],label:"Wave Type",group:"Effect"}},edges:{default:"stretch",description:"How to handle edges when distortion pushes content out of bounds",transform:Fn,compileTime:!0,ui:{type:"select",options:[{label:"Stretch",value:"stretch"},{label:"Transparent",value:"transparent"},{label:"Mirror",value:"mirror"},{label:"Wrap",value:"wrap"}],label:"Edges",group:"Effect"}}},fragmentNode:s=>{let{uniforms:e,childNode:t,onCleanup:n,onBeforeRender:i}=s;if(!t)return F(0,0,0,0);let r=H,o=X.x.div(X.y),a=cn(s,e.speed).mul(.5),l,c;if(e.angle.uniform.isUniformNode){let M=ee(1),T=ee(0);i(()=>{let w=e.angle.uniform.value*Math.PI/180;M.value=Math.cos(w),T.value=Math.sin(w)}),l=M,c=T}else{let M=e.angle.uniform.mul(Qs).div(180);l=ke(M).toVar(),c=ue(M).toVar()}let u=r.sub(R(.5,.5)),h=R(u.x.mul(o),u.y),p=h.x.mul(c).add(h.y.mul(l)).add(.5).mul(e.frequency.uniform).mul(Qs.mul(2)).add(a),f;switch(e.waveType.uniform.value){case 1:f=bt(ct(p.div(Qs.mul(2))).mul(2).sub(1)).mul(2).sub(1);break;case 2:{let M=ct(p.div(Qs.mul(2)));f=ln(d(.5),M).mul(2).sub(1);break}case 3:f=ct(p.div(Qs.mul(2))).mul(2).sub(1);break;case 4:f=bt(ue(p));break;default:f=ue(p)}let m=f.mul(e.strength.uniform).mul(.5),g=m.mul(l).div(o),y=m.mul(c),x=R(r.x.add(g),r.y.add(y)),b=_t(t);n(()=>{b?.renderTarget?.dispose&&b.renderTarget.dispose()});let v=e.edges.uniform.value,_;if(v===2||v===3){let M=ay(x,v);_=b.sample(M)}else _=En(x,b.sample(x),b,v);return It(_)}};var AU={name:"Weave",category:"Textures",description:"Interlaced textile weave pattern with two thread colors going over and under each other",props:{colorA:{default:"#c4c4c4",transform:_e,description:"Horizontal thread color",ui:{type:"color",label:"X Color",group:"Colors"}},colorB:{default:"#4d4d4d",transform:_e,description:"Vertical thread color",ui:{type:"color",label:"Y Color",group:"Colors"}},cells:{default:10,description:"Number of threads across the shortest canvas edge",ui:{type:["range","map"],min:2,max:40,step:1,label:"Cells",group:"Effect"}},gap:{default:.25,description:"Gap between threads (0 = no gap, 0.5 = maximum gap)",ui:{type:["range","map"],min:0,max:.45,step:.01,label:"Gap",group:"Effect"}},rotation:{default:0,description:"Rotation of the weave pattern in degrees",ui:{type:["range","map"],min:0,max:360,step:1,label:"Rotation",group:"Effect"}}},fragmentNode:({uniforms:s})=>{let e=H,t=X.x.div(X.y),n=R(e.x.mul(t),e.y),i=s.rotation.uniform.mul(d(Math.PI/180)),r=ke(i),o=ue(i),a=R(t.mul(d(.5)),d(.5)),l=n.sub(a),c=R(l.x.mul(r).sub(l.y.mul(o)),l.x.mul(o).add(l.y.mul(r))).add(a).mul(s.cells.uniform),u=Ht(c),h=ct(c),p=s.gap.uniform,f=zs(c.x).mul(d(.5)),m=we(p,p.add(f),h.y).mul(we(p,p.add(f),d(1).sub(h.y))),g=we(p,p.add(f),h.x).mul(we(p,p.add(f),d(1).sub(h.x))),y=ls(u.x.add(u.y),d(2)),x=m.mul(g),b=m.sub(x.mul(y)).clamp(d(0),d(1)),v=g.sub(x.mul(d(1).sub(y))).clamp(d(0),d(1)),_=s.colorA.uniform,M=s.colorB.uniform,T=_.a.mul(b),w=M.a.mul(v),S=T.add(w).clamp(d(0),d(1)),A=T.add(w).max(d(.001));return F(_.x.mul(T).add(M.x.mul(w)).div(A),_.y.mul(T).add(M.y.mul(w)).div(A),_.z.mul(T).add(M.z.mul(w)).div(A),S)}};var CU={name:"WebcamTexture",category:"Textures",description:"Display a live webcam feed with customizable object-fit modes",props:{objectFit:{default:"cover",description:"How the webcam feed should be sized within the viewport",transform:s=>({cover:0,contain:1,fill:2,"scale-down":3,none:4})[s]??0,compileTime:!0,ui:{type:"select",options:[{label:"Cover",value:"cover"},{label:"Contain",value:"contain"},{label:"Fill",value:"fill"},{label:"Scale Down",value:"scale-down"},{label:"None",value:"none"}],label:"Object Fit",group:"Appearance"}},mirror:{default:!0,description:"Mirror the webcam feed horizontally (selfie mode)",ui:{type:"checkbox",label:"Mirror",group:"Effect"}}},fragmentNode:({uniforms:s,onCleanup:e,onBeforeRender:t})=>{let n=H,i=null,r=null,o=!1,a=!1,l=ee(1),c=ee(640),u=ee(480),h=null,p=null,f;if(Kc())h=document.createElement("canvas"),h.width=640,h.height=480,p=h.getContext("2d"),f=new xo(h);else{let A=document.createElement("video");A.playsInline=!0,A.muted=!0,f=new Ya(A)}f.colorSpace=ts;let m=hn(f);(async()=>{if(!(o||a))try{if(i=await navigator.mediaDevices.getUserMedia({video:{width:{ideal:1280},height:{ideal:720},facingMode:"user"},audio:!1}),a){i.getTracks().forEach(N=>N.stop()),i=null;return}if(r=document.createElement("video"),r.srcObject=i,r.playsInline=!0,r.muted=!0,await new Promise((N,P)=>{if(!r)return P(new Error("Video element not created"));r.onloadedmetadata=()=>{N()},r.onerror=()=>{P(new Error("Failed to load video metadata"))}}),a||(await r.play(),a))return;let A=r.videoWidth||640,I=r.videoHeight||480;l.value=A/I,c.value=A,u.value=I,f.dispose(),Kc()?(h.width=A,h.height=I,f=new xo(h)):f=new Ya(r),f.colorSpace=ts,m.value=f,o=!0,console.log(`[WebcamTexture] Webcam started: ${A}x${I}`)}catch(A){A instanceof DOMException?A.name==="NotAllowedError"?console.error("[WebcamTexture] Camera permission denied by user"):A.name==="NotFoundError"?console.error("[WebcamTexture] No camera found on this device"):A.name==="NotReadableError"?console.error("[WebcamTexture] Camera is already in use by another application"):console.error("[WebcamTexture] Camera error:",A.message):console.error("[WebcamTexture] Failed to start webcam:",A)}})(),t(()=>{Kc()&&r&&o&&!r.paused&&r.readyState>=2&&(p.drawImage(r,0,0,h.width,h.height),f.needsUpdate=!0)}),e(()=>{a=!0,i&&(i.getTracks().forEach(A=>A.stop()),i=null),r&&(r.srcObject=null,r=null),f.dispose(),o=!1});let y=n,x=X.x.div(X.y),b=s.objectFit.uniform.value,v;switch(b){case 1:{let A=fn(x.div(l),d(1));v=R(l.div(x).mul(A),A);break}case 2:v=R(1,1);break;case 3:{let A=fn(fn(x.div(l),d(1)),fn(X.x.div(c),X.y.div(u)));v=R(l.div(x).mul(A),A);break}case 4:{let A=fn(X.x.div(c),X.y.div(u));v=R(l.div(x).mul(A),A);break}default:{let A=St(x.div(l),d(1));v=R(l.div(x).mul(A),A);break}}let _=y.sub(R(.5)).div(v).add(R(.5)),M=s.mirror.uniform,T=R(ar(M,d(1).sub(_.x),_.x),d(1).sub(_.y)),w=m.sample(T),S=or(or(T.x.lessThan(0),T.x.greaterThan(1)),or(T.y.lessThan(0),T.y.greaterThan(1)));return F(w.rgb,ar(S,d(0),w.a))}};var EU=d(Math.PI*2),RU=d(.15),NU=d(.5),PU=d(.05),IU=d(.95),nX=d(.7),DU=d(10),sX=Ne(([s])=>ct(ue(R(Nt(s,R(127.1,311.7)),Nt(s,R(269.5,183.3)))).mul(d(43758.5453)))),iX=s=>({f1:0,f2:1,f2MinusF1:2,f1PlusF2:3,f1TimesF2:4})[s]??0,rX=s=>({euclidean:0,manhattan:1,chebyshev:2})[s]??0,FU={name:"WorleyNoise",category:"Textures",description:"Cellular noise field \u2014 distance-based, with selectable feature combinations and fractal octaves",props:{colorA:{default:"#ffffff",transform:_e,description:"Color where the noise field is low (typically near cell centers)",ui:{type:"color",label:"Color A (Low)",group:"Colors"}},colorB:{default:"#000000",transform:_e,description:"Color where the noise field is high (typically near cell boundaries)",ui:{type:"color",label:"Color B (High)",group:"Colors"}},colorSpace:{default:"linear",transform:Ut,compileTime:!0,description:"Color space for color interpolation",ui:{type:"select",options:Ft,label:"Color Space",group:"Colors"}},scale:{default:6,description:"Number of cells across the canvas at the base octave",ui:{type:["range","map"],min:1,max:30,step:.5,label:"Scale",group:"Effect"}},mode:{default:"f1",transform:iX,compileTime:!0,description:"Field type. F1 = distance to nearest point. F2 = distance to second-nearest. F2 \u2212 F1 emphasises cell boundaries.",ui:{type:"select",options:[{label:"F1 (Cells)",value:"f1"},{label:"F2 (Wider Cells)",value:"f2"},{label:"F2 \u2212 F1 (Edges)",value:"f2MinusF1"},{label:"F1 + F2",value:"f1PlusF2"},{label:"F1 \xD7 F2",value:"f1TimesF2"}],label:"Mode",group:"Effect"}},distance:{default:"euclidean",transform:rX,compileTime:!0,description:"Distance metric. Euclidean = round cells. Manhattan = diamond. Chebyshev = square.",ui:{type:"select",options:[{label:"Euclidean",value:"euclidean"},{label:"Manhattan",value:"manhattan"},{label:"Chebyshev",value:"chebyshev"}],label:"Distance",group:"Effect"}},octaves:{default:1,compileTime:!0,description:"Number of fractal layers stacked at progressively finer scales",ui:{type:"range",min:1,max:4,step:1,label:"Octaves",group:"Effect"}},lacunarity:{default:2,description:"Scale multiplier between octaves (only active when Octaves > 1)",ui:{type:["range","map"],min:1.5,max:4,step:.1,label:"Lacunarity",group:"Effect",condition:{octaves:[2,3,4]}}},persistence:{default:.5,description:"Amplitude multiplier between octaves (only active when Octaves > 1)",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Persistence",group:"Effect",condition:{octaves:[2,3,4]}}},jitter:{default:1,description:"How much each cell's point drifts inside its cell. 0 = rigid grid (banded look), 1 = fully random.",ui:{type:["range","map"],min:0,max:1,step:.05,label:"Jitter",group:"Effect"}},contrast:{default:1,description:"Steepness of the gradient between low and high regions",ui:{type:["range","map"],min:.25,max:4,step:.05,label:"Contrast",group:"Effect"}},balance:{default:0,description:"Shifts the gradient midpoint. Negative pulls the field toward Color A, positive toward Color B.",ui:{type:["range","map"],min:-1,max:1,step:.05,label:"Balance",group:"Effect"}},seed:{default:0,description:"Random seed \u2014 shifts the cell pattern without changing its overall structure",ui:{type:["range","map"],min:0,max:100,step:1,label:"Seed",group:"Effect"}},speed:{default:.5,description:"Animation speed \u2014 how fast each cell's point drifts",ui:{type:"range",min:0,max:5,step:.1,label:"Speed",group:"Animation"}}},fragmentNode:s=>{let{uniforms:e}=s,t=e.colorA.uniform,n=e.colorB.uniform,i=e.colorSpace.uniform.value,r=e.mode.uniform.value,o=e.distance.uniform.value,a=Math.max(1,Math.min(4,Math.round(e.octaves.uniform.value))),l=cn(s,e.speed),c=X.x.div(X.y),u=R(H.x.mul(c),H.y),h=e.scale.uniform,p=e.seed.uniform,f=e.jitter.uniform,m=e.lacunarity.uniform,g=e.persistence.uniform,y=1.5;r===1?y=1:r===2?y=2.5:r===3?y=.6:r===4&&(y=2),o===1?y*=.7:o===2&&(y*=1.4);let x=o===0,b=r!==0,v=Ne(([S,A,I])=>{let N=A.mul(nX),P=Ht(S),B=ct(S),U=DU,D=DU;for(let k=-1;k<=1;k++)for(let W=-1;W<=1;W++){let $=R(d(W),d(k)),ie=sX(P.add($).add(I)),xe=ie.x.add(ue(A.add(ie.x.mul(EU))).mul(RU)),he=ie.y.add(ke(N.add(ie.y.mul(EU))).mul(RU)),Pe=ve(NU,xe.clamp(PU,IU),f),Ge=ve(NU,he.clamp(PU,IU),f),He=$.add(R(Pe,Ge)),oe=B.sub(He),be;o===1?be=bt(oe.x).add(bt(oe.y)):o===2?be=St(bt(oe.x),bt(oe.y)):be=T3(oe),b?(D=fn(D,St(be,U)),U=fn(U,be)):U=fn(U,be)}let L;return x?r===1?L=yn(D):r===2?L=yn(D).sub(yn(U)):r===3?L=yn(U).add(yn(D)):r===4?L=yn(U.mul(D)):L=yn(U):r===1?L=D:r===2?L=D.sub(U):r===3?L=U.add(D):r===4?L=U.mul(D):L=U,L}),_=d(0),M=d(0),T=d(1),w=h;for(let S=0;S<a;S++){let A=v(u.mul(w),l.add(d(S*17)),p.add(d(S*31)));_=_.add(A.mul(T)),M=M.add(T),T=T.mul(g),w=w.mul(m)}return wt(t,n,ht(_.div(M.max(d(1e-4))).mul(d(y)).mul(d(2)).sub(d(1)).mul(e.contrast.uniform).add(e.balance.uniform).mul(d(.5)).add(d(.5)),d(0),d(1)),i)}};var UU=Array.from({length:32},(s,e)=>{let t=(e/31-.5)*2;return Math.exp(-.5*t*t/.64)}),oX=UU.reduce((s,e)=>s+e),aX=UU.map(s=>s/oX),LU={name:"ZoomBlur",category:"Blurs",description:"Radial zoom blur expanding from a center point",requiresRTT:!0,requiresChild:!0,props:{intensity:{default:30,description:"Intensity of the zoom blur effect",ui:{type:["range","map"],min:0,max:100,step:1,label:"Intensity",group:"Effect"}},center:{default:{x:.5,y:.5},transform:ft,description:"Center point of the zoom blur",ui:{type:"position",label:"Center",group:"Position"}}},fragmentNode:({uniforms:s,childNode:e,onCleanup:t})=>{if(!e)return F(0,0,0,0);let n=_t(e);t(()=>{n?.renderTarget?.dispose&&n.renderTarget.dispose()});let i=R(s.center.uniform.x,s.center.uniform.y.oneMinus()),r=s.intensity.uniform.mul(.01),o=X.x.div(X.y);return Ne(()=>{let a=H,l=F(0).toVar(),c=a.sub(i),u=R(c.x.mul(o),c.y);for(let h=0;h<32;h++){let p=d(1).add(r.mul(h/31)),f=u.div(p),m=R(f.x.div(o),f.y).add(i);l.assign(l.add(n.sample(m).mul(d(aX[h]))))}return It(l)})()}};var lX=()=>{let s={};return Object.entries({AngularBlur:GI,Ascii:cr,Aurora:QI,BarShift:eD,Beam:tD,Blob:nD,Blur:iD,BrickPattern:rD,BrightnessContrast:oD,Bulge:aD,ChannelBlur:lD,Checkerboard:cD,Chevron:uD,ChromaFlow:dD,ChromaticAberration:hD,Circle:pD,ColorWheel:fD,ConcentricSpin:mD,ConicGradient:gD,ContourLines:xD,Crescent:yD,Cross:bD,CRTScreen:vD,Crystal:SD,CursorRipples:TD,CursorTrail:MD,DiamondGradient:wD,DiffuseBlur:AD,Dither:CD,DOMTexture:ED,DotGrid:RD,DropShadow:ID,Duotone:DD,Ellipse:FD,Emboss:LD,Exposure:BD,FallingLines:OD,FilmGrain:kD,FloatingParticles:GD,Flower:HD,FlowField:WD,FlowingGradient:$D,FlutedGlass:qD,Fog:jD,Form3D:KD,FractalNoise:QD,Glass:nF,GlassTiles:sF,Glitch:iF,Glow:rF,Godrays:oF,Grayscale:aF,Grid:lF,GridDistortion:uF,Group:dF,Halftone:hF,HexGrid:pF,HueShift:fF,ImageTexture:mF,Invert:gF,Kaleidoscope:xF,LensFlare:yF,LinearBlur:vF,LinearGradient:_F,Liquify:SF,Marble:TF,Mirror:MF,MultiPointGradient:wF,Neon:EF,Paper:RF,Perspective:NF,Pixelate:PF,Plasma:IF,PolarCoordinates:DF,Polygon:FF,Posterize:UF,ProgressiveBlur:LF,RadialGradient:BF,RectangularCoordinates:OF,ReflectivePlane:kF,Ring:VF,Ripples:zF,RoundedRect:GF,Saturation:HF,Sharpness:WF,Shatter:$F,SimplexNoise:qF,SineWave:XF,Smoke:KF,SmokeFill:QF,Solarize:eU,SolidColor:tU,Spherize:nU,Spiral:sU,Star:iU,Strands:rU,Stretch:oU,Stripes:aU,StudioBackground:lU,SunBurst:cU,Swirl:uU,ThinFilm:hU,TiltShift:pU,Tint:fU,Trapezoid:mU,Tritone:gU,Truchet:xU,Twirl:yU,Vesica:bU,VHS:vU,Vibrance:_U,VideoTexture:SU,Vignette:TU,Voronoi:MU,WaveDistortion:wU,Weave:AU,WebcamTexture:CU,WorleyNoise:FU,ZoomBlur:LU}).forEach(([t,n])=>{let i={};n.props&&Object.entries(n.props).forEach(([r,o])=>{o.ui&&(i[r]={ui:o.ui,default:o.default,description:o.description})}),s[n.name]={name:n.name,fileName:t,category:n.category||"Uncategorized",definition:n,propsMetadata:i}}),s},BU=lX();function Ow(){return Object.values(BU)}function cX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(e.rgb,n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}var OU=s=>de(s.x.mul(1.2249401).sub(s.y.mul(.2249404)).sub(s.z.mul(0)),s.x.mul(-.0420569).add(s.y.mul(1.0420571)).add(s.z.mul(0)),s.x.mul(-.0196376).sub(s.y.mul(.0786361)).add(s.z.mul(1.0982735))),uX=s=>de(s.x.mul(.8224621).add(s.y.mul(.177538)).add(s.z.mul(0)),s.x.mul(.0331941).add(s.y.mul(.9668058)).add(s.z.mul(0)),s.x.mul(.0170826).add(s.y.mul(.0723974)).add(s.z.mul(.9105199))),kU=s=>{let e=s.x,t=s.y,n=s.z,i=e.mul(.4122214708).add(t.mul(.5363325363)).add(n.mul(.0514459929)),r=e.mul(.2119034982).add(t.mul(.6806995451).add(n.mul(.1073969566))),o=e.mul(.0883024619).add(t.mul(.2817188376)).add(n.mul(.6299787005)),a=Yi(i).mul(Pt(bt(i),d(1/3))),l=Yi(r).mul(Pt(bt(r),d(1/3))),c=Yi(o).mul(Pt(bt(o),d(1/3)));return de(a.mul(.2104542553).add(l.mul(.793617785)).sub(c.mul(.0040720468)),a.mul(1.9779984951).sub(l.mul(2.428592205)).add(c.mul(.4505937099)),a.mul(.0259040371).add(l.mul(.7827717662)).sub(c.mul(.808675766)))},dX=s=>{let e=s.x,t=s.y,n=s.z,i=e.add(t.mul(.3963377774)).add(n.mul(.2158037573)),r=e.sub(t.mul(.1055613458)).sub(n.mul(.0638541728)),o=e.sub(t.mul(.0894841775)).sub(n.mul(1.291485548)),a=Pt(i,d(3)),l=Pt(r,d(3)),c=Pt(o,d(3));return de(a.mul(4.0767416621).sub(l.mul(3.3077115913)).add(c.mul(.2309699292)),a.mul(-1.2684380046).add(l.mul(2.6097574011)).sub(c.mul(.3413193965)),a.mul(-.0041960863).sub(l.mul(.7034186147)).add(c.mul(1.707614701)))},VU=s=>{let e=s.x,t=s.y,n=s.z;return de(e,yn(t.mul(t).add(n.mul(n))),Jn(n,t))},hX=s=>{let e=s.x,t=s.y,n=s.z;return de(e,t.mul(ke(n)),t.mul(ue(n)))};function pX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=OU(de(s.r,s.g,s.b)),o=OU(de(e.r,e.g,e.b)),a=kU(r),l=kU(o),c=VU(a);return F(uX(dX(hX(un($e(VU(l),n),$e(c,$e(s.a,Qt(1,n))))))),i)}var zU=s=>de(s.x.mul(1.2249401).sub(s.y.mul(.2249404)).sub(s.z.mul(0)),s.x.mul(-.0420569).add(s.y.mul(1.0420571)).add(s.z.mul(0)),s.x.mul(-.0196376).sub(s.y.mul(.0786361)).add(s.z.mul(1.0982735))),fX=s=>de(s.x.mul(.8224621).add(s.y.mul(.177538)).add(s.z.mul(0)),s.x.mul(.0331941).add(s.y.mul(.9668058)).add(s.z.mul(0)),s.x.mul(.0170826).add(s.y.mul(.0723974)).add(s.z.mul(.9105199))),GU=s=>{let e=s.x,t=s.y,n=s.z,i=e.mul(.4122214708).add(t.mul(.5363325363)).add(n.mul(.0514459929)),r=e.mul(.2119034982).add(t.mul(.6806995451).add(n.mul(.1073969566))),o=e.mul(.0883024619).add(t.mul(.2817188376)).add(n.mul(.6299787005)),a=Yi(i).mul(Pt(bt(i),d(1/3))),l=Yi(r).mul(Pt(bt(r),d(1/3))),c=Yi(o).mul(Pt(bt(o),d(1/3)));return de(a.mul(.2104542553).add(l.mul(.793617785)).sub(c.mul(.0040720468)),a.mul(1.9779984951).sub(l.mul(2.428592205)).add(c.mul(.4505937099)),a.mul(.0259040371).add(l.mul(.7827717662)).sub(c.mul(.808675766)))},mX=s=>{let e=s.x,t=s.y,n=s.z,i=e.add(t.mul(.3963377774)).add(n.mul(.2158037573)),r=e.sub(t.mul(.1055613458)).sub(n.mul(.0638541728)),o=e.sub(t.mul(.0894841775)).sub(n.mul(1.291485548)),a=Pt(i,d(3)),l=Pt(r,d(3)),c=Pt(o,d(3));return de(a.mul(4.0767416621).sub(l.mul(3.3077115913)).add(c.mul(.2309699292)),a.mul(-1.2684380046).add(l.mul(2.6097574011)).sub(c.mul(.3413193965)),a.mul(-.0041960863).sub(l.mul(.7034186147)).add(c.mul(1.707614701)))};function gX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=zU(de(s.r,s.g,s.b)),o=zU(de(e.r,e.g,e.b)),a=GU(r);return F(fX(mX(un($e(GU(o),n),$e(a,$e(s.a,Qt(1,n)))))),i)}function xX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e($e(s.rgb,e.rgb),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function yX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(Qt(1,$e(Qt(1,s.rgb),Qt(1,e.rgb))),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function bX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(un(s.rgb,e.rgb),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function vX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(ve($e(2,$e(s.rgb,e.rgb)),Qt(1,$e(2,$e(Qt(1,s.rgb),Qt(1,e.rgb)))),ln(.5,s.rgb)),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function _X(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(bt(Qt(s.rgb,e.rgb)),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function SX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(ve(s.rgb,fn(pl(s.rgb,Qt(1,e.rgb)),1),ln(.001,Qt(1,e.rgb))),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function TX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(Qt(un(s.rgb,e.rgb),$e(2,$e(s.rgb,e.rgb))),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function Jc(s){return un(un($e(s.r,.2126),$e(s.g,.7152)),$e(s.b,.0722))}function MX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=Qt(Jc(s.rgb),Jc(e.rgb));return F(un($e(un(e.rgb,r),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function wX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=Jc(s.rgb),o=Jc(e.rgb).div(un(r,1e-4));return F(un($e($e(s.rgb,o),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function AX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(fn(s.rgb,e.rgb),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function CX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(St(s.rgb,e.rgb),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function EX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(ve(F(0,0,0,1).rgb,St(Qt(1,Qt(1,s.rgb).div(un(e.rgb,1e-4))),0),ln(1e-4,e.rgb)),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function RX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(St(un(un(s.rgb,e.rgb),-1),0),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function NX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=un($e(2,$e(s.rgb,e.rgb)),$e($e(s.rgb,s.rgb),Qt(1,$e(2,e.rgb)))),o=yn(s.rgb);return F(un($e(ve(r,un($e(2,$e(s.rgb,Qt(1,e.rgb))),$e(o,Qt($e(2,e.rgb),1))),ln(.5,e.rgb)),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function PX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n)));return F(un($e(ve($e(2,$e(s.rgb,e.rgb)),Qt(1,$e(2,$e(Qt(1,s.rgb),Qt(1,e.rgb)))),ln(.5,e.rgb)),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function IX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=Jc(s.rgb),o=Jc(e.rgb),a=s.rgb.sub(r),l=e.rgb.sub(o),c=a.length();return F(un($e(un($e(l.normalize(),c),r),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}function DX(s,e,t=1){let n=$e(e.a,t),i=un(n,$e(s.a,Qt(1,n))),r=Jc(s.rgb),o=Jc(e.rgb),a=s.rgb.sub(r),l=e.rgb.sub(o);return F(un($e(un($e(a.normalize(),l.length()),r),n),$e(s.rgb,$e(s.a,Qt(1,n)))),i)}var HU={normal:cX,"normal-oklch":pX,"normal-oklab":gX,multiply:xX,screen:yX,linearDodge:bX,overlay:vX,difference:_X,colorDodge:SX,exclusion:TX,color:MX,luminosity:wX,darken:AX,lighten:CX,colorBurn:EX,linearBurn:RX,softLight:NX,hardLight:PX,hue:IX,saturation:DX};function tp(s,e,t="normal",n=1){return(HU[t]||HU.normal)(s,e,n)}function FX(s,e){let t=$e(s.a,e.a);return F(s.rgb,t)}function UX(s,e){let t=Qt(1,e.a),n=$e(s.a,t);return F(s.rgb,n)}function LX(s,e){let t=de(.2126,.7152,.0722),n=Nt(e.rgb,t),i=$e(s.a,n);return F(s.rgb,i)}function BX(s,e){let t=de(.2126,.7152,.0722),n=Qt(1,Nt(e.rgb,t)),i=$e(s.a,n);return F(s.rgb,i)}var WU={alpha:FX,alphaInverted:UX,luminance:LX,luminanceInverted:BX};function OX(s,e,t="alpha"){return(WU[t]||WU.alpha)(s,e)}var kX=class{frameTimesMs=[];frameTimesIndex=0;frameTimesCount=0;maxSamples=60;targetFrameTime=16.67;jankFrameCount=0;totalFrameCount=0;memorySnapshots=[];memorySnapshotIndex=0;maxMemorySnapshots=300;nodeCount=0;rttNodeCount=0;lastCpuTime=null;lastGpuTime=null;isRendering=!1;lastFrameTimestamp=0;frameIntervals=[];frameIntervalsIndex=0;frameIntervalsCount=0;pushToCircularBuffer(s,e,t,n,i){return s.length<i?(s.push(e),{index:s.length,count:s.length}):(s[t%i]=e,{index:t+1,count:i})}getBufferValues(s,e){return e<=s.length?s.slice(0,e):s}recordFrame(s){let e=this.pushToCircularBuffer(this.frameTimesMs,s,this.frameTimesIndex,this.frameTimesCount,this.maxSamples);this.frameTimesIndex=e.index,this.frameTimesCount=e.count,this.totalFrameCount++,s>this.targetFrameTime&&this.jankFrameCount++;let t=performance.now();if(this.lastFrameTimestamp>0){let n=t-this.lastFrameTimestamp,i=this.pushToCircularBuffer(this.frameIntervals,n,this.frameIntervalsIndex,this.frameIntervalsCount,this.maxSamples);this.frameIntervalsIndex=i.index,this.frameIntervalsCount=i.count}this.lastFrameTimestamp=t,this.recordMemorySnapshot()}recordCpuTime(s){this.lastCpuTime=s}recordGpuTime(s){this.lastGpuTime=s}updateNodeCounts(s,e){this.nodeCount=s,this.rttNodeCount=e}setRendering(s){this.isRendering=s}recordMemorySnapshot(){if(!performance.memory)return;let s=performance.now(),e=performance.memory.usedJSHeapSize;if(this.memorySnapshots.length<this.maxMemorySnapshots)this.memorySnapshots.push({time:s,bytes:e});else{let t=this.memorySnapshots[this.memorySnapshotIndex];t.time=s,t.bytes=e,this.memorySnapshotIndex=(this.memorySnapshotIndex+1)%this.maxMemorySnapshots}}calculateMemoryGrowthRate(){if(this.memorySnapshots.length<2)return null;let s=this.memorySnapshots.length,e=s<this.maxMemorySnapshots?0:this.memorySnapshotIndex,t=s<this.maxMemorySnapshots?s-1:(this.memorySnapshotIndex-1+s)%s,n=this.memorySnapshots[e],i=this.memorySnapshots[t],r=(i.time-n.time)/1e3;return r<=0?null:(i.bytes-n.bytes)/(1024*1024)/r}calculateStdDev(s){if(s.length===0)return 0;let e=s.reduce((n,i)=>n+i,0)/s.length,t=0;for(let n=0;n<s.length;n++){let i=s[n]-e;t+=i*i}return Math.sqrt(t/s.length)}sortBuffer=[];calculateP99(s){let e=s.length;if(e===0)return 0;for(;this.sortBuffer.length<e;)this.sortBuffer.push(0);for(let n=0;n<e;n++)this.sortBuffer[n]=s[n];for(let n=1;n<e;n++){let i=this.sortBuffer[n],r=n-1;for(;r>=0&&this.sortBuffer[r]>i;)this.sortBuffer[r+1]=this.sortBuffer[r],r--;this.sortBuffer[r+1]=i}let t=Math.floor(e*.99);return this.sortBuffer[Math.min(t,e-1)]}calculateComplexityScore(){return this.nodeCount+this.rttNodeCount*10}calculateIntensityScore(){let s=this.getBufferValues(this.frameTimesMs,this.frameTimesCount),e=s.length;if(e===0)return{score:0,label:"N/A"};let t=s.reduce((u,h)=>u+h,0)/e,n=Math.min(t/16.67*100,100),i=this.calculateComplexityScore(),r=Math.min(i/100*100,100),o=0;this.lastGpuTime!==null&&(o=Math.min(this.lastGpuTime/16.67*100,100));let a=this.lastGpuTime!==null?{frame:.4,gpu:.4,complexity:.2}:{frame:.7,gpu:0,complexity:.3},l=Math.round(n*a.frame+o*a.gpu+r*a.complexity),c;return l<=20?c="Very Light":l<=40?c="Light":l<=60?c="Medium":l<=80?c="Heavy":c="Very Heavy",{score:Math.min(l,100),label:c}}getStats(s){let e=this.getBufferValues(this.frameTimesMs,this.frameTimesCount),t=this.getBufferValues(this.frameIntervals,this.frameIntervalsCount),n=e.length,i=t.length>0?1e3/(t.reduce((v,_)=>v+_,0)/t.length):0,r=n>0?e.reduce((v,_)=>v+_,0)/n:0,o=n>0?Math.min(...e):0,a=n>0?Math.max(...e):0,l=this.calculateP99(e),c=this.calculateStdDev(e),u=this.totalFrameCount>0?this.jankFrameCount/this.totalFrameCount*100:0,h=performance.memory,p=h?h.usedJSHeapSize/(1024*1024):null,f=this.calculateMemoryGrowthRate(),m=r>0?r/this.targetFrameTime*100:0,g=s?.render?.calls??null,y=s?.programs?.length??null,x=s?.memory?.textures??null,b=this.calculateIntensityScore();return{fps:Math.round(i),avgFrameTime:Math.round(r*100)/100,minFrameTime:Math.round(o*100)/100,maxFrameTime:Math.round(a*100)/100,p99FrameTime:Math.round(l*100)/100,stdDevFrameTime:Math.round(c*100)/100,jankCount:this.jankFrameCount,jankPercent:Math.round(u*10)/10,nodeCount:this.nodeCount,rttNodeCount:this.rttNodeCount,complexityScore:this.calculateComplexityScore(),memoryUsedMB:p!==null?Math.round(p*100)/100:null,memoryGrowthRate:f!==null?Math.round(f*1e3)/1e3:null,cpuTime:this.lastCpuTime!==null?Math.round(this.lastCpuTime*100)/100:null,gpuTime:this.lastGpuTime!==null?Math.round(this.lastGpuTime*100)/100:null,budgetUsed:Math.round(m*10)/10,drawCalls:g,shaderPrograms:y,textureCount:x,intensityScore:b.score,intensityLabel:b.label,isRendering:this.isRendering}}reset(){this.frameTimesMs.length=0,this.frameTimesIndex=0,this.frameTimesCount=0,this.frameIntervals.length=0,this.frameIntervalsIndex=0,this.frameIntervalsCount=0,this.lastFrameTimestamp=0,this.jankFrameCount=0,this.totalFrameCount=0,this.memorySnapshots.length=0,this.memorySnapshotIndex=0,this.sortBuffer.length=0,this.lastCpuTime=null,this.lastGpuTime=null}},kw=s=>s?s.offsetX!==0||s.offsetY!==0||s.rotation!==0||s.scale!==1||s.anchorX!==.5||s.anchorY!==.5:!1,VX=(s,e,t,n,i,r,o,a)=>{let l=n.mul(Qs).div(d(180)),c=ke(l),u=ue(l),h=R(r,o),p=s.sub(h).div(i),f=R(p.x.mul(a),p.y),m=R(f.x.mul(c).sub(f.y.mul(u)),f.x.mul(u).add(f.y.mul(c)));return R(m.x.div(a),m.y).sub(R(e,t)).add(h)},zX=new Map([[_e,kI],[ft,VI]]);function $U(s,e,t){let n={};return Object.entries(s.props).forEach(([i,r])=>{let o=e[i],a=o;if(r.transform){let c=r.transform(o);a=c?.node??c}if(a==null&&(a=r.default,r.transform&&a!==null&&a!==void 0)){let c=r.transform(a);a=c?.node??c}a==null&&(console.error(`[Shaders] Uniform "${i}" is null/undefined after fallback. PropConfig:`,{propName:i,initialValue:o,default:r.default,hasTransform:!!r.transform}),a=0);let l=ee(a).setName(`${i}_${t}`.replace(/[^a-zA-Z0-9_]/g,"_"));typeof a=="string"&&l.value===null&&(l.value=a),n[i]={uniform:l,transform:r.transform||void 0,compileTime:r.compileTime||!1,...r.compileTimeWhen?{compileTimeWhen:r.compileTimeWhen,_lastCompiledValue:o??r.default}:{}}}),n}function GX(s,e){if(s?.transform){let t=zX.get(s.transform);if(t){let n=t(e);s.uniform.value&&typeof s.uniform.value.copy=="function"?s.uniform.value.copy(n):s.uniform.value=n}else{let n=s.transform(e),i=n?.data??n;s.uniform.value&&typeof s.uniform.value.copy=="function"&&i&&typeof i.copy=="function"?s.uniform.value.copy(i):s.uniform.value=i}}else s.uniform.value=e}var HX=(()=>{let s=0,e=new Set,t=o=>{e.forEach(a=>{try{a.onMouseMove(o)}catch(l){console.error("[Shaders] Error in mouse move handler:",l)}})},n=o=>{e.forEach(a=>{try{a.onTouchMove(o)}catch(l){console.error("[Shaders] Error in touch move handler:",l)}})},i=()=>{e.forEach(o=>{try{o.onMouseUp()}catch(a){console.error("[Shaders] Error in mouse up handler:",a)}})},r=()=>{e.forEach(o=>{try{o.onTouchEnd()}catch(a){console.error("[Shaders] Error in touch end handler:",a)}})};return{register(o){return e.add(o),s++,s===1&&(window.addEventListener("mousemove",t),window.addEventListener("touchmove",n),window.addEventListener("mouseup",i),window.addEventListener("touchend",r)),()=>{e.delete(o),s--,s===0&&(window.removeEventListener("mousemove",t),window.removeEventListener("touchmove",n),window.removeEventListener("mouseup",i),window.removeEventListener("touchend",r))}}}})(),Vw=(s,e,t,n,i,r)=>{if(n===0&&i===0)return[t,0];let o=200*Math.pow(.01,n),a=2*Math.sqrt(o)*(1-i*.85),l=e+(o*(t-s)-a*e)*r;return[s+l*r,l]};function qU(){let s=null,e,t=null,n=!1,i,r,o,a,l={nodes:new Map,rootId:null,idToNodeId:new Map},c=new Map,u=null,h=null,p=null,f=!1,m=!1,g="p3-linear",y="linear",x=!1,b=null,v=!1,_=!0,M=!1,T=0,w=0,S=0,A=0,I=!1,N=.5,P=.5,B=!1,U=null,D=!1,L=!1,k=null,W=null,$=null,ie=null,xe=8192,he=0,Pe=0,Ge=!0,He=new kX,oe=[],be=!1,Te=null,Fe=!1,ze=!1,fe=null,Xe=!1,Re=j=>{if(!Xe){Xe=!0;try{Fa()}catch{}fe&&queueMicrotask(()=>{try{fe?.(j)}catch(ae){console.error("[Shaders] onDeviceLost callback threw:",ae)}})}},Y=null,ye=new Set,Me=new Set,Le=0,Ye=new Set,tt=new Set,et=new Set,Qe=new Set,nt=new Set,J=new Set,Ie={deltaTime:0,pointer:{x:.5,y:.5},pointerActive:!1,dimensions:{width:0,height:0}},Ee=null,O=!1,E=(j,ae)=>{let re=e?.getPixelRatio?.()??1,pe=Math.max(1,Math.floor(xe/re)-1),vt=Math.min(j,window.innerWidth,pe),it=Math.min(ae,window.innerHeight,pe),At=Math.min(vt/j,it/ae,1);return{width:Math.max(1,Math.round(j*At)),height:Math.max(1,Math.round(ae*At))}},z=(j,ae)=>{j<=0||ae<=0||j===he&&ae===Pe||(he=j,Pe=ae,Ee={width:j,height:ae},O||(O=!0,requestAnimationFrame(()=>{if(O=!1,!Ee)return;let re=Ee;Ee=null;let{width:pe,height:vt}=E(re.width,re.height);T=pe,w=vt,x||(x=!0,l.nodes.size>0&&Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()}))),e.setSize(pe,vt,!1);let it=pe/vt,At=2,yt=At*it;i.left=-yt/2,i.right=yt/2,i.top=At/2,i.bottom=-At/2,i.updateProjectionMatrix(),o.scale.set(yt,At,1),l.nodes.forEach(je=>{je.transformUniforms?.aspectRatio&&(je.transformUniforms.aspectRatio.value=it),je.resizeCallbacks.forEach(Ct=>{try{Ct({width:pe,height:vt})}catch(rt){console.error("Error in resize callback:",rt)}})}),S=0,Hs()})))},q=()=>f&&!!e&&!!r&&!!i&&!!a&&T>0&&w>0,Q=j=>{if(!e||!i||!o)return;let ae=j[0];if(!ae)return;let re,pe;if(ae.contentBoxSize){let vt=Array.isArray(ae.contentBoxSize)?ae.contentBoxSize[0]:ae.contentBoxSize;vt?(re=Math.round(vt.inlineSize),pe=Math.round(vt.blockSize)):(re=Math.round(ae.contentRect.width),pe=Math.round(ae.contentRect.height))}else re=Math.round(ae.contentRect.width),pe=Math.round(ae.contentRect.height);re===0||pe===0||z(re,pe)},Se=j=>{let ae=j[0];ae&&(v=ae.isIntersecting)},Ae=(j,ae)=>{if(j.size!==ae.size)return!1;for(let re of j)if(!ae.has(re))return!1;return!0},K=()=>{et.clear(),Qe.clear(),nt.clear(),J.clear();for(let[j,ae]of l.nodes){ae.beforeRenderCallbacks.length>0&&et.add(j),ae.afterRenderCallbacks.length>0&&Qe.add(j),ae.computeGetNodes&&nt.add(j);let re=ae.mouseDriverState,pe=ae.autoAnimateState,vt=!!re&&Object.keys(re).length>0,it=!!pe&&Object.keys(pe).length>0;(vt||it)&&J.add(j)}},Z=j=>{Le++;let ae=_t(j);return Ye.add(ae),ae},me=()=>{tt.forEach(j=>{try{j?.renderTarget?.dispose&&j.renderTarget.dispose()}catch{}}),tt.clear()},Ze=j=>{let ae=de(j.x,j.y,j.z),re=j.w,pe=ae.mul(16),vt=pe.mul(pe.mul(.15).add(.05)).add(.004),it=pe.mul(pe.mul(.15).add(.5)).add(.06),At=vt.div(it).sub(.02/.3);return F(At.x,At.y,At.z,re)},Be=j=>{let ae=de(j.x,j.y,j.z),re=j.w,pe=ae.div(ae.add(.155)).mul(1.019);return F(pe.x,pe.y,pe.z,re)},Je=j=>{y=j,e&&(e.toneMapping={linear:Bs,reinhard:Tu,cineon:Mu,aces:wu,agx:Au,neutral:Cu}[j]??Bs)},gt=!1,xt=()=>{if(!(!l.rootId||!a||D)&&l.nodes.get(l.rootId)){if(T===0||w===0){gt||(gt=!0,requestAnimationFrame(()=>{gt=!1,T>0&&w>0&&xt()}));return}D=!0;try{tt=new Set(Ye),Ye.clear();let j=new Set;Me.clear(),l.nodes.forEach((re,pe)=>{(re.requiresRTT||re.transformRTTActive)&&Me.add(pe)}),Le=0;let ae=Gs(l.rootId,new Set,j);if(ae&&a){let re=!Ae(ye,j),pe=ae;y==="hable"?pe=Ze(ae):y==="unreal"&&(pe=Be(ae));let vt=a.fragmentNode!==pe;if(re||I||vt){me();try{a.dispose(),e.renderTarget&&e.renderTarget.dispose()}catch{}let it=new Dh({transparent:!0});it.fragmentNode=pe,it.needsUpdate=!0,o.material=it,a=it,I=!1,ye=j,!Fe&&j.size>0&&(ze=!0)}}}catch(j){console.error("Error composing shader tree:",j)}finally{D=!1,L=!1}K(),u||Hs()}},Dt=j=>{let ae=c.get(j);if(!ae)return[];let re=[];for(let pe of ae){let vt=l.nodes.get(pe);vt&&re.push(vt)}return re},se=j=>j.replace(/[^a-zA-Z0-9_]/g,"_"),st=j=>{let ae=se(j);for(let[re,pe]of l.nodes.entries())if(pe.metadata.id===ae)return re;return null},De=(j,ae,re,pe,vt)=>{if(!ae.metadata.mask?.source)return j;let it=ae.metadata.mask.source,At=st(it);if(!At)return j;if(pe.has(At))return console.error("Uh oh, looks like you've got a circular dependency in your shader masks."),j;let yt=new Set(pe);yt.add(re);let je=Gs(At,yt),Ct=je;vt&&(Ct=Z(je).sample(vt));let rt=ae.metadata.mask.type||"alpha";return OX(j,Ct,rt)},dt=(j,ae,re,pe,vt)=>{let it=st(j.source);if(!it)return null;if(ae.has(it))return console.error(`[Shaders] Circular dependency detected in prop maps: node "${j.source}" is already being processed.`),null;let At=new Set(ae);At.add(re);let yt=Z(Gs(it,At)),je=yt.sample(vt??H),Ct;switch(j.channel){case"alpha":Ct=je.a;break;case"alphaInverted":Ct=je.a.oneMinus();break;case"luminanceInverted":Ct=Nt(je.rgb,de(.2126,.7152,.0722)).oneMinus();break;default:Ct=Nt(je.rgb,de(.2126,.7152,.0722));break}let rt=l.nodes.get(re);if(!rt)return null;rt.mapUniforms||(rt.mapUniforms={}),rt.mapUniforms[pe]?(rt.mapUniforms[pe].inputMin.value=j.inputMin,rt.mapUniforms[pe].inputMax.value=j.inputMax,rt.mapUniforms[pe].outputMin.value=j.outputMin,rt.mapUniforms[pe].outputMax.value=j.outputMax,rt.mapUniforms[pe].curve.value=j.curve??0,rt.mapUniforms[pe].sourceTexture=yt,rt.mapUniforms[pe].channel=j.channel):rt.mapUniforms[pe]={inputMin:ee(j.inputMin),inputMax:ee(j.inputMax),outputMin:ee(j.outputMin),outputMax:ee(j.outputMax),curve:ee(j.curve??0),sourceTexture:yt,channel:j.channel};let{inputMin:Sn,inputMax:sn,outputMin:at,outputMax:qn,curve:zt}=rt.mapUniforms[pe],rn=St(sn.sub(Sn),1e-4);return ve(at,qn,Pt(ht(Ct.sub(Sn).div(rn),0,1),Pt(d(2),zt.negate().mul(2))))},Et=(j,ae,re)=>{let pe=l.nodes.get(ae);if(!pe)return null;if(pe.mouseDriverState||(pe.mouseDriverState={}),!pe.mouseDriverState[re]){let vt=j.x===void 0||j.x==="mouse",it=j.y===void 0||j.y==="mouse",At=vt?N:j.x,yt=it?P:j.y,je=ee(new on(At,1-yt));pe.mouseDriverState[re]={currentX:At,currentY:yt,velocityX:0,velocityY:0,smoothedUniform:je}}return pe.mouseDriverState[re].smoothedUniform},ot=(j,ae,re)=>{let pe=l.nodes.get(ae);if(!pe)return null;if(pe.mouseDriverState||(pe.mouseDriverState={}),!pe.mouseDriverState[re]){let je=Math.max(.001,j.axis==="x"?N:P),Ct=ee(je);pe.mouseDriverState[re]={currentX:je,currentY:0,velocityX:0,velocityY:0,smoothedUniform:Ct}}pe.mapUniforms||(pe.mapUniforms={}),pe.mapUniforms[re]?(pe.mapUniforms[re].outputMin.value=j.outputMin,pe.mapUniforms[re].outputMax.value=j.outputMax,pe.mapUniforms[re].curve.value=j.curve??0):pe.mapUniforms[re]={inputMin:ee(0,"float"),inputMax:ee(1,"float"),outputMin:ee(j.outputMin,"float"),outputMax:ee(j.outputMax,"float"),curve:ee(j.curve??0,"float")};let{outputMin:vt,outputMax:it,curve:At}=pe.mapUniforms[re],yt=pe.mouseDriverState[re].smoothedUniform;return ve(vt,it,Pt(yt,Pt(d(2),At.negate().mul(2))))},Vt=(j,ae,re)=>{let pe=l.nodes.get(ae);return pe?(pe.autoAnimateState||(pe.autoAnimateState={}),pe.autoAnimateState[re]||(pe.autoAnimateState[re]={smoothedUniform:ee(j.outputMin,"float")}),pe.autoAnimateState[re].smoothedUniform):null},Lt=(j,ae,re,pe)=>{if(!ae||Object.keys(ae).length===0)return j;let vt={...j},it=l.nodes.get(re),At=it?.mapSampleUVsFunc?.(j)??{};for(let[yt,je]of Object.entries(ae)){let Ct=null;if(je.type==="map"){if(!(yt in vt))continue;Ct=dt(je,pe,re,yt,At[yt])}else if(je.type==="mouse-position"){Ct=Et(je,re,yt),Ct!==null&&yt in vt&&(vt[yt]={...vt[yt],uniform:Ct});continue}else if(je.type==="mouse"){if(!(yt in vt))continue;Ct=ot(je,re,yt)}else if(je.type==="auto-animate"){if(!(yt in vt))continue;Ct=Vt(je,re,yt)}if(Ct!==null&&yt in vt){let rt;if(je.type==="map"){let sn=it?.mapUniforms?.[yt];sn?.sourceTexture&&sn?.channel&&(rt={sourceTexture:sn.sourceTexture,channel:sn.channel,inputMin:sn.inputMin,inputMax:sn.inputMax,outputMin:sn.outputMin,outputMax:sn.outputMax,curve:sn.curve})}let Sn;je.type==="mouse"&&(Sn=()=>{let sn=it?.mouseDriverState?.[yt],at=it?.mapUniforms?.[yt];if(!sn||!at)return 0;let qn=sn.smoothedUniform.value,zt=at.outputMin.value,rn=at.outputMax.value,vs=Math.pow(2,-(at.curve.value*2));return zt+(rn-zt)*Math.pow(qn,vs)}),vt[yt]={...vt[yt],uniform:Ct,...rt?{mapComputeInfo:rt}:{},...Sn?{getCpuValue:Sn}:{}}}}return vt},zn=(j,ae)=>{if(!ae.metadata.transform||!ae.transformUniforms||!kw(ae.metadata.transform)&&!ae.transformRTTActive)return j;let re=Z(j),pe=VX(H,ae.transformUniforms.offsetX,ae.transformUniforms.offsetY,ae.transformUniforms.rotation,ae.transformUniforms.scale,ae.transformUniforms.anchorX,ae.transformUniforms.anchorY,ae.transformUniforms.aspectRatio);return En(pe,re.sample(pe),re,ae.transformUniforms.edges.value)},Rn=(j,ae)=>{if(j.computeOutputs=void 0,j.computeGetNodes=void 0,!(typeof window<"u"&&window.sessionStorage?.getItem("__shadersForceWebGL")==="1")&&j.computeNodeFunc&&e.backend?.isWebGPUBackend===!0)try{let re=j.computeNodeFunc(ae);if(re)return j.computeOutputs=re.outputs,j.computeGetNodes=re.getComputeNodes,re.outputs}catch(re){console.error(`Error initializing compute for node ${j.id}:`,re)}},Gs=(j,ae=new Set,re)=>{if(T===0||w===0)return F(0,0,0,0);let pe=l.nodes.get(j);if(!pe)return F(0,0,0,0);let vt=Ct=>{pe.cleanupCallbacks.push(Ct)},it=Ct=>{pe.beforeRenderCallbacks.push(Ct)},At=Ct=>{pe.afterRenderCallbacks.push(Ct)},yt=Ct=>{pe.resizeCallbacks.push(Ct)},je=Dt(j);if(je.length===0){pe.cleanupCallbacks.forEach(rt=>{try{rt()}catch(Sn){console.error("Error in cleanup callback:",Sn)}}),pe.cleanupCallbacks=[],pe.beforeRenderCallbacks=[],pe.afterRenderCallbacks=[],pe.resizeCallbacks=[];let Ct={uniforms:Lt(pe.uniforms??{},pe.metadata.maps,j,ae),childNode:void 0,onCleanup:vt,onBeforeRender:it,onAfterRender:At,onResize:yt,canvas:s,dimensions:{width:T,height:w},renderer:e,domCanvas:pe.domCanvas};return Ct.computeOutputs=Rn(pe,Ct),De(zn(pe.fragmentNodeFunc(Ct),pe),pe,j,ae)}else{let Ct=[...je].sort((rt,Sn)=>rt.metadata.renderOrder-Sn.metadata.renderOrder);if(pe.parentId===null){let rt;for(let sn=0;sn<Ct.length;sn++){let at=Ct[sn],qn;if(at.metadata.opacity===void 0?(qn=1,at.opacityUniform.value=qn):(qn=at.metadata.opacity,at.opacityUniform.value=qn),at.metadata.visible===!1)continue;re&&re.add(at.id);let zt=Dt(at.id).length>0,rn;if(zt)rn=Gs(at.id,ae,re);else{let vs=li=>{at.cleanupCallbacks.push(li)},Vn=li=>{at.beforeRenderCallbacks.push(li)},fi=li=>{at.afterRenderCallbacks.push(li)},Xr=li=>{at.resizeCallbacks.push(li)},Fo=rt;at.requiresRTT&&rt!==void 0&&(Fo=tp(F(0,0,0,0),rt,"normal",1)),at.cleanupCallbacks.forEach(li=>{try{li()}catch(nu){console.error("Error in cleanup callback:",nu)}}),at.cleanupCallbacks=[],at.beforeRenderCallbacks=[],at.afterRenderCallbacks=[],at.resizeCallbacks=[];let La={uniforms:Lt(at.uniforms??{},at.metadata.maps,at.id,ae),childNode:Fo,onCleanup:vs,onBeforeRender:Vn,onAfterRender:fi,onResize:Xr,canvas:s,dimensions:{width:T,height:w},renderer:e,domCanvas:at.domCanvas};La.computeOutputs=Rn(at,La),rn=De(zn(at.fragmentNodeFunc(La),at),at,at.id,ae)}at.requiresChild&&at.metadata.blendMode==="normal"&&!zt?rt=ve(rt||F(0,0,0,0),rn,at.opacityUniform):rt===void 0?pe.requiresRTT||qn!==1?rt=tp(F(1,1,1,0),rn,at.metadata.blendMode,at.opacityUniform):rt=rn:rt=tp(rt,rn,at.metadata.blendMode,at.opacityUniform)}pe.cleanupCallbacks.forEach(sn=>{try{sn()}catch(at){console.error("Error in cleanup callback:",at)}}),pe.cleanupCallbacks=[],pe.beforeRenderCallbacks=[],pe.afterRenderCallbacks=[],pe.resizeCallbacks=[];let Sn={uniforms:Lt(pe.uniforms??{},pe.metadata.maps,j,ae),childNode:rt,onCleanup:vt,onBeforeRender:it,onAfterRender:At,onResize:yt,canvas:s,dimensions:{width:T,height:w},renderer:e,domCanvas:pe.domCanvas};return Sn.computeOutputs=Rn(pe,Sn),De(zn(pe.fragmentNodeFunc(Sn),pe),pe,j,ae)}else{let rt;for(let sn=0;sn<Ct.length;sn++){let at=Ct[sn],qn;if(at.metadata.opacity===void 0?(qn=1,at.opacityUniform.value=qn):(qn=at.metadata.opacity,at.opacityUniform.value=qn),at.metadata.visible===!1)continue;re&&re.add(at.id);let zt=Dt(at.id).length>0,rn;if(zt)rn=Gs(at.id,ae,re);else{let vs=li=>{at.cleanupCallbacks.push(li)},Vn=li=>{at.beforeRenderCallbacks.push(li)},fi=li=>{at.afterRenderCallbacks.push(li)},Xr=li=>{at.resizeCallbacks.push(li)},Fo=rt;at.requiresRTT&&rt!==void 0&&(Fo=tp(F(0,0,0,0),rt,"normal",1)),at.cleanupCallbacks=[],at.beforeRenderCallbacks=[],at.afterRenderCallbacks=[],at.resizeCallbacks=[];let La={uniforms:Lt(at.uniforms??{},at.metadata.maps,at.id,ae),childNode:Fo,onCleanup:vs,onBeforeRender:Vn,onAfterRender:fi,onResize:Xr,canvas:s,dimensions:{width:T,height:w},renderer:e,domCanvas:at.domCanvas};La.computeOutputs=Rn(at,La),rn=De(zn(at.fragmentNodeFunc(La),at),at,at.id,ae)}at.requiresChild&&at.metadata.blendMode==="normal"&&!zt?rt=ve(rt||F(0,0,0,0),rn,at.opacityUniform):rt===void 0?pe.requiresRTT||qn!==1?rt=tp(F(1,1,1,0),rn,at.metadata.blendMode,at.opacityUniform):rt=rn:rt=tp(rt,rn,at.metadata.blendMode,at.opacityUniform)}pe.cleanupCallbacks.forEach(sn=>{try{sn()}catch(at){console.error("Error in cleanup callback:",at)}}),pe.cleanupCallbacks=[],pe.beforeRenderCallbacks=[],pe.afterRenderCallbacks=[],pe.resizeCallbacks=[];let Sn={uniforms:Lt(pe.uniforms??{},pe.metadata.maps,j,ae),childNode:rt,onCleanup:vt,onBeforeRender:it,onAfterRender:At,onResize:yt,canvas:s,dimensions:{width:T,height:w},renderer:e,domCanvas:pe.domCanvas};return Sn.computeOutputs=Rn(pe,Sn),De(zn(pe.fragmentNodeFunc(Sn),pe),pe,j,ae)}}},ei=(j,ae,re,pe,vt={},it,At)=>{if(ae===null){let sn=oe.findIndex(at=>at.id===j);if(sn!==-1){oe.splice(sn,1);return}xl(j);return}if(!be){let sn=oe.findIndex(at=>at.id===j);sn!==-1?oe[sn]={id:j,fragmentNodeFunc:ae,parentId:re,metadata:pe,uniforms:vt,componentDefinition:it,domCanvas:At}:oe.push({id:j,fragmentNodeFunc:ae,parentId:re,metadata:pe,uniforms:vt,componentDefinition:it,domCanvas:At});return}let yt=0;if(re!==null){let sn=c.get(re);if(sn&&sn.size>0){let at=0;for(let qn of sn){let zt=l.nodes.get(qn);zt&&zt.metadata.renderOrder>at&&(at=zt.metadata.renderOrder)}yt=at+1}}let je=ee(pe?.opacity!==void 0?pe.opacity:1),Ct;if(pe?.transform){let sn=T/Math.max(1,w),at=pe.transform;Ct={offsetX:ee(at.offsetX??0),offsetY:ee(at.offsetY??0),rotation:ee(at.rotation??0),scale:ee(at.scale??1),anchorX:ee(at.anchorX??.5),anchorY:ee(at.anchorY??.5),edges:ee(at.edges==="stretch"?0:at.edges==="transparent"?1:at.edges==="mirror"?2:at.edges==="wrap"?3:1),aspectRatio:ee(sn)}}let rt={id:j,componentName:it?.name||"Unknown",fragmentNodeFunc:ae,parentId:re,requiresRTT:it?.requiresRTT||!1,requiresChild:it?.requiresChild||!1,opacityUniform:je,metadata:{blendMode:pe?.blendMode||"normal",opacity:pe?.opacity,visible:pe?.visible!==!1,id:pe?.id?se(pe.id):pe?.id,mask:pe?.mask,maps:pe?.maps,renderOrder:pe?.renderOrder!==void 0?pe?.renderOrder:yt,transform:pe?.transform},uniforms:vt,cleanupCallbacks:[],beforeRenderCallbacks:[],afterRenderCallbacks:[],resizeCallbacks:[],transformUniforms:Ct,transformRTTActive:!1,mapSampleUVsFunc:it?.mapSampleUVs,computeNodeFunc:it?.computeNode,usesPointer:it?.usesPointer,domCanvas:At};l.nodes.set(j,rt),re===null&&(l.rootId=j),Ua();let Sn=c.get(re)||new Set;Sn.add(j),c.set(re,Sn),a&&f&&T>0&&w>0?Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()})):a&&f&&(gt||(gt=!0,requestAnimationFrame(()=>{gt=!1,T>0&&w>0&&xt()})))},ml=(j,ae,re)=>{let pe=l.nodes.get(j);if(!pe||!pe.uniforms)return;let vt=pe.uniforms[ae];if(!(!vt||!vt.uniform)){if(vt.transform?(gw(g),GX(vt,re)):vt.uniform.value=re,vt.compileTime&&a&&f&&T>0&&w>0){Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()}));return}if(vt.compileTimeWhen&&a&&f&&T>0&&w>0){let it=vt._lastCompiledValue;if(vt.compileTimeWhen(it,re)){vt._lastCompiledValue=re,Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()}));return}}u||Hs()}},gl=(j,ae)=>{let re=l.nodes.get(j);if(!re)return;let pe=!1;ae.blendMode!==void 0&&re.metadata.blendMode!==ae.blendMode&&(re.metadata.blendMode=ae.blendMode,pe=!0),ae.opacity!==void 0&&re.metadata.opacity!==ae.opacity&&(re.metadata.opacity=ae.opacity,re.opacityUniform.value=ae.opacity),ae.renderOrder!==void 0&&re.metadata.renderOrder!==ae.renderOrder&&(re.metadata.renderOrder=ae.renderOrder,pe=!0);let vt=ae.visible!==!1;if(re.metadata.visible!==vt&&(re.metadata.visible=vt,pe=!0),ae.id!==void 0){let it=se(ae.id);re.metadata.id!==it&&(re.metadata.id=it,pe=!0)}if("mask"in ae&&(re.metadata.mask?.source!==ae.mask?.source||re.metadata.mask?.type!==ae.mask?.type)&&(re.metadata.mask=ae.mask,pe=!0),"maps"in ae&&JSON.stringify(re.metadata.maps)!==JSON.stringify(ae.maps)){let it=re.metadata.maps,At=ae.maps;if(re.metadata.maps=At,Ua(),(()=>{if(!it||!At)return!0;let yt=Object.keys(it),je=Object.keys(At);if(yt.length!==je.length||!yt.every(Ct=>Ct in At))return!0;for(let Ct of je){let rt=it[Ct],Sn=At[Ct];if(rt.type!==Sn.type)return!0;if(Sn.type==="map"){let sn=Sn,at=rt;if(at.source!==sn.source||at.channel!==sn.channel||!re.mapUniforms?.[Ct])return!0}else if(Sn.type==="mouse"){let sn=Sn;if(rt.axis!==sn.axis||!re.mouseDriverState?.[Ct])return!0}else if(Sn.type==="mouse-position"){if(!re.mouseDriverState?.[Ct])return!0}else if(Sn.type==="auto-animate"&&!re.autoAnimateState?.[Ct])return!0}return!1})()){if(it&&At)for(let yt of Object.keys(it))yt in At&&it[yt].type!==At[yt].type&&re.autoAnimateState&&delete re.autoAnimateState[yt];if(it&&At&&re.mouseDriverState)for(let yt of Object.keys(it))yt in At&&it[yt].type!==At[yt].type&&delete re.mouseDriverState[yt];pe=!0}else for(let[yt,je]of Object.entries(At))if(je.type==="map"){let Ct=je,rt=re.mapUniforms[yt];rt&&(rt.inputMin.value=Ct.inputMin,rt.inputMax.value=Ct.inputMax,rt.outputMin.value=Ct.outputMin,rt.outputMax.value=Ct.outputMax,rt.curve.value=Ct.curve??0)}else if(je.type==="mouse"){let Ct=je,rt=re.mapUniforms?.[yt];rt&&(rt.outputMin.value=Ct.outputMin,rt.outputMax.value=Ct.outputMax,rt.curve.value=Ct.curve??0)}else if(je.type==="auto-animate"){let Ct=je,rt=re.mapUniforms?.[yt];rt&&(rt.outputMin.value=Ct.outputMin,rt.outputMax.value=Ct.outputMax)}}if(ae.transform!==void 0){let it={offsetX:ae.transform.offsetX??re.metadata.transform?.offsetX??0,offsetY:ae.transform.offsetY??re.metadata.transform?.offsetY??0,rotation:ae.transform.rotation??re.metadata.transform?.rotation??0,scale:ae.transform.scale??re.metadata.transform?.scale??1,anchorX:ae.transform.anchorX??re.metadata.transform?.anchorX??.5,anchorY:ae.transform.anchorY??re.metadata.transform?.anchorY??.5,edges:ae.transform.edges??re.metadata.transform?.edges??"transparent"},At=kw(it);if(re.metadata.transform=it,!re.transformUniforms&&it){let yt=T/Math.max(1,w);re.transformUniforms={offsetX:ee(it.offsetX),offsetY:ee(it.offsetY),rotation:ee(it.rotation),scale:ee(it.scale),anchorX:ee(it.anchorX),anchorY:ee(it.anchorY),edges:ee(it.edges==="stretch"?0:it.edges==="transparent"?1:it.edges==="mirror"?2:3),aspectRatio:ee(yt)}}else if(re.transformUniforms){re.transformUniforms.offsetX.value=it.offsetX,re.transformUniforms.offsetY.value=it.offsetY,re.transformUniforms.rotation.value=it.rotation,re.transformUniforms.scale.value=it.scale,re.transformUniforms.anchorX.value=it.anchorX,re.transformUniforms.anchorY.value=it.anchorY;let yt=re.transformUniforms.edges.value;re.transformUniforms.edges.value=it.edges==="stretch"?0:it.edges==="transparent"?1:it.edges==="mirror"?2:3,re.transformUniforms.edges.value!==yt&&(pe=!0)}At&&!re.transformRTTActive&&(re.transformRTTActive=!0,pe=!0)}pe&&a&&f?Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()})):u||Hs()},xl=j=>{if(!l.nodes.has(j))return;let ae=l.nodes.get(j);if(ae&&ae.cleanupCallbacks.length>0)for(let pe of ae.cleanupCallbacks)try{pe()}catch(vt){console.error(`Error executing cleanup callback for node ${j}:`,vt)}let re=Dt(j);for(let pe of re)xl(pe.id);if(l.rootId===j&&(l.rootId=null),ae){let pe=c.get(ae.parentId);pe&&(pe.delete(j),pe.size===0&&c.delete(ae.parentId))}l.nodes.delete(j),et.delete(j),Qe.delete(j),nt.delete(j),J.delete(j),Ua(),L=!0,a&&f&&Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()}))},yl=j=>j<1/2.75?7.5625*j*j:j<2/2.75?(j-=1.5/2.75,7.5625*j*j+.75):j<2.5/2.75?(j-=2.25/2.75,7.5625*j*j+.9375):(j-=2.625/2.75,7.5625*j*j+.984375),Sd=(j,ae)=>{switch(ae){case"linear":return j;case"quad":return j<.5?2*j*j:1-Math.pow(-2*j+2,2)/2;case"expo":return j===0?0:j===1?1:j<.5?Math.pow(2,20*j-10)/2:(2-Math.pow(2,-20*j+10))/2;case"bounce":return yl(j);default:return(1-Math.cos(Math.PI*j))/2}},Td=()=>{let j=Ie.deltaTime;A+=j;for(let ae of J){let re=l.nodes.get(ae);if(!re)continue;let pe=re.metadata.maps;if(!pe)continue;let vt=re.mouseDriverState;for(let At in vt){let yt=vt[At],je=pe[At];if(je){if(je.type==="mouse-position"){let Ct=je.smoothing??0,rt=je.momentum??0,Sn=je.x===void 0||je.x==="mouse",sn=je.y===void 0||je.y==="mouse",at,qn;if(Sn){let[nu,ky]=Vw(yt.currentX,yt.velocityX,N,Ct,rt,j);yt.currentX=nu,yt.velocityX=ky,at=nu}else at=je.x,yt.velocityX=0;if(sn){let[nu,ky]=Vw(yt.currentY,yt.velocityY,P,Ct,rt,j);yt.currentY=nu,yt.velocityY=ky,qn=nu}else qn=je.y,yt.velocityY=0;let zt=je.reach??1,rn=je.originX??.5,vs=je.originY??.5,Vn=je.invertX?-1:1,fi=je.invertY?-1:1,Xr=rn+Vn*(at-rn)*zt,Fo=vs+fi*(qn-vs)*zt,La=Xr,li=1-Fo;yt.smoothedUniform.value.set(La,li)}else if(je.type==="mouse"){let Ct=je.smoothing??0,rt=je.momentum??0,Sn=je.axis==="x"?N:P,[sn,at]=Vw(yt.currentX,yt.velocityX,Sn,Ct,rt,j);yt.currentX=sn,yt.velocityX=at,yt.smoothedUniform.value=Math.max(.001,sn)}}}let it=re.autoAnimateState;if(it)for(let At in it){let yt=it[At],je=pe[At];if(!je||je.type!=="auto-animate")continue;let Ct=A*(je.speed??1)*.2,rt;if(je.mode==="loop")rt=Sd((Ct%1+1)%1,je.easing??je.waveform??"sine");else{let zt=(Ct%1+1)%1;rt=Sd(zt<.5?zt*2:(1-zt)*2,je.easing??je.waveform??"sine")}let{outputMin:Sn,outputMax:sn}=je,at=Sn+rt*(sn-Sn),qn=re.uniforms?.[At];if(qn?.compileTimeWhen&&a&&f&&T>0&&w>0){let zt=qn._lastCompiledValue;qn.compileTimeWhen(zt,at)&&(qn._lastCompiledValue=at,Y===null&&(Y=requestAnimationFrame(()=>{Y=null,xt()})))}yt.smoothedUniform.value=at}}},Md=()=>{for(let j of nt){let ae=l.nodes.get(j);if(!(!ae||!ae.computeGetNodes))try{let re=ae.computeGetNodes(Ie);if(re)for(let pe of re)e.compute(pe)}catch(re){console.error(`Error dispatching compute for node ${ae.id}:`,re)}}},uo=()=>{for(let j of et){let ae=l.nodes.get(j);if(ae)for(let re of ae.beforeRenderCallbacks)try{re(Ie)}catch(pe){console.error(`Error executing before render callback for node ${ae.id}:`,pe)}}},Qc=()=>{for(let j of Qe){let ae=l.nodes.get(j);if(ae)for(let re of ae.afterRenderCallbacks)try{re(Ie)}catch(pe){console.error(`Error executing after render callback for node ${ae.id}:`,pe)}}},eu=async()=>{if(!q())throw new Error("Renderer is not ready");let j=u!==null;if(j&&Fa(),S=0,Hs(),e instanceof Bc)try{let ae=e.backend;ae?.device&&await ae.device.queue.onSubmittedWorkDone()}catch{await new Promise(re=>setTimeout(re,16))}j&&vl()},tu=j=>{if(L||!q())return;let ae=Ge?performance.now():0,re=ae||performance.now(),pe;if(j!==void 0)pe=j;else{let vt=S>0?(re-S)/1e3:.016,it=1e3,At=1e3/60-1;if(S>0){let yt=re-S;if(!v&&!M&&yt<it||(v||M)&&yt<At)return}pe=Math.min(vt,.1)}S=re,Ge&&performance.mark("shader-cpu-start"),Ie.deltaTime=pe,Ie.pointer.x=N,Ie.pointer.y=P,Ie.pointerActive=B,Ie.dimensions.width=T,Ie.dimensions.height=w,Td(),Md(),uo();try{if(D)return;if(Ge&&performance.mark("shader-gpu-start"),e.render(r,i),ze&&!Fe&&(Fe=!0,ze=!1,Te&&queueMicrotask(Te)),Qc(),Ge){performance.mark("shader-gpu-end");let vt=!1;if(e instanceof Bc)try{let it=e.backend;if(it&&it.get&&it.get(e)){let At=it.get(e);if(At?.timestampQuery){let yt=At.timestampQuery.getResult();yt!=null&&(He.recordGpuTime(yt/1e6),vt=!0)}}}catch{}try{if(!vt){performance.measure("shader-gpu-time","shader-gpu-start","shader-gpu-end");let it=performance.getEntriesByName("shader-gpu-time")[0];it&&He.recordGpuTime(it.duration),performance.clearMeasures("shader-gpu-time")}performance.clearMarks("shader-gpu-start"),performance.clearMarks("shader-gpu-end")}catch{}}if(Ge){performance.mark("shader-cpu-end");try{performance.measure("shader-cpu-time","shader-cpu-start","shader-cpu-end");let it=performance.getEntriesByName("shader-cpu-time")[0];it&&He.recordCpuTime(it.duration),performance.clearMarks("shader-cpu-start"),performance.clearMarks("shader-cpu-end"),performance.clearMeasures("shader-cpu-time")}catch{}let vt=performance.now()-ae;He.recordFrame(vt)}}catch(vt){console.error("Render frame error:",vt)}},Hs=()=>tu(void 0),wd=async j=>{if(tu(j),e instanceof Bc){let ae=e.backend;ae?.device&&await ae.device.queue.onSubmittedWorkDone()}},bl=()=>{let j=Math.max(0,l.nodes.size-1),ae=Le;He.updateNodeCounts(j,ae)},Ad=()=>{bl();let j=e?.info;return He.getStats(j)},vl=()=>{if(!(u||!_))if(He.setRendering(!0),e&&"setAnimationLoop"in e&&typeof e.setAnimationLoop=="function")e.setAnimationLoop(()=>{Hs()}),u=1;else{let j=()=>{Hs(),u=requestAnimationFrame(j)};j()}},Fa=()=>{u&&(e&&"setAnimationLoop"in e&&typeof e.setAnimationLoop=="function"?e.setAnimationLoop(null):cancelAnimationFrame(u),u=null),He.setRendering(!1)},_l=!1,Ua=()=>{let j=!1;for(let ae of l.nodes.values()){if(ae.usesPointer){j=!0;break}if(ae.metadata.maps){for(let re of Object.values(ae.metadata.maps))if(re&&typeof re=="object"&&"type"in re){let pe=re.type;if(pe==="mouse"||pe==="mouse-position"){j=!0;break}}if(j)break}}j&&!_l?(_l=!0,!k&&s&&(k=HX.register({onMouseMove:V,onTouchMove:Ce,onMouseUp:We,onTouchEnd:Oe}),s.addEventListener("mousedown",Ve),s.addEventListener("touchstart",Ot))):!j&&_l&&(_l=!1,k&&(k(),k=null),s&&(s.removeEventListener("mousedown",Ve),s.removeEventListener("touchstart",Ot)))},Cd=j=>{if(!s)return;U=s.getBoundingClientRect();let ae,re;if("touches"in j){if(j.touches.length===0)return;ae=j.touches[0].clientX,re=j.touches[0].clientY}else ae=j.clientX,re=j.clientY;let pe=(ae-U.left)/U.width,vt=(re-U.top)/U.height;N=pe,P=vt},V=j=>{!f||!s||Cd(j)},Ce=j=>{!f||!s||Cd(j)},We=()=>{f&&(B=!1,u||Hs())},Oe=()=>{f&&(B=!1,u||Hs())},Ve=()=>{B=!0,u||Hs()},Ot=()=>{B=!0,u||Hs()},Xt=()=>{if(oe.length===0)return;let j=[...oe];oe=[];for(let{id:ae,fragmentNodeFunc:re,parentId:pe,metadata:vt,uniforms:it,componentDefinition:At,domCanvas:yt}of j)re&&ei(ae,re,pe,vt,it,At,yt)},Bt=async({canvas:j,resizeTarget:ae,enablePerformanceTracking:re=!0,colorSpace:pe="p3-linear",toneMapping:vt="linear",context:it,gpu:At,forceFullFrameRate:yt=!1,observeElement:je=!0})=>{if(f||m)return;Ge=re,M=yt,g=pe,gw(pe),m=!0,b=new AbortController;let Ct=b;try{if(s=j,r=new yu,r.background=null,i=new yo(-1,1,1,-1,.1,10),i.position.z=1,i.lookAt(0,0,0),$=()=>{nn()},window.addEventListener("beforeunload",$),ie=()=>{if(he>0&&Pe>0){let zt=he,rn=Pe;he=0,Pe=0,z(zt,rn)}},window.addEventListener("resize",ie,{passive:!0}),Ct.signal.aborted)return;if(it){console.log("[Shaders] Using provided WebGL context"),e=new jf({canvas:j,context:it,antialias:!0,alpha:!0,depth:!1,stencil:!0,powerPreference:"high-performance"});let zt=rn=>{rn.preventDefault(),Re("webglcontextlost")};j.addEventListener("webglcontextlost",zt,!1),W=()=>{j.removeEventListener("webglcontextlost",zt,!1)}}else try{let zt={canvas:j,antialias:!0,alpha:!0,depth:!1,powerPreference:"high-performance"};if(At?.device&&(zt.device=At.device),e=new Bc(zt),n=!1,t=e.init(),t.finally(()=>{n=!0}).catch(()=>{}),await t,Ct.signal.aborted)return;try{let rn=e.backend?.device;rn?.lost&&typeof rn.lost.then=="function"&&rn.lost.then(vs=>{vs?.reason!=="destroyed"&&Re(vs?.message||vs?.reason||"unknown")}).catch(()=>{})}catch(rn){console.warn("[Shaders] could not attach WebGPU device.lost handler",rn)}}catch(zt){if(Ct.signal.aborted)return;console.warn("[Shaders] WebGPU initialization failed, falling back to WebGL:",zt);try{let rn={canvas:j,antialias:!0,alpha:!0,depth:!1,stencil:!0,powerPreference:"high-performance"};if(it&&(rn.context=it),e=new jf(rn),Ct.signal.aborted)return;let vs=Vn=>{Vn.preventDefault(),Re("webglcontextlost")};j.addEventListener("webglcontextlost",vs,!1),W=()=>{j.removeEventListener("webglcontextlost",vs,!1)}}catch(rn){if(Ct.signal.aborted)return;console.error("[Shaders] Both WebGPU and WebGL initialization failed:",rn);return}}if(Ct.signal.aborted)return;if(e.setPixelRatio(Math.min(window.devicePixelRatio,2)),e.outputColorSpace=ts,Je(vt),a=new Dh({transparent:!0}),a.fragmentNode=F(0,0,0,0),o=new Is(new Za(2,2),a),r.add(o),je){let zt=ae??j.parentElement;zt?(h=new ResizeObserver(Q),h.observe(zt)):console.warn("[Shaders] No element available for resize observation \u2014 use resize() manually"),p=new IntersectionObserver(Se,{threshold:0}),p.observe(j)}let rt=j.getBoundingClientRect();U=rt,v=!je||rt.width>0&&rt.height>0&&rt.top<window.innerHeight&&rt.bottom>0&&rt.left<window.innerWidth&&rt.right>0,_=!0;let Sn=rt.width>0?rt.width:j.width,sn=rt.height>0?rt.height:j.height,at=Math.round(Sn),qn=Math.round(sn);if(at>0&&qn>0){he=at,Pe=qn;let{width:zt,height:rn}=E(at,qn);T=zt,w=rn,x=!0,e.setSize(zt,rn,!1);let vs=zt/rn,Vn=2,fi=Vn*vs;i.left=-fi/2,i.right=fi/2,i.top=Vn/2,i.bottom=-Vn/2,i.updateProjectionMatrix(),o.scale.set(fi,Vn,1),Hs()}else x=!1;if(_&&vl(),!Ct.signal.aborted){try{if(e.backend?.isWebGPUBackend===!0){let zt=e.backend?.device?.limits?.maxTextureDimension2D;typeof zt=="number"&&zt>0&&(xe=zt)}else{let zt=e.capabilities?.maxTextureSize;typeof zt=="number"&&zt>0&&(xe=zt)}}catch{}if(he>0&&Pe>0){let zt=he,rn=Pe;he=0,Pe=0,z(zt,rn)}f=!0,be=!0,Xt()}}catch(rt){console.error("[Shaders] Initialization error:",rt)}finally{m=!1,b===Ct&&(b=null)}},nn=()=>{if(b&&b.abort(),h&&(h.disconnect(),h=null),p&&(p.disconnect(),p=null),k&&(k(),k=null),W&&(W(),W=null),s&&(s.removeEventListener("mousedown",Ve),s.removeEventListener("touchstart",Ot)),$&&(window.removeEventListener("beforeunload",$),$=null),ie&&(window.removeEventListener("resize",ie),ie=null),Fa(),me(),Ye.forEach(ae=>{try{ae?.renderTarget?.dispose&&ae.renderTarget.dispose()}catch{}}),Ye.clear(),l.nodes.clear(),l.rootId=null,l.idToNodeId.clear(),c.clear(),et.clear(),Qe.clear(),nt.clear(),J.clear(),oe=[],be=!1,Y!==null&&(cancelAnimationFrame(Y),Y=null),Ee=null,O=!1,o){r&&r.remove(o);try{o.geometry&&typeof o.geometry.dispose=="function"&&o.geometry.dispose()}catch{}try{o.material instanceof Xs&&typeof o.material.dispose=="function"&&o.material.dispose()}catch{}}let j=ae=>{try{typeof ae.forceContextLoss=="function"&&ae.forceContextLoss()}catch{}if(typeof ae.dispose=="function")try{ae.dispose()}catch{}};if(e){let ae=e,re=t;re&&!n?re.finally(()=>j(ae)).catch(()=>{}):j(ae)}t=null,n=!1,s=null,e=null,i=null,r=null,o=null,a=null,f=!1,m=!1,x=!1,b=null,T=0,w=0,v=!1,_=!0,N=.5,P=.5,B=!1,L=!1,Te=null,Fe=!1,ze=!1,fe=null,Xe=!1};return{initialize:Bt,cleanup:nn,registerNode:ei,removeNode:xl,updateUniformValue:ml,updateNodeMetadata:gl,isInitialized:()=>f,resize:(j,ae)=>{!e||!i||!o||z(j,ae)},startAnimation:vl,stopAnimation:Fa,renderAndWait:eu,renderSyntheticFrame:wd,getPerformanceStats:Ad,getNodeRegistry:()=>({nodes:new Map(l.nodes)}),getRendererType:()=>e?e instanceof Bc?"webgpu":"webgl":null,getInternalRenderer:()=>e??null,setForceFullFrameRate:j=>{let ae=M;return M=j,ae},setOnReady:j=>{Te=j},setOnDeviceLost:j=>{fe=j},__testing:{needsTransformation:kw,findChildNodes:Dt,applyMaskIfNeeded:De,applyNodeTransformation:zn,getNodeRegistry:()=>l,getParentToChildren:()=>c}}}var _d={samplingRate:.05,collectionDuration:5e3,warmupDuration:500,sampleInterval:500,apiEndpoint:"https://shaders.com/api/telemetry"};function WX(s){return s.includes("Edg/")||s.includes("EdgiOS")?"Edge":s.includes("OPR/")||s.includes("Opera/")?"Opera":s.includes("Chrome/")||s.includes("CriOS")?"Chrome":s.includes("Firefox/")||s.includes("FxiOS")?"Firefox":s.includes("Safari/")&&!s.includes("Chrome")?"Safari":"Other"}function $X(s){return/iPad|Tablet|PlayBook/i.test(s)||/Android/i.test(s)&&!/Mobile/i.test(s)?"tablet":/Mobile|Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini/i.test(s)?"mobile":"desktop"}function qX(){if(typeof window>"u"||typeof navigator>"u")return{domain:"unknown",browserFamily:"unknown",deviceType:"unknown"};let s=navigator.userAgent;return{domain:window.location.hostname,browserFamily:WX(s),deviceType:$X(s)}}var XX=class{renderer;version;sourceType;sessionId;frameSamples=[];sampleInterval=null;stopped=!1;constructor(s,e,t){this.renderer=s,this.version=e,this.sourceType=t,this.sessionId=`tel_${Date.now()}_${Math.random().toString(36).substring(2,9)}`}stop(){this.stopped=!0,this.sampleInterval&&(clearInterval(this.sampleInterval),this.sampleInterval=null)}async start(){try{if(await this.sleep(_d.warmupDuration),this.stopped||(this.sampleInterval=setInterval(()=>{if(!this.stopped)try{let s=this.renderer.getPerformanceStats();this.frameSamples.push(s)}catch(s){console.error("Telemetry sampling error:",s)}},_d.sampleInterval),await this.sleep(_d.collectionDuration-_d.warmupDuration),this.stopped))return;if(this.sampleInterval&&(clearInterval(this.sampleInterval),this.sampleInterval=null),!this.stopped&&this.frameSamples.length>=5){let s=this.aggregateData();await this.sendTelemetry(s)}}catch(s){console.error("Telemetry collection error:",s)}}sleep(s){return new Promise(e=>setTimeout(e,s))}aggregateData(){let s=this.aggregatePerformance(),e=this.detectRendererType(),t=this.extractComponents(),n=qX();return{sessionId:this.sessionId,timestamp:Date.now(),collectionDuration:_d.collectionDuration,version:this.version,sourceType:this.sourceType,performance:s,renderer:e,components:t,environment:n}}aggregatePerformance(){if(this.frameSamples.length===0)return{fps:0,frameTime:{avg:0,min:0,max:0,p99:0},jankPercent:0,budgetUsed:0};let s=this.frameSamples.map(h=>h.avgFrameTime),e=this.frameSamples.map(h=>h.jankPercent),t=this.frameSamples.map(h=>h.budgetUsed),n=this.frameSamples.map(h=>h.fps),i=this.calculateMedian(n),r=this.calculateMean(s),o=Math.min(...s),a=Math.max(...s),l=this.calculatePercentile(s,99),c=this.calculateMean(e),u=this.calculateMean(t);return{fps:Math.round(i*10)/10,frameTime:{avg:Math.round(r*10)/10,min:Math.round(o*10)/10,max:Math.round(a*10)/10,p99:Math.round(l*10)/10},jankPercent:Math.round(c*10)/10,budgetUsed:Math.round(u*10)/10}}detectRendererType(){let s=this.frameSamples[this.frameSamples.length-1];return{type:this.renderer.getRendererType?.()||"webgl",drawCalls:s?.drawCalls??null,textureCount:s?.textureCount??null}}extractComponents(){try{let s=this.renderer.getNodeRegistry(),e=[];for(let[t,n]of s.nodes)n.parentId!==null&&e.push({name:n.componentName,requiresRTT:n.requiresRTT,renderOrder:n.metadata.renderOrder});return e.sort((t,n)=>t.renderOrder-n.renderOrder)}catch(s){return console.error("Failed to extract components:",s),[]}}async sendTelemetry(s){try{let e=await fetch(_d.apiEndpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});e.ok||console.warn("Telemetry send failed:",e.status,e.statusText)}catch(e){console.error("Telemetry send error:",e)}}calculateMean(s){return s.length===0?0:s.reduce((e,t)=>e+t,0)/s.length}calculateMedian(s){if(s.length===0)return 0;let e=[...s].sort((n,i)=>n-i),t=Math.floor(e.length/2);return e.length%2===0?(e[t-1]+e[t])/2:e[t]}calculatePercentile(s,e){if(s.length===0)return 0;let t=[...s].sort((i,r)=>i-r),n=Math.ceil(e/100*t.length)-1;return t[Math.max(0,n)]}};function YX(s=!1,e=!1){return s||typeof navigator<"u"&&navigator.doNotTrack==="1"?!1:e?!0:Math.random()<_d.samplingRate}function XU(s,e,t=!1,n=!1){return YX(t,n)?new XX(s,e,n?"preview":"shader"):null}function YU(){if(typeof window>"u"||!window.location)return!1;let s=window.location.hostname;return!s.includes("shaders.com")&&s!=="localhost"&&s!=="127.0.0.1"}function zw(s){if(typeof s!="object"||s===null||!("type"in s))return!1;let e=s;return e.type==="map"||e.type==="mouse"||e.type==="mouse-position"||e.type==="auto-animate"}var jU=new Set(["opacity","blendMode","visible","transform","maskSource","maskType"]);async function Gw(s,e,t){let n=new Map;if(Ow().forEach(x=>{n.set(x.definition.name,x.definition)}),!s.style.width||!s.style.height){let x=s.getBoundingClientRect(),b=x.width>0?x.width:s.width,v=x.height>0?x.height:s.height;b>0&&!s.style.width&&(s.style.width=`${b}px`),v>0&&!s.style.height&&(s.style.height=`${v}px`)}function i(x){return{...x,props:x.props?{...x.props}:void 0,children:x.children?.map(i)}}let r={...e,components:e.components.map(i)},o=null,a=!1,l=!1;function c(x,b,v,_,M){let T=n.get(v.type);if(!T){console.warn(`[createShader] Unknown component type: ${v.type}`);return}let w=v.id||`${v.type}_${Date.now()}_${Math.random().toString(36).slice(2,9)}`,S={};for(let[N,P]of Object.entries(v.props||{}))!jU.has(N)&&Object.prototype.hasOwnProperty.call(T.props,N)&&zw(P)&&(S[N]=P);let A=$U(T,Object.fromEntries(Object.entries(T.props).map(([N,P])=>{let B=v.props?.[N]!==void 0?v.props[N]:P.default;return[N,zw(B)?P.default:B]})),w),I={blendMode:v.props?.blendMode||"normal",opacity:v.props?.opacity,visible:v.props?.visible,renderOrder:M,id:v.id,maps:Object.keys(S).length>0?{...S}:void 0,mask:v.props?.maskSource?{source:v.props.maskSource,type:v.props.maskType||"alpha"}:void 0,transform:v.props?.transform?{offsetX:0,offsetY:0,rotation:0,scale:1,anchorX:.5,anchorY:.5,edges:"transparent",...v.props.transform}:void 0};x.registerNode(w,T.fragmentNode,_,I,A,T),b.set(w,{componentDef:T,uniforms:A,nodeId:w,component:v,currentMaps:{...S}}),v.children?.forEach((N,P)=>{c(x,b,N,w,P)})}async function u(){let x=qU(),b=new Map;t?.onReady&&x.setOnReady(t.onReady),await x.initialize({canvas:s,resizeTarget:s,enablePerformanceTracking:t?.enablePerformanceTracking||!1,colorSpace:t?.colorSpace,toneMapping:t?.toneMapping,observeElement:t?.observeElement,gpu:t?.gpu});let v={renderer:x,nodeEntryMap:b,telemetryCollector:null,telemetryStartTimeout:null};x.setOnDeviceLost(M=>{if(!(a||l)&&!(o!==null&&o!==v)){l=!0;try{t?.onError?.(M)}catch(T){console.error("[createShader] onError callback threw:",T)}(async()=>{try{if(h(v),o=null,a)return;let T=await u();if(a){h(T);return}o=T}catch(T){console.error("[createShader] rebuild after device loss failed:",T);try{t?.onError?.("rebuild_failed")}catch{}}finally{l=!1}})()}});let _="shader-root";if(x.registerNode(_,({childNode:M})=>M||F(0,0,0,0),null,null,{},void 0),r.components.forEach((M,T)=>{c(x,b,M,_,T)}),YU()){let M=()=>{if(a||o!==v){v.telemetryStartTimeout=null;return}x.getPerformanceStats().fps>0?(v.telemetryCollector=XU(x,"2.5.135",t?.disableTelemetry||!1,!1),v.telemetryCollector&&v.telemetryCollector.start(),v.telemetryStartTimeout=null):v.telemetryStartTimeout=setTimeout(M,500)};v.telemetryStartTimeout=setTimeout(M,500)}return v}function h(x){if(x.telemetryCollector){try{x.telemetryCollector.stop()}catch{}x.telemetryCollector=null}x.telemetryStartTimeout!==null&&(clearTimeout(x.telemetryStartTimeout),x.telemetryStartTimeout=null);try{x.renderer.cleanup()}catch{}}o=await u();function p(x,b){if(!o)return;let{renderer:v,nodeEntryMap:_}=o,M=_.get(x);if(!M){console.warn(`[createShader] Component ID not found: ${x}`);return}M.component.props||(M.component.props={});let T=M.component.props;for(let[w,S]of Object.entries(b))if(jU.has(w))if(w==="maskSource")v.updateNodeMetadata(M.nodeId,{mask:S?{source:S,type:b.maskType||T.maskType||"alpha"}:void 0}),T.maskSource=S,"maskType"in b&&(T.maskType=b.maskType);else{if(w==="maskType")continue;w==="transform"?(v.updateNodeMetadata(M.nodeId,{transform:S}),T.transform=S):(v.updateNodeMetadata(M.nodeId,{[w]:S}),T[w]=S)}else zw(S)?Object.prototype.hasOwnProperty.call(M.componentDef.props,w)?(M.currentMaps[w]=S,v.updateNodeMetadata(M.nodeId,{maps:{...M.currentMaps}}),T[w]=S):console.warn(`[createShader] Ignoring PropDriver for unknown prop "${w}" on ${M.component.type}`):(w in M.currentMaps&&(delete M.currentMaps[w],v.updateNodeMetadata(M.nodeId,{maps:Object.keys(M.currentMaps).length>0?{...M.currentMaps}:void 0})),Object.prototype.hasOwnProperty.call(M.componentDef.props,w)&&(v.updateUniformValue(M.nodeId,w,S),T[w]=S))}function f(x,b){let v=s.getBoundingClientRect(),_=x??(v.width>0?v.width:s.width),M=b??(v.height>0?v.height:s.height);_>0&&M>0&&(s.style.width=`${_}px`,s.style.height=`${M}px`,o&&o.renderer.resize(_,M))}function m(){a=!0,o&&(h(o),o=null)}function g(){o&&o.renderer.stopAnimation()}function y(){o&&o.renderer.startAnimation()}return{update:p,resize:f,pause:g,resume:y,destroy:m}}var jX="shaders-preview-key";function ZX(s,e){let t=new TextEncoder().encode(e),n=new Uint8Array(s.length);for(let i=0;i<s.length;i++)n[i]=s[i]^t[i%t.length];return n}function ZU(s){try{let e=atob(s),t=new Uint8Array(e.length);for(let o=0;o<e.length;o++)t[o]=e.charCodeAt(o);let n=ZX(t,jX),i=new TextDecoder().decode(n),r=JSON.parse(i);if(typeof r!="object"||r===null||Array.isArray(r))throw new Error("unexpected shape");return r}catch{throw new Error("Failed to decode preview definition: invalid data")}}var KX="https://shaders.com",JX="Unlock your Shaders Pro license",QX="https://shaders.com/dashboard?pricing=true",eY=new Set(["break","case","catch","class","const","continue","default","delete","do","else","export","extends","finally","for","function","if","import","in","instanceof","new","return","super","switch","this","throw","try","typeof","var","void","while","with","yield"]);function tY(s,e){let t=s.replace(/[^A-Za-z0-9]+/g," ").trim();if(!t)return e;let n=t.split(/\s+/).map((r,o)=>o===0?r.charAt(0).toLowerCase()+r.slice(1):r.charAt(0).toUpperCase()+r.slice(1)).join(""),i=/^[A-Za-z_$]/.test(n)?n:`_${n}`;return eY.has(i)?`_${i}`:i}function nY(s){let e=new Set(["style"]),t=new Map;return s?.length&&s.forEach((n,i)=>{if(!n.targets?.length)return;let r=tY(n.label,`keyProp${i}`),o=r,a=1;for(;e.has(o);)a++,o=`${r}${a}`;e.add(o),t.set(o,n)}),t}function Hw(s,e){for(let t of e){if(t.id===s)return t;let n=t.children;if(n?.length){let i=Hw(s,n);if(i)return i}}return null}function sY(s,e,t){if(e)for(let[n,i]of Object.entries(e)){let r=t.get(n);if(r)for(let o of r.targets??[]){let a=Hw(o.component_id,s);a?.props&&o.prop in a.props&&(a.props[o.prop]=i)}}}async function iY(s,e){if(!e.shader&&!e.presetId||e.shader&&e.presetId)throw new Error("Exactly one of shader (preview token) or presetId must be provided");let t=e.apiBaseUrl||KX,n=e.presetId&&e.version?`?version=${encodeURIComponent(e.version)}`:"",i=e.shader?`${t}/api/preview/shader/${encodeURIComponent(e.shader)}`:`${t}/api/preview/preset/${encodeURIComponent(e.presetId)}${n}`,r=await fetch(i);if(!r.ok)throw new Error(`Failed to fetch preview: ${r.status} ${r.statusText}`);let o=await r.json(),a=o.preset??o.shader;if(!a?.definition||typeof a.definition!="string")throw new Error("Preview response missing encoded definition");let l=ZU(a.definition),c=Array.isArray(a.key_props)?a.key_props:null,u=nY(c),h=new Map;for(let b of u.values())for(let v of b.targets??[]){let _=Hw(v.component_id,l.components);_?.props&&v.prop in _.props&&h.set(`${v.component_id}:${v.prop}`,_.props[v.prop])}sY(l.components,e.configuration,u);let p=await Gw(s,l,{isPreview:!0,enablePerformanceTracking:!0}),{overlay:f,savedPosition:m,parentEl:g}=rY(s),y=p.destroy.bind(p),x=p;return x.destroy=()=>{g&&m!==void 0&&(g.style.position=m),f.remove(),y()},x.setConfiguration=b=>{if(c?.length)for(let[v,_]of u){let M=Object.prototype.hasOwnProperty.call(b,v)&&b[v]!==void 0;for(let T of _.targets??[]){let w=M?b[v]:h.get(`${T.component_id}:${T.prop}`);w!==void 0&&p.update(T.component_id,{[T.prop]:w})}}},x}function rY(s){let e=s.parentElement,t;e&&getComputedStyle(e).position==="static"&&(t=e.style.position,e.style.position="relative");let n=document.createElement("a");return n.href=QX,n.target="_blank",n.rel="noopener noreferrer",n.textContent=JX,Object.assign(n.style,{position:"absolute",bottom:"8px",right:"12px",fontSize:"11px",fontFamily:"system-ui, -apple-system, sans-serif",color:"rgba(255, 255, 255, 0.5)",textDecoration:"none",zIndex:"10",pointerEvents:"auto",transition:"color 0.2s ease"}),n.addEventListener("mouseenter",()=>{n.style.color="rgba(255, 255, 255, 0.8)"}),n.addEventListener("mouseleave",()=>{n.style.color="rgba(255, 255, 255, 0.5)"}),e&&e.appendChild(n),{overlay:n,savedPosition:t,parentEl:e}}async function oY(s){if(typeof navigator>"u"||!navigator.gpu)return null;try{let e=await navigator.gpu.requestAdapter({powerPreference:s?.powerPreference??"high-performance"});return e?{device:await e.requestDevice({requiredFeatures:[...e.features]}),adapter:e}:null}catch(e){return console.warn("[shaders] createSharedDevice failed; callers should fall back to per-instance device:",e),null}}export{iY as createPreview,Gw as createShader,oY as createSharedDevice};