@volter/editor 0.5.57

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.
Files changed (141) hide show
  1. package/BUNDLED_NOTICES +6196 -0
  2. package/LICENSE +686 -0
  3. package/LICENSE-BLENDER +1409 -0
  4. package/LICENSE-MCP +21 -0
  5. package/NOTICE +20 -0
  6. package/dist/.vite/manifest.json +1744 -0
  7. package/dist/assets/AudioViewer-DILwc7Pt.js +1 -0
  8. package/dist/assets/BVHLoader--2mLoe3e.js +1 -0
  9. package/dist/assets/BufferGeometryUtils-oP8-Ve4I.js +1 -0
  10. package/dist/assets/ColladaLoader-CyOCKXko.js +3 -0
  11. package/dist/assets/EntityModelDocument-DVlDQ_IJ.js +1 -0
  12. package/dist/assets/EnvironmentAssetDocument-BVGDJjW4.js +5 -0
  13. package/dist/assets/FBXLoader-DzWtiWYm.js +1 -0
  14. package/dist/assets/GameplaySessionTimeline-X_nMT8Sa.js +142 -0
  15. package/dist/assets/ImageViewer-D-aZoyr1.js +1 -0
  16. package/dist/assets/InspectorCanvasPreview-CLDhscy0.js +1 -0
  17. package/dist/assets/InspectorObjectPreview-CpHEw6QH.js +1 -0
  18. package/dist/assets/JsonAssetDocument-CLVN1V9Z.js +3 -0
  19. package/dist/assets/LineSegments2-vfeDUBfs.js +370 -0
  20. package/dist/assets/MTLLoader-D8SKGOsv.js +2 -0
  21. package/dist/assets/ModelAssetDocument-C60lQ11c.js +1 -0
  22. package/dist/assets/NonThreeAuthoringBootstrap-D8oHDftw.js +2 -0
  23. package/dist/assets/OBJLoader-8SrBLZ7J.js +5 -0
  24. package/dist/assets/Object3DPreview-CSmLPKkk.js +2 -0
  25. package/dist/assets/OnlineAssetDetail-D8wVVoay.js +2 -0
  26. package/dist/assets/OrbitControls-BHxt84w6.js +1 -0
  27. package/dist/assets/PLYLoader-BXUWXVtV.js +2 -0
  28. package/dist/assets/RectAreaLightUniformsLib-BGT7Bu4n.js +1 -0
  29. package/dist/assets/STLLoader-U-3fQm8v.js +1 -0
  30. package/dist/assets/SourceAssetViewer-BcOCJ2ye.js +13 -0
  31. package/dist/assets/StageHost-B_YrFNiC.js +1126 -0
  32. package/dist/assets/TDSLoader-BtiaQ4S3.js +1 -0
  33. package/dist/assets/ToolObject3DPreview-Crowr7IN.js +1 -0
  34. package/dist/assets/TransientHint-GNwuzA4c.js +1 -0
  35. package/dist/assets/VideoViewer-CjQ4P9AJ.js +1 -0
  36. package/dist/assets/_commonjsHelpers-D6-XlEtG.js +1 -0
  37. package/dist/assets/agx-base-srgb-BjWZJgrZ.lut +0 -0
  38. package/dist/assets/agx-look-medium-high-contrast-D5F_ob1L.lut +0 -0
  39. package/dist/assets/agx-look-punchy-dxsnycNs.lut +0 -0
  40. package/dist/assets/asset-editor-persistence-D3Yy77wZ.js +1 -0
  41. package/dist/assets/blender-emscripten-engine-C_uFxIuO.js +2 -0
  42. package/dist/assets/blender-node-editor.document-BfvoBocD.js +1 -0
  43. package/dist/assets/blender-outliner-model-B8b00oxr.js +1 -0
  44. package/dist/assets/blender-properties-tab-0M780SHF.js +3 -0
  45. package/dist/assets/blender-runtime-host-D8NHsAfD.js +4 -0
  46. package/dist/assets/blender-runtime-skin-DcwXD-m8.js +61 -0
  47. package/dist/assets/blender-runtime.document-BixTvrw8.js +7 -0
  48. package/dist/assets/blender-timeline.document-RtHIpbT1.js +1 -0
  49. package/dist/assets/blender-uv-editor.document-ChwaS3BG.js +1 -0
  50. package/dist/assets/blender-version.status-Bnhf8h1I.js +1 -0
  51. package/dist/assets/blender-wali-engine-C7bet0ss.js +2 -0
  52. package/dist/assets/blender.command-BCCEp0kb.js +1 -0
  53. package/dist/assets/blender.keymap-GAQgeklK.js +1 -0
  54. package/dist/assets/blender.status-ujwGU6dU.js +1 -0
  55. package/dist/assets/blender.style-Dcem5f_T.js +1 -0
  56. package/dist/assets/browserAll-Do0ehj3Q.js +14 -0
  57. package/dist/assets/client-DNXj_opT.js +25 -0
  58. package/dist/assets/clip-planes-CnAI6DZn.js +1 -0
  59. package/dist/assets/edit-mode-authoring-BX4IRQq9.js +1 -0
  60. package/dist/assets/editor-presentation-activity-C7SNSmTd.js +1 -0
  61. package/dist/assets/events-156d8d12.esm-Dy_KXdhT.js +36 -0
  62. package/dist/assets/fflate.module-DPuTF8aG.js +6 -0
  63. package/dist/assets/filmic-srgb-Ct35FIH6.lut +0 -0
  64. package/dist/assets/hosted-asset-materialization-BK7DHisS.js +2 -0
  65. package/dist/assets/index-5av5LJja.js +1691 -0
  66. package/dist/assets/index-BP6wv2A0.js +5 -0
  67. package/dist/assets/index-Bge9JUr6.js +1 -0
  68. package/dist/assets/index-BncK9THk.js +1 -0
  69. package/dist/assets/index-C5UECeSr.js +952 -0
  70. package/dist/assets/index-CJbYy-CF.js +3 -0
  71. package/dist/assets/index-CanA16PU.js +2 -0
  72. package/dist/assets/index-CinJrH5C.js +9 -0
  73. package/dist/assets/index-Cl83EGRl.js +2 -0
  74. package/dist/assets/index-CtzuWnCS.js +1 -0
  75. package/dist/assets/index-D2LwEE0L.js +562 -0
  76. package/dist/assets/index-D2fNXpHa.css +1 -0
  77. package/dist/assets/index-DUqP1RMl.js +1 -0
  78. package/dist/assets/index-D_NuPfjr.js +9 -0
  79. package/dist/assets/index-DaQZGF7d.js +1 -0
  80. package/dist/assets/index-DgapqSPi.js +7 -0
  81. package/dist/assets/index-IEjydI9d.js +1 -0
  82. package/dist/assets/index-gHZae-lw.js +13 -0
  83. package/dist/assets/jsx-runtime-DPjLkJKQ.js +9 -0
  84. package/dist/assets/model.layout-BJUEQYUI.js +1 -0
  85. package/dist/assets/models.finder-Bm1YfG95.js +1 -0
  86. package/dist/assets/product-Ywxte8eQ.js +1 -0
  87. package/dist/assets/properties-bone-constraints.inspector-Ck0Hzlvr.js +1 -0
  88. package/dist/assets/properties-bone.inspector-B8M42o0V.js +1 -0
  89. package/dist/assets/properties-collection.inspector-D-RSO5zy.js +1 -0
  90. package/dist/assets/properties-constraints.inspector-DbJa57oa.js +1 -0
  91. package/dist/assets/properties-data.inspector-DLgjbRW6.js +1 -0
  92. package/dist/assets/properties-material.inspector-B11LZYDW.js +1 -0
  93. package/dist/assets/properties-modifiers.inspector-BCWwuA26.js +1 -0
  94. package/dist/assets/properties-object.inspector-UZVJG49S.js +1 -0
  95. package/dist/assets/properties-output.inspector-XOwcBits.js +1 -0
  96. package/dist/assets/properties-particles.inspector-By04vT7R.js +1 -0
  97. package/dist/assets/properties-physics.inspector-D3T7FLdg.js +1 -0
  98. package/dist/assets/properties-render.inspector-Y0Rjr9gZ.js +1 -0
  99. package/dist/assets/properties-scene.inspector-CfyDWB4W.js +1 -0
  100. package/dist/assets/properties-texture.inspector-AFRsJx6-.js +1 -0
  101. package/dist/assets/properties-view-layer.inspector-Co07LAmQ.js +1 -0
  102. package/dist/assets/properties-world.inspector-C7T4JocI.js +1 -0
  103. package/dist/assets/react-18-DyywM-Z2.js +1 -0
  104. package/dist/assets/react-story-board-vrmj74Ng.js +1 -0
  105. package/dist/assets/react-three-rapier.esm-D874pLFD.js +1 -0
  106. package/dist/assets/sculpt.layout-zJF55yCR.js +1 -0
  107. package/dist/assets/session-1bPxsLdy.js +4167 -0
  108. package/dist/assets/shading.layout-DULYZV6M.js +1 -0
  109. package/dist/assets/sky-precompute-worker-ChN7J87v.js +1 -0
  110. package/dist/assets/spark.module-D1CUMLYS.js +12120 -0
  111. package/dist/assets/stage-keyboard-Cx90EYIT.js +1 -0
  112. package/dist/assets/stage-overlay-set-duu3P0mZ.js +1 -0
  113. package/dist/assets/stage-presence-markers-DKH3p_ao.js +1 -0
  114. package/dist/assets/story-capture-Dqurwlhr.js +1 -0
  115. package/dist/assets/story-mount-turn-2IYGgHob.js +1 -0
  116. package/dist/assets/story-pixi-preview-c78Aygdi.js +1 -0
  117. package/dist/assets/story-three-preview-CbZo5B3D.js +2 -0
  118. package/dist/assets/texture.layout-DASpHVht.js +1 -0
  119. package/dist/assets/three.module-BynznMJN.js +3840 -0
  120. package/dist/assets/uv-editing.layout-BEKHxmHw.js +1 -0
  121. package/dist/assets/vgai-shared-fontawesome-CFSkqz69.js +1 -0
  122. package/dist/assets/vgai-shared-jsx-dev-runtime-VfxIYu0y.js +9 -0
  123. package/dist/assets/vgai-shared-jsx-runtime-DIqBpTut.js +1 -0
  124. package/dist/assets/vgai-shared-react-DL5U9FnC.js +1 -0
  125. package/dist/assets/vgai-shared-react-dom-DFajMqMT.js +1 -0
  126. package/dist/assets/vgai-shared-react-dom-client-S0ozfl6_.js +1 -0
  127. package/dist/assets/vgai-shared-three-BWkbSQ3V.js +1 -0
  128. package/dist/assets/viewport-pick-context-DkawXbEi.js +1 -0
  129. package/dist/assets/webworkerAll-iMzrvNir.js +101 -0
  130. package/dist/assets/worker-DTgfRRas.js +1 -0
  131. package/dist/assets/world-documents-CGbrcsYk.js +3 -0
  132. package/dist/vgai-shared-react.json +10 -0
  133. package/dist/vgai-shared-three.json +3 -0
  134. package/dist-node/cli.js +17823 -0
  135. package/dist-node/create.js +14084 -0
  136. package/package.json +56 -0
  137. package/presets.mjs +2 -0
  138. package/src/contributions.d.ts +4 -0
  139. package/src/index.ts +9 -0
  140. package/starter/cube.blend +0 -0
  141. package/starter/cube.py +81 -0
@@ -0,0 +1,13 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StageHost-B_YrFNiC.js","assets/index-5av5LJja.js","assets/index-DaQZGF7d.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-D2LwEE0L.js","assets/client-DNXj_opT.js","assets/three.module-BynznMJN.js","assets/index-D2fNXpHa.css","assets/clip-planes-CnAI6DZn.js","assets/OrbitControls-BHxt84w6.js","assets/LineSegments2-vfeDUBfs.js","assets/viewport-pick-context-DkawXbEi.js","assets/editor-presentation-activity-C7SNSmTd.js"])))=>i.map(i=>d[i]);
2
+ import{a as s}from"./jsx-runtime-DPjLkJKQ.js";import{r as f}from"./index-DaQZGF7d.js";import"./index-CtzuWnCS.js";import{bC as Fe,bD as ee,bE as ze,bF as ge,_ as Ne,bG as Ue,t as h,bH as Oe,bI as ye,bp as _e,D as te,bJ as Ie,bK as Be,Z as He,bL as Ve,bM as Ge,aD as xe,bN as We,aF as K,aG as be,aH as T,bO as Z,aI as U,C as ve,bP as re,bQ as Xe,a6 as qe,bR as Je,b4 as Ke,az as Ze}from"./index-5av5LJja.js";import"./index-D2LwEE0L.js";import{J as Qe,C as Ye,c as Pe}from"./JsonAssetDocument-CLVN1V9Z.js";import{AudioViewer as et}from"./AudioViewer-DILwc7Pt.js";import{EnvironmentAssetDocument as tt}from"./EnvironmentAssetDocument-BVGDJjW4.js";import{ImageViewer as rt}from"./ImageViewer-D-aZoyr1.js";import{a as nt,b as st,S as ot}from"./StageHost-B_YrFNiC.js";import{RootDocumentContent as it,activeRootDocumentHost as at}from"./world-documents-CGbrcsYk.js";import{aB as lt,ap as ct,z as ut,j as G,I as dt,V as O,y as ft,L as ne,J as W,aV as we,i as Y,aW as pt,w as je,d as _,k as Se,aX as mt,aY as ht,am as X,bp as Ee,bJ as De,bo as Me,a0 as Ce,g as gt,Z as yt,af as xt,x as bt,a as ke,c as Le,ae as vt,K as wt,v as jt,h as St}from"./three.module-BynznMJN.js";import{EffectComposer as Et,LUT3DEffect as Dt,RenderPass as Mt,EffectPass as Ct}from"./index-C5UECeSr.js";import{s as Q}from"./asset-editor-persistence-D3Yy77wZ.js";import{ModelAssetDocument as kt}from"./ModelAssetDocument-C60lQ11c.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./client-DNXj_opT.js";import"./OrbitControls-BHxt84w6.js";import"./fflate.module-DPuTF8aG.js";import"./clip-planes-CnAI6DZn.js";import"./LineSegments2-vfeDUBfs.js";import"./viewport-pick-context-DkawXbEi.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./edit-mode-authoring-BX4IRQq9.js";import"./TransientHint-GNwuzA4c.js";import"./react-story-board-vrmj74Ng.js";function Lt({value:e,onChange:t,disabled:r=!1}){const[n,i]=f.useState(e??""),o=Fe();f.useEffect(()=>{i(e??"")},[e]);const l=()=>{const a=n.trim();a&&a!==e&&t(a)};return e===null?s.jsxs("div",{className:"vgai-color-input",children:[s.jsx("div",{className:"vgai-color-input-mixed"}),s.jsx(ee,{placeholder:"—",disabled:r,onChange:a=>{a.target.value&&t(a.target.value)},"data-mixed":"true"})]}):s.jsxs("div",{className:"vgai-color-input",children:[s.jsx(ze,{value:e,disabled:r,onChange:a=>{o?.begin(),t(a.target.value)},onBlur:()=>o?.end()}),s.jsx(ee,{value:n,disabled:r,onChange:a=>i(a.target.value),onBlur:l,onKeyDown:a=>{a.key==="Enter"?(l(),a.target.blur()):a.key==="Escape"&&(i(e),a.target.blur())}})]})}class N extends Error{constructor(t){super(t.message),this.refusal=t,this.name="LiveModuleError"}}function Tt(e){return Object.keys(e).filter(t=>t!=="__esModule"&&t!=="Symbol.toStringTag")}function se(e){return typeof e=="object"&&e!==null&&e.isObject3D===!0}function At(e){if("default"in e)return{name:"default",value:e.default};const t=Tt(e);return t.length===0?{kind:"not-a-model",message:"This module exports nothing."}:t.length>1?{kind:"not-a-model",message:`This module has no default export and ${t.length} named exports (${t.join(", ")}), so there is no single subject to build. A model module default-exports its builder.`}:{name:t[0],value:e[t[0]]}}function oe(e){if(se(e))return{root:e};if(!e||typeof e!="object")return;const t=e;if(!se(t.root))return;const r=t.root;return Array.isArray(t.animations)&&r.animations.length===0&&(r.animations=t.animations),{root:r,...typeof t.dispose=="function"?{dispose:()=>t.dispose.call(e)}:{}}}function ie(e){if(e===void 0)return"undefined";if(e===null)return"null";if(typeof e!="object")return typeof e;if(Array.isArray(e))return"an array";const t=Object.keys(e);return t.length>0?`an object with keys ${t.slice(0,8).join(", ")}`:"an object with no own keys"}const ae="a model module returns a THREE.Object3D, or a build result `{ root, animations?, dispose? }` whose `root` is one.";async function $t(e,t){const r=oe(t);if(r)return{...r,exportName:e};if(typeof t!="function")return{kind:"not-a-model",message:`Export '${e}' is ${ie(t)}, not a function and not a model — `+ae};let n;try{n=await t()}catch(o){return{kind:"import-failed",message:`Export '${e}' threw while building: ${Te(o)}`,...o instanceof Error&&o.stack?{stack:o.stack}:{}}}const i=oe(n);return i?{...i,exportName:e}:{kind:"not-a-model",message:`Export '${e}' ran but returned ${ie(n)} — ${ae}`}}function Te(e){return e instanceof Error?e.message:String(e)}async function Rt(e,t,r){let n;try{n=await import(ge(e,t,r))}catch(l){throw new N({kind:"import-failed",message:Te(l),...l instanceof Error&&l.stack?{stack:l.stack}:{}})}const i=At(n);if("kind"in i)throw new N(i);const o=await $t(i.name,i.value);if("kind"in o)throw new N(o);return o}const Ft="data-vgai-pasteboard";function zt(e){let t=e;for(let r=0;r<12;r++){if(!t||typeof t!="object")return!1;const n=t;if(typeof n.type=="string")return n.props?.[Ft]==="true";if(typeof n.type=="function"){try{t=n.type(n.props??{})}catch{return!1}continue}return!1}return!1}async function Nt(e,t,r){let n;try{n=await import(ge(e,t,r))}catch{return!1}const i=n.default;if(typeof i!="function")return!1;let o;try{o=i({})}catch{return!1}return zt(o)}const Ut=f.lazy(async()=>({default:(await Ne(()=>import("./StageHost-B_YrFNiC.js").then(t=>t.c),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]))).Object3DDocumentViewport}));function Ot(e){return _t(e.documentId,e.chromeless),s.jsx(f.Suspense,{fallback:s.jsx(nt,{testId:"object3d-document-loading",children:st}),children:s.jsx(Ut,{...e})})}function _t(e,t=!1){f.useEffect(()=>{if(!t)return Ue(e)},[e,t])}function It({documentId:e,active:t,modulePath:r}){const n=at(),i=f.useMemo(()=>({worldId:`pasteboard:${r}`,kind:"dom",path:r,zOrder:0,pausable:!1,entryOnly:!0}),[r]);return n?s.jsx("div",{style:{position:"relative",height:"100%",width:"100%"},children:s.jsx(it,{documentId:e,active:t,composite:n.composite,descriptor:i,store:n.store})}):s.jsx("div",{style:{padding:20,color:h.content.muted},children:"This pasteboard needs the project session's root-document host, which is not installed yet. Reopen the file once the project finishes loading."})}const le={height:"100%",width:"100%",minHeight:0,display:"flex",position:"relative"},ce={flex:1,minWidth:0,minHeight:0,display:"flex"};function Bt(e,t){if(e.kind!=="import-failed")return{message:e.message};const r=Ge(t);return r?{message:r,stack:e.message}:{message:e.message,stack:e.stack}}function Ht({documentId:e,projectRoot:t,modulePath:r,displayName:n,active:i,fallback:o}){const[l,a]=f.useState({status:"probing"}),[y,c]=f.useState(null),m=f.useMemo(()=>{const d=new lt;return d.name=r.split("/").pop()??r,d},[r]),u=f.useRef(!1);f.useEffect(()=>{let d=!1,v=0,p=null,g=Promise.resolve(),E=null,j=null;const S=()=>{p&&(m.remove(p),m.animations=[],j?j():te(p),p=null,j=null)},D=(w,M)=>{S(),p=w,j=M,m.add(w),m.animations=w.animations,Ve(e)},L=(w,M)=>{if(w.kind==="not-a-model"&&!M){a({status:"fallback",reason:w.message});return}const C=Bt(w,r);c(C),He.error(`${r}: ${C.message}`,"live-module"),M||a({status:"fallback",reason:w.message})},$=w=>d||w!==v,H=async()=>{v+=1;const w=v,M=Be();let C;try{C=await Rt(t,r,M)}catch(A){if($(w))return;if(!(A instanceof N))throw A;if(A.refusal.kind==="not-a-model"&&p===null){const V=await Nt(t,r,M);if($(w))return;if(V){c(null),a({status:"pasteboard"});return}}E=A,L(A.refusal,p!==null);return}if($(w)){C.dispose?C.dispose():te(C.root);return}D(C.root,C.dispose??null),E=null,Ie(r),c(null),a({status:"live",exportName:C.exportName})},F=()=>(g=H(),g),x=Oe(e,async()=>{let w=F();for(;;){if(await w,d)throw new Error(`Document closed while rebuilding: ${r}`);if(w===g)break;w=g}if(E)throw E});F();const k=ye();return()=>{d=!0,x(),k(),S()}},[m,e,r,t]),f.useEffect(()=>{if(l.status!=="live"||u.current)return;let d=0,v=0;const p=()=>{const g=_e(e);if(g){u.current=!0,new ct().setFromObject(m).isEmpty()||g.frame();return}++v>60||(d=requestAnimationFrame(p))};return d=requestAnimationFrame(p),()=>cancelAnimationFrame(d)},[m,e,l.status]);const b=f.useCallback(()=>({root:m,dispose(){}}),[m]);return l.status==="probing"?s.jsxs("div",{style:{padding:20,color:h.content.muted},children:["Inspecting ",n,"…"]}):l.status==="pasteboard"?s.jsx(It,{documentId:e,active:i,modulePath:r}):l.status==="fallback"?s.jsxs("div",{style:le,children:[y?s.jsx(ue,{failure:y}):null,s.jsx("div",{style:{...ce,overflow:"auto"},children:o})]}):s.jsxs("div",{style:le,children:[s.jsx("div",{style:{...ce,opacity:y?.35:1},children:s.jsx(Ot,{documentId:e,sourcePath:r,displayName:n,build:b,active:i,assetType:"model module",cameraDirection:ot,modelSource:{kind:"project-file",path:r}})}),y?s.jsx(ue,{failure:y}):null]})}function ue({failure:e}){return s.jsxs("div",{role:"alert","data-testid":"live-module-error",style:{position:"absolute",top:8,left:8,right:8,zIndex:2,maxHeight:"60%",overflow:"auto",padding:"8px 10px",borderRadius:h.shape.small,background:h.surface.raised,border:`1px solid ${h.semantic.danger}`,color:h.semantic.danger,fontFamily:h.typography.mono,fontSize:11,lineHeight:1.5,whiteSpace:"pre-wrap",wordBreak:"break-word",pointerEvents:"auto"},children:[s.jsx("div",{style:{fontWeight:600},children:"This module did not build — showing the last good model."}),s.jsx("div",{style:{marginTop:4},children:e.message}),e.stack?s.jsx("div",{style:{marginTop:6,color:h.content.muted},children:e.stack}):null]})}class Vt extends ut{constructor(t){super(t),this.type=G}setType(t){return this.type=t,this}load(t,r,n,i){const o=new dt(this.manager);o.setPath(this.path),o.setResponseType("text"),o.load(t,l=>{try{r(this.parse(l))}catch(a){i?i(a):console.error(a),this.manager.itemError(t)}},n,i)}parse(t){const r=/TITLE +"([^"]*)"/,n=/LUT_3D_SIZE +(\d+)/,i=/DOMAIN_MIN +([\d.]+) +([\d.]+) +([\d.]+)/,o=/DOMAIN_MAX +([\d.]+) +([\d.]+) +([\d.]+)/,l=/^([\d.e+-]+) +([\d.e+-]+) +([\d.e+-]+) *$/gm;let a=r.exec(t);const y=a!==null?a[1]:null;if(a=n.exec(t),a===null)throw new Error("LUTCubeLoader: Missing LUT_3D_SIZE information");const c=Number(a[1]),m=c**3*4,u=this.type===G?new Uint8Array(m):new Float32Array(m),b=new O(0,0,0),d=new O(1,1,1);if(a=i.exec(t),a!==null&&b.set(Number(a[1]),Number(a[2]),Number(a[3])),a=o.exec(t),a!==null&&d.set(Number(a[1]),Number(a[2]),Number(a[3])),b.x>d.x||b.y>d.y||b.z>d.z)throw new Error("LUTCubeLoader: Invalid input domain");const v=this.type===G?255:1;let p=0;for(;(a=l.exec(t))!==null;)u[p++]=Number(a[1])*v,u[p++]=Number(a[2])*v,u[p++]=Number(a[3])*v,u[p++]=v;const g=new ft;return g.image.data=u,g.image.width=c,g.image.height=c,g.image.depth=c,g.type=this.type,g.magFilter=ne,g.minFilter=ne,g.wrapS=W,g.wrapT=W,g.wrapR=W,g.generateMipmaps=!1,g.needsUpdate=!0,{title:y,size:c,domainMin:b,domainMax:d,texture3D:g}}}function z(e){return e.split("/").pop()??e}function I(e,t,r){return Math.min(r,Math.max(t,e))}function de(e){return[e.x,e.y,e.z].map(t=>t.toFixed(2)).join(", ")}function Gt(){const e=new je;e.background=new _("#171a22");const t=new Se(34,1,.1,100);t.position.set(6.6,4.6,8.8),t.lookAt(0,.7,0),e.add(new mt("#dce8ff","#322a27",2.1));const r=new ht("#fff3db",3.8);r.position.set(4,7,5),e.add(r);const n=[],i=[],o=(c,m,u)=>{n.push(c),i.push(m);const b=new Ce(c,m);return b.position.set(...u),b.castShadow=!0,b.receiveShadow=!0,e.add(b),b},l=[["#e64d45",-2.4],["#e5ad42",-1.2],["#55b86a",0],["#47a9d8",1.2],["#8a68d7",2.4]];for(const[c,m]of l)o(new Ee(.48,48,32),new X({color:c,roughness:.3,metalness:.08}),[m,.65,0]);[.06,.18,.5,.82,1].forEach((c,m)=>{const u=Math.round(c*255);o(new De(.78,.78,.78),new X({color:new _(`rgb(${u}, ${u}, ${u})`),roughness:.72}),[-2.4+m*1.2,1.85,-.1])});const y=o(new Me(9,6),new X({color:"#777b86",roughness:.92}),[0,.08,-1.8]);return y.rotation.x=-Math.PI/2,{scene:e,camera:t,dispose:()=>{for(const c of n)c.dispose();for(const c of i)c.dispose()}}}function Wt({lut:e,settingsRef:t}){const r=f.useRef(null);return f.useEffect(()=>{const n=r.current;if(!n)return;let i=!1,o=0;const l=document.createElement("canvas");l.setAttribute("aria-label","LUT before and after preview"),l.style.width="100%",l.style.height="100%",l.style.display="block",n.replaceChildren(l);const a=new we({canvas:l,antialias:!0});a.outputColorSpace=Y,a.toneMapping=pt,a.toneMappingExposure=1,a.shadowMap.enabled=!0;const y=Gt(),c=new Et(a),m=new Dt(e.texture3D,{tetrahedralInterpolation:!0});c.addPass(new Mt(y.scene,y.camera)),c.addPass(new Ct(y.camera,m));const u={width:1,height:1},b=()=>{const g=t.current,E=Math.round(u.width*I(g.split,.05,.95));m.blendMode.opacity.value=I(g.intensity,0,1),m.tetrahedralInterpolation=g.tetrahedral,a.setScissorTest(!1),a.setRenderTarget(null),a.clear(),a.setScissorTest(!0),a.setScissor(0,0,E,u.height),a.render(y.scene,y.camera),a.setScissor(E,0,u.width-E,u.height),c.render(),a.setScissorTest(!1)},d=()=>{const g=n.getBoundingClientRect();u.width=Math.max(1,Math.floor(g.width)),u.height=Math.max(1,Math.floor(g.height)),a.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),a.setSize(u.width,u.height,!1),c.setSize(u.width,u.height),y.camera.aspect=u.width/u.height,y.camera.updateProjectionMatrix()};d(),b();const v=new ResizeObserver(()=>{d(),b()});v.observe(n);const p=()=>{i||(b(),o=requestAnimationFrame(p))};return o=requestAnimationFrame(p),()=>{i=!0,cancelAnimationFrame(o),v.disconnect(),c.dispose(),m.dispose(),y.dispose(),a.dispose(),l.remove()}},[e,t]),s.jsx("div",{ref:r,"data-testid":"lut-preview",style:{width:"100%",height:"100%",minHeight:260,background:"#171a22"}})}function Xt({settings:e,onChange:t}){return s.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:4},children:[s.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Intensity",s.jsx(U,{value:e.intensity,onChange:r=>t({...e,intensity:I(r,0,1)}),step:.01,precision:2})]}),s.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Comparison split",s.jsx(U,{value:e.split,onChange:r=>t({...e,split:I(r,.05,.95)}),step:.01,precision:2})]}),s.jsxs("label",{style:{display:"flex",alignItems:"center",gap:7,fontSize:11},children:[s.jsx(ve,{checked:e.tetrahedral,onChange:r=>t({...e,tetrahedral:r.target.checked})}),"Tetrahedral interpolation"]}),s.jsx("div",{style:{color:h.content.muted,fontSize:10,lineHeight:1.45},children:"Preview controls are session-only. Bind the LUT and accepted intensity in the owning TSX post-processing composition."})]})}async function qt(e){const t=await Z(e);if(t===null)throw new Error(`CUBE LUT not found: ${e}`);return new Vt().parse(t)}function Jt({documentId:e,assetPath:t,active:r=!0}){const[n,i]=f.useState(0),[o,l]=f.useState(null),[a,y]=f.useState(null),[c,m]=f.useState({intensity:1,split:.5,tetrahedral:!0}),u=f.useRef(c);u.current=c,f.useEffect(()=>{if(r)return Q(t,()=>i(d=>d+1))},[r,t]),f.useEffect(()=>{if(!r)return;let d=!1,v=null;return l(null),y(null),qt(t).then(p=>{if(v=p,d){p.texture3D.dispose();return}l(p)},p=>{d||y(p instanceof Error?p.message:String(p))}),()=>{d=!0,v?.texture3D.dispose()}},[r,t,n]);const b=f.useMemo(()=>[{id:"lut-profile",title:"Color Grade",icon:We,order:xe,body:{kind:"custom",...o?{data:{title:o.title,size:o.size,domainMin:o.domainMin.toArray(),domainMax:o.domainMax.toArray()}}:{},render:()=>s.jsxs("div",{style:{display:"grid",gridTemplateColumns:"auto 1fr",gap:"6px 10px"},children:[s.jsx("span",{style:{color:h.content.muted},children:"Title"}),s.jsx("span",{children:o?.title||z(t)}),s.jsx("span",{style:{color:h.content.muted},children:"Cube"}),s.jsx("span",{children:o?`${o.size}³`:"—"}),s.jsx("span",{style:{color:h.content.muted},children:"Domain"}),s.jsx("span",{children:o?`${de(o.domainMin)} → ${de(o.domainMax)}`:"—"})]})}},{id:"lut-preview-settings",title:"Preview",icon:be,order:K,body:{kind:"custom",data:{...c},render:()=>s.jsx(Xt,{settings:c,onChange:m})}}],[t,o,c]);return a?s.jsx(T,{documentId:e,active:r,type:"color grade",title:z(t),status:"CUBE LUT unavailable",children:s.jsx("div",{role:"alert",style:{padding:20,color:h.semantic.danger},children:a})}):o?s.jsx(T,{documentId:e,active:r,type:"color grade",title:z(t),sections:b,status:`CUBE LUT · ${o.size}³`,fill:!0,children:s.jsxs("div",{style:{position:"relative",width:"100%",height:"100%",minHeight:0,background:"#171a22"},children:[s.jsx(Wt,{lut:o,settingsRef:u}),s.jsx("div",{style:{position:"absolute",left:12,top:12,padding:"4px 7px",borderRadius:4,background:"rgba(12,14,20,0.72)",color:"#f2f4f8",fontSize:10,pointerEvents:"none"},children:"Original"}),s.jsx("div",{style:{position:"absolute",right:12,top:12,padding:"4px 7px",borderRadius:4,background:"rgba(12,14,20,0.72)",color:"#f2f4f8",fontSize:10,pointerEvents:"none"},children:o.title||"Graded"})]})}):s.jsx(T,{documentId:e,active:r,type:"color grade",title:z(t),status:"Loading CUBE LUT",children:s.jsx("div",{style:{padding:20,color:h.content.muted},children:"Loading color grade…"})})}const Kt=[".vert",".vert.glsl"],Zt=[".frag",".frag.glsl"];function Qt(e){return e.split(/[?#]/,1)[0].toLowerCase()}function Yt(e,t=""){const r=Qt(e);return Kt.some(n=>r.endsWith(n))?"vertex":Zt.some(n=>r.endsWith(n))?"fragment":/\bgl_Position\b/.test(t)?"vertex":"fragment"}function Ae(e){const t=e.split(/[?#]/,1)[0];return/\.vert\.glsl$/i.test(t)?t.replace(/\.vert\.glsl$/i,".frag.glsl"):/\.frag\.glsl$/i.test(t)?t.replace(/\.frag\.glsl$/i,".vert.glsl"):/\.vert$/i.test(t)?t.replace(/\.vert$/i,".frag"):/\.frag$/i.test(t)?t.replace(/\.frag$/i,".vert"):null}function Pt(e){return e.replace(/\/\*[\s\S]*?\*\//g,t=>t.replace(/[^\n]/g," ")).replace(/\/\/[^\n]*/g,"")}function fe(e,t){const r=[],n=/\buniform\s+(?:(?:lowp|mediump|highp)\s+)?([A-Za-z_]\w*)\s+([A-Za-z_]\w*)\s*(?:\[\s*(\d+)\s*\])?\s*;/g;for(const i of Pt(e).matchAll(n)){const o=i[1],l=i[2];if(!o||!l)continue;const a=i[3]?Number.parseInt(i[3],10):void 0;r.push({name:l,type:o,...a?{arraySize:a}:{},stages:[t]})}return r}function er(e,t){const r=new Map;for(const n of[...fe(e,"vertex"),...fe(t,"fragment")]){const i=r.get(n.name);if(!i){r.set(n.name,n);continue}r.set(n.name,{...i,stages:[...new Set([...i.stages,...n.stages])]})}return[...r.values()]}function q(e,t){const r=e.split(`
3
+ `).map(n=>tr(n.trim(),t)).filter(n=>n!==null);return r.length===0&&e.trim()&&r.push({stage:t,severity:"error",message:e.trim()}),r}function tr(e,t){if(!e)return null;const r=e.match(/^(ERROR|WARNING):\s*\d+:(\d+)(?::|\((\d+)\):)\s*(.*)$/i);if(r)return{stage:t,severity:r[1].toLowerCase()==="warning"?"warning":"error",line:Number.parseInt(r[2],10),...r[3]?{column:Number.parseInt(r[3],10)}:{},message:r[4]||e};const n=e.match(/^\d+:(\d+)\((\d+)\):\s*(?:(error|warning)\s*:?)?\s*(.*)$/i);return n?{stage:t,severity:n[3]?.toLowerCase()==="warning"?"warning":"error",line:Number.parseInt(n[1],10),column:Number.parseInt(n[2],10),message:n[4]||e}:null}function pe(e){return`#line 1
4
+ ${e}`}const rr=`varying vec2 vUv;
5
+
6
+ void main() {
7
+ vUv = uv;
8
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
9
+ }`,nr=`varying vec2 vUv;
10
+
11
+ void main() {
12
+ gl_FragColor = vec4(vUv, 0.55, 1.0);
13
+ }`;function J(e,t=null){return{path:t,source:e==="vertex"?rr:nr,available:!1}}function R(e){return e?.split("/").pop()??"Preview fallback"}function P(e){return e.type==="vec3"&&/(colou?r|tint|albedo|emissive)/i.test(e.name)}function $e(e){return/^(u|i)?time$/i.test(e.name)&&/^(float|double)$/.test(e.type)?"time":/^(u|i)?resolution$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"resolution":/^(u|i)?mouse$/i.test(e.name)&&/^([diu]?vec)[234]$/.test(e.type)?"mouse":null}function B(e){if(P(e))return/horizon/i.test(e.name)?"#badbe9":/zenith/i.test(e.name)?"#297aba":/sun/i.test(e.name)?"#fff0c2":"#6f8cff";if(e.type==="bool")return!1;if(/^(float|double|int|uint)$/.test(e.type))return 0;const t=e.type.match(/^(?:[biu]?vec)([234])$/);return t?Array.from({length:Number.parseInt(t[1],10)},()=>0):0}function sr(){const e=new Uint8Array([38,43,58,255,176,190,255,255,176,190,255,255,38,43,58,255]),t=new wt(e,2,2,jt);return t.colorSpace=Y,t.magFilter=St,t.needsUpdate=!0,t}function Re(e,t,r){if(e.arraySize){const{arraySize:i,...o}=e;return Array.from({length:i},()=>Re(o,t,r))}if(/^sampler2D/.test(e.type)){const i=sr();return r.push(i),i}if(/^sampler/.test(e.type))return null;if(e.type==="mat3")return new xt;if(e.type==="mat4")return new bt;if(P(e))return new _(typeof t=="string"?t:"#6f8cff");const n=e.type.match(/^(?:[biu]?vec)([234])$/);if(n){const i=Array.isArray(t)?t:[],o=Number.parseInt(n[1],10);return o===2?new ke(i[0]??0,i[1]??0):o===3?new O(i[0]??0,i[1]??0,i[2]??0):new Le(i[0]??0,i[1]??0,i[2]??0,i[3]??0)}return t}function or(e,t,r,n,i){const o=$e(t);if(o==="time"){e.value=n;return}if(e.value instanceof _&&typeof r=="string"){e.value.set(r);return}const l=Array.isArray(r)?r:[];if(e.value instanceof ke){e.value.set(o==="resolution"?i.width:l[0]??0,o==="resolution"?i.height:l[1]??0);return}if(e.value instanceof O){e.value.set(o==="resolution"?i.width:l[0]??0,o==="resolution"?i.height:l[1]??0,o==="resolution"?1:l[2]??0);return}if(e.value instanceof Le){e.value.set(o==="resolution"?i.width:l[0]??0,o==="resolution"?i.height:l[1]??0,o==="resolution"?1:l[2]??0,l[3]??0);return}o!=="mouse"&&!t.arraySize&&!/^sampler|^mat/.test(t.type)&&(e.value=r)}function ir(e){return e==="box"?new De(1.35,1.35,1.35,48,48,48):e==="plane"?new Me(2.2,2.2,96,96):new Ee(.95,96,64)}function ar({vertexSource:e,fragmentSource:t,descriptors:r,valuesRef:n,geometry:i,onDiagnostics:o}){const l=f.useRef(null);return f.useEffect(()=>{const a=l.current;if(!a)return;let y=!1,c=0;const m=document.createElement("canvas");m.setAttribute("aria-label","Live shader preview"),m.style.width="100%",m.style.height="100%",m.style.display="block",a.replaceChildren(m);let u;try{u=new we({canvas:m,antialias:!0,alpha:!1})}catch(x){o([{stage:"program",severity:"error",message:x instanceof Error?x.message:String(x)}]);return}u.outputColorSpace=Y,u.setClearColor(1119261,1),u.debug.checkShaderErrors=!0;const b=new je,d=new Se(38,1,.01,100);d.position.set(0,0,3.4);const v=[],p={};for(const x of r)p[x.name]={value:Re(x,n.current[x.name]??B(x),v)};const g=new gt({vertexShader:pe(e),fragmentShader:pe(t),uniforms:p,side:yt,toneMapped:!1}),E=ir(i),j=new Ce(E,g);b.add(j);const S=[];u.debug.onShaderError=(x,k,w,M)=>{const C=k,A=w,V=M;S.push(...q(x.getProgramInfoLog(C)??"","program"),...q(x.getShaderInfoLog(A)??"","vertex"),...q(x.getShaderInfoLog(V)??"","fragment"))};const D={width:1,height:1},L=()=>{const x=a.getBoundingClientRect();D.width=Math.max(1,Math.floor(x.width)),D.height=Math.max(1,Math.floor(x.height)),u.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),u.setSize(D.width,D.height,!1),d.aspect=D.width/D.height,d.position.z=3.4/Math.min(1,d.aspect),d.updateProjectionMatrix()};L();const $=new ResizeObserver(L);$.observe(a);const H=new vt;try{u.compile(b,d),u.render(b,d),o(S.filter((x,k,w)=>w.findIndex(M=>M.stage===x.stage&&M.line===x.line&&M.message===x.message)===k))}catch(x){o([{stage:"program",severity:"error",message:x instanceof Error?x.message:String(x)}])}const F=()=>{if(y)return;const x=H.getElapsedTime();for(const k of r){const w=p[k.name];w&&or(w,k,n.current[k.name]??B(k),x,D)}i!=="plane"&&(j.rotation.y=x*.18,j.rotation.x=Math.sin(x*.22)*.08),u.render(b,d),c=requestAnimationFrame(F)};return c=requestAnimationFrame(F),()=>{y=!0,cancelAnimationFrame(c),$.disconnect(),u.debug.onShaderError=null,E.dispose(),g.dispose();for(const x of v)x.dispose();u.dispose(),m.remove()}},[r,t,i,o,n,e]),s.jsx("div",{ref:l,"data-testid":"shader-preview",style:{width:"100%",height:"100%",minHeight:240,background:"#11141d"}})}function lr({descriptors:e,values:t,onChange:r}){return e.length===0?s.jsx("div",{style:{color:h.content.muted},children:"No uniform declarations found."}):s.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:4},children:[e.map(n=>s.jsx(cr,{uniform:n,value:t[n.name]??B(n),onChange:i=>r(n.name,i)},n.name)),s.jsx("div",{style:{color:h.content.muted,fontSize:10,lineHeight:1.4},children:"Preview values are session-only. Author runtime defaults beside the ShaderMaterial in TS/TSX."})]})}function cr({uniform:e,value:t,onChange:r}){const n=$e(e),i=e.type.match(/^(?:[biu]?vec)([234])$/);let o;return n?o=s.jsxs("div",{style:{color:h.content.muted,fontSize:10},children:["Driven by preview ",n]}):P(e)?o=s.jsx(Lt,{value:typeof t=="string"?t:"#6f8cff",onChange:r}):e.type==="bool"?o=s.jsxs("label",{style:{display:"flex",alignItems:"center",gap:7,fontSize:11},children:[s.jsx(ve,{checked:!!t,onChange:l=>r(l.target.checked)}),t?"True":"False"]}):/^(float|double|int|uint)$/.test(e.type)?o=s.jsx(U,{value:typeof t=="number"?t:0,onChange:r,step:e.type==="int"||e.type==="uint"?1:.01,precision:e.type==="int"||e.type==="uint"?0:3}):i&&Array.isArray(t)?o=s.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${i[1]}, minmax(0, 1fr))`,gap:4},children:t.map((l,a)=>s.jsx(U,{value:l,label:"xyzw"[a],onChange:y=>{const c=[...t];c[a]=y,r(c)},step:.01},`${e.name}:${a}`))}):o=s.jsx("div",{style:{color:h.content.muted,fontSize:10},children:"Reflected for runtime binding; no scalar preview control."}),s.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5},children:[s.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:8},children:[s.jsx("span",{style:{color:h.content.primary,fontSize:11},children:e.name}),s.jsx("span",{style:{color:h.content.muted,fontSize:10},children:e.type})]}),o]})}function me({diagnostics:e,files:t}){return e.length===0?s.jsx("div",{style:{color:h.semantic.success,fontSize:11,padding:4},children:"Shader program compiled successfully."}):s.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6,padding:4},children:e.map((r,n)=>{const i=r.stage==="program"?null:t[r.stage];return s.jsxs("div",{style:{color:r.severity==="warning"?h.semantic.warning:h.semantic.danger,fontSize:10,lineHeight:1.45},children:[i?.available?R(i.path):r.stage,r.line?`:${r.line}${r.column?`:${r.column}`:""}`:""," · ",r.message]},`${r.stage}:${r.line??0}:${r.message}:${n}`)})})}async function ur(e){const t=await Z(e);if(t===null)throw new Error(`Could not read ${e}.`);const r=Yt(e,t),n=Ae(e),i=n?await Z(n):null,o={vertex:J("vertex"),fragment:J("fragment")};o[r]={path:e,source:t,available:!0};const l=r==="vertex"?"fragment":"vertex";return o[l]=i===null?J(l,n):{path:n,source:i,available:!0},o}function dr({documentId:e,assetPath:t,active:r=!0}){const[n,i]=f.useState(null),[o,l]=f.useState(0),[a,y]=f.useState("sphere"),[c,m]=f.useState([]),[u,b]=f.useState({}),[d,v]=f.useState(null);f.useEffect(()=>{if(!r)return;const j=()=>l(L=>L+1),S=Ae(t),D=[Q(t,j),...S?[Q(S,j)]:[]];return()=>{for(const L of D)L()}},[r,t]),f.useEffect(()=>{if(!r)return;let j=!1;return i(null),v(null),ur(t).then(S=>{j||i(S)},S=>{j||v(S instanceof Error?S.message:String(S))}),()=>{j=!0}},[r,t,o]);const p=f.useMemo(()=>n?er(n.vertex.source,n.fragment.source):[],[n]);f.useEffect(()=>{b(j=>Object.fromEntries(p.map(S=>[S.name,j[S.name]??B(S)])))},[p]);const g=f.useRef(u);g.current=u;const E=f.useMemo(()=>[{id:"shader-pair",title:"Shader Pair",icon:re,order:xe,body:{kind:"custom",render:()=>s.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:5,padding:4,fontSize:10},children:[s.jsxs("span",{children:["Vertex · ",n?R(n.vertex.path):"Loading…",n&&!n.vertex.available?" (preview fallback)":""]}),s.jsxs("span",{children:["Fragment · ",n?R(n.fragment.path):"Loading…",n&&!n.fragment.available?" (preview fallback)":""]}),s.jsx("span",{style:{color:h.content.muted},children:"Ordinary sibling GLSL files; runtime composition stays in TS/TSX."})]})}},{id:"shader-uniforms",title:"Uniforms",icon:be,order:K,description:`${p.length} reflected`,body:{kind:"custom",data:Object.fromEntries(p.map(j=>[j.name,u[j.name]])),render:()=>s.jsx(lr,{descriptors:p,values:u,onChange:(j,S)=>b(D=>({...D,[j]:S}))})}},{id:"shader-diagnostics",title:"Diagnostics",icon:c.length>0?Xe:re,order:K+100,description:c.length===0?"Compiled":`${c.length} issue${c.length===1?"":"s"}`,body:{kind:"custom",data:{diagnostics:c},render:()=>n&&s.jsx(me,{diagnostics:c,files:n})}}],[p,c,n,u]);return d?s.jsx(T,{documentId:e,active:r,type:"shader",title:R(t),status:"Shader unavailable",children:s.jsx("div",{role:"alert",style:{padding:20,color:h.semantic.danger},children:d})}):n?s.jsx(T,{documentId:e,active:r,type:"shader",title:R(t),sections:E,status:c.length===0?`GLSL · compiles · ${p.length} uniforms`:`GLSL · ${c.length} compile issues`,fill:!0,children:s.jsxs("div",{style:{width:"100%",height:"100%",minHeight:0,position:"relative",background:h.surface.panel},children:[s.jsx(ar,{vertexSource:n.vertex.source,fragmentSource:n.fragment.source,descriptors:p,valuesRef:g,geometry:a,onDiagnostics:m}),s.jsx("div",{style:{position:"absolute",left:10,top:10},children:s.jsxs(qe,{"aria-label":"Preview geometry",value:a,onChange:j=>y(j.target.value),children:[s.jsx("option",{value:"sphere",children:"Sphere"}),s.jsx("option",{value:"box",children:"Box"}),s.jsx("option",{value:"plane",children:"Plane"})]})}),c.length>0&&s.jsx("div",{style:{position:"absolute",left:12,right:12,bottom:12,maxHeight:120,overflow:"auto",padding:8,border:`1px solid ${h.semantic.danger}`,borderRadius:6,background:h.surface.overlay},children:s.jsx(me,{diagnostics:c,files:n})})]})}):s.jsx(T,{documentId:e,active:r,type:"shader",title:R(t),status:"Loading GLSL",children:s.jsx("div",{style:{padding:20,color:h.content.muted},children:"Loading shader files…"})})}function fr(e){const t=(e.split(/[?#]/,1)[0]??"").replace(/^\//,"");return t.startsWith("src/")&&/\.(?:[cm]?[jt]sx?)$/.test(t)}function pr(e){const t=Je(e);return t.editor==="model"?"model":t.editor==="image"?"image":t.editor==="audio"?"audio":t.editor==="data"?"json":t.editor==="environment"?"environment":t.format==="cube"?"lut":t.format==="glsl"||t.format==="vert"||t.format==="frag"?"shader":fr(e)?"module":t.editor==="source"&&t.previewable?"text":"binary"}function he({documentId:e,assetPath:t,active:r=!0}){const[n,i]=f.useState(null),[o,l]=f.useState(null),a=t.split("/").pop()??t;return f.useEffect(()=>{let y=!1;i(null),l(null),t.replace(/^\//,"");let c=0;async function m(){const b=++c;try{const d=await fetch(Ke(t),{cache:"no-store"}).then(v=>{if(!v.ok)throw new Error(`HTTP ${v.status}`);return v.text()});!y&&b===c&&(i(d),l(null))}catch(d){!y&&b===c&&l(d instanceof Error?d.message:String(d))}}const u=ye();return m(),()=>{y=!0,u()}},[t]),s.jsx(T,{documentId:e,active:r,type:"source",title:a,sections:[],status:`source · ${t}`,fill:!0,children:s.jsx("div",{style:{padding:12,height:"100%",minHeight:0,display:"flex",flexDirection:"column",gap:8},children:s.jsx("div",{style:{padding:8,flex:1,minHeight:0,display:"flex",overflow:"hidden",background:h.surface.inset,border:`1px solid ${h.boundary.default}`,borderRadius:h.shape.small},children:o!==null||n===null?s.jsx("div",{style:{fontFamily:h.typography.mono,fontSize:11,lineHeight:1.5,color:o?h.semantic.danger:h.content.muted,padding:4},children:o??"Loading…"}):s.jsx(Ye,{value:n,followChanges:!0,language:Pe(t),fontSize:11,maxHeight:"100%",ariaLabel:`Source of ${t}`})})})})}function Hr({documentId:e,assetPath:t,active:r=!0}){switch(pr(t)){case"model":return s.jsx(kt,{documentId:e,assetPath:t,displayName:t.split("/").pop()??t,active:r});case"image":return s.jsx(rt,{assetPath:t});case"audio":return s.jsx(et,{assetPath:t});case"json":return s.jsx(Qe,{documentId:e,assetPath:t,displayName:t.split("/").pop()??t,active:r,sections:[],status:`json · ${t}`});case"environment":return s.jsx(tt,{documentId:e,assetPath:t,active:r});case"lut":return s.jsx(Jt,{documentId:e,assetPath:t,active:r});case"shader":return s.jsx(dr,{documentId:e,assetPath:t,active:r});case"module":{const n=Ze()?.rootPath,i=s.jsx(he,{documentId:e,assetPath:t,active:r});return n?s.jsx(Ht,{documentId:e,projectRoot:n,modulePath:(t.split(/[?#]/,1)[0]??t).replace(/^\//,""),displayName:t.split("/").pop()??t,active:r,fallback:i}):i}case"text":return s.jsx(he,{documentId:e,assetPath:t,active:r});case"binary":return s.jsx(T,{documentId:e,active:r,type:"binary source",title:t.split("/").pop()??t,sections:[],status:`binary · ${t}`,children:s.jsxs("div",{style:{padding:16,color:h.content.muted,fontSize:12},children:[s.jsx("div",{style:{color:h.content.primary,fontWeight:600,marginBottom:6},children:t.split("/").pop()}),"This binary source is available in the project, but it has no safe in-editor renderer. Its file remains selectable and referenceable without being misidentified as another format."]})})}}export{Hr as SourceAssetViewer,pr as sourceAssetRoute};