shop-components 0.2.8 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/loader.worker-fysOIq2s.js +7 -0
- package/dist/shop-components.cjs +122 -115
- package/dist/shop-components.mjs +5226 -3775
- package/package.json +1 -1
package/dist/shop-components.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("three"),fr=require("three/examples/jsm/loaders/HDRLoader.js"),Hi=require("three/examples/jsm/postprocessing/RenderPass"),Ni=require("three/examples/jsm/postprocessing/OutlinePass"),dr=require("three/examples/jsm/postprocessing/ShaderPass"),pr=require("three/examples/jsm/shaders/FXAAShader"),mr=require("three/examples/jsm/postprocessing/UnrealBloomPass"),gr=require("three/examples/jsm/controls/OrbitControls"),vr=require("three/examples/jsm/postprocessing/OutputPass"),_r=require("three/examples/jsm/postprocessing/EffectComposer"),se=require("three/examples/jsm/renderers/CSS2DRenderer"),yr=require("three/examples/jsm/loaders/FontLoader"),xr=require("three/examples/jsm/loaders/GLTFLoader"),wr=require("three/examples/jsm/loaders/DRACOLoader"),br=require("three/examples/jsm/exporters/DRACOExporter"),Ar=require("three/examples/jsm/exporters/GLTFExporter"),Ft=require("lit"),Tr=require("three/examples/jsm/lines/LineSegments2.js"),Sr=require("three/examples/jsm/lines/LineSegmentsGeometry.js"),Os=require("three/examples/jsm/lines/LineMaterial.js"),Cr=require("three/examples/jsm/lines/Line2.js"),Wi=require("three/examples/jsm/lines/LineGeometry.js"),Mr=require("three/examples/jsm/renderers/CSS3DRenderer"),Pr=require("three/examples/jsm/utils/BufferGeometryUtils"),ue=require("three-mesh-bvh"),Ge=require("three/examples/jsm/postprocessing/Pass.js");var Ot=typeof document<"u"?document.currentScript:null;function zs(n,e,t=0){if(n.isInterleavedBufferAttribute){const i=n.itemSize;for(let r=0,l=n.count;r<l;r++){const o=r+t;e.setX(o,n.getX(r)),i>=2&&e.setY(o,n.getY(r)),i>=3&&e.setZ(o,n.getZ(r)),i>=4&&e.setW(o,n.getW(r))}}else{const i=e.array,r=i.constructor,l=i.BYTES_PER_ELEMENT*n.itemSize*t;new r(i.buffer,l,n.array.length).set(n.array)}}function nt(n,e=null){const t=n.array.constructor,i=n.normalized,r=n.itemSize,l=e===null?n.count:e;return new d.BufferAttribute(new t(r*l),r,i)}function ze(n,e){if(!n&&!e)return!0;if(!!n!=!!e)return!1;const t=n.count===e.count,i=n.normalized===e.normalized,r=n.array.constructor===e.array.constructor,l=n.itemSize===e.itemSize;return!(!t||!i||!r||!l)}function Rr(n){const e=n[0].index!==null,t=new Set(Object.keys(n[0].attributes));if(!n[0].getAttribute("position"))throw new Error("StaticGeometryGenerator: position attribute is required.");for(let i=0;i<n.length;++i){const r=n[i];let l=0;if(e!==(r.index!==null))throw new Error("StaticGeometryGenerator: All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.");for(const o in r.attributes){if(!t.has(o))throw new Error('StaticGeometryGenerator: All geometries must have compatible attributes; make sure "'+o+'" attribute exists among all geometries, or in none of them.');l++}if(l!==t.size)throw new Error("StaticGeometryGenerator: All geometries must have the same number of attributes.")}}function Ir(n){let e=0;for(let t=0,i=n.length;t<i;t++)e+=n[t].getIndex().count;return e}function Er(n){let e=0;for(let t=0,i=n.length;t<i;t++)e+=n[t].getAttribute("position").count;return e}function Fr(n,e,t){n.index&&n.index.count!==e&&n.setIndex(null);const i=n.attributes;for(const r in i)i[r].count!==t&&n.deleteAttribute(r)}function Dr(n,e={},t=new d.BufferGeometry){const{useGroups:i=!1,forceUpdate:r=!1,skipAssigningAttributes:l=[],overwriteIndex:o=!0}=e;Rr(n);const c=n[0].index!==null,h=c?Ir(n):-1,m=Er(n);if(Fr(t,h,m),i){let s=0;for(let a=0,u=n.length;a<u;a++){const g=n[a];let _;c?_=g.getIndex().count:_=g.getAttribute("position").count,t.addGroup(s,_,a),s+=_}}if(c){let s=!1;if(t.index||(t.setIndex(new d.BufferAttribute(new Uint32Array(h),1,!1)),s=!0),s||o){let a=0,u=0;const g=t.getIndex();for(let _=0,f=n.length;_<f;_++){const v=n[_],y=v.getIndex();if(!(!r&&!s&&l[_]))for(let w=0;w<y.count;++w)g.setX(a+w,y.getX(w)+u);a+=y.count,u+=v.getAttribute("position").count}}}const p=Object.keys(n[0].attributes);for(let s=0,a=p.length;s<a;s++){let u=!1;const g=p[s];if(!t.getAttribute(g)){const v=n[0].getAttribute(g);t.setAttribute(g,nt(v,m)),u=!0}let _=0;const f=t.getAttribute(g);for(let v=0,y=n.length;v<y;v++){const x=n[v],w=!r&&!u&&l[v],b=x.getAttribute(g);w||zs(b,f,_),_+=b.count}}}function Br(n,e,t){const i=n.index,l=n.attributes.position.count,o=i?i.count:l;let c=n.groups;c.length===0&&(c=[{count:o,start:0,materialIndex:0}]);let h=n.getAttribute("materialIndex");if(!h||h.count!==l){let p;t.length<=255?p=new Uint8Array(l):p=new Uint16Array(l),h=new d.BufferAttribute(p,1,!1),n.deleteAttribute("materialIndex"),n.setAttribute("materialIndex",h)}const m=h.array;for(let p=0;p<c.length;p++){const s=c[p],a=s.start,u=s.count,g=Math.min(u,o-a),_=Array.isArray(e)?e[s.materialIndex]:e,f=t.indexOf(_);for(let v=0;v<g;v++){let y=a+v;i&&(y=i.getX(y)),m[y]=f}}}function Lr(n,e){if(!n.index){const t=n.attributes.position.count,i=new Array(t);for(let r=0;r<t;r++)i[r]=r;n.setIndex(i)}if(!n.attributes.normal&&e&&e.includes("normal")&&n.computeVertexNormals(),!n.attributes.uv&&e&&e.includes("uv")){const t=n.attributes.position.count;n.setAttribute("uv",new d.BufferAttribute(new Float32Array(t*2),2,!1))}if(!n.attributes.uv2&&e&&e.includes("uv2")){const t=n.attributes.position.count;n.setAttribute("uv2",new d.BufferAttribute(new Float32Array(t*2),2,!1))}if(!n.attributes.tangent&&e&&e.includes("tangent"))if(n.attributes.uv&&n.attributes.normal)n.computeTangents();else{const t=n.attributes.position.count;n.setAttribute("tangent",new d.BufferAttribute(new Float32Array(t*4),4,!1))}if(!n.attributes.color&&e&&e.includes("color")){const t=n.attributes.position.count,i=new Float32Array(t*4);i.fill(1),n.setAttribute("color",new d.BufferAttribute(i,4))}}function Ri(n){let e=0;if(n.byteLength!==0){const t=new Uint8Array(n);for(let i=0;i<n.byteLength;i++){const r=t[i];e=(e<<5)-e+r,e|=0}}return e}function Gi(n){let e=n.uuid;const t=Object.values(n.attributes);n.index&&(t.push(n.index),e+=`index|${n.index.version}`);const i=Object.keys(t).sort();for(const r of i){const l=t[r];e+=`${r}_${l.version}|`}return e}function ji(n){const e=n.skeleton;return e?(e.boneTexture||e.computeBoneTexture(),`${Ri(e.boneTexture.image.data.buffer)}_${e.boneTexture.uuid}`):null}class kr{constructor(e=null){this.matrixWorld=new d.Matrix4,this.geometryHash=null,this.skeletonHash=null,this.primitiveCount=-1,e!==null&&this.updateFrom(e)}updateFrom(e){const t=e.geometry,i=(t.index?t.index.count:t.attributes.position.count)/3;this.matrixWorld.copy(e.matrixWorld),this.geometryHash=Gi(t),this.primitiveCount=i,this.skeletonHash=ji(e)}didChange(e){const t=e.geometry,i=(t.index?t.index.count:t.attributes.position.count)/3;return!(this.matrixWorld.equals(e.matrixWorld)&&this.geometryHash===Gi(t)&&this.skeletonHash===ji(e)&&this.primitiveCount===i)}}const ge=new d.Vector3,ve=new d.Vector3,_e=new d.Vector3,qi=new d.Vector4,ft=new d.Vector3,Zt=new d.Vector3,Yi=new d.Vector4,Qi=new d.Vector4,dt=new d.Matrix4,Zi=new d.Matrix4;function Xi(n,e,t){const i=n.skeleton,r=n.geometry,l=i.bones,o=i.boneInverses;Yi.fromBufferAttribute(r.attributes.skinIndex,e),Qi.fromBufferAttribute(r.attributes.skinWeight,e),dt.elements.fill(0);for(let c=0;c<4;c++){const h=Qi.getComponent(c);if(h!==0){const m=Yi.getComponent(c);Zi.multiplyMatrices(l[m].matrixWorld,o[m]),Or(dt,Zi,h)}}return dt.multiply(n.bindMatrix).premultiply(n.bindMatrixInverse),t.transformDirection(dt),t}function Xt(n,e,t,i,r){ft.set(0,0,0);for(let l=0,o=n.length;l<o;l++){const c=e[l],h=n[l];c!==0&&(Zt.fromBufferAttribute(h,i),t?ft.addScaledVector(Zt,c):ft.addScaledVector(Zt.sub(r),c))}r.add(ft)}function Or(n,e,t){const i=n.elements,r=e.elements;for(let l=0,o=r.length;l<o;l++)i[l]+=r[l]*t}function zr(n){const{index:e,attributes:t}=n;if(e)for(let i=0,r=e.count;i<r;i+=3){const l=e.getX(i),o=e.getX(i+2);e.setX(i,o),e.setX(i+2,l)}else for(const i in t){const r=t[i],l=r.itemSize;for(let o=0,c=r.count;o<c;o+=3)for(let h=0;h<l;h++){const m=r.getComponent(o,h),p=r.getComponent(o+2,h);r.setComponent(o,h,p),r.setComponent(o+2,h,m)}}return n}function Vr(n,e={},t=new d.BufferGeometry){e={applyWorldTransforms:!0,attributes:[],...e};const i=n.geometry,r=e.applyWorldTransforms,l=e.attributes.includes("normal"),o=e.attributes.includes("tangent"),c=i.attributes,h=t.attributes;for(const y in t.attributes)(!e.attributes.includes(y)||!(y in i.attributes))&&t.deleteAttribute(y);!t.index&&i.index&&(t.index=i.index.clone()),h.position||t.setAttribute("position",nt(c.position)),l&&!h.normal&&c.normal&&t.setAttribute("normal",nt(c.normal)),o&&!h.tangent&&c.tangent&&t.setAttribute("tangent",nt(c.tangent)),ze(i.index,t.index),ze(c.position,h.position),l&&ze(c.normal,h.normal),o&&ze(c.tangent,h.tangent);const m=c.position,p=l?c.normal:null,s=o?c.tangent:null,a=i.morphAttributes.position,u=i.morphAttributes.normal,g=i.morphAttributes.tangent,_=i.morphTargetsRelative,f=n.morphTargetInfluences,v=new d.Matrix3;v.getNormalMatrix(n.matrixWorld),i.index&&t.index.array.set(i.index.array);for(let y=0,x=c.position.count;y<x;y++)ge.fromBufferAttribute(m,y),p&&ve.fromBufferAttribute(p,y),s&&(qi.fromBufferAttribute(s,y),_e.fromBufferAttribute(s,y)),f&&(a&&Xt(a,f,_,y,ge),u&&Xt(u,f,_,y,ve),g&&Xt(g,f,_,y,_e)),n.isSkinnedMesh&&(n.applyBoneTransform(y,ge),p&&Xi(n,y,ve),s&&Xi(n,y,_e)),r&&ge.applyMatrix4(n.matrixWorld),h.position.setXYZ(y,ge.x,ge.y,ge.z),p&&(r&&ve.applyNormalMatrix(v),h.normal.setXYZ(y,ve.x,ve.y,ve.z)),s&&(r&&_e.transformDirection(n.matrixWorld),h.tangent.setXYZW(y,_e.x,_e.y,_e.z,qi.w));for(const y in e.attributes){const x=e.attributes[y];x==="position"||x==="tangent"||x==="normal"||!(x in c)||(h[x]||t.setAttribute(x,nt(c[x])),ze(c[x],h[x]),zs(c[x],h[x]))}return n.matrixWorld.determinant()<0&&zr(t),t}class Ur extends d.BufferGeometry{constructor(){super(),this.version=0,this.hash=null,this._diff=new kr}isCompatible(e,t){const i=e.geometry;for(let r=0;r<t.length;r++){const l=t[r],o=i.attributes[l],c=this.attributes[l];if(o&&!ze(o,c))return!1}return!0}updateFrom(e,t){const i=this._diff;return i.didChange(e)?(Vr(e,t,this),i.updateFrom(e),this.version++,this.hash=`${this.uuid}_${this.version}`,!0):!1}}const ui=0,Vs=1,Us=2;function Hr(n,e){for(let t=0,i=n.length;t<i;t++)n[t].traverseVisible(l=>{l.isMesh&&e(l)})}function Nr(n){const e=[];for(let t=0,i=n.length;t<i;t++){const r=n[t];Array.isArray(r.material)?e.push(...r.material):e.push(r.material)}return e}function Wr(n,e,t){if(n.length===0){e.setIndex(null);const i=e.attributes;for(const r in i)e.deleteAttribute(r);for(const r in t.attributes)e.setAttribute(t.attributes[r],new d.BufferAttribute(new Float32Array(0),4,!1))}else Dr(n,t,e);for(const i in e.attributes)e.attributes[i].needsUpdate=!0}class Gr{constructor(e){this.objects=null,this.useGroups=!0,this.applyWorldTransforms=!0,this.generateMissingAttributes=!0,this.overwriteIndex=!0,this.attributes=["position","normal","color","tangent","uv","uv2"],this._intermediateGeometry=new Map,this._geometryMergeSets=new WeakMap,this._mergeOrder=[],this._dummyMesh=null,this.setObjects(e||[])}_getDummyMesh(){if(!this._dummyMesh){const e=new d.MeshBasicMaterial,t=new d.BufferGeometry;t.setAttribute("position",new d.BufferAttribute(new Float32Array(9),3)),this._dummyMesh=new d.Mesh(t,e)}return this._dummyMesh}_getMeshes(){const e=[];return Hr(this.objects,t=>{e.push(t)}),e.sort((t,i)=>t.uuid>i.uuid?1:t.uuid<i.uuid?-1:0),e.length===0&&e.push(this._getDummyMesh()),e}_updateIntermediateGeometries(){const{_intermediateGeometry:e}=this,t=this._getMeshes(),i=new Set(e.keys()),r={attributes:this.attributes,applyWorldTransforms:this.applyWorldTransforms};for(let l=0,o=t.length;l<o;l++){const c=t[l],h=c.uuid;i.delete(h);let m=e.get(h);(!m||!m.isCompatible(c,this.attributes))&&(m&&m.dispose(),m=new Ur,e.set(h,m)),m.updateFrom(c,r)&&this.generateMissingAttributes&&Lr(m,this.attributes)}i.forEach(l=>{e.delete(l)})}setObjects(e){Array.isArray(e)?this.objects=[...e]:this.objects=[e]}generate(e=new d.BufferGeometry){const{useGroups:t,overwriteIndex:i,_intermediateGeometry:r,_geometryMergeSets:l}=this,o=this._getMeshes(),c=[],h=[],m=l.get(e)||[];this._updateIntermediateGeometries();let p=!1;o.length!==m.length&&(p=!0);for(let a=0,u=o.length;a<u;a++){const g=o[a],_=r.get(g.uuid);h.push(_);const f=m[a];!f||f.uuid!==_.uuid?(c.push(!1),p=!0):f.version!==_.version?c.push(!1):c.push(!0)}Wr(h,e,{useGroups:t,forceUpdate:p,skipAssigningAttributes:c,overwriteIndex:i}),p&&e.dispose(),l.set(e,h.map(a=>({version:a.version,uuid:a.uuid})));let s=ui;return p?s=Us:c.includes(!1)&&(s=Vs),{changeType:s,materials:Nr(o),geometry:e}}}function jr(n){const e=new Set;for(let t=0,i=n.length;t<i;t++){const r=n[t];for(const l in r){const o=r[l];o&&o.isTexture&&e.add(o)}}return Array.from(e)}function qr(n){const e=[],t=new Set;for(let r=0,l=n.length;r<l;r++)n[r].traverse(o=>{o.visible&&(o.isRectAreaLight||o.isSpotLight||o.isPointLight||o.isDirectionalLight)&&(e.push(o),o.iesMap&&t.add(o.iesMap))});const i=Array.from(t).sort((r,l)=>r.uuid<l.uuid?1:r.uuid>l.uuid?-1:0);return{lights:e,iesTextures:i}}class Yr{get initialized(){return!!this.bvh}constructor(e){this.bvhOptions={},this.attributes=["position","normal","tangent","color","uv","uv2"],this.generateBVH=!0,this.bvh=null,this.geometry=new d.BufferGeometry,this.staticGeometryGenerator=new Gr(e),this._bvhWorker=null,this._pendingGenerate=null,this._buildAsync=!1}setObjects(e){this.staticGeometryGenerator.setObjects(e)}setBVHWorker(e){this._bvhWorker=e}async generateAsync(e=null){if(!this._bvhWorker)throw new Error('PathTracingSceneGenerator: "setBVHWorker" must be called before "generateAsync" can be called.');if(this.bvh instanceof Promise)return this._pendingGenerate||(this._pendingGenerate=new Promise(async()=>(await this.bvh,this._pendingGenerate=null,this.generateAsync(e)))),this._pendingGenerate;{this._buildAsync=!0;const t=this.generate(e);return this._buildAsync=!1,t.bvh=this.bvh=await t.bvh,t}}generate(e=null){const{staticGeometryGenerator:t,geometry:i,attributes:r}=this,l=t.objects;t.attributes=r,l.forEach(s=>{s.traverse(a=>{a.isSkinnedMesh&&a.skeleton&&a.skeleton.update()})});const o=t.generate(i),c=o.materials,h=jr(c),{lights:m,iesTextures:p}=qr(l);if(o.changeType!==ui&&Br(i,c,c),this.generateBVH){if(this.bvh instanceof Promise)throw new Error("PathTracingSceneGenerator: BVH is already building asynchronously.");if(o.changeType===Us){const s={strategy:ue.SAH,maxLeafTris:1,indirect:!0,onProgress:e,...this.bvhOptions};this._buildAsync?this.bvh=this._bvhWorker.generate(i,s):this.bvh=new ue.MeshBVH(i,s)}else o.changeType===Vs&&this.bvh.refit()}return{bvhChanged:o.changeType!==ui,bvh:this.bvh,lights:m,iesTextures:p,geometry:i,materials:c,textures:h,objects:l}}}class Ii extends d.ShaderMaterial{set needsUpdate(e){super.needsUpdate=!0,this.dispatchEvent({type:"recompilation"})}constructor(e){super(e);for(const t in this.uniforms)Object.defineProperty(this,t,{get(){return this.uniforms[t].value},set(i){this.uniforms[t].value=i}})}setDefine(e,t=void 0){if(t==null){if(e in this.defines)return delete this.defines[e],this.needsUpdate=!0,!0}else if(this.defines[e]!==t)return this.defines[e]=t,this.needsUpdate=!0,!0;return!1}}class Qr extends Ii{constructor(e){super({blending:d.NoBlending,uniforms:{target1:{value:null},target2:{value:null},opacity:{value:1}},vertexShader:`
|
|
1
|
+
"use strict";var xn=Object.create;var Ii=Object.defineProperty;var wn=Object.getOwnPropertyDescriptor;var bn=Object.getOwnPropertyNames;var An=Object.getPrototypeOf,Tn=Object.prototype.hasOwnProperty;var Sn=(r,e,t)=>e in r?Ii(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var Mn=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of bn(e))!Tn.call(r,s)&&s!==t&&Ii(r,s,{get:()=>e[s],enumerable:!(i=wn(e,s))||i.enumerable});return r};var Cn=(r,e,t)=>(t=r!=null?xn(An(r)):{},Mn(e||!r||!r.__esModule?Ii(t,"default",{value:r,enumerable:!0}):t,r));var D=(r,e,t)=>(Sn(r,typeof e!="symbol"?e+"":e,t),t),Fs=(r,e,t)=>{if(!e.has(r))throw TypeError("Cannot "+t)};var V=(r,e,t)=>(Fs(r,e,"read from private field"),t?t.call(r):e.get(r)),Me=(r,e,t)=>{if(e.has(r))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(r):e.set(r,t)},pe=(r,e,t,i)=>(Fs(r,e,"write to private field"),i?i.call(r,t):e.set(r,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("three"),Pn=require("three/examples/jsm/loaders/HDRLoader.js"),Bs=require("three/examples/jsm/postprocessing/RenderPass"),ks=require("three/examples/jsm/postprocessing/OutlinePass"),Rn=require("three/examples/jsm/postprocessing/ShaderPass"),In=require("three/examples/jsm/shaders/FXAAShader"),En=require("three/examples/jsm/postprocessing/UnrealBloomPass"),Dn=require("three/examples/jsm/controls/OrbitControls"),Ln=require("three/examples/jsm/postprocessing/OutputPass"),Fn=require("three/examples/jsm/postprocessing/EffectComposer"),ve=require("three/examples/jsm/renderers/CSS2DRenderer"),Bn=require("three/examples/jsm/loaders/FontLoader"),ys=require("three/examples/jsm/loaders/GLTFLoader.js"),kn=require("three/examples/jsm/libs/meshopt_decoder.module.js"),On=require("three/examples/jsm/loaders/DRACOLoader.js"),zn=require("three/examples/jsm/loaders/GLTFLoader"),Vn=require("three/examples/jsm/loaders/DRACOLoader"),Un=require("three/examples/jsm/exporters/DRACOExporter"),Hn=require("three/examples/jsm/exporters/GLTFExporter"),ci=require("lit"),Nn=require("three/examples/jsm/lines/LineSegments2.js"),Wn=require("three/examples/jsm/lines/LineSegmentsGeometry.js"),Br=require("three/examples/jsm/lines/LineMaterial.js"),Gn=require("three/examples/jsm/lines/Line2.js"),Os=require("three/examples/jsm/lines/LineGeometry.js"),qn=require("three/examples/jsm/renderers/CSS3DRenderer"),jn=require("three/examples/jsm/utils/BufferGeometryUtils"),Ee=require("three-mesh-bvh"),dt=require("three/examples/jsm/postprocessing/Pass.js");var pt=typeof document<"u"?document.currentScript:null;function kr(r,e,t=0){if(r.isInterleavedBufferAttribute){const i=r.itemSize;for(let s=0,a=r.count;s<a;s++){const o=s+t;e.setX(o,r.getX(s)),i>=2&&e.setY(o,r.getY(s)),i>=3&&e.setZ(o,r.getZ(s)),i>=4&&e.setW(o,r.getW(s))}}else{const i=e.array,s=i.constructor,a=i.BYTES_PER_ELEMENT*r.itemSize*t;new s(i.buffer,a,r.array.length).set(r.array)}}function Ft(r,e=null){const t=r.array.constructor,i=r.normalized,s=r.itemSize,a=e===null?r.count:e;return new f.BufferAttribute(new t(s*a),s,i)}function ot(r,e){if(!r&&!e)return!0;if(!!r!=!!e)return!1;const t=r.count===e.count,i=r.normalized===e.normalized,s=r.array.constructor===e.array.constructor,a=r.itemSize===e.itemSize;return!(!t||!i||!s||!a)}function Yn(r){const e=r[0].index!==null,t=new Set(Object.keys(r[0].attributes));if(!r[0].getAttribute("position"))throw new Error("StaticGeometryGenerator: position attribute is required.");for(let i=0;i<r.length;++i){const s=r[i];let a=0;if(e!==(s.index!==null))throw new Error("StaticGeometryGenerator: All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.");for(const o in s.attributes){if(!t.has(o))throw new Error('StaticGeometryGenerator: All geometries must have compatible attributes; make sure "'+o+'" attribute exists among all geometries, or in none of them.');a++}if(a!==t.size)throw new Error("StaticGeometryGenerator: All geometries must have the same number of attributes.")}}function $n(r){let e=0;for(let t=0,i=r.length;t<i;t++)e+=r[t].getIndex().count;return e}function Qn(r){let e=0;for(let t=0,i=r.length;t<i;t++)e+=r[t].getAttribute("position").count;return e}function Zn(r,e,t){r.index&&r.index.count!==e&&r.setIndex(null);const i=r.attributes;for(const s in i)i[s].count!==t&&r.deleteAttribute(s)}function Xn(r,e={},t=new f.BufferGeometry){const{useGroups:i=!1,forceUpdate:s=!1,skipAssigningAttributes:a=[],overwriteIndex:o=!0}=e;Yn(r);const c=r[0].index!==null,u=c?$n(r):-1,m=Qn(r);if(Zn(t,u,m),i){let n=0;for(let l=0,h=r.length;l<h;l++){const g=r[l];let _;c?_=g.getIndex().count:_=g.getAttribute("position").count,t.addGroup(n,_,l),n+=_}}if(c){let n=!1;if(t.index||(t.setIndex(new f.BufferAttribute(new Uint32Array(u),1,!1)),n=!0),n||o){let l=0,h=0;const g=t.getIndex();for(let _=0,p=r.length;_<p;_++){const v=r[_],y=v.getIndex();if(!(!s&&!n&&a[_]))for(let w=0;w<y.count;++w)g.setX(l+w,y.getX(w)+h);l+=y.count,h+=v.getAttribute("position").count}}}const d=Object.keys(r[0].attributes);for(let n=0,l=d.length;n<l;n++){let h=!1;const g=d[n];if(!t.getAttribute(g)){const v=r[0].getAttribute(g);t.setAttribute(g,Ft(v,m)),h=!0}let _=0;const p=t.getAttribute(g);for(let v=0,y=r.length;v<y;v++){const x=r[v],w=!s&&!h&&a[v],b=x.getAttribute(g);w||kr(b,p,_),_+=b.count}}}function Kn(r,e,t){const i=r.index,a=r.attributes.position.count,o=i?i.count:a;let c=r.groups;c.length===0&&(c=[{count:o,start:0,materialIndex:0}]);let u=r.getAttribute("materialIndex");if(!u||u.count!==a){let d;t.length<=255?d=new Uint8Array(a):d=new Uint16Array(a),u=new f.BufferAttribute(d,1,!1),r.deleteAttribute("materialIndex"),r.setAttribute("materialIndex",u)}const m=u.array;for(let d=0;d<c.length;d++){const n=c[d],l=n.start,h=n.count,g=Math.min(h,o-l),_=Array.isArray(e)?e[n.materialIndex]:e,p=t.indexOf(_);for(let v=0;v<g;v++){let y=l+v;i&&(y=i.getX(y)),m[y]=p}}}function Jn(r,e){if(!r.index){const t=r.attributes.position.count,i=new Array(t);for(let s=0;s<t;s++)i[s]=s;r.setIndex(i)}if(!r.attributes.normal&&e&&e.includes("normal")&&r.computeVertexNormals(),!r.attributes.uv&&e&&e.includes("uv")){const t=r.attributes.position.count;r.setAttribute("uv",new f.BufferAttribute(new Float32Array(t*2),2,!1))}if(!r.attributes.uv2&&e&&e.includes("uv2")){const t=r.attributes.position.count;r.setAttribute("uv2",new f.BufferAttribute(new Float32Array(t*2),2,!1))}if(!r.attributes.tangent&&e&&e.includes("tangent"))if(r.attributes.uv&&r.attributes.normal)r.computeTangents();else{const t=r.attributes.position.count;r.setAttribute("tangent",new f.BufferAttribute(new Float32Array(t*4),4,!1))}if(!r.attributes.color&&e&&e.includes("color")){const t=r.attributes.position.count,i=new Float32Array(t*4);i.fill(1),r.setAttribute("color",new f.BufferAttribute(i,4))}}function xs(r){let e=0;if(r.byteLength!==0){const t=new Uint8Array(r);for(let i=0;i<r.byteLength;i++){const s=t[i];e=(e<<5)-e+s,e|=0}}return e}function zs(r){let e=r.uuid;const t=Object.values(r.attributes);r.index&&(t.push(r.index),e+=`index|${r.index.version}`);const i=Object.keys(t).sort();for(const s of i){const a=t[s];e+=`${s}_${a.version}|`}return e}function Vs(r){const e=r.skeleton;return e?(e.boneTexture||e.computeBoneTexture(),`${xs(e.boneTexture.image.data.buffer)}_${e.boneTexture.uuid}`):null}class eo{constructor(e=null){this.matrixWorld=new f.Matrix4,this.geometryHash=null,this.skeletonHash=null,this.primitiveCount=-1,e!==null&&this.updateFrom(e)}updateFrom(e){const t=e.geometry,i=(t.index?t.index.count:t.attributes.position.count)/3;this.matrixWorld.copy(e.matrixWorld),this.geometryHash=zs(t),this.primitiveCount=i,this.skeletonHash=Vs(e)}didChange(e){const t=e.geometry,i=(t.index?t.index.count:t.attributes.position.count)/3;return!(this.matrixWorld.equals(e.matrixWorld)&&this.geometryHash===zs(t)&&this.skeletonHash===Vs(e)&&this.primitiveCount===i)}}const ke=new f.Vector3,Oe=new f.Vector3,ze=new f.Vector3,Us=new f.Vector4,Nt=new f.Vector3,Ei=new f.Vector3,Hs=new f.Vector4,Ns=new f.Vector4,Wt=new f.Matrix4,Ws=new f.Matrix4;function Gs(r,e,t){const i=r.skeleton,s=r.geometry,a=i.bones,o=i.boneInverses;Hs.fromBufferAttribute(s.attributes.skinIndex,e),Ns.fromBufferAttribute(s.attributes.skinWeight,e),Wt.elements.fill(0);for(let c=0;c<4;c++){const u=Ns.getComponent(c);if(u!==0){const m=Hs.getComponent(c);Ws.multiplyMatrices(a[m].matrixWorld,o[m]),to(Wt,Ws,u)}}return Wt.multiply(r.bindMatrix).premultiply(r.bindMatrixInverse),t.transformDirection(Wt),t}function Di(r,e,t,i,s){Nt.set(0,0,0);for(let a=0,o=r.length;a<o;a++){const c=e[a],u=r[a];c!==0&&(Ei.fromBufferAttribute(u,i),t?Nt.addScaledVector(Ei,c):Nt.addScaledVector(Ei.sub(s),c))}s.add(Nt)}function to(r,e,t){const i=r.elements,s=e.elements;for(let a=0,o=s.length;a<o;a++)i[a]+=s[a]*t}function io(r){const{index:e,attributes:t}=r;if(e)for(let i=0,s=e.count;i<s;i+=3){const a=e.getX(i),o=e.getX(i+2);e.setX(i,o),e.setX(i+2,a)}else for(const i in t){const s=t[i],a=s.itemSize;for(let o=0,c=s.count;o<c;o+=3)for(let u=0;u<a;u++){const m=s.getComponent(o,u),d=s.getComponent(o+2,u);s.setComponent(o,u,d),s.setComponent(o+2,u,m)}}return r}function so(r,e={},t=new f.BufferGeometry){e={applyWorldTransforms:!0,attributes:[],...e};const i=r.geometry,s=e.applyWorldTransforms,a=e.attributes.includes("normal"),o=e.attributes.includes("tangent"),c=i.attributes,u=t.attributes;for(const y in t.attributes)(!e.attributes.includes(y)||!(y in i.attributes))&&t.deleteAttribute(y);!t.index&&i.index&&(t.index=i.index.clone()),u.position||t.setAttribute("position",Ft(c.position)),a&&!u.normal&&c.normal&&t.setAttribute("normal",Ft(c.normal)),o&&!u.tangent&&c.tangent&&t.setAttribute("tangent",Ft(c.tangent)),ot(i.index,t.index),ot(c.position,u.position),a&&ot(c.normal,u.normal),o&&ot(c.tangent,u.tangent);const m=c.position,d=a?c.normal:null,n=o?c.tangent:null,l=i.morphAttributes.position,h=i.morphAttributes.normal,g=i.morphAttributes.tangent,_=i.morphTargetsRelative,p=r.morphTargetInfluences,v=new f.Matrix3;v.getNormalMatrix(r.matrixWorld),i.index&&t.index.array.set(i.index.array);for(let y=0,x=c.position.count;y<x;y++)ke.fromBufferAttribute(m,y),d&&Oe.fromBufferAttribute(d,y),n&&(Us.fromBufferAttribute(n,y),ze.fromBufferAttribute(n,y)),p&&(l&&Di(l,p,_,y,ke),h&&Di(h,p,_,y,Oe),g&&Di(g,p,_,y,ze)),r.isSkinnedMesh&&(r.applyBoneTransform(y,ke),d&&Gs(r,y,Oe),n&&Gs(r,y,ze)),s&&ke.applyMatrix4(r.matrixWorld),u.position.setXYZ(y,ke.x,ke.y,ke.z),d&&(s&&Oe.applyNormalMatrix(v),u.normal.setXYZ(y,Oe.x,Oe.y,Oe.z)),n&&(s&&ze.transformDirection(r.matrixWorld),u.tangent.setXYZW(y,ze.x,ze.y,ze.z,Us.w));for(const y in e.attributes){const x=e.attributes[y];x==="position"||x==="tangent"||x==="normal"||!(x in c)||(u[x]||t.setAttribute(x,Ft(c[x])),ot(c[x],u[x]),kr(c[x],u[x]))}return r.matrixWorld.determinant()<0&&io(t),t}class ro extends f.BufferGeometry{constructor(){super(),this.version=0,this.hash=null,this._diff=new eo}isCompatible(e,t){const i=e.geometry;for(let s=0;s<t.length;s++){const a=t[s],o=i.attributes[a],c=this.attributes[a];if(o&&!ot(o,c))return!1}return!0}updateFrom(e,t){const i=this._diff;return i.didChange(e)?(so(e,t,this),i.updateFrom(e),this.version++,this.hash=`${this.uuid}_${this.version}`,!0):!1}}const Ki=0,Or=1,zr=2;function no(r,e){for(let t=0,i=r.length;t<i;t++)r[t].traverseVisible(a=>{a.isMesh&&e(a)})}function oo(r){const e=[];for(let t=0,i=r.length;t<i;t++){const s=r[t];Array.isArray(s.material)?e.push(...s.material):e.push(s.material)}return e}function ao(r,e,t){if(r.length===0){e.setIndex(null);const i=e.attributes;for(const s in i)e.deleteAttribute(s);for(const s in t.attributes)e.setAttribute(t.attributes[s],new f.BufferAttribute(new Float32Array(0),4,!1))}else Xn(r,t,e);for(const i in e.attributes)e.attributes[i].needsUpdate=!0}class lo{constructor(e){this.objects=null,this.useGroups=!0,this.applyWorldTransforms=!0,this.generateMissingAttributes=!0,this.overwriteIndex=!0,this.attributes=["position","normal","color","tangent","uv","uv2"],this._intermediateGeometry=new Map,this._geometryMergeSets=new WeakMap,this._mergeOrder=[],this._dummyMesh=null,this.setObjects(e||[])}_getDummyMesh(){if(!this._dummyMesh){const e=new f.MeshBasicMaterial,t=new f.BufferGeometry;t.setAttribute("position",new f.BufferAttribute(new Float32Array(9),3)),this._dummyMesh=new f.Mesh(t,e)}return this._dummyMesh}_getMeshes(){const e=[];return no(this.objects,t=>{e.push(t)}),e.sort((t,i)=>t.uuid>i.uuid?1:t.uuid<i.uuid?-1:0),e.length===0&&e.push(this._getDummyMesh()),e}_updateIntermediateGeometries(){const{_intermediateGeometry:e}=this,t=this._getMeshes(),i=new Set(e.keys()),s={attributes:this.attributes,applyWorldTransforms:this.applyWorldTransforms};for(let a=0,o=t.length;a<o;a++){const c=t[a],u=c.uuid;i.delete(u);let m=e.get(u);(!m||!m.isCompatible(c,this.attributes))&&(m&&m.dispose(),m=new ro,e.set(u,m)),m.updateFrom(c,s)&&this.generateMissingAttributes&&Jn(m,this.attributes)}i.forEach(a=>{e.delete(a)})}setObjects(e){Array.isArray(e)?this.objects=[...e]:this.objects=[e]}generate(e=new f.BufferGeometry){const{useGroups:t,overwriteIndex:i,_intermediateGeometry:s,_geometryMergeSets:a}=this,o=this._getMeshes(),c=[],u=[],m=a.get(e)||[];this._updateIntermediateGeometries();let d=!1;o.length!==m.length&&(d=!0);for(let l=0,h=o.length;l<h;l++){const g=o[l],_=s.get(g.uuid);u.push(_);const p=m[l];!p||p.uuid!==_.uuid?(c.push(!1),d=!0):p.version!==_.version?c.push(!1):c.push(!0)}ao(u,e,{useGroups:t,forceUpdate:d,skipAssigningAttributes:c,overwriteIndex:i}),d&&e.dispose(),a.set(e,u.map(l=>({version:l.version,uuid:l.uuid})));let n=Ki;return d?n=zr:c.includes(!1)&&(n=Or),{changeType:n,materials:oo(o),geometry:e}}}function co(r){const e=new Set;for(let t=0,i=r.length;t<i;t++){const s=r[t];for(const a in s){const o=s[a];o&&o.isTexture&&e.add(o)}}return Array.from(e)}function uo(r){const e=[],t=new Set;for(let s=0,a=r.length;s<a;s++)r[s].traverse(o=>{o.visible&&(o.isRectAreaLight||o.isSpotLight||o.isPointLight||o.isDirectionalLight)&&(e.push(o),o.iesMap&&t.add(o.iesMap))});const i=Array.from(t).sort((s,a)=>s.uuid<a.uuid?1:s.uuid>a.uuid?-1:0);return{lights:e,iesTextures:i}}class ho{get initialized(){return!!this.bvh}constructor(e){this.bvhOptions={},this.attributes=["position","normal","tangent","color","uv","uv2"],this.generateBVH=!0,this.bvh=null,this.geometry=new f.BufferGeometry,this.staticGeometryGenerator=new lo(e),this._bvhWorker=null,this._pendingGenerate=null,this._buildAsync=!1}setObjects(e){this.staticGeometryGenerator.setObjects(e)}setBVHWorker(e){this._bvhWorker=e}async generateAsync(e=null){if(!this._bvhWorker)throw new Error('PathTracingSceneGenerator: "setBVHWorker" must be called before "generateAsync" can be called.');if(this.bvh instanceof Promise)return this._pendingGenerate||(this._pendingGenerate=new Promise(async()=>(await this.bvh,this._pendingGenerate=null,this.generateAsync(e)))),this._pendingGenerate;{this._buildAsync=!0;const t=this.generate(e);return this._buildAsync=!1,t.bvh=this.bvh=await t.bvh,t}}generate(e=null){const{staticGeometryGenerator:t,geometry:i,attributes:s}=this,a=t.objects;t.attributes=s,a.forEach(n=>{n.traverse(l=>{l.isSkinnedMesh&&l.skeleton&&l.skeleton.update()})});const o=t.generate(i),c=o.materials,u=co(c),{lights:m,iesTextures:d}=uo(a);if(o.changeType!==Ki&&Kn(i,c,c),this.generateBVH){if(this.bvh instanceof Promise)throw new Error("PathTracingSceneGenerator: BVH is already building asynchronously.");if(o.changeType===zr){const n={strategy:Ee.SAH,maxLeafTris:1,indirect:!0,onProgress:e,...this.bvhOptions};this._buildAsync?this.bvh=this._bvhWorker.generate(i,n):this.bvh=new Ee.MeshBVH(i,n)}else o.changeType===Or&&this.bvh.refit()}return{bvhChanged:o.changeType!==Ki,bvh:this.bvh,lights:m,iesTextures:d,geometry:i,materials:c,textures:u,objects:a}}}class ws extends f.ShaderMaterial{set needsUpdate(e){super.needsUpdate=!0,this.dispatchEvent({type:"recompilation"})}constructor(e){super(e);for(const t in this.uniforms)Object.defineProperty(this,t,{get(){return this.uniforms[t].value},set(i){this.uniforms[t].value=i}})}setDefine(e,t=void 0){if(t==null){if(e in this.defines)return delete this.defines[e],this.needsUpdate=!0,!0}else if(this.defines[e]!==t)return this.defines[e]=t,this.needsUpdate=!0,!0;return!1}}class fo extends ws{constructor(e){super({blending:f.NoBlending,uniforms:{target1:{value:null},target2:{value:null},opacity:{value:1}},vertexShader:`
|
|
2
2
|
|
|
3
3
|
varying vec2 vUv;
|
|
4
4
|
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
}`}),this.setValues(e)}}function
|
|
38
|
+
}`}),this.setValues(e)}}function Gt(r=1){let e="uint";return r>1&&(e="uvec"+r),`
|
|
39
39
|
${e} sobolReverseBits( ${e} x ) {
|
|
40
40
|
|
|
41
41
|
x = ( ( ( x & 0xaaaaaaaau ) >> 1 ) | ( ( x & 0x55555555u ) << 1 ) );
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
return x;
|
|
71
71
|
|
|
72
72
|
}
|
|
73
|
-
`}function
|
|
73
|
+
`}function qt(r=1){let e="uint",t="float",i="",s=".r",a="1u";return r>1&&(e="uvec"+r,t="vec"+r,i=r+"",r===2?(s=".rg",a="uvec2( 1u, 2u )"):r===3?(s=".rgb",a="uvec3( 1u, 2u, 3u )"):(s="",a="uvec4( 1u, 2u, 3u, 4u )")),`
|
|
74
74
|
|
|
75
75
|
${t} sobol${i}( int effect ) {
|
|
76
76
|
|
|
@@ -79,25 +79,25 @@
|
|
|
79
79
|
|
|
80
80
|
uint shuffle_seed = sobolHashCombine( seed, 0u );
|
|
81
81
|
uint shuffled_index = nestedUniformScrambleBase2( sobolReverseBits( index ), shuffle_seed );
|
|
82
|
-
${t} sobol_pt = sobolGetTexturePoint( shuffled_index )${
|
|
82
|
+
${t} sobol_pt = sobolGetTexturePoint( shuffled_index )${s};
|
|
83
83
|
${e} result = ${e}( sobol_pt * 16777216.0 );
|
|
84
84
|
|
|
85
|
-
${e} seed2 = sobolHashCombine( seed, ${
|
|
85
|
+
${e} seed2 = sobolHashCombine( seed, ${a} );
|
|
86
86
|
result = nestedUniformScrambleBase2( result, seed2 );
|
|
87
87
|
|
|
88
88
|
return SOBOL_FACTOR * ${t}( result >> 8 );
|
|
89
89
|
|
|
90
90
|
}
|
|
91
|
-
`}const
|
|
91
|
+
`}const Vr=`
|
|
92
92
|
|
|
93
93
|
// Utils
|
|
94
94
|
const float SOBOL_FACTOR = 1.0 / 16777216.0;
|
|
95
95
|
const uint SOBOL_MAX_POINTS = 256u * 256u;
|
|
96
96
|
|
|
97
|
-
${
|
|
98
|
-
${
|
|
99
|
-
${
|
|
100
|
-
${
|
|
97
|
+
${Gt(1)}
|
|
98
|
+
${Gt(2)}
|
|
99
|
+
${Gt(3)}
|
|
100
|
+
${Gt(4)}
|
|
101
101
|
|
|
102
102
|
uint sobolHash( uint x ) {
|
|
103
103
|
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
`,
|
|
114
|
+
`,po=`
|
|
115
115
|
|
|
116
116
|
const uint SOBOL_DIRECTIONS_1[ 32 ] = uint[ 32 ](
|
|
117
117
|
0x80000000u, 0xc0000000u, 0xa0000000u, 0xf0000000u,
|
|
@@ -189,7 +189,7 @@
|
|
|
189
189
|
|
|
190
190
|
}
|
|
191
191
|
|
|
192
|
-
`,
|
|
192
|
+
`,mo=`
|
|
193
193
|
|
|
194
194
|
// Seeds
|
|
195
195
|
uniform sampler2D sobolTexture;
|
|
@@ -227,12 +227,12 @@
|
|
|
227
227
|
|
|
228
228
|
}
|
|
229
229
|
|
|
230
|
-
${
|
|
231
|
-
${
|
|
232
|
-
${
|
|
233
|
-
${
|
|
230
|
+
${qt(1)}
|
|
231
|
+
${qt(2)}
|
|
232
|
+
${qt(3)}
|
|
233
|
+
${qt(4)}
|
|
234
234
|
|
|
235
|
-
`;class
|
|
235
|
+
`;class go extends ws{constructor(){super({blending:f.NoBlending,uniforms:{resolution:{value:new f.Vector2}},vertexShader:`
|
|
236
236
|
|
|
237
237
|
varying vec2 vUv;
|
|
238
238
|
void main() {
|
|
@@ -243,8 +243,8 @@
|
|
|
243
243
|
}
|
|
244
244
|
`,fragmentShader:`
|
|
245
245
|
|
|
246
|
-
${
|
|
247
|
-
${
|
|
246
|
+
${Vr}
|
|
247
|
+
${po}
|
|
248
248
|
|
|
249
249
|
varying vec2 vUv;
|
|
250
250
|
uniform vec2 resolution;
|
|
@@ -254,7 +254,7 @@
|
|
|
254
254
|
gl_FragColor = generateSobolPoint( index );
|
|
255
255
|
|
|
256
256
|
}
|
|
257
|
-
`})}}class Kr{generate(e,t=256){const i=new d.WebGLRenderTarget(t,t,{type:d.FloatType,format:d.RGBAFormat,minFilter:d.NearestFilter,magFilter:d.NearestFilter,generateMipmaps:!1}),r=e.getRenderTarget();e.setRenderTarget(i);const l=new Ge.FullScreenQuad(new Jr);return l.material.resolution.set(t,t),l.render(e),e.setRenderTarget(r),l.dispose(),i}}class $r extends d.PerspectiveCamera{set bokehSize(e){this.fStop=this.getFocalLength()/e}get bokehSize(){return this.getFocalLength()/this.fStop}constructor(...e){super(...e),this.fStop=1.4,this.apertureBlades=0,this.apertureRotation=0,this.focusDistance=25,this.anamorphicRatio=1}copy(e,t){return super.copy(e,t),this.fStop=e.fStop,this.apertureBlades=e.apertureBlades,this.apertureRotation=e.apertureRotation,this.focusDistance=e.focusDistance,this.anamorphicRatio=e.anamorphicRatio,this}}class en{constructor(){this.bokehSize=0,this.apertureBlades=0,this.apertureRotation=0,this.focusDistance=10,this.anamorphicRatio=1}updateFrom(e){e instanceof $r?(this.bokehSize=e.bokehSize,this.apertureBlades=e.apertureBlades,this.apertureRotation=e.apertureRotation,this.focusDistance=e.focusDistance,this.anamorphicRatio=e.anamorphicRatio):(this.bokehSize=0,this.apertureRotation=0,this.apertureBlades=0,this.focusDistance=10,this.anamorphicRatio=1)}}function Jt(n){const e=new Uint16Array(n.length);for(let t=0,i=n.length;t<i;++t)e[t]=d.DataUtils.toHalfFloat(n[t]);return e}function Ji(n,e,t=0,i=n.length){let r=t,l=t+i-1;for(;r<l;){const o=r+l>>1;n[o]<e?r=o+1:l=o}return r-t}function tn(n,e,t){return .2126*n+.7152*e+.0722*t}function sn(n,e=d.HalfFloatType){const t=n.clone();t.source=new d.Source({...t.image});const{width:i,height:r,data:l}=t.image;let o=l;if(t.type!==e){e===d.HalfFloatType?o=new Uint16Array(l.length):o=new Float32Array(l.length);let c;l instanceof Int8Array||l instanceof Int16Array||l instanceof Int32Array?c=2**(8*l.BYTES_PER_ELEMENT-1)-1:c=2**(8*l.BYTES_PER_ELEMENT)-1;for(let h=0,m=l.length;h<m;h++){let p=l[h];t.type===d.HalfFloatType&&(p=d.DataUtils.fromHalfFloat(l[h])),t.type!==d.FloatType&&t.type!==d.HalfFloatType&&(p/=c),e===d.HalfFloatType&&(o[h]=d.DataUtils.toHalfFloat(p))}t.image.data=o,t.type=e}if(t.flipY){const c=o;o=o.slice();for(let h=0;h<r;h++)for(let m=0;m<i;m++){const p=r-h-1,s=4*(h*i+m),a=4*(p*i+m);o[a+0]=c[s+0],o[a+1]=c[s+1],o[a+2]=c[s+2],o[a+3]=c[s+3]}t.flipY=!1,t.image.data=o}return t}class rn{constructor(){const e=new d.DataTexture(Jt(new Float32Array([0,0,0,0])),1,1);e.type=d.HalfFloatType,e.format=d.RGBAFormat,e.minFilter=d.LinearFilter,e.magFilter=d.LinearFilter,e.wrapS=d.RepeatWrapping,e.wrapT=d.RepeatWrapping,e.generateMipmaps=!1,e.needsUpdate=!0;const t=new d.DataTexture(Jt(new Float32Array([0,1])),1,2);t.type=d.HalfFloatType,t.format=d.RedFormat,t.minFilter=d.LinearFilter,t.magFilter=d.LinearFilter,t.generateMipmaps=!1,t.needsUpdate=!0;const i=new d.DataTexture(Jt(new Float32Array([0,0,1,1])),2,2);i.type=d.HalfFloatType,i.format=d.RedFormat,i.minFilter=d.LinearFilter,i.magFilter=d.LinearFilter,i.generateMipmaps=!1,i.needsUpdate=!0,this.map=e,this.marginalWeights=t,this.conditionalWeights=i,this.totalSum=0}dispose(){this.marginalWeights.dispose(),this.conditionalWeights.dispose(),this.map.dispose()}updateFrom(e){const t=sn(e);t.wrapS=d.RepeatWrapping,t.wrapT=d.ClampToEdgeWrapping;const{width:i,height:r,data:l}=t.image,o=new Float32Array(i*r),c=new Float32Array(i*r),h=new Float32Array(r),m=new Float32Array(r);let p=0,s=0;for(let f=0;f<r;f++){let v=0;for(let y=0;y<i;y++){const x=f*i+y,w=d.DataUtils.fromHalfFloat(l[4*x+0]),b=d.DataUtils.fromHalfFloat(l[4*x+1]),C=d.DataUtils.fromHalfFloat(l[4*x+2]),T=tn(w,b,C);v+=T,p+=T,o[x]=T,c[x]=v}if(v!==0)for(let y=f*i,x=f*i+i;y<x;y++)o[y]/=v,c[y]/=v;s+=v,h[f]=v,m[f]=s}if(s!==0)for(let f=0,v=h.length;f<v;f++)h[f]/=s,m[f]/=s;const a=new Uint16Array(r),u=new Uint16Array(i*r);for(let f=0;f<r;f++){const v=(f+1)/r,y=Ji(m,v);a[f]=d.DataUtils.toHalfFloat((y+.5)/r)}for(let f=0;f<r;f++)for(let v=0;v<i;v++){const y=f*i+v,x=(v+1)/i,w=Ji(c,x,f*i,i);u[y]=d.DataUtils.toHalfFloat((w+.5)/i)}this.dispose();const{marginalWeights:g,conditionalWeights:_}=this;g.image={width:r,height:1,data:a},g.needsUpdate=!0,_.image={width:i,height:r,data:u},_.needsUpdate=!0,this.totalSum=p,this.map=t}}const Kt=6,nn=0,on=1,an=2,ln=3,cn=4,$=new d.Vector3,j=new d.Vector3,Ki=new d.Matrix4,Se=new d.Quaternion,$i=new d.Vector3,Ce=new d.Vector3,hn=new d.Vector3(0,1,0);class un{constructor(){const e=new d.DataTexture(new Float32Array(4),1,1);e.format=d.RGBAFormat,e.type=d.FloatType,e.wrapS=d.ClampToEdgeWrapping,e.wrapT=d.ClampToEdgeWrapping,e.generateMipmaps=!1,e.minFilter=d.NearestFilter,e.magFilter=d.NearestFilter,this.tex=e,this.count=0}updateFrom(e,t=[]){const i=this.tex,r=Math.max(e.length*Kt,1),l=Math.ceil(Math.sqrt(r));i.image.width!==l&&(i.dispose(),i.image.data=new Float32Array(l*l*4),i.image.width=l,i.image.height=l);const o=i.image.data;for(let h=0,m=e.length;h<m;h++){const p=e[h],s=h*Kt*4;let a=0;for(let g=0;g<Kt*4;g++)o[s+g]=0;p.getWorldPosition(j),o[s+a++]=j.x,o[s+a++]=j.y,o[s+a++]=j.z;let u=nn;if(p.isRectAreaLight&&p.isCircular?u=on:p.isSpotLight?u=an:p.isDirectionalLight?u=ln:p.isPointLight&&(u=cn),o[s+a++]=u,o[s+a++]=p.color.r,o[s+a++]=p.color.g,o[s+a++]=p.color.b,o[s+a++]=p.intensity,p.getWorldQuaternion(Se),p.isRectAreaLight)$.set(p.width,0,0).applyQuaternion(Se),o[s+a++]=$.x,o[s+a++]=$.y,o[s+a++]=$.z,a++,j.set(0,p.height,0).applyQuaternion(Se),o[s+a++]=j.x,o[s+a++]=j.y,o[s+a++]=j.z,o[s+a++]=$.cross(j).length()*(p.isCircular?Math.PI/4:1);else if(p.isSpotLight){const g=p.radius||0;$i.setFromMatrixPosition(p.matrixWorld),Ce.setFromMatrixPosition(p.target.matrixWorld),Ki.lookAt($i,Ce,hn),Se.setFromRotationMatrix(Ki),$.set(1,0,0).applyQuaternion(Se),o[s+a++]=$.x,o[s+a++]=$.y,o[s+a++]=$.z,a++,j.set(0,1,0).applyQuaternion(Se),o[s+a++]=j.x,o[s+a++]=j.y,o[s+a++]=j.z,o[s+a++]=Math.PI*g*g,o[s+a++]=g,o[s+a++]=p.decay,o[s+a++]=p.distance,o[s+a++]=Math.cos(p.angle),o[s+a++]=Math.cos(p.angle*(1-p.penumbra)),o[s+a++]=p.iesMap?t.indexOf(p.iesMap):-1}else if(p.isPointLight){const g=$.setFromMatrixPosition(p.matrixWorld);o[s+a++]=g.x,o[s+a++]=g.y,o[s+a++]=g.z,a++,a+=4,a+=1,o[s+a++]=p.decay,o[s+a++]=p.distance}else if(p.isDirectionalLight){const g=$.setFromMatrixPosition(p.matrixWorld),_=j.setFromMatrixPosition(p.target.matrixWorld);Ce.subVectors(g,_).normalize(),o[s+a++]=Ce.x,o[s+a++]=Ce.y,o[s+a++]=Ce.z}}this.count=e.length;const c=Ri(o.buffer);return this.hash!==c?(this.hash=c,i.needsUpdate=!0,!0):!1}}function es(n,e,t,i,r){if(e>i)throw new Error;const l=n.length/e,o=n.constructor.BYTES_PER_ELEMENT*8;let c=1;switch(n.constructor){case Uint8Array:case Uint16Array:case Uint32Array:c=2**o-1;break;case Int8Array:case Int16Array:case Int32Array:c=2**(o-1)-1;break}for(let h=0;h<l;h++){const m=4*h,p=e*h;for(let s=0;s<i;s++)t[r+m+s]=e>=s+1?n[p+s]/c:0}}class fn extends d.DataArrayTexture{constructor(){super(),this._textures=[],this.type=d.FloatType,this.format=d.RGBAFormat,this.internalFormat="RGBA32F"}updateAttribute(e,t){const i=this._textures[e];i.updateFrom(t);const r=i.image,l=this.image;if(r.width!==l.width||r.height!==l.height)throw new Error("FloatAttributeTextureArray: Attribute must be the same dimensions when updating single layer.");const{width:o,height:c,data:h}=l,p=o*c*4*e;let s=t.itemSize;s===3&&(s=4),es(i.image.data,s,h,4,p),this.dispose(),this.needsUpdate=!0}setAttributes(e){const t=e[0].count,i=e.length;for(let s=0,a=i;s<a;s++)if(e[s].count!==t)throw new Error("FloatAttributeTextureArray: All attributes must have the same item count.");const r=this._textures;for(;r.length<i;){const s=new ue.FloatVertexAttributeTexture;r.push(s)}for(;r.length>i;)r.pop();for(let s=0,a=i;s<a;s++)r[s].updateFrom(e[s]);const o=r[0].image,c=this.image;(o.width!==c.width||o.height!==c.height||o.depth!==i)&&(c.width=o.width,c.height=o.height,c.depth=i,c.data=new Float32Array(c.width*c.height*c.depth*4));const{data:h,width:m,height:p}=c;for(let s=0,a=i;s<a;s++){const u=r[s],_=m*p*4*s;let f=e[s].itemSize;f===3&&(f=4),es(u.image.data,f,h,4,_)}this.dispose(),this.needsUpdate=!0}}class dn extends fn{updateNormalAttribute(e){this.updateAttribute(0,e)}updateTangentAttribute(e){this.updateAttribute(1,e)}updateUvAttribute(e){this.updateAttribute(2,e)}updateColorAttribute(e){this.updateAttribute(3,e)}updateFrom(e,t,i,r){this.setAttributes([e,t,i,r])}}function Ei(n,e){return n.uuid<e.uuid?1:n.uuid>e.uuid?-1:0}function fi(n){return`${n.source.uuid}:${n.colorSpace}`}function pn(n){const e=new Set,t=[];for(let i=0,r=n.length;i<r;i++){const l=n[i],o=fi(l);e.has(o)||(e.add(o),t.push(l))}return t}function mn(n){const e=n.map(i=>i.iesMap||null).filter(i=>i),t=new Set(e);return Array.from(t).sort(Ei)}function gn(n){const e=new Set;for(let i=0,r=n.length;i<r;i++){const l=n[i];for(const o in l){const c=l[o];c&&c.isTexture&&e.add(c)}}const t=Array.from(e);return pn(t).sort(Ei)}function vn(n){const e=[];return n.traverse(t=>{t.visible&&(t.isRectAreaLight||t.isSpotLight||t.isPointLight||t.isDirectionalLight)&&e.push(t)}),e.sort(Ei)}const Ns=45,ts=Ns*4;class _n{constructor(){this._features={}}isUsed(e){return e in this._features}setUsed(e,t=!0){t===!1?delete this._features[e]:this._features[e]=!0}reset(){this._features={}}}class yn extends d.DataTexture{constructor(){super(new Float32Array(4),1,1),this.format=d.RGBAFormat,this.type=d.FloatType,this.wrapS=d.ClampToEdgeWrapping,this.wrapT=d.ClampToEdgeWrapping,this.minFilter=d.NearestFilter,this.magFilter=d.NearestFilter,this.generateMipmaps=!1,this.features=new _n}updateFrom(e,t){function i(g,_,f=-1){if(_ in g&&g[_]){const v=fi(g[_]);return s[v]}else return f}function r(g,_,f){return _ in g?g[_]:f}function l(g,_,f,v){const y=g[_]&&g[_].isTexture?g[_]:null;if(y){y.matrixAutoUpdate&&y.updateMatrix();const x=y.matrix.elements;let w=0;f[v+w++]=x[0],f[v+w++]=x[3],f[v+w++]=x[6],w++,f[v+w++]=x[1],f[v+w++]=x[4],f[v+w++]=x[7],w++}return 8}let o=0;const c=e.length*Ns,h=Math.ceil(Math.sqrt(c))||1,{image:m,features:p}=this,s={};for(let g=0,_=t.length;g<_;g++)s[fi(t[g])]=g;m.width!==h&&(this.dispose(),m.data=new Float32Array(h*h*4),m.width=h,m.height=h);const a=m.data;p.reset();for(let g=0,_=e.length;g<_;g++){const f=e[g];if(f.isFogVolumeMaterial){p.setUsed("FOG");for(let x=0;x<ts;x++)a[o+x]=0;a[o+0*4+0]=f.color.r,a[o+0*4+1]=f.color.g,a[o+0*4+2]=f.color.b,a[o+2*4+3]=r(f,"emissiveIntensity",0),a[o+3*4+0]=f.emissive.r,a[o+3*4+1]=f.emissive.g,a[o+3*4+2]=f.emissive.b,a[o+13*4+1]=f.density,a[o+13*4+3]=0,a[o+14*4+2]=4,o+=ts;continue}a[o++]=f.color.r,a[o++]=f.color.g,a[o++]=f.color.b,a[o++]=i(f,"map"),a[o++]=r(f,"metalness",0),a[o++]=i(f,"metalnessMap"),a[o++]=r(f,"roughness",0),a[o++]=i(f,"roughnessMap"),a[o++]=r(f,"ior",1.5),a[o++]=r(f,"transmission",0),a[o++]=i(f,"transmissionMap"),a[o++]=r(f,"emissiveIntensity",0),"emissive"in f?(a[o++]=f.emissive.r,a[o++]=f.emissive.g,a[o++]=f.emissive.b):(a[o++]=0,a[o++]=0,a[o++]=0),a[o++]=i(f,"emissiveMap"),a[o++]=i(f,"normalMap"),"normalScale"in f?(a[o++]=f.normalScale.x,a[o++]=f.normalScale.y):(a[o++]=1,a[o++]=1),a[o++]=r(f,"clearcoat",0),a[o++]=i(f,"clearcoatMap"),a[o++]=r(f,"clearcoatRoughness",0),a[o++]=i(f,"clearcoatRoughnessMap"),a[o++]=i(f,"clearcoatNormalMap"),"clearcoatNormalScale"in f?(a[o++]=f.clearcoatNormalScale.x,a[o++]=f.clearcoatNormalScale.y):(a[o++]=1,a[o++]=1),o++,a[o++]=r(f,"sheen",0),"sheenColor"in f?(a[o++]=f.sheenColor.r,a[o++]=f.sheenColor.g,a[o++]=f.sheenColor.b):(a[o++]=0,a[o++]=0,a[o++]=0),a[o++]=i(f,"sheenColorMap"),a[o++]=r(f,"sheenRoughness",0),a[o++]=i(f,"sheenRoughnessMap"),a[o++]=i(f,"iridescenceMap"),a[o++]=i(f,"iridescenceThicknessMap"),a[o++]=r(f,"iridescence",0),a[o++]=r(f,"iridescenceIOR",1.3);const v=r(f,"iridescenceThicknessRange",[100,400]);a[o++]=v[0],a[o++]=v[1],"specularColor"in f?(a[o++]=f.specularColor.r,a[o++]=f.specularColor.g,a[o++]=f.specularColor.b):(a[o++]=1,a[o++]=1,a[o++]=1),a[o++]=i(f,"specularColorMap"),a[o++]=r(f,"specularIntensity",1),a[o++]=i(f,"specularIntensityMap");const y=r(f,"thickness",0)===0&&r(f,"attenuationDistance",1/0)===1/0;if(a[o++]=Number(y),o++,"attenuationColor"in f?(a[o++]=f.attenuationColor.r,a[o++]=f.attenuationColor.g,a[o++]=f.attenuationColor.b):(a[o++]=1,a[o++]=1,a[o++]=1),a[o++]=r(f,"attenuationDistance",1/0),a[o++]=i(f,"alphaMap"),a[o++]=f.opacity,a[o++]=f.alphaTest,!y&&f.transmission>0)a[o++]=0;else switch(f.side){case d.FrontSide:a[o++]=1;break;case d.BackSide:a[o++]=-1;break;case d.DoubleSide:a[o++]=0;break}a[o++]=Number(r(f,"matte",!1)),a[o++]=Number(r(f,"castShadow",!0)),a[o++]=Number(f.vertexColors)|Number(f.flatShading)<<1,a[o++]=Number(f.transparent),o+=l(f,"map",a,o),o+=l(f,"metalnessMap",a,o),o+=l(f,"roughnessMap",a,o),o+=l(f,"transmissionMap",a,o),o+=l(f,"emissiveMap",a,o),o+=l(f,"normalMap",a,o),o+=l(f,"clearcoatMap",a,o),o+=l(f,"clearcoatNormalMap",a,o),o+=l(f,"clearcoatRoughnessMap",a,o),o+=l(f,"sheenColorMap",a,o),o+=l(f,"sheenRoughnessMap",a,o),o+=l(f,"iridescenceMap",a,o),o+=l(f,"iridescenceThicknessMap",a,o),o+=l(f,"specularColorMap",a,o),o+=l(f,"specularIntensityMap",a,o)}const u=Ri(a.buffer);return this.hash!==u?(this.hash=u,this.needsUpdate=!0,!0):!1}}const is=new d.Color;function xn(n){return n?`${n.uuid}:${n.version}`:null}function wn(n,e){for(const t in e)t in n&&(n[t]=e[t])}class ss extends d.WebGLArrayRenderTarget{constructor(e,t,i){const r={format:d.RGBAFormat,type:d.UnsignedByteType,minFilter:d.LinearFilter,magFilter:d.LinearFilter,wrapS:d.RepeatWrapping,wrapT:d.RepeatWrapping,generateMipmaps:!1,...i};super(e,t,1,r),wn(this.texture,r),this.texture.setTextures=(...o)=>{this.setTextures(...o)},this.hashes=[null];const l=new Ge.FullScreenQuad(new bn);this.fsQuad=l}setTextures(e,t,i=this.width,r=this.height){const l=e.getRenderTarget(),o=e.toneMapping,c=e.getClearAlpha();e.getClearColor(is);const h=t.length||1;(i!==this.width||r!==this.height||this.depth!==h)&&(this.setSize(i,r,h),this.hashes=new Array(h).fill(null)),e.setClearColor(0,0),e.toneMapping=d.NoToneMapping;const m=this.fsQuad,p=this.hashes;let s=!1;for(let a=0,u=h;a<u;a++){const g=t[a],_=xn(g);g&&(p[a]!==_||g.isWebGLRenderTarget)&&(g.matrixAutoUpdate=!1,g.matrix.identity(),m.material.map=g,e.setRenderTarget(this,a),m.render(e),g.updateMatrix(),g.matrixAutoUpdate=!0,p[a]=_,s=!0)}return m.material.map=null,e.setClearColor(is,c),e.setRenderTarget(l),e.toneMapping=o,s}dispose(){super.dispose(),this.fsQuad.dispose()}}class bn extends d.ShaderMaterial{get map(){return this.uniforms.map.value}set map(e){this.uniforms.map.value=e}constructor(){super({uniforms:{map:{value:null}},vertexShader:`
|
|
257
|
+
`})}}class vo{generate(e,t=256){const i=new f.WebGLRenderTarget(t,t,{type:f.FloatType,format:f.RGBAFormat,minFilter:f.NearestFilter,magFilter:f.NearestFilter,generateMipmaps:!1}),s=e.getRenderTarget();e.setRenderTarget(i);const a=new dt.FullScreenQuad(new go);return a.material.resolution.set(t,t),a.render(e),e.setRenderTarget(s),a.dispose(),i}}class _o extends f.PerspectiveCamera{set bokehSize(e){this.fStop=this.getFocalLength()/e}get bokehSize(){return this.getFocalLength()/this.fStop}constructor(...e){super(...e),this.fStop=1.4,this.apertureBlades=0,this.apertureRotation=0,this.focusDistance=25,this.anamorphicRatio=1}copy(e,t){return super.copy(e,t),this.fStop=e.fStop,this.apertureBlades=e.apertureBlades,this.apertureRotation=e.apertureRotation,this.focusDistance=e.focusDistance,this.anamorphicRatio=e.anamorphicRatio,this}}class yo{constructor(){this.bokehSize=0,this.apertureBlades=0,this.apertureRotation=0,this.focusDistance=10,this.anamorphicRatio=1}updateFrom(e){e instanceof _o?(this.bokehSize=e.bokehSize,this.apertureBlades=e.apertureBlades,this.apertureRotation=e.apertureRotation,this.focusDistance=e.focusDistance,this.anamorphicRatio=e.anamorphicRatio):(this.bokehSize=0,this.apertureRotation=0,this.apertureBlades=0,this.focusDistance=10,this.anamorphicRatio=1)}}function Li(r){const e=new Uint16Array(r.length);for(let t=0,i=r.length;t<i;++t)e[t]=f.DataUtils.toHalfFloat(r[t]);return e}function qs(r,e,t=0,i=r.length){let s=t,a=t+i-1;for(;s<a;){const o=s+a>>1;r[o]<e?s=o+1:a=o}return s-t}function xo(r,e,t){return .2126*r+.7152*e+.0722*t}function wo(r,e=f.HalfFloatType){const t=r.clone();t.source=new f.Source({...t.image});const{width:i,height:s,data:a}=t.image;let o=a;if(t.type!==e){e===f.HalfFloatType?o=new Uint16Array(a.length):o=new Float32Array(a.length);let c;a instanceof Int8Array||a instanceof Int16Array||a instanceof Int32Array?c=2**(8*a.BYTES_PER_ELEMENT-1)-1:c=2**(8*a.BYTES_PER_ELEMENT)-1;for(let u=0,m=a.length;u<m;u++){let d=a[u];t.type===f.HalfFloatType&&(d=f.DataUtils.fromHalfFloat(a[u])),t.type!==f.FloatType&&t.type!==f.HalfFloatType&&(d/=c),e===f.HalfFloatType&&(o[u]=f.DataUtils.toHalfFloat(d))}t.image.data=o,t.type=e}if(t.flipY){const c=o;o=o.slice();for(let u=0;u<s;u++)for(let m=0;m<i;m++){const d=s-u-1,n=4*(u*i+m),l=4*(d*i+m);o[l+0]=c[n+0],o[l+1]=c[n+1],o[l+2]=c[n+2],o[l+3]=c[n+3]}t.flipY=!1,t.image.data=o}return t}class bo{constructor(){const e=new f.DataTexture(Li(new Float32Array([0,0,0,0])),1,1);e.type=f.HalfFloatType,e.format=f.RGBAFormat,e.minFilter=f.LinearFilter,e.magFilter=f.LinearFilter,e.wrapS=f.RepeatWrapping,e.wrapT=f.RepeatWrapping,e.generateMipmaps=!1,e.needsUpdate=!0;const t=new f.DataTexture(Li(new Float32Array([0,1])),1,2);t.type=f.HalfFloatType,t.format=f.RedFormat,t.minFilter=f.LinearFilter,t.magFilter=f.LinearFilter,t.generateMipmaps=!1,t.needsUpdate=!0;const i=new f.DataTexture(Li(new Float32Array([0,0,1,1])),2,2);i.type=f.HalfFloatType,i.format=f.RedFormat,i.minFilter=f.LinearFilter,i.magFilter=f.LinearFilter,i.generateMipmaps=!1,i.needsUpdate=!0,this.map=e,this.marginalWeights=t,this.conditionalWeights=i,this.totalSum=0}dispose(){this.marginalWeights.dispose(),this.conditionalWeights.dispose(),this.map.dispose()}updateFrom(e){const t=wo(e);t.wrapS=f.RepeatWrapping,t.wrapT=f.ClampToEdgeWrapping;const{width:i,height:s,data:a}=t.image,o=new Float32Array(i*s),c=new Float32Array(i*s),u=new Float32Array(s),m=new Float32Array(s);let d=0,n=0;for(let p=0;p<s;p++){let v=0;for(let y=0;y<i;y++){const x=p*i+y,w=f.DataUtils.fromHalfFloat(a[4*x+0]),b=f.DataUtils.fromHalfFloat(a[4*x+1]),T=f.DataUtils.fromHalfFloat(a[4*x+2]),M=xo(w,b,T);v+=M,d+=M,o[x]=M,c[x]=v}if(v!==0)for(let y=p*i,x=p*i+i;y<x;y++)o[y]/=v,c[y]/=v;n+=v,u[p]=v,m[p]=n}if(n!==0)for(let p=0,v=u.length;p<v;p++)u[p]/=n,m[p]/=n;const l=new Uint16Array(s),h=new Uint16Array(i*s);for(let p=0;p<s;p++){const v=(p+1)/s,y=qs(m,v);l[p]=f.DataUtils.toHalfFloat((y+.5)/s)}for(let p=0;p<s;p++)for(let v=0;v<i;v++){const y=p*i+v,x=(v+1)/i,w=qs(c,x,p*i,i);h[y]=f.DataUtils.toHalfFloat((w+.5)/i)}this.dispose();const{marginalWeights:g,conditionalWeights:_}=this;g.image={width:s,height:1,data:l},g.needsUpdate=!0,_.image={width:i,height:s,data:h},_.needsUpdate=!0,this.totalSum=d,this.map=t}}const Fi=6,Ao=0,To=1,So=2,Mo=3,Co=4,le=new f.Vector3,X=new f.Vector3,js=new f.Matrix4,je=new f.Quaternion,Ys=new f.Vector3,Ye=new f.Vector3,Po=new f.Vector3(0,1,0);class Ro{constructor(){const e=new f.DataTexture(new Float32Array(4),1,1);e.format=f.RGBAFormat,e.type=f.FloatType,e.wrapS=f.ClampToEdgeWrapping,e.wrapT=f.ClampToEdgeWrapping,e.generateMipmaps=!1,e.minFilter=f.NearestFilter,e.magFilter=f.NearestFilter,this.tex=e,this.count=0}updateFrom(e,t=[]){const i=this.tex,s=Math.max(e.length*Fi,1),a=Math.ceil(Math.sqrt(s));i.image.width!==a&&(i.dispose(),i.image.data=new Float32Array(a*a*4),i.image.width=a,i.image.height=a);const o=i.image.data;for(let u=0,m=e.length;u<m;u++){const d=e[u],n=u*Fi*4;let l=0;for(let g=0;g<Fi*4;g++)o[n+g]=0;d.getWorldPosition(X),o[n+l++]=X.x,o[n+l++]=X.y,o[n+l++]=X.z;let h=Ao;if(d.isRectAreaLight&&d.isCircular?h=To:d.isSpotLight?h=So:d.isDirectionalLight?h=Mo:d.isPointLight&&(h=Co),o[n+l++]=h,o[n+l++]=d.color.r,o[n+l++]=d.color.g,o[n+l++]=d.color.b,o[n+l++]=d.intensity,d.getWorldQuaternion(je),d.isRectAreaLight)le.set(d.width,0,0).applyQuaternion(je),o[n+l++]=le.x,o[n+l++]=le.y,o[n+l++]=le.z,l++,X.set(0,d.height,0).applyQuaternion(je),o[n+l++]=X.x,o[n+l++]=X.y,o[n+l++]=X.z,o[n+l++]=le.cross(X).length()*(d.isCircular?Math.PI/4:1);else if(d.isSpotLight){const g=d.radius||0;Ys.setFromMatrixPosition(d.matrixWorld),Ye.setFromMatrixPosition(d.target.matrixWorld),js.lookAt(Ys,Ye,Po),je.setFromRotationMatrix(js),le.set(1,0,0).applyQuaternion(je),o[n+l++]=le.x,o[n+l++]=le.y,o[n+l++]=le.z,l++,X.set(0,1,0).applyQuaternion(je),o[n+l++]=X.x,o[n+l++]=X.y,o[n+l++]=X.z,o[n+l++]=Math.PI*g*g,o[n+l++]=g,o[n+l++]=d.decay,o[n+l++]=d.distance,o[n+l++]=Math.cos(d.angle),o[n+l++]=Math.cos(d.angle*(1-d.penumbra)),o[n+l++]=d.iesMap?t.indexOf(d.iesMap):-1}else if(d.isPointLight){const g=le.setFromMatrixPosition(d.matrixWorld);o[n+l++]=g.x,o[n+l++]=g.y,o[n+l++]=g.z,l++,l+=4,l+=1,o[n+l++]=d.decay,o[n+l++]=d.distance}else if(d.isDirectionalLight){const g=le.setFromMatrixPosition(d.matrixWorld),_=X.setFromMatrixPosition(d.target.matrixWorld);Ye.subVectors(g,_).normalize(),o[n+l++]=Ye.x,o[n+l++]=Ye.y,o[n+l++]=Ye.z}}this.count=e.length;const c=xs(o.buffer);return this.hash!==c?(this.hash=c,i.needsUpdate=!0,!0):!1}}function $s(r,e,t,i,s){if(e>i)throw new Error;const a=r.length/e,o=r.constructor.BYTES_PER_ELEMENT*8;let c=1;switch(r.constructor){case Uint8Array:case Uint16Array:case Uint32Array:c=2**o-1;break;case Int8Array:case Int16Array:case Int32Array:c=2**(o-1)-1;break}for(let u=0;u<a;u++){const m=4*u,d=e*u;for(let n=0;n<i;n++)t[s+m+n]=e>=n+1?r[d+n]/c:0}}class Io extends f.DataArrayTexture{constructor(){super(),this._textures=[],this.type=f.FloatType,this.format=f.RGBAFormat,this.internalFormat="RGBA32F"}updateAttribute(e,t){const i=this._textures[e];i.updateFrom(t);const s=i.image,a=this.image;if(s.width!==a.width||s.height!==a.height)throw new Error("FloatAttributeTextureArray: Attribute must be the same dimensions when updating single layer.");const{width:o,height:c,data:u}=a,d=o*c*4*e;let n=t.itemSize;n===3&&(n=4),$s(i.image.data,n,u,4,d),this.dispose(),this.needsUpdate=!0}setAttributes(e){const t=e[0].count,i=e.length;for(let n=0,l=i;n<l;n++)if(e[n].count!==t)throw new Error("FloatAttributeTextureArray: All attributes must have the same item count.");const s=this._textures;for(;s.length<i;){const n=new Ee.FloatVertexAttributeTexture;s.push(n)}for(;s.length>i;)s.pop();for(let n=0,l=i;n<l;n++)s[n].updateFrom(e[n]);const o=s[0].image,c=this.image;(o.width!==c.width||o.height!==c.height||o.depth!==i)&&(c.width=o.width,c.height=o.height,c.depth=i,c.data=new Float32Array(c.width*c.height*c.depth*4));const{data:u,width:m,height:d}=c;for(let n=0,l=i;n<l;n++){const h=s[n],_=m*d*4*n;let p=e[n].itemSize;p===3&&(p=4),$s(h.image.data,p,u,4,_)}this.dispose(),this.needsUpdate=!0}}class Eo extends Io{updateNormalAttribute(e){this.updateAttribute(0,e)}updateTangentAttribute(e){this.updateAttribute(1,e)}updateUvAttribute(e){this.updateAttribute(2,e)}updateColorAttribute(e){this.updateAttribute(3,e)}updateFrom(e,t,i,s){this.setAttributes([e,t,i,s])}}function bs(r,e){return r.uuid<e.uuid?1:r.uuid>e.uuid?-1:0}function Ji(r){return`${r.source.uuid}:${r.colorSpace}`}function Do(r){const e=new Set,t=[];for(let i=0,s=r.length;i<s;i++){const a=r[i],o=Ji(a);e.has(o)||(e.add(o),t.push(a))}return t}function Lo(r){const e=r.map(i=>i.iesMap||null).filter(i=>i),t=new Set(e);return Array.from(t).sort(bs)}function Fo(r){const e=new Set;for(let i=0,s=r.length;i<s;i++){const a=r[i];for(const o in a){const c=a[o];c&&c.isTexture&&e.add(c)}}const t=Array.from(e);return Do(t).sort(bs)}function Bo(r){const e=[];return r.traverse(t=>{t.visible&&(t.isRectAreaLight||t.isSpotLight||t.isPointLight||t.isDirectionalLight)&&e.push(t)}),e.sort(bs)}const Ur=45,Qs=Ur*4;class ko{constructor(){this._features={}}isUsed(e){return e in this._features}setUsed(e,t=!0){t===!1?delete this._features[e]:this._features[e]=!0}reset(){this._features={}}}class Oo extends f.DataTexture{constructor(){super(new Float32Array(4),1,1),this.format=f.RGBAFormat,this.type=f.FloatType,this.wrapS=f.ClampToEdgeWrapping,this.wrapT=f.ClampToEdgeWrapping,this.minFilter=f.NearestFilter,this.magFilter=f.NearestFilter,this.generateMipmaps=!1,this.features=new ko}updateFrom(e,t){function i(g,_,p=-1){if(_ in g&&g[_]){const v=Ji(g[_]);return n[v]}else return p}function s(g,_,p){return _ in g?g[_]:p}function a(g,_,p,v){const y=g[_]&&g[_].isTexture?g[_]:null;if(y){y.matrixAutoUpdate&&y.updateMatrix();const x=y.matrix.elements;let w=0;p[v+w++]=x[0],p[v+w++]=x[3],p[v+w++]=x[6],w++,p[v+w++]=x[1],p[v+w++]=x[4],p[v+w++]=x[7],w++}return 8}let o=0;const c=e.length*Ur,u=Math.ceil(Math.sqrt(c))||1,{image:m,features:d}=this,n={};for(let g=0,_=t.length;g<_;g++)n[Ji(t[g])]=g;m.width!==u&&(this.dispose(),m.data=new Float32Array(u*u*4),m.width=u,m.height=u);const l=m.data;d.reset();for(let g=0,_=e.length;g<_;g++){const p=e[g];if(p.isFogVolumeMaterial){d.setUsed("FOG");for(let x=0;x<Qs;x++)l[o+x]=0;l[o+0*4+0]=p.color.r,l[o+0*4+1]=p.color.g,l[o+0*4+2]=p.color.b,l[o+2*4+3]=s(p,"emissiveIntensity",0),l[o+3*4+0]=p.emissive.r,l[o+3*4+1]=p.emissive.g,l[o+3*4+2]=p.emissive.b,l[o+13*4+1]=p.density,l[o+13*4+3]=0,l[o+14*4+2]=4,o+=Qs;continue}l[o++]=p.color.r,l[o++]=p.color.g,l[o++]=p.color.b,l[o++]=i(p,"map"),l[o++]=s(p,"metalness",0),l[o++]=i(p,"metalnessMap"),l[o++]=s(p,"roughness",0),l[o++]=i(p,"roughnessMap"),l[o++]=s(p,"ior",1.5),l[o++]=s(p,"transmission",0),l[o++]=i(p,"transmissionMap"),l[o++]=s(p,"emissiveIntensity",0),"emissive"in p?(l[o++]=p.emissive.r,l[o++]=p.emissive.g,l[o++]=p.emissive.b):(l[o++]=0,l[o++]=0,l[o++]=0),l[o++]=i(p,"emissiveMap"),l[o++]=i(p,"normalMap"),"normalScale"in p?(l[o++]=p.normalScale.x,l[o++]=p.normalScale.y):(l[o++]=1,l[o++]=1),l[o++]=s(p,"clearcoat",0),l[o++]=i(p,"clearcoatMap"),l[o++]=s(p,"clearcoatRoughness",0),l[o++]=i(p,"clearcoatRoughnessMap"),l[o++]=i(p,"clearcoatNormalMap"),"clearcoatNormalScale"in p?(l[o++]=p.clearcoatNormalScale.x,l[o++]=p.clearcoatNormalScale.y):(l[o++]=1,l[o++]=1),o++,l[o++]=s(p,"sheen",0),"sheenColor"in p?(l[o++]=p.sheenColor.r,l[o++]=p.sheenColor.g,l[o++]=p.sheenColor.b):(l[o++]=0,l[o++]=0,l[o++]=0),l[o++]=i(p,"sheenColorMap"),l[o++]=s(p,"sheenRoughness",0),l[o++]=i(p,"sheenRoughnessMap"),l[o++]=i(p,"iridescenceMap"),l[o++]=i(p,"iridescenceThicknessMap"),l[o++]=s(p,"iridescence",0),l[o++]=s(p,"iridescenceIOR",1.3);const v=s(p,"iridescenceThicknessRange",[100,400]);l[o++]=v[0],l[o++]=v[1],"specularColor"in p?(l[o++]=p.specularColor.r,l[o++]=p.specularColor.g,l[o++]=p.specularColor.b):(l[o++]=1,l[o++]=1,l[o++]=1),l[o++]=i(p,"specularColorMap"),l[o++]=s(p,"specularIntensity",1),l[o++]=i(p,"specularIntensityMap");const y=s(p,"thickness",0)===0&&s(p,"attenuationDistance",1/0)===1/0;if(l[o++]=Number(y),o++,"attenuationColor"in p?(l[o++]=p.attenuationColor.r,l[o++]=p.attenuationColor.g,l[o++]=p.attenuationColor.b):(l[o++]=1,l[o++]=1,l[o++]=1),l[o++]=s(p,"attenuationDistance",1/0),l[o++]=i(p,"alphaMap"),l[o++]=p.opacity,l[o++]=p.alphaTest,!y&&p.transmission>0)l[o++]=0;else switch(p.side){case f.FrontSide:l[o++]=1;break;case f.BackSide:l[o++]=-1;break;case f.DoubleSide:l[o++]=0;break}l[o++]=Number(s(p,"matte",!1)),l[o++]=Number(s(p,"castShadow",!0)),l[o++]=Number(p.vertexColors)|Number(p.flatShading)<<1,l[o++]=Number(p.transparent),o+=a(p,"map",l,o),o+=a(p,"metalnessMap",l,o),o+=a(p,"roughnessMap",l,o),o+=a(p,"transmissionMap",l,o),o+=a(p,"emissiveMap",l,o),o+=a(p,"normalMap",l,o),o+=a(p,"clearcoatMap",l,o),o+=a(p,"clearcoatNormalMap",l,o),o+=a(p,"clearcoatRoughnessMap",l,o),o+=a(p,"sheenColorMap",l,o),o+=a(p,"sheenRoughnessMap",l,o),o+=a(p,"iridescenceMap",l,o),o+=a(p,"iridescenceThicknessMap",l,o),o+=a(p,"specularColorMap",l,o),o+=a(p,"specularIntensityMap",l,o)}const h=xs(l.buffer);return this.hash!==h?(this.hash=h,this.needsUpdate=!0,!0):!1}}const Zs=new f.Color;function zo(r){return r?`${r.uuid}:${r.version}`:null}function Vo(r,e){for(const t in e)t in r&&(r[t]=e[t])}class Xs extends f.WebGLArrayRenderTarget{constructor(e,t,i){const s={format:f.RGBAFormat,type:f.UnsignedByteType,minFilter:f.LinearFilter,magFilter:f.LinearFilter,wrapS:f.RepeatWrapping,wrapT:f.RepeatWrapping,generateMipmaps:!1,...i};super(e,t,1,s),Vo(this.texture,s),this.texture.setTextures=(...o)=>{this.setTextures(...o)},this.hashes=[null];const a=new dt.FullScreenQuad(new Uo);this.fsQuad=a}setTextures(e,t,i=this.width,s=this.height){const a=e.getRenderTarget(),o=e.toneMapping,c=e.getClearAlpha();e.getClearColor(Zs);const u=t.length||1;(i!==this.width||s!==this.height||this.depth!==u)&&(this.setSize(i,s,u),this.hashes=new Array(u).fill(null)),e.setClearColor(0,0),e.toneMapping=f.NoToneMapping;const m=this.fsQuad,d=this.hashes;let n=!1;for(let l=0,h=u;l<h;l++){const g=t[l],_=zo(g);g&&(d[l]!==_||g.isWebGLRenderTarget)&&(g.matrixAutoUpdate=!1,g.matrix.identity(),m.material.map=g,e.setRenderTarget(this,l),m.render(e),g.updateMatrix(),g.matrixAutoUpdate=!0,d[l]=_,n=!0)}return m.material.map=null,e.setClearColor(Zs,c),e.setRenderTarget(a),e.toneMapping=o,n}dispose(){super.dispose(),this.fsQuad.dispose()}}class Uo extends f.ShaderMaterial{get map(){return this.uniforms.map.value}set map(e){this.uniforms.map.value=e}constructor(){super({uniforms:{map:{value:null}},vertexShader:`
|
|
258
258
|
varying vec2 vUv;
|
|
259
259
|
void main() {
|
|
260
260
|
|
|
@@ -270,7 +270,7 @@
|
|
|
270
270
|
gl_FragColor = texture2D( map, vUv );
|
|
271
271
|
|
|
272
272
|
}
|
|
273
|
-
`})}}function
|
|
273
|
+
`})}}function Ho(r,e=Math.random()){for(let t=r.length-1;t>0;t--){const i=Math.floor(e()*(t+1)),s=r[t];r[t]=r[i],r[i]=s}return r}class No{constructor(e,t,i=Math.random){const s=e**t,a=new Uint16Array(s);let o=s;for(let c=0;c<s;c++)a[c]=c;this.samples=new Float32Array(t),this.strataCount=e,this.reset=function(){for(let c=0;c<s;c++)a[c]=c;o=0},this.reshuffle=function(){o=0},this.next=function(){const{samples:c}=this;o>=a.length&&(Ho(a,i),this.reshuffle());let u=a[o++];for(let m=0;m<t;m++)c[m]=(u%e+i())/e,u=Math.floor(u/e);return c}}}class Wo{constructor(e,t,i=Math.random){let s=0;for(const u of t)s+=u;const a=new Float32Array(s),o=[];let c=0;for(const u of t){const m=new No(e,u,i);m.samples=new Float32Array(a.buffer,c,m.samples.length),c+=m.samples.length*4,o.push(m)}this.samples=a,this.strataCount=e,this.next=function(){for(const u of o)u.next();return a},this.reshuffle=function(){for(const u of o)u.reshuffle()},this.reset=function(){for(const u of o)u.reset()}}}class Go{constructor(e=0){this.m=2147483648,this.a=1103515245,this.c=12345,this.seed=e}nextInt(){return this.seed=(this.a*this.seed+this.c)%this.m,this.seed}nextFloat(){return this.nextInt()/(this.m-1)}}class qo extends f.DataTexture{constructor(e=1,t=1,i=8){super(new Float32Array(1),1,1,f.RGBAFormat,f.FloatType),this.minFilter=f.NearestFilter,this.magFilter=f.NearestFilter,this.strata=i,this.sampler=null,this.generator=new Go,this.stableNoise=!1,this.random=()=>this.stableNoise?this.generator.nextFloat():Math.random(),this.init(e,t,i)}init(e=this.image.height,t=this.image.width,i=this.strata){const{image:s}=this;if(s.width===t&&s.height===e&&this.sampler!==null)return;const a=new Array(e*t).fill(4),o=new Wo(i,a,this.random);s.width=t,s.height=e,s.data=o.samples,this.sampler=o,this.dispose(),this.next()}next(){this.sampler.next(),this.needsUpdate=!0}reset(){this.sampler.reset(),this.generator.seed=0}}function jo(r,e=Math.random){for(let t=r.length-1;t>0;t--){const i=~~((e()-1e-6)*t),s=r[t];r[t]=r[i],r[i]=s}}function Yo(r,e){r.fill(0);for(let t=0;t<e;t++)r[t]=1}class Ks{constructor(e){this.count=0,this.size=-1,this.sigma=-1,this.radius=-1,this.lookupTable=null,this.score=null,this.binaryPattern=null,this.resize(e),this.setSigma(1.5)}findVoid(){const{score:e,binaryPattern:t}=this;let i=1/0,s=-1;for(let a=0,o=t.length;a<o;a++){if(t[a]!==0)continue;const c=e[a];c<i&&(i=c,s=a)}return s}findCluster(){const{score:e,binaryPattern:t}=this;let i=-1/0,s=-1;for(let a=0,o=t.length;a<o;a++){if(t[a]!==1)continue;const c=e[a];c>i&&(i=c,s=a)}return s}setSigma(e){if(e===this.sigma)return;const t=~~(Math.sqrt(10*2*e**2)+1),i=2*t+1,s=new Float32Array(i*i),a=e*e;for(let o=-t;o<=t;o++)for(let c=-t;c<=t;c++){const u=(t+c)*i+o+t,m=o*o+c*c;s[u]=Math.E**(-m/(2*a))}this.lookupTable=s,this.sigma=e,this.radius=t}resize(e){this.size!==e&&(this.size=e,this.score=new Float32Array(e*e),this.binaryPattern=new Uint8Array(e*e))}invert(){const{binaryPattern:e,score:t,size:i}=this;t.fill(0);for(let s=0,a=e.length;s<a;s++)if(e[s]===0){const o=~~(s/i),c=s-o*i;this.updateScore(c,o,1),e[s]=1}else e[s]=0}updateScore(e,t,i){const{size:s,score:a,lookupTable:o}=this,c=this.radius,u=2*c+1;for(let m=-c;m<=c;m++)for(let d=-c;d<=c;d++){const n=(c+d)*u+m+c,l=o[n];let h=e+m;h=h<0?s+h:h%s;let g=t+d;g=g<0?s+g:g%s;const _=g*s+h;a[_]+=i*l}}addPointIndex(e){this.binaryPattern[e]=1;const t=this.size,i=~~(e/t),s=e-i*t;this.updateScore(s,i,1),this.count++}removePointIndex(e){this.binaryPattern[e]=0;const t=this.size,i=~~(e/t),s=e-i*t;this.updateScore(s,i,-1),this.count--}copy(e){this.resize(e.size),this.score.set(e.score),this.binaryPattern.set(e.binaryPattern),this.setSigma(e.sigma),this.count=e.count}}class $o{constructor(){this.random=Math.random,this.sigma=1.5,this.size=64,this.majorityPointsRatio=.1,this.samples=new Ks(1),this.savedSamples=new Ks(1)}generate(){const{samples:e,savedSamples:t,sigma:i,majorityPointsRatio:s,size:a}=this;e.resize(a),e.setSigma(i);const o=Math.floor(a*a*s),c=e.binaryPattern;Yo(c,o),jo(c,this.random);for(let n=0,l=c.length;n<l;n++)c[n]===1&&e.addPointIndex(n);for(;;){const n=e.findCluster();e.removePointIndex(n);const l=e.findVoid();if(n===l){e.addPointIndex(n);break}e.addPointIndex(l)}const u=new Uint32Array(a*a);t.copy(e);let m;for(m=e.count-1;m>=0;){const n=e.findCluster();e.removePointIndex(n),u[n]=m,m--}const d=a*a;for(m=t.count;m<d/2;){const n=t.findVoid();t.addPointIndex(n),u[n]=m,m++}for(t.invert();m<d;){const n=t.findCluster();t.removePointIndex(n),u[n]=m,m++}return{data:u,maxValue:d}}}function Qo(r){return r>=3?4:r}function Zo(r){switch(r){case 1:return f.RedFormat;case 2:return f.RGFormat;default:return f.RGBAFormat}}class Xo extends f.DataTexture{constructor(e=64,t=1){super(new Float32Array(4),1,1,f.RGBAFormat,f.FloatType),this.minFilter=f.NearestFilter,this.magFilter=f.NearestFilter,this.size=e,this.channels=t,this.update()}update(){const e=this.channels,t=this.size,i=new $o;i.channels=e,i.size=t;const s=Qo(e),a=Zo(s);(this.image.width!==t||a!==this.format)&&(this.image.width=t,this.image.height=t,this.image.data=new Float32Array(t**2*s),this.format=a,this.dispose());const o=this.image.data;for(let c=0,u=e;c<u;c++){const m=i.generate(),d=m.data,n=m.maxValue;for(let l=0,h=d.length;l<h;l++){const g=d[l]/n;o[l*s+c]=g}}this.needsUpdate=!0}}const Ko=`
|
|
274
274
|
|
|
275
275
|
struct PhysicalCamera {
|
|
276
276
|
|
|
@@ -282,7 +282,7 @@
|
|
|
282
282
|
|
|
283
283
|
};
|
|
284
284
|
|
|
285
|
-
`,
|
|
285
|
+
`,Jo=`
|
|
286
286
|
|
|
287
287
|
struct EquirectHdrInfo {
|
|
288
288
|
|
|
@@ -294,7 +294,7 @@
|
|
|
294
294
|
|
|
295
295
|
};
|
|
296
296
|
|
|
297
|
-
`,
|
|
297
|
+
`,ea=`
|
|
298
298
|
|
|
299
299
|
#define RECT_AREA_LIGHT_TYPE 0
|
|
300
300
|
#define CIRC_AREA_LIGHT_TYPE 1
|
|
@@ -380,7 +380,7 @@
|
|
|
380
380
|
|
|
381
381
|
}
|
|
382
382
|
|
|
383
|
-
`,
|
|
383
|
+
`,ta=`
|
|
384
384
|
|
|
385
385
|
struct Material {
|
|
386
386
|
|
|
@@ -587,7 +587,7 @@
|
|
|
587
587
|
|
|
588
588
|
}
|
|
589
589
|
|
|
590
|
-
`,
|
|
590
|
+
`,ia=`
|
|
591
591
|
|
|
592
592
|
struct SurfaceRecord {
|
|
593
593
|
|
|
@@ -649,7 +649,7 @@
|
|
|
649
649
|
vec3 color;
|
|
650
650
|
};
|
|
651
651
|
|
|
652
|
-
`,
|
|
652
|
+
`,sa=`
|
|
653
653
|
|
|
654
654
|
// samples the the given environment map in the given direction
|
|
655
655
|
vec3 sampleEquirectColor( sampler2D envMap, vec3 direction ) {
|
|
@@ -716,7 +716,7 @@
|
|
|
716
716
|
return float( resolution.x * resolution.y ) * pdf * equirectDirectionPdf( direction );
|
|
717
717
|
|
|
718
718
|
}
|
|
719
|
-
`,
|
|
719
|
+
`,ra=`
|
|
720
720
|
|
|
721
721
|
float getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {
|
|
722
722
|
|
|
@@ -931,7 +931,7 @@
|
|
|
931
931
|
|
|
932
932
|
}
|
|
933
933
|
|
|
934
|
-
`,
|
|
934
|
+
`,na=`
|
|
935
935
|
|
|
936
936
|
vec3 sampleHemisphere( vec3 n, vec2 uv ) {
|
|
937
937
|
|
|
@@ -1016,7 +1016,7 @@
|
|
|
1016
1016
|
}
|
|
1017
1017
|
|
|
1018
1018
|
|
|
1019
|
-
`,
|
|
1019
|
+
`,oa=`
|
|
1020
1020
|
|
|
1021
1021
|
bool totalInternalReflection( float cosTheta, float eta ) {
|
|
1022
1022
|
|
|
@@ -1119,7 +1119,7 @@
|
|
|
1119
1119
|
|
|
1120
1120
|
}
|
|
1121
1121
|
|
|
1122
|
-
`,
|
|
1122
|
+
`,aa=`
|
|
1123
1123
|
|
|
1124
1124
|
// Fast arccos approximation used to remove banding artifacts caused by numerical errors in acos.
|
|
1125
1125
|
// This is a cubic Lagrange interpolating polynomial for x = [-1, -1/2, 0, 1/2, 1].
|
|
@@ -1199,7 +1199,7 @@
|
|
|
1199
1199
|
|
|
1200
1200
|
}
|
|
1201
1201
|
|
|
1202
|
-
`,
|
|
1202
|
+
`,la=`
|
|
1203
1203
|
|
|
1204
1204
|
// Finds the point where the ray intersects the plane defined by u and v and checks if this point
|
|
1205
1205
|
// falls in the bounds of the rectangle on that same plane.
|
|
@@ -1260,7 +1260,7 @@
|
|
|
1260
1260
|
|
|
1261
1261
|
}
|
|
1262
1262
|
|
|
1263
|
-
`,
|
|
1263
|
+
`,ca=`
|
|
1264
1264
|
|
|
1265
1265
|
// add texel fetch functions for texture arrays
|
|
1266
1266
|
vec4 texelFetch1D( sampler2DArray tex, int layer, uint index ) {
|
|
@@ -1283,7 +1283,7 @@
|
|
|
1283
1283
|
|
|
1284
1284
|
}
|
|
1285
1285
|
|
|
1286
|
-
`,
|
|
1286
|
+
`,Hr=`
|
|
1287
1287
|
|
|
1288
1288
|
// TODO: possibly this should be renamed something related to material or path tracing logic
|
|
1289
1289
|
|
|
@@ -1398,7 +1398,7 @@
|
|
|
1398
1398
|
return x < 0.5 ? sqrt( 2.0 * x ) - 1.0 : 1.0 - sqrt( 2.0 - ( 2.0 * x ) );
|
|
1399
1399
|
|
|
1400
1400
|
}
|
|
1401
|
-
`,
|
|
1401
|
+
`,Js=`
|
|
1402
1402
|
|
|
1403
1403
|
// https://www.shadertoy.com/view/wltcRS
|
|
1404
1404
|
uvec4 WHITE_NOISE_SEED;
|
|
@@ -1454,7 +1454,7 @@
|
|
|
1454
1454
|
return vec4( WHITE_NOISE_SEED ) / float( 0xffffffffu );
|
|
1455
1455
|
|
|
1456
1456
|
}
|
|
1457
|
-
`,
|
|
1457
|
+
`,ua=`
|
|
1458
1458
|
|
|
1459
1459
|
uniform sampler2D stratifiedTexture;
|
|
1460
1460
|
uniform sampler2D stratifiedOffsetTexture;
|
|
@@ -1503,7 +1503,7 @@
|
|
|
1503
1503
|
|
|
1504
1504
|
}
|
|
1505
1505
|
|
|
1506
|
-
`,
|
|
1506
|
+
`,ha=`
|
|
1507
1507
|
|
|
1508
1508
|
// diffuse
|
|
1509
1509
|
float diffuseEval( vec3 wo, vec3 wi, vec3 wh, SurfaceRecord surf, inout vec3 color ) {
|
|
@@ -1941,7 +1941,7 @@
|
|
|
1941
1941
|
|
|
1942
1942
|
}
|
|
1943
1943
|
|
|
1944
|
-
`,
|
|
1944
|
+
`,fa=`
|
|
1945
1945
|
|
|
1946
1946
|
// returns the hit distance given the material density
|
|
1947
1947
|
float intersectFogVolume( Material material, float u ) {
|
|
@@ -1962,7 +1962,7 @@
|
|
|
1962
1962
|
|
|
1963
1963
|
}
|
|
1964
1964
|
|
|
1965
|
-
`,
|
|
1965
|
+
`,da=`
|
|
1966
1966
|
|
|
1967
1967
|
// The GGX functions provide sampling and distribution information for normals as output so
|
|
1968
1968
|
// in order to get probability of scatter direction the half vector must be computed and provided.
|
|
@@ -2063,7 +2063,7 @@
|
|
|
2063
2063
|
|
|
2064
2064
|
}
|
|
2065
2065
|
|
|
2066
|
-
`,
|
|
2066
|
+
`,pa=`
|
|
2067
2067
|
|
|
2068
2068
|
// XYZ to sRGB color space
|
|
2069
2069
|
const mat3 XYZ_TO_REC709 = mat3(
|
|
@@ -2197,7 +2197,7 @@
|
|
|
2197
2197
|
|
|
2198
2198
|
}
|
|
2199
2199
|
|
|
2200
|
-
`,
|
|
2200
|
+
`,ma=`
|
|
2201
2201
|
|
|
2202
2202
|
// See equation (2) in http://www.aconty.com/pdf/s2017_pbs_imageworks_sheen.pdf
|
|
2203
2203
|
float velvetD( float cosThetaH, float roughness ) {
|
|
@@ -2294,7 +2294,7 @@
|
|
|
2294
2294
|
|
|
2295
2295
|
}
|
|
2296
2296
|
|
|
2297
|
-
`,
|
|
2297
|
+
`,ga=`
|
|
2298
2298
|
|
|
2299
2299
|
#ifndef FOG_CHECK_ITERATIONS
|
|
2300
2300
|
#define FOG_CHECK_ITERATIONS 30
|
|
@@ -2355,7 +2355,7 @@ bool bvhIntersectFogVolumeHit(
|
|
|
2355
2355
|
|
|
2356
2356
|
}
|
|
2357
2357
|
|
|
2358
|
-
|
|
2358
|
+
`,va=`
|
|
2359
2359
|
|
|
2360
2360
|
// step through multiple surface hits and accumulate color attenuation based on transmissive surfaces
|
|
2361
2361
|
// returns true if a solid surface was hit
|
|
@@ -2532,7 +2532,7 @@ bool bvhIntersectFogVolumeHit(
|
|
|
2532
2532
|
|
|
2533
2533
|
}
|
|
2534
2534
|
|
|
2535
|
-
`,
|
|
2535
|
+
`,_a=`
|
|
2536
2536
|
|
|
2537
2537
|
vec3 ndcToRayOrigin( vec2 coord ) {
|
|
2538
2538
|
|
|
@@ -2615,7 +2615,7 @@ bool bvhIntersectFogVolumeHit(
|
|
|
2615
2615
|
|
|
2616
2616
|
}
|
|
2617
2617
|
|
|
2618
|
-
`,
|
|
2618
|
+
`,ya=`
|
|
2619
2619
|
|
|
2620
2620
|
vec3 directLightContribution( vec3 worldWo, SurfaceRecord surf, RenderState state, vec3 rayOrigin ) {
|
|
2621
2621
|
|
|
@@ -2711,7 +2711,7 @@ bool bvhIntersectFogVolumeHit(
|
|
|
2711
2711
|
|
|
2712
2712
|
}
|
|
2713
2713
|
|
|
2714
|
-
`,
|
|
2714
|
+
`,xa=`
|
|
2715
2715
|
|
|
2716
2716
|
#define SKIP_SURFACE 0
|
|
2717
2717
|
#define HIT_SURFACE 1
|
|
@@ -3033,7 +3033,7 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3033
3033
|
return HIT_SURFACE;
|
|
3034
3034
|
|
|
3035
3035
|
}
|
|
3036
|
-
`,
|
|
3036
|
+
`,wa=`
|
|
3037
3037
|
|
|
3038
3038
|
struct Ray {
|
|
3039
3039
|
|
|
@@ -3082,7 +3082,7 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3082
3082
|
|
|
3083
3083
|
}
|
|
3084
3084
|
|
|
3085
|
-
`,
|
|
3085
|
+
`,ba=`
|
|
3086
3086
|
|
|
3087
3087
|
#define NO_HIT 0
|
|
3088
3088
|
#define SURFACE_HIT 1
|
|
@@ -3129,7 +3129,7 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3129
3129
|
|
|
3130
3130
|
}
|
|
3131
3131
|
|
|
3132
|
-
`;class
|
|
3132
|
+
`;class Aa extends ws{onBeforeRender(){this.setDefine("FEATURE_DOF",this.physicalCamera.bokehSize===0?0:1),this.setDefine("FEATURE_BACKGROUND_MAP",this.backgroundMap?1:0),this.setDefine("FEATURE_FOG",this.materials.features.isUsed("FOG")?1:0)}constructor(e){super({transparent:!0,depthWrite:!1,defines:{FEATURE_MIS:1,FEATURE_RUSSIAN_ROULETTE:1,FEATURE_DOF:1,FEATURE_BACKGROUND_MAP:0,FEATURE_FOG:1,RANDOM_TYPE:2,CAMERA_TYPE:0,DEBUG_MODE:0,ATTR_NORMAL:0,ATTR_TANGENT:1,ATTR_UV:2,ATTR_COLOR:3},uniforms:{resolution:{value:new f.Vector2},opacity:{value:1},bounces:{value:10},transmissiveBounces:{value:10},filterGlossyFactor:{value:0},physicalCamera:{value:new yo},cameraWorldMatrix:{value:new f.Matrix4},invProjectionMatrix:{value:new f.Matrix4},bvh:{value:new Ee.MeshBVHUniformStruct},attributesArray:{value:new Eo},materialIndexAttribute:{value:new Ee.UIntVertexAttributeTexture},materials:{value:new Oo},textures:{value:new Xs().texture},lights:{value:new Ro},iesProfiles:{value:new Xs(360,180,{type:f.HalfFloatType,wrapS:f.ClampToEdgeWrapping,wrapT:f.ClampToEdgeWrapping}).texture},environmentIntensity:{value:1},environmentRotation:{value:new f.Matrix4},envMapInfo:{value:new bo},backgroundBlur:{value:0},backgroundMap:{value:null},backgroundAlpha:{value:1},backgroundIntensity:{value:1},backgroundRotation:{value:new f.Matrix4},seed:{value:0},sobolTexture:{value:null},stratifiedTexture:{value:new qo},stratifiedOffsetTexture:{value:new Xo(64,1)}},vertexShader:`
|
|
3133
3133
|
|
|
3134
3134
|
varying vec2 vUv;
|
|
3135
3135
|
void main() {
|
|
@@ -3153,27 +3153,27 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3153
3153
|
#include <common>
|
|
3154
3154
|
|
|
3155
3155
|
// bvh intersection
|
|
3156
|
-
${
|
|
3157
|
-
${
|
|
3158
|
-
${
|
|
3156
|
+
${Ee.BVHShaderGLSL.common_functions}
|
|
3157
|
+
${Ee.BVHShaderGLSL.bvh_struct_definitions}
|
|
3158
|
+
${Ee.BVHShaderGLSL.bvh_ray_functions}
|
|
3159
3159
|
|
|
3160
3160
|
// uniform structs
|
|
3161
|
-
${
|
|
3162
|
-
${
|
|
3163
|
-
${
|
|
3164
|
-
${
|
|
3165
|
-
${
|
|
3161
|
+
${Ko}
|
|
3162
|
+
${ea}
|
|
3163
|
+
${Jo}
|
|
3164
|
+
${ta}
|
|
3165
|
+
${ia}
|
|
3166
3166
|
|
|
3167
3167
|
// random
|
|
3168
3168
|
#if RANDOM_TYPE == 2 // Stratified List
|
|
3169
3169
|
|
|
3170
|
-
${
|
|
3170
|
+
${ua}
|
|
3171
3171
|
|
|
3172
3172
|
#elif RANDOM_TYPE == 1 // Sobol
|
|
3173
3173
|
|
|
3174
|
-
${
|
|
3175
|
-
${
|
|
3176
|
-
${
|
|
3174
|
+
${Js}
|
|
3175
|
+
${Vr}
|
|
3176
|
+
${mo}
|
|
3177
3177
|
|
|
3178
3178
|
#define rand(v) sobol(v)
|
|
3179
3179
|
#define rand2(v) sobol2(v)
|
|
@@ -3182,7 +3182,7 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3182
3182
|
|
|
3183
3183
|
#else // PCG
|
|
3184
3184
|
|
|
3185
|
-
${
|
|
3185
|
+
${Js}
|
|
3186
3186
|
|
|
3187
3187
|
// Using the sobol functions seems to break the the compiler on MacOS
|
|
3188
3188
|
// - specifically the "sobolReverseBits" function.
|
|
@@ -3198,11 +3198,11 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3198
3198
|
#endif
|
|
3199
3199
|
|
|
3200
3200
|
// common
|
|
3201
|
-
${
|
|
3202
|
-
${
|
|
3203
|
-
${
|
|
3204
|
-
${
|
|
3205
|
-
${
|
|
3201
|
+
${ca}
|
|
3202
|
+
${oa}
|
|
3203
|
+
${Hr}
|
|
3204
|
+
${aa}
|
|
3205
|
+
${la}
|
|
3206
3206
|
|
|
3207
3207
|
// environment
|
|
3208
3208
|
uniform EquirectHdrInfo envMapInfo;
|
|
@@ -3258,16 +3258,16 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3258
3258
|
float lightsDenom;
|
|
3259
3259
|
|
|
3260
3260
|
// sampling
|
|
3261
|
-
${
|
|
3262
|
-
${
|
|
3263
|
-
${
|
|
3261
|
+
${na}
|
|
3262
|
+
${sa}
|
|
3263
|
+
${ra}
|
|
3264
3264
|
|
|
3265
|
-
${
|
|
3266
|
-
${
|
|
3267
|
-
${
|
|
3268
|
-
${
|
|
3269
|
-
${
|
|
3270
|
-
${
|
|
3265
|
+
${ga}
|
|
3266
|
+
${da}
|
|
3267
|
+
${ma}
|
|
3268
|
+
${pa}
|
|
3269
|
+
${fa}
|
|
3270
|
+
${ha}
|
|
3271
3271
|
|
|
3272
3272
|
float applyFilteredGlossy( float roughness, float accumulatedRoughness ) {
|
|
3273
3273
|
|
|
@@ -3299,12 +3299,12 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3299
3299
|
|
|
3300
3300
|
}
|
|
3301
3301
|
|
|
3302
|
-
${
|
|
3303
|
-
${
|
|
3304
|
-
${
|
|
3305
|
-
${
|
|
3306
|
-
${
|
|
3307
|
-
${
|
|
3302
|
+
${wa}
|
|
3303
|
+
${_a}
|
|
3304
|
+
${ba}
|
|
3305
|
+
${va}
|
|
3306
|
+
${ya}
|
|
3307
|
+
${xa}
|
|
3308
3308
|
|
|
3309
3309
|
void main() {
|
|
3310
3310
|
|
|
@@ -3596,7 +3596,7 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3596
3596
|
|
|
3597
3597
|
}
|
|
3598
3598
|
|
|
3599
|
-
`}),this.setValues(e)}}function*
|
|
3599
|
+
`}),this.setValues(e)}}function*Ta(){const{_renderer:r,_fsQuad:e,_blendQuad:t,_primaryTarget:i,_blendTargets:s,_sobolTarget:a,_subframe:o,alpha:c,material:u}=this,m=new f.Vector4,d=new f.Vector4,n=t.material;let[l,h]=s;for(;;){c?(n.opacity=this._opacityFactor/(this.samples+1),u.blending=f.NoBlending,u.opacity=1):(u.opacity=this._opacityFactor/(this.samples+1),u.blending=f.NormalBlending);const[g,_,p,v]=o,y=i.width,x=i.height;u.resolution.set(y*p,x*v),u.sobolTexture=a.texture,u.stratifiedTexture.init(20,u.bounces+u.transmissiveBounces+5),u.stratifiedTexture.next(),u.seed++;const w=this.tiles.x||1,b=this.tiles.y||1,T=w*b,M=Math.ceil(y*p),S=Math.ceil(x*v),C=Math.floor(g*y),R=Math.floor(_*x),E=Math.ceil(M/w),A=Math.ceil(S/b);for(let P=0;P<b;P++)for(let I=0;I<w;I++){const L=r.getRenderTarget(),F=r.autoClear,B=r.getScissorTest();r.getScissor(m),r.getViewport(d);let U=I,H=P;if(!this.stableTiles){const Y=this._currentTile%(w*b);U=Y%w,H=~~(Y/w),this._currentTile=Y+1}const j=b-H-1;i.scissor.set(C+U*E,R+j*A,Math.min(E,M-U*E),Math.min(A,S-j*A)),i.viewport.set(C,R,M,S),r.setRenderTarget(i),r.setScissorTest(!0),r.autoClear=!1,e.render(r),r.setViewport(d),r.setScissor(m),r.setScissorTest(B),r.setRenderTarget(L),r.autoClear=F,c&&(n.target1=l.texture,n.target2=i.texture,r.setRenderTarget(h),t.render(r),r.setRenderTarget(L)),this.samples+=1/T,I===w-1&&P===b-1&&(this.samples=Math.round(this.samples)),yield}[l,h]=[h,l]}}const er=new f.Color;class tr{get material(){return this._fsQuad.material}set material(e){this._fsQuad.material.removeEventListener("recompilation",this._compileFunction),e.addEventListener("recompilation",this._compileFunction),this._fsQuad.material=e}get target(){return this._alpha?this._blendTargets[1]:this._primaryTarget}set alpha(e){this._alpha!==e&&(e||(this._blendTargets[0].dispose(),this._blendTargets[1].dispose()),this._alpha=e,this.reset())}get alpha(){return this._alpha}get isCompiling(){return!!this._compilePromise}constructor(e){this.camera=null,this.tiles=new f.Vector2(3,3),this.stableNoise=!1,this.stableTiles=!0,this.samples=0,this._subframe=new f.Vector4(0,0,1,1),this._opacityFactor=1,this._renderer=e,this._alpha=!1,this._fsQuad=new dt.FullScreenQuad(new Aa),this._blendQuad=new dt.FullScreenQuad(new fo),this._task=null,this._currentTile=0,this._compilePromise=null,this._sobolTarget=new vo().generate(e),this._primaryTarget=new f.WebGLRenderTarget(1,1,{format:f.RGBAFormat,type:f.FloatType,magFilter:f.NearestFilter,minFilter:f.NearestFilter}),this._blendTargets=[new f.WebGLRenderTarget(1,1,{format:f.RGBAFormat,type:f.FloatType,magFilter:f.NearestFilter,minFilter:f.NearestFilter}),new f.WebGLRenderTarget(1,1,{format:f.RGBAFormat,type:f.FloatType,magFilter:f.NearestFilter,minFilter:f.NearestFilter})],this._compileFunction=()=>{const t=this.compileMaterial(this._fsQuad._mesh);t.then(()=>{this._compilePromise===t&&(this._compilePromise=null)}),this._compilePromise=t},this.material.addEventListener("recompilation",this._compileFunction)}compileMaterial(){return this._renderer.compileAsync(this._fsQuad._mesh)}setCamera(e){const{material:t}=this;t.cameraWorldMatrix.copy(e.matrixWorld),t.invProjectionMatrix.copy(e.projectionMatrixInverse),t.physicalCamera.updateFrom(e);let i=0;e.projectionMatrix.elements[15]>0&&(i=1),e.isEquirectCamera&&(i=2),t.setDefine("CAMERA_TYPE",i),this.camera=e}setSize(e,t){e=Math.ceil(e),t=Math.ceil(t),!(this._primaryTarget.width===e&&this._primaryTarget.height===t)&&(this._primaryTarget.setSize(e,t),this._blendTargets[0].setSize(e,t),this._blendTargets[1].setSize(e,t),this.reset())}getSize(e){e.x=this._primaryTarget.width,e.y=this._primaryTarget.height}dispose(){this._primaryTarget.dispose(),this._blendTargets[0].dispose(),this._blendTargets[1].dispose(),this._sobolTarget.dispose(),this._fsQuad.dispose(),this._blendQuad.dispose(),this._task=null}reset(){const{_renderer:e,_primaryTarget:t,_blendTargets:i}=this,s=e.getRenderTarget(),a=e.getClearAlpha();e.getClearColor(er),e.setRenderTarget(t),e.setClearColor(0,0),e.clearColor(),e.setRenderTarget(i[0]),e.setClearColor(0,0),e.clearColor(),e.setRenderTarget(i[1]),e.setClearColor(0,0),e.clearColor(),e.setClearColor(er,a),e.setRenderTarget(s),this.samples=0,this._task=null,this.material.stratifiedTexture.stableNoise=this.stableNoise,this.stableNoise&&(this.material.seed=0,this.material.stratifiedTexture.reset())}update(){this.material.onBeforeRender(),!this.isCompiling&&(this._task||(this._task=Ta.call(this)),this._task.next())}}const Ve=new f.Vector2,ir=new f.Vector2,jt=new f.Spherical,Yt=new f.Color;class Sa extends f.DataTexture{constructor(e=512,t=512){super(new Float32Array(e*t*4),e,t,f.RGBAFormat,f.FloatType,f.EquirectangularReflectionMapping,f.RepeatWrapping,f.ClampToEdgeWrapping,f.LinearFilter,f.LinearFilter),this.generationCallback=null}update(){this.dispose(),this.needsUpdate=!0;const{data:e,width:t,height:i}=this.image;for(let s=0;s<t;s++)for(let a=0;a<i;a++){ir.set(t,i),Ve.set(s/t,a/i),Ve.x-=.5,Ve.y=1-Ve.y,jt.theta=Ve.x*2*Math.PI,jt.phi=Ve.y*Math.PI,jt.radius=1,this.generationCallback(jt,Ve,ir,Yt);const c=4*(a*t+s);e[c+0]=Yt.r,e[c+1]=Yt.g,e[c+2]=Yt.b,e[c+3]=1}}copy(e){return super.copy(e),this.generationCallback=e.generationCallback,this}}const sr=new f.Vector3;class Ma extends Sa{constructor(e=512){super(e,e),this.topColor=new f.Color().set(16777215),this.bottomColor=new f.Color().set(0),this.exponent=2,this.generationCallback=(t,i,s,a)=>{sr.setFromSpherical(t);const o=sr.y*.5+.5;a.lerpColors(this.bottomColor,this.topColor,o**this.exponent)}}copy(e){return super.copy(e),this.topColor.copy(e.topColor),this.bottomColor.copy(e.bottomColor),this}}class Ca extends f.ShaderMaterial{get map(){return this.uniforms.map.value}set map(e){this.uniforms.map.value=e}get opacity(){return this.uniforms.opacity.value}set opacity(e){this.uniforms&&(this.uniforms.opacity.value=e)}constructor(e){super({uniforms:{map:{value:null},opacity:{value:1}},vertexShader:`
|
|
3600
3600
|
varying vec2 vUv;
|
|
3601
3601
|
void main() {
|
|
3602
3602
|
|
|
@@ -3653,7 +3653,7 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3653
3653
|
#include <premultiplied_alpha_fragment>
|
|
3654
3654
|
|
|
3655
3655
|
}
|
|
3656
|
-
`}),this.setValues(e)}}class
|
|
3656
|
+
`}),this.setValues(e)}}class Pa extends f.ShaderMaterial{constructor(){super({uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:`
|
|
3657
3657
|
varying vec2 vUv;
|
|
3658
3658
|
void main() {
|
|
3659
3659
|
|
|
@@ -3670,7 +3670,7 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3670
3670
|
#include <common>
|
|
3671
3671
|
#include <cube_uv_reflection_fragment>
|
|
3672
3672
|
|
|
3673
|
-
${
|
|
3673
|
+
${Hr}
|
|
3674
3674
|
|
|
3675
3675
|
void main() {
|
|
3676
3676
|
|
|
@@ -3678,7 +3678,14 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3678
3678
|
rayDirection.x *= flipEnvMap;
|
|
3679
3679
|
gl_FragColor = textureCube( envMap, rayDirection );
|
|
3680
3680
|
|
|
3681
|
-
}`}),this.depthWrite=!1,this.depthTest=!1}}class hs{constructor(e){this._renderer=e,this._quad=new Ge.FullScreenQuad(new ho)}generate(e,t=null,i=null){if(!e.isCubeTexture)throw new Error("CubeToEquirectMaterial: Source can only be cube textures.");const r=e.images[0],l=this._renderer,o=this._quad;t===null&&(t=4*r.height),i===null&&(i=2*r.height);const c=new d.WebGLRenderTarget(t,i,{type:d.FloatType,colorSpace:r.colorSpace}),h=r.height,m=Math.log2(h)-2,p=1/h,s=1/(3*Math.max(Math.pow(2,m),7*16));o.material.defines.CUBEUV_MAX_MIP=`${m}.0`,o.material.defines.CUBEUV_TEXEL_WIDTH=s,o.material.defines.CUBEUV_TEXEL_HEIGHT=p,o.material.uniforms.envMap.value=e,o.material.uniforms.flipEnvMap.value=e.isRenderTargetTexture?1:-1,o.material.needsUpdate=!0;const a=l.getRenderTarget(),u=l.autoClear;l.autoClear=!0,l.setRenderTarget(c),o.render(l),l.setRenderTarget(a),l.autoClear=u;const g=new Uint16Array(t*i*4),_=new Float32Array(t*i*4);l.readRenderTargetPixels(c,0,0,t,i,_),c.dispose();for(let v=0,y=_.length;v<y;v++)g[v]=d.DataUtils.toHalfFloat(_[v]);const f=new d.DataTexture(g,t,i,d.RGBAFormat,d.HalfFloatType);return f.minFilter=d.LinearMipMapLinearFilter,f.magFilter=d.LinearFilter,f.wrapS=d.RepeatWrapping,f.wrapT=d.RepeatWrapping,f.mapping=d.EquirectangularReflectionMapping,f.needsUpdate=!0,f}dispose(){this._quad.dispose()}}function uo(n){return n.extensions.get("EXT_float_blend")}const Me=new d.Vector2;class fo{get multipleImportanceSampling(){return!!this._pathTracer.material.defines.FEATURE_MIS}set multipleImportanceSampling(e){this._pathTracer.material.setDefine("FEATURE_MIS",e?1:0)}get transmissiveBounces(){return this._pathTracer.material.transmissiveBounces}set transmissiveBounces(e){this._pathTracer.material.transmissiveBounces=e}get bounces(){return this._pathTracer.material.bounces}set bounces(e){this._pathTracer.material.bounces=e}get filterGlossyFactor(){return this._pathTracer.material.filterGlossyFactor}set filterGlossyFactor(e){this._pathTracer.material.filterGlossyFactor=e}get samples(){return this._pathTracer.samples}get target(){return this._pathTracer.target}get tiles(){return this._pathTracer.tiles}get stableNoise(){return this._pathTracer.stableNoise}set stableNoise(e){this._pathTracer.stableNoise=e}get isCompiling(){return!!this._pathTracer.isCompiling}constructor(e){this._renderer=e,this._generator=new Yr,this._pathTracer=new as(e),this._queueReset=!1,this._clock=new d.Clock,this._compilePromise=null,this._lowResPathTracer=new as(e),this._lowResPathTracer.tiles.set(1,1),this._quad=new Ge.FullScreenQuad(new co({map:null,transparent:!0,blending:d.NoBlending,premultipliedAlpha:e.getContextAttributes().premultipliedAlpha})),this._materials=null,this._previousEnvironment=null,this._previousBackground=null,this._internalBackground=null,this.renderDelay=100,this.minSamples=5,this.fadeDuration=500,this.enablePathTracing=!0,this.pausePathTracing=!1,this.dynamicLowRes=!1,this.lowResScale=.25,this.renderScale=1,this.synchronizeRenderSize=!0,this.rasterizeScene=!0,this.renderToCanvas=!0,this.textureSize=new d.Vector2(1024,1024),this.rasterizeSceneCallback=(t,i)=>{this._renderer.render(t,i)},this.renderToCanvasCallback=(t,i,r)=>{const l=i.autoClear;i.autoClear=!1,r.render(i),i.autoClear=l},this.setScene(new d.Scene,new d.PerspectiveCamera)}setBVHWorker(e){this._generator.setBVHWorker(e)}setScene(e,t,i={}){e.updateMatrixWorld(!0),t.updateMatrixWorld();const r=this._generator;if(r.setObjects(e),this._buildAsync)return r.generateAsync(i.onProgress).then(l=>this._updateFromResults(e,t,l));{const l=r.generate();return this._updateFromResults(e,t,l)}}setSceneAsync(...e){this._buildAsync=!0;const t=this.setScene(...e);return this._buildAsync=!1,t}setCamera(e){this.camera=e,this.updateCamera()}updateCamera(){const e=this.camera;e.updateMatrixWorld(),this._pathTracer.setCamera(e),this._lowResPathTracer.setCamera(e),this.reset()}updateMaterials(){const e=this._pathTracer.material,t=this._renderer,i=this._materials,r=this.textureSize,l=gn(i);e.textures.setTextures(t,l,r.x,r.y),e.materials.updateFrom(i,l),this.reset()}updateLights(){const e=this.scene,t=this._renderer,i=this._pathTracer.material,r=vn(e),l=mn(r);i.lights.updateFrom(r,l),i.iesProfiles.setTextures(t,l),this.reset()}updateEnvironment(){const e=this.scene,t=this._pathTracer.material;if(this._internalBackground&&(this._internalBackground.dispose(),this._internalBackground=null),t.backgroundBlur=e.backgroundBlurriness,t.backgroundIntensity=e.backgroundIntensity??1,t.backgroundRotation.makeRotationFromEuler(e.backgroundRotation).invert(),e.background===null)t.backgroundMap=null,t.backgroundAlpha=0;else if(e.background.isColor){this._colorBackground=this._colorBackground||new lo(16);const i=this._colorBackground;i.topColor.equals(e.background)||(i.topColor.set(e.background),i.bottomColor.set(e.background),i.update()),t.backgroundMap=i,t.backgroundAlpha=1}else if(e.background.isCubeTexture){if(e.background!==this._previousBackground){const i=new hs(this._renderer).generate(e.background);this._internalBackground=i,t.backgroundMap=i,t.backgroundAlpha=1}}else t.backgroundMap=e.background,t.backgroundAlpha=1;if(t.environmentIntensity=e.environmentIntensity??1,t.environmentRotation.makeRotationFromEuler(e.environmentRotation).invert(),this._previousEnvironment!==e.environment)if(e.environment!==null)if(e.environment.isCubeTexture){const i=new hs(this._renderer).generate(e.environment);t.envMapInfo.updateFrom(i)}else t.envMapInfo.updateFrom(e.environment);else t.environmentIntensity=0;this._previousEnvironment=e.environment,this._previousBackground=e.background,this.reset()}_updateFromResults(e,t,i){const{materials:r,geometry:l,bvh:o,bvhChanged:c}=i;this._materials=r;const m=this._pathTracer.material;return c&&(m.bvh.updateFrom(o),m.attributesArray.updateFrom(l.attributes.normal,l.attributes.tangent,l.attributes.uv,l.attributes.color),m.materialIndexAttribute.updateFrom(l.attributes.materialIndex)),this._previousScene=e,this.scene=e,this.camera=t,this.updateCamera(),this.updateMaterials(),this.updateEnvironment(),this.updateLights(),i}renderSample(){const e=this._lowResPathTracer,t=this._pathTracer,i=this._renderer,r=this._clock,l=this._quad;this._updateScale(),this._queueReset&&(t.reset(),e.reset(),this._queueReset=!1,l.material.opacity=0,r.start());const o=r.getDelta()*1e3,c=r.getElapsedTime()*1e3;if(!this.pausePathTracing&&this.enablePathTracing&&this.renderDelay<=c&&!this.isCompiling&&t.update(),t.alpha=t.material.backgroundAlpha!==1||!uo(i),e.alpha=t.alpha,this.renderToCanvas){const h=this._renderer,m=this.minSamples;if(c>=this.renderDelay&&this.samples>=this.minSamples&&(this.fadeDuration!==0?l.material.opacity=Math.min(l.material.opacity+o/this.fadeDuration,1):l.material.opacity=1),!this.enablePathTracing||this.samples<m||l.material.opacity<1){if(this.dynamicLowRes&&!this.isCompiling){e.samples<1&&(e.material=t.material,e.update());const p=l.material.opacity;l.material.opacity=1-l.material.opacity,l.material.map=e.target.texture,l.render(h),l.material.opacity=p}(!this.dynamicLowRes&&this.rasterizeScene||this.dynamicLowRes&&this.isCompiling)&&this.rasterizeSceneCallback(this.scene,this.camera)}this.enablePathTracing&&l.material.opacity>0&&(l.material.opacity<1&&(l.material.blending=this.dynamicLowRes?d.AdditiveBlending:d.NormalBlending),l.material.map=t.target.texture,this.renderToCanvasCallback(t.target,h,l),l.material.blending=d.NoBlending)}}reset(){this._queueReset=!0,this._pathTracer.samples=0}dispose(){this._renderQuad.dispose(),this._renderQuad.material.dispose(),this._pathTracer.dispose()}_updateScale(){if(this.synchronizeRenderSize){this._renderer.getDrawingBufferSize(Me);const e=Math.floor(this.renderScale*Me.x),t=Math.floor(this.renderScale*Me.y);if(this._pathTracer.getSize(Me),Me.x!==e||Me.y!==t){const i=this.lowResScale;this._pathTracer.setSize(e,t),this._lowResPathTracer.setSize(Math.floor(e*i),Math.floor(t*i))}}}}var Ne=Object.freeze({Linear:Object.freeze({None:function(n){return n},In:function(n){return n},Out:function(n){return n},InOut:function(n){return n}}),Quadratic:Object.freeze({In:function(n){return n*n},Out:function(n){return n*(2-n)},InOut:function(n){return(n*=2)<1?.5*n*n:-.5*(--n*(n-2)-1)}}),Cubic:Object.freeze({In:function(n){return n*n*n},Out:function(n){return--n*n*n+1},InOut:function(n){return(n*=2)<1?.5*n*n*n:.5*((n-=2)*n*n+2)}}),Quartic:Object.freeze({In:function(n){return n*n*n*n},Out:function(n){return 1- --n*n*n*n},InOut:function(n){return(n*=2)<1?.5*n*n*n*n:-.5*((n-=2)*n*n*n-2)}}),Quintic:Object.freeze({In:function(n){return n*n*n*n*n},Out:function(n){return--n*n*n*n*n+1},InOut:function(n){return(n*=2)<1?.5*n*n*n*n*n:.5*((n-=2)*n*n*n*n+2)}}),Sinusoidal:Object.freeze({In:function(n){return 1-Math.sin((1-n)*Math.PI/2)},Out:function(n){return Math.sin(n*Math.PI/2)},InOut:function(n){return .5*(1-Math.sin(Math.PI*(.5-n)))}}),Exponential:Object.freeze({In:function(n){return n===0?0:Math.pow(1024,n-1)},Out:function(n){return n===1?1:1-Math.pow(2,-10*n)},InOut:function(n){return n===0?0:n===1?1:(n*=2)<1?.5*Math.pow(1024,n-1):.5*(-Math.pow(2,-10*(n-1))+2)}}),Circular:Object.freeze({In:function(n){return 1-Math.sqrt(1-n*n)},Out:function(n){return Math.sqrt(1- --n*n)},InOut:function(n){return(n*=2)<1?-.5*(Math.sqrt(1-n*n)-1):.5*(Math.sqrt(1-(n-=2)*n)+1)}}),Elastic:Object.freeze({In:function(n){return n===0?0:n===1?1:-Math.pow(2,10*(n-1))*Math.sin((n-1.1)*5*Math.PI)},Out:function(n){return n===0?0:n===1?1:Math.pow(2,-10*n)*Math.sin((n-.1)*5*Math.PI)+1},InOut:function(n){return n===0?0:n===1?1:(n*=2,n<1?-.5*Math.pow(2,10*(n-1))*Math.sin((n-1.1)*5*Math.PI):.5*Math.pow(2,-10*(n-1))*Math.sin((n-1.1)*5*Math.PI)+1)}}),Back:Object.freeze({In:function(n){var e=1.70158;return n===1?1:n*n*((e+1)*n-e)},Out:function(n){var e=1.70158;return n===0?0:--n*n*((e+1)*n+e)+1},InOut:function(n){var e=2.5949095;return(n*=2)<1?.5*(n*n*((e+1)*n-e)):.5*((n-=2)*n*((e+1)*n+e)+2)}}),Bounce:Object.freeze({In:function(n){return 1-Ne.Bounce.Out(1-n)},Out:function(n){return n<1/2.75?7.5625*n*n:n<2/2.75?7.5625*(n-=1.5/2.75)*n+.75:n<2.5/2.75?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375},InOut:function(n){return n<.5?Ne.Bounce.In(n*2)*.5:Ne.Bounce.Out(n*2-1)*.5+.5}}),generatePow:function(n){return n===void 0&&(n=4),n=n<Number.EPSILON?Number.EPSILON:n,n=n>1e4?1e4:n,{In:function(e){return Math.pow(e,n)},Out:function(e){return 1-Math.pow(1-e,n)},InOut:function(e){return e<.5?Math.pow(e*2,n)/2:(1-Math.pow(2-e*2,n))/2+.5}}}}),Ue=function(){return performance.now()},Gs=function(){function n(){this._tweens={},this._tweensAddedDuringUpdate={}}return n.prototype.getAll=function(){var e=this;return Object.keys(this._tweens).map(function(t){return e._tweens[t]})},n.prototype.removeAll=function(){this._tweens={}},n.prototype.add=function(e){this._tweens[e.getId()]=e,this._tweensAddedDuringUpdate[e.getId()]=e},n.prototype.remove=function(e){delete this._tweens[e.getId()],delete this._tweensAddedDuringUpdate[e.getId()]},n.prototype.update=function(e,t){e===void 0&&(e=Ue()),t===void 0&&(t=!1);var i=Object.keys(this._tweens);if(i.length===0)return!1;for(;i.length>0;){this._tweensAddedDuringUpdate={};for(var r=0;r<i.length;r++){var l=this._tweens[i[r]],o=!t;l&&l.update(e,o)===!1&&!t&&delete this._tweens[i[r]]}i=Object.keys(this._tweensAddedDuringUpdate)}return!0},n}(),xe={Linear:function(n,e){var t=n.length-1,i=t*e,r=Math.floor(i),l=xe.Utils.Linear;return e<0?l(n[0],n[1],i):e>1?l(n[t],n[t-1],t-i):l(n[r],n[r+1>t?t:r+1],i-r)},Bezier:function(n,e){for(var t=0,i=n.length-1,r=Math.pow,l=xe.Utils.Bernstein,o=0;o<=i;o++)t+=r(1-e,i-o)*r(e,o)*n[o]*l(i,o);return t},CatmullRom:function(n,e){var t=n.length-1,i=t*e,r=Math.floor(i),l=xe.Utils.CatmullRom;return n[0]===n[t]?(e<0&&(r=Math.floor(i=t*(1+e))),l(n[(r-1+t)%t],n[r],n[(r+1)%t],n[(r+2)%t],i-r)):e<0?n[0]-(l(n[0],n[0],n[1],n[1],-i)-n[0]):e>1?n[t]-(l(n[t],n[t],n[t-1],n[t-1],i-t)-n[t]):l(n[r?r-1:0],n[r],n[t<r+1?t:r+1],n[t<r+2?t:r+2],i-r)},Utils:{Linear:function(n,e,t){return(e-n)*t+n},Bernstein:function(n,e){var t=xe.Utils.Factorial;return t(n)/t(e)/t(n-e)},Factorial:function(){var n=[1];return function(e){var t=1;if(n[e])return n[e];for(var i=e;i>1;i--)t*=i;return n[e]=t,t}}(),CatmullRom:function(n,e,t,i,r){var l=(t-n)*.5,o=(i-e)*.5,c=r*r,h=r*c;return(2*e-2*t+l+o)*h+(-3*e+3*t-2*l-o)*c+l*r+e}}},Fi=function(){function n(){}return n.nextId=function(){return n._nextId++},n._nextId=0,n}(),di=new Gs,zt=function(){function n(e,t){t===void 0&&(t=di),this._object=e,this._group=t,this._isPaused=!1,this._pauseStart=0,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._isDynamic=!1,this._initialRepeat=0,this._repeat=0,this._yoyo=!1,this._isPlaying=!1,this._reversed=!1,this._delayTime=0,this._startTime=0,this._easingFunction=Ne.Linear.None,this._interpolationFunction=xe.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._id=Fi.nextId(),this._isChainStopped=!1,this._propertiesAreSetUp=!1,this._goToEnd=!1}return n.prototype.getId=function(){return this._id},n.prototype.isPlaying=function(){return this._isPlaying},n.prototype.isPaused=function(){return this._isPaused},n.prototype.getDuration=function(){return this._duration},n.prototype.to=function(e,t){if(t===void 0&&(t=1e3),this._isPlaying)throw new Error("Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.");return this._valuesEnd=e,this._propertiesAreSetUp=!1,this._duration=t<0?0:t,this},n.prototype.duration=function(e){return e===void 0&&(e=1e3),this._duration=e<0?0:e,this},n.prototype.dynamic=function(e){return e===void 0&&(e=!1),this._isDynamic=e,this},n.prototype.start=function(e,t){if(e===void 0&&(e=Ue()),t===void 0&&(t=!1),this._isPlaying)return this;if(this._group&&this._group.add(this),this._repeat=this._initialRepeat,this._reversed){this._reversed=!1;for(var i in this._valuesStartRepeat)this._swapEndStartRepeatValues(i),this._valuesStart[i]=this._valuesStartRepeat[i]}if(this._isPlaying=!0,this._isPaused=!1,this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._isChainStopped=!1,this._startTime=e,this._startTime+=this._delayTime,!this._propertiesAreSetUp||t){if(this._propertiesAreSetUp=!0,!this._isDynamic){var r={};for(var l in this._valuesEnd)r[l]=this._valuesEnd[l];this._valuesEnd=r}this._setupProperties(this._object,this._valuesStart,this._valuesEnd,this._valuesStartRepeat,t)}return this},n.prototype.startFromCurrentValues=function(e){return this.start(e,!0)},n.prototype._setupProperties=function(e,t,i,r,l){for(var o in i){var c=e[o],h=Array.isArray(c),m=h?"array":typeof c,p=!h&&Array.isArray(i[o]);if(!(m==="undefined"||m==="function")){if(p){var s=i[o];if(s.length===0)continue;for(var a=[c],u=0,g=s.length;u<g;u+=1){var _=this._handleRelativeValue(c,s[u]);if(isNaN(_)){p=!1,console.warn("Found invalid interpolation list. Skipping.");break}a.push(_)}p&&(i[o]=a)}if((m==="object"||h)&&c&&!p){t[o]=h?[]:{};var f=c;for(var v in f)t[o][v]=f[v];r[o]=h?[]:{};var s=i[o];if(!this._isDynamic){var y={};for(var v in s)y[v]=s[v];i[o]=s=y}this._setupProperties(f,t[o],s,r[o],l)}else(typeof t[o]>"u"||l)&&(t[o]=c),h||(t[o]*=1),p?r[o]=i[o].slice().reverse():r[o]=t[o]||0}}},n.prototype.stop=function(){return this._isChainStopped||(this._isChainStopped=!0,this.stopChainedTweens()),this._isPlaying?(this._group&&this._group.remove(this),this._isPlaying=!1,this._isPaused=!1,this._onStopCallback&&this._onStopCallback(this._object),this):this},n.prototype.end=function(){return this._goToEnd=!0,this.update(1/0),this},n.prototype.pause=function(e){return e===void 0&&(e=Ue()),this._isPaused||!this._isPlaying?this:(this._isPaused=!0,this._pauseStart=e,this._group&&this._group.remove(this),this)},n.prototype.resume=function(e){return e===void 0&&(e=Ue()),!this._isPaused||!this._isPlaying?this:(this._isPaused=!1,this._startTime+=e-this._pauseStart,this._pauseStart=0,this._group&&this._group.add(this),this)},n.prototype.stopChainedTweens=function(){for(var e=0,t=this._chainedTweens.length;e<t;e++)this._chainedTweens[e].stop();return this},n.prototype.group=function(e){return e===void 0&&(e=di),this._group=e,this},n.prototype.delay=function(e){return e===void 0&&(e=0),this._delayTime=e,this},n.prototype.repeat=function(e){return e===void 0&&(e=0),this._initialRepeat=e,this._repeat=e,this},n.prototype.repeatDelay=function(e){return this._repeatDelayTime=e,this},n.prototype.yoyo=function(e){return e===void 0&&(e=!1),this._yoyo=e,this},n.prototype.easing=function(e){return e===void 0&&(e=Ne.Linear.None),this._easingFunction=e,this},n.prototype.interpolation=function(e){return e===void 0&&(e=xe.Linear),this._interpolationFunction=e,this},n.prototype.chain=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return this._chainedTweens=e,this},n.prototype.onStart=function(e){return this._onStartCallback=e,this},n.prototype.onEveryStart=function(e){return this._onEveryStartCallback=e,this},n.prototype.onUpdate=function(e){return this._onUpdateCallback=e,this},n.prototype.onRepeat=function(e){return this._onRepeatCallback=e,this},n.prototype.onComplete=function(e){return this._onCompleteCallback=e,this},n.prototype.onStop=function(e){return this._onStopCallback=e,this},n.prototype.update=function(e,t){var i=this,r;if(e===void 0&&(e=Ue()),t===void 0&&(t=!0),this._isPaused)return!0;var l,o=this._startTime+this._duration;if(!this._goToEnd&&!this._isPlaying){if(e>o)return!1;t&&this.start(e,!0)}if(this._goToEnd=!1,e<this._startTime)return!0;this._onStartCallbackFired===!1&&(this._onStartCallback&&this._onStartCallback(this._object),this._onStartCallbackFired=!0),this._onEveryStartCallbackFired===!1&&(this._onEveryStartCallback&&this._onEveryStartCallback(this._object),this._onEveryStartCallbackFired=!0);var c=e-this._startTime,h=this._duration+((r=this._repeatDelayTime)!==null&&r!==void 0?r:this._delayTime),m=this._duration+this._repeat*h,p=function(){if(i._duration===0||c>m)return 1;var f=Math.trunc(c/h),v=c-f*h,y=Math.min(v/i._duration,1);return y===0&&c===i._duration?1:y},s=p(),a=this._easingFunction(s);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,a),this._onUpdateCallback&&this._onUpdateCallback(this._object,s),this._duration===0||c>=this._duration)if(this._repeat>0){var u=Math.min(Math.trunc((c-this._duration)/h)+1,this._repeat);isFinite(this._repeat)&&(this._repeat-=u);for(l in this._valuesStartRepeat)!this._yoyo&&typeof this._valuesEnd[l]=="string"&&(this._valuesStartRepeat[l]=this._valuesStartRepeat[l]+parseFloat(this._valuesEnd[l])),this._yoyo&&this._swapEndStartRepeatValues(l),this._valuesStart[l]=this._valuesStartRepeat[l];return this._yoyo&&(this._reversed=!this._reversed),this._startTime+=h*u,this._onRepeatCallback&&this._onRepeatCallback(this._object),this._onEveryStartCallbackFired=!1,!0}else{this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var g=0,_=this._chainedTweens.length;g<_;g++)this._chainedTweens[g].start(this._startTime+this._duration,!1);return this._isPlaying=!1,!1}return!0},n.prototype._updateProperties=function(e,t,i,r){for(var l in i)if(t[l]!==void 0){var o=t[l]||0,c=i[l],h=Array.isArray(e[l]),m=Array.isArray(c),p=!h&&m;p?e[l]=this._interpolationFunction(c,r):typeof c=="object"&&c?this._updateProperties(e[l],o,c,r):(c=this._handleRelativeValue(o,c),typeof c=="number"&&(e[l]=o+(c-o)*r))}},n.prototype._handleRelativeValue=function(e,t){return typeof t!="string"?t:t.charAt(0)==="+"||t.charAt(0)==="-"?e+parseFloat(t):parseFloat(t)},n.prototype._swapEndStartRepeatValues=function(e){var t=this._valuesStartRepeat[e],i=this._valuesEnd[e];typeof i=="string"?this._valuesStartRepeat[e]=this._valuesStartRepeat[e]+parseFloat(i):this._valuesStartRepeat[e]=this._valuesEnd[e],this._valuesEnd[e]=t},n}(),po="23.1.3",mo=Fi.nextId,re=di,go=re.getAll.bind(re),vo=re.removeAll.bind(re),_o=re.add.bind(re),yo=re.remove.bind(re),xo=re.update.bind(re),ie={Easing:Ne,Group:Gs,Interpolation:xe,now:Ue,Sequence:Fi,nextId:mo,Tween:zt,VERSION:po,getAll:go,removeAll:vo,add:_o,remove:yo,update:xo},Ze=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function wo(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var js={exports:{}};(function(n){var e=Object.prototype.hasOwnProperty,t="~";function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(t=!1));function r(h,m,p){this.fn=h,this.context=m,this.once=p||!1}function l(h,m,p,s,a){if(typeof p!="function")throw new TypeError("The listener must be a function");var u=new r(p,s||h,a),g=t?t+m:m;return h._events[g]?h._events[g].fn?h._events[g]=[h._events[g],u]:h._events[g].push(u):(h._events[g]=u,h._eventsCount++),h}function o(h,m){--h._eventsCount===0?h._events=new i:delete h._events[m]}function c(){this._events=new i,this._eventsCount=0}c.prototype.eventNames=function(){var m=[],p,s;if(this._eventsCount===0)return m;for(s in p=this._events)e.call(p,s)&&m.push(t?s.slice(1):s);return Object.getOwnPropertySymbols?m.concat(Object.getOwnPropertySymbols(p)):m},c.prototype.listeners=function(m){var p=t?t+m:m,s=this._events[p];if(!s)return[];if(s.fn)return[s.fn];for(var a=0,u=s.length,g=new Array(u);a<u;a++)g[a]=s[a].fn;return g},c.prototype.listenerCount=function(m){var p=t?t+m:m,s=this._events[p];return s?s.fn?1:s.length:0},c.prototype.emit=function(m,p,s,a,u,g){var _=t?t+m:m;if(!this._events[_])return!1;var f=this._events[_],v=arguments.length,y,x;if(f.fn){switch(f.once&&this.removeListener(m,f.fn,void 0,!0),v){case 1:return f.fn.call(f.context),!0;case 2:return f.fn.call(f.context,p),!0;case 3:return f.fn.call(f.context,p,s),!0;case 4:return f.fn.call(f.context,p,s,a),!0;case 5:return f.fn.call(f.context,p,s,a,u),!0;case 6:return f.fn.call(f.context,p,s,a,u,g),!0}for(x=1,y=new Array(v-1);x<v;x++)y[x-1]=arguments[x];f.fn.apply(f.context,y)}else{var w=f.length,b;for(x=0;x<w;x++)switch(f[x].once&&this.removeListener(m,f[x].fn,void 0,!0),v){case 1:f[x].fn.call(f[x].context);break;case 2:f[x].fn.call(f[x].context,p);break;case 3:f[x].fn.call(f[x].context,p,s);break;case 4:f[x].fn.call(f[x].context,p,s,a);break;default:if(!y)for(b=1,y=new Array(v-1);b<v;b++)y[b-1]=arguments[b];f[x].fn.apply(f[x].context,y)}}return!0},c.prototype.on=function(m,p,s){return l(this,m,p,s,!1)},c.prototype.once=function(m,p,s){return l(this,m,p,s,!0)},c.prototype.removeListener=function(m,p,s,a){var u=t?t+m:m;if(!this._events[u])return this;if(!p)return o(this,u),this;var g=this._events[u];if(g.fn)g.fn===p&&(!a||g.once)&&(!s||g.context===s)&&o(this,u);else{for(var _=0,f=[],v=g.length;_<v;_++)(g[_].fn!==p||a&&!g[_].once||s&&g[_].context!==s)&&f.push(g[_]);f.length?this._events[u]=f.length===1?f[0]:f:o(this,u)}return this},c.prototype.removeAllListeners=function(m){var p;return m?(p=t?t+m:m,this._events[p]&&o(this,p)):(this._events=new i,this._eventsCount=0),this},c.prototype.off=c.prototype.removeListener,c.prototype.addListener=c.prototype.on,c.prefixed=t,c.EventEmitter=c,n.exports=c})(js);var bo=js.exports;const je=wo(bo);var at=function(){var n=0,e=document.createElement("div");e.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",e.addEventListener("click",function(s){s.preventDefault(),i(++n%e.children.length)},!1);function t(s){return e.appendChild(s.dom),s}function i(s){for(var a=0;a<e.children.length;a++)e.children[a].style.display=a===s?"block":"none";n=s}var r=(performance||Date).now(),l=r,o=0,c=t(new at.Panel("FPS","#0ff","#002")),h=t(new at.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var m=t(new at.Panel("MB","#f08","#201"));i(0);var p=0;return{REVISION:16,dom:e,fps:function(){return p&&parseInt(p.toFixed(0))},addPanel:t,showPanel:i,begin:function(){r=(performance||Date).now()},end:function(){o++;var s=(performance||Date).now();if(h.update(s-r,200),s>=l+1e3&&(p=o*1e3/(s-l),c.update(p,100),l=s,o=0,m)){var a=performance.memory;m.update(a.usedJSHeapSize/1048576,a.jsHeapSizeLimit/1048576)}return s},update:function(){r=this.end()},domElement:e,setMode:i}};at.Panel=function(n,e,t){var i=1/0,r=0,l=Math.round,o=l(window.devicePixelRatio||1),c=80*o,h=48*o,m=3*o,p=2*o,s=3*o,a=15*o,u=74*o,g=30*o,_=document.createElement("canvas");_.width=c,_.height=h,_.style.cssText="width:80px;height:48px";var f=_.getContext("2d");return f.font="bold "+9*o+"px Helvetica,Arial,sans-serif",f.textBaseline="top",f.fillStyle=t,f.fillRect(0,0,c,h),f.fillStyle=e,f.fillText(n,m,p),f.fillRect(s,a,u,g),f.fillStyle=t,f.globalAlpha=.9,f.fillRect(s,a,u,g),{dom:_,update:function(v,y){i=Math.min(i,v),r=Math.max(r,v),f.fillStyle=t,f.globalAlpha=1,f.fillRect(0,0,c,a),f.fillStyle=e,f.fillText(l(v)+" "+n+" ("+l(i)+"-"+l(r)+")",m,p),f.drawImage(_,s+o,a,u-o,g,s,a,u-o,g),f.fillRect(s+u-o,a,o,g),f.fillStyle=t,f.globalAlpha=.9,f.fillRect(s+u-o,a,o,l((1-v/y)*g))}}};function Ao(n,e){const t=URL.createObjectURL(n),i=document.createElement("a");i.href=t,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(t)}function qs(n){return n.length===0?0:n.reduce((t,i)=>t+i,0)/n.length}function pi(n,e){const t=new Blob([n],{type:e});return URL.createObjectURL(t)}function Ys(){return/Mac|iPod|iPhone|iPad/.test(navigator==null?void 0:navigator.platform)||/Mac OS|iOS/.test(navigator==null?void 0:navigator.userAgent)}function mi(n){let e=document.createElement("canvas");const t=e.getContext("2d");return e.width=n.width,e.height=n.height,t?(t.drawImage(n,0,0),e.toDataURL("image/png",.75)):void 0}function To(n,e=43){const t=n*Math.PI/180;return e/(2*Math.tan(t/2))}var Qs={};/*!
|
|
3681
|
+
}`}),this.depthWrite=!1,this.depthTest=!1}}class rr{constructor(e){this._renderer=e,this._quad=new dt.FullScreenQuad(new Pa)}generate(e,t=null,i=null){if(!e.isCubeTexture)throw new Error("CubeToEquirectMaterial: Source can only be cube textures.");const s=e.images[0],a=this._renderer,o=this._quad;t===null&&(t=4*s.height),i===null&&(i=2*s.height);const c=new f.WebGLRenderTarget(t,i,{type:f.FloatType,colorSpace:s.colorSpace}),u=s.height,m=Math.log2(u)-2,d=1/u,n=1/(3*Math.max(Math.pow(2,m),7*16));o.material.defines.CUBEUV_MAX_MIP=`${m}.0`,o.material.defines.CUBEUV_TEXEL_WIDTH=n,o.material.defines.CUBEUV_TEXEL_HEIGHT=d,o.material.uniforms.envMap.value=e,o.material.uniforms.flipEnvMap.value=e.isRenderTargetTexture?1:-1,o.material.needsUpdate=!0;const l=a.getRenderTarget(),h=a.autoClear;a.autoClear=!0,a.setRenderTarget(c),o.render(a),a.setRenderTarget(l),a.autoClear=h;const g=new Uint16Array(t*i*4),_=new Float32Array(t*i*4);a.readRenderTargetPixels(c,0,0,t,i,_),c.dispose();for(let v=0,y=_.length;v<y;v++)g[v]=f.DataUtils.toHalfFloat(_[v]);const p=new f.DataTexture(g,t,i,f.RGBAFormat,f.HalfFloatType);return p.minFilter=f.LinearMipMapLinearFilter,p.magFilter=f.LinearFilter,p.wrapS=f.RepeatWrapping,p.wrapT=f.RepeatWrapping,p.mapping=f.EquirectangularReflectionMapping,p.needsUpdate=!0,p}dispose(){this._quad.dispose()}}function Ra(r){return r.extensions.get("EXT_float_blend")}const $e=new f.Vector2;class Ia{get multipleImportanceSampling(){return!!this._pathTracer.material.defines.FEATURE_MIS}set multipleImportanceSampling(e){this._pathTracer.material.setDefine("FEATURE_MIS",e?1:0)}get transmissiveBounces(){return this._pathTracer.material.transmissiveBounces}set transmissiveBounces(e){this._pathTracer.material.transmissiveBounces=e}get bounces(){return this._pathTracer.material.bounces}set bounces(e){this._pathTracer.material.bounces=e}get filterGlossyFactor(){return this._pathTracer.material.filterGlossyFactor}set filterGlossyFactor(e){this._pathTracer.material.filterGlossyFactor=e}get samples(){return this._pathTracer.samples}get target(){return this._pathTracer.target}get tiles(){return this._pathTracer.tiles}get stableNoise(){return this._pathTracer.stableNoise}set stableNoise(e){this._pathTracer.stableNoise=e}get isCompiling(){return!!this._pathTracer.isCompiling}constructor(e){this._renderer=e,this._generator=new ho,this._pathTracer=new tr(e),this._queueReset=!1,this._clock=new f.Clock,this._compilePromise=null,this._lowResPathTracer=new tr(e),this._lowResPathTracer.tiles.set(1,1),this._quad=new dt.FullScreenQuad(new Ca({map:null,transparent:!0,blending:f.NoBlending,premultipliedAlpha:e.getContextAttributes().premultipliedAlpha})),this._materials=null,this._previousEnvironment=null,this._previousBackground=null,this._internalBackground=null,this.renderDelay=100,this.minSamples=5,this.fadeDuration=500,this.enablePathTracing=!0,this.pausePathTracing=!1,this.dynamicLowRes=!1,this.lowResScale=.25,this.renderScale=1,this.synchronizeRenderSize=!0,this.rasterizeScene=!0,this.renderToCanvas=!0,this.textureSize=new f.Vector2(1024,1024),this.rasterizeSceneCallback=(t,i)=>{this._renderer.render(t,i)},this.renderToCanvasCallback=(t,i,s)=>{const a=i.autoClear;i.autoClear=!1,s.render(i),i.autoClear=a},this.setScene(new f.Scene,new f.PerspectiveCamera)}setBVHWorker(e){this._generator.setBVHWorker(e)}setScene(e,t,i={}){e.updateMatrixWorld(!0),t.updateMatrixWorld();const s=this._generator;if(s.setObjects(e),this._buildAsync)return s.generateAsync(i.onProgress).then(a=>this._updateFromResults(e,t,a));{const a=s.generate();return this._updateFromResults(e,t,a)}}setSceneAsync(...e){this._buildAsync=!0;const t=this.setScene(...e);return this._buildAsync=!1,t}setCamera(e){this.camera=e,this.updateCamera()}updateCamera(){const e=this.camera;e.updateMatrixWorld(),this._pathTracer.setCamera(e),this._lowResPathTracer.setCamera(e),this.reset()}updateMaterials(){const e=this._pathTracer.material,t=this._renderer,i=this._materials,s=this.textureSize,a=Fo(i);e.textures.setTextures(t,a,s.x,s.y),e.materials.updateFrom(i,a),this.reset()}updateLights(){const e=this.scene,t=this._renderer,i=this._pathTracer.material,s=Bo(e),a=Lo(s);i.lights.updateFrom(s,a),i.iesProfiles.setTextures(t,a),this.reset()}updateEnvironment(){const e=this.scene,t=this._pathTracer.material;if(this._internalBackground&&(this._internalBackground.dispose(),this._internalBackground=null),t.backgroundBlur=e.backgroundBlurriness,t.backgroundIntensity=e.backgroundIntensity??1,t.backgroundRotation.makeRotationFromEuler(e.backgroundRotation).invert(),e.background===null)t.backgroundMap=null,t.backgroundAlpha=0;else if(e.background.isColor){this._colorBackground=this._colorBackground||new Ma(16);const i=this._colorBackground;i.topColor.equals(e.background)||(i.topColor.set(e.background),i.bottomColor.set(e.background),i.update()),t.backgroundMap=i,t.backgroundAlpha=1}else if(e.background.isCubeTexture){if(e.background!==this._previousBackground){const i=new rr(this._renderer).generate(e.background);this._internalBackground=i,t.backgroundMap=i,t.backgroundAlpha=1}}else t.backgroundMap=e.background,t.backgroundAlpha=1;if(t.environmentIntensity=e.environmentIntensity??1,t.environmentRotation.makeRotationFromEuler(e.environmentRotation).invert(),this._previousEnvironment!==e.environment)if(e.environment!==null)if(e.environment.isCubeTexture){const i=new rr(this._renderer).generate(e.environment);t.envMapInfo.updateFrom(i)}else t.envMapInfo.updateFrom(e.environment);else t.environmentIntensity=0;this._previousEnvironment=e.environment,this._previousBackground=e.background,this.reset()}_updateFromResults(e,t,i){const{materials:s,geometry:a,bvh:o,bvhChanged:c}=i;this._materials=s;const m=this._pathTracer.material;return c&&(m.bvh.updateFrom(o),m.attributesArray.updateFrom(a.attributes.normal,a.attributes.tangent,a.attributes.uv,a.attributes.color),m.materialIndexAttribute.updateFrom(a.attributes.materialIndex)),this._previousScene=e,this.scene=e,this.camera=t,this.updateCamera(),this.updateMaterials(),this.updateEnvironment(),this.updateLights(),i}renderSample(){const e=this._lowResPathTracer,t=this._pathTracer,i=this._renderer,s=this._clock,a=this._quad;this._updateScale(),this._queueReset&&(t.reset(),e.reset(),this._queueReset=!1,a.material.opacity=0,s.start());const o=s.getDelta()*1e3,c=s.getElapsedTime()*1e3;if(!this.pausePathTracing&&this.enablePathTracing&&this.renderDelay<=c&&!this.isCompiling&&t.update(),t.alpha=t.material.backgroundAlpha!==1||!Ra(i),e.alpha=t.alpha,this.renderToCanvas){const u=this._renderer,m=this.minSamples;if(c>=this.renderDelay&&this.samples>=this.minSamples&&(this.fadeDuration!==0?a.material.opacity=Math.min(a.material.opacity+o/this.fadeDuration,1):a.material.opacity=1),!this.enablePathTracing||this.samples<m||a.material.opacity<1){if(this.dynamicLowRes&&!this.isCompiling){e.samples<1&&(e.material=t.material,e.update());const d=a.material.opacity;a.material.opacity=1-a.material.opacity,a.material.map=e.target.texture,a.render(u),a.material.opacity=d}(!this.dynamicLowRes&&this.rasterizeScene||this.dynamicLowRes&&this.isCompiling)&&this.rasterizeSceneCallback(this.scene,this.camera)}this.enablePathTracing&&a.material.opacity>0&&(a.material.opacity<1&&(a.material.blending=this.dynamicLowRes?f.AdditiveBlending:f.NormalBlending),a.material.map=t.target.texture,this.renderToCanvasCallback(t.target,u,a),a.material.blending=f.NoBlending)}}reset(){this._queueReset=!0,this._pathTracer.samples=0}dispose(){this._renderQuad.dispose(),this._renderQuad.material.dispose(),this._pathTracer.dispose()}_updateScale(){if(this.synchronizeRenderSize){this._renderer.getDrawingBufferSize($e);const e=Math.floor(this.renderScale*$e.x),t=Math.floor(this.renderScale*$e.y);if(this._pathTracer.getSize($e),$e.x!==e||$e.y!==t){const i=this.lowResScale;this._pathTracer.setSize(e,t),this._lowResPathTracer.setSize(Math.floor(e*i),Math.floor(t*i))}}}}const Ea="";globalThis.GLTF_PROGRESSIVE_VERSION=Ea;console.debug("[gltf-progressive] version -");let he="https://www.gstatic.com/draco/versioned/decoders/1.5.7/",bi="https://cdn.needle.tools/static/three/0.179.1/basis2/";const Da=he,La=bi,Nr=new URL(he+"draco_decoder.js");Nr.searchParams.append("range","true");fetch(Nr,{method:"GET",headers:{Range:"bytes=0-1"}}).catch(r=>{console.debug(`Failed to fetch remote Draco decoder from ${he} (offline: ${typeof navigator<"u"?navigator.onLine:"unknown"})`),he===Da&&Ba("./include/draco/"),bi===La&&ka("./include/ktx2/")}).finally(()=>{Gr()});const Fa=()=>({dracoDecoderPath:he,ktx2TranscoderPath:bi});function Ba(r){he=r,te&&te[es]!=he?(console.debug("Updating Draco decoder path to "+r),te[es]=he,te.setDecoderPath(he),te.preload()):console.debug("Setting Draco decoder path to "+r)}function ka(r){bi=r}function As(r){return Gr(),{dracoLoader:te,meshoptDecoder:mi}}function Wr(r){r.dracoLoader||r.setDRACOLoader(te),r.meshoptDecoder||r.setMeshoptDecoder(mi)}const es=Symbol("dracoDecoderPath");let te,mi;function Gr(){te||(te=new On.DRACOLoader,te[es]=he,te.setDecoderPath(he),te.setDecoderConfig({type:"js"}),te.preload()),mi||(mi=kn.MeshoptDecoder)}const ts=new WeakMap;function qr(r,e){let t=ts.get(r);t?t=Object.assign(t,e):t=e,ts.set(r,t)}const Bi=ys.GLTFLoader.prototype.load;function Oa(...r){const e=ts.get(this);let t=r[0];const i=new URL(t,window.location.href);if(i.hostname.endsWith("needle.tools")){const a=(e==null?void 0:e.progressive)!==void 0?e.progressive:!0,o=e!=null&&e.usecase?e.usecase:"default";a?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${o}`:this.requestHeader.Accept=`*/*;usecase=${o}`,t=i.toString()}return r[0]=t,Bi==null?void 0:Bi.call(this,...r)}ys.GLTFLoader.prototype.load=Oa;Ne("debugprogressive");function Ne(r){if(typeof window>"u")return!1;const t=new URL(window.location.href).searchParams.get(r);return t==null||t==="0"||t==="false"?!1:t===""?!0:t}function za(r,e){if(e===void 0||r===void 0||e.startsWith("./")||e.startsWith("http")||e.startsWith("data:")||e.startsWith("blob:"))return e;const t=r.lastIndexOf("/");if(t>=0){const i=r.substring(0,t+1);for(;i.endsWith("/")&&e.startsWith("/");)e=e.substring(1);return i+e}return e}function jr(){return wt!==void 0||(wt=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),Ne("debugprogressive")&&console.log("[glTF Progressive]: isMobileDevice",wt)),wt}let wt;function nr(){if(typeof window>"u")return!1;const r=new URL(window.location.href),e=r.hostname==="localhost"||/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(r.hostname);return r.hostname==="127.0.0.1"||e}class Va{constructor(e=100,t={}){D(this,"_running",new Map);D(this,"_queue",[]);D(this,"debug",!1);D(this,"tick",()=>{this.internalUpdate(),setTimeout(this.tick,10)});this.maxConcurrent=e,this.debug=t.debug??!1,window.requestAnimationFrame(this.tick)}slot(e){return this.debug&&console.debug(`[PromiseQueue]: Requesting slot for key ${e}, running: ${this._running.size}, waiting: ${this._queue.length}`),new Promise(t=>{this._queue.push({key:e,resolve:t})})}add(e,t){this._running.has(e)||(this._running.set(e,t),t.finally(()=>{this._running.delete(e),this.debug&&console.debug(`[PromiseQueue]: Promise finished now running: ${this._running.size}, waiting: ${this._queue.length}. (finished ${e})`)}),this.debug&&console.debug(`[PromiseQueue]: Added new promise, now running: ${this._running.size}, waiting: ${this._queue.length}. (added ${e})`))}internalUpdate(){const e=this.maxConcurrent-this._running.size;for(let t=0;t<e&&this._queue.length>0;t++){this.debug&&console.debug(`[PromiseQueue]: Running ${this._running.size} promises, waiting for ${this._queue.length} more.`);const{key:i,resolve:s}=this._queue.shift();s({use:a=>this.add(i,a)})}}}const Ua=typeof window>"u"&&typeof document>"u",is=Symbol("needle:raycast-mesh");function Ht(r){return(r==null?void 0:r[is])instanceof f.BufferGeometry?r[is]:null}function Ha(r,e){if((r.type==="Mesh"||r.type==="SkinnedMesh")&&!Ht(r)){const i=Wa(e);i.userData={isRaycastMesh:!0},r[is]=i}}function Na(r=!0){if(r){if(bt)return;const e=bt=f.Mesh.prototype.raycast;f.Mesh.prototype.raycast=function(t,i){const s=this,a=Ht(s);let o;a&&s.isMesh&&(o=s.geometry,s.geometry=a),e.call(this,t,i),o&&(s.geometry=o)}}else{if(!bt)return;f.Mesh.prototype.raycast=bt,bt=null}}let bt=null;function Wa(r){const e=new f.BufferGeometry;for(const t in r.attributes)e.setAttribute(t,r.getAttribute(t));return e.setIndex(r.getIndex()),e}const Re=new Array,z=Ne("debugprogressive");let kt,Ue=-1;if(z){let r=function(){Ue+=1,Ue>=e&&(Ue=-1),console.log(`Toggle LOD level [${Ue}]`)},e=6;window.addEventListener("keyup",t=>{t.key==="p"&&r(),t.key==="w"&&(kt=!kt,console.log(`Toggle wireframe [${kt}]`));const i=parseInt(t.key);!isNaN(i)&&i>=0&&(Ue=i,console.log(`Set LOD level to [${Ue}]`))})}function Yr(r){if(z&&kt!==void 0)if(Array.isArray(r))for(const e of r)Yr(e);else r&&"wireframe"in r&&(r.wireframe=kt===!0)}const At=new Array;let Ga=0;const qa=jr()?2:10;function ja(r){if(At.length<qa){const i=At.length;z&&console.warn(`[Worker] Creating new worker #${i}`);const s=Ts.createWorker(r||{});return At.push(s),s}const e=Ga++%At.length;return At[e]}class Ts{constructor(e,t){D(this,"_running",[]);D(this,"_webglRenderer",null);D(this,"_debug",!1);this.worker=e,this._debug=t.debug??!1,e.onmessage=i=>{const s=i.data;switch(this._debug&&console.log("[Worker] EVENT",s),s.type){case"loaded-gltf":for(const a of this._running)if(a.url===s.result.url){Ya(s.result),a.resolve(s.result);const o=a.url;o.startsWith("blob:")&&URL.revokeObjectURL(o)}}},e.onerror=i=>{console.error("[Worker] Error in gltf-progressive worker:",i)},e.postMessage({type:"init"})}static async createWorker(e){const t=new Worker(new URL(""+(typeof document>"u"?require("url").pathToFileURL(__dirname+"/assets/loader.worker-fysOIq2s.js").href:new URL("assets/loader.worker-fysOIq2s.js",document.currentScript&&document.currentScript.src||document.baseURI).href),typeof document>"u"?require("url").pathToFileURL(__filename).href:pt&&pt.src||new URL("shop-components.cjs",document.baseURI).href),{type:"module"});return new Ts(t,e)}async load(e,t){const i=Fa();let s=t==null?void 0:t.renderer;s||(this._webglRenderer??(this._webglRenderer=(async()=>{const{WebGLRenderer:m}=await import("three");return new m})()),s=await this._webglRenderer);const c=As().ktx2Loader.workerConfig;e instanceof URL?e=e.toString():e.startsWith("file:")?e=URL.createObjectURL(new Blob([e])):!e.startsWith("blob:")&&!e.startsWith("http:")&&!e.startsWith("https:")&&(e=new URL(e,window.location.href).toString());const u={type:"load",url:e,dracoDecoderPath:i.dracoDecoderPath,ktx2TranscoderPath:i.ktx2TranscoderPath,ktx2LoaderConfig:c};return this._debug&&console.debug("[Worker] Sending load request",u),this.worker.postMessage(u),new Promise(m=>{this._running.push({url:e.toString(),resolve:m})})}}function Ya(r){var e,t,i,s,a,o,c,u,m,d,n,l,h,g,_,p;for(const v of r.geometries){const y=v.geometry,x=new f.BufferGeometry;if(x.name=y.name||"",y.index){const w=y.index;x.setIndex(ki(w))}for(const w in y.attributes){const b=y.attributes[w],T=ki(b);x.setAttribute(w,T)}if(y.morphAttributes)for(const w in y.morphAttributes){const T=y.morphAttributes[w].map(M=>ki(M));x.morphAttributes[w]=T}if(x.morphTargetsRelative=y.morphTargetsRelative??!1,x.boundingBox=new f.Box3,x.boundingBox.min=new f.Vector3((e=y.boundingBox)==null?void 0:e.min.x,(t=y.boundingBox)==null?void 0:t.min.y,(i=y.boundingBox)==null?void 0:i.min.z),x.boundingBox.max=new f.Vector3((s=y.boundingBox)==null?void 0:s.max.x,(a=y.boundingBox)==null?void 0:a.max.y,(o=y.boundingBox)==null?void 0:o.max.z),x.boundingSphere=new f.Sphere(new f.Vector3((c=y.boundingSphere)==null?void 0:c.center.x,(u=y.boundingSphere)==null?void 0:u.center.y,(m=y.boundingSphere)==null?void 0:m.center.z),(d=y.boundingSphere)==null?void 0:d.radius),y.groups)for(const w of y.groups)x.addGroup(w.start,w.count,w.materialIndex);y.userData&&(x.userData=y.userData),v.geometry=x}for(const v of r.textures){const y=v.texture;let x=null;if(y.isCompressedTexture){const w=y.mipmaps,b=((n=y.image)==null?void 0:n.width)||((h=(l=y.source)==null?void 0:l.data)==null?void 0:h.width)||-1,T=((g=y.image)==null?void 0:g.height)||((p=(_=y.source)==null?void 0:_.data)==null?void 0:p.height)||-1;x=new f.CompressedTexture(w,b,T,y.format,y.type,y.mapping,y.wrapS,y.wrapT,y.magFilter,y.minFilter,y.anisotropy,y.colorSpace)}else x=new f.Texture(y.image,y.mapping,y.wrapS,y.wrapT,y.magFilter,y.minFilter,y.format,y.type,y.anisotropy,y.colorSpace),x.mipmaps=y.mipmaps,x.channel=y.channel,x.source.data=y.source.data,x.flipY=y.flipY,x.premultiplyAlpha=y.premultiplyAlpha,x.unpackAlignment=y.unpackAlignment,x.matrix=new f.Matrix3(...y.matrix.elements);if(!x){console.error("[Worker] Failed to create new texture from received data. Texture is not a CompressedTexture or Texture.");continue}v.texture=x}return r}function ki(r){let e=r;if("isInterleavedBufferAttribute"in r&&r.isInterleavedBufferAttribute){const t=r.data,i=t.array,s=new f.InterleavedBuffer(i,t.stride);e=new f.InterleavedBufferAttribute(s,r.itemSize,i.byteOffset,r.normalized),e.offset=r.offset}else"isBufferAttribute"in r&&r.isBufferAttribute&&(e=new f.BufferAttribute(r.array,r.itemSize,r.normalized),e.usage=r.usage,e.gpuType=r.gpuType,e.updateRanges=r.updateRanges);return e}const $a=Ne("gltf-progressive-worker"),Qa=Ne("gltf-progressive-reduce-mipmaps"),Oi=Symbol("needle-progressive-texture"),xe="NEEDLE_progressive",O=class O{constructor(e){D(this,"parser");D(this,"url");D(this,"_isLoadingMesh");D(this,"loadMesh",e=>{var i,s;if(this._isLoadingMesh)return null;const t=(s=(i=this.parser.json.meshes[e])==null?void 0:i.extensions)==null?void 0:s[xe];return t?(this._isLoadingMesh=!0,this.parser.getDependency("mesh",e).then(a=>{var o;return this._isLoadingMesh=!1,a&&O.registerMesh(this.url,t.guid,a,(o=t.lods)==null?void 0:o.length,0,t),a})):null});const t=e.options.path;z&&console.log("Progressive extension registered for",t),this.parser=e,this.url=t}get name(){return xe}static getMeshLODExtension(e){const t=this.getAssignedLODInformation(e);return t!=null&&t.key?this.lodInfos.get(t.key):null}static getPrimitiveIndex(e){var i;const t=(i=this.getAssignedLODInformation(e))==null?void 0:i.index;return t??-1}static getMaterialMinMaxLODsCount(e,t){const i=this,s="LODS:minmax",a=e[s];if(a!=null)return a;if(t||(t={min_count:1/0,max_count:0,lods:[]}),Array.isArray(e)){for(const c of e)this.getMaterialMinMaxLODsCount(c,t);return e[s]=t,t}if(z==="verbose"&&console.log("getMaterialMinMaxLODsCount",e),e.type==="ShaderMaterial"||e.type==="RawShaderMaterial"){const c=e;for(const u of Object.keys(c.uniforms)){const m=c.uniforms[u].value;(m==null?void 0:m.isTexture)===!0&&o(m,t)}}else if(e.isMaterial)for(const c of Object.keys(e)){const u=e[c];(u==null?void 0:u.isTexture)===!0&&o(u,t)}else z&&console.warn(`[getMaterialMinMaxLODsCount] Unsupported material type: ${e.type}`);return e[s]=t,t;function o(c,u){const m=i.getAssignedLODInformation(c);if(m){const d=i.lodInfos.get(m.key);if(d&&d.lods){u.min_count=Math.min(u.min_count,d.lods.length),u.max_count=Math.max(u.max_count,d.lods.length);for(let n=0;n<d.lods.length;n++){const l=d.lods[n];l.width&&(u.lods[n]=u.lods[n]||{min_height:1/0,max_height:0},u.lods[n].min_height=Math.min(u.lods[n].min_height,l.height),u.lods[n].max_height=Math.max(u.lods[n].max_height,l.height))}}}}}static hasLODLevelAvailable(e,t){var a;if(Array.isArray(e)){for(const o of e)if(this.hasLODLevelAvailable(o,t))return!0;return!1}if(e.isMaterial===!0){for(const o of Object.keys(e)){const c=e[o];if(c&&c.isTexture&&this.hasLODLevelAvailable(c,t))return!0}return!1}else if(e.isGroup===!0){for(const o of e.children)if(o.isMesh===!0&&this.hasLODLevelAvailable(o,t))return!0}let i,s;if(e.isMesh?i=e.geometry:(e.isBufferGeometry||e.isTexture)&&(i=e),i&&(a=i==null?void 0:i.userData)!=null&&a.LODS){const o=i.userData.LODS;if(s=this.lodInfos.get(o.key),t===void 0)return s!=null;if(s)return Array.isArray(s.lods)?t<s.lods.length:t===0}return!1}static assignMeshLOD(e,t){var i;if(!e)return Promise.resolve(null);if(e instanceof f.Mesh||e.isMesh===!0){const s=e.geometry,a=this.getAssignedLODInformation(s);if(!a)return Promise.resolve(null);for(const o of Re)(i=o.onBeforeGetLODMesh)==null||i.call(o,e,t);return e["LOD:requested level"]=t,O.getOrLoadLOD(s,t).then(o=>{if(Array.isArray(o)){const c=a.index||0;o=o[c]}return e["LOD:requested level"]===t&&(delete e["LOD:requested level"],o&&s!=o&&((o==null?void 0:o.isBufferGeometry)?e.geometry=o:z&&console.error("Invalid LOD geometry",o))),o}).catch(o=>(console.error("Error loading mesh LOD",e,o),null))}else z&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",e);return Promise.resolve(null)}static assignTextureLOD(e,t=0){if(!e)return Promise.resolve(null);if(e.isMesh===!0){const i=e;if(Array.isArray(i.material)){const s=new Array;for(const a of i.material){const o=this.assignTextureLOD(a,t);s.push(o)}return Promise.all(s).then(a=>{const o=new Array;for(const c of a)Array.isArray(c)&&o.push(...c);return o})}else return this.assignTextureLOD(i.material,t)}if(e.isMaterial===!0){const i=e,s=[],a=new Array;if(i.uniforms&&(i.isRawShaderMaterial||i.isShaderMaterial===!0)){const o=i;for(const c of Object.keys(o.uniforms)){const u=o.uniforms[c].value;if((u==null?void 0:u.isTexture)===!0){const m=this.assignTextureLODForSlot(u,t,i,c).then(d=>(d&&o.uniforms[c].value!=d&&(o.uniforms[c].value=d,o.uniformsNeedUpdate=!0),d));s.push(m),a.push(c)}}}else for(const o of Object.keys(i)){const c=i[o];if((c==null?void 0:c.isTexture)===!0){const u=this.assignTextureLODForSlot(c,t,i,o);s.push(u),a.push(o)}}return Promise.all(s).then(o=>{const c=new Array;for(let u=0;u<o.length;u++){const m=o[u],d=a[u];m&&m.isTexture===!0?c.push({material:i,slot:d,texture:m,level:t}):c.push({material:i,slot:d,texture:null,level:t})}return c})}if(e instanceof f.Texture||e.isTexture===!0){const i=e;return this.assignTextureLODForSlot(i,t,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(e,t,i,s){return(e==null?void 0:e.isTexture)!==!0?Promise.resolve(null):s==="glyphMap"?Promise.resolve(e):O.getOrLoadLOD(e,t).then(a=>{var o,c;if(Array.isArray(a))return console.warn("Progressive: Got an array of textures for a texture slot, this should not happen..."),null;if((a==null?void 0:a.isTexture)===!0){if(a!=e&&i&&s){const u=i[s];if(u&&!z){const m=this.getAssignedLODInformation(u);if(m&&(m==null?void 0:m.level)<t)return z==="verbose"&&console.warn("Assigned texture level is already higher: ",m.level,t,i,u,a),null}if(Qa&&a.mipmaps){const m=a.mipmaps.length;a.mipmaps.length=Math.min(a.mipmaps.length,3),m!==a.mipmaps.length&&z&&console.debug(`Reduced mipmap count from ${m} to ${a.mipmaps.length} for ${a.uuid}: ${(o=a.image)==null?void 0:o.width}x${(c=a.image)==null?void 0:c.height}.`)}i[s]=a}return a}else z=="verbose"&&console.warn("No LOD found for",e,t);return null}).catch(a=>(console.error("Error loading LOD",e,a),null))}afterRoot(e){var t,i;return z&&console.log("AFTER",this.url,e),(t=this.parser.json.textures)==null||t.forEach((s,a)=>{var o;if(s!=null&&s.extensions){const c=s==null?void 0:s.extensions[xe];if(c){if(!c.lods){z&&console.warn("Texture has no LODs",c);return}let u=!1;for(const m of this.parser.associations.keys())if(m.isTexture===!0){const d=this.parser.associations.get(m);(d==null?void 0:d.textures)===a&&(u=!0,O.registerTexture(this.url,m,(o=c.lods)==null?void 0:o.length,a,c))}u||this.parser.getDependency("texture",a).then(m=>{var d;m&&O.registerTexture(this.url,m,(d=c.lods)==null?void 0:d.length,a,c)})}}}),(i=this.parser.json.meshes)==null||i.forEach((s,a)=>{if(s!=null&&s.extensions){const o=s==null?void 0:s.extensions[xe];if(o&&o.lods){for(const c of this.parser.associations.keys())if(c.isMesh){const u=this.parser.associations.get(c);(u==null?void 0:u.meshes)===a&&O.registerMesh(this.url,o.guid,c,o.lods.length,u.primitives,o)}}}}),null}static async getOrLoadLOD(e,t){var u,m,d,n;const i=z=="verbose",s=this.getAssignedLODInformation(e);if(!s)return z&&console.warn(`[gltf-progressive] No LOD information found: ${e.name}, uuid: ${e.uuid}, type: ${e.type}`,e),null;const a=s==null?void 0:s.key;let o;if(e.isTexture===!0){const l=e;l.source&&l.source[Oi]&&(o=l.source[Oi])}if(o||(o=O.lodInfos.get(a)),!o)z&&console.warn(`Can not load LOD ${t}: no LOD info found for "${a}" ${e.name}`,e.type,O.lodInfos);else{if(t>0){let g=!1;const _=Array.isArray(o.lods);if(_&&t>=o.lods.length?g=!0:_||(g=!0),g)return this.lowresCache.get(a)}const l=Array.isArray(o.lods)?(u=o.lods[t])==null?void 0:u.path:o.lods;if(!l)return z&&!o["missing:uri"]&&(o["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+t,o)),null;const h=za(s.url,l);if(h.endsWith(".glb")||h.endsWith(".gltf")){if(!o.guid)return console.warn("missing pointer for glb/gltf texture",o),null;const g=h+"_"+o.guid,_=await this.queue.slot(h),p=this.previouslyLoaded.get(g);if(p!==void 0){i&&console.log(`LOD ${t} was already loading/loaded: ${g}`);let w=await p.catch(T=>(console.error(`Error loading LOD ${t} from ${h}
|
|
3682
|
+
`,T),null)),b=!1;if(w==null||(w instanceof f.Texture&&e instanceof f.Texture?(m=w.image)!=null&&m.data||(d=w.source)!=null&&d.data?w=this.copySettings(e,w):(b=!0,this.previouslyLoaded.delete(g)):w instanceof f.BufferGeometry&&e instanceof f.BufferGeometry&&((n=w.attributes.position)!=null&&n.array||(b=!0,this.previouslyLoaded.delete(g)))),!b)return w}if(!_.use)return z&&console.log(`LOD ${t} was aborted: ${h}`),null;const v=o,y=new Promise(async(w,b)=>{if($a){const A=await(await ja({})).load(h);if(A.textures.length>0)for(const P of A.textures){let I=P.texture;return O.assignLODInformation(s.url,I,a,t,void 0),e instanceof f.Texture&&(I=this.copySettings(e,I)),I&&(I.guid=v.guid),w(I)}if(A.geometries.length>0){const P=new Array;for(const I of A.geometries){const L=I.geometry;O.assignLODInformation(s.url,L,a,t,I.primitiveIndex),P.push(L)}return w(P)}return w(null)}const T=new ys.GLTFLoader;Wr(T),z&&(await new Promise(E=>setTimeout(E,1e3)),i&&console.warn("Start loading (delayed) "+h,v.guid));let M=h;if(v&&Array.isArray(v.lods)){const E=v.lods[t];E.hash&&(M+="?v="+E.hash)}const S=await T.loadAsync(M).catch(E=>(console.error(`Error loading LOD ${t} from ${h}
|
|
3683
|
+
`,E),w(null)));if(!S)return w(null);const C=S.parser;i&&console.log("Loading finished "+h,v.guid);let R=0;if(S.parser.json.textures){let E=!1;for(const A of S.parser.json.textures){if(A!=null&&A.extensions){const P=A==null?void 0:A.extensions[xe];if(P!=null&&P.guid&&P.guid===v.guid){E=!0;break}}R++}if(E){let A=await C.getDependency("texture",R);return A&&O.assignLODInformation(s.url,A,a,t,void 0),i&&console.log('change "'+e.name+'" → "'+A.name+'"',h,R,A,g),e instanceof f.Texture&&(A=this.copySettings(e,A)),A&&(A.guid=v.guid),w(A)}else z&&console.warn("Could not find texture with guid",v.guid,S.parser.json)}if(R=0,S.parser.json.meshes){let E=!1;for(const A of S.parser.json.meshes){if(A!=null&&A.extensions){const P=A==null?void 0:A.extensions[xe];if(P!=null&&P.guid&&P.guid===v.guid){E=!0;break}}R++}if(E){const A=await C.getDependency("mesh",R);if(i&&console.log(`Loaded Mesh "${A.name}"`,h,R,A,g),A.isMesh===!0){const P=A.geometry;return O.assignLODInformation(s.url,P,a,t,0),w(P)}else{const P=new Array;for(let I=0;I<A.children.length;I++){const L=A.children[I];if(L.isMesh===!0){const F=L.geometry;O.assignLODInformation(s.url,F,a,t,I),P.push(F)}}return w(P)}}else z&&console.warn("Could not find mesh with guid",v.guid,S.parser.json)}return w(null)});return this.previouslyLoaded.set(g,y),_.use(y),await y}else if(e instanceof f.Texture){i&&console.log("Load texture from uri: "+h);const _=await new f.TextureLoader().loadAsync(h);return _?(_.guid=o.guid,_.flipY=!1,_.needsUpdate=!0,_.colorSpace=e.colorSpace,i&&console.log(o,_)):z&&console.warn("failed loading",h),_}}return null}static assignLODInformation(e,t,i,s,a){if(!t)return;t.userData||(t.userData={});const o=new Za(e,i,s,a);t.userData.LODS=o,"source"in t&&typeof t.source=="object"&&(t.source.LODS=o)}static getAssignedLODInformation(e){var t,i;return e?(t=e.userData)!=null&&t.LODS?e.userData.LODS:"source"in e&&((i=e.source)!=null&&i.LODS)?e.source.LODS:null:null}static copySettings(e,t){return t?(z==="verbose"&&console.debug(`Copy texture settings
|
|
3684
|
+
`,e.uuid,`
|
|
3685
|
+
`,t.uuid),t=t.clone(),t.offset=e.offset,t.repeat=e.repeat,t.colorSpace=e.colorSpace,t.magFilter=e.magFilter,t.minFilter=e.minFilter,t.wrapS=e.wrapS,t.wrapT=e.wrapT,t.flipY=e.flipY,t.anisotropy=e.anisotropy,t.mipmaps||(t.generateMipmaps=e.generateMipmaps),t):e}};D(O,"registerTexture",(e,t,i,s,a)=>{var c,u,m,d,n,l,h,g;if(!t){z&&console.error("!! gltf-progressive: Called register texture without texture");return}if(z){const _=((c=t.image)==null?void 0:c.width)||((m=(u=t.source)==null?void 0:u.data)==null?void 0:m.width)||0,p=((d=t.image)==null?void 0:d.height)||((l=(n=t.source)==null?void 0:n.data)==null?void 0:l.height)||0;console.log(`> gltf-progressive: register texture[${s}] "${t.name||t.uuid}", Current: ${_}x${p}, Max: ${(h=a.lods[0])==null?void 0:h.width}x${(g=a.lods[0])==null?void 0:g.height}, uuid: ${t.uuid}`,a,t)}t.source&&(t.source[Oi]=a);const o=a.guid;O.assignLODInformation(e,t,o,i,s),O.lodInfos.set(o,a),O.lowresCache.set(o,t)}),D(O,"registerMesh",(e,t,i,s,a,o)=>{var m;const c=i.geometry;if(!c){z&&console.warn("gltf-progressive: Register mesh without geometry");return}c.userData||(c.userData={}),z&&console.log("> Progressive: register mesh "+i.name,{index:a,uuid:i.uuid},o,i),O.assignLODInformation(e,c,t,s,a),O.lodInfos.set(t,o);let u=O.lowresCache.get(t);u?u.push(i.geometry):u=[i.geometry],O.lowresCache.set(t,u),s>0&&!Ht(i)&&Ha(i,c);for(const d of Re)(m=d.onRegisteredNewMesh)==null||m.call(d,i,o)}),D(O,"lodInfos",new Map),D(O,"previouslyLoaded",new Map),D(O,"lowresCache",new Map),D(O,"workers",[]),D(O,"_workersIndex",0),D(O,"maxConcurrent",50),D(O,"queue",new Va(O.maxConcurrent,{debug:z!=!1}));let ge=O;class Za{constructor(e,t,i,s){D(this,"url");D(this,"key");D(this,"level");D(this,"index");this.url=e,this.key=t,this.level=i,s!=null&&(this.index=s)}}class ui{constructor(e,t){D(this,"ready");D(this,"_resolve");D(this,"_signal");D(this,"_frame_start");D(this,"_frames_to_capture");D(this,"_resolved",!1);D(this,"_addedCount",0);D(this,"_resolvedCount",0);D(this,"_awaiting",[]);D(this,"_maxPromisesPerObject",1);D(this,"_currentFrame",0);D(this,"_seen",new WeakMap);var a;const s=Math.max(t.frames??2,2);this._frame_start=t.waitForFirstCapture?void 0:e,this._frames_to_capture=s,this.ready=new Promise(o=>{this._resolve=o}),this.ready.finally(()=>{this._resolved=!0,this._awaiting.length=0}),this._signal=t.signal,(a=this._signal)==null||a.addEventListener("abort",()=>{this.resolveNow()}),this._maxPromisesPerObject=Math.max(1,t.maxPromisesPerObject??1)}get awaitedCount(){return this._addedCount}get resolvedCount(){return this._resolvedCount}get currentlyAwaiting(){return this._awaiting.length}update(e){var t;this._currentFrame=e,this._frame_start===void 0&&this._addedCount>0&&(this._frame_start=e),((t=this._signal)!=null&&t.aborted||this._awaiting.length===0&&this._frame_start!==void 0&&e>this._frame_start+this._frames_to_capture)&&this.resolveNow()}add(e,t,i){if(this._resolved){z&&console.warn("PromiseGroup: Trying to add a promise to a resolved group, ignoring.");return}if(!(this._frame_start!==void 0&&this._currentFrame>this._frame_start+this._frames_to_capture)){if(this._maxPromisesPerObject>=1)if(this._seen.has(t)){let s=this._seen.get(t);if(s>=this._maxPromisesPerObject){z&&console.warn("PromiseGroup: Already awaiting object ignoring new promise for it.");return}this._seen.set(t,s+1)}else this._seen.set(t,1);this._awaiting.push(i),this._addedCount++,i.finally(()=>{this._resolvedCount++,this._awaiting.splice(this._awaiting.indexOf(i),1)})}}resolveNow(){var e,t;this._resolved||(t=this._resolve)==null||t.call(this,{awaited_count:this._addedCount,resolved_count:this._resolvedCount,cancelled:((e=this._signal)==null?void 0:e.aborted)??!1})}}D(ui,"addPromise",(e,t,i,s)=>{s.forEach(a=>{a.add(e,t,i)})});const ce=Ne("debugprogressive"),Xa=Ne("noprogressive"),zi=Symbol("Needle:LODSManager"),Vi=Symbol("Needle:LODState"),Ce=Symbol("Needle:CurrentLOD"),K={mesh_lod:-1,texture_lod:-1};var ee,we,xi,De,ft,wi,be;const N=class N{constructor(e,t){D(this,"renderer");D(this,"context");D(this,"projectionScreenMatrix",new f.Matrix4);D(this,"overrideLodLevel");D(this,"targetTriangleDensity",2e5);D(this,"skinnedMeshAutoUpdateBoundsInterval",30);D(this,"updateInterval","auto");Me(this,ee,1);D(this,"pause",!1);D(this,"manual",!1);D(this,"_newPromiseGroups",[]);D(this,"_promiseGroupIds",0);D(this,"_lodchangedlisteners",[]);Me(this,we,void 0);Me(this,xi,new f.Clock);Me(this,De,0);Me(this,ft,0);Me(this,wi,0);Me(this,be,0);D(this,"_fpsBuffer",[60,60,60,60,60]);D(this,"_sphere",new f.Sphere);D(this,"_tempBox",new f.Box3);D(this,"_tempBox2",new f.Box3);D(this,"tempMatrix",new f.Matrix4);D(this,"_tempWorldPosition",new f.Vector3);D(this,"_tempBoxSize",new f.Vector3);D(this,"_tempBox2Size",new f.Vector3);this.renderer=e,this.context={...t}}static getObjectLODState(e){return e[Vi]}static addPlugin(e){Re.push(e)}static removePlugin(e){const t=Re.indexOf(e);t>=0&&Re.splice(t,1)}static get(e,t){if(e[zi])return console.debug("[gltf-progressive] LODsManager already exists for this renderer"),e[zi];const i=new N(e,{engine:"unknown",...t});return e[zi]=i,i}get plugins(){return Re}awaitLoading(e){const t=this._promiseGroupIds++,i=new ui(V(this,De),{...e});this._newPromiseGroups.push(i);const s=performance.now();return i.ready.finally(()=>{const a=this._newPromiseGroups.indexOf(i);a>=0&&(this._newPromiseGroups.splice(a,1),nr()&&performance.measure("LODsManager:awaitLoading",{start:s,detail:{id:t,name:e==null?void 0:e.name,awaited:i.awaitedCount,resolved:i.resolvedCount}}))}),i.ready}_postprocessPromiseGroups(){if(this._newPromiseGroups.length!==0)for(let e=this._newPromiseGroups.length-1;e>=0;e--)this._newPromiseGroups[e].update(V(this,De))}addEventListener(e,t){e==="changed"&&this._lodchangedlisteners.push(t)}removeEventListener(e,t){if(e==="changed"){const i=this._lodchangedlisteners.indexOf(t);i>=0&&this._lodchangedlisteners.splice(i,1)}}enable(){if(V(this,we))return;console.debug("[gltf-progressive] Enabling LODsManager for renderer");let e=0;pe(this,we,this.renderer.render);const t=this;As(this.renderer),this.renderer.render=function(i,s){const a=t.renderer.getRenderTarget();(a==null||"isXRRenderTarget"in a&&a.isXRRenderTarget)&&(e=0,pe(t,De,V(t,De)+1),pe(t,ft,V(t,xi).getDelta()),pe(t,wi,V(t,wi)+V(t,ft)),t._fpsBuffer.shift(),t._fpsBuffer.push(1/V(t,ft)),pe(t,be,t._fpsBuffer.reduce((c,u)=>c+u)/t._fpsBuffer.length),ce&&V(t,De)%200===0&&console.log("FPS",Math.round(V(t,be)),"Interval:",V(t,ee)));const o=e++;V(t,we).call(this,i,s),t.onAfterRender(i,s,o)}}disable(){V(this,we)&&(console.debug("[gltf-progressive] Disabling LODsManager for renderer"),this.renderer.render=V(this,we),pe(this,we,void 0))}update(e,t){this.internalUpdate(e,t)}onAfterRender(e,t,i){if(this.pause)return;const a=this.renderer.renderLists.get(e,0).opaque;let o=!0;if(a.length===1){const c=a[0].material;(c.name==="EffectMaterial"||c.name==="CopyShader")&&(o=!1)}if((t.parent&&t.parent.type==="CubeCamera"||i>=1&&t.type==="OrthographicCamera")&&(o=!1),o){if(Xa||(this.updateInterval==="auto"?V(this,be)<40&&V(this,ee)<10?(pe(this,ee,V(this,ee)+1),ce&&console.warn("↓ Reducing LOD updates",V(this,ee),V(this,be).toFixed(0))):V(this,be)>=60&&V(this,ee)>1&&(pe(this,ee,V(this,ee)-1),ce&&console.warn("↑ Increasing LOD updates",V(this,ee),V(this,be).toFixed(0))):pe(this,ee,this.updateInterval),V(this,ee)>0&&V(this,De)%V(this,ee)!=0))return;this.internalUpdate(e,t),this._postprocessPromiseGroups()}}internalUpdate(e,t){var u,m;const i=this.renderer.renderLists.get(e,0),s=i.opaque;this.projectionScreenMatrix.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse);const a=this.targetTriangleDensity;for(const d of s){if(d.material&&(((u=d.geometry)==null?void 0:u.type)==="BoxGeometry"||((m=d.geometry)==null?void 0:m.type)==="BufferGeometry")&&(d.material.name==="SphericalGaussianBlur"||d.material.name=="BackgroundCubeMaterial"||d.material.name==="CubemapFromEquirect"||d.material.name==="EquirectangularToCubeUV")){ce&&(d.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"]||(d.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"]=!0,console.warn("Ignoring skybox or BLIT object",d,d.material.name,d.material.type)));continue}switch(d.material.type){case"LineBasicMaterial":case"LineDashedMaterial":case"PointsMaterial":case"ShadowMaterial":case"MeshDistanceMaterial":case"MeshDepthMaterial":continue}if(ce==="color"&&d.material&&!d.object.progressive_debug_color){d.object.progressive_debug_color=!0;const l=Math.random()*16777215,h=new f.MeshStandardMaterial({color:l});d.object.material=h}const n=d.object;(n instanceof f.Mesh||n.isMesh)&&this.updateLODs(e,t,n,a)}const o=i.transparent;for(const d of o){const n=d.object;(n instanceof f.Mesh||n.isMesh)&&this.updateLODs(e,t,n,a)}const c=i.transmissive;for(const d of c){const n=d.object;(n instanceof f.Mesh||n.isMesh)&&this.updateLODs(e,t,n,a)}}updateLODs(e,t,i,s){var c,u;i.userData||(i.userData={});let a=i[Vi];if(a||(a=new Ka,i[Vi]=a),a.frames++<2)return;for(const m of Re)(c=m.onBeforeUpdateLOD)==null||c.call(m,this.renderer,e,t,i);const o=this.overrideLodLevel!==void 0?this.overrideLodLevel:Ue;o>=0?(K.mesh_lod=o,K.texture_lod=o):(this.calculateLodLevel(t,i,a,s,K),K.mesh_lod=Math.round(K.mesh_lod),K.texture_lod=Math.round(K.texture_lod)),K.mesh_lod>=0&&this.loadProgressiveMeshes(i,K.mesh_lod),i.material&&K.texture_lod>=0&&this.loadProgressiveTextures(i.material,K.texture_lod,o),z&&i.material&&!i.isGizmo&&Yr(i.material);for(const m of Re)(u=m.onAfterUpdatedLOD)==null||u.call(m,this.renderer,e,t,i,K);a.lastLodLevel_Mesh=K.mesh_lod,a.lastLodLevel_Texture=K.texture_lod}loadProgressiveTextures(e,t,i){if(!e)return;if(Array.isArray(e)){for(const a of e)this.loadProgressiveTextures(a,t);return}let s=!1;if((e[Ce]===void 0||t<e[Ce])&&(s=!0),i!==void 0&&i>=0&&(s=e[Ce]!=i,t=i),s){e[Ce]=t;const a=ge.assignTextureLOD(e,t).then(o=>{this._lodchangedlisteners.forEach(c=>c({type:"texture",level:t,object:e}))});ui.addPromise("texture",e,a,this._newPromiseGroups)}}loadProgressiveMeshes(e,t){if(!e)return Promise.resolve(null);let i=e[Ce]!==t;const s=e["DEBUG:LOD"];if(s!=null&&(i=e[Ce]!=s,t=s),i){e[Ce]=t;const a=e.geometry,o=ge.assignMeshLOD(e,t).then(c=>(c&&e[Ce]==t&&a!=e.geometry&&this._lodchangedlisteners.forEach(u=>u({type:"mesh",level:t,object:e})),c));return ui.addPromise("mesh",e,o,this._newPromiseGroups),o}return Promise.resolve(null)}static isInside(e,t){const i=e.min,s=e.max,a=(i.x+s.x)*.5,o=(i.y+s.y)*.5;return this._tempPtInside.set(a,o,i.z).applyMatrix4(t).z<0}calculateLodLevel(e,t,i,s,a){var p,v,y,x;if(!t){a.mesh_lod=-1,a.texture_lod=-1;return}if(!e){a.mesh_lod=-1,a.texture_lod=-1;return}let c=10+1,u=!1;if(ce&&t["DEBUG:LOD"]!=null)return t["DEBUG:LOD"];const m=(p=ge.getMeshLODExtension(t.geometry))==null?void 0:p.lods,d=ge.getPrimitiveIndex(t.geometry),n=m&&m.length>0,l=ge.getMaterialMinMaxLODsCount(t.material),h=l.min_count!==1/0&&l.min_count>=0&&l.max_count>=0;if(!n&&!h){a.mesh_lod=0,a.texture_lod=0;return}n||(u=!0,c=0);const g=this.renderer.domElement.clientHeight||this.renderer.domElement.height;let _=t.geometry.boundingBox;if(t.type==="SkinnedMesh"){const w=t;if(!w.boundingBox)w.computeBoundingBox();else if(this.skinnedMeshAutoUpdateBoundsInterval>0){if(!w[N.$skinnedMeshBoundsOffset]){const T=N.skinnedMeshBoundsFrameOffsetCounter++;w[N.$skinnedMeshBoundsOffset]=T}const b=w[N.$skinnedMeshBoundsOffset];if((i.frames+b)%this.skinnedMeshAutoUpdateBoundsInterval===0){const T=Ht(w),M=w.geometry;T&&(w.geometry=T),w.computeBoundingBox(),w.geometry=M}}_=w.boundingBox}if(_){const w=e;if(t.geometry.attributes.color&&t.geometry.attributes.color.count<100&&t.geometry.boundingSphere){this._sphere.copy(t.geometry.boundingSphere),this._sphere.applyMatrix4(t.matrixWorld);const P=e.getWorldPosition(this._tempWorldPosition);if(this._sphere.containsPoint(P)){a.mesh_lod=0,a.texture_lod=0;return}}if(this._tempBox.copy(_),this._tempBox.applyMatrix4(t.matrixWorld),w.isPerspectiveCamera&&N.isInside(this._tempBox,this.projectionScreenMatrix)){a.mesh_lod=0,a.texture_lod=0;return}if(this._tempBox.applyMatrix4(this.projectionScreenMatrix),this.renderer.xr.enabled&&w.isPerspectiveCamera&&w.fov>70){const P=this._tempBox.min,I=this._tempBox.max;let L=P.x,F=P.y,B=I.x,U=I.y;const H=2,j=1.5,Y=(P.x+I.x)*.5,k=(P.y+I.y)*.5;L=(L-Y)*H+Y,F=(F-k)*H+k,B=(B-Y)*H+Y,U=(U-k)*H+k;const de=L<0&&B>0?0:Math.min(Math.abs(P.x),Math.abs(I.x)),Se=F<0&&U>0?0:Math.min(Math.abs(P.y),Math.abs(I.y)),ae=Math.max(de,Se);i.lastCentrality=(j-ae)*(j-ae)*(j-ae)}else i.lastCentrality=1;const b=this._tempBox.getSize(this._tempBoxSize);b.multiplyScalar(.5),screen.availHeight>0&&g>0&&b.multiplyScalar(g/screen.availHeight),e.isPerspectiveCamera?b.x*=e.aspect:e.isOrthographicCamera;const T=e.matrixWorldInverse,M=this._tempBox2;M.copy(_),M.applyMatrix4(t.matrixWorld),M.applyMatrix4(T);const S=M.getSize(this._tempBox2Size),C=Math.max(S.x,S.y);if(Math.max(b.x,b.y)!=0&&C!=0&&(b.z=S.z/Math.max(S.x,S.y)*Math.max(b.x,b.y)),i.lastScreenCoverage=Math.max(b.x,b.y,b.z),i.lastScreenspaceVolume.copy(b),i.lastScreenCoverage*=i.lastCentrality,ce&&N.debugDrawLine){const P=this.tempMatrix.copy(this.projectionScreenMatrix);P.invert();const I=N.corner0,L=N.corner1,F=N.corner2,B=N.corner3;I.copy(this._tempBox.min),L.copy(this._tempBox.max),L.x=I.x,F.copy(this._tempBox.max),F.y=I.y,B.copy(this._tempBox.max);const U=(I.z+B.z)*.5;I.z=L.z=F.z=B.z=U,I.applyMatrix4(P),L.applyMatrix4(P),F.applyMatrix4(P),B.applyMatrix4(P),N.debugDrawLine(I,L,255),N.debugDrawLine(I,F,255),N.debugDrawLine(L,B,255),N.debugDrawLine(F,B,255)}let E=999;if(m&&i.lastScreenCoverage>0)for(let P=0;P<m.length;P++){const I=m[P],F=(((v=I.densities)==null?void 0:v[d])||I.density||1e-5)/i.lastScreenCoverage;if(d>0&&nr()&&!I.densities&&!globalThis["NEEDLE:MISSING_LOD_PRIMITIVE_DENSITIES"]&&(window["NEEDLE:MISSING_LOD_PRIMITIVE_DENSITIES"]=!0,console.warn("[Needle Progressive] Detected usage of mesh without primitive densities. This might cause incorrect LOD level selection: Consider re-optimizing your model by updating your Needle Integration, Needle glTF Pipeline or running optimization again on Needle Cloud.")),F<s){E=P;break}}E<c&&(c=E,u=!0)}if(u?a.mesh_lod=c:a.mesh_lod=i.lastLodLevel_Mesh,ce&&a.mesh_lod!=i.lastLodLevel_Mesh){const b=m==null?void 0:m[a.mesh_lod];b&&console.log(`Mesh LOD changed: ${i.lastLodLevel_Mesh} → ${a.mesh_lod} (density: ${(y=b.densities)==null?void 0:y[d].toFixed(0)}) | ${t.name}`)}if(h){const w="saveData"in globalThis.navigator&&globalThis.navigator.saveData===!0;if(i.lastLodLevel_Texture<0){if(a.texture_lod=l.max_count-1,ce){const b=l.lods[l.max_count-1];ce&&console.log(`First Texture LOD ${a.texture_lod} (${b.max_height}px) - ${t.name}`)}}else{const b=i.lastScreenspaceVolume.x+i.lastScreenspaceVolume.y+i.lastScreenspaceVolume.z;let T=i.lastScreenCoverage*4;((x=this.context)==null?void 0:x.engine)==="model-viewer"&&(T*=1.5);const S=g/window.devicePixelRatio*T;let C=!1;for(let R=l.lods.length-1;R>=0;R--){const E=l.lods[R];if(!(w&&E.max_height>=2048)&&!(jr()&&E.max_height>4096)&&(E.max_height>S||!C&&R===0)){if(C=!0,a.texture_lod=R,ce&&a.texture_lod<i.lastLodLevel_Texture){const A=E.max_height;console.log(`Texture LOD changed: ${i.lastLodLevel_Texture} → ${a.texture_lod} = ${A}px
|
|
3686
|
+
Screensize: ${S.toFixed(0)}px, Coverage: ${(100*i.lastScreenCoverage).toFixed(2)}%, Volume ${b.toFixed(1)}
|
|
3687
|
+
${t.name}`)}break}}}}else a.texture_lod=0}};ee=new WeakMap,we=new WeakMap,xi=new WeakMap,De=new WeakMap,ft=new WeakMap,wi=new WeakMap,be=new WeakMap,D(N,"debugDrawLine"),D(N,"corner0",new f.Vector3),D(N,"corner1",new f.Vector3),D(N,"corner2",new f.Vector3),D(N,"corner3",new f.Vector3),D(N,"_tempPtInside",new f.Vector3),D(N,"skinnedMeshBoundsFrameOffsetCounter",0),D(N,"$skinnedMeshBoundsOffset",Symbol("gltf-progressive-skinnedMeshBoundsOffset"));let mt=N;class Ka{constructor(){D(this,"frames",0);D(this,"lastLodLevel_Mesh",-1);D(this,"lastLodLevel_Texture",-1);D(this,"lastScreenCoverage",0);D(this,"lastScreenspaceVolume",new f.Vector3);D(this,"lastCentrality",0)}}const or=Symbol("NEEDLE_mesh_lod"),$t=Symbol("NEEDLE_texture_lod");let Tt=null;function $r(){const r=Ja();r&&(r.mapURLs(function(e){return ar(),e}),ar(),Tt==null||Tt.disconnect(),Tt=new MutationObserver(e=>{e.forEach(t=>{t.addedNodes.forEach(i=>{i instanceof HTMLElement&&i.tagName.toLowerCase()==="model-viewer"&&Qr(i)})})}),Tt.observe(document,{childList:!0,subtree:!0}))}function Ja(){if(typeof customElements>"u")return null;const r=customElements.get("model-viewer");return r||(customElements.whenDefined("model-viewer").then(()=>{console.debug("[gltf-progressive] model-viewer defined"),$r()}),null)}function ar(){if(typeof document>"u")return;document.querySelectorAll("model-viewer").forEach(e=>{Qr(e)})}const lr=new WeakSet;let el=0;function Qr(r){if(!r||lr.has(r))return null;lr.add(r),console.debug("[gltf-progressive] found new model-viewer..."+ ++el+`
|
|
3688
|
+
`,r.getAttribute("src"));let e=null,t=null,i=null;for(let s=r;s!=null;s=Object.getPrototypeOf(s)){const a=Object.getOwnPropertySymbols(s),o=a.find(m=>m.toString()=="Symbol(renderer)"),c=a.find(m=>m.toString()=="Symbol(scene)"),u=a.find(m=>m.toString()=="Symbol(needsRender)");!e&&o!=null&&(e=r[o].threeRenderer),!t&&c!=null&&(t=r[c]),!i&&u!=null&&(i=r[u])}if(e&&t){let s=function(){if(i){let o=0,c=setInterval(()=>{if(o++>5){clearInterval(c);return}i==null||i.call(r)},300)}};console.debug("[gltf-progressive] setup model-viewer");const a=mt.get(e,{engine:"model-viewer"});return mt.addPlugin(new tl),a.enable(),a.addEventListener("changed",()=>{i==null||i.call(r)}),r.addEventListener("model-visibility",o=>{o.detail.visible&&(i==null||i.call(r))}),r.addEventListener("load",()=>{s()}),()=>{a.disable()}}return null}class tl{constructor(){D(this,"_didWarnAboutMissingUrl",!1)}onBeforeUpdateLOD(e,t,i,s){this.tryParseMeshLOD(t,s),this.tryParseTextureLOD(t,s)}getUrl(e){if(!e)return null;let t=e.getAttribute("src");return t||(t=e.src),t||(this._didWarnAboutMissingUrl||console.warn("No url found in modelviewer",e),this._didWarnAboutMissingUrl=!0),t}tryGetCurrentGLTF(e){return e._currentGLTF}tryGetCurrentModelViewer(e){return e.element}tryParseTextureLOD(e,t){if(t[$t]==!0)return;t[$t]=!0;const i=this.tryGetCurrentGLTF(e),s=this.tryGetCurrentModelViewer(e),a=this.getUrl(s);if(a&&i&&t.material){let o=function(u){var d,n,l;if(u[$t]==!0)return;u[$t]=!0,u.userData&&(u.userData.LOD=-1);const m=Object.keys(u);for(let h=0;h<m.length;h++){const g=m[h],_=u[g];if((_==null?void 0:_.isTexture)===!0){const p=(n=(d=_.userData)==null?void 0:d.associations)==null?void 0:n.textures;if(p==null)continue;const v=i.parser.json.textures[p];if(!v){console.warn("Texture data not found for texture index "+p);continue}if((l=v==null?void 0:v.extensions)!=null&&l[xe]){const y=v.extensions[xe];y&&a&&ge.registerTexture(a,_,y.lods.length,p,y)}}}};const c=t.material;if(Array.isArray(c))for(const u of c)o(u);else o(c)}}tryParseMeshLOD(e,t){var o,c;if(t[or]==!0)return;t[or]=!0;const i=this.tryGetCurrentModelViewer(e),s=this.getUrl(i);if(!s)return;const a=(c=(o=t.userData)==null?void 0:o.gltfExtensions)==null?void 0:c[xe];if(a&&s){const u=t.uuid;ge.registerMesh(s,u,t,0,a.lods.length,a)}}}function Zr(...r){let e,t,i,s;switch(r.length){case 2:[i,t]=r,s={};break;case 3:[i,t,s]=r;break;case 4:[e,t,i,s]=r;break;default:throw new Error("Invalid arguments")}As(),Wr(i),qr(i,{progressive:!0,...s==null?void 0:s.hints}),i.register(o=>new ge(o));const a=mt.get(t);return(s==null?void 0:s.enableLODsManager)!==!1&&a.enable(),a}$r();if(!Ua){const r={gltfProgressive:{useNeedleProgressive:Zr,LODsManager:mt,configureLoader:qr,getRaycastMesh:Ht,useRaycastMeshes:Na}};if(!globalThis.Needle)globalThis.Needle=r;else for(const e in r)globalThis.Needle[e]=r[e]}var ut=Object.freeze({Linear:Object.freeze({None:function(r){return r},In:function(r){return r},Out:function(r){return r},InOut:function(r){return r}}),Quadratic:Object.freeze({In:function(r){return r*r},Out:function(r){return r*(2-r)},InOut:function(r){return(r*=2)<1?.5*r*r:-.5*(--r*(r-2)-1)}}),Cubic:Object.freeze({In:function(r){return r*r*r},Out:function(r){return--r*r*r+1},InOut:function(r){return(r*=2)<1?.5*r*r*r:.5*((r-=2)*r*r+2)}}),Quartic:Object.freeze({In:function(r){return r*r*r*r},Out:function(r){return 1- --r*r*r*r},InOut:function(r){return(r*=2)<1?.5*r*r*r*r:-.5*((r-=2)*r*r*r-2)}}),Quintic:Object.freeze({In:function(r){return r*r*r*r*r},Out:function(r){return--r*r*r*r*r+1},InOut:function(r){return(r*=2)<1?.5*r*r*r*r*r:.5*((r-=2)*r*r*r*r+2)}}),Sinusoidal:Object.freeze({In:function(r){return 1-Math.sin((1-r)*Math.PI/2)},Out:function(r){return Math.sin(r*Math.PI/2)},InOut:function(r){return .5*(1-Math.sin(Math.PI*(.5-r)))}}),Exponential:Object.freeze({In:function(r){return r===0?0:Math.pow(1024,r-1)},Out:function(r){return r===1?1:1-Math.pow(2,-10*r)},InOut:function(r){return r===0?0:r===1?1:(r*=2)<1?.5*Math.pow(1024,r-1):.5*(-Math.pow(2,-10*(r-1))+2)}}),Circular:Object.freeze({In:function(r){return 1-Math.sqrt(1-r*r)},Out:function(r){return Math.sqrt(1- --r*r)},InOut:function(r){return(r*=2)<1?-.5*(Math.sqrt(1-r*r)-1):.5*(Math.sqrt(1-(r-=2)*r)+1)}}),Elastic:Object.freeze({In:function(r){return r===0?0:r===1?1:-Math.pow(2,10*(r-1))*Math.sin((r-1.1)*5*Math.PI)},Out:function(r){return r===0?0:r===1?1:Math.pow(2,-10*r)*Math.sin((r-.1)*5*Math.PI)+1},InOut:function(r){return r===0?0:r===1?1:(r*=2,r<1?-.5*Math.pow(2,10*(r-1))*Math.sin((r-1.1)*5*Math.PI):.5*Math.pow(2,-10*(r-1))*Math.sin((r-1.1)*5*Math.PI)+1)}}),Back:Object.freeze({In:function(r){var e=1.70158;return r===1?1:r*r*((e+1)*r-e)},Out:function(r){var e=1.70158;return r===0?0:--r*r*((e+1)*r+e)+1},InOut:function(r){var e=2.5949095;return(r*=2)<1?.5*(r*r*((e+1)*r-e)):.5*((r-=2)*r*((e+1)*r+e)+2)}}),Bounce:Object.freeze({In:function(r){return 1-ut.Bounce.Out(1-r)},Out:function(r){return r<1/2.75?7.5625*r*r:r<2/2.75?7.5625*(r-=1.5/2.75)*r+.75:r<2.5/2.75?7.5625*(r-=2.25/2.75)*r+.9375:7.5625*(r-=2.625/2.75)*r+.984375},InOut:function(r){return r<.5?ut.Bounce.In(r*2)*.5:ut.Bounce.Out(r*2-1)*.5+.5}}),generatePow:function(r){return r===void 0&&(r=4),r=r<Number.EPSILON?Number.EPSILON:r,r=r>1e4?1e4:r,{In:function(e){return Math.pow(e,r)},Out:function(e){return 1-Math.pow(1-e,r)},InOut:function(e){return e<.5?Math.pow(e*2,r)/2:(1-Math.pow(2-e*2,r))/2+.5}}}}),lt=function(){return performance.now()},Xr=function(){function r(){this._tweens={},this._tweensAddedDuringUpdate={}}return r.prototype.getAll=function(){var e=this;return Object.keys(this._tweens).map(function(t){return e._tweens[t]})},r.prototype.removeAll=function(){this._tweens={}},r.prototype.add=function(e){this._tweens[e.getId()]=e,this._tweensAddedDuringUpdate[e.getId()]=e},r.prototype.remove=function(e){delete this._tweens[e.getId()],delete this._tweensAddedDuringUpdate[e.getId()]},r.prototype.update=function(e,t){e===void 0&&(e=lt()),t===void 0&&(t=!1);var i=Object.keys(this._tweens);if(i.length===0)return!1;for(;i.length>0;){this._tweensAddedDuringUpdate={};for(var s=0;s<i.length;s++){var a=this._tweens[i[s]],o=!t;a&&a.update(e,o)===!1&&!t&&delete this._tweens[i[s]]}i=Object.keys(this._tweensAddedDuringUpdate)}return!0},r}(),He={Linear:function(r,e){var t=r.length-1,i=t*e,s=Math.floor(i),a=He.Utils.Linear;return e<0?a(r[0],r[1],i):e>1?a(r[t],r[t-1],t-i):a(r[s],r[s+1>t?t:s+1],i-s)},Bezier:function(r,e){for(var t=0,i=r.length-1,s=Math.pow,a=He.Utils.Bernstein,o=0;o<=i;o++)t+=s(1-e,i-o)*s(e,o)*r[o]*a(i,o);return t},CatmullRom:function(r,e){var t=r.length-1,i=t*e,s=Math.floor(i),a=He.Utils.CatmullRom;return r[0]===r[t]?(e<0&&(s=Math.floor(i=t*(1+e))),a(r[(s-1+t)%t],r[s],r[(s+1)%t],r[(s+2)%t],i-s)):e<0?r[0]-(a(r[0],r[0],r[1],r[1],-i)-r[0]):e>1?r[t]-(a(r[t],r[t],r[t-1],r[t-1],i-t)-r[t]):a(r[s?s-1:0],r[s],r[t<s+1?t:s+1],r[t<s+2?t:s+2],i-s)},Utils:{Linear:function(r,e,t){return(e-r)*t+r},Bernstein:function(r,e){var t=He.Utils.Factorial;return t(r)/t(e)/t(r-e)},Factorial:function(){var r=[1];return function(e){var t=1;if(r[e])return r[e];for(var i=e;i>1;i--)t*=i;return r[e]=t,t}}(),CatmullRom:function(r,e,t,i,s){var a=(t-r)*.5,o=(i-e)*.5,c=s*s,u=s*c;return(2*e-2*t+a+o)*u+(-3*e+3*t-2*a-o)*c+a*s+e}}},Ss=function(){function r(){}return r.nextId=function(){return r._nextId++},r._nextId=0,r}(),ss=new Xr,gi=function(){function r(e,t){t===void 0&&(t=ss),this._object=e,this._group=t,this._isPaused=!1,this._pauseStart=0,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._isDynamic=!1,this._initialRepeat=0,this._repeat=0,this._yoyo=!1,this._isPlaying=!1,this._reversed=!1,this._delayTime=0,this._startTime=0,this._easingFunction=ut.Linear.None,this._interpolationFunction=He.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._id=Ss.nextId(),this._isChainStopped=!1,this._propertiesAreSetUp=!1,this._goToEnd=!1}return r.prototype.getId=function(){return this._id},r.prototype.isPlaying=function(){return this._isPlaying},r.prototype.isPaused=function(){return this._isPaused},r.prototype.getDuration=function(){return this._duration},r.prototype.to=function(e,t){if(t===void 0&&(t=1e3),this._isPlaying)throw new Error("Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.");return this._valuesEnd=e,this._propertiesAreSetUp=!1,this._duration=t<0?0:t,this},r.prototype.duration=function(e){return e===void 0&&(e=1e3),this._duration=e<0?0:e,this},r.prototype.dynamic=function(e){return e===void 0&&(e=!1),this._isDynamic=e,this},r.prototype.start=function(e,t){if(e===void 0&&(e=lt()),t===void 0&&(t=!1),this._isPlaying)return this;if(this._group&&this._group.add(this),this._repeat=this._initialRepeat,this._reversed){this._reversed=!1;for(var i in this._valuesStartRepeat)this._swapEndStartRepeatValues(i),this._valuesStart[i]=this._valuesStartRepeat[i]}if(this._isPlaying=!0,this._isPaused=!1,this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._isChainStopped=!1,this._startTime=e,this._startTime+=this._delayTime,!this._propertiesAreSetUp||t){if(this._propertiesAreSetUp=!0,!this._isDynamic){var s={};for(var a in this._valuesEnd)s[a]=this._valuesEnd[a];this._valuesEnd=s}this._setupProperties(this._object,this._valuesStart,this._valuesEnd,this._valuesStartRepeat,t)}return this},r.prototype.startFromCurrentValues=function(e){return this.start(e,!0)},r.prototype._setupProperties=function(e,t,i,s,a){for(var o in i){var c=e[o],u=Array.isArray(c),m=u?"array":typeof c,d=!u&&Array.isArray(i[o]);if(!(m==="undefined"||m==="function")){if(d){var n=i[o];if(n.length===0)continue;for(var l=[c],h=0,g=n.length;h<g;h+=1){var _=this._handleRelativeValue(c,n[h]);if(isNaN(_)){d=!1,console.warn("Found invalid interpolation list. Skipping.");break}l.push(_)}d&&(i[o]=l)}if((m==="object"||u)&&c&&!d){t[o]=u?[]:{};var p=c;for(var v in p)t[o][v]=p[v];s[o]=u?[]:{};var n=i[o];if(!this._isDynamic){var y={};for(var v in n)y[v]=n[v];i[o]=n=y}this._setupProperties(p,t[o],n,s[o],a)}else(typeof t[o]>"u"||a)&&(t[o]=c),u||(t[o]*=1),d?s[o]=i[o].slice().reverse():s[o]=t[o]||0}}},r.prototype.stop=function(){return this._isChainStopped||(this._isChainStopped=!0,this.stopChainedTweens()),this._isPlaying?(this._group&&this._group.remove(this),this._isPlaying=!1,this._isPaused=!1,this._onStopCallback&&this._onStopCallback(this._object),this):this},r.prototype.end=function(){return this._goToEnd=!0,this.update(1/0),this},r.prototype.pause=function(e){return e===void 0&&(e=lt()),this._isPaused||!this._isPlaying?this:(this._isPaused=!0,this._pauseStart=e,this._group&&this._group.remove(this),this)},r.prototype.resume=function(e){return e===void 0&&(e=lt()),!this._isPaused||!this._isPlaying?this:(this._isPaused=!1,this._startTime+=e-this._pauseStart,this._pauseStart=0,this._group&&this._group.add(this),this)},r.prototype.stopChainedTweens=function(){for(var e=0,t=this._chainedTweens.length;e<t;e++)this._chainedTweens[e].stop();return this},r.prototype.group=function(e){return e===void 0&&(e=ss),this._group=e,this},r.prototype.delay=function(e){return e===void 0&&(e=0),this._delayTime=e,this},r.prototype.repeat=function(e){return e===void 0&&(e=0),this._initialRepeat=e,this._repeat=e,this},r.prototype.repeatDelay=function(e){return this._repeatDelayTime=e,this},r.prototype.yoyo=function(e){return e===void 0&&(e=!1),this._yoyo=e,this},r.prototype.easing=function(e){return e===void 0&&(e=ut.Linear.None),this._easingFunction=e,this},r.prototype.interpolation=function(e){return e===void 0&&(e=He.Linear),this._interpolationFunction=e,this},r.prototype.chain=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return this._chainedTweens=e,this},r.prototype.onStart=function(e){return this._onStartCallback=e,this},r.prototype.onEveryStart=function(e){return this._onEveryStartCallback=e,this},r.prototype.onUpdate=function(e){return this._onUpdateCallback=e,this},r.prototype.onRepeat=function(e){return this._onRepeatCallback=e,this},r.prototype.onComplete=function(e){return this._onCompleteCallback=e,this},r.prototype.onStop=function(e){return this._onStopCallback=e,this},r.prototype.update=function(e,t){var i=this,s;if(e===void 0&&(e=lt()),t===void 0&&(t=!0),this._isPaused)return!0;var a,o=this._startTime+this._duration;if(!this._goToEnd&&!this._isPlaying){if(e>o)return!1;t&&this.start(e,!0)}if(this._goToEnd=!1,e<this._startTime)return!0;this._onStartCallbackFired===!1&&(this._onStartCallback&&this._onStartCallback(this._object),this._onStartCallbackFired=!0),this._onEveryStartCallbackFired===!1&&(this._onEveryStartCallback&&this._onEveryStartCallback(this._object),this._onEveryStartCallbackFired=!0);var c=e-this._startTime,u=this._duration+((s=this._repeatDelayTime)!==null&&s!==void 0?s:this._delayTime),m=this._duration+this._repeat*u,d=function(){if(i._duration===0||c>m)return 1;var p=Math.trunc(c/u),v=c-p*u,y=Math.min(v/i._duration,1);return y===0&&c===i._duration?1:y},n=d(),l=this._easingFunction(n);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,l),this._onUpdateCallback&&this._onUpdateCallback(this._object,n),this._duration===0||c>=this._duration)if(this._repeat>0){var h=Math.min(Math.trunc((c-this._duration)/u)+1,this._repeat);isFinite(this._repeat)&&(this._repeat-=h);for(a in this._valuesStartRepeat)!this._yoyo&&typeof this._valuesEnd[a]=="string"&&(this._valuesStartRepeat[a]=this._valuesStartRepeat[a]+parseFloat(this._valuesEnd[a])),this._yoyo&&this._swapEndStartRepeatValues(a),this._valuesStart[a]=this._valuesStartRepeat[a];return this._yoyo&&(this._reversed=!this._reversed),this._startTime+=u*h,this._onRepeatCallback&&this._onRepeatCallback(this._object),this._onEveryStartCallbackFired=!1,!0}else{this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var g=0,_=this._chainedTweens.length;g<_;g++)this._chainedTweens[g].start(this._startTime+this._duration,!1);return this._isPlaying=!1,!1}return!0},r.prototype._updateProperties=function(e,t,i,s){for(var a in i)if(t[a]!==void 0){var o=t[a]||0,c=i[a],u=Array.isArray(e[a]),m=Array.isArray(c),d=!u&&m;d?e[a]=this._interpolationFunction(c,s):typeof c=="object"&&c?this._updateProperties(e[a],o,c,s):(c=this._handleRelativeValue(o,c),typeof c=="number"&&(e[a]=o+(c-o)*s))}},r.prototype._handleRelativeValue=function(e,t){return typeof t!="string"?t:t.charAt(0)==="+"||t.charAt(0)==="-"?e+parseFloat(t):parseFloat(t)},r.prototype._swapEndStartRepeatValues=function(e){var t=this._valuesStartRepeat[e],i=this._valuesEnd[e];typeof i=="string"?this._valuesStartRepeat[e]=this._valuesStartRepeat[e]+parseFloat(i):this._valuesStartRepeat[e]=this._valuesEnd[e],this._valuesEnd[e]=t},r}(),il="23.1.3",sl=Ss.nextId,_e=ss,rl=_e.getAll.bind(_e),nl=_e.removeAll.bind(_e),ol=_e.add.bind(_e),al=_e.remove.bind(_e),ll=_e.update.bind(_e),me={Easing:ut,Group:Xr,Interpolation:He,now:lt,Sequence:Ss,nextId:sl,Tween:gi,VERSION:il,getAll:rl,removeAll:nl,add:ol,remove:al,update:ll},St=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function cl(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var Kr={exports:{}};(function(r){var e=Object.prototype.hasOwnProperty,t="~";function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(t=!1));function s(u,m,d){this.fn=u,this.context=m,this.once=d||!1}function a(u,m,d,n,l){if(typeof d!="function")throw new TypeError("The listener must be a function");var h=new s(d,n||u,l),g=t?t+m:m;return u._events[g]?u._events[g].fn?u._events[g]=[u._events[g],h]:u._events[g].push(h):(u._events[g]=h,u._eventsCount++),u}function o(u,m){--u._eventsCount===0?u._events=new i:delete u._events[m]}function c(){this._events=new i,this._eventsCount=0}c.prototype.eventNames=function(){var m=[],d,n;if(this._eventsCount===0)return m;for(n in d=this._events)e.call(d,n)&&m.push(t?n.slice(1):n);return Object.getOwnPropertySymbols?m.concat(Object.getOwnPropertySymbols(d)):m},c.prototype.listeners=function(m){var d=t?t+m:m,n=this._events[d];if(!n)return[];if(n.fn)return[n.fn];for(var l=0,h=n.length,g=new Array(h);l<h;l++)g[l]=n[l].fn;return g},c.prototype.listenerCount=function(m){var d=t?t+m:m,n=this._events[d];return n?n.fn?1:n.length:0},c.prototype.emit=function(m,d,n,l,h,g){var _=t?t+m:m;if(!this._events[_])return!1;var p=this._events[_],v=arguments.length,y,x;if(p.fn){switch(p.once&&this.removeListener(m,p.fn,void 0,!0),v){case 1:return p.fn.call(p.context),!0;case 2:return p.fn.call(p.context,d),!0;case 3:return p.fn.call(p.context,d,n),!0;case 4:return p.fn.call(p.context,d,n,l),!0;case 5:return p.fn.call(p.context,d,n,l,h),!0;case 6:return p.fn.call(p.context,d,n,l,h,g),!0}for(x=1,y=new Array(v-1);x<v;x++)y[x-1]=arguments[x];p.fn.apply(p.context,y)}else{var w=p.length,b;for(x=0;x<w;x++)switch(p[x].once&&this.removeListener(m,p[x].fn,void 0,!0),v){case 1:p[x].fn.call(p[x].context);break;case 2:p[x].fn.call(p[x].context,d);break;case 3:p[x].fn.call(p[x].context,d,n);break;case 4:p[x].fn.call(p[x].context,d,n,l);break;default:if(!y)for(b=1,y=new Array(v-1);b<v;b++)y[b-1]=arguments[b];p[x].fn.apply(p[x].context,y)}}return!0},c.prototype.on=function(m,d,n){return a(this,m,d,n,!1)},c.prototype.once=function(m,d,n){return a(this,m,d,n,!0)},c.prototype.removeListener=function(m,d,n,l){var h=t?t+m:m;if(!this._events[h])return this;if(!d)return o(this,h),this;var g=this._events[h];if(g.fn)g.fn===d&&(!l||g.once)&&(!n||g.context===n)&&o(this,h);else{for(var _=0,p=[],v=g.length;_<v;_++)(g[_].fn!==d||l&&!g[_].once||n&&g[_].context!==n)&&p.push(g[_]);p.length?this._events[h]=p.length===1?p[0]:p:o(this,h)}return this},c.prototype.removeAllListeners=function(m){var d;return m?(d=t?t+m:m,this._events[d]&&o(this,d)):(this._events=new i,this._eventsCount=0),this},c.prototype.off=c.prototype.removeListener,c.prototype.addListener=c.prototype.on,c.prefixed=t,c.EventEmitter=c,r.exports=c})(Kr);var ul=Kr.exports;const vt=cl(ul);var Ot=function(){var r=0,e=document.createElement("div");e.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000",e.addEventListener("click",function(n){n.preventDefault(),i(++r%e.children.length)},!1);function t(n){return e.appendChild(n.dom),n}function i(n){for(var l=0;l<e.children.length;l++)e.children[l].style.display=l===n?"block":"none";r=n}var s=(performance||Date).now(),a=s,o=0,c=t(new Ot.Panel("FPS","#0ff","#002")),u=t(new Ot.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var m=t(new Ot.Panel("MB","#f08","#201"));i(0);var d=0;return{REVISION:16,dom:e,fps:function(){return d&&parseInt(d.toFixed(0))},addPanel:t,showPanel:i,begin:function(){s=(performance||Date).now()},end:function(){o++;var n=(performance||Date).now();if(u.update(n-s,200),n>=a+1e3&&(d=o*1e3/(n-a),c.update(d,100),a=n,o=0,m)){var l=performance.memory;m.update(l.usedJSHeapSize/1048576,l.jsHeapSizeLimit/1048576)}return n},update:function(){s=this.end()},domElement:e,setMode:i}};Ot.Panel=function(r,e,t){var i=1/0,s=0,a=Math.round,o=a(window.devicePixelRatio||1),c=80*o,u=48*o,m=3*o,d=2*o,n=3*o,l=15*o,h=74*o,g=30*o,_=document.createElement("canvas");_.width=c,_.height=u,_.style.cssText="width:80px;height:48px";var p=_.getContext("2d");return p.font="bold "+9*o+"px Helvetica,Arial,sans-serif",p.textBaseline="top",p.fillStyle=t,p.fillRect(0,0,c,u),p.fillStyle=e,p.fillText(r,m,d),p.fillRect(n,l,h,g),p.fillStyle=t,p.globalAlpha=.9,p.fillRect(n,l,h,g),{dom:_,update:function(v,y){i=Math.min(i,v),s=Math.max(s,v),p.fillStyle=t,p.globalAlpha=1,p.fillRect(0,0,c,l),p.fillStyle=e,p.fillText(a(v)+" "+r+" ("+a(i)+"-"+a(s)+")",m,d),p.drawImage(_,n+o,l,h-o,g,n,l,h-o,g),p.fillRect(n+h-o,l,o,g),p.fillStyle=t,p.globalAlpha=.9,p.fillRect(n+h-o,l,o,a((1-v/y)*g))}}};function hl(r,e){const t=URL.createObjectURL(r),i=document.createElement("a");i.href=t,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(t)}function Jr(r){return r.length===0?0:r.reduce((t,i)=>t+i,0)/r.length}function rs(r,e){const t=new Blob([r],{type:e});return URL.createObjectURL(t)}function en(){return/Mac|iPod|iPhone|iPad/.test(navigator==null?void 0:navigator.platform)||/Mac OS|iOS/.test(navigator==null?void 0:navigator.userAgent)}function ns(r){let e=document.createElement("canvas");const t=e.getContext("2d");return e.width=r.width,e.height=r.height,t?(t.drawImage(r,0,0),e.toDataURL("image/png",.75)):void 0}function fl(r,e=43){const t=r*Math.PI/180;return e/(2*Math.tan(t/2))}var tn={};/*!
|
|
3682
3689
|
* howler.js v2.2.4
|
|
3683
3690
|
* howlerjs.com
|
|
3684
3691
|
*
|
|
@@ -3686,7 +3693,7 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3686
3693
|
* goldfirestudios.com
|
|
3687
3694
|
*
|
|
3688
3695
|
* MIT License
|
|
3689
|
-
*/(function(n){(function(){var e=function(){this.init()};e.prototype={init:function(){var s=this||t;return s._counter=1e3,s._html5AudioPool=[],s.html5PoolSize=10,s._codecs={},s._howls=[],s._muted=!1,s._volume=1,s._canPlayEvent="canplaythrough",s._navigator=typeof window<"u"&&window.navigator?window.navigator:null,s.masterGain=null,s.noAudio=!1,s.usingWebAudio=!0,s.autoSuspend=!0,s.ctx=null,s.autoUnlock=!0,s._setup(),s},volume:function(s){var a=this||t;if(s=parseFloat(s),a.ctx||p(),typeof s<"u"&&s>=0&&s<=1){if(a._volume=s,a._muted)return a;a.usingWebAudio&&a.masterGain.gain.setValueAtTime(s,t.ctx.currentTime);for(var u=0;u<a._howls.length;u++)if(!a._howls[u]._webAudio)for(var g=a._howls[u]._getSoundIds(),_=0;_<g.length;_++){var f=a._howls[u]._soundById(g[_]);f&&f._node&&(f._node.volume=f._volume*s)}return a}return a._volume},mute:function(s){var a=this||t;a.ctx||p(),a._muted=s,a.usingWebAudio&&a.masterGain.gain.setValueAtTime(s?0:a._volume,t.ctx.currentTime);for(var u=0;u<a._howls.length;u++)if(!a._howls[u]._webAudio)for(var g=a._howls[u]._getSoundIds(),_=0;_<g.length;_++){var f=a._howls[u]._soundById(g[_]);f&&f._node&&(f._node.muted=s?!0:f._muted)}return a},stop:function(){for(var s=this||t,a=0;a<s._howls.length;a++)s._howls[a].stop();return s},unload:function(){for(var s=this||t,a=s._howls.length-1;a>=0;a--)s._howls[a].unload();return s.usingWebAudio&&s.ctx&&typeof s.ctx.close<"u"&&(s.ctx.close(),s.ctx=null,p()),s},codecs:function(s){return(this||t)._codecs[s.replace(/^x-/,"")]},_setup:function(){var s=this||t;if(s.state=s.ctx&&s.ctx.state||"suspended",s._autoSuspend(),!s.usingWebAudio)if(typeof Audio<"u")try{var a=new Audio;typeof a.oncanplaythrough>"u"&&(s._canPlayEvent="canplay")}catch{s.noAudio=!0}else s.noAudio=!0;try{var a=new Audio;a.muted&&(s.noAudio=!0)}catch{}return s.noAudio||s._setupCodecs(),s},_setupCodecs:function(){var s=this||t,a=null;try{a=typeof Audio<"u"?new Audio:null}catch{return s}if(!a||typeof a.canPlayType!="function")return s;var u=a.canPlayType("audio/mpeg;").replace(/^no$/,""),g=s._navigator?s._navigator.userAgent:"",_=g.match(/OPR\/(\d+)/g),f=_&&parseInt(_[0].split("/")[1],10)<33,v=g.indexOf("Safari")!==-1&&g.indexOf("Chrome")===-1,y=g.match(/Version\/(.*?) /),x=v&&y&&parseInt(y[1],10)<15;return s._codecs={mp3:!!(!f&&(u||a.canPlayType("audio/mp3;").replace(/^no$/,""))),mpeg:!!u,opus:!!a.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(a.canPlayType('audio/wav; codecs="1"')||a.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!a.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!a.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(a.canPlayType("audio/x-m4b;")||a.canPlayType("audio/m4b;")||a.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(a.canPlayType("audio/x-mp4;")||a.canPlayType("audio/mp4;")||a.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!!(!x&&a.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!!(!x&&a.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!a.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(a.canPlayType("audio/x-flac;")||a.canPlayType("audio/flac;")).replace(/^no$/,"")},s},_unlockAudio:function(){var s=this||t;if(!(s._audioUnlocked||!s.ctx)){s._audioUnlocked=!1,s.autoUnlock=!1,!s._mobileUnloaded&&s.ctx.sampleRate!==44100&&(s._mobileUnloaded=!0,s.unload()),s._scratchBuffer=s.ctx.createBuffer(1,1,22050);var a=function(u){for(;s._html5AudioPool.length<s.html5PoolSize;)try{var g=new Audio;g._unlocked=!0,s._releaseHtml5Audio(g)}catch{s.noAudio=!0;break}for(var _=0;_<s._howls.length;_++)if(!s._howls[_]._webAudio)for(var f=s._howls[_]._getSoundIds(),v=0;v<f.length;v++){var y=s._howls[_]._soundById(f[v]);y&&y._node&&!y._node._unlocked&&(y._node._unlocked=!0,y._node.load())}s._autoResume();var x=s.ctx.createBufferSource();x.buffer=s._scratchBuffer,x.connect(s.ctx.destination),typeof x.start>"u"?x.noteOn(0):x.start(0),typeof s.ctx.resume=="function"&&s.ctx.resume(),x.onended=function(){x.disconnect(0),s._audioUnlocked=!0,document.removeEventListener("touchstart",a,!0),document.removeEventListener("touchend",a,!0),document.removeEventListener("click",a,!0),document.removeEventListener("keydown",a,!0);for(var w=0;w<s._howls.length;w++)s._howls[w]._emit("unlock")}};return document.addEventListener("touchstart",a,!0),document.addEventListener("touchend",a,!0),document.addEventListener("click",a,!0),document.addEventListener("keydown",a,!0),s}},_obtainHtml5Audio:function(){var s=this||t;if(s._html5AudioPool.length)return s._html5AudioPool.pop();var a=new Audio().play();return a&&typeof Promise<"u"&&(a instanceof Promise||typeof a.then=="function")&&a.catch(function(){console.warn("HTML5 Audio pool exhausted, returning potentially locked audio object.")}),new Audio},_releaseHtml5Audio:function(s){var a=this||t;return s._unlocked&&a._html5AudioPool.push(s),a},_autoSuspend:function(){var s=this;if(!(!s.autoSuspend||!s.ctx||typeof s.ctx.suspend>"u"||!t.usingWebAudio)){for(var a=0;a<s._howls.length;a++)if(s._howls[a]._webAudio){for(var u=0;u<s._howls[a]._sounds.length;u++)if(!s._howls[a]._sounds[u]._paused)return s}return s._suspendTimer&&clearTimeout(s._suspendTimer),s._suspendTimer=setTimeout(function(){if(s.autoSuspend){s._suspendTimer=null,s.state="suspending";var g=function(){s.state="suspended",s._resumeAfterSuspend&&(delete s._resumeAfterSuspend,s._autoResume())};s.ctx.suspend().then(g,g)}},3e4),s}},_autoResume:function(){var s=this;if(!(!s.ctx||typeof s.ctx.resume>"u"||!t.usingWebAudio))return s.state==="running"&&s.ctx.state!=="interrupted"&&s._suspendTimer?(clearTimeout(s._suspendTimer),s._suspendTimer=null):s.state==="suspended"||s.state==="running"&&s.ctx.state==="interrupted"?(s.ctx.resume().then(function(){s.state="running";for(var a=0;a<s._howls.length;a++)s._howls[a]._emit("resume")}),s._suspendTimer&&(clearTimeout(s._suspendTimer),s._suspendTimer=null)):s.state==="suspending"&&(s._resumeAfterSuspend=!0),s}};var t=new e,i=function(s){var a=this;if(!s.src||s.src.length===0){console.error("An array of source files must be passed with any new Howl.");return}a.init(s)};i.prototype={init:function(s){var a=this;return t.ctx||p(),a._autoplay=s.autoplay||!1,a._format=typeof s.format!="string"?s.format:[s.format],a._html5=s.html5||!1,a._muted=s.mute||!1,a._loop=s.loop||!1,a._pool=s.pool||5,a._preload=typeof s.preload=="boolean"||s.preload==="metadata"?s.preload:!0,a._rate=s.rate||1,a._sprite=s.sprite||{},a._src=typeof s.src!="string"?s.src:[s.src],a._volume=s.volume!==void 0?s.volume:1,a._xhr={method:s.xhr&&s.xhr.method?s.xhr.method:"GET",headers:s.xhr&&s.xhr.headers?s.xhr.headers:null,withCredentials:s.xhr&&s.xhr.withCredentials?s.xhr.withCredentials:!1},a._duration=0,a._state="unloaded",a._sounds=[],a._endTimers={},a._queue=[],a._playLock=!1,a._onend=s.onend?[{fn:s.onend}]:[],a._onfade=s.onfade?[{fn:s.onfade}]:[],a._onload=s.onload?[{fn:s.onload}]:[],a._onloaderror=s.onloaderror?[{fn:s.onloaderror}]:[],a._onplayerror=s.onplayerror?[{fn:s.onplayerror}]:[],a._onpause=s.onpause?[{fn:s.onpause}]:[],a._onplay=s.onplay?[{fn:s.onplay}]:[],a._onstop=s.onstop?[{fn:s.onstop}]:[],a._onmute=s.onmute?[{fn:s.onmute}]:[],a._onvolume=s.onvolume?[{fn:s.onvolume}]:[],a._onrate=s.onrate?[{fn:s.onrate}]:[],a._onseek=s.onseek?[{fn:s.onseek}]:[],a._onunlock=s.onunlock?[{fn:s.onunlock}]:[],a._onresume=[],a._webAudio=t.usingWebAudio&&!a._html5,typeof t.ctx<"u"&&t.ctx&&t.autoUnlock&&t._unlockAudio(),t._howls.push(a),a._autoplay&&a._queue.push({event:"play",action:function(){a.play()}}),a._preload&&a._preload!=="none"&&a.load(),a},load:function(){var s=this,a=null;if(t.noAudio){s._emit("loaderror",null,"No audio support.");return}typeof s._src=="string"&&(s._src=[s._src]);for(var u=0;u<s._src.length;u++){var g,_;if(s._format&&s._format[u])g=s._format[u];else{if(_=s._src[u],typeof _!="string"){s._emit("loaderror",null,"Non-string found in selected audio sources - ignoring.");continue}g=/^data:audio\/([^;,]+);/i.exec(_),g||(g=/\.([^.]+)$/.exec(_.split("?",1)[0])),g&&(g=g[1].toLowerCase())}if(g||console.warn('No file extension was found. Consider using the "format" property or specify an extension.'),g&&t.codecs(g)){a=s._src[u];break}}if(!a){s._emit("loaderror",null,"No codec support for selected audio sources.");return}return s._src=a,s._state="loading",window.location.protocol==="https:"&&a.slice(0,5)==="http:"&&(s._html5=!0,s._webAudio=!1),new r(s),s._webAudio&&o(s),s},play:function(s,a){var u=this,g=null;if(typeof s=="number")g=s,s=null;else{if(typeof s=="string"&&u._state==="loaded"&&!u._sprite[s])return null;if(typeof s>"u"&&(s="__default",!u._playLock)){for(var _=0,f=0;f<u._sounds.length;f++)u._sounds[f]._paused&&!u._sounds[f]._ended&&(_++,g=u._sounds[f]._id);_===1?s=null:g=null}}var v=g?u._soundById(g):u._inactiveSound();if(!v)return null;if(g&&!s&&(s=v._sprite||"__default"),u._state!=="loaded"){v._sprite=s,v._ended=!1;var y=v._id;return u._queue.push({event:"play",action:function(){u.play(y)}}),y}if(g&&!v._paused)return a||u._loadQueue("play"),v._id;u._webAudio&&t._autoResume();var x=Math.max(0,v._seek>0?v._seek:u._sprite[s][0]/1e3),w=Math.max(0,(u._sprite[s][0]+u._sprite[s][1])/1e3-x),b=w*1e3/Math.abs(v._rate),C=u._sprite[s][0]/1e3,T=(u._sprite[s][0]+u._sprite[s][1])/1e3;v._sprite=s,v._ended=!1;var S=function(){v._paused=!1,v._seek=x,v._start=C,v._stop=T,v._loop=!!(v._loop||u._sprite[s][2])};if(x>=T){u._ended(v);return}var A=v._node;if(u._webAudio){var P=function(){u._playLock=!1,S(),u._refreshBuffer(v);var E=v._muted||u._muted?0:v._volume;A.gain.setValueAtTime(E,t.ctx.currentTime),v._playStart=t.ctx.currentTime,typeof A.bufferSource.start>"u"?v._loop?A.bufferSource.noteGrainOn(0,x,86400):A.bufferSource.noteGrainOn(0,x,w):v._loop?A.bufferSource.start(0,x,86400):A.bufferSource.start(0,x,w),b!==1/0&&(u._endTimers[v._id]=setTimeout(u._ended.bind(u,v),b)),a||setTimeout(function(){u._emit("play",v._id),u._loadQueue()},0)};t.state==="running"&&t.ctx.state!=="interrupted"?P():(u._playLock=!0,u.once("resume",P),u._clearTimer(v._id))}else{var I=function(){A.currentTime=x,A.muted=v._muted||u._muted||t._muted||A.muted,A.volume=v._volume*t.volume(),A.playbackRate=v._rate;try{var E=A.play();if(E&&typeof Promise<"u"&&(E instanceof Promise||typeof E.then=="function")?(u._playLock=!0,S(),E.then(function(){u._playLock=!1,A._unlocked=!0,a?u._loadQueue():u._emit("play",v._id)}).catch(function(){u._playLock=!1,u._emit("playerror",v._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),v._ended=!0,v._paused=!0})):a||(u._playLock=!1,S(),u._emit("play",v._id)),A.playbackRate=v._rate,A.paused){u._emit("playerror",v._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");return}s!=="__default"||v._loop?u._endTimers[v._id]=setTimeout(u._ended.bind(u,v),b):(u._endTimers[v._id]=function(){u._ended(v),A.removeEventListener("ended",u._endTimers[v._id],!1)},A.addEventListener("ended",u._endTimers[v._id],!1))}catch(F){u._emit("playerror",v._id,F)}};A.src==="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"&&(A.src=u._src,A.load());var M=window&&window.ejecta||!A.readyState&&t._navigator.isCocoonJS;if(A.readyState>=3||M)I();else{u._playLock=!0,u._state="loading";var R=function(){u._state="loaded",I(),A.removeEventListener(t._canPlayEvent,R,!1)};A.addEventListener(t._canPlayEvent,R,!1),u._clearTimer(v._id)}}return v._id},pause:function(s){var a=this;if(a._state!=="loaded"||a._playLock)return a._queue.push({event:"pause",action:function(){a.pause(s)}}),a;for(var u=a._getSoundIds(s),g=0;g<u.length;g++){a._clearTimer(u[g]);var _=a._soundById(u[g]);if(_&&!_._paused&&(_._seek=a.seek(u[g]),_._rateSeek=0,_._paused=!0,a._stopFade(u[g]),_._node))if(a._webAudio){if(!_._node.bufferSource)continue;typeof _._node.bufferSource.stop>"u"?_._node.bufferSource.noteOff(0):_._node.bufferSource.stop(0),a._cleanBuffer(_._node)}else(!isNaN(_._node.duration)||_._node.duration===1/0)&&_._node.pause();arguments[1]||a._emit("pause",_?_._id:null)}return a},stop:function(s,a){var u=this;if(u._state!=="loaded"||u._playLock)return u._queue.push({event:"stop",action:function(){u.stop(s)}}),u;for(var g=u._getSoundIds(s),_=0;_<g.length;_++){u._clearTimer(g[_]);var f=u._soundById(g[_]);f&&(f._seek=f._start||0,f._rateSeek=0,f._paused=!0,f._ended=!0,u._stopFade(g[_]),f._node&&(u._webAudio?f._node.bufferSource&&(typeof f._node.bufferSource.stop>"u"?f._node.bufferSource.noteOff(0):f._node.bufferSource.stop(0),u._cleanBuffer(f._node)):(!isNaN(f._node.duration)||f._node.duration===1/0)&&(f._node.currentTime=f._start||0,f._node.pause(),f._node.duration===1/0&&u._clearSound(f._node))),a||u._emit("stop",f._id))}return u},mute:function(s,a){var u=this;if(u._state!=="loaded"||u._playLock)return u._queue.push({event:"mute",action:function(){u.mute(s,a)}}),u;if(typeof a>"u")if(typeof s=="boolean")u._muted=s;else return u._muted;for(var g=u._getSoundIds(a),_=0;_<g.length;_++){var f=u._soundById(g[_]);f&&(f._muted=s,f._interval&&u._stopFade(f._id),u._webAudio&&f._node?f._node.gain.setValueAtTime(s?0:f._volume,t.ctx.currentTime):f._node&&(f._node.muted=t._muted?!0:s),u._emit("mute",f._id))}return u},volume:function(){var s=this,a=arguments,u,g;if(a.length===0)return s._volume;if(a.length===1||a.length===2&&typeof a[1]>"u"){var _=s._getSoundIds(),f=_.indexOf(a[0]);f>=0?g=parseInt(a[0],10):u=parseFloat(a[0])}else a.length>=2&&(u=parseFloat(a[0]),g=parseInt(a[1],10));var v;if(typeof u<"u"&&u>=0&&u<=1){if(s._state!=="loaded"||s._playLock)return s._queue.push({event:"volume",action:function(){s.volume.apply(s,a)}}),s;typeof g>"u"&&(s._volume=u),g=s._getSoundIds(g);for(var y=0;y<g.length;y++)v=s._soundById(g[y]),v&&(v._volume=u,a[2]||s._stopFade(g[y]),s._webAudio&&v._node&&!v._muted?v._node.gain.setValueAtTime(u,t.ctx.currentTime):v._node&&!v._muted&&(v._node.volume=u*t.volume()),s._emit("volume",v._id))}else return v=g?s._soundById(g):s._sounds[0],v?v._volume:0;return s},fade:function(s,a,u,g){var _=this;if(_._state!=="loaded"||_._playLock)return _._queue.push({event:"fade",action:function(){_.fade(s,a,u,g)}}),_;s=Math.min(Math.max(0,parseFloat(s)),1),a=Math.min(Math.max(0,parseFloat(a)),1),u=parseFloat(u),_.volume(s,g);for(var f=_._getSoundIds(g),v=0;v<f.length;v++){var y=_._soundById(f[v]);if(y){if(g||_._stopFade(f[v]),_._webAudio&&!y._muted){var x=t.ctx.currentTime,w=x+u/1e3;y._volume=s,y._node.gain.setValueAtTime(s,x),y._node.gain.linearRampToValueAtTime(a,w)}_._startFadeInterval(y,s,a,u,f[v],typeof g>"u")}}return _},_startFadeInterval:function(s,a,u,g,_,f){var v=this,y=a,x=u-a,w=Math.abs(x/.01),b=Math.max(4,w>0?g/w:g),C=Date.now();s._fadeTo=u,s._interval=setInterval(function(){var T=(Date.now()-C)/g;C=Date.now(),y+=x*T,y=Math.round(y*100)/100,x<0?y=Math.max(u,y):y=Math.min(u,y),v._webAudio?s._volume=y:v.volume(y,s._id,!0),f&&(v._volume=y),(u<a&&y<=u||u>a&&y>=u)&&(clearInterval(s._interval),s._interval=null,s._fadeTo=null,v.volume(u,s._id),v._emit("fade",s._id))},b)},_stopFade:function(s){var a=this,u=a._soundById(s);return u&&u._interval&&(a._webAudio&&u._node.gain.cancelScheduledValues(t.ctx.currentTime),clearInterval(u._interval),u._interval=null,a.volume(u._fadeTo,s),u._fadeTo=null,a._emit("fade",s)),a},loop:function(){var s=this,a=arguments,u,g,_;if(a.length===0)return s._loop;if(a.length===1)if(typeof a[0]=="boolean")u=a[0],s._loop=u;else return _=s._soundById(parseInt(a[0],10)),_?_._loop:!1;else a.length===2&&(u=a[0],g=parseInt(a[1],10));for(var f=s._getSoundIds(g),v=0;v<f.length;v++)_=s._soundById(f[v]),_&&(_._loop=u,s._webAudio&&_._node&&_._node.bufferSource&&(_._node.bufferSource.loop=u,u&&(_._node.bufferSource.loopStart=_._start||0,_._node.bufferSource.loopEnd=_._stop,s.playing(f[v])&&(s.pause(f[v],!0),s.play(f[v],!0)))));return s},rate:function(){var s=this,a=arguments,u,g;if(a.length===0)g=s._sounds[0]._id;else if(a.length===1){var _=s._getSoundIds(),f=_.indexOf(a[0]);f>=0?g=parseInt(a[0],10):u=parseFloat(a[0])}else a.length===2&&(u=parseFloat(a[0]),g=parseInt(a[1],10));var v;if(typeof u=="number"){if(s._state!=="loaded"||s._playLock)return s._queue.push({event:"rate",action:function(){s.rate.apply(s,a)}}),s;typeof g>"u"&&(s._rate=u),g=s._getSoundIds(g);for(var y=0;y<g.length;y++)if(v=s._soundById(g[y]),v){s.playing(g[y])&&(v._rateSeek=s.seek(g[y]),v._playStart=s._webAudio?t.ctx.currentTime:v._playStart),v._rate=u,s._webAudio&&v._node&&v._node.bufferSource?v._node.bufferSource.playbackRate.setValueAtTime(u,t.ctx.currentTime):v._node&&(v._node.playbackRate=u);var x=s.seek(g[y]),w=(s._sprite[v._sprite][0]+s._sprite[v._sprite][1])/1e3-x,b=w*1e3/Math.abs(v._rate);(s._endTimers[g[y]]||!v._paused)&&(s._clearTimer(g[y]),s._endTimers[g[y]]=setTimeout(s._ended.bind(s,v),b)),s._emit("rate",v._id)}}else return v=s._soundById(g),v?v._rate:s._rate;return s},seek:function(){var s=this,a=arguments,u,g;if(a.length===0)s._sounds.length&&(g=s._sounds[0]._id);else if(a.length===1){var _=s._getSoundIds(),f=_.indexOf(a[0]);f>=0?g=parseInt(a[0],10):s._sounds.length&&(g=s._sounds[0]._id,u=parseFloat(a[0]))}else a.length===2&&(u=parseFloat(a[0]),g=parseInt(a[1],10));if(typeof g>"u")return 0;if(typeof u=="number"&&(s._state!=="loaded"||s._playLock))return s._queue.push({event:"seek",action:function(){s.seek.apply(s,a)}}),s;var v=s._soundById(g);if(v)if(typeof u=="number"&&u>=0){var y=s.playing(g);y&&s.pause(g,!0),v._seek=u,v._ended=!1,s._clearTimer(g),!s._webAudio&&v._node&&!isNaN(v._node.duration)&&(v._node.currentTime=u);var x=function(){y&&s.play(g,!0),s._emit("seek",g)};if(y&&!s._webAudio){var w=function(){s._playLock?setTimeout(w,0):x()};setTimeout(w,0)}else x()}else if(s._webAudio){var b=s.playing(g)?t.ctx.currentTime-v._playStart:0,C=v._rateSeek?v._rateSeek-v._seek:0;return v._seek+(C+b*Math.abs(v._rate))}else return v._node.currentTime;return s},playing:function(s){var a=this;if(typeof s=="number"){var u=a._soundById(s);return u?!u._paused:!1}for(var g=0;g<a._sounds.length;g++)if(!a._sounds[g]._paused)return!0;return!1},duration:function(s){var a=this,u=a._duration,g=a._soundById(s);return g&&(u=a._sprite[g._sprite][1]/1e3),u},state:function(){return this._state},unload:function(){for(var s=this,a=s._sounds,u=0;u<a.length;u++)a[u]._paused||s.stop(a[u]._id),s._webAudio||(s._clearSound(a[u]._node),a[u]._node.removeEventListener("error",a[u]._errorFn,!1),a[u]._node.removeEventListener(t._canPlayEvent,a[u]._loadFn,!1),a[u]._node.removeEventListener("ended",a[u]._endFn,!1),t._releaseHtml5Audio(a[u]._node)),delete a[u]._node,s._clearTimer(a[u]._id);var g=t._howls.indexOf(s);g>=0&&t._howls.splice(g,1);var _=!0;for(u=0;u<t._howls.length;u++)if(t._howls[u]._src===s._src||s._src.indexOf(t._howls[u]._src)>=0){_=!1;break}return l&&_&&delete l[s._src],t.noAudio=!1,s._state="unloaded",s._sounds=[],s=null,null},on:function(s,a,u,g){var _=this,f=_["_on"+s];return typeof a=="function"&&f.push(g?{id:u,fn:a,once:g}:{id:u,fn:a}),_},off:function(s,a,u){var g=this,_=g["_on"+s],f=0;if(typeof a=="number"&&(u=a,a=null),a||u)for(f=0;f<_.length;f++){var v=u===_[f].id;if(a===_[f].fn&&v||!a&&v){_.splice(f,1);break}}else if(s)g["_on"+s]=[];else{var y=Object.keys(g);for(f=0;f<y.length;f++)y[f].indexOf("_on")===0&&Array.isArray(g[y[f]])&&(g[y[f]]=[])}return g},once:function(s,a,u){var g=this;return g.on(s,a,u,1),g},_emit:function(s,a,u){for(var g=this,_=g["_on"+s],f=_.length-1;f>=0;f--)(!_[f].id||_[f].id===a||s==="load")&&(setTimeout((function(v){v.call(this,a,u)}).bind(g,_[f].fn),0),_[f].once&&g.off(s,_[f].fn,_[f].id));return g._loadQueue(s),g},_loadQueue:function(s){var a=this;if(a._queue.length>0){var u=a._queue[0];u.event===s&&(a._queue.shift(),a._loadQueue()),s||u.action()}return a},_ended:function(s){var a=this,u=s._sprite;if(!a._webAudio&&s._node&&!s._node.paused&&!s._node.ended&&s._node.currentTime<s._stop)return setTimeout(a._ended.bind(a,s),100),a;var g=!!(s._loop||a._sprite[u][2]);if(a._emit("end",s._id),!a._webAudio&&g&&a.stop(s._id,!0).play(s._id),a._webAudio&&g){a._emit("play",s._id),s._seek=s._start||0,s._rateSeek=0,s._playStart=t.ctx.currentTime;var _=(s._stop-s._start)*1e3/Math.abs(s._rate);a._endTimers[s._id]=setTimeout(a._ended.bind(a,s),_)}return a._webAudio&&!g&&(s._paused=!0,s._ended=!0,s._seek=s._start||0,s._rateSeek=0,a._clearTimer(s._id),a._cleanBuffer(s._node),t._autoSuspend()),!a._webAudio&&!g&&a.stop(s._id,!0),a},_clearTimer:function(s){var a=this;if(a._endTimers[s]){if(typeof a._endTimers[s]!="function")clearTimeout(a._endTimers[s]);else{var u=a._soundById(s);u&&u._node&&u._node.removeEventListener("ended",a._endTimers[s],!1)}delete a._endTimers[s]}return a},_soundById:function(s){for(var a=this,u=0;u<a._sounds.length;u++)if(s===a._sounds[u]._id)return a._sounds[u];return null},_inactiveSound:function(){var s=this;s._drain();for(var a=0;a<s._sounds.length;a++)if(s._sounds[a]._ended)return s._sounds[a].reset();return new r(s)},_drain:function(){var s=this,a=s._pool,u=0,g=0;if(!(s._sounds.length<a)){for(g=0;g<s._sounds.length;g++)s._sounds[g]._ended&&u++;for(g=s._sounds.length-1;g>=0;g--){if(u<=a)return;s._sounds[g]._ended&&(s._webAudio&&s._sounds[g]._node&&s._sounds[g]._node.disconnect(0),s._sounds.splice(g,1),u--)}}},_getSoundIds:function(s){var a=this;if(typeof s>"u"){for(var u=[],g=0;g<a._sounds.length;g++)u.push(a._sounds[g]._id);return u}else return[s]},_refreshBuffer:function(s){var a=this;return s._node.bufferSource=t.ctx.createBufferSource(),s._node.bufferSource.buffer=l[a._src],s._panner?s._node.bufferSource.connect(s._panner):s._node.bufferSource.connect(s._node),s._node.bufferSource.loop=s._loop,s._loop&&(s._node.bufferSource.loopStart=s._start||0,s._node.bufferSource.loopEnd=s._stop||0),s._node.bufferSource.playbackRate.setValueAtTime(s._rate,t.ctx.currentTime),a},_cleanBuffer:function(s){var a=this,u=t._navigator&&t._navigator.vendor.indexOf("Apple")>=0;if(!s.bufferSource)return a;if(t._scratchBuffer&&s.bufferSource&&(s.bufferSource.onended=null,s.bufferSource.disconnect(0),u))try{s.bufferSource.buffer=t._scratchBuffer}catch{}return s.bufferSource=null,a},_clearSound:function(s){var a=/MSIE |Trident\//.test(t._navigator&&t._navigator.userAgent);a||(s.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA")}};var r=function(s){this._parent=s,this.init()};r.prototype={init:function(){var s=this,a=s._parent;return s._muted=a._muted,s._loop=a._loop,s._volume=a._volume,s._rate=a._rate,s._seek=0,s._paused=!0,s._ended=!0,s._sprite="__default",s._id=++t._counter,a._sounds.push(s),s.create(),s},create:function(){var s=this,a=s._parent,u=t._muted||s._muted||s._parent._muted?0:s._volume;return a._webAudio?(s._node=typeof t.ctx.createGain>"u"?t.ctx.createGainNode():t.ctx.createGain(),s._node.gain.setValueAtTime(u,t.ctx.currentTime),s._node.paused=!0,s._node.connect(t.masterGain)):t.noAudio||(s._node=t._obtainHtml5Audio(),s._errorFn=s._errorListener.bind(s),s._node.addEventListener("error",s._errorFn,!1),s._loadFn=s._loadListener.bind(s),s._node.addEventListener(t._canPlayEvent,s._loadFn,!1),s._endFn=s._endListener.bind(s),s._node.addEventListener("ended",s._endFn,!1),s._node.src=a._src,s._node.preload=a._preload===!0?"auto":a._preload,s._node.volume=u*t.volume(),s._node.load()),s},reset:function(){var s=this,a=s._parent;return s._muted=a._muted,s._loop=a._loop,s._volume=a._volume,s._rate=a._rate,s._seek=0,s._rateSeek=0,s._paused=!0,s._ended=!0,s._sprite="__default",s._id=++t._counter,s},_errorListener:function(){var s=this;s._parent._emit("loaderror",s._id,s._node.error?s._node.error.code:0),s._node.removeEventListener("error",s._errorFn,!1)},_loadListener:function(){var s=this,a=s._parent;a._duration=Math.ceil(s._node.duration*10)/10,Object.keys(a._sprite).length===0&&(a._sprite={__default:[0,a._duration*1e3]}),a._state!=="loaded"&&(a._state="loaded",a._emit("load"),a._loadQueue()),s._node.removeEventListener(t._canPlayEvent,s._loadFn,!1)},_endListener:function(){var s=this,a=s._parent;a._duration===1/0&&(a._duration=Math.ceil(s._node.duration*10)/10,a._sprite.__default[1]===1/0&&(a._sprite.__default[1]=a._duration*1e3),a._ended(s)),s._node.removeEventListener("ended",s._endFn,!1)}};var l={},o=function(s){var a=s._src;if(l[a]){s._duration=l[a].duration,m(s);return}if(/^data:[^;]+;base64,/.test(a)){for(var u=atob(a.split(",")[1]),g=new Uint8Array(u.length),_=0;_<u.length;++_)g[_]=u.charCodeAt(_);h(g.buffer,s)}else{var f=new XMLHttpRequest;f.open(s._xhr.method,a,!0),f.withCredentials=s._xhr.withCredentials,f.responseType="arraybuffer",s._xhr.headers&&Object.keys(s._xhr.headers).forEach(function(v){f.setRequestHeader(v,s._xhr.headers[v])}),f.onload=function(){var v=(f.status+"")[0];if(v!=="0"&&v!=="2"&&v!=="3"){s._emit("loaderror",null,"Failed loading audio file with status: "+f.status+".");return}h(f.response,s)},f.onerror=function(){s._webAudio&&(s._html5=!0,s._webAudio=!1,s._sounds=[],delete l[a],s.load())},c(f)}},c=function(s){try{s.send()}catch{s.onerror()}},h=function(s,a){var u=function(){a._emit("loaderror",null,"Decoding audio data failed.")},g=function(_){_&&a._sounds.length>0?(l[a._src]=_,m(a,_)):u()};typeof Promise<"u"&&t.ctx.decodeAudioData.length===1?t.ctx.decodeAudioData(s).then(g).catch(u):t.ctx.decodeAudioData(s,g,u)},m=function(s,a){a&&!s._duration&&(s._duration=a.duration),Object.keys(s._sprite).length===0&&(s._sprite={__default:[0,s._duration*1e3]}),s._state!=="loaded"&&(s._state="loaded",s._emit("load"),s._loadQueue())},p=function(){if(t.usingWebAudio){try{typeof AudioContext<"u"?t.ctx=new AudioContext:typeof webkitAudioContext<"u"?t.ctx=new webkitAudioContext:t.usingWebAudio=!1}catch{t.usingWebAudio=!1}t.ctx||(t.usingWebAudio=!1);var s=/iP(hone|od|ad)/.test(t._navigator&&t._navigator.platform),a=t._navigator&&t._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),u=a?parseInt(a[1],10):null;if(s&&u&&u<9){var g=/safari/.test(t._navigator&&t._navigator.userAgent.toLowerCase());t._navigator&&!g&&(t.usingWebAudio=!1)}t.usingWebAudio&&(t.masterGain=typeof t.ctx.createGain>"u"?t.ctx.createGainNode():t.ctx.createGain(),t.masterGain.gain.setValueAtTime(t._muted?0:t._volume,t.ctx.currentTime),t.masterGain.connect(t.ctx.destination)),t._setup()}};n.Howler=t,n.Howl=i,typeof Ze<"u"?(Ze.HowlerGlobal=e,Ze.Howler=t,Ze.Howl=i,Ze.Sound=r):typeof window<"u"&&(window.HowlerGlobal=e,window.Howler=t,window.Howl=i,window.Sound=r)})();/*!
|
|
3696
|
+
*/(function(r){(function(){var e=function(){this.init()};e.prototype={init:function(){var n=this||t;return n._counter=1e3,n._html5AudioPool=[],n.html5PoolSize=10,n._codecs={},n._howls=[],n._muted=!1,n._volume=1,n._canPlayEvent="canplaythrough",n._navigator=typeof window<"u"&&window.navigator?window.navigator:null,n.masterGain=null,n.noAudio=!1,n.usingWebAudio=!0,n.autoSuspend=!0,n.ctx=null,n.autoUnlock=!0,n._setup(),n},volume:function(n){var l=this||t;if(n=parseFloat(n),l.ctx||d(),typeof n<"u"&&n>=0&&n<=1){if(l._volume=n,l._muted)return l;l.usingWebAudio&&l.masterGain.gain.setValueAtTime(n,t.ctx.currentTime);for(var h=0;h<l._howls.length;h++)if(!l._howls[h]._webAudio)for(var g=l._howls[h]._getSoundIds(),_=0;_<g.length;_++){var p=l._howls[h]._soundById(g[_]);p&&p._node&&(p._node.volume=p._volume*n)}return l}return l._volume},mute:function(n){var l=this||t;l.ctx||d(),l._muted=n,l.usingWebAudio&&l.masterGain.gain.setValueAtTime(n?0:l._volume,t.ctx.currentTime);for(var h=0;h<l._howls.length;h++)if(!l._howls[h]._webAudio)for(var g=l._howls[h]._getSoundIds(),_=0;_<g.length;_++){var p=l._howls[h]._soundById(g[_]);p&&p._node&&(p._node.muted=n?!0:p._muted)}return l},stop:function(){for(var n=this||t,l=0;l<n._howls.length;l++)n._howls[l].stop();return n},unload:function(){for(var n=this||t,l=n._howls.length-1;l>=0;l--)n._howls[l].unload();return n.usingWebAudio&&n.ctx&&typeof n.ctx.close<"u"&&(n.ctx.close(),n.ctx=null,d()),n},codecs:function(n){return(this||t)._codecs[n.replace(/^x-/,"")]},_setup:function(){var n=this||t;if(n.state=n.ctx&&n.ctx.state||"suspended",n._autoSuspend(),!n.usingWebAudio)if(typeof Audio<"u")try{var l=new Audio;typeof l.oncanplaythrough>"u"&&(n._canPlayEvent="canplay")}catch{n.noAudio=!0}else n.noAudio=!0;try{var l=new Audio;l.muted&&(n.noAudio=!0)}catch{}return n.noAudio||n._setupCodecs(),n},_setupCodecs:function(){var n=this||t,l=null;try{l=typeof Audio<"u"?new Audio:null}catch{return n}if(!l||typeof l.canPlayType!="function")return n;var h=l.canPlayType("audio/mpeg;").replace(/^no$/,""),g=n._navigator?n._navigator.userAgent:"",_=g.match(/OPR\/(\d+)/g),p=_&&parseInt(_[0].split("/")[1],10)<33,v=g.indexOf("Safari")!==-1&&g.indexOf("Chrome")===-1,y=g.match(/Version\/(.*?) /),x=v&&y&&parseInt(y[1],10)<15;return n._codecs={mp3:!!(!p&&(h||l.canPlayType("audio/mp3;").replace(/^no$/,""))),mpeg:!!h,opus:!!l.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!l.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!l.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(l.canPlayType('audio/wav; codecs="1"')||l.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!l.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!l.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(l.canPlayType("audio/x-m4a;")||l.canPlayType("audio/m4a;")||l.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(l.canPlayType("audio/x-m4b;")||l.canPlayType("audio/m4b;")||l.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(l.canPlayType("audio/x-mp4;")||l.canPlayType("audio/mp4;")||l.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!!(!x&&l.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!!(!x&&l.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!l.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(l.canPlayType("audio/x-flac;")||l.canPlayType("audio/flac;")).replace(/^no$/,"")},n},_unlockAudio:function(){var n=this||t;if(!(n._audioUnlocked||!n.ctx)){n._audioUnlocked=!1,n.autoUnlock=!1,!n._mobileUnloaded&&n.ctx.sampleRate!==44100&&(n._mobileUnloaded=!0,n.unload()),n._scratchBuffer=n.ctx.createBuffer(1,1,22050);var l=function(h){for(;n._html5AudioPool.length<n.html5PoolSize;)try{var g=new Audio;g._unlocked=!0,n._releaseHtml5Audio(g)}catch{n.noAudio=!0;break}for(var _=0;_<n._howls.length;_++)if(!n._howls[_]._webAudio)for(var p=n._howls[_]._getSoundIds(),v=0;v<p.length;v++){var y=n._howls[_]._soundById(p[v]);y&&y._node&&!y._node._unlocked&&(y._node._unlocked=!0,y._node.load())}n._autoResume();var x=n.ctx.createBufferSource();x.buffer=n._scratchBuffer,x.connect(n.ctx.destination),typeof x.start>"u"?x.noteOn(0):x.start(0),typeof n.ctx.resume=="function"&&n.ctx.resume(),x.onended=function(){x.disconnect(0),n._audioUnlocked=!0,document.removeEventListener("touchstart",l,!0),document.removeEventListener("touchend",l,!0),document.removeEventListener("click",l,!0),document.removeEventListener("keydown",l,!0);for(var w=0;w<n._howls.length;w++)n._howls[w]._emit("unlock")}};return document.addEventListener("touchstart",l,!0),document.addEventListener("touchend",l,!0),document.addEventListener("click",l,!0),document.addEventListener("keydown",l,!0),n}},_obtainHtml5Audio:function(){var n=this||t;if(n._html5AudioPool.length)return n._html5AudioPool.pop();var l=new Audio().play();return l&&typeof Promise<"u"&&(l instanceof Promise||typeof l.then=="function")&&l.catch(function(){console.warn("HTML5 Audio pool exhausted, returning potentially locked audio object.")}),new Audio},_releaseHtml5Audio:function(n){var l=this||t;return n._unlocked&&l._html5AudioPool.push(n),l},_autoSuspend:function(){var n=this;if(!(!n.autoSuspend||!n.ctx||typeof n.ctx.suspend>"u"||!t.usingWebAudio)){for(var l=0;l<n._howls.length;l++)if(n._howls[l]._webAudio){for(var h=0;h<n._howls[l]._sounds.length;h++)if(!n._howls[l]._sounds[h]._paused)return n}return n._suspendTimer&&clearTimeout(n._suspendTimer),n._suspendTimer=setTimeout(function(){if(n.autoSuspend){n._suspendTimer=null,n.state="suspending";var g=function(){n.state="suspended",n._resumeAfterSuspend&&(delete n._resumeAfterSuspend,n._autoResume())};n.ctx.suspend().then(g,g)}},3e4),n}},_autoResume:function(){var n=this;if(!(!n.ctx||typeof n.ctx.resume>"u"||!t.usingWebAudio))return n.state==="running"&&n.ctx.state!=="interrupted"&&n._suspendTimer?(clearTimeout(n._suspendTimer),n._suspendTimer=null):n.state==="suspended"||n.state==="running"&&n.ctx.state==="interrupted"?(n.ctx.resume().then(function(){n.state="running";for(var l=0;l<n._howls.length;l++)n._howls[l]._emit("resume")}),n._suspendTimer&&(clearTimeout(n._suspendTimer),n._suspendTimer=null)):n.state==="suspending"&&(n._resumeAfterSuspend=!0),n}};var t=new e,i=function(n){var l=this;if(!n.src||n.src.length===0){console.error("An array of source files must be passed with any new Howl.");return}l.init(n)};i.prototype={init:function(n){var l=this;return t.ctx||d(),l._autoplay=n.autoplay||!1,l._format=typeof n.format!="string"?n.format:[n.format],l._html5=n.html5||!1,l._muted=n.mute||!1,l._loop=n.loop||!1,l._pool=n.pool||5,l._preload=typeof n.preload=="boolean"||n.preload==="metadata"?n.preload:!0,l._rate=n.rate||1,l._sprite=n.sprite||{},l._src=typeof n.src!="string"?n.src:[n.src],l._volume=n.volume!==void 0?n.volume:1,l._xhr={method:n.xhr&&n.xhr.method?n.xhr.method:"GET",headers:n.xhr&&n.xhr.headers?n.xhr.headers:null,withCredentials:n.xhr&&n.xhr.withCredentials?n.xhr.withCredentials:!1},l._duration=0,l._state="unloaded",l._sounds=[],l._endTimers={},l._queue=[],l._playLock=!1,l._onend=n.onend?[{fn:n.onend}]:[],l._onfade=n.onfade?[{fn:n.onfade}]:[],l._onload=n.onload?[{fn:n.onload}]:[],l._onloaderror=n.onloaderror?[{fn:n.onloaderror}]:[],l._onplayerror=n.onplayerror?[{fn:n.onplayerror}]:[],l._onpause=n.onpause?[{fn:n.onpause}]:[],l._onplay=n.onplay?[{fn:n.onplay}]:[],l._onstop=n.onstop?[{fn:n.onstop}]:[],l._onmute=n.onmute?[{fn:n.onmute}]:[],l._onvolume=n.onvolume?[{fn:n.onvolume}]:[],l._onrate=n.onrate?[{fn:n.onrate}]:[],l._onseek=n.onseek?[{fn:n.onseek}]:[],l._onunlock=n.onunlock?[{fn:n.onunlock}]:[],l._onresume=[],l._webAudio=t.usingWebAudio&&!l._html5,typeof t.ctx<"u"&&t.ctx&&t.autoUnlock&&t._unlockAudio(),t._howls.push(l),l._autoplay&&l._queue.push({event:"play",action:function(){l.play()}}),l._preload&&l._preload!=="none"&&l.load(),l},load:function(){var n=this,l=null;if(t.noAudio){n._emit("loaderror",null,"No audio support.");return}typeof n._src=="string"&&(n._src=[n._src]);for(var h=0;h<n._src.length;h++){var g,_;if(n._format&&n._format[h])g=n._format[h];else{if(_=n._src[h],typeof _!="string"){n._emit("loaderror",null,"Non-string found in selected audio sources - ignoring.");continue}g=/^data:audio\/([^;,]+);/i.exec(_),g||(g=/\.([^.]+)$/.exec(_.split("?",1)[0])),g&&(g=g[1].toLowerCase())}if(g||console.warn('No file extension was found. Consider using the "format" property or specify an extension.'),g&&t.codecs(g)){l=n._src[h];break}}if(!l){n._emit("loaderror",null,"No codec support for selected audio sources.");return}return n._src=l,n._state="loading",window.location.protocol==="https:"&&l.slice(0,5)==="http:"&&(n._html5=!0,n._webAudio=!1),new s(n),n._webAudio&&o(n),n},play:function(n,l){var h=this,g=null;if(typeof n=="number")g=n,n=null;else{if(typeof n=="string"&&h._state==="loaded"&&!h._sprite[n])return null;if(typeof n>"u"&&(n="__default",!h._playLock)){for(var _=0,p=0;p<h._sounds.length;p++)h._sounds[p]._paused&&!h._sounds[p]._ended&&(_++,g=h._sounds[p]._id);_===1?n=null:g=null}}var v=g?h._soundById(g):h._inactiveSound();if(!v)return null;if(g&&!n&&(n=v._sprite||"__default"),h._state!=="loaded"){v._sprite=n,v._ended=!1;var y=v._id;return h._queue.push({event:"play",action:function(){h.play(y)}}),y}if(g&&!v._paused)return l||h._loadQueue("play"),v._id;h._webAudio&&t._autoResume();var x=Math.max(0,v._seek>0?v._seek:h._sprite[n][0]/1e3),w=Math.max(0,(h._sprite[n][0]+h._sprite[n][1])/1e3-x),b=w*1e3/Math.abs(v._rate),T=h._sprite[n][0]/1e3,M=(h._sprite[n][0]+h._sprite[n][1])/1e3;v._sprite=n,v._ended=!1;var S=function(){v._paused=!1,v._seek=x,v._start=T,v._stop=M,v._loop=!!(v._loop||h._sprite[n][2])};if(x>=M){h._ended(v);return}var C=v._node;if(h._webAudio){var R=function(){h._playLock=!1,S(),h._refreshBuffer(v);var I=v._muted||h._muted?0:v._volume;C.gain.setValueAtTime(I,t.ctx.currentTime),v._playStart=t.ctx.currentTime,typeof C.bufferSource.start>"u"?v._loop?C.bufferSource.noteGrainOn(0,x,86400):C.bufferSource.noteGrainOn(0,x,w):v._loop?C.bufferSource.start(0,x,86400):C.bufferSource.start(0,x,w),b!==1/0&&(h._endTimers[v._id]=setTimeout(h._ended.bind(h,v),b)),l||setTimeout(function(){h._emit("play",v._id),h._loadQueue()},0)};t.state==="running"&&t.ctx.state!=="interrupted"?R():(h._playLock=!0,h.once("resume",R),h._clearTimer(v._id))}else{var E=function(){C.currentTime=x,C.muted=v._muted||h._muted||t._muted||C.muted,C.volume=v._volume*t.volume(),C.playbackRate=v._rate;try{var I=C.play();if(I&&typeof Promise<"u"&&(I instanceof Promise||typeof I.then=="function")?(h._playLock=!0,S(),I.then(function(){h._playLock=!1,C._unlocked=!0,l?h._loadQueue():h._emit("play",v._id)}).catch(function(){h._playLock=!1,h._emit("playerror",v._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),v._ended=!0,v._paused=!0})):l||(h._playLock=!1,S(),h._emit("play",v._id)),C.playbackRate=v._rate,C.paused){h._emit("playerror",v._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");return}n!=="__default"||v._loop?h._endTimers[v._id]=setTimeout(h._ended.bind(h,v),b):(h._endTimers[v._id]=function(){h._ended(v),C.removeEventListener("ended",h._endTimers[v._id],!1)},C.addEventListener("ended",h._endTimers[v._id],!1))}catch(L){h._emit("playerror",v._id,L)}};C.src==="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"&&(C.src=h._src,C.load());var A=window&&window.ejecta||!C.readyState&&t._navigator.isCocoonJS;if(C.readyState>=3||A)E();else{h._playLock=!0,h._state="loading";var P=function(){h._state="loaded",E(),C.removeEventListener(t._canPlayEvent,P,!1)};C.addEventListener(t._canPlayEvent,P,!1),h._clearTimer(v._id)}}return v._id},pause:function(n){var l=this;if(l._state!=="loaded"||l._playLock)return l._queue.push({event:"pause",action:function(){l.pause(n)}}),l;for(var h=l._getSoundIds(n),g=0;g<h.length;g++){l._clearTimer(h[g]);var _=l._soundById(h[g]);if(_&&!_._paused&&(_._seek=l.seek(h[g]),_._rateSeek=0,_._paused=!0,l._stopFade(h[g]),_._node))if(l._webAudio){if(!_._node.bufferSource)continue;typeof _._node.bufferSource.stop>"u"?_._node.bufferSource.noteOff(0):_._node.bufferSource.stop(0),l._cleanBuffer(_._node)}else(!isNaN(_._node.duration)||_._node.duration===1/0)&&_._node.pause();arguments[1]||l._emit("pause",_?_._id:null)}return l},stop:function(n,l){var h=this;if(h._state!=="loaded"||h._playLock)return h._queue.push({event:"stop",action:function(){h.stop(n)}}),h;for(var g=h._getSoundIds(n),_=0;_<g.length;_++){h._clearTimer(g[_]);var p=h._soundById(g[_]);p&&(p._seek=p._start||0,p._rateSeek=0,p._paused=!0,p._ended=!0,h._stopFade(g[_]),p._node&&(h._webAudio?p._node.bufferSource&&(typeof p._node.bufferSource.stop>"u"?p._node.bufferSource.noteOff(0):p._node.bufferSource.stop(0),h._cleanBuffer(p._node)):(!isNaN(p._node.duration)||p._node.duration===1/0)&&(p._node.currentTime=p._start||0,p._node.pause(),p._node.duration===1/0&&h._clearSound(p._node))),l||h._emit("stop",p._id))}return h},mute:function(n,l){var h=this;if(h._state!=="loaded"||h._playLock)return h._queue.push({event:"mute",action:function(){h.mute(n,l)}}),h;if(typeof l>"u")if(typeof n=="boolean")h._muted=n;else return h._muted;for(var g=h._getSoundIds(l),_=0;_<g.length;_++){var p=h._soundById(g[_]);p&&(p._muted=n,p._interval&&h._stopFade(p._id),h._webAudio&&p._node?p._node.gain.setValueAtTime(n?0:p._volume,t.ctx.currentTime):p._node&&(p._node.muted=t._muted?!0:n),h._emit("mute",p._id))}return h},volume:function(){var n=this,l=arguments,h,g;if(l.length===0)return n._volume;if(l.length===1||l.length===2&&typeof l[1]>"u"){var _=n._getSoundIds(),p=_.indexOf(l[0]);p>=0?g=parseInt(l[0],10):h=parseFloat(l[0])}else l.length>=2&&(h=parseFloat(l[0]),g=parseInt(l[1],10));var v;if(typeof h<"u"&&h>=0&&h<=1){if(n._state!=="loaded"||n._playLock)return n._queue.push({event:"volume",action:function(){n.volume.apply(n,l)}}),n;typeof g>"u"&&(n._volume=h),g=n._getSoundIds(g);for(var y=0;y<g.length;y++)v=n._soundById(g[y]),v&&(v._volume=h,l[2]||n._stopFade(g[y]),n._webAudio&&v._node&&!v._muted?v._node.gain.setValueAtTime(h,t.ctx.currentTime):v._node&&!v._muted&&(v._node.volume=h*t.volume()),n._emit("volume",v._id))}else return v=g?n._soundById(g):n._sounds[0],v?v._volume:0;return n},fade:function(n,l,h,g){var _=this;if(_._state!=="loaded"||_._playLock)return _._queue.push({event:"fade",action:function(){_.fade(n,l,h,g)}}),_;n=Math.min(Math.max(0,parseFloat(n)),1),l=Math.min(Math.max(0,parseFloat(l)),1),h=parseFloat(h),_.volume(n,g);for(var p=_._getSoundIds(g),v=0;v<p.length;v++){var y=_._soundById(p[v]);if(y){if(g||_._stopFade(p[v]),_._webAudio&&!y._muted){var x=t.ctx.currentTime,w=x+h/1e3;y._volume=n,y._node.gain.setValueAtTime(n,x),y._node.gain.linearRampToValueAtTime(l,w)}_._startFadeInterval(y,n,l,h,p[v],typeof g>"u")}}return _},_startFadeInterval:function(n,l,h,g,_,p){var v=this,y=l,x=h-l,w=Math.abs(x/.01),b=Math.max(4,w>0?g/w:g),T=Date.now();n._fadeTo=h,n._interval=setInterval(function(){var M=(Date.now()-T)/g;T=Date.now(),y+=x*M,y=Math.round(y*100)/100,x<0?y=Math.max(h,y):y=Math.min(h,y),v._webAudio?n._volume=y:v.volume(y,n._id,!0),p&&(v._volume=y),(h<l&&y<=h||h>l&&y>=h)&&(clearInterval(n._interval),n._interval=null,n._fadeTo=null,v.volume(h,n._id),v._emit("fade",n._id))},b)},_stopFade:function(n){var l=this,h=l._soundById(n);return h&&h._interval&&(l._webAudio&&h._node.gain.cancelScheduledValues(t.ctx.currentTime),clearInterval(h._interval),h._interval=null,l.volume(h._fadeTo,n),h._fadeTo=null,l._emit("fade",n)),l},loop:function(){var n=this,l=arguments,h,g,_;if(l.length===0)return n._loop;if(l.length===1)if(typeof l[0]=="boolean")h=l[0],n._loop=h;else return _=n._soundById(parseInt(l[0],10)),_?_._loop:!1;else l.length===2&&(h=l[0],g=parseInt(l[1],10));for(var p=n._getSoundIds(g),v=0;v<p.length;v++)_=n._soundById(p[v]),_&&(_._loop=h,n._webAudio&&_._node&&_._node.bufferSource&&(_._node.bufferSource.loop=h,h&&(_._node.bufferSource.loopStart=_._start||0,_._node.bufferSource.loopEnd=_._stop,n.playing(p[v])&&(n.pause(p[v],!0),n.play(p[v],!0)))));return n},rate:function(){var n=this,l=arguments,h,g;if(l.length===0)g=n._sounds[0]._id;else if(l.length===1){var _=n._getSoundIds(),p=_.indexOf(l[0]);p>=0?g=parseInt(l[0],10):h=parseFloat(l[0])}else l.length===2&&(h=parseFloat(l[0]),g=parseInt(l[1],10));var v;if(typeof h=="number"){if(n._state!=="loaded"||n._playLock)return n._queue.push({event:"rate",action:function(){n.rate.apply(n,l)}}),n;typeof g>"u"&&(n._rate=h),g=n._getSoundIds(g);for(var y=0;y<g.length;y++)if(v=n._soundById(g[y]),v){n.playing(g[y])&&(v._rateSeek=n.seek(g[y]),v._playStart=n._webAudio?t.ctx.currentTime:v._playStart),v._rate=h,n._webAudio&&v._node&&v._node.bufferSource?v._node.bufferSource.playbackRate.setValueAtTime(h,t.ctx.currentTime):v._node&&(v._node.playbackRate=h);var x=n.seek(g[y]),w=(n._sprite[v._sprite][0]+n._sprite[v._sprite][1])/1e3-x,b=w*1e3/Math.abs(v._rate);(n._endTimers[g[y]]||!v._paused)&&(n._clearTimer(g[y]),n._endTimers[g[y]]=setTimeout(n._ended.bind(n,v),b)),n._emit("rate",v._id)}}else return v=n._soundById(g),v?v._rate:n._rate;return n},seek:function(){var n=this,l=arguments,h,g;if(l.length===0)n._sounds.length&&(g=n._sounds[0]._id);else if(l.length===1){var _=n._getSoundIds(),p=_.indexOf(l[0]);p>=0?g=parseInt(l[0],10):n._sounds.length&&(g=n._sounds[0]._id,h=parseFloat(l[0]))}else l.length===2&&(h=parseFloat(l[0]),g=parseInt(l[1],10));if(typeof g>"u")return 0;if(typeof h=="number"&&(n._state!=="loaded"||n._playLock))return n._queue.push({event:"seek",action:function(){n.seek.apply(n,l)}}),n;var v=n._soundById(g);if(v)if(typeof h=="number"&&h>=0){var y=n.playing(g);y&&n.pause(g,!0),v._seek=h,v._ended=!1,n._clearTimer(g),!n._webAudio&&v._node&&!isNaN(v._node.duration)&&(v._node.currentTime=h);var x=function(){y&&n.play(g,!0),n._emit("seek",g)};if(y&&!n._webAudio){var w=function(){n._playLock?setTimeout(w,0):x()};setTimeout(w,0)}else x()}else if(n._webAudio){var b=n.playing(g)?t.ctx.currentTime-v._playStart:0,T=v._rateSeek?v._rateSeek-v._seek:0;return v._seek+(T+b*Math.abs(v._rate))}else return v._node.currentTime;return n},playing:function(n){var l=this;if(typeof n=="number"){var h=l._soundById(n);return h?!h._paused:!1}for(var g=0;g<l._sounds.length;g++)if(!l._sounds[g]._paused)return!0;return!1},duration:function(n){var l=this,h=l._duration,g=l._soundById(n);return g&&(h=l._sprite[g._sprite][1]/1e3),h},state:function(){return this._state},unload:function(){for(var n=this,l=n._sounds,h=0;h<l.length;h++)l[h]._paused||n.stop(l[h]._id),n._webAudio||(n._clearSound(l[h]._node),l[h]._node.removeEventListener("error",l[h]._errorFn,!1),l[h]._node.removeEventListener(t._canPlayEvent,l[h]._loadFn,!1),l[h]._node.removeEventListener("ended",l[h]._endFn,!1),t._releaseHtml5Audio(l[h]._node)),delete l[h]._node,n._clearTimer(l[h]._id);var g=t._howls.indexOf(n);g>=0&&t._howls.splice(g,1);var _=!0;for(h=0;h<t._howls.length;h++)if(t._howls[h]._src===n._src||n._src.indexOf(t._howls[h]._src)>=0){_=!1;break}return a&&_&&delete a[n._src],t.noAudio=!1,n._state="unloaded",n._sounds=[],n=null,null},on:function(n,l,h,g){var _=this,p=_["_on"+n];return typeof l=="function"&&p.push(g?{id:h,fn:l,once:g}:{id:h,fn:l}),_},off:function(n,l,h){var g=this,_=g["_on"+n],p=0;if(typeof l=="number"&&(h=l,l=null),l||h)for(p=0;p<_.length;p++){var v=h===_[p].id;if(l===_[p].fn&&v||!l&&v){_.splice(p,1);break}}else if(n)g["_on"+n]=[];else{var y=Object.keys(g);for(p=0;p<y.length;p++)y[p].indexOf("_on")===0&&Array.isArray(g[y[p]])&&(g[y[p]]=[])}return g},once:function(n,l,h){var g=this;return g.on(n,l,h,1),g},_emit:function(n,l,h){for(var g=this,_=g["_on"+n],p=_.length-1;p>=0;p--)(!_[p].id||_[p].id===l||n==="load")&&(setTimeout((function(v){v.call(this,l,h)}).bind(g,_[p].fn),0),_[p].once&&g.off(n,_[p].fn,_[p].id));return g._loadQueue(n),g},_loadQueue:function(n){var l=this;if(l._queue.length>0){var h=l._queue[0];h.event===n&&(l._queue.shift(),l._loadQueue()),n||h.action()}return l},_ended:function(n){var l=this,h=n._sprite;if(!l._webAudio&&n._node&&!n._node.paused&&!n._node.ended&&n._node.currentTime<n._stop)return setTimeout(l._ended.bind(l,n),100),l;var g=!!(n._loop||l._sprite[h][2]);if(l._emit("end",n._id),!l._webAudio&&g&&l.stop(n._id,!0).play(n._id),l._webAudio&&g){l._emit("play",n._id),n._seek=n._start||0,n._rateSeek=0,n._playStart=t.ctx.currentTime;var _=(n._stop-n._start)*1e3/Math.abs(n._rate);l._endTimers[n._id]=setTimeout(l._ended.bind(l,n),_)}return l._webAudio&&!g&&(n._paused=!0,n._ended=!0,n._seek=n._start||0,n._rateSeek=0,l._clearTimer(n._id),l._cleanBuffer(n._node),t._autoSuspend()),!l._webAudio&&!g&&l.stop(n._id,!0),l},_clearTimer:function(n){var l=this;if(l._endTimers[n]){if(typeof l._endTimers[n]!="function")clearTimeout(l._endTimers[n]);else{var h=l._soundById(n);h&&h._node&&h._node.removeEventListener("ended",l._endTimers[n],!1)}delete l._endTimers[n]}return l},_soundById:function(n){for(var l=this,h=0;h<l._sounds.length;h++)if(n===l._sounds[h]._id)return l._sounds[h];return null},_inactiveSound:function(){var n=this;n._drain();for(var l=0;l<n._sounds.length;l++)if(n._sounds[l]._ended)return n._sounds[l].reset();return new s(n)},_drain:function(){var n=this,l=n._pool,h=0,g=0;if(!(n._sounds.length<l)){for(g=0;g<n._sounds.length;g++)n._sounds[g]._ended&&h++;for(g=n._sounds.length-1;g>=0;g--){if(h<=l)return;n._sounds[g]._ended&&(n._webAudio&&n._sounds[g]._node&&n._sounds[g]._node.disconnect(0),n._sounds.splice(g,1),h--)}}},_getSoundIds:function(n){var l=this;if(typeof n>"u"){for(var h=[],g=0;g<l._sounds.length;g++)h.push(l._sounds[g]._id);return h}else return[n]},_refreshBuffer:function(n){var l=this;return n._node.bufferSource=t.ctx.createBufferSource(),n._node.bufferSource.buffer=a[l._src],n._panner?n._node.bufferSource.connect(n._panner):n._node.bufferSource.connect(n._node),n._node.bufferSource.loop=n._loop,n._loop&&(n._node.bufferSource.loopStart=n._start||0,n._node.bufferSource.loopEnd=n._stop||0),n._node.bufferSource.playbackRate.setValueAtTime(n._rate,t.ctx.currentTime),l},_cleanBuffer:function(n){var l=this,h=t._navigator&&t._navigator.vendor.indexOf("Apple")>=0;if(!n.bufferSource)return l;if(t._scratchBuffer&&n.bufferSource&&(n.bufferSource.onended=null,n.bufferSource.disconnect(0),h))try{n.bufferSource.buffer=t._scratchBuffer}catch{}return n.bufferSource=null,l},_clearSound:function(n){var l=/MSIE |Trident\//.test(t._navigator&&t._navigator.userAgent);l||(n.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA")}};var s=function(n){this._parent=n,this.init()};s.prototype={init:function(){var n=this,l=n._parent;return n._muted=l._muted,n._loop=l._loop,n._volume=l._volume,n._rate=l._rate,n._seek=0,n._paused=!0,n._ended=!0,n._sprite="__default",n._id=++t._counter,l._sounds.push(n),n.create(),n},create:function(){var n=this,l=n._parent,h=t._muted||n._muted||n._parent._muted?0:n._volume;return l._webAudio?(n._node=typeof t.ctx.createGain>"u"?t.ctx.createGainNode():t.ctx.createGain(),n._node.gain.setValueAtTime(h,t.ctx.currentTime),n._node.paused=!0,n._node.connect(t.masterGain)):t.noAudio||(n._node=t._obtainHtml5Audio(),n._errorFn=n._errorListener.bind(n),n._node.addEventListener("error",n._errorFn,!1),n._loadFn=n._loadListener.bind(n),n._node.addEventListener(t._canPlayEvent,n._loadFn,!1),n._endFn=n._endListener.bind(n),n._node.addEventListener("ended",n._endFn,!1),n._node.src=l._src,n._node.preload=l._preload===!0?"auto":l._preload,n._node.volume=h*t.volume(),n._node.load()),n},reset:function(){var n=this,l=n._parent;return n._muted=l._muted,n._loop=l._loop,n._volume=l._volume,n._rate=l._rate,n._seek=0,n._rateSeek=0,n._paused=!0,n._ended=!0,n._sprite="__default",n._id=++t._counter,n},_errorListener:function(){var n=this;n._parent._emit("loaderror",n._id,n._node.error?n._node.error.code:0),n._node.removeEventListener("error",n._errorFn,!1)},_loadListener:function(){var n=this,l=n._parent;l._duration=Math.ceil(n._node.duration*10)/10,Object.keys(l._sprite).length===0&&(l._sprite={__default:[0,l._duration*1e3]}),l._state!=="loaded"&&(l._state="loaded",l._emit("load"),l._loadQueue()),n._node.removeEventListener(t._canPlayEvent,n._loadFn,!1)},_endListener:function(){var n=this,l=n._parent;l._duration===1/0&&(l._duration=Math.ceil(n._node.duration*10)/10,l._sprite.__default[1]===1/0&&(l._sprite.__default[1]=l._duration*1e3),l._ended(n)),n._node.removeEventListener("ended",n._endFn,!1)}};var a={},o=function(n){var l=n._src;if(a[l]){n._duration=a[l].duration,m(n);return}if(/^data:[^;]+;base64,/.test(l)){for(var h=atob(l.split(",")[1]),g=new Uint8Array(h.length),_=0;_<h.length;++_)g[_]=h.charCodeAt(_);u(g.buffer,n)}else{var p=new XMLHttpRequest;p.open(n._xhr.method,l,!0),p.withCredentials=n._xhr.withCredentials,p.responseType="arraybuffer",n._xhr.headers&&Object.keys(n._xhr.headers).forEach(function(v){p.setRequestHeader(v,n._xhr.headers[v])}),p.onload=function(){var v=(p.status+"")[0];if(v!=="0"&&v!=="2"&&v!=="3"){n._emit("loaderror",null,"Failed loading audio file with status: "+p.status+".");return}u(p.response,n)},p.onerror=function(){n._webAudio&&(n._html5=!0,n._webAudio=!1,n._sounds=[],delete a[l],n.load())},c(p)}},c=function(n){try{n.send()}catch{n.onerror()}},u=function(n,l){var h=function(){l._emit("loaderror",null,"Decoding audio data failed.")},g=function(_){_&&l._sounds.length>0?(a[l._src]=_,m(l,_)):h()};typeof Promise<"u"&&t.ctx.decodeAudioData.length===1?t.ctx.decodeAudioData(n).then(g).catch(h):t.ctx.decodeAudioData(n,g,h)},m=function(n,l){l&&!n._duration&&(n._duration=l.duration),Object.keys(n._sprite).length===0&&(n._sprite={__default:[0,n._duration*1e3]}),n._state!=="loaded"&&(n._state="loaded",n._emit("load"),n._loadQueue())},d=function(){if(t.usingWebAudio){try{typeof AudioContext<"u"?t.ctx=new AudioContext:typeof webkitAudioContext<"u"?t.ctx=new webkitAudioContext:t.usingWebAudio=!1}catch{t.usingWebAudio=!1}t.ctx||(t.usingWebAudio=!1);var n=/iP(hone|od|ad)/.test(t._navigator&&t._navigator.platform),l=t._navigator&&t._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),h=l?parseInt(l[1],10):null;if(n&&h&&h<9){var g=/safari/.test(t._navigator&&t._navigator.userAgent.toLowerCase());t._navigator&&!g&&(t.usingWebAudio=!1)}t.usingWebAudio&&(t.masterGain=typeof t.ctx.createGain>"u"?t.ctx.createGainNode():t.ctx.createGain(),t.masterGain.gain.setValueAtTime(t._muted?0:t._volume,t.ctx.currentTime),t.masterGain.connect(t.ctx.destination)),t._setup()}};r.Howler=t,r.Howl=i,typeof St<"u"?(St.HowlerGlobal=e,St.Howler=t,St.Howl=i,St.Sound=s):typeof window<"u"&&(window.HowlerGlobal=e,window.Howler=t,window.Howl=i,window.Sound=s)})();/*!
|
|
3690
3697
|
* Spatial Plugin - Adds support for stereo and 3D audio where Web Audio is supported.
|
|
3691
3698
|
*
|
|
3692
3699
|
* howler.js v2.2.4
|
|
@@ -3696,71 +3703,71 @@ bool bvhIntersectFogVolumeHit(
|
|
|
3696
3703
|
* goldfirestudios.com
|
|
3697
3704
|
*
|
|
3698
3705
|
* MIT License
|
|
3699
|
-
*/(function(){HowlerGlobal.prototype._pos=[0,0,0],HowlerGlobal.prototype._orientation=[0,0,-1,0,1,0],HowlerGlobal.prototype.stereo=function(t){var i=this;if(!i.ctx||!i.ctx.listener)return i;for(var r=i._howls.length-1;r>=0;r--)i._howls[r].stereo(t);return i},HowlerGlobal.prototype.pos=function(t,i,r){var l=this;if(!l.ctx||!l.ctx.listener)return l;if(i=typeof i!="number"?l._pos[1]:i,r=typeof r!="number"?l._pos[2]:r,typeof t=="number")l._pos=[t,i,r],typeof l.ctx.listener.positionX<"u"?(l.ctx.listener.positionX.setTargetAtTime(l._pos[0],Howler.ctx.currentTime,.1),l.ctx.listener.positionY.setTargetAtTime(l._pos[1],Howler.ctx.currentTime,.1),l.ctx.listener.positionZ.setTargetAtTime(l._pos[2],Howler.ctx.currentTime,.1)):l.ctx.listener.setPosition(l._pos[0],l._pos[1],l._pos[2]);else return l._pos;return l},HowlerGlobal.prototype.orientation=function(t,i,r,l,o,c){var h=this;if(!h.ctx||!h.ctx.listener)return h;var m=h._orientation;if(i=typeof i!="number"?m[1]:i,r=typeof r!="number"?m[2]:r,l=typeof l!="number"?m[3]:l,o=typeof o!="number"?m[4]:o,c=typeof c!="number"?m[5]:c,typeof t=="number")h._orientation=[t,i,r,l,o,c],typeof h.ctx.listener.forwardX<"u"?(h.ctx.listener.forwardX.setTargetAtTime(t,Howler.ctx.currentTime,.1),h.ctx.listener.forwardY.setTargetAtTime(i,Howler.ctx.currentTime,.1),h.ctx.listener.forwardZ.setTargetAtTime(r,Howler.ctx.currentTime,.1),h.ctx.listener.upX.setTargetAtTime(l,Howler.ctx.currentTime,.1),h.ctx.listener.upY.setTargetAtTime(o,Howler.ctx.currentTime,.1),h.ctx.listener.upZ.setTargetAtTime(c,Howler.ctx.currentTime,.1)):h.ctx.listener.setOrientation(t,i,r,l,o,c);else return m;return h},Howl.prototype.init=function(t){return function(i){var r=this;return r._orientation=i.orientation||[1,0,0],r._stereo=i.stereo||null,r._pos=i.pos||null,r._pannerAttr={coneInnerAngle:typeof i.coneInnerAngle<"u"?i.coneInnerAngle:360,coneOuterAngle:typeof i.coneOuterAngle<"u"?i.coneOuterAngle:360,coneOuterGain:typeof i.coneOuterGain<"u"?i.coneOuterGain:0,distanceModel:typeof i.distanceModel<"u"?i.distanceModel:"inverse",maxDistance:typeof i.maxDistance<"u"?i.maxDistance:1e4,panningModel:typeof i.panningModel<"u"?i.panningModel:"HRTF",refDistance:typeof i.refDistance<"u"?i.refDistance:1,rolloffFactor:typeof i.rolloffFactor<"u"?i.rolloffFactor:1},r._onstereo=i.onstereo?[{fn:i.onstereo}]:[],r._onpos=i.onpos?[{fn:i.onpos}]:[],r._onorientation=i.onorientation?[{fn:i.onorientation}]:[],t.call(this,i)}}(Howl.prototype.init),Howl.prototype.stereo=function(t,i){var r=this;if(!r._webAudio)return r;if(r._state!=="loaded")return r._queue.push({event:"stereo",action:function(){r.stereo(t,i)}}),r;var l=typeof Howler.ctx.createStereoPanner>"u"?"spatial":"stereo";if(typeof i>"u")if(typeof t=="number")r._stereo=t,r._pos=[t,0,0];else return r._stereo;for(var o=r._getSoundIds(i),c=0;c<o.length;c++){var h=r._soundById(o[c]);if(h)if(typeof t=="number")h._stereo=t,h._pos=[t,0,0],h._node&&(h._pannerAttr.panningModel="equalpower",(!h._panner||!h._panner.pan)&&e(h,l),l==="spatial"?typeof h._panner.positionX<"u"?(h._panner.positionX.setValueAtTime(t,Howler.ctx.currentTime),h._panner.positionY.setValueAtTime(0,Howler.ctx.currentTime),h._panner.positionZ.setValueAtTime(0,Howler.ctx.currentTime)):h._panner.setPosition(t,0,0):h._panner.pan.setValueAtTime(t,Howler.ctx.currentTime)),r._emit("stereo",h._id);else return h._stereo}return r},Howl.prototype.pos=function(t,i,r,l){var o=this;if(!o._webAudio)return o;if(o._state!=="loaded")return o._queue.push({event:"pos",action:function(){o.pos(t,i,r,l)}}),o;if(i=typeof i!="number"?0:i,r=typeof r!="number"?-.5:r,typeof l>"u")if(typeof t=="number")o._pos=[t,i,r];else return o._pos;for(var c=o._getSoundIds(l),h=0;h<c.length;h++){var m=o._soundById(c[h]);if(m)if(typeof t=="number")m._pos=[t,i,r],m._node&&((!m._panner||m._panner.pan)&&e(m,"spatial"),typeof m._panner.positionX<"u"?(m._panner.positionX.setValueAtTime(t,Howler.ctx.currentTime),m._panner.positionY.setValueAtTime(i,Howler.ctx.currentTime),m._panner.positionZ.setValueAtTime(r,Howler.ctx.currentTime)):m._panner.setPosition(t,i,r)),o._emit("pos",m._id);else return m._pos}return o},Howl.prototype.orientation=function(t,i,r,l){var o=this;if(!o._webAudio)return o;if(o._state!=="loaded")return o._queue.push({event:"orientation",action:function(){o.orientation(t,i,r,l)}}),o;if(i=typeof i!="number"?o._orientation[1]:i,r=typeof r!="number"?o._orientation[2]:r,typeof l>"u")if(typeof t=="number")o._orientation=[t,i,r];else return o._orientation;for(var c=o._getSoundIds(l),h=0;h<c.length;h++){var m=o._soundById(c[h]);if(m)if(typeof t=="number")m._orientation=[t,i,r],m._node&&(m._panner||(m._pos||(m._pos=o._pos||[0,0,-.5]),e(m,"spatial")),typeof m._panner.orientationX<"u"?(m._panner.orientationX.setValueAtTime(t,Howler.ctx.currentTime),m._panner.orientationY.setValueAtTime(i,Howler.ctx.currentTime),m._panner.orientationZ.setValueAtTime(r,Howler.ctx.currentTime)):m._panner.setOrientation(t,i,r)),o._emit("orientation",m._id);else return m._orientation}return o},Howl.prototype.pannerAttr=function(){var t=this,i=arguments,r,l,o;if(!t._webAudio)return t;if(i.length===0)return t._pannerAttr;if(i.length===1)if(typeof i[0]=="object")r=i[0],typeof l>"u"&&(r.pannerAttr||(r.pannerAttr={coneInnerAngle:r.coneInnerAngle,coneOuterAngle:r.coneOuterAngle,coneOuterGain:r.coneOuterGain,distanceModel:r.distanceModel,maxDistance:r.maxDistance,refDistance:r.refDistance,rolloffFactor:r.rolloffFactor,panningModel:r.panningModel}),t._pannerAttr={coneInnerAngle:typeof r.pannerAttr.coneInnerAngle<"u"?r.pannerAttr.coneInnerAngle:t._coneInnerAngle,coneOuterAngle:typeof r.pannerAttr.coneOuterAngle<"u"?r.pannerAttr.coneOuterAngle:t._coneOuterAngle,coneOuterGain:typeof r.pannerAttr.coneOuterGain<"u"?r.pannerAttr.coneOuterGain:t._coneOuterGain,distanceModel:typeof r.pannerAttr.distanceModel<"u"?r.pannerAttr.distanceModel:t._distanceModel,maxDistance:typeof r.pannerAttr.maxDistance<"u"?r.pannerAttr.maxDistance:t._maxDistance,refDistance:typeof r.pannerAttr.refDistance<"u"?r.pannerAttr.refDistance:t._refDistance,rolloffFactor:typeof r.pannerAttr.rolloffFactor<"u"?r.pannerAttr.rolloffFactor:t._rolloffFactor,panningModel:typeof r.pannerAttr.panningModel<"u"?r.pannerAttr.panningModel:t._panningModel});else return o=t._soundById(parseInt(i[0],10)),o?o._pannerAttr:t._pannerAttr;else i.length===2&&(r=i[0],l=parseInt(i[1],10));for(var c=t._getSoundIds(l),h=0;h<c.length;h++)if(o=t._soundById(c[h]),o){var m=o._pannerAttr;m={coneInnerAngle:typeof r.coneInnerAngle<"u"?r.coneInnerAngle:m.coneInnerAngle,coneOuterAngle:typeof r.coneOuterAngle<"u"?r.coneOuterAngle:m.coneOuterAngle,coneOuterGain:typeof r.coneOuterGain<"u"?r.coneOuterGain:m.coneOuterGain,distanceModel:typeof r.distanceModel<"u"?r.distanceModel:m.distanceModel,maxDistance:typeof r.maxDistance<"u"?r.maxDistance:m.maxDistance,refDistance:typeof r.refDistance<"u"?r.refDistance:m.refDistance,rolloffFactor:typeof r.rolloffFactor<"u"?r.rolloffFactor:m.rolloffFactor,panningModel:typeof r.panningModel<"u"?r.panningModel:m.panningModel};var p=o._panner;p||(o._pos||(o._pos=t._pos||[0,0,-.5]),e(o,"spatial"),p=o._panner),p.coneInnerAngle=m.coneInnerAngle,p.coneOuterAngle=m.coneOuterAngle,p.coneOuterGain=m.coneOuterGain,p.distanceModel=m.distanceModel,p.maxDistance=m.maxDistance,p.refDistance=m.refDistance,p.rolloffFactor=m.rolloffFactor,p.panningModel=m.panningModel}return t},Sound.prototype.init=function(t){return function(){var i=this,r=i._parent;i._orientation=r._orientation,i._stereo=r._stereo,i._pos=r._pos,i._pannerAttr=r._pannerAttr,t.call(this),i._stereo?r.stereo(i._stereo):i._pos&&r.pos(i._pos[0],i._pos[1],i._pos[2],i._id)}}(Sound.prototype.init),Sound.prototype.reset=function(t){return function(){var i=this,r=i._parent;return i._orientation=r._orientation,i._stereo=r._stereo,i._pos=r._pos,i._pannerAttr=r._pannerAttr,i._stereo?r.stereo(i._stereo):i._pos?r.pos(i._pos[0],i._pos[1],i._pos[2],i._id):i._panner&&(i._panner.disconnect(0),i._panner=void 0,r._refreshBuffer(i)),t.call(this)}}(Sound.prototype.reset);var e=function(t,i){i=i||"spatial",i==="spatial"?(t._panner=Howler.ctx.createPanner(),t._panner.coneInnerAngle=t._pannerAttr.coneInnerAngle,t._panner.coneOuterAngle=t._pannerAttr.coneOuterAngle,t._panner.coneOuterGain=t._pannerAttr.coneOuterGain,t._panner.distanceModel=t._pannerAttr.distanceModel,t._panner.maxDistance=t._pannerAttr.maxDistance,t._panner.refDistance=t._pannerAttr.refDistance,t._panner.rolloffFactor=t._pannerAttr.rolloffFactor,t._panner.panningModel=t._pannerAttr.panningModel,typeof t._panner.positionX<"u"?(t._panner.positionX.setValueAtTime(t._pos[0],Howler.ctx.currentTime),t._panner.positionY.setValueAtTime(t._pos[1],Howler.ctx.currentTime),t._panner.positionZ.setValueAtTime(t._pos[2],Howler.ctx.currentTime)):t._panner.setPosition(t._pos[0],t._pos[1],t._pos[2]),typeof t._panner.orientationX<"u"?(t._panner.orientationX.setValueAtTime(t._orientation[0],Howler.ctx.currentTime),t._panner.orientationY.setValueAtTime(t._orientation[1],Howler.ctx.currentTime),t._panner.orientationZ.setValueAtTime(t._orientation[2],Howler.ctx.currentTime)):t._panner.setOrientation(t._orientation[0],t._orientation[1],t._orientation[2])):(t._panner=Howler.ctx.createStereoPanner(),t._panner.pan.setValueAtTime(t._stereo,Howler.ctx.currentTime)),t._panner.connect(t._node),t._paused||t._parent.pause(t._id,!0).play(t._id,!0)}})()})(Qs);const So="data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjQxLjEwMAAAAAAAAAAAAAAA//NwwAAAAAAAAAAAAEluZm8AAAAPAAAAFAAACOAAICAgICwsLCwsNzc3NzdDQ0NDQ09PT09PW1tbW1tmZmZmZnJycnJyfn5+fn6KioqKipWVlZWVoaGhoaGtra2trbm5ubm5xcXFxcXQ0NDQ0Nzc3Nzc6Ojo6Oj09PT09P//////AAAAAExhdmM1OC43NQAAAAAAAAAAAAAAACQCwAAAAAAAAAjgTZykiAAAAAAAAAAAAAAAAAD/80DEABJhFmQCwwYUIDsKrsHAWBMRyeJYliQJBg5RYsWU/W3z/8OLc/3AAAQiIAIjv+7vUCJXd4jucQABAE3lwffiDBD+JC58oCH8H/1h/WH//1HPwTUMFrULH9ELKxULyTodFKYbO//zQsQRFFkScKDSRhyGWpIFpG91I7Fi/F6D2RWwN6TN/t9CiVSG5wMw74ogYcHoEwTFyMmTf4KkxEwmRfjXIYv1tpIOZRv/3O9ibtjR6gYmbGCgQ+Fk0mfSmybOX1cf78g7D6nP6qxCgf/zQMQbF+EacktaSABfy+3JKszHdMgcwwcl/kNFIuAo0I0DD1fWVs/crTSTTRInof3cmIwyLBwGQqCSLq7hyvtRPBB4aFyyXHov9X///7UXKqoIIcgcHict89/0y+n+nf/C0DIjB/+P//NCxBYZU9q0AYpoAHNyXSLn/+EjEbJclC4eJT//8e5aMAWeE4////wvAyAvYjZLjAD0Lg9D0kCU/////zwwBdJcYAehKBIwtYyx6FyXC4XP//////x7l83NDpfqd6gAcA/+wu9A2FGg//NAxAwXCnsq/5M4AhQKAOwmRvQRhjhOe5S8UkAmVHpU8IVU3lwejjIcayXOOceGwjf+D05I8oAu2x382o1ZHHV//31NU4441lmqcv///+RNGrUJKImnTf//iVYK1UZquoZESSy3egH/80LEChchBtMfyzAAk191v20qimbuNqavb211BthJKSJAG2aucbdLeVFVmRjZEVvzOggIwuUFDgvEZA7UeuUqNMLOraDQ5CVCk5m9BsmT3kbNrBdolcFSsqXGwQTWyYUX2wEDEgKkvZb/80DECRYRUpWsikYY1HXLbDZksYxtCHBShdHt/DgYCOM6r8AmUSpfGZYzH7ARMBCj1JtmY/hmwoGio0XBUShoklC5GsNeDR38RQ6d01DyrENtqp6mCJ5GJUckmpUBaIgYK6C0fPjmUf/zQsQLFil+cajTBhydxPRO4mLMWWSGQF2qa1f3PPlHQDJdzCxnwgkzB1SQohrpNRYRgtobv07tBLUFc27jQdWoQY0JNpiMJy654enBVoqnQR571uq/i9rpL1oAqAupJATLLk5L+QT3Kf/zQMQOE9D2bWFaGACZyWQZdt1rd3OVY8s/y2dBlg0m12PFzdFSlYrboY6gMOE1hJp7iFqmDcopF8F2OKEPnktdThRLoy9iuyj//0vD4+qf///++38OsIIFFhpEFZMC4s+gZmilJz1X//NCxBkaW8allZI4AWPWKBoLFWrwfuYvukbk4Rt9tBuJYOBoWpfzfjQaNMp//+OGEzzzDIif3+n/4PBIEt5hjDc9zxv/////nseeNDHGg0MQwxBEFn//////4TpB9d/s9thcHddpssFg//NAxAsVCT8GX5BAAigUAPBBdOBaKEIpaajR1VyCNH/gAwAfjRX8G7B4zfx0HANA8BpjQ6FhfqKxRBQURleGbrufzJywVGVfRdOzp5///ERCxhb//8wqijBAwUYMBCjVWZsv26uwYU3/80LEERRTIuTLwxABmdQgEBGKFNo9amfRWcpnayOUsKJ/UpWo/qyL////sj1b+pc3oarStSWpf/VP+hlotDN/0MVjKMKDAZGL/Ar8QWpCR0msAoVgrMoeT3xHIZd3qARkQge7hzlejQD/80DEGxPQ5sryeYYUBCI58AEvohe5nAMDcPxAbUxN6VCB4xCid97iaTyonF0l4upInmIpD//V0f/OllFls0vEBipVlYYRWhuzlHgpEiJSRmYJQaiptezfqvKm1PBRJKiq7M3s1yoqKv/zQsQmFBEGuojBkAQdCzTSpHY0FSwdboEQKi7pZN986g7UVOkf5ZR6VdbbQwZ+79PW6VoWdwZqA4VT2QGoxuuO0VZgbATjSNkSqqresUZ4lDGM5tfbuZzGHYfri5YKg0eDjgQjhm0Wpf/zQMQxE1jyoqhoxFD16D4jzQUUULEB1QXZhRIdIbHFtSlSvX5anFh11QTHaABkiBXOXoXxGW9galRr4fRiew3yOag/4HjxOydOM9ZyyokPlRKdFBa0CjY1luBiKXXwLw6oeMWEhjoS//NCxD4TUNKKIJpMJNTRh7nf/3kekmjdSWypy9UZXQgZMDh3pnAWB4O2M6nAaelR4r1OmVPFSwoksiWRUE1zc+f1lPc0ZudtdFDr4LLpoSwwGkpVO+oD6Tlb3HsYL7d+R1//td2LQMNF//NAxEwTaP5xYqJMCFlqIwAbEoCJNDEp9/3itYVbV6Yx/v0nuLdzyy50qHQw3cafmKlb6zBo0yXeRMnQG5J4jE7j4PFAkTSpQ9pexojMMsL0PIqP/Z1Xp/TpnVZZ27eWtNWRSSSyWyz/80LEWRSo1nDhWhgAlsstlkskgADyNOHqG5rlhLnSyI0a5oClU7uw0JnJQq2kTMBUYADEskGQ9wdHohh2xMKnCubKTIdyRgT83NEIrcfJpJOL3fV7l9cyXXJwJRDGpJLTZJF1+3OPUX3/80DEYiVyorJfmlgDRVRdYm21rHJXTVH0+ajd35ouiSF1tVcmLGnFummxbrhsXfHNzcf/2qgd/7XhppiSaYkmmQGRpnCsAMAEB4tQrXVA0VOiINSMWfljtMTHsRdZ3iL/V1neW6zvLf/zQsQnDSAiMFXMGADWd4i6zvEX+W/yzud5ZUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==";let Co=class{constructor(){this.sound=new Qs.Howl({src:[So]})}play(){this.sound.play()}};const oe=n=>{var e,t;if(typeof n.destroy=="function"){n.destroy();return}for(;n.children.length>0;)oe(n.children[0]),(e=n.children[0])==null||e.removeFromParent();if(n instanceof d.Mesh)try{(t=n.geometry)==null||t.dispose()}catch{}};function Mo(n){return new d.Vector3(n[0],n[1],n[2])}function Po(){let n=3,e=Math.max(1/window.devicePixelRatio,.5);return window.innerWidth/window.innerHeight<.65&&(n=4,e=1/window.devicePixelRatio),{tiles:n,renderScale:e}}function Ro(n){let e=!1,t=!1,i=!1,r=1/0,l=1/0,o=1/0,c=-1/0,h=-1/0,m=-1/0,p=0,s=0;return n.traverse(u=>{if(u.isMesh&&u.geometry){const g=u;if(g.userData.ignoreSize||g.material.userData.isLOGO)return;g.geometry.computeBoundingBox();let _=g.geometry.attributes.position;const f=g.geometry.morphAttributes.position;let v=g.morphTargetInfluences;const y=Object.keys(g.morphTargetDictionary||{});y.includes("width")&&(t=!0),y.includes("length")&&(e=!0),y.includes("height")&&(i=!0);for(let x=0;x<_.count;x++){let w=_.getX(x),b=_.getY(x),C=_.getZ(x);s=Math.max(b,s),f&&v&&f.forEach((S,A)=>{const P=v&&v[A]||0;w+=S.getX(x)*P,b+=S.getY(x)*P,C+=S.getZ(x)*P}),w<r&&(r=w),b<l&&(l=b),C<o&&(o=C),w>c&&(c=w),b>h&&(h=b),C>m&&(m=C);const T=Math.sqrt(w*w+b*b);T>p&&(p=T)}}}),{box:new d.Box3(new d.Vector3(r,l,o),new d.Vector3(c,h,m)),maxRadius:p,height:s,hasWidth:t,hasLength:e,hasHeight:i}}function Io(n,e,t=null){let i=0;return function(){let r=t||this,l=arguments;clearTimeout(i),i=window.setTimeout(function(){n.apply(r,l)},e)}}class Eo{constructor(e,t,i){this.length=e,this.width=t,this.height=i}}const us=n=>{var i;let e=0,t=0;if(n.geometry){n.geometry.computeBoundingBox();const r=new d.Vector3;(i=n.geometry.boundingBox)==null||i.getSize(r),r.y?(t=r.y,!r.x&&r.z?e=r.z:r.x&&!r.z?e=r.x:r.x&&r.z&&(e=r.z)):(e=r.z,t=r.x)}return{width:e,height:t}};function Di(){var e;if(typeof navigator>"u")return!1;if(Fo())return!0;const n=(e=navigator.userAgent)==null?void 0:e.toLowerCase();return/iphone|ipad|ipod|android|mobile|blackberry|iemobile|opera mini/.test(n)}function Fo(){try{if(typeof wx<"u"&&wx.getSystemInfo||typeof my<"u"&&my.alert||typeof tt<"u"&&tt.getSystemInfo||typeof swan<"u"&&swan.getSystemInfo)return!0}catch{}return!1}const Zs=new Ar.GLTFExporter,ut=new xr.GLTFLoader,Nt=new wr.DRACOLoader;let We="./draco/";try{We=new URL("./draco/",typeof document>"u"?require("url").pathToFileURL(__filename).href:Ot&&Ot.src||new URL("shop-components.cjs",document.baseURI).href).href}catch{We="./draco/"}typeof window<"u"&&window.dracoPath&&(We=window.dracoPath);Nt.setDecoderConfig({type:"wasm"});Nt.setDecoderPath(We.endsWith("/")?We:`${We}/`);Nt.preload();ut.setDRACOLoader(Nt);const Do=new br.DRACOExporter,fs=[115,103,108,98];function Bo(n,e,t){const i=JSON.stringify(e),r=new TextEncoder().encode(i),l=new Uint8Array([115,103,108,98]),o=new Uint8Array(2);o[0]=t>>8,o[1]=t&255;const c=new Uint8Array(4);c[0]=r.length>>24,c[1]=r.length>>16&255,c[2]=r.length>>8&255,c[3]=r.length&255;const h=new Uint8Array(n),m=l.length+o.length+c.length+r.length+h.length,p=new Uint8Array(m);let s=0;return p.set(l,s),s+=l.length,p.set(o,s),s+=o.length,p.set(c,s),s+=c.length,p.set(r,s),s+=r.length,p.set(h,s),p.buffer}function Lo(n){const e=new Uint8Array(n.slice(0,4));let t=!0;for(let s=0;s<fs.length;s++)if(e[s]!==fs[s]){t=!1;break}if(!t)throw new Error("Invalid file format");const r=new DataView(n,4,2).getUint16(0,!1),o=new DataView(n,6,4).getUint32(0,!1),c=new Uint8Array(n.slice(10,10+o)),h=new TextDecoder().decode(c),m=JSON.parse(h),p=n.slice(10+o);return{version:r,jsonDescription:m,glbContent:p}}class Vt{constructor(e){this.props=e,this.cache=new Map}load(e,t,i,r){if(this.props.useCache&&this.cache.has(e)){t(this.cache.get(e));return}const l=this;fetch(e).then(o=>{if(!o.ok){r==null||r(new ErrorEvent("NetworkError",{message:"NetworkError for "+e+": "+o.statusText}));return}return o.arrayBuffer()}).then(async o=>{o||r==null||r(new ErrorEvent("Error",{message:"Not a valid sglb file."}));try{const c=l.parse(o);if(!c.glbContent){r==null||r(new ErrorEvent("Error",{message:"No glb content."}));return}const h=pi(c.glbContent,"model/gltf-binary"),m=await ut.loadAsync(h);URL.revokeObjectURL(h),c.glbContent=void 0,c.glb=m.scene,o=void 0,this.cache.set(e,c),t(c)}catch(c){r==null||r(new ErrorEvent("Error",{message:c==null?void 0:c.message}))}}).catch(o=>{r==null||r(new ErrorEvent("Error",{message:o.message}))})}async loadAsync(e){if(this.props.useCache&&this.cache.has(e))return this.cache.get(e);try{const t=await fetch(e);if(!t.ok)throw new Error(`NetworkError for ${e}: ${t.statusText}`);const i=await t.arrayBuffer();if(!i)throw new Error("Not a valid sglb file.");const r=this.parse(i);if(!r.glbContent)throw new Error("No GLB content.");const l=pi(r.glbContent,"model/gltf-binary");console.log(l);const o=await ut.loadAsync(l);return URL.revokeObjectURL(l),r.glbContent=void 0,r.glb=o.scene,this.cache.set(e,r),r}catch(t){throw t}}parse(e){return Lo(e)}clear(){[...this.cache.values()]}}const ko=`*{box-sizing:border-box}.slot-item-container.is-mobile .main{pointer-events:none;border-width:1px;opacity:.8}.slot-item-container.is-mobile .main.focus{width:18px!important;height:18px!important;border-width:2px;opacity:1}.slot-item-container.is-mobile .main.filled{opacity:1;border-width:1px;width:14px!important;height:14px!important;background-image:none;border-radius:50%}.slot-item-container.is-mobile .main.to-be-installed{opacity:1;pointer-events:auto;width:38px!important;height:38px!important;border-color:#000;border-width:1px;background-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20fill='none'%20version='1.1'%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%3e%3cg%3e%3cg%3e%3cpath%20d='M20,10.75L0,10.75L0,9.25L20,9.25L20,10.75Z'%20fill-rule='evenodd'%20fill='%23000000'%20fill-opacity='1'/%3e%3c/g%3e%3cg%20transform='matrix(0,1,1,0,10,-10)'%3e%3cpath%20d='M30,0.75L10,0.75L10,-0.75L30,-0.75L30,0.75Z'%20fill-rule='evenodd'%20fill='%23000000'%20fill-opacity='1'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e");background-size:20px auto;background-repeat:no-repeat;background-position:center;background-color:#fff9}.slot-item-container.is-mobile .main.to-be-installed+.info{pointer-events:auto;overflow:visible;width:auto}.slot-item-container.is-mobile .main.to-be-installed.filled{opacity:1;border-width:2px;width:18px!important;height:18px!important;background-image:none;border-radius:50%;border-color:#00ff95}.slot-item-container.is-mobile .main.to-be-installed.to-be-replaced{opacity:1;border-width:1px;pointer-events:auto;width:38px!important;height:38px!important;border-radius:50%;background-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20fill='none'%20version='1.1'%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%3e%3cdefs%3e%3cclipPath%20id='master_svg0_504_014299'%3e%3crect%20x='0'%20y='0'%20width='40'%20height='40'%20rx='20'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23master_svg0_504_014299)'%3e%3cg%3e%3cg%3e%3cpath%20d='M31.695414,17L26.009501,10.74549544L24.899591,11.75450456L28.304586,15.5L8.75,15.5L8.75,17L31.695414,17Z'%20fill-rule='evenodd'%20fill='%23000000'%20fill-opacity='1'/%3e%3c/g%3e%3cg%3e%3cpath%20d='M8.3045862,23L13.9904997,29.2545042L15.10041,28.2454953L11.6954139,24.5L31.25,24.5L31.25,23L8.3045862,23Z'%20fill-rule='evenodd'%20fill='%23000000'%20fill-opacity='1'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e");background-size:38px auto;border-color:#000}.slot-item-container.is-mobile .info{left:100%;margin-top:0;margin-left:4px}.slot-item-container.is-mobile .info .name-wrapper{margin-top:0;border-radius:0;background:#000;color:#fff}.slot-item-container.is-mobile .info>img{display:none}.slot-item-container .main{pointer-events:auto;cursor:pointer;font-size:12px;color:#fff;width:22px;height:22px;background:#fff0;border:2px solid #fff;border-radius:0;transition:background .2s,width .14s,height .14s,border .14s}.slot-item-container .main.disable{cursor:not-allowed}.slot-item-container .main.drag-over{border-color:red}.slot-item-container .main.can-install{position:relative;width:44px;height:44px;background:#0066ff1a;border-color:#06f}.slot-item-container .main.filled{border-color:#00ff95;border-radius:50%}.slot-item-container .main.selected{border-width:4px}.slot-item-container .main.selected+.info{pointer-events:auto;overflow:visible;width:auto}.slot-item-container .main.focus{border-color:#000}.slot-item-container .main.focus+.info{pointer-events:auto;overflow:visible;width:auto}.slot-item-container .main.has-error{border-color:red}.slot-item-container .main.hidden{display:none}.slot-item-container .main.hidden+.info{display:none}.slot-item-container .main:after{pointer-events:none;content:attr(data-name);transition:all .2s .3s;opacity:0;position:absolute;left:50%;bottom:100%;transform:translate3d(-50%,5px,0);white-space:nowrap;font-size:12px;color:#000;padding:2px 8px;border-radius:2px;background:#fff}.slot-item-container .main:hover{background:#ffffff80}.slot-item-container .main:hover+.info{pointer-events:auto;overflow:visible;width:auto}.slot-item-container .name{position:relative}.slot-item-container .name-wrapper{margin-top:-10px;white-space:nowrap;font-size:12px;color:#fff;padding:2px 8px;background:#000}.slot-item-container .functions-wrapper{z-index:20000;position:absolute;left:0;top:100%}.slot-item-container .functions-wrapper>.functions{display:inline-block;min-width:100px;padding:6px 0;border-left:1px solid #00ff95;border-radius:0 2px 2px 0;background:#0003;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.slot-item-container .functions-wrapper>.functions .btn-add{cursor:pointer;padding:2px 0;margin:0 8px;display:flex;justify-content:center;align-content:center;align-items:center;border:1px dashed #eee;font-size:12px;color:#eee;border-radius:2px;-webkit-backdrop-filter:none;backdrop-filter:none;background:#00050a80}.slot-item-container .functions-wrapper>.functions .btn-add.btn-not-allowed{cursor:not-allowed}.slot-item-container .functions-wrapper>.functions .function{display:flex;justify-content:space-between;white-space:nowrap;margin-bottom:6px;padding:0 8px;font-size:12px;color:#fff}.slot-item-container .functions-wrapper>.functions .function span{margin-right:4px}.slot-item-container .functions-wrapper>.functions .function .btn-remove{pointer-events:none;opacity:0;cursor:pointer;align-self:center;margin-right:0;height:14px;width:14px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAACnSURBVEiJxZaxFcMgDETPTuUtWCWTM4pZAq5RojRpnOfEyEKxSnh3HySeBEhNjZJJTRgUG89GyZWilbKOgJCaKmWtFG2UvFnwQr56jYAcengg3dozELPGIjh96x6hu26/DIa9vD0jq/nUA3nikQEkAOW9nACUGbf7skxlX2mIj1Ob0jK76QdxbYpGFNlk3rPnNndDQltFaLMLbdehAyd8ZP5l6Ed+W17xG7oN9QkytAAAAABJRU5ErkJggg==) center no-repeat;background-size:10px 10px}.slot-item-container .functions-wrapper>.functions .function:hover .btn-remove{pointer-events:auto;opacity:1;transform:scale(1.2)}.slot-item-container .device-name{position:relative;margin:2px 0;display:flex;min-width:120px;align-items:center;align-content:center;justify-content:space-between;white-space:nowrap;height:30px;padding:0 8px;font-size:14px;font-weight:700;color:#000;background:#fff}.slot-item-container .device-name .device-logo{margin-left:-8px;margin-right:4px;width:30px;height:30px;object-fit:contain}.slot-item-container .device-name span{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:250px}.slot-item-container .device-name .btn-close{margin-left:8px;cursor:pointer;height:20px;width:20px;background:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20fill='none'%20version='1.1'%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%3e%3cdefs%3e%3cclipPath%20id='master_svg0_504_017509'%3e%3crect%20x='0'%20y='0'%20width='20'%20height='20'%20rx='0'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23master_svg0_504_017509)'%3e%3cg%3e%3cpath%20d='M4.375,16.875L4.375,4.375L15.625,4.375L15.625,16.875L4.375,16.875ZM14.375,5.625L5.625,5.625L5.625,15.625L14.375,15.625L14.375,5.625Z'%20fill-rule='evenodd'%20fill='%23999999'%20fill-opacity='1'/%3e%3c/g%3e%3cg%3e%3cpath%20d='M8.125,12.1875L8.125,8.125L9.375,8.125L9.375,12.1875L8.125,12.1875Z'%20fill-rule='evenodd'%20fill='%23999999'%20fill-opacity='1'/%3e%3c/g%3e%3cg%3e%3cpath%20d='M10.625,12.1875L10.625,8.125L11.875,8.125L11.875,12.1875L10.625,12.1875Z'%20fill-rule='evenodd'%20fill='%23999999'%20fill-opacity='1'/%3e%3c/g%3e%3cg%3e%3cpath%20d='M16.875,5.625L3.125,5.625L3.125,4.375L16.875,4.375L16.875,5.625Z'%20fill-rule='evenodd'%20fill='%23999999'%20fill-opacity='1'/%3e%3c/g%3e%3cg%3e%3cpath%20d='M6.4446528999999995,5.625L13.545177899999999,5.625L11.8665838,2.5L8.15767372,2.5L6.4446528999999995,5.625ZM11.4548223,4.3749999L8.5553472,4.3749999L8.8979512,3.75L11.1191032,3.75L11.4548223,4.3749999Z'%20fill-rule='evenodd'%20fill='%23999999'%20fill-opacity='1'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e") center no-repeat;background-size:100% auto}.slot-item-container .device-name.empty{color:#000c;font-weight:400}.slot-item-container .device-name.empty .btn-close{display:none}.slot-item-container .device-name.empty:before{height:0}.slot-item-container .all-functions{opacity:0;pointer-events:none;min-width:80px;position:absolute;left:-10px;margin-left:100%;bottom:0;padding:6px 0;background:#fff;transition:all .3s}.slot-item-container .all-functions.show{opacity:1;pointer-events:auto;left:16px}.slot-item-container .all-functions label{margin-left:8px;margin-bottom:20px;color:#444e69;font-size:14px}.slot-item-container .all-functions .btn-close{cursor:pointer;position:absolute;right:7px;top:7px;height:16px;width:16px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAB4SURBVDiNpZPLEYAgDAUXe6MuoK4UpwdBwQkQJDcyb9+QnxORCOC9jyxE4Y78DiWxAIcmISKnxaSrtZhMNSOB+ZeacAS7ngl3k1JOBSBpk1INPib0YHjH+Du2S1DhlSZOYbPJ1iLtrLKrG2a9yJopYzTD8Jx+ArgAylOzjm1WpDwAAAAASUVORK5CYII=) center no-repeat;background-size:10px 10px}.slot-item-container .all-functions .functions{display:inline-block;max-height:200px;overflow-x:hidden;overflow-y:auto}.slot-item-container .all-functions .functions::-webkit-scrollbar{width:4px}.slot-item-container .all-functions .functions::-webkit-scrollbar-track{background-color:#fff}.slot-item-container .all-functions .functions::-webkit-scrollbar-thumb{background:#787878;border-radius:25px}.slot-item-container .all-functions .function{display:flex;justify-content:space-between;white-space:nowrap;padding:5px 10px;font-size:12px;color:#787878}.slot-item-container .all-functions .function span{display:flex;align-content:center;align-items:center;margin-right:4px}.slot-item-container .all-functions .function:hover{background:#444e6933}.slot-item-container .all-functions .btn-add{cursor:pointer;width:16px;font-size:16px;text-align:center;font-style:normal}.slot-item-container .info{overflow:hidden;margin-left:-2px;margin-top:-19px;position:absolute;left:100%;top:50%;transform:translateY(-50%);width:0;display:flex;align-items:flex-start;transition:all .3s}.slot-item-container .info>img{flex:0 0 auto;width:53px;height:29px}`,Oo="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGsAAAA7CAYAAAB8MXT7AAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAGTSURBVHic7dxLbQNBEIThnigADGEhxAwcBoZgCIZgBoZgCIZgCIaQMIgZVC4daw/xXPLoqdX/3fbW0milUtfutMCdpCkiLhEx1U6CLkkvkt4k7atnQYekfR7US/Us6JB0yIOaqmfBA5JWks6SrhzUwCRN+TYdq2dBx+ygDtWzoEPSNg9qVz0LOmZBgsQ3sqUkvufqAf6SpFVEnCPiFhHr1tqteCR8hyBhYrY6OlTPgo5cHX1I2lbPgo6lBInFk3Rc+uroqXqAn8ogcc3H19bae+U8eIDEZ0LSJoMEZeHIWB2ZIPEZoCw0QVlogsRnYlYWsjoaGUHCRK6OOKiRfa2OMvWtqufBAwQJE5SFJmZl4aZ6FnSQ+Azk6mjxZeFv+/fycfbDWrTW1pSFgyLxmcjVEWXh6CgLTZD4DMzKwguro4ERJEywOjIhaUdZaIAgYYKy0ABloQkSnwlxKZUHcSmVBxKfgVwdnSgLB8d35iZIfCYoC01QFpog8Y3rftFWrotO+cilVKMiSJigLDSS30hQFhr4BEcKZN0LNhDxAAAAAElFTkSuQmCC",ds={name:"",isMobile:!1},zo={"&":"&","<":"<",">":">",'"':""","'":"'"};function Xe(n){return n==null?"":String(n).replace(/[&<>"']/g,e=>zo[e])}function ps(...n){return n.filter(Boolean).join(" ")}class Xs extends HTMLElement{constructor(e){super(),this._size=12,this._showDialog=!1,this._selected=!1,this._focused=!1,this._toBeInstalled=!1,this._toBeReplaced=!1,this._hasError=!1,this._canInstall=!1,this._hide=!1,this._disable=!1,this._filled=!1,this._allFunctions=[],this._functions=[],this._deviceName="",this._deviceLogo="",this._renderQueued=!1,this._needsRender=!0,this.attachShadow({mode:"open"}),this._props={...ds,...e??{}},this.handleShadowClick=this.handleShadowClick.bind(this),this.shadowRoot.addEventListener("click",this.handleShadowClick),this.render()}connectedCallback(){this._needsRender&&(this._needsRender=!1,this.render())}get props(){return this._props}set props(e){this._props={...ds,...e},this.scheduleRender()}get slot(){return this._slot}set slot(e){this._slot=e,this.scheduleRender()}get selected(){return this._selected}set selected(e){const t=!!e;this._selected!==t&&(this._selected=t,this.scheduleRender())}get focused(){return this._focused}set focused(e){const t=!!e;this._focused!==t&&(this._focused=t,this.scheduleRender())}get toBeInstalled(){return this._toBeInstalled}set toBeInstalled(e){const t=!!e;this._toBeInstalled!==t&&(this._toBeInstalled=t,this.scheduleRender())}get toBeReplaced(){return this._toBeReplaced}set toBeReplaced(e){const t=!!e;this._toBeReplaced!==t&&(this._toBeReplaced=t,this.scheduleRender())}get hasError(){return this._hasError}set hasError(e){const t=!!e;this._hasError!==t&&(this._hasError=t,this.scheduleRender())}get canInstall(){return this._canInstall}set canInstall(e){const t=!!e;this._canInstall!==t&&(this._canInstall=t,this.scheduleRender())}get hide(){return this._hide}set hide(e){const t=!!e;this._hide!==t&&(this._hide=t,this.scheduleRender())}get disable(){return this._disable}set disable(e){const t=!!e;this._disable!==t&&(this._disable=t,this.scheduleRender())}get filled(){return this._filled}set filled(e){const t=!!e;this._filled!==t&&(this._filled=t,this.scheduleRender())}get allFunctions(){return[...this._allFunctions]}set allFunctions(e){this._allFunctions=Array.isArray(e)?[...e]:[],this.hasMoreFunctions||(this._showDialog=!1),this.scheduleRender()}get functions(){return[...this._functions]}set functions(e){this._functions=Array.isArray(e)?[...e]:[],this.hasMoreFunctions||(this._showDialog=!1),this.scheduleRender()}get deviceName(){return this._deviceName}set deviceName(e){this._deviceName=e??"",this.scheduleRender()}get deviceLogo(){return this._deviceLogo}set deviceLogo(e){this._deviceLogo=e??"",this.scheduleRender()}get hasMoreFunctions(){return this._allFunctions.some(e=>!this._functions.includes(e))}setSize(e=12){const t=Number.isFinite(e)?Number(e):12;this._size!==t&&(this._size=t,this.scheduleRender())}removeDevice(){var e,t;this._showDialog=!1,this.scheduleRender(),(t=(e=this._props).onRemove)==null||t.call(e)}addFunction(e){this.dispatchEvent(new CustomEvent("function-added",{detail:e}))}scheduleRender(){if(!this.isConnected){this._needsRender=!0;return}this._renderQueued||(this._renderQueued=!0,queueMicrotask(()=>{this._renderQueued=!1,this.render()}))}render(){var p;if(!this.shadowRoot)return;const e=ps("slot-item-container",this._props.isMobile&&"is-mobile"),t=ps("main",this._selected&&"selected",this._focused&&"focus",this._toBeInstalled&&"to-be-installed",this._toBeReplaced&&"to-be-replaced",this._hasError&&"has-error",this._canInstall&&"can-install",this._hide&&"hidden",this._disable&&"disable",this._filled&&"filled"),i=this._functions.map(s=>{const a=Xe(s);return`<div class="function" data-function="${a}"><span>${a}</span><i class="btn btn-remove" data-action="remove-function" data-function="${a}"></i></div>`}).join(""),r=this._allFunctions.filter(s=>!this._functions.includes(s)),l=this._allFunctions.length?`<div class="functions">${i}${`<div class="btn btn-add ${this.hasMoreFunctions?"":"btn-not-allowed"}" data-action="toggle-dialog">+添加</div>`}</div>`:"",o=r.length?`<div class="all-functions ${this._showDialog?"show":""}">
|
|
3706
|
+
*/(function(){HowlerGlobal.prototype._pos=[0,0,0],HowlerGlobal.prototype._orientation=[0,0,-1,0,1,0],HowlerGlobal.prototype.stereo=function(t){var i=this;if(!i.ctx||!i.ctx.listener)return i;for(var s=i._howls.length-1;s>=0;s--)i._howls[s].stereo(t);return i},HowlerGlobal.prototype.pos=function(t,i,s){var a=this;if(!a.ctx||!a.ctx.listener)return a;if(i=typeof i!="number"?a._pos[1]:i,s=typeof s!="number"?a._pos[2]:s,typeof t=="number")a._pos=[t,i,s],typeof a.ctx.listener.positionX<"u"?(a.ctx.listener.positionX.setTargetAtTime(a._pos[0],Howler.ctx.currentTime,.1),a.ctx.listener.positionY.setTargetAtTime(a._pos[1],Howler.ctx.currentTime,.1),a.ctx.listener.positionZ.setTargetAtTime(a._pos[2],Howler.ctx.currentTime,.1)):a.ctx.listener.setPosition(a._pos[0],a._pos[1],a._pos[2]);else return a._pos;return a},HowlerGlobal.prototype.orientation=function(t,i,s,a,o,c){var u=this;if(!u.ctx||!u.ctx.listener)return u;var m=u._orientation;if(i=typeof i!="number"?m[1]:i,s=typeof s!="number"?m[2]:s,a=typeof a!="number"?m[3]:a,o=typeof o!="number"?m[4]:o,c=typeof c!="number"?m[5]:c,typeof t=="number")u._orientation=[t,i,s,a,o,c],typeof u.ctx.listener.forwardX<"u"?(u.ctx.listener.forwardX.setTargetAtTime(t,Howler.ctx.currentTime,.1),u.ctx.listener.forwardY.setTargetAtTime(i,Howler.ctx.currentTime,.1),u.ctx.listener.forwardZ.setTargetAtTime(s,Howler.ctx.currentTime,.1),u.ctx.listener.upX.setTargetAtTime(a,Howler.ctx.currentTime,.1),u.ctx.listener.upY.setTargetAtTime(o,Howler.ctx.currentTime,.1),u.ctx.listener.upZ.setTargetAtTime(c,Howler.ctx.currentTime,.1)):u.ctx.listener.setOrientation(t,i,s,a,o,c);else return m;return u},Howl.prototype.init=function(t){return function(i){var s=this;return s._orientation=i.orientation||[1,0,0],s._stereo=i.stereo||null,s._pos=i.pos||null,s._pannerAttr={coneInnerAngle:typeof i.coneInnerAngle<"u"?i.coneInnerAngle:360,coneOuterAngle:typeof i.coneOuterAngle<"u"?i.coneOuterAngle:360,coneOuterGain:typeof i.coneOuterGain<"u"?i.coneOuterGain:0,distanceModel:typeof i.distanceModel<"u"?i.distanceModel:"inverse",maxDistance:typeof i.maxDistance<"u"?i.maxDistance:1e4,panningModel:typeof i.panningModel<"u"?i.panningModel:"HRTF",refDistance:typeof i.refDistance<"u"?i.refDistance:1,rolloffFactor:typeof i.rolloffFactor<"u"?i.rolloffFactor:1},s._onstereo=i.onstereo?[{fn:i.onstereo}]:[],s._onpos=i.onpos?[{fn:i.onpos}]:[],s._onorientation=i.onorientation?[{fn:i.onorientation}]:[],t.call(this,i)}}(Howl.prototype.init),Howl.prototype.stereo=function(t,i){var s=this;if(!s._webAudio)return s;if(s._state!=="loaded")return s._queue.push({event:"stereo",action:function(){s.stereo(t,i)}}),s;var a=typeof Howler.ctx.createStereoPanner>"u"?"spatial":"stereo";if(typeof i>"u")if(typeof t=="number")s._stereo=t,s._pos=[t,0,0];else return s._stereo;for(var o=s._getSoundIds(i),c=0;c<o.length;c++){var u=s._soundById(o[c]);if(u)if(typeof t=="number")u._stereo=t,u._pos=[t,0,0],u._node&&(u._pannerAttr.panningModel="equalpower",(!u._panner||!u._panner.pan)&&e(u,a),a==="spatial"?typeof u._panner.positionX<"u"?(u._panner.positionX.setValueAtTime(t,Howler.ctx.currentTime),u._panner.positionY.setValueAtTime(0,Howler.ctx.currentTime),u._panner.positionZ.setValueAtTime(0,Howler.ctx.currentTime)):u._panner.setPosition(t,0,0):u._panner.pan.setValueAtTime(t,Howler.ctx.currentTime)),s._emit("stereo",u._id);else return u._stereo}return s},Howl.prototype.pos=function(t,i,s,a){var o=this;if(!o._webAudio)return o;if(o._state!=="loaded")return o._queue.push({event:"pos",action:function(){o.pos(t,i,s,a)}}),o;if(i=typeof i!="number"?0:i,s=typeof s!="number"?-.5:s,typeof a>"u")if(typeof t=="number")o._pos=[t,i,s];else return o._pos;for(var c=o._getSoundIds(a),u=0;u<c.length;u++){var m=o._soundById(c[u]);if(m)if(typeof t=="number")m._pos=[t,i,s],m._node&&((!m._panner||m._panner.pan)&&e(m,"spatial"),typeof m._panner.positionX<"u"?(m._panner.positionX.setValueAtTime(t,Howler.ctx.currentTime),m._panner.positionY.setValueAtTime(i,Howler.ctx.currentTime),m._panner.positionZ.setValueAtTime(s,Howler.ctx.currentTime)):m._panner.setPosition(t,i,s)),o._emit("pos",m._id);else return m._pos}return o},Howl.prototype.orientation=function(t,i,s,a){var o=this;if(!o._webAudio)return o;if(o._state!=="loaded")return o._queue.push({event:"orientation",action:function(){o.orientation(t,i,s,a)}}),o;if(i=typeof i!="number"?o._orientation[1]:i,s=typeof s!="number"?o._orientation[2]:s,typeof a>"u")if(typeof t=="number")o._orientation=[t,i,s];else return o._orientation;for(var c=o._getSoundIds(a),u=0;u<c.length;u++){var m=o._soundById(c[u]);if(m)if(typeof t=="number")m._orientation=[t,i,s],m._node&&(m._panner||(m._pos||(m._pos=o._pos||[0,0,-.5]),e(m,"spatial")),typeof m._panner.orientationX<"u"?(m._panner.orientationX.setValueAtTime(t,Howler.ctx.currentTime),m._panner.orientationY.setValueAtTime(i,Howler.ctx.currentTime),m._panner.orientationZ.setValueAtTime(s,Howler.ctx.currentTime)):m._panner.setOrientation(t,i,s)),o._emit("orientation",m._id);else return m._orientation}return o},Howl.prototype.pannerAttr=function(){var t=this,i=arguments,s,a,o;if(!t._webAudio)return t;if(i.length===0)return t._pannerAttr;if(i.length===1)if(typeof i[0]=="object")s=i[0],typeof a>"u"&&(s.pannerAttr||(s.pannerAttr={coneInnerAngle:s.coneInnerAngle,coneOuterAngle:s.coneOuterAngle,coneOuterGain:s.coneOuterGain,distanceModel:s.distanceModel,maxDistance:s.maxDistance,refDistance:s.refDistance,rolloffFactor:s.rolloffFactor,panningModel:s.panningModel}),t._pannerAttr={coneInnerAngle:typeof s.pannerAttr.coneInnerAngle<"u"?s.pannerAttr.coneInnerAngle:t._coneInnerAngle,coneOuterAngle:typeof s.pannerAttr.coneOuterAngle<"u"?s.pannerAttr.coneOuterAngle:t._coneOuterAngle,coneOuterGain:typeof s.pannerAttr.coneOuterGain<"u"?s.pannerAttr.coneOuterGain:t._coneOuterGain,distanceModel:typeof s.pannerAttr.distanceModel<"u"?s.pannerAttr.distanceModel:t._distanceModel,maxDistance:typeof s.pannerAttr.maxDistance<"u"?s.pannerAttr.maxDistance:t._maxDistance,refDistance:typeof s.pannerAttr.refDistance<"u"?s.pannerAttr.refDistance:t._refDistance,rolloffFactor:typeof s.pannerAttr.rolloffFactor<"u"?s.pannerAttr.rolloffFactor:t._rolloffFactor,panningModel:typeof s.pannerAttr.panningModel<"u"?s.pannerAttr.panningModel:t._panningModel});else return o=t._soundById(parseInt(i[0],10)),o?o._pannerAttr:t._pannerAttr;else i.length===2&&(s=i[0],a=parseInt(i[1],10));for(var c=t._getSoundIds(a),u=0;u<c.length;u++)if(o=t._soundById(c[u]),o){var m=o._pannerAttr;m={coneInnerAngle:typeof s.coneInnerAngle<"u"?s.coneInnerAngle:m.coneInnerAngle,coneOuterAngle:typeof s.coneOuterAngle<"u"?s.coneOuterAngle:m.coneOuterAngle,coneOuterGain:typeof s.coneOuterGain<"u"?s.coneOuterGain:m.coneOuterGain,distanceModel:typeof s.distanceModel<"u"?s.distanceModel:m.distanceModel,maxDistance:typeof s.maxDistance<"u"?s.maxDistance:m.maxDistance,refDistance:typeof s.refDistance<"u"?s.refDistance:m.refDistance,rolloffFactor:typeof s.rolloffFactor<"u"?s.rolloffFactor:m.rolloffFactor,panningModel:typeof s.panningModel<"u"?s.panningModel:m.panningModel};var d=o._panner;d||(o._pos||(o._pos=t._pos||[0,0,-.5]),e(o,"spatial"),d=o._panner),d.coneInnerAngle=m.coneInnerAngle,d.coneOuterAngle=m.coneOuterAngle,d.coneOuterGain=m.coneOuterGain,d.distanceModel=m.distanceModel,d.maxDistance=m.maxDistance,d.refDistance=m.refDistance,d.rolloffFactor=m.rolloffFactor,d.panningModel=m.panningModel}return t},Sound.prototype.init=function(t){return function(){var i=this,s=i._parent;i._orientation=s._orientation,i._stereo=s._stereo,i._pos=s._pos,i._pannerAttr=s._pannerAttr,t.call(this),i._stereo?s.stereo(i._stereo):i._pos&&s.pos(i._pos[0],i._pos[1],i._pos[2],i._id)}}(Sound.prototype.init),Sound.prototype.reset=function(t){return function(){var i=this,s=i._parent;return i._orientation=s._orientation,i._stereo=s._stereo,i._pos=s._pos,i._pannerAttr=s._pannerAttr,i._stereo?s.stereo(i._stereo):i._pos?s.pos(i._pos[0],i._pos[1],i._pos[2],i._id):i._panner&&(i._panner.disconnect(0),i._panner=void 0,s._refreshBuffer(i)),t.call(this)}}(Sound.prototype.reset);var e=function(t,i){i=i||"spatial",i==="spatial"?(t._panner=Howler.ctx.createPanner(),t._panner.coneInnerAngle=t._pannerAttr.coneInnerAngle,t._panner.coneOuterAngle=t._pannerAttr.coneOuterAngle,t._panner.coneOuterGain=t._pannerAttr.coneOuterGain,t._panner.distanceModel=t._pannerAttr.distanceModel,t._panner.maxDistance=t._pannerAttr.maxDistance,t._panner.refDistance=t._pannerAttr.refDistance,t._panner.rolloffFactor=t._pannerAttr.rolloffFactor,t._panner.panningModel=t._pannerAttr.panningModel,typeof t._panner.positionX<"u"?(t._panner.positionX.setValueAtTime(t._pos[0],Howler.ctx.currentTime),t._panner.positionY.setValueAtTime(t._pos[1],Howler.ctx.currentTime),t._panner.positionZ.setValueAtTime(t._pos[2],Howler.ctx.currentTime)):t._panner.setPosition(t._pos[0],t._pos[1],t._pos[2]),typeof t._panner.orientationX<"u"?(t._panner.orientationX.setValueAtTime(t._orientation[0],Howler.ctx.currentTime),t._panner.orientationY.setValueAtTime(t._orientation[1],Howler.ctx.currentTime),t._panner.orientationZ.setValueAtTime(t._orientation[2],Howler.ctx.currentTime)):t._panner.setOrientation(t._orientation[0],t._orientation[1],t._orientation[2])):(t._panner=Howler.ctx.createStereoPanner(),t._panner.pan.setValueAtTime(t._stereo,Howler.ctx.currentTime)),t._panner.connect(t._node),t._paused||t._parent.pause(t._id,!0).play(t._id,!0)}})()})(tn);const dl="data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjQxLjEwMAAAAAAAAAAAAAAA//NwwAAAAAAAAAAAAEluZm8AAAAPAAAAFAAACOAAICAgICwsLCwsNzc3NzdDQ0NDQ09PT09PW1tbW1tmZmZmZnJycnJyfn5+fn6KioqKipWVlZWVoaGhoaGtra2trbm5ubm5xcXFxcXQ0NDQ0Nzc3Nzc6Ojo6Oj09PT09P//////AAAAAExhdmM1OC43NQAAAAAAAAAAAAAAACQCwAAAAAAAAAjgTZykiAAAAAAAAAAAAAAAAAD/80DEABJhFmQCwwYUIDsKrsHAWBMRyeJYliQJBg5RYsWU/W3z/8OLc/3AAAQiIAIjv+7vUCJXd4jucQABAE3lwffiDBD+JC58oCH8H/1h/WH//1HPwTUMFrULH9ELKxULyTodFKYbO//zQsQRFFkScKDSRhyGWpIFpG91I7Fi/F6D2RWwN6TN/t9CiVSG5wMw74ogYcHoEwTFyMmTf4KkxEwmRfjXIYv1tpIOZRv/3O9ibtjR6gYmbGCgQ+Fk0mfSmybOX1cf78g7D6nP6qxCgf/zQMQbF+EacktaSABfy+3JKszHdMgcwwcl/kNFIuAo0I0DD1fWVs/crTSTTRInof3cmIwyLBwGQqCSLq7hyvtRPBB4aFyyXHov9X///7UXKqoIIcgcHict89/0y+n+nf/C0DIjB/+P//NCxBYZU9q0AYpoAHNyXSLn/+EjEbJclC4eJT//8e5aMAWeE4////wvAyAvYjZLjAD0Lg9D0kCU/////zwwBdJcYAehKBIwtYyx6FyXC4XP//////x7l83NDpfqd6gAcA/+wu9A2FGg//NAxAwXCnsq/5M4AhQKAOwmRvQRhjhOe5S8UkAmVHpU8IVU3lwejjIcayXOOceGwjf+D05I8oAu2x382o1ZHHV//31NU4441lmqcv///+RNGrUJKImnTf//iVYK1UZquoZESSy3egH/80LEChchBtMfyzAAk191v20qimbuNqavb211BthJKSJAG2aucbdLeVFVmRjZEVvzOggIwuUFDgvEZA7UeuUqNMLOraDQ5CVCk5m9BsmT3kbNrBdolcFSsqXGwQTWyYUX2wEDEgKkvZb/80DECRYRUpWsikYY1HXLbDZksYxtCHBShdHt/DgYCOM6r8AmUSpfGZYzH7ARMBCj1JtmY/hmwoGio0XBUShoklC5GsNeDR38RQ6d01DyrENtqp6mCJ5GJUckmpUBaIgYK6C0fPjmUf/zQsQLFil+cajTBhydxPRO4mLMWWSGQF2qa1f3PPlHQDJdzCxnwgkzB1SQohrpNRYRgtobv07tBLUFc27jQdWoQY0JNpiMJy654enBVoqnQR571uq/i9rpL1oAqAupJATLLk5L+QT3Kf/zQMQOE9D2bWFaGACZyWQZdt1rd3OVY8s/y2dBlg0m12PFzdFSlYrboY6gMOE1hJp7iFqmDcopF8F2OKEPnktdThRLoy9iuyj//0vD4+qf///++38OsIIFFhpEFZMC4s+gZmilJz1X//NCxBkaW8allZI4AWPWKBoLFWrwfuYvukbk4Rt9tBuJYOBoWpfzfjQaNMp//+OGEzzzDIif3+n/4PBIEt5hjDc9zxv/////nseeNDHGg0MQwxBEFn//////4TpB9d/s9thcHddpssFg//NAxAsVCT8GX5BAAigUAPBBdOBaKEIpaajR1VyCNH/gAwAfjRX8G7B4zfx0HANA8BpjQ6FhfqKxRBQURleGbrufzJywVGVfRdOzp5///ERCxhb//8wqijBAwUYMBCjVWZsv26uwYU3/80LEERRTIuTLwxABmdQgEBGKFNo9amfRWcpnayOUsKJ/UpWo/qyL////sj1b+pc3oarStSWpf/VP+hlotDN/0MVjKMKDAZGL/Ar8QWpCR0msAoVgrMoeT3xHIZd3qARkQge7hzlejQD/80DEGxPQ5sryeYYUBCI58AEvohe5nAMDcPxAbUxN6VCB4xCid97iaTyonF0l4upInmIpD//V0f/OllFls0vEBipVlYYRWhuzlHgpEiJSRmYJQaiptezfqvKm1PBRJKiq7M3s1yoqKv/zQsQmFBEGuojBkAQdCzTSpHY0FSwdboEQKi7pZN986g7UVOkf5ZR6VdbbQwZ+79PW6VoWdwZqA4VT2QGoxuuO0VZgbATjSNkSqqresUZ4lDGM5tfbuZzGHYfri5YKg0eDjgQjhm0Wpf/zQMQxE1jyoqhoxFD16D4jzQUUULEB1QXZhRIdIbHFtSlSvX5anFh11QTHaABkiBXOXoXxGW9galRr4fRiew3yOag/4HjxOydOM9ZyyokPlRKdFBa0CjY1luBiKXXwLw6oeMWEhjoS//NCxD4TUNKKIJpMJNTRh7nf/3kekmjdSWypy9UZXQgZMDh3pnAWB4O2M6nAaelR4r1OmVPFSwoksiWRUE1zc+f1lPc0ZudtdFDr4LLpoSwwGkpVO+oD6Tlb3HsYL7d+R1//td2LQMNF//NAxEwTaP5xYqJMCFlqIwAbEoCJNDEp9/3itYVbV6Yx/v0nuLdzyy50qHQw3cafmKlb6zBo0yXeRMnQG5J4jE7j4PFAkTSpQ9pexojMMsL0PIqP/Z1Xp/TpnVZZ27eWtNWRSSSyWyz/80LEWRSo1nDhWhgAlsstlkskgADyNOHqG5rlhLnSyI0a5oClU7uw0JnJQq2kTMBUYADEskGQ9wdHohh2xMKnCubKTIdyRgT83NEIrcfJpJOL3fV7l9cyXXJwJRDGpJLTZJF1+3OPUX3/80DEYiVyorJfmlgDRVRdYm21rHJXTVH0+ajd35ouiSF1tVcmLGnFummxbrhsXfHNzcf/2qgd/7XhppiSaYkmmQGRpnCsAMAEB4tQrXVA0VOiINSMWfljtMTHsRdZ3iL/V1neW6zvLf/zQsQnDSAiMFXMGADWd4i6zvEX+W/yzud5ZUxBTUUzLjEwMFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQ==";let pl=class{constructor(){this.sound=new tn.Howl({src:[dl]})}play(){this.sound.play()}};const Ae=r=>{var e,t;if(typeof r.destroy=="function"){r.destroy();return}for(;r.children.length>0;)Ae(r.children[0]),(e=r.children[0])==null||e.removeFromParent();if(r instanceof f.Mesh)try{(t=r.geometry)==null||t.dispose()}catch{}};function ml(r){return new f.Vector3(r[0],r[1],r[2])}function gl(){let r=3,e=Math.max(1/window.devicePixelRatio,.5);return window.innerWidth/window.innerHeight<.65&&(r=4,e=1/window.devicePixelRatio),{tiles:r,renderScale:e}}function vl(r){let e=!1,t=!1,i=!1,s=1/0,a=1/0,o=1/0,c=-1/0,u=-1/0,m=-1/0,d=0,n=0;return r.traverse(h=>{if(h.isMesh&&h.geometry){const g=h;if(g.userData.ignoreSize||g.material.userData.isLOGO)return;g.geometry.computeBoundingBox();let _=g.geometry.attributes.position;const p=g.geometry.morphAttributes.position;let v=g.morphTargetInfluences;const y=Object.keys(g.morphTargetDictionary||{});y.includes("width")&&(t=!0),y.includes("length")&&(e=!0),y.includes("height")&&(i=!0);for(let x=0;x<_.count;x++){let w=_.getX(x),b=_.getY(x),T=_.getZ(x);n=Math.max(b,n),p&&v&&p.forEach((S,C)=>{const R=v&&v[C]||0;w+=S.getX(x)*R,b+=S.getY(x)*R,T+=S.getZ(x)*R}),w<s&&(s=w),b<a&&(a=b),T<o&&(o=T),w>c&&(c=w),b>u&&(u=b),T>m&&(m=T);const M=Math.sqrt(w*w+b*b);M>d&&(d=M)}}}),{box:new f.Box3(new f.Vector3(s,a,o),new f.Vector3(c,u,m)),maxRadius:d,height:n,hasWidth:t,hasLength:e,hasHeight:i}}function _l(r,e,t=null){let i=0;return function(){let s=t||this,a=arguments;clearTimeout(i),i=window.setTimeout(function(){r.apply(s,a)},e)}}class yl{constructor(e,t,i){this.length=e,this.width=t,this.height=i}}const cr=r=>{var i;let e=0,t=0;if(r.geometry){r.geometry.computeBoundingBox();const s=new f.Vector3;(i=r.geometry.boundingBox)==null||i.getSize(s),s.y?(t=s.y,!s.x&&s.z?e=s.z:s.x&&!s.z?e=s.x:s.x&&s.z&&(e=s.z)):(e=s.z,t=s.x)}return{width:e,height:t}};function Ms(){var e;if(typeof navigator>"u")return!1;if(xl())return!0;const r=(e=navigator.userAgent)==null?void 0:e.toLowerCase();return/iphone|ipad|ipod|android|mobile|blackberry|iemobile|opera mini/.test(r)}function xl(){try{if(typeof wx<"u"&&wx.getSystemInfo||typeof my<"u"&&my.alert||typeof tt<"u"&&tt.getSystemInfo||typeof swan<"u"&&swan.getSystemInfo)return!0}catch{}return!1}const sn=new Hn.GLTFExporter,gt=new zn.GLTFLoader,Ai=new Vn.DRACOLoader;let ht="./draco/";try{ht=new URL("./draco/",typeof document>"u"?require("url").pathToFileURL(__filename).href:pt&&pt.src||new URL("shop-components.cjs",document.baseURI).href).href}catch{ht="./draco/"}typeof window<"u"&&window.dracoPath&&(ht=window.dracoPath);Ai.setDecoderConfig({type:"wasm"});Ai.setDecoderPath(ht.endsWith("/")?ht:`${ht}/`);Ai.preload();gt.setDRACOLoader(Ai);const wl=new Un.DRACOExporter,ur=[115,103,108,98];function bl(r,e,t){const i=JSON.stringify(e),s=new TextEncoder().encode(i),a=new Uint8Array([115,103,108,98]),o=new Uint8Array(2);o[0]=t>>8,o[1]=t&255;const c=new Uint8Array(4);c[0]=s.length>>24,c[1]=s.length>>16&255,c[2]=s.length>>8&255,c[3]=s.length&255;const u=new Uint8Array(r),m=a.length+o.length+c.length+s.length+u.length,d=new Uint8Array(m);let n=0;return d.set(a,n),n+=a.length,d.set(o,n),n+=o.length,d.set(c,n),n+=c.length,d.set(s,n),n+=s.length,d.set(u,n),d.buffer}function Al(r){const e=new Uint8Array(r.slice(0,4));let t=!0;for(let n=0;n<ur.length;n++)if(e[n]!==ur[n]){t=!1;break}if(!t)throw new Error("Invalid file format");const s=new DataView(r,4,2).getUint16(0,!1),o=new DataView(r,6,4).getUint32(0,!1),c=new Uint8Array(r.slice(10,10+o)),u=new TextDecoder().decode(c),m=JSON.parse(u),d=r.slice(10+o);return{version:s,jsonDescription:m,glbContent:d}}class vi{constructor(e){this.props=e,this.cache=new Map}load(e,t,i,s){if(this.props.useCache&&this.cache.has(e)){t(this.cache.get(e));return}const a=this;fetch(e).then(o=>{if(!o.ok){s==null||s(new ErrorEvent("NetworkError",{message:"NetworkError for "+e+": "+o.statusText}));return}return o.arrayBuffer()}).then(async o=>{o||s==null||s(new ErrorEvent("Error",{message:"Not a valid sglb file."}));try{const c=a.parse(o);if(!c.glbContent){s==null||s(new ErrorEvent("Error",{message:"No glb content."}));return}const u=rs(c.glbContent,"model/gltf-binary"),m=await gt.loadAsync(u);URL.revokeObjectURL(u),c.glbContent=void 0,c.glb=m.scene,o=void 0,this.cache.set(e,c),t(c)}catch(c){s==null||s(new ErrorEvent("Error",{message:c==null?void 0:c.message}))}}).catch(o=>{s==null||s(new ErrorEvent("Error",{message:o.message}))})}async loadAsync(e){if(this.props.useCache&&this.cache.has(e))return this.cache.get(e);try{const t=await fetch(e);if(!t.ok)throw new Error(`NetworkError for ${e}: ${t.statusText}`);const i=await t.arrayBuffer();if(!i)throw new Error("Not a valid sglb file.");const s=this.parse(i);if(!s.glbContent)throw new Error("No GLB content.");const a=rs(s.glbContent,"model/gltf-binary");console.log(a);const o=await gt.loadAsync(a);return URL.revokeObjectURL(a),s.glbContent=void 0,s.glb=o.scene,this.cache.set(e,s),s}catch(t){throw t}}parse(e){return Al(e)}clear(){[...this.cache.values()]}}const Tl=`*{box-sizing:border-box}.slot-item-container.is-mobile .main{pointer-events:none;border-width:1px;opacity:.8}.slot-item-container.is-mobile .main.focus{width:18px!important;height:18px!important;border-width:2px;opacity:1}.slot-item-container.is-mobile .main.filled{opacity:1;border-width:1px;width:14px!important;height:14px!important;background-image:none;border-radius:50%}.slot-item-container.is-mobile .main.to-be-installed{opacity:1;pointer-events:auto;width:38px!important;height:38px!important;border-color:#000;border-width:1px;background-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20fill='none'%20version='1.1'%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%3e%3cg%3e%3cg%3e%3cpath%20d='M20,10.75L0,10.75L0,9.25L20,9.25L20,10.75Z'%20fill-rule='evenodd'%20fill='%23000000'%20fill-opacity='1'/%3e%3c/g%3e%3cg%20transform='matrix(0,1,1,0,10,-10)'%3e%3cpath%20d='M30,0.75L10,0.75L10,-0.75L30,-0.75L30,0.75Z'%20fill-rule='evenodd'%20fill='%23000000'%20fill-opacity='1'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e");background-size:20px auto;background-repeat:no-repeat;background-position:center;background-color:#fff9}.slot-item-container.is-mobile .main.to-be-installed+.info{pointer-events:auto;overflow:visible;width:auto}.slot-item-container.is-mobile .main.to-be-installed.filled{opacity:1;border-width:2px;width:18px!important;height:18px!important;background-image:none;border-radius:50%;border-color:#00ff95}.slot-item-container.is-mobile .main.to-be-installed.to-be-replaced{opacity:1;border-width:1px;pointer-events:auto;width:38px!important;height:38px!important;border-radius:50%;background-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20fill='none'%20version='1.1'%20width='40'%20height='40'%20viewBox='0%200%2040%2040'%3e%3cdefs%3e%3cclipPath%20id='master_svg0_504_014299'%3e%3crect%20x='0'%20y='0'%20width='40'%20height='40'%20rx='20'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23master_svg0_504_014299)'%3e%3cg%3e%3cg%3e%3cpath%20d='M31.695414,17L26.009501,10.74549544L24.899591,11.75450456L28.304586,15.5L8.75,15.5L8.75,17L31.695414,17Z'%20fill-rule='evenodd'%20fill='%23000000'%20fill-opacity='1'/%3e%3c/g%3e%3cg%3e%3cpath%20d='M8.3045862,23L13.9904997,29.2545042L15.10041,28.2454953L11.6954139,24.5L31.25,24.5L31.25,23L8.3045862,23Z'%20fill-rule='evenodd'%20fill='%23000000'%20fill-opacity='1'/%3e%3c/g%3e%3c/g%3e%3c/g%3e%3c/svg%3e");background-size:38px auto;border-color:#000}.slot-item-container.is-mobile .info{left:100%;margin-top:0;margin-left:4px}.slot-item-container.is-mobile .info .name-wrapper{margin-top:0;border-radius:0;background:#000;color:#fff}.slot-item-container.is-mobile .info>img{display:none}.slot-item-container .main{pointer-events:auto;cursor:pointer;font-size:12px;color:#fff;width:22px;height:22px;background:#fff0;border:2px solid #fff;border-radius:0;transition:background .2s,width .14s,height .14s,border .14s}.slot-item-container .main.disable{cursor:not-allowed}.slot-item-container .main.drag-over{border-color:red}.slot-item-container .main.can-install{position:relative;width:44px;height:44px;background:#0066ff1a;border-color:#06f}.slot-item-container .main.filled{border-color:#00ff95;border-radius:50%}.slot-item-container .main.selected{border-width:4px}.slot-item-container .main.selected+.info{pointer-events:auto;overflow:visible;width:auto}.slot-item-container .main.focus{border-color:#000}.slot-item-container .main.focus+.info{pointer-events:auto;overflow:visible;width:auto}.slot-item-container .main.has-error{border-color:red}.slot-item-container .main.hidden{display:none}.slot-item-container .main.hidden+.info{display:none}.slot-item-container .main:after{pointer-events:none;content:attr(data-name);transition:all .2s .3s;opacity:0;position:absolute;left:50%;bottom:100%;transform:translate3d(-50%,5px,0);white-space:nowrap;font-size:12px;color:#000;padding:2px 8px;border-radius:2px;background:#fff}.slot-item-container .main:hover{background:#ffffff80}.slot-item-container .main:hover+.info{pointer-events:auto;overflow:visible;width:auto}.slot-item-container .name{position:relative}.slot-item-container .name-wrapper{margin-top:-10px;white-space:nowrap;font-size:12px;color:#fff;padding:2px 8px;background:#000}.slot-item-container .functions-wrapper{z-index:20000;position:absolute;left:0;top:100%}.slot-item-container .functions-wrapper>.functions{display:inline-block;min-width:100px;padding:6px 0;border-left:1px solid #00ff95;border-radius:0 2px 2px 0;background:#0003;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.slot-item-container .functions-wrapper>.functions .btn-add{cursor:pointer;padding:2px 0;margin:0 8px;display:flex;justify-content:center;align-content:center;align-items:center;border:1px dashed #eee;font-size:12px;color:#eee;border-radius:2px;-webkit-backdrop-filter:none;backdrop-filter:none;background:#00050a80}.slot-item-container .functions-wrapper>.functions .btn-add.btn-not-allowed{cursor:not-allowed}.slot-item-container .functions-wrapper>.functions .function{display:flex;justify-content:space-between;white-space:nowrap;margin-bottom:6px;padding:0 8px;font-size:12px;color:#fff}.slot-item-container .functions-wrapper>.functions .function span{margin-right:4px}.slot-item-container .functions-wrapper>.functions .function .btn-remove{pointer-events:none;opacity:0;cursor:pointer;align-self:center;margin-right:0;height:14px;width:14px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAACnSURBVEiJxZaxFcMgDETPTuUtWCWTM4pZAq5RojRpnOfEyEKxSnh3HySeBEhNjZJJTRgUG89GyZWilbKOgJCaKmWtFG2UvFnwQr56jYAcengg3dozELPGIjh96x6hu26/DIa9vD0jq/nUA3nikQEkAOW9nACUGbf7skxlX2mIj1Ob0jK76QdxbYpGFNlk3rPnNndDQltFaLMLbdehAyd8ZP5l6Ed+W17xG7oN9QkytAAAAABJRU5ErkJggg==) center no-repeat;background-size:10px 10px}.slot-item-container .functions-wrapper>.functions .function:hover .btn-remove{pointer-events:auto;opacity:1;transform:scale(1.2)}.slot-item-container .device-name{position:relative;margin:2px 0;display:flex;min-width:120px;align-items:center;align-content:center;justify-content:space-between;white-space:nowrap;height:30px;padding:0 8px;font-size:14px;font-weight:700;color:#000;background:#fff}.slot-item-container .device-name .device-logo{margin-left:-8px;margin-right:4px;width:30px;height:30px;object-fit:contain}.slot-item-container .device-name span{display:block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:250px}.slot-item-container .device-name .btn-close{margin-left:8px;cursor:pointer;height:20px;width:20px;background:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20fill='none'%20version='1.1'%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%3e%3cdefs%3e%3cclipPath%20id='master_svg0_504_017509'%3e%3crect%20x='0'%20y='0'%20width='20'%20height='20'%20rx='0'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23master_svg0_504_017509)'%3e%3cg%3e%3cpath%20d='M4.375,16.875L4.375,4.375L15.625,4.375L15.625,16.875L4.375,16.875ZM14.375,5.625L5.625,5.625L5.625,15.625L14.375,15.625L14.375,5.625Z'%20fill-rule='evenodd'%20fill='%23999999'%20fill-opacity='1'/%3e%3c/g%3e%3cg%3e%3cpath%20d='M8.125,12.1875L8.125,8.125L9.375,8.125L9.375,12.1875L8.125,12.1875Z'%20fill-rule='evenodd'%20fill='%23999999'%20fill-opacity='1'/%3e%3c/g%3e%3cg%3e%3cpath%20d='M10.625,12.1875L10.625,8.125L11.875,8.125L11.875,12.1875L10.625,12.1875Z'%20fill-rule='evenodd'%20fill='%23999999'%20fill-opacity='1'/%3e%3c/g%3e%3cg%3e%3cpath%20d='M16.875,5.625L3.125,5.625L3.125,4.375L16.875,4.375L16.875,5.625Z'%20fill-rule='evenodd'%20fill='%23999999'%20fill-opacity='1'/%3e%3c/g%3e%3cg%3e%3cpath%20d='M6.4446528999999995,5.625L13.545177899999999,5.625L11.8665838,2.5L8.15767372,2.5L6.4446528999999995,5.625ZM11.4548223,4.3749999L8.5553472,4.3749999L8.8979512,3.75L11.1191032,3.75L11.4548223,4.3749999Z'%20fill-rule='evenodd'%20fill='%23999999'%20fill-opacity='1'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e") center no-repeat;background-size:100% auto}.slot-item-container .device-name.empty{color:#000c;font-weight:400}.slot-item-container .device-name.empty .btn-close{display:none}.slot-item-container .device-name.empty:before{height:0}.slot-item-container .all-functions{opacity:0;pointer-events:none;min-width:80px;position:absolute;left:-10px;margin-left:100%;bottom:0;padding:6px 0;background:#fff;transition:all .3s}.slot-item-container .all-functions.show{opacity:1;pointer-events:auto;left:16px}.slot-item-container .all-functions label{margin-left:8px;margin-bottom:20px;color:#444e69;font-size:14px}.slot-item-container .all-functions .btn-close{cursor:pointer;position:absolute;right:7px;top:7px;height:16px;width:16px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAB4SURBVDiNpZPLEYAgDAUXe6MuoK4UpwdBwQkQJDcyb9+QnxORCOC9jyxE4Y78DiWxAIcmISKnxaSrtZhMNSOB+ZeacAS7ngl3k1JOBSBpk1INPib0YHjH+Du2S1DhlSZOYbPJ1iLtrLKrG2a9yJopYzTD8Jx+ArgAylOzjm1WpDwAAAAASUVORK5CYII=) center no-repeat;background-size:10px 10px}.slot-item-container .all-functions .functions{display:inline-block;max-height:200px;overflow-x:hidden;overflow-y:auto}.slot-item-container .all-functions .functions::-webkit-scrollbar{width:4px}.slot-item-container .all-functions .functions::-webkit-scrollbar-track{background-color:#fff}.slot-item-container .all-functions .functions::-webkit-scrollbar-thumb{background:#787878;border-radius:25px}.slot-item-container .all-functions .function{display:flex;justify-content:space-between;white-space:nowrap;padding:5px 10px;font-size:12px;color:#787878}.slot-item-container .all-functions .function span{display:flex;align-content:center;align-items:center;margin-right:4px}.slot-item-container .all-functions .function:hover{background:#444e6933}.slot-item-container .all-functions .btn-add{cursor:pointer;width:16px;font-size:16px;text-align:center;font-style:normal}.slot-item-container .info{overflow:hidden;margin-left:-2px;margin-top:-19px;position:absolute;left:100%;top:50%;transform:translateY(-50%);width:0;display:flex;align-items:flex-start;transition:all .3s}.slot-item-container .info>img{flex:0 0 auto;width:53px;height:29px}`,Sl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGsAAAA7CAYAAAB8MXT7AAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAGTSURBVHic7dxLbQNBEIThnigADGEhxAwcBoZgCIZgBoZgCIZgCIaQMIgZVC4daw/xXPLoqdX/3fbW0milUtfutMCdpCkiLhEx1U6CLkkvkt4k7atnQYekfR7US/Us6JB0yIOaqmfBA5JWks6SrhzUwCRN+TYdq2dBx+ygDtWzoEPSNg9qVz0LOmZBgsQ3sqUkvufqAf6SpFVEnCPiFhHr1tqteCR8hyBhYrY6OlTPgo5cHX1I2lbPgo6lBInFk3Rc+uroqXqAn8ogcc3H19bae+U8eIDEZ0LSJoMEZeHIWB2ZIPEZoCw0QVlogsRnYlYWsjoaGUHCRK6OOKiRfa2OMvWtqufBAwQJE5SFJmZl4aZ6FnSQ+Azk6mjxZeFv+/fycfbDWrTW1pSFgyLxmcjVEWXh6CgLTZD4DMzKwguro4ERJEywOjIhaUdZaIAgYYKy0ABloQkSnwlxKZUHcSmVBxKfgVwdnSgLB8d35iZIfCYoC01QFpog8Y3rftFWrotO+cilVKMiSJigLDSS30hQFhr4BEcKZN0LNhDxAAAAAElFTkSuQmCC",hr={name:"",isMobile:!1},Ml={"&":"&","<":"<",">":">",'"':""","'":"'"};function Mt(r){return r==null?"":String(r).replace(/[&<>"']/g,e=>Ml[e])}function fr(...r){return r.filter(Boolean).join(" ")}class rn extends HTMLElement{constructor(e){super(),this._size=12,this._showDialog=!1,this._selected=!1,this._focused=!1,this._toBeInstalled=!1,this._toBeReplaced=!1,this._hasError=!1,this._canInstall=!1,this._hide=!1,this._disable=!1,this._filled=!1,this._allFunctions=[],this._functions=[],this._deviceName="",this._deviceLogo="",this._renderQueued=!1,this._needsRender=!0,this.attachShadow({mode:"open"}),this._props={...hr,...e??{}},this.handleShadowClick=this.handleShadowClick.bind(this),this.shadowRoot.addEventListener("click",this.handleShadowClick),this.render()}connectedCallback(){this._needsRender&&(this._needsRender=!1,this.render())}get props(){return this._props}set props(e){this._props={...hr,...e},this.scheduleRender()}get slot(){return this._slot}set slot(e){this._slot=e,this.scheduleRender()}get selected(){return this._selected}set selected(e){const t=!!e;this._selected!==t&&(this._selected=t,this.scheduleRender())}get focused(){return this._focused}set focused(e){const t=!!e;this._focused!==t&&(this._focused=t,this.scheduleRender())}get toBeInstalled(){return this._toBeInstalled}set toBeInstalled(e){const t=!!e;this._toBeInstalled!==t&&(this._toBeInstalled=t,this.scheduleRender())}get toBeReplaced(){return this._toBeReplaced}set toBeReplaced(e){const t=!!e;this._toBeReplaced!==t&&(this._toBeReplaced=t,this.scheduleRender())}get hasError(){return this._hasError}set hasError(e){const t=!!e;this._hasError!==t&&(this._hasError=t,this.scheduleRender())}get canInstall(){return this._canInstall}set canInstall(e){const t=!!e;this._canInstall!==t&&(this._canInstall=t,this.scheduleRender())}get hide(){return this._hide}set hide(e){const t=!!e;this._hide!==t&&(this._hide=t,this.scheduleRender())}get disable(){return this._disable}set disable(e){const t=!!e;this._disable!==t&&(this._disable=t,this.scheduleRender())}get filled(){return this._filled}set filled(e){const t=!!e;this._filled!==t&&(this._filled=t,this.scheduleRender())}get allFunctions(){return[...this._allFunctions]}set allFunctions(e){this._allFunctions=Array.isArray(e)?[...e]:[],this.hasMoreFunctions||(this._showDialog=!1),this.scheduleRender()}get functions(){return[...this._functions]}set functions(e){this._functions=Array.isArray(e)?[...e]:[],this.hasMoreFunctions||(this._showDialog=!1),this.scheduleRender()}get deviceName(){return this._deviceName}set deviceName(e){this._deviceName=e??"",this.scheduleRender()}get deviceLogo(){return this._deviceLogo}set deviceLogo(e){this._deviceLogo=e??"",this.scheduleRender()}get hasMoreFunctions(){return this._allFunctions.some(e=>!this._functions.includes(e))}setSize(e=12){const t=Number.isFinite(e)?Number(e):12;this._size!==t&&(this._size=t,this.scheduleRender())}removeDevice(){var e,t;this._showDialog=!1,this.scheduleRender(),(t=(e=this._props).onRemove)==null||t.call(e)}addFunction(e){this.dispatchEvent(new CustomEvent("function-added",{detail:e}))}scheduleRender(){if(!this.isConnected){this._needsRender=!0;return}this._renderQueued||(this._renderQueued=!0,queueMicrotask(()=>{this._renderQueued=!1,this.render()}))}render(){var d;if(!this.shadowRoot)return;const e=fr("slot-item-container",this._props.isMobile&&"is-mobile"),t=fr("main",this._selected&&"selected",this._focused&&"focus",this._toBeInstalled&&"to-be-installed",this._toBeReplaced&&"to-be-replaced",this._hasError&&"has-error",this._canInstall&&"can-install",this._hide&&"hidden",this._disable&&"disable",this._filled&&"filled"),i=this._functions.map(n=>{const l=Mt(n);return`<div class="function" data-function="${l}"><span>${l}</span><i class="btn btn-remove" data-action="remove-function" data-function="${l}"></i></div>`}).join(""),s=this._allFunctions.filter(n=>!this._functions.includes(n)),a=this._allFunctions.length?`<div class="functions">${i}${`<div class="btn btn-add ${this.hasMoreFunctions?"":"btn-not-allowed"}" data-action="toggle-dialog">+添加</div>`}</div>`:"",o=s.length?`<div class="all-functions ${this._showDialog?"show":""}">
|
|
3700
3707
|
<label>添加功能<i class="btn btn-close" data-action="toggle-dialog"></i></label>
|
|
3701
3708
|
<div class="functions">
|
|
3702
|
-
${
|
|
3709
|
+
${s.map(n=>{const l=Mt(n);return`<div class="function"><span>${l}</span><i class="btn btn-add" data-action="add-function" data-function="${l}">+</i></div>`}).join("")}
|
|
3703
3710
|
</div>
|
|
3704
|
-
</div>`:"",c=this._deviceLogo?`<img class="device-logo" src="${
|
|
3705
|
-
<style>${
|
|
3711
|
+
</div>`:"",c=this._deviceLogo?`<img class="device-logo" src="${Mt(this._deviceLogo)}" alt="device logo">`:"",u=Mt(((d=this._slot)==null?void 0:d.name)??this._props.name??""),m=Mt(this._deviceName||"待安装");this.shadowRoot.innerHTML=`
|
|
3712
|
+
<style>${Tl}</style>
|
|
3706
3713
|
<div class="${e}">
|
|
3707
3714
|
<div class="${t}" style="width:${this._size}px;height:${this._size}px"></div>
|
|
3708
3715
|
<div class="info">
|
|
3709
|
-
<img alt="" src="${
|
|
3716
|
+
<img alt="" src="${Sl}">
|
|
3710
3717
|
<div class="name">
|
|
3711
|
-
<div class="name-wrapper">${
|
|
3718
|
+
<div class="name-wrapper">${u}</div>
|
|
3712
3719
|
<div class="functions-wrapper">
|
|
3713
3720
|
<div class="device-name ${this._deviceName?"":"empty"}">
|
|
3714
3721
|
${c}
|
|
3715
3722
|
<span>${m}</span>
|
|
3716
3723
|
<i class="btn btn-close" data-action="remove-device"></i>
|
|
3717
3724
|
</div>
|
|
3718
|
-
${
|
|
3725
|
+
${a}
|
|
3719
3726
|
${o}
|
|
3720
3727
|
</div>
|
|
3721
3728
|
</div>
|
|
3722
3729
|
</div>
|
|
3723
3730
|
</div>
|
|
3724
|
-
`,this._needsRender=!1}handleShadowClick(e){const t=e.target;if(!t)return;t.closest(".info")&&(e.preventDefault(),e.stopPropagation());const i=t.closest("[data-action]");if(!i)return;const
|
|
3731
|
+
`,this._needsRender=!1}handleShadowClick(e){const t=e.target;if(!t)return;t.closest(".info")&&(e.preventDefault(),e.stopPropagation());const i=t.closest("[data-action]");if(!i)return;const s=i.getAttribute("data-action");if(s)switch(e.preventDefault(),e.stopPropagation(),s){case"remove-device":this.removeDevice();break;case"remove-function":{const a=i.getAttribute("data-function");a&&this.dispatchEvent(new CustomEvent("function-removed",{detail:a}));break}case"toggle-dialog":if(!this.hasMoreFunctions)return;this._showDialog=!this._showDialog,this.scheduleRender();break;case"add-function":{const a=i.getAttribute("data-function");a&&(this.dispatchEvent(new CustomEvent("function-added",{detail:a})),this._showDialog=!1,this.scheduleRender());break}}}}customElements.get("slot-item")||customElements.define("slot-item",rn);const $={ON_DROP:"slot-on-drop",ON_DEVICE_DELETED:"slot-on-device-deleted",ON_DEVICE_REPLACED:"slot-on-device-replaced",ON_BEFORE_SELECTED:"slot-on-before-selected",ON_SELECTED:"slot-on-selected",ON_ADD_BUTTON_CLICKED:"slot-add-button-clicked",ON_DEVICE_SELECTED:"slot-on-device-selected",ON_DROP_ERROR:"slot-on-drop-error",ON_ERROR_STATE_CHANGE:"slot-on-error-state-change",ON_FUNCTION_REMOVED:"slot-on-function-removed",ON_FUNCTION_ADDED:"slot-on-function-added"};class os extends ve.CSS2DObject{constructor(e){const t=document.createElement("div");super(t),this.props=e,this._emitter=new vt,this._slotContainer=new f.Group,this._bracketSlots=[],this._hasError=!1,this.useBracket=!1,this.addEventListener=this._emitter.addListener.bind(this._emitter),this.removeEventListener=this._emitter.removeListener.bind(this._emitter),this._canInstall=!1,this._loading=!1,this._selected=!1,this._deviceSelected=!1,this._focused=!1,this._toBeInstalled=!1,this._toBeReplaced=!1,this._allFunctions=new Set,this._functions=new Set,this._timer=0,this._parentPos=new f.Vector3,this._wrapper=new f.Group,this._showSlot=!0,this._isMirror=!1,this._preventDefaults=i=>{i.preventDefault(),i.stopPropagation()},this.getWP=this._slotContainer.getWorldPosition.bind(this._slotContainer),this._showSlot=typeof e.show=="boolean"?e.show:!0,this.name=e.name,this._isMirror=e.isMirror,this._slotUI=new rn({name:e.name,isMobile:e.isMobile,onRemove:()=>{this.clearSlot(),this._emitter.emit($.ON_DEVICE_DELETED)}}),this._slotUI.slot=this,this._slotUI.hide=!this._showSlot||this.isMirror,t.append(this._slotUI),this._parentPos.copy(this.props.slot.position),this._slotUI.addEventListener("function-removed",({detail:i})=>{this.removeFunction(i)}),this._slotUI.addEventListener("function-added",({detail:i})=>{this.addFunction(i)}),this.add(this._slotContainer),this.props.slot.add(this),setTimeout(()=>{var i;(i=this.props.slot.parent)==null||i.add(this._wrapper),this._wrapper.add(this.props.slot)},10),["dragenter","dragover","dragleave","drop"].forEach(i=>{t.addEventListener(i,this._preventDefaults,!1)}),t.addEventListener("click",i=>{i.preventDefault(),i.stopPropagation(),this.toBeInstalled?this._emitter.emit($.ON_ADD_BUTTON_CLICKED):this.selected=!this.selected}),t.addEventListener("dragover",i=>{if(i.preventDefault(),i.dataTransfer.dropEffect="copy",!this._canInstall){i.dataTransfer&&(i.dataTransfer.dropEffect="none");return}}),t.addEventListener("drop",async i=>{var a;if(i.preventDefault(),i.stopPropagation(),!this._canInstall)return;const s=(a=i.dataTransfer)==null?void 0:a.getData("application/json");if(s){const o=JSON.parse(s);try{await this.install(o),this._emitter.emit($.ON_DROP,this)}catch(c){this._emitter.emit($.ON_DROP_ERROR,c)}}else this._emitter.emit($.ON_DROP_ERROR,new Error("No device info"))})}get hasDevice(){return this._slotContainer.children.length>0}get isMirror(){return this._isMirror}shapeKeyChanged(e,t){var i;if(this.props.follows.has(e)){const s=this.props.follows.get(e);if(s){let a="x";["height","mast"].includes(e)?a="y":["width","liftOuterWidth"].includes(e)&&(a="z");const o=((i=this.props.slot)==null?void 0:i.position[a])>0?1:-1;this._wrapper.position[a]=(t-s.origin)*s.scale*o}}}async loadGlb(e){const i=await new vi({useCache:!0}).loadAsync(e);if(i.glb)return i.glb.clone(!0)}async installBracket(e){const i=await new vi({useCache:!0}).loadAsync(e);if(!i.glb)return;const s=i.glb.clone(!0);s.traverse(a=>{a.userData.isBracket=!0}),this.useBracket=!0,this._slotContainer.add(s)}async install(e){if(!this._loading){this._loading=!0;try{const t=await this.loadGlb(e.url);if(!t)throw new Error(`Fail to load device from: ${e.url}`);if(t.traverse(i=>{i.userData.isDevice=!0}),this.isMirror&&t.scale.set(1,1,-1),e.bracketUrl){const i=await this.loadGlb(e.bracketUrl);if(i)this.clearSlot(),this._emitter.emit($.ON_DEVICE_REPLACED),i.traverse(s=>{s.name.startsWith("Slot")&&this._bracketSlots.push(s),s.userData.isBracket=!0}),this._slotContainer.add(i);else throw new Error(`Fail to load bracket from: ${e.bracketUrl}`);this._bracketSlots.forEach(s=>{s.add(t)})}else this.clearSlot(),this._emitter.emit($.ON_DEVICE_REPLACED),this._slotContainer.add(t);this.mirrorTarget&&this.mirrorTarget.install(e),this.deviceInfo=e,this._slotUI.deviceLogo=e.logo||"",this._slotUI.deviceName=e.name,this._slotUI.filled=!0,this.holeTarget&&(this.holeTarget.visible=!1)}catch(t){throw t}finally{this._loading=!1}}}get device(){return this._slotContainer.children.length?this._slotContainer.children[0]:null}get allFunctions(){return[...this._allFunctions]}set allFunctions(e){this._functions.forEach(t=>{e.includes(t)||this._functions.delete(t)}),this._allFunctions=new Set(e),this._slotUI.allFunctions=e}get functions(){return[...this._functions]}addFunction(e){this._allFunctions.has(e)&&(this._functions.add(e),this._slotUI.functions=[...this.functions],this._emitter.emit($.ON_FUNCTION_ADDED,e))}removeFunction(e){this._functions.has(e)&&(this._functions.delete(e),this._slotUI.functions=[...this.functions],this._emitter.emit($.ON_FUNCTION_REMOVED,e))}clearFunctions(){this._functions.forEach(e=>this.removeFunction(e))}addFunctions(e){e.forEach(t=>this.addFunction(t)),this._slotUI.functions=this.functions}changeName(e){var t;this.name=e,this.props.slot.userData.name=e,this.props.name=e,(t=this.element)==null||t.setAttribute("data-name",this.props.name)}clearSlot(){this._bracketSlots=[],this._slotContainer.children.forEach(e=>{e.removeFromParent(),Ae(e)}),this._slotUI.filled=!1,this.deviceInfo=void 0,this._slotUI.deviceName="",this._slotUI.deviceLogo="",this.holeTarget&&(this.holeTarget.visible=!0),this.mirrorTarget&&this.mirrorTarget.clearSlot()}enable(){this._slotUI.disable=!1}disable(){this._slotUI.disable=!0}hide(){this._slotUI.hide=!0}show(){this.isMirror||(this._slotUI.hide=!1)}get selected(){return this._selected}get focused(){return this._focused}set focused(e){this._focused=e,this._slotUI.focused=e}get toBeInstalled(){return this._toBeInstalled}set toBeInstalled(e){this._toBeInstalled=e,this._slotUI.toBeInstalled=e}get toBeReplaced(){return this._toBeReplaced}set toBeReplaced(e){this._toBeReplaced=e,this._slotUI.toBeReplaced=e}set selected(e){e&&this._emitter.emit($.ON_BEFORE_SELECTED,e),this._selected=e,this._slotUI.selected=e,this._emitter.emit($.ON_SELECTED,e),this.element.style.zIndex="100",this.selected?this.renderOrder=1/0:this.renderOrder=1}get deviceSelected(){return this._deviceSelected}set deviceSelected(e){this._deviceSelected=e,this._emitter.emit($.ON_DEVICE_SELECTED,e)}get error(){return this._hasError}set error(e){this._loading&&setTimeout(()=>{this.error=e},100),this._hasError=e,this._slotUI.hasError=e,this._emitter.emit($.ON_ERROR_STATE_CHANGE,e)}getCanInstall(){return this._canInstall}canInstall(e){this._canInstall=e,this._slotUI.canInstall=e}dispose(){cancelAnimationFrame(this._timer),["dragenter","dragover","dragleave","drop"].forEach(e=>{this.element.addEventListener(e,this._preventDefaults,!1)}),this.clearSlot(),this._emitter.removeAllListeners(),Ae(this._slotContainer),this.element.remove()}render(e){const t=this.element.style.transform,i=/translate\(-?\d*\.?\d*%?,?\s-?\d*\.?\d*%?\)\s*translate\((-?\d*\.?\d*)px,\s*(-?\d*\.?\d*)px\)/.exec(t);if(!i)return;const s=new f.Vector2(parseFloat(i[1]),parseFloat(i[2])),a=e.mousePos.distanceTo(s);let o=this.props.isMobile?12:18,c=38,u=30;if(this._canInstall&&(o=34,c=60,u=60),a<u){let m=(u-a)*1+o;a<20&&(m=c),m>c&&(m=c),this._slotUI.setSize(m)}else this._slotUI.setSize(o)}clone(e){return new f.Group}}/**
|
|
3725
3732
|
* @license
|
|
3726
3733
|
* Copyright 2017 Google LLC
|
|
3727
3734
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
3728
|
-
*/const
|
|
3735
|
+
*/const Cl=r=>(e,t)=>{t!==void 0?t.addInitializer(()=>{customElements.define(r,e)}):customElements.define(r,e)};/**
|
|
3729
3736
|
* @license
|
|
3730
3737
|
* Copyright 2019 Google LLC
|
|
3731
3738
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
3732
|
-
*/const
|
|
3739
|
+
*/const hi=globalThis,Cs=hi.ShadowRoot&&(hi.ShadyCSS===void 0||hi.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,nn=Symbol(),dr=new WeakMap;let Pl=class{constructor(e,t,i){if(this._$cssResult$=!0,i!==nn)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const t=this.t;if(Cs&&e===void 0){const i=t!==void 0&&t.length===1;i&&(e=dr.get(t)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),i&&dr.set(t,e))}return e}toString(){return this.cssText}};const Rl=r=>new Pl(typeof r=="string"?r:r+"",void 0,nn),Il=(r,e)=>{if(Cs)r.adoptedStyleSheets=e.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const t of e){const i=document.createElement("style"),s=hi.litNonce;s!==void 0&&i.setAttribute("nonce",s),i.textContent=t.cssText,r.appendChild(i)}},pr=Cs?r=>r:r=>r instanceof CSSStyleSheet?(e=>{let t="";for(const i of e.cssRules)t+=i.cssText;return Rl(t)})(r):r;/**
|
|
3733
3740
|
* @license
|
|
3734
3741
|
* Copyright 2017 Google LLC
|
|
3735
3742
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
3736
|
-
*/const{is:
|
|
3743
|
+
*/const{is:El,defineProperty:Dl,getOwnPropertyDescriptor:Ll,getOwnPropertyNames:Fl,getOwnPropertySymbols:Bl,getPrototypeOf:kl}=Object,Fe=globalThis,mr=Fe.trustedTypes,Ol=mr?mr.emptyScript:"",Ui=Fe.reactiveElementPolyfillSupport,zt=(r,e)=>r,_i={toAttribute(r,e){switch(e){case Boolean:r=r?Ol:null;break;case Object:case Array:r=r==null?r:JSON.stringify(r)}return r},fromAttribute(r,e){let t=r;switch(e){case Boolean:t=r!==null;break;case Number:t=r===null?null:Number(r);break;case Object:case Array:try{t=JSON.parse(r)}catch{t=null}}return t}},Ps=(r,e)=>!El(r,e),gr={attribute:!0,type:String,converter:_i,reflect:!1,hasChanged:Ps};Symbol.metadata??(Symbol.metadata=Symbol("metadata")),Fe.litPropertyMetadata??(Fe.litPropertyMetadata=new WeakMap);class Ct extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??(this.l=[])).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=gr){if(t.state&&(t.attribute=!1),this._$Ei(),this.elementProperties.set(e,t),!t.noAccessor){const i=Symbol(),s=this.getPropertyDescriptor(e,i,t);s!==void 0&&Dl(this.prototype,e,s)}}static getPropertyDescriptor(e,t,i){const{get:s,set:a}=Ll(this.prototype,e)??{get(){return this[t]},set(o){this[t]=o}};return{get(){return s==null?void 0:s.call(this)},set(o){const c=s==null?void 0:s.call(this);a.call(this,o),this.requestUpdate(e,c,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??gr}static _$Ei(){if(this.hasOwnProperty(zt("elementProperties")))return;const e=kl(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(zt("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(zt("properties"))){const t=this.properties,i=[...Fl(t),...Bl(t)];for(const s of i)this.createProperty(s,t[s])}const e=this[Symbol.metadata];if(e!==null){const t=litPropertyMetadata.get(e);if(t!==void 0)for(const[i,s]of t)this.elementProperties.set(i,s)}this._$Eh=new Map;for(const[t,i]of this.elementProperties){const s=this._$Eu(t,i);s!==void 0&&this._$Eh.set(s,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const i=new Set(e.flat(1/0).reverse());for(const s of i)t.unshift(pr(s))}else e!==void 0&&t.push(pr(e));return t}static _$Eu(e,t){const i=t.attribute;return i===!1?void 0:typeof i=="string"?i:typeof e=="string"?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){var e;this._$Eg=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$ES(),this.requestUpdate(),(e=this.constructor.l)==null||e.forEach(t=>t(this))}addController(e){var t;(this._$E_??(this._$E_=new Set)).add(e),this.renderRoot!==void 0&&this.isConnected&&((t=e.hostConnected)==null||t.call(e))}removeController(e){var t;(t=this._$E_)==null||t.delete(e)}_$ES(){const e=new Map,t=this.constructor.elementProperties;for(const i of t.keys())this.hasOwnProperty(i)&&(e.set(i,this[i]),delete this[i]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return Il(e,this.constructor.elementStyles),e}connectedCallback(){var e;this.renderRoot??(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(e=this._$E_)==null||e.forEach(t=>{var i;return(i=t.hostConnected)==null?void 0:i.call(t)})}enableUpdating(e){}disconnectedCallback(){var e;(e=this._$E_)==null||e.forEach(t=>{var i;return(i=t.hostDisconnected)==null?void 0:i.call(t)})}attributeChangedCallback(e,t,i){this._$AK(e,i)}_$EO(e,t){var a;const i=this.constructor.elementProperties.get(e),s=this.constructor._$Eu(e,i);if(s!==void 0&&i.reflect===!0){const o=(((a=i.converter)==null?void 0:a.toAttribute)!==void 0?i.converter:_i).toAttribute(t,i.type);this._$Em=e,o==null?this.removeAttribute(s):this.setAttribute(s,o),this._$Em=null}}_$AK(e,t){var a;const i=this.constructor,s=i._$Eh.get(e);if(s!==void 0&&this._$Em!==s){const o=i.getPropertyOptions(s),c=typeof o.converter=="function"?{fromAttribute:o.converter}:((a=o.converter)==null?void 0:a.fromAttribute)!==void 0?o.converter:_i;this._$Em=s,this[s]=c.fromAttribute(t,o.type),this._$Em=null}}requestUpdate(e,t,i){if(e!==void 0){if(i??(i=this.constructor.getPropertyOptions(e)),!(i.hasChanged??Ps)(this[e],t))return;this.C(e,t,i)}this.isUpdatePending===!1&&(this._$Eg=this._$EP())}C(e,t,i){this._$AL.has(e)||this._$AL.set(e,t),i.reflect===!0&&this._$Em!==e&&(this._$ET??(this._$ET=new Set)).add(e)}async _$EP(){this.isUpdatePending=!0;try{await this._$Eg}catch(t){Promise.reject(t)}const e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var i;if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??(this.renderRoot=this.createRenderRoot()),this._$Ep){for(const[a,o]of this._$Ep)this[a]=o;this._$Ep=void 0}const s=this.constructor.elementProperties;if(s.size>0)for(const[a,o]of s)o.wrapped!==!0||this._$AL.has(a)||this[a]===void 0||this.C(a,this[a],o)}let e=!1;const t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),(i=this._$E_)==null||i.forEach(s=>{var a;return(a=s.hostUpdate)==null?void 0:a.call(s)}),this.update(t)):this._$Ej()}catch(s){throw e=!1,this._$Ej(),s}e&&this._$AE(t)}willUpdate(e){}_$AE(e){var t;(t=this._$E_)==null||t.forEach(i=>{var s;return(s=i.hostUpdated)==null?void 0:s.call(i)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$Ej(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Eg}shouldUpdate(e){return!0}update(e){this._$ET&&(this._$ET=this._$ET.forEach(t=>this._$EO(t,this[t]))),this._$Ej()}updated(e){}firstUpdated(e){}}Ct.elementStyles=[],Ct.shadowRootOptions={mode:"open"},Ct[zt("elementProperties")]=new Map,Ct[zt("finalized")]=new Map,Ui==null||Ui({ReactiveElement:Ct}),(Fe.reactiveElementVersions??(Fe.reactiveElementVersions=[])).push("2.0.3");/**
|
|
3737
3744
|
* @license
|
|
3738
3745
|
* Copyright 2017 Google LLC
|
|
3739
3746
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
3740
|
-
*/const
|
|
3747
|
+
*/const zl={attribute:!0,type:String,converter:_i,reflect:!1,hasChanged:Ps},Vl=(r=zl,e,t)=>{const{kind:i,metadata:s}=t;let a=globalThis.litPropertyMetadata.get(s);if(a===void 0&&globalThis.litPropertyMetadata.set(s,a=new Map),a.set(t.name,r),i==="accessor"){const{name:o}=t;return{set(c){const u=e.get.call(this);e.set.call(this,c),this.requestUpdate(o,u,r)},init(c){return c!==void 0&&this.C(o,void 0,r),c}}}if(i==="setter"){const{name:o}=t;return function(c){const u=this[o];e.call(this,c),this.requestUpdate(o,u,r)}}throw Error("Unsupported decorator location: "+i)};function Ul(r){return(e,t)=>typeof t=="object"?Vl(r,e,t):((i,s,a)=>{const o=s.hasOwnProperty(a);return s.constructor.createProperty(a,o?{...i,wrapped:!0}:i),o?Object.getOwnPropertyDescriptor(s,a):void 0})(r,e,t)}/**
|
|
3741
3748
|
* @license
|
|
3742
3749
|
* Copyright 2017 Google LLC
|
|
3743
3750
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
3744
|
-
*/function
|
|
3751
|
+
*/function Hl(r){return Ul({...r,state:!0,attribute:!1})}/**
|
|
3745
3752
|
* @license
|
|
3746
3753
|
* Copyright 2017 Google LLC
|
|
3747
3754
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
3748
|
-
*/const
|
|
3755
|
+
*/const vr=(r,e,t)=>(t.configurable=!0,t.enumerable=!0,Reflect.decorate&&typeof e!="object"&&Object.defineProperty(r,e,t),t);/**
|
|
3749
3756
|
* @license
|
|
3750
3757
|
* Copyright 2017 Google LLC
|
|
3751
3758
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
3752
|
-
*/function
|
|
3759
|
+
*/function Nl(r,e){return(t,i,s)=>{const a=o=>{var c;return((c=o.renderRoot)==null?void 0:c.querySelector(r))??null};if(e){const{get:o,set:c}=typeof i=="object"?t:s??(()=>{const u=Symbol();return{get(){return this[u]},set(m){this[u]=m}}})();return vr(t,i,{get(){let u=o.call(this);return u===void 0&&(u=a(this),(u!==null||this.hasUpdated)&&c.call(this,u)),u}})}return vr(t,i,{get(){return a(this)}})}}var Wl=Object.defineProperty,Gl=Object.getOwnPropertyDescriptor,Rs=(r,e,t,i)=>{for(var s=i>1?void 0:i?Gl(e,t):e,a=r.length-1,o;a>=0;a--)(o=r[a])&&(s=(i?o(e,t,s):o(s))||s);return i&&s&&Wl(e,t,s),s};class ql{constructor(e,t,i,s){this.name=e,this.slot=t,this.start=i,this.end=s,this.split="--",this.uuid="",this.valid=!1,this.editable=!1,this.highlight=!1,this.uuid=e+this.split+t}update(e,t){this.start=e.clone(),this.end=t.clone()}}exports.DeviceLines=class extends ci.LitElement{constructor(e,t=0){super(),this.offset=e,this.heightOffset=t,this.lines=new Map,this.setOffset(this.offset.x,this.offset.y)}setOffset(e,t){this.offset.set(e,t),this.style.setProperty("--left",this.offset.x+"px"),this.style.setProperty("--top",this.offset.y+"px")}setHeightOffset(e){this.heightOffset=e,this.style.setProperty("--heightOffset",this.heightOffset+"px")}hide(){var e;(e=this.container)==null||e.classList.add("hidden")}show(){var e;(e=this.container)==null||e.classList.remove("hidden")}addLine(e){this.lines.has(e.uuid)||this.lines.set(e.uuid,e)}clear(){this.lines.clear()}removeLine(e){this.lines.delete(e.uuid)}getLineByName(e){const t=[];return this.lines.forEach((i,s)=>{i.name===e&&t.push(i)}),t}getLineBySlot(e){const t=[];return this.lines.forEach((i,s)=>{i.slot===e&&t.push(i)}),t}getPath(e){const t=e.end.clone();t.set(t.x-this.offset.x,t.y-this.offset.y);const i=e.start.clone().add(t).multiplyScalar(.5),s=e.start.clone().add(t).multiplyScalar(.7);return`M${e.start.x} ${e.start.y}
|
|
3753
3760
|
C${i.x} ${e.start.y}
|
|
3754
|
-
${
|
|
3761
|
+
${s.x} ${e.end.y}
|
|
3755
3762
|
${t.x} ${t.y}
|
|
3756
|
-
`}updateLine(e){this.lines.set(e.uuid,e)}forceUpdate(){this.requestUpdate()}render(){return
|
|
3763
|
+
`}updateLine(e){this.lines.set(e.uuid,e)}forceUpdate(){this.requestUpdate()}render(){return ci.svg`
|
|
3757
3764
|
<svg class="container">
|
|
3758
3765
|
<g>
|
|
3759
|
-
${[...this.lines.values()].map(e=>
|
|
3766
|
+
${[...this.lines.values()].map(e=>ci.svg`<path
|
|
3760
3767
|
class="${e.valid?"valid":""} ${e.editable?"editable":""} ${e.highlight?"highlight":""}"
|
|
3761
3768
|
d="${this.getPath(e)}"></path>`)}
|
|
3762
3769
|
</g>
|
|
3763
|
-
</svg>`}};exports.DeviceLines.styles=
|
|
3770
|
+
</svg>`}};exports.DeviceLines.styles=ci.css`
|
|
3764
3771
|
:host {
|
|
3765
3772
|
--left: 0px;
|
|
3766
3773
|
--top: 0px;
|
|
@@ -3811,7 +3818,7 @@ d="${this.getPath(e)}"></path>`)}
|
|
|
3811
3818
|
}
|
|
3812
3819
|
}
|
|
3813
3820
|
}
|
|
3814
|
-
`;ki([$o()],exports.DeviceLines.prototype,"lines",2);ki([ea(".container")],exports.DeviceLines.prototype,"container",2);exports.DeviceLines=ki([Vo("device-lines")],exports.DeviceLines);class ra extends se.CSS2DObject{constructor(e){const t=document.createElement("div");super(t),this._text=document.createElement("div");const i=Di(),r=i?"#ddd":"#eee";this.element.style.pointerEvents="auto",this.element.style.padding=i?"2px 6px":"3px 12px",this.element.style.borderTop=`1px solid ${r}`,this.element.style.borderBottom=this.element.style.borderTop;const l="6px",o=document.createElement("div");o.style.pointerEvents="none",Object.assign(o.style,{pointerEvents:"none",borderLeft:`1px solid ${r}`,borderRight:`1px solid ${r}`,position:"absolute",left:"0",top:"0",boxSizing:"border-box",height:l,width:"100%"}),this.element.append(o);const c=document.createElement("div");c.style.pointerEvents="none",Object.assign(c.style,{pointerEvents:"none",borderLeft:`1px solid ${r}`,borderRight:`1px solid ${r}`,position:"absolute",left:"0",bottom:"0",boxSizing:"border-box",height:l,width:"100%"}),this.element.append(c),this._text.style.fontSize=i?"10px":"14px",this._text.style.font="SF Pro SC,SF Pro Text,SF Pro Icons,PingFang SC,Helvetica Neue,Helvetica,Arial,sans-serif",this._text.style.color="#fff",this._text.style.fontWeight="500",this._text.style.transition="all .16s",this._text.innerText=e,this.element.append(this._text),this._text.addEventListener("pointermove",()=>{var h;o.style.borderColor=c.style.borderColor=this.element.style.borderColor="#666",this._text.style.color="#000",(h=this.onPointMove)==null||h.call(this)}),this._text.addEventListener("pointerleave",()=>{var h;o.style.borderColor=c.style.borderColor=this.element.style.borderColor=r,this._text.style.transform="scale(1)",this._text.style.color="#fff",(h=this.onPointLeave)==null||h.call(this)})}set text(e){this._text.innerText=e}dispose(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}}class Bt extends d.Group{constructor(e,t=!0,i=!0){super(),this._startWith=e,this._showText=t,this.useStartEnd=i,this._line2Length=.01,this._line=new d.LineSegments(new d.BufferGeometry,new d.LineBasicMaterial({color:"#666",linewidth:2})),this._line2=new d.LineSegments(new d.BufferGeometry,new d.LineBasicMaterial({color:"#666",linewidth:2})),this._text=new ra(""),this._line.frustumCulled=!1,this.add(this._line,this._line2),this._showText&&(this.add(this._text),this._text.onPointMove=()=>{this._line.material.color.set("#000"),this._line2.material.color.set("#000")},this._text.onPointLeave=()=>{this._line.material.color.set("#666"),this._line2.material.color.set("#666")})}updateMaterial(e){this._line.material=e}reset(){var e;(e=this._line.geometry)==null||e.dispose(),this._line.computeLineDistances()}update(e,t,i=0){var u,g;(u=this._line.geometry)==null||u.dispose(),this._line.geometry.setFromPoints([e,t]),this._line.computeLineDistances();const r=this._line2Length+i*.02,l=new d.Vector3().subVectors(t,e).normalize();let o;Math.abs(l.z)>Math.abs(l.x)&&Math.abs(l.z)>Math.abs(l.y)?o=new d.Vector3(-l.y,l.x,0):Math.abs(l.y)>Math.abs(l.x)?o=new d.Vector3(1,0,0):o=new d.Vector3(0,1,0),o.length()<.001&&(Math.abs(l.x)<.9?o=new d.Vector3(1,0,0):o=new d.Vector3(0,1,0)),o.normalize();const c=new d.Vector3().addVectors(e,o.clone().multiplyScalar(r)),h=new d.Vector3().addVectors(e,o.clone().multiplyScalar(-r)),m=new d.Vector3().addVectors(t,o.clone().multiplyScalar(r)),p=new d.Vector3().addVectors(t,o.clone().multiplyScalar(-r));(g=this._line2.geometry)==null||g.dispose(),this._line2.geometry=new d.BufferGeometry,this._line2.geometry.setFromPoints([c,h,m,p]),this._line2.computeLineDistances();const s=e.distanceTo(t);this._startWith?this._text.text=`${this._startWith}${(s*1e3).toFixed(0)} mm`:this._text.text=`${(s*1e3).toFixed(0)} mm`;const a=new d.Vector3;a.addVectors(e,t).multiplyScalar(.5),this._text.position.copy(a),this.useStartEnd||(this._line2.visible=!1)}destroy(){this._text.dispose(),this.children.forEach(e=>oe(e)),this.removeFromParent()}}class Ks extends d.Object3D{constructor(e,t){super(),this.radius=e,this._text=new na(""),this._line=new Bt(void 0,!1,!1),this._box=new d.Mesh,this._arc=new Cr.Line2,this._previousPosition=null,this._updateTimer=null,this._updateDelay=300,this._accumulatedAngle=0,this._lastAngle=null,this._line.updateMaterial(new d.LineDashedMaterial({color:"#555",dashSize:.06,gapSize:.06})),this._line.renderOrder=0,this._box.geometry=new d.RingGeometry(e,e+.003,128),this._box.material=new d.MeshBasicMaterial({color:"#666",side:d.DoubleSide}),this._arc.geometry=new Wi.LineGeometry,this._arc.geometry.setPositions([0,0,0,0,0,0]),this._arc.geometry.instanceCount=0,this._arc.material=new Os.LineMaterial({color:"#eee",linewidth:2,resolution:new d.Vector2(window.innerWidth,window.innerHeight)}),this._arc.visible=!1,this._arc.rotateX(-Math.PI/2),this.position.y=t,this._arc.position.y=.001,this.add(this._box),this.add(this._arc),this.add(this._line),this.add(this._text)}hide(){this._text.hide(),this._line.visible=!1,this._arc.visible=!1}show(){this._text.show(),this._line.visible=!0}dispose(){this._updateTimer&&(clearTimeout(this._updateTimer),this._updateTimer=null),this._box.geometry&&this._box.geometry.dispose(),this._arc.geometry&&this._arc.geometry.dispose(),this._arc.visible=!1,this._previousPosition=null}update(e){var t;this.radius=e,(t=this._box.geometry)==null||t.dispose(),this._box.geometry=new d.RingGeometry(e,e+.003,128),this._line.updateMaterial(new d.LineDashedMaterial({color:"#555",dashSize:.06*e,gapSize:.06*e})),this._text.update((e*1e3).toFixed(0))}change(e){const t=e.clone();t.setZ(0),t.normalize().multiplyScalar(this.radius),this._text.position.set(t.x,t.y,t.z),this._text.updateColor("#eee"),this._line.update(t,new d.Vector3),this._previousPosition&&this._updateArc(this._previousPosition,t),this._updateTimer&&clearTimeout(this._updateTimer),this._updateTimer=setTimeout(()=>{this._previousPosition=null,this._accumulatedAngle=0,this._lastAngle=null,this._clearArc(),this._updateTimer=null},this._updateDelay),this._previousPosition||(this._previousPosition=t.clone(),this._lastAngle=Math.atan2(t.y,t.x),this._accumulatedAngle=0)}_updateArc(e,t){const i=Math.atan2(t.y,t.x);if(this._lastAngle!==null){let h=i-this._lastAngle;h>Math.PI?h-=2*Math.PI:h<-Math.PI&&(h+=2*Math.PI),this._accumulatedAngle+=h}if(this._lastAngle=i,Math.abs(this._accumulatedAngle)<.01){this._arc.visible=!1;return}const r=Math.atan2(e.y,e.x),l=r+this._accumulatedAngle;let o=.006*this.radius;o<.003&&(o=.003),o>.006&&(o=.006);const c=this._createArcGeometry(r,l,this.radius+o);this._arc.geometry&&this._arc.geometry.dispose(),this._arc.geometry=c,this._arc.visible=!0}_clearArc(){this._text.updateColor(),this._arc.geometry&&(this._arc.geometry.setPositions([0,0,0,0,0,0]),this._arc.geometry.instanceCount=0,this._arc.computeLineDistances()),this._arc.visible=!1}_createArcGeometry(e,t,i){const r=[],l=t-e,o=Math.max(128,Math.floor(Math.abs(l)/(Math.PI/128))),c=l/o;for(let m=0;m<=o;m++){const p=e+m*c,s=Math.cos(p),a=Math.sin(p);r.push(i*s,0,i*a)}const h=new Wi.LineGeometry;return h.setPositions(r),h.instanceCount=Math.max(0,r.length/3-1),h}}class na extends se.CSS2DObject{constructor(e){const t=document.createElement("div");super(t),this._wrapper=document.createElement("div"),this._circle=document.createElement("div");const i=Di();this._wrapper.style.fontSize=i?"10px":"11px",this._wrapper.style.color="#fff",this._wrapper.style.whiteSpace="nowrap",this._wrapper.style.position="absolute",this._wrapper.style.transform="translateX(-50%)",this._wrapper.style.top="6px",this._wrapper.style.font="SF Pro SC,SF Pro Text,SF Pro Icons,PingFang SC,Helvetica Neue,Helvetica,Arial,sans-serif";const r=this._circle;r.style.position="relative",r.style.zIndex="10",r.style.width=r.style.height="5px",r.style.borderRadius="50%",r.style.background="#666",t.append(this._wrapper,r),this.update(e)}show(){this.element.style.display="block"}hide(){this.element.style.display="none"}update(e){this._wrapper.innerText="旋转半径:"+e+" mm",this.updateColor("#eee")}updateColor(e="#666"){this._circle.style.background=e}}const oa="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAAUCAYAAADY6P5TAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAEvSURBVFiFzZdbFYMwEEQroRKQgAQkVEIlICEOkFAJlRAJSIgEJNx+sPS0nGxIaOhyv3nM7mTmwOViDHAFesADD+BqrakKQAcMwMQ3AWis9e1C3HLASJoAdNZ6sxG3/MZQMZy1dhWgFbfWRzDGlFjAwFlyyXdh5OD5OIqykBgBy1yiF0aMUQaJugLclOcEoP3nULmFgQgeyCwOoJGBYrijByspDM98ZIszJAt8Ks8dag/VUFYYLtetjHdruRz5JZf8WBg1Ae7KcgOluaSsMAKJwqgJ6Vz2WzcvhZHjVlFh1ESG1DQ67SYtyGs8OwujNpTkUtw4nVtbyLK1XDafF3aKW90Z3EpBbi5lE0u9n3qoNTKk9rHh3heZqqwA8Vw6a11VkVwuPK31HALzb5pfovYC2xSs5LCDIUcAAAAASUVORK5CYII=",aa="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAKCAYAAACngj4SAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAChSURBVDiNrdJbFYMwEIRhJFQCEpCAhEqIhDhBAlKQgAQkIOHrSziHpmkbLvua7P4zO9s0FYUeM0b0NT2nC9FnLQho7wQ9MOwgQ3K4ZPDrrtGmFcKKkL0HTAXXw2HX6HYuFnR/hMWC6ykX+W1AzJqq1abDGguux6LoPK9aUGFOm1Y+F+Bh+7DlsSKehRXgnfdDm5od7GdeN8ADnpuKQ3ldqReHZFd3742nZgAAAABJRU5ErkJggg==",xs="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAABsCAYAAACPZlfNAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAdzSURBVHic7Z3hlZs6EIUvW4E7CB3EHcQdxB08OngugVTg8yrwSQVOKnBSwW4qsFOB3cF9PxhZQsYYjEAS1neOD7ssCwPXMxoNIGWIDJJLAAsASwCfAOTyey6bLOQDABf5qJ9P8vkry48sy05j2+ySzLcBjyC5QiXOV1kuWv+hPxcAvwD8BvCBSsRL6394JDjBSC4ArFEJtG7Y5ILqwp4A/JHlxfyoC04yN/4vh/bEz9Dim9uY+/8O4EfI4nmFZEFyz1veSe5Iri0BXB13Icfekjxaxz6TPMixXXt2fJDM5WLZF+og63MPNi1IbsQGW7zyJYUToXZyEUxP8iLSPUS80hLvdYQTobbWN3fHKvMLGpKrBq/bzla4htC3C8mbutIg3JnkxrddzhCvil4omwbhDqy6IPEisV5xJFn4tsk1rDJI8wtZ+rapN+JV73PzqnuwSk7MtvkQzflabdUxGsMdIGFSnfuZZFPHPxysELjnXDOoFsTbzAJA6dumRiyxSt/2+Ma6Hlvf9lyRb9QumjAwIZKQqOLAznvEEbFUcvFS7VVXWO/WvHsTLYnVnSBEM8JgEqsDlmi7qQ++TWL1xxKtnOqgKvs5J7H6I6KdJxFNsh5FygafxLqOxVgHme6b8QIYkWqcZoW6Mr13vvMXhboi8u56x+a34eXKTWMhXSO3SQirgqZi5WSniSvS1ChyFztUoTCcetjMoNGnHbqjTQqF42P1z4pnd7IwssKUwo8Mq/uIz2eN1NWMg3vzxoUWvu3pihEa+zU/4l3RJhoRC/ZcAkKdxkfnXUC8ggE1L+tWILbartW45o1D5IIpL+tWq43du4C4BQNqXlY82jB67wJmIdhSTG/vl1FXkaP1LiB+wQCA+m5+Ya5/s7b7V5a/J7Eq0cZ/svza+FcrHEZd1ZiJh5kp/q0e1D3tqMMhMA/BgFodt1DrzJD4jyx/TmpVoo3vsqyHxTmFQ2BWHpY3ngP1Pa9h5f1AmItgQC1bXAE6JKpXVn94sSrRxocsl4AW7Iss/0xuTuIRKqfQ7dic2i9gdiHxWlu0V8yi/QLmJRhQc6jlG3T7lYboCRfVji3eoMda+mjeNhEAJ1ku31ANYQekhCNklDafTA87eTEl0YWTLHNTsNSGhYvSZvEGPWDkyY8t1xt2ua/jd0Uyah/jYinBcvt+2OTIBTgAOHi6GJ3wbKeOfkaOn09sRNM4VGcXF8N1P0wiwNmyMx+63x7HV48dnuHqpJ40ZMNbBovmUrAGsRSTjuB2PRefgokhZcPFGCSaK8FaxCqf3ecAW66Cea8juhbNhWCBiaXridRtSD61IZZRzkQbKlhIYok9ut5rCOY9Q3Ml2hDBQhNLbKoJdpBfVr4MMnEh2rOChSiW2KWeCHg3X4wO5h2woaI9I1ioYolt6gHf/RuMOpU/k+pkWVYC+GatXmCkTit1p9hOvL6JLb7JZXky+0LTjn/UgWc9rY+HhexZCuqXIzZmfAzyAdJnROsqWAxiAbUnp9bmmxJn34bdo69oXQSLRSwAt10veqwndqVFtKJh21bBWD2WHotYuo5orDzIymAyxSbuiEZbtDbBqN8hCF4soGbv3lwZbOJh00W0e4LFJhZQG81hY67UHbMIeCRak2AxigXU2q+V/QdF7sWynrSJ1nFdDGJd2y/axXnqikfhx7z+tIjWhdK3/Y+gbqpuu1yM9IU+Nt8EfUQU00ex4YU+84/m6Df55NYNgPdDXhOFb3u7wLZwaGwUXVhUdBSt8G1nV9hlvBTjpKPIFm0eiFb4tq8P7No3ZkA3NJ/hjmiFb7v6QN3Nuh8OjY3VCQffib6HJVrh256+GN5Vdtk4ZwS1xUeIaIVvO/rSy7uMf9rF7mWx0su7jH9SD31E7WWxwfoI5v0eO6QuOiYvmwgOGcGcLkZ6TnSG+kGb7m1Xw05UtnVMoXE8WJ8hYljZjL4mKXsh6HIE85SAjAvHmCqFabKcUeAYk+UYO1ePWqXpqBxBXWx3f0vLyhpL5wd4MYyoNd7bnKzX6IJ+wipkOOXUlJN8M2YMfUxNaSUh+SQHnQFWszLtfGxME2/3whJr+j4t09T2nbHE8jO1vRiSRHtAMGIZBi2M8HhO2aNGskGVYOy8i2VCXQ+bLvsJGNYfci1929OIZeQ+qG/UREjE2QcvlsIKA0cGMjrBFFjt1ZGx3EcUww/Gt2w7Z2+T890Z5/seZQJmhcjjHBMSVuW6o3GepW+bBsHqfo/pbYc5hMkGrzpG6VX3YPWWyTl24e4IVfi2axRYZVBm+h+NcKxGHdhZtm9n5VX3EOHKBo8rGVByIt5UUFdzKDbvXkIomzvCKfE2PsQzRDpYNh1lfT61TcEhwq3lItniHSX0FGMIKAKtxWveecueAbVRmW8DbESUNaopHpe4HbDrhGqU6Q9UMyao309qgyzLTsa+7E8O4LMsm/YPVPOo/QTwI8uyoMbzD04wE7ngS/l8AbBC8wUeghL/J4CPLMt+Od6/U4IWrAlpQ5aoPOSTLHNoIRfGzxfoMd9P0J74F5VIlyzLopok6H/tVqA8kSYfTwAAAABJRU5ErkJggg==",la="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYwAAACsCAYAAABo4pvIAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAzYSURBVHic7d3hcdtIEobhD05gmYGRgbkRLDKwMjiGoBCUgeoi0F0Evo1AdASiIxAcgbkR9P1Aj9mESIm2QMwAeJ8qlihKomeXwHzsHgCsBBTOzGpJK7+pd7/2r3+ceCw69Vh8nkvt/fbW4/H7vaR//H4bfqeNX6uqij8DilPlHgCWxcxW6ibvNFmn+x/DY/Fn0mHyPXVLE7F0ejKOf3/SpRO1B9c55wJNOg6rfrD1/5v7/31pbN97j7WS9lVVnf3vAoZGYGAwPqHW6ia+tbrJce0/Tj+Lk176+k/4/ui2tAnRA/VUaNbqQjXdr8PvtDoOku/xeyoXDIXAwMXMbK1DGHzUcTikiatVN1l9Uy8YmLiG1wuY2r9+0vHrUuvwOux0/PrseF1wKQIDR06EQvw+TTatunexrXgXOwmh+ku31AJc6xAoMUxaESboITAWyoOhVjdhfAr307vQnbpQ2KlrDe2yDBSj8EBJ20S/Qml12B7S/XZp7UIQGLMX3lk2Og6Gnbqd/1u4zySAI+EghRQmH9VtS7W6bWYrKpLFIDBmJFQNf6nbwdOCc6oYvqqrFrY5xof56AXJJ53e3r5J2hIi80FgTFRoIcRwaP32Vb7TUjFgTCdaW426thYhMgMExgT4u7m1Dm2lxn+UqoatCAcUyrffRodqpPEfbcWbm0khMAoUdrBUPTTyUFC3g7UsQmPKvBJpdNzOiq3TLQFSHgKjAKGM/6xDOb+T9Le6d17bXGMDxmJmjY73g1aHRfX/ESD5ERgZhBbTZx2OOCEggOCVAEn7CQEyMgJjJL2Nv9Hxhr/NNS5gKnr7UK0uQNiHMH1mtjKzGzN7MLNnvz34Rg/gHXz/aszs3vetH75/bbyCB8pmZrVvsI/WeTSzWz8/AsCV+L536/vcj7Dv1bnHBvxkZmt/l/MUqogb3uUAefSqjx++X95R3SOLEBK0moDCER4Y3YmQuKfVBEyLh8dd2I8JDwzD+6J3hAQwP2fCo849LkyI9z/TwnVqNxESwIyF8IgL5qxD4jTfYB786KYvZnaTe0wAxudzQTraivVJdE60nDaUpACkn92GuxAed1QdCxSqCY5wAvCm3pFWj8wZM2eHk+p+VhO5xwRgWrzqSCcIPrHWMTMeFGltgmoCwCB6ax33tLMnzM+biG2nOveYAMxPWAulXTU1vUNiuRAZgFGERfJngqNwrE8AKEVoVz0xHxWEoABQqhAczE85ERQApiIEB62qMREUAKaK4BiJH4nwRFAAmDqC40rCeRQEBYBZ8Y5JumZVnXs8k9U7RO0u93gA4Br6cx2nAvyisE5B6gJYBA+OB684uFr2W3rtpzr3eABgbL31jTr3eIoUTq2/yz0WAMjNugsbPpvZbe6xFMOrimfSFACO+fyYzhhvco8nq1BVkKAAcIZXGz/M7D73WEYXqgoWtQHgAr1qo849nlGEvtwm91gAYGoWsbbBEVAAMIxw5YvH2Z23EVpQy+u/AcAV+Hkb9z63rnOPZxBhsWa+5RMAZDKbFlVIvzr3WABgrsbq4ny4xpOm/pqklaQ/q6pqr/HvAAAkn2P/lLSa1FFUIenuco8FAJYmXMiwzj2WVxEWAJBfCI0yF8PN7MYXtze5xwIASxeu+t3kHsuRMLAy0wwAFsjM1kW9kQ9hUeceCwDgWFgq2OQeSPp4wTrrQAAAZ3lo5Ks0QljQhgKAwmVrT1n3iVCEBQBMSAiNcebuUNrwmbMAMDF+ROv11539Ylf5F08AAL8tXH+qvuY/8sgVZwFg+vzkvqdrPfm9mT1e5ckBAKPz604NWwSM1vMCAIxm8HM0wiI3R0QBwMz4kVPDFAS+bjHtD+YAAJzli+DvW3IY5EkAAMV715XGaUUBwHKEOb/+nT/+wudaAMBy+KG2D7/6R42XJ6srjQsAUCCf+y+/kocvdDfXGxIAoETpIysu/eWGhW4AWK6Lz83w6oILCwLAQl1UZaS1i5HGBAAo1JtrGV5dbMYbEgCgRF5lnF6e8EuX/xh5TACAQvUvGfIh/OxW0n/GHhAAoFhbSS/bUp4kzdijAQCU6eS6dvqM7kxjAgAUKhYTqSW1Fu0oAMBLW3UZ0eHMbgDAKUcnc6ejo7huFACgzzPCpK4lVUvaV1W1zzoqAEBxPBt2ZtZ8UNeb2uYdEgCgYK2k9QdJnyR9yzsWAEDBvkr6mFpSbdahAABKtpNXGGtJrF8AAF6zSudhtDlHAQAo2l4hMAAAOGcvaaV0fC0AAOeYmVFhAAAu8kHSPl7vHACAyDOi/aDUmwIA4BUEBgDgLbV0CAwAAM5ZSdp9kJ/Bl3kwAIBy1fI1jO+S/so7FgBAwT5J+pYqjDrvWAAABWvUZUV3QgYfoAQA6IsfspdO3NuKdQwAwEtrSbuqqvYpMP6W9K+MAwIAlOmzuozo+Id8P+cbDwCgRN6OavoPPr94EACwWP1iIl588N+iLQUAOPgs6b8vHjWzmrYUACBJR0el739WGFVVtZJaM9tkGBcAoCCeBbuqqk5fPsrMbqgyAAAXrWv7L21GGREAoDhePDxe8osbqgwAWC4ze7z4qFmqDABYJj+U9u3qIvwBaxkAsDB+3ahfPyfPzB7M7O4qowIAFMfM7szsy+/8Ye3H4NbDDwsAUBIzW79rzve0oTUFADPnC923+Z8EAFAsM7v9pYXuV56o9kUQPi8DAGbm3a2oE0+48dAY5gkBANmFguBm6Ce+N7OnQZ8UAJCNLzncX+vJnzjUFgCmz4uA969bvPIPpPKFRXAAmKiwzLB6+7ff9w9dp+cFALg6v5LHeOfYhVV1jpwCgIkIc3cz9j+8ITQAYBpCWGxyDWAzamkDAPhl4VJPm9wD4RwNAChUWHfe5B6LJNpTAFAib0OVExaJf+hGeQMDgAUKb+TLPKI1pNld7rEAwFKlK40Xv1QQ+mV3uccCAEszmbBIPDSe/FP7rnsmIQAgfbzqg8+9de7x/DK/Vsl0kg4AJih0dq5zIcGx+AdzcP0pALgCn2N/zGaODYvh97SoAGAYs+3ieH/tcbL9NQAoRGhBPcx6PqVFBQC/L1xdYxlzaDiK6nHW6QgAA/F582GWLahLeP9tPos1AHAFYWH7LvdYsvJLilBtAECPVxWPi60qzmFtAwAO/IxtqopzQpo+2tifCAUABVjMEVBDscNnznJpEQCL0FvU3uQez6T4eRvpIlp3BAeAuWKuG0hI3fwfLwgAAwrnVNB+GpIfTcX6BoDJC0HBlS+uieAAMFUhKFinGBPBAWAqCIpChBeC4ABQFIKiUP7CPBEcAHIjKCYitKo4RA3AaPxUgNjx2OQeEy4UguOHB0ede0wA5qd3wt2Dma1zjwm/yV/MdFVc2lUABuFvSh+sw3kUc+Ll4m1Y57ilXQXgV/XXJwiKmeu1q+6pOgC8JlQTqe3U5B4TRmaH61WldhWL5AAk/Wxnx2qCtVB0wjsI1jqABbPuatlfwtpEk3tMKFRY64hHWDW5xwXgesxsHVpOj15Z0G3A5bwkTZcdfiY8gPnwkLin5YTBecuK8AAm7ERI3HPeBK6qFx4caQUUrHeEEyGBfM6FB/1PIA9fh7wJIfFESKA4vuYRF8wf/fs699iAOfNWU9r3LCxc17nHBrzJDhciS4fqplKY6gMYwIlW04NXFuxfV1LlHsBS+BrHWtJnSbWkVtLfknZVVW1zjQuYit4+1Ejain1oVARGBv4OKG74taSd2PiBn3oBsVb3Jmurw36yzzW2pSIwCuABciPpkwgQLNSZgIj7QZtrbOgQGAXyAGkk/aVux1mr23F2kr5J2rLzYMr8iKVah228UVc97CR9VbeNU0EUhsCYgNDCWqvbwRr/0VZdgOzEDoZChe230SEgpMP2uxUtpkkgMCbKDxds1LWxUpjsddgJW1HGY2Qn3tzUOrRYU/XAdjlRBMaMnAkR6bidtZPU8m4O7+VrDisdt06l43Boq6raZRkgBkdgzJyHSOoXx0X1Vl018l2HxUWCBEe8Yqj9tla3DaX7O3XbTmortVQO80ZgLFCYBFKQfAz39+omgr1obS2GL0KndlLaHtJjMRjSGwuqhgUiMHDkREWyCt+3OoRJqkxa8c6yeP66xttH/5pe3/S67tS9tjtJe4IBEYGBi4UwWek4TFLF0uplhbIPj+9peQ0vhMEqfP0Uvq91/Lq0IhTwGwgMDKb3Lnalw7vY9H0tDw4dqhPpUK1IIVy0wIDxduGpWy3pD70MhpWO/1/uJP2jEA5UfxgKgYFRhQmx1vGk99F/JT6WbvverfXf3aubHJM23E+/27//wqUT6htXPk1jTeoz9//Q6UCIf9/q5X/zd/WqNXGQAkZGYKB4YaLuf43300QsvZy8+9+/9fhrzoVP+8pjMdjiY0eBRiWA0v0fPGR4m68wwtkAAAAASUVORK5CYII=";class ws extends se.CSS2DObject{constructor(e,t){const i=document.createElement("div");super(i),this.props=e,this.amr=t,this._direction=1,this._controllingRotate=!1,this._controlling=!1,this._startAt=0,this._looper=0,this._initial=0,this._canRotate=!1,this._emitter=new je,this.addListener=this._emitter.addListener.bind(this._emitter),this.removeListener=this._emitter.removeListener.bind(this._emitter),this._update=()=>{if(this._looper=requestAnimationFrame(this._update),this._controlling){let c=(Date.now()-this._startAt)/200;c>4&&(c=4);let h=this._initial+.005*c*this._direction;if(h>this.props.max||h<this.props.min){this.mechanism&&(h<this.props.min?(this.mechanism.position.setZ(this.props.min),this._emitter.emit("change",this.props.min)):h>this.props.max&&(this.mechanism.position.setZ(this.props.max),this._emitter.emit("change",this.props.max)));return}if(this._initial=h,!this.mechanism)return;this.mechanism.position.setZ(h),this._emitter.emit("change",h)}};const r=Di();e.userData&&e.userData.target&&(this.name=e.userData.target.name,t.traverse(c=>{c.name===e.userData.target.name&&(this.mechanism=c)})),i.style.fontSize="30px",i.style.color="#0066FF",i.style.cursor="pointer",i.style.pointerEvents="auto";const l=document.createElement("div");l.style.position="absolute",l.style.left="0",l.style.transform="translateX(-50%) rotate(-180deg)",l.style.marginBottom="5px",l.style.width=l.style.height=r?"34px":"44px",l.style.background=`url(${xs}) center no-repeat`,l.style.backgroundSize="100% auto",l.setAttribute("data-direction","up"),l.style.transition="all .2s";const o=document.createElement("div");if(o.style.position="absolute",o.style.left="0",o.style.transform="translateX(-50%)",l.style.bottom=o.style.top="8px",o.style.width=o.style.height=l.style.width,o.style.background=`url(${xs}) center no-repeat`,o.style.backgroundSize="100% auto",o.style.transition="all .2s",o.setAttribute("data-direction","down"),Array.from([l,o]).forEach(c=>{r||c.addEventListener("mousemove",()=>{c.style.filter="invert(100%)"}),c.addEventListener("mouseleave",()=>{c.style.filter=""}),c.addEventListener("pointerdown",()=>{this.mechanism&&(c.style.filter="invert(100%)",this._controlling=!0,this._startAt=Date.now(),this._initial=this.mechanism.position.z,this._direction=c.getAttribute("data-direction")==="up"?1:-1,this._update())}),c.addEventListener("pointerup",()=>{this._controlling=!1,cancelAnimationFrame(this._looper),c.style.filter=""}),c.addEventListener("pointerleave",()=>{this._controlling=!1,cancelAnimationFrame(this._looper),c.style.filter=""})}),e.userData&&(this._canRotate=e.userData.canRotate,this._canRotate)){const{rotateTarget:c,rotateDuration:h,rotateStep:m,rotateMax:p,rotateMin:s}=e.userData;let a;if(c&&(t.traverse(u=>{u.name===c.name&&(a=u)}),a)){const u=document.createElement("div");u.style.background=`url(${la}) center no-repeat`,u.style.backgroundSize="100% auto",u.style.position="absolute",u.style.top="-50%",u.style.left="-50%",u.style.width=r?"140px":"160px",u.style.height=r?"70px":"80px",u.style.transform="translateX(-50%) translateY(-50%)",i.append(u);const g=document.createElement("div");g.style.background=`url(${aa}) center no-repeat`,g.style.backgroundSize="100% auto",g.style.width=g.style.height=r?"20px":"26px",g.style.position="absolute",g.style.top="0",g.style.transform="translateY(-50%)",g.style.marginBottom="5px",g.setAttribute("data-direction","left"),i.append(g);const _=document.createElement("div");_.style.background=`url(${oa}) center no-repeat`,_.style.backgroundSize="100% auto",_.style.width=_.style.height=r?"20px":"26px",_.style.position="absolute",g.style.left=_.style.right=r?"62px":"69px",_.style.top="0",_.style.transform="translateY(-50%)",_.style.marginBottom="5px",_.setAttribute("data-direction","right"),i.append(_),Array.from([g,_]).forEach(f=>{r||f.addEventListener("mousemove",()=>{f.style.filter="invert(100%)"}),f.addEventListener("mouseleave",()=>{f.style.filter=""}),f.addEventListener("pointerdown",()=>{if(this._timer&&this._timer.isPlaying())return;f.style.filter="invert(100%)",this._controllingRotate=!0,this._startAt=Date.now(),this._direction=f.getAttribute("data-direction")==="left"?1:-1;let v=m/180*Math.PI*this._direction+a.rotation.z;v>p/180*Math.PI?v=p/180*Math.PI:v<s/180*Math.PI&&(v=s/180*Math.PI),this._timer=new zt(a.rotation).to({z:v}).duration(h).start(),this._update()}),f.addEventListener("pointerup",()=>{this._controllingRotate=!1,cancelAnimationFrame(this._looper),f.style.filter=""}),f.addEventListener("pointerleave",()=>{this._controllingRotate=!1,cancelAnimationFrame(this._looper),f.style.filter=""})})}}i.append(l,o),this.scale.set(.01,.01,.01),this.matrixAutoUpdate=!1,this.updateMatrix()}hide(){this.element.style.display="none",this.traverse(e=>{e.visible=!1,e instanceof se.CSS2DObject&&(e.element.style.visibility="hidden")}),this.visible=!1}show(){this.element.style.display="auto",this.traverse(e=>{e.visible=!0,e instanceof se.CSS2DObject&&(e.element.style.visibility="visible")}),this.visible=!0}dispose(){this._emitter.removeAllListeners(),cancelAnimationFrame(this._looper),this.element.remove()}}class ca extends Mr.CSS3DObject{constructor(e){const t=document.createElement("div");super(t),this.props=e,this._scale=.01,this._emitter=new je,this.addEventListener=this._emitter.on.bind(this._emitter),this.removeEventListener=this._emitter.on.bind(this._emitter),this._mouseStart=new d.Vector2,this._targetSize=new d.Vector2,this._caches=[],this._sizeFlag="width",this._direction=1,this._lines=[],this._pointerdown=h=>{const{pageX:m,pageY:p}=h;this.endNode.setPointerCapture(h.pointerId),this._mouseStart.set(m,p),this._targetSize.setX(parseFloat(this.endNode.parentElement.style.width)),this._targetSize.setY(parseFloat(this.endNode.parentElement.style.height))},this._pointermove=h=>{if(!this._mouseStart.x)return;const{pageX:m,pageY:p}=h;let s=m-this._mouseStart.x,a=s+this._targetSize.x;this._sizeFlag==="height"&&(s=p-this._mouseStart.y,a=s*this._direction+this._targetSize.y);const u=a%10;a=a-u,s=(a-this._targetSize.x)*this._direction,this._sizeFlag==="height"&&(s=(a-this._targetSize.y)*this._direction),this._textNode.innerText=(a/100).toFixed(2)+" m",this.endNode.parentElement.style[this._sizeFlag]=`${a}px`},this._pointercancel=h=>{this.endNode.releasePointerCapture(h.pointerId),this._mouseStart.set(0,0)};const{start:i,end:r}=e,l=r.distanceTo(i);this.props.axios==="z"?this.props.axios="y":this.props.axios==="y"&&(this.props.axios="z"),this.props.axios==="y"&&(this._sizeFlag="height");const o=document.createElement("div");o.style.position="absolute",o.style.left="0",o.style.bottom="0",t.append(o),this._textNode=document.createElement("div"),this._textNode.innerText=l.toFixed(2)+" m",o.append(this._textNode);const c=document.createElement("div");this.endNode=c,c.style.position="absolute",c.style.left="auto",c.style.right="0",c.style.width="4px",c.style.height="4px",c.style.background="#0066FF",c.style.borderRadius="50%",c.style.margin="-2px -2px 0 0",c.style.cursor="pointer",o.append(c),this.scale.set(this._scale,this._scale,this._scale),t.style.fontSize="6px",t.style.color="#fff",o.style[this._sizeFlag]=l*100+"px",o.style.textAlign="center",this._sizeFlag==="height"?(o.style.borderLeft="0.1px dashed #fff",o.style.display="flex",o.style.alignItems="center",o.style.justifyContent="center",o.style.whiteSpace="nowrap",c.style.top="0",c.style.left="0",c.style.right="auto",c.style.margin="-2px 0 0 -2px"):o.style.borderBottom="0.1px dashed #fff",c.addEventListener("pointerdown",this._pointerdown),c.addEventListener("pointermove",this._pointermove),c.addEventListener("pointerup",this._pointercancel),r[this.props.axios]<i[this.props.axios]?this.rotateY(Math.PI):this._direction=-1}_getIndexByAxios(){return this.props.axios==="y"?1:this.props.axios==="z"?2:0}dispose(){this._lines.forEach(e=>e.dispose()),this._emitter.removeAllListeners(),this.endNode.removeEventListener("pointerdown",this._pointerdown),this.endNode.removeEventListener("pointermove",this._pointermove),this.endNode.removeEventListener("pointerup",this._pointercancel),this.element.remove(),this._caches.forEach(e=>e.clear()),this._caches=[]}}class ha extends d.Object3D{constructor(){super(),this._box3=new d.Box3,this._line11=new Bt("长:"),this._line12=new Bt("宽:"),this._line13=new Bt("高:"),this._outline=new Ks(0,0),this._radius=0,this._hasWidthConfig=!1,this._hasLengthConfig=!1,this._hasHeightConfig=!1,this.follow="",this.followOrigin=0,this.followScale=1,this.originOffset=0,this.translateCache=0,this.head=0,this.tail=0,this._change=()=>{if(!this._app)return;const e=this._app.camera;e&&this._outline.change(e.position)},this.add(this._outline,this._line11,this._line12,this._line13)}get hasSizeConfig(){return{length:this._hasLengthConfig,width:this._hasWidthConfig,height:this._hasHeightConfig}}get size(){return this._box3.clone()}get radius(){return this._radius}init(e){this._app=e,this._app.controls.addEventListener("change",this._change)}reset(){this.hide(),this._line11.reset()}generate(e,t=0){e&&(this._object=e),this.update(t)}show(e=!0){const t=[this._line11,this._line12,this._line13];e&&(this.visible=!0,this._outline.visible=!0,this._outline.show(),t.push(this._outline)),t.forEach(i=>{i.traverse(r=>{r.visible=!0,r instanceof se.CSS2DObject&&(r.element.style.visibility="visible")})})}hide(e=!0){const t=[this._line11,this._line12,this._line13];e&&(this.visible=!1,this._outline.visible=!1,this._outline.hide(),t.push(this._outline)),t.forEach(i=>{i.traverse(r=>{r.visible=!1,r instanceof se.CSS2DObject&&(r.element.style.visibility="hidden")})})}destroy(){var e;(e=this._app)==null||e.controls.removeEventListener("change",this._change),this._line11.destroy(),this._line12.destroy(),this._line13.destroy()}update(e=0){if(!this._object)return;const t=this._object,{box:i,maxRadius:r,hasLength:l,hasHeight:o,hasWidth:c}=Ro(t);this.tail=Math.abs(i.min.x),this.head=Math.abs(i.max.x),this._hasWidthConfig=c,this._hasLengthConfig=l,this._hasHeightConfig=o,this._box3.copy(i),this._radius=r,this.follow&&e&&(this.originOffset=(this.followOrigin-e)*this.followScale),this._outline.update(this._radius),this._change();const h=this._box3.min.x,m=this._box3.max.x,p=this._box3.min.z,s=this._box3.max.z,a=this._box3.min.y,u=this._box3.max.y;let g=.2;const _=new d.Vector3(h,u,0),f=new d.Vector3(m,u,0);this._line11.update(_.clone().sub(new d.Vector3(0,-g/1.8,0)),f.clone().sub(new d.Vector3(0,-g/1.8,0)),this._radius);const v=new d.Vector3(m,a,0);this._line12.update(f.clone().add(new d.Vector3(g,0,0)),v.clone().add(new d.Vector3(g,0,0)),this._radius);const y=new d.Vector3(h,u,p),x=new d.Vector3(h,u,s),w=y.clone();w.y-=g/6;const b=x.clone();b.y-=g/6,this._line13.update(w,b,this._radius)}}class bs extends d.Object3D{constructor(e=.6,t=.4,i=.2){super(),this.isGoods=!0,this._generate(e,t,i)}updateSize(e=.1,t=.1,i=.1){this._generate(e,t,i)}clearAll(){oe(this)}hide(){this.traverse(e=>e.visible=!1)}show(){this.traverse(e=>e.visible=!0)}_generate(e,t,i){this.clearAll();const r=new d.Mesh(new d.BoxGeometry(e,t,i),new d.MeshBasicMaterial({color:new d.Color("#0f5fd5"),transparent:!0,opacity:.4}));r.geometry.translate(0,0,i/2);const l=new d.EdgesGeometry(r.geometry),o=new d.LineDashedMaterial({color:new d.Color("#000"),dashSize:.015,gapSize:.015}),c=new d.LineSegments(l,o);c.computeLineDistances(),this.add(r,c)}}const ua="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAALSURBVAiZY2AAAgAABQABYlUyiAAAAABJRU5ErkJggg==";class vi{constructor(e){this._props=e,this.name="",this.transparentTexture=Oi.load(ua),this._offscreen=new OffscreenCanvas(0,0),this._defaults={...e},this.target=e.target,this.parent=this.target.parent,this.reset()}get imageSize(){return this._props.imageSize}get size(){return this._props.size}get defaultConfigs(){return{canvasWidth:200,canvasHeight:200,scaleX:1,scaleY:1,x:0,y:0,ox:0,oy:0,url:this._defaults.imageUrl}}clear(){this.change()}change(e,t=new d.Vector2(1,1),i=new d.Vector2){this.imageUrl=e;let r;if(e){const l=new Image;l.crossOrigin="anonymous",l.src=e,l.onload=async()=>{var m;let o=window.devicePixelRatio*2;this._offscreen.width=l.width+o,this._offscreen.height=l.height+o;const c=this._offscreen.getContext("2d");c==null||c.clearRect(0,0,this._offscreen.width,this._offscreen.height),c==null||c.drawImage(l,o/2,o/2,l.width,l.height),r=new d.Texture(this._offscreen),r.minFilter=1003,r.colorSpace=d.SRGBColorSpace,r.wrapS=r.wrapT=d.ClampToEdgeWrapping,r.repeat.set(1/t.x,1/t.y),r.offset.set(i.x,i.y),r.flipY=!1,r.needsUpdate=!0;const h=this._props.target;h.material&&((m=h.material.map)==null||m.dispose(),r?(h.material.map=r,h.material.opacity=1):(h.material.map=this.transparentTexture,h.material.opacity=0))}}else{const l=this._props.target;l.material&&(l.material.map=this.transparentTexture)}}reset(){this._props=this._defaults,this.name=this._props.name,this.imageUrl=this._props.imageUrl,this.target=this._props.target,this.change(this.imageUrl||"")}dispose(){this._offscreen=null}}function $s(n){return n.type?n.type==="Mesh":n.isMesh}const fa=n=>{const e=window.performance.now(),t=[];n.updateWorldMatrix(!0,!0),n.traverse(l=>{if($s(l)||l.geometry){const o=l.geometry.clone();if(o.applyMatrix4(l.matrixWorld),o.morphTargetsRelative=!1,o.morphAttributes)for(const c in o.morphAttributes)delete o.morphAttributes[c];for(const c in o.attributes)c!=="position"&&o.deleteAttribute(c);t.push(o)}});const i=Pr.mergeGeometries(t,!1),r=window.performance.now()-e;return console.log(`Merge object: ${n.name} time: ${r.toFixed(2)} ms`),i},Oi=new d.TextureLoader;Oi.crossOrigin="anonymous";class er extends d.Object3D{constructor(e){super(),this._props=e,this._emitter=new je,this.addEventListener=this._emitter.addListener.bind(this._emitter),this._container=new d.Group,this.lines=new d.Group,this.sizeBox=new ha,this._goodsSize=new Eo(0,0,0),this._slots=[],this._logos=[],this._skins=[],this._levels=new Map,this._bodyOpacity=1,this._masts=new Map,this._liftMaxHeight=0,this._jackMaxHeight=0,this._forkMaxHeight=0,this.controllers=[],this.goods=[],this._breathLights=[],this._shelves=new Map,this._shelfMaxLevel=1,this._url="",this._showController=!0,this._showSlots=!0,this._shapeKeys=new Map,this._shapeKeyTimer=0,this._shapeKeyCache="",this._materialsCache=new Map,this.opacityCache=void 0,this._pointCloudMode=!1,this._pointClouds=[],this._originalMeshes=new Map,this._pointCloudAnimations=[],this.actions=[],this._url=e.url||"",this._url&&this.load(this._url).then(),this.add(this._container,this.lines),this._props.showSizeBox&&this.add(this.sizeBox),this.showController=typeof e.showController=="boolean"?e.showController:!0,this._showSlots=typeof e.showSlots=="boolean"?e.showSlots:!0}get shapeKeys(){return this._shapeKeys}get size(){const e=this.sizeBox.size.getSize(new d.Vector3);return{width:e.z,length:e.x,height:e.y}}get goodsSize(){return this._goodsSize}get showController(){return this._showController}set showController(e){this._showController=e,this.controllers.forEach(t=>e?t.show():t.hide())}get slots(){return this._slots}get logos(){return this._logos}get skins(){return this._skins}get bodyOpacity(){return this._bodyOpacity}get fork(){return this._fork}get forkHeight(){var e;return((e=this._fork)==null?void 0:e.position.z)||0}get liftHeight(){var e;return((e=this._lift)==null?void 0:e.position.z)||0}get jack(){return this._jack}get jackHeight(){var e;return((e=this._jack)==null?void 0:e.position.z)||0}get lift(){return this._lift}set bodyOpacity(e){this._bodyOpacity=e,e<1?this._materialsCache.forEach(t=>{t.mat.transparent=!0,t.mat.opacity=e,t.mat.metalness=0,t.mat.roughness=1,t.mat.color=new d.Color("#3859be"),t.mat.needsUpdate=!0}):this._materialsCache.forEach(t=>{t.mat.transparent=t.transparent,t.mat.opacity=t.opacity,t.mat.metalness=t.metalness,t.mat.roughness=t.roughness,t.mat.color=t.color,t.mat.needsUpdate=!0})}init(e){this._app=e,this.sizeBox.init(e),this.addEventListener("shape-key-changed",(t,i)=>{this._slots.forEach(r=>r.shapeKeyChanged(t,i)),this.sizeBox.follow===t?(this.sizeBox.generate(this._container,i),this.sizeBox.originOffset&&(this._container.traverse(r=>{r instanceof d.Mesh&&!r.userData.isDevice&&!r.userData.isBracket&&r.geometry.translate(this.sizeBox.originOffset-this.sizeBox.translateCache,0,0),r instanceof gi&&!r.props.slot.userData.ignoreOriginChanged&&r.parent&&r.parent.position.add(new d.Vector3(this.sizeBox.originOffset-this.sizeBox.translateCache,0,0))}),this.sizeBox.translateCache=this.sizeBox.originOffset,this.sizeBox.generate(this._container))):this.sizeBox.generate(this._container),["width","length","height"].includes(t)&&this._emitter.emit("size-changed",t,i)})}async load(e,t=""){this._url=e,this.name||(this.name=e.substring(e.lastIndexOf("/")+1,e.lastIndexOf("."))),!e.startsWith("blob")&&e.endsWith(".sglb");let i;if(t==="glb"||e.endsWith(".glb"))i=(await ut.loadAsync(e)).scene;else{const l=await new Vt({useCache:!0}).loadAsync(e);if(!l.glb)return;i=l.glb}this._generateAmr(i.clone(!0)),i=null,this._emitter.emit("amr-loaded")}changeSkin(e,t){e&&(e.change(t),this._app&&this._app.usePathTracing&&(this._app.sampleCount=0,this._app.usePathTracing&&(this._app.pathTracer.pausePathTracing=!1,this._app.pathTracer.updateMaterials())))}changeLogo(e,t){e.change(t.url,new d.Vector2(t.scaleX,t.scaleY),new d.Vector2(t.ox,t.oy))}setShapeKey(e,t,i=!0){i&&this._shapeKeyTimer&&e===this._shapeKeyCache&&clearTimeout(this._shapeKeyTimer),this._shapeKeyCache=e,this._shapeKeyTimer=window.setTimeout(()=>{this._container.traverse(r=>{if(!Object.keys(r.morphTargetDictionary||{}).includes(e))return;let l=t;r.userData[`origin_${e}`]&&(l-=r.userData[`origin_${e}`]);const o=r.morphTargetDictionary[e];r.morphTargetInfluences&&(r.morphTargetInfluences[o]=l),r instanceof d.Mesh&&r.geometry.translate(0,0,1e-5)}),i&&this._emitter.emit("shape-key-changed",e,t)},100)}_generateAmr(e){this._mergedGeometry=fa(e),e.traverse(t=>{t.userData.isShelf&&(this._shelf=t),t.userData.isFork&&(this._fork=t),t.userData.isMast&&t.userData.mastLevel&&this._masts.set(t.userData.mastLevel,t),t.userData.isJack&&(this._jack=t),t.userData.isLift&&(this._lift=t),Object.keys(t.morphTargetDictionary||{}).forEach(i=>{let r=t.morphTargetInfluences[t.morphTargetDictionary[i]];t.userData[`origin_${i}`]&&(r+=t.userData[`origin_${i}`]),this._shapeKeys.has(i)||this._shapeKeys.set(i,r)})}),e.traverse(t=>{if(t instanceof d.Mesh){if(t.castShadow=!0,t.receiveShadow=!0,t.material)if(Array.isArray(t.material))t.material.forEach(r=>{r.userData.changeColor&&(this.skins.find(l=>l.name===r.userData.name)||this.skins.push(new Mi({name:r.userData.name,target:r})))});else{if(t.material.userData.isBreathLight&&t.material.emissiveIntensity){t.material.emissive||(t.material.emissive=new d.Color(16777215)),t.material.emissiveIntensity=2,t.material.toneMapped=!1;const r=1e3,l=new ie.Tween(t.material).to({emissiveIntensity:.2}).easing(ie.Easing.Quintic.InOut).duration(r),o=new ie.Tween(t.material).to({emissiveIntensity:2}).easing(ie.Easing.Quintic.InOut).duration(r);l.onComplete(()=>o.start()),o.onComplete(()=>l.start()),l.start(),this._breathLights.push(l,o)}t.material.userData.changeColor&&(this.skins.find(r=>r.name===t.material.userData.name)||this.skins.push(new Mi({name:t.material.userData.name,target:t.material})))}if(t.material)if(Array.isArray(t.material))t.material.forEach(l=>{if(l.userData.isLOGO){t.material.transparent=!0;let o;const c={width:0,height:0};t.material.map&&t.material.map.image&&(c.width=t.material.map.image.width,c.height=t.material.map.image.height,o=mi(t.material.map.image));const h=new vi({name:l.userData.name,target:t,size:us(t),imageSize:c,imageUrl:o});this._logos.push(h)}l.userData.isTransparent&&(l.transparent=!0),this._materialsCache.set(l.uuid,{opacity:l.opacity,transparent:l.transparent,roughness:l.roughness,metalness:l.metalness,color:l.color,mat:l})});else{const r=t.material;if(r.userData.isLOGO){t.material.transparent=!0;let l;const o={width:0,height:0};t.material.map&&t.material.map.image&&(o.width=t.material.map.image.width,o.height=t.material.map.image.height,l=mi(t.material.map.image));const c=new vi({name:r.userData.name,target:t,size:us(t),imageSize:o,imageUrl:l});this._logos.push(c)}r.userData.isTransparent&&(r.transparent=!0),this._materialsCache.set(r.uuid,{opacity:r.opacity,transparent:r.transparent,roughness:r.roughness,metalness:r.metalness,color:r.color,mat:r})}}this.generateController(t,e),this.generateDimension(t,e);const i=this.generateSlot(t,e);i&&this._slots.push(i),t.userData.isOrigin&&Object.keys(t.userData).forEach(l=>{if(l.startsWith("follow_")){const o=l.replace("follow_","");this.shapeKeys.has(o)&&(this.sizeBox.follow=o,this.sizeBox.followOrigin=this._shapeKeys.get(o)||0,this.sizeBox.followScale=t.userData[l])}})}),this.slots.forEach(t=>{t.props.mirrorTarget&&(t.mirrorTarget=this.slots.find(i=>i.props.slot.name===t.props.mirrorTarget))}),e.updateMatrixWorld(!0),this._container.add(e),this.sizeBox.generate(e),this.sizeBox.show()}setHeight(e){this.setShapeKey("height",e)}setWeight(e){this.setShapeKey("width",e)}setLength(e){this.setShapeKey("length",e)}limitValue(e){this.name==="SFL-CDD14"&&(e>1.6?this.setShapeKey("mast",1):this.setShapeKey("mast",0)),["SFL-CDD20","SFL-CDD20-Y"].includes(this.name)&&(e>1.6?this.setShapeKey("mast",1):this.setShapeKey("mast",0)),this.name==="SFL-CDD15"&&(e>2.43?this.setShapeKey("mast",1):this.setShapeKey("mast",0)),["SFL-CPD20-Y","SFL-CPD30-Y"].includes(this.name)&&(e>3.5?this.setShapeKey("mast",2):e>3?this.setShapeKey("mast",1):this.setShapeKey("mast",0))}setForkHeight(e){if(this._fork){if(e>this._forkMaxHeight&&(e=this._forkMaxHeight),this._fork.position.z=e,this._masts.size===1){const t=this._masts.get(2),i=(t==null?void 0:t.userData.startHeight)||.1;t&&(t.position.z=(e-i)*.5)}this._emitter.emit("fork-height-change",e)}}setForkMaxHeight(e){this._fork&&(this._forkMaxHeight=e,this.limitValue(e),this.controllers.forEach(t=>{t.name.toLowerCase().includes("fork")&&(t.props.max=e)}),this._fork&&this.forkHeight>this._forkMaxHeight&&this.setForkHeight(e))}setLiftHeight(e){this._lift&&(e>this._liftMaxHeight&&(e=this._liftMaxHeight),this._lift.position.z=e)}getLiftMaxHeight(){return this._liftMaxHeight}setLiftMaxHeight(e){if(!this._lift)return;this._liftMaxHeight=e,this.limitValue(e),this.controllers.forEach(l=>{l.name.toLowerCase().includes("lift")&&(l.props.max=e)}),this.liftHeight>this._liftMaxHeight&&this.setLiftHeight(e);let t=.46;this.levelOffset&&(t=this.levelOffset+.1);let i=e+t;const r=this.getShelfMinHeight()+t||0;i<r&&(i=r),this.setHeight(i)}setJackMaxHeight(e){this._jack&&(this._jackMaxHeight=e,this.limitValue(e),this.controllers.forEach(t=>{t.name.toLowerCase().includes("jack")&&(t.props.max=e)}),this.jackHeight>this._jackMaxHeight&&this.setJackHeight(e))}setJackHeight(e){this._jack&&(e>this._jackMaxHeight&&(e=this._jackMaxHeight),requestAnimationFrame(()=>{this.setShapeKey("jackHeight",e,!1)}),this._jack.position.z=e)}setLevel(e){}setGoodsSize(e){this._goodsSize.length=e.length,this._goodsSize.width=e.width,this._goodsSize.height=e.height,this.setShelfLevel(this._shelfMaxLevel)}getShelfMinHeight(){const e=this.levelOffset,t=this._shelfMaxLevel,i=this._shelves.get(0);return i?i.position.z+e*t+.1:0}getShelfMaxShelfHeight(){const e=this.levelOffset,t=this._shelfMaxLevel,i=this._shelves.get(0);if(i)return i.position.z+e*(t-1)}get levelOffset(){return this._goodsSize.height+.2}setShapeKeyToMesh(e,t,i){if(!Object.keys(e.morphTargetDictionary||{}).includes(t))return;const r=e.morphTargetDictionary[t];e.morphTargetInfluences&&(e.morphTargetInfluences[r]=i),e.geometry.translate(0,0,1e-5)}setShelfLevel(e=3){var r;if(!this._shelf)return;this._shelfMaxLevel=e;const t=this.levelOffset;this._shelves.delete(0),this._shelves.forEach(l=>{oe(l),l.parent&&l.removeFromParent()}),this.goods=[],this._shelves.clear(),this._shelves.set(0,this._shelf);for(let l=1;l<e;l++){if(!this._shelf)return;this._shelf.traverse(h=>{$s(h)&&(this.setShapeKeyToMesh(h,"goodsWidth",this._goodsSize.width),this.setShapeKeyToMesh(h,"goodsLength",this._goodsSize.length))});const o=this._shelf.clone(!0);o.position.z+=t*l,this._shelves.set(l,o),(r=this._shelf.parent)==null||r.add(o);let c;if(o.traverse(h=>{h.userData.isShelfContainer&&(c=h)}),(this.shapeKeys.has("goodsLength")||this.shapeKeys.has("goodsWidth"))&&(c==null||c.position.setX((c==null?void 0:c.position.x)-this._goodsSize.length/2)),c){const h=new bs(this._goodsSize.length,this._goodsSize.width,this._goodsSize.height);if(c.add(h),this.goods.push(h),l===1){const m=new bs(this._goodsSize.length,this._goodsSize.width,this._goodsSize.height);m.position.z-=t,c.add(m),this.goods.push(m)}}}const i=this.getShelfMinHeight()||0;this._liftMaxHeight<i&&this.setLiftMaxHeight(i)}generateOuterLine(){this.traverse(e=>{if(e.userData.isOuterObject){const t=this.sizeBox.radius;this._outline?this._outline.update(t):(this._outline=new Ks(t,0),this.add(this._outline))}})}generateController(e,t){if(this.showController){if(e.userData.isForkController&&e.userData.target){const i=e.userData.target.name,{min:r,max:l}=e.userData;let o;if(t.traverse(h=>{h.name===i&&(o=h)}),!o)return;const c=new ws({name:"",target:i,default:0,min:r,max:l},o);e.add(c)}else if(e.userData.isController&&e.userData.target){const i=e.userData.target.name,{min:r,max:l}=e.userData;let o;if(t.traverse(h=>{h.name===i&&(o=h)}),!o)return;const c=new ws({name:"",userData:e.userData,target:e.userData.key,default:0,min:r||0,max:l||1},o);e.add(c),this.controllers.push(c),(o.userData.isFork||o.userData.isLift||o.userData.isJack)&&(this._forkMaxHeight=l||1,this._liftMaxHeight=l||1,this._jackMaxHeight=l||1,c.addListener("change",h=>{this.setForkHeight(h),this.setLiftHeight(h),this.setJackHeight(h)}))}}}generateDimension(e,t){if(e.userData.isDimension){const i=e.userData.divider,r=Mo(e.userData.startOrigin),l=e.userData.axios;let o,c;if(l==="x"?(o=new d.Vector3(e.userData.start-e.position.x,0,0),c=o.clone().setX(e.userData.end-e.position.x)):l==="z"?(o=new d.Vector3(0,e.userData.start-e.position.y,0),c=o.clone().setY(e.userData.end-e.position.y)):(o=new d.Vector3(0,0,e.userData.start-e.position.z),c=o.clone().setZ(e.userData.end-e.position.z)),!Object.keys(e.userData).flatMap(s=>s.startsWith("target")?e.userData[s].name:[]).length)return;const p=new ca({start:o,end:c,startOrigin:r,axios:l,divider:i});e.add(p)}}generateSlot(e,t){var i,r;if(e.userData.isSlot){const l=e.userData.name,o=e.userData.isMirror,c=(i=e.userData.mirrorSlot)==null?void 0:i.name;if(l){const h=e.userData.holeTarget&&e.userData.holeTarget.name;let m;h&&t.traverse(u=>{u.name===h&&(m=u)});const p=new Map;Object.keys(e.userData).forEach(u=>{if(u.startsWith("follow_")){const g=u.split("_")[1];if(g){let _=e.userData[u];p.set(g,{scale:_,origin:this.shapeKeys.get(g)||0})}}});const s=(r=this._app)==null?void 0:r.props.isMobile,a=new gi({name:l,follows:p,slot:e,show:this._showSlots,isMirror:o,mirrorTarget:c,isMobile:s});return a.holeTarget=m,a.addEventListener(H.ON_DROP,u=>{this._app&&this._app.props.useSound&&this._app.sound.play()}),a.addEventListener(H.ON_BEFORE_SELECTED,u=>{this._slots.forEach(g=>{g.selected&&(g.selected=!1)})}),a.addEventListener(H.ON_ERROR_STATE_CHANGE,u=>{if(this._app)if(this._app._outlinePassError.selectedObjects=this._app._outlinePassError.selectedObjects.filter(g=>!!g.parent),u){if(a.device){if(this._app._outlinePassError.selectedObjects.find(_=>{var f;return _.parent==((f=a.device)==null?void 0:f.parent)}))return;this._app._outlinePassError.selectedObjects=[a.device,...this._app._outlinePassError.selectedObjects]}}else a.device&&(this._app._outlinePassError.selectedObjects=this._app._outlinePassError.selectedObjects.filter(g=>{var _;return g.parent!=((_=a.device)==null?void 0:_.parent)}))}),a}}}clean(){this._emitter.removeAllListeners(),this.controllers.forEach(e=>e.dispose()),this.controllers=[],oe(this._container),this._levels.forEach(e=>e.destroy()),this._levels.clear(),this._slots=[],this._logos=[],this._skins=[],this._materialsCache.clear(),this.opacityCache=void 0,this._breathLights.forEach(e=>e.stop()),this._breathLights=[],this.sizeBox.reset()}destroy(){this._pointCloudMode&&this._clearPointClouds(),this.clean(),this.sizeBox.destroy()}setPointCloudMode(e){this._pointCloudMode=e,e?(this.sizeBox.hide(),this.controllers.forEach(t=>t.hide()),this.slots.forEach(t=>t.hide()),this._createPointClouds()):(this.sizeBox.show(),this.slots.forEach(t=>t.hide()),this.controllers.forEach(t=>t.show()),this._clearPointClouds())}_createPointClouds(){this._clearPointClouds();const e=[],t=[],i=.02,r=.05,l=1e7;new d.Vector3;const o=new d.Vector3(1/0,1/0,1/0),c=new d.Vector3(-1/0,-1/0,-1/0);this._container.traverse(p=>{if(p instanceof d.Mesh&&p.geometry&&p.visible){this._originalMeshes.set(p.uuid,{mesh:p,visible:p.visible}),p.visible=!1,p.geometry.computeBoundingBox();const s=p.geometry.boundingBox.clone();s.applyMatrix4(p.matrixWorld),o.min(s.min),c.max(s.max);const a=p.geometry,u=a.attributes.position,g=a.index;if(u){p.updateMatrixWorld();const _=p.matrixWorld;if(g){const f=g.array;for(let v=0;v<f.length;v+=3){const y=f[v],x=f[v+1],w=f[v+2],b=new d.Vector3(u.getX(y),u.getY(y),u.getZ(y)).applyMatrix4(_),C=new d.Vector3(u.getX(x),u.getY(x),u.getZ(x)).applyMatrix4(_),T=new d.Vector3(u.getX(w),u.getY(w),u.getZ(w)).applyMatrix4(_);e.length<l*3&&this._generatePointsOnTriangle(b,C,T,i,r,e,t)}}else for(let f=0;f<u.count;f++){const v=new d.Vector3(u.getX(f),u.getY(f),u.getZ(f)).applyMatrix4(_);e.push(v.x,v.y,v.z);const y=(v.y-o.y)/(c.y-o.y);t.push(0,y*.5,.5+y*.5)}}}});const h=this._removeDuplicatePoints(e,t,i*.5),m=1e5;if(h.positions.length>m*3){const p=m*3/h.positions.length,s=[],a=[];for(let u=0;u<h.positions.length;u+=3)Math.random()<p&&(s.push(h.positions[u],h.positions[u+1],h.positions[u+2]),a.push(h.colors[u],h.colors[u+1],h.colors[u+2]));h.positions=s,h.colors=a}if(h.positions.length>0){const p=o.clone().add(c).multiplyScalar(.5),s=c.clone().sub(o),a=Math.max(s.x,s.y,s.z);if(a===0||!isFinite(a)){console.warn("Point cloud generation failed: invalid model bounds");return}const u=new Float32Array(h.positions.length),g=new Float32Array(h.positions),_=new Float32Array(h.colors.length),f=new Float32Array(h.colors);for(let S=0;S<h.positions.length;S+=3){const A=S/3;g[S],g[S+1],g[S+2];const I=A/(h.positions.length/3)*Math.PI*4,M=Math.random(),R=Math.sqrt(M),E=.05+Math.random()*.1,F=a*2.2*(E+R*(1-E)),D=3,L=A%D*(Math.PI*2/D)+I,V=Math.random()*.4,z=F*(1+V),G=R,Y=.25+R*.2,le=(Math.random()<.5?-1:1)*Math.random()*a*Y*G,we=(Math.random()-.5)*a*.25*G,me=a*.3*(1+R*.5),jt=1.2,qt=.85;u[S]=p.x+Math.cos(L)*z*jt+(Math.random()-.5)*me,u[S+1]=p.y+le+we,u[S+2]=p.z+Math.sin(L)*z*qt+(Math.random()-.5)*me;const Yt=Math.random(),N=Math.random()<.1?1.5:1,Qt=R>.75?.7:R>.5?.4:0,be=Yt*(1-Qt);be<.7?(_[S]=(.1+Math.random()*.2)*N,_[S+1]=(.6+Math.random()*.4)*N,_[S+2]=(.8+Math.random()*.2)*N):be<.8?(_[S]=(.6+Math.random()*.4)*N,_[S+1]=(.1+Math.random()*.3)*N,_[S+2]=(.8+Math.random()*.2)*N):be<.92?(_[S]=(.8+Math.random()*.2)*N,_[S+1]=(.2+Math.random()*.3)*N,_[S+2]=(.6+Math.random()*.3)*N):(_[S]=(.9+Math.random()*.1)*N,_[S+1]=(.4+Math.random()*.3)*N,_[S+2]=(.1+Math.random()*.2)*N)}const v=new d.BufferGeometry;v.setAttribute("position",new d.Float32BufferAttribute(u,3)),v.setAttribute("color",new d.Float32BufferAttribute(_,3));const y=new d.PointsMaterial({size:.002,color:"#367BF5",vertexColors:!1,opacity:.1,transparent:!1,depthWrite:!1,sizeAttenuation:!0}),x=new d.Points(v,y);this.add(x),this._pointClouds.push(x);const w=v.attributes.position,b=v.attributes.color,C={progress:0};y.opacity=.3;const T=new ie.Tween(C).to({progress:1},600).easing(ie.Easing.Linear.None).onUpdate(()=>{const S=C.progress,A=w.array,P=b.array,I=.6,M=S<I,R=S<.9,E=M?S/I:1,F=E*E,D=F*Math.PI*1.25,L=M?0:(S-I)/(1-I),z=(1-Math.pow(1-L,3))*Math.PI*.75,G=M?D:D+z;for(let B=0;B<A.length;B+=3){const le=u[B],we=u[B+1],me=u[B+2],jt=g[B],qt=g[B+1],Yt=g[B+2],N=M?F:1,Qt=le+(jt-le)*N,be=we+(qt-we)*N,hr=me+(Yt-me)*N,Ae=Qt-p.x,Te=hr-p.z;if(M){const Ye=Math.sqrt(Ae*Ae+Te*Te),Qe=Math.atan2(Te,Ae)+G;A[B]=p.x+Math.cos(Qe)*Ye,A[B+1]=be,A[B+2]=p.z+Math.sin(Qe)*Ye}else{const Ye=Math.sqrt(Ae*Ae+Te*Te),Qe=Math.atan2(Te,Ae)+G;A[B]=p.x+Math.cos(Qe)*Ye,A[B+1]=be,A[B+2]=p.z+Math.sin(Qe)*Ye}R&&(P[B]=_[B]+(f[B]-_[B])*S,P[B+1]=_[B+1]+(f[B+1]-_[B+1])*S,P[B+2]=_[B+2]+(f[B+2]-_[B+2])*S)}let Y=.3;M?Y=.3+.4*F:Y=.7-.1*L,y.opacity=Y,w.needsUpdate=!0,R&&(b.needsUpdate=!0)}).onComplete(()=>{const S=this._pointCloudAnimations.indexOf(T);S>-1&&this._pointCloudAnimations.splice(S,1);const A=new Os.LineMaterial({color:"#222",linewidth:.001,opacity:.1,transparent:!0,depthTest:!0,depthWrite:!1}),P=new d.MeshBasicMaterial({colorWrite:!0,color:"#0000ff",depthWrite:!1,depthTest:!0,transparent:!0,opacity:.12}),I=new d.Mesh(this._mergedGeometry,P);I.renderOrder=0,this.lines.add(I);const M=new d.EdgesGeometry(this._mergedGeometry,15),R=new Sr.LineSegmentsGeometry().fromEdgesGeometry(M),E=new Tr.LineSegments2(R,A);E.renderOrder=1,this.slots.forEach(F=>F.show()),x.visible=!1}).start();this._pointCloudAnimations.push(T)}}_generatePointsOnTriangle(e,t,i,r,l,o,c){const h=e.distanceTo(t),m=t.distanceTo(i),p=i.distanceTo(e),s=Math.max(h,m,p),a=Math.max(2,Math.ceil(s/r));if(s>l)for(let u=0;u<=a;u++)for(let g=0;g<=a-u;g++){const _=u/a,f=g/a,v=1-_-f;if(v>=0){const y=new d.Vector3().addScaledVector(e,_).addScaledVector(t,f).addScaledVector(i,v);o.push(y.x,y.y,y.z),c.push(0,y.y/5,1-y.y/1.4)}}else{o.push(e.x,e.y,e.z),o.push(t.x,t.y,t.z),o.push(i.x,i.y,i.z);for(let u=0;u<3;u++)c.push(0,0,0)}}_removeDuplicatePoints(e,t,i){const r=[],l=[],o=new Map;for(let c=0;c<e.length;c+=3){const h=e[c],m=e[c+1],p=e[c+2],s=`${Math.round(h/i)}_${Math.round(m/i)}_${Math.round(p/i)}`;o.has(s)||(o.set(s,!0),r.push(h,m,p),l.push(t[c],t[c+1],t[c+2]))}return{positions:r,colors:l}}_clearPointClouds(){this._pointCloudAnimations.forEach(e=>{e.stop()}),this._pointCloudAnimations=[],this._pointClouds.forEach(e=>{e.geometry.dispose(),e.material instanceof d.PointsMaterial&&e.material.dispose(),e.removeFromParent()}),this._pointClouds=[],this._originalMeshes.forEach(({mesh:e,visible:t})=>{e.visible=t}),this._originalMeshes.clear()}playAction(e,t=!0){}pauseAction(e){console.log(`Pausing action: ${e}`)}}const tr=0,da=1,pa=2,As=2,ei=1.25,Ts=1,ct=6*4+4+4,Wt=65535,ma=Math.pow(2,-24),ti=Symbol("SKIP_GENERATION");function ga(n){return n.index?n.index.count:n.attributes.position.count}function qe(n){return ga(n)/3}function va(n,e=ArrayBuffer){return n>65535?new Uint32Array(new e(4*n)):new Uint16Array(new e(2*n))}function _a(n,e){if(!n.index){const t=n.attributes.position.count,i=e.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,r=va(t,i);n.setIndex(new d.BufferAttribute(r,1));for(let l=0;l<t;l++)r[l]=l}}function ir(n){const e=qe(n),t=n.drawRange,i=t.start/3,r=(t.start+t.count)/3,l=Math.max(0,i),o=Math.min(e,r)-l;return[{offset:Math.floor(l),count:Math.floor(o)}]}function sr(n){if(!n.groups||!n.groups.length)return ir(n);const e=[],t=new Set,i=n.drawRange,r=i.start/3,l=(i.start+i.count)/3;for(const c of n.groups){const h=c.start/3,m=(c.start+c.count)/3;t.add(Math.max(r,h)),t.add(Math.min(l,m))}const o=Array.from(t.values()).sort((c,h)=>c-h);for(let c=0;c<o.length-1;c++){const h=o[c],m=o[c+1];e.push({offset:Math.floor(h),count:Math.floor(m-h)})}return e}function ya(n){if(n.groups.length===0)return!1;const e=qe(n),t=sr(n).sort((l,o)=>l.offset-o.offset),i=t[t.length-1];i.count=Math.min(e-i.offset,i.count);let r=0;return t.forEach(({count:l})=>r+=l),e!==r}function ii(n,e,t,i,r){let l=1/0,o=1/0,c=1/0,h=-1/0,m=-1/0,p=-1/0,s=1/0,a=1/0,u=1/0,g=-1/0,_=-1/0,f=-1/0;for(let v=e*6,y=(e+t)*6;v<y;v+=6){const x=n[v+0],w=n[v+1],b=x-w,C=x+w;b<l&&(l=b),C>h&&(h=C),x<s&&(s=x),x>g&&(g=x);const T=n[v+2],S=n[v+3],A=T-S,P=T+S;A<o&&(o=A),P>m&&(m=P),T<a&&(a=T),T>_&&(_=T);const I=n[v+4],M=n[v+5],R=I-M,E=I+M;R<c&&(c=R),E>p&&(p=E),I<u&&(u=I),I>f&&(f=I)}i[0]=l,i[1]=o,i[2]=c,i[3]=h,i[4]=m,i[5]=p,r[0]=s,r[1]=a,r[2]=u,r[3]=g,r[4]=_,r[5]=f}function xa(n,e=null,t=null,i=null){const r=n.attributes.position,l=n.index?n.index.array:null,o=qe(n),c=r.normalized;let h;e===null?(h=new Float32Array(o*6*4),t=0,i=o):(h=e,t=t||0,i=i||o);const m=r.array,p=r.offset||0;let s=3;r.isInterleavedBufferAttribute&&(s=r.data.stride);const a=["getX","getY","getZ"];for(let u=t;u<t+i;u++){const g=u*3,_=u*6;let f=g+0,v=g+1,y=g+2;l&&(f=l[f],v=l[v],y=l[y]),c||(f=f*s+p,v=v*s+p,y=y*s+p);for(let x=0;x<3;x++){let w,b,C;c?(w=r[a[x]](f),b=r[a[x]](v),C=r[a[x]](y)):(w=m[f+x],b=m[v+x],C=m[y+x]);let T=w;b<T&&(T=b),C<T&&(T=C);let S=w;b>S&&(S=b),C>S&&(S=C);const A=(S-T)/2,P=x*2;h[_+P+0]=T+A,h[_+P+1]=A+(Math.abs(T)+A)*ma}}return h}function O(n,e,t){return t.min.x=e[n],t.min.y=e[n+1],t.min.z=e[n+2],t.max.x=e[n+3],t.max.y=e[n+4],t.max.z=e[n+5],t}function Ss(n){let e=-1,t=-1/0;for(let i=0;i<3;i++){const r=n[i+3]-n[i];r>t&&(t=r,e=i)}return e}function Cs(n,e){e.set(n)}function Ms(n,e,t){let i,r;for(let l=0;l<3;l++){const o=l+3;i=n[l],r=e[l],t[l]=i<r?i:r,i=n[o],r=e[o],t[o]=i>r?i:r}}function _t(n,e,t){for(let i=0;i<3;i++){const r=e[n+2*i],l=e[n+2*i+1],o=r-l,c=r+l;o<t[i]&&(t[i]=o),c>t[i+3]&&(t[i+3]=c)}}function Ke(n){const e=n[3]-n[0],t=n[4]-n[1],i=n[5]-n[2];return 2*(e*t+t*i+i*e)}const ne=32,wa=(n,e)=>n.candidate-e.candidate,ce=new Array(ne).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),yt=new Float32Array(6);function ba(n,e,t,i,r,l){let o=-1,c=0;if(l===tr)o=Ss(e),o!==-1&&(c=(e[o]+e[o+3])/2);else if(l===da)o=Ss(n),o!==-1&&(c=Aa(t,i,r,o));else if(l===pa){const h=Ke(n);let m=ei*r;const p=i*6,s=(i+r)*6;for(let a=0;a<3;a++){const u=e[a],f=(e[a+3]-u)/ne;if(r<ne/4){const v=[...ce];v.length=r;let y=0;for(let w=p;w<s;w+=6,y++){const b=v[y];b.candidate=t[w+2*a],b.count=0;const{bounds:C,leftCacheBounds:T,rightCacheBounds:S}=b;for(let A=0;A<3;A++)S[A]=1/0,S[A+3]=-1/0,T[A]=1/0,T[A+3]=-1/0,C[A]=1/0,C[A+3]=-1/0;_t(w,t,C)}v.sort(wa);let x=r;for(let w=0;w<x;w++){const b=v[w];for(;w+1<x&&v[w+1].candidate===b.candidate;)v.splice(w+1,1),x--}for(let w=p;w<s;w+=6){const b=t[w+2*a];for(let C=0;C<x;C++){const T=v[C];b>=T.candidate?_t(w,t,T.rightCacheBounds):(_t(w,t,T.leftCacheBounds),T.count++)}}for(let w=0;w<x;w++){const b=v[w],C=b.count,T=r-b.count,S=b.leftCacheBounds,A=b.rightCacheBounds;let P=0;C!==0&&(P=Ke(S)/h);let I=0;T!==0&&(I=Ke(A)/h);const M=Ts+ei*(P*C+I*T);M<m&&(o=a,m=M,c=b.candidate)}}else{for(let x=0;x<ne;x++){const w=ce[x];w.count=0,w.candidate=u+f+x*f;const b=w.bounds;for(let C=0;C<3;C++)b[C]=1/0,b[C+3]=-1/0}for(let x=p;x<s;x+=6){let C=~~((t[x+2*a]-u)/f);C>=ne&&(C=ne-1);const T=ce[C];T.count++,_t(x,t,T.bounds)}const v=ce[ne-1];Cs(v.bounds,v.rightCacheBounds);for(let x=ne-2;x>=0;x--){const w=ce[x],b=ce[x+1];Ms(w.bounds,b.rightCacheBounds,w.rightCacheBounds)}let y=0;for(let x=0;x<ne-1;x++){const w=ce[x],b=w.count,C=w.bounds,S=ce[x+1].rightCacheBounds;b!==0&&(y===0?Cs(C,yt):Ms(C,yt,yt)),y+=b;let A=0,P=0;y!==0&&(A=Ke(yt)/h);const I=r-y;I!==0&&(P=Ke(S)/h);const M=Ts+ei*(A*y+P*I);M<m&&(o=a,m=M,c=w.candidate)}}}}else console.warn(`MeshBVH: Invalid build strategy value ${l} used.`);return{axis:o,pos:c}}function Aa(n,e,t,i){let r=0;for(let l=e,o=e+t;l<o;l++)r+=n[l*6+i*2];return r/t}class si{constructor(){this.boundingData=new Float32Array(6)}}function Ta(n,e,t,i,r,l){let o=i,c=i+r-1;const h=l.pos,m=l.axis*2;for(;;){for(;o<=c&&t[o*6+m]<h;)o++;for(;o<=c&&t[c*6+m]>=h;)c--;if(o<c){for(let p=0;p<3;p++){let s=e[o*3+p];e[o*3+p]=e[c*3+p],e[c*3+p]=s}for(let p=0;p<6;p++){let s=t[o*6+p];t[o*6+p]=t[c*6+p],t[c*6+p]=s}o++,c--}else return o}}function Sa(n,e,t,i,r,l){let o=i,c=i+r-1;const h=l.pos,m=l.axis*2;for(;;){for(;o<=c&&t[o*6+m]<h;)o++;for(;o<=c&&t[c*6+m]>=h;)c--;if(o<c){let p=n[o];n[o]=n[c],n[c]=p;for(let s=0;s<6;s++){let a=t[o*6+s];t[o*6+s]=t[c*6+s],t[c*6+s]=a}o++,c--}else return o}}function q(n,e){return e[n+15]===65535}function Q(n,e){return e[n+6]}function Z(n,e){return e[n+14]}function X(n){return n+8}function J(n,e){return e[n+6]}function rr(n,e){return e[n+7]}let nr,ot,Lt,or;const Ca=Math.pow(2,32);function _i(n){return"count"in n?1:1+_i(n.left)+_i(n.right)}function Ma(n,e,t){return nr=new Float32Array(t),ot=new Uint32Array(t),Lt=new Uint16Array(t),or=new Uint8Array(t),yi(n,e)}function yi(n,e){const t=n/4,i=n/2,r="count"in e,l=e.boundingData;for(let o=0;o<6;o++)nr[t+o]=l[o];if(r)if(e.buffer){const o=e.buffer;or.set(new Uint8Array(o),n);for(let c=n,h=n+o.byteLength;c<h;c+=ct){const m=c/2;q(m,Lt)||(ot[c/4+6]+=t)}return n+o.byteLength}else{const o=e.offset,c=e.count;return ot[t+6]=o,Lt[i+14]=c,Lt[i+15]=Wt,n+ct}else{const o=e.left,c=e.right,h=e.splitAxis;let m;if(m=yi(n+ct,o),m/4>Ca)throw new Error("MeshBVH: Cannot store child pointer greater than 32 bits.");return ot[t+6]=m/4,m=yi(m,c),ot[t+7]=h,m}}function Pa(n,e){const t=(n.index?n.index.count:n.attributes.position.count)/3,i=t>2**16,r=i?4:2,l=e?new SharedArrayBuffer(t*r):new ArrayBuffer(t*r),o=i?new Uint32Array(l):new Uint16Array(l);for(let c=0,h=o.length;c<h;c++)o[c]=c;return o}function Ra(n,e,t,i,r){const{maxDepth:l,verbose:o,maxLeafTris:c,strategy:h,onProgress:m,indirect:p}=r,s=n._indirectBuffer,a=n.geometry,u=a.index?a.index.array:null,g=p?Sa:Ta,_=qe(a),f=new Float32Array(6);let v=!1;const y=new si;return ii(e,t,i,y.boundingData,f),w(y,t,i,f),y;function x(b){m&&m(b/_)}function w(b,C,T,S=null,A=0){if(!v&&A>=l&&(v=!0,o&&(console.warn(`MeshBVH: Max depth of ${l} reached when generating BVH. Consider increasing maxDepth.`),console.warn(a))),T<=c||A>=l)return x(C+T),b.offset=C,b.count=T,b;const P=ba(b.boundingData,S,e,C,T,h);if(P.axis===-1)return x(C+T),b.offset=C,b.count=T,b;const I=g(s,u,e,C,T,P);if(I===C||I===C+T)x(C+T),b.offset=C,b.count=T;else{b.splitAxis=P.axis;const M=new si,R=C,E=I-C;b.left=M,ii(e,R,E,M.boundingData,f),w(M,R,E,f,A+1);const F=new si,D=I,L=T-E;b.right=F,ii(e,D,L,F.boundingData,f),w(F,D,L,f,A+1)}return b}}function Ia(n,e){const t=n.geometry;e.indirect&&(n._indirectBuffer=Pa(t,e.useSharedArrayBuffer),ya(t)&&!e.verbose&&console.warn('MeshBVH: Provided geometry contains groups that do not fully span the vertex contents while using the "indirect" option. BVH may incorrectly report intersections on unrendered portions of the geometry.')),n._indirectBuffer||_a(t,e);const i=e.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,r=xa(t),l=e.indirect?ir(t):sr(t);n._roots=l.map(o=>{const c=Ra(n,r,o.offset,o.count,e),h=_i(c),m=new i(ct*h);return Ma(0,c,m),m})}class ae{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(e,t){let i=1/0,r=-1/0;for(let l=0,o=e.length;l<o;l++){const h=e[l][t];i=h<i?h:i,r=h>r?h:r}this.min=i,this.max=r}setFromPoints(e,t){let i=1/0,r=-1/0;for(let l=0,o=t.length;l<o;l++){const c=t[l],h=e.dot(c);i=h<i?h:i,r=h>r?h:r}this.min=i,this.max=r}isSeparated(e){return this.min>e.max||e.min>this.max}}ae.prototype.setFromBox=function(){const n=new d.Vector3;return function(t,i){const r=i.min,l=i.max;let o=1/0,c=-1/0;for(let h=0;h<=1;h++)for(let m=0;m<=1;m++)for(let p=0;p<=1;p++){n.x=r.x*h+l.x*(1-h),n.y=r.y*m+l.y*(1-m),n.z=r.z*p+l.z*(1-p);const s=t.dot(n);o=Math.min(s,o),c=Math.max(s,c)}this.min=o,this.max=c}}();const Ea=function(){const n=new d.Vector3,e=new d.Vector3,t=new d.Vector3;return function(r,l,o){const c=r.start,h=n,m=l.start,p=e;t.subVectors(c,m),n.subVectors(r.end,r.start),e.subVectors(l.end,l.start);const s=t.dot(p),a=p.dot(h),u=p.dot(p),g=t.dot(h),f=h.dot(h)*u-a*a;let v,y;f!==0?v=(s*a-g*u)/f:v=0,y=(s+v*a)/u,o.x=v,o.y=y}}(),zi=function(){const n=new d.Vector2,e=new d.Vector3,t=new d.Vector3;return function(r,l,o,c){Ea(r,l,n);let h=n.x,m=n.y;if(h>=0&&h<=1&&m>=0&&m<=1){r.at(h,o),l.at(m,c);return}else if(h>=0&&h<=1){m<0?l.at(0,c):l.at(1,c),r.closestPointToPoint(c,!0,o);return}else if(m>=0&&m<=1){h<0?r.at(0,o):r.at(1,o),l.closestPointToPoint(o,!0,c);return}else{let p;h<0?p=r.start:p=r.end;let s;m<0?s=l.start:s=l.end;const a=e,u=t;if(r.closestPointToPoint(s,!0,e),l.closestPointToPoint(p,!0,t),a.distanceToSquared(s)<=u.distanceToSquared(p)){o.copy(a),c.copy(s);return}else{o.copy(p),c.copy(u);return}}}}(),Fa=function(){const n=new d.Vector3,e=new d.Vector3,t=new d.Plane,i=new d.Line3;return function(l,o){const{radius:c,center:h}=l,{a:m,b:p,c:s}=o;if(i.start=m,i.end=p,i.closestPointToPoint(h,!0,n).distanceTo(h)<=c||(i.start=m,i.end=s,i.closestPointToPoint(h,!0,n).distanceTo(h)<=c)||(i.start=p,i.end=s,i.closestPointToPoint(h,!0,n).distanceTo(h)<=c))return!0;const _=o.getPlane(t);if(Math.abs(_.distanceToPoint(h))<=c){const v=_.projectPoint(h,e);if(o.containsPoint(v))return!0}return!1}}(),Da=1e-15;function ri(n){return Math.abs(n)<Da}class te extends d.Triangle{constructor(...e){super(...e),this.isExtendedTriangle=!0,this.satAxes=new Array(4).fill().map(()=>new d.Vector3),this.satBounds=new Array(4).fill().map(()=>new ae),this.points=[this.a,this.b,this.c],this.sphere=new d.Sphere,this.plane=new d.Plane,this.needsUpdate=!0}intersectsSphere(e){return Fa(e,this)}update(){const e=this.a,t=this.b,i=this.c,r=this.points,l=this.satAxes,o=this.satBounds,c=l[0],h=o[0];this.getNormal(c),h.setFromPoints(c,r);const m=l[1],p=o[1];m.subVectors(e,t),p.setFromPoints(m,r);const s=l[2],a=o[2];s.subVectors(t,i),a.setFromPoints(s,r);const u=l[3],g=o[3];u.subVectors(i,e),g.setFromPoints(u,r),this.sphere.setFromPoints(this.points),this.plane.setFromNormalAndCoplanarPoint(c,e),this.needsUpdate=!1}}te.prototype.closestPointToSegment=function(){const n=new d.Vector3,e=new d.Vector3,t=new d.Line3;return function(r,l=null,o=null){const{start:c,end:h}=r,m=this.points;let p,s=1/0;for(let a=0;a<3;a++){const u=(a+1)%3;t.start.copy(m[a]),t.end.copy(m[u]),zi(t,r,n,e),p=n.distanceToSquared(e),p<s&&(s=p,l&&l.copy(n),o&&o.copy(e))}return this.closestPointToPoint(c,n),p=c.distanceToSquared(n),p<s&&(s=p,l&&l.copy(n),o&&o.copy(c)),this.closestPointToPoint(h,n),p=h.distanceToSquared(n),p<s&&(s=p,l&&l.copy(n),o&&o.copy(h)),Math.sqrt(s)}}();te.prototype.intersectsTriangle=function(){const n=new te,e=new Array(3),t=new Array(3),i=new ae,r=new ae,l=new d.Vector3,o=new d.Vector3,c=new d.Vector3,h=new d.Vector3,m=new d.Vector3,p=new d.Line3,s=new d.Line3,a=new d.Line3,u=new d.Vector3;function g(_,f,v){const y=_.points;let x=0,w=-1;for(let b=0;b<3;b++){const{start:C,end:T}=p;C.copy(y[b]),T.copy(y[(b+1)%3]),p.delta(o);const S=ri(f.distanceToPoint(C));if(ri(f.normal.dot(o))&&S){v.copy(p),x=2;break}const A=f.intersectLine(p,u);if(!A&&S&&u.copy(C),(A||S)&&!ri(u.distanceTo(T))){if(x<=1)(x===1?v.start:v.end).copy(u),S&&(w=x);else if(x>=2){(w===1?v.start:v.end).copy(u),x=2;break}if(x++,x===2&&w===-1)break}}return x}return function(f,v=null,y=!1){this.needsUpdate&&this.update(),f.isExtendedTriangle?f.needsUpdate&&f.update():(n.copy(f),n.update(),f=n);const x=this.plane,w=f.plane;if(Math.abs(x.normal.dot(w.normal))>1-1e-10){const b=this.satBounds,C=this.satAxes;t[0]=f.a,t[1]=f.b,t[2]=f.c;for(let A=0;A<4;A++){const P=b[A],I=C[A];if(i.setFromPoints(I,t),P.isSeparated(i))return!1}const T=f.satBounds,S=f.satAxes;e[0]=this.a,e[1]=this.b,e[2]=this.c;for(let A=0;A<4;A++){const P=T[A],I=S[A];if(i.setFromPoints(I,e),P.isSeparated(i))return!1}for(let A=0;A<4;A++){const P=C[A];for(let I=0;I<4;I++){const M=S[I];if(l.crossVectors(P,M),i.setFromPoints(l,e),r.setFromPoints(l,t),i.isSeparated(r))return!1}}return v&&(y||console.warn("ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0."),v.start.set(0,0,0),v.end.set(0,0,0)),!0}else{const b=g(this,w,s);if(b===1&&f.containsPoint(s.end))return v&&(v.start.copy(s.end),v.end.copy(s.end)),!0;if(b!==2)return!1;const C=g(f,x,a);if(C===1&&this.containsPoint(a.end))return v&&(v.start.copy(a.end),v.end.copy(a.end)),!0;if(C!==2)return!1;if(s.delta(c),a.delta(h),c.dot(h)<0){let R=a.start;a.start=a.end,a.end=R}const T=s.start.dot(c),S=s.end.dot(c),A=a.start.dot(c),P=a.end.dot(c),I=S<A,M=T<P;return T!==P&&A!==S&&I===M?!1:(v&&(m.subVectors(s.start,a.start),m.dot(c)>0?v.start.copy(s.start):v.start.copy(a.start),m.subVectors(s.end,a.end),m.dot(c)<0?v.end.copy(s.end):v.end.copy(a.end)),!0)}}}();te.prototype.distanceToPoint=function(){const n=new d.Vector3;return function(t){return this.closestPointToPoint(t,n),t.distanceTo(n)}}();te.prototype.distanceToTriangle=function(){const n=new d.Vector3,e=new d.Vector3,t=["a","b","c"],i=new d.Line3,r=new d.Line3;return function(o,c=null,h=null){const m=c||h?i:null;if(this.intersectsTriangle(o,m))return(c||h)&&(c&&m.getCenter(c),h&&m.getCenter(h)),0;let p=1/0;for(let s=0;s<3;s++){let a;const u=t[s],g=o[u];this.closestPointToPoint(g,n),a=g.distanceToSquared(n),a<p&&(p=a,c&&c.copy(n),h&&h.copy(g));const _=this[u];o.closestPointToPoint(_,n),a=_.distanceToSquared(n),a<p&&(p=a,c&&c.copy(_),h&&h.copy(n))}for(let s=0;s<3;s++){const a=t[s],u=t[(s+1)%3];i.set(this[a],this[u]);for(let g=0;g<3;g++){const _=t[g],f=t[(g+1)%3];r.set(o[_],o[f]),zi(i,r,n,e);const v=n.distanceToSquared(e);v<p&&(p=v,c&&c.copy(n),h&&h.copy(e))}}return Math.sqrt(p)}}();class W{constructor(e,t,i){this.isOrientedBox=!0,this.min=new d.Vector3,this.max=new d.Vector3,this.matrix=new d.Matrix4,this.invMatrix=new d.Matrix4,this.points=new Array(8).fill().map(()=>new d.Vector3),this.satAxes=new Array(3).fill().map(()=>new d.Vector3),this.satBounds=new Array(3).fill().map(()=>new ae),this.alignedSatBounds=new Array(3).fill().map(()=>new ae),this.needsUpdate=!1,e&&this.min.copy(e),t&&this.max.copy(t),i&&this.matrix.copy(i)}set(e,t,i){this.min.copy(e),this.max.copy(t),this.matrix.copy(i),this.needsUpdate=!0}copy(e){this.min.copy(e.min),this.max.copy(e.max),this.matrix.copy(e.matrix),this.needsUpdate=!0}}W.prototype.update=function(){return function(){const e=this.matrix,t=this.min,i=this.max,r=this.points;for(let m=0;m<=1;m++)for(let p=0;p<=1;p++)for(let s=0;s<=1;s++){const a=1*m|2*p|4*s,u=r[a];u.x=m?i.x:t.x,u.y=p?i.y:t.y,u.z=s?i.z:t.z,u.applyMatrix4(e)}const l=this.satBounds,o=this.satAxes,c=r[0];for(let m=0;m<3;m++){const p=o[m],s=l[m],a=1<<m,u=r[a];p.subVectors(c,u),s.setFromPoints(p,r)}const h=this.alignedSatBounds;h[0].setFromPointsField(r,"x"),h[1].setFromPointsField(r,"y"),h[2].setFromPointsField(r,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1}}();W.prototype.intersectsBox=function(){const n=new ae;return function(t){this.needsUpdate&&this.update();const i=t.min,r=t.max,l=this.satBounds,o=this.satAxes,c=this.alignedSatBounds;if(n.min=i.x,n.max=r.x,c[0].isSeparated(n)||(n.min=i.y,n.max=r.y,c[1].isSeparated(n))||(n.min=i.z,n.max=r.z,c[2].isSeparated(n)))return!1;for(let h=0;h<3;h++){const m=o[h],p=l[h];if(n.setFromBox(m,t),p.isSeparated(n))return!1}return!0}}();W.prototype.intersectsTriangle=function(){const n=new te,e=new Array(3),t=new ae,i=new ae,r=new d.Vector3;return function(o){this.needsUpdate&&this.update(),o.isExtendedTriangle?o.needsUpdate&&o.update():(n.copy(o),n.update(),o=n);const c=this.satBounds,h=this.satAxes;e[0]=o.a,e[1]=o.b,e[2]=o.c;for(let a=0;a<3;a++){const u=c[a],g=h[a];if(t.setFromPoints(g,e),u.isSeparated(t))return!1}const m=o.satBounds,p=o.satAxes,s=this.points;for(let a=0;a<3;a++){const u=m[a],g=p[a];if(t.setFromPoints(g,s),u.isSeparated(t))return!1}for(let a=0;a<3;a++){const u=h[a];for(let g=0;g<4;g++){const _=p[g];if(r.crossVectors(u,_),t.setFromPoints(r,e),i.setFromPoints(r,s),t.isSeparated(i))return!1}}return!0}}();W.prototype.closestPointToPoint=function(){return function(e,t){return this.needsUpdate&&this.update(),t.copy(e).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),t}}();W.prototype.distanceToPoint=function(){const n=new d.Vector3;return function(t){return this.closestPointToPoint(t,n),t.distanceTo(n)}}();W.prototype.distanceToBox=function(){const n=["x","y","z"],e=new Array(12).fill().map(()=>new d.Line3),t=new Array(12).fill().map(()=>new d.Line3),i=new d.Vector3,r=new d.Vector3;return function(o,c=0,h=null,m=null){if(this.needsUpdate&&this.update(),this.intersectsBox(o))return(h||m)&&(o.getCenter(r),this.closestPointToPoint(r,i),o.closestPointToPoint(i,r),h&&h.copy(i),m&&m.copy(r)),0;const p=c*c,s=o.min,a=o.max,u=this.points;let g=1/0;for(let f=0;f<8;f++){const v=u[f];r.copy(v).clamp(s,a);const y=v.distanceToSquared(r);if(y<g&&(g=y,h&&h.copy(v),m&&m.copy(r),y<p))return Math.sqrt(y)}let _=0;for(let f=0;f<3;f++)for(let v=0;v<=1;v++)for(let y=0;y<=1;y++){const x=(f+1)%3,w=(f+2)%3,b=v<<x|y<<w,C=1<<f|v<<x|y<<w,T=u[b],S=u[C];e[_].set(T,S);const P=n[f],I=n[x],M=n[w],R=t[_],E=R.start,F=R.end;E[P]=s[P],E[I]=v?s[I]:a[I],E[M]=y?s[M]:a[I],F[P]=a[P],F[I]=v?s[I]:a[I],F[M]=y?s[M]:a[I],_++}for(let f=0;f<=1;f++)for(let v=0;v<=1;v++)for(let y=0;y<=1;y++){r.x=f?a.x:s.x,r.y=v?a.y:s.y,r.z=y?a.z:s.z,this.closestPointToPoint(r,i);const x=r.distanceToSquared(i);if(x<g&&(g=x,h&&h.copy(i),m&&m.copy(r),x<p))return Math.sqrt(x)}for(let f=0;f<12;f++){const v=e[f];for(let y=0;y<12;y++){const x=t[y];zi(v,x,i,r);const w=i.distanceToSquared(r);if(w<g&&(g=w,h&&h.copy(i),m&&m.copy(r),w<p))return Math.sqrt(w)}}return Math.sqrt(g)}}();class Vi{constructor(e){this._getNewPrimitive=e,this._primitives=[]}getPrimitive(){const e=this._primitives;return e.length===0?this._getNewPrimitive():e.pop()}releasePrimitive(e){this._primitives.push(e)}}class Ba extends Vi{constructor(){super(()=>new te)}}const K=new Ba;class La{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;const e=[];let t=null;this.setBuffer=i=>{t&&e.push(t),t=i,this.float32Array=new Float32Array(i),this.uint16Array=new Uint16Array(i),this.uint32Array=new Uint32Array(i)},this.clearBuffer=()=>{t=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,e.length!==0&&this.setBuffer(e.pop())}}}const k=new La;let fe,He;const Pe=[],xt=new Vi(()=>new d.Box3);function ka(n,e,t,i,r,l){fe=xt.getPrimitive(),He=xt.getPrimitive(),Pe.push(fe,He),k.setBuffer(n._roots[e]);const o=xi(0,n.geometry,t,i,r,l);k.clearBuffer(),xt.releasePrimitive(fe),xt.releasePrimitive(He),Pe.pop(),Pe.pop();const c=Pe.length;return c>0&&(He=Pe[c-1],fe=Pe[c-2]),o}function xi(n,e,t,i,r=null,l=0,o=0){const{float32Array:c,uint16Array:h,uint32Array:m}=k;let p=n*2;if(q(p,h)){const a=Q(n,m),u=Z(p,h);return O(n,c,fe),i(a,u,!1,o,l+n,fe)}else{let P=function(M){const{uint16Array:R,uint32Array:E}=k;let F=M*2;for(;!q(F,R);)M=X(M),F=M*2;return Q(M,E)},I=function(M){const{uint16Array:R,uint32Array:E}=k;let F=M*2;for(;!q(F,R);)M=J(M,E),F=M*2;return Q(M,E)+Z(F,R)};const a=X(n),u=J(n,m);let g=a,_=u,f,v,y,x;if(r&&(y=fe,x=He,O(g,c,y),O(_,c,x),f=r(y),v=r(x),v<f)){g=u,_=a;const M=f;f=v,v=M,y=x}y||(y=fe,O(g,c,y));const w=q(g*2,h),b=t(y,w,f,o+1,l+g);let C;if(b===As){const M=P(g),E=I(g)-M;C=i(M,E,!0,o+1,l+g,y)}else C=b&&xi(g,e,t,i,r,l,o+1);if(C)return!0;x=He,O(_,c,x);const T=q(_*2,h),S=t(x,T,v,o+1,l+_);let A;if(S===As){const M=P(_),E=I(_)-M;A=i(M,E,!0,o+1,l+_,x)}else A=S&&xi(_,e,t,i,r,l,o+1);return!!A}}const $e=new d.Vector3,ni=new d.Vector3;function Oa(n,e,t={},i=0,r=1/0){const l=i*i,o=r*r;let c=1/0,h=null;if(n.shapecast({boundsTraverseOrder:p=>($e.copy(e).clamp(p.min,p.max),$e.distanceToSquared(e)),intersectsBounds:(p,s,a)=>a<c&&a<o,intersectsTriangle:(p,s)=>{p.closestPointToPoint(e,$e);const a=e.distanceToSquared($e);return a<c&&(ni.copy($e),c=a,h=s),a<l}}),c===1/0)return null;const m=Math.sqrt(c);return t.point?t.point.copy(ni):t.point=ni.clone(),t.distance=m,t.faceIndex=h,t}const Re=new d.Vector3,Ie=new d.Vector3,Ee=new d.Vector3,wt=new d.Vector2,bt=new d.Vector2,At=new d.Vector2,Ps=new d.Vector3,Rs=new d.Vector3,Is=new d.Vector3,Tt=new d.Vector3;function za(n,e,t,i,r,l,o,c){let h;if(l===d.BackSide?h=n.intersectTriangle(i,t,e,!0,r):h=n.intersectTriangle(e,t,i,l!==d.DoubleSide,r),h===null)return null;const m=n.origin.distanceTo(r);return m<o||m>c?null:{distance:m,point:r.clone()}}function Va(n,e,t,i,r,l,o,c,h,m,p){Re.fromBufferAttribute(e,l),Ie.fromBufferAttribute(e,o),Ee.fromBufferAttribute(e,c);const s=za(n,Re,Ie,Ee,Tt,h,m,p);if(s){i&&(wt.fromBufferAttribute(i,l),bt.fromBufferAttribute(i,o),At.fromBufferAttribute(i,c),s.uv=d.Triangle.getInterpolation(Tt,Re,Ie,Ee,wt,bt,At,new d.Vector2)),r&&(wt.fromBufferAttribute(r,l),bt.fromBufferAttribute(r,o),At.fromBufferAttribute(r,c),s.uv1=d.Triangle.getInterpolation(Tt,Re,Ie,Ee,wt,bt,At,new d.Vector2)),t&&(Ps.fromBufferAttribute(t,l),Rs.fromBufferAttribute(t,o),Is.fromBufferAttribute(t,c),s.normal=d.Triangle.getInterpolation(Tt,Re,Ie,Ee,Ps,Rs,Is,new d.Vector3),s.normal.dot(n.direction)>0&&s.normal.multiplyScalar(-1));const a={a:l,b:o,c,normal:new d.Vector3,materialIndex:0};d.Triangle.getNormal(Re,Ie,Ee,a.normal),s.face=a,s.faceIndex=l}return s}function Gt(n,e,t,i,r,l,o){const c=i*3;let h=c+0,m=c+1,p=c+2;const s=n.index;n.index&&(h=s.getX(h),m=s.getX(m),p=s.getX(p));const{position:a,normal:u,uv:g,uv1:_}=n.attributes,f=Va(t,a,u,g,_,h,m,p,e,l,o);return f?(f.faceIndex=i,r&&r.push(f),f):null}function U(n,e,t,i){const r=n.a,l=n.b,o=n.c;let c=e,h=e+1,m=e+2;t&&(c=t.getX(c),h=t.getX(h),m=t.getX(m)),r.x=i.getX(c),r.y=i.getY(c),r.z=i.getZ(c),l.x=i.getX(h),l.y=i.getY(h),l.z=i.getZ(h),o.x=i.getX(m),o.y=i.getY(m),o.z=i.getZ(m)}function Ua(n,e,t,i,r,l,o,c){const{geometry:h,_indirectBuffer:m}=n;for(let p=i,s=i+r;p<s;p++)Gt(h,e,t,p,l,o,c)}function Ha(n,e,t,i,r,l,o){const{geometry:c,_indirectBuffer:h}=n;let m=1/0,p=null;for(let s=i,a=i+r;s<a;s++){let u;u=Gt(c,e,t,s,null,l,o),u&&u.distance<m&&(p=u,m=u.distance)}return p}function Na(n,e,t,i,r,l,o){const{geometry:c}=t,{index:h}=c,m=c.attributes.position;for(let p=n,s=e+n;p<s;p++){let a;if(a=p,U(o,a*3,h,m),o.needsUpdate=!0,i(o,a,r,l))return!0}return!1}function Wa(n,e=null){e&&Array.isArray(e)&&(e=new Set(e));const t=n.geometry,i=t.index?t.index.array:null,r=t.attributes.position;let l,o,c,h,m=0;const p=n._roots;for(let a=0,u=p.length;a<u;a++)l=p[a],o=new Uint32Array(l),c=new Uint16Array(l),h=new Float32Array(l),s(0,m),m+=l.byteLength;function s(a,u,g=!1){const _=a*2;if(c[_+15]===Wt){const v=o[a+6],y=c[_+14];let x=1/0,w=1/0,b=1/0,C=-1/0,T=-1/0,S=-1/0;for(let A=3*v,P=3*(v+y);A<P;A++){let I=i[A];const M=r.getX(I),R=r.getY(I),E=r.getZ(I);M<x&&(x=M),M>C&&(C=M),R<w&&(w=R),R>T&&(T=R),E<b&&(b=E),E>S&&(S=E)}return h[a+0]!==x||h[a+1]!==w||h[a+2]!==b||h[a+3]!==C||h[a+4]!==T||h[a+5]!==S?(h[a+0]=x,h[a+1]=w,h[a+2]=b,h[a+3]=C,h[a+4]=T,h[a+5]=S,!0):!1}else{const v=a+8,y=o[a+6],x=v+u,w=y+u;let b=g,C=!1,T=!1;e?b||(C=e.has(x),T=e.has(w),b=!C&&!T):(C=!0,T=!0);const S=b||C,A=b||T;let P=!1;S&&(P=s(v,u,b));let I=!1;A&&(I=s(y,u,b));const M=P||I;if(M)for(let R=0;R<3;R++){const E=v+R,F=y+R,D=h[E],L=h[E+3],V=h[F],z=h[F+3];h[a+R]=D<V?D:V,h[a+R+3]=L>z?L:z}return M}}}function pe(n,e,t,i,r){let l,o,c,h,m,p;const s=1/t.direction.x,a=1/t.direction.y,u=1/t.direction.z,g=t.origin.x,_=t.origin.y,f=t.origin.z;let v=e[n],y=e[n+3],x=e[n+1],w=e[n+3+1],b=e[n+2],C=e[n+3+2];return s>=0?(l=(v-g)*s,o=(y-g)*s):(l=(y-g)*s,o=(v-g)*s),a>=0?(c=(x-_)*a,h=(w-_)*a):(c=(w-_)*a,h=(x-_)*a),l>h||c>o||((c>l||isNaN(l))&&(l=c),(h<o||isNaN(o))&&(o=h),u>=0?(m=(b-f)*u,p=(C-f)*u):(m=(C-f)*u,p=(b-f)*u),l>p||m>o)?!1:((m>l||l!==l)&&(l=m),(p<o||o!==o)&&(o=p),l<=r&&o>=i)}function Ga(n,e,t,i,r,l,o,c){const{geometry:h,_indirectBuffer:m}=n;for(let p=i,s=i+r;p<s;p++){let a=m?m[p]:p;Gt(h,e,t,a,l,o,c)}}function ja(n,e,t,i,r,l,o){const{geometry:c,_indirectBuffer:h}=n;let m=1/0,p=null;for(let s=i,a=i+r;s<a;s++){let u;u=Gt(c,e,t,h?h[s]:s,null,l,o),u&&u.distance<m&&(p=u,m=u.distance)}return p}function qa(n,e,t,i,r,l,o){const{geometry:c}=t,{index:h}=c,m=c.attributes.position;for(let p=n,s=e+n;p<s;p++){let a;if(a=t.resolveTriangleIndex(p),U(o,a*3,h,m),o.needsUpdate=!0,i(o,a,r,l))return!0}return!1}function Ya(n,e,t,i,r,l,o){k.setBuffer(n._roots[e]),wi(0,n,t,i,r,l,o),k.clearBuffer()}function wi(n,e,t,i,r,l,o){const{float32Array:c,uint16Array:h,uint32Array:m}=k,p=n*2;if(q(p,h)){const a=Q(n,m),u=Z(p,h);Ua(e,t,i,a,u,r,l,o)}else{const a=X(n);pe(a,c,i,l,o)&&wi(a,e,t,i,r,l,o);const u=J(n,m);pe(u,c,i,l,o)&&wi(u,e,t,i,r,l,o)}}const Qa=["x","y","z"];function Za(n,e,t,i,r,l){k.setBuffer(n._roots[e]);const o=bi(0,n,t,i,r,l);return k.clearBuffer(),o}function bi(n,e,t,i,r,l){const{float32Array:o,uint16Array:c,uint32Array:h}=k;let m=n*2;if(q(m,c)){const s=Q(n,h),a=Z(m,c);return Ha(e,t,i,s,a,r,l)}else{const s=rr(n,h),a=Qa[s],g=i.direction[a]>=0;let _,f;g?(_=X(n),f=J(n,h)):(_=J(n,h),f=X(n));const y=pe(_,o,i,r,l)?bi(_,e,t,i,r,l):null;if(y){const b=y.point[a];if(g?b<=o[f+s]:b>=o[f+s+3])return y}const w=pe(f,o,i,r,l)?bi(f,e,t,i,r,l):null;return y&&w?y.distance<=w.distance?y:w:y||w||null}}const St=new d.Box3,Fe=new te,De=new te,et=new d.Matrix4,Es=new W,Ct=new W;function Xa(n,e,t,i){k.setBuffer(n._roots[e]);const r=Ai(0,n,t,i);return k.clearBuffer(),r}function Ai(n,e,t,i,r=null){const{float32Array:l,uint16Array:o,uint32Array:c}=k;let h=n*2;if(r===null&&(t.boundingBox||t.computeBoundingBox(),Es.set(t.boundingBox.min,t.boundingBox.max,i),r=Es),q(h,o)){const p=e.geometry,s=p.index,a=p.attributes.position,u=t.index,g=t.attributes.position,_=Q(n,c),f=Z(h,o);if(et.copy(i).invert(),t.boundsTree)return O(n,l,Ct),Ct.matrix.copy(et),Ct.needsUpdate=!0,t.boundsTree.shapecast({intersectsBounds:y=>Ct.intersectsBox(y),intersectsTriangle:y=>{y.a.applyMatrix4(i),y.b.applyMatrix4(i),y.c.applyMatrix4(i),y.needsUpdate=!0;for(let x=_*3,w=(f+_)*3;x<w;x+=3)if(U(De,x,s,a),De.needsUpdate=!0,y.intersectsTriangle(De))return!0;return!1}});for(let v=_*3,y=(f+_)*3;v<y;v+=3){U(Fe,v,s,a),Fe.a.applyMatrix4(et),Fe.b.applyMatrix4(et),Fe.c.applyMatrix4(et),Fe.needsUpdate=!0;for(let x=0,w=u.count;x<w;x+=3)if(U(De,x,u,g),De.needsUpdate=!0,Fe.intersectsTriangle(De))return!0}}else{const p=n+8,s=c[n+6];return O(p,l,St),!!(r.intersectsBox(St)&&Ai(p,e,t,i,r)||(O(s,l,St),r.intersectsBox(St)&&Ai(s,e,t,i,r)))}}const Mt=new d.Matrix4,oi=new W,it=new W,Ja=new d.Vector3,Ka=new d.Vector3,$a=new d.Vector3,el=new d.Vector3;function tl(n,e,t,i={},r={},l=0,o=1/0){e.boundingBox||e.computeBoundingBox(),oi.set(e.boundingBox.min,e.boundingBox.max,t),oi.needsUpdate=!0;const c=n.geometry,h=c.attributes.position,m=c.index,p=e.attributes.position,s=e.index,a=K.getPrimitive(),u=K.getPrimitive();let g=Ja,_=Ka,f=null,v=null;r&&(f=$a,v=el);let y=1/0,x=null,w=null;return Mt.copy(t).invert(),it.matrix.copy(Mt),n.shapecast({boundsTraverseOrder:b=>oi.distanceToBox(b),intersectsBounds:(b,C,T)=>T<y&&T<o?(C&&(it.min.copy(b.min),it.max.copy(b.max),it.needsUpdate=!0),!0):!1,intersectsRange:(b,C)=>{if(e.boundsTree)return e.boundsTree.shapecast({boundsTraverseOrder:S=>it.distanceToBox(S),intersectsBounds:(S,A,P)=>P<y&&P<o,intersectsRange:(S,A)=>{for(let P=S,I=S+A;P<I;P++){U(u,3*P,s,p),u.a.applyMatrix4(t),u.b.applyMatrix4(t),u.c.applyMatrix4(t),u.needsUpdate=!0;for(let M=b,R=b+C;M<R;M++){U(a,3*M,m,h),a.needsUpdate=!0;const E=a.distanceToTriangle(u,g,f);if(E<y&&(_.copy(g),v&&v.copy(f),y=E,x=M,w=P),E<l)return!0}}}});{const T=qe(e);for(let S=0,A=T;S<A;S++){U(u,3*S,s,p),u.a.applyMatrix4(t),u.b.applyMatrix4(t),u.c.applyMatrix4(t),u.needsUpdate=!0;for(let P=b,I=b+C;P<I;P++){U(a,3*P,m,h),a.needsUpdate=!0;const M=a.distanceToTriangle(u,g,f);if(M<y&&(_.copy(g),v&&v.copy(f),y=M,x=P,w=S),M<l)return!0}}}}}),K.releasePrimitive(a),K.releasePrimitive(u),y===1/0?null:(i.point?i.point.copy(_):i.point=_.clone(),i.distance=y,i.faceIndex=x,r&&(r.point?r.point.copy(v):r.point=v.clone(),r.point.applyMatrix4(Mt),_.applyMatrix4(Mt),r.distance=_.sub(r.point).length(),r.faceIndex=w),i)}function il(n,e=null){e&&Array.isArray(e)&&(e=new Set(e));const t=n.geometry,i=t.index?t.index.array:null,r=t.attributes.position;let l,o,c,h,m=0;const p=n._roots;for(let a=0,u=p.length;a<u;a++)l=p[a],o=new Uint32Array(l),c=new Uint16Array(l),h=new Float32Array(l),s(0,m),m+=l.byteLength;function s(a,u,g=!1){const _=a*2;if(c[_+15]===Wt){const v=o[a+6],y=c[_+14];let x=1/0,w=1/0,b=1/0,C=-1/0,T=-1/0,S=-1/0;for(let A=v,P=v+y;A<P;A++){const I=3*n.resolveTriangleIndex(A);for(let M=0;M<3;M++){let R=I+M;R=i?i[R]:R;const E=r.getX(R),F=r.getY(R),D=r.getZ(R);E<x&&(x=E),E>C&&(C=E),F<w&&(w=F),F>T&&(T=F),D<b&&(b=D),D>S&&(S=D)}}return h[a+0]!==x||h[a+1]!==w||h[a+2]!==b||h[a+3]!==C||h[a+4]!==T||h[a+5]!==S?(h[a+0]=x,h[a+1]=w,h[a+2]=b,h[a+3]=C,h[a+4]=T,h[a+5]=S,!0):!1}else{const v=a+8,y=o[a+6],x=v+u,w=y+u;let b=g,C=!1,T=!1;e?b||(C=e.has(x),T=e.has(w),b=!C&&!T):(C=!0,T=!0);const S=b||C,A=b||T;let P=!1;S&&(P=s(v,u,b));let I=!1;A&&(I=s(y,u,b));const M=P||I;if(M)for(let R=0;R<3;R++){const E=v+R,F=y+R,D=h[E],L=h[E+3],V=h[F],z=h[F+3];h[a+R]=D<V?D:V,h[a+R+3]=L>z?L:z}return M}}}function sl(n,e,t,i,r,l,o){k.setBuffer(n._roots[e]),Ti(0,n,t,i,r,l,o),k.clearBuffer()}function Ti(n,e,t,i,r,l,o){const{float32Array:c,uint16Array:h,uint32Array:m}=k,p=n*2;if(q(p,h)){const a=Q(n,m),u=Z(p,h);Ga(e,t,i,a,u,r,l,o)}else{const a=X(n);pe(a,c,i,l,o)&&Ti(a,e,t,i,r,l,o);const u=J(n,m);pe(u,c,i,l,o)&&Ti(u,e,t,i,r,l,o)}}const rl=["x","y","z"];function nl(n,e,t,i,r,l){k.setBuffer(n._roots[e]);const o=Si(0,n,t,i,r,l);return k.clearBuffer(),o}function Si(n,e,t,i,r,l){const{float32Array:o,uint16Array:c,uint32Array:h}=k;let m=n*2;if(q(m,c)){const s=Q(n,h),a=Z(m,c);return ja(e,t,i,s,a,r,l)}else{const s=rr(n,h),a=rl[s],g=i.direction[a]>=0;let _,f;g?(_=X(n),f=J(n,h)):(_=J(n,h),f=X(n));const y=pe(_,o,i,r,l)?Si(_,e,t,i,r,l):null;if(y){const b=y.point[a];if(g?b<=o[f+s]:b>=o[f+s+3])return y}const w=pe(f,o,i,r,l)?Si(f,e,t,i,r,l):null;return y&&w?y.distance<=w.distance?y:w:y||w||null}}const Pt=new d.Box3,Be=new te,Le=new te,st=new d.Matrix4,Fs=new W,Rt=new W;function ol(n,e,t,i){k.setBuffer(n._roots[e]);const r=Ci(0,n,t,i);return k.clearBuffer(),r}function Ci(n,e,t,i,r=null){const{float32Array:l,uint16Array:o,uint32Array:c}=k;let h=n*2;if(r===null&&(t.boundingBox||t.computeBoundingBox(),Fs.set(t.boundingBox.min,t.boundingBox.max,i),r=Fs),q(h,o)){const p=e.geometry,s=p.index,a=p.attributes.position,u=t.index,g=t.attributes.position,_=Q(n,c),f=Z(h,o);if(st.copy(i).invert(),t.boundsTree)return O(n,l,Rt),Rt.matrix.copy(st),Rt.needsUpdate=!0,t.boundsTree.shapecast({intersectsBounds:y=>Rt.intersectsBox(y),intersectsTriangle:y=>{y.a.applyMatrix4(i),y.b.applyMatrix4(i),y.c.applyMatrix4(i),y.needsUpdate=!0;for(let x=_,w=f+_;x<w;x++)if(U(Le,3*e.resolveTriangleIndex(x),s,a),Le.needsUpdate=!0,y.intersectsTriangle(Le))return!0;return!1}});for(let v=_,y=f+_;v<y;v++){const x=e.resolveTriangleIndex(v);U(Be,3*x,s,a),Be.a.applyMatrix4(st),Be.b.applyMatrix4(st),Be.c.applyMatrix4(st),Be.needsUpdate=!0;for(let w=0,b=u.count;w<b;w+=3)if(U(Le,w,u,g),Le.needsUpdate=!0,Be.intersectsTriangle(Le))return!0}}else{const p=n+8,s=c[n+6];return O(p,l,Pt),!!(r.intersectsBox(Pt)&&Ci(p,e,t,i,r)||(O(s,l,Pt),r.intersectsBox(Pt)&&Ci(s,e,t,i,r)))}}const It=new d.Matrix4,ai=new W,rt=new W,al=new d.Vector3,ll=new d.Vector3,cl=new d.Vector3,hl=new d.Vector3;function ul(n,e,t,i={},r={},l=0,o=1/0){e.boundingBox||e.computeBoundingBox(),ai.set(e.boundingBox.min,e.boundingBox.max,t),ai.needsUpdate=!0;const c=n.geometry,h=c.attributes.position,m=c.index,p=e.attributes.position,s=e.index,a=K.getPrimitive(),u=K.getPrimitive();let g=al,_=ll,f=null,v=null;r&&(f=cl,v=hl);let y=1/0,x=null,w=null;return It.copy(t).invert(),rt.matrix.copy(It),n.shapecast({boundsTraverseOrder:b=>ai.distanceToBox(b),intersectsBounds:(b,C,T)=>T<y&&T<o?(C&&(rt.min.copy(b.min),rt.max.copy(b.max),rt.needsUpdate=!0),!0):!1,intersectsRange:(b,C)=>{if(e.boundsTree){const T=e.boundsTree;return T.shapecast({boundsTraverseOrder:S=>rt.distanceToBox(S),intersectsBounds:(S,A,P)=>P<y&&P<o,intersectsRange:(S,A)=>{for(let P=S,I=S+A;P<I;P++){const M=T.resolveTriangleIndex(P);U(u,3*M,s,p),u.a.applyMatrix4(t),u.b.applyMatrix4(t),u.c.applyMatrix4(t),u.needsUpdate=!0;for(let R=b,E=b+C;R<E;R++){const F=n.resolveTriangleIndex(R);U(a,3*F,m,h),a.needsUpdate=!0;const D=a.distanceToTriangle(u,g,f);if(D<y&&(_.copy(g),v&&v.copy(f),y=D,x=R,w=P),D<l)return!0}}}})}else{const T=qe(e);for(let S=0,A=T;S<A;S++){U(u,3*S,s,p),u.a.applyMatrix4(t),u.b.applyMatrix4(t),u.c.applyMatrix4(t),u.needsUpdate=!0;for(let P=b,I=b+C;P<I;P++){const M=n.resolveTriangleIndex(P);U(a,3*M,m,h),a.needsUpdate=!0;const R=a.distanceToTriangle(u,g,f);if(R<y&&(_.copy(g),v&&v.copy(f),y=R,x=P,w=S),R<l)return!0}}}}}),K.releasePrimitive(a),K.releasePrimitive(u),y===1/0?null:(i.point?i.point.copy(_):i.point=_.clone(),i.distance=y,i.faceIndex=x,r&&(r.point?r.point.copy(v):r.point=v.clone(),r.point.applyMatrix4(It),_.applyMatrix4(It),r.distance=_.sub(r.point).length(),r.faceIndex=w),i)}function fl(){return typeof SharedArrayBuffer<"u"}const ht=new k.constructor,Ht=new k.constructor,he=new Vi(()=>new d.Box3),ke=new d.Box3,Oe=new d.Box3,li=new d.Box3,ci=new d.Box3;let hi=!1;function dl(n,e,t,i){if(hi)throw new Error("MeshBVH: Recursive calls to bvhcast not supported.");hi=!0;const r=n._roots,l=e._roots;let o,c=0,h=0;const m=new d.Matrix4().copy(t).invert();for(let p=0,s=r.length;p<s;p++){ht.setBuffer(r[p]),h=0;const a=he.getPrimitive();O(0,ht.float32Array,a),a.applyMatrix4(m);for(let u=0,g=l.length;u<g&&(Ht.setBuffer(l[p]),o=ee(0,0,t,m,i,c,h,0,0,a),Ht.clearBuffer(),h+=l[u].length,!o);u++);if(he.releasePrimitive(a),ht.clearBuffer(),c+=r[p].length,o)break}return hi=!1,o}function ee(n,e,t,i,r,l=0,o=0,c=0,h=0,m=null,p=!1){let s,a;p?(s=Ht,a=ht):(s=ht,a=Ht);const u=s.float32Array,g=s.uint32Array,_=s.uint16Array,f=a.float32Array,v=a.uint32Array,y=a.uint16Array,x=n*2,w=e*2,b=q(x,_),C=q(w,y);let T=!1;if(C&&b)p?T=r(Q(e,v),Z(e*2,y),Q(n,g),Z(n*2,_),h,o+e,c,l+n):T=r(Q(n,g),Z(n*2,_),Q(e,v),Z(e*2,y),c,l+n,h,o+e);else if(C){const S=he.getPrimitive();O(e,f,S),S.applyMatrix4(t);const A=X(n),P=J(n,g);O(A,u,ke),O(P,u,Oe);const I=S.intersectsBox(ke),M=S.intersectsBox(Oe);T=I&&ee(e,A,i,t,r,o,l,h,c+1,S,!p)||M&&ee(e,P,i,t,r,o,l,h,c+1,S,!p),he.releasePrimitive(S)}else{const S=X(e),A=J(e,v);O(S,f,li),O(A,f,ci);const P=m.intersectsBox(li),I=m.intersectsBox(ci);if(P&&I)T=ee(n,S,t,i,r,l,o,c,h+1,m,p)||ee(n,A,t,i,r,l,o,c,h+1,m,p);else if(P)if(b)T=ee(n,S,t,i,r,l,o,c,h+1,m,p);else{const M=he.getPrimitive();M.copy(li).applyMatrix4(t);const R=X(n),E=J(n,g);O(R,u,ke),O(E,u,Oe);const F=M.intersectsBox(ke),D=M.intersectsBox(Oe);T=F&&ee(S,R,i,t,r,o,l,h,c+1,M,!p)||D&&ee(S,E,i,t,r,o,l,h,c+1,M,!p),he.releasePrimitive(M)}else if(I)if(b)T=ee(n,A,t,i,r,l,o,c,h+1,m,p);else{const M=he.getPrimitive();M.copy(ci).applyMatrix4(t);const R=X(n),E=J(n,g);O(R,u,ke),O(E,u,Oe);const F=M.intersectsBox(ke),D=M.intersectsBox(Oe);T=F&&ee(A,R,i,t,r,o,l,h,c+1,M,!p)||D&&ee(A,E,i,t,r,o,l,h,c+1,M,!p),he.releasePrimitive(M)}}return T}const Et=new W,Ds=new d.Box3,pl={strategy:tr,maxDepth:40,maxLeafTris:10,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,verbose:!0};class Ui{static serialize(e,t={}){t={cloneBuffers:!0,...t};const i=e.geometry,r=e._roots,l=e._indirectBuffer,o=i.getIndex();let c;return t.cloneBuffers?c={roots:r.map(h=>h.slice()),index:o?o.array.slice():null,indirectBuffer:l?l.slice():null}:c={roots:r,index:o?o.array:null,indirectBuffer:l},c}static deserialize(e,t,i={}){i={setIndex:!0,indirect:!!e.indirectBuffer,...i};const{index:r,roots:l,indirectBuffer:o}=e,c=new Ui(t,{...i,[ti]:!0});if(c._roots=l,c._indirectBuffer=o||null,i.setIndex){const h=t.getIndex();if(h===null){const m=new d.BufferAttribute(e.index,1,!1);t.setIndex(m)}else h.array!==r&&(h.array.set(r),h.needsUpdate=!0)}return c}get indirect(){return!!this._indirectBuffer}constructor(e,t={}){if(e.isBufferGeometry){if(e.index&&e.index.isInterleavedBufferAttribute)throw new Error("MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw new Error("MeshBVH: Only BufferGeometries are supported.");if(t=Object.assign({...pl,[ti]:!1},t),t.useSharedArrayBuffer&&!fl())throw new Error("MeshBVH: SharedArrayBuffer is not available.");this.geometry=e,this._roots=null,this._indirectBuffer=null,t[ti]||(Ia(this,t),!e.boundingBox&&t.setBoundingBox&&(e.boundingBox=this.getBoundingBox(new d.Box3))),this.resolveTriangleIndex=t.indirect?i=>this._indirectBuffer[i]:i=>i}refit(e=null){return(this.indirect?il:Wa)(this,e)}traverse(e,t=0){const i=this._roots[t],r=new Uint32Array(i),l=new Uint16Array(i);o(0);function o(c,h=0){const m=c*2,p=l[m+15]===Wt;if(p){const s=r[c+6],a=l[m+14];e(h,p,new Float32Array(i,c*4,6),s,a)}else{const s=c+ct/4,a=r[c+6],u=r[c+7];e(h,p,new Float32Array(i,c*4,6),u)||(o(s,h+1),o(a,h+1))}}}raycast(e,t=d.FrontSide,i=0,r=1/0){const l=this._roots,o=this.geometry,c=[],h=t.isMaterial,m=Array.isArray(t),p=o.groups,s=h?t.side:t,a=this.indirect?sl:Ya;for(let u=0,g=l.length;u<g;u++){const _=m?t[p[u].materialIndex].side:s,f=c.length;if(a(this,u,_,e,c,i,r),m){const v=p[u].materialIndex;for(let y=f,x=c.length;y<x;y++)c[y].face.materialIndex=v}}return c}raycastFirst(e,t=d.FrontSide,i=0,r=1/0){const l=this._roots,o=this.geometry,c=t.isMaterial,h=Array.isArray(t);let m=null;const p=o.groups,s=c?t.side:t,a=this.indirect?nl:Za;for(let u=0,g=l.length;u<g;u++){const _=h?t[p[u].materialIndex].side:s,f=a(this,u,_,e,i,r);f!=null&&(m==null||f.distance<m.distance)&&(m=f,h&&(f.face.materialIndex=p[u].materialIndex))}return m}intersectsGeometry(e,t){let i=!1;const r=this._roots,l=this.indirect?ol:Xa;for(let o=0,c=r.length;o<c&&(i=l(this,o,e,t),!i);o++);return i}shapecast(e){const t=K.getPrimitive(),i=this.indirect?qa:Na;let{boundsTraverseOrder:r,intersectsBounds:l,intersectsRange:o,intersectsTriangle:c}=e;if(o&&c){const s=o;o=(a,u,g,_,f)=>s(a,u,g,_,f)?!0:i(a,u,this,c,g,_,t)}else o||(c?o=(s,a,u,g)=>i(s,a,this,c,u,g,t):o=(s,a,u)=>u);let h=!1,m=0;const p=this._roots;for(let s=0,a=p.length;s<a;s++){const u=p[s];if(h=ka(this,s,l,o,r,m),h)break;m+=u.byteLength}return K.releasePrimitive(t),h}bvhcast(e,t,i){let{intersectsRanges:r,intersectsTriangles:l}=i;const o=K.getPrimitive(),c=this.geometry.index,h=this.geometry.attributes.position,m=this.indirect?g=>{const _=this.resolveTriangleIndex(g);U(o,_*3,c,h)}:g=>{U(o,g*3,c,h)},p=K.getPrimitive(),s=e.geometry.index,a=e.geometry.attributes.position,u=e.indirect?g=>{const _=e.resolveTriangleIndex(g);U(p,_*3,s,a)}:g=>{U(p,g*3,s,a)};if(l){const g=(_,f,v,y,x,w,b,C)=>{for(let T=v,S=v+y;T<S;T++){u(T),p.a.applyMatrix4(t),p.b.applyMatrix4(t),p.c.applyMatrix4(t),p.needsUpdate=!0;for(let A=_,P=_+f;A<P;A++)if(m(A),o.needsUpdate=!0,l(o,p,A,T,x,w,b,C))return!0}return!1};if(r){const _=r;r=function(f,v,y,x,w,b,C,T){return _(f,v,y,x,w,b,C,T)?!0:g(f,v,y,x,w,b,C,T)}}else r=g}return dl(this,e,t,r)}intersectsBox(e,t){return Et.set(e.min,e.max,t),Et.needsUpdate=!0,this.shapecast({intersectsBounds:i=>Et.intersectsBox(i),intersectsTriangle:i=>Et.intersectsTriangle(i)})}intersectsSphere(e){return this.shapecast({intersectsBounds:t=>e.intersectsBox(t),intersectsTriangle:t=>t.intersectsSphere(e)})}closestPointToGeometry(e,t,i={},r={},l=0,o=1/0){return(this.indirect?ul:tl)(this,e,t,i,r,l,o)}closestPointToPoint(e,t={},i=0,r=1/0){return Oa(this,e,t,i,r)}getBoundingBox(e){return e.makeEmpty(),this._roots.forEach(i=>{O(0,new Float32Array(i),Ds),e.union(Ds)}),e}}class ml{constructor(e){this.name="WorkerBase",this.running=!1,this.worker=e,this.worker.onerror=t=>{throw t.message?new Error(`${this.name}: Could not create Web Worker with error "${t.message}"`):new Error(`${this.name}: Could not create Web Worker.`)}}runTask(){}generate(...e){if(this.running)throw new Error("GenerateMeshBVHWorker: Already running job.");if(this.worker===null)throw new Error("GenerateMeshBVHWorker: Worker has been disposed.");this.running=!0;const t=this.runTask(this.worker,...e);return t.finally(()=>{this.running=!1}),t}dispose(){this.worker.terminate(),this.worker=null}}class gl extends ml{constructor(e){const t=new Worker(e||new URL("data:text/javascript;base64,aW1wb3J0IHsKCUJ1ZmZlckdlb21ldHJ5LAoJQnVmZmVyQXR0cmlidXRlLAp9IGZyb20gJ3RocmVlJzsKaW1wb3J0IHsgTWVzaEJWSCB9IGZyb20gJy4uL2NvcmUvTWVzaEJWSC5qcyc7Cgpvbm1lc3NhZ2UgPSAoIHsgZGF0YSB9ICkgPT4gewoKCWxldCBwcmV2VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpOwoJZnVuY3Rpb24gb25Qcm9ncmVzc0NhbGxiYWNrKCBwcm9ncmVzcyApIHsKCgkJLy8gYWNjb3VudCBmb3IgZXJyb3IKCQlwcm9ncmVzcyA9IE1hdGgubWluKCBwcm9ncmVzcywgMSApOwoKCQljb25zdCBjdXJyVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpOwoJCWlmICggY3VyclRpbWUgLSBwcmV2VGltZSA+PSAxMCAmJiBwcm9ncmVzcyAhPT0gMS4wICkgewoKCQkJcG9zdE1lc3NhZ2UoIHsKCgkJCQllcnJvcjogbnVsbCwKCQkJCXNlcmlhbGl6ZWQ6IG51bGwsCgkJCQlwb3NpdGlvbjogbnVsbCwKCQkJCXByb2dyZXNzLAoKCQkJfSApOwoJCQlwcmV2VGltZSA9IGN1cnJUaW1lOwoKCQl9CgoJfQoKCWNvbnN0IHsgaW5kZXgsIHBvc2l0aW9uLCBvcHRpb25zIH0gPSBkYXRhOwoJdHJ5IHsKCgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTsKCQlnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCAzLCBmYWxzZSApICk7CgkJaWYgKCBpbmRleCApIHsKCgkJCWdlb21ldHJ5LnNldEluZGV4KCBuZXcgQnVmZmVyQXR0cmlidXRlKCBpbmRleCwgMSwgZmFsc2UgKSApOwoKCQl9CgoJCWlmICggb3B0aW9ucy5pbmNsdWRlZFByb2dyZXNzQ2FsbGJhY2sgKSB7CgoJCQlvcHRpb25zLm9uUHJvZ3Jlc3MgPSBvblByb2dyZXNzQ2FsbGJhY2s7CgoJCX0KCgkJaWYgKCBvcHRpb25zLmdyb3VwcyApIHsKCgkJCWNvbnN0IGdyb3VwcyA9IG9wdGlvbnMuZ3JvdXBzOwoJCQlmb3IgKCBjb25zdCBpIGluIGdyb3VwcyApIHsKCgkJCQljb25zdCBncm91cCA9IGdyb3Vwc1sgaSBdOwoJCQkJZ2VvbWV0cnkuYWRkR3JvdXAoIGdyb3VwLnN0YXJ0LCBncm91cC5jb3VudCwgZ3JvdXAubWF0ZXJpYWxJbmRleCApOwoKCQkJfQoKCQl9CgoJCWNvbnN0IGJ2aCA9IG5ldyBNZXNoQlZIKCBnZW9tZXRyeSwgb3B0aW9ucyApOwoJCWNvbnN0IHNlcmlhbGl6ZWQgPSBNZXNoQlZILnNlcmlhbGl6ZSggYnZoLCB7IGNvcHlJbmRleEJ1ZmZlcjogZmFsc2UgfSApOwoJCWxldCB0b1RyYW5zZmVyID0gWyBwb3NpdGlvbi5idWZmZXIsIC4uLnNlcmlhbGl6ZWQucm9vdHMgXTsKCQlpZiAoIHNlcmlhbGl6ZWQuaW5kZXggKSB7CgoJCQl0b1RyYW5zZmVyLnB1c2goIHNlcmlhbGl6ZWQuaW5kZXguYnVmZmVyICk7CgoJCX0KCgkJdG9UcmFuc2ZlciA9IHRvVHJhbnNmZXIuZmlsdGVyKCB2ID0+ICggdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyApIHx8ICEgKCB2IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXIgKSApOwoKCQlpZiAoIGJ2aC5faW5kaXJlY3RCdWZmZXIgKSB7CgoJCQl0b1RyYW5zZmVyLnB1c2goIHNlcmlhbGl6ZWQuaW5kaXJlY3RCdWZmZXIuYnVmZmVyICk7CgoJCX0KCgkJcG9zdE1lc3NhZ2UoIHsKCgkJCWVycm9yOiBudWxsLAoJCQlzZXJpYWxpemVkLAoJCQlwb3NpdGlvbiwKCQkJcHJvZ3Jlc3M6IDEsCgoJCX0sIHRvVHJhbnNmZXIgKTsKCgl9IGNhdGNoICggZXJyb3IgKSB7CgoJCXBvc3RNZXNzYWdlKCB7CgoJCQllcnJvciwKCQkJc2VyaWFsaXplZDogbnVsbCwKCQkJcG9zaXRpb246IG51bGwsCgkJCXByb2dyZXNzOiAxLAoKCQl9ICk7CgoJfQoKfTsK",typeof document>"u"?require("url").pathToFileURL(__filename).href:Ot&&Ot.src||new URL("shop-components.cjs",document.baseURI).href),{type:"module"});super(t),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((r,l)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=m=>{l(new Error(`GenerateMeshBVHWorker: ${m.message}`))},e.onmessage=m=>{const{data:p}=m;if(p.error)l(new Error(p.error)),e.onmessage=null;else if(p.serialized){const{serialized:s,position:a}=p,u=Ui.deserialize(s,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=a,s.index)if(t.index)t.index.array=s.index;else{const _=new d.BufferAttribute(s.index,1,!1);t.setIndex(_)}g.setBoundingBox&&(t.boundingBox=u.getBoundingBox(new d.Box3)),i.onProgress&&i.onProgress(p.progress),r(u),e.onmessage=null}else i.onProgress&&i.onProgress(p.progress)};const o=t.index?t.index.array:null,c=t.attributes.position.array,h=[c];o&&h.push(o),e.postMessage({index:o,position:c,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...t.groups]}},h.map(m=>m.buffer).filter(m=>typeof SharedArrayBuffer>"u"||!(m instanceof SharedArrayBuffer)))})}}class vl{constructor(e,t){this.lock=!1,this.lockX=!1,this.lockY=!1,this.invRotMat=new d.Matrix4,this.mouse=new d.Vector3,this.rotateStart=new d.Vector2,this.rotateEnd=new d.Vector2,this.rotateDelta=new d.Vector2,this.selectedAxis=null,this.isDragging=!1,this.context=null,this.orbitState=!0,this._animator=0,this._emitter=new je,this.addListener=this._emitter.addListener.bind(this._emitter),this.removeAllListeners=this._emitter.removeAllListeners.bind(this._emitter),this._text=document.createElement("div"),this._textTimer=0,this._update=()=>{this.lock||(this._textTimer&&(window.clearTimeout(this._textTimer),this._textTimer=0),this._textTimer=window.setTimeout(()=>{this._text.style.opacity="0"},800),this.camera.updateMatrix(),this.invRotMat.extractRotation(this.camera.matrix).invert(),this.axes.forEach(r=>{this.setAxisPosition(r)}),this.axes.sort((r,l)=>r.position.z>l.position.z?1:-1),this.drawLayers(!0),this._text.style.opacity="1",this._text.innerText=this.camera.position.distanceTo(this.orbit.target).toFixed(2)+" m")},this.updateMouseFromEvent=r=>{this.rect=this.domElement.getBoundingClientRect();const l=this.domElement.width/this.domElement.clientWidth,o=this.domElement.height/this.domElement.clientHeight,{left:c,top:h}=this.rect;this.mouse.set((r.clientX-c)*l,(r.clientY-h)*o,0)},this.updateSelectedAxisUnderMouse=()=>{this.selectedAxis=null,this.axes.forEach(r=>{this.mouse.distanceTo(r.position)<r.size&&(this.selectedAxis=r)})},this.onPointerDown=r=>{this.rotateStart.set(r.clientX,r.clientY),this.updateMouseFromEvent(r),this.updateSelectedAxisUnderMouse(),this.orbitState=this.orbit.enabled,this.orbit.enabled=!1,window.addEventListener("pointermove",this.onDrag,!1),window.addEventListener("pointerup",this.onPointerUp,!1)},this.onPointerUp=()=>{this.domElement.style.backgroundColor="#FFF0",setTimeout(()=>this.isDragging=!1,0),this.domElement.classList.remove("dragging"),this.orbit.enabled=this.orbitState,window.removeEventListener("pointermove",this.onDrag,!1),window.removeEventListener("pointerup",this.onPointerUp,!1)},this.onPointerEnter=()=>{this.domElement.style.backgroundColor="#FFF3",this.rect=this.domElement.getBoundingClientRect()},this.onPointerMove=r=>{if(this.lock||this.isDragging)return;const l=this.selectedAxis;r&&(this.updateMouseFromEvent(r),this.updateSelectedAxisUnderMouse()),l!==this.selectedAxis&&this.drawLayers()},this.onDrag=r=>{this.lock||(this.isDragging||this.domElement.classList.add("dragging"),this.isDragging=!0,this.selectedAxis=null,this.rotateEnd.set(r.clientX,r.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart).multiplyScalar(.5),this.rotateStart.copy(this.rotateEnd),this.orbit.update())},this.onMouseClick=r=>{if(this.lock||(this.updateMouseFromEvent(r),this.updateSelectedAxisUnderMouse(),this.isDragging||!this.selectedAxis))return;this._animator&&cancelAnimationFrame(this._animator);const l=this.selectedAxis.direction.clone();this.camera.lookAt(0,0,0);const o=this.camera.position.distanceTo(this.orbit.target);l.multiplyScalar(o),this.selectedAxis.axis==="z"?l.setZ(this.orbit.target.z+o):this.selectedAxis.axis==="-z"?l.setZ(this.orbit.target.z-o):l.setZ(this.orbit.target.z);const c=500,h=performance.now(),m=1,p=this.selectedAxis.axis,s=()=>{const u=performance.now()-h,g=Math.min(u/c,m);if(this.camera.position.lerp(l,g),this.orbit.update(),g!==m){this._animator=window.requestAnimationFrame(s);return}else this._animator=0,this.onPointerMove(void 0),this._emitter.emit("axis-select-end",p);this.onPointerMove(void 0)};this._emitter.emit("axis-select-start",p),s()},this.drawCircle=(r,l=10,o="#FF0000")=>{this.context&&(this.context.beginPath(),this.context.rect(r.x-l,r.y-l,l*2,l*2),this.context.fillStyle=o,this.context.fill(),this.context.closePath())},this.drawLine=(r,l,o=1,c="#FF0000")=>{this.context&&(this.context.beginPath(),this.context.moveTo(r.x,r.y),this.context.lineTo(l.x,l.y),this.context.lineWidth=o,this.context.strokeStyle=c,this.context.stroke(),this.context.closePath())},this.drawLayers=(r=!1)=>{this.context&&(r&&this.context.clearRect(0,0,this.domElement.width,this.domElement.height),this.axes.forEach(l=>{const o=this.selectedAxis===l,c=l.position.z>=-.01?l.color[0]:l.color[1];if(l.line&&this.drawLine(this.center,l.position,l.line,c),this.drawCircle(l.position,l.size,o?"#0066ff":c),l.label){const h=l.axis==="-x"?this.options.fontSize-3:this.options.fontSize;this.context.font=[this.options.fontWeight,h+"px",this.options.fontFamily].join(" "),this.context.fillStyle=this.options.fontColor,this.context.textBaseline="middle",this.context.textAlign="center",this.context.fillText(l.label,l.position.x,l.position.y)}}))},this.setAxisPosition=r=>{const l=r.direction.clone().applyMatrix4(this.invRotMat),o=r.size;r.position.set(l.x*(this.center.x-o/2-this.options.padding)+this.center.x,this.center.y-l.y*(this.center.y-o/2-this.options.padding),l.z)};const i={offset:new d.Vector2,size:90,padding:8,bubbleSizePrimary:8,bubbleSizeSecondary:6,lineWidth:2,fontSize:11,fontFamily:"arial",fontWeight:"normal",fontColor:"#fff",className:"orbit-controls-gizmo",colors:{x:["#f35f5f","#902525"],y:["#78da2f","#71ae45"],z:["#1d92fa","#d0d1d1"]}};this.options={...i,...t},this.orbit=e,this.camera=e.object,this.center=new d.Vector3(this.options.size/2,this.options.size/2,0),this.axes=this.createAxes(),this.domElement=this.createCanvas(this.options),this.orbit.addEventListener("change",this._update),this._text.style.cssText=`
|
|
3821
|
+
`;Rs([Hl()],exports.DeviceLines.prototype,"lines",2);Rs([Nl(".container")],exports.DeviceLines.prototype,"container",2);exports.DeviceLines=Rs([Cl("device-lines")],exports.DeviceLines);class jl extends ve.CSS2DObject{constructor(e){const t=document.createElement("div");super(t),this._text=document.createElement("div");const i=Ms(),s=i?"#ddd":"#eee";this.element.style.pointerEvents="auto",this.element.style.padding=i?"2px 6px":"3px 12px",this.element.style.borderTop=`1px solid ${s}`,this.element.style.borderBottom=this.element.style.borderTop;const a="6px",o=document.createElement("div");o.style.pointerEvents="none",Object.assign(o.style,{pointerEvents:"none",borderLeft:`1px solid ${s}`,borderRight:`1px solid ${s}`,position:"absolute",left:"0",top:"0",boxSizing:"border-box",height:a,width:"100%"}),this.element.append(o);const c=document.createElement("div");c.style.pointerEvents="none",Object.assign(c.style,{pointerEvents:"none",borderLeft:`1px solid ${s}`,borderRight:`1px solid ${s}`,position:"absolute",left:"0",bottom:"0",boxSizing:"border-box",height:a,width:"100%"}),this.element.append(c),this._text.style.fontSize=i?"10px":"14px",this._text.style.font="SF Pro SC,SF Pro Text,SF Pro Icons,PingFang SC,Helvetica Neue,Helvetica,Arial,sans-serif",this._text.style.color="#fff",this._text.style.fontWeight="500",this._text.style.transition="all .16s",this._text.innerText=e,this.element.append(this._text),this._text.addEventListener("pointermove",()=>{var u;o.style.borderColor=c.style.borderColor=this.element.style.borderColor="#666",this._text.style.color="#000",(u=this.onPointMove)==null||u.call(this)}),this._text.addEventListener("pointerleave",()=>{var u;o.style.borderColor=c.style.borderColor=this.element.style.borderColor=s,this._text.style.transform="scale(1)",this._text.style.color="#fff",(u=this.onPointLeave)==null||u.call(this)})}set text(e){this._text.innerText=e}dispose(){this.element&&this.element.parentNode&&this.element.parentNode.removeChild(this.element)}}class fi extends f.Group{constructor(e,t=!0,i=!0){super(),this._startWith=e,this._showText=t,this.useStartEnd=i,this._line2Length=.01,this._line=new f.LineSegments(new f.BufferGeometry,new f.LineBasicMaterial({color:"#666",linewidth:2})),this._line2=new f.LineSegments(new f.BufferGeometry,new f.LineBasicMaterial({color:"#666",linewidth:2})),this._text=new jl(""),this._line.frustumCulled=!1,this.add(this._line,this._line2),this._showText&&(this.add(this._text),this._text.onPointMove=()=>{this._line.material.color.set("#000"),this._line2.material.color.set("#000")},this._text.onPointLeave=()=>{this._line.material.color.set("#666"),this._line2.material.color.set("#666")})}updateMaterial(e){this._line.material=e}reset(){var e;(e=this._line.geometry)==null||e.dispose(),this._line.computeLineDistances()}update(e,t,i=0){var h,g;(h=this._line.geometry)==null||h.dispose(),this._line.geometry.setFromPoints([e,t]),this._line.computeLineDistances();const s=this._line2Length+i*.02,a=new f.Vector3().subVectors(t,e).normalize();let o;Math.abs(a.z)>Math.abs(a.x)&&Math.abs(a.z)>Math.abs(a.y)?o=new f.Vector3(-a.y,a.x,0):Math.abs(a.y)>Math.abs(a.x)?o=new f.Vector3(1,0,0):o=new f.Vector3(0,1,0),o.length()<.001&&(Math.abs(a.x)<.9?o=new f.Vector3(1,0,0):o=new f.Vector3(0,1,0)),o.normalize();const c=new f.Vector3().addVectors(e,o.clone().multiplyScalar(s)),u=new f.Vector3().addVectors(e,o.clone().multiplyScalar(-s)),m=new f.Vector3().addVectors(t,o.clone().multiplyScalar(s)),d=new f.Vector3().addVectors(t,o.clone().multiplyScalar(-s));(g=this._line2.geometry)==null||g.dispose(),this._line2.geometry=new f.BufferGeometry,this._line2.geometry.setFromPoints([c,u,m,d]),this._line2.computeLineDistances();const n=e.distanceTo(t);this._startWith?this._text.text=`${this._startWith}${(n*1e3).toFixed(0)} mm`:this._text.text=`${(n*1e3).toFixed(0)} mm`;const l=new f.Vector3;l.addVectors(e,t).multiplyScalar(.5),this._text.position.copy(l),this.useStartEnd||(this._line2.visible=!1)}destroy(){this._text.dispose(),this.children.forEach(e=>Ae(e)),this.removeFromParent()}}class on extends f.Object3D{constructor(e,t){super(),this.radius=e,this._text=new Yl(""),this._line=new fi(void 0,!1,!1),this._box=new f.Mesh,this._arc=new Gn.Line2,this._previousPosition=null,this._updateTimer=null,this._updateDelay=300,this._accumulatedAngle=0,this._lastAngle=null,this._line.updateMaterial(new f.LineDashedMaterial({color:"#555",dashSize:.06,gapSize:.06})),this._line.renderOrder=0,this._box.geometry=new f.RingGeometry(e,e+.003,128),this._box.material=new f.MeshBasicMaterial({color:"#666",side:f.DoubleSide}),this._arc.geometry=new Os.LineGeometry,this._arc.geometry.setPositions([0,0,0,0,0,0]),this._arc.geometry.instanceCount=0,this._arc.material=new Br.LineMaterial({color:"#eee",linewidth:2,resolution:new f.Vector2(window.innerWidth,window.innerHeight)}),this._arc.visible=!1,this._arc.rotateX(-Math.PI/2),this.position.y=t,this._arc.position.y=.001,this.add(this._box),this.add(this._arc),this.add(this._line),this.add(this._text)}hide(){this._text.hide(),this._line.visible=!1,this._arc.visible=!1}show(){this._text.show(),this._line.visible=!0}dispose(){this._updateTimer&&(clearTimeout(this._updateTimer),this._updateTimer=null),this._box.geometry&&this._box.geometry.dispose(),this._arc.geometry&&this._arc.geometry.dispose(),this._arc.visible=!1,this._previousPosition=null}update(e){var t;this.radius=e,(t=this._box.geometry)==null||t.dispose(),this._box.geometry=new f.RingGeometry(e,e+.003,128),this._line.updateMaterial(new f.LineDashedMaterial({color:"#555",dashSize:.06*e,gapSize:.06*e})),this._text.update((e*1e3).toFixed(0))}change(e){const t=e.clone();t.setZ(0),t.normalize().multiplyScalar(this.radius),this._text.position.set(t.x,t.y,t.z),this._text.updateColor("#eee"),this._line.update(t,new f.Vector3),this._previousPosition&&this._updateArc(this._previousPosition,t),this._updateTimer&&clearTimeout(this._updateTimer),this._updateTimer=setTimeout(()=>{this._previousPosition=null,this._accumulatedAngle=0,this._lastAngle=null,this._clearArc(),this._updateTimer=null},this._updateDelay),this._previousPosition||(this._previousPosition=t.clone(),this._lastAngle=Math.atan2(t.y,t.x),this._accumulatedAngle=0)}_updateArc(e,t){const i=Math.atan2(t.y,t.x);if(this._lastAngle!==null){let u=i-this._lastAngle;u>Math.PI?u-=2*Math.PI:u<-Math.PI&&(u+=2*Math.PI),this._accumulatedAngle+=u}if(this._lastAngle=i,Math.abs(this._accumulatedAngle)<.01){this._arc.visible=!1;return}const s=Math.atan2(e.y,e.x),a=s+this._accumulatedAngle;let o=.006*this.radius;o<.003&&(o=.003),o>.006&&(o=.006);const c=this._createArcGeometry(s,a,this.radius+o);this._arc.geometry&&this._arc.geometry.dispose(),this._arc.geometry=c,this._arc.visible=!0}_clearArc(){this._text.updateColor(),this._arc.geometry&&(this._arc.geometry.setPositions([0,0,0,0,0,0]),this._arc.geometry.instanceCount=0,this._arc.computeLineDistances()),this._arc.visible=!1}_createArcGeometry(e,t,i){const s=[],a=t-e,o=Math.max(128,Math.floor(Math.abs(a)/(Math.PI/128))),c=a/o;for(let m=0;m<=o;m++){const d=e+m*c,n=Math.cos(d),l=Math.sin(d);s.push(i*n,0,i*l)}const u=new Os.LineGeometry;return u.setPositions(s),u.instanceCount=Math.max(0,s.length/3-1),u}}class Yl extends ve.CSS2DObject{constructor(e){const t=document.createElement("div");super(t),this._wrapper=document.createElement("div"),this._circle=document.createElement("div");const i=Ms();this._wrapper.style.fontSize=i?"10px":"11px",this._wrapper.style.color="#fff",this._wrapper.style.whiteSpace="nowrap",this._wrapper.style.position="absolute",this._wrapper.style.transform="translateX(-50%)",this._wrapper.style.top="6px",this._wrapper.style.font="SF Pro SC,SF Pro Text,SF Pro Icons,PingFang SC,Helvetica Neue,Helvetica,Arial,sans-serif";const s=this._circle;s.style.position="relative",s.style.zIndex="10",s.style.width=s.style.height="5px",s.style.borderRadius="50%",s.style.background="#666",t.append(this._wrapper,s),this.update(e)}show(){this.element.style.display="block"}hide(){this.element.style.display="none"}update(e){this._wrapper.innerText="旋转半径:"+e+" mm",this.updateColor("#eee")}updateColor(e="#666"){this._circle.style.background=e}}const $l="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAAUCAYAAADY6P5TAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAEvSURBVFiFzZdbFYMwEEQroRKQgAQkVEIlICEOkFAJlRAJSIgEJNx+sPS0nGxIaOhyv3nM7mTmwOViDHAFesADD+BqrakKQAcMwMQ3AWis9e1C3HLASJoAdNZ6sxG3/MZQMZy1dhWgFbfWRzDGlFjAwFlyyXdh5OD5OIqykBgBy1yiF0aMUQaJugLclOcEoP3nULmFgQgeyCwOoJGBYrijByspDM98ZIszJAt8Ks8dag/VUFYYLtetjHdruRz5JZf8WBg1Ae7KcgOluaSsMAKJwqgJ6Vz2WzcvhZHjVlFh1ESG1DQ67SYtyGs8OwujNpTkUtw4nVtbyLK1XDafF3aKW90Z3EpBbi5lE0u9n3qoNTKk9rHh3heZqqwA8Vw6a11VkVwuPK31HALzb5pfovYC2xSs5LCDIUcAAAAASUVORK5CYII=",Ql="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAKCAYAAACngj4SAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAChSURBVDiNrdJbFYMwEIRhJFQCEpCAhEqIhDhBAlKQgAQkIOHrSziHpmkbLvua7P4zO9s0FYUeM0b0NT2nC9FnLQho7wQ9MOwgQ3K4ZPDrrtGmFcKKkL0HTAXXw2HX6HYuFnR/hMWC6ykX+W1AzJqq1abDGguux6LoPK9aUGFOm1Y+F+Bh+7DlsSKehRXgnfdDm5od7GdeN8ADnpuKQ3ldqReHZFd3742nZgAAAABJRU5ErkJggg==",_r="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAABsCAYAAACPZlfNAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAdzSURBVHic7Z3hlZs6EIUvW4E7CB3EHcQdxB08OngugVTg8yrwSQVOKnBSwW4qsFOB3cF9PxhZQsYYjEAS1neOD7ssCwPXMxoNIGWIDJJLAAsASwCfAOTyey6bLOQDABf5qJ9P8vkry48sy05j2+ySzLcBjyC5QiXOV1kuWv+hPxcAvwD8BvCBSsRL6394JDjBSC4ArFEJtG7Y5ILqwp4A/JHlxfyoC04yN/4vh/bEz9Dim9uY+/8O4EfI4nmFZEFyz1veSe5Iri0BXB13Icfekjxaxz6TPMixXXt2fJDM5WLZF+og63MPNi1IbsQGW7zyJYUToXZyEUxP8iLSPUS80hLvdYQTobbWN3fHKvMLGpKrBq/bzla4htC3C8mbutIg3JnkxrddzhCvil4omwbhDqy6IPEisV5xJFn4tsk1rDJI8wtZ+rapN+JV73PzqnuwSk7MtvkQzflabdUxGsMdIGFSnfuZZFPHPxysELjnXDOoFsTbzAJA6dumRiyxSt/2+Ma6Hlvf9lyRb9QumjAwIZKQqOLAznvEEbFUcvFS7VVXWO/WvHsTLYnVnSBEM8JgEqsDlmi7qQ++TWL1xxKtnOqgKvs5J7H6I6KdJxFNsh5FygafxLqOxVgHme6b8QIYkWqcZoW6Mr13vvMXhboi8u56x+a34eXKTWMhXSO3SQirgqZi5WSniSvS1ChyFztUoTCcetjMoNGnHbqjTQqF42P1z4pnd7IwssKUwo8Mq/uIz2eN1NWMg3vzxoUWvu3pihEa+zU/4l3RJhoRC/ZcAkKdxkfnXUC8ggE1L+tWILbartW45o1D5IIpL+tWq43du4C4BQNqXlY82jB67wJmIdhSTG/vl1FXkaP1LiB+wQCA+m5+Ya5/s7b7V5a/J7Eq0cZ/svza+FcrHEZd1ZiJh5kp/q0e1D3tqMMhMA/BgFodt1DrzJD4jyx/TmpVoo3vsqyHxTmFQ2BWHpY3ngP1Pa9h5f1AmItgQC1bXAE6JKpXVn94sSrRxocsl4AW7Iss/0xuTuIRKqfQ7dic2i9gdiHxWlu0V8yi/QLmJRhQc6jlG3T7lYboCRfVji3eoMda+mjeNhEAJ1ku31ANYQekhCNklDafTA87eTEl0YWTLHNTsNSGhYvSZvEGPWDkyY8t1xt2ua/jd0Uyah/jYinBcvt+2OTIBTgAOHi6GJ3wbKeOfkaOn09sRNM4VGcXF8N1P0wiwNmyMx+63x7HV48dnuHqpJ40ZMNbBovmUrAGsRSTjuB2PRefgokhZcPFGCSaK8FaxCqf3ecAW66Cea8juhbNhWCBiaXridRtSD61IZZRzkQbKlhIYok9ut5rCOY9Q3Ml2hDBQhNLbKoJdpBfVr4MMnEh2rOChSiW2KWeCHg3X4wO5h2woaI9I1ioYolt6gHf/RuMOpU/k+pkWVYC+GatXmCkTit1p9hOvL6JLb7JZXky+0LTjn/UgWc9rY+HhexZCuqXIzZmfAzyAdJnROsqWAxiAbUnp9bmmxJn34bdo69oXQSLRSwAt10veqwndqVFtKJh21bBWD2WHotYuo5orDzIymAyxSbuiEZbtDbBqN8hCF4soGbv3lwZbOJh00W0e4LFJhZQG81hY67UHbMIeCRak2AxigXU2q+V/QdF7sWynrSJ1nFdDGJd2y/axXnqikfhx7z+tIjWhdK3/Y+gbqpuu1yM9IU+Nt8EfUQU00ex4YU+84/m6Df55NYNgPdDXhOFb3u7wLZwaGwUXVhUdBSt8G1nV9hlvBTjpKPIFm0eiFb4tq8P7No3ZkA3NJ/hjmiFb7v6QN3Nuh8OjY3VCQffib6HJVrh256+GN5Vdtk4ZwS1xUeIaIVvO/rSy7uMf9rF7mWx0su7jH9SD31E7WWxwfoI5v0eO6QuOiYvmwgOGcGcLkZ6TnSG+kGb7m1Xw05UtnVMoXE8WJ8hYljZjL4mKXsh6HIE85SAjAvHmCqFabKcUeAYk+UYO1ePWqXpqBxBXWx3f0vLyhpL5wd4MYyoNd7bnKzX6IJ+wipkOOXUlJN8M2YMfUxNaSUh+SQHnQFWszLtfGxME2/3whJr+j4t09T2nbHE8jO1vRiSRHtAMGIZBi2M8HhO2aNGskGVYOy8i2VCXQ+bLvsJGNYfci1929OIZeQ+qG/UREjE2QcvlsIKA0cGMjrBFFjt1ZGx3EcUww/Gt2w7Z2+T890Z5/seZQJmhcjjHBMSVuW6o3GepW+bBsHqfo/pbYc5hMkGrzpG6VX3YPWWyTl24e4IVfi2axRYZVBm+h+NcKxGHdhZtm9n5VX3EOHKBo8rGVByIt5UUFdzKDbvXkIomzvCKfE2PsQzRDpYNh1lfT61TcEhwq3lItniHSX0FGMIKAKtxWveecueAbVRmW8DbESUNaopHpe4HbDrhGqU6Q9UMyao309qgyzLTsa+7E8O4LMsm/YPVPOo/QTwI8uyoMbzD04wE7ngS/l8AbBC8wUeghL/J4CPLMt+Od6/U4IWrAlpQ5aoPOSTLHNoIRfGzxfoMd9P0J74F5VIlyzLopok6H/tVqA8kSYfTwAAAABJRU5ErkJggg==",Zl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYwAAACsCAYAAABo4pvIAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAzYSURBVHic7d3hcdtIEobhD05gmYGRgbkRLDKwMjiGoBCUgeoi0F0Evo1AdASiIxAcgbkR9P1Aj9mESIm2QMwAeJ8qlihKomeXwHzsHgCsBBTOzGpJK7+pd7/2r3+ceCw69Vh8nkvt/fbW4/H7vaR//H4bfqeNX6uqij8DilPlHgCWxcxW6ibvNFmn+x/DY/Fn0mHyPXVLE7F0ejKOf3/SpRO1B9c55wJNOg6rfrD1/5v7/31pbN97j7WS9lVVnf3vAoZGYGAwPqHW6ia+tbrJce0/Tj+Lk176+k/4/ui2tAnRA/VUaNbqQjXdr8PvtDoOku/xeyoXDIXAwMXMbK1DGHzUcTikiatVN1l9Uy8YmLiG1wuY2r9+0vHrUuvwOux0/PrseF1wKQIDR06EQvw+TTatunexrXgXOwmh+ku31AJc6xAoMUxaESboITAWyoOhVjdhfAr307vQnbpQ2KlrDe2yDBSj8EBJ20S/Qml12B7S/XZp7UIQGLMX3lk2Og6Gnbqd/1u4zySAI+EghRQmH9VtS7W6bWYrKpLFIDBmJFQNf6nbwdOCc6oYvqqrFrY5xof56AXJJ53e3r5J2hIi80FgTFRoIcRwaP32Vb7TUjFgTCdaW426thYhMgMExgT4u7m1Dm2lxn+UqoatCAcUyrffRodqpPEfbcWbm0khMAoUdrBUPTTyUFC3g7UsQmPKvBJpdNzOiq3TLQFSHgKjAKGM/6xDOb+T9Le6d17bXGMDxmJmjY73g1aHRfX/ESD5ERgZhBbTZx2OOCEggOCVAEn7CQEyMgJjJL2Nv9Hxhr/NNS5gKnr7UK0uQNiHMH1mtjKzGzN7MLNnvz34Rg/gHXz/aszs3vetH75/bbyCB8pmZrVvsI/WeTSzWz8/AsCV+L536/vcj7Dv1bnHBvxkZmt/l/MUqogb3uUAefSqjx++X95R3SOLEBK0moDCER4Y3YmQuKfVBEyLh8dd2I8JDwzD+6J3hAQwP2fCo849LkyI9z/TwnVqNxESwIyF8IgL5qxD4jTfYB786KYvZnaTe0wAxudzQTraivVJdE60nDaUpACkn92GuxAed1QdCxSqCY5wAvCm3pFWj8wZM2eHk+p+VhO5xwRgWrzqSCcIPrHWMTMeFGltgmoCwCB6ax33tLMnzM+biG2nOveYAMxPWAulXTU1vUNiuRAZgFGERfJngqNwrE8AKEVoVz0xHxWEoABQqhAczE85ERQApiIEB62qMREUAKaK4BiJH4nwRFAAmDqC40rCeRQEBYBZ8Y5JumZVnXs8k9U7RO0u93gA4Br6cx2nAvyisE5B6gJYBA+OB684uFr2W3rtpzr3eABgbL31jTr3eIoUTq2/yz0WAMjNugsbPpvZbe6xFMOrimfSFACO+fyYzhhvco8nq1BVkKAAcIZXGz/M7D73WEYXqgoWtQHgAr1qo849nlGEvtwm91gAYGoWsbbBEVAAMIxw5YvH2Z23EVpQy+u/AcAV+Hkb9z63rnOPZxBhsWa+5RMAZDKbFlVIvzr3WABgrsbq4ny4xpOm/pqklaQ/q6pqr/HvAAAkn2P/lLSa1FFUIenuco8FAJYmXMiwzj2WVxEWAJBfCI0yF8PN7MYXtze5xwIASxeu+t3kHsuRMLAy0wwAFsjM1kW9kQ9hUeceCwDgWFgq2OQeSPp4wTrrQAAAZ3lo5Ks0QljQhgKAwmVrT1n3iVCEBQBMSAiNcebuUNrwmbMAMDF+ROv11539Ylf5F08AAL8tXH+qvuY/8sgVZwFg+vzkvqdrPfm9mT1e5ckBAKPz604NWwSM1vMCAIxm8HM0wiI3R0QBwMz4kVPDFAS+bjHtD+YAAJzli+DvW3IY5EkAAMV715XGaUUBwHKEOb/+nT/+wudaAMBy+KG2D7/6R42XJ6srjQsAUCCf+y+/kocvdDfXGxIAoETpIysu/eWGhW4AWK6Lz83w6oILCwLAQl1UZaS1i5HGBAAo1JtrGV5dbMYbEgCgRF5lnF6e8EuX/xh5TACAQvUvGfIh/OxW0n/GHhAAoFhbSS/bUp4kzdijAQCU6eS6dvqM7kxjAgAUKhYTqSW1Fu0oAMBLW3UZ0eHMbgDAKUcnc6ejo7huFACgzzPCpK4lVUvaV1W1zzoqAEBxPBt2ZtZ8UNeb2uYdEgCgYK2k9QdJnyR9yzsWAEDBvkr6mFpSbdahAABKtpNXGGtJrF8AAF6zSudhtDlHAQAo2l4hMAAAOGcvaaV0fC0AAOeYmVFhAAAu8kHSPl7vHACAyDOi/aDUmwIA4BUEBgDgLbV0CAwAAM5ZSdp9kJ/Bl3kwAIBy1fI1jO+S/so7FgBAwT5J+pYqjDrvWAAABWvUZUV3QgYfoAQA6IsfspdO3NuKdQwAwEtrSbuqqvYpMP6W9K+MAwIAlOmzuozo+Id8P+cbDwCgRN6OavoPPr94EACwWP1iIl588N+iLQUAOPgs6b8vHjWzmrYUACBJR0el739WGFVVtZJaM9tkGBcAoCCeBbuqqk5fPsrMbqgyAAAXrWv7L21GGREAoDhePDxe8osbqgwAWC4ze7z4qFmqDABYJj+U9u3qIvwBaxkAsDB+3ahfPyfPzB7M7O4qowIAFMfM7szsy+/8Ye3H4NbDDwsAUBIzW79rzve0oTUFADPnC923+Z8EAFAsM7v9pYXuV56o9kUQPi8DAGbm3a2oE0+48dAY5gkBANmFguBm6Ce+N7OnQZ8UAJCNLzncX+vJnzjUFgCmz4uA969bvPIPpPKFRXAAmKiwzLB6+7ff9w9dp+cFALg6v5LHeOfYhVV1jpwCgIkIc3cz9j+8ITQAYBpCWGxyDWAzamkDAPhl4VJPm9wD4RwNAChUWHfe5B6LJNpTAFAib0OVExaJf+hGeQMDgAUKb+TLPKI1pNld7rEAwFKlK40Xv1QQ+mV3uccCAEszmbBIPDSe/FP7rnsmIQAgfbzqg8+9de7x/DK/Vsl0kg4AJih0dq5zIcGx+AdzcP0pALgCn2N/zGaODYvh97SoAGAYs+3ieH/tcbL9NQAoRGhBPcx6PqVFBQC/L1xdYxlzaDiK6nHW6QgAA/F582GWLahLeP9tPos1AHAFYWH7LvdYsvJLilBtAECPVxWPi60qzmFtAwAO/IxtqopzQpo+2tifCAUABVjMEVBDscNnznJpEQCL0FvU3uQez6T4eRvpIlp3BAeAuWKuG0hI3fwfLwgAAwrnVNB+GpIfTcX6BoDJC0HBlS+uieAAMFUhKFinGBPBAWAqCIpChBeC4ABQFIKiUP7CPBEcAHIjKCYitKo4RA3AaPxUgNjx2OQeEy4UguOHB0ede0wA5qd3wt2Dma1zjwm/yV/MdFVc2lUABuFvSh+sw3kUc+Ll4m1Y57ilXQXgV/XXJwiKmeu1q+6pOgC8JlQTqe3U5B4TRmaH61WldhWL5AAk/Wxnx2qCtVB0wjsI1jqABbPuatlfwtpEk3tMKFRY64hHWDW5xwXgesxsHVpOj15Z0G3A5bwkTZcdfiY8gPnwkLin5YTBecuK8AAm7ERI3HPeBK6qFx4caQUUrHeEEyGBfM6FB/1PIA9fh7wJIfFESKA4vuYRF8wf/fs699iAOfNWU9r3LCxc17nHBrzJDhciS4fqplKY6gMYwIlW04NXFuxfV1LlHsBS+BrHWtJnSbWkVtLfknZVVW1zjQuYit4+1Ejain1oVARGBv4OKG74taSd2PiBn3oBsVb3Jmurw36yzzW2pSIwCuABciPpkwgQLNSZgIj7QZtrbOgQGAXyAGkk/aVux1mr23F2kr5J2rLzYMr8iKVah228UVc97CR9VbeNU0EUhsCYgNDCWqvbwRr/0VZdgOzEDoZChe230SEgpMP2uxUtpkkgMCbKDxds1LWxUpjsddgJW1HGY2Qn3tzUOrRYU/XAdjlRBMaMnAkR6bidtZPU8m4O7+VrDisdt06l43Boq6raZRkgBkdgzJyHSOoXx0X1Vl018l2HxUWCBEe8Yqj9tla3DaX7O3XbTmortVQO80ZgLFCYBFKQfAz39+omgr1obS2GL0KndlLaHtJjMRjSGwuqhgUiMHDkREWyCt+3OoRJqkxa8c6yeP66xttH/5pe3/S67tS9tjtJe4IBEYGBi4UwWek4TFLF0uplhbIPj+9peQ0vhMEqfP0Uvq91/Lq0IhTwGwgMDKb3Lnalw7vY9H0tDw4dqhPpUK1IIVy0wIDxduGpWy3pD70MhpWO/1/uJP2jEA5UfxgKgYFRhQmx1vGk99F/JT6WbvverfXf3aubHJM23E+/27//wqUT6htXPk1jTeoz9//Q6UCIf9/q5X/zd/WqNXGQAkZGYKB4YaLuf43300QsvZy8+9+/9fhrzoVP+8pjMdjiY0eBRiWA0v0fPGR4m68wwtkAAAAASUVORK5CYII=";class yr extends ve.CSS2DObject{constructor(e,t){const i=document.createElement("div");super(i),this.props=e,this.amr=t,this._direction=1,this._controllingRotate=!1,this._controlling=!1,this._startAt=0,this._looper=0,this._initial=0,this._canRotate=!1,this._emitter=new vt,this.addListener=this._emitter.addListener.bind(this._emitter),this.removeListener=this._emitter.removeListener.bind(this._emitter),this._update=()=>{if(this._looper=requestAnimationFrame(this._update),this._controlling){let c=(Date.now()-this._startAt)/200;c>4&&(c=4);let u=this._initial+.005*c*this._direction;if(u>this.props.max||u<this.props.min){this.mechanism&&(u<this.props.min?(this.mechanism.position.setZ(this.props.min),this._emitter.emit("change",this.props.min)):u>this.props.max&&(this.mechanism.position.setZ(this.props.max),this._emitter.emit("change",this.props.max)));return}if(this._initial=u,!this.mechanism)return;this.mechanism.position.setZ(u),this._emitter.emit("change",u)}};const s=Ms();e.userData&&e.userData.target&&(this.name=e.userData.target.name,t.traverse(c=>{c.name===e.userData.target.name&&(this.mechanism=c)})),i.style.fontSize="30px",i.style.color="#0066FF",i.style.cursor="pointer",i.style.pointerEvents="auto";const a=document.createElement("div");a.style.position="absolute",a.style.left="0",a.style.transform="translateX(-50%) rotate(-180deg)",a.style.marginBottom="5px",a.style.width=a.style.height=s?"34px":"44px",a.style.background=`url(${_r}) center no-repeat`,a.style.backgroundSize="100% auto",a.setAttribute("data-direction","up"),a.style.transition="all .2s";const o=document.createElement("div");if(o.style.position="absolute",o.style.left="0",o.style.transform="translateX(-50%)",a.style.bottom=o.style.top="8px",o.style.width=o.style.height=a.style.width,o.style.background=`url(${_r}) center no-repeat`,o.style.backgroundSize="100% auto",o.style.transition="all .2s",o.setAttribute("data-direction","down"),Array.from([a,o]).forEach(c=>{s||c.addEventListener("mousemove",()=>{c.style.filter="invert(100%)"}),c.addEventListener("mouseleave",()=>{c.style.filter=""}),c.addEventListener("pointerdown",()=>{this.mechanism&&(c.style.filter="invert(100%)",this._controlling=!0,this._startAt=Date.now(),this._initial=this.mechanism.position.z,this._direction=c.getAttribute("data-direction")==="up"?1:-1,this._update())}),c.addEventListener("pointerup",()=>{this._controlling=!1,cancelAnimationFrame(this._looper),c.style.filter=""}),c.addEventListener("pointerleave",()=>{this._controlling=!1,cancelAnimationFrame(this._looper),c.style.filter=""})}),e.userData&&(this._canRotate=e.userData.canRotate,this._canRotate)){const{rotateTarget:c,rotateDuration:u,rotateStep:m,rotateMax:d,rotateMin:n}=e.userData;let l;if(c&&(t.traverse(h=>{h.name===c.name&&(l=h)}),l)){const h=document.createElement("div");h.style.background=`url(${Zl}) center no-repeat`,h.style.backgroundSize="100% auto",h.style.position="absolute",h.style.top="-50%",h.style.left="-50%",h.style.width=s?"140px":"160px",h.style.height=s?"70px":"80px",h.style.transform="translateX(-50%) translateY(-50%)",i.append(h);const g=document.createElement("div");g.style.background=`url(${Ql}) center no-repeat`,g.style.backgroundSize="100% auto",g.style.width=g.style.height=s?"20px":"26px",g.style.position="absolute",g.style.top="0",g.style.transform="translateY(-50%)",g.style.marginBottom="5px",g.setAttribute("data-direction","left"),i.append(g);const _=document.createElement("div");_.style.background=`url(${$l}) center no-repeat`,_.style.backgroundSize="100% auto",_.style.width=_.style.height=s?"20px":"26px",_.style.position="absolute",g.style.left=_.style.right=s?"62px":"69px",_.style.top="0",_.style.transform="translateY(-50%)",_.style.marginBottom="5px",_.setAttribute("data-direction","right"),i.append(_),Array.from([g,_]).forEach(p=>{s||p.addEventListener("mousemove",()=>{p.style.filter="invert(100%)"}),p.addEventListener("mouseleave",()=>{p.style.filter=""}),p.addEventListener("pointerdown",()=>{if(this._timer&&this._timer.isPlaying())return;p.style.filter="invert(100%)",this._controllingRotate=!0,this._startAt=Date.now(),this._direction=p.getAttribute("data-direction")==="left"?1:-1;let v=m/180*Math.PI*this._direction+l.rotation.z;v>d/180*Math.PI?v=d/180*Math.PI:v<n/180*Math.PI&&(v=n/180*Math.PI),this._timer=new gi(l.rotation).to({z:v}).duration(u).start(),this._update()}),p.addEventListener("pointerup",()=>{this._controllingRotate=!1,cancelAnimationFrame(this._looper),p.style.filter=""}),p.addEventListener("pointerleave",()=>{this._controllingRotate=!1,cancelAnimationFrame(this._looper),p.style.filter=""})})}}i.append(a,o),this.scale.set(.01,.01,.01),this.matrixAutoUpdate=!1,this.updateMatrix()}hide(){this.element.style.display="none",this.traverse(e=>{e.visible=!1,e instanceof ve.CSS2DObject&&(e.element.style.visibility="hidden")}),this.visible=!1}show(){this.element.style.display="auto",this.traverse(e=>{e.visible=!0,e instanceof ve.CSS2DObject&&(e.element.style.visibility="visible")}),this.visible=!0}dispose(){this._emitter.removeAllListeners(),cancelAnimationFrame(this._looper),this.element.remove()}}class Xl extends qn.CSS3DObject{constructor(e){const t=document.createElement("div");super(t),this.props=e,this._scale=.01,this._emitter=new vt,this.addEventListener=this._emitter.on.bind(this._emitter),this.removeEventListener=this._emitter.on.bind(this._emitter),this._mouseStart=new f.Vector2,this._targetSize=new f.Vector2,this._caches=[],this._sizeFlag="width",this._direction=1,this._lines=[],this._pointerdown=u=>{const{pageX:m,pageY:d}=u;this.endNode.setPointerCapture(u.pointerId),this._mouseStart.set(m,d),this._targetSize.setX(parseFloat(this.endNode.parentElement.style.width)),this._targetSize.setY(parseFloat(this.endNode.parentElement.style.height))},this._pointermove=u=>{if(!this._mouseStart.x)return;const{pageX:m,pageY:d}=u;let n=m-this._mouseStart.x,l=n+this._targetSize.x;this._sizeFlag==="height"&&(n=d-this._mouseStart.y,l=n*this._direction+this._targetSize.y);const h=l%10;l=l-h,n=(l-this._targetSize.x)*this._direction,this._sizeFlag==="height"&&(n=(l-this._targetSize.y)*this._direction),this._textNode.innerText=(l/100).toFixed(2)+" m",this.endNode.parentElement.style[this._sizeFlag]=`${l}px`},this._pointercancel=u=>{this.endNode.releasePointerCapture(u.pointerId),this._mouseStart.set(0,0)};const{start:i,end:s}=e,a=s.distanceTo(i);this.props.axios==="z"?this.props.axios="y":this.props.axios==="y"&&(this.props.axios="z"),this.props.axios==="y"&&(this._sizeFlag="height");const o=document.createElement("div");o.style.position="absolute",o.style.left="0",o.style.bottom="0",t.append(o),this._textNode=document.createElement("div"),this._textNode.innerText=a.toFixed(2)+" m",o.append(this._textNode);const c=document.createElement("div");this.endNode=c,c.style.position="absolute",c.style.left="auto",c.style.right="0",c.style.width="4px",c.style.height="4px",c.style.background="#0066FF",c.style.borderRadius="50%",c.style.margin="-2px -2px 0 0",c.style.cursor="pointer",o.append(c),this.scale.set(this._scale,this._scale,this._scale),t.style.fontSize="6px",t.style.color="#fff",o.style[this._sizeFlag]=a*100+"px",o.style.textAlign="center",this._sizeFlag==="height"?(o.style.borderLeft="0.1px dashed #fff",o.style.display="flex",o.style.alignItems="center",o.style.justifyContent="center",o.style.whiteSpace="nowrap",c.style.top="0",c.style.left="0",c.style.right="auto",c.style.margin="-2px 0 0 -2px"):o.style.borderBottom="0.1px dashed #fff",c.addEventListener("pointerdown",this._pointerdown),c.addEventListener("pointermove",this._pointermove),c.addEventListener("pointerup",this._pointercancel),s[this.props.axios]<i[this.props.axios]?this.rotateY(Math.PI):this._direction=-1}_getIndexByAxios(){return this.props.axios==="y"?1:this.props.axios==="z"?2:0}dispose(){this._lines.forEach(e=>e.dispose()),this._emitter.removeAllListeners(),this.endNode.removeEventListener("pointerdown",this._pointerdown),this.endNode.removeEventListener("pointermove",this._pointermove),this.endNode.removeEventListener("pointerup",this._pointercancel),this.element.remove(),this._caches.forEach(e=>e.clear()),this._caches=[]}}class Kl extends f.Object3D{constructor(){super(),this._box3=new f.Box3,this._line11=new fi("长:"),this._line12=new fi("宽:"),this._line13=new fi("高:"),this._outline=new on(0,0),this._radius=0,this._hasWidthConfig=!1,this._hasLengthConfig=!1,this._hasHeightConfig=!1,this.follow="",this.followOrigin=0,this.followScale=1,this.originOffset=0,this.translateCache=0,this.head=0,this.tail=0,this._change=()=>{if(!this._app)return;const e=this._app.camera;e&&this._outline.change(e.position)},this.add(this._outline,this._line11,this._line12,this._line13)}get hasSizeConfig(){return{length:this._hasLengthConfig,width:this._hasWidthConfig,height:this._hasHeightConfig}}get size(){return this._box3.clone()}get radius(){return this._radius}init(e){this._app=e,this._app.controls.addEventListener("change",this._change)}reset(){this.hide(),this._line11.reset()}generate(e,t=0){e&&(this._object=e),this.update(t)}show(e=!0){const t=[this._line11,this._line12,this._line13];e&&(this.visible=!0,this._outline.visible=!0,this._outline.show(),t.push(this._outline)),t.forEach(i=>{i.traverse(s=>{s.visible=!0,s instanceof ve.CSS2DObject&&(s.element.style.visibility="visible")})})}hide(e=!0){const t=[this._line11,this._line12,this._line13];e&&(this.visible=!1,this._outline.visible=!1,this._outline.hide(),t.push(this._outline)),t.forEach(i=>{i.traverse(s=>{s.visible=!1,s instanceof ve.CSS2DObject&&(s.element.style.visibility="hidden")})})}destroy(){var e;(e=this._app)==null||e.controls.removeEventListener("change",this._change),this._line11.destroy(),this._line12.destroy(),this._line13.destroy()}update(e=0){if(!this._object)return;const t=this._object,{box:i,maxRadius:s,hasLength:a,hasHeight:o,hasWidth:c}=vl(t);this.tail=Math.abs(i.min.x),this.head=Math.abs(i.max.x),this._hasWidthConfig=c,this._hasLengthConfig=a,this._hasHeightConfig=o,this._box3.copy(i),this._radius=s,this.follow&&e&&(this.originOffset=(this.followOrigin-e)*this.followScale),this._outline.update(this._radius),this._change();const u=this._box3.min.x,m=this._box3.max.x,d=this._box3.min.z,n=this._box3.max.z,l=this._box3.min.y,h=this._box3.max.y;let g=.2;const _=new f.Vector3(u,h,0),p=new f.Vector3(m,h,0);this._line11.update(_.clone().sub(new f.Vector3(0,-g/1.8,0)),p.clone().sub(new f.Vector3(0,-g/1.8,0)),this._radius);const v=new f.Vector3(m,l,0);this._line12.update(p.clone().add(new f.Vector3(g,0,0)),v.clone().add(new f.Vector3(g,0,0)),this._radius);const y=new f.Vector3(u,h,d),x=new f.Vector3(u,h,n),w=y.clone();w.y-=g/6;const b=x.clone();b.y-=g/6,this._line13.update(w,b,this._radius)}}class xr extends f.Object3D{constructor(e=.6,t=.4,i=.2){super(),this.isGoods=!0,this._generate(e,t,i)}updateSize(e=.1,t=.1,i=.1){this._generate(e,t,i)}clearAll(){Ae(this)}hide(){this.traverse(e=>e.visible=!1)}show(){this.traverse(e=>e.visible=!0)}_generate(e,t,i){this.clearAll();const s=new f.Mesh(new f.BoxGeometry(e,t,i),new f.MeshBasicMaterial({color:new f.Color("#0f5fd5"),transparent:!0,opacity:.4}));s.geometry.translate(0,0,i/2);const a=new f.EdgesGeometry(s.geometry),o=new f.LineDashedMaterial({color:new f.Color("#000"),dashSize:.015,gapSize:.015}),c=new f.LineSegments(a,o);c.computeLineDistances(),this.add(s,c)}}const Jl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAALSURBVAiZY2AAAgAABQABYlUyiAAAAABJRU5ErkJggg==";class as{constructor(e){this._props=e,this.name="",this.transparentTexture=Is.load(Jl),this._offscreen=new OffscreenCanvas(0,0),this._defaults={...e},this.target=e.target,this.parent=this.target.parent,this.reset()}get imageSize(){return this._props.imageSize}get size(){return this._props.size}get defaultConfigs(){return{canvasWidth:200,canvasHeight:200,scaleX:1,scaleY:1,x:0,y:0,ox:0,oy:0,url:this._defaults.imageUrl}}clear(){this.change()}change(e,t=new f.Vector2(1,1),i=new f.Vector2){this.imageUrl=e;let s;if(e){const a=new Image;a.crossOrigin="anonymous",a.src=e,a.onload=async()=>{var m;let o=window.devicePixelRatio*2;this._offscreen.width=a.width+o,this._offscreen.height=a.height+o;const c=this._offscreen.getContext("2d");c==null||c.clearRect(0,0,this._offscreen.width,this._offscreen.height),c==null||c.drawImage(a,o/2,o/2,a.width,a.height),s=new f.Texture(this._offscreen),s.minFilter=1003,s.colorSpace=f.SRGBColorSpace,s.wrapS=s.wrapT=f.ClampToEdgeWrapping,s.repeat.set(1/t.x,1/t.y),s.offset.set(i.x,i.y),s.flipY=!1,s.needsUpdate=!0;const u=this._props.target;u.material&&((m=u.material.map)==null||m.dispose(),s?(u.material.map=s,u.material.opacity=1):(u.material.map=this.transparentTexture,u.material.opacity=0))}}else{const a=this._props.target;a.material&&(a.material.map=this.transparentTexture)}}reset(){this._props=this._defaults,this.name=this._props.name,this.imageUrl=this._props.imageUrl,this.target=this._props.target,this.change(this.imageUrl||"")}dispose(){this._offscreen=null}}function an(r){return r.type?r.type==="Mesh":r.isMesh}const ec=r=>{const e=window.performance.now(),t=[];r.updateWorldMatrix(!0,!0),r.traverse(a=>{if(an(a)||a.geometry){const o=a.geometry.clone();if(o.applyMatrix4(a.matrixWorld),o.morphTargetsRelative=!1,o.morphAttributes)for(const c in o.morphAttributes)delete o.morphAttributes[c];for(const c in o.attributes)c!=="position"&&o.deleteAttribute(c);t.push(o)}});const i=jn.mergeGeometries(t,!1),s=window.performance.now()-e;return console.log(`Merge object: ${r.name} time: ${s.toFixed(2)} ms`),i},Is=new f.TextureLoader;Is.crossOrigin="anonymous";class ln extends f.Object3D{constructor(e){super(),this._props=e,this._emitter=new vt,this.addEventListener=this._emitter.addListener.bind(this._emitter),this._container=new f.Group,this.lines=new f.Group,this.sizeBox=new Kl,this._goodsSize=new yl(0,0,0),this._slots=[],this._logos=[],this._skins=[],this._levels=new Map,this._bodyOpacity=1,this._masts=new Map,this._liftMaxHeight=0,this._jackMaxHeight=0,this._forkMaxHeight=0,this.controllers=[],this.goods=[],this._breathLights=[],this._shelves=new Map,this._shelfMaxLevel=1,this._url="",this._showController=!0,this._showSlots=!0,this._shapeKeys=new Map,this._shapeKeyTimer=0,this._shapeKeyCache="",this._materialsCache=new Map,this.opacityCache=void 0,this._pointCloudMode=!1,this._pointClouds=[],this._originalMeshes=new Map,this._pointCloudAnimations=[],this.actions=[],this._url=e.url||"",this._url&&this.load(this._url).then(),this.add(this._container,this.lines),this._props.showSizeBox&&this.add(this.sizeBox),this.showController=typeof e.showController=="boolean"?e.showController:!0,this._showSlots=typeof e.showSlots=="boolean"?e.showSlots:!0}get shapeKeys(){return this._shapeKeys}get size(){const e=this.sizeBox.size.getSize(new f.Vector3);return{width:e.z,length:e.x,height:e.y}}get goodsSize(){return this._goodsSize}get showController(){return this._showController}set showController(e){this._showController=e,this.controllers.forEach(t=>e?t.show():t.hide())}get slots(){return this._slots}get logos(){return this._logos}get skins(){return this._skins}get bodyOpacity(){return this._bodyOpacity}get fork(){return this._fork}get forkHeight(){var e;return((e=this._fork)==null?void 0:e.position.z)||0}get liftHeight(){var e;return((e=this._lift)==null?void 0:e.position.z)||0}get jack(){return this._jack}get jackHeight(){var e;return((e=this._jack)==null?void 0:e.position.z)||0}get lift(){return this._lift}set bodyOpacity(e){this._bodyOpacity=e,e<1?this._materialsCache.forEach(t=>{t.mat.transparent=!0,t.mat.opacity=e,t.mat.metalness=0,t.mat.roughness=1,t.mat.color=new f.Color("#3859be"),t.mat.needsUpdate=!0}):this._materialsCache.forEach(t=>{t.mat.transparent=t.transparent,t.mat.opacity=t.opacity,t.mat.metalness=t.metalness,t.mat.roughness=t.roughness,t.mat.color=t.color,t.mat.needsUpdate=!0})}init(e){this._app=e,this.sizeBox.init(e),this.addEventListener("shape-key-changed",(t,i)=>{this._slots.forEach(s=>s.shapeKeyChanged(t,i)),this.sizeBox.follow===t?(this.sizeBox.generate(this._container,i),this.sizeBox.originOffset&&(this._container.traverse(s=>{s instanceof f.Mesh&&!s.userData.isDevice&&!s.userData.isBracket&&s.geometry.translate(this.sizeBox.originOffset-this.sizeBox.translateCache,0,0),s instanceof os&&!s.props.slot.userData.ignoreOriginChanged&&s.parent&&s.parent.position.add(new f.Vector3(this.sizeBox.originOffset-this.sizeBox.translateCache,0,0))}),this.sizeBox.translateCache=this.sizeBox.originOffset,this.sizeBox.generate(this._container))):this.sizeBox.generate(this._container),["width","length","height"].includes(t)&&this._emitter.emit("size-changed",t,i)})}async load(e,t=""){this._url=e,this.name||(this.name=e.substring(e.lastIndexOf("/")+1,e.lastIndexOf("."))),!e.startsWith("blob")&&e.endsWith(".sglb");let i;if(t==="glb"||e.endsWith(".glb"))i=(await gt.loadAsync(e)).scene;else{const a=await new vi({useCache:!0}).loadAsync(e);if(!a.glb)return;i=a.glb}this._generateAmr(i.clone(!0)),i=null,this._emitter.emit("amr-loaded")}changeSkin(e,t){e&&(e.change(t),this._app&&this._app.usePathTracing&&(this._app.sampleCount=0,this._app.usePathTracing&&(this._app.pathTracer.pausePathTracing=!1,this._app.pathTracer.updateMaterials())))}changeLogo(e,t){e.change(t.url,new f.Vector2(t.scaleX,t.scaleY),new f.Vector2(t.ox,t.oy))}setShapeKey(e,t,i=!0){i&&this._shapeKeyTimer&&e===this._shapeKeyCache&&clearTimeout(this._shapeKeyTimer),this._shapeKeyCache=e,this._shapeKeyTimer=window.setTimeout(()=>{this._container.traverse(s=>{if(!Object.keys(s.morphTargetDictionary||{}).includes(e))return;let a=t;s.userData[`origin_${e}`]&&(a-=s.userData[`origin_${e}`]);const o=s.morphTargetDictionary[e];s.morphTargetInfluences&&(s.morphTargetInfluences[o]=a),s instanceof f.Mesh&&s.geometry.translate(0,0,1e-5)}),i&&this._emitter.emit("shape-key-changed",e,t)},100)}_generateAmr(e){this._mergedGeometry=ec(e),e.traverse(t=>{t.userData.isShelf&&(this._shelf=t),t.userData.isFork&&(this._fork=t),t.userData.isMast&&t.userData.mastLevel&&this._masts.set(t.userData.mastLevel,t),t.userData.isJack&&(this._jack=t),t.userData.isLift&&(this._lift=t),Object.keys(t.morphTargetDictionary||{}).forEach(i=>{let s=t.morphTargetInfluences[t.morphTargetDictionary[i]];t.userData[`origin_${i}`]&&(s+=t.userData[`origin_${i}`]),this._shapeKeys.has(i)||this._shapeKeys.set(i,s)})}),e.traverse(t=>{if(t instanceof f.Mesh){if(t.castShadow=!0,t.receiveShadow=!0,t.material)if(Array.isArray(t.material))t.material.forEach(s=>{s.userData.changeColor&&(this.skins.find(a=>a.name===s.userData.name)||this.skins.push(new vs({name:s.userData.name,target:s})))});else{if(t.material.userData.isBreathLight&&t.material.emissiveIntensity){t.material.emissive||(t.material.emissive=new f.Color(16777215)),t.material.emissiveIntensity=2,t.material.toneMapped=!1;const s=1e3,a=new me.Tween(t.material).to({emissiveIntensity:.2}).easing(me.Easing.Quintic.InOut).duration(s),o=new me.Tween(t.material).to({emissiveIntensity:2}).easing(me.Easing.Quintic.InOut).duration(s);a.onComplete(()=>o.start()),o.onComplete(()=>a.start()),a.start(),this._breathLights.push(a,o)}t.material.userData.changeColor&&(this.skins.find(s=>s.name===t.material.userData.name)||this.skins.push(new vs({name:t.material.userData.name,target:t.material})))}if(t.material)if(Array.isArray(t.material))t.material.forEach(a=>{if(a.userData.isLOGO){t.material.transparent=!0;let o;const c={width:0,height:0};t.material.map&&t.material.map.image&&(c.width=t.material.map.image.width,c.height=t.material.map.image.height,o=ns(t.material.map.image));const u=new as({name:a.userData.name,target:t,size:cr(t),imageSize:c,imageUrl:o});this._logos.push(u)}a.userData.isTransparent&&(a.transparent=!0),this._materialsCache.set(a.uuid,{opacity:a.opacity,transparent:a.transparent,roughness:a.roughness,metalness:a.metalness,color:a.color,mat:a})});else{const s=t.material;if(s.userData.isLOGO){t.material.transparent=!0;let a;const o={width:0,height:0};t.material.map&&t.material.map.image&&(o.width=t.material.map.image.width,o.height=t.material.map.image.height,a=ns(t.material.map.image));const c=new as({name:s.userData.name,target:t,size:cr(t),imageSize:o,imageUrl:a});this._logos.push(c)}s.userData.isTransparent&&(s.transparent=!0),this._materialsCache.set(s.uuid,{opacity:s.opacity,transparent:s.transparent,roughness:s.roughness,metalness:s.metalness,color:s.color,mat:s})}}this.generateController(t,e),this.generateDimension(t,e);const i=this.generateSlot(t,e);i&&this._slots.push(i),t.userData.isOrigin&&Object.keys(t.userData).forEach(a=>{if(a.startsWith("follow_")){const o=a.replace("follow_","");this.shapeKeys.has(o)&&(this.sizeBox.follow=o,this.sizeBox.followOrigin=this._shapeKeys.get(o)||0,this.sizeBox.followScale=t.userData[a])}})}),this.slots.forEach(t=>{t.props.mirrorTarget&&(t.mirrorTarget=this.slots.find(i=>i.props.slot.name===t.props.mirrorTarget))}),e.updateMatrixWorld(!0),this._container.add(e),this.sizeBox.generate(e),this.sizeBox.show()}setHeight(e){this.setShapeKey("height",e)}setWeight(e){this.setShapeKey("width",e)}setLength(e){this.setShapeKey("length",e)}limitValue(e){this.name==="SFL-CDD14"&&(e>1.6?this.setShapeKey("mast",1):this.setShapeKey("mast",0)),["SFL-CDD20","SFL-CDD20-Y"].includes(this.name)&&(e>1.6?this.setShapeKey("mast",1):this.setShapeKey("mast",0)),this.name==="SFL-CDD15"&&(e>2.43?this.setShapeKey("mast",1):this.setShapeKey("mast",0)),["SFL-CPD20-Y","SFL-CPD30-Y"].includes(this.name)&&(e>3.5?this.setShapeKey("mast",2):e>3?this.setShapeKey("mast",1):this.setShapeKey("mast",0))}setForkHeight(e){if(this._fork){if(e>this._forkMaxHeight&&(e=this._forkMaxHeight),this._fork.position.z=e,this._masts.size===1){const t=this._masts.get(2),i=(t==null?void 0:t.userData.startHeight)||.1;t&&(t.position.z=(e-i)*.5)}this._emitter.emit("fork-height-change",e)}}setForkMaxHeight(e){this._fork&&(this._forkMaxHeight=e,this.limitValue(e),this.controllers.forEach(t=>{t.name.toLowerCase().includes("fork")&&(t.props.max=e)}),this._fork&&this.forkHeight>this._forkMaxHeight&&this.setForkHeight(e))}setLiftHeight(e){this._lift&&(e>this._liftMaxHeight&&(e=this._liftMaxHeight),this._lift.position.z=e)}getLiftMaxHeight(){return this._liftMaxHeight}setLiftMaxHeight(e){if(!this._lift)return;this._liftMaxHeight=e,this.limitValue(e),this.controllers.forEach(a=>{a.name.toLowerCase().includes("lift")&&(a.props.max=e)}),this.liftHeight>this._liftMaxHeight&&this.setLiftHeight(e);let t=.46;this.levelOffset&&(t=this.levelOffset+.1);let i=e+t;const s=this.getShelfMinHeight()+t||0;i<s&&(i=s),this.setHeight(i)}setJackMaxHeight(e){this._jack&&(this._jackMaxHeight=e,this.limitValue(e),this.controllers.forEach(t=>{t.name.toLowerCase().includes("jack")&&(t.props.max=e)}),this.jackHeight>this._jackMaxHeight&&this.setJackHeight(e))}setJackHeight(e){this._jack&&(e>this._jackMaxHeight&&(e=this._jackMaxHeight),requestAnimationFrame(()=>{this.setShapeKey("jackHeight",e,!1)}),this._jack.position.z=e)}setLevel(e){}setGoodsSize(e){this._goodsSize.length=e.length,this._goodsSize.width=e.width,this._goodsSize.height=e.height,this.setShelfLevel(this._shelfMaxLevel)}getShelfMinHeight(){const e=this.levelOffset,t=this._shelfMaxLevel,i=this._shelves.get(0);return i?i.position.z+e*t+.1:0}getShelfMaxShelfHeight(){const e=this.levelOffset,t=this._shelfMaxLevel,i=this._shelves.get(0);if(i)return i.position.z+e*(t-1)}get levelOffset(){return this._goodsSize.height+.2}setShapeKeyToMesh(e,t,i){if(!Object.keys(e.morphTargetDictionary||{}).includes(t))return;const s=e.morphTargetDictionary[t];e.morphTargetInfluences&&(e.morphTargetInfluences[s]=i),e.geometry.translate(0,0,1e-5)}setShelfLevel(e=3){var s;if(!this._shelf)return;this._shelfMaxLevel=e;const t=this.levelOffset;this._shelves.delete(0),this._shelves.forEach(a=>{Ae(a),a.parent&&a.removeFromParent()}),this.goods=[],this._shelves.clear(),this._shelves.set(0,this._shelf);for(let a=1;a<e;a++){if(!this._shelf)return;this._shelf.traverse(u=>{an(u)&&(this.setShapeKeyToMesh(u,"goodsWidth",this._goodsSize.width),this.setShapeKeyToMesh(u,"goodsLength",this._goodsSize.length))});const o=this._shelf.clone(!0);o.position.z+=t*a,this._shelves.set(a,o),(s=this._shelf.parent)==null||s.add(o);let c;if(o.traverse(u=>{u.userData.isShelfContainer&&(c=u)}),(this.shapeKeys.has("goodsLength")||this.shapeKeys.has("goodsWidth"))&&(c==null||c.position.setX((c==null?void 0:c.position.x)-this._goodsSize.length/2)),c){const u=new xr(this._goodsSize.length,this._goodsSize.width,this._goodsSize.height);if(c.add(u),this.goods.push(u),a===1){const m=new xr(this._goodsSize.length,this._goodsSize.width,this._goodsSize.height);m.position.z-=t,c.add(m),this.goods.push(m)}}}const i=this.getShelfMinHeight()||0;this._liftMaxHeight<i&&this.setLiftMaxHeight(i)}generateOuterLine(){this.traverse(e=>{if(e.userData.isOuterObject){const t=this.sizeBox.radius;this._outline?this._outline.update(t):(this._outline=new on(t,0),this.add(this._outline))}})}generateController(e,t){if(this.showController){if(e.userData.isForkController&&e.userData.target){const i=e.userData.target.name,{min:s,max:a}=e.userData;let o;if(t.traverse(u=>{u.name===i&&(o=u)}),!o)return;const c=new yr({name:"",target:i,default:0,min:s,max:a},o);e.add(c)}else if(e.userData.isController&&e.userData.target){const i=e.userData.target.name,{min:s,max:a}=e.userData;let o;if(t.traverse(u=>{u.name===i&&(o=u)}),!o)return;const c=new yr({name:"",userData:e.userData,target:e.userData.key,default:0,min:s||0,max:a||1},o);e.add(c),this.controllers.push(c),(o.userData.isFork||o.userData.isLift||o.userData.isJack)&&(this._forkMaxHeight=a||1,this._liftMaxHeight=a||1,this._jackMaxHeight=a||1,c.addListener("change",u=>{this.setForkHeight(u),this.setLiftHeight(u),this.setJackHeight(u)}))}}}generateDimension(e,t){if(e.userData.isDimension){const i=e.userData.divider,s=ml(e.userData.startOrigin),a=e.userData.axios;let o,c;if(a==="x"?(o=new f.Vector3(e.userData.start-e.position.x,0,0),c=o.clone().setX(e.userData.end-e.position.x)):a==="z"?(o=new f.Vector3(0,e.userData.start-e.position.y,0),c=o.clone().setY(e.userData.end-e.position.y)):(o=new f.Vector3(0,0,e.userData.start-e.position.z),c=o.clone().setZ(e.userData.end-e.position.z)),!Object.keys(e.userData).flatMap(n=>n.startsWith("target")?e.userData[n].name:[]).length)return;const d=new Xl({start:o,end:c,startOrigin:s,axios:a,divider:i});e.add(d)}}generateSlot(e,t){var i,s;if(e.userData.isSlot){const a=e.userData.name,o=e.userData.isMirror,c=(i=e.userData.mirrorSlot)==null?void 0:i.name;if(a){const u=e.userData.holeTarget&&e.userData.holeTarget.name;let m;u&&t.traverse(h=>{h.name===u&&(m=h)});const d=new Map;Object.keys(e.userData).forEach(h=>{if(h.startsWith("follow_")){const g=h.split("_")[1];if(g){let _=e.userData[h];d.set(g,{scale:_,origin:this.shapeKeys.get(g)||0})}}});const n=(s=this._app)==null?void 0:s.props.isMobile,l=new os({name:a,follows:d,slot:e,show:this._showSlots,isMirror:o,mirrorTarget:c,isMobile:n});return l.holeTarget=m,l.addEventListener($.ON_DROP,h=>{this._app&&this._app.props.useSound&&this._app.sound.play()}),l.addEventListener($.ON_BEFORE_SELECTED,h=>{this._slots.forEach(g=>{g.selected&&(g.selected=!1)})}),l.addEventListener($.ON_ERROR_STATE_CHANGE,h=>{if(this._app)if(this._app._outlinePassError.selectedObjects=this._app._outlinePassError.selectedObjects.filter(g=>!!g.parent),h){if(l.device){if(this._app._outlinePassError.selectedObjects.find(_=>{var p;return _.parent==((p=l.device)==null?void 0:p.parent)}))return;this._app._outlinePassError.selectedObjects=[l.device,...this._app._outlinePassError.selectedObjects]}}else l.device&&(this._app._outlinePassError.selectedObjects=this._app._outlinePassError.selectedObjects.filter(g=>{var _;return g.parent!=((_=l.device)==null?void 0:_.parent)}))}),l}}}clean(){this._emitter.removeAllListeners(),this.controllers.forEach(e=>e.dispose()),this.controllers=[],Ae(this._container),this._levels.forEach(e=>e.destroy()),this._levels.clear(),this._slots=[],this._logos=[],this._skins=[],this._materialsCache.clear(),this.opacityCache=void 0,this._breathLights.forEach(e=>e.stop()),this._breathLights=[],this.sizeBox.reset()}destroy(){this._pointCloudMode&&this._clearPointClouds(),this.clean(),this.sizeBox.destroy()}setPointCloudMode(e){this._pointCloudMode=e,e?(this.sizeBox.hide(),this.controllers.forEach(t=>t.hide()),this.slots.forEach(t=>t.hide()),this._createPointClouds()):(this.sizeBox.show(),this.slots.forEach(t=>t.hide()),this.controllers.forEach(t=>t.show()),this._clearPointClouds())}_createPointClouds(){this._clearPointClouds();const e=[],t=[],i=.02,s=.05,a=1e7;new f.Vector3;const o=new f.Vector3(1/0,1/0,1/0),c=new f.Vector3(-1/0,-1/0,-1/0);this._container.traverse(d=>{if(d instanceof f.Mesh&&d.geometry&&d.visible){this._originalMeshes.set(d.uuid,{mesh:d,visible:d.visible}),d.visible=!1,d.geometry.computeBoundingBox();const n=d.geometry.boundingBox.clone();n.applyMatrix4(d.matrixWorld),o.min(n.min),c.max(n.max);const l=d.geometry,h=l.attributes.position,g=l.index;if(h){d.updateMatrixWorld();const _=d.matrixWorld;if(g){const p=g.array;for(let v=0;v<p.length;v+=3){const y=p[v],x=p[v+1],w=p[v+2],b=new f.Vector3(h.getX(y),h.getY(y),h.getZ(y)).applyMatrix4(_),T=new f.Vector3(h.getX(x),h.getY(x),h.getZ(x)).applyMatrix4(_),M=new f.Vector3(h.getX(w),h.getY(w),h.getZ(w)).applyMatrix4(_);e.length<a*3&&this._generatePointsOnTriangle(b,T,M,i,s,e,t)}}else for(let p=0;p<h.count;p++){const v=new f.Vector3(h.getX(p),h.getY(p),h.getZ(p)).applyMatrix4(_);e.push(v.x,v.y,v.z);const y=(v.y-o.y)/(c.y-o.y);t.push(0,y*.5,.5+y*.5)}}}});const u=this._removeDuplicatePoints(e,t,i*.5),m=1e5;if(u.positions.length>m*3){const d=m*3/u.positions.length,n=[],l=[];for(let h=0;h<u.positions.length;h+=3)Math.random()<d&&(n.push(u.positions[h],u.positions[h+1],u.positions[h+2]),l.push(u.colors[h],u.colors[h+1],u.colors[h+2]));u.positions=n,u.colors=l}if(u.positions.length>0){const d=o.clone().add(c).multiplyScalar(.5),n=c.clone().sub(o),l=Math.max(n.x,n.y,n.z);if(l===0||!isFinite(l)){console.warn("Point cloud generation failed: invalid model bounds");return}const h=new Float32Array(u.positions.length),g=new Float32Array(u.positions),_=new Float32Array(u.colors.length),p=new Float32Array(u.colors);for(let S=0;S<u.positions.length;S+=3){const C=S/3;g[S],g[S+1],g[S+2];const E=C/(u.positions.length/3)*Math.PI*4,A=Math.random(),P=Math.sqrt(A),I=.05+Math.random()*.1,L=l*2.2*(I+P*(1-I)),F=3,B=C%F*(Math.PI*2/F)+E,U=Math.random()*.4,H=L*(1+U),j=P,Y=.25+P*.2,de=(Math.random()<.5?-1:1)*Math.random()*l*Y*j,Se=(Math.random()-.5)*l*.25*j,ae=l*.3*(1+P*.5),Mi=1.2,Ci=.85;h[S]=d.x+Math.cos(B)*H*Mi+(Math.random()-.5)*ae,h[S+1]=d.y+de+Se,h[S+2]=d.z+Math.sin(B)*H*Ci+(Math.random()-.5)*ae;const Pi=Math.random(),Q=Math.random()<.1?1.5:1,Ri=P>.75?.7:P>.5?.4:0,We=Pi*(1-Ri);We<.7?(_[S]=(.1+Math.random()*.2)*Q,_[S+1]=(.6+Math.random()*.4)*Q,_[S+2]=(.8+Math.random()*.2)*Q):We<.8?(_[S]=(.6+Math.random()*.4)*Q,_[S+1]=(.1+Math.random()*.3)*Q,_[S+2]=(.8+Math.random()*.2)*Q):We<.92?(_[S]=(.8+Math.random()*.2)*Q,_[S+1]=(.2+Math.random()*.3)*Q,_[S+2]=(.6+Math.random()*.3)*Q):(_[S]=(.9+Math.random()*.1)*Q,_[S+1]=(.4+Math.random()*.3)*Q,_[S+2]=(.1+Math.random()*.2)*Q)}const v=new f.BufferGeometry;v.setAttribute("position",new f.Float32BufferAttribute(h,3)),v.setAttribute("color",new f.Float32BufferAttribute(_,3));const y=new f.PointsMaterial({size:.002,color:"#367BF5",vertexColors:!1,opacity:.1,transparent:!1,depthWrite:!1,sizeAttenuation:!0}),x=new f.Points(v,y);this.add(x),this._pointClouds.push(x);const w=v.attributes.position,b=v.attributes.color,T={progress:0};y.opacity=.3;const M=new me.Tween(T).to({progress:1},600).easing(me.Easing.Linear.None).onUpdate(()=>{const S=T.progress,C=w.array,R=b.array,E=.6,A=S<E,P=S<.9,I=A?S/E:1,L=I*I,F=L*Math.PI*1.25,B=A?0:(S-E)/(1-E),H=(1-Math.pow(1-B,3))*Math.PI*.75,j=A?F:F+H;for(let k=0;k<C.length;k+=3){const de=h[k],Se=h[k+1],ae=h[k+2],Mi=g[k],Ci=g[k+1],Pi=g[k+2],Q=A?L:1,Ri=de+(Mi-de)*Q,We=Se+(Ci-Se)*Q,_n=ae+(Pi-ae)*Q,Ge=Ri-d.x,qe=_n-d.z;if(A){const yt=Math.sqrt(Ge*Ge+qe*qe),xt=Math.atan2(qe,Ge)+j;C[k]=d.x+Math.cos(xt)*yt,C[k+1]=We,C[k+2]=d.z+Math.sin(xt)*yt}else{const yt=Math.sqrt(Ge*Ge+qe*qe),xt=Math.atan2(qe,Ge)+j;C[k]=d.x+Math.cos(xt)*yt,C[k+1]=We,C[k+2]=d.z+Math.sin(xt)*yt}P&&(R[k]=_[k]+(p[k]-_[k])*S,R[k+1]=_[k+1]+(p[k+1]-_[k+1])*S,R[k+2]=_[k+2]+(p[k+2]-_[k+2])*S)}let Y=.3;A?Y=.3+.4*L:Y=.7-.1*B,y.opacity=Y,w.needsUpdate=!0,P&&(b.needsUpdate=!0)}).onComplete(()=>{const S=this._pointCloudAnimations.indexOf(M);S>-1&&this._pointCloudAnimations.splice(S,1);const C=new Br.LineMaterial({color:"#222",linewidth:.001,opacity:.1,transparent:!0,depthTest:!0,depthWrite:!1}),R=new f.MeshBasicMaterial({colorWrite:!0,color:"#0000ff",depthWrite:!1,depthTest:!0,transparent:!0,opacity:.12}),E=new f.Mesh(this._mergedGeometry,R);E.renderOrder=0,this.lines.add(E);const A=new f.EdgesGeometry(this._mergedGeometry,15),P=new Wn.LineSegmentsGeometry().fromEdgesGeometry(A),I=new Nn.LineSegments2(P,C);I.renderOrder=1,this.slots.forEach(L=>L.show()),x.visible=!1}).start();this._pointCloudAnimations.push(M)}}_generatePointsOnTriangle(e,t,i,s,a,o,c){const u=e.distanceTo(t),m=t.distanceTo(i),d=i.distanceTo(e),n=Math.max(u,m,d),l=Math.max(2,Math.ceil(n/s));if(n>a)for(let h=0;h<=l;h++)for(let g=0;g<=l-h;g++){const _=h/l,p=g/l,v=1-_-p;if(v>=0){const y=new f.Vector3().addScaledVector(e,_).addScaledVector(t,p).addScaledVector(i,v);o.push(y.x,y.y,y.z),c.push(0,y.y/5,1-y.y/1.4)}}else{o.push(e.x,e.y,e.z),o.push(t.x,t.y,t.z),o.push(i.x,i.y,i.z);for(let h=0;h<3;h++)c.push(0,0,0)}}_removeDuplicatePoints(e,t,i){const s=[],a=[],o=new Map;for(let c=0;c<e.length;c+=3){const u=e[c],m=e[c+1],d=e[c+2],n=`${Math.round(u/i)}_${Math.round(m/i)}_${Math.round(d/i)}`;o.has(n)||(o.set(n,!0),s.push(u,m,d),a.push(t[c],t[c+1],t[c+2]))}return{positions:s,colors:a}}_clearPointClouds(){this._pointCloudAnimations.forEach(e=>{e.stop()}),this._pointCloudAnimations=[],this._pointClouds.forEach(e=>{e.geometry.dispose(),e.material instanceof f.PointsMaterial&&e.material.dispose(),e.removeFromParent()}),this._pointClouds=[],this._originalMeshes.forEach(({mesh:e,visible:t})=>{e.visible=t}),this._originalMeshes.clear()}playAction(e,t=!0){}pauseAction(e){console.log(`Pausing action: ${e}`)}}const cn=0,tc=1,ic=2,wr=2,Hi=1.25,br=1,Vt=6*4+4+4,Ti=65535,sc=Math.pow(2,-24),Ni=Symbol("SKIP_GENERATION");function rc(r){return r.index?r.index.count:r.attributes.position.count}function _t(r){return rc(r)/3}function nc(r,e=ArrayBuffer){return r>65535?new Uint32Array(new e(4*r)):new Uint16Array(new e(2*r))}function oc(r,e){if(!r.index){const t=r.attributes.position.count,i=e.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,s=nc(t,i);r.setIndex(new f.BufferAttribute(s,1));for(let a=0;a<t;a++)s[a]=a}}function un(r){const e=_t(r),t=r.drawRange,i=t.start/3,s=(t.start+t.count)/3,a=Math.max(0,i),o=Math.min(e,s)-a;return[{offset:Math.floor(a),count:Math.floor(o)}]}function hn(r){if(!r.groups||!r.groups.length)return un(r);const e=[],t=new Set,i=r.drawRange,s=i.start/3,a=(i.start+i.count)/3;for(const c of r.groups){const u=c.start/3,m=(c.start+c.count)/3;t.add(Math.max(s,u)),t.add(Math.min(a,m))}const o=Array.from(t.values()).sort((c,u)=>c-u);for(let c=0;c<o.length-1;c++){const u=o[c],m=o[c+1];e.push({offset:Math.floor(u),count:Math.floor(m-u)})}return e}function ac(r){if(r.groups.length===0)return!1;const e=_t(r),t=hn(r).sort((a,o)=>a.offset-o.offset),i=t[t.length-1];i.count=Math.min(e-i.offset,i.count);let s=0;return t.forEach(({count:a})=>s+=a),e!==s}function Wi(r,e,t,i,s){let a=1/0,o=1/0,c=1/0,u=-1/0,m=-1/0,d=-1/0,n=1/0,l=1/0,h=1/0,g=-1/0,_=-1/0,p=-1/0;for(let v=e*6,y=(e+t)*6;v<y;v+=6){const x=r[v+0],w=r[v+1],b=x-w,T=x+w;b<a&&(a=b),T>u&&(u=T),x<n&&(n=x),x>g&&(g=x);const M=r[v+2],S=r[v+3],C=M-S,R=M+S;C<o&&(o=C),R>m&&(m=R),M<l&&(l=M),M>_&&(_=M);const E=r[v+4],A=r[v+5],P=E-A,I=E+A;P<c&&(c=P),I>d&&(d=I),E<h&&(h=E),E>p&&(p=E)}i[0]=a,i[1]=o,i[2]=c,i[3]=u,i[4]=m,i[5]=d,s[0]=n,s[1]=l,s[2]=h,s[3]=g,s[4]=_,s[5]=p}function lc(r,e=null,t=null,i=null){const s=r.attributes.position,a=r.index?r.index.array:null,o=_t(r),c=s.normalized;let u;e===null?(u=new Float32Array(o*6*4),t=0,i=o):(u=e,t=t||0,i=i||o);const m=s.array,d=s.offset||0;let n=3;s.isInterleavedBufferAttribute&&(n=s.data.stride);const l=["getX","getY","getZ"];for(let h=t;h<t+i;h++){const g=h*3,_=h*6;let p=g+0,v=g+1,y=g+2;a&&(p=a[p],v=a[v],y=a[y]),c||(p=p*n+d,v=v*n+d,y=y*n+d);for(let x=0;x<3;x++){let w,b,T;c?(w=s[l[x]](p),b=s[l[x]](v),T=s[l[x]](y)):(w=m[p+x],b=m[v+x],T=m[y+x]);let M=w;b<M&&(M=b),T<M&&(M=T);let S=w;b>S&&(S=b),T>S&&(S=T);const C=(S-M)/2,R=x*2;u[_+R+0]=M+C,u[_+R+1]=C+(Math.abs(M)+C)*sc}}return u}function G(r,e,t){return t.min.x=e[r],t.min.y=e[r+1],t.min.z=e[r+2],t.max.x=e[r+3],t.max.y=e[r+4],t.max.z=e[r+5],t}function Ar(r){let e=-1,t=-1/0;for(let i=0;i<3;i++){const s=r[i+3]-r[i];s>t&&(t=s,e=i)}return e}function Tr(r,e){e.set(r)}function Sr(r,e,t){let i,s;for(let a=0;a<3;a++){const o=a+3;i=r[a],s=e[a],t[a]=i<s?i:s,i=r[o],s=e[o],t[o]=i>s?i:s}}function Qt(r,e,t){for(let i=0;i<3;i++){const s=e[r+2*i],a=e[r+2*i+1],o=s-a,c=s+a;o<t[i]&&(t[i]=o),c>t[i+3]&&(t[i+3]=c)}}function Pt(r){const e=r[3]-r[0],t=r[4]-r[1],i=r[5]-r[2];return 2*(e*t+t*i+i*e)}const ye=32,cc=(r,e)=>r.candidate-e.candidate,Pe=new Array(ye).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),Zt=new Float32Array(6);function uc(r,e,t,i,s,a){let o=-1,c=0;if(a===cn)o=Ar(e),o!==-1&&(c=(e[o]+e[o+3])/2);else if(a===tc)o=Ar(r),o!==-1&&(c=hc(t,i,s,o));else if(a===ic){const u=Pt(r);let m=Hi*s;const d=i*6,n=(i+s)*6;for(let l=0;l<3;l++){const h=e[l],p=(e[l+3]-h)/ye;if(s<ye/4){const v=[...Pe];v.length=s;let y=0;for(let w=d;w<n;w+=6,y++){const b=v[y];b.candidate=t[w+2*l],b.count=0;const{bounds:T,leftCacheBounds:M,rightCacheBounds:S}=b;for(let C=0;C<3;C++)S[C]=1/0,S[C+3]=-1/0,M[C]=1/0,M[C+3]=-1/0,T[C]=1/0,T[C+3]=-1/0;Qt(w,t,T)}v.sort(cc);let x=s;for(let w=0;w<x;w++){const b=v[w];for(;w+1<x&&v[w+1].candidate===b.candidate;)v.splice(w+1,1),x--}for(let w=d;w<n;w+=6){const b=t[w+2*l];for(let T=0;T<x;T++){const M=v[T];b>=M.candidate?Qt(w,t,M.rightCacheBounds):(Qt(w,t,M.leftCacheBounds),M.count++)}}for(let w=0;w<x;w++){const b=v[w],T=b.count,M=s-b.count,S=b.leftCacheBounds,C=b.rightCacheBounds;let R=0;T!==0&&(R=Pt(S)/u);let E=0;M!==0&&(E=Pt(C)/u);const A=br+Hi*(R*T+E*M);A<m&&(o=l,m=A,c=b.candidate)}}else{for(let x=0;x<ye;x++){const w=Pe[x];w.count=0,w.candidate=h+p+x*p;const b=w.bounds;for(let T=0;T<3;T++)b[T]=1/0,b[T+3]=-1/0}for(let x=d;x<n;x+=6){let T=~~((t[x+2*l]-h)/p);T>=ye&&(T=ye-1);const M=Pe[T];M.count++,Qt(x,t,M.bounds)}const v=Pe[ye-1];Tr(v.bounds,v.rightCacheBounds);for(let x=ye-2;x>=0;x--){const w=Pe[x],b=Pe[x+1];Sr(w.bounds,b.rightCacheBounds,w.rightCacheBounds)}let y=0;for(let x=0;x<ye-1;x++){const w=Pe[x],b=w.count,T=w.bounds,S=Pe[x+1].rightCacheBounds;b!==0&&(y===0?Tr(T,Zt):Sr(T,Zt,Zt)),y+=b;let C=0,R=0;y!==0&&(C=Pt(Zt)/u);const E=s-y;E!==0&&(R=Pt(S)/u);const A=br+Hi*(C*y+R*E);A<m&&(o=l,m=A,c=w.candidate)}}}}else console.warn(`MeshBVH: Invalid build strategy value ${a} used.`);return{axis:o,pos:c}}function hc(r,e,t,i){let s=0;for(let a=e,o=e+t;a<o;a++)s+=r[a*6+i*2];return s/t}class Gi{constructor(){this.boundingData=new Float32Array(6)}}function fc(r,e,t,i,s,a){let o=i,c=i+s-1;const u=a.pos,m=a.axis*2;for(;;){for(;o<=c&&t[o*6+m]<u;)o++;for(;o<=c&&t[c*6+m]>=u;)c--;if(o<c){for(let d=0;d<3;d++){let n=e[o*3+d];e[o*3+d]=e[c*3+d],e[c*3+d]=n}for(let d=0;d<6;d++){let n=t[o*6+d];t[o*6+d]=t[c*6+d],t[c*6+d]=n}o++,c--}else return o}}function dc(r,e,t,i,s,a){let o=i,c=i+s-1;const u=a.pos,m=a.axis*2;for(;;){for(;o<=c&&t[o*6+m]<u;)o++;for(;o<=c&&t[c*6+m]>=u;)c--;if(o<c){let d=r[o];r[o]=r[c],r[c]=d;for(let n=0;n<6;n++){let l=t[o*6+n];t[o*6+n]=t[c*6+n],t[c*6+n]=l}o++,c--}else return o}}function J(r,e){return e[r+15]===65535}function ie(r,e){return e[r+6]}function se(r,e){return e[r+14]}function re(r){return r+8}function ne(r,e){return e[r+6]}function fn(r,e){return e[r+7]}let dn,Bt,di,pn;const pc=Math.pow(2,32);function ls(r){return"count"in r?1:1+ls(r.left)+ls(r.right)}function mc(r,e,t){return dn=new Float32Array(t),Bt=new Uint32Array(t),di=new Uint16Array(t),pn=new Uint8Array(t),cs(r,e)}function cs(r,e){const t=r/4,i=r/2,s="count"in e,a=e.boundingData;for(let o=0;o<6;o++)dn[t+o]=a[o];if(s)if(e.buffer){const o=e.buffer;pn.set(new Uint8Array(o),r);for(let c=r,u=r+o.byteLength;c<u;c+=Vt){const m=c/2;J(m,di)||(Bt[c/4+6]+=t)}return r+o.byteLength}else{const o=e.offset,c=e.count;return Bt[t+6]=o,di[i+14]=c,di[i+15]=Ti,r+Vt}else{const o=e.left,c=e.right,u=e.splitAxis;let m;if(m=cs(r+Vt,o),m/4>pc)throw new Error("MeshBVH: Cannot store child pointer greater than 32 bits.");return Bt[t+6]=m/4,m=cs(m,c),Bt[t+7]=u,m}}function gc(r,e){const t=(r.index?r.index.count:r.attributes.position.count)/3,i=t>2**16,s=i?4:2,a=e?new SharedArrayBuffer(t*s):new ArrayBuffer(t*s),o=i?new Uint32Array(a):new Uint16Array(a);for(let c=0,u=o.length;c<u;c++)o[c]=c;return o}function vc(r,e,t,i,s){const{maxDepth:a,verbose:o,maxLeafTris:c,strategy:u,onProgress:m,indirect:d}=s,n=r._indirectBuffer,l=r.geometry,h=l.index?l.index.array:null,g=d?dc:fc,_=_t(l),p=new Float32Array(6);let v=!1;const y=new Gi;return Wi(e,t,i,y.boundingData,p),w(y,t,i,p),y;function x(b){m&&m(b/_)}function w(b,T,M,S=null,C=0){if(!v&&C>=a&&(v=!0,o&&(console.warn(`MeshBVH: Max depth of ${a} reached when generating BVH. Consider increasing maxDepth.`),console.warn(l))),M<=c||C>=a)return x(T+M),b.offset=T,b.count=M,b;const R=uc(b.boundingData,S,e,T,M,u);if(R.axis===-1)return x(T+M),b.offset=T,b.count=M,b;const E=g(n,h,e,T,M,R);if(E===T||E===T+M)x(T+M),b.offset=T,b.count=M;else{b.splitAxis=R.axis;const A=new Gi,P=T,I=E-T;b.left=A,Wi(e,P,I,A.boundingData,p),w(A,P,I,p,C+1);const L=new Gi,F=E,B=M-I;b.right=L,Wi(e,F,B,L.boundingData,p),w(L,F,B,p,C+1)}return b}}function _c(r,e){const t=r.geometry;e.indirect&&(r._indirectBuffer=gc(t,e.useSharedArrayBuffer),ac(t)&&!e.verbose&&console.warn('MeshBVH: Provided geometry contains groups that do not fully span the vertex contents while using the "indirect" option. BVH may incorrectly report intersections on unrendered portions of the geometry.')),r._indirectBuffer||oc(t,e);const i=e.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,s=lc(t),a=e.indirect?un(t):hn(t);r._roots=a.map(o=>{const c=vc(r,s,o.offset,o.count,e),u=ls(c),m=new i(Vt*u);return mc(0,c,m),m})}class Te{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(e,t){let i=1/0,s=-1/0;for(let a=0,o=e.length;a<o;a++){const u=e[a][t];i=u<i?u:i,s=u>s?u:s}this.min=i,this.max=s}setFromPoints(e,t){let i=1/0,s=-1/0;for(let a=0,o=t.length;a<o;a++){const c=t[a],u=e.dot(c);i=u<i?u:i,s=u>s?u:s}this.min=i,this.max=s}isSeparated(e){return this.min>e.max||e.min>this.max}}Te.prototype.setFromBox=function(){const r=new f.Vector3;return function(t,i){const s=i.min,a=i.max;let o=1/0,c=-1/0;for(let u=0;u<=1;u++)for(let m=0;m<=1;m++)for(let d=0;d<=1;d++){r.x=s.x*u+a.x*(1-u),r.y=s.y*m+a.y*(1-m),r.z=s.z*d+a.z*(1-d);const n=t.dot(r);o=Math.min(n,o),c=Math.max(n,c)}this.min=o,this.max=c}}();const yc=function(){const r=new f.Vector3,e=new f.Vector3,t=new f.Vector3;return function(s,a,o){const c=s.start,u=r,m=a.start,d=e;t.subVectors(c,m),r.subVectors(s.end,s.start),e.subVectors(a.end,a.start);const n=t.dot(d),l=d.dot(u),h=d.dot(d),g=t.dot(u),p=u.dot(u)*h-l*l;let v,y;p!==0?v=(n*l-g*h)/p:v=0,y=(n+v*l)/h,o.x=v,o.y=y}}(),Es=function(){const r=new f.Vector2,e=new f.Vector3,t=new f.Vector3;return function(s,a,o,c){yc(s,a,r);let u=r.x,m=r.y;if(u>=0&&u<=1&&m>=0&&m<=1){s.at(u,o),a.at(m,c);return}else if(u>=0&&u<=1){m<0?a.at(0,c):a.at(1,c),s.closestPointToPoint(c,!0,o);return}else if(m>=0&&m<=1){u<0?s.at(0,o):s.at(1,o),a.closestPointToPoint(o,!0,c);return}else{let d;u<0?d=s.start:d=s.end;let n;m<0?n=a.start:n=a.end;const l=e,h=t;if(s.closestPointToPoint(n,!0,e),a.closestPointToPoint(d,!0,t),l.distanceToSquared(n)<=h.distanceToSquared(d)){o.copy(l),c.copy(n);return}else{o.copy(d),c.copy(h);return}}}}(),xc=function(){const r=new f.Vector3,e=new f.Vector3,t=new f.Plane,i=new f.Line3;return function(a,o){const{radius:c,center:u}=a,{a:m,b:d,c:n}=o;if(i.start=m,i.end=d,i.closestPointToPoint(u,!0,r).distanceTo(u)<=c||(i.start=m,i.end=n,i.closestPointToPoint(u,!0,r).distanceTo(u)<=c)||(i.start=d,i.end=n,i.closestPointToPoint(u,!0,r).distanceTo(u)<=c))return!0;const _=o.getPlane(t);if(Math.abs(_.distanceToPoint(u))<=c){const v=_.projectPoint(u,e);if(o.containsPoint(v))return!0}return!1}}(),wc=1e-15;function qi(r){return Math.abs(r)<wc}class fe extends f.Triangle{constructor(...e){super(...e),this.isExtendedTriangle=!0,this.satAxes=new Array(4).fill().map(()=>new f.Vector3),this.satBounds=new Array(4).fill().map(()=>new Te),this.points=[this.a,this.b,this.c],this.sphere=new f.Sphere,this.plane=new f.Plane,this.needsUpdate=!0}intersectsSphere(e){return xc(e,this)}update(){const e=this.a,t=this.b,i=this.c,s=this.points,a=this.satAxes,o=this.satBounds,c=a[0],u=o[0];this.getNormal(c),u.setFromPoints(c,s);const m=a[1],d=o[1];m.subVectors(e,t),d.setFromPoints(m,s);const n=a[2],l=o[2];n.subVectors(t,i),l.setFromPoints(n,s);const h=a[3],g=o[3];h.subVectors(i,e),g.setFromPoints(h,s),this.sphere.setFromPoints(this.points),this.plane.setFromNormalAndCoplanarPoint(c,e),this.needsUpdate=!1}}fe.prototype.closestPointToSegment=function(){const r=new f.Vector3,e=new f.Vector3,t=new f.Line3;return function(s,a=null,o=null){const{start:c,end:u}=s,m=this.points;let d,n=1/0;for(let l=0;l<3;l++){const h=(l+1)%3;t.start.copy(m[l]),t.end.copy(m[h]),Es(t,s,r,e),d=r.distanceToSquared(e),d<n&&(n=d,a&&a.copy(r),o&&o.copy(e))}return this.closestPointToPoint(c,r),d=c.distanceToSquared(r),d<n&&(n=d,a&&a.copy(r),o&&o.copy(c)),this.closestPointToPoint(u,r),d=u.distanceToSquared(r),d<n&&(n=d,a&&a.copy(r),o&&o.copy(u)),Math.sqrt(n)}}();fe.prototype.intersectsTriangle=function(){const r=new fe,e=new Array(3),t=new Array(3),i=new Te,s=new Te,a=new f.Vector3,o=new f.Vector3,c=new f.Vector3,u=new f.Vector3,m=new f.Vector3,d=new f.Line3,n=new f.Line3,l=new f.Line3,h=new f.Vector3;function g(_,p,v){const y=_.points;let x=0,w=-1;for(let b=0;b<3;b++){const{start:T,end:M}=d;T.copy(y[b]),M.copy(y[(b+1)%3]),d.delta(o);const S=qi(p.distanceToPoint(T));if(qi(p.normal.dot(o))&&S){v.copy(d),x=2;break}const C=p.intersectLine(d,h);if(!C&&S&&h.copy(T),(C||S)&&!qi(h.distanceTo(M))){if(x<=1)(x===1?v.start:v.end).copy(h),S&&(w=x);else if(x>=2){(w===1?v.start:v.end).copy(h),x=2;break}if(x++,x===2&&w===-1)break}}return x}return function(p,v=null,y=!1){this.needsUpdate&&this.update(),p.isExtendedTriangle?p.needsUpdate&&p.update():(r.copy(p),r.update(),p=r);const x=this.plane,w=p.plane;if(Math.abs(x.normal.dot(w.normal))>1-1e-10){const b=this.satBounds,T=this.satAxes;t[0]=p.a,t[1]=p.b,t[2]=p.c;for(let C=0;C<4;C++){const R=b[C],E=T[C];if(i.setFromPoints(E,t),R.isSeparated(i))return!1}const M=p.satBounds,S=p.satAxes;e[0]=this.a,e[1]=this.b,e[2]=this.c;for(let C=0;C<4;C++){const R=M[C],E=S[C];if(i.setFromPoints(E,e),R.isSeparated(i))return!1}for(let C=0;C<4;C++){const R=T[C];for(let E=0;E<4;E++){const A=S[E];if(a.crossVectors(R,A),i.setFromPoints(a,e),s.setFromPoints(a,t),i.isSeparated(s))return!1}}return v&&(y||console.warn("ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0."),v.start.set(0,0,0),v.end.set(0,0,0)),!0}else{const b=g(this,w,n);if(b===1&&p.containsPoint(n.end))return v&&(v.start.copy(n.end),v.end.copy(n.end)),!0;if(b!==2)return!1;const T=g(p,x,l);if(T===1&&this.containsPoint(l.end))return v&&(v.start.copy(l.end),v.end.copy(l.end)),!0;if(T!==2)return!1;if(n.delta(c),l.delta(u),c.dot(u)<0){let P=l.start;l.start=l.end,l.end=P}const M=n.start.dot(c),S=n.end.dot(c),C=l.start.dot(c),R=l.end.dot(c),E=S<C,A=M<R;return M!==R&&C!==S&&E===A?!1:(v&&(m.subVectors(n.start,l.start),m.dot(c)>0?v.start.copy(n.start):v.start.copy(l.start),m.subVectors(n.end,l.end),m.dot(c)<0?v.end.copy(n.end):v.end.copy(l.end)),!0)}}}();fe.prototype.distanceToPoint=function(){const r=new f.Vector3;return function(t){return this.closestPointToPoint(t,r),t.distanceTo(r)}}();fe.prototype.distanceToTriangle=function(){const r=new f.Vector3,e=new f.Vector3,t=["a","b","c"],i=new f.Line3,s=new f.Line3;return function(o,c=null,u=null){const m=c||u?i:null;if(this.intersectsTriangle(o,m))return(c||u)&&(c&&m.getCenter(c),u&&m.getCenter(u)),0;let d=1/0;for(let n=0;n<3;n++){let l;const h=t[n],g=o[h];this.closestPointToPoint(g,r),l=g.distanceToSquared(r),l<d&&(d=l,c&&c.copy(r),u&&u.copy(g));const _=this[h];o.closestPointToPoint(_,r),l=_.distanceToSquared(r),l<d&&(d=l,c&&c.copy(_),u&&u.copy(r))}for(let n=0;n<3;n++){const l=t[n],h=t[(n+1)%3];i.set(this[l],this[h]);for(let g=0;g<3;g++){const _=t[g],p=t[(g+1)%3];s.set(o[_],o[p]),Es(i,s,r,e);const v=r.distanceToSquared(e);v<d&&(d=v,c&&c.copy(r),u&&u.copy(e))}}return Math.sqrt(d)}}();class Z{constructor(e,t,i){this.isOrientedBox=!0,this.min=new f.Vector3,this.max=new f.Vector3,this.matrix=new f.Matrix4,this.invMatrix=new f.Matrix4,this.points=new Array(8).fill().map(()=>new f.Vector3),this.satAxes=new Array(3).fill().map(()=>new f.Vector3),this.satBounds=new Array(3).fill().map(()=>new Te),this.alignedSatBounds=new Array(3).fill().map(()=>new Te),this.needsUpdate=!1,e&&this.min.copy(e),t&&this.max.copy(t),i&&this.matrix.copy(i)}set(e,t,i){this.min.copy(e),this.max.copy(t),this.matrix.copy(i),this.needsUpdate=!0}copy(e){this.min.copy(e.min),this.max.copy(e.max),this.matrix.copy(e.matrix),this.needsUpdate=!0}}Z.prototype.update=function(){return function(){const e=this.matrix,t=this.min,i=this.max,s=this.points;for(let m=0;m<=1;m++)for(let d=0;d<=1;d++)for(let n=0;n<=1;n++){const l=1*m|2*d|4*n,h=s[l];h.x=m?i.x:t.x,h.y=d?i.y:t.y,h.z=n?i.z:t.z,h.applyMatrix4(e)}const a=this.satBounds,o=this.satAxes,c=s[0];for(let m=0;m<3;m++){const d=o[m],n=a[m],l=1<<m,h=s[l];d.subVectors(c,h),n.setFromPoints(d,s)}const u=this.alignedSatBounds;u[0].setFromPointsField(s,"x"),u[1].setFromPointsField(s,"y"),u[2].setFromPointsField(s,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1}}();Z.prototype.intersectsBox=function(){const r=new Te;return function(t){this.needsUpdate&&this.update();const i=t.min,s=t.max,a=this.satBounds,o=this.satAxes,c=this.alignedSatBounds;if(r.min=i.x,r.max=s.x,c[0].isSeparated(r)||(r.min=i.y,r.max=s.y,c[1].isSeparated(r))||(r.min=i.z,r.max=s.z,c[2].isSeparated(r)))return!1;for(let u=0;u<3;u++){const m=o[u],d=a[u];if(r.setFromBox(m,t),d.isSeparated(r))return!1}return!0}}();Z.prototype.intersectsTriangle=function(){const r=new fe,e=new Array(3),t=new Te,i=new Te,s=new f.Vector3;return function(o){this.needsUpdate&&this.update(),o.isExtendedTriangle?o.needsUpdate&&o.update():(r.copy(o),r.update(),o=r);const c=this.satBounds,u=this.satAxes;e[0]=o.a,e[1]=o.b,e[2]=o.c;for(let l=0;l<3;l++){const h=c[l],g=u[l];if(t.setFromPoints(g,e),h.isSeparated(t))return!1}const m=o.satBounds,d=o.satAxes,n=this.points;for(let l=0;l<3;l++){const h=m[l],g=d[l];if(t.setFromPoints(g,n),h.isSeparated(t))return!1}for(let l=0;l<3;l++){const h=u[l];for(let g=0;g<4;g++){const _=d[g];if(s.crossVectors(h,_),t.setFromPoints(s,e),i.setFromPoints(s,n),t.isSeparated(i))return!1}}return!0}}();Z.prototype.closestPointToPoint=function(){return function(e,t){return this.needsUpdate&&this.update(),t.copy(e).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),t}}();Z.prototype.distanceToPoint=function(){const r=new f.Vector3;return function(t){return this.closestPointToPoint(t,r),t.distanceTo(r)}}();Z.prototype.distanceToBox=function(){const r=["x","y","z"],e=new Array(12).fill().map(()=>new f.Line3),t=new Array(12).fill().map(()=>new f.Line3),i=new f.Vector3,s=new f.Vector3;return function(o,c=0,u=null,m=null){if(this.needsUpdate&&this.update(),this.intersectsBox(o))return(u||m)&&(o.getCenter(s),this.closestPointToPoint(s,i),o.closestPointToPoint(i,s),u&&u.copy(i),m&&m.copy(s)),0;const d=c*c,n=o.min,l=o.max,h=this.points;let g=1/0;for(let p=0;p<8;p++){const v=h[p];s.copy(v).clamp(n,l);const y=v.distanceToSquared(s);if(y<g&&(g=y,u&&u.copy(v),m&&m.copy(s),y<d))return Math.sqrt(y)}let _=0;for(let p=0;p<3;p++)for(let v=0;v<=1;v++)for(let y=0;y<=1;y++){const x=(p+1)%3,w=(p+2)%3,b=v<<x|y<<w,T=1<<p|v<<x|y<<w,M=h[b],S=h[T];e[_].set(M,S);const R=r[p],E=r[x],A=r[w],P=t[_],I=P.start,L=P.end;I[R]=n[R],I[E]=v?n[E]:l[E],I[A]=y?n[A]:l[E],L[R]=l[R],L[E]=v?n[E]:l[E],L[A]=y?n[A]:l[E],_++}for(let p=0;p<=1;p++)for(let v=0;v<=1;v++)for(let y=0;y<=1;y++){s.x=p?l.x:n.x,s.y=v?l.y:n.y,s.z=y?l.z:n.z,this.closestPointToPoint(s,i);const x=s.distanceToSquared(i);if(x<g&&(g=x,u&&u.copy(i),m&&m.copy(s),x<d))return Math.sqrt(x)}for(let p=0;p<12;p++){const v=e[p];for(let y=0;y<12;y++){const x=t[y];Es(v,x,i,s);const w=i.distanceToSquared(s);if(w<g&&(g=w,u&&u.copy(i),m&&m.copy(s),w<d))return Math.sqrt(w)}}return Math.sqrt(g)}}();class Ds{constructor(e){this._getNewPrimitive=e,this._primitives=[]}getPrimitive(){const e=this._primitives;return e.length===0?this._getNewPrimitive():e.pop()}releasePrimitive(e){this._primitives.push(e)}}class bc extends Ds{constructor(){super(()=>new fe)}}const oe=new bc;class Ac{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;const e=[];let t=null;this.setBuffer=i=>{t&&e.push(t),t=i,this.float32Array=new Float32Array(i),this.uint16Array=new Uint16Array(i),this.uint32Array=new Uint32Array(i)},this.clearBuffer=()=>{t=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,e.length!==0&&this.setBuffer(e.pop())}}}const W=new Ac;let Le,ct;const Qe=[],Xt=new Ds(()=>new f.Box3);function Tc(r,e,t,i,s,a){Le=Xt.getPrimitive(),ct=Xt.getPrimitive(),Qe.push(Le,ct),W.setBuffer(r._roots[e]);const o=us(0,r.geometry,t,i,s,a);W.clearBuffer(),Xt.releasePrimitive(Le),Xt.releasePrimitive(ct),Qe.pop(),Qe.pop();const c=Qe.length;return c>0&&(ct=Qe[c-1],Le=Qe[c-2]),o}function us(r,e,t,i,s=null,a=0,o=0){const{float32Array:c,uint16Array:u,uint32Array:m}=W;let d=r*2;if(J(d,u)){const l=ie(r,m),h=se(d,u);return G(r,c,Le),i(l,h,!1,o,a+r,Le)}else{let R=function(A){const{uint16Array:P,uint32Array:I}=W;let L=A*2;for(;!J(L,P);)A=re(A),L=A*2;return ie(A,I)},E=function(A){const{uint16Array:P,uint32Array:I}=W;let L=A*2;for(;!J(L,P);)A=ne(A,I),L=A*2;return ie(A,I)+se(L,P)};const l=re(r),h=ne(r,m);let g=l,_=h,p,v,y,x;if(s&&(y=Le,x=ct,G(g,c,y),G(_,c,x),p=s(y),v=s(x),v<p)){g=h,_=l;const A=p;p=v,v=A,y=x}y||(y=Le,G(g,c,y));const w=J(g*2,u),b=t(y,w,p,o+1,a+g);let T;if(b===wr){const A=R(g),I=E(g)-A;T=i(A,I,!0,o+1,a+g,y)}else T=b&&us(g,e,t,i,s,a,o+1);if(T)return!0;x=ct,G(_,c,x);const M=J(_*2,u),S=t(x,M,v,o+1,a+_);let C;if(S===wr){const A=R(_),I=E(_)-A;C=i(A,I,!0,o+1,a+_,x)}else C=S&&us(_,e,t,i,s,a,o+1);return!!C}}const Rt=new f.Vector3,ji=new f.Vector3;function Sc(r,e,t={},i=0,s=1/0){const a=i*i,o=s*s;let c=1/0,u=null;if(r.shapecast({boundsTraverseOrder:d=>(Rt.copy(e).clamp(d.min,d.max),Rt.distanceToSquared(e)),intersectsBounds:(d,n,l)=>l<c&&l<o,intersectsTriangle:(d,n)=>{d.closestPointToPoint(e,Rt);const l=e.distanceToSquared(Rt);return l<c&&(ji.copy(Rt),c=l,u=n),l<a}}),c===1/0)return null;const m=Math.sqrt(c);return t.point?t.point.copy(ji):t.point=ji.clone(),t.distance=m,t.faceIndex=u,t}const Ze=new f.Vector3,Xe=new f.Vector3,Ke=new f.Vector3,Kt=new f.Vector2,Jt=new f.Vector2,ei=new f.Vector2,Mr=new f.Vector3,Cr=new f.Vector3,Pr=new f.Vector3,ti=new f.Vector3;function Mc(r,e,t,i,s,a,o,c){let u;if(a===f.BackSide?u=r.intersectTriangle(i,t,e,!0,s):u=r.intersectTriangle(e,t,i,a!==f.DoubleSide,s),u===null)return null;const m=r.origin.distanceTo(s);return m<o||m>c?null:{distance:m,point:s.clone()}}function Cc(r,e,t,i,s,a,o,c,u,m,d){Ze.fromBufferAttribute(e,a),Xe.fromBufferAttribute(e,o),Ke.fromBufferAttribute(e,c);const n=Mc(r,Ze,Xe,Ke,ti,u,m,d);if(n){i&&(Kt.fromBufferAttribute(i,a),Jt.fromBufferAttribute(i,o),ei.fromBufferAttribute(i,c),n.uv=f.Triangle.getInterpolation(ti,Ze,Xe,Ke,Kt,Jt,ei,new f.Vector2)),s&&(Kt.fromBufferAttribute(s,a),Jt.fromBufferAttribute(s,o),ei.fromBufferAttribute(s,c),n.uv1=f.Triangle.getInterpolation(ti,Ze,Xe,Ke,Kt,Jt,ei,new f.Vector2)),t&&(Mr.fromBufferAttribute(t,a),Cr.fromBufferAttribute(t,o),Pr.fromBufferAttribute(t,c),n.normal=f.Triangle.getInterpolation(ti,Ze,Xe,Ke,Mr,Cr,Pr,new f.Vector3),n.normal.dot(r.direction)>0&&n.normal.multiplyScalar(-1));const l={a,b:o,c,normal:new f.Vector3,materialIndex:0};f.Triangle.getNormal(Ze,Xe,Ke,l.normal),n.face=l,n.faceIndex=a}return n}function Si(r,e,t,i,s,a,o){const c=i*3;let u=c+0,m=c+1,d=c+2;const n=r.index;r.index&&(u=n.getX(u),m=n.getX(m),d=n.getX(d));const{position:l,normal:h,uv:g,uv1:_}=r.attributes,p=Cc(t,l,h,g,_,u,m,d,e,a,o);return p?(p.faceIndex=i,s&&s.push(p),p):null}function q(r,e,t,i){const s=r.a,a=r.b,o=r.c;let c=e,u=e+1,m=e+2;t&&(c=t.getX(c),u=t.getX(u),m=t.getX(m)),s.x=i.getX(c),s.y=i.getY(c),s.z=i.getZ(c),a.x=i.getX(u),a.y=i.getY(u),a.z=i.getZ(u),o.x=i.getX(m),o.y=i.getY(m),o.z=i.getZ(m)}function Pc(r,e,t,i,s,a,o,c){const{geometry:u,_indirectBuffer:m}=r;for(let d=i,n=i+s;d<n;d++)Si(u,e,t,d,a,o,c)}function Rc(r,e,t,i,s,a,o){const{geometry:c,_indirectBuffer:u}=r;let m=1/0,d=null;for(let n=i,l=i+s;n<l;n++){let h;h=Si(c,e,t,n,null,a,o),h&&h.distance<m&&(d=h,m=h.distance)}return d}function Ic(r,e,t,i,s,a,o){const{geometry:c}=t,{index:u}=c,m=c.attributes.position;for(let d=r,n=e+r;d<n;d++){let l;if(l=d,q(o,l*3,u,m),o.needsUpdate=!0,i(o,l,s,a))return!0}return!1}function Ec(r,e=null){e&&Array.isArray(e)&&(e=new Set(e));const t=r.geometry,i=t.index?t.index.array:null,s=t.attributes.position;let a,o,c,u,m=0;const d=r._roots;for(let l=0,h=d.length;l<h;l++)a=d[l],o=new Uint32Array(a),c=new Uint16Array(a),u=new Float32Array(a),n(0,m),m+=a.byteLength;function n(l,h,g=!1){const _=l*2;if(c[_+15]===Ti){const v=o[l+6],y=c[_+14];let x=1/0,w=1/0,b=1/0,T=-1/0,M=-1/0,S=-1/0;for(let C=3*v,R=3*(v+y);C<R;C++){let E=i[C];const A=s.getX(E),P=s.getY(E),I=s.getZ(E);A<x&&(x=A),A>T&&(T=A),P<w&&(w=P),P>M&&(M=P),I<b&&(b=I),I>S&&(S=I)}return u[l+0]!==x||u[l+1]!==w||u[l+2]!==b||u[l+3]!==T||u[l+4]!==M||u[l+5]!==S?(u[l+0]=x,u[l+1]=w,u[l+2]=b,u[l+3]=T,u[l+4]=M,u[l+5]=S,!0):!1}else{const v=l+8,y=o[l+6],x=v+h,w=y+h;let b=g,T=!1,M=!1;e?b||(T=e.has(x),M=e.has(w),b=!T&&!M):(T=!0,M=!0);const S=b||T,C=b||M;let R=!1;S&&(R=n(v,h,b));let E=!1;C&&(E=n(y,h,b));const A=R||E;if(A)for(let P=0;P<3;P++){const I=v+P,L=y+P,F=u[I],B=u[I+3],U=u[L],H=u[L+3];u[l+P]=F<U?F:U,u[l+P+3]=B>H?B:H}return A}}}function Be(r,e,t,i,s){let a,o,c,u,m,d;const n=1/t.direction.x,l=1/t.direction.y,h=1/t.direction.z,g=t.origin.x,_=t.origin.y,p=t.origin.z;let v=e[r],y=e[r+3],x=e[r+1],w=e[r+3+1],b=e[r+2],T=e[r+3+2];return n>=0?(a=(v-g)*n,o=(y-g)*n):(a=(y-g)*n,o=(v-g)*n),l>=0?(c=(x-_)*l,u=(w-_)*l):(c=(w-_)*l,u=(x-_)*l),a>u||c>o||((c>a||isNaN(a))&&(a=c),(u<o||isNaN(o))&&(o=u),h>=0?(m=(b-p)*h,d=(T-p)*h):(m=(T-p)*h,d=(b-p)*h),a>d||m>o)?!1:((m>a||a!==a)&&(a=m),(d<o||o!==o)&&(o=d),a<=s&&o>=i)}function Dc(r,e,t,i,s,a,o,c){const{geometry:u,_indirectBuffer:m}=r;for(let d=i,n=i+s;d<n;d++){let l=m?m[d]:d;Si(u,e,t,l,a,o,c)}}function Lc(r,e,t,i,s,a,o){const{geometry:c,_indirectBuffer:u}=r;let m=1/0,d=null;for(let n=i,l=i+s;n<l;n++){let h;h=Si(c,e,t,u?u[n]:n,null,a,o),h&&h.distance<m&&(d=h,m=h.distance)}return d}function Fc(r,e,t,i,s,a,o){const{geometry:c}=t,{index:u}=c,m=c.attributes.position;for(let d=r,n=e+r;d<n;d++){let l;if(l=t.resolveTriangleIndex(d),q(o,l*3,u,m),o.needsUpdate=!0,i(o,l,s,a))return!0}return!1}function Bc(r,e,t,i,s,a,o){W.setBuffer(r._roots[e]),hs(0,r,t,i,s,a,o),W.clearBuffer()}function hs(r,e,t,i,s,a,o){const{float32Array:c,uint16Array:u,uint32Array:m}=W,d=r*2;if(J(d,u)){const l=ie(r,m),h=se(d,u);Pc(e,t,i,l,h,s,a,o)}else{const l=re(r);Be(l,c,i,a,o)&&hs(l,e,t,i,s,a,o);const h=ne(r,m);Be(h,c,i,a,o)&&hs(h,e,t,i,s,a,o)}}const kc=["x","y","z"];function Oc(r,e,t,i,s,a){W.setBuffer(r._roots[e]);const o=fs(0,r,t,i,s,a);return W.clearBuffer(),o}function fs(r,e,t,i,s,a){const{float32Array:o,uint16Array:c,uint32Array:u}=W;let m=r*2;if(J(m,c)){const n=ie(r,u),l=se(m,c);return Rc(e,t,i,n,l,s,a)}else{const n=fn(r,u),l=kc[n],g=i.direction[l]>=0;let _,p;g?(_=re(r),p=ne(r,u)):(_=ne(r,u),p=re(r));const y=Be(_,o,i,s,a)?fs(_,e,t,i,s,a):null;if(y){const b=y.point[l];if(g?b<=o[p+n]:b>=o[p+n+3])return y}const w=Be(p,o,i,s,a)?fs(p,e,t,i,s,a):null;return y&&w?y.distance<=w.distance?y:w:y||w||null}}const ii=new f.Box3,Je=new fe,et=new fe,It=new f.Matrix4,Rr=new Z,si=new Z;function zc(r,e,t,i){W.setBuffer(r._roots[e]);const s=ds(0,r,t,i);return W.clearBuffer(),s}function ds(r,e,t,i,s=null){const{float32Array:a,uint16Array:o,uint32Array:c}=W;let u=r*2;if(s===null&&(t.boundingBox||t.computeBoundingBox(),Rr.set(t.boundingBox.min,t.boundingBox.max,i),s=Rr),J(u,o)){const d=e.geometry,n=d.index,l=d.attributes.position,h=t.index,g=t.attributes.position,_=ie(r,c),p=se(u,o);if(It.copy(i).invert(),t.boundsTree)return G(r,a,si),si.matrix.copy(It),si.needsUpdate=!0,t.boundsTree.shapecast({intersectsBounds:y=>si.intersectsBox(y),intersectsTriangle:y=>{y.a.applyMatrix4(i),y.b.applyMatrix4(i),y.c.applyMatrix4(i),y.needsUpdate=!0;for(let x=_*3,w=(p+_)*3;x<w;x+=3)if(q(et,x,n,l),et.needsUpdate=!0,y.intersectsTriangle(et))return!0;return!1}});for(let v=_*3,y=(p+_)*3;v<y;v+=3){q(Je,v,n,l),Je.a.applyMatrix4(It),Je.b.applyMatrix4(It),Je.c.applyMatrix4(It),Je.needsUpdate=!0;for(let x=0,w=h.count;x<w;x+=3)if(q(et,x,h,g),et.needsUpdate=!0,Je.intersectsTriangle(et))return!0}}else{const d=r+8,n=c[r+6];return G(d,a,ii),!!(s.intersectsBox(ii)&&ds(d,e,t,i,s)||(G(n,a,ii),s.intersectsBox(ii)&&ds(n,e,t,i,s)))}}const ri=new f.Matrix4,Yi=new Z,Et=new Z,Vc=new f.Vector3,Uc=new f.Vector3,Hc=new f.Vector3,Nc=new f.Vector3;function Wc(r,e,t,i={},s={},a=0,o=1/0){e.boundingBox||e.computeBoundingBox(),Yi.set(e.boundingBox.min,e.boundingBox.max,t),Yi.needsUpdate=!0;const c=r.geometry,u=c.attributes.position,m=c.index,d=e.attributes.position,n=e.index,l=oe.getPrimitive(),h=oe.getPrimitive();let g=Vc,_=Uc,p=null,v=null;s&&(p=Hc,v=Nc);let y=1/0,x=null,w=null;return ri.copy(t).invert(),Et.matrix.copy(ri),r.shapecast({boundsTraverseOrder:b=>Yi.distanceToBox(b),intersectsBounds:(b,T,M)=>M<y&&M<o?(T&&(Et.min.copy(b.min),Et.max.copy(b.max),Et.needsUpdate=!0),!0):!1,intersectsRange:(b,T)=>{if(e.boundsTree)return e.boundsTree.shapecast({boundsTraverseOrder:S=>Et.distanceToBox(S),intersectsBounds:(S,C,R)=>R<y&&R<o,intersectsRange:(S,C)=>{for(let R=S,E=S+C;R<E;R++){q(h,3*R,n,d),h.a.applyMatrix4(t),h.b.applyMatrix4(t),h.c.applyMatrix4(t),h.needsUpdate=!0;for(let A=b,P=b+T;A<P;A++){q(l,3*A,m,u),l.needsUpdate=!0;const I=l.distanceToTriangle(h,g,p);if(I<y&&(_.copy(g),v&&v.copy(p),y=I,x=A,w=R),I<a)return!0}}}});{const M=_t(e);for(let S=0,C=M;S<C;S++){q(h,3*S,n,d),h.a.applyMatrix4(t),h.b.applyMatrix4(t),h.c.applyMatrix4(t),h.needsUpdate=!0;for(let R=b,E=b+T;R<E;R++){q(l,3*R,m,u),l.needsUpdate=!0;const A=l.distanceToTriangle(h,g,p);if(A<y&&(_.copy(g),v&&v.copy(p),y=A,x=R,w=S),A<a)return!0}}}}}),oe.releasePrimitive(l),oe.releasePrimitive(h),y===1/0?null:(i.point?i.point.copy(_):i.point=_.clone(),i.distance=y,i.faceIndex=x,s&&(s.point?s.point.copy(v):s.point=v.clone(),s.point.applyMatrix4(ri),_.applyMatrix4(ri),s.distance=_.sub(s.point).length(),s.faceIndex=w),i)}function Gc(r,e=null){e&&Array.isArray(e)&&(e=new Set(e));const t=r.geometry,i=t.index?t.index.array:null,s=t.attributes.position;let a,o,c,u,m=0;const d=r._roots;for(let l=0,h=d.length;l<h;l++)a=d[l],o=new Uint32Array(a),c=new Uint16Array(a),u=new Float32Array(a),n(0,m),m+=a.byteLength;function n(l,h,g=!1){const _=l*2;if(c[_+15]===Ti){const v=o[l+6],y=c[_+14];let x=1/0,w=1/0,b=1/0,T=-1/0,M=-1/0,S=-1/0;for(let C=v,R=v+y;C<R;C++){const E=3*r.resolveTriangleIndex(C);for(let A=0;A<3;A++){let P=E+A;P=i?i[P]:P;const I=s.getX(P),L=s.getY(P),F=s.getZ(P);I<x&&(x=I),I>T&&(T=I),L<w&&(w=L),L>M&&(M=L),F<b&&(b=F),F>S&&(S=F)}}return u[l+0]!==x||u[l+1]!==w||u[l+2]!==b||u[l+3]!==T||u[l+4]!==M||u[l+5]!==S?(u[l+0]=x,u[l+1]=w,u[l+2]=b,u[l+3]=T,u[l+4]=M,u[l+5]=S,!0):!1}else{const v=l+8,y=o[l+6],x=v+h,w=y+h;let b=g,T=!1,M=!1;e?b||(T=e.has(x),M=e.has(w),b=!T&&!M):(T=!0,M=!0);const S=b||T,C=b||M;let R=!1;S&&(R=n(v,h,b));let E=!1;C&&(E=n(y,h,b));const A=R||E;if(A)for(let P=0;P<3;P++){const I=v+P,L=y+P,F=u[I],B=u[I+3],U=u[L],H=u[L+3];u[l+P]=F<U?F:U,u[l+P+3]=B>H?B:H}return A}}}function qc(r,e,t,i,s,a,o){W.setBuffer(r._roots[e]),ps(0,r,t,i,s,a,o),W.clearBuffer()}function ps(r,e,t,i,s,a,o){const{float32Array:c,uint16Array:u,uint32Array:m}=W,d=r*2;if(J(d,u)){const l=ie(r,m),h=se(d,u);Dc(e,t,i,l,h,s,a,o)}else{const l=re(r);Be(l,c,i,a,o)&&ps(l,e,t,i,s,a,o);const h=ne(r,m);Be(h,c,i,a,o)&&ps(h,e,t,i,s,a,o)}}const jc=["x","y","z"];function Yc(r,e,t,i,s,a){W.setBuffer(r._roots[e]);const o=ms(0,r,t,i,s,a);return W.clearBuffer(),o}function ms(r,e,t,i,s,a){const{float32Array:o,uint16Array:c,uint32Array:u}=W;let m=r*2;if(J(m,c)){const n=ie(r,u),l=se(m,c);return Lc(e,t,i,n,l,s,a)}else{const n=fn(r,u),l=jc[n],g=i.direction[l]>=0;let _,p;g?(_=re(r),p=ne(r,u)):(_=ne(r,u),p=re(r));const y=Be(_,o,i,s,a)?ms(_,e,t,i,s,a):null;if(y){const b=y.point[l];if(g?b<=o[p+n]:b>=o[p+n+3])return y}const w=Be(p,o,i,s,a)?ms(p,e,t,i,s,a):null;return y&&w?y.distance<=w.distance?y:w:y||w||null}}const ni=new f.Box3,it=new fe,st=new fe,Dt=new f.Matrix4,Ir=new Z,oi=new Z;function $c(r,e,t,i){W.setBuffer(r._roots[e]);const s=gs(0,r,t,i);return W.clearBuffer(),s}function gs(r,e,t,i,s=null){const{float32Array:a,uint16Array:o,uint32Array:c}=W;let u=r*2;if(s===null&&(t.boundingBox||t.computeBoundingBox(),Ir.set(t.boundingBox.min,t.boundingBox.max,i),s=Ir),J(u,o)){const d=e.geometry,n=d.index,l=d.attributes.position,h=t.index,g=t.attributes.position,_=ie(r,c),p=se(u,o);if(Dt.copy(i).invert(),t.boundsTree)return G(r,a,oi),oi.matrix.copy(Dt),oi.needsUpdate=!0,t.boundsTree.shapecast({intersectsBounds:y=>oi.intersectsBox(y),intersectsTriangle:y=>{y.a.applyMatrix4(i),y.b.applyMatrix4(i),y.c.applyMatrix4(i),y.needsUpdate=!0;for(let x=_,w=p+_;x<w;x++)if(q(st,3*e.resolveTriangleIndex(x),n,l),st.needsUpdate=!0,y.intersectsTriangle(st))return!0;return!1}});for(let v=_,y=p+_;v<y;v++){const x=e.resolveTriangleIndex(v);q(it,3*x,n,l),it.a.applyMatrix4(Dt),it.b.applyMatrix4(Dt),it.c.applyMatrix4(Dt),it.needsUpdate=!0;for(let w=0,b=h.count;w<b;w+=3)if(q(st,w,h,g),st.needsUpdate=!0,it.intersectsTriangle(st))return!0}}else{const d=r+8,n=c[r+6];return G(d,a,ni),!!(s.intersectsBox(ni)&&gs(d,e,t,i,s)||(G(n,a,ni),s.intersectsBox(ni)&&gs(n,e,t,i,s)))}}const ai=new f.Matrix4,$i=new Z,Lt=new Z,Qc=new f.Vector3,Zc=new f.Vector3,Xc=new f.Vector3,Kc=new f.Vector3;function Jc(r,e,t,i={},s={},a=0,o=1/0){e.boundingBox||e.computeBoundingBox(),$i.set(e.boundingBox.min,e.boundingBox.max,t),$i.needsUpdate=!0;const c=r.geometry,u=c.attributes.position,m=c.index,d=e.attributes.position,n=e.index,l=oe.getPrimitive(),h=oe.getPrimitive();let g=Qc,_=Zc,p=null,v=null;s&&(p=Xc,v=Kc);let y=1/0,x=null,w=null;return ai.copy(t).invert(),Lt.matrix.copy(ai),r.shapecast({boundsTraverseOrder:b=>$i.distanceToBox(b),intersectsBounds:(b,T,M)=>M<y&&M<o?(T&&(Lt.min.copy(b.min),Lt.max.copy(b.max),Lt.needsUpdate=!0),!0):!1,intersectsRange:(b,T)=>{if(e.boundsTree){const M=e.boundsTree;return M.shapecast({boundsTraverseOrder:S=>Lt.distanceToBox(S),intersectsBounds:(S,C,R)=>R<y&&R<o,intersectsRange:(S,C)=>{for(let R=S,E=S+C;R<E;R++){const A=M.resolveTriangleIndex(R);q(h,3*A,n,d),h.a.applyMatrix4(t),h.b.applyMatrix4(t),h.c.applyMatrix4(t),h.needsUpdate=!0;for(let P=b,I=b+T;P<I;P++){const L=r.resolveTriangleIndex(P);q(l,3*L,m,u),l.needsUpdate=!0;const F=l.distanceToTriangle(h,g,p);if(F<y&&(_.copy(g),v&&v.copy(p),y=F,x=P,w=R),F<a)return!0}}}})}else{const M=_t(e);for(let S=0,C=M;S<C;S++){q(h,3*S,n,d),h.a.applyMatrix4(t),h.b.applyMatrix4(t),h.c.applyMatrix4(t),h.needsUpdate=!0;for(let R=b,E=b+T;R<E;R++){const A=r.resolveTriangleIndex(R);q(l,3*A,m,u),l.needsUpdate=!0;const P=l.distanceToTriangle(h,g,p);if(P<y&&(_.copy(g),v&&v.copy(p),y=P,x=R,w=S),P<a)return!0}}}}}),oe.releasePrimitive(l),oe.releasePrimitive(h),y===1/0?null:(i.point?i.point.copy(_):i.point=_.clone(),i.distance=y,i.faceIndex=x,s&&(s.point?s.point.copy(v):s.point=v.clone(),s.point.applyMatrix4(ai),_.applyMatrix4(ai),s.distance=_.sub(s.point).length(),s.faceIndex=w),i)}function eu(){return typeof SharedArrayBuffer<"u"}const Ut=new W.constructor,yi=new W.constructor,Ie=new Ds(()=>new f.Box3),rt=new f.Box3,nt=new f.Box3,Qi=new f.Box3,Zi=new f.Box3;let Xi=!1;function tu(r,e,t,i){if(Xi)throw new Error("MeshBVH: Recursive calls to bvhcast not supported.");Xi=!0;const s=r._roots,a=e._roots;let o,c=0,u=0;const m=new f.Matrix4().copy(t).invert();for(let d=0,n=s.length;d<n;d++){Ut.setBuffer(s[d]),u=0;const l=Ie.getPrimitive();G(0,Ut.float32Array,l),l.applyMatrix4(m);for(let h=0,g=a.length;h<g&&(yi.setBuffer(a[d]),o=ue(0,0,t,m,i,c,u,0,0,l),yi.clearBuffer(),u+=a[h].length,!o);h++);if(Ie.releasePrimitive(l),Ut.clearBuffer(),c+=s[d].length,o)break}return Xi=!1,o}function ue(r,e,t,i,s,a=0,o=0,c=0,u=0,m=null,d=!1){let n,l;d?(n=yi,l=Ut):(n=Ut,l=yi);const h=n.float32Array,g=n.uint32Array,_=n.uint16Array,p=l.float32Array,v=l.uint32Array,y=l.uint16Array,x=r*2,w=e*2,b=J(x,_),T=J(w,y);let M=!1;if(T&&b)d?M=s(ie(e,v),se(e*2,y),ie(r,g),se(r*2,_),u,o+e,c,a+r):M=s(ie(r,g),se(r*2,_),ie(e,v),se(e*2,y),c,a+r,u,o+e);else if(T){const S=Ie.getPrimitive();G(e,p,S),S.applyMatrix4(t);const C=re(r),R=ne(r,g);G(C,h,rt),G(R,h,nt);const E=S.intersectsBox(rt),A=S.intersectsBox(nt);M=E&&ue(e,C,i,t,s,o,a,u,c+1,S,!d)||A&&ue(e,R,i,t,s,o,a,u,c+1,S,!d),Ie.releasePrimitive(S)}else{const S=re(e),C=ne(e,v);G(S,p,Qi),G(C,p,Zi);const R=m.intersectsBox(Qi),E=m.intersectsBox(Zi);if(R&&E)M=ue(r,S,t,i,s,a,o,c,u+1,m,d)||ue(r,C,t,i,s,a,o,c,u+1,m,d);else if(R)if(b)M=ue(r,S,t,i,s,a,o,c,u+1,m,d);else{const A=Ie.getPrimitive();A.copy(Qi).applyMatrix4(t);const P=re(r),I=ne(r,g);G(P,h,rt),G(I,h,nt);const L=A.intersectsBox(rt),F=A.intersectsBox(nt);M=L&&ue(S,P,i,t,s,o,a,u,c+1,A,!d)||F&&ue(S,I,i,t,s,o,a,u,c+1,A,!d),Ie.releasePrimitive(A)}else if(E)if(b)M=ue(r,C,t,i,s,a,o,c,u+1,m,d);else{const A=Ie.getPrimitive();A.copy(Zi).applyMatrix4(t);const P=re(r),I=ne(r,g);G(P,h,rt),G(I,h,nt);const L=A.intersectsBox(rt),F=A.intersectsBox(nt);M=L&&ue(C,P,i,t,s,o,a,u,c+1,A,!d)||F&&ue(C,I,i,t,s,o,a,u,c+1,A,!d),Ie.releasePrimitive(A)}}return M}const li=new Z,Er=new f.Box3,iu={strategy:cn,maxDepth:40,maxLeafTris:10,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,verbose:!0};class Ls{static serialize(e,t={}){t={cloneBuffers:!0,...t};const i=e.geometry,s=e._roots,a=e._indirectBuffer,o=i.getIndex();let c;return t.cloneBuffers?c={roots:s.map(u=>u.slice()),index:o?o.array.slice():null,indirectBuffer:a?a.slice():null}:c={roots:s,index:o?o.array:null,indirectBuffer:a},c}static deserialize(e,t,i={}){i={setIndex:!0,indirect:!!e.indirectBuffer,...i};const{index:s,roots:a,indirectBuffer:o}=e,c=new Ls(t,{...i,[Ni]:!0});if(c._roots=a,c._indirectBuffer=o||null,i.setIndex){const u=t.getIndex();if(u===null){const m=new f.BufferAttribute(e.index,1,!1);t.setIndex(m)}else u.array!==s&&(u.array.set(s),u.needsUpdate=!0)}return c}get indirect(){return!!this._indirectBuffer}constructor(e,t={}){if(e.isBufferGeometry){if(e.index&&e.index.isInterleavedBufferAttribute)throw new Error("MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw new Error("MeshBVH: Only BufferGeometries are supported.");if(t=Object.assign({...iu,[Ni]:!1},t),t.useSharedArrayBuffer&&!eu())throw new Error("MeshBVH: SharedArrayBuffer is not available.");this.geometry=e,this._roots=null,this._indirectBuffer=null,t[Ni]||(_c(this,t),!e.boundingBox&&t.setBoundingBox&&(e.boundingBox=this.getBoundingBox(new f.Box3))),this.resolveTriangleIndex=t.indirect?i=>this._indirectBuffer[i]:i=>i}refit(e=null){return(this.indirect?Gc:Ec)(this,e)}traverse(e,t=0){const i=this._roots[t],s=new Uint32Array(i),a=new Uint16Array(i);o(0);function o(c,u=0){const m=c*2,d=a[m+15]===Ti;if(d){const n=s[c+6],l=a[m+14];e(u,d,new Float32Array(i,c*4,6),n,l)}else{const n=c+Vt/4,l=s[c+6],h=s[c+7];e(u,d,new Float32Array(i,c*4,6),h)||(o(n,u+1),o(l,u+1))}}}raycast(e,t=f.FrontSide,i=0,s=1/0){const a=this._roots,o=this.geometry,c=[],u=t.isMaterial,m=Array.isArray(t),d=o.groups,n=u?t.side:t,l=this.indirect?qc:Bc;for(let h=0,g=a.length;h<g;h++){const _=m?t[d[h].materialIndex].side:n,p=c.length;if(l(this,h,_,e,c,i,s),m){const v=d[h].materialIndex;for(let y=p,x=c.length;y<x;y++)c[y].face.materialIndex=v}}return c}raycastFirst(e,t=f.FrontSide,i=0,s=1/0){const a=this._roots,o=this.geometry,c=t.isMaterial,u=Array.isArray(t);let m=null;const d=o.groups,n=c?t.side:t,l=this.indirect?Yc:Oc;for(let h=0,g=a.length;h<g;h++){const _=u?t[d[h].materialIndex].side:n,p=l(this,h,_,e,i,s);p!=null&&(m==null||p.distance<m.distance)&&(m=p,u&&(p.face.materialIndex=d[h].materialIndex))}return m}intersectsGeometry(e,t){let i=!1;const s=this._roots,a=this.indirect?$c:zc;for(let o=0,c=s.length;o<c&&(i=a(this,o,e,t),!i);o++);return i}shapecast(e){const t=oe.getPrimitive(),i=this.indirect?Fc:Ic;let{boundsTraverseOrder:s,intersectsBounds:a,intersectsRange:o,intersectsTriangle:c}=e;if(o&&c){const n=o;o=(l,h,g,_,p)=>n(l,h,g,_,p)?!0:i(l,h,this,c,g,_,t)}else o||(c?o=(n,l,h,g)=>i(n,l,this,c,h,g,t):o=(n,l,h)=>h);let u=!1,m=0;const d=this._roots;for(let n=0,l=d.length;n<l;n++){const h=d[n];if(u=Tc(this,n,a,o,s,m),u)break;m+=h.byteLength}return oe.releasePrimitive(t),u}bvhcast(e,t,i){let{intersectsRanges:s,intersectsTriangles:a}=i;const o=oe.getPrimitive(),c=this.geometry.index,u=this.geometry.attributes.position,m=this.indirect?g=>{const _=this.resolveTriangleIndex(g);q(o,_*3,c,u)}:g=>{q(o,g*3,c,u)},d=oe.getPrimitive(),n=e.geometry.index,l=e.geometry.attributes.position,h=e.indirect?g=>{const _=e.resolveTriangleIndex(g);q(d,_*3,n,l)}:g=>{q(d,g*3,n,l)};if(a){const g=(_,p,v,y,x,w,b,T)=>{for(let M=v,S=v+y;M<S;M++){h(M),d.a.applyMatrix4(t),d.b.applyMatrix4(t),d.c.applyMatrix4(t),d.needsUpdate=!0;for(let C=_,R=_+p;C<R;C++)if(m(C),o.needsUpdate=!0,a(o,d,C,M,x,w,b,T))return!0}return!1};if(s){const _=s;s=function(p,v,y,x,w,b,T,M){return _(p,v,y,x,w,b,T,M)?!0:g(p,v,y,x,w,b,T,M)}}else s=g}return tu(this,e,t,s)}intersectsBox(e,t){return li.set(e.min,e.max,t),li.needsUpdate=!0,this.shapecast({intersectsBounds:i=>li.intersectsBox(i),intersectsTriangle:i=>li.intersectsTriangle(i)})}intersectsSphere(e){return this.shapecast({intersectsBounds:t=>e.intersectsBox(t),intersectsTriangle:t=>t.intersectsSphere(e)})}closestPointToGeometry(e,t,i={},s={},a=0,o=1/0){return(this.indirect?Jc:Wc)(this,e,t,i,s,a,o)}closestPointToPoint(e,t={},i=0,s=1/0){return Sc(this,e,t,i,s)}getBoundingBox(e){return e.makeEmpty(),this._roots.forEach(i=>{G(0,new Float32Array(i),Er),e.union(Er)}),e}}class su{constructor(e){this.name="WorkerBase",this.running=!1,this.worker=e,this.worker.onerror=t=>{throw t.message?new Error(`${this.name}: Could not create Web Worker with error "${t.message}"`):new Error(`${this.name}: Could not create Web Worker.`)}}runTask(){}generate(...e){if(this.running)throw new Error("GenerateMeshBVHWorker: Already running job.");if(this.worker===null)throw new Error("GenerateMeshBVHWorker: Worker has been disposed.");this.running=!0;const t=this.runTask(this.worker,...e);return t.finally(()=>{this.running=!1}),t}dispose(){this.worker.terminate(),this.worker=null}}class ru extends su{constructor(e){const t=new Worker(e||new URL("data:text/javascript;base64,aW1wb3J0IHsKCUJ1ZmZlckdlb21ldHJ5LAoJQnVmZmVyQXR0cmlidXRlLAp9IGZyb20gJ3RocmVlJzsKaW1wb3J0IHsgTWVzaEJWSCB9IGZyb20gJy4uL2NvcmUvTWVzaEJWSC5qcyc7Cgpvbm1lc3NhZ2UgPSAoIHsgZGF0YSB9ICkgPT4gewoKCWxldCBwcmV2VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpOwoJZnVuY3Rpb24gb25Qcm9ncmVzc0NhbGxiYWNrKCBwcm9ncmVzcyApIHsKCgkJLy8gYWNjb3VudCBmb3IgZXJyb3IKCQlwcm9ncmVzcyA9IE1hdGgubWluKCBwcm9ncmVzcywgMSApOwoKCQljb25zdCBjdXJyVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpOwoJCWlmICggY3VyclRpbWUgLSBwcmV2VGltZSA+PSAxMCAmJiBwcm9ncmVzcyAhPT0gMS4wICkgewoKCQkJcG9zdE1lc3NhZ2UoIHsKCgkJCQllcnJvcjogbnVsbCwKCQkJCXNlcmlhbGl6ZWQ6IG51bGwsCgkJCQlwb3NpdGlvbjogbnVsbCwKCQkJCXByb2dyZXNzLAoKCQkJfSApOwoJCQlwcmV2VGltZSA9IGN1cnJUaW1lOwoKCQl9CgoJfQoKCWNvbnN0IHsgaW5kZXgsIHBvc2l0aW9uLCBvcHRpb25zIH0gPSBkYXRhOwoJdHJ5IHsKCgkJY29uc3QgZ2VvbWV0cnkgPSBuZXcgQnVmZmVyR2VvbWV0cnkoKTsKCQlnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoICdwb3NpdGlvbicsIG5ldyBCdWZmZXJBdHRyaWJ1dGUoIHBvc2l0aW9uLCAzLCBmYWxzZSApICk7CgkJaWYgKCBpbmRleCApIHsKCgkJCWdlb21ldHJ5LnNldEluZGV4KCBuZXcgQnVmZmVyQXR0cmlidXRlKCBpbmRleCwgMSwgZmFsc2UgKSApOwoKCQl9CgoJCWlmICggb3B0aW9ucy5pbmNsdWRlZFByb2dyZXNzQ2FsbGJhY2sgKSB7CgoJCQlvcHRpb25zLm9uUHJvZ3Jlc3MgPSBvblByb2dyZXNzQ2FsbGJhY2s7CgoJCX0KCgkJaWYgKCBvcHRpb25zLmdyb3VwcyApIHsKCgkJCWNvbnN0IGdyb3VwcyA9IG9wdGlvbnMuZ3JvdXBzOwoJCQlmb3IgKCBjb25zdCBpIGluIGdyb3VwcyApIHsKCgkJCQljb25zdCBncm91cCA9IGdyb3Vwc1sgaSBdOwoJCQkJZ2VvbWV0cnkuYWRkR3JvdXAoIGdyb3VwLnN0YXJ0LCBncm91cC5jb3VudCwgZ3JvdXAubWF0ZXJpYWxJbmRleCApOwoKCQkJfQoKCQl9CgoJCWNvbnN0IGJ2aCA9IG5ldyBNZXNoQlZIKCBnZW9tZXRyeSwgb3B0aW9ucyApOwoJCWNvbnN0IHNlcmlhbGl6ZWQgPSBNZXNoQlZILnNlcmlhbGl6ZSggYnZoLCB7IGNvcHlJbmRleEJ1ZmZlcjogZmFsc2UgfSApOwoJCWxldCB0b1RyYW5zZmVyID0gWyBwb3NpdGlvbi5idWZmZXIsIC4uLnNlcmlhbGl6ZWQucm9vdHMgXTsKCQlpZiAoIHNlcmlhbGl6ZWQuaW5kZXggKSB7CgoJCQl0b1RyYW5zZmVyLnB1c2goIHNlcmlhbGl6ZWQuaW5kZXguYnVmZmVyICk7CgoJCX0KCgkJdG9UcmFuc2ZlciA9IHRvVHJhbnNmZXIuZmlsdGVyKCB2ID0+ICggdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyApIHx8ICEgKCB2IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXIgKSApOwoKCQlpZiAoIGJ2aC5faW5kaXJlY3RCdWZmZXIgKSB7CgoJCQl0b1RyYW5zZmVyLnB1c2goIHNlcmlhbGl6ZWQuaW5kaXJlY3RCdWZmZXIuYnVmZmVyICk7CgoJCX0KCgkJcG9zdE1lc3NhZ2UoIHsKCgkJCWVycm9yOiBudWxsLAoJCQlzZXJpYWxpemVkLAoJCQlwb3NpdGlvbiwKCQkJcHJvZ3Jlc3M6IDEsCgoJCX0sIHRvVHJhbnNmZXIgKTsKCgl9IGNhdGNoICggZXJyb3IgKSB7CgoJCXBvc3RNZXNzYWdlKCB7CgoJCQllcnJvciwKCQkJc2VyaWFsaXplZDogbnVsbCwKCQkJcG9zaXRpb246IG51bGwsCgkJCXByb2dyZXNzOiAxLAoKCQl9ICk7CgoJfQoKfTsK",typeof document>"u"?require("url").pathToFileURL(__filename).href:pt&&pt.src||new URL("shop-components.cjs",document.baseURI).href),{type:"module"});super(t),this.name="GenerateMeshBVHWorker"}runTask(e,t,i={}){return new Promise((s,a)=>{if(t.getAttribute("position").isInterleavedBufferAttribute||t.index&&t.index.isInterleavedBufferAttribute)throw new Error("GenerateMeshBVHWorker: InterleavedBufferAttribute are not supported for the geometry attributes.");e.onerror=m=>{a(new Error(`GenerateMeshBVHWorker: ${m.message}`))},e.onmessage=m=>{const{data:d}=m;if(d.error)a(new Error(d.error)),e.onmessage=null;else if(d.serialized){const{serialized:n,position:l}=d,h=Ls.deserialize(n,t,{setIndex:!1}),g=Object.assign({setBoundingBox:!0},i);if(t.attributes.position.array=l,n.index)if(t.index)t.index.array=n.index;else{const _=new f.BufferAttribute(n.index,1,!1);t.setIndex(_)}g.setBoundingBox&&(t.boundingBox=h.getBoundingBox(new f.Box3)),i.onProgress&&i.onProgress(d.progress),s(h),e.onmessage=null}else i.onProgress&&i.onProgress(d.progress)};const o=t.index?t.index.array:null,c=t.attributes.position.array,u=[c];o&&u.push(o),e.postMessage({index:o,position:c,options:{...i,onProgress:null,includedProgressCallback:!!i.onProgress,groups:[...t.groups]}},u.map(m=>m.buffer).filter(m=>typeof SharedArrayBuffer>"u"||!(m instanceof SharedArrayBuffer)))})}}class nu{constructor(e,t){this.lock=!1,this.lockX=!1,this.lockY=!1,this.invRotMat=new f.Matrix4,this.mouse=new f.Vector3,this.rotateStart=new f.Vector2,this.rotateEnd=new f.Vector2,this.rotateDelta=new f.Vector2,this.selectedAxis=null,this.isDragging=!1,this.context=null,this.orbitState=!0,this._animator=0,this._emitter=new vt,this.addListener=this._emitter.addListener.bind(this._emitter),this.removeAllListeners=this._emitter.removeAllListeners.bind(this._emitter),this._text=document.createElement("div"),this._textTimer=0,this._update=()=>{this.lock||(this._textTimer&&(window.clearTimeout(this._textTimer),this._textTimer=0),this._textTimer=window.setTimeout(()=>{this._text.style.opacity="0"},800),this.camera.updateMatrix(),this.invRotMat.extractRotation(this.camera.matrix).invert(),this.axes.forEach(s=>{this.setAxisPosition(s)}),this.axes.sort((s,a)=>s.position.z>a.position.z?1:-1),this.drawLayers(!0),this._text.style.opacity="1",this._text.innerText=this.camera.position.distanceTo(this.orbit.target).toFixed(2)+" m")},this.updateMouseFromEvent=s=>{this.rect=this.domElement.getBoundingClientRect();const a=this.domElement.width/this.domElement.clientWidth,o=this.domElement.height/this.domElement.clientHeight,{left:c,top:u}=this.rect;this.mouse.set((s.clientX-c)*a,(s.clientY-u)*o,0)},this.updateSelectedAxisUnderMouse=()=>{this.selectedAxis=null,this.axes.forEach(s=>{this.mouse.distanceTo(s.position)<s.size&&(this.selectedAxis=s)})},this.onPointerDown=s=>{this.rotateStart.set(s.clientX,s.clientY),this.updateMouseFromEvent(s),this.updateSelectedAxisUnderMouse(),this.orbitState=this.orbit.enabled,this.orbit.enabled=!1,window.addEventListener("pointermove",this.onDrag,!1),window.addEventListener("pointerup",this.onPointerUp,!1)},this.onPointerUp=()=>{this.domElement.style.backgroundColor="#FFF0",setTimeout(()=>this.isDragging=!1,0),this.domElement.classList.remove("dragging"),this.orbit.enabled=this.orbitState,window.removeEventListener("pointermove",this.onDrag,!1),window.removeEventListener("pointerup",this.onPointerUp,!1)},this.onPointerEnter=()=>{this.domElement.style.backgroundColor="#FFF3",this.rect=this.domElement.getBoundingClientRect()},this.onPointerMove=s=>{if(this.lock||this.isDragging)return;const a=this.selectedAxis;s&&(this.updateMouseFromEvent(s),this.updateSelectedAxisUnderMouse()),a!==this.selectedAxis&&this.drawLayers()},this.onDrag=s=>{this.lock||(this.isDragging||this.domElement.classList.add("dragging"),this.isDragging=!0,this.selectedAxis=null,this.rotateEnd.set(s.clientX,s.clientY),this.rotateDelta.subVectors(this.rotateEnd,this.rotateStart).multiplyScalar(.5),this.rotateStart.copy(this.rotateEnd),this.orbit.update())},this.onMouseClick=s=>{if(this.lock||(this.updateMouseFromEvent(s),this.updateSelectedAxisUnderMouse(),this.isDragging||!this.selectedAxis))return;this._animator&&cancelAnimationFrame(this._animator);const a=this.selectedAxis.direction.clone();this.camera.lookAt(0,0,0);const o=this.camera.position.distanceTo(this.orbit.target);a.multiplyScalar(o),this.selectedAxis.axis==="z"?a.setZ(this.orbit.target.z+o):this.selectedAxis.axis==="-z"?a.setZ(this.orbit.target.z-o):a.setZ(this.orbit.target.z);const c=500,u=performance.now(),m=1,d=this.selectedAxis.axis,n=()=>{const h=performance.now()-u,g=Math.min(h/c,m);if(this.camera.position.lerp(a,g),this.orbit.update(),g!==m){this._animator=window.requestAnimationFrame(n);return}else this._animator=0,this.onPointerMove(void 0),this._emitter.emit("axis-select-end",d);this.onPointerMove(void 0)};this._emitter.emit("axis-select-start",d),n()},this.drawCircle=(s,a=10,o="#FF0000")=>{this.context&&(this.context.beginPath(),this.context.rect(s.x-a,s.y-a,a*2,a*2),this.context.fillStyle=o,this.context.fill(),this.context.closePath())},this.drawLine=(s,a,o=1,c="#FF0000")=>{this.context&&(this.context.beginPath(),this.context.moveTo(s.x,s.y),this.context.lineTo(a.x,a.y),this.context.lineWidth=o,this.context.strokeStyle=c,this.context.stroke(),this.context.closePath())},this.drawLayers=(s=!1)=>{this.context&&(s&&this.context.clearRect(0,0,this.domElement.width,this.domElement.height),this.axes.forEach(a=>{const o=this.selectedAxis===a,c=a.position.z>=-.01?a.color[0]:a.color[1];if(a.line&&this.drawLine(this.center,a.position,a.line,c),this.drawCircle(a.position,a.size,o?"#0066ff":c),a.label){const u=a.axis==="-x"?this.options.fontSize-3:this.options.fontSize;this.context.font=[this.options.fontWeight,u+"px",this.options.fontFamily].join(" "),this.context.fillStyle=this.options.fontColor,this.context.textBaseline="middle",this.context.textAlign="center",this.context.fillText(a.label,a.position.x,a.position.y)}}))},this.setAxisPosition=s=>{const a=s.direction.clone().applyMatrix4(this.invRotMat),o=s.size;s.position.set(a.x*(this.center.x-o/2-this.options.padding)+this.center.x,this.center.y-a.y*(this.center.y-o/2-this.options.padding),a.z)};const i={offset:new f.Vector2,size:90,padding:8,bubbleSizePrimary:8,bubbleSizeSecondary:6,lineWidth:2,fontSize:11,fontFamily:"arial",fontWeight:"normal",fontColor:"#fff",className:"orbit-controls-gizmo",colors:{x:["#f35f5f","#902525"],y:["#78da2f","#71ae45"],z:["#1d92fa","#d0d1d1"]}};this.options={...i,...t},this.orbit=e,this.camera=e.object,this.center=new f.Vector3(this.options.size/2,this.options.size/2,0),this.axes=this.createAxes(),this.domElement=this.createCanvas(this.options),this.orbit.addEventListener("change",this._update),this._text.style.cssText=`
|
|
3815
3822
|
transition: all 0.8s ease-in-out;
|
|
3816
3823
|
color: rgb(68, 78, 105);
|
|
3817
3824
|
position: absolute;
|
|
@@ -3822,7 +3829,7 @@ d="${this.getPath(e)}"></path>`)}
|
|
|
3822
3829
|
margin-right: ${-this.options.size/4}px;
|
|
3823
3830
|
font-size: 12px;
|
|
3824
3831
|
text-align:center;
|
|
3825
|
-
`}appendTo(e){e.append(this.domElement),e.append(this._text)}createAxes(){const{colors:e,lineWidth:t,bubbleSizePrimary:i,bubbleSizeSecondary:
|
|
3832
|
+
`}appendTo(e){e.append(this.domElement),e.append(this._text)}createAxes(){const{colors:e,lineWidth:t,bubbleSizePrimary:i,bubbleSizeSecondary:s}=this.options;return[{axis:"x",direction:new f.Vector3(1,0,0),size:i,color:e.x,line:t,label:"前",position:new f.Vector3},{axis:"y",direction:new f.Vector3(0,1,0),size:i,color:e.y,line:t,label:"左",position:new f.Vector3},{axis:"z",direction:new f.Vector3(0,0,1),size:i,color:e.z,line:t,label:"上",position:new f.Vector3},{axis:"-x",direction:new f.Vector3(-1,0,0),size:s,color:e.x,label:"后",position:new f.Vector3},{axis:"-y",direction:new f.Vector3(0,-1,0),size:s,color:e.y,position:new f.Vector3,label:"右"},{axis:"-z",direction:new f.Vector3(0,0,-1),size:i,color:e.z,label:"下",position:new f.Vector3}]}createCanvas(e){const t=document.createElement("canvas");return t.width=e.size,t.height=e.size,t.classList.add(e.className),t.style.cssText=`
|
|
3826
3833
|
position: absolute;
|
|
3827
3834
|
left: auto;
|
|
3828
3835
|
top: ${this.options.offset.y}px;
|
|
@@ -3834,14 +3841,14 @@ d="${this.getPath(e)}"></path>`)}
|
|
|
3834
3841
|
border-radius: 100%;
|
|
3835
3842
|
transition: background-color .15s linear;
|
|
3836
3843
|
cursor: pointer;
|
|
3837
|
-
`,t.addEventListener("pointerdown",this.onPointerDown,!1),t.addEventListener("pointerenter",this.onPointerEnter,!1),t.addEventListener("pointermove",this.onPointerMove,!1),t.addEventListener("click",this.onMouseClick,!1),this.context=t.getContext("2d"),t}destroy(){cancelAnimationFrame(this._animator),this.orbit.removeEventListener("change",this._update),this.orbit.enabled=this.orbitState,window.removeEventListener("pointermove",this.onDrag,!1),window.removeEventListener("pointerup",this.onPointerUp,!1),this._emitter.removeAllListeners(),this.domElement.removeEventListener("pointerdown",this.onPointerDown,!1),this.domElement.removeEventListener("pointerenter",this.onPointerEnter,!1),this.domElement.removeEventListener("pointermove",this.onPointerMove,!1),this.domElement.removeEventListener("click",this.onMouseClick,!1),this.domElement.remove(),window.clearTimeout(this._textTimer),this._text.remove()}}class
|
|
3838
|
-
`+
|
|
3839
|
-
`+
|
|
3844
|
+
`,t.addEventListener("pointerdown",this.onPointerDown,!1),t.addEventListener("pointerenter",this.onPointerEnter,!1),t.addEventListener("pointermove",this.onPointerMove,!1),t.addEventListener("click",this.onMouseClick,!1),this.context=t.getContext("2d"),t}destroy(){cancelAnimationFrame(this._animator),this.orbit.removeEventListener("change",this._update),this.orbit.enabled=this.orbitState,window.removeEventListener("pointermove",this.onDrag,!1),window.removeEventListener("pointerup",this.onPointerUp,!1),this._emitter.removeAllListeners(),this.domElement.removeEventListener("pointerdown",this.onPointerDown,!1),this.domElement.removeEventListener("pointerenter",this.onPointerEnter,!1),this.domElement.removeEventListener("pointermove",this.onPointerMove,!1),this.domElement.removeEventListener("click",this.onMouseClick,!1),this.domElement.remove(),window.clearTimeout(this._textTimer),this._text.remove()}}class ou{get isFinished(){return this.params?this.framesDone>=this.params.frames:!0}set visible(e){this.shadowCatcherMesh.visible=e,this.progShadowGrp.visible=e,e||(this.isRendering=!1)}get paused(){return this.params?this.params.paused:!0}set paused(e){this.params&&(this.params.paused=e,e&&(this.isRendering=!1))}constructor(e,t,{resolution:i=1024,shadowMapRes:s=512,shadowBias:a=.001,lightCount:o=8,size:c=4,frames:u=40,lightRadius:m=2,ambientWeight:d=.5,alphaTest:n=.98,paused:l=!1}={}){this.params={enabled:!0,frames:u,lightRadius:m,ambientWeight:d,alphaTest:n,debugHelpers:!1,size:c,paused:l},this.scene=t,this.renderer=e,this.buffer1Active=!1,this.dirLights=[],this.dirLightsHelpers=[],this.clearColor=new f.Color,this.clearAlpha=0,this.progress=0,this.discardMaterial=new lu,this.lights=[],this.meshes=[],this.objectsToShow=[],this.autoHiddenObjects=[],this.objectsToShowSet=new Set,this.objectsToShowAncestors=new Set,this.framesDone=0,this.fixedCamera=null,this.isRendering=!1,this.isZUp=f.Object3D.DEFAULT_UP.z===1,this.progShadowGrp=new f.Group,this.progShadowGrp.name="progressive_shadow_assets",this.scene.add(this.progShadowGrp),this.lightOrigin=new f.Group,this.lightOrigin.name="light_origin",this.isZUp?this.lightOrigin.position.set(c,c,c*1.5):this.lightOrigin.position.set(c,c,c),this.progShadowGrp.add(this.lightOrigin),this.lightGroup=new f.Group,this.lightGroup.name="all_dir_lights",this.progShadowGrp.add(this.lightGroup);const h=Math.PI;for(let p=0;p<o;p++){const v=new f.DirectionalLight(16777215,h/o);v.name="dir_light_"+p,v.castShadow=!0,v.shadow.bias=a,v.shadow.camera.near=.1,v.shadow.camera.far=50,v.shadow.camera.right=c/2,v.shadow.camera.left=-c/2,v.shadow.camera.top=c/2,v.shadow.camera.bottom=-c/2,v.shadow.mapSize.width=s,v.shadow.mapSize.height=s,this.dirLights.push(v),this.lightGroup.add(v)}const g=/(Android|iPad|iPhone|iPod)/g.test(navigator==null?void 0:navigator.userAgent)?f.HalfFloatType:f.FloatType;this.progressiveLightMap1=new f.WebGLRenderTarget(i,i,{type:g}),this.progressiveLightMap2=new f.WebGLRenderTarget(i,i,{type:g}),this.progressiveLightMap1.texture.colorSpace=f.NoColorSpace,this.progressiveLightMap2.texture.colorSpace=f.NoColorSpace,this.shadowCatcherMaterial=new au({map:this.progressiveLightMap2.texture,transparent:!0,opacity:1});const _=new f.PlaneGeometry(c,c);this.isZUp||_.rotateX(-Math.PI/2),this.shadowCatcherMesh=new f.Mesh(_,this.shadowCatcherMaterial),this.isZUp?this.shadowCatcherMesh.position.z=.001:this.shadowCatcherMesh.position.y=.001,this.shadowCatcherMesh.name="shadowCatcherMesh",this.shadowCatcherMesh.receiveShadow=!0,this.progShadowGrp.add(this.shadowCatcherMesh),this.addObjectToShow(this.progShadowGrp),this.addObjectToShow(this.lightGroup),this.addObjectToShow(this.lightOrigin),this.addObjectToShow(this.shadowCatcherMesh),this.rebuildObjectsToShowAncestors(),this.debugHelpersGroup=new f.Group,this.targetMat=new f.MeshLambertMaterial({fog:!1}),this.previousShadowMap={value:this.progressiveLightMap1.texture},this.averagingWindow={value:u},this.targetMat.onBeforeCompile=p=>{p.vertexShader=`varying vec2 vUv;
|
|
3845
|
+
`+p.vertexShader.slice(0,-1)+"vUv = uv; gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }";const v=p.fragmentShader.indexOf("void main() {");p.fragmentShader=`varying vec2 vUv;
|
|
3846
|
+
`+p.fragmentShader.slice(0,v)+`uniform sampler2D previousShadowMap;
|
|
3840
3847
|
uniform float averagingWindow;
|
|
3841
|
-
`+
|
|
3848
|
+
`+p.fragmentShader.slice(v-1,-1)+`
|
|
3842
3849
|
vec3 texelOld = texture2D(previousShadowMap, vUv).rgb;
|
|
3843
3850
|
gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/ averagingWindow);
|
|
3844
|
-
}`,
|
|
3851
|
+
}`,p.uniforms.previousShadowMap=this.previousShadowMap,p.uniforms.averagingWindow=this.averagingWindow}}renderOnRenderTargets(e){this.prepare(),this.averagingWindow.value=this.params.frames;const t=this.buffer1Active?this.progressiveLightMap1:this.progressiveLightMap2,i=this.buffer1Active?this.progressiveLightMap2:this.progressiveLightMap1;this.renderer.setRenderTarget(t),this.previousShadowMap.value=i.texture,this.buffer1Active=!this.buffer1Active,this.renderer.render(this.scene,e),this.finish(),this.renderer.setRenderTarget(null)}showDebugHelpers(e){if(!this.debugHelpersGroup.children.length){const t=new f.Mesh(new f.PlaneGeometry(2,2),new f.MeshBasicMaterial({map:this.progressiveLightMap1.texture,side:f.DoubleSide}));this.isZUp?t.position.z=this.params.size/2:t.position.y=this.params.size/2;for(const a of this.dirLights){const o=new f.DirectionalLightHelper(a);this.dirLightsHelpers.push(o)}const i=this.isZUp?new f.Vector3(0,0,1):new f.Vector3(0,1,0),s=new f.PlaneHelper(new f.Plane(i,.001),this.params.size,16776960);this.debugHelpersGroup.add(t,s,...this.dirLightsHelpers)}e?(this.progShadowGrp.add(this.debugHelpersGroup),this.dirLightsHelpers.forEach(t=>{t.update()})):this.progShadowGrp.remove(this.debugHelpersGroup)}randomiseLights(){const e=this.lightOrigin.position.length();for(let t=0;t<this.dirLights.length;t++){if(Math.random()>this.params.ambientWeight)this.dirLights[t].position.set(this.lightOrigin.position.x+f.MathUtils.randFloatSpread(this.params.lightRadius),this.lightOrigin.position.y+f.MathUtils.randFloatSpread(this.params.lightRadius),this.lightOrigin.position.z+f.MathUtils.randFloatSpread(this.params.lightRadius));else{const i=Math.acos(2*Math.random()-1)-1.570795,s=2*3.14159*Math.random();this.isZUp?this.dirLights[t].position.set(Math.cos(i)*Math.cos(s)*e,Math.cos(i)*Math.sin(s)*e,Math.abs(Math.sin(i)*e)):this.dirLights[t].position.set(Math.cos(i)*Math.cos(s)*e,Math.abs(Math.cos(i)*Math.sin(s)*e),Math.sin(i)*e)}this.params.debugHelpers&&this.dirLightsHelpers[t].update()}}async recalculate(){this.params.enabled&&(this.clear(),this.framesDone=0,this.fixedCamera=null,this.isRendering=!1)}prepare(){this.lights.forEach(t=>{t.object.intensity=0}),this.meshes.forEach(t=>{t.object.material=this.discardMaterial}),this.autoHiddenObjects.length=0;const e=t=>this.objectsToShowAncestors.has(t);this.scene.traverse(t=>{t!==this.scene&&(this.isExcludedObject(t)||e(t)||t.isLight||t.isCamera||t.visible&&(this.autoHiddenObjects.push({object:t,visible:t.visible}),t.visible=!1))}),this.lightGroup.visible=!0,this.shadowCatcherMesh.material=this.targetMat,this.params.debugHelpers&&this.showDebugHelpers(!1)}finish(){this.lights.forEach(e=>{e.object.intensity=e.intensity}),this.meshes.forEach(e=>{e.object.material=e.material}),this.autoHiddenObjects.forEach(e=>{e.object.visible=e.visible}),this.autoHiddenObjects.length=0,this.lightGroup.visible=!1,this.shadowCatcherMesh.material=this.shadowCatcherMaterial,this.params.debugHelpers&&this.showDebugHelpers(!0)}clear(){this.renderer.getClearColor(this.clearColor),this.clearAlpha=this.renderer.getClearAlpha(),this.renderer.setClearColor("black",1),this.renderer.setRenderTarget(this.progressiveLightMap1),this.renderer.clear(),this.renderer.setRenderTarget(this.progressiveLightMap2),this.renderer.clear(),this.renderer.setRenderTarget(null),this.renderer.setClearColor(this.clearColor,this.clearAlpha),this.shadowCatcherMesh.material.alphaTest=0,this.updateShadowObjectsList()}updateShadowObjectsList(){this.lights.length=0,this.meshes.length=0,this.objectsToShow.length=0,this.objectsToShowSet.clear(),this.addObjectToShow(this.progShadowGrp),this.addObjectToShow(this.lightGroup),this.addObjectToShow(this.lightOrigin),this.addObjectToShow(this.shadowCatcherMesh),this.scene.traverse(e=>{if(e!==this.scene){if(this.isExcludedObject(e)){this.addObjectToShow(e);return}if(e===this.progShadowGrp||e===this.lightGroup||e===this.lightOrigin){this.addObjectToShow(e);return}if(e===this.shadowCatcherMesh){this.addObjectToShow(e);return}if(e.isLight&&e.parent!==this.lightGroup){this.lights.push({object:e,intensity:e.intensity});return}e.isGoods||e.isTransformControls||e.geometry&&e!==this.shadowCatcherMesh&&e.castShadow&&(this.meshes.push({object:e,material:e.material}),this.addObjectToShow(e))}}),this.rebuildObjectsToShowAncestors()}addObjectToShow(e){e&&(this.objectsToShowSet.has(e)||(this.objectsToShow.push({object:e,visible:e.visible}),this.objectsToShowSet.add(e)))}rebuildObjectsToShowAncestors(){this.objectsToShowAncestors.clear();const e=t=>{let i=t;for(;i&&!this.objectsToShowAncestors.has(i);)this.objectsToShowAncestors.add(i),i=i.parent};this.objectsToShow.forEach(({object:t})=>{e(t)})}isExcludedObject(e){const t=e;return!!(t.isCSS2DObject||t.isCSS3DObject||t.isHelper||typeof e.type=="string"&&e.type.endsWith("Helper")||typeof e.name=="string"&&e.name.toLowerCase().includes("helper"))}update(e){!this.params||!this.shadowCatcherMesh||!this.progressiveLightMap1||!this.progressiveLightMap2||!this.params.enabled||this.framesDone>=this.params.frames||this.params.paused||!this.shadowCatcherMesh.visible||!this.progShadowGrp.visible||(this.framesDone===0&&(this.fixedCamera=e.clone(),this.isRendering=!0),this.shadowCatcherMesh.material.alphaTest=f.MathUtils.clamp(f.MathUtils.mapLinear(this.framesDone,2,this.params.frames-1,0,this.params.alphaTest),0,1),this.renderOnRenderTargets(this.fixedCamera||e),this.randomiseLights(),this.progress=f.MathUtils.mapLinear(this.framesDone,0,this.params.frames-1,0,100),this.framesDone++,this.framesDone>=this.params.frames&&(this.fixedCamera=null,this.isRendering=!1))}destroy(){this.scene&&this.progShadowGrp&&this.scene.remove(this.progShadowGrp),this.progressiveLightMap1&&(this.progressiveLightMap1.dispose(),this.progressiveLightMap1=null),this.progressiveLightMap2&&(this.progressiveLightMap2.dispose(),this.progressiveLightMap2=null),this.shadowCatcherMaterial&&(this.shadowCatcherMaterial.dispose(),this.shadowCatcherMaterial=null),this.targetMat&&(this.targetMat.dispose(),this.targetMat=null),this.discardMaterial&&(this.discardMaterial.dispose(),this.discardMaterial=null),this.shadowCatcherMesh&&(this.shadowCatcherMesh.geometry&&this.shadowCatcherMesh.geometry.dispose(),this.shadowCatcherMesh=null),this.dirLights.forEach(e=>{e.parent&&e.parent.remove(e);const t=e;t.dispose&&typeof t.dispose=="function"&&t.dispose()}),this.dirLights=[],this.dirLightsHelpers.forEach(e=>{e.parent&&e.parent.remove(e);const t=e;t.dispose&&typeof t.dispose=="function"&&t.dispose()}),this.dirLightsHelpers=[],this.debugHelpersGroup&&(this.debugHelpersGroup.children.forEach(e=>{e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()}),this.debugHelpersGroup.clear(),this.debugHelpersGroup=null),this.progShadowGrp&&(this.progShadowGrp.clear(),this.progShadowGrp=null),this.lightGroup&&(this.lightGroup.clear(),this.lightGroup=null),this.lightOrigin&&(this.lightOrigin.clear(),this.lightOrigin=null),this.lights=[],this.meshes=[],this.objectsToShow=[],this.autoHiddenObjects=[],this.objectsToShowSet=new Set,this.objectsToShowAncestors=new Set,this.scene=null,this.renderer=null,this.fixedCamera=null,this.clearColor=null,this.previousShadowMap=null,this.averagingWindow=null,this.params=null}}function mn(r={},e,t,i=s=>{}){const s=class extends f.ShaderMaterial{constructor(a={}){const o=Object.entries(r);super({uniforms:o.reduce((c,[u,m])=>{const d=f.UniformsUtils.clone({[u]:{value:m}});return{...c,...d}},{}),vertexShader:e,fragmentShader:t}),o.forEach(([c])=>Object.defineProperty(this,c,{get:()=>this.uniforms[c].value,set:u=>this.uniforms[c].value=u})),Object.assign(this,a),i&&i(this)}};return s.key=f.MathUtils.generateUUID(),s}const au=mn({transparent:!0,color:new f.Color(0,0,0),alphaTest:0,opacity:1,map:null,depthWrite:!1,toneMapped:!1,blend:2},`varying vec2 vUv;
|
|
3845
3852
|
void main() {
|
|
3846
3853
|
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);
|
|
3847
3854
|
vUv = uv;
|
|
@@ -3856,7 +3863,7 @@ vec3 texelOld = texture2D(previousShadowMap, vUv).rgb;
|
|
|
3856
3863
|
gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity);
|
|
3857
3864
|
#include <tonemapping_fragment>
|
|
3858
3865
|
#include <colorspace_fragment>
|
|
3859
|
-
}`),
|
|
3866
|
+
}`),lu=mn({},"void main() { }","void main() { gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); discard; }");class cu extends ve.CSS2DObject{constructor(e){const t=document.createElement("div");super(t),this._controls=e}}const uu="https://cdn2.seer-group.com/libs/hdr/aristea_wreck_512.hdr",hu="https://cdn2.seer-group.com/libs/fonts.type.json",fu=new Bn.Font(hu);class vs{constructor(e){var t;this._props=e,this.name="",this._defaults={color:""},this.color="",this.name=this._props.name,this.color=this._defaults.color="#"+((t=e.target.color)==null?void 0:t.getHexString())}change(e){var t;this.color=e,(t=this._props.target.color)==null||t.set(e)}reset(){this.change(this._defaults.color)}}var gn=(r=>(r[r.DEFAULT=0]="DEFAULT",r[r.CAN_INSTALL=1]="CAN_INSTALL",r))(gn||{});const Dr=.15;f.Object3D.DEFAULT_UP.set(0,0,1);let at,pi=0,_s=0;const du=()=>{at=void 0,pi=0,_s=0},pu=new f.MeshBasicMaterial({colorWrite:!1});class mu{constructor(e){this.props=e,this.stats=new Ot,this.scene=new f.Scene,this.overlayScene=new f.Scene,this.renderer=new f.WebGLRenderer({antialias:!0,alpha:!0,logarithmicDepthBuffer:!0,powerPreference:"high-performance",preserveDrawingBuffer:!0}),this.css2dRenderer=new ve.CSS2DRenderer,this.mousePos=new f.Vector2,this.mouseCoord=new f.Vector2,this.offset=new f.Vector2,this.size=new f.Vector2,this.amr=new ln({showSizeBox:!0,showController:!0}),this._clock=new f.Clock(!0),this._uiHiddenTime=this._clock.getElapsedTime(),this.camera=new f.PerspectiveCamera(39.6,window.innerWidth/window.innerHeight,.1,1e4),this.d=2,this.orthographicCamera=new f.OrthographicCamera(-this.d*(window.innerWidth/window.innerHeight),this.d*(window.innerWidth/window.innerHeight),this.d,-this.d,.1,1e3),this._axisMoving=!1,this._container=new f.Group,this._raycaster=new f.Raycaster,this._selected=[],this._pointerDownTimeout=0,this._dragging=!1,this.maxSample=1024*2,this.sampleCount=0,this._usePathTracing=!1,this._fpsCache=[],this._fpsCacheMax=20,this._emitter=new vt,this.sound=new pl,this._rafId=null,this._destroyed=!1,this._ground=new f.Mesh(new f.PlaneGeometry(100,100),new f.MeshPhysicalMaterial({color:new f.Color("#eee"),metalness:.4,roughness:.1,clearcoat:1,clearcoatRoughness:.1})),this.light=new f.PointLight(16777215,10,30),this._amrRender=new f.WebGLRenderTarget(1024,1024,{format:f.RGBAFormat,type:f.UnsignedByteType,colorSpace:f.SRGBColorSpace,samples:8}),this._pointCloudMode=!1,this._shadowMode=!1,this.addEventListener=this._emitter.on.bind(this._emitter),this.removeEventListener=this._emitter.on.bind(this._emitter),this._showSlots=!0,this._showSize=!0,this._showControls=!0,this._drag=d=>{this._dragging=!0,this._pointermove(d)},this._dragend=d=>{this._dragging=!1},this._pointermove=d=>{if(this._pointerDownTimeout)return clearTimeout(this._pointerDownTimeout),this._pointerDownTimeout=0;let{top:n,left:l}=this.renderer.domElement.getBoundingClientRect();this.offset.set(l,n),this.mousePos.set(d.clientX-l,d.clientY-n),this.mouseCoord.set((d.clientX-l)/this.size.x*2-1,-((d.clientY-n)/this.size.y)*2+1),this._raycaster.setFromCamera(this.mouseCoord,this.camera)},this._pointerdown=d=>{const n=()=>{let l=[...this._outlinePass.selectedObjects];this._outlinePass.selectedObjects=[],this.amr.slots.forEach(_=>_.selected=!1);const g=this._raycaster.intersectObjects(this.amr.slots,!1)[0];g&&this.amr.slots.forEach(_=>{_.traverse(p=>{p==g.object?l!=null&&l.includes(_)?(l=void 0,_.deviceSelected=!1):(this._outlinePass.selectedObjects=[_],_.deviceSelected=!0):_.deviceSelected=!1})}),this._pointerDownTimeout=0};this._pointerDownTimeout=window.setTimeout(n,200)},this._detectTrackpad=()=>{at||typeof at<"u"||(pi===0&&(_s=performance.now()),pi++,performance.now()-_s>66&&(pi>5?at=!0:at=!1,at?this.controls.zoomSpeed=.2:this.controls.zoomSpeed=1,setTimeout(du,2e3)))},this.debounceForkHeightChange=_l(()=>{var d;(d=this._progressShadow)==null||d.recalculate()},300),this.focusSlots=d=>{if(this.amr.slots.forEach(A=>A.focused=!1),!d.length){this.fit();return}const n=d.flatMap(A=>{if(A.focused=!0,!A.parent)return[];const P=new f.Vector3;return A.parent.getWorldPosition(P),[P]});if(!n.length)return;const l=n.reduce((A,P)=>A.add(P),new f.Vector3).multiplyScalar(1/n.length),h=this.controls.target.clone(),g=this.camera.position.clone().sub(h).normalize();let _=0;for(const A of n){const P=A.clone().sub(l),I=P.dot(g),L=Math.sqrt(Math.max(0,P.lengthSq()-I*I));L>_&&(_=L)}_=_*1.2+.45;const p=this.camera.fov*Math.PI/180,v=2*Math.atan(Math.tan(p/2)*this.camera.aspect),y=_/Math.tan(v/2),x=_/Math.tan(p/2),w=Math.max(y,x),b=new f.Vector3(0,0,l.z),T=l.clone().sub(b).normalize().multiplyScalar(w<1?1:w).add(l),M=this.camera.position.clone(),S=h.clone(),C={t:0};let R=500;const E=M.distanceTo(T)+S.distanceTo(b);E>.001&&(R=Math.min(1e3,Math.max(450,E*45))),this._fitAnimation=new gi(C).to({t:1},R).easing(me.Easing.Quadratic.InOut).onStart(()=>{this.controls.enabled=!1}).onUpdate(()=>{const A=C.t;this.camera.position.lerpVectors(M,T,A),this.controls.target.lerpVectors(S,b,A)}).onComplete(()=>{this.controls.enabled=!0}).start()},this.fit=()=>{new f.Box3().setFromObject(this._container);const n=this.amr.sizeBox.size.getSize(new f.Vector3),l=n.clone().multiplyScalar(.5),h=new f.Vector3(0,0,l.z);let g=l.clone().sub(h);g.lengthSq()<1e-6&&(g=new f.Vector3(1,0,0));const _=g.clone().normalize(),p=n.clone().multiplyScalar(.5),v=[new f.Vector3(p.x,p.y,p.z),new f.Vector3(p.x,p.y,-p.z),new f.Vector3(p.x,-p.y,p.z),new f.Vector3(p.x,-p.y,-p.z),new f.Vector3(-p.x,p.y,p.z),new f.Vector3(-p.x,p.y,-p.z),new f.Vector3(-p.x,-p.y,p.z),new f.Vector3(-p.x,-p.y,-p.z)];let y=0;for(const B of v){const U=B.dot(_),H=Math.sqrt(Math.max(0,B.lengthSq()-U*U));H>y&&(y=H)}y=y*1.05;const x=this.camera.fov*Math.PI/180,w=2*Math.atan(Math.tan(x/2)*this.camera.aspect),b=y/Math.tan(w/2),T=y/Math.tan(x/2),M=Math.max(b,T),S=l.clone();let C=n.z/3;n.z<n.x&&n.z<n.y&&(C=n.x*.8),n.z>n.x&&n.z>n.y&&(C=0),S.z+=C;const R=g.clone().normalize().multiplyScalar(M<1?1:M).add(S),E=Math.max(n.x*2,5);this.light.position.set(E,0,n.z*2);const A=this.camera.position.clone(),P=this.controls.target.clone(),I={t:0};let L=600;const F=A.distanceTo(R)+P.distanceTo(h);F>.001&&(L=Math.min(800,Math.max(650,F*45))),this._fitAnimation=new gi(I).to({t:1},L).easing(me.Easing.Quadratic.InOut).onStart(()=>{this.controls.enabled=!1}).onUpdate(()=>{const B=I.t;this.camera.position.lerpVectors(A,R,B),this.controls.target.lerpVectors(P,h,B)}).onComplete(()=>{this.controls.enabled=!0,!this.shadowMode&&(this._progressShadow.visible=!0,this._progressShadow.isFinished||this._progressShadow.recalculate())}).start(),this.controls.minDistance=Math.max(.2,Math.min(M*.25,M-.1)),this.controls.maxDistance=M*4},this.resize=()=>{var _;const d=this.renderer.domElement.parentElement;if(!d)return;d.style.display="flex",this.renderer.domElement.style.width="100%",this.renderer.domElement.style.height="100%",this.renderer.domElement.style.flexGrow="1";const n=d.clientWidth,l=d.clientHeight;this.size.set(n,l),this.camera.aspect=n/l,this.camera.updateProjectionMatrix(),this._amrRender.setSize(n,l),this._updateCamera(),this.css2dRenderer.setSize(n,l);const h=this.renderer.getPixelRatio();(_=this.pathTracer)==null||_.updateCamera(),this.sampleCount=0,this.renderer.setSize(n,l),this._composer.setSize(n,l),this._composer.passes.forEach(p=>p.setSize(n,l));const g=this._fxaaPass.material.uniforms;g.resolution.value.x=1/(n*h),g.resolution.value.y=1/(l*h),this._bloomPass&&this._bloomPass.setSize(n,l)},this.ticker=()=>{if(!this._destroyed){if(this.stats.begin(),this.renderer.domElement.dispatchEvent(new CustomEvent("ticker")),this._rafId=requestAnimationFrame(this.ticker),this.renderer.autoClear=!1,this.renderer.clear(),this.usePathTracing){this.hideAmrUI(),this.sampleCount<this.maxSample?this.sampleCount++:this.pathTracer.pausePathTracing=!0,this.pathTracer.renderSample();const d=this.renderer.autoClear;this.renderer.autoClear=!1,this.scene.overrideMaterial=pu,this.renderer.clearDepth(),this.renderer.render(this.scene,this.mainCamera),this.scene.overrideMaterial=null,this.renderer.render(this.overlayScene,this.mainCamera),this.renderer.autoClear=d}else{this._clock.getElapsedTime()-this._uiHiddenTime>.15?this.showAmrUI(!0):this.hideAmrUI(!1,!1);const n=this.stats.fps();this.usePathTracing||(this._fpsCache.length>this._fpsCacheMax&&this._fpsCache.shift(),this._fpsCache.push(n)),this.amr.slots.forEach(l=>{this._dragging?l.getCanInstall()&&l.render(this):l.render(this)}),me.update(),this.controls.update(),this._progressShadow.update(this.mainCamera),this.css2dRenderer.render(this.scene,this.mainCamera),this.updatePosition(),this.scene.overrideMaterial=null,this.renderer.render(this.scene,this.mainCamera)}this.stats.end()}},this.stats.showPanel(0),this.hideState(),e.fov&&(this.camera.fov=e.fov,this.camera.updateProjectionMatrix()),Zr(gt,this.renderer),this._ground.visible=!1,this.controls=new Dn.OrbitControls(this.camera,this.renderer.domElement),this.controls.enablePan=!0,this.controls.rotateSpeed=this.props.isMobile?.6:.5,this.controls.dampingFactor=Dr,this.controls.enableDamping=!0,this.controls.maxDistance=10,this.controls.minDistance=1,this.controls.zoomSpeed=this.props.isMobile?.3:en()?.2:1,this._cameraPositionUI=new cu(this.controls),this.renderer.setPixelRatio(window.devicePixelRatio||1),this.renderer.autoClear=!0,this.renderer.toneMapping=f.ACESFilmicToneMapping,this.renderer.toneMappingExposure=1.4,this.renderer.outputColorSpace=f.SRGBColorSpace,this.renderer.localClippingEnabled=!0,this.renderer.shadowMap.enabled=!0,this.css2dRenderer.domElement.style.pointerEvents="none",this.css2dRenderer.domElement.style.position="absolute",this.css2dRenderer.domElement.style.top="0px",f.ShaderChunk.tonemapping_pars_fragment=f.ShaderChunk.tonemapping_pars_fragment.replace("vec3 CustomToneMapping( vec3 color ) { return color; }",`
|
|
3860
3867
|
float startCompression = 0.8;
|
|
3861
3868
|
float desaturation = 0.5;
|
|
3862
3869
|
vec3 CustomToneMapping( vec3 color ) {
|
|
@@ -3875,9 +3882,9 @@ vec3 texelOld = texture2D(previousShadowMap, vUv).rgb;
|
|
|
3875
3882
|
color *= newPeak * invPeak;
|
|
3876
3883
|
float g = 1. - 3. / (desaturation * extraBrightness + 3.);
|
|
3877
3884
|
return mix(color, vec3(1, 1, 1), g);
|
|
3878
|
-
}`),this.camera.position.set(10,-10,5),this.camera.lookAt(new d.Vector3);const{tiles:t}=Po();this.pathTracer=new fo(this.renderer),this.pathTracer.filterGlossyFactor=.6;let i=window.devicePixelRatio;i<2&&(i=2),this.pathTracer.renderScale=this.props.isMobile?1:i,this.pathTracer.bounces=this.props.isMobile?8:10,this.pathTracer.transmissiveBounces=this.props.isMobile?1:3,this.pathTracer.tiles.set(t,t),this.pathTracer.fadeDuration=0;const r=new gl(e.workerUrl),l=typeof navigator<"u"?navigator.hardwareConcurrency:4;r.maxWorkerCount=l,this.pathTracer.setBVHWorker(r),this.orthographicCamera.left=-20,this.orthographicCamera.right=20,this.orthographicCamera.top=-20,this.orthographicCamera.bottom=20;let o=this.controls.target.x,c=this.controls.target.y;const h=()=>{this.controls.target.x=o,this.controls.target.y=c};this.controls.addEventListener("change",()=>{var p;this.sampleCount=0,h(),this._uiHiddenTime=this._clock.getElapsedTime(),this.orthographicCamera.position.copy(this.camera.position),this.orthographicCamera.lookAt(this.controls.target),this.usePathTracing&&(this.pathTracer.pausePathTracing=!1,(p=this.pathTracer)==null||p.updateCamera()),this._updateCamera(),!(Math.abs(this.camera.position.x)<.001||Math.abs(this.camera.position.y)<.001)&&(this._axisMoving||(this.mainCamera=this.camera,this.usePathTracing&&this.generateBVH().then()))}),this._mainCamera=this.camera,this._composer=new _r.EffectComposer(this.renderer),this._composer.setPixelRatio(window.devicePixelRatio);const m=new Hi.RenderPass(this.scene,this.camera);this._composer.addPass(m),this._composer.addPass(new vr.OutputPass),this._outlinePass=new Ni.OutlinePass(new d.Vector2(window.innerWidth,window.innerHeight),this.scene,this.camera),this._outlinePass.visibleEdgeColor.set(26367),this._outlinePass.edgeThickness=.5,this._outlinePass.hiddenEdgeColor.set(26367),this._outlinePass.edgeStrength=3,this._outlinePass.edgeGlow=0,this._composer.addPass(this._outlinePass),this._outlinePassError=new Ni.OutlinePass(new d.Vector2(window.innerWidth,window.innerHeight),this.scene,this.camera),this._outlinePassError.visibleEdgeColor.set(16711680),this._outlinePassError.edgeThickness=.5,this._outlinePassError.hiddenEdgeColor.set(16711680),this._outlinePassError.edgeStrength=3,this._outlinePassError.edgeGlow=0,this._composer.addPass(this._outlinePassError),this._bloomPass=new mr.UnrealBloomPass(new d.Vector2(window.innerWidth,window.innerHeight),.1,.1,.2),this._bloomPass.enabled=!1,this._bloomPass.renderToScreen=!1,this._composer.addPass(this._bloomPass),this._composer.renderTarget1.texture.colorSpace=d.SRGBColorSpace,this._composer.renderTarget2.texture.colorSpace=d.SRGBColorSpace,this._fxaaPass=new dr.ShaderPass(pr.FXAAShader),this._composer.addPass(this._fxaaPass),this._progressShadow=new _l(this.renderer,this.scene,{size:8,lightCount:e.isMobile?6:12,frames:e.isMobile?80:120,lightRadius:8,ambientWeight:.8}),this._progressShadow.lightOrigin.position.set(3,2.5,6),this._progressShadow.visible=!1,this._container.add(this.amr),this.scene.add(this._container),this.ticker(),this._loadEnv(),this._initEvents(),this.scene.add(this._cameraPositionUI),this._ground.rotateX(-Math.PI/2),this.scene.add(this._ground),(typeof e.useAxisBall!="boolean"||e.useAxisBall)&&(this._controlsGizmo=new vl(this.controls,{size:160,padding:12,offset:e.axisBallOffset||new d.Vector2(10,10),fontSize:17,bubbleSizePrimary:18,bubbleSizeSecondary:14}),this._controlsGizmo.addListener("axis-select-start",()=>{this._axisMoving=!0,this.mainCamera=this.orthographicCamera,this.usePathTracing&&this.generateBVH().then()}),this._controlsGizmo.addListener("axis-select-end",()=>{this._axisMoving=!1})),this.test=new d.Mesh(new d.PlaneGeometry(2,2),new d.MeshBasicMaterial({map:this._amrRender.texture,opacity:.5,transparent:!0,side:d.DoubleSide})),this.test.position.set(0,1,0),this.test.visible=!1,this.scene.add(this.test)}get pointCloudMode(){return this._pointCloudMode}set pointCloudMode(e){this._pointCloudMode=e,this.amr.setPointCloudMode(e),e?setTimeout(()=>{console.log(this.amr.lines.children)},3e3):this._outlinePass.selectedObjects=[],this._bloomPass,e?this.scene.fog=null:this.scene.background=null}get usePathTracing(){return this._usePathTracing}_clearAmrContent(){const e=this.renderer.getRenderTarget();this.renderer.setRenderTarget(this._amrRender),this.renderer.setClearColor(0,0),this.renderer.clear(!0,!0,!0),this.renderer.setRenderTarget(e)}get shadowMode(){return this._shadowMode}set shadowMode(e){e?(this._progressShadow.visible=!1,this.amr.bodyOpacity=.2):(this._progressShadow.visible=!0,this.amr.bodyOpacity=1,this._progressShadow.isFinished||this._progressShadow.recalculate().then()),this._shadowMode=e}set usePathTracing(e){this._clearAmrContent(),e?(this.scene.add(this.light),this.renderer.toneMappingExposure=1.8,this.overlayScene.add(this._progressShadow.shadowCatcherMesh),this.amr&&(this.amr.bodyOpacity=1),this.hideAmrUI(),this.pathTracer.renderToCanvas=!0,this.scene.background=null):(this.light.removeFromParent(),this.renderer.toneMappingExposure=1.4,this.scene.add(this._progressShadow.shadowCatcherMesh),this.pathTracer.renderToCanvas=!1,this.amr.logos.forEach(t=>{var i;(i=t.parent)==null||i.add(t.target)}),this.showAmrUI(),this.amr&&this.amr.opacityCache!==void 0?(this.amr.bodyOpacity=this.amr.opacityCache,this.amr.opacityCache=void 0):this.amr&&(this.amr.bodyOpacity=1),this.pathTracer.reset(),this._ground.visible=!1,this.scene.background=this.scene.environment),this._usePathTracing=e,this.controls.dampingFactor=e?1:Bs,this.sampleCount=0}get fpsAverage(){return qs(this._fpsCache)}get mainCamera(){return this._mainCamera}set mainCamera(e){this._mainCamera=e,this._composer.passes.forEach(t=>{t instanceof Hi.RenderPass&&(t.camera=e)}),e instanceof d.OrthographicCamera?this.scene.background=null:this.scene.background=this.scene.environment}showState(){this.stats.dom.style.display="block"}hideState(){this.stats.dom.style.display="none"}hideAmrUI(e=!0,t=!0){this.shadowMode||this.amr.slots.forEach(i=>i.hide()),this.amr.sizeBox.hide(e),this.amr.controllers.forEach(i=>i.hide()),t&&this.amr.goods.forEach(i=>i.hide())}showAmrUI(e=!0){this.showSlots&&this.amr.slots.forEach(t=>t.show()),this.showSize&&this.amr.sizeBox.show(e),this.showControls&&this.amr.controllers.forEach(t=>t.show()),this.amr.goods.forEach(t=>t.show())}get showSlots(){return this._showSlots}set showSlots(e){this._showSlots=e,this.amr.slots.forEach(t=>e?t.show():t.hide())}get showSize(){return this._showSize}set showSize(e){this._showSize=e,e?this.amr.sizeBox.show(!0):this.amr.sizeBox.hide(!0)}get showControls(){return this._showControls}set showControls(e){this._showControls=e,this.amr.controllers.forEach(t=>e?t.show():t.hide())}_updateCamera(){const e=this.mainCamera.position.distanceTo(this.controls.target),t=2*Math.tan(this.camera.fov*.5*Math.PI/180)*e,i=this.size.x/this.size.y;this.orthographicCamera.left=-t*i/2,this.orthographicCamera.right=t*i/2,this.orthographicCamera.top=t/2,this.orthographicCamera.bottom=-t/2,this.orthographicCamera.updateProjectionMatrix()}_loadEnv(){new fr.HDRLoader().load(bl,t=>{t.mapping=d.EquirectangularReflectionMapping,this._usePathTracing||(this.scene.background=t,this.scene.backgroundBlurriness=1,this.scene.backgroundIntensity=1,this.scene.backgroundRotation=new d.Euler(Math.PI/2,0,Math.PI*.98*.8),this.scene.environment=t,this.overlayScene.environment=t,this.scene.environmentRotation=this.scene.backgroundRotation,this.overlayScene.environmentRotation=this.scene.environmentRotation,this.scene.environmentIntensity=1.4,this.overlayScene.environmentIntensity=this.scene.environmentIntensity),this.pathTracer.updateEnvironment()},()=>{},()=>{})}_initEvents(){window.addEventListener("drag",this._drag),window.addEventListener("dragend",this._dragend),document.addEventListener("wheel",this._detectTrackpad),window.addEventListener("pointermove",this._pointermove),this.renderer.domElement.addEventListener("pointerdown",this._pointerdown)}switchCamera(){this.mainCamera=this.mainCamera===this.camera?this.orthographicCamera:this.camera}toCameraTop(){const e=this.camera.position.distanceTo(this.controls.target);this.camera.position.copy(new d.Vector3(0,e+this.controls.target.y,0))}toCameraRight(){const e=this.camera.position.distanceTo(this.controls.target);this.camera.position.copy(new d.Vector3(0,this.controls.target.y,e))}toCameraFace(){const e=this.camera.position.distanceTo(this.controls.target);this.camera.position.copy(new d.Vector3(e,this.controls.target.y,0))}async generateBVH(){this.pathTracer.pausePathTracing=!1,this.amr.slots.forEach(e=>e.hide()),this.amr&&(this.amr.opacityCache=this.amr.bodyOpacity,this.amr.bodyOpacity=1,this.overlayScene.clear(),this.amr.logos.forEach(e=>{const t=new d.Group;e.target.updateMatrixWorld(!0),t.applyMatrix4(e.target.matrixWorld),t.add(e.target),this.overlayScene.add(t)})),this.usePathTracing=!0,this.pathTracer.setScene(this.scene,this.mainCamera)}async download(e=!1){if(e&&!this.usePathTracing){const t=this._amrRender.width,i=this._amrRender.height,r=new Uint8Array(t*i*4);this.renderer.setRenderTarget(this._amrRender),this.renderer.readRenderTargetPixels(this._amrRender,0,0,t,i,r),this.renderer.setRenderTarget(null);const l=document.createElement("canvas");l.width=t,l.height=i;const o=l.getContext("2d"),c=new ImageData(t,i);for(let h=0;h<i;h++)for(let m=0;m<t;m++){const p=((i-h-1)*t+m)*4,s=(h*t+m)*4;c.data[s]=r[p],c.data[s+1]=r[p+1],c.data[s+2]=r[p+2],c.data[s+3]=r[p+3]}return o.putImageData(c,0,0),l.toDataURL("image/png")}else return new Promise((t,i)=>{this._uiHiddenTime=this._clock.getElapsedTime(),this.hideAmrUI();const r=this.scene.background;this.scene.background=null,setTimeout(()=>{const l=this.renderer.domElement.toDataURL("image/png");return this.scene.background=r,t(l)},this.fpsAverage)})}async captureTriViews(e){var o;const t=(e==null?void 0:e.subject)??this._container;(o=this._progressShadow)==null||o.visible;const i=this.scene.background,r=this.showSize;return new cr({renderer:this.renderer,scene:this.scene,overlayScene:this.overlayScene,subject:t,onBeforeCapture:()=>{this.scene.background=null,this.hideAmrUI(),this.showSize=!1,this.usePathTracing&&(this.usePathTracing=!1),this._progressShadow.visible=!1},onAfterCapture:()=>{this.scene.background=i,this.showAmrUI(),this.showSize=r,this._progressShadow.visible=!0}}).capture(e)}clearAMR(){oe(this.overlayScene),this.amr.clean(),this.usePathTracing=!1}async exportAMR(){const e=this._container.clone(!0);return e.traverse(t=>{t.dispose&&(t.dispose(),t.removeFromParent())}),await Zs.parseAsync(e,{onlyVisible:!0,binary:!0})}async addAMR(e,t=""){this.amr.init(this),await this.amr.load(e,t),this._progressShadow.clear(),this.amr.addEventListener("fork-height-change",this.debounceForkHeightChange),this.amr.addEventListener("shape-key-changed",(i,r)=>{this.pathTracer.reset(),this.sampleCount=0,this.pathTracer.setScene(this.scene,this.camera),this.overlayScene.traverse(l=>{if(!Object.keys(l.morphTargetDictionary||{}).includes(i))return;let o=r;l.userData[`origin_${i}`]&&(o-=l.userData[`origin_${i}`]);const c=l.morphTargetDictionary[i];l.morphTargetInfluences&&(l.morphTargetInfluences[c]=o),l instanceof d.Mesh&&l.geometry.translate(0,0,1e-5)}),this._progressShadow.clear(),this._progressShadow.recalculate()})}select(e){typeof e=="string"||(Array.isArray(e)?this._outlinePass.selectedObjects=[...e]:this._outlinePass.selectedObjects=[e])}appendTo(e){e.append(this.renderer.domElement),e.append(this.stats.dom),e.append(this.css2dRenderer.domElement),this.props.isMobile&&(e.classList.add("is-mobile"),e.style.cssText=`
|
|
3885
|
+
}`),this.camera.position.set(10,-10,5),this.camera.lookAt(new f.Vector3);const{tiles:t}=gl();this.pathTracer=new Ia(this.renderer),this.pathTracer.filterGlossyFactor=.6;let i=window.devicePixelRatio;i<2&&(i=2),this.pathTracer.renderScale=this.props.isMobile?1:i,this.pathTracer.bounces=this.props.isMobile?8:10,this.pathTracer.transmissiveBounces=this.props.isMobile?1:3,this.pathTracer.tiles.set(t,t),this.pathTracer.fadeDuration=0;const s=new ru(e.workerUrl),a=typeof navigator<"u"?navigator.hardwareConcurrency:4;s.maxWorkerCount=a,this.pathTracer.setBVHWorker(s),this.orthographicCamera.left=-20,this.orthographicCamera.right=20,this.orthographicCamera.top=-20,this.orthographicCamera.bottom=20;let o=this.controls.target.x,c=this.controls.target.y;const u=()=>{this.controls.target.x=o,this.controls.target.y=c};this.controls.addEventListener("change",()=>{var d;this.sampleCount=0,u(),this._uiHiddenTime=this._clock.getElapsedTime(),this.orthographicCamera.position.copy(this.camera.position),this.orthographicCamera.lookAt(this.controls.target),this.usePathTracing&&(this.pathTracer.pausePathTracing=!1,(d=this.pathTracer)==null||d.updateCamera()),this._updateCamera(),!(Math.abs(this.camera.position.x)<.001||Math.abs(this.camera.position.y)<.001)&&(this._axisMoving||(this.mainCamera=this.camera,this.usePathTracing&&this.generateBVH().then()))}),this._mainCamera=this.camera,this._composer=new Fn.EffectComposer(this.renderer),this._composer.setPixelRatio(window.devicePixelRatio);const m=new Bs.RenderPass(this.scene,this.camera);this._composer.addPass(m),this._composer.addPass(new Ln.OutputPass),this._outlinePass=new ks.OutlinePass(new f.Vector2(window.innerWidth,window.innerHeight),this.scene,this.camera),this._outlinePass.visibleEdgeColor.set(26367),this._outlinePass.edgeThickness=.5,this._outlinePass.hiddenEdgeColor.set(26367),this._outlinePass.edgeStrength=3,this._outlinePass.edgeGlow=0,this._composer.addPass(this._outlinePass),this._outlinePassError=new ks.OutlinePass(new f.Vector2(window.innerWidth,window.innerHeight),this.scene,this.camera),this._outlinePassError.visibleEdgeColor.set(16711680),this._outlinePassError.edgeThickness=.5,this._outlinePassError.hiddenEdgeColor.set(16711680),this._outlinePassError.edgeStrength=3,this._outlinePassError.edgeGlow=0,this._composer.addPass(this._outlinePassError),this._bloomPass=new En.UnrealBloomPass(new f.Vector2(window.innerWidth,window.innerHeight),.1,.1,.2),this._bloomPass.enabled=!1,this._bloomPass.renderToScreen=!1,this._composer.addPass(this._bloomPass),this._composer.renderTarget1.texture.colorSpace=f.SRGBColorSpace,this._composer.renderTarget2.texture.colorSpace=f.SRGBColorSpace,this._fxaaPass=new Rn.ShaderPass(In.FXAAShader),this._composer.addPass(this._fxaaPass),this._progressShadow=new ou(this.renderer,this.scene,{size:8,lightCount:e.isMobile?6:12,frames:e.isMobile?80:120,lightRadius:8,ambientWeight:.8}),this._progressShadow.lightOrigin.position.set(3,2.5,6),this._progressShadow.visible=!1,this._container.add(this.amr),this.scene.add(this._container),this.ticker(),this._loadEnv(),this._initEvents(),this.scene.add(this._cameraPositionUI),this._ground.rotateX(-Math.PI/2),this.scene.add(this._ground),(typeof e.useAxisBall!="boolean"||e.useAxisBall)&&(this._controlsGizmo=new nu(this.controls,{size:160,padding:12,offset:e.axisBallOffset||new f.Vector2(10,10),fontSize:17,bubbleSizePrimary:18,bubbleSizeSecondary:14}),this._controlsGizmo.addListener("axis-select-start",()=>{this._axisMoving=!0,this.mainCamera=this.orthographicCamera,this.usePathTracing&&this.generateBVH().then()}),this._controlsGizmo.addListener("axis-select-end",()=>{this._axisMoving=!1})),this.test=new f.Mesh(new f.PlaneGeometry(2,2),new f.MeshBasicMaterial({map:this._amrRender.texture,opacity:.5,transparent:!0,side:f.DoubleSide})),this.test.position.set(0,1,0),this.test.visible=!1,this.scene.add(this.test)}get pointCloudMode(){return this._pointCloudMode}set pointCloudMode(e){this._pointCloudMode=e,this.amr.setPointCloudMode(e),e?setTimeout(()=>{console.log(this.amr.lines.children)},3e3):this._outlinePass.selectedObjects=[],this._bloomPass,e?this.scene.fog=null:this.scene.background=null}get usePathTracing(){return this._usePathTracing}_clearAmrContent(){const e=this.renderer.getRenderTarget();this.renderer.setRenderTarget(this._amrRender),this.renderer.setClearColor(0,0),this.renderer.clear(!0,!0,!0),this.renderer.setRenderTarget(e)}get shadowMode(){return this._shadowMode}set shadowMode(e){e?(this._progressShadow.visible=!1,this.amr.bodyOpacity=.2):(this._progressShadow.visible=!0,this.amr.bodyOpacity=1,this._progressShadow.isFinished||this._progressShadow.recalculate().then()),this._shadowMode=e}set usePathTracing(e){this._clearAmrContent(),e?(this.scene.add(this.light),this.renderer.toneMappingExposure=1.8,this.overlayScene.add(this._progressShadow.shadowCatcherMesh),this.amr&&(this.amr.bodyOpacity=1),this.hideAmrUI(),this.pathTracer.renderToCanvas=!0,this.scene.background=null):(this.light.removeFromParent(),this.renderer.toneMappingExposure=1.4,this.scene.add(this._progressShadow.shadowCatcherMesh),this.pathTracer.renderToCanvas=!1,this.amr.logos.forEach(t=>{var i;(i=t.parent)==null||i.add(t.target)}),this.showAmrUI(),this.amr&&this.amr.opacityCache!==void 0?(this.amr.bodyOpacity=this.amr.opacityCache,this.amr.opacityCache=void 0):this.amr&&(this.amr.bodyOpacity=1),this.pathTracer.reset(),this._ground.visible=!1,this.scene.background=this.scene.environment),this._usePathTracing=e,this.controls.dampingFactor=e?1:Dr,this.sampleCount=0}get fpsAverage(){return Jr(this._fpsCache)}get mainCamera(){return this._mainCamera}set mainCamera(e){this._mainCamera=e,this._composer.passes.forEach(t=>{t instanceof Bs.RenderPass&&(t.camera=e)}),e instanceof f.OrthographicCamera?this.scene.background=null:this.scene.background=this.scene.environment}showState(){this.stats.dom.style.display="block"}hideState(){this.stats.dom.style.display="none"}hideAmrUI(e=!0,t=!0){this.shadowMode||this.amr.slots.forEach(i=>i.hide()),this.amr.sizeBox.hide(e),this.amr.controllers.forEach(i=>i.hide()),t&&this.amr.goods.forEach(i=>i.hide())}showAmrUI(e=!0){this.showSlots&&this.amr.slots.forEach(t=>t.show()),this.showSize&&this.amr.sizeBox.show(e),this.showControls&&this.amr.controllers.forEach(t=>t.show()),this.amr.goods.forEach(t=>t.show())}get showSlots(){return this._showSlots}set showSlots(e){this._showSlots=e,this.amr.slots.forEach(t=>e?t.show():t.hide())}get showSize(){return this._showSize}set showSize(e){this._showSize=e,e?this.amr.sizeBox.show(!0):this.amr.sizeBox.hide(!0)}get showControls(){return this._showControls}set showControls(e){this._showControls=e,this.amr.controllers.forEach(t=>e?t.show():t.hide())}_updateCamera(){const e=this.mainCamera.position.distanceTo(this.controls.target),t=2*Math.tan(this.camera.fov*.5*Math.PI/180)*e,i=this.size.x/this.size.y;this.orthographicCamera.left=-t*i/2,this.orthographicCamera.right=t*i/2,this.orthographicCamera.top=t/2,this.orthographicCamera.bottom=-t/2,this.orthographicCamera.updateProjectionMatrix()}_loadEnv(){new Pn.HDRLoader().load(uu,t=>{t.mapping=f.EquirectangularReflectionMapping,this._usePathTracing||(this.scene.background=t,this.scene.backgroundBlurriness=1,this.scene.backgroundIntensity=1,this.scene.backgroundRotation=new f.Euler(Math.PI/2,0,Math.PI*.98*.8),this.scene.environment=t,this.overlayScene.environment=t,this.scene.environmentRotation=this.scene.backgroundRotation,this.overlayScene.environmentRotation=this.scene.environmentRotation,this.scene.environmentIntensity=1.4,this.overlayScene.environmentIntensity=this.scene.environmentIntensity),this.pathTracer.updateEnvironment()},()=>{},()=>{})}_initEvents(){window.addEventListener("drag",this._drag),window.addEventListener("dragend",this._dragend),document.addEventListener("wheel",this._detectTrackpad),window.addEventListener("pointermove",this._pointermove),this.renderer.domElement.addEventListener("pointerdown",this._pointerdown)}switchCamera(){this.mainCamera=this.mainCamera===this.camera?this.orthographicCamera:this.camera}toCameraTop(){const e=this.camera.position.distanceTo(this.controls.target);this.camera.position.copy(new f.Vector3(0,e+this.controls.target.y,0))}toCameraRight(){const e=this.camera.position.distanceTo(this.controls.target);this.camera.position.copy(new f.Vector3(0,this.controls.target.y,e))}toCameraFace(){const e=this.camera.position.distanceTo(this.controls.target);this.camera.position.copy(new f.Vector3(e,this.controls.target.y,0))}async generateBVH(){this.pathTracer.pausePathTracing=!1,this.amr.slots.forEach(e=>e.hide()),this.amr&&(this.amr.opacityCache=this.amr.bodyOpacity,this.amr.bodyOpacity=1,this.overlayScene.clear(),this.amr.logos.forEach(e=>{const t=new f.Group;e.target.updateMatrixWorld(!0),t.applyMatrix4(e.target.matrixWorld),t.add(e.target),this.overlayScene.add(t)})),this.usePathTracing=!0,this.pathTracer.setScene(this.scene,this.mainCamera)}async download(e=!1){if(e&&!this.usePathTracing){const t=this._amrRender.width,i=this._amrRender.height,s=new Uint8Array(t*i*4);this.renderer.setRenderTarget(this._amrRender),this.renderer.readRenderTargetPixels(this._amrRender,0,0,t,i,s),this.renderer.setRenderTarget(null);const a=document.createElement("canvas");a.width=t,a.height=i;const o=a.getContext("2d"),c=new ImageData(t,i);for(let u=0;u<i;u++)for(let m=0;m<t;m++){const d=((i-u-1)*t+m)*4,n=(u*t+m)*4;c.data[n]=s[d],c.data[n+1]=s[d+1],c.data[n+2]=s[d+2],c.data[n+3]=s[d+3]}return o.putImageData(c,0,0),a.toDataURL("image/png")}else return new Promise((t,i)=>{this._uiHiddenTime=this._clock.getElapsedTime(),this.hideAmrUI();const s=this.scene.background;this.scene.background=null,setTimeout(()=>{const a=this.renderer.domElement.toDataURL("image/png");return this.scene.background=s,t(a)},this.fpsAverage)})}async captureTriViews(e){var o;const t=(e==null?void 0:e.subject)??this._container;(o=this._progressShadow)==null||o.visible;const i=this.scene.background,s=this.showSize;return new vn({renderer:this.renderer,scene:this.scene,overlayScene:this.overlayScene,subject:t,onBeforeCapture:()=>{this.scene.background=null,this.hideAmrUI(),this.showSize=!1,this.usePathTracing&&(this.usePathTracing=!1),this._progressShadow.visible=!1},onAfterCapture:()=>{this.scene.background=i,this.showAmrUI(),this.showSize=s,this._progressShadow.visible=!0}}).capture(e)}clearAMR(){Ae(this.overlayScene),this.amr.clean(),this.usePathTracing=!1}async exportAMR(){const e=this._container.clone(!0);return e.traverse(t=>{t.dispose&&(t.dispose(),t.removeFromParent())}),await sn.parseAsync(e,{onlyVisible:!0,binary:!0})}async addAMR(e,t=""){this.amr.init(this),await this.amr.load(e,t),this._progressShadow.clear(),this.amr.addEventListener("fork-height-change",this.debounceForkHeightChange),this.amr.addEventListener("shape-key-changed",(i,s)=>{this.pathTracer.reset(),this.sampleCount=0,this.pathTracer.setScene(this.scene,this.camera),this.overlayScene.traverse(a=>{if(!Object.keys(a.morphTargetDictionary||{}).includes(i))return;let o=s;a.userData[`origin_${i}`]&&(o-=a.userData[`origin_${i}`]);const c=a.morphTargetDictionary[i];a.morphTargetInfluences&&(a.morphTargetInfluences[c]=o),a instanceof f.Mesh&&a.geometry.translate(0,0,1e-5)}),this._progressShadow.clear(),this._progressShadow.recalculate()})}select(e){typeof e=="string"||(Array.isArray(e)?this._outlinePass.selectedObjects=[...e]:this._outlinePass.selectedObjects=[e])}appendTo(e){e.append(this.renderer.domElement),e.append(this.stats.dom),e.append(this.css2dRenderer.domElement),this.props.isMobile&&(e.classList.add("is-mobile"),e.style.cssText=`
|
|
3879
3886
|
-webkit-user-select: none;
|
|
3880
3887
|
user-select: none;
|
|
3881
3888
|
touch-action: none;
|
|
3882
3889
|
-webkit-touch-callout: none;
|
|
3883
|
-
`),this._controlsGizmo&&this._controlsGizmo.appendTo(e),this.stats.dom.style.bottom="0",this.stats.dom.style.top="auto",this.resize(),this._resizeObserver=new ResizeObserver(this.resize.bind(this)),this._resizeObserver.observe(e)}add(e){this._container.add(e)}updatePosition(){}removeFromParent(){var t;const e=this.renderer.domElement.parentElement;e&&((t=this._resizeObserver)==null||t.unobserve(e),e.removeChild(this.renderer.domElement))}clean(){this.amr.clean(),this._progressShadow.clear()}destroy(){var t,i,r;this._destroyed=!0,this._rafId!==null&&(cancelAnimationFrame(this._rafId),this._rafId=null),this._clock.stop(),(t=this._controlsGizmo)==null||t.destroy(),this.amr.destroy(),this.amr.removeFromParent(),this._progressShadow.destroy(),ie.removeAll(),this.stats.dom.remove(),this._emitter.removeAllListeners(),(i=this._fitAnimation)==null||i.stop(),window.removeEventListener("drag",this._drag),document.removeEventListener("wheel",this._detectTrackpad),window.removeEventListener("pointermove",this._pointermove),this.renderer.domElement.removeEventListener("pointerdown",this._pointerdown);const e=this.renderer.domElement.parentElement;e&&((r=this._resizeObserver)==null||r.unobserve(e)),this.controls.dispose(),this.renderer.domElement.remove(),this.renderer.dispose(),this._composer.dispose(),oe(this.scene),this.scene.clear()}}class cr{constructor(e){this.deps=e,this.canvas=null,this.pixelBuffer=null,this.orthoCamera=new d.OrthographicCamera(-1,1,1,-1,.1,1e3),this.orthoCamera.position.set(0,0,5),this.perspectiveCamera=new d.PerspectiveCamera(45,1,.1,2e3)}async capture(e){var g,_,f,v,y,x;const t=this.deps.renderer,i=(e==null?void 0:e.subject)??this.deps.subject;if(!i)throw new Error("TriViewCapture: subject is required.");const r=new d.Vector2;t.getSize(r);const l=((g=e==null?void 0:e.size)==null?void 0:g.width)??Math.round(r.x),o=((_=e==null?void 0:e.size)==null?void 0:_.height)??Math.round(r.y),c=(e==null?void 0:e.margin)??.15,h=(e==null?void 0:e.includeOverlay)??!1,m=l/o||1,p=this.resolveViews(e==null?void 0:e.views),s=new d.WebGLRenderTarget(l,o,{format:d.RGBAFormat,type:d.UnsignedByteType});s.texture.colorSpace=d.SRGBColorSpace,s.texture.generateMipmaps=!1,s.depthBuffer=!0;const a=this.storeRendererState(t),u={};try{(v=(f=this.deps).onBeforeCapture)==null||v.call(f);const w=this.computeBounds(i);this.applyRendererState(t,l,o,e==null?void 0:e.backgroundColor);for(const b of p){const C=this.configureCamera(w,b,m,c,l,o);t.setRenderTarget(s),t.clear(!0,!0,!0),t.render(this.deps.scene,C),h&&this.deps.overlayScene&&(t.clearDepth(),t.render(this.deps.overlayScene,C));const T=this.readPixels(t,s,l,o);u[b.key]=T}}finally{s.dispose(),this.restoreRendererState(t,a),(x=(y=this.deps).onAfterCapture)==null||x.call(y)}return u}resolveViews(e){return e&&e.length?e.map(t=>({key:t.key,direction:t.direction.clone(),up:t.up.clone(),plane:t.plane})):[{key:"top",direction:new d.Vector3(0,0,1),up:new d.Vector3(0,1,0),plane:{width:"x",height:"y",depth:"z"}},{key:"front",direction:new d.Vector3(0,-1,0),up:new d.Vector3(0,0,1),plane:{width:"x",height:"z",depth:"y"}},{key:"side",direction:new d.Vector3(1,0,0),up:new d.Vector3(0,0,1),plane:{width:"y",height:"z",depth:"x"}},{key:"perspective",direction:new d.Vector3(1,1,1),up:new d.Vector3(0,0,1),plane:{width:"x",height:"z",depth:"y"},mode:"perspective",fov:39.6}]}computeBounds(e){const t=new d.Box3,i=new d.Box3,r=new d.Vector3,l=new d.Vector3,o=new d.Sphere;return e.updateMatrixWorld(!0),e.traverse(c=>{if(!c.visible)return;const m=c.geometry;if(!m)return;m.boundingBox||m.computeBoundingBox();const p=m.boundingBox;p&&(i.copy(p).applyMatrix4(c.matrixWorld),t.union(i))}),t.isEmpty()?(t.setFromCenterAndSize(r,new d.Vector3(.001,.001,.001)),l.set(.001,.001,.001),o.center.copy(r),o.radius=.001):(t.getCenter(r),t.getSize(l),t.getBoundingSphere(o)),(!Number.isFinite(o.radius)||o.radius<=0)&&(o.radius=Math.max(l.length()*.5,.001)),{box:t,center:r,size:l,sphere:o}}configureCamera(e,t,i,r,l,o){const c=t.direction.clone().normalize();c.lengthSq()===0&&c.set(0,0,1);const h=t.up.clone().normalize();if(Math.abs(h.dot(c))>.999&&(h.set(0,0,1),Math.abs(h.dot(c))>.999&&h.set(0,1,0)),(t.mode??"orthographic")==="perspective"){const w=this.perspectiveCamera,b=t.fov??45,C=d.MathUtils.degToRad(b),T=Math.max(Math.tan(C/2),1e-4),S=Math.max(T*(i||1),1e-4),A=this.getPerspectiveDirection(t,e.size).normalize(),P=new d.Vector3().crossVectors(A,h).normalize();P.lengthSq()<1e-6&&P.set(1,0,0);const I=new d.Vector3().crossVectors(P,A).normalize(),M=Math.max(e.size.x*.5,1e-4),R=Math.max(e.size.y*.5,1e-4),E=Math.max(e.size.z*.5,1e-4),F=[new d.Vector3(-M,-R,-E),new d.Vector3(-M,-R,E),new d.Vector3(-M,R,-E),new d.Vector3(-M,R,E),new d.Vector3(M,-R,-E),new d.Vector3(M,-R,E),new d.Vector3(M,R,-E),new d.Vector3(M,R,E)];let D=0,L=-1/0;for(const G of F){const Y=P.dot(G),B=I.dot(G),le=A.dot(G);L=Math.max(L,le);const we=le+Math.abs(Y)/S,me=le+Math.abs(B)/T;D=Math.max(D,we,me)}D=Math.max(D,L+.1);const V=D*(1+r);let z=1/0;for(const G of F){const Y=A.dot(G),B=V-Y;B>.001&&(z=Math.min(z,B))}return w.fov=b,w.aspect=i||l/Math.max(o,1),w.near=Math.max(.1,Number.isFinite(z)?z*.5:V*.1),w.far=Math.max(w.near+1,V+e.sphere.radius*3),w.position.copy(e.center).add(A.clone().multiplyScalar(V)),w.up.copy(I),w.lookAt(e.center),w.updateProjectionMatrix(),w.updateMatrixWorld(!0),w}const p=this.orthoCamera,s=e.size,a=e.center,u=Math.max(s[t.plane.width]*.5,.01),g=Math.max(s[t.plane.height]*.5,.01),_=Math.max(s[t.plane.depth]*.5,.01);let f=u*(1+r),v=g*(1+r);f/i>v?v=f/i:f=v*i;const y=_*(1+r)+Math.max(f,v),x=a.clone().add(c.multiplyScalar(y));return p.left=-f,p.right=f,p.top=v,p.bottom=-v,p.near=.1,p.far=y*4,p.zoom=1,p.position.copy(x),p.up.copy(h),p.lookAt(a),p.updateProjectionMatrix(),p.updateMatrixWorld(!0),p}getPerspectiveDirection(e,t){const i=e.direction.clone();i.lengthSq()===0&&i.set(1,1,1);const r=new d.Vector3(Math.abs(i.x)||1,Math.abs(i.y)||1,Math.abs(i.z)||1),l=new d.Vector3(Math.sign(i.x||1),Math.sign(i.y||1),Math.sign(i.z||1)),o=.25,c=new d.Vector3(Math.max(o,r.x)*Math.max(t.x,.001),Math.max(o,r.y)*Math.max(t.y,.001),0),h=Math.max((t.x+t.y)*.5,.001),m=Math.max(t.z,.001),p=Math.max(o,r.z),s=m*.5+h*.5;return c.z=p*s,c.multiply(l),c}storeRendererState(e){const t=new d.Vector2;e.getSize(t);const i=new d.Vector4;e.getViewport(i);const r=new d.Vector4;e.getScissor(r);const l=e.getClearColor(new d.Color),o=e.getClearAlpha();return{size:t,pixelRatio:e.getPixelRatio(),viewport:i,scissor:r,scissorTest:e.getScissorTest(),autoClear:e.autoClear,target:e.getRenderTarget(),clearColor:l,clearAlpha:o}}applyRendererState(e,t,i,r){if(e.setPixelRatio(1),e.setSize(t,i,!1),e.setViewport(0,0,t,i),e.setScissor(0,0,t,i),e.setScissorTest(!1),e.autoClear=!0,r!==void 0)if(r===null){const l=e.getClearColor(new d.Color);e.setClearColor(l,0)}else r instanceof d.Color?e.setClearColor(r,1):e.setClearColor(new d.Color(r),1);else{const l=e.getClearColor(new d.Color);e.setClearColor(l,0)}}restoreRendererState(e,t){e.setPixelRatio(t.pixelRatio),e.setSize(t.size.x,t.size.y,!1),e.setViewport(t.viewport.x,t.viewport.y,t.viewport.z,t.viewport.w),e.setScissor(t.scissor.x,t.scissor.y,t.scissor.z,t.scissor.w),e.setScissorTest(t.scissorTest),e.autoClear=t.autoClear,e.setRenderTarget(t.target),e.setClearColor(t.clearColor,t.clearAlpha)}readPixels(e,t,i,r){const l=i*r*4;(!this.pixelBuffer||this.pixelBuffer.length!==l)&&(this.pixelBuffer=new Uint8Array(l)),e.readRenderTargetPixels(t,0,0,i,r,this.pixelBuffer);const o=this.ensureCanvas(i,r),c=o.getContext("2d");if(!c)throw new Error("TriViewCapture: failed to get 2D context.");const h=c.createImageData(i,r),m=h.data,p=this.pixelBuffer;for(let s=0;s<r;s+=1){const u=(r-s-1)*i*4,g=s*i*4;m.set(p.subarray(u,u+i*4),g)}return c.putImageData(h,0,0),o.toDataURL("image/png")}ensureCanvas(e,t){if(typeof document>"u")throw new Error("TriViewCapture: document is not available in this environment.");return this.canvas||(this.canvas=document.createElement("canvas")),(this.canvas.width!==e||this.canvas.height!==t)&&(this.canvas.width=e,this.canvas.height=t),this.canvas}}const Pl="shop-components",Rl="0.2.7",Il="Shop components",El="dist/shop-components.umd.js",Fl="dist/shop-components.mjs",Dl="dist/main.d.ts",Bl={dts:"tsc --emitDeclarationOnly & tsc & storybook build -o dist",test:'echo "Error: no test specified" && exit 1',dev:"vite dev --open",storybook:"storybook dev -p 6006",build:"storybook build -o dist",vite:"vite build",version:"auto-changelog -p && git add CHANGELOG.md"},Ll=["dist","package.json"],kl=[],Ol="machengda<machengda@seer-group.com>",zl="ISC",Vl={"@needle-tools/gltf-progressive":"^3.3.5","auto-changelog":"^2.4.0",vite:"5.1.6","vite-plugin-dts":"^3.7.3"},Ul={"string-width":"4.2.3"},Hl={"@nodetoy/three-nodetoy":"^0.1.36","@tweakpane/core":"^2.0.3","@tweenjs/tween.js":"^23.1.2","@types/bezier-js":"^4.1.1","@types/howler":"^2.2.11","@types/three":"0.180.0","bezier-js":"^6.1.4",eventemitter3:"^5.0.1",howler:"^2.2.4","stats-fps.js":"0.0.6",stylus:"^0.63.0",terser:"^5.44.0",three:"0.180.0","three-gpu-pathtracer":"0.0.23","three-mesh-bvh":"^0.7.5","troika-three-text":"^0.49.1",tweakpane:"^4.0.3"},Nl={name:Pl,version:Rl,description:Il,main:El,module:Fl,types:Dl,scripts:Bl,files:Ll,keywords:kl,author:Ol,license:zl,devDependencies:Vl,resolutions:Ul,dependencies:Hl};function Ls(){const n="Nebular Engin",e=Nl.version,t=`%c ${n} %c v${e} `;console.log(t,"background:#111827;color:#ffffff;padding:4px 10px;border-radius:4px 0 0 4px;font-weight:700;","background:#10B981;color:#ffffff;padding:4px 10px;border-radius:0 4px 4px 0;font-weight:700;")}const ks="__SHOP_COMPONENTS_BANNER_PRINTED__";try{const n=globalThis;n[ks]||(n[ks]=!0,Ls())}catch{Ls()}exports.Amr=er;exports.Line=sa;exports.Logo=vi;exports.SGLBLoader=Vt;exports.SLOT_EVENTS=H;exports.Scene3D=Ml;exports.Skin=Mi;exports.Slot=gi;exports.SlotState=lr;exports.TriViewCapture=cr;exports.arrayBufferToUrl=pi;exports.calculateArrayAverage=qs;exports.calculateFocalLength=To;exports.createSGLBFile=Bo;exports.downloadBlob=Ao;exports.dracoExporter=Do;exports.font=Tl;exports.gltfExporter=Zs;exports.gltfLoader=ut;exports.imageBitmapToUrl=mi;exports.isAppleDevice=Ys;exports.textureLoader=Oi;
|
|
3890
|
+
`),this._controlsGizmo&&this._controlsGizmo.appendTo(e),this.stats.dom.style.bottom="0",this.stats.dom.style.top="auto",this.resize(),this._resizeObserver=new ResizeObserver(this.resize.bind(this)),this._resizeObserver.observe(e)}add(e){this._container.add(e)}updatePosition(){}removeFromParent(){var t;const e=this.renderer.domElement.parentElement;e&&((t=this._resizeObserver)==null||t.unobserve(e),e.removeChild(this.renderer.domElement))}clean(){this.amr.clean(),this._progressShadow.clear()}destroy(){var t,i,s;this._destroyed=!0,this._rafId!==null&&(cancelAnimationFrame(this._rafId),this._rafId=null),this._clock.stop(),(t=this._controlsGizmo)==null||t.destroy(),this.amr.destroy(),this.amr.removeFromParent(),this._progressShadow.destroy(),me.removeAll(),this.stats.dom.remove(),this._emitter.removeAllListeners(),(i=this._fitAnimation)==null||i.stop(),window.removeEventListener("drag",this._drag),document.removeEventListener("wheel",this._detectTrackpad),window.removeEventListener("pointermove",this._pointermove),this.renderer.domElement.removeEventListener("pointerdown",this._pointerdown);const e=this.renderer.domElement.parentElement;e&&((s=this._resizeObserver)==null||s.unobserve(e)),this.controls.dispose(),this.renderer.domElement.remove(),this.renderer.dispose(),this._composer.dispose(),Ae(this.scene),this.scene.clear()}}class vn{constructor(e){this.deps=e,this.canvas=null,this.pixelBuffer=null,this.orthoCamera=new f.OrthographicCamera(-1,1,1,-1,.1,1e3),this.orthoCamera.position.set(0,0,5),this.perspectiveCamera=new f.PerspectiveCamera(45,1,.1,2e3)}async capture(e){var g,_,p,v,y,x;const t=this.deps.renderer,i=(e==null?void 0:e.subject)??this.deps.subject;if(!i)throw new Error("TriViewCapture: subject is required.");const s=new f.Vector2;t.getSize(s);const a=((g=e==null?void 0:e.size)==null?void 0:g.width)??Math.round(s.x),o=((_=e==null?void 0:e.size)==null?void 0:_.height)??Math.round(s.y),c=(e==null?void 0:e.margin)??.15,u=(e==null?void 0:e.includeOverlay)??!1,m=a/o||1,d=this.resolveViews(e==null?void 0:e.views),n=new f.WebGLRenderTarget(a,o,{format:f.RGBAFormat,type:f.UnsignedByteType});n.texture.colorSpace=f.SRGBColorSpace,n.texture.generateMipmaps=!1,n.depthBuffer=!0;const l=this.storeRendererState(t),h={};try{(v=(p=this.deps).onBeforeCapture)==null||v.call(p);const w=this.computeBounds(i);this.applyRendererState(t,a,o,e==null?void 0:e.backgroundColor);for(const b of d){const T=this.configureCamera(w,b,m,c,a,o);t.setRenderTarget(n),t.clear(!0,!0,!0),t.render(this.deps.scene,T),u&&this.deps.overlayScene&&(t.clearDepth(),t.render(this.deps.overlayScene,T));const M=this.readPixels(t,n,a,o);h[b.key]=M}}finally{n.dispose(),this.restoreRendererState(t,l),(x=(y=this.deps).onAfterCapture)==null||x.call(y)}return h}resolveViews(e){return e&&e.length?e.map(t=>({key:t.key,direction:t.direction.clone(),up:t.up.clone(),plane:t.plane})):[{key:"top",direction:new f.Vector3(0,0,1),up:new f.Vector3(0,1,0),plane:{width:"x",height:"y",depth:"z"}},{key:"front",direction:new f.Vector3(0,-1,0),up:new f.Vector3(0,0,1),plane:{width:"x",height:"z",depth:"y"}},{key:"side",direction:new f.Vector3(1,0,0),up:new f.Vector3(0,0,1),plane:{width:"y",height:"z",depth:"x"}},{key:"perspective",direction:new f.Vector3(1,1,1),up:new f.Vector3(0,0,1),plane:{width:"x",height:"z",depth:"y"},mode:"perspective",fov:39.6}]}computeBounds(e){const t=new f.Box3,i=new f.Box3,s=new f.Vector3,a=new f.Vector3,o=new f.Sphere;return e.updateMatrixWorld(!0),e.traverse(c=>{if(!c.visible)return;const m=c.geometry;if(!m)return;m.boundingBox||m.computeBoundingBox();const d=m.boundingBox;d&&(i.copy(d).applyMatrix4(c.matrixWorld),t.union(i))}),t.isEmpty()?(t.setFromCenterAndSize(s,new f.Vector3(.001,.001,.001)),a.set(.001,.001,.001),o.center.copy(s),o.radius=.001):(t.getCenter(s),t.getSize(a),t.getBoundingSphere(o)),(!Number.isFinite(o.radius)||o.radius<=0)&&(o.radius=Math.max(a.length()*.5,.001)),{box:t,center:s,size:a,sphere:o}}configureCamera(e,t,i,s,a,o){const c=t.direction.clone().normalize();c.lengthSq()===0&&c.set(0,0,1);const u=t.up.clone().normalize();if(Math.abs(u.dot(c))>.999&&(u.set(0,0,1),Math.abs(u.dot(c))>.999&&u.set(0,1,0)),(t.mode??"orthographic")==="perspective"){const w=this.perspectiveCamera,b=t.fov??45,T=f.MathUtils.degToRad(b),M=Math.max(Math.tan(T/2),1e-4),S=Math.max(M*(i||1),1e-4),C=this.getPerspectiveDirection(t,e.size).normalize(),R=new f.Vector3().crossVectors(C,u).normalize();R.lengthSq()<1e-6&&R.set(1,0,0);const E=new f.Vector3().crossVectors(R,C).normalize(),A=Math.max(e.size.x*.5,1e-4),P=Math.max(e.size.y*.5,1e-4),I=Math.max(e.size.z*.5,1e-4),L=[new f.Vector3(-A,-P,-I),new f.Vector3(-A,-P,I),new f.Vector3(-A,P,-I),new f.Vector3(-A,P,I),new f.Vector3(A,-P,-I),new f.Vector3(A,-P,I),new f.Vector3(A,P,-I),new f.Vector3(A,P,I)];let F=0,B=-1/0;for(const j of L){const Y=R.dot(j),k=E.dot(j),de=C.dot(j);B=Math.max(B,de);const Se=de+Math.abs(Y)/S,ae=de+Math.abs(k)/M;F=Math.max(F,Se,ae)}F=Math.max(F,B+.1);const U=F*(1+s);let H=1/0;for(const j of L){const Y=C.dot(j),k=U-Y;k>.001&&(H=Math.min(H,k))}return w.fov=b,w.aspect=i||a/Math.max(o,1),w.near=Math.max(.1,Number.isFinite(H)?H*.5:U*.1),w.far=Math.max(w.near+1,U+e.sphere.radius*3),w.position.copy(e.center).add(C.clone().multiplyScalar(U)),w.up.copy(E),w.lookAt(e.center),w.updateProjectionMatrix(),w.updateMatrixWorld(!0),w}const d=this.orthoCamera,n=e.size,l=e.center,h=Math.max(n[t.plane.width]*.5,.01),g=Math.max(n[t.plane.height]*.5,.01),_=Math.max(n[t.plane.depth]*.5,.01);let p=h*(1+s),v=g*(1+s);p/i>v?v=p/i:p=v*i;const y=_*(1+s)+Math.max(p,v),x=l.clone().add(c.multiplyScalar(y));return d.left=-p,d.right=p,d.top=v,d.bottom=-v,d.near=.1,d.far=y*4,d.zoom=1,d.position.copy(x),d.up.copy(u),d.lookAt(l),d.updateProjectionMatrix(),d.updateMatrixWorld(!0),d}getPerspectiveDirection(e,t){const i=e.direction.clone();i.lengthSq()===0&&i.set(1,1,1);const s=new f.Vector3(Math.abs(i.x)||1,Math.abs(i.y)||1,Math.abs(i.z)||1),a=new f.Vector3(Math.sign(i.x||1),Math.sign(i.y||1),Math.sign(i.z||1)),o=.25,c=new f.Vector3(Math.max(o,s.x)*Math.max(t.x,.001),Math.max(o,s.y)*Math.max(t.y,.001),0),u=Math.max((t.x+t.y)*.5,.001),m=Math.max(t.z,.001),d=Math.max(o,s.z),n=m*.5+u*.5;return c.z=d*n,c.multiply(a),c}storeRendererState(e){const t=new f.Vector2;e.getSize(t);const i=new f.Vector4;e.getViewport(i);const s=new f.Vector4;e.getScissor(s);const a=e.getClearColor(new f.Color),o=e.getClearAlpha();return{size:t,pixelRatio:e.getPixelRatio(),viewport:i,scissor:s,scissorTest:e.getScissorTest(),autoClear:e.autoClear,target:e.getRenderTarget(),clearColor:a,clearAlpha:o}}applyRendererState(e,t,i,s){if(e.setPixelRatio(1),e.setSize(t,i,!1),e.setViewport(0,0,t,i),e.setScissor(0,0,t,i),e.setScissorTest(!1),e.autoClear=!0,s!==void 0)if(s===null){const a=e.getClearColor(new f.Color);e.setClearColor(a,0)}else s instanceof f.Color?e.setClearColor(s,1):e.setClearColor(new f.Color(s),1);else{const a=e.getClearColor(new f.Color);e.setClearColor(a,0)}}restoreRendererState(e,t){e.setPixelRatio(t.pixelRatio),e.setSize(t.size.x,t.size.y,!1),e.setViewport(t.viewport.x,t.viewport.y,t.viewport.z,t.viewport.w),e.setScissor(t.scissor.x,t.scissor.y,t.scissor.z,t.scissor.w),e.setScissorTest(t.scissorTest),e.autoClear=t.autoClear,e.setRenderTarget(t.target),e.setClearColor(t.clearColor,t.clearAlpha)}readPixels(e,t,i,s){const a=i*s*4;(!this.pixelBuffer||this.pixelBuffer.length!==a)&&(this.pixelBuffer=new Uint8Array(a)),e.readRenderTargetPixels(t,0,0,i,s,this.pixelBuffer);const o=this.ensureCanvas(i,s),c=o.getContext("2d");if(!c)throw new Error("TriViewCapture: failed to get 2D context.");const u=c.createImageData(i,s),m=u.data,d=this.pixelBuffer;for(let n=0;n<s;n+=1){const h=(s-n-1)*i*4,g=n*i*4;m.set(d.subarray(h,h+i*4),g)}return c.putImageData(u,0,0),o.toDataURL("image/png")}ensureCanvas(e,t){if(typeof document>"u")throw new Error("TriViewCapture: document is not available in this environment.");return this.canvas||(this.canvas=document.createElement("canvas")),(this.canvas.width!==e||this.canvas.height!==t)&&(this.canvas.width=e,this.canvas.height=t),this.canvas}}const gu="shop-components",vu="0.2.8",_u="Shop components",yu="dist/shop-components.umd.js",xu="dist/shop-components.mjs",wu="dist/main.d.ts",bu={dts:"tsc --emitDeclarationOnly & tsc & storybook build -o dist",test:'echo "Error: no test specified" && exit 1',dev:"vite dev --open",storybook:"storybook dev -p 6006",build:"storybook build -o dist",vite:"vite build",version:"auto-changelog -p && git add CHANGELOG.md"},Au=["dist","package.json"],Tu=[],Su="machengda<machengda@seer-group.com>",Mu="ISC",Cu={"@needle-tools/gltf-progressive":"^3.3.5","auto-changelog":"^2.4.0",vite:"5.1.6","vite-plugin-dts":"^3.7.3"},Pu={"string-width":"4.2.3"},Ru={"@nodetoy/three-nodetoy":"^0.1.36","@tweakpane/core":"^2.0.3","@tweenjs/tween.js":"^23.1.2","@types/bezier-js":"^4.1.1","@types/howler":"^2.2.11","@types/three":"0.180.0","bezier-js":"^6.1.4",eventemitter3:"^5.0.1",howler:"^2.2.4","stats-fps.js":"0.0.6",stylus:"^0.63.0",terser:"^5.44.0",three:"0.180.0","three-gpu-pathtracer":"0.0.23","three-mesh-bvh":"^0.7.5","troika-three-text":"^0.49.1",tweakpane:"^4.0.3"},Iu={name:gu,version:vu,description:_u,main:yu,module:xu,types:wu,scripts:bu,files:Au,keywords:Tu,author:Su,license:Mu,devDependencies:Cu,resolutions:Pu,dependencies:Ru};function Lr(){const r="Nebular Engin",e=Iu.version,t=`%c ${r} %c v${e} `;console.log(t,"background:#111827;color:#ffffff;padding:4px 10px;border-radius:4px 0 0 4px;font-weight:700;","background:#10B981;color:#ffffff;padding:4px 10px;border-radius:0 4px 4px 0;font-weight:700;")}const Fr="__SHOP_COMPONENTS_BANNER_PRINTED__";try{const r=globalThis;r[Fr]||(r[Fr]=!0,Lr())}catch{Lr()}exports.Amr=ln;exports.Line=ql;exports.Logo=as;exports.SGLBLoader=vi;exports.SLOT_EVENTS=$;exports.Scene3D=mu;exports.Skin=vs;exports.Slot=os;exports.SlotState=gn;exports.TriViewCapture=vn;exports.arrayBufferToUrl=rs;exports.calculateArrayAverage=Jr;exports.calculateFocalLength=fl;exports.createSGLBFile=bl;exports.downloadBlob=hl;exports.dracoExporter=wl;exports.font=fu;exports.gltfExporter=sn;exports.gltfLoader=gt;exports.imageBitmapToUrl=ns;exports.isAppleDevice=en;exports.textureLoader=Is;
|