@shopware-ag/dive 2.2.28 → 2.2.30

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 (38) hide show
  1. package/build/chunks/{AssetCache-L6OCrPAw.mjs → AssetCache-BAVgjwZD.mjs} +1 -1
  2. package/build/chunks/{AssetCache-DVzJ8Yli.cjs → AssetCache-DqR9MuYr.cjs} +1 -1
  3. package/build/chunks/{AssetLoader-BqYr2HuX.mjs → AssetLoader-DYfC6o4E.mjs} +984 -772
  4. package/build/chunks/AssetLoader-ULFVz0k1.cjs +5 -0
  5. package/build/chunks/{FileTypes-CPv-zi5P.mjs → FileTypes-Bf6fWggQ.mjs} +27 -11
  6. package/build/chunks/{FileTypes-DIRsbD12.cjs → FileTypes-DvYQDBRG.cjs} +2 -2
  7. package/build/chunks/{isFileTypeSupported-BSpswPHU.mjs → isFileTypeSupported-DRAnF6K8.mjs} +6 -5
  8. package/build/chunks/isFileTypeSupported-rlWKlVtV.cjs +1 -0
  9. package/build/chunks/occt-import-js-BQ1yZHCj.cjs +1 -0
  10. package/build/chunks/occt-import-js-D-bjjBtk.mjs +4 -0
  11. package/build/chunks/occt-import-js-DdbbsFBH.cjs +1 -0
  12. package/build/chunks/occt-import-js-ekuHaP1Z.mjs +4 -0
  13. package/build/dive.cjs +1 -1
  14. package/build/dive.mjs +2 -2
  15. package/build/engine/scene/Scene.d.ts +1 -1
  16. package/build/plugins/ar/index.cjs +1 -1
  17. package/build/plugins/ar/index.mjs +1 -1
  18. package/build/plugins/assetcache/index.cjs +1 -1
  19. package/build/plugins/assetcache/index.mjs +1 -1
  20. package/build/plugins/assetexporter/src/AssetExporter.d.ts +4 -0
  21. package/build/plugins/assetloader/index.cjs +1 -1
  22. package/build/plugins/assetloader/index.mjs +1 -1
  23. package/build/plugins/assetloader/src/loader/AssetLoader.d.ts +1 -0
  24. package/build/plugins/assetloader/src/step/STEPLoader.d.ts +29 -0
  25. package/build/plugins/orbitcontroller/index.cjs +1 -1
  26. package/build/plugins/orbitcontroller/index.mjs +1 -1
  27. package/build/plugins/orientationdisplay/index.cjs +1 -1
  28. package/build/plugins/orientationdisplay/index.mjs +1 -1
  29. package/build/plugins/quickview/index.cjs +1 -1
  30. package/build/plugins/quickview/index.mjs +1 -1
  31. package/build/plugins/state/index.cjs +1 -1
  32. package/build/plugins/state/index.mjs +1 -1
  33. package/build/plugins/toolbox/index.cjs +1 -1
  34. package/build/plugins/toolbox/index.mjs +1 -1
  35. package/build/types/file/FileTypes.d.ts +16 -0
  36. package/package.json +3 -2
  37. package/build/chunks/AssetLoader-DY5kNPMI.cjs +0 -4
  38. package/build/chunks/isFileTypeSupported-CrEqYiv9.cjs +0 -1
@@ -0,0 +1,5 @@
1
+ "use strict";var ue=Object.defineProperty;var fe=(h,e,t)=>e in h?ue(h,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):h[e]=t;var O=(h,e,t)=>fe(h,typeof e!="symbol"?e+"":e,t);const f=require("three"),H=require("./fflate.module-DHdJvhNh.cjs"),de=require("./FileTypes-DvYQDBRG.cjs"),Q=require("./isFileTypeSupported-rlWKlVtV.cjs"),U=require("./parse-error-Dy_EE4rL.cjs"),B=require("./AssetCache-DqR9MuYr.cjs");function Z(h,e){if(e===f.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),h;if(e===f.TriangleFanDrawMode||e===f.TriangleStripDrawMode){let t=h.getIndex();if(t===null){const s=[],i=h.getAttribute("position");if(i!==void 0){for(let a=0;a<i.count;a++)s.push(a);h.setIndex(s),t=h.getIndex()}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),h}const r=t.count-2,n=[];if(e===f.TriangleFanDrawMode)for(let s=1;s<=r;s++)n.push(t.getX(0)),n.push(t.getX(s)),n.push(t.getX(s+1));else for(let s=0;s<r;s++)s%2===0?(n.push(t.getX(s)),n.push(t.getX(s+1)),n.push(t.getX(s+2))):(n.push(t.getX(s+2)),n.push(t.getX(s+1)),n.push(t.getX(s)));n.length/3!==r&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const o=h.clone();return o.setIndex(n),o.clearGroups(),o}else return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",e),h}class he extends f.Loader{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(t){return new Te(t)}),this.register(function(t){return new be(t)}),this.register(function(t){return new Me(t)}),this.register(function(t){return new Ce(t)}),this.register(function(t){return new ye(t)}),this.register(function(t){return new Re(t)}),this.register(function(t){return new we(t)}),this.register(function(t){return new Se(t)}),this.register(function(t){return new Ae(t)}),this.register(function(t){return new xe(t)}),this.register(function(t){return new _e(t)}),this.register(function(t){return new Le(t)}),this.register(function(t){return new Ee(t)}),this.register(function(t){return new me(t)}),this.register(function(t){return new Ie(t)}),this.register(function(t){return new Ne(t)})}load(e,t,r,n){const o=this;let s;if(this.resourcePath!=="")s=this.resourcePath;else if(this.path!==""){const c=f.LoaderUtils.extractUrlBase(e);s=f.LoaderUtils.resolveURL(c,this.path)}else s=f.LoaderUtils.extractUrlBase(e);this.manager.itemStart(e);const i=function(c){n?n(c):console.error(c),o.manager.itemError(e),o.manager.itemEnd(e)},a=new f.FileLoader(this.manager);a.setPath(this.path),a.setResponseType("arraybuffer"),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(c){try{o.parse(c,s,function(l){t(l),o.manager.itemEnd(e)},i)}catch(l){i(l)}},r,i)}setDRACOLoader(e){return this.dracoLoader=e,this}setDDSLoader(){throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".')}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,r,n){let o;const s={},i={},a=new TextDecoder;if(typeof e=="string")o=JSON.parse(e);else if(e instanceof ArrayBuffer)if(a.decode(new Uint8Array(e,0,4))===re){try{s[b.KHR_BINARY_GLTF]=new Oe(e)}catch(u){n&&n(u);return}o=JSON.parse(s[b.KHR_BINARY_GLTF].content)}else o=JSON.parse(a.decode(e));else o=e;if(o.asset===void 0||o.asset.version[0]<2){n&&n(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));return}const c=new Ve(o,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let l=0;l<this.pluginCallbacks.length;l++){const u=this.pluginCallbacks[l](c);u.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),i[u.name]=u,s[u.name]=!0}if(o.extensionsUsed)for(let l=0;l<o.extensionsUsed.length;++l){const u=o.extensionsUsed[l],d=o.extensionsRequired||[];switch(u){case b.KHR_MATERIALS_UNLIT:s[u]=new ge;break;case b.KHR_DRACO_MESH_COMPRESSION:s[u]=new De(o,this.dracoLoader);break;case b.KHR_TEXTURE_TRANSFORM:s[u]=new Pe;break;case b.KHR_MESH_QUANTIZATION:s[u]=new ke;break;default:d.indexOf(u)>=0&&i[u]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+u+'".')}}c.setExtensions(s),c.setPlugins(i),c.parse(r,n)}parseAsync(e,t){const r=this;return new Promise(function(n,o){r.parse(e,t,n,o)})}}function pe(){let h={};return{get:function(e){return h[e]},add:function(e,t){h[e]=t},remove:function(e){delete h[e]},removeAll:function(){h={}}}}const b={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class me{constructor(e){this.parser=e,this.name=b.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let r=0,n=t.length;r<n;r++){const o=t[r];o.extensions&&o.extensions[this.name]&&o.extensions[this.name].light!==void 0&&e._addNodeRef(this.cache,o.extensions[this.name].light)}}_loadLight(e){const t=this.parser,r="light:"+e;let n=t.cache.get(r);if(n)return n;const o=t.json,a=((o.extensions&&o.extensions[this.name]||{}).lights||[])[e];let c;const l=new f.Color(16777215);a.color!==void 0&&l.setRGB(a.color[0],a.color[1],a.color[2],f.LinearSRGBColorSpace);const u=a.range!==void 0?a.range:0;switch(a.type){case"directional":c=new f.DirectionalLight(l),c.target.position.set(0,0,-1),c.add(c.target);break;case"point":c=new f.PointLight(l),c.distance=u;break;case"spot":c=new f.SpotLight(l),c.distance=u,a.spot=a.spot||{},a.spot.innerConeAngle=a.spot.innerConeAngle!==void 0?a.spot.innerConeAngle:0,a.spot.outerConeAngle=a.spot.outerConeAngle!==void 0?a.spot.outerConeAngle:Math.PI/4,c.angle=a.spot.outerConeAngle,c.penumbra=1-a.spot.innerConeAngle/a.spot.outerConeAngle,c.target.position.set(0,0,-1),c.add(c.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+a.type)}return c.position.set(0,0,0),c.decay=2,P(c,a),a.intensity!==void 0&&(c.intensity=a.intensity),c.name=t.createUniqueName(a.name||"light_"+e),n=Promise.resolve(c),t.cache.add(r,n),n}getDependency(e,t){if(e==="light")return this._loadLight(t)}createNodeAttachment(e){const t=this,r=this.parser,o=r.json.nodes[e],i=(o.extensions&&o.extensions[this.name]||{}).light;return i===void 0?null:this._loadLight(i).then(function(a){return r._getNodeRef(t.cache,i,a)})}}class ge{constructor(){this.name=b.KHR_MATERIALS_UNLIT}getMaterialType(){return f.MeshBasicMaterial}extendParams(e,t,r){const n=[];e.color=new f.Color(1,1,1),e.opacity=1;const o=t.pbrMetallicRoughness;if(o){if(Array.isArray(o.baseColorFactor)){const s=o.baseColorFactor;e.color.setRGB(s[0],s[1],s[2],f.LinearSRGBColorSpace),e.opacity=s[3]}o.baseColorTexture!==void 0&&n.push(r.assignTexture(e,"map",o.baseColorTexture,f.SRGBColorSpace))}return Promise.all(n)}}class Ae{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){const n=this.parser.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const o=n.extensions[this.name].emissiveStrength;return o!==void 0&&(t.emissiveIntensity=o),Promise.resolve()}}class Te{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_CLEARCOAT}getMaterialType(e){const r=this.parser.json.materials[e];return!r.extensions||!r.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const o=[],s=n.extensions[this.name];if(s.clearcoatFactor!==void 0&&(t.clearcoat=s.clearcoatFactor),s.clearcoatTexture!==void 0&&o.push(r.assignTexture(t,"clearcoatMap",s.clearcoatTexture)),s.clearcoatRoughnessFactor!==void 0&&(t.clearcoatRoughness=s.clearcoatRoughnessFactor),s.clearcoatRoughnessTexture!==void 0&&o.push(r.assignTexture(t,"clearcoatRoughnessMap",s.clearcoatRoughnessTexture)),s.clearcoatNormalTexture!==void 0&&(o.push(r.assignTexture(t,"clearcoatNormalMap",s.clearcoatNormalTexture)),s.clearcoatNormalTexture.scale!==void 0)){const i=s.clearcoatNormalTexture.scale;t.clearcoatNormalScale=new f.Vector2(i,i)}return Promise.all(o)}}class _e{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_IRIDESCENCE}getMaterialType(e){const r=this.parser.json.materials[e];return!r.extensions||!r.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const o=[],s=n.extensions[this.name];return s.iridescenceFactor!==void 0&&(t.iridescence=s.iridescenceFactor),s.iridescenceTexture!==void 0&&o.push(r.assignTexture(t,"iridescenceMap",s.iridescenceTexture)),s.iridescenceIor!==void 0&&(t.iridescenceIOR=s.iridescenceIor),t.iridescenceThicknessRange===void 0&&(t.iridescenceThicknessRange=[100,400]),s.iridescenceThicknessMinimum!==void 0&&(t.iridescenceThicknessRange[0]=s.iridescenceThicknessMinimum),s.iridescenceThicknessMaximum!==void 0&&(t.iridescenceThicknessRange[1]=s.iridescenceThicknessMaximum),s.iridescenceThicknessTexture!==void 0&&o.push(r.assignTexture(t,"iridescenceThicknessMap",s.iridescenceThicknessTexture)),Promise.all(o)}}class ye{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_SHEEN}getMaterialType(e){const r=this.parser.json.materials[e];return!r.extensions||!r.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const o=[];t.sheenColor=new f.Color(0,0,0),t.sheenRoughness=0,t.sheen=1;const s=n.extensions[this.name];if(s.sheenColorFactor!==void 0){const i=s.sheenColorFactor;t.sheenColor.setRGB(i[0],i[1],i[2],f.LinearSRGBColorSpace)}return s.sheenRoughnessFactor!==void 0&&(t.sheenRoughness=s.sheenRoughnessFactor),s.sheenColorTexture!==void 0&&o.push(r.assignTexture(t,"sheenColorMap",s.sheenColorTexture,f.SRGBColorSpace)),s.sheenRoughnessTexture!==void 0&&o.push(r.assignTexture(t,"sheenRoughnessMap",s.sheenRoughnessTexture)),Promise.all(o)}}class Re{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_TRANSMISSION}getMaterialType(e){const r=this.parser.json.materials[e];return!r.extensions||!r.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const o=[],s=n.extensions[this.name];return s.transmissionFactor!==void 0&&(t.transmission=s.transmissionFactor),s.transmissionTexture!==void 0&&o.push(r.assignTexture(t,"transmissionMap",s.transmissionTexture)),Promise.all(o)}}class we{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_VOLUME}getMaterialType(e){const r=this.parser.json.materials[e];return!r.extensions||!r.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const o=[],s=n.extensions[this.name];t.thickness=s.thicknessFactor!==void 0?s.thicknessFactor:0,s.thicknessTexture!==void 0&&o.push(r.assignTexture(t,"thicknessMap",s.thicknessTexture)),t.attenuationDistance=s.attenuationDistance||1/0;const i=s.attenuationColor||[1,1,1];return t.attenuationColor=new f.Color().setRGB(i[0],i[1],i[2],f.LinearSRGBColorSpace),Promise.all(o)}}class Se{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_IOR}getMaterialType(e){const r=this.parser.json.materials[e];return!r.extensions||!r.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const n=this.parser.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const o=n.extensions[this.name];return t.ior=o.ior!==void 0?o.ior:1.5,Promise.resolve()}}class xe{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_SPECULAR}getMaterialType(e){const r=this.parser.json.materials[e];return!r.extensions||!r.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const o=[],s=n.extensions[this.name];t.specularIntensity=s.specularFactor!==void 0?s.specularFactor:1,s.specularTexture!==void 0&&o.push(r.assignTexture(t,"specularIntensityMap",s.specularTexture));const i=s.specularColorFactor||[1,1,1];return t.specularColor=new f.Color().setRGB(i[0],i[1],i[2],f.LinearSRGBColorSpace),s.specularColorTexture!==void 0&&o.push(r.assignTexture(t,"specularColorMap",s.specularColorTexture,f.SRGBColorSpace)),Promise.all(o)}}class Ee{constructor(e){this.parser=e,this.name=b.EXT_MATERIALS_BUMP}getMaterialType(e){const r=this.parser.json.materials[e];return!r.extensions||!r.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const o=[],s=n.extensions[this.name];return t.bumpScale=s.bumpFactor!==void 0?s.bumpFactor:1,s.bumpTexture!==void 0&&o.push(r.assignTexture(t,"bumpMap",s.bumpTexture)),Promise.all(o)}}class Le{constructor(e){this.parser=e,this.name=b.KHR_MATERIALS_ANISOTROPY}getMaterialType(e){const r=this.parser.json.materials[e];return!r.extensions||!r.extensions[this.name]?null:f.MeshPhysicalMaterial}extendMaterialParams(e,t){const r=this.parser,n=r.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const o=[],s=n.extensions[this.name];return s.anisotropyStrength!==void 0&&(t.anisotropy=s.anisotropyStrength),s.anisotropyRotation!==void 0&&(t.anisotropyRotation=s.anisotropyRotation),s.anisotropyTexture!==void 0&&o.push(r.assignTexture(t,"anisotropyMap",s.anisotropyTexture)),Promise.all(o)}}class be{constructor(e){this.parser=e,this.name=b.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,r=t.json,n=r.textures[e];if(!n.extensions||!n.extensions[this.name])return null;const o=n.extensions[this.name],s=t.options.ktx2Loader;if(!s){if(r.extensionsRequired&&r.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,o.source,s)}}class Me{constructor(e){this.parser=e,this.name=b.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,r=this.parser,n=r.json,o=n.textures[e];if(!o.extensions||!o.extensions[t])return null;const s=o.extensions[t],i=n.images[s.source];let a=r.textureLoader;if(i.uri){const c=r.options.manager.getHandler(i.uri);c!==null&&(a=c)}return this.detectSupport().then(function(c){if(c)return r.loadTextureImage(e,s.source,a);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return r.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){const t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(t.height===1)}})),this.isSupported}}class Ce{constructor(e){this.parser=e,this.name=b.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const t=this.name,r=this.parser,n=r.json,o=n.textures[e];if(!o.extensions||!o.extensions[t])return null;const s=o.extensions[t],i=n.images[s.source];let a=r.textureLoader;if(i.uri){const c=r.options.manager.getHandler(i.uri);c!==null&&(a=c)}return this.detectSupport().then(function(c){if(c)return r.loadTextureImage(e,s.source,a);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return r.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){const t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(t.height===1)}})),this.isSupported}}class Ie{constructor(e){this.name=b.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,r=t.bufferViews[e];if(r.extensions&&r.extensions[this.name]){const n=r.extensions[this.name],o=this.parser.getDependency("buffer",n.buffer),s=this.parser.options.meshoptDecoder;if(!s||!s.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return o.then(function(i){const a=n.byteOffset||0,c=n.byteLength||0,l=n.count,u=n.byteStride,d=new Uint8Array(i,a,c);return s.decodeGltfBufferAsync?s.decodeGltfBufferAsync(l,u,d,n.mode,n.filter).then(function(m){return m.buffer}):s.ready.then(function(){const m=new ArrayBuffer(l*u);return s.decodeGltfBuffer(new Uint8Array(m),l,u,d,n.mode,n.filter),m})})}else return null}}class Ne{constructor(e){this.name=b.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,r=t.nodes[e];if(!r.extensions||!r.extensions[this.name]||r.mesh===void 0)return null;const n=t.meshes[r.mesh];for(const c of n.primitives)if(c.mode!==N.TRIANGLES&&c.mode!==N.TRIANGLE_STRIP&&c.mode!==N.TRIANGLE_FAN&&c.mode!==void 0)return null;const s=r.extensions[this.name].attributes,i=[],a={};for(const c in s)i.push(this.parser.getDependency("accessor",s[c]).then(l=>(a[c]=l,a[c])));return i.length<1?null:(i.push(this.parser.createNodeMesh(e)),Promise.all(i).then(c=>{const l=c.pop(),u=l.isGroup?l.children:[l],d=c[0].count,m=[];for(const _ of u){const w=new f.Matrix4,y=new f.Vector3,R=new f.Quaternion,E=new f.Vector3(1,1,1),L=new f.InstancedMesh(_.geometry,_.material,d);for(let S=0;S<d;S++)a.TRANSLATION&&y.fromBufferAttribute(a.TRANSLATION,S),a.ROTATION&&R.fromBufferAttribute(a.ROTATION,S),a.SCALE&&E.fromBufferAttribute(a.SCALE,S),L.setMatrixAt(S,w.compose(y,R,E));for(const S in a)if(S==="_COLOR_0"){const C=a[S];L.instanceColor=new f.InstancedBufferAttribute(C.array,C.itemSize,C.normalized)}else S!=="TRANSLATION"&&S!=="ROTATION"&&S!=="SCALE"&&_.geometry.setAttribute(S,a[S]);f.Object3D.prototype.copy.call(L,_),this.parser.assignFinalMaterial(L),m.push(L)}return l.isGroup?(l.clear(),l.add(...m),l):m[0]}))}}const re="glTF",G=12,$={JSON:1313821514,BIN:5130562};class Oe{constructor(e){this.name=b.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,G),r=new TextDecoder;if(this.header={magic:r.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==re)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const n=this.header.length-G,o=new DataView(e,G);let s=0;for(;s<n;){const i=o.getUint32(s,!0);s+=4;const a=o.getUint32(s,!0);if(s+=4,a===$.JSON){const c=new Uint8Array(e,G+s,i);this.content=r.decode(c)}else if(a===$.BIN){const c=G+s;this.body=e.slice(c,c+i)}s+=i}if(this.content===null)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class De{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=b.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(e,t){const r=this.json,n=this.dracoLoader,o=e.extensions[this.name].bufferView,s=e.extensions[this.name].attributes,i={},a={},c={};for(const l in s){const u=q[l]||l.toLowerCase();i[u]=s[l]}for(const l in e.attributes){const u=q[l]||l.toLowerCase();if(s[l]!==void 0){const d=r.accessors[e.attributes[l]],m=F[d.componentType];c[u]=m.name,a[u]=d.normalized===!0}}return t.getDependency("bufferView",o).then(function(l){return new Promise(function(u,d){n.decodeDracoFile(l,function(m){for(const _ in m.attributes){const w=m.attributes[_],y=a[_];y!==void 0&&(w.normalized=y)}u(m)},i,c,f.LinearSRGBColorSpace,d)})})}}class Pe{constructor(){this.name=b.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return(t.texCoord===void 0||t.texCoord===e.channel)&&t.offset===void 0&&t.rotation===void 0&&t.scale===void 0||(e=e.clone(),t.texCoord!==void 0&&(e.channel=t.texCoord),t.offset!==void 0&&e.offset.fromArray(t.offset),t.rotation!==void 0&&(e.rotation=t.rotation),t.scale!==void 0&&e.repeat.fromArray(t.scale),e.needsUpdate=!0),e}}class ke{constructor(){this.name=b.KHR_MESH_QUANTIZATION}}class oe extends f.Interpolant{constructor(e,t,r,n){super(e,t,r,n)}copySampleValue_(e){const t=this.resultBuffer,r=this.sampleValues,n=this.valueSize,o=e*n*3+n;for(let s=0;s!==n;s++)t[s]=r[o+s];return t}interpolate_(e,t,r,n){const o=this.resultBuffer,s=this.sampleValues,i=this.valueSize,a=i*2,c=i*3,l=n-t,u=(r-t)/l,d=u*u,m=d*u,_=e*c,w=_-c,y=-2*m+3*d,R=m-d,E=1-y,L=R-d+u;for(let S=0;S!==i;S++){const C=s[w+S+i],I=s[w+S+a]*l,M=s[_+S+i],p=s[_+S]*l;o[S]=E*C+L*I+y*M+R*p}return o}}const Fe=new f.Quaternion;class Ge extends oe{interpolate_(e,t,r,n){const o=super.interpolate_(e,t,r,n);return Fe.fromArray(o).normalize().toArray(o),o}}const N={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},F={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},ee={9728:f.NearestFilter,9729:f.LinearFilter,9984:f.NearestMipmapNearestFilter,9985:f.LinearMipmapNearestFilter,9986:f.NearestMipmapLinearFilter,9987:f.LinearMipmapLinearFilter},te={33071:f.ClampToEdgeWrapping,33648:f.MirroredRepeatWrapping,10497:f.RepeatWrapping},j={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},q={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},D={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},Ue={CUBICSPLINE:void 0,LINEAR:f.InterpolateLinear,STEP:f.InterpolateDiscrete},K={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function Be(h){return h.DefaultMaterial===void 0&&(h.DefaultMaterial=new f.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:f.FrontSide})),h.DefaultMaterial}function k(h,e,t){for(const r in t.extensions)h[r]===void 0&&(e.userData.gltfExtensions=e.userData.gltfExtensions||{},e.userData.gltfExtensions[r]=t.extensions[r])}function P(h,e){e.extras!==void 0&&(typeof e.extras=="object"?Object.assign(h.userData,e.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+e.extras))}function ve(h,e,t){let r=!1,n=!1,o=!1;for(let c=0,l=e.length;c<l;c++){const u=e[c];if(u.POSITION!==void 0&&(r=!0),u.NORMAL!==void 0&&(n=!0),u.COLOR_0!==void 0&&(o=!0),r&&n&&o)break}if(!r&&!n&&!o)return Promise.resolve(h);const s=[],i=[],a=[];for(let c=0,l=e.length;c<l;c++){const u=e[c];if(r){const d=u.POSITION!==void 0?t.getDependency("accessor",u.POSITION):h.attributes.position;s.push(d)}if(n){const d=u.NORMAL!==void 0?t.getDependency("accessor",u.NORMAL):h.attributes.normal;i.push(d)}if(o){const d=u.COLOR_0!==void 0?t.getDependency("accessor",u.COLOR_0):h.attributes.color;a.push(d)}}return Promise.all([Promise.all(s),Promise.all(i),Promise.all(a)]).then(function(c){const l=c[0],u=c[1],d=c[2];return r&&(h.morphAttributes.position=l),n&&(h.morphAttributes.normal=u),o&&(h.morphAttributes.color=d),h.morphTargetsRelative=!0,h})}function He(h,e){if(h.updateMorphTargets(),e.weights!==void 0)for(let t=0,r=e.weights.length;t<r;t++)h.morphTargetInfluences[t]=e.weights[t];if(e.extras&&Array.isArray(e.extras.targetNames)){const t=e.extras.targetNames;if(h.morphTargetInfluences.length===t.length){h.morphTargetDictionary={};for(let r=0,n=t.length;r<n;r++)h.morphTargetDictionary[t[r]]=r}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function je(h){let e;const t=h.extensions&&h.extensions[b.KHR_DRACO_MESH_COMPRESSION];if(t?e="draco:"+t.bufferView+":"+t.indices+":"+W(t.attributes):e=h.indices+":"+W(h.attributes)+":"+h.mode,h.targets!==void 0)for(let r=0,n=h.targets.length;r<n;r++)e+=":"+W(h.targets[r]);return e}function W(h){let e="";const t=Object.keys(h).sort();for(let r=0,n=t.length;r<n;r++)e+=t[r]+":"+h[t[r]]+";";return e}function z(h){switch(h){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}function Ke(h){return h.search(/\.jpe?g($|\?)/i)>0||h.search(/^data\:image\/jpeg/)===0?"image/jpeg":h.search(/\.webp($|\?)/i)>0||h.search(/^data\:image\/webp/)===0?"image/webp":"image/png"}const We=new f.Matrix4;class Ve{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new pe,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let r=!1,n=!1,o=-1;typeof navigator<"u"&&(r=/^((?!chrome|android).)*safari/i.test(navigator.userAgent)===!0,n=navigator.userAgent.indexOf("Firefox")>-1,o=n?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),typeof createImageBitmap>"u"||r||n&&o<98?this.textureLoader=new f.TextureLoader(this.options.manager):this.textureLoader=new f.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new f.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const r=this,n=this.json,o=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(s){return s._markDefs&&s._markDefs()}),Promise.all(this._invokeAll(function(s){return s.beforeRoot&&s.beforeRoot()})).then(function(){return Promise.all([r.getDependencies("scene"),r.getDependencies("animation"),r.getDependencies("camera")])}).then(function(s){const i={scene:s[0][n.scene||0],scenes:s[0],animations:s[1],cameras:s[2],asset:n.asset,parser:r,userData:{}};return k(o,i,n),P(i,n),Promise.all(r._invokeAll(function(a){return a.afterRoot&&a.afterRoot(i)})).then(function(){for(const a of i.scenes)a.updateMatrixWorld();e(i)})}).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],r=this.json.meshes||[];for(let n=0,o=t.length;n<o;n++){const s=t[n].joints;for(let i=0,a=s.length;i<a;i++)e[s[i]].isBone=!0}for(let n=0,o=e.length;n<o;n++){const s=e[n];s.mesh!==void 0&&(this._addNodeRef(this.meshCache,s.mesh),s.skin!==void 0&&(r[s.mesh].isSkinnedMesh=!0)),s.camera!==void 0&&this._addNodeRef(this.cameraCache,s.camera)}}_addNodeRef(e,t){t!==void 0&&(e.refs[t]===void 0&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,r){if(e.refs[t]<=1)return r;const n=r.clone(),o=(s,i)=>{const a=this.associations.get(s);a!=null&&this.associations.set(i,a);for(const[c,l]of s.children.entries())o(l,i.children[c])};return o(r,n),n.name+="_instance_"+e.uses[t]++,n}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let r=0;r<t.length;r++){const n=e(t[r]);if(n)return n}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const r=[];for(let n=0;n<t.length;n++){const o=e(t[n]);o&&r.push(o)}return r}getDependency(e,t){const r=e+":"+t;let n=this.cache.get(r);if(!n){switch(e){case"scene":n=this.loadScene(t);break;case"node":n=this._invokeOne(function(o){return o.loadNode&&o.loadNode(t)});break;case"mesh":n=this._invokeOne(function(o){return o.loadMesh&&o.loadMesh(t)});break;case"accessor":n=this.loadAccessor(t);break;case"bufferView":n=this._invokeOne(function(o){return o.loadBufferView&&o.loadBufferView(t)});break;case"buffer":n=this.loadBuffer(t);break;case"material":n=this._invokeOne(function(o){return o.loadMaterial&&o.loadMaterial(t)});break;case"texture":n=this._invokeOne(function(o){return o.loadTexture&&o.loadTexture(t)});break;case"skin":n=this.loadSkin(t);break;case"animation":n=this._invokeOne(function(o){return o.loadAnimation&&o.loadAnimation(t)});break;case"camera":n=this.loadCamera(t);break;default:if(n=this._invokeOne(function(o){return o!=this&&o.getDependency&&o.getDependency(e,t)}),!n)throw new Error("Unknown type: "+e);break}this.cache.add(r,n)}return n}getDependencies(e){let t=this.cache.get(e);if(!t){const r=this,n=this.json[e+(e==="mesh"?"es":"s")]||[];t=Promise.all(n.map(function(o,s){return r.getDependency(e,s)})),this.cache.add(e,t)}return t}loadBuffer(e){const t=this.json.buffers[e],r=this.fileLoader;if(t.type&&t.type!=="arraybuffer")throw new Error("THREE.GLTFLoader: "+t.type+" buffer type is not supported.");if(t.uri===void 0&&e===0)return Promise.resolve(this.extensions[b.KHR_BINARY_GLTF].body);const n=this.options;return new Promise(function(o,s){r.load(f.LoaderUtils.resolveURL(t.uri,n.path),o,void 0,function(){s(new Error('THREE.GLTFLoader: Failed to load buffer "'+t.uri+'".'))})})}loadBufferView(e){const t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then(function(r){const n=t.byteLength||0,o=t.byteOffset||0;return r.slice(o,o+n)})}loadAccessor(e){const t=this,r=this.json,n=this.json.accessors[e];if(n.bufferView===void 0&&n.sparse===void 0){const s=j[n.type],i=F[n.componentType],a=n.normalized===!0,c=new i(n.count*s);return Promise.resolve(new f.BufferAttribute(c,s,a))}const o=[];return n.bufferView!==void 0?o.push(this.getDependency("bufferView",n.bufferView)):o.push(null),n.sparse!==void 0&&(o.push(this.getDependency("bufferView",n.sparse.indices.bufferView)),o.push(this.getDependency("bufferView",n.sparse.values.bufferView))),Promise.all(o).then(function(s){const i=s[0],a=j[n.type],c=F[n.componentType],l=c.BYTES_PER_ELEMENT,u=l*a,d=n.byteOffset||0,m=n.bufferView!==void 0?r.bufferViews[n.bufferView].byteStride:void 0,_=n.normalized===!0;let w,y;if(m&&m!==u){const R=Math.floor(d/m),E="InterleavedBuffer:"+n.bufferView+":"+n.componentType+":"+R+":"+n.count;let L=t.cache.get(E);L||(w=new c(i,R*m,n.count*m/l),L=new f.InterleavedBuffer(w,m/l),t.cache.add(E,L)),y=new f.InterleavedBufferAttribute(L,a,d%m/l,_)}else i===null?w=new c(n.count*a):w=new c(i,d,n.count*a),y=new f.BufferAttribute(w,a,_);if(n.sparse!==void 0){const R=j.SCALAR,E=F[n.sparse.indices.componentType],L=n.sparse.indices.byteOffset||0,S=n.sparse.values.byteOffset||0,C=new E(s[1],L,n.sparse.count*R),I=new c(s[2],S,n.sparse.count*a);i!==null&&(y=new f.BufferAttribute(y.array.slice(),y.itemSize,y.normalized));for(let M=0,p=C.length;M<p;M++){const g=C[M];if(y.setX(g,I[M*a]),a>=2&&y.setY(g,I[M*a+1]),a>=3&&y.setZ(g,I[M*a+2]),a>=4&&y.setW(g,I[M*a+3]),a>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return y})}loadTexture(e){const t=this.json,r=this.options,o=t.textures[e].source,s=t.images[o];let i=this.textureLoader;if(s.uri){const a=r.manager.getHandler(s.uri);a!==null&&(i=a)}return this.loadTextureImage(e,o,i)}loadTextureImage(e,t,r){const n=this,o=this.json,s=o.textures[e],i=o.images[t],a=(i.uri||i.bufferView)+":"+s.sampler;if(this.textureCache[a])return this.textureCache[a];const c=this.loadImageSource(t,r).then(function(l){l.flipY=!1,l.name=s.name||i.name||"",l.name===""&&typeof i.uri=="string"&&i.uri.startsWith("data:image/")===!1&&(l.name=i.uri);const d=(o.samplers||{})[s.sampler]||{};return l.magFilter=ee[d.magFilter]||f.LinearFilter,l.minFilter=ee[d.minFilter]||f.LinearMipmapLinearFilter,l.wrapS=te[d.wrapS]||f.RepeatWrapping,l.wrapT=te[d.wrapT]||f.RepeatWrapping,n.associations.set(l,{textures:e}),l}).catch(function(){return null});return this.textureCache[a]=c,c}loadImageSource(e,t){const r=this,n=this.json,o=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(u=>u.clone());const s=n.images[e],i=self.URL||self.webkitURL;let a=s.uri||"",c=!1;if(s.bufferView!==void 0)a=r.getDependency("bufferView",s.bufferView).then(function(u){c=!0;const d=new Blob([u],{type:s.mimeType});return a=i.createObjectURL(d),a});else if(s.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const l=Promise.resolve(a).then(function(u){return new Promise(function(d,m){let _=d;t.isImageBitmapLoader===!0&&(_=function(w){const y=new f.Texture(w);y.needsUpdate=!0,d(y)}),t.load(f.LoaderUtils.resolveURL(u,o.path),_,void 0,m)})}).then(function(u){return c===!0&&i.revokeObjectURL(a),u.userData.mimeType=s.mimeType||Ke(s.uri),u}).catch(function(u){throw console.error("THREE.GLTFLoader: Couldn't load texture",a),u});return this.sourceCache[e]=l,l}assignTexture(e,t,r,n){const o=this;return this.getDependency("texture",r.index).then(function(s){if(!s)return null;if(r.texCoord!==void 0&&r.texCoord>0&&(s=s.clone(),s.channel=r.texCoord),o.extensions[b.KHR_TEXTURE_TRANSFORM]){const i=r.extensions!==void 0?r.extensions[b.KHR_TEXTURE_TRANSFORM]:void 0;if(i){const a=o.associations.get(s);s=o.extensions[b.KHR_TEXTURE_TRANSFORM].extendTexture(s,i),o.associations.set(s,a)}}return n!==void 0&&(s.colorSpace=n),e[t]=s,s})}assignFinalMaterial(e){const t=e.geometry;let r=e.material;const n=t.attributes.tangent===void 0,o=t.attributes.color!==void 0,s=t.attributes.normal===void 0;if(e.isPoints){const i="PointsMaterial:"+r.uuid;let a=this.cache.get(i);a||(a=new f.PointsMaterial,f.Material.prototype.copy.call(a,r),a.color.copy(r.color),a.map=r.map,a.sizeAttenuation=!1,this.cache.add(i,a)),r=a}else if(e.isLine){const i="LineBasicMaterial:"+r.uuid;let a=this.cache.get(i);a||(a=new f.LineBasicMaterial,f.Material.prototype.copy.call(a,r),a.color.copy(r.color),a.map=r.map,this.cache.add(i,a)),r=a}if(n||o||s){let i="ClonedMaterial:"+r.uuid+":";n&&(i+="derivative-tangents:"),o&&(i+="vertex-colors:"),s&&(i+="flat-shading:");let a=this.cache.get(i);a||(a=r.clone(),o&&(a.vertexColors=!0),s&&(a.flatShading=!0),n&&(a.normalScale&&(a.normalScale.y*=-1),a.clearcoatNormalScale&&(a.clearcoatNormalScale.y*=-1)),this.cache.add(i,a),this.associations.set(a,this.associations.get(r))),r=a}e.material=r}getMaterialType(){return f.MeshStandardMaterial}loadMaterial(e){const t=this,r=this.json,n=this.extensions,o=r.materials[e];let s;const i={},a=o.extensions||{},c=[];if(a[b.KHR_MATERIALS_UNLIT]){const u=n[b.KHR_MATERIALS_UNLIT];s=u.getMaterialType(),c.push(u.extendParams(i,o,t))}else{const u=o.pbrMetallicRoughness||{};if(i.color=new f.Color(1,1,1),i.opacity=1,Array.isArray(u.baseColorFactor)){const d=u.baseColorFactor;i.color.setRGB(d[0],d[1],d[2],f.LinearSRGBColorSpace),i.opacity=d[3]}u.baseColorTexture!==void 0&&c.push(t.assignTexture(i,"map",u.baseColorTexture,f.SRGBColorSpace)),i.metalness=u.metallicFactor!==void 0?u.metallicFactor:1,i.roughness=u.roughnessFactor!==void 0?u.roughnessFactor:1,u.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(i,"metalnessMap",u.metallicRoughnessTexture)),c.push(t.assignTexture(i,"roughnessMap",u.metallicRoughnessTexture))),s=this._invokeOne(function(d){return d.getMaterialType&&d.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(d){return d.extendMaterialParams&&d.extendMaterialParams(e,i)})))}o.doubleSided===!0&&(i.side=f.DoubleSide);const l=o.alphaMode||K.OPAQUE;if(l===K.BLEND?(i.transparent=!0,i.depthWrite=!1):(i.transparent=!1,l===K.MASK&&(i.alphaTest=o.alphaCutoff!==void 0?o.alphaCutoff:.5)),o.normalTexture!==void 0&&s!==f.MeshBasicMaterial&&(c.push(t.assignTexture(i,"normalMap",o.normalTexture)),i.normalScale=new f.Vector2(1,1),o.normalTexture.scale!==void 0)){const u=o.normalTexture.scale;i.normalScale.set(u,u)}if(o.occlusionTexture!==void 0&&s!==f.MeshBasicMaterial&&(c.push(t.assignTexture(i,"aoMap",o.occlusionTexture)),o.occlusionTexture.strength!==void 0&&(i.aoMapIntensity=o.occlusionTexture.strength)),o.emissiveFactor!==void 0&&s!==f.MeshBasicMaterial){const u=o.emissiveFactor;i.emissive=new f.Color().setRGB(u[0],u[1],u[2],f.LinearSRGBColorSpace)}return o.emissiveTexture!==void 0&&s!==f.MeshBasicMaterial&&c.push(t.assignTexture(i,"emissiveMap",o.emissiveTexture,f.SRGBColorSpace)),Promise.all(c).then(function(){const u=new s(i);return o.name&&(u.name=o.name),P(u,o),t.associations.set(u,{materials:e}),o.extensions&&k(n,u,o),u})}createUniqueName(e){const t=f.PropertyBinding.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,r=this.extensions,n=this.primitiveCache;function o(i){return r[b.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(i,t).then(function(a){return ne(a,i,t)})}const s=[];for(let i=0,a=e.length;i<a;i++){const c=e[i],l=je(c),u=n[l];if(u)s.push(u.promise);else{let d;c.extensions&&c.extensions[b.KHR_DRACO_MESH_COMPRESSION]?d=o(c):d=ne(new f.BufferGeometry,c,t),n[l]={primitive:c,promise:d},s.push(d)}}return Promise.all(s)}loadMesh(e){const t=this,r=this.json,n=this.extensions,o=r.meshes[e],s=o.primitives,i=[];for(let a=0,c=s.length;a<c;a++){const l=s[a].material===void 0?Be(this.cache):this.getDependency("material",s[a].material);i.push(l)}return i.push(t.loadGeometries(s)),Promise.all(i).then(function(a){const c=a.slice(0,a.length-1),l=a[a.length-1],u=[];for(let m=0,_=l.length;m<_;m++){const w=l[m],y=s[m];let R;const E=c[m];if(y.mode===N.TRIANGLES||y.mode===N.TRIANGLE_STRIP||y.mode===N.TRIANGLE_FAN||y.mode===void 0)R=o.isSkinnedMesh===!0?new f.SkinnedMesh(w,E):new f.Mesh(w,E),R.isSkinnedMesh===!0&&R.normalizeSkinWeights(),y.mode===N.TRIANGLE_STRIP?R.geometry=Z(R.geometry,f.TriangleStripDrawMode):y.mode===N.TRIANGLE_FAN&&(R.geometry=Z(R.geometry,f.TriangleFanDrawMode));else if(y.mode===N.LINES)R=new f.LineSegments(w,E);else if(y.mode===N.LINE_STRIP)R=new f.Line(w,E);else if(y.mode===N.LINE_LOOP)R=new f.LineLoop(w,E);else if(y.mode===N.POINTS)R=new f.Points(w,E);else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+y.mode);Object.keys(R.geometry.morphAttributes).length>0&&He(R,o),R.name=t.createUniqueName(o.name||"mesh_"+e),P(R,o),y.extensions&&k(n,R,y),t.assignFinalMaterial(R),u.push(R)}for(let m=0,_=u.length;m<_;m++)t.associations.set(u[m],{meshes:e,primitives:m});if(u.length===1)return o.extensions&&k(n,u[0],o),u[0];const d=new f.Group;o.extensions&&k(n,d,o),t.associations.set(d,{meshes:e});for(let m=0,_=u.length;m<_;m++)d.add(u[m]);return d})}loadCamera(e){let t;const r=this.json.cameras[e],n=r[r.type];if(!n){console.warn("THREE.GLTFLoader: Missing camera parameters.");return}return r.type==="perspective"?t=new f.PerspectiveCamera(f.MathUtils.radToDeg(n.yfov),n.aspectRatio||1,n.znear||1,n.zfar||2e6):r.type==="orthographic"&&(t=new f.OrthographicCamera(-n.xmag,n.xmag,n.ymag,-n.ymag,n.znear,n.zfar)),r.name&&(t.name=this.createUniqueName(r.name)),P(t,r),Promise.resolve(t)}loadSkin(e){const t=this.json.skins[e],r=[];for(let n=0,o=t.joints.length;n<o;n++)r.push(this._loadNodeShallow(t.joints[n]));return t.inverseBindMatrices!==void 0?r.push(this.getDependency("accessor",t.inverseBindMatrices)):r.push(null),Promise.all(r).then(function(n){const o=n.pop(),s=n,i=[],a=[];for(let c=0,l=s.length;c<l;c++){const u=s[c];if(u){i.push(u);const d=new f.Matrix4;o!==null&&d.fromArray(o.array,c*16),a.push(d)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',t.joints[c])}return new f.Skeleton(i,a)})}loadAnimation(e){const t=this.json,r=this,n=t.animations[e],o=n.name?n.name:"animation_"+e,s=[],i=[],a=[],c=[],l=[];for(let u=0,d=n.channels.length;u<d;u++){const m=n.channels[u],_=n.samplers[m.sampler],w=m.target,y=w.node,R=n.parameters!==void 0?n.parameters[_.input]:_.input,E=n.parameters!==void 0?n.parameters[_.output]:_.output;w.node!==void 0&&(s.push(this.getDependency("node",y)),i.push(this.getDependency("accessor",R)),a.push(this.getDependency("accessor",E)),c.push(_),l.push(w))}return Promise.all([Promise.all(s),Promise.all(i),Promise.all(a),Promise.all(c),Promise.all(l)]).then(function(u){const d=u[0],m=u[1],_=u[2],w=u[3],y=u[4],R=[];for(let E=0,L=d.length;E<L;E++){const S=d[E],C=m[E],I=_[E],M=w[E],p=y[E];if(S===void 0)continue;S.updateMatrix&&S.updateMatrix();const g=r._createAnimationTracks(S,C,I,M,p);if(g)for(let A=0;A<g.length;A++)R.push(g[A])}return new f.AnimationClip(o,void 0,R)})}createNodeMesh(e){const t=this.json,r=this,n=t.nodes[e];return n.mesh===void 0?null:r.getDependency("mesh",n.mesh).then(function(o){const s=r._getNodeRef(r.meshCache,n.mesh,o);return n.weights!==void 0&&s.traverse(function(i){if(i.isMesh)for(let a=0,c=n.weights.length;a<c;a++)i.morphTargetInfluences[a]=n.weights[a]}),s})}loadNode(e){const t=this.json,r=this,n=t.nodes[e],o=r._loadNodeShallow(e),s=[],i=n.children||[];for(let c=0,l=i.length;c<l;c++)s.push(r.getDependency("node",i[c]));const a=n.skin===void 0?Promise.resolve(null):r.getDependency("skin",n.skin);return Promise.all([o,Promise.all(s),a]).then(function(c){const l=c[0],u=c[1],d=c[2];d!==null&&l.traverse(function(m){m.isSkinnedMesh&&m.bind(d,We)});for(let m=0,_=u.length;m<_;m++)l.add(u[m]);return l})}_loadNodeShallow(e){const t=this.json,r=this.extensions,n=this;if(this.nodeCache[e]!==void 0)return this.nodeCache[e];const o=t.nodes[e],s=o.name?n.createUniqueName(o.name):"",i=[],a=n._invokeOne(function(c){return c.createNodeMesh&&c.createNodeMesh(e)});return a&&i.push(a),o.camera!==void 0&&i.push(n.getDependency("camera",o.camera).then(function(c){return n._getNodeRef(n.cameraCache,o.camera,c)})),n._invokeAll(function(c){return c.createNodeAttachment&&c.createNodeAttachment(e)}).forEach(function(c){i.push(c)}),this.nodeCache[e]=Promise.all(i).then(function(c){let l;if(o.isBone===!0?l=new f.Bone:c.length>1?l=new f.Group:c.length===1?l=c[0]:l=new f.Object3D,l!==c[0])for(let u=0,d=c.length;u<d;u++)l.add(c[u]);if(o.name&&(l.userData.name=o.name,l.name=s),P(l,o),o.extensions&&k(r,l,o),o.matrix!==void 0){const u=new f.Matrix4;u.fromArray(o.matrix),l.applyMatrix4(u)}else o.translation!==void 0&&l.position.fromArray(o.translation),o.rotation!==void 0&&l.quaternion.fromArray(o.rotation),o.scale!==void 0&&l.scale.fromArray(o.scale);return n.associations.has(l)||n.associations.set(l,{}),n.associations.get(l).nodes=e,l}),this.nodeCache[e]}loadScene(e){const t=this.extensions,r=this.json.scenes[e],n=this,o=new f.Group;r.name&&(o.name=n.createUniqueName(r.name)),P(o,r),r.extensions&&k(t,o,r);const s=r.nodes||[],i=[];for(let a=0,c=s.length;a<c;a++)i.push(n.getDependency("node",s[a]));return Promise.all(i).then(function(a){for(let l=0,u=a.length;l<u;l++)o.add(a[l]);const c=l=>{const u=new Map;for(const[d,m]of n.associations)(d instanceof f.Material||d instanceof f.Texture)&&u.set(d,m);return l.traverse(d=>{const m=n.associations.get(d);m!=null&&u.set(d,m)}),u};return n.associations=c(o),o})}_createAnimationTracks(e,t,r,n,o){const s=[],i=e.name?e.name:e.uuid,a=[];D[o.path]===D.weights?e.traverse(function(d){d.morphTargetInfluences&&a.push(d.name?d.name:d.uuid)}):a.push(i);let c;switch(D[o.path]){case D.weights:c=f.NumberKeyframeTrack;break;case D.rotation:c=f.QuaternionKeyframeTrack;break;case D.position:case D.scale:c=f.VectorKeyframeTrack;break;default:switch(r.itemSize){case 1:c=f.NumberKeyframeTrack;break;case 2:case 3:default:c=f.VectorKeyframeTrack;break}break}const l=n.interpolation!==void 0?Ue[n.interpolation]:f.InterpolateLinear,u=this._getArrayFromAccessor(r);for(let d=0,m=a.length;d<m;d++){const _=new c(a[d]+"."+D[o.path],t.array,u,l);n.interpolation==="CUBICSPLINE"&&this._createCubicSplineTrackInterpolant(_),s.push(_)}return s}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){const r=z(t.constructor),n=new Float32Array(t.length);for(let o=0,s=t.length;o<s;o++)n[o]=t[o]*r;t=n}return t}_createCubicSplineTrackInterpolant(e){e.createInterpolant=function(r){const n=this instanceof f.QuaternionKeyframeTrack?Ge:oe;return new n(this.times,this.values,this.getValueSize()/3,r)},e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function Xe(h,e,t){const r=e.attributes,n=new f.Box3;if(r.POSITION!==void 0){const i=t.json.accessors[r.POSITION],a=i.min,c=i.max;if(a!==void 0&&c!==void 0){if(n.set(new f.Vector3(a[0],a[1],a[2]),new f.Vector3(c[0],c[1],c[2])),i.normalized){const l=z(F[i.componentType]);n.min.multiplyScalar(l),n.max.multiplyScalar(l)}}else{console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");return}}else return;const o=e.targets;if(o!==void 0){const i=new f.Vector3,a=new f.Vector3;for(let c=0,l=o.length;c<l;c++){const u=o[c];if(u.POSITION!==void 0){const d=t.json.accessors[u.POSITION],m=d.min,_=d.max;if(m!==void 0&&_!==void 0){if(a.setX(Math.max(Math.abs(m[0]),Math.abs(_[0]))),a.setY(Math.max(Math.abs(m[1]),Math.abs(_[1]))),a.setZ(Math.max(Math.abs(m[2]),Math.abs(_[2]))),d.normalized){const w=z(F[d.componentType]);a.multiplyScalar(w)}i.max(a)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}n.expandByVector(i)}h.boundingBox=n;const s=new f.Sphere;n.getCenter(s.center),s.radius=n.min.distanceTo(n.max)/2,h.boundingSphere=s}function ne(h,e,t){const r=e.attributes,n=[];function o(s,i){return t.getDependency("accessor",s).then(function(a){h.setAttribute(i,a)})}for(const s in r){const i=q[s]||s.toLowerCase();i in h.attributes||n.push(o(r[s],i))}if(e.indices!==void 0&&!h.index){const s=t.getDependency("accessor",e.indices).then(function(i){h.setIndex(i)});n.push(s)}return f.ColorManagement.workingColorSpace!==f.LinearSRGBColorSpace&&"COLOR_0"in r&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${f.ColorManagement.workingColorSpace}" not supported.`),P(h,e),Xe(h,e,t),Promise.all(n).then(function(){return e.targets!==void 0?ve(h,e.targets,t):h})}class qe{parse(e){const t={},r=e.split(`
2
+ `);let n=null,o=t;const s=[t];for(const i of r)if(i.includes("=")){const a=i.split("="),c=a[0].trim(),l=a[1].trim();if(l.endsWith("{")){const u={};s.push(u),o[c]=u,o=u}else o[c]=l}else if(i.endsWith("{")){const a=o[n]||{};s.push(a),o[n]=a,o=a}else if(i.endsWith("}")){if(s.pop(),s.length===0)continue;o=s[s.length-1]}else if(i.endsWith("(")){const a={};s.push(a),n=i.split("(")[0].trim()||n,o[n]=a,o=a}else i.endsWith(")")?(s.pop(),o=s[s.length-1]):n=i.trim();return t}}class ze extends f.Loader{constructor(e){super(e)}load(e,t,r,n){const o=this,s=new f.FileLoader(o.manager);s.setPath(o.path),s.setResponseType("arraybuffer"),s.setRequestHeader(o.requestHeader),s.setWithCredentials(o.withCredentials),s.load(e,function(i){try{t(o.parse(i))}catch(a){n?n(a):console.error(a),o.manager.itemError(e)}},r,n)}parse(e){const t=new qe;function r(p){const g={};new f.FileLoader().setResponseType("arraybuffer");for(const T in p){if(T.endsWith("png")){const x=new Blob([p[T]],{type:{type:"image/png"}});g[T]=URL.createObjectURL(x)}if(T.endsWith("usd")||T.endsWith("usda")){if(n(p[T])){console.warn("THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported.");continue}const x=H.strFromU8(p[T]);g[T]=t.parse(x)}}return g}function n(p){const g=p.slice(0,7),A=new Uint8Array([80,88,82,45,85,83,68,67]);return g.every((T,x)=>T===A[x])}function o(p){if(p.length<1)return;const g=Object.keys(p)[0];let A=!1;if(g.endsWith("usda"))return p[g];if(g.endsWith("usdc"))A=!0;else if(g.endsWith("usd"))if(n(p[g]))A=!0;else return p[g];A&&console.warn("THREE.USDZLoader: Crate files (.usdc or binary .usd) are not supported.")}const s=H.unzipSync(new Uint8Array(e)),i=r(s),a=o(s);if(a===void 0)return console.warn("THREE.USDZLoader: No usda file found."),new f.Group;const c=H.strFromU8(a),l=t.parse(c);function u(p){if(p){if("prepend references"in p){const A=p["prepend references"].split("@"),T=A[1].replace(/^.\//,""),x=A[2].replace(/^<\//,"").replace(/>$/,"");return d(i[T],x)}return d(p)}}function d(p,g){if(p){if(g!==void 0){const A=`def Mesh "${g}"`;if(A in p)return p[A]}for(const A in p){const T=p[A];if(A.startsWith("def Mesh"))return"point3f[] points"in p&&(T["point3f[] points"]=p["point3f[] points"]),"texCoord2f[] primvars:st"in p&&(T["texCoord2f[] primvars:st"]=p["texCoord2f[] primvars:st"]),"int[] primvars:st:indices"in p&&(T["int[] primvars:st:indices"]=p["int[] primvars:st:indices"]),T;if(typeof T=="object"){const x=d(T);if(x)return x}}}}function m(p){if(!p)return;let g=new f.BufferGeometry;if("int[] faceVertexIndices"in p){const A=JSON.parse(p["int[] faceVertexIndices"]);g.setIndex(A)}if("point3f[] points"in p){const A=JSON.parse(p["point3f[] points"].replace(/[()]*/g,"")),T=new f.BufferAttribute(new Float32Array(A),3);g.setAttribute("position",T)}if("normal3f[] normals"in p){const A=JSON.parse(p["normal3f[] normals"].replace(/[()]*/g,"")),T=new f.BufferAttribute(new Float32Array(A),3);g.setAttribute("normal",T)}else g.computeVertexNormals();if("float2[] primvars:st"in p&&(p["texCoord2f[] primvars:st"]=p["float2[] primvars:st"]),"texCoord2f[] primvars:st"in p){const A=JSON.parse(p["texCoord2f[] primvars:st"].replace(/[()]*/g,"")),T=new f.BufferAttribute(new Float32Array(A),2);if("int[] primvars:st:indices"in p){g=g.toNonIndexed();const x=JSON.parse(p["int[] primvars:st:indices"]);g.setAttribute("uv",_(T,x))}else g.setAttribute("uv",T)}return g}function _(p,g){const A=p.array,T=p.itemSize,x=new A.constructor(g.length*T);let Y=0,ce=0;for(let v=0,le=g.length;v<le;v++){Y=g[v]*T;for(let J=0;J<T;J++)x[ce++]=A[Y++]}return new f.BufferAttribute(x,T)}function w(p){if(p){if("rel material:binding"in p){const T=p["rel material:binding"].replace(/^<\//,"").replace(/>$/,"").split("/");return y(l,` "${T[1]}"`)}return y(p)}}function y(p,g=""){for(const A in p){const T=p[A];if(A.startsWith("def Material"+g))return T;if(typeof T=="object"){const x=y(T,g);if(x)return x}}}function R(p,g){g["float inputs:rotation"]&&(p.rotation=parseFloat(g["float inputs:rotation"])),g["float2 inputs:scale"]&&(p.repeat=new f.Vector2().fromArray(JSON.parse("["+g["float2 inputs:scale"].replace(/[()]*/g,"")+"]"))),g["float2 inputs:translation"]&&(p.offset=new f.Vector2().fromArray(JSON.parse("["+g["float2 inputs:translation"].replace(/[()]*/g,"")+"]")))}function E(p){const g=new f.MeshPhysicalMaterial;if(p!==void 0){if('def Shader "PreviewSurface"'in p){const A=p['def Shader "PreviewSurface"'];if("color3f inputs:diffuseColor.connect"in A){const T=A["color3f inputs:diffuseColor.connect"],x=L(l,/(\w+).output/.exec(T)[1]);g.map=S(x),g.map.colorSpace=f.SRGBColorSpace,'def Shader "Transform2d_diffuse"'in p&&R(g.map,p['def Shader "Transform2d_diffuse"'])}else if("color3f inputs:diffuseColor"in A){const T=A["color3f inputs:diffuseColor"].replace(/[()]*/g,"");g.color.fromArray(JSON.parse("["+T+"]"))}if("color3f inputs:emissiveColor.connect"in A){const T=A["color3f inputs:emissiveColor.connect"],x=L(l,/(\w+).output/.exec(T)[1]);g.emissiveMap=S(x),g.emissiveMap.colorSpace=f.SRGBColorSpace,g.emissive.set(16777215),'def Shader "Transform2d_emissive"'in p&&R(g.emissiveMap,p['def Shader "Transform2d_emissive"'])}else if("color3f inputs:emissiveColor"in A){const T=A["color3f inputs:emissiveColor"].replace(/[()]*/g,"");g.emissive.fromArray(JSON.parse("["+T+"]"))}if("normal3f inputs:normal.connect"in A){const T=A["normal3f inputs:normal.connect"],x=L(l,/(\w+).output/.exec(T)[1]);g.normalMap=S(x),g.normalMap.colorSpace=f.NoColorSpace,'def Shader "Transform2d_normal"'in p&&R(g.normalMap,p['def Shader "Transform2d_normal"'])}if("float inputs:roughness.connect"in A){const T=A["float inputs:roughness.connect"],x=L(l,/(\w+).output/.exec(T)[1]);g.roughness=1,g.roughnessMap=S(x),g.roughnessMap.colorSpace=f.NoColorSpace,'def Shader "Transform2d_roughness"'in p&&R(g.roughnessMap,p['def Shader "Transform2d_roughness"'])}else"float inputs:roughness"in A&&(g.roughness=parseFloat(A["float inputs:roughness"]));if("float inputs:metallic.connect"in A){const T=A["float inputs:metallic.connect"],x=L(l,/(\w+).output/.exec(T)[1]);g.metalness=1,g.metalnessMap=S(x),g.metalnessMap.colorSpace=f.NoColorSpace,'def Shader "Transform2d_metallic"'in p&&R(g.metalnessMap,p['def Shader "Transform2d_metallic"'])}else"float inputs:metallic"in A&&(g.metalness=parseFloat(A["float inputs:metallic"]));if("float inputs:clearcoat.connect"in A){const T=A["float inputs:clearcoat.connect"],x=L(l,/(\w+).output/.exec(T)[1]);g.clearcoat=1,g.clearcoatMap=S(x),g.clearcoatMap.colorSpace=f.NoColorSpace,'def Shader "Transform2d_clearcoat"'in p&&R(g.clearcoatMap,p['def Shader "Transform2d_clearcoat"'])}else"float inputs:clearcoat"in A&&(g.clearcoat=parseFloat(A["float inputs:clearcoat"]));if("float inputs:clearcoatRoughness.connect"in A){const T=A["float inputs:clearcoatRoughness.connect"],x=L(l,/(\w+).output/.exec(T)[1]);g.clearcoatRoughness=1,g.clearcoatRoughnessMap=S(x),g.clearcoatRoughnessMap.colorSpace=f.NoColorSpace,'def Shader "Transform2d_clearcoatRoughness"'in p&&R(g.clearcoatRoughnessMap,p['def Shader "Transform2d_clearcoatRoughness"'])}else"float inputs:clearcoatRoughness"in A&&(g.clearcoatRoughness=parseFloat(A["float inputs:clearcoatRoughness"]));if("float inputs:ior"in A&&(g.ior=parseFloat(A["float inputs:ior"])),"float inputs:occlusion.connect"in A){const T=A["float inputs:occlusion.connect"],x=L(l,/(\w+).output/.exec(T)[1]);g.aoMap=S(x),g.aoMap.colorSpace=f.NoColorSpace,'def Shader "Transform2d_occlusion"'in p&&R(g.aoMap,p['def Shader "Transform2d_occlusion"'])}}if('def Shader "diffuseColor_texture"'in p){const A=p['def Shader "diffuseColor_texture"'];g.map=S(A),g.map.colorSpace=f.SRGBColorSpace}if('def Shader "normal_texture"'in p){const A=p['def Shader "normal_texture"'];g.normalMap=S(A),g.normalMap.colorSpace=f.NoColorSpace}}return g}function L(p,g){for(const A in p){const T=p[A];if(A.startsWith(`def Shader "${g}"`))return T;if(typeof T=="object"){const x=L(T,g);if(x)return x}}}function S(p){if("asset inputs:file"in p){const g=p["asset inputs:file"].replace(/@*/g,""),T=new f.TextureLoader().load(i[g]),x={'"clamp"':f.ClampToEdgeWrapping,'"mirror"':f.MirroredRepeatWrapping,'"repeat"':f.RepeatWrapping};return"token inputs:wrapS"in p&&(T.wrapS=x[p["token inputs:wrapS"]]),"token inputs:wrapT"in p&&(T.wrapT=x[p["token inputs:wrapT"]]),T}return null}function C(p){const g=m(u(p)),A=E(w(p)),T=g?new f.Mesh(g,A):new f.Object3D;if("matrix4d xformOp:transform"in p){const x=JSON.parse("["+p["matrix4d xformOp:transform"].replace(/[()]*/g,"")+"]");T.matrix.fromArray(x),T.matrix.decompose(T.position,T.quaternion,T.scale)}return T}function I(p,g){for(const A in p)if(A.startsWith("def Scope"))I(p[A],g);else if(A.startsWith("def Xform")){const T=C(p[A]);/def Xform "(\w+)"/.test(A)&&(T.name=/def Xform "(\w+)"/.exec(A)[1]),g.add(T),I(p[A],T)}}const M=new f.Group;return I(l,M),M}}const V=new WeakMap;class Ye extends f.Loader{constructor(e){super(e),this.decoderPath="",this.decoderConfig={},this.decoderBinary=null,this.decoderPending=null,this.workerLimit=4,this.workerPool=[],this.workerNextTaskID=1,this.workerSourceURL="",this.defaultAttributeIDs={position:"POSITION",normal:"NORMAL",color:"COLOR",uv:"TEX_COORD"},this.defaultAttributeTypes={position:"Float32Array",normal:"Float32Array",color:"Float32Array",uv:"Float32Array"}}setDecoderPath(e){return this.decoderPath=e,this}setDecoderConfig(e){return this.decoderConfig=e,this}setWorkerLimit(e){return this.workerLimit=e,this}load(e,t,r,n){const o=new f.FileLoader(this.manager);o.setPath(this.path),o.setResponseType("arraybuffer"),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(e,s=>{this.parse(s,t,n)},r,n)}parse(e,t,r=()=>{}){this.decodeDracoFile(e,t,null,null,f.SRGBColorSpace).catch(r)}decodeDracoFile(e,t,r,n,o=f.LinearSRGBColorSpace,s=()=>{}){const i={attributeIDs:r||this.defaultAttributeIDs,attributeTypes:n||this.defaultAttributeTypes,useUniqueIDs:!!r,vertexColorSpace:o};return this.decodeGeometry(e,i).then(t).catch(s)}decodeGeometry(e,t){const r=JSON.stringify(t);if(V.has(e)){const a=V.get(e);if(a.key===r)return a.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let n;const o=this.workerNextTaskID++,s=e.byteLength,i=this._getWorker(o,s).then(a=>(n=a,new Promise((c,l)=>{n._callbacks[o]={resolve:c,reject:l},n.postMessage({type:"decode",id:o,taskConfig:t,buffer:e},[e])}))).then(a=>this._createGeometry(a.geometry));return i.catch(()=>!0).then(()=>{n&&o&&this._releaseTask(n,o)}),V.set(e,{key:r,promise:i}),i}_createGeometry(e){const t=new f.BufferGeometry;e.index&&t.setIndex(new f.BufferAttribute(e.index.array,1));for(let r=0;r<e.attributes.length;r++){const n=e.attributes[r],o=n.name,s=n.array,i=n.itemSize,a=new f.BufferAttribute(s,i);o==="color"&&(this._assignVertexColorSpace(a,n.vertexColorSpace),a.normalized=!(s instanceof Float32Array)),t.setAttribute(o,a)}return t}_assignVertexColorSpace(e,t){if(t!==f.SRGBColorSpace)return;const r=new f.Color;for(let n=0,o=e.count;n<o;n++)r.fromBufferAttribute(e,n).convertSRGBToLinear(),e.setXYZ(n,r.r,r.g,r.b)}_loadLibrary(e,t){const r=new f.FileLoader(this.manager);return r.setPath(this.decoderPath),r.setResponseType(t),r.setWithCredentials(this.withCredentials),new Promise((n,o)=>{r.load(e,n,void 0,o)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(r=>{const n=r[0];e||(this.decoderConfig.wasmBinary=r[1]);const o=Je.toString(),s=["/* draco decoder */",n,"","/* worker */",o.substring(o.indexOf("{")+1,o.lastIndexOf("}"))].join(`
3
+ `);this.workerSourceURL=URL.createObjectURL(new Blob([s]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.length<this.workerLimit){const n=new Worker(this.workerSourceURL);n._callbacks={},n._taskCosts={},n._taskLoad=0,n.postMessage({type:"init",decoderConfig:this.decoderConfig}),n.onmessage=function(o){const s=o.data;switch(s.type){case"decode":n._callbacks[s.id].resolve(s);break;case"error":n._callbacks[s.id].reject(s);break;default:console.error('THREE.DRACOLoader: Unexpected message, "'+s.type+'"')}},this.workerPool.push(n)}else this.workerPool.sort(function(n,o){return n._taskLoad>o._taskLoad?-1:1});const r=this.workerPool[this.workerPool.length-1];return r._taskCosts[e]=t,r._taskLoad+=t,r})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e<this.workerPool.length;++e)this.workerPool[e].terminate();return this.workerPool.length=0,this.workerSourceURL!==""&&URL.revokeObjectURL(this.workerSourceURL),this}}function Je(){let h,e;onmessage=function(s){const i=s.data;switch(i.type){case"init":h=i.decoderConfig,e=new Promise(function(l){h.onModuleLoaded=function(u){l({draco:u})},DracoDecoderModule(h)});break;case"decode":const a=i.buffer,c=i.taskConfig;e.then(l=>{const u=l.draco,d=new u.Decoder;try{const m=t(u,d,new Int8Array(a),c),_=m.attributes.map(w=>w.array.buffer);m.index&&_.push(m.index.array.buffer),self.postMessage({type:"decode",id:i.id,geometry:m},_)}catch(m){console.error(m),self.postMessage({type:"error",id:i.id,error:m.message})}finally{u.destroy(d)}});break}};function t(s,i,a,c){const l=c.attributeIDs,u=c.attributeTypes;let d,m;const _=i.GetEncodedGeometryType(a);if(_===s.TRIANGULAR_MESH)d=new s.Mesh,m=i.DecodeArrayToMesh(a,a.byteLength,d);else if(_===s.POINT_CLOUD)d=new s.PointCloud,m=i.DecodeArrayToPointCloud(a,a.byteLength,d);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!m.ok()||d.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+m.error_msg());const w={index:null,attributes:[]};for(const y in l){const R=self[u[y]];let E,L;if(c.useUniqueIDs)L=l[y],E=i.GetAttributeByUniqueId(d,L);else{if(L=i.GetAttributeId(d,s[l[y]]),L===-1)continue;E=i.GetAttribute(d,L)}const S=n(s,i,d,y,R,E);y==="color"&&(S.vertexColorSpace=c.vertexColorSpace),w.attributes.push(S)}return _===s.TRIANGULAR_MESH&&(w.index=r(s,i,d)),s.destroy(d),w}function r(s,i,a){const l=a.num_faces()*3,u=l*4,d=s._malloc(u);i.GetTrianglesUInt32Array(a,u,d);const m=new Uint32Array(s.HEAPF32.buffer,d,l).slice();return s._free(d),{array:m,itemSize:1}}function n(s,i,a,c,l,u){const d=u.num_components(),_=a.num_points()*d,w=_*l.BYTES_PER_ELEMENT,y=o(s,l),R=s._malloc(w);i.GetAttributeDataArrayForAllPoints(a,u,y,w,R);const E=new l(s.HEAPF32.buffer,R,_).slice();return s._free(R),{name:c,array:E,itemSize:d}}function o(s,i){switch(i){case Float32Array:return s.DT_FLOAT32;case Int8Array:return s.DT_INT8;case Int16Array:return s.DT_INT16;case Int32Array:return s.DT_INT32;case Uint8Array:return s.DT_UINT8;case Uint16Array:return s.DT_UINT16;case Uint32Array:return s.DT_UINT32}}}function ie(){let h,e;onmessage=function(s){const i=s.data;switch(i.type){case"init":h=i.decoderConfig,e=new Promise(function(l){h.onModuleLoaded=function(u){l({draco:u})},DracoDecoderModule(h)});break;case"decode":const a=i.buffer,c=i.taskConfig;e.then(l=>{const u=l.draco,d=new u.Decoder;try{const m=t(u,d,new Int8Array(a),c),_=m.attributes.map(w=>w.array.buffer);m.index&&_.push(m.index.array.buffer),self.postMessage({type:"decode",id:i.id,geometry:m},_)}catch(m){console.error(m),self.postMessage({type:"error",id:i.id,error:m.message})}finally{u.destroy(d)}});break}};function t(s,i,a,c){const l=c.attributeIDs,u=c.attributeTypes;let d,m;const _=i.GetEncodedGeometryType(a);if(_===s.TRIANGULAR_MESH)d=new s.Mesh,m=i.DecodeArrayToMesh(a,a.byteLength,d);else if(_===s.POINT_CLOUD)d=new s.PointCloud,m=i.DecodeArrayToPointCloud(a,a.byteLength,d);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!m.ok()||d.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+m.error_msg());const w={index:null,attributes:[]};for(const y in l){const R=self[u[y]];let E,L;if(c.useUniqueIDs)L=l[y],E=i.GetAttributeByUniqueId(d,L);else{if(L=i.GetAttributeId(d,s[l[y]]),L===-1)continue;E=i.GetAttribute(d,L)}const S=n(s,i,d,y,R,E);y==="color"&&(S.vertexColorSpace=c.vertexColorSpace),w.attributes.push(S)}return _===s.TRIANGULAR_MESH&&(w.index=r(s,i,d)),s.destroy(d),w}function r(s,i,a){const l=a.num_faces()*3,u=l*4,d=s._malloc(u);i.GetTrianglesUInt32Array(a,u,d);const m=new Uint32Array(s.HEAPF32.buffer,d,l).slice();return s._free(d),{array:m,itemSize:1}}function n(s,i,a,c,l,u){const d=u.num_components(),_=a.num_points()*d,w=_*l.BYTES_PER_ELEMENT,y=o(s,l),R=s._malloc(w);i.GetAttributeDataArrayForAllPoints(a,u,y,w,R);const E=new l(s.HEAPF32.buffer,R,_).slice();return s._free(R),{name:c,array:E,itemSize:d}}function o(s,i){switch(i){case Float32Array:return s.DT_FLOAT32;case Int8Array:return s.DT_INT8;case Int16Array:return s.DT_INT16;case Int32Array:return s.DT_INT32;case Uint8Array:return s.DT_UINT8;case Uint16Array:return s.DT_UINT16;case Uint32Array:return s.DT_UINT32}}}const X={LOAD_DRACO_JS_DECODER:async()=>(await Promise.resolve().then(()=>require("./draco_decoder-DvYjcLz_.cjs"))).default,LOAD_DRACO_WASM_WRAPPER:async()=>(await Promise.resolve().then(()=>require("./draco_wasm_wrapper-FoEVV9af.cjs"))).default,LOAD_DRACO_WASM_DECODER:async()=>{const h=(await Promise.resolve().then(()=>require("./draco_decoder-Bh9flJPu.cjs"))).default;return await(await fetch(h)).arrayBuffer()}};class ae extends Ye{constructor(){super(...arguments);O(this,"decoderPending",null);O(this,"decoderConfig",{type:"js",wasmBinary:null});O(this,"workerSourceURL","")}async _initDecoder(){if(this.decoderPending)return this.decoderPending;const t=typeof WebAssembly!="object"||this.decoderConfig.type==="js",r=[];return t?r.push(X.LOAD_DRACO_JS_DECODER()):(r.push(X.LOAD_DRACO_WASM_WRAPPER()),r.push(X.LOAD_DRACO_WASM_DECODER())),this.decoderPending=Promise.all(r).then(n=>{const o=n[0];t||(this.decoderConfig.wasmBinary=n[1]);const s=ie.toString(),i=["/* draco decoder */",o,"","/* worker */",s.substring(s.indexOf("{")+1,s.lastIndexOf("}"))].join(`
4
+ `);this.workerSourceURL=URL.createObjectURL(new Blob([i]))}),this.decoderPending}}function Qe(){let h=null,e=null;const t=[[/'CONFIG_CONTROL_DESIGN'\s*\)/g,"'AP203_CONFIGURATION_CONTROLLED_3D_DESIGN_OF_MECHANICAL_PARTS_AND_ASSEMBLIES_MIM_LF')"],[/'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF\.\s*\{[\s\S]*?\}\s*'/g,"'AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF'"]];function r(){return h||(h=occtimportjs({locateFile:function(){return e}})),h}function n(s){for(var i=new TextDecoder("utf-8",{fatal:!1}),a=new TextEncoder,c=i.decode(s),l=0;l<t.length;l++){var u=t[l][0],d=t[l][1];c=c.replace(u,d)}return new Uint8Array(a.encode(c))}function o(s,i){var a=n(i);try{var c=s.ReadStepFile(a,null);if(c.success&&c.root)return c}catch{}try{return s.ReadStepFile(i,null)}catch{return{success:!1,root:{meshes:[],children:[]},meshes:[]}}}onmessage=async function(s){var i=s.data;switch(i.type){case"init":e=i.wasmUrl;break;case"parse":try{var a=await r(),c=new Uint8Array(i.buffer),l=i.fileType,u;if(l==="step"||l==="stp"?u=o(a,c):u=a.ReadIgesFile(c,null),!u.success||!u.root){self.postMessage({type:"error",id:i.id,error:"Failed to parse CAD file"});return}self.postMessage({type:"result",id:i.id,result:u})}catch(d){self.postMessage({type:"error",id:i.id,error:d instanceof Error?d.message:String(d)})}break}}}const se={LOAD_OCCT_JS:async()=>(await Promise.resolve().then(()=>require("./occt-import-js-DdbbsFBH.cjs"))).default,LOAD_OCCT_WASM_URL:async()=>(await Promise.resolve().then(()=>require("./occt-import-js-BQ1yZHCj.cjs"))).default};class Ze{constructor(){O(this,"_workerPending",null);O(this,"_worker",null);O(this,"_nextId",0);O(this,"_pending",new Map)}_getWorker(){return this._workerPending?this._workerPending:(this._workerPending=(async()=>{const[e,t]=await Promise.all([se.LOAD_OCCT_JS(),se.LOAD_OCCT_WASM_URL()]),r=Qe.toString(),n=["/* occt-import-js */",e,"","/* step worker */",r.substring(r.indexOf("{")+1,r.lastIndexOf("}"))].join(`
5
+ `),o=URL.createObjectURL(new Blob([n])),s=new Worker(o),i=new URL(t,window.location.href).href;return s.postMessage({type:"init",wasmUrl:i}),s.onmessage=a=>{const{type:c,id:l,result:u,error:d}=a.data,m=this._pending.get(l);if(m)if(this._pending.delete(l),c==="result")try{m.resolve(this._buildScene(u))}catch(_){m.reject(_ instanceof Error?_:new Error(String(_)))}else m.reject(new Error(d??"Worker error"))},s.onerror=a=>{for(const[,{reject:c}]of this._pending)c(new Error(a.message??"Worker error"));this._pending.clear()},this._worker=s,s})(),this._workerPending)}async parseAsync(e,t){const r=this._nextId++,n=await this._getWorker();return new Promise((o,s)=>{this._pending.set(r,{resolve:o,reject:s});const i=e.slice(0);n.postMessage({type:"parse",id:r,buffer:i,fileType:t},[i])})}dispose(){if(this._worker){for(const[,{reject:e}]of this._pending)e(new Error("STEPLoader disposed"));this._pending.clear(),this._worker.terminate(),this._worker=null,this._workerPending=null}}_buildScene(e){const t=new f.Group;return t.name=e.root.name??"CAD Model",this._buildNode(e.root,e.meshes,t),t.rotation.x=-Math.PI/2,t.rotation.z=Math.PI/2,t}_buildNode(e,t,r){const n=new f.Group;n.name=e.name??"Part";for(const o of e.meshes){const s=t[o];if(s!=null&&s.attributes){const i=this._createMesh(s);n.add(i)}}for(const o of e.children)this._buildNode(o,t,n);r.add(n)}_createMesh(e){var c,l;const{position:t,normal:r}=e.attributes,n=e.index??e.attributes.index,o=new f.BufferGeometry;o.setAttribute("position",new f.BufferAttribute(new Float32Array(t.array),3)),(c=r==null?void 0:r.array)!=null&&c.length?o.setAttribute("normal",new f.BufferAttribute(new Float32Array(r.array),3)):o.computeVertexNormals(),(l=n==null?void 0:n.array)!=null&&l.length&&o.setIndex(new f.BufferAttribute(new Uint32Array(n.array),1));const s=e.color,i=new f.MeshStandardMaterial({metalness:.3,roughness:.6});s&&s.length>=3?i.color.setRGB(s[0],s[1],s[2]):i.color.setHex(13421772);const a=new f.Mesh(o,i);return a.name=e.name??"Mesh",a.castShadow=!0,a.receiveShadow=!0,a}}class $e{constructor(){O(this,"_gltfLoader");O(this,"_usdzLoader");O(this,"_stepLoader");const e=new ae;e.setDecoderConfig({type:"wasm"}),this._gltfLoader=new he,this._gltfLoader.setDRACOLoader(e),this._usdzLoader=new ze,this._stepLoader=new Ze}async load(e,t){let r;if(t)r=t;else if(r=Q.getFileTypeFromUri(e),r.length===0&&(r=await this._detectFileTypeFromContent(e),r.length===0))throw new U.FileTypeError("No file extension found in URI","");if(!Q.isFileTypeSupported(r))throw new U.FileTypeError(`Unsupported file type: ${r}. Supported types: ${de.SUPPORTED_FILE_TYPES.join(", ")}`,r);const n=B.AssetCache.read(e);if(n)return n.arrayBuffer?this._parse(n.arrayBuffer,r):n.promise.then(i=>this._parse(i,r));const s=await B.AssetCache.create(e).load();return this._parse(s,r)}async _detectFileTypeFromContent(e){try{const t=B.AssetCache.read(e);let r;t?t.arrayBuffer?r=t.arrayBuffer:r=await t.promise:r=await B.AssetCache.create(e).load();const n=new Uint8Array(r);return n.length>=12&&String.fromCharCode(n[0],n[1],n[2],n[3])==="glTF"?n[12]===0?"glb":"gltf":n.length>=4&&n[0]===80&&n[1]===75&&(n[2]===3||n[2]===5)&&(n[3]===4||n[3]===6)?"usdz":n.length>=20&&new TextDecoder("ascii").decode(n.subarray(0,20)).startsWith("ISO-10303-21")?"step":n.length>=80&&n[72]===83?"iges":""}catch{return""}}async _parse(e,t){try{switch(t){case"glb":case"gltf":return(await this._gltfLoader.parseAsync(e,"")).scene;case"usdz":return this._usdzLoader.parse(e);case"step":case"stp":return await this._stepLoader.parseAsync(e,t);case"iges":case"igs":return await this._stepLoader.parseAsync(e,t)}}catch(r){throw r instanceof Error?new U.ParseError(`Failed to parse ${t} file: ${r.message}`,r):new U.ParseError(`Failed to parse ${t} file`)}}}exports.AssetLoader=$e;exports.DRACOWorker=ie;exports.DracoLoader=ae;
@@ -1,7 +1,7 @@
1
1
  var HA = Object.defineProperty;
2
2
  var qA = (h, g, A) => g in h ? HA(h, g, { enumerable: !0, configurable: !0, writable: !0, value: A }) : h[g] = A;
3
3
  var e = (h, g, A) => qA(h, typeof g != "symbol" ? g + "" : g, A);
4
- import { DataTextureLoader as dA, HalfFloatType as j, FloatType as U, DataUtils as k, LinearSRGBColorSpace as CA, LinearFilter as hA, PMREMGenerator as aA, Scene as wA, SphereGeometry as S, MeshBasicMaterial as iA, BackSide as YA, Mesh as Z, NoToneMapping as bA, WebGLCubeRenderTarget as yA, CubeCamera as OA, EquirectangularReflectionMapping as MA, WebGLRenderer as LA, PCFSoftShadowMap as FA, PCFShadowMap as XA, BasicShadowMap as jA, SRGBColorSpace as EA, LinearToneMapping as ZA, MathUtils as eA, Object3D as O, AmbientLight as QA, PointLight as WA, FrontSide as uA, HemisphereLight as NA, DirectionalLight as kA, Vector3 as w, Box3 as y, Box3Helper as xA, Sphere as TA, MeshStandardMaterial as gA, Raycaster as JA, CylinderGeometry as SA, BufferGeometry as GA, BufferAttribute as rA, BoxGeometry as $, ConeGeometry as _A, LineDashedMaterial as VA, Line as RA, PlaneGeometry as UA, Color as J, GridHelper as $A, TOUCH as l, MOUSE as K, EventDispatcher as Ai, Spherical as BA, Vector2 as G, Quaternion as cA } from "three";
4
+ import { DataTextureLoader as dA, HalfFloatType as j, FloatType as U, DataUtils as N, LinearSRGBColorSpace as CA, LinearFilter as hA, PMREMGenerator as aA, Scene as wA, SphereGeometry as S, MeshBasicMaterial as iA, BackSide as YA, Mesh as Z, NoToneMapping as bA, WebGLCubeRenderTarget as yA, CubeCamera as OA, EquirectangularReflectionMapping as MA, WebGLRenderer as LA, PCFSoftShadowMap as FA, PCFShadowMap as XA, BasicShadowMap as jA, SRGBColorSpace as EA, LinearToneMapping as ZA, MathUtils as eA, Object3D as O, AmbientLight as QA, PointLight as WA, FrontSide as uA, HemisphereLight as kA, DirectionalLight as NA, Vector3 as w, Box3 as y, Box3Helper as xA, Sphere as TA, MeshStandardMaterial as gA, Raycaster as JA, CylinderGeometry as SA, BufferGeometry as GA, BufferAttribute as rA, BoxGeometry as $, ConeGeometry as _A, LineDashedMaterial as VA, Line as RA, PlaneGeometry as UA, Color as J, GridHelper as $A, TOUCH as l, MOUSE as K, EventDispatcher as Ai, Spherical as BA, Vector2 as G, Quaternion as cA } from "three";
5
5
  import { P as v, U as ii, H as ei, a as gi, D as PA } from "./PerspectiveCamera-BFzE2TQU.mjs";
6
6
  class ti {
7
7
  constructor() {
@@ -132,24 +132,24 @@ class oi extends dA {
132
132
  c[P + 0] = n[a + 0] * z, c[P + 1] = n[a + 1] * z, c[P + 2] = n[a + 2] * z, c[P + 3] = 1;
133
133
  }, _ = function(n, a, c, P) {
134
134
  const I = n[a + 3], z = Math.pow(2, I - 128) / 255;
135
- c[P + 0] = k.toHalfFloat(Math.min(n[a + 0] * z, 65504)), c[P + 1] = k.toHalfFloat(Math.min(n[a + 1] * z, 65504)), c[P + 2] = k.toHalfFloat(Math.min(n[a + 2] * z, 65504)), c[P + 3] = k.toHalfFloat(1);
135
+ c[P + 0] = N.toHalfFloat(Math.min(n[a + 0] * z, 65504)), c[P + 1] = N.toHalfFloat(Math.min(n[a + 1] * z, 65504)), c[P + 2] = N.toHalfFloat(Math.min(n[a + 2] * z, 65504)), c[P + 3] = N.toHalfFloat(1);
136
136
  }, L = new Uint8Array(g);
137
137
  L.pos = 0;
138
- const F = M(L), oA = F.width, sA = F.height, N = d(L.subarray(L.pos), oA, sA);
138
+ const F = M(L), oA = F.width, sA = F.height, k = d(L.subarray(L.pos), oA, sA);
139
139
  let V, R, Y;
140
140
  switch (this.type) {
141
141
  case U:
142
- Y = N.length / 4;
142
+ Y = k.length / 4;
143
143
  const n = new Float32Array(Y * 4);
144
144
  for (let c = 0; c < Y; c++)
145
- W(N, c * 4, n, c * 4);
145
+ W(k, c * 4, n, c * 4);
146
146
  V = n, R = U;
147
147
  break;
148
148
  case j:
149
- Y = N.length / 4;
149
+ Y = k.length / 4;
150
150
  const a = new Uint16Array(Y * 4);
151
151
  for (let c = 0; c < Y; c++)
152
- _(N, c * 4, a, c * 4);
152
+ _(k, c * 4, a, c * 4);
153
153
  V = a, R = j;
154
154
  break;
155
155
  default:
@@ -536,7 +536,7 @@ class ri extends O {
536
536
  e(this, "isSelectable", !0);
537
537
  e(this, "_hemiLight");
538
538
  e(this, "_dirLight");
539
- this.name = "DIVESceneLight", this._hemiLight = new NA(16777215, 16777215, 2), this._hemiLight.layers.mask = v, this._hemiLight.position.set(0, 50, 0), this._hemiLight.visible = !0, this.add(this._hemiLight), this._dirLight = new kA(16777215, 3), this._dirLight.layers.mask = v, this._dirLight.position.set(1, 1.75, 1), this._dirLight.position.multiplyScalar(30), this._dirLight.castShadow = !0, this._dirLight.visible = !0, this._dirLight.shadow.mapSize.width = 2048, this._dirLight.shadow.mapSize.height = 2048;
539
+ this.name = "DIVESceneLight", this._hemiLight = new kA(16777215, 16777215, 2), this._hemiLight.layers.mask = v, this._hemiLight.position.set(0, 50, 0), this._hemiLight.visible = !0, this.add(this._hemiLight), this._dirLight = new NA(16777215, 3), this._dirLight.layers.mask = v, this._dirLight.position.set(1, 1.75, 1), this._dirLight.position.multiplyScalar(30), this._dirLight.castShadow = !0, this._dirLight.visible = !0, this._dirLight.shadow.mapSize.width = 2048, this._dirLight.shadow.mapSize.height = 2048;
540
540
  const A = 5;
541
541
  this._dirLight.shadow.camera.left = -5, this._dirLight.shadow.camera.right = A, this._dirLight.shadow.camera.top = A, this._dirLight.shadow.camera.bottom = -5, this._dirLight.shadow.camera.far = 3500, this.add(this._dirLight);
542
542
  }
@@ -1306,7 +1306,7 @@ class wi extends O {
1306
1306
  const T = {
1307
1307
  displayFloor: !1,
1308
1308
  displayGrid: !1,
1309
- backgroundColor: "#ffffff"
1309
+ backgroundColor: "transparent"
1310
1310
  };
1311
1311
  class ui extends wA {
1312
1312
  constructor(A) {
@@ -1329,7 +1329,7 @@ class ui extends wA {
1329
1329
  return this._grid;
1330
1330
  }
1331
1331
  setBackground(A) {
1332
- this.background = new J(A);
1332
+ A === "transparent" ? this.background = null : typeof A == "string" || typeof A == "number" ? this.background = new J(A) : this.background = A;
1333
1333
  }
1334
1334
  computeSceneBB() {
1335
1335
  return this._root.computeSceneBB();
@@ -1972,7 +1972,7 @@ class mi {
1972
1972
  ), this._clock.addTicker(this._orientationDisplay);
1973
1973
  }
1974
1974
  ), this._settings.autoStart && this.start(), console.log(
1975
- "DIVE 2.2.28 initialized successfully!"
1975
+ "DIVE 2.2.30 initialized successfully!"
1976
1976
  ), console.log(Di), window.DIVE.instances.push(this);
1977
1977
  }
1978
1978
  /**
@@ -2070,6 +2070,22 @@ const qi = mi, pi = {
2070
2070
  usdz: {
2071
2071
  key: "usdz",
2072
2072
  extension: "usdz"
2073
+ },
2074
+ step: {
2075
+ key: "step",
2076
+ extension: "step"
2077
+ },
2078
+ stp: {
2079
+ key: "stp",
2080
+ extension: "stp"
2081
+ },
2082
+ iges: {
2083
+ key: "iges",
2084
+ extension: "iges"
2085
+ },
2086
+ igs: {
2087
+ key: "igs",
2088
+ extension: "igs"
2073
2089
  }
2074
2090
  }, di = Object.values(pi).map(
2075
2091
  (h) => h.extension