@three-blocks/devtools 8.0.0 → 8.0.1-alpha.372.gf7fb70f4af27
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/CHANGELOG.md +15 -0
- package/dist/browser/shader-capture.js +1 -1
- package/package.json +9 -9
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @three-blocks/devtools
|
|
2
2
|
|
|
3
|
+
## 8.0.1-alpha.372.gf7fb70f4af27
|
|
4
|
+
|
|
5
|
+
- Tools: Installing a pro tool works again, and a cached tool refreshes itself when a new build ships.
|
|
6
|
+
|
|
7
|
+
- Packages: Material environments capture reliably and transmission types expose surface distortion.
|
|
8
|
+
|
|
9
|
+
- Starter: New projects install compatible devtools and run status without missing dependencies.
|
|
10
|
+
|
|
11
|
+
- Website: Gaussian benchmark results now fit without horizontal page scrolling.
|
|
12
|
+
|
|
13
|
+
- Website: Pages navigate faster and links stay aligned with available destinations.
|
|
14
|
+
|
|
15
|
+
- Packages: Built from `f7fb70f4af27`.
|
|
16
|
+
|
|
17
|
+
|
|
3
18
|
## 8.0.0
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var $n=Object.defineProperty;var p=(t,e)=>$n(t,"name",{value:e,configurable:true});var Me="three-webgpu-r185-v1",pe="three-webgl-r185-v1",et=["fragmentNode","vertexNode","colorNode","positionNode","normalNode","opacityNode","alphaTestNode","backdropNode","backdropAlphaNode","emissiveNode","metalnessNode","roughnessNode","clearcoatNode","clearcoatRoughnessNode","transmissionNode","thicknessNode","iorNode","outputNode","mrtNode","depthNode","castShadowNode","receivedShadowNode","maskNode","envNode"];var J=["_renderContexts","_renderContexts"],v=Object.freeze({renderContextMrt:"three-r185-render-context-mrt",renderContextInput:"three-r185-render-context-input",skinningEvent:"three-r185-skinning-event",previousBoneMatrices:"three-r185-previous-bone-matrices",previousInstanceMatrices:"three-r185-previous-instance-matrices",previousInstanceMatricesEvent:"three-r185-previous-instance-matrices-event",dynamicLightData:"three-r185-dynamic-light-data",morphUpdateEvent:"three-r185-morph-update-event",maxMip:"three-r185-max-mip",morphTargetTexture:"three-r185-morph-target-texture",cubeMap:"three-r185-cube-map",passTexture:"three-r185-pass-texture",reflector:"three-r185-reflector",object3D:"three-r185-object3d",passSetupOutput:"three-r185-pass-setup-output",retainedLightUniform:"three-r185-retained-light-uniform",retainedReference:"three-r185-retained-reference",retainedShadowChild:"three-r185-retained-shadow-child",retainedShadowFar:"three-r185-retained-shadow-far",materialSteps:"three-r185-material-steps"});function tt(t){let e=/^(.*)-([^-]+)-(-?\d+)$/u.exec(t);if(e?.[1]===void 0||e[2]===void 0||e[3]===void 0)return;let n=Number(e[3]);if(Number.isSafeInteger(n))return {attachmentState:e[1],mrtState:e[2],callDepth:n}}p(tt,"parseThreeR185RenderContextKey");function Wt(t){return t==="185"||t===185}p(Wt,"supportsThreeR185Revision");var Fn=new Map([["GL_ANGLE_multi_draw","WEBGL_multi_draw"],["GL_OVR_multiview2","OVR_multiview2"],["GL_ANGLE_clip_cull_distance","WEBGL_clip_cull_distance"]]);function qt(t,e){let n=e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),r=new RegExp(`layout\\s*\\(\\s*std140\\s*\\)\\s*uniform\\s+${n}\\s*\\{([\\s\\S]*?)\\}\\s*;`,"u");for(let o of t){let i=r.exec(o)?.[1];if(i===void 0)continue;let s=i.split(";").flatMap(c=>{let a=/^(?:lowp\s+|mediump\s+|highp\s+)?[A-Za-z_][A-Za-z0-9_]*\s+([A-Za-z_][A-Za-z0-9_]*)\s*(?:\[[^\]]*\])?$/u.exec(c.trim());return a?.[1]===void 0?[]:[a[1]]});if(s.length>0)return s}}p(qt,"capturedGlslUniformNames");function Jt(t){let e=new Set;for(let n of t)if(n!==null)for(let r of n.matchAll(/^\s*#extension\s+([A-Za-z0-9_]+)\s*:\s*require\s*$/gmu)){let o=r[1],i=o===void 0?void 0:Fn.get(o);if(i===void 0)throw new Error(`Captured GLSL requires unsupported extension directive "${o}".`);e.add(i);}return [...e].sort()}p(Jt,"capturedGlslRequirements");function Dn(t){let e=t.constructor;return (typeof e=="function"||typeof e=="object"&&e!==null)&&typeof Reflect.get(e,"name")=="string"?String(Reflect.get(e,"name")):"unknown"}p(Dn,"constructorName");function nt(t){let e=t,n=p(o=>e[o]===true,"flag"),r=typeof e.textureNode=="object"&&e.textureNode!==null||typeof e.nodeUniform=="object"&&e.nodeUniform!==null;return n("isNodeUniformsGroup")?"NodeUniformsGroup":n("isUniformsGroup")?"UniformsGroup":n("isNodeUniformBuffer")?"NodeUniformBuffer":n("isUniformBuffer")?"UniformBuffer":n("isStorageBuffer")?r?"NodeStorageBuffer":"StorageBuffer":n("isSampledCubeTexture")?r?"NodeSampledCubeTexture":"SampledCubeTexture":n("isSampledTexture3D")?"NodeSampledTexture3D":n("isSampled3DTexture")?"Sampled3DTexture":n("isSampledArrayTexture")?r?"NodeSampledArrayTexture":"SampledArrayTexture":n("isSampledTexture")?r?"NodeSampledTexture":"SampledTexture":n("isSampler")?r?"NodeSampler":"Sampler":typeof e.kind=="string"?e.kind:Dn(t)}p(nt,"capturedBindingKind");var Yt="three-webgpu-r186dev-v1";function Zt(t){return t==="186dev"}p(Zt,"supportsThreeR186DevRevision");var Xt="three-blocks.shader-capture.runtime.v1";var zn=Symbol.for("three-blocks.shader-capture.cache.v1"),Hn=Symbol.for("three-blocks.shader-capture.cache-value.v1"),Wn=Symbol.for("three-blocks.shader-input-registry.v1"),ht="/__three-blocks/shaders/capture",oe="/__three-blocks/shaders/telemetry",je=4096,qn=5,Jn=65536,Qt=256*1024,Yn=1e3,Zn=/^[a-z0-9][a-z0-9_-]{0,63}$/u,ee=Me,Xn=new Set(["cameraProjectionMatrix","cameraProjectionMatrixInverse","cameraViewMatrix","cameraWorldMatrix","cameraNormalMatrix","cameraPosition"]),rt=["lightPosition","lightTargetPosition","lightViewPosition","lightShadowMatrix"],Qn=new Set(["_texture","_width","_height","_maxMip","_matrixUniform","_flipYUniform"]),Vn={bias:"shadowBias",intensity:"shadowIntensity",normalBias:"shadowNormalBias",radius:"shadowRadius",blurSamples:"shadowBlurSamples",mapSize:"shadowMapSize"},B={buildCalls:0,renderBuilds:0,computeBuilds:0,registeredBuilds:0,registeredRenderBuilds:0,registeredComputeBuilds:0,buildMs:0,syncBuildMs:0,asyncBuildElapsedMs:0,precompiledSetupMs:0,maxSyncBuildMs:0,maxPrecompiledSetupMs:0,hydrationMs:0,maxHydrationMs:0,injected:0,injectedRender:0,injectedCompute:0,missed:0,missedRender:0,missedCompute:0,missedKeys:[]},j={capture:false,forceLive:false,driven:false,settleFrames:60,readiness:{},transform:1},Ee,Rn=new WeakMap,Vt=new WeakSet,en=new WeakSet,gt=new WeakMap,yt=new Set,kn=new WeakMap,Pe=[],Te=[],tn=new WeakMap,nn=new WeakMap,rn=new WeakMap,on=new WeakMap,V,we=0,ot=false,ve=false,te="default",se,ae,re=false,Ue=0,Le,$e=0,Fe=0,De,de=[],sn=false,P,G,Ge={},be,Re=false;function Ke(t){return /^.+\/input-[a-zA-Z0-9_-]+-\d{4}$/u.test(t)}p(Ke,"isAutomaticInputContainerKey");function l(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}p(l,"isRecord");function wn(){let t=Reflect.get(globalThis,Wn);return l(t)&&t.version===1?t:void 0}p(wn,"retainedInputRegistry");function F(t){let e=wn(),n=e?.keyFor;if(typeof n!="function")return;let r=Reflect.apply(n,e,[t]);return typeof r=="string"&&r.startsWith("@three-blocks-input:")?r:void 0}p(F,"retainedInputKey");function an(t){if(t===null||typeof t!="object")return;let e=wn(),n=e?.locationForValue;if(typeof n=="function"){let i=Reflect.apply(n,e,[t]);if(l(i)&&typeof i.key=="string"&&i.key.startsWith("@three-blocks-input:")&&Array.isArray(i.path)&&i.path.every(s=>s==="value"||s==="array"))return {container:i.key,path:i.path}}let r=e?.keyForValue;if(typeof r!="function")return;let o=Reflect.apply(r,e,[t]);return typeof o=="string"&&o.startsWith("@three-blocks-input:")?{container:o,path:["value"]}:void 0}p(an,"retainedInputValueLocation");function mt(t,e=new Set){if(t===null||typeof t!="object"||e.has(t))return;if(e.add(t),Array.isArray(t)){for(let r of t){let o=mt(r,e);if(o)return o}return}let n=t;for(let r of ["key","container"]){let o=n[r];if(typeof o=="string"&&Ke(o))return o}for(let r of Object.values(n)){let o=mt(r,e);if(o)return o}}p(mt,"automaticInputContainerReference");function bt(t,e=new Set){if(t===null||typeof t!="object"||e.has(t))return;if(e.add(t),Array.isArray(t)){for(let i of t){let s=bt(i,e);if(s)return s}return}let n=t,r=n.container,o=n.path;if(typeof r=="string"&&Array.isArray(o)){let i=o.filter(s=>typeof s=="string");if(r==="@renderer"&&i.includes(J[0])||r==="@object"&&i.includes("_renderer"))return `${r}.${i.join(".")}`}for(let i of Object.values(n)){let s=bt(i,e);if(s)return s}}p(bt,"transientRendererReference");function ze(t){return l(t)&&t.isNode===true}p(ze,"isNode");function w(t){if(l(t)&&typeof t.getSelf=="function"){let e=t.getSelf();return ze(e)?e:void 0}return ze(t)?t:void 0}p(w,"nodeFrom");function Ne(t){let e=new Map;if(t.isNode!==true)return e;e.set(t,[]);let n=[t];for(let r=0;r<n.length;r++){let o=n[r];if(!o||typeof o.getSerializeChildren!="function")continue;let i=e.get(o)??[],s=0;for(let c of o.getSerializeChildren()){let a=w(c.childNode);if(a&&!e.has(a)&&(e.set(a,[...i,s]),n.push(a)),s++,s>je)throw new Error("Shader node graph exceeds the capture child limit.")}}return e}p(Ne,"indexNodeGraph");function Rt(t){if(t.k==="owned"){let e=Rt(t.owner);return e===t.owner?t:{...t,owner:e}}if(t.k==="container"&&t.key==="@renderer"&&t.path.length>=4&&t.path[0]===J[0]&&t.path[1]===J[1]&&t.path.at(-1)==="mrt"){let e=t.path[2],n=typeof e=="string"?tt(e):void 0;if(n!==void 0){let r=Nn(n.attachmentState);return {k:"recipe",id:v.renderContextMrt,version:1,input:{attachmentState:n.attachmentState,callDepth:n.callDepth,...r===void 0?{}:{samples:r}}}}}return t}p(Rt,"stableRenderContextAddress");function er(t){for(;t.k==="owned";)t=t.owner;return t.k==="container"&&t.key.startsWith("@three-blocks-input:")&&!t.key.startsWith("@three-blocks-input:setup-")}p(er,"addressUsesGenericRetainedInputRoot");function Nn(t){let e=t.split(":");if(e.length!==6)return;let n=Number(e[3]);return Number.isSafeInteger(n)&&n>=0?n:void 0}p(Nn,"renderAttachmentSamples");function tr(t,e){let n=l(t)?t:{},r={isDepthTexture:n.isDepthTexture===true,isRenderTargetTexture:n.isRenderTargetTexture===true,isDataTexture:n.isDataTexture===true,isData3DTexture:n.isData3DTexture===true,isCubeTexture:n.isCubeTexture===true,format:typeof n.format=="number"?n.format:null,type:typeof n.type=="number"?n.type:null,compareFunction:typeof n.compareFunction=="number"?n.compareFunction:null};typeof n.name=="string"&&n.name.length>0&&(r.name=n.name),typeof n.colorSpace=="string"&&n.colorSpace.length>0&&(r.colorSpace=n.colorSpace);let o=Nn(e);return o!==void 0&&(r.samples=o),r}p(tr,"textureResourceSignature");function nr(t,e){if(t.k!=="inputNode"||t.value.container!=="@renderer")return t;let n=t.value.path;if(n.length<4||n[0]!==J[0]||n[1]!==J[1]||typeof n[2]!="string")return t;let r=tt(n[2]);if(r===void 0)return t;let o=n[3]==="depthTexture"&&n.length===4?"depthTexture":n[3]==="textures"&&n.length===5&&Number.isSafeInteger(n[4])?"texture":void 0;if(o===void 0)return t;let{k:i,value:s,...c}=t;return {k:"recipe",id:v.renderContextInput,version:1,input:{attachmentState:r.attachmentState,callDepth:r.callDepth,mrt:r.mrtState!=="default",resource:o,...o==="texture"?{index:Number(n[4])}:{},texture:tr(e,r.attachmentState),node:c}}}p(nr,"stableRenderContextInputAddress");function m(t){if(!l(t))return typeof t;let e=t.constructor;return (typeof e=="function"||l(e))&&typeof e.name=="string"?e.name:"unknown"}p(m,"constructorName");function dn(t){if(!l(t))return m(t);let e=l(t.image)?t.image:void 0;return [m(t),typeof t.uuid=="string"?`uuid=${t.uuid}`:"",typeof t.name=="string"&&t.name?`name=${t.name}`:"",t.isRenderTargetTexture===true?"renderTarget":"",t.isPMREMTexture===true?"pmrem":"",e&&typeof e.width=="number"&&typeof e.height=="number"?`${e.width}x${e.height}`:"",typeof t.format=="number"?`format=${t.format}`:"",typeof t.type=="number"?`type=${t.type}`:""].filter(Boolean).join("/")}p(dn,"textureLabel");function Se(t,e){return typeof t=="string"&&t.length>0?t.slice(0,512):e}p(Se,"boundedLabel");var rr=typeof performance=="object"&&typeof performance.now=="function"?performance.now.bind(performance):void 0;function or(){return rr?.()??Date.now()}p(or,"now");function vt(t){return l(t)&&typeof t.then=="function"}p(vt,"promiseLike");function ir(t){j={capture:t.capture===true,...t.backend==="webgpu"||t.backend==="webgl"?{backend:t.backend}:{},forceLive:t.forceLive===true,driven:t.driven===true,settleFrames:Number.isSafeInteger(t.settleFrames)&&t.settleFrames>=0?t.settleFrames:60,settleTimeoutMs:Number.isSafeInteger(t.settleTimeoutMs)&&Number(t.settleTimeoutMs)>=1e3?Number(t.settleTimeoutMs):3e4,...Number.isSafeInteger(t.deadlineAt)&&Number(t.deadlineAt)>0?{deadlineAt:Number(t.deadlineAt)}:{},visibilityGuard:t.visibilityGuard===true,...typeof t.captureId=="string"?{captureId:t.captureId}:{},...typeof t.sessionKey=="string"?{sessionKey:t.sessionKey}:{},...typeof t.token=="string"?{token:t.token}:{},readiness:{...typeof t.readiness?.selector=="string"?{selector:t.readiness.selector}:{},...typeof t.readiness?.global=="string"?{global:t.readiness.global}:{}},transform:t.transform},Ee=j.backend,ee=j.backend==="webgl"?pe:Me,be=void 0,Re=false,se=void 0,ae=void 0,re=false,Ue=0,Le=void 0,$e=0,Fe=0,De=void 0,de.length=0,G=void 0,Reflect.set(globalThis,zn,n=>{l(n)&&cn(n);});let e=Reflect.get(globalThis,Hn);l(e)&&cn(e),(j.capture||j.driven||Sn())&&ar();}p(ir,"configureThreeBlocksShaderCapture");function Sn(){let t=Reflect.get(globalThis,"location"),e=l(t)?Reflect.get(t,"search"):void 0;if(typeof e!="string")return false;let n=new URLSearchParams(e),r=n.get("threeBlocksShaderMode");return n.get("capture")==="1"||r==="live"||r==="precompiled"}p(Sn,"drivenShaderSession");function He(){return j.capture||j.forceLive||j.driven||Sn()}p(He,"shaderSessionActive");function An(t){return l(t.backend)&&t.backend.isWebGLBackend===true?"webgl":"webgpu"}p(An,"rendererCaptureBackend");function xt(t){let e=An(t);return Ee===void 0&&(Ee=e),Ee===e}p(xt,"captureOwnsRenderer");function cn(t){if(P=t,!j.capture)return;let e=Tn(),n=t.automaticRegistrationPrefix,r=typeof n=="function"?Reflect.apply(n,t,[e]):void 0;typeof r=="string"&&(G=r);}p(cn,"adoptCaptureCache");function sr(t){if(!j.capture||P===void 0)return;let e=P.automaticRegistrationPrefix,n=typeof e=="function"?Reflect.apply(e,P,[t]):void 0;if(typeof n=="string"){G=n;return}let r=P.enableAutomaticRegistration;if(typeof r=="function"){G="auto";try{Reflect.apply(r,P,[{scene:t,prefix:G}]);}catch(o){throw G=void 0,o}}}p(sr,"ensureCaptureAutomaticRegistration");function ar(){if(sn)return;let t=globalThis,e=t.requestAnimationFrame;if(typeof e!="function")return;sn=true;let n=0,r=0,o=false,i=new Map,s=p(()=>{o||i.size===0||(o=true,Reflect.apply(e,t,[()=>{o=false;let c=[...i.values()];i.clear();let a=n++*(1e3/60);for(let d of c)try{d(a);}catch(f){queueMicrotask(()=>{throw f});}s();}]));},"schedule");Reflect.set(t,"requestAnimationFrame",c=>{let a=++r;return i.set(a,c),s(),a}),Reflect.set(t,"cancelAnimationFrame",c=>{i.delete(c);});}p(ar,"installDeterministicRaf");function W(t,e){if(!P)return;let n=P[t];return typeof n=="function"?Reflect.apply(n,P,e):void 0}p(W,"cacheCall");function Tn(){if(P&&typeof P.activeScene=="string"&&P.activeScene!=="default")return P.activeScene;let t=Reflect.get(globalThis,"location"),e=l(t)?Reflect.get(t,"search"):void 0,n=typeof e=="string"?new URLSearchParams(e).get("captureId"):null;return n!==null&&Zn.test(n)?n:P&&typeof P.activeScene=="string"?P.activeScene:"default"}p(Tn,"activeShaderCaptureScene");function ce(){return Tn()}p(ce,"activeScene");function xe(t,e,n,r){let o=W(t==="compute"?"registrationForCompute":"registrationForRender",t==="compute"?[e,n]:[e,n,r]);return (!l(o)||typeof o.key!="string")&&(sr(n),o=W(t==="compute"?"registrationForCompute":"registrationForRender",t==="compute"?[e,n]:[e,n,r])),l(o)&&typeof o.key=="string"?o:void 0}p(xe,"sceneRegistration");function dr(t){return t.key}p(dr,"capturedRegistrationKey");function jt(t,e){let n=e==="compute"?t.object:t.material;return n!==null&&typeof n=="object"?n:void 0}p(jt,"builderTarget");function vn(t){return t.material===null||t.material===void 0?"compute":"render"}p(vn,"buildKind");function it(t){if(!l(t))return;let e={};for(let n of ["uuid","id","name","type"]){let r=t[n];typeof r=="string"?e[n]=Se(r,""):(typeof r=="number"&&Number.isFinite(r)||typeof r=="boolean")&&(e[n]=r);}return Object.keys(e).length===0?void 0:e}p(it,"objectIdentity");function st(t,e,n,r,o,i){if(Te.length>=je)return;let s=t==="compute"?e.object:e.material,c=Se(l(s)?s.name??s.type:void 0,"unknown"),a=W("registrations",[n]),d=it(s),f=l(r)?it(r.material):void 0;Te.push({...i===void 0?{}:{key:i},kind:t,name:c,reason:o??(t==="compute"?`unregistered compute "${c}"`:`unregistered material "${c}"`),...d===void 0?{}:{target:d},...f===void 0?{}:{renderObjectMaterial:f},...Array.isArray(a)?{registrations:a.slice(0,16).flatMap(h=>{if(!l(h))return [];let k=it(h.target);return [{...typeof h.key=="string"?{key:Se(h.key,"")}:{},...typeof h.kind=="string"?{kind:Se(h.kind,"")}:{},...k??{},sameTarget:h.target===s,...l(r)?{sameRenderObjectMaterial:h.target===r.material}:{}}]})}:{}});}p(st,"addSkipped");function un(t){if(!l(t))return "none";let e=t.name;return Se(typeof e=="string"&&e.length>0?e:t.type,"unknown")}p(un,"demandLabel");function ke(t,e,n,r,o,i){if(de.length>=je)return;let s=l(o)?o.object:void 0;de.push({event:t,kind:e,key:n??null,target:un(r),...e==="render"?{object:un(s),side:l(r)&&typeof r.side=="number"?r.side:null}:{},...i===void 0?{}:{hit:i}});}p(ke,"recordDemand");function cr(t){let e=typeof t.getBindings=="function"?Reflect.apply(t.getBindings,t,[]):[];return Array.isArray(e)&&e.some(n=>l(n)&&Array.isArray(n.bindings)&&n.bindings.some(r=>l(r)&&(l(r.texture)&&r.texture.isPBOTexture===true||l(r.textureNode)&&l(r.textureNode.value)&&r.textureNode.value.isPBOTexture===true)))}p(cr,"hasPboBinding");function at(t,e,n=(i,s)=>{s==="prepareForHydration"?(B.precompiledSetupMs+=i,B.maxPrecompiledSetupMs=Math.max(B.maxPrecompiledSetupMs,i)):(B.buildMs+=i,s==="buildAsync"?B.asyncBuildElapsedMs+=i:(B.syncBuildMs+=i,B.maxSyncBuildMs=Math.max(B.maxSyncBuildMs,i)));},r=or,o){let i=t[e];typeof i=="function"&&Reflect.set(t,e,p(function(...c){let a=r(),d;try{d=Reflect.apply(i,this,c);}catch(f){throw n(r()-a,e),f}return vt(d)?Promise.resolve(d).then(f=>(n(r()-a,e),o?.(),f),f=>{throw n(r()-a,e),f}):(n(r()-a,e),o?.(),d)},"timedBuild"));}p(at,"wrapThreeBlocksCaptureTimedBuild");function xn(t,e,n){if(!He()||!l(t)||!l(e)||!xt(e)||Vt.has(t))return;Vt.add(t);let r=ce(),o=W("containers",[r]);gt.set(t,new Set(Array.isArray(o)?o.filter(h=>l(h)&&typeof h.key=="string").map(h=>String(h.key)):[]));let i=l(n)&&l(n.material)?n:void 0,s=i?"render":vn(t),c=s==="render"&&i?We("render",i):jt(t,s);c&&(i&&kn.set(t,i),xe(s,c,ce(),i));let a=[];Rn.set(t,a);let d=t.getUniformFromNode;typeof d=="function"&&Reflect.set(t,"getUniformFromNode",p(function(k,N,S,u){let y=Reflect.apply(d,this,[k,N,S,u]),R=w(k),b=typeof S=="string"?S:this.shaderStage;if(R&&typeof N=="string"&&(b==="vertex"||b==="fragment"||b==="compute")){let x=N==="buffer"&&l(e.backend)&&e.backend.isWebGLBackend===true?typeof u=="string"?u:null:l(y)&&typeof y.name=="string"?y.name:typeof u=="string"?u:null;a.push({node:R,type:N,stage:b,name:x,...typeof R.id=="number"?{nid:R.id}:{}});}return y},"captureUniform"));let f=p(()=>{en.has(t)||(en.add(t),jn(t,e));},"recordBuild");at(t,"build",void 0,void 0,f),at(t,"buildAsync",void 0,void 0,f),at(t,"prepareForHydration");}p(xn,"instrumentThreeBlocksShaderBuilder");function he(t){return Object.assign(Object.create(Object.getPrototypeOf(t)),t)}p(he,"cloneCaptureRecord");function ur(t){let e=Object.create(t);for(let s of ["object","material","scene","camera","lightsNode","context","vertexShader","fragmentShader","computeShader","observer","hardwareClipping","updateNodes","updateBeforeNodes","updateAfterNodes"]){let c=t[s];Reflect.set(e,s,s==="material"&&l(c)?he(c):Array.isArray(c)?[...c]:c);}let n=typeof t.getAttributesArray=="function"?Reflect.apply(t.getAttributesArray,t,[]):[],r=Array.isArray(n)?n.map(s=>l(s)?he(s):s):[];Reflect.set(e,"getAttributesArray",()=>r);let o=typeof t.getBindings=="function"?Reflect.apply(t.getBindings,t,[]):[],i=Array.isArray(o)?o.map(s=>{if(!l(s))return s;let c=he(s),a=Array.isArray(s.bindings)?s.bindings.map(d=>{if(!l(d))return d;let f=he(d);return Array.isArray(d.uniforms)&&Reflect.set(f,"uniforms",d.uniforms.map(h=>l(h)?he(h):h)),f}):[];return Reflect.set(c,"bindings",a),c}):[];return Reflect.set(e,"getBindings",()=>i),e}p(ur,"snapshotBuilderState");function jn(t,e){if(!He()||j.capture&&ve||!l(t)||!l(e)||!xt(e))return;B.buildCalls++,ae=Date.now(),re=false;let n=vn(t);n==="compute"?B.computeBuilds++:B.renderBuilds++;let r=ce();te=r;let o=gt.get(t)??new Set,i=W("containers",[r]);if(Array.isArray(i))for(let d of i)l(d)&&typeof d.key=="string"&&Ke(d.key)&&!o.has(d.key)&&yt.add(d.key);gt.delete(t);let s=jt(t,n),c=n==="render"?kn.get(t)??(l(t.object)?t.object:void 0):void 0,a=s?xe(n,s,r,c):void 0;if(a){B.registeredBuilds++,n==="compute"?B.registeredComputeBuilds++:B.registeredRenderBuilds++;let d=dr(a),f=l(e.backend)&&e.backend.isWebGLBackend===true;if(f&&n==="compute"){ke("skip",n,d,s,c),st(n,t,r,c,"WebGL shader precompilation does not support compute states.",d),Ie();return}if(f&&cr(t)){ke("skip",n,d,s,c),st(n,t,r,c,"WebGL shader precompilation does not support PBO-backed storage reads.",d),Ie();return}if(ke("build",n,d,s,c),Pe.length<je){let h=ur(t),k={scene:r,key:d,kind:n,builder:h,renderer:e,...c?{renderObject:c}:{},journal:[...Rn.get(t)??[]]};Pe.push(k);}}else ke("build",n,void 0,s,c),st(n,t,r,c);Ie();}p(jn,"recordThreeBlocksShaderBuild");function We(t,e){return t==="compute"?e!==null&&typeof e=="object"?e:void 0:l(e)&&e.material!==null&&typeof e.material=="object"?e.material:void 0}p(We,"targetForProvider");function fn(t,e,n,r){if(j.capture&&ve)return;let o=ce();te=o;let i=We(t,e),s=t==="render"&&l(e)?e:void 0,c=i?xe(t,i,o,s):void 0;ke("probe",t,c?.key,i,s,n!=null),n!=null?(B.injected++,t==="compute"?B.injectedCompute++:B.injectedRender++):c&&(B.missed++,t==="compute"?B.missedCompute++:B.missedRender++,B.missedKeys.length<je&&!B.missedKeys.includes(c.key)&&B.missedKeys.push(c.key));let a=r.stats;if(l(a)){let d=a.hydrationMs,f=a.maxHydrationMs;if(typeof d=="number"&&Number.isFinite(d)&&d>=0){let h=nn.get(r)??0;B.hydrationMs+=d>=h?d-h:d,nn.set(r,d);}typeof f=="number"&&Number.isFinite(f)&&f>=0&&(B.maxHydrationMs=Math.max(B.maxHydrationMs,f));}j.capture||Ie();}p(fn,"recordProviderResult");function fr(t){let e=t.debug;if(!l(e))return;let n=e.onNodeBuilderCreated,r=on.get(t);if(r!==void 0&&n===r)return;let o=typeof n=="function"?n:void 0,i=p(function(c,a){o!==void 0&&Reflect.apply(o,this,[c,a]),xn(c,t,a);},"captureNodeBuilder");on.set(t,i),e.onNodeBuilderCreated=i;}p(fr,"installCaptureBuilderCallback");function lr(t,e,n){if(!l(t)||He()&&!xt(t))return;if(n!==void 0){let a=An(t)==="webgl";if(Wt(n))ee=a?pe:Me;else if(Zt(n)){if(a)throw new Error("@three-blocks/devtools supports WebGL shader capture only with Three.js r185.");ee=Yt;}else throw new Error(`@three-blocks/devtools supports Three.js revisions 185 and 186dev capture; received ${JSON.stringify(n)}.`)}if(!He())return;if(l(e)&&e!==Ge&&(Ge=e,Oe=void 0),fr(t),j.forceLive){let a=rn.get(t);a||(a={__threeBlocksCaptureForceLive:true,getForRender(d){let f=We("render",d);f&&xe("render",f,ce(),l(d)?d:void 0);},getForCompute(d){let f=We("compute",d);f&&xe("compute",f,ce());}},rn.set(t,a)),t.nodeBuilderStateProvider=a;return}let r=t.nodeBuilderStateProvider;if(!l(r))return;let o=tn.get(r);if(o){t.nodeBuilderStateProvider=o;return}if(r.__threeBlocksCaptureWrapper===true)return;let i=r.getForRender,s=r.getForCompute;if(typeof i!="function"||typeof s!="function")return;let c={__threeBlocksCaptureWrapper:true,get stats(){return r.stats},getForRender(a,d,f){let h=Reflect.apply(i,r,[a,d,f]);return fn("render",a,h,r),h},getForCompute(a,d,f){let h=Reflect.apply(s,r,[a,d,f]);return fn("compute",a,h,r),h}};tn.set(r,c),t.nodeBuilderStateProvider=c;}p(lr,"prepareThreeBlocksShaderRenderer");var pr=Object.freeze({configureThreeBlocksShaderCapture:ir,instrumentThreeBlocksShaderBuilder:xn,prepareThreeBlocksShaderRenderer:lr,recordThreeBlocksShaderBuild:jn,readThreeBlocksShaderDemands:Ir});Reflect.set(globalThis,Symbol.for(Xt),pr);function hr(t){return w(t)}p(hr,"unwrapTsl");var Oe;function z(){if(Oe)return Oe;let t=new Map;for(let[e,n]of Object.entries(Ge)){let r=hr(n);r&&!t.has(r)&&t.set(r,e);}return Oe=t,t}p(z,"tslMap");function gr(t,e){if(!(!e||!l(t._nodes)||typeof t._nodes.getEnvironmentNode!="function"))return w(Reflect.apply(t._nodes.getEnvironmentNode,t._nodes,[e]))}p(gr,"sceneEnvironmentNode");function yr(t,e){if(!(!e||!l(t._nodes)||typeof t._nodes.getBackgroundNode!="function"))return w(Reflect.apply(t._nodes.getBackgroundNode,t._nodes,[e]))}p(yr,"sceneBackgroundNode");var ln=new WeakMap;function mr(t,e,n){let r=Reflect.get(t,"getLightNodes");if(typeof r!="function")return [];let o=Reflect.get(e,"getDataFromNode");if(typeof o=="function")for(let c of ["fragment","vertex","compute","any"]){let a=Reflect.apply(o,e,[t,c]),d=l(a)?a.lightNodes:void 0;if(Array.isArray(d))return d.map(w).filter(f=>f!==void 0)}let s=Reflect.apply(r,t,[{renderer:n,context:{materialLightings:[]},getDataFromNode(c){let a=ln.get(c);return a||(a={},ln.set(c,a)),a}}]);return Array.isArray(s)?s.map(w).filter(c=>c!==void 0):[]}p(mr,"lightNodes");function dt(t,e){let n=Reflect.get(Ge,t);return typeof n=="function"?w(Reflect.apply(n,void 0,[e])):void 0}p(dt,"lightUniform");function ct(t){if(!t)return [];let e=[],n=Reflect.get(t,"traverse");return typeof n=="function"&&Reflect.apply(n,t,[r=>{r!==null&&typeof r=="object"&&Reflect.get(r,"isLight")===true&&e.push(r);}]),e}p(ct,"sceneLights");function ge(t){if(!t)return [];let e=[],n=Reflect.get(t,"traverse");return typeof n=="function"&&Reflect.apply(n,t,[r=>{r!==null&&typeof r=="object"&&e.push(r);}]),e}p(ge,"sceneObjects");function br(t){let e=[],n=new Set,r=p((o,i)=>{if(n.has(o))return;n.add(o),e.push([o,i]);let s=Reflect.get(o,"children");if(Array.isArray(s))for(let[c,a]of s.entries())l(a)&&a.isObject3D===true&&r(a,[...i,"children",c]);},"visit");return r(t,[]),e}p(br,"object3DPaths");function Rr(t){return !(Reflect.get(t,"isNode")===true||Reflect.get(t,"isObject3D")===true||Reflect.get(t,"isTexture")===true||Reflect.get(t,"isMaterial")===true||ArrayBuffer.isView(t)||t instanceof ArrayBuffer||t instanceof Set||t instanceof Promise)}p(Rr,"isScannable");function kt(t,e,n,r=()=>false,o=false){let i=new Set,s=[{value:t,path:[],depth:0}];for(let c=0;c<s.length;c++){let a=s[c];if(!a||i.has(a.value)||a.depth>qn)continue;let{value:d,path:f,depth:h}=a;i.add(d);let k=Array.isArray(d)?Array.from(d,(N,S)=>[S,N]):d instanceof Map?[...d.entries()].filter(N=>typeof N[0]=="string"||typeof N[0]=="number").map(([N,S])=>[`map:${String(N)}`,S]):Object.keys(d).map(N=>[N,Reflect.get(d,N)]);for(let[N,S]of k){if(S===null||typeof S!="object")continue;let u=[...f,N];if(!r(u))if(ze(S)){let y=w(S);y&&e(y,u),o&&s.push({value:y??S,path:u,depth:h+1});}else n(S,u),Rr(S)&&s.push({value:S,path:u,depth:h+1});}}}p(kt,"scanContainer");function Cn(t){if(new Uint8Array(new Uint16Array([258]).buffer)[0]!==2)throw new Error("Shader capture requires a little-endian host.");let e=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),n=e.toBase64;if(typeof n=="function")return n.call(e);let r="",o=32768;for(let i=0;i<e.length;i+=o)r+=String.fromCharCode(...e.subarray(i,i+o));return btoa(r)}p(Cn,"bytesToBase64");function kr(t){if(!ArrayBuffer.isView(t)||m(t)!=="Float32Array")throw new Error(`RangeNode setup produced an unsupported ${m(t)} buffer.`);if(t.byteLength>Qt)throw new Error(`RangeNode setup buffer is ${t.byteLength} bytes; embedded shader inputs are limited to ${Qt} bytes.`);return {t:"f32",data:Cn(t)}}p(kr,"serializeRangeBuffer");function pn(t){if(typeof t=="number"&&Number.isFinite(t)||typeof t=="boolean")return t;if(l(t)){for(let[e,n]of [["isVector2","v2"],["isVector3","v3"],["isVector4","v4"],["isColor","c"],["isMatrix3","m3"],["isMatrix4","m4"]])if(t[e]===true&&typeof t.toArray=="function"){let r=Reflect.apply(t.toArray,t,[]);if(Array.isArray(r)&&r.every(o=>typeof o=="number"&&Number.isFinite(o)))return {t:n,a:r}}}}p(pn,"serializeValueItem");function hn(t){if(Array.isArray(t)){let r=t.map(pn);return r.every(o=>o!==void 0)?{t:"arr",items:r}:void 0}let e=pn(t);if(e!==void 0)return e;if(l(t)&&t.isTexture===true&&t.image==null&&t.isRenderTargetTexture!==true&&t.version===0&&(t.name===""||t.name===void 0))return {t:"tex"};if(!l(t)||t.isDataTexture!==true||!l(t.image))return;let n=t.image.data;if(!(!ArrayBuffer.isView(n)||typeof Reflect.get(n,"length")!="number"||Number(Reflect.get(n,"length"))>Jn))return {t:"dtex",arrayType:m(n),data:Cn(n),width:typeof t.image.width=="number"?t.image.width:0,height:typeof t.image.height=="number"?t.image.height:0,format:typeof t.format=="number"?t.format:0,type:typeof t.type=="number"?t.type:0,minFilter:typeof t.minFilter=="number"?t.minFilter:0,magFilter:typeof t.magFilter=="number"?t.magFilter:0,wrapS:typeof t.wrapS=="number"?t.wrapS:0,wrapT:typeof t.wrapT=="number"?t.wrapT:0,name:typeof t.name=="string"?t.name:""}}p(hn,"serializeStaticValue");function ut(t){if(!(Object.hasOwn(t,"update")||Object.hasOwn(t,"updateBefore")||Object.hasOwn(t,"updateAfter"))){if(Reflect.get(t,"isStorageTextureNode")===true)return "storageTexture";if(Reflect.get(t,"isStorageBufferNode")===true)return "storage";switch(m(t)){case "BufferNode":return "buffer";case "BufferAttributeNode":return "bufferAttribute";case "Texture3DNode":return "texture3D";case "CubeTextureNode":return "cubeTexture";case "TextureNode":return "texture";case "UniformArrayNode":return "uniformArray";case "UniformNode":return "uniform";case "PMREMNode":return "pmremTexture";default:return}}}p(ut,"inputClass");function gn(t,e){let n=m(t);return n!==m(e)||["TextureNode","Texture3DNode","CubeTextureNode"].includes(n)||!!w(Reflect.get(t,"compareNode"))!=!!w(Reflect.get(e,"compareNode"))||Reflect.get(t,"access")!==Reflect.get(e,"access")?false:m(t)==="BufferAttributeNode"?["bufferType","bufferStride","bufferOffset","usage","instanced"].every(r=>Reflect.get(t,r)===Reflect.get(e,r)):true}p(gn,"hasEquivalentSharedInputShape");function wr(t){if(t.k==="inputNode")return t.value;if(t.k==="container")return {container:t.key,path:[...t.path,"value"]};if(t.k==="anchor"&&t.path.length===0)return {container:"@material",path:[t.slot,"value"]}}p(wr,"sharedTextureValueLocation");function yn(t){if(t?.k==="container")return {container:t.key,path:t.path};if(t?.k==="anchor"&&t.path.length===0)return {container:"@material",path:[t.slot]}}p(yn,"sharedTextureNodeLocation");function mn(t,e){if(t.isDataArrayTexture!==true||t.format!==1023||t.type!==1015||!l(t.image)||t.image.data===null||typeof t.image.data!="object"||m(t.image.data)!=="Float32Array")return false;let n=e.morphAttributes,r=e.attributes;if(!l(n)||!l(r)||!l(r.position))return false;let o=Array.isArray(n.position)?n.position:[],i=Array.isArray(n.normal)?n.normal:[],s=Array.isArray(n.color)?n.color:[],c=o.length>0?o:i.length>0?i:s;if(c.length===0)return false;let a=r.position.count;if(!Number.isSafeInteger(a)||Number(a)<0)return false;let d=s.length>0?3:i.length>0?2:1,f=Number(a)*d,h=1;return f>4096&&(h=Math.ceil(f/4096),f=4096),t.image.width===f&&t.image.height===h&&t.image.depth===c.length&&Reflect.get(t.image.data,"length")===f*h*4*c.length}p(mn,"isThreeR185MorphTargetTexture");function Nr(t){let e=W("registrations",[t]),n=new Map;if(Array.isArray(e))for(let a of e){if(!l(a))continue;let d=[],f=w(a.owner);f&&d.push(f);let h=a.target;if(a.kind==="compute"){let k=w(h);k&&d.push(k);}else if(h!==null&&typeof h=="object")for(let k of et){let N=w(Reflect.get(h,k));N&&d.push(N);}for(let k of d)for(let N of Ne(k).keys()){let S=F(N);S!==void 0&&!n.has(S)&&n.set(S,N);}}let r=[...n].map(([a,d])=>({key:a,node:d})),o=new Map,i=new Map,s=p((a,d)=>{let f=i.get(a);(f===void 0||d.path.length<f.path.length)&&i.set(a,d);},"rememberNearestValue");for(let a of r)o.set(a.node,{k:"container",key:a.key,path:[]});let c=p((a,d)=>{let f=o.get(a)??d;o.has(a)||o.set(a,f);for(let[h,k]of Ne(a))h===a||o.has(h)||o.set(h,{k:"owned",owner:f,path:k});},"indexGraph");for(let a of r){let d={k:"container",key:a.key,path:[]};s(a.node,{container:a.key,path:[]}),c(a.node,d),kt(a.node,(f,h)=>c(f,{k:"container",key:a.key,path:h}),(f,h)=>s(f,{container:a.key,path:h}),Y,true);}return {roots:r,nodes:o,values:i}}p(Nr,"buildRetainedGraphIndex");function wt(t,e=new Set){if(t===null||typeof t!="object"||e.has(t))return false;if(e.add(t),Array.isArray(t))return t.some(r=>wt(r,e));let n=t;return n.k==="recipe"?true:Object.values(n).some(r=>wt(r,e))}p(wt,"addressUsesRecipe");function Nt(t,e=new Set){if(t===null||typeof t!="object"||e.has(t))return false;if(e.add(t),Array.isArray(t))return t.some(r=>Nt(r,e));let n=t;return n.k==="recipe"&&typeof n.id=="string"?[v.skinningEvent,v.previousBoneMatrices,v.previousInstanceMatrices,v.previousInstanceMatricesEvent,v.dynamicLightData,v.morphTargetTexture,v.morphUpdateEvent,v.cubeMap,v.passTexture,v.reflector,v.object3D,v.passSetupOutput,v.retainedReference,v.retainedShadowChild,v.retainedShadowFar,v.materialSteps].includes(n.id):Object.values(n).some(r=>Nt(r,e))}p(Nt,"addressUsesContextScopedRecipe");var St=class{static{p(this,"RecipeCollisionIndex");}#t=new Map;#i=new WeakMap;#e=0;viewportInput(e){let n=this.#i.get(e);return n===void 0&&(n=this.#e++,this.#i.set(e,n)),n}register(e,n,r,o){if(!wt(e)||Nt(e))return;let i=JSON.stringify(e),s=this.#t.get(i);if(s!==void 0&&s.source!==n)throw new Error(`Shader recipe collision between "${s.shaderKey}" (${s.usage}) and "${r}" (${o}) for ${i}. Register the live resources in distinct stable application containers or make their structural recipe signatures unique.`);s===void 0&&this.#t.set(i,{source:n,shaderKey:r,usage:o});}};function Y(t){return t.includes("_inspector")||t.includes("_renderer")||t.includes("_lastRenderer")||t.includes("_lastCullingRenderer")||t.includes("renderer")||t.some(e=>typeof e=="string"&&e.startsWith("_cached"))}p(Y,"applicationContainerPathIsTransient");function Sr(t){return t.some(e=>typeof e=="string"&&e.startsWith("_"))||t.join(".").includes("value.renderPipeline")}p(Sr,"materialPathIsTransient");var At=class{static{p(this,"CaptureClassifier");}#t;#i;#e=new Map;#s=new Map;#r=new Map;#u=new Map;#a=[];#f=new Set;#l=[];#d=[];constructor(e,n){this.#t=e,this.#i=n;let r=e.kind==="compute"?ze(e.target)?[{slot:"compute",node:e.target}]:[]:et.flatMap(u=>{let y=w(Reflect.get(e.target,u));return y?[{slot:u,node:y}]:[]});for(let u of r)this.#o(u.node,{k:"anchor",key:e.key,slot:u.slot,path:[]});let o=w(e.builder.lightsNode);this.#d.length=0;let i=this.#d;if(o){let u=mr(o,e.builder,e.renderer);this.#l.push(...u),this.#a.push(`lights=${u.length}`);for(let y of u){let R=Reflect.get(y,"light");if(R===null||typeof R!="object")continue;let b=i.length;i.push(R);let A={k:"lightNode",light:b};if(this.#o(y,A),Reflect.get(y,"isAnalyticLightNode")===true){let x=w(Reflect.get(y,"baseColorNode")),M=x??w(Reflect.get(y,"colorNode"));M&&this.#e.set(M,{k:"owned",owner:A,path:[x!==void 0||R!==null&&typeof R=="object"&&Reflect.get(R,"castShadow")===true?"baseColorNode":"colorNode"]});}for(let x of rt){let M=dt(x,R);this.#a.push(`${b}/${x}=${M?`${m(M)}:${m(Reflect.get(M,"value"))}:${String(Reflect.get(M,"updateType"))}`:"missing"}`),M&&this.#o(M,{k:"lightUniform",fn:x,light:b});}}}else this.#a.push("lights=missing");let s=e.builder.scene!==null&&typeof e.builder.scene=="object"?e.builder.scene:null;for(let[u,y]of ct(s).entries()){if(i.includes(y))continue;let R=i.length+u;for(let b of rt){let A=dt(b,y);A&&this.#o(A,{k:"lightUniform",fn:b,light:R,sceneLight:u});}}let c=gr(e.renderer,s);c&&this.#o(c,{k:"sceneEnv"});let a=p((u,y,R,b=false)=>{this.#r.has(y)||this.#r.set(y,{container:u,path:[]}),kt(y,(A,x)=>this.#o(A,{k:"container",key:u,path:x}),(A,x)=>{this.#r.has(A)||this.#r.set(A,{container:u,path:x});},R,b);},"scan");if(e.kind==="render")for(let u of Object.getOwnPropertyNames(e.target)){let y=w(Reflect.get(e.target,u));y&&!this.#e.has(y)&&this.#e.set(y,{k:"container",key:"@material",path:[u]});}let d=W("containers",[e.scene]),f=Array.isArray(d)?d.find(u=>l(u)&&typeof u.key=="string"&&u.key.includes("/resource-batched-text-")):void 0;if(l(f)&&typeof f.key=="string"&&f.target!==null&&typeof f.target=="object"&&a(f.key,f.target,Y,true),Array.isArray(d)){for(let u of d)if(u!==f&&l(u)&&typeof u.key=="string"&&u.target!==null&&typeof u.target=="object"){let y=u.key;if(Ke(y)||yt.has(y))continue;a(y,u.target,Y,true);}}if(e.kind==="render"){a("@material",e.target,Sr,true),e.renderObject&&a("@renderObject",e.renderObject,A=>A.length===1&&A[0]!=="context");let u=Reflect.get(e.renderer,"getMRT"),y=Reflect.get(e.builder,"context"),b=(l(y)?w(y.mrt):void 0)??(typeof u=="function"?w(Reflect.apply(u,e.renderer,[])):void 0);e.renderObject&&b&&this.#o(b,{k:"container",key:"@renderObject",path:["context","mrt"]});}let h=e.builder.object;h!==null&&typeof h=="object"&&a("@object",h,u=>Y(u)||e.kind==="compute"&&u.some(y=>typeof y=="string"&&y.startsWith("_")),e.kind==="compute"),s&&a("@scene",s,Y);let k=yr(e.renderer,s),N=k?this.#m(k):void 0;if(k&&N){this.#o(k,N);let u=w(Reflect.get(k,"_cubeTextureNode"));u&&this.#e.set(u,{k:"owned",owner:N,path:["_cubeTextureNode"]});}let S=W("containers",[e.scene]);if(Array.isArray(S)){for(let u of S)if(l(u)&&typeof u.key=="string"&&u.target!==null&&typeof u.target=="object"){let y=u.key;if(Ke(y)||yt.has(y))continue;a(y,u.target,Y,true);}}for(let[u,y]of ge(s).entries())a(`@sceneObject:${u}`,y,Y);a("@renderer",e.renderer,u=>u.length>=1&&u[0]==="_inspector"||u.length===2&&u[0]==="_nodes"&&u[1]==="nodeBuilderCache");for(let[u,y]of e.retainedGraph.values){let R=this.#r.get(u);(R===void 0||R.container==="@renderer"&&R.path[0]===J[0]&&R.path[1]===J[1])&&this.#r.set(u,y);}for(let[u,y]of e.retainedGraph.nodes)!this.#e.has(u)&&!z().has(u)&&ut(u)===void 0&&this.#e.set(u,y);}#n(e,n,r,o){let i=Reflect.get(e,"value"),s=this.#s.get(e)??o??(r.k==="recipe"&&r.id===v.renderContextInput&&i!==null&&typeof i=="object"?i:e);return this.#s.set(e,s),this.#i.register(r,s,this.#t.key,n),r}#o(e,n){!this.#e.has(e)&&!z().has(e)&&this.#e.set(e,n);for(let[r,o]of Ne(e))r===e||this.#e.has(r)||z().has(r)||this.#e.set(r,{k:"owned",owner:n,path:o});}#N(e){let n=w(Reflect.get(this.#t.target,"contextNode")),r=n?Reflect.get(n,"value"):void 0,o=l(r)?r.renderPipelineState:void 0,i=l(o)?w(o.viewOffsetOwner):void 0;if(!i||Reflect.get(i,"camera")!==e)return;let s=F(i);return s===void 0?void 0:{container:s,path:["camera"]}}#c(e){let n=F(e);if(n!==void 0)return {k:"container",key:n,path:[]};let r=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null;for(let[o,i]of ge(r).entries()){let s=Reflect.get(i,"shadow");if(l(s)&&w(s.shadowNode)===e)return {k:"container",key:`@sceneObject:${o}`,path:["shadow","shadowNode"]}}return this.#e.get(e)}#S(e){let n=p((o,i)=>{let s=Reflect.get(o,"shadow");if(!(Reflect.get(o,"isLight")!==true&&(Reflect.get(o,"isObject3D")!==true||!l(s)))){for(let c of rt)if(dt(c,o)===e)return {k:"recipe",id:v.retainedLightUniform,version:1,input:{fn:c,light:i}}}},"address");for(let{key:o,node:i}of this.#t.retainedGraph.roots){let s,c=p((a,d)=>{s??=n(a,{container:o,path:d});},"inspect");if(c(i,[]),s===void 0&&kt(i,()=>{},c,Y),s===void 0)for(let a of Object.getOwnPropertyNames(i)){let d=Reflect.get(i,a);if(!(!l(d)||d.isObject3D!==true))for(let[f,h]of br(d))s??=n(f,{container:o,path:[a,...h]});}if(s!==void 0)return s}let r=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null;for(let[o,i]of ge(r).entries()){let s=Reflect.get(i,"shadow"),c=l(s)?Reflect.get(s,"shadowNode"):void 0,a=l(c)?Reflect.get(c,"lights"):void 0;if(Array.isArray(a))for(let[d,f]of a.entries()){if(f===null||typeof f!="object")continue;let h=n(f,{container:`@sceneObject:${o}`,path:["shadow","shadowNode","lights",d]});if(h!==void 0)return h}}}#A(e){if(m(e)!=="UniformNode"||Reflect.get(e,"name")!=="shadowFar"||Reflect.get(e,"updateType")!=="render")return;let n=Reflect.get(e,"update");if(typeof n!="function")return;let r=Reflect.get(e,"value"),o=[],i=0;for(let[c,a]of this.#e){if(Reflect.get(c,"isShadowBaseNode")!==true||Reflect.get(c,"isShadowNode")===true)continue;let d=Reflect.get(c,"maxFar"),f=Reflect.get(c,"camera"),h=l(f)?f.far:void 0;if(typeof d!="number"||!Number.isFinite(d)||typeof h!="number"||!Number.isFinite(h))continue;let k=100000025e-2+i*2;i++;try{Reflect.set(c,"maxFar",k),Reflect.set(f,"far",k+1),Reflect.apply(n,e,[{}]),Reflect.get(e,"value")===k&&o.push(this.#c(c)??a);}catch{}finally{Reflect.set(c,"maxFar",d),Reflect.set(f,"far",h);try{Reflect.apply(n,e,[{}]);}catch{Reflect.set(e,"value",r);}}}let s=o.length===1?o[0]:void 0;if(s!==void 0)return {k:"recipe",id:v.retainedShadowFar,version:1,input:{owner:s}}}#T(e){if(Reflect.get(e,"isShadowNode")!==true)return;let n=[];for(let o of this.#e.keys()){if(Reflect.get(o,"isShadowBaseNode")!==true||Reflect.get(o,"isShadowNode")===true)continue;let i=Reflect.get(o,"_shadowNodes"),s=Reflect.get(o,"lights");if(!Array.isArray(i)||!Array.isArray(s)||i.length===0||i.length!==s.length)continue;let c=i.indexOf(e),a=this.#c(o);c>=0&&a!==void 0&&n.push({owner:a,index:c,count:i.length});}let r=n.length===1?n[0]:void 0;if(r!==void 0)return {k:"recipe",id:v.retainedShadowChild,version:1,input:{owner:r.owner,index:r.index,count:r.count}}}#v(e){let n=[];for(let r of this.#e.keys()){if(Reflect.get(r,"isShadowBaseNode")!==true||Reflect.get(r,"isShadowNode")===true)continue;let o=Reflect.get(r,"lights");if(!(!Array.isArray(o)||o.length===0))for(let[i,s]of o.entries()){let c=this.#c(r);l(s)&&s.shadow===e&&c!==void 0&&n.push({owner:c,path:["lights",i,"shadow"],ownerCount:o.length});}}return n.length===1?n[0]:void 0}#x(e){let n=[];for(let r of this.#e.keys()){if(Reflect.get(r,"isShadowBaseNode")!==true||Reflect.get(r,"isShadowNode")===true)continue;let o=this.#c(r);if(o?.k!=="container")continue;let i=Reflect.get(r,"lights");if(!(!Array.isArray(i)||i.length===0))for(let[s,c]of i.entries()){let a=l(c)?c.shadow:void 0,d=l(a)?a.map:void 0;if(!l(d))continue;d._depthTexture===e&&n.push({container:o.key,path:[...o.path,"lights",s,"shadow","map","_depthTexture"]});let f=d.textures;if(Array.isArray(f))for(let[h,k]of f.entries())k===e&&n.push({container:o.key,path:[...o.path,"lights",s,"shadow","map","textures",h]});}}return n.length===1?n[0]:void 0}#p(e){if(!["ReferenceNode","ReferenceBaseNode"].includes(m(e)))return;let n=Reflect.get(e,"property"),r=Reflect.get(e,"uniformType");if(typeof n!="string"||n.length===0||typeof r!="string"||r.length===0)return;let o=Reflect.get(e,"object"),i=o!==null&&typeof o=="object"?this.#v(o):void 0,s=o!==null&&typeof o=="object"?this.#N(o)??this.#r.get(o):void 0,c=w(o),a=c?this.#c(c):void 0;if(o!==null&&typeof o=="object"&&s===void 0&&a===void 0&&i===void 0)return;let d=w(Reflect.get(e,"group")),f=d?z().get(d):void 0;if(d&&f===void 0)return;let h=Reflect.get(e,"count");if(h!==null&&(!Number.isSafeInteger(h)||Number(h)<0))return;let k=Reflect.get(e,"name"),N=i?.owner??a;return N!==void 0?{k:"recipe",id:v.retainedReference,version:1,input:{owner:N,...i===void 0?{}:{path:i.path,ownerCount:i.ownerCount},property:n,uniformType:r,...h===null?{}:{count:Number(h)},...f===void 0?{}:{group:f},...typeof k=="string"&&k.length>0?{name:k}:{}}}:{k:"reference",property:n,uniformType:r,...h===null?{}:{count:Number(h)},...s===void 0?{}:{object:s},...f===void 0?{}:{group:f},...typeof k=="string"&&k.length>0?{name:k}:{}}}#h(e){if(Reflect.get(e,"isMaterialReferenceNode")!==true)return;let n=Reflect.get(e,"property"),r=Reflect.get(e,"uniformType"),o=Reflect.get(e,"referenceType"),i=typeof r=="string"||r===null?r:o;return typeof n=="string"&&(typeof i=="string"||i===null)?{k:"materialCache",property:n,type:i}:void 0}#j(e){if(m(e)!=="UniformNode"||Reflect.get(e,"nodeType")!=="int"||Reflect.get(e,"updateType")!=="render")return;let n=this.#t.builder.material,r=this.#t.builder.object,o=l(r)?r.material:void 0,i=Reflect.get(e,"update");if(typeof i!="function")return;let s=[];l(n)&&s.push({owner:"material",target:n}),l(o)&&o!==n&&s.push({owner:"objectMaterial",target:o});let c=Reflect.get(e,"value"),a=[];for(let{owner:d,target:f}of s){let h=f.steps;if(!Number.isSafeInteger(h)||Number(h)<0||Number(h)>2147483647)continue;let k=Number(h)===2147483647?2147483646:Number(h)+1;try{Reflect.set(f,"steps",k),Reflect.apply(i,e,[{material:n,object:r}]),Reflect.get(e,"value")===k&&a.push(d);}catch{}finally{Reflect.set(f,"steps",h);try{Reflect.apply(i,e,[{material:n,object:r}]);}catch{Reflect.set(e,"value",c);}}}if(a.length===1)return a[0]==="material"?{k:"recipe",id:v.materialSteps,version:1}:{k:"recipe",id:v.materialSteps,version:1,input:{owner:"objectMaterial"}}}#g(e){if(!this.#l.includes(e)||Reflect.get(e,"light")!==void 0)return;let n=m(e);return /^[A-Za-z][A-Za-z0-9]*LightDataNode$/u.test(n)?{k:"recipe",id:v.dynamicLightData,version:1,input:{type:n}}:void 0}#C(e){if(m(e)!=="EventNode"||Reflect.get(e,"eventType")!=="object")return;let n=this.#t.builder.object,r=Reflect.get(e,"callback");if(!l(n)||n.isSkinnedMesh!==true||typeof r!="function")return;let o=n.skeleton;if(!l(o))return;let i=o.boneMatrices,s=o.bones,c=o.update;if(!ArrayBuffer.isView(i)||m(i)!=="Float32Array"||!Array.isArray(s)||s.length===0||typeof c!="function")return;let a=i;if(a.length!==s.length*16)return;let d=this.#t.journal.filter(b=>{let A=Reflect.get(b.node,"value");return m(b.node)==="BufferNode"&&b.type==="buffer"&&b.stage==="vertex"&&Reflect.get(b.node,"bufferType")==="mat4"&&Reflect.get(b.node,"bufferCount")===s.length&&A!==a&&ArrayBuffer.isView(A)&&m(A)==="Float32Array"&&Reflect.get(A,"length")===a.length}),f=[...new Set(d.map(b=>Reflect.get(b.node,"value")))];if(f.length===0)return;let h=new Float32Array(a),k=f.map(b=>new Float32Array(b)),N=Object.getOwnPropertyDescriptor(o,"update"),S={},u=[];try{if(!Reflect.set(o,"update",()=>{}))return;for(let b=0;b<a.length;b++)a[b]=-100000.5-b;Reflect.apply(r,e,[{object:n,frameId:S}]),u=f.filter(b=>b.every((A,x)=>A===a[x]));}catch{return}finally{a.set(h);for(let[b,A]of f.entries())A.set(k[b]);N===void 0?Reflect.deleteProperty(o,"update"):Object.defineProperty(o,"update",N);}let y=u[0];if(u.length!==1||y===void 0)return;let R={k:"recipe",id:v.previousBoneMatrices,version:1,input:{count:s.length}};for(let b of d)Reflect.get(b.node,"value")===y&&(this.#e.set(b.node,R),this.#s.set(b.node,o));}#B(e){if(m(e)!=="EventNode"||Reflect.get(e,"eventType")!=="object")return;let n=this.#t.builder.object,r=Reflect.get(e,"callback");if(!l(n)||n.isInstancedMesh!==true||typeof r!="function")return;let o=n.instanceMatrix,i=l(o)?o.array:void 0,s=l(o)?o.count:void 0;if(!ArrayBuffer.isView(i)||m(i)!=="Float32Array"||!Number.isSafeInteger(s)||Number(s)<1||Reflect.get(i,"length")!==Number(s)*16)return;let c=i,a=this.#t.journal.filter(u=>{let y=Reflect.get(u.node,"value");return m(u.node)==="BufferNode"&&u.type==="buffer"&&u.stage==="vertex"&&Reflect.get(u.node,"bufferType")==="mat4"&&Reflect.get(u.node,"bufferCount")===s&&y!==c&&ArrayBuffer.isView(y)&&m(y)==="Float32Array"&&Reflect.get(y,"length")===c.length}),d=[...new Set(a.map(u=>Reflect.get(u.node,"value")))];if(d.length===0)return;let f=new Float32Array(c),h=d.map(u=>new Float32Array(u)),k=[];try{for(let u=0;u<c.length;u++)c[u]=-200000.5-u;Reflect.apply(r,e,[{object:n}]),k=d.filter(u=>u.every((y,R)=>y===c[R]));}catch{return}finally{c.set(f);for(let[u,y]of d.entries())y.set(h[u]);}let N=k[0];if(k.length!==1||N===void 0)return;let S={k:"recipe",id:v.previousInstanceMatrices,version:1,input:{count:Number(s)}};for(let u of a)Reflect.get(u.node,"value")===N&&(this.#e.set(u.node,S),this.#s.set(u.node,n));this.#f.add(e);}#y(e){if(m(e)!=="EventNode"||Reflect.get(e,"eventType")!=="object")return;let n=this.#t.builder.object,r=Reflect.get(e,"callback"),o=typeof r=="function"?Function.prototype.toString.call(r):"";if(!l(n)||!o.includes("morphTargetsRelative")||!o.includes("morphTargetInfluences")||!o.includes(".reduce")||!o.includes(".update"))return;let i=n.morphTargetInfluences,s=n.geometry,c=n.morphTexture;if(!l(s))return;let a=n.isInstancedMesh===true&&i===void 0&&s.morphTargetsRelative===true&&Number.isSafeInteger(n.count)&&Number(n.count)>1&&l(c);if(!Array.isArray(i)&&!a)return;let d=s.morphAttributes;if(!l(d))return;let f=Array.isArray(d.position)?d.position:[],h=Array.isArray(d.normal)?d.normal:[],k=Array.isArray(d.color)?d.color:[],N=f.length>0?f:h.length>0?h:k;if(N.length===0||Array.isArray(i)&&N.length!==i.length)return;let S=this.#t.journal.some(R=>{let b=Reflect.get(R.node,"value");return m(R.node)==="TextureNode"&&R.type==="texture"&&R.stage==="vertex"&&Reflect.get(R.node,"sampler")===false&&l(b)&&mn(b,s)}),u=this.#t.journal.flatMap((R,b)=>m(R.node)==="UniformArrayNode"?[`${b}:${R.type}/${R.stage}:same=${Reflect.get(R.node,"array")===i}:length=${Array.isArray(Reflect.get(R.node,"array"))?Reflect.get(R.node,"array").length:"na"}`]:[]);if(this.#a.push(`morph=${String(Reflect.get(n,"name")??"")}:targets=${N.length}:influences=${Array.isArray(i)?i.length:"none"}:texture=${S}:arrays=[${u.join(",")}]`),!S)return;if(a){let R=this.#t.journal.filter(C=>m(C.node)==="TextureNode"&&C.type==="texture"&&C.stage==="vertex"&&Reflect.get(C.node,"value")===c);if(R.length===0)return;let b=[];for(let C of this.#t.journal){let U=Reflect.get(C.node,"value");m(C.node)==="UniformNode"&&C.type==="float"&&C.stage==="vertex"&&typeof U=="number"&&Number.isFinite(U)&&!b.some(I=>I.node===C.node)&&b.push({node:C.node,value:U});}let A=[];try{for(let[C,U]of b.entries()){let I=-100000.5-C;if(!Reflect.set(U.node,"value",I)||Reflect.get(U.node,"value")!==I)return}try{Reflect.apply(r,e,[{object:n}]);}catch{}A=b.filter(C=>Reflect.get(C.node,"value")===1).map(C=>C.node);}finally{for(let C of b)Reflect.set(C.node,"value",C.value);}let x=A[0],M=R[0]?.node;return A.length===1&&x!==void 0&&M!==void 0?{base:x,morphTexture:M,count:N.length}:void 0}if(!Array.isArray(i))return;let y=this.#t.journal.flatMap((R,b)=>{let A=Reflect.get(R.node,"array");if(m(R.node)!=="UniformArrayNode"||R.type!=="buffer"||R.stage!=="vertex"||A!==i&&(!Array.isArray(A)||A.length!==i.length))return [];let x=this.#t.journal[b-1];return x===void 0||m(x.node)!=="UniformNode"||x.type!=="float"||x.stage!=="vertex"||typeof Reflect.get(x.node,"value")!="number"||!Number.isFinite(Reflect.get(x.node,"value"))?[]:[{base:x.node,influences:R.node,count:i.length}]});return y.length===1?y[0]:void 0}#_(e){if(m(e)!=="EventNode"||Reflect.get(e,"eventType")!=="object")return;if(this.#f.has(e))return {k:"recipe",id:v.previousInstanceMatricesEvent,version:1};let n=this.#t.builder.object,r=Reflect.get(e,"callback"),o=typeof r=="function"?Function.prototype.toString.call(r):"";if(l(n)&&n.isSkinnedMesh===true&&o.includes("skeleton"))return {k:"recipe",id:v.skinningEvent,version:1};let i=this.#y(e);if(i){let s=this.#e.get(i.base),c=i.influences===void 0?void 0:this.#e.get(i.influences),a=i.morphTexture===void 0?void 0:this.#e.get(i.morphTexture);return s===void 0||c===void 0==(a===void 0)?void 0:{k:"recipe",id:v.morphUpdateEvent,version:1,input:c===void 0?{base:s,morphTexture:a,count:i.count}:{base:s,influences:c,count:i.count}}}}#M(e){if(m(e)!=="MaxMipLevelNode")return;let n=w(Reflect.get(e,"textureNode"));if(!n)return;let r=this.classify(n,"max-mip texture owner");return {k:"recipe",id:v.maxMip,version:1,input:r}}#m(e){if(m(e)!=="CubeMapNode")return;let n=w(Reflect.get(e,"envNode"));if(n)return {k:"recipe",id:v.cubeMap,version:1,input:this.classify(n,"cube-map environment")}}#b(e){if(m(e)!=="Object3DNode")return;let n=Reflect.get(e,"scope");if(!["direction","worldMatrix","position","scale","viewPosition","radius"].includes(String(n)))return;let r=Reflect.get(e,"object3d");if(r===null||typeof r!="object")return;let o=this.#t.builder.object,i="object";if(r!==o){let a=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,d=ge(a).indexOf(r);if(d<0)return;i={sceneObject:d};}let s={k:"recipe",id:v.object3D,version:1,input:{scope:String(n),object:i}};this.#e.set(e,s);let c=w(Reflect.get(e,"uniformNode"));return c&&this.#e.set(c,{k:"owned",owner:s,path:["uniformNode"]}),this.#n(e,"Object3DNode",s,r)}#R(e){let n=w(Reflect.get(e,"textureNode")),r=n?w(Reflect.get(n,"passNode")):void 0;if(!r||Reflect.get(r,"isPassNode")!==true||typeof Reflect.get(r,"setup")!="function")return;let o=F(r),i=this.#e.get(r)??(o?{k:"container",key:o,path:[]}:void 0);if(i===void 0)return;let s={k:"recipe",id:v.passSetupOutput,version:1,input:{owner:i}};return this.#o(e,s),this.#n(e,"pass setup output",s,r)}#k(e){if(m(e)!=="ReflectorNode")return;let n=w(Reflect.get(e,"_reflectorBaseNode")),r=n?w(Reflect.get(n,"textureNode")):void 0;if(!n||m(n)!=="ReflectorBaseNode"||!r||m(r)!=="ReflectorNode")return;let o=Reflect.get(n,"target");if(o===null||typeof o!="object")return;let i=Reflect.get(o,"parent"),s=this.#t.builder.object,c=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,a=null;if(i!==null&&typeof i=="object")if(i===s)a="object";else {let M=ge(c).indexOf(i);if(M<0)return;a={sceneObject:M};}let d=p((M,C)=>{if(M===null||typeof M!="object")return;let U=C.map(I=>Reflect.get(M,I));return U.every(I=>typeof I=="number"&&Number.isFinite(I))?U:void 0},"components"),f=d(Reflect.get(o,"position"),["x","y","z"]),h=d(Reflect.get(o,"quaternion"),["x","y","z","w"]),k=d(Reflect.get(o,"scale"),["x","y","z"]),N=Reflect.get(n,"resolutionScale"),S=Reflect.get(n,"samples");if(!f||!h||!k||typeof N!="number"||!Number.isFinite(N)||!Number.isSafeInteger(S)||Number(S)<0)return;let u=i!==null&&typeof i=="object"?Reflect.get(i,"children"):void 0,y=Array.isArray(u)?u.indexOf(o):-1;if(i!==null&&y<0)return;let R={k:"recipe",id:v.reflector,version:1,input:{resolutionScale:N,generateMipmaps:Reflect.get(n,"generateMipmaps")===true,bounces:Reflect.get(n,"bounces")===true,depth:Reflect.get(n,"depth")===true,samples:Number(S),parent:a,targetIndex:y,position:f,quaternion:h,scale:k}};this.#e.set(r,R),this.#e.set(n,{k:"owned",owner:R,path:["_reflectorBaseNode"]});let b=w(Reflect.get(r,"_depthNode")),A={k:"owned",owner:R,path:["_depthNode"]};b&&this.#e.set(b,A);let x=e===b?A:R;return this.#e.set(e,x),x}#E(e){if(m(e)!=="TextureNode"||Reflect.get(e,"sampler")!==false)return;let n=Reflect.get(e,"value"),r=this.#t.builder.object,o=l(r)?r.geometry:void 0;if(!(!l(r)||!l(n)||!l(o)||this.#r.has(n)||Reflect.get(r,"morphTexture")===n||!mn(n,o)))return {k:"recipe",id:v.morphTargetTexture,version:1}}noteUpdateNode(e){if(m(e)==="PMREMNode"){let a=this.classify(e,"PMREM update node ownership");for(let d of ["_texture","_width","_height","_maxMip"]){let f=w(Reflect.get(e,d));f&&this.#e.set(f,{k:"owned",owner:a,path:[d]});}return}let n=this.#e.get(e);if(n){let a=["ReferenceNode","ReferenceBaseNode"].includes(m(e))?w(Reflect.get(e,"node")):void 0;a&&this.#e.set(a,{k:"owned",owner:n,path:["node"],prime:"reference"});return}let r=m(e)==="RTTNode"?F(e):void 0;if(r?.startsWith("@three-blocks-input:setup-rtt-")===true){let a={k:"container",key:r,path:[]};this.#e.set(e,a);let d=Reflect.get(e,"value");d!==null&&typeof d=="object"&&this.#r.set(d,{container:r,path:["value"]});return}if(this.#R(e))return;let o=this.#g(e);if(o){this.#o(e,o);return}this.#C(e),this.#B(e);let i=this.#y(e);if(i?.influences){let a=Reflect.get(i.influences,"elementType");this.#e.set(i.influences,{k:"inputNode",nodeClass:"uniformArray",value:{container:"@object",path:["morphTargetInfluences"]},access:null,uniformType:typeof a=="string"?a:null});}if(m(e)==="ReflectorBaseNode"){let a=w(Reflect.get(e,"textureNode"));a&&this.#k(a);}if(m(e)==="Object3DNode"){this.#b(e);return}if(m(e)==="CubeMapNode"){let a=this.classify(e,"cube-map update node ownership"),d=w(Reflect.get(e,"envNode")),f=w(Reflect.get(e,"_cubeTextureNode"));f&&f!==d&&this.#e.set(f,{k:"owned",owner:a,path:["_cubeTextureNode"]});return}let s=this.#h(e)??this.#p(e);if(s===void 0&&["ReferenceNode","ReferenceBaseNode"].includes(m(e))){let a=F(e);a!==void 0&&(s={k:"container",key:a,path:[]});}if(s===void 0){["TextureNode","Texture3DNode","CubeTextureNode"].includes(m(e))&&(s=this.classify(e,"texture update node ownership"));let a=s===void 0&&Reflect.get(e,"isTextureNode")===true?hn(Reflect.get(e,"value")):void 0;if(l(a)&&a.t==="tex"&&this.classify(e,"update node ownership"),s===void 0)return}this.#e.set(e,s);let c=w(Reflect.get(e,"node"));c&&this.#e.set(c,{k:"owned",owner:s,path:["node"],prime:"reference"});}shouldOmitUpdateNode(e){return m(e)==="InspectorNode"?true:m(e)==="EventNode"&&Reflect.get(e,"eventType")==="frame"&&l(this.#t.builder.object)&&Reflect.get(this.#t.builder.object,"isInstancedMesh")===true}#L(e){if(Reflect.get(e,"isTextureNode")!==true)return;let n=Reflect.get(e,"update");if(typeof n!="function")return;let r=p(()=>{try{Reflect.apply(n,e,[{}]);}catch{}},"invoke");for(let o of this.#w()){if(Reflect.get(o.light,"isSpotLight")!==true)continue;let i=Reflect.get(o.light,"map");if(i===null||typeof i!="object")continue;let s={},c=false;try{Reflect.set(o.light,"map",s),r(),c=Reflect.get(e,"value")===s;}finally{Reflect.set(o.light,"map",i),r();}if(c)return {k:"lightUniform",fn:"spotLightMap",...o.address}}}#w(){let e=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,n=this.#d.map((r,o)=>({light:r,address:{light:o}}));for(let[r,o]of ct(e).entries())this.#d.includes(o)||n.push({light:o,address:{light:this.#d.length+r,sceneLight:r}});return n}#O(e){let n=this.#w();if(n.length===0)return;if(Reflect.get(e,"isReferenceNode")===true){let i=Reflect.get(e,"object"),s=Reflect.get(e,"property");if(i===null||typeof i!="object"||typeof s!="string")return;let c=Vn[s],a=s==="near"?"shadowCameraNear":s==="far"?"shadowCameraFar":void 0;for(let d of n){let f=Reflect.get(d.light,"shadow");if(!(f===null||typeof f!="object")){if(c!==void 0&&f===i)return {k:"lightUniform",fn:c,...d.address};if(a!==void 0&&Reflect.get(f,"camera")===i)return {k:"lightUniform",fn:a,...d.address}}}return}if(Reflect.get(e,"isUniformNode")!==true)return;let r=Reflect.get(e,"update");if(typeof r!="function"||typeof Reflect.get(e,"value")!="number")return;let o=p(()=>{try{Reflect.apply(r,e,[{}]);}catch{}},"invoke");for(let i of n){let s=Reflect.get(i.light,"shadow"),c=s!==null&&typeof s=="object"?Reflect.get(s,"camera"):void 0;if(!(c===null||typeof c!="object"))for(let a of ["shadowCameraNear","shadowCameraFar"]){let d=a==="shadowCameraNear"?"near":"far",f=Reflect.get(c,d);if(typeof f!="number")continue;let h=f+12345.625,k=false;try{Reflect.set(c,d,h),o(),k=Reflect.get(e,"value")===h;}finally{Reflect.set(c,d,f),o();}if(k)return {k:"lightUniform",fn:a,...i.address}}}}#I(e){if(m(e)!=="BufferNode")return false;let n=Reflect.get(this.#t.builder,"getNodeProperties");if(typeof n!="function")return false;for(let r of this.#e.keys()){if(m(r)!=="RangeNode")continue;let o=Reflect.apply(n,this.#t.builder,[r]),i=l(o)?w(o.outputNode):void 0;if(i&&Ne(i).has(e))return true}return false}classify(e,n){let r=Reflect.get(e,"name");if(typeof r=="string"&&Xn.has(r))return {k:"namedRenderUniform",name:r};let o=this.#A(e);if(o)return this.#e.set(e,o),this.#n(e,n,o);let i=this.#T(e);if(i)return this.#e.set(e,i),this.#n(e,n,i);let s=this.#e.get(e),c=this.#t.retainedGraph.nodes.get(e);if(s&&s!==c)return this.#n(e,n,Rt(s));let a=this.#b(e);if(a)return a;let d=this.#R(e);if(d)return d;let f=this.#p(e);if(f)return this.#e.set(e,f),f.k==="recipe"?this.#n(e,n,f):f;let h=this.#h(e);if(h)return this.#e.set(e,h),h;let k=this.#j(e);if(k)return this.#e.set(e,k),this.#n(e,n,k);let N=this.#g(e);if(N)return this.#e.set(e,N),this.#n(e,n,N);let S=this.#_(e);if(S)return this.#e.set(e,S),this.#n(e,n,S);let u=this.#M(e);if(u){this.#e.set(e,u);let g=w(Reflect.get(e,"textureNode")),T=g?Reflect.get(g,"value"):void 0;return this.#n(e,n,u,T!==null&&typeof T=="object"?T:g)}let y=this.#m(e);if(y)return this.#e.set(e,y),this.#n(e,n,y);let R=this.#E(e);if(R){this.#e.set(e,R);let g=Reflect.get(e,"value");return this.#n(e,n,R,g!==null&&typeof g=="object"?g:e)}let b=w(Reflect.get(e,"referenceNode")),A=b!==void 0?this.#e.get(b):void 0;if(b!==void 0&&A===void 0){let g=F(b);g&&(A={k:"container",key:g,path:[]});}let x=Reflect.get(e,"value"),M=x!==null&&typeof x=="object"?this.#r.get(x)??an(x):void 0,C=yn(A);if(n.startsWith("uniform ")&&A!==void 0&&w(Reflect.get(e,"compareNode"))===void 0&&(C?.container.startsWith("@three-blocks-input:")!==true||M===void 0))return this.#e.set(e,A),A;let U=m(e)==="ReflectorNode"?F(e):void 0;if(U!==void 0){let g={k:"container",key:U,path:[]};return this.#e.set(e,g),g}let I=this.#k(b&&m(b)==="ReflectorNode"?b:e);if(I)return this.#e.set(e,I),this.#n(e,n,I);let Bn=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,qe=Reflect.get(e,"light");if(qe!==null&&typeof qe=="object"){let g=ct(Bn).indexOf(qe);if(g>=0){let T={k:"lightNode",light:g,sceneLight:g};return Reflect.get(e,"isShadowBaseNode")===true?{k:"owned",owner:T,path:["shadowNode"]}:T}}let Je=this.#S(e);if(Je)return this.#e.set(e,Je),this.#n(e,n,Je);let Ye=this.#L(e);if(Ye)return this.#e.set(e,Ye),Ye;let K=Reflect.get(e,"value"),ue=Reflect.get(e,"array");if(K!==null&&typeof K=="object"||ue!==null&&typeof ue=="object")for(let[g,T]of this.#e){if(g===e)continue;let _=K!==null&&typeof K=="object"&&Reflect.get(g,"value")===K,E=ue!==null&&typeof ue=="object"&&Reflect.get(g,"array")===ue;if(!(!_&&!E)){if(gn(g,e))return this.#e.set(e,T),T;if(_&&["TextureNode","Texture3DNode","CubeTextureNode"].includes(m(e))){let O=wr(T);if(O!==void 0){this.#r.set(K,O);break}}}}if(K!==null&&typeof K=="object")for(let[g,T]of z()){if(Reflect.get(g,"isViewportNode")!==true)continue;let _=w(Reflect.get(g,"_output"));if(_===void 0||Reflect.get(_,"value")!==K||!gn(_,e))continue;let E={k:"owned",owner:{k:"tsl",name:T},path:["_output"]};return this.#e.set(e,E),E}let Ct=z().get(e);if(Ct)return {k:"tsl",name:Ct};let Bt=ut(e),Ze=Bt==="uniformArray"?Reflect.get(e,"array"):Reflect.get(e,"value"),_t=Ze!==null&&typeof Ze=="object"?this.#r.get(Ze):void 0;if(!(_t!==void 0&&!_t.container.startsWith("@three-blocks-input:"))){for(let[g,T]of this.#e)for(let _ of Object.getOwnPropertyNames(g))if(Reflect.get(g,_)===e){if(Bt!==void 0&&er(T)||(T.k==="inputNode"||T.k==="inputValue"||T.k==="recipe")&&!Qn.has(_))continue;let E={k:"owned",owner:T,path:[_]};this.#e.set(e,E);let O=this.#s.get(g);return O&&this.#s.set(e,O),E}}for(let[g,T]of z()){for(let _ of Object.getOwnPropertyNames(g))if(Reflect.get(g,_)===e)return {k:"owned",owner:{k:"tsl",name:T},path:[_]};for(let[_,E]of Ne(g))if(_===e)return {k:"owned",owner:{k:"tsl",name:T},path:E}}let Mt={ViewportDepthTextureNode:"viewportDepthTexture",ViewportSharedTextureNode:"viewportSharedTexture",ViewportTextureNode:"viewportMipTexture"}[m(e)];if(Mt!==void 0){let g={k:"inputValue",nodeClass:Mt,json:{viewport:this.#i.viewportInput(e)}};return this.#e.set(e,g),g}let Ce=m(e)==="PassTextureNode"?e:b&&m(b)==="PassTextureNode"?b:void 0;if(Ce){let g=w(Reflect.get(Ce,"passNode")),T=g?F(g):void 0,_=g?this.#e.get(g)??(T?{k:"container",key:T,path:[]}:void 0):void 0,E=g?Object.getOwnPropertyNames(g).filter(O=>w(Reflect.get(g,O))===Ce):[];if(_&&E.length===1){let O={k:"owned",owner:_,path:[E[0]]};return this.#e.set(Ce,O),this.#e.set(e,O),O}}if(m(e)==="PassMultipleTextureNode"){let g=w(Reflect.get(e,"passNode")),T=Reflect.get(e,"textureName"),_=Reflect.get(e,"previousTexture")===true,E=_?"_previousTextureNodes":"_textureNodes",O=g?F(g):void 0,Z=g?this.#e.get(g)??[...this.#e].find(([q])=>w(q)===g)?.[1]??(O?{k:"container",key:O,path:[]}:void 0):void 0,ne=g?Reflect.get(g,E):void 0,fe=l(ne)&&typeof T=="string"?w(Reflect.get(ne,T)):void 0;if(Z&&typeof T=="string"&&fe){let q={k:"recipe",id:v.passTexture,version:1,input:{owner:Z,name:T,previous:_}};return this.#e.set(e,q),q}this.#a.push(`passTexture=${m(g)}/${String(T)}/${E} owner=${Z?JSON.stringify(Z):"missing"} collection=${m(ne)} canonical=${m(fe)}`);}let Be=F(e),L=ut(e);if(L){let g=L==="uniformArray"?Reflect.get(e,"array"):Reflect.get(e,"value"),T=Reflect.get(e,"access"),_=L==="uniformArray"?Reflect.get(e,"elementType"):L==="storage"||L==="buffer"||L==="bufferAttribute"?Reflect.get(e,"bufferType"):Reflect.get(e,"uniformType"),E=typeof T=="string"?T:null,O=typeof _=="string"?_:null,Z=w(Reflect.get(e,"group"))??w(Reflect.get(e,"groupNode")),ne=Z?z().get(Z):void 0,fe=ne?{group:ne}:{},q=Reflect.get(e,"bufferCount"),Ut=L==="storage"||L==="buffer"?{bufferCount:Number.isSafeInteger(q)&&Number(q)>=0?Number(q):0,...L==="storage"?{atomic:Reflect.get(e,"isAtomic")===true,pbo:Reflect.get(e,"isPBO")===true}:{}}:{},$t=g!==null&&typeof g=="object"?an(g):void 0,On=g!==null&&typeof g=="object"&&(Reflect.get(g,"isStorageBufferAttribute")===true||Reflect.get(g,"isStorageInstancedBufferAttribute")===true),_e=g!==null&&typeof g=="object"?this.#r.get(g):void 0,In=_e!==void 0&&!_e.container.startsWith("@")?_e:void 0,X=g!==null&&typeof g=="object"?this.#x(g)??In??(On?$t:void 0)??_e??$t:void 0;if(!X&&g!==null&&typeof g=="object"){let $=Reflect.get(g,"array");$!==null&&typeof $=="object"&&(X=this.#r.get($));}let Ft=L==="bufferAttribute"?{stride:Number.isSafeInteger(Reflect.get(e,"bufferStride"))?Number(Reflect.get(e,"bufferStride")):0,offset:Number.isSafeInteger(Reflect.get(e,"bufferOffset"))?Number(Reflect.get(e,"bufferOffset")):0,usage:Number.isSafeInteger(Reflect.get(e,"usage"))?Number(Reflect.get(e,"usage")):0,instanced:Reflect.get(e,"instanced")===true||g!==null&&typeof g=="object"&&(Reflect.get(g,"isInstancedBufferAttribute")===true||Reflect.get(g,"isInstancedInterleavedBuffer")===true)||X?.path.includes("instanceMatrix")===true||X?.path.includes("instanceColor")===true}:{},Dt=["texture","cubeTexture","texture3D"].includes(L)&&w(Reflect.get(e,"compareNode"))?{comparison:true}:{},le=["texture","cubeTexture"].includes(L)?yn(A):void 0,Gt=le!==void 0&&(le.container.startsWith("@three-blocks-input:")!==true||X===void 0||X.container===le.container),Kt=Gt?le:X??le,Pn=Gt?`${L}Reference`:L,Qe=Reflect.get(e,"name"),zt=typeof Qe=="string"&&Qe.length>0?{name:Qe}:{},Q=Kt?{k:"inputNode",nodeClass:Pn,value:Kt,access:E,uniformType:O,...zt,...fe,...Ut,...Ft,...Dt}:void 0;if(!Q&&Be!==void 0){let $={k:"container",key:Be,path:[]};return this.#e.set(e,$),$}if(!Q){let $=this.#I(e)?kr(g):hn(g);$!==void 0&&(Q={k:"inputValue",nodeClass:L,json:$,access:E,uniformType:O,...zt,...fe,...Ut,...Ft,...Dt});}if(Q){let $=JSON.stringify(Q),Ve=this.#u.get($)??0;this.#u.set($,Ve+1);let Un=Ve===0?Q:{...Q,n:Ve},Ht=nr(Un,g);return this.#e.set(e,Ht),this.#n(e,n,Ht,g!==null&&typeof g=="object"?g:e)}}if(s)return this.#n(e,n,Rt(s));if(Be!==void 0){let g={k:"container",key:Be,path:[]};return this.#e.set(e,g),g}let Xe=this.#O(e);if(Xe)return this.#e.set(e,Xe),this.#n(e,n,Xe);let Et=p(g=>m(g)===m(e)&&m(Reflect.get(g,"value"))===m(Reflect.get(e,"value"))&&Reflect.get(g,"updateType")===Reflect.get(e,"updateType"),"comparable"),_n=[...z()].filter(([g])=>Et(g)).slice(0,8).map(([,g])=>g),Mn=[...this.#e].filter(([g])=>Et(g)).slice(0,8).map(([g,T])=>`${JSON.stringify(T)}@${dn(Reflect.get(g,"value"))}`),Lt=l(Reflect.get(e,"value"))?Reflect.get(Reflect.get(e,"value"),"uuid"):void 0,Ot=typeof Lt=="string"?[...this.#e].filter(([g])=>l(Reflect.get(g,"value"))&&Reflect.get(Reflect.get(g,"value"),"uuid")===Lt).slice(0,12).map(([g,T])=>`${m(g)}:${JSON.stringify(T)}`):[],It=W("containers",[this.#t.scene]),En=Array.isArray(It)?It.slice(0,64).flatMap(g=>{if(!l(g)||typeof g.key!="string"||!l(g.target))return [];let T=g.target,_=Object.keys(T).filter(E=>Reflect.get(T,E)===Reflect.get(e,"value"));return [`${g.key}/${m(T)}${_.length>0?`:${_.join(",")}`:""}`]}):[],Pt=m(e)==="EventNode"?Reflect.get(e,"callback"):void 0,Ln=typeof Pt=="function"?Function.prototype.toString.call(Pt).replaceAll(/\s+/gu," ").slice(0,320):void 0,D=this.#t.builder.object;throw new Error(`Cannot address ${m(e)}${typeof r=="string"&&r?` "${r}"`:""} used by ${n} for shader key "${this.#t.key}". Node metadata: value=${m(Reflect.get(e,"value"))}, update=${typeof Reflect.get(e,"update")=="function"?Reflect.get(e,"update").name||"anonymous":"none"}, updateType=${String(Reflect.get(e,"updateType"))}.`+(L?` Input metadata: class=${L}, value=${m(Reflect.get(e,"value"))}, access=${String(Reflect.get(e,"access"))}, uniformType=${String(Reflect.get(e,"uniformType"))}.`:"")+` Similar semantic inputs: tsl=[${_n.join(", ")}], paths=[${Mn.join(", ")}].`+(l(Reflect.get(e,"value"))&&Reflect.get(Reflect.get(e,"value"),"isTexture")===true?` Texture value: ${dn(Reflect.get(e,"value"))}.`:"")+(Ot.length>0?` Same-texture paths: [${Ot.join(", ")}].`:"")+` Classifier diagnostics: ${this.#a.join("; ")}. Registered containers: [${En.join(", ")}].`+(Reflect.get(e,"isStorageBufferNode")===true?` Storage metadata: type=${String(Reflect.get(e,"bufferType"))}, count=${String(Reflect.get(e,"bufferCount"))}, value=${m(Reflect.get(e,"value"))}.`:"")+(m(e)==="MaterialReferenceNode"?` Material reference metadata: flag=${String(Reflect.get(e,"isMaterialReferenceNode"))}, property=${String(Reflect.get(e,"property"))}, uniformType=${String(Reflect.get(e,"uniformType"))}.`:"")+(m(e)==="EventNode"?` Event metadata: type=${String(Reflect.get(e,"eventType"))}, object=${m(D)}, objectName=${l(D)?String(D.name??""):""}, instanced=${l(D)&&D.isInstancedMesh===true}, skinned=${l(D)&&D.isSkinnedMesh===true}, morphs=${l(D)&&Array.isArray(D.morphTargetInfluences)?D.morphTargetInfluences.length:0}, callback=${Ln??"none"}.`:""))}};function ft(t){return Array.isArray(t)?t.map(w).filter(e=>e!==void 0):[]}p(ft,"nodeArray");function Ar(t,e,n){let r=e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),o=new RegExp(`struct\\s+${r}Struct\\s*\\{([\\s\\S]*?)\\};`,"u"),i=[t.vertexShader,t.fragmentShader,t.computeShader].filter(a=>typeof a=="string"),s;for(let a of i){let d=o.exec(a)?.[1];if(d!==void 0&&(s=[...d.matchAll(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*:/gmu)].map(f=>f[1]).filter(f=>f!==void 0),s.length>0))break}if(!s||s.length===0)return;let c=new Map(n.map(a=>[a.name,a.type]));if(!s.some(a=>!c.has(a)))return s.map(a=>({name:a,type:c.get(a)}))}p(Ar,"wgslUniformLayout");function Tr(t,e,n){let r=[t.vertexShader,t.fragmentShader].filter(s=>typeof s=="string"),o=qt(r,e);if(!o||o.length===0)return;let i=new Map(n.map(s=>[s.name,s.type]));if(!o.some(s=>!i.has(s)))return o.map(s=>({name:s,type:i.get(s)}))}p(Tr,"glslUniformLayout");var vr=[{directive:/(?:^|\n)\s*enable\s+subgroups\s*;/u,feature:"subgroups"},{directive:/(?:^|\n)\s*enable\s+subgroups[-_]f16\s*;/u,feature:"subgroups-f16"},{directive:/(?:^|\n)\s*enable\s+f16\s*;/u,feature:"shader-f16"},{directive:/(?:^|\n)\s*enable\s+clip_distances\s*;/u,feature:"clip-distances"},{directive:/(?:^|\n)\s*enable\s+dual_source_blending\s*;/u,feature:"dual-source-blending"}];function xr(t){if(ee===pe)return Jt(t);let e=[];for(let n of vr)t.some(r=>r!==null&&n.directive.test(r))&&e.push(n.feature);return e}p(xr,"shaderRequirements");function jr(t,e){let n=new Map,r=new Set,o=[];for(let i of t){let s=e(i.node,`uniform ${i.name??"<generated>"}`),c=JSON.stringify(s),a=n.get(c);a===void 0&&(a=new Map,n.set(c,a));let d=a.get(i.nid);d===void 0&&(d=a.size,a.set(i.nid,d));let f=`${c}\0${d}\0${i.stage}`;r.has(f)||(r.add(f),o.push({address:s,instance:d,type:i.type,stage:i.stage,name:i.name}));}return o}p(jr,"reduceJournal");function Cr(t,e){if(e==="NodeStorageBuffer"||e==="StorageBuffer"){let n=t.access;return typeof n=="string"?{access:n}:{}}if(e.includes("Sampled")){let n=t.store===true,r=t.access;return {store:n,...n&&typeof r=="string"?{access:r}:{}}}return {}}p(Cr,"capturedBindingAccess");function Br(t,e,n){let r=jt(t.builder,t.kind);if(!r)throw new Error(`Shader key "${t.key}" has no live build target.`);let o=new At({...t,target:r,retainedGraph:n},e),i=ft(t.builder.updateNodes),s=ft(t.builder.updateBeforeNodes),c=ft(t.builder.updateAfterNodes);for(let u of [...i,...s,...c])o.noteUpdateNode(u);let a=jr(t.journal,(u,y)=>o.classify(u,y)),d=typeof t.builder.getAttributesArray=="function"?Reflect.apply(t.builder.getAttributesArray,t.builder,[]):[],f=Array.isArray(d)?d.map((u,y)=>{if(!l(u)||typeof u.name!="string"||typeof u.type!="string")throw new Error(`Shader attribute ${y} is invalid.`);let R=w(u.node);return {name:u.name,type:u.type,node:R?o.classify(R,`attribute ${u.name}`):null}}):[],h=typeof t.builder.getBindings=="function"?Reflect.apply(t.builder.getBindings,t.builder,[]):[],k=Array.isArray(h)?h.map((u,y)=>{if(!l(u)||!Array.isArray(u.bindings))throw new Error(`Shader bind group ${y} is invalid.`);return {name:typeof u.name=="string"?u.name:`group-${y}`,bindings:u.bindings.map((R,b)=>{if(!l(R)||typeof R.name!="string")throw new Error(`Shader binding ${y}/${b} is invalid.`);let A=nt(R),x;if(A==="NodeUniformsGroup"){if(!Array.isArray(R.uniforms))throw new Error(`Shader uniform group ${y}/${b} has no member list.`);let M=R.uniforms.map((C,U)=>{if(!l(C)||typeof C.name!="string"||typeof C.getType!="function")throw new Error(`Shader uniform ${y}/${b}/${U} is invalid.`);let I=Reflect.apply(C.getType,C,[]);if(typeof I!="string")throw new Error(`Shader uniform ${y}/${b}/${U} has no stable type.`);return {name:C.name,type:I}});x=(ee===pe?Tr:Ar)(t.builder,R.name,a)??M;}return {name:R.name,kind:A,...Cr(R,A),...x===void 0?{}:{uniforms:x}}})}}):[],N=l(t.builder.observer)?{hasNode:t.builder.observer.hasNode===true,hasAnimation:t.builder.observer.hasAnimation===true}:null,S=p(u=>typeof t.builder[u]=="string"?t.builder[u]:null,"shader");return {key:t.key,vertexShader:S("vertexShader"),fragmentShader:S("fragmentShader"),computeShader:S("computeShader"),declarations:a,attributes:f,bindGroups:k,updateNodes:i.filter(u=>!o.shouldOmitUpdateNode(u)).map(u=>o.classify(u,"updateNodes")),updateBeforeNodes:s.filter(u=>!o.shouldOmitUpdateNode(u)).map(u=>o.classify(u,"updateBeforeNodes")),updateAfterNodes:c.filter(u=>!o.shouldOmitUpdateNode(u)).map(u=>o.classify(u,"updateAfterNodes")),requirements:xr([S("vertexShader"),S("fragmentShader"),S("computeShader")]),observer:N,hardwareClipping:t.builder.hardwareClipping===true}}p(Br,"entryFromSnapshot");function lt(t){return (t??"").replace(/\b(nodeUniform|nodeVar|nodeVarying|nodeAttribute|NodeBuffer_|nodeCode|buffer)\d+\b/gu,"$1#").split(`
|
|
1
|
+
var $n=Object.defineProperty;var p=(t,e)=>$n(t,"name",{value:e,configurable:true});var Me="three-webgpu-r185-v1",pe="three-webgl-r185-v1",et=["fragmentNode","vertexNode","colorNode","positionNode","normalNode","opacityNode","alphaTestNode","backdropNode","backdropAlphaNode","emissiveNode","metalnessNode","roughnessNode","clearcoatNode","clearcoatRoughnessNode","transmissionNode","thicknessNode","iorNode","outputNode","mrtNode","depthNode","castShadowNode","receivedShadowNode","maskNode","envNode"];var J=["_renderContexts","_renderContexts"],v=Object.freeze({renderContextMrt:"three-r185-render-context-mrt",renderContextInput:"three-r185-render-context-input",skinningEvent:"three-r185-skinning-event",previousBoneMatrices:"three-r185-previous-bone-matrices",previousInstanceMatrices:"three-r185-previous-instance-matrices",previousInstanceMatricesEvent:"three-r185-previous-instance-matrices-event",dynamicLightData:"three-r185-dynamic-light-data",morphUpdateEvent:"three-r185-morph-update-event",maxMip:"three-r185-max-mip",morphTargetTexture:"three-r185-morph-target-texture",cubeMap:"three-r185-cube-map",passTexture:"three-r185-pass-texture",reflector:"three-r185-reflector",object3D:"three-r185-object3d",passSetupOutput:"three-r185-pass-setup-output",retainedLightUniform:"three-r185-retained-light-uniform",retainedReference:"three-r185-retained-reference",retainedShadowChild:"three-r185-retained-shadow-child",retainedShadowFar:"three-r185-retained-shadow-far",materialSteps:"three-r185-material-steps"});function tt(t){let e=/^(.*)-([^-]+)-(-?\d+)$/u.exec(t);if(e?.[1]===void 0||e[2]===void 0||e[3]===void 0)return;let n=Number(e[3]);if(Number.isSafeInteger(n))return {attachmentState:e[1],mrtState:e[2],callDepth:n}}p(tt,"parseThreeR185RenderContextKey");function Wt(t){return t==="185"||t===185}p(Wt,"supportsThreeR185Revision");var Fn=new Map([["GL_ANGLE_multi_draw","WEBGL_multi_draw"],["GL_OVR_multiview2","OVR_multiview2"],["GL_ANGLE_clip_cull_distance","WEBGL_clip_cull_distance"]]);function qt(t,e){let n=e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),r=new RegExp(`layout\\s*\\(\\s*std140\\s*\\)\\s*uniform\\s+${n}\\s*\\{([\\s\\S]*?)\\}\\s*;`,"u");for(let o of t){let i=r.exec(o)?.[1];if(i===void 0)continue;let s=i.split(";").flatMap(c=>{let a=/^(?:lowp\s+|mediump\s+|highp\s+)?[A-Za-z_][A-Za-z0-9_]*\s+([A-Za-z_][A-Za-z0-9_]*)\s*(?:\[[^\]]*\])?$/u.exec(c.trim());return a?.[1]===void 0?[]:[a[1]]});if(s.length>0)return s}}p(qt,"capturedGlslUniformNames");function Jt(t){let e=new Set;for(let n of t)if(n!==null)for(let r of n.matchAll(/^\s*#extension\s+([A-Za-z0-9_]+)\s*:\s*require\s*$/gmu)){let o=r[1],i=o===void 0?void 0:Fn.get(o);if(i===void 0)throw new Error(`Captured GLSL requires unsupported extension directive "${o}".`);e.add(i);}return [...e].sort()}p(Jt,"capturedGlslRequirements");function Dn(t){let e=t.constructor;return (typeof e=="function"||typeof e=="object"&&e!==null)&&typeof Reflect.get(e,"name")=="string"?String(Reflect.get(e,"name")):"unknown"}p(Dn,"constructorName");function nt(t){let e=t,n=p(o=>e[o]===true,"flag"),r=typeof e.textureNode=="object"&&e.textureNode!==null||typeof e.nodeUniform=="object"&&e.nodeUniform!==null;return n("isNodeUniformsGroup")?"NodeUniformsGroup":n("isUniformsGroup")?"UniformsGroup":n("isNodeUniformBuffer")?"NodeUniformBuffer":n("isUniformBuffer")?"UniformBuffer":n("isStorageBuffer")?r?"NodeStorageBuffer":"StorageBuffer":n("isSampledCubeTexture")?r?"NodeSampledCubeTexture":"SampledCubeTexture":n("isSampledTexture3D")?"NodeSampledTexture3D":n("isSampled3DTexture")?"Sampled3DTexture":n("isSampledArrayTexture")?r?"NodeSampledArrayTexture":"SampledArrayTexture":n("isSampledTexture")?r?"NodeSampledTexture":"SampledTexture":n("isSampler")?r?"NodeSampler":"Sampler":typeof e.kind=="string"?e.kind:Dn(t)}p(nt,"capturedBindingKind");var Yt="three-webgpu-r186dev-v1";function Zt(t){return t==="186dev"}p(Zt,"supportsThreeR186DevRevision");var Xt="three-blocks.shader-capture.runtime.v1";var zn=Symbol.for("three-blocks.shader-capture.cache.v1"),Hn=Symbol.for("three-blocks.shader-capture.cache-value.v1"),Wn=Symbol.for("three-blocks.shader-input-registry.v1"),ht="/__three-blocks/shaders/capture",oe="/__three-blocks/shaders/telemetry",je=4096,qn=5,Jn=65536,Qt=256*1024,Yn=1e3,Zn=/^[a-z0-9][a-z0-9_-]{0,63}$/u,ee=Me,Xn=new Set(["cameraProjectionMatrix","cameraProjectionMatrixInverse","cameraViewMatrix","cameraWorldMatrix","cameraNormalMatrix","cameraPosition"]),rt=["lightPosition","lightTargetPosition","lightViewPosition","lightShadowMatrix"],Qn=new Set(["_texture","_width","_height","_maxMip","_matrixUniform","_flipYUniform"]),Vn={bias:"shadowBias",intensity:"shadowIntensity",normalBias:"shadowNormalBias",radius:"shadowRadius",blurSamples:"shadowBlurSamples",mapSize:"shadowMapSize"},B={buildCalls:0,renderBuilds:0,computeBuilds:0,registeredBuilds:0,registeredRenderBuilds:0,registeredComputeBuilds:0,buildMs:0,syncBuildMs:0,asyncBuildElapsedMs:0,precompiledSetupMs:0,maxSyncBuildMs:0,maxPrecompiledSetupMs:0,hydrationMs:0,maxHydrationMs:0,injected:0,injectedRender:0,injectedCompute:0,missed:0,missedRender:0,missedCompute:0,missedKeys:[]},j={capture:false,forceLive:false,driven:false,settleFrames:60,readiness:{},transform:1},Ee,Rn=new WeakMap,Vt=new WeakSet,en=new WeakSet,gt=new WeakMap,yt=new Set,kn=new WeakMap,Pe=[],Te=[],tn=new WeakMap,nn=new WeakMap,rn=new WeakMap,on=new WeakMap,V,we=0,ot=false,ve=false,te="default",se,ae,re=false,Ue=0,Le,$e=0,Fe=0,De,de=[],sn=false,P,G,Ge={},be,Re=false;function Ke(t){return /^.+\/input-[a-zA-Z0-9_-]+-\d{4}$/u.test(t)}p(Ke,"isAutomaticInputContainerKey");function l(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}p(l,"isRecord");function wn(){let t=Reflect.get(globalThis,Wn);return l(t)&&t.version===1?t:void 0}p(wn,"retainedInputRegistry");function F(t){let e=wn(),n=e?.keyFor;if(typeof n!="function")return;let r=Reflect.apply(n,e,[t]);return typeof r=="string"&&r.startsWith("@three-blocks-input:")?r:void 0}p(F,"retainedInputKey");function an(t){if(t===null||typeof t!="object")return;let e=wn(),n=e?.locationForValue;if(typeof n=="function"){let i=Reflect.apply(n,e,[t]);if(l(i)&&typeof i.key=="string"&&i.key.startsWith("@three-blocks-input:")&&Array.isArray(i.path)&&i.path.every(s=>s==="value"||s==="array"))return {container:i.key,path:i.path}}let r=e?.keyForValue;if(typeof r!="function")return;let o=Reflect.apply(r,e,[t]);return typeof o=="string"&&o.startsWith("@three-blocks-input:")?{container:o,path:["value"]}:void 0}p(an,"retainedInputValueLocation");function mt(t,e=new Set){if(t===null||typeof t!="object"||e.has(t))return;if(e.add(t),Array.isArray(t)){for(let r of t){let o=mt(r,e);if(o)return o}return}let n=t;for(let r of ["key","container"]){let o=n[r];if(typeof o=="string"&&Ke(o))return o}for(let r of Object.values(n)){let o=mt(r,e);if(o)return o}}p(mt,"automaticInputContainerReference");function bt(t,e=new Set){if(t===null||typeof t!="object"||e.has(t))return;if(e.add(t),Array.isArray(t)){for(let i of t){let s=bt(i,e);if(s)return s}return}let n=t,r=n.container,o=n.path;if(typeof r=="string"&&Array.isArray(o)){let i=o.filter(s=>typeof s=="string");if(r==="@renderer"&&i.includes(J[0])||r==="@object"&&i.includes("_renderer"))return `${r}.${i.join(".")}`}for(let i of Object.values(n)){let s=bt(i,e);if(s)return s}}p(bt,"transientRendererReference");function ze(t){return l(t)&&t.isNode===true}p(ze,"isNode");function w(t){if(l(t)&&typeof t.getSelf=="function"){let e=t.getSelf();return ze(e)?e:void 0}return ze(t)?t:void 0}p(w,"nodeFrom");function Ne(t){let e=new Map;if(t.isNode!==true)return e;e.set(t,[]);let n=[t];for(let r=0;r<n.length;r++){let o=n[r];if(!o||typeof o.getSerializeChildren!="function")continue;let i=e.get(o)??[],s=0;for(let c of o.getSerializeChildren()){let a=w(c.childNode);if(a&&!e.has(a)&&(e.set(a,[...i,s]),n.push(a)),s++,s>je)throw new Error("Shader node graph exceeds the capture child limit.")}}return e}p(Ne,"indexNodeGraph");function Rt(t){if(t.k==="owned"){let e=Rt(t.owner);return e===t.owner?t:{...t,owner:e}}if(t.k==="container"&&t.key==="@renderer"&&t.path.length>=4&&t.path[0]===J[0]&&t.path[1]===J[1]&&t.path.at(-1)==="mrt"){let e=t.path[2],n=typeof e=="string"?tt(e):void 0;if(n!==void 0){let r=Nn(n.attachmentState);return {k:"recipe",id:v.renderContextMrt,version:1,input:{attachmentState:n.attachmentState,callDepth:n.callDepth,...r===void 0?{}:{samples:r}}}}}return t}p(Rt,"stableRenderContextAddress");function er(t){for(;t.k==="owned";)t=t.owner;return t.k==="container"&&t.key.startsWith("@three-blocks-input:")&&!t.key.startsWith("@three-blocks-input:setup-")}p(er,"addressUsesGenericRetainedInputRoot");function Nn(t){let e=t.split(":");if(e.length!==6)return;let n=Number(e[3]);return Number.isSafeInteger(n)&&n>=0?n:void 0}p(Nn,"renderAttachmentSamples");function tr(t,e){let n=l(t)?t:{},r={isDepthTexture:n.isDepthTexture===true,isRenderTargetTexture:n.isRenderTargetTexture===true,isDataTexture:n.isDataTexture===true,isData3DTexture:n.isData3DTexture===true,isCubeTexture:n.isCubeTexture===true,format:typeof n.format=="number"?n.format:null,type:typeof n.type=="number"?n.type:null,compareFunction:typeof n.compareFunction=="number"?n.compareFunction:null};typeof n.name=="string"&&n.name.length>0&&(r.name=n.name),typeof n.colorSpace=="string"&&n.colorSpace.length>0&&(r.colorSpace=n.colorSpace);let o=Nn(e);return o!==void 0&&(r.samples=o),r}p(tr,"textureResourceSignature");function nr(t,e){if(t.k!=="inputNode"||t.value.container!=="@renderer")return t;let n=t.value.path;if(n.length<4||n[0]!==J[0]||n[1]!==J[1]||typeof n[2]!="string")return t;let r=tt(n[2]);if(r===void 0)return t;let o=n[3]==="depthTexture"&&n.length===4?"depthTexture":n[3]==="textures"&&n.length===5&&Number.isSafeInteger(n[4])?"texture":void 0;if(o===void 0)return t;let{k:i,value:s,...c}=t;return {k:"recipe",id:v.renderContextInput,version:1,input:{attachmentState:r.attachmentState,callDepth:r.callDepth,mrt:r.mrtState!=="default",resource:o,...o==="texture"?{index:Number(n[4])}:{},texture:tr(e,r.attachmentState),node:c}}}p(nr,"stableRenderContextInputAddress");function m(t){if(!l(t))return typeof t;let e=t.constructor;return (typeof e=="function"||l(e))&&typeof e.name=="string"?e.name:"unknown"}p(m,"constructorName");function dn(t){if(!l(t))return m(t);let e=l(t.image)?t.image:void 0;return [m(t),typeof t.uuid=="string"?`uuid=${t.uuid}`:"",typeof t.name=="string"&&t.name?`name=${t.name}`:"",t.isRenderTargetTexture===true?"renderTarget":"",t.isPMREMTexture===true?"pmrem":"",e&&typeof e.width=="number"&&typeof e.height=="number"?`${e.width}x${e.height}`:"",typeof t.format=="number"?`format=${t.format}`:"",typeof t.type=="number"?`type=${t.type}`:""].filter(Boolean).join("/")}p(dn,"textureLabel");function Se(t,e){return typeof t=="string"&&t.length>0?t.slice(0,512):e}p(Se,"boundedLabel");var rr=typeof performance=="object"&&typeof performance.now=="function"?performance.now.bind(performance):void 0;function or(){return rr?.()??Date.now()}p(or,"now");function vt(t){return l(t)&&typeof t.then=="function"}p(vt,"promiseLike");function ir(t){j={capture:t.capture===true,...t.backend==="webgpu"||t.backend==="webgl"?{backend:t.backend}:{},forceLive:t.forceLive===true,driven:t.driven===true,settleFrames:Number.isSafeInteger(t.settleFrames)&&t.settleFrames>=0?t.settleFrames:60,settleTimeoutMs:Number.isSafeInteger(t.settleTimeoutMs)&&Number(t.settleTimeoutMs)>=1e3?Number(t.settleTimeoutMs):3e4,...Number.isSafeInteger(t.deadlineAt)&&Number(t.deadlineAt)>0?{deadlineAt:Number(t.deadlineAt)}:{},visibilityGuard:t.visibilityGuard===true,...typeof t.captureId=="string"?{captureId:t.captureId}:{},...typeof t.sessionKey=="string"?{sessionKey:t.sessionKey}:{},...typeof t.token=="string"?{token:t.token}:{},readiness:{...typeof t.readiness?.selector=="string"?{selector:t.readiness.selector}:{},...typeof t.readiness?.global=="string"?{global:t.readiness.global}:{}},transform:t.transform},Ee=j.backend,ee=j.backend==="webgl"?pe:Me,be=void 0,Re=false,se=void 0,ae=void 0,re=false,Ue=0,Le=void 0,$e=0,Fe=0,De=void 0,de.length=0,G=void 0,Reflect.set(globalThis,zn,n=>{l(n)&&cn(n);});let e=Reflect.get(globalThis,Hn);l(e)&&cn(e),(j.capture||j.driven||Sn())&&ar();}p(ir,"configureThreeBlocksShaderCapture");function Sn(){let t=Reflect.get(globalThis,"location"),e=l(t)?Reflect.get(t,"search"):void 0;if(typeof e!="string")return false;let n=new URLSearchParams(e),r=n.get("threeBlocksShaderMode");return n.get("capture")==="1"||r==="live"||r==="precompiled"}p(Sn,"drivenShaderSession");function He(){return j.capture||j.forceLive||j.driven||Sn()}p(He,"shaderSessionActive");function An(t){return l(t.backend)&&t.backend.isWebGLBackend===true?"webgl":"webgpu"}p(An,"rendererCaptureBackend");function xt(t){let e=An(t);return Ee===void 0&&(Ee=e),Ee===e}p(xt,"captureOwnsRenderer");function cn(t){if(P=t,!j.capture)return;let e=Tn(),n=t.automaticRegistrationPrefix,r=typeof n=="function"?Reflect.apply(n,t,[e]):void 0;typeof r=="string"&&(G=r);}p(cn,"adoptCaptureCache");function sr(t){if(!j.capture||P===void 0)return;let e=P.automaticRegistrationPrefix,n=typeof e=="function"?Reflect.apply(e,P,[t]):void 0;if(typeof n=="string"){G=n;return}let r=P.enableAutomaticRegistration;if(typeof r=="function"){G="auto";try{Reflect.apply(r,P,[{scene:t,prefix:G}]);}catch(o){throw G=void 0,o}}}p(sr,"ensureCaptureAutomaticRegistration");function ar(){if(sn)return;let t=globalThis,e=t.requestAnimationFrame;if(typeof e!="function")return;sn=true;let n=0,r=0,o=false,i=new Map,s=p(()=>{o||i.size===0||(o=true,Reflect.apply(e,t,[()=>{o=false;let c=[...i.values()];i.clear();let a=n++*(1e3/60);for(let d of c)try{d(a);}catch(f){queueMicrotask(()=>{throw f});}s();}]));},"schedule");Reflect.set(t,"requestAnimationFrame",c=>{let a=++r;return i.set(a,c),s(),a}),Reflect.set(t,"cancelAnimationFrame",c=>{i.delete(c);});}p(ar,"installDeterministicRaf");function W(t,e){if(!P)return;let n=P[t];return typeof n=="function"?Reflect.apply(n,P,e):void 0}p(W,"cacheCall");function Tn(){if(P&&typeof P.activeScene=="string"&&P.activeScene!=="default")return P.activeScene;let t=Reflect.get(globalThis,"location"),e=l(t)?Reflect.get(t,"search"):void 0,n=typeof e=="string"?new URLSearchParams(e).get("captureId"):null;return n!==null&&Zn.test(n)?n:P&&typeof P.activeScene=="string"?P.activeScene:"default"}p(Tn,"activeShaderCaptureScene");function ce(){return Tn()}p(ce,"activeScene");function xe(t,e,n,r){let o=W(t==="compute"?"registrationForCompute":"registrationForRender",t==="compute"?[e,n]:[e,n,r]);return (!l(o)||typeof o.key!="string")&&(sr(n),o=W(t==="compute"?"registrationForCompute":"registrationForRender",t==="compute"?[e,n]:[e,n,r])),l(o)&&typeof o.key=="string"?o:void 0}p(xe,"sceneRegistration");function dr(t){return t.key}p(dr,"capturedRegistrationKey");function jt(t,e){let n=e==="compute"?t.object:t.material;return n!==null&&typeof n=="object"?n:void 0}p(jt,"builderTarget");function vn(t){return t.material===null||t.material===void 0?"compute":"render"}p(vn,"buildKind");function it(t){if(!l(t))return;let e={};for(let n of ["uuid","id","name","type"]){let r=t[n];typeof r=="string"?e[n]=Se(r,""):(typeof r=="number"&&Number.isFinite(r)||typeof r=="boolean")&&(e[n]=r);}return Object.keys(e).length===0?void 0:e}p(it,"objectIdentity");function st(t,e,n,r,o,i){if(Te.length>=je)return;let s=t==="compute"?e.object:e.material,c=Se(l(s)?s.name??s.type:void 0,"unknown"),a=W("registrations",[n]),d=it(s),f=l(r)?it(r.material):void 0;Te.push({...i===void 0?{}:{key:i},kind:t,name:c,reason:o??(t==="compute"?`unregistered compute "${c}"`:`unregistered material "${c}"`),...d===void 0?{}:{target:d},...f===void 0?{}:{renderObjectMaterial:f},...Array.isArray(a)?{registrations:a.slice(0,16).flatMap(h=>{if(!l(h))return [];let k=it(h.target);return [{...typeof h.key=="string"?{key:Se(h.key,"")}:{},...typeof h.kind=="string"?{kind:Se(h.kind,"")}:{},...k??{},sameTarget:h.target===s,...l(r)?{sameRenderObjectMaterial:h.target===r.material}:{}}]})}:{}});}p(st,"addSkipped");function un(t){if(!l(t))return "none";let e=t.name;return Se(typeof e=="string"&&e.length>0?e:t.type,"unknown")}p(un,"demandLabel");function ke(t,e,n,r,o,i){if(de.length>=je)return;let s=l(o)?o.object:void 0;de.push({event:t,kind:e,key:n??null,target:un(r),...e==="render"?{object:un(s),side:l(r)&&typeof r.side=="number"?r.side:null}:{},...i===void 0?{}:{hit:i}});}p(ke,"recordDemand");function cr(t){let e=typeof t.getBindings=="function"?Reflect.apply(t.getBindings,t,[]):[];return Array.isArray(e)&&e.some(n=>l(n)&&Array.isArray(n.bindings)&&n.bindings.some(r=>l(r)&&(l(r.texture)&&r.texture.isPBOTexture===true||l(r.textureNode)&&l(r.textureNode.value)&&r.textureNode.value.isPBOTexture===true)))}p(cr,"hasPboBinding");function at(t,e,n=(i,s)=>{s==="prepareForHydration"?(B.precompiledSetupMs+=i,B.maxPrecompiledSetupMs=Math.max(B.maxPrecompiledSetupMs,i)):(B.buildMs+=i,s==="buildAsync"?B.asyncBuildElapsedMs+=i:(B.syncBuildMs+=i,B.maxSyncBuildMs=Math.max(B.maxSyncBuildMs,i)));},r=or,o){let i=t[e];typeof i=="function"&&Reflect.set(t,e,p(function(...c){let a=r(),d;try{d=Reflect.apply(i,this,c);}catch(f){throw n(r()-a,e),f}return vt(d)?Promise.resolve(d).then(f=>(n(r()-a,e),o?.(),f),f=>{throw n(r()-a,e),f}):(n(r()-a,e),o?.(),d)},"timedBuild"));}p(at,"wrapThreeBlocksCaptureTimedBuild");function xn(t,e,n){if(!He()||!l(t)||!l(e)||!xt(e)||Vt.has(t))return;Vt.add(t);let r=ce(),o=W("containers",[r]);gt.set(t,new Set(Array.isArray(o)?o.filter(h=>l(h)&&typeof h.key=="string").map(h=>String(h.key)):[]));let i=l(n)&&l(n.material)?n:void 0,s=i?"render":vn(t),c=s==="render"&&i?We("render",i):jt(t,s);c&&(i&&kn.set(t,i),xe(s,c,ce(),i));let a=[];Rn.set(t,a);let d=t.getUniformFromNode;typeof d=="function"&&Reflect.set(t,"getUniformFromNode",p(function(k,N,S,u){let y=Reflect.apply(d,this,[k,N,S,u]),R=w(k),b=typeof S=="string"?S:this.shaderStage;if(R&&typeof N=="string"&&(b==="vertex"||b==="fragment"||b==="compute")){let x=N==="buffer"&&l(e.backend)&&e.backend.isWebGLBackend===true?typeof u=="string"?u:null:l(y)&&typeof y.name=="string"?y.name:typeof u=="string"?u:null;a.push({node:R,type:N,stage:b,name:x,...typeof R.id=="number"?{nid:R.id}:{}});}return y},"captureUniform"));let f=p(()=>{en.has(t)||(en.add(t),jn(t,e));},"recordBuild");at(t,"build",void 0,void 0,f),at(t,"buildAsync",void 0,void 0,f),at(t,"prepareForHydration");}p(xn,"instrumentThreeBlocksShaderBuilder");function he(t){return Object.assign(Object.create(Object.getPrototypeOf(t)),t)}p(he,"cloneCaptureRecord");function ur(t){let e=Object.create(t);for(let s of ["object","material","scene","camera","lightsNode","context","vertexShader","fragmentShader","computeShader","observer","hardwareClipping","updateNodes","updateBeforeNodes","updateAfterNodes"]){let c=t[s];Reflect.set(e,s,s==="material"&&l(c)?he(c):Array.isArray(c)?[...c]:c);}let n=typeof t.getAttributesArray=="function"?Reflect.apply(t.getAttributesArray,t,[]):[],r=Array.isArray(n)?n.map(s=>l(s)?he(s):s):[];Reflect.set(e,"getAttributesArray",()=>r);let o=typeof t.getBindings=="function"?Reflect.apply(t.getBindings,t,[]):[],i=Array.isArray(o)?o.map(s=>{if(!l(s))return s;let c=he(s),a=Array.isArray(s.bindings)?s.bindings.map(d=>{if(!l(d))return d;let f=he(d);return Array.isArray(d.uniforms)&&Reflect.set(f,"uniforms",d.uniforms.map(h=>l(h)?he(h):h)),f}):[];return Reflect.set(c,"bindings",a),c}):[];return Reflect.set(e,"getBindings",()=>i),e}p(ur,"snapshotBuilderState");function jn(t,e){if(!He()||j.capture&&ve||!l(t)||!l(e)||!xt(e))return;B.buildCalls++,ae=Date.now(),re=false;let n=vn(t);n==="compute"?B.computeBuilds++:B.renderBuilds++;let r=ce();te=r;let o=gt.get(t)??new Set,i=W("containers",[r]);if(Array.isArray(i))for(let d of i)l(d)&&typeof d.key=="string"&&Ke(d.key)&&!o.has(d.key)&&yt.add(d.key);gt.delete(t);let s=jt(t,n),c=n==="render"?kn.get(t)??(l(t.object)?t.object:void 0):void 0,a=s?xe(n,s,r,c):void 0;if(a){B.registeredBuilds++,n==="compute"?B.registeredComputeBuilds++:B.registeredRenderBuilds++;let d=dr(a),f=l(e.backend)&&e.backend.isWebGLBackend===true;if(f&&n==="compute"){ke("skip",n,d,s,c),st(n,t,r,c,"WebGL shader precompilation does not support compute states.",d),Ie();return}if(f&&cr(t)){ke("skip",n,d,s,c),st(n,t,r,c,"WebGL shader precompilation does not support PBO-backed storage reads.",d),Ie();return}if(ke("build",n,d,s,c),Pe.length<je){let h=ur(t),k={scene:r,key:d,kind:n,builder:h,renderer:e,...c?{renderObject:c}:{},journal:[...Rn.get(t)??[]]};Pe.push(k);}}else ke("build",n,void 0,s,c),st(n,t,r,c);Ie();}p(jn,"recordThreeBlocksShaderBuild");function We(t,e){return t==="compute"?e!==null&&typeof e=="object"?e:void 0:l(e)&&e.material!==null&&typeof e.material=="object"?e.material:void 0}p(We,"targetForProvider");function fn(t,e,n,r){if(j.capture&&ve)return;let o=ce();te=o;let i=We(t,e),s=t==="render"&&l(e)?e:void 0,c=i?xe(t,i,o,s):void 0;ke("probe",t,c?.key,i,s,n!=null),n!=null?(B.injected++,t==="compute"?B.injectedCompute++:B.injectedRender++):c&&(B.missed++,t==="compute"?B.missedCompute++:B.missedRender++,B.missedKeys.length<je&&!B.missedKeys.includes(c.key)&&B.missedKeys.push(c.key));let a=r.stats;if(l(a)){let d=a.hydrationMs,f=a.maxHydrationMs;if(typeof d=="number"&&Number.isFinite(d)&&d>=0){let h=nn.get(r)??0;B.hydrationMs+=d>=h?d-h:d,nn.set(r,d);}typeof f=="number"&&Number.isFinite(f)&&f>=0&&(B.maxHydrationMs=Math.max(B.maxHydrationMs,f));}j.capture||Ie();}p(fn,"recordProviderResult");function fr(t){let e=t.debug;if(!l(e))return;let n=e.onNodeBuilderCreated,r=on.get(t);if(r!==void 0&&n===r)return;let o=typeof n=="function"?n:void 0,i=p(function(c,a){o!==void 0&&Reflect.apply(o,this,[c,a]),xn(c,t,a);},"captureNodeBuilder");on.set(t,i),e.onNodeBuilderCreated=i;}p(fr,"installCaptureBuilderCallback");function lr(t,e,n){if(!l(t)||He()&&!xt(t))return;if(n!==void 0){let a=An(t)==="webgl";if(Wt(n))ee=a?pe:Me;else if(Zt(n)){if(a)throw new Error("@three-blocks/devtools supports WebGL shader capture only with Three.js r185.");ee=Yt;}else throw new Error(`@three-blocks/devtools supports Three.js revisions 185 and 186dev capture; received ${JSON.stringify(n)}.`)}if(!He())return;if(l(e)&&e!==Ge&&(Ge=e,Oe=void 0),fr(t),j.forceLive){let a=rn.get(t);a||(a={__threeBlocksCaptureForceLive:true,getForRender(d){let f=We("render",d);f&&xe("render",f,ce(),l(d)?d:void 0);},getForCompute(d){let f=We("compute",d);f&&xe("compute",f,ce());}},rn.set(t,a)),t.nodeBuilderStateProvider=a;return}let r=t.nodeBuilderStateProvider;if(!l(r))return;let o=tn.get(r);if(o){t.nodeBuilderStateProvider=o;return}if(r.__threeBlocksCaptureWrapper===true)return;let i=r.getForRender,s=r.getForCompute;if(typeof i!="function"||typeof s!="function")return;let c={__threeBlocksCaptureWrapper:true,get stats(){return r.stats},getForRender(a,d,f){let h=Reflect.apply(i,r,[a,d,f]);return fn("render",a,h,r),h},getForCompute(a,d,f){let h=Reflect.apply(s,r,[a,d,f]);return fn("compute",a,h,r),h}};tn.set(r,c),t.nodeBuilderStateProvider=c;}p(lr,"prepareThreeBlocksShaderRenderer");var pr=Object.freeze({configureThreeBlocksShaderCapture:ir,instrumentThreeBlocksShaderBuilder:xn,prepareThreeBlocksShaderRenderer:lr,recordThreeBlocksShaderBuild:jn,readThreeBlocksShaderDemands:Ir});Reflect.set(globalThis,Symbol.for(Xt),pr);function hr(t){return w(t)}p(hr,"unwrapTsl");var Oe;function z(){if(Oe)return Oe;let t=new Map;for(let[e,n]of Object.entries(Ge)){let r=hr(n);r&&!t.has(r)&&t.set(r,e);}return Oe=t,t}p(z,"tslMap");function gr(t,e){if(!(!e||!l(t._nodes)||typeof t._nodes.getEnvironmentNode!="function"))return w(Reflect.apply(t._nodes.getEnvironmentNode,t._nodes,[e]))}p(gr,"sceneEnvironmentNode");function yr(t,e){if(!(!e||!l(t._nodes)||typeof t._nodes.getBackgroundNode!="function"))return w(Reflect.apply(t._nodes.getBackgroundNode,t._nodes,[e]))}p(yr,"sceneBackgroundNode");var ln=new WeakMap;function mr(t,e,n){let r=Reflect.get(t,"getLightNodes");if(typeof r!="function")return [];let o=Reflect.get(e,"getDataFromNode");if(typeof o=="function")for(let c of ["fragment","vertex","compute","any"]){let a=Reflect.apply(o,e,[t,c]),d=l(a)?a.lightNodes:void 0;if(Array.isArray(d))return d.map(w).filter(f=>f!==void 0)}let s=Reflect.apply(r,t,[{renderer:n,context:{materialLightings:[]},getDataFromNode(c){let a=ln.get(c);return a||(a={},ln.set(c,a)),a}}]);return Array.isArray(s)?s.map(w).filter(c=>c!==void 0):[]}p(mr,"lightNodes");function dt(t,e){let n=Reflect.get(Ge,t);return typeof n=="function"?w(Reflect.apply(n,void 0,[e])):void 0}p(dt,"lightUniform");function ct(t){if(!t)return [];let e=[],n=Reflect.get(t,"traverse");return typeof n=="function"&&Reflect.apply(n,t,[r=>{r!==null&&typeof r=="object"&&Reflect.get(r,"isLight")===true&&e.push(r);}]),e}p(ct,"sceneLights");function ge(t){if(!t)return [];let e=[],n=Reflect.get(t,"traverse");return typeof n=="function"&&Reflect.apply(n,t,[r=>{r!==null&&typeof r=="object"&&e.push(r);}]),e}p(ge,"sceneObjects");function br(t){let e=[],n=new Set,r=p((o,i)=>{if(n.has(o))return;n.add(o),e.push([o,i]);let s=Reflect.get(o,"children");if(Array.isArray(s))for(let[c,a]of s.entries())l(a)&&a.isObject3D===true&&r(a,[...i,"children",c]);},"visit");return r(t,[]),e}p(br,"object3DPaths");function Rr(t){return !(Reflect.get(t,"isNode")===true||Reflect.get(t,"isObject3D")===true||Reflect.get(t,"isTexture")===true||Reflect.get(t,"isMaterial")===true||ArrayBuffer.isView(t)||t instanceof ArrayBuffer||t instanceof Set||t instanceof Promise)}p(Rr,"isScannable");function kt(t,e,n,r=()=>false,o=false){let i=new Set,s=[{value:t,path:[],depth:0}];for(let c=0;c<s.length;c++){let a=s[c];if(!a||i.has(a.value)||a.depth>qn)continue;let{value:d,path:f,depth:h}=a;i.add(d);let k=Array.isArray(d)?Array.from(d,(N,S)=>[S,N]):d instanceof Map?[...d.entries()].filter(N=>typeof N[0]=="string"||typeof N[0]=="number").map(([N,S])=>[`map:${String(N)}`,S]):Object.keys(d).map(N=>[N,Reflect.get(d,N)]);for(let[N,S]of k){if(S===null||typeof S!="object")continue;let u=[...f,N];if(!r(u))if(ze(S)){let y=w(S);y&&e(y,u),o&&s.push({value:y??S,path:u,depth:h+1});}else n(S,u),Rr(S)&&s.push({value:S,path:u,depth:h+1});}}}p(kt,"scanContainer");function Cn(t){if(new Uint8Array(new Uint16Array([258]).buffer)[0]!==2)throw new Error("Shader capture requires a little-endian host.");let e=new Uint8Array(t.buffer,t.byteOffset,t.byteLength),n=e.toBase64;if(typeof n=="function")return n.call(e);let r="",o=32768;for(let i=0;i<e.length;i+=o)r+=String.fromCharCode(...e.subarray(i,i+o));return btoa(r)}p(Cn,"bytesToBase64");function kr(t){if(!ArrayBuffer.isView(t)||m(t)!=="Float32Array")throw new Error(`RangeNode setup produced an unsupported ${m(t)} buffer.`);if(t.byteLength>Qt)throw new Error(`RangeNode setup buffer is ${t.byteLength} bytes; embedded shader inputs are limited to ${Qt} bytes.`);return {t:"f32",data:Cn(t)}}p(kr,"serializeRangeBuffer");function pn(t){if(typeof t=="number"&&Number.isFinite(t)||typeof t=="boolean")return t;if(l(t)){for(let[e,n]of [["isVector2","v2"],["isVector3","v3"],["isVector4","v4"],["isColor","c"],["isMatrix3","m3"],["isMatrix4","m4"]])if(t[e]===true&&typeof t.toArray=="function"){let r=Reflect.apply(t.toArray,t,[]);if(Array.isArray(r)&&r.every(o=>typeof o=="number"&&Number.isFinite(o)))return {t:n,a:r}}}}p(pn,"serializeValueItem");function hn(t){if(Array.isArray(t)){let r=t.map(pn);return r.every(o=>o!==void 0)?{t:"arr",items:r}:void 0}let e=pn(t);if(e!==void 0)return e;if(l(t)&&t.isTexture===true&&t.image==null&&t.isRenderTargetTexture!==true&&t.version===0&&(t.name===""||t.name===void 0))return {t:"tex"};if(!l(t)||t.isDataTexture!==true||!l(t.image))return;let n=t.image.data;if(!(!ArrayBuffer.isView(n)||typeof Reflect.get(n,"length")!="number"||Number(Reflect.get(n,"length"))>Jn))return {t:"dtex",arrayType:m(n),data:Cn(n),width:typeof t.image.width=="number"?t.image.width:0,height:typeof t.image.height=="number"?t.image.height:0,format:typeof t.format=="number"?t.format:0,type:typeof t.type=="number"?t.type:0,minFilter:typeof t.minFilter=="number"?t.minFilter:0,magFilter:typeof t.magFilter=="number"?t.magFilter:0,wrapS:typeof t.wrapS=="number"?t.wrapS:0,wrapT:typeof t.wrapT=="number"?t.wrapT:0,name:typeof t.name=="string"?t.name:""}}p(hn,"serializeStaticValue");function ut(t){if(!(Object.hasOwn(t,"update")||Object.hasOwn(t,"updateBefore")||Object.hasOwn(t,"updateAfter"))){if(Reflect.get(t,"isStorageTextureNode")===true)return "storageTexture";if(Reflect.get(t,"isStorageBufferNode")===true)return "storage";switch(m(t)){case "BufferNode":return "buffer";case "BufferAttributeNode":return "bufferAttribute";case "Texture3DNode":return "texture3D";case "CubeTextureNode":return "cubeTexture";case "TextureNode":return "texture";case "UniformArrayNode":return "uniformArray";case "UniformNode":return "uniform";case "PMREMNode":return "pmremTexture";default:return}}}p(ut,"inputClass");function gn(t,e){let n=m(t);return n!==m(e)||["TextureNode","Texture3DNode","CubeTextureNode"].includes(n)||!!w(Reflect.get(t,"compareNode"))!=!!w(Reflect.get(e,"compareNode"))||Reflect.get(t,"access")!==Reflect.get(e,"access")?false:m(t)==="BufferAttributeNode"?["bufferType","bufferStride","bufferOffset","usage","instanced"].every(r=>Reflect.get(t,r)===Reflect.get(e,r)):true}p(gn,"hasEquivalentSharedInputShape");function wr(t){if(t.k==="inputNode")return t.value;if(t.k==="container")return {container:t.key,path:[...t.path,"value"]};if(t.k==="anchor"&&t.path.length===0)return {container:"@material",path:[t.slot,"value"]}}p(wr,"sharedTextureValueLocation");function yn(t){if(t?.k==="container")return {container:t.key,path:t.path};if(t?.k==="anchor"&&t.path.length===0)return {container:"@material",path:[t.slot]}}p(yn,"sharedTextureNodeLocation");function mn(t,e){if(t.isDataArrayTexture!==true||t.format!==1023||t.type!==1015||!l(t.image)||t.image.data===null||typeof t.image.data!="object"||m(t.image.data)!=="Float32Array")return false;let n=e.morphAttributes,r=e.attributes;if(!l(n)||!l(r)||!l(r.position))return false;let o=Array.isArray(n.position)?n.position:[],i=Array.isArray(n.normal)?n.normal:[],s=Array.isArray(n.color)?n.color:[],c=o.length>0?o:i.length>0?i:s;if(c.length===0)return false;let a=r.position.count;if(!Number.isSafeInteger(a)||Number(a)<0)return false;let d=s.length>0?3:i.length>0?2:1,f=Number(a)*d,h=1;return f>4096&&(h=Math.ceil(f/4096),f=4096),t.image.width===f&&t.image.height===h&&t.image.depth===c.length&&Reflect.get(t.image.data,"length")===f*h*4*c.length}p(mn,"isThreeR185MorphTargetTexture");function Nr(t){let e=W("registrations",[t]),n=new Map;if(Array.isArray(e))for(let a of e){if(!l(a))continue;let d=[],f=w(a.owner);f&&d.push(f);let h=a.target;if(a.kind==="compute"){let k=w(h);k&&d.push(k);}else if(h!==null&&typeof h=="object")for(let k of et){let N=w(Reflect.get(h,k));N&&d.push(N);}for(let k of d)for(let N of Ne(k).keys()){let S=F(N);S!==void 0&&!n.has(S)&&n.set(S,N);}}let r=[...n].map(([a,d])=>({key:a,node:d})),o=new Map,i=new Map,s=p((a,d)=>{let f=i.get(a);(f===void 0||d.path.length<f.path.length)&&i.set(a,d);},"rememberNearestValue");for(let a of r)o.set(a.node,{k:"container",key:a.key,path:[]});let c=p((a,d)=>{let f=o.get(a)??d;o.has(a)||o.set(a,f);for(let[h,k]of Ne(a))h===a||o.has(h)||o.set(h,{k:"owned",owner:f,path:k});},"indexGraph");for(let a of r){let d={k:"container",key:a.key,path:[]};s(a.node,{container:a.key,path:[]}),c(a.node,d),kt(a.node,(f,h)=>c(f,{k:"container",key:a.key,path:h}),(f,h)=>s(f,{container:a.key,path:h}),Y,true);}return {roots:r,nodes:o,values:i}}p(Nr,"buildRetainedGraphIndex");function wt(t,e=new Set){if(t===null||typeof t!="object"||e.has(t))return false;if(e.add(t),Array.isArray(t))return t.some(r=>wt(r,e));let n=t;return n.k==="recipe"?true:Object.values(n).some(r=>wt(r,e))}p(wt,"addressUsesRecipe");function Nt(t,e=new Set){if(t===null||typeof t!="object"||e.has(t))return false;if(e.add(t),Array.isArray(t))return t.some(r=>Nt(r,e));let n=t;return n.k==="recipe"&&typeof n.id=="string"?[v.skinningEvent,v.previousBoneMatrices,v.previousInstanceMatrices,v.previousInstanceMatricesEvent,v.dynamicLightData,v.morphTargetTexture,v.morphUpdateEvent,v.cubeMap,v.passTexture,v.reflector,v.object3D,v.passSetupOutput,v.retainedReference,v.retainedShadowChild,v.retainedShadowFar,v.materialSteps].includes(n.id):Object.values(n).some(r=>Nt(r,e))}p(Nt,"addressUsesContextScopedRecipe");var St=class{static{p(this,"RecipeCollisionIndex");}#t=new Map;#i=new WeakMap;#e=0;viewportInput(e){let n=this.#i.get(e);return n===void 0&&(n=this.#e++,this.#i.set(e,n)),n}register(e,n,r,o){if(!wt(e)||Nt(e))return;let i=JSON.stringify(e),s=this.#t.get(i);if(s!==void 0&&s.source!==n)throw new Error(`Shader recipe collision between "${s.shaderKey}" (${s.usage}) and "${r}" (${o}) for ${i}. Register the live resources in distinct stable application containers or make their structural recipe signatures unique.`);s===void 0&&this.#t.set(i,{source:n,shaderKey:r,usage:o});}};function Y(t){return t.includes("_inspector")||t.includes("_renderer")||t.includes("_lastRenderer")||t.includes("_lastCullingRenderer")||t.includes("renderer")||t.some(e=>typeof e=="string"&&e.startsWith("_cached"))}p(Y,"applicationContainerPathIsTransient");function Sr(t){return t.some(e=>typeof e=="string"&&e.startsWith("_"))||t.join(".").includes("value.renderPipeline")}p(Sr,"materialPathIsTransient");var At=class{static{p(this,"CaptureClassifier");}#t;#i;#e=new Map;#s=new Map;#r=new Map;#u=new Map;#a=[];#f=new Set;#l=[];#d=[];constructor(e,n){this.#t=e,this.#i=n;let r=e.kind==="compute"?ze(e.target)?[{slot:"compute",node:e.target}]:[]:et.flatMap(u=>{let y=w(Reflect.get(e.target,u));return y?[{slot:u,node:y}]:[]});for(let u of r)this.#o(u.node,{k:"anchor",key:e.key,slot:u.slot,path:[]});let o=w(e.builder.lightsNode);this.#d.length=0;let i=this.#d;if(o){let u=mr(o,e.builder,e.renderer);this.#l.push(...u),this.#a.push(`lights=${u.length}`);for(let y of u){let R=Reflect.get(y,"light");if(R===null||typeof R!="object")continue;let b=i.length;i.push(R);let A={k:"lightNode",light:b};if(this.#o(y,A),Reflect.get(y,"isAnalyticLightNode")===true){let x=w(Reflect.get(y,"baseColorNode")),M=x??w(Reflect.get(y,"colorNode"));M&&this.#e.set(M,{k:"owned",owner:A,path:[x!==void 0||R!==null&&typeof R=="object"&&Reflect.get(R,"castShadow")===true?"baseColorNode":"colorNode"]});}for(let x of rt){let M=dt(x,R);this.#a.push(`${b}/${x}=${M?`${m(M)}:${m(Reflect.get(M,"value"))}:${String(Reflect.get(M,"updateType"))}`:"missing"}`),M&&this.#o(M,{k:"lightUniform",fn:x,light:b});}}}else this.#a.push("lights=missing");let s=e.builder.scene!==null&&typeof e.builder.scene=="object"?e.builder.scene:null;for(let[u,y]of ct(s).entries()){if(i.includes(y))continue;let R=i.length+u;for(let b of rt){let A=dt(b,y);A&&this.#o(A,{k:"lightUniform",fn:b,light:R,sceneLight:u});}}let c=gr(e.renderer,s);c&&this.#o(c,{k:"sceneEnv"});let a=p((u,y,R,b=false)=>{this.#r.has(y)||this.#r.set(y,{container:u,path:[]}),kt(y,(A,x)=>this.#o(A,{k:"container",key:u,path:x}),(A,x)=>{this.#r.has(A)||this.#r.set(A,{container:u,path:x});},R,b);},"scan");if(e.kind==="render")for(let u of Object.getOwnPropertyNames(e.target)){let y=w(Reflect.get(e.target,u));y&&!this.#e.has(y)&&this.#e.set(y,{k:"container",key:"@material",path:[u]});}let d=W("containers",[e.scene]),f=Array.isArray(d)?d.find(u=>l(u)&&typeof u.key=="string"&&u.key.includes("/resource-batched-text-")):void 0;if(l(f)&&typeof f.key=="string"&&f.target!==null&&typeof f.target=="object"&&a(f.key,f.target,Y,true),Array.isArray(d)){for(let u of d)if(u!==f&&l(u)&&typeof u.key=="string"&&u.target!==null&&typeof u.target=="object"){let y=u.key;if(Ke(y)||yt.has(y))continue;a(y,u.target,Y,true);}}if(e.kind==="render"){a("@material",e.target,Sr,true),e.renderObject&&a("@renderObject",e.renderObject,A=>A.length===1&&A[0]!=="context");let u=Reflect.get(e.renderer,"getMRT"),y=Reflect.get(e.builder,"context"),b=(l(y)?w(y.mrt):void 0)??(typeof u=="function"?w(Reflect.apply(u,e.renderer,[])):void 0);e.renderObject&&b&&this.#o(b,{k:"container",key:"@renderObject",path:["context","mrt"]});}let h=e.builder.object;h!==null&&typeof h=="object"&&a("@object",h,u=>Y(u)||e.kind==="compute"&&u.some(y=>typeof y=="string"&&y.startsWith("_")),e.kind==="compute"),s&&a("@scene",s,Y);let k=yr(e.renderer,s),N=k?this.#m(k):void 0;if(k&&N){this.#o(k,N);let u=w(Reflect.get(k,"_cubeTextureNode"));u&&this.#e.set(u,{k:"owned",owner:N,path:["_cubeTextureNode"]});}let S=W("containers",[e.scene]);if(Array.isArray(S)){for(let u of S)if(l(u)&&typeof u.key=="string"&&u.target!==null&&typeof u.target=="object"){let y=u.key;if(Ke(y)||yt.has(y))continue;a(y,u.target,Y,true);}}for(let[u,y]of ge(s).entries())a(`@sceneObject:${u}`,y,Y);a("@renderer",e.renderer,u=>u.length>=1&&u[0]==="_inspector"||u.length===2&&u[0]==="_nodes"&&u[1]==="nodeBuilderCache");for(let[u,y]of e.retainedGraph.values){let R=this.#r.get(u);(R===void 0||R.container==="@renderer"&&R.path[0]===J[0]&&R.path[1]===J[1])&&this.#r.set(u,y);}for(let[u,y]of e.retainedGraph.nodes)!this.#e.has(u)&&!z().has(u)&&ut(u)===void 0&&this.#e.set(u,y);}#n(e,n,r,o){let i=Reflect.get(e,"value"),s=this.#s.get(e)??o??(r.k==="recipe"&&r.id===v.renderContextInput&&i!==null&&typeof i=="object"?i:e);return this.#s.set(e,s),this.#i.register(r,s,this.#t.key,n),r}#o(e,n){!this.#e.has(e)&&!z().has(e)&&this.#e.set(e,n);for(let[r,o]of Ne(e))r===e||this.#e.has(r)||z().has(r)||this.#e.set(r,{k:"owned",owner:n,path:o});}#N(e){let n=w(Reflect.get(this.#t.target,"contextNode")),r=n?Reflect.get(n,"value"):void 0,o=l(r)?r.renderPipelineState:void 0,i=l(o)?w(o.viewOffsetOwner):void 0;if(!i||Reflect.get(i,"camera")!==e)return;let s=F(i);return s===void 0?void 0:{container:s,path:["camera"]}}#c(e){let n=F(e);if(n!==void 0)return {k:"container",key:n,path:[]};let r=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null;for(let[o,i]of ge(r).entries()){let s=Reflect.get(i,"shadow");if(l(s)&&w(s.shadowNode)===e)return {k:"container",key:`@sceneObject:${o}`,path:["shadow","shadowNode"]}}return this.#e.get(e)}#S(e){let n=p((o,i)=>{let s=Reflect.get(o,"shadow");if(!(Reflect.get(o,"isLight")!==true&&(Reflect.get(o,"isObject3D")!==true||!l(s)))){for(let c of rt)if(dt(c,o)===e)return {k:"recipe",id:v.retainedLightUniform,version:1,input:{fn:c,light:i}}}},"address");for(let{key:o,node:i}of this.#t.retainedGraph.roots){let s,c=p((a,d)=>{s??=n(a,{container:o,path:d});},"inspect");if(c(i,[]),s===void 0&&kt(i,()=>{},c,Y),s===void 0)for(let a of Object.getOwnPropertyNames(i)){let d=Reflect.get(i,a);if(!(!l(d)||d.isObject3D!==true))for(let[f,h]of br(d))s??=n(f,{container:o,path:[a,...h]});}if(s!==void 0)return s}let r=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null;for(let[o,i]of ge(r).entries()){let s=Reflect.get(i,"shadow"),c=l(s)?Reflect.get(s,"shadowNode"):void 0,a=l(c)?Reflect.get(c,"lights"):void 0;if(Array.isArray(a))for(let[d,f]of a.entries()){if(f===null||typeof f!="object")continue;let h=n(f,{container:`@sceneObject:${o}`,path:["shadow","shadowNode","lights",d]});if(h!==void 0)return h}}}#A(e){if(m(e)!=="UniformNode"||Reflect.get(e,"name")!=="shadowFar"||Reflect.get(e,"updateType")!=="render")return;let n=Reflect.get(e,"update");if(typeof n!="function")return;let r=Reflect.get(e,"value"),o=[],i=0;for(let[c,a]of this.#e){if(Reflect.get(c,"isShadowBaseNode")!==true||Reflect.get(c,"isShadowNode")===true)continue;let d=Reflect.get(c,"maxFar"),f=Reflect.get(c,"camera"),h=l(f)?f.far:void 0;if(typeof d!="number"||!Number.isFinite(d)||typeof h!="number"||!Number.isFinite(h))continue;let k=100000025e-2+i*2;i++;try{Reflect.set(c,"maxFar",k),Reflect.set(f,"far",k+1),Reflect.apply(n,e,[{}]),Reflect.get(e,"value")===k&&o.push(this.#c(c)??a);}catch{}finally{Reflect.set(c,"maxFar",d),Reflect.set(f,"far",h);try{Reflect.apply(n,e,[{}]);}catch{Reflect.set(e,"value",r);}}}let s=o.length===1?o[0]:void 0;if(s!==void 0)return {k:"recipe",id:v.retainedShadowFar,version:1,input:{owner:s}}}#T(e){if(Reflect.get(e,"isShadowNode")!==true)return;let n=[];for(let o of this.#e.keys()){if(Reflect.get(o,"isShadowBaseNode")!==true||Reflect.get(o,"isShadowNode")===true)continue;let i=Reflect.get(o,"_shadowNodes"),s=Reflect.get(o,"lights");if(!Array.isArray(i)||!Array.isArray(s)||i.length===0||i.length!==s.length)continue;let c=i.indexOf(e),a=this.#c(o);c>=0&&a!==void 0&&n.push({owner:a,index:c,count:i.length});}let r=n.length===1?n[0]:void 0;if(r!==void 0)return {k:"recipe",id:v.retainedShadowChild,version:1,input:{owner:r.owner,index:r.index,count:r.count}}}#v(e){let n=[];for(let r of this.#e.keys()){if(Reflect.get(r,"isShadowBaseNode")!==true||Reflect.get(r,"isShadowNode")===true)continue;let o=Reflect.get(r,"lights");if(!(!Array.isArray(o)||o.length===0))for(let[i,s]of o.entries()){let c=this.#c(r);l(s)&&s.shadow===e&&c!==void 0&&n.push({owner:c,path:["lights",i,"shadow"],ownerCount:o.length});}}return n.length===1?n[0]:void 0}#x(e){let n=[];for(let r of this.#e.keys()){if(Reflect.get(r,"isShadowBaseNode")!==true||Reflect.get(r,"isShadowNode")===true)continue;let o=this.#c(r);if(o?.k!=="container")continue;let i=Reflect.get(r,"lights");if(!(!Array.isArray(i)||i.length===0))for(let[s,c]of i.entries()){let a=l(c)?c.shadow:void 0,d=l(a)?a.map:void 0;if(!l(d))continue;d._depthTexture===e&&n.push({container:o.key,path:[...o.path,"lights",s,"shadow","map","_depthTexture"]});let f=d.textures;if(Array.isArray(f))for(let[h,k]of f.entries())k===e&&n.push({container:o.key,path:[...o.path,"lights",s,"shadow","map","textures",h]});}}return n.length===1?n[0]:void 0}#p(e){if(!["ReferenceNode","ReferenceBaseNode"].includes(m(e)))return;let n=Reflect.get(e,"property"),r=Reflect.get(e,"uniformType");if(typeof n!="string"||n.length===0||typeof r!="string"||r.length===0)return;let o=Reflect.get(e,"object"),i=o!==null&&typeof o=="object"?this.#v(o):void 0,s=o!==null&&typeof o=="object"?this.#N(o)??this.#r.get(o):void 0,c=w(o),a=c?this.#c(c):void 0;if(o!==null&&typeof o=="object"&&s===void 0&&a===void 0&&i===void 0)return;let d=w(Reflect.get(e,"group")),f=d?z().get(d):void 0;if(d&&f===void 0)return;let h=Reflect.get(e,"count");if(h!==null&&(!Number.isSafeInteger(h)||Number(h)<0))return;let k=Reflect.get(e,"name"),N=i?.owner??a;return N!==void 0?{k:"recipe",id:v.retainedReference,version:1,input:{owner:N,...i===void 0?{}:{path:i.path,ownerCount:i.ownerCount},property:n,uniformType:r,...h===null?{}:{count:Number(h)},...f===void 0?{}:{group:f},...typeof k=="string"&&k.length>0?{name:k}:{}}}:{k:"reference",property:n,uniformType:r,...h===null?{}:{count:Number(h)},...s===void 0?{}:{object:s},...f===void 0?{}:{group:f},...typeof k=="string"&&k.length>0?{name:k}:{}}}#h(e){if(Reflect.get(e,"isMaterialReferenceNode")!==true)return;let n=Reflect.get(e,"property"),r=Reflect.get(e,"uniformType"),o=Reflect.get(e,"referenceType"),i=typeof r=="string"||r===null?r:o;return typeof n=="string"&&(typeof i=="string"||i===null)?{k:"materialCache",property:n,type:i}:void 0}#j(e){if(m(e)!=="UniformNode"||Reflect.get(e,"nodeType")!=="int"||Reflect.get(e,"updateType")!=="render")return;let n=this.#t.builder.material,r=this.#t.builder.object,o=l(r)?r.material:void 0,i=Reflect.get(e,"update");if(typeof i!="function")return;let s=[];l(n)&&s.push({owner:"material",target:n}),l(o)&&o!==n&&s.push({owner:"objectMaterial",target:o});let c=Reflect.get(e,"value"),a=[];for(let{owner:d,target:f}of s){let h=f.steps;if(!Number.isSafeInteger(h)||Number(h)<0||Number(h)>2147483647)continue;let k=Number(h)===2147483647?2147483646:Number(h)+1;try{Reflect.set(f,"steps",k),Reflect.apply(i,e,[{material:n,object:r}]),Reflect.get(e,"value")===k&&a.push(d);}catch{}finally{Reflect.set(f,"steps",h);try{Reflect.apply(i,e,[{material:n,object:r}]);}catch{Reflect.set(e,"value",c);}}}if(a.length===1)return a[0]==="material"?{k:"recipe",id:v.materialSteps,version:1}:{k:"recipe",id:v.materialSteps,version:1,input:{owner:"objectMaterial"}}}#g(e){if(!this.#l.includes(e)||Reflect.get(e,"light")!==void 0)return;let n=m(e);return /^[A-Za-z][A-Za-z0-9]*LightDataNode$/u.test(n)?{k:"recipe",id:v.dynamicLightData,version:1,input:{type:n}}:void 0}#C(e){if(m(e)!=="EventNode"||Reflect.get(e,"eventType")!=="object")return;let n=this.#t.builder.object,r=Reflect.get(e,"callback");if(!l(n)||n.isSkinnedMesh!==true||typeof r!="function")return;let o=n.skeleton;if(!l(o))return;let i=o.boneMatrices,s=o.bones,c=o.update;if(!ArrayBuffer.isView(i)||m(i)!=="Float32Array"||!Array.isArray(s)||s.length===0||typeof c!="function")return;let a=i;if(a.length!==s.length*16)return;let d=this.#t.journal.filter(b=>{let A=Reflect.get(b.node,"value");return m(b.node)==="BufferNode"&&b.type==="buffer"&&b.stage==="vertex"&&Reflect.get(b.node,"bufferType")==="mat4"&&Reflect.get(b.node,"bufferCount")===s.length&&A!==a&&ArrayBuffer.isView(A)&&m(A)==="Float32Array"&&Reflect.get(A,"length")===a.length}),f=[...new Set(d.map(b=>Reflect.get(b.node,"value")))];if(f.length===0)return;let h=new Float32Array(a),k=f.map(b=>new Float32Array(b)),N=Object.getOwnPropertyDescriptor(o,"update"),S={},u=[];try{if(!Reflect.set(o,"update",()=>{}))return;for(let b=0;b<a.length;b++)a[b]=-100000.5-b;Reflect.apply(r,e,[{object:n,frameId:S}]),u=f.filter(b=>b.every((A,x)=>A===a[x]));}catch{return}finally{a.set(h);for(let[b,A]of f.entries())A.set(k[b]);N===void 0?Reflect.deleteProperty(o,"update"):Object.defineProperty(o,"update",N);}let y=u[0];if(u.length!==1||y===void 0)return;let R={k:"recipe",id:v.previousBoneMatrices,version:1,input:{count:s.length}};for(let b of d)Reflect.get(b.node,"value")===y&&(this.#e.set(b.node,R),this.#s.set(b.node,o));}#B(e){if(m(e)!=="EventNode"||Reflect.get(e,"eventType")!=="object")return;let n=this.#t.builder.object,r=Reflect.get(e,"callback");if(!l(n)||n.isInstancedMesh!==true||typeof r!="function")return;let o=n.instanceMatrix,i=l(o)?o.array:void 0,s=l(o)?o.count:void 0;if(!ArrayBuffer.isView(i)||m(i)!=="Float32Array"||!Number.isSafeInteger(s)||Number(s)<1||Reflect.get(i,"length")!==Number(s)*16)return;let c=i,a=this.#t.journal.filter(u=>{let y=Reflect.get(u.node,"value");return m(u.node)==="BufferNode"&&u.type==="buffer"&&u.stage==="vertex"&&Reflect.get(u.node,"bufferType")==="mat4"&&Reflect.get(u.node,"bufferCount")===s&&y!==c&&ArrayBuffer.isView(y)&&m(y)==="Float32Array"&&Reflect.get(y,"length")===c.length}),d=[...new Set(a.map(u=>Reflect.get(u.node,"value")))];if(d.length===0)return;let f=new Float32Array(c),h=d.map(u=>new Float32Array(u)),k=[];try{for(let u=0;u<c.length;u++)c[u]=-200000.5-u;Reflect.apply(r,e,[{object:n}]),k=d.filter(u=>u.every((y,R)=>y===c[R]));}catch{return}finally{c.set(f);for(let[u,y]of d.entries())y.set(h[u]);}let N=k[0];if(k.length!==1||N===void 0)return;let S={k:"recipe",id:v.previousInstanceMatrices,version:1,input:{count:Number(s)}};for(let u of a)Reflect.get(u.node,"value")===N&&(this.#e.set(u.node,S),this.#s.set(u.node,n));this.#f.add(e);}#y(e){if(m(e)!=="EventNode"||Reflect.get(e,"eventType")!=="object")return;let n=this.#t.builder.object,r=Reflect.get(e,"callback"),o=typeof r=="function"?Function.prototype.toString.call(r):"";if(!l(n)||!o.includes("morphTargetsRelative")||!o.includes("morphTargetInfluences")||!o.includes(".reduce")||!o.includes(".update"))return;let i=n.morphTargetInfluences,s=n.geometry,c=n.morphTexture;if(!l(s))return;let a=n.isInstancedMesh===true&&i===void 0&&s.morphTargetsRelative===true&&Number.isSafeInteger(n.count)&&Number(n.count)>1&&l(c);if(!Array.isArray(i)&&!a)return;let d=s.morphAttributes;if(!l(d))return;let f=Array.isArray(d.position)?d.position:[],h=Array.isArray(d.normal)?d.normal:[],k=Array.isArray(d.color)?d.color:[],N=f.length>0?f:h.length>0?h:k;if(N.length===0||Array.isArray(i)&&N.length!==i.length)return;let S=this.#t.journal.some(R=>{let b=Reflect.get(R.node,"value");return m(R.node)==="TextureNode"&&R.type==="texture"&&R.stage==="vertex"&&Reflect.get(R.node,"sampler")===false&&l(b)&&mn(b,s)}),u=this.#t.journal.flatMap((R,b)=>m(R.node)==="UniformArrayNode"?[`${b}:${R.type}/${R.stage}:same=${Reflect.get(R.node,"array")===i}:length=${Array.isArray(Reflect.get(R.node,"array"))?Reflect.get(R.node,"array").length:"na"}`]:[]);if(this.#a.push(`morph=${String(Reflect.get(n,"name")??"")}:targets=${N.length}:influences=${Array.isArray(i)?i.length:"none"}:texture=${S}:arrays=[${u.join(",")}]`),!S)return;if(a){let R=this.#t.journal.filter(C=>m(C.node)==="TextureNode"&&C.type==="texture"&&C.stage==="vertex"&&Reflect.get(C.node,"value")===c);if(R.length===0)return;let b=[];for(let C of this.#t.journal){let U=Reflect.get(C.node,"value");m(C.node)==="UniformNode"&&C.type==="float"&&C.stage==="vertex"&&typeof U=="number"&&Number.isFinite(U)&&!b.some(I=>I.node===C.node)&&b.push({node:C.node,value:U});}let A=[];try{for(let[C,U]of b.entries()){let I=-100000.5-C;if(!Reflect.set(U.node,"value",I)||Reflect.get(U.node,"value")!==I)return}try{Reflect.apply(r,e,[{object:n}]);}catch{}A=b.filter(C=>Reflect.get(C.node,"value")===1).map(C=>C.node);}finally{for(let C of b)Reflect.set(C.node,"value",C.value);}let x=A[0],M=R[0]?.node;return A.length===1&&x!==void 0&&M!==void 0?{base:x,morphTexture:M,count:N.length}:void 0}if(!Array.isArray(i))return;let y=this.#t.journal.flatMap((R,b)=>{let A=Reflect.get(R.node,"array");if(m(R.node)!=="UniformArrayNode"||R.type!=="buffer"||R.stage!=="vertex"||A!==i&&(!Array.isArray(A)||A.length!==i.length))return [];let x=this.#t.journal[b-1];return x===void 0||m(x.node)!=="UniformNode"||x.type!=="float"||x.stage!=="vertex"||typeof Reflect.get(x.node,"value")!="number"||!Number.isFinite(Reflect.get(x.node,"value"))?[]:[{base:x.node,influences:R.node,count:i.length}]});return y.length===1?y[0]:void 0}#_(e){if(m(e)!=="EventNode"||Reflect.get(e,"eventType")!=="object")return;if(this.#f.has(e))return {k:"recipe",id:v.previousInstanceMatricesEvent,version:1};let n=this.#t.builder.object,r=Reflect.get(e,"callback"),o=typeof r=="function"?Function.prototype.toString.call(r):"";if(l(n)&&n.isSkinnedMesh===true&&o.includes("skeleton"))return {k:"recipe",id:v.skinningEvent,version:1};let i=this.#y(e);if(i){let s=this.#e.get(i.base),c=i.influences===void 0?void 0:this.#e.get(i.influences),a=i.morphTexture===void 0?void 0:this.#e.get(i.morphTexture);return s===void 0||c===void 0==(a===void 0)?void 0:{k:"recipe",id:v.morphUpdateEvent,version:1,input:c===void 0?{base:s,morphTexture:a,count:i.count}:{base:s,influences:c,count:i.count}}}}#M(e){if(m(e)!=="MaxMipLevelNode")return;let n=w(Reflect.get(e,"textureNode"));if(!n)return;let r=this.classify(n,"max-mip texture owner");return {k:"recipe",id:v.maxMip,version:1,input:r}}#m(e){if(m(e)!=="CubeMapNode")return;let n=w(Reflect.get(e,"envNode"));if(n)return {k:"recipe",id:v.cubeMap,version:1,input:this.classify(n,"cube-map environment")}}#b(e){if(m(e)!=="Object3DNode")return;let n=Reflect.get(e,"scope");if(!["direction","worldMatrix","position","scale","viewPosition","radius"].includes(String(n)))return;let r=Reflect.get(e,"object3d");if(r===null||typeof r!="object")return;let o=this.#t.builder.object,i="object";if(r!==o){let a=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,d=ge(a).indexOf(r);if(d<0)return;i={sceneObject:d};}let s={k:"recipe",id:v.object3D,version:1,input:{scope:String(n),object:i}};this.#e.set(e,s);let c=w(Reflect.get(e,"uniformNode"));return c&&this.#e.set(c,{k:"owned",owner:s,path:["uniformNode"]}),this.#n(e,"Object3DNode",s,r)}#R(e){let n=w(Reflect.get(e,"textureNode")),r=n?w(Reflect.get(n,"passNode")):void 0;if(!r||Reflect.get(r,"isPassNode")!==true||typeof Reflect.get(r,"setup")!="function")return;let o=F(r),i=this.#e.get(r)??(o?{k:"container",key:o,path:[]}:void 0);if(i===void 0)return;let s={k:"recipe",id:v.passSetupOutput,version:1,input:{owner:i}};return this.#o(e,s),this.#n(e,"pass setup output",s,r)}#k(e){if(m(e)!=="ReflectorNode")return;let n=w(Reflect.get(e,"_reflectorBaseNode")),r=n?w(Reflect.get(n,"textureNode")):void 0;if(!n||m(n)!=="ReflectorBaseNode"||!r||m(r)!=="ReflectorNode")return;let o=Reflect.get(n,"target");if(o===null||typeof o!="object")return;let i=Reflect.get(o,"parent"),s=this.#t.builder.object,c=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,a=null;if(i!==null&&typeof i=="object")if(i===s)a="object";else {let M=ge(c).indexOf(i);if(M<0)return;a={sceneObject:M};}let d=p((M,C)=>{if(M===null||typeof M!="object")return;let U=C.map(I=>Reflect.get(M,I));return U.every(I=>typeof I=="number"&&Number.isFinite(I))?U:void 0},"components"),f=d(Reflect.get(o,"position"),["x","y","z"]),h=d(Reflect.get(o,"quaternion"),["x","y","z","w"]),k=d(Reflect.get(o,"scale"),["x","y","z"]),N=Reflect.get(n,"resolutionScale"),S=Reflect.get(n,"samples");if(!f||!h||!k||typeof N!="number"||!Number.isFinite(N)||!Number.isSafeInteger(S)||Number(S)<0)return;let u=i!==null&&typeof i=="object"?Reflect.get(i,"children"):void 0,y=Array.isArray(u)?u.indexOf(o):-1;if(i!==null&&y<0)return;let R={k:"recipe",id:v.reflector,version:1,input:{resolutionScale:N,generateMipmaps:Reflect.get(n,"generateMipmaps")===true,bounces:Reflect.get(n,"bounces")===true,depth:Reflect.get(n,"depth")===true,samples:Number(S),parent:a,targetIndex:y,position:f,quaternion:h,scale:k}};this.#e.set(r,R),this.#e.set(n,{k:"owned",owner:R,path:["_reflectorBaseNode"]});let b=w(Reflect.get(r,"_depthNode")),A={k:"owned",owner:R,path:["_depthNode"]};b&&this.#e.set(b,A);let x=e===b?A:R;return this.#e.set(e,x),x}#E(e){if(m(e)!=="TextureNode"||Reflect.get(e,"sampler")!==false)return;let n=Reflect.get(e,"value"),r=this.#t.builder.object,o=l(r)?r.geometry:void 0;if(!(!l(r)||!l(n)||!l(o)||this.#r.has(n)||Reflect.get(r,"morphTexture")===n||!mn(n,o)))return {k:"recipe",id:v.morphTargetTexture,version:1}}noteUpdateNode(e){if(m(e)==="PMREMNode"){let a=this.classify(e,"PMREM update node ownership");for(let d of ["_texture","_width","_height","_maxMip"]){let f=w(Reflect.get(e,d));f&&this.#e.set(f,{k:"owned",owner:a,path:[d]});}return}let n=this.#e.get(e);if(n){let a=["ReferenceNode","ReferenceBaseNode"].includes(m(e))?w(Reflect.get(e,"node")):void 0;a&&this.#e.set(a,{k:"owned",owner:n,path:["node"],prime:"reference"});return}let r=m(e)==="RTTNode"?F(e):void 0;if(r?.startsWith("@three-blocks-input:setup-rtt-")===true){let a={k:"container",key:r,path:[]};this.#e.set(e,a);let d=Reflect.get(e,"value");d!==null&&typeof d=="object"&&this.#r.set(d,{container:r,path:["value"]});return}if(this.#R(e))return;let o=this.#g(e);if(o){this.#o(e,o);return}this.#C(e),this.#B(e);let i=this.#y(e);if(i?.influences){let a=Reflect.get(i.influences,"elementType");this.#e.set(i.influences,{k:"inputNode",nodeClass:"uniformArray",value:{container:"@object",path:["morphTargetInfluences"]},access:null,uniformType:typeof a=="string"?a:null});}if(m(e)==="ReflectorBaseNode"){let a=w(Reflect.get(e,"textureNode"));a&&this.#k(a);}if(m(e)==="Object3DNode"){this.#b(e);return}if(m(e)==="CubeMapNode"){let a=this.classify(e,"cube-map update node ownership"),d=w(Reflect.get(e,"envNode")),f=w(Reflect.get(e,"_cubeTextureNode"));f&&f!==d&&this.#e.set(f,{k:"owned",owner:a,path:["_cubeTextureNode"]});return}let s=this.#h(e)??this.#p(e);if(s===void 0&&["ReferenceNode","ReferenceBaseNode"].includes(m(e))){let a=F(e);a!==void 0&&(s={k:"container",key:a,path:[]});}if(s===void 0){["TextureNode","Texture3DNode","CubeTextureNode"].includes(m(e))&&(s=this.classify(e,"texture update node ownership"));let a=s===void 0&&Reflect.get(e,"isTextureNode")===true?hn(Reflect.get(e,"value")):void 0;if(l(a)&&a.t==="tex"&&this.classify(e,"update node ownership"),s===void 0)return}this.#e.set(e,s);let c=w(Reflect.get(e,"node"));c&&this.#e.set(c,{k:"owned",owner:s,path:["node"],prime:"reference"});}shouldOmitUpdateNode(e){return m(e)==="InspectorNode"?true:m(e)==="EventNode"&&Reflect.get(e,"eventType")==="frame"&&l(this.#t.builder.object)&&Reflect.get(this.#t.builder.object,"isInstancedMesh")===true}#L(e){if(Reflect.get(e,"isTextureNode")!==true)return;let n=Reflect.get(e,"update");if(typeof n!="function")return;let r=p(()=>{try{Reflect.apply(n,e,[{}]);}catch{}},"invoke");for(let o of this.#w()){if(Reflect.get(o.light,"isSpotLight")!==true)continue;let i=Reflect.get(o.light,"map");if(i===null||typeof i!="object")continue;let s={},c=false;try{Reflect.set(o.light,"map",s),r(),c=Reflect.get(e,"value")===s;}finally{Reflect.set(o.light,"map",i),r();}if(c)return {k:"lightUniform",fn:"spotLightMap",...o.address}}}#w(){let e=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,n=this.#d.map((r,o)=>({light:r,address:{light:o}}));for(let[r,o]of ct(e).entries())this.#d.includes(o)||n.push({light:o,address:{light:this.#d.length+r,sceneLight:r}});return n}#O(e){let n=this.#w();if(n.length===0)return;if(Reflect.get(e,"isReferenceNode")===true){let i=Reflect.get(e,"object"),s=Reflect.get(e,"property");if(i===null||typeof i!="object"||typeof s!="string")return;let c=Vn[s],a=s==="near"?"shadowCameraNear":s==="far"?"shadowCameraFar":void 0;for(let d of n){let f=Reflect.get(d.light,"shadow");if(!(f===null||typeof f!="object")){if(c!==void 0&&f===i)return {k:"lightUniform",fn:c,...d.address};if(a!==void 0&&Reflect.get(f,"camera")===i)return {k:"lightUniform",fn:a,...d.address}}}return}if(Reflect.get(e,"isUniformNode")!==true)return;let r=Reflect.get(e,"update");if(typeof r!="function"||typeof Reflect.get(e,"value")!="number")return;let o=p(()=>{try{Reflect.apply(r,e,[{}]);}catch{}},"invoke");for(let i of n){let s=Reflect.get(i.light,"shadow"),c=s!==null&&typeof s=="object"?Reflect.get(s,"camera"):void 0;if(!(c===null||typeof c!="object"))for(let a of ["shadowCameraNear","shadowCameraFar"]){let d=a==="shadowCameraNear"?"near":"far",f=Reflect.get(c,d);if(typeof f!="number")continue;let h=f+12345.625,k=false;try{Reflect.set(c,d,h),o(),k=Reflect.get(e,"value")===h;}finally{Reflect.set(c,d,f),o();}if(k)return {k:"lightUniform",fn:a,...i.address}}}}#I(e){if(m(e)!=="BufferNode")return false;let n=Reflect.get(this.#t.builder,"getNodeProperties");if(typeof n!="function")return false;for(let r of this.#e.keys()){if(m(r)!=="RangeNode")continue;let o=Reflect.apply(n,this.#t.builder,[r]),i=l(o)?w(o.outputNode):void 0;if(i&&Ne(i).has(e))return true}return false}classify(e,n){let r=Reflect.get(e,"name");if(typeof r=="string"&&Xn.has(r))return {k:"namedRenderUniform",name:r};let o=this.#A(e);if(o)return this.#e.set(e,o),this.#n(e,n,o);let i=this.#T(e);if(i)return this.#e.set(e,i),this.#n(e,n,i);let s=this.#e.get(e),c=this.#t.retainedGraph.nodes.get(e);if(s&&s!==c)return this.#n(e,n,Rt(s));let a=this.#b(e);if(a)return a;let d=this.#R(e);if(d)return d;let f=this.#p(e);if(f)return this.#e.set(e,f),f.k==="recipe"?this.#n(e,n,f):f;let h=this.#h(e);if(h)return this.#e.set(e,h),h;let k=this.#j(e);if(k)return this.#e.set(e,k),this.#n(e,n,k);let N=this.#g(e);if(N)return this.#e.set(e,N),this.#n(e,n,N);let S=this.#_(e);if(S)return this.#e.set(e,S),this.#n(e,n,S);let u=this.#M(e);if(u){this.#e.set(e,u);let g=w(Reflect.get(e,"textureNode")),T=g?Reflect.get(g,"value"):void 0;return this.#n(e,n,u,T!==null&&typeof T=="object"?T:g)}let y=this.#m(e);if(y)return this.#e.set(e,y),this.#n(e,n,y);let R=this.#E(e);if(R){this.#e.set(e,R);let g=Reflect.get(e,"value");return this.#n(e,n,R,g!==null&&typeof g=="object"?g:e)}let b=w(Reflect.get(e,"referenceNode")),A=b!==void 0?this.#e.get(b):void 0;if(b!==void 0&&A===void 0){let g=F(b);g&&(A={k:"container",key:g,path:[]});}let x=Reflect.get(e,"value"),M=x!==null&&typeof x=="object"?this.#r.get(x)??an(x):void 0,C=yn(A);if(n.startsWith("uniform ")&&A!==void 0&&w(Reflect.get(e,"compareNode"))===void 0&&(C?.container.startsWith("@three-blocks-input:")!==true||M===void 0))return this.#e.set(e,A),A;let U=m(e)==="ReflectorNode"?F(e):void 0;if(U!==void 0){let g={k:"container",key:U,path:[]};return this.#e.set(e,g),g}let I=this.#k(b&&m(b)==="ReflectorNode"?b:e);if(I)return this.#e.set(e,I),this.#n(e,n,I);let Bn=this.#t.builder.scene!==null&&typeof this.#t.builder.scene=="object"?this.#t.builder.scene:null,qe=Reflect.get(e,"light");if(qe!==null&&typeof qe=="object"){let g=ct(Bn).indexOf(qe);if(g>=0){let T={k:"lightNode",light:g,sceneLight:g};return Reflect.get(e,"isShadowBaseNode")===true?{k:"owned",owner:T,path:["shadowNode"]}:T}}let Je=this.#S(e);if(Je)return this.#e.set(e,Je),this.#n(e,n,Je);let Ye=this.#L(e);if(Ye)return this.#e.set(e,Ye),Ye;let K=Reflect.get(e,"value"),ue=Reflect.get(e,"array");if(K!==null&&typeof K=="object"||ue!==null&&typeof ue=="object")for(let[g,T]of this.#e){if(g===e)continue;let _=K!==null&&typeof K=="object"&&Reflect.get(g,"value")===K,E=ue!==null&&typeof ue=="object"&&Reflect.get(g,"array")===ue;if(!(!_&&!E)){if(gn(g,e))return this.#e.set(e,T),T;if(_&&["TextureNode","Texture3DNode","CubeTextureNode"].includes(m(e))){let O=wr(T);if(O!==void 0){this.#r.set(K,O);break}}}}if(K!==null&&typeof K=="object")for(let[g,T]of z()){if(Reflect.get(g,"isViewportNode")!==true)continue;let _=w(Reflect.get(g,"_output"));if(_===void 0||Reflect.get(_,"value")!==K||!gn(_,e))continue;let E={k:"owned",owner:{k:"tsl",name:T},path:["_output"]};return this.#e.set(e,E),E}let Ct=z().get(e);if(Ct)return {k:"tsl",name:Ct};let Bt=ut(e),Ze=Bt==="uniformArray"?Reflect.get(e,"array"):Reflect.get(e,"value"),_t=Ze!==null&&typeof Ze=="object"?this.#r.get(Ze):void 0;if(!(_t!==void 0&&!_t.container.startsWith("@three-blocks-input:"))){for(let[g,T]of this.#e)for(let _ of Object.getOwnPropertyNames(g))if(Reflect.get(g,_)===e){if(Bt!==void 0&&er(T)||(T.k==="inputNode"||T.k==="inputValue"||T.k==="recipe")&&!Qn.has(_))continue;let E={k:"owned",owner:T,path:[_]};this.#e.set(e,E);let O=this.#s.get(g);return O&&this.#s.set(e,O),E}}for(let[g,T]of z()){for(let _ of Object.getOwnPropertyNames(g))if(Reflect.get(g,_)===e)return {k:"owned",owner:{k:"tsl",name:T},path:[_]};for(let[_,E]of Ne(g))if(_===e)return {k:"owned",owner:{k:"tsl",name:T},path:E}}let Mt={ViewportDepthTextureNode:"viewportDepthTexture",ViewportSharedTextureNode:"viewportSharedTexture",ViewportTextureNode:"viewportMipTexture"}[m(e)];if(Mt!==void 0){let g={k:"inputValue",nodeClass:Mt,json:{viewport:this.#i.viewportInput(e)}};return this.#e.set(e,g),g}let Ce=m(e)==="PassTextureNode"?e:b&&m(b)==="PassTextureNode"?b:void 0;if(Ce){let g=w(Reflect.get(Ce,"passNode")),T=g?F(g):void 0,_=g?this.#e.get(g)??(T?{k:"container",key:T,path:[]}:void 0):void 0,E=g?Object.getOwnPropertyNames(g).filter(O=>w(Reflect.get(g,O))===Ce):[];if(_&&E.length===1){let O={k:"owned",owner:_,path:[E[0]]};return this.#e.set(Ce,O),this.#e.set(e,O),O}}if(m(e)==="PassMultipleTextureNode"){let g=w(Reflect.get(e,"passNode")),T=Reflect.get(e,"textureName"),_=Reflect.get(e,"previousTexture")===true,E=_?"_previousTextureNodes":"_textureNodes",O=g?F(g):void 0,Z=g?this.#e.get(g)??[...this.#e].find(([q])=>w(q)===g)?.[1]??(O?{k:"container",key:O,path:[]}:void 0):void 0,ne=g?Reflect.get(g,E):void 0,fe=l(ne)&&typeof T=="string"?w(Reflect.get(ne,T)):void 0;if(Z&&typeof T=="string"&&fe){let q={k:"recipe",id:v.passTexture,version:1,input:{owner:Z,name:T,previous:_}};return this.#e.set(e,q),q}this.#a.push(`passTexture=${m(g)}/${String(T)}/${E} owner=${Z?JSON.stringify(Z):"missing"} collection=${m(ne)} canonical=${m(fe)}`);}let Be=F(e),L=ut(e);if(L){let g=L==="uniformArray"?Reflect.get(e,"array"):Reflect.get(e,"value"),T=Reflect.get(e,"access"),_=L==="uniformArray"?Reflect.get(e,"elementType"):L==="storage"||L==="buffer"||L==="bufferAttribute"?Reflect.get(e,"bufferType"):Reflect.get(e,"uniformType"),E=typeof T=="string"?T:null,O=typeof _=="string"?_:null,Z=w(Reflect.get(e,"group"))??w(Reflect.get(e,"groupNode")),ne=Z?z().get(Z):void 0,fe=ne?{group:ne}:{},q=Reflect.get(e,"bufferCount"),Ut=L==="storage"||L==="buffer"?{bufferCount:Number.isSafeInteger(q)&&Number(q)>=0?Number(q):0,...L==="storage"?{atomic:Reflect.get(e,"isAtomic")===true,pbo:Reflect.get(e,"isPBO")===true}:{}}:{},$t=g!==null&&typeof g=="object"?an(g):void 0,On=g!==null&&typeof g=="object"&&(Reflect.get(g,"isStorageBufferAttribute")===true||Reflect.get(g,"isStorageInstancedBufferAttribute")===true),_e=g!==null&&typeof g=="object"?this.#r.get(g):void 0,In=_e!==void 0&&!_e.container.startsWith("@")?_e:void 0,X=g!==null&&typeof g=="object"?this.#x(g)??In??(On?$t:void 0)??_e??$t:void 0;if(!X&&g!==null&&typeof g=="object"){let $=Reflect.get(g,"array");$!==null&&typeof $=="object"&&(X=this.#r.get($));}let Ft=L==="bufferAttribute"?{stride:Number.isSafeInteger(Reflect.get(e,"bufferStride"))?Number(Reflect.get(e,"bufferStride")):0,offset:Number.isSafeInteger(Reflect.get(e,"bufferOffset"))?Number(Reflect.get(e,"bufferOffset")):0,usage:Number.isSafeInteger(Reflect.get(e,"usage"))?Number(Reflect.get(e,"usage")):0,instanced:Reflect.get(e,"instanced")===true||g!==null&&typeof g=="object"&&(Reflect.get(g,"isInstancedBufferAttribute")===true||Reflect.get(g,"isInstancedInterleavedBuffer")===true)||X?.path.includes("instanceMatrix")===true||X?.path.includes("instanceColor")===true}:{},Dt=["texture","cubeTexture","texture3D"].includes(L)&&w(Reflect.get(e,"compareNode"))?{comparison:true}:{},le=["texture","cubeTexture"].includes(L)?yn(A):void 0,Gt=le!==void 0&&(le.container.startsWith("@three-blocks-input:")!==true||X===void 0||X.container===le.container),Kt=Gt?le:X??le,Pn=Gt?`${L}Reference`:L,Qe=Reflect.get(e,"name"),zt=typeof Qe=="string"&&Qe.length>0?{name:Qe}:{},Q=Kt?{k:"inputNode",nodeClass:Pn,value:Kt,access:E,uniformType:O,...zt,...fe,...Ut,...Ft,...Dt}:void 0;if(!Q&&Be!==void 0){let $={k:"container",key:Be,path:[]};return this.#e.set(e,$),$}if(!Q){let $=this.#I(e)?kr(g):hn(g);$!==void 0&&(Q={k:"inputValue",nodeClass:L,json:$,access:E,uniformType:O,...zt,...fe,...Ut,...Ft,...Dt});}if(Q){let $=JSON.stringify(Q),Ve=this.#u.get($)??0;this.#u.set($,Ve+1);let Un=Ve===0?Q:{...Q,n:Ve},Ht=nr(Un,g);return this.#e.set(e,Ht),this.#n(e,n,Ht,g!==null&&typeof g=="object"?g:e)}}if(s)return this.#n(e,n,Rt(s));if(Be!==void 0){let g={k:"container",key:Be,path:[]};return this.#e.set(e,g),g}let Xe=this.#O(e);if(Xe)return this.#e.set(e,Xe),this.#n(e,n,Xe);let Et=p(g=>m(g)===m(e)&&m(Reflect.get(g,"value"))===m(Reflect.get(e,"value"))&&Reflect.get(g,"updateType")===Reflect.get(e,"updateType"),"comparable"),_n=[...z()].filter(([g])=>Et(g)).slice(0,8).map(([,g])=>g),Mn=[...this.#e].filter(([g])=>Et(g)).slice(0,8).map(([g,T])=>`${JSON.stringify(T)}@${dn(Reflect.get(g,"value"))}`),Lt=l(Reflect.get(e,"value"))?Reflect.get(Reflect.get(e,"value"),"uuid"):void 0,Ot=typeof Lt=="string"?[...this.#e].filter(([g])=>l(Reflect.get(g,"value"))&&Reflect.get(Reflect.get(g,"value"),"uuid")===Lt).slice(0,12).map(([g,T])=>`${m(g)}:${JSON.stringify(T)}`):[],It=W("containers",[this.#t.scene]),En=Array.isArray(It)?It.slice(0,64).flatMap(g=>{if(!l(g)||typeof g.key!="string"||!l(g.target))return [];let T=g.target,_=Object.keys(T).filter(E=>Reflect.get(T,E)===Reflect.get(e,"value"));return [`${g.key}/${m(T)}${_.length>0?`:${_.join(",")}`:""}`]}):[],Pt=m(e)==="EventNode"?Reflect.get(e,"callback"):void 0,Ln=typeof Pt=="function"?Function.prototype.toString.call(Pt).replaceAll(/\s+/gu," ").slice(0,320):void 0,D=this.#t.builder.object;throw new Error(`Cannot address ${m(e)}${typeof r=="string"&&r?` "${r}"`:""} used by ${n} for shader key "${this.#t.key}". Node metadata: value=${m(Reflect.get(e,"value"))}, update=${typeof Reflect.get(e,"update")=="function"?Reflect.get(e,"update").name||"anonymous":"none"}, updateType=${String(Reflect.get(e,"updateType"))}.`+(L?` Input metadata: class=${L}, value=${m(Reflect.get(e,"value"))}, access=${String(Reflect.get(e,"access"))}, uniformType=${String(Reflect.get(e,"uniformType"))}.`:"")+` Similar semantic inputs: tsl=[${_n.join(", ")}], paths=[${Mn.join(", ")}].`+(l(Reflect.get(e,"value"))&&Reflect.get(Reflect.get(e,"value"),"isTexture")===true?` Texture value: ${dn(Reflect.get(e,"value"))}.`:"")+(Ot.length>0?` Same-texture paths: [${Ot.join(", ")}].`:"")+` Classifier diagnostics: ${this.#a.join("; ")}. Registered containers: [${En.join(", ")}].`+(Reflect.get(e,"isStorageBufferNode")===true?` Storage metadata: type=${String(Reflect.get(e,"bufferType"))}, count=${String(Reflect.get(e,"bufferCount"))}, value=${m(Reflect.get(e,"value"))}.`:"")+(m(e)==="MaterialReferenceNode"?` Material reference metadata: flag=${String(Reflect.get(e,"isMaterialReferenceNode"))}, property=${String(Reflect.get(e,"property"))}, uniformType=${String(Reflect.get(e,"uniformType"))}.`:"")+(m(e)==="EventNode"?` Event metadata: type=${String(Reflect.get(e,"eventType"))}, object=${m(D)}, objectName=${l(D)?String(D.name??""):""}, instanced=${l(D)&&D.isInstancedMesh===true}, skinned=${l(D)&&D.isSkinnedMesh===true}, morphs=${l(D)&&Array.isArray(D.morphTargetInfluences)?D.morphTargetInfluences.length:0}, callback=${Ln??"none"}.`:""))}};function ft(t){return Array.isArray(t)?t.map(w).filter(e=>e!==void 0):[]}p(ft,"nodeArray");function Ar(t,e,n){let r=e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),o=new RegExp(`struct\\s+${r}Struct\\s*\\{([\\s\\S]*?)\\};`,"u"),i=[t.vertexShader,t.fragmentShader,t.computeShader].filter(a=>typeof a=="string"),s;for(let a of i){let d=o.exec(a)?.[1];if(d!==void 0&&(s=[...d.matchAll(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*:/gmu)].map(f=>f[1]).filter(f=>f!==void 0),s.length>0))break}if(!s||s.length===0)return;let c=new Map(n.map(a=>[a.name,a.type]));if(!s.some(a=>!c.has(a)))return s.map(a=>({name:a,type:c.get(a)}))}p(Ar,"wgslUniformLayout");function Tr(t,e,n){let r=[t.vertexShader,t.fragmentShader].filter(s=>typeof s=="string"),o=qt(r,e);if(!o||o.length===0)return;let i=new Map(n.map(s=>[s.name,s.type]));if(!o.some(s=>!i.has(s)))return o.map(s=>({name:s,type:i.get(s)}))}p(Tr,"glslUniformLayout");var vr=[{directive:/(?:^|\n)\s*enable\s+subgroups\s*;/u,feature:"subgroups"},{directive:/(?:^|\n)\s*enable\s+subgroups[-_]f16\s*;/u,feature:"subgroups-f16"},{directive:/(?:^|\n)\s*enable\s+f16\s*;/u,feature:"shader-f16"},{directive:/(?:^|\n)\s*enable\s+clip_distances\s*;/u,feature:"clip-distances"},{directive:/(?:^|\n)\s*enable\s+dual_source_blending\s*;/u,feature:"dual-source-blending"}];function xr(t){if(ee===pe)return Jt(t);let e=[];for(let n of vr)t.some(r=>r!==null&&n.directive.test(r))&&e.push(n.feature);return e}p(xr,"shaderRequirements");function jr(t,e){let n=new Map,r=new Set,o=[];for(let i of t){let s=e(i.node,`uniform ${i.name??"<generated>"}`),c=JSON.stringify(s),a=n.get(c);a===void 0&&(a=new Map,n.set(c,a));let d=a.get(i.nid);d===void 0&&(d=a.size,a.set(i.nid,d));let f=`${c}\0${d}\0${i.stage}`;r.has(f)||(r.add(f),o.push({address:s,instance:d,type:i.type,stage:i.stage,name:i.name}));}return o}p(jr,"reduceJournal");function Cr(t,e){if(e==="NodeStorageBuffer"||e==="StorageBuffer"){let n=t.access;return typeof n=="string"?{access:n}:{}}if(e.includes("Sampled")){let n=t.store===true,r=t.access;return {store:n,...n&&typeof r=="string"?{access:r}:{}}}return {}}p(Cr,"capturedBindingAccess");function Br(t,e,n){let r=jt(t.builder,t.kind);if(!r)throw new Error(`Shader key "${t.key}" has no live build target.`);let o=new At({...t,target:r,retainedGraph:n},e),i=ft(t.builder.updateNodes),s=ft(t.builder.updateBeforeNodes),c=ft(t.builder.updateAfterNodes);for(let u of [...s,...i,...c])o.noteUpdateNode(u);let a=jr(t.journal,(u,y)=>o.classify(u,y)),d=typeof t.builder.getAttributesArray=="function"?Reflect.apply(t.builder.getAttributesArray,t.builder,[]):[],f=Array.isArray(d)?d.map((u,y)=>{if(!l(u)||typeof u.name!="string"||typeof u.type!="string")throw new Error(`Shader attribute ${y} is invalid.`);let R=w(u.node);return {name:u.name,type:u.type,node:R?o.classify(R,`attribute ${u.name}`):null}}):[],h=typeof t.builder.getBindings=="function"?Reflect.apply(t.builder.getBindings,t.builder,[]):[],k=Array.isArray(h)?h.map((u,y)=>{if(!l(u)||!Array.isArray(u.bindings))throw new Error(`Shader bind group ${y} is invalid.`);return {name:typeof u.name=="string"?u.name:`group-${y}`,bindings:u.bindings.map((R,b)=>{if(!l(R)||typeof R.name!="string")throw new Error(`Shader binding ${y}/${b} is invalid.`);let A=nt(R),x;if(A==="NodeUniformsGroup"){if(!Array.isArray(R.uniforms))throw new Error(`Shader uniform group ${y}/${b} has no member list.`);let M=R.uniforms.map((C,U)=>{if(!l(C)||typeof C.name!="string"||typeof C.getType!="function")throw new Error(`Shader uniform ${y}/${b}/${U} is invalid.`);let I=Reflect.apply(C.getType,C,[]);if(typeof I!="string")throw new Error(`Shader uniform ${y}/${b}/${U} has no stable type.`);return {name:C.name,type:I}});x=(ee===pe?Tr:Ar)(t.builder,R.name,a)??M;}return {name:R.name,kind:A,...Cr(R,A),...x===void 0?{}:{uniforms:x}}})}}):[],N=l(t.builder.observer)?{hasNode:t.builder.observer.hasNode===true,hasAnimation:t.builder.observer.hasAnimation===true}:null,S=p(u=>typeof t.builder[u]=="string"?t.builder[u]:null,"shader");return {key:t.key,vertexShader:S("vertexShader"),fragmentShader:S("fragmentShader"),computeShader:S("computeShader"),declarations:a,attributes:f,bindGroups:k,updateNodes:i.filter(u=>!o.shouldOmitUpdateNode(u)).map(u=>o.classify(u,"updateNodes")),updateBeforeNodes:s.filter(u=>!o.shouldOmitUpdateNode(u)).map(u=>o.classify(u,"updateBeforeNodes")),updateAfterNodes:c.filter(u=>!o.shouldOmitUpdateNode(u)).map(u=>o.classify(u,"updateAfterNodes")),requirements:xr([S("vertexShader"),S("fragmentShader"),S("computeShader")]),observer:N,hardwareClipping:t.builder.hardwareClipping===true}}p(Br,"entryFromSnapshot");function lt(t){return (t??"").replace(/\b(nodeUniform|nodeVar|nodeVarying|nodeAttribute|NodeBuffer_|nodeCode|buffer)\d+\b/gu,"$1#").split(`
|
|
2
2
|
`).sort().join(`
|
|
3
3
|
`)}p(lt,"canonicalShader");function _r(t){return t.map(e=>({...e,bindings:e.bindings.map(n=>n.kind==="NodeStorageBuffer"||n.kind==="NodeUniformBuffer"?{...n,name:n.kind}:n)}))}p(_r,"canonicalBindingGroups");function bn(t){let{key:e,vertexShader:n,fragmentShader:r,computeShader:o,bindGroups:i,...s}=t;return JSON.stringify({...s,bindGroups:_r(i),vertexShader:lt(n),fragmentShader:lt(r),computeShader:lt(o)})}p(bn,"captureEntryState");var H=class{static{p(this,"CapturePool");}values=[];#t=new Map;intern(e,n=JSON.stringify(e)){let r=this.#t.get(n);return r===void 0&&(r=this.values.length,this.#t.set(n,r),this.values.push(e)),r}};function Mr(t){let e=new H,n=new H,r=new H,o=new H,i=new H,s=new H,c=new H,a={};for(let d of Object.keys(t).sort()){let f=t[d];if(f===void 0)continue;let h=p(u=>u===null?null:e.intern(u,u),"moduleAt"),k=f.declarations.map(u=>[n.intern(u.address),u.instance,u.type,u.stage,u.name]),N=f.requirements.length===0?void 0:s.intern(f.requirements),S={vertex:h(f.vertexShader),fragment:h(f.fragmentShader),compute:h(f.computeShader),declarations:k,layout:r.intern(f.bindGroups),attributes:o.intern(f.attributes.map(u=>({name:u.name,type:u.type,node:u.node===null?null:n.intern(u.node)}))),updates:[i.intern(f.updateNodes.map(u=>n.intern(u))),i.intern(f.updateBeforeNodes.map(u=>n.intern(u))),i.intern(f.updateAfterNodes.map(u=>n.intern(u)))],...N===void 0?{}:{requirements:N},observer:f.observer,hardwareClipping:f.hardwareClipping};a[d]=c.intern(S);}return {modules:e.values,nodes:n.values,layouts:r.values,attributePlans:o.values,updatePlans:i.values,requirementPlans:s.values,states:c.values,entries:a}}p(Mr,"poolCaptureEntries");function Er(t,e){let n={},r=[],o=new St,i=Nr(t);for(let a of Pe.filter(d=>d.scene===t))try{let d=Br(a,o,i),f=mt(d);if(f)throw new Error(`Shader key "${d.key}" captured the automatic input container "${f}". Automatically discovered input containers are capture-only; register a stable application container or retain the value under the material/compute root.`);let h=bt(d);if(h)throw new Error(`Shader key "${d.key}" captured the transient renderer path "${h}". Renderer contexts must use a semantic recipe, and renderer back-references are never stable replay roots.`);let k=n[d.key];k?bn(k)!==bn(d)&&r.push(`Shader key "${d.key}" produced conflicting precompiled states in one capture.`):n[d.key]=d;}catch(d){r.push(d instanceof Error?d.stack??d.message:String(d));}let s=Mr(n),c=Object.fromEntries(Te.flatMap(a=>a.key===void 0?[]:[[a.key,a.reason]]));return {protocolVersion:2,compatibility:ee,scene:t,requiresSetup:JSON.stringify(s.nodes).includes("@three-blocks-input:setup-"),...G===void 0?{}:{automatic:{prefix:G}},...Object.keys(c).length===0?{}:{fallbacks:c},...s,skipped:[...Te],errors:r,stats:{...B},timing:{...se===void 0?{}:{readiness:se},...ae===void 0?{}:{lastBuild:ae},settled:Date.now()},provenance:e}}p(Er,"buildPayload");async function Lr(){let t=globalThis,e=l(t.navigator)?t.navigator:{},n=Pe.find(f=>f.scene===te)?.renderer,r=l(n?.backend)?n.backend:{},o=l(r.device)?r.device:{},i=l(o.adapterInfo)?o.adapterInfo:void 0;if(i===void 0&&l(e.gpu)&&typeof e.gpu.requestAdapter=="function"){let f=await Promise.race([Promise.resolve(Reflect.apply(e.gpu.requestAdapter,e.gpu,[])).catch(()=>{}),new Promise(h=>setTimeout(()=>h(void 0),Yn))]);l(f)&&(i=l(f.info)?f.info:f);}let s=["description","device","architecture","vendor"].flatMap(f=>{let h=i?.[f];return typeof h=="string"&&h.length>0?[h]:[]}),c=o.features,d=typeof(c!==null&&typeof c=="object"?Reflect.get(c,Symbol.iterator):void 0)=="function"?[...c].filter(f=>typeof f=="string").sort():[];return {userAgent:typeof e.userAgent=="string"?e.userAgent:"unknown browser",adapter:[...new Set(s)].join(" \xB7 ")||"WebGPU adapter",features:d}}p(Lr,"captureProvenance");function pt(t){if(j.captureId===void 0)return;let e=Reflect.get(globalThis,"dispatchEvent"),n=Reflect.get(globalThis,"CustomEvent");if(!(typeof e!="function"||typeof n!="function"))try{let r=Reflect.construct(n,["three-blocks:shader-capture",{detail:{...t,active:!0}}]);Reflect.apply(e,globalThis,[r]);}catch{}}p(pt,"publishOverlayCaptureState");async function ie(t,e){let n=j.captureId!==void 0,r=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json",...j.token===void 0?{}:{"X-Three-Blocks-Capture-Token":j.token}},body:JSON.stringify(n?{captureId:j.captureId,payload:e}:e)});if(!r.ok){let o=await r.text().catch(()=>""),i=o;try{let s=JSON.parse(o);l(s)&&typeof s.error=="string"&&(i=s.error);}catch{}throw n&&pt({stage:"error",scene:te,error:i||`Shader devtools endpoint ${t} returned HTTP ${r.status}.`}),new Error(i||`Shader devtools endpoint ${t} returned HTTP ${r.status}.`)}if(n&&t===oe&&l(e)&&pt(e),n&&t===ht){let o=await r.json().catch(()=>{}),i=l(o)&&Number.isSafeInteger(o.pipelines)?Number(o.pipelines):0;pt({stage:"complete",scene:te,pipelines:i});}if(t===ht&&j.sessionKey!==void 0)try{let o=Reflect.get(globalThis,"sessionStorage"),i=l(o)?o.removeItem:void 0;typeof i=="function"&&Reflect.apply(i,o,[j.sessionKey]);}catch{}}p(ie,"postJson");async function ye(){await ie(oe,Ae(true,"writing")),j.capture&&!ve&&(await ie(ht,Er(te,await Lr())),ve=true,De=Date.now(),we++,V&&clearTimeout(V),V=void 0,j.captureId===void 0&&ie(oe,Ae(true,"writing")).catch(()=>{}));}p(ye,"reportSettled");function me(t){console.error("[three-blocks] shader capture report failed",t);}p(me,"reportSettledFailure");function Or(){let t=j.readiness.global;if(t===void 0)return;let e=globalThis,n=Tt(e,t),r=n===true||n===false?n:n===void 0?"absent":vt(n)?"promise":typeof n,o;try{let i=JSON.stringify(Tt(e,`${t}Diagnostics`));typeof i=="string"&&i.length<=1024&&(o=JSON.parse(i));}catch{}return {global:t,value:r,...o===void 0?{}:{diagnostics:o}}}p(Or,"readinessTelemetry");function Ae(t,e=t?"writing":"building"){let n=Or();return {...n===void 0?{}:{readiness:n},protocolVersion:1,compatibility:ee,transform:j.transform,scene:te,settled:t,stage:e,stats:{...B},timing:{...se===void 0?{}:{readiness:se},...ae===void 0?{}:{lastBuild:ae},...t?{settled:Date.now()}:{}},settle:{generation:we,frames:$e,quietMs:Math.round(Fe),visibleMs:Math.round(Ue),...De===void 0?{}:{posted:De}},demands:de.slice(0,64),demandTotal:de.length,...G===void 0?{}:{automatic:{prefix:G}},skipped:[...Te]}}p(Ae,"telemetryPayload");function Tt(t,e){let n=t;for(let r of e.split(".")){if(!l(n)&&typeof n!="function")return;n=Reflect.get(n,r);}return n}p(Tt,"readinessGlobalValue");function Ir(){return de.slice(0,64)}p(Ir,"readThreeBlocksShaderDemands");function Pr(t,e=j.readiness){if(e.selector!==void 0){let n=Reflect.get(t,"document");if(!l(n))return false;let r=Reflect.get(n,"querySelector");if(typeof r!="function"||Reflect.apply(r,n,[e.selector])===null)return false}if(e.global!==void 0){let n=Tt(t,e.global);return n===true?true:vt(n)?(n!==be&&(be=n,Re=false,Promise.resolve(n).then(()=>{be===n&&(Re=true);},r=>{be===n&&(Re=false),console.error(`[three-blocks] shader readiness global ${e.global} rejected`,r);})),Re):false}return true}p(Pr,"pageLoadingIsComplete");function Ie(){if(j.capture&&ve)return;ot||(ot=true,queueMicrotask(()=>{ot=false,ie(oe,Ae(false)).catch(()=>{});})),V&&clearTimeout(V);let t=++we,e=globalThis,n=e.requestAnimationFrame;if(typeof n=="function"&&j.settleFrames>0){let o=Math.max(250,Math.min(3e4,Math.round(j.settleFrames*16.666666666666668))),i=Math.min(4,Math.max(1,j.settleFrames)),s=j.settleFrames,c=0,a=0;$e=0,Fe=0;let d=p(()=>{if(t!==we)return;if(!Pr(e)){Reflect.apply(n,e,[d]);return}let f=Date.now();if(se??=f,Le??=f,j.capture&&j.deadlineAt!==void 0&&f>=j.deadlineAt){ye().catch(me);return}let h=Reflect.get(e,"document"),k=Reflect.get(globalThis,Symbol.for("three-blocks.shader-capture.worker-visible.v1")),N=j.visibilityGuard&&(l(h)&&h.hidden===true||k===false),S=Math.max(0,f-Le);if(Le=f,N){re||(re=true,ie(oe,Ae(false,"hidden")).catch(()=>{})),Reflect.apply(n,e,[d]);return}let u=Math.min(S,250);if(Ue+=u,c+=u,a++,$e=a,Fe=c,re||(re=true,ie(oe,Ae(false,"settling")).catch(()=>{})),Ue>=(j.settleTimeoutMs??3e4)){ye().catch(me);return}if(s--,s<=0){ye().catch(me);return}if(a>=i&&c>=o){ye().catch(me);return}Reflect.apply(n,e,[d]);},"frame");Reflect.apply(n,e,[d]);return}let r=Math.max(250,Math.min(3e4,j.settleFrames*(1e3/60)));V=setTimeout(()=>{V=void 0,t===we&&ye().catch(me);},r);}p(Ie,"scheduleSettledReport");export{Tn as activeShaderCaptureScene,nt as capturedBindingKind,ir as configureThreeBlocksShaderCapture,xn as instrumentThreeBlocksShaderBuilder,Pr as pageLoadingIsComplete,lr as prepareThreeBlocksShaderRenderer,Ir as readThreeBlocksShaderDemands,jn as recordThreeBlocksShaderBuild,at as wrapThreeBlocksCaptureTimedBuild};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@three-blocks/devtools",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.0.1-alpha.372.gf7fb70f4af27",
|
|
4
4
|
"description": "Three Blocks devtools command engine for npx three-blocks; the runtime lives in three-blocks/devtools and the Vite plugin",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"three",
|
|
@@ -79,16 +79,16 @@
|
|
|
79
79
|
"opentype.js": "1.3.4",
|
|
80
80
|
"pngjs": "7.0.0",
|
|
81
81
|
"sharp": "0.35.3",
|
|
82
|
-
"subset-font": "2.5.0"
|
|
82
|
+
"subset-font": "2.5.0",
|
|
83
|
+
"typescript": "^5.9.3"
|
|
83
84
|
},
|
|
84
85
|
"devDependencies": {
|
|
85
86
|
"@types/node": "^22.10.0",
|
|
86
87
|
"@types/three": "0.185.0",
|
|
87
88
|
"create-vite": "9.1.1",
|
|
88
89
|
"playwright": "^1.61.1",
|
|
89
|
-
"three-blocks": "0.9.
|
|
90
|
+
"three-blocks": "0.9.1-alpha.372.gf7fb70f4af27",
|
|
90
91
|
"tsup": "^8.0.0",
|
|
91
|
-
"typescript": "^5.9.3",
|
|
92
92
|
"vite": "^7.2.2",
|
|
93
93
|
"vitest": "^4.1.8"
|
|
94
94
|
},
|
|
@@ -98,19 +98,19 @@
|
|
|
98
98
|
"peerDependencies": {
|
|
99
99
|
"playwright": "^1.61.1",
|
|
100
100
|
"three": ">=0.185.0",
|
|
101
|
-
"three-blocks": "
|
|
102
|
-
"typescript": ">=5.9.3 <7.0.0",
|
|
101
|
+
"three-blocks": "0.9.1-alpha.372.gf7fb70f4af27",
|
|
103
102
|
"vite": ">=7.2.2 <9.0.0"
|
|
104
103
|
},
|
|
105
104
|
"peerDependenciesMeta": {
|
|
106
105
|
"playwright": {
|
|
107
106
|
"optional": true
|
|
108
107
|
},
|
|
109
|
-
"typescript": {
|
|
110
|
-
"optional": true
|
|
111
|
-
},
|
|
112
108
|
"vite": {
|
|
113
109
|
"optional": true
|
|
114
110
|
}
|
|
111
|
+
},
|
|
112
|
+
"threeBlocks": {
|
|
113
|
+
"channel": "alpha",
|
|
114
|
+
"site": "https://preprod.threejs-blocks.com"
|
|
115
115
|
}
|
|
116
116
|
}
|