@three-blocks/devtools 5.0.0 → 6.0.0-alpha.333.gf29db3a0524e

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 CHANGED
@@ -1,5 +1,22 @@
1
1
  # @three-blocks/devtools
2
2
 
3
+ ## 6.0.0-alpha.333.gf29db3a0524e
4
+
5
+ - Packages: This alpha contains no user-facing changes.
6
+
7
+ - Packages: Built from `f29db3a0524e`.
8
+
9
+
10
+ ## 6.0.0
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies [5455df6]
15
+ - Updated dependencies [8e830ad]
16
+ - Updated dependencies [8e830ad]
17
+ - Updated dependencies [8e830ad]
18
+ - three-blocks@0.7.0
19
+
3
20
  ## 5.0.0
4
21
 
5
22
  ### Minor 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"]});}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");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 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 [...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(`
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};
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {b,a as a$3}from'./chunk-6RGA2IVT.js';import'./chunk-IILE5RBI.js';import'./chunk-JHBQB7WC.js';import'./chunk-2TSMAC6E.js';import'./chunk-S22OSG76.js';import'./chunk-EE64MV27.js';import {a as a$2,b as b$1,d}from'./chunk-QJFPNM6W.js';import'./chunk-ZT6T2W4B.js';import'./chunk-NPLE7PPF.js';import {a as a$1}from'./chunk-65VEJRRT.js';import {j,a as a$4,c}from'./chunk-5L2VS3BN.js';import {a}from'./chunk-HOZDD6PW.js';import {randomUUID}from'crypto';import {mkdir,realpath,writeFile,rename,rm}from'fs/promises';import F from'path';import {PNG}from'pngjs';var ye="virtual:three-blocks-devtools/browser-smoke",ve=`\0${ye}`,Ke=`/@id/__x00__${ye}`,Be=9e4;async function Ee(){try{let[e,r]=await Promise.all([import('playwright'),import('vite')]);return {chromium:e.chromium,vite:r}}catch(e){throw new Error('Browser smoke and preview require the optional "playwright" and "vite" packages. Install both in the project and run `npx playwright install chromium`.',{cause:e})}}a(Ee,"loadBrowserSmokeTools");function V(e,r,o,t,n){let a=e??n;if(!Number.isSafeInteger(a)||a<o||a>t)throw new Error(`${r} must be an integer in ${o}...${t}.`);return a}a(V,"boundedInteger");function _e(e,r,o,t,n){let a=e??n;if(!Number.isFinite(a)||a<o||a>t)throw new Error(`${r} must be a finite number in ${o}...${t}.`);return a}a(_e,"boundedRatio");function Pe(e){let r=e??"/";if(r.length===0||r.length>2048||/[\u0000-\u001f\u007f]/u.test(r))throw new Error("Browser smoke route must be a bounded project URL.");let o=new URL(r,"http://three-blocks.invalid/");if(o.origin!=="http://three-blocks.invalid"||o.hash.length>0)throw new Error("Browser smoke route must stay within the project and have no fragment.");return `${o.pathname}${o.search}`}a(Pe,"safeRoute");function N(e,r){return e[r]===true}a(N,"booleanField");function $(e,r){if(!a$1(e)||!a$1(e.value))return {source:"missing",backend:"unknown",worker:false,workerReady:false,assetsReady:false,compileEnd:false,textEnabled:r,textReady:!r,firstFrame:false};let o=e.value,t=e.source==="public";if(t&&o.protocolVersion!==1)return {source:"public",backend:"unknown",worker:false,workerReady:false,assetsReady:false,compileEnd:false,textEnabled:r,textReady:!r,firstFrame:false};let n=a$1(o.readiness)?o.readiness:o,a=o.worker,d=t&&a$1(a)?a.offscreenCanvas===true&&a.visible===true:a===true;return {source:t?"public":"legacy",backend:t&&a$1(a)?a.offscreenCanvas===true?"OffscreenCanvas":"MainThread":a===true?"OffscreenCanvas":"unknown",worker:d,workerReady:N(n,"workerReady"),assetsReady:N(n,"assetsReady")||N(n,"loadEnd"),compileEnd:N(n,"compileEnd"),textEnabled:r,textReady:!r||N(n,"textReady"),firstFrame:N(n,"firstFrame")}}a($,"parseBrowserSmokeLifecycle");function ie(e){let r=PNG.sync.read(e),o=Math.floor(r.width*.25),t=Math.floor(r.width*.75),n=Math.floor(r.height*.25),a=Math.floor(r.height*.75),d=0,c=0;for(let f=n;f<a;f+=2)for(let p=o;p<t;p+=2){let h=(f*r.width+p)*4,l=r.data[h],i=r.data[h+1],s=r.data[h+2];l===void 0||i===void 0||s===void 0||(d+=Math.max(l,i,s),c+=1);}return c===0?0:d/c}a(ie,"screenshotLuminance");function Je(){return `
2
+ import {b,a as a$3}from'./chunk-IM4TPX74.js';import'./chunk-IILE5RBI.js';import'./chunk-X5OFYHIY.js';import'./chunk-2TSMAC6E.js';import'./chunk-S22OSG76.js';import'./chunk-EE64MV27.js';import {a as a$2,b as b$1,d}from'./chunk-QJFPNM6W.js';import'./chunk-ZT6T2W4B.js';import'./chunk-NPLE7PPF.js';import {a as a$1}from'./chunk-65VEJRRT.js';import {j,a as a$4,c}from'./chunk-5L2VS3BN.js';import {a}from'./chunk-HOZDD6PW.js';import {randomUUID}from'crypto';import {mkdir,realpath,writeFile,rename,rm}from'fs/promises';import F from'path';import {PNG}from'pngjs';var ye="virtual:three-blocks-devtools/browser-smoke",ve=`\0${ye}`,Ke=`/@id/__x00__${ye}`,Be=9e4;async function Ee(){try{let[e,r]=await Promise.all([import('playwright'),import('vite')]);return {chromium:e.chromium,vite:r}}catch(e){throw new Error('Browser smoke and preview require the optional "playwright" and "vite" packages. Install both in the project and run `npx playwright install chromium`.',{cause:e})}}a(Ee,"loadBrowserSmokeTools");function V(e,r,o,t,n){let a=e??n;if(!Number.isSafeInteger(a)||a<o||a>t)throw new Error(`${r} must be an integer in ${o}...${t}.`);return a}a(V,"boundedInteger");function _e(e,r,o,t,n){let a=e??n;if(!Number.isFinite(a)||a<o||a>t)throw new Error(`${r} must be a finite number in ${o}...${t}.`);return a}a(_e,"boundedRatio");function Pe(e){let r=e??"/";if(r.length===0||r.length>2048||/[\u0000-\u001f\u007f]/u.test(r))throw new Error("Browser smoke route must be a bounded project URL.");let o=new URL(r,"http://three-blocks.invalid/");if(o.origin!=="http://three-blocks.invalid"||o.hash.length>0)throw new Error("Browser smoke route must stay within the project and have no fragment.");return `${o.pathname}${o.search}`}a(Pe,"safeRoute");function N(e,r){return e[r]===true}a(N,"booleanField");function $(e,r){if(!a$1(e)||!a$1(e.value))return {source:"missing",backend:"unknown",worker:false,workerReady:false,assetsReady:false,compileEnd:false,textEnabled:r,textReady:!r,firstFrame:false};let o=e.value,t=e.source==="public";if(t&&o.protocolVersion!==1)return {source:"public",backend:"unknown",worker:false,workerReady:false,assetsReady:false,compileEnd:false,textEnabled:r,textReady:!r,firstFrame:false};let n=a$1(o.readiness)?o.readiness:o,a=o.worker,d=t&&a$1(a)?a.offscreenCanvas===true&&a.visible===true:a===true;return {source:t?"public":"legacy",backend:t&&a$1(a)?a.offscreenCanvas===true?"OffscreenCanvas":"MainThread":a===true?"OffscreenCanvas":"unknown",worker:d,workerReady:N(n,"workerReady"),assetsReady:N(n,"assetsReady")||N(n,"loadEnd"),compileEnd:N(n,"compileEnd"),textEnabled:r,textReady:!r||N(n,"textReady"),firstFrame:N(n,"firstFrame")}}a($,"parseBrowserSmokeLifecycle");function ie(e){let r=PNG.sync.read(e),o=Math.floor(r.width*.25),t=Math.floor(r.width*.75),n=Math.floor(r.height*.25),a=Math.floor(r.height*.75),d=0,c=0;for(let f=n;f<a;f+=2)for(let p=o;p<t;p+=2){let h=(f*r.width+p)*4,l=r.data[h],i=r.data[h+1],s=r.data[h+2];l===void 0||i===void 0||s===void 0||(d+=Math.max(l,i,s),c+=1);}return c===0?0:d/c}a(ie,"screenshotLuminance");function Je(){return `
3
3
  import * as THREE from 'three/webgpu';
4
4
  import { createAssetLoaderRegistry, createAssetManager, createThreeAssetAdapters, defineAssets } from 'three-blocks/assets';
5
5
  import { SceneHotReloader } from 'three-blocks/hmr';
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {d as d$2,b as b$2,c as c$3,g as g$2}from'./chunk-IILE5RBI.js';import {g as g$1}from'./chunk-JHBQB7WC.js';import {a as a$3,c as c$2,b,d as d$1}from'./chunk-2TSMAC6E.js';import {a as a$1,c,b as b$1}from'./chunk-65VEJRRT.js';import {j,d,i,a as a$2,c as c$1}from'./chunk-5L2VS3BN.js';import {a}from'./chunk-HOZDD6PW.js';import {realpath}from'fs/promises';import h from'path';var te=".three-blocks/runtime/status.json",re=256*1024,H="three-blocks browser smoke",se=["three-blocks.json","three-blocks.shaders.json","three-blocks.text.ts"];function Q(e){return "kind"in e&&e.kind==="adopted"}a(Q,"isAdoptedProjectStatus");async function O(e,t,r,s){let n=await j(e,t,r,s);return JSON.parse(n.data.toString("utf8"))}a(O,"readJsonWithin");var ne=["starting","worker ready","assets ready","compiled","first frame","updating","error"],ae=["ready","generating","fallback","missing","invalid"],oe=["WebGPU","WebGL"],ie=["OffscreenCanvas","MainThread"],de=/^[0-9A-Za-z][0-9A-Za-z._-]{0,63}$/,X=16,K=1e9;function g(e,t,r,s=[]){if(!a$1(e))throw new Error(`${t} must be an object.`);let n=new Set([...r,...s]);for(let o of r)if(!Object.hasOwn(e,o))throw new Error(`${t}.${o} is required.`);for(let o of Object.keys(e))if(!n.has(o))throw new Error(`${t}.${o} is not supported by schema v1.`);return e}a(g,"exactRecord");function A(e,t,r){if(typeof e!="string"||!t.includes(e))throw new Error(`${r} has an unsupported value.`);return e}a(A,"enumValue");function p(e,t){if(typeof e!="boolean")throw new Error(`${t} must be a boolean.`);return e}a(p,"booleanValue");function Y(e,t){return e===null?null:p(e,t)}a(Y,"nullableBoolean");function E(e,t){if(typeof e!="number"||!Number.isSafeInteger(e)||e<0||e>K)throw new Error(`${t} must be a non-negative integer no greater than ${K}.`);return e}a(E,"boundedCounter");function ce(e){if(typeof e!="string"||e.length>32)throw new Error("Runtime status receipt observedAt must be a bounded ISO timestamp.");let t=Date.parse(e);if(!Number.isFinite(t)||new Date(t).toISOString()!==e)throw new Error("Runtime status receipt observedAt must be an exact ISO timestamp.");return e}a(ce,"observedTimestamp");function ue(e){if(e===null)return null;if(typeof e!="string"||e.length===0||e.length>2048||/[\u0000-\u001f\u007f]/u.test(e))throw new Error("Runtime status receipt error must be null or one bounded display-safe line.");return e}a(ue,"receiptError");function le(e){if(!Array.isArray(e)||e.length>X)throw new Error(`Runtime status receipt assets.codecs must contain at most ${X} entries.`);let t=e.map((r,s)=>{let n=g(r,`Runtime status receipt assets.codecs[${s}]`,["name","available","decoded"]);if(typeof n.name!="string"||!de.test(n.name))throw new Error(`Runtime status receipt assets.codecs[${s}].name is invalid.`);let o=p(n.available,`Runtime status receipt assets.codecs[${s}].available`),a=p(n.decoded,`Runtime status receipt assets.codecs[${s}].decoded`);if(a&&!o)throw new Error(`Runtime status receipt codec ${JSON.stringify(n.name)} cannot be decoded when unavailable.`);return {name:n.name,available:o,decoded:a}});if(new Set(t.map(r=>r.name)).size!==t.length)throw new Error("Runtime status receipt assets.codecs must have unique names.");return t}a(le,"parseRuntimeCodecs");function me(e){if(e.assetsReady&&!e.workerReady)throw new Error("Runtime lifecycle assetsReady requires workerReady.");if(e.compiled&&!e.assetsReady)throw new Error("Runtime lifecycle compiled requires assetsReady.");if(e.firstFrame&&!e.compiled)throw new Error("Runtime lifecycle firstFrame requires compiled.");let t=e.state==="starting"?[false,false,false,false]:e.state==="worker ready"?[true,false,false,false]:e.state==="assets ready"?[true,true,false,false]:e.state==="compiled"?[true,true,true,false]:e.state==="first frame"||e.state==="updating"?[true,true,true,true]:null;if(t!==null&&![e.workerReady,e.assetsReady,e.compiled,e.firstFrame].every((r,s)=>r===t[s]))throw new Error(`Runtime lifecycle flags do not match state ${JSON.stringify(e.state)}.`)}a(me,"validateLifecycle");function pe(e){let t=g(e,"Runtime status receipt",["schemaVersion","observedAt","worker","assets","hmr","stats","lifecycle","shaders","error"],["text"]);if(t.schemaVersion!==1)throw new Error("Runtime status receipt must use schemaVersion 1.");let r=g(t.worker,"Runtime status receipt worker",["backend","renderer","protocolVersion"]);if(r.protocolVersion!==1)throw new Error("Runtime status receipt worker.protocolVersion must be 1.");let s=g(t.assets,"Runtime status receipt assets",["codecs","resources"]),n=g(t.hmr,"Runtime status receipt hmr",["capabilities","outcome"]),o=g(n.capabilities,"Runtime status receipt hmr.capabilities",["scene","component","assetManifest","workerRestart"]),a=g(n.outcome,"Runtime status receipt hmr.outcome",["attempted","succeeded","rollbackPreserved","workerRestarted"]),d=p(a.attempted,"Runtime status receipt hmr.outcome.attempted"),l=Y(a.succeeded,"Runtime status receipt hmr.outcome.succeeded"),m=Y(a.rollbackPreserved,"Runtime status receipt hmr.outcome.rollbackPreserved"),y=p(a.workerRestarted,"Runtime status receipt hmr.outcome.workerRestarted");if(d?l===null||m===null:l!==null||m!==null||y)throw new Error("Runtime status receipt HMR outcome fields are inconsistent with attempted.");let S={scene:p(o.scene,"Runtime status receipt hmr.capabilities.scene"),component:p(o.component,"Runtime status receipt hmr.capabilities.component"),assetManifest:p(o.assetManifest,"Runtime status receipt hmr.capabilities.assetManifest"),workerRestart:p(o.workerRestart,"Runtime status receipt hmr.capabilities.workerRestart")};if(d&&!S.scene)throw new Error("Runtime status receipt cannot attempt HMR without the scene capability.");if(y&&!S.workerRestart)throw new Error("Runtime status receipt cannot restart a worker without the workerRestart capability.");let x=g(t.stats,"Runtime status receipt stats",["snapshots","textures","workerProfiler","mainPanels"]),R=g(t.lifecycle,"Runtime status receipt lifecycle",["state","workerReady","assetsReady","compiled","firstFrame"]),k={state:A(R.state,ne,"Runtime status receipt lifecycle.state"),workerReady:p(R.workerReady,"Runtime status receipt lifecycle.workerReady"),assetsReady:p(R.assetsReady,"Runtime status receipt lifecycle.assetsReady"),compiled:p(R.compiled,"Runtime status receipt lifecycle.compiled"),firstFrame:p(R.firstFrame,"Runtime status receipt lifecycle.firstFrame")};me(k);let V=g(t.shaders,"Runtime status receipt shaders",["mode","pipelines"]),P=A(V.mode,["precompiled","live"],"Runtime status receipt shaders.mode"),T=E(V.pipelines,"Runtime status receipt shaders.pipelines");if(P==="precompiled"&&T===0)throw new Error("A precompiled runtime receipt must observe at least one shader pipeline.");let f;if(t.text!==void 0){let I=g(t.text,"Runtime status receipt text",["state","atlases","glyphs","requiredGlyphs"]);if(f={state:A(I.state,ae,"Runtime status receipt text.state"),atlases:E(I.atlases,"Runtime status receipt text.atlases"),glyphs:E(I.glyphs,"Runtime status receipt text.glyphs"),requiredGlyphs:E(I.requiredGlyphs,"Runtime status receipt text.requiredGlyphs")},f.state==="ready"&&(f.atlases===0||f.requiredGlyphs===0||f.glyphs<f.requiredGlyphs))throw new Error("A ready text receipt must cover a non-empty required glyph set with at least one atlas.")}let b=ue(t.error);if(k.state==="error"?b===null:b!==null)throw new Error("Runtime status receipt error must be present only when lifecycle.state is error.");return {schemaVersion:1,observedAt:ce(t.observedAt),worker:{backend:A(r.backend,ie,"Runtime status receipt worker.backend"),renderer:A(r.renderer,oe,"Runtime status receipt worker.renderer"),protocolVersion:1},assets:{codecs:le(s.codecs),resources:E(s.resources,"Runtime status receipt assets.resources")},hmr:{capabilities:S,outcome:{attempted:d,succeeded:l,rollbackPreserved:m,workerRestarted:y}},stats:{snapshots:E(x.snapshots,"Runtime status receipt stats.snapshots"),textures:E(x.textures,"Runtime status receipt stats.textures"),workerProfiler:p(x.workerProfiler,"Runtime status receipt stats.workerProfiler"),mainPanels:p(x.mainPanels,"Runtime status receipt stats.mainPanels")},lifecycle:k,shaders:{mode:P,pipelines:T},...f===void 0?{}:{text:f},error:b}}a(pe,"parseRuntimeStatusReceipt");function he(e,t){return e.render===t.render&&e.vertex===t.vertex&&e.fragment===t.fragment&&e.compute===t.compute}a(he,"sameCoverage");async function ee(e=process.cwd()){let t=h.resolve(e);for(;;){if((await Promise.all(se.map(s=>d(h.join(t,s))))).some(Boolean))return realpath(t);let r=h.dirname(t);if(r===t)return realpath(h.resolve(e));t=r;}}a(ee,"findProjectRoot");async function fe(e,t){let r=t.template,s=h.join(e,".three-blocks","shaders"),n=h.join(s,"meta.json");if(!await d(s)||!await d(n))return {state:"missing",scene:r,reason:t.artifacts?.shaders==="pending"?"The selected template has no verified shader capture yet.":".three-blocks/shaders/meta.json is absent."};try{let o=await i(e,s,"Shader artifact directory"),a=c(await O(o,n,a$2.receipt,"Shader receipt")),d=a.scenes[r];if(d===void 0)return {state:"invalid",scene:r,reason:`Shader receipt has no "${r}" scene.`};let l=await j(o,h.join(o,d.artifact),a$2.manifest,"Shader manifest");if(c$1(l.data)!==d.artifactHash)return {state:"invalid",scene:r,reason:"The selected shader manifest checksum does not match its receipt."};let m=a$3(l.data.toString("utf8"),l.path,r);if(!he(m,d.coverage))return {state:"invalid",scene:r,reason:"Shader receipt coverage does not match the manifest entries.",coverage:m};let{three:y,threeBlocks:S,threeBlocksShaderClosure:x}=await c$2(e);if(a.runtime.three!==y||t.runtime.three!==y||t.runtime.threeBlocks!==S)return {state:"stale",scene:r,reason:`Installed runtime versions (${y}, ${S}) do not match the metadata and shader receipt.`,coverage:m};if(a.runtime.threeBlocksShaderClosure!==x)return {state:"stale",scene:r,reason:"The installed three-blocks/shaders runtime closure differs from the capture receipt.",coverage:m};let R=await b(e),k=Object.keys(R),V=Object.keys(d.inputs),P=k.filter(b=>!Object.hasOwn(d.inputs,b)),T=V.filter(b=>!Object.hasOwn(R,b)),f=k.filter(b=>Object.hasOwn(d.inputs,b)&&d.inputs[b]!==R[b]);return P.length>0||T.length>0||f.length>0?{state:"stale",scene:r,reason:`${P.length} added, ${T.length} removed, and ${f.length} changed semantic shader inputs.`,coverage:m,...f.length>0?{changedInputs:f}:{},...P.length>0?{addedInputs:P}:{},...T.length>0?{removedInputs:T}:{}}:{state:"fresh",scene:r,reason:"Manifest, installed shader runtime closure, and the shader-relevant source snapshot match.",coverage:m}}catch(o){return {state:"invalid",scene:r,reason:o instanceof Error?o.message:String(o)}}}a(fe,"inspectShaders");async function ye(e,t){if(t.artifacts?.text==="pending")return {state:"missing",reason:"The template has no verified text artifacts yet.",atlases:[]};let r=await g$1(e);return {state:r.state,reason:r.reason,atlases:r.atlases.map(s=>({name:s.font.key,glyphs:s.codePoints.length,width:s.texture.width,height:s.texture.height}))}}a(ye,"inspectText");function Re(e,t){if(e.lifecycle.assetsReady&&e.assets.codecs.some(r=>!r.available))throw new Error("Runtime status receipt claims assets ready while a configured codec is unavailable.");if(t.features.text!==(e.text!==void 0))throw new Error("Runtime status receipt text observation does not match three-blocks.json.")}a(Re,"validateRuntimeReceiptForProject");async function be(e,t){let r=h.join(e,...te.split("/"));if(!await d(r))return {kind:"absent",receipt:null,reason:"No browser observation receipt is available."};try{let s=await i(e,h.dirname(r),"Runtime status receipt directory"),n=pe(await O(s,h.join(s,h.basename(r)),re,"Runtime status receipt"));return Re(n,t),{kind:"valid",receipt:n,reason:n.error??`Browser observation captured at ${n.observedAt}.`}}catch(s){return {kind:"invalid",receipt:null,reason:`Runtime status receipt is invalid: ${s instanceof Error?s.message:String(s)}`}}}a(be,"inspectRuntimeReceipt");function ge(){return {scene:false,component:false,assetManifest:false,workerRestart:false}}a(ge,"emptyCapabilities");function we(){return {attempted:false,succeeded:null,rollbackPreserved:null,workerRestarted:false}}a(we,"emptyOutcome");function ke(){return []}a(ke,"configuredCodecs");function Se(e,t,r){if(t.state!=="fresh")return "three-blocks shaders capture";if(r!==void 0&&r.state!=="ready")return "three-blocks text generate";let s=e.receipt;return e.kind!=="valid"||s===null||s.lifecycle.state==="error"?H:s.text!==void 0&&s.text.state!=="ready"?"three-blocks text generate":H}a(Se,"recoveryCommand");async function xe(e=process.cwd()){let t=await ee(e),r=b$1(await O(t,h.join(t,"three-blocks.json"),a$2.metadata,"Project metadata")),s=await fe(t,r),n=r.features.text?await ye(t,r):void 0,o=await be(t,r),a=o.receipt,d=o.kind==="invalid",l=d||a?.lifecycle.state==="error",m=a===null?{state:d?"error":"starting",backend:null,renderer:null,protocolVersion:1}:{state:l?"error":a.lifecycle.workerReady?"worker ready":"starting",backend:a.worker.backend,renderer:a.worker.renderer,protocolVersion:a.worker.protocolVersion},y=a===null?{state:d?"error":"starting",codecs:ke(),resources:0}:{state:l?"error":a.lifecycle.assetsReady?"assets ready":"starting",codecs:a.assets.codecs,resources:a.assets.resources},S=a===null?{state:d?"error":"starting",capabilities:ge(),outcome:we()}:{state:l||a.hmr.outcome.attempted&&(a.hmr.outcome.succeeded!==true||a.hmr.outcome.rollbackPreserved!==true)?"error":a.hmr.outcome.attempted?"first frame":"starting",capabilities:a.hmr.capabilities,outcome:a.hmr.outcome},x=a===null?{state:d?"error":"starting",snapshots:0,textures:0,workerProfiler:false,mainPanels:false}:{state:l?"error":a.stats.snapshots>0&&a.stats.workerProfiler&&a.stats.mainPanels?"first frame":"starting",...a.stats},R=a===null?{state:d?"error":"starting",mode:null,pipelines:0,artifactState:s.state}:{state:l?"error":a.lifecycle.compiled?s.state==="fresh"?a.shaders.mode:s.state:a.lifecycle.state,mode:a.shaders.mode,pipelines:a.shaders.pipelines,artifactState:s.state},k=n===void 0?void 0:a?.text===void 0?{state:d?"error":"starting",atlases:0,glyphs:0,requiredGlyphs:0}:{state:l?"error":n.state==="ready"?a.text.state:n.state,atlases:a.text.atlases,glyphs:a.text.glyphs,requiredGlyphs:a.text.requiredGlyphs};return {schemaVersion:1,root:t,metadata:r,configuration:{worker:m,assets:y,hmr:S,optimization:R,stats:x,...k===void 0?{}:{text:k}},runtime:{state:d?"error":a?.lifecycle.state??"starting",observed:a!==null,observedAt:a?.observedAt??null,reason:o.reason,recovery:Se(o,s,n),observation:a},shaders:s,...n?{text:n}:{}}}a(xe,"inspectProject");async function Z(e){let[t,r]=await Promise.all([d(h.join(e,"three-blocks.shaders.json")),d(h.join(e,"three-blocks.text.ts"))]),[s,n]=await Promise.all([t?d$1(e):Promise.resolve(void 0),r?g$1(e):Promise.resolve(void 0)]);return {schemaVersion:1,root:e,kind:"adopted",markers:{shaders:t,text:r},...s===void 0?{}:{shaders:s},...n===void 0?{}:{text:n}}}a(Z,"inspectAdoptedProject");async function qe(e=process.cwd()){let t=await ee(e),r=h.join(t,"three-blocks.json");if(await d(r)){try{b$1(await O(t,r,a$2.metadata,"Project metadata"));}catch{return Z(t)}return xe(t)}return Z(t)}a(qe,"inspectThreeBlocksStatus");function Ge(e){return Q(e)?(e.markers.shaders||e.markers.text)&&(e.shaders===void 0||e.shaders.state==="fresh")&&(e.text===void 0||e.text.state==="ready"):e.shaders.state==="fresh"&&(e.text===void 0||e.text.state==="ready")&&e.runtime.state!=="error"}a(Ge,"threeBlocksStatusIsFresh");function $e(e){return e==="ktx2"?"KTX2":e==="draco"?"Draco":e==="meshopt"?"Meshopt":e}a($e,"codecName");function ve(e,t=Date.now()){let r=t-Date.parse(e);if(!Number.isFinite(r)||r<0)return e;let s=Math.round(r/1e3);if(s<60)return "just now";let n=Math.round(s/60);if(n<60)return `${n} minute${n===1?"":"s"} ago`;let o=Math.round(n/60);return o<48?`${o} hour${o===1?"":"s"} ago`:`${Math.round(o/24)} days ago`}a(ve,"relativeTime");function w(e,t,r){return `${e} ${d$2(t,12)} ${r}`}a(w,"row");function v(e,t){return ` ${d$2(b$2.dim(e),12)} ${b$2.dim(t)}`}a(v,"subRow");function Pe(e){return e<100?e.toFixed(1):Math.round(e).toString()}a(Pe,"milliseconds");function Te(e){return e?`${e.render} render \xB7 ${e.compute} compute`:"no coverage"}a(Te,"coverageText");function je(e){let t=[w(g$2(e.state),"shaders",`${e.state==="fresh"?"fresh":b$2.warn(e.state)} ${c$3.dot} ${b$2.dim(e.reason)}`)];for(let r of e.scenes){let s=r.timing,n=s?.source==="committed-capture"?s.adapter??"captured adapter":"this capture",o=s===void 0?"":s.runs>1?`measured median of ${s.runs}`:"single-capture estimate",a=s===void 0?"":`\u2248${Pe(s.avoidedBuildMs)} ms TSL work avoided`,d=s===void 0?r.state==="fresh"?` ${c$3.dot} ${b$2.dim("capture again to record a timing estimate")}`:"":` ${c$3.dot} ${b$2.dim(`${a} \xB7 ${o} \xB7 ${n}`)}`;t.push(w(g$2(r.state),`${r.scene}:${r.backend}`,`${r.state} ${c$3.dot} ${Te(r.coverage)}${d}`)),s!==void 0&&s.spreadMs>s.avoidedBuildMs*.4&&t.push(v("measure",b$2.warn("noisy measurement \u2014 close other GPU apps and re-run")));let l=[...r.changedInputs??[],...r.addedInputs??[],...r.removedInputs??[]];l.length>0&&t.push(v("changed",l.join(", ")));}return e.state!=="fresh"&&t.push(`${c$3.info} ${b$2.accent("three-blocks shaders capture")}`),t.join(`
2
+ import {d as d$2,b as b$2,c as c$3,g as g$2}from'./chunk-IILE5RBI.js';import {g as g$1}from'./chunk-X5OFYHIY.js';import {a as a$3,c as c$2,b,d as d$1}from'./chunk-2TSMAC6E.js';import {a as a$1,c,b as b$1}from'./chunk-65VEJRRT.js';import {j,d,i,a as a$2,c as c$1}from'./chunk-5L2VS3BN.js';import {a}from'./chunk-HOZDD6PW.js';import {realpath}from'fs/promises';import h from'path';var te=".three-blocks/runtime/status.json",re=256*1024,H="three-blocks browser smoke",se=["three-blocks.json","three-blocks.shaders.json","three-blocks.text.ts"];function Q(e){return "kind"in e&&e.kind==="adopted"}a(Q,"isAdoptedProjectStatus");async function O(e,t,r,s){let n=await j(e,t,r,s);return JSON.parse(n.data.toString("utf8"))}a(O,"readJsonWithin");var ne=["starting","worker ready","assets ready","compiled","first frame","updating","error"],ae=["ready","generating","fallback","missing","invalid"],oe=["WebGPU","WebGL"],ie=["OffscreenCanvas","MainThread"],de=/^[0-9A-Za-z][0-9A-Za-z._-]{0,63}$/,X=16,K=1e9;function g(e,t,r,s=[]){if(!a$1(e))throw new Error(`${t} must be an object.`);let n=new Set([...r,...s]);for(let o of r)if(!Object.hasOwn(e,o))throw new Error(`${t}.${o} is required.`);for(let o of Object.keys(e))if(!n.has(o))throw new Error(`${t}.${o} is not supported by schema v1.`);return e}a(g,"exactRecord");function A(e,t,r){if(typeof e!="string"||!t.includes(e))throw new Error(`${r} has an unsupported value.`);return e}a(A,"enumValue");function p(e,t){if(typeof e!="boolean")throw new Error(`${t} must be a boolean.`);return e}a(p,"booleanValue");function Y(e,t){return e===null?null:p(e,t)}a(Y,"nullableBoolean");function E(e,t){if(typeof e!="number"||!Number.isSafeInteger(e)||e<0||e>K)throw new Error(`${t} must be a non-negative integer no greater than ${K}.`);return e}a(E,"boundedCounter");function ce(e){if(typeof e!="string"||e.length>32)throw new Error("Runtime status receipt observedAt must be a bounded ISO timestamp.");let t=Date.parse(e);if(!Number.isFinite(t)||new Date(t).toISOString()!==e)throw new Error("Runtime status receipt observedAt must be an exact ISO timestamp.");return e}a(ce,"observedTimestamp");function ue(e){if(e===null)return null;if(typeof e!="string"||e.length===0||e.length>2048||/[\u0000-\u001f\u007f]/u.test(e))throw new Error("Runtime status receipt error must be null or one bounded display-safe line.");return e}a(ue,"receiptError");function le(e){if(!Array.isArray(e)||e.length>X)throw new Error(`Runtime status receipt assets.codecs must contain at most ${X} entries.`);let t=e.map((r,s)=>{let n=g(r,`Runtime status receipt assets.codecs[${s}]`,["name","available","decoded"]);if(typeof n.name!="string"||!de.test(n.name))throw new Error(`Runtime status receipt assets.codecs[${s}].name is invalid.`);let o=p(n.available,`Runtime status receipt assets.codecs[${s}].available`),a=p(n.decoded,`Runtime status receipt assets.codecs[${s}].decoded`);if(a&&!o)throw new Error(`Runtime status receipt codec ${JSON.stringify(n.name)} cannot be decoded when unavailable.`);return {name:n.name,available:o,decoded:a}});if(new Set(t.map(r=>r.name)).size!==t.length)throw new Error("Runtime status receipt assets.codecs must have unique names.");return t}a(le,"parseRuntimeCodecs");function me(e){if(e.assetsReady&&!e.workerReady)throw new Error("Runtime lifecycle assetsReady requires workerReady.");if(e.compiled&&!e.assetsReady)throw new Error("Runtime lifecycle compiled requires assetsReady.");if(e.firstFrame&&!e.compiled)throw new Error("Runtime lifecycle firstFrame requires compiled.");let t=e.state==="starting"?[false,false,false,false]:e.state==="worker ready"?[true,false,false,false]:e.state==="assets ready"?[true,true,false,false]:e.state==="compiled"?[true,true,true,false]:e.state==="first frame"||e.state==="updating"?[true,true,true,true]:null;if(t!==null&&![e.workerReady,e.assetsReady,e.compiled,e.firstFrame].every((r,s)=>r===t[s]))throw new Error(`Runtime lifecycle flags do not match state ${JSON.stringify(e.state)}.`)}a(me,"validateLifecycle");function pe(e){let t=g(e,"Runtime status receipt",["schemaVersion","observedAt","worker","assets","hmr","stats","lifecycle","shaders","error"],["text"]);if(t.schemaVersion!==1)throw new Error("Runtime status receipt must use schemaVersion 1.");let r=g(t.worker,"Runtime status receipt worker",["backend","renderer","protocolVersion"]);if(r.protocolVersion!==1)throw new Error("Runtime status receipt worker.protocolVersion must be 1.");let s=g(t.assets,"Runtime status receipt assets",["codecs","resources"]),n=g(t.hmr,"Runtime status receipt hmr",["capabilities","outcome"]),o=g(n.capabilities,"Runtime status receipt hmr.capabilities",["scene","component","assetManifest","workerRestart"]),a=g(n.outcome,"Runtime status receipt hmr.outcome",["attempted","succeeded","rollbackPreserved","workerRestarted"]),d=p(a.attempted,"Runtime status receipt hmr.outcome.attempted"),l=Y(a.succeeded,"Runtime status receipt hmr.outcome.succeeded"),m=Y(a.rollbackPreserved,"Runtime status receipt hmr.outcome.rollbackPreserved"),y=p(a.workerRestarted,"Runtime status receipt hmr.outcome.workerRestarted");if(d?l===null||m===null:l!==null||m!==null||y)throw new Error("Runtime status receipt HMR outcome fields are inconsistent with attempted.");let S={scene:p(o.scene,"Runtime status receipt hmr.capabilities.scene"),component:p(o.component,"Runtime status receipt hmr.capabilities.component"),assetManifest:p(o.assetManifest,"Runtime status receipt hmr.capabilities.assetManifest"),workerRestart:p(o.workerRestart,"Runtime status receipt hmr.capabilities.workerRestart")};if(d&&!S.scene)throw new Error("Runtime status receipt cannot attempt HMR without the scene capability.");if(y&&!S.workerRestart)throw new Error("Runtime status receipt cannot restart a worker without the workerRestart capability.");let x=g(t.stats,"Runtime status receipt stats",["snapshots","textures","workerProfiler","mainPanels"]),R=g(t.lifecycle,"Runtime status receipt lifecycle",["state","workerReady","assetsReady","compiled","firstFrame"]),k={state:A(R.state,ne,"Runtime status receipt lifecycle.state"),workerReady:p(R.workerReady,"Runtime status receipt lifecycle.workerReady"),assetsReady:p(R.assetsReady,"Runtime status receipt lifecycle.assetsReady"),compiled:p(R.compiled,"Runtime status receipt lifecycle.compiled"),firstFrame:p(R.firstFrame,"Runtime status receipt lifecycle.firstFrame")};me(k);let V=g(t.shaders,"Runtime status receipt shaders",["mode","pipelines"]),P=A(V.mode,["precompiled","live"],"Runtime status receipt shaders.mode"),T=E(V.pipelines,"Runtime status receipt shaders.pipelines");if(P==="precompiled"&&T===0)throw new Error("A precompiled runtime receipt must observe at least one shader pipeline.");let f;if(t.text!==void 0){let I=g(t.text,"Runtime status receipt text",["state","atlases","glyphs","requiredGlyphs"]);if(f={state:A(I.state,ae,"Runtime status receipt text.state"),atlases:E(I.atlases,"Runtime status receipt text.atlases"),glyphs:E(I.glyphs,"Runtime status receipt text.glyphs"),requiredGlyphs:E(I.requiredGlyphs,"Runtime status receipt text.requiredGlyphs")},f.state==="ready"&&(f.atlases===0||f.requiredGlyphs===0||f.glyphs<f.requiredGlyphs))throw new Error("A ready text receipt must cover a non-empty required glyph set with at least one atlas.")}let b=ue(t.error);if(k.state==="error"?b===null:b!==null)throw new Error("Runtime status receipt error must be present only when lifecycle.state is error.");return {schemaVersion:1,observedAt:ce(t.observedAt),worker:{backend:A(r.backend,ie,"Runtime status receipt worker.backend"),renderer:A(r.renderer,oe,"Runtime status receipt worker.renderer"),protocolVersion:1},assets:{codecs:le(s.codecs),resources:E(s.resources,"Runtime status receipt assets.resources")},hmr:{capabilities:S,outcome:{attempted:d,succeeded:l,rollbackPreserved:m,workerRestarted:y}},stats:{snapshots:E(x.snapshots,"Runtime status receipt stats.snapshots"),textures:E(x.textures,"Runtime status receipt stats.textures"),workerProfiler:p(x.workerProfiler,"Runtime status receipt stats.workerProfiler"),mainPanels:p(x.mainPanels,"Runtime status receipt stats.mainPanels")},lifecycle:k,shaders:{mode:P,pipelines:T},...f===void 0?{}:{text:f},error:b}}a(pe,"parseRuntimeStatusReceipt");function he(e,t){return e.render===t.render&&e.vertex===t.vertex&&e.fragment===t.fragment&&e.compute===t.compute}a(he,"sameCoverage");async function ee(e=process.cwd()){let t=h.resolve(e);for(;;){if((await Promise.all(se.map(s=>d(h.join(t,s))))).some(Boolean))return realpath(t);let r=h.dirname(t);if(r===t)return realpath(h.resolve(e));t=r;}}a(ee,"findProjectRoot");async function fe(e,t){let r=t.template,s=h.join(e,".three-blocks","shaders"),n=h.join(s,"meta.json");if(!await d(s)||!await d(n))return {state:"missing",scene:r,reason:t.artifacts?.shaders==="pending"?"The selected template has no verified shader capture yet.":".three-blocks/shaders/meta.json is absent."};try{let o=await i(e,s,"Shader artifact directory"),a=c(await O(o,n,a$2.receipt,"Shader receipt")),d=a.scenes[r];if(d===void 0)return {state:"invalid",scene:r,reason:`Shader receipt has no "${r}" scene.`};let l=await j(o,h.join(o,d.artifact),a$2.manifest,"Shader manifest");if(c$1(l.data)!==d.artifactHash)return {state:"invalid",scene:r,reason:"The selected shader manifest checksum does not match its receipt."};let m=a$3(l.data.toString("utf8"),l.path,r);if(!he(m,d.coverage))return {state:"invalid",scene:r,reason:"Shader receipt coverage does not match the manifest entries.",coverage:m};let{three:y,threeBlocks:S,threeBlocksShaderClosure:x}=await c$2(e);if(a.runtime.three!==y||t.runtime.three!==y||t.runtime.threeBlocks!==S)return {state:"stale",scene:r,reason:`Installed runtime versions (${y}, ${S}) do not match the metadata and shader receipt.`,coverage:m};if(a.runtime.threeBlocksShaderClosure!==x)return {state:"stale",scene:r,reason:"The installed three-blocks/shaders runtime closure differs from the capture receipt.",coverage:m};let R=await b(e),k=Object.keys(R),V=Object.keys(d.inputs),P=k.filter(b=>!Object.hasOwn(d.inputs,b)),T=V.filter(b=>!Object.hasOwn(R,b)),f=k.filter(b=>Object.hasOwn(d.inputs,b)&&d.inputs[b]!==R[b]);return P.length>0||T.length>0||f.length>0?{state:"stale",scene:r,reason:`${P.length} added, ${T.length} removed, and ${f.length} changed semantic shader inputs.`,coverage:m,...f.length>0?{changedInputs:f}:{},...P.length>0?{addedInputs:P}:{},...T.length>0?{removedInputs:T}:{}}:{state:"fresh",scene:r,reason:"Manifest, installed shader runtime closure, and the shader-relevant source snapshot match.",coverage:m}}catch(o){return {state:"invalid",scene:r,reason:o instanceof Error?o.message:String(o)}}}a(fe,"inspectShaders");async function ye(e,t){if(t.artifacts?.text==="pending")return {state:"missing",reason:"The template has no verified text artifacts yet.",atlases:[]};let r=await g$1(e);return {state:r.state,reason:r.reason,atlases:r.atlases.map(s=>({name:s.font.key,glyphs:s.codePoints.length,width:s.texture.width,height:s.texture.height}))}}a(ye,"inspectText");function Re(e,t){if(e.lifecycle.assetsReady&&e.assets.codecs.some(r=>!r.available))throw new Error("Runtime status receipt claims assets ready while a configured codec is unavailable.");if(t.features.text!==(e.text!==void 0))throw new Error("Runtime status receipt text observation does not match three-blocks.json.")}a(Re,"validateRuntimeReceiptForProject");async function be(e,t){let r=h.join(e,...te.split("/"));if(!await d(r))return {kind:"absent",receipt:null,reason:"No browser observation receipt is available."};try{let s=await i(e,h.dirname(r),"Runtime status receipt directory"),n=pe(await O(s,h.join(s,h.basename(r)),re,"Runtime status receipt"));return Re(n,t),{kind:"valid",receipt:n,reason:n.error??`Browser observation captured at ${n.observedAt}.`}}catch(s){return {kind:"invalid",receipt:null,reason:`Runtime status receipt is invalid: ${s instanceof Error?s.message:String(s)}`}}}a(be,"inspectRuntimeReceipt");function ge(){return {scene:false,component:false,assetManifest:false,workerRestart:false}}a(ge,"emptyCapabilities");function we(){return {attempted:false,succeeded:null,rollbackPreserved:null,workerRestarted:false}}a(we,"emptyOutcome");function ke(){return []}a(ke,"configuredCodecs");function Se(e,t,r){if(t.state!=="fresh")return "three-blocks shaders capture";if(r!==void 0&&r.state!=="ready")return "three-blocks text generate";let s=e.receipt;return e.kind!=="valid"||s===null||s.lifecycle.state==="error"?H:s.text!==void 0&&s.text.state!=="ready"?"three-blocks text generate":H}a(Se,"recoveryCommand");async function xe(e=process.cwd()){let t=await ee(e),r=b$1(await O(t,h.join(t,"three-blocks.json"),a$2.metadata,"Project metadata")),s=await fe(t,r),n=r.features.text?await ye(t,r):void 0,o=await be(t,r),a=o.receipt,d=o.kind==="invalid",l=d||a?.lifecycle.state==="error",m=a===null?{state:d?"error":"starting",backend:null,renderer:null,protocolVersion:1}:{state:l?"error":a.lifecycle.workerReady?"worker ready":"starting",backend:a.worker.backend,renderer:a.worker.renderer,protocolVersion:a.worker.protocolVersion},y=a===null?{state:d?"error":"starting",codecs:ke(),resources:0}:{state:l?"error":a.lifecycle.assetsReady?"assets ready":"starting",codecs:a.assets.codecs,resources:a.assets.resources},S=a===null?{state:d?"error":"starting",capabilities:ge(),outcome:we()}:{state:l||a.hmr.outcome.attempted&&(a.hmr.outcome.succeeded!==true||a.hmr.outcome.rollbackPreserved!==true)?"error":a.hmr.outcome.attempted?"first frame":"starting",capabilities:a.hmr.capabilities,outcome:a.hmr.outcome},x=a===null?{state:d?"error":"starting",snapshots:0,textures:0,workerProfiler:false,mainPanels:false}:{state:l?"error":a.stats.snapshots>0&&a.stats.workerProfiler&&a.stats.mainPanels?"first frame":"starting",...a.stats},R=a===null?{state:d?"error":"starting",mode:null,pipelines:0,artifactState:s.state}:{state:l?"error":a.lifecycle.compiled?s.state==="fresh"?a.shaders.mode:s.state:a.lifecycle.state,mode:a.shaders.mode,pipelines:a.shaders.pipelines,artifactState:s.state},k=n===void 0?void 0:a?.text===void 0?{state:d?"error":"starting",atlases:0,glyphs:0,requiredGlyphs:0}:{state:l?"error":n.state==="ready"?a.text.state:n.state,atlases:a.text.atlases,glyphs:a.text.glyphs,requiredGlyphs:a.text.requiredGlyphs};return {schemaVersion:1,root:t,metadata:r,configuration:{worker:m,assets:y,hmr:S,optimization:R,stats:x,...k===void 0?{}:{text:k}},runtime:{state:d?"error":a?.lifecycle.state??"starting",observed:a!==null,observedAt:a?.observedAt??null,reason:o.reason,recovery:Se(o,s,n),observation:a},shaders:s,...n?{text:n}:{}}}a(xe,"inspectProject");async function Z(e){let[t,r]=await Promise.all([d(h.join(e,"three-blocks.shaders.json")),d(h.join(e,"three-blocks.text.ts"))]),[s,n]=await Promise.all([t?d$1(e):Promise.resolve(void 0),r?g$1(e):Promise.resolve(void 0)]);return {schemaVersion:1,root:e,kind:"adopted",markers:{shaders:t,text:r},...s===void 0?{}:{shaders:s},...n===void 0?{}:{text:n}}}a(Z,"inspectAdoptedProject");async function qe(e=process.cwd()){let t=await ee(e),r=h.join(t,"three-blocks.json");if(await d(r)){try{b$1(await O(t,r,a$2.metadata,"Project metadata"));}catch{return Z(t)}return xe(t)}return Z(t)}a(qe,"inspectThreeBlocksStatus");function Ge(e){return Q(e)?(e.markers.shaders||e.markers.text)&&(e.shaders===void 0||e.shaders.state==="fresh")&&(e.text===void 0||e.text.state==="ready"):e.shaders.state==="fresh"&&(e.text===void 0||e.text.state==="ready")&&e.runtime.state!=="error"}a(Ge,"threeBlocksStatusIsFresh");function $e(e){return e==="ktx2"?"KTX2":e==="draco"?"Draco":e==="meshopt"?"Meshopt":e}a($e,"codecName");function ve(e,t=Date.now()){let r=t-Date.parse(e);if(!Number.isFinite(r)||r<0)return e;let s=Math.round(r/1e3);if(s<60)return "just now";let n=Math.round(s/60);if(n<60)return `${n} minute${n===1?"":"s"} ago`;let o=Math.round(n/60);return o<48?`${o} hour${o===1?"":"s"} ago`:`${Math.round(o/24)} days ago`}a(ve,"relativeTime");function w(e,t,r){return `${e} ${d$2(t,12)} ${r}`}a(w,"row");function v(e,t){return ` ${d$2(b$2.dim(e),12)} ${b$2.dim(t)}`}a(v,"subRow");function Pe(e){return e<100?e.toFixed(1):Math.round(e).toString()}a(Pe,"milliseconds");function Te(e){return e?`${e.render} render \xB7 ${e.compute} compute`:"no coverage"}a(Te,"coverageText");function je(e){let t=[w(g$2(e.state),"shaders",`${e.state==="fresh"?"fresh":b$2.warn(e.state)} ${c$3.dot} ${b$2.dim(e.reason)}`)];for(let r of e.scenes){let s=r.timing,n=s?.source==="committed-capture"?s.adapter??"captured adapter":"this capture",o=s===void 0?"":s.runs>1?`measured median of ${s.runs}`:"single-capture estimate",a=s===void 0?"":`\u2248${Pe(s.avoidedBuildMs)} ms TSL work avoided`,d=s===void 0?r.state==="fresh"?` ${c$3.dot} ${b$2.dim("capture again to record a timing estimate")}`:"":` ${c$3.dot} ${b$2.dim(`${a} \xB7 ${o} \xB7 ${n}`)}`;t.push(w(g$2(r.state),`${r.scene}:${r.backend}`,`${r.state} ${c$3.dot} ${Te(r.coverage)}${d}`)),s!==void 0&&s.spreadMs>s.avoidedBuildMs*.4&&t.push(v("measure",b$2.warn("noisy measurement \u2014 close other GPU apps and re-run")));let l=[...r.changedInputs??[],...r.addedInputs??[],...r.removedInputs??[]];l.length>0&&t.push(v("changed",l.join(", ")));}return e.state!=="fresh"&&t.push(`${c$3.info} ${b$2.accent("three-blocks shaders capture")}`),t.join(`
3
3
  `)}a(je,"formatShaderMatrixStatus");function Ee(e){let t=e.scene,r=e.coverage,s=r?`${r.render} render \xB7 ${r.compute} compute`:"no coverage";if(e.state==="fresh")return [w(g$2("fresh"),t,`fresh ${c$3.dot} ${s} ${c$3.dot} ${b$2.dim("precompiled at runtime")}`)];let n=[w(g$2(e.state),t,`${e.state==="missing"?b$2.dim("missing"):b$2.warn(e.state)} ${c$3.dot} ${b$2.dim(e.reason)}`)],o=[...e.changedInputs??[],...e.addedInputs??[],...e.removedInputs??[]];return o.length>0&&n.push(v("changed",o.join(", "))),n}a(Ee,"shaderRow");function Me(e,t=Date.now()){let r=c$3.mark?`${c$3.mark} `:"",s=e.metadata.runtime,n=[`${r}${b$2.bold("three-blocks")} ${b$2.dim("status")}`,v("project",e.root),"",b$2.bold("Project"),w(c$3.tick,e.metadata.template,`three ${s.three} ${c$3.dot} three-blocks ${s.threeBlocks}`),"",b$2.bold("Shaders"),...Ee(e.shaders)];if(e.text){let d=e.text,l=d.atlases.reduce((m,y)=>m+y.glyphs,0);n.push("",b$2.bold("Text"),w(g$2(d.state),"coverage",d.state==="ready"?`ready ${c$3.dot} ${l} glyphs ${c$3.dot} ${d.atlases.length} atlas${d.atlases.length===1?"":"es"}`:`${b$2.warn(d.state)} ${c$3.dot} ${b$2.dim(d.reason)}`),...d.atlases.map(m=>v("atlas",`${m.name} \xB7 ${m.glyphs} glyphs \xB7 ${m.width}\xD7${m.height}`)));}let o=e.runtime.observation;if(n.push("",b$2.bold("Browser check")),o!==null&&e.runtime.state!=="error"){let d=o.assets.codecs.map(l=>`${$e(l.name)}${l.decoded?"":l.available?" (idle)":" (unavailable)"}`).join(" \xB7 ");n.push(w(c$3.tick,"verified",`${ve(o.observedAt,t)} ${c$3.dot} ${o.worker.renderer} worker ${c$3.dot} ${o.lifecycle.state} ${c$3.dot} ${o.shaders.pipelines} pipeline${o.shaders.pipelines===1?"":"s"} ${o.shaders.mode}`),v("codecs",d||"none configured")),o.hmr.outcome.attempted&&n.push(v("hmr",o.hmr.outcome.succeeded?`update succeeded${o.hmr.outcome.workerRestarted?" \xB7 worker restarted":""}`:"update failed"));}else e.runtime.state==="error"?n.push(w(c$3.cross,"runtime",b$2.danger(e.runtime.reason))):n.push(w(c$3.ring,"unverified",b$2.dim(`no browser run recorded \u2014 ${H}`)));return e.shaders.state==="fresh"&&(e.text===void 0||e.text.state==="ready")&&e.runtime.state!=="error"||n.push("",b$2.bold("Next"),`${c$3.info} ${b$2.accent(e.runtime.recovery)}`),n.join(`
4
4
  `)}a(Me,"formatStatus");function He(e,t=Date.now()){if(!Q(e))return Me(e,t);let r=c$3.mark?`${c$3.mark} `:"",s=e.markers.shaders||e.markers.text,n=[`${r}${b$2.bold("three-blocks")} ${b$2.dim("status")}`,v("project",e.root)];if(!s)return n.push("",`${c$3.dot} ${b$2.dim("no Three Blocks project markers found")}`,` ${b$2.dim("shaders:")} add three-blocks.shaders.json \u2014 /docs/tools/devtools`,` ${b$2.dim("starter:")} npx three-blocks starter`),n.join(`
5
5
  `);if(e.shaders!==void 0&&n.push("",b$2.bold("Shaders"),je(e.shaders)),e.text!==void 0){let o=e.text.atlases.reduce((a,d)=>a+d.codePoints.length,0);n.push("",b$2.bold("Text"),w(g$2(e.text.state),"coverage",e.text.state==="ready"?`ready ${c$3.dot} ${o} glyphs ${c$3.dot} ${e.text.atlases.length} atlas${e.text.atlases.length===1?"":"es"}`:`${b$2.warn(e.text.state)} ${c$3.dot} ${b$2.dim(e.text.reason)}`));}return n.join(`