@liveroom-tech/react-immersive 5.0.2 → 5.2.0
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/README.md +1030 -59
- package/dist/binding-builder.css +1 -1
- package/dist/binding-builder.js +17 -12
- package/dist/binding-builder.mjs +1 -1
- package/dist/chunk-4NLJSD3S.mjs +1 -0
- package/dist/chunk-B7REIGDG.mjs +1 -0
- package/dist/chunk-HYFJ5DYJ.mjs +1 -0
- package/dist/chunk-QC3NT76G.mjs +3 -0
- package/dist/chunk-T3M3BQ7H.mjs +32 -0
- package/dist/chunk-ZPK67UG7.mjs +1 -0
- package/dist/hosted.css +1 -1
- package/dist/hosted.d.mts +4 -3
- package/dist/hosted.d.ts +4 -3
- package/dist/hosted.js +16 -11
- package/dist/hosted.mjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.mts +85 -10
- package/dist/index.d.ts +85 -10
- package/dist/index.js +15 -10
- package/dist/index.mjs +1 -1
- package/dist/materialVariants-DnZe9eMC.d.mts +309 -0
- package/dist/materialVariants-DnZe9eMC.d.ts +309 -0
- package/dist/modelInfo-BYebMPdZ.d.mts +43 -0
- package/dist/modelInfo-XfUQO7C_.d.ts +43 -0
- package/dist/{ModelViewer-CbbJT85n.d.mts → modelViewerProps-CIZ2R_Fv.d.ts} +164 -43
- package/dist/{ModelViewer-DOexHkJC.d.ts → modelViewerProps-DoRiTZMn.d.mts} +164 -43
- package/dist/{objectCatalog-5W8n5xNQ.d.ts → rendererBackend-QwMzISTn.d.mts} +304 -5
- package/dist/{objectCatalog-5W8n5xNQ.d.mts → rendererBackend-QwMzISTn.d.ts} +304 -5
- package/dist/simple-model-viewer.css +1 -1
- package/dist/simple-model-viewer.d.mts +32 -4
- package/dist/simple-model-viewer.d.ts +32 -4
- package/dist/simple-model-viewer.js +3 -3
- package/dist/simple-model-viewer.mjs +1 -1
- package/dist/utils.d.mts +5 -4
- package/dist/utils.d.ts +5 -4
- package/dist/utils.js +1 -1
- package/dist/utils.mjs +1 -1
- package/package.json +2 -1
- package/dist/chunk-3GX7DOGS.mjs +0 -3
- package/dist/chunk-AH5NAZWX.mjs +0 -27
- package/dist/chunk-BGYK4Y2Y.mjs +0 -1
- package/dist/chunk-WFEYRUZC.mjs +0 -1
- package/dist/chunk-XTLSAYAQ.mjs +0 -1
- package/dist/modelInfo-CEmmvVCH.d.mts +0 -17
- package/dist/modelInfo-CEmmvVCH.d.ts +0 -17
package/dist/binding-builder.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";"use client";var yy=Object.create;var hs=Object.defineProperty;var wy=Object.getOwnPropertyDescriptor;var _y=Object.getOwnPropertyNames;var Sy=Object.getPrototypeOf,My=Object.prototype.hasOwnProperty;var Cy=(e,t,n)=>t in e?hs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Ty=(e,t)=>()=>(e&&(t=e(e=0)),t);var _m=(e,t)=>{for(var n in t)hs(e,n,{get:t[n],enumerable:!0})},Sm=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of _y(t))!My.call(e,r)&&r!==n&&hs(e,r,{get:()=>t[r],enumerable:!(i=wy(t,r))||i.enumerable});return e};var Mm=(e,t,n)=>(n=e!=null?yy(Sy(e)):{},Sm(t||!e||!e.__esModule?hs(n,"default",{value:e,enumerable:!0}):n,e)),Py=e=>Sm(hs({},"__esModule",{value:!0}),e);var xu=(e,t,n)=>Cy(e,typeof t!="symbol"?t+"":t,n);var Cm={};_m(Cm,{bvhWorkerCode:()=>Ay});var Ay,Tm=Ty(()=>{"use strict";Ay=`(()=>{var Ls=1;var Ds=3,wn=0,Ui=1,Fi=2;var di=0,pi=1,mi=2,gi=3,_i=4,xi=5,yi=6,vi=7,Ns=0,Us=1,Fs=2;var Bi=1,Oi=2,zi=3,Vi=4,ki=5,Gi=6,Hi=7;var Wi=300,Bs=301,Xi=302;var Os=306,Mi=1e3,Ie=1001,Si=1002;var zs=1006;var Vs=1008;var ks=1009;var Gs=1015;var Hs=1023;var De=2300,ln=2301,an=2302,bi=2303,Ti=2400,Ai=2401,Ei=2402;var qi="",_t="srgb",wi="srgb-linear",Ci="linear",cn="srgb";var Ri=35044;var Le=2e3,Pi=2001;function Fr(c){for(let t=c.length-1;t>=0;--t)if(c[t]>=65535)return!0;return!1}function Br(c){return ArrayBuffer.isView(c)&&!(c instanceof DataView)}function Ii(c){return document.createElementNS("http://www.w3.org/1999/xhtml",c)}var xs={},un=null;function Ws(c){let t=c[0];if(typeof t=="string"&&t.startsWith("TSL:")){let e=c[1];e&&e.isStackTrace?c[0]+=" "+e.getLocation():c[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return c}function Q(...c){c=Ws(c);let t="THREE."+c.shift();if(un)un("warn",t,...c);else{let e=c[0];e&&e.isStackTrace?console.warn(e.getError(t)):console.warn(t,...c)}}function G(...c){c=Ws(c);let t="THREE."+c.shift();if(un)un("error",t,...c);else{let e=c[0];e&&e.isStackTrace?console.error(e.getError(t)):console.error(t,...c)}}function Li(...c){let t=c.join(" ");t in xs||(xs[t]=!0,Q(...c))}var Or={[di]:pi,[mi]:yi,[_i]:vi,[gi]:xi,[pi]:di,[yi]:mi,[vi]:_i,[xi]:gi},Yt=class{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[t]===void 0&&(n[t]=[]),n[t].indexOf(e)===-1&&n[t].push(e)}hasEventListener(t,e){let n=this._listeners;return n===void 0?!1:n[t]!==void 0&&n[t].indexOf(e)!==-1}removeEventListener(t,e){let n=this._listeners;if(n===void 0)return;let i=n[t];if(i!==void 0){let s=i.indexOf(e);s!==-1&&i.splice(s,1)}}dispatchEvent(t){let e=this._listeners;if(e===void 0)return;let n=e[t.type];if(n!==void 0){t.target=this;let i=n.slice(0);for(let s=0,r=i.length;s<r;s++)i[s].call(this,t);t.target=null}}},st=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];var yl=Math.PI/180,zr=180/Math.PI;function Cn(){let c=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,n=Math.random()*4294967295|0;return(st[c&255]+st[c>>8&255]+st[c>>16&255]+st[c>>24&255]+"-"+st[t&255]+st[t>>8&255]+"-"+st[t>>16&15|64]+st[t>>24&255]+"-"+st[e&63|128]+st[e>>8&255]+"-"+st[e>>16&255]+st[e>>24&255]+st[n&255]+st[n>>8&255]+st[n>>16&255]+st[n>>24&255]).toLowerCase()}function U(c,t,e){return Math.max(t,Math.min(e,c))}function Vr(c,t){return(c%t+t)%t}function Zn(c,t,e){return(1-e)*c+e*t}function Ee(c,t){switch(t.constructor){case Float32Array:return c;case Uint32Array:return c/4294967295;case Uint16Array:return c/65535;case Uint8Array:return c/255;case Int32Array:return Math.max(c/2147483647,-1);case Int16Array:return Math.max(c/32767,-1);case Int8Array:return Math.max(c/127,-1);default:throw new Error("Invalid component type.")}}function ut(c,t){switch(t.constructor){case Float32Array:return c;case Uint32Array:return Math.round(c*4294967295);case Uint16Array:return Math.round(c*65535);case Uint8Array:return Math.round(c*255);case Int32Array:return Math.round(c*2147483647);case Int16Array:return Math.round(c*32767);case Int8Array:return Math.round(c*127);default:throw new Error("Invalid component type.")}}var H=class c{static{c.prototype.isVector2=!0}constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){let e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=U(this.x,t.x,e.x),this.y=U(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=U(this.x,t,e),this.y=U(this.y,t,e),this}clampLength(t,e){let n=this.length();return this.divideScalar(n||1).multiplyScalar(U(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){let e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;let n=this.dot(t)/e;return Math.acos(U(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){let e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){let n=Math.cos(e),i=Math.sin(e),s=this.x-t.x,r=this.y-t.y;return this.x=s*n-r*i+t.x,this.y=s*i+r*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},Lt=class{constructor(t=0,e=0,n=0,i=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=n,this._w=i}static slerpFlat(t,e,n,i,s,r,o){let a=n[i+0],l=n[i+1],u=n[i+2],f=n[i+3],h=s[r+0],d=s[r+1],p=s[r+2],m=s[r+3];if(f!==m||a!==h||l!==d||u!==p){let _=a*h+l*d+u*p+f*m;_<0&&(h=-h,d=-d,p=-p,m=-m,_=-_);let g=1-o;if(_<.9995){let x=Math.acos(_),y=Math.sin(x);g=Math.sin(g*x)/y,o=Math.sin(o*x)/y,a=a*g+h*o,l=l*g+d*o,u=u*g+p*o,f=f*g+m*o}else{a=a*g+h*o,l=l*g+d*o,u=u*g+p*o,f=f*g+m*o;let x=1/Math.sqrt(a*a+l*l+u*u+f*f);a*=x,l*=x,u*=x,f*=x}}t[e]=a,t[e+1]=l,t[e+2]=u,t[e+3]=f}static multiplyQuaternionsFlat(t,e,n,i,s,r){let o=n[i],a=n[i+1],l=n[i+2],u=n[i+3],f=s[r],h=s[r+1],d=s[r+2],p=s[r+3];return t[e]=o*p+u*f+a*d-l*h,t[e+1]=a*p+u*h+l*f-o*d,t[e+2]=l*p+u*d+o*h-a*f,t[e+3]=u*p-o*f-a*h-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){let n=t._x,i=t._y,s=t._z,r=t._order,o=Math.cos,a=Math.sin,l=o(n/2),u=o(i/2),f=o(s/2),h=a(n/2),d=a(i/2),p=a(s/2);switch(r){case"XYZ":this._x=h*u*f+l*d*p,this._y=l*d*f-h*u*p,this._z=l*u*p+h*d*f,this._w=l*u*f-h*d*p;break;case"YXZ":this._x=h*u*f+l*d*p,this._y=l*d*f-h*u*p,this._z=l*u*p-h*d*f,this._w=l*u*f+h*d*p;break;case"ZXY":this._x=h*u*f-l*d*p,this._y=l*d*f+h*u*p,this._z=l*u*p+h*d*f,this._w=l*u*f-h*d*p;break;case"ZYX":this._x=h*u*f-l*d*p,this._y=l*d*f+h*u*p,this._z=l*u*p-h*d*f,this._w=l*u*f+h*d*p;break;case"YZX":this._x=h*u*f+l*d*p,this._y=l*d*f+h*u*p,this._z=l*u*p-h*d*f,this._w=l*u*f-h*d*p;break;case"XZY":this._x=h*u*f-l*d*p,this._y=l*d*f-h*u*p,this._z=l*u*p+h*d*f,this._w=l*u*f+h*d*p;break;default:Q("Quaternion: .setFromEuler() encountered an unknown order: "+r)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){let n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){let e=t.elements,n=e[0],i=e[4],s=e[8],r=e[1],o=e[5],a=e[9],l=e[2],u=e[6],f=e[10],h=n+o+f;if(h>0){let d=.5/Math.sqrt(h+1);this._w=.25/d,this._x=(u-a)*d,this._y=(s-l)*d,this._z=(r-i)*d}else if(n>o&&n>f){let d=2*Math.sqrt(1+n-o-f);this._w=(u-a)/d,this._x=.25*d,this._y=(i+r)/d,this._z=(s+l)/d}else if(o>f){let d=2*Math.sqrt(1+o-n-f);this._w=(s-l)/d,this._x=(i+r)/d,this._y=.25*d,this._z=(a+u)/d}else{let d=2*Math.sqrt(1+f-n-o);this._w=(r-i)/d,this._x=(s+l)/d,this._y=(a+u)/d,this._z=.25*d}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<1e-8?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(U(this.dot(t),-1,1)))}rotateTowards(t,e){let n=this.angleTo(t);if(n===0)return this;let i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){let n=t._x,i=t._y,s=t._z,r=t._w,o=e._x,a=e._y,l=e._z,u=e._w;return this._x=n*u+r*o+i*l-s*a,this._y=i*u+r*a+s*o-n*l,this._z=s*u+r*l+n*a-i*o,this._w=r*u-n*o-i*a-s*l,this._onChangeCallback(),this}slerp(t,e){let n=t._x,i=t._y,s=t._z,r=t._w,o=this.dot(t);o<0&&(n=-n,i=-i,s=-s,r=-r,o=-o);let a=1-e;if(o<.9995){let l=Math.acos(o),u=Math.sin(l);a=Math.sin(a*l)/u,e=Math.sin(e*l)/u,this._x=this._x*a+n*e,this._y=this._y*a+i*e,this._z=this._z*a+s*e,this._w=this._w*a+r*e,this._onChangeCallback()}else this._x=this._x*a+n*e,this._y=this._y*a+i*e,this._z=this._z*a+s*e,this._w=this._w*a+r*e,this.normalize();return this}slerpQuaternions(t,e,n){return this.copy(t).slerp(e,n)}random(){let t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),n=Math.random(),i=Math.sqrt(1-n),s=Math.sqrt(n);return this.set(i*Math.sin(t),i*Math.cos(t),s*Math.sin(e),s*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},M=class c{static{c.prototype.isVector3=!0}constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return n===void 0&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(ys.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(ys.setFromAxisAngle(t,e))}applyMatrix3(t){let e=this.x,n=this.y,i=this.z,s=t.elements;return this.x=s[0]*e+s[3]*n+s[6]*i,this.y=s[1]*e+s[4]*n+s[7]*i,this.z=s[2]*e+s[5]*n+s[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){let e=this.x,n=this.y,i=this.z,s=t.elements,r=1/(s[3]*e+s[7]*n+s[11]*i+s[15]);return this.x=(s[0]*e+s[4]*n+s[8]*i+s[12])*r,this.y=(s[1]*e+s[5]*n+s[9]*i+s[13])*r,this.z=(s[2]*e+s[6]*n+s[10]*i+s[14])*r,this}applyQuaternion(t){let e=this.x,n=this.y,i=this.z,s=t.x,r=t.y,o=t.z,a=t.w,l=2*(r*i-o*n),u=2*(o*e-s*i),f=2*(s*n-r*e);return this.x=e+a*l+r*f-o*u,this.y=n+a*u+o*l-s*f,this.z=i+a*f+s*u-r*l,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){let e=this.x,n=this.y,i=this.z,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i,this.y=s[1]*e+s[5]*n+s[9]*i,this.z=s[2]*e+s[6]*n+s[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=U(this.x,t.x,e.x),this.y=U(this.y,t.y,e.y),this.z=U(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=U(this.x,t,e),this.y=U(this.y,t,e),this.z=U(this.z,t,e),this}clampLength(t,e){let n=this.length();return this.divideScalar(n||1).multiplyScalar(U(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){let n=t.x,i=t.y,s=t.z,r=e.x,o=e.y,a=e.z;return this.x=i*a-s*o,this.y=s*r-n*a,this.z=n*o-i*r,this}projectOnVector(t){let e=t.lengthSq();if(e===0)return this.set(0,0,0);let n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return Jn.copy(this).projectOnVector(t),this.sub(Jn)}reflect(t){return this.sub(Jn.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){let e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;let n=this.dot(t)/e;return Math.acos(U(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){let e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){let i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){let e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){let e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let t=Math.random()*Math.PI*2,e=Math.random()*2-1,n=Math.sqrt(1-e*e);return this.x=n*Math.cos(t),this.y=e,this.z=n*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},Jn=new M,ys=new Lt,N=class c{static{c.prototype.isMatrix3=!0}constructor(t,e,n,i,s,r,o,a,l){this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,n,i,s,r,o,a,l)}set(t,e,n,i,s,r,o,a,l){let u=this.elements;return u[0]=t,u[1]=i,u[2]=o,u[3]=e,u[4]=s,u[5]=a,u[6]=n,u[7]=r,u[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){let e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){let e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){let n=t.elements,i=e.elements,s=this.elements,r=n[0],o=n[3],a=n[6],l=n[1],u=n[4],f=n[7],h=n[2],d=n[5],p=n[8],m=i[0],_=i[3],g=i[6],x=i[1],y=i[4],S=i[7],v=i[2],b=i[5],T=i[8];return s[0]=r*m+o*x+a*v,s[3]=r*_+o*y+a*b,s[6]=r*g+o*S+a*T,s[1]=l*m+u*x+f*v,s[4]=l*_+u*y+f*b,s[7]=l*g+u*S+f*T,s[2]=h*m+d*x+p*v,s[5]=h*_+d*y+p*b,s[8]=h*g+d*S+p*T,this}multiplyScalar(t){let e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){let t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],u=t[8];return e*r*u-e*o*l-n*s*u+n*o*a+i*s*l-i*r*a}invert(){let t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],u=t[8],f=u*r-o*l,h=o*a-u*s,d=l*s-r*a,p=e*f+n*h+i*d;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return t[0]=f*m,t[1]=(i*l-u*n)*m,t[2]=(o*n-i*r)*m,t[3]=h*m,t[4]=(u*e-i*a)*m,t[5]=(i*s-o*e)*m,t[6]=d*m,t[7]=(n*a-l*e)*m,t[8]=(r*e-n*s)*m,this}transpose(){let t,e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){let e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,s,r,o){let a=Math.cos(s),l=Math.sin(s);return this.set(n*a,n*l,-n*(a*r+l*o)+r+t,-i*l,i*a,-i*(-l*r+a*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply($n.makeScale(t,e)),this}rotate(t){return this.premultiply($n.makeRotation(-t)),this}translate(t,e){return this.premultiply($n.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){let e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,n,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){let e=this.elements,n=t.elements;for(let i=0;i<9;i++)if(e[i]!==n[i])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){let n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return new this.constructor().fromArray(this.elements)}},$n=new N,vs=new N().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Ms=new N().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function kr(){let c={enabled:!0,workingColorSpace:wi,spaces:{},convert:function(i,s,r){return this.enabled===!1||s===r||!s||!r||(this.spaces[s].transfer===cn&&(i.r=It(i.r),i.g=It(i.g),i.b=It(i.b)),this.spaces[s].primaries!==this.spaces[r].primaries&&(i.applyMatrix3(this.spaces[s].toXYZ),i.applyMatrix3(this.spaces[r].fromXYZ)),this.spaces[r].transfer===cn&&(i.r=he(i.r),i.g=he(i.g),i.b=he(i.b))),i},workingToColorSpace:function(i,s){return this.convert(i,this.workingColorSpace,s)},colorSpaceToWorking:function(i,s){return this.convert(i,s,this.workingColorSpace)},getPrimaries:function(i){return this.spaces[i].primaries},getTransfer:function(i){return i===qi?Ci:this.spaces[i].transfer},getToneMappingMode:function(i){return this.spaces[i].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(i,s=this.workingColorSpace){return i.fromArray(this.spaces[s].luminanceCoefficients)},define:function(i){Object.assign(this.spaces,i)},_getMatrix:function(i,s,r){return i.copy(this.spaces[s].toXYZ).multiply(this.spaces[r].fromXYZ)},_getDrawingBufferColorSpace:function(i){return this.spaces[i].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(i=this.workingColorSpace){return this.spaces[i].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(i,s){return Li("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),c.workingToColorSpace(i,s)},toWorkingColorSpace:function(i,s){return Li("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),c.colorSpaceToWorking(i,s)}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],n=[.3127,.329];return c.define({[wi]:{primaries:t,whitePoint:n,transfer:Ci,toXYZ:vs,fromXYZ:Ms,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:_t},outputColorSpaceConfig:{drawingBufferColorSpace:_t}},[_t]:{primaries:t,whitePoint:n,transfer:cn,toXYZ:vs,fromXYZ:Ms,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:_t}}}),c}var gt=kr();function It(c){return c<.04045?c*.0773993808:Math.pow(c*.9478672986+.0521327014,2.4)}function he(c){return c<.0031308?c*12.92:1.055*Math.pow(c,.41666)-.055}var jt,hn=class{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let n;if(t instanceof HTMLCanvasElement)n=t;else{jt===void 0&&(jt=Ii("canvas")),jt.width=t.width,jt.height=t.height;let i=jt.getContext("2d");t instanceof ImageData?i.putImageData(t,0,0):i.drawImage(t,0,0,t.width,t.height),n=jt}return n.toDataURL(e)}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){let e=Ii("canvas");e.width=t.width,e.height=t.height;let n=e.getContext("2d");n.drawImage(t,0,0,t.width,t.height);let i=n.getImageData(0,0,t.width,t.height),s=i.data;for(let r=0;r<s.length;r++)s[r]=It(s[r]/255)*255;return n.putImageData(i,0,0),e}else if(t.data){let e=t.data.slice(0);for(let n=0;n<e.length;n++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[n]=Math.floor(It(e[n]/255)*255):e[n]=It(e[n]);return{data:e,width:t.width,height:t.height}}else return Q("ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),t}},Gr=0,fn=class{constructor(t=null){this.isSource=!0,Object.defineProperty(this,"id",{value:Gr++}),this.uuid=Cn(),this.data=t,this.dataReady=!0,this.version=0}getSize(t){let e=this.data;return typeof HTMLVideoElement<"u"&&e instanceof HTMLVideoElement?t.set(e.videoWidth,e.videoHeight,0):typeof VideoFrame<"u"&&e instanceof VideoFrame?t.set(e.displayWidth,e.displayHeight,0):e!==null?t.set(e.width,e.height,e.depth||0):t.set(0,0,0),t}set needsUpdate(t){t===!0&&this.version++}toJSON(t){let e=t===void 0||typeof t=="string";if(!e&&t.images[this.uuid]!==void 0)return t.images[this.uuid];let n={uuid:this.uuid,url:""},i=this.data;if(i!==null){let s;if(Array.isArray(i)){s=[];for(let r=0,o=i.length;r<o;r++)i[r].isDataTexture?s.push(Kn(i[r].image)):s.push(Kn(i[r]))}else s=Kn(i);n.url=s}return e||(t.images[this.uuid]=n),n}};function Kn(c){return typeof HTMLImageElement<"u"&&c instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&c instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&c instanceof ImageBitmap?hn.getDataURL(c):c.data?{data:Array.from(c.data),width:c.width,height:c.height,type:c.data.constructor.name}:(Q("Texture: Unable to serialize Texture."),{})}var Hr=0,Qn=new M,fe=class c extends Yt{constructor(t=c.DEFAULT_IMAGE,e=c.DEFAULT_MAPPING,n=Ie,i=Ie,s=zs,r=Vs,o=Hs,a=ks,l=c.DEFAULT_ANISOTROPY,u=qi){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:Hr++}),this.uuid=Cn(),this.name="",this.source=new fn(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=n,this.wrapT=i,this.magFilter=s,this.minFilter=r,this.anisotropy=l,this.format=o,this.internalFormat=null,this.type=a,this.offset=new H(0,0),this.repeat=new H(1,1),this.center=new H(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new N,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=u,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(Qn).x}get height(){return this.source.getSize(Qn).y}get depth(){return this.source.getSize(Qn).z}get image(){return this.source.data}set image(t){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.normalized=t.normalized,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(let e in t){let n=t[e];if(n===void 0){Q(\`Texture.setValues(): parameter '\${e}' has value of undefined.\`);continue}let i=this[e];if(i===void 0){Q(\`Texture.setValues(): property '\${e}' does not exist.\`);continue}i&&n&&i.isVector2&&n.isVector2||i&&n&&i.isVector3&&n.isVector3||i&&n&&i.isMatrix3&&n.isMatrix3?i.copy(n):this[e]=n}}toJSON(t){let e=t===void 0||typeof t=="string";if(!e&&t.textures[this.uuid]!==void 0)return t.textures[this.uuid];let n={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==Wi)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case Mi:t.x=t.x-Math.floor(t.x);break;case Ie:t.x=t.x<0?0:1;break;case Si:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case Mi:t.y=t.y-Math.floor(t.y);break;case Ie:t.y=t.y<0?0:1;break;case Si:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}};fe.DEFAULT_IMAGE=null;fe.DEFAULT_MAPPING=Wi;fe.DEFAULT_ANISOTROPY=1;var de=class c{static{c.prototype.isVector4=!0}constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){let e=this.x,n=this.y,i=this.z,s=this.w,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i+r[12]*s,this.y=r[1]*e+r[5]*n+r[9]*i+r[13]*s,this.z=r[2]*e+r[6]*n+r[10]*i+r[14]*s,this.w=r[3]*e+r[7]*n+r[11]*i+r[15]*s,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);let e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,s,a=t.elements,l=a[0],u=a[4],f=a[8],h=a[1],d=a[5],p=a[9],m=a[2],_=a[6],g=a[10];if(Math.abs(u-h)<.01&&Math.abs(f-m)<.01&&Math.abs(p-_)<.01){if(Math.abs(u+h)<.1&&Math.abs(f+m)<.1&&Math.abs(p+_)<.1&&Math.abs(l+d+g-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;let y=(l+1)/2,S=(d+1)/2,v=(g+1)/2,b=(u+h)/4,T=(f+m)/4,A=(p+_)/4;return y>S&&y>v?y<.01?(n=0,i=.707106781,s=.707106781):(n=Math.sqrt(y),i=b/n,s=T/n):S>v?S<.01?(n=.707106781,i=0,s=.707106781):(i=Math.sqrt(S),n=b/i,s=A/i):v<.01?(n=.707106781,i=.707106781,s=0):(s=Math.sqrt(v),n=T/s,i=A/s),this.set(n,i,s,e),this}let x=Math.sqrt((_-p)*(_-p)+(f-m)*(f-m)+(h-u)*(h-u));return Math.abs(x)<.001&&(x=1),this.x=(_-p)/x,this.y=(f-m)/x,this.z=(h-u)/x,this.w=Math.acos((l+d+g-1)/2),this}setFromMatrixPosition(t){let e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=U(this.x,t.x,e.x),this.y=U(this.y,t.y,e.y),this.z=U(this.z,t.z,e.z),this.w=U(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=U(this.x,t,e),this.y=U(this.y,t,e),this.z=U(this.z,t,e),this.w=U(this.w,t,e),this}clampLength(t,e){let n=this.length();return this.divideScalar(n||1).multiplyScalar(U(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}};var W=class c{static{c.prototype.isMatrix4=!0}constructor(t,e,n,i,s,r,o,a,l,u,f,h,d,p,m,_){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,n,i,s,r,o,a,l,u,f,h,d,p,m,_)}set(t,e,n,i,s,r,o,a,l,u,f,h,d,p,m,_){let g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=s,g[5]=r,g[9]=o,g[13]=a,g[2]=l,g[6]=u,g[10]=f,g[14]=h,g[3]=d,g[7]=p,g[11]=m,g[15]=_,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new c().fromArray(this.elements)}copy(t){let e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){let e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){let e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return this.determinant()===0?(t.set(1,0,0),e.set(0,1,0),n.set(0,0,1),this):(t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this)}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){if(t.determinant()===0)return this.identity();let e=this.elements,n=t.elements,i=1/te.setFromMatrixColumn(t,0).length(),s=1/te.setFromMatrixColumn(t,1).length(),r=1/te.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*s,e[5]=n[5]*s,e[6]=n[6]*s,e[7]=0,e[8]=n[8]*r,e[9]=n[9]*r,e[10]=n[10]*r,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){let e=this.elements,n=t.x,i=t.y,s=t.z,r=Math.cos(n),o=Math.sin(n),a=Math.cos(i),l=Math.sin(i),u=Math.cos(s),f=Math.sin(s);if(t.order==="XYZ"){let h=r*u,d=r*f,p=o*u,m=o*f;e[0]=a*u,e[4]=-a*f,e[8]=l,e[1]=d+p*l,e[5]=h-m*l,e[9]=-o*a,e[2]=m-h*l,e[6]=p+d*l,e[10]=r*a}else if(t.order==="YXZ"){let h=a*u,d=a*f,p=l*u,m=l*f;e[0]=h+m*o,e[4]=p*o-d,e[8]=r*l,e[1]=r*f,e[5]=r*u,e[9]=-o,e[2]=d*o-p,e[6]=m+h*o,e[10]=r*a}else if(t.order==="ZXY"){let h=a*u,d=a*f,p=l*u,m=l*f;e[0]=h-m*o,e[4]=-r*f,e[8]=p+d*o,e[1]=d+p*o,e[5]=r*u,e[9]=m-h*o,e[2]=-r*l,e[6]=o,e[10]=r*a}else if(t.order==="ZYX"){let h=r*u,d=r*f,p=o*u,m=o*f;e[0]=a*u,e[4]=p*l-d,e[8]=h*l+m,e[1]=a*f,e[5]=m*l+h,e[9]=d*l-p,e[2]=-l,e[6]=o*a,e[10]=r*a}else if(t.order==="YZX"){let h=r*a,d=r*l,p=o*a,m=o*l;e[0]=a*u,e[4]=m-h*f,e[8]=p*f+d,e[1]=f,e[5]=r*u,e[9]=-o*u,e[2]=-l*u,e[6]=d*f+p,e[10]=h-m*f}else if(t.order==="XZY"){let h=r*a,d=r*l,p=o*a,m=o*l;e[0]=a*u,e[4]=-f,e[8]=l*u,e[1]=h*f+m,e[5]=r*u,e[9]=d*f-p,e[2]=p*f-d,e[6]=o*u,e[10]=m*f+h}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Wr,t,Xr)}lookAt(t,e,n){let i=this.elements;return ft.subVectors(t,e),ft.lengthSq()===0&&(ft.z=1),ft.normalize(),Nt.crossVectors(n,ft),Nt.lengthSq()===0&&(Math.abs(n.z)===1?ft.x+=1e-4:ft.z+=1e-4,ft.normalize(),Nt.crossVectors(n,ft)),Nt.normalize(),Ke.crossVectors(ft,Nt),i[0]=Nt.x,i[4]=Ke.x,i[8]=ft.x,i[1]=Nt.y,i[5]=Ke.y,i[9]=ft.y,i[2]=Nt.z,i[6]=Ke.z,i[10]=ft.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){let n=t.elements,i=e.elements,s=this.elements,r=n[0],o=n[4],a=n[8],l=n[12],u=n[1],f=n[5],h=n[9],d=n[13],p=n[2],m=n[6],_=n[10],g=n[14],x=n[3],y=n[7],S=n[11],v=n[15],b=i[0],T=i[4],A=i[8],E=i[12],C=i[1],R=i[5],w=i[9],P=i[13],L=i[2],D=i[6],O=i[10],it=i[14],Tt=i[3],At=i[7],Je=i[11],$e=i[15];return s[0]=r*b+o*C+a*L+l*Tt,s[4]=r*T+o*R+a*D+l*At,s[8]=r*A+o*w+a*O+l*Je,s[12]=r*E+o*P+a*it+l*$e,s[1]=u*b+f*C+h*L+d*Tt,s[5]=u*T+f*R+h*D+d*At,s[9]=u*A+f*w+h*O+d*Je,s[13]=u*E+f*P+h*it+d*$e,s[2]=p*b+m*C+_*L+g*Tt,s[6]=p*T+m*R+_*D+g*At,s[10]=p*A+m*w+_*O+g*Je,s[14]=p*E+m*P+_*it+g*$e,s[3]=x*b+y*C+S*L+v*Tt,s[7]=x*T+y*R+S*D+v*At,s[11]=x*A+y*w+S*O+v*Je,s[15]=x*E+y*P+S*it+v*$e,this}multiplyScalar(t){let e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){let t=this.elements,e=t[0],n=t[4],i=t[8],s=t[12],r=t[1],o=t[5],a=t[9],l=t[13],u=t[2],f=t[6],h=t[10],d=t[14],p=t[3],m=t[7],_=t[11],g=t[15],x=a*d-l*h,y=o*d-l*f,S=o*h-a*f,v=r*d-l*u,b=r*h-a*u,T=r*f-o*u;return e*(m*x-_*y+g*S)-n*(p*x-_*v+g*b)+i*(p*y-m*v+g*T)-s*(p*S-m*b+_*T)}transpose(){let t=this.elements,e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){let i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){let t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],u=t[8],f=t[9],h=t[10],d=t[11],p=t[12],m=t[13],_=t[14],g=t[15],x=e*o-n*r,y=e*a-i*r,S=e*l-s*r,v=n*a-i*o,b=n*l-s*o,T=i*l-s*a,A=u*m-f*p,E=u*_-h*p,C=u*g-d*p,R=f*_-h*m,w=f*g-d*m,P=h*g-d*_,L=x*P-y*w+S*R+v*C-b*E+T*A;if(L===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let D=1/L;return t[0]=(o*P-a*w+l*R)*D,t[1]=(i*w-n*P-s*R)*D,t[2]=(m*T-_*b+g*v)*D,t[3]=(h*b-f*T-d*v)*D,t[4]=(a*C-r*P-l*E)*D,t[5]=(e*P-i*C+s*E)*D,t[6]=(_*S-p*T-g*y)*D,t[7]=(u*T-h*S+d*y)*D,t[8]=(r*w-o*C+l*A)*D,t[9]=(n*C-e*w-s*A)*D,t[10]=(p*b-m*S+g*x)*D,t[11]=(f*S-u*b-d*x)*D,t[12]=(o*E-r*R-a*A)*D,t[13]=(e*R-n*E+i*A)*D,t[14]=(m*y-p*v-_*x)*D,t[15]=(u*v-f*y+h*x)*D,this}scale(t){let e=this.elements,n=t.x,i=t.y,s=t.z;return e[0]*=n,e[4]*=i,e[8]*=s,e[1]*=n,e[5]*=i,e[9]*=s,e[2]*=n,e[6]*=i,e[10]*=s,e[3]*=n,e[7]*=i,e[11]*=s,this}getMaxScaleOnAxis(){let t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){let e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){let e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){let e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){let n=Math.cos(e),i=Math.sin(e),s=1-n,r=t.x,o=t.y,a=t.z,l=s*r,u=s*o;return this.set(l*r+n,l*o-i*a,l*a+i*o,0,l*o+i*a,u*o+n,u*a-i*r,0,l*a-i*o,u*a+i*r,s*a*a+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,s,r){return this.set(1,n,s,0,t,1,r,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){let i=this.elements,s=e._x,r=e._y,o=e._z,a=e._w,l=s+s,u=r+r,f=o+o,h=s*l,d=s*u,p=s*f,m=r*u,_=r*f,g=o*f,x=a*l,y=a*u,S=a*f,v=n.x,b=n.y,T=n.z;return i[0]=(1-(m+g))*v,i[1]=(d+S)*v,i[2]=(p-y)*v,i[3]=0,i[4]=(d-S)*b,i[5]=(1-(h+g))*b,i[6]=(_+x)*b,i[7]=0,i[8]=(p+y)*T,i[9]=(_-x)*T,i[10]=(1-(h+m))*T,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){let i=this.elements;t.x=i[12],t.y=i[13],t.z=i[14];let s=this.determinant();if(s===0)return n.set(1,1,1),e.identity(),this;let r=te.set(i[0],i[1],i[2]).length(),o=te.set(i[4],i[5],i[6]).length(),a=te.set(i[8],i[9],i[10]).length();s<0&&(r=-r),yt.copy(this);let l=1/r,u=1/o,f=1/a;return yt.elements[0]*=l,yt.elements[1]*=l,yt.elements[2]*=l,yt.elements[4]*=u,yt.elements[5]*=u,yt.elements[6]*=u,yt.elements[8]*=f,yt.elements[9]*=f,yt.elements[10]*=f,e.setFromRotationMatrix(yt),n.x=r,n.y=o,n.z=a,this}makePerspective(t,e,n,i,s,r,o=Le,a=!1){let l=this.elements,u=2*s/(e-t),f=2*s/(n-i),h=(e+t)/(e-t),d=(n+i)/(n-i),p,m;if(a)p=s/(r-s),m=r*s/(r-s);else if(o===Le)p=-(r+s)/(r-s),m=-2*r*s/(r-s);else if(o===Pi)p=-r/(r-s),m=-r*s/(r-s);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return l[0]=u,l[4]=0,l[8]=h,l[12]=0,l[1]=0,l[5]=f,l[9]=d,l[13]=0,l[2]=0,l[6]=0,l[10]=p,l[14]=m,l[3]=0,l[7]=0,l[11]=-1,l[15]=0,this}makeOrthographic(t,e,n,i,s,r,o=Le,a=!1){let l=this.elements,u=2/(e-t),f=2/(n-i),h=-(e+t)/(e-t),d=-(n+i)/(n-i),p,m;if(a)p=1/(r-s),m=r/(r-s);else if(o===Le)p=-2/(r-s),m=-(r+s)/(r-s);else if(o===Pi)p=-1/(r-s),m=-s/(r-s);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return l[0]=u,l[4]=0,l[8]=0,l[12]=h,l[1]=0,l[5]=f,l[9]=0,l[13]=d,l[2]=0,l[6]=0,l[10]=p,l[14]=m,l[3]=0,l[7]=0,l[11]=0,l[15]=1,this}equals(t){let e=this.elements,n=t.elements;for(let i=0;i<16;i++)if(e[i]!==n[i])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){let n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}},te=new M,yt=new W,Wr=new M(0,0,0),Xr=new M(1,1,1),Nt=new M,Ke=new M,ft=new M,Ss=new W,bs=new Lt,Ne=class c{constructor(t=0,e=0,n=0,i=c.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){let i=t.elements,s=i[0],r=i[4],o=i[8],a=i[1],l=i[5],u=i[9],f=i[2],h=i[6],d=i[10];switch(e){case"XYZ":this._y=Math.asin(U(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-u,d),this._z=Math.atan2(-r,s)):(this._x=Math.atan2(h,l),this._z=0);break;case"YXZ":this._x=Math.asin(-U(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(o,d),this._z=Math.atan2(a,l)):(this._y=Math.atan2(-f,s),this._z=0);break;case"ZXY":this._x=Math.asin(U(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(-f,d),this._z=Math.atan2(-r,l)):(this._y=0,this._z=Math.atan2(a,s));break;case"ZYX":this._y=Math.asin(-U(f,-1,1)),Math.abs(f)<.9999999?(this._x=Math.atan2(h,d),this._z=Math.atan2(a,s)):(this._x=0,this._z=Math.atan2(-r,l));break;case"YZX":this._z=Math.asin(U(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-u,l),this._y=Math.atan2(-f,s)):(this._x=0,this._y=Math.atan2(o,d));break;case"XZY":this._z=Math.asin(-U(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(h,l),this._y=Math.atan2(o,s)):(this._x=Math.atan2(-u,d),this._y=0);break;default:Q("Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,n===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return Ss.makeRotationFromQuaternion(t),this.setFromRotationMatrix(Ss,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return bs.setFromEuler(this),this.setFromQuaternion(bs,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};Ne.DEFAULT_ORDER="XYZ";var dn=class{constructor(){this.mask=1}set(t){this.mask=(1<<t|0)>>>0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return(this.mask&t.mask)!==0}isEnabled(t){return(this.mask&(1<<t|0))!==0}},qr=0,Ts=new M,ee=new Lt,wt=new W,Qe=new M,we=new M,Yr=new M,Zr=new Lt,As=new M(1,0,0),Es=new M(0,1,0),ws=new M(0,0,1),Cs={type:"added"},Jr={type:"removed"},ne={type:"childadded",child:null},jn={type:"childremoved",child:null},Zt=class c extends Yt{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:qr++}),this.uuid=Cn(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=c.DEFAULT_UP.clone();let t=new M,e=new Ne,n=new Lt,i=new M(1,1,1);function s(){n.setFromEuler(e,!1)}function r(){e.setFromQuaternion(n,void 0,!1)}e._onChange(s),n._onChange(r),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new W},normalMatrix:{value:new N}}),this.matrix=new W,this.matrixWorld=new W,this.matrixAutoUpdate=c.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=c.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new dn,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return ee.setFromAxisAngle(t,e),this.quaternion.multiply(ee),this}rotateOnWorldAxis(t,e){return ee.setFromAxisAngle(t,e),this.quaternion.premultiply(ee),this}rotateX(t){return this.rotateOnAxis(As,t)}rotateY(t){return this.rotateOnAxis(Es,t)}rotateZ(t){return this.rotateOnAxis(ws,t)}translateOnAxis(t,e){return Ts.copy(t).applyQuaternion(this.quaternion),this.position.add(Ts.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(As,t)}translateY(t){return this.translateOnAxis(Es,t)}translateZ(t){return this.translateOnAxis(ws,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(wt.copy(this.matrixWorld).invert())}lookAt(t,e,n){t.isVector3?Qe.copy(t):Qe.set(t,e,n);let i=this.parent;this.updateWorldMatrix(!0,!1),we.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?wt.lookAt(we,Qe,this.up):wt.lookAt(Qe,we,this.up),this.quaternion.setFromRotationMatrix(wt),i&&(wt.extractRotation(i.matrixWorld),ee.setFromRotationMatrix(wt),this.quaternion.premultiply(ee.invert()))}add(t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(G("Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(t.removeFromParent(),t.parent=this,this.children.push(t),t.dispatchEvent(Cs),ne.child=t,this.dispatchEvent(ne),ne.child=null):G("Object3D.add: object not an instance of THREE.Object3D.",t),this)}remove(t){if(arguments.length>1){for(let n=0;n<arguments.length;n++)this.remove(arguments[n]);return this}let e=this.children.indexOf(t);return e!==-1&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(Jr),jn.child=t,this.dispatchEvent(jn),jn.child=null),this}removeFromParent(){let t=this.parent;return t!==null&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),wt.copy(this.matrixWorld).invert(),t.parent!==null&&(t.parent.updateWorldMatrix(!0,!1),wt.multiply(t.parent.matrixWorld)),t.applyMatrix4(wt),t.removeFromParent(),t.parent=this,this.children.push(t),t.updateWorldMatrix(!1,!0),t.dispatchEvent(Cs),ne.child=t,this.dispatchEvent(ne),ne.child=null,this}getObjectById(t){return this.getObjectByProperty("id",t)}getObjectByName(t){return this.getObjectByProperty("name",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let n=0,i=this.children.length;n<i;n++){let r=this.children[n].getObjectByProperty(t,e);if(r!==void 0)return r}}getObjectsByProperty(t,e,n=[]){this[t]===e&&n.push(this);let i=this.children;for(let s=0,r=i.length;s<r;s++)i[s].getObjectsByProperty(t,e,n);return n}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(we,t,Yr),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(we,Zr,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);let e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);let e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverse(t)}traverseVisible(t){if(this.visible===!1)return;t(this);let e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverseVisible(t)}traverseAncestors(t){let e=this.parent;e!==null&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);let t=this.pivot;if(t!==null){let e=t.x,n=t.y,i=t.z,s=this.matrix.elements;s[12]+=e-s[0]*e-s[4]*n-s[8]*i,s[13]+=n-s[1]*e-s[5]*n-s[9]*i,s[14]+=i-s[2]*e-s[6]*n-s[10]*i}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,t=!0);let e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].updateMatrixWorld(t)}updateWorldMatrix(t,e){let n=this.parent;if(t===!0&&n!==null&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),e===!0){let i=this.children;for(let s=0,r=i.length;s<r;s++)i[s].updateWorldMatrix(!1,!0)}}toJSON(t){let e=t===void 0||typeof t=="string",n={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.7,type:"Object",generator:"Object3D.toJSON"});let i={};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.castShadow===!0&&(i.castShadow=!0),this.receiveShadow===!0&&(i.receiveShadow=!0),this.visible===!1&&(i.visible=!1),this.frustumCulled===!1&&(i.frustumCulled=!1),this.renderOrder!==0&&(i.renderOrder=this.renderOrder),this.static!==!1&&(i.static=this.static),Object.keys(this.userData).length>0&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),i.up=this.up.toArray(),this.pivot!==null&&(i.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(i.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(i.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(i.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(i.type="InstancedMesh",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(i.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(i.type="BatchedMesh",i.perObjectFrustumCulled=this.perObjectFrustumCulled,i.sortObjects=this.sortObjects,i.drawRanges=this._drawRanges,i.reservedRanges=this._reservedRanges,i.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),i.instanceInfo=this._instanceInfo.map(o=>({...o})),i.availableInstanceIds=this._availableInstanceIds.slice(),i.availableGeometryIds=this._availableGeometryIds.slice(),i.nextIndexStart=this._nextIndexStart,i.nextVertexStart=this._nextVertexStart,i.geometryCount=this._geometryCount,i.maxInstanceCount=this._maxInstanceCount,i.maxVertexCount=this._maxVertexCount,i.maxIndexCount=this._maxIndexCount,i.geometryInitialized=this._geometryInitialized,i.matricesTexture=this._matricesTexture.toJSON(t),i.indirectTexture=this._indirectTexture.toJSON(t),this._colorsTexture!==null&&(i.colorsTexture=this._colorsTexture.toJSON(t)),this.boundingSphere!==null&&(i.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(i.boundingBox=this.boundingBox.toJSON()));function s(o,a){return o[a.uuid]===void 0&&(o[a.uuid]=a.toJSON(t)),a.uuid}if(this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(i.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=s(t.geometries,this.geometry);let o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){let a=o.shapes;if(Array.isArray(a))for(let l=0,u=a.length;l<u;l++){let f=a[l];s(t.shapes,f)}else s(t.shapes,a)}}if(this.isSkinnedMesh&&(i.bindMode=this.bindMode,i.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(s(t.skeletons,this.skeleton),i.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){let o=[];for(let a=0,l=this.material.length;a<l;a++)o.push(s(t.materials,this.material[a]));i.material=o}else i.material=s(t.materials,this.material);if(this.children.length>0){i.children=[];for(let o=0;o<this.children.length;o++)i.children.push(this.children[o].toJSON(t).object)}if(this.animations.length>0){i.animations=[];for(let o=0;o<this.animations.length;o++){let a=this.animations[o];i.animations.push(s(t.animations,a))}}if(e){let o=r(t.geometries),a=r(t.materials),l=r(t.textures),u=r(t.images),f=r(t.shapes),h=r(t.skeletons),d=r(t.animations),p=r(t.nodes);o.length>0&&(n.geometries=o),a.length>0&&(n.materials=a),l.length>0&&(n.textures=l),u.length>0&&(n.images=u),f.length>0&&(n.shapes=f),h.length>0&&(n.skeletons=h),d.length>0&&(n.animations=d),p.length>0&&(n.nodes=p)}return n.object=i,n;function r(o){let a=[];for(let l in o){let u=o[l];delete u.metadata,a.push(u)}return a}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.pivot=t.pivot!==null?t.pivot.clone():null,this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.static=t.static,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let n=0;n<t.children.length;n++){let i=t.children[n];this.add(i.clone())}return this}};Zt.DEFAULT_UP=new M(0,1,0);Zt.DEFAULT_MATRIX_AUTO_UPDATE=!0;Zt.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var Xs={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Ut={h:0,s:0,l:0},je={h:0,s:0,l:0};function ti(c,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?c+(t-c)*6*e:e<1/2?t:e<2/3?c+(t-c)*6*(2/3-e):c}var j=class{constructor(t,e,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,n)}set(t,e,n){if(e===void 0&&n===void 0){let i=t;i&&i.isColor?this.copy(i):typeof i=="number"?this.setHex(i):typeof i=="string"&&this.setStyle(i)}else this.setRGB(t,e,n);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=_t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,gt.colorSpaceToWorking(this,e),this}setRGB(t,e,n,i=gt.workingColorSpace){return this.r=t,this.g=e,this.b=n,gt.colorSpaceToWorking(this,i),this}setHSL(t,e,n,i=gt.workingColorSpace){if(t=Vr(t,1),e=U(e,0,1),n=U(n,0,1),e===0)this.r=this.g=this.b=n;else{let s=n<=.5?n*(1+e):n+e-n*e,r=2*n-s;this.r=ti(r,s,t+1/3),this.g=ti(r,s,t),this.b=ti(r,s,t-1/3)}return gt.colorSpaceToWorking(this,i),this}setStyle(t,e=_t){function n(s){s!==void 0&&parseFloat(s)<1&&Q("Color: Alpha component of "+t+" will be ignored.")}let i;if(i=/^(\\w+)\\(([^\\)]*)\\)/.exec(t)){let s,r=i[1],o=i[2];switch(r){case"rgb":case"rgba":if(s=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(s[4]),this.setRGB(Math.min(255,parseInt(s[1],10))/255,Math.min(255,parseInt(s[2],10))/255,Math.min(255,parseInt(s[3],10))/255,e);if(s=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(s[4]),this.setRGB(Math.min(100,parseInt(s[1],10))/100,Math.min(100,parseInt(s[2],10))/100,Math.min(100,parseInt(s[3],10))/100,e);break;case"hsl":case"hsla":if(s=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(s[4]),this.setHSL(parseFloat(s[1])/360,parseFloat(s[2])/100,parseFloat(s[3])/100,e);break;default:Q("Color: Unknown color model "+t)}}else if(i=/^\\#([A-Fa-f\\d]+)$/.exec(t)){let s=i[1],r=s.length;if(r===3)return this.setRGB(parseInt(s.charAt(0),16)/15,parseInt(s.charAt(1),16)/15,parseInt(s.charAt(2),16)/15,e);if(r===6)return this.setHex(parseInt(s,16),e);Q("Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=_t){let n=Xs[t.toLowerCase()];return n!==void 0?this.setHex(n,e):Q("Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=It(t.r),this.g=It(t.g),this.b=It(t.b),this}copyLinearToSRGB(t){return this.r=he(t.r),this.g=he(t.g),this.b=he(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=_t){return gt.workingToColorSpace(rt.copy(this),t),Math.round(U(rt.r*255,0,255))*65536+Math.round(U(rt.g*255,0,255))*256+Math.round(U(rt.b*255,0,255))}getHexString(t=_t){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=gt.workingColorSpace){gt.workingToColorSpace(rt.copy(this),e);let n=rt.r,i=rt.g,s=rt.b,r=Math.max(n,i,s),o=Math.min(n,i,s),a,l,u=(o+r)/2;if(o===r)a=0,l=0;else{let f=r-o;switch(l=u<=.5?f/(r+o):f/(2-r-o),r){case n:a=(i-s)/f+(i<s?6:0);break;case i:a=(s-n)/f+2;break;case s:a=(n-i)/f+4;break}a/=6}return t.h=a,t.s=l,t.l=u,t}getRGB(t,e=gt.workingColorSpace){return gt.workingToColorSpace(rt.copy(this),e),t.r=rt.r,t.g=rt.g,t.b=rt.b,t}getStyle(t=_t){gt.workingToColorSpace(rt.copy(this),t);let e=rt.r,n=rt.g,i=rt.b;return t!==_t?\`color(\${t} \${e.toFixed(3)} \${n.toFixed(3)} \${i.toFixed(3)})\`:\`rgb(\${Math.round(e*255)},\${Math.round(n*255)},\${Math.round(i*255)})\`}offsetHSL(t,e,n){return this.getHSL(Ut),this.setHSL(Ut.h+t,Ut.s+e,Ut.l+n)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,n){return this.r=t.r+(e.r-t.r)*n,this.g=t.g+(e.g-t.g)*n,this.b=t.b+(e.b-t.b)*n,this}lerpHSL(t,e){this.getHSL(Ut),t.getHSL(je);let n=Zn(Ut.h,je.h,e),i=Zn(Ut.s,je.s,e),s=Zn(Ut.l,je.l,e);return this.setHSL(n,i,s),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){let e=this.r,n=this.g,i=this.b,s=t.elements;return this.r=s[0]*e+s[3]*n+s[6]*i,this.g=s[1]*e+s[4]*n+s[7]*i,this.b=s[2]*e+s[5]*n+s[8]*i,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}},rt=new j;j.NAMES=Xs;var vt=new M,Ct=new M,ei=new M,Rt=new M,ie=new M,se=new M,Rs=new M,ni=new M,ii=new M,si=new M,ri=new de,oi=new de,ai=new de,St=class c{constructor(t=new M,e=new M,n=new M){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){i.subVectors(n,e),vt.subVectors(t,e),i.cross(vt);let s=i.lengthSq();return s>0?i.multiplyScalar(1/Math.sqrt(s)):i.set(0,0,0)}static getBarycoord(t,e,n,i,s){vt.subVectors(i,e),Ct.subVectors(n,e),ei.subVectors(t,e);let r=vt.dot(vt),o=vt.dot(Ct),a=vt.dot(ei),l=Ct.dot(Ct),u=Ct.dot(ei),f=r*l-o*o;if(f===0)return s.set(0,0,0),null;let h=1/f,d=(l*a-o*u)*h,p=(r*u-o*a)*h;return s.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,Rt)===null?!1:Rt.x>=0&&Rt.y>=0&&Rt.x+Rt.y<=1}static getInterpolation(t,e,n,i,s,r,o,a){return this.getBarycoord(t,e,n,i,Rt)===null?(a.x=0,a.y=0,"z"in a&&(a.z=0),"w"in a&&(a.w=0),null):(a.setScalar(0),a.addScaledVector(s,Rt.x),a.addScaledVector(r,Rt.y),a.addScaledVector(o,Rt.z),a)}static getInterpolatedAttribute(t,e,n,i,s,r){return ri.setScalar(0),oi.setScalar(0),ai.setScalar(0),ri.fromBufferAttribute(t,e),oi.fromBufferAttribute(t,n),ai.fromBufferAttribute(t,i),r.setScalar(0),r.addScaledVector(ri,s.x),r.addScaledVector(oi,s.y),r.addScaledVector(ai,s.z),r}static isFrontFacing(t,e,n,i){return vt.subVectors(n,e),Ct.subVectors(t,e),vt.cross(Ct).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}setFromAttributeAndIndices(t,e,n,i){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,i),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return vt.subVectors(this.c,this.b),Ct.subVectors(this.a,this.b),vt.cross(Ct).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return c.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return c.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,n,i,s){return c.getInterpolation(t,this.a,this.b,this.c,e,n,i,s)}containsPoint(t){return c.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return c.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){let n=this.a,i=this.b,s=this.c,r,o;ie.subVectors(i,n),se.subVectors(s,n),ni.subVectors(t,n);let a=ie.dot(ni),l=se.dot(ni);if(a<=0&&l<=0)return e.copy(n);ii.subVectors(t,i);let u=ie.dot(ii),f=se.dot(ii);if(u>=0&&f<=u)return e.copy(i);let h=a*f-u*l;if(h<=0&&a>=0&&u<=0)return r=a/(a-u),e.copy(n).addScaledVector(ie,r);si.subVectors(t,s);let d=ie.dot(si),p=se.dot(si);if(p>=0&&d<=p)return e.copy(s);let m=d*l-a*p;if(m<=0&&l>=0&&p<=0)return o=l/(l-p),e.copy(n).addScaledVector(se,o);let _=u*p-d*f;if(_<=0&&f-u>=0&&d-p>=0)return Rs.subVectors(s,i),o=(f-u)/(f-u+(d-p)),e.copy(i).addScaledVector(Rs,o);let g=1/(_+m+h);return r=m*g,o=h*g,e.copy(n).addScaledVector(ie,r).addScaledVector(se,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}},X=class{constructor(t=new M(1/0,1/0,1/0),e=new M(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e+=3)this.expandByPoint(Mt.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,n=t.count;e<n;e++)this.expandByPoint(Mt.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){let n=Mt.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return new this.constructor().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);let n=t.geometry;if(n!==void 0){let s=n.getAttribute("position");if(e===!0&&s!==void 0&&t.isInstancedMesh!==!0)for(let r=0,o=s.count;r<o;r++)t.isMesh===!0?t.getVertexPosition(r,Mt):Mt.fromBufferAttribute(s,r),Mt.applyMatrix4(t.matrixWorld),this.expandByPoint(Mt);else t.boundingBox!==void 0?(t.boundingBox===null&&t.computeBoundingBox(),tn.copy(t.boundingBox)):(n.boundingBox===null&&n.computeBoundingBox(),tn.copy(n.boundingBox)),tn.applyMatrix4(t.matrixWorld),this.union(tn)}let i=t.children;for(let s=0,r=i.length;s<r;s++)this.expandByObject(i[s],e);return this}containsPoint(t){return t.x>=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,Mt),Mt.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Ce),en.subVectors(this.max,Ce),re.subVectors(t.a,Ce),oe.subVectors(t.b,Ce),ae.subVectors(t.c,Ce),Ft.subVectors(oe,re),Bt.subVectors(ae,oe),Xt.subVectors(re,ae);let e=[0,-Ft.z,Ft.y,0,-Bt.z,Bt.y,0,-Xt.z,Xt.y,Ft.z,0,-Ft.x,Bt.z,0,-Bt.x,Xt.z,0,-Xt.x,-Ft.y,Ft.x,0,-Bt.y,Bt.x,0,-Xt.y,Xt.x,0];return!ci(e,re,oe,ae,en)||(e=[1,0,0,0,1,0,0,0,1],!ci(e,re,oe,ae,en))?!1:(nn.crossVectors(Ft,Bt),e=[nn.x,nn.y,nn.z],ci(e,re,oe,ae,en))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Mt).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(Mt).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(Pt[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Pt[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Pt[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Pt[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Pt[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Pt[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Pt[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Pt[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Pt),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}},Pt=[new M,new M,new M,new M,new M,new M,new M,new M],Mt=new M,tn=new X,re=new M,oe=new M,ae=new M,Ft=new M,Bt=new M,Xt=new M,Ce=new M,en=new M,nn=new M,qt=new M;function ci(c,t,e,n,i){for(let s=0,r=c.length-3;s<=r;s+=3){qt.fromArray(c,s);let o=i.x*Math.abs(qt.x)+i.y*Math.abs(qt.y)+i.z*Math.abs(qt.z),a=t.dot(qt),l=e.dot(qt),u=n.dot(qt);if(Math.max(-Math.max(a,l,u),Math.min(a,l,u))>o)return!1}return!0}var J=new M,sn=new H,$r=0,ot=class extends Yt{constructor(t,e,n=!1){if(super(),Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:$r++}),this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=n,this.usage=Ri,this.updateRanges=[],this.gpuType=Gs,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,s=this.itemSize;i<s;i++)this.array[t+i]=e.array[n+i];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(this.itemSize===2)for(let e=0,n=this.count;e<n;e++)sn.fromBufferAttribute(this,e),sn.applyMatrix3(t),this.setXY(e,sn.x,sn.y);else if(this.itemSize===3)for(let e=0,n=this.count;e<n;e++)J.fromBufferAttribute(this,e),J.applyMatrix3(t),this.setXYZ(e,J.x,J.y,J.z);return this}applyMatrix4(t){for(let e=0,n=this.count;e<n;e++)J.fromBufferAttribute(this,e),J.applyMatrix4(t),this.setXYZ(e,J.x,J.y,J.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)J.fromBufferAttribute(this,e),J.applyNormalMatrix(t),this.setXYZ(e,J.x,J.y,J.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)J.fromBufferAttribute(this,e),J.transformDirection(t),this.setXYZ(e,J.x,J.y,J.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let n=this.array[t*this.itemSize+e];return this.normalized&&(n=Ee(n,this.array)),n}setComponent(t,e,n){return this.normalized&&(n=ut(n,this.array)),this.array[t*this.itemSize+e]=n,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=Ee(e,this.array)),e}setX(t,e){return this.normalized&&(e=ut(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=Ee(e,this.array)),e}setY(t,e){return this.normalized&&(e=ut(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=Ee(e,this.array)),e}setZ(t,e){return this.normalized&&(e=ut(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=Ee(e,this.array)),e}setW(t,e){return this.normalized&&(e=ut(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,n){return t*=this.itemSize,this.normalized&&(e=ut(e,this.array),n=ut(n,this.array)),this.array[t+0]=e,this.array[t+1]=n,this}setXYZ(t,e,n,i){return t*=this.itemSize,this.normalized&&(e=ut(e,this.array),n=ut(n,this.array),i=ut(i,this.array)),this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this}setXYZW(t,e,n,i,s){return t*=this.itemSize,this.normalized&&(e=ut(e,this.array),n=ut(n,this.array),i=ut(i,this.array),s=ut(s,this.array)),this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this.array[t+3]=s,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){let t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(t.name=this.name),this.usage!==Ri&&(t.usage=this.usage),t}dispose(){this.dispatchEvent({type:"dispose"})}};var pn=class extends ot{constructor(t,e,n){super(new Uint16Array(t),e,n)}};var mn=class extends ot{constructor(t,e,n){super(new Uint32Array(t),e,n)}};var gn=class extends ot{constructor(t,e,n){super(new Float32Array(t),e,n)}},Kr=new X,Re=new M,li=new M,pe=class{constructor(t=new M,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){let n=this.center;e!==void 0?n.copy(e):Kr.setFromPoints(t).getCenter(n);let i=0;for(let s=0,r=t.length;s<r;s++)i=Math.max(i,n.distanceToSquared(t[s]));return this.radius=Math.sqrt(i),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){let e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){let n=this.center.distanceToSquared(t);return e.copy(t),n>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Re.subVectors(t,this.center);let e=Re.lengthSq();if(e>this.radius*this.radius){let n=Math.sqrt(e),i=(n-this.radius)*.5;this.center.addScaledVector(Re,i/n),this.radius+=i}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(li.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Re.copy(t.center).add(li)),this.expandByPoint(Re.copy(t.center).sub(li))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}},Qr=0,mt=new W,ui=new Zt,ce=new M,dt=new X,Pe=new X,K=new M,Ue=class c extends Yt{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Qr++}),this.uuid=Cn(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Fr(t)?mn:pn)(t,1):this.index=t,this}setIndirect(t,e=0){return this.indirect=t,this.indirectOffset=e,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return this.attributes[t]!==void 0}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){let e=this.attributes.position;e!==void 0&&(e.applyMatrix4(t),e.needsUpdate=!0);let n=this.attributes.normal;if(n!==void 0){let s=new N().getNormalMatrix(t);n.applyNormalMatrix(s),n.needsUpdate=!0}let i=this.attributes.tangent;return i!==void 0&&(i.transformDirection(t),i.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(t){return mt.makeRotationFromQuaternion(t),this.applyMatrix4(mt),this}rotateX(t){return mt.makeRotationX(t),this.applyMatrix4(mt),this}rotateY(t){return mt.makeRotationY(t),this.applyMatrix4(mt),this}rotateZ(t){return mt.makeRotationZ(t),this.applyMatrix4(mt),this}translate(t,e,n){return mt.makeTranslation(t,e,n),this.applyMatrix4(mt),this}scale(t,e,n){return mt.makeScale(t,e,n),this.applyMatrix4(mt),this}lookAt(t){return ui.lookAt(t),ui.updateMatrix(),this.applyMatrix4(ui.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(ce).negate(),this.translate(ce.x,ce.y,ce.z),this}setFromPoints(t){let e=this.getAttribute("position");if(e===void 0){let n=[];for(let i=0,s=t.length;i<s;i++){let r=t[i];n.push(r.x,r.y,r.z||0)}this.setAttribute("position",new gn(n,3))}else{let n=Math.min(t.length,e.count);for(let i=0;i<n;i++){let s=t[i];e.setXYZ(i,s.x,s.y,s.z||0)}t.length>e.count&&Q("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new X);let t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){G("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new M(-1/0,-1/0,-1/0),new M(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let n=0,i=e.length;n<i;n++){let s=e[n];dt.setFromBufferAttribute(s),this.morphTargetsRelative?(K.addVectors(this.boundingBox.min,dt.min),this.boundingBox.expandByPoint(K),K.addVectors(this.boundingBox.max,dt.max),this.boundingBox.expandByPoint(K)):(this.boundingBox.expandByPoint(dt.min),this.boundingBox.expandByPoint(dt.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&G('BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new pe);let t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){G("BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new M,1/0);return}if(t){let n=this.boundingSphere.center;if(dt.setFromBufferAttribute(t),e)for(let s=0,r=e.length;s<r;s++){let o=e[s];Pe.setFromBufferAttribute(o),this.morphTargetsRelative?(K.addVectors(dt.min,Pe.min),dt.expandByPoint(K),K.addVectors(dt.max,Pe.max),dt.expandByPoint(K)):(dt.expandByPoint(Pe.min),dt.expandByPoint(Pe.max))}dt.getCenter(n);let i=0;for(let s=0,r=t.count;s<r;s++)K.fromBufferAttribute(t,s),i=Math.max(i,n.distanceToSquared(K));if(e)for(let s=0,r=e.length;s<r;s++){let o=e[s],a=this.morphTargetsRelative;for(let l=0,u=o.count;l<u;l++)K.fromBufferAttribute(o,l),a&&(ce.fromBufferAttribute(t,l),K.add(ce)),i=Math.max(i,n.distanceToSquared(K))}this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&G('BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){let t=this.index,e=this.attributes;if(t===null||e.position===void 0||e.normal===void 0||e.uv===void 0){G("BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}let n=e.position,i=e.normal,s=e.uv;this.hasAttribute("tangent")===!1&&this.setAttribute("tangent",new ot(new Float32Array(4*n.count),4));let r=this.getAttribute("tangent"),o=[],a=[];for(let A=0;A<n.count;A++)o[A]=new M,a[A]=new M;let l=new M,u=new M,f=new M,h=new H,d=new H,p=new H,m=new M,_=new M;function g(A,E,C){l.fromBufferAttribute(n,A),u.fromBufferAttribute(n,E),f.fromBufferAttribute(n,C),h.fromBufferAttribute(s,A),d.fromBufferAttribute(s,E),p.fromBufferAttribute(s,C),u.sub(l),f.sub(l),d.sub(h),p.sub(h);let R=1/(d.x*p.y-p.x*d.y);isFinite(R)&&(m.copy(u).multiplyScalar(p.y).addScaledVector(f,-d.y).multiplyScalar(R),_.copy(f).multiplyScalar(d.x).addScaledVector(u,-p.x).multiplyScalar(R),o[A].add(m),o[E].add(m),o[C].add(m),a[A].add(_),a[E].add(_),a[C].add(_))}let x=this.groups;x.length===0&&(x=[{start:0,count:t.count}]);for(let A=0,E=x.length;A<E;++A){let C=x[A],R=C.start,w=C.count;for(let P=R,L=R+w;P<L;P+=3)g(t.getX(P+0),t.getX(P+1),t.getX(P+2))}let y=new M,S=new M,v=new M,b=new M;function T(A){v.fromBufferAttribute(i,A),b.copy(v);let E=o[A];y.copy(E),y.sub(v.multiplyScalar(v.dot(E))).normalize(),S.crossVectors(b,E);let R=S.dot(a[A])<0?-1:1;r.setXYZW(A,y.x,y.y,y.z,R)}for(let A=0,E=x.length;A<E;++A){let C=x[A],R=C.start,w=C.count;for(let P=R,L=R+w;P<L;P+=3)T(t.getX(P+0)),T(t.getX(P+1)),T(t.getX(P+2))}}computeVertexNormals(){let t=this.index,e=this.getAttribute("position");if(e!==void 0){let n=this.getAttribute("normal");if(n===void 0)n=new ot(new Float32Array(e.count*3),3),this.setAttribute("normal",n);else for(let h=0,d=n.count;h<d;h++)n.setXYZ(h,0,0,0);let i=new M,s=new M,r=new M,o=new M,a=new M,l=new M,u=new M,f=new M;if(t)for(let h=0,d=t.count;h<d;h+=3){let p=t.getX(h+0),m=t.getX(h+1),_=t.getX(h+2);i.fromBufferAttribute(e,p),s.fromBufferAttribute(e,m),r.fromBufferAttribute(e,_),u.subVectors(r,s),f.subVectors(i,s),u.cross(f),o.fromBufferAttribute(n,p),a.fromBufferAttribute(n,m),l.fromBufferAttribute(n,_),o.add(u),a.add(u),l.add(u),n.setXYZ(p,o.x,o.y,o.z),n.setXYZ(m,a.x,a.y,a.z),n.setXYZ(_,l.x,l.y,l.z)}else for(let h=0,d=e.count;h<d;h+=3)i.fromBufferAttribute(e,h+0),s.fromBufferAttribute(e,h+1),r.fromBufferAttribute(e,h+2),u.subVectors(r,s),f.subVectors(i,s),u.cross(f),n.setXYZ(h+0,u.x,u.y,u.z),n.setXYZ(h+1,u.x,u.y,u.z),n.setXYZ(h+2,u.x,u.y,u.z);this.normalizeNormals(),n.needsUpdate=!0}}normalizeNormals(){let t=this.attributes.normal;for(let e=0,n=t.count;e<n;e++)K.fromBufferAttribute(t,e),K.normalize(),t.setXYZ(e,K.x,K.y,K.z)}toNonIndexed(){function t(o,a){let l=o.array,u=o.itemSize,f=o.normalized,h=new l.constructor(a.length*u),d=0,p=0;for(let m=0,_=a.length;m<_;m++){o.isInterleavedBufferAttribute?d=a[m]*o.data.stride+o.offset:d=a[m]*u;for(let g=0;g<u;g++)h[p++]=l[d++]}return new ot(h,u,f)}if(this.index===null)return Q("BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;let e=new c,n=this.index.array,i=this.attributes;for(let o in i){let a=i[o],l=t(a,n);e.setAttribute(o,l)}let s=this.morphAttributes;for(let o in s){let a=[],l=s[o];for(let u=0,f=l.length;u<f;u++){let h=l[u],d=t(h,n);a.push(d)}e.morphAttributes[o]=a}e.morphTargetsRelative=this.morphTargetsRelative;let r=this.groups;for(let o=0,a=r.length;o<a;o++){let l=r[o];e.addGroup(l.start,l.count,l.materialIndex)}return e}toJSON(){let t={metadata:{version:4.7,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==""&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),this.parameters!==void 0){let a=this.parameters;for(let l in a)a[l]!==void 0&&(t[l]=a[l]);return t}t.data={attributes:{}};let e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});let n=this.attributes;for(let a in n){let l=n[a];t.data.attributes[a]=l.toJSON(t.data)}let i={},s=!1;for(let a in this.morphAttributes){let l=this.morphAttributes[a],u=[];for(let f=0,h=l.length;f<h;f++){let d=l[f];u.push(d.toJSON(t.data))}u.length>0&&(i[a]=u,s=!0)}s&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);let r=this.groups;r.length>0&&(t.data.groups=JSON.parse(JSON.stringify(r)));let o=this.boundingSphere;return o!==null&&(t.data.boundingSphere=o.toJSON()),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let e={};this.name=t.name;let n=t.index;n!==null&&this.setIndex(n.clone());let i=t.attributes;for(let l in i){let u=i[l];this.setAttribute(l,u.clone(e))}let s=t.morphAttributes;for(let l in s){let u=[],f=s[l];for(let h=0,d=f.length;h<d;h++)u.push(f[h].clone(e));this.morphAttributes[l]=u}this.morphTargetsRelative=t.morphTargetsRelative;let r=t.groups;for(let l=0,u=r.length;l<u;l++){let f=r[l];this.addGroup(f.start,f.count,f.materialIndex)}let o=t.boundingBox;o!==null&&(this.boundingBox=o.clone());let a=t.boundingSphere;return a!==null&&(this.boundingSphere=a.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}};var hi=new M,jr=new M,to=new N,Jt=class{constructor(t=new M(1,0,0),e=0){this.isPlane=!0,this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){let i=hi.subVectors(n,e).cross(jr.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){let t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectLine(t,e,n=!0){let i=t.delta(hi),s=this.normal.dot(i);if(s===0)return this.distanceToPoint(t.start)===0?e.copy(t.start):null;let r=-(t.start.dot(this.normal)+this.constant)/s;return n===!0&&(r<0||r>1)?null:e.copy(t.start).addScaledVector(i,r)}intersectsLine(t){let e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){let n=e||to.getNormalMatrix(t),i=this.coplanarPoint(hi).applyMatrix4(t),s=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(s),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new this.constructor().copy(this)}};function qs(c){let t={};for(let e in c){t[e]={};for(let n in c[e]){let i=c[e][n];if(Ps(i))i.isRenderTargetTexture?(Q("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),t[e][n]=null):t[e][n]=i.clone();else if(Array.isArray(i))if(Ps(i[0])){let s=[];for(let r=0,o=i.length;r<o;r++)s[r]=i[r].clone();t[e][n]=s}else t[e][n]=i.slice();else t[e][n]=i}}return t}function ct(c){let t={};for(let e=0;e<c.length;e++){let n=qs(c[e]);for(let i in n)t[i]=n[i]}return t}function Ps(c){return c&&(c.isColor||c.isMatrix3||c.isMatrix4||c.isVector2||c.isVector3||c.isVector4||c.isTexture||c.isQuaternion)}function rn(c,t){return!c||c.constructor===t?c:typeof t.BYTES_PER_ELEMENT=="number"?new t(c):Array.prototype.slice.call(c)}var Ot=class{constructor(t,e,n,i){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=i!==void 0?i:new e.constructor(n),this.sampleValues=e,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(t){let e=this.parameterPositions,n=this._cachedIndex,i=e[n],s=e[n-1];n:{t:{let r;e:{i:if(!(t<i)){for(let o=n+2;;){if(i===void 0){if(t<s)break i;return n=e.length,this._cachedIndex=n,this.copySampleValue_(n-1)}if(n===o)break;if(s=i,i=e[++n],t<i)break t}r=e.length;break e}if(!(t>=s)){let o=e[1];t<o&&(n=2,s=o);for(let a=n-2;;){if(s===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(n===a)break;if(i=s,s=e[--n-1],t>=s)break t}r=n,n=0;break e}break n}for(;n<r;){let o=n+r>>>1;t<e[o]?r=o:n=o+1}if(i=e[n],s=e[n-1],s===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(i===void 0)return n=e.length,this._cachedIndex=n,this.copySampleValue_(n-1)}this._cachedIndex=n,this.intervalChanged_(n,s,i)}return this.interpolate_(n,s,t,i)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(t){let e=this.resultBuffer,n=this.sampleValues,i=this.valueSize,s=t*i;for(let r=0;r!==i;++r)e[r]=n[s+r];return e}interpolate_(){throw new Error("call to abstract method")}intervalChanged_(){}},_n=class extends Ot{constructor(t,e,n,i){super(t,e,n,i),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:Ti,endingEnd:Ti}}intervalChanged_(t,e,n){let i=this.parameterPositions,s=t-2,r=t+1,o=i[s],a=i[r];if(o===void 0)switch(this.getSettings_().endingStart){case Ai:s=t,o=2*e-n;break;case Ei:s=i.length-2,o=e+i[s]-i[s+1];break;default:s=t,o=n}if(a===void 0)switch(this.getSettings_().endingEnd){case Ai:r=t,a=2*n-e;break;case Ei:r=1,a=n+i[1]-i[0];break;default:r=t-1,a=e}let l=(n-e)*.5,u=this.valueSize;this._weightPrev=l/(e-o),this._weightNext=l/(a-n),this._offsetPrev=s*u,this._offsetNext=r*u}interpolate_(t,e,n,i){let s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,u=this._offsetPrev,f=this._offsetNext,h=this._weightPrev,d=this._weightNext,p=(n-e)/(i-e),m=p*p,_=m*p,g=-h*_+2*h*m-h*p,x=(1+h)*_+(-1.5-2*h)*m+(-.5+h)*p+1,y=(-1-d)*_+(1.5+d)*m+.5*p,S=d*_-d*m;for(let v=0;v!==o;++v)s[v]=g*r[u+v]+x*r[l+v]+y*r[a+v]+S*r[f+v];return s}},xn=class extends Ot{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){let s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,u=(n-e)/(i-e),f=1-u;for(let h=0;h!==o;++h)s[h]=r[l+h]*f+r[a+h]*u;return s}},yn=class extends Ot{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t){return this.copySampleValue_(t-1)}},vn=class extends Ot{interpolate_(t,e,n,i){let s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,u=this.settings||this.DefaultSettings_,f=u.inTangents,h=u.outTangents;if(!f||!h){let m=(n-e)/(i-e),_=1-m;for(let g=0;g!==o;++g)s[g]=r[l+g]*_+r[a+g]*m;return s}let d=o*2,p=t-1;for(let m=0;m!==o;++m){let _=r[l+m],g=r[a+m],x=p*d+m*2,y=h[x],S=h[x+1],v=t*d+m*2,b=f[v],T=f[v+1],A=(n-e)/(i-e),E,C,R,w,P;for(let L=0;L<8;L++){E=A*A,C=E*A,R=1-A,w=R*R,P=w*R;let O=P*e+3*w*A*y+3*R*E*b+C*i-n;if(Math.abs(O)<1e-10)break;let it=3*w*(y-e)+6*R*A*(b-y)+3*E*(i-b);if(Math.abs(it)<1e-10)break;A=A-O/it,A=Math.max(0,Math.min(1,A))}s[m]=P*_+3*w*A*S+3*R*E*T+C*g}return s}},pt=class{constructor(t,e,n,i){if(t===void 0)throw new Error("THREE.KeyframeTrack: track name is undefined");if(e===void 0||e.length===0)throw new Error("THREE.KeyframeTrack: no keyframes in track named "+t);this.name=t,this.times=rn(e,this.TimeBufferType),this.values=rn(n,this.ValueBufferType),this.setInterpolation(i||this.DefaultInterpolation)}static toJSON(t){let e=t.constructor,n;if(e.toJSON!==this.toJSON)n=e.toJSON(t);else{n={name:t.name,times:rn(t.times,Array),values:rn(t.values,Array)};let i=t.getInterpolation();i!==t.DefaultInterpolation&&(n.interpolation=i)}return n.type=t.ValueTypeName,n}InterpolantFactoryMethodDiscrete(t){return new yn(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodLinear(t){return new xn(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodSmooth(t){return new _n(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodBezier(t){let e=new vn(this.times,this.values,this.getValueSize(),t);return this.settings&&(e.settings=this.settings),e}setInterpolation(t){let e;switch(t){case De:e=this.InterpolantFactoryMethodDiscrete;break;case ln:e=this.InterpolantFactoryMethodLinear;break;case an:e=this.InterpolantFactoryMethodSmooth;break;case bi:e=this.InterpolantFactoryMethodBezier;break}if(e===void 0){let n="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(this.createInterpolant===void 0)if(t!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw new Error(n);return Q("KeyframeTrack:",n),this}return this.createInterpolant=e,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return De;case this.InterpolantFactoryMethodLinear:return ln;case this.InterpolantFactoryMethodSmooth:return an;case this.InterpolantFactoryMethodBezier:return bi}}getValueSize(){return this.values.length/this.times.length}shift(t){if(t!==0){let e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]+=t}return this}scale(t){if(t!==1){let e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]*=t}return this}trim(t,e){let n=this.times,i=n.length,s=0,r=i-1;for(;s!==i&&n[s]<t;)++s;for(;r!==-1&&n[r]>e;)--r;if(++r,s!==0||r!==i){s>=r&&(r=Math.max(r,1),s=r-1);let o=this.getValueSize();this.times=n.slice(s,r),this.values=this.values.slice(s*o,r*o)}return this}validate(){let t=!0,e=this.getValueSize();e-Math.floor(e)!==0&&(G("KeyframeTrack: Invalid value size in track.",this),t=!1);let n=this.times,i=this.values,s=n.length;s===0&&(G("KeyframeTrack: Track is empty.",this),t=!1);let r=null;for(let o=0;o!==s;o++){let a=n[o];if(typeof a=="number"&&isNaN(a)){G("KeyframeTrack: Time is not a valid number.",this,o,a),t=!1;break}if(r!==null&&r>a){G("KeyframeTrack: Out of order keys.",this,o,a,r),t=!1;break}r=a}if(i!==void 0&&Br(i))for(let o=0,a=i.length;o!==a;++o){let l=i[o];if(isNaN(l)){G("KeyframeTrack: Value is not a valid number.",this,o,l),t=!1;break}}return t}optimize(){let t=this.times.slice(),e=this.values.slice(),n=this.getValueSize(),i=this.getInterpolation()===an,s=t.length-1,r=1;for(let o=1;o<s;++o){let a=!1,l=t[o],u=t[o+1];if(l!==u&&(o!==1||l!==t[0]))if(i)a=!0;else{let f=o*n,h=f-n,d=f+n;for(let p=0;p!==n;++p){let m=e[f+p];if(m!==e[h+p]||m!==e[d+p]){a=!0;break}}}if(a){if(o!==r){t[r]=t[o];let f=o*n,h=r*n;for(let d=0;d!==n;++d)e[h+d]=e[f+d]}++r}}if(s>0){t[r]=t[s];for(let o=s*n,a=r*n,l=0;l!==n;++l)e[a+l]=e[o+l];++r}return r!==t.length?(this.times=t.slice(0,r),this.values=e.slice(0,r*n)):(this.times=t,this.values=e),this}clone(){let t=this.times.slice(),e=this.values.slice(),n=this.constructor,i=new n(this.name,t,e);return i.createInterpolant=this.createInterpolant,i}};pt.prototype.ValueTypeName="";pt.prototype.TimeBufferType=Float32Array;pt.prototype.ValueBufferType=Float32Array;pt.prototype.DefaultInterpolation=ln;var zt=class extends pt{constructor(t,e,n){super(t,e,n)}};zt.prototype.ValueTypeName="bool";zt.prototype.ValueBufferType=Array;zt.prototype.DefaultInterpolation=De;zt.prototype.InterpolantFactoryMethodLinear=void 0;zt.prototype.InterpolantFactoryMethodSmooth=void 0;var Mn=class extends pt{constructor(t,e,n,i){super(t,e,n,i)}};Mn.prototype.ValueTypeName="color";var Sn=class extends pt{constructor(t,e,n,i){super(t,e,n,i)}};Sn.prototype.ValueTypeName="number";var bn=class extends Ot{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){let s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=(n-e)/(i-e),l=t*o;for(let u=l+o;l!==u;l+=4)Lt.slerpFlat(s,0,r,l-o,r,l,a);return s}},Fe=class extends pt{constructor(t,e,n,i){super(t,e,n,i)}InterpolantFactoryMethodLinear(t){return new bn(this.times,this.values,this.getValueSize(),t)}};Fe.prototype.ValueTypeName="quaternion";Fe.prototype.InterpolantFactoryMethodSmooth=void 0;var Vt=class extends pt{constructor(t,e,n){super(t,e,n)}};Vt.prototype.ValueTypeName="string";Vt.prototype.ValueBufferType=Array;Vt.prototype.DefaultInterpolation=De;Vt.prototype.InterpolantFactoryMethodLinear=void 0;Vt.prototype.InterpolantFactoryMethodSmooth=void 0;var Tn=class extends pt{constructor(t,e,n,i){super(t,e,n,i)}};Tn.prototype.ValueTypeName="vector";var An=class{constructor(t,e,n){let i=this,s=!1,r=0,o=0,a,l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this._abortController=null,this.itemStart=function(u){o++,s===!1&&i.onStart!==void 0&&i.onStart(u,r,o),s=!0},this.itemEnd=function(u){r++,i.onProgress!==void 0&&i.onProgress(u,r,o),r===o&&(s=!1,i.onLoad!==void 0&&i.onLoad())},this.itemError=function(u){i.onError!==void 0&&i.onError(u)},this.resolveURL=function(u){return a?a(u):u},this.setURLModifier=function(u){return a=u,this},this.addHandler=function(u,f){return l.push(u,f),this},this.removeHandler=function(u){let f=l.indexOf(u);return f!==-1&&l.splice(f,2),this},this.getHandler=function(u){for(let f=0,h=l.length;f<h;f+=2){let d=l[f],p=l[f+1];if(d.global&&(d.lastIndex=0),d.test(u))return p}return null},this.abort=function(){return this.abortController.abort(),this._abortController=null,this}}get abortController(){return this._abortController||(this._abortController=new AbortController),this._abortController}},Ys=new An,En=class{constructor(t){this.manager=t!==void 0?t:Ys,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}load(){}loadAsync(t,e){let n=this;return new Promise(function(i,s){n.load(t,i,e,s)})}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}abort(){return this}};En.DEFAULT_MATERIAL_NAME="__DEFAULT";var Yi="\\\\[\\\\]\\\\.:\\\\/",eo=new RegExp("["+Yi+"]","g"),Zi="[^"+Yi+"]",no="[^"+Yi.replace("\\\\.","")+"]",io=/((?:WC+[\\/:])*)/.source.replace("WC",Zi),so=/(WCOD+)?/.source.replace("WCOD",no),ro=/(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace("WC",Zi),oo=/\\.(WC+)(?:\\[(.+)\\])?/.source.replace("WC",Zi),ao=new RegExp("^"+io+so+ro+oo+"$"),co=["material","materials","bones","map"],Di=class{constructor(t,e,n){let i=n||k.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}getValue(t,e){this.bind();let n=this._targetGroup.nCachedObjects_,i=this._bindings[n];i!==void 0&&i.getValue(t,e)}setValue(t,e){let n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,s=n.length;i!==s;++i)n[i].setValue(t,e)}bind(){let t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()}unbind(){let t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}},k=class c{constructor(t,e,n){this.path=e,this.parsedPath=n||c.parseTrackName(e),this.node=c.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new c.Composite(t,e,n):new c(t,e,n)}static sanitizeNodeName(t){return t.replace(/\\s/g,"_").replace(eo,"")}static parseTrackName(t){let e=ao.exec(t);if(e===null)throw new Error("PropertyBinding: Cannot parse trackName: "+t);let n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(i!==void 0&&i!==-1){let s=n.nodeName.substring(i+1);co.indexOf(s)!==-1&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=s)}if(n.propertyName===null||n.propertyName.length===0)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n}static findNode(t,e){if(e===void 0||e===""||e==="."||e===-1||e===t.name||e===t.uuid)return t;if(t.skeleton){let n=t.skeleton.getBoneByName(e);if(n!==void 0)return n}if(t.children){let n=function(s){for(let r=0;r<s.length;r++){let o=s[r];if(o.name===e||o.uuid===e)return o;let a=n(o.children);if(a)return a}return null},i=n(t.children);if(i)return i}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(t,e){t[e]=this.targetObject[this.propertyName]}_getValue_array(t,e){let n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)t[e++]=n[i]}_getValue_arrayElement(t,e){t[e]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(t,e){this.resolvedProperty.toArray(t,e)}_setValue_direct(t,e){this.targetObject[this.propertyName]=t[e]}_setValue_direct_setNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(t,e){let n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++]}_setValue_array_setNeedsUpdate(t,e){let n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(t,e){let n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(t,e){this.resolvedProperty[this.propertyIndex]=t[e]}_setValue_arrayElement_setNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(t,e){this.resolvedProperty.fromArray(t,e)}_setValue_fromArray_setNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(t,e){this.bind(),this.getValue(t,e)}_setValue_unbound(t,e){this.bind(),this.setValue(t,e)}bind(){let t=this.node,e=this.parsedPath,n=e.objectName,i=e.propertyName,s=e.propertyIndex;if(t||(t=c.findNode(this.rootNode,e.nodeName),this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t){Q("PropertyBinding: No target node found for track: "+this.path+".");return}if(n){let l=e.objectIndex;switch(n){case"materials":if(!t.material){G("PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!t.material.materials){G("PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);return}t=t.material.materials;break;case"bones":if(!t.skeleton){G("PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);return}t=t.skeleton.bones;for(let u=0;u<t.length;u++)if(t[u].name===l){l=u;break}break;case"map":if("map"in t){t=t.map;break}if(!t.material){G("PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!t.material.map){G("PropertyBinding: Can not bind to material.map as node.material does not have a map.",this);return}t=t.material.map;break;default:if(t[n]===void 0){G("PropertyBinding: Can not bind to objectName of node undefined.",this);return}t=t[n]}if(l!==void 0){if(t[l]===void 0){G("PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,t);return}t=t[l]}}let r=t[i];if(r===void 0){let l=e.nodeName;G("PropertyBinding: Trying to update property for track: "+l+"."+i+" but it wasn't found.",t);return}let o=this.Versioning.None;this.targetObject=t,t.isMaterial===!0?o=this.Versioning.NeedsUpdate:t.isObject3D===!0&&(o=this.Versioning.MatrixWorldNeedsUpdate);let a=this.BindingType.Direct;if(s!==void 0){if(i==="morphTargetInfluences"){if(!t.geometry){G("PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);return}if(!t.geometry.morphAttributes){G("PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);return}t.morphTargetDictionary[s]!==void 0&&(s=t.morphTargetDictionary[s])}a=this.BindingType.ArrayElement,this.resolvedProperty=r,this.propertyIndex=s}else r.fromArray!==void 0&&r.toArray!==void 0?(a=this.BindingType.HasFromToArray,this.resolvedProperty=r):Array.isArray(r)?(a=this.BindingType.EntireArray,this.resolvedProperty=r):this.propertyName=i;this.getValue=this.GetterByBindingType[a],this.setValue=this.SetterByBindingTypeAndVersioning[a][o]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};k.Composite=Di;k.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3};k.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2};k.prototype.GetterByBindingType=[k.prototype._getValue_direct,k.prototype._getValue_array,k.prototype._getValue_arrayElement,k.prototype._getValue_toArray];k.prototype.SetterByBindingTypeAndVersioning=[[k.prototype._setValue_direct,k.prototype._setValue_direct_setNeedsUpdate,k.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[k.prototype._setValue_array,k.prototype._setValue_array_setNeedsUpdate,k.prototype._setValue_array_setMatrixWorldNeedsUpdate],[k.prototype._setValue_arrayElement,k.prototype._setValue_arrayElement_setNeedsUpdate,k.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[k.prototype._setValue_fromArray,k.prototype._setValue_fromArray_setNeedsUpdate,k.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];var vl=new Float32Array(1);var Ni=class c{static{c.prototype.isMatrix2=!0}constructor(t,e,n,i){this.elements=[1,0,0,1],t!==void 0&&this.set(t,e,n,i)}identity(){return this.set(1,0,0,1),this}fromArray(t,e=0){for(let n=0;n<4;n++)this.elements[n]=t[n+e];return this}set(t,e,n,i){let s=this.elements;return s[0]=t,s[2]=e,s[1]=n,s[3]=i,this}};var Is=new M,on=new M,le=new M,ue=new M,fi=new M,lo=new M,uo=new M,at=class{constructor(t=new M,e=new M){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){Is.subVectors(t,this.start),on.subVectors(this.end,this.start);let n=on.dot(on);if(n===0)return 0;let s=on.dot(Is)/n;return e&&(s=U(s,0,1)),s}closestPointToPoint(t,e,n){let i=this.closestPointToPointParameter(t,e);return this.delta(n).multiplyScalar(i).add(this.start)}distanceSqToLine3(t,e=lo,n=uo){let i=10000000000000001e-32,s,r,o=this.start,a=t.start,l=this.end,u=t.end;le.subVectors(l,o),ue.subVectors(u,a),fi.subVectors(o,a);let f=le.dot(le),h=ue.dot(ue),d=ue.dot(fi);if(f<=i&&h<=i)return e.copy(o),n.copy(a),e.sub(n),e.dot(e);if(f<=i)s=0,r=d/h,r=U(r,0,1);else{let p=le.dot(fi);if(h<=i)r=0,s=U(-p/f,0,1);else{let m=le.dot(ue),_=f*h-m*m;_!==0?s=U((m*d-p*h)/_,0,1):s=0,r=(m*s+d)/h,r<0?(r=0,s=U(-p/f,0,1)):r>1&&(r=1,s=U((m-p)/f,0,1))}}return e.copy(o).addScaledVector(le,s),n.copy(a).addScaledVector(ue,r),e.distanceToSquared(n)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return new this.constructor().copy(this)}};typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"184"}}));typeof window<"u"&&(window.__THREE__?Q("WARNING: Multiple instances of Three.js being imported."):window.__THREE__="184");var ho=\`#ifdef USE_ALPHAHASH
|
|
1
|
+
"use strict";"use client";var kT=Object.create;var ic=Object.defineProperty;var LT=Object.getOwnPropertyDescriptor;var DT=Object.getOwnPropertyNames;var NT=Object.getPrototypeOf,OT=Object.prototype.hasOwnProperty;var IT=(e,t,n)=>t in e?ic(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var BT=(e,t)=>()=>(e&&(t=e(e=0)),t);var cv=(e,t)=>{for(var n in t)ic(e,n,{get:t[n],enumerable:!0})},dv=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of DT(t))!OT.call(e,r)&&r!==n&&ic(e,r,{get:()=>t[r],enumerable:!(i=LT(t,r))||i.enumerable});return e};var Jd=(e,t,n)=>(n=e!=null?kT(NT(e)):{},dv(t||!e||!e.__esModule?ic(n,"default",{value:e,enumerable:!0}):n,e)),zT=e=>dv(ic({},"__esModule",{value:!0}),e);var fh=(e,t,n)=>IT(e,typeof t!="symbol"?t+"":t,n);var bv={};cv(bv,{bvhWorkerCode:()=>VT});var VT,vv=BT(()=>{"use strict";VT=`(()=>{var Ls=1;var Ds=3,wn=0,Ui=1,Fi=2;var di=0,pi=1,mi=2,gi=3,_i=4,xi=5,yi=6,vi=7,Ns=0,Us=1,Fs=2;var Bi=1,Oi=2,zi=3,Vi=4,ki=5,Gi=6,Hi=7;var Wi=300,Bs=301,Xi=302;var Os=306,Mi=1e3,Ie=1001,Si=1002;var zs=1006;var Vs=1008;var ks=1009;var Gs=1015;var Hs=1023;var De=2300,ln=2301,an=2302,bi=2303,Ti=2400,Ai=2401,Ei=2402;var qi="",_t="srgb",wi="srgb-linear",Ci="linear",cn="srgb";var Ri=35044;var Le=2e3,Pi=2001;function Fr(c){for(let t=c.length-1;t>=0;--t)if(c[t]>=65535)return!0;return!1}function Br(c){return ArrayBuffer.isView(c)&&!(c instanceof DataView)}function Ii(c){return document.createElementNS("http://www.w3.org/1999/xhtml",c)}var xs={},un=null;function Ws(c){let t=c[0];if(typeof t=="string"&&t.startsWith("TSL:")){let e=c[1];e&&e.isStackTrace?c[0]+=" "+e.getLocation():c[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return c}function Q(...c){c=Ws(c);let t="THREE."+c.shift();if(un)un("warn",t,...c);else{let e=c[0];e&&e.isStackTrace?console.warn(e.getError(t)):console.warn(t,...c)}}function G(...c){c=Ws(c);let t="THREE."+c.shift();if(un)un("error",t,...c);else{let e=c[0];e&&e.isStackTrace?console.error(e.getError(t)):console.error(t,...c)}}function Li(...c){let t=c.join(" ");t in xs||(xs[t]=!0,Q(...c))}var Or={[di]:pi,[mi]:yi,[_i]:vi,[gi]:xi,[pi]:di,[yi]:mi,[vi]:_i,[xi]:gi},Yt=class{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[t]===void 0&&(n[t]=[]),n[t].indexOf(e)===-1&&n[t].push(e)}hasEventListener(t,e){let n=this._listeners;return n===void 0?!1:n[t]!==void 0&&n[t].indexOf(e)!==-1}removeEventListener(t,e){let n=this._listeners;if(n===void 0)return;let i=n[t];if(i!==void 0){let s=i.indexOf(e);s!==-1&&i.splice(s,1)}}dispatchEvent(t){let e=this._listeners;if(e===void 0)return;let n=e[t.type];if(n!==void 0){t.target=this;let i=n.slice(0);for(let s=0,r=i.length;s<r;s++)i[s].call(this,t);t.target=null}}},st=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];var yl=Math.PI/180,zr=180/Math.PI;function Cn(){let c=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,n=Math.random()*4294967295|0;return(st[c&255]+st[c>>8&255]+st[c>>16&255]+st[c>>24&255]+"-"+st[t&255]+st[t>>8&255]+"-"+st[t>>16&15|64]+st[t>>24&255]+"-"+st[e&63|128]+st[e>>8&255]+"-"+st[e>>16&255]+st[e>>24&255]+st[n&255]+st[n>>8&255]+st[n>>16&255]+st[n>>24&255]).toLowerCase()}function U(c,t,e){return Math.max(t,Math.min(e,c))}function Vr(c,t){return(c%t+t)%t}function Zn(c,t,e){return(1-e)*c+e*t}function Ee(c,t){switch(t.constructor){case Float32Array:return c;case Uint32Array:return c/4294967295;case Uint16Array:return c/65535;case Uint8Array:return c/255;case Int32Array:return Math.max(c/2147483647,-1);case Int16Array:return Math.max(c/32767,-1);case Int8Array:return Math.max(c/127,-1);default:throw new Error("Invalid component type.")}}function ut(c,t){switch(t.constructor){case Float32Array:return c;case Uint32Array:return Math.round(c*4294967295);case Uint16Array:return Math.round(c*65535);case Uint8Array:return Math.round(c*255);case Int32Array:return Math.round(c*2147483647);case Int16Array:return Math.round(c*32767);case Int8Array:return Math.round(c*127);default:throw new Error("Invalid component type.")}}var H=class c{static{c.prototype.isVector2=!0}constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){let e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=U(this.x,t.x,e.x),this.y=U(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=U(this.x,t,e),this.y=U(this.y,t,e),this}clampLength(t,e){let n=this.length();return this.divideScalar(n||1).multiplyScalar(U(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){let e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;let n=this.dot(t)/e;return Math.acos(U(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){let e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){let n=Math.cos(e),i=Math.sin(e),s=this.x-t.x,r=this.y-t.y;return this.x=s*n-r*i+t.x,this.y=s*i+r*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},Lt=class{constructor(t=0,e=0,n=0,i=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=n,this._w=i}static slerpFlat(t,e,n,i,s,r,o){let a=n[i+0],l=n[i+1],u=n[i+2],f=n[i+3],h=s[r+0],d=s[r+1],p=s[r+2],m=s[r+3];if(f!==m||a!==h||l!==d||u!==p){let _=a*h+l*d+u*p+f*m;_<0&&(h=-h,d=-d,p=-p,m=-m,_=-_);let g=1-o;if(_<.9995){let x=Math.acos(_),y=Math.sin(x);g=Math.sin(g*x)/y,o=Math.sin(o*x)/y,a=a*g+h*o,l=l*g+d*o,u=u*g+p*o,f=f*g+m*o}else{a=a*g+h*o,l=l*g+d*o,u=u*g+p*o,f=f*g+m*o;let x=1/Math.sqrt(a*a+l*l+u*u+f*f);a*=x,l*=x,u*=x,f*=x}}t[e]=a,t[e+1]=l,t[e+2]=u,t[e+3]=f}static multiplyQuaternionsFlat(t,e,n,i,s,r){let o=n[i],a=n[i+1],l=n[i+2],u=n[i+3],f=s[r],h=s[r+1],d=s[r+2],p=s[r+3];return t[e]=o*p+u*f+a*d-l*h,t[e+1]=a*p+u*h+l*f-o*d,t[e+2]=l*p+u*d+o*h-a*f,t[e+3]=u*p-o*f-a*h-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){let n=t._x,i=t._y,s=t._z,r=t._order,o=Math.cos,a=Math.sin,l=o(n/2),u=o(i/2),f=o(s/2),h=a(n/2),d=a(i/2),p=a(s/2);switch(r){case"XYZ":this._x=h*u*f+l*d*p,this._y=l*d*f-h*u*p,this._z=l*u*p+h*d*f,this._w=l*u*f-h*d*p;break;case"YXZ":this._x=h*u*f+l*d*p,this._y=l*d*f-h*u*p,this._z=l*u*p-h*d*f,this._w=l*u*f+h*d*p;break;case"ZXY":this._x=h*u*f-l*d*p,this._y=l*d*f+h*u*p,this._z=l*u*p+h*d*f,this._w=l*u*f-h*d*p;break;case"ZYX":this._x=h*u*f-l*d*p,this._y=l*d*f+h*u*p,this._z=l*u*p-h*d*f,this._w=l*u*f+h*d*p;break;case"YZX":this._x=h*u*f+l*d*p,this._y=l*d*f+h*u*p,this._z=l*u*p-h*d*f,this._w=l*u*f-h*d*p;break;case"XZY":this._x=h*u*f-l*d*p,this._y=l*d*f-h*u*p,this._z=l*u*p+h*d*f,this._w=l*u*f+h*d*p;break;default:Q("Quaternion: .setFromEuler() encountered an unknown order: "+r)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){let n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){let e=t.elements,n=e[0],i=e[4],s=e[8],r=e[1],o=e[5],a=e[9],l=e[2],u=e[6],f=e[10],h=n+o+f;if(h>0){let d=.5/Math.sqrt(h+1);this._w=.25/d,this._x=(u-a)*d,this._y=(s-l)*d,this._z=(r-i)*d}else if(n>o&&n>f){let d=2*Math.sqrt(1+n-o-f);this._w=(u-a)/d,this._x=.25*d,this._y=(i+r)/d,this._z=(s+l)/d}else if(o>f){let d=2*Math.sqrt(1+o-n-f);this._w=(s-l)/d,this._x=(i+r)/d,this._y=.25*d,this._z=(a+u)/d}else{let d=2*Math.sqrt(1+f-n-o);this._w=(r-i)/d,this._x=(s+l)/d,this._y=(a+u)/d,this._z=.25*d}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<1e-8?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(U(this.dot(t),-1,1)))}rotateTowards(t,e){let n=this.angleTo(t);if(n===0)return this;let i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){let n=t._x,i=t._y,s=t._z,r=t._w,o=e._x,a=e._y,l=e._z,u=e._w;return this._x=n*u+r*o+i*l-s*a,this._y=i*u+r*a+s*o-n*l,this._z=s*u+r*l+n*a-i*o,this._w=r*u-n*o-i*a-s*l,this._onChangeCallback(),this}slerp(t,e){let n=t._x,i=t._y,s=t._z,r=t._w,o=this.dot(t);o<0&&(n=-n,i=-i,s=-s,r=-r,o=-o);let a=1-e;if(o<.9995){let l=Math.acos(o),u=Math.sin(l);a=Math.sin(a*l)/u,e=Math.sin(e*l)/u,this._x=this._x*a+n*e,this._y=this._y*a+i*e,this._z=this._z*a+s*e,this._w=this._w*a+r*e,this._onChangeCallback()}else this._x=this._x*a+n*e,this._y=this._y*a+i*e,this._z=this._z*a+s*e,this._w=this._w*a+r*e,this.normalize();return this}slerpQuaternions(t,e,n){return this.copy(t).slerp(e,n)}random(){let t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),n=Math.random(),i=Math.sqrt(1-n),s=Math.sqrt(n);return this.set(i*Math.sin(t),i*Math.cos(t),s*Math.sin(e),s*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},M=class c{static{c.prototype.isVector3=!0}constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return n===void 0&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(ys.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(ys.setFromAxisAngle(t,e))}applyMatrix3(t){let e=this.x,n=this.y,i=this.z,s=t.elements;return this.x=s[0]*e+s[3]*n+s[6]*i,this.y=s[1]*e+s[4]*n+s[7]*i,this.z=s[2]*e+s[5]*n+s[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){let e=this.x,n=this.y,i=this.z,s=t.elements,r=1/(s[3]*e+s[7]*n+s[11]*i+s[15]);return this.x=(s[0]*e+s[4]*n+s[8]*i+s[12])*r,this.y=(s[1]*e+s[5]*n+s[9]*i+s[13])*r,this.z=(s[2]*e+s[6]*n+s[10]*i+s[14])*r,this}applyQuaternion(t){let e=this.x,n=this.y,i=this.z,s=t.x,r=t.y,o=t.z,a=t.w,l=2*(r*i-o*n),u=2*(o*e-s*i),f=2*(s*n-r*e);return this.x=e+a*l+r*f-o*u,this.y=n+a*u+o*l-s*f,this.z=i+a*f+s*u-r*l,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){let e=this.x,n=this.y,i=this.z,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i,this.y=s[1]*e+s[5]*n+s[9]*i,this.z=s[2]*e+s[6]*n+s[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=U(this.x,t.x,e.x),this.y=U(this.y,t.y,e.y),this.z=U(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=U(this.x,t,e),this.y=U(this.y,t,e),this.z=U(this.z,t,e),this}clampLength(t,e){let n=this.length();return this.divideScalar(n||1).multiplyScalar(U(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){let n=t.x,i=t.y,s=t.z,r=e.x,o=e.y,a=e.z;return this.x=i*a-s*o,this.y=s*r-n*a,this.z=n*o-i*r,this}projectOnVector(t){let e=t.lengthSq();if(e===0)return this.set(0,0,0);let n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return Jn.copy(this).projectOnVector(t),this.sub(Jn)}reflect(t){return this.sub(Jn.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){let e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;let n=this.dot(t)/e;return Math.acos(U(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){let e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){let i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){let e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){let e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let t=Math.random()*Math.PI*2,e=Math.random()*2-1,n=Math.sqrt(1-e*e);return this.x=n*Math.cos(t),this.y=e,this.z=n*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},Jn=new M,ys=new Lt,N=class c{static{c.prototype.isMatrix3=!0}constructor(t,e,n,i,s,r,o,a,l){this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,n,i,s,r,o,a,l)}set(t,e,n,i,s,r,o,a,l){let u=this.elements;return u[0]=t,u[1]=i,u[2]=o,u[3]=e,u[4]=s,u[5]=a,u[6]=n,u[7]=r,u[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){let e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){let e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){let n=t.elements,i=e.elements,s=this.elements,r=n[0],o=n[3],a=n[6],l=n[1],u=n[4],f=n[7],h=n[2],d=n[5],p=n[8],m=i[0],_=i[3],g=i[6],x=i[1],y=i[4],S=i[7],v=i[2],b=i[5],T=i[8];return s[0]=r*m+o*x+a*v,s[3]=r*_+o*y+a*b,s[6]=r*g+o*S+a*T,s[1]=l*m+u*x+f*v,s[4]=l*_+u*y+f*b,s[7]=l*g+u*S+f*T,s[2]=h*m+d*x+p*v,s[5]=h*_+d*y+p*b,s[8]=h*g+d*S+p*T,this}multiplyScalar(t){let e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){let t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],u=t[8];return e*r*u-e*o*l-n*s*u+n*o*a+i*s*l-i*r*a}invert(){let t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],u=t[8],f=u*r-o*l,h=o*a-u*s,d=l*s-r*a,p=e*f+n*h+i*d;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return t[0]=f*m,t[1]=(i*l-u*n)*m,t[2]=(o*n-i*r)*m,t[3]=h*m,t[4]=(u*e-i*a)*m,t[5]=(i*s-o*e)*m,t[6]=d*m,t[7]=(n*a-l*e)*m,t[8]=(r*e-n*s)*m,this}transpose(){let t,e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){let e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,s,r,o){let a=Math.cos(s),l=Math.sin(s);return this.set(n*a,n*l,-n*(a*r+l*o)+r+t,-i*l,i*a,-i*(-l*r+a*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply($n.makeScale(t,e)),this}rotate(t){return this.premultiply($n.makeRotation(-t)),this}translate(t,e){return this.premultiply($n.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){let e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,n,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){let e=this.elements,n=t.elements;for(let i=0;i<9;i++)if(e[i]!==n[i])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){let n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return new this.constructor().fromArray(this.elements)}},$n=new N,vs=new N().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Ms=new N().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function kr(){let c={enabled:!0,workingColorSpace:wi,spaces:{},convert:function(i,s,r){return this.enabled===!1||s===r||!s||!r||(this.spaces[s].transfer===cn&&(i.r=It(i.r),i.g=It(i.g),i.b=It(i.b)),this.spaces[s].primaries!==this.spaces[r].primaries&&(i.applyMatrix3(this.spaces[s].toXYZ),i.applyMatrix3(this.spaces[r].fromXYZ)),this.spaces[r].transfer===cn&&(i.r=he(i.r),i.g=he(i.g),i.b=he(i.b))),i},workingToColorSpace:function(i,s){return this.convert(i,this.workingColorSpace,s)},colorSpaceToWorking:function(i,s){return this.convert(i,s,this.workingColorSpace)},getPrimaries:function(i){return this.spaces[i].primaries},getTransfer:function(i){return i===qi?Ci:this.spaces[i].transfer},getToneMappingMode:function(i){return this.spaces[i].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(i,s=this.workingColorSpace){return i.fromArray(this.spaces[s].luminanceCoefficients)},define:function(i){Object.assign(this.spaces,i)},_getMatrix:function(i,s,r){return i.copy(this.spaces[s].toXYZ).multiply(this.spaces[r].fromXYZ)},_getDrawingBufferColorSpace:function(i){return this.spaces[i].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(i=this.workingColorSpace){return this.spaces[i].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(i,s){return Li("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),c.workingToColorSpace(i,s)},toWorkingColorSpace:function(i,s){return Li("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),c.colorSpaceToWorking(i,s)}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],n=[.3127,.329];return c.define({[wi]:{primaries:t,whitePoint:n,transfer:Ci,toXYZ:vs,fromXYZ:Ms,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:_t},outputColorSpaceConfig:{drawingBufferColorSpace:_t}},[_t]:{primaries:t,whitePoint:n,transfer:cn,toXYZ:vs,fromXYZ:Ms,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:_t}}}),c}var gt=kr();function It(c){return c<.04045?c*.0773993808:Math.pow(c*.9478672986+.0521327014,2.4)}function he(c){return c<.0031308?c*12.92:1.055*Math.pow(c,.41666)-.055}var jt,hn=class{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let n;if(t instanceof HTMLCanvasElement)n=t;else{jt===void 0&&(jt=Ii("canvas")),jt.width=t.width,jt.height=t.height;let i=jt.getContext("2d");t instanceof ImageData?i.putImageData(t,0,0):i.drawImage(t,0,0,t.width,t.height),n=jt}return n.toDataURL(e)}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){let e=Ii("canvas");e.width=t.width,e.height=t.height;let n=e.getContext("2d");n.drawImage(t,0,0,t.width,t.height);let i=n.getImageData(0,0,t.width,t.height),s=i.data;for(let r=0;r<s.length;r++)s[r]=It(s[r]/255)*255;return n.putImageData(i,0,0),e}else if(t.data){let e=t.data.slice(0);for(let n=0;n<e.length;n++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[n]=Math.floor(It(e[n]/255)*255):e[n]=It(e[n]);return{data:e,width:t.width,height:t.height}}else return Q("ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),t}},Gr=0,fn=class{constructor(t=null){this.isSource=!0,Object.defineProperty(this,"id",{value:Gr++}),this.uuid=Cn(),this.data=t,this.dataReady=!0,this.version=0}getSize(t){let e=this.data;return typeof HTMLVideoElement<"u"&&e instanceof HTMLVideoElement?t.set(e.videoWidth,e.videoHeight,0):typeof VideoFrame<"u"&&e instanceof VideoFrame?t.set(e.displayWidth,e.displayHeight,0):e!==null?t.set(e.width,e.height,e.depth||0):t.set(0,0,0),t}set needsUpdate(t){t===!0&&this.version++}toJSON(t){let e=t===void 0||typeof t=="string";if(!e&&t.images[this.uuid]!==void 0)return t.images[this.uuid];let n={uuid:this.uuid,url:""},i=this.data;if(i!==null){let s;if(Array.isArray(i)){s=[];for(let r=0,o=i.length;r<o;r++)i[r].isDataTexture?s.push(Kn(i[r].image)):s.push(Kn(i[r]))}else s=Kn(i);n.url=s}return e||(t.images[this.uuid]=n),n}};function Kn(c){return typeof HTMLImageElement<"u"&&c instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&c instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&c instanceof ImageBitmap?hn.getDataURL(c):c.data?{data:Array.from(c.data),width:c.width,height:c.height,type:c.data.constructor.name}:(Q("Texture: Unable to serialize Texture."),{})}var Hr=0,Qn=new M,fe=class c extends Yt{constructor(t=c.DEFAULT_IMAGE,e=c.DEFAULT_MAPPING,n=Ie,i=Ie,s=zs,r=Vs,o=Hs,a=ks,l=c.DEFAULT_ANISOTROPY,u=qi){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:Hr++}),this.uuid=Cn(),this.name="",this.source=new fn(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=n,this.wrapT=i,this.magFilter=s,this.minFilter=r,this.anisotropy=l,this.format=o,this.internalFormat=null,this.type=a,this.offset=new H(0,0),this.repeat=new H(1,1),this.center=new H(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new N,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=u,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(Qn).x}get height(){return this.source.getSize(Qn).y}get depth(){return this.source.getSize(Qn).z}get image(){return this.source.data}set image(t){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.normalized=t.normalized,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(let e in t){let n=t[e];if(n===void 0){Q(\`Texture.setValues(): parameter '\${e}' has value of undefined.\`);continue}let i=this[e];if(i===void 0){Q(\`Texture.setValues(): property '\${e}' does not exist.\`);continue}i&&n&&i.isVector2&&n.isVector2||i&&n&&i.isVector3&&n.isVector3||i&&n&&i.isMatrix3&&n.isMatrix3?i.copy(n):this[e]=n}}toJSON(t){let e=t===void 0||typeof t=="string";if(!e&&t.textures[this.uuid]!==void 0)return t.textures[this.uuid];let n={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==Wi)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case Mi:t.x=t.x-Math.floor(t.x);break;case Ie:t.x=t.x<0?0:1;break;case Si:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case Mi:t.y=t.y-Math.floor(t.y);break;case Ie:t.y=t.y<0?0:1;break;case Si:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}};fe.DEFAULT_IMAGE=null;fe.DEFAULT_MAPPING=Wi;fe.DEFAULT_ANISOTROPY=1;var de=class c{static{c.prototype.isVector4=!0}constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){let e=this.x,n=this.y,i=this.z,s=this.w,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i+r[12]*s,this.y=r[1]*e+r[5]*n+r[9]*i+r[13]*s,this.z=r[2]*e+r[6]*n+r[10]*i+r[14]*s,this.w=r[3]*e+r[7]*n+r[11]*i+r[15]*s,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);let e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,s,a=t.elements,l=a[0],u=a[4],f=a[8],h=a[1],d=a[5],p=a[9],m=a[2],_=a[6],g=a[10];if(Math.abs(u-h)<.01&&Math.abs(f-m)<.01&&Math.abs(p-_)<.01){if(Math.abs(u+h)<.1&&Math.abs(f+m)<.1&&Math.abs(p+_)<.1&&Math.abs(l+d+g-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;let y=(l+1)/2,S=(d+1)/2,v=(g+1)/2,b=(u+h)/4,T=(f+m)/4,A=(p+_)/4;return y>S&&y>v?y<.01?(n=0,i=.707106781,s=.707106781):(n=Math.sqrt(y),i=b/n,s=T/n):S>v?S<.01?(n=.707106781,i=0,s=.707106781):(i=Math.sqrt(S),n=b/i,s=A/i):v<.01?(n=.707106781,i=.707106781,s=0):(s=Math.sqrt(v),n=T/s,i=A/s),this.set(n,i,s,e),this}let x=Math.sqrt((_-p)*(_-p)+(f-m)*(f-m)+(h-u)*(h-u));return Math.abs(x)<.001&&(x=1),this.x=(_-p)/x,this.y=(f-m)/x,this.z=(h-u)/x,this.w=Math.acos((l+d+g-1)/2),this}setFromMatrixPosition(t){let e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=U(this.x,t.x,e.x),this.y=U(this.y,t.y,e.y),this.z=U(this.z,t.z,e.z),this.w=U(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=U(this.x,t,e),this.y=U(this.y,t,e),this.z=U(this.z,t,e),this.w=U(this.w,t,e),this}clampLength(t,e){let n=this.length();return this.divideScalar(n||1).multiplyScalar(U(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}};var W=class c{static{c.prototype.isMatrix4=!0}constructor(t,e,n,i,s,r,o,a,l,u,f,h,d,p,m,_){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,n,i,s,r,o,a,l,u,f,h,d,p,m,_)}set(t,e,n,i,s,r,o,a,l,u,f,h,d,p,m,_){let g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=s,g[5]=r,g[9]=o,g[13]=a,g[2]=l,g[6]=u,g[10]=f,g[14]=h,g[3]=d,g[7]=p,g[11]=m,g[15]=_,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new c().fromArray(this.elements)}copy(t){let e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){let e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){let e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return this.determinant()===0?(t.set(1,0,0),e.set(0,1,0),n.set(0,0,1),this):(t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this)}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){if(t.determinant()===0)return this.identity();let e=this.elements,n=t.elements,i=1/te.setFromMatrixColumn(t,0).length(),s=1/te.setFromMatrixColumn(t,1).length(),r=1/te.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*s,e[5]=n[5]*s,e[6]=n[6]*s,e[7]=0,e[8]=n[8]*r,e[9]=n[9]*r,e[10]=n[10]*r,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){let e=this.elements,n=t.x,i=t.y,s=t.z,r=Math.cos(n),o=Math.sin(n),a=Math.cos(i),l=Math.sin(i),u=Math.cos(s),f=Math.sin(s);if(t.order==="XYZ"){let h=r*u,d=r*f,p=o*u,m=o*f;e[0]=a*u,e[4]=-a*f,e[8]=l,e[1]=d+p*l,e[5]=h-m*l,e[9]=-o*a,e[2]=m-h*l,e[6]=p+d*l,e[10]=r*a}else if(t.order==="YXZ"){let h=a*u,d=a*f,p=l*u,m=l*f;e[0]=h+m*o,e[4]=p*o-d,e[8]=r*l,e[1]=r*f,e[5]=r*u,e[9]=-o,e[2]=d*o-p,e[6]=m+h*o,e[10]=r*a}else if(t.order==="ZXY"){let h=a*u,d=a*f,p=l*u,m=l*f;e[0]=h-m*o,e[4]=-r*f,e[8]=p+d*o,e[1]=d+p*o,e[5]=r*u,e[9]=m-h*o,e[2]=-r*l,e[6]=o,e[10]=r*a}else if(t.order==="ZYX"){let h=r*u,d=r*f,p=o*u,m=o*f;e[0]=a*u,e[4]=p*l-d,e[8]=h*l+m,e[1]=a*f,e[5]=m*l+h,e[9]=d*l-p,e[2]=-l,e[6]=o*a,e[10]=r*a}else if(t.order==="YZX"){let h=r*a,d=r*l,p=o*a,m=o*l;e[0]=a*u,e[4]=m-h*f,e[8]=p*f+d,e[1]=f,e[5]=r*u,e[9]=-o*u,e[2]=-l*u,e[6]=d*f+p,e[10]=h-m*f}else if(t.order==="XZY"){let h=r*a,d=r*l,p=o*a,m=o*l;e[0]=a*u,e[4]=-f,e[8]=l*u,e[1]=h*f+m,e[5]=r*u,e[9]=d*f-p,e[2]=p*f-d,e[6]=o*u,e[10]=m*f+h}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Wr,t,Xr)}lookAt(t,e,n){let i=this.elements;return ft.subVectors(t,e),ft.lengthSq()===0&&(ft.z=1),ft.normalize(),Nt.crossVectors(n,ft),Nt.lengthSq()===0&&(Math.abs(n.z)===1?ft.x+=1e-4:ft.z+=1e-4,ft.normalize(),Nt.crossVectors(n,ft)),Nt.normalize(),Ke.crossVectors(ft,Nt),i[0]=Nt.x,i[4]=Ke.x,i[8]=ft.x,i[1]=Nt.y,i[5]=Ke.y,i[9]=ft.y,i[2]=Nt.z,i[6]=Ke.z,i[10]=ft.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){let n=t.elements,i=e.elements,s=this.elements,r=n[0],o=n[4],a=n[8],l=n[12],u=n[1],f=n[5],h=n[9],d=n[13],p=n[2],m=n[6],_=n[10],g=n[14],x=n[3],y=n[7],S=n[11],v=n[15],b=i[0],T=i[4],A=i[8],E=i[12],C=i[1],R=i[5],w=i[9],P=i[13],L=i[2],D=i[6],O=i[10],it=i[14],Tt=i[3],At=i[7],Je=i[11],$e=i[15];return s[0]=r*b+o*C+a*L+l*Tt,s[4]=r*T+o*R+a*D+l*At,s[8]=r*A+o*w+a*O+l*Je,s[12]=r*E+o*P+a*it+l*$e,s[1]=u*b+f*C+h*L+d*Tt,s[5]=u*T+f*R+h*D+d*At,s[9]=u*A+f*w+h*O+d*Je,s[13]=u*E+f*P+h*it+d*$e,s[2]=p*b+m*C+_*L+g*Tt,s[6]=p*T+m*R+_*D+g*At,s[10]=p*A+m*w+_*O+g*Je,s[14]=p*E+m*P+_*it+g*$e,s[3]=x*b+y*C+S*L+v*Tt,s[7]=x*T+y*R+S*D+v*At,s[11]=x*A+y*w+S*O+v*Je,s[15]=x*E+y*P+S*it+v*$e,this}multiplyScalar(t){let e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){let t=this.elements,e=t[0],n=t[4],i=t[8],s=t[12],r=t[1],o=t[5],a=t[9],l=t[13],u=t[2],f=t[6],h=t[10],d=t[14],p=t[3],m=t[7],_=t[11],g=t[15],x=a*d-l*h,y=o*d-l*f,S=o*h-a*f,v=r*d-l*u,b=r*h-a*u,T=r*f-o*u;return e*(m*x-_*y+g*S)-n*(p*x-_*v+g*b)+i*(p*y-m*v+g*T)-s*(p*S-m*b+_*T)}transpose(){let t=this.elements,e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){let i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){let t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],u=t[8],f=t[9],h=t[10],d=t[11],p=t[12],m=t[13],_=t[14],g=t[15],x=e*o-n*r,y=e*a-i*r,S=e*l-s*r,v=n*a-i*o,b=n*l-s*o,T=i*l-s*a,A=u*m-f*p,E=u*_-h*p,C=u*g-d*p,R=f*_-h*m,w=f*g-d*m,P=h*g-d*_,L=x*P-y*w+S*R+v*C-b*E+T*A;if(L===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let D=1/L;return t[0]=(o*P-a*w+l*R)*D,t[1]=(i*w-n*P-s*R)*D,t[2]=(m*T-_*b+g*v)*D,t[3]=(h*b-f*T-d*v)*D,t[4]=(a*C-r*P-l*E)*D,t[5]=(e*P-i*C+s*E)*D,t[6]=(_*S-p*T-g*y)*D,t[7]=(u*T-h*S+d*y)*D,t[8]=(r*w-o*C+l*A)*D,t[9]=(n*C-e*w-s*A)*D,t[10]=(p*b-m*S+g*x)*D,t[11]=(f*S-u*b-d*x)*D,t[12]=(o*E-r*R-a*A)*D,t[13]=(e*R-n*E+i*A)*D,t[14]=(m*y-p*v-_*x)*D,t[15]=(u*v-f*y+h*x)*D,this}scale(t){let e=this.elements,n=t.x,i=t.y,s=t.z;return e[0]*=n,e[4]*=i,e[8]*=s,e[1]*=n,e[5]*=i,e[9]*=s,e[2]*=n,e[6]*=i,e[10]*=s,e[3]*=n,e[7]*=i,e[11]*=s,this}getMaxScaleOnAxis(){let t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){let e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){let e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){let e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){let n=Math.cos(e),i=Math.sin(e),s=1-n,r=t.x,o=t.y,a=t.z,l=s*r,u=s*o;return this.set(l*r+n,l*o-i*a,l*a+i*o,0,l*o+i*a,u*o+n,u*a-i*r,0,l*a-i*o,u*a+i*r,s*a*a+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,s,r){return this.set(1,n,s,0,t,1,r,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){let i=this.elements,s=e._x,r=e._y,o=e._z,a=e._w,l=s+s,u=r+r,f=o+o,h=s*l,d=s*u,p=s*f,m=r*u,_=r*f,g=o*f,x=a*l,y=a*u,S=a*f,v=n.x,b=n.y,T=n.z;return i[0]=(1-(m+g))*v,i[1]=(d+S)*v,i[2]=(p-y)*v,i[3]=0,i[4]=(d-S)*b,i[5]=(1-(h+g))*b,i[6]=(_+x)*b,i[7]=0,i[8]=(p+y)*T,i[9]=(_-x)*T,i[10]=(1-(h+m))*T,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){let i=this.elements;t.x=i[12],t.y=i[13],t.z=i[14];let s=this.determinant();if(s===0)return n.set(1,1,1),e.identity(),this;let r=te.set(i[0],i[1],i[2]).length(),o=te.set(i[4],i[5],i[6]).length(),a=te.set(i[8],i[9],i[10]).length();s<0&&(r=-r),yt.copy(this);let l=1/r,u=1/o,f=1/a;return yt.elements[0]*=l,yt.elements[1]*=l,yt.elements[2]*=l,yt.elements[4]*=u,yt.elements[5]*=u,yt.elements[6]*=u,yt.elements[8]*=f,yt.elements[9]*=f,yt.elements[10]*=f,e.setFromRotationMatrix(yt),n.x=r,n.y=o,n.z=a,this}makePerspective(t,e,n,i,s,r,o=Le,a=!1){let l=this.elements,u=2*s/(e-t),f=2*s/(n-i),h=(e+t)/(e-t),d=(n+i)/(n-i),p,m;if(a)p=s/(r-s),m=r*s/(r-s);else if(o===Le)p=-(r+s)/(r-s),m=-2*r*s/(r-s);else if(o===Pi)p=-r/(r-s),m=-r*s/(r-s);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return l[0]=u,l[4]=0,l[8]=h,l[12]=0,l[1]=0,l[5]=f,l[9]=d,l[13]=0,l[2]=0,l[6]=0,l[10]=p,l[14]=m,l[3]=0,l[7]=0,l[11]=-1,l[15]=0,this}makeOrthographic(t,e,n,i,s,r,o=Le,a=!1){let l=this.elements,u=2/(e-t),f=2/(n-i),h=-(e+t)/(e-t),d=-(n+i)/(n-i),p,m;if(a)p=1/(r-s),m=r/(r-s);else if(o===Le)p=-2/(r-s),m=-(r+s)/(r-s);else if(o===Pi)p=-1/(r-s),m=-s/(r-s);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return l[0]=u,l[4]=0,l[8]=0,l[12]=h,l[1]=0,l[5]=f,l[9]=0,l[13]=d,l[2]=0,l[6]=0,l[10]=p,l[14]=m,l[3]=0,l[7]=0,l[11]=0,l[15]=1,this}equals(t){let e=this.elements,n=t.elements;for(let i=0;i<16;i++)if(e[i]!==n[i])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){let n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}},te=new M,yt=new W,Wr=new M(0,0,0),Xr=new M(1,1,1),Nt=new M,Ke=new M,ft=new M,Ss=new W,bs=new Lt,Ne=class c{constructor(t=0,e=0,n=0,i=c.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){let i=t.elements,s=i[0],r=i[4],o=i[8],a=i[1],l=i[5],u=i[9],f=i[2],h=i[6],d=i[10];switch(e){case"XYZ":this._y=Math.asin(U(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-u,d),this._z=Math.atan2(-r,s)):(this._x=Math.atan2(h,l),this._z=0);break;case"YXZ":this._x=Math.asin(-U(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(o,d),this._z=Math.atan2(a,l)):(this._y=Math.atan2(-f,s),this._z=0);break;case"ZXY":this._x=Math.asin(U(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(-f,d),this._z=Math.atan2(-r,l)):(this._y=0,this._z=Math.atan2(a,s));break;case"ZYX":this._y=Math.asin(-U(f,-1,1)),Math.abs(f)<.9999999?(this._x=Math.atan2(h,d),this._z=Math.atan2(a,s)):(this._x=0,this._z=Math.atan2(-r,l));break;case"YZX":this._z=Math.asin(U(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-u,l),this._y=Math.atan2(-f,s)):(this._x=0,this._y=Math.atan2(o,d));break;case"XZY":this._z=Math.asin(-U(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(h,l),this._y=Math.atan2(o,s)):(this._x=Math.atan2(-u,d),this._y=0);break;default:Q("Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,n===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return Ss.makeRotationFromQuaternion(t),this.setFromRotationMatrix(Ss,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return bs.setFromEuler(this),this.setFromQuaternion(bs,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};Ne.DEFAULT_ORDER="XYZ";var dn=class{constructor(){this.mask=1}set(t){this.mask=(1<<t|0)>>>0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return(this.mask&t.mask)!==0}isEnabled(t){return(this.mask&(1<<t|0))!==0}},qr=0,Ts=new M,ee=new Lt,wt=new W,Qe=new M,we=new M,Yr=new M,Zr=new Lt,As=new M(1,0,0),Es=new M(0,1,0),ws=new M(0,0,1),Cs={type:"added"},Jr={type:"removed"},ne={type:"childadded",child:null},jn={type:"childremoved",child:null},Zt=class c extends Yt{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:qr++}),this.uuid=Cn(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=c.DEFAULT_UP.clone();let t=new M,e=new Ne,n=new Lt,i=new M(1,1,1);function s(){n.setFromEuler(e,!1)}function r(){e.setFromQuaternion(n,void 0,!1)}e._onChange(s),n._onChange(r),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new W},normalMatrix:{value:new N}}),this.matrix=new W,this.matrixWorld=new W,this.matrixAutoUpdate=c.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=c.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new dn,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return ee.setFromAxisAngle(t,e),this.quaternion.multiply(ee),this}rotateOnWorldAxis(t,e){return ee.setFromAxisAngle(t,e),this.quaternion.premultiply(ee),this}rotateX(t){return this.rotateOnAxis(As,t)}rotateY(t){return this.rotateOnAxis(Es,t)}rotateZ(t){return this.rotateOnAxis(ws,t)}translateOnAxis(t,e){return Ts.copy(t).applyQuaternion(this.quaternion),this.position.add(Ts.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(As,t)}translateY(t){return this.translateOnAxis(Es,t)}translateZ(t){return this.translateOnAxis(ws,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(wt.copy(this.matrixWorld).invert())}lookAt(t,e,n){t.isVector3?Qe.copy(t):Qe.set(t,e,n);let i=this.parent;this.updateWorldMatrix(!0,!1),we.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?wt.lookAt(we,Qe,this.up):wt.lookAt(Qe,we,this.up),this.quaternion.setFromRotationMatrix(wt),i&&(wt.extractRotation(i.matrixWorld),ee.setFromRotationMatrix(wt),this.quaternion.premultiply(ee.invert()))}add(t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(G("Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(t.removeFromParent(),t.parent=this,this.children.push(t),t.dispatchEvent(Cs),ne.child=t,this.dispatchEvent(ne),ne.child=null):G("Object3D.add: object not an instance of THREE.Object3D.",t),this)}remove(t){if(arguments.length>1){for(let n=0;n<arguments.length;n++)this.remove(arguments[n]);return this}let e=this.children.indexOf(t);return e!==-1&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(Jr),jn.child=t,this.dispatchEvent(jn),jn.child=null),this}removeFromParent(){let t=this.parent;return t!==null&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),wt.copy(this.matrixWorld).invert(),t.parent!==null&&(t.parent.updateWorldMatrix(!0,!1),wt.multiply(t.parent.matrixWorld)),t.applyMatrix4(wt),t.removeFromParent(),t.parent=this,this.children.push(t),t.updateWorldMatrix(!1,!0),t.dispatchEvent(Cs),ne.child=t,this.dispatchEvent(ne),ne.child=null,this}getObjectById(t){return this.getObjectByProperty("id",t)}getObjectByName(t){return this.getObjectByProperty("name",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let n=0,i=this.children.length;n<i;n++){let r=this.children[n].getObjectByProperty(t,e);if(r!==void 0)return r}}getObjectsByProperty(t,e,n=[]){this[t]===e&&n.push(this);let i=this.children;for(let s=0,r=i.length;s<r;s++)i[s].getObjectsByProperty(t,e,n);return n}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(we,t,Yr),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(we,Zr,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);let e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);let e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverse(t)}traverseVisible(t){if(this.visible===!1)return;t(this);let e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverseVisible(t)}traverseAncestors(t){let e=this.parent;e!==null&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);let t=this.pivot;if(t!==null){let e=t.x,n=t.y,i=t.z,s=this.matrix.elements;s[12]+=e-s[0]*e-s[4]*n-s[8]*i,s[13]+=n-s[1]*e-s[5]*n-s[9]*i,s[14]+=i-s[2]*e-s[6]*n-s[10]*i}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,t=!0);let e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].updateMatrixWorld(t)}updateWorldMatrix(t,e){let n=this.parent;if(t===!0&&n!==null&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),e===!0){let i=this.children;for(let s=0,r=i.length;s<r;s++)i[s].updateWorldMatrix(!1,!0)}}toJSON(t){let e=t===void 0||typeof t=="string",n={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.7,type:"Object",generator:"Object3D.toJSON"});let i={};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.castShadow===!0&&(i.castShadow=!0),this.receiveShadow===!0&&(i.receiveShadow=!0),this.visible===!1&&(i.visible=!1),this.frustumCulled===!1&&(i.frustumCulled=!1),this.renderOrder!==0&&(i.renderOrder=this.renderOrder),this.static!==!1&&(i.static=this.static),Object.keys(this.userData).length>0&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),i.up=this.up.toArray(),this.pivot!==null&&(i.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(i.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(i.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(i.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(i.type="InstancedMesh",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(i.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(i.type="BatchedMesh",i.perObjectFrustumCulled=this.perObjectFrustumCulled,i.sortObjects=this.sortObjects,i.drawRanges=this._drawRanges,i.reservedRanges=this._reservedRanges,i.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),i.instanceInfo=this._instanceInfo.map(o=>({...o})),i.availableInstanceIds=this._availableInstanceIds.slice(),i.availableGeometryIds=this._availableGeometryIds.slice(),i.nextIndexStart=this._nextIndexStart,i.nextVertexStart=this._nextVertexStart,i.geometryCount=this._geometryCount,i.maxInstanceCount=this._maxInstanceCount,i.maxVertexCount=this._maxVertexCount,i.maxIndexCount=this._maxIndexCount,i.geometryInitialized=this._geometryInitialized,i.matricesTexture=this._matricesTexture.toJSON(t),i.indirectTexture=this._indirectTexture.toJSON(t),this._colorsTexture!==null&&(i.colorsTexture=this._colorsTexture.toJSON(t)),this.boundingSphere!==null&&(i.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(i.boundingBox=this.boundingBox.toJSON()));function s(o,a){return o[a.uuid]===void 0&&(o[a.uuid]=a.toJSON(t)),a.uuid}if(this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(i.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=s(t.geometries,this.geometry);let o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){let a=o.shapes;if(Array.isArray(a))for(let l=0,u=a.length;l<u;l++){let f=a[l];s(t.shapes,f)}else s(t.shapes,a)}}if(this.isSkinnedMesh&&(i.bindMode=this.bindMode,i.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(s(t.skeletons,this.skeleton),i.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){let o=[];for(let a=0,l=this.material.length;a<l;a++)o.push(s(t.materials,this.material[a]));i.material=o}else i.material=s(t.materials,this.material);if(this.children.length>0){i.children=[];for(let o=0;o<this.children.length;o++)i.children.push(this.children[o].toJSON(t).object)}if(this.animations.length>0){i.animations=[];for(let o=0;o<this.animations.length;o++){let a=this.animations[o];i.animations.push(s(t.animations,a))}}if(e){let o=r(t.geometries),a=r(t.materials),l=r(t.textures),u=r(t.images),f=r(t.shapes),h=r(t.skeletons),d=r(t.animations),p=r(t.nodes);o.length>0&&(n.geometries=o),a.length>0&&(n.materials=a),l.length>0&&(n.textures=l),u.length>0&&(n.images=u),f.length>0&&(n.shapes=f),h.length>0&&(n.skeletons=h),d.length>0&&(n.animations=d),p.length>0&&(n.nodes=p)}return n.object=i,n;function r(o){let a=[];for(let l in o){let u=o[l];delete u.metadata,a.push(u)}return a}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.pivot=t.pivot!==null?t.pivot.clone():null,this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.static=t.static,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let n=0;n<t.children.length;n++){let i=t.children[n];this.add(i.clone())}return this}};Zt.DEFAULT_UP=new M(0,1,0);Zt.DEFAULT_MATRIX_AUTO_UPDATE=!0;Zt.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var Xs={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Ut={h:0,s:0,l:0},je={h:0,s:0,l:0};function ti(c,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?c+(t-c)*6*e:e<1/2?t:e<2/3?c+(t-c)*6*(2/3-e):c}var j=class{constructor(t,e,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,n)}set(t,e,n){if(e===void 0&&n===void 0){let i=t;i&&i.isColor?this.copy(i):typeof i=="number"?this.setHex(i):typeof i=="string"&&this.setStyle(i)}else this.setRGB(t,e,n);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=_t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,gt.colorSpaceToWorking(this,e),this}setRGB(t,e,n,i=gt.workingColorSpace){return this.r=t,this.g=e,this.b=n,gt.colorSpaceToWorking(this,i),this}setHSL(t,e,n,i=gt.workingColorSpace){if(t=Vr(t,1),e=U(e,0,1),n=U(n,0,1),e===0)this.r=this.g=this.b=n;else{let s=n<=.5?n*(1+e):n+e-n*e,r=2*n-s;this.r=ti(r,s,t+1/3),this.g=ti(r,s,t),this.b=ti(r,s,t-1/3)}return gt.colorSpaceToWorking(this,i),this}setStyle(t,e=_t){function n(s){s!==void 0&&parseFloat(s)<1&&Q("Color: Alpha component of "+t+" will be ignored.")}let i;if(i=/^(\\w+)\\(([^\\)]*)\\)/.exec(t)){let s,r=i[1],o=i[2];switch(r){case"rgb":case"rgba":if(s=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(s[4]),this.setRGB(Math.min(255,parseInt(s[1],10))/255,Math.min(255,parseInt(s[2],10))/255,Math.min(255,parseInt(s[3],10))/255,e);if(s=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(s[4]),this.setRGB(Math.min(100,parseInt(s[1],10))/100,Math.min(100,parseInt(s[2],10))/100,Math.min(100,parseInt(s[3],10))/100,e);break;case"hsl":case"hsla":if(s=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(s[4]),this.setHSL(parseFloat(s[1])/360,parseFloat(s[2])/100,parseFloat(s[3])/100,e);break;default:Q("Color: Unknown color model "+t)}}else if(i=/^\\#([A-Fa-f\\d]+)$/.exec(t)){let s=i[1],r=s.length;if(r===3)return this.setRGB(parseInt(s.charAt(0),16)/15,parseInt(s.charAt(1),16)/15,parseInt(s.charAt(2),16)/15,e);if(r===6)return this.setHex(parseInt(s,16),e);Q("Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=_t){let n=Xs[t.toLowerCase()];return n!==void 0?this.setHex(n,e):Q("Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=It(t.r),this.g=It(t.g),this.b=It(t.b),this}copyLinearToSRGB(t){return this.r=he(t.r),this.g=he(t.g),this.b=he(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=_t){return gt.workingToColorSpace(rt.copy(this),t),Math.round(U(rt.r*255,0,255))*65536+Math.round(U(rt.g*255,0,255))*256+Math.round(U(rt.b*255,0,255))}getHexString(t=_t){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=gt.workingColorSpace){gt.workingToColorSpace(rt.copy(this),e);let n=rt.r,i=rt.g,s=rt.b,r=Math.max(n,i,s),o=Math.min(n,i,s),a,l,u=(o+r)/2;if(o===r)a=0,l=0;else{let f=r-o;switch(l=u<=.5?f/(r+o):f/(2-r-o),r){case n:a=(i-s)/f+(i<s?6:0);break;case i:a=(s-n)/f+2;break;case s:a=(n-i)/f+4;break}a/=6}return t.h=a,t.s=l,t.l=u,t}getRGB(t,e=gt.workingColorSpace){return gt.workingToColorSpace(rt.copy(this),e),t.r=rt.r,t.g=rt.g,t.b=rt.b,t}getStyle(t=_t){gt.workingToColorSpace(rt.copy(this),t);let e=rt.r,n=rt.g,i=rt.b;return t!==_t?\`color(\${t} \${e.toFixed(3)} \${n.toFixed(3)} \${i.toFixed(3)})\`:\`rgb(\${Math.round(e*255)},\${Math.round(n*255)},\${Math.round(i*255)})\`}offsetHSL(t,e,n){return this.getHSL(Ut),this.setHSL(Ut.h+t,Ut.s+e,Ut.l+n)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,n){return this.r=t.r+(e.r-t.r)*n,this.g=t.g+(e.g-t.g)*n,this.b=t.b+(e.b-t.b)*n,this}lerpHSL(t,e){this.getHSL(Ut),t.getHSL(je);let n=Zn(Ut.h,je.h,e),i=Zn(Ut.s,je.s,e),s=Zn(Ut.l,je.l,e);return this.setHSL(n,i,s),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){let e=this.r,n=this.g,i=this.b,s=t.elements;return this.r=s[0]*e+s[3]*n+s[6]*i,this.g=s[1]*e+s[4]*n+s[7]*i,this.b=s[2]*e+s[5]*n+s[8]*i,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}},rt=new j;j.NAMES=Xs;var vt=new M,Ct=new M,ei=new M,Rt=new M,ie=new M,se=new M,Rs=new M,ni=new M,ii=new M,si=new M,ri=new de,oi=new de,ai=new de,St=class c{constructor(t=new M,e=new M,n=new M){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){i.subVectors(n,e),vt.subVectors(t,e),i.cross(vt);let s=i.lengthSq();return s>0?i.multiplyScalar(1/Math.sqrt(s)):i.set(0,0,0)}static getBarycoord(t,e,n,i,s){vt.subVectors(i,e),Ct.subVectors(n,e),ei.subVectors(t,e);let r=vt.dot(vt),o=vt.dot(Ct),a=vt.dot(ei),l=Ct.dot(Ct),u=Ct.dot(ei),f=r*l-o*o;if(f===0)return s.set(0,0,0),null;let h=1/f,d=(l*a-o*u)*h,p=(r*u-o*a)*h;return s.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,Rt)===null?!1:Rt.x>=0&&Rt.y>=0&&Rt.x+Rt.y<=1}static getInterpolation(t,e,n,i,s,r,o,a){return this.getBarycoord(t,e,n,i,Rt)===null?(a.x=0,a.y=0,"z"in a&&(a.z=0),"w"in a&&(a.w=0),null):(a.setScalar(0),a.addScaledVector(s,Rt.x),a.addScaledVector(r,Rt.y),a.addScaledVector(o,Rt.z),a)}static getInterpolatedAttribute(t,e,n,i,s,r){return ri.setScalar(0),oi.setScalar(0),ai.setScalar(0),ri.fromBufferAttribute(t,e),oi.fromBufferAttribute(t,n),ai.fromBufferAttribute(t,i),r.setScalar(0),r.addScaledVector(ri,s.x),r.addScaledVector(oi,s.y),r.addScaledVector(ai,s.z),r}static isFrontFacing(t,e,n,i){return vt.subVectors(n,e),Ct.subVectors(t,e),vt.cross(Ct).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}setFromAttributeAndIndices(t,e,n,i){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,i),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return vt.subVectors(this.c,this.b),Ct.subVectors(this.a,this.b),vt.cross(Ct).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return c.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return c.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,n,i,s){return c.getInterpolation(t,this.a,this.b,this.c,e,n,i,s)}containsPoint(t){return c.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return c.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){let n=this.a,i=this.b,s=this.c,r,o;ie.subVectors(i,n),se.subVectors(s,n),ni.subVectors(t,n);let a=ie.dot(ni),l=se.dot(ni);if(a<=0&&l<=0)return e.copy(n);ii.subVectors(t,i);let u=ie.dot(ii),f=se.dot(ii);if(u>=0&&f<=u)return e.copy(i);let h=a*f-u*l;if(h<=0&&a>=0&&u<=0)return r=a/(a-u),e.copy(n).addScaledVector(ie,r);si.subVectors(t,s);let d=ie.dot(si),p=se.dot(si);if(p>=0&&d<=p)return e.copy(s);let m=d*l-a*p;if(m<=0&&l>=0&&p<=0)return o=l/(l-p),e.copy(n).addScaledVector(se,o);let _=u*p-d*f;if(_<=0&&f-u>=0&&d-p>=0)return Rs.subVectors(s,i),o=(f-u)/(f-u+(d-p)),e.copy(i).addScaledVector(Rs,o);let g=1/(_+m+h);return r=m*g,o=h*g,e.copy(n).addScaledVector(ie,r).addScaledVector(se,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}},X=class{constructor(t=new M(1/0,1/0,1/0),e=new M(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e+=3)this.expandByPoint(Mt.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,n=t.count;e<n;e++)this.expandByPoint(Mt.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){let n=Mt.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return new this.constructor().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);let n=t.geometry;if(n!==void 0){let s=n.getAttribute("position");if(e===!0&&s!==void 0&&t.isInstancedMesh!==!0)for(let r=0,o=s.count;r<o;r++)t.isMesh===!0?t.getVertexPosition(r,Mt):Mt.fromBufferAttribute(s,r),Mt.applyMatrix4(t.matrixWorld),this.expandByPoint(Mt);else t.boundingBox!==void 0?(t.boundingBox===null&&t.computeBoundingBox(),tn.copy(t.boundingBox)):(n.boundingBox===null&&n.computeBoundingBox(),tn.copy(n.boundingBox)),tn.applyMatrix4(t.matrixWorld),this.union(tn)}let i=t.children;for(let s=0,r=i.length;s<r;s++)this.expandByObject(i[s],e);return this}containsPoint(t){return t.x>=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,Mt),Mt.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Ce),en.subVectors(this.max,Ce),re.subVectors(t.a,Ce),oe.subVectors(t.b,Ce),ae.subVectors(t.c,Ce),Ft.subVectors(oe,re),Bt.subVectors(ae,oe),Xt.subVectors(re,ae);let e=[0,-Ft.z,Ft.y,0,-Bt.z,Bt.y,0,-Xt.z,Xt.y,Ft.z,0,-Ft.x,Bt.z,0,-Bt.x,Xt.z,0,-Xt.x,-Ft.y,Ft.x,0,-Bt.y,Bt.x,0,-Xt.y,Xt.x,0];return!ci(e,re,oe,ae,en)||(e=[1,0,0,0,1,0,0,0,1],!ci(e,re,oe,ae,en))?!1:(nn.crossVectors(Ft,Bt),e=[nn.x,nn.y,nn.z],ci(e,re,oe,ae,en))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Mt).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(Mt).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(Pt[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Pt[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Pt[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Pt[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Pt[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Pt[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Pt[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Pt[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Pt),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}},Pt=[new M,new M,new M,new M,new M,new M,new M,new M],Mt=new M,tn=new X,re=new M,oe=new M,ae=new M,Ft=new M,Bt=new M,Xt=new M,Ce=new M,en=new M,nn=new M,qt=new M;function ci(c,t,e,n,i){for(let s=0,r=c.length-3;s<=r;s+=3){qt.fromArray(c,s);let o=i.x*Math.abs(qt.x)+i.y*Math.abs(qt.y)+i.z*Math.abs(qt.z),a=t.dot(qt),l=e.dot(qt),u=n.dot(qt);if(Math.max(-Math.max(a,l,u),Math.min(a,l,u))>o)return!1}return!0}var J=new M,sn=new H,$r=0,ot=class extends Yt{constructor(t,e,n=!1){if(super(),Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:$r++}),this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=n,this.usage=Ri,this.updateRanges=[],this.gpuType=Gs,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,s=this.itemSize;i<s;i++)this.array[t+i]=e.array[n+i];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(this.itemSize===2)for(let e=0,n=this.count;e<n;e++)sn.fromBufferAttribute(this,e),sn.applyMatrix3(t),this.setXY(e,sn.x,sn.y);else if(this.itemSize===3)for(let e=0,n=this.count;e<n;e++)J.fromBufferAttribute(this,e),J.applyMatrix3(t),this.setXYZ(e,J.x,J.y,J.z);return this}applyMatrix4(t){for(let e=0,n=this.count;e<n;e++)J.fromBufferAttribute(this,e),J.applyMatrix4(t),this.setXYZ(e,J.x,J.y,J.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)J.fromBufferAttribute(this,e),J.applyNormalMatrix(t),this.setXYZ(e,J.x,J.y,J.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)J.fromBufferAttribute(this,e),J.transformDirection(t),this.setXYZ(e,J.x,J.y,J.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let n=this.array[t*this.itemSize+e];return this.normalized&&(n=Ee(n,this.array)),n}setComponent(t,e,n){return this.normalized&&(n=ut(n,this.array)),this.array[t*this.itemSize+e]=n,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=Ee(e,this.array)),e}setX(t,e){return this.normalized&&(e=ut(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=Ee(e,this.array)),e}setY(t,e){return this.normalized&&(e=ut(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=Ee(e,this.array)),e}setZ(t,e){return this.normalized&&(e=ut(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=Ee(e,this.array)),e}setW(t,e){return this.normalized&&(e=ut(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,n){return t*=this.itemSize,this.normalized&&(e=ut(e,this.array),n=ut(n,this.array)),this.array[t+0]=e,this.array[t+1]=n,this}setXYZ(t,e,n,i){return t*=this.itemSize,this.normalized&&(e=ut(e,this.array),n=ut(n,this.array),i=ut(i,this.array)),this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this}setXYZW(t,e,n,i,s){return t*=this.itemSize,this.normalized&&(e=ut(e,this.array),n=ut(n,this.array),i=ut(i,this.array),s=ut(s,this.array)),this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this.array[t+3]=s,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){let t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(t.name=this.name),this.usage!==Ri&&(t.usage=this.usage),t}dispose(){this.dispatchEvent({type:"dispose"})}};var pn=class extends ot{constructor(t,e,n){super(new Uint16Array(t),e,n)}};var mn=class extends ot{constructor(t,e,n){super(new Uint32Array(t),e,n)}};var gn=class extends ot{constructor(t,e,n){super(new Float32Array(t),e,n)}},Kr=new X,Re=new M,li=new M,pe=class{constructor(t=new M,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){let n=this.center;e!==void 0?n.copy(e):Kr.setFromPoints(t).getCenter(n);let i=0;for(let s=0,r=t.length;s<r;s++)i=Math.max(i,n.distanceToSquared(t[s]));return this.radius=Math.sqrt(i),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){let e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){let n=this.center.distanceToSquared(t);return e.copy(t),n>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Re.subVectors(t,this.center);let e=Re.lengthSq();if(e>this.radius*this.radius){let n=Math.sqrt(e),i=(n-this.radius)*.5;this.center.addScaledVector(Re,i/n),this.radius+=i}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(li.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Re.copy(t.center).add(li)),this.expandByPoint(Re.copy(t.center).sub(li))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}},Qr=0,mt=new W,ui=new Zt,ce=new M,dt=new X,Pe=new X,K=new M,Ue=class c extends Yt{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Qr++}),this.uuid=Cn(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Fr(t)?mn:pn)(t,1):this.index=t,this}setIndirect(t,e=0){return this.indirect=t,this.indirectOffset=e,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return this.attributes[t]!==void 0}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){let e=this.attributes.position;e!==void 0&&(e.applyMatrix4(t),e.needsUpdate=!0);let n=this.attributes.normal;if(n!==void 0){let s=new N().getNormalMatrix(t);n.applyNormalMatrix(s),n.needsUpdate=!0}let i=this.attributes.tangent;return i!==void 0&&(i.transformDirection(t),i.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(t){return mt.makeRotationFromQuaternion(t),this.applyMatrix4(mt),this}rotateX(t){return mt.makeRotationX(t),this.applyMatrix4(mt),this}rotateY(t){return mt.makeRotationY(t),this.applyMatrix4(mt),this}rotateZ(t){return mt.makeRotationZ(t),this.applyMatrix4(mt),this}translate(t,e,n){return mt.makeTranslation(t,e,n),this.applyMatrix4(mt),this}scale(t,e,n){return mt.makeScale(t,e,n),this.applyMatrix4(mt),this}lookAt(t){return ui.lookAt(t),ui.updateMatrix(),this.applyMatrix4(ui.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(ce).negate(),this.translate(ce.x,ce.y,ce.z),this}setFromPoints(t){let e=this.getAttribute("position");if(e===void 0){let n=[];for(let i=0,s=t.length;i<s;i++){let r=t[i];n.push(r.x,r.y,r.z||0)}this.setAttribute("position",new gn(n,3))}else{let n=Math.min(t.length,e.count);for(let i=0;i<n;i++){let s=t[i];e.setXYZ(i,s.x,s.y,s.z||0)}t.length>e.count&&Q("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new X);let t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){G("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new M(-1/0,-1/0,-1/0),new M(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let n=0,i=e.length;n<i;n++){let s=e[n];dt.setFromBufferAttribute(s),this.morphTargetsRelative?(K.addVectors(this.boundingBox.min,dt.min),this.boundingBox.expandByPoint(K),K.addVectors(this.boundingBox.max,dt.max),this.boundingBox.expandByPoint(K)):(this.boundingBox.expandByPoint(dt.min),this.boundingBox.expandByPoint(dt.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&G('BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new pe);let t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){G("BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new M,1/0);return}if(t){let n=this.boundingSphere.center;if(dt.setFromBufferAttribute(t),e)for(let s=0,r=e.length;s<r;s++){let o=e[s];Pe.setFromBufferAttribute(o),this.morphTargetsRelative?(K.addVectors(dt.min,Pe.min),dt.expandByPoint(K),K.addVectors(dt.max,Pe.max),dt.expandByPoint(K)):(dt.expandByPoint(Pe.min),dt.expandByPoint(Pe.max))}dt.getCenter(n);let i=0;for(let s=0,r=t.count;s<r;s++)K.fromBufferAttribute(t,s),i=Math.max(i,n.distanceToSquared(K));if(e)for(let s=0,r=e.length;s<r;s++){let o=e[s],a=this.morphTargetsRelative;for(let l=0,u=o.count;l<u;l++)K.fromBufferAttribute(o,l),a&&(ce.fromBufferAttribute(t,l),K.add(ce)),i=Math.max(i,n.distanceToSquared(K))}this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&G('BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){let t=this.index,e=this.attributes;if(t===null||e.position===void 0||e.normal===void 0||e.uv===void 0){G("BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}let n=e.position,i=e.normal,s=e.uv;this.hasAttribute("tangent")===!1&&this.setAttribute("tangent",new ot(new Float32Array(4*n.count),4));let r=this.getAttribute("tangent"),o=[],a=[];for(let A=0;A<n.count;A++)o[A]=new M,a[A]=new M;let l=new M,u=new M,f=new M,h=new H,d=new H,p=new H,m=new M,_=new M;function g(A,E,C){l.fromBufferAttribute(n,A),u.fromBufferAttribute(n,E),f.fromBufferAttribute(n,C),h.fromBufferAttribute(s,A),d.fromBufferAttribute(s,E),p.fromBufferAttribute(s,C),u.sub(l),f.sub(l),d.sub(h),p.sub(h);let R=1/(d.x*p.y-p.x*d.y);isFinite(R)&&(m.copy(u).multiplyScalar(p.y).addScaledVector(f,-d.y).multiplyScalar(R),_.copy(f).multiplyScalar(d.x).addScaledVector(u,-p.x).multiplyScalar(R),o[A].add(m),o[E].add(m),o[C].add(m),a[A].add(_),a[E].add(_),a[C].add(_))}let x=this.groups;x.length===0&&(x=[{start:0,count:t.count}]);for(let A=0,E=x.length;A<E;++A){let C=x[A],R=C.start,w=C.count;for(let P=R,L=R+w;P<L;P+=3)g(t.getX(P+0),t.getX(P+1),t.getX(P+2))}let y=new M,S=new M,v=new M,b=new M;function T(A){v.fromBufferAttribute(i,A),b.copy(v);let E=o[A];y.copy(E),y.sub(v.multiplyScalar(v.dot(E))).normalize(),S.crossVectors(b,E);let R=S.dot(a[A])<0?-1:1;r.setXYZW(A,y.x,y.y,y.z,R)}for(let A=0,E=x.length;A<E;++A){let C=x[A],R=C.start,w=C.count;for(let P=R,L=R+w;P<L;P+=3)T(t.getX(P+0)),T(t.getX(P+1)),T(t.getX(P+2))}}computeVertexNormals(){let t=this.index,e=this.getAttribute("position");if(e!==void 0){let n=this.getAttribute("normal");if(n===void 0)n=new ot(new Float32Array(e.count*3),3),this.setAttribute("normal",n);else for(let h=0,d=n.count;h<d;h++)n.setXYZ(h,0,0,0);let i=new M,s=new M,r=new M,o=new M,a=new M,l=new M,u=new M,f=new M;if(t)for(let h=0,d=t.count;h<d;h+=3){let p=t.getX(h+0),m=t.getX(h+1),_=t.getX(h+2);i.fromBufferAttribute(e,p),s.fromBufferAttribute(e,m),r.fromBufferAttribute(e,_),u.subVectors(r,s),f.subVectors(i,s),u.cross(f),o.fromBufferAttribute(n,p),a.fromBufferAttribute(n,m),l.fromBufferAttribute(n,_),o.add(u),a.add(u),l.add(u),n.setXYZ(p,o.x,o.y,o.z),n.setXYZ(m,a.x,a.y,a.z),n.setXYZ(_,l.x,l.y,l.z)}else for(let h=0,d=e.count;h<d;h+=3)i.fromBufferAttribute(e,h+0),s.fromBufferAttribute(e,h+1),r.fromBufferAttribute(e,h+2),u.subVectors(r,s),f.subVectors(i,s),u.cross(f),n.setXYZ(h+0,u.x,u.y,u.z),n.setXYZ(h+1,u.x,u.y,u.z),n.setXYZ(h+2,u.x,u.y,u.z);this.normalizeNormals(),n.needsUpdate=!0}}normalizeNormals(){let t=this.attributes.normal;for(let e=0,n=t.count;e<n;e++)K.fromBufferAttribute(t,e),K.normalize(),t.setXYZ(e,K.x,K.y,K.z)}toNonIndexed(){function t(o,a){let l=o.array,u=o.itemSize,f=o.normalized,h=new l.constructor(a.length*u),d=0,p=0;for(let m=0,_=a.length;m<_;m++){o.isInterleavedBufferAttribute?d=a[m]*o.data.stride+o.offset:d=a[m]*u;for(let g=0;g<u;g++)h[p++]=l[d++]}return new ot(h,u,f)}if(this.index===null)return Q("BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;let e=new c,n=this.index.array,i=this.attributes;for(let o in i){let a=i[o],l=t(a,n);e.setAttribute(o,l)}let s=this.morphAttributes;for(let o in s){let a=[],l=s[o];for(let u=0,f=l.length;u<f;u++){let h=l[u],d=t(h,n);a.push(d)}e.morphAttributes[o]=a}e.morphTargetsRelative=this.morphTargetsRelative;let r=this.groups;for(let o=0,a=r.length;o<a;o++){let l=r[o];e.addGroup(l.start,l.count,l.materialIndex)}return e}toJSON(){let t={metadata:{version:4.7,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==""&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),this.parameters!==void 0){let a=this.parameters;for(let l in a)a[l]!==void 0&&(t[l]=a[l]);return t}t.data={attributes:{}};let e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});let n=this.attributes;for(let a in n){let l=n[a];t.data.attributes[a]=l.toJSON(t.data)}let i={},s=!1;for(let a in this.morphAttributes){let l=this.morphAttributes[a],u=[];for(let f=0,h=l.length;f<h;f++){let d=l[f];u.push(d.toJSON(t.data))}u.length>0&&(i[a]=u,s=!0)}s&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);let r=this.groups;r.length>0&&(t.data.groups=JSON.parse(JSON.stringify(r)));let o=this.boundingSphere;return o!==null&&(t.data.boundingSphere=o.toJSON()),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let e={};this.name=t.name;let n=t.index;n!==null&&this.setIndex(n.clone());let i=t.attributes;for(let l in i){let u=i[l];this.setAttribute(l,u.clone(e))}let s=t.morphAttributes;for(let l in s){let u=[],f=s[l];for(let h=0,d=f.length;h<d;h++)u.push(f[h].clone(e));this.morphAttributes[l]=u}this.morphTargetsRelative=t.morphTargetsRelative;let r=t.groups;for(let l=0,u=r.length;l<u;l++){let f=r[l];this.addGroup(f.start,f.count,f.materialIndex)}let o=t.boundingBox;o!==null&&(this.boundingBox=o.clone());let a=t.boundingSphere;return a!==null&&(this.boundingSphere=a.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}};var hi=new M,jr=new M,to=new N,Jt=class{constructor(t=new M(1,0,0),e=0){this.isPlane=!0,this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){let i=hi.subVectors(n,e).cross(jr.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){let t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectLine(t,e,n=!0){let i=t.delta(hi),s=this.normal.dot(i);if(s===0)return this.distanceToPoint(t.start)===0?e.copy(t.start):null;let r=-(t.start.dot(this.normal)+this.constant)/s;return n===!0&&(r<0||r>1)?null:e.copy(t.start).addScaledVector(i,r)}intersectsLine(t){let e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){let n=e||to.getNormalMatrix(t),i=this.coplanarPoint(hi).applyMatrix4(t),s=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(s),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new this.constructor().copy(this)}};function qs(c){let t={};for(let e in c){t[e]={};for(let n in c[e]){let i=c[e][n];if(Ps(i))i.isRenderTargetTexture?(Q("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),t[e][n]=null):t[e][n]=i.clone();else if(Array.isArray(i))if(Ps(i[0])){let s=[];for(let r=0,o=i.length;r<o;r++)s[r]=i[r].clone();t[e][n]=s}else t[e][n]=i.slice();else t[e][n]=i}}return t}function ct(c){let t={};for(let e=0;e<c.length;e++){let n=qs(c[e]);for(let i in n)t[i]=n[i]}return t}function Ps(c){return c&&(c.isColor||c.isMatrix3||c.isMatrix4||c.isVector2||c.isVector3||c.isVector4||c.isTexture||c.isQuaternion)}function rn(c,t){return!c||c.constructor===t?c:typeof t.BYTES_PER_ELEMENT=="number"?new t(c):Array.prototype.slice.call(c)}var Ot=class{constructor(t,e,n,i){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=i!==void 0?i:new e.constructor(n),this.sampleValues=e,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(t){let e=this.parameterPositions,n=this._cachedIndex,i=e[n],s=e[n-1];n:{t:{let r;e:{i:if(!(t<i)){for(let o=n+2;;){if(i===void 0){if(t<s)break i;return n=e.length,this._cachedIndex=n,this.copySampleValue_(n-1)}if(n===o)break;if(s=i,i=e[++n],t<i)break t}r=e.length;break e}if(!(t>=s)){let o=e[1];t<o&&(n=2,s=o);for(let a=n-2;;){if(s===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(n===a)break;if(i=s,s=e[--n-1],t>=s)break t}r=n,n=0;break e}break n}for(;n<r;){let o=n+r>>>1;t<e[o]?r=o:n=o+1}if(i=e[n],s=e[n-1],s===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(i===void 0)return n=e.length,this._cachedIndex=n,this.copySampleValue_(n-1)}this._cachedIndex=n,this.intervalChanged_(n,s,i)}return this.interpolate_(n,s,t,i)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(t){let e=this.resultBuffer,n=this.sampleValues,i=this.valueSize,s=t*i;for(let r=0;r!==i;++r)e[r]=n[s+r];return e}interpolate_(){throw new Error("call to abstract method")}intervalChanged_(){}},_n=class extends Ot{constructor(t,e,n,i){super(t,e,n,i),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:Ti,endingEnd:Ti}}intervalChanged_(t,e,n){let i=this.parameterPositions,s=t-2,r=t+1,o=i[s],a=i[r];if(o===void 0)switch(this.getSettings_().endingStart){case Ai:s=t,o=2*e-n;break;case Ei:s=i.length-2,o=e+i[s]-i[s+1];break;default:s=t,o=n}if(a===void 0)switch(this.getSettings_().endingEnd){case Ai:r=t,a=2*n-e;break;case Ei:r=1,a=n+i[1]-i[0];break;default:r=t-1,a=e}let l=(n-e)*.5,u=this.valueSize;this._weightPrev=l/(e-o),this._weightNext=l/(a-n),this._offsetPrev=s*u,this._offsetNext=r*u}interpolate_(t,e,n,i){let s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,u=this._offsetPrev,f=this._offsetNext,h=this._weightPrev,d=this._weightNext,p=(n-e)/(i-e),m=p*p,_=m*p,g=-h*_+2*h*m-h*p,x=(1+h)*_+(-1.5-2*h)*m+(-.5+h)*p+1,y=(-1-d)*_+(1.5+d)*m+.5*p,S=d*_-d*m;for(let v=0;v!==o;++v)s[v]=g*r[u+v]+x*r[l+v]+y*r[a+v]+S*r[f+v];return s}},xn=class extends Ot{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){let s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,u=(n-e)/(i-e),f=1-u;for(let h=0;h!==o;++h)s[h]=r[l+h]*f+r[a+h]*u;return s}},yn=class extends Ot{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t){return this.copySampleValue_(t-1)}},vn=class extends Ot{interpolate_(t,e,n,i){let s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,u=this.settings||this.DefaultSettings_,f=u.inTangents,h=u.outTangents;if(!f||!h){let m=(n-e)/(i-e),_=1-m;for(let g=0;g!==o;++g)s[g]=r[l+g]*_+r[a+g]*m;return s}let d=o*2,p=t-1;for(let m=0;m!==o;++m){let _=r[l+m],g=r[a+m],x=p*d+m*2,y=h[x],S=h[x+1],v=t*d+m*2,b=f[v],T=f[v+1],A=(n-e)/(i-e),E,C,R,w,P;for(let L=0;L<8;L++){E=A*A,C=E*A,R=1-A,w=R*R,P=w*R;let O=P*e+3*w*A*y+3*R*E*b+C*i-n;if(Math.abs(O)<1e-10)break;let it=3*w*(y-e)+6*R*A*(b-y)+3*E*(i-b);if(Math.abs(it)<1e-10)break;A=A-O/it,A=Math.max(0,Math.min(1,A))}s[m]=P*_+3*w*A*S+3*R*E*T+C*g}return s}},pt=class{constructor(t,e,n,i){if(t===void 0)throw new Error("THREE.KeyframeTrack: track name is undefined");if(e===void 0||e.length===0)throw new Error("THREE.KeyframeTrack: no keyframes in track named "+t);this.name=t,this.times=rn(e,this.TimeBufferType),this.values=rn(n,this.ValueBufferType),this.setInterpolation(i||this.DefaultInterpolation)}static toJSON(t){let e=t.constructor,n;if(e.toJSON!==this.toJSON)n=e.toJSON(t);else{n={name:t.name,times:rn(t.times,Array),values:rn(t.values,Array)};let i=t.getInterpolation();i!==t.DefaultInterpolation&&(n.interpolation=i)}return n.type=t.ValueTypeName,n}InterpolantFactoryMethodDiscrete(t){return new yn(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodLinear(t){return new xn(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodSmooth(t){return new _n(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodBezier(t){let e=new vn(this.times,this.values,this.getValueSize(),t);return this.settings&&(e.settings=this.settings),e}setInterpolation(t){let e;switch(t){case De:e=this.InterpolantFactoryMethodDiscrete;break;case ln:e=this.InterpolantFactoryMethodLinear;break;case an:e=this.InterpolantFactoryMethodSmooth;break;case bi:e=this.InterpolantFactoryMethodBezier;break}if(e===void 0){let n="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(this.createInterpolant===void 0)if(t!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw new Error(n);return Q("KeyframeTrack:",n),this}return this.createInterpolant=e,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return De;case this.InterpolantFactoryMethodLinear:return ln;case this.InterpolantFactoryMethodSmooth:return an;case this.InterpolantFactoryMethodBezier:return bi}}getValueSize(){return this.values.length/this.times.length}shift(t){if(t!==0){let e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]+=t}return this}scale(t){if(t!==1){let e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]*=t}return this}trim(t,e){let n=this.times,i=n.length,s=0,r=i-1;for(;s!==i&&n[s]<t;)++s;for(;r!==-1&&n[r]>e;)--r;if(++r,s!==0||r!==i){s>=r&&(r=Math.max(r,1),s=r-1);let o=this.getValueSize();this.times=n.slice(s,r),this.values=this.values.slice(s*o,r*o)}return this}validate(){let t=!0,e=this.getValueSize();e-Math.floor(e)!==0&&(G("KeyframeTrack: Invalid value size in track.",this),t=!1);let n=this.times,i=this.values,s=n.length;s===0&&(G("KeyframeTrack: Track is empty.",this),t=!1);let r=null;for(let o=0;o!==s;o++){let a=n[o];if(typeof a=="number"&&isNaN(a)){G("KeyframeTrack: Time is not a valid number.",this,o,a),t=!1;break}if(r!==null&&r>a){G("KeyframeTrack: Out of order keys.",this,o,a,r),t=!1;break}r=a}if(i!==void 0&&Br(i))for(let o=0,a=i.length;o!==a;++o){let l=i[o];if(isNaN(l)){G("KeyframeTrack: Value is not a valid number.",this,o,l),t=!1;break}}return t}optimize(){let t=this.times.slice(),e=this.values.slice(),n=this.getValueSize(),i=this.getInterpolation()===an,s=t.length-1,r=1;for(let o=1;o<s;++o){let a=!1,l=t[o],u=t[o+1];if(l!==u&&(o!==1||l!==t[0]))if(i)a=!0;else{let f=o*n,h=f-n,d=f+n;for(let p=0;p!==n;++p){let m=e[f+p];if(m!==e[h+p]||m!==e[d+p]){a=!0;break}}}if(a){if(o!==r){t[r]=t[o];let f=o*n,h=r*n;for(let d=0;d!==n;++d)e[h+d]=e[f+d]}++r}}if(s>0){t[r]=t[s];for(let o=s*n,a=r*n,l=0;l!==n;++l)e[a+l]=e[o+l];++r}return r!==t.length?(this.times=t.slice(0,r),this.values=e.slice(0,r*n)):(this.times=t,this.values=e),this}clone(){let t=this.times.slice(),e=this.values.slice(),n=this.constructor,i=new n(this.name,t,e);return i.createInterpolant=this.createInterpolant,i}};pt.prototype.ValueTypeName="";pt.prototype.TimeBufferType=Float32Array;pt.prototype.ValueBufferType=Float32Array;pt.prototype.DefaultInterpolation=ln;var zt=class extends pt{constructor(t,e,n){super(t,e,n)}};zt.prototype.ValueTypeName="bool";zt.prototype.ValueBufferType=Array;zt.prototype.DefaultInterpolation=De;zt.prototype.InterpolantFactoryMethodLinear=void 0;zt.prototype.InterpolantFactoryMethodSmooth=void 0;var Mn=class extends pt{constructor(t,e,n,i){super(t,e,n,i)}};Mn.prototype.ValueTypeName="color";var Sn=class extends pt{constructor(t,e,n,i){super(t,e,n,i)}};Sn.prototype.ValueTypeName="number";var bn=class extends Ot{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){let s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=(n-e)/(i-e),l=t*o;for(let u=l+o;l!==u;l+=4)Lt.slerpFlat(s,0,r,l-o,r,l,a);return s}},Fe=class extends pt{constructor(t,e,n,i){super(t,e,n,i)}InterpolantFactoryMethodLinear(t){return new bn(this.times,this.values,this.getValueSize(),t)}};Fe.prototype.ValueTypeName="quaternion";Fe.prototype.InterpolantFactoryMethodSmooth=void 0;var Vt=class extends pt{constructor(t,e,n){super(t,e,n)}};Vt.prototype.ValueTypeName="string";Vt.prototype.ValueBufferType=Array;Vt.prototype.DefaultInterpolation=De;Vt.prototype.InterpolantFactoryMethodLinear=void 0;Vt.prototype.InterpolantFactoryMethodSmooth=void 0;var Tn=class extends pt{constructor(t,e,n,i){super(t,e,n,i)}};Tn.prototype.ValueTypeName="vector";var An=class{constructor(t,e,n){let i=this,s=!1,r=0,o=0,a,l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this._abortController=null,this.itemStart=function(u){o++,s===!1&&i.onStart!==void 0&&i.onStart(u,r,o),s=!0},this.itemEnd=function(u){r++,i.onProgress!==void 0&&i.onProgress(u,r,o),r===o&&(s=!1,i.onLoad!==void 0&&i.onLoad())},this.itemError=function(u){i.onError!==void 0&&i.onError(u)},this.resolveURL=function(u){return a?a(u):u},this.setURLModifier=function(u){return a=u,this},this.addHandler=function(u,f){return l.push(u,f),this},this.removeHandler=function(u){let f=l.indexOf(u);return f!==-1&&l.splice(f,2),this},this.getHandler=function(u){for(let f=0,h=l.length;f<h;f+=2){let d=l[f],p=l[f+1];if(d.global&&(d.lastIndex=0),d.test(u))return p}return null},this.abort=function(){return this.abortController.abort(),this._abortController=null,this}}get abortController(){return this._abortController||(this._abortController=new AbortController),this._abortController}},Ys=new An,En=class{constructor(t){this.manager=t!==void 0?t:Ys,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}load(){}loadAsync(t,e){let n=this;return new Promise(function(i,s){n.load(t,i,e,s)})}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}abort(){return this}};En.DEFAULT_MATERIAL_NAME="__DEFAULT";var Yi="\\\\[\\\\]\\\\.:\\\\/",eo=new RegExp("["+Yi+"]","g"),Zi="[^"+Yi+"]",no="[^"+Yi.replace("\\\\.","")+"]",io=/((?:WC+[\\/:])*)/.source.replace("WC",Zi),so=/(WCOD+)?/.source.replace("WCOD",no),ro=/(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace("WC",Zi),oo=/\\.(WC+)(?:\\[(.+)\\])?/.source.replace("WC",Zi),ao=new RegExp("^"+io+so+ro+oo+"$"),co=["material","materials","bones","map"],Di=class{constructor(t,e,n){let i=n||k.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}getValue(t,e){this.bind();let n=this._targetGroup.nCachedObjects_,i=this._bindings[n];i!==void 0&&i.getValue(t,e)}setValue(t,e){let n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,s=n.length;i!==s;++i)n[i].setValue(t,e)}bind(){let t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()}unbind(){let t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}},k=class c{constructor(t,e,n){this.path=e,this.parsedPath=n||c.parseTrackName(e),this.node=c.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new c.Composite(t,e,n):new c(t,e,n)}static sanitizeNodeName(t){return t.replace(/\\s/g,"_").replace(eo,"")}static parseTrackName(t){let e=ao.exec(t);if(e===null)throw new Error("PropertyBinding: Cannot parse trackName: "+t);let n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(i!==void 0&&i!==-1){let s=n.nodeName.substring(i+1);co.indexOf(s)!==-1&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=s)}if(n.propertyName===null||n.propertyName.length===0)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n}static findNode(t,e){if(e===void 0||e===""||e==="."||e===-1||e===t.name||e===t.uuid)return t;if(t.skeleton){let n=t.skeleton.getBoneByName(e);if(n!==void 0)return n}if(t.children){let n=function(s){for(let r=0;r<s.length;r++){let o=s[r];if(o.name===e||o.uuid===e)return o;let a=n(o.children);if(a)return a}return null},i=n(t.children);if(i)return i}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(t,e){t[e]=this.targetObject[this.propertyName]}_getValue_array(t,e){let n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)t[e++]=n[i]}_getValue_arrayElement(t,e){t[e]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(t,e){this.resolvedProperty.toArray(t,e)}_setValue_direct(t,e){this.targetObject[this.propertyName]=t[e]}_setValue_direct_setNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(t,e){let n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++]}_setValue_array_setNeedsUpdate(t,e){let n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(t,e){let n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(t,e){this.resolvedProperty[this.propertyIndex]=t[e]}_setValue_arrayElement_setNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(t,e){this.resolvedProperty.fromArray(t,e)}_setValue_fromArray_setNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(t,e){this.bind(),this.getValue(t,e)}_setValue_unbound(t,e){this.bind(),this.setValue(t,e)}bind(){let t=this.node,e=this.parsedPath,n=e.objectName,i=e.propertyName,s=e.propertyIndex;if(t||(t=c.findNode(this.rootNode,e.nodeName),this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t){Q("PropertyBinding: No target node found for track: "+this.path+".");return}if(n){let l=e.objectIndex;switch(n){case"materials":if(!t.material){G("PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!t.material.materials){G("PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);return}t=t.material.materials;break;case"bones":if(!t.skeleton){G("PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);return}t=t.skeleton.bones;for(let u=0;u<t.length;u++)if(t[u].name===l){l=u;break}break;case"map":if("map"in t){t=t.map;break}if(!t.material){G("PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!t.material.map){G("PropertyBinding: Can not bind to material.map as node.material does not have a map.",this);return}t=t.material.map;break;default:if(t[n]===void 0){G("PropertyBinding: Can not bind to objectName of node undefined.",this);return}t=t[n]}if(l!==void 0){if(t[l]===void 0){G("PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,t);return}t=t[l]}}let r=t[i];if(r===void 0){let l=e.nodeName;G("PropertyBinding: Trying to update property for track: "+l+"."+i+" but it wasn't found.",t);return}let o=this.Versioning.None;this.targetObject=t,t.isMaterial===!0?o=this.Versioning.NeedsUpdate:t.isObject3D===!0&&(o=this.Versioning.MatrixWorldNeedsUpdate);let a=this.BindingType.Direct;if(s!==void 0){if(i==="morphTargetInfluences"){if(!t.geometry){G("PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);return}if(!t.geometry.morphAttributes){G("PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);return}t.morphTargetDictionary[s]!==void 0&&(s=t.morphTargetDictionary[s])}a=this.BindingType.ArrayElement,this.resolvedProperty=r,this.propertyIndex=s}else r.fromArray!==void 0&&r.toArray!==void 0?(a=this.BindingType.HasFromToArray,this.resolvedProperty=r):Array.isArray(r)?(a=this.BindingType.EntireArray,this.resolvedProperty=r):this.propertyName=i;this.getValue=this.GetterByBindingType[a],this.setValue=this.SetterByBindingTypeAndVersioning[a][o]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};k.Composite=Di;k.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3};k.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2};k.prototype.GetterByBindingType=[k.prototype._getValue_direct,k.prototype._getValue_array,k.prototype._getValue_arrayElement,k.prototype._getValue_toArray];k.prototype.SetterByBindingTypeAndVersioning=[[k.prototype._setValue_direct,k.prototype._setValue_direct_setNeedsUpdate,k.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[k.prototype._setValue_array,k.prototype._setValue_array_setNeedsUpdate,k.prototype._setValue_array_setMatrixWorldNeedsUpdate],[k.prototype._setValue_arrayElement,k.prototype._setValue_arrayElement_setNeedsUpdate,k.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[k.prototype._setValue_fromArray,k.prototype._setValue_fromArray_setNeedsUpdate,k.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];var vl=new Float32Array(1);var Ni=class c{static{c.prototype.isMatrix2=!0}constructor(t,e,n,i){this.elements=[1,0,0,1],t!==void 0&&this.set(t,e,n,i)}identity(){return this.set(1,0,0,1),this}fromArray(t,e=0){for(let n=0;n<4;n++)this.elements[n]=t[n+e];return this}set(t,e,n,i){let s=this.elements;return s[0]=t,s[2]=e,s[1]=n,s[3]=i,this}};var Is=new M,on=new M,le=new M,ue=new M,fi=new M,lo=new M,uo=new M,at=class{constructor(t=new M,e=new M){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){Is.subVectors(t,this.start),on.subVectors(this.end,this.start);let n=on.dot(on);if(n===0)return 0;let s=on.dot(Is)/n;return e&&(s=U(s,0,1)),s}closestPointToPoint(t,e,n){let i=this.closestPointToPointParameter(t,e);return this.delta(n).multiplyScalar(i).add(this.start)}distanceSqToLine3(t,e=lo,n=uo){let i=10000000000000001e-32,s,r,o=this.start,a=t.start,l=this.end,u=t.end;le.subVectors(l,o),ue.subVectors(u,a),fi.subVectors(o,a);let f=le.dot(le),h=ue.dot(ue),d=ue.dot(fi);if(f<=i&&h<=i)return e.copy(o),n.copy(a),e.sub(n),e.dot(e);if(f<=i)s=0,r=d/h,r=U(r,0,1);else{let p=le.dot(fi);if(h<=i)r=0,s=U(-p/f,0,1);else{let m=le.dot(ue),_=f*h-m*m;_!==0?s=U((m*d-p*h)/_,0,1):s=0,r=(m*s+d)/h,r<0?(r=0,s=U(-p/f,0,1)):r>1&&(r=1,s=U((m-p)/f,0,1))}}return e.copy(o).addScaledVector(le,s),n.copy(a).addScaledVector(ue,r),e.distanceToSquared(n)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return new this.constructor().copy(this)}};typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"184"}}));typeof window<"u"&&(window.__THREE__?Q("WARNING: Multiple instances of Three.js being imported."):window.__THREE__="184");var ho=\`#ifdef USE_ALPHAHASH
|
|
2
2
|
if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;
|
|
3
3
|
#endif\`,fo=\`#ifdef USE_ALPHAHASH
|
|
4
4
|
const float ALPHA_HASH_SCALE = 0.05;
|
|
@@ -3661,15 +3661,18 @@ void main() {
|
|
|
3661
3661
|
#include <colorspace_fragment>
|
|
3662
3662
|
#include <fog_fragment>
|
|
3663
3663
|
}\`,F={alphahash_fragment:ho,alphahash_pars_fragment:fo,alphamap_fragment:po,alphamap_pars_fragment:mo,alphatest_fragment:go,alphatest_pars_fragment:_o,aomap_fragment:xo,aomap_pars_fragment:yo,batching_pars_vertex:vo,batching_vertex:Mo,begin_vertex:So,beginnormal_vertex:bo,bsdfs:To,iridescence_fragment:Ao,bumpmap_pars_fragment:Eo,clipping_planes_fragment:wo,clipping_planes_pars_fragment:Co,clipping_planes_pars_vertex:Ro,clipping_planes_vertex:Po,color_fragment:Io,color_pars_fragment:Lo,color_pars_vertex:Do,color_vertex:No,common:Uo,cube_uv_reflection_fragment:Fo,defaultnormal_vertex:Bo,displacementmap_pars_vertex:Oo,displacementmap_vertex:zo,emissivemap_fragment:Vo,emissivemap_pars_fragment:ko,colorspace_fragment:Go,colorspace_pars_fragment:Ho,envmap_fragment:Wo,envmap_common_pars_fragment:Xo,envmap_pars_fragment:qo,envmap_pars_vertex:Yo,envmap_physical_pars_fragment:sa,envmap_vertex:Zo,fog_vertex:Jo,fog_pars_vertex:$o,fog_fragment:Ko,fog_pars_fragment:Qo,gradientmap_pars_fragment:jo,lightmap_pars_fragment:ta,lights_lambert_fragment:ea,lights_lambert_pars_fragment:na,lights_pars_begin:ia,lights_toon_fragment:ra,lights_toon_pars_fragment:oa,lights_phong_fragment:aa,lights_phong_pars_fragment:ca,lights_physical_fragment:la,lights_physical_pars_fragment:ua,lights_fragment_begin:ha,lights_fragment_maps:fa,lights_fragment_end:da,lightprobes_pars_fragment:pa,logdepthbuf_fragment:ma,logdepthbuf_pars_fragment:ga,logdepthbuf_pars_vertex:_a,logdepthbuf_vertex:xa,map_fragment:ya,map_pars_fragment:va,map_particle_fragment:Ma,map_particle_pars_fragment:Sa,metalnessmap_fragment:ba,metalnessmap_pars_fragment:Ta,morphinstance_vertex:Aa,morphcolor_vertex:Ea,morphnormal_vertex:wa,morphtarget_pars_vertex:Ca,morphtarget_vertex:Ra,normal_fragment_begin:Pa,normal_fragment_maps:Ia,normal_pars_fragment:La,normal_pars_vertex:Da,normal_vertex:Na,normalmap_pars_fragment:Ua,clearcoat_normal_fragment_begin:Fa,clearcoat_normal_fragment_maps:Ba,clearcoat_pars_fragment:Oa,iridescence_pars_fragment:za,opaque_fragment:Va,packing:ka,premultiplied_alpha_fragment:Ga,project_vertex:Ha,dithering_fragment:Wa,dithering_pars_fragment:Xa,roughnessmap_fragment:qa,roughnessmap_pars_fragment:Ya,shadowmap_pars_fragment:Za,shadowmap_pars_vertex:Ja,shadowmap_vertex:$a,shadowmask_pars_fragment:Ka,skinbase_vertex:Qa,skinning_pars_vertex:ja,skinning_vertex:tc,skinnormal_vertex:ec,specularmap_fragment:nc,specularmap_pars_fragment:ic,tonemapping_fragment:sc,tonemapping_pars_fragment:rc,transmission_fragment:oc,transmission_pars_fragment:ac,uv_pars_fragment:cc,uv_pars_vertex:lc,uv_vertex:uc,worldpos_vertex:hc,background_vert:fc,background_frag:dc,backgroundCube_vert:pc,backgroundCube_frag:mc,cube_vert:gc,cube_frag:_c,depth_vert:xc,depth_frag:yc,distance_vert:vc,distance_frag:Mc,equirect_vert:Sc,equirect_frag:bc,linedashed_vert:Tc,linedashed_frag:Ac,meshbasic_vert:Ec,meshbasic_frag:wc,meshlambert_vert:Cc,meshlambert_frag:Rc,meshmatcap_vert:Pc,meshmatcap_frag:Ic,meshnormal_vert:Lc,meshnormal_frag:Dc,meshphong_vert:Nc,meshphong_frag:Uc,meshphysical_vert:Fc,meshphysical_frag:Bc,meshtoon_vert:Oc,meshtoon_frag:zc,points_vert:Vc,points_frag:kc,shadow_vert:Gc,shadow_frag:Hc,sprite_vert:Wc,sprite_frag:Xc},I={common:{diffuse:{value:new j(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new N},alphaMap:{value:null},alphaMapTransform:{value:new N},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new N}},envmap:{envMap:{value:null},envMapRotation:{value:new N},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},dfgLUT:{value:null}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new N}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new N}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new N},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new N},normalScale:{value:new H(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new N},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new N}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new N}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new N}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new j(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null},probesSH:{value:null},probesMin:{value:new M},probesMax:{value:new M},probesResolution:{value:new M}},points:{diffuse:{value:new j(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new N},alphaTest:{value:0},uvTransform:{value:new N}},sprite:{diffuse:{value:new j(16777215)},opacity:{value:1},center:{value:new H(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new N},alphaMap:{value:null},alphaMapTransform:{value:new N},alphaTest:{value:0}}},Zs={basic:{uniforms:ct([I.common,I.specularmap,I.envmap,I.aomap,I.lightmap,I.fog]),vertexShader:F.meshbasic_vert,fragmentShader:F.meshbasic_frag},lambert:{uniforms:ct([I.common,I.specularmap,I.envmap,I.aomap,I.lightmap,I.emissivemap,I.bumpmap,I.normalmap,I.displacementmap,I.fog,I.lights,{emissive:{value:new j(0)},envMapIntensity:{value:1}}]),vertexShader:F.meshlambert_vert,fragmentShader:F.meshlambert_frag},phong:{uniforms:ct([I.common,I.specularmap,I.envmap,I.aomap,I.lightmap,I.emissivemap,I.bumpmap,I.normalmap,I.displacementmap,I.fog,I.lights,{emissive:{value:new j(0)},specular:{value:new j(1118481)},shininess:{value:30},envMapIntensity:{value:1}}]),vertexShader:F.meshphong_vert,fragmentShader:F.meshphong_frag},standard:{uniforms:ct([I.common,I.envmap,I.aomap,I.lightmap,I.emissivemap,I.bumpmap,I.normalmap,I.displacementmap,I.roughnessmap,I.metalnessmap,I.fog,I.lights,{emissive:{value:new j(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:F.meshphysical_vert,fragmentShader:F.meshphysical_frag},toon:{uniforms:ct([I.common,I.aomap,I.lightmap,I.emissivemap,I.bumpmap,I.normalmap,I.displacementmap,I.gradientmap,I.fog,I.lights,{emissive:{value:new j(0)}}]),vertexShader:F.meshtoon_vert,fragmentShader:F.meshtoon_frag},matcap:{uniforms:ct([I.common,I.bumpmap,I.normalmap,I.displacementmap,I.fog,{matcap:{value:null}}]),vertexShader:F.meshmatcap_vert,fragmentShader:F.meshmatcap_frag},points:{uniforms:ct([I.points,I.fog]),vertexShader:F.points_vert,fragmentShader:F.points_frag},dashed:{uniforms:ct([I.common,I.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:F.linedashed_vert,fragmentShader:F.linedashed_frag},depth:{uniforms:ct([I.common,I.displacementmap]),vertexShader:F.depth_vert,fragmentShader:F.depth_frag},normal:{uniforms:ct([I.common,I.bumpmap,I.normalmap,I.displacementmap,{opacity:{value:1}}]),vertexShader:F.meshnormal_vert,fragmentShader:F.meshnormal_frag},sprite:{uniforms:ct([I.sprite,I.fog]),vertexShader:F.sprite_vert,fragmentShader:F.sprite_frag},background:{uniforms:{uvTransform:{value:new N},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:F.background_vert,fragmentShader:F.background_frag},backgroundCube:{uniforms:{envMap:{value:null},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new N}},vertexShader:F.backgroundCube_vert,fragmentShader:F.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:F.cube_vert,fragmentShader:F.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:F.equirect_vert,fragmentShader:F.equirect_frag},distance:{uniforms:ct([I.common,I.displacementmap,{referencePosition:{value:new M},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:F.distance_vert,fragmentShader:F.distance_frag},shadow:{uniforms:ct([I.lights,I.fog,{color:{value:new j(0)},opacity:{value:1}}]),vertexShader:F.shadow_vert,fragmentShader:F.shadow_frag}};Zs.physical={uniforms:ct([Zs.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new N},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new N},clearcoatNormalScale:{value:new H(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new N},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new N},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new N},sheen:{value:0},sheenColor:{value:new j(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new N},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new N},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new N},transmissionSamplerSize:{value:new H},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new N},attenuationDistance:{value:0},attenuationColor:{value:new j(0)},specularColor:{value:new j(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new N},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new N},anisotropyVector:{value:new H},anisotropyMap:{value:null},anisotropyMapTransform:{value:new N}}]),vertexShader:F.meshphysical_vert,fragmentShader:F.meshphysical_frag};var qc=new N;qc.set(-1,0,0,0,1,0,0,0,1);var Vm={[Bi]:"LINEAR_TONE_MAPPING",[Oi]:"REINHARD_TONE_MAPPING",[zi]:"CINEON_TONE_MAPPING",[Vi]:"ACES_FILMIC_TONE_MAPPING",[Gi]:"AGX_TONE_MAPPING",[Hi]:"NEUTRAL_TONE_MAPPING",[ki]:"CUSTOM_TONE_MAPPING"};var km=new Float32Array(16),Gm=new Float32Array(9),Hm=new Float32Array(4);var Wm={[Bi]:"Linear",[Oi]:"Reinhard",[zi]:"Cineon",[Vi]:"ACESFilmic",[Gi]:"AgX",[Hi]:"Neutral",[ki]:"Custom"};var Xm={[Ls]:"SHADOWMAP_TYPE_PCF",[Ds]:"SHADOWMAP_TYPE_VSM"};var qm={[Bs]:"ENVMAP_TYPE_CUBE",[Xi]:"ENVMAP_TYPE_CUBE",[Os]:"ENVMAP_TYPE_CUBE_UV"};var Ym={[Xi]:"ENVMAP_MODE_REFRACTION"};var Zm={[Ns]:"ENVMAP_BLENDING_MULTIPLY",[Us]:"ENVMAP_BLENDING_MIX",[Fs]:"ENVMAP_BLENDING_ADD"};var Yc=new N;Yc.set(-1,0,0,0,1,0,0,0,1);var Jm=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]);var $s=Math.pow(2,-24),Rn=Symbol("SKIP_GENERATION");function Zc(c){return c.index?c.index.count:c.attributes.position.count}function Et(c){return Zc(c)/3}function Jc(c,t=ArrayBuffer){return c>65535?new Uint32Array(new t(4*c)):new Uint16Array(new t(2*c))}function Ks(c,t){if(!c.index){let e=c.attributes.position.count,n=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,i=Jc(e,n);c.setIndex(new ot(i,1));for(let s=0;s<e;s++)i[s]=s}}function Ji(c,t){let e=Et(c),n=t||c.drawRange,i=n.start/3,s=(n.start+n.count)/3,r=Math.max(0,i),o=Math.min(e,s)-r;return[{offset:Math.floor(r),count:Math.floor(o)}]}function $i(c,t){if(!c.groups||!c.groups.length)return Ji(c,t);let e=[],n=new Set,i=t||c.drawRange,s=i.start/3,r=(i.start+i.count)/3;for(let a of c.groups){let l=a.start/3,u=(a.start+a.count)/3;n.add(Math.max(s,l)),n.add(Math.min(r,u))}let o=Array.from(n.values()).sort((a,l)=>a-l);for(let a=0;a<o.length-1;a++){let l=o[a],u=o[a+1];e.push({offset:Math.floor(l),count:Math.floor(u-l)})}return e}function Qs(c,t){let e=Et(c),n=$i(c,t).sort((r,o)=>r.offset-o.offset),i=n[n.length-1];i.count=Math.min(e-i.offset,i.count);let s=0;return n.forEach(({count:r})=>s+=r),e!==s}function Pn(c,t,e,n,i){let s=1/0,r=1/0,o=1/0,a=-1/0,l=-1/0,u=-1/0,f=1/0,h=1/0,d=1/0,p=-1/0,m=-1/0,_=-1/0;for(let g=t*6,x=(t+e)*6;g<x;g+=6){let y=c[g+0],S=c[g+1],v=y-S,b=y+S;v<s&&(s=v),b>a&&(a=b),y<f&&(f=y),y>p&&(p=y);let T=c[g+2],A=c[g+3],E=T-A,C=T+A;E<r&&(r=E),C>l&&(l=C),T<h&&(h=T),T>m&&(m=T);let R=c[g+4],w=c[g+5],P=R-w,L=R+w;P<o&&(o=P),L>u&&(u=L),R<d&&(d=R),R>_&&(_=R)}n[0]=s,n[1]=r,n[2]=o,n[3]=a,n[4]=l,n[5]=u,i[0]=f,i[1]=h,i[2]=d,i[3]=p,i[4]=m,i[5]=_}function js(c,t=null,e=null,n=null){let i=c.attributes.position,s=c.index?c.index.array:null,r=Et(c),o=i.normalized,a;t===null?(a=new Float32Array(r*6),e=0,n=r):(a=t,e=e||0,n=n||r);let l=i.array,u=i.offset||0,f=3;i.isInterleavedBufferAttribute&&(f=i.data.stride);let h=["getX","getY","getZ"];for(let d=e;d<e+n;d++){let p=d*3,m=d*6,_=p+0,g=p+1,x=p+2;s&&(_=s[_],g=s[g],x=s[x]),o||(_=_*f+u,g=g*f+u,x=x*f+u);for(let y=0;y<3;y++){let S,v,b;o?(S=i[h[y]](_),v=i[h[y]](g),b=i[h[y]](x)):(S=l[_+y],v=l[g+y],b=l[x+y]);let T=S;v<T&&(T=v),b<T&&(T=b);let A=S;v>A&&(A=v),b>A&&(A=b);let E=(A-T)/2,C=y*2;a[m+C+0]=T+E,a[m+C+1]=E+(Math.abs(T)+E)*$s}}return a}function z(c,t,e){return e.min.x=t[c],e.min.y=t[c+1],e.min.z=t[c+2],e.max.x=t[c+3],e.max.y=t[c+4],e.max.z=t[c+5],e}function Ki(c){let t=-1,e=-1/0;for(let n=0;n<3;n++){let i=c[n+3]-c[n];i>e&&(e=i,t=n)}return t}function Qi(c,t){t.set(c)}function ji(c,t,e){let n,i;for(let s=0;s<3;s++){let r=s+3;n=c[s],i=t[s],e[s]=n<i?n:i,n=c[r],i=t[r],e[r]=n>i?n:i}}function Be(c,t,e){for(let n=0;n<3;n++){let i=t[c+2*n],s=t[c+2*n+1],r=i-s,o=i+s;r<e[n]&&(e[n]=r),o>e[n+3]&&(e[n+3]=o)}}function me(c){let t=c[3]-c[0],e=c[4]-c[1],n=c[5]-c[2];return 2*(t*e+e*n+n*t)}var Dt=32,Kc=(c,t)=>c.candidate-t.candidate,kt=new Array(Dt).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),In=new Float32Array(6);function nr(c,t,e,n,i,s){let r=-1,o=0;if(s===0)r=Ki(t),r!==-1&&(o=(t[r]+t[r+3])/2);else if(s===1)r=Ki(c),r!==-1&&(o=Qc(e,n,i,r));else if(s===2){let a=me(c),l=1.25*i,u=n*6,f=(n+i)*6;for(let h=0;h<3;h++){let d=t[h],_=(t[h+3]-d)/Dt;if(i<Dt/4){let g=[...kt];g.length=i;let x=0;for(let S=u;S<f;S+=6,x++){let v=g[x];v.candidate=e[S+2*h],v.count=0;let{bounds:b,leftCacheBounds:T,rightCacheBounds:A}=v;for(let E=0;E<3;E++)A[E]=1/0,A[E+3]=-1/0,T[E]=1/0,T[E+3]=-1/0,b[E]=1/0,b[E+3]=-1/0;Be(S,e,b)}g.sort(Kc);let y=i;for(let S=0;S<y;S++){let v=g[S];for(;S+1<y&&g[S+1].candidate===v.candidate;)g.splice(S+1,1),y--}for(let S=u;S<f;S+=6){let v=e[S+2*h];for(let b=0;b<y;b++){let T=g[b];v>=T.candidate?Be(S,e,T.rightCacheBounds):(Be(S,e,T.leftCacheBounds),T.count++)}}for(let S=0;S<y;S++){let v=g[S],b=v.count,T=i-v.count,A=v.leftCacheBounds,E=v.rightCacheBounds,C=0;b!==0&&(C=me(A)/a);let R=0;T!==0&&(R=me(E)/a);let w=1+1.25*(C*b+R*T);w<l&&(r=h,l=w,o=v.candidate)}}else{for(let y=0;y<Dt;y++){let S=kt[y];S.count=0,S.candidate=d+_+y*_;let v=S.bounds;for(let b=0;b<3;b++)v[b]=1/0,v[b+3]=-1/0}for(let y=u;y<f;y+=6){let b=~~((e[y+2*h]-d)/_);b>=Dt&&(b=Dt-1);let T=kt[b];T.count++,Be(y,e,T.bounds)}let g=kt[Dt-1];Qi(g.bounds,g.rightCacheBounds);for(let y=Dt-2;y>=0;y--){let S=kt[y],v=kt[y+1];ji(S.bounds,v.rightCacheBounds,S.rightCacheBounds)}let x=0;for(let y=0;y<Dt-1;y++){let S=kt[y],v=S.count,b=S.bounds,A=kt[y+1].rightCacheBounds;v!==0&&(x===0?Qi(b,In):ji(b,In,In)),x+=v;let E=0,C=0;x!==0&&(E=me(In)/a);let R=i-x;R!==0&&(C=me(A)/a);let w=1+1.25*(E*x+C*R);w<l&&(r=h,l=w,o=S.candidate)}}}}else console.warn(\`MeshBVH: Invalid build strategy value \${s} used.\`);return{axis:r,pos:o}}function Qc(c,t,e,n){let i=0;for(let s=t,r=t+e;s<r;s++)i+=c[s*6+n*2];return i/e}var ge=class{constructor(){this.boundingData=new Float32Array(6)}};function ir(c,t,e,n,i,s){let r=n,o=n+i-1,a=s.pos,l=s.axis*2;for(;;){for(;r<=o&&e[r*6+l]<a;)r++;for(;r<=o&&e[o*6+l]>=a;)o--;if(r<o){for(let u=0;u<3;u++){let f=t[r*3+u];t[r*3+u]=t[o*3+u],t[o*3+u]=f}for(let u=0;u<6;u++){let f=e[r*6+u];e[r*6+u]=e[o*6+u],e[o*6+u]=f}r++,o--}else return r}}function sr(c,t,e,n,i,s){let r=n,o=n+i-1,a=s.pos,l=s.axis*2;for(;;){for(;r<=o&&e[r*6+l]<a;)r++;for(;r<=o&&e[o*6+l]>=a;)o--;if(r<o){let u=c[r];c[r]=c[o],c[o]=u;for(let f=0;f<6;f++){let h=e[r*6+f];e[r*6+f]=e[o*6+f],e[o*6+f]=h}r++,o--}else return r}}function q(c,t){return t[c+15]===65535}function Z(c,t){return t[c+6]}function $(c,t){return t[c+14]}function tt(c){return c+8}function et(c,t){return t[c+6]}function Ln(c,t){return t[c+7]}var rr,Oe,Dn,or,jc=Math.pow(2,32);function Nn(c){return"count"in c?1:1+Nn(c.left)+Nn(c.right)}function ar(c,t,e){return rr=new Float32Array(e),Oe=new Uint32Array(e),Dn=new Uint16Array(e),or=new Uint8Array(e),ts(c,t)}function ts(c,t){let e=c/4,n=c/2,i="count"in t,s=t.boundingData;for(let r=0;r<6;r++)rr[e+r]=s[r];if(i)if(t.buffer){let r=t.buffer;or.set(new Uint8Array(r),c);for(let o=c,a=c+r.byteLength;o<a;o+=32){let l=o/2;q(l,Dn)||(Oe[o/4+6]+=e)}return c+r.byteLength}else{let r=t.offset,o=t.count;return Oe[e+6]=r,Dn[n+14]=o,Dn[n+15]=65535,c+32}else{let r=t.left,o=t.right,a=t.splitAxis,l;if(l=ts(c+32,r),l/4>jc)throw new Error("MeshBVH: Cannot store child pointer greater than 32 bits.");return Oe[e+6]=l/4,l=ts(l,o),Oe[e+7]=a,l}}function tl(c,t){let e=(c.index?c.index.count:c.attributes.position.count)/3,n=e>2**16,i=n?4:2,s=t?new SharedArrayBuffer(e*i):new ArrayBuffer(e*i),r=n?new Uint32Array(s):new Uint16Array(s);for(let o=0,a=r.length;o<a;o++)r[o]=o;return r}function el(c,t,e,n,i){let{maxDepth:s,verbose:r,maxLeafTris:o,strategy:a,onProgress:l,indirect:u}=i,f=c._indirectBuffer,h=c.geometry,d=h.index?h.index.array:null,p=u?sr:ir,m=Et(h),_=new Float32Array(6),g=!1,x=new ge;return Pn(t,e,n,x.boundingData,_),S(x,e,n,_),x;function y(v){l&&l(v/m)}function S(v,b,T,A=null,E=0){if(!g&&E>=s&&(g=!0,r&&(console.warn(\`MeshBVH: Max depth of \${s} reached when generating BVH. Consider increasing maxDepth.\`),console.warn(h))),T<=o||E>=s)return y(b+T),v.offset=b,v.count=T,v;let C=nr(v.boundingData,A,t,b,T,a);if(C.axis===-1)return y(b+T),v.offset=b,v.count=T,v;let R=p(f,d,t,b,T,C);if(R===b||R===b+T)y(b+T),v.offset=b,v.count=T;else{v.splitAxis=C.axis;let w=new ge,P=b,L=R-b;v.left=w,Pn(t,P,L,w.boundingData,_),S(w,P,L,_,E+1);let D=new ge,O=R,it=T-L;v.right=D,Pn(t,O,it,D.boundingData,_),S(D,O,it,_,E+1)}return v}}function cr(c,t){let e=c.geometry;t.indirect&&(c._indirectBuffer=tl(e,t.useSharedArrayBuffer),Qs(e,t.range)&&!t.verbose&&console.warn('MeshBVH: Provided geometry contains groups or a range that do not fully span the vertex contents while using the "indirect" option. BVH may incorrectly report intersections on unrendered portions of the geometry.')),c._indirectBuffer||Ks(e,t);let n=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,i=js(e),s=t.indirect?Ji(e,t.range):$i(e,t.range);c._roots=s.map(r=>{let o=el(c,i,r.offset,r.count,t),a=Nn(o),l=new n(32*a);return ar(0,o,l),l})}var ht=class{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(t,e){let n=1/0,i=-1/0;for(let s=0,r=t.length;s<r;s++){let a=t[s][e];n=a<n?a:n,i=a>i?a:i}this.min=n,this.max=i}setFromPoints(t,e){let n=1/0,i=-1/0;for(let s=0,r=e.length;s<r;s++){let o=e[s],a=t.dot(o);n=a<n?a:n,i=a>i?a:i}this.min=n,this.max=i}isSeparated(t){return this.min>t.max||t.min>this.max}};ht.prototype.setFromBox=(function(){let c=new M;return function(e,n){let i=n.min,s=n.max,r=1/0,o=-1/0;for(let a=0;a<=1;a++)for(let l=0;l<=1;l++)for(let u=0;u<=1;u++){c.x=i.x*a+s.x*(1-a),c.y=i.y*l+s.y*(1-l),c.z=i.z*u+s.z*(1-u);let f=e.dot(c);r=Math.min(f,r),o=Math.max(f,o)}this.min=r,this.max=o}})();var Tg=(function(){let c=new ht;return function(e,n){let i=e.points,s=e.satAxes,r=e.satBounds,o=n.points,a=n.satAxes,l=n.satBounds;for(let u=0;u<3;u++){let f=r[u],h=s[u];if(c.setFromPoints(h,o),f.isSeparated(c))return!1}for(let u=0;u<3;u++){let f=l[u],h=a[u];if(c.setFromPoints(h,i),f.isSeparated(c))return!1}}})();var nl=(function(){let c=new M,t=new M,e=new M;return function(i,s,r){let o=i.start,a=c,l=s.start,u=t;e.subVectors(o,l),c.subVectors(i.end,i.start),t.subVectors(s.end,s.start);let f=e.dot(u),h=u.dot(a),d=u.dot(u),p=e.dot(a),_=a.dot(a)*d-h*h,g,x;_!==0?g=(f*h-p*d)/_:g=0,x=(f+g*h)/d,r.x=g,r.y=x}})(),Ve=(function(){let c=new H,t=new M,e=new M;return function(i,s,r,o){nl(i,s,c);let a=c.x,l=c.y;if(a>=0&&a<=1&&l>=0&&l<=1){i.at(a,r),s.at(l,o);return}else if(a>=0&&a<=1){l<0?s.at(0,o):s.at(1,o),i.closestPointToPoint(o,!0,r);return}else if(l>=0&&l<=1){a<0?i.at(0,r):i.at(1,r),s.closestPointToPoint(r,!0,o);return}else{let u;a<0?u=i.start:u=i.end;let f;l<0?f=s.start:f=s.end;let h=t,d=e;if(i.closestPointToPoint(f,!0,t),s.closestPointToPoint(u,!0,e),h.distanceToSquared(f)<=d.distanceToSquared(u)){r.copy(h),o.copy(f);return}else{r.copy(u),o.copy(d);return}}}})(),lr=(function(){let c=new M,t=new M,e=new Jt,n=new at;return function(s,r){let{radius:o,center:a}=s,{a:l,b:u,c:f}=r;if(n.start=l,n.end=u,n.closestPointToPoint(a,!0,c).distanceTo(a)<=o||(n.start=l,n.end=f,n.closestPointToPoint(a,!0,c).distanceTo(a)<=o)||(n.start=u,n.end=f,n.closestPointToPoint(a,!0,c).distanceTo(a)<=o))return!0;let m=r.getPlane(e);if(Math.abs(m.distanceToPoint(a))<=o){let g=m.projectPoint(a,t);if(r.containsPoint(g))return!0}return!1}})();var il=1e-15;function es(c){return Math.abs(c)<il}var nt=class extends St{constructor(...t){super(...t),this.isExtendedTriangle=!0,this.satAxes=new Array(4).fill().map(()=>new M),this.satBounds=new Array(4).fill().map(()=>new ht),this.points=[this.a,this.b,this.c],this.sphere=new pe,this.plane=new Jt,this.needsUpdate=!0}intersectsSphere(t){return lr(t,this)}update(){let t=this.a,e=this.b,n=this.c,i=this.points,s=this.satAxes,r=this.satBounds,o=s[0],a=r[0];this.getNormal(o),a.setFromPoints(o,i);let l=s[1],u=r[1];l.subVectors(t,e),u.setFromPoints(l,i);let f=s[2],h=r[2];f.subVectors(e,n),h.setFromPoints(f,i);let d=s[3],p=r[3];d.subVectors(n,t),p.setFromPoints(d,i),this.sphere.setFromPoints(this.points),this.plane.setFromNormalAndCoplanarPoint(o,t),this.needsUpdate=!1}};nt.prototype.closestPointToSegment=(function(){let c=new M,t=new M,e=new at;return function(i,s=null,r=null){let{start:o,end:a}=i,l=this.points,u,f=1/0;for(let h=0;h<3;h++){let d=(h+1)%3;e.start.copy(l[h]),e.end.copy(l[d]),Ve(e,i,c,t),u=c.distanceToSquared(t),u<f&&(f=u,s&&s.copy(c),r&&r.copy(t))}return this.closestPointToPoint(o,c),u=o.distanceToSquared(c),u<f&&(f=u,s&&s.copy(c),r&&r.copy(o)),this.closestPointToPoint(a,c),u=a.distanceToSquared(c),u<f&&(f=u,s&&s.copy(c),r&&r.copy(a)),Math.sqrt(f)}})();nt.prototype.intersectsTriangle=(function(){let c=new nt,t=new Array(3),e=new Array(3),n=new ht,i=new ht,s=new M,r=new M,o=new M,a=new M,l=new M,u=new at,f=new at,h=new at,d=new M;function p(m,_,g){let x=m.points,y=0,S=-1;for(let v=0;v<3;v++){let{start:b,end:T}=u;b.copy(x[v]),T.copy(x[(v+1)%3]),u.delta(r);let A=es(_.distanceToPoint(b));if(es(_.normal.dot(r))&&A){g.copy(u),y=2;break}let E=_.intersectLine(u,d);if(!E&&A&&d.copy(b),(E||A)&&!es(d.distanceTo(T))){if(y<=1)(y===1?g.start:g.end).copy(d),A&&(S=y);else if(y>=2){(S===1?g.start:g.end).copy(d),y=2;break}if(y++,y===2&&S===-1)break}}return y}return function(_,g=null,x=!1){this.needsUpdate&&this.update(),_.isExtendedTriangle?_.needsUpdate&&_.update():(c.copy(_),c.update(),_=c);let y=this.plane,S=_.plane;if(Math.abs(y.normal.dot(S.normal))>1-1e-10){let v=this.satBounds,b=this.satAxes;e[0]=_.a,e[1]=_.b,e[2]=_.c;for(let E=0;E<4;E++){let C=v[E],R=b[E];if(n.setFromPoints(R,e),C.isSeparated(n))return!1}let T=_.satBounds,A=_.satAxes;t[0]=this.a,t[1]=this.b,t[2]=this.c;for(let E=0;E<4;E++){let C=T[E],R=A[E];if(n.setFromPoints(R,t),C.isSeparated(n))return!1}for(let E=0;E<4;E++){let C=b[E];for(let R=0;R<4;R++){let w=A[R];if(s.crossVectors(C,w),n.setFromPoints(s,t),i.setFromPoints(s,e),n.isSeparated(i))return!1}}return g&&(x||console.warn("ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0."),g.start.set(0,0,0),g.end.set(0,0,0)),!0}else{let v=p(this,S,f);if(v===1&&_.containsPoint(f.end))return g&&(g.start.copy(f.end),g.end.copy(f.end)),!0;if(v!==2)return!1;let b=p(_,y,h);if(b===1&&this.containsPoint(h.end))return g&&(g.start.copy(h.end),g.end.copy(h.end)),!0;if(b!==2)return!1;if(f.delta(o),h.delta(a),o.dot(a)<0){let P=h.start;h.start=h.end,h.end=P}let T=f.start.dot(o),A=f.end.dot(o),E=h.start.dot(o),C=h.end.dot(o),R=A<E,w=T<C;return T!==C&&E!==A&&R===w?!1:(g&&(l.subVectors(f.start,h.start),l.dot(o)>0?g.start.copy(f.start):g.start.copy(h.start),l.subVectors(f.end,h.end),l.dot(o)<0?g.end.copy(f.end):g.end.copy(h.end)),!0)}}})();nt.prototype.distanceToPoint=(function(){let c=new M;return function(e){return this.closestPointToPoint(e,c),e.distanceTo(c)}})();nt.prototype.distanceToTriangle=(function(){let c=new M,t=new M,e=["a","b","c"],n=new at,i=new at;return function(r,o=null,a=null){let l=o||a?n:null;if(this.intersectsTriangle(r,l))return(o||a)&&(o&&l.getCenter(o),a&&l.getCenter(a)),0;let u=1/0;for(let f=0;f<3;f++){let h,d=e[f],p=r[d];this.closestPointToPoint(p,c),h=p.distanceToSquared(c),h<u&&(u=h,o&&o.copy(c),a&&a.copy(p));let m=this[d];r.closestPointToPoint(m,c),h=m.distanceToSquared(c),h<u&&(u=h,o&&o.copy(m),a&&a.copy(c))}for(let f=0;f<3;f++){let h=e[f],d=e[(f+1)%3];n.set(this[h],this[d]);for(let p=0;p<3;p++){let m=e[p],_=e[(p+1)%3];i.set(r[m],r[_]),Ve(n,i,c,t);let g=c.distanceToSquared(t);g<u&&(u=g,o&&o.copy(c),a&&a.copy(t))}}return Math.sqrt(u)}})();var Y=class{constructor(t,e,n){this.isOrientedBox=!0,this.min=new M,this.max=new M,this.matrix=new W,this.invMatrix=new W,this.points=new Array(8).fill().map(()=>new M),this.satAxes=new Array(3).fill().map(()=>new M),this.satBounds=new Array(3).fill().map(()=>new ht),this.alignedSatBounds=new Array(3).fill().map(()=>new ht),this.needsUpdate=!1,t&&this.min.copy(t),e&&this.max.copy(e),n&&this.matrix.copy(n)}set(t,e,n){this.min.copy(t),this.max.copy(e),this.matrix.copy(n),this.needsUpdate=!0}copy(t){this.min.copy(t.min),this.max.copy(t.max),this.matrix.copy(t.matrix),this.needsUpdate=!0}};Y.prototype.update=(function(){return function(){let t=this.matrix,e=this.min,n=this.max,i=this.points;for(let l=0;l<=1;l++)for(let u=0;u<=1;u++)for(let f=0;f<=1;f++){let h=1*l|2*u|4*f,d=i[h];d.x=l?n.x:e.x,d.y=u?n.y:e.y,d.z=f?n.z:e.z,d.applyMatrix4(t)}let s=this.satBounds,r=this.satAxes,o=i[0];for(let l=0;l<3;l++){let u=r[l],f=s[l],h=1<<l,d=i[h];u.subVectors(o,d),f.setFromPoints(u,i)}let a=this.alignedSatBounds;a[0].setFromPointsField(i,"x"),a[1].setFromPointsField(i,"y"),a[2].setFromPointsField(i,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1}})();Y.prototype.intersectsBox=(function(){let c=new ht;return function(e){this.needsUpdate&&this.update();let n=e.min,i=e.max,s=this.satBounds,r=this.satAxes,o=this.alignedSatBounds;if(c.min=n.x,c.max=i.x,o[0].isSeparated(c)||(c.min=n.y,c.max=i.y,o[1].isSeparated(c))||(c.min=n.z,c.max=i.z,o[2].isSeparated(c)))return!1;for(let a=0;a<3;a++){let l=r[a],u=s[a];if(c.setFromBox(l,e),u.isSeparated(c))return!1}return!0}})();Y.prototype.intersectsTriangle=(function(){let c=new nt,t=new Array(3),e=new ht,n=new ht,i=new M;return function(r){this.needsUpdate&&this.update(),r.isExtendedTriangle?r.needsUpdate&&r.update():(c.copy(r),c.update(),r=c);let o=this.satBounds,a=this.satAxes;t[0]=r.a,t[1]=r.b,t[2]=r.c;for(let h=0;h<3;h++){let d=o[h],p=a[h];if(e.setFromPoints(p,t),d.isSeparated(e))return!1}let l=r.satBounds,u=r.satAxes,f=this.points;for(let h=0;h<3;h++){let d=l[h],p=u[h];if(e.setFromPoints(p,f),d.isSeparated(e))return!1}for(let h=0;h<3;h++){let d=a[h];for(let p=0;p<4;p++){let m=u[p];if(i.crossVectors(d,m),e.setFromPoints(i,t),n.setFromPoints(i,f),e.isSeparated(n))return!1}}return!0}})();Y.prototype.closestPointToPoint=(function(){return function(t,e){return this.needsUpdate&&this.update(),e.copy(t).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),e}})();Y.prototype.distanceToPoint=(function(){let c=new M;return function(e){return this.closestPointToPoint(e,c),e.distanceTo(c)}})();Y.prototype.distanceToBox=(function(){let c=["x","y","z"],t=new Array(12).fill().map(()=>new at),e=new Array(12).fill().map(()=>new at),n=new M,i=new M;return function(r,o=0,a=null,l=null){if(this.needsUpdate&&this.update(),this.intersectsBox(r))return(a||l)&&(r.getCenter(i),this.closestPointToPoint(i,n),r.closestPointToPoint(n,i),a&&a.copy(n),l&&l.copy(i)),0;let u=o*o,f=r.min,h=r.max,d=this.points,p=1/0;for(let _=0;_<8;_++){let g=d[_];i.copy(g).clamp(f,h);let x=g.distanceToSquared(i);if(x<p&&(p=x,a&&a.copy(g),l&&l.copy(i),x<u))return Math.sqrt(x)}let m=0;for(let _=0;_<3;_++)for(let g=0;g<=1;g++)for(let x=0;x<=1;x++){let y=(_+1)%3,S=(_+2)%3,v=g<<y|x<<S,b=1<<_|g<<y|x<<S,T=d[v],A=d[b];t[m].set(T,A);let C=c[_],R=c[y],w=c[S],P=e[m],L=P.start,D=P.end;L[C]=f[C],L[R]=g?f[R]:h[R],L[w]=x?f[w]:h[R],D[C]=h[C],D[R]=g?f[R]:h[R],D[w]=x?f[w]:h[R],m++}for(let _=0;_<=1;_++)for(let g=0;g<=1;g++)for(let x=0;x<=1;x++){i.x=_?h.x:f.x,i.y=g?h.y:f.y,i.z=x?h.z:f.z,this.closestPointToPoint(i,n);let y=i.distanceToSquared(n);if(y<p&&(p=y,a&&a.copy(n),l&&l.copy(i),y<u))return Math.sqrt(y)}for(let _=0;_<12;_++){let g=t[_];for(let x=0;x<12;x++){let y=e[x];Ve(g,y,n,i);let S=n.distanceToSquared(i);if(S<p&&(p=S,a&&a.copy(n),l&&l.copy(i),S<u))return Math.sqrt(S)}}return Math.sqrt(p)}})();var Gt=class{constructor(t){this._getNewPrimitive=t,this._primitives=[]}getPrimitive(){let t=this._primitives;return t.length===0?this._getNewPrimitive():t.pop()}releasePrimitive(t){this._primitives.push(t)}};var ns=class extends Gt{constructor(){super(()=>new nt)}},lt=new ns;var is=class{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;let t=[],e=null;this.setBuffer=n=>{e&&t.push(e),e=n,this.float32Array=new Float32Array(n),this.uint16Array=new Uint16Array(n),this.uint32Array=new Uint32Array(n)},this.clearBuffer=()=>{e=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,t.length!==0&&this.setBuffer(t.pop())}}},B=new is;var Ht,xe,_e=[],Fn=new Gt(()=>new X);function ur(c,t,e,n,i,s){Ht=Fn.getPrimitive(),xe=Fn.getPrimitive(),_e.push(Ht,xe),B.setBuffer(c._roots[t]);let r=ss(0,c.geometry,e,n,i,s);B.clearBuffer(),Fn.releasePrimitive(Ht),Fn.releasePrimitive(xe),_e.pop(),_e.pop();let o=_e.length;return o>0&&(xe=_e[o-1],Ht=_e[o-2]),r}function ss(c,t,e,n,i=null,s=0,r=0){let{float32Array:o,uint16Array:a,uint32Array:l}=B,u=c*2;if(q(u,a)){let h=Z(c,l),d=$(u,a);return z(c,o,Ht),n(h,d,!1,r,s+c,Ht)}else{let C=function(w){let{uint16Array:P,uint32Array:L}=B,D=w*2;for(;!q(D,P);)w=tt(w),D=w*2;return Z(w,L)},R=function(w){let{uint16Array:P,uint32Array:L}=B,D=w*2;for(;!q(D,P);)w=et(w,L),D=w*2;return Z(w,L)+$(D,P)},h=tt(c),d=et(c,l),p=h,m=d,_,g,x,y;if(i&&(x=Ht,y=xe,z(p,o,x),z(m,o,y),_=i(x),g=i(y),g<_)){p=d,m=h;let w=_;_=g,g=w,x=y}x||(x=Ht,z(p,o,x));let S=q(p*2,a),v=e(x,S,_,r+1,s+p),b;if(v===2){let w=C(p),L=R(p)-w;b=n(w,L,!0,r+1,s+p,x)}else b=v&&ss(p,t,e,n,i,s,r+1);if(b)return!0;y=xe,z(m,o,y);let T=q(m*2,a),A=e(y,T,g,r+1,s+m),E;if(A===2){let w=C(m),L=R(m)-w;E=n(w,L,!0,r+1,s+m,y)}else E=A&&ss(m,t,e,n,i,s,r+1);return!!E}}var ke=new M,os=new M;function hr(c,t,e={},n=0,i=1/0){let s=n*n,r=i*i,o=1/0,a=null;if(c.shapecast({boundsTraverseOrder:u=>(ke.copy(t).clamp(u.min,u.max),ke.distanceToSquared(t)),intersectsBounds:(u,f,h)=>h<o&&h<r,intersectsTriangle:(u,f)=>{u.closestPointToPoint(t,ke);let h=t.distanceToSquared(ke);return h<o&&(os.copy(ke),o=h,a=f),h<s}}),o===1/0)return null;let l=Math.sqrt(o);return e.point?e.point.copy(os):e.point=os.clone(),e.distance=l,e.faceIndex=a,e}var rl=parseInt("184")>=169,$t=new M,Kt=new M,Qt=new M,Bn=new H,On=new H,zn=new H,fr=new M,dr=new M,pr=new M,Ge=new M;function ol(c,t,e,n,i,s,r,o){let a;if(s===Ui?a=c.intersectTriangle(n,e,t,!0,i):a=c.intersectTriangle(t,e,n,s!==Fi,i),a===null)return null;let l=c.origin.distanceTo(i);return l<r||l>o?null:{distance:l,point:i.clone()}}function al(c,t,e,n,i,s,r,o,a,l,u){$t.fromBufferAttribute(t,s),Kt.fromBufferAttribute(t,r),Qt.fromBufferAttribute(t,o);let f=ol(c,$t,Kt,Qt,Ge,a,l,u);if(f){let h=new M;St.getBarycoord(Ge,$t,Kt,Qt,h),n&&(Bn.fromBufferAttribute(n,s),On.fromBufferAttribute(n,r),zn.fromBufferAttribute(n,o),f.uv=St.getInterpolation(Ge,$t,Kt,Qt,Bn,On,zn,new H)),i&&(Bn.fromBufferAttribute(i,s),On.fromBufferAttribute(i,r),zn.fromBufferAttribute(i,o),f.uv1=St.getInterpolation(Ge,$t,Kt,Qt,Bn,On,zn,new H)),e&&(fr.fromBufferAttribute(e,s),dr.fromBufferAttribute(e,r),pr.fromBufferAttribute(e,o),f.normal=St.getInterpolation(Ge,$t,Kt,Qt,fr,dr,pr,new M),f.normal.dot(c.direction)>0&&f.normal.multiplyScalar(-1));let d={a:s,b:r,c:o,normal:new M,materialIndex:0};St.getNormal($t,Kt,Qt,d.normal),f.face=d,f.faceIndex=s,rl&&(f.barycoord=h)}return f}function ye(c,t,e,n,i,s,r){let o=n*3,a=o+0,l=o+1,u=o+2,f=c.index;c.index&&(a=f.getX(a),l=f.getX(l),u=f.getX(u));let{position:h,normal:d,uv:p,uv1:m}=c.attributes,_=al(e,h,d,p,m,a,l,u,t,s,r);return _?(_.faceIndex=n,i&&i.push(_),_):null}function V(c,t,e,n){let i=c.a,s=c.b,r=c.c,o=t,a=t+1,l=t+2;e&&(o=e.getX(o),a=e.getX(a),l=e.getX(l)),i.x=n.getX(o),i.y=n.getY(o),i.z=n.getZ(o),s.x=n.getX(a),s.y=n.getY(a),s.z=n.getZ(a),r.x=n.getX(l),r.y=n.getY(l),r.z=n.getZ(l)}function mr(c,t,e,n,i,s,r,o){let{geometry:a,_indirectBuffer:l}=c;for(let u=n,f=n+i;u<f;u++)ye(a,t,e,u,s,r,o)}function gr(c,t,e,n,i,s,r){let{geometry:o,_indirectBuffer:a}=c,l=1/0,u=null;for(let f=n,h=n+i;f<h;f++){let d;d=ye(o,t,e,f,null,s,r),d&&d.distance<l&&(u=d,l=d.distance)}return u}function _r(c,t,e,n,i,s,r){let{geometry:o}=e,{index:a}=o,l=o.attributes.position;for(let u=c,f=t+c;u<f;u++){let h;if(h=u,V(r,h*3,a,l),r.needsUpdate=!0,n(r,h,i,s))return!0}return!1}function xr(c,t=null){t&&Array.isArray(t)&&(t=new Set(t));let e=c.geometry,n=e.index?e.index.array:null,i=e.attributes.position,s,r,o,a,l=0,u=c._roots;for(let h=0,d=u.length;h<d;h++)s=u[h],r=new Uint32Array(s),o=new Uint16Array(s),a=new Float32Array(s),f(0,l),l+=s.byteLength;function f(h,d,p=!1){let m=h*2;if(o[m+15]===65535){let g=r[h+6],x=o[m+14],y=1/0,S=1/0,v=1/0,b=-1/0,T=-1/0,A=-1/0;for(let E=3*g,C=3*(g+x);E<C;E++){let R=n[E],w=i.getX(R),P=i.getY(R),L=i.getZ(R);w<y&&(y=w),w>b&&(b=w),P<S&&(S=P),P>T&&(T=P),L<v&&(v=L),L>A&&(A=L)}return a[h+0]!==y||a[h+1]!==S||a[h+2]!==v||a[h+3]!==b||a[h+4]!==T||a[h+5]!==A?(a[h+0]=y,a[h+1]=S,a[h+2]=v,a[h+3]=b,a[h+4]=T,a[h+5]=A,!0):!1}else{let g=h+8,x=r[h+6],y=g+d,S=x+d,v=p,b=!1,T=!1;t?v||(b=t.has(y),T=t.has(S),v=!b&&!T):(b=!0,T=!0);let A=v||b,E=v||T,C=!1;A&&(C=f(g,d,v));let R=!1;E&&(R=f(x,d,v));let w=C||R;if(w)for(let P=0;P<3;P++){let L=g+P,D=x+P,O=a[L],it=a[L+3],Tt=a[D],At=a[D+3];a[h+P]=O<Tt?O:Tt,a[h+P+3]=it>At?it:At}return w}}}function xt(c,t,e,n,i){let s,r,o,a,l,u,f=1/e.direction.x,h=1/e.direction.y,d=1/e.direction.z,p=e.origin.x,m=e.origin.y,_=e.origin.z,g=t[c],x=t[c+3],y=t[c+1],S=t[c+3+1],v=t[c+2],b=t[c+3+2];return f>=0?(s=(g-p)*f,r=(x-p)*f):(s=(x-p)*f,r=(g-p)*f),h>=0?(o=(y-m)*h,a=(S-m)*h):(o=(S-m)*h,a=(y-m)*h),s>a||o>r||((o>s||isNaN(s))&&(s=o),(a<r||isNaN(r))&&(r=a),d>=0?(l=(v-_)*d,u=(b-_)*d):(l=(b-_)*d,u=(v-_)*d),s>u||l>r)?!1:((l>s||s!==s)&&(s=l),(u<r||r!==r)&&(r=u),s<=i&&r>=n)}function yr(c,t,e,n,i,s,r,o){let{geometry:a,_indirectBuffer:l}=c;for(let u=n,f=n+i;u<f;u++){let h=l?l[u]:u;ye(a,t,e,h,s,r,o)}}function vr(c,t,e,n,i,s,r){let{geometry:o,_indirectBuffer:a}=c,l=1/0,u=null;for(let f=n,h=n+i;f<h;f++){let d;d=ye(o,t,e,a?a[f]:f,null,s,r),d&&d.distance<l&&(u=d,l=d.distance)}return u}function Mr(c,t,e,n,i,s,r){let{geometry:o}=e,{index:a}=o,l=o.attributes.position;for(let u=c,f=t+c;u<f;u++){let h;if(h=e.resolveTriangleIndex(u),V(r,h*3,a,l),r.needsUpdate=!0,n(r,h,i,s))return!0}return!1}function Sr(c,t,e,n,i,s,r){B.setBuffer(c._roots[t]),as(0,c,e,n,i,s,r),B.clearBuffer()}function as(c,t,e,n,i,s,r){let{float32Array:o,uint16Array:a,uint32Array:l}=B,u=c*2;if(q(u,a)){let h=Z(c,l),d=$(u,a);mr(t,e,n,h,d,i,s,r)}else{let h=tt(c);xt(h,o,n,s,r)&&as(h,t,e,n,i,s,r);let d=et(c,l);xt(d,o,n,s,r)&&as(d,t,e,n,i,s,r)}}var cl=["x","y","z"];function br(c,t,e,n,i,s){B.setBuffer(c._roots[t]);let r=cs(0,c,e,n,i,s);return B.clearBuffer(),r}function cs(c,t,e,n,i,s){let{float32Array:r,uint16Array:o,uint32Array:a}=B,l=c*2;if(q(l,o)){let f=Z(c,a),h=$(l,o);return gr(t,e,n,f,h,i,s)}else{let f=Ln(c,a),h=cl[f],p=n.direction[h]>=0,m,_;p?(m=tt(c),_=et(c,a)):(m=et(c,a),_=tt(c));let x=xt(m,r,n,i,s)?cs(m,t,e,n,i,s):null;if(x){let v=x.point[h];if(p?v<=r[_+f]:v>=r[_+f+3])return x}let S=xt(_,r,n,i,s)?cs(_,t,e,n,i,s):null;return x&&S?x.distance<=S.distance?x:S:x||S||null}}var Vn=new X,ve=new nt,Me=new nt,He=new W,Tr=new Y,kn=new Y;function Ar(c,t,e,n){B.setBuffer(c._roots[t]);let i=ls(0,c,e,n);return B.clearBuffer(),i}function ls(c,t,e,n,i=null){let{float32Array:s,uint16Array:r,uint32Array:o}=B,a=c*2;if(i===null&&(e.boundingBox||e.computeBoundingBox(),Tr.set(e.boundingBox.min,e.boundingBox.max,n),i=Tr),q(a,r)){let u=t.geometry,f=u.index,h=u.attributes.position,d=e.index,p=e.attributes.position,m=Z(c,o),_=$(a,r);if(He.copy(n).invert(),e.boundsTree)return z(c,s,kn),kn.matrix.copy(He),kn.needsUpdate=!0,e.boundsTree.shapecast({intersectsBounds:x=>kn.intersectsBox(x),intersectsTriangle:x=>{x.a.applyMatrix4(n),x.b.applyMatrix4(n),x.c.applyMatrix4(n),x.needsUpdate=!0;for(let y=m*3,S=(_+m)*3;y<S;y+=3)if(V(Me,y,f,h),Me.needsUpdate=!0,x.intersectsTriangle(Me))return!0;return!1}});for(let g=m*3,x=(_+m)*3;g<x;g+=3){V(ve,g,f,h),ve.a.applyMatrix4(He),ve.b.applyMatrix4(He),ve.c.applyMatrix4(He),ve.needsUpdate=!0;for(let y=0,S=d.count;y<S;y+=3)if(V(Me,y,d,p),Me.needsUpdate=!0,ve.intersectsTriangle(Me))return!0}}else{let u=c+8,f=o[c+6];return z(u,s,Vn),!!(i.intersectsBox(Vn)&&ls(u,t,e,n,i)||(z(f,s,Vn),i.intersectsBox(Vn)&&ls(f,t,e,n,i)))}}var Gn=new W,us=new Y,We=new Y,ll=new M,ul=new M,hl=new M,fl=new M;function Er(c,t,e,n={},i={},s=0,r=1/0){t.boundingBox||t.computeBoundingBox(),us.set(t.boundingBox.min,t.boundingBox.max,e),us.needsUpdate=!0;let o=c.geometry,a=o.attributes.position,l=o.index,u=t.attributes.position,f=t.index,h=lt.getPrimitive(),d=lt.getPrimitive(),p=ll,m=ul,_=null,g=null;i&&(_=hl,g=fl);let x=1/0,y=null,S=null;return Gn.copy(e).invert(),We.matrix.copy(Gn),c.shapecast({boundsTraverseOrder:v=>us.distanceToBox(v),intersectsBounds:(v,b,T)=>T<x&&T<r?(b&&(We.min.copy(v.min),We.max.copy(v.max),We.needsUpdate=!0),!0):!1,intersectsRange:(v,b)=>{if(t.boundsTree)return t.boundsTree.shapecast({boundsTraverseOrder:A=>We.distanceToBox(A),intersectsBounds:(A,E,C)=>C<x&&C<r,intersectsRange:(A,E)=>{for(let C=A,R=A+E;C<R;C++){V(d,3*C,f,u),d.a.applyMatrix4(e),d.b.applyMatrix4(e),d.c.applyMatrix4(e),d.needsUpdate=!0;for(let w=v,P=v+b;w<P;w++){V(h,3*w,l,a),h.needsUpdate=!0;let L=h.distanceToTriangle(d,p,_);if(L<x&&(m.copy(p),g&&g.copy(_),x=L,y=w,S=C),L<s)return!0}}}});{let T=Et(t);for(let A=0,E=T;A<E;A++){V(d,3*A,f,u),d.a.applyMatrix4(e),d.b.applyMatrix4(e),d.c.applyMatrix4(e),d.needsUpdate=!0;for(let C=v,R=v+b;C<R;C++){V(h,3*C,l,a),h.needsUpdate=!0;let w=h.distanceToTriangle(d,p,_);if(w<x&&(m.copy(p),g&&g.copy(_),x=w,y=C,S=A),w<s)return!0}}}}}),lt.releasePrimitive(h),lt.releasePrimitive(d),x===1/0?null:(n.point?n.point.copy(m):n.point=m.clone(),n.distance=x,n.faceIndex=y,i&&(i.point?i.point.copy(g):i.point=g.clone(),i.point.applyMatrix4(Gn),m.applyMatrix4(Gn),i.distance=m.sub(i.point).length(),i.faceIndex=S),n)}function wr(c,t=null){t&&Array.isArray(t)&&(t=new Set(t));let e=c.geometry,n=e.index?e.index.array:null,i=e.attributes.position,s,r,o,a,l=0,u=c._roots;for(let h=0,d=u.length;h<d;h++)s=u[h],r=new Uint32Array(s),o=new Uint16Array(s),a=new Float32Array(s),f(0,l),l+=s.byteLength;function f(h,d,p=!1){let m=h*2;if(o[m+15]===65535){let g=r[h+6],x=o[m+14],y=1/0,S=1/0,v=1/0,b=-1/0,T=-1/0,A=-1/0;for(let E=g,C=g+x;E<C;E++){let R=3*c.resolveTriangleIndex(E);for(let w=0;w<3;w++){let P=R+w;P=n?n[P]:P;let L=i.getX(P),D=i.getY(P),O=i.getZ(P);L<y&&(y=L),L>b&&(b=L),D<S&&(S=D),D>T&&(T=D),O<v&&(v=O),O>A&&(A=O)}}return a[h+0]!==y||a[h+1]!==S||a[h+2]!==v||a[h+3]!==b||a[h+4]!==T||a[h+5]!==A?(a[h+0]=y,a[h+1]=S,a[h+2]=v,a[h+3]=b,a[h+4]=T,a[h+5]=A,!0):!1}else{let g=h+8,x=r[h+6],y=g+d,S=x+d,v=p,b=!1,T=!1;t?v||(b=t.has(y),T=t.has(S),v=!b&&!T):(b=!0,T=!0);let A=v||b,E=v||T,C=!1;A&&(C=f(g,d,v));let R=!1;E&&(R=f(x,d,v));let w=C||R;if(w)for(let P=0;P<3;P++){let L=g+P,D=x+P,O=a[L],it=a[L+3],Tt=a[D],At=a[D+3];a[h+P]=O<Tt?O:Tt,a[h+P+3]=it>At?it:At}return w}}}function Cr(c,t,e,n,i,s,r){B.setBuffer(c._roots[t]),hs(0,c,e,n,i,s,r),B.clearBuffer()}function hs(c,t,e,n,i,s,r){let{float32Array:o,uint16Array:a,uint32Array:l}=B,u=c*2;if(q(u,a)){let h=Z(c,l),d=$(u,a);yr(t,e,n,h,d,i,s,r)}else{let h=tt(c);xt(h,o,n,s,r)&&hs(h,t,e,n,i,s,r);let d=et(c,l);xt(d,o,n,s,r)&&hs(d,t,e,n,i,s,r)}}var dl=["x","y","z"];function Rr(c,t,e,n,i,s){B.setBuffer(c._roots[t]);let r=fs(0,c,e,n,i,s);return B.clearBuffer(),r}function fs(c,t,e,n,i,s){let{float32Array:r,uint16Array:o,uint32Array:a}=B,l=c*2;if(q(l,o)){let f=Z(c,a),h=$(l,o);return vr(t,e,n,f,h,i,s)}else{let f=Ln(c,a),h=dl[f],p=n.direction[h]>=0,m,_;p?(m=tt(c),_=et(c,a)):(m=et(c,a),_=tt(c));let x=xt(m,r,n,i,s)?fs(m,t,e,n,i,s):null;if(x){let v=x.point[h];if(p?v<=r[_+f]:v>=r[_+f+3])return x}let S=xt(_,r,n,i,s)?fs(_,t,e,n,i,s):null;return x&&S?x.distance<=S.distance?x:S:x||S||null}}var Hn=new X,Se=new nt,be=new nt,Xe=new W,Pr=new Y,Wn=new Y;function Ir(c,t,e,n){B.setBuffer(c._roots[t]);let i=ds(0,c,e,n);return B.clearBuffer(),i}function ds(c,t,e,n,i=null){let{float32Array:s,uint16Array:r,uint32Array:o}=B,a=c*2;if(i===null&&(e.boundingBox||e.computeBoundingBox(),Pr.set(e.boundingBox.min,e.boundingBox.max,n),i=Pr),q(a,r)){let u=t.geometry,f=u.index,h=u.attributes.position,d=e.index,p=e.attributes.position,m=Z(c,o),_=$(a,r);if(Xe.copy(n).invert(),e.boundsTree)return z(c,s,Wn),Wn.matrix.copy(Xe),Wn.needsUpdate=!0,e.boundsTree.shapecast({intersectsBounds:x=>Wn.intersectsBox(x),intersectsTriangle:x=>{x.a.applyMatrix4(n),x.b.applyMatrix4(n),x.c.applyMatrix4(n),x.needsUpdate=!0;for(let y=m,S=_+m;y<S;y++)if(V(be,3*t.resolveTriangleIndex(y),f,h),be.needsUpdate=!0,x.intersectsTriangle(be))return!0;return!1}});for(let g=m,x=_+m;g<x;g++){let y=t.resolveTriangleIndex(g);V(Se,3*y,f,h),Se.a.applyMatrix4(Xe),Se.b.applyMatrix4(Xe),Se.c.applyMatrix4(Xe),Se.needsUpdate=!0;for(let S=0,v=d.count;S<v;S+=3)if(V(be,S,d,p),be.needsUpdate=!0,Se.intersectsTriangle(be))return!0}}else{let u=c+8,f=o[c+6];return z(u,s,Hn),!!(i.intersectsBox(Hn)&&ds(u,t,e,n,i)||(z(f,s,Hn),i.intersectsBox(Hn)&&ds(f,t,e,n,i)))}}var Xn=new W,ps=new Y,qe=new Y,pl=new M,ml=new M,gl=new M,_l=new M;function Lr(c,t,e,n={},i={},s=0,r=1/0){t.boundingBox||t.computeBoundingBox(),ps.set(t.boundingBox.min,t.boundingBox.max,e),ps.needsUpdate=!0;let o=c.geometry,a=o.attributes.position,l=o.index,u=t.attributes.position,f=t.index,h=lt.getPrimitive(),d=lt.getPrimitive(),p=pl,m=ml,_=null,g=null;i&&(_=gl,g=_l);let x=1/0,y=null,S=null;return Xn.copy(e).invert(),qe.matrix.copy(Xn),c.shapecast({boundsTraverseOrder:v=>ps.distanceToBox(v),intersectsBounds:(v,b,T)=>T<x&&T<r?(b&&(qe.min.copy(v.min),qe.max.copy(v.max),qe.needsUpdate=!0),!0):!1,intersectsRange:(v,b)=>{if(t.boundsTree){let T=t.boundsTree;return T.shapecast({boundsTraverseOrder:A=>qe.distanceToBox(A),intersectsBounds:(A,E,C)=>C<x&&C<r,intersectsRange:(A,E)=>{for(let C=A,R=A+E;C<R;C++){let w=T.resolveTriangleIndex(C);V(d,3*w,f,u),d.a.applyMatrix4(e),d.b.applyMatrix4(e),d.c.applyMatrix4(e),d.needsUpdate=!0;for(let P=v,L=v+b;P<L;P++){let D=c.resolveTriangleIndex(P);V(h,3*D,l,a),h.needsUpdate=!0;let O=h.distanceToTriangle(d,p,_);if(O<x&&(m.copy(p),g&&g.copy(_),x=O,y=P,S=C),O<s)return!0}}}})}else{let T=Et(t);for(let A=0,E=T;A<E;A++){V(d,3*A,f,u),d.a.applyMatrix4(e),d.b.applyMatrix4(e),d.c.applyMatrix4(e),d.needsUpdate=!0;for(let C=v,R=v+b;C<R;C++){let w=c.resolveTriangleIndex(C);V(h,3*w,l,a),h.needsUpdate=!0;let P=h.distanceToTriangle(d,p,_);if(P<x&&(m.copy(p),g&&g.copy(_),x=P,y=C,S=A),P<s)return!0}}}}}),lt.releasePrimitive(h),lt.releasePrimitive(d),x===1/0?null:(n.point?n.point.copy(m):n.point=m.clone(),n.distance=x,n.faceIndex=y,i&&(i.point?i.point.copy(g):i.point=g.clone(),i.point.applyMatrix4(Xn),m.applyMatrix4(Xn),i.distance=m.sub(i.point).length(),i.faceIndex=S),n)}function Dr(){return typeof SharedArrayBuffer<"u"}var Ye=new B.constructor,qn=new B.constructor,Wt=new Gt(()=>new X),Te=new X,Ae=new X,ms=new X,gs=new X,_s=!1;function Nr(c,t,e,n){if(_s)throw new Error("MeshBVH: Recursive calls to bvhcast not supported.");_s=!0;let i=c._roots,s=t._roots,r,o=0,a=0,l=new W().copy(e).invert();for(let u=0,f=i.length;u<f;u++){Ye.setBuffer(i[u]),a=0;let h=Wt.getPrimitive();z(0,Ye.float32Array,h),h.applyMatrix4(l);for(let d=0,p=s.length;d<p&&(qn.setBuffer(s[d]),r=bt(0,0,e,l,n,o,a,0,0,h),qn.clearBuffer(),a+=s[d].length,!r);d++);if(Wt.releasePrimitive(h),Ye.clearBuffer(),o+=i[u].length,r)break}return _s=!1,r}function bt(c,t,e,n,i,s=0,r=0,o=0,a=0,l=null,u=!1){let f,h;u?(f=qn,h=Ye):(f=Ye,h=qn);let d=f.float32Array,p=f.uint32Array,m=f.uint16Array,_=h.float32Array,g=h.uint32Array,x=h.uint16Array,y=c*2,S=t*2,v=q(y,m),b=q(S,x),T=!1;if(b&&v)u?T=i(Z(t,g),$(t*2,x),Z(c,p),$(c*2,m),a,r+t,o,s+c):T=i(Z(c,p),$(c*2,m),Z(t,g),$(t*2,x),o,s+c,a,r+t);else if(b){let A=Wt.getPrimitive();z(t,_,A),A.applyMatrix4(e);let E=tt(c),C=et(c,p);z(E,d,Te),z(C,d,Ae);let R=A.intersectsBox(Te),w=A.intersectsBox(Ae);T=R&&bt(t,E,n,e,i,r,s,a,o+1,A,!u)||w&&bt(t,C,n,e,i,r,s,a,o+1,A,!u),Wt.releasePrimitive(A)}else{let A=tt(t),E=et(t,g);z(A,_,ms),z(E,_,gs);let C=l.intersectsBox(ms),R=l.intersectsBox(gs);if(C&&R)T=bt(c,A,e,n,i,s,r,o,a+1,l,u)||bt(c,E,e,n,i,s,r,o,a+1,l,u);else if(C)if(v)T=bt(c,A,e,n,i,s,r,o,a+1,l,u);else{let w=Wt.getPrimitive();w.copy(ms).applyMatrix4(e);let P=tt(c),L=et(c,p);z(P,d,Te),z(L,d,Ae);let D=w.intersectsBox(Te),O=w.intersectsBox(Ae);T=D&&bt(A,P,n,e,i,r,s,a,o+1,w,!u)||O&&bt(A,L,n,e,i,r,s,a,o+1,w,!u),Wt.releasePrimitive(w)}else if(R)if(v)T=bt(c,E,e,n,i,s,r,o,a+1,l,u);else{let w=Wt.getPrimitive();w.copy(gs).applyMatrix4(e);let P=tt(c),L=et(c,p);z(P,d,Te),z(L,d,Ae);let D=w.intersectsBox(Te),O=w.intersectsBox(Ae);T=D&&bt(E,P,n,e,i,r,s,a,o+1,w,!u)||O&&bt(E,L,n,e,i,r,s,a,o+1,w,!u),Wt.releasePrimitive(w)}}return T}var Yn=new Y,Ur=new X,xl={strategy:0,maxDepth:40,maxLeafTris:10,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,verbose:!0,range:null},Ze=class c{static serialize(t,e={}){e={cloneBuffers:!0,...e};let n=t.geometry,i=t._roots,s=t._indirectBuffer,r=n.getIndex(),o;return e.cloneBuffers?o={roots:i.map(a=>a.slice()),index:r?r.array.slice():null,indirectBuffer:s?s.slice():null}:o={roots:i,index:r?r.array:null,indirectBuffer:s},o}static deserialize(t,e,n={}){n={setIndex:!0,indirect:!!t.indirectBuffer,...n};let{index:i,roots:s,indirectBuffer:r}=t,o=new c(e,{...n,[Rn]:!0});if(o._roots=s,o._indirectBuffer=r||null,n.setIndex){let a=e.getIndex();if(a===null){let l=new ot(t.index,1,!1);e.setIndex(l)}else a.array!==i&&(a.array.set(i),a.needsUpdate=!0)}return o}get indirect(){return!!this._indirectBuffer}constructor(t,e={}){if(t.isBufferGeometry){if(t.index&&t.index.isInterleavedBufferAttribute)throw new Error("MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw new Error("MeshBVH: Only BufferGeometries are supported.");if(e=Object.assign({...xl,[Rn]:!1},e),e.useSharedArrayBuffer&&!Dr())throw new Error("MeshBVH: SharedArrayBuffer is not available.");this.geometry=t,this._roots=null,this._indirectBuffer=null,e[Rn]||(cr(this,e),!t.boundingBox&&e.setBoundingBox&&(t.boundingBox=this.getBoundingBox(new X))),this.resolveTriangleIndex=e.indirect?n=>this._indirectBuffer[n]:n=>n}refit(t=null){return(this.indirect?wr:xr)(this,t)}traverse(t,e=0){let n=this._roots[e],i=new Uint32Array(n),s=new Uint16Array(n);r(0);function r(o,a=0){let l=o*2,u=s[l+15]===65535;if(u){let f=i[o+6],h=s[l+14];t(a,u,new Float32Array(n,o*4,6),f,h)}else{let f=o+32/4,h=i[o+6],d=i[o+7];t(a,u,new Float32Array(n,o*4,6),d)||(r(f,a+1),r(h,a+1))}}}raycast(t,e=wn,n=0,i=1/0){let s=this._roots,r=this.geometry,o=[],a=e.isMaterial,l=Array.isArray(e),u=r.groups,f=a?e.side:e,h=this.indirect?Cr:Sr;for(let d=0,p=s.length;d<p;d++){let m=l?e[u[d].materialIndex].side:f,_=o.length;if(h(this,d,m,t,o,n,i),l){let g=u[d].materialIndex;for(let x=_,y=o.length;x<y;x++)o[x].face.materialIndex=g}}return o}raycastFirst(t,e=wn,n=0,i=1/0){let s=this._roots,r=this.geometry,o=e.isMaterial,a=Array.isArray(e),l=null,u=r.groups,f=o?e.side:e,h=this.indirect?Rr:br;for(let d=0,p=s.length;d<p;d++){let m=a?e[u[d].materialIndex].side:f,_=h(this,d,m,t,n,i);_!=null&&(l==null||_.distance<l.distance)&&(l=_,a&&(_.face.materialIndex=u[d].materialIndex))}return l}intersectsGeometry(t,e){let n=!1,i=this._roots,s=this.indirect?Ir:Ar;for(let r=0,o=i.length;r<o&&(n=s(this,r,t,e),!n);r++);return n}shapecast(t){let e=lt.getPrimitive(),n=this.indirect?Mr:_r,{boundsTraverseOrder:i,intersectsBounds:s,intersectsRange:r,intersectsTriangle:o}=t;if(r&&o){let f=r;r=(h,d,p,m,_)=>f(h,d,p,m,_)?!0:n(h,d,this,o,p,m,e)}else r||(o?r=(f,h,d,p)=>n(f,h,this,o,d,p,e):r=(f,h,d)=>d);let a=!1,l=0,u=this._roots;for(let f=0,h=u.length;f<h;f++){let d=u[f];if(a=ur(this,f,s,r,i,l),a)break;l+=d.byteLength}return lt.releasePrimitive(e),a}bvhcast(t,e,n){let{intersectsRanges:i,intersectsTriangles:s}=n,r=lt.getPrimitive(),o=this.geometry.index,a=this.geometry.attributes.position,l=this.indirect?p=>{let m=this.resolveTriangleIndex(p);V(r,m*3,o,a)}:p=>{V(r,p*3,o,a)},u=lt.getPrimitive(),f=t.geometry.index,h=t.geometry.attributes.position,d=t.indirect?p=>{let m=t.resolveTriangleIndex(p);V(u,m*3,f,h)}:p=>{V(u,p*3,f,h)};if(s){let p=(m,_,g,x,y,S,v,b)=>{for(let T=g,A=g+x;T<A;T++){d(T),u.a.applyMatrix4(e),u.b.applyMatrix4(e),u.c.applyMatrix4(e),u.needsUpdate=!0;for(let E=m,C=m+_;E<C;E++)if(l(E),r.needsUpdate=!0,s(r,u,E,T,y,S,v,b))return!0}return!1};if(i){let m=i;i=function(_,g,x,y,S,v,b,T){return m(_,g,x,y,S,v,b,T)?!0:p(_,g,x,y,S,v,b,T)}}else i=p}return Nr(this,t,e,i)}intersectsBox(t,e){return Yn.set(t.min,t.max,e),Yn.needsUpdate=!0,this.shapecast({intersectsBounds:n=>Yn.intersectsBox(n),intersectsTriangle:n=>Yn.intersectsTriangle(n)})}intersectsSphere(t){return this.shapecast({intersectsBounds:e=>t.intersectsBox(e),intersectsTriangle:e=>e.intersectsSphere(t)})}closestPointToGeometry(t,e,n={},i={},s=0,r=1/0){return(this.indirect?Lr:Er)(this,t,e,n,i,s,r)}closestPointToPoint(t,e={},n=0,i=1/0){return hr(this,t,e,n,i)}getBoundingBox(t){return t.makeEmpty(),this._roots.forEach(n=>{z(0,new Float32Array(n),Ur),t.union(Ur)}),t}};onmessage=({data:c})=>{let t=performance.now();function e(r){r=Math.min(r,1);let o=performance.now();o-t>=10&&r!==1&&(postMessage({error:null,serialized:null,position:null,progress:r}),t=o)}let{index:n,position:i,options:s}=c;try{let r=new Ue;if(r.setAttribute("position",new ot(i,3,!1)),n&&r.setIndex(new ot(n,1,!1)),s.includedProgressCallback&&(s.onProgress=e),s.groups){let u=s.groups;for(let f in u){let h=u[f];r.addGroup(h.start,h.count,h.materialIndex)}}let o=new Ze(r,s),a=Ze.serialize(o,{copyIndexBuffer:!1}),l=[i.buffer,...a.roots];a.index&&l.push(a.index.buffer),l=l.filter(u=>typeof SharedArrayBuffer>"u"||!(u instanceof SharedArrayBuffer)),o._indirectBuffer&&l.push(a.indirectBuffer.buffer),postMessage({error:null,serialized:a,position:i,progress:1},l)}catch(r){postMessage({error:r,serialized:null,position:null,progress:1})}};})();
|
|
3664
|
-
`});var aM={};_m(aM,{BindingBuilder:()=>Ih});module.exports=Py(aM);var K=require("react"),bn=require("lucide-react");var M=require("react");var co=require("three"),ji=require("three-mesh-bvh"),Pm=!1,lo=new WeakMap,ms=new WeakMap;function Ey(){Pm||(co.Mesh.prototype.raycast=ji.acceleratedRaycast,Pm=!0)}function Ry(e){let t=new Set;return e.traverse(n=>{let i=n.geometry;!i||!i.attributes?.position||t.add(i)}),[...t]}function Am(e){let t=0;for(let n of e){let i=n.index?n.index.count:n.attributes.position.count;t+=i/3}return t}var fs=12e6;function Em(e){return yu(e)>fs}function yu(e){let t=new Set;return e.traverse(n=>{let i=n.geometry;i?.attributes?.position&&t.add(i)}),Am([...t])}function Ly(e,t){return new Promise((n,i)=>{let r=l=>{let u=l.data;if(!u||!u.error&&!u.serialized)return;if(e.removeEventListener("message",r),e.removeEventListener("error",a),u.error){i(new Error(String(u.error)));return}let{serialized:d}=u,p=ji.MeshBVH.deserialize(d,t,{setIndex:!1});d.index&&(t.index?t.index.array=d.index:t.setIndex(new co.BufferAttribute(d.index,1,!1))),t.boundingBox=p.getBoundingBox(new co.Box3),n(p)},a=l=>{e.removeEventListener("message",r),e.removeEventListener("error",a),i(new Error(l.message||"BVH worker error"))};e.addEventListener("message",r),e.addEventListener("error",a);let o=t.index?t.index.array.slice():null,s=t.attributes.position.array.slice(),c=[s,...o?[o]:[]].map(l=>l.buffer);e.postMessage({index:o,position:s,options:{groups:[...t.groups]}},c)})}async function ky(){if(typeof window>"u"||typeof Worker>"u")return null;try{let{bvhWorkerCode:e}=await Promise.resolve().then(()=>(Tm(),Cm)),t=new Blob([e],{type:"text/javascript"}),n=URL.createObjectURL(t),i=new Worker(n);return{worker:i,dispose:()=>{i.terminate(),URL.revokeObjectURL(n)}}}catch{return null}}async function Dy(e,t){if(t)try{return await Ly(t,e)}catch{}let n=ji.computeBoundsTree.call(e);return e.boundsTree=void 0,await new Promise(i=>setTimeout(i,0)),n}async function Ny(e,t,n){if(e.boundsTree)return;if(t.buildPromise)return t.buildPromise;let i=(async()=>{let r=await n();t.references>0&&!e.boundsTree&&(e.boundsTree=r,t.ownedTree=r)})();return t.buildPromise=i.finally(()=>{t.buildPromise=void 0,t.references===0&&lo.delete(e)}),t.buildPromise}async function Yl(e,t){if(t?.aborted)return;let n=ms.get(e);if(!n){if(n=Ry(e),Am(n)>fs){ms.set(e,[]);return}ms.set(e,n);for(let r of n){let a=lo.get(r)??{references:0};a.references+=1,lo.set(r,a)}}if(n.length===0)return;Ey();let i=await ky();if(t?.aborted){i?.dispose();return}try{for(let r of n){if(t?.aborted)return;let a=lo.get(r);a&&await Ny(r,a,()=>Dy(r,i?.worker))}}finally{i?.dispose()}}function gs(e){let t=ms.get(e);if(t){ms.delete(e);for(let n of t){let i=lo.get(n);i&&(i.references=Math.max(0,i.references-1),!(i.references>0)&&(i.ownedTree&&n.boundsTree===i.ownedTree&&(ji.disposeBoundsTree.call(n),n.boundsTree=void 0),i.ownedTree=void 0,i.buildPromise||lo.delete(n)))}}}var Cd=require("@react-three/drei"),Do=require("@react-three/fiber"),qv=require("qrcode.react"),ut=require("three");var Rm=require("lucide-react");var Hi=require("react/jsx-runtime");function va({title:e,message:t,tone:n="default"}){return(0,Hi.jsxs)("div",{className:`ri-license-overlay${n==="error"?" ri-license-overlay--error":""}`,children:[(0,Hi.jsxs)("div",{className:"ri-license-overlay__header",children:[n==="error"?(0,Hi.jsx)(Rm.AlertTriangle,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):(0,Hi.jsx)("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),(0,Hi.jsx)("span",{className:"ri-license-overlay__title",children:e})]}),(0,Hi.jsx)("p",{className:"ri-license-overlay__message",children:t})]})}var Lm=require("react"),$l=class extends Lm.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,i){this.props.onLoadError?.(n)}render(){return this.state.hasError?null:this.props.children}};var uo=require("three");var km="riEditorGizmo";function Dm(e){return e.userData[km]=!0,e}function Nm(e){let t=[];return e.traverse(n=>{n.visible&&n.userData[km]&&(n.visible=!1,t.push(n))}),()=>{for(let n of t)n.visible=!0}}function Kl(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:n,scene:i,camera:r,invalidate:a}=e;if(!n.getContextAttributes().preserveDrawingBuffer)return Promise.reject(new Error("Screenshot capture is disabled. Set preserveDrawingBuffer on ModelViewer to enable it."));let{transparent:o=!1}=t,s=n.getSize(new uo.Vector2),c=n.getPixelRatio(),l=r instanceof uo.PerspectiveCamera?r.aspect:null,u=i.background,d=t.width??s.x,p=t.height??s.y,g=d!==s.x||p!==s.y,f=Nm(i);return o&&(i.background=null),g&&(n.setPixelRatio(1),n.setSize(d,p,!1),r instanceof uo.PerspectiveCamera&&(r.aspect=d/p,r.updateProjectionMatrix())),a(),new Promise((v,E)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let S,b;try{S=n.domElement.toDataURL("image/png")}catch(x){b=x}f(),o&&(i.background=u),g&&(n.setPixelRatio(c),n.setSize(s.x,s.y,!1),r instanceof uo.PerspectiveCamera&&l!==null&&(r.aspect=l,r.updateProjectionMatrix())),a(),b?E(b):v(S)})})})}var po=require("fflate");var Im;function Bm(e){Im=e}function bs(e){Im?.(e)}var Iy=[".glb",".gltf",".obj",".fbx",".usdz",".zip"],By=["model/gltf-binary","model/gltf+json","model/vnd.usdz+zip","application/vnd.usdz+zip","application/zip","application/x-zip-compressed"],vs=1024*1024,Om=128*vs,zm=1024,Um=128*vs,Fm=256*vs,Vm=200,Oy=vs,Ci=new Map,Wm=".glb,.gltf,.obj,.fbx,.usdz,.zip,model/gltf-binary,model/gltf+json,model/vnd.usdz+zip,application/vnd.usdz+zip,application/zip";function xs(e){let t=e.split(/[?#]/,1)[0].toLowerCase();return t.endsWith(".obj")?"obj":t.endsWith(".fbx")?"fbx":t.endsWith(".usdz")?"usdz":t.endsWith(".gltf")?"gltf":"glb"}function Xm(e){return Ci.get(e)??{format:xs(e)}}function zy(e){let t=e.name.toLowerCase();return Iy.some(n=>t.endsWith(n))||By.includes(e.type)}async function _u(e){if(!zy(e))throw new Error("Unsupported model file. Please upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset.");let t=e.name.toLowerCase();if(t.endsWith(".usdz")||e.type==="model/vnd.usdz+zip"||e.type==="application/vnd.usdz+zip")return jm(e,"usdz");if(t.endsWith(".zip")||Uy(e.type))return Fy(e);if(t.endsWith(".gltf")||e.type==="model/gltf+json")return Hm(e);let n=xs(e.name);return n==="gltf"?Hm(e):jm(e,n)}function jm(e,t){let n=URL.createObjectURL(e);return Ci.set(n,{format:t,entryPath:e.name}),{url:n,name:e.name,format:t,cleanup:()=>{bs(n),Ci.delete(n),URL.revokeObjectURL(n)}}}function Uy(e){return e==="application/zip"||e==="application/x-zip-compressed"}async function Hm(e){let t=await e.text(),n=qm(t,e.name);for(let r of Ym(n))if(!Su(r))throw new Error(`${e.name} references external assets. Upload a .zip containing the .gltf file and its dependencies.`);let i=URL.createObjectURL(e);return Ci.set(i,{format:"gltf",entryPath:e.name}),{url:i,name:e.name,format:"gltf",cleanup:()=>{bs(i),Ci.delete(i),URL.revokeObjectURL(i)}}}async function Fy(e){if(e.size>Om)throw new Error(`Model zip is too large. The compressed archive must be ${wu(Om)} or smaller.`);let t=await Vy(new Uint8Array(await e.arrayBuffer())),n=new Map;for(let[o,s]of Object.entries(t)){let c=Mu(o);!c||$m(c)||n.set(c,s)}let i=[...n.keys()].filter(o=>/\.(gltf|obj|fbx)$/i.test(o));if(i.length===0)throw new Error("Invalid model zip: no .gltf, .obj, or .fbx file found.");if(i.length>1)throw new Error("Invalid model zip: multiple model entry files found.");let r=i[0],a=xs(r);if(a==="gltf")return Hy(e,r,n);if(a==="obj"||a==="fbx")return jy(e,r,a,n);throw new Error(`Unsupported model entry ${r}.`)}function Vy(e){return new Promise((t,n)=>{let i=0,r=0,a=null,o=c=>(a??(a=new Error(`Invalid model zip: ${c}`)),!1);(0,po.unzip)(e,{filter:c=>{if(a)return!1;if(i+=1,i>zm)return o(`archive contains more than ${zm.toLocaleString()} entries.`);if(c.originalSize>Um)return o(`${c.name} expands beyond the ${wu(Um)} per-file limit.`);if(r+=c.originalSize,r>Fm)return o(`expanded contents exceed ${wu(Fm)}.`);if(c.originalSize>=Oy&&(c.size===0||c.originalSize/c.size>Vm))return o(`${c.name} exceeds the ${Vm}:1 compression-ratio limit.`);let l=Mu(c.name);return!!l&&!$m(l)}},(c,l)=>{a?n(a):c?n(new Error(`Invalid model zip: ${c.message}`)):t(l)})})}function wu(e){return`${e/vs} MiB`}function jy(e,t,n,i){let r=[],a={};for(let[s,c]of i){let l=URL.createObjectURL(new Blob([c],{type:Km(s)}));r.push(l),a[s]=l}let o=a[t];if(!o)throw r.forEach(s=>URL.revokeObjectURL(s)),new Error(`Invalid model zip: could not read ${t}.`);return Ci.set(o,{format:n,entryPath:t,resourceUrls:a}),{url:o,name:e.name,format:n,cleanup:()=>{bs(o),Ci.delete(o),r.forEach(s=>URL.revokeObjectURL(s))}}}function Hy(e,t,n){let i=n.get(t);if(!i)throw new Error("Invalid GLTF zip: no .gltf found.");let r=qm((0,po.strFromU8)(i),t);Gy(r,t);let a=Wy(t),o=[];try{Gm(r.buffers,a,n,o),Gm(r.images,a,n,o);let s=new Blob([(0,po.strToU8)(JSON.stringify(r))],{type:"model/gltf+json"}),c=URL.createObjectURL(s);return o.push(c),Ci.set(c,{format:"gltf",entryPath:t}),{url:c,name:e.name,format:"gltf",cleanup:()=>{bs(c),Ci.delete(c),o.forEach(l=>URL.revokeObjectURL(l))}}}catch(s){throw o.forEach(c=>URL.revokeObjectURL(c)),s}}function Gm(e,t,n,i){for(let r of e??[]){if(typeof r.uri!="string"||Su(r.uri))continue;let a=Xy(t,r.uri),o=n.get(a);if(!o)throw new Error(`Invalid GLTF zip: missing referenced asset ${r.uri}.`);let s=URL.createObjectURL(new Blob([o],{type:Km(a)}));i.push(s),r.uri=s}}function qm(e,t){try{return JSON.parse(e)}catch{throw new Error(`${t} is not a valid .gltf JSON file.`)}}function Ym(e){return[...e.buffers??[],...e.images??[]].map(t=>t.uri).filter(t=>typeof t=="string"&&t.length>0)}function Gy(e,t){for(let n of Ym(e)){if(Su(n))continue;let i=/^[a-z][a-z0-9+.-]*:/i.test(n),r=n.startsWith("/")||n.startsWith("\\");if(i||r)throw new Error(`${t} references external assets. Include every dependency inside the uploaded .zip.`)}}function Su(e){return e.startsWith("data:")}function Mu(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(i=>i&&i!==".")){if(n===".."){t.pop();continue}t.push(n)}return t.join("/")}function $m(e){let t=e.split("/");return e.endsWith("/")||t.includes("__MACOSX")||t.some(n=>n===".DS_Store"||n.startsWith("._"))}function Wy(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t)}function Xy(e,t){let n=t.split(/[?#]/)[0],i=qy(n);return Mu(e?`${e}/${i}`:i)}function qy(e){try{return decodeURI(e)}catch{return e}}function Km(e){let t=e.toLowerCase();return t.endsWith(".obj")||t.endsWith(".mtl")?"text/plain":t.endsWith(".fbx")?"application/octet-stream":t.endsWith(".usdz")?"model/vnd.usdz+zip":t.endsWith(".bin")?"application/octet-stream":t.endsWith(".png")?"image/png":t.endsWith(".jpg")||t.endsWith(".jpeg")?"image/jpeg":t.endsWith(".webp")?"image/webp":t.endsWith(".avif")?"image/avif":t.endsWith(".ktx2")?"image/ktx2":"application/octet-stream"}var Yy={glb:"GLB",gltf:"glTF",obj:"OBJ",fbx:"FBX",usdz:"USDZ"},$y=/\.(glb|gltf|obj|fbx|usdz|zip)$/i;function Ky(e,t){let n=e?.response?.status;if(typeof n=="number")return n;let i=/responded with (\d{3})/.exec(t);return i?Number(i[1]):null}function Zm(e,t,n){let i=e instanceof Error?e.message:e==null?"":String(e),r="This model couldn't be loaded",a=i||null,o=Ky(e,i);if(o===404||o===410)return{title:r,detail:`Nothing was found at this address (${o}). Check that modelUrl points to the file.`,technical:a};if(o===401||o===403)return{title:r,detail:`The server refused access to the file (${o}). Check that the file is public, or that a signed URL hasn't expired.`,technical:a};if(o!==null)return{title:r,detail:`The server responded with ${o} when the file was requested.`,technical:a};if(/failed to fetch|networkerror|load failed|network error/i.test(i))return{title:r,detail:"The download was blocked or failed. Check that the URL is correct and, if the file is on another domain, that its server allows cross-origin requests (CORS) from this site.",technical:a};if(/<!doctype|<html/i.test(i))return{title:r,detail:"The server sent back a web page instead of a model. There's probably no file at this path: many servers answer a missing file with their index.html.",technical:a};let s=t.split(/[?#]/,1)[0],c=Yy[n??xs(t)],l=$y.test(s);return{title:r,detail:l||n?`The file couldn't be read as ${c}. Check that it's a valid ${c} file${n?" and that modelFormat matches it":""}.`:`The file couldn't be read as ${c}. The URL has no file extension, so set modelFormat to the file's format.`,technical:a}}var Jm={showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!1,showAnnotationNavigation:!1},Zy=Object.freeze({minimal:Object.freeze({...Jm}),showcase:Object.freeze({...Jm,autoRotate:!0}),configurator:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!0}),inspector:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!0,showDownloadButton:!0,showResetButton:!0,showViewGizmo:!0,showMeasureTools:!0,showUvCheckerButton:!0,showExplodeControls:!0,enableKeyboardNavigation:!0})}),Jy=["preset","ui","tools","controls","perf","tiles","xr","decoders"];function Qm(e){let t={};for(let n of Object.keys(e))e[n]!==void 0&&(t[n]=e[n]);return t}function Qy({ui:e,tools:t,controls:n,perf:i,tiles:r,xr:a,decoders:o}){let s=e?.download,c=e?.mouseController,l=t?.measure,u=n?.autoRotate;return{showObjectBindingDataPanel:e?.objectPanel,showSceneObjectsPanel:e?.sceneObjects,showDownloadButton:s===void 0?void 0:s!==!1,downloadFilename:typeof s=="string"?s:void 0,showResetButton:e?.reset,showLoadingOverlay:e?.loadingOverlay,showViewGizmo:e?.viewGizmo,showMouseController:c===void 0?void 0:c!==!1,mouseControllerPosition:typeof c=="object"?c.position:void 0,mouseControllerOpacity:typeof c=="object"?c.opacity:void 0,showAnnotationNavigation:e?.annotationNavigation,showAnnotationOnHover:e?.annotationOnHover,highlightOnHover:e?.highlightOnHover,showMeasureTools:l===void 0?void 0:l!==!1,measurementUnit:typeof l=="object"?l.unit:void 0,showUvCheckerButton:t?.uvChecker,showExplodeControls:t?.explode,texturePositioning:t?.texturePositioning,enableCameraControls:n?.enabled,enableKeyboardNavigation:n?.keyboard,disableZoom:n?.zoom===void 0?void 0:!n.zoom,zoomOnSelected:n?.zoomOnSelect,autoRotate:u===void 0?void 0:u!==!1,autoRotateSpeed:typeof u=="number"?u:void 0,refitOnResize:n?.refitOnResize,cameraLimits:n?.limits,moveSensitivity:n?.moveSensitivity,zoomSensitivity:n?.zoomSensitivity,renderMode:i?.renderMode,maxDpr:i?.maxDpr,performanceProfile:i?.profile,preserveDrawingBuffer:i?.preserveDrawingBuffer,tilesetUrl:r?.url,tilesErrorTarget:r?.errorTarget,tilesCacheSize:r?.cacheSize,enableXR:a?.enabled,usdzUrl:a?.usdzUrl,arScaleMode:a?.scaleMode,mobileHandoffUrl:a?.mobileHandoffUrl,dracoDecoderPath:o?.draco,ktx2TranscoderPath:o?.ktx2,meshopt:o?.meshopt}}function ef(e){let t={...e};for(let n of Jy)delete t[n];return{...e.preset?Zy[e.preset]:void 0,...Qm(t),...Qm(Qy(e))}}var xa=Object.freeze([{id:"change-color",label:"Change Color",handling:"viewer",description:"Opens a color picker docked under the action and commits the result to style.material.baseColor."},{id:"change-material",label:"Change Material",handling:"viewer",description:"Opens the material picker so the viewer can swap the object's texture."},{id:"toggle-visibility",label:"Toggle Visibility",handling:"viewer",description:"Flips the binding's visible flag."},{id:"toggle-light",label:"Toggle Light",handling:"viewer",description:"Turns the scene lights attached to this object on or off, or the object's own glow when none is attached."},{id:"change-light-color",label:"Change Light Color",handling:"viewer",description:"Opens a color picker docked under the action for the scene lights attached to this object, or the object's own glow."},{id:"set-brightness",label:"Set Brightness",handling:"viewer",description:"Opens a brightness slider docked under the action for the scene lights attached to this object, or the object's own glow."}]),Zl="__custom__";function ys(e){return xa.find(t=>t.id===e)}var ws=xa.filter(e=>e.handling==="viewer").map(e=>e.id),e1=new Set(["","New Action",...xa.map(e=>e.label)]);function Cu(e){return e1.has(e.trim())}function tf(e,t){let n=Array.from({length:t.length+1},(i,r)=>r);for(let i=1;i<=e.length;i+=1){let r=[i];for(let a=1;a<=t.length;a+=1){let o=n[a-1]+(e[i-1]===t[a-1]?0:1);r[a]=Math.min(r[a-1]+1,n[a]+1,o)}n=r}return n[t.length]}function nf(e){if(ys(e))return null;let t=e.trim().toLowerCase();if(!t)return null;let n=t.replace(/[^a-z0-9]/g,""),i=null;for(let r of xa){let a=Math.min(tf(t,r.id),tf(n,r.id.replace(/[^a-z0-9]/g,"")));(!i||a<i.distance)&&(i={id:r.id,distance:a})}return i&&i.distance<=2?i.id:null}var rf=require("three");function ho(e,t){if(e[t])return t;let n=Object.entries(e).find(([,r])=>r.id===t)?.[0];return n||(Object.entries(e).find(([,r])=>r.modelObjectId===t)?.[0]??null)}function af(e,t,n){let i=t[n]?.modelObjectId;return e.lighting.lights.filter(r=>{let a=r.attachment?.objectId;return a?ho(t,a)===n||a===i:!1})}function Tu(e,t){return e.lighting.lights.some(n=>t[n.id])?{...e,lighting:{...e.lighting,lights:e.lighting.lights.map(n=>t[n.id]?{...n,...t[n.id]}:n)}}:e}function of(e){let t=null;if(e?.traverse(r=>{if(t)return;let a=r.material;for(let o of Array.isArray(a)?a:a?[a]:[])if(o.emissive instanceof rf.Color){t=o;return}}),!t)return{color:"#000000",intensity:0,on:!1};let n=`#${t.emissive.getHexString()}`,i=t.emissiveIntensity??1;return{color:n,intensity:i,on:n!=="#000000"&&i>0}}var sf=require("react-colorful"),Pn=require("react/jsx-runtime");function lf({kind:e,color:t,brightness:n,onColorChange:i,onBrightnessChange:r,onClose:a}){return(0,Pn.jsx)("div",{className:"ri-popover ri-popover--inline",style:{padding:12},onPointerDown:o=>o.stopPropagation(),children:e==="change-light-color"?(0,Pn.jsxs)(Pn.Fragment,{children:[(0,Pn.jsx)("p",{className:"ri-popoverLabel",children:"Light color"}),(0,Pn.jsx)(sf.HexColorPicker,{color:t,onChange:i}),(0,Pn.jsxs)("div",{className:"ri-inlineRow",children:[(0,Pn.jsx)("span",{className:"ri-colorCode",children:t}),(0,Pn.jsx)("button",{className:"ri-secondaryButton",onClick:a,children:"Done"})]})]}):(0,Pn.jsxs)(Pn.Fragment,{children:[(0,Pn.jsx)("p",{className:"ri-popoverLabel",children:"Brightness"}),(0,Pn.jsx)("input",{type:"range",min:0,max:200,step:1,value:n,"aria-label":"Brightness",style:{width:"100%"},onChange:o=>r(Number(o.target.value))}),(0,Pn.jsxs)("div",{className:"ri-inlineRow",children:[(0,Pn.jsxs)("span",{className:"ri-colorCode",children:[n,"%"]}),(0,Pn.jsx)("button",{className:"ri-secondaryButton",onClick:a,children:"Done"})]})]})})}var jr=require("react");var cf=require("three-stdlib");function Ti(e,t){let n=URL.createObjectURL(e),i=document.createElement("a");i.href=n,i.download=t,i.style.display="none";try{document.body.appendChild(i),i.click()}finally{i.remove(),window.setTimeout(()=>{URL.revokeObjectURL(n)},1e3)}}function df({scene:e,objectBindings:t,matRefs:n,downloadFilename:i,onComplete:r}){import("three").then(({Group:a,Mesh:o})=>{let s=new a,c=new Map;for(let[d,p]of Object.entries(t))c.set(p.modelObjectId??d,d);let l=d=>{let p=d;for(;p;){let g=p.name||p.uuid,f=c.get(g)??g,v=t[f];if(v?v.visible===!1:p.visible===!1)return!1;p=p.parent}return!0};e.traverse(d=>{let p=d;if(!p.isMesh||!p.geometry||!l(p))return;let g=p.name||p.uuid,f=c.get(g)??g,v=n[f]??p.material;if(!v)return;let E=new o(p.geometry,v);E.name=g,E.applyMatrix4(p.matrixWorld),s.add(E)}),new cf.GLTFExporter().parse(s,d=>{let p=d instanceof ArrayBuffer?new Blob([d],{type:"model/gltf-binary"}):new Blob([JSON.stringify(d)],{type:"model/gltf+json"}),g=d instanceof ArrayBuffer?".glb":".gltf";Ti(p,`${i}${g}`),r()},d=>{console.error("GLTFExporter error:",d),r()},{binary:!0})})}var ff=require("fflate");var uf=require("fflate");function Jl(e,t=6){return new Promise((n,i)=>{(0,uf.zip)(e,{level:t},(r,a)=>{r?i(r):n(a)})})}var _s=2048,pf=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function hf(e){return e.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}function Eu(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function gf(e){return Eu(e,"model")}function Pu(e,t){return e.index?Math.round(e.index.getX(t)):t}function t1(e,t,n){let i=Pu(e,n),r=Pu(e,n+1),a=Pu(e,n+2);if(i>=t.count||r>=t.count||a>=t.count)return null;let o=[{index:i,u:t.getX(i),v:t.getY(i)},{index:r,u:t.getX(r),v:t.getY(r)},{index:a,u:t.getX(a),v:t.getY(a)}];return o.every(s=>Number.isFinite(s.u)&&Number.isFinite(s.v))?o:null}function mf(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function Au(e,t,n,i){let r,a;i?(r=t.index,a=n.index):(r=mf(t),a=mf(n));let o=r<a?`${r}|${a}`:`${a}|${r}`,s=e.get(o);s?s.count+=1:e.set(o,{count:1,start:t,end:n})}function n1(e,t,n){Au(e,t[0],t[1],n),Au(e,t[1],t[2],n),Au(e,t[2],t[0],n)}function r1(e,t){return Array.isArray(e)?e[t]??null:e}function i1(e){let t=new Map,n=0,i=0,r=0;return e.traverse(a=>{let o=a;if(!o.isMesh||!o.geometry||!o.material)return;let s=o.geometry,c=s.getAttribute("uv");if(!c||c.itemSize<2||c.count<3)return;n+=1;let l=o.name||`Mesh ${n}`,u=s.index?.count??c.count,d=s.groups.length>0?s.groups:[{start:0,count:u,materialIndex:0}];for(let p of d){let g=p.materialIndex??0,f=r1(o.material,g);if(!f)continue;let v=t.get(f.uuid);v||(i+=1,v={name:f.name||`Material ${i}`,layers:new Map},t.set(f.uuid,v));let E=v.layers.get(o.uuid);E||(E={name:l,color:pf[r%pf.length],edges:new Map},r+=1,v.layers.set(o.uuid,E));let S=Math.max(0,p.start),b=Math.min(u,S+p.count);for(let x=S;x+2<b;x+=3){let R=t1(s,c,x);R&&n1(E.edges,R,!!s.index)}}}),[...t.values()].filter(a=>[...a.layers.values()].some(o=>o.edges.size>0))}function Ql(e){return(e*_s).toFixed(2)}function a1(e){return`M${Ql(e.start.u)} ${Ql(1-e.start.v)}L${Ql(e.end.u)} ${Ql(1-e.end.v)}`}function o1(e){let t=hf(e.name),n=[...e.layers.values()].filter(i=>i.edges.size>0).map((i,r)=>{let a=hf(i.name),o=`${Eu(i.name,"mesh")}-${r+1}`,s=[...i.edges.values()],c=s.filter(d=>d.count===1),u=(c.length>0?c:s).map(a1).join("");return[` <g id="${o}" data-mesh="${a}" fill="none" stroke="${i.color}"`,' stroke-width="1" stroke-linejoin="round" vector-effect="non-scaling-stroke">',` <title>${a}</title>`,` <path d="${u}"/>`," </g>"].join(`
|
|
3664
|
+
`});var ak={};cv(ak,{BindingBuilder:()=>nb});module.exports=zT(ak);var G=require("react"),qM=require("three"),Wi=require("lucide-react");var Oi=require("react"),Fs=require("lucide-react"),Pn=require("react/jsx-runtime");function gh({label:e,icon:t,title:n,align:i="left",children:r}){let[o,a]=(0,Oi.useState)(!1),s=(0,Oi.useRef)(null),l=(0,Oi.useRef)(null),c=(0,Oi.useId)();return(0,Oi.useEffect)(()=>{if(!o)return;let h=u=>{s.current?.contains(u.target)||a(!1)},p=u=>{u.key==="Escape"&&(a(!1),l.current?.focus())};return window.addEventListener("pointerdown",h),window.addEventListener("keydown",p),()=>{window.removeEventListener("pointerdown",h),window.removeEventListener("keydown",p)}},[o]),(0,Pn.jsxs)("div",{className:"bb-headerMenuWrapper",ref:s,children:[(0,Pn.jsxs)("button",{ref:l,type:"button",className:`bb-headerButton ${e?"":"bb-headerButton--icon"} ${o?"bb-headerButton--open":""}`,onClick:()=>a(h=>!h),title:n,"aria-label":e?void 0:n,"aria-expanded":o,"aria-controls":o?c:void 0,children:[t,e?(0,Pn.jsxs)(Pn.Fragment,{children:[e,(0,Pn.jsx)(Fs.ChevronDown,{size:12,"aria-hidden":"true"})]}):null]}),o?(0,Pn.jsx)("div",{id:c,className:`bb-headerMenu bb-headerMenu--${i}`,role:"group","aria-label":n,children:r(()=>a(!1))}):null]})}function uv({onRestore:e,onRemove:t,restoreDisabled:n,close:i}){let[r,o]=(0,Oi.useState)(!1);return r&&t?(0,Pn.jsxs)("div",{className:"bb-headerMenuConfirm",role:"alertdialog","aria-label":"Remove model",children:[(0,Pn.jsx)("p",{children:"Remove the model and its bindings from the editor? Your edits are saved first, so Restore last session can bring them back."}),(0,Pn.jsxs)("div",{className:"bb-headerMenuConfirmActions",children:[(0,Pn.jsx)("button",{type:"button",className:"bb-headerMenuItem",onClick:()=>o(!1),children:"Cancel"}),(0,Pn.jsx)("button",{type:"button",className:"bb-headerMenuItem bb-headerMenuItem--danger",onClick:()=>{i(),t()},autoFocus:!0,children:"Remove"})]})]}):(0,Pn.jsxs)(Pn.Fragment,{children:[e?(0,Pn.jsxs)("button",{type:"button",className:"bb-headerMenuItem",disabled:n,onClick:()=>{i(),e()},title:"Restore your last session: the model, its object bindings, and scene settings saved in this browser",children:[(0,Pn.jsx)(Fs.History,{size:14,"aria-hidden":"true"}),"Restore last session"]}):null,t?(0,Pn.jsxs)("button",{type:"button",className:"bb-headerMenuItem bb-headerMenuItem--danger",onClick:()=>o(!0),children:[(0,Pn.jsx)(Fs.Trash2,{size:14,"aria-hidden":"true"}),"Remove model\u2026"]}):null]})}var js=require("react");var pv={verifyingLicense:"Verifying License",checkingYourLicenseKey:"Checking your license key...",invalidLicense:"Invalid License",licenseHasBeenRevokedOrHasExpired:"License has been revoked or has expired",failedToLoadPleaseContactTheSiteAdministrator:"Failed to load. Please contact the site administrator.",contextRestoringTitle:"Reloading viewer\u2026",contextLostTitle:"3D view interrupted",contextRestoringMessage:"Rebuilding the 3D view. Please wait\u2026",contextLostMessage:"The graphics connection was interrupted. The viewer will rebuild when it returns, or you can reload it now.",reloadViewer:"Reload viewer",texturePositioningHint:"Drag to move \xB7 Scroll to zoom \xB7 Click elsewhere to finish",texturePositioningStartHint:"Double-click to move or zoom",dismiss:"Dismiss",missingUVsAreShownInMagenta:"Missing UVs are shown in magenta.",viewThisModelInARWithAppleQuickLook:"View this model in AR with Apple Quick Look",viewInAR:"View in AR",openThisExperienceOnAPhoneForAR:"Open this experience on a phone for AR",openOnPhone:"Open on phone",viewThisModelInYourSpace:"View this model in your space",viewThisModelInVR:"View this model in VR",closePhoneHandoff:"Close phone handoff",arScanCode:"Scan the code and choose AR.",qrCodeToOpenThisModelOnAPhone:"QR code to open this model on a phone",disableUVChecker:"Disable UV checker",enableUVChecker:"Enable UV checker",explodedView:"Exploded view",explodeAmount:"Explode amount",removeSectionCut:"Remove section cut",sectionCut:"Section cut",sectionAxis:"Section axis",sectionPosition:"Section position",keepTheOtherSide:"Keep the other side",pauseCinematic:"Pause cinematic",playCinematic:"Play cinematic",stopCinematicAndResetCamera:"Stop cinematic and reset camera",cancel:"Cancel",annotationCategories:"Annotation categories",annotations:"Annotations",all:"All",uncategorized:"Uncategorized",decalDragHint:"Drag the decal on the object. Release to save; Escape to cancel.",showAll:"Show all",materialVariants:"Material variants",startGuidedTour:"Start guided tour",guidedTour:"Guided Tour",previousAnnotation:"Previous annotation",previous:"Prev",stopGuidedTour:"Stop guided tour",nextAnnotation:"Next annotation",next:"Next",exitFullscreen:"Exit fullscreen",enterFullscreen:"Enter fullscreen",resetCameraView:"Reset camera view",orbitControl:"Orbit Control",pointLock:"Point Lock",cameraController:"Camera controller",cameraControllerSettings:"Camera controller settings",downloadGLB:"Download GLB",downloadPNG:"Download PNG",downloadUVLayout:"Download UV Layout",videoFormat:"Video format",auto:"Auto",recordTurntableVideo:"Record turntable video",recordCinematicVideo:"Record cinematic video",videoUnsupported:"Video recording is not supported in this browser.",downloadOptions:"Download options",exporting:"Exporting\u2026",download:"Download",annotationTitlePlaceholder:"Title *",description:"Description",ok:"OK",arRelocate:"Relocate",tapToPlace:"Tap to place",closeAnnotation:"Close annotation",learnMore:"Learn more",stopMeasuring:"Stop measuring",startMeasuring:"Start measuring",toggleBoundingDimensions:"Toggle bounding dimensions",measurementTool:"Measurement tool",distance:"Distance",angle:"Angle",area:"Area",pointToPlane:"Point to plane",measurementSnapping:"Measurement snapping",noSnapping:"No snapping",snapAuto:"Snap: auto",snapVertex:"Snap: vertex",snapEdge:"Snap: edge",undoMeasurementPoint:"Undo measurement point",clearMeasurements:"Clear measurements",finishArea:"Finish area",openSceneObjectsPanel:"Open scene objects panel",sceneObjects:"SCENE OBJECTS",searchNodesLabels:"Search nodes, labels",closeSceneObjectsPanel:"Close scene objects panel",objectNavigator:"Objects in the 3D view",compareBefore:"Before",compareAfter:"After",compareDivider:"Comparison divider",viewIn3D:"View in 3D",objectNavigatorHint:"Arrow keys browse \xB7 Enter selects \xB7 Esc clears",selectionCleared:"Selection cleared",cameraKeyboardHelp:"3D view. Arrow keys orbit, Shift with Up or Down zooms, and W, A, S, D, Space and C move the camera.",isolate:"Isolate",hide:"Hide",show:"Show",closePanel:"Close panel",actions:"Actions",openPanel:"Open panel",close:"Close",position:"Position",decalNudgeHint:"Click to fine-tune \xB7 Hold to move",decalNudgeControls:"Move decal in small steps",text:"Text",yourText:"Your text",textToAdd:"Text to add",textColour:"Text colour",addText:"Add text",image:"Image",chooseImage:"Choose image",imageToAdd:"Image to add",added:"Added",colour:"Colour",size:"Size",turn:"Turn",rotation:"Rotation",dragTheDecalAcrossTheObjectsSurface:"Drag the decal across the object's surface",move:"Move",remove:"Remove",noneAddedYet:"None added yet",done:"Done",moveForward:"Move forward",moveLeft:"Move left",moveRight:"Move right",moveBackward:"Move backward",sceneSettings:"Scene Settings",background:"Background",backgroundColor:"Background Color",environment:"Environment",autoRotate:"Auto Rotate",lighting:"Lighting",exposure:"Exposure",ambientLightIntensity:"Ambient Light Intensity",ambientLightColor:"Ambient Light Color",directLightIntensity:"Direct Light Intensity",directLightColor:"Direct Light Color",searchObjects:"Search objects",uploadedModel:"Uploaded model",clear:"Clear",chooseModel:"Choose model",loadingModel:"Loading model...",releaseToLoadYourModel:"Release to load your model",arFindSurface:"Move your device over a flat surface",arReleaseToPlace:"Release to place",arGestureHint:"Pinch to resize \xB7 Twist to rotate",angleFirstArmHint:"Pick the first arm",angleVertexHint:"Pick the angle's vertex",angleSecondArmHint:"Pick the second arm",angleNewHint:"Pick a point to start a new angle",areaNewHint:"Pick a point to start a new area",areaCornersHint:"Pick polygon corners in order, then Finish area",pointToPlaneFaceHint:"Pick the reference face",pointToPlanePointHint:"Pick a point to measure its perpendicular distance",pointToPlaneNewHint:"Pick a face to start a new measurement",distanceHint:"Pick points on the model to measure distances",visibleEntries:"{count} visible entries",objectCount:"{count} objects",annotationMarker:"Annotation {id}: {title}",recordingVideo:"Recording video \xB7 {progress}%",isolatedObjects:"Isolated: {count} objects",largeModelWarning:"Very large model ({millions}M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the objects panel to select parts.",preparingLargeModel:"Preparing large model ({millions}M triangles) \u2014 the first display can take a while on this device...",enterAR:"Enter AR",enterVR:"Enter VR",decalImage:"Image {index}",decalText:"Text {index}",decalAdded:"{count} added",up:"up",down:"down",left:"left",right:"right",moveDecal:"Move decal {direction}",moveDecalOnSurface:"Move {direction} on the visible surface",showAllObject:"Show all {name}",isolateObject:"Isolate {name}",isolatedObject:"Isolated: {name}",hideObject:"Hide {name}",showObject:"Show {name}",objectSelected:"{name} selected",objectNavigatorPosition:"{position} of {count}",compareDividerValue:"{before} {percent}%, {after} {rest}%",bindingMismatchOne:"1 object binding doesn't match this model",bindingMismatchMany:"{count} object bindings don't match this model",simpleLargeModelWarning:"Very large model detected ({millions}M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the scene objects panel to select parts.",dropModelHint:"Drag and drop {formats} here",loadErrorTitle:"This model couldn't be loaded",loadErrorNotFound:"Nothing was found at this address ({status}). Check that modelUrl points to the file.",loadErrorDenied:"The server refused access to the file ({status}). Check that the file is public, or that a signed URL hasn't expired.",loadErrorStatus:"The server responded with {status} when the file was requested.",loadErrorNetwork:"The download was blocked or failed. Check that the URL is correct and, if the file is on another domain, that its server allows cross-origin requests (CORS) from this site.",loadErrorHtml:"The server sent back a web page instead of a model. There's probably no file at this path: many servers answer a missing file with their index.html.",loadErrorInvalidFile:"The file couldn't be read as {format}. Check that it's a valid {format} file.",loadErrorInvalidExplicitFormat:"The file couldn't be read as {format}. Check that it's a valid {format} file and that modelFormat matches it.",loadErrorMissingFormat:"The file couldn't be read as {format}. The URL has no file extension, so set modelFormat to the file's format.",loadErrorPointCloud:"This PLY file is a point cloud: it has points but no faces, and the viewer shows meshes. Turn it into a mesh first, for example with MeshLab or Blender.",measurementReferenceFaceRequired:"Pick a triangle face to define the reference plane.",measurementTooManyPoints:"Finish or clear this measurement before adding more points.",measurementAngleDistinct:"Pick a point away from the angle's vertex.",areaMinimumPoints:"Pick at least three points to finish the area.",areaDistinctPoints:"Area points must be distinct.",areaStraightLine:"Area points must not lie on one straight line.",areaNotPlanar:"Area points must lie on one plane.",areaEdgesCross:"Area edges must not cross or touch each other.",areaZero:"The polygon has no measurable area.",decalSurfaceMissing:"Could not find a surface on this object for the decal.",decalDirectionMissing:"No visible surface in that direction. Try another arrow or rotate the view.",fullscreenExitFailed:"Could not exit fullscreen. Press Escape to exit.",fullscreenEnterFailed:"Could not enter fullscreen. Check your browser or iframe fullscreen permissions and try again.",uvCoordinatesMissing:"This model does not contain UV coordinates.",uvExportFailed:"Could not create the UV layout archive.",videoExportFailed:"Could not export the video.",videoNotReady:"Viewer not ready for video export.",videoExitXR:"Exit the XR session before recording a video.",videoAlreadyRecording:"A video export is already in progress.",videoPathRequired:"Enable a cinematic camera path before recording it.",videoDurationInvalid:"Video duration must be greater than 0 and at most 300 seconds.",videoFrameRateInvalid:"Video frame rate must be between 1 and 60.",videoBitrateInvalid:"Video bitrate must be a positive number.",videoContextLost:"Video export stopped because the WebGL context was lost.",videoTimedOut:"Video export timed out. Keep the viewer tab visible while recording.",videoEncodingFailed:"The browser could not encode the video.",videoEmpty:"The browser produced an empty video.",videoDidNotStart:"Video recording did not start.",videoWebMUnsupported:"Video recording as WEBM is not supported in this browser.",videoMP4Unsupported:"Video recording as MP4 is not supported in this browser.",videoGIFUnsupported:"Video recording as GIF is not supported in this browser.",videoGifWidthInvalid:"GIF width must be a whole number of pixels from 16 to 4096.",environmentApartment:"apartment",environmentCity:"city",environmentDawn:"dawn",environmentForest:"forest",environmentLobby:"lobby",environmentNight:"night",environmentPark:"park",environmentStudio:"studio",environmentSunset:"sunset",environmentWarehouse:"warehouse",color:"Color",material:"Material",texturePreview:"texture preview",noTextureApplied:"No texture applied",noTextureCoordinates:"This part has no texture coordinates, so an image can't be placed on it.",replaceImage:"Replace image",uploadImage:"Upload image",removeTexture:"Remove texture",texturePosition:"Texture position",offsetX:"Offset X",offsetY:"Offset Y",confirmTexturePosition:"Confirm this texture position and exit positioning mode",donePositioning:"Done positioning",textureOffsetHint:"Double-click the object in the preview to drag its texture directly (scroll to zoom), or edit its offset numerically.",actionToggleLight:"Toggle Light",actionChangeLightColor:"Change Light Color",actionSetBrightness:"Set Brightness",actionChangeColor:"Change Color",actionChangeMaterial:"Change Material",actionToggleVisibility:"Toggle Visibility"};function oc(e,t,n={}){return(e?.[t]??pv[t]).replace(/\{(\w+)\}/g,(r,o)=>Object.prototype.hasOwnProperty.call(n,o)?String(n[o]):r)}var UT=new Map(Object.entries(pv).map(([e,t])=>[t,e]));function mv(e,t){let n=UT.get(t);return n?oc(e,n):t}var gv=require("react/jsx-runtime"),hv=(0,js.createContext)(void 0);function fv({labels:e,children:t}){return(0,gv.jsx)(hv.Provider,{value:e,children:t})}function Me(){let e=(0,js.useContext)(hv);return(0,js.useMemo)(()=>Object.assign((t,n)=>oc(e,t,n),{message:t=>mv(e,t)}),[e])}var N=require("react");var Hs=require("three"),zo=require("three-mesh-bvh"),yv=!1,Gs=new WeakMap,ac=new WeakMap;function FT(){yv||(Hs.Mesh.prototype.raycast=zo.acceleratedRaycast,yv=!0)}function jT(e){let t=new Set;return e.traverse(n=>{let i=n.geometry;!i||!i.attributes?.position||t.add(i)}),[...t]}function xv(e){let t=0;for(let n of e){let i=n.index?n.index.count:n.attributes.position.count;t+=i/3}return t}var sc=12e6;function wv(e){return bh(e)>sc}function bh(e){let t=new Set;return e.traverse(n=>{let i=n.geometry;i?.attributes?.position&&t.add(i)}),xv([...t])}function GT(e,t){return new Promise((n,i)=>{let r=c=>{let h=c.data;if(!h||!h.error&&!h.serialized)return;if(e.removeEventListener("message",r),e.removeEventListener("error",o),h.error){i(new Error(String(h.error)));return}let{serialized:p}=h,u=zo.MeshBVH.deserialize(p,t,{setIndex:!1});p.index&&(t.index?t.index.array=p.index:t.setIndex(new Hs.BufferAttribute(p.index,1,!1))),t.boundingBox=u.getBoundingBox(new Hs.Box3),n(u)},o=c=>{e.removeEventListener("message",r),e.removeEventListener("error",o),i(new Error(c.message||"BVH worker error"))};e.addEventListener("message",r),e.addEventListener("error",o);let a=t.index?t.index.array.slice():null,s=t.attributes.position.array.slice(),l=[s,...a?[a]:[]].map(c=>c.buffer);e.postMessage({index:a,position:s,options:{groups:[...t.groups]}},l)})}async function HT(){if(typeof window>"u"||typeof Worker>"u")return null;try{let{bvhWorkerCode:e}=await Promise.resolve().then(()=>(vv(),bv)),t=new Blob([e],{type:"text/javascript"}),n=URL.createObjectURL(t),i=new Worker(n);return{worker:i,dispose:()=>{i.terminate(),URL.revokeObjectURL(n)}}}catch{return null}}async function WT(e,t){if(t)try{return await GT(t,e)}catch{}let n=zo.computeBoundsTree.call(e);return e.boundsTree=void 0,await new Promise(i=>setTimeout(i,0)),n}async function XT(e,t,n){if(e.boundsTree)return;if(t.buildPromise)return t.buildPromise;let i=(async()=>{let r=await n();t.references>0&&!e.boundsTree&&(e.boundsTree=r,t.ownedTree=r)})();return t.buildPromise=i.finally(()=>{t.buildPromise=void 0,t.references===0&&Gs.delete(e)}),t.buildPromise}async function Qd(e,t){if(t?.aborted)return;let n=ac.get(e);if(!n){if(n=jT(e),xv(n)>sc){ac.set(e,[]);return}ac.set(e,n);for(let r of n){let o=Gs.get(r)??{references:0};o.references+=1,Gs.set(r,o)}}if(n.length===0)return;FT();let i=await HT();if(t?.aborted){i?.dispose();return}try{for(let r of n){if(t?.aborted)return;let o=Gs.get(r);o&&await XT(r,o,()=>WT(r,i?.worker))}}finally{i?.dispose()}}function lc(e){let t=ac.get(e);if(t){ac.delete(e);for(let n of t){let i=Gs.get(n);i&&(i.references=Math.max(0,i.references-1),!(i.references>0)&&(i.ownedTree&&n.boundsTree===i.ownedTree&&(zo.disposeBoundsTree.call(n),n.boundsTree=void 0),i.ownedTree=void 0,i.buildPromise||Gs.delete(n)))}}}var am=require("@react-three/drei"),yo=require("three");var Sv=require("lucide-react");var Uo=require("react/jsx-runtime");function Na({title:e,message:t,tone:n="default"}){return(0,Uo.jsxs)("div",{className:`ri-license-overlay${n==="error"?" ri-license-overlay--error":""}`,children:[(0,Uo.jsxs)("div",{className:"ri-license-overlay__header",children:[n==="error"?(0,Uo.jsx)(Sv.AlertTriangle,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):(0,Uo.jsx)("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),(0,Uo.jsx)("span",{className:"ri-license-overlay__title",children:e})]}),(0,Uo.jsx)("p",{className:"ri-license-overlay__message",children:t})]})}var _v=require("react"),eu=class extends _v.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,i){this.props.onLoadError?.(n)}render(){return this.state.hasError?null:this.props.children}};var Ws=require("three");var Mv="riEditorGizmo";function tu(e){return e.userData[Mv]=!0,e}function nu(e){let t=[];return e.traverse(n=>{n.visible&&n.userData[Mv]&&(n.visible=!1,t.push(n))}),()=>{for(let n of t)n.visible=!0}}var ru=require("react");function Ii(e){return!!e?.isWebGPURenderer}var Cv;function qT(){return Cv??(Cv=(async()=>{let e=typeof navigator>"u"?void 0:navigator.gpu;if(!e)return!1;try{return!!await e.requestAdapter()}catch{return!1}})()),Cv}var Tv=!1;function Pv(e){let[t,n]=(0,ru.useState)(null);return(0,ru.useEffect)(()=>{if(!e)return;let i=!1;return qT().then(r=>{i||(!r&&!Tv&&(Tv=!0,console.info("[react-immersive] WebGPU isn't available in this browser; using WebGL.")),n(r))}),()=>{i=!0}},[e]),e?t===null?null:t?"webgpu":"webgl":"webgl"}async function Av(e){let{WebGPURenderer:t}=await import("three/webgpu"),n=new t({canvas:e.canvas,antialias:e.antialias??!0,alpha:e.alpha??!0});return await n.init(),n}function iu(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:n,scene:i,camera:r,invalidate:o}=e,a=Ii(n);if(!a&&!n.getContextAttributes().preserveDrawingBuffer)return Promise.reject(new Error("Screenshot capture is disabled. Set preserveDrawingBuffer on ModelViewer to enable it."));let{transparent:s=!1}=t,l=n.getSize(new Ws.Vector2),c=n.getPixelRatio(),h=r instanceof Ws.PerspectiveCamera?r.aspect:null,p=i.background,u=t.width??l.x,m=t.height??l.y,f=u!==l.x||m!==l.y,g=nu(i);s&&(i.background=null),f&&(n.setPixelRatio(1),n.setSize(u,m,!1),r instanceof Ws.PerspectiveCamera&&(r.aspect=u/m,r.updateProjectionMatrix()));let b=()=>{g(),s&&(i.background=p),f&&(n.setPixelRatio(c),n.setSize(l.x,l.y,!1),r instanceof Ws.PerspectiveCamera&&h!==null&&(r.aspect=h,r.updateProjectionMatrix())),o()};if(a)try{return n.render(i,r),Promise.resolve(n.domElement.toDataURL("image/png"))}catch(y){return Promise.reject(y)}finally{b()}return o(),new Promise((y,v)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let w,M;try{w=n.domElement.toDataURL("image/png")}catch(_){M=_}b(),M?v(M):y(w)})})})}var Br=require("react"),xh=require("three");var Qt=require("react"),ou=require("@react-three/fiber"),Hn=require("three");function vh(e){if(e.duration!==void 0)return e.duration;let t=e.waypoints??[];if(t.length<2)return 24;let n=e.loop===!1?t.slice(0,-1):t;return Math.max(n.reduce((i,r)=>i+(r.segmentDuration??3.5),0),4)}var $T=1.2;function au({controlsRef:e,sceneRef:t,config:n,playing:i,resetOnPlay:r=!1,onFinished:o,onUserInteract:a,onStop:s,playOnce:l=!1,startAtPath:c=!1,onStarted:h,onProgress:p}){let u=(0,ou.useThree)(O=>O.invalidate),m=(0,Qt.useMemo)(()=>n.waypoints??[],[n.waypoints]),f=m.length>=2,g=n.loop??!0,b=vh(n),y=(0,Qt.useMemo)(()=>m.map(O=>[...O.position,...O.target,O.azimuthAngle??"",O.polarAngle??"",O.segmentDuration??""].join(",")).join(";"),[m]),v=(0,Qt.useMemo)(()=>{let O=[];if(m.length<2)return O;let I=0;for(let re=0;re<m.length-1;re++)I+=m[re].segmentDuration??3.5,O.push(I);return g&&m.length>1&&(I+=m[m.length-1].segmentDuration??3.5,O.push(I)),O},[m,g]),w=(0,Qt.useMemo)(()=>O=>{if(m.length<2||v.length===0)return O/b;let I=v[v.length-1],re=g?O%b:Math.min(O,b),ke=b>0?re/b*I:0;for(let te=0;te<v.length;te++)if(ke<=v[te]){let We=te===0?0:v[te-1],wt=v[te]-We,be=wt>0?(ke-We)/wt:0,ue=g?m.length:m.length-1,Ne=te/ue,Te=1/ue;return Ne+be*Te}return 1},[m.length,v,b,g]),M=(0,Qt.useMemo)(()=>f?{position:new Hn.CatmullRomCurve3(m.map(O=>new Hn.Vector3(...O.position)),g,"catmullrom",.5),target:new Hn.CatmullRomCurve3(m.map(O=>new Hn.Vector3(...O.target)),g,"catmullrom",.5)}:null,[y,f,g]),_=(0,Qt.useMemo)(()=>{if(!f||!m.every(I=>Number.isFinite(I.azimuthAngle)&&Number.isFinite(I.polarAngle)))return null;let O=m.map(I=>({azimuth:I.azimuthAngle,polar:I.polarAngle,distance:new Hn.Vector3(...I.position).distanceTo(new Hn.Vector3(...I.target))}));for(let I=1;I<O.length;I+=1){let re=O[I-1].azimuth,ke=O[I].azimuth;O[I].azimuth=ke+Math.round((re-ke)/(Math.PI*2))*Math.PI*2}return O},[y,f]),x=(0,Qt.useRef)(0),P=(0,Qt.useRef)(0),d=(0,Qt.useRef)(new Hn.Vector3),S=(0,Qt.useRef)(new Hn.Vector3),C=(0,Qt.useRef)(!1),T=(0,Qt.useRef)(!0),E=(0,Qt.useRef)(0),k=(0,Qt.useRef)(!1),D=(0,Qt.useRef)(null),B=(0,Qt.useMemo)(()=>new Hn.Vector3,[]),L=(0,Qt.useMemo)(()=>new Hn.Vector3,[]),X=(0,Qt.useMemo)(()=>new Hn.Spherical,[]);return(0,Qt.useEffect)(()=>{x.current=0,E.current=0,P.current=0,k.current=!1},[y,g,b]),(0,Qt.useEffect)(()=>{r&&(E.current=0,x.current=0,k.current=!1)},[r]),(0,Qt.useEffect)(()=>{if(!i){C.current=!1,x.current>0&&!r?E.current=x.current:r&&(E.current=0),(x.current>0||k.current)&&s?.();return}x.current>=b&&!g&&(x.current=0,E.current=0,k.current=!1);let O=e.current;if(O&&(O.getPosition(d.current),O.getTarget(S.current)),r||k.current||E.current===0?(x.current=0,E.current=0,k.current=!1):E.current>0&&E.current<b?x.current=E.current:(x.current=0,E.current=0),P.current=0,!f){let I=t.current;if(I){let re=new Hn.Box3().setFromObject(I).getBoundingSphere(new Hn.Sphere);D.current={center:re.center.clone(),radius:re.radius>0?re.radius:1}}}C.current=!0,T.current=!0,u()},[i,f,e,t,u,b,g,y,r,s]),(0,Qt.useEffect)(()=>{if(!i||!a)return;let O=e.current;if(!O)return;let I=()=>{k.current||a()};return O.addEventListener("controlstart",I),()=>O.removeEventListener("controlstart",I)},[i,e,a]),(0,ou.useFrame)((O,I)=>{if(!i||!C.current)return;let re=e.current;if(!re)return;let ke=T.current;T.current=!1,(!ke||!c)&&(x.current+=I,P.current+=I);let te=(!g||l)&&x.current>=b,We=te&&g?0:w(x.current);if(We=g?We%1:Math.min(We,1),M)if(M.target.getPoint(We,L),_){let be=g?_.length:_.length-1,ue=Math.min(We,1)*be,Ne=Math.min(Math.floor(ue),be-1),Te=(Ne+1)%_.length,bn=We>=1?1:ue-Ne,Oe=bn*bn*(3-2*bn),ot=_[Ne],mt=_[Te],vn=mt.azimuth+Math.round((ot.azimuth-mt.azimuth)/(Math.PI*2))*Math.PI*2,de=ot.azimuth+(vn-ot.azimuth)*Oe,ur=ot.polar+(mt.polar-ot.polar)*Oe,jt=ot.distance+(mt.distance-ot.distance)*Oe;X.set(Math.max(jt,1e-6),Math.min(Math.max(ur,1e-6),Math.PI-1e-6),de),B.setFromSpherical(X).add(L)}else M.position.getPoint(We,B);else{let be=D.current;if(!be)return;let ue=We*Math.PI*2,Ne=be.radius*2.2;B.set(be.center.x+Math.cos(ue)*Ne,be.center.y+be.radius*.6,be.center.z+Math.sin(ue)*Ne),L.copy(be.center)}let wt=c?1:Math.min(P.current/$T,1);if(wt<1){let be=wt*wt*(3-2*wt);B.lerpVectors(d.current,B,be),L.lerpVectors(S.current,L,be)}if(re.setLookAt(B.x,B.y,B.z,L.x,L.y,L.z,!1),ke&&h?.(),p?.(Math.min(x.current/b,1)),te){C.current=!1,k.current=!0,x.current=0,E.current=0,o?.();return}u()}),null}function Ev(){return typeof document<"u"&&typeof HTMLCanvasElement<"u"&&typeof HTMLCanvasElement.prototype.captureStream=="function"}function Rv(e,t={}){let{fps:n=15,gifWidth:i=480,signal:r}=t;if(!Number.isFinite(n)||n<1||n>60)throw new Error("Video frame rate must be between 1 and 60.");if(!Number.isInteger(i)||i<16||i>4096)throw new Error("GIF width must be a whole number of pixels from 16 to 4096.");if(r?.aborted)throw new DOMException("Video export cancelled.","AbortError");if(typeof e.captureStream!="function"||typeof document>"u")throw new Error("Video recording as GIF is not supported in this browser.");let o=1e3/n,a,s,l,c=null,h,p=0,u=0,m=0,f=null,g=0,b=0,y=0,v=!1,w=!1,M,_,x,P,d,S,C=new Promise((I,re)=>{d=I,S=re}),T=()=>{clearTimeout(M),clearInterval(_),x!==void 0&&cancelAnimationFrame(x),P!==void 0&&cancelAnimationFrame(P),r?.removeEventListener("abort",k),e.removeEventListener("webglcontextlost",D),l&&(l.pause(),l.srcObject=null),s?.getTracks().forEach(I=>I.stop())},E=(I=new DOMException("Video export cancelled.","AbortError"))=>{v||(v=!0,T(),S(I))},k=()=>E(),D=()=>E(new Error("Video export stopped because the WebGL context was lost.")),B=()=>E(new Error("Video export timed out. Keep the viewer tab visible while recording."));r?.addEventListener("abort",k,{once:!0}),e.addEventListener("webglcontextlost",D),M=setTimeout(B,3e4);let L=(async()=>{if(a=await import("gifenc"),!v&&(s=e.captureStream(n),l=document.createElement("video"),l.muted=!0,l.playsInline=!0,l.srcObject=s,await l.play(),!v)){if(c=document.createElement("canvas").getContext("2d",{willReadFrequently:!0}),!c)throw new Error("Video recording as GIF is not supported in this browser.");h=a.GIFEncoder()}})().catch(I=>E(I)),X=I=>{if(!f||!h)return;let re=Math.max(2,Math.round((I-g)/10)-y);y+=re,h.writeFrame(f.index,p,u,{palette:f.palette,delay:re*10}),f=null},O=()=>{if(v||!a||!l||!c||!h||l.readyState<2||!l.videoWidth)return;let I=performance.now();if(!(m>0&&I-b<o/2)){p||(p=Math.min(i,l.videoWidth),u=Math.max(1,Math.round(p*l.videoHeight/l.videoWidth)),c.canvas.width=p,c.canvas.height=u);try{c.drawImage(l,0,0,p,u);let{data:re}=c.getImageData(0,0,p,u),ke=a.quantize(re,256),te=a.applyPalette(re,ke);m===0&&(g=I),X(I),f={index:te,palette:ke},b=I,m+=1}catch(re){E(re)}}};return{result:C,cancel:E,start(I){v||x!==void 0||(x=requestAnimationFrame(()=>{L.then(()=>{v||(O(),_=setInterval(O,o),clearTimeout(M),M=setTimeout(B,(I+30)*1e3))})}))},finish(){v||w||(w=!0,P=requestAnimationFrame(()=>{L.then(()=>{if(v||(O(),v))return;if(!h||m===0){E(new Error("The browser produced an empty video."));return}X(b+o),h.finish();let I=new Blob([h.bytes()],{type:"image/gif"});v=!0,T(),d(I)})}))}}}var yh={webm:["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"],mp4:["video/mp4;codecs=avc1.42E01E","video/mp4"]};function Qi(e="auto"){return e==="gif"?Ev()?"image/gif":null:typeof MediaRecorder>"u"?null:(e==="auto"?[...yh.webm,...yh.mp4]:yh[e]).find(n=>MediaRecorder.isTypeSupported(n))??null}function kv(e,t={}){if(t.format==="gif")return Rv(e,t);let{fps:n=30,videoBitsPerSecond:i=8e6,signal:r}=t;if(!Number.isFinite(n)||n<1||n>60)throw new Error("Video frame rate must be between 1 and 60.");if(!Number.isFinite(i)||i<=0)throw new Error("Video bitrate must be a positive number.");if(r?.aborted)throw new DOMException("Video export cancelled.","AbortError");let o=Qi(t.format);if(!o||typeof e.captureStream!="function"){let x=t.format&&t.format!=="auto"?` as ${t.format.toUpperCase()}`:"";throw new Error(`Video recording${x} is not supported in this browser.`)}let a,s,l=!1,c=!1,h,p,u,m=[],f,g,b=new Promise((x,P)=>{f=x,g=P}),y=()=>{clearTimeout(h),p!==void 0&&cancelAnimationFrame(p),u!==void 0&&cancelAnimationFrame(u),r?.removeEventListener("abort",w),e.removeEventListener("webglcontextlost",M),s&&(s.ondataavailable=null,s.onstop=null,s.onerror=null),a?.getTracks().forEach(x=>x.stop())},v=(x=new DOMException("Video export cancelled.","AbortError"))=>{if(!l){if(l=!0,y(),s&&s.state!=="inactive")try{s.stop()}catch{}g(x)}},w=()=>v(),M=()=>v(new Error("Video export stopped because the WebGL context was lost.")),_=()=>v(new Error("Video export timed out. Keep the viewer tab visible while recording."));return r?.addEventListener("abort",w,{once:!0}),e.addEventListener("webglcontextlost",M),h=setTimeout(_,3e4),{result:b,cancel:v,start(x){l||p!==void 0||(p=requestAnimationFrame(()=>{if(!l)try{a=e.captureStream(n);let P=new MediaRecorder(a,{mimeType:o,videoBitsPerSecond:i});s=P,P.ondataavailable=({data:d})=>{d.size>0&&m.push(d)},P.onerror=()=>v(new Error("The browser could not encode the video.")),P.onstop=()=>{if(l)return;l=!0,y();let d=new Blob(m,{type:P.mimeType||o});d.size===0?g(new Error("The browser produced an empty video.")):f(d)},P.start(1e3),clearTimeout(h),h=setTimeout(_,(x+30)*1e3)}catch(P){v(P)}}))},finish(){l||c||(c=!0,u=requestAnimationFrame(()=>{if(!l)try{if(!s)throw new Error("Video recording did not start.");s.stop()}catch(x){v(x)}}))}}}function Lv(e){let t=(0,Br.useRef)(e);t.current=e;let n=(0,Br.useRef)(null),[i,r]=(0,Br.useState)(null),[o,a]=(0,Br.useState)(0),s=(0,Br.useCallback)(()=>n.current?.cancel(),[]),l=(0,Br.useCallback)(()=>n.current!==null,[]);(0,Br.useEffect)(()=>s,[e.modelUrl,s]);let c=(0,Br.useCallback)(async(p={})=>{let{rendererCaptureRef:u,controlsRef:m,cinematicConfig:f,ready:g,onCaptureStart:b}=t.current,y=u.current,v=m.current;if(!g||!y||!v)throw new Error("Viewer not ready for video export.");if(y.gl.xr.isPresenting)throw new Error("Exit the XR session before recording a video.");if(n.current)throw new Error("A video export is already in progress.");let w=p.mode??(f?"cinematic":"turntable");if(w==="cinematic"&&!f)throw new Error("Enable a cinematic camera path before recording it.");let M=w==="cinematic"?f:{loop:!0},_=p.duration??(w==="turntable"&&p.format==="gif"?8:vh(M));if(!Number.isFinite(_)||_<=0||_>300)throw new Error("Video duration must be greater than 0 and at most 300 seconds.");let x=kv(y.gl.domElement,p);n.current=x;let P=v.getPosition(new xh.Vector3),d=v.getTarget(new xh.Vector3),S=v.enabled,C=nu(y.scene);v.stop(),v.enabled=!1,a(0),b(),r({config:{...M,duration:_,autoPlay:!1},onStarted:()=>x.start(_),onFinished:x.finish});try{return await x.result}finally{C(),v.enabled=S,v.setLookAt(P.x,P.y,P.z,d.x,d.y,d.z,!1),y.invalidate(),n.current=null,r(null)}},[]),h=(0,Br.useCallback)(p=>{let u=Math.floor(p*100);a(m=>m===u?m:u)},[]);return{captureVideo:c,cancelVideo:s,isRecording:l,recording:i,progress:o,onProgress:h}}var $r=require("react");function Dv(e){let[t,n]=(0,$r.useState)(null),[i,r]=(0,$r.useState)(!1),[o,a]=(0,$r.useState)(!1),[s,l]=(0,$r.useState)(!1),[c,h]=(0,$r.useState)(null),p=(0,$r.useRef)(!1);(0,$r.useEffect)(()=>{if(!t||!e){r(!1),a(!1),h(null);return}let m=t.ownerDocument;r(m.fullscreenEnabled===!0&&typeof t.requestFullscreen=="function"&&typeof m.exitFullscreen=="function");let f=()=>{a(m.fullscreenElement===t),h(null)};return f(),m.addEventListener("fullscreenchange",f),()=>m.removeEventListener("fullscreenchange",f)},[t,e]);let u=(0,$r.useCallback)(async()=>{if(!t||!e||!i||p.current)return;let m=t.ownerDocument,f=m.fullscreenElement===t;p.current=!0,l(!0),h(null);try{f?await m.exitFullscreen():await t.requestFullscreen(),a(m.fullscreenElement===t)}catch{h(f?"Could not exit fullscreen. Press Escape to exit.":"Could not enter fullscreen. Check your browser or iframe fullscreen permissions and try again.")}finally{p.current=!1,l(!1)}},[t,e,i]);return{rootRef:n,supported:i,active:o,pending:s,error:c,toggle:u}}var Wn=require("react");function Nv(e,{onLost:t,onRestored:n,initiallyLost:i=!1}){let r=i,o=s=>{s.preventDefault(),!r&&(r=!0,t())},a=()=>{r&&(r=!1,n())};return e.addEventListener("webglcontextlost",o),e.addEventListener("webglcontextrestored",a),i&&t(),()=>{e.removeEventListener("webglcontextlost",o),e.removeEventListener("webglcontextrestored",a)}}var su=require("@react-three/fiber"),wh=require("react");function Ov({captureRef:e}){let{gl:t,scene:n,camera:i,invalidate:r,get:o}=(0,su.useThree)();return(0,wh.useEffect)(()=>{if(!e)return;let a=()=>{let s=o();s.advance(s.frameloop==="never"?s.clock.elapsedTime:performance.now())};return e.current={gl:t,scene:n,camera:i,invalidate:r,drawNow:a},()=>{e.current=null}},[e,t,n,i,r,o]),null}function Iv(){let e=(0,su.useThree)(n=>n.frameloop),t=(0,su.useThree)(n=>n.invalidate);return(0,wh.useEffect)(()=>{e!=="never"&&t()},[e,t]),null}function Bv(e){e.dispose(),"forceContextLoss"in e&&!Ii(e)&&(e.forceContextLoss(),e.forceContextLoss=()=>{})}function zv(e){if(!e)return Promise.resolve(null);try{e.drawNow();let t=e.gl.domElement;return new Promise(n=>{t.toBlob(i=>n(i?URL.createObjectURL(i):null),"image/webp",.85)})}catch{return Promise.resolve(null)}}function Uv(e){let t=(0,Wn.useRef)(e);t.current=e;let[n,i]=(0,Wn.useState)(null),[r,o]=(0,Wn.useState)(0),[a,s]=(0,Wn.useState)("ready"),l=(0,Wn.useRef)(null),c=(0,Wn.useRef)(!1),h=(0,Wn.useRef)(null),p=(0,Wn.useRef)(null),u=(0,Wn.useCallback)(b=>{p.current?.dispose(),p.current=null,h.current=b,i(b)},[]),m=(0,Wn.useCallback)(()=>{c.current||(c.current=!0,t.current?.(),l.current?.(),l.current=null,h.current&&(p.current=h.current),h.current=null,i(null),s("rebuilding"),o(b=>b+1))},[]),f=(0,Wn.useCallback)(()=>{l.current?.(),l.current=null;let b=h.current;h.current=null,i(null),b&&Bv(b)},[]),g=(0,Wn.useCallback)(()=>{c.current=!1,s("lost")},[]);return(0,Wn.useEffect)(()=>()=>{p.current?.dispose(),p.current=null},[]),(0,Wn.useEffect)(()=>{if(!n)return;if(c.current=!1,s("ready"),Ii(n)){let y=n,v=y.onDeviceLost;return y.onDeviceLost=w=>{console.warn("[react-immersive] The WebGPU device was lost.",w),g()},()=>{y.onDeviceLost=v}}let b=Nv(n.domElement,{initiallyLost:n.getContext().isContextLost(),onLost:g,onRestored:m});return l.current=b,()=>{b(),l.current===b&&(l.current=null)}},[n,g,m]),{generation:r,status:a,reload:m,fail:g,release:f,onRendererCreated:u}}var cu=require("react");var cc=require("react"),YT="200px",Vv=new Map;function Fv(e,t,n){let i=Vv.get(t);if(!i){let a=new Map;i={observer:new IntersectionObserver(l=>{for(let c of l)a.get(c.target)?.(c.isIntersecting)},{rootMargin:t}),watchers:a},Vv.set(t,i)}let{observer:r,watchers:o}=i;return o.set(e,n),r.observe(e),()=>{o.delete(e),r.unobserve(e)}}function jv(e){let t=typeof IntersectionObserver<"u",[n,i]=(0,cc.useState)(!t),[r,o]=(0,cc.useState)(!t);return(0,cc.useEffect)(()=>{let a=e.current;if(!a||!t)return;let s=Fv(a,YT,i),l=Fv(a,"0px",o);return()=>{s(),l()}},[e,t]),{near:n,visible:r}}var Vo=require("react");function Sh(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function _h(){if(typeof navigator>"u")return!1;let e=navigator.userAgent;return/iPhone|iPad|iPod/i.test(e)?!0:navigator.platform==="MacIntel"&&typeof navigator.maxTouchPoints=="number"&&navigator.maxTouchPoints>1}function Gv(){return Sh()||_h()}function KT(){if(typeof window>"u"||typeof navigator>"u")return!1;let e=a=>typeof window.matchMedia=="function"&&window.matchMedia(a).matches,t=e("(pointer: coarse)")||e("(any-pointer: coarse)"),n=e("(hover: none)")||e("(any-hover: none)"),i=navigator.maxTouchPoints>0,r=typeof window.screen<"u"&&Math.min(window.screen.width,window.screen.height)<=1024,o=Sh();return t||o||i&&n||i&&r}function dc(){if(!KT())return!1;if(Sh())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function Hv(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return dc()}}function ZT(e,t){let n=new Set,i=r=>{for(let o of r){if(n.size>=t)return;n.add(o.id)}};return i(e.filter(r=>r.wanted).sort((r,o)=>Number(o.visible)-Number(r.visible)||Number(o.live)-Number(r.live)||r.since-o.since)),i(e.filter(r=>!r.wanted&&r.live).sort((r,o)=>o.since-r.since)),n}var JT=12,QT=6,lu=new Map,e2=1,Mh=!1,Wv;function Xv(){Mh||(Mh=!0,queueMicrotask(()=>{Mh=!1,Wv??(Wv=dc()?QT:JT);let e=ZT([...lu.values()],Wv);for(let t of lu.values()){let n=e.has(t.id);n!==t.live&&(t.live=n,t.onLiveChange(n))}}))}function qv({managed:e,wanted:t,visible:n,onPark:i}){let[r,o]=(0,Vo.useState)(!1),a=(0,Vo.useRef)(i);a.current=i;let s=(0,Vo.useRef)(null);return(0,Vo.useEffect)(()=>{if(!e)return;let l={id:e2++,wanted:!1,visible:!1,live:!1,since:performance.now(),onLiveChange:c=>{c||a.current?.(),o(c)}};return lu.set(l.id,l),s.current=l,()=>{lu.delete(l.id),s.current=null,o(!1),Xv()}},[e]),(0,Vo.useEffect)(()=>{let l=s.current;!l||l.wanted===t&&l.visible===n||(l.wanted!==t&&(l.since=performance.now()),l.wanted=t,l.visible=n,Xv())},[e,t,n]),e?r:t}function $v({loading:e="lazy",reveal:t="auto",rootRef:n,onPark:i}){let{near:r,visible:o}=jv(n),[a,s]=(0,cu.useState)(t==="auto");return(0,cu.useEffect)(()=>{t==="auto"&&s(!0)},[t]),{live:qv({managed:e==="lazy",wanted:a&&(e==="eager"||r),visible:o,onPark:i}),visible:o,awaitingReveal:!a,reveal:()=>s(!0)}}var Yv=require("lucide-react");var Oa=require("react/jsx-runtime");function du({src:e,hidden:t=!1}){return e?(0,Oa.jsx)("img",{className:`ri-poster${t?" ri-poster--hidden":""}`,src:e,alt:"","aria-hidden":"true",draggable:!1,decoding:"async"}):null}function Kv({className:e,background:t,poster:n,onReveal:i}){let r=Me();return(0,Oa.jsxs)("div",{className:`${e} ri-viewerPlaceholder`,style:{background:t},children:[(0,Oa.jsx)(du,{src:n}),i?(0,Oa.jsxs)("button",{type:"button",className:"ri-revealButton",onClick:i,children:[(0,Oa.jsx)(Yv.Box,{size:16,"aria-hidden":"true"}),r("viewIn3D")]}):null]})}var uu=require("react");function Fo(e,t){let n=(0,uu.useRef)(t);(0,uu.useEffect)(()=>{let i=n.current;n.current=t,t.some((r,o)=>!Object.is(r,i[o]))&&e()},t)}function Ch(e,t){if(e)return e;let n=t?.background;return n?.enabled&&n.type==="color"?n.color:"#1c1c1d"}function pu(e,t){return t||e}async function Zv(e,t){await e.setLookAt(...t.position,...t.target,!1);let n=e.camera;t.fov!=null&&Number.isFinite(t.fov)&&t.fov>0&&t.fov<180&&"fov"in n&&(n.fov=t.fov,n.updateProjectionMatrix()),t.zoom!=null&&Number.isFinite(t.zoom)&&t.zoom>0&&await e.zoomTo(t.zoom,!1)}var Jv=require("react"),Xs=class extends Jv.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,i){this.props.onError?.(n)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};var qs=require("react");function Qv({modelUrl:e,tilesetUrl:t=null,getOptions:n,now:i=()=>performance.now(),timestamp:r=()=>new Date().toISOString(),sessionId:o=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`viewer-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,log:a=l=>console.info("[react-immersive engagement]",l),warn:s=l=>console.warn("[react-immersive] onEngagement callback failed:",l)}){let l=i(),c=()=>{let T=n();return!!(T.onEngagement||T.debugEngagement)},h=T=>Math.max(0,Math.round(i()-T)),p=T=>{let{onEngagement:E,debugEngagement:k}=n();if(!E&&!k)return;let D={...T,sessionId:o,timestamp:r(),elapsedMs:h(l),modelUrl:e,tilesetUrl:t};k&&a(D);try{Promise.resolve(E?.(D)).catch(s)}catch(B){s(B)}},u=null,m=null,f="[]",g=null,b=null,y=T=>{u=T},v=T=>{!c()||u===T.objectKey||(u=T.objectKey,p({type:"part-viewed",...T}))},w=(T,E,k=null)=>{let D=JSON.stringify([k,E,T]);!c()||T===E||D===m||(m=D,p({type:"variant-chosen",variant:T,previousVariant:E,group:k}))},M=T=>{let E=JSON.stringify(T);E!==f&&(f=E,m=null)},_=()=>{!c()||g!==null||(g=i(),p({type:"ar-started"}))},x=(T="session-ended")=>{if(g===null)return;let E=h(g);g=null,p({type:"ar-ended",durationMs:E,reason:T})},P=(T="stopped")=>{if(!b)return;let{startedAt:E,annotationCount:k}=b;b=null,p({type:"tour-stopped",annotationCount:k,durationMs:h(E),reason:T})};return{setSelectedPart:y,viewPart:v,setActiveVariants:M,chooseVariant:w,startAR:_,endAR:x,startTour:T=>{!c()||T<=0||(P("restarted"),b={startedAt:i(),annotationCount:T},p({type:"tour-started",annotationCount:T}))},stopTour:P,completeTour:()=>{if(!b)return;let{startedAt:T,annotationCount:E}=b;b=null,p({type:"tour-completed",annotationCount:E,durationMs:h(T)})},interrupt:()=>{x("interrupted"),P("interrupted")},requestARLaunch:T=>p({type:"ar-launch-requested",channel:T})}}function ey(e){let t=(0,qs.useRef)(e);t.current=e;let n=!!(e.onEngagement||e.debugEngagement),i=(0,qs.useMemo)(()=>Qv({modelUrl:e.modelUrl,tilesetUrl:e.tilesetUrl,getOptions:()=>t.current}),[e.modelUrl,e.tilesetUrl,n]);return(0,qs.useEffect)(()=>()=>i.interrupt(),[i]),i}var $s=require("fflate");var ty;function ny(e){ty=e}function uc(e){ty?.(e)}var t2=[".glb",".gltf",".obj",".fbx",".usdz",".stl",".ply",".zip"],n2=["model/gltf-binary","model/gltf+json","model/vnd.usdz+zip","application/vnd.usdz+zip","application/zip","application/x-zip-compressed"],pc=1024*1024,ry=128*pc,iy=1024,oy=128*pc,ay=256*pc,sy=200,r2=pc,eo=new Map,uy=".glb,.gltf,.obj,.fbx,.usdz,.stl,.ply,.zip,model/gltf-binary,model/gltf+json,model/vnd.usdz+zip,application/vnd.usdz+zip,application/zip";function mc(e){let t=e.split(/[?#]/,1)[0].toLowerCase();return t.endsWith(".obj")?"obj":t.endsWith(".fbx")?"fbx":t.endsWith(".usdz")?"usdz":t.endsWith(".stl")?"stl":t.endsWith(".ply")?"ply":t.endsWith(".gltf")?"gltf":"glb"}function py(e){return eo.get(e)??{format:mc(e)}}function i2(e){let t=e.name.toLowerCase();return t2.some(n=>t.endsWith(n))||n2.includes(e.type)}async function Ph(e){if(!i2(e))throw new Error("Unsupported model file. Please upload a .glb, .gltf, .obj, .fbx, .usdz, .stl, .ply, or .zip asset.");let t=e.name.toLowerCase();if(t.endsWith(".usdz")||e.type==="model/vnd.usdz+zip"||e.type==="application/vnd.usdz+zip")return ly(e,"usdz");if(t.endsWith(".zip")||o2(e.type))return a2(e);if(t.endsWith(".gltf")||e.type==="model/gltf+json")return cy(e);let n=mc(e.name);return n==="gltf"?cy(e):ly(e,n)}function ly(e,t){let n=URL.createObjectURL(e);return eo.set(n,{format:t,entryPath:e.name}),{url:n,name:e.name,format:t,cleanup:()=>{uc(n),eo.delete(n),URL.revokeObjectURL(n)}}}function o2(e){return e==="application/zip"||e==="application/x-zip-compressed"}async function cy(e){let t=await e.text(),n=my(t,e.name);for(let r of hy(n))if(!Ah(r))throw new Error(`${e.name} references external assets. Upload a .zip containing the .gltf file and its dependencies.`);let i=URL.createObjectURL(e);return eo.set(i,{format:"gltf",entryPath:e.name}),{url:i,name:e.name,format:"gltf",cleanup:()=>{uc(i),eo.delete(i),URL.revokeObjectURL(i)}}}async function a2(e){if(e.size>ry)throw new Error(`Model zip is too large. The compressed archive must be ${Th(ry)} or smaller.`);let t=await s2(new Uint8Array(await e.arrayBuffer())),n=new Map;for(let[a,s]of Object.entries(t)){let l=Eh(a);!l||fy(l)||n.set(l,s)}let i=[...n.keys()].filter(a=>/\.(gltf|obj|fbx|stl|ply)$/i.test(a));if(i.length===0)throw new Error("Invalid model zip: no .gltf, .obj, .fbx, .stl, or .ply file found.");if(i.length>1)throw new Error("Invalid model zip: multiple model entry files found.");let r=i[0],o=mc(r);if(o==="gltf")return c2(e,r,n);if(o==="obj"||o==="fbx"||o==="stl"||o==="ply")return l2(e,r,o,n);throw new Error(`Unsupported model entry ${r}.`)}function s2(e){return new Promise((t,n)=>{let i=0,r=0,o=null,a=l=>(o??(o=new Error(`Invalid model zip: ${l}`)),!1);(0,$s.unzip)(e,{filter:l=>{if(o)return!1;if(i+=1,i>iy)return a(`archive contains more than ${iy.toLocaleString()} entries.`);if(l.originalSize>oy)return a(`${l.name} expands beyond the ${Th(oy)} per-file limit.`);if(r+=l.originalSize,r>ay)return a(`expanded contents exceed ${Th(ay)}.`);if(l.originalSize>=r2&&(l.size===0||l.originalSize/l.size>sy))return a(`${l.name} exceeds the ${sy}:1 compression-ratio limit.`);let c=Eh(l.name);return!!c&&!fy(c)}},(l,c)=>{o?n(o):l?n(new Error(`Invalid model zip: ${l.message}`)):t(c)})})}function Th(e){return`${e/pc} MiB`}function l2(e,t,n,i){let r=[],o={};for(let[s,l]of i){let c=URL.createObjectURL(new Blob([l],{type:gy(s)}));r.push(c),o[s]=c}let a=o[t];if(!a)throw r.forEach(s=>URL.revokeObjectURL(s)),new Error(`Invalid model zip: could not read ${t}.`);return eo.set(a,{format:n,entryPath:t,resourceUrls:o}),{url:a,name:e.name,format:n,cleanup:()=>{uc(a),eo.delete(a),r.forEach(s=>URL.revokeObjectURL(s))}}}function c2(e,t,n){let i=n.get(t);if(!i)throw new Error("Invalid GLTF zip: no .gltf found.");let r=my((0,$s.strFromU8)(i),t);d2(r,t);let o=u2(t),a=[];try{dy(r.buffers,o,n,a),dy(r.images,o,n,a);let s=new Blob([(0,$s.strToU8)(JSON.stringify(r))],{type:"model/gltf+json"}),l=URL.createObjectURL(s);return a.push(l),eo.set(l,{format:"gltf",entryPath:t}),{url:l,name:e.name,format:"gltf",cleanup:()=>{uc(l),eo.delete(l),a.forEach(c=>URL.revokeObjectURL(c))}}}catch(s){throw a.forEach(l=>URL.revokeObjectURL(l)),s}}function dy(e,t,n,i){for(let r of e??[]){if(typeof r.uri!="string"||Ah(r.uri))continue;let o=p2(t,r.uri),a=n.get(o);if(!a)throw new Error(`Invalid GLTF zip: missing referenced asset ${r.uri}.`);let s=URL.createObjectURL(new Blob([a],{type:gy(o)}));i.push(s),r.uri=s}}function my(e,t){try{return JSON.parse(e)}catch{throw new Error(`${t} is not a valid .gltf JSON file.`)}}function hy(e){return[...e.buffers??[],...e.images??[]].map(t=>t.uri).filter(t=>typeof t=="string"&&t.length>0)}function d2(e,t){for(let n of hy(e)){if(Ah(n))continue;let i=/^[a-z][a-z0-9+.-]*:/i.test(n),r=n.startsWith("/")||n.startsWith("\\");if(i||r)throw new Error(`${t} references external assets. Include every dependency inside the uploaded .zip.`)}}function Ah(e){return e.startsWith("data:")}function Eh(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(i=>i&&i!==".")){if(n===".."){t.pop();continue}t.push(n)}return t.join("/")}function fy(e){let t=e.split("/");return e.endsWith("/")||t.includes("__MACOSX")||t.some(n=>n===".DS_Store"||n.startsWith("._"))}function u2(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t)}function p2(e,t){let n=t.split(/[?#]/)[0],i=m2(n);return Eh(e?`${e}/${i}`:i)}function m2(e){try{return decodeURI(e)}catch{return e}}function gy(e){let t=e.toLowerCase();return t.endsWith(".obj")||t.endsWith(".mtl")?"text/plain":t.endsWith(".fbx")?"application/octet-stream":t.endsWith(".usdz")?"model/vnd.usdz+zip":t.endsWith(".bin")?"application/octet-stream":t.endsWith(".png")?"image/png":t.endsWith(".jpg")||t.endsWith(".jpeg")?"image/jpeg":t.endsWith(".webp")?"image/webp":t.endsWith(".avif")?"image/avif":t.endsWith(".ktx2")?"image/ktx2":"application/octet-stream"}var zr=require("three"),vy=require("three/examples/jsm/loaders/STLLoader.js"),yy=require("three/examples/jsm/loaders/PLYLoader.js"),h2=12106948,xy="This PLY file is a point cloud: it has vertices but no faces.",mu=class extends Error{constructor(){super(xy),this.name="PointCloudError"}};function hu(e){return e instanceof mu||e instanceof Error&&e.message.includes(xy)}function wy(e,t){let n=e.split(/[?#]/,1)[0],i=n.slice(n.lastIndexOf("/")+1);try{i=decodeURIComponent(i)}catch{}return i.replace(/\.[^.]*$/,"").trim()||t}function Rh(e){return new zr.MeshStandardMaterial({color:e?16777215:h2,vertexColors:e,metalness:0,roughness:.6})}function by(e,t,n){let i=e.itemSize;return new zr.Float32BufferAttribute(e.array.slice(t*i,(t+n)*i),i)}function Sy(e,t){let n=new vy.STLLoader().parse(e),i=!!n.hasColors,r=new zr.Group;if(n.groups.length>1){let s=n.userData.groupNames??[],l=n.getAttribute("position"),c=n.getAttribute("normal");return n.groups.forEach((h,p)=>{let u=new zr.BufferGeometry;u.setAttribute("position",by(l,h.start,h.count)),c&&u.setAttribute("normal",by(c,h.start,h.count));let m=new zr.Mesh(u,Rh(!1));m.name=s[p]?.trim()||`${t} ${p+1}`,r.add(m)}),n.dispose(),r}n.clearGroups();let o=Rh(i);i&&n.alpha!==void 0&&n.alpha<1&&(o.opacity=n.alpha,o.transparent=!0);let a=new zr.Mesh(n,o);return a.name=t,r.add(a),r}function f2(e){let n=new TextDecoder().decode(new Uint8Array(e,0,Math.min(e.byteLength,65536))).split("end_header",1)[0],i=/^\s*element\s+face\s+(\d+)/m.exec(n);return!!(i&&Number(i[1])>0)}function _y(e,t){if(!f2(e))throw new mu;let n=new yy.PLYLoader().parse(e);n.getAttribute("normal")||n.computeVertexNormals();let i=new zr.Mesh(n,Rh(!!n.getAttribute("color")));i.name=t;let r=new zr.Group;return r.add(i),r}var g2={glb:"GLB",gltf:"glTF",obj:"OBJ",fbx:"FBX",usdz:"USDZ",stl:"STL",ply:"PLY"},b2=/\.(glb|gltf|obj|fbx|usdz|stl|ply|zip)$/i;function v2(e,t){let n=e?.response?.status;if(typeof n=="number")return n;let i=/responded with (\d{3})/.exec(t);return i?Number(i[1]):null}function My(e,t,n,i){let r=e instanceof Error?e.message:e==null?"":String(e),o=(u,m)=>oc(i,u,m),a=o("loadErrorTitle"),s=r||null;if(hu(e))return{title:a,detail:o("loadErrorPointCloud"),technical:s};let l=v2(e,r);if(l===404||l===410)return{title:a,detail:o("loadErrorNotFound",{status:l}),technical:s};if(l===401||l===403)return{title:a,detail:o("loadErrorDenied",{status:l}),technical:s};if(l!==null)return{title:a,detail:o("loadErrorStatus",{status:l}),technical:s};if(/failed to fetch|networkerror|load failed|network error/i.test(r))return{title:a,detail:o("loadErrorNetwork"),technical:s};if(/<!doctype|<html/i.test(r))return{title:a,detail:o("loadErrorHtml"),technical:s};let c=t.split(/[?#]/,1)[0],h=g2[n??mc(t)],p=b2.test(c);return{title:a,detail:p||n?o(n?"loadErrorInvalidExplicitFormat":"loadErrorInvalidFile",{format:h}):o("loadErrorMissingFormat",{format:h}),technical:s}}var Cy={showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!1,showAnnotationNavigation:!1,showMaterialVariants:!1},y2=Object.freeze({minimal:Object.freeze({...Cy}),showcase:Object.freeze({...Cy,autoRotate:!0}),configurator:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!0,showMaterialVariants:!0}),inspector:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!0,showDownloadButton:!0,showResetButton:!0,showViewGizmo:!0,showMeasureTools:!0,showUvCheckerButton:!0,showExplodeControls:!0,showSectionTools:!0,showIsolateControls:!0,enableKeyboardNavigation:!0})}),x2=["preset","ui","tools","controls","perf","tiles","xr","decoders"];function Ty(e){let t={};for(let n of Object.keys(e))e[n]!==void 0&&(t[n]=e[n]);return t}function w2({ui:e,tools:t,controls:n,perf:i,tiles:r,xr:o,decoders:a}){let s=e?.download,l=e?.mouseController,c=t?.measure,h=n?.autoRotate;return{showObjectBindingDataPanel:e?.objectPanel,showSceneObjectsPanel:e?.sceneObjects,showDownloadButton:s===void 0?void 0:s!==!1,downloadFilename:typeof s=="string"?s:void 0,showResetButton:e?.reset,showFullscreenButton:e?.fullscreen,showLoadingOverlay:e?.loadingOverlay,showViewGizmo:e?.viewGizmo,showMouseController:l===void 0?void 0:l!==!1,mouseControllerPosition:typeof l=="object"?l.position:void 0,mouseControllerOpacity:typeof l=="object"?l.opacity:void 0,showAnnotationNavigation:e?.annotationNavigation,showAnnotationOnHover:e?.annotationOnHover,showAnnotationFilters:e?.annotationFilters,highlightOnHover:e?.highlightOnHover,showMaterialVariants:e?.materialVariants,showObjectNavigator:e?.objectNavigator,showMeasureTools:c===void 0?void 0:c!==!1,measurementUnit:typeof c=="object"?c.unit:void 0,showUvCheckerButton:t?.uvChecker,showExplodeControls:t?.explode,showSectionTools:t?.section,showIsolateControls:t?.isolate,texturePositioning:t?.texturePositioning,enableCameraControls:n?.enabled,enableKeyboardNavigation:n?.keyboard,reducedMotion:n?.reducedMotion,disableZoom:n?.zoom===void 0?void 0:!n.zoom,zoomOnSelected:n?.zoomOnSelect,autoRotate:h===void 0?void 0:h!==!1,autoRotateSpeed:typeof h=="number"?h:void 0,refitOnResize:n?.refitOnResize,cameraLimits:n?.limits,moveSensitivity:n?.moveSensitivity,zoomSensitivity:n?.zoomSensitivity,renderMode:i?.renderMode,maxDpr:i?.maxDpr,performanceProfile:i?.profile,preserveDrawingBuffer:i?.preserveDrawingBuffer,webgpu:i?.webgpu,tilesetUrl:r?.url,tilesErrorTarget:r?.errorTarget,tilesCacheSize:r?.cacheSize,enableXR:o?.enabled,usdzUrl:o?.usdzUrl,arScaleMode:o?.scaleMode,mobileHandoffUrl:o?.mobileHandoffUrl,dracoDecoderPath:a?.draco,ktx2TranscoderPath:a?.ktx2,meshopt:a?.meshopt}}function Py(e){let t={...e};for(let n of x2)delete t[n];return{...e.preset?y2[e.preset]:void 0,...Ty(t),...Ty(w2(e))}}var Ia=Object.freeze([{id:"change-color",label:"Change Color",handling:"viewer",description:"Opens a color picker docked under the action and commits the result to style.material.baseColor."},{id:"change-material",label:"Change Material",handling:"viewer",description:"Opens the material picker so the viewer can swap the object's texture."},{id:"add-text",label:"Add Text",handling:"viewer",description:"Opens a text box docked under the action; the viewer's user types, clicks the object to place it, and can resize, turn, move, or remove it. Saved to the binding's decals."},{id:"add-image",label:"Add Image",handling:"viewer",description:"Lets the viewer's user choose an image, click the object to place it, and resize, turn, move, or remove it. Saved to the binding's decals."},{id:"toggle-visibility",label:"Toggle Visibility",handling:"viewer",description:"Flips the binding's visible flag."},{id:"toggle-light",label:"Toggle Light",handling:"viewer",description:"Turns the scene lights attached to this object on or off, or the object's own glow when none is attached."},{id:"change-light-color",label:"Change Light Color",handling:"viewer",description:"Opens a color picker docked under the action for the scene lights attached to this object, or the object's own glow."},{id:"set-brightness",label:"Set Brightness",handling:"viewer",description:"Opens a brightness slider docked under the action for the scene lights attached to this object, or the object's own glow."}]),fu="__custom__";function hc(e){return Ia.find(t=>t.id===e)}var fc=Ia.filter(e=>e.handling==="viewer").map(e=>e.id),S2=new Set(["","New Action",...Ia.map(e=>e.label)]);function kh(e){return S2.has(e.trim())}function Ay(e,t){let n=Array.from({length:t.length+1},(i,r)=>r);for(let i=1;i<=e.length;i+=1){let r=[i];for(let o=1;o<=t.length;o+=1){let a=n[o-1]+(e[i-1]===t[o-1]?0:1);r[o]=Math.min(r[o-1]+1,n[o]+1,a)}n=r}return n[t.length]}function Ey(e){if(hc(e))return null;let t=e.trim().toLowerCase();if(!t)return null;let n=t.replace(/[^a-z0-9]/g,""),i=null;for(let r of Ia){let o=Math.min(Ay(t,r.id),Ay(n,r.id.replace(/[^a-z0-9]/g,"")));(!i||o<i.distance)&&(i={id:r.id,distance:o})}return i&&i.distance<=2?i.id:null}var Ry=require("three");function jo(e,t){if(e[t])return t;let n=Object.entries(e).find(([,r])=>r.id===t)?.[0];return n||(Object.entries(e).find(([,r])=>r.modelObjectId===t)?.[0]??null)}function ky(e,t,n){let i=t[n]?.modelObjectId;return e.lighting.lights.filter(r=>{let o=r.attachment?.objectId;return o?jo(t,o)===n||o===i:!1})}function Lh(e,t){return e.lighting.lights.some(n=>t[n.id])?{...e,lighting:{...e.lighting,lights:e.lighting.lights.map(n=>t[n.id]?{...n,...t[n.id]}:n)}}:e}function Ly(e){let t=null;if(e?.traverse(r=>{if(t)return;let o=r.material;for(let a of Array.isArray(o)?o:o?[o]:[])if(a.emissive instanceof Ry.Color){t=a;return}}),!t)return{color:"#000000",intensity:0,on:!1};let n=`#${t.emissive.getHexString()}`,i=t.emissiveIntensity??1;return{color:n,intensity:i,on:n!=="#000000"&&i>0}}var Dy=require("react-colorful"),Xn=require("react/jsx-runtime");function Ny({kind:e,color:t,brightness:n,onColorChange:i,onBrightnessChange:r,onClose:o}){return(0,Xn.jsx)("div",{className:"ri-popover ri-popover--inline",style:{padding:12},onPointerDown:a=>a.stopPropagation(),children:e==="change-light-color"?(0,Xn.jsxs)(Xn.Fragment,{children:[(0,Xn.jsx)("p",{className:"ri-popoverLabel",children:"Light color"}),(0,Xn.jsx)(Dy.HexColorPicker,{color:t,onChange:i}),(0,Xn.jsxs)("div",{className:"ri-inlineRow",children:[(0,Xn.jsx)("span",{className:"ri-colorCode",children:t}),(0,Xn.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]}):(0,Xn.jsxs)(Xn.Fragment,{children:[(0,Xn.jsx)("p",{className:"ri-popoverLabel",children:"Brightness"}),(0,Xn.jsx)("input",{type:"range",min:0,max:200,step:1,value:n,"aria-label":"Brightness",style:{width:"100%"},onChange:a=>r(Number(a.target.value))}),(0,Xn.jsxs)("div",{className:"ri-inlineRow",children:[(0,Xn.jsxs)("span",{className:"ri-colorCode",children:[n,"%"]}),(0,Xn.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]})})}var gc=require("react");var Go=require("lucide-react"),Ys=require("react");function Oy(e){let t=!1,n,i=()=>{t||(e(),t||(n=setTimeout(i,70)))};return e(),n=setTimeout(i,300),()=>{t=!0,clearTimeout(n)}}var to=require("react/jsx-runtime");function gu({onNudge:e}){let t=Me(),n=(0,Ys.useRef)(e);n.current=e;let i=(0,Ys.useRef)(null),r=(0,Ys.useRef)(null),o=()=>{i.current?.(),i.current=null,r.current=null};return(0,Ys.useEffect)(()=>{let a=l=>{l.pointerId===r.current&&o()},s=l=>{l.key==="Escape"&&o()};return window.addEventListener("pointerup",a,!0),window.addEventListener("pointercancel",a,!0),window.addEventListener("blur",o),window.addEventListener("keydown",s),()=>{o(),window.removeEventListener("pointerup",a,!0),window.removeEventListener("pointercancel",a,!0),window.removeEventListener("blur",o),window.removeEventListener("keydown",s)}},[]),(0,to.jsxs)("div",{className:"ri-decalPosition",children:[(0,to.jsxs)("div",{children:[(0,to.jsx)("div",{className:"ri-decalPosition__label",children:t("position")}),(0,to.jsx)("div",{className:"ri-decalPosition__hint",children:t("decalNudgeHint")})]}),(0,to.jsx)("div",{className:"ri-decalPosition__pad",role:"group","aria-label":t("decalNudgeControls"),children:[["up",Go.ArrowUp],["left",Go.ArrowLeft],["right",Go.ArrowRight],["down",Go.ArrowDown]].map(([a,s])=>(0,to.jsx)("button",{type:"button",className:`ri-decalPosition__button ri-decalPosition__button--${a}`,"aria-label":t("moveDecal",{direction:t(a)}),title:t("moveDecalOnSurface",{direction:t(a)}),onPointerDown:l=>{l.button===0&&(l.preventDefault(),l.currentTarget.focus({preventScroll:!0}),o(),r.current=l.pointerId,i.current=Oy(()=>n.current(a)))},onClick:l=>{l.detail===0&&n.current(a)},children:(0,to.jsx)(s,{size:16})},a))})]})}var dt=require("react/jsx-runtime"),_2=e=>Math.round(e*180/Math.PI);function Iy({kind:e,decals:t,activeId:n,error:i,moving:r,defaultSize:o,onSelect:a,onAddText:s,onAddImage:l,onChange:c,onMove:h,onNudge:p,onRemove:u,onClose:m}){let f=Me(),[g,b]=(0,gc.useState)(""),[y,v]=(0,gc.useState)("#ffffff"),w=(0,gc.useRef)(null),M=t.find(x=>x.id===n)??null;return(0,dt.jsxs)("div",{className:"ri-popover ri-popover--inline ri-decalControl",onPointerDown:x=>x.stopPropagation(),children:[e==="add-text"?(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsx)("p",{className:"ri-popoverLabel",children:f("text")}),(0,dt.jsxs)("div",{className:"ri-decalControl__row",children:[(0,dt.jsx)("input",{className:"ri-decalControl__input",value:g,placeholder:f("yourText"),"aria-label":f("textToAdd"),onChange:x=>b(x.target.value)}),(0,dt.jsx)("input",{type:"color",className:"ri-decalControl__color",value:y,"aria-label":f("textColour"),onChange:x=>v(x.target.value)})]}),(0,dt.jsx)("button",{type:"button",className:"ri-uploadButton",disabled:!g.trim(),onClick:()=>{s(g.trim(),y)&&b("")},children:f("addText")})]}):(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsx)("p",{className:"ri-popoverLabel",children:f("image")}),(0,dt.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:()=>w.current?.click(),children:f("chooseImage")}),(0,dt.jsx)("input",{ref:w,type:"file",accept:"image/png,image/jpeg,image/webp,image/svg+xml",className:"ri-hiddenInput","aria-label":f("imageToAdd"),onChange:x=>{let P=x.target.files?.[0];x.target.value="",P&&l(P)}})]}),i?(0,dt.jsx)("div",{className:"ri-decalControl__hint",role:"alert",children:i}):null,t.length>0?(0,dt.jsx)("div",{className:"ri-decalControl__list",role:"group","aria-label":f("added"),children:t.map((x,P)=>(0,dt.jsx)("button",{type:"button",className:`ri-decalControl__chip ${x.id===n?"ri-decalControl__chip--active":""}`,"aria-pressed":x.id===n,onClick:()=>a(x.id),children:x.image?f("decalImage",{index:P+1}):x.text||f("decalText",{index:P+1})},x.id))}):null,M?(0,dt.jsxs)("div",{className:"ri-decalControl__editor",children:[(0,dt.jsx)(gu,{onNudge:x=>p(M.id,x)}),M.image?null:(0,dt.jsxs)("div",{className:"ri-decalControl__row",children:[(0,dt.jsx)("input",{className:"ri-decalControl__input",value:M.text??"","aria-label":f("text"),onChange:x=>c(M.id,{text:x.target.value})}),(0,dt.jsx)("input",{type:"color",className:"ri-decalControl__color",value:M.color??"#ffffff","aria-label":f("colour"),onChange:x=>c(M.id,{color:x.target.value})})]}),(0,dt.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,dt.jsx)("span",{children:f("size")}),(0,dt.jsx)("input",{type:"range",min:o/10,max:o*4,step:o/50,value:M.size,"aria-label":f("size"),onChange:x=>c(M.id,{size:Number(x.target.value)})})]}),(0,dt.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,dt.jsx)("span",{children:f("turn")}),(0,dt.jsx)("input",{type:"range",min:-180,max:180,step:1,value:_2(M.rotation??0),"aria-label":f("rotation"),onChange:x=>c(M.id,{rotation:Number(x.target.value)*Math.PI/180})})]}),(0,dt.jsxs)("div",{className:"ri-inlineRow",children:[(0,dt.jsx)("button",{type:"button",className:"ri-secondaryButton","aria-pressed":r,title:f("dragTheDecalAcrossTheObjectsSurface"),onClick:()=>h(M.id),children:f("move")}),(0,dt.jsx)("button",{type:"button",className:"ri-removeButton",onClick:()=>u(M.id),children:f("remove")})]})]}):null,(0,dt.jsxs)("div",{className:"ri-inlineRow",children:[(0,dt.jsx)("span",{className:"ri-colorCode",children:t.length===0?f("noneAddedYet"):f("decalAdded",{count:t.length})}),(0,dt.jsx)("button",{type:"button",className:"ri-secondaryButton",onClick:m,children:f("done")})]})]})}var Eu=require("react"),lx=require("@react-three/fiber"),gi=require("three");var $t=require("three"),M2=.5,bc=4;function C2(e,t=0){let n=new $t.Vector3(...e);n.lengthSq()<1e-12&&n.set(0,0,1),n.normalize();let i=new $t.Object3D;return Math.abs(n.y)>.999&&i.up.set(0,0,-Math.sign(n.y)),i.lookAt(n),i.rotateZ(t),i.rotation.clone()}function T2(e,t,n){let i=null;if(e.bones&&t.bones){i=new Map;for(let[r,o]of e.bones)i.set(r,o*(1-n));for(let[r,o]of t.bones)i.set(r,(i.get(r)??0)+o*n)}return{position:e.position.clone().lerp(t.position,n),normal:e.normal.clone().lerp(t.normal,n),bones:i}}function By(e,t,n,i){let r=a=>i?a.position[t]<=n:a.position[t]>=n,o=[];for(let a=0;a<e.length;a++){let s=e[a],l=e[(a+1)%e.length],c=r(s);if(c&&o.push(s),c!==r(l)){let h=l.position[t]-s.position[t];o.push(T2(s,l,(n-s.position[t])/h))}}return o}function bu(e,t,n){let i=e.geometry,r=i.getAttribute("position");if(!r)return null;let o=i.getAttribute("normal"),a=i.getAttribute("skinIndex"),s=i.getAttribute("skinWeight"),l=!!(a&&s),c=i.getIndex(),h=Math.max(t.size,1e-6),p=h/(n>0&&Number.isFinite(n)?n:1),u=Math.max(h,p)*M2,m={x:h/2,y:p/2,z:u/2},f=new $t.Matrix4().makeRotationFromEuler(C2(t.normal,t.rotation)).setPosition(...t.position),g=f.clone().invert(),b=(B,L)=>{let X=null;if(l){X=new Map;for(let O=0;O<bc;O++){let I=s.getComponent(B,O);if(I<=0)continue;let re=a.getComponent(B,O);X.set(re,(X.get(re)??0)+I)}}return{position:L.clone(),normal:o?new $t.Vector3().fromBufferAttribute(o,B):new $t.Vector3,bones:X}},y=[],v=[],w=[],M=[],_=[],x=new $t.Vector3,P=new $t.Vector3,d=new $t.Vector3,S=B=>{if(w.push(.5+B.position.x/h,.5-B.position.y/p),x.copy(B.position).applyMatrix4(f),y.push(x.x,x.y,x.z),v.push(B.normal.x,B.normal.y,B.normal.z),!B.bones)return;let L=[...B.bones].sort((O,I)=>I[1]-O[1]).slice(0,bc),X=L.reduce((O,[,I])=>O+I,0)||1;for(let O=0;O<bc;O++)M.push(L[O]?.[0]??0),_.push((L[O]?.[1]??0)/X)},C=["x","y","z"],T=[new $t.Vector3,new $t.Vector3,new $t.Vector3],E=[0,0,0],k=(c?c.count:r.count)/3;for(let B=0;B<k;B++){for(let O=0;O<3;O++){let I=B*3+O;E[O]=c?c.getX(I):I,T[O].fromBufferAttribute(r,E[O]).applyMatrix4(g)}if(C.some(O=>T[0][O]>m[O]&&T[1][O]>m[O]&&T[2][O]>m[O]||T[0][O]<-m[O]&&T[1][O]<-m[O]&&T[2][O]<-m[O]))continue;let L=T.map((O,I)=>b(E[I],O));if(!o){P.copy(L[1].position).sub(L[0].position),d.copy(L[2].position).sub(L[0].position);let O=P.cross(d).transformDirection(f);for(let I of L)I.normal.copy(O)}let X=L;for(let O of C)if(X=By(X,O,m[O],!0),X=By(X,O,-m[O],!1),X.length<3)break;for(let O=1;O+1<X.length;O++)S(X[0]),S(X[O]),S(X[O+1])}if(y.length===0)return null;let D=new $t.BufferGeometry;return D.setAttribute("position",new $t.Float32BufferAttribute(y,3)),D.setAttribute("normal",new $t.Float32BufferAttribute(v,3)),D.setAttribute("uv",new $t.Float32BufferAttribute(w,2)),l&&(D.setAttribute("skinIndex",new $t.Uint16BufferAttribute(M,bc)),D.setAttribute("skinWeight",new $t.Float32BufferAttribute(_,bc))),D}function Uy(e){return JSON.stringify([e.image??null,e.image?null:[e.text??"",e.color,e.fontFamily,e.fontWeight],e.position,e.normal,e.size,e.rotation??0])}var zy=256,Dh=24;function Vy(e){let t=`${e.fontWeight??"bold"} ${zy-Dh*2}px ${e.fontFamily||"sans-serif"}`,n=document.createElement("canvas"),i=n.getContext("2d");i.font=t;let r=e.text||" ";n.width=Math.min(Math.max(Math.ceil(i.measureText(r).width)+Dh*2,8),4096),n.height=zy,i.font=t,i.textAlign="center",i.textBaseline="middle",i.fillStyle=e.color??"#ffffff",i.fillText(r,n.width/2,n.height/2,n.width-Dh);let o=new $t.CanvasTexture(n);return o.flipY=!1,o.colorSpace=$t.SRGBColorSpace,{texture:o,aspect:n.width/n.height}}var wc=require("react"),Ur=require("three");var er=require("three");function vu(e){let t=!0;return e?.traverse(n=>{let i=n.isMesh?n.geometry:null;i&&!i.getAttribute("uv")&&(t=!1)}),t}function Fy(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function jy(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function tr(e){return!!(e&&"isMesh"in e&&e.isMesh)}var Bi=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],yu={texture:"map",metalnessMap:"metalnessMap",roughnessMap:"roughnessMap",emissiveMap:"emissiveMap",alphaMap:"alphaMap",normalMap:"normalMap",bumpMap:"bumpMap",aoMap:"aoMap",displacementMap:"displacementMap",clearcoatMap:"clearcoatMap",clearcoatRoughnessMap:"clearcoatRoughnessMap",clearcoatNormalMap:"clearcoatNormalMap",anisotropyMap:"anisotropyMap",transmissionMap:"transmissionMap",thicknessMap:"thicknessMap",sheenColorMap:"sheenColorMap",sheenRoughnessMap:"sheenRoughnessMap",specularIntensityMap:"specularIntensityMap",specularColorMap:"specularColorMap"},P2=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function mi(e){return P2.has(e)?er.SRGBColorSpace:er.NoColorSpace}function on(e,t){return e?.[t]?.path}function Gy(e,t){let n=e?.[t]?.offset;if(!n)return;let[i,r]=n;if(!(!Number.isFinite(i)||!Number.isFinite(r)))return i===0&&r===0?void 0:[i,r]}function Hy(e,t){let n=e?.[t]?.scale;if(!(!Number.isFinite(n)||!n))return n===1?void 0:n}function Wy(e,t){let n=e?.[t]?.rotation;if(!(!Number.isFinite(n)||!n))return n}function Xy(e){return e==="back"?er.BackSide:e==="double"?er.DoubleSide:er.FrontSide}function qy(e){return e==="additive"?er.AdditiveBlending:er.NormalBlending}function no(e,t=1,n=t){if(e&&typeof e=="object"){let i=e;if(typeof i.x=="number"&&Number.isFinite(i.x)&&typeof i.y=="number"&&Number.isFinite(i.y))return new er.Vector2(i.x,i.y)}return new er.Vector2(t,n)}function xu(e){return Number.isFinite(e)&&e>0?e:1}function $y(e,t){return e?.animations.clips.find(n=>n.sourceName===t)}function Yy(e){return e?.loopMode??"repeat"}var Ky=require("three");function hi(e){return e.isSkinnedMesh===!0}function Zs(e){let t=[];return e.traverse(n=>{hi(n)&&t.push(n)}),t}var Ks="reactImmersiveSkinFreeze";function Zy(e){return!!e.userData[Ks]}function wu(e,t){let n=e.userData,i=new Ky.Matrix4().copy(t).invert(),r=n[Ks];if(r){r.frozenInverse.copy(i),e.bindMatrixInverse.copy(i);return}let o={frozenInverse:i,previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(i),e.onBeforeRender=function(a,s,l,c,h,p){o.previousOnBeforeRender.call(this,a,s,l,c,h,p),e.bindMatrixInverse.copy(o.frozenInverse)},n[Ks]=o}function Jy(e){return e.userData[Ks]?.frozenInverse??null}function Js(e){let t=e.userData,n=t[Ks];n&&(e.onBeforeRender=n.previousOnBeforeRender,delete t[Ks],e.updateMatrixWorld(!0))}var an=require("three"),Qs=new Map,ro={color:"#93c5fd",intensity:.07},Ba=new an.Color(ro.color).multiplyScalar(ro.intensity),Qy=new an.Color(ro.color),ex=.28,el=new Map,Ih=new Map;function A2(e){return`${e.name}|${e.size}|${e.lastModified}`}function Su(e){let t=A2(e),n=e.name.lastIndexOf("."),i=n>0?e.name.slice(0,n):e.name,r=n>0?e.name.slice(n):"",o=`materials/${e.name}`,a=2;for(;;){let s=Ih.get(o);if(s===void 0||s===t)return Ih.set(o,t),o;o=`materials/${i}-${a}${r}`,a+=1}}function _u(e){return el.get(e)}function tx(e,t){let n=++e.loadGeneration;e.loaded=!1;let i=()=>{if(e.loadGeneration!==n)return;e.loaded=!0;let r=e.pending;e.pending=[];for(let o of r)o()};new an.ImageLoader().load(t,r=>{e.loadGeneration===n&&(e.texture.image=r,e.texture.needsUpdate=!0,i())},void 0,()=>{e.loadGeneration===n&&(console.warn(`Failed to load texture: ${t}`),i())})}function nx(e,t){for(let n of[an.SRGBColorSpace,an.NoColorSpace]){let i=Qs.get(vc(e,n));i&&tx(i,t)}}function za(e,t){let n=el.get(e);n&&n!==t&&n.startsWith("blob:")&&URL.revokeObjectURL(n),el.set(e,t),nx(e,t)}function yc(e){let t=el.get(e);t&&(t.startsWith("blob:")&&URL.revokeObjectURL(t),el.delete(e),Ih.delete(e),nx(e,e))}function vc(e,t){return`${t}|${e}`}function xc(e,t=an.NoColorSpace,n){let i=vc(e,t),r=Qs.get(i);if(r)return n&&!r.loaded&&r.pending.push(n),r.texture;let o=el.get(e)??e,a={texture:new an.Texture,refCount:0,loaded:!1,pending:n?[n]:[],loadGeneration:0};return a.texture.flipY=!1,a.texture.colorSpace=t,Qs.set(i,a),tx(a,o),a.texture}function tl(e,t=an.NoColorSpace,n){let i=xc(e,t,n);return Qs.get(vc(e,t)).refCount+=1,i}function io(e,t=an.NoColorSpace){let n=Qs.get(vc(e,t));n&&(n.refCount-=1,n.refCount<=0&&(n.loadGeneration+=1,n.pending=[],n.texture.dispose(),Qs.delete(vc(e,t))))}function Mu(e,t,n,i,r,o=1,a=0){let s=e.offsetTextures??(e.offsetTextures={}),l=s[t],c=l;if(!c||c.sourcePath!==i||c.base!==n){l?.texture.dispose();let p=n.clone();p.wrapS=an.RepeatWrapping,p.wrapT=an.RepeatWrapping,p.center.set(.5,.5),p.needsUpdate=!0,c={texture:p,sourcePath:i,base:n},s[t]=c}let h=o>0?o:1;return c.texture.offset.set(r[0],r[1]),c.texture.repeat.set(1/h,1/h),c.texture.rotation=a,c.texture}function Cu(e,t){let n=e.offsetTextures,i=n?.[t];i&&(i.texture.dispose(),delete n[t])}function rx(e){let t=e.offsetTextures;if(t){for(let n of Object.values(t))n.texture.dispose();delete e.offsetTextures}}var Nh=null;function Tu(){if(Nh)return Nh;let e=256,t=document.createElement("canvas");t.width=e,t.height=e;let n=t.getContext("2d"),i=n.createRadialGradient(e*.35,e*.35,e*.02,e*.5,e*.5,e*.55);i.addColorStop(0,"#ffffff"),i.addColorStop(.4,"#b5b5b5"),i.addColorStop(1,"#3a3a3a"),n.fillStyle=i,n.fillRect(0,0,e,e);let r=new an.CanvasTexture(t);return r.colorSpace=an.SRGBColorSpace,Nh=r,r}var Oh=null;function ix(){if(Oh)return Oh;let e=1024,t=8,n=e/t,i=["#ef4444","#f59e0b","#22c55e","#6366f1"],r=document.createElement("canvas");r.width=e,r.height=e;let o=r.getContext("2d");o.textAlign="center",o.textBaseline="middle";for(let s=0;s<t;s+=1)for(let l=0;l<t;l+=1){let c=l*n,h=s*n,p=(Math.floor(l/2)+Math.floor(s/2))%4;o.fillStyle=i[p],o.fillRect(c,h,n,n),o.strokeStyle="rgba(0, 0, 0, 0.28)",o.lineWidth=2;for(let v=1;v<4;v+=1){let w=v*n/4;o.beginPath(),o.moveTo(c+w,h),o.lineTo(c+w,h+n),o.moveTo(c,h+w),o.lineTo(c+n,h+w),o.stroke()}o.strokeStyle="#09090b",o.lineWidth=7,o.strokeRect(c,h,n,n);let u=c+n*.23,m=h+n*.72,f=c+n*.72,g=h+n*.23;o.lineCap="round",o.lineJoin="round",o.beginPath(),o.moveTo(u,m),o.lineTo(f,g),o.lineTo(f-n*.2,g),o.moveTo(f,g),o.lineTo(f,g+n*.2),o.stroke();let b=s*t+l+1;o.font=`700 ${Math.round(n*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,o.fillStyle="#ffffff",o.strokeStyle="rgba(0, 0, 0, 0.85)",o.lineWidth=6;let y=String(b).padStart(2,"0");o.strokeText(y,c+n/2,h+n*.82),o.fillText(y,c+n/2,h+n*.82)}let a=new an.CanvasTexture(r);return a.colorSpace=an.SRGBColorSpace,a.wrapS=an.RepeatWrapping,a.wrapT=an.RepeatWrapping,a.flipY=!1,a.anisotropy=8,a.needsUpdate=!0,Oh=a,a}var Ua="riDecal",Uh="riDecalId";function Bh(){return new Ur.BufferGeometry().setAttribute("position",new Ur.Float32BufferAttribute([],3))}function ox(e){let t=e.image;return t?.width&&t.height?t.width/t.height:1}function zh(e){e.disposed=!0,e.node.remove(e.mesh),e.mesh.geometry.dispose(),e.mesh.material.dispose(),e.imagePath&&io(e.imagePath,Ur.SRGBColorSpace),e.ownTexture?.dispose()}function E2(e,t,n,i){let r=new Ur.MeshStandardMaterial({transparent:!0,polygonOffset:!0,polygonOffsetFactor:-4,depthWrite:!1,metalness:0,roughness:.7}),o=hi(e)&&e.skeleton?e:null,a=o?new Ur.SkinnedMesh(Bh(),r):new Ur.Mesh(Bh(),r);if(o){let c=a;c.bind(o.skeleton,o.bindMatrix),c.frustumCulled=!1,c.onBeforeRender=()=>{let h=Jy(o);h&&c.bindMatrixInverse.copy(h)}}a.userData[Ua]=!0,a.userData[Uh]=t.id,a.raycast=()=>{},a.castShadow=!1,a.receiveShadow=!0,a.renderOrder=1;let s={node:e,mesh:a,signature:n,disposed:!1},l=c=>{let h=bu(e,t,c);a.geometry.dispose(),a.geometry=h??Bh(),a.visible=h!==null};if(t.image){s.imagePath=t.image;let c=tl(t.image,Ur.SRGBColorSpace,()=>{s.disposed||(l(ox(c)),r.needsUpdate=!0,i())});r.map=c,l(ox(c))}else{let{texture:c,aspect:h}=Vy(t);s.ownTexture=c,r.map=c,l(h)}return e.add(a),s}function ax({objectBindings:e,nodeMap:t,invalidate:n}){let i=(0,wc.useRef)(new Map);(0,wc.useEffect)(()=>{let r=i.current,o=new Set;for(let[a,s]of Object.entries(e)){if(!s.decals?.length)continue;let l=t[s.modelObjectId??a];if(tr(l))for(let c of s.decals){if(!c.image&&!c.text)continue;let h=`${a}
|
|
3665
|
+
${c.id}`,p=Uy(c),u=r.get(h);u&&(u.node!==l||u.signature!==p)&&(zh(u),u=void 0),u||(u=E2(l,c,p,n),r.set(h,u)),u.mesh.material.opacity=(c.opacity??1)*(s.style?.material?.opacity??1),o.add(h)}}for(let[a,s]of r)o.has(a)||(zh(s),r.delete(a));n()},[e,t,n]),(0,wc.useEffect)(()=>{let r=i.current;return()=>{for(let o of r.values())zh(o);r.clear()}},[])}var Yr=require("react"),fi=require("three"),R2=500,k2=10,L2=5;function Pu(e,t,n){let i=(0,Yr.useRef)({resolve:e,onContextMenu:t,anchorOf:n});i.current={resolve:e,onContextMenu:t,anchorOf:n};let r=(0,Yr.useRef)(null),o=(0,Yr.useRef)(!1),a=(0,Yr.useRef)(null),s=(0,Yr.useCallback)(()=>{let p=r.current;p?.timer&&clearTimeout(p.timer),r.current=null,a.current?.(),a.current=null},[]),l=(0,Yr.useCallback)(()=>{let p=r.current;p&&(s(),p.kind==="touch"&&(o.current=!0,setTimeout(()=>o.current=!1,800)),i.current.onContextMenu?.(p.target,p.pointer))},[s]),c=(0,Yr.useCallback)(p=>{let u=p.nativeEvent,m=u.pointerType!=="touch"&&u.button===2,f=u.pointerType==="touch"&&u.button===0;if(!i.current.onContextMenu||!m&&!f)return;let g=i.current.resolve(p.object);if(g===null)return;s();let b={target:g,kind:m?"right":"touch",pointerId:u.pointerId,pointer:nl(p,i.current.anchorOf?.(p.object)),timer:f?setTimeout(l,R2):null};r.current=b;let y=m?L2:k2,v=x=>Math.hypot(x.clientX-b.pointer.clientX,x.clientY-b.pointer.clientY)>y,w=x=>{x.pointerId===b.pointerId&&v(x)&&s()},M=x=>{x.pointerId===b.pointerId&&(b.kind==="right"&&!v(x)?l():s())},_=x=>{x.pointerId!==b.pointerId&&s()};window.addEventListener("pointermove",w),window.addEventListener("pointerup",M),window.addEventListener("pointercancel",s),window.addEventListener("pointerdown",_),a.current=()=>{window.removeEventListener("pointermove",w),window.removeEventListener("pointerup",M),window.removeEventListener("pointercancel",s),window.removeEventListener("pointerdown",_)}},[s,l]);(0,Yr.useEffect)(()=>s,[s]);let h=(0,Yr.useCallback)(()=>o.current?(o.current=!1,!0):!1,[]);return{onPointerDown:c,consumeClick:h}}function D2(e,t){let n=e.face,i=t.geometry.getAttribute("position");if(!n||!i)return null;let r=e.barycoord??null;if(!r){let[p,u,m]=[n.a,n.b,n.c].map(f=>t.getVertexPosition(f,new fi.Vector3));if(r=fi.Triangle.getBarycoord(t.worldToLocal(e.point.clone()),p,u,m,new fi.Vector3),!r)return null}let[o,a,s]=[n.a,n.b,n.c].map(p=>new fi.Vector3().fromBufferAttribute(i,p)),l=new fi.Vector3().addScaledVector(o,r.x).addScaledVector(a,r.y).addScaledVector(s,r.z),c=new fi.Triangle(o,a,s).getNormal(new fi.Vector3);return n.normal.clone().transformDirection(t.matrixWorld).dot(e.ray.direction)>0&&c.negate(),{position:[l.x,l.y,l.z],normal:[c.x,c.y,c.z]}}function Va(e,t){if(t.updateWorldMatrix(!0,!1),e.object===t&&t.isSkinnedMesh===!0){let r=D2(e,t);if(r)return r}let n=t.worldToLocal(e.point.clone()),i=e.face?e.face.normal.clone().transformDirection(e.object.matrixWorld):e.ray.direction.clone().negate();return i.dot(e.ray.direction)>0&&i.negate(),i.transformDirection(new fi.Matrix4().copy(t.matrixWorld).invert()),{position:[n.x,n.y,n.z],normal:[i.x,i.y,i.z]}}function nl(e,t){let n=e.nativeEvent;return{clientX:n.clientX,clientY:n.clientY,pointerType:"pointerType"in n?n.pointerType:"mouse",...t?{surface:Va(e,t)}:{}}}var Au=require("three");function sx(e,t){let n=[];if(hi(e)){let i=e;i.computeBoundingSphere(),i.computeBoundingBox(),Au.SkinnedMesh.prototype.raycast.call(i,t,n)}else Au.Mesh.prototype.raycast.call(e,t,n);return n.sort((i,r)=>i.distance-r.distance)[0]}function cx({target:e,nodes:t,controls:n}){let{camera:i,gl:r,invalidate:o}=(0,lx.useThree)(),a=(0,Eu.useRef)(e);return a.current=e,(0,Eu.useEffect)(()=>{let s=r.domElement,l=new gi.Raycaster,c=new gi.Vector2,h=s.style.cursor,p=s.style.touchAction;s.style.cursor="grab",s.style.touchAction="none";let u=0,m=null,f=null,g=(P,d=new gi.Vector2)=>{let S=s.getBoundingClientRect();c.set((P.clientX-S.left-d.x)/S.width*2-1,-((P.clientY-S.top-d.y)/S.height)*2+1),l.setFromCamera(c,i)},b=P=>{if(!f)return;g(P,f.offset),f.node.updateWorldMatrix(!0,!1);let d=l.intersectObject(f.node,!1)[0];if(!d)return;let S=Va({...d,ray:l.ray},f.node),C=bu(f.node,{...f.decal,...S},f.aspect);C&&(f.mesh.geometry!==f.geometry&&f.mesh.geometry.dispose(),f.mesh.geometry=C,f.surface=S,o())},y=P=>{if(!f)return;cancelAnimationFrame(u),u=0,m=null;let d=f;f=null,d.mesh.geometry!==d.geometry&&(P&&d.surface?d.geometry.dispose():(d.mesh.geometry.dispose(),d.mesh.geometry=d.geometry)),d.controller&&(d.controller.enabled=d.controlsEnabled),s.hasPointerCapture(d.pointerId)&&s.releasePointerCapture(d.pointerId),s.style.cursor="grab",o();let S=()=>{window.removeEventListener("click",C,!0),window.removeEventListener("pointerdown",S,!0),clearTimeout(T)},C=E=>{E.target===s&&(E.preventDefault(),E.stopImmediatePropagation()),S()},T=setTimeout(S,300);window.addEventListener("click",C,!0),window.addEventListener("pointerdown",S,!0),P&&d.surface&&a.current.onCommit(d.surface)},v=P=>{if(P.button!==0||f)return;let d=a.current,S=t.current[d.objectId];if(!(S instanceof gi.Mesh)||!S.visible)return;let C=S.children.find(O=>O.userData[Ua]&&O.userData[Uh]===d.decal.id);if(!C?.visible)return;S.updateWorldMatrix(!0,!0),g(P);let T=sx(C,l),E=l.intersectObject(S,!1)[0];if(!T||!E||T.distance>E.distance+1e-4)return;let k=new gi.Vector3;if(hi(C)){let O=new gi.Vector3,I=C.geometry.getAttribute("position").count;if(!I)return;for(let re=0;re<I;re++)k.add(C.getVertexPosition(re,O));k.divideScalar(I).applyMatrix4(C.matrixWorld)}else k.fromArray(d.decal.position).applyMatrix4(S.matrixWorld);k.project(i);let D=s.getBoundingClientRect(),B=new gi.Vector2(P.clientX-(D.left+(k.x+1)/2*D.width),P.clientY-(D.top+(1-k.y)/2*D.height)),L=C.material.map?.image,X=n.current;f={pointerId:P.pointerId,node:S,mesh:C,geometry:C.geometry,decal:d.decal,surface:null,offset:B,aspect:L?.width&&L.height?L.width/L.height:1,controller:X,controlsEnabled:X?.enabled??!1},X&&(X.enabled=!1),P.preventDefault(),P.stopImmediatePropagation(),s.setPointerCapture(P.pointerId),s.style.cursor="grabbing"},w=P=>{!f||P.pointerId!==f.pointerId||(P.preventDefault(),P.stopImmediatePropagation(),m=P,u||(u=requestAnimationFrame(()=>{u=0,m&&b(m)})))},M=P=>{!f||P.pointerId!==f.pointerId||(P.preventDefault(),P.stopImmediatePropagation(),m&&b(m),y(!0))},_=()=>y(!1),x=P=>{P.key==="Escape"&&(y(!1),a.current.onCancel())};return s.addEventListener("pointerdown",v,!0),window.addEventListener("pointermove",w,{capture:!0,passive:!1}),window.addEventListener("pointerup",M,!0),window.addEventListener("pointercancel",_),window.addEventListener("blur",_),window.addEventListener("keydown",x),s.addEventListener("lostpointercapture",_),()=>{y(!1),s.style.cursor=h,s.style.touchAction=p,s.removeEventListener("pointerdown",v,!0),window.removeEventListener("pointermove",w,!0),window.removeEventListener("pointerup",M,!0),window.removeEventListener("pointercancel",_),window.removeEventListener("blur",_),window.removeEventListener("keydown",x),s.removeEventListener("lostpointercapture",_)}},[i,r,o,t,n,e.objectId,e.decal]),null}var Mr=require("react");var dx=require("three-stdlib");function oo(e,t){let n=URL.createObjectURL(e),i=document.createElement("a");i.href=n,i.download=t,i.style.display="none";try{document.body.appendChild(i),i.click()}finally{i.remove(),window.setTimeout(()=>{URL.revokeObjectURL(n)},1e3)}}function ux({scene:e,objectBindings:t,matRefs:n,downloadFilename:i,onComplete:r}){import("three").then(({Group:o,Mesh:a})=>{let s=new o,l=new Map;for(let[p,u]of Object.entries(t))l.set(u.modelObjectId??p,p);let c=p=>{let u=p;for(;u;){let m=u.name||u.uuid,f=l.get(m)??m,g=t[f];if(g?g.visible===!1:u.visible===!1)return!1;u=u.parent}return!0};e.traverse(p=>{let u=p;if(!u.isMesh||!u.geometry||!c(u))return;let m=u.name||u.uuid,f=l.get(m)??m,g=n[f]??u.material;if(!g)return;let b=new a(u.geometry,g);b.name=m,b.applyMatrix4(u.matrixWorld),s.add(b)}),new dx.GLTFExporter().parse(s,p=>{let u=p instanceof ArrayBuffer?new Blob([p],{type:"model/gltf-binary"}):new Blob([JSON.stringify(p)],{type:"model/gltf+json"}),m=p instanceof ArrayBuffer?".glb":".gltf";oo(u,`${i}${m}`),r()},p=>{console.error("GLTFExporter error:",p),r()},{binary:!0})})}var gx=require("fflate");var px=require("fflate");function Ru(e,t=6){return new Promise((n,i)=>{(0,px.zip)(e,{level:t},(r,o)=>{r?i(r):n(o)})})}var Sc=2048,mx=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function hx(e){return e.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}function jh(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function bx(e){return jh(e,"model")}function Vh(e,t){return e.index?Math.round(e.index.getX(t)):t}function N2(e,t,n){let i=Vh(e,n),r=Vh(e,n+1),o=Vh(e,n+2);if(i>=t.count||r>=t.count||o>=t.count)return null;let a=[{index:i,u:t.getX(i),v:t.getY(i)},{index:r,u:t.getX(r),v:t.getY(r)},{index:o,u:t.getX(o),v:t.getY(o)}];return a.every(s=>Number.isFinite(s.u)&&Number.isFinite(s.v))?a:null}function fx(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function Fh(e,t,n,i){let r,o;i?(r=t.index,o=n.index):(r=fx(t),o=fx(n));let a=r<o?`${r}|${o}`:`${o}|${r}`,s=e.get(a);s?s.count+=1:e.set(a,{count:1,start:t,end:n})}function O2(e,t,n){Fh(e,t[0],t[1],n),Fh(e,t[1],t[2],n),Fh(e,t[2],t[0],n)}function I2(e,t){return Array.isArray(e)?e[t]??null:e}function B2(e){let t=new Map,n=0,i=0,r=0;return e.traverse(o=>{let a=o;if(!a.isMesh||!a.geometry||!a.material)return;let s=a.geometry,l=s.getAttribute("uv");if(!l||l.itemSize<2||l.count<3)return;n+=1;let c=a.name||`Mesh ${n}`,h=s.index?.count??l.count,p=s.groups.length>0?s.groups:[{start:0,count:h,materialIndex:0}];for(let u of p){let m=u.materialIndex??0,f=I2(a.material,m);if(!f)continue;let g=t.get(f.uuid);g||(i+=1,g={name:f.name||`Material ${i}`,layers:new Map},t.set(f.uuid,g));let b=g.layers.get(a.uuid);b||(b={name:c,color:mx[r%mx.length],edges:new Map},r+=1,g.layers.set(a.uuid,b));let y=Math.max(0,u.start),v=Math.min(h,y+u.count);for(let w=y;w+2<v;w+=3){let M=N2(s,l,w);M&&O2(b.edges,M,!!s.index)}}}),[...t.values()].filter(o=>[...o.layers.values()].some(a=>a.edges.size>0))}function ku(e){return(e*Sc).toFixed(2)}function z2(e){return`M${ku(e.start.u)} ${ku(1-e.start.v)}L${ku(e.end.u)} ${ku(1-e.end.v)}`}function U2(e){let t=hx(e.name),n=[...e.layers.values()].filter(i=>i.edges.size>0).map((i,r)=>{let o=hx(i.name),a=`${jh(i.name,"mesh")}-${r+1}`,s=[...i.edges.values()],l=s.filter(p=>p.count===1),h=(l.length>0?l:s).map(z2).join("");return[` <g id="${a}" data-mesh="${o}" fill="none" stroke="${i.color}"`,' stroke-width="1" stroke-linejoin="round" vector-effect="non-scaling-stroke">',` <title>${o}</title>`,` <path d="${h}"/>`," </g>"].join(`
|
|
3665
3666
|
`)}).join(`
|
|
3666
|
-
`);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${
|
|
3667
|
-
`)}function s1(e,t="model"){let n=i1(e),i=gf(t);return n.map((r,a)=>{let o=Eu(r.name,`material-${a+1}`);return{filename:n.length===1?`${i}-uv-layout.svg`:`${i}-uv-${o}-${a+1}.svg`,materialName:r.name,meshCount:[...r.layers.values()].filter(c=>c.edges.size>0).length,svg:o1(r)}})}async function bf(e,t="model"){let n=s1(e,t);if(n.length===0)return n;if(n.length===1)return Ti(new Blob([n[0].svg],{type:"image/svg+xml;charset=utf-8"}),n[0].filename),n;let i=Object.fromEntries(n.map(a=>[a.filename,(0,ff.strToU8)(a.svg)])),r=await Jl(i);return Ti(new Blob([r],{type:"application/zip"}),`${gf(t)}-uv-layouts.zip`),n}function vf({sceneRef:e,materialRefs:t,rendererCaptureRef:n,objectBindings:i,downloadFilename:r}){let[a,o]=(0,jr.useState)(!1),[s,c]=(0,jr.useState)(!1),[l,u]=(0,jr.useState)(null);(0,jr.useEffect)(()=>{if(!s)return;let v=()=>c(!1);return window.addEventListener("pointerdown",v),()=>window.removeEventListener("pointerdown",v)},[s]);let d=(0,jr.useCallback)(()=>{u(null),c(v=>!v)},[]),p=(0,jr.useCallback)(()=>{let v=e.current;v&&(c(!1),o(!0),df({scene:v,objectBindings:i,matRefs:t.current,downloadFilename:r,onComplete:()=>o(!1)}))},[r,t,i,e]),g=(0,jr.useCallback)(()=>{c(!1),Kl(n.current).then(v=>{let E=document.createElement("a");E.href=v,E.download=`${r}.png`,document.body.appendChild(E),E.click(),document.body.removeChild(E)}).catch(v=>{console.error("Screenshot failed:",v)})},[r,n]),f=(0,jr.useCallback)(async()=>{let v=e.current;if(v)try{if((await bf(v,r)).length===0){u("This model does not contain UV coordinates.");return}u(null),c(!1)}catch(E){console.error("UV layout export failed:",E),u("Could not create the UV layout archive.")}},[r,e]);return{isDownloading:a,downloadMenuOpen:s,uvExportError:l,toggleDownloadMenu:d,handleDownloadMesh:p,handleDownloadScreenshot:g,handleDownloadUvLayout:f}}var dn=require("react"),Hr=require("three");function l1(e){let t=new Hr.Box3().setFromObject(e),n=new Hr.Vector3;return t.getSize(n),{min:[t.min.x,t.min.y,t.min.z],max:[t.max.x,t.max.y,t.max.z],size:[n.x,n.y,n.z]}}function c1(e){let t=new Hr.Box3().setFromObject(e);if(t.isEmpty())return null;let n=t.getCenter(new Hr.Vector3),i=t.getSize(new Hr.Vector3).length()/2;return!Number.isFinite(i)||i<=0?null:{center:[n.x,n.y,n.z],radius:i}}function xf({canvasAreaRef:e,controlsRef:t,sceneRef:n,modelUrl:i,modelRotation:r,bindingTransformSignature:a,modelLoaded:o}){let[s,c]=(0,dn.useState)(!1),[l,u]=(0,dn.useState)([]),[d,p]=(0,dn.useState)(!1),[g,f]=(0,dn.useState)(null),[v,E]=(0,dn.useState)(null),S=(0,dn.useRef)(!1),b=(0,dn.useRef)(0),x=(0,dn.useRef)(null);S.current=s;let R=(0,dn.useCallback)(C=>{C.updateMatrixWorld(!0),f(l1(C)),E(c1(C))},[]),w=(0,dn.useCallback)(()=>u([]),[]),P=(0,dn.useCallback)(()=>c(C=>!C),[]),y=(0,dn.useCallback)(()=>p(C=>!C),[]),m=(0,dn.useCallback)(C=>{S.current&&(x.current={x:C.clientX,y:C.clientY})},[]),A=(0,dn.useCallback)(C=>{if(!S.current)return;let D=x.current;if(x.current=null,D&&Math.hypot(C.clientX-D.x,C.clientY-D.y)>6||C.target.closest("button, input, textarea, .ri-measureTools"))return;let k=e.current,X=t.current?.camera,O=n.current;if(!k||!X||!O)return;let H=k.getBoundingClientRect(),B=(C.clientX-H.left)/H.width*2-1,se=-((C.clientY-H.top)/H.height)*2+1,Q=new Hr.Raycaster;Q.setFromCamera(new Hr.Vector2(B,se),X);let be=Q.intersectObject(O,!0)[0];be&&(b.current+=1,u(ve=>[...ve,{id:b.current,position:[be.point.x,be.point.y,be.point.z]}]))},[e,t,n]);return(0,dn.useEffect)(()=>{u([]),f(null),E(null)},[i]),(0,dn.useEffect)(()=>{u([])},[r,a]),(0,dn.useEffect)(()=>{let C=n.current;!o||!C||R(C)},[a,o,R,n]),{measureMode:s,measureModeRef:S,measurePoints:l,showDimensions:d,measureBox:g,modelBounds:v,refreshBounds:R,clearMeasurements:w,toggleMeasureMode:P,toggleDimensions:y,handleMeasurePointerDown:m,handleMeasureClick:A}}var Sf=require("react-dom"),Mf=require("@react-three/xr"),Cf=require("lucide-react"),wt=require("react");function Ru(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function Lu(){if(typeof navigator>"u")return!1;let e=navigator.userAgent;return/iPhone|iPad|iPod/i.test(e)?!0:navigator.platform==="MacIntel"&&typeof navigator.maxTouchPoints=="number"&&navigator.maxTouchPoints>1}function yf(){return Ru()||Lu()}function d1(){if(typeof window>"u"||typeof navigator>"u")return!1;let e=o=>typeof window.matchMedia=="function"&&window.matchMedia(o).matches,t=e("(pointer: coarse)")||e("(any-pointer: coarse)"),n=e("(hover: none)")||e("(any-hover: none)"),i=navigator.maxTouchPoints>0,r=typeof window.screen<"u"&&Math.min(window.screen.width,window.screen.height)<=1024,a=Ru();return t||a||i&&n||i&&r}function ku(){if(!d1())return!1;if(Ru())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function wf(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return ku()}}var cr=require("react/jsx-runtime"),_f={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function Tf({enableXR:e,usdzUrl:t,mobileHandoffUrl:n}){let i=(0,wt.useRef)(null),r=(0,wt.useMemo)(()=>{if(!e||typeof navigator>"u")return null;let B=navigator.xr;if(!B||typeof B.isSessionSupported!="function"||typeof B.addEventListener!="function")return null;try{return(0,Mf.createXRStore)({emulate:!1})}catch{return null}},[e]),[a,o]=(0,wt.useState)(!1),[s,c]=(0,wt.useState)(!1),[l,u]=(0,wt.useState)(!0),[d,p]=(0,wt.useState)(null),[g,f]=(0,wt.useState)(!1),[v,E]=(0,wt.useState)(!1),[S,b]=(0,wt.useState)(_f),[x,R]=(0,wt.useState)(!1),w=(0,wt.useMemo)(()=>e&&!!t?.trim()&&Lu(),[e,t]);(0,wt.useEffect)(()=>{u(yf())},[]);let P=(0,wt.useCallback)(()=>{if(typeof window>"u")return null;try{let B=new URL(n?.trim()||window.location.href,window.location.href);return B.protocol==="http:"||B.protocol==="https:"?B.toString():null}catch{return null}},[n]);(0,wt.useEffect)(()=>{if(!e||l){p(null),f(!1);return}p(P())},[e,l,P]),(0,wt.useEffect)(()=>{if(r)return r.subscribe(B=>E(B.session!=null&&B.mode==="immersive-ar"))},[r]),(0,wt.useEffect)(()=>{R(!1),b(_f)},[v]),(0,wt.useEffect)(()=>{if(!e||typeof navigator>"u")return;let B=navigator.xr;if(!B?.isSessionSupported)return;let se=!1;return B.isSessionSupported("immersive-ar").then(Q=>!se&&o(Q)).catch(()=>{}),B.isSessionSupported("immersive-vr").then(Q=>!se&&c(Q)).catch(()=>{}),()=>{se=!0}},[e]);let y=(0,wt.useCallback)(()=>{let B=P();B&&(p(B),f(!0))},[P]),m=(0,wt.useCallback)(()=>f(!1),[]),A=(0,wt.useCallback)(()=>{let B=t?.trim();if(!B)return;let se=document.createElement("a");se.setAttribute("rel","ar"),se.href=B,se.style.display="none";let Q=document.createElement("img");Q.alt="",Q.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",se.appendChild(Q),document.body.appendChild(se),se.click(),se.remove()},[t]),C=(0,wt.useCallback)(B=>{b(B),B.isPlacementMode||R(!1)},[]),D=(0,wt.useCallback)(B=>{R(!1),B?i.current?.finishPlacementMode():i.current?.cancelPlacementMode()},[]),$=(0,wt.useCallback)(B=>{B.preventDefault(),R(!0),i.current?.startPlacementMode()},[]);(0,wt.useEffect)(()=>{if(!x)return;let B=()=>D(!0),se=()=>D(!1);return window.addEventListener("pointerup",B),window.addEventListener("pointercancel",se),()=>{window.removeEventListener("pointerup",B),window.removeEventListener("pointercancel",se)}},[D,x]);let k=S.isModelPlaced?S.isPlacementMode?S.canPlace?"Release to place":"Move your device over a flat surface":null:S.canPlace?null:"Move your device over a flat surface",X=S.isModelPlaced&&!S.isPlacementMode?"Pinch to resize \xB7 Twist to rotate":null,O=r?.getState().domOverlayRoot??null,H=v&&O?(0,Sf.createPortal)((0,cr.jsxs)(cr.Fragment,{children:[X&&(0,cr.jsx)("div",{className:"ri-arHintOverlay",children:(0,cr.jsx)("div",{className:"ri-arHint",children:X})}),(0,cr.jsx)("div",{className:"ri-arOverlay",children:(0,cr.jsxs)("div",{className:"ri-arControls",children:[k&&(0,cr.jsx)("div",{className:"ri-arStatus",children:k}),S.isModelPlaced&&(0,cr.jsxs)("button",{type:"button",className:`ri-arActionButton ${x?"ri-arActionButton--active":""}`,onPointerDown:B=>$(B.nativeEvent),"aria-pressed":x,children:[(0,cr.jsx)(Cf.MapPin,{size:14}),"Relocate"]}),!S.isModelPlaced&&S.canPlace&&(0,cr.jsx)("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>i.current?.placeCurrent(),children:"Tap to place"})]})})]}),O):null;return{xrStore:r,presenterRef:i,arSupported:a,vrSupported:s,quickLookSupported:w,resolvedMobileHandoffUrl:d,isMobileHandoffOpen:g,arOverlay:H,openMobileHandoff:y,closeMobileHandoff:m,openQuickLook:A,handleARStateChange:C}}var pc=require("@react-three/fiber"),hc=require("@react-three/drei"),ig=require("@react-three/xr"),ag=require("three"),Wr=require("react");function ec(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var Pf=["none","directional","point","spot","hemisphere"],Af=["pbr","matcap","uv-checker"],Ef=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];var Rf=["sporadic","constantMild","constantWild"],Lf=["linear","radial","mirroredLinear"],Ss=["verySmall","small","medium","large","veryLarge","huge"],u1={clips:[],autoplayClip:null},p1={autofocus:{enabled:!1,focusDistance:5,focusRange:5,focalLength:.02,bokehScale:6,target:[0,0,0],mouse:!0,debug:0,manual:!1,smoothTime:.25},toneMapping:{enabled:!1,mode:"aces",exposure:1,resolution:256,whitePoint:4,middleGrey:.6,minLuminance:.01,averageLuminance:1,adaptationRate:1},brightnessContrast:{enabled:!1,brightness:0,contrast:0},hueSaturation:{enabled:!1,hue:0,saturation:0},colorAverage:{enabled:!1},dotScreen:{enabled:!1,angle:Math.PI/2,scale:1},glitch:{enabled:!1,mode:"sporadic",delay:[1.5,3.5],duration:[.6,1],strength:[.3,1],chromaticAberrationOffset:[0,0],columns:.05,ratio:.85},ssao:{enabled:!1,samples:30,rings:4,intensity:8,radius:.25,bias:.025,luminanceInfluence:.6,fade:.01,minRadiusScale:.33,worldDistanceThreshold:20,worldDistanceFalloff:5,worldProximityThreshold:6,worldProximityFalloff:3},bloom:{enabled:!1,intensity:.3,luminanceThreshold:.9,luminanceSmoothing:.2,mipmapBlur:!0,radius:0,levels:8},godRays:{enabled:!1,sunPosition:[5,10,5],samples:60,density:.96,decay:.9,weight:.4,exposure:.6,clampMax:1,blur:!0,kernelSize:"small"},grid:{enabled:!1,scale:1,lineWidth:0},noise:{enabled:!1,opacity:1,premultiply:!1},depthOfField:{enabled:!1,focusDistance:5,focusRange:5,focalLength:.02,bokehScale:6},chromaticAberration:{enabled:!1,offsetX:.002,offsetY:.002,radialModulation:!1,modulationOffset:.15},lensflare:{enabled:!1,lensPosition:[-25,6,-60],smoothTime:.07,glareSize:.2,flareSize:.01,flareSpeed:.01,flareShape:.01,animated:!0,anamorphic:!1,colorGain:"#141414",haloScale:.5,secondaryGhosts:!0,aditionalStreaks:!0,ghostScale:0,opacity:1,starBurst:!1},vignette:{enabled:!1,offset:.3,darkness:.3,eskil:!1},smaa:{enabled:!1},sepia:{enabled:!1,intensity:0},scanline:{enabled:!1,density:1.25},pixelation:{enabled:!1,granularity:5},outline:{enabled:!1,selectionLayer:10,edgeStrength:2.5,pulseSpeed:0,visibleEdgeColor:"#ffffff",hiddenEdgeColor:"#22090a",kernelSize:"large",blur:!1,xRay:!0},selectiveBloom:{enabled:!1,selectionLayer:10,intensity:1,luminanceThreshold:.9,luminanceSmoothing:.025,kernelSize:"large",mipmapBlur:!0,inverted:!1,ignoreBackground:!1},ramp:{enabled:!1,rampType:"linear",rampStart:[.5,.5],rampEnd:[1,1],startColor:"#000000",endColor:"#ffffff",opacity:.5,rampBias:.5,rampGain:.5,rampMask:!1,rampInvert:!1}},ya={model:{rotation:[0,0,0],showAdvancedRotation:!1,renderer:"pbr",shading:"lit",autoRotate:!1,autoRotateSpeed:1},camera:{fieldOfView:50,showAdvancedSettings:!1},lighting:{ambient:{intensity:.25,color:"#ffffff"},lights:[{id:"light-hemi",type:"hemisphere",color:"#ffffff",intensity:.3,position:[0,1,0],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0},{id:"light-key",type:"directional",color:"#ffffff",intensity:2.5,position:[6,12,6],attachedToCamera:!1,castShadow:!0,shadowBias:-5e-4,visible:!0},{id:"light-fill",type:"directional",color:"#ffffff",intensity:0,position:[-6,8,-6],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}]},shadows:{enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3},environment:{source:"preset",preset:"apartment",customEnvironmentUrl:"",intensity:.25,rotation:0,shadowLight:{enabled:!1,intensity:2.5,bias:-5e-4}},wireframe:{enabled:!1,color:"#000000",opacity:1},background:{enabled:!1,type:"color",color:"#1c1c1d",imageUrl:""},groundShadows:{enabled:!1,mode:"shadowCatcher",intensity:.7,borderFade:1,height:0,size:10},postProcessing:p1,animations:u1,annotations:[]};var xr=require("@react-three/fiber"),Du=require("@react-three/xr"),tc=require("three"),dr=require("react");function kf({renderMode:e}){let{scene:t}=(0,xr.useThree)(),n=(0,xr.useThree)(o=>o.setFrameloop),i=(0,Du.useXR)(o=>o.session!=null),r=(0,Du.useXR)(o=>o.mode==="immersive-ar"),a=(0,dr.useRef)(void 0);return(0,dr.useEffect)(()=>{n(i?"always":e)},[i,e,n]),(0,dr.useEffect)(()=>{r?(a.current=t.background,t.background=null):a.current!==void 0&&(t.background=a.current,a.current=void 0)},[r,t]),(0,xr.useFrame)(()=>{r&&t.background!==null&&(t.background=null)}),null}function Df({onPresentingChange:e}){let t=(0,xr.useThree)(r=>r.gl),n=(0,dr.useRef)(null);(0,dr.useEffect)(()=>{let r=t.xr;if(!r)return;let a=c=>{c?(n.current=t.shadowMap.enabled,t.shadowMap.enabled=!1):n.current!==null&&(t.shadowMap.enabled=n.current,n.current=null),e(c)},o=()=>a(!0),s=()=>a(!1);return r.addEventListener("sessionstart",o),r.addEventListener("sessionend",s),a(r.isPresenting),()=>{r.removeEventListener("sessionstart",o),r.removeEventListener("sessionend",s)}},[t,e]);let i=(0,dr.useRef)(0);return(0,xr.useFrame)(()=>{if(!t.xr.isPresenting)return;let r=performance.now();if(r-i.current<1e3)return;i.current=r;let a=t.xr}),null}function Nf({active:e}){let t=(0,xr.useThree)(n=>n.invalidate);return(0,dr.useEffect)(()=>{e&&t()},[e,t]),(0,xr.useFrame)(()=>{e&&t()}),null}function If({color:e}){let{scene:t}=(0,xr.useThree)();return(0,dr.useEffect)(()=>{let n=t.background;return t.background=e?new tc.Color(e):null,()=>{t.background=n}},[t,e]),null}function Bf({rotation:e}){let{scene:t}=(0,xr.useThree)();return(0,dr.useLayoutEffect)(()=>{let n=e*Math.PI/180;t.environmentRotation.set(0,n,0),t.backgroundRotation.set(0,n,0)}),null}function Of({cameraConfig:e}){let{camera:t}=(0,xr.useThree)();return(0,dr.useEffect)(()=>{if(!(t instanceof tc.PerspectiveCamera))return;let n=e?.fov;typeof n=="number"&&t.fov!==n&&(t.fov=n,t.updateProjectionMatrix())},[t,e]),null}var Ps=require("@react-three/fiber"),Le=require("@react-three/postprocessing"),Gi=require("postprocessing"),Gr=require("three"),yn=require("react");var Ut=require("three"),mo=new Map,Pi={color:"#93c5fd",intensity:.07},Cs=new Ut.Color(Pi.color).multiplyScalar(Pi.intensity),zf=new Ut.Color(Pi.color),Uf=.28,fo=new Map,Bu=new Map;function h1(e){return`${e.name}|${e.size}|${e.lastModified}`}function Ff(e){let t=h1(e),n=e.name.lastIndexOf("."),i=n>0?e.name.slice(0,n):e.name,r=n>0?e.name.slice(n):"",a=`materials/${e.name}`,o=2;for(;;){let s=Bu.get(a);if(s===void 0||s===t)return Bu.set(a,t),a;a=`materials/${i}-${o}${r}`,o+=1}}function nc(e){return fo.get(e)}function Vf(e,t){let n=++e.loadGeneration;e.loaded=!1;let i=()=>{if(e.loadGeneration!==n)return;e.loaded=!0;let r=e.pending;e.pending=[];for(let a of r)a()};new Ut.ImageLoader().load(t,r=>{e.loadGeneration===n&&(e.texture.image=r,e.texture.needsUpdate=!0,i())},void 0,()=>{e.loadGeneration===n&&(console.warn(`Failed to load texture: ${t}`),i())})}function jf(e,t){for(let n of[Ut.SRGBColorSpace,Ut.NoColorSpace]){let i=mo.get(Ms(e,n));i&&Vf(i,t)}}function rc(e,t){let n=fo.get(e);n&&n!==t&&n.startsWith("blob:")&&URL.revokeObjectURL(n),fo.set(e,t),jf(e,t)}function Ou(e){let t=fo.get(e);t&&(t.startsWith("blob:")&&URL.revokeObjectURL(t),fo.delete(e),Bu.delete(e),jf(e,e))}function Ms(e,t){return`${t}|${e}`}function Ts(e,t=Ut.NoColorSpace,n){let i=Ms(e,t),r=mo.get(i);if(r)return n&&!r.loaded&&r.pending.push(n),r.texture;let a=fo.get(e)??e,o={texture:new Ut.Texture,refCount:0,loaded:!1,pending:n?[n]:[],loadGeneration:0};return o.texture.flipY=!1,o.texture.colorSpace=t,mo.set(i,o),Vf(o,a),o.texture}function ic(e,t=Ut.NoColorSpace,n){let i=Ts(e,t,n);return mo.get(Ms(e,t)).refCount+=1,i}function wa(e,t=Ut.NoColorSpace){let n=mo.get(Ms(e,t));n&&(n.refCount-=1,n.refCount<=0&&(n.loadGeneration+=1,n.pending=[],n.texture.dispose(),mo.delete(Ms(e,t))))}function ac(e,t,n,i,r,a=1,o=0){let s=e.offsetTextures??(e.offsetTextures={}),c=s[t],l=c;if(!l||l.sourcePath!==i||l.base!==n){c?.texture.dispose();let d=n.clone();d.wrapS=Ut.RepeatWrapping,d.wrapT=Ut.RepeatWrapping,d.center.set(.5,.5),d.needsUpdate=!0,l={texture:d,sourcePath:i,base:n},s[t]=l}let u=a>0?a:1;return l.texture.offset.set(r[0],r[1]),l.texture.repeat.set(1/u,1/u),l.texture.rotation=o,l.texture}function oc(e,t){let n=e.offsetTextures,i=n?.[t];i&&(i.texture.dispose(),delete n[t])}function Hf(e){let t=e.offsetTextures;if(t){for(let n of Object.values(t))n.texture.dispose();delete e.offsetTextures}}var Nu=null;function sc(){if(Nu)return Nu;let e=256,t=document.createElement("canvas");t.width=e,t.height=e;let n=t.getContext("2d"),i=n.createRadialGradient(e*.35,e*.35,e*.02,e*.5,e*.5,e*.55);i.addColorStop(0,"#ffffff"),i.addColorStop(.4,"#b5b5b5"),i.addColorStop(1,"#3a3a3a"),n.fillStyle=i,n.fillRect(0,0,e,e);let r=new Ut.CanvasTexture(t);return r.colorSpace=Ut.SRGBColorSpace,Nu=r,r}var Iu=null;function Gf(){if(Iu)return Iu;let e=1024,t=8,n=e/t,i=["#ef4444","#f59e0b","#22c55e","#6366f1"],r=document.createElement("canvas");r.width=e,r.height=e;let a=r.getContext("2d");a.textAlign="center",a.textBaseline="middle";for(let s=0;s<t;s+=1)for(let c=0;c<t;c+=1){let l=c*n,u=s*n,d=(Math.floor(c/2)+Math.floor(s/2))%4;a.fillStyle=i[d],a.fillRect(l,u,n,n),a.strokeStyle="rgba(0, 0, 0, 0.28)",a.lineWidth=2;for(let b=1;b<4;b+=1){let x=b*n/4;a.beginPath(),a.moveTo(l+x,u),a.lineTo(l+x,u+n),a.moveTo(l,u+x),a.lineTo(l+n,u+x),a.stroke()}a.strokeStyle="#09090b",a.lineWidth=7,a.strokeRect(l,u,n,n);let p=l+n*.23,g=u+n*.72,f=l+n*.72,v=u+n*.23;a.lineCap="round",a.lineJoin="round",a.beginPath(),a.moveTo(p,g),a.lineTo(f,v),a.lineTo(f-n*.2,v),a.moveTo(f,v),a.lineTo(f,v+n*.2),a.stroke();let E=s*t+c+1;a.font=`700 ${Math.round(n*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,a.fillStyle="#ffffff",a.strokeStyle="rgba(0, 0, 0, 0.85)",a.lineWidth=6;let S=String(E).padStart(2,"0");a.strokeText(S,l+n/2,u+n*.82),a.fillText(S,l+n/2,u+n*.82)}let o=new Ut.CanvasTexture(r);return o.colorSpace=Ut.SRGBColorSpace,o.wrapS=Ut.RepeatWrapping,o.wrapT=Ut.RepeatWrapping,o.flipY=!1,o.anisotropy=8,o.needsUpdate=!0,Iu=o,o}var go=require("react"),lc=require("postprocessing"),Wf=require("three"),qf=require("react/jsx-runtime"),m1=`
|
|
3667
|
+
`);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${Sc}" height="${Sc}" viewBox="0 0 ${Sc} ${Sc}">`,` <title>${t} UV layout</title>`," <desc>UV0 island-outline template exported by React Immersive. The SVG canvas maps to the complete 0\u20131 texture area.</desc>",' <rect width="2048" height="2048" fill="none" stroke="#94a3b8" stroke-width="2"/>',n,"</svg>"].join(`
|
|
3668
|
+
`)}function V2(e,t="model"){let n=B2(e),i=bx(t);return n.map((r,o)=>{let a=jh(r.name,`material-${o+1}`);return{filename:n.length===1?`${i}-uv-layout.svg`:`${i}-uv-${a}-${o+1}.svg`,materialName:r.name,meshCount:[...r.layers.values()].filter(l=>l.edges.size>0).length,svg:U2(r)}})}async function vx(e,t="model"){let n=V2(e,t);if(n.length===0)return n;if(n.length===1)return oo(new Blob([n[0].svg],{type:"image/svg+xml;charset=utf-8"}),n[0].filename),n;let i=Object.fromEntries(n.map(o=>[o.filename,(0,gx.strToU8)(o.svg)])),r=await Ru(i);return oo(new Blob([r],{type:"application/zip"}),`${bx(t)}-uv-layouts.zip`),n}function yx({sceneRef:e,materialRefs:t,rendererCaptureRef:n,objectBindings:i,downloadFilename:r,captureVideo:o}){let[a,s]=(0,Mr.useState)(!1),[l,c]=(0,Mr.useState)(!1),[h,p]=(0,Mr.useState)(null),[u,m]=(0,Mr.useState)(null),[f,g]=(0,Mr.useState)("auto");(0,Mr.useEffect)(()=>{if(!l)return;let _=()=>c(!1);return window.addEventListener("pointerdown",_),()=>window.removeEventListener("pointerdown",_)},[l]);let b=(0,Mr.useCallback)(()=>{p(null),m(null),c(_=>!_)},[]),y=(0,Mr.useCallback)(()=>{let _=e.current;_&&(c(!1),s(!0),ux({scene:_,objectBindings:i,matRefs:t.current,downloadFilename:r,onComplete:()=>s(!1)}))},[r,t,i,e]),v=(0,Mr.useCallback)(()=>{c(!1),iu(n.current).then(_=>{let x=document.createElement("a");x.href=_,x.download=`${r}.png`,document.body.appendChild(x),x.click(),document.body.removeChild(x)}).catch(_=>{console.error("Screenshot failed:",_)})},[r,n]),w=(0,Mr.useCallback)(async()=>{let _=e.current;if(_)try{if((await vx(_,r)).length===0){p("This model does not contain UV coordinates.");return}p(null),c(!1)}catch(x){console.error("UV layout export failed:",x),p("Could not create the UV layout archive.")}},[r,e]),M=(0,Mr.useCallback)(async _=>{c(!1),m(null);try{let x=await o({mode:_,format:f}),P=x.type==="image/gif"?"gif":x.type.startsWith("video/mp4")?"mp4":"webm",d=URL.createObjectURL(x),S=document.createElement("a");S.href=d,S.download=`${r}-${_}.${P}`,document.body.appendChild(S);try{S.click()}finally{S.remove(),setTimeout(()=>URL.revokeObjectURL(d),1e3)}}catch(x){if(x instanceof DOMException&&x.name==="AbortError")return;m(x instanceof Error?x.message:"Could not export the video."),c(!0)}},[o,r,f]);return{isDownloading:a,downloadMenuOpen:l,uvExportError:h,toggleDownloadMenu:b,handleDownloadMesh:y,handleDownloadScreenshot:v,handleDownloadUvLayout:w,handleDownloadVideo:M,videoFormat:f,setVideoFormat:g,videoExportError:u}}var vt=require("react"),Kr=require("three");var sn=require("three");function Lu(e){if(e.length!==3)return null;let t=new sn.Vector3(...e[0]).sub(new sn.Vector3(...e[1])),n=new sn.Vector3(...e[2]).sub(new sn.Vector3(...e[1]));return t.lengthSq()===0||n.lengthSq()===0?null:Math.acos(Math.max(-1,Math.min(1,t.normalize().dot(n.normalize()))))*180/Math.PI}function xx(e,t){if(!e.normal)return null;let n=new sn.Vector3(...e.normal);if(n.lengthSq()===0)return null;n.normalize();let i=new sn.Vector3(...t),r=i.clone().sub(new sn.Vector3(...e.position)).dot(n);return{distance:Math.abs(r),projection:i.addScaledVector(n,-r).toArray()}}function Du(e){if(e.length<3)return{error:"Pick at least three points to finish the area."};let t=new sn.Vector3(...e[0]),n=e.map(b=>new sn.Vector3(...b).sub(t)),i=Math.max(...n.map(b=>b.length()));if(i===0)return{error:"Area points must be distinct."};let r=new sn.Vector3;for(let b=1;b<n.length-1;b+=1){let y=n[b].clone().cross(n[b+1]);y.lengthSq()>r.lengthSq()&&r.copy(y)}if(r.length()<=i*i*1e-10)return{error:"Area points must not lie on one straight line."};r.normalize();let o=Math.max(i*1e-5,Number.EPSILON*Math.max(...e.flat().map(Math.abs))*32);if(n.some(b=>Math.abs(b.dot(r))>o))return{error:"Area points must lie on one plane."};let a=n.find(b=>b.length()>i*1e-10).clone().normalize(),s=r.clone().cross(a).normalize(),l=n.map(b=>new sn.Vector2(b.dot(a),b.dot(s))),c=(b,y,v)=>(y.x-b.x)*(v.y-b.y)-(y.y-b.y)*(v.x-b.x),h=i*i*1e-10,p=(b,y,v)=>Math.abs(c(b,y,v))<=h&&v.x>=Math.min(b.x,y.x)-i*1e-10&&v.x<=Math.max(b.x,y.x)+i*1e-10&&v.y>=Math.min(b.y,y.y)-i*1e-10&&v.y<=Math.max(b.y,y.y)+i*1e-10;for(let b=0;b<l.length;b+=1){let y=l[b],v=l[(b+1)%l.length];if(y.distanceTo(v)<=i*1e-10)return{error:"Area points must be distinct."};for(let w=b+1;w<l.length;w+=1){if(w===b+1||b===0&&w===l.length-1)continue;let M=l[w],_=l[(w+1)%l.length],x=c(y,v,M),P=c(y,v,_),d=c(M,_,y),S=c(M,_,v);if(x*P<0&&d*S<0||p(y,v,M)||p(y,v,_)||p(M,_,y)||p(M,_,v))return{error:"Area edges must not cross or touch each other."}}}let u=0,m=0,f=0;for(let b=0;b<l.length;b+=1){let y=l[b],v=l[(b+1)%l.length],w=y.x*v.y-v.x*y.y;u+=w,m+=(y.x+v.x)*w,f+=(y.y+v.y)*w}if(Math.abs(u)<=h)return{error:"The polygon has no measurable area."};let g=t.clone().addScaledVector(a,m/(3*u)).addScaledVector(s,f/(3*u));return{area:Math.abs(u)/2,center:g.toArray(),triangles:sn.ShapeUtils.triangulateShape(l,[])}}function F2(e){if(!(e.object instanceof sn.Mesh)||!e.face)return null;let t=e.object,n=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let i=new sn.Matrix4;t.getMatrixAt(e.instanceId,i),n.multiply(i)}return[e.face.a,e.face.b,e.face.c].map(i=>t.getVertexPosition(i,new sn.Vector3).applyMatrix4(n))}function wx(e){if(!(e.object instanceof sn.Mesh))return!1;for(let n=e.object;n;n=n.parent)if(!n.visible||n.userData.riEditorGizmo||n.userData.riDecal)return!1;return(Array.isArray(e.object.material)?e.object.material:[e.object.material])[e.face?.materialIndex??0]?.visible!==!1}function Sx(e,t,n,i,r,o=12){let a=F2(e),s=a?a[1].clone().sub(a[0]).cross(a[2].clone().sub(a[0])).normalize():null,l={position:e.point.toArray(),...s&&s.lengthSq()>0?{normal:s.toArray()}:{},...a?{faceVertices:a.map(u=>u.toArray())}:{}};if(!a||r==="none")return l;let c=u=>{let m=new sn.Vector4(u.x,u.y,u.z,1).applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix);return m.w<=0||m.z/m.w<-1||m.z/m.w>1?null:{screen:new sn.Vector2((m.x/m.w+1)*i.width/2,(1-m.y/m.w)*i.height/2),w:m.w}},h=a.map(c),p=o;if((r==="vertex"||r==="auto")&&(h.forEach((u,m)=>{let f=u?.screen.distanceTo(n)??1/0;f<=p&&(p=f,l.position=a[m].toArray(),l.snapped="vertex")}),l.snapped))return l;if(r==="edge"||r==="auto")for(let u=0;u<3;u+=1){let m=(u+1)%3,f=h[u],g=h[m];if(!f||!g)continue;let b=g.screen.clone().sub(f.screen);if(b.lengthSq()===0)continue;let y=Math.max(0,Math.min(1,n.clone().sub(f.screen).dot(b)/b.lengthSq())),v=f.screen.clone().addScaledVector(b,y).distanceTo(n);if(v<=p){p=v;let w=y*f.w/((1-y)*g.w+y*f.w);l.position=a[u].clone().lerp(a[m],w).toArray(),l.snapped="edge"}}return l}var Nu={tool:"distance",points:[],areaClosed:!1,error:null};function _x(e,t){if(t.type==="tool")return{...Nu,tool:t.tool};if(t.type==="clear")return{...Nu,tool:e.tool};if(t.type==="undo")return{...e,points:e.points.slice(0,-1),areaClosed:!1,error:null};if(t.type==="finishArea"){if(e.tool!=="area")return e;let o=Du(e.points.map(a=>a.position));return"error"in o?{...e,error:o.error}:{...e,areaClosed:!0,error:null}}if(t.type!=="place")return e;let i=e.areaClosed||e.tool==="angle"&&e.points.length===3||e.tool==="pointToPlane"&&e.points.length===2?[]:e.points;if(e.tool==="pointToPlane"&&i.length===0&&!t.point.normal)return{...e,error:"Pick a triangle face to define the reference plane."};if(i.length>=256)return{...e,error:"Finish or clear this measurement before adding more points."};let r=[...i,t.point];return e.tool==="angle"&&r.length===3&&Lu(r.map(o=>o.position))===null?{...e,error:"Pick a point away from the angle's vertex."}:{...e,points:r,areaClosed:!1,error:null}}function j2(e){let t=new Kr.Box3().setFromObject(e),n=new Kr.Vector3;return t.getSize(n),{min:[t.min.x,t.min.y,t.min.z],max:[t.max.x,t.max.y,t.max.z],size:[n.x,n.y,n.z]}}function G2(e){let t=new Kr.Box3().setFromObject(e);if(t.isEmpty())return null;let n=t.getCenter(new Kr.Vector3),i=t.getSize(new Kr.Vector3).length()/2;return!Number.isFinite(i)||i<=0?null:{center:[n.x,n.y,n.z],radius:i}}function Mx({canvasAreaRef:e,controlsRef:t,sceneRef:n,modelUrl:i,modelRotation:r,bindingTransformSignature:o,modelLoaded:a,enabled:s}){let[l,c]=(0,vt.useState)(!1),[h,p]=(0,vt.useReducer)(_x,Nu),[u,m]=(0,vt.useState)("none"),[f,g]=(0,vt.useState)(null),[b,y]=(0,vt.useState)(!1),[v,w]=(0,vt.useState)(null),[M,_]=(0,vt.useState)(null),x=(0,vt.useRef)(!1),P=(0,vt.useRef)(0),d=(0,vt.useRef)(null),S=(0,vt.useRef)(null);x.current=l&&s;let C=(0,vt.useCallback)(te=>{te.updateMatrixWorld(!0),w(j2(te)),_(G2(te))},[]),T=(0,vt.useCallback)(()=>{p({type:"clear"}),g(null)},[]),E=(0,vt.useCallback)(te=>{p({type:"tool",tool:te}),g(null)},[]),k=(0,vt.useCallback)(()=>p({type:"undo"}),[]),D=(0,vt.useCallback)(()=>p({type:"finishArea"}),[]),B=(0,vt.useCallback)(()=>c(te=>!te),[]),L=(0,vt.useCallback)(()=>y(te=>!te),[]),X=(0,vt.useCallback)(te=>{!x.current||te.button!==0||(d.current={x:te.clientX,y:te.clientY})},[]),O=(0,vt.useCallback)((te,We)=>{let wt=e.current,be=t.current?.camera,ue=n.current;if(!wt||!be||!ue)return null;let Ne=wt.getBoundingClientRect();if(!Ne.width||!Ne.height)return null;ue.updateMatrixWorld(!0),be.updateMatrixWorld(!0);let Te=new Kr.Vector2(te-Ne.left,We-Ne.top),bn=new Kr.Raycaster;bn.setFromCamera(new Kr.Vector2(Te.x/Ne.width*2-1,1-Te.y/Ne.height*2),be);let Oe=bn.intersectObject(ue,!0).find(wx);return Oe?Sx(Oe,be,Te,Ne,u):null},[e,t,n,u]),I=(0,vt.useCallback)(()=>{S.current!==null&&cancelAnimationFrame(S.current),S.current=null,g(null)},[]),re=(0,vt.useCallback)(te=>{if(!x.current||u==="none"||te.buttons!==0||te.target.closest("button, input, select, label, textarea, .ri-measureTools")){I();return}S.current!==null&&cancelAnimationFrame(S.current);let{clientX:We,clientY:wt}=te;S.current=requestAnimationFrame(()=>{S.current=null;let be=O(We,wt);g(be?.snapped?be:null)})},[I,O,u]),ke=(0,vt.useCallback)(te=>{if(!x.current)return;let We=d.current;if(d.current=null,We&&Math.hypot(te.clientX-We.x,te.clientY-We.y)>6||te.target.closest("button, input, select, label, textarea, .ri-measureTools"))return;let be=O(te.clientX,te.clientY);be&&(P.current+=1,p({type:"place",point:{...be,id:P.current}}))},[O]);return(0,vt.useEffect)(()=>{T(),w(null),_(null)},[i,T]),(0,vt.useEffect)(()=>{T()},[r,o,T]),(0,vt.useEffect)(()=>(I(),I),[I,l,u]),(0,vt.useEffect)(()=>{s||(c(!1),I())},[s,I]),(0,vt.useEffect)(()=>{let te=n.current;!a||!te||C(te)},[o,a,C,n]),{measureMode:l,measureModeRef:x,measurePoints:h.points,measurementTool:h.tool,areaClosed:h.areaClosed,measurementError:h.error,selectMeasurementTool:E,undoMeasurementPoint:k,finishMeasureArea:D,snapMode:u,setSnapMode:m,snapPreview:f,handleMeasurePointerMove:re,clearSnapPreview:I,showDimensions:b,measureBox:v,modelBounds:M,refreshBounds:C,clearMeasurements:T,toggleMeasureMode:B,toggleDimensions:L,handleMeasurePointerDown:X,handleMeasureClick:ke}}var Px=require("react-dom"),Ax=require("@react-three/xr"),Ex=require("lucide-react"),kt=require("react");function Cx(e,t){let n=null,i=o=>{let a=o.mode==="immersive-ar"?o.session??null:null;a!==n&&(n&&t.endAR(),n=a,n&&t.startAR())},r=e.subscribe(i);return i(e.getState()),()=>{r(),n&&t.endAR("interrupted"),n=null}}var Vr=require("react/jsx-runtime"),Tx={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function Rx({enableXR:e,usdzUrl:t,mobileHandoffUrl:n,engagement:i}){let r=Me(),o=(0,kt.useRef)(null),a=(0,kt.useMemo)(()=>{if(!e||typeof navigator>"u")return null;let I=navigator.xr;if(!I||typeof I.isSessionSupported!="function"||typeof I.addEventListener!="function")return null;try{return(0,Ax.createXRStore)({emulate:!1})}catch{return null}},[e]),[s,l]=(0,kt.useState)(!1),[c,h]=(0,kt.useState)(!1),[p,u]=(0,kt.useState)(!0),[m,f]=(0,kt.useState)(null),[g,b]=(0,kt.useState)(!1),[y,v]=(0,kt.useState)(!1),[w,M]=(0,kt.useState)(Tx),[_,x]=(0,kt.useState)(!1),P=(0,kt.useMemo)(()=>e&&!!t?.trim()&&_h(),[e,t]);(0,kt.useEffect)(()=>{u(Gv())},[]);let d=(0,kt.useCallback)(()=>{if(typeof window>"u")return null;try{let I=new URL(n?.trim()||window.location.href,window.location.href);return I.protocol==="http:"||I.protocol==="https:"?I.toString():null}catch{return null}},[n]);(0,kt.useEffect)(()=>{if(!e||p){f(null),b(!1);return}f(d())},[e,p,d]),(0,kt.useEffect)(()=>{if(a)return a.subscribe(I=>v(I.session!=null&&I.mode==="immersive-ar"))},[a]),(0,kt.useEffect)(()=>{if(a)return Cx(a,i)},[a,i]),(0,kt.useEffect)(()=>{x(!1),M(Tx)},[y]),(0,kt.useEffect)(()=>{if(!e||typeof navigator>"u")return;let I=navigator.xr;if(!I?.isSessionSupported)return;let re=!1;return I.isSessionSupported("immersive-ar").then(ke=>!re&&l(ke)).catch(()=>{}),I.isSessionSupported("immersive-vr").then(ke=>!re&&h(ke)).catch(()=>{}),()=>{re=!0}},[e]);let S=(0,kt.useCallback)(()=>{let I=d();I&&(i.requestARLaunch("mobile-handoff"),f(I),b(!0))},[d,i]),C=(0,kt.useCallback)(()=>b(!1),[]),T=(0,kt.useCallback)(()=>{let I=t?.trim();if(!I)return;i.requestARLaunch("quick-look");let re=document.createElement("a");re.setAttribute("rel","ar"),re.href=I,re.style.display="none";let ke=document.createElement("img");ke.alt="",ke.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",re.appendChild(ke),document.body.appendChild(re),re.click(),re.remove()},[t,i]),E=(0,kt.useCallback)(I=>{M(I),I.isPlacementMode||x(!1)},[]),k=(0,kt.useCallback)(I=>{x(!1),I?o.current?.finishPlacementMode():o.current?.cancelPlacementMode()},[]),D=(0,kt.useCallback)(I=>{I.preventDefault(),x(!0),o.current?.startPlacementMode()},[]);(0,kt.useEffect)(()=>{if(!_)return;let I=()=>k(!0),re=()=>k(!1);return window.addEventListener("pointerup",I),window.addEventListener("pointercancel",re),()=>{window.removeEventListener("pointerup",I),window.removeEventListener("pointercancel",re)}},[k,_]);let B=w.isModelPlaced?w.isPlacementMode?w.canPlace?r("arReleaseToPlace"):r("arFindSurface"):null:w.canPlace?null:r("arFindSurface"),L=w.isModelPlaced&&!w.isPlacementMode?r("arGestureHint"):null,X=a?.getState().domOverlayRoot??null,O=y&&X?(0,Px.createPortal)((0,Vr.jsxs)(Vr.Fragment,{children:[L&&(0,Vr.jsx)("div",{className:"ri-arHintOverlay",children:(0,Vr.jsx)("div",{className:"ri-arHint",children:L})}),(0,Vr.jsx)("div",{className:"ri-arOverlay",children:(0,Vr.jsxs)("div",{className:"ri-arControls",children:[B&&(0,Vr.jsx)("div",{className:"ri-arStatus",children:B}),w.isModelPlaced&&(0,Vr.jsxs)("button",{type:"button",className:`ri-arActionButton ${_?"ri-arActionButton--active":""}`,onPointerDown:I=>D(I.nativeEvent),"aria-pressed":_,children:[(0,Vr.jsx)(Ex.MapPin,{size:14}),r("arRelocate")]}),!w.isModelPlaced&&w.canPlace&&(0,Vr.jsx)("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>o.current?.placeCurrent(),children:r("tapToPlace")})]})})]}),X):null;return{xrStore:a,presenterRef:o,arSupported:s,vrSupported:c,quickLookSupported:P,resolvedMobileHandoffUrl:m,isMobileHandoffOpen:g,arOverlay:O,openMobileHandoff:S,closeMobileHandoff:C,openQuickLook:T,handleARStateChange:E}}var Cc=require("@react-three/fiber"),n0=require("@react-three/drei"),r0=require("@react-three/xr"),ao=require("three"),vi=require("react");function Ou(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var kx=["none","directional","point","spot","hemisphere"],Lx=["pbr","matcap","uv-checker"],Dx=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];var Nx=["sporadic","constantMild","constantWild"],Ox=["linear","radial","mirroredLinear"],_c=["verySmall","small","medium","large","veryLarge","huge"],Iu=["x","y","z"],Fa={enabled:!1,axis:"y",position:.5,flip:!1},H2={clips:[],autoplayClip:null},W2={autofocus:{enabled:!1,focusDistance:5,focusRange:5,focalLength:.02,bokehScale:6,target:[0,0,0],mouse:!0,debug:0,manual:!1,smoothTime:.25},toneMapping:{enabled:!1,mode:"aces",exposure:1,resolution:256,whitePoint:4,middleGrey:.6,minLuminance:.01,averageLuminance:1,adaptationRate:1},brightnessContrast:{enabled:!1,brightness:0,contrast:0},hueSaturation:{enabled:!1,hue:0,saturation:0},colorAverage:{enabled:!1},dotScreen:{enabled:!1,angle:Math.PI/2,scale:1},glitch:{enabled:!1,mode:"sporadic",delay:[1.5,3.5],duration:[.6,1],strength:[.3,1],chromaticAberrationOffset:[0,0],columns:.05,ratio:.85},ssao:{enabled:!1,samples:30,rings:4,intensity:8,radius:.25,bias:.025,luminanceInfluence:.6,fade:.01,minRadiusScale:.33,worldDistanceThreshold:20,worldDistanceFalloff:5,worldProximityThreshold:6,worldProximityFalloff:3},bloom:{enabled:!1,intensity:.3,luminanceThreshold:.9,luminanceSmoothing:.2,mipmapBlur:!0,radius:0,levels:8},godRays:{enabled:!1,sunPosition:[5,10,5],samples:60,density:.96,decay:.9,weight:.4,exposure:.6,clampMax:1,blur:!0,kernelSize:"small"},grid:{enabled:!1,scale:1,lineWidth:0},noise:{enabled:!1,opacity:1,premultiply:!1},depthOfField:{enabled:!1,focusDistance:5,focusRange:5,focalLength:.02,bokehScale:6},chromaticAberration:{enabled:!1,offsetX:.002,offsetY:.002,radialModulation:!1,modulationOffset:.15},lensflare:{enabled:!1,lensPosition:[-25,6,-60],smoothTime:.07,glareSize:.2,flareSize:.01,flareSpeed:.01,flareShape:.01,animated:!0,anamorphic:!1,colorGain:"#141414",haloScale:.5,secondaryGhosts:!0,aditionalStreaks:!0,ghostScale:0,opacity:1,starBurst:!1},vignette:{enabled:!1,offset:.3,darkness:.3,eskil:!1},smaa:{enabled:!1},sepia:{enabled:!1,intensity:0},scanline:{enabled:!1,density:1.25},pixelation:{enabled:!1,granularity:5},outline:{enabled:!1,selectionLayer:10,edgeStrength:2.5,pulseSpeed:0,visibleEdgeColor:"#ffffff",hiddenEdgeColor:"#22090a",kernelSize:"large",blur:!1,xRay:!0},selectiveBloom:{enabled:!1,selectionLayer:10,intensity:1,luminanceThreshold:.9,luminanceSmoothing:.025,kernelSize:"large",mipmapBlur:!0,inverted:!1,ignoreBackground:!1},ramp:{enabled:!1,rampType:"linear",rampStart:[.5,.5],rampEnd:[1,1],startColor:"#000000",endColor:"#ffffff",opacity:.5,rampBias:.5,rampGain:.5,rampMask:!1,rampInvert:!1}},ja={model:{rotation:[0,0,0],showAdvancedRotation:!1,renderer:"pbr",shading:"lit",autoRotate:!1,autoRotateSpeed:1},camera:{fieldOfView:50,showAdvancedSettings:!1},lighting:{ambient:{intensity:.25,color:"#ffffff"},lights:[{id:"light-hemi",type:"hemisphere",color:"#ffffff",intensity:.3,position:[0,1,0],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0},{id:"light-key",type:"directional",color:"#ffffff",intensity:2.5,position:[6,12,6],attachedToCamera:!1,castShadow:!0,shadowBias:-5e-4,visible:!0},{id:"light-fill",type:"directional",color:"#ffffff",intensity:0,position:[-6,8,-6],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}]},shadows:{enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3},environment:{source:"preset",preset:"apartment",customEnvironmentUrl:"",intensity:.25,rotation:0,shadowLight:{enabled:!1,intensity:2.5,bias:-5e-4}},wireframe:{enabled:!1,color:"#000000",opacity:1},background:{enabled:!1,type:"color",color:"#1c1c1d",imageUrl:""},groundShadows:{enabled:!1,mode:"shadowCatcher",intensity:.7,borderFade:1,height:0,size:10},postProcessing:W2,animations:H2,annotations:[]};var lr=require("@react-three/fiber"),Ix=require("@react-three/drei"),Gh=require("@react-three/xr"),Bu=require("three"),Cr=require("react"),Ga=require("react/jsx-runtime");function Bx({renderMode:e,suspended:t=!1}){let{scene:n}=(0,lr.useThree)(),i=(0,lr.useThree)(s=>s.setFrameloop),r=(0,Gh.useXR)(s=>s.session!=null),o=(0,Gh.useXR)(s=>s.mode==="immersive-ar"),a=(0,Cr.useRef)(void 0);return(0,Cr.useEffect)(()=>{i(t?"never":r?"always":e)},[r,e,t,i]),(0,Cr.useEffect)(()=>{o?(a.current=n.background,n.background=null):a.current!==void 0&&(n.background=a.current,a.current=void 0)},[o,n]),(0,lr.useFrame)(()=>{o&&n.background!==null&&(n.background=null)}),null}function zx({onPresentingChange:e}){let t=(0,lr.useThree)(r=>r.gl),n=(0,Cr.useRef)(null);(0,Cr.useEffect)(()=>{let r=t.xr;if(!r)return;let o=l=>{l?(n.current=t.shadowMap.enabled,t.shadowMap.enabled=!1):n.current!==null&&(t.shadowMap.enabled=n.current,n.current=null),e(l)},a=()=>o(!0),s=()=>o(!1);return r.addEventListener("sessionstart",a),r.addEventListener("sessionend",s),o(r.isPresenting),()=>{r.removeEventListener("sessionstart",a),r.removeEventListener("sessionend",s)}},[t,e]);let i=(0,Cr.useRef)(0);return(0,lr.useFrame)(()=>{if(!t.xr.isPresenting)return;let r=performance.now();if(r-i.current<1e3)return;i.current=r;let o=t.xr}),null}function Ux({active:e}){let t=(0,lr.useThree)(n=>n.invalidate);return(0,Cr.useEffect)(()=>{e&&t()},[e,t]),(0,lr.useFrame)(()=>{e&&t()}),null}function Vx(e){let t=(0,lr.useThree)(i=>i.gl),n=(0,Cr.useRef)(t.autoClear);return(0,lr.useFrame)(()=>{n.current=t.autoClear,t.autoClear=!0},-1),(0,Ga.jsxs)(Ga.Fragment,{children:[(0,Ga.jsx)(Ix.ContactShadows,{...e}),(0,Ga.jsx)(X2,{saved:n})]})}function X2({saved:e}){let t=(0,lr.useThree)(n=>n.gl);return(0,lr.useFrame)(()=>{t.autoClear=e.current}),null}function Fx({color:e}){let{scene:t}=(0,lr.useThree)();return(0,Cr.useEffect)(()=>{let n=t.background;return t.background=e?new Bu.Color(e):null,()=>{t.background=n}},[t,e]),null}function jx({rotation:e}){let{scene:t}=(0,lr.useThree)();return(0,Cr.useLayoutEffect)(()=>{let n=e*Math.PI/180;t.environmentRotation.set(0,n,0),t.backgroundRotation.set(0,n,0)}),null}function Gx({cameraConfig:e}){let{camera:t}=(0,lr.useThree)();return(0,Cr.useEffect)(()=>{if(!(t instanceof Bu.PerspectiveCamera))return;let n=e?.fov;typeof n=="number"&&t.fov!==n&&(t.fov=n,t.updateProjectionMatrix())},[t,e]),null}var Mc=require("@react-three/fiber"),Fe=require("@react-three/postprocessing"),Ho=require("postprocessing"),bi=require("three"),Nn=require("react");var rl=require("react"),zu=require("postprocessing"),Hx=require("three"),Xx=require("react/jsx-runtime"),q2=`
|
|
3668
3669
|
uniform float exposure;
|
|
3669
3670
|
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
|
|
3670
3671
|
outputColor = vec4(inputColor.rgb * exposure, inputColor.a);
|
|
3671
3672
|
}
|
|
3672
|
-
`,zu=class extends lc.Effect{constructor(t=1){super("ExposureEffect",m1,{blendFunction:lc.BlendFunction.NORMAL,uniforms:new Map([["exposure",new Wf.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},Xf=(0,go.forwardRef)(function({exposure:t},n){let i=(0,go.useMemo)(()=>new zu(t),[]);return i.exposure=t,(0,go.useImperativeHandle)(n,()=>i,[i]),(0,qf.jsx)("primitive",{object:i,dispose:null})});var _a=require("@react-three/fiber"),Yf=Mm(require("@react-three/postprocessing")),$f=require("postprocessing"),wr=require("three"),yr=require("react"),Zf=require("react/jsx-runtime"),f1=Yf.LensFlareEffect;function Kf({config:e}){let t=(0,_a.useThree)(p=>p.camera),n=(0,_a.useThree)(p=>p.raycaster),i=(0,_a.useThree)(p=>p.scene),r=(0,_a.useThree)(p=>p.viewport),a=(0,yr.useRef)(null),o=(0,yr.useRef)(new wr.Vector3),s=(0,yr.useRef)(new wr.Vector2),c=(0,yr.useMemo)(()=>new wr.Vector3(...e.lensPosition),[e.lensPosition]),l=(0,yr.useMemo)(()=>new wr.Color(e.colorGain??"#141414"),[e.colorGain]),u=(0,yr.useMemo)(()=>new wr.Vector2(0,0),[]),d=(0,yr.useMemo)(()=>new f1({blendFunction:$f.BlendFunction.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:c,screenRes:u,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:l,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[l,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,c,u]);return(0,yr.useEffect)(()=>(a.current=d,()=>{d.dispose(),a.current=null}),[d]),(0,yr.useEffect)(()=>{let p=d.uniforms.get("screenRes");p&&(p.value.x=r.width,p.value.y=r.height)},[d,r]),(0,_a.useFrame)((p,g)=>{let f=a.current;if(!f)return;let v=f.uniforms.get("lensPosition"),E=f.uniforms.get("opacity");if(!v||!E)return;let S=1;if(o.current.copy(c).project(t),o.current.z>1)return;v.value.x=o.current.x,v.value.y=o.current.y,s.current.x=o.current.x,s.current.y=o.current.y,n.setFromCamera(s.current,t);let b=n.intersectObjects(i.children,!0),{object:x}=b[0]||{};x&&(x.userData?.lensflare==="no-occlusion"?S=0:x instanceof wr.Mesh&&(x.material.uniforms?._transmission?.value>.2||x.material._transmission&&x.material._transmission>.2?S=.2:x.material.transparent&&(S=x.material.opacity))),E.value=wr.MathUtils.damp(E.value,S,12,g)}),(0,Zf.jsx)("primitive",{object:d,dispose:null})}var cc=require("@react-three/postprocessing"),Xn=require("postprocessing"),Jf=require("three");function Qf(e){return e==="linear"?Xn.ToneMappingMode.LINEAR:e==="reinhard"?Xn.ToneMappingMode.REINHARD:Xn.ToneMappingMode.ACES_FILMIC}function dc(e){switch(e){case"verySmall":return Xn.KernelSize.VERY_SMALL;case"small":return Xn.KernelSize.SMALL;case"medium":return Xn.KernelSize.MEDIUM;case"large":return Xn.KernelSize.LARGE;case"veryLarge":return Xn.KernelSize.VERY_LARGE;case"huge":return Xn.KernelSize.HUGE}}function eg(e){switch(e){case"constantMild":return Xn.GlitchMode.CONSTANT_MILD;case"constantWild":return Xn.GlitchMode.CONSTANT_WILD;default:return Xn.GlitchMode.SPORADIC}}function Uu(e){let t=new Jf.Color(e);return[t.r,t.g,t.b,1]}function tg(e){return e==="radial"?cc.RampType.Radial:e==="mirroredLinear"?cc.RampType.MirroredLinear:cc.RampType.Linear}var rt=require("react/jsx-runtime"),Sa={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new Gr.Color(Pi.color).getHex(),hiddenEdgeColor:new Gr.Color(Pi.color).multiplyScalar(.35).getHex(),kernelSize:Gi.KernelSize.VERY_SMALL,blur:!1,xRay:!1};function g1(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}var Fu=[],b1=(0,yn.memo)(function({sceneConfig:t,selectedObjectRef:n,highlightOnHover:i=!1,disabled:r=!1,onOutlineEffect:a}){let o=(0,Ps.useThree)(w=>w.scene),s=(0,Ps.useThree)(w=>w.gl),c=(0,yn.useRef)(null),l=t?.postProcessing,u=n??null,d=l?.outline.enabled===!0,p=d||i,[g,f]=(0,yn.useState)(()=>s.xr?.isPresenting??!1);(0,yn.useEffect)(()=>{let w=s.xr;if(!w)return;let P=()=>f(!0),y=()=>f(!1);return w.addEventListener("sessionstart",P),w.addEventListener("sessionend",y),f(w.isPresenting),()=>{w.removeEventListener("sessionstart",P),w.removeEventListener("sessionend",y)}},[s]);let v=o.children.filter(w=>w.isLight),E=(0,yn.useMemo)(()=>new Gr.Vector2(l?.chromaticAberration.offsetX??.002,l?.chromaticAberration.offsetY??.002),[l?.chromaticAberration.offsetX,l?.chromaticAberration.offsetY]),S=(0,yn.useMemo)(()=>new Gr.Color(l?.outline.visibleEdgeColor??"#ffffff").getHex(),[l?.outline.visibleEdgeColor]),b=(0,yn.useMemo)(()=>new Gr.Color(l?.outline.hiddenEdgeColor??"#22090a").getHex(),[l?.outline.hiddenEdgeColor]),x=(0,yn.useMemo)(()=>Uu(l?.ramp.startColor??"#000000"),[l?.ramp.startColor]),R=(0,yn.useMemo)(()=>Uu(l?.ramp.endColor??"#ffffff"),[l?.ramp.endColor]);return!l||g||r?null:(0,rt.jsxs)(rt.Fragment,{children:[l.godRays.enabled===!0&&(0,rt.jsxs)("mesh",{ref:c,position:l.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,rt.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,rt.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,rt.jsxs)(Le.EffectComposer,{multisampling:0,enableNormalPass:l.ssao.enabled===!0,autoClear:!1,children:[l.smaa.enabled===!0&&(0,rt.jsx)(Le.SMAA,{}),l.ssao.enabled===!0&&(0,rt.jsx)(Le.SSAO,{samples:l.ssao.samples,rings:l.ssao.rings,intensity:l.ssao.intensity,radius:l.ssao.radius,bias:l.ssao.bias,luminanceInfluence:l.ssao.luminanceInfluence,fade:l.ssao.fade,minRadiusScale:l.ssao.minRadiusScale,worldDistanceThreshold:l.ssao.worldDistanceThreshold,worldDistanceFalloff:l.ssao.worldDistanceFalloff,worldProximityThreshold:l.ssao.worldProximityThreshold,worldProximityFalloff:l.ssao.worldProximityFalloff}),l.autofocus.enabled===!0&&(0,rt.jsx)(Le.Autofocus,{focusDistance:l.autofocus.focusDistance,focusRange:l.autofocus.focusRange,focalLength:l.autofocus.focalLength,bokehScale:l.autofocus.bokehScale,target:l.autofocus.target,mouse:l.autofocus.mouse,debug:l.autofocus.debug||void 0,manual:l.autofocus.manual,smoothTime:l.autofocus.smoothTime}),l.autofocus.enabled!==!0&&l.depthOfField.enabled===!0&&(0,rt.jsx)(Le.DepthOfField,{focusDistance:l.depthOfField.focusDistance,focusRange:l.depthOfField.focusRange,focalLength:l.depthOfField.focalLength,bokehScale:l.depthOfField.bokehScale}),l.bloom.enabled===!0&&(0,rt.jsx)(Le.Bloom,{intensity:l.bloom.intensity,luminanceThreshold:l.bloom.luminanceThreshold,luminanceSmoothing:l.bloom.luminanceSmoothing,mipmapBlur:l.bloom.mipmapBlur,radius:l.bloom.radius,levels:l.bloom.levels}),l.selectiveBloom.enabled===!0&&(0,rt.jsx)(Le.SelectiveBloom,{selection:u??void 0,lights:v,selectionLayer:l.selectiveBloom.selectionLayer,intensity:l.selectiveBloom.intensity,luminanceThreshold:l.selectiveBloom.luminanceThreshold,luminanceSmoothing:l.selectiveBloom.luminanceSmoothing,kernelSize:dc(l.selectiveBloom.kernelSize),mipmapBlur:l.selectiveBloom.mipmapBlur,inverted:l.selectiveBloom.inverted,ignoreBackground:l.selectiveBloom.ignoreBackground}),p&&(0,rt.jsx)(Le.Outline,{ref:a,selection:Fu,selectionLayer:l.outline.selectionLayer,blendFunction:Gi.BlendFunction.SCREEN,edgeStrength:d?l.outline.edgeStrength:Sa.edgeStrength,pulseSpeed:d?l.outline.pulseSpeed:Sa.pulseSpeed,visibleEdgeColor:d?S:Sa.visibleEdgeColor,hiddenEdgeColor:d?b:Sa.hiddenEdgeColor,kernelSize:d?dc(l.outline.kernelSize):Sa.kernelSize,blur:d?l.outline.blur:Sa.blur,xRay:d?l.outline.xRay:Sa.xRay}),l.chromaticAberration.enabled===!0&&(0,rt.jsx)(Le.ChromaticAberration,{offset:E,radialModulation:l.chromaticAberration.radialModulation,modulationOffset:l.chromaticAberration.modulationOffset}),l.colorAverage.enabled===!0&&(0,rt.jsx)(Le.ColorAverage,{}),l.dotScreen.enabled===!0&&(0,rt.jsx)(Le.DotScreen,{angle:l.dotScreen.angle,scale:l.dotScreen.scale}),l.glitch.enabled===!0&&(0,rt.jsx)(Le.Glitch,{mode:eg(l.glitch.mode),delay:new Gr.Vector2(l.glitch.delay[0],l.glitch.delay[1]),duration:new Gr.Vector2(l.glitch.duration[0],l.glitch.duration[1]),strength:new Gr.Vector2(l.glitch.strength[0],l.glitch.strength[1]),chromaticAberrationOffset:new Gr.Vector2(l.glitch.chromaticAberrationOffset[0],l.glitch.chromaticAberrationOffset[1]),columns:l.glitch.columns,ratio:l.glitch.ratio,active:!0}),l.grid.enabled===!0&&(0,rt.jsx)(Le.Grid,{scale:l.grid.scale,lineWidth:l.grid.lineWidth}),l.lensflare.enabled===!0&&(0,rt.jsx)(Kf,{config:l.lensflare}),l.godRays.enabled===!0&&(0,rt.jsx)(Le.GodRays,{sun:c,samples:l.godRays.samples,density:l.godRays.density,decay:l.godRays.decay,weight:l.godRays.weight,exposure:l.godRays.exposure,clampMax:l.godRays.clampMax,blur:l.godRays.blur,kernelSize:dc(l.godRays.kernelSize)}),l.noise.enabled===!0&&(0,rt.jsx)(Le.Noise,{premultiply:l.noise.premultiply,opacity:l.noise.opacity,blendFunction:Gi.BlendFunction.ADD}),l.brightnessContrast.enabled===!0&&(0,rt.jsx)(Le.BrightnessContrast,{brightness:l.brightnessContrast.brightness,contrast:l.brightnessContrast.contrast}),l.hueSaturation.enabled===!0&&(0,rt.jsx)(Le.HueSaturation,{hue:l.hueSaturation.hue,saturation:l.hueSaturation.saturation}),l.toneMapping.enabled===!0&&(0,rt.jsx)(Xf,{exposure:l.toneMapping.exposure}),l.vignette.enabled===!0&&(0,rt.jsx)(Le.Vignette,{eskil:l.vignette.eskil,offset:l.vignette.offset,darkness:l.vignette.darkness,blendFunction:Gi.BlendFunction.NORMAL}),l.toneMapping.enabled===!0&&(0,rt.jsx)(Le.ToneMapping,{mode:Qf(l.toneMapping.mode),resolution:l.toneMapping.resolution,whitePoint:l.toneMapping.whitePoint,middleGrey:l.toneMapping.middleGrey,minLuminance:l.toneMapping.minLuminance,averageLuminance:l.toneMapping.averageLuminance,adaptationRate:l.toneMapping.adaptationRate}),l.sepia.enabled===!0&&(0,rt.jsx)(Le.Sepia,{intensity:l.sepia.intensity,blendFunction:Gi.BlendFunction.NORMAL}),l.scanline.enabled===!0&&(0,rt.jsx)(Le.Scanline,{density:l.scanline.density,blendFunction:Gi.BlendFunction.OVERLAY}),l.pixelation.enabled===!0&&(0,rt.jsx)(Le.Pixelation,{granularity:l.pixelation.granularity}),l.ramp.enabled===!0&&(0,rt.jsx)(Le.Ramp,{rampType:tg(l.ramp.rampType),rampStart:l.ramp.rampStart,rampEnd:l.ramp.rampEnd,startColor:x,endColor:R,opacity:l.ramp.rampMask?1:l.ramp.opacity??.5,rampBias:l.ramp.rampBias,rampGain:l.ramp.rampGain,rampMask:l.ramp.rampMask,rampInvert:l.ramp.rampInvert})]})]})});function v1(e){let t=[e];for(;t.length>0;){let n=t.pop();if(n.visible){if(n.isMesh)return!0;t.push(...n.children)}}return!1}function x1(e,t){return e.length===t.length&&e.every((n,i)=>n===t[i])}function ng({hoveredObjectRef:e,...t}){let n=(0,Ps.useThree)(c=>c.scene),i=(0,Ps.useThree)(c=>c.invalidate),[r,a]=(0,yn.useState)(null),o=(0,yn.useCallback)(c=>a(c),[]),s=(0,yn.useRef)({effect:null,objects:Fu});return(0,yn.useEffect)(()=>{if(!r)return;let l=t.sceneConfig?.postProcessing?.outline.enabled===!0?g1(n):e&&v1(e)?[e]:Fu;s.current.effect===r&&x1(s.current.objects,l)||(s.current={effect:r,objects:l},r.selection.set(l),i())}),(0,rt.jsx)(b1,{...t,onOutlineEffect:o})}var rg=require("react"),uc=class extends rg.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,i){this.props.onError?.(n)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};var wn=require("react/jsx-runtime"),y1=1.5;function w1({captureRef:e}){let{gl:t,scene:n,camera:i,invalidate:r}=(0,pc.useThree)();return(0,Wr.useEffect)(()=>{if(e)return e.current={gl:t,scene:n,camera:i,invalidate:r},()=>{e.current=null}},[e,t,n,i,r]),null}function Vu({children:e,camera:t,backgroundColor:n,shadows:i=!0,sceneConfig:r,selectedObjectRef:a,hoveredObjectRef:o,highlightOnHover:s,renderMode:c="demand",maxDpr:l=2,xrStore:u,rendererCaptureRef:d,preserveDrawingBuffer:p=!1,reduceGpuLoad:g}){let f=g??ku(),v=f?Math.min(l,y1):l,E=i&&!f,S=(0,Wr.useMemo)(()=>n?{background:n}:r?.background.enabled?r.background.type==="color"?{background:r.background.color}:r.background.type==="image"&&r.background.imageUrl.trim()?{backgroundImage:`url("${r.background.imageUrl}")`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}:{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}:{background:"transparent"},[n,r]),b=(0,Wr.useMemo)(()=>{if(n)return n;let C=r?.background;if(C?.enabled){if(C.type==="color")return C.color;if(C.type==="image"&&C.imageUrl.trim()||C.type==="environment")return null}return"#1c1c1d"},[n,r]),x=(0,Wr.useMemo)(()=>{let C=r?.postProcessing;return C?!!(C.glitch.enabled||C.noise.enabled||C.lensflare.enabled&&C.lensflare.animated):!1},[r?.postProcessing]),[R,w]=(0,Wr.useState)(!1),P=r?.environment,y=r?.groundShadows,m=(0,Wr.useMemo)(()=>{if(!P)return null;if(P.source==="custom"){let C=P.customEnvironmentUrl.trim();return ec(C)?{files:C}:null}return{preset:P.preset}},[P]),A=(0,wn.jsxs)(wn.Fragment,{children:[(0,wn.jsx)(w1,{captureRef:d}),(0,wn.jsx)(Of,{cameraConfig:t}),(0,wn.jsx)(Nf,{active:x}),(0,wn.jsx)(If,{color:b}),m?(0,wn.jsx)(uc,{onError:C=>console.warn("Failed to load environment map:",C),children:(0,wn.jsx)(Wr.Suspense,{fallback:null,children:(0,wn.jsx)(hc.Environment,{...m,environmentIntensity:P?.intensity??.25,backgroundIntensity:P?.intensity??.25,background:r?.background.enabled===!0&&r.background.type==="environment"})})}):null,(0,wn.jsx)(Bf,{rotation:P?.rotation??0}),u&&(0,wn.jsx)(Df,{onPresentingChange:w}),y?.enabled&&y.mode==="shadowCatcher"&&!R&&(0,wn.jsx)(hc.ContactShadows,{position:[0,y.height,0],scale:y.size,opacity:y.intensity,blur:y.borderFade,far:15,resolution:1024,color:"#000000"}),e,(0,wn.jsx)(ng,{sceneConfig:r,selectedObjectRef:a,hoveredObjectRef:o,highlightOnHover:s,disabled:f})]});return(0,wn.jsx)(pc.Canvas,{frameloop:c,dpr:[1,v],shadows:E?"soft":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:S,camera:t??{fov:50},gl:{preserveDrawingBuffer:p,toneMapping:ag.NoToneMapping,toneMappingExposure:1},children:u?(0,wn.jsxs)(ig.XR,{store:u,children:[(0,wn.jsx)(kf,{renderMode:c}),A]}):A})}var fc=require("@react-three/drei"),As=require("three"),Wi=require("react");var mc=e=>e*Math.PI/180;function og(e){return{minDistance:e?.minDistance??0,maxDistance:e?.maxDistance??1/0,minPolarAngle:mc(e?.minPolarAngle??0),maxPolarAngle:mc(e?.maxPolarAngle??180),minAzimuthAngle:mc(e?.minAzimuthAngle??-1/0),maxAzimuthAngle:mc(e?.maxAzimuthAngle??1/0),boundaryEnclosesCamera:e?.boundaryEnclosesCamera??!1,boundaryFriction:e?.boundaryFriction??0,panBoundary:e?.panBoundary}}var ju=require("react/jsx-runtime");function Hu({controlsRef:e,onCameraChange:t,cameraLimits:n,controllerType:i="orbit",onPointerLockExit:r}){let a=i==="orbit",o=(0,Wi.useRef)(null);return(0,Wi.useEffect)(()=>{if(!a)return o.current?.lock(),()=>{o.current?.unlock()}},[a]),(0,Wi.useEffect)(()=>{a&&document.pointerLockElement&&document.exitPointerLock()},[a]),(0,Wi.useEffect)(()=>{if(a)return;let s=()=>{document.pointerLockElement||r?.()};return document.addEventListener("pointerlockchange",s),()=>{document.removeEventListener("pointerlockchange",s)}},[a,r]),(0,Wi.useEffect)(()=>{if(!a||!t||!e||typeof e!="object"||!("current"in e))return;let s=e.current;if(!s)return;let c=()=>{t(s.camera,s)};return s.addEventListener("update",c),()=>{s.removeEventListener("update",c)}},[a,e,t]),(0,Wi.useEffect)(()=>{if(!a||!e||typeof e!="object"||!("current"in e))return;let s=e.current;if(!s)return;let c=og(n);s.minDistance=c.minDistance,s.maxDistance=c.maxDistance,s.minPolarAngle=c.minPolarAngle,s.maxPolarAngle=c.maxPolarAngle,s.minAzimuthAngle=c.minAzimuthAngle,s.maxAzimuthAngle=c.maxAzimuthAngle,s.boundaryEnclosesCamera=c.boundaryEnclosesCamera,s.boundaryFriction=c.boundaryFriction,s.setBoundary(c.panBoundary?new As.Box3(new As.Vector3(...c.panBoundary[0]),new As.Vector3(...c.panBoundary[1])):void 0)},[a,e,n?.minDistance,n?.maxDistance,n?.minPolarAngle,n?.maxPolarAngle,n?.minAzimuthAngle,n?.maxAzimuthAngle,n?.boundaryEnclosesCamera,n?.boundaryFriction,n?.panBoundary]),a?(0,ju.jsx)(fc.CameraControls,{ref:e,makeDefault:!0,smoothTime:.3,dollyToCursor:!0}):(0,ju.jsx)(fc.PointerLockControls,{ref:o,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}var Xr=require("react"),Rs=require("@react-three/fiber"),lg=require("three");var Gu=Symbol("react-immersive.model-node-id");function _1(e,t){Object.defineProperty(e,Gu,{value:t,configurable:!0})}function Xi(e){let t=new Map;e.traverse(c=>{if(!c.name)return;let l=t.get(c.name);l?l.push(c):t.set(c.name,[c])});let n=Object.create(null),i=new WeakMap,r=new Map,a=new Set(Array.from(t,([c,l])=>l.length===1?c:null).filter(c=>c!==null)),o=new Set,s=(c,l)=>{_1(c,l),n[l]=c,i.set(c,l),o.add(l)};for(let[c,l]of t)l.length===1&&s(l[0],c);for(let[c,l]of t){if(l.length<2)continue;let u=[];l.forEach((d,p)=>{let g=`${c} [${p+1}]`,f=g,v=2;for(;a.has(f)||o.has(f);)f=`${g}.${v++}`;s(d,f),u.push(f)}),r.set(c,u)}return{nodesById:n,idByNode:i,duplicateNames:r}}function Es(e){return e[Gu]??e.name??null}function Ai(e,t){let n=null,i=[];return e.traverse(r=>{r[Gu]===t&&(n=r),r.name===t&&i.push(r)}),n??(i.length===1?i[0]:null)}var _r=require("react/jsx-runtime");function cg(e,t){if(!t)return e;let n=t*Math.PI/180,i=Math.cos(n),r=Math.sin(n);return[e[0]*i+e[2]*r,e[1],-e[0]*r+e[2]*i]}function S1(e,t){let[n,i,r]=e.center,a=e.radius,o=Math.hypot(t[0],t[1],t[2]),s=o>1e-6?[t[0]/o,t[1]/o,t[2]/o]:[0,1,0],c=a*2;return{position:[n+s[0]*c,i+s[1]*c,r+s[2]*c],target:e.center,extent:a,near:Math.max(a/100,.001),far:c+a*2}}function M1(e,t){let n=t[0]-e.center[0],i=t[1]-e.center[1],r=t[2]-e.center[2],a=Math.hypot(n,i,r);return{near:Math.max(a-e.radius,a*.01,.001),far:a+e.radius*2}}function C1(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var T1={ambient:{intensity:.25,color:"#ffffff"},lights:[{id:"light-hemi",type:"hemisphere",color:"#ffffff",intensity:.3,position:[0,1,0],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0},{id:"light-key",type:"directional",color:"#ffffff",intensity:2.5,position:[6,12,6],attachedToCamera:!1,castShadow:!0,shadowBias:-5e-4,visible:!0},{id:"light-fill",type:"directional",color:"#ffffff",intensity:0,position:[-6,8,-6],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}]},P1={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function sg({light:e,shadows:t,shadowsEnabled:n,environmentRotation:i,modelBounds:r,objectBindings:a,nodeRefs:o}){let s=(0,Xr.useRef)(null),c=(0,Xr.useRef)(null),l=(0,Xr.useRef)(null),u=(0,Rs.useThree)(S=>S.camera),d=(0,Rs.useThree)(S=>S.scene),p=(0,Xr.useMemo)(()=>new lg.Vector3,[]),g=(0,Xr.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:cg(e.position,i),[e.position,e.attachedToCamera,e.attachment,i]);(0,Rs.useFrame)(()=>{let S=s.current??c.current??l.current;if(!S)return;if(e.attachedToCamera){S.position.copy(u.position);return}let b=e.attachment;if(!b)return;let x=a?ho(a,b.objectId):null,w=(x?a?.[x]:void 0)?.modelObjectId??b.objectId,P=(x?o?.current[x]:void 0)??Ai(d,w);P&&(p.fromArray(b.offset),P.localToWorld(p),S.position.copy(p))});let f=n&&t.enabled&&e.castShadow,v=(0,Xr.useMemo)(()=>e.type==="directional"&&f&&r&&!e.attachedToCamera?S1(r,g):null,[e.type,e.attachedToCamera,f,r,g]),E=(0,Xr.useMemo)(()=>e.type==="spot"&&f&&r&&!e.attachedToCamera?M1(r,g):null,[e.type,e.attachedToCamera,f,r,g]);return(0,Xr.useEffect)(()=>{let S=s.current??l.current;if(!S)return;let[b,x,R]=C1(e,f,r);S.target.position.set(b,x,R),S.target.updateMatrixWorld()},[e,f,r]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,_r.jsx)("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:v?.position??g,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":v?.near??.5,"shadow-camera-far":v?.far??40,"shadow-camera-left":-(v?.extent??8),"shadow-camera-right":v?.extent??8,"shadow-camera-top":v?.extent??8,"shadow-camera-bottom":-(v?.extent??8)}):e.type==="point"?(0,_r.jsx)("pointLight",{ref:c,color:e.color,intensity:e.intensity,position:g,distance:e.distance,decay:e.decay,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?(0,_r.jsx)("spotLight",{ref:l,color:e.color,intensity:e.intensity,position:g,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":E?.near??.5,"shadow-camera-far":E?.far??40}):e.type==="hemisphere"?(0,_r.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function Wu({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:i=0,environmentConfig:r,modelBounds:a,objectBindings:o,nodeRefs:s}){let c=e??T1,l=t??P1,u=r?.shadowLight,d=cg([5,10,5],i);return(0,_r.jsxs)(_r.Fragment,{children:[(0,_r.jsx)("ambientLight",{intensity:c.ambient.intensity,color:c.ambient.color}),c.lights.map(p=>(0,_r.jsx)(sg,{light:p,shadows:l,shadowsEnabled:n,environmentRotation:i,modelBounds:a,objectBindings:o,nodeRefs:s},p.id)),u?.enabled&&(0,_r.jsx)(sg,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:u.intensity,position:d,attachedToCamera:!1,castShadow:!0,shadowBias:u.bias,visible:!0},shadows:l,shadowsEnabled:n,environmentRotation:0,modelBounds:a,objectBindings:o,nodeRefs:s})]})}var ue=require("react"),_o=require("@react-three/fiber");var Ls=require("@react-three/fiber"),vo=require("three"),qi=require("three-stdlib"),hg=require("three/examples/jsm/loaders/USDLoader.js");var A1=require("@react-three/drei"),E1=require("@react-three/fiber"),R1=require("react"),dg=require("three"),bo=require("three-stdlib");function L1(e){return{name:"RI_unlit_emissive_texture",async afterRoot(t){let n=e.json.materials??[],i=new Map;if(n.forEach(a=>{let o=!!a?.extensions?.KHR_materials_unlit,s=!!a?.pbrMetallicRoughness?.baseColorTexture;o&&!s&&a?.emissiveTexture&&a.name&&i.set(a.name,a.emissiveTexture.index)}),i.size===0||!t.scene)return;let r=new Map;await Promise.all([...i].map(async([a,o])=>{let s=await e.getDependency("texture",o);s&&(s.colorSpace=dg.SRGBColorSpace,r.set(a,s))})),t.scene.traverse(a=>{let o=Array.isArray(a.material)?a.material:a.material?[a.material]:[];for(let s of o){let c=s.name?r.get(s.name):void 0;c&&!s.map&&(s.map=c,s.needsUpdate=!0)}})}}}var Xu="https://assets.react-immersive.liveroom.dev/three-r184/draco/",qu="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function ug(e,t={},n){let{dracoDecoderPath:i=Xu,ktx2TranscoderPath:r=qu,meshopt:a=!0}=t;if(i){let o=new bo.DRACOLoader;o.setDecoderPath(i),e.setDRACOLoader(o)}if(a&&e.setMeshoptDecoder(bo.MeshoptDecoder),r&&n){let o=new bo.KTX2Loader().setTranscoderPath(r).detectSupport(n);e.setKTX2Loader(o)}e.register((o=>L1(o)))}var gc=class extends vo.Loader{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(n){return this.options=n,this}load(n,i,r,a){this.loadAsset(n,r).then(i).catch(a)}async loadAsset(n,i){let r=D1(this.options.source),{format:a}=this.options.source;if(a==="obj")return k1(n,r,this.options.source,i);if(a==="fbx"){let c=Yu(this,new qi.FBXLoader(r)),l=B1(n,this.options.source);l&&c.setResourcePath(l);let u=await c.loadAsync(n,i);return $u(u,"FBXMesh",!1),{scene:u,animations:u.animations??[]}}if(a==="usdz"){let l=await Yu(this,new hg.USDLoader(r)).loadAsync(n,i);return $u(l,"USDZMesh",!1),{scene:l,animations:l.animations??[]}}let o=Yu(this,new qi.GLTFLoader(r));ug(o,this.options.decoderConfig,this.options.renderer);let s=await o.loadAsync(n,i);return{scene:s.scene,animations:s.animations??[]}}};Bm(e=>{Ls.useLoader.clear(gc,e)});function mg(e,t={},n,i){let r=(0,Ls.useThree)(s=>s.gl),a=Xm(e),o=n?{...a,format:n}:a;return(0,Ls.useLoader)(gc,e,s=>{s.configure({source:o,decoderConfig:t,renderer:r})},i)}async function k1(e,t,n,i){let r=await pg(e,t,i),a=new qi.OBJLoader(t),o=N1(r);if(o){let c=I1(o,e,n);if(c)try{let l=await pg(c.url,t),d=new qi.MTLLoader(t).parse(l,c.basePath);d.preload(),a.setMaterials(d)}catch(l){console.warn(`[react-immersive] Could not load OBJ material ${o}; rendering geometry with fallback materials.`,l)}}let s=a.parse(r);return $u(s,"OBJMesh",!0),{scene:s,animations:[]}}function $u(e,t,n){let i=new Set,r=0;e.traverse(a=>{if(!("isMesh"in a&&a.isMesh===!0)){a.name&&i.add(a.name);return}let s=a.name||`${t}_${++r}`;if(!n&&a.name){i.add(a.name);return}let c=s,l=2;for(;i.has(c);)c=`${s}_${l++}`;a.name=c,i.add(c)})}function pg(e,t,n){let i=new vo.FileLoader(t);return i.setResponseType("text"),i.loadAsync(e,n)}function Yu(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function D1(e){let t=new vo.LoadingManager,n=e.resourceUrls;return n&&t.setURLModifier(i=>{if(/^(?:blob:|data:)/i.test(i))return i;let r=vc(gg(i).split(/[?#]/)[0]),a=n[r];if(a)return a;let o=bc(e.entryPath??""),s=vc(o?`${o}/${r}`:r);return n[s]??i}),t}function N1(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function I1(e,t,n){if(n.resourceUrls&&n.entryPath){let i=vc(`${bc(n.entryPath)}/${gg(e)}`),r=n.resourceUrls[i];if(!r)return null;let a=bc(i);return{url:r,basePath:a?`${a}/`:""}}try{let i=new URL(e,t).href;return{url:i,basePath:fg(i)}}catch{return null}}function B1(e,t){if(t.resourceUrls&&t.entryPath){let n=bc(t.entryPath);return n?`${n}/`:""}return fg(e)}function fg(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function bc(e){let t=vc(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function vc(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(i=>i&&i!=="."))n===".."?t.pop():t.push(n);return t.join("/")}function gg(e){try{return decodeURI(e)}catch{return e}}var Ue=require("three"),Lg=require("three-stdlib");function bg(e){let t=new Map;return e.map((n,i)=>{let a=n.name.trim()||`Animation ${i+1}`,o=t.get(a)??0;return t.set(a,o+1),{clip:n,sourceName:o===0?a:`${a} (${o+1})`,duration:n.duration}})}var Un=require("three");function vg(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function xg(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function Sr(e){return!!(e&&"isMesh"in e&&e.isMesh)}var ci=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],xc={texture:"map",metalnessMap:"metalnessMap",roughnessMap:"roughnessMap",emissiveMap:"emissiveMap",alphaMap:"alphaMap",normalMap:"normalMap",bumpMap:"bumpMap",aoMap:"aoMap",displacementMap:"displacementMap",clearcoatMap:"clearcoatMap",clearcoatRoughnessMap:"clearcoatRoughnessMap",clearcoatNormalMap:"clearcoatNormalMap",anisotropyMap:"anisotropyMap",transmissionMap:"transmissionMap",thicknessMap:"thicknessMap",sheenColorMap:"sheenColorMap",sheenRoughnessMap:"sheenRoughnessMap",specularIntensityMap:"specularIntensityMap",specularColorMap:"specularColorMap"},O1=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function qr(e){return O1.has(e)?Un.SRGBColorSpace:Un.NoColorSpace}function Ft(e,t){return e?.[t]?.path}function yg(e,t){let n=e?.[t]?.offset;if(!n)return;let[i,r]=n;if(!(!Number.isFinite(i)||!Number.isFinite(r)))return i===0&&r===0?void 0:[i,r]}function wg(e,t){let n=e?.[t]?.scale;if(!(!Number.isFinite(n)||!n))return n===1?void 0:n}function _g(e,t){let n=e?.[t]?.rotation;if(!(!Number.isFinite(n)||!n))return n}function Sg(e){return e==="back"?Un.BackSide:e==="double"?Un.DoubleSide:Un.FrontSide}function Mg(e){return e==="additive"?Un.AdditiveBlending:Un.NormalBlending}function Ei(e,t=1,n=t){if(e&&typeof e=="object"){let i=e;if(typeof i.x=="number"&&Number.isFinite(i.x)&&typeof i.y=="number"&&Number.isFinite(i.y))return new Un.Vector2(i.x,i.y)}return new Un.Vector2(t,n)}function Ku(e){return Number.isFinite(e)&&e>0?e:1}function yc(e,t){return e?.animations.clips.find(n=>n.sourceName===t)}function Cg(e){return e?.loopMode??"repeat"}var Mr=require("three");function wc(e){if(vg(e))return e;if(!e||typeof e!="object")return null;let t=e,n=new Mr.MeshStandardMaterial;typeof t.name=="string"&&(n.name=t.name),n.metalness=0,n.roughness=1,t.type==="MeshBasicMaterial"||t.isMeshBasicMaterial===!0?(n.color.set(0),n.emissiveIntensity=1,t.map instanceof Mr.Texture?(n.emissiveMap=t.map,n.emissive.set(16777215)):t.color instanceof Mr.Color&&n.emissive.copy(t.color)):(t.color instanceof Mr.Color&&n.color.copy(t.color),t.map instanceof Mr.Texture&&(n.map=t.map),t.emissive instanceof Mr.Color&&n.emissive.copy(t.emissive),t.emissiveMap instanceof Mr.Texture&&(n.emissiveMap=t.emissiveMap));let r=["aoMap","aoMapIntensity","lightMap","lightMapIntensity","alphaMap","opacity","transparent","alphaTest","side","vertexColors","wireframe","depthTest","depthWrite","visible","toneMapped","fog"];for(let a of r)t[a]!==void 0&&(n[a]=t[a]);return n.needsUpdate=!0,n}function _c(e){if(xg(e))return e.clone();let t=new Mr.MeshPhysicalMaterial;return t.name=e.name,t.color.copy(e.color),t.map=e.map,t.lightMap=e.lightMap,t.lightMapIntensity=e.lightMapIntensity,t.aoMap=e.aoMap,t.aoMapIntensity=e.aoMapIntensity,t.emissive.copy(e.emissive),t.emissiveIntensity=e.emissiveIntensity,t.emissiveMap=e.emissiveMap,t.bumpMap=e.bumpMap,t.bumpScale=e.bumpScale,t.normalMap=e.normalMap,t.normalMapType=e.normalMapType,t.normalScale.copy(Ei(e.normalScale)),t.displacementMap=e.displacementMap,t.displacementScale=e.displacementScale,t.displacementBias=e.displacementBias,t.roughness=e.roughness,t.roughnessMap=e.roughnessMap,t.metalness=e.metalness,t.metalnessMap=e.metalnessMap,t.alphaMap=e.alphaMap,t.envMap=e.envMap,t.envMapRotation.copy(e.envMapRotation),t.envMapIntensity=e.envMapIntensity,t.wireframe=e.wireframe,t.wireframeLinewidth=e.wireframeLinewidth,t.flatShading=e.flatShading,t.fog=e.fog,t.opacity=e.opacity,t.transparent=e.transparent,t.alphaHash=e.alphaHash,t.blendSrc=e.blendSrc,t.blendDst=e.blendDst,t.blendEquation=e.blendEquation,t.blendSrcAlpha=e.blendSrcAlpha,t.blendDstAlpha=e.blendDstAlpha,t.blendEquationAlpha=e.blendEquationAlpha,t.blending=e.blending,t.premultipliedAlpha=e.premultipliedAlpha,t.dithering=e.dithering,t.alphaTest=e.alphaTest,t.depthTest=e.depthTest,t.depthWrite=e.depthWrite,t.colorWrite=e.colorWrite,t.stencilWrite=e.stencilWrite,t.stencilWriteMask=e.stencilWriteMask,t.stencilFunc=e.stencilFunc,t.stencilRef=e.stencilRef,t.stencilFuncMask=e.stencilFuncMask,t.stencilFail=e.stencilFail,t.stencilZFail=e.stencilZFail,t.stencilZPass=e.stencilZPass,t.side=e.side,t.shadowSide=e.shadowSide,t.toneMapped=e.toneMapped,t.vertexColors=e.vertexColors,t.visible=e.visible,t.clippingPlanes=e.clippingPlanes,t.clipIntersection=e.clipIntersection,t.clipShadows=e.clipShadows,t.forceSinglePass=e.forceSinglePass,t.polygonOffset=e.polygonOffset,t.polygonOffsetFactor=e.polygonOffsetFactor,t.polygonOffsetUnits=e.polygonOffsetUnits,t}function Sc(e){e.userData.baseColor=e.color.clone(),e.userData.baseMap=e.map??null,e.userData.baseMetalness=e.metalness,e.userData.baseMetalnessMap=e.metalnessMap??null,e.userData.baseRoughness=e.roughness,e.userData.baseRoughnessMap=e.roughnessMap??null,e.userData.baseEmissive=e.emissive.clone(),e.userData.baseEmissiveIntensity=e.emissiveIntensity,e.userData.baseEmissiveMap=e.emissiveMap??null,e.userData.baseOpacity=e.opacity,e.userData.baseTransparent=e.transparent,e.userData.baseAlphaMap=e.alphaMap??null,e.userData.baseAlphaTest=e.alphaTest,e.userData.baseAlphaHash=e.alphaHash,e.userData.baseDithering=e.dithering,e.userData.baseBlending=e.blending,e.userData.baseDepthWrite=e.depthWrite,e.userData.baseSide=e.side,e.userData.baseNormalMap=e.normalMap??null,e.userData.baseNormalScale=Ei(e.normalScale),e.userData.baseBumpMap=e.bumpMap??null,e.userData.baseBumpScale=e.bumpScale,e.userData.baseAoMap=e.aoMap??null,e.userData.baseAoMapIntensity=e.aoMapIntensity,e.userData.baseDisplacementMap=e.displacementMap??null,e.userData.baseDisplacementScale=e.displacementScale,e.userData.baseDisplacementBias=e.displacementBias,e.userData.baseClearcoat=e.clearcoat,e.userData.baseClearcoatMap=e.clearcoatMap??null,e.userData.baseClearcoatRoughness=e.clearcoatRoughness,e.userData.baseClearcoatRoughnessMap=e.clearcoatRoughnessMap??null,e.userData.baseClearcoatNormalMap=e.clearcoatNormalMap??null,e.userData.baseClearcoatNormalScale=Ei(e.clearcoatNormalScale),e.userData.baseSheen=e.sheen,e.userData.baseSheenColor=e.sheenColor.clone(),e.userData.baseSheenColorMap=e.sheenColorMap??null,e.userData.baseSheenRoughness=e.sheenRoughness,e.userData.baseSheenRoughnessMap=e.sheenRoughnessMap??null,e.userData.baseAnisotropy=e.anisotropy,e.userData.baseAnisotropyRotation=e.anisotropyRotation,e.userData.baseAnisotropyMap=e.anisotropyMap??null,e.userData.baseTransmission=e.transmission,e.userData.baseTransmissionMap=e.transmissionMap??null,e.userData.baseThickness=e.thickness,e.userData.baseThicknessMap=e.thicknessMap??null,e.userData.baseAttenuationColor=e.attenuationColor.clone(),e.userData.baseAttenuationDistance=e.attenuationDistance,e.userData.baseReflectivity=e.reflectivity,e.userData.baseSpecularIntensity=e.specularIntensity,e.userData.baseSpecularIntensityMap=e.specularIntensityMap??null,e.userData.baseSpecularColor=e.specularColor.clone(),e.userData.baseSpecularColorMap=e.specularColorMap??null,e.userData.baseFlatShading=e.flatShading,e.userData.baseEnvMapIntensity=e.envMapIntensity}var di=require("three");function Tg(e,t,n,i){let r=qr(t),a=Ts(n,r),o=yg(i,t),s=wg(i,t),c=_g(i,t);return o||s||c?ac(e.userData,t,a,n,o??[0,0],s??1,c??0):(oc(e.userData,t),a)}function An(e,t,n,i){if(!n){oc(e.userData,t);return}let r=xc[t];e[r]=Tg(e,t,n,i)}function Mc(e,t,n){e.map=e.userData.baseMap??null,e.color.copy(e.userData.baseColor),e.metalness=e.userData.baseMetalness??e.metalness,e.metalnessMap=e.userData.baseMetalnessMap??null,e.roughness=e.userData.baseRoughness??e.roughness,e.roughnessMap=e.userData.baseRoughnessMap??null,e.emissive.copy(e.userData.baseEmissive??new di.Color(0,0,0)),e.emissiveIntensity=e.userData.baseEmissiveIntensity??e.emissiveIntensity,e.emissiveMap=e.userData.baseEmissiveMap??null,e.opacity=e.userData.baseOpacity??1,e.transparent=e.userData.baseTransparent??!1,e.alphaMap=e.userData.baseAlphaMap??null,e.alphaTest=e.userData.baseAlphaTest??0,e.alphaHash=e.userData.baseAlphaHash??!1,e.dithering=e.userData.baseDithering??!1,e.blending=e.userData.baseBlending??di.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??di.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(Ei(e.userData.baseNormalScale)),e.bumpMap=e.userData.baseBumpMap??null,e.bumpScale=e.userData.baseBumpScale??e.bumpScale,e.aoMap=e.userData.baseAoMap??null,e.aoMapIntensity=e.userData.baseAoMapIntensity??e.aoMapIntensity,e.displacementMap=e.userData.baseDisplacementMap??null,e.displacementScale=e.userData.baseDisplacementScale??e.displacementScale,e.displacementBias=e.userData.baseDisplacementBias??e.displacementBias,e.clearcoat=e.userData.baseClearcoat??e.clearcoat,e.clearcoatMap=e.userData.baseClearcoatMap??null,e.clearcoatRoughness=e.userData.baseClearcoatRoughness??e.clearcoatRoughness,e.clearcoatRoughnessMap=e.userData.baseClearcoatRoughnessMap??null,e.clearcoatNormalMap=e.userData.baseClearcoatNormalMap??null,e.clearcoatNormalScale.copy(Ei(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new di.Color(0,0,0)),e.sheenColorMap=e.userData.baseSheenColorMap??null,e.sheenRoughness=e.userData.baseSheenRoughness??e.sheenRoughness,e.sheenRoughnessMap=e.userData.baseSheenRoughnessMap??null,e.anisotropy=e.userData.baseAnisotropy??e.anisotropy,e.anisotropyRotation=e.userData.baseAnisotropyRotation??e.anisotropyRotation,e.anisotropyMap=e.userData.baseAnisotropyMap??null,e.transmission=e.userData.baseTransmission??e.transmission,e.transmissionMap=e.userData.baseTransmissionMap??null,e.thickness=e.userData.baseThickness??e.thickness,e.thicknessMap=e.userData.baseThicknessMap??null,e.attenuationColor.copy(e.userData.baseAttenuationColor??new di.Color("#ffffff")),e.attenuationDistance=e.userData.baseAttenuationDistance??e.attenuationDistance,e.reflectivity=e.userData.baseReflectivity??e.reflectivity,e.specularIntensity=e.userData.baseSpecularIntensity??e.specularIntensity,e.specularIntensityMap=e.userData.baseSpecularIntensityMap??null,e.specularColor.copy(e.userData.baseSpecularColor??new di.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let i=Ft(t,"texture"),r=Ft(t,"metalnessMap"),a=Ft(t,"roughnessMap"),o=Ft(t,"emissiveMap"),s=Ft(t,"alphaMap"),c=Ft(t,"normalMap"),l=Ft(t,"bumpMap"),u=Ft(t,"aoMap"),d=Ft(t,"displacementMap"),p=Ft(t,"clearcoatMap"),g=Ft(t,"clearcoatRoughnessMap"),f=Ft(t,"clearcoatNormalMap"),v=Ft(t,"anisotropyMap"),E=Ft(t,"transmissionMap"),S=Ft(t,"thicknessMap"),b=Ft(t,"sheenColorMap"),x=Ft(t,"sheenRoughnessMap"),R=Ft(t,"specularIntensityMap"),w=Ft(t,"specularColorMap");if(i?(e.map=Tg(e,"texture",i,t),e.color.set(n??"#ffffff")):(oc(e.userData,"texture"),n&&(e.map=null,e.color.set(n))),An(e,"metalnessMap",r,t),t?.metalness!==void 0&&(e.metalness=t.metalness),An(e,"roughnessMap",a,t),t?.roughness!==void 0&&(e.roughness=t.roughness),t?.emissive?e.emissive.set(t.emissive):o&&e.emissive.set("#ffffff"),t?.emissiveIntensity!==void 0&&(e.emissiveIntensity=t.emissiveIntensity),An(e,"emissiveMap",o,t),t?.opacity!==void 0&&(e.opacity=t.opacity),An(e,"alphaMap",s,t),t?.alphaTest!==void 0&&(e.alphaTest=t.alphaTest),t?.alphaHash!==void 0&&(e.alphaHash=t.alphaHash),t?.dithering!==void 0&&(e.dithering=t.dithering),t?.blendingMode&&(e.blending=Mg(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=Sg(t.side)),An(e,"normalMap",c,t),c||t?.normalScale!==void 0){let P=t?.normalScale??Math.abs(Ei(e.userData.baseNormalScale).x);e.normalScale.set(P,t?.flipNormalY?-P:P)}if(An(e,"bumpMap",l,t),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),An(e,"aoMap",u,t),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),An(e,"displacementMap",d,t),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),An(e,"clearcoatMap",p,t),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),An(e,"clearcoatRoughnessMap",g,t),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),An(e,"clearcoatNormalMap",f,t),f||t?.clearcoatNormalScale!==void 0){let P=t?.clearcoatNormalScale??Math.abs(Ei(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(P,t?.flipClearcoatNormalY?-P:P)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),An(e,"sheenColorMap",b,t),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),An(e,"sheenRoughnessMap",x,t),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),An(e,"anisotropyMap",v,t),t?.transmission!==void 0&&(e.transmission=t.transmission),An(e,"transmissionMap",E,t),t?.thickness!==void 0&&(e.thickness=t.thickness),An(e,"thicknessMap",S,t),t?.attenuationColor&&e.attenuationColor.set(t.attenuationColor),t?.attenuationDistance!==void 0&&(e.attenuationDistance=t.attenuationDistance),t?.reflectivity!==void 0&&(e.reflectivity=t.reflectivity),t?.specularIntensity!==void 0&&(e.specularIntensity=t.specularIntensity),An(e,"specularIntensityMap",R,t),t?.specularColor&&e.specularColor.set(t.specularColor),An(e,"specularColorMap",w,t),e.transparent=e.opacity<1||e.transmission>0||e.blending!==di.NormalBlending||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function ks(e){return e.material}function ui(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function Cr(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function Cc(e,t){return Array.isArray(e)?e[t]:e}function Zu(e){e.updateMatrixWorld(!0),e.traverse(t=>{let n=t;n.isSkinnedMesh&&(n.skeleton?.update(),n.computeBoundingBox?.(),n.computeBoundingSphere?.())})}var Pg=require("three");function z1(e){return e.isSkinnedMesh===!0}function xo(e){let t=[];return e.traverse(n=>{z1(n)&&t.push(n)}),t}var Ds="reactImmersiveSkinFreeze";function Ag(e){return!!e.userData[Ds]}function Tc(e,t){let n=e.userData,i=new Pg.Matrix4().copy(t).invert(),r=n[Ds];if(r){r.frozenInverse.copy(i),e.bindMatrixInverse.copy(i);return}let a={frozenInverse:i,previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(i),e.onBeforeRender=function(o,s,c,l,u,d){a.previousOnBeforeRender.call(this,o,s,c,l,u,d),e.bindMatrixInverse.copy(a.frozenInverse)},n[Ds]=a}function yo(e){let t=e.userData,n=t[Ds];n&&(e.onBeforeRender=n.previousOnBeforeRender,delete t[Ds],e.updateMatrixWorld(!0))}var Ma=require("react"),Eg=require("@react-three/fiber");function Rg(){let e=(0,Eg.useThree)(r=>r.gl.domElement),t=(0,Ma.useRef)(void 0),n=(0,Ma.useCallback)(r=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=r},[e]),i=(0,Ma.useCallback)(()=>{let r=t.current;r!==void 0&&(e.style.cursor=r,t.current=void 0)},[e]);return(0,Ma.useEffect)(()=>()=>{i()},[i]),{setCanvasCursor:n,restoreCanvasCursor:i}}var Tr=require("react"),U1=500,F1=10,V1=5;function Pc(e,t){let n=(0,Tr.useRef)({resolve:e,onContextMenu:t});n.current={resolve:e,onContextMenu:t};let i=(0,Tr.useRef)(null),r=(0,Tr.useRef)(!1),a=(0,Tr.useRef)(null),o=(0,Tr.useCallback)(()=>{let u=i.current;u?.timer&&clearTimeout(u.timer),i.current=null,a.current?.(),a.current=null},[]),s=(0,Tr.useCallback)(()=>{let u=i.current;u&&(o(),u.kind==="touch"&&(r.current=!0,setTimeout(()=>r.current=!1,800)),n.current.onContextMenu?.(u.target,u.pointer))},[o]),c=(0,Tr.useCallback)(u=>{let d=u.nativeEvent,p=d.pointerType!=="touch"&&d.button===2,g=d.pointerType==="touch"&&d.button===0;if(!n.current.onContextMenu||!p&&!g)return;let f=n.current.resolve(u.object);if(f===null)return;o();let v={target:f,kind:p?"right":"touch",pointerId:d.pointerId,pointer:{clientX:d.clientX,clientY:d.clientY,pointerType:d.pointerType},timer:g?setTimeout(s,U1):null};i.current=v;let E=p?V1:F1,S=w=>Math.hypot(w.clientX-v.pointer.clientX,w.clientY-v.pointer.clientY)>E,b=w=>{w.pointerId===v.pointerId&&S(w)&&o()},x=w=>{w.pointerId===v.pointerId&&(v.kind==="right"&&!S(w)?s():o())},R=w=>{w.pointerId!==v.pointerId&&o()};window.addEventListener("pointermove",b),window.addEventListener("pointerup",x),window.addEventListener("pointercancel",o),window.addEventListener("pointerdown",R),a.current=()=>{window.removeEventListener("pointermove",b),window.removeEventListener("pointerup",x),window.removeEventListener("pointercancel",o),window.removeEventListener("pointerdown",R)}},[o,s]);(0,Tr.useEffect)(()=>o,[o]);let l=(0,Tr.useCallback)(()=>r.current?(r.current=!1,!0):!1,[]);return{onPointerDown:c,consumeClick:l}}function Ac(e){let t=e.nativeEvent;return{clientX:t.clientX,clientY:t.clientY,pointerType:"pointerType"in t?t.pointerType:"mouse"}}var Ju=require("react/jsx-runtime");function Ec(e,t,n){let i=n.get(e);i&&(t?.position?e.position.fromArray(t.position):e.position.copy(i.position),t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],i.rotation.order):e.rotation.copy(i.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(i.scale),e.updateMatrix())}function mn(e,t=!1){if(!e||typeof e!="object")return"-";let n=e;return[n.channel??0,t?n.format??"":"",n.isVideoTexture?n.colorSpace??"":""].join(":")}function wo(e){let t=e,n=Number(t.clearcoat)>0,i=Number(t.sheen)>0,r=Number(t.anisotropy)>0,a=Number(t.transmission)>0,o=t.transparent===!1&&t.blending===Ue.NormalBlending&&t.alphaToCoverage!==!0;return[mn(t.map),mn(t.aoMap),mn(t.lightMap),mn(t.bumpMap),mn(t.normalMap,!0),t.normalMap?t.normalMapType:"",mn(t.displacementMap),mn(t.emissiveMap),mn(t.metalnessMap),mn(t.roughnessMap),r,mn(r?t.anisotropyMap:null),n,mn(n?t.clearcoatMap:null),mn(n?t.clearcoatNormalMap:null,!0),mn(n?t.clearcoatRoughnessMap:null),i,mn(i?t.sheenColorMap:null),mn(i?t.sheenRoughnessMap:null),mn(t.specularColorMap),mn(t.specularIntensityMap),a,mn(a?t.transmissionMap:null),mn(a?t.thicknessMap:null),mn(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,t.side,o].join("|")}function Qu({url:e,objectBindings:t,selectedItem:n,itemMaterials:i,onItemClick:r,onItemHover:a,onItemDoubleClick:o,onItemContextMenu:s,onModelLoaded:c,onAnimationsReady:l,nodeRefsOut:u,onNodeRefsChange:d,materialRefsOut:p,panelHoveredItem:g,sceneConfig:f,zoomOnSelected:v=!0,highlightOnHover:E=!0,decoderConfig:S,modelFormat:b,onLoadProgress:x,explodeFactor:R=0,suspendBindingTransforms:w=!1}){let P=mg(e,S,b,x),y=(0,_o.useThree)(U=>U.invalidate),[m,A]=(0,ue.useState)(null),C=(0,ue.useRef)(null),{setCanvasCursor:D,restoreCanvasCursor:$}=Rg();(0,ue.useEffect)(()=>{E||(A(null),a?.(null),$())},[E,a,$]);let k=(0,ue.useMemo)(()=>Lg.SkeletonUtils.clone(P.scene),[P.scene]),X=(0,ue.useMemo)(()=>Xi(k),[k]),O=X.nodesById;(0,ue.useEffect)(()=>{X.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(X.duplicateNames))},[X]);let H=(0,ue.useMemo)(()=>{let U=new WeakMap;return k.traverse(N=>{U.set(N,{position:N.position.clone(),rotation:N.rotation.clone(),scale:N.scale.clone()})}),U},[k]);(0,ue.useEffect)(()=>{let U=!1,N=null,q=null,re=window,ie=Object.entries(O).filter(([,Xt])=>Sr(Xt)),me=new Ue.Box3,le=[],ke=0;k.traverse(Xt=>{Sr(Xt)&&(Xt.castShadow=!1,Xt.receiveShadow=!0)});let vt=()=>{if(U)return;let Xt=new Set,ae=me.getSize(new Ue.Vector3),yt=new Ue.Vector3;for(let{name:an,box:pn}of le)pn.getSize(yt),yt.x>ae.x*.7&&yt.z>ae.z*.7&&yt.y>ae.y*.4&&Xt.add(an);k.traverse(an=>{if(!Sr(an))return;let pn=Es(an);an.castShadow=!pn||!Xt.has(pn),an.receiveShadow=!0}),y()},Nt=()=>{U||(re.requestIdleCallback?N=re.requestIdleCallback(xt,{timeout:100}):q=window.setTimeout(()=>xt(),0))},xt=Xt=>{if(N=null,q=null,U)return;let ae=performance.now(),yt=0;for(;ke<ie.length&&!(yt>0&&!(Xt?Xt.didTimeout?yt<16:Xt.timeRemaining()>1:performance.now()-ae<8));){let[an,pn]=ie[ke];ke+=1,yt+=1;let Dn=new Ue.Box3().setFromObject(pn);Dn.isEmpty()||(le.push({name:an,box:Dn}),me.union(Dn))}ke<ie.length?Nt():vt()};return Nt(),()=>{U=!0,N!==null&&re.cancelIdleCallback?.(N),q!==null&&window.clearTimeout(q)}},[y,O,k]),(0,ue.useEffect)(()=>{Zu(k)},[k]),(0,ue.useEffect)(()=>{let U=new AbortController;return Yl(k,U.signal),()=>{U.abort(),gs(k)}},[k]);let B=(0,ue.useMemo)(()=>{let U={};for(let[N,q]of Object.entries(t))U[q.modelObjectId??N]=N;return U},[t]),se=(0,ue.useMemo)(()=>Object.entries(t).map(([U,N])=>`${U}${N.modelObjectId??U}`).sort().join(""),[t]),Q=(0,ue.useMemo)(()=>Object.entries(t).map(([U,N])=>JSON.stringify([U,N.modelObjectId??U,N.transform??null])).sort().join(""),[t]),be=(0,ue.useRef)(new Map);(0,ue.useEffect)(()=>{let U=new Map,N=new Map;for(let[ie,me]of Object.entries(t)){if(!me.transform)continue;let le=O[me.modelObjectId??ie];le&&(U.set(le,me.transform),N.set(le,xo(le)))}let q=new Set([...be.current.keys(),...U.keys()]);for(let ie of q){Ec(ie,void 0,H);for(let me of xo(ie))yo(me)}k.updateMatrixWorld(!0);let re=new Map;for(let ie of N.values())for(let me of ie)re.has(me)||re.set(me,me.matrixWorld.clone());for(let[ie,me]of U)Ec(ie,me,H);be.current=U,k.updateMatrixWorld(!0);for(let[ie,me]of re)Tc(ie,me);y()},[k,O,H,Q,y]),(0,ue.useEffect)(()=>()=>{for(let U of xo(k))yo(U)},[k]);let ve=(0,ue.useMemo)(()=>{let U={};for(let[N,q]of Object.entries(t)){let re=q.modelObjectId??N,ie=O[re];if(!Sr(ie))continue;let me=ks(ie);me&&(U[N]=ui(me,le=>{let ke=wc(le),vt=_c(ke??new Ue.MeshStandardMaterial);return Sc(vt),vt}))}return U},[O,se]);(0,ue.useEffect)(()=>{p&&(p.current=ve)},[ve,p]),(0,ue.useEffect)(()=>()=>{for(let U of Object.values(ve))Cr(U,N=>{Hf(N.userData),N.dispose()})},[ve]);let et=f?.model.shading??"lit",Mt=f?.model.renderer??"pbr",Yt=f?.wireframe.enabled??!1,en=f?.wireframe.color??"#93c5fd",Dt=f?.wireframe.opacity??1,ft=(0,ue.useMemo)(()=>{let U={};if(et!=="unlit")return U;for(let[N,q]of Object.entries(ve))U[N]=ui(q,re=>{let ie=new Ue.MeshBasicMaterial;return ie.color.copy(re.color),ie.map=re.map,ie.alphaMap=re.alphaMap,ie.alphaTest=re.alphaTest,ie.transparent=re.transparent,ie.opacity=re.opacity,ie.side=re.side,ie});return U},[ve,et]),tn=(0,ue.useMemo)(()=>{let U={};if(et!=="normals")return U;for(let[N,q]of Object.entries(ve))U[N]=ui(q,()=>new Ue.MeshNormalMaterial);return U},[ve,et]),$t=(0,ue.useMemo)(()=>{let U={};if(et!=="lit"||Mt!=="matcap")return U;let N=sc();for(let[q,re]of Object.entries(ve))U[q]=ui(re,ie=>{let me=new Ue.MeshMatcapMaterial;return me.matcap=N,me.color.copy(ie.color),me.alphaMap=ie.alphaMap,me.alphaTest=ie.alphaTest,me.side=ie.side,me});return U},[ve,et,Mt]);(0,ue.useEffect)(()=>()=>{for(let U of Object.values(ft))Cr(U,N=>N.dispose());for(let U of Object.values(tn))Cr(U,N=>N.dispose());for(let U of Object.values($t))Cr(U,N=>N.dispose())},[ft,tn,$t]);let Cn=U=>et==="normals"?tn[U]:et==="unlit"?ft[U]:Mt==="matcap"?$t[U]:ve[U],jt=(0,ue.useRef)(c);jt.current=c,(0,ue.useEffect)(()=>{jt.current?.(k)},[k]);let nn=(0,ue.useMemo)(()=>{let U={};for(let[N,q]of Object.entries(t)){let re=q.modelObjectId??N,ie=O[re];ie&&(U[N]=ie)}return U},[O,se]);(0,ue.useEffect)(()=>(u.current=nn,d?.(),()=>{u.current===nn&&(u.current={})}),[nn,u,d]);let Ht=(0,ue.useRef)({});(0,ue.useEffect)(()=>()=>{for(let U of Object.values(Ht.current))for(let[N,q]of Object.entries(U))q&&wa(q,qr(N));Ht.current={}},[]);let oe=(0,ue.useMemo)(()=>{let U=new Map;for(let[N,q]of Object.entries(t)){let re=g===q||g?.id===q.id||g?.modelObjectId===q.modelObjectId,ie=E&&(m===N||re),me=ie||n===N;(ie||me)&&U.set(N,{emissive:ie,matcap:me})}return U},[t,E,m,n,g]),$n=(0,ue.useRef)(oe);$n.current=oe,(0,ue.useEffect)(()=>{let U=new Set;for(let[N,q]of Object.entries(t)){U.add(N);let re=q.modelObjectId??N,ie=O[re];if(!Sr(ie))continue;ie.visible=q.visible!==!1;let me=ve[N];if(!me)continue;if(Mt!=="uv-checker"){let ae=Cn(N);ae&&(ie.material=ae)}if(q.visible===!1)continue;let le=ft[N],ke=$t[N],vt=i[N]??i[q.modelObjectId??N],Nt=q.style?.material,xt=Ht.current[N]??{};for(let ae of ci){let yt=Ft(Nt,ae),an=xt[ae];if(an===yt)continue;let pn=qr(ae);an&&wa(an,pn),yt?(ic(yt,pn,y),xt[ae]=yt):delete xt[ae]}Object.keys(xt).length>0?Ht.current[N]=xt:delete Ht.current[N];let Xt=vt?.hex??Nt?.baseColor;Cr(me,(ae,yt)=>{let an=wo(ae);Mc(ae,Nt,Xt);let pn=ae.userData.reactImmersiveConfiguredEmissive;pn?.isColor?pn.copy(ae.emissive):ae.userData.reactImmersiveConfiguredEmissive=ae.emissive.clone();let Dn=$n.current.get(N);Dn?.emissive&&ae.emissive.add(Cs),an!==wo(ae)&&(ae.needsUpdate=!0);let Nn=Cc(le,yt);if(Nn){let on=wo(Nn);Nn.color.copy(ae.color),Nn.map=ae.map,Nn.alphaMap=ae.alphaMap,Nn.alphaTest=ae.alphaTest,Nn.transparent=ae.transparent,Nn.opacity=ae.opacity,Nn.side=ae.side,on!==wo(Nn)&&(Nn.needsUpdate=!0)}let In=Cc(ke,yt);if(In){let on=wo(In);Dn?.matcap?In.color.set(Pi.color):In.color.copy(ae.color),In.map=ae.map,In.alphaMap=ae.alphaMap,In.alphaTest=ae.alphaTest,In.transparent=ae.transparent,In.opacity=ae.opacity,In.side=ae.side,on!==wo(In)&&(In.needsUpdate=!0)}})}for(let N of Object.keys(Ht.current))if(!U.has(N)){for(let[q,re]of Object.entries(Ht.current[N]))re&&wa(re,qr(q));delete Ht.current[N]}y()},[t,O,ve,ft,tn,$t,i,et,Mt,y]);let Rt=(0,ue.useRef)(new Map);(0,ue.useEffect)(()=>{let U=Rt.current,N=new Set([...U.keys(),...oe.keys()]),q=!1;for(let re of N){let ie=U.get(re),me=oe.get(re),le=!!ie?.emissive!=!!me?.emissive,ke=!!ie?.matcap!=!!me?.matcap;if(!le&&!ke)continue;q=!0;let vt=ve[re],Nt=$t[re];vt&&Cr(vt,(xt,Xt)=>{let ae=xt.userData.reactImmersiveConfiguredEmissive;le&&ae?.isColor&&(xt.emissive.copy(ae),me?.emissive&&xt.emissive.add(Cs));let yt=Cc(Nt,Xt);ke&&yt&&(me?.matcap?yt.color.set(Pi.color):yt.color.copy(xt.color))})}Rt.current=oe,q&&y()},[oe,ve,$t,y]),(0,ue.useEffect)(()=>{if(Mt!=="uv-checker")return;let U=Gf(),N=[];return k.traverse(q=>{if(!Sr(q))return;let re=q.material,ie=Array.isArray(re)?re:[re],me=!!q.geometry.getAttribute("uv"),le=ie.map((vt,Nt)=>{let xt=new Ue.MeshBasicMaterial({color:me?"#ffffff":"#ff00ff",map:me?U:null,side:vt.side});return xt.name=`${q.name||"mesh"}-uv-checker-${Nt}`,xt.toneMapped=!1,xt}),ke=Array.isArray(re)?le:le[0];q.material=ke,N.push({node:q,original:re,diagnostic:ke})}),y(),()=>{for(let{node:q,original:re,diagnostic:ie}of N){q.material=re;let me=Array.isArray(ie)?ie:[ie];for(let le of me)le.dispose()}y()}},[k,Mt,y]),(0,ue.useEffect)(()=>{if(!Yt)return;let U=[];for(let[N,q]of Object.entries(t)){let re=q.modelObjectId??N,ie=O[re];if(!Sr(ie))continue;let me=new Ue.MeshBasicMaterial({color:en,wireframe:!0,transparent:!0,opacity:Dt,depthTest:!1,depthWrite:!1,side:Ue.DoubleSide,toneMapped:!1}),le=ie.clone(!1);le.name="",le.position.set(0,0,0),le.quaternion.identity(),le.scale.set(1,1,1),le.matrix.identity(),le.matrixAutoUpdate=!0,le.material=me,le.castShadow=!1,le.receiveShadow=!1,le.frustumCulled=!1,le.renderOrder=1,le.userData={isWireframeOverlay:!0},le.raycast=()=>{},ie.morphTargetInfluences&&(le.morphTargetInfluences=ie.morphTargetInfluences),ie.add(le),U.push({node:ie,overlay:le})}return y(),()=>{for(let{node:N,overlay:q}of U)N.remove(q),q.material.dispose()}},[Yt,en,Dt,O,t,y]);let st=(0,ue.useMemo)(()=>bg(P.animations),[P.animations]),Kt=(0,ue.useRef)(l);Kt.current=l;let Gt=(0,ue.useRef)(f);Gt.current=f;let Zt=(0,ue.useRef)(null),Kn=(0,ue.useRef)({}),ze=(0,ue.useRef)(null),ye=(0,ue.useRef)(null),Ce=(0,ue.useRef)(1),Wt=(0,ue.useRef)(new Set),gt=(0,ue.useRef)(0),Jt=()=>({currentClip:ye.current,isPlaying:ze.current?.paused===!1,speed:Ce.current,time:ze.current?.time??0,duration:ze.current?.getClip().duration??0}),ee=()=>{let U=Jt();Wt.current.forEach(N=>N(U))},ge=(U,N)=>{let q=Cg(N);U.setLoop(q==="once"?Ue.LoopOnce:Ue.LoopRepeat,q==="once"?1:1/0),U.clampWhenFinished=q==="once";let re=Ku(N?.speed??Ce.current);Ce.current=re,U.setEffectiveTimeScale(re)},we=()=>{ze.current?.stop(),ze.current=null,ye.current=null,ee(),y()},Je=()=>{ze.current&&(ze.current.paused=!0,ee(),y())},Tt=U=>{let N=Ku(U);Ce.current=N,ze.current?.setEffectiveTimeScale(N),ee()},Qe=U=>{let N=ze.current;if(!N)return;let q=N.getClip().duration;N.time=Math.min(Math.max(U,0),q),Zt.current?.update(0),ee(),y()},bt=U=>{let N=Kn.current[U];if(!N)return;let q=yc(Gt.current,U);if(!q?.hidden){if(ze.current===N&&N.paused){ge(N,q),N.paused=!1,ye.current=U,ee(),y();return}ze.current&&ze.current!==N&&ze.current.stop(),ge(N,q),N.paused=!1,N.enabled=!0,N.reset().play(),ze.current=N,ye.current=U,ee(),y()}};(0,ue.useEffect)(()=>{let U=new Ue.AnimationMixer(k);Zt.current=U;let N={};for(let{clip:le,sourceName:ke}of st)N[ke]=U.clipAction(le);Kn.current=N;let q=le=>{le.action&&le.action===ze.current&&we()};U.addEventListener("finished",q);let re=()=>{};Kt.current?.({clips:st.map(({sourceName:le})=>le),clipDetails:st.map(({sourceName:le,duration:ke})=>({sourceName:le,duration:ke})),play:st.length?bt:re,pause:st.length?Je:re,stop:st.length?we:re,setSpeed:st.length?Tt:re,seek:st.length?Qe:re,getState:Jt,subscribe:le=>(Wt.current.add(le),le(Jt()),()=>{Wt.current.delete(le)})}),Ce.current=1,ee();let ie=Gt.current?.animations.autoplayClip,me=ie?yc(Gt.current,ie):void 0;return ie&&!me?.hidden&&bt(ie),()=>{U.removeEventListener("finished",q),U.stopAllAction(),U.uncacheRoot(k),Zt.current=null,Kn.current={},ze.current=null,ye.current=null,Ce.current=1,ee()}},[k,st]),(0,ue.useEffect)(()=>{let U=ye.current,N=ze.current;if(!U||!N||!f?.animations)return;let q=yc(f,U);if(q?.hidden){we();return}q&&(ge(N,q),ee())},[f?.animations]),(0,_o.useFrame)((U,N)=>{if(Zt.current&&ze.current?.paused===!1){if(Zt.current.update(N),!w)for(let[q,re]of be.current)Ec(q,re,H);y(),gt.current+=N,gt.current>=.066&&(gt.current=0,ee(),Zu(k))}});let fe=(0,ue.useMemo)(()=>(f?.model.rotation??[0,0,0]).map(U=>U*Math.PI/180),[f?.model.rotation]);(0,_o.useFrame)((U,N)=>{if(!C.current)return;let q=C.current.rotation;q.x=Ue.MathUtils.lerp(q.x,fe[0],1-Math.exp(-5*N)),q.y=Ue.MathUtils.lerp(q.y,fe[1],1-Math.exp(-5*N)),q.z=Ue.MathUtils.lerp(q.z,fe[2],1-Math.exp(-5*N)),Math.abs(q.x-fe[0])<1e-4&&Math.abs(q.y-fe[1])<1e-4&&Math.abs(q.z-fe[2])<1e-4||y()});let He=(0,ue.useRef)([]),tt=(0,ue.useRef)(0),rn=(0,ue.useRef)(0),vn=(0,ue.useMemo)(()=>new Ue.Vector3,[]);(0,ue.useEffect)(()=>{let U=new Map;for(let[vt,Nt]of Object.entries(t)){let xt=O[Nt.modelObjectId??vt];xt&&U.set(xt,Nt)}for(let vt of He.current)Ec(vt.node,U.get(vt.node)?.transform,H);rn.current=0,k.updateWorldMatrix(!0,!0);let N=new Ue.Box3().setFromObject(k),q=N.getCenter(new Ue.Vector3),re=N.getSize(new Ue.Vector3).length()*.5;tt.current=Number.isFinite(re)?re:0;let ie=[...U.keys()],me=new Set(ie),le=[],ke=new Ue.Vector3;for(let vt of ie){if(!vt.parent)continue;let Nt=vt.parent,xt=!1;for(;Nt;){if(me.has(Nt)){xt=!0;break}Nt=Nt.parent}if(xt)continue;let Xt=new Ue.Box3().setFromObject(vt);if(Xt.isEmpty())continue;Xt.getCenter(ke);let ae=ke.clone().sub(q);ae.lengthSq()<1e-8||(ae.normalize(),le.push({node:vt,restLocalPos:vt.position.clone(),restWorldPos:vt.getWorldPosition(new Ue.Vector3),worldDir:ae,parentInverse:new Ue.Matrix4().copy(vt.parent.matrixWorld).invert()}))}He.current=le,y()},[k,O,se,Q,H,y]),(0,ue.useEffect)(()=>{y()},[R,y]),(0,_o.useFrame)((U,N)=>{let q=He.current;if(q.length===0)return;let re=Math.min(Math.max(R,0),1),ie=rn.current;if(Math.abs(ie-re)<1e-4){if(ie===re)return;rn.current=re}else rn.current=Ue.MathUtils.lerp(ie,re,1-Math.exp(-6*N)),y();let me=rn.current*tt.current;for(let le of q)vn.copy(le.worldDir).multiplyScalar(me).add(le.restWorldPos).applyMatrix4(le.parentInverse),le.node.position.copy(vn)});let Tn=U=>{let N=U;for(;N;){let q=Es(N),re=q?B[q]:void 0;if(re&&t[re])return[re,t[re]];N=N.parent}return null},Qt=Pc(U=>{let N=Tn(U);return N&&N[1].selectable!==!1?N[1]:null},s),Ir=U=>{if(Qt.consumeClick())return;let N=Tn(U.object);if(!N)return;let[,q]=N;q.selectable!==!1&&(U.stopPropagation(),r(q))},kn=U=>{let N=Tn(U.object);if(!N)return;let[,q]=N;if(q.selectable===!1)return;o?.(q,Ac(U))&&U.stopPropagation()},Br=U=>{if(!E)return;let N=Tn(U.object);if(!N)return;let[q,re]=N;re.hoverable!==!1&&(U.stopPropagation(),D("pointer"),A(q),a?.(re))},la=U=>{E&&(U.stopPropagation(),$(),A(null),a?.(null))},xn=(0,ue.useMemo)(()=>!Em(k),[k]);return(0,Ju.jsx)("group",{ref:C,children:(0,Ju.jsx)("primitive",{object:k,...xn?{onClick:Ir,onDoubleClick:kn,...s?{onPointerDown:Qt.onPointerDown}:{},...E?{onPointerOver:Br,onPointerOut:la}:{}}:{}})})}var Be=require("react");var ad=require("@react-three/fiber");var It=require("three");var Lt=require("three");function Ng(e){let t={};for(let[n,i]of Object.entries(e))t[i.modelObjectId??n]=n;return t}function tp(e){let t=e,n=null;for(;t;){let i=t.userData?.ri_name;if(typeof i=="string"&&i)return i;!n&&t.name&&(n=t.name),t=t.parent}return n}function Ig(e,t){return e||(t?t.modelObjectId??t.id:null)}function kc(e,t){let n=tp(e);if(!n)return null;let i=t.keyByModelObject[n]??n,r=t.objectBindings[i];return r?{key:i,binding:r}:null}var So=new Lt.Vector3,ep=new Lt.Vector3,j1=new Lt.Matrix4,kg=new Lt.Matrix4,Rc=new Lt.Matrix4,H1=new Lt.Matrix4,Lc=new Lt.Matrix4,G1=new Lt.Matrix4,W1=new Lt.Matrix4,X1=new Lt.Vector3,q1=new Lt.Vector3,Yi=new Lt.Vector3,Dg=new Lt.Quaternion,Y1=new Lt.Euler;function $1(e,t,n,i,r){let a=!!(n?.position||n?.rotation||n?.scale),o=!!(r&&r.factor>0&&r.radius>0);if(!a&&!o){e.matrixAutoUpdate=!0,e.position.copy(t.position),e.rotation.copy(t.rotation),e.scale.copy(t.scale),e.updateMatrix(),e.updateWorldMatrix(!0,!1);return}kg.compose(t.position,Dg.setFromEuler(t.rotation),t.scale);let s=n?.rotation;Rc.compose(X1.fromArray(n?.position??[0,0,0]),Dg.setFromEuler(Y1.set(s?.[0]??0,s?.[1]??0,s?.[2]??0)),q1.fromArray(n?.scale??[1,1,1])),Rc.premultiply(i).multiply(H1.copy(i).invert()),e.parent?.updateWorldMatrix(!0,!1);let c=e.parent?.matrixWorld??j1;if(Lc.multiplyMatrices(c,kg).premultiply(Rc),o&&r){let l=e;for(;l.parent&&!l.userData.ri_name;)l=l.parent;let u=l.userData.ri_center;Array.isArray(u)&&u.length===3?Yi.fromArray(u).applyMatrix4(i).applyMatrix4(Rc):Yi.setFromMatrixPosition(Lc),Yi.sub(r.centre),Yi.lengthSq()>1e-8&&(Yi.normalize().multiplyScalar(r.factor*r.radius),Lc.premultiply(W1.makeTranslation(Yi.x,Yi.y,Yi.z)))}e.matrixAutoUpdate=!1,e.matrix.multiplyMatrices(G1.copy(c).invert(),Lc),e.matrixWorldNeedsUpdate=!0,e.updateWorldMatrix(!1,!1)}function Dc(e,t){if(!Sr(e)&&!e.userData.riLogicalObject)return;let n=kc(e,t);if(!n)return;let i=Bg(e);if(i.rest??(i.rest={position:e.position.clone(),rotation:e.rotation.clone(),scale:e.scale.clone()}),t.suspendTransforms)return;if(t.placementFrame&&!e.userData.riLogicalObject){$1(e,i.rest,n.binding.transform,t.placementFrame,t.explode);return}let r=i.rest,a=n.binding.transform;a?.position?e.position.fromArray(a.position):e.position.copy(r.position),a?.rotation?e.rotation.set(a.rotation[0],a.rotation[1],a.rotation[2],r.rotation.order):e.rotation.copy(r.rotation),a?.scale?e.scale.fromArray(a.scale):e.scale.copy(r.scale);let o=t.explode;if(o&&o.factor>0&&o.radius>0){e.updateWorldMatrix(!0,!1),ep.setFromMatrixPosition(e.matrixWorld);let s=e;for(;s.parent&&!s.userData.ri_name;)s=s.parent;let c=s.userData.ri_center;Array.isArray(c)&&c.length===3?So.fromArray(c).applyMatrix4(e.matrixWorld).sub(o.centre):So.copy(ep).sub(o.centre),So.lengthSq()>1e-8&&(So.normalize().multiplyScalar(o.factor*o.radius).add(ep),e.parent&&e.parent.worldToLocal(So),e.position.copy(So))}e.updateMatrix(),e.updateWorldMatrix(!0,!1)}function Mo(e,t){e.traverse(n=>Dc(n,t))}function Bg(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function K1(e,t,n,i){return JSON.stringify([e?.style?.material??null,t??null,n.shadingMode,n.rendererMode,i])}function Z1(e){if(e.textures){for(let t of ci){let n=e.textures[t];n&&wa(n,qr(t))}e.textures=void 0}}function J1(e,t,n){let i=e.textures??{};for(let r of ci){let a=Ft(t,r),o=i[r];if(o===a)continue;let s=qr(r);o&&wa(o,s),a?(ic(a,s,n),i[r]=a):delete i[r]}e.textures=Object.keys(i).length>0?i:void 0}function Q1(e,t){if(t.shadingMode==="normals")return ui(e,()=>new Lt.MeshNormalMaterial);if(t.shadingMode==="unlit")return ui(e,n=>{let i=new Lt.MeshBasicMaterial;return i.color.copy(n.color),i.map=n.map,i.alphaMap=n.alphaMap,i.alphaTest=n.alphaTest,i.transparent=n.transparent,i.opacity=n.opacity,i.side=n.side,i});if(t.rendererMode==="matcap"){let n=sc();return ui(e,i=>{let r=new Lt.MeshMatcapMaterial;return r.matcap=n,r.color.copy(i.color),r.alphaMap=i.alphaMap,r.alphaTest=i.alphaTest,r.side=i.side,r})}return e}function ew(e,t){if(!Sr(e))return;let i=Bg(e);i.original??(i.original=ks(e));let r=kc(e,t);if(!r){i.original&&(e.material=i.original),e.visible=!0;return}let{key:a,binding:o}=r;e.visible=o.visible!==!1,Dc(e,t);let s=t.itemMaterials?.[a]?.hex??t.itemMaterials?.[o.modelObjectId??a]?.hex,c=t.highlightOnHover!==!1&&a===t.hoveredKey,l=K1(o,s,t,c);if(i.signature===l&&i.display){e.material=i.display;return}let u=o.style?.material;if(J1(i,u,t.invalidate),!i.physical){let d=i.original??ks(e);if(!d)return;i.physical=ui(d,p=>{let g=wc(p),f=_c(g??new Lt.MeshStandardMaterial);return Sc(f),f})}Cr(i.physical,d=>{Mc(d,u,s??u?.baseColor),c&&(d.emissive.add(Cs),d.color.lerp(zf,Uf)),d.needsUpdate=!0}),i.display&&i.display!==i.physical&&Cr(i.display,d=>d.dispose()),i.display=Q1(i.physical,t),i.signature=l,e.material=i.display}function Og(e,t){e.traverse(n=>ew(n,t))}function np(e){e.traverse(t=>{if(!Sr(t))return;let n=t.userData.riVisuals;n&&(n.rest&&(t.matrixAutoUpdate=!0,t.position.copy(n.rest.position),t.rotation.copy(n.rest.rotation),t.scale.copy(n.rest.scale),t.updateMatrix()),n.original&&(t.material=n.original),n.display&&n.display!==n.physical&&Cr(n.display,i=>i.dispose()),n.physical&&Cr(n.physical,i=>i.dispose()),Z1(n),delete t.userData.riVisuals)})}var Ug=new It.Matrix4().makeRotationX(Math.PI/2),zg=Ug.clone().invert();function tw(e){let t=new It.Vector3(e[0],e[1],e[2]),n=new It.Vector3(Math.abs(e[3])+Math.abs(e[6])+Math.abs(e[9]),Math.abs(e[4])+Math.abs(e[7])+Math.abs(e[10]),Math.abs(e[5])+Math.abs(e[8])+Math.abs(e[11]));return new It.Box3(t.clone().sub(n),t.clone().add(n))}function nw(e){let t=e.getCenter(new It.Vector3),n=e.getSize(new It.Vector3).multiplyScalar(.5);return[t.x,t.y,t.z,n.x,0,0,0,n.y,0,0,0,n.z]}var Nc=class{constructor(){this.group=new It.Group;this.objects=new Map;this.geometry=new It.BoxGeometry(1,1,1);this.material=new It.MeshBasicMaterial;this.originalBounds=new WeakMap;this.signature="";this.lastContext=null;this.lastEffective=null;this.lastDragging=!1;this.version=0;this.tileVersions=new WeakMap;this.transforms=new Map}setCatalog(t){this.group.clear(),this.objects.clear();for(let n of t){let i=new It.Box3(new It.Vector3(...n.minimum),new It.Vector3(...n.maximum)).applyMatrix4(zg),r=new It.Group;r.name=n.name,r.userData.ri_name=n.name,r.userData.riLogicalObject=!0,r.userData.ri_center=i.getCenter(new It.Vector3).toArray();let a=new It.Mesh(this.geometry,this.material);a.visible=!1,a.raycast=()=>{},a.position.copy(i.getCenter(new It.Vector3)),a.scale.copy(i.getSize(new It.Vector3)),r.add(a),this.group.add(r),this.objects.set(n.name,r)}this.signature="",this.lastContext=null}nodesByBinding(t){let n={};for(let[i,r]of this.objects){let a=t.keyByModelObject[i]??i;t.objectBindings[a]&&(n[a]=r)}return n}sync(t,n,i=!1){if(!i&&!this.lastDragging&&t===this.lastContext&&this.lastEffective)return this.lastEffective;this.lastContext=t,this.lastDragging=i;let r={...t,suspendTransforms:!1},a=n?t.objectBindings[n]:void 0,o=a?this.objects.get(a.modelObjectId??n):void 0;i&&o&&a&&(r={...r,objectBindings:{...t.objectBindings,[n]:{...a,transform:{position:o.position.toArray(),rotation:[o.rotation.x,o.rotation.y,o.rotation.z],scale:o.scale.toArray()}}}});for(let c of this.objects.values())i&&c===o||Dc(c,r);this.group.updateWorldMatrix(!0,!0);let s=[...this.objects].map(([c,l])=>`${c}:${l.matrix.elements.join(",")}`).join(";");if(s!==this.signature){this.signature=s,this.version++,this.transforms.clear();for(let[c,l]of this.objects)l.matrix.equals(new It.Matrix4)||this.transforms.set(c,Ug.clone().multiply(l.matrix).multiply(zg))}return this.lastEffective=r,r}updateBounds(t){if(!t)return;let n=i=>{if(this.tileVersions.get(i)!==this.version){if(i.boundingVolume.box&&this.tileVersions.get(i)!==this.version){let r=this.originalBounds.get(i);r||(r={box:[...i.boundingVolume.box],error:i.geometricError},this.originalBounds.set(i,r));let a=tw(r.box),o=a.clone(),s=1;for(let l of i.extras?.featureIds??[]){let u=this.transforms.get(l);u&&(o.union(a.clone().applyMatrix4(u)),s=Math.max(s,u.getMaxScaleOnAxis()))}let c=nw(o);i.boundingVolume.box=c,i.geometricError=r.error*s,i.engineData?.boundingVolume?.setObbData(c,i.engineData.transform),this.tileVersions.set(i,this.version)}i.children?.forEach(n)}};n(t)}dispose(){this.group.clear(),this.objects.clear(),this.geometry.dispose(),this.material.dispose()}};var rp=Object.freeze({factor:1,loosened:!1,tooFine:0,raisedAt:-1/0,changedAt:-1/0}),Ns=16,ip=1.25,rw=1.5,iw=1.25,aw=500,ow=3e3,Fg=5e3,Vg=2e3,sw=.9;function jg(e){return e.full&&(e.wanting||e.usage>1)}function Hg(e){return e.loosened?ow:aw}function Gg(e){let t=e.factor/iw;return t<=1+1e-6?1:t}function Wg(e,t){return e.factor>1&&!e.loosened&&!t.full&&!t.wanting&&t.usage<sw&&Gg(e)>e.tooFine}function Xg(e,t){let{now:n}=t,i=t.moved&&e.tooFine>0?{...e,tooFine:0}:e;if(jg(t)){if(n-i.changedAt<Hg(i))return i;let r=Math.max(i.tooFine,i.factor);return i.factor>=Ns?i.loosened&&i.tooFine===r?i:{...i,loosened:!0,tooFine:r,changedAt:n}:{factor:Math.min(Ns,i.factor*rw),loosened:!0,tooFine:r,raisedAt:n,changedAt:n}}return i.loosened&&!t.wanting?{...i,loosened:!1,changedAt:n}:Wg(i,t)&&n-i.raisedAt>=Fg&&n-i.changedAt>=Vg?{...i,factor:Gg(i),changedAt:n}:i}function qg(e,t){let{now:n}=t;return jg(t)?e.factor>=Ns&&e.loosened?null:Math.max(0,Hg(e)-(n-e.changedAt)):e.loosened&&!t.wanting?0:Wg(e,t)?Math.max(0,Fg-(n-e.raisedAt),Vg-(n-e.changedAt)):null}function Zg(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function ap(e){if(!e)return null;let t=e.length,n=e.indexOf("?"),i=e.indexOf("#");n!==-1&&(t=Math.min(t,n)),i!==-1&&(t=Math.min(t,i));let r=e.lastIndexOf(".",t),a=e.lastIndexOf("/",t),o=e.indexOf("://");return o!==-1&&o+2===a||r===-1||r<a?null:e.substring(r+1,t)||null}var Bc,Is=(Bc=class{static setXRSession(e){e!==this.session&&(this.flushPending(),this.session=e)}static requestAnimationFrame(e){let{session:t,pending:n}=this,i,r=()=>{n.delete(i),e()};return i=t?t.requestAnimationFrame(r):requestAnimationFrame(r),n.set(i,e),i}static cancelAnimationFrame(e){let{pending:t,session:n}=this;t.delete(e),n?n.cancelAnimationFrame(e):cancelAnimationFrame(e)}static flushPending(){this.pending.forEach((e,t)=>{e(),this.cancelAnimationFrame(t)})}},xu(Bc,"pending",new Map),xu(Bc,"session",null),Bc),Yg=2**30,zs=class{get unloadPriorityCallback(){return this._unloadPriorityCallback}set unloadPriorityCallback(e){e.length===1?(console.warn('LRUCache: "unloadPriorityCallback" function has been changed to take two arguments.'),this._unloadPriorityCallback=(t,n)=>{let i=e(t),r=e(n);return i<r?-1:+(i>r)}):this._unloadPriorityCallback=e}constructor(){this.minSize=6e3,this.maxSize=8e3,this.minBytesSize=.3*Yg,this.maxBytesSize=.4*Yg,this.unloadPercent=.05,this.autoMarkUnused=!0,this.cachedBytes=0,this.itemSet=new Map,this.itemList=[],this.usedSet=new Set,this.callbacks=new Map,this.unloadingHandle=-1,this.bytesMap=new Map,this.loadedSet=new Set,this._unloadPriorityCallback=null;let e=this.itemSet;this.defaultPriorityCallback=t=>e.get(t)}isFull(){return this.itemSet.size>=this.maxSize||this.cachedBytes>=this.maxBytesSize}getMemoryUsage(e){return this.bytesMap.get(e)||0}setMemoryUsage(e,t){let{bytesMap:n,itemSet:i}=this;i.has(e)&&(this.cachedBytes-=n.get(e)||0,n.set(e,t),this.cachedBytes+=t)}add(e,t){let n=this.itemSet;if(n.has(e)||this.isFull())return!1;let i=this.usedSet,r=this.itemList,a=this.callbacks;return r.push(e),i.add(e),n.set(e,Date.now()),a.set(e,t),!0}has(e){return this.itemSet.has(e)}remove(e){let t=this.usedSet,n=this.itemSet,i=this.itemList,r=this.bytesMap,a=this.callbacks,o=this.loadedSet;if(n.has(e)){this.cachedBytes-=r.get(e)||0,r.delete(e),a.get(e)(e);let s=i.indexOf(e);return i.splice(s,1),t.delete(e),n.delete(e),a.delete(e),o.delete(e),!0}return!1}setLoaded(e,t){let{itemSet:n,loadedSet:i}=this;n.has(e)&&(t===!0?i.add(e):i.delete(e))}markUsed(e){let t=this.itemSet,n=this.usedSet;t.has(e)&&!n.has(e)&&(t.set(e,Date.now()),n.add(e))}markUnused(e){this.usedSet.delete(e)}markAllUnused(){this.usedSet.clear()}isUsed(e){return this.usedSet.has(e)}unloadUnusedContent(){let{unloadPercent:e,minSize:t,maxSize:n,itemList:i,itemSet:r,usedSet:a,loadedSet:o,callbacks:s,bytesMap:c,minBytesSize:l,maxBytesSize:u}=this,d=i.length-a.size,p=i.length-o.size,g=Math.max(Math.min(i.length-t,d),0),f=this.cachedBytes-l,v=this.unloadPriorityCallback||this.defaultPriorityCallback,E=!1,S=g>0&&d>0||p&&i.length>n;if(d&&this.cachedBytes>l||p&&this.cachedBytes>u||S){i.sort((m,A)=>{let C=a.has(m);if(C===a.has(A)){let D=o.has(m);return D===o.has(A)?-v(m,A):D?1:-1}else return C?1:-1});let b=Math.max(t*e,g*e),x=Math.ceil(Math.min(b,d,g)),R=Math.max(e*f,e*l),w=Math.min(R,f),P=0,y=0;for(;this.cachedBytes-y>u||i.length-P>n;){let m=i[P],A=c.get(m)||0;if(a.has(m)&&o.has(m)||this.cachedBytes-y-A<u&&i.length-P<=n)break;y+=A,P++}for(;y<w||P<x;){let m=i[P],A=c.get(m)||0;if(a.has(m)||this.cachedBytes-y-A<l&&P>=x)break;y+=A,P++}i.splice(0,P).forEach(m=>{this.cachedBytes-=c.get(m)||0,s.get(m)(m),c.delete(m),r.delete(m),s.delete(m),o.delete(m),a.delete(m)}),E=P<g||y<f&&P<d,E&&(E=P>0)}E&&(this.unloadingHandle=Is.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){Is.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},lw=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},pi=class{get running(){return this.items.length!==0||this.currJobs!==0}constructor(){this.maxJobs=6,this.items=[],this.callbacks=new Map,this.currJobs=0,this.scheduled=!1,this.autoUpdate=!0,this.priorityCallback=null,this._schedulingCallback=e=>{Is.requestAnimationFrame(e)},this._runjobs=()=>{this.scheduled=!1,this.tryRunJobs()}}sort(){let e=this.priorityCallback,t=this.items;e!==null&&t.sort(e)}has(e){return this.callbacks.has(e)}add(e,t){let n={callback:t,reject:null,resolve:null,promise:null};return n.promise=new Promise((i,r)=>{let a=this.items,o=this.callbacks;n.resolve=i,n.reject=r,a.unshift(e),o.set(e,n),this.autoUpdate&&this.scheduleJobRun()}),n.promise}remove(e){let t=this.items,n=this.callbacks,i=t.indexOf(e);if(i!==-1){let r=n.get(e);r.promise.catch(a=>{if(a.name!=="AbortError")throw a}),r.reject(new lw),t.splice(i,1),n.delete(e)}}removeByFilter(e){let{items:t}=this;for(let n=0;n<t.length;n++){let i=t[n];e(i)&&(this.remove(i),n--)}}tryRunJobs(){this.sort();let e=this.items,t=this.callbacks,n=this.maxJobs,i=0,r=()=>{this.currJobs--,this.autoUpdate&&this.scheduleJobRun()};for(;n>this.currJobs&&e.length>0&&i<n;){this.currJobs++,i++;let a=e.pop(),{callback:o,resolve:s,reject:c}=t.get(a);t.delete(a);let l;try{l=o(a)}catch(u){c(u),r();continue}l instanceof Promise?l.then(s).catch(c).finally(r):(s(l),r())}}flush(e){let{items:t,callbacks:n}=this,i=t.indexOf(e);if(!n.has(e))return;let{callback:r,resolve:a,reject:o}=n.get(e);n.delete(e),t.splice(i,1);let s;try{s=r(e)}catch(c){o(c);return}return s instanceof Promise?s.then(a).catch(o):a(s),s}scheduleJobRun(){this.scheduled||(this.scheduled=(this._schedulingCallback(this._runjobs),!0))}},Fc=class{get running(){for(let e of this.originQueues.values())if(e.running)return!0;return!1}get maxJobsPerOrigin(){return this._maxJobsPerOrigin}set maxJobsPerOrigin(e){this._maxJobsPerOrigin=e,this.originQueues.forEach(t=>t.maxJobs=e)}get maxJobs(){return this.maxJobsPerOrigin}set maxJobs(e){console.warn('DownloadPriorityQueue: "maxJobs" is no longer valid and limits jobs per server origin. Use "maxJobsPerOrigin", instead.'),this.maxJobsPerOrigin=e}get priorityCallback(){return this._priorityCallback}set priorityCallback(e){this._priorityCallback=e,this.originQueues.forEach(t=>t.priorityCallback=e)}constructor(){this.originQueues=new Map,this._itemQueues=new WeakMap,this._maxJobsPerOrigin=6,this._priorityCallback=null}add(e,t,n,i=null){this.originQueues.forEach((c,l)=>{c.running||this.originQueues.delete(l)});let r=e===null?null:Zg(e),a=this.originQueues.get(r);a||(a=new pi,a.maxJobs=this._maxJobsPerOrigin,a.priorityCallback=this._priorityCallback,this.originQueues.set(r,a));let o=this._itemQueues.get(t);if(o&&o!==a&&o.has(t))throw Error("DownloadPriorityQueue: Item is already queued with a different url origin.");this._itemQueues.set(t,a);let s=a.add(t,n);return i!==null&&(i.aborted?this.remove(t):i.addEventListener("abort",()=>this.remove(t),{once:!0})),s}remove(e){let t=this._itemQueues.get(e);t&&(t.remove(e),this._itemQueues.delete(e))}has(e){let t=this._itemQueues.get(e);return!!(t&&t.has(e))}};var Pa=6378137,cw=1/298.257223563,sp=6356752314245179e-9,Ic={inView:!1,error:1/0,distanceFromCamera:1/0};function Vc(e){return e===4||e===-1}function Ri(e,t){return jc(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function jc(e){return!!e.traversal}function Us(e){let{children:t}=e,n=t.length===0||jc(t[t.length-1]),i=!e.internal.hasUnrenderableContent||Vc(e.internal.loadingState);return n&&i}function Ca(e){return e.traversal.unconditionallyRefine}function Bs(e,t){if(jc(e)&&(t.ensureChildrenArePreprocessed(e),e.traversal.lastFrameVisited!==t.frameCount&&(e.traversal.wasInFrustum=e.traversal.inFrustum,e.traversal.wasSetActive=e.traversal.active,e.traversal.wasSetVisible=e.traversal.visible,e.traversal.usedLastFrame=e.traversal.used,e.traversal.lastFrameVisited=t.frameCount,e.traversal.used=!1,e.traversal.inFrustum=!1,e.traversal.isLeaf=!1,e.traversal.visible=!1,e.traversal.active=!1,e.traversal.error=1/0,e.traversal.distanceFromCamera=1/0,e.traversal.allChildrenReady=!1,e.traversal.allChildrenLoaded=!1,e.traversal.kicked=!1,e.traversal.allUsedChildrenProcessed=!1,t.calculateTileViewErrorWithPlugin(e,Ic),e.traversal.inFrustum=Ic.inView,e.traversal.error=Ic.error,e.traversal.distanceFromCamera=Ic.distanceFromCamera,e.traversal.unconditionallyRefine=e.internal.hasUnrenderableContent,!e.traversal.unconditionallyRefine))){let n=e.parent;for(;n&&n.traversal.unconditionallyRefine;)n=n.parent;n&&n.geometricError<=e.geometricError&&(e.traversal.unconditionallyRefine=!0)}}function op(e,t,n=!1){if(Bs(e,t),n?t.markTileUsed(e):Oc(e),Ca(e)&&Us(e)){let i=e.children;for(let r=0,a=i.length;r<a;r++)op(i[r],t,n)}}function Jg(e,t){if(Bs(e,t),e.traversal.usedLastFrame&&(Oc(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||Ca(e))&&Us(e))){let n=e.children;for(let i=0,r=n.length;i<r;i++)Jg(n[i],t)}}function Oc(e){e.traversal.used=!0}function dw(e,t){return!(e.traversal.error<=t.errorTarget&&!Ca(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!Us(e))}function Qg(e,t){let{frameCount:n}=t,{children:i}=e;for(let r=0,a=i.length;r<a;r++){let o=i[r];Ri(o,n)&&(o.traversal.active&&(o.traversal.kicked=!0,o.traversal.active=!1),Qg(o,t))}}function $g(e){return!Ca(e)&&(!e.internal.hasContent||Vc(e.internal.loadingState))}function eb(e,t){if(Bs(e,t),!e.traversal.inFrustum)return;let n=e.parent;if(n&&n.refine==="ADD"&&e.geometricError>0&&e.traversal.error*(n.geometricError/e.geometricError)<=t.errorTarget)return;if(!dw(e,t)){Oc(e);return}let i=!1,r=!1,a=e.children;for(let o=0,s=a.length;o<s;o++){let c=a[o];eb(c,t),i||(i=Ri(c,t.frameCount)),r||(r=c.traversal.inFrustum)}if(e.refine==="REPLACE"&&!r&&a.length!==0){e.traversal.inFrustum=!1,t.markTileUsed(e);for(let o=0,s=a.length;o<s;o++)op(a[o],t,!0);return}if(Oc(e),e.refine==="REPLACE"&&i&&(t.loadSiblings||t.loadAncestors))for(let o=0,s=a.length;o<s;o++)op(a[o],t)}function tb(e,t){let n=t.frameCount;if(!Ri(e,n))return;let i=e.children,r=!1;for(let o=0,s=i.length;o<s;o++){let c=i[o];r||(r=Ri(c,n))}if(!r)e.traversal.isLeaf=!0;else{for(let s=0,c=i.length;s<c;s++)tb(i[s],t);let o=!0;for(let s=0,c=i.length;s<c;s++){let l=i[s];if(Ri(l,n)){let u=!Ca(l),d=!l.internal.hasContent||Vc(l.internal.loadingState);u&&d||l.traversal.allChildrenLoaded||(o=!1)}}e.traversal.allChildrenLoaded=o}let a=!0;for(let o=0,s=i.length;o<s;o++){let c=i[o];Ri(c,t.frameCount)&&!c.traversal.allUsedChildrenProcessed&&(a=!1)}e.traversal.allUsedChildrenProcessed=a&&Us(e)}function nb(e,t){if(!Ri(e,t.frameCount))return;let n=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!Ca(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!Ca(e)&&(e.traversal.active=!0,Us(e)&&e.internal.hasContent&&!Vc(e.internal.loadingState)))for(let r=0,a=n.length;r<a;r++)Jg(n[r],t);return}let i=n.length>0;for(let r=0,a=n.length;r<a;r++){let o=n[r];nb(o,t),Ri(o,t.frameCount)&&!(o.traversal.active&&$g(o))&&!o.traversal.allChildrenReady&&(i=!1)}e.traversal.allChildrenReady=i,e.refine==="REPLACE"&&!i&&e.traversal.wasSetActive&&$g(e)&&(e.traversal.active=!0,Qg(e,t))}function rb(e,t){Bs(e,t);let n=Ri(e,t.frameCount);if(n&&(e.internal.hasUnrenderableContent&&(t.markTileUsed(e),t.queueTileForDownload(e)),e.internal.hasRenderableContent&&e.refine==="ADD"&&(e.traversal.active=!0),(e.traversal.active||e.traversal.kicked)&&e.internal.hasContent&&(t.markTileUsed(e),e.traversal.allUsedChildrenProcessed&&t.queueTileForDownload(e),e.internal.loadingState!==4&&(e.traversal.active=!1)),t.loadAncestors&&e.internal.hasContent&&(t.markTileUsed(e),t.queueTileForDownload(e)),e.internal.virtualChildCount>0&&e.internal.hasContent&&t.markTileUsed(e),e.traversal.visible=e.internal.hasRenderableContent&&e.traversal.active&&e.traversal.inFrustum&&e.internal.loadingState===4,t.stats.used++,e.traversal.inFrustum&&t.stats.inFrustum++),n||jc(e)&&e.traversal.usedLastFrame){let i=!1,r=!1;n?(i=e.traversal.active,r=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):Bs(e,t),e.internal.hasRenderableContent&&e.internal.loadingState===4?(i&&t.stats.active++,r&&t.stats.visible++,e.traversal.wasSetActive!==i&&t.invokeOnePlugin(o=>o.setTileActive&&o.setTileActive(e,i)),e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(o=>o.setTileVisible&&o.setTileVisible(e,r))):e.internal.hasRenderableContent||(r=e.traversal.isLeaf,e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(o=>o.setEmptyTileVisible&&o.setEmptyTileVisible(e,r))),e.traversal.visible=r,e.traversal.active=i;let a=e.children;for(let o=0,s=a.length;o<s;o++){let c=a[o];rb(c,t)}}}function uw(e,t){eb(e,t),tb(e,t),nb(e,t),rb(e,t)}function pw(e){let t=null;return()=>{t===null&&(t=Is.requestAnimationFrame(()=>{t=null,e()}))}}function hw(e,t=null,n=null){let i=[];for(i.push(e),i.push(null),i.push(0);i.length>0;){let r=i.pop(),a=i.pop(),o=i.pop();if(t&&t(o,a,r)){n&&n(o,a,r);return}let s=o.children;if(s)for(let c=s.length-1;c>=0;c--)i.push(s[c]),i.push(o),i.push(r+1);n&&n(o,a,r)}}var Kg=Symbol("PLUGIN_REGISTERED"),$i={inView:!0,error:0,distance:1/0},mw=(e,t)=>{let n=e.priority||0,i=t.priority||0;return n===i?!e.traversal||!t.traversal?0:e.traversal.used===t.traversal.used?e.traversal.error===t.traversal.error?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.traversal.error>t.traversal.error?1:-1:e.traversal.used?1:-1:n>i?1:-1},fw=(e,t)=>e.traversal.used===t.traversal.used?e.traversal.inFrustum===t.traversal.inFrustum?e.internal.hasUnrenderableContent===t.internal.hasUnrenderableContent?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.internal.hasUnrenderableContent?1:-1:e.traversal.inFrustum?1:-1:e.traversal.used?1:-1,gw=(e,t)=>e.traversal.lastFrameVisited===t.traversal.lastFrameVisited?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?e.internal.loadingState===t.internal.loadingState?e.internal.hasUnrenderableContent===t.internal.hasUnrenderableContent?e.traversal.error===t.traversal.error?0:e.traversal.error>t.traversal.error?-1:1:e.internal.hasUnrenderableContent?-1:1:e.internal.loadingState>t.internal.loadingState?-1:1:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?1:-1:e.traversal.lastFrameVisited>t.traversal.lastFrameVisited?-1:1,Co=(e,t)=>{let n=e.priority??1/0,i=t.priority??1/0;if(n!==i)return n>i?1:-1;if(!e.internal||!t.internal)return 0;let r=e.internal.renderer,a=t.internal.renderer,o=!r.loadAncestors,s=!a.loadAncestors;return o&&s?fw(e,t):mw(e,t)},lp=new zs;lp.unloadPriorityCallback=gw;var Os=new Fc;Os.maxJobsPerOrigin=25,Os.priorityCallback=Co;var zc=new pi;zc.maxJobs=5,zc.priorityCallback=Co;var Uc=new pi;Uc.maxJobs=25,Uc.priorityCallback=(e,t)=>{let n=e.parent,i=t.parent;return n===i?0:n?i?Co(n,i):-1:1};var cp=class{get root(){let e=this.rootTileset;return e?e.root:null}get loadProgress(){let{stats:e,isLoading:t}=this,n=e.queued+e.downloading+e.parsing,i=e.inCacheSinceLoad+ +!!t;return i===0?1:1-n/i}get downloadQueue(){return this._downloadQueue}set downloadQueue(e){if(e instanceof pi){console.warn('TilesRenderer: "downloadQueue" is no longer valid as a PriorityQueue. Use a DownloadPriorityQueue, instead.');return}this._downloadQueue=e}constructor(e=null){this.rootLoadingState=0,this.rootTileset=null,this.rootURL=e,this.fetchOptions={},this.plugins=[],this.queuedTiles=[],this.cachedSinceLoadComplete=new Set,this.isLoading=!1,this.processedTiles=new WeakSet,this.visibleTiles=new Set,this.activeTiles=new Set,this.usedSet=new Set,this.loadingTiles=new Set,this.lruCache=lp,this.downloadQueue=Os,this.parseQueue=zc,this.processNodeQueue=Uc,this.stats={inCacheSinceLoad:0,inCache:0,queued:0,downloading:0,parsing:0,loaded:0,failed:0,inFrustum:0,used:0,active:0,visible:0,tilesProcessed:0},this.frameCount=0,this._dispatchNeedsUpdateEvent=pw(()=>{this.dispatchEvent({type:"needs-update"})}),this.errorTarget=16,this.errorFalloff=0,this.errorFalloffDensity=2e-4,this.displayActiveTiles=!1,this.maxDepth=1/0,this.loadSiblings=!0,this.loadAncestors=!0,this.maxTilesProcessed=250}registerPlugin(e){if(e[Kg]===!0)throw Error("TilesRendererBase: A plugin can only be registered to a single tileset");let t=this.plugins,n=e.priority||0,i=t.length;for(let r=0;r<t.length;r++)if((t[r].priority||0)>n){i=r;break}t.splice(i,0,e),e[Kg]=!0,e.init&&e.init(this)}unregisterPlugin(e){let t=this.plugins;if(typeof e=="string"&&(e=this.getPluginByName(e)),t.includes(e)){let n=t.indexOf(e);return t.splice(n,1),e.dispose&&e.dispose(),!0}return!1}getPluginByName(e){return this.plugins.find(t=>t.name===e)||null}invokeOnePlugin(e){let t=[...this.plugins,this];for(let n=0;n<t.length;n++){let i=e(t[n]);if(i)return i}return null}invokeAllPlugins(e){let t=[...this.plugins,this],n=[];for(let i=0;i<t.length;i++){let r=e(t[i]);r&&n.push(r)}return n.length===0?null:Promise.all(n)}traverse(e,t,n=!0){this.root&&hw(this.root,(i,...r)=>(n&&this.ensureChildrenArePreprocessed(i,!0),e?e(i,...r):!1),t)}getAttributions(e=[]){return this.invokeAllPlugins(t=>t!==this&&t.getAttributions&&t.getAttributions(e)),e}update(){let{lruCache:e,usedSet:t,stats:n,root:i,downloadQueue:r,parseQueue:a,processNodeQueue:o}=this;if(this.rootLoadingState===0&&(this.rootLoadingState=2,this.invokeOnePlugin(l=>l.loadRootTileset&&l.loadRootTileset()).then(l=>{let u=this.rootURL;u!==null&&this.invokeAllPlugins(d=>u=d.preprocessURL?d.preprocessURL(u,null):u),this.rootLoadingState=4,this.rootTileset=l,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:l,url:u}),this.dispatchEvent({type:"load-root-tileset",tileset:l,url:u})}).catch(l=>{this.rootLoadingState=-1,console.error(l),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:l,url:this.rootURL})})),!i)return;let s=null;if(this.invokeAllPlugins(l=>{if(l.doTilesNeedUpdate){let u=l.doTilesNeedUpdate();s=s===null?u:!!(s||u)}}),s===!1){this.dispatchEvent({type:"update-before"}),this.dispatchEvent({type:"update-after"});return}this.dispatchEvent({type:"update-before"}),n.inFrustum=0,n.used=0,n.active=0,n.visible=0,n.tilesProcessed=0,this.frameCount++,t.forEach(l=>e.markUnused(l)),t.clear(),this.prepareForTraversal(),uw(i,this),this.removeUnusedPendingTiles();let c=this.queuedTiles;c.sort(e.unloadPriorityCallback);for(let l=0,u=c.length;l<u&&!e.isFull();l++)this.requestTileContents(c[l]);c.length=0,e.scheduleUnload(),(r.running||a.running||o.running)===!1&&this.isLoading===!0&&(this.cachedSinceLoadComplete.clear(),n.inCacheSinceLoad=0,this.dispatchEvent({type:"tiles-load-end"}),this.isLoading=!1),this.dispatchEvent({type:"update-after"})}resetFailedTiles(){this.rootLoadingState===-1&&(this.rootLoadingState=0);let e=this.stats;e.failed!==0&&(this.traverse(t=>{t.internal.loadingState===-1&&(t.internal.loadingState=0)},null,!1),e.failed=0)}calculateTileViewErrorWithPlugin(e,t){this.calculateTileViewError(e,t);let{errorFalloff:n,errorFalloffDensity:i}=this;if(n>0&&Number.isFinite(t.distanceFromCamera)){let s=t.distanceFromCamera*i;t.error-=n*(1-Math.exp(-s*s))}let r=null,a=0,o=1/0;this.invokeAllPlugins(s=>{s!==this&&s.calculateTileViewError&&($i.inView=!0,$i.error=0,$i.distance=1/0,s.calculateTileViewError(e,$i)&&(r===null&&(r=!0),r&&(r=$i.inView),$i.inView&&(o=Math.min(o,$i.distance),a=Math.max(a,$i.error))))}),t.inView&&r!==!1?(t.error=Math.max(t.error,a),t.distanceFromCamera=Math.min(t.distanceFromCamera,o)):r?(t.inView=!0,t.error=a,t.distanceFromCamera=o):t.inView=!1}dispose(){[...this.plugins].forEach(n=>{this.unregisterPlugin(n)});let e=this.lruCache,t=[];this.traverse(n=>(t.push(n),!1),null,!1);for(let n=0,i=t.length;n<i;n++)e.remove(t[n]);this.stats={queued:0,parsing:0,downloading:0,failed:0,inFrustum:0,traversed:0,used:0,active:0,visible:0},this.frameCount=0,this.loadingTiles.clear()}calculateBytesUsed(e,t){return 0}dispatchEvent(e){}addEventListener(e,t){}removeEventListener(e,t){}parseTile(e,t,n){return null}prepareForTraversal(){}disposeTile(e){e.traversal.visible&&(e.internal.hasRenderableContent?this.invokeOnePlugin(n=>n.setTileVisible&&n.setTileVisible(e,!1)):this.invokeOnePlugin(n=>n.setEmptyTileVisible&&n.setEmptyTileVisible(e,!1)),e.traversal.visible=!1),e.traversal.active&&e.internal.hasRenderableContent&&this.invokeOnePlugin(n=>n.setTileActive&&n.setTileActive(e,!1)),e.traversal.active=!1;let{scene:t}=e.engineData;t&&this.dispatchEvent({type:"dispose-model",scene:t,tile:e})}preprocessNode(e,t,n=null){if(this.processedTiles.add(e),this.stats.tilesProcessed++,e.content&&(!("uri"in e.content)&&"url"in e.content&&(e.content.uri=e.content.url,delete e.content.url),e.content.boundingVolume&&!("box"in e.content.boundingVolume||"sphere"in e.content.boundingVolume||"region"in e.content.boundingVolume)&&delete e.content.boundingVolume),e.parent=n,e.children=e.children||[],e.internal={hasContent:!1,hasRenderableContent:!1,hasUnrenderableContent:!1,loadingState:0,basePath:t,depth:-1,depthFromRenderedParent:-1,isVirtual:!1,virtualChildCount:0,renderer:this,...e.internal},e.content?.uri){let i=ap(e.content.uri),r=!!(i&&/json$/.test(i));e.internal.hasContent=!0,e.internal.hasUnrenderableContent=r,e.internal.hasRenderableContent=!r}else e.internal.hasContent=!1,e.internal.hasUnrenderableContent=!1,e.internal.hasRenderableContent=!1;n?(e.internal.depth=n.internal.depth+1,e.internal.depthFromRenderedParent=n.internal.depthFromRenderedParent+ +!!e.internal.hasRenderableContent):(e.internal.depth=0,e.internal.depthFromRenderedParent=+!!e.internal.hasRenderableContent),e.traversal={distanceFromCamera:1/0,error:1/0,inFrustum:!1,wasInFrustum:!1,isLeaf:!1,used:!1,usedLastFrame:!1,visible:!1,wasSetVisible:!1,active:!1,wasSetActive:!1,allChildrenReady:!1,allChildrenLoaded:!1,kicked:!1,allUsedChildrenProcessed:!1,lastFrameVisited:-1},n===null?e.refine=e.refine||"REPLACE":e.refine=e.refine||n.refine,e.engineData={scene:null,metadata:null,boundingVolume:null},Object.defineProperty(e,"cached",{get(){return console.warn('TilesRenderer: "tile.cached" field has been renamed to "tile.engineData".'),this.engineData},enumerable:!1,configurable:!0}),this.invokeAllPlugins(i=>{i!==this&&i.preprocessNode&&i.preprocessNode(e,t,n)})}setTileActive(e,t){t?this.activeTiles.add(e):this.activeTiles.delete(e)}setTileVisible(e,t){t?this.visibleTiles.add(e):this.visibleTiles.delete(e),this.dispatchEvent({type:"tile-visibility-change",scene:e.engineData.scene,tile:e,visible:t})}calculateTileViewError(e,t){}removeUnusedPendingTiles(){let{lruCache:e,loadingTiles:t}=this,n=[];for(let i of t)!e.isUsed(i)&&i.internal.loadingState===1&&n.push(i);for(let i=0;i<n.length;i++)e.remove(n[i])}queueTileForDownload(e){e.internal.loadingState!==0||this.lruCache.isFull()||this.queuedTiles.push(e)}markTileUsed(e){this.usedSet.add(e),this.lruCache.markUsed(e)}fetchData(e,t){return fetch(e,t)}ensureChildrenArePreprocessed(e,t=this.stats.tilesProcessed<this.maxTilesProcessed){let n=e.children;if(n.length===0||n[n.length-1].traversal)return;let i=r=>{for(let a=0,o=r.length;a<o;a++){let s=r[a];s&&!s.traversal&&this.preprocessNode(s,e.internal.basePath,e)}};t?(this.processNodeQueue.remove(e),i(n)):this.processNodeQueue.has(e)||this.processNodeQueue.add(e,r=>{i(r.children),this._dispatchNeedsUpdateEvent()})}getBytesUsed(e){let t=0;return this.invokeAllPlugins(n=>{n.calculateBytesUsed&&(t+=n.calculateBytesUsed(e,e.engineData.scene)||0)}),t}recalculateBytesUsed(e=null){let{lruCache:t,processedTiles:n}=this;e===null?t.itemSet.forEach(i=>{n.has(i)&&t.setMemoryUsage(i,this.getBytesUsed(i))}):t.setMemoryUsage(e,this.getBytesUsed(e))}preprocessTileset(e,t,n=null){let[i,r]=e.asset.version.split(".").map(o=>parseInt(o));console.assert(i<=1,"TilesRenderer: asset.version is expected to be a 1.x or a compatible version."),i===1&&r>0&&console.warn("TilesRenderer: tiles versions at 1.1 or higher have limited support. Some new extensions and features may not be supported.");let a=t.replace(/\/[^/]*$/,"");a=new URL(a,window.location.href).toString(),this.preprocessNode(e.root,a,n)}loadRootTileset(){let e=this.rootURL;return this.invokeAllPlugins(t=>e=t.preprocessURL?t.preprocessURL(e,null):e),this.invokeOnePlugin(t=>t.fetchData&&t.fetchData(e,this.fetchOptions)).then(t=>{if(!(t instanceof Response))return t;if(t.ok)return t.json();throw Error(`TilesRenderer: Failed to load tileset "${e}" with status ${t.status} : ${t.statusText}`)}).then(t=>(this.preprocessTileset(t,e),t))}requestTileContents(e){if(e.internal.loadingState!==0)return;let t=!1,n=null,i=new URL(e.content.uri,e.internal.basePath+"/").toString();this.invokeAllPlugins(p=>i=p.preprocessURL?p.preprocessURL(i,e):i);let r=this.stats,a=this.lruCache,o=this.downloadQueue,s=this.parseQueue,c=this.loadingTiles,l=ap(i),u=new AbortController,d=u.signal;if(a.add(e,p=>{u.abort(),t?p.children.length=0:this.invokeAllPlugins(g=>{g.disposeTile&&g.disposeTile(p)}),r.inCache--,this.cachedSinceLoadComplete.has(e)&&(this.cachedSinceLoadComplete.delete(e),r.inCacheSinceLoad--),p.internal.loadingState===1?r.queued--:p.internal.loadingState===2?r.downloading--:p.internal.loadingState===3?r.parsing--:p.internal.loadingState===4&&r.loaded--,p.internal.loadingState=0,s.remove(p),o.remove(p),c.delete(p)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),a.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),r.inCacheSinceLoad++,r.inCache++,r.queued++,e.internal.loadingState=1,c.add(e),o.add(i,e,p=>{if(d.aborted)return Promise.resolve();e.internal.loadingState=2,r.downloading++,r.queued--;let g=this.invokeOnePlugin(f=>f.fetchData&&f.fetchData(i,{...this.fetchOptions,signal:d}));return this.dispatchEvent({type:"tile-download-start",tile:e,url:i,get uri(){return console.warn('tile-download-start event: "uri" has been renamed to "url".'),this.url}}),g}).then(p=>{if(!d.aborted){if(!(p instanceof Response))return p;if(p.ok)return l==="json"?p.json():p.arrayBuffer();throw Error(`Failed to load model with error code ${p.status}`)}}).then(p=>{if(!d.aborted)return r.downloading--,r.parsing++,e.internal.loadingState=3,s.add(e,g=>d.aborted?Promise.resolve():l==="json"&&p.root?(this.preprocessTileset(p,i,e),e.children.push(p.root),n=p,t=!0,Promise.resolve()):this.invokeOnePlugin(f=>f.parseTile&&f.parseTile(p,g,l,i,d)))}).then(()=>{if(d.aborted)return;r.parsing--,r.loaded++,e.internal.loadingState=4,c.delete(e),a.setLoaded(e,!0);let p=this.getBytesUsed(e);if(a.getMemoryUsage(e)===0&&p>0&&a.isFull()){a.remove(e);return}a.setMemoryUsage(e,p),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:n,url:i}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:i})}).catch(p=>{d.aborted||(p.name==="AbortError"?a.remove(e):(s.remove(e),o.remove(e),e.internal.loadingState===1?r.queued--:e.internal.loadingState===2?r.downloading--:e.internal.loadingState===3?r.parsing--:e.internal.loadingState===4&&r.loaded--,r.failed++,console.error(`TilesRenderer : Failed to load tile at url "${e.content.uri}".`),console.error(p),e.internal.loadingState=-1,c.delete(e),a.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:p,url:i})))})}};function Ta(e){if(e===null||e.byteLength<4)return"";let t;if(t=e instanceof DataView?e:new DataView(e),String.fromCharCode(t.getUint8(0))==="{")return null;let n="";for(let i=0;i<4;i++)n+=String.fromCharCode(t.getUint8(i));return n}var bw=new TextDecoder;function ib(e){return bw.decode(e)}function Hc(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var To=class{constructor(){this.fetchOptions={},this.workingPath=""}loadAsync(e){return fetch(e,this.fetchOptions).then(t=>{if(!t.ok)throw Error(`Failed to load file "${e}" with status ${t.status} : ${t.statusText}`);return t.arrayBuffer()}).then(t=>(this.workingPath===""&&(this.workingPath=Hc(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function dp(e,t,n,i,r,a){let o;switch(i){case"SCALAR":o=1;break;case"VEC2":o=2;break;case"VEC3":o=3;break;case"VEC4":o=4;break;default:throw Error(`FeatureTable : Feature type not provided for "${a}".`)}let s,c=n*o;switch(r){case"BYTE":s=new Int8Array(e,t,c);break;case"UNSIGNED_BYTE":s=new Uint8Array(e,t,c);break;case"SHORT":s=new Int16Array(e,t,c);break;case"UNSIGNED_SHORT":s=new Uint16Array(e,t,c);break;case"INT":s=new Int32Array(e,t,c);break;case"UNSIGNED_INT":s=new Uint32Array(e,t,c);break;case"FLOAT":s=new Float32Array(e,t,c);break;case"DOUBLE":s=new Float64Array(e,t,c);break;default:throw Error(`FeatureTable : Feature component type not provided for "${a}".`)}return s}var Fs=class{constructor(e,t,n,i){this.buffer=e,this.binOffset=t+n,this.binLength=i;let r=null;if(n!==0){let a=new Uint8Array(e,t,n);r=JSON.parse(ib(a))}else r={};this.header=r}getKeys(){return Object.keys(this.header).filter(e=>e!=="extensions")}getData(e,t,n=null,i=null){let r=this.header;if(!(e in r))return null;let a=r[e];if(!(a instanceof Object)||Array.isArray(a))return a;{let{buffer:o,binOffset:s,binLength:c}=this,l=a.byteOffset||0,u=a.type||i,d=a.componentType||n;if("type"in a&&i&&a.type!==i)throw Error("FeatureTable: Specified type does not match expected type.");let p=s+l,g=dp(o,p,t,u,d,e);if(p+g.byteLength>s+c)throw Error("FeatureTable: Feature data read outside binary body length.");return g}}getBuffer(e,t){let{buffer:n,binOffset:i}=this;return n.slice(i+e,i+e+t)}},vw=class{constructor(e){this.batchTable=e;let t=e.header.extensions["3DTILES_batch_table_hierarchy"];this.classes=t.classes;for(let i of this.classes){let r=i.instances;for(let a in r)i.instances[a]=this._parseProperty(r[a],i.length,a)}if(this.instancesLength=t.instancesLength,this.classIds=this._parseProperty(t.classIds,this.instancesLength,"classIds"),t.parentCounts?this.parentCounts=this._parseProperty(t.parentCounts,this.instancesLength,"parentCounts"):this.parentCounts=Array(this.instancesLength).fill(1),t.parentIds){let i=this.parentCounts.reduce((r,a)=>r+a,0);this.parentIds=this._parseProperty(t.parentIds,i,"parentIds")}else this.parentIds=null;this.instancesIds=[];let n={};for(let i of this.classIds)n[i]=n[i]??0,this.instancesIds.push(n[i]),n[i]++}_parseProperty(e,t,n){if(Array.isArray(e))return e;{let{buffer:i,binOffset:r}=this.batchTable,a=e.byteOffset,o=e.componentType||"UNSIGNED_SHORT";return dp(i,r+a,t,"SCALAR",o,n)}}getDataFromId(e,t={}){let n=this.parentCounts[e];if(this.parentIds&&n>0){let s=0;for(let c=0;c<e;c++)s+=this.parentCounts[c];for(let c=0;c<n;c++){let l=this.parentIds[s+c];l!==e&&this.getDataFromId(l,t)}}let i=this.classIds[e],r=this.classes[i].instances,a=this.classes[i].name,o=this.instancesIds[e];for(let s in r)t[a]=t[a]||{},t[a][s]=r[s][o];return t}},Gc=class extends Fs{constructor(e,t,n,i,r){super(e,n,i,r),this.count=t,this.extensions={};let a=this.header.extensions;a&&a["3DTILES_batch_table_hierarchy"]&&(this.extensions["3DTILES_batch_table_hierarchy"]=new vw(this))}getDataFromId(e,t={}){if(e<0||e>=this.count)throw Error(`BatchTable: id value "${e}" out of bounds for "${this.count}" features number.`);for(let n of this.getKeys())t[n]=super.getData(n,this.count)[e];for(let n in this.extensions){let i=this.extensions[n];i.getDataFromId instanceof Function&&(t[n]=t[n]||{},i.getDataFromId(e,t[n]))}return t}getPropertyArray(e){return super.getData(e,this.count)}},up=class extends To{parse(e){let t=new DataView(e),n=Ta(t);console.assert(n==="b3dm");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new Fs(e.slice(28,28+a+o),0,a,o),u=28+a+o,d=new Gc(e.slice(u,u+s+c),l.getData("BATCH_LENGTH"),0,s,c),p=u+s+c;return{version:i,featureTable:l,batchTable:d,glbBytes:new Uint8Array(e,p,r-p)}}},pp=class extends To{parse(e){let t=new DataView(e),n=Ta(t);console.assert(n==="i3dm");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=t.getUint32(28,!0),u=new Fs(e.slice(32,32+a+o),0,a,o),d=32+a+o,p=new Gc(e.slice(d,d+s+c),u.getData("INSTANCES_LENGTH"),0,s,c),g=d+s+c,f=new Uint8Array(e,g,r-g),v=null,E=null,S=null;if(l)v=f,E=Promise.resolve();else{let b=this.resolveExternalURL(ib(f));S=Hc(b),E=fetch(b,this.fetchOptions).then(x=>{if(!x.ok)throw Error(`I3DMLoaderBase : Failed to load file "${b}" with status ${x.status} : ${x.statusText}`);return x.arrayBuffer()}).then(x=>{v=new Uint8Array(x)})}return E.then(()=>({version:i,featureTable:u,batchTable:p,glbBytes:v,gltfWorkingPath:S}))}},hp=class extends To{parse(e){let t=new DataView(e),n=Ta(t);console.assert(n==="pnts");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new Fs(e.slice(28,28+a+o),0,a,o),u=28+a+o,d=new Gc(e.slice(u,u+s+c),l.getData("BATCH_LENGTH")||l.getData("POINTS_LENGTH"),0,s,c);return Promise.resolve({version:i,featureTable:l,batchTable:d})}},mp=class extends To{parse(e){let t=new DataView(e),n=Ta(t);console.assert(n==="cmpt",'CMPTLoader: The magic bytes equal "cmpt".');let i=t.getUint32(4,!0);console.assert(i===1,'CMPTLoader: The version listed in the header is "1".');let r=t.getUint32(8,!0);console.assert(r===e.byteLength,"CMPTLoader: The contents buffer length listed in the header matches the file.");let a=t.getUint32(12,!0),o=[],s=16;for(let c=0;c<a;c++){let l=new DataView(e,s,12),u=Ta(l),d=l.getUint32(4,!0),p=l.getUint32(8,!0),g=new Uint8Array(e,s,p);o.push({type:u,buffer:g,version:d}),s+=p}return{version:i,tiles:o}}};var j=require("three"),Qc=require("three/addons/loaders/GLTFLoader.js"),yb=require("three/addons/utils/BufferGeometryUtils.js"),Mp=class extends up{constructor(e=j.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new j.Matrix4}parse(e){let t=super.parse(e),n=t.glbBytes.slice().buffer;return new Promise((i,r)=>{let a=this.manager,o=this.fetchOptions,s=a.getHandler("path.gltf")||new Qc.GLTFLoader(a);o.credentials==="include"&&o.mode==="cors"&&s.setCrossOrigin("use-credentials"),"credentials"in o&&s.setWithCredentials(o.credentials==="include"),o.headers&&s.setRequestHeader(o.headers);let c=this.workingPath;!/[\\/]$/.test(c)&&c.length&&(c+="/");let l=this.adjustmentTransform;s.parse(n,c,u=>{let{batchTable:d,featureTable:p}=t,{scene:g}=u,f=p.getData("RTC_CENTER",1,"FLOAT","VEC3");f&&(g.position.x+=f[0],g.position.y+=f[1],g.position.z+=f[2]),u.scene.updateMatrix(),u.scene.matrix.multiply(l),u.scene.matrix.decompose(u.scene.position,u.scene.quaternion,u.scene.scale),u.batchTable=d,u.featureTable=p,g.batchTable=d,g.featureTable=p,i(u)},r)})}};function xw(e){let t=e>>11,n=e>>5&63,i=e&31;return[Math.round(t/31*255),Math.round(n/63*255),Math.round(i/31*255)]}var Vs=new j.Vector2;function yw(e,t,n=new j.Vector3){Vs.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),n.set(Vs.x,Vs.y,1-Math.abs(Vs.x)-Math.abs(Vs.y));let i=j.MathUtils.clamp(-n.z,0,1);return n.x>=0?n.setX(n.x-i):n.setX(n.x+i),n.y>=0?n.setY(n.y-i):n.setY(n.y+i),n.normalize(),n}var ab={RGB:"color",POSITION:"position"},Cp=class extends hp{constructor(e=j.DefaultLoadingManager){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:n,batchTable:i}=t,r=new j.PointsMaterial,a=n.header.extensions,o=new j.Vector3,s;if(a&&a["3DTILES_draco_point_compression"]){let{byteOffset:u,byteLength:d,properties:p}=a["3DTILES_draco_point_compression"],g=this.manager.getHandler("draco.drc");if(g==null)throw Error("PNTSLoader: dracoLoader not available.");let f={};for(let S in p)if(S in ab&&S in p){let b=ab[S];f[b]=p[S]}let v={attributeIDs:f,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},E=n.getBuffer(u,d);s=await g.decodeGeometry(E,v),s.attributes.color&&(r.vertexColors=!0)}else{let u=n.getData("POINTS_LENGTH"),d=n.getData("POSITION",u,"FLOAT","VEC3"),p=n.getData("NORMAL",u,"FLOAT","VEC3"),g=n.getData("NORMAL",u,"UNSIGNED_BYTE","VEC2"),f=n.getData("RGB",u,"UNSIGNED_BYTE","VEC3"),v=n.getData("RGBA",u,"UNSIGNED_BYTE","VEC4"),E=n.getData("RGB565",u,"UNSIGNED_SHORT","SCALAR"),S=n.getData("CONSTANT_RGBA",u,"UNSIGNED_BYTE","VEC4"),b=n.getData("POSITION_QUANTIZED",u,"UNSIGNED_SHORT","VEC3"),x=n.getData("QUANTIZED_VOLUME_SCALE",u,"FLOAT","VEC3"),R=n.getData("QUANTIZED_VOLUME_OFFSET",u,"FLOAT","VEC3");if(s=new j.BufferGeometry,b){let w=new Float32Array(u*3);for(let P=0;P<u;P++)for(let y=0;y<3;y++){let m=3*P+y;w[m]=b[m]/65535*x[y]}o.x=R[0],o.y=R[1],o.z=R[2],s.setAttribute("position",new j.BufferAttribute(w,3,!1))}else s.setAttribute("position",new j.BufferAttribute(d,3,!1));if(p!==null)s.setAttribute("normal",new j.BufferAttribute(p,3,!1));else if(g!==null){let w=new Float32Array(u*3),P=new j.Vector3;for(let y=0;y<u;y++){let m=g[y*2],A=g[y*2+1],C=yw(m,A,P);w[y*3]=C.x,w[y*3+1]=C.y,w[y*3+2]=C.z}s.setAttribute("normal",new j.BufferAttribute(w,3,!1))}if(v!==null)s.setAttribute("color",new j.BufferAttribute(v,4,!0)),r.vertexColors=!0,r.transparent=!0,r.depthWrite=!1;else if(f!==null)s.setAttribute("color",new j.BufferAttribute(f,3,!0)),r.vertexColors=!0;else if(E!==null){let w=new Uint8Array(u*3);for(let P=0;P<u;P++){let y=xw(E[P]);for(let m=0;m<3;m++){let A=3*P+m;w[A]=y[m]}}s.setAttribute("color",new j.BufferAttribute(w,3,!0)),r.vertexColors=!0}else if(S!==null){r.color=new j.Color(S[0],S[1],S[2]);let w=S[3]/255;w<1&&(r.opacity=w,r.transparent=!0,r.depthWrite=!1)}}let c=new j.Points(s,r);c.position.copy(o),t.scene=c,t.scene.featureTable=n,t.scene.batchTable=i;let l=n.getData("RTC_CENTER",1,"FLOAT","VEC3");return l&&(t.scene.position.x+=l[0],t.scene.position.y+=l[1],t.scene.position.z+=l[2]),t})}};function ww(e){let{x:t,y:n,z:i}=e;e.x=i,e.y=t,e.z=n}function _w(e){return-e+Math.PI/2}var ob=new j.Spherical,Ki=new j.Vector3,qn=new j.Vector3,fp=new j.Vector3,Pr=new j.Matrix4,hi=new j.Matrix4,gp=new j.Sphere,Qn=new j.Euler,sb=new j.Vector3,lb=new j.Vector3,cb=new j.Vector3,js=new j.Vector3,Wc=new j.Ray,Sw=1e-12,Mw=.1;var Tp=class{constructor(e=1,t=1,n=1){this.name="",this.radius=new j.Vector3(e,t,n)}intersectRay(e,t){return Pr.makeScale(...this.radius).invert(),gp.center.set(0,0,0),gp.radius=1,Wc.copy(e).applyMatrix4(Pr),Wc.intersectSphere(gp,t)?(Pr.makeScale(...this.radius),t.applyMatrix4(Pr),t):null}getEastNorthUpFrame(e,t,n,i){return n.isMatrix4&&(i=n,n=0,console.warn('Ellipsoid: The signature for "getEastNorthUpFrame" has changed.')),this.getEastNorthUpAxes(e,t,sb,lb,cb),this.getCartographicToPosition(e,t,n,js),i.makeBasis(sb,lb,cb).setPosition(js)}getOrientedEastNorthUpFrame(e,t,n,i,r,a,o){return this.getObjectFrame(e,t,n,i,r,a,o,0)}getObjectFrame(e,t,n,i,r,a,o,s=2){return this.getEastNorthUpFrame(e,t,n,Pr),Qn.set(r,a,-i,"ZXY"),o.makeRotationFromEuler(Qn).premultiply(Pr),s===1?(Qn.set(Math.PI/2,0,0,"XYZ"),hi.makeRotationFromEuler(Qn),o.multiply(hi)):s===2&&(Qn.set(-Math.PI/2,0,Math.PI,"XYZ"),hi.makeRotationFromEuler(Qn),o.multiply(hi)),o}getCartographicFromObjectFrame(e,t,n=2){return n===1?(Qn.set(-Math.PI/2,0,0,"XYZ"),hi.makeRotationFromEuler(Qn).premultiply(e)):n===2?(Qn.set(-Math.PI/2,0,Math.PI,"XYZ"),hi.makeRotationFromEuler(Qn).premultiply(e)):hi.copy(e),js.setFromMatrixPosition(hi),this.getPositionToCartographic(js,t),this.getEastNorthUpFrame(t.lat,t.lon,0,Pr).invert(),hi.premultiply(Pr),Qn.setFromRotationMatrix(hi,"ZXY"),t.azimuth=-Qn.z,t.elevation=Qn.x,t.roll=Qn.y,t}getEastNorthUpAxes(e,t,n,i,r,a=js){this.getCartographicToPosition(e,t,0,a),this.getCartographicToNormal(e,t,r),n.set(-a.y,a.x,0).normalize(),i.crossVectors(r,n).normalize()}getCartographicToPosition(e,t,n,i){this.getCartographicToNormal(e,t,Ki);let r=this.radius;qn.copy(Ki),qn.x*=r.x**2,qn.y*=r.y**2,qn.z*=r.z**2;let a=Math.sqrt(Ki.dot(qn));return qn.divideScalar(a),i.copy(qn).addScaledVector(Ki,n)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,qn),this.getPositionToNormal(qn,Ki);let n=fp.subVectors(e,qn);return t.lon=Math.atan2(Ki.y,Ki.x),t.lat=Math.asin(Ki.z),t.height=Math.sign(n.dot(e))*n.length(),t}getCartographicToNormal(e,t,n){return ob.set(1,_w(e),t),n.setFromSpherical(ob).normalize(),ww(n),n}getPositionToNormal(e,t){let n=this.radius;return t.copy(e),t.x/=n.x**2,t.y/=n.y**2,t.z/=n.z**2,t.normalize(),t}getPositionToSurfacePoint(e,t){let n=this.radius,i=1/n.x**2,r=1/n.y**2,a=1/n.z**2,o=e.x*e.x*i,s=e.y*e.y*r,c=e.z*e.z*a,l=o+s+c,u=Math.sqrt(1/l),d=qn.copy(e).multiplyScalar(u);if(l<Mw)return isFinite(u)?t.copy(d):null;let p=fp.set(d.x*i*2,d.y*r*2,d.z*a*2),g=(1-u)*e.length()/(.5*p.length()),f=0,v,E,S,b,x,R,w,P,y,m,A;do{g-=f,S=1/(1+g*i),b=1/(1+g*r),x=1/(1+g*a),R=S*S,w=b*b,P=x*x,y=R*S,m=w*b,A=P*x,v=o*R+s*w+c*P-1,E=o*y*i+s*m*r+c*A*a;let C=-2*E;f=v/C}while(Math.abs(v)>Sw);return t.set(e.x*S,e.y*b,e.z*x)}calculateHorizonDistance(e,t){let n=this.calculateEffectiveRadius(e);return Math.sqrt(2*n*t+t**2)}calculateEffectiveRadius(e){let t=this.radius.x,n=1-this.radius.z**2/t**2,i=e*j.MathUtils.DEG2RAD,r=Math.sin(i)**2;return t/Math.sqrt(1-n*r)}getPositionElevation(e){this.getPositionToSurfacePoint(e,qn);let t=fp.subVectors(e,qn);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(Pr.makeScale(...this.radius).invert(),Wc.copy(e).applyMatrix4(Pr),qn.set(0,0,0),Wc.closestPointToPoint(qn,t).normalize(),Pr.makeScale(...this.radius),t.applyMatrix4(Pr))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},qs=new Tp(Pa,Pa,sp);qs.name="WGS84 Earth";var Xc=new j.Vector3,Po=new j.Vector3,Ao=new j.Vector3,bp=new j.Vector3,qc=new j.Quaternion,Yc=new j.Vector3,Eo=new j.Matrix4,db=new j.Matrix4,ub=new j.Vector3,pb=new j.Matrix4,vp=new j.Quaternion,xp={};function hb(e,t,n,i){if(e=e/n*2-1,t=t/n*2-1,i.x=e,i.y=t,i.z=1-Math.abs(e)-Math.abs(t),i.z<0){let r=i.x;i.x=(1-Math.abs(i.y))*(r>=0?1:-1),i.y=(1-Math.abs(r))*(i.y>=0?1:-1)}return i.normalize(),i}var Pp=class extends pp{constructor(e=j.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new j.Matrix4,this.ellipsoid=qs.clone()}resolveExternalURL(e){return this.manager.resolveURL(super.resolveExternalURL(e))}parse(e){return super.parse(e).then(t=>{let{featureTable:n,batchTable:i}=t,r=t.glbBytes.slice().buffer;return new Promise((a,o)=>{let s=this.fetchOptions,c=this.manager,l=c.getHandler("path.gltf")||new Qc.GLTFLoader(c);s.credentials==="include"&&s.mode==="cors"&&l.setCrossOrigin("use-credentials"),"credentials"in s&&l.setWithCredentials(s.credentials==="include"),s.headers&&l.setRequestHeader(s.headers);let u=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(u)||(u+="/");let d=this.adjustmentTransform;l.parse(r,u,p=>{let g=n.getData("INSTANCES_LENGTH"),f=n.getData("POSITION",g,"FLOAT","VEC3"),v=n.getData("POSITION_QUANTIZED",g,"UNSIGNED_SHORT","VEC3"),E=n.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),S=n.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),b=n.getData("NORMAL_UP",g,"FLOAT","VEC3"),x=n.getData("NORMAL_RIGHT",g,"FLOAT","VEC3"),R=n.getData("NORMAL_UP_OCT32P",g,"UNSIGNED_SHORT","VEC2"),w=n.getData("NORMAL_RIGHT_OCT32P",g,"UNSIGNED_SHORT","VEC2"),P=n.getData("SCALE_NON_UNIFORM",g,"FLOAT","VEC3"),y=n.getData("SCALE",g,"FLOAT","SCALAR"),m=n.getData("RTC_CENTER",1,"FLOAT","VEC3"),A=n.getData("EAST_NORTH_UP");if(!f&&v){f=new Float32Array(g*3);for(let k=0;k<g;k++)f[k*3+0]=E[0]+v[k*3+0]/65535*S[0],f[k*3+1]=E[1]+v[k*3+1]/65535*S[1],f[k*3+2]=E[2]+v[k*3+2]/65535*S[2]}let C=new j.Vector3;for(let k=0;k<g;k++)C.x+=f[k*3+0]/g,C.y+=f[k*3+1]/g,C.z+=f[k*3+2]/g;let D=[],$=[];p.scene.updateMatrixWorld(),p.scene.traverse(k=>{if(k.isMesh){$.push(k);let{geometry:X,material:O}=k,H=new j.InstancedMesh(X,O,g);H.position.copy(C),m&&(H.position.x+=m[0],H.position.y+=m[1],H.position.z+=m[2]),D.push(H)}});for(let k=0;k<g;k++){bp.set(f[k*3+0]-C.x,f[k*3+1]-C.y,f[k*3+2]-C.z),qc.identity(),b&&x?(Po.set(b[k*3+0],b[k*3+1],b[k*3+2]),Ao.set(x[k*3+0],x[k*3+1],x[k*3+2]),Xc.crossVectors(Ao,Po).normalize(),Eo.makeBasis(Ao,Po,Xc),qc.setFromRotationMatrix(Eo)):R&&w&&(hb(R[k*2+0],R[k*2+1],65535,Po),hb(w[k*2+0],w[k*2+1],65535,Ao),Xc.crossVectors(Ao,Po).normalize(),Eo.makeBasis(Ao,Po,Xc),qc.setFromRotationMatrix(Eo)),Yc.set(1,1,1),P&&Yc.set(P[k*3+0],P[k*3+1],P[k*3+2]),y&&Yc.multiplyScalar(y[k]);for(let X=0,O=D.length;X<O;X++){let H=D[X];vp.copy(qc),A&&(H.updateMatrixWorld(),ub.copy(bp).applyMatrix4(H.matrixWorld),this.ellipsoid.getPositionToCartographic(ub,xp),this.ellipsoid.getEastNorthUpFrame(xp.lat,xp.lon,pb),vp.setFromRotationMatrix(pb)),Eo.compose(bp,vp,Yc).multiply(d);let B=$[X];db.multiplyMatrices(Eo,B.matrixWorld),H.setMatrixAt(k,db)}}p.scene.clear(),p.scene.add(...D),p.batchTable=i,p.featureTable=n,p.scene.batchTable=i,p.scene.featureTable=n,a(p)},o)})})}},wb=class extends mp{constructor(e=j.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new j.Matrix4,this.ellipsoid=qs.clone()}parse(e){let t=super.parse(e),{manager:n,ellipsoid:i,adjustmentTransform:r}=this,a=[];for(let o in t.tiles){let{type:s,buffer:c}=t.tiles[o];switch(s){case"b3dm":{let l=c.slice(),u=new Mp(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.adjustmentTransform.copy(r);let d=u.parse(l.buffer);a.push(d);break}case"pnts":{let l=c.slice(),u=new Cp(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions;let d=u.parse(l.buffer);a.push(d);break}case"i3dm":{let l=c.slice(),u=new Pp(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.ellipsoid.copy(i),u.adjustmentTransform.copy(r);let d=u.parse(l.buffer);a.push(d);break}}}return Promise.all(a).then(o=>{let s=new j.Group;return o.forEach(c=>{s.add(c.scene)}),{tiles:o,scene:s}})}},Hs=new j.Matrix4,Cw=class extends j.Group{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new j.Matrix4}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?Hs.copy(this.matrix):Hs.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=Hs.elements,n=this.matrixWorld.elements,i=!1;for(let r=0;r<16;r++){let a=t[r],o=n[r];if(Math.abs(a-o)>2**-52){i=!0;break}}if(i){this.matrixWorld.copy(Hs),this.matrixWorldInverse.copy(Hs).invert();let r=this.children;for(let c=0,l=r.length;c<l;c++)r[c].updateMatrixWorld();let{tilesRenderer:a}=this,{activeTiles:o,visibleTiles:s}=a;o.forEach(c=>{s.has(c)||c.engineData.scene.updateMatrixWorld(!0)})}}}updateWorldMatrix(e,t){this.parent&&e&&this.parent.updateWorldMatrix(e,!1),this.updateMatrixWorld(!0)}},Tw=new j.Ray;function Pw(e,t,n,i){let{scene:r}=e.engineData;n.invokeOnePlugin(a=>a.raycastTile&&a.raycastTile(e,r,t,i))||t.intersectObject(r,!0,i)}function Aw(e){return"traversal"in e}function _b(e,t,n,i,r=null){if(!Aw(t))return;let{group:a,activeTiles:o}=e,{boundingVolume:s}=t.engineData;if(r===null&&(r=Tw,r.copy(n.ray).applyMatrix4(a.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(r))return;o.has(t)&&Pw(t,n,e,i);let c=t.children;for(let l=0,u=c.length;l<u;l++)_b(e,c[l],n,i,r)}var $c=new j.Vector3,Kc=new j.Vector3,er=new j.Vector3,Zc=new j.Ray,_p=class{constructor(e=new j.Box3,t=new j.Matrix4){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new j.Matrix4,this.points=Array(8).fill().map(()=>new j.Vector3),this.planes=[,,,,,,].fill().map(()=>new j.Plane)}copy(e){return this.box.copy(e.box),this.transform.copy(e.transform),this.update(),this}clone(){return new this.constructor().copy(this)}clampPoint(e,t){return t.copy(e).applyMatrix4(this.inverseTransform).clamp(this.box.min,this.box.max).applyMatrix4(this.transform)}distanceToPoint(e){return this.clampPoint(e,er).distanceTo(e)}containsPoint(e){return er.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(er)}intersectsRay(e){return Zc.copy(e).applyMatrix4(this.inverseTransform),Zc.intersectsBox(this.box)}intersectRay(e,t){return Zc.copy(e).applyMatrix4(this.inverseTransform),Zc.intersectBox(this.box,t)?(t.applyMatrix4(this.transform),t):null}update(){let{points:e,inverseTransform:t,transform:n,box:i}=this;t.copy(n).invert();let{min:r,max:a}=i,o=0;for(let s=-1;s<=1;s+=2)for(let c=-1;c<=1;c+=2)for(let l=-1;l<=1;l+=2)e[o].set(s<0?r.x:a.x,c<0?r.y:a.y,l<0?r.z:a.z).applyMatrix4(n),o++;this.updatePlanes()}updatePlanes(){$c.copy(this.box.min).applyMatrix4(this.transform),Kc.copy(this.box.max).applyMatrix4(this.transform),er.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(er,$c),this.planes[1].setFromNormalAndCoplanarPoint(er,Kc).negate(),er.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(er,$c),this.planes[3].setFromNormalAndCoplanarPoint(er,Kc).negate(),er.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(er,$c),this.planes[5].setFromNormalAndCoplanarPoint(er,Kc).negate()}intersectsSphere(e){return this.clampPoint(e.center,er),er.distanceToSquared(e.center)<=e.radius*e.radius}intersectsFrustum(e){return this._intersectsPlaneShape(e.planes,e.points)}intersectsOBB(e){return this._intersectsPlaneShape(e.planes,e.points)}_intersectsPlaneShape(e,t){let n=this.points,i=this.planes;for(let r=0;r<6;r++){let a=e[r],o=-1/0;for(let s=0;s<8;s++){let c=n[s],l=a.distanceToPoint(c);o=o<l?l:o}if(o<0)return!1}for(let r=0;r<6;r++){let a=i[r],o=-1/0;for(let s=0;s<8;s++){let c=t[s],l=a.distanceToPoint(c);o=o<l?l:o}if(o<0)return!1}return!0}},Xs=Math.PI,yp=Xs/2,Gs=new j.Vector3,Aa=new j.Vector3,Yr=new j.Vector3,Ae=new j.Vector3,Yn=new j.Matrix4,Ew=new j.Box3,mb=new j.Matrix4;function Zi(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function fb(e){return e.x!==e.y}var Sb=class extends Tp{constructor(e=1,t=1,n=1,i=-yp,r=yp,a=0,o=2*Xs,s=0,c=0){super(e,t,n),this.latStart=i,this.latEnd=r,this.lonStart=a,this.lonEnd=o,this.heightStart=s,this.heightEnd=c}getBoundingBox(e,t){fb(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported.");let{latStart:n,latEnd:i,lonStart:r,lonEnd:a,heightStart:o,heightEnd:s}=this,c=(n+i)*.5,l=(r+a)*.5,u=n>0,d=i<0,p;p=u?n:d?i:0;let{min:g,max:f}=e;g.setScalar(1/0),f.setScalar(-1/0),a-r<=Xs?(this.getCartographicToNormal(c,l,Yr),Aa.set(0,0,1),Gs.crossVectors(Aa,Yr).normalize(),Aa.crossVectors(Yr,Gs).normalize(),t.makeBasis(Gs,Aa,Yr),Yn.copy(t).invert(),this.getCartographicToPosition(p,r,s,Ae).applyMatrix4(Yn),f.x=Math.abs(Ae.x),g.x=-f.x,this.getCartographicToPosition(i,r,s,Ae).applyMatrix4(Yn),f.y=Ae.y,this.getCartographicToPosition(i,l,s,Ae).applyMatrix4(Yn),f.y=Math.max(Ae.y,f.y),this.getCartographicToPosition(n,r,s,Ae).applyMatrix4(Yn),g.y=Ae.y,this.getCartographicToPosition(n,l,s,Ae).applyMatrix4(Yn),g.y=Math.min(Ae.y,g.y),this.getCartographicToPosition(c,l,s,Ae).applyMatrix4(Yn),f.z=Ae.z,this.getCartographicToPosition(n,r,o,Ae).applyMatrix4(Yn),g.z=Ae.z,this.getCartographicToPosition(i,r,o,Ae).applyMatrix4(Yn),g.z=Math.min(Ae.z,g.z)):(this.getCartographicToPosition(p,l,s,Yr),Yr.z=0,Yr.length()<1e-10?Yr.set(1,0,0):Yr.normalize(),Aa.set(0,0,1),Gs.crossVectors(Yr,Aa).normalize(),t.makeBasis(Gs,Aa,Yr),Yn.copy(t).invert(),this.getCartographicToPosition(p,l+yp,s,Ae).applyMatrix4(Yn),f.x=Math.abs(Ae.x),g.x=-f.x,this.getCartographicToPosition(i,0,d?o:s,Ae).applyMatrix4(Yn),f.y=Ae.y,this.getCartographicToPosition(n,0,u?o:s,Ae).applyMatrix4(Yn),g.y=Ae.y,this.getCartographicToPosition(p,l,s,Ae).applyMatrix4(Yn),f.z=Ae.z,this.getCartographicToPosition(p,a,s,Ae).applyMatrix4(Yn),g.z=Ae.z),e.getCenter(Ae),e.min.sub(Ae).multiplyScalar(1.0000000000001),e.max.sub(Ae).multiplyScalar(1.0000000000001),Ae.applyMatrix4(t),t.setPosition(Ae)}getBoundingSphere(e){fb(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(Ew,mb),e.center.setFromMatrixPosition(mb),e.radius=0;let{latStart:t,latEnd:n,lonStart:i,lonEnd:r,heightStart:a,heightEnd:o}=this,s=(t+n)*.5,c=(i+r)*.5,l=t>0,u=n<0,d;d=l?t:u?n:0,this.getCartographicToPosition(d,i,o,Ae),Zi(Ae,e),this.getCartographicToPosition(n,i,o,Ae),Zi(Ae,e),this.getCartographicToPosition(n,c,o,Ae),Zi(Ae,e),this.getCartographicToPosition(t,i,o,Ae),Zi(Ae,e),this.getCartographicToPosition(t,c,o,Ae),Zi(Ae,e),this.getCartographicToPosition(s,c,o,Ae),Zi(Ae,e),this.getCartographicToPosition(t,i,a,Ae),Zi(Ae,e),r-i>Xs&&(this.getCartographicToPosition(d,c+Xs,o,Ae),Zi(Ae,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},Li=new j.Vector3,ki=new j.Vector3,Di=new j.Vector3,gb=new j.Vector3,bb=new j.Vector3,Rw=class{constructor(){this.sphere=null,this.obb=null,this.region=null,this.regionObb=null}intersectsRay(e){let t=this.sphere,n=this.obb||this.regionObb;return!(t&&!e.intersectsSphere(t)||n&&!n.intersectsRay(e))}intersectRay(e,t=null){let n=this.sphere,i=this.obb||this.regionObb,r=-1/0,a=-1/0;n&&e.intersectSphere(n,gb)&&(r=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(gb)),i&&i.intersectRay(e,bb)&&(a=i.containsPoint(e.origin)?0:e.origin.distanceToSquared(bb));let o=Math.max(r,a);return o===-1/0?null:(e.at(Math.sqrt(o),t),t)}distanceToPoint(e){let t=this.sphere,n=this.obb||this.regionObb,i=-1/0,r=-1/0;return t&&(i=Math.max(t.distanceToPoint(e),0)),n&&(r=n.distanceToPoint(e)),i>r?i:r}intersectsFrustum(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!e.intersectsSphere(n)||t&&!t.intersectsFrustum(e)?!1:!!(n||t)}intersectsSphere(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!n.intersectsSphere(e)||t&&!t.intersectsSphere(e)?!1:!!(n||t)}intersectsOBB(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!e.intersectsSphere(n)||t&&!t.intersectsOBB(e)?!1:!!(n||t)}getOBB(e,t){let n=this.obb||this.regionObb;n?(e.copy(n.box),t.copy(n.transform)):(this.getAABB(e),t.identity())}getAABB(e){if(this.sphere)this.sphere.getBoundingBox(e);else{let t=this.obb||this.regionObb;e.copy(t.box).applyMatrix4(t.transform)}}getSphere(e){if(this.sphere)e.copy(this.sphere);else if(this.region)this.region.getBoundingSphere(e);else{let t=this.obb||this.regionObb;t.box.getBoundingSphere(e),e.applyMatrix4(t.transform)}}setObbData(e,t){let n=new _p;Li.set(e[3],e[4],e[5]),ki.set(e[6],e[7],e[8]),Di.set(e[9],e[10],e[11]);let i=Li.length(),r=ki.length(),a=Di.length();Li.normalize(),ki.normalize(),Di.normalize(),i===0&&Li.crossVectors(ki,Di),r===0&&ki.crossVectors(Li,Di),a===0&&Di.crossVectors(Li,ki),n.transform.set(Li.x,ki.x,Di.x,e[0],Li.y,ki.y,Di.y,e[1],Li.z,ki.z,Di.z,e[2],0,0,0,1).premultiply(t),n.box.min.set(-i,-r,-a),n.box.max.set(i,r,a),n.update(),this.obb=n}setSphereData(e,t,n,i,r){let a=new j.Sphere;a.center.set(e,t,n),a.radius=i,a.applyMatrix4(r),this.sphere=a}setRegionData(e,t,n,i,r,a,o){let s=new Sb(...e.radius,n,r,t,i,a,o),c=new _p;s.getBoundingBox(c.box,c.transform),c.update(),this.region=s,this.regionObb=c}},Lw=new j.Matrix3;function kw(e,t,n,i){let r=Lw.set(e.normal.x,e.normal.y,e.normal.z,t.normal.x,t.normal.y,t.normal.z,n.normal.x,n.normal.y,n.normal.z);return i.set(-e.constant,-t.constant,-n.constant),i.applyMatrix3(r.invert()),i}var Dw=class extends j.Frustum{constructor(){super(),this.points=Array(8).fill().map(()=>new j.Vector3)}setFromProjectionMatrix(...e){return super.setFromProjectionMatrix(...e),this.calculateFrustumPoints(),this}calculateFrustumPoints(){let{planes:e,points:t}=this;[[e[0],e[3],e[4]],[e[1],e[3],e[4]],[e[0],e[2],e[4]],[e[1],e[2],e[4]],[e[0],e[3],e[5]],[e[1],e[3],e[5]],[e[0],e[2],e[5]],[e[1],e[2],e[5]]].forEach((n,i)=>{kw(n[0],n[1],n[2],t[i])})}};var Sp=0;function vb(e,t,n,i){try{return j.TextureUtils.getByteLength(e,t,n,i)}catch{return Sp}}function Nw(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??Sp;let{format:t,type:n,image:i,mipmaps:r}=e;if(e.isCompressedTexture&&Array.isArray(r)&&r.length>0){let o=0;for(let s of r)s?.data?.byteLength?o+=s.data.byteLength:o+=vb(s.width,s.height,t,n);return o}if(!i)return Sp;let a=vb(i.width,i.height,t,n);return a*=e.generateMipmaps?4/3:1,a}function Iw(e){let t=new Set,n=0;return e.traverse(i=>{if(i.geometry&&!t.has(i.geometry)&&(n+=(0,yb.estimateBytesUsed)(i.geometry),t.add(i.geometry)),i.material){let r=i.material;for(let a in r){let o=r[a];o&&o.isTexture&&!t.has(o)&&(n+=Nw(o),t.add(o))}}}),n}var Mb=Symbol("INITIAL_FRUSTUM_CULLED"),Jc=new j.Matrix4,Ws=new j.Vector3,wp=new j.Vector2,Bw=new j.Vector3(1,0,0),Ow=new j.Vector3(0,1,0),zw=()=>null;function xb(e,t){e.traverse(n=>{n.frustumCulled=n[Mb]&&t})}var Ap=class extends cp{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{xb(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new Cw(this),this.ellipsoid=qs.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new j.Matrix4,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new j.LoadingManager,this._listeners={}}addEventListener(e,t){j.EventDispatcher.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return j.EventDispatcher.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){j.EventDispatcher.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){j.EventDispatcher.prototype.dispatchEvent.call(this,e)}getBoundingBox(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getAABB(e),!0):!1}getOrientedBoundingBox(e,t){if(!this.root)return!1;let n=this.root.engineData.boundingVolume;return n?(n.getOBB(e,t),!0):!1}getBoundingSphere(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getSphere(e),!0):!1}forEachLoadedModel(e){this.traverse(t=>{let n=t.engineData&&t.engineData.scene;n&&e(n,t)},null,!1)}raycast(e,t){if(this.root)if(this.accelerateRaycast)_b(this,this.root,e,t);else{let n=e.firstHitOnly?[]:t;for(let i of this.activeTiles){let{scene:r}=i.engineData;this.invokeOnePlugin(a=>a.raycastTile&&a.raycastTile(i,r,e,n))||e.intersectObject(r,!0,n)}e.firstHitOnly&&n.length>0&&(n.sort((i,r)=>i.distance-r.distance),t.push(n[0]))}}hasCamera(e){return this.cameraMap.has(e)}setCamera(e){let t=this.cameras,n=this.cameraMap;return n.has(e)?!1:(n.set(e,new j.Vector2),t.push(e),this.dispatchEvent({type:"add-camera",camera:e}),!0)}setResolution(e,t,n){let i=this.cameraMap;if(!i.has(e))return!1;let r=t.isVector2?t.x:t,a=t.isVector2?t.y:n,o=i.get(e);return(o.width!==r||o.height!==a)&&(o.set(r,a),this.dispatchEvent({type:"camera-resolution-change"})),!0}getResolution(e,t){let n=this.cameraMap.get(e);return n?t.copy(n):null}setResolutionFromRenderer(e,t){return t.getSize(wp),this.setResolution(e,wp.x,wp.y)}deleteCamera(e){let t=this.cameras,n=this.cameraMap;if(n.has(e)){let i=t.indexOf(e);return t.splice(i,1),n.delete(e),this.dispatchEvent({type:"delete-camera",camera:e}),!0}return!1}loadRootTileset(...e){return super.loadRootTileset(...e).then(t=>{let{asset:n,extensions:i={}}=t;switch((n&&n.gltfUpAxis||"y").toLowerCase()){case"x":this._upRotationMatrix.makeRotationAxis(Ow,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(Bw,Math.PI/2);break}if("3DTILES_ellipsoid"in i){let r=i["3DTILES_ellipsoid"],{ellipsoid:a}=this;a.name=r.body,r.radii?a.radius.set(...r.radii):a.radius.set(1,1,1)}return t})}prepareForTraversal(){let e=this.group,t=this.cameras,n=this.cameraMap,i=this.cameraInfo;for(;i.length>t.length;)i.pop();for(;i.length<t.length;)i.push({frustum:new Dw,isOrthographic:!1,sseDenominator:-1,position:new j.Vector3,invScale:-1,pixelSize:0});Ws.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(Ws.x-Ws.y,Ws.x-Ws.z))>1e-6&&console.warn("ThreeTilesRenderer : Non uniform scale used for tile which may cause issues when calculating screen space error.");for(let r=0,a=i.length;r<a;r++){let o=t[r],s=i[r],c=s.frustum,l=s.position,u=n.get(o);(u.width===0||u.height===0)&&console.warn("TilesRenderer: resolution for camera error calculation is not set.");let d=o.projectionMatrix.elements;if(s.isOrthographic=d[15]===1,s.isOrthographic){let p=2/d[0],g=2/d[5];s.pixelSize=Math.max(g/u.height,p/u.width)}else s.sseDenominator=2/d[5]/u.height;Jc.copy(e.matrixWorld),Jc.premultiply(o.matrixWorldInverse),Jc.premultiply(o.projectionMatrix),c.setFromProjectionMatrix(Jc,o.coordinateSystem,o.reversedDepth),l.set(0,0,0),l.applyMatrix4(o.matrixWorld),l.applyMatrix4(e.matrixWorldInverse)}}update(){if(super.update(),this.cameras.length===0&&this.root){let e=!1;this.invokeAllPlugins(t=>e||(e=!!(t!==this&&t.calculateTileViewError))),e===!1&&console.warn("TilesRenderer: no cameras defined. Cannot update 3d tiles.")}}preprocessNode(e,t,n=null){super.preprocessNode(e,t,n);let i=new j.Matrix4;if(e.transform){let o=e.transform;for(let s=0;s<16;s++)i.elements[s]=o[s]}n&&i.premultiply(n.engineData.transform);let r=new j.Matrix4().copy(i).invert(),a=new Rw;"sphere"in e.boundingVolume&&a.setSphereData(...e.boundingVolume.sphere,i),"box"in e.boundingVolume&&a.setObbData(e.boundingVolume.box,i),"region"in e.boundingVolume&&a.setRegionData(this.ellipsoid,...e.boundingVolume.region),e.engineData.transform=i,e.engineData.transformInverse=r,e.engineData.boundingVolume=a,e.engineData.geometry=null,e.engineData.materials=null,e.engineData.textures=null,e.toJSON=zw}async parseTile(e,t,n,i,r){let a=t.engineData,o=Hc(i),s=this.fetchOptions,c=this.manager,l=null,u=a.transform,d=this._upRotationMatrix,p=(Ta(e)||n).toLowerCase();switch(p){case"b3dm":{let x=new Mp(c);x.workingPath=o,x.fetchOptions=s,x.adjustmentTransform.copy(d),l=x.parse(e);break}case"pnts":{let x=new Cp(c);x.workingPath=o,x.fetchOptions=s,l=x.parse(e);break}case"i3dm":{let x=new Pp(c);x.workingPath=o,x.fetchOptions=s,x.adjustmentTransform.copy(d),x.ellipsoid.copy(this.ellipsoid),l=x.parse(e);break}case"cmpt":{let x=new wb(c);x.workingPath=o,x.fetchOptions=s,x.adjustmentTransform.copy(d),x.ellipsoid.copy(this.ellipsoid),l=x.parse(e).then(R=>R.scene);break}case"gltf":case"glb":{let x=c.getHandler("path.gltf")||c.getHandler("path.glb")||new Qc.GLTFLoader(c);x.setWithCredentials(s.credentials==="include"),x.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&x.setCrossOrigin("use-credentials");let R=x.resourcePath||x.path||o;!/[\\/]$/.test(R)&&R.length&&(R+="/"),l=x.parseAsync(e,R).then(w=>{w.scene=w.scene||new j.Group;let{scene:P}=w;return P.updateMatrix(),P.matrix.multiply(d).decompose(P.position,P.quaternion,P.scale),w});break}default:l=this.invokeOnePlugin(x=>x.parseToMesh&&x.parseToMesh(e,t,n,i,r));break}let g=await l;if(g===null)throw Error(`TilesRenderer: Content type "${p}" not supported.`);let f,v;g.isObject3D?(f=g,v=null):(f=g.scene,v=g),f.updateMatrix(),f.matrix.premultiply(u),f.matrix.decompose(f.position,f.quaternion,f.scale),await this.invokeAllPlugins(x=>x.processTileModel&&x.processTileModel(f,t)),f.traverse(x=>{x[Mb]=x.frustumCulled,x.userData.tile=t}),xb(f,!this.autoDisableRendererCulling);let E=[],S=[],b=[];if(f.traverse(x=>{if(x.geometry&&S.push(x.geometry),x.material){let R=x.material;E.push(x.material);for(let w in R){let P=R[w];P&&P.isTexture&&b.push(P)}}}),r.aborted){for(let x=0,R=b.length;x<R;x++){let w=b[x];w.image instanceof ImageBitmap&&w.image.close(),w.dispose()}return}a.materials=E,a.geometry=S,a.textures=b,a.scene=f,a.metadata=v}disposeTile(e){super.disposeTile(e);let t=e.engineData;if(t.scene){let n=t.materials,i=t.geometry,r=t.textures,a=t.scene.parent;t.scene.traverse(o=>{o.userData.meshFeatures&&o.userData.meshFeatures.dispose(),o.userData.structuralMetadata&&o.userData.structuralMetadata.dispose()});for(let o=0,s=i.length;o<s;o++)i[o].dispose();for(let o=0,s=n.length;o<s;o++)n[o].dispose();for(let o=0,s=r.length;o<s;o++){let c=r[o];c.image instanceof ImageBitmap&&c.image.close(),c.dispose()}a&&a.remove(t.scene),t.scene=null,t.materials=null,t.textures=null,t.geometry=null,t.metadata=null}}setTileActive(e,t){super.setTileActive(e,t);let n=e.engineData.scene;n&&(t?(n.parent=this.group,n.updateMatrixWorld(!0)):n.parent=null)}setTileVisible(e,t){let n=e.engineData.scene,{activeTiles:i,group:r}=this;n&&(t?r.add(n):(r.remove(n),i.has(e)&&(n.parent=r))),super.setTileVisible(e,t)}calculateBytesUsed(e,t){let n=this._bytesUsed;return!n.has(e)&&t&&n.set(e,Iw(t)),n.get(e)??null}calculateTileViewError(e,t){let n=e.engineData,i=this.cameras,r=this.cameraInfo,a=n.boundingVolume,o=!1,s=0,c=1/0,l=0,u=1/0;for(let d=0,p=i.length;d<p;d++){let g=r[d],f,v;if(g.isOrthographic){let S=g.pixelSize;f=e.geometricError/S,v=1/0}else{let S=g.sseDenominator;v=a.distanceToPoint(g.position),f=v===0?1/0:e.geometricError/(v*S)}let E=r[d].frustum;a.intersectsFrustum(E)&&(o=!0,s=Math.max(s,f),c=Math.min(c,v)),l=Math.max(l,f),u=Math.min(u,v)}o?(t.inView=!0,t.error=s,t.distanceFromCamera=c):(t.inView=!1,t.error=l,t.distanceFromCamera=u)}dispose(){super.dispose(),this.group.removeFromParent()}};var J=require("three"),Ub=require("three/addons/loaders/GLTFLoader.js"),Lp=require("three/addons/postprocessing/Pass.js");var A2=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var Cb=new pi;Cb.maxJobs=10,Cb.priorityCallback=(e,t)=>{let n=e.tile,i=t.tile,r=n.internal.renderer,a=i.internal.renderer,o=r.visibleTiles.has(n);return o===a.visibleTiles.has(i)?Co(n,i):o?1:-1};var Tb=new J.Vector3;function Ys(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let n=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,i=new J.BufferAttribute(new t(e.count*e.itemSize),e.itemSize,!0),r=e.itemSize,a=e.count;for(let o=0;o<a;o++)for(let s=0;s<r;s++){let c=J.MathUtils.clamp(e.getComponent(o,s),n,1);i.setComponent(o,s,c)}return i}function Uw(e,t=Int16Array){let n=e.geometry,i=n.attributes,r=i.position;if(r.isInterleavedBufferAttribute||r.array instanceof t)return r;let a=new J.BufferAttribute(new t(r.count*r.itemSize),r.itemSize,!1),o=r.itemSize,s=r.count;n.computeBoundingBox();let c=n.boundingBox,{min:l,max:u}=c,d=2**(8*t.BYTES_PER_ELEMENT-1)-1,p=-d;for(let g=0;g<s;g++)for(let f=0;f<o;f++){let v=f===0?"x":f===1?"y":"z",E=l[v],S=u[v],b=J.MathUtils.mapLinear(r.getComponent(g,f),E,S,p,d);a.setComponent(g,f,b)}c.getCenter(Tb).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(Tb),e.scale.x*=.5*(u.x-l.x)/d,e.scale.y*=.5*(u.y-l.y)/d,e.scale.z*=.5*(u.z-l.z)/d,i.position=a,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var kp=class{constructor(e){this._options={generateNormals:!1,disableMipmaps:!0,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!1,uvType:Int8Array,normalType:Int8Array,positionType:Int16Array,...e},this.name="TILES_COMPRESSION_PLUGIN",this.priority=-100}processTileModel(e,t){let{generateNormals:n,disableMipmaps:i,compressIndex:r,compressUvs:a,compressNormals:o,compressPosition:s,uvType:c,normalType:l,positionType:u}=this._options;e.traverse(d=>{if(d.material&&i){let p=d.material;for(let g in p){let f=p[g];f&&f.isTexture&&f.generateMipmaps&&(f.generateMipmaps=!1,f.minFilter=J.LinearFilter)}}if(d.geometry){let p=d.geometry,g=p.attributes;if(a){let{uv:f,uv1:v,uv2:E,uv3:S}=g;f&&(g.uv=Ys(f,c)),v&&(g.uv1=Ys(v,c)),E&&(g.uv2=Ys(E,c)),S&&(g.uv3=Ys(S,c))}if(n&&!g.normals&&p.computeVertexNormals(),o&&g.normals&&(g.normals=Ys(g.normals,l)),s&&Uw(d,u),r&&p.index){let f=g.position.count,v=p.index,E=f>65535?Uint32Array:f>255?Uint16Array:Uint8Array;if(!(v.array instanceof E)){let S=new E(p.index.count);S.set(v.array);let b=new J.BufferAttribute(S,1);p.setIndex(b)}}}})}};function En(e,t,n){return e&&t in e?e[t]:n}function Fb(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function Fw(e){return/^FLOAT/.test(e)}function Js(e){return/^VEC/.test(e)}function Qs(e){return/^MAT/.test(e)}function Vb(e,t,n,i=null){return Qs(n)||Js(n)?i.fromArray(e,t):e[t]}function Ep(e){let{type:t,componentType:n}=e;switch(t){case"SCALAR":return n==="INT64"?0n:0;case"VEC2":return new J.Vector2;case"VEC3":return new J.Vector3;case"VEC4":return new J.Vector4;case"MAT2":return new J.Matrix2;case"MAT3":return new J.Matrix3;case"MAT4":return new J.Matrix4;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function Pb(e,t){if(t==null)return!1;switch(e){case"SCALAR":return typeof t=="number"||typeof t=="bigint";case"VEC2":return t.isVector2;case"VEC3":return t.isVector3;case"VEC4":return t.isVector4;case"MAT2":return t.isMatrix2;case"MAT3":return t.isMatrix3;case"MAT4":return t.isMatrix4;case"BOOLEAN":return typeof t=="boolean";case"STRING":return typeof t=="string";case"ENUM":return typeof t=="number"||typeof t=="bigint"}throw Error("ClassProperty: invalid type.")}function Zs(e,t=null){switch(e){case"INT8":return Int8Array;case"INT16":return Int16Array;case"INT32":return Int32Array;case"INT64":return BigInt64Array;case"UINT8":return Uint8Array;case"UINT16":return Uint16Array;case"UINT32":return Uint32Array;case"UINT64":return BigUint64Array;case"FLOAT32":return Float32Array;case"FLOAT64":return Float64Array}switch(t){case"BOOLEAN":return Uint8Array;case"STRING":return Uint8Array}throw Error("ClassProperty: invalid type.")}function Vw(e,t=null){if(e.array){t=t&&Array.isArray(t)?t:[],t.length=e.count;for(let n=0,i=t.length;n<i;n++)t[n]=ed(e,t[n])}else t=ed(e,t);return t}function ed(e,t=null){let n=e.default,i=e.type;if(t||(t=Ep(e)),n===null){switch(i){case"SCALAR":return 0;case"VEC2":return t.set(0,0);case"VEC3":return t.set(0,0,0);case"VEC4":return t.set(0,0,0,0);case"MAT2":return t.identity();case"MAT3":return t.identity();case"MAT4":return t.identity();case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return""}throw Error("ClassProperty: invalid type.")}else if(Qs(i))t.fromArray(n);else if(Js(i))t.fromArray(n);else return n}function jw(e,t){if(e.noData===null)return t;let n=e.noData,i=e.type;if(Array.isArray(t))for(let o=0,s=t.length;o<s;o++)t[o]=r(t[o]);else t=r(t);return t;function r(o){return a(o)&&(o=ed(e,o)),o}function a(o){if(Qs(i)){let s=o.elements;for(let c=0,l=n.length;c<l;c++)if(n[c]!==s[c])return!1;return!0}else if(Js(i)){for(let s=0,c=n.length;s<c;s++)if(n[s]!==o.getComponent(s))return!1;return!0}else return n===o}}function Hw(e,t){switch(e){case"INT8":return Math.max(t/127,-1);case"INT16":return Math.max(t,32767,-1);case"INT32":return Math.max(t/2147483647,-1);case"INT64":return Math.max(Number(t)/9223372036854776e3,-1);case"UINT8":return t/255;case"UINT16":return t/65535;case"UINT32":return t/4294967295;case"UINT64":return Number(t)/18446744073709552e3}}function Gw(e,t){let{type:n,componentType:i,scale:r,offset:a,normalized:o}=e;if(Array.isArray(t))for(let d=0,p=t.length;d<p;d++)t[d]=s(t[d]);else t=s(t);return t;function s(d){return d=Qs(n)?l(d):Js(n)?c(d):u(d),d}function c(d){return d.x=u(d.x),d.y=u(d.y),"z"in d&&(d.z=u(d.z)),"w"in d&&(d.w=u(d.w)),d}function l(d){let p=d.elements;for(let g=0,f=p.length;g<f;g++)p[g]=u(p[g]);return d}function u(d){return o&&(d=Hw(i,d)),(o||Fw(i))&&(d=d*r+a),d}}function Dp(e,t,n=null){if(e.array){Array.isArray(t)||(t=Array(e.count||0)),t.length=n===null?e.count:n;for(let i=0,r=t.length;i<r;i++)Pb(e.type,t[i])||(t[i]=Ep(e))}else Pb(e.type,t)||(t=Ep(e));return t}function td(e,t){for(let n in t)n in e||delete t[n];for(let n in e){let i=e[n];t[n]=Dp(i,t[n])}}function Ww(e){switch(e){case"ENUM":return 1;case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16;case"BOOLEAN":return-1;case"STRING":return-1;default:return-1}}var rd=class{constructor(e,t,n=null){this.name=t.name||null,this.description=t.description||null,this.type=t.type,this.componentType=t.componentType||null,this.enumType=t.enumType||null,this.array=t.array||!1,this.count=t.count||0,this.normalized=t.normalized||!1,this.offset=t.offset||0,this.scale=En(t,"scale",1),this.max=En(t,"max",1/0),this.min=En(t,"min",-1/0),this.required=t.required||!1,this.noData=En(t,"noData",null),this.default=En(t,"default",null),this.semantic=En(t,"semantic",null),this.enumSet=null,this.accessorProperty=n,n&&(this.offset=En(n,"offset",this.offset),this.scale=En(n,"scale",this.scale),this.max=En(n,"max",this.max),this.min=En(n,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=En(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return Dp(this,e,t)}resolveDefaultElement(e){return ed(this,e)}resolveDefault(e){return Vw(this,e)}resolveNoData(e){return jw(this,e)}resolveEnumsToStrings(e){let t=this.enumSet;if(this.type==="ENUM")if(Array.isArray(e))for(let i=0,r=e.length;i<r;i++)e[i]=n(e[i]);else e=n(e);return e;function n(i){let r=t.values.find(a=>a.value===i);return r===null?"":r.name}}adjustValueScaleOffset(e){return Fb(this.type)?Gw(this,e):e}},Np=class{constructor(e,t={},n={},i=null){this.definition=e,this.class=t[e.class],this.className=e.class,this.enums=n,this.data=i,this.name="name"in e?e.name:null,this.properties=null}getPropertyNames(){return Object.keys(this.class.properties)}includesData(e){return!!this.definition.properties[e]}dispose(){}_initProperties(e=rd){let t={};for(let n in this.class.properties)t[n]=new e(this.enums,this.class.properties[n],this.definition.properties[n]);this.properties=t}},Xw=class extends rd{constructor(e,t,n=null){super(e,t,n),this.attribute=n?.attribute??null}},qw=class extends Np{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(Xw)}getData(e,t,n={}){let i=this.properties;td(i,n);for(let r in i)n[r]=this.getPropertyValue(r,e,t,n[r]);return n}getPropertyValue(e,t,n,i=null){if(t>=this.count)throw Error("PropertyAttributeAccessor: Requested index is outside the range of the buffer.");let r=this.properties[e],a=r.type;if(!r)throw Error("PropertyAttributeAccessor: Requested class property does not exist.");if(!this.definition.properties[e])return r.resolveDefault(i);i=r.shapeToProperty(i);let o=n.getAttribute(r.attribute.toLowerCase());if(Qs(a)){let s=i.elements;for(let c=s.length;0<c;)s[0]=o.getComponent(t,0)}else if(Js(a))i.fromBufferAttribute(o,t);else if(a==="SCALAR"||a==="ENUM")i=o.getX(t);else throw Error("StructuredMetadata.PropertyAttributeAccessor: BOOLEAN and STRING types are not supported by property attributes.");return i=r.adjustValueScaleOffset(i),i=r.resolveEnumsToStrings(i),i=r.resolveNoData(i),i}},Yw=class extends rd{constructor(e,t,n=null){super(e,t,n),this.values=n?.values??null,this.valueLength=Ww(this.type),this.arrayOffsets=En(n,"arrayOffsets",null),this.stringOffsets=En(n,"stringOffsets",null),this.arrayOffsetType=En(n,"arrayOffsetType","UINT32"),this.stringOffsetType=En(n,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let n=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:i,arrayOffsetType:r}=this,a=new(Zs(r))(e[i]);n=a[t+1]-a[t]}return n}getIndexOffsetFromId(e,t){let n=t;if(this.arrayOffsets){let{arrayOffsets:i,arrayOffsetType:r}=this;n=new(Zs(r))(e[i])[n]}else this.array&&(n*=this.count);return n}},$w=class extends Np{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(Yw)}getData(e,t={}){let n=this.properties;td(n,t);for(let i in n)t[i]=this.getPropertyValue(i,e,t[i]);return t}_readValueAtIndex(e,t,n,i=null){let r=this.properties[e],{componentType:a,type:o}=r,s=this.data,c=s[r.values],l=new(Zs(a,o))(c),u=r.getIndexOffsetFromId(s,t);if(Fb(o)||o==="ENUM")return Vb(l,(u+n)*r.valueLength,o,i);if(o==="STRING"){let d=u+n,p=0;if(r.stringOffsets!==null){let{stringOffsets:f,stringOffsetType:v}=r,E=new(Zs(v))(s[f]);p=E[d+1]-E[d],d=E[d]}let g=new Uint8Array(l.buffer,d,p);i=new TextDecoder().decode(g)}else if(o==="BOOLEAN"){let d=u+n,p=Math.floor(d/8),g=d%8;i=(l[p]>>g&1)==1}return i}getPropertyValue(e,t,n=null){if(t>=this.count)throw Error("PropertyTableAccessor: Requested index is outside the range of the table.");let i=this.properties[e];if(!i)throw Error("PropertyTableAccessor: Requested property does not exist.");if(!this.definition.properties[e])return i.resolveDefault(n);let r=i.array,a=this.data,o=i.getArrayLengthFromId(a,t);if(n=i.shapeToProperty(n,o),r)for(let s=0,c=n.length;s<c;s++)n[s]=this._readValueAtIndex(e,t,s,n[s]);else n=this._readValueAtIndex(e,t,0,n);return n=i.adjustValueScaleOffset(n),n=i.resolveEnumsToStrings(n),n=i.resolveNoData(n),n}},$s=new J.Box2,Ab=class{constructor(){this._renderer=new J.WebGLRenderer,this._target=new J.WebGLRenderTarget(1,1),this._texTarget=new J.WebGLRenderTarget,this._quad=new Lp.FullScreenQuad(new J.ShaderMaterial({blending:J.CustomBlending,blendDst:J.ZeroFactor,blendSrc:J.OneFactor,uniforms:{map:{value:null},pixel:{value:new J.Vector2}},vertexShader:`
|
|
3673
|
+
`,Hh=class extends zu.Effect{constructor(t=1){super("ExposureEffect",q2,{blendFunction:zu.BlendFunction.NORMAL,uniforms:new Map([["exposure",new Hx.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},Wx=(0,rl.forwardRef)(function({exposure:t},n){let i=(0,rl.useMemo)(()=>new Hh(t),[]);return i.exposure=t,(0,rl.useImperativeHandle)(n,()=>i,[i]),(0,Xx.jsx)("primitive",{object:i,dispose:null})});var Ha=require("@react-three/fiber"),qx=Jd(require("@react-three/postprocessing")),$x=require("postprocessing"),Jr=require("three"),Zr=require("react"),Kx=require("react/jsx-runtime"),$2=qx.LensFlareEffect;function Yx({config:e}){let t=(0,Ha.useThree)(u=>u.camera),n=(0,Ha.useThree)(u=>u.raycaster),i=(0,Ha.useThree)(u=>u.scene),r=(0,Ha.useThree)(u=>u.viewport),o=(0,Zr.useRef)(null),a=(0,Zr.useRef)(new Jr.Vector3),s=(0,Zr.useRef)(new Jr.Vector2),l=(0,Zr.useMemo)(()=>new Jr.Vector3(...e.lensPosition),[e.lensPosition]),c=(0,Zr.useMemo)(()=>new Jr.Color(e.colorGain??"#141414"),[e.colorGain]),h=(0,Zr.useMemo)(()=>new Jr.Vector2(0,0),[]),p=(0,Zr.useMemo)(()=>new $2({blendFunction:$x.BlendFunction.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:l,screenRes:h,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:c,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[c,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,l,h]);return(0,Zr.useEffect)(()=>(o.current=p,()=>{p.dispose(),o.current=null}),[p]),(0,Zr.useEffect)(()=>{let u=p.uniforms.get("screenRes");u&&(u.value.x=r.width,u.value.y=r.height)},[p,r]),(0,Ha.useFrame)((u,m)=>{let f=o.current;if(!f)return;let g=f.uniforms.get("lensPosition"),b=f.uniforms.get("opacity");if(!g||!b)return;let y=1;if(a.current.copy(l).project(t),a.current.z>1)return;g.value.x=a.current.x,g.value.y=a.current.y,s.current.x=a.current.x,s.current.y=a.current.y,n.setFromCamera(s.current,t);let v=n.intersectObjects(i.children,!0),{object:w}=v[0]||{};w&&(w.userData?.lensflare==="no-occlusion"?y=0:w instanceof Jr.Mesh&&(w.material.uniforms?._transmission?.value>.2||w.material._transmission&&w.material._transmission>.2?y=.2:w.material.transparent&&(y=w.material.opacity))),b.value=Jr.MathUtils.damp(b.value,y,12,m)}),(0,Kx.jsx)("primitive",{object:p,dispose:null})}var Uu=require("@react-three/postprocessing"),hr=require("postprocessing"),Zx=require("three");function Jx(e){return e==="linear"?hr.ToneMappingMode.LINEAR:e==="reinhard"?hr.ToneMappingMode.REINHARD:hr.ToneMappingMode.ACES_FILMIC}function Vu(e){switch(e){case"verySmall":return hr.KernelSize.VERY_SMALL;case"small":return hr.KernelSize.SMALL;case"medium":return hr.KernelSize.MEDIUM;case"large":return hr.KernelSize.LARGE;case"veryLarge":return hr.KernelSize.VERY_LARGE;case"huge":return hr.KernelSize.HUGE}}function Qx(e){switch(e){case"constantMild":return hr.GlitchMode.CONSTANT_MILD;case"constantWild":return hr.GlitchMode.CONSTANT_WILD;default:return hr.GlitchMode.SPORADIC}}function Wh(e){let t=new Zx.Color(e);return[t.r,t.g,t.b,1]}function e0(e){return e==="radial"?Uu.RampType.Radial:e==="mirroredLinear"?Uu.RampType.MirroredLinear:Uu.RampType.Linear}var ht=require("react/jsx-runtime"),Wa={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new bi.Color(ro.color).getHex(),hiddenEdgeColor:new bi.Color(ro.color).multiplyScalar(.35).getHex(),kernelSize:Ho.KernelSize.VERY_SMALL,blur:!1,xRay:!1};function Y2(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}var Xh=[],K2=(0,Nn.memo)(function({sceneConfig:t,selectedObjectRef:n,highlightOnHover:i=!1,disabled:r=!1,onOutlineEffect:o}){let a=(0,Mc.useThree)(_=>_.scene),s=(0,Mc.useThree)(_=>_.gl),l=(0,Nn.useRef)(null),c=t?.postProcessing,h=n??null,p=c?.outline.enabled===!0,u=p||i,[m,f]=(0,Nn.useState)(()=>s.xr?.isPresenting??!1);(0,Nn.useEffect)(()=>{let _=s.xr;if(!_)return;let x=()=>f(!0),P=()=>f(!1);return _.addEventListener("sessionstart",x),_.addEventListener("sessionend",P),f(_.isPresenting),()=>{_.removeEventListener("sessionstart",x),_.removeEventListener("sessionend",P)}},[s]);let g=a.children.filter(_=>_.isLight),b=(0,Nn.useMemo)(()=>new bi.Vector2(c?.chromaticAberration.offsetX??.002,c?.chromaticAberration.offsetY??.002),[c?.chromaticAberration.offsetX,c?.chromaticAberration.offsetY]),y=(0,Nn.useMemo)(()=>new bi.Color(c?.outline.visibleEdgeColor??"#ffffff").getHex(),[c?.outline.visibleEdgeColor]),v=(0,Nn.useMemo)(()=>new bi.Color(c?.outline.hiddenEdgeColor??"#22090a").getHex(),[c?.outline.hiddenEdgeColor]),w=(0,Nn.useMemo)(()=>Wh(c?.ramp.startColor??"#000000"),[c?.ramp.startColor]),M=(0,Nn.useMemo)(()=>Wh(c?.ramp.endColor??"#ffffff"),[c?.ramp.endColor]);return!c||m||r?null:(0,ht.jsxs)(ht.Fragment,{children:[c.godRays.enabled===!0&&(0,ht.jsxs)("mesh",{ref:l,position:c.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,ht.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,ht.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,ht.jsxs)(Fe.EffectComposer,{multisampling:0,enableNormalPass:c.ssao.enabled===!0,autoClear:!1,children:[c.smaa.enabled===!0&&(0,ht.jsx)(Fe.SMAA,{}),c.ssao.enabled===!0&&(0,ht.jsx)(Fe.SSAO,{samples:c.ssao.samples,rings:c.ssao.rings,intensity:c.ssao.intensity,radius:c.ssao.radius,bias:c.ssao.bias,luminanceInfluence:c.ssao.luminanceInfluence,fade:c.ssao.fade,minRadiusScale:c.ssao.minRadiusScale,worldDistanceThreshold:c.ssao.worldDistanceThreshold,worldDistanceFalloff:c.ssao.worldDistanceFalloff,worldProximityThreshold:c.ssao.worldProximityThreshold,worldProximityFalloff:c.ssao.worldProximityFalloff}),c.autofocus.enabled===!0&&(0,ht.jsx)(Fe.Autofocus,{focusDistance:c.autofocus.focusDistance,focusRange:c.autofocus.focusRange,focalLength:c.autofocus.focalLength,bokehScale:c.autofocus.bokehScale,target:c.autofocus.target,mouse:c.autofocus.mouse,debug:c.autofocus.debug||void 0,manual:c.autofocus.manual,smoothTime:c.autofocus.smoothTime}),c.autofocus.enabled!==!0&&c.depthOfField.enabled===!0&&(0,ht.jsx)(Fe.DepthOfField,{focusDistance:c.depthOfField.focusDistance,focusRange:c.depthOfField.focusRange,focalLength:c.depthOfField.focalLength,bokehScale:c.depthOfField.bokehScale}),c.bloom.enabled===!0&&(0,ht.jsx)(Fe.Bloom,{intensity:c.bloom.intensity,luminanceThreshold:c.bloom.luminanceThreshold,luminanceSmoothing:c.bloom.luminanceSmoothing,mipmapBlur:c.bloom.mipmapBlur,radius:c.bloom.radius,levels:c.bloom.levels}),c.selectiveBloom.enabled===!0&&(0,ht.jsx)(Fe.SelectiveBloom,{selection:h??void 0,lights:g,selectionLayer:c.selectiveBloom.selectionLayer,intensity:c.selectiveBloom.intensity,luminanceThreshold:c.selectiveBloom.luminanceThreshold,luminanceSmoothing:c.selectiveBloom.luminanceSmoothing,kernelSize:Vu(c.selectiveBloom.kernelSize),mipmapBlur:c.selectiveBloom.mipmapBlur,inverted:c.selectiveBloom.inverted,ignoreBackground:c.selectiveBloom.ignoreBackground}),u&&(0,ht.jsx)(Fe.Outline,{ref:o,selection:Xh,selectionLayer:c.outline.selectionLayer,blendFunction:Ho.BlendFunction.SCREEN,edgeStrength:p?c.outline.edgeStrength:Wa.edgeStrength,pulseSpeed:p?c.outline.pulseSpeed:Wa.pulseSpeed,visibleEdgeColor:p?y:Wa.visibleEdgeColor,hiddenEdgeColor:p?v:Wa.hiddenEdgeColor,kernelSize:p?Vu(c.outline.kernelSize):Wa.kernelSize,blur:p?c.outline.blur:Wa.blur,xRay:p?c.outline.xRay:Wa.xRay}),c.chromaticAberration.enabled===!0&&(0,ht.jsx)(Fe.ChromaticAberration,{offset:b,radialModulation:c.chromaticAberration.radialModulation,modulationOffset:c.chromaticAberration.modulationOffset}),c.colorAverage.enabled===!0&&(0,ht.jsx)(Fe.ColorAverage,{}),c.dotScreen.enabled===!0&&(0,ht.jsx)(Fe.DotScreen,{angle:c.dotScreen.angle,scale:c.dotScreen.scale}),c.glitch.enabled===!0&&(0,ht.jsx)(Fe.Glitch,{mode:Qx(c.glitch.mode),delay:new bi.Vector2(c.glitch.delay[0],c.glitch.delay[1]),duration:new bi.Vector2(c.glitch.duration[0],c.glitch.duration[1]),strength:new bi.Vector2(c.glitch.strength[0],c.glitch.strength[1]),chromaticAberrationOffset:new bi.Vector2(c.glitch.chromaticAberrationOffset[0],c.glitch.chromaticAberrationOffset[1]),columns:c.glitch.columns,ratio:c.glitch.ratio,active:!0}),c.grid.enabled===!0&&(0,ht.jsx)(Fe.Grid,{scale:c.grid.scale,lineWidth:c.grid.lineWidth}),c.lensflare.enabled===!0&&(0,ht.jsx)(Yx,{config:c.lensflare}),c.godRays.enabled===!0&&(0,ht.jsx)(Fe.GodRays,{sun:l,samples:c.godRays.samples,density:c.godRays.density,decay:c.godRays.decay,weight:c.godRays.weight,exposure:c.godRays.exposure,clampMax:c.godRays.clampMax,blur:c.godRays.blur,kernelSize:Vu(c.godRays.kernelSize)}),c.noise.enabled===!0&&(0,ht.jsx)(Fe.Noise,{premultiply:c.noise.premultiply,opacity:c.noise.opacity,blendFunction:Ho.BlendFunction.ADD}),c.brightnessContrast.enabled===!0&&(0,ht.jsx)(Fe.BrightnessContrast,{brightness:c.brightnessContrast.brightness,contrast:c.brightnessContrast.contrast}),c.hueSaturation.enabled===!0&&(0,ht.jsx)(Fe.HueSaturation,{hue:c.hueSaturation.hue,saturation:c.hueSaturation.saturation}),c.toneMapping.enabled===!0&&(0,ht.jsx)(Wx,{exposure:c.toneMapping.exposure}),c.vignette.enabled===!0&&(0,ht.jsx)(Fe.Vignette,{eskil:c.vignette.eskil,offset:c.vignette.offset,darkness:c.vignette.darkness,blendFunction:Ho.BlendFunction.NORMAL}),c.toneMapping.enabled===!0&&(0,ht.jsx)(Fe.ToneMapping,{mode:Jx(c.toneMapping.mode),resolution:c.toneMapping.resolution,whitePoint:c.toneMapping.whitePoint,middleGrey:c.toneMapping.middleGrey,minLuminance:c.toneMapping.minLuminance,averageLuminance:c.toneMapping.averageLuminance,adaptationRate:c.toneMapping.adaptationRate}),c.sepia.enabled===!0&&(0,ht.jsx)(Fe.Sepia,{intensity:c.sepia.intensity,blendFunction:Ho.BlendFunction.NORMAL}),c.scanline.enabled===!0&&(0,ht.jsx)(Fe.Scanline,{density:c.scanline.density,blendFunction:Ho.BlendFunction.OVERLAY}),c.pixelation.enabled===!0&&(0,ht.jsx)(Fe.Pixelation,{granularity:c.pixelation.granularity}),c.ramp.enabled===!0&&(0,ht.jsx)(Fe.Ramp,{rampType:e0(c.ramp.rampType),rampStart:c.ramp.rampStart,rampEnd:c.ramp.rampEnd,startColor:w,endColor:M,opacity:c.ramp.rampMask?1:c.ramp.opacity??.5,rampBias:c.ramp.rampBias,rampGain:c.ramp.rampGain,rampMask:c.ramp.rampMask,rampInvert:c.ramp.rampInvert})]})]})});function Z2(e){let t=[e];for(;t.length>0;){let n=t.pop();if(n.visible){if(n.isMesh)return!0;t.push(...n.children)}}return!1}function J2(e,t){return e.length===t.length&&e.every((n,i)=>n===t[i])}function t0({hoveredObjectRef:e,...t}){let n=(0,Mc.useThree)(l=>l.scene),i=(0,Mc.useThree)(l=>l.invalidate),[r,o]=(0,Nn.useState)(null),a=(0,Nn.useCallback)(l=>o(l),[]),s=(0,Nn.useRef)({effect:null,objects:Xh});return(0,Nn.useEffect)(()=>{if(!r)return;let c=t.sceneConfig?.postProcessing?.outline.enabled===!0?Y2(n):e&&Z2(e)?[e]:Xh;s.current.effect===r&&J2(s.current.objects,c)||(s.current={effect:r,objects:c},r.selection.set(c),i())}),(0,ht.jsx)(K2,{...t,onOutlineEffect:a})}var Mn=require("react/jsx-runtime"),Q2=1.5;function qh({children:e,camera:t,backgroundColor:n,shadows:i=!0,sceneConfig:r,selectedObjectRef:o,hoveredObjectRef:a,highlightOnHover:s,renderMode:l="demand",maxDpr:c=2,xrStore:h,rendererCaptureRef:p,preserveDrawingBuffer:u=!1,reduceGpuLoad:m,suspended:f=!1,paused:g=!1,onRendererCreated:b,backend:y="webgl"}){let v=y==="webgpu",w=m??dc(),M=w?Math.min(c,Q2):c,_=i&&!w,x=(0,vi.useMemo)(()=>n?{background:n}:r?.background.enabled?r.background.type==="color"?{background:r.background.color}:r.background.type==="image"&&r.background.imageUrl.trim()?{backgroundImage:`url("${r.background.imageUrl}")`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}:{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}:{background:"transparent"},[n,r]),P=(0,vi.useMemo)(()=>{if(n)return n;let B=r?.background;if(B?.enabled){if(B.type==="color")return B.color;if(B.type==="image"&&B.imageUrl.trim()||B.type==="environment")return null}return"#1c1c1d"},[n,r]),d=(0,vi.useMemo)(()=>{let B=r?.postProcessing;return B?!!(B.glitch.enabled||B.noise.enabled||B.lensflare.enabled&&B.lensflare.animated):!1},[r?.postProcessing]),[S,C]=(0,vi.useState)(!1),T=r?.environment,E=r?.groundShadows,k=(0,vi.useMemo)(()=>{if(!T)return null;if(T.source==="custom"){let B=T.customEnvironmentUrl.trim();return Ou(B)?{files:B}:null}return{preset:T.preset}},[T]),D=(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsx)(Ov,{captureRef:p}),(0,Mn.jsx)(Iv,{}),(0,Mn.jsx)(Gx,{cameraConfig:t}),(0,Mn.jsx)(Ux,{active:d}),(0,Mn.jsx)(Fx,{color:P}),k?(0,Mn.jsx)(Xs,{onError:B=>console.warn("Failed to load environment map:",B),children:(0,Mn.jsx)(vi.Suspense,{fallback:null,children:(0,Mn.jsx)(n0.Environment,{...k,environmentIntensity:T?.intensity??.25,backgroundIntensity:T?.intensity??.25,background:r?.background.enabled===!0&&r.background.type==="environment"})})}):null,(0,Mn.jsx)(jx,{rotation:T?.rotation??0}),h&&(0,Mn.jsx)(zx,{onPresentingChange:C}),E?.enabled&&E.mode==="shadowCatcher"&&!S&&!v&&(0,Mn.jsx)(Vx,{position:[0,E.height,0],scale:E.size,opacity:E.intensity,blur:E.borderFade,far:15,resolution:1024,color:"#000000"}),e,(0,Mn.jsx)(t0,{sceneConfig:r,selectedObjectRef:o,hoveredObjectRef:a,highlightOnHover:s,disabled:w||v}),v?(0,Mn.jsx)(tP,{toneMapping:r?.postProcessing.toneMapping}):null]});return(0,Mn.jsx)(Cc.Canvas,{frameloop:f||g&&!S?"never":l,onCreated:({gl:B})=>b?.(B),dpr:[1,M],shadows:_?"soft":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:x,camera:t??{fov:50},gl:v?Av:{preserveDrawingBuffer:u,toneMapping:ao.NoToneMapping,toneMappingExposure:1},flat:v||void 0,children:h&&!v?(0,Mn.jsxs)(r0.XR,{store:h,children:[(0,Mn.jsx)(Bx,{renderMode:l,suspended:f}),D]}):D})}var eP={linear:ao.LinearToneMapping,reinhard:ao.ReinhardToneMapping,aces:ao.ACESFilmicToneMapping};function tP({toneMapping:e}){let t=(0,Cc.useThree)(a=>a.gl),n=(0,Cc.useThree)(a=>a.invalidate),i=e?.enabled===!0,r=e?.mode??"aces",o=e?.exposure??1;return(0,vi.useEffect)(()=>{t.toneMapping=i?eP[r]:ao.NoToneMapping,t.toneMappingExposure=i?o:1,n()},[t,n,i,r,o]),null}var ju=require("@react-three/drei"),Tc=require("three"),so=require("react");var Fu=e=>e*Math.PI/180;function i0(e){return{minDistance:e?.minDistance??0,maxDistance:e?.maxDistance??1/0,minPolarAngle:Fu(e?.minPolarAngle??0),maxPolarAngle:Fu(e?.maxPolarAngle??180),minAzimuthAngle:Fu(e?.minAzimuthAngle??-1/0),maxAzimuthAngle:Fu(e?.maxAzimuthAngle??1/0),boundaryEnclosesCamera:e?.boundaryEnclosesCamera??!1,boundaryFriction:e?.boundaryFriction??0,panBoundary:e?.panBoundary}}var $h=new WeakSet;function o0(e,t){t?$h.add(e):$h.delete(e)}function il(e,t){return $h.has(e)?0:t}var Yh=require("react/jsx-runtime");function Kh({controlsRef:e,onCameraChange:t,cameraLimits:n,controllerType:i="orbit",onPointerLockExit:r,reducedMotion:o=!1}){let a=i==="orbit",s=(0,so.useRef)(null);return(0,so.useEffect)(()=>{if(!a)return s.current?.lock(),()=>{s.current?.unlock()}},[a]),(0,so.useEffect)(()=>{a&&document.pointerLockElement&&document.exitPointerLock()},[a]),(0,so.useEffect)(()=>{if(a)return;let l=()=>{document.pointerLockElement||r?.()};return document.addEventListener("pointerlockchange",l),()=>{document.removeEventListener("pointerlockchange",l)}},[a,r]),(0,so.useEffect)(()=>{if(!a||!e||typeof e!="object"||!("current"in e))return;let l=e.current;l&&o0(l,o)},[a,e,o]),(0,so.useEffect)(()=>{if(!a||!t||!e||typeof e!="object"||!("current"in e))return;let l=e.current;if(!l)return;let c=()=>{t(l.camera,l)};return l.addEventListener("update",c),()=>{l.removeEventListener("update",c)}},[a,e,t]),(0,so.useEffect)(()=>{if(!a||!e||typeof e!="object"||!("current"in e))return;let l=e.current;if(!l)return;let c=i0(n);l.minDistance=c.minDistance,l.maxDistance=c.maxDistance,l.minPolarAngle=c.minPolarAngle,l.maxPolarAngle=c.maxPolarAngle,l.minAzimuthAngle=c.minAzimuthAngle,l.maxAzimuthAngle=c.maxAzimuthAngle,l.boundaryEnclosesCamera=c.boundaryEnclosesCamera,l.boundaryFriction=c.boundaryFriction,l.setBoundary(c.panBoundary?new Tc.Box3(new Tc.Vector3(...c.panBoundary[0]),new Tc.Vector3(...c.panBoundary[1])):void 0)},[a,e,n?.minDistance,n?.maxDistance,n?.minPolarAngle,n?.maxPolarAngle,n?.minAzimuthAngle,n?.maxAzimuthAngle,n?.boundaryEnclosesCamera,n?.boundaryFriction,n?.panBoundary]),a?(0,Yh.jsx)(ju.CameraControls,{ref:e,makeDefault:!0,smoothTime:o?0:.3,dollyToCursor:!0}):(0,Yh.jsx)(ju.PointerLockControls,{ref:s,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}var xi=require("react"),Ac=require("@react-three/fiber"),s0=require("three");var Zh=Symbol("react-immersive.model-node-id");function nP(e,t){Object.defineProperty(e,Zh,{value:t,configurable:!0})}function lo(e){let t=new Map;e.traverse(l=>{if(!l.name)return;let c=t.get(l.name);c?c.push(l):t.set(l.name,[l])});let n=Object.create(null),i=new WeakMap,r=new Map,o=new Set(Array.from(t,([l,c])=>c.length===1?l:null).filter(l=>l!==null)),a=new Set,s=(l,c)=>{nP(l,c),n[c]=l,i.set(l,c),a.add(c)};for(let[l,c]of t)c.length===1&&s(c[0],l);for(let[l,c]of t){if(c.length<2)continue;let h=[];c.forEach((p,u)=>{let m=`${l} [${u+1}]`,f=m,g=2;for(;o.has(f)||a.has(f);)f=`${m}.${g++}`;s(p,f),h.push(f)}),r.set(l,h)}return{nodesById:n,idByNode:i,duplicateNames:r}}function Pc(e){return e[Zh]??e.name??null}function yi(e,t){let n=null,i=[];return e.traverse(r=>{r[Zh]===t&&(n=r),r.name===t&&i.push(r)}),n??(i.length===1?i[0]:null)}var Qr=require("react/jsx-runtime");function l0(e,t){if(!t)return e;let n=t*Math.PI/180,i=Math.cos(n),r=Math.sin(n);return[e[0]*i+e[2]*r,e[1],-e[0]*r+e[2]*i]}function rP(e,t){let[n,i,r]=e.center,o=e.radius,a=Math.hypot(t[0],t[1],t[2]),s=a>1e-6?[t[0]/a,t[1]/a,t[2]/a]:[0,1,0],l=o*2;return{position:[n+s[0]*l,i+s[1]*l,r+s[2]*l],target:e.center,extent:o,near:Math.max(o/100,.001),far:l+o*2}}function iP(e,t){let n=t[0]-e.center[0],i=t[1]-e.center[1],r=t[2]-e.center[2],o=Math.hypot(n,i,r);return{near:Math.max(o-e.radius,o*.01,.001),far:o+e.radius*2}}function oP(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var aP={ambient:{intensity:.25,color:"#ffffff"},lights:[{id:"light-hemi",type:"hemisphere",color:"#ffffff",intensity:.3,position:[0,1,0],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0},{id:"light-key",type:"directional",color:"#ffffff",intensity:2.5,position:[6,12,6],attachedToCamera:!1,castShadow:!0,shadowBias:-5e-4,visible:!0},{id:"light-fill",type:"directional",color:"#ffffff",intensity:0,position:[-6,8,-6],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}]},sP={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function a0({light:e,shadows:t,shadowsEnabled:n,environmentRotation:i,modelBounds:r,objectBindings:o,nodeRefs:a}){let s=(0,xi.useRef)(null),l=(0,xi.useRef)(null),c=(0,xi.useRef)(null),h=(0,Ac.useThree)(y=>y.camera),p=(0,Ac.useThree)(y=>y.scene),u=(0,xi.useMemo)(()=>new s0.Vector3,[]),m=(0,xi.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:l0(e.position,i),[e.position,e.attachedToCamera,e.attachment,i]);(0,Ac.useFrame)(()=>{let y=s.current??l.current??c.current;if(!y)return;if(e.attachedToCamera){y.position.copy(h.position);return}let v=e.attachment;if(!v)return;let w=o?jo(o,v.objectId):null,_=(w?o?.[w]:void 0)?.modelObjectId??v.objectId,x=(w?a?.current[w]:void 0)??yi(p,_);x&&(u.fromArray(v.offset),x.localToWorld(u),y.position.copy(u))});let f=n&&t.enabled&&e.castShadow,g=(0,xi.useMemo)(()=>e.type==="directional"&&f&&r&&!e.attachedToCamera?rP(r,m):null,[e.type,e.attachedToCamera,f,r,m]),b=(0,xi.useMemo)(()=>e.type==="spot"&&f&&r&&!e.attachedToCamera?iP(r,m):null,[e.type,e.attachedToCamera,f,r,m]);return(0,xi.useEffect)(()=>{let y=s.current??c.current;if(!y)return;let[v,w,M]=oP(e,f,r);y.target.position.set(v,w,M),y.target.updateMatrixWorld()},[e,f,r]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,Qr.jsx)("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:g?.position??m,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":g?.near??.5,"shadow-camera-far":g?.far??40,"shadow-camera-left":-(g?.extent??8),"shadow-camera-right":g?.extent??8,"shadow-camera-top":g?.extent??8,"shadow-camera-bottom":-(g?.extent??8)}):e.type==="point"?(0,Qr.jsx)("pointLight",{ref:l,color:e.color,intensity:e.intensity,position:m,distance:e.distance,decay:e.decay,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?(0,Qr.jsx)("spotLight",{ref:c,color:e.color,intensity:e.intensity,position:m,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":b?.near??.5,"shadow-camera-far":b?.far??40}):e.type==="hemisphere"?(0,Qr.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function Jh({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:i=0,environmentConfig:r,modelBounds:o,objectBindings:a,nodeRefs:s}){let l=e??aP,c=t??sP,h=r?.shadowLight,p=l0([5,10,5],i);return(0,Qr.jsxs)(Qr.Fragment,{children:[(0,Qr.jsx)("ambientLight",{intensity:l.ambient.intensity,color:l.ambient.color}),l.lights.map(u=>(0,Qr.jsx)(a0,{light:u,shadows:c,shadowsEnabled:n,environmentRotation:i,modelBounds:o,objectBindings:a,nodeRefs:s},u.id)),h?.enabled&&(0,Qr.jsx)(a0,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:h.intensity,position:p,attachedToCamera:!1,castShadow:!0,shadowBias:h.bias,visible:!0},shadows:c,shadowsEnabled:n,environmentRotation:0,modelBounds:o,objectBindings:a,nodeRefs:s})]})}var me=require("react"),$a=require("@react-three/fiber");var Ec=require("@react-three/fiber"),Xa=require("three"),Xo=require("three-stdlib"),b0=require("three/examples/jsm/loaders/USDLoader.js");var lP=require("@react-three/drei"),cP=require("@react-three/fiber"),dP=require("react"),c0=require("three");var ol=require("three-stdlib");function uP(e){return{name:"RI_unlit_emissive_texture",async afterRoot(t){let n=e.json.materials??[],i=new Map;if(n.forEach(o=>{let a=!!o?.extensions?.KHR_materials_unlit,s=!!o?.pbrMetallicRoughness?.baseColorTexture;a&&!s&&o?.emissiveTexture&&o.name&&i.set(o.name,o.emissiveTexture.index)}),i.size===0||!t.scene)return;let r=new Map;await Promise.all([...i].map(async([o,a])=>{let s=await e.getDependency("texture",a);s&&(s.colorSpace=c0.SRGBColorSpace,r.set(o,s))})),t.scene.traverse(o=>{let a=Array.isArray(o.material)?o.material:o.material?[o.material]:[];for(let s of a){let l=s.name?r.get(s.name):void 0;l&&!s.map&&(s.map=l,s.needsUpdate=!0)}})}}}var Qh="https://assets.react-immersive.liveroom.dev/three-r184/draco/",ef="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function pP(e,t){if(!Ii(t))return e.detectSupport(t);let n=t,i=r=>n.hasFeature(r);return e.workerConfig={astcSupported:i("texture-compression-astc"),etc1Supported:i("texture-compression-etc1"),etc2Supported:i("texture-compression-etc2"),dxtSupported:i("texture-compression-s3tc"),bptcSupported:i("texture-compression-bc"),pvrtcSupported:i("texture-compression-pvrtc")},e}function d0(e,t={},n){let{dracoDecoderPath:i=Qh,ktx2TranscoderPath:r=ef,meshopt:o=!0}=t;if(i){let a=new ol.DRACOLoader;a.setDecoderPath(i),e.setDRACOLoader(a)}if(o&&e.setMeshoptDecoder(ol.MeshoptDecoder),r&&n){let a=pP(new ol.KTX2Loader().setTranscoderPath(r),n);e.setKTX2Loader(a)}e.register((a=>uP(a)))}var tf="KHR_materials_variants",u0="riMaterialVariants",p0="riMaterialVariantGroups";function nr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function mP(e){if(!nr(e)||!nr(e.extensions))return[];let t=e.extensions[tf];if(!nr(t)||!Array.isArray(t.variants))return[];let n=new Set;return t.variants.map((i,r)=>{let o=nr(i)&&typeof i.name=="string"&&i.name?i.name:`Variant ${r+1}`,a=o;for(let s=2;n.has(a);s+=1)a=`${o} (${s})`;return n.add(a),a})}function m0(e){let t=e.userData?.gltfExtensions;if(!nr(t))return[];let n=t[tf];return!nr(n)||!Array.isArray(n.mappings)?[]:n.mappings.filter(i=>nr(i)&&Number.isInteger(i.material)&&Array.isArray(i.variants)&&i.variants.every(Number.isInteger))}function h0(e,t){for(let n=t.length-1;n>=0;n-=1){let i=t[n];if(i<0)continue;let r=e.find(o=>o.variants.includes(i));if(r)return r.material}return null}var hP=/^\s*(.+?)\s*(?::|\s\/\s)\s*(.+?)\s*$/;function fP(e){let t=Math.min(Math.max(e,0),1),n=t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055;return Math.round(n*255)}function gP(e){if(!nr(e))return;let t=nr(e.pbrMetallicRoughness)?e.pbrMetallicRoughness:{};if(t.baseColorTexture!==void 0)return;let n=Array.isArray(t.baseColorFactor)?t.baseColorFactor:[1,1,1,1];if(n.slice(0,3).every(i=>typeof i=="number"))return`#${n.slice(0,3).map(i=>fP(i).toString(16).padStart(2,"0")).join("")}`}function bP(e,t){if(t.length===0)return[];let n=nr(e)?e:{},i=Array.isArray(n.meshes)?n.meshes:[],r=Array.isArray(n.accessors)?n.accessors:[],o=Array.isArray(n.materials)?n.materials:[],a=t.map(()=>new Set),s=t.map(()=>new Map);i.forEach((m,f)=>{(nr(m)&&Array.isArray(m.primitives)?m.primitives:[]).forEach((b,y)=>{if(!nr(b))return;let v=nr(b.extensions)?b.extensions[tf]:void 0;if(!nr(v)||!Array.isArray(v.mappings))return;let w=nr(b.attributes)?b.attributes.POSITION:void 0,M=typeof w=="number"?r[w]:void 0,_=nr(M)&&typeof M.count=="number"?M.count:1;for(let x of v.mappings)if(!(!nr(x)||!Number.isInteger(x.material)||!Array.isArray(x.variants)))for(let P of x.variants){if(!Number.isInteger(P)||!a[P])continue;a[P].add(`${f}/${y}`);let d=s[P],S=x.material;d.set(S,(d.get(S)??0)+_)}})});let l=t.map((m,f)=>{let g=null;for(let[y,v]of s[f])(g===null||v>(s[f].get(g)??0))&&(g=y);let b=g===null?void 0:gP(o[g]);return{name:m,label:m,...b?{swatch:b}:{}}}),c=t.map(()=>-1),h=[],p=new Map;return t.forEach((m,f)=>{let g=hP.exec(m);if(!g)return;let[,b,y]=g;p.has(b)||(p.set(b,h.length),h.push({name:b,members:[]})),c[f]=p.get(b),h[c[f]].members.push(f),l[f].label=y}),t.map((m,f)=>f).filter(m=>c[m]<0).sort((m,f)=>+(a[m].size===0)-+(a[f].size===0)).forEach(m=>{let f=h.map((y,v)=>({group:y,groupIndex:v})).filter(({group:y})=>y.name===null&&y.members.some(v=>a[m].size===0||a[v].size===0?!1:[...a[m]].some(w=>a[v].has(w)))).map(({groupIndex:y})=>y);if(f.length===0&&a[m].size===0){let y=h.findIndex(v=>v.name===null);y>=0&&f.push(y)}if(f.length===0){c[m]=h.length,h.push({name:null,members:[m]});return}let[g,...b]=f;for(let y of b){for(let v of h[y].members)c[v]=g;h[g].members.push(...h[y].members),h[y].members=[]}c[m]=g,h[g].members.push(m)}),h.filter(m=>m.members.length>0).sort((m,f)=>Math.min(...m.members)-Math.min(...f.members)).map(m=>({name:m.name,variants:[...m.members].sort((f,g)=>f-g).map(f=>l[f])}))}function Gu(e,t,n){let i=n.find(o=>o.variants.some(a=>a.name===t)),r=new Set(i?.variants.map(o=>o.name)??[t]);return[...e.filter(o=>!r.has(o)),t]}function Wo(e){if(Array.isArray(e.activeVariants))return e.activeVariants.filter(n=>typeof n=="string");let t=e.materialVariant;return typeof t=="string"&&t?[t]:[]}function f0(e){let t=e.parser,n=mP(t?.json);if(!(!t||n.length===0))return e.scene.userData[u0]=n,e.scene.userData[p0]=bP(t.json,n),{names:n,resolveMaterial:async(i,r)=>{let o={geometry:r.geometry,material:await t.getDependency("material",i),isPoints:r.isPoints,isLine:r.isLine};return t.assignFinalMaterial(o),o.material}}}function nf(e){let t=e.userData?.[u0];return Array.isArray(t)&&t.every(n=>typeof n=="string")?t:[]}function al(e){let t=e.userData?.[p0];if(Array.isArray(t))return t;let n=nf(e);return n.length>0?[{name:null,variants:n.map(i=>({name:i,label:i}))}]:[]}function sl(e,t){let{materialVariant:n,...i}=e;return{...i,activeVariants:t}}var Wu=class extends Xa.Loader{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(n){return this.options=n,this}load(n,i,r,o){this.loadAsset(n,r).then(i).catch(o)}async loadAsset(n,i){let r=xP(this.options.source),{format:o}=this.options.source;if(o==="obj")return vP(n,r,this.options.source,i);if(o==="fbx"){let l=rf(this,new Xo.FBXLoader(r)),c=_P(n,this.options.source);c&&l.setResourcePath(c);let h=await l.loadAsync(n,i);return Hu(h,"FBXMesh",!1),{scene:h,animations:h.animations??[]}}if(o==="stl"||o==="ply"){let l=await yP(n,r,i),c=wy(this.options.source.entryPath??n,o==="stl"?"STL model":"PLY model"),h=o==="stl"?Sy(l,c):_y(l,c);return Hu(h,o==="stl"?"STLMesh":"PLYMesh",!0),{scene:h,animations:[]}}if(o==="usdz"){let c=await rf(this,new b0.USDLoader(r)).loadAsync(n,i);return Hu(c,"USDZMesh",!1),{scene:c,animations:c.animations??[]}}let a=rf(this,new Xo.GLTFLoader(r));d0(a,this.options.decoderConfig,this.options.renderer);let s=await a.loadAsync(n,i);return{scene:s.scene,animations:s.animations??[],materialVariants:f0(s)}}};ny(e=>{Ec.useLoader.clear(Wu,e)});function v0(e,t={},n,i){let r=(0,Ec.useThree)(s=>s.gl),o=py(e),a=n?{...o,format:n}:o;return(0,Ec.useLoader)(Wu,e,s=>{s.configure({source:a,decoderConfig:t,renderer:r})},i)}async function vP(e,t,n,i){let r=await g0(e,t,i),o=new Xo.OBJLoader(t),a=wP(r);if(a){let l=SP(a,e,n);if(l)try{let c=await g0(l.url,t),p=new Xo.MTLLoader(t).parse(c,l.basePath);p.preload(),o.setMaterials(p)}catch(c){console.warn(`[react-immersive] Could not load OBJ material ${a}; rendering geometry with fallback materials.`,c)}}let s=o.parse(r);return Hu(s,"OBJMesh",!0),{scene:s,animations:[]}}function Hu(e,t,n){let i=new Set,r=0;e.traverse(o=>{if(!("isMesh"in o&&o.isMesh===!0)){o.name&&i.add(o.name);return}let s=o.name||`${t}_${++r}`;if(!n&&o.name){i.add(o.name);return}let l=s,c=2;for(;i.has(l);)l=`${s}_${c++}`;o.name=l,i.add(l)})}function g0(e,t,n){let i=new Xa.FileLoader(t);return i.setResponseType("text"),i.loadAsync(e,n)}function yP(e,t,n){let i=new Xa.FileLoader(t);return i.setResponseType("arraybuffer"),i.loadAsync(e,n)}function rf(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function xP(e){let t=new Xa.LoadingManager,n=e.resourceUrls;return n&&t.setURLModifier(i=>{if(/^(?:blob:|data:)/i.test(i))return i;let r=qu(x0(i).split(/[?#]/)[0]),o=n[r];if(o)return o;let a=Xu(e.entryPath??""),s=qu(a?`${a}/${r}`:r);return n[s]??i}),t}function wP(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function SP(e,t,n){if(n.resourceUrls&&n.entryPath){let i=qu(`${Xu(n.entryPath)}/${x0(e)}`),r=n.resourceUrls[i];if(!r)return null;let o=Xu(i);return{url:r,basePath:o?`${o}/`:""}}try{let i=new URL(e,t).href;return{url:i,basePath:y0(i)}}catch{return null}}function _P(e,t){if(t.resourceUrls&&t.entryPath){let n=Xu(t.entryPath);return n?`${n}/`:""}return y0(e)}function y0(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function Xu(e){let t=qu(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function qu(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(i=>i&&i!=="."))n===".."?t.pop():t.push(n);return t.join("/")}function x0(e){try{return decodeURI(e)}catch{return e}}var ut=require("three"),P0=require("three-stdlib");function w0(e){let t=new Map;return e.map((n,i)=>{let o=n.name.trim()||`Animation ${i+1}`,a=t.get(o)??0;return t.set(o,a+1),{clip:n,sourceName:a===0?o:`${o} (${a+1})`,duration:n.duration}})}var co=require("three");function S0(e){let t=e._loopCount;return e.loop===co.LoopPingPong&&(t&1)===1}function MP(e){return S0(e)?e.getClip().duration-e.time:e.time}function _0({root:e,clips:t,getClipConfig:n,onChange:i}){let r=new co.AnimationMixer(e),o=new Map;for(let{clip:C,sourceName:T}of t)o.set(T,r.clipAction(C));let a=new Map,s=new Set,l=new Map,c=1,h=C=>typeof C=="string",p=C=>h(C)?a.has(C)?[C]:[]:[...a.keys()],u=(C,T)=>{let E=Yy(n(T));E==="once"?C.setLoop(co.LoopOnce,1):E==="ping-pong"?C.setLoop(co.LoopPingPong,1/0):C.setLoop(co.LoopRepeat,1/0),C.clampWhenFinished=E==="once"},m=C=>{C.action.setEffectiveTimeScale(C.reverse?-C.speed:C.speed)},f=C=>{let T=a.get(C);T&&(T.action.stop(),a.delete(C))},g=(C,T={})=>{let E=o.get(C);if(!E||n(C)?.hidden)return;let k=Number.isFinite(T.fade)&&T.fade>0?T.fade:0,D=T.reverse??!1;if(!T.alongside)for(let[O,I]of[...a])O!==C&&(k>0?(a.delete(O),I.action.fadeOut(k),s.add(I.action)):f(O));s.delete(E)&&E.stop();let B=E.getClip().duration,L=a.get(C),X=()=>{E.reset(),D&&(E.time=B),E.play()};if(!L)X(),k>0&&E.fadeIn(k);else{let O=D?E.time<=0:E.time>=B;L.finished&&O&&X(),E.paused=!1,E.enabled=!0,a.delete(C)}u(E,C),L={action:E,speed:n(C)?.speed??l.get(C)??c,reverse:D,finished:!1},L.speed=xu(L.speed),m(L),a.set(C,L),i()},b=C=>{for(let T of p(C))a.get(T).action.paused=!0;i()},y=C=>{for(let T of p(C))f(T);if(!h(C)){for(let T of s)T.stop();s.clear()}i()},v=(C,T)=>{let E=xu(C);h(T)?l.set(T,E):c=E;for(let k of p(T)){let D=a.get(k);l.set(k,E),D.speed=E,m(D)}i()},w=(C,T)=>{for(let E of p(T)){let k=a.get(E),D=k.action.getClip().duration,B=Math.min(Math.max(C,0),D);k.action.time=S0(k.action)?D-B:B,k.finished&&(k.finished=!1,k.action.paused=!0)}r.update(0),i()},M=()=>{for(let[C,T]of[...a]){let E=n(C);if(E?.hidden){f(C);continue}u(T.action,C),E?.speed!==void 0&&(T.speed=xu(E.speed),m(T))}i()},_=C=>{for(let T of a.values())T.action===C.action&&(T.finished=!0);i()};return r.addEventListener("finished",_),{play:g,pause:b,stop:y,setSpeed:v,seek:w,getState:()=>{let C=[...a].map(([E,k])=>({clip:E,status:k.finished?"finished":k.action.paused?"paused":"playing",time:MP(k.action),duration:k.action.getClip().duration,speed:k.speed,reverse:k.reverse})),T=C[C.length-1];return{currentClip:T?.clip??null,isPlaying:C.some(E=>E.status==="playing"),speed:T?.speed??c,time:T?.time??0,duration:T?.duration??0,active:C}},applyClipConfigs:M,isRunning:()=>{if(s.size>0)return!0;for(let{action:C}of a.values())if(!C.paused&&C.enabled)return!0;return!1},update:C=>{r.update(C);for(let T of s)(!T.enabled||T.getEffectiveWeight()<=0)&&(T.stop(),s.delete(T))},dispose:()=>{r.removeEventListener("finished",_),r.stopAllAction(),r.uncacheRoot(e),a.clear(),s.clear()}}}var ei=require("three");function $u(e){if(Fy(e))return e;if(!e||typeof e!="object")return null;let t=e,n=new ei.MeshStandardMaterial;typeof t.name=="string"&&(n.name=t.name),n.metalness=0,n.roughness=1,t.type==="MeshBasicMaterial"||t.isMeshBasicMaterial===!0?(n.color.set(0),n.emissiveIntensity=1,t.map instanceof ei.Texture?(n.emissiveMap=t.map,n.emissive.set(16777215)):t.color instanceof ei.Color&&n.emissive.copy(t.color)):(t.color instanceof ei.Color&&n.color.copy(t.color),t.map instanceof ei.Texture&&(n.map=t.map),t.emissive instanceof ei.Color&&n.emissive.copy(t.emissive),t.emissiveMap instanceof ei.Texture&&(n.emissiveMap=t.emissiveMap));let r=["aoMap","aoMapIntensity","lightMap","lightMapIntensity","alphaMap","opacity","transparent","alphaTest","side","vertexColors","wireframe","depthTest","depthWrite","visible","toneMapped","fog"];for(let o of r)t[o]!==void 0&&(n[o]=t[o]);return n.needsUpdate=!0,n}function Yu(e){if(jy(e))return e.clone();let t=new ei.MeshPhysicalMaterial;return t.name=e.name,t.color.copy(e.color),t.map=e.map,t.lightMap=e.lightMap,t.lightMapIntensity=e.lightMapIntensity,t.aoMap=e.aoMap,t.aoMapIntensity=e.aoMapIntensity,t.emissive.copy(e.emissive),t.emissiveIntensity=e.emissiveIntensity,t.emissiveMap=e.emissiveMap,t.bumpMap=e.bumpMap,t.bumpScale=e.bumpScale,t.normalMap=e.normalMap,t.normalMapType=e.normalMapType,t.normalScale.copy(no(e.normalScale)),t.displacementMap=e.displacementMap,t.displacementScale=e.displacementScale,t.displacementBias=e.displacementBias,t.roughness=e.roughness,t.roughnessMap=e.roughnessMap,t.metalness=e.metalness,t.metalnessMap=e.metalnessMap,t.alphaMap=e.alphaMap,t.envMap=e.envMap,t.envMapRotation.copy(e.envMapRotation),t.envMapIntensity=e.envMapIntensity,t.wireframe=e.wireframe,t.wireframeLinewidth=e.wireframeLinewidth,t.flatShading=e.flatShading,t.fog=e.fog,t.opacity=e.opacity,t.transparent=e.transparent,t.alphaHash=e.alphaHash,t.blendSrc=e.blendSrc,t.blendDst=e.blendDst,t.blendEquation=e.blendEquation,t.blendSrcAlpha=e.blendSrcAlpha,t.blendDstAlpha=e.blendDstAlpha,t.blendEquationAlpha=e.blendEquationAlpha,t.blending=e.blending,t.premultipliedAlpha=e.premultipliedAlpha,t.dithering=e.dithering,t.alphaTest=e.alphaTest,t.depthTest=e.depthTest,t.depthWrite=e.depthWrite,t.colorWrite=e.colorWrite,t.stencilWrite=e.stencilWrite,t.stencilWriteMask=e.stencilWriteMask,t.stencilFunc=e.stencilFunc,t.stencilRef=e.stencilRef,t.stencilFuncMask=e.stencilFuncMask,t.stencilFail=e.stencilFail,t.stencilZFail=e.stencilZFail,t.stencilZPass=e.stencilZPass,t.side=e.side,t.shadowSide=e.shadowSide,t.toneMapped=e.toneMapped,t.vertexColors=e.vertexColors,t.visible=e.visible,t.clippingPlanes=e.clippingPlanes,t.clipIntersection=e.clipIntersection,t.clipShadows=e.clipShadows,t.forceSinglePass=e.forceSinglePass,t.polygonOffset=e.polygonOffset,t.polygonOffsetFactor=e.polygonOffsetFactor,t.polygonOffsetUnits=e.polygonOffsetUnits,t}function Ku(e){e.userData.baseColor=e.color.clone(),e.userData.baseMap=e.map??null,e.userData.baseVertexColors=e.vertexColors,e.userData.baseMetalness=e.metalness,e.userData.baseMetalnessMap=e.metalnessMap??null,e.userData.baseRoughness=e.roughness,e.userData.baseRoughnessMap=e.roughnessMap??null,e.userData.baseEmissive=e.emissive.clone(),e.userData.baseEmissiveIntensity=e.emissiveIntensity,e.userData.baseEmissiveMap=e.emissiveMap??null,e.userData.baseOpacity=e.opacity,e.userData.baseTransparent=e.transparent,e.userData.baseAlphaMap=e.alphaMap??null,e.userData.baseAlphaTest=e.alphaTest,e.userData.baseAlphaHash=e.alphaHash,e.userData.baseDithering=e.dithering,e.userData.baseBlending=e.blending,e.userData.baseDepthWrite=e.depthWrite,e.userData.baseSide=e.side,e.userData.baseNormalMap=e.normalMap??null,e.userData.baseNormalScale=no(e.normalScale),e.userData.baseBumpMap=e.bumpMap??null,e.userData.baseBumpScale=e.bumpScale,e.userData.baseAoMap=e.aoMap??null,e.userData.baseAoMapIntensity=e.aoMapIntensity,e.userData.baseDisplacementMap=e.displacementMap??null,e.userData.baseDisplacementScale=e.displacementScale,e.userData.baseDisplacementBias=e.displacementBias,e.userData.baseClearcoat=e.clearcoat,e.userData.baseClearcoatMap=e.clearcoatMap??null,e.userData.baseClearcoatRoughness=e.clearcoatRoughness,e.userData.baseClearcoatRoughnessMap=e.clearcoatRoughnessMap??null,e.userData.baseClearcoatNormalMap=e.clearcoatNormalMap??null,e.userData.baseClearcoatNormalScale=no(e.clearcoatNormalScale),e.userData.baseSheen=e.sheen,e.userData.baseSheenColor=e.sheenColor.clone(),e.userData.baseSheenColorMap=e.sheenColorMap??null,e.userData.baseSheenRoughness=e.sheenRoughness,e.userData.baseSheenRoughnessMap=e.sheenRoughnessMap??null,e.userData.baseAnisotropy=e.anisotropy,e.userData.baseAnisotropyRotation=e.anisotropyRotation,e.userData.baseAnisotropyMap=e.anisotropyMap??null,e.userData.baseTransmission=e.transmission,e.userData.baseTransmissionMap=e.transmissionMap??null,e.userData.baseThickness=e.thickness,e.userData.baseThicknessMap=e.thicknessMap??null,e.userData.baseAttenuationColor=e.attenuationColor.clone(),e.userData.baseAttenuationDistance=e.attenuationDistance,e.userData.baseReflectivity=e.reflectivity,e.userData.baseSpecularIntensity=e.specularIntensity,e.userData.baseSpecularIntensityMap=e.specularIntensityMap??null,e.userData.baseSpecularColor=e.specularColor.clone(),e.userData.baseSpecularColorMap=e.specularColorMap??null,e.userData.baseFlatShading=e.flatShading,e.userData.baseEnvMapIntensity=e.envMapIntensity}var zi=require("three");function M0(e,t,n,i){let r=mi(t),o=xc(n,r),a=Gy(i,t),s=Hy(i,t),l=Wy(i,t);return a||s||l?Mu(e.userData,t,o,n,a??[0,0],s??1,l??0):(Cu(e.userData,t),o)}function qn(e,t,n,i){if(!n){Cu(e.userData,t);return}let r=yu[t];e[r]=M0(e,t,n,i)}function Zu(e,t,n){e.map=e.userData.baseMap??null,e.color.copy(e.userData.baseColor),e.vertexColors=e.userData.baseVertexColors??e.vertexColors,e.metalness=e.userData.baseMetalness??e.metalness,e.metalnessMap=e.userData.baseMetalnessMap??null,e.roughness=e.userData.baseRoughness??e.roughness,e.roughnessMap=e.userData.baseRoughnessMap??null,e.emissive.copy(e.userData.baseEmissive??new zi.Color(0,0,0)),e.emissiveIntensity=e.userData.baseEmissiveIntensity??e.emissiveIntensity,e.emissiveMap=e.userData.baseEmissiveMap??null,e.opacity=e.userData.baseOpacity??1,e.transparent=e.userData.baseTransparent??!1,e.alphaMap=e.userData.baseAlphaMap??null,e.alphaTest=e.userData.baseAlphaTest??0,e.alphaHash=e.userData.baseAlphaHash??!1,e.dithering=e.userData.baseDithering??!1,e.blending=e.userData.baseBlending??zi.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??zi.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(no(e.userData.baseNormalScale)),e.bumpMap=e.userData.baseBumpMap??null,e.bumpScale=e.userData.baseBumpScale??e.bumpScale,e.aoMap=e.userData.baseAoMap??null,e.aoMapIntensity=e.userData.baseAoMapIntensity??e.aoMapIntensity,e.displacementMap=e.userData.baseDisplacementMap??null,e.displacementScale=e.userData.baseDisplacementScale??e.displacementScale,e.displacementBias=e.userData.baseDisplacementBias??e.displacementBias,e.clearcoat=e.userData.baseClearcoat??e.clearcoat,e.clearcoatMap=e.userData.baseClearcoatMap??null,e.clearcoatRoughness=e.userData.baseClearcoatRoughness??e.clearcoatRoughness,e.clearcoatRoughnessMap=e.userData.baseClearcoatRoughnessMap??null,e.clearcoatNormalMap=e.userData.baseClearcoatNormalMap??null,e.clearcoatNormalScale.copy(no(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new zi.Color(0,0,0)),e.sheenColorMap=e.userData.baseSheenColorMap??null,e.sheenRoughness=e.userData.baseSheenRoughness??e.sheenRoughness,e.sheenRoughnessMap=e.userData.baseSheenRoughnessMap??null,e.anisotropy=e.userData.baseAnisotropy??e.anisotropy,e.anisotropyRotation=e.userData.baseAnisotropyRotation??e.anisotropyRotation,e.anisotropyMap=e.userData.baseAnisotropyMap??null,e.transmission=e.userData.baseTransmission??e.transmission,e.transmissionMap=e.userData.baseTransmissionMap??null,e.thickness=e.userData.baseThickness??e.thickness,e.thicknessMap=e.userData.baseThicknessMap??null,e.attenuationColor.copy(e.userData.baseAttenuationColor??new zi.Color("#ffffff")),e.attenuationDistance=e.userData.baseAttenuationDistance??e.attenuationDistance,e.reflectivity=e.userData.baseReflectivity??e.reflectivity,e.specularIntensity=e.userData.baseSpecularIntensity??e.specularIntensity,e.specularIntensityMap=e.userData.baseSpecularIntensityMap??null,e.specularColor.copy(e.userData.baseSpecularColor??new zi.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let i=on(t,"texture"),r=on(t,"metalnessMap"),o=on(t,"roughnessMap"),a=on(t,"emissiveMap"),s=on(t,"alphaMap"),l=on(t,"normalMap"),c=on(t,"bumpMap"),h=on(t,"aoMap"),p=on(t,"displacementMap"),u=on(t,"clearcoatMap"),m=on(t,"clearcoatRoughnessMap"),f=on(t,"clearcoatNormalMap"),g=on(t,"anisotropyMap"),b=on(t,"transmissionMap"),y=on(t,"thicknessMap"),v=on(t,"sheenColorMap"),w=on(t,"sheenRoughnessMap"),M=on(t,"specularIntensityMap"),_=on(t,"specularColorMap");if(i?(e.map=M0(e,"texture",i,t),e.color.set(n??"#ffffff"),e.vertexColors=!1):(Cu(e.userData,"texture"),n&&(e.map=null,e.color.set(n),e.vertexColors=!1)),qn(e,"metalnessMap",r,t),t?.metalness!==void 0&&(e.metalness=t.metalness),qn(e,"roughnessMap",o,t),t?.roughness!==void 0&&(e.roughness=t.roughness),t?.emissive?e.emissive.set(t.emissive):a&&e.emissive.set("#ffffff"),t?.emissiveIntensity!==void 0&&(e.emissiveIntensity=t.emissiveIntensity),qn(e,"emissiveMap",a,t),t?.opacity!==void 0&&(e.opacity=t.opacity),qn(e,"alphaMap",s,t),t?.alphaTest!==void 0&&(e.alphaTest=t.alphaTest),t?.alphaHash!==void 0&&(e.alphaHash=t.alphaHash),t?.dithering!==void 0&&(e.dithering=t.dithering),t?.blendingMode&&(e.blending=qy(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=Xy(t.side)),qn(e,"normalMap",l,t),l||t?.normalScale!==void 0){let x=t?.normalScale??Math.abs(no(e.userData.baseNormalScale).x);e.normalScale.set(x,t?.flipNormalY?-x:x)}if(qn(e,"bumpMap",c,t),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),qn(e,"aoMap",h,t),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),qn(e,"displacementMap",p,t),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),qn(e,"clearcoatMap",u,t),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),qn(e,"clearcoatRoughnessMap",m,t),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),qn(e,"clearcoatNormalMap",f,t),f||t?.clearcoatNormalScale!==void 0){let x=t?.clearcoatNormalScale??Math.abs(no(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(x,t?.flipClearcoatNormalY?-x:x)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),qn(e,"sheenColorMap",v,t),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),qn(e,"sheenRoughnessMap",w,t),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),qn(e,"anisotropyMap",g,t),t?.transmission!==void 0&&(e.transmission=t.transmission),qn(e,"transmissionMap",b,t),t?.thickness!==void 0&&(e.thickness=t.thickness),qn(e,"thicknessMap",y,t),t?.attenuationColor&&e.attenuationColor.set(t.attenuationColor),t?.attenuationDistance!==void 0&&(e.attenuationDistance=t.attenuationDistance),t?.reflectivity!==void 0&&(e.reflectivity=t.reflectivity),t?.specularIntensity!==void 0&&(e.specularIntensity=t.specularIntensity),qn(e,"specularIntensityMap",M,t),t?.specularColor&&e.specularColor.set(t.specularColor),qn(e,"specularColorMap",_,t),e.transparent=e.opacity<1||e.transmission>0||e.blending!==zi.NormalBlending||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function Rc(e){return e.material}function Ui(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function Tr(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function Ju(e,t){return Array.isArray(e)?e[t]:e}function of(e){e.updateMatrixWorld(!0),e.traverse(t=>{let n=t;n.isSkinnedMesh&&(n.skeleton?.update(),n.computeBoundingBox?.(),n.computeBoundingSphere?.())})}var qa=require("react"),C0=require("@react-three/fiber");function T0(){let e=(0,C0.useThree)(r=>r.gl.domElement),t=(0,qa.useRef)(void 0),n=(0,qa.useCallback)(r=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=r},[e]),i=(0,qa.useCallback)(()=>{let r=t.current;r!==void 0&&(e.style.cursor=r,t.current=void 0)},[e]);return(0,qa.useEffect)(()=>()=>{i()},[i]),{setCanvasCursor:n,restoreCanvasCursor:i}}var af=require("react/jsx-runtime");function Qu(e,t,n){let i=n.get(e);i&&(t?.position?e.position.fromArray(t.position):e.position.copy(i.position),t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],i.rotation.order):e.rotation.copy(i.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(i.scale),e.updateMatrix())}function An(e,t=!1){if(!e||typeof e!="object")return"-";let n=e;return[n.channel??0,t?n.format??"":"",n.isVideoTexture?n.colorSpace??"":""].join(":")}function ll(e){let t=e,n=Number(t.clearcoat)>0,i=Number(t.sheen)>0,r=Number(t.anisotropy)>0,o=Number(t.transmission)>0,a=t.transparent===!1&&t.blending===ut.NormalBlending&&t.alphaToCoverage!==!0;return[An(t.map),An(t.aoMap),An(t.lightMap),An(t.bumpMap),An(t.normalMap,!0),t.normalMap?t.normalMapType:"",An(t.displacementMap),An(t.emissiveMap),An(t.metalnessMap),An(t.roughnessMap),r,An(r?t.anisotropyMap:null),n,An(n?t.clearcoatMap:null),An(n?t.clearcoatNormalMap:null,!0),An(n?t.clearcoatRoughnessMap:null),i,An(i?t.sheenColorMap:null),An(i?t.sheenRoughnessMap:null),An(t.specularColorMap),An(t.specularIntensityMap),o,An(o?t.transmissionMap:null),An(o?t.thicknessMap:null),An(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,!!t.vertexColors,t.side,a].join("|")}var CP={};function sf({url:e,objectBindings:t,selectedItem:n,itemMaterials:i,onItemClick:r,onItemHover:o,onItemDoubleClick:a,onItemContextMenu:s,onModelLoaded:l,onAnimationsReady:c,nodeRefsOut:h,onNodeRefsChange:p,materialRefsOut:u,panelHoveredItem:m,sceneConfig:f,zoomOnSelected:g=!0,highlightOnHover:b=!0,decoderConfig:y,modelFormat:v,onLoadProgress:w,explodeFactor:M=0,suspendBindingTransforms:_=!1,pulses:x=CP}){let P=v0(e,y,v,w),d=(0,$a.useThree)(z=>z.invalidate),[S,C]=(0,me.useState)(null),T=(0,me.useRef)(null),{setCanvasCursor:E,restoreCanvasCursor:k}=T0();(0,me.useEffect)(()=>{b||(C(null),o?.(null),k())},[b,o,k]);let D=(0,me.useMemo)(()=>P0.SkeletonUtils.clone(P.scene),[P.scene]),B=(0,me.useMemo)(()=>lo(D),[D]),L=B.nodesById,X=(0,me.useMemo)(()=>{let z=new WeakMap;return D.traverse(U=>{tr(U)&&z.set(U,U.material)}),z},[D]),O=P.materialVariants,re=(f?Wo(f.model):[]).join(`
|
|
3674
|
+
`),[ke,te]=(0,me.useState)(null);(0,me.useEffect)(()=>{let z=re?re.split(`
|
|
3675
|
+
`):[],U=[];for(let Q of z){let fe=O?O.names.indexOf(Q):-1;if(fe>=0){U.push(fe);continue}console.warn(`[react-immersive] The model has no material variant "${Q}".`+(O?` Its variants are: ${O.names.join(", ")}.`:" It has no material variants."))}if(!O||U.length===0){te(null);return}let H=!1,oe=[];return D.traverse(Q=>{if(!tr(Q)||!X.has(Q))return;let fe=h0(m0(Q),U);fe!==null&&oe.push(O.resolveMaterial(fe,Q).then(we=>[Q,we]))}),Promise.all(oe).then(Q=>{H||te({scene:D,materials:new Map(Q)})}).catch(Q=>{H||console.warn(`[react-immersive] Material variants "${z.join('", "')}" failed to load.`,Q)}),()=>{H=!0}},[D,X,O,re]);let We=ke?.scene===D?ke.materials:void 0,wt=z=>We?.get(z)??X.get(z)??Rc(z);(0,me.useEffect)(()=>{B.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(B.duplicateNames))},[B]);let be=(0,me.useMemo)(()=>{let z=new WeakMap;return D.traverse(U=>{z.set(U,{position:U.position.clone(),rotation:U.rotation.clone(),scale:U.scale.clone()})}),z},[D]);(0,me.useEffect)(()=>{let z=!1,U=null,H=null,oe=window,Q=Object.entries(L).filter(([,Vt])=>tr(Vt)),fe=new ut.Box3,we=[],pn=0;D.traverse(Vt=>{!tr(Vt)||Vt.userData[Ua]||(Vt.castShadow=!1,Vt.receiveShadow=!0)});let tt=()=>{if(z)return;let Vt=new Set,Se=fe.getSize(new ut.Vector3),Ht=new ut.Vector3;for(let{name:Ln,box:jn}of we)jn.getSize(Ht),Ht.x>Se.x*.7&&Ht.z>Se.z*.7&&Ht.y>Se.y*.4&&Vt.add(Ln);D.traverse(Ln=>{if(!tr(Ln)||Ln.userData[Ua])return;let jn=Pc(Ln);Ln.castShadow=!jn||!Vt.has(jn),Ln.receiveShadow=!0}),d()},$e=()=>{z||(oe.requestIdleCallback?U=oe.requestIdleCallback(Ye,{timeout:100}):H=window.setTimeout(()=>Ye(),0))},Ye=Vt=>{if(U=null,H=null,z)return;let Se=performance.now(),Ht=0;for(;pn<Q.length&&!(Ht>0&&!(Vt?Vt.didTimeout?Ht<16:Vt.timeRemaining()>1:performance.now()-Se<8));){let[Ln,jn]=Q[pn];pn+=1,Ht+=1;let xr=new ut.Box3().setFromObject(jn);xr.isEmpty()||(we.push({name:Ln,box:xr}),fe.union(xr))}pn<Q.length?$e():tt()};return $e(),()=>{z=!0,U!==null&&oe.cancelIdleCallback?.(U),H!==null&&window.clearTimeout(H)}},[d,L,D]),(0,me.useEffect)(()=>{of(D)},[D]),(0,me.useEffect)(()=>{let z=new AbortController;return Qd(D,z.signal),()=>{z.abort(),lc(D)}},[D]);let ue=(0,me.useMemo)(()=>{let z={};for(let[U,H]of Object.entries(t))z[H.modelObjectId??U]=U;return z},[t]),Ne=(0,me.useMemo)(()=>Object.entries(t).map(([z,U])=>`${z}${U.modelObjectId??z}`).sort().join(""),[t]),Te=(0,me.useMemo)(()=>Object.entries(t).map(([z,U])=>JSON.stringify([z,U.modelObjectId??z,U.transform??null])).sort().join(""),[t]),bn=(0,me.useRef)(new Map);(0,me.useEffect)(()=>{let z=new Map,U=new Map;for(let[Q,fe]of Object.entries(t)){if(!fe.transform)continue;let we=L[fe.modelObjectId??Q];we&&(z.set(we,fe.transform),U.set(we,Zs(we)))}let H=new Set([...bn.current.keys(),...z.keys()]);for(let Q of H){Qu(Q,void 0,be);for(let fe of Zs(Q))Js(fe)}D.updateMatrixWorld(!0);let oe=new Map;for(let Q of U.values())for(let fe of Q)oe.has(fe)||oe.set(fe,fe.matrixWorld.clone());for(let[Q,fe]of z)Qu(Q,fe,be);bn.current=z,D.updateMatrixWorld(!0);for(let[Q,fe]of oe)wu(Q,fe);d()},[D,L,be,Te,d]),(0,me.useEffect)(()=>()=>{for(let z of Zs(D))Js(z)},[D]);let Oe=(0,me.useMemo)(()=>{let z={};for(let[U,H]of Object.entries(t)){let oe=H.modelObjectId??U,Q=L[oe];if(!tr(Q))continue;let fe=wt(Q);fe&&(z[U]=Ui(fe,we=>{let pn=$u(we),tt=Yu(pn??new ut.MeshStandardMaterial);return Ku(tt),tt}))}return z},[L,Ne,X,We]);(0,me.useEffect)(()=>{u&&(u.current=Oe)},[Oe,u]),(0,me.useEffect)(()=>()=>{for(let z of Object.values(Oe))Tr(z,U=>{rx(U.userData),U.dispose()})},[Oe]);let ot=f?.model.shading??"lit",mt=f?.model.renderer??"pbr",vn=f?.wireframe.enabled??!1,de=f?.wireframe.color??"#93c5fd",ur=f?.wireframe.opacity??1,jt=(0,me.useMemo)(()=>{let z={};if(ot!=="unlit")return z;for(let[U,H]of Object.entries(Oe))z[U]=Ui(H,oe=>{let Q=new ut.MeshBasicMaterial;return Q.color.copy(oe.color),Q.map=oe.map,Q.alphaMap=oe.alphaMap,Q.alphaTest=oe.alphaTest,Q.transparent=oe.transparent,Q.opacity=oe.opacity,Q.side=oe.side,Q});return z},[Oe,ot]),Gt=(0,me.useMemo)(()=>{let z={};if(ot!=="normals")return z;for(let[U,H]of Object.entries(Oe))z[U]=Ui(H,()=>new ut.MeshNormalMaterial);return z},[Oe,ot]),ce=(0,me.useMemo)(()=>{let z={};if(ot!=="lit"||mt!=="matcap")return z;let U=Tu();for(let[H,oe]of Object.entries(Oe))z[H]=Ui(oe,Q=>{let fe=new ut.MeshMatcapMaterial;return fe.matcap=U,fe.color.copy(Q.color),fe.alphaMap=Q.alphaMap,fe.alphaTest=Q.alphaTest,fe.side=Q.side,fe});return z},[Oe,ot,mt]);(0,me.useEffect)(()=>()=>{for(let z of Object.values(jt))Tr(z,U=>U.dispose());for(let z of Object.values(Gt))Tr(z,U=>U.dispose());for(let z of Object.values(ce))Tr(z,U=>U.dispose())},[jt,Gt,ce]);let Ie=z=>ot==="normals"?Gt[z]:ot==="unlit"?jt[z]:mt==="matcap"?ce[z]:Oe[z],zt=(0,me.useRef)(l);zt.current=l,(0,me.useEffect)(()=>{zt.current?.(D)},[D]);let gt=(0,me.useMemo)(()=>{let z={};for(let[U,H]of Object.entries(t)){let oe=H.modelObjectId??U,Q=L[oe];Q&&(z[U]=Q)}return z},[L,Ne]);(0,me.useEffect)(()=>(h.current=gt,p?.(),()=>{h.current===gt&&(h.current={})}),[gt,h,p]);let Ut=(0,me.useRef)({});(0,me.useEffect)(()=>()=>{for(let z of Object.values(Ut.current))for(let[U,H]of Object.entries(z))H&&io(H,mi(U));Ut.current={}},[]);let Ae=(0,me.useMemo)(()=>{let z=new Map;for(let[U,H]of Object.entries(t)){let oe=m===H||m?.id===H.id||m?.modelObjectId===H.modelObjectId,Q=b&&(S===U||oe),fe=Q||n===U;(Q||fe)&&z.set(U,{emissive:Q,matcap:fe})}return z},[t,b,S,n,m]),Ce=(0,me.useRef)(Ae);Ce.current=Ae,(0,me.useEffect)(()=>{let z=new Set;for(let[U,H]of Object.entries(t)){z.add(U);let oe=H.modelObjectId??U,Q=L[oe];if(!tr(Q))continue;Q.visible=H.visible!==!1;let fe=Oe[U];if(!fe)continue;if(mt!=="uv-checker"){let Se=Ie(U);Se&&(Q.material=Se)}if(H.visible===!1)continue;let we=jt[U],pn=ce[U],tt=i[U]??i[H.modelObjectId??U],$e=H.style?.material,Ye=Ut.current[U]??{};for(let Se of Bi){let Ht=on($e,Se),Ln=Ye[Se];if(Ln===Ht)continue;let jn=mi(Se);Ln&&io(Ln,jn),Ht?(tl(Ht,jn,d),Ye[Se]=Ht):delete Ye[Se]}Object.keys(Ye).length>0?Ut.current[U]=Ye:delete Ut.current[U];let Vt=tt?.hex??$e?.baseColor;Tr(fe,(Se,Ht)=>{let Ln=ll(Se);Zu(Se,$e,Vt);let jn=Se.userData.reactImmersiveConfiguredEmissive;jn?.isColor?jn.copy(Se.emissive):Se.userData.reactImmersiveConfiguredEmissive=Se.emissive.clone();let xr=Ce.current.get(U);xr?.emissive&&Se.emissive.add(Ba),Ln!==ll(Se)&&(Se.needsUpdate=!0);let mn=Ju(we,Ht);if(mn){let Xi=ll(mn);mn.color.copy(Se.color),mn.map=Se.map,mn.vertexColors=Se.vertexColors,mn.alphaMap=Se.alphaMap,mn.alphaTest=Se.alphaTest,mn.transparent=Se.transparent,mn.opacity=Se.opacity,mn.side=Se.side,Xi!==ll(mn)&&(mn.needsUpdate=!0)}let Cn=Ju(pn,Ht);if(Cn){let Xi=ll(Cn);xr?.matcap?Cn.color.set(ro.color):Cn.color.copy(Se.color),Cn.map=Se.map,Cn.vertexColors=Se.vertexColors,Cn.alphaMap=Se.alphaMap,Cn.alphaTest=Se.alphaTest,Cn.transparent=Se.transparent,Cn.opacity=Se.opacity,Cn.side=Se.side,Xi!==ll(Cn)&&(Cn.needsUpdate=!0)}})}for(let U of Object.keys(Ut.current))if(!z.has(U)){for(let[H,oe]of Object.entries(Ut.current[U]))oe&&io(oe,mi(H));delete Ut.current[U]}d()},[t,L,Oe,jt,Gt,ce,i,ot,mt,d]);let Pt=(0,me.useRef)(new Map);(0,me.useEffect)(()=>{let z=Pt.current,U=new Set([...z.keys(),...Ae.keys()]),H=!1;for(let oe of U){let Q=z.get(oe),fe=Ae.get(oe),we=!!Q?.emissive!=!!fe?.emissive,pn=!!Q?.matcap!=!!fe?.matcap;if(!we&&!pn)continue;H=!0;let tt=Oe[oe],$e=ce[oe];tt&&Tr(tt,(Ye,Vt)=>{let Se=Ye.userData.reactImmersiveConfiguredEmissive;we&&Se?.isColor&&(Ye.emissive.copy(Se),fe?.emissive&&Ye.emissive.add(Ba));let Ht=Ju($e,Vt);pn&&Ht&&(fe?.matcap?Ht.color.set(ro.color):Ht.color.copy(Ye.color))})}Pt.current=Ae,H&&d()},[Ae,Oe,ce,d]),ax({objectBindings:t,nodeMap:L,invalidate:d});let St=(0,me.useMemo)(()=>Object.entries(x).map(([z,U])=>({key:z,color:new ut.Color(U.color),speed:U.speed})),[x]),dn=(0,me.useRef)(new Set);(0,me.useEffect)(()=>{let z=new Set(St.map(({key:U})=>U));for(let U of dn.current){if(z.has(U)||!Oe[U])continue;let H=Ce.current.get(U)?.emissive;Tr(Oe[U],oe=>{let Q=oe.userData.reactImmersiveConfiguredEmissive;Q?.isColor&&(oe.emissive.copy(Q),H&&oe.emissive.add(Ba))})}dn.current=z,d()},[St,Oe,d]),(0,$a.useFrame)(({clock:z})=>{if(St.length===0)return;let U=z.getElapsedTime();for(let{key:H,color:oe,speed:Q}of St){let fe=Oe[H];if(!fe)continue;let we=(1-Math.cos(2*Math.PI*Q*U))/2,pn=Ce.current.get(H)?.emissive;Tr(fe,tt=>{let $e=tt.userData.reactImmersiveConfiguredEmissive;$e?.isColor&&(tt.emissive.copy($e).lerp(oe,we),pn&&tt.emissive.add(Ba))})}d()}),(0,me.useEffect)(()=>{if(mt==="uv-checker")return;let z=new Set(Object.values(gt)),U=!1;D.traverse(H=>{if(!tr(H)||z.has(H)||!X.has(H))return;let oe=We?.get(H)??X.get(H);H.material!==oe&&(H.material=oe,U=!0)}),U&&d()},[D,gt,X,We,mt,d]),(0,me.useEffect)(()=>{if(mt!=="uv-checker")return;let z=ix(),U=[];return D.traverse(H=>{if(!tr(H)||H.userData[Ua])return;let oe=H.material,Q=Array.isArray(oe)?oe:[oe],fe=!!H.geometry.getAttribute("uv"),we=Q.map((tt,$e)=>{let Ye=new ut.MeshBasicMaterial({color:fe?"#ffffff":"#ff00ff",map:fe?z:null,side:tt.side});return Ye.name=`${H.name||"mesh"}-uv-checker-${$e}`,Ye.toneMapped=!1,Ye}),pn=Array.isArray(oe)?we:we[0];H.material=pn,U.push({node:H,original:oe,diagnostic:pn})}),d(),()=>{for(let{node:H,original:oe,diagnostic:Q}of U){H.material=oe;let fe=Array.isArray(Q)?Q:[Q];for(let we of fe)we.dispose()}d()}},[D,mt,d]),(0,me.useEffect)(()=>{if(!vn)return;let z=[];for(let[U,H]of Object.entries(t)){let oe=H.modelObjectId??U,Q=L[oe];if(!tr(Q))continue;let fe=new ut.MeshBasicMaterial({color:de,wireframe:!0,transparent:!0,opacity:ur,depthTest:!1,depthWrite:!1,side:ut.DoubleSide,toneMapped:!1}),we=Q.clone(!1);we.name="",we.position.set(0,0,0),we.quaternion.identity(),we.scale.set(1,1,1),we.matrix.identity(),we.matrixAutoUpdate=!0,we.material=fe,we.castShadow=!1,we.receiveShadow=!1,we.frustumCulled=!1,we.renderOrder=1,we.userData={isWireframeOverlay:!0},we.raycast=()=>{},Q.morphTargetInfluences&&(we.morphTargetInfluences=Q.morphTargetInfluences),Q.add(we),z.push({node:Q,overlay:we})}return d(),()=>{for(let{node:U,overlay:H}of z)U.remove(H),H.material.dispose()}},[vn,de,ur,L,t,d]);let ae=(0,me.useMemo)(()=>w0(P.animations),[P.animations]),he=(0,me.useRef)(c);he.current=c;let Ee=(0,me.useRef)(f);Ee.current=f;let Be=(0,me.useRef)(null),_t=(0,me.useRef)(new Set),Je=(0,me.useRef)(0),et=z=>{_t.current.forEach(U=>U(z))};(0,me.useEffect)(()=>{let z=_0({root:D,clips:ae,getClipConfig:H=>$y(Ee.current,H),onChange:()=>{et(z.getState()),d()}});Be.current=z,he.current?.({clips:ae.map(({sourceName:H})=>H),clipDetails:ae.map(({sourceName:H,duration:oe})=>({sourceName:H,duration:oe})),play:z.play,pause:z.pause,stop:z.stop,setSpeed:z.setSpeed,seek:z.seek,getState:z.getState,subscribe:H=>(_t.current.add(H),H(z.getState()),()=>{_t.current.delete(H)})}),et(z.getState());let U=Ee.current?.animations.autoplayClip;return U&&z.play(U),()=>{z.dispose(),Be.current=null,et(z.getState())}},[D,ae]),(0,me.useEffect)(()=>{f?.animations&&Be.current?.applyClipConfigs()},[f?.animations]),(0,$a.useFrame)((z,U)=>{let H=Be.current;if(H?.isRunning()){if(H.update(U),!_)for(let[oe,Q]of bn.current)Qu(oe,Q,be);d(),Je.current+=U,Je.current>=.066&&(Je.current=0,et(H.getState()),of(D))}});let ve=(0,me.useMemo)(()=>(f?.model.rotation??[0,0,0]).map(z=>z*Math.PI/180),[f?.model.rotation]);(0,$a.useFrame)((z,U)=>{if(!T.current)return;let H=T.current.rotation;H.x=ut.MathUtils.lerp(H.x,ve[0],1-Math.exp(-5*U)),H.y=ut.MathUtils.lerp(H.y,ve[1],1-Math.exp(-5*U)),H.z=ut.MathUtils.lerp(H.z,ve[2],1-Math.exp(-5*U)),Math.abs(H.x-ve[0])<1e-4&&Math.abs(H.y-ve[1])<1e-4&&Math.abs(H.z-ve[2])<1e-4||d()});let Qe=(0,me.useRef)([]),bt=(0,me.useRef)(0),un=(0,me.useRef)(0),or=(0,me.useMemo)(()=>new ut.Vector3,[]);(0,me.useEffect)(()=>{let z=new Map;for(let[tt,$e]of Object.entries(t)){let Ye=L[$e.modelObjectId??tt];Ye&&z.set(Ye,$e)}for(let tt of Qe.current)Qu(tt.node,z.get(tt.node)?.transform,be);un.current=0,D.updateWorldMatrix(!0,!0);let U=new ut.Box3().setFromObject(D),H=U.getCenter(new ut.Vector3),oe=U.getSize(new ut.Vector3).length()*.5;bt.current=Number.isFinite(oe)?oe:0;let Q=[...z.keys()],fe=new Set(Q),we=[],pn=new ut.Vector3;for(let tt of Q){if(!tt.parent)continue;let $e=tt.parent,Ye=!1;for(;$e;){if(fe.has($e)){Ye=!0;break}$e=$e.parent}if(Ye)continue;let Vt=new ut.Box3().setFromObject(tt);if(Vt.isEmpty())continue;Vt.getCenter(pn);let Se=pn.clone().sub(H);Se.lengthSq()<1e-8||(Se.normalize(),we.push({node:tt,restLocalPos:tt.position.clone(),restWorldPos:tt.getWorldPosition(new ut.Vector3),worldDir:Se,parentInverse:new ut.Matrix4().copy(tt.parent.matrixWorld).invert()}))}Qe.current=we,d()},[D,L,Ne,Te,be,d]),(0,me.useEffect)(()=>{d()},[M,d]),(0,$a.useFrame)((z,U)=>{let H=Qe.current;if(H.length===0)return;let oe=Math.min(Math.max(M,0),1),Q=un.current;if(Math.abs(Q-oe)<1e-4){if(Q===oe)return;un.current=oe}else un.current=ut.MathUtils.lerp(Q,oe,1-Math.exp(-6*U)),d();let fe=un.current*bt.current;for(let we of H)or.copy(we.worldDir).multiplyScalar(fe).add(we.restWorldPos).applyMatrix4(we.parentInverse),we.node.position.copy(or)});let yn=z=>{let U=z;for(;U;){let H=Pc(U),oe=H?ue[H]:void 0;if(oe&&t[oe])return[oe,t[oe]];U=U.parent}return null},Vn=z=>{let U=yn(z);if(!U)return null;let[H,oe]=U;return L[oe.modelObjectId??H]??null},yr=Pu(z=>{let U=yn(z);return U&&U[1].selectable!==!1?U[1]:null},s,Vn),Fn=z=>{if(yr.consumeClick())return;let U=yn(z.object);if(!U)return;let[,H]=U;H.selectable!==!1&&(z.stopPropagation(),r(H,nl(z,Vn(z.object))))},li=z=>{let U=yn(z.object);if(!U)return;let[,H]=U;if(H.selectable===!1)return;a?.(H,nl(z,Vn(z.object)))&&z.stopPropagation()},ha=z=>{if(!b)return;let U=yn(z.object);if(!U)return;let[H,oe]=U;oe.hoverable!==!1&&(z.stopPropagation(),E("pointer"),C(H),o?.(oe))},kn=z=>{b&&(z.stopPropagation(),k(),C(null),o?.(null))},Dr=(0,me.useMemo)(()=>!wv(D),[D]);return(0,af.jsx)("group",{ref:T,children:(0,af.jsx)("primitive",{object:D,...Dr?{onClick:Fn,onDoubleClick:li,...s?{onPointerDown:yr.onPointerDown}:{},...b?{onPointerOver:ha,onPointerOut:kn}:{}}:{}})})}var Ke=require("react");var Ep=require("@react-three/fiber");var en=require("three");var Zt=require("three");function R0(e){let t={};for(let[n,i]of Object.entries(e))t[i.modelObjectId??n]=n;return t}function cf(e){let t=e,n=null;for(;t;){let i=t.userData?.ri_name;if(typeof i=="string"&&i)return i;!n&&t.name&&(n=t.name),t=t.parent}return n}function k0(e,t){return e||(t?t.modelObjectId??t.id:null)}function np(e,t){let n=cf(e);if(!n)return null;let i=t.keyByModelObject[n]??n,r=t.objectBindings[i];return r?{key:i,binding:r}:null}var cl=new Zt.Vector3,lf=new Zt.Vector3,TP=new Zt.Matrix4,A0=new Zt.Matrix4,ep=new Zt.Matrix4,PP=new Zt.Matrix4,tp=new Zt.Matrix4,AP=new Zt.Matrix4,EP=new Zt.Matrix4,RP=new Zt.Vector3,kP=new Zt.Vector3,qo=new Zt.Vector3,E0=new Zt.Quaternion,LP=new Zt.Euler;function DP(e,t,n,i,r){let o=!!(n?.position||n?.rotation||n?.scale),a=!!(r&&r.factor>0&&r.radius>0);if(!o&&!a){e.matrixAutoUpdate=!0,e.position.copy(t.position),e.rotation.copy(t.rotation),e.scale.copy(t.scale),e.updateMatrix(),e.updateWorldMatrix(!0,!1);return}A0.compose(t.position,E0.setFromEuler(t.rotation),t.scale);let s=n?.rotation;ep.compose(RP.fromArray(n?.position??[0,0,0]),E0.setFromEuler(LP.set(s?.[0]??0,s?.[1]??0,s?.[2]??0)),kP.fromArray(n?.scale??[1,1,1])),ep.premultiply(i).multiply(PP.copy(i).invert()),e.parent?.updateWorldMatrix(!0,!1);let l=e.parent?.matrixWorld??TP;if(tp.multiplyMatrices(l,A0).premultiply(ep),a&&r){let c=e;for(;c.parent&&!c.userData.ri_name;)c=c.parent;let h=c.userData.ri_center;Array.isArray(h)&&h.length===3?qo.fromArray(h).applyMatrix4(i).applyMatrix4(ep):qo.setFromMatrixPosition(tp),qo.sub(r.centre),qo.lengthSq()>1e-8&&(qo.normalize().multiplyScalar(r.factor*r.radius),tp.premultiply(EP.makeTranslation(qo.x,qo.y,qo.z)))}e.matrixAutoUpdate=!1,e.matrix.multiplyMatrices(AP.copy(l).invert(),tp),e.matrixWorldNeedsUpdate=!0,e.updateWorldMatrix(!1,!1)}function rp(e,t){if(!tr(e)&&!e.userData.riLogicalObject)return;let n=np(e,t);if(!n)return;let i=L0(e);if(i.rest??(i.rest={position:e.position.clone(),rotation:e.rotation.clone(),scale:e.scale.clone()}),t.suspendTransforms)return;if(t.placementFrame&&!e.userData.riLogicalObject){DP(e,i.rest,n.binding.transform,t.placementFrame,t.explode);return}let r=i.rest,o=n.binding.transform;o?.position?e.position.fromArray(o.position):e.position.copy(r.position),o?.rotation?e.rotation.set(o.rotation[0],o.rotation[1],o.rotation[2],r.rotation.order):e.rotation.copy(r.rotation),o?.scale?e.scale.fromArray(o.scale):e.scale.copy(r.scale);let a=t.explode;if(a&&a.factor>0&&a.radius>0){e.updateWorldMatrix(!0,!1),lf.setFromMatrixPosition(e.matrixWorld);let s=e;for(;s.parent&&!s.userData.ri_name;)s=s.parent;let l=s.userData.ri_center;Array.isArray(l)&&l.length===3?cl.fromArray(l).applyMatrix4(e.matrixWorld).sub(a.centre):cl.copy(lf).sub(a.centre),cl.lengthSq()>1e-8&&(cl.normalize().multiplyScalar(a.factor*a.radius).add(lf),e.parent&&e.parent.worldToLocal(cl),e.position.copy(cl))}e.updateMatrix(),e.updateWorldMatrix(!0,!1)}function dl(e,t){e.traverse(n=>rp(n,t))}function L0(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function NP(e,t,n,i){return JSON.stringify([e?.style?.material??null,t??null,n.shadingMode,n.rendererMode,i])}function OP(e){if(e.textures){for(let t of Bi){let n=e.textures[t];n&&io(n,mi(t))}e.textures=void 0}}function IP(e,t,n){let i=e.textures??{};for(let r of Bi){let o=on(t,r),a=i[r];if(a===o)continue;let s=mi(r);a&&io(a,s),o?(tl(o,s,n),i[r]=o):delete i[r]}e.textures=Object.keys(i).length>0?i:void 0}function BP(e,t){if(t.shadingMode==="normals")return Ui(e,()=>new Zt.MeshNormalMaterial);if(t.shadingMode==="unlit")return Ui(e,n=>{let i=new Zt.MeshBasicMaterial;return i.color.copy(n.color),i.map=n.map,i.vertexColors=n.vertexColors,i.alphaMap=n.alphaMap,i.alphaTest=n.alphaTest,i.transparent=n.transparent,i.opacity=n.opacity,i.side=n.side,i});if(t.rendererMode==="matcap"){let n=Tu();return Ui(e,i=>{let r=new Zt.MeshMatcapMaterial;return r.matcap=n,r.color.copy(i.color),r.vertexColors=i.vertexColors,r.alphaMap=i.alphaMap,r.alphaTest=i.alphaTest,r.side=i.side,r})}return e}function zP(e,t){if(!tr(e))return;let i=L0(e);i.original??(i.original=Rc(e));let r=np(e,t);if(!r){i.original&&(e.material=i.original),e.visible=!0;return}let{key:o,binding:a}=r;e.visible=a.visible!==!1,rp(e,t);let s=t.itemMaterials?.[o]?.hex??t.itemMaterials?.[a.modelObjectId??o]?.hex,l=t.highlightOnHover!==!1&&o===t.hoveredKey,c=NP(a,s,t,l);if(i.signature===c&&i.display){e.material=i.display;return}let h=a.style?.material;if(IP(i,h,t.invalidate),!i.physical){let p=i.original??Rc(e);if(!p)return;i.physical=Ui(p,u=>{let m=$u(u),f=Yu(m??new Zt.MeshStandardMaterial);return Ku(f),f})}Tr(i.physical,p=>{Zu(p,h,s??h?.baseColor),l&&(p.emissive.add(Ba),p.color.lerp(Qy,ex)),p.needsUpdate=!0}),i.display&&i.display!==i.physical&&Tr(i.display,p=>p.dispose()),i.display=BP(i.physical,t),i.signature=c,e.material=i.display}function D0(e,t){e.traverse(n=>zP(n,t))}function df(e){e.traverse(t=>{if(!tr(t))return;let n=t.userData.riVisuals;n&&(n.rest&&(t.matrixAutoUpdate=!0,t.position.copy(n.rest.position),t.rotation.copy(n.rest.rotation),t.scale.copy(n.rest.scale),t.updateMatrix()),n.original&&(t.material=n.original),n.display&&n.display!==n.physical&&Tr(n.display,i=>i.dispose()),n.physical&&Tr(n.physical,i=>i.dispose()),OP(n),delete t.userData.riVisuals)})}var O0=new en.Matrix4().makeRotationX(Math.PI/2),N0=O0.clone().invert();function UP(e){let t=new en.Vector3(e[0],e[1],e[2]),n=new en.Vector3(Math.abs(e[3])+Math.abs(e[6])+Math.abs(e[9]),Math.abs(e[4])+Math.abs(e[7])+Math.abs(e[10]),Math.abs(e[5])+Math.abs(e[8])+Math.abs(e[11]));return new en.Box3(t.clone().sub(n),t.clone().add(n))}function VP(e){let t=e.getCenter(new en.Vector3),n=e.getSize(new en.Vector3).multiplyScalar(.5);return[t.x,t.y,t.z,n.x,0,0,0,n.y,0,0,0,n.z]}var ip=class{constructor(){this.group=new en.Group;this.objects=new Map;this.geometry=new en.BoxGeometry(1,1,1);this.material=new en.MeshBasicMaterial;this.originalBounds=new WeakMap;this.signature="";this.lastContext=null;this.lastEffective=null;this.lastDragging=!1;this.version=0;this.tileVersions=new WeakMap;this.transforms=new Map}setCatalog(t){this.group.clear(),this.objects.clear();for(let n of t){let i=new en.Box3(new en.Vector3(...n.minimum),new en.Vector3(...n.maximum)).applyMatrix4(N0),r=new en.Group;r.name=n.name,r.userData.ri_name=n.name,r.userData.riLogicalObject=!0,r.userData.ri_center=i.getCenter(new en.Vector3).toArray();let o=new en.Mesh(this.geometry,this.material);o.visible=!1,o.raycast=()=>{},o.position.copy(i.getCenter(new en.Vector3)),o.scale.copy(i.getSize(new en.Vector3)),r.add(o),this.group.add(r),this.objects.set(n.name,r)}this.signature="",this.lastContext=null}nodesByBinding(t){let n={};for(let[i,r]of this.objects){let o=t.keyByModelObject[i]??i;t.objectBindings[o]&&(n[o]=r)}return n}sync(t,n,i=!1){if(!i&&!this.lastDragging&&t===this.lastContext&&this.lastEffective)return this.lastEffective;this.lastContext=t,this.lastDragging=i;let r={...t,suspendTransforms:!1},o=n?t.objectBindings[n]:void 0,a=o?this.objects.get(o.modelObjectId??n):void 0;i&&a&&o&&(r={...r,objectBindings:{...t.objectBindings,[n]:{...o,transform:{position:a.position.toArray(),rotation:[a.rotation.x,a.rotation.y,a.rotation.z],scale:a.scale.toArray()}}}});for(let l of this.objects.values())i&&l===a||rp(l,r);this.group.updateWorldMatrix(!0,!0);let s=[...this.objects].map(([l,c])=>`${l}:${c.matrix.elements.join(",")}`).join(";");if(s!==this.signature){this.signature=s,this.version++,this.transforms.clear();for(let[l,c]of this.objects)c.matrix.equals(new en.Matrix4)||this.transforms.set(l,O0.clone().multiply(c.matrix).multiply(N0))}return this.lastEffective=r,r}updateBounds(t){if(!t)return;let n=i=>{if(this.tileVersions.get(i)!==this.version){if(i.boundingVolume.box&&this.tileVersions.get(i)!==this.version){let r=this.originalBounds.get(i);r||(r={box:[...i.boundingVolume.box],error:i.geometricError},this.originalBounds.set(i,r));let o=UP(r.box),a=o.clone(),s=1;for(let c of i.extras?.featureIds??[]){let h=this.transforms.get(c);h&&(a.union(o.clone().applyMatrix4(h)),s=Math.max(s,h.getMaxScaleOnAxis()))}let l=VP(a);i.boundingVolume.box=l,i.geometricError=r.error*s,i.engineData?.boundingVolume?.setObbData(l,i.engineData.transform),this.tileVersions.set(i,this.version)}i.children?.forEach(n)}};n(t)}dispose(){this.group.clear(),this.objects.clear(),this.geometry.dispose(),this.material.dispose()}};var uf=Object.freeze({factor:1,loosened:!1,tooFine:0,raisedAt:-1/0,changedAt:-1/0}),kc=16,pf=1.25,FP=1.5,jP=1.25,GP=500,HP=3e3,I0=5e3,B0=2e3,WP=.9;function z0(e){return e.full&&(e.wanting||e.usage>1)}function U0(e){return e.loosened?HP:GP}function V0(e){let t=e.factor/jP;return t<=1+1e-6?1:t}function F0(e,t){return e.factor>1&&!e.loosened&&!t.full&&!t.wanting&&t.usage<WP&&V0(e)>e.tooFine}function j0(e,t){let{now:n}=t,i=t.moved&&e.tooFine>0?{...e,tooFine:0}:e;if(z0(t)){if(n-i.changedAt<U0(i))return i;let r=Math.max(i.tooFine,i.factor);return i.factor>=kc?i.loosened&&i.tooFine===r?i:{...i,loosened:!0,tooFine:r,changedAt:n}:{factor:Math.min(kc,i.factor*FP),loosened:!0,tooFine:r,raisedAt:n,changedAt:n}}return i.loosened&&!t.wanting?{...i,loosened:!1,changedAt:n}:F0(i,t)&&n-i.raisedAt>=I0&&n-i.changedAt>=B0?{...i,factor:V0(i),changedAt:n}:i}function G0(e,t){let{now:n}=t;return z0(t)?e.factor>=kc&&e.loosened?null:Math.max(0,U0(e)-(n-e.changedAt)):e.loosened&&!t.wanting?0:F0(e,t)?Math.max(0,I0-(n-e.raisedAt),B0-(n-e.changedAt)):null}function q0(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function mf(e){if(!e)return null;let t=e.length,n=e.indexOf("?"),i=e.indexOf("#");n!==-1&&(t=Math.min(t,n)),i!==-1&&(t=Math.min(t,i));let r=e.lastIndexOf(".",t),o=e.lastIndexOf("/",t),a=e.indexOf("://");return a!==-1&&a+2===o||r===-1||r<o?null:e.substring(r+1,t)||null}var ap,Lc=(ap=class{static setXRSession(e){e!==this.session&&(this.flushPending(),this.session=e)}static requestAnimationFrame(e){let{session:t,pending:n}=this,i,r=()=>{n.delete(i),e()};return i=t?t.requestAnimationFrame(r):requestAnimationFrame(r),n.set(i,e),i}static cancelAnimationFrame(e){let{pending:t,session:n}=this;t.delete(e),n?n.cancelAnimationFrame(e):cancelAnimationFrame(e)}static flushPending(){this.pending.forEach((e,t)=>{e(),this.cancelAnimationFrame(t)})}},fh(ap,"pending",new Map),fh(ap,"session",null),ap),H0=2**30,Oc=class{get unloadPriorityCallback(){return this._unloadPriorityCallback}set unloadPriorityCallback(e){e.length===1?(console.warn('LRUCache: "unloadPriorityCallback" function has been changed to take two arguments.'),this._unloadPriorityCallback=(t,n)=>{let i=e(t),r=e(n);return i<r?-1:+(i>r)}):this._unloadPriorityCallback=e}constructor(){this.minSize=6e3,this.maxSize=8e3,this.minBytesSize=.3*H0,this.maxBytesSize=.4*H0,this.unloadPercent=.05,this.autoMarkUnused=!0,this.cachedBytes=0,this.itemSet=new Map,this.itemList=[],this.usedSet=new Set,this.callbacks=new Map,this.unloadingHandle=-1,this.bytesMap=new Map,this.loadedSet=new Set,this._unloadPriorityCallback=null;let e=this.itemSet;this.defaultPriorityCallback=t=>e.get(t)}isFull(){return this.itemSet.size>=this.maxSize||this.cachedBytes>=this.maxBytesSize}getMemoryUsage(e){return this.bytesMap.get(e)||0}setMemoryUsage(e,t){let{bytesMap:n,itemSet:i}=this;i.has(e)&&(this.cachedBytes-=n.get(e)||0,n.set(e,t),this.cachedBytes+=t)}add(e,t){let n=this.itemSet;if(n.has(e)||this.isFull())return!1;let i=this.usedSet,r=this.itemList,o=this.callbacks;return r.push(e),i.add(e),n.set(e,Date.now()),o.set(e,t),!0}has(e){return this.itemSet.has(e)}remove(e){let t=this.usedSet,n=this.itemSet,i=this.itemList,r=this.bytesMap,o=this.callbacks,a=this.loadedSet;if(n.has(e)){this.cachedBytes-=r.get(e)||0,r.delete(e),o.get(e)(e);let s=i.indexOf(e);return i.splice(s,1),t.delete(e),n.delete(e),o.delete(e),a.delete(e),!0}return!1}setLoaded(e,t){let{itemSet:n,loadedSet:i}=this;n.has(e)&&(t===!0?i.add(e):i.delete(e))}markUsed(e){let t=this.itemSet,n=this.usedSet;t.has(e)&&!n.has(e)&&(t.set(e,Date.now()),n.add(e))}markUnused(e){this.usedSet.delete(e)}markAllUnused(){this.usedSet.clear()}isUsed(e){return this.usedSet.has(e)}unloadUnusedContent(){let{unloadPercent:e,minSize:t,maxSize:n,itemList:i,itemSet:r,usedSet:o,loadedSet:a,callbacks:s,bytesMap:l,minBytesSize:c,maxBytesSize:h}=this,p=i.length-o.size,u=i.length-a.size,m=Math.max(Math.min(i.length-t,p),0),f=this.cachedBytes-c,g=this.unloadPriorityCallback||this.defaultPriorityCallback,b=!1,y=m>0&&p>0||u&&i.length>n;if(p&&this.cachedBytes>c||u&&this.cachedBytes>h||y){i.sort((d,S)=>{let C=o.has(d);if(C===o.has(S)){let T=a.has(d);return T===a.has(S)?-g(d,S):T?1:-1}else return C?1:-1});let v=Math.max(t*e,m*e),w=Math.ceil(Math.min(v,p,m)),M=Math.max(e*f,e*c),_=Math.min(M,f),x=0,P=0;for(;this.cachedBytes-P>h||i.length-x>n;){let d=i[x],S=l.get(d)||0;if(o.has(d)&&a.has(d)||this.cachedBytes-P-S<h&&i.length-x<=n)break;P+=S,x++}for(;P<_||x<w;){let d=i[x],S=l.get(d)||0;if(o.has(d)||this.cachedBytes-P-S<c&&x>=w)break;P+=S,x++}i.splice(0,x).forEach(d=>{this.cachedBytes-=l.get(d)||0,s.get(d)(d),l.delete(d),r.delete(d),s.delete(d),a.delete(d),o.delete(d)}),b=x<m||P<f&&x<p,b&&(b=x>0)}b&&(this.unloadingHandle=Lc.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){Lc.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},XP=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},Vi=class{get running(){return this.items.length!==0||this.currJobs!==0}constructor(){this.maxJobs=6,this.items=[],this.callbacks=new Map,this.currJobs=0,this.scheduled=!1,this.autoUpdate=!0,this.priorityCallback=null,this._schedulingCallback=e=>{Lc.requestAnimationFrame(e)},this._runjobs=()=>{this.scheduled=!1,this.tryRunJobs()}}sort(){let e=this.priorityCallback,t=this.items;e!==null&&t.sort(e)}has(e){return this.callbacks.has(e)}add(e,t){let n={callback:t,reject:null,resolve:null,promise:null};return n.promise=new Promise((i,r)=>{let o=this.items,a=this.callbacks;n.resolve=i,n.reject=r,o.unshift(e),a.set(e,n),this.autoUpdate&&this.scheduleJobRun()}),n.promise}remove(e){let t=this.items,n=this.callbacks,i=t.indexOf(e);if(i!==-1){let r=n.get(e);r.promise.catch(o=>{if(o.name!=="AbortError")throw o}),r.reject(new XP),t.splice(i,1),n.delete(e)}}removeByFilter(e){let{items:t}=this;for(let n=0;n<t.length;n++){let i=t[n];e(i)&&(this.remove(i),n--)}}tryRunJobs(){this.sort();let e=this.items,t=this.callbacks,n=this.maxJobs,i=0,r=()=>{this.currJobs--,this.autoUpdate&&this.scheduleJobRun()};for(;n>this.currJobs&&e.length>0&&i<n;){this.currJobs++,i++;let o=e.pop(),{callback:a,resolve:s,reject:l}=t.get(o);t.delete(o);let c;try{c=a(o)}catch(h){l(h),r();continue}c instanceof Promise?c.then(s).catch(l).finally(r):(s(c),r())}}flush(e){let{items:t,callbacks:n}=this,i=t.indexOf(e);if(!n.has(e))return;let{callback:r,resolve:o,reject:a}=n.get(e);n.delete(e),t.splice(i,1);let s;try{s=r(e)}catch(l){a(l);return}return s instanceof Promise?s.then(o).catch(a):o(s),s}scheduleJobRun(){this.scheduled||(this.scheduled=(this._schedulingCallback(this._runjobs),!0))}},dp=class{get running(){for(let e of this.originQueues.values())if(e.running)return!0;return!1}get maxJobsPerOrigin(){return this._maxJobsPerOrigin}set maxJobsPerOrigin(e){this._maxJobsPerOrigin=e,this.originQueues.forEach(t=>t.maxJobs=e)}get maxJobs(){return this.maxJobsPerOrigin}set maxJobs(e){console.warn('DownloadPriorityQueue: "maxJobs" is no longer valid and limits jobs per server origin. Use "maxJobsPerOrigin", instead.'),this.maxJobsPerOrigin=e}get priorityCallback(){return this._priorityCallback}set priorityCallback(e){this._priorityCallback=e,this.originQueues.forEach(t=>t.priorityCallback=e)}constructor(){this.originQueues=new Map,this._itemQueues=new WeakMap,this._maxJobsPerOrigin=6,this._priorityCallback=null}add(e,t,n,i=null){this.originQueues.forEach((l,c)=>{l.running||this.originQueues.delete(c)});let r=e===null?null:q0(e),o=this.originQueues.get(r);o||(o=new Vi,o.maxJobs=this._maxJobsPerOrigin,o.priorityCallback=this._priorityCallback,this.originQueues.set(r,o));let a=this._itemQueues.get(t);if(a&&a!==o&&a.has(t))throw Error("DownloadPriorityQueue: Item is already queued with a different url origin.");this._itemQueues.set(t,o);let s=o.add(t,n);return i!==null&&(i.aborted?this.remove(t):i.addEventListener("abort",()=>this.remove(t),{once:!0})),s}remove(e){let t=this._itemQueues.get(e);t&&(t.remove(e),this._itemQueues.delete(e))}has(e){let t=this._itemQueues.get(e);return!!(t&&t.has(e))}};var Za=6378137,qP=1/298.257223563,ff=6356752314245179e-9,op={inView:!1,error:1/0,distanceFromCamera:1/0};function up(e){return e===4||e===-1}function uo(e,t){return pp(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function pp(e){return!!e.traversal}function Ic(e){let{children:t}=e,n=t.length===0||pp(t[t.length-1]),i=!e.internal.hasUnrenderableContent||up(e.internal.loadingState);return n&&i}function Ya(e){return e.traversal.unconditionallyRefine}function Dc(e,t){if(pp(e)&&(t.ensureChildrenArePreprocessed(e),e.traversal.lastFrameVisited!==t.frameCount&&(e.traversal.wasInFrustum=e.traversal.inFrustum,e.traversal.wasSetActive=e.traversal.active,e.traversal.wasSetVisible=e.traversal.visible,e.traversal.usedLastFrame=e.traversal.used,e.traversal.lastFrameVisited=t.frameCount,e.traversal.used=!1,e.traversal.inFrustum=!1,e.traversal.isLeaf=!1,e.traversal.visible=!1,e.traversal.active=!1,e.traversal.error=1/0,e.traversal.distanceFromCamera=1/0,e.traversal.allChildrenReady=!1,e.traversal.allChildrenLoaded=!1,e.traversal.kicked=!1,e.traversal.allUsedChildrenProcessed=!1,t.calculateTileViewErrorWithPlugin(e,op),e.traversal.inFrustum=op.inView,e.traversal.error=op.error,e.traversal.distanceFromCamera=op.distanceFromCamera,e.traversal.unconditionallyRefine=e.internal.hasUnrenderableContent,!e.traversal.unconditionallyRefine))){let n=e.parent;for(;n&&n.traversal.unconditionallyRefine;)n=n.parent;n&&n.geometricError<=e.geometricError&&(e.traversal.unconditionallyRefine=!0)}}function hf(e,t,n=!1){if(Dc(e,t),n?t.markTileUsed(e):sp(e),Ya(e)&&Ic(e)){let i=e.children;for(let r=0,o=i.length;r<o;r++)hf(i[r],t,n)}}function $0(e,t){if(Dc(e,t),e.traversal.usedLastFrame&&(sp(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||Ya(e))&&Ic(e))){let n=e.children;for(let i=0,r=n.length;i<r;i++)$0(n[i],t)}}function sp(e){e.traversal.used=!0}function $P(e,t){return!(e.traversal.error<=t.errorTarget&&!Ya(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!Ic(e))}function Y0(e,t){let{frameCount:n}=t,{children:i}=e;for(let r=0,o=i.length;r<o;r++){let a=i[r];uo(a,n)&&(a.traversal.active&&(a.traversal.kicked=!0,a.traversal.active=!1),Y0(a,t))}}function W0(e){return!Ya(e)&&(!e.internal.hasContent||up(e.internal.loadingState))}function K0(e,t){if(Dc(e,t),!e.traversal.inFrustum)return;let n=e.parent;if(n&&n.refine==="ADD"&&e.geometricError>0&&e.traversal.error*(n.geometricError/e.geometricError)<=t.errorTarget)return;if(!$P(e,t)){sp(e);return}let i=!1,r=!1,o=e.children;for(let a=0,s=o.length;a<s;a++){let l=o[a];K0(l,t),i||(i=uo(l,t.frameCount)),r||(r=l.traversal.inFrustum)}if(e.refine==="REPLACE"&&!r&&o.length!==0){e.traversal.inFrustum=!1,t.markTileUsed(e);for(let a=0,s=o.length;a<s;a++)hf(o[a],t,!0);return}if(sp(e),e.refine==="REPLACE"&&i&&(t.loadSiblings||t.loadAncestors))for(let a=0,s=o.length;a<s;a++)hf(o[a],t)}function Z0(e,t){let n=t.frameCount;if(!uo(e,n))return;let i=e.children,r=!1;for(let a=0,s=i.length;a<s;a++){let l=i[a];r||(r=uo(l,n))}if(!r)e.traversal.isLeaf=!0;else{for(let s=0,l=i.length;s<l;s++)Z0(i[s],t);let a=!0;for(let s=0,l=i.length;s<l;s++){let c=i[s];if(uo(c,n)){let h=!Ya(c),p=!c.internal.hasContent||up(c.internal.loadingState);h&&p||c.traversal.allChildrenLoaded||(a=!1)}}e.traversal.allChildrenLoaded=a}let o=!0;for(let a=0,s=i.length;a<s;a++){let l=i[a];uo(l,t.frameCount)&&!l.traversal.allUsedChildrenProcessed&&(o=!1)}e.traversal.allUsedChildrenProcessed=o&&Ic(e)}function J0(e,t){if(!uo(e,t.frameCount))return;let n=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!Ya(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!Ya(e)&&(e.traversal.active=!0,Ic(e)&&e.internal.hasContent&&!up(e.internal.loadingState)))for(let r=0,o=n.length;r<o;r++)$0(n[r],t);return}let i=n.length>0;for(let r=0,o=n.length;r<o;r++){let a=n[r];J0(a,t),uo(a,t.frameCount)&&!(a.traversal.active&&W0(a))&&!a.traversal.allChildrenReady&&(i=!1)}e.traversal.allChildrenReady=i,e.refine==="REPLACE"&&!i&&e.traversal.wasSetActive&&W0(e)&&(e.traversal.active=!0,Y0(e,t))}function Q0(e,t){Dc(e,t);let n=uo(e,t.frameCount);if(n&&(e.internal.hasUnrenderableContent&&(t.markTileUsed(e),t.queueTileForDownload(e)),e.internal.hasRenderableContent&&e.refine==="ADD"&&(e.traversal.active=!0),(e.traversal.active||e.traversal.kicked)&&e.internal.hasContent&&(t.markTileUsed(e),e.traversal.allUsedChildrenProcessed&&t.queueTileForDownload(e),e.internal.loadingState!==4&&(e.traversal.active=!1)),t.loadAncestors&&e.internal.hasContent&&(t.markTileUsed(e),t.queueTileForDownload(e)),e.internal.virtualChildCount>0&&e.internal.hasContent&&t.markTileUsed(e),e.traversal.visible=e.internal.hasRenderableContent&&e.traversal.active&&e.traversal.inFrustum&&e.internal.loadingState===4,t.stats.used++,e.traversal.inFrustum&&t.stats.inFrustum++),n||pp(e)&&e.traversal.usedLastFrame){let i=!1,r=!1;n?(i=e.traversal.active,r=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):Dc(e,t),e.internal.hasRenderableContent&&e.internal.loadingState===4?(i&&t.stats.active++,r&&t.stats.visible++,e.traversal.wasSetActive!==i&&t.invokeOnePlugin(a=>a.setTileActive&&a.setTileActive(e,i)),e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(a=>a.setTileVisible&&a.setTileVisible(e,r))):e.internal.hasRenderableContent||(r=e.traversal.isLeaf,e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(a=>a.setEmptyTileVisible&&a.setEmptyTileVisible(e,r))),e.traversal.visible=r,e.traversal.active=i;let o=e.children;for(let a=0,s=o.length;a<s;a++){let l=o[a];Q0(l,t)}}}function YP(e,t){K0(e,t),Z0(e,t),J0(e,t),Q0(e,t)}function KP(e){let t=null;return()=>{t===null&&(t=Lc.requestAnimationFrame(()=>{t=null,e()}))}}function ZP(e,t=null,n=null){let i=[];for(i.push(e),i.push(null),i.push(0);i.length>0;){let r=i.pop(),o=i.pop(),a=i.pop();if(t&&t(a,o,r)){n&&n(a,o,r);return}let s=a.children;if(s)for(let l=s.length-1;l>=0;l--)i.push(s[l]),i.push(a),i.push(r+1);n&&n(a,o,r)}}var X0=Symbol("PLUGIN_REGISTERED"),$o={inView:!0,error:0,distance:1/0},JP=(e,t)=>{let n=e.priority||0,i=t.priority||0;return n===i?!e.traversal||!t.traversal?0:e.traversal.used===t.traversal.used?e.traversal.error===t.traversal.error?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.traversal.error>t.traversal.error?1:-1:e.traversal.used?1:-1:n>i?1:-1},QP=(e,t)=>e.traversal.used===t.traversal.used?e.traversal.inFrustum===t.traversal.inFrustum?e.internal.hasUnrenderableContent===t.internal.hasUnrenderableContent?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.internal.hasUnrenderableContent?1:-1:e.traversal.inFrustum?1:-1:e.traversal.used?1:-1,eA=(e,t)=>e.traversal.lastFrameVisited===t.traversal.lastFrameVisited?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?e.internal.loadingState===t.internal.loadingState?e.internal.hasUnrenderableContent===t.internal.hasUnrenderableContent?e.traversal.error===t.traversal.error?0:e.traversal.error>t.traversal.error?-1:1:e.internal.hasUnrenderableContent?-1:1:e.internal.loadingState>t.internal.loadingState?-1:1:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?1:-1:e.traversal.lastFrameVisited>t.traversal.lastFrameVisited?-1:1,ul=(e,t)=>{let n=e.priority??1/0,i=t.priority??1/0;if(n!==i)return n>i?1:-1;if(!e.internal||!t.internal)return 0;let r=e.internal.renderer,o=t.internal.renderer,a=!r.loadAncestors,s=!o.loadAncestors;return a&&s?QP(e,t):JP(e,t)},gf=new Oc;gf.unloadPriorityCallback=eA;var Nc=new dp;Nc.maxJobsPerOrigin=25,Nc.priorityCallback=ul;var lp=new Vi;lp.maxJobs=5,lp.priorityCallback=ul;var cp=new Vi;cp.maxJobs=25,cp.priorityCallback=(e,t)=>{let n=e.parent,i=t.parent;return n===i?0:n?i?ul(n,i):-1:1};var bf=class{get root(){let e=this.rootTileset;return e?e.root:null}get loadProgress(){let{stats:e,isLoading:t}=this,n=e.queued+e.downloading+e.parsing,i=e.inCacheSinceLoad+ +!!t;return i===0?1:1-n/i}get downloadQueue(){return this._downloadQueue}set downloadQueue(e){if(e instanceof Vi){console.warn('TilesRenderer: "downloadQueue" is no longer valid as a PriorityQueue. Use a DownloadPriorityQueue, instead.');return}this._downloadQueue=e}constructor(e=null){this.rootLoadingState=0,this.rootTileset=null,this.rootURL=e,this.fetchOptions={},this.plugins=[],this.queuedTiles=[],this.cachedSinceLoadComplete=new Set,this.isLoading=!1,this.processedTiles=new WeakSet,this.visibleTiles=new Set,this.activeTiles=new Set,this.usedSet=new Set,this.loadingTiles=new Set,this.lruCache=gf,this.downloadQueue=Nc,this.parseQueue=lp,this.processNodeQueue=cp,this.stats={inCacheSinceLoad:0,inCache:0,queued:0,downloading:0,parsing:0,loaded:0,failed:0,inFrustum:0,used:0,active:0,visible:0,tilesProcessed:0},this.frameCount=0,this._dispatchNeedsUpdateEvent=KP(()=>{this.dispatchEvent({type:"needs-update"})}),this.errorTarget=16,this.errorFalloff=0,this.errorFalloffDensity=2e-4,this.displayActiveTiles=!1,this.maxDepth=1/0,this.loadSiblings=!0,this.loadAncestors=!0,this.maxTilesProcessed=250}registerPlugin(e){if(e[X0]===!0)throw Error("TilesRendererBase: A plugin can only be registered to a single tileset");let t=this.plugins,n=e.priority||0,i=t.length;for(let r=0;r<t.length;r++)if((t[r].priority||0)>n){i=r;break}t.splice(i,0,e),e[X0]=!0,e.init&&e.init(this)}unregisterPlugin(e){let t=this.plugins;if(typeof e=="string"&&(e=this.getPluginByName(e)),t.includes(e)){let n=t.indexOf(e);return t.splice(n,1),e.dispose&&e.dispose(),!0}return!1}getPluginByName(e){return this.plugins.find(t=>t.name===e)||null}invokeOnePlugin(e){let t=[...this.plugins,this];for(let n=0;n<t.length;n++){let i=e(t[n]);if(i)return i}return null}invokeAllPlugins(e){let t=[...this.plugins,this],n=[];for(let i=0;i<t.length;i++){let r=e(t[i]);r&&n.push(r)}return n.length===0?null:Promise.all(n)}traverse(e,t,n=!0){this.root&&ZP(this.root,(i,...r)=>(n&&this.ensureChildrenArePreprocessed(i,!0),e?e(i,...r):!1),t)}getAttributions(e=[]){return this.invokeAllPlugins(t=>t!==this&&t.getAttributions&&t.getAttributions(e)),e}update(){let{lruCache:e,usedSet:t,stats:n,root:i,downloadQueue:r,parseQueue:o,processNodeQueue:a}=this;if(this.rootLoadingState===0&&(this.rootLoadingState=2,this.invokeOnePlugin(c=>c.loadRootTileset&&c.loadRootTileset()).then(c=>{let h=this.rootURL;h!==null&&this.invokeAllPlugins(p=>h=p.preprocessURL?p.preprocessURL(h,null):h),this.rootLoadingState=4,this.rootTileset=c,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:c,url:h}),this.dispatchEvent({type:"load-root-tileset",tileset:c,url:h})}).catch(c=>{this.rootLoadingState=-1,console.error(c),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:c,url:this.rootURL})})),!i)return;let s=null;if(this.invokeAllPlugins(c=>{if(c.doTilesNeedUpdate){let h=c.doTilesNeedUpdate();s=s===null?h:!!(s||h)}}),s===!1){this.dispatchEvent({type:"update-before"}),this.dispatchEvent({type:"update-after"});return}this.dispatchEvent({type:"update-before"}),n.inFrustum=0,n.used=0,n.active=0,n.visible=0,n.tilesProcessed=0,this.frameCount++,t.forEach(c=>e.markUnused(c)),t.clear(),this.prepareForTraversal(),YP(i,this),this.removeUnusedPendingTiles();let l=this.queuedTiles;l.sort(e.unloadPriorityCallback);for(let c=0,h=l.length;c<h&&!e.isFull();c++)this.requestTileContents(l[c]);l.length=0,e.scheduleUnload(),(r.running||o.running||a.running)===!1&&this.isLoading===!0&&(this.cachedSinceLoadComplete.clear(),n.inCacheSinceLoad=0,this.dispatchEvent({type:"tiles-load-end"}),this.isLoading=!1),this.dispatchEvent({type:"update-after"})}resetFailedTiles(){this.rootLoadingState===-1&&(this.rootLoadingState=0);let e=this.stats;e.failed!==0&&(this.traverse(t=>{t.internal.loadingState===-1&&(t.internal.loadingState=0)},null,!1),e.failed=0)}calculateTileViewErrorWithPlugin(e,t){this.calculateTileViewError(e,t);let{errorFalloff:n,errorFalloffDensity:i}=this;if(n>0&&Number.isFinite(t.distanceFromCamera)){let s=t.distanceFromCamera*i;t.error-=n*(1-Math.exp(-s*s))}let r=null,o=0,a=1/0;this.invokeAllPlugins(s=>{s!==this&&s.calculateTileViewError&&($o.inView=!0,$o.error=0,$o.distance=1/0,s.calculateTileViewError(e,$o)&&(r===null&&(r=!0),r&&(r=$o.inView),$o.inView&&(a=Math.min(a,$o.distance),o=Math.max(o,$o.error))))}),t.inView&&r!==!1?(t.error=Math.max(t.error,o),t.distanceFromCamera=Math.min(t.distanceFromCamera,a)):r?(t.inView=!0,t.error=o,t.distanceFromCamera=a):t.inView=!1}dispose(){[...this.plugins].forEach(n=>{this.unregisterPlugin(n)});let e=this.lruCache,t=[];this.traverse(n=>(t.push(n),!1),null,!1);for(let n=0,i=t.length;n<i;n++)e.remove(t[n]);this.stats={queued:0,parsing:0,downloading:0,failed:0,inFrustum:0,traversed:0,used:0,active:0,visible:0},this.frameCount=0,this.loadingTiles.clear()}calculateBytesUsed(e,t){return 0}dispatchEvent(e){}addEventListener(e,t){}removeEventListener(e,t){}parseTile(e,t,n){return null}prepareForTraversal(){}disposeTile(e){e.traversal.visible&&(e.internal.hasRenderableContent?this.invokeOnePlugin(n=>n.setTileVisible&&n.setTileVisible(e,!1)):this.invokeOnePlugin(n=>n.setEmptyTileVisible&&n.setEmptyTileVisible(e,!1)),e.traversal.visible=!1),e.traversal.active&&e.internal.hasRenderableContent&&this.invokeOnePlugin(n=>n.setTileActive&&n.setTileActive(e,!1)),e.traversal.active=!1;let{scene:t}=e.engineData;t&&this.dispatchEvent({type:"dispose-model",scene:t,tile:e})}preprocessNode(e,t,n=null){if(this.processedTiles.add(e),this.stats.tilesProcessed++,e.content&&(!("uri"in e.content)&&"url"in e.content&&(e.content.uri=e.content.url,delete e.content.url),e.content.boundingVolume&&!("box"in e.content.boundingVolume||"sphere"in e.content.boundingVolume||"region"in e.content.boundingVolume)&&delete e.content.boundingVolume),e.parent=n,e.children=e.children||[],e.internal={hasContent:!1,hasRenderableContent:!1,hasUnrenderableContent:!1,loadingState:0,basePath:t,depth:-1,depthFromRenderedParent:-1,isVirtual:!1,virtualChildCount:0,renderer:this,...e.internal},e.content?.uri){let i=mf(e.content.uri),r=!!(i&&/json$/.test(i));e.internal.hasContent=!0,e.internal.hasUnrenderableContent=r,e.internal.hasRenderableContent=!r}else e.internal.hasContent=!1,e.internal.hasUnrenderableContent=!1,e.internal.hasRenderableContent=!1;n?(e.internal.depth=n.internal.depth+1,e.internal.depthFromRenderedParent=n.internal.depthFromRenderedParent+ +!!e.internal.hasRenderableContent):(e.internal.depth=0,e.internal.depthFromRenderedParent=+!!e.internal.hasRenderableContent),e.traversal={distanceFromCamera:1/0,error:1/0,inFrustum:!1,wasInFrustum:!1,isLeaf:!1,used:!1,usedLastFrame:!1,visible:!1,wasSetVisible:!1,active:!1,wasSetActive:!1,allChildrenReady:!1,allChildrenLoaded:!1,kicked:!1,allUsedChildrenProcessed:!1,lastFrameVisited:-1},n===null?e.refine=e.refine||"REPLACE":e.refine=e.refine||n.refine,e.engineData={scene:null,metadata:null,boundingVolume:null},Object.defineProperty(e,"cached",{get(){return console.warn('TilesRenderer: "tile.cached" field has been renamed to "tile.engineData".'),this.engineData},enumerable:!1,configurable:!0}),this.invokeAllPlugins(i=>{i!==this&&i.preprocessNode&&i.preprocessNode(e,t,n)})}setTileActive(e,t){t?this.activeTiles.add(e):this.activeTiles.delete(e)}setTileVisible(e,t){t?this.visibleTiles.add(e):this.visibleTiles.delete(e),this.dispatchEvent({type:"tile-visibility-change",scene:e.engineData.scene,tile:e,visible:t})}calculateTileViewError(e,t){}removeUnusedPendingTiles(){let{lruCache:e,loadingTiles:t}=this,n=[];for(let i of t)!e.isUsed(i)&&i.internal.loadingState===1&&n.push(i);for(let i=0;i<n.length;i++)e.remove(n[i])}queueTileForDownload(e){e.internal.loadingState!==0||this.lruCache.isFull()||this.queuedTiles.push(e)}markTileUsed(e){this.usedSet.add(e),this.lruCache.markUsed(e)}fetchData(e,t){return fetch(e,t)}ensureChildrenArePreprocessed(e,t=this.stats.tilesProcessed<this.maxTilesProcessed){let n=e.children;if(n.length===0||n[n.length-1].traversal)return;let i=r=>{for(let o=0,a=r.length;o<a;o++){let s=r[o];s&&!s.traversal&&this.preprocessNode(s,e.internal.basePath,e)}};t?(this.processNodeQueue.remove(e),i(n)):this.processNodeQueue.has(e)||this.processNodeQueue.add(e,r=>{i(r.children),this._dispatchNeedsUpdateEvent()})}getBytesUsed(e){let t=0;return this.invokeAllPlugins(n=>{n.calculateBytesUsed&&(t+=n.calculateBytesUsed(e,e.engineData.scene)||0)}),t}recalculateBytesUsed(e=null){let{lruCache:t,processedTiles:n}=this;e===null?t.itemSet.forEach(i=>{n.has(i)&&t.setMemoryUsage(i,this.getBytesUsed(i))}):t.setMemoryUsage(e,this.getBytesUsed(e))}preprocessTileset(e,t,n=null){let[i,r]=e.asset.version.split(".").map(a=>parseInt(a));console.assert(i<=1,"TilesRenderer: asset.version is expected to be a 1.x or a compatible version."),i===1&&r>0&&console.warn("TilesRenderer: tiles versions at 1.1 or higher have limited support. Some new extensions and features may not be supported.");let o=t.replace(/\/[^/]*$/,"");o=new URL(o,window.location.href).toString(),this.preprocessNode(e.root,o,n)}loadRootTileset(){let e=this.rootURL;return this.invokeAllPlugins(t=>e=t.preprocessURL?t.preprocessURL(e,null):e),this.invokeOnePlugin(t=>t.fetchData&&t.fetchData(e,this.fetchOptions)).then(t=>{if(!(t instanceof Response))return t;if(t.ok)return t.json();throw Error(`TilesRenderer: Failed to load tileset "${e}" with status ${t.status} : ${t.statusText}`)}).then(t=>(this.preprocessTileset(t,e),t))}requestTileContents(e){if(e.internal.loadingState!==0)return;let t=!1,n=null,i=new URL(e.content.uri,e.internal.basePath+"/").toString();this.invokeAllPlugins(u=>i=u.preprocessURL?u.preprocessURL(i,e):i);let r=this.stats,o=this.lruCache,a=this.downloadQueue,s=this.parseQueue,l=this.loadingTiles,c=mf(i),h=new AbortController,p=h.signal;if(o.add(e,u=>{h.abort(),t?u.children.length=0:this.invokeAllPlugins(m=>{m.disposeTile&&m.disposeTile(u)}),r.inCache--,this.cachedSinceLoadComplete.has(e)&&(this.cachedSinceLoadComplete.delete(e),r.inCacheSinceLoad--),u.internal.loadingState===1?r.queued--:u.internal.loadingState===2?r.downloading--:u.internal.loadingState===3?r.parsing--:u.internal.loadingState===4&&r.loaded--,u.internal.loadingState=0,s.remove(u),a.remove(u),l.delete(u)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),o.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),r.inCacheSinceLoad++,r.inCache++,r.queued++,e.internal.loadingState=1,l.add(e),a.add(i,e,u=>{if(p.aborted)return Promise.resolve();e.internal.loadingState=2,r.downloading++,r.queued--;let m=this.invokeOnePlugin(f=>f.fetchData&&f.fetchData(i,{...this.fetchOptions,signal:p}));return this.dispatchEvent({type:"tile-download-start",tile:e,url:i,get uri(){return console.warn('tile-download-start event: "uri" has been renamed to "url".'),this.url}}),m}).then(u=>{if(!p.aborted){if(!(u instanceof Response))return u;if(u.ok)return c==="json"?u.json():u.arrayBuffer();throw Error(`Failed to load model with error code ${u.status}`)}}).then(u=>{if(!p.aborted)return r.downloading--,r.parsing++,e.internal.loadingState=3,s.add(e,m=>p.aborted?Promise.resolve():c==="json"&&u.root?(this.preprocessTileset(u,i,e),e.children.push(u.root),n=u,t=!0,Promise.resolve()):this.invokeOnePlugin(f=>f.parseTile&&f.parseTile(u,m,c,i,p)))}).then(()=>{if(p.aborted)return;r.parsing--,r.loaded++,e.internal.loadingState=4,l.delete(e),o.setLoaded(e,!0);let u=this.getBytesUsed(e);if(o.getMemoryUsage(e)===0&&u>0&&o.isFull()){o.remove(e);return}o.setMemoryUsage(e,u),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:n,url:i}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:i})}).catch(u=>{p.aborted||(u.name==="AbortError"?o.remove(e):(s.remove(e),a.remove(e),e.internal.loadingState===1?r.queued--:e.internal.loadingState===2?r.downloading--:e.internal.loadingState===3?r.parsing--:e.internal.loadingState===4&&r.loaded--,r.failed++,console.error(`TilesRenderer : Failed to load tile at url "${e.content.uri}".`),console.error(u),e.internal.loadingState=-1,l.delete(e),o.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:u,url:i})))})}};function Ka(e){if(e===null||e.byteLength<4)return"";let t;if(t=e instanceof DataView?e:new DataView(e),String.fromCharCode(t.getUint8(0))==="{")return null;let n="";for(let i=0;i<4;i++)n+=String.fromCharCode(t.getUint8(i));return n}var tA=new TextDecoder;function e1(e){return tA.decode(e)}function mp(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var pl=class{constructor(){this.fetchOptions={},this.workingPath=""}loadAsync(e){return fetch(e,this.fetchOptions).then(t=>{if(!t.ok)throw Error(`Failed to load file "${e}" with status ${t.status} : ${t.statusText}`);return t.arrayBuffer()}).then(t=>(this.workingPath===""&&(this.workingPath=mp(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function vf(e,t,n,i,r,o){let a;switch(i){case"SCALAR":a=1;break;case"VEC2":a=2;break;case"VEC3":a=3;break;case"VEC4":a=4;break;default:throw Error(`FeatureTable : Feature type not provided for "${o}".`)}let s,l=n*a;switch(r){case"BYTE":s=new Int8Array(e,t,l);break;case"UNSIGNED_BYTE":s=new Uint8Array(e,t,l);break;case"SHORT":s=new Int16Array(e,t,l);break;case"UNSIGNED_SHORT":s=new Uint16Array(e,t,l);break;case"INT":s=new Int32Array(e,t,l);break;case"UNSIGNED_INT":s=new Uint32Array(e,t,l);break;case"FLOAT":s=new Float32Array(e,t,l);break;case"DOUBLE":s=new Float64Array(e,t,l);break;default:throw Error(`FeatureTable : Feature component type not provided for "${o}".`)}return s}var Bc=class{constructor(e,t,n,i){this.buffer=e,this.binOffset=t+n,this.binLength=i;let r=null;if(n!==0){let o=new Uint8Array(e,t,n);r=JSON.parse(e1(o))}else r={};this.header=r}getKeys(){return Object.keys(this.header).filter(e=>e!=="extensions")}getData(e,t,n=null,i=null){let r=this.header;if(!(e in r))return null;let o=r[e];if(!(o instanceof Object)||Array.isArray(o))return o;{let{buffer:a,binOffset:s,binLength:l}=this,c=o.byteOffset||0,h=o.type||i,p=o.componentType||n;if("type"in o&&i&&o.type!==i)throw Error("FeatureTable: Specified type does not match expected type.");let u=s+c,m=vf(a,u,t,h,p,e);if(u+m.byteLength>s+l)throw Error("FeatureTable: Feature data read outside binary body length.");return m}}getBuffer(e,t){let{buffer:n,binOffset:i}=this;return n.slice(i+e,i+e+t)}},nA=class{constructor(e){this.batchTable=e;let t=e.header.extensions["3DTILES_batch_table_hierarchy"];this.classes=t.classes;for(let i of this.classes){let r=i.instances;for(let o in r)i.instances[o]=this._parseProperty(r[o],i.length,o)}if(this.instancesLength=t.instancesLength,this.classIds=this._parseProperty(t.classIds,this.instancesLength,"classIds"),t.parentCounts?this.parentCounts=this._parseProperty(t.parentCounts,this.instancesLength,"parentCounts"):this.parentCounts=Array(this.instancesLength).fill(1),t.parentIds){let i=this.parentCounts.reduce((r,o)=>r+o,0);this.parentIds=this._parseProperty(t.parentIds,i,"parentIds")}else this.parentIds=null;this.instancesIds=[];let n={};for(let i of this.classIds)n[i]=n[i]??0,this.instancesIds.push(n[i]),n[i]++}_parseProperty(e,t,n){if(Array.isArray(e))return e;{let{buffer:i,binOffset:r}=this.batchTable,o=e.byteOffset,a=e.componentType||"UNSIGNED_SHORT";return vf(i,r+o,t,"SCALAR",a,n)}}getDataFromId(e,t={}){let n=this.parentCounts[e];if(this.parentIds&&n>0){let s=0;for(let l=0;l<e;l++)s+=this.parentCounts[l];for(let l=0;l<n;l++){let c=this.parentIds[s+l];c!==e&&this.getDataFromId(c,t)}}let i=this.classIds[e],r=this.classes[i].instances,o=this.classes[i].name,a=this.instancesIds[e];for(let s in r)t[o]=t[o]||{},t[o][s]=r[s][a];return t}},hp=class extends Bc{constructor(e,t,n,i,r){super(e,n,i,r),this.count=t,this.extensions={};let o=this.header.extensions;o&&o["3DTILES_batch_table_hierarchy"]&&(this.extensions["3DTILES_batch_table_hierarchy"]=new nA(this))}getDataFromId(e,t={}){if(e<0||e>=this.count)throw Error(`BatchTable: id value "${e}" out of bounds for "${this.count}" features number.`);for(let n of this.getKeys())t[n]=super.getData(n,this.count)[e];for(let n in this.extensions){let i=this.extensions[n];i.getDataFromId instanceof Function&&(t[n]=t[n]||{},i.getDataFromId(e,t[n]))}return t}getPropertyArray(e){return super.getData(e,this.count)}},yf=class extends pl{parse(e){let t=new DataView(e),n=Ka(t);console.assert(n==="b3dm");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),l=t.getUint32(24,!0),c=new Bc(e.slice(28,28+o+a),0,o,a),h=28+o+a,p=new hp(e.slice(h,h+s+l),c.getData("BATCH_LENGTH"),0,s,l),u=h+s+l;return{version:i,featureTable:c,batchTable:p,glbBytes:new Uint8Array(e,u,r-u)}}},xf=class extends pl{parse(e){let t=new DataView(e),n=Ka(t);console.assert(n==="i3dm");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),l=t.getUint32(24,!0),c=t.getUint32(28,!0),h=new Bc(e.slice(32,32+o+a),0,o,a),p=32+o+a,u=new hp(e.slice(p,p+s+l),h.getData("INSTANCES_LENGTH"),0,s,l),m=p+s+l,f=new Uint8Array(e,m,r-m),g=null,b=null,y=null;if(c)g=f,b=Promise.resolve();else{let v=this.resolveExternalURL(e1(f));y=mp(v),b=fetch(v,this.fetchOptions).then(w=>{if(!w.ok)throw Error(`I3DMLoaderBase : Failed to load file "${v}" with status ${w.status} : ${w.statusText}`);return w.arrayBuffer()}).then(w=>{g=new Uint8Array(w)})}return b.then(()=>({version:i,featureTable:h,batchTable:u,glbBytes:g,gltfWorkingPath:y}))}},wf=class extends pl{parse(e){let t=new DataView(e),n=Ka(t);console.assert(n==="pnts");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),l=t.getUint32(24,!0),c=new Bc(e.slice(28,28+o+a),0,o,a),h=28+o+a,p=new hp(e.slice(h,h+s+l),c.getData("BATCH_LENGTH")||c.getData("POINTS_LENGTH"),0,s,l);return Promise.resolve({version:i,featureTable:c,batchTable:p})}},Sf=class extends pl{parse(e){let t=new DataView(e),n=Ka(t);console.assert(n==="cmpt",'CMPTLoader: The magic bytes equal "cmpt".');let i=t.getUint32(4,!0);console.assert(i===1,'CMPTLoader: The version listed in the header is "1".');let r=t.getUint32(8,!0);console.assert(r===e.byteLength,"CMPTLoader: The contents buffer length listed in the header matches the file.");let o=t.getUint32(12,!0),a=[],s=16;for(let l=0;l<o;l++){let c=new DataView(e,s,12),h=Ka(c),p=c.getUint32(4,!0),u=c.getUint32(8,!0),m=new Uint8Array(e,s,u);a.push({type:h,buffer:m,version:p}),s+=u}return{version:i,tiles:a}}};var F=require("three"),_p=require("three/addons/loaders/GLTFLoader.js"),g1=require("three/addons/utils/BufferGeometryUtils.js"),Lf=class extends yf{constructor(e=F.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new F.Matrix4}parse(e){let t=super.parse(e),n=t.glbBytes.slice().buffer;return new Promise((i,r)=>{let o=this.manager,a=this.fetchOptions,s=o.getHandler("path.gltf")||new _p.GLTFLoader(o);a.credentials==="include"&&a.mode==="cors"&&s.setCrossOrigin("use-credentials"),"credentials"in a&&s.setWithCredentials(a.credentials==="include"),a.headers&&s.setRequestHeader(a.headers);let l=this.workingPath;!/[\\/]$/.test(l)&&l.length&&(l+="/");let c=this.adjustmentTransform;s.parse(n,l,h=>{let{batchTable:p,featureTable:u}=t,{scene:m}=h,f=u.getData("RTC_CENTER",1,"FLOAT","VEC3");f&&(m.position.x+=f[0],m.position.y+=f[1],m.position.z+=f[2]),h.scene.updateMatrix(),h.scene.matrix.multiply(c),h.scene.matrix.decompose(h.scene.position,h.scene.quaternion,h.scene.scale),h.batchTable=p,h.featureTable=u,m.batchTable=p,m.featureTable=u,i(h)},r)})}};function rA(e){let t=e>>11,n=e>>5&63,i=e&31;return[Math.round(t/31*255),Math.round(n/63*255),Math.round(i/31*255)]}var zc=new F.Vector2;function iA(e,t,n=new F.Vector3){zc.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),n.set(zc.x,zc.y,1-Math.abs(zc.x)-Math.abs(zc.y));let i=F.MathUtils.clamp(-n.z,0,1);return n.x>=0?n.setX(n.x-i):n.setX(n.x+i),n.y>=0?n.setY(n.y-i):n.setY(n.y+i),n.normalize(),n}var t1={RGB:"color",POSITION:"position"},Df=class extends wf{constructor(e=F.DefaultLoadingManager){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:n,batchTable:i}=t,r=new F.PointsMaterial,o=n.header.extensions,a=new F.Vector3,s;if(o&&o["3DTILES_draco_point_compression"]){let{byteOffset:h,byteLength:p,properties:u}=o["3DTILES_draco_point_compression"],m=this.manager.getHandler("draco.drc");if(m==null)throw Error("PNTSLoader: dracoLoader not available.");let f={};for(let y in u)if(y in t1&&y in u){let v=t1[y];f[v]=u[y]}let g={attributeIDs:f,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},b=n.getBuffer(h,p);s=await m.decodeGeometry(b,g),s.attributes.color&&(r.vertexColors=!0)}else{let h=n.getData("POINTS_LENGTH"),p=n.getData("POSITION",h,"FLOAT","VEC3"),u=n.getData("NORMAL",h,"FLOAT","VEC3"),m=n.getData("NORMAL",h,"UNSIGNED_BYTE","VEC2"),f=n.getData("RGB",h,"UNSIGNED_BYTE","VEC3"),g=n.getData("RGBA",h,"UNSIGNED_BYTE","VEC4"),b=n.getData("RGB565",h,"UNSIGNED_SHORT","SCALAR"),y=n.getData("CONSTANT_RGBA",h,"UNSIGNED_BYTE","VEC4"),v=n.getData("POSITION_QUANTIZED",h,"UNSIGNED_SHORT","VEC3"),w=n.getData("QUANTIZED_VOLUME_SCALE",h,"FLOAT","VEC3"),M=n.getData("QUANTIZED_VOLUME_OFFSET",h,"FLOAT","VEC3");if(s=new F.BufferGeometry,v){let _=new Float32Array(h*3);for(let x=0;x<h;x++)for(let P=0;P<3;P++){let d=3*x+P;_[d]=v[d]/65535*w[P]}a.x=M[0],a.y=M[1],a.z=M[2],s.setAttribute("position",new F.BufferAttribute(_,3,!1))}else s.setAttribute("position",new F.BufferAttribute(p,3,!1));if(u!==null)s.setAttribute("normal",new F.BufferAttribute(u,3,!1));else if(m!==null){let _=new Float32Array(h*3),x=new F.Vector3;for(let P=0;P<h;P++){let d=m[P*2],S=m[P*2+1],C=iA(d,S,x);_[P*3]=C.x,_[P*3+1]=C.y,_[P*3+2]=C.z}s.setAttribute("normal",new F.BufferAttribute(_,3,!1))}if(g!==null)s.setAttribute("color",new F.BufferAttribute(g,4,!0)),r.vertexColors=!0,r.transparent=!0,r.depthWrite=!1;else if(f!==null)s.setAttribute("color",new F.BufferAttribute(f,3,!0)),r.vertexColors=!0;else if(b!==null){let _=new Uint8Array(h*3);for(let x=0;x<h;x++){let P=rA(b[x]);for(let d=0;d<3;d++){let S=3*x+d;_[S]=P[d]}}s.setAttribute("color",new F.BufferAttribute(_,3,!0)),r.vertexColors=!0}else if(y!==null){r.color=new F.Color(y[0],y[1],y[2]);let _=y[3]/255;_<1&&(r.opacity=_,r.transparent=!0,r.depthWrite=!1)}}let l=new F.Points(s,r);l.position.copy(a),t.scene=l,t.scene.featureTable=n,t.scene.batchTable=i;let c=n.getData("RTC_CENTER",1,"FLOAT","VEC3");return c&&(t.scene.position.x+=c[0],t.scene.position.y+=c[1],t.scene.position.z+=c[2]),t})}};function oA(e){let{x:t,y:n,z:i}=e;e.x=i,e.y=t,e.z=n}function aA(e){return-e+Math.PI/2}var n1=new F.Spherical,Yo=new F.Vector3,fr=new F.Vector3,_f=new F.Vector3,ti=new F.Matrix4,Fi=new F.Matrix4,Mf=new F.Sphere,Pr=new F.Euler,r1=new F.Vector3,i1=new F.Vector3,o1=new F.Vector3,Uc=new F.Vector3,fp=new F.Ray,sA=1e-12,lA=.1;var Nf=class{constructor(e=1,t=1,n=1){this.name="",this.radius=new F.Vector3(e,t,n)}intersectRay(e,t){return ti.makeScale(...this.radius).invert(),Mf.center.set(0,0,0),Mf.radius=1,fp.copy(e).applyMatrix4(ti),fp.intersectSphere(Mf,t)?(ti.makeScale(...this.radius),t.applyMatrix4(ti),t):null}getEastNorthUpFrame(e,t,n,i){return n.isMatrix4&&(i=n,n=0,console.warn('Ellipsoid: The signature for "getEastNorthUpFrame" has changed.')),this.getEastNorthUpAxes(e,t,r1,i1,o1),this.getCartographicToPosition(e,t,n,Uc),i.makeBasis(r1,i1,o1).setPosition(Uc)}getOrientedEastNorthUpFrame(e,t,n,i,r,o,a){return this.getObjectFrame(e,t,n,i,r,o,a,0)}getObjectFrame(e,t,n,i,r,o,a,s=2){return this.getEastNorthUpFrame(e,t,n,ti),Pr.set(r,o,-i,"ZXY"),a.makeRotationFromEuler(Pr).premultiply(ti),s===1?(Pr.set(Math.PI/2,0,0,"XYZ"),Fi.makeRotationFromEuler(Pr),a.multiply(Fi)):s===2&&(Pr.set(-Math.PI/2,0,Math.PI,"XYZ"),Fi.makeRotationFromEuler(Pr),a.multiply(Fi)),a}getCartographicFromObjectFrame(e,t,n=2){return n===1?(Pr.set(-Math.PI/2,0,0,"XYZ"),Fi.makeRotationFromEuler(Pr).premultiply(e)):n===2?(Pr.set(-Math.PI/2,0,Math.PI,"XYZ"),Fi.makeRotationFromEuler(Pr).premultiply(e)):Fi.copy(e),Uc.setFromMatrixPosition(Fi),this.getPositionToCartographic(Uc,t),this.getEastNorthUpFrame(t.lat,t.lon,0,ti).invert(),Fi.premultiply(ti),Pr.setFromRotationMatrix(Fi,"ZXY"),t.azimuth=-Pr.z,t.elevation=Pr.x,t.roll=Pr.y,t}getEastNorthUpAxes(e,t,n,i,r,o=Uc){this.getCartographicToPosition(e,t,0,o),this.getCartographicToNormal(e,t,r),n.set(-o.y,o.x,0).normalize(),i.crossVectors(r,n).normalize()}getCartographicToPosition(e,t,n,i){this.getCartographicToNormal(e,t,Yo);let r=this.radius;fr.copy(Yo),fr.x*=r.x**2,fr.y*=r.y**2,fr.z*=r.z**2;let o=Math.sqrt(Yo.dot(fr));return fr.divideScalar(o),i.copy(fr).addScaledVector(Yo,n)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,fr),this.getPositionToNormal(fr,Yo);let n=_f.subVectors(e,fr);return t.lon=Math.atan2(Yo.y,Yo.x),t.lat=Math.asin(Yo.z),t.height=Math.sign(n.dot(e))*n.length(),t}getCartographicToNormal(e,t,n){return n1.set(1,aA(e),t),n.setFromSpherical(n1).normalize(),oA(n),n}getPositionToNormal(e,t){let n=this.radius;return t.copy(e),t.x/=n.x**2,t.y/=n.y**2,t.z/=n.z**2,t.normalize(),t}getPositionToSurfacePoint(e,t){let n=this.radius,i=1/n.x**2,r=1/n.y**2,o=1/n.z**2,a=e.x*e.x*i,s=e.y*e.y*r,l=e.z*e.z*o,c=a+s+l,h=Math.sqrt(1/c),p=fr.copy(e).multiplyScalar(h);if(c<lA)return isFinite(h)?t.copy(p):null;let u=_f.set(p.x*i*2,p.y*r*2,p.z*o*2),m=(1-h)*e.length()/(.5*u.length()),f=0,g,b,y,v,w,M,_,x,P,d,S;do{m-=f,y=1/(1+m*i),v=1/(1+m*r),w=1/(1+m*o),M=y*y,_=v*v,x=w*w,P=M*y,d=_*v,S=x*w,g=a*M+s*_+l*x-1,b=a*P*i+s*d*r+l*S*o;let C=-2*b;f=g/C}while(Math.abs(g)>sA);return t.set(e.x*y,e.y*v,e.z*w)}calculateHorizonDistance(e,t){let n=this.calculateEffectiveRadius(e);return Math.sqrt(2*n*t+t**2)}calculateEffectiveRadius(e){let t=this.radius.x,n=1-this.radius.z**2/t**2,i=e*F.MathUtils.DEG2RAD,r=Math.sin(i)**2;return t/Math.sqrt(1-n*r)}getPositionElevation(e){this.getPositionToSurfacePoint(e,fr);let t=_f.subVectors(e,fr);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(ti.makeScale(...this.radius).invert(),fp.copy(e).applyMatrix4(ti),fr.set(0,0,0),fp.closestPointToPoint(fr,t).normalize(),ti.makeScale(...this.radius),t.applyMatrix4(ti))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},Hc=new Nf(Za,Za,ff);Hc.name="WGS84 Earth";var gp=new F.Vector3,ml=new F.Vector3,hl=new F.Vector3,Cf=new F.Vector3,bp=new F.Quaternion,vp=new F.Vector3,fl=new F.Matrix4,a1=new F.Matrix4,s1=new F.Vector3,l1=new F.Matrix4,Tf=new F.Quaternion,Pf={};function c1(e,t,n,i){if(e=e/n*2-1,t=t/n*2-1,i.x=e,i.y=t,i.z=1-Math.abs(e)-Math.abs(t),i.z<0){let r=i.x;i.x=(1-Math.abs(i.y))*(r>=0?1:-1),i.y=(1-Math.abs(r))*(i.y>=0?1:-1)}return i.normalize(),i}var Of=class extends xf{constructor(e=F.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new F.Matrix4,this.ellipsoid=Hc.clone()}resolveExternalURL(e){return this.manager.resolveURL(super.resolveExternalURL(e))}parse(e){return super.parse(e).then(t=>{let{featureTable:n,batchTable:i}=t,r=t.glbBytes.slice().buffer;return new Promise((o,a)=>{let s=this.fetchOptions,l=this.manager,c=l.getHandler("path.gltf")||new _p.GLTFLoader(l);s.credentials==="include"&&s.mode==="cors"&&c.setCrossOrigin("use-credentials"),"credentials"in s&&c.setWithCredentials(s.credentials==="include"),s.headers&&c.setRequestHeader(s.headers);let h=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(h)||(h+="/");let p=this.adjustmentTransform;c.parse(r,h,u=>{let m=n.getData("INSTANCES_LENGTH"),f=n.getData("POSITION",m,"FLOAT","VEC3"),g=n.getData("POSITION_QUANTIZED",m,"UNSIGNED_SHORT","VEC3"),b=n.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),y=n.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),v=n.getData("NORMAL_UP",m,"FLOAT","VEC3"),w=n.getData("NORMAL_RIGHT",m,"FLOAT","VEC3"),M=n.getData("NORMAL_UP_OCT32P",m,"UNSIGNED_SHORT","VEC2"),_=n.getData("NORMAL_RIGHT_OCT32P",m,"UNSIGNED_SHORT","VEC2"),x=n.getData("SCALE_NON_UNIFORM",m,"FLOAT","VEC3"),P=n.getData("SCALE",m,"FLOAT","SCALAR"),d=n.getData("RTC_CENTER",1,"FLOAT","VEC3"),S=n.getData("EAST_NORTH_UP");if(!f&&g){f=new Float32Array(m*3);for(let k=0;k<m;k++)f[k*3+0]=b[0]+g[k*3+0]/65535*y[0],f[k*3+1]=b[1]+g[k*3+1]/65535*y[1],f[k*3+2]=b[2]+g[k*3+2]/65535*y[2]}let C=new F.Vector3;for(let k=0;k<m;k++)C.x+=f[k*3+0]/m,C.y+=f[k*3+1]/m,C.z+=f[k*3+2]/m;let T=[],E=[];u.scene.updateMatrixWorld(),u.scene.traverse(k=>{if(k.isMesh){E.push(k);let{geometry:D,material:B}=k,L=new F.InstancedMesh(D,B,m);L.position.copy(C),d&&(L.position.x+=d[0],L.position.y+=d[1],L.position.z+=d[2]),T.push(L)}});for(let k=0;k<m;k++){Cf.set(f[k*3+0]-C.x,f[k*3+1]-C.y,f[k*3+2]-C.z),bp.identity(),v&&w?(ml.set(v[k*3+0],v[k*3+1],v[k*3+2]),hl.set(w[k*3+0],w[k*3+1],w[k*3+2]),gp.crossVectors(hl,ml).normalize(),fl.makeBasis(hl,ml,gp),bp.setFromRotationMatrix(fl)):M&&_&&(c1(M[k*2+0],M[k*2+1],65535,ml),c1(_[k*2+0],_[k*2+1],65535,hl),gp.crossVectors(hl,ml).normalize(),fl.makeBasis(hl,ml,gp),bp.setFromRotationMatrix(fl)),vp.set(1,1,1),x&&vp.set(x[k*3+0],x[k*3+1],x[k*3+2]),P&&vp.multiplyScalar(P[k]);for(let D=0,B=T.length;D<B;D++){let L=T[D];Tf.copy(bp),S&&(L.updateMatrixWorld(),s1.copy(Cf).applyMatrix4(L.matrixWorld),this.ellipsoid.getPositionToCartographic(s1,Pf),this.ellipsoid.getEastNorthUpFrame(Pf.lat,Pf.lon,l1),Tf.setFromRotationMatrix(l1)),fl.compose(Cf,Tf,vp).multiply(p);let X=E[D];a1.multiplyMatrices(fl,X.matrixWorld),L.setMatrixAt(k,a1)}}u.scene.clear(),u.scene.add(...T),u.batchTable=i,u.featureTable=n,u.scene.batchTable=i,u.scene.featureTable=n,o(u)},a)})})}},b1=class extends Sf{constructor(e=F.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new F.Matrix4,this.ellipsoid=Hc.clone()}parse(e){let t=super.parse(e),{manager:n,ellipsoid:i,adjustmentTransform:r}=this,o=[];for(let a in t.tiles){let{type:s,buffer:l}=t.tiles[a];switch(s){case"b3dm":{let c=l.slice(),h=new Lf(n);h.workingPath=this.workingPath,h.fetchOptions=this.fetchOptions,h.adjustmentTransform.copy(r);let p=h.parse(c.buffer);o.push(p);break}case"pnts":{let c=l.slice(),h=new Df(n);h.workingPath=this.workingPath,h.fetchOptions=this.fetchOptions;let p=h.parse(c.buffer);o.push(p);break}case"i3dm":{let c=l.slice(),h=new Of(n);h.workingPath=this.workingPath,h.fetchOptions=this.fetchOptions,h.ellipsoid.copy(i),h.adjustmentTransform.copy(r);let p=h.parse(c.buffer);o.push(p);break}}}return Promise.all(o).then(a=>{let s=new F.Group;return a.forEach(l=>{s.add(l.scene)}),{tiles:a,scene:s}})}},Vc=new F.Matrix4,cA=class extends F.Group{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new F.Matrix4}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?Vc.copy(this.matrix):Vc.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=Vc.elements,n=this.matrixWorld.elements,i=!1;for(let r=0;r<16;r++){let o=t[r],a=n[r];if(Math.abs(o-a)>2**-52){i=!0;break}}if(i){this.matrixWorld.copy(Vc),this.matrixWorldInverse.copy(Vc).invert();let r=this.children;for(let l=0,c=r.length;l<c;l++)r[l].updateMatrixWorld();let{tilesRenderer:o}=this,{activeTiles:a,visibleTiles:s}=o;a.forEach(l=>{s.has(l)||l.engineData.scene.updateMatrixWorld(!0)})}}}updateWorldMatrix(e,t){this.parent&&e&&this.parent.updateWorldMatrix(e,!1),this.updateMatrixWorld(!0)}},dA=new F.Ray;function uA(e,t,n,i){let{scene:r}=e.engineData;n.invokeOnePlugin(o=>o.raycastTile&&o.raycastTile(e,r,t,i))||t.intersectObject(r,!0,i)}function pA(e){return"traversal"in e}function v1(e,t,n,i,r=null){if(!pA(t))return;let{group:o,activeTiles:a}=e,{boundingVolume:s}=t.engineData;if(r===null&&(r=dA,r.copy(n.ray).applyMatrix4(o.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(r))return;a.has(t)&&uA(t,n,e,i);let l=t.children;for(let c=0,h=l.length;c<h;c++)v1(e,l[c],n,i,r)}var yp=new F.Vector3,xp=new F.Vector3,Ar=new F.Vector3,wp=new F.Ray,Rf=class{constructor(e=new F.Box3,t=new F.Matrix4){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new F.Matrix4,this.points=Array(8).fill().map(()=>new F.Vector3),this.planes=[,,,,,,].fill().map(()=>new F.Plane)}copy(e){return this.box.copy(e.box),this.transform.copy(e.transform),this.update(),this}clone(){return new this.constructor().copy(this)}clampPoint(e,t){return t.copy(e).applyMatrix4(this.inverseTransform).clamp(this.box.min,this.box.max).applyMatrix4(this.transform)}distanceToPoint(e){return this.clampPoint(e,Ar).distanceTo(e)}containsPoint(e){return Ar.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(Ar)}intersectsRay(e){return wp.copy(e).applyMatrix4(this.inverseTransform),wp.intersectsBox(this.box)}intersectRay(e,t){return wp.copy(e).applyMatrix4(this.inverseTransform),wp.intersectBox(this.box,t)?(t.applyMatrix4(this.transform),t):null}update(){let{points:e,inverseTransform:t,transform:n,box:i}=this;t.copy(n).invert();let{min:r,max:o}=i,a=0;for(let s=-1;s<=1;s+=2)for(let l=-1;l<=1;l+=2)for(let c=-1;c<=1;c+=2)e[a].set(s<0?r.x:o.x,l<0?r.y:o.y,c<0?r.z:o.z).applyMatrix4(n),a++;this.updatePlanes()}updatePlanes(){yp.copy(this.box.min).applyMatrix4(this.transform),xp.copy(this.box.max).applyMatrix4(this.transform),Ar.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(Ar,yp),this.planes[1].setFromNormalAndCoplanarPoint(Ar,xp).negate(),Ar.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(Ar,yp),this.planes[3].setFromNormalAndCoplanarPoint(Ar,xp).negate(),Ar.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(Ar,yp),this.planes[5].setFromNormalAndCoplanarPoint(Ar,xp).negate()}intersectsSphere(e){return this.clampPoint(e.center,Ar),Ar.distanceToSquared(e.center)<=e.radius*e.radius}intersectsFrustum(e){return this._intersectsPlaneShape(e.planes,e.points)}intersectsOBB(e){return this._intersectsPlaneShape(e.planes,e.points)}_intersectsPlaneShape(e,t){let n=this.points,i=this.planes;for(let r=0;r<6;r++){let o=e[r],a=-1/0;for(let s=0;s<8;s++){let l=n[s],c=o.distanceToPoint(l);a=a<c?c:a}if(a<0)return!1}for(let r=0;r<6;r++){let o=i[r],a=-1/0;for(let s=0;s<8;s++){let l=t[s],c=o.distanceToPoint(l);a=a<c?c:a}if(a<0)return!1}return!0}},Gc=Math.PI,Af=Gc/2,Fc=new F.Vector3,Ja=new F.Vector3,wi=new F.Vector3,ze=new F.Vector3,gr=new F.Matrix4,mA=new F.Box3,d1=new F.Matrix4;function Ko(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function u1(e){return e.x!==e.y}var y1=class extends Nf{constructor(e=1,t=1,n=1,i=-Af,r=Af,o=0,a=2*Gc,s=0,l=0){super(e,t,n),this.latStart=i,this.latEnd=r,this.lonStart=o,this.lonEnd=a,this.heightStart=s,this.heightEnd=l}getBoundingBox(e,t){u1(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported.");let{latStart:n,latEnd:i,lonStart:r,lonEnd:o,heightStart:a,heightEnd:s}=this,l=(n+i)*.5,c=(r+o)*.5,h=n>0,p=i<0,u;u=h?n:p?i:0;let{min:m,max:f}=e;m.setScalar(1/0),f.setScalar(-1/0),o-r<=Gc?(this.getCartographicToNormal(l,c,wi),Ja.set(0,0,1),Fc.crossVectors(Ja,wi).normalize(),Ja.crossVectors(wi,Fc).normalize(),t.makeBasis(Fc,Ja,wi),gr.copy(t).invert(),this.getCartographicToPosition(u,r,s,ze).applyMatrix4(gr),f.x=Math.abs(ze.x),m.x=-f.x,this.getCartographicToPosition(i,r,s,ze).applyMatrix4(gr),f.y=ze.y,this.getCartographicToPosition(i,c,s,ze).applyMatrix4(gr),f.y=Math.max(ze.y,f.y),this.getCartographicToPosition(n,r,s,ze).applyMatrix4(gr),m.y=ze.y,this.getCartographicToPosition(n,c,s,ze).applyMatrix4(gr),m.y=Math.min(ze.y,m.y),this.getCartographicToPosition(l,c,s,ze).applyMatrix4(gr),f.z=ze.z,this.getCartographicToPosition(n,r,a,ze).applyMatrix4(gr),m.z=ze.z,this.getCartographicToPosition(i,r,a,ze).applyMatrix4(gr),m.z=Math.min(ze.z,m.z)):(this.getCartographicToPosition(u,c,s,wi),wi.z=0,wi.length()<1e-10?wi.set(1,0,0):wi.normalize(),Ja.set(0,0,1),Fc.crossVectors(wi,Ja).normalize(),t.makeBasis(Fc,Ja,wi),gr.copy(t).invert(),this.getCartographicToPosition(u,c+Af,s,ze).applyMatrix4(gr),f.x=Math.abs(ze.x),m.x=-f.x,this.getCartographicToPosition(i,0,p?a:s,ze).applyMatrix4(gr),f.y=ze.y,this.getCartographicToPosition(n,0,h?a:s,ze).applyMatrix4(gr),m.y=ze.y,this.getCartographicToPosition(u,c,s,ze).applyMatrix4(gr),f.z=ze.z,this.getCartographicToPosition(u,o,s,ze).applyMatrix4(gr),m.z=ze.z),e.getCenter(ze),e.min.sub(ze).multiplyScalar(1.0000000000001),e.max.sub(ze).multiplyScalar(1.0000000000001),ze.applyMatrix4(t),t.setPosition(ze)}getBoundingSphere(e){u1(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(mA,d1),e.center.setFromMatrixPosition(d1),e.radius=0;let{latStart:t,latEnd:n,lonStart:i,lonEnd:r,heightStart:o,heightEnd:a}=this,s=(t+n)*.5,l=(i+r)*.5,c=t>0,h=n<0,p;p=c?t:h?n:0,this.getCartographicToPosition(p,i,a,ze),Ko(ze,e),this.getCartographicToPosition(n,i,a,ze),Ko(ze,e),this.getCartographicToPosition(n,l,a,ze),Ko(ze,e),this.getCartographicToPosition(t,i,a,ze),Ko(ze,e),this.getCartographicToPosition(t,l,a,ze),Ko(ze,e),this.getCartographicToPosition(s,l,a,ze),Ko(ze,e),this.getCartographicToPosition(t,i,o,ze),Ko(ze,e),r-i>Gc&&(this.getCartographicToPosition(p,l+Gc,a,ze),Ko(ze,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},po=new F.Vector3,mo=new F.Vector3,ho=new F.Vector3,p1=new F.Vector3,m1=new F.Vector3,hA=class{constructor(){this.sphere=null,this.obb=null,this.region=null,this.regionObb=null}intersectsRay(e){let t=this.sphere,n=this.obb||this.regionObb;return!(t&&!e.intersectsSphere(t)||n&&!n.intersectsRay(e))}intersectRay(e,t=null){let n=this.sphere,i=this.obb||this.regionObb,r=-1/0,o=-1/0;n&&e.intersectSphere(n,p1)&&(r=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(p1)),i&&i.intersectRay(e,m1)&&(o=i.containsPoint(e.origin)?0:e.origin.distanceToSquared(m1));let a=Math.max(r,o);return a===-1/0?null:(e.at(Math.sqrt(a),t),t)}distanceToPoint(e){let t=this.sphere,n=this.obb||this.regionObb,i=-1/0,r=-1/0;return t&&(i=Math.max(t.distanceToPoint(e),0)),n&&(r=n.distanceToPoint(e)),i>r?i:r}intersectsFrustum(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!e.intersectsSphere(n)||t&&!t.intersectsFrustum(e)?!1:!!(n||t)}intersectsSphere(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!n.intersectsSphere(e)||t&&!t.intersectsSphere(e)?!1:!!(n||t)}intersectsOBB(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!e.intersectsSphere(n)||t&&!t.intersectsOBB(e)?!1:!!(n||t)}getOBB(e,t){let n=this.obb||this.regionObb;n?(e.copy(n.box),t.copy(n.transform)):(this.getAABB(e),t.identity())}getAABB(e){if(this.sphere)this.sphere.getBoundingBox(e);else{let t=this.obb||this.regionObb;e.copy(t.box).applyMatrix4(t.transform)}}getSphere(e){if(this.sphere)e.copy(this.sphere);else if(this.region)this.region.getBoundingSphere(e);else{let t=this.obb||this.regionObb;t.box.getBoundingSphere(e),e.applyMatrix4(t.transform)}}setObbData(e,t){let n=new Rf;po.set(e[3],e[4],e[5]),mo.set(e[6],e[7],e[8]),ho.set(e[9],e[10],e[11]);let i=po.length(),r=mo.length(),o=ho.length();po.normalize(),mo.normalize(),ho.normalize(),i===0&&po.crossVectors(mo,ho),r===0&&mo.crossVectors(po,ho),o===0&&ho.crossVectors(po,mo),n.transform.set(po.x,mo.x,ho.x,e[0],po.y,mo.y,ho.y,e[1],po.z,mo.z,ho.z,e[2],0,0,0,1).premultiply(t),n.box.min.set(-i,-r,-o),n.box.max.set(i,r,o),n.update(),this.obb=n}setSphereData(e,t,n,i,r){let o=new F.Sphere;o.center.set(e,t,n),o.radius=i,o.applyMatrix4(r),this.sphere=o}setRegionData(e,t,n,i,r,o,a){let s=new y1(...e.radius,n,r,t,i,o,a),l=new Rf;s.getBoundingBox(l.box,l.transform),l.update(),this.region=s,this.regionObb=l}},fA=new F.Matrix3;function gA(e,t,n,i){let r=fA.set(e.normal.x,e.normal.y,e.normal.z,t.normal.x,t.normal.y,t.normal.z,n.normal.x,n.normal.y,n.normal.z);return i.set(-e.constant,-t.constant,-n.constant),i.applyMatrix3(r.invert()),i}var bA=class extends F.Frustum{constructor(){super(),this.points=Array(8).fill().map(()=>new F.Vector3)}setFromProjectionMatrix(...e){return super.setFromProjectionMatrix(...e),this.calculateFrustumPoints(),this}calculateFrustumPoints(){let{planes:e,points:t}=this;[[e[0],e[3],e[4]],[e[1],e[3],e[4]],[e[0],e[2],e[4]],[e[1],e[2],e[4]],[e[0],e[3],e[5]],[e[1],e[3],e[5]],[e[0],e[2],e[5]],[e[1],e[2],e[5]]].forEach((n,i)=>{gA(n[0],n[1],n[2],t[i])})}};var kf=0;function h1(e,t,n,i){try{return F.TextureUtils.getByteLength(e,t,n,i)}catch{return kf}}function vA(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??kf;let{format:t,type:n,image:i,mipmaps:r}=e;if(e.isCompressedTexture&&Array.isArray(r)&&r.length>0){let a=0;for(let s of r)s?.data?.byteLength?a+=s.data.byteLength:a+=h1(s.width,s.height,t,n);return a}if(!i)return kf;let o=h1(i.width,i.height,t,n);return o*=e.generateMipmaps?4/3:1,o}function yA(e){let t=new Set,n=0;return e.traverse(i=>{if(i.geometry&&!t.has(i.geometry)&&(n+=(0,g1.estimateBytesUsed)(i.geometry),t.add(i.geometry)),i.material){let r=i.material;for(let o in r){let a=r[o];a&&a.isTexture&&!t.has(a)&&(n+=vA(a),t.add(a))}}}),n}var x1=Symbol("INITIAL_FRUSTUM_CULLED"),Sp=new F.Matrix4,jc=new F.Vector3,Ef=new F.Vector2,xA=new F.Vector3(1,0,0),wA=new F.Vector3(0,1,0),SA=()=>null;function f1(e,t){e.traverse(n=>{n.frustumCulled=n[x1]&&t})}var If=class extends bf{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{f1(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new cA(this),this.ellipsoid=Hc.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new F.Matrix4,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new F.LoadingManager,this._listeners={}}addEventListener(e,t){F.EventDispatcher.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return F.EventDispatcher.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){F.EventDispatcher.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){F.EventDispatcher.prototype.dispatchEvent.call(this,e)}getBoundingBox(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getAABB(e),!0):!1}getOrientedBoundingBox(e,t){if(!this.root)return!1;let n=this.root.engineData.boundingVolume;return n?(n.getOBB(e,t),!0):!1}getBoundingSphere(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getSphere(e),!0):!1}forEachLoadedModel(e){this.traverse(t=>{let n=t.engineData&&t.engineData.scene;n&&e(n,t)},null,!1)}raycast(e,t){if(this.root)if(this.accelerateRaycast)v1(this,this.root,e,t);else{let n=e.firstHitOnly?[]:t;for(let i of this.activeTiles){let{scene:r}=i.engineData;this.invokeOnePlugin(o=>o.raycastTile&&o.raycastTile(i,r,e,n))||e.intersectObject(r,!0,n)}e.firstHitOnly&&n.length>0&&(n.sort((i,r)=>i.distance-r.distance),t.push(n[0]))}}hasCamera(e){return this.cameraMap.has(e)}setCamera(e){let t=this.cameras,n=this.cameraMap;return n.has(e)?!1:(n.set(e,new F.Vector2),t.push(e),this.dispatchEvent({type:"add-camera",camera:e}),!0)}setResolution(e,t,n){let i=this.cameraMap;if(!i.has(e))return!1;let r=t.isVector2?t.x:t,o=t.isVector2?t.y:n,a=i.get(e);return(a.width!==r||a.height!==o)&&(a.set(r,o),this.dispatchEvent({type:"camera-resolution-change"})),!0}getResolution(e,t){let n=this.cameraMap.get(e);return n?t.copy(n):null}setResolutionFromRenderer(e,t){return t.getSize(Ef),this.setResolution(e,Ef.x,Ef.y)}deleteCamera(e){let t=this.cameras,n=this.cameraMap;if(n.has(e)){let i=t.indexOf(e);return t.splice(i,1),n.delete(e),this.dispatchEvent({type:"delete-camera",camera:e}),!0}return!1}loadRootTileset(...e){return super.loadRootTileset(...e).then(t=>{let{asset:n,extensions:i={}}=t;switch((n&&n.gltfUpAxis||"y").toLowerCase()){case"x":this._upRotationMatrix.makeRotationAxis(wA,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(xA,Math.PI/2);break}if("3DTILES_ellipsoid"in i){let r=i["3DTILES_ellipsoid"],{ellipsoid:o}=this;o.name=r.body,r.radii?o.radius.set(...r.radii):o.radius.set(1,1,1)}return t})}prepareForTraversal(){let e=this.group,t=this.cameras,n=this.cameraMap,i=this.cameraInfo;for(;i.length>t.length;)i.pop();for(;i.length<t.length;)i.push({frustum:new bA,isOrthographic:!1,sseDenominator:-1,position:new F.Vector3,invScale:-1,pixelSize:0});jc.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(jc.x-jc.y,jc.x-jc.z))>1e-6&&console.warn("ThreeTilesRenderer : Non uniform scale used for tile which may cause issues when calculating screen space error.");for(let r=0,o=i.length;r<o;r++){let a=t[r],s=i[r],l=s.frustum,c=s.position,h=n.get(a);(h.width===0||h.height===0)&&console.warn("TilesRenderer: resolution for camera error calculation is not set.");let p=a.projectionMatrix.elements;if(s.isOrthographic=p[15]===1,s.isOrthographic){let u=2/p[0],m=2/p[5];s.pixelSize=Math.max(m/h.height,u/h.width)}else s.sseDenominator=2/p[5]/h.height;Sp.copy(e.matrixWorld),Sp.premultiply(a.matrixWorldInverse),Sp.premultiply(a.projectionMatrix),l.setFromProjectionMatrix(Sp,a.coordinateSystem,a.reversedDepth),c.set(0,0,0),c.applyMatrix4(a.matrixWorld),c.applyMatrix4(e.matrixWorldInverse)}}update(){if(super.update(),this.cameras.length===0&&this.root){let e=!1;this.invokeAllPlugins(t=>e||(e=!!(t!==this&&t.calculateTileViewError))),e===!1&&console.warn("TilesRenderer: no cameras defined. Cannot update 3d tiles.")}}preprocessNode(e,t,n=null){super.preprocessNode(e,t,n);let i=new F.Matrix4;if(e.transform){let a=e.transform;for(let s=0;s<16;s++)i.elements[s]=a[s]}n&&i.premultiply(n.engineData.transform);let r=new F.Matrix4().copy(i).invert(),o=new hA;"sphere"in e.boundingVolume&&o.setSphereData(...e.boundingVolume.sphere,i),"box"in e.boundingVolume&&o.setObbData(e.boundingVolume.box,i),"region"in e.boundingVolume&&o.setRegionData(this.ellipsoid,...e.boundingVolume.region),e.engineData.transform=i,e.engineData.transformInverse=r,e.engineData.boundingVolume=o,e.engineData.geometry=null,e.engineData.materials=null,e.engineData.textures=null,e.toJSON=SA}async parseTile(e,t,n,i,r){let o=t.engineData,a=mp(i),s=this.fetchOptions,l=this.manager,c=null,h=o.transform,p=this._upRotationMatrix,u=(Ka(e)||n).toLowerCase();switch(u){case"b3dm":{let w=new Lf(l);w.workingPath=a,w.fetchOptions=s,w.adjustmentTransform.copy(p),c=w.parse(e);break}case"pnts":{let w=new Df(l);w.workingPath=a,w.fetchOptions=s,c=w.parse(e);break}case"i3dm":{let w=new Of(l);w.workingPath=a,w.fetchOptions=s,w.adjustmentTransform.copy(p),w.ellipsoid.copy(this.ellipsoid),c=w.parse(e);break}case"cmpt":{let w=new b1(l);w.workingPath=a,w.fetchOptions=s,w.adjustmentTransform.copy(p),w.ellipsoid.copy(this.ellipsoid),c=w.parse(e).then(M=>M.scene);break}case"gltf":case"glb":{let w=l.getHandler("path.gltf")||l.getHandler("path.glb")||new _p.GLTFLoader(l);w.setWithCredentials(s.credentials==="include"),w.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&w.setCrossOrigin("use-credentials");let M=w.resourcePath||w.path||a;!/[\\/]$/.test(M)&&M.length&&(M+="/"),c=w.parseAsync(e,M).then(_=>{_.scene=_.scene||new F.Group;let{scene:x}=_;return x.updateMatrix(),x.matrix.multiply(p).decompose(x.position,x.quaternion,x.scale),_});break}default:c=this.invokeOnePlugin(w=>w.parseToMesh&&w.parseToMesh(e,t,n,i,r));break}let m=await c;if(m===null)throw Error(`TilesRenderer: Content type "${u}" not supported.`);let f,g;m.isObject3D?(f=m,g=null):(f=m.scene,g=m),f.updateMatrix(),f.matrix.premultiply(h),f.matrix.decompose(f.position,f.quaternion,f.scale),await this.invokeAllPlugins(w=>w.processTileModel&&w.processTileModel(f,t)),f.traverse(w=>{w[x1]=w.frustumCulled,w.userData.tile=t}),f1(f,!this.autoDisableRendererCulling);let b=[],y=[],v=[];if(f.traverse(w=>{if(w.geometry&&y.push(w.geometry),w.material){let M=w.material;b.push(w.material);for(let _ in M){let x=M[_];x&&x.isTexture&&v.push(x)}}}),r.aborted){for(let w=0,M=v.length;w<M;w++){let _=v[w];_.image instanceof ImageBitmap&&_.image.close(),_.dispose()}return}o.materials=b,o.geometry=y,o.textures=v,o.scene=f,o.metadata=g}disposeTile(e){super.disposeTile(e);let t=e.engineData;if(t.scene){let n=t.materials,i=t.geometry,r=t.textures,o=t.scene.parent;t.scene.traverse(a=>{a.userData.meshFeatures&&a.userData.meshFeatures.dispose(),a.userData.structuralMetadata&&a.userData.structuralMetadata.dispose()});for(let a=0,s=i.length;a<s;a++)i[a].dispose();for(let a=0,s=n.length;a<s;a++)n[a].dispose();for(let a=0,s=r.length;a<s;a++){let l=r[a];l.image instanceof ImageBitmap&&l.image.close(),l.dispose()}o&&o.remove(t.scene),t.scene=null,t.materials=null,t.textures=null,t.geometry=null,t.metadata=null}}setTileActive(e,t){super.setTileActive(e,t);let n=e.engineData.scene;n&&(t?(n.parent=this.group,n.updateMatrixWorld(!0)):n.parent=null)}setTileVisible(e,t){let n=e.engineData.scene,{activeTiles:i,group:r}=this;n&&(t?r.add(n):(r.remove(n),i.has(e)&&(n.parent=r))),super.setTileVisible(e,t)}calculateBytesUsed(e,t){let n=this._bytesUsed;return!n.has(e)&&t&&n.set(e,yA(t)),n.get(e)??null}calculateTileViewError(e,t){let n=e.engineData,i=this.cameras,r=this.cameraInfo,o=n.boundingVolume,a=!1,s=0,l=1/0,c=0,h=1/0;for(let p=0,u=i.length;p<u;p++){let m=r[p],f,g;if(m.isOrthographic){let y=m.pixelSize;f=e.geometricError/y,g=1/0}else{let y=m.sseDenominator;g=o.distanceToPoint(m.position),f=g===0?1/0:e.geometricError/(g*y)}let b=r[p].frustum;o.intersectsFrustum(b)&&(a=!0,s=Math.max(s,f),l=Math.min(l,g)),c=Math.max(c,f),h=Math.min(h,g)}a?(t.inView=!0,t.error=s,t.distanceFromCamera=l):(t.inView=!1,t.error=c,t.distanceFromCamera=h)}dispose(){super.dispose(),this.group.removeFromParent()}};var J=require("three"),O1=require("three/addons/loaders/GLTFLoader.js"),Uf=require("three/addons/postprocessing/Pass.js");var pN=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var w1=new Vi;w1.maxJobs=10,w1.priorityCallback=(e,t)=>{let n=e.tile,i=t.tile,r=n.internal.renderer,o=i.internal.renderer,a=r.visibleTiles.has(n);return a===o.visibleTiles.has(i)?ul(n,i):a?1:-1};var S1=new J.Vector3;function Wc(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let n=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,i=new J.BufferAttribute(new t(e.count*e.itemSize),e.itemSize,!0),r=e.itemSize,o=e.count;for(let a=0;a<o;a++)for(let s=0;s<r;s++){let l=J.MathUtils.clamp(e.getComponent(a,s),n,1);i.setComponent(a,s,l)}return i}function _A(e,t=Int16Array){let n=e.geometry,i=n.attributes,r=i.position;if(r.isInterleavedBufferAttribute||r.array instanceof t)return r;let o=new J.BufferAttribute(new t(r.count*r.itemSize),r.itemSize,!1),a=r.itemSize,s=r.count;n.computeBoundingBox();let l=n.boundingBox,{min:c,max:h}=l,p=2**(8*t.BYTES_PER_ELEMENT-1)-1,u=-p;for(let m=0;m<s;m++)for(let f=0;f<a;f++){let g=f===0?"x":f===1?"y":"z",b=c[g],y=h[g],v=J.MathUtils.mapLinear(r.getComponent(m,f),b,y,u,p);o.setComponent(m,f,v)}l.getCenter(S1).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(S1),e.scale.x*=.5*(h.x-c.x)/p,e.scale.y*=.5*(h.y-c.y)/p,e.scale.z*=.5*(h.z-c.z)/p,i.position=o,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var Vf=class{constructor(e){this._options={generateNormals:!1,disableMipmaps:!0,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!1,uvType:Int8Array,normalType:Int8Array,positionType:Int16Array,...e},this.name="TILES_COMPRESSION_PLUGIN",this.priority=-100}processTileModel(e,t){let{generateNormals:n,disableMipmaps:i,compressIndex:r,compressUvs:o,compressNormals:a,compressPosition:s,uvType:l,normalType:c,positionType:h}=this._options;e.traverse(p=>{if(p.material&&i){let u=p.material;for(let m in u){let f=u[m];f&&f.isTexture&&f.generateMipmaps&&(f.generateMipmaps=!1,f.minFilter=J.LinearFilter)}}if(p.geometry){let u=p.geometry,m=u.attributes;if(o){let{uv:f,uv1:g,uv2:b,uv3:y}=m;f&&(m.uv=Wc(f,l)),g&&(m.uv1=Wc(g,l)),b&&(m.uv2=Wc(b,l)),y&&(m.uv3=Wc(y,l))}if(n&&!m.normals&&u.computeVertexNormals(),a&&m.normals&&(m.normals=Wc(m.normals,c)),s&&_A(p,h),r&&u.index){let f=m.position.count,g=u.index,b=f>65535?Uint32Array:f>255?Uint16Array:Uint8Array;if(!(g.array instanceof b)){let y=new b(u.index.count);y.set(g.array);let v=new J.BufferAttribute(y,1);u.setIndex(v)}}}})}};function $n(e,t,n){return e&&t in e?e[t]:n}function I1(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function MA(e){return/^FLOAT/.test(e)}function Yc(e){return/^VEC/.test(e)}function Kc(e){return/^MAT/.test(e)}function B1(e,t,n,i=null){return Kc(n)||Yc(n)?i.fromArray(e,t):e[t]}function Bf(e){let{type:t,componentType:n}=e;switch(t){case"SCALAR":return n==="INT64"?0n:0;case"VEC2":return new J.Vector2;case"VEC3":return new J.Vector3;case"VEC4":return new J.Vector4;case"MAT2":return new J.Matrix2;case"MAT3":return new J.Matrix3;case"MAT4":return new J.Matrix4;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function _1(e,t){if(t==null)return!1;switch(e){case"SCALAR":return typeof t=="number"||typeof t=="bigint";case"VEC2":return t.isVector2;case"VEC3":return t.isVector3;case"VEC4":return t.isVector4;case"MAT2":return t.isMatrix2;case"MAT3":return t.isMatrix3;case"MAT4":return t.isMatrix4;case"BOOLEAN":return typeof t=="boolean";case"STRING":return typeof t=="string";case"ENUM":return typeof t=="number"||typeof t=="bigint"}throw Error("ClassProperty: invalid type.")}function $c(e,t=null){switch(e){case"INT8":return Int8Array;case"INT16":return Int16Array;case"INT32":return Int32Array;case"INT64":return BigInt64Array;case"UINT8":return Uint8Array;case"UINT16":return Uint16Array;case"UINT32":return Uint32Array;case"UINT64":return BigUint64Array;case"FLOAT32":return Float32Array;case"FLOAT64":return Float64Array}switch(t){case"BOOLEAN":return Uint8Array;case"STRING":return Uint8Array}throw Error("ClassProperty: invalid type.")}function CA(e,t=null){if(e.array){t=t&&Array.isArray(t)?t:[],t.length=e.count;for(let n=0,i=t.length;n<i;n++)t[n]=Mp(e,t[n])}else t=Mp(e,t);return t}function Mp(e,t=null){let n=e.default,i=e.type;if(t||(t=Bf(e)),n===null){switch(i){case"SCALAR":return 0;case"VEC2":return t.set(0,0);case"VEC3":return t.set(0,0,0);case"VEC4":return t.set(0,0,0,0);case"MAT2":return t.identity();case"MAT3":return t.identity();case"MAT4":return t.identity();case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return""}throw Error("ClassProperty: invalid type.")}else if(Kc(i))t.fromArray(n);else if(Yc(i))t.fromArray(n);else return n}function TA(e,t){if(e.noData===null)return t;let n=e.noData,i=e.type;if(Array.isArray(t))for(let a=0,s=t.length;a<s;a++)t[a]=r(t[a]);else t=r(t);return t;function r(a){return o(a)&&(a=Mp(e,a)),a}function o(a){if(Kc(i)){let s=a.elements;for(let l=0,c=n.length;l<c;l++)if(n[l]!==s[l])return!1;return!0}else if(Yc(i)){for(let s=0,l=n.length;s<l;s++)if(n[s]!==a.getComponent(s))return!1;return!0}else return n===a}}function PA(e,t){switch(e){case"INT8":return Math.max(t/127,-1);case"INT16":return Math.max(t,32767,-1);case"INT32":return Math.max(t/2147483647,-1);case"INT64":return Math.max(Number(t)/9223372036854776e3,-1);case"UINT8":return t/255;case"UINT16":return t/65535;case"UINT32":return t/4294967295;case"UINT64":return Number(t)/18446744073709552e3}}function AA(e,t){let{type:n,componentType:i,scale:r,offset:o,normalized:a}=e;if(Array.isArray(t))for(let p=0,u=t.length;p<u;p++)t[p]=s(t[p]);else t=s(t);return t;function s(p){return p=Kc(n)?c(p):Yc(n)?l(p):h(p),p}function l(p){return p.x=h(p.x),p.y=h(p.y),"z"in p&&(p.z=h(p.z)),"w"in p&&(p.w=h(p.w)),p}function c(p){let u=p.elements;for(let m=0,f=u.length;m<f;m++)u[m]=h(u[m]);return p}function h(p){return a&&(p=PA(i,p)),(a||MA(i))&&(p=p*r+o),p}}function Ff(e,t,n=null){if(e.array){Array.isArray(t)||(t=Array(e.count||0)),t.length=n===null?e.count:n;for(let i=0,r=t.length;i<r;i++)_1(e.type,t[i])||(t[i]=Bf(e))}else _1(e.type,t)||(t=Bf(e));return t}function Cp(e,t){for(let n in t)n in e||delete t[n];for(let n in e){let i=e[n];t[n]=Ff(i,t[n])}}function EA(e){switch(e){case"ENUM":return 1;case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16;case"BOOLEAN":return-1;case"STRING":return-1;default:return-1}}var Pp=class{constructor(e,t,n=null){this.name=t.name||null,this.description=t.description||null,this.type=t.type,this.componentType=t.componentType||null,this.enumType=t.enumType||null,this.array=t.array||!1,this.count=t.count||0,this.normalized=t.normalized||!1,this.offset=t.offset||0,this.scale=$n(t,"scale",1),this.max=$n(t,"max",1/0),this.min=$n(t,"min",-1/0),this.required=t.required||!1,this.noData=$n(t,"noData",null),this.default=$n(t,"default",null),this.semantic=$n(t,"semantic",null),this.enumSet=null,this.accessorProperty=n,n&&(this.offset=$n(n,"offset",this.offset),this.scale=$n(n,"scale",this.scale),this.max=$n(n,"max",this.max),this.min=$n(n,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=$n(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return Ff(this,e,t)}resolveDefaultElement(e){return Mp(this,e)}resolveDefault(e){return CA(this,e)}resolveNoData(e){return TA(this,e)}resolveEnumsToStrings(e){let t=this.enumSet;if(this.type==="ENUM")if(Array.isArray(e))for(let i=0,r=e.length;i<r;i++)e[i]=n(e[i]);else e=n(e);return e;function n(i){let r=t.values.find(o=>o.value===i);return r===null?"":r.name}}adjustValueScaleOffset(e){return I1(this.type)?AA(this,e):e}},jf=class{constructor(e,t={},n={},i=null){this.definition=e,this.class=t[e.class],this.className=e.class,this.enums=n,this.data=i,this.name="name"in e?e.name:null,this.properties=null}getPropertyNames(){return Object.keys(this.class.properties)}includesData(e){return!!this.definition.properties[e]}dispose(){}_initProperties(e=Pp){let t={};for(let n in this.class.properties)t[n]=new e(this.enums,this.class.properties[n],this.definition.properties[n]);this.properties=t}},RA=class extends Pp{constructor(e,t,n=null){super(e,t,n),this.attribute=n?.attribute??null}},kA=class extends jf{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(RA)}getData(e,t,n={}){let i=this.properties;Cp(i,n);for(let r in i)n[r]=this.getPropertyValue(r,e,t,n[r]);return n}getPropertyValue(e,t,n,i=null){if(t>=this.count)throw Error("PropertyAttributeAccessor: Requested index is outside the range of the buffer.");let r=this.properties[e],o=r.type;if(!r)throw Error("PropertyAttributeAccessor: Requested class property does not exist.");if(!this.definition.properties[e])return r.resolveDefault(i);i=r.shapeToProperty(i);let a=n.getAttribute(r.attribute.toLowerCase());if(Kc(o)){let s=i.elements;for(let l=s.length;0<l;)s[0]=a.getComponent(t,0)}else if(Yc(o))i.fromBufferAttribute(a,t);else if(o==="SCALAR"||o==="ENUM")i=a.getX(t);else throw Error("StructuredMetadata.PropertyAttributeAccessor: BOOLEAN and STRING types are not supported by property attributes.");return i=r.adjustValueScaleOffset(i),i=r.resolveEnumsToStrings(i),i=r.resolveNoData(i),i}},LA=class extends Pp{constructor(e,t,n=null){super(e,t,n),this.values=n?.values??null,this.valueLength=EA(this.type),this.arrayOffsets=$n(n,"arrayOffsets",null),this.stringOffsets=$n(n,"stringOffsets",null),this.arrayOffsetType=$n(n,"arrayOffsetType","UINT32"),this.stringOffsetType=$n(n,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let n=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:i,arrayOffsetType:r}=this,o=new($c(r))(e[i]);n=o[t+1]-o[t]}return n}getIndexOffsetFromId(e,t){let n=t;if(this.arrayOffsets){let{arrayOffsets:i,arrayOffsetType:r}=this;n=new($c(r))(e[i])[n]}else this.array&&(n*=this.count);return n}},DA=class extends jf{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(LA)}getData(e,t={}){let n=this.properties;Cp(n,t);for(let i in n)t[i]=this.getPropertyValue(i,e,t[i]);return t}_readValueAtIndex(e,t,n,i=null){let r=this.properties[e],{componentType:o,type:a}=r,s=this.data,l=s[r.values],c=new($c(o,a))(l),h=r.getIndexOffsetFromId(s,t);if(I1(a)||a==="ENUM")return B1(c,(h+n)*r.valueLength,a,i);if(a==="STRING"){let p=h+n,u=0;if(r.stringOffsets!==null){let{stringOffsets:f,stringOffsetType:g}=r,b=new($c(g))(s[f]);u=b[p+1]-b[p],p=b[p]}let m=new Uint8Array(c.buffer,p,u);i=new TextDecoder().decode(m)}else if(a==="BOOLEAN"){let p=h+n,u=Math.floor(p/8),m=p%8;i=(c[u]>>m&1)==1}return i}getPropertyValue(e,t,n=null){if(t>=this.count)throw Error("PropertyTableAccessor: Requested index is outside the range of the table.");let i=this.properties[e];if(!i)throw Error("PropertyTableAccessor: Requested property does not exist.");if(!this.definition.properties[e])return i.resolveDefault(n);let r=i.array,o=this.data,a=i.getArrayLengthFromId(o,t);if(n=i.shapeToProperty(n,a),r)for(let s=0,l=n.length;s<l;s++)n[s]=this._readValueAtIndex(e,t,s,n[s]);else n=this._readValueAtIndex(e,t,0,n);return n=i.adjustValueScaleOffset(n),n=i.resolveEnumsToStrings(n),n=i.resolveNoData(n),n}},Xc=new J.Box2,M1=class{constructor(){this._renderer=new J.WebGLRenderer,this._target=new J.WebGLRenderTarget(1,1),this._texTarget=new J.WebGLRenderTarget,this._quad=new Uf.FullScreenQuad(new J.ShaderMaterial({blending:J.CustomBlending,blendDst:J.ZeroFactor,blendSrc:J.OneFactor,uniforms:{map:{value:null},pixel:{value:new J.Vector2}},vertexShader:`
|
|
3673
3676
|
void main() {
|
|
3674
3677
|
|
|
3675
3678
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
@@ -3684,11 +3687,13 @@ void main() {
|
|
|
3684
3687
|
gl_FragColor = texelFetch( map, pixel, 0 );
|
|
3685
3688
|
|
|
3686
3689
|
}
|
|
3687
|
-
`}))}increaseSizeTo(e){this._target.setSize(Math.max(this._target.width,e),1)}readDataAsync(e){let{_renderer:t,_target:n}=this;return t.readRenderTargetPixelsAsync(n,0,0,e.length/4,1,e)}readData(e){let{_renderer:t,_target:n}=this;t.readRenderTargetPixels(n,0,0,e.length/4,1,e)}renderPixelToTarget(e,t,n){let{_renderer:i,_target:r}=this;$s.min.copy(t),$s.max.copy(t),$s.max.x+=1,$s.max.y+=1,i.initRenderTarget(r),i.copyTextureToTexture(e,r.texture,$s,n,0)}},Qi=new class{constructor(){let e=null;Object.getOwnPropertyNames(Ab.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new Ab),e[t](...n)))})}},Eb=new J.Vector2,Rb=new J.Vector2,Lb=new J.Vector2;function Kw(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function jb(e,t,n=[,,,]){let i=3*t,r=3*t+1,a=3*t+2;return e.index&&(i=e.index.getX(i),r=e.index.getX(r),a=e.index.getX(a)),n[0]=i,n[1]=r,n[2]=a,n}function Hb(e,t,n,i,r){let[a,o,s]=i,c=Kw(e,t);Eb.fromBufferAttribute(c,a),Rb.fromBufferAttribute(c,o),Lb.fromBufferAttribute(c,s),r.set(0,0,0).addScaledVector(Eb,n.x).addScaledVector(Rb,n.y).addScaledVector(Lb,n.z)}function Gb(e,t,n,i){let r=e.x-Math.floor(e.x),a=e.y-Math.floor(e.y),o=Math.floor(r*t%t),s=Math.floor(a*n%n);return i.set(o,s),i}var kb=new J.Vector2,Db=new J.Vector2,Nb=new J.Vector2,Zw=class extends rd{constructor(e,t,n=null){super(e,t,n),this.channels=En(n,"channels",[0]),this.index=En(n,"index",null),this.texCoord=En(n,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,n=null){let i=this.type;if(i==="BOOLEAN"||i==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return Vb(e,t*this.valueLength,i,n)}},Jw=class extends Np{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(Zw)}getData(e,t,n,i={}){let r=this.properties;td(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return this.getPropertyValuesAtTexel(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}async getDataAsync(e,t,n,i={}){let r=this.properties;td(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return await this.getPropertyValuesAtTexelAsync(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,n,i,r=[]){for(;r.length<e.length;)r.push(null);r.length=e.length,Qi.increaseSizeTo(r.length);let a=this.data,o=this.definition.properties,s=this.properties,c=jb(i,t);for(let d=0,p=e.length;d<p;d++){let g=e[d];if(!o[g])continue;let f=s[g],v=a[f.index];Hb(i,f.texCoord,n,c,kb),Gb(kb,v.image.width,v.image.height,Db),Nb.set(d,0),Qi.renderPixelToTarget(v,Db,Nb)}let l=new Uint8Array(e.length*4);if(this._asyncRead)return Qi.readDataAsync(l).then(()=>(u.call(this),r));return Qi.readData(l),u.call(this),r;function u(){for(let d=0,p=e.length;d<p;d++){let g=e[d],f=s[g],v=f.type;if(r[d]=Dp(f,r[d]),!f)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!o[g]){r[d]=f.resolveDefault(r);continue}let E=f.valueLength*(f.count||1),S=f.channels.map(R=>l[4*d+R]),b=f.componentType,x=new(Zs(b,v))(E);if(new Uint8Array(x.buffer).set(S),f.array){let R=r[d];for(let w=0,P=R.length;w<P;w++)R[w]=f.readDataFromBuffer(x,w,R[w])}else r[d]=f.readDataFromBuffer(x,0,r[d]);r[d]=f.adjustValueScaleOffset(r[d]),r[d]=f.resolveEnumsToStrings(r[d]),r[d]=f.resolveNoData(r[d])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Rp=class{constructor(e,t,n,i=null,r=null){let{schema:a,propertyTables:o=[],propertyTextures:s=[],propertyAttributes:c=[]}=e,{enums:l,classes:u}=a,d=o.map(f=>new $w(f,u,l,n)),p=[],g=[];i&&(i.propertyTextures&&(p=i.propertyTextures.map(f=>new Jw(s[f],u,l,t))),i.propertyAttributes&&(g=i.propertyAttributes.map(f=>new qw(c[f],u,l)))),this.schema=a,this.tableAccessors=d,this.textureAccessors=p,this.attributeAccessors=g,this.object=r,this.textures=t,this.nodeMetadata=i}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let i=Math.min(e.length,t.length);n.length=i;for(let r=0;r<i;r++){let a=this.tableAccessors[e[r]];n[r]=a.getData(t[r],n[r])}}if(Array.isArray(e)!==Array.isArray(n)||Array.isArray(e)!==Array.isArray(t))throw Error("StructuralMetadata: Scalar and array inputs cannot be mixed.");return n}getPropertyTableInfo(e=null){if(e===null&&(e=this.tableAccessors.map((t,n)=>n)),Array.isArray(e))return e.map(t=>{let n=this.tableAccessors[t];return{name:n.name,className:n.definition.class}});{let t=this.tableAccessors[e];return{name:t.name,className:t.definition.class}}}getPropertyTextureData(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;for(let r=0;r<i.length;r++)n[r]=i[r].getData(e,t,this.object.geometry,n[r]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;let r=[];for(let a=0;a<i.length;a++){let o=i[a].getDataAsync(e,t,this.object.geometry,n[a]).then(s=>{n[a]=s});r.push(o)}return await Promise.all(r),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let i=0;i<n.length;i++)t[i]=n[i].getData(e,this.object.geometry,t[i]);return t}getPropertyAttributeInfo(){return this.attributeAccessors.map(e=>({name:e.name,className:e.definition.class}))}dispose(){this.textureAccessors.forEach(e=>e.dispose()),this.tableAccessors.forEach(e=>e.dispose()),this.attributeAccessors.forEach(e=>e.dispose())}},Ks="EXT_structural_metadata";function Qw(e,t=[]){let n=e.json.textures?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{index:o}=r[a];i[o]===null&&(i[o]=e.loadTexture(o))}}),Promise.all(i)}function e_(e,t=[]){let n=e.json.bufferViews?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{values:o,arrayOffsets:s,stringOffsets:c}=r[a];i[o]===null&&(i[o]=e.getDependency("bufferView",o)),i[s]===null&&(i[s]=e.getDependency("bufferView",s)),i[c]===null&&(i[c]=e.getDependency("bufferView",c))}}),Promise.all(i)}var Wb=class{constructor(e){this.parser=e,this.name=Ks}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Ks))return;let i=null,r=t.json.extensions[Ks];if(r.schemaUri){let{manager:c,path:l,requestHeader:u,crossOrigin:d}=t.options,p=new URL(r.schemaUri,l).toString(),g=new J.FileLoader(c);g.setCrossOrigin(d),g.setResponseType("json"),g.setRequestHeader(u),i=g.loadAsync(p).then(f=>{r={...r,schema:f}})}let[a,o]=await Promise.all([Qw(t,r.propertyTextures),e_(t,r.propertyTables),i]),s=new Rp(r,a,o);e.userData.structuralMetadata=s,e.traverse(c=>{if(t.associations.has(c)){let{meshes:l,primitives:u}=t.associations.get(c),d=t.json.meshes[l]?.primitives[u];if(d&&d.extensions&&d.extensions[Ks]){let p=d.extensions[Ks];c.userData.structuralMetadata=new Rp(r,a,o,p,c)}else c.userData.structuralMetadata=s}})}},Ib=new J.Vector2,Bb=new J.Vector2,Ob=new J.Vector2;function t_(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var Xb=class{constructor(e,t,n){this.geometry=e,this.textures=t,this.data=n,this._asyncRead=!1,this.featureIds=n.featureIds.map(i=>{let{texture:r,...a}=i,o={label:null,propertyTable:null,nullFeatureId:null,...a};return r&&(o.texture={texCoord:0,channels:[0],...r}),o})}getTextures(){return this.textures}getFeatureInfo(){return this.featureIds}getFeaturesAsync(...e){this._asyncRead=!0;let t=this.getFeatures(...e);return this._asyncRead=!1,t}getFeatures(e,t){let{geometry:n,textures:i,featureIds:r}=this,a=Array(r.length).fill(null),o=r.length;Qi.increaseSizeTo(o);let s=jb(n,e),c=s[t_(t)];for(let d=0,p=r.length;d<p;d++){let g=r[d],f="nullFeatureId"in g?g.nullFeatureId:null;if("texture"in g){let v=i[g.texture.index];Hb(n,g.texture.texCoord,t,s,Ib),Gb(Ib,v.image.width,v.image.height,Bb),Ob.set(d,0),Qi.renderPixelToTarget(i[g.texture.index],Bb,Ob)}else if("attribute"in g){let v=n.getAttribute(`_feature_id_${g.attribute}`).getX(c);v!==f&&(a[d]=v)}else{let v=c;v!==f&&(a[d]=v)}}let l=new Uint8Array(o*4);if(this._asyncRead)return Qi.readDataAsync(l).then(()=>(u(),a));return Qi.readData(l),u(),a;function u(){let d=new Uint32Array(1);for(let p=0,g=r.length;p<g;p++){let f=r[p],v="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let{channels:E}=f.texture,S=E.map(x=>l[4*p+x]);new Uint8Array(d.buffer).set(S);let b=d[0];b!==v&&(a[p]=b)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},nd="EXT_mesh_features";function zb(e,t,n){e.traverse(i=>{if(t.associations.has(i)){let{meshes:r,primitives:a}=t.associations.get(i),o=t.json.meshes[r]?.primitives[a];o&&o.extensions&&o.extensions[nd]&&n(i,o.extensions[nd])}})}var qb=class{constructor(e){this.parser=e,this.name=nd}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(nd))return;let i=t.json.textures?.length||0,r=Array(i).fill(null);zb(e,t,(o,{featureIds:s})=>{s.forEach(c=>{if(c.texture&&r[c.texture.index]===null){let l=c.texture.index;r[l]=t.loadTexture(l)}})});let a=await Promise.all(r);zb(e,t,(o,s)=>{o.userData.meshFeatures=new Xb(o.geometry,a,s)})}},Yb=class{constructor(){this.name="CESIUM_RTC"}afterRoot(e){if(e.parser.json.extensions&&e.parser.json.extensions.CESIUM_RTC){let{center:t}=e.parser.json.extensions.CESIUM_RTC;t&&(e.scene.position.x+=t[0],e.scene.position.y+=t[1],e.scene.position.z+=t[2])}}},Ip=class{constructor(e){e={metadata:!0,rtc:!0,plugins:[],dracoLoader:null,ktxLoader:null,meshoptDecoder:null,autoDispose:!0,...e},this.tiles=null,this.metadata=e.metadata,this.rtc=e.rtc,this.plugins=e.plugins,this.dracoLoader=e.dracoLoader,this.ktxLoader=e.ktxLoader,this.meshoptDecoder=e.meshoptDecoder,this._gltfRegex=/\.(gltf|glb)$/g,this._dracoRegex=/\.drc$/g,this._loader=null}init(e){let t=new Ub.GLTFLoader(e.manager);this.dracoLoader&&(t.setDRACOLoader(this.dracoLoader),e.manager.addHandler(this._dracoRegex,this.dracoLoader)),this.ktxLoader&&t.setKTX2Loader(this.ktxLoader),this.meshoptDecoder&&t.setMeshoptDecoder(this.meshoptDecoder),this.rtc&&t.register(()=>new Yb),this.metadata&&(t.register(()=>new Wb),t.register(()=>new qb)),this.plugins.forEach(n=>t.register(n)),e.manager.addHandler(this._gltfRegex,t),this.tiles=e,this._loader=t}dispose(){this.tiles.manager.removeHandler(this._gltfRegex),this.tiles.manager.removeHandler(this._dracoRegex),this.autoDispose&&(this.ktxLoader.dispose(),this.dracoLoader.dispose())}};var{clamp:E2}=J.MathUtils;var R2=new Lp.FullScreenQuad(new J.MeshBasicMaterial),n_=new J.DataTexture(new Uint8Array([255,255,255,255]),1,1);n_.needsUpdate=!0;var r_=0,i_=1,a_=2,o_=3,s_=4,l_=5,c_=6,d_=7,u_=8,p_=9,h_=10,m_=11,L2=Object.freeze({NONE:r_,SCREEN_ERROR:i_,GEOMETRIC_ERROR:a_,DISTANCE:o_,DEPTH:s_,RELATIVE_DEPTH:l_,IS_LEAF:c_,RANDOM_COLOR:d_,RANDOM_NODE_COLOR:u_,CUSTOM_COLOR:p_,LOAD_ORDER:h_,INDEXED_COLOR:m_});var k2=Math.PI/4,D2=3/5;var Ji={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var N2=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),n=e.join("_"),{_cache:i}=this;return n in i||(t.setHSL(Math.random(),1,.5),i[n]=t.getHex()),t.set(i[n])}};var I2={[Ji.NONE]:16777215,[Ji.NOT_READY]:7829367,[Ji.NO_FIT]:2250239,[Ji.DEPTH]:4473924,[Ji.OCCUPANCY]:65535,[Ji.SPACING]:16776960,[Ji.ANGLE]:16711680,[Ji.FACING]:16711935};var B2=Math.PI/180;var O2=Pa*Math.PI*2;var z2=Pa*Math.PI*2;var Jb=require("three/examples/jsm/loaders/DRACOLoader.js"),Qb=require("three/examples/jsm/loaders/KTX2Loader.js"),ev=require("three/examples/jsm/libs/meshopt_decoder.module.js"),ur=require("three");var el=require("three");function $b(e){return!!e&&!e.isInterleavedBufferAttribute}function Kb(e,t,n,i){for(let r=0;r<e.count;r+=1)for(let a=0;a<e.itemSize;a+=1)t.setComponent(r,a,el.MathUtils.clamp(e.getComponent(r,a),n,i));return t}function f_(e){for(let t=0;t<e.count;t+=1)for(let n=0;n<e.itemSize;n+=1){let i=e.getComponent(t,n);if(!Number.isFinite(i)||i<0||i>1)return!1}return!0}var id=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(n=>{let i=n.geometry;if(!i)return;let r=i.attributes.normal;$b(r)&&!(r.array instanceof Int16Array)&&(i.attributes.normal=Kb(r,new el.BufferAttribute(new Int16Array(r.count*r.itemSize),r.itemSize,!0),-1,1));for(let a of["uv","uv1","uv2","uv3"]){let o=i.attributes[a];!$b(o)||o.array instanceof Uint16Array||!f_(o)||(i.attributes[a]=Kb(o,new el.BufferAttribute(new Uint16Array(o.count*o.itemSize),o.itemSize,!0),0,1))}})}};var tl=require("react/jsx-runtime"),g_=0,Zb=4,b_=6,v_=12,x_=4;function y_(e){try{let t=typeof window>"u"?new URL(e):new URL(e,window.location.href);return new URL("objects.json",t).toString()}catch{return null}}function Bp({url:e,rotation:t=[0,0,0],errorTarget:n=64,cacheSize:i=800,memoryBudgetMB:r=800,decoderConfig:a,objectBindings:o,itemMaterials:s,sceneConfig:c,selectedItem:l,panelHoveredItem:u,highlightOnHover:d=!0,onItemClick:p,onItemHover:g,onItemDoubleClick:f,onItemContextMenu:v,onObjectCatalog:E,onTilesetBounds:S,onModelLoaded:b,onLoadError:x,nodeRefsOut:R,onNodeRefsChange:w,materialRefsOut:P,explodeFactor:y=0,suspendBindingTransforms:m=!1}){let{camera:A,gl:C,invalidate:D}=(0,ad.useThree)(),$=(0,Be.useRef)(null),[k,X]=(0,Be.useState)(null),O=(0,Be.useRef)({onItemClick:p,onItemHover:g,onItemDoubleClick:f,onObjectCatalog:E,onTilesetBounds:S,onModelLoaded:b,onLoadError:x,onNodeRefsChange:w});O.current={onItemClick:p,onItemHover:g,onItemDoubleClick:f,onObjectCatalog:E,onTilesetBounds:S,onModelLoaded:b,onLoadError:x,onNodeRefsChange:w};let H=(0,Be.useRef)(!0),[B,se]=(0,Be.useState)(null),Q=(0,Be.useRef)(null);Q.current=B;let be=(0,Be.useRef)([]),ve=(0,Be.useRef)(!1);(0,Be.useEffect)(()=>{let ee=new Nc;return se(ee),()=>ee.dispose()},[e]);let et=(0,Be.useRef)(null),Mt=(0,Be.useRef)(0),Yt=(0,Be.useRef)(!1),en=r*1024*1024,Dt=(0,Be.useRef)(!1),ft=(0,Be.useRef)(rp),tn=(0,Be.useRef)(null),$t=(0,Be.useRef)(null),Cn=(0,Be.useRef)(null);(0,Be.useEffect)(()=>()=>{Cn.current!==null&&clearTimeout(Cn.current)},[]);let jt=a?.dracoDecoderPath??Xu,nn=a?.ktx2TranscoderPath??qu,Ht=a?.meshopt??!0,[oe,$n]=(0,Be.useState)(null);(0,Be.useEffect)(()=>{Yt.current=!1,Dt.current=!1;let ee=new Ap(e);ee.loadAncestors=!0;let ge=new Fc;ge.priorityCallback=ee.downloadQueue.priorityCallback,ge.maxJobsPerOrigin=v_;let we=new pi;we.priorityCallback=ee.parseQueue.priorityCallback,we.maxJobs=b_;let Je=new pi;Je.priorityCallback=ee.processNodeQueue.priorityCallback,Je.maxJobs=ee.processNodeQueue.maxJobs;let Tt=new zs;Tt.unloadPriorityCallback=ee.lruCache.unloadPriorityCallback,ee.downloadQueue=ge,ee.parseQueue=we,ee.processNodeQueue=Je,ee.lruCache=Tt;let Qe=jt?new Jb.DRACOLoader().setDecoderPath(jt).setWorkerLimit(x_):null,bt=nn?new Qb.KTX2Loader().setTranscoderPath(nn).detectSupport(C):null;return ee.registerPlugin(new Ip({dracoLoader:Qe,ktxLoader:bt,meshoptDecoder:Ht?ev.MeshoptDecoder:null,autoDispose:!1})),ee.registerPlugin(new kp({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),ee.registerPlugin(new id),$n(ee),window.__riTiles=ee,()=>{ee.forEachLoadedModel(fe=>gs(fe)),ee.dispose(),Qe?.dispose(),bt?.dispose(),$n(fe=>fe===ee?null:fe)}},[jt,C,nn,Ht,e]),(0,Be.useEffect)(()=>{oe&&(ft.current=rp,tn.current=null,oe.errorTarget=n,oe.lruCache.maxSize=i,oe.lruCache.minSize=Math.max(1,Math.floor(i*.75)),oe.lruCache.maxBytesSize=en,oe.lruCache.minBytesSize=en*.75,D())},[i,n,D,en,oe]);let Rt=(0,Be.useMemo)(()=>{let ee=o??{};return{objectBindings:ee,keyByModelObject:Ng(ee),itemMaterials:s,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:l??null,hoveredKey:Ig(k,u),highlightOnHover:d,suspendTransforms:m,placementFrame:oe?.group.matrixWorld,invalidate:D}},[k,d,D,s,o,u,c,l,m,oe]),st=(0,Be.useCallback)(()=>{if(!oe)return;let ee=Kn.current,ge=ve.current?Q.current?.nodesByBinding(ee)??{}:{},we={};oe.group.traverse(bt=>{if(!bt.isMesh)return;let fe=tp(bt);if(!fe)return;let He=ee.keyByModelObject[fe]??fe;if(!ee.objectBindings[He])return;ge[He]||(ge[He]=bt);let tt=bt.material;tt&&(we[He]=tt)});let Je=R?.current??{},Tt=Object.keys(Je),Qe=Tt.length!==Object.keys(ge).length||Tt.some(bt=>Je[bt]!==ge[bt]);R&&(R.current=ge),P&&(P.current=we),(Qe||!R)&&O.current.onNodeRefsChange?.()},[P,R,oe]),Kt=(0,Be.useCallback)(ee=>kc(ee,Rt),[Rt]),Gt=(0,Be.useCallback)(ee=>Og(ee,Rt),[Rt]),Zt=(0,Be.useRef)(Gt);Zt.current=Gt;let Kn=(0,Be.useRef)(Rt);Kn.current=Rt;let ze=(0,Be.useCallback)(()=>{let ee=et.current,ge=Mt.current;return!ee||ge<=0?Kn.current:{...Kn.current,explode:{factor:ge,centre:ee.centre,radius:ee.radius}}},[]);(0,Be.useEffect)(()=>{oe&&(Gt(oe.group),H.current=!0,oe.forEachLoadedModel(ee=>{Gt(ee),Mo(ee,ze())}),D())},[Gt,D,ze,oe]),(0,Be.useEffect)(()=>{let ee=y_(e);if(!ee)return;let ge=!1;return fetch(ee).then(we=>we.ok?we.json():null).then(we=>{ge||!we?.objects||(be.current=we.objects,ve.current=we.bindingFrame==="gltf-identity-v2",ve.current&&Q.current?.setCatalog(we.objects),H.current=!0,O.current.onObjectCatalog?.(we.objects),D())}).catch(()=>{}),()=>{ge=!0}},[e,D,B]),(0,Be.useEffect)(()=>{if(!oe)return;let ee=!1,ge=()=>D(),we=fe=>{fe.scene&&(fe.scene.traverse(He=>{let tt=He.material;for(let rn of Array.isArray(tt)?tt:tt?[tt]:[])rn.transparent&&rn.side===ur.DoubleSide&&(rn.forceSinglePass=!0)}),Zt.current(fe.scene),Mo(fe.scene,ze()),Yl(fe.scene)),H.current=!0,ee||(ee=!0,O.current.onModelLoaded?.(oe.group)),D()},Je=fe=>{O.current.onLoadError?.(fe.error)},Tt=fe=>{fe.scene&&(np(fe.scene),gs(fe.scene)),H.current=!0};oe.setCamera(A),oe.setResolutionFromRenderer(A,C),oe.addEventListener("needs-update",ge),oe.addEventListener("load-model",we),oe.addEventListener("load-error",Je),oe.addEventListener("dispose-model",Tt);let Qe=()=>{H.current=!0,D()};oe.addEventListener("tile-visibility-change",Qe);let bt=()=>{let fe=oe.root;fe&&!fe.content?.uri&&fe.refine==="REPLACE"&&(fe.refine="ADD",D())};return oe.addEventListener("load-root-tileset",bt),D(),()=>{oe.removeEventListener("needs-update",ge),oe.removeEventListener("load-model",we),oe.removeEventListener("load-error",Je),oe.removeEventListener("dispose-model",Tt),oe.removeEventListener("tile-visibility-change",Qe),oe.removeEventListener("load-root-tileset",bt),np(oe.group),oe.deleteCamera(A),R&&(R.current={}),P&&(P.current={})}},[A,C,D,P,R,ze,oe]);let ye=Pc(ee=>Kt(ee)?.binding??null,v),Ce=(0,Be.useCallback)(ee=>{if(ye.consumeClick())return;let ge=Kt(ee.object);ge&&(ee.stopPropagation(),O.current.onItemClick?.(ge.binding))},[Kt,ye,p]),Wt=(0,Be.useCallback)(ee=>{let ge=Kt(ee.object);if(!ge)return;O.current.onItemDoubleClick?.(ge.binding,Ac(ee))&&ee.stopPropagation()},[Kt]),gt=(0,Be.useCallback)(ee=>{let ge=Kt(ee.object),we=ge?.key??null;we!==$.current&&($.current=we,X(we),O.current.onItemHover?.(ge?.binding??null))},[Kt]),Jt=(0,Be.useCallback)(()=>{$.current!==null&&($.current=null,X(null),O.current.onItemHover?.(null))},[]);return(0,Be.useEffect)(()=>{D()},[D,oe]),(0,ad.useFrame)((ee,ge)=>{if(!oe)return;if(oe.setResolutionFromRenderer(A,C),ve.current&&B){let xn=B.sync(ze(),l,m);B.updateBounds(oe.root),m&&oe.forEachLoadedModel(U=>Mo(U,xn))}if(oe.update(),!Yt.current){let xn=new ur.Box3;if(oe.getBoundingBox(xn)){Yt.current=!0,oe.group.updateMatrixWorld(),xn.applyMatrix4(oe.group.matrixWorld);let U=xn.getBoundingSphere(new ur.Sphere);et.current={centre:U.center.clone(),radius:xn.getSize(new ur.Vector3).length()*.5},O.current.onTilesetBounds?.(xn),D()}}H.current&&(H.current=!1,st());let we=Math.min(Math.max(y,0),1),Je=Mt.current;Math.abs(Je-we)>1e-4?(Mt.current=ur.MathUtils.lerp(Je,we,1-Math.exp(-6*ge)),Mo(oe.group,ze()),D()):Je!==we&&(Mt.current=we,Mo(oe.group,ze()),D());let Tt=oe,Qe=oe.lruCache,bt=Qe.isFull(),fe=ft.current,He=fe.loosened&&tn.current?tn.current:{bytes:Qe.maxBytesSize,items:Qe.maxSize},tt=0;for(let xn of Qe.usedSet??[])tt+=Qe.bytesMap?.get(xn)??0;let rn=!1,vn=oe;for(let xn of vn.usedSet??[]){let U=xn.internal?.loadingState??Zb;if(xn.traversal?.used&&xn.internal?.hasContent&&U>=g_&&U<Zb){rn=!0;break}}let Tn=$t.current??($t.current={world:new ur.Matrix4,projection:new ur.Matrix4}),Qt=!Tn.world.equals(A.matrixWorld)||!Tn.projection.equals(A.projectionMatrix);Qt&&(Tn.world.copy(A.matrixWorld),Tn.projection.copy(A.projectionMatrix));let Ir={full:bt,wanting:rn,moved:Qt,usage:Math.max(tt/Math.max(1,He.bytes),(Qe.usedSet?.size??0)/Math.max(1,He.items)),now:performance.now()},kn=Xg(fe,Ir);kn!==fe&&(kn.loosened&&(!fe.loosened||kn.raisedAt!==fe.raisedAt)?(fe.loosened||(tn.current=He),Qe.maxBytesSize=Math.max(He.bytes,Qe.cachedBytes??0)*ip,Qe.maxSize=Math.ceil(Math.max(He.items,Qe.itemSet?.size??0)*ip)):!kn.loosened&&fe.loosened&&tn.current&&(Qe.maxBytesSize=tn.current.bytes,Qe.maxSize=tn.current.items,tn.current=null),ft.current=kn,oe.errorTarget=n*kn.factor,D()),!Dt.current&&bt&&Ir.wanting&&kn.factor>=Ns&&(Dt.current=!0,console.warn("[react-immersive] The tile memory budget is full even at the coarsest level of detail, so the model may render incompletely. This usually means the model's textures are too large for streaming \u2014 re-process it with a smaller MAX_TEXTURE_SIZE, or raise memoryBudgetMB."));let Br=qg(kn,Ir);Br===0?D():Br!==null&&Cn.current===null&&(Cn.current=setTimeout(()=>{Cn.current=null,D()},Br)),((Tt.stats?.downloading??0)>0||(Tt.stats?.parsing??0)>0||Tt.loadProgress!==void 0&&Tt.loadProgress<1&&!bt)&&D()}),oe?(0,tl.jsxs)("group",{rotation:t,children:[B?(0,tl.jsx)("primitive",{object:B.group}):null,(0,tl.jsx)("primitive",{object:oe.group,onClick:Ce,onDoubleClick:Wt,onPointerDown:v?ye.onPointerDown:void 0,onPointerMove:gt,onPointerOut:Jt})]}):null}var od=require("three");var w_=new od.Matrix4().makeRotationX(Math.PI/2);function tv(e){e.updateMatrixWorld(!0);let t=new od.Matrix4().copy(e.matrixWorld).invert().premultiply(w_),n=new od.Matrix4,i=[];for(let[r,a]of Object.entries(Xi(e).nodesById)){let o=a;if(!o.isMesh||!o.geometry||!a.name)continue;let s=o.geometry;s.boundingBox||s.computeBoundingBox();let c=s.boundingBox.clone().applyMatrix4(n.multiplyMatrices(t,a.matrixWorld)),l=s.index?s.index.count:s.getAttribute("position")?.count??0;i.push({name:r,triangles:Math.floor(l/3),minimum:c.min.toArray(),maximum:c.max.toArray()})}return i.sort((r,a)=>r.name.localeCompare(a.name))}var Fe=require("react"),Op=require("@react-three/drei"),Ea=require("@react-three/fiber"),mi=require("three");var jn=require("react/jsx-runtime"),__=.02;function nv(e,t){let n=(0,Fe.useRef)(null),i=(0,Ea.useThree)(l=>l.scene),r=(0,Fe.useRef)(null),a=(0,Fe.useMemo)(()=>new mi.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),o=(0,Fe.useMemo)(()=>new mi.Vector3,[]),s=(0,Fe.useMemo)(()=>new mi.Vector3,[]),c=(0,Fe.useMemo)(()=>new mi.Vector3,[]);return(0,Fe.useEffect)(()=>{r.current=null},[e.anchorNodeName]),(0,Ea.useFrame)(({camera:l})=>{let u=n.current,d=u?.parent;if(!u||!d)return;let p=r.current;if(e.anchorNodeName&&(!p||!p.parent)&&(p=Ai(i,e.anchorNodeName),r.current=p),p?(p.updateWorldMatrix(!0,!1),o.copy(a).applyMatrix4(p.matrixWorld)):(o.copy(a),d.localToWorld(o)),t){let g=t.current.get(e.id);g||(g=new mi.Vector3,t.current.set(e.id,g)),g.copy(o)}c.copy(l.position).sub(o),c.lengthSq()>0?(c.normalize(),s.copy(o).addScaledVector(c,__)):s.copy(o),d.worldToLocal(s),u.position.copy(s)}),n}function S_({annotation:e,occluders:t,worldPositionsRef:n,onClick:i,onHover:r,showAnnotationOnHover:a}){let[o,s]=(0,Fe.useState)(!1),c=nv(e,n),[l,u]=(0,Fe.useState)(!1),[d,p]=(0,Fe.useState)(1),g=(0,Fe.useRef)(null),f=(0,Fe.useRef)(null),v=(0,Fe.useRef)(null);(0,Fe.useEffect)(()=>()=>{g.current&&(clearTimeout(g.current),g.current=null),v.current&&(clearTimeout(v.current),v.current=null)},[]);let E=w=>{w.stopPropagation(),w.preventDefault(),g.current&&(clearTimeout(g.current),g.current=null),g.current=window.setTimeout(()=>{i?.(e),g.current=null},10)},S=w=>{w.stopPropagation(),u(!0),p(100),v.current&&(clearTimeout(v.current),v.current=null),r?.(e),a&&i?.(e)},b=w=>{w.stopPropagation(),u(!1),p(1),v.current&&clearTimeout(v.current),v.current=window.setTimeout(()=>{r?.(null),a&&r?.(null),v.current=null},50)},x=w=>{w.stopPropagation();let P=w.currentTarget;P.dataset.pointerX=String(w.clientX),P.dataset.pointerY=String(w.clientY)},R=w=>{w.stopPropagation();let P=w.currentTarget,y=parseFloat(P.dataset.pointerX||"0"),m=parseFloat(P.dataset.pointerY||"0"),A=w.clientX-y,C=w.clientY-m;Math.sqrt(A*A+C*C)<10&&E(w)};return(0,jn.jsx)("group",{ref:c,children:(0,jn.jsx)(Op.Html,{center:!0,occlude:t,onOcclude:s,pointerEvents:o?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:o?"none":"auto",zIndex:d},className:"annotation-html-wrapper",transparent:!0,children:(0,jn.jsx)("div",{ref:f,className:`ri-annotationMarker ${l?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:o?"none":"flex"},onPointerDown:x,onPointerUp:R,onPointerEnter:S,onPointerLeave:b,onDoubleClick:w=>{w.stopPropagation(),i?.(e)},role:"button",tabIndex:0,"aria-label":`Annotation ${e.id}`,children:(0,jn.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function M_({annotation:e,occluders:t,popupRef:n,onClose:i,hideCloseButton:r=!1}){let[a,o]=(0,Fe.useState)(!1),s=nv(e),c=(0,jn.jsxs)("div",{ref:n,className:"ri-viewAnnotationPopup",style:{display:a?"none":"block"},onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[(0,jn.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,jn.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!r&&(0,jn.jsx)("button",{onClick:l=>{l.stopPropagation(),i?.()},className:"ri-viewAnnotationClose","aria-label":"Close annotation",children:"\xD7"})]}),e.description&&(0,jn.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description})]});return(0,jn.jsx)("group",{ref:s,children:(0,jn.jsx)(Op.Html,{occlude:t,onOcclude:o,pointerEvents:a?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:a?"none":"auto",zIndex:1e3},transparent:!0,children:c})})}function zp({annotations:e,sceneConfig:t,activeAnnotation:n,popupRef:i,canvasRootRef:r,worldPositionsRef:a,modelLoaded:o,onAnnotationClick:s,onAnnotationHover:c,onCloseAnnotation:l,hideCloseButton:u=!1,showAnnotationOnHover:d=!1}){let p=(0,Ea.useThree)(O=>O.invalidate),g=(0,Ea.useThree)(O=>O.scene),[f,v]=(0,Fe.useState)(null),[E,S]=(0,Fe.useState)(!1),b=(0,Fe.useRef)(null),x=(0,Fe.useRef)(null),R=(0,Fe.useRef)(null),w=(0,Fe.useMemo)(()=>{let O=[];return g.traverse(H=>{let B=H;B.isMesh&&!B.isSkinnedMesh&&O.push({current:H})}),O},[g,e,o]),P=(0,Fe.useCallback)(()=>{p();let O=()=>{p(),x.current=window.requestAnimationFrame(()=>{p(),x.current=null})};x.current=window.requestAnimationFrame(O)},[p]);(0,Fe.useEffect)(()=>{P()},[e,P]),(0,Fe.useEffect)(()=>{P()},[n,P]),(0,Fe.useEffect)(()=>()=>{x.current!==null&&window.cancelAnimationFrame(x.current),R.current&&clearTimeout(R.current)},[]);let y=E?f:n||f,m=(0,Fe.useMemo)(()=>y?e.find(O=>O.id===y.id)??y:null,[y,e]),A=(0,Fe.useCallback)(O=>{if(E&&f?.id===O.id){S(!1),v(null),l?.();return}S(!0),v(O),s?.(O)},[E,f,s,l]),C=(0,Fe.useCallback)(O=>{c?.(O),d&&!E&&(R.current&&(clearTimeout(R.current),R.current=null),O?v(O):R.current=window.setTimeout(()=>{v(null),l?.(),R.current=null},100))},[E,c,d,l]),D=(0,Fe.useCallback)(()=>{S(!1),v(null),l?.()},[l]),$=(0,Fe.useCallback)(O=>{let H=O.target;if(H.closest?.(".ri-annotationMarker")||H.closest?.(".ri-viewAnnotationPopup")||H.closest?.(".annotation-html-wrapper"))return;let B=r.current;B&&B.contains(H)&&(S(!1),v(null),l?.())},[r,l]),k=(0,Fe.useCallback)(O=>{O.key==="Escape"&&E&&(S(!1),v(null),l?.())},[E,l]);(0,Fe.useEffect)(()=>{let O=r.current;return O&&(O.addEventListener("click",$),O.addEventListener("pointerdown",$)),document.addEventListener("keydown",k),()=>{O&&(O.removeEventListener("click",$),O.removeEventListener("pointerdown",$)),document.removeEventListener("keydown",k)}},[r,$,k]);let X=(0,Fe.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(O=>O*Math.PI/180),[t?.model.rotation]);return(0,Fe.useEffect)(()=>{p()},[p,X]),(0,Ea.useFrame)((O,H)=>{if(!b.current)return;b.current.rotation.x=mi.MathUtils.lerp(b.current.rotation.x,X[0],1-Math.exp(-5*H)),b.current.rotation.y=mi.MathUtils.lerp(b.current.rotation.y,X[1],1-Math.exp(-5*H)),b.current.rotation.z=mi.MathUtils.lerp(b.current.rotation.z,X[2],1-Math.exp(-5*H));let{rotation:B}=b.current;Math.abs(B.x-X[0])+Math.abs(B.y-X[1])+Math.abs(B.z-X[2])>1e-4&&p()}),(0,jn.jsxs)("group",{ref:b,children:[e.map(O=>{let H=`${O.worldPosition.join(",")}-${O.title}-${O.id}`;return(0,jn.jsx)(S_,{annotation:O,occluders:w,worldPositionsRef:a,onClick:A,onHover:C,showAnnotationOnHover:d},H)}),m?(0,jn.jsx)(M_,{annotation:m,occluders:w,popupRef:i,onClose:D,hideCloseButton:u},`popup-${m.id}`):null]})}var nl=require("react"),rl=require("@react-three/drei"),Ra=require("three"),Fn=require("react/jsx-runtime"),C_="#22d3ee",T_="#facc15";function sd(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function P_(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function ld({position:e,children:t}){return(0,Fn.jsx)(rl.Html,{center:!0,position:e,zIndexRange:[20,0],children:(0,Fn.jsx)("div",{className:"ri-measureLabel",children:t})})}function A_({box:e,unit:t}){let n=(0,nl.useMemo)(()=>[(e.min[0]+e.max[0])/2,(e.min[1]+e.max[1])/2,(e.min[2]+e.max[2])/2],[e.min,e.max]),i=(0,nl.useMemo)(()=>{let[s,c,l]=e.size;return new Ra.EdgesGeometry(new Ra.BoxGeometry(s||1e-4,c||1e-4,l||1e-4))},[e.size]);(0,nl.useEffect)(()=>()=>{i.dispose()},[i]);let[r,a,o]=e.size;return(0,Fn.jsxs)("group",{position:n,children:[(0,Fn.jsx)("lineSegments",{geometry:i,children:(0,Fn.jsx)("lineBasicMaterial",{color:T_})}),(0,Fn.jsxs)(ld,{position:[0,-a/2,o/2],children:["W ",sd(r,t)]}),(0,Fn.jsxs)(ld,{position:[-r/2,0,o/2],children:["H ",sd(a,t)]}),(0,Fn.jsxs)(ld,{position:[r/2,-a/2,0],children:["D ",sd(o,t)]})]})}function Up({points:e,unit:t,box:n,showDimensions:i}){return(0,Fn.jsxs)("group",{children:[e.map(r=>(0,Fn.jsx)(rl.Html,{center:!0,position:r.position,zIndexRange:[15,0],children:(0,Fn.jsx)("div",{className:"ri-measureDot"})},r.id)),e.slice(1).map((r,a)=>{let o=e[a].position,s=r.position,c=new Ra.Vector3(...o).distanceTo(new Ra.Vector3(...s));return(0,Fn.jsxs)("group",{children:[(0,Fn.jsx)(rl.Line,{points:[o,s],color:C_,lineWidth:2}),(0,Fn.jsx)(ld,{position:P_(o,s),children:sd(c,t)})]},`${e[a].id}-${r.id}`)}),i&&n?(0,Fn.jsx)(A_,{box:n,unit:t}):null]})}var at=require("react"),La=require("@react-three/xr"),ov=require("@react-three/fiber"),il=require("three"),$r=require("react/jsx-runtime"),E_=1,rv=1,R_=.1,L_=10;function k_(e,t){let[n,i,r]=e.size,a=(e.min[0]+e.max[0])/2,o=(e.min[2]+e.max[2])/2,s=Math.max(n,i,r)||1;return{scale:t==="real-world"?1:E_/s,offset:[-a,-e.min[1],-o]}}function iv(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function av(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var D_=(0,at.forwardRef)(function({box:t,scaleMode:n,children:i,onARStateChange:r},a){let o=(0,at.useRef)(null),s=(0,at.useRef)(null),c=(0,at.useRef)(null),l=(0,La.useXR)(H=>H.session!=null),u=(0,La.useXR)(H=>H.mode==="immersive-ar"),d=(0,at.useMemo)(()=>t?k_(t,n):null,[t,n]),p=(0,at.useRef)(new il.Vector3(0,0,-rv)),g=(0,at.useRef)(1),f=(0,at.useRef)(0),v=(0,at.useRef)(!0),E=(0,at.useRef)(!1),S=(0,at.useMemo)(()=>new il.Matrix4,[]),b=(0,at.useRef)(new il.Vector3),x=(0,at.useRef)(!1),R=(0,at.useRef)(null),w=(0,at.useRef)(!1),P=(0,at.useRef)(0),y=(0,at.useRef)(0),m=(0,at.useRef)(1),A=(0,at.useRef)(0),C=(0,at.useCallback)(()=>{if(!r||!u)return;let H={canPlace:x.current,isPlacementMode:v.current,isModelPlaced:E.current},B=R.current;B&&B.canPlace===H.canPlace&&B.isPlacementMode===H.isPlacementMode&&B.isModelPlaced===H.isModelPlaced||(R.current=H,r(H))},[u,r]),D=(0,at.useCallback)(()=>!u||!x.current?!1:(p.current.copy(b.current),E.current=!0,v.current=!1,C(),!0),[C,u]),$=(0,at.useCallback)(()=>{u&&(v.current=!0,C())},[C,u]),k=(0,at.useCallback)(()=>{let H=D();return!H&&u&&(v.current=!1,C()),H},[C,u,D]),X=(0,at.useCallback)(()=>{u&&(v.current=!1,C())},[C,u]);(0,at.useImperativeHandle)(a,()=>({placeCurrent:D,startPlacementMode:$,finishPlacementMode:k,cancelPlacementMode:X}),[X,k,D,$]),(0,at.useEffect)(()=>{if(!l){p.current.set(0,0,-rv),g.current=1,f.current=0,x.current=!1,w.current=!1,v.current=!0,E.current=!1,R.current=null;return}u&&(x.current=!1,w.current=!1,v.current=!0,E.current=!1,R.current=null,C())},[C,l,u]),(0,La.useXRHitTest)((H,B)=>{if(!u||H.length===0){x.current&&(x.current=!1,C());return}B(S,H[0])&&(b.current.setFromMatrixPosition(S),x.current||(x.current=!0,C()))},"viewer"),(0,La.useXRInputSourceEvent)("all","select",()=>{!u||w.current||!v.current||D()},[u,D]),(0,at.useEffect)(()=>{if(!u)return;let H=Q=>{Q.touches.length===2&&(w.current=!0,P.current=iv(Q.touches),y.current=av(Q.touches),m.current=g.current,A.current=f.current)},B=Q=>{if(!w.current||Q.touches.length!==2)return;Q.preventDefault();let be=iv(Q.touches);if(P.current>0){let et=be/P.current;g.current=Math.min(L_,Math.max(R_,m.current*et))}let ve=av(Q.touches);f.current=A.current-(ve-y.current)},se=Q=>{Q.touches.length===0&&requestAnimationFrame(()=>{w.current=!1})};return window.addEventListener("touchstart",H),window.addEventListener("touchmove",B,{passive:!1}),window.addEventListener("touchend",se),window.addEventListener("touchcancel",se),()=>{window.removeEventListener("touchstart",H),window.removeEventListener("touchmove",B),window.removeEventListener("touchend",se),window.removeEventListener("touchcancel",se)}},[u]),(0,ov.useFrame)(()=>{let H=o.current,B=s.current;if(!H||!B)return;!l||!d?(H.visible=!0,H.position.set(0,0,0),H.rotation.set(0,0,0),B.scale.setScalar(1)):(H.visible=!u||E.current,H.position.copy(p.current),H.rotation.set(0,f.current,0),B.scale.setScalar(d.scale*g.current));let se=c.current;if(se){let Q=u&&v.current&&x.current;se.visible=Q,Q&&se.position.copy(b.current)}});let O=l&&d?d.offset:[0,0,0];return(0,$r.jsxs)($r.Fragment,{children:[(0,$r.jsxs)("mesh",{ref:c,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,$r.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,$r.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,$r.jsx)("group",{ref:o,children:(0,$r.jsx)("group",{ref:s,children:(0,$r.jsx)("group",{position:O,children:i})})})]})}),sv=D_;var Bt=require("react"),cd=require("@react-three/fiber"),Rn=require("three"),N_=1.2;function Fp({controlsRef:e,sceneRef:t,config:n,playing:i,resetOnPlay:r=!1,onFinished:a,onUserInteract:o,onStop:s}){let c=(0,cd.useThree)(X=>X.invalidate),l=(0,Bt.useMemo)(()=>n.waypoints??[],[n.waypoints]),u=l.length>=2,d=n.loop??!0,p=(0,Bt.useMemo)(()=>{if(l.length<2)return 24;let X=0;for(let O=0;O<l.length-1;O++)X+=l[O].segmentDuration??3.5;return d&&l.length>1&&(X+=l[l.length-1].segmentDuration??3.5),Math.max(X,4)},[l,d]),g=n.duration??p,f=(0,Bt.useMemo)(()=>l.map(X=>[...X.position,...X.target,X.azimuthAngle??"",X.polarAngle??"",X.segmentDuration??""].join(",")).join(";"),[l]),v=(0,Bt.useMemo)(()=>{let X=[];if(l.length<2)return X;let O=0;for(let H=0;H<l.length-1;H++)O+=l[H].segmentDuration??3.5,X.push(O);return d&&l.length>1&&(O+=l[l.length-1].segmentDuration??3.5,X.push(O)),X},[l,d]),E=(0,Bt.useMemo)(()=>X=>{if(l.length<2||v.length===0)return X/g;let O=v[v.length-1],H=d?X%g:Math.min(X,g),B=g>0?H/g*O:0;for(let se=0;se<v.length;se++)if(B<=v[se]){let Q=se===0?0:v[se-1],be=v[se]-Q,ve=be>0?(B-Q)/be:0,et=d?l.length:l.length-1,Mt=se/et,Yt=1/et;return Mt+ve*Yt}return 1},[l.length,v,g,d]),S=(0,Bt.useMemo)(()=>u?{position:new Rn.CatmullRomCurve3(l.map(X=>new Rn.Vector3(...X.position)),d,"catmullrom",.5),target:new Rn.CatmullRomCurve3(l.map(X=>new Rn.Vector3(...X.target)),d,"catmullrom",.5)}:null,[f,u,d]),b=(0,Bt.useMemo)(()=>{if(!u||!l.every(O=>Number.isFinite(O.azimuthAngle)&&Number.isFinite(O.polarAngle)))return null;let X=l.map(O=>({azimuth:O.azimuthAngle,polar:O.polarAngle,distance:new Rn.Vector3(...O.position).distanceTo(new Rn.Vector3(...O.target))}));for(let O=1;O<X.length;O+=1){let H=X[O-1].azimuth,B=X[O].azimuth;X[O].azimuth=B+Math.round((H-B)/(Math.PI*2))*Math.PI*2}return X},[f,u]),x=(0,Bt.useRef)(0),R=(0,Bt.useRef)(0),w=(0,Bt.useRef)(new Rn.Vector3),P=(0,Bt.useRef)(new Rn.Vector3),y=(0,Bt.useRef)(!1),m=(0,Bt.useRef)(0),A=(0,Bt.useRef)(!1),C=(0,Bt.useRef)(null),D=(0,Bt.useMemo)(()=>new Rn.Vector3,[]),$=(0,Bt.useMemo)(()=>new Rn.Vector3,[]),k=(0,Bt.useMemo)(()=>new Rn.Spherical,[]);return(0,Bt.useEffect)(()=>{x.current=0,m.current=0,R.current=0,A.current=!1},[f,d,g]),(0,Bt.useEffect)(()=>{r&&(m.current=0,x.current=0,A.current=!1)},[r]),(0,Bt.useEffect)(()=>{if(!i){y.current=!1,x.current>0&&!r?m.current=x.current:r&&(m.current=0),(x.current>0||A.current)&&s?.();return}x.current>=g&&!d&&(x.current=0,m.current=0,A.current=!1);let X=e.current;if(X&&(X.getPosition(w.current),X.getTarget(P.current)),r||A.current||m.current===0?(x.current=0,m.current=0,A.current=!1):m.current>0&&m.current<g?x.current=m.current:(x.current=0,m.current=0),R.current=0,!u){let O=t.current;if(O){let H=new Rn.Box3().setFromObject(O).getBoundingSphere(new Rn.Sphere);C.current={center:H.center.clone(),radius:H.radius>0?H.radius:1}}}y.current=!0,c()},[i,u,e,t,c,g,d,f,r,s]),(0,Bt.useEffect)(()=>{if(!i||!o)return;let X=e.current;if(!X)return;let O=()=>{A.current||o()};return X.addEventListener("controlstart",O),()=>X.removeEventListener("controlstart",O)},[i,e,o]),(0,cd.useFrame)((X,O)=>{if(!i||!y.current)return;let H=e.current;if(!H)return;x.current+=O,R.current+=O;let B=E(x.current),se=!d&&x.current>=g;if(B=d?B%1:Math.min(B,1),S)if(S.target.getPoint(B,$),b){let be=d?b.length:b.length-1,ve=Math.min(B,1)*be,et=Math.min(Math.floor(ve),be-1),Mt=(et+1)%b.length,Yt=B>=1?1:ve-et,en=Yt*Yt*(3-2*Yt),Dt=b[et],ft=b[Mt],tn=ft.azimuth+Math.round((Dt.azimuth-ft.azimuth)/(Math.PI*2))*Math.PI*2,$t=Dt.azimuth+(tn-Dt.azimuth)*en,Cn=Dt.polar+(ft.polar-Dt.polar)*en,jt=Dt.distance+(ft.distance-Dt.distance)*en;k.set(Math.max(jt,1e-6),Math.min(Math.max(Cn,1e-6),Math.PI-1e-6),$t),D.setFromSpherical(k).add($)}else S.position.getPoint(B,D);else{let be=C.current;if(!be)return;let ve=B*Math.PI*2,et=be.radius*2.2;D.set(be.center.x+Math.cos(ve)*et,be.center.y+be.radius*.6,be.center.z+Math.sin(ve)*et),$.copy(be.center)}let Q=Math.min(R.current/N_,1);if(Q<1){let be=Q*Q*(3-2*Q);D.lerpVectors(w.current,D,be),$.lerpVectors(P.current,$,be)}if(H.setLookAt(D.x,D.y,D.z,$.x,$.y,$.z,!1),se){y.current=!1,A.current=!0,x.current=0,m.current=0,a?.();return}c()}),null}var ud=require("react");var I_="ri:license-grant:v1",B_={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},lv=new Map;function dv(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function cv(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return dv(t.padEnd(Math.ceil(t.length/4)*4,"="))}function O_(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===1&&typeof t.licenseKeyHash=="string"&&typeof t.domain=="string"&&(t.environment==="development"||t.environment==="production")&&typeof t.tier=="string"&&t.tier.length>0&&typeof t.issuedAt=="number"&&Number.isInteger(t.issuedAt)&&typeof t.expiresAt=="number"&&Number.isInteger(t.expiresAt)}async function dd(e){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e.trim())),n=String.fromCharCode(...new Uint8Array(t));return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Vp(e,t){return`${I_}:${t}:${e}`}function z_(e,t){let n=lv.get(e);if(n)return n;let i=crypto.subtle.importKey("spki",dv(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return lv.set(e,i),i}async function jp(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[i,r,a,o,...s]=e.split("."),c=B_[r];if(i!=="ri1"||!c||!a||!o||s.length>0)return null;let l=JSON.parse(new TextDecoder().decode(cv(a)));if(!O_(l)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await z_(r,c),cv(o),new TextEncoder().encode(`${i}.${r}.${a}`)))return null;let d=Math.floor(Date.now()/1e3),p=l.expiresAt-l.issuedAt;return l.licenseKeyHash!==t||l.domain!==n||l.expiresAt<=d||l.issuedAt>d+300||p<=0||p>43200?null:{environment:l.environment,tier:l.tier,expiresAt:l.expiresAt}}catch{return null}}async function uv(e,t,n){try{return await jp(e,await dd(t),n)}catch{return null}}async function pv(e,t,n){try{let i=await dd(t);return await jp(e,i,n)?(localStorage.setItem(Vp(i,n),e),!0):!1}catch{return!1}}async function hv(e,t){try{let n=await dd(e),i=Vp(n,t),r=localStorage.getItem(i);if(!r)return null;let a=await jp(r,n,t);return a||localStorage.removeItem(i),a}catch{return null}}async function Hp(e,t){try{let n=await dd(e);localStorage.removeItem(Vp(n,t))}catch{}}var U_=["localhost","127.0.0.1","0.0.0.0"],F_=e=>U_.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),fv="https://react-immersive.liveroom.dev/api/validate-license",V_=()=>typeof window<"u",j_=300*1e3,H_=5e3,G_=400,Wp=new Map,Gp=new Map,ea=class extends Error{},gv=async(e,t,n)=>{let i=await hv(e,t);return i?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:i.environment,tier:i.tier,isLocalDomain:n}):null},mv=async(e,t,n)=>{let i=await gv(e,t,n);return i||(console.warn("[react-immersive] License server unreachable and no valid offline grant is available \u2014 license validation failed."),{status:"invalid",reason:"Could not reach license server",isLocalDomain:n})},W_=e=>e instanceof ea||e instanceof TypeError,X_=()=>new Promise(e=>setTimeout(e,G_)),q_=e=>e==="development"||e==="production",Y_=e=>{if(!e||typeof e!="object")return!1;let t=e;return!(typeof t.valid!="boolean"||t.reason!==void 0&&typeof t.reason!="string"||t.environment!==void 0&&!q_(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},$_=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},K_=(e,t,n)=>`${n}::${e}::${t}`,Z_=e=>{let t=Wp.get(e);return t?Date.now()-t.timestamp>j_?(Wp.delete(e),null):t.result:null},J_=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),Q_=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function eS(e,t,n,i){let r=K_(e,t,i),a=Z_(r);if(a)return a;let o=Gp.get(r);if(o)return o;let s=(async()=>{for(let c=0;c<2;c+=1)try{return await tS(e,t,n,r,i)}catch(l){if(!W_(l))throw l;if(c===0){let u=await gv(e,t,n);if(u)return u;await X_();continue}return mv(e,t,n)}return mv(e,t,n)})().finally(()=>{Gp.delete(r)});return Gp.set(r,s),s}async function tS(e,t,n,i,r){let a=new AbortController,o=setTimeout(()=>a.abort(),H_),s;try{s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:a.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(u){throw a.signal.aborted?new ea("License validation timed out"):u}finally{clearTimeout(o)}let c;try{c=await s.json()}catch{throw new ea(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new ea(`License server error (${s.status})`);let u=$_(c)??`License validation failed${s.status?` (${s.status})`:""}`;return await Hp(e,t),Q_(u,n)}if(!Y_(c))throw new ea("License server returned an unexpected payload");let l=J_(c,n);if(l.status==="valid"&&r!==fv){let u=c.offlineGrant?await uv(c.offlineGrant,e,t):null;if(!u)throw new ea("License validation endpoint did not return a verifiable signed grant");l={...l,environment:u.environment,tier:u.tier}}return l.status==="valid"?(Wp.set(i,{result:l,timestamp:Date.now()}),c.offlineGrant&&(await pv(c.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await Hp(e,t),l}var pd=(e,t=fv)=>{let[n,i]=(0,ud.useState)({status:"checking",isLocalDomain:!1});return(0,ud.useEffect)(()=>{if(!V_())return;let r=!1,a=u=>{r||i(u)},o=e.trim(),s=window.location.hostname.toLowerCase(),c=F_(s);return a({status:"checking",isLocalDomain:c}),o?((async()=>{try{a(await eS(o,s,c,t))}catch(u){let d=u instanceof TypeError?"Could not reach license server":u instanceof Error?u.message:"License validation failed";a({status:"invalid",reason:d,isLocalDomain:c})}})(),()=>{r=!0}):(a({status:"invalid",reason:"No license key provided",isLocalDomain:c}),()=>{r=!0})},[e,t]),n};var qt=require("react");var Ln=require("react/jsx-runtime"),nS={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},rS={up:"4 16 12 8 20 16",down:"4 8 12 16 20 8",left:"16 4 8 12 16 20",right:"8 4 16 12 8 20"},hd=({direction:e})=>{let t=nS[e],n=rS[e];return(0,Ln.jsxs)("svg",{"aria-hidden":"true",className:"mc__arrow-icon",focusable:"false",viewBox:"0 0 24 24",width:t.width,height:t.height,fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{display:"block",width:`${t.width}px`,height:`${t.height}px`,pointerEvents:"none",padding:0,margin:0,overflow:"visible"},children:[(0,Ln.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,Ln.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},Ni=16,iS={"bottom-left":{bottom:Ni,left:Ni,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Ni,right:Ni,top:"auto",left:"auto",transform:"none"},"top-left":{top:Ni,left:Ni,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Ni,right:Ni,bottom:"auto",left:"auto",transform:"none"},center:{top:"50%",left:"50%",bottom:"auto",right:"auto",transform:"translate(-50%, -50%)"},"center-bottom":{bottom:-10,left:"50%",top:"auto",right:"auto",transform:"translateX(-50%)"},"center-top":{top:Ni,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},aS=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:i=.001,rotateSensitivity:r=.01,position:a="center-bottom"})=>{let o=(0,qt.useRef)(null),[s,c]=(0,qt.useState)({x:0,y:0}),l=(0,qt.useRef)(!1),u=(0,qt.useRef)({x:0,y:0}),d=(0,qt.useRef)(void 0),p=(0,qt.useRef)(void 0),g=(0,qt.useRef)(null),f=(0,qt.useRef)(0),v=()=>e.current,E=(k,X,O)=>{let H=Math.hypot(k,X);if(H>O){let B=O/H;return{x:k*B,y:X*B}}return{x:k,y:X}},S=k=>{let O=Math.abs(k);return O<.12?0:Math.sign(k)*((O-.12)/(1-.12))},b=(0,qt.useCallback)(()=>{let k=()=>{let{x:X,y:O}=u.current,H=S(X),B=S(O);if(t&&(H!==0||B!==0)){let se=v();se&&se.rotate(-H*r,-B*r,!0)}d.current=requestAnimationFrame(k)};d.current=requestAnimationFrame(k)},[t,r]),x=(0,qt.useCallback)(()=>{d.current&&cancelAnimationFrame(d.current)},[]),R=(0,qt.useCallback)((k,X)=>{if(!o.current||!l.current)return;let O=o.current.getBoundingClientRect(),H=O.left+O.width/2,B=O.top+O.height/2,se=O.width/2-18,Q=k-H,be=X-B,ve=E(Q,be,se);c(ve),u.current={x:ve.x/se,y:ve.y/se}},[]),w=(0,qt.useCallback)(k=>{if(!t)return;k.preventDefault(),k.stopPropagation(),l.current=!0,b();let X="touches"in k?k.touches[0]:k;R(X.clientX,X.clientY)},[t,b,R]),P=(0,qt.useCallback)(k=>{if(!l.current)return;k.preventDefault();let X="touches"in k?k.touches[0]:k;R(X.clientX,X.clientY)},[R]),y=(0,qt.useCallback)(()=>{l.current=!1,c({x:0,y:0}),u.current={x:0,y:0},x()},[x]),m=i*10,A=(0,qt.useCallback)(k=>{t&&v()?.forward(k*m,!0)},[t,m]),C=(0,qt.useCallback)(k=>{t&&v()?.truck(k*m,0,!0)},[t,m]),D=(0,qt.useCallback)((k,X,O)=>{if(!t)return;p.current&&cancelAnimationFrame(p.current),g.current={control:k,amount:X,action:O},f.current=0,O(X);let H=B=>{if(!g.current)return;if(f.current===0){f.current=B,p.current=requestAnimationFrame(H);return}if(B-f.current>200){let{amount:Q,action:be}=g.current;be(Q),f.current=B}p.current=requestAnimationFrame(H)};p.current=requestAnimationFrame(H)},[t]),$=(0,qt.useCallback)(k=>{g.current?.control===k&&(p.current&&(cancelAnimationFrame(p.current),p.current=void 0),g.current=null,f.current=0)},[]);return(0,qt.useEffect)(()=>(window.addEventListener("mousemove",P),window.addEventListener("mouseup",y),window.addEventListener("touchmove",P,{passive:!1}),window.addEventListener("touchend",y),window.addEventListener("touchcancel",y),()=>{window.removeEventListener("mousemove",P),window.removeEventListener("mouseup",y),window.removeEventListener("touchmove",P),window.removeEventListener("touchend",y),window.removeEventListener("touchcancel",y),x(),p.current&&cancelAnimationFrame(p.current)}),[P,y,x]),t?(0,Ln.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...iS[a]},children:(0,Ln.jsxs)("div",{className:"mc__dpad",children:[(0,Ln.jsx)("button",{"aria-label":"Move forward",className:"mc__arrow mc__arrow--up",onMouseDown:()=>D("up",1,A),onMouseUp:()=>$("up"),onMouseLeave:()=>$("up"),onTouchStart:k=>{k.preventDefault(),D("up",1,A)},onTouchEnd:()=>$("up"),onTouchCancel:()=>$("up"),children:(0,Ln.jsx)(hd,{direction:"up"})}),(0,Ln.jsxs)("div",{className:"mc__middle-row",children:[(0,Ln.jsx)("button",{"aria-label":"Move left",className:"mc__arrow mc__arrow--left",onMouseDown:()=>D("left",-1,C),onMouseUp:()=>$("left"),onMouseLeave:()=>$("left"),onTouchStart:k=>{k.preventDefault(),D("left",-1,C)},onTouchEnd:()=>$("left"),onTouchCancel:()=>$("left"),children:(0,Ln.jsx)(hd,{direction:"left"})}),(0,Ln.jsx)("div",{ref:o,className:"mc__joystick",onMouseDown:w,onTouchStart:w,children:(0,Ln.jsx)("div",{className:"mc__knob",style:{transform:`translate(${s.x}px, ${s.y}px)`}})}),(0,Ln.jsx)("button",{"aria-label":"Move right",className:"mc__arrow mc__arrow--right",onMouseDown:()=>D("right",1,C),onMouseUp:()=>$("right"),onMouseLeave:()=>$("right"),onTouchStart:k=>{k.preventDefault(),D("right",1,C)},onTouchEnd:()=>$("right"),onTouchCancel:()=>$("right"),children:(0,Ln.jsx)(hd,{direction:"right"})})]}),(0,Ln.jsx)("button",{"aria-label":"Move backward",className:"mc__arrow mc__arrow--down",onMouseDown:()=>D("down",-1,A),onMouseUp:()=>$("down"),onMouseLeave:()=>$("down"),onTouchStart:k=>{k.preventDefault(),D("down",-1,A)},onTouchEnd:()=>$("down"),onTouchCancel:()=>$("down"),children:(0,Ln.jsx)(hd,{direction:"down"})})]})}):null},bv=aS;var Ot=require("react"),qp=require("three");var Xp=new WeakSet;function Ro(e){Xp.add(e)}function vv(e){let t=Xp.has(e);return t&&Xp.delete(e),t}function xv(e){return[e.x,e.y,e.z]}function Ii(e,t){let n=new qp.Vector3,i=new qp.Vector3;return t.getPosition(n),t.getTarget(i),{position:xv(n),target:xv(i),fov:"fov"in e&&typeof e.fov=="number"?e.fov:null,zoom:"zoom"in e&&typeof e.zoom=="number"?e.zoom:1,azimuthAngle:t.azimuthAngle,polarAngle:t.polarAngle}}function oS(e,t){return e?e.position[0]===t.position[0]&&e.position[1]===t.position[1]&&e.position[2]===t.position[2]&&e.target[0]===t.target[0]&&e.target[1]===t.target[1]&&e.target[2]===t.target[2]&&e.fov===t.fov&&e.zoom===t.zoom&&e.azimuthAngle===t.azimuthAngle&&e.polarAngle===t.polarAngle:!1}async function al(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function yv(e={}){let t=(0,Ot.useRef)(e);t.current=e;let n=(0,Ot.useRef)(null),[i,r]=(0,Ot.useState)(null),[a,o]=(0,Ot.useState)(()=>({...e.presets})),s=(0,Ot.useRef)(a);s.current=a;let c=(0,Ot.useCallback)(A=>{r(C=>oS(C,A)?C:A)},[]),l=(0,Ot.useCallback)(A=>{c(A)},[c]),u=(0,Ot.useRef)(null),d=(0,Ot.useRef)(null),p=(0,Ot.useRef)(null),g=(0,Ot.useCallback)(A=>{n.current=A;let C=Ii(A.raw.controls.camera,A.raw.controls);c(C),A.raw.scene!==d.current&&(d.current=A.raw.scene,u.current=null,p.current=null),A.homeCameraState&&!u.current&&(u.current=A.homeCameraState);let{initialPosition:D,initialTarget:$,initialTransition:k=!1}=t.current;if((D||$)&&A.raw.scene&&(D||A.homeCameraState)&&p.current!==A.raw.controls){p.current=A.raw.controls,A.homeCameraState||Ro(A.raw.controls);let X=D??C.position,O=$??C.target;A.raw.controls.setLookAt(X[0],X[1],X[2],O[0],O[1],O[2],k).then(()=>{if(n.current?.raw.controls!==A.raw.controls)return;let H=Ii(A.raw.controls.camera,A.raw.controls);u.current={position:H.position,target:H.target},c(H)}).catch(()=>{})}},[c]),f=(0,Ot.useCallback)(async()=>{let A=n.current,C=A?.raw.controls;if(!C)return!1;try{let D=u.current;return D?await al(C,()=>C.setLookAt(D.position[0],D.position[1],D.position[2],D.target[0],D.target[1],D.target[2],!0)):A?.raw.scene?await al(C,()=>C.fitToBox(A.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await al(C,()=>C.reset(!0)),!0}catch{return!1}},[]),v=(0,Ot.useCallback)(async()=>{let A=n.current;if(!A?.raw.controls||!A.raw.scene)return!1;try{return await al(A.raw.controls,()=>A.raw.controls.fitToBox(A.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),E=(0,Ot.useCallback)(async A=>{let C=n.current;if(!C?.raw.controls)return!1;let D=ho(C.objectBindings,A);if(!D)return!1;let $=C.raw.nodes[D];if(!$)return!1;try{return await al(C.raw.controls,()=>C.raw.controls.fitToBox($,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),S=(0,Ot.useCallback)(async(A,C=!0)=>{let D=n.current?.raw.controls;if(!D)return!1;try{return n.current?.homeCameraState||Ro(D),await D.setTarget(A[0],A[1],A[2],C),c(Ii(D.camera,D)),!0}catch{return!1}},[c]),b=(0,Ot.useCallback)(async(A,C=!0)=>{let D=n.current?.raw.controls;if(!D)return!1;try{n.current?.homeCameraState||Ro(D);let $=[D.setLookAt(A.position[0],A.position[1],A.position[2],A.target[0],A.target[1],A.target[2],C)];A.azimuthAngle!=null&&A.polarAngle!=null&&$.push(D.rotateTo(A.azimuthAngle,A.polarAngle,C)),await Promise.all($);let k=D.camera,X=!1;return A.fov!=null&&"fov"in k&&typeof k.fov=="number"&&(k.fov=A.fov,X=!0),A.zoom!=null&&"zoom"in k&&typeof k.zoom=="number"&&(k.zoom=A.zoom,X=!0),X&&"updateProjectionMatrix"in k&&k.updateProjectionMatrix(),c(Ii(k,D)),!0}catch{return!1}},[c]),x=(0,Ot.useCallback)((A,C=!0)=>b(A,C),[b]),R=(0,Ot.useCallback)((A,C,D=!0)=>b({position:A,target:C},D),[b]),w=(0,Ot.useCallback)(async(A,C,D=!0)=>{let $=n.current?.raw.controls;if(!$)return!1;try{return n.current?.homeCameraState||Ro($),await $.rotateTo(A*Math.PI/180,C*Math.PI/180,D),c(Ii($.camera,$)),!0}catch{return!1}},[c]),P=(0,Ot.useCallback)(async(A,C=!0)=>{let D=n.current?.raw.controls;if(!D)return!1;try{return n.current?.homeCameraState||Ro(D),await D.dollyTo(A,C),c(Ii(D.camera,D)),!0}catch{return!1}},[c]),y=(0,Ot.useCallback)(A=>{let C=n.current?.raw.controls,D=A.trim();if(!C||!D)return null;let $=Ii(C.camera,C);return s.current={...s.current,[D]:$},o(k=>({...k,[D]:$})),c($),$},[c]),m=(0,Ot.useCallback)((A,C=!0)=>{let D=s.current[A];return D?b(D,C):Promise.resolve(!1)},[b]);return{cameraState:i,cameraPresets:a,resetView:f,focusObject:E,fitScene:v,setCameraTarget:S,setCameraState:x,lookAt:R,orbitTo:w,dollyTo:P,savePreset:y,goToPreset:m,handleCameraChange:l,handleViewerReady:g}}var ol=require("three");function md(e){return[e.x,e.y,e.z]}function wv(e){let t=new ol.Box3().setFromObject(e),n=0;return e.traverse(i=>{i.isMesh&&(n+=1)}),{bounds:{min:md(t.min),max:md(t.max),center:md(t.getCenter(new ol.Vector3)),size:md(t.getSize(new ol.Vector3))},objectCount:n}}var _v=require("react-colorful"),ta=require("react/jsx-runtime"),Yp=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:i,inline:r=!1})=>(0,ta.jsxs)("div",{className:`ri-popover${r?" ri-popover--inline":""}`,style:r?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:a=>a.stopPropagation(),children:[(0,ta.jsx)("p",{className:"ri-popoverLabel",children:"Color"}),(0,ta.jsx)(_v.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>i(o=>({...o,[e.objectId]:{...o[e.objectId],hex:a}}))}),(0,ta.jsxs)("div",{className:"ri-inlineRow",children:[(0,ta.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,ta.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:"Done"})]})]});var dt=require("react/jsx-runtime"),$p=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:i,inline:r=!1,offset:a,rotationDegrees:o,onOffsetChange:s,onRotationChange:c,isPositioning:l=!1,onEndPositioning:u})=>(0,dt.jsxs)("div",{className:`ri-popover${r?" ri-popover--inline":""}`,style:r?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:d=>d.stopPropagation(),children:[(0,dt.jsx)("div",{className:"ri-popoverHeader",children:(0,dt.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:"Material"})}),(0,dt.jsxs)("div",{className:"ri-materialBody",children:[t?(0,dt.jsx)("div",{className:"ri-previewFrame",children:(0,dt.jsx)("img",{src:t,alt:"texture preview",className:"ri-previewImage"})}):(0,dt.jsxs)("div",{className:"ri-emptyState",children:[(0,dt.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,dt.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M2.25 15.75l5.159-5.159a2.25 2.25 0 013.182 0l5.159 5.159m-1.5-1.5l1.409-1.409a2.25 2.25 0 013.182 0l2.909 2.909M3 21h18M3 3h18"})}),(0,dt.jsx)("span",{style:{fontSize:12},children:"No texture applied"})]}),(0,dt.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:t?"Replace image":"Upload image"}),t&&(0,dt.jsx)("button",{onClick:()=>i(e.objectId),className:"ri-removeButton",children:"Remove texture"}),(0,dt.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}),t&&(s||c)&&(0,dt.jsxs)("div",{className:"ri-texturePosition",children:[(0,dt.jsx)("p",{className:"ri-texturePositionLabel",children:"Texture position"}),(0,dt.jsxs)("div",{className:"ri-texturePositionGrid",children:[(0,dt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,dt.jsx)("span",{children:"Offset X"}),(0,dt.jsx)("input",{type:"number",step:.01,value:a?.[0]??0,onChange:d=>s?.(e.objectId,0,Number(d.target.value))})]}),(0,dt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,dt.jsx)("span",{children:"Offset Y"}),(0,dt.jsx)("input",{type:"number",step:.01,value:a?.[1]??0,onChange:d=>s?.(e.objectId,1,Number(d.target.value))})]})]}),(0,dt.jsxs)("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[(0,dt.jsx)("span",{children:"Rotation"}),(0,dt.jsxs)("div",{className:"ri-texturePositionSliderRow",children:[(0,dt.jsx)("input",{type:"range",min:0,max:360,step:1,value:o??0,onChange:d=>c?.(e.objectId,Number(d.target.value))}),(0,dt.jsx)("input",{type:"number",min:0,max:360,step:1,value:Math.round(o??0),onChange:d=>c?.(e.objectId,Number(d.target.value))})]})]}),l?(0,dt.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:u,title:"Confirm this texture position and exit positioning mode",children:"Done positioning"}):(0,dt.jsx)("p",{className:"ri-texturePositionHint",children:"Double-click the object in the preview to drag its texture directly (scroll to zoom), or edit its offset numerically."})]})]})]});var Ar=require("react");var ht=require("react/jsx-runtime");function Sv({entries:e}){return(0,ht.jsx)(ht.Fragment,{children:e.map(([t,n])=>{let i=n!==null&&typeof n=="object",r=i?Object.entries(n):[];return i&&r.length>0?(0,ht.jsxs)("div",{className:"left-panel__data-group",children:[(0,ht.jsx)("span",{className:"left-panel__data-key",children:t}),(0,ht.jsx)("div",{className:"left-panel__data-children",children:(0,ht.jsx)(Sv,{entries:r})})]},t):(0,ht.jsxs)("div",{className:"left-panel__data-row",children:[(0,ht.jsx)("span",{className:"left-panel__data-key",children:t}),(0,ht.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:i?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function sS({content:e}){let t=e!=null,[n,i]=(0,Ar.useState)(t),[r,a]=(0,Ar.useState)(t),o=(0,Ar.useRef)(e);return t&&(o.current=e),(0,Ar.useEffect)(()=>{if(t){i(!0);return}if(n){a(!1);let s=setTimeout(()=>i(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,Ar.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>a(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,ht.jsx)("div",{className:`left-panel__action-extra${r?" left-panel__action-extra--open":""}`,children:(0,ht.jsx)("div",{className:"left-panel__action-extra-inner",children:e??o.current})}):null}function Kp({isOpen:e,selectedObject:t,currentAction:n,onClose:i,onAction:r,renderActionExtra:a}){let[o,s]=(0,Ar.useState)(t);(0,Ar.useEffect)(()=>{t&&s(t)},[t]);let c=t??o,l=c?Object.entries(c).filter(([u])=>u!=="actions"):[];return(0,ht.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:c&&(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsxs)("div",{className:"left-panel__header",children:[(0,ht.jsx)("p",{className:"left-panel__title",children:c.label}),(0,ht.jsx)("button",{onClick:i,className:"left-panel__close-btn","aria-label":"Close panel",children:"\u2715"})]}),l.length>0&&(0,ht.jsx)("div",{className:"left-panel__data",children:(0,ht.jsx)(Sv,{entries:l})}),(0,ht.jsx)("hr",{className:"left-panel__divider"}),c.actions&&c.actions.length>0&&(0,ht.jsxs)(ht.Fragment,{children:[(0,ht.jsx)("div",{className:"left-panel__actions-label",children:"Actions"}),(0,ht.jsx)("div",{className:"left-panel__actions-list",children:c.actions.map((u,d)=>{let p=n?.action.id===u.id&&(n.binding===c||n.binding?.id===c.id||n.binding?.modelObjectId===c.modelObjectId||n.objectId===c.id||n.objectId===c.modelObjectId),g=a?.(u.id);return(0,ht.jsxs)(Ar.Fragment,{children:[(0,ht.jsx)("button",{onClick:f=>r({objectId:c.modelObjectId||c.id||"",action:u,binding:c,screenX:f.clientX,screenY:f.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${u.id}`,p?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":u.id,"data-label":u.label,children:u.label}),(0,ht.jsx)(sS,{content:g})]},d)})})]})]})})}var sl=require("react"),Tv=require("lucide-react");var Mv=require("react");var Hn=require("react/jsx-runtime");function Cv({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:i,searchValue:r,onSearchChange:a,searchPlaceholder:o,children:s,isOpen:c,onToggle:l,openButtonIcon:u,closeButtonIcon:d,closeButtonAriaLabel:p}){let[g,f]=(0,Mv.useState)(!1),v=c!==void 0?c:g,E=S=>{c===void 0&&f(S),l?.(S)};return(0,Hn.jsxs)("div",{className:`ri-sidepanel-wrap ${v?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!v&&(0,Hn.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>E(!0),"aria-label":t,title:"Open panel",children:[u,e?(0,Hn.jsx)("span",{children:e}):null]}),(0,Hn.jsxs)("div",{className:`ri-sidepanel ${v?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!v,children:[(0,Hn.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,Hn.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,Hn.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,Hn.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>E(!1),"aria-label":p,title:"Close",children:d??(0,Hn.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,Hn.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,Hn.jsx)("p",{className:"ri-sidepanel__title",children:i})]}),(0,Hn.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,Hn.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:o,value:r,onChange:S=>a(S.target.value)})}),(0,Hn.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var fi=require("react/jsx-runtime");function Zp({objectBindings:e,onAction:t,onFocus:n,onHover:i,isOpen:r,onToggle:a}){let[o,s]=(0,sl.useState)(null),[c,l]=(0,sl.useState)(""),u=(0,sl.useMemo)(()=>Object.entries(e).filter(([d,p])=>{let g=c.toLowerCase();return d.toLowerCase().includes(g)||(p.label??"").toLowerCase().includes(g)}),[e,c]);return(0,fi.jsx)(Cv,{openButtonLabel:"",openButtonAriaLabel:"Open scene objects panel",openButtonIcon:(0,fi.jsx)(Tv.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:"SCENE OBJECTS",title:`${u.length} visible entries`,searchValue:c,onSearchChange:l,searchPlaceholder:"Search nodes, labels",isOpen:r,onToggle:a,closeButtonAriaLabel:"Close scene objects panel",children:u.map(([d,p])=>{let g=p.visible!==!1,f=o===d;return(0,fi.jsxs)("div",{onClick:()=>n(p),onMouseEnter:()=>{s(d),i?.(p)},onMouseLeave:()=>{s(null),i?.(null)},className:`ri-sidepanel__row${f?" ri-sidepanel__row--hovered":""}`,children:[(0,fi.jsx)("span",{className:`ri-sidepanel__label${f?" ri-sidepanel__label--hovered":""}`,children:p.label??d}),(0,fi.jsx)("button",{type:"button",onClick:v=>{v.stopPropagation(),t?.({objectId:d,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:p})},className:"ri-sidepanel__vis-btn",title:g?"Hide":"Show",children:(0,fi.jsx)("span",{className:`ri-sidepanel__checkbox${g?" ri-sidepanel__checkbox--checked":""}`,children:g&&(0,fi.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,fi.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},d)})})}var _e=require("lucide-react");var fd=require("react"),Jp=(0,fd.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var Er=()=>(0,fd.useContext)(Jp);var na=require("react/jsx-runtime");function gd({visible:e,message:t,tone:n="default",progress:i}){if(!e)return null;let r=typeof i=="number"&&Number.isFinite(i),a=r?Math.min(Math.max(i,0),100):0,o=Math.round(a);return(0,na.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[r&&(0,na.jsxs)("div",{className:"bb-loadingProgressRow",children:[(0,na.jsx)("div",{className:"bb-loadingProgress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":o,children:(0,na.jsx)("div",{className:"bb-loadingProgress__bar",style:{width:`${o}%`}})}),(0,na.jsxs)("span",{className:"bb-loadingProgress__label",children:[o,"%"]})]}),(0,na.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]})}function lS(e){return e.trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").replace(/[^a-zA-Z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").toLowerCase()}function Qp(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,t=>t.toUpperCase())}function cS(e){let t=e.toLowerCase();return t.includes("light")?"light":t.includes("wheel")||t.includes("rim")||t.includes("tire")?"wheel":t.includes("glass")||t.includes("window")||t.includes("windshield")||t.includes("sunroof")?"glass":t.includes("seat")||t.includes("dashboard")||t.includes("console")||t.includes("doorpanel")?"interior":t.includes("floor")?"floor":t.includes("wall")?"wall":t.includes("door")?"door":t.includes("chair")||t.includes("table")||t.includes("sofa")||t.includes("bed")?"furniture":"other"}function Pv(e){return e==="light"||e.endsWith("light")?[{id:"toggle-light",label:"Toggle Light",type:"command"},{id:"change-light-color",label:"Change Light Color",type:"command"},{id:"set-brightness",label:"Set Brightness",type:"command"}]:[{id:"change-color",label:"Change Color",type:"command"},{id:"change-material",label:"Change Material",type:"command"},{id:"toggle-visibility",label:"Toggle Visibility",type:"command"}]}function Av(e){let t=cS(e);return{id:lS(e),modelObjectId:e,type:t,label:Qp(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:Pv(t),metrics:{},metadata:{}}}function bd(e){return Object.fromEntries(e.map(t=>[t,Av(t)]))}function Ev(e){let t=new Set,n={};for(let i of e){let r=Av(i),a=r.id||"object",o=a;for(let c=2;t.has(o);c++)o=`${a}-${c}`;t.add(o),r.id=o;let s=(r.actions??[]).filter(c=>ws.includes(c.id));r.actions=s.length>0?s:Pv("other"),n[i]=r}return n}function ll(e){let{nodesById:t}=Xi(e),n=[];for(let[i,r]of Object.entries(t)){let a=r;a.isMesh&&a.geometry&&r.name&&n.push(i)}return n.sort((i,r)=>i.localeCompare(r))}var Ee=require("react"),wd=require("@react-three/fiber"),_d=require("@react-three/drei"),it=require("three");var Rv="data:image/png;base64,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";var Lv="data:image/png;base64,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";var kv="data:image/png;base64,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";var Oe=require("react/jsx-runtime"),eh=-100,th=100,Fv=.03,hS=.03,mS=.03,Dv=.5,fS=Rv,gS=Lv,bS=kv,vS=Math.PI/4,Nv=.4,Lo=64,Iv=Fv*3,nh="#4d7dff",Bv="#ffcc00",Ov=.02,xS=new it.Vector3(0,1,0),vd=32,zv="#ff9d3d",xd=4;function rh(e){let t=new Float32Array((Lo+1)*3);for(let n=0;n<=Lo;n++){let i=n/Lo*Math.PI*2,r=Math.cos(i)*Nv,a=Math.sin(i)*Nv,o=0,s=0,c=0;e==="x"?(s=r,c=a):e==="y"?(o=r,c=a):(o=r,s=a),t[n*3]=o,t[n*3+1]=s,t[n*3+2]=c}return t}function yS(e){let t=Math.abs(e.y)<.99?new it.Vector3(0,1,0):new it.Vector3(1,0,0),n=new it.Vector3().crossVectors(e,t).normalize(),i=new it.Vector3().crossVectors(e,n).normalize();return[n,i]}function Uv(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}var ko=null,ih=new Set;function cl(e){ko!==e&&(ko=e,ih.forEach(t=>t()))}function ah(e){return ih.add(e),()=>ih.delete(e)}function yd(){return ko}function Vv({light:e,position:t,rotation:n=[0,0,0],color:i,intensity:r,visible:a,onPositionChange:o,onRotationChange:s,onDraggingChange:c}){let{activeTab:l,activeSubTab:u,setActiveTab:d,setActiveSubTab:p}=Er(),{camera:g,gl:f,raycaster:v,invalidate:E}=(0,wd.useThree)(),S=(0,Ee.useRef)(null),b=(0,Ee.useRef)(null),x=(0,Ee.useRef)(null),R=(0,Ee.useRef)(null),w=(0,Ee.useRef)(null),P=(0,Ee.useRef)(null),y=(0,Ee.useRef)(null),m=(0,Ee.useRef)(null),A=(0,Ee.useRef)(null),C=(0,Ee.useRef)(null),D=(0,Ee.useRef)(null),$=(0,Ee.useMemo)(()=>new it.Matrix4,[]),k=(0,Ee.useMemo)(()=>new it.Quaternion,[]),X=(0,Ee.useMemo)(()=>new it.Vector3(1,1,1),[]),O=(0,Ee.useRef)([0,0,0]),H=(0,Ee.useRef)([0,0,0]),B=(0,Ee.useRef)(!1),se=(0,Ee.useRef)(null),Q=(0,Ee.useRef)(null),be=(0,Ee.useRef)(null),ve=(0,Ee.useRef)(c);(0,Ee.useEffect)(()=>{ve.current=c},[c]);let et=(0,Ee.useMemo)(()=>new it.Vector3(t[0],t[1],t[2]),[t]),Mt=(0,Ee.useMemo)(()=>new it.Euler(n[0],n[1],n[2]),[n]),Yt=(0,Ee.useMemo)(()=>new Float32Array(6),[]),en=(0,Ee.useMemo)(()=>rh("x"),[]),Dt=(0,Ee.useMemo)(()=>rh("y"),[]),ft=(0,Ee.useMemo)(()=>rh("z"),[]),tn=(0,Ee.useMemo)(()=>new Float32Array((vd+1)*3),[]),$t=(0,Ee.useMemo)(()=>new Float32Array(xd*2*3),[]),Cn=e?.type==="point",jt=e?.type==="spot",nn=Cn?gS:jt?bS:fS,Ht=Cn?hS:jt?mS:Fv,oe=(0,Ee.useMemo)(()=>new it.TextureLoader().load(nn),[nn]),$n=(0,Ee.useSyncExternalStore)(ah,yd,yd),Rt=!!e&&$n===e.id,st=(0,Ee.useRef)(new it.Vector3),Kt=(0,Ee.useRef)(new it.Euler);(0,Ee.useEffect)(()=>{B.current||(st.current.copy(et),Kt.current.copy(Mt),E())},[et,Mt,E]),(0,Ee.useEffect)(()=>{e&&ko===e.id&&!a&&cl(null)},[e?.id,a]),(0,Ee.useEffect)(()=>()=>{e&&ko===e.id&&cl(null),be.current!==null&&(cancelAnimationFrame(be.current),be.current=null)},[e?.id]);let Gt=(0,Ee.useCallback)(()=>{if(B.current||!Rt)return;let ye=st.current,Ce=new it.Quaternion().setFromEuler(Kt.current);$.compose(ye,Ce,X)},[$,X,Rt]);(0,wd.useFrame)(()=>{if(S.current&&S.current.position.copy(st.current),Gt(),x.current){x.current.lookAt(g.position);let ye=g,Ce;ye.isOrthographicCamera?Ce=Ht/ye.zoom:Ce=g.position.distanceTo(st.current)*Ht,x.current.scale.setScalar(Ce)}if(y.current){let ye=g,Ce;ye.isOrthographicCamera?Ce=Iv/ye.zoom:Ce=g.position.distanceTo(st.current)*Iv,y.current.scale.setScalar(Ce)}if(w.current){let ye=w.current.getAttribute("position"),Ce=ye.array;Ce[0]=0,Ce[1]=0,Ce[2]=0,Ce[3]=st.current.x,Ce[4]=st.current.y,Ce[5]=st.current.z,ye.needsUpdate=!0,w.current.computeBoundingSphere()}if(P.current){let ye=st.current,Ce=ye.length();P.current.visible=Ce>Dv,Ce>1e-6&&(P.current.position.copy(ye).multiplyScalar(.5),P.current.scale.set(1,Ce,1),P.current.quaternion.setFromUnitVectors(xS,ye.clone().normalize()))}if(R.current&&(R.current.visible=st.current.length()>Dv),jt&&m.current&&A.current&&C.current){let ye=st.current,Ce=ye.length();if(Ce>1e-6){m.current.visible=!0;let Wt=ye.clone().negate().normalize(),gt=Ce,Jt=e?.angle??Math.PI/6,ee=gt*Math.tan(Jt),ge=ye.clone().add(Wt.clone().multiplyScalar(gt)),[we,Je]=yS(Wt),Tt=A.current.getAttribute("position"),Qe=Tt.array;for(let He=0;He<=vd;He++){let tt=He/vd*Math.PI*2,rn=ge.x+(we.x*Math.cos(tt)+Je.x*Math.sin(tt))*ee,vn=ge.y+(we.y*Math.cos(tt)+Je.y*Math.sin(tt))*ee,Tn=ge.z+(we.z*Math.cos(tt)+Je.z*Math.sin(tt))*ee;Qe[He*3]=rn,Qe[He*3+1]=vn,Qe[He*3+2]=Tn}Tt.needsUpdate=!0,A.current.computeBoundingSphere();let bt=C.current.getAttribute("position"),fe=bt.array;for(let He=0;He<xd;He++){let tt=He/xd*Math.PI*2,rn=ge.x+(we.x*Math.cos(tt)+Je.x*Math.sin(tt))*ee,vn=ge.y+(we.y*Math.cos(tt)+Je.y*Math.sin(tt))*ee,Tn=ge.z+(we.z*Math.cos(tt)+Je.z*Math.sin(tt))*ee,Qt=He*6;fe[Qt]=ye.x,fe[Qt+1]=ye.y,fe[Qt+2]=ye.z,fe[Qt+3]=rn,fe[Qt+4]=vn,fe[Qt+5]=Tn}bt.needsUpdate=!0,C.current.computeBoundingSphere()}else m.current.visible=!1}});let Zt=(0,Ee.useCallback)(()=>{be.current!==null&&(cancelAnimationFrame(be.current),be.current=null),O.current=t,H.current=[n[0],n[1],n[2]],B.current=!0,se.current=null,Q.current=null,ve.current?.(!0)},[t,n]),Kn=(0,Ee.useCallback)((ye,Ce,Wt,gt)=>{let Jt=new it.Vector3(O.current[0],O.current[1],O.current[2]),ee=new it.Vector3,ge=new it.Quaternion,we=new it.Vector3;gt.decompose(ee,ge,we);let Je=Jt.clone().applyMatrix4(gt),Tt=[Math.min(Math.max(Je.x,eh),th),Math.min(Math.max(Je.y,eh),th),Math.min(Math.max(Je.z,eh),th)],Qe=new it.Quaternion().setFromEuler(new it.Euler(H.current[0],H.current[1],H.current[2],"XYZ")),bt=new it.Quaternion().copy(ge).multiply(Qe),fe=new it.Euler().setFromQuaternion(bt,"XYZ"),He=[fe.x,fe.y,fe.z];st.current.set(Tt[0],Tt[1],Tt[2]),Kt.current.set(He[0],He[1],He[2]),se.current=Tt,Q.current=He;let tt=new it.Quaternion().setFromEuler(Kt.current);$.compose(st.current,tt,X),E()},[$,X,E]),ze=(0,Ee.useCallback)(()=>{B.current=!1;let ye=se.current,Ce=Q.current;se.current=null,Q.current=null;let Wt=ye&&!Uv(ye,O.current),gt=Ce&&!Uv(Ce,H.current);Wt&&o&&o(ye),gt&&s&&s(Ce),Wt||gt?be.current=requestAnimationFrame(()=>{be.current=null,ve.current?.(!1)}):ve.current?.(!1)},[o,s]);return(0,Ee.useEffect)(()=>{let ye=gt=>{let Jt=f.domElement.getBoundingClientRect();return new it.Vector2((gt.clientX-Jt.left)/Jt.width*2-1,-((gt.clientY-Jt.top)/Jt.height)*2+1)},Ce=gt=>!!gt.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Wt=gt=>{if(Ce(gt))return;let Jt=ye(gt);v.setFromCamera(Jt,g);let ee=[];if(b.current&&ee.push(b.current),x.current&&ee.push(x.current),ee.length===0)return;if(v.intersectObjects(ee,!1).length>0){let we=e?.id??null;ko!==we&&(cl(we),d?.("scene"),p?.("Lighting")),gt.preventDefault(),gt.stopPropagation()}};return f.domElement.addEventListener("pointerdown",Wt),()=>{f.domElement.removeEventListener("pointerdown",Wt)}},[g,v,f,e,d,p]),l!=="scene"||u!=="Lighting"||!e||!a||e.type==="none"||e.type==="hemisphere"?null:(0,Oe.jsxs)("group",{ref:ye=>{ye&&Dm(ye)},children:[(0,Oe.jsxs)("group",{ref:S,children:[(0,Oe.jsx)("sprite",{ref:x,children:(0,Oe.jsx)("spriteMaterial",{map:oe,transparent:!0,opacity:.9,blending:it.AdditiveBlending,depthWrite:!1,rotation:jt?vS:0},nn)}),(0,Oe.jsx)(_d.Sphere,{ref:b,args:[.25,16,16],children:(0,Oe.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),Cn&&(0,Oe.jsxs)("group",{ref:y,children:[(0,Oe.jsxs)("lineLoop",{renderOrder:999,children:[(0,Oe.jsx)("bufferGeometry",{children:(0,Oe.jsx)("bufferAttribute",{attach:"attributes-position",args:[en,3],count:Lo+1})}),(0,Oe.jsx)("lineBasicMaterial",{color:nh,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Oe.jsxs)("lineLoop",{renderOrder:999,children:[(0,Oe.jsx)("bufferGeometry",{children:(0,Oe.jsx)("bufferAttribute",{attach:"attributes-position",args:[Dt,3],count:Lo+1})}),(0,Oe.jsx)("lineBasicMaterial",{color:nh,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Oe.jsxs)("lineLoop",{renderOrder:999,children:[(0,Oe.jsx)("bufferGeometry",{children:(0,Oe.jsx)("bufferAttribute",{attach:"attributes-position",args:[ft,3],count:Lo+1})}),(0,Oe.jsx)("lineBasicMaterial",{color:nh,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!Cn&&!jt&&(0,Oe.jsxs)(Oe.Fragment,{children:[(0,Oe.jsxs)("mesh",{ref:P,children:[(0,Oe.jsx)("cylinderGeometry",{args:[Ov,Ov,1,8,1,!0]}),(0,Oe.jsx)("meshBasicMaterial",{color:Bv,transparent:!0,opacity:.05,blending:it.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Oe.jsxs)("line",{ref:R,children:[(0,Oe.jsx)("bufferGeometry",{ref:w,children:(0,Oe.jsx)("bufferAttribute",{attach:"attributes-position",args:[Yt,3],count:2})}),(0,Oe.jsx)("lineBasicMaterial",{color:Bv,transparent:!0,opacity:.7,blending:it.AdditiveBlending})]})]}),jt&&(0,Oe.jsxs)("group",{ref:m,children:[(0,Oe.jsxs)("lineLoop",{renderOrder:999,children:[(0,Oe.jsx)("bufferGeometry",{ref:A,children:(0,Oe.jsx)("bufferAttribute",{attach:"attributes-position",args:[tn,3],count:vd+1})}),(0,Oe.jsx)("lineBasicMaterial",{color:zv,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Oe.jsxs)("lineSegments",{renderOrder:999,children:[(0,Oe.jsx)("bufferGeometry",{ref:C,children:(0,Oe.jsx)("bufferAttribute",{attach:"attributes-position",args:[$t,3],count:xd*2})}),(0,Oe.jsx)("lineBasicMaterial",{color:zv,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),Rt&&o&&(0,Oe.jsx)(_d.PivotControls,{ref:D,matrix:$,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:Zt,onDrag:Kn,onDragEnd:ze})]})}var At=require("react"),Gv=require("@react-three/drei"),Md=require("@react-three/fiber"),Sn=require("three");var _n=require("three");function Sd(e){e.updateWorldMatrix(!0,!0);let t=new _n.Matrix4().copy(e.matrixWorld).invert(),n=new _n.Box3,i=new _n.Box3,r=!1;return e.traverse(a=>{let o=a;if(!o.isMesh||!o.geometry||(o.geometry.boundingBox||o.geometry.computeBoundingBox(),!o.geometry.boundingBox))return;let s=new _n.Matrix4().multiplyMatrices(t,a.matrixWorld);i.copy(o.geometry.boundingBox).applyMatrix4(s),n.union(i),r=!0}),r?n.getCenter(new _n.Vector3):new _n.Vector3}function jv(e,t="XYZ"){return new _n.Quaternion().setFromEuler(new _n.Euler(e[0],e[1],e[2],t))}function wS(e,t,n,i,r="XYZ"){let o=new _n.Vector3(...i).multiply(new _n.Vector3(...n)).applyQuaternion(jv(t,r)).add(new _n.Vector3(...e));return[o.x,o.y,o.z]}function Hv(e,t,n,i,r,a="XYZ"){let o=new _n.Vector3(...wS(e,t,i,r,a)),s=new _n.Vector3(...r).multiply(new _n.Vector3(...i)).applyQuaternion(jv(n,a)),c=o.sub(s);return[c.x,c.y,c.z]}var oh=require("react/jsx-runtime");function sh({node:e,space:t,onTransformChange:n,onDraggingChange:i}){let r=(0,Md.useThree)(D=>D.invalidate),a=(0,At.useMemo)(()=>Sd(e),[e]),o=(0,At.useMemo)(()=>new Sn.Matrix4,[]),s=(0,At.useRef)(!1),c=(0,At.useRef)(new Sn.Matrix4),l=(0,At.useRef)(new Sn.Matrix4),u=(0,At.useRef)(null),d=(0,At.useRef)(0),p=(0,At.useRef)([]),g=(0,At.useRef)(null),f=(0,At.useRef)(i);f.current=i;let v=(0,At.useMemo)(()=>new Sn.Vector3,[]),E=(0,At.useMemo)(()=>new Sn.Quaternion,[]),S=(0,At.useMemo)(()=>new Sn.Vector3,[]),b=(0,At.useMemo)(()=>new Sn.Quaternion,[]),x=(0,At.useMemo)(()=>new Sn.Vector3(1,1,1),[]),R=(0,At.useMemo)(()=>new Sn.Quaternion,[]),w=(0,At.useMemo)(()=>new Sn.Vector3,[]),P=(0,At.useMemo)(()=>new Sn.Vector3,[]),y=(0,At.useRef)([0,0,0]),m=(0,At.useCallback)(()=>{s.current||(e.updateWorldMatrix(!0,!1),v.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(E),b.copy(E),t==="world"&&b.identity(),o.compose(v,b,x))},[v,o,b,x,e,a,t,E]);(0,At.useLayoutEffect)(()=>(m(),()=>{let D=g.current!==null;D&&(cancelAnimationFrame(g.current),g.current=null),(s.current||D)&&(s.current=!1,f.current(!1));for(let $ of p.current)yo($);p.current=[]}),[m]),(0,Md.useFrame)(()=>m());let A=(0,At.useCallback)(()=>{g.current!==null&&(cancelAnimationFrame(g.current),g.current=null),e.updateWorldMatrix(!0,!0),p.current=[];for(let D of xo(e))Ag(D)||(Tc(D,D.matrixWorld),p.current.push(D));e.updateWorldMatrix(!0,!1),v.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(E),e.getWorldScale(S),c.current.compose(v,E,S),l.current.copy(o),y.current=[e.rotation.x,e.rotation.y,e.rotation.z],u.current=null,s.current=!0,i(!0)},[v,o,e,i,a,E,S]),C=(0,At.useCallback)((D,$)=>{let k=c.current.clone().premultiply($),X=l.current.clone().premultiply($);k.decompose(w,E,P);let O=w.clone();X.decompose(v,b,x),t==="world"&&b.identity(),o.compose(v,b,x),D.decompose(w,R,P);let H=new Sn.Euler().setFromQuaternion(R,e.rotation.order),[B,se,Q]=y.current,be=[B+H.x,se+H.y,Q+H.z],ve=new Sn.Quaternion().setFromEuler(new Sn.Euler(be[0],be[1],be[2],e.rotation.order)),Mt=(e.parent?.matrixWorld||new Sn.Matrix4).clone().invert(),Yt=O.clone().applyMatrix4(Mt),en=a.clone().multiply(e.scale).applyQuaternion(ve),Dt=Yt.clone().sub(en),ft=[Dt.x,Dt.y,Dt.z];e.position.set(ft[0],ft[1],ft[2]),e.rotation.set(be[0],be[1],be[2],e.rotation.order),e.updateMatrixWorld(!0),r(),u.current={position:ft,rotation:be}},[v,R,o,b,x,r,e,a,w,P,t,E]);return(0,oh.jsx)("group",{children:(0,oh.jsx)(Gv.PivotControls,{matrix:o,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:A,onDrag:(D,$,k,X)=>C($,X),onDragEnd:()=>{s.current=!1;let D=u.current;if(u.current=null,D)n(D),g.current=requestAnimationFrame(()=>{g.current=null,i(!1)});else if(p.current.length>0){for(let $ of p.current)yo($);e.updateMatrixWorld(!0),r(),i(!1)}else i(!1);p.current=[]}})})}var L=require("react/jsx-runtime");function _S(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,i=n.getAttribute("skinIndex"),r=n.getAttribute("skinWeight"),a=n.getAttribute("position");if(!i||!r||!a)return null;let o=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],c=new ut.Vector3,l=s[0],u=1/0;for(let g of s){c.fromBufferAttribute(a,g);let f=c.distanceToSquared(o);f<u&&(u=f,l=g)}let d=i.getComponent(l,0),p=r.getComponent(l,0);for(let g=1;g<4;g++){let f=r.getComponent(l,g);f>p&&(p=f,d=i.getComponent(l,g))}return t.skeleton.bones[d]??null}function SS(e){let t=_S(e)??e.object,n=Es(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let i=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[i.x,i.y,i.z]}}function MS(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let i=Ai(t,e.anchorNodeName);return i?(i.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(i.matrixWorld),!0):!1}function CS({annotation:e,enabled:t,controlsRef:n,offsetRef:i}){let r=(0,Do.useThree)(p=>p.scene),a=(0,M.useRef)(null),o=(0,M.useRef)(!1),s=(0,M.useMemo)(()=>new ut.Vector3,[]),c=(0,M.useMemo)(()=>new ut.Vector3,[]),l=(0,M.useMemo)(()=>new ut.Vector3,[]),u=e?.anchorNodeName,d=e?.anchorLocalPosition;return(0,M.useEffect)(()=>{a.current=null,o.current=!1},[u,e?.id]),(0,Do.useFrame)(()=>{let p=n.current,g=i.current;if(!t||!p||!g||!u||!d){o.current=!1;return}let f=a.current;if((!f||!f.parent)&&(f=Ai(r,u),a.current=f),!f){o.current=!1;return}f.updateWorldMatrix(!0,!1),s.set(d[0],d[1],d[2]).applyMatrix4(f.matrixWorld),!(o.current&&s.distanceToSquared(c)<1e-8)&&(c.copy(s),o.current=!0,l.copy(s).add(g),p.setLookAt(l.x,l.y,l.z,s.x,s.y,s.z,!0))}),null}function TS(e){let t={total:0,missing:0};return e.traverse(n=>{let i=n;!i.isMesh||!i.geometry||(t.total+=1,i.geometry.getAttribute("uv")||(t.missing+=1))}),t}var PS=.2,Wv=Object.freeze({});function AS({enabled:e,speed:t,controlsRef:n}){let i=(0,Do.useThree)(r=>r.invalidate);return(0,Do.useFrame)((r,a)=>{!e||!n.current||(n.current.rotate(a*PS*t,0,!1),i())}),null}function ES(e,t,n){let i=t?.camera;if(!(i instanceof ut.PerspectiveCamera))return null;let a=(e instanceof ut.Box3?e:new ut.Box3().setFromObject(e)).getSize(new ut.Vector3).length();return!Number.isFinite(a)||a<=0?null:(i.near=a/100,i.far=a*100,i.updateProjectionMatrix(),t&&n===void 0&&(t.maxDistance=a*10),a)}function RS(e,t){let n=e.camera;if(!(n instanceof ut.PerspectiveCamera)||!(t>0))return;let i=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(i-n.near)<=n.near*.01||(n.near=i,n.updateProjectionMatrix())}async function Xv(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function lh(e){return(0,L.jsx)(LS,{...ef(e)})}function LS({modelUrl:e,tilesetUrl:t,tilesErrorTarget:n=8,tilesCacheSize:i=800,onObjectCatalog:r,modelFormat:a,licenseKey:o,licenseValidationUrl:s,objectBindings:c="auto",selectedObject:l,panelHoveredObject:u,onObjectBindingsChange:d,onObjectSelect:p,onObjectHover:g,onObjectDoubleClick:f,onObjectContextMenu:v,onObjectEditLeaseChange:E,onSceneLoaded:S,onModelLoaded:b,onLoadError:x,onProgress:R,onCameraControllerChange:w,cameraControllerType:P,onAction:y,onHiddenObjectsChange:m,onCameraChange:A,onViewerReady:C,onTextureUpload:D,onAnimationsReady:$,onAnnotationsChange:k,activeAnnotation:X,onActiveAnnotationChange:O,camera:H,cameraLimits:B,backgroundColor:se,shadows:Q=!0,showObjectBindingDataPanel:be=!0,customObjectBindingDataPanel:ve,customSceneObjectsPanel:et,showSceneObjectsPanel:Mt=!0,showDownloadButton:Yt=!0,downloadFilename:en="model",showResetButton:Dt=!0,showLoadingOverlay:ft=!0,showMouseController:tn=!1,mouseControllerPosition:$t="center-bottom",mouseControllerOpacity:Cn=1,moveSensitivity:jt=.08,zoomSensitivity:nn=1,sceneConfig:Ht,onSceneConfigChange:oe,disableZoom:$n=!1,zoomOnSelected:Rt=!0,highlightOnHover:st=!0,enableCameraControls:Kt=!0,onAutoFit:Gt,refitOnResize:Zt=!0,renderMode:Kn="demand",maxDpr:ze=2,preserveDrawingBuffer:ye=!1,performanceProfile:Ce="auto",dracoDecoderPath:Wt,ktx2TranscoderPath:gt,meshopt:Jt=!0,showMeasureTools:ee=!1,showUvCheckerButton:ge=!1,showExplodeControls:we=!1,cinematic:Je,measurementUnit:Tt="m",enableXR:Qe=!1,usdzUrl:bt,arScaleMode:fe="normalized",mobileHandoffUrl:He,showAnnotationNavigation:tt=!0,showAnnotationOnHover:rn=!1,moveModeEnabled:vn=!1,objectTransformSpace:Tn="world",enableKeyboardNavigation:Qt=!1,showViewGizmo:Ir=!1,overlay:kn,unsafe_sceneChildren:Br,autoRotate:la,autoRotateSpeed:xn,onTexturePositioningChange:U,endTexturePositioningRef:N,texturePositioning:q}){let re=c==="auto",ie=re?Wv:c,{isInsideEditor:me,activeTab:le,activeSubTab:ke}=Er(),vt=me&&le==="scene"&&ke==="Lighting",Nt=pd(o,s),[xt,Xt]=(0,M.useState)({}),ae=(0,M.useMemo)(()=>Tu(Ht??ya,xt),[Ht,xt]),yt=(0,M.useRef)(ae);yt.current=ae;let an=(0,M.useCallback)(h=>{if(oe){oe(Tu(yt.current,h));return}Xt(_=>{let z={..._};for(let[V,G]of Object.entries(h))z[V]={..._[V],...G};return z})},[oe]),[pn,Dn]=(0,M.useState)(null),[Nn,In]=(0,M.useState)(null),on=ae.model.renderer==="uv-checker",rr=ge?Nn??on:on,Gn=(0,M.useMemo)(()=>{let h=rr?"uv-checker":on?"pbr":ae.model.renderer;return h===ae.model.renderer?ae:{...ae,model:{...ae.model,renderer:h}}},[on,ae,rr]);(0,M.useEffect)(()=>{In(null)},[e,ae.model.renderer,ge,t]);let vl=(0,M.useMemo)(()=>{if(se)return se;let h=ae.background;return h.enabled&&h.type==="color"?h.color:"#1c1c1d"},[se,ae]),Ho=(0,M.useMemo)(()=>({dracoDecoderPath:Wt,ktx2TranscoderPath:gt,meshopt:Jt}),[Wt,gt,Jt]),xl=(0,M.useMemo)(()=>wf(Ce),[Ce]),Xe=(0,M.useRef)(null),[Ua,Fa]=(0,M.useState)("orbit"),[xi,sn]=(0,M.useState)(!1),Bn=P!==void 0?P:Ua,Jr=(0,M.useCallback)(h=>{sn(!1),h!==Bn&&(Fa(h),w?.(h))},[Bn,w]),[ar,Va]=(0,M.useState)(!1),[Te,Ct]=(0,M.useState)(null),Oi=!!(q||U||N),Go=(0,M.useRef)(U);Go.current=U,(0,M.useEffect)(()=>{Go.current?.(Te)},[Te]),(0,M.useEffect)(()=>{if(N)return N.current=()=>Ct(null),()=>{N.current=null}},[]),(0,M.useEffect)(()=>{Xe.current&&(Xe.current.dollySpeed=Math.max(nn,0))},[nn]),(0,M.useEffect)(()=>{Xe.current&&(Xe.current.enabled=Kt&&!ar&&!Te)},[Kt,ar,Te]);let ja=(0,M.useRef)(null),ca=(0,M.useRef)(new Map),yl=(0,M.useRef)(null),wl=(0,M.useRef)(null),or=(0,M.useRef)(null),Or=(0,M.useRef)({});(0,M.useEffect)(()=>()=>{for(let h of Object.values(Or.current))URL.revokeObjectURL(h)},[]);let ct=(0,M.useRef)({}),[,Wo]=(0,M.useState)(0),zr=(0,M.useCallback)(()=>{Wo(h=>h+1)},[]),Ha=(0,M.useRef)({}),_l=(0,M.useRef)(null),mr=(0,M.useRef)(null),[Zn,Xo]=(0,M.useState)(null),Qr=(0,M.useCallback)(h=>{mr.current=h,Xo(h)},[]),yi=(0,M.useRef)(new Set),wi=(0,M.useRef)(null);(0,M.useEffect)(()=>{let h=Zn;if(!h||!Qt||!Kt||vn)return;let _=new Set(["w","a","s","d"," ","c"]),z=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),V=0,G=xe=>xe.code==="Space"?" ":xe.key.toLowerCase(),pe=()=>{yi.current.clear(),V=0,wi.current!==null&&(cancelAnimationFrame(wi.current),wi.current=null)},De=xe=>{let $e=Xe.current,Ke=yi.current;if(!$e||Ke.size===0){wi.current=null,V=0;return}let cn=V?Math.min((xe-V)/1e3,.05):1/60;V=xe;let hn=Math.max($e.distance*.75,.01)*cn;Ke.has("w")&&$e.forward(hn,!1),Ke.has("s")&&$e.forward(-hn,!1),Ke.has("a")&&$e.truck(-hn,0,!1),Ke.has("d")&&$e.truck(hn,0,!1),Ke.has(" ")&&$e.truck(0,hn,!1),Ke.has("c")&&$e.truck(0,-hn,!1),wi.current=requestAnimationFrame(De)},Ye=xe=>{if(xe.target!==h){pe();return}if(z.has(xe.key)){let Ke=Xe.current;if(!Ke)return;xe.preventDefault();let cn=Math.PI/90,hn=Math.max(Ke.distance*.05,.01);xe.key==="ArrowUp"?xe.shiftKey?Ke.forward(hn,!0):Ke.rotate(0,-cn,!0):xe.key==="ArrowDown"?xe.shiftKey?Ke.forward(-hn,!0):Ke.rotate(0,cn,!0):xe.key==="ArrowLeft"?Ke.rotate(-cn,0,!0):Ke.rotate(cn,0,!0);return}let $e=G(xe);_.has($e)&&(xe.preventDefault(),yi.current.add($e),wi.current===null&&(wi.current=requestAnimationFrame(De)))},Ge=xe=>{yi.current.delete(G(xe))};return h.addEventListener("keydown",Ye),h.addEventListener("keyup",Ge),h.addEventListener("blur",pe),()=>{h.removeEventListener("keydown",Ye),h.removeEventListener("keyup",Ge),h.removeEventListener("blur",pe),pe()}},[Zn,Kt,Qt,vn]);let Ga=(0,M.useRef)(null),[fr,Sl]=(0,M.useState)(ie),[Vn,zi]=(0,M.useState)({}),[Ml,qo]=(0,M.useState)(null),[da,Wa]=(0,M.useState)(null),[jd,Hd]=(0,M.useState)(null),[Gd,Wd]=(0,M.useState)(null),[sr,Xd]=(0,M.useState)(null),[Cl,Tl]=(0,M.useState)({}),On=(0,M.useRef)(null),Xa=(0,M.useRef)(null),Yo=(0,M.useRef)(0),$o=(0,M.useRef)(null),[qd,Yd]=(0,M.useState)(0),ei=(0,M.useRef)(!1),ua=(0,M.useRef)(!1),Ko=(0,M.useRef)(!!H);Ko.current=!!H;let Ur=(0,M.useRef)(null),[Pl,pa]=(0,M.useState)(!!e),[Zo,Ui]=(0,M.useState)(!e||!!Gt||!!H),[_i,Al]=(0,M.useState)(!1),[El,Jo]=(0,M.useState)(!1),[$d,Qo]=(0,M.useState)(null),[Rl,ha]=(0,M.useState)(!1),[Ll,Kd]=(0,M.useState)(0),qa=(0,M.useRef)(""),Si=(0,M.useRef)(""),[kl,Ya]=(0,M.useState)(!1),[Dl,Zd]=(0,M.useState)(null),[T,I]=(0,M.useState)(!1),[Z,te]=(0,M.useState)({total:0,missing:0}),[Pe,Ve]=(0,M.useState)("Loading model..."),[Pt,Ne]=(0,M.useState)(null),nt=(0,M.useRef)({}),zn=(0,M.useCallback)(()=>{let h=Xe.current;if(!h||Ur.current)return;let _=h.getPosition(new ut.Vector3),z=h.getTarget(new ut.Vector3);Ur.current={position:[_.x,_.y,_.z],target:[z.x,z.y,z.z]}},[]),[ti,$a]=(0,M.useState)(!1),[Nl,Bh]=(0,M.useState)(0),[Jd,Oh]=(0,M.useState)(!1);(0,M.useEffect)(()=>{Bh(0),Oh(!1)},[e,t]);let es=(0,M.useMemo)(()=>{let h=ae.cinematic,_=h?.enabled?{waypoints:h.waypoints,duration:h.duration,loop:h.loop,autoPlay:h.autoPlay}:null;return Je===void 0?_&&(_.waypoints?.length??0)>=2?_:null:Je===!1?null:Je===!0?_??{}:{..._??{},...Je}},[Je,ae]),[ma,ni]=(0,M.useState)(!1),[wx,Ka]=(0,M.useState)(!1),Qd=(0,M.useRef)(!1);(0,M.useEffect)(()=>{ni(!1),Ka(!1),Qd.current=!1},[e,t]),(0,M.useEffect)(()=>{!es?.autoPlay||Qd.current||_i&&Zo&&!Pl&&(Qd.current=!0,ni(!0),Ka(!1))},[es,_i,Zo,Pl]);let{xrStore:fa,presenterRef:_x,arSupported:eu,vrSupported:zh,quickLookSupported:Uh,resolvedMobileHandoffUrl:Il,isMobileHandoffOpen:Fh,arOverlay:Sx,openMobileHandoff:Mx,closeMobileHandoff:Vh,openQuickLook:Cx,handleARStateChange:Tx}=Tf({enableXR:Qe,usdzUrl:bt,mobileHandoffUrl:He}),[ri,jh]=(0,M.useState)(()=>Ht?.annotations??[]);(0,M.useEffect)(()=>{if(ri.length>0){let h=ri.reduce((_,z)=>Math.max(_,z.id),0);zl.current=h}else zl.current=0},[ri]);let[Jn,Bl]=(0,M.useState)(null),[Fi,Ol]=(0,M.useState)({title:"",description:""}),zl=(0,M.useRef)(0),[Px,Hh]=(0,M.useState)(null),[gr,Za]=(0,M.useState)(-1),[Gh,Ul]=(0,M.useState)(!1),Ja=(0,M.useRef)(null),ln=(0,M.useMemo)(()=>[...ri].sort((h,_)=>h.id-_.id),[ri]),Fl=(0,M.useMemo)(()=>gr<0||gr>=ln.length?null:ln[gr],[gr,ln]),ii=(0,M.useCallback)(h=>{if(X!==void 0){O?.(h);return}Hh(h?{annotation:h}:null)},[X,O]),Qa=(0,M.useCallback)(h=>{let _=Xe.current,z=On.current;if(!_)return;let V=new ut.Vector3,G=ca.current.get(h.id);G?V.copy(G):z&&MS(h,z,V)||V.set(h.worldPosition[0],h.worldPosition[1],h.worldPosition[2]),ja.current=null;let pe=_.smoothTime;_.smoothTime=.6;let De=h.worldNormal;if(z){let Ye=new ut.Box3().setFromObject(z),Ge=new ut.Vector3;Ye.getCenter(Ge);let xe=new ut.Vector3;Ye.getSize(xe);let $e=xe.length()*.2,Ke;De?Ke=new ut.Vector3(De[0],De[1],De[2]):Ke=V.clone().sub(Ge),Ke.lengthSq()<1e-6&&Ke.set(0,0,1),Ke.normalize();let cn=Math.max($e*.6,.3),hn=V.clone().add(Ke.multiplyScalar(cn));_.setPosition(hn.x,hn.y,hn.z,!0),h.anchorNodeName&&h.anchorLocalPosition&&(ja.current=hn.clone().sub(V))}_.setTarget(V.x,V.y,V.z,!0),Ja.current&&clearTimeout(Ja.current),Ja.current=setTimeout(()=>{_.smoothTime=pe,Ja.current=null},800),ii(h)},[ii]),Ax=(0,M.useCallback)(()=>{ln.length!==0&&($a(!0),Za(0),Qa(ln[0]))},[ln,Qa]),Ex=(0,M.useCallback)(()=>{if(ln.length===0||gr<0)return;Ul(!0);let h=(gr-1+ln.length)%ln.length;Za(h),Qa(ln[h]),setTimeout(()=>Ul(!1),500)},[gr,ln,Qa]),Rx=(0,M.useCallback)(()=>{if(ln.length===0||gr<0)return;if(gr===ln.length-1){if($a(!1),Za(-1),ii(null),Xe.current&&Ur.current){let _=Ur.current;Xe.current.setLookAt(_.position[0],_.position[1],_.position[2],_.target[0],_.target[1],_.target[2],!0)}return}Ul(!0);let h=gr+1;Za(h),Qa(ln[h]),setTimeout(()=>Ul(!1),500)},[gr,ln,Qa,ii]),Lx=(0,M.useCallback)(()=>{if($a(!1),Za(-1),ii(null),Xe.current&&Ur.current){let h=Ur.current;Xe.current.setLookAt(h.position[0],h.position[1],h.position[2],h.target[0],h.target[1],h.target[2],!0)}},[ii]);(0,M.useEffect)(()=>{Za(-1),$a(!1)},[ln.length]),(0,M.useEffect)(()=>()=>{Ja.current&&clearTimeout(Ja.current)},[]),(0,M.useEffect)(()=>{Fl&&ti&&ii(Fl)},[Fl,ii,ti]),(0,M.useEffect)(()=>{if(Ht?.annotations===void 0)return;let h=Ht.annotations.map(_=>({..._,localPosition:_.localPosition??_.worldPosition}));jh(h)},[Ht?.annotations]);let ts=(0,M.useCallback)(()=>{if(X!==void 0){O?.(null);return}Hh(null)},[X,O]),ns=X!==void 0?X:Px?.annotation??null,rs=(0,M.useMemo)(()=>ns?ri.find(_=>_.id===ns.id)??null:null,[ns,ri]);(0,M.useEffect)(()=>{ns&&!rs&&ts()},[ns,rs,ts]);let is=!re&&d!==void 0,qe=is?ie:fr;nt.current=qe,(0,M.useEffect)(()=>{if(!Te)return;let h=qe[Te.objectKey]?.style?.material?.[Te.textureKey]?.path;(!Oi||!h)&&Ct(null)},[qe,Oi,Te]);let tu=(0,M.useRef)({}),[Vl,kx]=(0,M.useState)({});(0,M.useEffect)(()=>{let h={...Vl},_=!1,z=new Set;for(let[V,G]of Object.entries(qe)){z.add(V);let pe=G.style?.material,De=tu.current[V]??{},Ye={};for(let xe of ci){let $e=pe?.[xe]?.path;$e&&(Ye[xe]=$e,$e!==De[xe]&&(h[V]!==xe&&(_=!0),h[V]=xe))}let Ge=h[V];if(Ge&&!Ye[Ge]){let xe=ci.find($e=>!!Ye[$e]);xe?h[V]=xe:delete h[V],_=!0}tu.current[V]=Ye}for(let V of Object.keys(h))z.has(V)||(delete h[V],delete tu.current[V],_=!0);_&&kx(h)},[qe]);let Dx=(0,M.useMemo)(()=>Object.entries(qe).map(([h,_])=>JSON.stringify([h,_.modelObjectId,_.transform??null])).sort().join(""),[qe]),{measureMode:as,measureModeRef:Nx,measurePoints:Wh,showDimensions:nu,measureBox:Xh,modelBounds:Ix,refreshBounds:qh,clearMeasurements:Bx,toggleMeasureMode:Ox,toggleDimensions:zx,handleMeasurePointerDown:Ux,handleMeasureClick:Fx}=xf({canvasAreaRef:mr,controlsRef:Xe,sceneRef:On,modelUrl:e,modelRotation:ae.model.rotation,bindingTransformSignature:Dx,modelLoaded:_i}),{isDownloading:ru,downloadMenuOpen:Vx,uvExportError:Yh,toggleDownloadMenu:jx,handleDownloadMesh:Hx,handleDownloadScreenshot:Gx,handleDownloadUvLayout:Wx}=vf({sceneRef:On,materialRefs:Ha,rendererCaptureRef:or,objectBindings:qe,downloadFilename:en}),$h=(0,M.useMemo)(()=>Object.fromEntries(Object.entries(qe).filter(([,h])=>h.visible===!1).map(([h])=>[h,!0])),[qe]),Mi=(0,M.useMemo)(()=>{let h=new WeakMap,_=new Map,z=new Map;for(let[V,G]of Object.entries(qe))h.set(G,V),_.has(G.id)||_.set(G.id,V),z.has(G.modelObjectId)||z.set(G.modelObjectId,V);return{byReference:h,byId:_,byModelObjectId:z}},[qe]),ai=(0,M.useCallback)(h=>h?Mi.byReference.get(h)??Mi.byModelObjectId.get(h.modelObjectId)??Mi.byId.get(h.id)??null:null,[Mi]),iu=l!==void 0,os=iu?l??null:Gd,lr=ai(os),au=lr?ct.current[lr]??null:null,Xx=lr?Vl[lr]:void 0,Kh=ai(st?u??da??jd:null),qx=Kh?ct.current[Kh]??null:null,Zh=(0,M.useCallback)(h=>{Hd(h),g?.(h)},[g]),Jh=be&&os!==null&&lr!==null,ss=(lr?qe[lr]:null)??os,ou=ss&&(ss.modelObjectId||ss.id)||null,eo=ou?Cl[ou]??null:null;(0,M.useEffect)(()=>{is||Sl(ie)},[is,ie]),(0,M.useEffect)(()=>{m?.($h)},[$h,m]);let to=(0,M.useCallback)(h=>{if(Bn==="pointerLock"){Jr("orbit");return}iu||Wd(h),p?.(h)},[Bn,Jr,iu,p]),oi=(0,M.useCallback)(h=>{is||Sl(h),d?.(h)},[is,d]),Qh=(0,M.useRef)(null),jl=(0,M.useCallback)(h=>{if(!re)return;let _=`${e}
|
|
3688
|
-
${t??""}`,z=Qh.current===_?nt.current:Wv;Qh.current=_;let V=Ev(h);for(let G of Object.keys(V))z[G]&&(V[G]=z[G]);oi(V)},[re,e,t,oi]),Hl=(0,M.useRef)({}),no=(0,M.useCallback)(h=>{let _=of(ct.current[h]),z=nt.current[h]?.style?.material,V=z?.emissive??_.color,G=z?.emissiveIntensity??_.intensity;return{color:V,intensity:G,on:V!=="#000000"&&G>0}},[]),ls=(0,M.useCallback)((h,_)=>{let z=nt.current,V=z[h];V&&oi({...z,[h]:{...V,style:{...V.style,material:{...V.style?.material,..._}}}})},[oi]),su=h=>h==="#000000"?"#ffffff":h,Yx=(0,M.useCallback)(h=>{let _=lr;if(!_||!h)return;let z=nt.current[_];z&&oi({...nt.current,[_]:{...z,transform:{...z.transform,...h}}})},[oi,lr]),si=(0,M.useCallback)((h,_)=>qe[h]?h:_?ai(_):Mi.byId.get(h)??Mi.byModelObjectId.get(h)??null,[qe,ai,Mi]),Wn=(0,M.useCallback)((h,_)=>{let z=si(h),V=z?qe[z]:void 0;!z||!V||oi({...qe,[z]:{...V,style:_(V.style)}})},[si,qe,oi]),br=(0,M.useCallback)(()=>{if(sr){let h=Vn[sr.objectId]?.hex;h!==void 0&&(Wn(sr.objectId,_=>({..._,material:{..._?.material,baseColor:h}})),zi(_=>({..._,[sr.objectId]:{}})))}Xd(null)},[sr,Vn,Wn]),em=(0,M.useCallback)(()=>{to(null),qo(null),br()},[to,br]),lu=(0,M.useCallback)((h,_,z,V,G)=>{let pe=_l.current,De=mr.current,Ye=Xe.current?.camera;if(!pe)return{objectId:h,x:24,y:24};let Ge=pe.getBoundingClientRect(),xe=12,$e=Ge.width-_-xe,Ke=Ge.height-z-xe,cn=Math.max(xe,(Ge.width-_)/2),hn=Math.max(xe,(Ge.height-z)/2),oo=si(h,V),ps=oo?ct.current[oo]:null,li=(so,ba)=>ba<=xe?xe:Math.min(Math.max(so,xe),ba);if(De&&Ye&&ps){let so=De.getBoundingClientRect(),ba=new ut.Vector3;new ut.Box3().setFromObject(ps).getCenter(ba),ba.project(Ye);let vy=(ba.x+1)/2*so.width+(so.left-Ge.left),xy=(1-ba.y)/2*so.height+(so.top-Ge.top);return{objectId:h,x:li(vy+24,$e),y:li(xy-z/2,Ke)}}let bu=typeof G?.screenX=="number"?G.screenX-Ge.left:cn,vu=typeof G?.screenY=="number"?G.screenY-Ge.top:hn;return{objectId:h,x:li(bu,$e),y:li(vu,Ke)}},[si]),Gl=(0,M.useCallback)(h=>{let{objectId:_,action:z,binding:V}=h;switch(qo(h),z.id){case"toggle-visibility":{let G=_;V?.modelObjectId&&(G=Mi.byModelObjectId.get(V.modelObjectId)??G);let pe=qe[G],De=pe?.visible===!1;pe&&oi({...qe,[G]:{...pe,visible:De}});break}case"change-color":br(),Tl(G=>{if(!(_ in G))return G;let pe={...G};return delete pe[_],pe}),zi(G=>{let pe=si(_,V)??_,De=G[_]?.hex,Ye=qe[pe]?.style?.material?.baseColor;return{...G,[_]:{...G[_],hex:De??Ye??"#ffffff"}}}),Xd(lu(_,225,250,V,h));break;case"change-material":br(),Tl(G=>{if(_ in G){let pe={...G};return delete pe[_],pe}return{...G,[_]:lu(_,300,320,V,h)}});break;case"toggle-light":case"change-light-color":case"set-brightness":{let G=si(_,V);if(!G)break;let pe=af(yt.current,qe,G);if(z.id==="toggle-light"){if(pe.length>0){let xe=!pe.some($e=>$e.visible);an(Object.fromEntries(pe.map($e=>[$e.id,{visible:xe}])));break}let Ge=no(G);Ge.on?(Hl.current[G]=Ge.intensity,ls(G,{emissiveIntensity:0})):ls(G,{emissive:su(Ge.color),emissiveIntensity:Hl.current[G]??1});break}let De=z.id,Ye=pe.length>0?null:no(G);Dn(Ge=>Ge?.objectId===_&&Ge.kind===De?null:{objectId:_,kind:De,target:Ye?{type:"glow",objectKey:G,baseIntensity:Ye.on?Ye.intensity:Hl.current[G]??1}:{type:"lights",lightIds:pe.map(xe=>xe.id),baseIntensity:Object.fromEntries(pe.map(xe=>[xe.id,xe.intensity]))},percent:Ye&&!Ye.on?0:100});break}default:break}y?.(h)},[oi,ls,an,no,qe,lu,y,br,si,Mi]);(0,M.useEffect)(()=>{if(sr)return window.addEventListener("pointerdown",br),()=>window.removeEventListener("pointerdown",br)},[sr,br]),(0,M.useEffect)(()=>{if(!rs)return;let h=_=>{if(Ga.current&&!Ga.current.contains(_.target)){if(_.target.closest?.(".ri-annotationMarker"))return;ts()}};return document.addEventListener("mousedown",h),document.addEventListener("touchstart",h),()=>{document.removeEventListener("mousedown",h),document.removeEventListener("touchstart",h)}},[rs,ts]),(0,M.useEffect)(()=>{if(!Jn)return;let h=_=>{let z=_.target;if(z.closest?.(".ri-annotationPopup")||z.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let V=mr.current;!V||!V.contains(z)||(Bl(null),Ol({title:"",description:""}))};return document.addEventListener("mousedown",h,!0),document.addEventListener("touchstart",h,!0),()=>{document.removeEventListener("mousedown",h,!0),document.removeEventListener("touchstart",h,!0)}},[Jn]);let tm=(0,M.useCallback)((h,_)=>{let z=Or.current[h];z&&URL.revokeObjectURL(z),_.startsWith("blob:")?Or.current[h]=_:delete Or.current[h],Wn(h,V=>({...V,material:{...V?.material,texture:{path:_}}}))},[Wn]),$x=h=>{let _=h.target.files?.[0],z=wl.current;if(!_||!z)return;let V=si(z);V&&(D?D(_,V).then(G=>tm(V,G),G=>console.error("onTextureUpload failed:",G)):tm(V,URL.createObjectURL(_)),h.target.value="")},nm=h=>{wl.current=h,yl.current?.click()},rm=h=>{let _=si(h);if(!_)return;Wn(_,V=>V?.material?.texture?{...V,material:{...V.material,texture:void 0}}:V);let z=Or.current[_];z&&(URL.revokeObjectURL(z),delete Or.current[_])},ro=!!q,Fr=typeof q=="object"?q:void 0,Kx=(0,M.useCallback)((h,_,z)=>{if(Fr?.onOffsetChange){Fr.onOffsetChange(h,_,z);return}Wn(h,V=>{let G=V?.material?.texture;if(!G?.path)return V;let pe=G.offset??[0,0],De=[pe[0],pe[1]];return De[_]=z,{...V,material:{...V?.material,texture:{...G,offset:De}}}})},[Wn,Fr]),Zx=(0,M.useCallback)((h,_)=>{if(Fr?.onRotationChange){Fr.onRotationChange(h,_);return}Wn(h,z=>{let V=z?.material?.texture;if(!V?.path)return z;let G=(_%360+360)%360;return{...z,material:{...z?.material,texture:{...V,rotation:G*Math.PI/180}}}})},[Wn,Fr]),Jx=(0,M.useCallback)(()=>{Ct(null),Fr?.onEndPositioning?.()},[Fr]),cu=(0,M.useRef)(C);cu.current=C;let Vr=(0,M.useCallback)(()=>{let h=Xe.current;!h||!cu.current||cu.current({objectBindings:nt.current,homeCameraState:Ur.current,captureImage:_=>Kl(or.current,_),invalidate:()=>or.current?.invalidate(),raw:{controls:h,scene:On.current,nodes:ct.current}})},[]),io=(0,M.useCallback)(async(h=!1)=>{let _=Xe.current,z=Xa.current??On.current;if(!_||!z)return!1;try{if(h){let V=(z instanceof ut.Box3?z:new ut.Box3().setFromObject(z)).getBoundingSphere(new ut.Sphere),G=V.center.clone(),De=_.getPosition(new ut.Vector3).clone().sub(_.getTarget(new ut.Vector3));De.lengthSq()<1e-6&&De.set(0,0,1),De.normalize();let Ye=Math.max(V.radius*10,20),Ge=G.clone().add(De.multiplyScalar(Ye));await _.setLookAt(Ge.x,Ge.y,Ge.z,G.x,G.y,G.z,!1)}return Ui(!0),await Xv(_,()=>_.fitToBox(z,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(V=>{let G=performance.now(),pe=()=>{_.active===!1||performance.now()-G>8e3?(_.dispatchEvent({type:"update"}),or.current?.invalidate(),V()):(or.current?.invalidate(),setTimeout(pe,100))};setTimeout(pe,100)}),ei.current=!0,zn(),Vr(),!0}catch(V){return console.error("Fit scene error:",V),!1}},[zn,Vr]);(0,M.useEffect)(()=>{if(ei.current=!1,ua.current=!1,Ur.current=null,On.current=null,Xa.current=null,Al(!1),Jo(!1),Qo(null),ha(!1),qa.current="",te({total:0,missing:0}),Ve("Loading model..."),Ne(null),!e){pa(!1),Ui(!0);return}pa(!0),Ui(!!Gt||Ko.current);let h=!1,_=null,z=G=>{_=setTimeout(V,G)},V=()=>{if(h||ei.current||ua.current)return;let G=Xa.current??On.current;if(!Xe.current||!G){z(100);return}if(Yo.current=ES(G,Xe.current,B?.maxDistance)??Yo.current,vv(Xe.current)){ei.current=!0,zn(),Vr(),pa(!1),Ui(!0),or.current?.invalidate();return}ua.current=!0,(Gt?Gt():Ko.current?Promise.resolve(!0):io(!0)).then(De=>{ei.current=De!==!1,ei.current?(zn(),Vr(),pa(!1)):h||z(100)}).catch(()=>{ei.current=!1,h||z(100)}).finally(()=>{ua.current=!1})};return z(50),()=>{h=!0,_&&clearTimeout(_)}},[zn,B?.maxDistance,io,e,Vr,Gt,t]),(0,M.useEffect)(()=>{if(!Zt)return;let h=Zn;if(!h)return;let _=null,z=new ResizeObserver(()=>{!ei.current||ua.current||(_&&clearTimeout(_),_=setTimeout(()=>{io()},150))});return z.observe(h),()=>{z.disconnect(),_&&clearTimeout(_)}},[Zn,io,Zt]);let im=(0,M.useCallback)(h=>{if(Nx.current||(ni(!1),br(),qo(null),to(h),$n||!Rt))return;let _=Xe.current,z=ai(h),V=z?ct.current[z]:null;_&&h.cameraState?.position&&h.cameraState?.target?(_.setPosition(h.cameraState.position[0],h.cameraState.position[1],h.cameraState.position[2],!0),_.setTarget(h.cameraState.target[0],h.cameraState.target[1],h.cameraState.target[2],!0)):_&&V&&_.fitToBox(V,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[to,br,ai,$n,Rt]),am=(0,M.useCallback)(h=>{if(!Oi)return!1;let _=ai(h);if(!_)return!1;let z=Vl[_];return z?(ao.current=!1,ga.current=null,Ct({objectKey:_,textureKey:z}),!0):!1},[Oi,ai,Vl]),du=(0,M.useRef)(!1),om=(0,M.useCallback)((h,_)=>f?.({binding:h,..._})===!0?(du.current=!0,!0):am(h),[f,am]),sm=(0,M.useMemo)(()=>v?(h,_)=>v({binding:h,..._}):void 0,[v]),lm=(0,M.useCallback)(h=>{if(to(h),$n)return;let _=Xe.current,z=ai(h),V=z?ct.current[z]:null;if(!_||!V)return;let G=h.cameraState;G?.position&&G?.target?(_.setPosition(G.position[0],G.position[1],G.position[2],!0),_.setTarget(G.target[0],G.target[1],G.target[2],!0)):_.fitToBox(V,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[to,ai,$n]);(0,M.useEffect)(()=>{Vr()},[Vr,qe]);let cm=(0,M.useCallback)((h,_)=>{RS(_,Yo.current),A?.(Ii(h,_)),Vr()},[Vr,A]),Qx=(0,M.useCallback)(h=>{$o.current=new Set(h.map(_=>_.name)),Yd(_=>_+1),jl(h.map(_=>_.name)),r?.(h)},[jl,r]),ey=(0,M.useCallback)(h=>{Xa.current=h,or.current?.invalidate()},[]),dm=(0,M.useCallback)(h=>{On.current=h,qh(h),te(TS(h));let _=yu(h);Zd(_>fs?_:null),I(!1),Ne(null),_>fs&&Ve(`Preparing large model (${Math.round(_/1e6)}M triangles) \u2014 the first display can take a while on this device...`),Al(!0),Jo(!1),Qo(null),Ya(!1),t||(r&&r(tv(h)),jl(ll(h))),S?.(h),b?.(wv(h)),Vr()},[jl,Vr,b,r,S,qh,t]),um=(0,M.useCallback)(h=>{pa(!1),Ui(!0),Jo(!0),Qo(h),x?.(h)},[x]),ty=(0,M.useCallback)(h=>{h.lengthComputable&&h.total>0&&Ne(h.loaded/h.total*100),R?.(h)},[R]),pm=(0,M.useCallback)((h,_,z)=>{if(!oe)return;let V={...ae,lighting:{...ae.lighting,lights:ae.lighting.lights.map(G=>G.id===h?{...G,position:_,...z?{rotation:z}:{}}:G)}};oe(V)},[ae,oe]);(0,M.useEffect)(()=>{let h=On.current;if(!_i||!h){ha(!1);return}let _=Object.entries(qe);if(_.length===0){ha(!1);return}let z=t?$o.current:new Set(Object.keys(Xi(h).nodesById));if(!z||z.size===0){ha(!1);return}let V=_.map(([pe,De])=>De.modelObjectId??pe).filter(pe=>!z.has(pe));ha(V.length>0),Kd(V.length);let G=V.join(`
|
|
3689
|
-
|
|
3690
|
-
`);if(h.length>0&&_!==Si.current){let z=h.slice(0,10).join(", "),V=h.length>10?` and ${h.length-10} more`:"";console.warn(`[react-immersive] ${h.length} action button(s) do nothing because ModelViewer has no onAction handler: ${z}${V}. ModelViewer itself handles ${ws.join(", ")}; handle other ids in onAction, or pass useViewerActions().handleAction to run their effects.`)}Si.current=_},[qe,me,y]);let uu=(0,M.useCallback)(async()=>{if(Gt){await Gt();return}let h=Xe.current;if(!h)return;let _=Ur.current;try{_?await Xv(h,()=>h.setLookAt(_.position[0],_.position[1],_.position[2],_.target[0],_.target[1],_.target[2],!0)):await io()}catch(z){console.error("Reset camera error:",z)}},[Gt,io]),sM=(0,M.useCallback)(()=>{Ka(!1),ni(!0)},[]),lM=(0,M.useCallback)(()=>{ni(!1)},[]),ny=(0,M.useCallback)(()=>{ni(!1),Ka(!0),setTimeout(()=>{uu()},100)},[uu]),ry=(0,M.useCallback)((h,_)=>{cm(h,_)},[cm]),hm=1,iy=4,ay=.0015,oy=.1,sy=8,ga=(0,M.useRef)(null),ao=(0,M.useRef)(!1),pu=(0,M.useRef)([0,0]),Wl=(0,M.useRef)([0,0]),Xl=(0,M.useRef)(1),vr=(0,M.useRef)(null),ql=(0,M.useCallback)((h,_)=>{let z=Te;if(!z)return;let V=nt.current[z.objectKey]?.style?.material?.[z.textureKey],G=V?.path;if(!G)return;let pe=V?.rotation??0,De=qr(z.textureKey),Ye=Ts(G,De),Ge=Ha.current[z.objectKey],xe=Array.isArray(Ge)?Ge:Ge?[Ge]:[],$e=xc[z.textureKey];for(let Ke of xe){let cn=Ke;$e in cn&&(cn[$e]=ac(cn.userData,z.textureKey,Ye,G,h,_,pe))}or.current?.invalidate()},[Te]),ly=(0,M.useCallback)(h=>{if(!Te)return;h.currentTarget.setPointerCapture?.(h.pointerId),ga.current={x:h.clientX,y:h.clientY},ao.current=!1;let _=nt.current[Te.objectKey]?.style?.material?.[Te.textureKey];if(pu.current=_?.offset??[0,0],Wl.current=pu.current,Xl.current=_?.scale??1,vr.current===null){let z=()=>{or.current?.invalidate(),vr.current=requestAnimationFrame(z)};vr.current=requestAnimationFrame(z)}},[Te]),hu=(0,M.useCallback)(h=>{if(!Te||!ga.current)return;let _=mr.current,z=_?.clientWidth||1,V=_?.clientHeight||1,G=h.clientX-ga.current.x,pe=h.clientY-ga.current.y;if(!ao.current&&Math.hypot(G,pe)<iy)return;ao.current=!0;let De=-(G/z)*hm,Ye=pe/V*hm,[Ge,xe]=pu.current,$e=[Ge+De,xe+Ye];Wl.current=$e,ql($e,Xl.current),Wn(Te.objectKey,Ke=>({...Ke,material:{...Ke?.material,[Te.textureKey]:{...Ke?.material?.[Te.textureKey],path:nt.current[Te.objectKey]?.style?.material?.[Te.textureKey]?.path,offset:$e}}}))},[Te,ql,Wn]),cs=(0,M.useCallback)(h=>{if(!Te)return;h.target?.releasePointerCapture?.(h.pointerId),vr.current!==null&&(cancelAnimationFrame(vr.current),vr.current=null);let _=ao.current,z=Te;if(_){Wn(z.objectKey,V=>({...V,material:{...V?.material,[z.textureKey]:{...V?.material?.[z.textureKey],path:nt.current[z.objectKey]?.style?.material?.[z.textureKey]?.path,offset:Wl.current}}})),ga.current=null,ao.current=!1;return}ga.current=null,Ct(null)},[Te,Wn]);(0,M.useEffect)(()=>{if(!Te)return vr.current!==null&&(cancelAnimationFrame(vr.current),vr.current=null),()=>{vr.current!==null&&(cancelAnimationFrame(vr.current),vr.current=null)}},[Te]),(0,M.useEffect)(()=>{let h=Zn;if(!(!h||!Te))return h.addEventListener("pointermove",hu),h.addEventListener("pointerup",cs),h.addEventListener("pointercancel",cs),()=>{h.removeEventListener("pointermove",hu),h.removeEventListener("pointerup",cs),h.removeEventListener("pointercancel",cs)}},[Zn,Te,hu,cs]);let mu=(0,M.useCallback)(h=>{if(!Te)return;h.preventDefault();let _=Te,z=Math.exp(-h.deltaY*ay),V=Math.min(sy,Math.max(oy,Xl.current*z));Xl.current=V,ql(Wl.current,V),Wn(_.objectKey,G=>({...G,material:{...G?.material,[_.textureKey]:{...G?.material?.[_.textureKey],path:nt.current[_.objectKey]?.style?.material?.[_.textureKey]?.path,scale:V}}}))},[Te,ql,Wn]);(0,M.useEffect)(()=>{let h=Zn;if(!(!h||!Te))return h.addEventListener("wheel",mu,{passive:!1}),()=>h.removeEventListener("wheel",mu)},[Zn,Te,mu]);let cy=(0,M.useCallback)(h=>{if(du.current){du.current=!1;return}let _=le==="scene"&&ke==="Annotations";if(h.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let V=mr.current,G=Xe.current,pe=G?.camera,De=On.current;if(!V||!G||!pe||!De||!_&&!G.enabled)return;let Ye=V.getBoundingClientRect(),Ge=(h.clientX-Ye.left)/Ye.width*2-1,xe=-((h.clientY-Ye.top)/Ye.height)*2+1,$e=new ut.Raycaster;$e.setFromCamera(new ut.Vector2(Ge,xe),pe);let Ke=$e.intersectObject(De,!0);if(Ke.length===0)return;if(!_){let{x:li,y:bu,z:vu}=Ke[0].point;G.setOrbitPoint(li,bu,vu);return}let cn=Ke[0],hn=cn.point,oo=De.worldToLocal(cn.point.clone()),ps=[0,0,1];if(cn.face){let li=cn.face.normal.clone().transformDirection(cn.object.matrixWorld).normalize();ps=[li.x,li.y,li.z]}Bl({worldPosition:[hn.x,hn.y,hn.z],localPosition:[oo.x,oo.y,oo.z],worldNormal:ps,anchor:SS(cn),screenX:h.clientX-Ye.left,screenY:h.clientY-Ye.top}),Ol({title:"",description:""})},[le,ke]),mm=(0,M.useCallback)(()=>{if(!Jn||!Fi.title.trim())return;zl.current+=1;let _={id:zl.current,worldPosition:Jn.worldPosition,localPosition:Jn.localPosition,worldNormal:Jn.worldNormal,anchorNodeName:Jn.anchor?.anchorNodeName,anchorLocalPosition:Jn.anchor?.anchorLocalPosition,title:Fi.title.trim(),description:Fi.description},z=[...ri,_];jh(z),k?.(z),Bl(null)},[Jn,Fi,ri,k]),fu=(0,M.useCallback)(()=>Bl(null),[]),dy=(0,M.useCallback)(h=>{ii(h)},[ii]);if(Nt.status==="checking")return(0,L.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,L.jsx)(va,{title:"Verifying License",message:"Checking your license key..."})});if(Nt.status==="invalid")return(0,L.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,L.jsx)(va,{tone:"error",title:"Invalid License",message:Nt.isLocalDomain?Nt.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let Vi=eo?si(eo.objectId):null,gu=Vi?qe[Vi]?.style?.material?.texture?.path:void 0,fm=gu?nc(gu)??gu:void 0,gm=ro?Fr?.offset??(Vi?qe[Vi]?.style?.material?.texture?.offset:void 0):void 0,bm=ro?Fr?.rotationDegrees??(Vi?((qe[Vi]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,vm=ro?Fr?.isPositioning??!!(Vi&&Te?.objectKey===Vi&&Te?.textureKey==="texture"):!1,xm=ro?Kx:void 0,ym=ro?Zx:void 0,wm=ro?Jx:void 0,uy=mr.current?.offsetWidth??600,py=mr.current?.offsetHeight??400,hy=350,my=290,fy=Jn?Math.min(Jn.screenX+12,uy-hy-8):0,gy=Jn?Math.min(Jn.screenY,py-my-8):0,by=ft&&!!e&&!El&&!_i,ds=Qe&&(fa&&(eu||zh)||Uh||!!Il),us=h=>16+h*42;return(0,L.jsxs)("div",{className:"ri-viewer",style:{background:vl},children:[(0,L.jsxs)("div",{className:"ri-viewerLeft",ref:_l,children:[ve?ve({isOpen:Jh,selectedObject:ss,currentAction:Ml,onClose:em,onAction:Gl}):(0,L.jsx)(Kp,{isOpen:Jh,selectedObject:ss,currentAction:Ml,onClose:em,onAction:Gl,renderActionExtra:h=>{if(h==="change-color"&&sr)return(0,L.jsx)(Yp,{inline:!0,colorPicker:sr,onClose:br,itemMaterials:Vn,setItemMaterials:zi});if((h==="change-light-color"||h==="set-brightness")&&pn?.kind===h&&pn.objectId===ou){let _=pn,z=_.target,V=z.type==="lights"?ae.lighting.lights.find(G=>G.id===z.lightIds[0])?.color??"#ffffff":su(no(z.objectKey).color);return(0,L.jsx)(lf,{kind:_.kind,color:V,brightness:_.percent,onColorChange:G=>{if(z.type==="lights"){an(Object.fromEntries(z.lightIds.map(De=>[De,{color:G}])));return}let pe=no(z.objectKey);ls(z.objectKey,{emissive:G,emissiveIntensity:pe.intensity>0?pe.intensity:Hl.current[z.objectKey]??1})},onBrightnessChange:G=>{if(Dn({..._,percent:G}),z.type==="lights"){an(Object.fromEntries(z.lightIds.map(pe=>[pe,{intensity:(z.baseIntensity[pe]??0)*(G/100)}])));return}ls(z.objectKey,{emissive:su(no(z.objectKey).color),emissiveIntensity:z.baseIntensity*(G/100)})},onClose:()=>Dn(null)})}return h==="change-material"&&eo?(0,L.jsx)($p,{inline:!0,triggerFileUpload:nm,materialPopup:eo,textureUrl:fm,clearTexture:rm,offset:gm,rotationDegrees:bm,onOffsetChange:xm,onRotationChange:ym,isPositioning:vm,onEndPositioning:wm}):null}}),(0,L.jsxs)("div",{className:`ri-canvasArea ${as?"ri-canvasArea--measuring":""} ${Zo?"":"ri-canvasArea--positioning"} ${vn?"ri-canvasArea--moveMode":""}`,ref:Qr,tabIndex:Qt?0:void 0,onDoubleClick:cy,onPointerDown:h=>{if(Qt&&mr.current?.focus({preventScroll:!0}),Te){ly(h);return}Ux(h)},onClick:Te?void 0:Fx,children:[Oi&&!t&&(Te||Xx)&&(0,L.jsx)("div",{className:"ri-moveZoomHint",role:"status",style:{position:"absolute",top:12,left:"50%",transform:"translateX(-50%)",zIndex:5,padding:"6px 12px",borderRadius:999,fontSize:12,fontWeight:500,color:"#fff",background:Te?"rgba(37, 99, 235, 0.92)":"rgba(0, 0, 0, 0.6)",pointerEvents:"none",whiteSpace:"nowrap"},children:Te?"Drag to move \xB7 Scroll to zoom \xB7 Click elsewhere to finish":"Double-click to move or zoom"}),Rl&&!kl&&(0,L.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,L.jsx)(_e.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,L.jsx)("span",{children:Ll===1?"1 object binding doesn't match this model":`${Ll} object bindings don't match this model`}),(0,L.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:h=>{h.stopPropagation(),Ya(!0)},"aria-label":"Dismiss",children:(0,L.jsx)(_e.X,{size:12})})]}),Dl!==null&&!T&&(0,L.jsxs)("div",{className:`ri-largeModelBanner ${Rl&&!kl?"ri-largeModelBanner--offset":""}`,children:[(0,L.jsx)(_e.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,L.jsxs)("span",{children:["Very large model (",Math.round(Dl/1e6),"M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the objects panel to select parts."]}),(0,L.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:h=>{h.stopPropagation(),I(!0)},"aria-label":"Dismiss",children:(0,L.jsx)(_e.X,{size:12})})]}),Gn.model.renderer==="uv-checker"&&Z.missing>0&&(0,L.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,L.jsx)(_e.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,L.jsxs)("span",{children:[Z.missing===Z.total?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${Z.missing} of ${Z.total} meshes have no UV0 coordinates.`," ","Missing UVs are shown in magenta."]})]}),(0,L.jsx)("input",{ref:yl,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:$x}),(0,L.jsxs)(Vu,{camera:H,backgroundColor:se,shadows:Q&&ae.shadows.enabled,sceneConfig:Gn,selectedObjectRef:au,hoveredObjectRef:qx,highlightOnHover:st,renderMode:Kn,maxDpr:ze,reduceGpuLoad:xl,xrStore:fa,rendererCaptureRef:or,preserveDrawingBuffer:ye,children:[(0,L.jsx)(Wu,{lightingConfig:ae.lighting,shadowConfig:ae.shadows,shadowsEnabled:Q,environmentRotation:ae.environment.rotation,environmentConfig:ae.environment,modelBounds:Ix,objectBindings:qe,nodeRefs:ct}),vt&&ae.lighting.lights.map(h=>!h.visible||h.type==="none"||h.type==="hemisphere"||h.attachment?null:(0,L.jsx)(Vv,{light:h,position:h.position,rotation:h.rotation,color:h.color,intensity:h.intensity,visible:h.visible,onPositionChange:_=>pm(h.id,_,h.rotation),onRotationChange:_=>pm(h.id,h.position,_),onDraggingChange:Va},h.id)),(0,L.jsx)(Hu,{controlsRef:Xe,onCameraChange:ry,cameraLimits:B,controllerType:Bn,onPointerLockExit:()=>Jr("orbit")}),(0,L.jsx)(AS,{enabled:Bn==="pointerLock"?!1:la??ae.model.autoRotate??!1,speed:xn??ae.model.autoRotateSpeed??1,controlsRef:Xe}),Ir&&(0,L.jsx)(Cd.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{Xe.current?.update(0),or.current?.invalidate()},children:(0,L.jsx)(Cd.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),vn&&au&&lr&&(0,L.jsx)(sh,{node:au,space:Tn,onTransformChange:Yx,onDraggingChange:h=>{Va(h),os&&E?.(os,h)}},lr),(0,L.jsx)($l,{onLoadError:um,children:(0,L.jsx)(M.Suspense,{fallback:null,children:(()=>{let h=(0,L.jsxs)(L.Fragment,{children:[t?(0,L.jsx)(Bp,{url:t,rotation:Gn.model.rotation,errorTarget:n,cacheSize:i,decoderConfig:Ho,objectBindings:qe,itemMaterials:Vn,sceneConfig:Gn,selectedItem:lr,panelHoveredItem:u??da,highlightOnHover:st,onItemClick:im,onItemHover:Zh,onItemDoubleClick:om,onItemContextMenu:sm,onObjectCatalog:Qx,onTilesetBounds:ey,onModelLoaded:dm,onLoadError:um,nodeRefsOut:ct,onNodeRefsChange:zr,materialRefsOut:Ha,explodeFactor:Nl,suspendBindingTransforms:ar}):(0,L.jsx)(Qu,{url:e,modelFormat:a,objectBindings:qe,selectedItem:lr,itemMaterials:Vn,onItemClick:im,onItemDoubleClick:om,onItemContextMenu:sm,onItemHover:Zh,onModelLoaded:dm,onAnimationsReady:$,nodeRefsOut:ct,onNodeRefsChange:zr,materialRefsOut:Ha,panelHoveredItem:u??da,sceneConfig:Gn,zoomOnSelected:Rt,highlightOnHover:st,decoderConfig:Ho,onLoadProgress:ty,explodeFactor:Nl,suspendBindingTransforms:ar}),(0,L.jsx)(zp,{annotations:ri,sceneConfig:ae,activeAnnotation:rs,popupRef:Ga,canvasRootRef:mr,worldPositionsRef:ca,modelLoaded:_i,onAnnotationClick:dy,onCloseAnnotation:ts,hideCloseButton:ti,showAnnotationOnHover:rn}),(0,L.jsx)(CS,{annotation:Fl,enabled:ti,controlsRef:Xe,offsetRef:ja}),es&&(0,L.jsx)(Fp,{controlsRef:Xe,sceneRef:On,config:es,playing:ma,resetOnPlay:wx,onFinished:()=>{ni(!1),Ka(!1)},onUserInteract:()=>{ni(!1)}}),ee&&(0,L.jsx)(Up,{points:Wh,unit:Tt,box:Xh,showDimensions:nu})]});return fa?(0,L.jsx)(sv,{ref:_x,box:Xh,scaleMode:fe,onARStateChange:Tx,children:h}):h})()})},t??e),Br&&(0,L.jsx)(M.Suspense,{fallback:null,children:Br})]}),kn&&(0,L.jsx)("div",{className:"ri-overlay",children:kn}),ft&&e&&El&&(()=>{let h=Zm($d,t||e,t?void 0:a);return(0,L.jsx)("div",{className:"ri-loadError",role:"alert",children:(0,L.jsxs)("div",{className:"ri-loadError__card",children:[(0,L.jsxs)("div",{className:"ri-loadError__header",children:[(0,L.jsx)(_e.AlertTriangle,{size:16,"aria-hidden":"true"}),(0,L.jsx)("span",{className:"ri-loadError__title",children:h.title})]}),(0,L.jsx)("p",{className:"ri-loadError__detail",children:h.detail}),(0,L.jsx)("p",{className:"ri-loadError__source",children:t||e}),h.technical&&(0,L.jsx)("p",{className:"ri-loadError__technical",children:h.technical})]})})})(),(0,L.jsx)(gd,{visible:by,message:Pe,progress:Pt??void 0}),ds&&(0,L.jsxs)("div",{className:"ri-xrTools",style:{top:`${us(0)}px`},children:[!eu&&Uh&&(0,L.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:Cx,title:"View this model in AR with Apple Quick Look",children:[(0,L.jsx)(_e.Box,{size:16}),"View in AR"]}),Il&&(0,L.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:Mx,title:"Open this experience on a phone for AR","aria-haspopup":"dialog","aria-expanded":Fh,children:[(0,L.jsx)(_e.QrCode,{size:16}),(0,L.jsx)("span",{children:"Open on phone"})]}),fa&&eu&&(0,L.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>fa.enterAR().catch(h=>{console.error("Failed to enter AR session:",h)}),title:"View this model in your space",children:[(0,L.jsx)(_e.Smartphone,{size:16}),(0,L.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,L.jsx)("span",{children:"AR"})]}),fa&&zh&&(0,L.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>fa.enterVR().catch(h=>{console.error("Failed to enter VR session:",h)}),title:"View this model in VR",children:[(0,L.jsx)(_e.RectangleGoggles,{size:16}),(0,L.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,L.jsx)("span",{children:"VR"})]})]}),Sx,Fh&&Il&&(0,L.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:h=>{h.target===h.currentTarget&&Vh()},children:(0,L.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,L.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:Vh,"aria-label":"Close phone handoff",children:(0,L.jsx)(_e.X,{size:18})}),(0,L.jsx)(_e.Smartphone,{size:22,"aria-hidden":"true"}),(0,L.jsx)("h2",{id:"ri-mobileHandoffTitle",children:"View in AR"}),(0,L.jsx)("p",{children:"Scan the code and choose AR."}),(0,L.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,L.jsx)(qv.QRCodeSVG,{value:Il,size:208,level:"M",marginSize:4,title:"QR code to open this model on a phone"})})]})}),ge&&(0,L.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${us(ds?1:0)}px`},children:(0,L.jsx)("button",{type:"button",className:`ri-measureButton ${rr?"ri-measureButton--active":""}`,onClick:()=>In(h=>!(h??on)),title:rr?"Disable UV checker":"Enable UV checker","aria-label":rr?"Disable UV checker":"Enable UV checker","aria-pressed":rr,children:(0,L.jsx)(_e.Grid3X3,{size:16})})}),ee&&(0,L.jsxs)("div",{className:"ri-measureTools",style:{top:`${us((ds?1:0)+(ge?1:0))}px`},children:[(0,L.jsx)("button",{type:"button",className:`ri-measureButton ${as?"ri-measureButton--active":""}`,onClick:Ox,title:as?"Stop measuring":"Measure distance","aria-pressed":as,children:(0,L.jsx)(_e.PencilRuler,{size:16})}),(0,L.jsx)("button",{type:"button",className:`ri-measureButton ${nu?"ri-measureButton--active":""}`,onClick:zx,title:"Toggle bounding dimensions","aria-pressed":nu,children:(0,L.jsx)(_e.RulerDimensionLine,{size:16})}),Wh.length>0&&(0,L.jsx)("button",{type:"button",className:"ri-measureButton",onClick:Bx,title:"Clear measurements",children:(0,L.jsx)(_e.Eraser,{size:16})}),as&&(0,L.jsx)("span",{className:"ri-measureHint",children:"Click points on the model to measure"})]}),we&&(0,L.jsxs)("div",{className:"ri-explodeTools",style:{top:`${us((ds?1:0)+(ge?1:0)+(ee?1:0))}px`},children:[(0,L.jsx)("button",{type:"button",className:`ri-measureButton ${Jd||Nl>0?"ri-measureButton--active":""}`,onClick:()=>Oh(h=>!h),title:"Exploded view","aria-pressed":Jd,children:(0,L.jsx)(_e.Expand,{size:16})}),Jd&&(0,L.jsx)("div",{className:"ri-explodeSlider",onPointerDown:h=>h.stopPropagation(),children:(0,L.jsx)("input",{type:"range",min:0,max:100,value:Math.round(Nl*100),onChange:h=>Bh(Number(h.target.value)/100),"aria-label":"Explode amount"})})]}),es&&(0,L.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${us((ds?1:0)+(ge?1:0)+(ee?1:0)+(we?1:0))}px`},children:[(0,L.jsx)("button",{type:"button",className:`ri-measureButton ${ma?"ri-measureButton--active":""}`,onClick:()=>{ma?ni(!1):(Ka(!1),ni(!0))},title:ma?"Pause cinematic":"Play cinematic","aria-pressed":ma,children:ma?(0,L.jsx)(_e.Pause,{size:16}):(0,L.jsx)(_e.Play,{size:16})}),ma&&(0,L.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:ny,title:"Stop cinematic and reset camera",children:(0,L.jsx)(_e.Square,{size:16})})]}),(Dt||Yt||tt&&ln.length>0)&&(0,L.jsxs)("div",{className:"ri-buttonContainer",children:[(0,L.jsx)("div",{className:"ri-tourControls",children:tt&&ln.length>0&&(0,L.jsx)(L.Fragment,{children:ti?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)("button",{className:"ri-tourButton",onClick:Ex,disabled:Gh||ln.length===0||gr<=0,title:"Previous annotation",children:[(0,L.jsx)(_e.ChevronLeft,{size:16}),(0,L.jsx)("span",{children:"Prev"})]}),(0,L.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:Lx,title:"Stop guided tour",children:(0,L.jsx)(_e.Square,{size:16})}),(0,L.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:Rx,disabled:Gh||ln.length===0,title:"Next annotation",children:[(0,L.jsx)("span",{children:"Next"}),(0,L.jsx)(_e.ChevronRight,{size:16})]})]}):(0,L.jsx)("button",{className:"ri-navButtonSingle",onClick:Ax,disabled:ln.length===0,title:"Start guided tour",children:"Guided Tour"})})}),(0,L.jsxs)("div",{className:"mv-rightControls",children:[Dt&&(0,L.jsx)("button",{className:"mv-resetButton",onClick:uu,title:"Reset camera view",children:(0,L.jsx)(_e.RotateCcw,{})}),(0,L.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:h=>h.stopPropagation(),children:[xi&&(0,L.jsxs)("div",{className:"mv-controllersMenu",children:[(0,L.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${Bn==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>Jr("orbit"),children:"Orbit Control"}),(0,L.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${Bn==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>Jr("pointerLock"),children:"Point Lock"})]}),(0,L.jsx)("button",{className:"mv-controllersButton",onClick:()=>sn(h=>!h),title:"Camera controller","aria-label":"Camera controller settings",children:(0,L.jsx)(_e.Orbit,{size:15})})]}),Yt&&(0,L.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:h=>h.stopPropagation(),children:[Vx&&(0,L.jsxs)("div",{className:"mv-downloadMenu",children:[(0,L.jsxs)("button",{className:"mv-downloadMenuItem",onClick:Hx,disabled:ru||!On.current,children:[(0,L.jsx)(_e.Box,{size:14}),"Download GLB"]}),(0,L.jsx)("div",{className:"mv-downloadMenuDivider"}),ye&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)("button",{className:"mv-downloadMenuItem",onClick:Gx,disabled:!On.current,children:[(0,L.jsx)(_e.Camera,{size:14}),"Download PNG"]}),(0,L.jsx)("div",{className:"mv-downloadMenuDivider"})]}),(0,L.jsxs)("button",{className:"mv-downloadMenuItem",onClick:Wx,disabled:!On.current,children:[(0,L.jsx)(_e.FileImage,{size:14}),"Download UV Layout"]}),Yh&&(0,L.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:Yh})]}),(0,L.jsx)("button",{className:"mv-downloadButton",onClick:jx,disabled:ru||!On.current,title:"Download options",children:ru?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("span",{className:"mv-downloadButton__spinner"}),"Exporting\u2026"]}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(_e.Download,{size:15}),"Download"]})})]})]})]}),Jn&&(0,L.jsxs)("div",{className:"ri-annotationPopup",style:{left:fy,top:gy},onPointerDown:h=>h.stopPropagation(),onClick:h=>h.stopPropagation(),children:[(0,L.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:"Title *",value:Fi.title,onChange:h=>Ol(_=>({..._,title:h.target.value})),onKeyDown:h=>{h.key==="Enter"&&mm(),h.key==="Escape"&&fu()}}),(0,L.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:"Description",value:Fi.description,onChange:h=>Ol(_=>({..._,description:h.target.value})),onKeyDown:h=>{h.key==="Escape"&&fu()},rows:5}),(0,L.jsxs)("div",{className:"ri-annotationActions",children:[(0,L.jsx)("button",{onClick:mm,className:`ri-annotationOkBtn ${Fi.title.trim()?"":"disabled"}`,disabled:!Fi.title.trim(),children:"OK"}),(0,L.jsx)("button",{onClick:fu,className:"ri-annotationCancelBtn",children:"Cancel"}),(0,L.jsx)("div",{className:"ri-annotationIcons"})]})]})]}),ve&&sr&&(0,L.jsx)(Yp,{colorPicker:sr,onClose:br,itemMaterials:Vn,setItemMaterials:zi}),ve&&eo&&(0,L.jsx)($p,{triggerFileUpload:nm,materialPopup:eo,textureUrl:fm,clearTexture:rm,offset:gm,rotationDegrees:bm,onOffsetChange:xm,onRotationChange:ym,isPositioning:vm,onEndPositioning:wm})]}),Mt&&(0,L.jsx)("div",{className:"ri-viewerRight",children:et?et({objectBindings:qe,onAction:Gl,onFocus:lm,onHover:Wa}):(0,L.jsx)(Zp,{objectBindings:qe,onAction:Gl,onFocus:lm,onHover:Wa})}),tn&&(0,L.jsx)(bv,{controlsRef:Xe,enabled:!0,opacity:Cn,moveSensitivity:jt,position:$t})]})}var fn=require("react");function Yv(){let e=(0,fn.useRef)(null),[t,n]=(0,fn.useState)([]),i=(0,fn.useRef)(null),[r,a]=(0,fn.useState)([]),[o,s]=(0,fn.useState)(null),[c,l]=(0,fn.useState)(!1),[u,d]=(0,fn.useState)(1),[p,g]=(0,fn.useState)(0),[f,v]=(0,fn.useState)(0);(0,fn.useEffect)(()=>()=>{i.current?.()},[]);let E=(0,fn.useCallback)(P=>{i.current?.(),e.current=P,n(P.clips),a(P.clipDetails??P.clips.map(m=>({sourceName:m,duration:0})));let y=P.getState?.()??{currentClip:null,isPlaying:!1,speed:1,time:0,duration:0};s(y.currentClip),l(y.isPlaying),d(y.speed),g(y.time),v(y.duration),P.subscribe?i.current=P.subscribe(m=>{s(m.currentClip),l(m.isPlaying),d(m.speed),g(m.time),v(m.duration)}):i.current=null},[]),S=(0,fn.useCallback)(P=>{e.current?.play(P),s(P),l(!0)},[]),b=(0,fn.useCallback)(()=>{e.current?.pause(),l(!1)},[]),x=(0,fn.useCallback)(()=>{e.current?.stop(),s(null),l(!1),g(0)},[]),R=(0,fn.useCallback)(P=>{e.current?.setSpeed(P),d(P)},[]),w=(0,fn.useCallback)(P=>{e.current?.seek?.(P),g(P)},[]);return{clips:t,clipDetails:r,currentClip:o,isPlaying:c,speed:u,time:p,duration:f,play:S,pause:b,stop:x,setSpeed:R,seek:w,handleAnimationsReady:E}}var kS="react-immersive:binding-builder";var No="session",Da="model",Io="textures",dl="current";var ka=null;function Pd(){return ka||(ka=new Promise((e,t)=>{if(typeof indexedDB>"u"){t(new Error("IndexedDB is not available in this environment."));return}let n=indexedDB.open(kS,2);n.onupgradeneeded=()=>{let i=n.result;i.objectStoreNames.contains(No)||i.createObjectStore(No),i.objectStoreNames.contains(Da)||i.createObjectStore(Da),i.objectStoreNames.contains(Io)||i.createObjectStore(Io)},n.onsuccess=()=>{let i=n.result;i.onversionchange=()=>{i.close(),ka=null},e(i)},n.onerror=()=>t(n.error??new Error("Failed to open IndexedDB."))}),ka.catch(()=>{ka=null}),ka)}function Ad(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error??new Error("IndexedDB transaction failed.")),e.onabort=()=>n(e.error??new Error("IndexedDB transaction aborted."))})}function ch(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error??new Error("IndexedDB request failed."))})}function Td(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function DS(e){if(!Td(e)||e.version!==1)return!1;let t=e.model;return typeof e.savedAt=="number"&&Td(e.bindings)&&Td(e.sceneConfig)&&Td(t)&&typeof t.name=="string"&&(t.kind==="file"&&typeof t.key=="string"||t.kind==="url"&&typeof t.url=="string")}async function $v(e,t){let n=await Pd(),i={...e,version:1,savedAt:Date.now()},r=n.transaction([No,Da],"readwrite"),a=Ad(r);if(r.objectStore(No).put(i,dl),i.model.kind==="file"&&t){let o={key:i.model.key,blob:t,name:t.name,type:t.type,lastModified:t.lastModified};r.objectStore(Da).put(o,dl)}else i.model.kind==="url"&&r.objectStore(Da).delete(dl);return await a,i}async function Kv(){let t=(await Pd()).transaction([No,Da],"readonly"),n=Ad(t),[i,r]=await Promise.all([ch(t.objectStore(No).get(dl)),ch(t.objectStore(Da).get(dl))]);return await n,DS(i)?i.model.kind==="url"?{session:i,file:null}:!r||r.key!==i.model.key?null:{session:i,file:new File([r.blob],r.name,{type:r.type,lastModified:r.lastModified})}:null}async function Zv(e,t){let i=(await Pd()).transaction(Io,"readwrite"),r=Ad(i),a={blob:t,name:t.name,type:t.type,savedAt:Date.now()};i.objectStore(Io).put(a,e),await r}async function Ed(e){let n=(await Pd()).transaction(Io,"readonly"),i=Ad(n),r=await ch(n.objectStore(Io).get(e));return await i,r?new File([r.blob],r.name,{type:r.type,lastModified:r.savedAt}):null}var Id=require("react");var s0=require("react"),ia=require("lucide-react"),kd=require("react-colorful");var Kr=require("react"),e0=require("react-dom"),Rd=require("lucide-react"),Ld=require("react-colorful");function Bo(e){let t=e.replace("#","").match(/.{2}/g).map(i=>parseInt(i,16)/255).map(i=>i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4));return .2126*t[0]+.7152*t[1]+.0722*t[2]>.179?"#000":"#fff"}var Jv=require("react");function Qv(e,t,n){(0,Jv.useEffect)(()=>{if(!n)return;let i=Array.isArray(e)?e:[e],r=a=>{let o=a.target;i.some(c=>c.current?.contains(o))||t()};return document.addEventListener("pointerdown",r,!0),()=>{document.removeEventListener("pointerdown",r,!0)}},[e,t,n])}var Se=require("react/jsx-runtime");function dh({anchorRef:e,onClose:t,children:n}){let i=(0,Kr.useRef)(null),[r,a]=(0,Kr.useState)(null);return Qv([i,e],t,!0),(0,Kr.useLayoutEffect)(()=>{let o=e.current;if(!o)return;let s=o.getBoundingClientRect(),c=222,l=8,u=Math.min(Math.max(s.right-c,l),window.innerWidth-c-l),d=Math.min(s.bottom+6,window.innerHeight-200);a({top:d,left:u})},[e]),r?(0,e0.createPortal)((0,Se.jsx)("div",{ref:i,className:"se-colorPickerPopover",style:{position:"fixed",top:r.top,left:r.left},children:n}),document.body):null}function NS(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,t=>t.toUpperCase())}function Na({title:e,children:t}){return(0,Se.jsxs)("section",{className:"se-section",children:[(0,Se.jsx)("h3",{className:"se-sectionTitle",children:e}),(0,Se.jsx)("div",{className:"se-sectionBody",children:t})]})}function ot({title:e,open:t,onToggle:n,trailing:i,children:r,disabled:a,tooltip:o}){let s=o?`${o}`:e;return(0,Se.jsxs)("section",{className:"se-panel",children:[(0,Se.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,title:s,children:[(0,Se.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Se.jsx)(Rd.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,Se.jsx)("span",{className:"se-panelTitle",children:e}),o?(0,Se.jsx)("span",{className:"se-panelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Se.jsx)(Rd.Info,{size:13})}):null]}),i?(0,Se.jsx)("span",{className:"se-panelTrailing",onClick:c=>c.stopPropagation(),children:i}):null]}),t?(0,Se.jsx)("div",{className:"se-panelBody",style:a?{opacity:.45,pointerEvents:"none"}:void 0,children:r}):null]})}function pt({checked:e,onChange:t,label:n}){return(0,Se.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Se.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Se.jsx)("span",{className:"se-switchTrack",children:(0,Se.jsx)("span",{className:"se-switchThumb"})})]})}function Y({label:e,value:t,min:n,max:i,step:r,formatValue:a,onChange:o,disabled:s=!1}){return(0,Se.jsxs)("label",{className:`se-field ${s?"se-field--disabled":""}`,children:[(0,Se.jsxs)("span",{className:"se-fieldLabel",children:[e,(0,Se.jsx)("span",{className:"se-fieldValue",children:a?a(t):t})]}),(0,Se.jsx)("input",{className:"se-slider",type:"range",min:n,max:i,step:r,value:t,onChange:c=>o(Number(c.target.value)),disabled:s})]})}function mt({label:e,checked:t,onChange:n}){return(0,Se.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Se.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Se.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:i=>n(i.target.checked)})]})}function pr({label:e,value:t,options:n,onChange:i}){return(0,Se.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Se.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Se.jsx)("select",{className:"se-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,Se.jsx)("option",{value:r,children:NS(r)},r))})]})}function Rr({label:e,value:t,onChange:n}){let[i,r]=(0,Kr.useState)(!1),a=(0,Kr.useRef)(null);return(0,Se.jsxs)("div",{className:"se-field",children:[(0,Se.jsxs)("div",{className:"se-fieldInline",children:[(0,Se.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Se.jsx)("span",{ref:a,style:{display:"inline-flex"},children:(0,Se.jsx)(Ld.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>r(o=>!o),style:{background:t,color:Bo(t)},color:t,onChange:n})})]}),i?(0,Se.jsx)(dh,{anchorRef:a,onClose:()=>r(!1),children:(0,Se.jsx)(Ld.HexColorPicker,{color:t,onChange:n})}):null]})}function t0({value:e,min:t,max:n,step:i,onChange:r}){let[a,o]=(0,Kr.useState)(String(e)),s=(0,Kr.useRef)(!1);return(0,Kr.useLayoutEffect)(()=>{s.current||o(String(e))},[e]),(0,Se.jsx)("input",{type:"number",className:"se-numberInput",min:t,max:n,step:i,value:a,onFocus:()=>{s.current=!0},onChange:c=>{let l=c.target.value;o(l),l!==""&&l!=="-"&&!Number.isNaN(Number(l))&&r(Number(l))},onBlur:()=>{s.current=!1,o(String(e))}})}function ra({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Se.jsxs)("div",{className:"se-field",children:[(0,Se.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Se.jsx)("div",{className:"se-vectorRow",children:["X","Y","Z"].map((s,c)=>(0,Se.jsxs)("label",{className:"se-vectorAxis",children:[(0,Se.jsx)("span",{children:s}),(0,Se.jsx)(t0,{value:t[c],min:n,max:i,step:r,onChange:l=>{let u=[...t];u[c]=l,a(u)}})]},s))})]})}function Ia({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Se.jsxs)("div",{className:"se-field",children:[(0,Se.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Se.jsx)("div",{className:"se-vectorRow",children:["X","Y"].map((s,c)=>(0,Se.jsxs)("label",{className:"se-vectorAxis",children:[(0,Se.jsx)("span",{children:s}),(0,Se.jsx)(t0,{value:t[c],min:n,max:i,step:r,onChange:l=>{let u=[...t];u[c]=l,a(u)}})]},s))})]})}var n0={free:0,starter:1,growth:2};function r0(e){return e==="starter"||e==="growth"||e==="scale"?e==="scale"?"growth":e:"free"}function Bi(e,t){return n0[e]>=n0[t]}var i0={free:"Free",starter:"Starter",growth:"Growth"};var a0=require("lucide-react");var ul=require("react/jsx-runtime");function tr({requiredTier:e,feature:t}){return(0,ul.jsxs)("div",{className:"bb-tierLock",children:[(0,ul.jsx)(a0.Lock,{size:16}),(0,ul.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",i0[e]," plan or higher."]})]})}var ne=require("react/jsx-runtime"),IS=["lit","unlit","normals"],BS=["color","image","environment"];function o0(e){let t=e%360;return t<0?t+360:t}function pl({title:e,open:t,onToggle:n,children:i,trailing:r}){return(0,ne.jsxs)("section",{className:"se-panel",children:[(0,ne.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:[(0,ne.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ne.jsx)(ia.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,ne.jsx)("span",{className:"se-panelTitle",children:e})]}),r?(0,ne.jsx)("span",{className:"se-panelTrailing",onClick:a=>a.stopPropagation(),children:r}):null]}),t?(0,ne.jsx)("div",{className:"se-panelBody",children:i}):null]})}function uh({config:e,onChange:t}){let{model:n,camera:i,wireframe:r,background:a,environment:o}=e,{tier:s}=Er(),c=Bi(s,"starter"),[l,u]=(0,s0.useState)({general:!0,camera:!0,autoRotate:!1,wireframe:!1,background:!1}),d=b=>u(x=>({...x,[b]:!x[b]})),p=b=>t({...e,model:b}),g=b=>t({...e,camera:b}),f=b=>t({...e,wireframe:b}),v=b=>t({...e,background:b}),E=b=>t({...e,environment:b}),S=b=>{E({...o,source:"preset",preset:b})};return(0,ne.jsxs)("div",{className:"se-generalContent",children:[(0,ne.jsxs)(pl,{title:"General",open:l.general,onToggle:()=>d("general"),children:[(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsxs)("div",{className:"se-fieldLabel",children:[(0,ne.jsx)("span",{children:"Straighten model"}),(0,ne.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>p({...n,rotation:[0,0,0]}),"aria-label":"Reset model rotation",children:(0,ne.jsx)(ia.RotateCcw,{size:16})})]}),(0,ne.jsx)("div",{className:"se-axisStepperGrid",children:["X","Y","Z"].map((b,x)=>(0,ne.jsxs)("div",{className:"se-axisStepper",children:[(0,ne.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let R=[...n.rotation];R[x]=o0(R[x]-90),p({...n,rotation:R})},"aria-label":`Rotate ${b} axis backward`,children:(0,ne.jsx)(ia.ChevronLeft,{size:16})}),(0,ne.jsx)("span",{className:"se-axisStepperLabel",children:b}),(0,ne.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let R=[...n.rotation];R[x]=o0(R[x]+90),p({...n,rotation:R})},"aria-label":`Rotate ${b} axis forward`,children:(0,ne.jsx)(ia.ChevronRight,{size:16})})]},b))})]}),(0,ne.jsx)(ra,{label:"Rotation",value:n.rotation,min:0,max:360,step:1,onChange:b=>p({...n,rotation:b})}),(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Renderer"}),(0,ne.jsx)("div",{className:"se-segmentedControl se-segmentedControl--renderer",children:Af.map(b=>(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${n.renderer===b?"se-segmentedOption--active":""}`,onClick:()=>p({...n,renderer:b}),children:b==="uv-checker"?"UV CHECKER":b.toUpperCase()},b))})]}),(0,ne.jsx)(pr,{label:"Shading",value:n.shading,options:IS,onChange:b=>p({...n,shading:b})})]}),(0,ne.jsx)(pl,{title:"Camera",open:l.camera,onToggle:()=>d("camera"),children:(0,ne.jsx)(Y,{label:"Field Of View",value:i.fieldOfView,min:20,max:100,step:.1,formatValue:b=>`${b.toFixed(3)}\xB0`,onChange:b=>g({...i,fieldOfView:b})})}),(0,ne.jsx)(pl,{title:"Auto Rotate",open:l.autoRotate,onToggle:()=>d("autoRotate"),trailing:(0,ne.jsxs)("label",{className:"se-switch","aria-label":"Toggle auto rotate",children:[(0,ne.jsx)("input",{type:"checkbox",checked:n.autoRotate??!1,onChange:b=>p({...n,autoRotate:b.target.checked})}),(0,ne.jsx)("span",{className:"se-switchTrack",children:(0,ne.jsx)("span",{className:"se-switchThumb"})})]}),children:n.autoRotate?(0,ne.jsx)(Y,{label:"Rotation Speed",value:n.autoRotateSpeed??1,min:.1,max:3,step:.1,formatValue:b=>`${b.toFixed(1)}x`,onChange:b=>p({...n,autoRotateSpeed:b})}):(0,ne.jsx)("div",{className:"se-placeholder",children:"Enable auto rotate to adjust its speed."})}),(0,ne.jsx)(pl,{title:"Wireframe",open:l.wireframe,onToggle:()=>d("wireframe"),trailing:(0,ne.jsxs)("label",{className:"se-switch","aria-label":"Toggle wireframe preview",children:[(0,ne.jsx)("input",{type:"checkbox",checked:c&&r.enabled,disabled:!c,onChange:b=>f({...r,enabled:b.target.checked})}),(0,ne.jsx)("span",{className:"se-switchTrack",children:(0,ne.jsx)("span",{className:"se-switchThumb"})})]}),children:c?(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsx)(Y,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:b=>f({...r,opacity:b})}),(0,ne.jsx)(Rr,{label:"Wire color",value:r.color,onChange:b=>f({...r,color:b})})]}):(0,ne.jsx)(tr,{requiredTier:"starter",feature:"Wireframe preview"})}),(0,ne.jsx)(pl,{title:"Background",open:l.background,onToggle:()=>d("background"),trailing:(0,ne.jsxs)("label",{className:"se-switch","aria-label":"Toggle scene background",children:[(0,ne.jsx)("input",{type:"checkbox",checked:a.enabled,onChange:b=>v({...a,enabled:b.target.checked})}),(0,ne.jsx)("span",{className:"se-switchTrack",children:(0,ne.jsx)("span",{className:"se-switchThumb"})})]}),children:a.enabled?(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Background type"}),(0,ne.jsx)("div",{className:"se-segmentedControl",children:BS.map(b=>(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${a.type===b?"se-segmentedOption--active":""}`,onClick:()=>v({...a,type:b}),children:b},b))})]}),a.type==="environment"?c?(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Environment source"}),(0,ne.jsxs)("div",{className:"se-segmentedControl",children:[(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="preset"?"se-segmentedOption--active":""}`,onClick:()=>E({...o,source:"preset"}),children:"PRESET"}),(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="custom"?"se-segmentedOption--active":""}`,onClick:()=>E({...o,source:"custom"}),children:"CUSTOM"})]})]}),o.source==="preset"?(0,ne.jsx)(pr,{label:"Environment preset",value:o.preset,options:Ef,onChange:S}):(0,ne.jsxs)("label",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Custom environment URL"}),(0,ne.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/environment.hdr",value:o.customEnvironmentUrl,onChange:b=>E({...o,customEnvironmentUrl:b.target.value})}),(0,ne.jsx)("span",{className:"bb-note",children:"Enter a HDR, EXR, JPG, JPEG, PNG, or WEBP URL."}),o.customEnvironmentUrl.trim()&&!ec(o.customEnvironmentUrl)?(0,ne.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"Invalid image/HDRI URL."}):null]}),(0,ne.jsx)(Y,{label:"Environment intensity",value:o.intensity,min:0,max:3,step:.05,onChange:b=>E({...o,intensity:b})})]}):(0,ne.jsx)(tr,{requiredTier:"starter",feature:"Environment backgrounds"}):null,a.type==="image"?(0,ne.jsxs)("label",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Background image URL"}),(0,ne.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/background.jpg",value:a.imageUrl,onChange:b=>v({...a,imageUrl:b.target.value})})]}):null,a.type==="color"?(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Background color"}),(0,ne.jsx)("div",{className:"se-inlineColorPicker",children:(0,ne.jsx)(kd.HexColorPicker,{color:a.color,onChange:b=>v({...a,color:b})})}),(0,ne.jsx)("div",{className:"se-fieldInline",children:(0,ne.jsx)(kd.HexColorInput,{prefixed:!0,className:"se-swatch",style:{background:a.color,color:Bo(a.color)},color:a.color,onChange:b=>v({...a,color:b})})})]}):null]}):(0,ne.jsx)("div",{className:"se-placeholder",children:"Background rendering is disabled for this scene preset."})})]})}var L0=require("react");var ce=require("react/jsx-runtime");function l0({pp:e,set:t,open:n,toggle:i}){let{ssao:r}=e;return(0,ce.jsxs)(ot,{title:"SSAO",tooltip:"Adds soft contact shadows in corners, creases, and tight spaces.",open:n.ssao,onToggle:()=>i("ssao"),disabled:!r.enabled,trailing:(0,ce.jsx)(pt,{checked:r.enabled,onChange:a=>t("ssao",{...r,enabled:a}),label:"Toggle SSAO"}),children:[(0,ce.jsx)(Y,{label:"Samples",value:r.samples,min:1,max:64,step:1,onChange:a=>t("ssao",{...r,samples:a})}),(0,ce.jsx)(Y,{label:"Rings",value:r.rings,min:1,max:12,step:1,onChange:a=>t("ssao",{...r,rings:a})}),(0,ce.jsx)(Y,{label:"Intensity",value:r.intensity,min:0,max:20,step:.5,onChange:a=>t("ssao",{...r,intensity:a})}),(0,ce.jsx)(Y,{label:"Radius",value:r.radius,min:.01,max:1,step:.01,onChange:a=>t("ssao",{...r,radius:a})}),(0,ce.jsx)(Y,{label:"Bias",value:r.bias,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,bias:a})}),(0,ce.jsx)(Y,{label:"Luminance Influence",value:r.luminanceInfluence,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,luminanceInfluence:a})}),(0,ce.jsx)(Y,{label:"Fade",value:r.fade,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,fade:a})}),(0,ce.jsx)(Y,{label:"Min Radius Scale",value:r.minRadiusScale,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,minRadiusScale:a})}),(0,ce.jsx)(Y,{label:"World Distance Threshold",value:r.worldDistanceThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldDistanceThreshold:a})}),(0,ce.jsx)(Y,{label:"World Distance Falloff",value:r.worldDistanceFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldDistanceFalloff:a})}),(0,ce.jsx)(Y,{label:"World Proximity Threshold",value:r.worldProximityThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldProximityThreshold:a})}),(0,ce.jsx)(Y,{label:"World Proximity Falloff",value:r.worldProximityFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldProximityFalloff:a})})]})}function c0({pp:e,set:t,open:n,toggle:i}){let{autofocus:r}=e;return(0,ce.jsxs)(ot,{title:"Auto focus",tooltip:"Keeps the focus plane tracking a subject so the image stays sharp where you want it.",open:n.autofocus,onToggle:()=>i("autofocus"),disabled:!r.enabled,trailing:(0,ce.jsx)(pt,{checked:r.enabled,onChange:a=>t("autofocus",{...r,enabled:a}),label:"Toggle Autofocus"}),children:[(0,ce.jsx)(Y,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusDistance:a})}),(0,ce.jsx)(Y,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusRange:a})}),(0,ce.jsx)(Y,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,focalLength:a})}),(0,ce.jsx)(Y,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("autofocus",{...r,bokehScale:a})}),(0,ce.jsx)(ra,{label:"Target",value:r.target,min:-100,max:100,step:.1,onChange:a=>t("autofocus",{...r,target:a})}),(0,ce.jsx)(mt,{label:"Mouse Follow",checked:r.mouse,onChange:a=>t("autofocus",{...r,mouse:a})}),(0,ce.jsx)(mt,{label:"Manual Update",checked:r.manual,onChange:a=>t("autofocus",{...r,manual:a})}),(0,ce.jsx)(Y,{label:"Debug",value:r.debug,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,debug:a})}),(0,ce.jsx)(Y,{label:"Smooth Time",value:r.smoothTime,min:0,max:2,step:.01,onChange:a=>t("autofocus",{...r,smoothTime:a})})]})}function d0({pp:e,set:t,open:n,toggle:i}){let{godRays:r}=e;return(0,ce.jsxs)(ot,{title:"God Rays",tooltip:"Creates light shafts that streak outward from a bright sun or light source.",open:n.godRays,onToggle:()=>i("godRays"),disabled:!r.enabled,trailing:(0,ce.jsx)(pt,{checked:r.enabled,onChange:a=>t("godRays",{...r,enabled:a}),label:"Toggle GodRays"}),children:[(0,ce.jsx)(ra,{label:"Sun Position",value:r.sunPosition,min:-100,max:100,step:.1,onChange:a=>t("godRays",{...r,sunPosition:a})}),(0,ce.jsx)(Y,{label:"Samples",value:r.samples,min:1,max:128,step:1,onChange:a=>t("godRays",{...r,samples:a})}),(0,ce.jsx)(Y,{label:"Density",value:r.density,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,density:a})}),(0,ce.jsx)(Y,{label:"Decay",value:r.decay,min:0,max:1,step:.01,onChange:a=>t("godRays",{...r,decay:a})}),(0,ce.jsx)(Y,{label:"Weight",value:r.weight,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,weight:a})}),(0,ce.jsx)(Y,{label:"Exposure",value:r.exposure,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,exposure:a})}),(0,ce.jsx)(Y,{label:"Clamp Max",value:r.clampMax,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,clampMax:a})}),(0,ce.jsx)(mt,{label:"Blur",checked:r.blur,onChange:a=>t("godRays",{...r,blur:a})}),(0,ce.jsx)(pr,{label:"Kernel Size",value:r.kernelSize,options:Ss,onChange:a=>t("godRays",{...r,kernelSize:a})})]})}function u0({pp:e,set:t,open:n,toggle:i}){let{lensflare:r}=e;return(0,ce.jsxs)(ot,{title:"Lens Flare",tooltip:"Adds camera flare artifacts and glow from a bright light source.",open:n.lensflare,onToggle:()=>i("lensflare"),disabled:!r.enabled,trailing:(0,ce.jsx)(pt,{checked:r.enabled,onChange:a=>t("lensflare",{...r,enabled:a}),label:"Toggle Lensflare"}),children:[(0,ce.jsx)(ra,{label:"Lens Position",value:r.lensPosition,min:-100,max:100,step:.1,onChange:a=>t("lensflare",{...r,lensPosition:a})}),(0,ce.jsx)(Y,{label:"Smooth Time",value:r.smoothTime,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,smoothTime:a})}),(0,ce.jsx)(Y,{label:"Glare Size",value:r.glareSize,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,glareSize:a})}),(0,ce.jsx)(Y,{label:"Flare Size",value:r.flareSize,min:0,max:.1,step:.001,onChange:a=>t("lensflare",{...r,flareSize:a})}),(0,ce.jsx)(Y,{label:"Flare Speed",value:r.flareSpeed,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareSpeed:a})}),(0,ce.jsx)(Y,{label:"Flare Shape",value:r.flareShape,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareShape:a})}),(0,ce.jsx)(mt,{label:"Animated",checked:r.animated,onChange:a=>t("lensflare",{...r,animated:a})}),(0,ce.jsx)(mt,{label:"Anamorphic",checked:r.anamorphic,onChange:a=>t("lensflare",{...r,anamorphic:a})}),(0,ce.jsx)(Rr,{label:"Color Gain",value:r.colorGain,onChange:a=>t("lensflare",{...r,colorGain:a})}),(0,ce.jsx)(Y,{label:"Halo Scale",value:r.haloScale,min:0,max:2,step:.01,onChange:a=>t("lensflare",{...r,haloScale:a})}),(0,ce.jsx)(mt,{label:"Secondary Ghosts",checked:r.secondaryGhosts,onChange:a=>t("lensflare",{...r,secondaryGhosts:a})}),(0,ce.jsx)(mt,{label:"Additional Streaks",checked:r.aditionalStreaks,onChange:a=>t("lensflare",{...r,aditionalStreaks:a})}),(0,ce.jsx)(Y,{label:"Ghost Scale",value:r.ghostScale,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,ghostScale:a})}),(0,ce.jsx)(Y,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,opacity:a})}),(0,ce.jsx)(mt,{label:"Star Burst",checked:r.starBurst,onChange:a=>t("lensflare",{...r,starBurst:a})})]})}function p0({pp:e,set:t,open:n,toggle:i}){let{depthOfField:r}=e;return(0,ce.jsxs)(ot,{title:"Depth Of Field",tooltip:"Blurs areas that sit away from the focal plane for a camera-like look.",open:n.depthOfField,onToggle:()=>i("depthOfField"),disabled:!r.enabled,trailing:(0,ce.jsx)(pt,{checked:r.enabled,onChange:a=>t("depthOfField",{...r,enabled:a}),label:"Toggle DepthOfField"}),children:[(0,ce.jsx)(Y,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusDistance:a})}),(0,ce.jsx)(Y,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusRange:a})}),(0,ce.jsx)(Y,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("depthOfField",{...r,focalLength:a})}),(0,ce.jsx)(Y,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("depthOfField",{...r,bokehScale:a})})]})}var Ie=require("react/jsx-runtime"),OS=["linear","reinhard","aces"];function h0({pp:e,set:t,open:n,toggle:i}){let{colorAverage:r}=e;return(0,Ie.jsx)(ot,{title:"Color Average",tooltip:"Blends the frame toward a single average color for a washed-out stylized look.",open:n.colorAverage,onToggle:()=>i("colorAverage"),disabled:!r.enabled,trailing:(0,Ie.jsx)(pt,{checked:r.enabled,onChange:a=>t("colorAverage",{...r,enabled:a}),label:"Toggle ColorAverage"}),children:(0,Ie.jsx)("div",{className:"se-placeholder",children:"Averages the frame color using the docs default blend mode."})})}function m0({pp:e,set:t,open:n,toggle:i}){let{brightnessContrast:r}=e;return(0,Ie.jsxs)(ot,{title:"Brightness Contrast",tooltip:"Raises or lowers overall brightness and contrast across the scene.",open:n.brightnessContrast,onToggle:()=>i("brightnessContrast"),disabled:!r.enabled,trailing:(0,Ie.jsx)(pt,{checked:r.enabled,onChange:a=>t("brightnessContrast",{...r,enabled:a}),label:"Toggle BrightnessContrast"}),children:[(0,Ie.jsx)(Y,{label:"Brightness",value:r.brightness,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,brightness:a})}),(0,Ie.jsx)(Y,{label:"Contrast",value:r.contrast,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,contrast:a})})]})}function f0({pp:e,set:t,open:n,toggle:i}){let{hueSaturation:r}=e;return(0,Ie.jsxs)(ot,{title:"Hue Saturation",tooltip:"Shifts the hue and saturation to tint the whole image.",open:n.hueSaturation,onToggle:()=>i("hueSaturation"),disabled:!r.enabled,trailing:(0,Ie.jsx)(pt,{checked:r.enabled,onChange:a=>t("hueSaturation",{...r,enabled:a}),label:"Toggle HueSaturation"}),children:[(0,Ie.jsx)(Y,{label:"Hue",value:r.hue,min:-Math.PI,max:Math.PI,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("hueSaturation",{...r,hue:a})}),(0,Ie.jsx)(Y,{label:"Saturation",value:r.saturation,min:-1,max:1,step:.01,onChange:a=>t("hueSaturation",{...r,saturation:a})})]})}function g0({pp:e,set:t,open:n,toggle:i}){let{vignette:r}=e;return(0,Ie.jsxs)(ot,{title:"Vignette",tooltip:"Darkens the edges of the screen so the center feels more focused.",open:n.vignette,onToggle:()=>i("vignette"),disabled:!r.enabled,trailing:(0,Ie.jsx)(pt,{checked:r.enabled,onChange:a=>t("vignette",{...r,enabled:a}),label:"Toggle Vignette"}),children:[(0,Ie.jsx)(Y,{label:"Offset",value:r.offset,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,offset:a})}),(0,Ie.jsx)(Y,{label:"Darkness",value:r.darkness,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,darkness:a})}),(0,Ie.jsx)(mt,{label:"Eskil",checked:r.eskil,onChange:a=>t("vignette",{...r,eskil:a})})]})}function b0({pp:e,set:t,open:n,toggle:i}){let{bloom:r}=e;return(0,Ie.jsxs)(ot,{title:"Bloom",tooltip:"Makes bright areas glow and bleed softly into nearby pixels.",open:n.bloom,onToggle:()=>i("bloom"),disabled:!r.enabled,trailing:(0,Ie.jsx)(pt,{checked:r.enabled,onChange:a=>t("bloom",{...r,enabled:a}),label:"Toggle Bloom"}),children:[(0,Ie.jsx)(Y,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceThreshold:a})}),(0,Ie.jsx)(Y,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceSmoothing:a})}),(0,Ie.jsx)(Y,{label:"Intensity",value:r.intensity,min:0,max:3,step:.05,onChange:a=>t("bloom",{...r,intensity:a})}),(0,Ie.jsx)(mt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("bloom",{...r,mipmapBlur:a})}),(0,Ie.jsx)(Y,{label:"Radius",value:r.radius,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,radius:a})}),(0,Ie.jsx)(Y,{label:"Levels",value:r.levels,min:1,max:16,step:1,onChange:a=>t("bloom",{...r,levels:a})})]})}function v0({pp:e,set:t,open:n,toggle:i}){let{toneMapping:r}=e;return(0,Ie.jsxs)(ot,{title:"Tone Mapping",tooltip:"Remaps HDR lighting to screen output and controls exposure style.",open:n.toneMapping,onToggle:()=>i("toneMapping"),disabled:!r.enabled,trailing:(0,Ie.jsx)(pt,{checked:r.enabled,onChange:a=>t("toneMapping",{...r,enabled:a}),label:"Toggle ToneMapping"}),children:[(0,Ie.jsxs)("div",{className:"se-field",children:[(0,Ie.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,Ie.jsx)("div",{className:"se-segmentedControl",children:OS.map(a=>(0,Ie.jsx)("button",{type:"button",className:`se-segmentedOption ${r.mode===a?"se-segmentedOption--active":""}`,onClick:()=>t("toneMapping",{...r,mode:a}),children:a==="aces"?"Filmic":a.charAt(0).toUpperCase()+a.slice(1)},a))})]}),(0,Ie.jsx)(Y,{label:"Resolution",value:r.resolution,min:64,max:4096,step:64,onChange:a=>t("toneMapping",{...r,resolution:a})}),(0,Ie.jsx)(Y,{label:"White Point",value:r.whitePoint,min:0,max:16,step:.01,onChange:a=>t("toneMapping",{...r,whitePoint:a})}),(0,Ie.jsx)(Y,{label:"Middle Grey",value:r.middleGrey,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,middleGrey:a})}),(0,Ie.jsx)(Y,{label:"Min Luminance",value:r.minLuminance,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,minLuminance:a})}),(0,Ie.jsx)(Y,{label:"Average Luminance",value:r.averageLuminance,min:0,max:4,step:.01,onChange:a=>t("toneMapping",{...r,averageLuminance:a})}),(0,Ie.jsx)(Y,{label:"Adaptation Rate",value:r.adaptationRate,min:0,max:10,step:.01,onChange:a=>t("toneMapping",{...r,adaptationRate:a})}),(0,Ie.jsx)(Y,{label:"Exposure",value:r.exposure,min:0,max:3,step:.01,onChange:a=>t("toneMapping",{...r,exposure:a})})]})}function x0({pp:e,set:t,open:n,toggle:i}){let{sepia:r}=e;return(0,Ie.jsx)(ot,{title:"Sepia",tooltip:"Adds a warm vintage brown tint to the entire image.",open:n.sepia,onToggle:()=>i("sepia"),disabled:!r.enabled,trailing:(0,Ie.jsx)(pt,{checked:r.enabled,onChange:a=>t("sepia",{...r,enabled:a}),label:"Toggle Sepia"}),children:(0,Ie.jsx)(Y,{label:"Intensity",value:r.intensity,min:0,max:1,step:.01,onChange:a=>t("sepia",{...r,intensity:a})})})}var Re=require("react/jsx-runtime");function y0({pp:e,set:t,open:n,toggle:i}){let{dotScreen:r}=e;return(0,Re.jsxs)(ot,{title:"Dot Screen",tooltip:"Overlays a halftone dot pattern for a printed or retro look.",open:n.dotScreen,onToggle:()=>i("dotScreen"),disabled:!r.enabled,trailing:(0,Re.jsx)(pt,{checked:r.enabled,onChange:a=>t("dotScreen",{...r,enabled:a}),label:"Toggle DotScreen"}),children:[(0,Re.jsx)(Y,{label:"Angle",value:r.angle,min:0,max:Math.PI*2,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("dotScreen",{...r,angle:a})}),(0,Re.jsx)(Y,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("dotScreen",{...r,scale:a})})]})}function w0({pp:e,set:t,open:n,toggle:i}){let{glitch:r}=e;return(0,Re.jsxs)(ot,{title:"Glitch",tooltip:"Introduces digital distortion, tearing, and scan noise.",open:n.glitch,onToggle:()=>i("glitch"),disabled:!r.enabled,trailing:(0,Re.jsx)(pt,{checked:r.enabled,onChange:a=>t("glitch",{...r,enabled:a}),label:"Toggle Glitch"}),children:[(0,Re.jsx)(pr,{label:"Mode",value:r.mode,options:Rf,onChange:a=>t("glitch",{...r,mode:a})}),(0,Re.jsx)(Ia,{label:"Delay",value:r.delay,min:0,max:10,step:.01,onChange:a=>t("glitch",{...r,delay:a})}),(0,Re.jsx)(Ia,{label:"Duration",value:r.duration,min:0,max:5,step:.01,onChange:a=>t("glitch",{...r,duration:a})}),(0,Re.jsx)(Ia,{label:"Strength",value:r.strength,min:0,max:2,step:.01,onChange:a=>t("glitch",{...r,strength:a})}),(0,Re.jsx)(Ia,{label:"Chromatic Aberration Offset",value:r.chromaticAberrationOffset,min:0,max:.02,step:1e-4,onChange:a=>t("glitch",{...r,chromaticAberrationOffset:a})}),(0,Re.jsx)(Y,{label:"Columns",value:r.columns,min:0,max:.5,step:.001,onChange:a=>t("glitch",{...r,columns:a})}),(0,Re.jsx)(Y,{label:"Ratio",value:r.ratio,min:0,max:1,step:.01,onChange:a=>t("glitch",{...r,ratio:a})})]})}function _0({pp:e,set:t,open:n,toggle:i}){let{grid:r}=e;return(0,Re.jsxs)(ot,{title:"Grid",tooltip:"Adds a visual grid overlay that feels retro or debug-like.",open:n.grid,onToggle:()=>i("grid"),disabled:!r.enabled,trailing:(0,Re.jsx)(pt,{checked:r.enabled,onChange:a=>t("grid",{...r,enabled:a}),label:"Toggle Grid"}),children:[(0,Re.jsx)(Y,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("grid",{...r,scale:a})}),(0,Re.jsx)(Y,{label:"Line Width",value:r.lineWidth,min:0,max:1,step:.01,onChange:a=>t("grid",{...r,lineWidth:a})})]})}function S0({pp:e,set:t,open:n,toggle:i}){let{chromaticAberration:r}=e;return(0,Re.jsxs)(ot,{title:"Chromatic Aberration",tooltip:"Separates color channels slightly to mimic lens fringing.",open:n.chromaticAberration,onToggle:()=>i("chromaticAberration"),disabled:!r.enabled,trailing:(0,Re.jsx)(pt,{checked:r.enabled,onChange:a=>t("chromaticAberration",{...r,enabled:a}),label:"Toggle ChromaticAberration"}),children:[(0,Re.jsx)(Y,{label:"Offset X",value:r.offsetX,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetX:a})}),(0,Re.jsx)(Y,{label:"Offset Y",value:r.offsetY,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetY:a})}),(0,Re.jsx)(mt,{label:"Radial Modulation",checked:r.radialModulation,onChange:a=>t("chromaticAberration",{...r,radialModulation:a})}),(0,Re.jsx)(Y,{label:"Modulation Offset",value:r.modulationOffset,min:0,max:1,step:.01,onChange:a=>t("chromaticAberration",{...r,modulationOffset:a})})]})}function M0({pp:e,set:t,open:n,toggle:i}){let{noise:r}=e;return(0,Re.jsxs)(ot,{title:"Noise",tooltip:"Adds film grain or static noise to the rendered image.",open:n.noise,onToggle:()=>i("noise"),disabled:!r.enabled,trailing:(0,Re.jsx)(pt,{checked:r.enabled,onChange:a=>t("noise",{...r,enabled:a}),label:"Toggle Noise"}),children:[(0,Re.jsx)(Y,{label:"Amount",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("noise",{...r,opacity:a})}),(0,Re.jsx)(mt,{label:"Premultiply",checked:r.premultiply,onChange:a=>t("noise",{...r,premultiply:a})})]})}function C0({pp:e,set:t,open:n,toggle:i}){let{scanline:r}=e;return(0,Re.jsx)(ot,{title:"Scan Line",tooltip:"Draws horizontal CRT-style scan lines over the frame.",open:n.scanline,onToggle:()=>i("scanline"),disabled:!r.enabled,trailing:(0,Re.jsx)(pt,{checked:r.enabled,onChange:a=>t("scanline",{...r,enabled:a}),label:"Toggle Scanline"}),children:(0,Re.jsx)(Y,{label:"Density",value:r.density,min:0,max:10,step:.25,onChange:a=>t("scanline",{...r,density:a})})})}function T0({pp:e,set:t,open:n,toggle:i}){let{pixelation:r}=e;return(0,Re.jsx)(ot,{title:"Pixelation",tooltip:"Reduces detail into larger pixels for a blocky stylized effect.",open:n.pixelation,onToggle:()=>i("pixelation"),disabled:!r.enabled,trailing:(0,Re.jsx)(pt,{checked:r.enabled,onChange:a=>t("pixelation",{...r,enabled:a}),label:"Toggle Pixelation"}),children:(0,Re.jsx)(Y,{label:"Granularity",value:r.granularity,min:0,max:20,step:1,onChange:a=>t("pixelation",{...r,granularity:a})})})}function P0({pp:e,set:t,open:n,toggle:i}){let{ramp:r}=e;return(0,Re.jsxs)(ot,{title:"Ramp",tooltip:"Adds a screen-space color gradient, or masks effects earlier in the stack.",open:n.ramp,onToggle:()=>i("ramp"),disabled:!r.enabled,trailing:(0,Re.jsx)(pt,{checked:r.enabled,onChange:a=>t("ramp",{...r,enabled:a}),label:"Toggle Ramp"}),children:[(0,Re.jsx)(pr,{label:"Ramp Type",value:r.rampType,options:Lf,onChange:a=>t("ramp",{...r,rampType:a})}),(0,Re.jsx)(Ia,{label:"Ramp Start",value:r.rampStart,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampStart:a})}),(0,Re.jsx)(Ia,{label:"Ramp End",value:r.rampEnd,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampEnd:a})}),(0,Re.jsx)(Rr,{label:"Start Color",value:r.startColor,onChange:a=>t("ramp",{...r,startColor:a})}),(0,Re.jsx)(Rr,{label:"End Color",value:r.endColor,onChange:a=>t("ramp",{...r,endColor:a})}),!r.rampMask&&(0,Re.jsx)(Y,{label:"Gradient Opacity",value:r.opacity??.5,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,opacity:a})}),(0,Re.jsx)(Y,{label:"Bias",value:r.rampBias,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampBias:a})}),(0,Re.jsx)(Y,{label:"Gain",value:r.rampGain,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampGain:a})}),(0,Re.jsx)(mt,{label:"Mask Earlier Effects",checked:r.rampMask,onChange:a=>t("ramp",{...r,rampMask:a})}),(0,Re.jsx)(mt,{label:"Invert",checked:r.rampInvert,onChange:a=>t("ramp",{...r,rampInvert:a})})]})}var Et=require("react/jsx-runtime");function A0({pp:e,set:t,open:n,toggle:i}){let{outline:r}=e;return(0,Et.jsxs)(ot,{title:"Outline",tooltip:"Draws a visible edge around the selected object binding.",open:n.outline,onToggle:()=>i("outline"),disabled:!r.enabled,trailing:(0,Et.jsx)(pt,{checked:r.enabled,onChange:a=>t("outline",{...r,enabled:a}),label:"Toggle Outline"}),children:[(0,Et.jsx)("div",{className:"se-placeholder",children:"Outlines the currently selected object binding in the model editor."}),(0,Et.jsx)(Y,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("outline",{...r,selectionLayer:a})}),(0,Et.jsx)(Y,{label:"Edge Strength",value:r.edgeStrength,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,edgeStrength:a})}),(0,Et.jsx)(Y,{label:"Pulse Speed",value:r.pulseSpeed,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,pulseSpeed:a})}),(0,Et.jsx)(Rr,{label:"Visible Edge Color",value:r.visibleEdgeColor,onChange:a=>t("outline",{...r,visibleEdgeColor:a})}),(0,Et.jsx)(Rr,{label:"Hidden Edge Color",value:r.hiddenEdgeColor,onChange:a=>t("outline",{...r,hiddenEdgeColor:a})}),(0,Et.jsx)(pr,{label:"Kernel Size",value:r.kernelSize,options:Ss,onChange:a=>t("outline",{...r,kernelSize:a})}),(0,Et.jsx)(mt,{label:"Blur",checked:r.blur,onChange:a=>t("outline",{...r,blur:a})}),(0,Et.jsx)(mt,{label:"X-Ray",checked:r.xRay,onChange:a=>t("outline",{...r,xRay:a})})]})}function E0({pp:e,set:t,open:n,toggle:i}){let{selectiveBloom:r}=e;return(0,Et.jsxs)(ot,{title:"Selective Bloom",tooltip:"Applies bloom only to objects assigned to the selected layer.",open:n.selectiveBloom,onToggle:()=>i("selectiveBloom"),disabled:!r.enabled,trailing:(0,Et.jsx)(pt,{checked:r.enabled,onChange:a=>t("selectiveBloom",{...r,enabled:a}),label:"Toggle SelectiveBloom"}),children:[(0,Et.jsx)("div",{className:"se-placeholder",children:"Applies bloom to the currently selected object binding."}),(0,Et.jsx)(Y,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("selectiveBloom",{...r,selectionLayer:a})}),(0,Et.jsx)(Y,{label:"Intensity",value:r.intensity,min:0,max:5,step:.05,onChange:a=>t("selectiveBloom",{...r,intensity:a})}),(0,Et.jsx)(Y,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceThreshold:a})}),(0,Et.jsx)(Y,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceSmoothing:a})}),(0,Et.jsx)(pr,{label:"Kernel Size",value:r.kernelSize,options:Ss,onChange:a=>t("selectiveBloom",{...r,kernelSize:a})}),(0,Et.jsx)(mt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("selectiveBloom",{...r,mipmapBlur:a})}),(0,Et.jsx)(mt,{label:"Inverted",checked:r.inverted,onChange:a=>t("selectiveBloom",{...r,inverted:a})}),(0,Et.jsx)(mt,{label:"Ignore Background",checked:r.ignoreBackground,onChange:a=>t("selectiveBloom",{...r,ignoreBackground:a})})]})}function R0({pp:e,set:t,open:n,toggle:i}){let{smaa:r}=e;return(0,Et.jsx)(ot,{title:"SMAA",tooltip:"Reduces jagged edges with subpixel anti-aliasing.",open:n.smaa,onToggle:()=>i("smaa"),trailing:(0,Et.jsx)(pt,{checked:r.enabled,onChange:a=>t("smaa",{...r,enabled:a}),label:"Toggle SMAA"}),children:(0,Et.jsx)("div",{className:"se-placeholder",children:"Subpixel Morphological Anti-Aliasing smooths jagged edges in post-process."})})}var kt=require("react/jsx-runtime");function ph({config:e,onChange:t}){let[n,i]=(0,L0.useState)({autofocus:!1,colorAverage:!1,dotScreen:!1,glitch:!1,godRays:!1,grid:!1,lensflare:!1,outline:!1,selectiveBloom:!1,ramp:!1,ssao:!1,brightnessContrast:!1,hueSaturation:!1,depthOfField:!1,chromaticAberration:!1,vignette:!1,bloom:!1,toneMapping:!1,noise:!1,sepia:!1,scanline:!1,pixelation:!1,smaa:!1}),r=c=>i(l=>({...l,[c]:!l[c]})),a=e.postProcessing,s={pp:a,set:(c,l)=>t({...e,postProcessing:{...a,[c]:l}}),open:n,toggle:r};return(0,kt.jsxs)("div",{className:"se-generalContent",children:[(0,kt.jsx)(l0,{...s}),(0,kt.jsx)(c0,{...s}),(0,kt.jsx)(h0,{...s}),(0,kt.jsx)(y0,{...s}),(0,kt.jsx)(w0,{...s}),(0,kt.jsx)(d0,{...s}),(0,kt.jsx)(_0,{...s}),(0,kt.jsx)(u0,{...s}),(0,kt.jsx)(A0,{...s}),(0,kt.jsx)(E0,{...s}),(0,kt.jsx)(m0,{...s}),(0,kt.jsx)(f0,{...s}),(0,kt.jsx)(p0,{...s}),(0,kt.jsx)(S0,{...s}),(0,kt.jsx)(g0,{...s}),(0,kt.jsx)(b0,{...s}),(0,kt.jsx)(v0,{...s}),(0,kt.jsx)(M0,{...s}),(0,kt.jsx)(x0,{...s}),(0,kt.jsx)(C0,{...s}),(0,kt.jsx)(T0,{...s}),(0,kt.jsx)(P0,{...s}),(0,kt.jsx)(R0,{...s})]})}var hl=require("react"),aa=require("lucide-react");var de=require("react/jsx-runtime"),zS=["512","1024","2048","4096"],k0={none:"None",directional:"Direction",point:"Point",spot:"Spot",hemisphere:"Hemi"};function US({index:e,light:t,selected:n,onSelect:i,onToggleVisible:r}){return(0,de.jsxs)("div",{className:`se-lightRow ${n?"se-lightRow--active":""}`,onClick:i,children:[(0,de.jsxs)("span",{className:"se-lightRowLabel",children:[e+1,": ",k0[t.type]]}),(0,de.jsx)("button",{type:"button",className:"se-iconButton","aria-label":t.visible?"Hide light":"Show light",onClick:a=>{a.stopPropagation(),r()},children:t.visible?(0,de.jsx)(aa.Eye,{size:14}):(0,de.jsx)(aa.EyeOff,{size:14})})]})}function FS(){return{id:crypto.randomUUID(),type:"directional",color:"#ffffff",intensity:1,position:[5,10,5],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}}function hh({config:e,onChange:t}){let[n,i]=(0,hl.useState)({lights:!0,shadows:!1,groundShadows:!1,environment:!1,envShadow:!1}),r=(0,hl.useSyncExternalStore)(ah,yd),[a,o]=(0,hl.useState)(e.lighting.lights[0]?.id??null),s=r??a,c=m=>{o(m),cl(m)},l=m=>i(A=>({...A,[m]:!A[m]})),{tier:u}=Er(),d=Bi(u,"starter"),{lighting:p,shadows:g,groundShadows:f,environment:v}=e,E=m=>t({...e,lighting:m}),S=m=>t({...e,shadows:m}),b=m=>t({...e,groundShadows:m}),x=m=>t({...e,environment:m}),R=(m,A)=>{E({...p,lights:p.lights.map(C=>C.id===m?{...C,...A}:C)})},w=p.lights.find(m=>m.id===s)??null,P=()=>{let m=FS();E({...p,lights:[...p.lights,m]}),c(m.id)},y=()=>{if(!w)return;let m=p.lights.filter(A=>A.id!==w.id);E({...p,lights:m}),c(m[0]?.id??null)};return(0,de.jsxs)("div",{className:"se-generalContent",children:[(0,de.jsxs)(ot,{title:"Lights",open:n.lights,onToggle:()=>l("lights"),children:[(0,de.jsx)("div",{className:"se-lightList",children:p.lights.map((m,A)=>(0,de.jsx)(US,{index:A,light:m,selected:m.id===s,onSelect:()=>c(m.id),onToggleVisible:()=>R(m.id,{visible:!m.visible})},m.id))}),(0,de.jsxs)("div",{className:"se-lightActions",children:[(0,de.jsx)("button",{type:"button",className:"se-iconButton",onClick:P,title:"Add light",children:(0,de.jsx)(aa.Plus,{size:14})}),w&&p.lights.length>1&&(0,de.jsx)("button",{type:"button",className:"se-iconButton",onClick:y,title:"Remove selected light",children:(0,de.jsx)(aa.Trash2,{size:14})})]}),w?(0,de.jsxs)("div",{className:"se-lightProps",children:[(0,de.jsxs)("div",{className:"se-field",children:[(0,de.jsx)("span",{className:"se-fieldLabel",children:"Type"}),(0,de.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:Pf.map(m=>(0,de.jsx)("button",{type:"button",className:`se-segmentedOption ${w.type===m?"se-segmentedOption--active":""}`,onClick:()=>R(w.id,{type:m}),children:k0[m]},m))})]}),(0,de.jsx)(Rr,{label:"Color",value:w.color,onChange:m=>R(w.id,{color:m})}),(0,de.jsx)(Y,{label:"Intensity",value:w.intensity,min:0,max:10,step:.1,onChange:m=>R(w.id,{intensity:m})}),w.type!=="hemisphere"&&w.type!=="none"&&(0,de.jsx)(ra,{label:"Position",value:w.position,min:-100,max:100,step:.05,onChange:m=>R(w.id,{position:m})}),w.type==="spot"&&(0,de.jsxs)(de.Fragment,{children:[(0,de.jsx)(Y,{label:"Angle",value:w.angle??Math.PI/6,min:0,max:Math.PI/2,step:.01,formatValue:m=>`${Math.round(m*180/Math.PI)}\xB0`,onChange:m=>R(w.id,{angle:m})}),(0,de.jsx)(Y,{label:"Penumbra",value:w.penumbra??.2,min:0,max:1,step:.01,onChange:m=>R(w.id,{penumbra:m})}),(0,de.jsx)(Y,{label:"Distance",value:w.distance??0,min:0,max:100,step:.5,onChange:m=>R(w.id,{distance:m})}),(0,de.jsx)(Y,{label:"Decay",value:w.decay??2,min:0,max:4,step:.1,onChange:m=>R(w.id,{decay:m})})]}),(0,de.jsx)(mt,{label:"Attached to camera",checked:w.attachedToCamera,onChange:m=>R(w.id,{attachedToCamera:m})}),(0,de.jsx)(mt,{label:"Cast shadows",checked:w.castShadow,onChange:m=>R(w.id,{castShadow:m})}),(0,de.jsx)(Y,{label:"Shadow bias",value:w.shadowBias,min:-.01,max:.01,step:1e-4,onChange:m=>R(w.id,{shadowBias:m})})]}):null]}),(0,de.jsxs)(ot,{title:"Shadows",open:n.shadows,onToggle:()=>l("shadows"),disabled:!g.enabled,trailing:(0,de.jsx)(pt,{checked:g.enabled,onChange:m=>S({...g,enabled:m}),label:"Toggle shadows"}),children:[(0,de.jsx)(pr,{label:"Map size",value:String(g.mapSize),options:zS,onChange:m=>S({...g,mapSize:Number(m)})}),(0,de.jsx)(Y,{label:"Bias",value:g.bias,min:-.01,max:.01,step:1e-4,onChange:m=>S({...g,bias:m})}),(0,de.jsx)(Y,{label:"Normal bias",value:g.normalBias,min:0,max:.2,step:.01,onChange:m=>S({...g,normalBias:m})}),(0,de.jsx)(Y,{label:"Radius (softness)",value:g.radius,min:0,max:20,step:.5,onChange:m=>S({...g,radius:m})})]}),(0,de.jsxs)(ot,{title:"Ground Shadows",open:n.groundShadows,onToggle:()=>l("groundShadows"),disabled:!f.enabled,trailing:(0,de.jsx)(pt,{checked:f.enabled,onChange:m=>b({...f,enabled:m}),label:"Toggle ground shadows"}),children:[(0,de.jsxs)("div",{className:"se-field",children:[(0,de.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,de.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:["shadowCatcher"].map(m=>(0,de.jsx)("button",{type:"button",className:`se-segmentedOption ${f.mode===m?"se-segmentedOption--active":""}`,onClick:()=>b({...f,mode:m}),children:m==="shadowCatcher"?"Shadow Catcher":"Baked AO"},m))})]}),f.mode==="bakedAO"&&(0,de.jsx)("div",{className:"se-placeholder",children:"Requires pre-baked AO textures \u2014 not yet available."}),(0,de.jsx)(Y,{label:"Intensity",value:f.intensity,min:0,max:1,step:.01,onChange:m=>b({...f,intensity:m})}),(0,de.jsx)(Y,{label:"Border fade",value:f.borderFade,min:0,max:10,step:.1,onChange:m=>b({...f,borderFade:m})}),(0,de.jsx)(Y,{label:"Height",value:f.height,min:-5,max:5,step:.1,onChange:m=>b({...f,height:m})}),(0,de.jsx)(Y,{label:"Size",value:f.size,min:1,max:50,step:.5,onChange:m=>b({...f,size:m})})]}),(0,de.jsx)(ot,{title:"Environment",open:n.environment,onToggle:()=>l("environment"),children:d?(0,de.jsxs)(de.Fragment,{children:[(0,de.jsx)(Y,{label:"Orientation",value:v.rotation,min:0,max:360,step:1,formatValue:m=>`${m}\xB0`,onChange:m=>x({...v,rotation:m})}),(0,de.jsx)(Y,{label:"Brightness",value:v.intensity,min:0,max:3,step:.05,onChange:m=>x({...v,intensity:m})}),(0,de.jsxs)(ot,{title:"Shadow",open:n.envShadow,onToggle:()=>l("envShadow"),trailing:(0,de.jsx)(pt,{checked:v.shadowLight.enabled,onChange:m=>x({...v,shadowLight:{...v.shadowLight,enabled:m}}),label:"Toggle environment shadow light"}),disabled:!v.shadowLight.enabled,children:[(0,de.jsx)(Y,{label:"Light intensity",value:v.shadowLight.intensity,min:0,max:20,step:.1,onChange:m=>x({...v,shadowLight:{...v.shadowLight,intensity:m}})}),(0,de.jsx)(Y,{label:"Shadow bias",value:v.shadowLight.bias,min:-.01,max:.01,step:1e-4,onChange:m=>x({...v,shadowLight:{...v.shadowLight,bias:m}})})]})]}):(0,de.jsx)(tr,{requiredTier:"starter",feature:"Environment lighting"})})]})}var Dd=require("react"),gi=require("lucide-react");var he=require("react/jsx-runtime");function VS(e){if(!Number.isFinite(e)||e<=0)return"Unknown duration";let t=Math.round(e*10)/10;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function D0(e){let t=Number.isFinite(e)&&e>0?e:0;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function jS(e){return Number.isFinite(e)?Math.min(3,Math.max(.1,Number(e.toFixed(2)))):1}function mh({config:e,onChange:t,clipDetails:n,currentClip:i,isPlaying:r,time:a,play:o,pause:s,stop:c,setSpeed:l,seek:u}){let[d,p]=(0,Dd.useState)(!1),g=(0,Dd.useMemo)(()=>new Map(n.map(m=>[m.sourceName,m.duration])),[n]),f=e.animations.clips.filter(m=>!m.hidden),v=e.animations.clips.filter(m=>m.hidden),E=(m,A=e.animations.autoplayClip)=>{t({...e,animations:{clips:m(e.animations.clips),autoplayClip:A}})},S=(m,A)=>{E(C=>C.map(D=>D.sourceName===m?A(D):D))},b=(m,A)=>{S(m,C=>({...C,loopMode:A}))},x=(m,A)=>{let C=jS(A);S(m,D=>({...D,speed:C})),i===m&&l(C)},R=(m,A)=>{S(m,C=>({...C,displayName:A}))},w=m=>{let A=e.animations.autoplayClip===m?null:m;t({...e,animations:{...e.animations,autoplayClip:A}})},P=m=>{E(A=>A.map(C=>C.sourceName===m?{...C,hidden:!0}:C),e.animations.autoplayClip===m?null:e.animations.autoplayClip),i===m&&c()},y=m=>{E(A=>A.map(C=>C.sourceName===m?{...C,hidden:!1}:C))};return e.animations.clips.length===0?(0,he.jsx)(Na,{title:"Animations",children:(0,he.jsx)("div",{className:"se-helperCard",children:"Upload a model with embedded animations to manage playback, naming, autoplay, and per-clip speed here."})}):(0,he.jsxs)(Na,{title:"Animations",children:[f.length===0&&(0,he.jsx)("div",{className:"se-helperCard",children:(0,he.jsx)("span",{children:"Preview clips directly in the viewer, choose one optional autoplay animation, and use soft delete to hide clips without modifying the GLB."})}),f.length===0?(0,he.jsx)("div",{className:"se-placeholder",children:"All animations are currently removed. Restore a clip below to make it available again."}):(0,he.jsx)("div",{className:"se-animationList",children:f.map(m=>{let A=i===m.sourceName,C=g.get(m.sourceName)??0;return(0,he.jsxs)("article",{className:`se-animationCard ${A?"se-animationCard--active":""}`,children:[(0,he.jsxs)("div",{className:"se-animationHeader",children:[(0,he.jsxs)("div",{className:"se-animationHeading",children:[(0,he.jsxs)("div",{className:"se-animationTitleRow",children:[(0,he.jsx)("span",{className:"se-animationStatus",children:A?r?"Playing":"Paused":"Ready"}),e.animations.autoplayClip===m.sourceName?(0,he.jsx)("span",{className:"se-animationBadge",children:"Autoplay"}):null]}),(0,he.jsx)("div",{className:"se-animationSource",children:m.sourceName})]}),(0,he.jsx)("button",{type:"button",className:"se-animationDangerButton",onClick:()=>P(m.sourceName),title:"Remove animation",children:(0,he.jsx)(gi.Trash2,{size:16})})]}),(0,he.jsxs)("div",{className:"se-field",children:[(0,he.jsx)("span",{className:"se-fieldLabel",children:"Display name"}),(0,he.jsx)("input",{className:"se-textInput",value:m.displayName,onChange:$=>R(m.sourceName,$.target.value),placeholder:"Animation name"})]}),(0,he.jsxs)("div",{className:"se-animationMeta",children:[(0,he.jsx)("span",{children:VS(C)}),(0,he.jsx)("span",{children:m.loopMode==="once"?"Play once":"Looping"}),(0,he.jsxs)("span",{children:[m.speed.toFixed(2),"x"]})]}),(0,he.jsxs)("div",{className:"se-animationButtonRow",children:[(()=>{let $=A&&r;return(0,he.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>$?s():o(m.sourceName),"aria-label":$?"Pause":"Play",title:$?"Pause":"Play",children:$?(0,he.jsx)(gi.Pause,{size:16}):(0,he.jsx)(gi.Play,{size:16})})})(),(0,he.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:c,disabled:!A,"aria-label":"Stop",title:"Stop",children:(0,he.jsx)(gi.Square,{size:16})})]}),(0,he.jsxs)("div",{className:"se-animationSeekRow",children:[(0,he.jsx)("input",{className:"se-slider se-animationSeek",type:"range",min:0,max:Math.max(C,.001),step:.01,value:A?Math.min(a,C):0,disabled:!A||C<=0,onChange:$=>u(Number($.target.value)),"aria-label":"Seek"}),(0,he.jsxs)("span",{className:"se-animationSeekTime",children:[D0(A?Math.min(a,C):0)," / ",D0(C)]})]}),(0,he.jsxs)("div",{className:"se-animationGrid",children:[(0,he.jsxs)("label",{className:"se-field",children:[(0,he.jsx)("span",{className:"se-fieldLabel",children:"Loop mode"}),(0,he.jsxs)("select",{className:"se-select",value:m.loopMode,onChange:$=>b(m.sourceName,$.target.value),children:[(0,he.jsx)("option",{value:"repeat",children:"Loop"}),(0,he.jsx)("option",{value:"once",children:"Play Once"})]})]}),(0,he.jsxs)("label",{className:"se-field",children:[(0,he.jsxs)("span",{className:"se-fieldLabel",children:["Speed",(0,he.jsxs)("span",{className:"se-fieldValue",children:[m.speed.toFixed(2),"x"]})]}),(0,he.jsxs)("div",{className:"se-animationSpeedRow",children:[(0,he.jsx)("input",{className:"se-slider",type:"range",min:.1,max:3,step:.1,value:m.speed,onChange:$=>x(m.sourceName,Number($.target.value))}),(0,he.jsx)("input",{className:"se-numberInput se-animationSpeedInput",type:"number",min:.1,max:3,step:.1,value:m.speed,onChange:$=>x(m.sourceName,Number($.target.value))})]})]})]}),(0,he.jsx)("button",{type:"button",className:`se-animationAutoplayButton ${e.animations.autoplayClip===m.sourceName?"se-animationAutoplayButton--active":""}`,onClick:()=>w(m.sourceName),children:e.animations.autoplayClip===m.sourceName?"Disable autoplay":"Set as autoplay"})]},m.sourceName)})}),v.length>0?(0,he.jsxs)("section",{className:"se-removedAnimations",children:[(0,he.jsx)("button",{type:"button",className:"se-panelHeader",onClick:()=>p(m=>!m),children:(0,he.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,he.jsx)(gi.ChevronDown,{size:16,className:`se-panelChevron ${d?"se-panelChevron--open":""}`}),(0,he.jsxs)("span",{className:"se-panelTitle",children:["Removed Animations (",v.length,")"]})]})}),d?(0,he.jsx)("div",{className:"se-removedAnimationList",children:v.map(m=>(0,he.jsxs)("div",{className:"se-removedAnimationRow",children:[(0,he.jsxs)("div",{children:[(0,he.jsx)("div",{className:"se-removedAnimationName",children:m.displayName||m.sourceName}),(0,he.jsx)("div",{className:"se-animationSource",children:m.sourceName})]}),(0,he.jsx)("button",{type:"button",className:"se-animationButton",onClick:()=>y(m.sourceName),children:"Restore"})]},m.sourceName))}):null]}):null]})}var fh=require("react"),Nd=require("lucide-react");var lt=require("react/jsx-runtime");function gh({config:e,onChange:t}){let[n,i]=(0,fh.useState)(null),[r,a]=(0,fh.useState)({title:"",description:""}),o=e.annotations,s=d=>{i(d),a({title:d.title,description:d.description||""})},c=()=>{if(!n||!r.title.trim())return;let d=o.map(p=>p.id===n.id?{...p,title:r.title.trim(),description:r.description||""}:p);t({...e,annotations:d}),i(null),a({title:"",description:""})},l=d=>{if(window.confirm("Delete this annotation?")){let g=o.filter(f=>f.id!==d).map((f,v)=>({...f,id:v+1}));t({...e,annotations:g}),i(null),a({title:"",description:""})}},u=()=>{i(null),a({title:"",description:""})};return(0,lt.jsxs)(Na,{title:"Annotations",children:[e.annotations.length===0?(0,lt.jsx)("div",{className:"bb-emptyAnnotations",children:"No annotations yet. Double-click on the model to add one."}):(0,lt.jsx)("div",{className:"bb-annotationsList",children:e.annotations.map(d=>(0,lt.jsxs)("div",{className:"bb-annotationCard",children:[(0,lt.jsxs)("div",{className:"bb-annotationHeader",children:[(0,lt.jsxs)("div",{className:"bb-annotationBadge",children:["#",d.id]}),(0,lt.jsxs)("div",{className:"bb-annotationActions",children:[(0,lt.jsx)("button",{className:"bb-annotationAction bb-annotationAction--edit",onClick:()=>s(d),title:"Edit annotation",children:(0,lt.jsx)(Nd.Pencil,{size:16})}),(0,lt.jsx)("button",{className:"bb-annotationAction bb-annotationAction--delete",onClick:()=>l(d.id),title:"Delete annotation",children:(0,lt.jsx)(Nd.Trash2,{size:16})})]})]}),(0,lt.jsx)("div",{className:"bb-annotationTitle",children:d.title}),d.description&&(0,lt.jsx)("div",{className:"bb-annotationDescription",children:d.description}),(0,lt.jsxs)("div",{className:"bb-annotationPosition",children:["Position: [",d.worldPosition[0].toFixed(2),","," ",d.worldPosition[1].toFixed(2),","," ",d.worldPosition[2].toFixed(2),"]"]})]},d.id))}),n&&(0,lt.jsx)("div",{className:"bb-editAnnotationOverlay",onClick:u,children:(0,lt.jsxs)("div",{className:"bb-editAnnotationPopup",onClick:d=>d.stopPropagation(),children:[(0,lt.jsxs)("div",{className:"bb-editAnnotationHeader",children:[(0,lt.jsx)("h3",{className:"bb-editAnnotationTitle",children:"Edit Annotation"}),(0,lt.jsx)("button",{className:"bb-editAnnotationClose",onClick:u,children:"\xD7"})]}),(0,lt.jsxs)("div",{className:"bb-editAnnotationBody",children:[(0,lt.jsxs)("div",{className:"bb-field",children:[(0,lt.jsx)("label",{className:"bb-label",children:"Title"}),(0,lt.jsx)("input",{className:"bb-input",value:r.title,onChange:d=>a({...r,title:d.target.value}),placeholder:"Enter annotation title"})]}),(0,lt.jsxs)("div",{className:"bb-field",children:[(0,lt.jsx)("label",{className:"bb-label",children:"Description"}),(0,lt.jsx)("textarea",{className:"bb-textarea",value:r.description,onChange:d=>a({...r,description:d.target.value}),placeholder:"Enter annotation description",rows:3})]}),(0,lt.jsxs)("div",{className:"bb-editAnnotationActions",children:[(0,lt.jsx)("button",{className:"bb-button",onClick:u,children:"Cancel"}),(0,lt.jsx)("button",{className:"bb-button bb-button--primary",onClick:c,disabled:!r.title.trim(),children:"Save"}),(0,lt.jsx)("button",{className:"bb-button bb-button--danger",onClick:()=>l(n.id),children:"Delete"})]})]})]})})]})}var bi=require("react"),Lr=require("lucide-react");var Me=require("react/jsx-runtime"),HS={enabled:!0,waypoints:[],loop:!0,autoPlay:!1},Ba=3.5;function bh({config:e,onChange:t,cameraState:n,onPreviewWaypoint:i}){let r=e.cinematic??HS,{waypoints:a}=r,o=(0,bi.useCallback)((S,b)=>{if(S.length<2)return 0;let x=0;for(let R=0;R<S.length-1;R++){let w=S[R].segmentDuration??Ba;x+=w}return b&&S.length>1&&(x+=S[S.length-1].segmentDuration??Ba),Math.max(x,0)},[]),s=(0,bi.useCallback)(S=>{t({...e,cinematic:{...r,...S}})},[e,r,t]),c=(0,bi.useCallback)(()=>{if(!n)return;let S={position:[...n.position],target:[...n.target],...n.azimuthAngle!=null?{azimuthAngle:n.azimuthAngle}:{},...n.polarAngle!=null?{polarAngle:n.polarAngle}:{},segmentDuration:Ba},b=[...a,S],x=o(b,r.loop);s({waypoints:b,duration:x})},[n,a,r.loop,o,s]),l=(0,bi.useCallback)(S=>{let b=a.filter((R,w)=>w!==S),x=o(b,r.loop);s({waypoints:b,duration:x})},[a,r.loop,o,s]),u=(0,bi.useCallback)((S,b)=>{let x=S+b;if(x<0||x>=a.length)return;let R=[...a];[R[S],R[x]]=[R[x],R[S]];let w=o(R,r.loop);s({waypoints:R,duration:w})},[a,r.loop,o,s]),d=(0,bi.useCallback)((S,b)=>{let x=a.map((w,P)=>P===S?{...w,...b}:w),R=o(x,r.loop);s({waypoints:x,duration:R})},[a,r.loop,o,s]),[p,g]=(0,bi.useState)(!1),f=a.some(S=>S.segmentDuration!==void 0),v=(0,bi.useCallback)(S=>S>=a.length-1?Ba:a[S]?.segmentDuration??Ba,[a]),E=a.length>=2;return(0,Me.jsxs)(Na,{title:"Cinematic Camera",children:[(0,Me.jsx)("p",{className:"se-cinematicHint",children:"Frame the model in the viewer, then capture it as a waypoint. The camera glides through the waypoints in order \u2014 enable and press play in the viewer to preview."}),(0,Me.jsxs)("button",{type:"button",className:"bb-button bb-button--primary se-cinematicAdd",onClick:c,disabled:!n,title:"Capture the current camera view as a waypoint",children:[(0,Me.jsx)(Lr.Plus,{size:15}),"Add waypoint from current view"]}),(0,Me.jsxs)("div",{className:"se-customizeToggle",children:[(0,Me.jsxs)("label",{className:"se-toggleLabel",children:[(0,Me.jsx)("input",{type:"checkbox",checked:p,onChange:S=>g(S.target.checked)}),(0,Me.jsx)(Lr.Settings,{size:14}),(0,Me.jsx)("span",{children:"Customize durations between waypoints"})]}),p&&(0,Me.jsxs)("span",{className:"se-toggleHint",children:["Set duration for each segment between waypoints: 1\u21922, 2\u21923, etc. Default: ",Ba,"s"]})]}),a.length===0?(0,Me.jsx)("div",{className:"bb-emptyAnnotations",children:"No waypoints yet. Position the camera and add your first one."}):(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsx)("div",{className:"se-waypointList",children:a.map((S,b)=>{let x=v(b),R=b===a.length-1,w=S.segmentDuration!==void 0&&S.segmentDuration!==Ba;return(0,Me.jsxs)("div",{children:[(0,Me.jsxs)("div",{className:"se-waypointCard",children:[(0,Me.jsx)("div",{className:"se-waypointBadge",children:b+1}),(0,Me.jsxs)("div",{className:"se-waypointBody",children:[(0,Me.jsxs)("div",{className:"se-waypointCoords",children:["pos [",S.position.map(P=>P.toFixed(1)).join(", "),"]"]}),(0,Me.jsxs)("div",{className:"se-waypointCoords",children:["look [",S.target.map(P=>P.toFixed(1)).join(", "),"]"]}),p&&!R&&(0,Me.jsxs)("div",{className:`se-customBadge ${w?"se-customBadge--custom":"se-customBadge--default"}`,children:[x.toFixed(1),"s",!w&&" (default)"]})]}),(0,Me.jsxs)("div",{className:"se-waypointActions",children:[(0,Me.jsx)("button",{className:"se-waypointAction",onClick:()=>i?.(S),title:"Fly camera to this waypoint",disabled:!i,children:(0,Me.jsx)(Lr.MapPin,{size:15})}),(0,Me.jsx)("button",{className:"se-waypointAction",onClick:()=>u(b,-1),title:"Move up",disabled:b===0,children:(0,Me.jsx)(Lr.ArrowUp,{size:15})}),(0,Me.jsx)("button",{className:"se-waypointAction",onClick:()=>u(b,1),title:"Move down",disabled:R,children:(0,Me.jsx)(Lr.ArrowDown,{size:15})}),(0,Me.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:()=>l(b),title:"Delete waypoint",children:(0,Me.jsx)(Lr.Trash2,{size:15})})]})]}),p&&!R&&(0,Me.jsxs)("div",{className:"se-segmentBetween",children:[(0,Me.jsxs)("div",{className:"se-segmentLabel",children:[b+1," \u2192 ",b+2,!S.segmentDuration&&" (default)"]}),(0,Me.jsxs)("div",{className:"se-segmentControls",children:[(0,Me.jsx)("span",{className:"se-durationLabel",children:"Duration:"}),(0,Me.jsx)("input",{type:"range",className:"se-segmentSlider",min:1,max:20,step:.5,value:x,onChange:P=>{let y=parseFloat(P.target.value);d(b,{segmentDuration:y})}}),(0,Me.jsxs)("span",{className:"se-segmentValue",children:[x.toFixed(1),"s"]}),(0,Me.jsxs)("div",{className:"se-presetButtons",children:[[2,4,6,8].map(P=>(0,Me.jsxs)("button",{className:"se-presetButton",onClick:()=>d(b,{segmentDuration:P}),children:[P,"s"]},`preset-${b}-${P}`)),(0,Me.jsx)("button",{className:"se-presetButton se-presetButton--default",onClick:()=>{let P=a.map((m,A)=>{if(A===b){let{segmentDuration:C,...D}=m;return D}return m}),y=o(P,r.loop);s({waypoints:P,duration:y})},children:"Reset"})]})]})]})]},`waypoint-wrapper-${b}`)})}),(0,Me.jsxs)("div",{className:"se-totalDuration",children:[(0,Me.jsx)("span",{className:"se-totalLabel",children:"Total duration:"}),(0,Me.jsx)("span",{className:"se-totalValue",children:E?(r.duration??o(a,r.loop)).toFixed(1)+"s":"-"}),!E&&(0,Me.jsx)("span",{className:"se-totalHint",children:"(need at least 2 waypoints)"})]})]}),(0,Me.jsx)(mt,{label:"Enable cinematic camera",checked:r.enabled,onChange:S=>s({enabled:S})}),(0,Me.jsx)(mt,{label:"Loop",checked:r.loop,onChange:S=>{let b=S,x=o(a,b);s({loop:b,duration:x})}}),(0,Me.jsx)(mt,{label:"Auto-play on load",checked:r.autoPlay,onChange:S=>s({autoPlay:S})}),!p&&E&&(0,Me.jsx)(Y,{label:"Duration",value:r.duration??o(a,r.loop),min:4,max:120,step:1,formatValue:S=>`${S}s`,onChange:S=>s({duration:S})})]})}var kr=require("lucide-react");var un=require("react/jsx-runtime"),GS=[{label:"General",icon:(0,un.jsx)(kr.Box,{})},{label:"Lighting",icon:(0,un.jsx)(kr.Spotlight,{})},{label:"Animations",icon:(0,un.jsx)(kr.Clapperboard,{})},{label:"Post Processing",icon:(0,un.jsx)(kr.Sparkles,{})},{label:"Annotations",icon:(0,un.jsx)(kr.MessageSquareText,{})},{label:"Cinematic",icon:(0,un.jsx)(kr.Video,{})}],N0={currentClip:null,isPlaying:!1,time:0,duration:0,play:()=>{},pause:()=>{},stop:()=>{},setSpeed:()=>{},seek:()=>{}};function vh({config:e,onChange:t,activeSubTab:n,onActiveSubTabChange:i,cameraState:r=null,onPreviewWaypoint:a,animationClipDetails:o=[],animationPlayback:s=N0}){let[c,l]=(0,Id.useState)("General"),u=n??c,d=s??N0,{tier:p}=Er(),g=Bi(p,"starter"),f=Bi(p,"growth");(0,Id.useEffect)(()=>{n!==void 0&&l(n)},[n]);let v=E=>{n===void 0&&l(E),i?.(E)};return(0,un.jsxs)("div",{className:"se-tabContent",children:[(0,un.jsx)("div",{className:"se-subTabRow",children:GS.map(E=>(0,un.jsx)("button",{type:"button",title:E.label,className:`se-subTab ${u===E.label?"se-subTab--active":""}`,onClick:()=>v(E.label),children:E.icon},E.label))}),u==="General"&&(0,un.jsx)(uh,{config:e,onChange:t}),u==="Lighting"&&(0,un.jsx)(hh,{config:e,onChange:t}),u==="Animations"&&(g?(0,un.jsx)(mh,{config:e,onChange:t,clipDetails:o,currentClip:d.currentClip,isPlaying:d.isPlaying,time:d.time,duration:d.duration,play:d.play,pause:d.pause,stop:d.stop,setSpeed:d.setSpeed,seek:d.seek}):(0,un.jsx)(tr,{requiredTier:"starter",feature:"Animation configuration"})),u==="Post Processing"&&(f?(0,un.jsx)(ph,{config:e,onChange:t}):(0,un.jsx)(tr,{requiredTier:"growth",feature:"Post-processing effects"})),u==="Annotations"&&(g?(0,un.jsx)(gh,{config:e,onChange:t}):(0,un.jsx)(tr,{requiredTier:"starter",feature:"Annotations"})),u==="Cinematic"&&(g?(0,un.jsx)(bh,{config:e,onChange:t,cameraState:r,onPreviewWaypoint:a}):(0,un.jsx)(tr,{requiredTier:"starter",feature:"Cinematic camera"}))]})}var Oo=require("lucide-react"),Vt=require("react/jsx-runtime");function I0({title:e,trailing:t,children:n,disabled:i,open:r,onToggle:a,tooltip:o}){let s=o?`${o}`:e;return(0,Vt.jsxs)("div",{className:"bb-materialPanel",children:[(0,Vt.jsxs)("button",{type:"button",className:"bb-materialPanelHeader",onClick:a,"aria-expanded":r,title:s,children:[(0,Vt.jsxs)("div",{className:"bb-materialPanelTitleWrap",children:[(0,Vt.jsx)(Oo.ChevronDown,{size:14,className:`bb-materialPanelChevron ${r?"bb-materialPanelChevron--open":""}`}),(0,Vt.jsx)("span",{className:"bb-materialPanelTitle",children:e}),o?(0,Vt.jsx)("span",{className:"bb-materialPanelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Vt.jsx)(Oo.Info,{size:12})}):null]}),t?(0,Vt.jsx)("div",{onClick:c=>c.stopPropagation(),children:t}):null]}),r?(0,Vt.jsx)("div",{className:"bb-materialPanelBody",style:i?{opacity:.45,pointerEvents:"none"}:void 0,children:n}):null]})}function nr({title:e,open:t,onToggle:n,trailing:i,children:r,tooltip:a}){let o=a?`${e}: ${a}`:e;return(0,Vt.jsxs)("div",{className:"bb-section",children:[(0,Vt.jsxs)("button",{type:"button",className:"bb-sectionHeaderButton",onClick:n,"aria-expanded":t,title:o,children:[(0,Vt.jsxs)("span",{className:"bb-sectionHeaderMain",children:[(0,Vt.jsx)(Oo.ChevronDown,{size:15,className:`bb-sectionChevron ${t?"bb-sectionChevron--open":""}`}),(0,Vt.jsx)("h2",{className:"bb-sectionTitle",children:e}),a?(0,Vt.jsx)("span",{className:"bb-sectionHelp",title:o,"aria-label":o,role:"img",onClick:s=>s.stopPropagation(),children:(0,Vt.jsx)(Oo.Info,{size:13})}):null]}),i?(0,Vt.jsx)("span",{onClick:s=>s.stopPropagation(),children:i}):null]}),t?(0,Vt.jsx)("div",{className:"bb-sectionBody",children:r}):null]})}function B0({checked:e,onChange:t,label:n}){return(0,Vt.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Vt.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Vt.jsx)("span",{className:"se-switchTrack",children:(0,Vt.jsx)("span",{className:"se-switchThumb"})})]})}var yh=require("react"),F0=require("lucide-react");var O0=["front","back","double"],z0=["normal","additive"];var Bd=require("react/jsx-runtime");function hr({panelKey:e,title:t,tooltip:n,toggleLabel:i,controls:r,children:a,requiredTier:o}){let{openMaterialPanels:s,materialPanelEnabled:c,onToggleMaterialPanel:l,onSetMaterialPanelState:u}=r,d=o?.locked??!1;return(0,Bd.jsx)(I0,{title:t,tooltip:n,disabled:d||!c[e],open:s[e],onToggle:()=>l(e),trailing:(0,Bd.jsx)(B0,{checked:!d&&c[e],onChange:d?()=>{}:p=>u(e,p),label:i??`Toggle ${t}`}),children:d&&o?(0,Bd.jsx)(tr,{requiredTier:o.tier,feature:t}):a})}var ml=require("react"),Od=require("react-colorful"),zo=require("lucide-react");var je=require("react/jsx-runtime");function gn({label:e,value:t,placeholder:n,onChange:i}){let r=(0,ml.useRef)(null);return(0,je.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,je.jsx)("label",{className:"bb-label",children:e}),(0,je.jsxs)("div",{className:"bb-fileField",children:[(0,je.jsx)("input",{className:"bb-input bb-fileField-input",placeholder:n,value:t,onChange:a=>{let o=a.target.value;!o&&t&&Ou(t),i(o)}}),(0,je.jsx)("button",{type:"button",className:"bb-fileFieldButton",onClick:()=>r.current?.click(),"aria-label":`Select file for ${e}`,title:`Select file for ${e}`,children:(0,je.jsx)(zo.FileUp,{size:20})}),(0,je.jsx)("input",{ref:r,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif",className:"bb-hiddenInput",onChange:a=>{let o=a.target.files?.[0];if(!o)return;let s=Ff(o);t&&t!==s&&Ou(t),rc(s,URL.createObjectURL(o)),i(s),a.target.value=""}})]})]})}function Oa({label:e,value:t,fallback:n="#ffffff",onChange:i}){let[r,a]=(0,ml.useState)(!1),o=t||n,s=(0,ml.useRef)(null);return(0,je.jsxs)("div",{className:"bb-field",children:[(0,je.jsx)("span",{className:"bb-label",children:e}),(0,je.jsx)("div",{className:"se-fieldInline",children:(0,je.jsx)("span",{ref:s,style:{display:"inline-flex"},children:(0,je.jsx)(Od.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>a(c=>!c),style:{background:o,color:Bo(o)},color:o,onChange:i})})}),r?(0,je.jsx)(dh,{anchorRef:s,onClose:()=>a(!1),children:(0,je.jsx)(Od.HexColorPicker,{color:o,onChange:i})}):null]})}function fl({label:e,checked:t,onChange:n}){return(0,je.jsxs)("label",{className:"bb-checkbox",children:[(0,je.jsx)("input",{type:"checkbox",checked:t,onChange:i=>n(i.target.checked)}),e]})}function U0({label:e,value:t,min:n,max:i,step:r,placeholder:a,disabled:o,onChange:s}){return(0,je.jsxs)("div",{className:"bb-field",children:[(0,je.jsx)("label",{className:"bb-label",children:e}),(0,je.jsx)("input",{className:"bb-input",type:"number",min:n,max:i,step:r,placeholder:a,disabled:o,value:t??"",onChange:c=>s(c.target.value===""?void 0:Number(c.target.value))})]})}function WS(e,t){let n=t<1?Math.ceil(-Math.log10(t)):0,i=10**Math.max(n,0);return Math.round(e*i)/i}function xh({label:e,value:t,min:n,max:i,step:r=.01,disabled:a,onChange:o}){let s=t??0,c=u=>{let d=u;return n!==void 0&&(d=Math.max(n,d)),i!==void 0&&(d=Math.min(i,d)),d},l=u=>{o(c(WS(s+u*r,r)))};return(0,je.jsxs)("div",{className:"bb-field",children:[(0,je.jsx)("label",{className:"bb-label",children:e}),(0,je.jsxs)("div",{className:"bb-numberStepper",children:[(0,je.jsx)("button",{type:"button",className:"bb-numberStepper-btn",disabled:a,onClick:()=>l(-1),"aria-label":`Decrease ${e}`,title:`Decrease ${e}`,children:(0,je.jsx)(zo.Minus,{size:12})}),(0,je.jsx)("input",{className:"bb-input bb-numberStepper-input",type:"number",min:n,max:i,step:r,disabled:a,value:s,onChange:u=>{u.target.value!==""&&o(c(Number(u.target.value)))}}),(0,je.jsx)("button",{type:"button",className:"bb-numberStepper-btn",disabled:a,onClick:()=>l(1),"aria-label":`Increase ${e}`,title:`Increase ${e}`,children:(0,je.jsx)(zo.Plus,{size:12})})]})]})}function Uo({label:e,value:t,options:n,onChange:i}){return(0,je.jsxs)("div",{className:"bb-field",children:[(0,je.jsx)("label",{className:"bb-label",children:e}),(0,je.jsx)("select",{className:"bb-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,je.jsx)("option",{value:r,children:r},r))})]})}function zt({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,je.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,je.jsx)("label",{className:"bb-label",children:e}),(0,je.jsxs)("div",{className:"bb-sliderField",children:[(0,je.jsx)("input",{className:`bb-slider ${t===void 0?"bb-slider--unset":""}`,type:"range",min:n,max:i,step:r,value:t??n,onChange:s=>a(Number(s.target.value))}),(0,je.jsx)("input",{className:"bb-input bb-input--compact",type:"number",min:n,max:i,step:r,value:t??"",onChange:s=>a(s.target.value===""?void 0:Number(s.target.value))})]})]})}var W=require("react/jsx-runtime");function V0({selectedItem:e,selectedMaterial:t,pbrWorkflow:n,onPbrWorkflowChange:i,openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s,updateSelectedMaterial:c,setSelectedTexturePath:l,isTexturePositioningEnabled:u,onConfirmTexturePosition:d}){let p={openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s},{tier:g}=Er(),f=Bi(g,"starter"),v={tier:"starter",locked:!f},[E,S]=(0,yh.useState)("roughness"),[b,x]=(0,yh.useState)("factor"),R=(y,m)=>{c(e,A=>{if(!A?.texture?.path)return A??{};let C=A.texture.offset??[0,0],D=[C[0],C[1]];return D[y]=m,{...A,texture:{...A.texture,offset:D}}})},w=y=>{c(e,m=>{if(!m?.texture?.path)return m??{};let A=(y%360+360)%360;return{...m,texture:{...m.texture,rotation:A*Math.PI/180}}})},P=()=>{l(e,"texture","")};return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(hr,{panelKey:"pbr",title:"PBR Maps",tooltip:"Controls the base color and workflow used for physically based shading.",controls:p,children:f?(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(Uo,{label:"Workflow",value:n,options:["metalness","specular"],onChange:i}),(0,W.jsx)("div",{className:"bb-field bb-field--full",children:(0,W.jsx)("p",{className:"bb-note",style:{margin:0},children:n==="metalness"?"Metalness workflow maps directly to the underlying physical material.":"Specular workflow exposes the same physical material with non-metal specular controls; it does not switch to a separate spec/gloss shader."})}),(0,W.jsx)(gn,{label:n==="specular"?"Albedo texture path":"Base color texture path",placeholder:"materials/oak-wood.jpg",value:t?.texture?.path??"",onChange:y=>l(e,"texture",y)}),t?.texture?.path?(0,W.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,W.jsxs)("div",{className:"bb-fieldLabel",style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,W.jsx)("span",{className:"bb-label",children:"Texture position"}),(0,W.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:P,title:"Remove the base color texture and its position offset",children:[(0,W.jsx)(F0.Trash2,{size:14,style:{marginRight:4,verticalAlign:"-2px"}}),"Remove texture"]})]}),(0,W.jsxs)("div",{className:"bb-grid",style:{marginTop:6},children:[(0,W.jsx)(xh,{label:"Offset X",value:t?.texture?.offset?.[0]??0,step:.01,onChange:y=>R(0,y)}),(0,W.jsx)(xh,{label:"Offset Y",value:t?.texture?.offset?.[1]??0,step:.01,onChange:y=>R(1,y)})]}),(0,W.jsx)(zt,{label:"Rotation",value:((t?.texture?.rotation??0)*180/Math.PI%360+360)%360,min:0,max:360,step:1,onChange:y=>w(y??0)}),u?(0,W.jsx)("button",{type:"button",className:"bb-button bb-button--primary",style:{marginTop:8},onClick:d,title:"Confirm this texture position and exit positioning mode",children:"Done positioning"}):(0,W.jsx)("p",{className:"bb-note",style:{margin:"6px 0 0"},children:"Double-click the object in the preview to drag its texture directly (scroll to zoom), or edit its offset numerically once positioning."})]}):null,(0,W.jsx)(Oa,{label:n==="specular"?"Albedo color":"Base color",value:t?.baseColor??"#ffffff",onChange:y=>c(e,m=>({...m,baseColor:y}))}),n==="metalness"?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(zt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,metalness:y}))}),(0,W.jsx)(gn,{label:"Metalness map path",placeholder:"materials/body-metalness.jpg",value:t?.metalnessMap?.path??"",onChange:y=>l(e,"metalnessMap",y)})]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(zt,{label:"Specular intensity",value:t?.specularIntensity,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,specularIntensity:y}))}),(0,W.jsx)(Oa,{label:"Specular color",value:t?.specularColor??"#ffffff",onChange:y=>c(e,m=>({...m,specularColor:y}))}),(0,W.jsx)(gn,{label:"Specular intensity map path",placeholder:"materials/body-specular-intensity.jpg",value:t?.specularIntensityMap?.path??"",onChange:y=>l(e,"specularIntensityMap",y)}),(0,W.jsx)(gn,{label:"Specular color map path",placeholder:"materials/body-specular-color.jpg",value:t?.specularColorMap?.path??"",onChange:y=>l(e,"specularColorMap",y)})]}),(0,W.jsx)(zt,{label:"Specular F0 / reflectivity",value:t?.reflectivity,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,reflectivity:y}))})]}):(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(Oa,{label:"Base color",value:t?.baseColor??"#ffffff",onChange:y=>c(e,m=>({...m,baseColor:y}))}),(0,W.jsx)(zt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,metalness:y}))}),(0,W.jsx)("div",{className:"bb-field bb-field--full",children:(0,W.jsx)(tr,{requiredTier:"starter",feature:"Texture maps, the specular workflow, and reflectivity"})})]})}),(0,W.jsx)(hr,{panelKey:"roughness",requiredTier:v,title:"Roughness / Glossiness",tooltip:"Adjusts how matte or shiny the surface appears.",toggleLabel:"Toggle Roughness and Glossiness",controls:p,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(Uo,{label:"Mode",value:E,options:["roughness","glossiness"],onChange:S}),(0,W.jsx)("div",{className:"bb-field bb-field--full",children:(0,W.jsx)("p",{className:"bb-note",style:{margin:0},children:E==="roughness"?"Roughness: 0 is glossy, 1 is matte.":"Glossiness is the inverse of roughness (glossiness = 1 \u2212 roughness)"})}),E==="roughness"?(0,W.jsx)(zt,{label:"Roughness",value:t?.roughness,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,roughness:y}))}):(0,W.jsx)(zt,{label:"Glossiness",value:t?.roughness===void 0?void 0:1-t.roughness,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,roughness:y===void 0?void 0:1-y}))}),(0,W.jsx)(gn,{label:E==="glossiness"?"Glossiness map path (applied as roughness)":"Roughness map path",placeholder:"materials/body-roughness.jpg",value:t?.roughnessMap?.path??"",onChange:y=>l(e,"roughnessMap",y)})]})}),(0,W.jsx)(hr,{panelKey:"emission",requiredTier:v,title:"Emission",tooltip:"Makes the material self-illuminated with emissive color and intensity.",controls:p,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(Oa,{label:"Emissive color",value:t?.emissive??"#000000",fallback:"#000000",onChange:y=>c(e,m=>({...m,emissive:y}))}),(0,W.jsx)(zt,{label:"Emissive intensity",value:t?.emissiveIntensity,min:0,max:10,step:.1,onChange:y=>c(e,m=>({...m,emissiveIntensity:y}))}),(0,W.jsx)(gn,{label:"Emissive map path",placeholder:"materials/body-emissive.jpg",value:t?.emissiveMap?.path??"",onChange:y=>l(e,"emissiveMap",y)})]})}),(0,W.jsx)(hr,{panelKey:"opacity",requiredTier:v,title:"Opacity",tooltip:"Controls transparency, alpha testing, and blending behavior.",controls:p,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(zt,{label:"Opacity",value:t?.opacity,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,opacity:y}))}),(0,W.jsx)(zt,{label:"Alpha test",value:t?.alphaTest,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,alphaTest:y}))}),(0,W.jsx)(gn,{label:"Alpha map path",placeholder:"materials/body-alpha.png",value:t?.alphaMap?.path??"",onChange:y=>l(e,"alphaMap",y)}),(0,W.jsx)(Uo,{label:"Blending mode",value:t?.blendingMode??"normal",options:z0,onChange:y=>c(e,m=>({...m,blendingMode:y}))}),(0,W.jsxs)("div",{className:"bb-field",children:[(0,W.jsx)("label",{className:"bb-label",children:"Alpha hash"}),(0,W.jsx)("div",{className:"bb-checkboxRow",children:(0,W.jsx)(fl,{label:"Use alpha hash",checked:t?.alphaHash??!1,onChange:y=>c(e,m=>({...m,alphaHash:y}))})})]}),(0,W.jsxs)("div",{className:"bb-field",children:[(0,W.jsx)("label",{className:"bb-label",children:"Dithering"}),(0,W.jsx)("div",{className:"bb-checkboxRow",children:(0,W.jsx)(fl,{label:"Use dithering",checked:t?.dithering??!1,onChange:y=>c(e,m=>({...m,dithering:y}))})})]})]})}),(0,W.jsxs)(hr,{panelKey:"normalBump",requiredTier:v,title:"Normal & Bump",tooltip:"Adds surface detail without changing the actual mesh shape.",toggleLabel:"Toggle Normal and Bump",controls:p,children:[(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(gn,{label:"Normal map path",placeholder:"materials/body-normal.jpg",value:t?.normalMap?.path??"",onChange:y=>l(e,"normalMap",y)}),(0,W.jsx)(zt,{label:"Normal scale",value:t?.normalScale,min:0,max:5,step:.01,onChange:y=>c(e,m=>({...m,normalScale:y}))}),(0,W.jsx)(gn,{label:"Bump map path",placeholder:"materials/body-bump.jpg",value:t?.bumpMap?.path??"",onChange:y=>l(e,"bumpMap",y)}),(0,W.jsx)(zt,{label:"Bump scale",value:t?.bumpScale,min:0,max:5,step:.01,onChange:y=>c(e,m=>({...m,bumpScale:y}))})]}),(0,W.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,W.jsx)(fl,{label:"Flip normal Y",checked:t?.flipNormalY??!1,onChange:y=>c(e,m=>({...m,flipNormalY:y}))})})]}),(0,W.jsx)(hr,{panelKey:"displacement",requiredTier:v,title:"Displacement",tooltip:"Offsets geometry using a texture to create real surface height.",controls:p,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(gn,{label:"Displacement map path",placeholder:"materials/body-displacement.jpg",value:t?.displacementMap?.path??"",onChange:y=>l(e,"displacementMap",y)}),(0,W.jsx)(zt,{label:"Displacement scale",value:t?.displacementScale,min:-5,max:5,step:.01,onChange:y=>c(e,m=>({...m,displacementScale:y}))}),(0,W.jsx)(zt,{label:"Displacement bias",value:t?.displacementBias,min:-5,max:5,step:.01,onChange:y=>c(e,m=>({...m,displacementBias:y}))})]})}),(0,W.jsx)(hr,{panelKey:"ao",requiredTier:v,title:"Ambient Occlusion",tooltip:"Darkens creases and contact areas to add depth.",controls:p,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(gn,{label:"AO map path",placeholder:"materials/body-ao.jpg",value:t?.aoMap?.path??"",onChange:y=>l(e,"aoMap",y)}),(0,W.jsx)(zt,{label:"AO intensity",value:t?.aoMapIntensity,min:0,max:5,step:.01,onChange:y=>c(e,m=>({...m,aoMapIntensity:y}))})]})}),(0,W.jsxs)(hr,{panelKey:"clearcoat",requiredTier:v,title:"Clearcoat",tooltip:"Adds a glossy protective layer on top of the base material.",controls:p,children:[(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(gn,{label:"Clearcoat map path",placeholder:"materials/body-clearcoat.jpg",value:t?.clearcoatMap?.path??"",onChange:y=>l(e,"clearcoatMap",y)}),(0,W.jsx)(zt,{label:"Clearcoat",value:t?.clearcoat,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,clearcoat:y}))}),(0,W.jsx)(gn,{label:"Clearcoat roughness map path",placeholder:"materials/body-clearcoat-roughness.jpg",value:t?.clearcoatRoughnessMap?.path??"",onChange:y=>l(e,"clearcoatRoughnessMap",y)}),(0,W.jsx)(zt,{label:"Clearcoat roughness",value:t?.clearcoatRoughness,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,clearcoatRoughness:y}))}),(0,W.jsx)(gn,{label:"Clearcoat normal map path",placeholder:"materials/body-clearcoat-normal.jpg",value:t?.clearcoatNormalMap?.path??"",onChange:y=>l(e,"clearcoatNormalMap",y)}),(0,W.jsx)(zt,{label:"Clearcoat normal scale",value:t?.clearcoatNormalScale,min:0,max:5,step:.01,onChange:y=>c(e,m=>({...m,clearcoatNormalScale:y}))})]}),(0,W.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,W.jsx)(fl,{label:"Flip clearcoat normal Y",checked:t?.flipClearcoatNormalY??!1,onChange:y=>c(e,m=>({...m,flipClearcoatNormalY:y}))})})]}),(0,W.jsx)(hr,{panelKey:"sheen",requiredTier:v,title:"Sheen",tooltip:"Adds a soft fabric-like sheen on grazing angles.",controls:p,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(zt,{label:"Sheen",value:t?.sheen,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,sheen:y}))}),(0,W.jsx)(Oa,{label:"Sheen color",value:t?.sheenColor??"#ffffff",onChange:y=>c(e,m=>({...m,sheenColor:y}))}),(0,W.jsx)(gn,{label:"Sheen color map path",placeholder:"materials/body-sheen-color.jpg",value:t?.sheenColorMap?.path??"",onChange:y=>l(e,"sheenColorMap",y)}),(0,W.jsx)(zt,{label:"Sheen roughness",value:t?.sheenRoughness,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,sheenRoughness:y}))}),(0,W.jsx)(gn,{label:"Sheen roughness map path",placeholder:"materials/body-sheen-roughness.jpg",value:t?.sheenRoughnessMap?.path??"",onChange:y=>l(e,"sheenRoughnessMap",y)})]})}),(0,W.jsx)(hr,{panelKey:"anisotropy",requiredTier:v,title:"Anisotropy",tooltip:"Stretches reflections in one direction for brushed or fiber-like surfaces.",controls:p,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(zt,{label:"Intensity",value:t?.anisotropy,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,anisotropy:y}))}),(0,W.jsx)(Uo,{label:"Tilt direction",value:b,options:["factor","texture"],onChange:x}),b==="factor"?(0,W.jsx)(zt,{label:"Rotation (rad)",value:t?.anisotropyRotation,min:0,max:6.28,step:.01,onChange:y=>c(e,m=>({...m,anisotropyRotation:y}))}):(0,W.jsx)(gn,{label:"Anisotropy map path",placeholder:"materials/body-anisotropy.jpg",value:t?.anisotropyMap?.path??"",onChange:y=>l(e,"anisotropyMap",y)})]})}),(0,W.jsx)(hr,{panelKey:"transmission",requiredTier:v,title:"Transmission & Volume",tooltip:"Controls glass-like transmission and how light travels through volume.",toggleLabel:"Toggle Transmission and Volume",controls:p,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(zt,{label:"Transmission",value:t?.transmission,min:0,max:1,step:.01,onChange:y=>c(e,m=>({...m,transmission:y}))}),(0,W.jsx)(gn,{label:"Transmission map path",placeholder:"materials/body-transmission.jpg",value:t?.transmissionMap?.path??"",onChange:y=>l(e,"transmissionMap",y)}),(0,W.jsx)(zt,{label:"Thickness",value:t?.thickness,min:0,max:5,step:.01,onChange:y=>c(e,m=>({...m,thickness:y}))}),(0,W.jsx)(gn,{label:"Thickness map path",placeholder:"materials/body-thickness.jpg",value:t?.thicknessMap?.path??"",onChange:y=>l(e,"thicknessMap",y)}),(0,W.jsx)(Oa,{label:"Volume tint",value:t?.attenuationColor??"#ffffff",onChange:y=>c(e,m=>({...m,attenuationColor:y}))}),(0,W.jsx)(U0,{label:"Attenuation distance",value:t?.attenuationDistance,min:0,step:.01,placeholder:"Infinity when unset",onChange:y=>c(e,m=>({...m,attenuationDistance:y}))})]})}),(0,W.jsx)(hr,{panelKey:"faces",requiredTier:v,title:"Faces Rendering",tooltip:"Chooses which side of the mesh renders and how backfaces are handled.",controls:p,children:(0,W.jsx)("div",{className:"bb-grid",children:(0,W.jsx)(Uo,{label:"Side",value:t?.side??"front",options:O0,onChange:y=>c(e,m=>({...m,side:y}))})})})]})}var j0=[{id:"wood",label:"Wood",swatch:"#8b5a2b",material:{baseColor:"#8b5a2b",metalness:0,roughness:.75,reflectivity:.04}},{id:"brushed-metal",label:"Brushed Metal",swatch:"linear-gradient(135deg, #cfcfcf, #8a8a8a)",material:{baseColor:"#c8c8c8",metalness:1,roughness:.35}},{id:"chrome",label:"Polished Chrome",swatch:"linear-gradient(135deg, #ffffff, #9aa0a6)",material:{baseColor:"#e8e8e8",metalness:1,roughness:.05}},{id:"gold",label:"Gold",swatch:"linear-gradient(135deg, #ffe9a8, #c89b2c)",material:{baseColor:"#e6b325",metalness:1,roughness:.2}},{id:"copper",label:"Copper",swatch:"linear-gradient(135deg, #e3a576, #8a4a26)",material:{baseColor:"#b87333",metalness:1,roughness:.3}},{id:"glass",label:"Glass",swatch:"linear-gradient(135deg, rgba(255,255,255,0.9), rgba(180,210,230,0.4))",material:{baseColor:"#ffffff",metalness:0,roughness:.02,reflectivity:.5,opacity:1,transmission:1,thickness:.5,attenuationColor:"#ffffff",attenuationDistance:1}},{id:"frosted-glass",label:"Frosted Glass",swatch:"linear-gradient(135deg, rgba(255,255,255,0.85), rgba(210,225,235,0.6))",material:{baseColor:"#ffffff",metalness:0,roughness:.4,reflectivity:.3,opacity:1,transmission:.9,thickness:.5}},{id:"plastic-glossy",label:"Glossy Plastic",swatch:"#dadada",material:{baseColor:"#dadada",metalness:0,roughness:.25,reflectivity:.5,clearcoat:.3,clearcoatRoughness:.1}},{id:"plastic-matte",label:"Matte Plastic",swatch:"#9a9a9a",material:{baseColor:"#9a9a9a",metalness:0,roughness:.85,reflectivity:.04}},{id:"rubber",label:"Rubber",swatch:"#1a1a1a",material:{baseColor:"#1a1a1a",metalness:0,roughness:.9,reflectivity:.02}},{id:"fabric",label:"Fabric",swatch:"#9c8a6b",material:{baseColor:"#9c8a6b",metalness:0,roughness:.95,sheen:.4,sheenColor:"#ffffff",sheenRoughness:.6}},{id:"ceramic",label:"Ceramic",swatch:"#f5f5f0",material:{baseColor:"#f5f5f0",metalness:0,roughness:.15,clearcoat:.6,clearcoatRoughness:.1}},{id:"concrete",label:"Concrete",swatch:"#9b9b93",material:{baseColor:"#9b9b93",metalness:0,roughness:.95,reflectivity:.03}}];var Fo=require("react/jsx-runtime");function H0({disabled:e,onApply:t}){return(0,Fo.jsx)("div",{className:"bb-presetGallery",children:j0.map(n=>(0,Fo.jsxs)("button",{type:"button",className:"bb-presetSwatch",disabled:e,title:`Apply ${n.label} preset`,onClick:()=>t(n.material),children:[(0,Fo.jsx)("span",{className:"bb-presetSwatchColor",style:{background:n.swatch}}),(0,Fo.jsx)("span",{className:"bb-presetSwatchLabel",children:n.label})]},n.id))})}var Vo=require("react"),oa=require("lucide-react"),Zr=require("react/jsx-runtime");function wh({disabled:e,exporting:t,onExportJson:n,onExportTs:i}){let[r,a]=(0,Vo.useState)(!1),o=(0,Vo.useRef)(null);return(0,Vo.useEffect)(()=>{if(!r)return;let s=c=>{o.current?.contains(c.target)||a(!1)};return window.addEventListener("pointerdown",s),()=>window.removeEventListener("pointerdown",s)},[r]),(0,Zr.jsxs)("div",{className:"bb-exportMenuWrapper",ref:o,children:[(0,Zr.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:e||t,onClick:()=>a(s=>!s),title:"Export",children:[(0,Zr.jsx)(oa.Download,{size:14}),t?"Exporting\u2026":"Export",(0,Zr.jsx)(oa.ChevronDown,{size:12})]}),r&&(0,Zr.jsxs)("div",{className:"bb-exportMenu",children:[(0,Zr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),n()},children:[(0,Zr.jsx)(oa.FileJson,{size:14}),"JSON"]}),(0,Zr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),i()},children:[(0,Zr.jsx)(oa.FileCode2,{size:14}),"TypeScript"]})]})]})}var Dr=require("react/jsx-runtime");function G0({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,idError:a}){return(0,Dr.jsx)(nr,{title:"Identity",open:n,onToggle:i,children:(0,Dr.jsxs)("div",{className:"bb-grid",children:[(0,Dr.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Dr.jsx)("label",{className:"bb-label",children:"Model Node ID"}),(0,Dr.jsx)("span",{className:"bb-note",children:"This is the exact mesh name from the imported model and stays locked."}),(0,Dr.jsx)("input",{className:"bb-input bb-readonly",value:t.modelObjectId,readOnly:!0})]}),(0,Dr.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Dr.jsx)("label",{className:"bb-label",children:"ID"}),(0,Dr.jsx)("input",{className:`bb-input ${a?"bb-input--error":""}`,value:t.id,onChange:o=>r(e,s=>({...s,id:o.target.value}))}),a?(0,Dr.jsx)("span",{className:"bb-status bb-status--error",children:a}):null]})]})})}var gl=require("react");var W0=["other","body","light","wheel","glass","interior","floor","wall","door","furniture","decor","electronics","seat","table","chair","window","sofa","bed","engine","headlight"],X0=["normal","hidden","selected","disabled"];var _t=require("react/jsx-runtime");function q0({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,gl.useState)(t.group??""),[s,c]=(0,gl.useState)(t.tags?.join(", ")??"");(0,gl.useEffect)(()=>{o(t.group??""),c(t.tags?.join(", ")??"")},[e,t.group,t.tags]);let l=()=>{r(e,d=>({...d,group:a.trim()||void 0}))},u=()=>{let d=[...new Set(s.split(",").map(p=>p.trim()).filter(Boolean))];r(e,p=>({...p,tags:d.length>0?d:void 0}))};return(0,_t.jsxs)(nr,{title:"Basics",open:n,onToggle:i,children:[(0,_t.jsxs)("div",{className:"bb-grid",children:[(0,_t.jsxs)("div",{className:"bb-field",children:[(0,_t.jsx)("label",{className:"bb-label",children:"Label"}),(0,_t.jsx)("input",{className:"bb-input",value:t.label??"",onChange:d=>r(e,p=>({...p,label:d.target.value}))})]}),(0,_t.jsxs)("div",{className:"bb-field",children:[(0,_t.jsx)("label",{className:"bb-label",children:"Type"}),(0,_t.jsx)("input",{className:"bb-input",list:"binding-type-suggestions",value:t.type??"other",onChange:d=>r(e,p=>({...p,type:d.target.value}))}),(0,_t.jsx)("datalist",{id:"binding-type-suggestions",children:W0.map(d=>(0,_t.jsx)("option",{value:d},d))})]}),(0,_t.jsxs)("div",{className:"bb-field",children:[(0,_t.jsx)("label",{className:"bb-label",children:"Status"}),(0,_t.jsx)("select",{className:"bb-select",value:t.status??"normal",onChange:d=>r(e,p=>({...p,status:d.target.value})),children:X0.map(d=>(0,_t.jsx)("option",{value:d,children:d},d))})]}),(0,_t.jsxs)("div",{className:"bb-field",children:[(0,_t.jsx)("label",{className:"bb-label",children:"Group"}),(0,_t.jsx)("input",{className:"bb-input",placeholder:"paint",value:a,onChange:d=>o(d.target.value),onBlur:l,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]}),(0,_t.jsxs)("div",{className:"bb-field",children:[(0,_t.jsx)("label",{className:"bb-label",children:"Tags"}),(0,_t.jsx)("input",{className:"bb-input",placeholder:"exterior, configurable",value:s,onChange:d=>c(d.target.value),onBlur:u,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]})]}),(0,_t.jsxs)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:[(0,_t.jsxs)("label",{className:"bb-checkbox",children:[(0,_t.jsx)("input",{type:"checkbox",checked:t.selectable??!1,onChange:d=>r(e,p=>({...p,selectable:d.target.checked}))}),"selectable"]}),(0,_t.jsxs)("label",{className:"bb-checkbox",children:[(0,_t.jsx)("input",{type:"checkbox",checked:t.hoverable??!1,onChange:d=>r(e,p=>({...p,hoverable:d.target.checked}))}),"hoverable"]}),(0,_t.jsxs)("label",{className:"bb-checkbox",children:[(0,_t.jsx)("input",{type:"checkbox",checked:t.visible??!1,onChange:d=>r(e,p=>({...p,visible:d.target.checked}))}),"visible"]})]})]})}var zd=require("react");var Ze=require("react/jsx-runtime"),Y0=xa.filter(e=>e.handling==="viewer"),XS=xa.filter(e=>e.handling==="host");function $0({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,zd.useState)(new Set);(0,zd.useEffect)(()=>{o(new Set)},[e]);let s=t.actions??[],c=(d,p)=>r(e,g=>({...g,actions:(g.actions??[]).map((f,v)=>v===d?p(f):f)})),l=d=>{r(e,p=>({...p,actions:(p.actions??[]).filter((g,f)=>f!==d)})),o(p=>{let g=new Set;return p.forEach(f=>{f<d?g.add(f):f>d&&g.add(f-1)}),g})},u=(d,p)=>o(g=>{let f=new Set(g);return p?f.add(d):f.delete(d),f});return(0,Ze.jsxs)(nr,{title:"Actions",open:n,onToggle:i,children:[(0,Ze.jsx)("div",{className:"bb-actionList",children:s.map((d,p)=>{let g=ys(d.id),f=a.has(p)||!g,v=d.id.trim(),E=g?null:nf(d.id),S=v.length>0&&s.some((b,x)=>x!==p&&b.id.trim()===v);return(0,Ze.jsxs)("div",{className:"bb-actionCard",children:[(0,Ze.jsxs)("div",{className:"bb-actionCardHeader",children:[(0,Ze.jsxs)("div",{className:"bb-actionCardTitle",children:["Action ",p+1]}),(0,Ze.jsx)("div",{className:"bb-actionCardMeta",children:d.type})]}),(0,Ze.jsxs)("div",{className:"bb-actionGrid",children:[(0,Ze.jsxs)("div",{className:"bb-field",children:[(0,Ze.jsx)("label",{className:"bb-label",children:"Action ID"}),(0,Ze.jsxs)("select",{className:"bb-select",value:f?Zl:d.id,onChange:b=>{let x=b.target.value;if(x===Zl){u(p,!0);return}u(p,!1);let R=ys(x);c(p,w=>({...w,id:x,label:R&&Cu(w.label)?R.label:w.label}))},children:[(0,Ze.jsx)("optgroup",{label:"Handled by the viewer",children:Y0.map(b=>(0,Ze.jsx)("option",{value:b.id,children:b.id},b.id))}),(0,Ze.jsx)("optgroup",{label:"Handled by your app",children:XS.map(b=>(0,Ze.jsx)("option",{value:b.id,children:b.id},b.id))}),(0,Ze.jsx)("option",{value:Zl,children:"Custom\u2026"})]})]}),f?(0,Ze.jsxs)("div",{className:"bb-field",children:[(0,Ze.jsx)("label",{className:"bb-label",children:"Custom action ID"}),(0,Ze.jsx)("input",{className:"bb-input",value:d.id,placeholder:"open-datasheet",onChange:b=>{u(p,!0),c(p,x=>({...x,id:b.target.value}))}})]}):null,(0,Ze.jsxs)("div",{className:"bb-field",children:[(0,Ze.jsx)("label",{className:"bb-label",children:"Label"}),(0,Ze.jsx)("input",{className:"bb-input",value:d.label,onChange:b=>c(p,x=>({...x,label:b.target.value}))})]}),g?(0,Ze.jsx)("span",{className:"bb-note",children:g.description}):v.length===0?(0,Ze.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"An action ID is required, the button renders but can never be identified in onAction."}):(0,Ze.jsxs)("span",{className:"bb-note",style:{color:"#fcd34d"},children:["Unrecognised ID, the viewer has no built-in behavior for it. Add declarative effects and execute them with useViewerActions, or handle it in onAction.",E?(0,Ze.jsxs)(Ze.Fragment,{children:[" Did you mean ",(0,Ze.jsx)("button",{type:"button",className:"bb-linkButton",onClick:()=>{u(p,!1);let b=ys(E);c(p,x=>({...x,id:E,label:b&&Cu(x.label)?b.label:x.label}))},children:E}),"?"]}):null]}),d.effects?.length?(0,Ze.jsxs)("span",{className:"bb-note",children:[d.effects.length," declarative effect",d.effects.length===1?"":"s",", execute with useViewerActions."]}):null,S?(0,Ze.jsx)("span",{className:"bb-note",style:{color:"#fcd34d"},children:"Another action on this binding uses the same ID, they will render as two identical buttons."}):null]}),(0,Ze.jsx)("div",{className:"bb-actionFooter",children:(0,Ze.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-actionRemove",onClick:()=>l(p),children:"Remove Action"})})]},p)})}),(0,Ze.jsx)("div",{style:{marginTop:10},children:(0,Ze.jsx)("button",{type:"button",className:"bb-button",onClick:()=>{let d=Y0.find(p=>!s.some(g=>g.id===p.id));r(e,p=>({...p,actions:[...p.actions??[],{id:d?.id??"",label:d?.label??"New Action",type:"command"}]})),d||u(s.length,!0)},children:"Add Action"})})]})}var Ud=require("lucide-react");var St=require("react/jsx-runtime");function K0({selectedBinding:e,open:t,onToggle:n,cameraState:i,formattedCameraState:r,savedCameraPosition:a,onSaveCameraPosition:o,onGoToSavedCamera:s,onClearSavedCamera:c,onResetView:l,onFitScene:u}){return(0,St.jsxs)(nr,{title:"Camera Position",open:t,onToggle:n,children:[(0,St.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,St.jsx)("span",{className:"bb-cameraLiveBadge",children:"LIVE"}),(0,St.jsxs)("div",{className:"se-waypointBody",children:[(0,St.jsx)("div",{className:"bb-cameraWaypointLabel",children:"Current view"}),i?(0,St.jsxs)(St.Fragment,{children:[(0,St.jsxs)("div",{className:"se-waypointCoords",children:["pos ",r?.position]}),(0,St.jsxs)("div",{className:"se-waypointCoords",children:["look ",r?.target]})]}):(0,St.jsx)("div",{className:"se-waypointCoords",children:"Move the camera to see live position"})]})]}),(0,St.jsxs)("div",{className:"bb-cameraControls bb-cameraControls--centered",children:[(0,St.jsx)("button",{type:"button",className:"bb-button bb-button--primary",onClick:o,disabled:!i,children:"Save"}),(0,St.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:l,children:"Reset View"}),(0,St.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:u,children:"Fit Scene"})]}),a?.position&&a?.target&&(0,St.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,St.jsx)("span",{className:"bb-cameraSavedBadge",children:"SAVED"}),(0,St.jsxs)("div",{className:"se-waypointBody",children:[(0,St.jsxs)("div",{className:"bb-cameraWaypointLabel",children:["For ",e.label]}),(0,St.jsxs)("div",{className:"se-waypointCoords",children:["pos [",a.position.map(d=>d.toFixed(1)).join(", "),"]"]}),(0,St.jsxs)("div",{className:"se-waypointCoords",children:["look [",a.target.map(d=>d.toFixed(1)).join(", "),"]"]})]}),(0,St.jsxs)("div",{className:"se-waypointActions",children:[(0,St.jsx)("button",{className:"se-waypointAction",onClick:s,title:"Fly camera to the saved position",children:(0,St.jsx)(Ud.MapPin,{size:15})}),(0,St.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:c,title:"Delete saved position",children:(0,St.jsx)(Ud.Trash2,{size:15})})]})]}),(0,St.jsx)("span",{className:"bb-note",children:'Tip: Position the camera how you want, then click "Save" to store this position for the selected object. The camera position updates in real-time as you navigate.'})]})}var jo=require("react"),Fd=require("lucide-react");var We=require("react/jsx-runtime"),Z0=["X","Y","Z"];var qS=.1;function _h(e){let t=e%360;return t<0?t+360:t}function J0(e){return _h(e*180/Math.PI)}function Q0(e){return e*Math.PI/180}function YS(e,t,n){let i=[...e],r=J0(e[t]);return i[t]=Q0(_h(r+n)),i}function ex({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:a,formatValue:o=l=>Number(l.toFixed(3)),ariaLabel:s,className:c}){let l=o(e),[u,d]=(0,jo.useState)(String(l)),p=(0,jo.useRef)(!1);return(0,jo.useLayoutEffect)(()=>{p.current||d(String(l))},[l]),(0,We.jsx)("input",{type:"number",className:c,step:i,min:t===-1/0?void 0:t,max:n===1/0?void 0:n,value:u,disabled:r,"aria-label":s,onFocus:()=>{p.current=!0},onChange:g=>{let f=g.target.value;if(d(f),f===""||f==="-")return;let v=Number(f);if(Number.isFinite(v)){let E=Math.max(t,Math.min(n,v));a(E)}},onBlur:()=>{p.current=!1,d(String(o(e)))}})}function $S({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:a,formatValue:o=c=>Number(c.toFixed(3)),label:s}){return(0,We.jsx)("div",{className:"bb-transformAxesGrid",children:Z0.map((c,l)=>(0,We.jsxs)("div",{className:"bb-transformAxis",children:[(0,We.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:c}),(0,We.jsx)("div",{className:"bb-transformAxisControl",children:(0,We.jsx)(ex,{className:"se-numberInput bb-transformNumberInput",step:i,min:t,max:n,value:e[l],disabled:r,formatValue:o,ariaLabel:`${c} ${s?.toLowerCase()||""}`,onChange:u=>{let d=[...e];d[l]=u,a(d)}})})]},c))})}function tx({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,moveModeEnabled:a,onToggleMoveMode:o,transformSpace:s,onTransformSpaceChange:c,originalTransform:l}){let u=t.transform?.rotation??l?.rotation??[0,0,0],d=t.transform?.position??l?.position??[0,0,0],p=(b,x)=>{let R=b.transform?.rotation??l?.rotation??[0,0,0],w=b.transform?.position??l?.position??[0,0,0],P=b.transform?.scale??l?.scale??[1,1,1],y=l?.pivotLocal??[0,0,0],m=Hv(w,R,x,P,y,l?.rotationOrder??"XYZ");return{...b,transform:{...b.transform,position:m,rotation:x}}},g=(b,x)=>{e&&r(e,R=>{let w=R.transform?.rotation??l?.rotation??[0,0,0],P=YS(w,b,x);return p(R,P)})},f=(b,x)=>{e&&r(e,R=>{let P=[...R.transform?.rotation??l?.rotation??[0,0,0]];return P[b]=Q0(_h(x)),p(R,P)})},v=(b,x)=>{e&&r(e,R=>{let P=[...R.transform?.position??l?.position??[0,0,0]];return P[b]=x,{...R,transform:{...R.transform,position:P}}})},E=(b,x)=>{e&&v(b,d[b]+x)},S=()=>{!e||!l||r(e,b=>{let x={...b.transform};return delete x.position,delete x.rotation,{...b,transform:Object.keys(x).length>0?x:void 0}})};return(0,We.jsxs)(nr,{title:"Move & Rotate",open:n,onToggle:i,tooltip:"Enable the transform gizmo to move or rotate the selected mesh on any axis. Rotation uses the object's visible center while exported position and rotation remain local GLTF transforms.",children:[(0,We.jsxs)("div",{className:"se-field",children:[(0,We.jsxs)("div",{className:"se-fieldLabel",children:[(0,We.jsxs)("span",{children:[(0,We.jsx)(Fd.Move3d,{size:14,style:{marginRight:6,verticalAlign:"-2px"}}),"Transform gizmo"]}),(0,We.jsxs)("label",{className:"se-switch","aria-label":"Toggle move mode",children:[(0,We.jsx)("input",{type:"checkbox",checked:a,onChange:b=>o(b.target.checked)}),(0,We.jsx)("span",{className:"se-switchTrack",children:(0,We.jsx)("span",{className:"se-switchThumb"})})]})]}),(0,We.jsx)("span",{className:"bb-note",children:"Select a mesh \xB7 drag the colored arrows or planes to move"})]}),(0,We.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,We.jsx)("div",{className:"se-fieldLabel",children:(0,We.jsx)("span",{children:"Axis space"})}),(0,We.jsx)("div",{className:"se-segmentedControl",children:["world","local"].map(b=>(0,We.jsx)("button",{type:"button",className:`se-segmentedOption ${s===b?"se-segmentedOption--active":""}`,onClick:()=>c(b),children:b},b))})]}),(0,We.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,We.jsx)("div",{className:"se-fieldLabel",children:(0,We.jsx)("span",{children:"Rotation (degrees)"})}),(0,We.jsx)("div",{className:"bb-transformAxesGrid",children:Z0.map((b,x)=>{let R=Math.round(J0(u[x]));return(0,We.jsxs)("div",{className:"bb-transformAxis",children:[(0,We.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:b}),(0,We.jsx)("div",{className:"bb-transformAxisControl",children:(0,We.jsx)(ex,{className:"se-numberInput bb-transformNumberInput",step:1,min:0,max:359,value:R,disabled:!e,formatValue:w=>Math.round(w),ariaLabel:`${b} rotation in degrees`,onChange:w=>f(x,w)})})]},b)})})]}),(0,We.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,We.jsx)("div",{className:"se-fieldLabel",children:(0,We.jsx)("span",{children:"Position"})}),(0,We.jsx)($S,{value:d,min:-1/0,max:1/0,step:qS,disabled:!e,label:"position",onChange:b=>{e&&r(e,x=>({...x,transform:{...x.transform,position:b}}))}})]}),(0,We.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",style:{marginTop:10,display:"inline-flex",alignItems:"center",gap:6},disabled:!e||!l,onClick:S,title:"Restore this node's position and rotation to what they were in the original model",children:[(0,We.jsx)(Fd.RotateCcw,{size:14}),"Restore original position & rotation"]})]})}var za=require("react");var Mn=require("react/jsx-runtime"),nx=(0,za.memo)(KS);function KS({bindings:e,selectedItem:t,onSelect:n,onHover:i,isOpen:r=!0,onToggle:a}){let[o,s]=(0,za.useState)(""),c=(0,za.useMemo)(()=>Object.keys(e),[e]),l=(0,za.useMemo)(()=>{let u=o.trim().toLowerCase();return u?c.filter(d=>{let p=e[d];return d.toLowerCase().includes(u)||p.label?.toLowerCase().includes(u)||(p.type??"other").toLowerCase().includes(u)}):c},[e,c,o]);return(0,Mn.jsxs)("aside",{className:`bb-sidebar bb-sidebar--right ${r?"":"bb-sidebar--collapsed"}`,children:[(0,Mn.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!r&&(0,Mn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!0),"aria-label":"Open scene nodes sidebar",title:"Open scene nodes",children:"\u2190"}),r&&(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsxs)("div",{children:[(0,Mn.jsx)("div",{className:"bb-sectionKicker",children:"Scene Nodes"}),(0,Mn.jsxs)("div",{className:"bb-sectionHeading",children:[l.length," visible entries"]})]}),(0,Mn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!1),"aria-label":"Close scene nodes sidebar",title:"Close scene nodes",children:"\u2192"})]})]}),r&&(0,Mn.jsxs)("section",{className:"bb-nodeList",children:[(0,Mn.jsx)("div",{className:"bb-search",children:(0,Mn.jsx)("input",{className:"bb-input",placeholder:"Search nodes, labels, or types",value:o,onChange:u=>s(u.target.value)})}),(0,Mn.jsx)("div",{className:"bb-nodeItems",children:l.map(u=>{let d=e[u];return(0,Mn.jsxs)("button",{type:"button",className:`bb-nodeButton ${u===t?"bb-nodeButton--active":""}`,onClick:()=>n(u),onMouseEnter:()=>i?.(u),onMouseLeave:()=>i?.(null),children:[(0,Mn.jsx)("span",{className:"bb-nodeName",children:u}),(0,Mn.jsxs)("span",{className:"bb-nodeMeta",children:[d.type??"other",d.label===Qp(u)?"":d.label||"\xB7 Untitled"]})]},u)})})]})]})}var sa=require("react/jsx-runtime");function Sh({title:e,label:t,open:n,onToggle:i,draft:r,error:a,example:o,onDraftChange:s,onCommit:c}){return(0,sa.jsx)(nr,{title:e,open:n,onToggle:i,children:(0,sa.jsxs)("div",{className:"bb-field",children:[(0,sa.jsx)("label",{className:"bb-label",children:t}),(0,sa.jsx)("textarea",{className:"bb-textarea",value:r,onChange:l=>s(l.target.value),onBlur:c}),a?(0,sa.jsx)("span",{className:"bb-status bb-status--error",children:a}):(0,sa.jsxs)("span",{className:"bb-note",children:["Use a JSON object like ",o,"."]})]})})}function rx(e,t){let n=new Map(e.animations.clips.map(a=>[a.sourceName,a])),i=t.map(({sourceName:a})=>n.get(a)??{sourceName:a,displayName:a,hidden:!1,loopMode:"repeat",speed:1}),r=e.animations.autoplayClip&&i.some(a=>a.sourceName===e.animations.autoplayClip&&!a.hidden)?e.animations.autoplayClip:null;return{clips:i,autoplayClip:r}}var vi=require("react"),ZS=100;function JS(e,t){switch(t.type){case"set":{let n=typeof t.updater=="function"?t.updater(e.present):t.updater;if(n===e.present)return e;let i=t.track?e.edits+1:e.edits;return t.coalesce?{...e,present:n,future:[],edits:i}:{past:[...e.past,e.present].slice(-ZS),present:n,future:[],edits:i}}case"undo":{if(e.past.length===0)return e;let n=e.past[e.past.length-1];return{past:e.past.slice(0,-1),present:n,future:[e.present,...e.future],edits:e.edits+1}}case"redo":{if(e.future.length===0)return e;let[n,...i]=e.future;return{past:[...e.past,e.present],present:n,future:i,edits:e.edits+1}}case"reset":return{past:[],present:t.value,future:[],edits:t.track?e.edits+1:0}}}function Mh(e,t=600){let[n,i]=(0,vi.useReducer)(JS,{past:[],present:e,future:[],edits:0}),r=(0,vi.useRef)(0),a=(0,vi.useCallback)(u=>{let d=Date.now(),p=d-r.current<t;r.current=d,i({type:"set",updater:u,coalesce:p,track:!0})},[t]),o=(0,vi.useCallback)(u=>{let d=Date.now()-r.current<t;i({type:"set",updater:u,coalesce:d,track:!1})},[t]),s=(0,vi.useCallback)(()=>{r.current=0,i({type:"undo"})},[]),c=(0,vi.useCallback)(()=>{r.current=0,i({type:"redo"})},[]),l=(0,vi.useCallback)((u,d)=>{r.current=0,i({type:"reset",value:u,track:d?.asEdit??!1})},[]);return{value:n.present,setValue:a,setValueUntracked:o,undo:s,redo:c,reset:l,canUndo:n.past.length>0,canRedo:n.future.length>0,edits:n.edits}}var lx=require("fflate");function ix(e){return JSON.stringify(e,null,2)}function ax(e){return['import { defineObjectBindings } from "@liveroom-tech/react-immersive/utils";',"",`export const objectBindings = defineObjectBindings(${JSON.stringify(e,null,2)});`,""].join(`
|
|
3691
|
-
`)
|
|
3692
|
-
`)}function bl(e,t,n){Ti(new Blob([t],{type:n}),e)}function Ch(e){return JSON.stringify(e??{},null,2)}function Th(e){return`[${e[0].toFixed(3)}, ${e[1].toFixed(3)}, ${e[2].toFixed(3)}]`}function QS(e){let t=e.style?.material;return t?Object.values(t).filter(n=>!!n&&typeof n=="object"&&typeof n.path=="string"&&n.path.trim().length>0).map(n=>n.path):[]}async function cx(e){let t=new Set;for(let r of Object.values(e))for(let a of QS(r))t.add(a);let n=[],i=[];return await Promise.all(Array.from(t).map(async r=>{let a=nc(r);if(a)try{let o=await fetch(a);if(!o.ok)throw new Error(String(o.status));n.push({path:r,blob:await o.blob()});return}catch{i.push(r);return}try{let o=await Ed(r);o&&n.push({path:r,blob:o})}catch{}})),{assets:n,failedPaths:i}}async function Ph(e,t,n,i,r){if(r.length===0){bl(e,t,n);return}let a={[e]:(0,lx.strToU8)(t)};for(let s of r)a[s.path]=new Uint8Array(await s.blob.arrayBuffer());let o=await Jl(a);Ti(new Blob([o],{type:"application/zip"}),i)}var Ah={pbr:["texture","baseColor","metalness","metalnessMap","specularIntensity","specularIntensityMap","specularColor","specularColorMap","reflectivity"],roughness:["roughness","roughnessMap"],emission:["emissive","emissiveIntensity","emissiveMap"],opacity:["opacity","alphaMap","alphaTest","alphaHash","dithering","blendingMode"],normalBump:["normalMap","normalScale","flipNormalY","bumpMap","bumpScale"],displacement:["displacementMap","displacementScale","displacementBias"],ao:["aoMap","aoMapIntensity"],clearcoat:["clearcoat","clearcoatMap","clearcoatRoughness","clearcoatRoughnessMap","clearcoatNormalMap","clearcoatNormalScale","flipClearcoatNormalY"],sheen:["sheen","sheenColor","sheenColorMap","sheenRoughness","sheenRoughnessMap"],anisotropy:["anisotropy","anisotropyRotation","anisotropyMap"],transmission:["transmission","transmissionMap","thickness","thicknessMap","attenuationColor","attenuationDistance"],faces:["side"]},dx=Object.keys(Ah);function ux(e){if(e==null)return!1;if(typeof e=="string")return e.trim().length>0;if(typeof e=="number")return Number.isFinite(e);if(typeof e=="boolean")return e;if(typeof e=="object"&&"path"in e){let t=e.path;return typeof t=="string"&&t.trim().length>0}return!1}function Eh(e){if(e)return Object.values(e).some(ux)?e:void 0}function Nr(e,t){return e?Ah[t].some(n=>ux(e[n])):!1}function Rh(e){return{pbr:Nr(e,"pbr"),roughness:Nr(e,"roughness"),emission:Nr(e,"emission"),opacity:Nr(e,"opacity"),normalBump:Nr(e,"normalBump"),displacement:Nr(e,"displacement"),ao:Nr(e,"ao"),clearcoat:Nr(e,"clearcoat"),sheen:Nr(e,"sheen"),anisotropy:Nr(e,"anisotropy"),transmission:Nr(e,"transmission"),faces:Nr(e,"faces")}}function Lh(e,t){if(t)return{...e,style:{...e.style,material:t}};if(!e.style)return e;let{material:n,...i}=e.style;return{...e,style:Object.keys(i).length>0?i:void 0}}function px(e,t){if(!e)return;let n={...e};for(let i of Ah[t])delete n[i];return n}var F=require("react/jsx-runtime"),hx="/room.glb",eM=500;function tM(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function mx(e){return`Couldn't reload ${e} from your last session. It's still saved in this browser.`}function nM(e){let t=new Date(e);return t.toDateString()===new Date().toDateString()?`today at ${t.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})}`:t.toLocaleString([],{dateStyle:"medium",timeStyle:"short"})}function Vd(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function kh(e,t){if(!Vd(e)||!Vd(t))return t??e;let n={...e};for(let[i,r]of Object.entries(t)){let a=n[i];n[i]=Vd(a)&&Vd(r)?kh(a,r):r}return n}function Dh({licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,project:a,onProjectChange:o,projectChangeDebounceMs:s=350,onModelUpload:c,onTextureUpload:l,onEditLeaseChange:u,allowModelChange:d=!0}){let p=(0,K.useRef)(null),g=(0,K.useRef)(null),f=(0,K.useRef)(null),[v,E]=(0,K.useState)(a?.model.url??null),[S,b]=(0,K.useState)(a?.model.name??""),[x,R]=(0,K.useState)(a?.model??null),[w,P]=(0,K.useState)(null),y=Mh(a?.objectBindings??{}),m=y.value,A=y.setValue,[C,D]=(0,K.useState)(!1),[$,k]=(0,K.useState)(null),[X,O]=(0,K.useState)(!1),[H,B]=(0,K.useState)("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),[se,Q]=(0,K.useState)("default"),[be,ve]=(0,K.useState)(!1),[et,Mt]=(0,K.useState)("{}"),[Yt,en]=(0,K.useState)("{}"),[Dt,ft]=(0,K.useState)(null),[tn,$t]=(0,K.useState)(null),[Cn,jt]=(0,K.useState)(!1),[nn,Ht]=(0,K.useState)(!1),[oe,$n]=(0,K.useState)(!1),[Rt,st]=(0,K.useState)({identity:!0,basics:!0,material:!1,actions:!1,camera:!1,transform:!1,metrics:!1,metadata:!1}),[Kt,Gt]=(0,K.useState)({pbr:!1,roughness:!1,emission:!1,opacity:!1,normalBump:!1,displacement:!1,ao:!1,clearcoat:!1,sheen:!1,anisotropy:!1,transmission:!1,faces:!1}),Zt=T=>st(I=>({...I,[T]:!I[T]})),Kn=T=>Gt(I=>({...I,[T]:!I[T]})),[ze,ye]=(0,K.useState)("object"),[Ce,Wt]=(0,K.useState)("General"),[gt,Jt]=(0,K.useState)("metalness"),[ee,ge]=(0,K.useState)(Rh()),we=(0,K.useRef)(null),[Je,Tt]=(0,K.useState)(!1),[Qe,bt]=(0,K.useState)(!0),[fe,He]=(0,K.useState)(!0),[tt,rn]=(0,K.useState)(!1),[vn,Tn]=(0,K.useState)(null),[Qt,Ir]=(0,K.useState)(null),[kn,Br]=(0,K.useState)(!1),[la,xn]=(0,K.useState)("world"),U=(0,K.useRef)({}),N=Mh(a?.sceneConfig??ya),q=N.value,re=N.setValue,ie=N.setValueUntracked,[me,le]=(0,K.useState)("orbit"),ke=me==="pointerLock",[vt,Nt]=(0,K.useState)(null),xt=(0,K.useRef)(null),Xt=vt?.objectKey===w&&vt?.textureKey==="texture",[ae,yt]=(0,K.useState)(null),[an,pn]=(0,K.useState)(null),Dn=pd(e,t),Nn=r0(Dn.tier),In=(0,K.useMemo)(()=>({isInsideEditor:!0,activeTab:ze,activeSubTab:Ce,tier:Nn,setActiveTab:ye,setActiveSubTab:Wt}),[ze,Ce,Nn]),on=(0,K.useRef)(null),rr=(0,K.useRef)(0),Gn=(0,K.useRef)(0),vl=(0,K.useRef)(a?`${a.id}:${a.revision}`:null),Ho=(0,K.useRef)(null),xl=(0,K.useRef)(!1),Xe=(0,K.useRef)(!1),Ua=(0,K.useRef)(a?{modelUrl:a.model.url,bindings:a.objectBindings,sceneConfig:a.sceneConfig}:null),Fa=(0,K.useRef)(void 0),xi=(0,K.useRef)(0),sn=(0,K.useRef)(null),ir=(0,K.useRef)(a?{requestId:0,modelName:a.model.name??"model",modelUrl:a.model.url,storedBindings:a.objectBindings,streaming:!!a.model.tilesetUrl}:null),Bn=(0,K.useRef)(null),Jr=(0,K.useRef)(null),ar=(0,K.useRef)(null),Va=(0,K.useRef)(!1),Te=(0,K.useRef)(null),{cameraState:Ct,resetView:Oi,focusObject:Go,fitScene:ja,setCameraState:ca,handleCameraChange:yl,handleViewerReady:wl}=yv(),or=(0,K.useCallback)(T=>{ke||ca({position:T.position,target:T.target,fov:Ct?.fov??null,zoom:Ct?.zoom??1,azimuthAngle:T.azimuthAngle,polarAngle:T.polarAngle},!0)},[ke,ca,Ct]),Or=Yv(),ct=w?m[w]??null:null,Wo=ct?.style?.material,zr=ct?.cameraState,Ha=Ct?{position:Th(Ct.position),target:Th(Ct.target)}:null,_l=(0,K.useCallback)(T=>{re(I=>{let Z=I.annotations.map(Pe=>Pe.id).join(","),te=T.map(Pe=>Pe.id).join(",");return Z===te?I:{...I,annotations:T}})},[]),mr=(0,K.useCallback)(T=>{yt(T?{annotation:T}:null)},[]);(0,K.useEffect)(()=>{if(!ct){Mt("{}"),en("{}"),ft(null),$t(null);return}Mt(Ch(ct.metrics)),en(Ch(ct.metadata)),ft(null),$t(null)},[ct]),(0,K.useEffect)(()=>{let T=Rh(Wo);if(we.current!==w){we.current=w,ge(T);return}ge(I=>{let Z=!1,te={...I};for(let Pe of dx)T[Pe]&&!I[Pe]&&(te[Pe]=!0,Z=!0);return Z?te:I})},[w,Wo]),(0,K.useEffect)(()=>()=>{on.current?.cleanup(),sn.current&&clearTimeout(sn.current)},[]);let Zn=(0,K.useCallback)((T,I)=>{let Z=bd(T);if(I){let te=new Map(Object.values(I).map(Pe=>[Pe.modelObjectId,Pe]));for(let Pe of T){let Ve=te.get(Pe);Ve&&(Z[Pe]=Ve)}}return Z},[]);(0,K.useEffect)(()=>{if(!a)return;let T=`${a.id}:${a.revision}`;if(vl.current===T)return;vl.current=T;let I=v!==a.model.url||x?.tilesetUrl!==a.model.tilesetUrl||x?.assetVersion!==a.model.assetVersion,Z=m!==a.objectBindings,te=q!==a.sceneConfig;(I||Z||te)&&(Xe.current=!0),R(a.model),b(a.model.name??"model");let Pe=a.objectBindings;if(Z){let Ve=Ho.current;Pe=Ve?Zn(Ve,a.objectBindings):a.objectBindings,y.reset(Pe)}if(te&&N.reset(a.sceneConfig),I){let Ve=++Gn.current;ir.current={requestId:Ve,modelName:a.model.name??"model",modelUrl:a.model.url,storedBindings:a.objectBindings,streaming:!!a.model.tilesetUrl},Te.current=null,P(null),D(!0),E(a.model.url)}Ua.current={modelUrl:a.model.url,bindings:Pe,sceneConfig:a.sceneConfig}},[m,Zn,a,v,q,x,y,N]);let Xo=(0,K.useRef)(o);Xo.current=o,(0,K.useEffect)(()=>{if(!a||!Xo.current||!v)return;if(!xl.current){xl.current=!0;return}let T=Ua.current;if(v===a.model.url&&m===a.objectBindings&&q===a.sceneConfig||T!==null&&v===T.modelUrl&&m===T.bindings&&q===T.sceneConfig){Xe.current=!1;return}if(ir.current)return;if(Xe.current){Xe.current=!1;return}let I=window.setTimeout(()=>{Xo.current?.({projectId:a.id,baseRevision:a.revision,model:{...x??a.model,url:v,name:S||a.model.name},objectBindings:m,sceneConfig:q},"local")},s);return()=>window.clearTimeout(I)},[m,S,v,a,s,x,q]),(0,K.useEffect)(()=>{let T=I=>{if(I.key.toLowerCase()!=="z"||!(I.metaKey||I.ctrlKey))return;let Z=I.target,te=Z?.tagName;if(te==="INPUT"||te==="TEXTAREA"||Z?.isContentEditable)return;I.preventDefault();let Pe=ze==="scene"?N:y;I.shiftKey?Pe.redo():Pe.undo()};return window.addEventListener("keydown",T),()=>window.removeEventListener("keydown",T)},[ze,y,N]);let Qr=!a&&d,yi=y.edits>0||N.edits>0,wi=(0,K.useCallback)(async(T,I)=>{if(l)return l(T,I);let Z=URL.createObjectURL(T);if(Qr)try{await Zv(Z,T)}catch(te){console.warn("[BindingBuilder] Could not store texture file for autosave:",te)}return Z},[l,Qr]),Ga=(0,K.useCallback)(async T=>(await Promise.all(Object.entries(T).map(async([I,Z])=>{let te=Z.style?.material;if(te)for(let Pe of ci){let Pt=te[Pe]?.path;if(Pt)try{let Ne=await Ed(Pt);if(!Ne){console.warn(`[BindingBuilder] No stored texture found for "${I}"'s ${Pe} ("${Pt}"). If this is meant to be an uploaded file rather than a hosted URL, it was uploaded before texture autosave existed (or this browser's storage was cleared) \u2014 re-upload it once so it's stored for future restores.`);continue}let nt=URL.createObjectURL(Ne);rc(Pt,nt)}catch(Ne){console.warn(`[BindingBuilder] Could not rehydrate "${I}"'s ${Pe}:`,Ne)}}})),T),[]);(0,K.useEffect)(()=>{if(!Qr||!yi||!v)return;let T=Bn.current;if(!T)return;let I=()=>{if(ar.current===I&&(ar.current=null),ir.current)return;let{model:te,file:Pe}=T,Ve=te.kind==="file"&&Jr.current!==te.key?Pe:void 0;$v({model:te,bindings:m,sceneConfig:q},Ve).then(()=>{Jr.current=te.kind==="file"?te.key:null,Va.current=!1}).catch(Pt=>{console.warn("[BindingBuilder] Autosave failed:",Pt),!Va.current&&(Va.current=!0,B("Couldn't autosave this session \u2014 the browser refused to store it, possibly for lack of space. Export your work to keep it."),Q("error"))})};ar.current=I;let Z=window.setTimeout(I,eM);return()=>window.clearTimeout(Z)},[Qr,yi,v,m,q]),(0,K.useEffect)(()=>{if(!Qr)return;let T=()=>ar.current?.(),I=()=>{document.visibilityState==="hidden"&&T()};return window.addEventListener("pagehide",T),document.addEventListener("visibilitychange",I),()=>{window.removeEventListener("pagehide",T),document.removeEventListener("visibilitychange",I),T()}},[Qr]),(0,K.useEffect)(()=>{if(!Qr||!v||!yi)return;let T=I=>{ar.current?.(),I.preventDefault(),I.returnValue=""};return window.addEventListener("beforeunload",T),()=>window.removeEventListener("beforeunload",T)},[Qr,v,yi]),(0,K.useEffect)(()=>{if(C||se==="default"||se==="success")return;ve(!0);let T=window.setTimeout(()=>ve(!1),4e3);return()=>window.clearTimeout(T)},[H,se,C]);let fr=(0,K.useMemo)(()=>Object.keys(m),[m]),Sl=(0,K.useMemo)(()=>!w||!ct?null:ct.id.trim()?Object.entries(m).some(([Z,te])=>Z!==w&&te.id===ct.id)?"Another binding already uses this ID.":null:"ID is required.",[m,w,ct]),Vn=(T,I)=>{A(Z=>({...Z,[T]:I(Z[T])}))},zi=(T,I)=>{Vn(T,Z=>{let te=Eh(I(Z.style?.material));return Lh(Z,te)})},Ml=(T,I,Z)=>{zi(T,te=>({...te,[I]:Z?{path:Z}:void 0}))},qo=(T,I)=>{ge(Z=>({...Z,[T]:I})),!I&&w&&Vn(w,Z=>{let te=Eh(px(Z.style?.material,T));return Lh(Z,te)})},da=(0,K.useCallback)((T,I,Z)=>{let te=ll(T),Pe=bd(te);if(Z){let Pt=new Map(Object.values(Z).map(Ne=>[Ne.modelObjectId,Ne]));for(let Ne of te){let nt=Pt.get(Ne);nt&&(Pe[Ne]=nt)}}T.updateMatrixWorld(!0);let Ve={};for(let Pt of te){let Ne=Ai(T,Pt);if(!Ne){Ve[Pt]={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],pivotLocal:[0,0,0],rotationOrder:"XYZ"};continue}let nt=Sd(Ne);Ve[Pt]={position:[Ne.position.x,Ne.position.y,Ne.position.z],rotation:[Ne.rotation.x,Ne.rotation.y,Ne.rotation.z],scale:[Ne.scale.x,Ne.scale.y,Ne.scale.z],pivotLocal:[nt.x,nt.y,nt.z],rotationOrder:Ne.rotation.order}}U.current=Ve,y.reset(Pe),P(te[0]??null),Z||ie(Pt=>({...Pt,annotations:[]})),B(`Generated ${te.length} bindings from ${I}.`),Q("success"),xi.current=100,k(100),sn.current&&clearTimeout(sn.current),sn.current=setTimeout(()=>{sn.current=null,D(!1),k(null)},400)},[y,ie]),Wa=(T,I,Z,te)=>{ar.current?.();let Pe=++Gn.current;D(!0),k(null),xi.current=0,sn.current&&(clearTimeout(sn.current),sn.current=null),Fa.current=Z;let Ve=Z?Z/1048576:0;B(Ve>=100?`Reading ${I} (${Math.round(Ve)}MB \u2014 large file, this can take a while)...`:`Reading ${I} and generating starter bindings...`),Q("default"),b(I),R(te??{url:T,name:I}),yt(null);let Pt=Te.current;if(T===v&&Pt?.url===T){ir.current=null,da(Pt.scene,I);return}ir.current={requestId:Pe,modelName:I,modelUrl:T,streaming:!!te?.tilesetUrl},E(T),y.reset({}),P(null)},jd=(0,K.useCallback)(T=>{let I=ir.current;if(!(!I||I.requestId!==Gn.current)){if(ir.current=null,Te.current={url:I.modelUrl,scene:T},I.streaming){B(`Streaming ${I.modelName}.`),Q("success"),D(!1);return}I.storedBindings&&(Xe.current=!0),da(T,I.modelName,I.storedBindings),I.restoring&&B(`Restored your last session with ${I.modelName}.`)}},[da]),Hd=(0,K.useCallback)(T=>{let I=T.map(te=>te.name);if(I.length===0)return;Ho.current=I,Xe.current=!0;let Z=Zn(I,a?.objectBindings);if(y.reset(Z),a){let te=Ua.current;Ua.current={modelUrl:te?.modelUrl??a.model.url,bindings:Z,sceneConfig:te?.sceneConfig??a.sceneConfig}}P(te=>te??I[0]??null),B(`Streaming ${I.length} bindable objects.`),Q("success"),D(!1)},[Zn,y,a]),Gd=(0,K.useCallback)(T=>{let I=ir.current;!I||I.requestId!==Gn.current||(ir.current=null,console.error(T),I.restoring?(Bn.current=null,E(null),B(mx(I.modelName))):B(`Could not read ${I.modelName}. Make sure the file is a valid GLB, GLTF, OBJ, FBX, or USDZ asset.`),Q("error"),sn.current&&(clearTimeout(sn.current),sn.current=null),xi.current=0,D(!1),k(null))},[]),Wd=(0,K.useCallback)(T=>{let I=null;if(T.lengthComputable&&T.total>0)I=T.loaded/T.total*100;else{let te=Fa.current;te&&te>0&&(I=T.loaded/te*100)}if(I===null)return;let Z=Math.min(90,Math.floor(I/10)*10);Z>xi.current&&(xi.current=Z,k(Z)),I>=99.5&&B(te=>te.startsWith("Finalizing")?te:"Finalizing model \u2014 parsing geometry and textures (large files can take a moment here)...")},[]),sr=(0,K.useCallback)(T=>{Or.handleAnimationsReady(T);let I=T.clipDetails??T.clips.map(Z=>({sourceName:Z,duration:0}));ie(Z=>({...Z,animations:rx(Z,I)}))},[Or,ie]),Xd=async()=>{on.current?.cleanup(),on.current=null,Bn.current={model:{kind:"url",url:hx,name:"room.glb"}},await Wa(hx,"room.glb")},Cl=async T=>{if(!d)return;if(c){try{D(!0),B(`Uploading ${T.name}...`),Q("default");let Z=await c(T);Bn.current={model:{kind:"url",url:Z.url,name:Z.name??T.name}},await Wa(Z.url,Z.name??T.name,T.size,Z)}catch(Z){D(!1),B(Z instanceof Error?Z.message:`Could not upload ${T.name}.`),Q("error")}return}let I;try{I=await _u(T)}catch(Z){B(Z instanceof Error?Z.message:"Could not read model file. Upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset."),Q("error");return}on.current?.cleanup(),on.current=I,Bn.current={model:{kind:"file",key:tM(),name:I.name},file:T},await Wa(I.url,I.name,T.size,{url:I.url,name:I.name})},Tl=async T=>{let I=T.target.files?.[0];I&&(await Cl(I),T.target.value="")},On=()=>{ar.current?.(),on.current?.cleanup(),on.current=null,Te.current=null,ir.current=null,Bn.current=null,U.current={},rr.current=0,jt(!1),sn.current&&(clearTimeout(sn.current),sn.current=null),xi.current=0,k(null),Fa.current=void 0,E(null),b(""),R(null),P(null),yt(null),y.reset({}),Mt("{}"),en("{}"),ft(null),$t(null),pn(null),Br(!1),ie(T=>({...T,animations:ya.animations,annotations:[]})),B("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),Q("default")},Xa=()=>{p.current?.click()},Yo=()=>{g.current?.click()},$o=async T=>{O(!0);try{let{assets:I,failedPaths:Z}=await cx(m);T==="json"?await Ph("objectBindings.json",ix(m),"application/json","objectBindings.zip",I):await Ph("objectBindings.ts",ax(m),"text/typescript","objectBindings-ts.zip",I),Z.length>0?(B(`Exported, but ${Z.length} uploaded image${Z.length===1?"":"s"} couldn't be bundled: ${Z.join(", ")}.`),Q("error")):I.length>0&&(B(`Exported with ${I.length} uploaded image${I.length===1?"":"s"} bundled into the zip.`),Q("success"))}catch(I){let Z=I instanceof Error?I.message:"Unknown export error.";B(`Failed to export bindings: ${Z}`),Q("error")}finally{O(!1)}},qd=async T=>{if(!fr.length){B("Load a model before importing bindings."),Q("error");return}let I;try{I=JSON.parse(await T.text())}catch{B(`${T.name} is not valid JSON.`),Q("error");return}if(I===null||typeof I!="object"||Array.isArray(I)){B("Expected a JSON object mapping object IDs to bindings."),Q("error");return}let Z=new Map;for(let nt of Object.values(I))if(nt!==null&&typeof nt=="object"&&typeof nt.id=="string"&&typeof nt.type=="string"&&typeof nt.modelObjectId=="string"){let zn=nt;Z.set(zn.modelObjectId,zn)}if(Z.size===0){B(`${T.name} doesn't look like an exported bindings file.`),Q("error");return}let te={...m},Pe={},Ve=0;for(let nt of Object.keys(te)){let zn=Z.get(nt);zn&&(te[nt]=zn,Pe[nt]=zn,Ve++)}if(Ve===0){B(`None of the object IDs in ${T.name} match this model \u2014 nothing imported.`),Q("error");return}let Pt=await Ga(Pe);Object.assign(te,Pt),A(te);let Ne=Z.size-Ve;B(Ne>0?`Imported ${Ve} binding${Ve===1?"":"s"} from ${T.name} (${Ne} skipped \u2014 not in this model).`:`Imported ${Ve} binding${Ve===1?"":"s"} from ${T.name}.`),Q("success")},Yd=async T=>{let I=T.target.files?.[0];I&&(await qd(I),T.target.value="")},ei=()=>{f.current?.click()},ua=async T=>{let I;try{I=JSON.parse(await T.text())}catch{B(`${T.name} is not valid JSON.`),Q("error");return}if(I===null||typeof I!="object"||Array.isArray(I)){B("Expected a JSON object with scene config sections."),Q("error");return}let Z=["model","camera","lighting","wireframe","shadows","environment","background","groundShadows","postProcessing","animations","annotations","cinematic"],te=I,Pe=Z.filter(Ve=>te[Ve]!==void 0);if(Pe.length===0){B(`${T.name} doesn't look like an exported scene config file.`),Q("error");return}re(Ve=>{let Pt={...Ve};for(let Ne of Pe)Pt[Ne]=kh(Ve[Ne],te[Ne]);return Pt}),B(`Imported ${Pe.length} section${Pe.length===1?"":"s"} from ${T.name}.`),Q("success")},Ko=async T=>{let I=T.target.files?.[0];I&&(await ua(I),T.target.value="")},Ur=T=>{T.preventDefault(),T.stopPropagation(),!(C||v)&&(rr.current+=1,jt(!0))},Pl=T=>{T.preventDefault(),T.stopPropagation(),!(C||v)&&(T.dataTransfer.dropEffect="copy",jt(!0))},pa=T=>{T.preventDefault(),T.stopPropagation(),!(C||v)&&(rr.current=Math.max(0,rr.current-1),rr.current===0&&jt(!1))},Zo=async T=>{if(T.preventDefault(),T.stopPropagation(),rr.current=0,jt(!1),C||v)return;let I=T.dataTransfer.files?.[0];I&&await Cl(I)},Ui=(T,I,Z)=>{if(!w)return;let te;try{te=JSON.parse(I)}catch{Z("Invalid JSON");return}if(te===null||typeof te!="object"||Array.isArray(te)){Z("Expected a JSON object");return}if(T==="metrics"&&Object.values(te).some(Ve=>typeof Ve!="number"||!Number.isFinite(Ve))){Z("Metrics values must be numbers");return}Vn(w,Pe=>({...Pe,[T]:te})),Z(null)},_i=(0,K.useCallback)(T=>{if(ke){le("orbit");return}if(!T){P(null);return}let I=Object.entries(m).find(([Z,te])=>te===T||Z===T.modelObjectId||te.modelObjectId===T.modelObjectId)?.[0]??null;P(I)},[ke,m]),Al=(0,K.useCallback)(async T=>{if(ke){le("orbit");return}P(T),pn(null),await Go(T)},[ke,Go]),El=(0,K.useCallback)(T=>{pn(T?m[T]??null:null)},[m]),Jo=(0,K.useCallback)(T=>$n(!T),[]),$d=(0,K.useCallback)(()=>{if(ke){B("Camera positions aren't available while Pointer Lock is the active camera controller."),Q("error");return}if(!w||!Ct)return;let T={position:Ct.position,target:Ct.target,...Ct.fov!=null?{fov:Ct.fov}:{},zoom:Ct.zoom};Vn(w,I=>({...I,cameraState:T}))},[ke,w,Ct]),Qo=(0,K.useCallback)(()=>{if(ke){B("Camera positions aren't available while Pointer Lock is the active camera controller."),Q("error");return}!zr?.position||!zr?.target||ca({position:zr.position,target:zr.target,fov:zr.fov??Ct?.fov??null,zoom:zr.zoom??Ct?.zoom??1},!0)},[ke,zr,ca,Ct]),Rl=(0,K.useCallback)(()=>{ke||w&&Vn(w,T=>({...T,cameraState:void 0}))},[ke,w]),ha=(0,K.useCallback)(async()=>{if(ke){B("Reset View isn't available while Pointer Lock is the active camera controller."),Q("error");return}await Oi()},[ke,Oi]),Ll=(0,K.useCallback)(async()=>{if(ke){B("Fit Scene isn't available while Pointer Lock is the active camera controller."),Q("error");return}await ja()},[ke,ja]),Kd=(0,K.useCallback)(()=>{B("Texture position saved."),Q("success"),xt.current?.()},[]),qa=(0,K.useCallback)(T=>{Tn(T),rn(!0)},[]),Si=(0,K.useCallback)(()=>{rn(!1),Tn(null)},[]),kl=(0,K.useCallback)(()=>{if(vn==="bindings"){if(!fr.length){Si();return}let T=bd(fr);y.reset(T,{asEdit:!0}),P(fr[0]??null),B("Object bindings reset to default values."),Q("success")}else vn==="scene"&&(N.reset(ya,{asEdit:!0}),B("Scene config reset to default values."),Q("success"));Si()},[vn,fr,y,N,Si]),Ya=(0,K.useCallback)(()=>{Ir(null)},[]),Dl=async()=>{let T;try{T=await Kv()}catch(I){console.warn("[BindingBuilder] Could not read the saved session:",I),B("Couldn't read the saved session from this browser."),Q("error");return}if(!T){B("No saved session in this browser yet \u2014 one is saved as soon as you edit a model."),Q("error");return}Ir(T)},Zd=async()=>{let T=Qt;if(Ir(null),!T)return;let{session:I,file:Z}=T,{model:te}=I;ar.current=null;let Pe=kh(ya,I.sceneConfig),Ve=Gn.current,Pt=await Ga(I.bindings);if(Gn.current!==Ve)return;let Ne;if(te.kind==="file"){if(!Z)return;let zn=Gn.current,ti;try{ti=await _u(Z)}catch($a){console.warn("[BindingBuilder] Could not read the saved model:",$a),B(mx(te.name)),Q("error");return}if(Gn.current!==zn){ti.cleanup();return}on.current?.cleanup(),on.current=ti,Ne=ti.url}else{Ne=te.url;let zn=Te.current;if(Ne===v&&zn?.url===Ne&&!ir.current){Bn.current={model:te},Jr.current=null,y.reset(Zn(ll(zn.scene),Pt)),N.reset(Pe),B(`Restored your last session with ${te.name}.`),Q("success");return}on.current?.cleanup(),on.current=null}Bn.current={model:te,file:Z??void 0},Jr.current=te.kind==="file"?te.key:null;let nt=++Gn.current;D(!0),k(null),xi.current=0,sn.current&&(clearTimeout(sn.current),sn.current=null),Fa.current=Z?.size,B(`Restoring your last session with ${te.name}...`),Q("default"),b(te.name),R({url:Ne,name:te.name}),yt(null),P(null),Te.current=null,y.reset({}),N.reset(Pe),ir.current={requestId:nt,modelName:te.name,modelUrl:Ne,storedBindings:Pt,restoring:!0},E(Ne)};return Dn.status==="checking"?(0,F.jsx)("div",{className:"bb-root bb-root--licenseChecking",children:(0,F.jsx)(va,{title:"Verifying License",message:"Checking your license key..."})}):Dn.status==="invalid"?(0,F.jsx)("div",{className:"bb-root bb-root--licenseInvalid",children:(0,F.jsx)(va,{tone:"error",title:"Invalid License",message:Dn.isLocalDomain?Dn.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})}):(0,F.jsxs)(Jp.Provider,{value:In,children:[(0,F.jsxs)("div",{className:"bb-root",children:[(0,F.jsx)("input",{ref:p,type:"file",accept:Wm,className:"bb-hiddenInput",onChange:Tl,disabled:C}),(0,F.jsx)("input",{ref:g,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:Yd,disabled:C}),(0,F.jsx)("input",{ref:f,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:Ko,disabled:C}),(0,F.jsxs)("aside",{className:`bb-sidebar bb-sidebar--left ${nn?"bb-sidebar--collapsed":""}`,children:[(0,F.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!nn&&(0,F.jsx)("h1",{className:"bb-title",children:"Binding Builder"}),(0,F.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>Ht(T=>!T),"aria-label":nn?"Open editor sidebar":"Collapse editor sidebar",title:nn?"Open editor":"Collapse editor",children:nn?"\u2192":"\u2190"})]}),!nn&&(0,F.jsxs)(F.Fragment,{children:[(0,F.jsxs)("div",{className:"bb-tabRow",children:[(0,F.jsx)("button",{type:"button",className:`bb-tab ${ze==="object"?"bb-tab--active":""}`,onClick:()=>ye("object"),children:"Object"}),(0,F.jsx)("button",{type:"button",className:`bb-tab ${ze==="scene"?"bb-tab--active":""}`,onClick:()=>ye("scene"),children:"Scene"})]}),(0,F.jsx)("section",{className:"bb-editor",children:ze==="scene"?(0,F.jsx)(F.Fragment,{children:v?(0,F.jsx)(vh,{config:q,onChange:re,activeSubTab:Ce,onActiveSubTabChange:Wt,cameraState:Ce==="Cinematic"&&Ct?{position:Ct.position,target:Ct.target,azimuthAngle:Ct.azimuthAngle,polarAngle:Ct.polarAngle}:null,onPreviewWaypoint:or,animationClipDetails:Or.clipDetails,animationPlayback:Or}):(0,F.jsx)("div",{className:"bb-emptyEditor",children:"Upload a model to edit its scene settings."})}):!ct||!w?(0,F.jsx)("div",{className:"bb-emptyEditor",children:"Select a generated node binding to edit its values."}):(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)("div",{className:"bb-editorHeader",children:(0,F.jsxs)("div",{children:[(0,F.jsx)("div",{className:"bb-sectionKicker",children:"Editing Binding"}),(0,F.jsx)("h2",{className:"bb-editorTitle",children:ct.label||w}),(0,F.jsxs)("div",{className:"bb-editorMeta",children:[(0,F.jsx)("span",{children:ct.type}),(0,F.jsx)("span",{children:ct.modelObjectId})]})]})}),(0,F.jsx)(G0,{selectedItem:w,selectedBinding:ct,open:Rt.identity,onToggle:()=>Zt("identity"),updateBinding:Vn,idError:Sl}),(0,F.jsx)(q0,{selectedItem:w,selectedBinding:ct,open:Rt.basics,onToggle:()=>Zt("basics"),updateBinding:Vn}),(0,F.jsxs)(nr,{title:"Material",open:Rt.material,onToggle:()=>Zt("material"),tooltip:"Edit the selected object's base material, textures, and surface properties.",children:[(0,F.jsx)(H0,{disabled:!w,onApply:T=>w&&zi(w,I=>({...I,...T}))}),(0,F.jsx)(V0,{selectedItem:w,selectedMaterial:Wo,pbrWorkflow:gt,onPbrWorkflowChange:Jt,openMaterialPanels:Kt,materialPanelEnabled:ee,onToggleMaterialPanel:Kn,onSetMaterialPanelState:qo,updateSelectedMaterial:zi,setSelectedTexturePath:Ml,isTexturePositioningEnabled:Xt,onConfirmTexturePosition:Kd})]}),(0,F.jsx)($0,{selectedItem:w,selectedBinding:ct,open:Rt.actions,onToggle:()=>Zt("actions"),updateBinding:Vn}),(0,F.jsx)(K0,{selectedBinding:ct,open:Rt.camera,onToggle:()=>Zt("camera"),cameraState:Ct,formattedCameraState:Ha,savedCameraPosition:zr,onSaveCameraPosition:$d,onGoToSavedCamera:Qo,onClearSavedCamera:Rl,onResetView:ha,onFitScene:Ll}),(0,F.jsx)(tx,{selectedItem:w,selectedBinding:ct,open:Rt.transform,onToggle:()=>Zt("transform"),updateBinding:Vn,moveModeEnabled:kn,onToggleMoveMode:Br,transformSpace:la,onTransformSpaceChange:xn,originalTransform:U.current[w]??null}),(0,F.jsx)(Sh,{title:"Metrics",label:"Metrics JSON",open:Rt.metrics,onToggle:()=>Zt("metrics"),draft:et,error:Dt,example:'{"area": 42}',onDraftChange:Mt,onCommit:()=>Ui("metrics",et,ft)}),(0,F.jsx)(Sh,{title:"Metadata",label:"Metadata JSON",open:Rt.metadata,onToggle:()=>Zt("metadata"),draft:Yt,error:tn,example:'{"room": "kitchen"}',onDraftChange:en,onCommit:()=>Ui("metadata",Yt,$t)})]})}),ze==="object"&&(0,F.jsxs)("div",{className:"bb-toolbar",children:[(0,F.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,F.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!y.canUndo,onClick:y.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,F.jsx)(bn.Undo2,{size:16})}),(0,F.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!fr.length,onClick:()=>qa("bindings"),title:"Reset object bindings to default",children:(0,F.jsx)(bn.ListRestart,{size:16})}),(0,F.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!y.canRedo,onClick:y.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,F.jsx)(bn.Redo2,{size:16})})]}),(0,F.jsx)("div",{className:"bb-toolbarDivider"}),(0,F.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!fr.length||C,onClick:Yo,title:"Re-apply a previously exported objectBindings.json onto this model",children:[(0,F.jsx)(bn.Upload,{size:14}),"Import"]}),(0,F.jsx)("div",{className:"bb-toolbarDivider"}),(0,F.jsx)(wh,{disabled:!fr.length||X,exporting:X,onExportJson:()=>$o("json"),onExportTs:()=>$o("ts")})]}),ze==="scene"&&(0,F.jsxs)("div",{className:"bb-toolbar",children:[(0,F.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,F.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!N.canUndo,onClick:N.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,F.jsx)(bn.Undo2,{size:16})}),(0,F.jsx)("button",{type:"button",className:"bb-iconButton",onClick:()=>qa("scene"),title:"Reset scene config to default",children:(0,F.jsx)(bn.ListRestart,{size:16})}),(0,F.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!N.canRedo,onClick:N.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,F.jsx)(bn.Redo2,{size:16})})]}),(0,F.jsx)("div",{className:"bb-toolbarDivider"}),(0,F.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!fr.length||C,onClick:ei,title:"Re-apply a previously exported sceneConfig.json",children:[(0,F.jsx)(bn.Upload,{size:14}),"Import"]}),(0,F.jsx)("div",{className:"bb-toolbarDivider"}),(0,F.jsx)(wh,{disabled:!fr.length||C,onExportJson:()=>bl("sceneConfig.json",ox(q),"application/json"),onExportTs:()=>bl("sceneConfig.ts",sx(q),"text/typescript")})]})]})]}),(0,F.jsxs)("main",{className:"bb-previewShell",children:[(0,F.jsxs)("div",{className:"bb-previewHeader",children:[(0,F.jsxs)("div",{className:"bb-previewToggles",children:[(0,F.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,F.jsx)("input",{type:"checkbox",checked:Je,onChange:T=>Tt(T.target.checked)}),"Zoom on selected"]}),(0,F.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,F.jsx)("input",{type:"checkbox",checked:Qe,onChange:T=>bt(T.target.checked)}),"Highlight on hover"]}),(0,F.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,F.jsx)("input",{type:"checkbox",checked:fe,onChange:T=>He(T.target.checked)}),"Camera controller"]})]}),(0,F.jsxs)("div",{className:"bb-previewControlsColumn",children:[(0,F.jsxs)("div",{className:"bb-previewControls",children:[(0,F.jsx)("div",{className:"bb-previewMeta",children:(0,F.jsx)("span",{children:w?`Focused: ${w}`:"Select a node to inspect it"})}),d&&!a&&(0,F.jsx)("button",{type:"button",className:"bb-restoreSessionButton",disabled:C,onClick:Dl,title:"Restore your last session \u2014 the model, its object bindings, and scene settings saved in this browser","aria-label":"Restore last session",children:(0,F.jsx)(bn.History,{size:14})}),v&&d&&!a&&(0,F.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-removeModelButton",onClick:On,children:"Remove model"})]}),v&&(0,F.jsx)("div",{className:"bb-moveHint",children:ke?(0,F.jsx)(F.Fragment,{children:"Click the preview to look around \xB7 Esc to release"}):kn?(0,F.jsx)(F.Fragment,{children:"Select a mesh \xB7 drag the colored arrows, planes, or rings"}):(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)("kbd",{children:"W"}),(0,F.jsx)("kbd",{children:"A"}),(0,F.jsx)("kbd",{children:"S"}),(0,F.jsx)("kbd",{children:"D"})," move \xB7 ",(0,F.jsx)("kbd",{children:"Space"}),"/",(0,F.jsx)("kbd",{children:"C"})," up \xB7 down \xB7 drag to look"]})})]})]}),(0,F.jsxs)("div",{className:"bb-preview",children:[(0,F.jsx)(gd,{visible:C||be,message:H,tone:se,progress:$??void 0}),v?(0,F.jsx)(lh,{modelUrl:v,tilesetUrl:x?.tilesetUrl,objectBindings:m,selectedObject:ct,onObjectSelect:_i,onObjectBindingsChange:A,onTextureUpload:wi,onObjectEditLeaseChange:(T,I)=>u?.(T.modelObjectId||T.id,I),showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,onCameraChange:yl,onViewerReady:wl,onAnnotationsChange:_l,activeAnnotation:ae?.annotation??null,onActiveAnnotationChange:mr,onAnimationsReady:sr,onSceneLoaded:jd,onLoadError:Gd,onObjectCatalog:x?.tilesetUrl?Hd:void 0,onProgress:Wd,onCameraControllerChange:le,cameraControllerType:me,onTexturePositioningChange:Nt,endTexturePositioningRef:xt,licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,sceneConfig:q,onSceneConfigChange:re,preserveDrawingBuffer:!0,disableZoom:!1,zoomOnSelected:Je,highlightOnHover:Qe,enableCameraControls:fe,moveModeEnabled:kn,objectTransformSpace:la,enableKeyboardNavigation:!0,showViewGizmo:!0,panelHoveredObject:Qe?an:null,showLoadingOverlay:!1,autoRotate:ke?!1:q.model.autoRotate??!1,autoRotateSpeed:q.model.autoRotateSpeed??1}):(0,F.jsx)("div",{className:`bb-previewPlaceholder ${Cn?"bb-previewPlaceholder--dragActive":""}`,onDragEnter:Ur,onDragOver:Pl,onDragLeave:pa,onDrop:Zo,children:(0,F.jsxs)("div",{children:[(0,F.jsx)("div",{children:"Upload a GLB, GLTF, OBJ, FBX, or USDZ model, or drag a supported model/ZIP bundle here to generate editable object bindings."}),d?(0,F.jsx)("button",{type:"button",className:"bb-previewPlaceholderButton",onClick:Xa,disabled:C,children:"Upload"}):null]})})]})]}),(0,F.jsx)(nx,{bindings:m,selectedItem:w,onSelect:Al,onHover:El,isOpen:!oe,onToggle:Jo})]}),tt&&(0,F.jsx)("div",{className:"bb-reset-overlay",onClick:Si,children:(0,F.jsxs)("div",{className:"bb-reset-dialog",onClick:T=>T.stopPropagation(),children:[(0,F.jsxs)("div",{className:"bb-reset-header",children:[(0,F.jsxs)("h3",{className:"bb-reset-title",children:[(0,F.jsx)(bn.AlertTriangle,{size:20,className:"bb-icon-warning"}),"Confirm Reset"]}),(0,F.jsx)("button",{className:"bb-reset-close",onClick:Si,children:(0,F.jsx)(bn.X,{size:20})})]}),(0,F.jsxs)("div",{className:"bb-reset-body",children:[(0,F.jsxs)("p",{className:"bb-reset-message",children:["Are you sure you want to reset"," ",(0,F.jsx)("strong",{children:vn==="bindings"?"Object Bindings":"Scene Config"}),"?"]}),(0,F.jsx)("p",{className:"bb-reset-details",children:vn==="bindings"?"This will remove all your custom changes to object properties, groups, tags, transforms, materials, actions, camera positions, metrics, and metadata.":"This will restore all scene settings (camera, lighting, environment, background, animations, annotations, etc.) to their default values."}),(0,F.jsx)("p",{className:"bb-reset-warning",children:"This action cannot be undone!"})]}),(0,F.jsxs)("div",{className:"bb-reset-footer",children:[(0,F.jsx)("button",{className:"bb-reset-btn",onClick:Si,children:"Cancel"}),(0,F.jsx)("button",{className:"bb-reset-btn-danger",onClick:kl,children:"Reset"})]})]})}),Qt&&(0,F.jsx)("div",{className:"bb-reset-overlay",onClick:Ya,children:(0,F.jsxs)("div",{className:"bb-reset-dialog",onClick:T=>T.stopPropagation(),children:[(0,F.jsxs)("div",{className:"bb-reset-header",children:[(0,F.jsxs)("h3",{className:"bb-reset-title",children:[(0,F.jsx)(bn.History,{size:20,className:"bb-icon-restore"}),"Restore Last Session"]}),(0,F.jsx)("button",{className:"bb-reset-close",onClick:Ya,children:(0,F.jsx)(bn.X,{size:20})})]}),(0,F.jsxs)("div",{className:"bb-reset-body",children:[(0,F.jsxs)("p",{className:"bb-reset-message",children:["Restore ",(0,F.jsx)("strong",{children:Qt.session.model.name}),", saved ",nM(Qt.session.savedAt),"?"]}),(0,F.jsx)("p",{className:"bb-reset-details",children:"This reloads that model with its object bindings and scene settings, replacing what's in the editor now."})]}),(0,F.jsxs)("div",{className:"bb-reset-footer",children:[(0,F.jsx)("button",{className:"bb-reset-btn",onClick:Ya,children:"Cancel"}),(0,F.jsx)("button",{className:"bb-reset-btn-restore",onClick:Zd,children:"Restore"})]})]})})]})}var fx={licenseKey:!0,dracoDecoderPath:!0,ktx2TranscoderPath:!0,meshopt:!0};function gx(e,t){let n={};for(let i of Object.keys(t))i in e&&(n[i]=e[i]);return n}var vx=require("react"),rM={"model-viewer":"@liveroom-tech/react-immersive/styles.css","simple-model-viewer":"@liveroom-tech/react-immersive/simple-model-viewer.css","binding-builder":"@liveroom-tech/react-immersive/binding-builder.css"},Nh=new Set,iM=1e3;function bx(e){return getComputedStyle(document.documentElement).getPropertyValue(`--ri-styles-${e}`).trim()!==""}function xx(e,t){(0,vx.useEffect)(()=>{if(process.env.NODE_ENV==="production"||Nh.has(e)||bx(e))return;let n,i=()=>{n=setTimeout(()=>{Nh.has(e)||bx(e)||(Nh.add(e),console.warn(`[react-immersive] ${t}'s styles aren't loaded, so it renders unstyled. Import them once, in your app's root:
|
|
3690
|
+
`}))}increaseSizeTo(e){this._target.setSize(Math.max(this._target.width,e),1)}readDataAsync(e){let{_renderer:t,_target:n}=this;return t.readRenderTargetPixelsAsync(n,0,0,e.length/4,1,e)}readData(e){let{_renderer:t,_target:n}=this;t.readRenderTargetPixels(n,0,0,e.length/4,1,e)}renderPixelToTarget(e,t,n){let{_renderer:i,_target:r}=this;Xc.min.copy(t),Xc.max.copy(t),Xc.max.x+=1,Xc.max.y+=1,i.initRenderTarget(r),i.copyTextureToTexture(e,r.texture,Xc,n,0)}},Jo=new class{constructor(){let e=null;Object.getOwnPropertyNames(M1.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new M1),e[t](...n)))})}},C1=new J.Vector2,T1=new J.Vector2,P1=new J.Vector2;function NA(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function z1(e,t,n=[,,,]){let i=3*t,r=3*t+1,o=3*t+2;return e.index&&(i=e.index.getX(i),r=e.index.getX(r),o=e.index.getX(o)),n[0]=i,n[1]=r,n[2]=o,n}function U1(e,t,n,i,r){let[o,a,s]=i,l=NA(e,t);C1.fromBufferAttribute(l,o),T1.fromBufferAttribute(l,a),P1.fromBufferAttribute(l,s),r.set(0,0,0).addScaledVector(C1,n.x).addScaledVector(T1,n.y).addScaledVector(P1,n.z)}function V1(e,t,n,i){let r=e.x-Math.floor(e.x),o=e.y-Math.floor(e.y),a=Math.floor(r*t%t),s=Math.floor(o*n%n);return i.set(a,s),i}var A1=new J.Vector2,E1=new J.Vector2,R1=new J.Vector2,OA=class extends Pp{constructor(e,t,n=null){super(e,t,n),this.channels=$n(n,"channels",[0]),this.index=$n(n,"index",null),this.texCoord=$n(n,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,n=null){let i=this.type;if(i==="BOOLEAN"||i==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return B1(e,t*this.valueLength,i,n)}},IA=class extends jf{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(OA)}getData(e,t,n,i={}){let r=this.properties;Cp(r,i);let o=Object.keys(r),a=o.map(s=>i[s]);return this.getPropertyValuesAtTexel(o,e,t,n,a),o.forEach((s,l)=>i[s]=a[l]),i}async getDataAsync(e,t,n,i={}){let r=this.properties;Cp(r,i);let o=Object.keys(r),a=o.map(s=>i[s]);return await this.getPropertyValuesAtTexelAsync(o,e,t,n,a),o.forEach((s,l)=>i[s]=a[l]),i}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,n,i,r=[]){for(;r.length<e.length;)r.push(null);r.length=e.length,Jo.increaseSizeTo(r.length);let o=this.data,a=this.definition.properties,s=this.properties,l=z1(i,t);for(let p=0,u=e.length;p<u;p++){let m=e[p];if(!a[m])continue;let f=s[m],g=o[f.index];U1(i,f.texCoord,n,l,A1),V1(A1,g.image.width,g.image.height,E1),R1.set(p,0),Jo.renderPixelToTarget(g,E1,R1)}let c=new Uint8Array(e.length*4);if(this._asyncRead)return Jo.readDataAsync(c).then(()=>(h.call(this),r));return Jo.readData(c),h.call(this),r;function h(){for(let p=0,u=e.length;p<u;p++){let m=e[p],f=s[m],g=f.type;if(r[p]=Ff(f,r[p]),!f)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!a[m]){r[p]=f.resolveDefault(r);continue}let b=f.valueLength*(f.count||1),y=f.channels.map(M=>c[4*p+M]),v=f.componentType,w=new($c(v,g))(b);if(new Uint8Array(w.buffer).set(y),f.array){let M=r[p];for(let _=0,x=M.length;_<x;_++)M[_]=f.readDataFromBuffer(w,_,M[_])}else r[p]=f.readDataFromBuffer(w,0,r[p]);r[p]=f.adjustValueScaleOffset(r[p]),r[p]=f.resolveEnumsToStrings(r[p]),r[p]=f.resolveNoData(r[p])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},zf=class{constructor(e,t,n,i=null,r=null){let{schema:o,propertyTables:a=[],propertyTextures:s=[],propertyAttributes:l=[]}=e,{enums:c,classes:h}=o,p=a.map(f=>new DA(f,h,c,n)),u=[],m=[];i&&(i.propertyTextures&&(u=i.propertyTextures.map(f=>new IA(s[f],h,c,t))),i.propertyAttributes&&(m=i.propertyAttributes.map(f=>new kA(l[f],h,c)))),this.schema=o,this.tableAccessors=p,this.textureAccessors=u,this.attributeAccessors=m,this.object=r,this.textures=t,this.nodeMetadata=i}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let i=Math.min(e.length,t.length);n.length=i;for(let r=0;r<i;r++){let o=this.tableAccessors[e[r]];n[r]=o.getData(t[r],n[r])}}if(Array.isArray(e)!==Array.isArray(n)||Array.isArray(e)!==Array.isArray(t))throw Error("StructuralMetadata: Scalar and array inputs cannot be mixed.");return n}getPropertyTableInfo(e=null){if(e===null&&(e=this.tableAccessors.map((t,n)=>n)),Array.isArray(e))return e.map(t=>{let n=this.tableAccessors[t];return{name:n.name,className:n.definition.class}});{let t=this.tableAccessors[e];return{name:t.name,className:t.definition.class}}}getPropertyTextureData(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;for(let r=0;r<i.length;r++)n[r]=i[r].getData(e,t,this.object.geometry,n[r]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;let r=[];for(let o=0;o<i.length;o++){let a=i[o].getDataAsync(e,t,this.object.geometry,n[o]).then(s=>{n[o]=s});r.push(a)}return await Promise.all(r),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let i=0;i<n.length;i++)t[i]=n[i].getData(e,this.object.geometry,t[i]);return t}getPropertyAttributeInfo(){return this.attributeAccessors.map(e=>({name:e.name,className:e.definition.class}))}dispose(){this.textureAccessors.forEach(e=>e.dispose()),this.tableAccessors.forEach(e=>e.dispose()),this.attributeAccessors.forEach(e=>e.dispose())}},qc="EXT_structural_metadata";function BA(e,t=[]){let n=e.json.textures?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let o in r){let{index:a}=r[o];i[a]===null&&(i[a]=e.loadTexture(a))}}),Promise.all(i)}function zA(e,t=[]){let n=e.json.bufferViews?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let o in r){let{values:a,arrayOffsets:s,stringOffsets:l}=r[o];i[a]===null&&(i[a]=e.getDependency("bufferView",a)),i[s]===null&&(i[s]=e.getDependency("bufferView",s)),i[l]===null&&(i[l]=e.getDependency("bufferView",l))}}),Promise.all(i)}var F1=class{constructor(e){this.parser=e,this.name=qc}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(qc))return;let i=null,r=t.json.extensions[qc];if(r.schemaUri){let{manager:l,path:c,requestHeader:h,crossOrigin:p}=t.options,u=new URL(r.schemaUri,c).toString(),m=new J.FileLoader(l);m.setCrossOrigin(p),m.setResponseType("json"),m.setRequestHeader(h),i=m.loadAsync(u).then(f=>{r={...r,schema:f}})}let[o,a]=await Promise.all([BA(t,r.propertyTextures),zA(t,r.propertyTables),i]),s=new zf(r,o,a);e.userData.structuralMetadata=s,e.traverse(l=>{if(t.associations.has(l)){let{meshes:c,primitives:h}=t.associations.get(l),p=t.json.meshes[c]?.primitives[h];if(p&&p.extensions&&p.extensions[qc]){let u=p.extensions[qc];l.userData.structuralMetadata=new zf(r,o,a,u,l)}else l.userData.structuralMetadata=s}})}},k1=new J.Vector2,L1=new J.Vector2,D1=new J.Vector2;function UA(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var j1=class{constructor(e,t,n){this.geometry=e,this.textures=t,this.data=n,this._asyncRead=!1,this.featureIds=n.featureIds.map(i=>{let{texture:r,...o}=i,a={label:null,propertyTable:null,nullFeatureId:null,...o};return r&&(a.texture={texCoord:0,channels:[0],...r}),a})}getTextures(){return this.textures}getFeatureInfo(){return this.featureIds}getFeaturesAsync(...e){this._asyncRead=!0;let t=this.getFeatures(...e);return this._asyncRead=!1,t}getFeatures(e,t){let{geometry:n,textures:i,featureIds:r}=this,o=Array(r.length).fill(null),a=r.length;Jo.increaseSizeTo(a);let s=z1(n,e),l=s[UA(t)];for(let p=0,u=r.length;p<u;p++){let m=r[p],f="nullFeatureId"in m?m.nullFeatureId:null;if("texture"in m){let g=i[m.texture.index];U1(n,m.texture.texCoord,t,s,k1),V1(k1,g.image.width,g.image.height,L1),D1.set(p,0),Jo.renderPixelToTarget(i[m.texture.index],L1,D1)}else if("attribute"in m){let g=n.getAttribute(`_feature_id_${m.attribute}`).getX(l);g!==f&&(o[p]=g)}else{let g=l;g!==f&&(o[p]=g)}}let c=new Uint8Array(a*4);if(this._asyncRead)return Jo.readDataAsync(c).then(()=>(h(),o));return Jo.readData(c),h(),o;function h(){let p=new Uint32Array(1);for(let u=0,m=r.length;u<m;u++){let f=r[u],g="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let{channels:b}=f.texture,y=b.map(w=>c[4*u+w]);new Uint8Array(p.buffer).set(y);let v=p[0];v!==g&&(o[u]=v)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Tp="EXT_mesh_features";function N1(e,t,n){e.traverse(i=>{if(t.associations.has(i)){let{meshes:r,primitives:o}=t.associations.get(i),a=t.json.meshes[r]?.primitives[o];a&&a.extensions&&a.extensions[Tp]&&n(i,a.extensions[Tp])}})}var G1=class{constructor(e){this.parser=e,this.name=Tp}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Tp))return;let i=t.json.textures?.length||0,r=Array(i).fill(null);N1(e,t,(a,{featureIds:s})=>{s.forEach(l=>{if(l.texture&&r[l.texture.index]===null){let c=l.texture.index;r[c]=t.loadTexture(c)}})});let o=await Promise.all(r);N1(e,t,(a,s)=>{a.userData.meshFeatures=new j1(a.geometry,o,s)})}},H1=class{constructor(){this.name="CESIUM_RTC"}afterRoot(e){if(e.parser.json.extensions&&e.parser.json.extensions.CESIUM_RTC){let{center:t}=e.parser.json.extensions.CESIUM_RTC;t&&(e.scene.position.x+=t[0],e.scene.position.y+=t[1],e.scene.position.z+=t[2])}}},Gf=class{constructor(e){e={metadata:!0,rtc:!0,plugins:[],dracoLoader:null,ktxLoader:null,meshoptDecoder:null,autoDispose:!0,...e},this.tiles=null,this.metadata=e.metadata,this.rtc=e.rtc,this.plugins=e.plugins,this.dracoLoader=e.dracoLoader,this.ktxLoader=e.ktxLoader,this.meshoptDecoder=e.meshoptDecoder,this._gltfRegex=/\.(gltf|glb)$/g,this._dracoRegex=/\.drc$/g,this._loader=null}init(e){let t=new O1.GLTFLoader(e.manager);this.dracoLoader&&(t.setDRACOLoader(this.dracoLoader),e.manager.addHandler(this._dracoRegex,this.dracoLoader)),this.ktxLoader&&t.setKTX2Loader(this.ktxLoader),this.meshoptDecoder&&t.setMeshoptDecoder(this.meshoptDecoder),this.rtc&&t.register(()=>new H1),this.metadata&&(t.register(()=>new F1),t.register(()=>new G1)),this.plugins.forEach(n=>t.register(n)),e.manager.addHandler(this._gltfRegex,t),this.tiles=e,this._loader=t}dispose(){this.tiles.manager.removeHandler(this._gltfRegex),this.tiles.manager.removeHandler(this._dracoRegex),this.autoDispose&&(this.ktxLoader.dispose(),this.dracoLoader.dispose())}};var{clamp:mN}=J.MathUtils;var hN=new Uf.FullScreenQuad(new J.MeshBasicMaterial),VA=new J.DataTexture(new Uint8Array([255,255,255,255]),1,1);VA.needsUpdate=!0;var FA=0,jA=1,GA=2,HA=3,WA=4,XA=5,qA=6,$A=7,YA=8,KA=9,ZA=10,JA=11,fN=Object.freeze({NONE:FA,SCREEN_ERROR:jA,GEOMETRIC_ERROR:GA,DISTANCE:HA,DEPTH:WA,RELATIVE_DEPTH:XA,IS_LEAF:qA,RANDOM_COLOR:$A,RANDOM_NODE_COLOR:YA,CUSTOM_COLOR:KA,LOAD_ORDER:ZA,INDEXED_COLOR:JA});var gN=Math.PI/4,bN=3/5;var Zo={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var vN=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),n=e.join("_"),{_cache:i}=this;return n in i||(t.setHSL(Math.random(),1,.5),i[n]=t.getHex()),t.set(i[n])}};var yN={[Zo.NONE]:16777215,[Zo.NOT_READY]:7829367,[Zo.NO_FIT]:2250239,[Zo.DEPTH]:4473924,[Zo.OCCUPANCY]:65535,[Zo.SPACING]:16776960,[Zo.ANGLE]:16711680,[Zo.FACING]:16711935};var xN=Math.PI/180;var wN=Za*Math.PI*2;var SN=Za*Math.PI*2;var $1=require("three/examples/jsm/loaders/DRACOLoader.js"),Y1=require("three/examples/jsm/loaders/KTX2Loader.js"),K1=require("three/examples/jsm/libs/meshopt_decoder.module.js"),Fr=require("three");var Zc=require("three");function W1(e){return!!e&&!e.isInterleavedBufferAttribute}function X1(e,t,n,i){for(let r=0;r<e.count;r+=1)for(let o=0;o<e.itemSize;o+=1)t.setComponent(r,o,Zc.MathUtils.clamp(e.getComponent(r,o),n,i));return t}function QA(e){for(let t=0;t<e.count;t+=1)for(let n=0;n<e.itemSize;n+=1){let i=e.getComponent(t,n);if(!Number.isFinite(i)||i<0||i>1)return!1}return!0}var Ap=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(n=>{let i=n.geometry;if(!i)return;let r=i.attributes.normal;W1(r)&&!(r.array instanceof Int16Array)&&(i.attributes.normal=X1(r,new Zc.BufferAttribute(new Int16Array(r.count*r.itemSize),r.itemSize,!0),-1,1));for(let o of["uv","uv1","uv2","uv3"]){let a=i.attributes[o];!W1(a)||a.array instanceof Uint16Array||!QA(a)||(i.attributes[o]=X1(a,new Zc.BufferAttribute(new Uint16Array(a.count*a.itemSize),a.itemSize,!0),0,1))}})}};var Jc=require("react/jsx-runtime"),eE=0,q1=4,tE=6,nE=12,rE=4;function iE(e){try{let t=typeof window>"u"?new URL(e):new URL(e,window.location.href);return new URL("objects.json",t).toString()}catch{return null}}function Hf({url:e,rotation:t=[0,0,0],errorTarget:n=64,cacheSize:i=800,memoryBudgetMB:r=800,decoderConfig:o,objectBindings:a,itemMaterials:s,sceneConfig:l,selectedItem:c,panelHoveredItem:h,highlightOnHover:p=!0,onItemClick:u,onItemHover:m,onItemDoubleClick:f,onItemContextMenu:g,onObjectCatalog:b,onTilesetBounds:y,onModelLoaded:v,onLoadError:w,nodeRefsOut:M,onNodeRefsChange:_,materialRefsOut:x,explodeFactor:P=0,suspendBindingTransforms:d=!1}){let{camera:S,gl:C,invalidate:T}=(0,Ep.useThree)(),E=(0,Ke.useRef)(null),[k,D]=(0,Ke.useState)(null),B=(0,Ke.useRef)({onItemClick:u,onItemHover:m,onItemDoubleClick:f,onObjectCatalog:b,onTilesetBounds:y,onModelLoaded:v,onLoadError:w,onNodeRefsChange:_});B.current={onItemClick:u,onItemHover:m,onItemDoubleClick:f,onObjectCatalog:b,onTilesetBounds:y,onModelLoaded:v,onLoadError:w,onNodeRefsChange:_};let L=(0,Ke.useRef)(!0),[X,O]=(0,Ke.useState)(null),I=(0,Ke.useRef)(null);I.current=X;let re=(0,Ke.useRef)([]),ke=(0,Ke.useRef)(!1);(0,Ke.useEffect)(()=>{let ae=new ip;return O(ae),()=>ae.dispose()},[e]);let te=(0,Ke.useRef)(null),We=(0,Ke.useRef)(0),wt=(0,Ke.useRef)(!1),be=r*1024*1024,ue=(0,Ke.useRef)(!1),Ne=(0,Ke.useRef)(uf),Te=(0,Ke.useRef)(null),bn=(0,Ke.useRef)(null),Oe=(0,Ke.useRef)(null);(0,Ke.useEffect)(()=>()=>{Oe.current!==null&&clearTimeout(Oe.current)},[]);let ot=o?.dracoDecoderPath??Qh,mt=o?.ktx2TranscoderPath??ef,vn=o?.meshopt??!0,[de,ur]=(0,Ke.useState)(null);(0,Ke.useEffect)(()=>{wt.current=!1,ue.current=!1;let ae=new If(e);ae.loadAncestors=!0;let he=new dp;he.priorityCallback=ae.downloadQueue.priorityCallback,he.maxJobsPerOrigin=nE;let Ee=new Vi;Ee.priorityCallback=ae.parseQueue.priorityCallback,Ee.maxJobs=tE;let Be=new Vi;Be.priorityCallback=ae.processNodeQueue.priorityCallback,Be.maxJobs=ae.processNodeQueue.maxJobs;let _t=new Oc;_t.unloadPriorityCallback=ae.lruCache.unloadPriorityCallback,ae.downloadQueue=he,ae.parseQueue=Ee,ae.processNodeQueue=Be,ae.lruCache=_t;let Je=ot?new $1.DRACOLoader().setDecoderPath(ot).setWorkerLimit(rE):null,et=mt?new Y1.KTX2Loader().setTranscoderPath(mt).detectSupport(C):null;return ae.registerPlugin(new Gf({dracoLoader:Je,ktxLoader:et,meshoptDecoder:vn?K1.MeshoptDecoder:null,autoDispose:!1})),ae.registerPlugin(new Vf({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),ae.registerPlugin(new Ap),ur(ae),window.__riTiles=ae,()=>{ae.forEachLoadedModel(ve=>lc(ve)),ae.dispose(),Je?.dispose(),et?.dispose(),ur(ve=>ve===ae?null:ve)}},[ot,C,mt,vn,e]),(0,Ke.useEffect)(()=>{de&&(Ne.current=uf,Te.current=null,de.errorTarget=n,de.lruCache.maxSize=i,de.lruCache.minSize=Math.max(1,Math.floor(i*.75)),de.lruCache.maxBytesSize=be,de.lruCache.minBytesSize=be*.75,T())},[i,n,T,be,de]);let jt=(0,Ke.useMemo)(()=>{let ae=a??{};return{objectBindings:ae,keyByModelObject:R0(ae),itemMaterials:s,shadingMode:l?.model.shading??"lit",rendererMode:l?.model.renderer??"pbr",selectedKey:c??null,hoveredKey:k0(k,h),highlightOnHover:p,suspendTransforms:d,placementFrame:de?.group.matrixWorld,invalidate:T}},[k,p,T,s,a,h,l,c,d,de]),Gt=(0,Ke.useCallback)(()=>{if(!de)return;let ae=gt.current,he=ke.current?I.current?.nodesByBinding(ae)??{}:{},Ee={};de.group.traverse(et=>{if(!et.isMesh)return;let ve=cf(et);if(!ve)return;let Qe=ae.keyByModelObject[ve]??ve;if(!ae.objectBindings[Qe])return;he[Qe]||(he[Qe]=et);let bt=et.material;bt&&(Ee[Qe]=bt)});let Be=M?.current??{},_t=Object.keys(Be),Je=_t.length!==Object.keys(he).length||_t.some(et=>Be[et]!==he[et]);M&&(M.current=he),x&&(x.current=Ee),(Je||!M)&&B.current.onNodeRefsChange?.()},[x,M,de]),ce=(0,Ke.useCallback)(ae=>np(ae,jt),[jt]),Ie=(0,Ke.useCallback)(ae=>D0(ae,jt),[jt]),zt=(0,Ke.useRef)(Ie);zt.current=Ie;let gt=(0,Ke.useRef)(jt);gt.current=jt;let Ut=(0,Ke.useCallback)(()=>{let ae=te.current,he=We.current;return!ae||he<=0?gt.current:{...gt.current,explode:{factor:he,centre:ae.centre,radius:ae.radius}}},[]);(0,Ke.useEffect)(()=>{de&&(Ie(de.group),L.current=!0,de.forEachLoadedModel(ae=>{Ie(ae),dl(ae,Ut())}),T())},[Ie,T,Ut,de]),(0,Ke.useEffect)(()=>{let ae=iE(e);if(!ae)return;let he=!1;return fetch(ae).then(Ee=>Ee.ok?Ee.json():null).then(Ee=>{he||!Ee?.objects||(re.current=Ee.objects,ke.current=Ee.bindingFrame==="gltf-identity-v2",ke.current&&I.current?.setCatalog(Ee.objects),L.current=!0,B.current.onObjectCatalog?.(Ee.objects),T())}).catch(()=>{}),()=>{he=!0}},[e,T,X]),(0,Ke.useEffect)(()=>{if(!de)return;let ae=!1,he=()=>T(),Ee=ve=>{ve.scene&&(ve.scene.traverse(Qe=>{let bt=Qe.material;for(let un of Array.isArray(bt)?bt:bt?[bt]:[])un.transparent&&un.side===Fr.DoubleSide&&(un.forceSinglePass=!0)}),zt.current(ve.scene),dl(ve.scene,Ut()),Qd(ve.scene)),L.current=!0,ae||(ae=!0,B.current.onModelLoaded?.(de.group)),T()},Be=ve=>{B.current.onLoadError?.(ve.error)},_t=ve=>{ve.scene&&(df(ve.scene),lc(ve.scene)),L.current=!0};de.setCamera(S),de.setResolutionFromRenderer(S,C),de.addEventListener("needs-update",he),de.addEventListener("load-model",Ee),de.addEventListener("load-error",Be),de.addEventListener("dispose-model",_t);let Je=()=>{L.current=!0,T()};de.addEventListener("tile-visibility-change",Je);let et=()=>{let ve=de.root;ve&&!ve.content?.uri&&ve.refine==="REPLACE"&&(ve.refine="ADD",T())};return de.addEventListener("load-root-tileset",et),T(),()=>{de.removeEventListener("needs-update",he),de.removeEventListener("load-model",Ee),de.removeEventListener("load-error",Be),de.removeEventListener("dispose-model",_t),de.removeEventListener("tile-visibility-change",Je),de.removeEventListener("load-root-tileset",et),df(de.group),de.deleteCamera(S),M&&(M.current={}),x&&(x.current={})}},[S,C,T,x,M,Ut,de]);let Ae=Pu(ae=>ce(ae)?.binding??null,g),Ce=(0,Ke.useCallback)(ae=>{if(Ae.consumeClick())return;let he=ce(ae.object);he&&(ae.stopPropagation(),B.current.onItemClick?.(he.binding))},[ce,Ae,u]),Pt=(0,Ke.useCallback)(ae=>{let he=ce(ae.object);if(!he)return;B.current.onItemDoubleClick?.(he.binding,nl(ae))&&ae.stopPropagation()},[ce]),St=(0,Ke.useCallback)(ae=>{let he=ce(ae.object),Ee=he?.key??null;Ee!==E.current&&(E.current=Ee,D(Ee),B.current.onItemHover?.(he?.binding??null))},[ce]),dn=(0,Ke.useCallback)(()=>{E.current!==null&&(E.current=null,D(null),B.current.onItemHover?.(null))},[]);return(0,Ke.useEffect)(()=>{T()},[T,de]),(0,Ep.useFrame)((ae,he)=>{if(!de)return;if(de.setResolutionFromRenderer(S,C),ke.current&&X){let kn=X.sync(Ut(),c,d);X.updateBounds(de.root),d&&de.forEachLoadedModel(Dr=>dl(Dr,kn))}if(de.update(),!wt.current){let kn=new Fr.Box3;if(de.getBoundingBox(kn)){wt.current=!0,de.group.updateMatrixWorld(),kn.applyMatrix4(de.group.matrixWorld);let Dr=kn.getBoundingSphere(new Fr.Sphere);te.current={centre:Dr.center.clone(),radius:kn.getSize(new Fr.Vector3).length()*.5},B.current.onTilesetBounds?.(kn),T()}}L.current&&(L.current=!1,Gt());let Ee=Math.min(Math.max(P,0),1),Be=We.current;Math.abs(Be-Ee)>1e-4?(We.current=Fr.MathUtils.lerp(Be,Ee,1-Math.exp(-6*he)),dl(de.group,Ut()),T()):Be!==Ee&&(We.current=Ee,dl(de.group,Ut()),T());let _t=de,Je=de.lruCache,et=Je.isFull(),ve=Ne.current,Qe=ve.loosened&&Te.current?Te.current:{bytes:Je.maxBytesSize,items:Je.maxSize},bt=0;for(let kn of Je.usedSet??[])bt+=Je.bytesMap?.get(kn)??0;let un=!1,or=de;for(let kn of or.usedSet??[]){let Dr=kn.internal?.loadingState??q1;if(kn.traversal?.used&&kn.internal?.hasContent&&Dr>=eE&&Dr<q1){un=!0;break}}let yn=bn.current??(bn.current={world:new Fr.Matrix4,projection:new Fr.Matrix4}),Vn=!yn.world.equals(S.matrixWorld)||!yn.projection.equals(S.projectionMatrix);Vn&&(yn.world.copy(S.matrixWorld),yn.projection.copy(S.projectionMatrix));let yr={full:et,wanting:un,moved:Vn,usage:Math.max(bt/Math.max(1,Qe.bytes),(Je.usedSet?.size??0)/Math.max(1,Qe.items)),now:performance.now()},Fn=j0(ve,yr);Fn!==ve&&(Fn.loosened&&(!ve.loosened||Fn.raisedAt!==ve.raisedAt)?(ve.loosened||(Te.current=Qe),Je.maxBytesSize=Math.max(Qe.bytes,Je.cachedBytes??0)*pf,Je.maxSize=Math.ceil(Math.max(Qe.items,Je.itemSet?.size??0)*pf)):!Fn.loosened&&ve.loosened&&Te.current&&(Je.maxBytesSize=Te.current.bytes,Je.maxSize=Te.current.items,Te.current=null),Ne.current=Fn,de.errorTarget=n*Fn.factor,T()),!ue.current&&et&&yr.wanting&&Fn.factor>=kc&&(ue.current=!0,console.warn("[react-immersive] The tile memory budget is full even at the coarsest level of detail, so the model may render incompletely. This usually means the model's textures are too large for streaming \u2014 re-process it with a smaller MAX_TEXTURE_SIZE, or raise memoryBudgetMB."));let li=G0(Fn,yr);li===0?T():li!==null&&Oe.current===null&&(Oe.current=setTimeout(()=>{Oe.current=null,T()},li)),((_t.stats?.downloading??0)>0||(_t.stats?.parsing??0)>0||_t.loadProgress!==void 0&&_t.loadProgress<1&&!et)&&T()}),de?(0,Jc.jsxs)("group",{rotation:t,children:[X?(0,Jc.jsx)("primitive",{object:X.group}):null,(0,Jc.jsx)("primitive",{object:de.group,onClick:Ce,onDoubleClick:Pt,onPointerDown:g?Ae.onPointerDown:void 0,onPointerMove:St,onPointerOut:dn})]}):null}var Rp=require("three");var oE=new Rp.Matrix4().makeRotationX(Math.PI/2);function Z1(e){e.updateMatrixWorld(!0);let t=new Rp.Matrix4().copy(e.matrixWorld).invert().premultiply(oE),n=new Rp.Matrix4,i=[];for(let[r,o]of Object.entries(lo(e).nodesById)){let a=o;if(!a.isMesh||!a.geometry||!o.name)continue;let s=a.geometry;s.boundingBox||s.computeBoundingBox();let l=s.boundingBox.clone().applyMatrix4(n.multiplyMatrices(t,o.matrixWorld)),c=s.index?s.index.count:s.getAttribute("position")?.count??0;i.push({name:r,triangles:Math.floor(c/3),minimum:l.min.toArray(),maximum:l.max.toArray()})}return i.sort((r,o)=>r.name.localeCompare(o.name))}var je=require("react"),qf=require("@react-three/drei"),Qa=require("@react-three/fiber"),Si=require("three");var Wf=require("three");function gl(e){if(!e?.trim()||/[\u0000-\u001f\u007f]/.test(e))return null;try{let t=new URL(e.trim(),"https://annotation.invalid/");return t.protocol==="https:"||t.protocol==="http:"?e.trim():null}catch{return null}}function Xf(e){return e.category?.trim()??""}function J1(e,t){if(t===null)return e;let n=new Set(t.map(i=>i.trim()));return e.filter(i=>n.has(Xf(i)))}function Q1(e,t){let n=Number.isFinite(e.minDistance)?Math.max(0,e.minDistance):0,i=Number.isFinite(e.maxDistance)?Math.max(0,e.maxDistance):1/0;return t>=n&&t<=i}function bl(e){return!!e&&[e.position,e.target].every(t=>Array.isArray(t)&&t.length===3&&t.every(Number.isFinite))}function Qc(e){let t=e.camera;return{position:e.getPosition(new Wf.Vector3,!1).toArray(),target:e.getTarget(new Wf.Vector3,!1).toArray(),azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle,fov:"fov"in t?Number(t.fov):null,zoom:t.zoom}}function ed(e,t){bl(t)&&(e.setLookAt(...t.position,...t.target,!0),Number.isFinite(t.azimuthAngle)&&Number.isFinite(t.polarAngle)&&e.rotateTo(t.azimuthAngle,t.polarAngle,!0),td(e,t))}function td(e,t){let n=!1;t.fov!=null&&Number.isFinite(t.fov)&&t.fov>0&&t.fov<180&&"fov"in e.camera&&(e.camera.fov=t.fov,e.camera.updateProjectionMatrix(),n=!0),t.zoom!=null&&Number.isFinite(t.zoom)&&t.zoom>0&&e.zoomTo(t.zoom,!0),n&&e.dispatchEvent({type:"update"})}var On=require("react/jsx-runtime"),aE=.02;function ew(e,t,n=!1){let i=(0,je.useRef)(null),[r,o]=(0,je.useState)(!0),a=(0,je.useRef)(!0),s=(0,je.useMemo)(()=>new Si.Vector3,[]),l=(0,Qa.useThree)(f=>f.scene),c=(0,je.useRef)(null),h=(0,je.useMemo)(()=>new Si.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),p=(0,je.useMemo)(()=>new Si.Vector3,[]),u=(0,je.useMemo)(()=>new Si.Vector3,[]),m=(0,je.useMemo)(()=>new Si.Vector3,[]);return(0,je.useEffect)(()=>{c.current=null},[e.anchorNodeName]),(0,Qa.useFrame)(({camera:f})=>{let g=i.current,b=g?.parent;if(!g||!b)return;let y=c.current;if(e.anchorNodeName&&(!y||!y.parent)&&(y=yi(l,e.anchorNodeName),c.current=y),y?(y.updateWorldMatrix(!0,!1),p.copy(h).applyMatrix4(y.matrixWorld)):(p.copy(h),b.localToWorld(p)),t){let w=t.current.get(e.id);w||(w=new Si.Vector3,t.current.set(e.id,w)),w.copy(p)}f.getWorldPosition(s);let v=!n||Q1(e,s.distanceTo(p));v!==a.current&&(a.current=v,o(v)),m.copy(s).sub(p),m.lengthSq()>0?(m.normalize(),u.copy(p).addScaledVector(m,aE)):u.copy(p),b.worldToLocal(u),g.position.copy(u)}),{anchorRef:i,inRange:r}}function sE({annotation:e,occluders:t,worldPositionsRef:n,onClick:i,onHover:r,showAnnotationOnHover:o}){let a=Me(),[s,l]=(0,je.useState)(!1),{anchorRef:c,inRange:h}=ew(e,n,!0),p=s||!h,[u,m]=(0,je.useState)(!1),[f,g]=(0,je.useState)(1),b=(0,je.useRef)(null),y=(0,je.useRef)(null),v=(0,je.useRef)(null);(0,je.useEffect)(()=>{h||(b.current&&clearTimeout(b.current),u&&(m(!1),r?.(null)))},[h,u,r]),(0,je.useEffect)(()=>()=>{b.current&&(clearTimeout(b.current),b.current=null),v.current&&(clearTimeout(v.current),v.current=null)},[]);let w=d=>{d.stopPropagation(),d.preventDefault(),b.current&&(clearTimeout(b.current),b.current=null),b.current=window.setTimeout(()=>{i?.(e),b.current=null},10)},M=d=>{d.stopPropagation(),m(!0),g(100),v.current&&(clearTimeout(v.current),v.current=null),r?.(e)},_=d=>{d.stopPropagation(),m(!1),g(1),v.current&&clearTimeout(v.current),v.current=window.setTimeout(()=>{r?.(null),o&&r?.(null),v.current=null},50)},x=d=>{d.stopPropagation();let S=d.currentTarget;S.dataset.pointerX=String(d.clientX),S.dataset.pointerY=String(d.clientY)},P=d=>{d.stopPropagation();let S=d.currentTarget,C=parseFloat(S.dataset.pointerX||"0"),T=parseFloat(S.dataset.pointerY||"0"),E=d.clientX-C,k=d.clientY-T;Math.sqrt(E*E+k*k)<10&&w(d)};return(0,On.jsx)("group",{ref:c,children:(0,On.jsx)(qf.Html,{center:!0,occlude:t,onOcclude:l,pointerEvents:p?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:p?"none":"auto",zIndex:f},className:"annotation-html-wrapper",transparent:!0,children:(0,On.jsx)("div",{ref:y,className:`ri-annotationMarker ${u?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:p?"none":"flex"},onPointerDown:x,onPointerUp:P,onPointerEnter:M,onPointerLeave:_,onDoubleClick:d=>{d.stopPropagation(),i?.(e)},role:"button",tabIndex:0,"aria-label":a("annotationMarker",{id:e.id,title:e.title}),onKeyDown:d=>{(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),d.stopPropagation(),i?.(e))},children:(0,On.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function lE({annotation:e,occluders:t,popupRef:n,onClose:i,hideCloseButton:r=!1}){let o=Me(),[a,s]=(0,je.useState)(!1),{anchorRef:l}=ew(e),c=(0,On.jsxs)("div",{ref:n,className:"ri-viewAnnotationPopup",style:{display:a?"none":"block"},onPointerDown:h=>h.stopPropagation(),onClick:h=>h.stopPropagation(),children:[(0,On.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,On.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!r&&(0,On.jsx)("button",{onClick:h=>{h.stopPropagation(),i?.()},className:"ri-viewAnnotationClose","aria-label":o("closeAnnotation"),children:"\xD7"})]}),e.category&&(0,On.jsx)("span",{className:"ri-annotationCategory",children:e.category}),e.description&&(0,On.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description}),e.images?.map((h,p)=>{let u=gl(h.src);return u?(0,On.jsx)("img",{className:"ri-annotationImage",src:u,alt:h.alt??"",loading:"lazy"},`${u}-${p}`):null}),e.links?.map((h,p)=>{let u=gl(h.href);return u?(0,On.jsx)("a",{className:"ri-annotationLink",href:u,target:"_blank",rel:"noopener noreferrer",children:h.label||o("learnMore")},`${u}-${p}`):null})]});return(0,On.jsx)("group",{ref:l,children:(0,On.jsx)(qf.Html,{occlude:t,onOcclude:s,pointerEvents:a?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:a?"none":"auto",zIndex:1e3},transparent:!0,children:c})})}function $f({annotations:e,sceneConfig:t,activeAnnotation:n,popupRef:i,canvasRootRef:r,worldPositionsRef:o,modelLoaded:a,onAnnotationClick:s,onAnnotationHover:l,onCloseAnnotation:c,hideCloseButton:h=!1,showAnnotationOnHover:p=!1}){let u=(0,Qa.useThree)(L=>L.invalidate),m=(0,Qa.useThree)(L=>L.scene),[f,g]=(0,je.useState)(null),[b,y]=(0,je.useState)(!1),v=(0,je.useRef)(null);(0,je.useEffect)(()=>{v.current!==null&&n===null&&(g(null),y(!1)),v.current=n?.id??null},[n]);let w=(0,je.useRef)(null),M=(0,je.useRef)(null),_=(0,je.useRef)(null),x=(0,je.useMemo)(()=>{let L=[];return m.traverse(X=>{let O=X;O.isMesh&&!O.isSkinnedMesh&&L.push({current:X})}),L},[m,e,a]),P=(0,je.useCallback)(()=>{u();let L=()=>{u(),M.current=window.requestAnimationFrame(()=>{u(),M.current=null})};M.current=window.requestAnimationFrame(L)},[u]);(0,je.useEffect)(()=>{P()},[e,P]),(0,je.useEffect)(()=>{P()},[n,P]),(0,je.useEffect)(()=>()=>{M.current!==null&&window.cancelAnimationFrame(M.current),_.current&&clearTimeout(_.current)},[]);let d=n||f,S=(0,je.useMemo)(()=>d?e.find(L=>L.id===d.id)??null:null,[d,e]),C=(0,je.useCallback)(L=>{if(b&&f?.id===L.id){y(!1),g(null),c?.();return}y(!0),g(L),s?.(L)},[b,f,s,c]),T=(0,je.useCallback)(L=>{l?.(L),p&&!b&&(_.current&&(clearTimeout(_.current),_.current=null),L?g(L):_.current=window.setTimeout(()=>{g(null),c?.(),_.current=null},100))},[b,l,p,c]),E=(0,je.useCallback)(()=>{y(!1),g(null),c?.()},[c]),k=(0,je.useCallback)(L=>{let X=L.target;if(X.closest?.(".ri-annotationMarker")||X.closest?.(".ri-viewAnnotationPopup")||X.closest?.(".annotation-html-wrapper"))return;let O=r.current;O&&O.contains(X)&&(y(!1),g(null),c?.())},[r,c]),D=(0,je.useCallback)(L=>{L.key==="Escape"&&b&&(y(!1),g(null),c?.())},[b,c]);(0,je.useEffect)(()=>{let L=r.current;return L&&(L.addEventListener("click",k),L.addEventListener("pointerdown",k)),document.addEventListener("keydown",D),()=>{L&&(L.removeEventListener("click",k),L.removeEventListener("pointerdown",k)),document.removeEventListener("keydown",D)}},[r,k,D]);let B=(0,je.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(L=>L*Math.PI/180),[t?.model.rotation]);return(0,je.useEffect)(()=>{u()},[u,B]),(0,Qa.useFrame)((L,X)=>{if(!w.current)return;w.current.rotation.x=Si.MathUtils.lerp(w.current.rotation.x,B[0],1-Math.exp(-5*X)),w.current.rotation.y=Si.MathUtils.lerp(w.current.rotation.y,B[1],1-Math.exp(-5*X)),w.current.rotation.z=Si.MathUtils.lerp(w.current.rotation.z,B[2],1-Math.exp(-5*X));let{rotation:O}=w.current;Math.abs(O.x-B[0])+Math.abs(O.y-B[1])+Math.abs(O.z-B[2])>1e-4&&u()}),(0,On.jsxs)("group",{ref:w,children:[e.map(L=>{let X=`${L.worldPosition.join(",")}-${L.title}-${L.id}`;return(0,On.jsx)(sE,{annotation:L,occluders:x,worldPositionsRef:o,onClick:C,onHover:T,showAnnotationOnHover:p},X)}),S?(0,On.jsx)(lE,{annotation:S,occluders:x,popupRef:i,onClose:E,hideCloseButton:h},`popup-${S.id}`):null]})}var fo=require("react"),Dp=require("@react-three/drei");var Lp=require("react"),tw=require("@react-three/drei"),nw=require("@react-three/fiber"),_i=require("three");var kp=require("react/jsx-runtime");function es(e){return(0,nw.useThree)(n=>Ii(n.gl))?(0,kp.jsx)(cE,{...e}):(0,kp.jsx)(tw.Line,{points:e.points,color:e.color,lineWidth:e.lineWidth,dashed:e.dashed})}function cE({points:e,color:t,dashed:n=!1}){let i=(0,Lp.useMemo)(()=>{let r=new _i.BufferGeometry().setFromPoints(e.map(s=>s instanceof _i.Vector3?s:new _i.Vector3(...s))),o=n?new _i.LineDashedMaterial({color:t,dashSize:.02,gapSize:.02}):new _i.LineBasicMaterial({color:t}),a=new _i.Line(r,o);return n&&a.computeLineDistances(),a},[e,t,n]);return(0,Lp.useEffect)(()=>()=>{i.geometry.dispose(),i.material.dispose()},[i]),(0,kp.jsx)("primitive",{object:i})}var En=require("three");var He=require("react/jsx-runtime"),ts="#22d3ee",dE="#facc15";function vl(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function rw(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function Qo({position:e,children:t}){return(0,He.jsx)(Dp.Html,{center:!0,position:e,zIndexRange:[20,0],style:{pointerEvents:"none"},children:(0,He.jsx)("div",{className:"ri-measureLabel",children:t})})}function iw({positions:e,triangles:t}){let n=(0,fo.useMemo)(()=>{let i=new En.Vector3(...e[0]),r=new En.BufferGeometry;return r.setAttribute("position",new En.Float32BufferAttribute(e.flatMap(o=>new En.Vector3(...o).sub(i).toArray()),3)),r.setIndex(t.flat()),r},[e,t]);return(0,fo.useEffect)(()=>()=>n.dispose(),[n]),(0,He.jsx)("mesh",{position:e[0],geometry:n,raycast:()=>{},renderOrder:100,children:(0,He.jsx)("meshBasicMaterial",{color:ts,side:En.DoubleSide,transparent:!0,opacity:.18,depthWrite:!1})})}var uE=[[0,1,2]];function pE({positions:e}){let t=Lu(e);if(t===null)return null;let n=new En.Vector3(...e[1]),i=new En.Vector3(...e[0]).sub(n),r=new En.Vector3(...e[2]).sub(n),o=Math.min(i.length(),r.length())*.22;i.normalize(),r.normalize();let a=i.clone().cross(r);a.lengthSq()<1e-12&&a.copy(i).cross(Math.abs(i.y)<.9?new En.Vector3(0,1,0):new En.Vector3(1,0,0)),a.normalize();let s=t*Math.PI/180,l=Array.from({length:33},(h,p)=>i.clone().applyAxisAngle(a,s*p/32).multiplyScalar(o).add(n).toArray()),c=i.clone().applyAxisAngle(a,s/2).multiplyScalar(o*1.4).add(n).toArray();return(0,He.jsxs)(He.Fragment,{children:[(0,He.jsx)(es,{points:l,color:ts,lineWidth:2}),(0,He.jsxs)(Qo,{position:c,children:[t.toFixed(2),"\xB0"]})]})}function mE({box:e,unit:t}){let n=(0,fo.useMemo)(()=>[(e.min[0]+e.max[0])/2,(e.min[1]+e.max[1])/2,(e.min[2]+e.max[2])/2],[e.min,e.max]),i=(0,fo.useMemo)(()=>{let[s,l,c]=e.size,h=new En.BoxGeometry(s||1e-4,l||1e-4,c||1e-4),p=new En.EdgesGeometry(h);return h.dispose(),p},[e.size]);(0,fo.useEffect)(()=>()=>{i.dispose()},[i]);let[r,o,a]=e.size;return(0,He.jsxs)("group",{position:n,children:[(0,He.jsx)("lineSegments",{geometry:i,children:(0,He.jsx)("lineBasicMaterial",{color:dE})}),(0,He.jsxs)(Qo,{position:[0,-o/2,a/2],children:["W ",vl(r,t)]}),(0,He.jsxs)(Qo,{position:[-r/2,0,a/2],children:["H ",vl(o,t)]}),(0,He.jsxs)(Qo,{position:[r/2,-o/2,0],children:["D ",vl(a,t)]})]})}function Yf({points:e,unit:t,box:n,showDimensions:i,tool:r="distance",areaClosed:o=!1,snapPreview:a}){let s=(0,fo.useMemo)(()=>e.map(h=>h.position),[e]),l=(0,fo.useMemo)(()=>r==="area"&&o?Du(s):null,[r,o,s]),c=r==="pointToPlane"&&e.length===2?xx(e[0],e[1].position):null;return(0,He.jsxs)("group",{children:[e.map(h=>(0,He.jsx)(Dp.Html,{center:!0,position:h.position,zIndexRange:[15,0],style:{pointerEvents:"none"},children:(0,He.jsx)("div",{className:`ri-measureDot${h.snapped?" ri-measureDot--snapped":""}`})},h.id)),r==="distance"&&e.slice(1).map((h,p)=>{let u=e[p].position,m=h.position,f=new En.Vector3(...u).distanceTo(new En.Vector3(...m));return(0,He.jsxs)("group",{children:[(0,He.jsx)(es,{points:[u,m],color:ts,lineWidth:2}),(0,He.jsx)(Qo,{position:rw(u,m),children:vl(f,t)})]},`${e[p].id}-${h.id}`)}),(r==="angle"||r==="area")&&s.length>=2&&(0,He.jsx)(es,{points:o?[...s,s[0]]:s,color:ts,lineWidth:2}),r==="angle"&&(0,He.jsx)(pE,{positions:s}),l&&!("error"in l)&&(0,He.jsxs)(He.Fragment,{children:[(0,He.jsx)(iw,{positions:s,triangles:l.triangles}),(0,He.jsx)(Qo,{position:l.center,children:vl(l.area,t?`${t}\xB2`:"")})]}),r==="pointToPlane"&&e[0]?.faceVertices&&(0,He.jsxs)(He.Fragment,{children:[(0,He.jsx)(iw,{positions:e[0].faceVertices,triangles:uE}),(0,He.jsx)(es,{points:[...e[0].faceVertices,e[0].faceVertices[0]],color:ts,lineWidth:1}),e.length===1&&(0,He.jsx)(Qo,{position:e[0].position,children:"Reference plane"})]}),c&&(0,He.jsxs)(He.Fragment,{children:[(0,He.jsx)(es,{points:[e[1].position,c.projection],color:ts,lineWidth:2}),(0,He.jsx)(es,{points:[e[0].position,c.projection],color:ts,lineWidth:1,dashed:!0}),(0,He.jsx)(Qo,{position:rw(e[1].position,c.projection),children:vl(c.distance,t)})]}),a&&(0,He.jsxs)(Dp.Html,{center:!0,position:a.position,zIndexRange:[20,0],style:{pointerEvents:"none"},children:[(0,He.jsx)("div",{className:"ri-measureSnapTarget"}),(0,He.jsx)("div",{className:"ri-measureSnapLabel",children:a.snapped==="vertex"?"Vertex":"Edge"})]}),i&&n?(0,He.jsx)(mE,{box:n,unit:t}):null]})}var ea=require("lucide-react"),Np=require("react"),Nt=require("react/jsx-runtime");function Kf(e){let t=Me(),n=(0,Np.useRef)(null);(0,Np.useLayoutEffect)(()=>{if(!n.current)return;let s=()=>e.onHeight(n.current?.getBoundingClientRect().height??34),l=new ResizeObserver(s);return l.observe(n.current),s(),()=>l.disconnect()},[e.onHeight]);let{tool:i,pointCount:r,areaClosed:o}=e,a=i==="angle"?[t("angleFirstArmHint"),t("angleVertexHint"),t("angleSecondArmHint"),t("angleNewHint")][r]:i==="area"?t(o?"areaNewHint":"areaCornersHint"):i==="pointToPlane"?[t("pointToPlaneFaceHint"),t("pointToPlanePointHint"),t("pointToPlaneNewHint")][r]:t("distanceHint");return(0,Nt.jsxs)("div",{ref:n,className:"ri-measureTools",style:{top:e.top},children:[(0,Nt.jsxs)("div",{className:"ri-measureToolbarRow",children:[(0,Nt.jsx)("button",{type:"button",className:`ri-measureButton ${e.active?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onToggle,title:e.active?t("stopMeasuring"):t("startMeasuring"),"aria-pressed":e.active,children:(0,Nt.jsx)(ea.PencilRuler,{size:16})}),(0,Nt.jsx)("button",{type:"button",className:`ri-measureButton ${e.showDimensions?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onDimensions,title:t("toggleBoundingDimensions"),"aria-pressed":e.showDimensions,children:(0,Nt.jsx)(ea.RulerDimensionLine,{size:16})}),e.active&&(0,Nt.jsxs)(Nt.Fragment,{children:[(0,Nt.jsxs)("select",{className:"ri-measureSelect","aria-label":t("measurementTool"),value:i,disabled:e.disabled,onChange:s=>e.onTool(s.target.value),children:[(0,Nt.jsx)("option",{value:"distance",children:t("distance")}),(0,Nt.jsx)("option",{value:"angle",children:t("angle")}),(0,Nt.jsx)("option",{value:"area",children:t("area")}),(0,Nt.jsx)("option",{value:"pointToPlane",children:t("pointToPlane")})]}),(0,Nt.jsxs)("select",{className:"ri-measureSelect","aria-label":t("measurementSnapping"),value:e.snap,disabled:e.disabled,onChange:s=>e.onSnap(s.target.value),children:[(0,Nt.jsx)("option",{value:"none",children:t("noSnapping")}),(0,Nt.jsx)("option",{value:"auto",children:t("snapAuto")}),(0,Nt.jsx)("option",{value:"vertex",children:t("snapVertex")}),(0,Nt.jsx)("option",{value:"edge",children:t("snapEdge")})]})]}),r>0&&(0,Nt.jsxs)(Nt.Fragment,{children:[(0,Nt.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onUndo,disabled:e.disabled,title:t("undoMeasurementPoint"),children:(0,Nt.jsx)(ea.Undo2,{size:16})}),(0,Nt.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onClear,disabled:e.disabled,title:t("clearMeasurements"),children:(0,Nt.jsx)(ea.Eraser,{size:16})})]}),e.active&&i==="area"&&!o&&(0,Nt.jsx)("button",{type:"button",className:"ri-measureFinish",onClick:e.onFinishArea,disabled:e.disabled||r<3,children:t("finishArea")})]}),e.active&&(0,Nt.jsx)("div",{className:`ri-measureHint${e.error?" ri-measureHint--error":""}`,role:"status",children:e.error?t.message(e.error):a})]})}var yt=require("react"),ns=require("@react-three/xr"),lw=require("@react-three/fiber"),nd=require("three"),Mi=require("react/jsx-runtime"),hE=1,ow=1,fE=.1,gE=10;function bE(e,t){let[n,i,r]=e.size,o=(e.min[0]+e.max[0])/2,a=(e.min[2]+e.max[2])/2,s=Math.max(n,i,r)||1;return{scale:t==="real-world"?1:hE/s,offset:[-o,-e.min[1],-a]}}function aw(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function sw(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var vE=(0,yt.forwardRef)(function({box:t,scaleMode:n,children:i,onARStateChange:r},o){let a=(0,yt.useRef)(null),s=(0,yt.useRef)(null),l=(0,yt.useRef)(null),c=(0,ns.useXR)(L=>L.session!=null),h=(0,ns.useXR)(L=>L.mode==="immersive-ar"),p=(0,yt.useMemo)(()=>t?bE(t,n):null,[t,n]),u=(0,yt.useRef)(new nd.Vector3(0,0,-ow)),m=(0,yt.useRef)(1),f=(0,yt.useRef)(0),g=(0,yt.useRef)(!0),b=(0,yt.useRef)(!1),y=(0,yt.useMemo)(()=>new nd.Matrix4,[]),v=(0,yt.useRef)(new nd.Vector3),w=(0,yt.useRef)(!1),M=(0,yt.useRef)(null),_=(0,yt.useRef)(!1),x=(0,yt.useRef)(0),P=(0,yt.useRef)(0),d=(0,yt.useRef)(1),S=(0,yt.useRef)(0),C=(0,yt.useCallback)(()=>{if(!r||!h)return;let L={canPlace:w.current,isPlacementMode:g.current,isModelPlaced:b.current},X=M.current;X&&X.canPlace===L.canPlace&&X.isPlacementMode===L.isPlacementMode&&X.isModelPlaced===L.isModelPlaced||(M.current=L,r(L))},[h,r]),T=(0,yt.useCallback)(()=>!h||!w.current?!1:(u.current.copy(v.current),b.current=!0,g.current=!1,C(),!0),[C,h]),E=(0,yt.useCallback)(()=>{h&&(g.current=!0,C())},[C,h]),k=(0,yt.useCallback)(()=>{let L=T();return!L&&h&&(g.current=!1,C()),L},[C,h,T]),D=(0,yt.useCallback)(()=>{h&&(g.current=!1,C())},[C,h]);(0,yt.useImperativeHandle)(o,()=>({placeCurrent:T,startPlacementMode:E,finishPlacementMode:k,cancelPlacementMode:D}),[D,k,T,E]),(0,yt.useEffect)(()=>{if(!c){u.current.set(0,0,-ow),m.current=1,f.current=0,w.current=!1,_.current=!1,g.current=!0,b.current=!1,M.current=null;return}h&&(w.current=!1,_.current=!1,g.current=!0,b.current=!1,M.current=null,C())},[C,c,h]),(0,ns.useXRHitTest)((L,X)=>{if(!h||L.length===0){w.current&&(w.current=!1,C());return}X(y,L[0])&&(v.current.setFromMatrixPosition(y),w.current||(w.current=!0,C()))},"viewer"),(0,ns.useXRInputSourceEvent)("all","select",()=>{!h||_.current||!g.current||T()},[h,T]),(0,yt.useEffect)(()=>{if(!h)return;let L=I=>{I.touches.length===2&&(_.current=!0,x.current=aw(I.touches),P.current=sw(I.touches),d.current=m.current,S.current=f.current)},X=I=>{if(!_.current||I.touches.length!==2)return;I.preventDefault();let re=aw(I.touches);if(x.current>0){let te=re/x.current;m.current=Math.min(gE,Math.max(fE,d.current*te))}let ke=sw(I.touches);f.current=S.current-(ke-P.current)},O=I=>{I.touches.length===0&&requestAnimationFrame(()=>{_.current=!1})};return window.addEventListener("touchstart",L),window.addEventListener("touchmove",X,{passive:!1}),window.addEventListener("touchend",O),window.addEventListener("touchcancel",O),()=>{window.removeEventListener("touchstart",L),window.removeEventListener("touchmove",X),window.removeEventListener("touchend",O),window.removeEventListener("touchcancel",O)}},[h]),(0,lw.useFrame)(()=>{let L=a.current,X=s.current;if(!L||!X)return;!c||!p?(L.visible=!0,L.position.set(0,0,0),L.rotation.set(0,0,0),X.scale.setScalar(1)):(L.visible=!h||b.current,L.position.copy(u.current),L.rotation.set(0,f.current,0),X.scale.setScalar(p.scale*m.current));let O=l.current;if(O){let I=h&&g.current&&w.current;O.visible=I,I&&O.position.copy(v.current)}});let B=c&&p?p.offset:[0,0,0];return(0,Mi.jsxs)(Mi.Fragment,{children:[(0,Mi.jsxs)("mesh",{ref:l,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,Mi.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,Mi.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,Mi.jsx)("group",{ref:a,children:(0,Mi.jsx)("group",{ref:s,children:(0,Mi.jsx)("group",{position:B,children:i})})})]})}),cw=vE;var Ip=require("react");var yE="ri:license-grant:v1",xE={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},dw=new Map;function pw(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function uw(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return pw(t.padEnd(Math.ceil(t.length/4)*4,"="))}function wE(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===1&&typeof t.licenseKeyHash=="string"&&typeof t.domain=="string"&&(t.environment==="development"||t.environment==="production")&&typeof t.tier=="string"&&t.tier.length>0&&typeof t.issuedAt=="number"&&Number.isInteger(t.issuedAt)&&typeof t.expiresAt=="number"&&Number.isInteger(t.expiresAt)}async function Op(e){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e.trim())),n=String.fromCharCode(...new Uint8Array(t));return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Zf(e,t){return`${yE}:${t}:${e}`}function SE(e,t){let n=dw.get(e);if(n)return n;let i=crypto.subtle.importKey("spki",pw(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return dw.set(e,i),i}async function Jf(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[i,r,o,a,...s]=e.split("."),l=xE[r];if(i!=="ri1"||!l||!o||!a||s.length>0)return null;let c=JSON.parse(new TextDecoder().decode(uw(o)));if(!wE(c)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await SE(r,l),uw(a),new TextEncoder().encode(`${i}.${r}.${o}`)))return null;let p=Math.floor(Date.now()/1e3),u=c.expiresAt-c.issuedAt;return c.licenseKeyHash!==t||c.domain!==n||c.expiresAt<=p||c.issuedAt>p+300||u<=0||u>43200?null:{environment:c.environment,tier:c.tier,expiresAt:c.expiresAt}}catch{return null}}async function mw(e,t,n){try{return await Jf(e,await Op(t),n)}catch{return null}}async function hw(e,t,n){try{let i=await Op(t);return await Jf(e,i,n)?(localStorage.setItem(Zf(i,n),e),!0):!1}catch{return!1}}async function fw(e,t){try{let n=await Op(e),i=Zf(n,t),r=localStorage.getItem(i);if(!r)return null;let o=await Jf(r,n,t);return o||localStorage.removeItem(i),o}catch{return null}}async function Qf(e,t){try{let n=await Op(e);localStorage.removeItem(Zf(n,t))}catch{}}var _E=["localhost","127.0.0.1","0.0.0.0"],ME=e=>_E.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),vw="https://react-immersive.liveroom.dev/api/validate-license",yw=()=>typeof window<"u",CE=300*1e3,TE=5e3,PE=400,tg=new Map,eg=new Map,ta=class extends Error{},xw=async(e,t,n)=>{let i=await fw(e,t);return i?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:i.environment,tier:i.tier,isLocalDomain:n}):null},gw=async(e,t,n)=>{let i=await xw(e,t,n);return i||(console.warn("[react-immersive] License server unreachable and no valid offline grant is available \u2014 license validation failed."),{status:"invalid",reason:"Could not reach license server",isLocalDomain:n})},AE=e=>e instanceof ta||e instanceof TypeError,EE=()=>new Promise(e=>setTimeout(e,PE)),RE=e=>e==="development"||e==="production",kE=e=>{if(!e||typeof e!="object")return!1;let t=e;return!(typeof t.valid!="boolean"||t.reason!==void 0&&typeof t.reason!="string"||t.environment!==void 0&&!RE(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},LE=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},ww=(e,t,n)=>`${n}::${e}::${t}`,Sw=e=>{let t=tg.get(e);return t?Date.now()-t.timestamp>CE?(tg.delete(e),null):t.result:null},DE=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),NE=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function OE(e,t,n,i){let r=ww(e,t,i),o=Sw(r);if(o)return o;let a=eg.get(r);if(a)return a;let s=(async()=>{for(let l=0;l<2;l+=1)try{return await IE(e,t,n,r,i)}catch(c){if(!AE(c))throw c;if(l===0){let h=await xw(e,t,n);if(h)return h;await EE();continue}return gw(e,t,n)}return gw(e,t,n)})().finally(()=>{eg.delete(r)});return eg.set(r,s),s}async function IE(e,t,n,i,r){let o=new AbortController,a=setTimeout(()=>o.abort(),TE),s;try{s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:o.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(h){throw o.signal.aborted?new ta("License validation timed out"):h}finally{clearTimeout(a)}let l;try{l=await s.json()}catch{throw new ta(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new ta(`License server error (${s.status})`);let h=LE(l)??`License validation failed${s.status?` (${s.status})`:""}`;return await Qf(e,t),NE(h,n)}if(!kE(l))throw new ta("License server returned an unexpected payload");let c=DE(l,n);if(c.status==="valid"&&r!==vw){let h=l.offlineGrant?await mw(l.offlineGrant,e,t):null;if(!h)throw new ta("License validation endpoint did not return a verifiable signed grant");c={...c,environment:h.environment,tier:h.tier}}return c.status==="valid"?(tg.set(i,{result:c,timestamp:Date.now()}),l.offlineGrant&&(await hw(l.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await Qf(e,t),c}var bw=(e,t)=>{let n=e.trim();return!yw()||!n?null:Sw(ww(n,window.location.hostname.toLowerCase(),t))},Bp=(e,t=vw)=>{let[n,i]=(0,Ip.useState)(()=>bw(e,t)??{status:"checking",isLocalDomain:!1});return(0,Ip.useEffect)(()=>{if(!yw())return;let r=!1,o=p=>{r||i(p)},a=e.trim(),s=window.location.hostname.toLowerCase(),l=ME(s),c=bw(e,t);return c?(o(c),()=>{r=!0}):(o({status:"checking",isLocalDomain:l}),a?((async()=>{try{o(await OE(a,s,l,t))}catch(p){let u=p instanceof TypeError?"Could not reach license server":p instanceof Error?p.message:"License validation failed";o({status:"invalid",reason:u,isLocalDomain:l})}})(),()=>{r=!0}):(o({status:"invalid",reason:"No license key provided",isLocalDomain:l}),()=>{r=!0}))},[e,t]),n};var fn=require("react");var Yn=require("react/jsx-runtime"),BE={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},zE={up:"4 16 12 8 20 16",down:"4 8 12 16 20 8",left:"16 4 8 12 16 20",right:"8 4 16 12 8 20"},zp=({direction:e})=>{let t=BE[e],n=zE[e];return(0,Yn.jsxs)("svg",{"aria-hidden":"true",className:"mc__arrow-icon",focusable:"false",viewBox:"0 0 24 24",width:t.width,height:t.height,fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{display:"block",width:`${t.width}px`,height:`${t.height}px`,pointerEvents:"none",padding:0,margin:0,overflow:"visible"},children:[(0,Yn.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,Yn.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},go=16,UE={"bottom-left":{bottom:go,left:go,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:go,right:go,top:"auto",left:"auto",transform:"none"},"top-left":{top:go,left:go,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:go,right:go,bottom:"auto",left:"auto",transform:"none"},center:{top:"50%",left:"50%",bottom:"auto",right:"auto",transform:"translate(-50%, -50%)"},"center-bottom":{bottom:-10,left:"50%",top:"auto",right:"auto",transform:"translateX(-50%)"},"center-top":{top:go,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},VE=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:i=.001,rotateSensitivity:r=.01,position:o="center-bottom"})=>{let a=Me(),s=(0,fn.useRef)(null),[l,c]=(0,fn.useState)({x:0,y:0}),h=(0,fn.useRef)(!1),p=(0,fn.useRef)({x:0,y:0}),u=(0,fn.useRef)(void 0),m=(0,fn.useRef)(void 0),f=(0,fn.useRef)(null),g=(0,fn.useRef)(0),b=()=>e.current,y=(D,B,L)=>{let X=Math.hypot(D,B);if(X>L){let O=L/X;return{x:D*O,y:B*O}}return{x:D,y:B}},v=D=>{let L=Math.abs(D);return L<.12?0:Math.sign(D)*((L-.12)/(1-.12))},w=(0,fn.useCallback)(()=>{let D=()=>{let{x:B,y:L}=p.current,X=v(B),O=v(L);if(t&&(X!==0||O!==0)){let I=b();I&&I.rotate(-X*r,-O*r,!0)}u.current=requestAnimationFrame(D)};u.current=requestAnimationFrame(D)},[t,r]),M=(0,fn.useCallback)(()=>{u.current&&cancelAnimationFrame(u.current)},[]),_=(0,fn.useCallback)((D,B)=>{if(!s.current||!h.current)return;let L=s.current.getBoundingClientRect(),X=L.left+L.width/2,O=L.top+L.height/2,I=L.width/2-18,re=D-X,ke=B-O,te=y(re,ke,I);c(te),p.current={x:te.x/I,y:te.y/I}},[]),x=(0,fn.useCallback)(D=>{if(!t)return;D.preventDefault(),D.stopPropagation(),h.current=!0,w();let B="touches"in D?D.touches[0]:D;_(B.clientX,B.clientY)},[t,w,_]),P=(0,fn.useCallback)(D=>{if(!h.current)return;D.preventDefault();let B="touches"in D?D.touches[0]:D;_(B.clientX,B.clientY)},[_]),d=(0,fn.useCallback)(()=>{h.current=!1,c({x:0,y:0}),p.current={x:0,y:0},M()},[M]),S=i*10,C=(0,fn.useCallback)(D=>{t&&b()?.forward(D*S,!0)},[t,S]),T=(0,fn.useCallback)(D=>{t&&b()?.truck(D*S,0,!0)},[t,S]),E=(0,fn.useCallback)((D,B,L)=>{if(!t)return;m.current&&cancelAnimationFrame(m.current),f.current={control:D,amount:B,action:L},g.current=0,L(B);let X=O=>{if(!f.current)return;if(g.current===0){g.current=O,m.current=requestAnimationFrame(X);return}if(O-g.current>200){let{amount:re,action:ke}=f.current;ke(re),g.current=O}m.current=requestAnimationFrame(X)};m.current=requestAnimationFrame(X)},[t]),k=(0,fn.useCallback)(D=>{f.current?.control===D&&(m.current&&(cancelAnimationFrame(m.current),m.current=void 0),f.current=null,g.current=0)},[]);return(0,fn.useEffect)(()=>(window.addEventListener("mousemove",P),window.addEventListener("mouseup",d),window.addEventListener("touchmove",P,{passive:!1}),window.addEventListener("touchend",d),window.addEventListener("touchcancel",d),()=>{window.removeEventListener("mousemove",P),window.removeEventListener("mouseup",d),window.removeEventListener("touchmove",P),window.removeEventListener("touchend",d),window.removeEventListener("touchcancel",d),M(),m.current&&cancelAnimationFrame(m.current)}),[P,d,M]),t?(0,Yn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...UE[o]},children:(0,Yn.jsxs)("div",{className:"mc__dpad",children:[(0,Yn.jsx)("button",{"aria-label":a("moveForward"),className:"mc__arrow mc__arrow--up",onMouseDown:()=>E("up",1,C),onMouseUp:()=>k("up"),onMouseLeave:()=>k("up"),onTouchStart:D=>{D.preventDefault(),E("up",1,C)},onTouchEnd:()=>k("up"),onTouchCancel:()=>k("up"),children:(0,Yn.jsx)(zp,{direction:"up"})}),(0,Yn.jsxs)("div",{className:"mc__middle-row",children:[(0,Yn.jsx)("button",{"aria-label":a("moveLeft"),className:"mc__arrow mc__arrow--left",onMouseDown:()=>E("left",-1,T),onMouseUp:()=>k("left"),onMouseLeave:()=>k("left"),onTouchStart:D=>{D.preventDefault(),E("left",-1,T)},onTouchEnd:()=>k("left"),onTouchCancel:()=>k("left"),children:(0,Yn.jsx)(zp,{direction:"left"})}),(0,Yn.jsx)("div",{ref:s,className:"mc__joystick",onMouseDown:x,onTouchStart:x,children:(0,Yn.jsx)("div",{className:"mc__knob",style:{transform:`translate(${l.x}px, ${l.y}px)`}})}),(0,Yn.jsx)("button",{"aria-label":a("moveRight"),className:"mc__arrow mc__arrow--right",onMouseDown:()=>E("right",1,T),onMouseUp:()=>k("right"),onMouseLeave:()=>k("right"),onTouchStart:D=>{D.preventDefault(),E("right",1,T)},onTouchEnd:()=>k("right"),onTouchCancel:()=>k("right"),children:(0,Yn.jsx)(zp,{direction:"right"})})]}),(0,Yn.jsx)("button",{"aria-label":a("moveBackward"),className:"mc__arrow mc__arrow--down",onMouseDown:()=>E("down",-1,C),onMouseUp:()=>k("down"),onMouseLeave:()=>k("down"),onTouchStart:D=>{D.preventDefault(),E("down",-1,C)},onTouchEnd:()=>k("down"),onTouchCancel:()=>k("down"),children:(0,Yn.jsx)(zp,{direction:"down"})})]})}):null},_w=VE;var tn=require("react"),rg=require("three");var ng=new WeakSet;function yl(e){ng.add(e)}function Mw(e){let t=ng.has(e);return t&&ng.delete(e),t}function Cw(e){return[e.x,e.y,e.z]}function bo(e,t){let n=new rg.Vector3,i=new rg.Vector3;return t.getPosition(n),t.getTarget(i),{position:Cw(n),target:Cw(i),fov:"fov"in e&&typeof e.fov=="number"?e.fov:null,zoom:"zoom"in e&&typeof e.zoom=="number"?e.zoom:1,azimuthAngle:t.azimuthAngle,polarAngle:t.polarAngle}}function FE(e,t){return e?e.position[0]===t.position[0]&&e.position[1]===t.position[1]&&e.position[2]===t.position[2]&&e.target[0]===t.target[0]&&e.target[1]===t.target[1]&&e.target[2]===t.target[2]&&e.fov===t.fov&&e.zoom===t.zoom&&e.azimuthAngle===t.azimuthAngle&&e.polarAngle===t.polarAngle:!1}async function rd(e,t,n=.6){let i=e.smoothTime;e.smoothTime=il(e,n);try{return await t()}finally{e.smoothTime=i}}function Tw(e={}){let t=(0,tn.useRef)(e);t.current=e;let n=(0,tn.useRef)(null),[i,r]=(0,tn.useState)(null),[o,a]=(0,tn.useState)(()=>({...e.presets})),s=(0,tn.useRef)(o);s.current=o;let l=(0,tn.useCallback)(S=>{r(C=>FE(C,S)?C:S)},[]),c=(0,tn.useCallback)(S=>{l(S)},[l]),h=(0,tn.useRef)(null),p=(0,tn.useRef)(null),u=(0,tn.useRef)(null),m=(0,tn.useCallback)(S=>{n.current=S;let C=bo(S.raw.controls.camera,S.raw.controls);l(C),S.raw.scene!==p.current&&(p.current=S.raw.scene,h.current=null,u.current=null),S.homeCameraState&&!h.current&&(h.current=S.homeCameraState);let{initialPosition:T,initialTarget:E,initialTransition:k=!1}=t.current;if((T||E)&&S.raw.scene&&(T||S.homeCameraState)&&u.current!==S.raw.controls){u.current=S.raw.controls,S.homeCameraState||yl(S.raw.controls);let D=T??C.position,B=E??C.target;S.raw.controls.setLookAt(D[0],D[1],D[2],B[0],B[1],B[2],k).then(()=>{if(n.current?.raw.controls!==S.raw.controls)return;let L=bo(S.raw.controls.camera,S.raw.controls);h.current={position:L.position,target:L.target},l(L)}).catch(()=>{})}},[l]),f=(0,tn.useCallback)(async()=>{let S=n.current,C=S?.raw.controls;if(!C)return!1;try{let T=h.current;return T?await rd(C,()=>C.setLookAt(T.position[0],T.position[1],T.position[2],T.target[0],T.target[1],T.target[2],!0)):S?.raw.scene?await rd(C,()=>C.fitToBox(S.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await rd(C,()=>C.reset(!0)),!0}catch{return!1}},[]),g=(0,tn.useCallback)(async()=>{let S=n.current;if(!S?.raw.controls||!S.raw.scene)return!1;try{return await rd(S.raw.controls,()=>S.raw.controls.fitToBox(S.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),b=(0,tn.useCallback)(async S=>{let C=n.current;if(!C?.raw.controls)return!1;let T=jo(C.objectBindings,S);if(!T)return!1;let E=C.raw.nodes[T];if(!E)return!1;try{return await rd(C.raw.controls,()=>C.raw.controls.fitToBox(E,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),y=(0,tn.useCallback)(async(S,C=!0)=>{let T=n.current?.raw.controls;if(!T)return!1;try{return n.current?.homeCameraState||yl(T),await T.setTarget(S[0],S[1],S[2],C),l(bo(T.camera,T)),!0}catch{return!1}},[l]),v=(0,tn.useCallback)(async(S,C=!0)=>{let T=n.current?.raw.controls;if(!T)return!1;try{n.current?.homeCameraState||yl(T);let E=[T.setLookAt(S.position[0],S.position[1],S.position[2],S.target[0],S.target[1],S.target[2],C)];S.azimuthAngle!=null&&S.polarAngle!=null&&E.push(T.rotateTo(S.azimuthAngle,S.polarAngle,C)),await Promise.all(E);let k=T.camera,D=!1;return S.fov!=null&&"fov"in k&&typeof k.fov=="number"&&(k.fov=S.fov,D=!0),S.zoom!=null&&"zoom"in k&&typeof k.zoom=="number"&&(k.zoom=S.zoom,D=!0),D&&"updateProjectionMatrix"in k&&k.updateProjectionMatrix(),l(bo(k,T)),!0}catch{return!1}},[l]),w=(0,tn.useCallback)((S,C=!0)=>v(S,C),[v]),M=(0,tn.useCallback)((S,C,T=!0)=>v({position:S,target:C},T),[v]),_=(0,tn.useCallback)(async(S,C,T=!0)=>{let E=n.current?.raw.controls;if(!E)return!1;try{return n.current?.homeCameraState||yl(E),await E.rotateTo(S*Math.PI/180,C*Math.PI/180,T),l(bo(E.camera,E)),!0}catch{return!1}},[l]),x=(0,tn.useCallback)(async(S,C=!0)=>{let T=n.current?.raw.controls;if(!T)return!1;try{return n.current?.homeCameraState||yl(T),await T.dollyTo(S,C),l(bo(T.camera,T)),!0}catch{return!1}},[l]),P=(0,tn.useCallback)(S=>{let C=n.current?.raw.controls,T=S.trim();if(!C||!T)return null;let E=bo(C.camera,C);return s.current={...s.current,[T]:E},a(k=>({...k,[T]:E})),l(E),E},[l]),d=(0,tn.useCallback)((S,C=!0)=>{let T=s.current[S];return T?v(T,C):Promise.resolve(!1)},[v]);return{cameraState:i,cameraPresets:o,resetView:f,focusObject:b,fitScene:g,setCameraTarget:y,setCameraState:w,lookAt:M,orbitTo:_,dollyTo:x,savePreset:P,goToPreset:d,handleCameraChange:c,handleViewerReady:m}}var id=require("three");function Up(e){return[e.x,e.y,e.z]}function Pw(e){let t=new id.Box3().setFromObject(e),n=0;return e.traverse(i=>{i.isMesh&&(n+=1)}),{bounds:{min:Up(t.min),max:Up(t.max),center:Up(t.getCenter(new id.Vector3)),size:Up(t.getSize(new id.Vector3))},objectCount:n,materialVariants:nf(e),materialVariantGroups:al(e)}}function jE(e){return typeof e=="object"&&!Array.isArray(e)}function GE(e,t){return"group"in t?e.group===t.group:"tag"in t?e.tags?.includes(t.tag)??!1:(e.type??"other")===t.type}function rs(e,t){if(jE(t))return Object.entries(e).filter(([,r])=>GE(r,t)).map(([r])=>r);let i=(typeof t=="string"?[t]:t).map(r=>jo(e,r)).filter(r=>r!==null);return[...new Set(i)]}var HE="#ff3b30",WE=Object.freeze({}),Aw=e=>e;function XE(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function qE(e,t){let n=e.metadata;for(let i of t.split(".")){if(!XE(n))return;n=n[i]}return n}function og(e,t){if("metric"in t){let n=e.metrics?.[t.metric];return!(typeof n!="number"||!Number.isFinite(n)||t.above!==void 0&&!(n>t.above)||t.below!==void 0&&!(n<t.below))}if("status"in t){let n=e.status??"normal";return Array.isArray(t.status)?t.status.includes(n):t.status===n}return qE(e,t.metadata)===t.equals}function $E(e){let t=e.trim().replace(/^#/,""),n=t.length===3?t.split("").map(i=>i+i).join(""):t;return/^[0-9a-f]{6}$/i.test(n)?[0,2,4].map(i=>parseInt(n.slice(i,i+2),16)):null}var ig=e=>`#${e.map(t=>Math.round(t).toString(16).padStart(2,"0")).join("")}`;function YE(e,t){let n=e.map(([l,c])=>({at:l,rgb:$E(c)})).filter(l=>Number.isFinite(l.at)&&l.rgb!==null).sort((l,c)=>l.at-c.at);if(n.length===0||!Number.isFinite(t))return null;if(t<=n[0].at)return ig(n[0].rgb);let i=n[n.length-1];if(t>=i.at)return ig(i.rgb);let r=n.findIndex(l=>l.at>=t),o=n[r-1],a=n[r],s=a.at===o.at?1:(t-o.at)/(a.at-o.at);return ig(o.rgb.map((l,c)=>l+(a.rgb[c]-l)*s))}function Ew(e,t){if(!t?.length)return{bindings:e,pulses:WE,sourceOf:Aw};let n=new Map,i={};for(let a of t){let s=a.target?rs(e,a.target):Object.keys(e),l=a.when?Array.isArray(a.when)?a.when:[a.when]:[];for(let c of s){let h=e[c];if(!l.every(u=>og(h,u)))continue;let p={...a.material};if(a.colorScale){let u=h.metrics?.[a.colorScale.metric],m=typeof u=="number"?YE(a.colorScale.stops,u):null;m&&(p={...p,[a.colorScale.channel??"baseColor"]:m})}if(a.pulse){let u=a.pulse===!0?{}:a.pulse;i[c]={color:u.color??HE,speed:u.speed!==void 0&&u.speed>0?u.speed:1};let m=p.emissiveIntensity??n.get(c)?.emissiveIntensity??h.style?.material?.emissiveIntensity;m!==void 0&&m>0||(p.emissiveIntensity=1)}Object.keys(p).length>0&&n.set(c,{...n.get(c),...p})}}if(n.size===0)return{bindings:e,pulses:i,sourceOf:Aw};let r={...e},o=new WeakMap;for(let[a,s]of n){let l=e[a],c={...l,style:{...l.style,material:{...l.style?.material,...s}}};r[a]=c,o.set(c,l)}return{bindings:r,pulses:i,sourceOf:a=>o.get(a)??a}}var KE=.12,Rw=new Set;function ag(e,t){return t?new Set(rs(e,t.target)):Rw}function kw(e,t){let n=ag(e.bindings,t);if(!t||n.size===0)return{...e,setAside:Rw};let i=Math.min(Math.max(t.ghostOpacity??KE,0),1),r={...e.bindings},o=new WeakMap,a=new Set;for(let[s,l]of Object.entries(e.bindings)){if(n.has(s))continue;a.add(s);let c=t.mode==="hide"?{...l,visible:!1}:{...l,style:{...l.style,material:{...l.style?.material,opacity:Math.min(l.style?.material?.opacity??1,i)}}};r[s]=c,o.set(c,e.sourceOf(l))}return{bindings:r,pulses:e.pulses,sourceOf:s=>o.get(s)??e.sourceOf(s),setAside:a}}var Nw=require("react");var Dw=require("react"),sg=require("@react-three/fiber"),Lw=new WeakMap;function Vp(e){let t=(0,sg.useThree)(i=>i.get),n=(0,sg.useThree)(i=>i.setEvents);(0,Dw.useEffect)(()=>{if(!e)return;let i=Lw.get(t);if(!i){let o=new Set;i=o,Lw.set(t,o);let a=t().events.filter;n({filter:(s,l)=>{let c=a?a(s,l):s;return o.size===0?c:c.filter(h=>{for(let p of o)if(!p(h))return!1;return!0})}})}i.add(e);let r=i;return()=>{r.delete(e)}},[e,t,n])}function lg({setAside:e,nodeRefs:t}){let n=(0,Nw.useMemo)(()=>{if(e.size===0)return null;let i={refs:null,bound:new Map};return r=>{let o=t.current??{};if(i.refs!==o){let s=new Map;for(let[l,c]of Object.entries(o))s.set(c,e.has(l));i={refs:o,bound:s}}let{bound:a}=i;for(let s=r.object;s;s=s.parent){let l=a.get(s);if(l!==void 0)return!l}return!0}},[e,t]);return Vp(n),null}var Er=require("react"),Vw=require("@react-three/drei"),xl=require("@react-three/fiber"),is=require("three");var cg=require("three"),Fp={x:0,y:1,z:2},Ow=e=>Math.min(Math.max(e,0),1);function dg(e,t){let n=Fp[t.axis],i=e.min[n],r=e.max[n];if(!Number.isFinite(i)||!Number.isFinite(r)||r<i)return null;let o=Number.isFinite(t.position)?t.position:.5;return i+(r-i)*Ow(o)}function Iw(e,t,n){let i=dg(t,n);if(i===null)return!1;let r=new cg.Vector3;return r.setComponent(Fp[n.axis],n.flip?1:-1),e.normal.copy(r),e.constant=n.flip?-i:i,!0}function Bw(e,t,n,i){let r=Fp[i],o=new cg.Vector3().setComponent(r,1),a=n.clone().addScaledVector(o,-n.dot(o));if(a.lengthSq()<1e-8)return null;a.normalize();let s=e.direction.dot(a);if(Math.abs(s)<1e-8)return null;let l=t.clone().sub(e.origin).dot(a)/s;return Number.isFinite(l)?e.origin.getComponent(r)+e.direction.getComponent(r)*l:null}function zw(e,t,n){let i=Fp[t],r=e.max[i]-e.min[i];return r>0?Ow((n-e.min[i])/r):null}var os=require("react/jsx-runtime"),ZE={x:0,y:1,z:2},Uw="#22d3ee";function ug({section:e,box:t,modelRef:n,showHandle:i,onPositionChange:r,onDraggingChange:o}){let a=(0,xl.useThree)(g=>g.gl),s=(0,xl.useThree)(g=>g.raycaster),l=(0,xl.useThree)(g=>g.invalidate),c=(0,Er.useMemo)(()=>new is.Plane,[]),h=(0,Er.useMemo)(()=>[c],[c]),p=e.enabled&&t!==null&&Iw(c,t,e),u=(0,Er.useRef)(new Map),m=()=>{for(let[g,b]of u.current)g.clippingPlanes=b.clippingPlanes,g.side=b.side,g.needsUpdate=!0;u.current.clear()};(0,Er.useEffect)(()=>{if(p)return a.localClippingEnabled=!0,l(),()=>{m(),l()}},[p,a,l]),(0,Er.useEffect)(()=>{p&&l()},[p,e.axis,e.position,e.flip,t,l]),(0,xl.useFrame)(()=>{let g=n.current;if(!p||!g)return;let b=u.current;g.traverse(y=>{let v=y.material;if(v)for(let w of Array.isArray(v)?v:[v]){let M=b.get(w);if(w.clippingPlanes===h&&w.side===is.DoubleSide)continue;let _=w.side===is.DoubleSide&&M?M.side:w.side;b.set(w,{clippingPlanes:M?M.clippingPlanes:w.clippingPlanes,side:_}),w.clippingPlanes=h,w.clipShadows=!0,w.side=is.DoubleSide,w.needsUpdate=!0}})});let f=(0,Er.useMemo)(()=>p?g=>!!g.object.userData.riSectionHandle||c.distanceToPoint(g.point)>=-1e-4:null,[p,c]);return Vp(f),(0,Er.useEffect)(()=>{if(!p)return;let g=s,b=g.firstHitOnly;return g.firstHitOnly=!1,()=>{g.firstHitOnly=b}},[p,s]),!p||!i||!t?null:(0,os.jsx)(JE,{section:e,box:t,onPositionChange:r,onDraggingChange:o})}function JE({section:e,box:t,onPositionChange:n,onDraggingChange:i}){let[r,o]=(0,Er.useState)(!1),[a,s]=(0,Er.useState)(!1),l=(0,Er.useRef)(null),c=ZE[e.axis],h=dg(t,e)??0,p=[0,1,2].map(y=>(t.max[y]-t.min[y])*1.08||.01),u=[0,1,2].map(y=>(t.min[y]+t.max[y])/2);u[c]=h;let[m,f]=e.axis==="x"?[p[2],p[1]]:e.axis==="y"?[p[0],p[2]]:[p[0],p[1]],g=e.axis==="x"?[0,Math.PI/2,0]:e.axis==="y"?[-Math.PI/2,0,0]:[0,0,0],b=y=>{a&&(y.target?.releasePointerCapture?.(y.pointerId),l.current=null,s(!1),i(!1))};return(0,os.jsxs)("mesh",{ref:y=>{y&&(tu(y),y.userData.riSectionHandle=!0)},position:u,rotation:g,renderOrder:2,onPointerOver:y=>{y.stopPropagation(),o(!0)},onPointerOut:()=>o(!1),onPointerDown:y=>{y.stopPropagation(),y.target?.setPointerCapture?.(y.pointerId),l.current={point:y.point.clone(),direction:y.ray.direction.clone(),coordinate:y.point.getComponent(c),cut:h},s(!0),i(!0)},onPointerMove:y=>{let v=l.current;if(!a||!v)return;y.stopPropagation();let w=Bw(y.ray,v.point,v.direction,e.axis);if(w===null)return;let M=zw(t,e.axis,v.cut+(w-v.coordinate));M!==null&&n(M)},onPointerUp:b,onPointerCancel:b,onClick:y=>y.stopPropagation(),children:[(0,os.jsx)("planeGeometry",{args:[m,f]}),(0,os.jsx)("meshBasicMaterial",{color:Uw,transparent:!0,opacity:a?.22:r?.16:.08,side:is.DoubleSide,depthWrite:!1,toneMapped:!1}),(0,os.jsx)(Vw.Edges,{color:Uw,renderOrder:3})]})}var Fw=require("react-colorful"),na=require("react/jsx-runtime"),pg=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:i,inline:r=!1})=>{let o=Me();return(0,na.jsxs)("div",{className:`ri-popover${r?" ri-popover--inline":""}`,style:r?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:a=>a.stopPropagation(),children:[(0,na.jsx)("p",{className:"ri-popoverLabel",children:o("color")}),(0,na.jsx)(Fw.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>i(s=>({...s,[e.objectId]:{...s[e.objectId],hex:a}}))}),(0,na.jsxs)("div",{className:"ri-inlineRow",children:[(0,na.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,na.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:o("done")})]})]})};var Ct=require("react/jsx-runtime"),mg=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:i,canPlaceImage:r=!0,inline:o=!1,offset:a,rotationDegrees:s,onOffsetChange:l,onRotationChange:c,isPositioning:h=!1,onEndPositioning:p})=>{let u=Me();return(0,Ct.jsxs)("div",{className:`ri-popover${o?" ri-popover--inline":""}`,style:o?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:m=>m.stopPropagation(),children:[(0,Ct.jsx)("div",{className:"ri-popoverHeader",children:(0,Ct.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:u("material")})}),(0,Ct.jsxs)("div",{className:"ri-materialBody",children:[t?(0,Ct.jsx)("div",{className:"ri-previewFrame",children:(0,Ct.jsx)("img",{src:t,alt:u("texturePreview"),className:"ri-previewImage"})}):(0,Ct.jsxs)("div",{className:"ri-emptyState",children:[(0,Ct.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,Ct.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M2.25 15.75l5.159-5.159a2.25 2.25 0 013.182 0l5.159 5.159m-1.5-1.5l1.409-1.409a2.25 2.25 0 013.182 0l2.909 2.909M3 21h18M3 3h18"})}),(0,Ct.jsx)("span",{style:{fontSize:12},children:u("noTextureApplied")})]}),r?(0,Ct.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:u(t?"replaceImage":"uploadImage")}):(0,Ct.jsx)("p",{className:"ri-formatHint",children:u("noTextureCoordinates")}),t&&(0,Ct.jsx)("button",{onClick:()=>i(e.objectId),className:"ri-removeButton",children:u("removeTexture")}),r?(0,Ct.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}):null,t&&(l||c)&&(0,Ct.jsxs)("div",{className:"ri-texturePosition",children:[(0,Ct.jsx)("p",{className:"ri-texturePositionLabel",children:u("texturePosition")}),(0,Ct.jsxs)("div",{className:"ri-texturePositionGrid",children:[(0,Ct.jsxs)("label",{className:"ri-texturePositionField",children:[(0,Ct.jsx)("span",{children:u("offsetX")}),(0,Ct.jsx)("input",{type:"number",step:.01,value:a?.[0]??0,onChange:m=>l?.(e.objectId,0,Number(m.target.value))})]}),(0,Ct.jsxs)("label",{className:"ri-texturePositionField",children:[(0,Ct.jsx)("span",{children:u("offsetY")}),(0,Ct.jsx)("input",{type:"number",step:.01,value:a?.[1]??0,onChange:m=>l?.(e.objectId,1,Number(m.target.value))})]})]}),(0,Ct.jsxs)("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[(0,Ct.jsx)("span",{children:u("rotation")}),(0,Ct.jsxs)("div",{className:"ri-texturePositionSliderRow",children:[(0,Ct.jsx)("input",{type:"range",min:0,max:360,step:1,value:s??0,onChange:m=>c?.(e.objectId,Number(m.target.value))}),(0,Ct.jsx)("input",{type:"number",min:0,max:360,step:1,value:Math.round(s??0),onChange:m=>c?.(e.objectId,Number(m.target.value))})]})]}),h?(0,Ct.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:p,title:u("confirmTexturePosition"),children:u("donePositioning")}):(0,Ct.jsx)("p",{className:"ri-texturePositionHint",children:u("textureOffsetHint")})]})]})]})};var ni=require("react");var Lt=require("react/jsx-runtime");function jw({entries:e}){return(0,Lt.jsx)(Lt.Fragment,{children:e.map(([t,n])=>{let i=n!==null&&typeof n=="object",r=i?Object.entries(n):[];return i&&r.length>0?(0,Lt.jsxs)("div",{className:"left-panel__data-group",children:[(0,Lt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,Lt.jsx)("div",{className:"left-panel__data-children",children:(0,Lt.jsx)(jw,{entries:r})})]},t):(0,Lt.jsxs)("div",{className:"left-panel__data-row",children:[(0,Lt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,Lt.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:i?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function QE({content:e}){let t=e!=null,[n,i]=(0,ni.useState)(t),[r,o]=(0,ni.useState)(t),a=(0,ni.useRef)(e);return t&&(a.current=e),(0,ni.useEffect)(()=>{if(t){i(!0);return}if(n){o(!1);let s=setTimeout(()=>i(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,ni.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>o(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,Lt.jsx)("div",{className:`left-panel__action-extra${r?" left-panel__action-extra--open":""}`,children:(0,Lt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??a.current})}):null}function hg({isOpen:e,selectedObject:t,currentAction:n,onClose:i,onAction:r,renderActionExtra:o,translateDefaultActions:a=!1}){let s=Me(),[l,c]=(0,ni.useState)(t);(0,ni.useEffect)(()=>{t&&c(t)},[t]);let h=t??l,p=h?Object.entries(h).filter(([u])=>u!=="actions"&&u!=="decals"):[];return(0,Lt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:h&&(0,Lt.jsxs)(Lt.Fragment,{children:[(0,Lt.jsxs)("div",{className:"left-panel__header",children:[(0,Lt.jsx)("p",{className:"left-panel__title",children:h.label}),(0,Lt.jsx)("button",{onClick:i,className:"left-panel__close-btn","aria-label":s("closePanel"),children:"\u2715"})]}),p.length>0&&(0,Lt.jsx)("div",{className:"left-panel__data",children:(0,Lt.jsx)(jw,{entries:p})}),(0,Lt.jsx)("hr",{className:"left-panel__divider"}),h.actions&&h.actions.length>0&&(0,Lt.jsxs)(Lt.Fragment,{children:[(0,Lt.jsx)("div",{className:"left-panel__actions-label",children:s("actions")}),(0,Lt.jsx)("div",{className:"left-panel__actions-list",children:h.actions.map((u,m)=>{let f=n?.action.id===u.id&&(n.binding===h||n.binding?.id===h.id||n.binding?.modelObjectId===h.modelObjectId||n.objectId===h.id||n.objectId===h.modelObjectId),g=o?.(u.id);return(0,Lt.jsxs)(ni.Fragment,{children:[(0,Lt.jsx)("button",{onClick:b=>r({objectId:h.modelObjectId||h.id||"",action:u,binding:h,screenX:b.clientX,screenY:b.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${u.id}`,f?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":u.id,"data-label":u.label,children:a?s.message(u.label):u.label}),(0,Lt.jsx)(QE,{content:g})]},m)})})]})]})})}var od=require("react"),jp=require("lucide-react");var Gw=require("react");var cr=require("react/jsx-runtime");function Hw({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:i,searchValue:r,onSearchChange:o,searchPlaceholder:a,children:s,isOpen:l,onToggle:c,openButtonIcon:h,closeButtonIcon:p,closeButtonAriaLabel:u}){let m=Me(),[f,g]=(0,Gw.useState)(!1),b=l!==void 0?l:f,y=v=>{l===void 0&&g(v),c?.(v)};return(0,cr.jsxs)("div",{className:`ri-sidepanel-wrap ${b?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!b&&(0,cr.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>y(!0),"aria-label":t,title:m("openPanel"),children:[h,e?(0,cr.jsx)("span",{children:e}):null]}),(0,cr.jsxs)("div",{className:`ri-sidepanel ${b?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!b,children:[(0,cr.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,cr.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,cr.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,cr.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>y(!1),"aria-label":u,title:m("close"),children:p??(0,cr.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,cr.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,cr.jsx)("p",{className:"ri-sidepanel__title",children:i})]}),(0,cr.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,cr.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:a,value:r,onChange:v=>o(v.target.value)})}),(0,cr.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var ri=require("react/jsx-runtime");function fg({objectBindings:e,onAction:t,onFocus:n,onHover:i,isOpen:r,onToggle:o,isolatedKeys:a=null,onIsolate:s}){let l=Me(),[c,h]=(0,od.useState)(null),[p,u]=(0,od.useState)(""),m=(0,od.useMemo)(()=>Object.entries(e).filter(([f,g])=>{let b=p.toLowerCase();return f.toLowerCase().includes(b)||(g.label??"").toLowerCase().includes(b)}),[e,p]);return(0,ri.jsx)(Hw,{openButtonLabel:"",openButtonAriaLabel:l("openSceneObjectsPanel"),openButtonIcon:(0,ri.jsx)(jp.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:l("sceneObjects"),title:l("visibleEntries",{count:m.length}),searchValue:p,onSearchChange:u,searchPlaceholder:l("searchNodesLabels"),isOpen:r,onToggle:o,closeButtonAriaLabel:l("closeSceneObjectsPanel"),children:m.map(([f,g])=>{let b=g.visible!==!1,y=c===f,v=a?.has(f)??!1;return(0,ri.jsxs)("div",{onClick:()=>n(g),onMouseEnter:()=>{h(f),i?.(g)},onMouseLeave:()=>{h(null),i?.(null)},className:`ri-sidepanel__row${y?" ri-sidepanel__row--hovered":""}${a!==null&&!v?" ri-sidepanel__row--setAside":""}`,children:[(0,ri.jsx)("button",{type:"button",className:`ri-sidepanel__label ri-sidepanel__labelButton${y?" ri-sidepanel__label--hovered":""}`,onFocus:()=>{h(f),i?.(g)},onBlur:()=>{h(null),i?.(null)},children:g.label??f}),s?(0,ri.jsx)("button",{type:"button",onClick:M=>{M.stopPropagation(),s(g)},className:`ri-sidepanel__isolate-btn${v?" ri-sidepanel__isolate-btn--active":""}`,title:l(v?"showAll":"isolate"),"aria-label":l(v?"showAllObject":"isolateObject",{name:g.label??f}),"aria-pressed":v,children:(0,ri.jsx)(jp.Focus,{width:14,height:14,"aria-hidden":"true"})}):null,(0,ri.jsx)("button",{type:"button",onClick:M=>{M.stopPropagation(),t?.({objectId:f,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:g})},className:"ri-sidepanel__vis-btn",title:l(b?"hide":"show"),"aria-label":l(b?"hideObject":"showObject",{name:g.label??f}),children:(0,ri.jsx)("span",{className:`ri-sidepanel__checkbox${b?" ri-sidepanel__checkbox--checked":""}`,children:b&&(0,ri.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,ri.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},f)})})}var Ci=require("react");function Ww(e,t){let n=[];for(let[i,r]of Object.entries(e))(t.bindings[i]??r).visible!==!1&&(t.setAside.has(i)||n.push({key:i,binding:r,label:r.label||i}));return n}function Xw(e,t,n){if(n===0)return null;switch(e){case"ArrowDown":case"ArrowRight":return Math.min(t+1,n-1);case"ArrowUp":case"ArrowLeft":return Math.max(t-1,0);case"Home":return 0;case"End":return n-1;default:return null}}function qw(e,t,n){let i=n.toLocaleLowerCase();if(!i)return null;let r=[...i].every(s=>s===i[0]),o=i.length>1&&!r?t:t+1,a=r?[i,i[0]]:[i];for(let s of a)for(let l=0;l<e.length;l++){let c=((o+l)%e.length+e.length)%e.length;if(e[c].label.toLocaleLowerCase().startsWith(s))return c}return null}var ra=require("react/jsx-runtime"),eR=600;function $w({objects:e,selectedKey:t,onHighlight:n,onSelect:i,onClearSelection:r}){let o=Me(),a=(0,Ci.useId)(),[s,l]=(0,Ci.useState)(!1),[c,h]=(0,Ci.useState)(null),p=(0,Ci.useRef)({query:"",at:0}),u=c?e.findIndex(M=>M.key===c):-1,m=u>=0?e[u]:null;(0,Ci.useEffect)(()=>{t&&e.some(M=>M.key===t)&&h(t)},[t,e]);let f=s?m?.binding??null:null,g=(0,Ci.useRef)(n);g.current=n,(0,Ci.useEffect)(()=>{if(s)return g.current(f),()=>g.current(null)},[s,f]);let b=M=>{M!==null&&e[M]&&h(e[M].key)},y=M=>{let _=m?u:-1,x=Xw(M.key,Math.max(_,0),e.length);if(x!==null){M.preventDefault(),b(_<0&&M.key!=="End"?0:x);return}if(M.key==="Enter"||M.key===" "){if(!m)return;M.preventDefault(),i(m.binding);return}if(M.key==="Escape"){if(!t)return;M.preventDefault(),M.stopPropagation(),r();return}if(M.key.length===1&&M.key!==" "&&!M.ctrlKey&&!M.metaKey&&!M.altKey){let P=Date.now(),d=p.current;d.query=P-d.at>eR?M.key:d.query+M.key,d.at=P,M.preventDefault(),b(qw(e,_,d.query))}};if(e.length===0)return null;let v=`${a}-option`,w=`${a}-hint`;return(0,ra.jsxs)("div",{className:`ri-objectNavigator${s?" ri-objectNavigator--focused":""}`,children:[(0,ra.jsx)("div",{role:"listbox",tabIndex:0,className:"ri-objectNavigator__list","aria-label":o("objectNavigator"),"aria-describedby":w,"aria-activedescendant":m?v:void 0,onFocus:()=>{l(!0),m||h(e[0].key)},onBlur:()=>l(!1),onKeyDown:y,children:m?(0,ra.jsxs)("div",{id:v,role:"option","aria-selected":m.key===t,"aria-setsize":e.length,"aria-posinset":u+1,className:`ri-objectNavigator__option${m.key===t?" ri-objectNavigator__option--selected":""}`,children:[(0,ra.jsx)("span",{className:"ri-objectNavigator__name",children:m.label}),(0,ra.jsx)("span",{className:"ri-objectNavigator__position","aria-hidden":"true",children:o("objectNavigatorPosition",{position:u+1,count:e.length})})]}):null}),(0,ra.jsx)("div",{id:w,className:"ri-objectNavigator__hint",children:o("objectNavigatorHint")})]})}var Yw=require("react"),Kw="(prefers-reduced-motion: reduce)";function tR(e){if(typeof window>"u"||!window.matchMedia)return()=>{};let t=window.matchMedia(Kw);return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}var nR=()=>typeof window<"u"&&!!window.matchMedia?.(Kw).matches;function wl(e="user"){let t=(0,Yw.useSyncExternalStore)(tR,nR,()=>!1);return e==="always"?!0:e==="never"?!1:t}var a_=require("lucide-react");var Gp=require("react"),gg=(0,Gp.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var Rr=()=>(0,Gp.useContext)(gg);var ia=require("react/jsx-runtime");function Hp({visible:e,message:t,tone:n="default",progress:i}){if(!e)return null;let r=typeof i=="number"&&Number.isFinite(i),o=r?Math.min(Math.max(i,0),100):0,a=Math.round(o);return(0,ia.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[r&&(0,ia.jsxs)("div",{className:"bb-loadingProgressRow",children:[(0,ia.jsx)("div",{className:"bb-loadingProgress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":a,children:(0,ia.jsx)("div",{className:"bb-loadingProgress__bar",style:{width:`${a}%`}})}),(0,ia.jsxs)("span",{className:"bb-loadingProgress__label",children:[a,"%"]})]}),(0,ia.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]})}function rR(e){return e.trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").replace(/[^a-zA-Z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").toLowerCase()}function bg(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,t=>t.toUpperCase())}function iR(e){let t=e.toLowerCase();return t.includes("light")?"light":t.includes("wheel")||t.includes("rim")||t.includes("tire")?"wheel":t.includes("glass")||t.includes("window")||t.includes("windshield")||t.includes("sunroof")?"glass":t.includes("seat")||t.includes("dashboard")||t.includes("console")||t.includes("doorpanel")?"interior":t.includes("floor")?"floor":t.includes("wall")?"wall":t.includes("door")?"door":t.includes("chair")||t.includes("table")||t.includes("sofa")||t.includes("bed")?"furniture":"other"}function Zw(e,t=!0){return e==="light"||e.endsWith("light")?[{id:"toggle-light",label:"Toggle Light",type:"command"},{id:"change-light-color",label:"Change Light Color",type:"command"},{id:"set-brightness",label:"Set Brightness",type:"command"}]:[{id:"change-color",label:"Change Color",type:"command"},...t?[{id:"change-material",label:"Change Material",type:"command"}]:[],{id:"toggle-visibility",label:"Toggle Visibility",type:"command"}]}function Jw(e,t=!0){let n=iR(e);return{id:rR(e),modelObjectId:e,type:n,label:bg(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:Zw(n,t),metrics:{},metadata:{}}}function Wp(e,t){return Object.fromEntries(e.map(n=>[n,Jw(n,!t?.has(n))]))}function Qw(e,t){let n=new Set,i={};for(let r of e){let o=Jw(r,!t?.has(r)),a=o.id||"object",s=a;for(let c=2;n.has(s);c++)s=`${a}-${c}`;n.add(s),o.id=s;let l=(o.actions??[]).filter(c=>fc.includes(c.id));o.actions=l.length>0?l:Zw("other",!t?.has(r)),i[r]=o}return i}function ad(e){let t=new Set;for(let[n,i]of Object.entries(lo(e).nodesById))vu(i)||t.add(n);return t}function sd(e){let{nodesById:t}=lo(e),n=[];for(let[i,r]of Object.entries(t)){let o=r;o.isMesh&&o.geometry&&r.name&&n.push(i)}return n.sort((i,r)=>i.localeCompare(r))}var Ue=require("react"),Yp=require("@react-three/fiber"),Kp=require("@react-three/drei"),ft=require("three");var eS="data:image/png;base64,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";var tS="data:image/png;base64,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";var nS="data:image/png;base64,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";var Ze=require("react/jsx-runtime"),vg=-100,yg=100,dS=.03,lR=.03,cR=.03,rS=.5,dR=eS,uR=tS,pR=nS,mR=Math.PI/4,iS=.4,Sl=64,oS=dS*3,xg="#4d7dff",aS="#ffcc00",sS=.02,hR=new ft.Vector3(0,1,0),Xp=32,lS="#ff9d3d",qp=4;function wg(e){let t=new Float32Array((Sl+1)*3);for(let n=0;n<=Sl;n++){let i=n/Sl*Math.PI*2,r=Math.cos(i)*iS,o=Math.sin(i)*iS,a=0,s=0,l=0;e==="x"?(s=r,l=o):e==="y"?(a=r,l=o):(a=r,s=o),t[n*3]=a,t[n*3+1]=s,t[n*3+2]=l}return t}function fR(e){let t=Math.abs(e.y)<.99?new ft.Vector3(0,1,0):new ft.Vector3(1,0,0),n=new ft.Vector3().crossVectors(e,t).normalize(),i=new ft.Vector3().crossVectors(e,n).normalize();return[n,i]}function cS(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}var _l=null,Sg=new Set;function ld(e){_l!==e&&(_l=e,Sg.forEach(t=>t()))}function _g(e){return Sg.add(e),()=>Sg.delete(e)}function $p(){return _l}function uS({light:e,position:t,rotation:n=[0,0,0],color:i,intensity:r,visible:o,onPositionChange:a,onRotationChange:s,onDraggingChange:l}){let{activeTab:c,activeSubTab:h,setActiveTab:p,setActiveSubTab:u}=Rr(),{camera:m,gl:f,raycaster:g,invalidate:b}=(0,Yp.useThree)(),y=(0,Ue.useRef)(null),v=(0,Ue.useRef)(null),w=(0,Ue.useRef)(null),M=(0,Ue.useRef)(null),_=(0,Ue.useRef)(null),x=(0,Ue.useRef)(null),P=(0,Ue.useRef)(null),d=(0,Ue.useRef)(null),S=(0,Ue.useRef)(null),C=(0,Ue.useRef)(null),T=(0,Ue.useRef)(null),E=(0,Ue.useMemo)(()=>new ft.Matrix4,[]),k=(0,Ue.useMemo)(()=>new ft.Quaternion,[]),D=(0,Ue.useMemo)(()=>new ft.Vector3(1,1,1),[]),B=(0,Ue.useRef)([0,0,0]),L=(0,Ue.useRef)([0,0,0]),X=(0,Ue.useRef)(!1),O=(0,Ue.useRef)(null),I=(0,Ue.useRef)(null),re=(0,Ue.useRef)(null),ke=(0,Ue.useRef)(l);(0,Ue.useEffect)(()=>{ke.current=l},[l]);let te=(0,Ue.useMemo)(()=>new ft.Vector3(t[0],t[1],t[2]),[t]),We=(0,Ue.useMemo)(()=>new ft.Euler(n[0],n[1],n[2]),[n]),wt=(0,Ue.useMemo)(()=>new Float32Array(6),[]),be=(0,Ue.useMemo)(()=>wg("x"),[]),ue=(0,Ue.useMemo)(()=>wg("y"),[]),Ne=(0,Ue.useMemo)(()=>wg("z"),[]),Te=(0,Ue.useMemo)(()=>new Float32Array((Xp+1)*3),[]),bn=(0,Ue.useMemo)(()=>new Float32Array(qp*2*3),[]),Oe=e?.type==="point",ot=e?.type==="spot",mt=Oe?uR:ot?pR:dR,vn=Oe?lR:ot?cR:dS,de=(0,Ue.useMemo)(()=>new ft.TextureLoader().load(mt),[mt]),ur=(0,Ue.useSyncExternalStore)(_g,$p,$p),jt=!!e&&ur===e.id,Gt=(0,Ue.useRef)(new ft.Vector3),ce=(0,Ue.useRef)(new ft.Euler);(0,Ue.useEffect)(()=>{X.current||(Gt.current.copy(te),ce.current.copy(We),b())},[te,We,b]),(0,Ue.useEffect)(()=>{e&&_l===e.id&&!o&&ld(null)},[e?.id,o]),(0,Ue.useEffect)(()=>()=>{e&&_l===e.id&&ld(null),re.current!==null&&(cancelAnimationFrame(re.current),re.current=null)},[e?.id]);let Ie=(0,Ue.useCallback)(()=>{if(X.current||!jt)return;let Ae=Gt.current,Ce=new ft.Quaternion().setFromEuler(ce.current);E.compose(Ae,Ce,D)},[E,D,jt]);(0,Yp.useFrame)(()=>{if(y.current&&y.current.position.copy(Gt.current),Ie(),w.current){w.current.lookAt(m.position);let Ae=m,Ce;Ae.isOrthographicCamera?Ce=vn/Ae.zoom:Ce=m.position.distanceTo(Gt.current)*vn,w.current.scale.setScalar(Ce)}if(P.current){let Ae=m,Ce;Ae.isOrthographicCamera?Ce=oS/Ae.zoom:Ce=m.position.distanceTo(Gt.current)*oS,P.current.scale.setScalar(Ce)}if(_.current){let Ae=_.current.getAttribute("position"),Ce=Ae.array;Ce[0]=0,Ce[1]=0,Ce[2]=0,Ce[3]=Gt.current.x,Ce[4]=Gt.current.y,Ce[5]=Gt.current.z,Ae.needsUpdate=!0,_.current.computeBoundingSphere()}if(x.current){let Ae=Gt.current,Ce=Ae.length();x.current.visible=Ce>rS,Ce>1e-6&&(x.current.position.copy(Ae).multiplyScalar(.5),x.current.scale.set(1,Ce,1),x.current.quaternion.setFromUnitVectors(hR,Ae.clone().normalize()))}if(M.current&&(M.current.visible=Gt.current.length()>rS),ot&&d.current&&S.current&&C.current){let Ae=Gt.current,Ce=Ae.length();if(Ce>1e-6){d.current.visible=!0;let Pt=Ae.clone().negate().normalize(),St=Ce,dn=e?.angle??Math.PI/6,ae=St*Math.tan(dn),he=Ae.clone().add(Pt.clone().multiplyScalar(St)),[Ee,Be]=fR(Pt),_t=S.current.getAttribute("position"),Je=_t.array;for(let Qe=0;Qe<=Xp;Qe++){let bt=Qe/Xp*Math.PI*2,un=he.x+(Ee.x*Math.cos(bt)+Be.x*Math.sin(bt))*ae,or=he.y+(Ee.y*Math.cos(bt)+Be.y*Math.sin(bt))*ae,yn=he.z+(Ee.z*Math.cos(bt)+Be.z*Math.sin(bt))*ae;Je[Qe*3]=un,Je[Qe*3+1]=or,Je[Qe*3+2]=yn}_t.needsUpdate=!0,S.current.computeBoundingSphere();let et=C.current.getAttribute("position"),ve=et.array;for(let Qe=0;Qe<qp;Qe++){let bt=Qe/qp*Math.PI*2,un=he.x+(Ee.x*Math.cos(bt)+Be.x*Math.sin(bt))*ae,or=he.y+(Ee.y*Math.cos(bt)+Be.y*Math.sin(bt))*ae,yn=he.z+(Ee.z*Math.cos(bt)+Be.z*Math.sin(bt))*ae,Vn=Qe*6;ve[Vn]=Ae.x,ve[Vn+1]=Ae.y,ve[Vn+2]=Ae.z,ve[Vn+3]=un,ve[Vn+4]=or,ve[Vn+5]=yn}et.needsUpdate=!0,C.current.computeBoundingSphere()}else d.current.visible=!1}});let zt=(0,Ue.useCallback)(()=>{re.current!==null&&(cancelAnimationFrame(re.current),re.current=null),B.current=t,L.current=[n[0],n[1],n[2]],X.current=!0,O.current=null,I.current=null,ke.current?.(!0)},[t,n]),gt=(0,Ue.useCallback)((Ae,Ce,Pt,St)=>{let dn=new ft.Vector3(B.current[0],B.current[1],B.current[2]),ae=new ft.Vector3,he=new ft.Quaternion,Ee=new ft.Vector3;St.decompose(ae,he,Ee);let Be=dn.clone().applyMatrix4(St),_t=[Math.min(Math.max(Be.x,vg),yg),Math.min(Math.max(Be.y,vg),yg),Math.min(Math.max(Be.z,vg),yg)],Je=new ft.Quaternion().setFromEuler(new ft.Euler(L.current[0],L.current[1],L.current[2],"XYZ")),et=new ft.Quaternion().copy(he).multiply(Je),ve=new ft.Euler().setFromQuaternion(et,"XYZ"),Qe=[ve.x,ve.y,ve.z];Gt.current.set(_t[0],_t[1],_t[2]),ce.current.set(Qe[0],Qe[1],Qe[2]),O.current=_t,I.current=Qe;let bt=new ft.Quaternion().setFromEuler(ce.current);E.compose(Gt.current,bt,D),b()},[E,D,b]),Ut=(0,Ue.useCallback)(()=>{X.current=!1;let Ae=O.current,Ce=I.current;O.current=null,I.current=null;let Pt=Ae&&!cS(Ae,B.current),St=Ce&&!cS(Ce,L.current);Pt&&a&&a(Ae),St&&s&&s(Ce),Pt||St?re.current=requestAnimationFrame(()=>{re.current=null,ke.current?.(!1)}):ke.current?.(!1)},[a,s]);return(0,Ue.useEffect)(()=>{let Ae=St=>{let dn=f.domElement.getBoundingClientRect();return new ft.Vector2((St.clientX-dn.left)/dn.width*2-1,-((St.clientY-dn.top)/dn.height)*2+1)},Ce=St=>!!St.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Pt=St=>{if(Ce(St))return;let dn=Ae(St);g.setFromCamera(dn,m);let ae=[];if(v.current&&ae.push(v.current),w.current&&ae.push(w.current),ae.length===0)return;if(g.intersectObjects(ae,!1).length>0){let Ee=e?.id??null;_l!==Ee&&(ld(Ee),p?.("scene"),u?.("Lighting")),St.preventDefault(),St.stopPropagation()}};return f.domElement.addEventListener("pointerdown",Pt),()=>{f.domElement.removeEventListener("pointerdown",Pt)}},[m,g,f,e,p,u]),c!=="scene"||h!=="Lighting"||!e||!o||e.type==="none"||e.type==="hemisphere"?null:(0,Ze.jsxs)("group",{ref:Ae=>{Ae&&tu(Ae)},children:[(0,Ze.jsxs)("group",{ref:y,children:[(0,Ze.jsx)("sprite",{ref:w,children:(0,Ze.jsx)("spriteMaterial",{map:de,transparent:!0,opacity:.9,blending:ft.AdditiveBlending,depthWrite:!1,rotation:ot?mR:0},mt)}),(0,Ze.jsx)(Kp.Sphere,{ref:v,args:[.25,16,16],children:(0,Ze.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),Oe&&(0,Ze.jsxs)("group",{ref:P,children:[(0,Ze.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ze.jsx)("bufferGeometry",{children:(0,Ze.jsx)("bufferAttribute",{attach:"attributes-position",args:[be,3],count:Sl+1})}),(0,Ze.jsx)("lineBasicMaterial",{color:xg,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ze.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ze.jsx)("bufferGeometry",{children:(0,Ze.jsx)("bufferAttribute",{attach:"attributes-position",args:[ue,3],count:Sl+1})}),(0,Ze.jsx)("lineBasicMaterial",{color:xg,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ze.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ze.jsx)("bufferGeometry",{children:(0,Ze.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ne,3],count:Sl+1})}),(0,Ze.jsx)("lineBasicMaterial",{color:xg,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!Oe&&!ot&&(0,Ze.jsxs)(Ze.Fragment,{children:[(0,Ze.jsxs)("mesh",{ref:x,children:[(0,Ze.jsx)("cylinderGeometry",{args:[sS,sS,1,8,1,!0]}),(0,Ze.jsx)("meshBasicMaterial",{color:aS,transparent:!0,opacity:.05,blending:ft.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Ze.jsxs)("line",{ref:M,children:[(0,Ze.jsx)("bufferGeometry",{ref:_,children:(0,Ze.jsx)("bufferAttribute",{attach:"attributes-position",args:[wt,3],count:2})}),(0,Ze.jsx)("lineBasicMaterial",{color:aS,transparent:!0,opacity:.7,blending:ft.AdditiveBlending})]})]}),ot&&(0,Ze.jsxs)("group",{ref:d,children:[(0,Ze.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ze.jsx)("bufferGeometry",{ref:S,children:(0,Ze.jsx)("bufferAttribute",{attach:"attributes-position",args:[Te,3],count:Xp+1})}),(0,Ze.jsx)("lineBasicMaterial",{color:lS,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Ze.jsxs)("lineSegments",{renderOrder:999,children:[(0,Ze.jsx)("bufferGeometry",{ref:C,children:(0,Ze.jsx)("bufferAttribute",{attach:"attributes-position",args:[bn,3],count:qp*2})}),(0,Ze.jsx)("lineBasicMaterial",{color:lS,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),jt&&a&&(0,Ze.jsx)(Kp.PivotControls,{ref:T,matrix:E,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:zt,onDrag:gt,onDragEnd:Ut})]})}var Yt=require("react"),hS=require("@react-three/drei"),Jp=require("@react-three/fiber"),Bn=require("three");var In=require("three");function Zp(e){e.updateWorldMatrix(!0,!0);let t=new In.Matrix4().copy(e.matrixWorld).invert(),n=new In.Box3,i=new In.Box3,r=!1;return e.traverse(o=>{let a=o;if(!a.isMesh||!a.geometry||(a.geometry.boundingBox||a.geometry.computeBoundingBox(),!a.geometry.boundingBox))return;let s=new In.Matrix4().multiplyMatrices(t,o.matrixWorld);i.copy(a.geometry.boundingBox).applyMatrix4(s),n.union(i),r=!0}),r?n.getCenter(new In.Vector3):new In.Vector3}function pS(e,t="XYZ"){return new In.Quaternion().setFromEuler(new In.Euler(e[0],e[1],e[2],t))}function gR(e,t,n,i,r="XYZ"){let a=new In.Vector3(...i).multiply(new In.Vector3(...n)).applyQuaternion(pS(t,r)).add(new In.Vector3(...e));return[a.x,a.y,a.z]}function mS(e,t,n,i,r,o="XYZ"){let a=new In.Vector3(...gR(e,t,i,r,o)),s=new In.Vector3(...r).multiply(new In.Vector3(...i)).applyQuaternion(pS(n,o)),l=a.sub(s);return[l.x,l.y,l.z]}var Mg=require("react/jsx-runtime");function Cg({node:e,space:t,onTransformChange:n,onDraggingChange:i}){let r=(0,Jp.useThree)(T=>T.invalidate),o=(0,Yt.useMemo)(()=>Zp(e),[e]),a=(0,Yt.useMemo)(()=>new Bn.Matrix4,[]),s=(0,Yt.useRef)(!1),l=(0,Yt.useRef)(new Bn.Matrix4),c=(0,Yt.useRef)(new Bn.Matrix4),h=(0,Yt.useRef)(null),p=(0,Yt.useRef)(0),u=(0,Yt.useRef)([]),m=(0,Yt.useRef)(null),f=(0,Yt.useRef)(i);f.current=i;let g=(0,Yt.useMemo)(()=>new Bn.Vector3,[]),b=(0,Yt.useMemo)(()=>new Bn.Quaternion,[]),y=(0,Yt.useMemo)(()=>new Bn.Vector3,[]),v=(0,Yt.useMemo)(()=>new Bn.Quaternion,[]),w=(0,Yt.useMemo)(()=>new Bn.Vector3(1,1,1),[]),M=(0,Yt.useMemo)(()=>new Bn.Quaternion,[]),_=(0,Yt.useMemo)(()=>new Bn.Vector3,[]),x=(0,Yt.useMemo)(()=>new Bn.Vector3,[]),P=(0,Yt.useRef)([0,0,0]),d=(0,Yt.useCallback)(()=>{s.current||(e.updateWorldMatrix(!0,!1),g.copy(o).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(b),v.copy(b),t==="world"&&v.identity(),a.compose(g,v,w))},[g,a,v,w,e,o,t,b]);(0,Yt.useLayoutEffect)(()=>(d(),()=>{let T=m.current!==null;T&&(cancelAnimationFrame(m.current),m.current=null),(s.current||T)&&(s.current=!1,f.current(!1));for(let E of u.current)Js(E);u.current=[]}),[d]),(0,Jp.useFrame)(()=>d());let S=(0,Yt.useCallback)(()=>{m.current!==null&&(cancelAnimationFrame(m.current),m.current=null),e.updateWorldMatrix(!0,!0),u.current=[];for(let T of Zs(e))Zy(T)||(wu(T,T.matrixWorld),u.current.push(T));e.updateWorldMatrix(!0,!1),g.copy(o).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(b),e.getWorldScale(y),l.current.compose(g,b,y),c.current.copy(a),P.current=[e.rotation.x,e.rotation.y,e.rotation.z],h.current=null,s.current=!0,i(!0)},[g,a,e,i,o,b,y]),C=(0,Yt.useCallback)((T,E)=>{let k=l.current.clone().premultiply(E),D=c.current.clone().premultiply(E);k.decompose(_,b,x);let B=_.clone();D.decompose(g,v,w),t==="world"&&v.identity(),a.compose(g,v,w),T.decompose(_,M,x);let L=new Bn.Euler().setFromQuaternion(M,e.rotation.order),[X,O,I]=P.current,re=[X+L.x,O+L.y,I+L.z],ke=new Bn.Quaternion().setFromEuler(new Bn.Euler(re[0],re[1],re[2],e.rotation.order)),We=(e.parent?.matrixWorld||new Bn.Matrix4).clone().invert(),wt=B.clone().applyMatrix4(We),be=o.clone().multiply(e.scale).applyQuaternion(ke),ue=wt.clone().sub(be),Ne=[ue.x,ue.y,ue.z];e.position.set(Ne[0],Ne[1],Ne[2]),e.rotation.set(re[0],re[1],re[2],e.rotation.order),e.updateMatrixWorld(!0),r(),h.current={position:Ne,rotation:re}},[g,M,a,v,w,r,e,o,_,x,t,b]);return(0,Mg.jsx)("group",{children:(0,Mg.jsx)(hS.PivotControls,{matrix:a,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:S,onDrag:(T,E,k,D)=>C(E,D),onDragEnd:()=>{s.current=!1;let T=h.current;if(h.current=null,T)n(T),m.current=requestAnimationFrame(()=>{m.current=null,i(!1)});else if(u.current.length>0){for(let E of u.current)Js(E);e.updateMatrixWorld(!0),r(),i(!1)}else i(!1);u.current=[]}})})}var fS=require("three");function bR(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,i=n.getAttribute("skinIndex"),r=n.getAttribute("skinWeight"),o=n.getAttribute("position");if(!i||!r||!o)return null;let a=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],l=new fS.Vector3,c=s[0],h=1/0;for(let m of s){l.fromBufferAttribute(o,m);let f=l.distanceToSquared(a);f<h&&(h=f,c=m)}let p=i.getComponent(c,0),u=r.getComponent(c,0);for(let m=1;m<4;m++){let f=r.getComponent(c,m);f>u&&(u=f,p=i.getComponent(c,m))}return t.skeleton.bones[p]??null}function gS(e){let t=bR(e)??e.object,n=Pc(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let i=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[i.x,i.y,i.z]}}function bS(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let i=yi(t,e.anchorNodeName);return i?(i.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(i.matrixWorld),!0):!1}var vo=require("react"),em=require("@react-three/fiber"),Qp=require("three");function Tg({annotation:e,enabled:t,controlsRef:n,offsetRef:i}){let r=(0,em.useThree)(u=>u.scene),o=(0,vo.useRef)(null),a=(0,vo.useRef)(!1),s=(0,vo.useMemo)(()=>new Qp.Vector3,[]),l=(0,vo.useMemo)(()=>new Qp.Vector3,[]),c=(0,vo.useMemo)(()=>new Qp.Vector3,[]),h=e?.anchorNodeName,p=e?.anchorLocalPosition;return(0,vo.useEffect)(()=>{o.current=null,a.current=!1},[h,e?.id]),(0,em.useFrame)(()=>{let u=n.current,m=i.current;if(!t||!u||!m||!h||!p){a.current=!1;return}let f=o.current;if((!f||!f.parent)&&(f=yi(r,h),o.current=f),!f){a.current=!1;return}f.updateWorldMatrix(!0,!1),s.set(p[0],p[1],p[2]).applyMatrix4(f.matrixWorld),!(a.current&&s.distanceToSquared(l)<1e-8)&&(l.copy(s),a.current=!0,c.copy(s).add(m),u.setLookAt(c.x,c.y,c.z,s.x,s.y,s.z,!0))}),null}var nt=require("react"),as=require("three");function vS({sceneAnnotations:e,controlledAnnotationCategories:t,onAnnotationCategoriesChange:n,showAnnotationFilters:i,initialCategories:r,controlledActiveAnnotation:o,onActiveAnnotationChange:a,onAnnotationsChange:s,controlsRef:l,sceneRef:c,annotationWorldPositionsRef:h,tourCameraOffsetRef:p,initialCameraStateRef:u,engagement:m,engagementRef:f}){let[g,b]=(0,nt.useState)(!1),[y,v]=(0,nt.useState)(()=>e??[]);(0,nt.useEffect)(()=>{if(y.length>0){let ce=y.reduce((Ie,zt)=>Math.max(Ie,zt.id),0);P.current=ce}else P.current=0},[y]);let[w,M]=(0,nt.useState)(null),[_,x]=(0,nt.useState)({title:"",description:""}),P=(0,nt.useRef)(0),[d,S]=(0,nt.useState)(null),[C,T]=(0,nt.useState)(-1),[E,k]=(0,nt.useState)(!1),D=(0,nt.useRef)(null),[B,L]=(0,nt.useState)(()=>r),X=t===void 0?B:t,O=(0,nt.useMemo)(()=>J1(y,X),[y,X]),I=(0,nt.useMemo)(()=>[...new Set(y.map(Xf))].sort(),[y]),re=i&&I.some(Boolean),ke=ce=>{t===void 0&&L(ce),n?.(ce)},te=(0,nt.useMemo)(()=>[...O].sort((ce,Ie)=>ce.id-Ie.id),[O]),We=(0,nt.useMemo)(()=>JSON.stringify([X?.map(ce=>ce.trim()).sort()??null,te]),[X,te]),wt=(0,nt.useMemo)(()=>C<0||C>=te.length?null:te[C],[C,te]),be=(0,nt.useCallback)(ce=>{if(o!==void 0){a?.(ce);return}S(ce?{annotation:ce}:null)},[o,a]),ue=(0,nt.useRef)(null),Ne=(0,nt.useCallback)(ce=>{let Ie=l.current,zt=c.current;if(!Ie)return;let gt=new as.Vector3,Ut=h.current.get(ce.id);Ut?gt.copy(Ut):zt&&bS(ce,zt,gt)||gt.set(ce.worldPosition[0],ce.worldPosition[1],ce.worldPosition[2]),p.current=null;let Ae=Ie.smoothTime;Ie.smoothTime=il(Ie,.6);let Ce=ce.worldNormal;if(bl(ce.cameraView))ed(Ie,ce.cameraView);else{if(zt){let Pt=new as.Box3().setFromObject(zt),St=new as.Vector3;Pt.getCenter(St);let dn=new as.Vector3;Pt.getSize(dn);let ae=dn.length()*.2,he;Ce?he=new as.Vector3(Ce[0],Ce[1],Ce[2]):he=gt.clone().sub(St),he.lengthSq()<1e-6&&he.set(0,0,1),he.normalize();let Ee=Math.max(ae*.6,.3),Be=gt.clone().add(he.multiplyScalar(Ee));Ie.setPosition(Be.x,Be.y,Be.z,!0),ce.anchorNodeName&&ce.anchorLocalPosition&&(p.current=Be.clone().sub(gt))}Ie.setTarget(gt.x,gt.y,gt.z,!0),ue.current&&td(Ie,ue.current)}D.current&&clearTimeout(D.current),D.current=setTimeout(()=>{Ie.smoothTime=Ae,D.current=null},800),be(ce)},[be]),Te=(0,nt.useCallback)(()=>{te.length!==0&&(l.current&&(ue.current=Qc(l.current)),m.startTour(te.length),b(!0),T(0),Ne(te[0]))},[te,Ne,m]),bn=(0,nt.useCallback)(()=>{if(te.length===0||C<0)return;k(!0);let ce=(C-1+te.length)%te.length;T(ce),Ne(te[ce]),setTimeout(()=>k(!1),500)},[C,te,Ne]),Oe=(0,nt.useCallback)(()=>{if(te.length===0||C<0)return;if(C===te.length-1){if(m.completeTour(),b(!1),T(-1),be(null),l.current&&u.current){let Ie=u.current;ed(l.current,{...ue.current,...Ie}),ue.current=null}return}k(!0);let ce=C+1;T(ce),Ne(te[ce]),setTimeout(()=>k(!1),500)},[C,te,Ne,be,m]),ot=(0,nt.useCallback)(()=>{if(m.stopTour(),b(!1),T(-1),be(null),l.current&&u.current){let ce=u.current;ed(l.current,{...ue.current,...ce}),ue.current=null}},[be,m]);(0,nt.useEffect)(()=>{f.current.stopTour("annotations-changed"),ue.current&&l.current&&(ed(l.current,{...ue.current,...u.current??{}}),ue.current=null),p.current=null,T(-1),b(!1)},[We]),(0,nt.useEffect)(()=>()=>{D.current&&clearTimeout(D.current)},[]),(0,nt.useEffect)(()=>{wt&&g&&ue.current&&be(wt)},[wt,be,g]),(0,nt.useEffect)(()=>{if(e===void 0)return;let ce=e.map(Ie=>({...Ie,localPosition:Ie.localPosition??Ie.worldPosition}));v(ce)},[e]);let mt=(0,nt.useCallback)(()=>{if(o!==void 0){a?.(null);return}S(null)},[o,a]),vn=o!==void 0?o:d?.annotation??null,de=(0,nt.useMemo)(()=>vn?O.find(Ie=>Ie.id===vn.id)??null:null,[vn,O]);(0,nt.useEffect)(()=>{vn&&!de&&mt()},[vn,de,mt]);let ur=(0,nt.useCallback)(()=>{if(!w||!_.title.trim())return;P.current+=1;let Ie={id:P.current,worldPosition:w.worldPosition,localPosition:w.localPosition,worldNormal:w.worldNormal,anchorNodeName:w.anchor?.anchorNodeName,anchorLocalPosition:w.anchor?.anchorLocalPosition,title:_.title.trim(),description:_.description},zt=[...y,Ie];v(zt),s?.(zt),M(null)},[w,_,y,s]),jt=(0,nt.useCallback)(()=>M(null),[]),Gt=(0,nt.useCallback)(ce=>{bl(ce.cameraView)?Ne(ce):be(ce)},[be,Ne]);return{annotations:y,pendingAnnotation:w,setPendingAnnotation:M,annotationForm:_,setAnnotationForm:x,currentAnnotationIndex:C,isNavigating:E,localAnnotationCategories:B,selectedAnnotationCategories:X,visibleAnnotations:O,availableAnnotationCategories:I,annotationFiltersVisible:re,changeAnnotationCategories:ke,sortedAnnotations:te,currentAnnotation:wt,setActiveAnnotation:be,focusAnnotation:Ne,startGuidedTour:Te,goToPreviousAnnotation:bn,goToNextAnnotation:Oe,stopGuidedTour:ot,closeViewingAnnotation:mt,activeAnnotation:vn,activeViewingAnnotation:de,isGuidedTourActive:g,handleAnnotationOk:ur,handleAnnotationCancel:jt,handleAnnotationMarkerClick:Gt}}var ii=require("react"),xS=require("three");var zn=require("three");function tm(e,t){if(!(e instanceof zn.Mesh)||!t)return null;let n=e.geometry.getAttribute("position");if(!n?.count)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let i=new zn.Box3,r=new zn.Vector3;if(hi(e)){let x=e;x.computeBoundingBox(),x.computeBoundingSphere();for(let P=0;P<n.count;P++)i.expandByPoint(e.getVertexPosition(P,r))}else e.geometry.boundingBox||e.geometry.computeBoundingBox(),i.copy(e.geometry.boundingBox);if(i.applyMatrix4(e.matrixWorld),i.isEmpty())return null;let o=i.getCenter(new zn.Vector3),a=t.getWorldPosition(new zn.Vector3),s=t.getWorldDirection(new zn.Vector3),l=t.isOrthographicCamera,c=new zn.Raycaster,h=x=>{if(l){let d=a.distanceTo(o)+i.getSize(r).length()+1;c.set(x.clone().addScaledVector(s,-d),s)}else c.set(a,x.clone().sub(a).normalize());let P=c.intersectObject(e,!1)[0];return P?Va({...P,ray:c.ray},e):null},p=h(o);if(p)return p;let u=e.geometry.index,m=u?.count??n.count,f=new zn.Vector3,g=new zn.Vector3,b=new zn.Vector3,y=new zn.Vector3,v=new zn.Vector3,w=new zn.Vector3,M=null,_=1/0;for(let x=0;x+2<m;x+=3){if(e.getVertexPosition(u?u.getX(x):x,f).applyMatrix4(e.matrixWorld),e.getVertexPosition(u?u.getX(x+1):x+1,g).applyMatrix4(e.matrixWorld),e.getVertexPosition(u?u.getX(x+2):x+2,b).applyMatrix4(e.matrixWorld),y.copy(f).add(g).add(b).multiplyScalar(1/3),zn.Triangle.getNormal(f,g,b,v),l?w.copy(s).negate():w.copy(a).sub(y),v.dot(w)<=0)continue;let P=y.distanceToSquared(o);P<_&&(_=P,M=y.clone())}return M?h(M):null}var Un=require("three");function nm(e,t,n,i){if(!(e instanceof Un.Mesh)||!t)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let r=new Un.Vector3().fromArray(n.position);if(hi(e)){let c=e;c.computeBoundingBox(),c.computeBoundingSphere();let h=c.geometry.getAttribute("position");if(!h)return null;let p=c.geometry.index,u=p?.count??h.count,m=new Un.Triangle,f=new Un.Vector3,g=new Un.Vector3,b=1/0,y=null;for(let v=0;v+2<u;v+=3){let w=[0,1,2].map(_=>p?p.getX(v+_):v+_);m.a.fromBufferAttribute(h,w[0]),m.b.fromBufferAttribute(h,w[1]),m.c.fromBufferAttribute(h,w[2]),m.closestPointToPoint(r,f);let M=f.distanceToSquared(r);if(!(M>=b||!m.getBarycoord(f,g))&&(b=M,y=new Un.Vector3().addScaledVector(c.getVertexPosition(w[0],new Un.Vector3),g.x).addScaledVector(c.getVertexPosition(w[1],new Un.Vector3),g.y).addScaledVector(c.getVertexPosition(w[2],new Un.Vector3),g.z),b<1e-12))break}if(!y)return null;r.copy(y)}if(r.applyMatrix4(e.matrixWorld).project(t),!Number.isFinite(r.x)||r.z<-1||r.z>1)return null;let o=new Un.Vector2(i==="left"?-.0035:i==="right"?.0035:0,i==="down"?-.0035:i==="up"?.0035:0),a=new Un.Raycaster,s=n.size*.01,l=new Un.Vector3().fromArray(n.position);for(let c=1;c>=1/1024;c/=2){a.setFromCamera(new Un.Vector2(r.x,r.y).addScaledVector(o,c),t);let h=a.intersectObject(e,!1)[0];if(h){let p=Va({...h,ray:a.ray},e);if(new Un.Vector3().fromArray(p.position).distanceTo(l)<=s)return p}}return null}var yS=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function wS({currentObjectBindings:e,currentObjectBindingsRef:t,applyObjectBindings:n,nodeRefsMap:i,controlsRef:r,decalMove:o,decalDragging:a,setDecalDragging:s,setDecalError:l,setDecalControl:c,decalRequestRef:h,onTextureUpload:p,currentPanelObjectId:u,modelUrl:m}){let f=(0,ii.useCallback)((x,P)=>{let d=t.current,S=d[x];if(!S)return;let C=P(S.decals??[]);n({...d,[x]:{...S,decals:C.length>0?C:void 0}})},[n,e]),g=(0,ii.useMemo)(()=>{if(!a)return null;let{objectKey:x,decalId:P}=a,d=e[x],S=d?.decals?.find(C=>C.id===P);return S?{objectId:d.modelObjectId??x,decal:S,onCancel:()=>s(null),onCommit:C=>{f(x,T=>T.map(E=>E.id===P?{...E,...C}:E)),s(null)}}:null},[a,e,f]),b=o??g,y=(0,ii.useCallback)((x,P)=>{h.current++;let d=t.current[x],S=i.current[d?.modelObjectId??x],C=tm(S,r.current?.camera);if(!C)return l("Could not find a surface on this object for the decal."),!1;let T={...P,...C};return f(x,E=>[...E,T]),l(null),c(E=>E&&{...E,activeId:T.id}),s({objectKey:x,decalId:T.id}),!0},[f]),v=(0,ii.useCallback)(x=>{let P=t.current[x],d=i.current[P?.modelObjectId??x]?.geometry;if(!d)return .2;d.boundingBox||d.computeBoundingBox();let S=d.boundingBox?.getSize(new xS.Vector3),C=S?Math.max(S.x,S.y,S.z):0;return C>0&&Number.isFinite(C)?C/3:.2},[]),w=(0,ii.useRef)([]);(0,ii.useEffect)(()=>()=>{for(let x of w.current)URL.revokeObjectURL(x)},[]);let M=(0,ii.useCallback)(async(x,P,d)=>{let S=++h.current;s(null);let C;if(p){if(C=await p(d,x),S!==h.current)return}else C=URL.createObjectURL(d),w.current.push(C);y(P,{id:yS(),image:C,size:v(P)})},[v,p,y]);return(0,ii.useEffect)(()=>{h.current++,l(null),s(null)},[u,m]),{editDecals:f,activeDecalMove:b,addCenteredDecal:y,decalSizeFor:v,startImageDecal:M,decalControlHandlers:(x,P)=>({onSelect:d=>{h.current++,l(null),s(null),c({...x,activeId:d})},onAddText:(d,S)=>y(P,{id:yS(),text:d,color:S,size:v(P)}),onAddImage:d=>{M(x.objectId,P,d)},onChange:(d,S)=>f(P,C=>C.map(T=>T.id===d?{...T,...S}:T)),onNudge:(d,S)=>{let C=t.current[P],T=C?.decals?.find(D=>D.id===d);if(!T)return;let E=i.current[C.modelObjectId??P],k=nm(E,r.current?.camera,T,S);if(!k){l("No visible surface in that direction. Try another arrow or rotate the view.");return}l(null),s(null),f(P,D=>D.map(B=>B.id===d?{...B,...k}:B))},onMove:d=>{h.current++,e[P]?.decals?.find(C=>C.id===d)&&(l(null),s(C=>C?.objectKey===P&&C.decalId===d?null:{objectKey:P,decalId:d}))},onRemove:d=>{s(null),f(P,S=>S.filter(C=>C.id!==d)),c({...x,activeId:null})},onClose:()=>{h.current++,l(null),s(null),c(null)}})}}var cd=require("react");function SS({canvasAreaElement:e,controlsRef:t,enabled:n}){let i=(0,cd.useRef)(new Set),r=(0,cd.useRef)(null);(0,cd.useEffect)(()=>{let o=e;if(!o||!n)return;let a=new Set(["w","a","s","d"," ","c"]),s=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),l=0,c=f=>f.code==="Space"?" ":f.key.toLowerCase(),h=()=>{i.current.clear(),l=0,r.current!==null&&(cancelAnimationFrame(r.current),r.current=null)},p=f=>{let g=t.current,b=i.current;if(!g||b.size===0){r.current=null,l=0;return}let y=l?Math.min((f-l)/1e3,.05):1/60;l=f;let v=Math.max(g.distance*.75,.01)*y;b.has("w")&&g.forward(v,!1),b.has("s")&&g.forward(-v,!1),b.has("a")&&g.truck(-v,0,!1),b.has("d")&&g.truck(v,0,!1),b.has(" ")&&g.truck(0,v,!1),b.has("c")&&g.truck(0,-v,!1),r.current=requestAnimationFrame(p)},u=f=>{if(f.target!==o){h();return}if(s.has(f.key)){let b=t.current;if(!b)return;f.preventDefault();let y=Math.PI/90,v=Math.max(b.distance*.05,.01);f.key==="ArrowUp"?f.shiftKey?b.forward(v,!0):b.rotate(0,-y,!0):f.key==="ArrowDown"?f.shiftKey?b.forward(-v,!0):b.rotate(0,y,!0):f.key==="ArrowLeft"?b.rotate(-y,0,!0):b.rotate(y,0,!0);return}let g=c(f);a.has(g)&&(f.preventDefault(),i.current.add(g),r.current===null&&(r.current=requestAnimationFrame(p)))},m=f=>{i.current.delete(c(f))};return o.addEventListener("keydown",u),o.addEventListener("keyup",m),o.addEventListener("blur",h),()=>{o.removeEventListener("keydown",u),o.removeEventListener("keyup",m),o.removeEventListener("blur",h),h()}},[e,t,n])}var Kn=require("react");var _S=1,vR=4,yR=.0015,xR=.1,wR=8;function MS({moveZoomTarget:e,setMoveZoomTarget:t,currentObjectBindingsRef:n,materialRefsOut:i,rendererCaptureRef:r,canvasAreaRef:o,canvasAreaElement:a,applyBindingStyle:s}){let l=(0,Kn.useRef)(null),c=(0,Kn.useRef)(!1),h=(0,Kn.useRef)([0,0]),p=(0,Kn.useRef)([0,0]),u=(0,Kn.useRef)(1),m=(0,Kn.useRef)(null),f=(0,Kn.useCallback)((M,_)=>{let x=e;if(!x)return;let P=n.current[x.objectKey]?.style?.material?.[x.textureKey],d=P?.path;if(!d)return;let S=P?.rotation??0,C=mi(x.textureKey),T=xc(d,C),E=i.current[x.objectKey],k=Array.isArray(E)?E:E?[E]:[],D=yu[x.textureKey];for(let B of k){let L=B;D in L&&(L[D]=Mu(L.userData,x.textureKey,T,d,M,_,S))}r.current?.invalidate()},[e]),g=(0,Kn.useCallback)(M=>{if(!e)return;M.currentTarget.setPointerCapture?.(M.pointerId),l.current={x:M.clientX,y:M.clientY},c.current=!1;let _=n.current[e.objectKey]?.style?.material?.[e.textureKey];if(h.current=_?.offset??[0,0],p.current=h.current,u.current=_?.scale??1,m.current===null){let x=()=>{r.current?.invalidate(),m.current=requestAnimationFrame(x)};m.current=requestAnimationFrame(x)}},[e]),b=(0,Kn.useCallback)(M=>{if(!e||!l.current)return;let _=o.current,x=_?.clientWidth||1,P=_?.clientHeight||1,d=M.clientX-l.current.x,S=M.clientY-l.current.y;if(!c.current&&Math.hypot(d,S)<vR)return;c.current=!0;let C=-(d/x)*_S,T=S/P*_S,[E,k]=h.current,D=[E+C,k+T];p.current=D,f(D,u.current),s(e.objectKey,B=>({...B,material:{...B?.material,[e.textureKey]:{...B?.material?.[e.textureKey],path:n.current[e.objectKey]?.style?.material?.[e.textureKey]?.path,offset:D}}}))},[e,f,s]),y=(0,Kn.useCallback)(M=>{if(!e)return;M.target?.releasePointerCapture?.(M.pointerId),m.current!==null&&(cancelAnimationFrame(m.current),m.current=null);let _=c.current,x=e;if(_){s(x.objectKey,P=>({...P,material:{...P?.material,[x.textureKey]:{...P?.material?.[x.textureKey],path:n.current[x.objectKey]?.style?.material?.[x.textureKey]?.path,offset:p.current}}})),l.current=null,c.current=!1;return}l.current=null,t(null)},[e,s]);(0,Kn.useEffect)(()=>{if(!e)return m.current!==null&&(cancelAnimationFrame(m.current),m.current=null),()=>{m.current!==null&&(cancelAnimationFrame(m.current),m.current=null)}},[e]),(0,Kn.useEffect)(()=>{let M=a;if(!(!M||!e))return M.addEventListener("pointermove",b),M.addEventListener("pointerup",y),M.addEventListener("pointercancel",y),()=>{M.removeEventListener("pointermove",b),M.removeEventListener("pointerup",y),M.removeEventListener("pointercancel",y)}},[a,e,b,y]);let v=(0,Kn.useCallback)(M=>{if(!e)return;M.preventDefault();let _=e,x=Math.exp(-M.deltaY*yR),P=Math.min(wR,Math.max(xR,u.current*x));u.current=P,f(p.current,P),s(_.objectKey,d=>({...d,material:{...d?.material,[_.textureKey]:{...d?.material?.[_.textureKey],path:n.current[_.objectKey]?.style?.material?.[_.textureKey]?.path,scale:P}}}))},[e,f,s]);return(0,Kn.useEffect)(()=>{let M=a;if(!(!M||!e))return M.addEventListener("wheel",v,{passive:!1}),()=>M.removeEventListener("wheel",v)},[a,e,v]),{beginMoveZoom:(0,Kn.useCallback)(M=>{c.current=!1,l.current=null,t(M)},[t]),handleMoveZoomPointerDown:g}}var rm=require("@react-three/fiber"),SR=.2;function Pg({enabled:e,speed:t,controlsRef:n}){let i=(0,rm.useThree)(r=>r.invalidate);return(0,rm.useFrame)((r,o)=>{!e||!n.current||(n.current.rotate(o*SR*t,0,!1),i())}),null}var Ti=require("lucide-react");var Dt=require("react/jsx-runtime");function CS({count:e,onDismiss:t}){let n=Me();return(0,Dt.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,Dt.jsx)(Ti.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,Dt.jsx)("span",{children:n(e===1?"bindingMismatchOne":"bindingMismatchMany",{count:e})}),(0,Dt.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:i=>{i.stopPropagation(),t()},"aria-label":n("dismiss"),children:(0,Dt.jsx)(Ti.X,{size:12})})]})}function TS({triangles:e,offset:t,onDismiss:n}){let i=Me();return(0,Dt.jsxs)("div",{className:`ri-largeModelBanner ${t?"ri-largeModelBanner--offset":""}`,children:[(0,Dt.jsx)(Ti.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,Dt.jsx)("span",{children:i("largeModelWarning",{millions:Math.round(e/1e6)})}),(0,Dt.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:r=>{r.stopPropagation(),n()},"aria-label":i("dismiss"),children:(0,Dt.jsx)(Ti.X,{size:12})})]})}function PS({missing:e,total:t}){let n=Me();return(0,Dt.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,Dt.jsx)(Ti.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,Dt.jsxs)("span",{children:[e===t?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${e} of ${t} meshes have no UV0 coordinates.`," ",n("missingUVsAreShownInMagenta")]})]})}function AS({failure:e,source:t}){return(0,Dt.jsx)("div",{className:"ri-loadError",role:"alert",children:(0,Dt.jsxs)("div",{className:"ri-loadError__card",children:[(0,Dt.jsxs)("div",{className:"ri-loadError__header",children:[(0,Dt.jsx)(Ti.AlertTriangle,{size:16,"aria-hidden":"true"}),(0,Dt.jsx)("span",{className:"ri-loadError__title",children:e.title})]}),(0,Dt.jsx)("p",{className:"ri-loadError__detail",children:e.detail}),(0,Dt.jsx)("p",{className:"ri-loadError__source",children:t}),e.technical&&(0,Dt.jsx)("p",{className:"ri-loadError__technical",children:e.technical})]})})}function ES({rebuilding:e,onReload:t}){let n=Me();return(0,Dt.jsx)("div",{className:"ri-contextRecovery",role:"alert",children:(0,Dt.jsxs)("div",{className:"ri-contextRecovery__card",children:[(0,Dt.jsx)(Ti.AlertTriangle,{size:24,"aria-hidden":"true"}),(0,Dt.jsx)("h2",{children:n(e?"contextRestoringTitle":"contextLostTitle")}),(0,Dt.jsx)("p",{children:n(e?"contextRestoringMessage":"contextLostMessage")}),(0,Dt.jsxs)("button",{type:"button",onClick:t,disabled:e,children:[(0,Dt.jsx)(Ti.RotateCcw,{size:16,"aria-hidden":"true"}),n("reloadViewer")]})]})})}var dd=require("react");function RS({applyBindingStyle:e,resolveObjectKey:t,onTextureUpload:n,fileInputRef:i,pendingObjectId:r,createdBlobUrls:o,texturePositioning:a,setMoveZoomTarget:s}){let l=(0,dd.useCallback)((y,v)=>{let w=o.current[y];w&&URL.revokeObjectURL(w),v.startsWith("blob:")?o.current[y]=v:delete o.current[y],e(y,M=>({...M,material:{...M?.material,texture:{path:v}}}))},[e]),c=y=>{let v=y.target.files?.[0],w=r.current;if(!v||!w)return;let M=t(w);M&&(n?n(v,M).then(_=>l(M,_),_=>console.error("onTextureUpload failed:",_)):l(M,URL.createObjectURL(v)),y.target.value="")},h=y=>{r.current=y,i.current?.click()},p=y=>{let v=t(y);if(!v)return;e(v,M=>M?.material?.texture?{...M,material:{...M.material,texture:void 0}}:M);let w=o.current[v];w&&(URL.revokeObjectURL(w),delete o.current[v])},u=!!a,m=typeof a=="object"?a:void 0,f=(0,dd.useCallback)((y,v,w)=>{if(m?.onOffsetChange){m.onOffsetChange(y,v,w);return}e(y,M=>{let _=M?.material?.texture;if(!_?.path)return M;let x=_.offset??[0,0],P=[x[0],x[1]];return P[v]=w,{...M,material:{...M?.material,texture:{..._,offset:P}}}})},[e,m]),g=(0,dd.useCallback)((y,v)=>{if(m?.onRotationChange){m.onRotationChange(y,v);return}e(y,w=>{let M=w?.material?.texture;if(!M?.path)return w;let _=(v%360+360)%360;return{...w,material:{...w?.material,texture:{...M,rotation:_*Math.PI/180}}}})},[e,m]),b=(0,dd.useCallback)(()=>{s(null),m?.onEndPositioning?.()},[m]);return{handleFileChange:c,triggerFileUpload:h,clearTexture:p,texturePositioningEnabled:u,texturePositioningOverrides:m,setMaterialTextureOffset:f,setMaterialTextureRotation:g,endMaterialTexturePositioning:b}}function kS({materialPopup:e,resolveObjectKey:t,currentObjectBindings:n,nodeRefsMap:i,moveZoomTarget:r,texturePositioningEnabled:o,texturePositioningOverrides:a,setMaterialTextureOffset:s,setMaterialTextureRotation:l,endMaterialTexturePositioning:c}){let h=e?t(e.objectId):null,p=h?n[h]?.style?.material?.texture?.path:void 0,u=p?_u(p)??p:void 0,m=vu(h?i.current[h]:null),f=o?a?.offset??(h?n[h]?.style?.material?.texture?.offset:void 0):void 0,g=o?a?.rotationDegrees??(h?((n[h]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,b=o?a?.isPositioning??!!(h&&r?.objectKey===h&&r?.textureKey==="texture"):!1;return{materialTextureUrl:u,materialTargetTakesImage:m,materialTextureOffset:f,materialTextureRotationDegrees:g,isMaterialTexturePositioning:b,materialTextureOnOffsetChange:o?s:void 0,materialTextureOnRotationChange:o?l:void 0,materialTextureOnEndPositioning:o?c:void 0}}var Ml=require("react");var im=e=>e==="#000000"?"#ffffff":e;function LS({nodeRefsMap:e,currentObjectBindingsRef:t,applyObjectBindings:n}){let i=(0,Ml.useRef)({}),r=(0,Ml.useCallback)(a=>{let s=Ly(e.current[a]),l=t.current[a]?.style?.material,c=l?.emissive??s.color,h=l?.emissiveIntensity??s.intensity;return{color:c,intensity:h,on:c!=="#000000"&&h>0}},[]),o=(0,Ml.useCallback)((a,s)=>{let l=t.current,c=l[a];c&&n({...l,[a]:{...c,style:{...c.style,material:{...c.style?.material,...s}}}})},[n]);return{glowMemoryRef:i,readObjectGlow:r,applyGlow:o}}function DS({setCurrentAction:e,bindingKeyIndex:t,currentObjectBindings:n,applyObjectBindings:i,resolveObjectKey:r,closeColorPicker:o,setColorPicker:a,setMaterialPopupsByObject:s,setItemMaterials:l,getPopoverPosition:c,decalRequestRef:h,setDecalError:p,setDecalDragging:u,setDecalControl:m,resolvedSceneConfigRef:f,applyLightPatches:g,readObjectGlow:b,applyGlow:y,glowMemoryRef:v,setLightControl:w,onAction:M}){return(0,Ml.useCallback)(_=>{let{objectId:x,action:P,binding:d}=_;switch(e(_),P.id){case"toggle-visibility":{let S=x;d?.modelObjectId&&(S=t.byModelObjectId.get(d.modelObjectId)??S);let C=n[S],T=C?.visible===!1;C&&i({...n,[S]:{...C,visible:T}});break}case"change-color":o(),s(S=>{if(!(x in S))return S;let C={...S};return delete C[x],C}),l(S=>{let C=r(x,d)??x,T=S[x]?.hex,E=n[C]?.style?.material?.baseColor;return{...S,[x]:{...S[x],hex:T??E??"#ffffff"}}}),a(c(x,225,250,d,_));break;case"change-material":o(),s(S=>{if(x in S){let C={...S};return delete C[x],C}return{...S,[x]:c(x,300,320,d,_)}});break;case"add-text":case"add-image":{o();let S=P.id;h.current++,p(null),u(null),m(C=>C?.objectId===x&&C.kind===S?null:{objectId:x,kind:S,activeId:null});break}case"toggle-light":case"change-light-color":case"set-brightness":{let S=r(x,d);if(!S)break;let C=ky(f.current,n,S);if(P.id==="toggle-light"){if(C.length>0){let D=!C.some(B=>B.visible);g(Object.fromEntries(C.map(B=>[B.id,{visible:D}])));break}let k=b(S);k.on?(v.current[S]=k.intensity,y(S,{emissiveIntensity:0})):y(S,{emissive:im(k.color),emissiveIntensity:v.current[S]??1});break}let T=P.id,E=C.length>0?null:b(S);w(k=>k?.objectId===x&&k.kind===T?null:{objectId:x,kind:T,target:E?{type:"glow",objectKey:S,baseIntensity:E.on?E.intensity:v.current[S]??1}:{type:"lights",lightIds:C.map(D=>D.id),baseIntensity:Object.fromEntries(C.map(D=>[D.id,D.intensity]))},percent:E&&!E.on?0:100});break}default:break}M?.(_)},[i,y,g,b,n,c,M,o,r,t])}var gn=require("lucide-react");var se=require("react/jsx-runtime");function NS({categories:e,selected:t,disabled:n,onChange:i}){let r=Me();return(0,se.jsxs)("div",{className:"ri-annotationFilters",role:"group","aria-label":r("annotationCategories"),onPointerDown:o=>o.stopPropagation(),children:[(0,se.jsx)("span",{children:r("annotations")}),(0,se.jsx)("button",{type:"button","aria-pressed":t===null,disabled:n,onClick:()=>i(null),children:r("all")}),e.map(o=>(0,se.jsx)("button",{type:"button",disabled:n,"aria-pressed":t?.some(a=>a.trim()===o)??!1,onClick:()=>i(t===null?[o]:t.some(a=>a.trim()===o)?t.filter(a=>a.trim()!==o):[...t,o]),children:o||r("uncategorized")},o))]})}function OS({onCancel:e}){let t=Me();return(0,se.jsxs)("div",{className:"ri-isolationPill",role:"status",onPointerDown:n=>n.stopPropagation(),children:[(0,se.jsx)("span",{className:"ri-isolationPill__label",children:t("decalDragHint")}),(0,se.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:e,children:t("cancel")})]})}function IS({label:e,onShowAll:t}){let n=Me();return(0,se.jsxs)("div",{className:"ri-isolationPill",onPointerDown:i=>i.stopPropagation(),children:[(0,se.jsx)("span",{className:"ri-isolationPill__label",children:e}),(0,se.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("showAll")})]})}function BS({groups:e,activeVariants:t,onSelect:n}){let i=Me();return(0,se.jsx)(se.Fragment,{children:e.map((r,o)=>(0,se.jsxs)("div",{className:"ri-variantPicker",role:"group","aria-label":r.name??i("materialVariants"),onPointerDown:a=>a.stopPropagation(),children:[r.name?(0,se.jsx)("span",{className:"ri-variantPicker__group","aria-hidden":"true",children:r.name}):null,r.variants.map(a=>{let s=t.includes(a.name);return(0,se.jsxs)("button",{type:"button",className:`ri-variantPicker__option ${s?"ri-variantPicker__option--active":""}`,"aria-pressed":s,onClick:()=>n(a.name),children:[a.swatch?(0,se.jsx)("span",{className:"ri-variantPicker__swatch",style:{background:a.swatch},"aria-hidden":"true"}):null,a.label]},a.name)})]},r.name??`group-${o}`))})}function zS({count:e,active:t,index:n,navigating:i,onStart:r,onPrevious:o,onNext:a,onStop:s}){let l=Me();return t?(0,se.jsxs)(se.Fragment,{children:[(0,se.jsxs)("button",{className:"ri-tourButton",onClick:o,disabled:i||e===0||n<=0,title:l("previousAnnotation"),children:[(0,se.jsx)(gn.ChevronLeft,{size:16}),(0,se.jsx)("span",{children:l("previous")})]}),(0,se.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:s,title:l("stopGuidedTour"),children:(0,se.jsx)(gn.Square,{size:16})}),(0,se.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:a,disabled:i||e===0,title:l("nextAnnotation"),children:[(0,se.jsx)("span",{children:l("next")}),(0,se.jsx)(gn.ChevronRight,{size:16})]})]}):(0,se.jsx)("button",{className:"ri-navButtonSingle",onClick:r,disabled:e===0,title:l("startGuidedTour"),children:l("guidedTour")})}function US({fullscreen:e,disabled:t}){let n=Me();return(0,se.jsxs)("div",{className:"mv-fullscreenWrapper",children:[e.error&&(0,se.jsx)("div",{className:"mv-fullscreenError",role:"alert",children:n.message(e.error)}),(0,se.jsx)("button",{type:"button",className:"mv-fullscreenButton",onClick:()=>{e.toggle()},disabled:e.pending||t,title:e.active?n("exitFullscreen"):n("enterFullscreen"),"aria-label":e.active?n("exitFullscreen"):n("enterFullscreen"),"aria-pressed":e.active,children:e.active?(0,se.jsx)(gn.Minimize,{}):(0,se.jsx)(gn.Maximize,{})})]})}function VS({open:e,current:t,disabled:n,onSelect:i,onToggle:r}){let o=Me();return(0,se.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:a=>a.stopPropagation(),children:[e&&(0,se.jsxs)("div",{className:"mv-controllersMenu",children:[(0,se.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>i("orbit"),children:o("orbitControl")}),(0,se.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>i("pointerLock"),children:o("pointLock")})]}),(0,se.jsx)("button",{className:"mv-controllersButton",onClick:r,title:o("cameraController"),"aria-label":o("cameraControllerSettings"),disabled:n,children:(0,se.jsx)(gn.Orbit,{size:15})})]})}function FS({menu:e,recording:t,hasScene:n,canCaptureImage:i,canRecord:r,hasCinematic:o}){let a=Me(),{isDownloading:s,downloadMenuOpen:l,uvExportError:c,toggleDownloadMenu:h,handleDownloadMesh:p,handleDownloadScreenshot:u,handleDownloadUvLayout:m,handleDownloadVideo:f,videoFormat:g,setVideoFormat:b,videoExportError:y}=e;return(0,se.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:v=>v.stopPropagation(),children:[l&&(0,se.jsxs)("div",{className:"mv-downloadMenu",children:[(0,se.jsxs)("button",{className:"mv-downloadMenuItem",onClick:p,disabled:s||t||!n,children:[(0,se.jsx)(gn.Box,{size:14}),a("downloadGLB")]}),(0,se.jsx)("div",{className:"mv-downloadMenuDivider"}),i&&(0,se.jsxs)(se.Fragment,{children:[(0,se.jsxs)("button",{className:"mv-downloadMenuItem",onClick:u,disabled:t||!n,children:[(0,se.jsx)(gn.Camera,{size:14}),a("downloadPNG")]}),(0,se.jsx)("div",{className:"mv-downloadMenuDivider"})]}),(0,se.jsxs)("button",{className:"mv-downloadMenuItem",onClick:m,disabled:t||!n,children:[(0,se.jsx)(gn.FileImage,{size:14}),a("downloadUVLayout")]}),(0,se.jsx)("div",{className:"mv-downloadMenuDivider"}),(0,se.jsxs)("label",{className:"mv-downloadMenuItem",children:[a("videoFormat"),(0,se.jsxs)("select",{"aria-label":a("videoFormat"),value:g,onChange:v=>b(v.target.value),children:[(0,se.jsx)("option",{value:"auto",children:a("auto")}),(0,se.jsx)("option",{value:"webm",disabled:!Qi("webm"),children:"WebM"}),(0,se.jsx)("option",{value:"mp4",disabled:!Qi("mp4"),children:"MP4"}),(0,se.jsx)("option",{value:"gif",disabled:!Qi("gif"),children:"GIF"})]})]}),(0,se.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{f("turntable")},disabled:t||!r||!Qi(g),children:[(0,se.jsx)(gn.Play,{size:14}),a("recordTurntableVideo")]}),o&&(0,se.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{f("cinematic")},disabled:t||!r||!Qi(g),children:[(0,se.jsx)(gn.Play,{size:14}),a("recordCinematicVideo")]}),!Qi()&&!Qi("gif")&&(0,se.jsx)("div",{className:"mv-downloadMenuNotice",role:"status",children:a("videoUnsupported")}),y&&(0,se.jsx)("div",{className:"mv-downloadMenuNotice",role:"alert",children:a.message(y)}),c&&(0,se.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:a.message(c)})]}),(0,se.jsx)("button",{className:"mv-downloadButton",onClick:h,disabled:s||t||!n,title:a("downloadOptions"),children:s?(0,se.jsxs)(se.Fragment,{children:[(0,se.jsx)("span",{className:"mv-downloadButton__spinner"}),a("exporting")]}):(0,se.jsxs)(se.Fragment,{children:[(0,se.jsx)(gn.Download,{size:15}),a("download")]})})]})}function jS({x:e,y:t,form:n,setForm:i,onOk:r,onCancel:o}){let a=Me();return(0,se.jsxs)("div",{className:"ri-annotationPopup",style:{left:e,top:t},onPointerDown:s=>s.stopPropagation(),onClick:s=>s.stopPropagation(),children:[(0,se.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:a("annotationTitlePlaceholder"),value:n.title,onChange:s=>i(l=>({...l,title:s.target.value})),onKeyDown:s=>{s.key==="Enter"&&r(),s.key==="Escape"&&o()}}),(0,se.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:a("description"),value:n.description,onChange:s=>i(l=>({...l,description:s.target.value})),onKeyDown:s=>{s.key==="Escape"&&o()},rows:5}),(0,se.jsxs)("div",{className:"ri-annotationActions",children:[(0,se.jsx)("button",{onClick:r,className:`ri-annotationOkBtn ${n.title.trim()?"":"disabled"}`,disabled:!n.title.trim(),children:a("ok")}),(0,se.jsx)("button",{onClick:o,className:"ri-annotationCancelBtn",children:a("cancel")}),(0,se.jsx)("div",{className:"ri-annotationIcons"})]})]})}var GS=require("qrcode.react"),nn=require("lucide-react");var Le=require("react/jsx-runtime");function HS({top:e,xrStore:t,arSupported:n,vrSupported:i,quickLookSupported:r,mobileHandoffUrl:o,mobileHandoffOpen:a,onQuickLook:s,onOpenMobileHandoff:l}){let c=Me();return(0,Le.jsxs)("div",{className:"ri-xrTools",style:{top:`${e}px`},children:[!n&&r&&(0,Le.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:s,title:c("viewThisModelInARWithAppleQuickLook"),children:[(0,Le.jsx)(nn.Box,{size:16}),c("viewInAR")]}),o&&(0,Le.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:l,title:c("openThisExperienceOnAPhoneForAR"),"aria-haspopup":"dialog","aria-expanded":a,children:[(0,Le.jsx)(nn.QrCode,{size:16}),(0,Le.jsx)("span",{children:c("openOnPhone")})]}),t&&n&&(0,Le.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>t.enterAR().catch(h=>{console.error("Failed to enter AR session:",h)}),title:c("viewThisModelInYourSpace"),children:[(0,Le.jsx)(nn.Smartphone,{size:16}),(0,Le.jsx)("span",{children:c("enterAR")})]}),t&&i&&(0,Le.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>t.enterVR().catch(h=>{console.error("Failed to enter VR session:",h)}),title:c("viewThisModelInVR"),children:[(0,Le.jsx)(nn.RectangleGoggles,{size:16}),(0,Le.jsx)("span",{children:c("enterVR")})]})]})}function WS({url:e,onClose:t}){let n=Me();return(0,Le.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:i=>{i.target===i.currentTarget&&t()},children:(0,Le.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,Le.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:t,"aria-label":n("closePhoneHandoff"),children:(0,Le.jsx)(nn.X,{size:18})}),(0,Le.jsx)(nn.Smartphone,{size:22,"aria-hidden":"true"}),(0,Le.jsx)("h2",{id:"ri-mobileHandoffTitle",children:n("viewInAR")}),(0,Le.jsx)("p",{children:n("arScanCode")}),(0,Le.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,Le.jsx)(GS.QRCodeSVG,{value:e,size:208,level:"M",marginSize:4,title:n("qrCodeToOpenThisModelOnAPhone")})})]})})}function XS({top:e,active:t,onToggle:n}){let i=Me();return(0,Le.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${e}px`},children:(0,Le.jsx)("button",{type:"button",className:`ri-measureButton ${t?"ri-measureButton--active":""}`,onClick:n,title:i(t?"disableUVChecker":"enableUVChecker"),"aria-label":i(t?"disableUVChecker":"enableUVChecker"),"aria-pressed":t,children:(0,Le.jsx)(nn.Grid3X3,{size:16})})})}function qS({top:e,open:t,factor:n,onToggleOpen:i,onFactorChange:r}){let o=Me();return(0,Le.jsxs)("div",{className:"ri-explodeTools",style:{top:`${e}px`},children:[(0,Le.jsx)("button",{type:"button",className:`ri-measureButton ${t||n>0?"ri-measureButton--active":""}`,onClick:i,title:o("explodedView"),"aria-pressed":t,children:(0,Le.jsx)(nn.Expand,{size:16})}),t&&(0,Le.jsx)("div",{className:"ri-explodeSlider",onPointerDown:a=>a.stopPropagation(),children:(0,Le.jsx)("input",{type:"range",min:0,max:100,value:Math.round(n*100),onChange:a=>r(Number(a.target.value)/100),"aria-label":o("explodeAmount")})})]})}function $S({top:e,section:t,onChange:n}){let i=Me();return(0,Le.jsxs)("div",{className:"ri-sectionTools",style:{top:`${e}px`},children:[(0,Le.jsx)("button",{type:"button",className:`ri-measureButton ${t.enabled?"ri-measureButton--active":""}`,onClick:()=>n({enabled:!t.enabled}),title:t.enabled?i("removeSectionCut"):i("sectionCut"),"aria-label":i("sectionCut"),"aria-pressed":t.enabled,children:(0,Le.jsx)(nn.Slice,{size:16})}),t.enabled&&(0,Le.jsxs)("div",{className:"ri-sectionPanel",onPointerDown:r=>r.stopPropagation(),children:[(0,Le.jsx)("div",{className:"ri-sectionAxes",role:"group","aria-label":i("sectionAxis"),children:Iu.map(r=>(0,Le.jsx)("button",{type:"button",className:`ri-sectionAxis ${t.axis===r?"ri-sectionAxis--active":""}`,"aria-pressed":t.axis===r,onClick:()=>n({axis:r}),children:r.toUpperCase()},r))}),(0,Le.jsx)("input",{type:"range",min:0,max:100,value:Math.round(t.position*100),onChange:r=>n({position:Number(r.target.value)/100}),"aria-label":i("sectionPosition")}),(0,Le.jsx)("button",{type:"button",className:`ri-sectionAxis ${t.flip?"ri-sectionAxis--active":""}`,"aria-pressed":t.flip,"aria-label":i("keepTheOtherSide"),title:i("keepTheOtherSide"),onClick:()=>n({flip:!t.flip}),children:(0,Le.jsx)(nn.FlipVertical2,{size:14})})]})]})}function YS({top:e,playing:t,disabled:n,onPlay:i,onPause:r,onStop:o}){let a=Me();return(0,Le.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${e}px`},children:[(0,Le.jsx)("button",{type:"button",className:`ri-measureButton ${t?"ri-measureButton--active":""}`,disabled:n,onClick:t?r:i,title:a(t?"pauseCinematic":"playCinematic"),"aria-pressed":t,children:t?(0,Le.jsx)(nn.Pause,{size:16}):(0,Le.jsx)(nn.Play,{size:16})}),t&&(0,Le.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:o,title:a("stopCinematicAndResetCamera"),children:(0,Le.jsx)(nn.Square,{size:16})})]})}function KS({progress:e,onCancel:t}){let n=Me();return(0,Le.jsx)("div",{className:"ri-recordingOverlay",onPointerDown:i=>i.stopPropagation(),children:(0,Le.jsxs)("div",{className:"ri-isolationPill",role:"status","aria-live":"polite",children:[(0,Le.jsx)("span",{className:"ri-isolationPill__label",children:n("recordingVideo",{progress:e})}),(0,Le.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("cancel")})]})})}function ZS(e){let t={total:0,missing:0};return e.traverse(n=>{let i=n;!i.isMesh||!i.geometry||(t.total+=1,i.geometry.getAttribute("uv")||(t.missing+=1))}),t}var Zn=require("three");function JS(e,t,n){let i=t?.camera;if(!(i instanceof Zn.PerspectiveCamera))return null;let o=(e instanceof Zn.Box3?e:new Zn.Box3().setFromObject(e)).getSize(new Zn.Vector3).length();return!Number.isFinite(o)||o<=0?null:(i.near=o/100,i.far=o*100,i.updateProjectionMatrix(),t&&n===void 0&&(t.maxDistance=o*10),o)}function QS(e,t){let n=e.camera;if(!(n instanceof Zn.PerspectiveCamera)||!(t>0))return;let i=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(i-n.near)<=n.near*.01||(n.near=i,n.updateProjectionMatrix())}var om={paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5},ud={kind:"model"};function e_(e,t){let n=new Zn.Box3().setFromObject(t);return n.isEmpty()?!1:(n.expandByScalar(n.getSize(new Zn.Vector3).length()*.05),n.containsPoint(e.getTarget(new Zn.Vector3)))}function t_(e,t){return e.getTarget(new Zn.Vector3).distanceTo(t)<=Math.max(e.distance,1)*.001}async function Ag(e,t,n=.6){let i=e.smoothTime;e.smoothTime=il(e,n);try{return await t()}finally{e.smoothTime=i}}async function n_(e,t,{flyIn:n,onStart:i,invalidate:r}){if(n){let o=(t instanceof Zn.Box3?t:new Zn.Box3().setFromObject(t)).getBoundingSphere(new Zn.Sphere),a=o.center.clone(),l=e.getPosition(new Zn.Vector3).clone().sub(e.getTarget(new Zn.Vector3));l.lengthSq()<1e-6&&l.set(0,0,1),l.normalize();let c=Math.max(o.radius*10,20),h=a.clone().add(l.multiplyScalar(c));await e.setLookAt(h.x,h.y,h.z,a.x,a.y,a.z,!1)}i(),await Ag(e,()=>e.fitToBox(t,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(o=>{let a=performance.now(),s=()=>{e.active===!1||performance.now()-a>8e3?(e.dispatchEvent({type:"update"}),r(),o()):(r(),setTimeout(s,100))};setTimeout(s,100)})}var r_=require("react");function i_({enabled:e,canvasAreaElement:t,fitAttemptedRef:n,fitInFlightRef:i,controlsRef:r,cameraFramingRef:o,nodeRefsMap:a,fitScene:s}){(0,r_.useEffect)(()=>{if(!e)return;let l=t;if(!l)return;let c=null,h=new ResizeObserver(()=>{!n.current||i.current||(c&&clearTimeout(c),c=setTimeout(()=>{let p=r.current,u=o.current;if(u.kind==="view"&&p){if(t_(p,u.target))return}else if(u.kind==="object"&&p){let m=a.current[u.key];if(m&&e_(p,m)){p.fitToBox(m,!0,om).catch(()=>{});return}}s()},150))});return h.observe(l),()=>{h.disconnect(),c&&clearTimeout(c)}},[t,s,e])}var ie=require("react/jsx-runtime"),o_=Object.freeze({});function sm(e){let t=Py(e),n=pu(t.modelUrl,t.tilesetUrl),i=(0,N.useRef)(n);i.current=n;let r=(0,N.useRef)(null),o=(0,N.useRef)(null),a=(0,N.useCallback)(()=>{let g=o.current;g&&(r.current=g.snapshot())},[]),s=Uv(a),l=ey(e),[c,h]=(0,N.useState)(null);(0,N.useEffect)(()=>()=>{c&&URL.revokeObjectURL(c)},[c]);let p=()=>{a();let g=i.current;o.current?.captureFrame().then(b=>{b&&(g===i.current?h(b):URL.revokeObjectURL(b))})};Fo(()=>{r.current=null,h(null)},[n]);let u=(0,N.useRef)(null),m=$v({loading:t.loading,reveal:t.reveal,rootRef:u,onPark:p}),{release:f}=s;return(0,N.useEffect)(()=>{m.live||f()},[m.live,f]),(0,ie.jsx)(fv,{labels:e.labels,children:(0,ie.jsx)("div",{className:"ri-viewerSlot",ref:u,children:m.live?(0,ie.jsx)(_R,{...t,contextRecovery:s,engagement:l,resumeRef:r,viewerHandleRef:o,offscreen:!m.visible,frame:c},s.generation):(0,ie.jsx)(Kv,{className:"ri-viewer",background:Ch(t.backgroundColor,t.sceneConfig),poster:c??t.poster,onReveal:m.awaitingReveal?m.reveal:void 0})})})}function _R({labels:e,contextRecovery:t,engagement:n,modelUrl:i,tilesetUrl:r,tilesErrorTarget:o=8,tilesCacheSize:a=800,onObjectCatalog:s,modelFormat:l,licenseKey:c,licenseValidationUrl:h,objectBindings:p="auto",selectedObject:u,panelHoveredObject:m,onObjectBindingsChange:f,onObjectSelect:g,onObjectHover:b,onObjectDoubleClick:y,onObjectContextMenu:v,decalMove:w,onObjectEditLeaseChange:M,onSceneLoaded:_,onModelLoaded:x,onLoadError:P,onProgress:d,onCameraControllerChange:S,cameraControllerType:C,onAction:T,onHiddenObjectsChange:E,onCameraChange:k,onViewerReady:D,onTextureUpload:B,onAnimationsReady:L,onAnnotationsChange:X,activeAnnotation:O,onActiveAnnotationChange:I,camera:re,cameraLimits:ke,backgroundColor:te,shadows:We=!0,showObjectBindingDataPanel:wt=!0,customObjectBindingDataPanel:be,customSceneObjectsPanel:ue,showSceneObjectsPanel:Ne=!0,showDownloadButton:Te=!0,downloadFilename:bn="model",showResetButton:Oe=!0,showFullscreenButton:ot=!1,showLoadingOverlay:mt=!0,showMouseController:vn=!1,mouseControllerPosition:de="center-bottom",mouseControllerOpacity:ur=1,moveSensitivity:jt=.08,zoomSensitivity:Gt=1,sceneConfig:ce,onSceneConfigChange:Ie,disableZoom:zt=!1,zoomOnSelected:gt=!0,highlightOnHover:Ut=!0,enableCameraControls:Ae=!0,onAutoFit:Ce,refitOnResize:Pt=!0,renderMode:St="demand",maxDpr:dn=2,preserveDrawingBuffer:ae=!1,webgpu:he=!1,performanceProfile:Ee="auto",dracoDecoderPath:Be,ktx2TranscoderPath:_t,meshopt:Je=!0,showMeasureTools:et=!1,showUvCheckerButton:ve=!1,showExplodeControls:Qe=!1,showMaterialVariants:bt=!0,showObjectNavigator:un=!0,showSectionTools:or=!1,isolation:yn,onIsolationChange:Vn,showIsolateControls:yr=!1,cinematic:Fn,measurementUnit:li="m",enableXR:ha=!1,usdzUrl:kn,arScaleMode:Dr="normalized",mobileHandoffUrl:z,showAnnotationNavigation:U=!0,showAnnotationOnHover:H=!1,showAnnotationFilters:oe=!0,annotationCategories:Q,onAnnotationCategoriesChange:fe,moveModeEnabled:we=!1,objectTransformSpace:pn="world",enableKeyboardNavigation:tt=!1,reducedMotion:$e="user",showViewGizmo:Ye=!1,overlay:Vt,unsafe_sceneChildren:Se,autoRotate:Ht,autoRotateSpeed:Ln,onTexturePositioningChange:jn,endTexturePositioningRef:xr,texturePositioning:mn,poster:Cn,resumeRef:Xi,viewerHandleRef:hs,offscreen:Il,frame:Td}){let Dn=Me(),fs=pu(i,r),[Sn]=(0,N.useState)(()=>Xi.current?.model===fs?Xi.current:null),rn=wl($e);(0,N.useEffect)(()=>()=>n.interrupt(),[n]);let Bl=(0,N.useRef)(n);Bl.current=n;let fa=p==="auto",ga=fa?o_:p,{isInsideEditor:zl,activeTab:Ul,activeSubTab:Mo}=Rr(),Em=zl&&Ul==="scene"&&Mo==="Lighting",Co=Bp(c,h),[qi,Pd]=(0,N.useState)(()=>Sn?.lightEdits??{}),[gs,wr]=(0,N.useState)(Sn?.variantEdit),[ci,Wr]=(0,N.useState)(Sn?.sectionEdit),at=(0,N.useMemo)(()=>{let A=Lh(ce??ja,qi);return gs!==void 0&&(A={...A,model:sl(A.model,gs)}),ci!==void 0&&(A={...A,section:{...Fa,...A.section,...ci}}),A},[ce,qi,gs,ci]),To=(0,N.useRef)(at);To.current=at;let bs=(0,N.useMemo)(()=>Wo(at.model),[at.model]);(0,N.useEffect)(()=>{n.setActiveVariants(bs)},[bs,n]);let Po=ce?Wo(ce.model).join(`
|
|
3691
|
+
`):"";Fo(()=>{wr(void 0)},[Po,i]);let vs=JSON.stringify(ce?.section??null);Fo(()=>{Wr(void 0)},[vs,i]);let ba=(0,N.useCallback)(A=>{if(Ie){let V=To.current;Ie({...V,section:{...Fa,...V.section,...A}});return}Wr(V=>({...V,...A}))},[Ie]),[Ri,Tn]=(0,N.useState)(!1),pr=(0,N.useRef)([]),ki=(0,N.useCallback)(A=>{let V=To.current,ee=Wo(V.model),pe=pr.current,_e=pe.find(qt=>qt.variants.some(xn=>xn.name===A)),Mt=ee.find(qt=>_e?_e.variants.some(xn=>xn.name===qt):qt===A)??null,_n=ee.includes(A)?ee.filter(qt=>qt!==A):Gu(ee,A,pe);if(n.chooseVariant(_n.includes(A)?A:null,Mt,_e?.name??null),Ie){Ie({...V,model:sl(V.model,_n)});return}wr(_n)},[Ie,n]),va=(0,N.useCallback)(A=>{if(Ie){Ie(Lh(To.current,A));return}Pd(V=>{let ee={...V};for(let[pe,_e]of Object.entries(A))ee[pe]={...V[pe],..._e};return ee})},[Ie]),[Ao,Vl]=(0,N.useState)(null),[di,ya]=(0,N.useState)(null),[Wt,Fl]=(0,N.useState)(null),jl=(0,N.useRef)(0),[ys,xa]=(0,N.useState)(null),[Ad,Ed]=(0,N.useState)(Sn?.uvCheckerOverride??null),wa=at.model.renderer==="uv-checker",Eo=ve?Ad??wa:wa,Rt=(0,N.useMemo)(()=>{let A=Eo?"uv-checker":wa?"pbr":at.model.renderer;return A===at.model.renderer?at:{...at,model:{...at.model,renderer:A}}},[wa,at,Eo]);Fo(()=>{Ed(null)},[i,at.model.renderer,ve,r]);let xs=(0,N.useMemo)(()=>Ch(te,at),[te,at]),Gl=(0,N.useMemo)(()=>({dracoDecoderPath:Be,ktx2TranscoderPath:_t,meshopt:Je}),[Be,_t,Je]),Li=(0,N.useMemo)(()=>Hv(Ee),[Ee]),pt=(0,N.useRef)(null),[Rd,Rm]=(0,N.useState)(()=>Sn&&Sn.cameraControllerType!=="pointerLock"?Sn.cameraControllerType:"orbit"),[Sa,ws]=(0,N.useState)(!1),$i=C!==void 0?C:Rd,Ss=(0,N.useCallback)(A=>{ws(!1),A!==$i&&(Rm(A),S?.(A))},[$i,S]),[mr,Ld]=(0,N.useState)(!1),[Ft,Ro]=(0,N.useState)(null),_a=!!(mn||jn||xr),Dd=(0,N.useRef)(jn);Dd.current=jn,(0,N.useEffect)(()=>{Dd.current?.(Ft)},[Ft]),(0,N.useEffect)(()=>{if(xr)return xr.current=()=>Ro(null),()=>{xr.current=null}},[]),(0,N.useEffect)(()=>{pt.current&&(pt.current.dollySpeed=Math.max(Gt,0))},[Gt]),(0,N.useEffect)(()=>{pt.current&&(pt.current.enabled=Ae&&!mr&&!Ri&&!Ft)},[Ae,mr,Ri,Ft]);let _s=(0,N.useRef)(null),Ms=(0,N.useRef)(new Map),Nd=(0,N.useRef)(null),km=(0,N.useRef)(null),Sr=(0,N.useRef)(null),Od=(0,N.useRef)({});(0,N.useEffect)(()=>()=>{for(let A of Object.values(Od.current))URL.revokeObjectURL(A)},[]);let ar=(0,N.useRef)({}),Ma=(0,N.useRef)(ud),[,Id]=(0,N.useState)(0),Bd=(0,N.useCallback)(()=>{Id(A=>A+1)},[]),Cs=(0,N.useRef)({}),zd=(0,N.useRef)(null),Ts=Dv(ot),Nr=(0,N.useRef)(null),[Hl,Lm]=(0,N.useState)(null),Dm=(0,N.useCallback)(A=>{Nr.current=A,Lm(A)},[]);SS({canvasAreaElement:Hl,controlsRef:pt,enabled:tt&&Ae&&!we});let Wl=(0,N.useRef)(null),[Ud,Vd]=(0,N.useState)(()=>Sn?.objectBindings??ga),[ko,Ca]=(0,N.useState)({}),[Fd,Xl]=(0,N.useState)(null),[ql,$l]=(0,N.useState)(null),[Nm,Om]=(0,N.useState)(null),[Im,Bm]=(0,N.useState)(null),[Or,jd]=(0,N.useState)(null),[zm,Um]=(0,N.useState)({}),sr=(0,N.useRef)(null),Ps=(0,N.useRef)(null),Yl=(0,N.useRef)(0),Kl=(0,N.useRef)(null),[As,Vm]=(0,N.useState)(0),Xr=(0,N.useRef)(!1),Ta=(0,N.useRef)(!1),Zl=(0,N.useRef)(!!re);Zl.current=!!re;let _r=(0,N.useRef)(null),R=(0,N.useRef)(Sn?.camera?{camera:Sn.camera,home:Sn.home}:null),[j,Z]=(0,N.useState)(!!i),[ne,Pe]=(0,N.useState)(!i||!!Ce||!!re),[Xe,Xt]=(0,N.useState)(!1),[Ge,Jn]=(0,N.useState)([]),[Yi,Lo]=(0,N.useState)(!1),[Fm,jm]=(0,N.useState)(null),[rb,Jl]=(0,N.useState)(!1),[eC,tC]=(0,N.useState)(0),Gm=(0,N.useRef)(""),ib=(0,N.useRef)(""),[ob,ab]=(0,N.useState)(!1),[Hm,nC]=(0,N.useState)(null),[rC,sb]=(0,N.useState)(!1),[Wm,lb]=(0,N.useState)({total:0,missing:0}),[iC,cb]=(0,N.useState)("loadingModel"),[oC,Xm]=(0,N.useState)(null),Do=(0,N.useRef)({}),Es=(0,N.useCallback)(()=>{let A=pt.current;!A||_r.current||(_r.current=Qc(A))},[]),[Gd,db]=(0,N.useState)(()=>Sn?.explodeFactor??0),[aC,ub]=(0,N.useState)(!1);Fo(()=>{db(0),ub(!1)},[i,r]);let Pa=(0,N.useMemo)(()=>{let A=at.cinematic,V=A?.enabled?{waypoints:A.waypoints,duration:A.duration,loop:A.loop,autoPlay:A.autoPlay}:null;return Fn===void 0?V&&(V.waypoints?.length??0)>=2?V:null:Fn===!1?null:Fn===!0?V??{}:{...V??{},...Fn}},[Fn,at]),[pb,Ir]=(0,N.useState)(!1),[sC,Aa]=(0,N.useState)(!1),qm=(0,N.useRef)(!1);(0,N.useEffect)(()=>{Ir(!1),Aa(!1),qm.current=!1},[i,r]),(0,N.useEffect)(()=>{if(!(!Pa?.autoPlay||qm.current)&&Xe&&ne&&!j){if(qm.current=!0,rn)return;Ir(!0),Aa(!1)}},[Pa,Xe,ne,j,rn]);let lC=(0,N.useCallback)(()=>{Ir(!1),Aa(!0)},[]),{captureVideo:$m,cancelVideo:Ym,isRecording:mb,recording:Qn,progress:cC,onProgress:dC}=Lv({rendererCaptureRef:Sr,controlsRef:pt,cinematicConfig:Pa,ready:t.status==="ready"&&Xe&&ne&&!j,modelUrl:`${i}|${r??""}`,onCaptureStart:lC});(0,N.useEffect)(()=>{t.status==="lost"&&(n.interrupt(),Ym(),Ir(!1),pt.current?.stop())},[t.status,Ym,n]);let{xrStore:uC,presenterRef:pC,arSupported:hb,vrSupported:fb,quickLookSupported:gb,resolvedMobileHandoffUrl:Hd,isMobileHandoffOpen:bb,arOverlay:mC,openMobileHandoff:hC,closeMobileHandoff:fC,openQuickLook:gC,handleARStateChange:bC}=Rx({enableXR:ha,usdzUrl:kn,mobileHandoffUrl:z,engagement:n}),Rs=Pv(he),vb=(0,N.useRef)(Rs);vb.current=Rs;let ks=Rs==="webgpu",Wd=ks?null:uC,yb=or||at.section?.enabled===!0;(0,N.useEffect)(()=>{if(!ks)return;let A=[yb&&"the section cut",we&&"the move gizmo"].filter(Boolean);A.length!==0&&console.info(`[react-immersive] With WebGPU, ${A.join(" and ")} ${A.length>1?"aren't":"isn't"} available; ${A.length>1?"they need":"it needs"} WebGL.`)},[ks,yb,we]);let{annotations:sk,pendingAnnotation:Ea,setPendingAnnotation:xb,annotationForm:vC,setAnnotationForm:Km,currentAnnotationIndex:yC,isNavigating:xC,localAnnotationCategories:wC,selectedAnnotationCategories:SC,visibleAnnotations:_C,availableAnnotationCategories:MC,annotationFiltersVisible:Zm,changeAnnotationCategories:CC,sortedAnnotations:Jm,currentAnnotation:TC,setActiveAnnotation:lk,focusAnnotation:ck,startGuidedTour:PC,goToPreviousAnnotation:AC,goToNextAnnotation:EC,stopGuidedTour:RC,closeViewingAnnotation:Qm,activeAnnotation:dk,activeViewingAnnotation:eh,isGuidedTourActive:th,handleAnnotationOk:kC,handleAnnotationCancel:LC,handleAnnotationMarkerClick:DC}=vS({sceneAnnotations:ce?.annotations,controlledAnnotationCategories:Q,onAnnotationCategoriesChange:fe,showAnnotationFilters:oe,initialCategories:Sn?.annotationCategories??null,controlledActiveAnnotation:O,onActiveAnnotationChange:I,onAnnotationsChange:X,controlsRef:pt,sceneRef:sr,annotationWorldPositionsRef:Ms,tourCameraOffsetRef:_s,initialCameraStateRef:_r,engagement:n,engagementRef:Bl}),NC=at.section??Fa,wb=bt&&Xe&&Ge.length>0;pr.current=Ge;let Sb=Oe||Te||ot&&Ts.supported||U&&Jm.length>0,Ls=!fa&&f!==void 0,st=Ls?ga:Ud;Do.current=st,(0,N.useEffect)(()=>{if(!Ft)return;let A=st[Ft.objectKey]?.style?.material?.[Ft.textureKey]?.path;(!_a||!A)&&Ro(null)},[st,_a,Ft]);let nh=(0,N.useRef)({}),[Xd,OC]=(0,N.useState)({});(0,N.useEffect)(()=>{let A={...Xd},V=!1,ee=new Set;for(let[pe,_e]of Object.entries(st)){ee.add(pe);let Mt=_e.style?.material,_n=nh.current[pe]??{},qt={};for(let Gn of Bi){let pi=Mt?.[Gn]?.path;pi&&(qt[Gn]=pi,pi!==_n[Gn]&&(A[pe]!==Gn&&(V=!0),A[pe]=Gn))}let xn=A[pe];if(xn&&!qt[xn]){let Gn=Bi.find(pi=>!!qt[pi]);Gn?A[pe]=Gn:delete A[pe],V=!0}nh.current[pe]=qt}for(let pe of Object.keys(A))ee.has(pe)||(delete A[pe],delete nh.current[pe],V=!0);V&&OC(A)},[st]);let IC=(0,N.useMemo)(()=>Object.entries(st).map(([A,V])=>JSON.stringify([A,V.modelObjectId,V.transform??null])).sort().join(""),[st]),{measureMode:Ra,measureModeRef:_b,measurePoints:Mb,measurementTool:Cb,areaClosed:Tb,measurementError:BC,selectMeasurementTool:zC,undoMeasurementPoint:UC,finishMeasureArea:VC,snapMode:FC,setSnapMode:jC,snapPreview:GC,handleMeasurePointerMove:HC,clearSnapPreview:Pb,showDimensions:Ab,measureBox:rh,modelBounds:WC,refreshBounds:Eb,clearMeasurements:XC,toggleMeasureMode:qC,toggleDimensions:$C,handleMeasurePointerDown:YC,handleMeasureClick:KC}=Mx({canvasAreaRef:Nr,controlsRef:pt,sceneRef:sr,modelUrl:`${i}|${r??""}`,modelRotation:at.model.rotation,bindingTransformSignature:IC,modelLoaded:Xe,enabled:et&&!Qn}),[ZC,JC]=(0,N.useState)(34),QC=yx({sceneRef:sr,materialRefs:Cs,rendererCaptureRef:Sr,objectBindings:st,downloadFilename:bn,captureVideo:$m}),Rb=(0,N.useMemo)(()=>Object.fromEntries(Object.entries(st).filter(([,A])=>A.visible===!1).map(([A])=>[A,!0])),[st]),No=(0,N.useMemo)(()=>{let A=new WeakMap,V=new Map,ee=new Map;for(let[pe,_e]of Object.entries(st))A.set(_e,pe),V.has(_e.id)||V.set(_e.id,pe),ee.has(_e.modelObjectId)||ee.set(_e.modelObjectId,pe);return{byReference:A,byId:V,byModelObjectId:ee}},[st]),ui=(0,N.useCallback)(A=>A?No.byReference.get(A)??No.byModelObjectId.get(A.modelObjectId)??No.byId.get(A.id)??null:null,[No]),ih=u!==void 0,ka=ih?u??null:Im,hn=ui(ka);(0,N.useEffect)(()=>{n.setSelectedPart(hn)},[hn,n]);let oh=hn?ar.current[hn]??null:null,eT=hn?Xd[hn]:void 0,kb=ui(Ut?m??ql??Nm:null),tT=kb?ar.current[kb]??null:null,Lb=(0,N.useCallback)(A=>{Om(A),b?.(A)},[b]),Db=wt&&ka!==null&&hn!==null,La=(hn?st[hn]:null)??ka,Ql=La&&(La.modelObjectId||La.id)||null,ec=Ql?zm[Ql]??null:null,[nT,Nb]=(0,N.useState)(""),Ob=(0,N.useRef)(null);(0,N.useEffect)(()=>{let A=Ob.current;if(A!==hn)if(Ob.current=hn,hn){let V=La?.label||ka?.label||hn;Nb(Dn("objectSelected",{name:V}))}else A&&Nb(Dn("selectionCleared"))},[hn,La,ka,Dn]),Fo(()=>{Ls||Vd(ga)},[Ls,ga]),(0,N.useEffect)(()=>{E?.(Rb)},[Rb,E]);let Ds=(0,N.useCallback)((A,V)=>{if($i==="pointerLock"){Ss("orbit");return}A&&V?n.viewPart({objectId:A.id,objectKey:ui(A)??(A.modelObjectId||A.id),label:A.label,source:V}):A||n.setSelectedPart(null),ih||Bm(A),g?.(A)},[$i,Ss,ih,g,ui,n]),Ki=(0,N.useCallback)(A=>{Ls||Vd(A),f?.(A)},[Ls,f]),Ib=(0,N.useRef)(Sn?.objectBindings?`${i}
|
|
3692
|
+
${r??""}`:null),qd=(0,N.useCallback)((A,V)=>{if(!fa)return;let ee=`${i}
|
|
3693
|
+
${r??""}`,pe=Ib.current===ee?Do.current:o_;Ib.current=ee;let _e=Qw(A,V);for(let Mt of Object.keys(_e))pe[Mt]&&(_e[Mt]=pe[Mt]);Ki(_e)},[fa,i,r,Ki]),{glowMemoryRef:Bb,readObjectGlow:$d,applyGlow:ah}=LS({nodeRefsMap:ar,currentObjectBindingsRef:Do,applyObjectBindings:Ki}),rT=(0,N.useCallback)(A=>{let V=hn;if(!V||!A)return;let ee=Do.current[V];ee&&Ki({...Do.current,[V]:{...ee,transform:{...ee.transform,...A}}})},[Ki,hn]),Oo=(0,N.useCallback)((A,V)=>st[A]?A:V?ui(V):No.byId.get(A)??No.byModelObjectId.get(A)??null,[st,ui,No]),Yd=(0,N.useCallback)((A,V)=>{let ee=Oo(A),pe=ee?st[ee]:void 0;!ee||!pe||Ki({...st,[ee]:{...pe,style:V(pe.style)}})},[Oo,st,Ki]),Di=(0,N.useCallback)(()=>{if(Or){let A=ko[Or.objectId]?.hex;A!==void 0&&(Yd(Or.objectId,V=>({...V,material:{...V?.material,baseColor:A}})),Ca(V=>({...V,[Or.objectId]:{}})))}jd(null)},[Or,ko,Yd]),sh=(0,N.useCallback)(()=>{Ds(null),Xl(null),Di()},[Ds,Di]),iT=(0,N.useCallback)((A,V,ee,pe,_e)=>{let Mt=zd.current,_n=Nr.current,qt=pt.current?.camera;if(!Mt)return{objectId:A,x:24,y:24};let xn=Mt.getBoundingClientRect(),Gn=12,pi=xn.width-V-Gn,zs=xn.height-ee-Gn,Bo=Math.max(Gn,(xn.width-V)/2),nc=Math.max(Gn,(xn.height-ee)/2),Us=Oo(A,pe),rc=Us?ar.current[Us]:null,Ni=(Vs,Da)=>Da<=Gn?Gn:Math.min(Math.max(Vs,Gn),Da);if(_n&&qt&&rc){let Vs=_n.getBoundingClientRect(),Da=new yo.Vector3;new yo.Box3().setFromObject(rc).getCenter(Da),Da.project(qt);let ET=(Da.x+1)/2*Vs.width+(Vs.left-xn.left),RT=(1-Da.y)/2*Vs.height+(Vs.top-xn.top);return{objectId:A,x:Ni(ET+24,pi),y:Ni(RT-ee/2,zs)}}let mh=typeof _e?.screenX=="number"?_e.screenX-xn.left:Bo,hh=typeof _e?.screenY=="number"?_e.screenY-xn.top:nc;return{objectId:A,x:Ni(mh,pi),y:Ni(hh,zs)}},[Oo]),Kd=DS({setCurrentAction:Xl,bindingKeyIndex:No,currentObjectBindings:st,applyObjectBindings:Ki,resolveObjectKey:Oo,closeColorPicker:Di,setColorPicker:jd,setMaterialPopupsByObject:Um,setItemMaterials:Ca,getPopoverPosition:iT,decalRequestRef:jl,setDecalError:Fl,setDecalDragging:xa,setDecalControl:ya,resolvedSceneConfigRef:To,applyLightPatches:va,readObjectGlow:$d,applyGlow:ah,glowMemoryRef:Bb,setLightControl:Vl,onAction:T});(0,N.useEffect)(()=>{if(Or)return window.addEventListener("pointerdown",Di),()=>window.removeEventListener("pointerdown",Di)},[Or,Di]),(0,N.useEffect)(()=>{if(!eh)return;let A=V=>{if(Wl.current&&!Wl.current.contains(V.target)){if(V.target.closest?.(".ri-annotationMarker"))return;Qm()}};return document.addEventListener("mousedown",A),document.addEventListener("touchstart",A),()=>{document.removeEventListener("mousedown",A),document.removeEventListener("touchstart",A)}},[eh,Qm]),(0,N.useEffect)(()=>{if(!Ea)return;let A=V=>{let ee=V.target;if(ee.closest?.(".ri-annotationPopup")||ee.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let pe=Nr.current;!pe||!pe.contains(ee)||(xb(null),Km({title:"",description:""}))};return document.addEventListener("mousedown",A,!0),document.addEventListener("touchstart",A,!0),()=>{document.removeEventListener("mousedown",A,!0),document.removeEventListener("touchstart",A,!0)}},[Ea]);let{handleFileChange:oT,triggerFileUpload:zb,clearTexture:Ub,texturePositioningEnabled:aT,texturePositioningOverrides:sT,setMaterialTextureOffset:lT,setMaterialTextureRotation:cT,endMaterialTexturePositioning:dT}=RS({applyBindingStyle:Yd,resolveObjectKey:Oo,onTextureUpload:B,fileInputRef:Nd,pendingObjectId:km,createdBlobUrls:Od,texturePositioning:mn,setMoveZoomTarget:Ro}),lh=(0,N.useRef)(D);lh.current=D;let qr=(0,N.useCallback)(()=>{let A=pt.current;!A||!lh.current||lh.current({objectBindings:Do.current,homeCameraState:_r.current,captureImage:V=>mb()?Promise.reject(new Error("Wait for video export to finish before capturing an image.")):iu(Sr.current,V),captureVideo:$m,invalidate:()=>Sr.current?.invalidate(),rendererBackend:vb.current??"webgl",raw:{controls:A,scene:sr.current,nodes:ar.current}})},[$m,mb]),tc=(0,N.useCallback)(async(A=!1)=>{let V=pt.current,ee=Ps.current??sr.current;if(!V||!ee)return!1;Ma.current=ud;try{return await n_(V,ee,{flyIn:A,onStart:()=>Pe(!0),invalidate:()=>Sr.current?.invalidate()}),Xr.current=!0,Es(),qr(),!0}catch(pe){return console.error("Fit scene error:",pe),!1}},[Es,qr]);(0,N.useEffect)(()=>{if(Xr.current=!1,Ta.current=!1,_r.current=null,sr.current=null,Ps.current=null,Xt(!1),Jn([]),Lo(!1),jm(null),Jl(!1),Gm.current="",lb({total:0,missing:0}),cb("loadingModel"),Xm(null),Sn?.model!==pu(i,r)&&(R.current=null),!i){Z(!1),Pe(!0);return}Z(!0),Pe(!!Ce||Zl.current);let A=!1,V=null,ee=_e=>{V=setTimeout(pe,_e)},pe=()=>{if(A||Xr.current||Ta.current)return;let _e=Ps.current??sr.current;if(!pt.current||!_e){ee(100);return}Yl.current=JS(_e,pt.current,ke?.maxDistance)??Yl.current;let Mt=R.current;if(Mt){R.current=null,Zv(pt.current,Mt.camera),Xr.current=!0,Mt.home?_r.current=Mt.home:Es(),qr(),Z(!1),Pe(!0),Sr.current?.invalidate();return}if(Mw(pt.current)){Xr.current=!0,Es(),qr(),Z(!1),Pe(!0),Sr.current?.invalidate();return}Ta.current=!0,(Ce?Ce():Zl.current?Promise.resolve(!0):tc(!0)).then(qt=>{Xr.current=qt!==!1,Xr.current?(Es(),qr(),Z(!1)):A||ee(100)}).catch(()=>{Xr.current=!1,A||ee(100)}).finally(()=>{Ta.current=!1})};return ee(50),()=>{A=!0,V&&clearTimeout(V)}},[Es,ke?.maxDistance,tc,i,qr,Ce,Sn,r]),i_({enabled:Pt,canvasAreaElement:Hl,fitAttemptedRef:Xr,fitInFlightRef:Ta,controlsRef:pt,cameraFramingRef:Ma,nodeRefsMap:ar,fitScene:tc});let Zd=(0,N.useCallback)(A=>{let V=pt.current;if(!V)return;let ee=A.cameraState;if(ee?.position&&ee?.target){let[Mt,_n,qt]=ee.position,xn=new yo.Vector3(...ee.target);V.setPosition(Mt,_n,qt,!0),V.setTarget(xn.x,xn.y,xn.z,!0),Ma.current={kind:"view",target:xn};return}let pe=ui(A),_e=pe?ar.current[pe]:null;!pe||!_e||(V.fitToBox(_e,!0,om).catch(()=>{}),Ma.current={kind:"object",key:pe})},[ui]);(0,N.useEffect)(()=>{hn||(Ma.current=ud)},[hn]);let ch=(0,N.useCallback)((A,V="canvas")=>{_b.current||(Ir(!1),Di(),Xl(null),Ds(A,V),!(zt||!gt)&&Zd(A))},[Ds,Di,Zd,zt,gt]),{beginMoveZoom:Vb,handleMoveZoomPointerDown:uT}=MS({moveZoomTarget:Ft,setMoveZoomTarget:Ro,currentObjectBindingsRef:Do,materialRefsOut:Cs,rendererCaptureRef:Sr,canvasAreaRef:Nr,canvasAreaElement:Hl,applyBindingStyle:Yd}),Fb=(0,N.useCallback)(A=>{if(!_a)return!1;let V=ui(A);if(!V)return!1;let ee=Xd[V];return ee?(Vb({objectKey:V,textureKey:ee}),!0):!1},[_a,ui,Xd,Vb]),dh=(0,N.useRef)(!1),{editDecals:pk,activeDecalMove:Ns,addCenteredDecal:mk,decalSizeFor:pT,startImageDecal:hk,decalControlHandlers:mT}=wS({currentObjectBindings:st,currentObjectBindingsRef:Do,applyObjectBindings:Ki,nodeRefsMap:ar,controlsRef:pt,decalMove:w,decalDragging:ys,setDecalDragging:xa,setDecalError:Fl,setDecalControl:ya,decalRequestRef:jl,onTextureUpload:B,currentPanelObjectId:Ql,modelUrl:i}),jb=(0,N.useMemo)(()=>Ew(st,Rt.styleRules),[st,Rt.styleRules]),[Gb,Hb]=(0,N.useState)(()=>Sn?.isolation??null);Fo(()=>{Hb(null)},[i]);let Os=yn!==void 0?yn:Gb,uh=(0,N.useCallback)(A=>{yn===void 0&&Hb(A),Vn?.(A)},[yn,Vn]),Zi=(0,N.useMemo)(()=>kw(jb,Os),[jb,Os]),Ji=(0,N.useMemo)(()=>Zi.setAside.size>0?ag(st,Os):null,[Zi,st,Os]),hT=(0,N.useCallback)(A=>{let V=ui(A),ee=V!==null&&Ji?.size===1&&Ji.has(V);uh(ee?null:{...Os,target:A.id})},[uh,Os,Ji]),{sourceOf:Io}=Zi,fT=(0,N.useMemo)(()=>un?Ww(st,Zi):[],[un,st,Zi]),Wb=(0,N.useCallback)(A=>{let V=Io(A);ch(V)},[ch,Io]),Xb=(0,N.useCallback)(A=>Lb(A&&Io(A)),[Lb,Io]),qb=(0,N.useCallback)((A,V)=>{let ee=Io(A);return y?.({binding:ee,...V})===!0?(dh.current=!0,!0):Fb(ee)},[y,Fb,Io]),$b=(0,N.useMemo)(()=>v?(A,V)=>v({binding:Io(A),...V}):void 0,[v,Io]),Yb=(0,N.useCallback)(A=>{Ds(A,"panel"),!zt&&Zd(A)},[Ds,Zd,zt]);(0,N.useEffect)(()=>{qr()},[qr,st]);let Kb=(0,N.useCallback)((A,V)=>{QS(V,Yl.current),k?.(bo(A,V)),qr()},[qr,k]),gT=(0,N.useCallback)(A=>{Kl.current=new Set(A.map(V=>V.name)),Vm(V=>V+1),qd(A.map(V=>V.name)),s?.(A)},[qd,s]),bT=(0,N.useCallback)(A=>{Ps.current=A,Sr.current?.invalidate()},[]),Zb=(0,N.useCallback)(A=>{sr.current=A,Eb(A),lb(ZS(A));let V=bh(A);nC(V>sc?V:null),sb(!1),Xm(null),V>sc&&cb("preparingLargeModel"),Xt(!0),Jn(al(A)),Lo(!1),jm(null),ab(!1),r||(s&&s(Z1(A)),qd(sd(A),ad(A))),_?.(A),x?.(Pw(A)),qr()},[qd,qr,x,s,_,Eb,r]),Jb=(0,N.useCallback)(A=>{Z(!1),Pe(!0),Lo(!0),jm(A),P?.(A)},[P]),vT=(0,N.useCallback)(A=>{A.lengthComputable&&A.total>0&&Xm(A.loaded/A.total*100),d?.(A)},[d]),Qb=(0,N.useCallback)((A,V,ee)=>{if(!Ie)return;let pe={...at,lighting:{...at.lighting,lights:at.lighting.lights.map(_e=>_e.id===A?{..._e,position:V,...ee?{rotation:ee}:{}}:_e)}};Ie(pe)},[at,Ie]);(0,N.useEffect)(()=>{let A=sr.current;if(!Xe||!A){Jl(!1);return}let V=Object.entries(st);if(V.length===0){Jl(!1);return}let ee=r?Kl.current:new Set(Object.keys(lo(A).nodesById));if(!ee||ee.size===0){Jl(!1);return}let pe=V.map(([Mt,_n])=>_n.modelObjectId??Mt).filter(Mt=>!ee.has(Mt));Jl(pe.length>0),tC(pe.length);let _e=pe.join(`
|
|
3694
|
+
`);if(pe.length>0&&_e!==Gm.current){let Mt=pe.slice(0,10).map(qt=>`"${qt}"`).join(", "),_n=pe.length>10?` and ${pe.length-10} more`:"";console.warn(`[react-immersive] ${pe.length} object binding(s) point at nodes this model doesn't have, so they can't be selected: ${Mt}${_n}. Each binding's modelObjectId (or its key) must match a node name; log onObjectCatalog to see this model's names.`)}Gm.current=_e},[Xe,st,As,r]),(0,N.useEffect)(()=>{if(T||zl)return;let A=[];for(let[ee,pe]of Object.entries(st))for(let _e of pe.actions??[])fc.includes(_e.id)||A.push(`"${_e.id}" on "${pe.label??ee}"`);let V=A.join(`
|
|
3695
|
+
`);if(A.length>0&&V!==ib.current){let ee=A.slice(0,10).join(", "),pe=A.length>10?` and ${A.length-10} more`:"";console.warn(`[react-immersive] ${A.length} action button(s) do nothing because ModelViewer has no onAction handler: ${ee}${pe}. ModelViewer itself handles ${fc.join(", ")}; handle other ids in onAction, or pass useViewerActions().handleAction to run their effects.`)}ib.current=V},[st,zl,T]);let ph=(0,N.useCallback)(async()=>{if(pt.current&&_r.current&&td(pt.current,_r.current),Ce){await Ce();return}let A=pt.current;if(!A)return;let V=_r.current;try{V?(Ma.current=ud,await Ag(A,()=>A.setLookAt(V.position[0],V.position[1],V.position[2],V.target[0],V.target[1],V.target[2],!0))):await tc()}catch(ee){console.error("Reset camera error:",ee)}},[Ce,tc]),fk=(0,N.useCallback)(()=>{Aa(!1),Ir(!0)},[]),gk=(0,N.useCallback)(()=>{Ir(!1)},[]),yT=(0,N.useCallback)(()=>{Ir(!1),Aa(!0),setTimeout(()=>{ph()},100)},[ph]),xT=(0,N.useCallback)((A,V)=>{Kb(A,V)},[Kb]),wT=(0,N.useCallback)(A=>{if(_b.current)return;if(dh.current){dh.current=!1;return}let V=Ul==="scene"&&Mo==="Annotations";if(A.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let pe=Nr.current,_e=pt.current,Mt=_e?.camera,_n=sr.current;if(!pe||!_e||!Mt||!_n||!V&&!_e.enabled)return;let qt=pe.getBoundingClientRect(),xn=(A.clientX-qt.left)/qt.width*2-1,Gn=-((A.clientY-qt.top)/qt.height)*2+1,pi=new yo.Raycaster;pi.setFromCamera(new yo.Vector2(xn,Gn),Mt);let zs=pi.intersectObject(_n,!0);if(zs.length===0)return;if(!V){let{x:Ni,y:mh,z:hh}=zs[0].point;_e.setOrbitPoint(Ni,mh,hh);return}let Bo=zs[0],nc=Bo.point,Us=_n.worldToLocal(Bo.point.clone()),rc=[0,0,1];if(Bo.face){let Ni=Bo.face.normal.clone().transformDirection(Bo.object.matrixWorld).normalize();rc=[Ni.x,Ni.y,Ni.z]}xb({worldPosition:[nc.x,nc.y,nc.z],localPosition:[Us.x,Us.y,Us.z],worldNormal:rc,anchor:gS(Bo),screenX:A.clientX-qt.left,screenY:A.clientY-qt.top}),Km({title:"",description:""})},[Ul,Mo]);if((0,N.useEffect)(()=>{hs.current={snapshot:()=>{let A=pt.current,V=R.current;return{model:fs,camera:Xr.current&&A?Qc(A):V?.camera,home:_r.current??V?.home,lightEdits:qi,variantEdit:gs,sectionEdit:ci,isolation:Gb,objectBindings:Ls?void 0:Ud,explodeFactor:Gd,cameraControllerType:Rd,uvCheckerOverride:Ad,annotationCategories:wC}},captureFrame:()=>{let A=Sr.current;return!A||t.status!=="ready"||!Xe||!ne?Promise.resolve(null):zv(A)}}}),(0,N.useEffect)(()=>()=>{hs.current=null},[hs]),Co.status==="checking"){let A=Td??Cn;return A?(0,ie.jsx)("div",{className:"ri-viewer ri-viewerPlaceholder",style:{background:xs},children:(0,ie.jsx)(du,{src:A})}):(0,ie.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,ie.jsx)(Na,{title:Dn("verifyingLicense"),message:Dn("checkingYourLicenseKey")})})}if(Co.status==="invalid")return(0,ie.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,ie.jsx)(Na,{tone:"error",title:Dn("invalidLicense"),message:Co.isLocalDomain?Co.reason??Dn("licenseHasBeenRevokedOrHasExpired"):Dn("failedToLoadPleaseContactTheSiteAdministrator")})});let{materialTextureUrl:ev,materialTargetTakesImage:tv,materialTextureOffset:nv,materialTextureRotationDegrees:rv,isMaterialTexturePositioning:iv,materialTextureOnOffsetChange:ov,materialTextureOnRotationChange:av,materialTextureOnEndPositioning:sv}=kS({materialPopup:ec,resolveObjectKey:Oo,currentObjectBindings:st,nodeRefsMap:ar,moveZoomTarget:Ft,texturePositioningEnabled:aT,texturePositioningOverrides:sT,setMaterialTextureOffset:lT,setMaterialTextureRotation:cT,endMaterialTexturePositioning:dT}),ST=Nr.current?.offsetWidth??600,_T=Nr.current?.offsetHeight??400,MT=350,CT=290,TT=Ea?Math.min(Ea.screenX+12,ST-MT-8):0,PT=Ea?Math.min(Ea.screenY,_T-CT-8):0,AT=mt&&!!i&&!Yi&&!Xe,Is=ha&&(Wd&&(hb||fb)||gb||!!Hd),lv=(Is?1:0)+(ve?1:0),Bs=A=>16+A*42+(et&&A>lv?Math.max(0,ZC-34):0);return(0,ie.jsxs)("div",{className:"ri-viewer",ref:Ts.rootRef,style:{background:xs},"data-reduced-motion":rn?"":void 0,children:[(0,ie.jsx)("div",{className:"ri-visuallyHidden",role:"status","aria-atomic":"true",children:nT}),t.status!=="ready"&&(0,ie.jsx)(ES,{rebuilding:t.status==="rebuilding",onReload:t.reload}),(0,ie.jsxs)("div",{className:"ri-viewerLeft",ref:zd,inert:t.status!=="ready",children:[be?be({isOpen:Db,selectedObject:La,currentAction:Fd,onClose:sh,onAction:Kd}):(0,ie.jsx)(hg,{translateDefaultActions:fa,isOpen:Db,selectedObject:La,currentAction:Fd,onClose:sh,onAction:Kd,renderActionExtra:A=>{if(A==="change-color"&&Or)return(0,ie.jsx)(pg,{inline:!0,colorPicker:Or,onClose:Di,itemMaterials:ko,setItemMaterials:Ca});if((A==="change-light-color"||A==="set-brightness")&&Ao?.kind===A&&Ao.objectId===Ql){let V=Ao,ee=V.target,pe=ee.type==="lights"?at.lighting.lights.find(_e=>_e.id===ee.lightIds[0])?.color??"#ffffff":im($d(ee.objectKey).color);return(0,ie.jsx)(Ny,{kind:V.kind,color:pe,brightness:V.percent,onColorChange:_e=>{if(ee.type==="lights"){va(Object.fromEntries(ee.lightIds.map(_n=>[_n,{color:_e}])));return}let Mt=$d(ee.objectKey);ah(ee.objectKey,{emissive:_e,emissiveIntensity:Mt.intensity>0?Mt.intensity:Bb.current[ee.objectKey]??1})},onBrightnessChange:_e=>{if(Vl({...V,percent:_e}),ee.type==="lights"){va(Object.fromEntries(ee.lightIds.map(Mt=>[Mt,{intensity:(ee.baseIntensity[Mt]??0)*(_e/100)}])));return}ah(ee.objectKey,{emissive:im($d(ee.objectKey).color),emissiveIntensity:ee.baseIntensity*(_e/100)})},onClose:()=>Vl(null)})}if((A==="add-text"||A==="add-image")&&di?.kind===A&&di.objectId===Ql){let V=di,ee=Oo(V.objectId);if(!ee)return null;let pe=A==="add-image";return(0,ie.jsx)(Iy,{kind:A,decals:(st[ee]?.decals??[]).filter(_e=>!!_e.image===pe),activeId:V.activeId,error:Wt?Dn.message(Wt):null,moving:ys?.objectKey===ee&&ys.decalId===V.activeId,defaultSize:pT(ee),...mT(V,ee)})}return A==="change-material"&&ec?(0,ie.jsx)(mg,{inline:!0,triggerFileUpload:zb,materialPopup:ec,textureUrl:ev,clearTexture:Ub,canPlaceImage:tv,offset:nv,rotationDegrees:rv,onOffsetChange:ov,onRotationChange:av,isPositioning:iv,onEndPositioning:sv}):null}}),(0,ie.jsxs)("div",{className:`ri-canvasArea ${Ra?"ri-canvasArea--measuring":""} ${ne?"":"ri-canvasArea--positioning"} ${we?"ri-canvasArea--moveMode":""}`,ref:Dm,tabIndex:tt?0:void 0,role:tt?"group":void 0,"aria-label":tt?Dn("cameraKeyboardHelp"):void 0,onDoubleClick:wT,onPointerDown:A=>{if(tt&&Nr.current?.focus({preventScroll:!0}),Ft){uT(A);return}YC(A)},onClick:Ft?void 0:KC,onPointerMove:HC,onPointerLeave:Pb,onWheel:Pb,children:[Xe&&!Ra&&t.status==="ready"?(0,ie.jsx)($w,{objects:fT,selectedKey:hn,onHighlight:$l,onSelect:A=>ch(A,"keyboard"),onClearSelection:sh}):null,_a&&!r&&(Ft||eT)&&(0,ie.jsx)("div",{className:"ri-moveZoomHint",role:"status",style:{position:"absolute",top:12,left:"50%",transform:"translateX(-50%)",zIndex:5,padding:"6px 12px",borderRadius:999,fontSize:12,fontWeight:500,color:"#fff",background:Ft?"rgba(37, 99, 235, 0.92)":"rgba(0, 0, 0, 0.6)",pointerEvents:"none",whiteSpace:"nowrap"},children:Dn(Ft?"texturePositioningHint":"texturePositioningStartHint")}),rb&&!ob&&(0,ie.jsx)(CS,{count:eC,onDismiss:()=>ab(!0)}),Hm!==null&&!rC&&(0,ie.jsx)(TS,{triangles:Hm,offset:rb&&!ob,onDismiss:()=>sb(!0)}),Rt.model.renderer==="uv-checker"&&Wm.missing>0&&(0,ie.jsx)(PS,{missing:Wm.missing,total:Wm.total}),(0,ie.jsx)("input",{ref:Nd,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:oT}),(0,ie.jsx)(Xs,{onError:t.fail,children:Rs?(0,ie.jsxs)(qh,{backend:Rs,onRendererCreated:t.onRendererCreated,suspended:t.status!=="ready",paused:Il&&!Qn,camera:re,backgroundColor:te,shadows:We&&at.shadows.enabled,sceneConfig:Rt,selectedObjectRef:oh,hoveredObjectRef:tT,highlightOnHover:Ut,renderMode:St,maxDpr:dn,reduceGpuLoad:Li,xrStore:Wd,rendererCaptureRef:Sr,preserveDrawingBuffer:ae,children:[(0,ie.jsx)(Jh,{lightingConfig:at.lighting,shadowConfig:at.shadows,shadowsEnabled:We,environmentRotation:at.environment.rotation,environmentConfig:at.environment,modelBounds:WC,objectBindings:st,nodeRefs:ar}),Em&&at.lighting.lights.map(A=>!A.visible||A.type==="none"||A.type==="hemisphere"||A.attachment?null:(0,ie.jsx)(uS,{light:A,position:A.position,rotation:A.rotation,color:A.color,intensity:A.intensity,visible:A.visible,onPositionChange:V=>Qb(A.id,V,A.rotation),onRotationChange:V=>Qb(A.id,A.position,V),onDraggingChange:Ld},A.id)),(0,ie.jsx)(lg,{setAside:Zi.setAside,nodeRefs:ar}),!ks&&(0,ie.jsx)(ug,{section:at.section??Fa,box:rh,modelRef:sr,showHandle:or,onPositionChange:A=>ba({position:A}),onDraggingChange:Tn}),(0,ie.jsx)(Kh,{controlsRef:pt,onCameraChange:xT,cameraLimits:ke,controllerType:$i,onPointerLockExit:()=>Ss("orbit"),reducedMotion:rn}),(0,ie.jsx)(Pg,{enabled:Qn||Ra||Ns||rn||$i==="pointerLock"?!1:Ht??at.model.autoRotate??!1,speed:Ln??at.model.autoRotateSpeed??1,controlsRef:pt}),Ye&&!Qn&&(0,ie.jsx)(am.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{pt.current?.update(0),Sr.current?.invalidate()},children:(0,ie.jsx)(am.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),we&&!ks&&oh&&hn&&(0,ie.jsx)(Cg,{node:oh,space:pn,onTransformChange:rT,onDraggingChange:A=>{Ld(A),ka&&M?.(ka,A)}},hn),Ns&&(0,ie.jsx)(cx,{target:Ns,nodes:ar,controls:pt}),(0,ie.jsx)(eu,{onLoadError:Jb,children:(0,ie.jsx)(N.Suspense,{fallback:null,children:(()=>{let A=(0,ie.jsxs)(ie.Fragment,{children:[r?(0,ie.jsx)(Hf,{url:r,rotation:Rt.model.rotation,errorTarget:o,cacheSize:a,decoderConfig:Gl,objectBindings:Zi.bindings,itemMaterials:ko,sceneConfig:Rt,selectedItem:hn,panelHoveredItem:m??ql,highlightOnHover:Ut,onItemClick:Wb,onItemHover:Xb,onItemDoubleClick:qb,onItemContextMenu:$b,onObjectCatalog:gT,onTilesetBounds:bT,onModelLoaded:Zb,onLoadError:Jb,nodeRefsOut:ar,onNodeRefsChange:Bd,materialRefsOut:Cs,explodeFactor:Gd,suspendBindingTransforms:mr}):(0,ie.jsx)(sf,{url:i,modelFormat:l,objectBindings:Zi.bindings,selectedItem:hn,itemMaterials:ko,onItemClick:Wb,onItemDoubleClick:qb,onItemContextMenu:$b,onItemHover:Xb,onModelLoaded:Zb,onAnimationsReady:L,nodeRefsOut:ar,onNodeRefsChange:Bd,materialRefsOut:Cs,panelHoveredItem:m??ql,sceneConfig:Rt,zoomOnSelected:gt,highlightOnHover:Ut,decoderConfig:Gl,onLoadProgress:vT,explodeFactor:Gd,suspendBindingTransforms:mr,pulses:Zi.pulses}),(0,ie.jsx)($f,{annotations:_C,sceneConfig:at,activeAnnotation:eh,popupRef:Wl,canvasRootRef:Nr,worldPositionsRef:Ms,modelLoaded:Xe,onAnnotationClick:DC,onCloseAnnotation:Qm,hideCloseButton:th,showAnnotationOnHover:H}),(0,ie.jsx)(Tg,{annotation:TC,enabled:th&&!Qn,controlsRef:pt,offsetRef:_s}),Qn?(0,ie.jsx)(au,{controlsRef:pt,sceneRef:sr,config:Qn.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:Qn.onStarted,onFinished:Qn.onFinished,onProgress:dC},"video-export"):Pa&&(0,ie.jsx)(au,{controlsRef:pt,sceneRef:sr,config:Pa,playing:pb&&!Ra,resetOnPlay:sC,onFinished:()=>{Ir(!1),Aa(!1)},onUserInteract:()=>{Ir(!1)}},"cinematic-preview"),et&&(0,ie.jsx)(Yf,{points:Mb,unit:li,box:rh,showDimensions:Ab,tool:Cb,areaClosed:Tb,snapPreview:Ra?GC:null})]});return Wd?(0,ie.jsx)(cw,{ref:pC,box:rh,scaleMode:Dr,onARStateChange:bC,children:A}):A})()})},r??i),Se&&(0,ie.jsx)(N.Suspense,{fallback:null,children:Se})]}):null}),(0,ie.jsx)(du,{src:Td??Cn,hidden:Xe&&ne}),Vt&&(0,ie.jsx)("div",{className:"ri-overlay",children:Vt}),mt&&i&&Yi&&(0,ie.jsx)(AS,{failure:My(Fm,r||i,r?void 0:l,e),source:r||i}),(0,ie.jsx)(Hp,{visible:AT,message:Dn(iC,{millions:Math.round((Hm??0)/1e6)}),progress:oC??void 0}),Is&&(0,ie.jsx)(HS,{top:Bs(0),xrStore:Wd,arSupported:hb,vrSupported:fb,quickLookSupported:gb,mobileHandoffUrl:Hd,mobileHandoffOpen:bb,onQuickLook:gC,onOpenMobileHandoff:hC}),mC,bb&&Hd&&(0,ie.jsx)(WS,{url:Hd,onClose:fC}),ve&&(0,ie.jsx)(XS,{top:Bs(Is?1:0),active:Eo,onToggle:()=>Ed(A=>!(A??wa))}),et&&(0,ie.jsx)(Kf,{top:Bs(lv),active:Ra,disabled:!!Qn,tool:Cb,snap:FC,pointCount:Mb.length,areaClosed:Tb,error:BC,showDimensions:Ab,onToggle:()=>{Ir(!1),qC()},onTool:zC,onSnap:jC,onUndo:UC,onClear:XC,onFinishArea:VC,onDimensions:$C,onHeight:JC}),Qe&&(0,ie.jsx)(qS,{top:Bs((Is?1:0)+(ve?1:0)+(et?1:0)),open:aC,factor:Gd,onToggleOpen:()=>ub(A=>!A),onFactorChange:db}),or&&!ks&&(0,ie.jsx)($S,{top:Bs((Is?1:0)+(ve?1:0)+(et?1:0)+(Qe?1:0)),section:NC,onChange:ba}),Pa&&(0,ie.jsx)(YS,{top:Bs((Is?1:0)+(ve?1:0)+(et?1:0)+(Qe?1:0)+(or?1:0)),playing:pb,disabled:!!Qn||Ra,onPlay:()=>{Aa(!1),Ir(!0)},onPause:()=>Ir(!1),onStop:yT}),Qn&&(0,ie.jsx)(KS,{progress:cC,onCancel:Ym}),(Zm||wb||Ns||yr&&Ji)&&(0,ie.jsxs)("div",{className:`ri-bottomStack ${Sb?"ri-bottomStack--aboveButtons":""} ${Zm?"ri-bottomStack--annotationFilters":""}`,children:[Zm&&(0,ie.jsx)(NS,{categories:MC,selected:SC,disabled:!!Qn,onChange:CC}),Ns&&(0,ie.jsx)(OS,{onCancel:Ns.onCancel}),yr&&Ji&&(0,ie.jsx)(IS,{label:Ji.size===1?Dn("isolatedObject",{name:(()=>{let[A]=Ji;return st[A]?.label??A})()}):Dn("isolatedObjects",{count:Ji.size}),onShowAll:()=>uh(null)}),wb&&(0,ie.jsx)(BS,{groups:Ge,activeVariants:bs,onSelect:ki})]}),Sb&&(0,ie.jsxs)("div",{className:"ri-buttonContainer",children:[(0,ie.jsx)("div",{className:"ri-tourControls",children:U&&Jm.length>0&&(0,ie.jsx)(zS,{count:Jm.length,active:th,index:yC,navigating:xC,onStart:PC,onPrevious:AC,onNext:EC,onStop:RC})}),(0,ie.jsxs)("div",{className:"mv-rightControls",children:[ot&&Ts.supported&&(0,ie.jsx)(US,{fullscreen:Ts,disabled:!!Qn}),Oe&&(0,ie.jsx)("button",{className:"mv-resetButton",onClick:ph,disabled:!!Qn,title:Dn("resetCameraView"),children:(0,ie.jsx)(a_.RotateCcw,{})}),(0,ie.jsx)(VS,{open:Sa,current:$i,disabled:!!Qn,onSelect:Ss,onToggle:()=>ws(A=>!A)}),Te&&(0,ie.jsx)(FS,{menu:QC,recording:!!Qn,hasScene:!!sr.current,canCaptureImage:ae||Rs==="webgpu",canRecord:Xe&&ne&&!j,hasCinematic:!!Pa})]})]}),Ea&&(0,ie.jsx)(jS,{x:TT,y:PT,form:vC,setForm:Km,onOk:kC,onCancel:LC})]}),be&&Or&&(0,ie.jsx)(pg,{colorPicker:Or,onClose:Di,itemMaterials:ko,setItemMaterials:Ca}),be&&ec&&(0,ie.jsx)(mg,{triggerFileUpload:zb,materialPopup:ec,textureUrl:ev,clearTexture:Ub,canPlaceImage:tv,offset:nv,rotationDegrees:rv,onOffsetChange:ov,onRotationChange:av,isPositioning:iv,onEndPositioning:sv})]}),Ne&&(0,ie.jsx)("div",{className:"ri-viewerRight",inert:t.status!=="ready",children:ue?ue({objectBindings:st,onAction:Kd,onFocus:Yb,onHover:$l}):(0,ie.jsx)(fg,{objectBindings:st,onAction:Kd,onFocus:Yb,onHover:$l,isolatedKeys:Ji,onIsolate:yr?hT:void 0})}),vn&&(0,ie.jsx)(_w,{controlsRef:pt,enabled:t.status==="ready",opacity:ur,moveSensitivity:jt,position:de})]})}var oa=require("react");var pd=require("three"),lm=1e-6;function s_(){let e=[null,null],t=0,n=!1,i=new pd.Vector3,r=new pd.Vector3,o=new pd.Vector3,a=new pd.Vector3,s=(c,h)=>{let p=e[c],u=e[h];if(!p||!u)return;p.controls.getPosition(i,!1),p.controls.getTarget(o,!1),u.controls.getPosition(r,!1),u.controls.getTarget(a,!1);let m=p.controls.camera.zoom;if(!(i.distanceToSquared(r)<lm&&o.distanceToSquared(a)<lm&&Math.abs(m-u.controls.camera.zoom)<lm)){n=!0;try{Math.abs(m-u.controls.camera.zoom)>=lm&&u.controls.zoomTo(m,!1),u.controls.setLookAt(i.x,i.y,i.z,o.x,o.y,o.z,!1)}finally{n=!1}u.invalidate()}},l=c=>{n||(c===t?s(c,1-c):s(t,c))};return{attach(c,h,p){let u=e[c];if(u?.controls===h){u.invalidate=p;return}u?.detach();let m=()=>l(c),f=()=>{t=c};h.addEventListener("update",m),h.addEventListener("controlstart",f),e[c]={controls:h,invalidate:p,detach:()=>{h.removeEventListener("update",m),h.removeEventListener("controlstart",f)}},s(t,1-t)},get leader(){return t},detach(){e.forEach(c=>c?.detach()),e[0]=e[1]=null}}}var xo=require("react/jsx-runtime"),cm=.05,l_=.2,c_=e=>Math.min(Math.max(Number.isFinite(e)?e:.5,0),1);function d_({split:e,onSplitChange:t,labels:n,containerRef:i,beforeAction:r}){let o=Me(),a=p=>{let u=i.current?.getBoundingClientRect();u&&u.width>0&&t(c_((p-u.left)/u.width))},s=p=>{p.preventDefault(),p.stopPropagation(),p.currentTarget.setPointerCapture(p.pointerId),p.currentTarget.focus(),a(p.clientX)},l=p=>{p.currentTarget.hasPointerCapture(p.pointerId)&&a(p.clientX)},c=p=>{let u={ArrowLeft:e-cm,ArrowDown:e-cm,ArrowRight:e+cm,ArrowUp:e+cm,PageDown:e-l_,PageUp:e+l_,Home:0,End:1}[p.key];u!==void 0&&(p.preventDefault(),p.stopPropagation(),t(c_(u)))},h=Math.round(e*100);return(0,xo.jsxs)(xo.Fragment,{children:[(0,xo.jsxs)("span",{className:"ri-compare__label ri-compare__label--before",hidden:e<.08,children:[n[0],r]}),(0,xo.jsx)("span",{className:"ri-compare__label ri-compare__label--after",hidden:e>.92,children:n[1]}),(0,xo.jsx)("div",{className:"ri-compare__divider",role:"slider",tabIndex:0,"aria-label":o("compareDivider"),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":h,"aria-valuetext":o("compareDividerValue",{before:n[0],after:n[1],percent:h,rest:100-h}),onPointerDown:s,onPointerMove:l,onKeyDown:c,children:(0,xo.jsx)("span",{className:"ri-compare__handle","aria-hidden":"true"})})]})}var md=require("react/jsx-runtime");function u_({liveViewerRef:e,renderBefore:t,split:n,onSplitChange:i,labels:r,beforeAction:o}){let a=(0,oa.useRef)(null),s=(0,oa.useMemo)(()=>s_(),[]);(0,oa.useEffect)(()=>()=>s.detach(),[s]);let l=(0,oa.useCallback)(c=>{let h=e.current;h&&s.attach(0,h.raw.controls,h.invalidate),s.attach(1,c.raw.controls,c.invalidate)},[s,e]);return(0,md.jsxs)("div",{ref:a,className:"ri-compare ri-compare--overlay",style:{"--ri-compare-split":`${n*100}%`},children:[(0,md.jsx)("div",{className:"ri-compare__layer ri-compare__layer--before",children:t(l)}),(0,md.jsx)(d_,{split:n,onSplitChange:i,labels:r,containerRef:a,beforeAction:o})]})}var rr=require("react"),p_={currentClip:null,isPlaying:!1,speed:1,time:0,duration:0,active:[]};function m_(){let e=(0,rr.useRef)(null),t=(0,rr.useRef)(null),[n,i]=(0,rr.useState)([]),[r,o]=(0,rr.useState)([]),[a,s]=(0,rr.useState)(p_);(0,rr.useEffect)(()=>()=>{t.current?.()},[]);let l=(0,rr.useCallback)(g=>{t.current?.(),e.current=g,i(g.clips),o(g.clipDetails??g.clips.map(b=>({sourceName:b,duration:0}))),s(g.getState?.()??p_),t.current=g.subscribe?.(s)??null},[]),c=(0,rr.useCallback)(g=>{let b=e.current;b&&(g(b),!b.subscribe&&b.getState&&s(b.getState()))},[]),h=(0,rr.useCallback)((g,b)=>c(y=>y.play(g,b)),[c]),p=(0,rr.useCallback)(g=>c(b=>b.pause(g)),[c]),u=(0,rr.useCallback)(g=>c(b=>b.stop(g)),[c]),m=(0,rr.useCallback)((g,b)=>c(y=>y.setSpeed(g,b)),[c]),f=(0,rr.useCallback)((g,b)=>c(y=>y.seek?.(g,b)),[c]);return{clips:n,clipDetails:r,...a,play:h,pause:p,stop:u,setSpeed:m,seek:f,handleAnimationsReady:l}}var MR="react-immersive:binding-builder";var Cl="session",ls="model",Tl="textures",hd="current";var ss=null;function um(){return ss||(ss=new Promise((e,t)=>{if(typeof indexedDB>"u"){t(new Error("IndexedDB is not available in this environment."));return}let n=indexedDB.open(MR,2);n.onupgradeneeded=()=>{let i=n.result;i.objectStoreNames.contains(Cl)||i.createObjectStore(Cl),i.objectStoreNames.contains(ls)||i.createObjectStore(ls),i.objectStoreNames.contains(Tl)||i.createObjectStore(Tl)},n.onsuccess=()=>{let i=n.result;i.onversionchange=()=>{i.close(),ss=null},e(i)},n.onerror=()=>t(n.error??new Error("Failed to open IndexedDB."))}),ss.catch(()=>{ss=null}),ss)}function pm(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error??new Error("IndexedDB transaction failed.")),e.onabort=()=>n(e.error??new Error("IndexedDB transaction aborted."))})}function Eg(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error??new Error("IndexedDB request failed."))})}function dm(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function CR(e){if(!dm(e)||e.version!==1)return!1;let t=e.model;return typeof e.savedAt=="number"&&dm(e.bindings)&&dm(e.sceneConfig)&&dm(t)&&typeof t.name=="string"&&(t.kind==="file"&&typeof t.key=="string"||t.kind==="url"&&typeof t.url=="string")}async function h_(e,t){let n=await um(),i={...e,version:1,savedAt:Date.now()},r=n.transaction([Cl,ls],"readwrite"),o=pm(r);if(r.objectStore(Cl).put(i,hd),i.model.kind==="file"&&t){let a={key:i.model.key,blob:t,name:t.name,type:t.type,lastModified:t.lastModified};r.objectStore(ls).put(a,hd)}else i.model.kind==="url"&&r.objectStore(ls).delete(hd);return await o,i}async function f_(){let t=(await um()).transaction([Cl,ls],"readonly"),n=pm(t),[i,r]=await Promise.all([Eg(t.objectStore(Cl).get(hd)),Eg(t.objectStore(ls).get(hd))]);return await n,CR(i)?i.model.kind==="url"?{session:i,file:null}:!r||r.key!==i.model.key?null:{session:i,file:new File([r.blob],r.name,{type:r.type,lastModified:r.lastModified})}:null}async function mm(e,t){let i=(await um()).transaction(Tl,"readwrite"),r=pm(i),o={blob:t,name:t.name,type:t.type,savedAt:Date.now()};i.objectStore(Tl).put(o,e),await r}async function fd(e){let n=(await um()).transaction(Tl,"readonly"),i=pm(n),r=await Eg(n.objectStore(Tl).get(e));return await i,r?new File([r.blob],r.name,{type:r.type,lastModified:r.savedAt}):null}var wm=require("react");var C_=require("react"),la=require("lucide-react"),gm=require("react-colorful");var Pi=require("react"),v_=require("react-dom"),hm=require("lucide-react"),fm=require("react-colorful");function aa(e){let t=e.replace("#","").match(/.{2}/g).map(i=>parseInt(i,16)/255).map(i=>i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4));return .2126*t[0]+.7152*t[1]+.0722*t[2]>.179?"#000":"#fff"}var g_=require("react");function b_(e,t,n){(0,g_.useEffect)(()=>{if(!n)return;let i=Array.isArray(e)?e:[e],r=o=>{let a=o.target;i.some(l=>l.current?.contains(a))||t()};return document.addEventListener("pointerdown",r,!0),()=>{document.removeEventListener("pointerdown",r,!0)}},[e,t,n])}var De=require("react/jsx-runtime");function gd({anchorRef:e,onClose:t,children:n}){let i=(0,Pi.useRef)(null),[r,o]=(0,Pi.useState)(null);return b_([i,e],t,!0),(0,Pi.useLayoutEffect)(()=>{let a=e.current;if(!a)return;let s=a.getBoundingClientRect(),l=222,c=8,h=Math.min(Math.max(s.right-l,c),window.innerWidth-l-c),p=Math.min(s.bottom+6,window.innerHeight-200);o({top:p,left:h})},[e]),r?(0,v_.createPortal)((0,De.jsx)("div",{ref:i,className:"se-colorPickerPopover",style:{position:"fixed",top:r.top,left:r.left},children:n}),document.body):null}function TR(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,t=>t.toUpperCase())}function wo({title:e,children:t}){return(0,De.jsxs)("section",{className:"se-section",children:[(0,De.jsx)("h3",{className:"se-sectionTitle",children:e}),(0,De.jsx)("div",{className:"se-sectionBody",children:t})]})}function xt({title:e,open:t,onToggle:n,trailing:i,children:r,disabled:o,tooltip:a}){let s=a?`${a}`:e;return(0,De.jsxs)("section",{className:"se-panel",children:[(0,De.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,title:s,children:[(0,De.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,De.jsx)(hm.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,De.jsx)("span",{className:"se-panelTitle",children:e}),a?(0,De.jsx)("span",{className:"se-panelHelp",title:s,"aria-label":s,role:"img",onClick:l=>l.stopPropagation(),children:(0,De.jsx)(hm.Info,{size:13})}):null]}),i?(0,De.jsx)("span",{className:"se-panelTrailing",onClick:l=>l.stopPropagation(),children:i}):null]}),t?(0,De.jsx)("div",{className:"se-panelBody",style:o?{opacity:.45,pointerEvents:"none"}:void 0,children:r}):null]})}function At({checked:e,onChange:t,label:n}){return(0,De.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,De.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,De.jsx)("span",{className:"se-switchTrack",children:(0,De.jsx)("span",{className:"se-switchThumb"})})]})}function q({label:e,value:t,min:n,max:i,step:r,formatValue:o,onChange:a,disabled:s=!1}){return(0,De.jsxs)("label",{className:`se-field ${s?"se-field--disabled":""}`,children:[(0,De.jsxs)("span",{className:"se-fieldLabel",children:[e,(0,De.jsx)("span",{className:"se-fieldValue",children:o?o(t):t})]}),(0,De.jsx)("input",{className:"se-slider",type:"range",min:n,max:i,step:r,value:t,onChange:l=>a(Number(l.target.value)),disabled:s})]})}function Tt({label:e,checked:t,onChange:n}){return(0,De.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,De.jsx)("span",{className:"se-fieldLabel",children:e}),(0,De.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:i=>n(i.target.checked)})]})}function jr({label:e,value:t,options:n,onChange:i}){return(0,De.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,De.jsx)("span",{className:"se-fieldLabel",children:e}),(0,De.jsx)("select",{className:"se-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,De.jsx)("option",{value:r,children:TR(r)},r))})]})}function kr({label:e,value:t,onChange:n}){let[i,r]=(0,Pi.useState)(!1),o=(0,Pi.useRef)(null);return(0,De.jsxs)("div",{className:"se-field",children:[(0,De.jsxs)("div",{className:"se-fieldInline",children:[(0,De.jsx)("span",{className:"se-fieldLabel",children:e}),(0,De.jsx)("span",{ref:o,style:{display:"inline-flex"},children:(0,De.jsx)(fm.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>r(a=>!a),style:{background:t,color:aa(t)},color:t,onChange:n})})]}),i?(0,De.jsx)(gd,{anchorRef:o,onClose:()=>r(!1),children:(0,De.jsx)(fm.HexColorPicker,{color:t,onChange:n})}):null]})}function y_({value:e,min:t,max:n,step:i,onChange:r}){let[o,a]=(0,Pi.useState)(String(e)),s=(0,Pi.useRef)(!1);return(0,Pi.useLayoutEffect)(()=>{s.current||a(String(e))},[e]),(0,De.jsx)("input",{type:"number",className:"se-numberInput",min:t,max:n,step:i,value:o,onFocus:()=>{s.current=!0},onChange:l=>{let c=l.target.value;a(c),c!==""&&c!=="-"&&!Number.isNaN(Number(c))&&r(Number(c))},onBlur:()=>{s.current=!1,a(String(e))}})}function sa({label:e,value:t,min:n,max:i,step:r,onChange:o}){return(0,De.jsxs)("div",{className:"se-field",children:[(0,De.jsx)("span",{className:"se-fieldLabel",children:e}),(0,De.jsx)("div",{className:"se-vectorRow",children:["X","Y","Z"].map((s,l)=>(0,De.jsxs)("label",{className:"se-vectorAxis",children:[(0,De.jsx)("span",{children:s}),(0,De.jsx)(y_,{value:t[l],min:n,max:i,step:r,onChange:c=>{let h=[...t];h[l]=c,o(h)}})]},s))})]})}function cs({label:e,value:t,min:n,max:i,step:r,onChange:o}){return(0,De.jsxs)("div",{className:"se-field",children:[(0,De.jsx)("span",{className:"se-fieldLabel",children:e}),(0,De.jsx)("div",{className:"se-vectorRow",children:["X","Y"].map((s,l)=>(0,De.jsxs)("label",{className:"se-vectorAxis",children:[(0,De.jsx)("span",{children:s}),(0,De.jsx)(y_,{value:t[l],min:n,max:i,step:r,onChange:c=>{let h=[...t];h[l]=c,o(h)}})]},s))})]})}var x_={free:0,starter:1,growth:2};function w_(e){return e==="starter"||e==="growth"||e==="scale"?e==="scale"?"growth":e:"free"}function Ai(e,t){return x_[e]>=x_[t]}var S_={free:"Free",starter:"Starter",growth:"Growth"};var __=require("lucide-react");var bd=require("react/jsx-runtime");function ir({requiredTier:e,feature:t}){return(0,bd.jsxs)("div",{className:"bb-tierLock",children:[(0,bd.jsx)(__.Lock,{size:16}),(0,bd.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",S_[e]," plan or higher."]})]})}var $=require("react/jsx-runtime"),PR=["lit","unlit","normals"],AR=["color","image","environment"];function M_(e){let t=e%360;return t<0?t+360:t}function Pl({title:e,open:t,onToggle:n,children:i,trailing:r}){return(0,$.jsxs)("section",{className:"se-panel",children:[(0,$.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:[(0,$.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,$.jsx)(la.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,$.jsx)("span",{className:"se-panelTitle",children:e})]}),r?(0,$.jsx)("span",{className:"se-panelTrailing",onClick:o=>o.stopPropagation(),children:r}):null]}),t?(0,$.jsx)("div",{className:"se-panelBody",children:i}):null]})}function Rg({config:e,onChange:t,materialVariantGroups:n=[]}){let{model:i,camera:r,wireframe:o,background:a,environment:s}=e,l=Wo(i),c=n.length>0?l.filter(d=>!n.some(S=>S.variants.some(C=>C.name===d))):[],{tier:h}=Rr(),p=Ai(h,"starter"),u=wl(),[m,f]=(0,C_.useState)({general:!0,camera:!0,autoRotate:!1,section:!1,wireframe:!1,background:!1}),g=d=>f(S=>({...S,[d]:!S[d]})),b=d=>t({...e,model:d}),y=d=>t({...e,camera:d}),v=e.section??Fa,w=d=>t({...e,section:{...v,...d}}),M=d=>t({...e,wireframe:d}),_=d=>t({...e,background:d}),x=d=>t({...e,environment:d}),P=d=>{x({...s,source:"preset",preset:d})};return(0,$.jsxs)("div",{className:"se-generalContent",children:[(0,$.jsxs)(Pl,{title:"General",open:m.general,onToggle:()=>g("general"),children:[(0,$.jsxs)("div",{className:"se-field",children:[(0,$.jsxs)("div",{className:"se-fieldLabel",children:[(0,$.jsx)("span",{children:"Straighten model"}),(0,$.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>b({...i,rotation:[0,0,0]}),"aria-label":"Reset model rotation",children:(0,$.jsx)(la.RotateCcw,{size:16})})]}),(0,$.jsx)("div",{className:"se-axisStepperGrid",children:["X","Y","Z"].map((d,S)=>(0,$.jsxs)("div",{className:"se-axisStepper",children:[(0,$.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let C=[...i.rotation];C[S]=M_(C[S]-90),b({...i,rotation:C})},"aria-label":`Rotate ${d} axis backward`,children:(0,$.jsx)(la.ChevronLeft,{size:16})}),(0,$.jsx)("span",{className:"se-axisStepperLabel",children:d}),(0,$.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let C=[...i.rotation];C[S]=M_(C[S]+90),b({...i,rotation:C})},"aria-label":`Rotate ${d} axis forward`,children:(0,$.jsx)(la.ChevronRight,{size:16})})]},d))})]}),(0,$.jsx)(sa,{label:"Rotation",value:i.rotation,min:0,max:360,step:1,onChange:d=>b({...i,rotation:d})}),(0,$.jsxs)("div",{className:"se-field",children:[(0,$.jsx)("span",{className:"se-fieldLabel",children:"Renderer"}),(0,$.jsx)("div",{className:"se-segmentedControl se-segmentedControl--renderer",children:Lx.map(d=>(0,$.jsx)("button",{type:"button",className:`se-segmentedOption ${i.renderer===d?"se-segmentedOption--active":""}`,onClick:()=>b({...i,renderer:d}),children:d==="uv-checker"?"UV CHECKER":d.toUpperCase()},d))})]}),(0,$.jsx)(jr,{label:"Shading",value:i.shading,options:PR,onChange:d=>b({...i,shading:d})}),n.map((d,S)=>{let C=l.find(T=>d.variants.some(E=>E.name===T));return(0,$.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,$.jsx)("span",{className:"se-fieldLabel",children:d.name??"Material variant"}),(0,$.jsxs)("select",{className:"se-select",value:C??"",onChange:T=>{let E=T.target.value,k=l.filter(D=>D!==C);b(sl(i,E?Gu(k,E,n):k))},children:[(0,$.jsx)("option",{value:"",children:"Model default"}),d.variants.map(T=>(0,$.jsx)("option",{value:T.name,children:T.label},T.name))]})]},d.name??`group-${S}`)}),c.length>0?(0,$.jsxs)("div",{className:"se-placeholder se-placeholder--spaced",children:["Not in this model: ",c.join(", "),"."," ",(0,$.jsx)("button",{type:"button",className:"se-linkButton",onClick:()=>b(sl(i,l.filter(d=>!c.includes(d)))),children:"Remove"})]}):null]}),(0,$.jsx)(Pl,{title:"Camera",open:m.camera,onToggle:()=>g("camera"),children:(0,$.jsx)(q,{label:"Field Of View",value:r.fieldOfView,min:20,max:100,step:.1,formatValue:d=>`${d.toFixed(3)}\xB0`,onChange:d=>y({...r,fieldOfView:d})})}),(0,$.jsxs)(Pl,{title:"Auto Rotate",open:m.autoRotate,onToggle:()=>g("autoRotate"),trailing:(0,$.jsxs)("label",{className:"se-switch","aria-label":"Toggle auto rotate",children:[(0,$.jsx)("input",{type:"checkbox",checked:i.autoRotate??!1,onChange:d=>b({...i,autoRotate:d.target.checked})}),(0,$.jsx)("span",{className:"se-switchTrack",children:(0,$.jsx)("span",{className:"se-switchThumb"})})]}),children:[i.autoRotate&&u?(0,$.jsx)("div",{className:"se-placeholder se-placeholder--spaced",children:"Your device is set to reduce motion, so this preview won't turn. Visitors without that setting will see it."}):null,i.autoRotate?(0,$.jsx)(q,{label:"Rotation Speed",value:i.autoRotateSpeed??1,min:.1,max:3,step:.1,formatValue:d=>`${d.toFixed(1)}x`,onChange:d=>b({...i,autoRotateSpeed:d})}):(0,$.jsx)("div",{className:"se-placeholder",children:"Enable auto rotate to adjust its speed."})]}),(0,$.jsx)(Pl,{title:"Section Cut",open:m.section,onToggle:()=>g("section"),trailing:(0,$.jsxs)("label",{className:"se-switch","aria-label":"Toggle section cut",children:[(0,$.jsx)("input",{type:"checkbox",checked:v.enabled,onChange:d=>w({enabled:d.target.checked})}),(0,$.jsx)("span",{className:"se-switchTrack",children:(0,$.jsx)("span",{className:"se-switchThumb"})})]}),children:v.enabled?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)("div",{className:"se-field",children:[(0,$.jsx)("span",{className:"se-fieldLabel",children:"Cut across"}),(0,$.jsx)("div",{className:"se-segmentedControl",children:Iu.map(d=>(0,$.jsx)("button",{type:"button",className:`se-segmentedOption ${v.axis===d?"se-segmentedOption--active":""}`,onClick:()=>w({axis:d}),children:d.toUpperCase()},d))})]}),(0,$.jsx)(q,{label:"Position",value:v.position,min:0,max:1,step:.01,formatValue:d=>`${Math.round(d*100)}%`,onChange:d=>w({position:d})}),(0,$.jsx)(Tt,{label:"Keep the other side",checked:v.flip,onChange:d=>w({flip:d})})]}):(0,$.jsx)("div",{className:"se-placeholder",children:"Cut the model open to see inside. Drag the plane in the preview, or set it here."})}),(0,$.jsx)(Pl,{title:"Wireframe",open:m.wireframe,onToggle:()=>g("wireframe"),trailing:(0,$.jsxs)("label",{className:"se-switch","aria-label":"Toggle wireframe preview",children:[(0,$.jsx)("input",{type:"checkbox",checked:p&&o.enabled,disabled:!p,onChange:d=>M({...o,enabled:d.target.checked})}),(0,$.jsx)("span",{className:"se-switchTrack",children:(0,$.jsx)("span",{className:"se-switchThumb"})})]}),children:p?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(q,{label:"Opacity",value:o.opacity,min:0,max:1,step:.01,onChange:d=>M({...o,opacity:d})}),(0,$.jsx)(kr,{label:"Wire color",value:o.color,onChange:d=>M({...o,color:d})})]}):(0,$.jsx)(ir,{requiredTier:"starter",feature:"Wireframe preview"})}),(0,$.jsx)(Pl,{title:"Background",open:m.background,onToggle:()=>g("background"),trailing:(0,$.jsxs)("label",{className:"se-switch","aria-label":"Toggle scene background",children:[(0,$.jsx)("input",{type:"checkbox",checked:a.enabled,onChange:d=>_({...a,enabled:d.target.checked})}),(0,$.jsx)("span",{className:"se-switchTrack",children:(0,$.jsx)("span",{className:"se-switchThumb"})})]}),children:a.enabled?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)("div",{className:"se-field",children:[(0,$.jsx)("span",{className:"se-fieldLabel",children:"Background type"}),(0,$.jsx)("div",{className:"se-segmentedControl",children:AR.map(d=>(0,$.jsx)("button",{type:"button",className:`se-segmentedOption ${a.type===d?"se-segmentedOption--active":""}`,onClick:()=>_({...a,type:d}),children:d},d))})]}),a.type==="environment"?p?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)("div",{className:"se-field",children:[(0,$.jsx)("span",{className:"se-fieldLabel",children:"Environment source"}),(0,$.jsxs)("div",{className:"se-segmentedControl",children:[(0,$.jsx)("button",{type:"button",className:`se-segmentedOption ${s.source==="preset"?"se-segmentedOption--active":""}`,onClick:()=>x({...s,source:"preset"}),children:"PRESET"}),(0,$.jsx)("button",{type:"button",className:`se-segmentedOption ${s.source==="custom"?"se-segmentedOption--active":""}`,onClick:()=>x({...s,source:"custom"}),children:"CUSTOM"})]})]}),s.source==="preset"?(0,$.jsx)(jr,{label:"Environment preset",value:s.preset,options:Dx,onChange:P}):(0,$.jsxs)("label",{className:"se-field",children:[(0,$.jsx)("span",{className:"se-fieldLabel",children:"Custom environment URL"}),(0,$.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/environment.hdr",value:s.customEnvironmentUrl,onChange:d=>x({...s,customEnvironmentUrl:d.target.value})}),(0,$.jsx)("span",{className:"bb-note",children:"Enter a HDR, EXR, JPG, JPEG, PNG, or WEBP URL."}),s.customEnvironmentUrl.trim()&&!Ou(s.customEnvironmentUrl)?(0,$.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"Invalid image/HDRI URL."}):null]}),(0,$.jsx)(q,{label:"Environment intensity",value:s.intensity,min:0,max:3,step:.05,onChange:d=>x({...s,intensity:d})})]}):(0,$.jsx)(ir,{requiredTier:"starter",feature:"Environment backgrounds"}):null,a.type==="image"?(0,$.jsxs)("label",{className:"se-field",children:[(0,$.jsx)("span",{className:"se-fieldLabel",children:"Background image URL"}),(0,$.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/background.jpg",value:a.imageUrl,onChange:d=>_({...a,imageUrl:d.target.value})})]}):null,a.type==="color"?(0,$.jsxs)("div",{className:"se-field",children:[(0,$.jsx)("span",{className:"se-fieldLabel",children:"Background color"}),(0,$.jsx)("div",{className:"se-inlineColorPicker",children:(0,$.jsx)(gm.HexColorPicker,{color:a.color,onChange:d=>_({...a,color:d})})}),(0,$.jsx)("div",{className:"se-fieldInline",children:(0,$.jsx)(gm.HexColorInput,{prefixed:!0,className:"se-swatch",style:{background:a.color,color:aa(a.color)},color:a.color,onChange:d=>_({...a,color:d})})})]}):null]}):(0,$.jsx)("div",{className:"se-placeholder",children:"Background rendering is disabled for this scene preset."})})]})}var Y_=require("react");var ye=require("react/jsx-runtime");function T_({pp:e,set:t,open:n,toggle:i}){let{ssao:r}=e;return(0,ye.jsxs)(xt,{title:"SSAO",tooltip:"Adds soft contact shadows in corners, creases, and tight spaces.",open:n.ssao,onToggle:()=>i("ssao"),disabled:!r.enabled,trailing:(0,ye.jsx)(At,{checked:r.enabled,onChange:o=>t("ssao",{...r,enabled:o}),label:"Toggle SSAO"}),children:[(0,ye.jsx)(q,{label:"Samples",value:r.samples,min:1,max:64,step:1,onChange:o=>t("ssao",{...r,samples:o})}),(0,ye.jsx)(q,{label:"Rings",value:r.rings,min:1,max:12,step:1,onChange:o=>t("ssao",{...r,rings:o})}),(0,ye.jsx)(q,{label:"Intensity",value:r.intensity,min:0,max:20,step:.5,onChange:o=>t("ssao",{...r,intensity:o})}),(0,ye.jsx)(q,{label:"Radius",value:r.radius,min:.01,max:1,step:.01,onChange:o=>t("ssao",{...r,radius:o})}),(0,ye.jsx)(q,{label:"Bias",value:r.bias,min:0,max:.1,step:.001,onChange:o=>t("ssao",{...r,bias:o})}),(0,ye.jsx)(q,{label:"Luminance Influence",value:r.luminanceInfluence,min:0,max:1,step:.01,onChange:o=>t("ssao",{...r,luminanceInfluence:o})}),(0,ye.jsx)(q,{label:"Fade",value:r.fade,min:0,max:.1,step:.001,onChange:o=>t("ssao",{...r,fade:o})}),(0,ye.jsx)(q,{label:"Min Radius Scale",value:r.minRadiusScale,min:0,max:1,step:.01,onChange:o=>t("ssao",{...r,minRadiusScale:o})}),(0,ye.jsx)(q,{label:"World Distance Threshold",value:r.worldDistanceThreshold,min:0,max:100,step:.1,onChange:o=>t("ssao",{...r,worldDistanceThreshold:o})}),(0,ye.jsx)(q,{label:"World Distance Falloff",value:r.worldDistanceFalloff,min:0,max:20,step:.1,onChange:o=>t("ssao",{...r,worldDistanceFalloff:o})}),(0,ye.jsx)(q,{label:"World Proximity Threshold",value:r.worldProximityThreshold,min:0,max:100,step:.1,onChange:o=>t("ssao",{...r,worldProximityThreshold:o})}),(0,ye.jsx)(q,{label:"World Proximity Falloff",value:r.worldProximityFalloff,min:0,max:20,step:.1,onChange:o=>t("ssao",{...r,worldProximityFalloff:o})})]})}function P_({pp:e,set:t,open:n,toggle:i}){let{autofocus:r}=e;return(0,ye.jsxs)(xt,{title:"Auto focus",tooltip:"Keeps the focus plane tracking a subject so the image stays sharp where you want it.",open:n.autofocus,onToggle:()=>i("autofocus"),disabled:!r.enabled,trailing:(0,ye.jsx)(At,{checked:r.enabled,onChange:o=>t("autofocus",{...r,enabled:o}),label:"Toggle Autofocus"}),children:[(0,ye.jsx)(q,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:o=>t("autofocus",{...r,focusDistance:o})}),(0,ye.jsx)(q,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:o=>t("autofocus",{...r,focusRange:o})}),(0,ye.jsx)(q,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:o=>t("autofocus",{...r,focalLength:o})}),(0,ye.jsx)(q,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:o=>t("autofocus",{...r,bokehScale:o})}),(0,ye.jsx)(sa,{label:"Target",value:r.target,min:-100,max:100,step:.1,onChange:o=>t("autofocus",{...r,target:o})}),(0,ye.jsx)(Tt,{label:"Mouse Follow",checked:r.mouse,onChange:o=>t("autofocus",{...r,mouse:o})}),(0,ye.jsx)(Tt,{label:"Manual Update",checked:r.manual,onChange:o=>t("autofocus",{...r,manual:o})}),(0,ye.jsx)(q,{label:"Debug",value:r.debug,min:0,max:1,step:.01,onChange:o=>t("autofocus",{...r,debug:o})}),(0,ye.jsx)(q,{label:"Smooth Time",value:r.smoothTime,min:0,max:2,step:.01,onChange:o=>t("autofocus",{...r,smoothTime:o})})]})}function A_({pp:e,set:t,open:n,toggle:i}){let{godRays:r}=e;return(0,ye.jsxs)(xt,{title:"God Rays",tooltip:"Creates light shafts that streak outward from a bright sun or light source.",open:n.godRays,onToggle:()=>i("godRays"),disabled:!r.enabled,trailing:(0,ye.jsx)(At,{checked:r.enabled,onChange:o=>t("godRays",{...r,enabled:o}),label:"Toggle GodRays"}),children:[(0,ye.jsx)(sa,{label:"Sun Position",value:r.sunPosition,min:-100,max:100,step:.1,onChange:o=>t("godRays",{...r,sunPosition:o})}),(0,ye.jsx)(q,{label:"Samples",value:r.samples,min:1,max:128,step:1,onChange:o=>t("godRays",{...r,samples:o})}),(0,ye.jsx)(q,{label:"Density",value:r.density,min:0,max:2,step:.01,onChange:o=>t("godRays",{...r,density:o})}),(0,ye.jsx)(q,{label:"Decay",value:r.decay,min:0,max:1,step:.01,onChange:o=>t("godRays",{...r,decay:o})}),(0,ye.jsx)(q,{label:"Weight",value:r.weight,min:0,max:2,step:.01,onChange:o=>t("godRays",{...r,weight:o})}),(0,ye.jsx)(q,{label:"Exposure",value:r.exposure,min:0,max:2,step:.01,onChange:o=>t("godRays",{...r,exposure:o})}),(0,ye.jsx)(q,{label:"Clamp Max",value:r.clampMax,min:0,max:2,step:.01,onChange:o=>t("godRays",{...r,clampMax:o})}),(0,ye.jsx)(Tt,{label:"Blur",checked:r.blur,onChange:o=>t("godRays",{...r,blur:o})}),(0,ye.jsx)(jr,{label:"Kernel Size",value:r.kernelSize,options:_c,onChange:o=>t("godRays",{...r,kernelSize:o})})]})}function E_({pp:e,set:t,open:n,toggle:i}){let{lensflare:r}=e;return(0,ye.jsxs)(xt,{title:"Lens Flare",tooltip:"Adds camera flare artifacts and glow from a bright light source.",open:n.lensflare,onToggle:()=>i("lensflare"),disabled:!r.enabled,trailing:(0,ye.jsx)(At,{checked:r.enabled,onChange:o=>t("lensflare",{...r,enabled:o}),label:"Toggle Lensflare"}),children:[(0,ye.jsx)(sa,{label:"Lens Position",value:r.lensPosition,min:-100,max:100,step:.1,onChange:o=>t("lensflare",{...r,lensPosition:o})}),(0,ye.jsx)(q,{label:"Smooth Time",value:r.smoothTime,min:0,max:1,step:.01,onChange:o=>t("lensflare",{...r,smoothTime:o})}),(0,ye.jsx)(q,{label:"Glare Size",value:r.glareSize,min:0,max:1,step:.01,onChange:o=>t("lensflare",{...r,glareSize:o})}),(0,ye.jsx)(q,{label:"Flare Size",value:r.flareSize,min:0,max:.1,step:.001,onChange:o=>t("lensflare",{...r,flareSize:o})}),(0,ye.jsx)(q,{label:"Flare Speed",value:r.flareSpeed,min:0,max:.2,step:.001,onChange:o=>t("lensflare",{...r,flareSpeed:o})}),(0,ye.jsx)(q,{label:"Flare Shape",value:r.flareShape,min:0,max:.2,step:.001,onChange:o=>t("lensflare",{...r,flareShape:o})}),(0,ye.jsx)(Tt,{label:"Animated",checked:r.animated,onChange:o=>t("lensflare",{...r,animated:o})}),(0,ye.jsx)(Tt,{label:"Anamorphic",checked:r.anamorphic,onChange:o=>t("lensflare",{...r,anamorphic:o})}),(0,ye.jsx)(kr,{label:"Color Gain",value:r.colorGain,onChange:o=>t("lensflare",{...r,colorGain:o})}),(0,ye.jsx)(q,{label:"Halo Scale",value:r.haloScale,min:0,max:2,step:.01,onChange:o=>t("lensflare",{...r,haloScale:o})}),(0,ye.jsx)(Tt,{label:"Secondary Ghosts",checked:r.secondaryGhosts,onChange:o=>t("lensflare",{...r,secondaryGhosts:o})}),(0,ye.jsx)(Tt,{label:"Additional Streaks",checked:r.aditionalStreaks,onChange:o=>t("lensflare",{...r,aditionalStreaks:o})}),(0,ye.jsx)(q,{label:"Ghost Scale",value:r.ghostScale,min:0,max:1,step:.01,onChange:o=>t("lensflare",{...r,ghostScale:o})}),(0,ye.jsx)(q,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:o=>t("lensflare",{...r,opacity:o})}),(0,ye.jsx)(Tt,{label:"Star Burst",checked:r.starBurst,onChange:o=>t("lensflare",{...r,starBurst:o})})]})}function R_({pp:e,set:t,open:n,toggle:i}){let{depthOfField:r}=e;return(0,ye.jsxs)(xt,{title:"Depth Of Field",tooltip:"Blurs areas that sit away from the focal plane for a camera-like look.",open:n.depthOfField,onToggle:()=>i("depthOfField"),disabled:!r.enabled,trailing:(0,ye.jsx)(At,{checked:r.enabled,onChange:o=>t("depthOfField",{...r,enabled:o}),label:"Toggle DepthOfField"}),children:[(0,ye.jsx)(q,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:o=>t("depthOfField",{...r,focusDistance:o})}),(0,ye.jsx)(q,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:o=>t("depthOfField",{...r,focusRange:o})}),(0,ye.jsx)(q,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:o=>t("depthOfField",{...r,focalLength:o})}),(0,ye.jsx)(q,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:o=>t("depthOfField",{...r,bokehScale:o})})]})}var qe=require("react/jsx-runtime"),ER=["linear","reinhard","aces"];function k_({pp:e,set:t,open:n,toggle:i}){let{colorAverage:r}=e;return(0,qe.jsx)(xt,{title:"Color Average",tooltip:"Blends the frame toward a single average color for a washed-out stylized look.",open:n.colorAverage,onToggle:()=>i("colorAverage"),disabled:!r.enabled,trailing:(0,qe.jsx)(At,{checked:r.enabled,onChange:o=>t("colorAverage",{...r,enabled:o}),label:"Toggle ColorAverage"}),children:(0,qe.jsx)("div",{className:"se-placeholder",children:"Averages the frame color using the docs default blend mode."})})}function L_({pp:e,set:t,open:n,toggle:i}){let{brightnessContrast:r}=e;return(0,qe.jsxs)(xt,{title:"Brightness Contrast",tooltip:"Raises or lowers overall brightness and contrast across the scene.",open:n.brightnessContrast,onToggle:()=>i("brightnessContrast"),disabled:!r.enabled,trailing:(0,qe.jsx)(At,{checked:r.enabled,onChange:o=>t("brightnessContrast",{...r,enabled:o}),label:"Toggle BrightnessContrast"}),children:[(0,qe.jsx)(q,{label:"Brightness",value:r.brightness,min:-1,max:1,step:.01,onChange:o=>t("brightnessContrast",{...r,brightness:o})}),(0,qe.jsx)(q,{label:"Contrast",value:r.contrast,min:-1,max:1,step:.01,onChange:o=>t("brightnessContrast",{...r,contrast:o})})]})}function D_({pp:e,set:t,open:n,toggle:i}){let{hueSaturation:r}=e;return(0,qe.jsxs)(xt,{title:"Hue Saturation",tooltip:"Shifts the hue and saturation to tint the whole image.",open:n.hueSaturation,onToggle:()=>i("hueSaturation"),disabled:!r.enabled,trailing:(0,qe.jsx)(At,{checked:r.enabled,onChange:o=>t("hueSaturation",{...r,enabled:o}),label:"Toggle HueSaturation"}),children:[(0,qe.jsx)(q,{label:"Hue",value:r.hue,min:-Math.PI,max:Math.PI,step:.01,formatValue:o=>`${o.toFixed(2)} rad`,onChange:o=>t("hueSaturation",{...r,hue:o})}),(0,qe.jsx)(q,{label:"Saturation",value:r.saturation,min:-1,max:1,step:.01,onChange:o=>t("hueSaturation",{...r,saturation:o})})]})}function N_({pp:e,set:t,open:n,toggle:i}){let{vignette:r}=e;return(0,qe.jsxs)(xt,{title:"Vignette",tooltip:"Darkens the edges of the screen so the center feels more focused.",open:n.vignette,onToggle:()=>i("vignette"),disabled:!r.enabled,trailing:(0,qe.jsx)(At,{checked:r.enabled,onChange:o=>t("vignette",{...r,enabled:o}),label:"Toggle Vignette"}),children:[(0,qe.jsx)(q,{label:"Offset",value:r.offset,min:0,max:1,step:.01,onChange:o=>t("vignette",{...r,offset:o})}),(0,qe.jsx)(q,{label:"Darkness",value:r.darkness,min:0,max:1,step:.01,onChange:o=>t("vignette",{...r,darkness:o})}),(0,qe.jsx)(Tt,{label:"Eskil",checked:r.eskil,onChange:o=>t("vignette",{...r,eskil:o})})]})}function O_({pp:e,set:t,open:n,toggle:i}){let{bloom:r}=e;return(0,qe.jsxs)(xt,{title:"Bloom",tooltip:"Makes bright areas glow and bleed softly into nearby pixels.",open:n.bloom,onToggle:()=>i("bloom"),disabled:!r.enabled,trailing:(0,qe.jsx)(At,{checked:r.enabled,onChange:o=>t("bloom",{...r,enabled:o}),label:"Toggle Bloom"}),children:[(0,qe.jsx)(q,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:o=>t("bloom",{...r,luminanceThreshold:o})}),(0,qe.jsx)(q,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:o=>t("bloom",{...r,luminanceSmoothing:o})}),(0,qe.jsx)(q,{label:"Intensity",value:r.intensity,min:0,max:3,step:.05,onChange:o=>t("bloom",{...r,intensity:o})}),(0,qe.jsx)(Tt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:o=>t("bloom",{...r,mipmapBlur:o})}),(0,qe.jsx)(q,{label:"Radius",value:r.radius,min:0,max:1,step:.01,onChange:o=>t("bloom",{...r,radius:o})}),(0,qe.jsx)(q,{label:"Levels",value:r.levels,min:1,max:16,step:1,onChange:o=>t("bloom",{...r,levels:o})})]})}function I_({pp:e,set:t,open:n,toggle:i}){let{toneMapping:r}=e;return(0,qe.jsxs)(xt,{title:"Tone Mapping",tooltip:"Remaps HDR lighting to screen output and controls exposure style.",open:n.toneMapping,onToggle:()=>i("toneMapping"),disabled:!r.enabled,trailing:(0,qe.jsx)(At,{checked:r.enabled,onChange:o=>t("toneMapping",{...r,enabled:o}),label:"Toggle ToneMapping"}),children:[(0,qe.jsxs)("div",{className:"se-field",children:[(0,qe.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,qe.jsx)("div",{className:"se-segmentedControl",children:ER.map(o=>(0,qe.jsx)("button",{type:"button",className:`se-segmentedOption ${r.mode===o?"se-segmentedOption--active":""}`,onClick:()=>t("toneMapping",{...r,mode:o}),children:o==="aces"?"Filmic":o.charAt(0).toUpperCase()+o.slice(1)},o))})]}),(0,qe.jsx)(q,{label:"Resolution",value:r.resolution,min:64,max:4096,step:64,onChange:o=>t("toneMapping",{...r,resolution:o})}),(0,qe.jsx)(q,{label:"White Point",value:r.whitePoint,min:0,max:16,step:.01,onChange:o=>t("toneMapping",{...r,whitePoint:o})}),(0,qe.jsx)(q,{label:"Middle Grey",value:r.middleGrey,min:0,max:1,step:.01,onChange:o=>t("toneMapping",{...r,middleGrey:o})}),(0,qe.jsx)(q,{label:"Min Luminance",value:r.minLuminance,min:0,max:1,step:.01,onChange:o=>t("toneMapping",{...r,minLuminance:o})}),(0,qe.jsx)(q,{label:"Average Luminance",value:r.averageLuminance,min:0,max:4,step:.01,onChange:o=>t("toneMapping",{...r,averageLuminance:o})}),(0,qe.jsx)(q,{label:"Adaptation Rate",value:r.adaptationRate,min:0,max:10,step:.01,onChange:o=>t("toneMapping",{...r,adaptationRate:o})}),(0,qe.jsx)(q,{label:"Exposure",value:r.exposure,min:0,max:3,step:.01,onChange:o=>t("toneMapping",{...r,exposure:o})})]})}function B_({pp:e,set:t,open:n,toggle:i}){let{sepia:r}=e;return(0,qe.jsx)(xt,{title:"Sepia",tooltip:"Adds a warm vintage brown tint to the entire image.",open:n.sepia,onToggle:()=>i("sepia"),disabled:!r.enabled,trailing:(0,qe.jsx)(At,{checked:r.enabled,onChange:o=>t("sepia",{...r,enabled:o}),label:"Toggle Sepia"}),children:(0,qe.jsx)(q,{label:"Intensity",value:r.intensity,min:0,max:1,step:.01,onChange:o=>t("sepia",{...r,intensity:o})})})}var Ve=require("react/jsx-runtime");function z_({pp:e,set:t,open:n,toggle:i}){let{dotScreen:r}=e;return(0,Ve.jsxs)(xt,{title:"Dot Screen",tooltip:"Overlays a halftone dot pattern for a printed or retro look.",open:n.dotScreen,onToggle:()=>i("dotScreen"),disabled:!r.enabled,trailing:(0,Ve.jsx)(At,{checked:r.enabled,onChange:o=>t("dotScreen",{...r,enabled:o}),label:"Toggle DotScreen"}),children:[(0,Ve.jsx)(q,{label:"Angle",value:r.angle,min:0,max:Math.PI*2,step:.01,formatValue:o=>`${o.toFixed(2)} rad`,onChange:o=>t("dotScreen",{...r,angle:o})}),(0,Ve.jsx)(q,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:o=>t("dotScreen",{...r,scale:o})})]})}function U_({pp:e,set:t,open:n,toggle:i}){let{glitch:r}=e;return(0,Ve.jsxs)(xt,{title:"Glitch",tooltip:"Introduces digital distortion, tearing, and scan noise.",open:n.glitch,onToggle:()=>i("glitch"),disabled:!r.enabled,trailing:(0,Ve.jsx)(At,{checked:r.enabled,onChange:o=>t("glitch",{...r,enabled:o}),label:"Toggle Glitch"}),children:[(0,Ve.jsx)(jr,{label:"Mode",value:r.mode,options:Nx,onChange:o=>t("glitch",{...r,mode:o})}),(0,Ve.jsx)(cs,{label:"Delay",value:r.delay,min:0,max:10,step:.01,onChange:o=>t("glitch",{...r,delay:o})}),(0,Ve.jsx)(cs,{label:"Duration",value:r.duration,min:0,max:5,step:.01,onChange:o=>t("glitch",{...r,duration:o})}),(0,Ve.jsx)(cs,{label:"Strength",value:r.strength,min:0,max:2,step:.01,onChange:o=>t("glitch",{...r,strength:o})}),(0,Ve.jsx)(cs,{label:"Chromatic Aberration Offset",value:r.chromaticAberrationOffset,min:0,max:.02,step:1e-4,onChange:o=>t("glitch",{...r,chromaticAberrationOffset:o})}),(0,Ve.jsx)(q,{label:"Columns",value:r.columns,min:0,max:.5,step:.001,onChange:o=>t("glitch",{...r,columns:o})}),(0,Ve.jsx)(q,{label:"Ratio",value:r.ratio,min:0,max:1,step:.01,onChange:o=>t("glitch",{...r,ratio:o})})]})}function V_({pp:e,set:t,open:n,toggle:i}){let{grid:r}=e;return(0,Ve.jsxs)(xt,{title:"Grid",tooltip:"Adds a visual grid overlay that feels retro or debug-like.",open:n.grid,onToggle:()=>i("grid"),disabled:!r.enabled,trailing:(0,Ve.jsx)(At,{checked:r.enabled,onChange:o=>t("grid",{...r,enabled:o}),label:"Toggle Grid"}),children:[(0,Ve.jsx)(q,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:o=>t("grid",{...r,scale:o})}),(0,Ve.jsx)(q,{label:"Line Width",value:r.lineWidth,min:0,max:1,step:.01,onChange:o=>t("grid",{...r,lineWidth:o})})]})}function F_({pp:e,set:t,open:n,toggle:i}){let{chromaticAberration:r}=e;return(0,Ve.jsxs)(xt,{title:"Chromatic Aberration",tooltip:"Separates color channels slightly to mimic lens fringing.",open:n.chromaticAberration,onToggle:()=>i("chromaticAberration"),disabled:!r.enabled,trailing:(0,Ve.jsx)(At,{checked:r.enabled,onChange:o=>t("chromaticAberration",{...r,enabled:o}),label:"Toggle ChromaticAberration"}),children:[(0,Ve.jsx)(q,{label:"Offset X",value:r.offsetX,min:0,max:.02,step:1e-4,onChange:o=>t("chromaticAberration",{...r,offsetX:o})}),(0,Ve.jsx)(q,{label:"Offset Y",value:r.offsetY,min:0,max:.02,step:1e-4,onChange:o=>t("chromaticAberration",{...r,offsetY:o})}),(0,Ve.jsx)(Tt,{label:"Radial Modulation",checked:r.radialModulation,onChange:o=>t("chromaticAberration",{...r,radialModulation:o})}),(0,Ve.jsx)(q,{label:"Modulation Offset",value:r.modulationOffset,min:0,max:1,step:.01,onChange:o=>t("chromaticAberration",{...r,modulationOffset:o})})]})}function j_({pp:e,set:t,open:n,toggle:i}){let{noise:r}=e;return(0,Ve.jsxs)(xt,{title:"Noise",tooltip:"Adds film grain or static noise to the rendered image.",open:n.noise,onToggle:()=>i("noise"),disabled:!r.enabled,trailing:(0,Ve.jsx)(At,{checked:r.enabled,onChange:o=>t("noise",{...r,enabled:o}),label:"Toggle Noise"}),children:[(0,Ve.jsx)(q,{label:"Amount",value:r.opacity,min:0,max:1,step:.01,onChange:o=>t("noise",{...r,opacity:o})}),(0,Ve.jsx)(Tt,{label:"Premultiply",checked:r.premultiply,onChange:o=>t("noise",{...r,premultiply:o})})]})}function G_({pp:e,set:t,open:n,toggle:i}){let{scanline:r}=e;return(0,Ve.jsx)(xt,{title:"Scan Line",tooltip:"Draws horizontal CRT-style scan lines over the frame.",open:n.scanline,onToggle:()=>i("scanline"),disabled:!r.enabled,trailing:(0,Ve.jsx)(At,{checked:r.enabled,onChange:o=>t("scanline",{...r,enabled:o}),label:"Toggle Scanline"}),children:(0,Ve.jsx)(q,{label:"Density",value:r.density,min:0,max:10,step:.25,onChange:o=>t("scanline",{...r,density:o})})})}function H_({pp:e,set:t,open:n,toggle:i}){let{pixelation:r}=e;return(0,Ve.jsx)(xt,{title:"Pixelation",tooltip:"Reduces detail into larger pixels for a blocky stylized effect.",open:n.pixelation,onToggle:()=>i("pixelation"),disabled:!r.enabled,trailing:(0,Ve.jsx)(At,{checked:r.enabled,onChange:o=>t("pixelation",{...r,enabled:o}),label:"Toggle Pixelation"}),children:(0,Ve.jsx)(q,{label:"Granularity",value:r.granularity,min:0,max:20,step:1,onChange:o=>t("pixelation",{...r,granularity:o})})})}function W_({pp:e,set:t,open:n,toggle:i}){let{ramp:r}=e;return(0,Ve.jsxs)(xt,{title:"Ramp",tooltip:"Adds a screen-space color gradient, or masks effects earlier in the stack.",open:n.ramp,onToggle:()=>i("ramp"),disabled:!r.enabled,trailing:(0,Ve.jsx)(At,{checked:r.enabled,onChange:o=>t("ramp",{...r,enabled:o}),label:"Toggle Ramp"}),children:[(0,Ve.jsx)(jr,{label:"Ramp Type",value:r.rampType,options:Ox,onChange:o=>t("ramp",{...r,rampType:o})}),(0,Ve.jsx)(cs,{label:"Ramp Start",value:r.rampStart,min:0,max:1,step:.01,onChange:o=>t("ramp",{...r,rampStart:o})}),(0,Ve.jsx)(cs,{label:"Ramp End",value:r.rampEnd,min:0,max:1,step:.01,onChange:o=>t("ramp",{...r,rampEnd:o})}),(0,Ve.jsx)(kr,{label:"Start Color",value:r.startColor,onChange:o=>t("ramp",{...r,startColor:o})}),(0,Ve.jsx)(kr,{label:"End Color",value:r.endColor,onChange:o=>t("ramp",{...r,endColor:o})}),!r.rampMask&&(0,Ve.jsx)(q,{label:"Gradient Opacity",value:r.opacity??.5,min:0,max:1,step:.01,onChange:o=>t("ramp",{...r,opacity:o})}),(0,Ve.jsx)(q,{label:"Bias",value:r.rampBias,min:0,max:1,step:.01,onChange:o=>t("ramp",{...r,rampBias:o})}),(0,Ve.jsx)(q,{label:"Gain",value:r.rampGain,min:0,max:1,step:.01,onChange:o=>t("ramp",{...r,rampGain:o})}),(0,Ve.jsx)(Tt,{label:"Mask Earlier Effects",checked:r.rampMask,onChange:o=>t("ramp",{...r,rampMask:o})}),(0,Ve.jsx)(Tt,{label:"Invert",checked:r.rampInvert,onChange:o=>t("ramp",{...r,rampInvert:o})})]})}var Kt=require("react/jsx-runtime");function X_({pp:e,set:t,open:n,toggle:i}){let{outline:r}=e;return(0,Kt.jsxs)(xt,{title:"Outline",tooltip:"Draws a visible edge around the selected object binding.",open:n.outline,onToggle:()=>i("outline"),disabled:!r.enabled,trailing:(0,Kt.jsx)(At,{checked:r.enabled,onChange:o=>t("outline",{...r,enabled:o}),label:"Toggle Outline"}),children:[(0,Kt.jsx)("div",{className:"se-placeholder",children:"Outlines the currently selected object binding in the model editor."}),(0,Kt.jsx)(q,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:o=>t("outline",{...r,selectionLayer:o})}),(0,Kt.jsx)(q,{label:"Edge Strength",value:r.edgeStrength,min:0,max:10,step:.1,onChange:o=>t("outline",{...r,edgeStrength:o})}),(0,Kt.jsx)(q,{label:"Pulse Speed",value:r.pulseSpeed,min:0,max:10,step:.1,onChange:o=>t("outline",{...r,pulseSpeed:o})}),(0,Kt.jsx)(kr,{label:"Visible Edge Color",value:r.visibleEdgeColor,onChange:o=>t("outline",{...r,visibleEdgeColor:o})}),(0,Kt.jsx)(kr,{label:"Hidden Edge Color",value:r.hiddenEdgeColor,onChange:o=>t("outline",{...r,hiddenEdgeColor:o})}),(0,Kt.jsx)(jr,{label:"Kernel Size",value:r.kernelSize,options:_c,onChange:o=>t("outline",{...r,kernelSize:o})}),(0,Kt.jsx)(Tt,{label:"Blur",checked:r.blur,onChange:o=>t("outline",{...r,blur:o})}),(0,Kt.jsx)(Tt,{label:"X-Ray",checked:r.xRay,onChange:o=>t("outline",{...r,xRay:o})})]})}function q_({pp:e,set:t,open:n,toggle:i}){let{selectiveBloom:r}=e;return(0,Kt.jsxs)(xt,{title:"Selective Bloom",tooltip:"Applies bloom only to objects assigned to the selected layer.",open:n.selectiveBloom,onToggle:()=>i("selectiveBloom"),disabled:!r.enabled,trailing:(0,Kt.jsx)(At,{checked:r.enabled,onChange:o=>t("selectiveBloom",{...r,enabled:o}),label:"Toggle SelectiveBloom"}),children:[(0,Kt.jsx)("div",{className:"se-placeholder",children:"Applies bloom to the currently selected object binding."}),(0,Kt.jsx)(q,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:o=>t("selectiveBloom",{...r,selectionLayer:o})}),(0,Kt.jsx)(q,{label:"Intensity",value:r.intensity,min:0,max:5,step:.05,onChange:o=>t("selectiveBloom",{...r,intensity:o})}),(0,Kt.jsx)(q,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:o=>t("selectiveBloom",{...r,luminanceThreshold:o})}),(0,Kt.jsx)(q,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:o=>t("selectiveBloom",{...r,luminanceSmoothing:o})}),(0,Kt.jsx)(jr,{label:"Kernel Size",value:r.kernelSize,options:_c,onChange:o=>t("selectiveBloom",{...r,kernelSize:o})}),(0,Kt.jsx)(Tt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:o=>t("selectiveBloom",{...r,mipmapBlur:o})}),(0,Kt.jsx)(Tt,{label:"Inverted",checked:r.inverted,onChange:o=>t("selectiveBloom",{...r,inverted:o})}),(0,Kt.jsx)(Tt,{label:"Ignore Background",checked:r.ignoreBackground,onChange:o=>t("selectiveBloom",{...r,ignoreBackground:o})})]})}function $_({pp:e,set:t,open:n,toggle:i}){let{smaa:r}=e;return(0,Kt.jsx)(xt,{title:"SMAA",tooltip:"Reduces jagged edges with subpixel anti-aliasing.",open:n.smaa,onToggle:()=>i("smaa"),trailing:(0,Kt.jsx)(At,{checked:r.enabled,onChange:o=>t("smaa",{...r,enabled:o}),label:"Toggle SMAA"}),children:(0,Kt.jsx)("div",{className:"se-placeholder",children:"Subpixel Morphological Anti-Aliasing smooths jagged edges in post-process."})})}var Jt=require("react/jsx-runtime");function kg({config:e,onChange:t}){let[n,i]=(0,Y_.useState)({autofocus:!1,colorAverage:!1,dotScreen:!1,glitch:!1,godRays:!1,grid:!1,lensflare:!1,outline:!1,selectiveBloom:!1,ramp:!1,ssao:!1,brightnessContrast:!1,hueSaturation:!1,depthOfField:!1,chromaticAberration:!1,vignette:!1,bloom:!1,toneMapping:!1,noise:!1,sepia:!1,scanline:!1,pixelation:!1,smaa:!1}),r=l=>i(c=>({...c,[l]:!c[l]})),o=e.postProcessing,s={pp:o,set:(l,c)=>t({...e,postProcessing:{...o,[l]:c}}),open:n,toggle:r};return(0,Jt.jsxs)("div",{className:"se-generalContent",children:[(0,Jt.jsx)(T_,{...s}),(0,Jt.jsx)(P_,{...s}),(0,Jt.jsx)(k_,{...s}),(0,Jt.jsx)(z_,{...s}),(0,Jt.jsx)(U_,{...s}),(0,Jt.jsx)(A_,{...s}),(0,Jt.jsx)(V_,{...s}),(0,Jt.jsx)(E_,{...s}),(0,Jt.jsx)(X_,{...s}),(0,Jt.jsx)(q_,{...s}),(0,Jt.jsx)(L_,{...s}),(0,Jt.jsx)(D_,{...s}),(0,Jt.jsx)(R_,{...s}),(0,Jt.jsx)(F_,{...s}),(0,Jt.jsx)(N_,{...s}),(0,Jt.jsx)(O_,{...s}),(0,Jt.jsx)(I_,{...s}),(0,Jt.jsx)(j_,{...s}),(0,Jt.jsx)(B_,{...s}),(0,Jt.jsx)(G_,{...s}),(0,Jt.jsx)(H_,{...s}),(0,Jt.jsx)(W_,{...s}),(0,Jt.jsx)($_,{...s})]})}var vd=require("react"),ca=require("lucide-react");var xe=require("react/jsx-runtime"),RR=["512","1024","2048","4096"],K_={none:"None",directional:"Direction",point:"Point",spot:"Spot",hemisphere:"Hemi"};function kR({index:e,light:t,selected:n,onSelect:i,onToggleVisible:r}){return(0,xe.jsxs)("div",{className:`se-lightRow ${n?"se-lightRow--active":""}`,onClick:i,children:[(0,xe.jsxs)("span",{className:"se-lightRowLabel",children:[e+1,": ",K_[t.type]]}),(0,xe.jsx)("button",{type:"button",className:"se-iconButton","aria-label":t.visible?"Hide light":"Show light",onClick:o=>{o.stopPropagation(),r()},children:t.visible?(0,xe.jsx)(ca.Eye,{size:14}):(0,xe.jsx)(ca.EyeOff,{size:14})})]})}function LR(){return{id:crypto.randomUUID(),type:"directional",color:"#ffffff",intensity:1,position:[5,10,5],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}}function Lg({config:e,onChange:t}){let[n,i]=(0,vd.useState)({lights:!0,shadows:!1,groundShadows:!1,environment:!1,envShadow:!1}),r=(0,vd.useSyncExternalStore)(_g,$p),[o,a]=(0,vd.useState)(e.lighting.lights[0]?.id??null),s=r??o,l=d=>{a(d),ld(d)},c=d=>i(S=>({...S,[d]:!S[d]})),{tier:h}=Rr(),p=Ai(h,"starter"),{lighting:u,shadows:m,groundShadows:f,environment:g}=e,b=d=>t({...e,lighting:d}),y=d=>t({...e,shadows:d}),v=d=>t({...e,groundShadows:d}),w=d=>t({...e,environment:d}),M=(d,S)=>{b({...u,lights:u.lights.map(C=>C.id===d?{...C,...S}:C)})},_=u.lights.find(d=>d.id===s)??null,x=()=>{let d=LR();b({...u,lights:[...u.lights,d]}),l(d.id)},P=()=>{if(!_)return;let d=u.lights.filter(S=>S.id!==_.id);b({...u,lights:d}),l(d[0]?.id??null)};return(0,xe.jsxs)("div",{className:"se-generalContent",children:[(0,xe.jsxs)(xt,{title:"Lights",open:n.lights,onToggle:()=>c("lights"),children:[(0,xe.jsx)("div",{className:"se-lightList",children:u.lights.map((d,S)=>(0,xe.jsx)(kR,{index:S,light:d,selected:d.id===s,onSelect:()=>l(d.id),onToggleVisible:()=>M(d.id,{visible:!d.visible})},d.id))}),(0,xe.jsxs)("div",{className:"se-lightActions",children:[(0,xe.jsx)("button",{type:"button",className:"se-iconButton",onClick:x,title:"Add light",children:(0,xe.jsx)(ca.Plus,{size:14})}),_&&u.lights.length>1&&(0,xe.jsx)("button",{type:"button",className:"se-iconButton",onClick:P,title:"Remove selected light",children:(0,xe.jsx)(ca.Trash2,{size:14})})]}),_?(0,xe.jsxs)("div",{className:"se-lightProps",children:[(0,xe.jsxs)("div",{className:"se-field",children:[(0,xe.jsx)("span",{className:"se-fieldLabel",children:"Type"}),(0,xe.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:kx.map(d=>(0,xe.jsx)("button",{type:"button",className:`se-segmentedOption ${_.type===d?"se-segmentedOption--active":""}`,onClick:()=>M(_.id,{type:d}),children:K_[d]},d))})]}),(0,xe.jsx)(kr,{label:"Color",value:_.color,onChange:d=>M(_.id,{color:d})}),(0,xe.jsx)(q,{label:"Intensity",value:_.intensity,min:0,max:10,step:.1,onChange:d=>M(_.id,{intensity:d})}),_.type!=="hemisphere"&&_.type!=="none"&&(0,xe.jsx)(sa,{label:"Position",value:_.position,min:-100,max:100,step:.05,onChange:d=>M(_.id,{position:d})}),_.type==="spot"&&(0,xe.jsxs)(xe.Fragment,{children:[(0,xe.jsx)(q,{label:"Angle",value:_.angle??Math.PI/6,min:0,max:Math.PI/2,step:.01,formatValue:d=>`${Math.round(d*180/Math.PI)}\xB0`,onChange:d=>M(_.id,{angle:d})}),(0,xe.jsx)(q,{label:"Penumbra",value:_.penumbra??.2,min:0,max:1,step:.01,onChange:d=>M(_.id,{penumbra:d})}),(0,xe.jsx)(q,{label:"Distance",value:_.distance??0,min:0,max:100,step:.5,onChange:d=>M(_.id,{distance:d})}),(0,xe.jsx)(q,{label:"Decay",value:_.decay??2,min:0,max:4,step:.1,onChange:d=>M(_.id,{decay:d})})]}),(0,xe.jsx)(Tt,{label:"Attached to camera",checked:_.attachedToCamera,onChange:d=>M(_.id,{attachedToCamera:d})}),(0,xe.jsx)(Tt,{label:"Cast shadows",checked:_.castShadow,onChange:d=>M(_.id,{castShadow:d})}),(0,xe.jsx)(q,{label:"Shadow bias",value:_.shadowBias,min:-.01,max:.01,step:1e-4,onChange:d=>M(_.id,{shadowBias:d})})]}):null]}),(0,xe.jsxs)(xt,{title:"Shadows",open:n.shadows,onToggle:()=>c("shadows"),disabled:!m.enabled,trailing:(0,xe.jsx)(At,{checked:m.enabled,onChange:d=>y({...m,enabled:d}),label:"Toggle shadows"}),children:[(0,xe.jsx)(jr,{label:"Map size",value:String(m.mapSize),options:RR,onChange:d=>y({...m,mapSize:Number(d)})}),(0,xe.jsx)(q,{label:"Bias",value:m.bias,min:-.01,max:.01,step:1e-4,onChange:d=>y({...m,bias:d})}),(0,xe.jsx)(q,{label:"Normal bias",value:m.normalBias,min:0,max:.2,step:.01,onChange:d=>y({...m,normalBias:d})}),(0,xe.jsx)(q,{label:"Radius (softness)",value:m.radius,min:0,max:20,step:.5,onChange:d=>y({...m,radius:d})})]}),(0,xe.jsxs)(xt,{title:"Ground Shadows",open:n.groundShadows,onToggle:()=>c("groundShadows"),disabled:!f.enabled,trailing:(0,xe.jsx)(At,{checked:f.enabled,onChange:d=>v({...f,enabled:d}),label:"Toggle ground shadows"}),children:[(0,xe.jsxs)("div",{className:"se-field",children:[(0,xe.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,xe.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:["shadowCatcher"].map(d=>(0,xe.jsx)("button",{type:"button",className:`se-segmentedOption ${f.mode===d?"se-segmentedOption--active":""}`,onClick:()=>v({...f,mode:d}),children:d==="shadowCatcher"?"Shadow Catcher":"Baked AO"},d))})]}),f.mode==="bakedAO"&&(0,xe.jsx)("div",{className:"se-placeholder",children:"Requires pre-baked AO textures \u2014 not yet available."}),(0,xe.jsx)(q,{label:"Intensity",value:f.intensity,min:0,max:1,step:.01,onChange:d=>v({...f,intensity:d})}),(0,xe.jsx)(q,{label:"Border fade",value:f.borderFade,min:0,max:10,step:.1,onChange:d=>v({...f,borderFade:d})}),(0,xe.jsx)(q,{label:"Height",value:f.height,min:-5,max:5,step:.1,onChange:d=>v({...f,height:d})}),(0,xe.jsx)(q,{label:"Size",value:f.size,min:1,max:50,step:.5,onChange:d=>v({...f,size:d})})]}),(0,xe.jsx)(xt,{title:"Environment",open:n.environment,onToggle:()=>c("environment"),children:p?(0,xe.jsxs)(xe.Fragment,{children:[(0,xe.jsx)(q,{label:"Orientation",value:g.rotation,min:0,max:360,step:1,formatValue:d=>`${d}\xB0`,onChange:d=>w({...g,rotation:d})}),(0,xe.jsx)(q,{label:"Brightness",value:g.intensity,min:0,max:3,step:.05,onChange:d=>w({...g,intensity:d})}),(0,xe.jsxs)(xt,{title:"Shadow",open:n.envShadow,onToggle:()=>c("envShadow"),trailing:(0,xe.jsx)(At,{checked:g.shadowLight.enabled,onChange:d=>w({...g,shadowLight:{...g.shadowLight,enabled:d}}),label:"Toggle environment shadow light"}),disabled:!g.shadowLight.enabled,children:[(0,xe.jsx)(q,{label:"Light intensity",value:g.shadowLight.intensity,min:0,max:20,step:.1,onChange:d=>w({...g,shadowLight:{...g.shadowLight,intensity:d}})}),(0,xe.jsx)(q,{label:"Shadow bias",value:g.shadowLight.bias,min:-.01,max:.01,step:1e-4,onChange:d=>w({...g,shadowLight:{...g.shadowLight,bias:d}})})]})]}):(0,xe.jsx)(ir,{requiredTier:"starter",feature:"Environment lighting"})})]})}var bm=require("react"),Gr=require("lucide-react");var ge=require("react/jsx-runtime"),DR={playing:"Playing",paused:"Paused",finished:"Finished"},Z_={repeat:"Looping",once:"Play once","ping-pong":"Ping-pong"};function NR(e){if(!Number.isFinite(e)||e<=0)return"Unknown duration";let t=Math.round(e*10)/10;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function J_(e){let t=Number.isFinite(e)&&e>0?e:0;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function OR(e){return Number.isFinite(e)?Math.min(3,Math.max(.1,Number(e.toFixed(2)))):1}function Dg({config:e,onChange:t,clipDetails:n,active:i,play:r,pause:o,stop:a,setSpeed:s,seek:l}){let[c,h]=(0,bm.useState)(!1),p=(0,bm.useMemo)(()=>new Map(n.map(x=>[x.sourceName,x.duration])),[n]),u=e.animations.clips.filter(x=>!x.hidden),m=e.animations.clips.filter(x=>x.hidden),f=(x,P=e.animations.autoplayClip)=>{t({...e,animations:{clips:x(e.animations.clips),autoplayClip:P}})},g=(x,P)=>{f(d=>d.map(S=>S.sourceName===x?P(S):S))},b=(x,P)=>{g(x,d=>({...d,loopMode:P}))},y=(x,P)=>{let d=OR(P);g(x,S=>({...S,speed:d})),i.some(S=>S.clip===x)&&s(d,x)},v=(x,P)=>{g(x,d=>({...d,displayName:P}))},w=x=>{let P=e.animations.autoplayClip===x?null:x;t({...e,animations:{...e.animations,autoplayClip:P}})},M=x=>{f(P=>P.map(d=>d.sourceName===x?{...d,hidden:!0}:d),e.animations.autoplayClip===x?null:e.animations.autoplayClip),i.some(P=>P.clip===x)&&a(x)},_=x=>{f(P=>P.map(d=>d.sourceName===x?{...d,hidden:!1}:d))};return e.animations.clips.length===0?(0,ge.jsx)(wo,{title:"Animations",children:(0,ge.jsx)("div",{className:"se-helperCard",children:"Upload a model with embedded animations to manage playback, naming, autoplay, and per-clip speed here."})}):(0,ge.jsxs)(wo,{title:"Animations",children:[u.length===0&&(0,ge.jsx)("div",{className:"se-helperCard",children:(0,ge.jsx)("span",{children:"Preview clips directly in the viewer (several can play at once), choose one optional autoplay animation, and use soft delete to hide clips without modifying the GLB."})}),u.length===0?(0,ge.jsx)("div",{className:"se-placeholder",children:"All animations are currently removed. Restore a clip below to make it available again."}):(0,ge.jsx)("div",{className:"se-animationList",children:u.map(x=>{let P=i.find(E=>E.clip===x.sourceName),d=P?.status==="playing",S=P?.time??0,C=p.get(x.sourceName)??0,T=P?DR[P.status]:"Ready";return(0,ge.jsxs)("article",{className:`se-animationCard ${P?"se-animationCard--active":""}`,children:[(0,ge.jsxs)("div",{className:"se-animationHeader",children:[(0,ge.jsxs)("div",{className:"se-animationHeading",children:[(0,ge.jsxs)("div",{className:"se-animationTitleRow",children:[(0,ge.jsx)("span",{className:"se-animationStatus",children:T}),e.animations.autoplayClip===x.sourceName?(0,ge.jsx)("span",{className:"se-animationBadge",children:"Autoplay"}):null]}),(0,ge.jsx)("div",{className:"se-animationSource",children:x.sourceName})]}),(0,ge.jsx)("button",{type:"button",className:"se-animationDangerButton",onClick:()=>M(x.sourceName),title:"Remove animation",children:(0,ge.jsx)(Gr.Trash2,{size:16})})]}),(0,ge.jsxs)("div",{className:"se-field",children:[(0,ge.jsx)("span",{className:"se-fieldLabel",children:"Display name"}),(0,ge.jsx)("input",{className:"se-textInput",value:x.displayName,onChange:E=>v(x.sourceName,E.target.value),placeholder:"Animation name"})]}),(0,ge.jsxs)("div",{className:"se-animationMeta",children:[(0,ge.jsx)("span",{children:NR(C)}),(0,ge.jsx)("span",{children:Z_[x.loopMode]??Z_.repeat}),(0,ge.jsxs)("span",{children:[x.speed.toFixed(2),"x"]})]}),(0,ge.jsxs)("div",{className:"se-animationButtonRow",children:[(0,ge.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>d&&!P?.reverse?o(x.sourceName):r(x.sourceName,{alongside:!0}),"aria-label":d&&!P?.reverse?"Pause":"Play",title:d&&!P?.reverse?"Pause":"Play",children:d&&!P?.reverse?(0,ge.jsx)(Gr.Pause,{size:16}):(0,ge.jsx)(Gr.Play,{size:16})}),(0,ge.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>d&&P?.reverse?o(x.sourceName):r(x.sourceName,{alongside:!0,reverse:!0}),"aria-label":d&&P?.reverse?"Pause":"Play backwards",title:d&&P?.reverse?"Pause":"Play backwards",children:d&&P?.reverse?(0,ge.jsx)(Gr.Pause,{size:16}):(0,ge.jsx)(Gr.Rewind,{size:16})}),(0,ge.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>a(x.sourceName),disabled:!P,"aria-label":"Stop",title:"Stop",children:(0,ge.jsx)(Gr.Square,{size:16})})]}),(0,ge.jsxs)("div",{className:"se-animationSeekRow",children:[(0,ge.jsx)("input",{className:"se-slider se-animationSeek",type:"range",min:0,max:Math.max(C,.001),step:.01,value:Math.min(S,C),disabled:!P||C<=0,onChange:E=>l(Number(E.target.value),x.sourceName),"aria-label":"Seek"}),(0,ge.jsxs)("span",{className:"se-animationSeekTime",children:[J_(Math.min(S,C))," / ",J_(C)]})]}),(0,ge.jsxs)("div",{className:"se-animationGrid",children:[(0,ge.jsxs)("label",{className:"se-field",children:[(0,ge.jsx)("span",{className:"se-fieldLabel",children:"Loop mode"}),(0,ge.jsxs)("select",{className:"se-select",value:x.loopMode,onChange:E=>b(x.sourceName,E.target.value),children:[(0,ge.jsx)("option",{value:"repeat",children:"Loop"}),(0,ge.jsx)("option",{value:"once",children:"Play Once"}),(0,ge.jsx)("option",{value:"ping-pong",children:"Ping-Pong"})]})]}),(0,ge.jsxs)("label",{className:"se-field",children:[(0,ge.jsxs)("span",{className:"se-fieldLabel",children:["Speed",(0,ge.jsxs)("span",{className:"se-fieldValue",children:[x.speed.toFixed(2),"x"]})]}),(0,ge.jsxs)("div",{className:"se-animationSpeedRow",children:[(0,ge.jsx)("input",{className:"se-slider",type:"range",min:.1,max:3,step:.1,value:x.speed,onChange:E=>y(x.sourceName,Number(E.target.value))}),(0,ge.jsx)("input",{className:"se-numberInput se-animationSpeedInput",type:"number",min:.1,max:3,step:.1,value:x.speed,onChange:E=>y(x.sourceName,Number(E.target.value))})]})]})]}),(0,ge.jsx)("button",{type:"button",className:`se-animationAutoplayButton ${e.animations.autoplayClip===x.sourceName?"se-animationAutoplayButton--active":""}`,onClick:()=>w(x.sourceName),children:e.animations.autoplayClip===x.sourceName?"Disable autoplay":"Set as autoplay"})]},x.sourceName)})}),m.length>0?(0,ge.jsxs)("section",{className:"se-removedAnimations",children:[(0,ge.jsx)("button",{type:"button",className:"se-panelHeader",onClick:()=>h(x=>!x),children:(0,ge.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ge.jsx)(Gr.ChevronDown,{size:16,className:`se-panelChevron ${c?"se-panelChevron--open":""}`}),(0,ge.jsxs)("span",{className:"se-panelTitle",children:["Removed Animations (",m.length,")"]})]})}),c?(0,ge.jsx)("div",{className:"se-removedAnimationList",children:m.map(x=>(0,ge.jsxs)("div",{className:"se-removedAnimationRow",children:[(0,ge.jsxs)("div",{children:[(0,ge.jsx)("div",{className:"se-removedAnimationName",children:x.displayName||x.sourceName}),(0,ge.jsx)("div",{className:"se-animationSource",children:x.sourceName})]}),(0,ge.jsx)("button",{type:"button",className:"se-animationButton",onClick:()=>_(x.sourceName),children:"Restore"})]},x.sourceName))}):null]}):null]})}var vm=require("react"),Al=require("lucide-react");var le=require("react/jsx-runtime");function Ng({config:e,onChange:t,cameraState:n,onPreviewView:i}){let[r,o]=(0,vm.useState)(null),[a,s]=(0,vm.useState)(""),[l,c]=(0,vm.useState)(""),h=b=>{o(structuredClone(b)),s(b.minDistance?.toString()??""),c(b.maxDistance?.toString()??"")},p=a.trim()===""?void 0:Number(a),u=l.trim()===""?void 0:Number(l),m=[p,u].some(b=>b!==void 0&&(!Number.isFinite(b)||b<0))?"Distances must be non-negative numbers.":p!==void 0&&u!==void 0&&p>u?"Maximum distance must be at least the minimum.":r?.images?.some(b=>b.src.trim()&&!gl(b.src))||r?.links?.some(b=>b.href.trim()&&!gl(b.href))?"Use an HTTP(S) URL or a relative path for images and links.":null,f=()=>{if(!r?.title.trim()||m)return;let b={...r,title:r.title.trim(),category:r.category?.trim()||void 0,minDistance:p,maxDistance:u,images:r.images?.filter(y=>y.src.trim()).map(y=>({...y,src:y.src.trim()})),links:r.links?.filter(y=>y.href.trim()).map(y=>({...y,href:y.href.trim(),label:y.label.trim()||"Learn more"}))};t({...e,annotations:e.annotations.map(y=>y.id===r.id?b:y)}),o(null)},g=b=>{window.confirm("Delete this annotation?")&&(t({...e,annotations:e.annotations.filter(y=>y.id!==b).map((y,v)=>({...y,id:v+1}))}),o(null))};return(0,le.jsxs)(wo,{title:"Annotations",children:[e.annotations.length===0?(0,le.jsx)("div",{className:"bb-emptyAnnotations",children:"No annotations yet. Double-click on the model to add one."}):(0,le.jsx)("div",{className:"se-annotationList",children:e.annotations.map(b=>(0,le.jsxs)("div",{className:"se-annotationRow",children:[(0,le.jsxs)("span",{className:"se-annotationNumber",children:["#",b.id]}),(0,le.jsxs)("div",{className:"se-annotationSummary",children:[(0,le.jsxs)("div",{className:"se-annotationHeading",children:[(0,le.jsx)("span",{className:"se-annotationTitle",title:b.title,children:b.title}),b.category?.trim()&&(0,le.jsx)("span",{className:"se-annotationCategory",title:b.category,children:b.category})]}),b.description&&(0,le.jsx)("p",{className:"se-annotationDescription",title:b.description,children:b.description})]}),(0,le.jsxs)("div",{className:"se-annotationActions",children:[bl(b.cameraView)&&(0,le.jsx)("button",{type:"button",className:"se-annotationAction",disabled:!i,onClick:()=>i?.(b.cameraView),title:"Preview saved view","aria-label":`Preview saved view for ${b.title}`,children:(0,le.jsx)(Al.Eye,{size:15,"aria-hidden":"true"})}),(0,le.jsx)("button",{type:"button",className:"se-annotationAction",onClick:()=>h(b),title:"Edit annotation","aria-label":`Edit ${b.title}`,children:(0,le.jsx)(Al.Pencil,{size:15,"aria-hidden":"true"})}),(0,le.jsx)("button",{type:"button",className:"se-annotationAction se-annotationAction--delete",onClick:()=>g(b.id),title:"Delete annotation","aria-label":`Delete ${b.title}`,children:(0,le.jsx)(Al.Trash2,{size:15,"aria-hidden":"true"})})]})]},b.id))}),r&&(0,le.jsx)("div",{className:"bb-editAnnotationOverlay",onClick:()=>o(null),children:(0,le.jsxs)("div",{className:"bb-editAnnotationPopup",onKeyDown:b=>{b.key==="Escape"&&(b.stopPropagation(),o(null))},role:"dialog","aria-modal":"true","aria-labelledby":"annotation-edit-title",onClick:b=>b.stopPropagation(),children:[(0,le.jsxs)("div",{className:"bb-editAnnotationHeader",children:[(0,le.jsx)("h3",{id:"annotation-edit-title",className:"bb-editAnnotationTitle",children:"Edit annotation"}),(0,le.jsx)("button",{className:"bb-editAnnotationClose","aria-label":"Close annotation editor",onClick:()=>o(null),children:"\xD7"})]}),(0,le.jsxs)("div",{className:"bb-editAnnotationBody",children:[(0,le.jsxs)("label",{className:"bb-field",children:[(0,le.jsx)("span",{className:"bb-label",children:"Title"}),(0,le.jsx)("input",{className:"bb-input",autoFocus:!0,value:r.title,onChange:b=>o({...r,title:b.target.value})})]}),(0,le.jsxs)("label",{className:"bb-field",children:[(0,le.jsx)("span",{className:"bb-label",children:"Description"}),(0,le.jsx)("textarea",{className:"bb-textarea",rows:3,value:r.description,onChange:b=>o({...r,description:b.target.value})})]}),(0,le.jsxs)("label",{className:"bb-field",children:[(0,le.jsx)("span",{className:"bb-label",children:"Category"}),(0,le.jsx)("input",{className:"bb-input",value:r.category??"",onChange:b=>o({...r,category:b.target.value}),placeholder:"For example, Features"})]}),(0,le.jsxs)("p",{className:"se-annotationCoordinates",children:["Position: [",r.worldPosition.map(b=>b.toFixed(2)).join(", "),"]"]}),(0,le.jsxs)("fieldset",{className:"bb-annotationFields",children:[(0,le.jsx)("legend",{children:"Saved camera view"}),(0,le.jsx)("p",{children:r.cameraView?"Tours use this saved view. Clear it to restore automatic close-up zoom.":"Tours automatically zoom in on the marker. Capture a view to use custom framing."}),(0,le.jsxs)("div",{className:"bb-annotationFieldActions",children:[(0,le.jsx)("button",{className:"bb-button",disabled:!n,onClick:()=>n&&o({...r,cameraView:structuredClone(n)}),children:"Capture current view"}),(0,le.jsx)("button",{className:"bb-button",disabled:!r.cameraView||!i,onClick:()=>r.cameraView&&i?.(r.cameraView),children:"Preview"}),(0,le.jsx)("button",{className:"bb-button",disabled:!r.cameraView,onClick:()=>o({...r,cameraView:void 0}),children:"Clear view"})]})]}),(0,le.jsxs)("fieldset",{className:"bb-annotationFields",children:[(0,le.jsx)("legend",{children:"Marker distance (scene units)"}),(0,le.jsx)("p",{children:"Leave blank to show markers at any distance."}),(0,le.jsxs)("div",{className:"bb-annotationDistanceFields",children:[(0,le.jsxs)("label",{className:"bb-field",children:[(0,le.jsx)("span",{className:"bb-label",children:"Minimum distance"}),(0,le.jsx)("input",{className:"bb-input",type:"number",min:"0",step:"any",value:a,onChange:b=>s(b.target.value)})]}),(0,le.jsxs)("label",{className:"bb-field",children:[(0,le.jsx)("span",{className:"bb-label",children:"Maximum distance"}),(0,le.jsx)("input",{className:"bb-input",type:"number",min:"0",step:"any",value:l,onChange:b=>c(b.target.value)})]})]})]}),(0,le.jsxs)("fieldset",{className:"bb-annotationFields",children:[(0,le.jsx)("legend",{children:"Images"}),r.images?.map((b,y)=>(0,le.jsxs)("div",{className:"bb-annotationMediaRow",children:[(0,le.jsxs)("label",{className:"bb-field",children:[(0,le.jsxs)("span",{className:"bb-label",children:["Image URL ",y+1]}),(0,le.jsx)("input",{className:"bb-input",value:b.src,onChange:v=>o({...r,images:r.images.map((w,M)=>M===y?{...w,src:v.target.value}:w)}),placeholder:"https://example.com/image.jpg"})]}),(0,le.jsxs)("label",{className:"bb-field",children:[(0,le.jsxs)("span",{className:"bb-label",children:["Image description ",y+1]}),(0,le.jsx)("input",{className:"bb-input",value:b.alt??"",onChange:v=>o({...r,images:r.images.map((w,M)=>M===y?{...w,alt:v.target.value}:w)})})]}),(0,le.jsxs)("button",{className:"bb-button",onClick:()=>o({...r,images:r.images.filter((v,w)=>w!==y)}),children:["Remove image ",y+1]})]},y)),(0,le.jsx)("button",{className:"bb-button",onClick:()=>o({...r,images:[...r.images??[],{src:"",alt:""}]}),children:"Add image"})]}),(0,le.jsxs)("fieldset",{className:"bb-annotationFields",children:[(0,le.jsx)("legend",{children:"Links"}),r.links?.map((b,y)=>(0,le.jsxs)("div",{className:"bb-annotationMediaRow",children:[(0,le.jsxs)("label",{className:"bb-field",children:[(0,le.jsxs)("span",{className:"bb-label",children:["Link URL ",y+1]}),(0,le.jsx)("input",{className:"bb-input",value:b.href,onChange:v=>o({...r,links:r.links.map((w,M)=>M===y?{...w,href:v.target.value}:w)}),placeholder:"https://example.com/details"})]}),(0,le.jsxs)("label",{className:"bb-field",children:[(0,le.jsxs)("span",{className:"bb-label",children:["Link label ",y+1]}),(0,le.jsx)("input",{className:"bb-input",value:b.label,onChange:v=>o({...r,links:r.links.map((w,M)=>M===y?{...w,label:v.target.value}:w)})})]}),(0,le.jsxs)("button",{className:"bb-button",onClick:()=>o({...r,links:r.links.filter((v,w)=>w!==y)}),children:["Remove link ",y+1]})]},y)),(0,le.jsx)("button",{className:"bb-button",onClick:()=>o({...r,links:[...r.links??[],{href:"",label:""}]}),children:"Add link"})]}),m&&(0,le.jsx)("p",{role:"alert",children:m}),(0,le.jsxs)("div",{className:"bb-editAnnotationActions",children:[(0,le.jsx)("button",{className:"bb-button",onClick:()=>o(null),children:"Cancel"}),(0,le.jsx)("button",{className:"bb-button bb-button--primary",disabled:!r.title.trim()||!!m,onClick:f,children:"Save"}),(0,le.jsx)("button",{className:"bb-button bb-button--danger",onClick:()=>g(r.id),children:"Delete"})]})]})]})})]})}var ji=require("react"),oi=require("lucide-react");var Re=require("react/jsx-runtime"),IR={enabled:!0,waypoints:[],loop:!0,autoPlay:!1},ds=3.5;function Og({config:e,onChange:t,cameraState:n,onPreviewWaypoint:i}){let r=e.cinematic??IR,o=wl(),{waypoints:a}=r,s=(0,ji.useCallback)((v,w)=>{if(v.length<2)return 0;let M=0;for(let _=0;_<v.length-1;_++){let x=v[_].segmentDuration??ds;M+=x}return w&&v.length>1&&(M+=v[v.length-1].segmentDuration??ds),Math.max(M,0)},[]),l=(0,ji.useCallback)(v=>{t({...e,cinematic:{...r,...v}})},[e,r,t]),c=(0,ji.useCallback)(()=>{if(!n)return;let v={position:[...n.position],target:[...n.target],...n.azimuthAngle!=null?{azimuthAngle:n.azimuthAngle}:{},...n.polarAngle!=null?{polarAngle:n.polarAngle}:{},segmentDuration:ds},w=[...a,v],M=s(w,r.loop);l({waypoints:w,duration:M})},[n,a,r.loop,s,l]),h=(0,ji.useCallback)(v=>{let w=a.filter((_,x)=>x!==v),M=s(w,r.loop);l({waypoints:w,duration:M})},[a,r.loop,s,l]),p=(0,ji.useCallback)((v,w)=>{let M=v+w;if(M<0||M>=a.length)return;let _=[...a];[_[v],_[M]]=[_[M],_[v]];let x=s(_,r.loop);l({waypoints:_,duration:x})},[a,r.loop,s,l]),u=(0,ji.useCallback)((v,w)=>{let M=a.map((x,P)=>P===v?{...x,...w}:x),_=s(M,r.loop);l({waypoints:M,duration:_})},[a,r.loop,s,l]),[m,f]=(0,ji.useState)(!1),g=a.some(v=>v.segmentDuration!==void 0),b=(0,ji.useCallback)(v=>v>=a.length-1?ds:a[v]?.segmentDuration??ds,[a]),y=a.length>=2;return(0,Re.jsxs)(wo,{title:"Cinematic Camera",children:[(0,Re.jsx)("p",{className:"se-cinematicHint",children:"Frame the model in the viewer, then capture it as a waypoint. The camera glides through the waypoints in order \u2014 enable and press play in the viewer to preview."}),(0,Re.jsxs)("button",{type:"button",className:"bb-button bb-button--primary se-cinematicAdd",onClick:c,disabled:!n,title:"Capture the current camera view as a waypoint",children:[(0,Re.jsx)(oi.Plus,{size:15}),"Add waypoint from current view"]}),(0,Re.jsxs)("div",{className:"se-customizeToggle",children:[(0,Re.jsxs)("label",{className:"se-toggleLabel",children:[(0,Re.jsx)("input",{type:"checkbox",checked:m,onChange:v=>f(v.target.checked)}),(0,Re.jsx)(oi.Settings,{size:14}),(0,Re.jsx)("span",{children:"Customize durations between waypoints"})]}),m&&(0,Re.jsxs)("span",{className:"se-toggleHint",children:["Set duration for each segment between waypoints: 1\u21922, 2\u21923, etc. Default: ",ds,"s"]})]}),a.length===0?(0,Re.jsx)("div",{className:"bb-emptyAnnotations",children:"No waypoints yet. Position the camera and add your first one."}):(0,Re.jsxs)(Re.Fragment,{children:[(0,Re.jsx)("div",{className:"se-waypointList",children:a.map((v,w)=>{let M=b(w),_=w===a.length-1,x=v.segmentDuration!==void 0&&v.segmentDuration!==ds;return(0,Re.jsxs)("div",{children:[(0,Re.jsxs)("div",{className:"se-waypointCard",children:[(0,Re.jsx)("div",{className:"se-waypointBadge",children:w+1}),(0,Re.jsxs)("div",{className:"se-waypointBody",children:[(0,Re.jsxs)("div",{className:"se-waypointCoords",children:["pos [",v.position.map(P=>P.toFixed(1)).join(", "),"]"]}),(0,Re.jsxs)("div",{className:"se-waypointCoords",children:["look [",v.target.map(P=>P.toFixed(1)).join(", "),"]"]}),m&&!_&&(0,Re.jsxs)("div",{className:`se-customBadge ${x?"se-customBadge--custom":"se-customBadge--default"}`,children:[M.toFixed(1),"s",!x&&" (default)"]})]}),(0,Re.jsxs)("div",{className:"se-waypointActions",children:[(0,Re.jsx)("button",{className:"se-waypointAction",onClick:()=>i?.(v),title:"Fly camera to this waypoint",disabled:!i,children:(0,Re.jsx)(oi.MapPin,{size:15})}),(0,Re.jsx)("button",{className:"se-waypointAction",onClick:()=>p(w,-1),title:"Move up",disabled:w===0,children:(0,Re.jsx)(oi.ArrowUp,{size:15})}),(0,Re.jsx)("button",{className:"se-waypointAction",onClick:()=>p(w,1),title:"Move down",disabled:_,children:(0,Re.jsx)(oi.ArrowDown,{size:15})}),(0,Re.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:()=>h(w),title:"Delete waypoint",children:(0,Re.jsx)(oi.Trash2,{size:15})})]})]}),m&&!_&&(0,Re.jsxs)("div",{className:"se-segmentBetween",children:[(0,Re.jsxs)("div",{className:"se-segmentLabel",children:[w+1," \u2192 ",w+2,!v.segmentDuration&&" (default)"]}),(0,Re.jsxs)("div",{className:"se-segmentControls",children:[(0,Re.jsx)("span",{className:"se-durationLabel",children:"Duration:"}),(0,Re.jsx)("input",{type:"range",className:"se-segmentSlider",min:1,max:20,step:.5,value:M,onChange:P=>{let d=parseFloat(P.target.value);u(w,{segmentDuration:d})}}),(0,Re.jsxs)("span",{className:"se-segmentValue",children:[M.toFixed(1),"s"]}),(0,Re.jsxs)("div",{className:"se-presetButtons",children:[[2,4,6,8].map(P=>(0,Re.jsxs)("button",{className:"se-presetButton",onClick:()=>u(w,{segmentDuration:P}),children:[P,"s"]},`preset-${w}-${P}`)),(0,Re.jsx)("button",{className:"se-presetButton se-presetButton--default",onClick:()=>{let P=a.map((S,C)=>{if(C===w){let{segmentDuration:T,...E}=S;return E}return S}),d=s(P,r.loop);l({waypoints:P,duration:d})},children:"Reset"})]})]})]})]},`waypoint-wrapper-${w}`)})}),(0,Re.jsxs)("div",{className:"se-totalDuration",children:[(0,Re.jsx)("span",{className:"se-totalLabel",children:"Total duration:"}),(0,Re.jsx)("span",{className:"se-totalValue",children:y?(r.duration??s(a,r.loop)).toFixed(1)+"s":"-"}),!y&&(0,Re.jsx)("span",{className:"se-totalHint",children:"(need at least 2 waypoints)"})]})]}),(0,Re.jsx)(Tt,{label:"Enable cinematic camera",checked:r.enabled,onChange:v=>l({enabled:v})}),(0,Re.jsx)(Tt,{label:"Loop",checked:r.loop,onChange:v=>{let w=v,M=s(a,w);l({loop:w,duration:M})}}),(0,Re.jsx)(Tt,{label:"Auto-play on load",checked:r.autoPlay,onChange:v=>l({autoPlay:v})}),r.autoPlay&&o?(0,Re.jsx)("div",{className:"se-placeholder se-placeholder--spaced",children:"Your device is set to reduce motion, so this preview won't play on its own. Visitors without that setting will see it."}):null,!m&&y&&(0,Re.jsx)(q,{label:"Duration",value:r.duration??s(a,r.loop),min:4,max:120,step:1,formatValue:v=>`${v}s`,onChange:v=>l({duration:v})})]})}var us=require("react"),xm=require("react-colorful"),br=require("lucide-react");var Q_=["other","body","light","wheel","glass","interior","floor","wall","door","furniture","decor","electronics","seat","table","chair","window","sofa","bed","engine","headlight"],ym=["normal","hidden","selected","disabled"];var Y=require("react/jsx-runtime"),Ig={all:"All objects",group:"Group",tag:"Tag",type:"Type",object:"One object"},eM={metric:"Metric",status:"Status",metadata:"Metadata"},BR={metric:"",stops:[[0,"#3b82f6"],[100,"#ef4444"]]};function zR(e){return e===void 0?"all":typeof e=="string"||Array.isArray(e)?"object":"group"in e?"group":"tag"in e?"tag":"type"}function yd(e){return e===void 0?"":typeof e=="string"?e:Array.isArray(e)?e[0]??"":"group"in e?e.group:"tag"in e?e.tag:e.type}function tM(e,t){if(e!=="all")return e==="object"?t:e==="group"?{group:t}:e==="tag"?{tag:t}:{type:t}}function UR(e){return"metric"in e?"metric":"status"in e?"status":"metadata"}function nM(e){return e==="metric"?{metric:""}:e==="status"?{status:["disabled"]}:{metadata:"",equals:""}}function VR(e){let t=e.trim();return t==="true"?!0:t==="false"?!1:t==="null"?null:t!==""&&Number.isFinite(Number(t))?Number(t):e}function Bg(e){return e.trim()===""||!Number.isFinite(Number(e))?void 0:Number(e)}function rM(e,t="",n=0){return typeof e!="object"||e===null||Array.isArray(e)?t?[t]:[]:n>2?t?[t]:[]:Object.entries(e).flatMap(([i,r])=>rM(r,t?`${t}.${i}`:i,n+1))}var xd=e=>[...new Set(e.filter(t=>!!t))].sort((t,n)=>t.localeCompare(n));function Gi({label:e,children:t}){return(0,Y.jsxs)("label",{className:"se-field",children:[(0,Y.jsx)("span",{className:"se-fieldLabel",children:e}),t]})}function wd({label:e,checked:t,color:n,onToggle:i,onColorChange:r}){let[o,a]=(0,us.useState)(!1),s=(0,us.useRef)(null);return(0,Y.jsxs)("div",{className:"se-field se-fieldInline",children:[(0,Y.jsxs)("label",{className:"se-ruleLook",children:[(0,Y.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:l=>i(l.target.checked)}),e]}),t&&n!==void 0&&r?(0,Y.jsx)("span",{ref:s,style:{display:"inline-flex"},children:(0,Y.jsx)(xm.HexColorInput,{prefixed:!0,className:"se-swatch","aria-label":`${e} value`,onClick:()=>a(l=>!l),style:{background:n,color:aa(n)},color:n,onChange:r})}):null,o?(0,Y.jsx)(gd,{anchorRef:s,onClose:()=>a(!1),children:(0,Y.jsx)(xm.HexColorPicker,{color:n,onChange:r})}):null]})}function FR({title:e,open:t,onToggle:n,actions:i,children:r}){return(0,Y.jsxs)("section",{className:"se-panel",children:[(0,Y.jsxs)("div",{className:"se-ruleHeader",children:[(0,Y.jsx)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:(0,Y.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Y.jsx)(br.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,Y.jsx)("span",{className:"se-panelTitle",children:e})]})}),(0,Y.jsx)("span",{className:"se-ruleActions",children:i})]}),t?(0,Y.jsx)("div",{className:"se-panelBody",children:r}):null]})}function zg({config:e,onChange:t,objectBindings:n}){let i=e.styleRules??[],[r,o]=(0,us.useState)(i[0]?.id??null),a=(0,us.useMemo)(()=>{let u=Object.values(n);return{groups:xd(u.map(m=>m.group)),tags:xd(u.flatMap(m=>m.tags??[])),types:xd(u.map(m=>m.type??"other")),objects:u.map(m=>({id:m.id,label:m.label||m.id})).sort((m,f)=>m.label.localeCompare(f.label)),metrics:xd(u.flatMap(m=>Object.keys(m.metrics??{}))),metadata:xd(u.flatMap(m=>rM(m.metadata)))}},[n]),s=u=>t({...e,styleRules:u}),l=(u,m)=>s(i.map(f=>f.id===u?m(f):f)),c=()=>{let u=crypto.randomUUID();s([...i,{id:u,label:`Rule ${i.length+1}`,when:[{status:["disabled"]}],material:{baseColor:"#9ca3af"}}]),o(u)},h=(u,m)=>{let f=[...i],[g]=f.splice(u,1);f.splice(u+m,0,g),s(f)},p=u=>{let m=u.target?rs(n,u.target):Object.keys(n),f=u.when?Array.isArray(u.when)?u.when:[u.when]:[];return m.filter(g=>f.every(b=>og(n[g],b))).length};return(0,Y.jsxs)(wo,{title:"Style rules",children:[(0,Y.jsx)("div",{className:"se-helperCard se-ruleIntro",children:"Restyle objects from their data while the app runs: a colour from a metric, grey when disabled, a pulse for an alarm. Set an object's metrics, status, and metadata in the Object tab to try a rule here. Later rules win over earlier ones."}),(0,Y.jsx)("datalist",{id:"se-ruleMetrics",children:a.metrics.map(u=>(0,Y.jsx)("option",{value:u},u))}),(0,Y.jsx)("datalist",{id:"se-ruleMetadata",children:a.metadata.map(u=>(0,Y.jsx)("option",{value:u},u))}),i.map((u,m)=>{let f=u.when?Array.isArray(u.when)?u.when:[u.when]:[],g=zR(u.target),b=u.material??{},y=u.pulse===!0?{}:u.pulse||void 0,v=u.target?rs(n,u.target).length:Object.keys(n).length,w=d=>l(u.id,S=>({...S,when:d.length>0?d:void 0})),M=(d,S)=>w(f.map((C,T)=>T===d?S:C)),_=d=>l(u.id,S=>{let C={...S.material,...d};for(let T of Object.keys(C))C[T]===void 0&&delete C[T];return{...S,material:Object.keys(C).length>0?C:void 0}}),x=d=>l(u.id,S=>({...S,colorScale:d})),P=g==="group"?a.groups:g==="tag"?a.tags:g==="type"?a.types:[];return(0,Y.jsxs)(FR,{title:u.label||`Rule ${m+1}`,open:r===u.id,onToggle:()=>o(d=>d===u.id?null:u.id),actions:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>h(m,-1),disabled:m===0,"aria-label":"Move rule up",title:"Move up",children:(0,Y.jsx)(br.ArrowUp,{size:14})}),(0,Y.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>h(m,1),disabled:m===i.length-1,"aria-label":"Move rule down",title:"Move down",children:(0,Y.jsx)(br.ArrowDown,{size:14})}),(0,Y.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>s(i.filter(d=>d.id!==u.id)),"aria-label":"Delete rule",title:"Delete rule",children:(0,Y.jsx)(br.Trash2,{size:14})})]}),children:[(0,Y.jsx)(Gi,{label:"Name",children:(0,Y.jsx)("input",{className:"se-textInput",value:u.label??"",placeholder:`Rule ${m+1}`,onChange:d=>l(u.id,S=>({...S,label:d.target.value}))})}),(0,Y.jsxs)("div",{className:"se-ruleGrid",children:[(0,Y.jsx)(Gi,{label:"Applies to",children:(0,Y.jsx)("select",{className:"se-select",value:g,onChange:d=>{let S=d.target.value,C=S==="object"?a.objects[0]?.id:S==="group"?a.groups[0]:S==="tag"?a.tags[0]:S==="type"?a.types[0]:"";l(u.id,T=>({...T,target:tM(S,C??"")}))},children:Object.keys(Ig).map(d=>(0,Y.jsx)("option",{value:d,children:Ig[d]},d))})}),g!=="all"?(0,Y.jsx)(Gi,{label:Ig[g],children:(0,Y.jsxs)("select",{className:"se-select",value:yd(u.target),onChange:d=>l(u.id,S=>({...S,target:tM(g,d.target.value)})),children:[g==="object"?a.objects.map(d=>(0,Y.jsx)("option",{value:d.id,children:d.label},d.id)):P.map(d=>(0,Y.jsx)("option",{value:d,children:d},d)),(g==="object"?a.objects.some(d=>d.id===yd(u.target)):P.includes(yd(u.target)))?null:(0,Y.jsx)("option",{value:yd(u.target),children:yd(u.target)||"None in this model"})]})}):null]}),(0,Y.jsx)("div",{className:"se-fieldLabel",children:"When"}),f.length===0?(0,Y.jsx)("div",{className:"se-ruleHint",children:"Always applies."}):null,f.map((d,S)=>{let C=UR(d);return(0,Y.jsxs)("div",{className:"se-ruleCondition",children:[(0,Y.jsxs)("div",{className:"se-ruleConditionHeader",children:[(0,Y.jsx)("select",{className:"se-select","aria-label":"Condition type",value:C,onChange:T=>M(S,nM(T.target.value)),children:Object.keys(eM).map(T=>(0,Y.jsx)("option",{value:T,children:eM[T]},T))}),(0,Y.jsx)("button",{type:"button",className:"se-iconButton","aria-label":"Remove condition",title:"Remove condition",onClick:()=>w(f.filter((T,E)=>E!==S)),children:(0,Y.jsx)(br.X,{size:14})})]}),"metric"in d?(0,Y.jsxs)("div",{className:"se-ruleGrid se-ruleGrid--three",children:[(0,Y.jsx)(Gi,{label:"Metric",children:(0,Y.jsx)("input",{className:"se-textInput",list:"se-ruleMetrics",value:d.metric,placeholder:"temperature",onChange:T=>M(S,{...d,metric:T.target.value})})}),(0,Y.jsx)(Gi,{label:"Above",children:(0,Y.jsx)("input",{className:"se-numberInput",type:"number",value:d.above??"",placeholder:"any",onChange:T=>M(S,{...d,above:Bg(T.target.value)})})}),(0,Y.jsx)(Gi,{label:"Below",children:(0,Y.jsx)("input",{className:"se-numberInput",type:"number",value:d.below??"",placeholder:"any",onChange:T=>M(S,{...d,below:Bg(T.target.value)})})})]}):"status"in d?(0,Y.jsx)("div",{className:"se-ruleStatuses",children:ym.map(T=>{let E=[].concat(d.status).includes(T);return(0,Y.jsxs)("label",{className:"se-ruleStatus",children:[(0,Y.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:E,onChange:()=>{let k=[].concat(d.status),D=E?k.filter(B=>B!==T):[...k,T];M(S,{status:D})}}),T]},T)})}):(0,Y.jsxs)("div",{className:"se-ruleGrid",children:[(0,Y.jsx)(Gi,{label:"Key",children:(0,Y.jsx)("input",{className:"se-textInput",list:"se-ruleMetadata",value:d.metadata,placeholder:"alarm.state",onChange:T=>M(S,{...d,metadata:T.target.value})})}),(0,Y.jsx)(Gi,{label:"Equals",children:(0,Y.jsx)("input",{className:"se-textInput",value:d.equals===null?"null":String(d.equals),placeholder:"fault",onChange:T=>M(S,{...d,equals:VR(T.target.value)})})})]})]},S)}),(0,Y.jsxs)("button",{type:"button",className:"se-animationButton",onClick:()=>w([...f,nM("metric")]),children:[(0,Y.jsx)(br.Plus,{size:14})," Add condition"]}),(0,Y.jsx)("div",{className:"se-fieldLabel",children:"Look"}),(0,Y.jsx)(wd,{label:"Colour",checked:b.baseColor!==void 0,color:b.baseColor,onToggle:d=>_({baseColor:d?"#9ca3af":void 0}),onColorChange:d=>_({baseColor:d})}),(0,Y.jsx)(wd,{label:"Opacity",checked:b.opacity!==void 0,onToggle:d=>_({opacity:d?.4:void 0})}),b.opacity!==void 0?(0,Y.jsx)(q,{label:"Opacity",value:b.opacity,min:0,max:1,step:.05,formatValue:d=>`${Math.round(d*100)}%`,onChange:d=>_({opacity:d})}):null,(0,Y.jsx)(wd,{label:"Glow",checked:b.emissive!==void 0,color:b.emissive,onToggle:d=>_({emissive:d?"#ff3b30":void 0,emissiveIntensity:d?b.emissiveIntensity??1:void 0}),onColorChange:d=>_({emissive:d})}),(0,Y.jsx)(wd,{label:"Colour from a metric",checked:u.colorScale!==void 0,onToggle:d=>x(d?{...BR,metric:a.metrics[0]??""}:void 0)}),u.colorScale?(0,Y.jsxs)("div",{className:"se-ruleCondition",children:[(0,Y.jsxs)("div",{className:"se-ruleGrid",children:[(0,Y.jsx)(Gi,{label:"Metric",children:(0,Y.jsx)("input",{className:"se-textInput",list:"se-ruleMetrics",value:u.colorScale.metric,placeholder:"temperature",onChange:d=>x({...u.colorScale,metric:d.target.value})})}),(0,Y.jsx)(Gi,{label:"Sets",children:(0,Y.jsxs)("select",{className:"se-select",value:u.colorScale.channel??"baseColor",onChange:d=>x({...u.colorScale,channel:d.target.value}),children:[(0,Y.jsx)("option",{value:"baseColor",children:"Colour"}),(0,Y.jsx)("option",{value:"emissive",children:"Glow colour"})]})})]}),u.colorScale.stops.map(([d,S],C)=>{let T=E=>x({...u.colorScale,stops:u.colorScale.stops.map((k,D)=>D===C?E:k)});return(0,Y.jsxs)("div",{className:"se-ruleStop",children:[(0,Y.jsx)("input",{className:"se-numberInput",type:"number","aria-label":"Stop value",value:d,onChange:E=>T([Bg(E.target.value)??0,S])}),(0,Y.jsx)(kr,{label:`At ${d}`,value:S,onChange:E=>T([d,E])}),(0,Y.jsx)("button",{type:"button",className:"se-iconButton","aria-label":"Remove stop",title:"Remove stop",disabled:u.colorScale.stops.length<=1,onClick:()=>x({...u.colorScale,stops:u.colorScale.stops.filter((E,k)=>k!==C)}),children:(0,Y.jsx)(br.X,{size:14})})]},C)}),(0,Y.jsxs)("button",{type:"button",className:"se-animationButton",onClick:()=>{let d=u.colorScale.stops,S=d[d.length-1];x({...u.colorScale,stops:[...d,[(S?.[0]??0)+10,S?.[1]??"#ffffff"]]})},children:[(0,Y.jsx)(br.Plus,{size:14})," Add stop"]})]}):null,(0,Y.jsx)(wd,{label:"Pulse",checked:y!==void 0,color:y?.color??"#ff3b30",onToggle:d=>l(u.id,S=>({...S,pulse:d?{color:"#ff3b30",speed:1}:void 0})),onColorChange:d=>l(u.id,S=>({...S,pulse:{...y,color:d}}))}),y?(0,Y.jsx)(Y.Fragment,{children:(0,Y.jsx)(q,{label:"Pulses per second",value:y.speed??1,min:.2,max:4,step:.1,formatValue:d=>d.toFixed(1),onChange:d=>l(u.id,S=>({...S,pulse:{...y,speed:d}}))})}):null,(0,Y.jsxs)("div",{className:"se-ruleHint se-ruleMatches",children:["Matches ",p(u)," of ",v," ",v===1?"object":"objects"," right now."]})]},u.id)}),(0,Y.jsxs)("button",{type:"button",className:"se-animationButton",onClick:c,children:[(0,Y.jsx)(br.Plus,{size:14})," Add rule"]})]})}var Lr=require("lucide-react");var ln=require("react/jsx-runtime"),jR=[{label:"General",icon:(0,ln.jsx)(Lr.Box,{})},{label:"Lighting",icon:(0,ln.jsx)(Lr.Spotlight,{})},{label:"Animations",icon:(0,ln.jsx)(Lr.Clapperboard,{})},{label:"Post Processing",icon:(0,ln.jsx)(Lr.Sparkles,{})},{label:"Annotations",icon:(0,ln.jsx)(Lr.MessageSquareText,{})},{label:"Cinematic",icon:(0,ln.jsx)(Lr.Video,{})},{label:"Rules",icon:(0,ln.jsx)(Lr.Palette,{})}],iM={active:[],play:()=>{},pause:()=>{},stop:()=>{},setSpeed:()=>{},seek:()=>{}},GR=[],HR={};function Ug({config:e,onChange:t,activeSubTab:n,onActiveSubTabChange:i,cameraState:r=null,onPreviewWaypoint:o,animationClipDetails:a=[],materialVariantGroups:s=GR,objectBindings:l=HR,animationPlayback:c=iM}){let[h,p]=(0,wm.useState)("General"),u=n??h,m=c??iM,{tier:f}=Rr(),g=Ai(f,"starter"),b=Ai(f,"growth");(0,wm.useEffect)(()=>{n!==void 0&&p(n)},[n]);let y=v=>{n===void 0&&p(v),i?.(v)};return(0,ln.jsxs)("div",{className:"se-tabContent",children:[(0,ln.jsx)("div",{className:"se-subTabRow",children:jR.map(v=>(0,ln.jsx)("button",{type:"button",title:v.label,"aria-label":v.label,"aria-pressed":u===v.label,className:`se-subTab ${u===v.label?"se-subTab--active":""}`,onClick:()=>y(v.label),children:v.icon},v.label))}),u==="General"&&(0,ln.jsx)(Rg,{config:e,onChange:t,materialVariantGroups:s}),u==="Lighting"&&(0,ln.jsx)(Lg,{config:e,onChange:t}),u==="Animations"&&(g?(0,ln.jsx)(Dg,{config:e,onChange:t,clipDetails:a,active:m.active,play:m.play,pause:m.pause,stop:m.stop,setSpeed:m.setSpeed,seek:m.seek}):(0,ln.jsx)(ir,{requiredTier:"starter",feature:"Animation configuration"})),u==="Post Processing"&&(b?(0,ln.jsx)(kg,{config:e,onChange:t}):(0,ln.jsx)(ir,{requiredTier:"growth",feature:"Post-processing effects"})),u==="Annotations"&&(g?(0,ln.jsx)(Ng,{config:e,onChange:t,cameraState:r,onPreviewView:o}):(0,ln.jsx)(ir,{requiredTier:"starter",feature:"Annotations"})),u==="Cinematic"&&(g?(0,ln.jsx)(Og,{config:e,onChange:t,cameraState:r,onPreviewWaypoint:o}):(0,ln.jsx)(ir,{requiredTier:"starter",feature:"Cinematic camera"})),u==="Rules"&&(g?(0,ln.jsx)(zg,{config:e,onChange:t,objectBindings:l}):(0,ln.jsx)(ir,{requiredTier:"starter",feature:"Style rules"}))]})}var El=require("lucide-react"),cn=require("react/jsx-runtime");function oM({title:e,trailing:t,children:n,disabled:i,open:r,onToggle:o,tooltip:a}){let s=a?`${a}`:e;return(0,cn.jsxs)("div",{className:"bb-materialPanel",children:[(0,cn.jsxs)("button",{type:"button",className:"bb-materialPanelHeader",onClick:o,"aria-expanded":r,title:s,children:[(0,cn.jsxs)("div",{className:"bb-materialPanelTitleWrap",children:[(0,cn.jsx)(El.ChevronDown,{size:14,className:`bb-materialPanelChevron ${r?"bb-materialPanelChevron--open":""}`}),(0,cn.jsx)("span",{className:"bb-materialPanelTitle",children:e}),a?(0,cn.jsx)("span",{className:"bb-materialPanelHelp",title:s,"aria-label":s,role:"img",onClick:l=>l.stopPropagation(),children:(0,cn.jsx)(El.Info,{size:12})}):null]}),t?(0,cn.jsx)("div",{onClick:l=>l.stopPropagation(),children:t}):null]}),r?(0,cn.jsx)("div",{className:"bb-materialPanelBody",style:i?{opacity:.45,pointerEvents:"none"}:void 0,children:n}):null]})}function dr({title:e,open:t,onToggle:n,trailing:i,children:r,tooltip:o}){let a=o?`${e}: ${o}`:e;return(0,cn.jsxs)("div",{className:"bb-section",children:[(0,cn.jsxs)("button",{type:"button",className:"bb-sectionHeaderButton",onClick:n,"aria-expanded":t,title:a,children:[(0,cn.jsxs)("span",{className:"bb-sectionHeaderMain",children:[(0,cn.jsx)(El.ChevronDown,{size:15,className:`bb-sectionChevron ${t?"bb-sectionChevron--open":""}`}),(0,cn.jsx)("h2",{className:"bb-sectionTitle",children:e}),o?(0,cn.jsx)("span",{className:"bb-sectionHelp",title:a,"aria-label":a,role:"img",onClick:s=>s.stopPropagation(),children:(0,cn.jsx)(El.Info,{size:13})}):null]}),i?(0,cn.jsx)("span",{onClick:s=>s.stopPropagation(),children:i}):null]}),t?(0,cn.jsx)("div",{className:"bb-sectionBody",children:r}):null]})}function aM({checked:e,onChange:t,label:n}){return(0,cn.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,cn.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,cn.jsx)("span",{className:"se-switchTrack",children:(0,cn.jsx)("span",{className:"se-switchThumb"})})]})}var jg=require("react"),uM=require("lucide-react");var sM=["front","back","double"],lM=["normal","additive"];var Sm=require("react/jsx-runtime");function Hr({panelKey:e,title:t,tooltip:n,toggleLabel:i,controls:r,children:o,requiredTier:a}){let{openMaterialPanels:s,materialPanelEnabled:l,onToggleMaterialPanel:c,onSetMaterialPanelState:h}=r,p=a?.locked??!1;return(0,Sm.jsx)(oM,{title:t,tooltip:n,disabled:p||!l[e],open:s[e],onToggle:()=>c(e),trailing:(0,Sm.jsx)(aM,{checked:!p&&l[e],onChange:p?()=>{}:u=>h(e,u),label:i??`Toggle ${t}`}),children:p&&a?(0,Sm.jsx)(ir,{requiredTier:a.tier,feature:t}):o})}var So=require("react"),_m=require("react-colorful"),Rl=require("lucide-react");var rt=require("react/jsx-runtime"),Vg=(0,So.createContext)(null);function Rn({label:e,value:t,placeholder:n,onChange:i}){let r=(0,So.useRef)(null),o=(0,So.useContext)(Vg);return(0,rt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,rt.jsx)("label",{className:"bb-label",children:e}),(0,rt.jsxs)("div",{className:"bb-fileField",title:o??void 0,children:[(0,rt.jsx)("input",{className:"bb-input bb-fileField-input",placeholder:n,value:t,disabled:!!o&&!t,onChange:a=>{let s=a.target.value;!s&&t&&yc(t),i(s)}}),(0,rt.jsx)("button",{type:"button",className:"bb-fileFieldButton",disabled:!!o,onClick:()=>r.current?.click(),"aria-label":`Select file for ${e}`,title:`Select file for ${e}`,children:(0,rt.jsx)(Rl.FileUp,{size:20})}),(0,rt.jsx)("input",{ref:r,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif",className:"bb-hiddenInput",onChange:a=>{let s=a.target.files?.[0];if(!s)return;let l=Su(s);t&&t!==l&&yc(t),za(l,URL.createObjectURL(s)),i(l),a.target.value=""}})]})]})}function _o({label:e,value:t,fallback:n="#ffffff",variant:i="swatch",onChange:r}){let[o,a]=(0,So.useState)(!1),s=t||n,l=(0,So.useRef)(null);return(0,rt.jsxs)("div",{className:"bb-field",children:[(0,rt.jsx)("span",{className:"bb-label",children:e}),(0,rt.jsx)("div",{className:"se-fieldInline",children:(0,rt.jsx)("span",{ref:l,className:i==="input"?"bb-colorFieldAnchor":void 0,style:i==="swatch"?{display:"inline-flex"}:void 0,children:(0,rt.jsx)(_m.HexColorInput,{prefixed:!0,className:i==="input"?"bb-input bb-colorInput":"se-swatch","aria-label":e,onClick:()=>a(c=>!c),style:{background:s,color:aa(s)},color:s,onChange:r})})}),o?(0,rt.jsx)(gd,{anchorRef:l,onClose:()=>a(!1),children:(0,rt.jsx)(_m.HexColorPicker,{color:s,onChange:r})}):null]})}function Sd({label:e,checked:t,onChange:n}){return(0,rt.jsxs)("label",{className:"bb-checkbox",children:[(0,rt.jsx)("input",{type:"checkbox",checked:t,onChange:i=>n(i.target.checked)}),e]})}function cM({label:e,value:t,min:n,max:i,step:r,placeholder:o,disabled:a,onChange:s}){return(0,rt.jsxs)("div",{className:"bb-field",children:[(0,rt.jsx)("label",{className:"bb-label",children:e}),(0,rt.jsx)("input",{className:"bb-input",type:"number",min:n,max:i,step:r,placeholder:o,disabled:a,value:t??"",onChange:l=>s(l.target.value===""?void 0:Number(l.target.value))})]})}function WR(e,t){let n=t<1?Math.ceil(-Math.log10(t)):0,i=10**Math.max(n,0);return Math.round(e*i)/i}function Fg({label:e,value:t,min:n,max:i,step:r=.01,disabled:o,onChange:a}){let s=t??0,l=h=>{let p=h;return n!==void 0&&(p=Math.max(n,p)),i!==void 0&&(p=Math.min(i,p)),p},c=h=>{a(l(WR(s+h*r,r)))};return(0,rt.jsxs)("div",{className:"bb-field",children:[(0,rt.jsx)("label",{className:"bb-label",children:e}),(0,rt.jsxs)("div",{className:"bb-numberStepper",children:[(0,rt.jsx)("button",{type:"button",className:"bb-numberStepper-btn",disabled:o,onClick:()=>c(-1),"aria-label":`Decrease ${e}`,title:`Decrease ${e}`,children:(0,rt.jsx)(Rl.Minus,{size:12})}),(0,rt.jsx)("input",{className:"bb-input bb-numberStepper-input",type:"number",min:n,max:i,step:r,disabled:o,value:s,onChange:h=>{h.target.value!==""&&a(l(Number(h.target.value)))}}),(0,rt.jsx)("button",{type:"button",className:"bb-numberStepper-btn",disabled:o,onClick:()=>c(1),"aria-label":`Increase ${e}`,title:`Increase ${e}`,children:(0,rt.jsx)(Rl.Plus,{size:12})})]})]})}function kl({label:e,value:t,options:n,onChange:i}){return(0,rt.jsxs)("div",{className:"bb-field",children:[(0,rt.jsx)("label",{className:"bb-label",children:e}),(0,rt.jsx)("select",{className:"bb-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,rt.jsx)("option",{value:r,children:r},r))})]})}function Ot({label:e,value:t,min:n,max:i,step:r,onChange:o}){return(0,rt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,rt.jsx)("label",{className:"bb-label",children:e}),(0,rt.jsxs)("div",{className:"bb-sliderField",children:[(0,rt.jsx)("input",{className:`bb-slider ${t===void 0?"bb-slider--unset":""}`,type:"range",min:n,max:i,step:r,value:t??n,onChange:s=>o(Number(s.target.value))}),(0,rt.jsx)("input",{className:"bb-input bb-input--compact",type:"number",min:n,max:i,step:r,value:t??"",onChange:s=>o(s.target.value===""?void 0:Number(s.target.value))})]})]})}var W=require("react/jsx-runtime"),dM="This object has no texture coordinates (UVs), so image maps can't be placed on it. Colors and the other settings work, and Decals can put an image on it.";function pM({selectedItem:e,selectedMaterial:t,pbrWorkflow:n,onPbrWorkflowChange:i,openMaterialPanels:r,materialPanelEnabled:o,onToggleMaterialPanel:a,onSetMaterialPanelState:s,updateSelectedMaterial:l,setSelectedTexturePath:c,isTexturePositioningEnabled:h,onConfirmTexturePosition:p,takesImage:u=!0}){let m={openMaterialPanels:r,materialPanelEnabled:o,onToggleMaterialPanel:a,onSetMaterialPanelState:s},{tier:f}=Rr(),g=Ai(f,"starter"),b={tier:"starter",locked:!g},[y,v]=(0,jg.useState)("roughness"),[w,M]=(0,jg.useState)("factor"),_=(d,S)=>{l(e,C=>{if(!C?.texture?.path)return C??{};let T=C.texture.offset??[0,0],E=[T[0],T[1]];return E[d]=S,{...C,texture:{...C.texture,offset:E}}})},x=d=>{l(e,S=>{if(!S?.texture?.path)return S??{};let C=(d%360+360)%360;return{...S,texture:{...S.texture,rotation:C*Math.PI/180}}})},P=()=>{c(e,"texture","")};return(0,W.jsxs)(Vg.Provider,{value:u?null:dM,children:[u?null:(0,W.jsx)("p",{className:"bb-note bb-materialNotice",children:dM}),(0,W.jsx)(Hr,{panelKey:"pbr",title:"PBR Maps",tooltip:"Controls the base color and workflow used for physically based shading.",controls:m,children:g?(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(kl,{label:"Workflow",value:n,options:["metalness","specular"],onChange:i}),(0,W.jsx)("div",{className:"bb-field bb-field--full",children:(0,W.jsx)("p",{className:"bb-note",style:{margin:0},children:n==="metalness"?"Metalness workflow maps directly to the underlying physical material.":"Specular workflow exposes the same physical material with non-metal specular controls; it does not switch to a separate spec/gloss shader."})}),(0,W.jsx)(Rn,{label:n==="specular"?"Albedo texture path":"Base color texture path",placeholder:"materials/oak-wood.jpg",value:t?.texture?.path??"",onChange:d=>c(e,"texture",d)}),t?.texture?.path?(0,W.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,W.jsxs)("div",{className:"bb-fieldLabel",style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,W.jsx)("span",{className:"bb-label",children:"Texture position"}),(0,W.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:P,title:"Remove the base color texture and its position offset",children:[(0,W.jsx)(uM.Trash2,{size:14,style:{marginRight:4,verticalAlign:"-2px"}}),"Remove texture"]})]}),(0,W.jsxs)("div",{className:"bb-grid",style:{marginTop:6},children:[(0,W.jsx)(Fg,{label:"Offset X",value:t?.texture?.offset?.[0]??0,step:.01,onChange:d=>_(0,d)}),(0,W.jsx)(Fg,{label:"Offset Y",value:t?.texture?.offset?.[1]??0,step:.01,onChange:d=>_(1,d)})]}),(0,W.jsx)(Ot,{label:"Rotation",value:((t?.texture?.rotation??0)*180/Math.PI%360+360)%360,min:0,max:360,step:1,onChange:d=>x(d??0)}),h?(0,W.jsx)("button",{type:"button",className:"bb-button bb-button--primary",style:{marginTop:8},onClick:p,title:"Confirm this texture position and exit positioning mode",children:"Done positioning"}):(0,W.jsx)("p",{className:"bb-note",style:{margin:"6px 0 0"},children:"Double-click the object in the preview to drag its texture directly (scroll to zoom), or edit its offset numerically once positioning."})]}):null,(0,W.jsx)(_o,{label:n==="specular"?"Albedo color":"Base color",value:t?.baseColor??"#ffffff",onChange:d=>l(e,S=>({...S,baseColor:d}))}),n==="metalness"?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Ot,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,metalness:d}))}),(0,W.jsx)(Rn,{label:"Metalness map path",placeholder:"materials/body-metalness.jpg",value:t?.metalnessMap?.path??"",onChange:d=>c(e,"metalnessMap",d)})]}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Ot,{label:"Specular intensity",value:t?.specularIntensity,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,specularIntensity:d}))}),(0,W.jsx)(_o,{label:"Specular color",value:t?.specularColor??"#ffffff",onChange:d=>l(e,S=>({...S,specularColor:d}))}),(0,W.jsx)(Rn,{label:"Specular intensity map path",placeholder:"materials/body-specular-intensity.jpg",value:t?.specularIntensityMap?.path??"",onChange:d=>c(e,"specularIntensityMap",d)}),(0,W.jsx)(Rn,{label:"Specular color map path",placeholder:"materials/body-specular-color.jpg",value:t?.specularColorMap?.path??"",onChange:d=>c(e,"specularColorMap",d)})]}),(0,W.jsx)(Ot,{label:"Specular F0 / reflectivity",value:t?.reflectivity,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,reflectivity:d}))})]}):(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(_o,{label:"Base color",value:t?.baseColor??"#ffffff",onChange:d=>l(e,S=>({...S,baseColor:d}))}),(0,W.jsx)(Ot,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,metalness:d}))}),(0,W.jsx)("div",{className:"bb-field bb-field--full",children:(0,W.jsx)(ir,{requiredTier:"starter",feature:"Texture maps, the specular workflow, and reflectivity"})})]})}),(0,W.jsx)(Hr,{panelKey:"roughness",requiredTier:b,title:"Roughness / Glossiness",tooltip:"Adjusts how matte or shiny the surface appears.",toggleLabel:"Toggle Roughness and Glossiness",controls:m,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(kl,{label:"Mode",value:y,options:["roughness","glossiness"],onChange:v}),(0,W.jsx)("div",{className:"bb-field bb-field--full",children:(0,W.jsx)("p",{className:"bb-note",style:{margin:0},children:y==="roughness"?"Roughness: 0 is glossy, 1 is matte.":"Glossiness is the inverse of roughness (glossiness = 1 \u2212 roughness)"})}),y==="roughness"?(0,W.jsx)(Ot,{label:"Roughness",value:t?.roughness,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,roughness:d}))}):(0,W.jsx)(Ot,{label:"Glossiness",value:t?.roughness===void 0?void 0:1-t.roughness,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,roughness:d===void 0?void 0:1-d}))}),(0,W.jsx)(Rn,{label:y==="glossiness"?"Glossiness map path (applied as roughness)":"Roughness map path",placeholder:"materials/body-roughness.jpg",value:t?.roughnessMap?.path??"",onChange:d=>c(e,"roughnessMap",d)})]})}),(0,W.jsx)(Hr,{panelKey:"emission",requiredTier:b,title:"Emission",tooltip:"Makes the material self-illuminated with emissive color and intensity.",controls:m,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(_o,{label:"Emissive color",value:t?.emissive??"#000000",fallback:"#000000",onChange:d=>l(e,S=>({...S,emissive:d}))}),(0,W.jsx)(Ot,{label:"Emissive intensity",value:t?.emissiveIntensity,min:0,max:10,step:.1,onChange:d=>l(e,S=>({...S,emissiveIntensity:d}))}),(0,W.jsx)(Rn,{label:"Emissive map path",placeholder:"materials/body-emissive.jpg",value:t?.emissiveMap?.path??"",onChange:d=>c(e,"emissiveMap",d)})]})}),(0,W.jsx)(Hr,{panelKey:"opacity",requiredTier:b,title:"Opacity",tooltip:"Controls transparency, alpha testing, and blending behavior.",controls:m,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(Ot,{label:"Opacity",value:t?.opacity,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,opacity:d}))}),(0,W.jsx)(Ot,{label:"Alpha test",value:t?.alphaTest,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,alphaTest:d}))}),(0,W.jsx)(Rn,{label:"Alpha map path",placeholder:"materials/body-alpha.png",value:t?.alphaMap?.path??"",onChange:d=>c(e,"alphaMap",d)}),(0,W.jsx)(kl,{label:"Blending mode",value:t?.blendingMode??"normal",options:lM,onChange:d=>l(e,S=>({...S,blendingMode:d}))}),(0,W.jsxs)("div",{className:"bb-field",children:[(0,W.jsx)("label",{className:"bb-label",children:"Alpha hash"}),(0,W.jsx)("div",{className:"bb-checkboxRow",children:(0,W.jsx)(Sd,{label:"Use alpha hash",checked:t?.alphaHash??!1,onChange:d=>l(e,S=>({...S,alphaHash:d}))})})]}),(0,W.jsxs)("div",{className:"bb-field",children:[(0,W.jsx)("label",{className:"bb-label",children:"Dithering"}),(0,W.jsx)("div",{className:"bb-checkboxRow",children:(0,W.jsx)(Sd,{label:"Use dithering",checked:t?.dithering??!1,onChange:d=>l(e,S=>({...S,dithering:d}))})})]})]})}),(0,W.jsxs)(Hr,{panelKey:"normalBump",requiredTier:b,title:"Normal & Bump",tooltip:"Adds surface detail without changing the actual mesh shape.",toggleLabel:"Toggle Normal and Bump",controls:m,children:[(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(Rn,{label:"Normal map path",placeholder:"materials/body-normal.jpg",value:t?.normalMap?.path??"",onChange:d=>c(e,"normalMap",d)}),(0,W.jsx)(Ot,{label:"Normal scale",value:t?.normalScale,min:0,max:5,step:.01,onChange:d=>l(e,S=>({...S,normalScale:d}))}),(0,W.jsx)(Rn,{label:"Bump map path",placeholder:"materials/body-bump.jpg",value:t?.bumpMap?.path??"",onChange:d=>c(e,"bumpMap",d)}),(0,W.jsx)(Ot,{label:"Bump scale",value:t?.bumpScale,min:0,max:5,step:.01,onChange:d=>l(e,S=>({...S,bumpScale:d}))})]}),(0,W.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,W.jsx)(Sd,{label:"Flip normal Y",checked:t?.flipNormalY??!1,onChange:d=>l(e,S=>({...S,flipNormalY:d}))})})]}),(0,W.jsx)(Hr,{panelKey:"displacement",requiredTier:b,title:"Displacement",tooltip:"Offsets geometry using a texture to create real surface height.",controls:m,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(Rn,{label:"Displacement map path",placeholder:"materials/body-displacement.jpg",value:t?.displacementMap?.path??"",onChange:d=>c(e,"displacementMap",d)}),(0,W.jsx)(Ot,{label:"Displacement scale",value:t?.displacementScale,min:-5,max:5,step:.01,onChange:d=>l(e,S=>({...S,displacementScale:d}))}),(0,W.jsx)(Ot,{label:"Displacement bias",value:t?.displacementBias,min:-5,max:5,step:.01,onChange:d=>l(e,S=>({...S,displacementBias:d}))})]})}),(0,W.jsx)(Hr,{panelKey:"ao",requiredTier:b,title:"Ambient Occlusion",tooltip:"Darkens creases and contact areas to add depth.",controls:m,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(Rn,{label:"AO map path",placeholder:"materials/body-ao.jpg",value:t?.aoMap?.path??"",onChange:d=>c(e,"aoMap",d)}),(0,W.jsx)(Ot,{label:"AO intensity",value:t?.aoMapIntensity,min:0,max:5,step:.01,onChange:d=>l(e,S=>({...S,aoMapIntensity:d}))})]})}),(0,W.jsxs)(Hr,{panelKey:"clearcoat",requiredTier:b,title:"Clearcoat",tooltip:"Adds a glossy protective layer on top of the base material.",controls:m,children:[(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(Rn,{label:"Clearcoat map path",placeholder:"materials/body-clearcoat.jpg",value:t?.clearcoatMap?.path??"",onChange:d=>c(e,"clearcoatMap",d)}),(0,W.jsx)(Ot,{label:"Clearcoat",value:t?.clearcoat,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,clearcoat:d}))}),(0,W.jsx)(Rn,{label:"Clearcoat roughness map path",placeholder:"materials/body-clearcoat-roughness.jpg",value:t?.clearcoatRoughnessMap?.path??"",onChange:d=>c(e,"clearcoatRoughnessMap",d)}),(0,W.jsx)(Ot,{label:"Clearcoat roughness",value:t?.clearcoatRoughness,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,clearcoatRoughness:d}))}),(0,W.jsx)(Rn,{label:"Clearcoat normal map path",placeholder:"materials/body-clearcoat-normal.jpg",value:t?.clearcoatNormalMap?.path??"",onChange:d=>c(e,"clearcoatNormalMap",d)}),(0,W.jsx)(Ot,{label:"Clearcoat normal scale",value:t?.clearcoatNormalScale,min:0,max:5,step:.01,onChange:d=>l(e,S=>({...S,clearcoatNormalScale:d}))})]}),(0,W.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,W.jsx)(Sd,{label:"Flip clearcoat normal Y",checked:t?.flipClearcoatNormalY??!1,onChange:d=>l(e,S=>({...S,flipClearcoatNormalY:d}))})})]}),(0,W.jsx)(Hr,{panelKey:"sheen",requiredTier:b,title:"Sheen",tooltip:"Adds a soft fabric-like sheen on grazing angles.",controls:m,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(Ot,{label:"Sheen",value:t?.sheen,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,sheen:d}))}),(0,W.jsx)(_o,{label:"Sheen color",value:t?.sheenColor??"#ffffff",onChange:d=>l(e,S=>({...S,sheenColor:d}))}),(0,W.jsx)(Rn,{label:"Sheen color map path",placeholder:"materials/body-sheen-color.jpg",value:t?.sheenColorMap?.path??"",onChange:d=>c(e,"sheenColorMap",d)}),(0,W.jsx)(Ot,{label:"Sheen roughness",value:t?.sheenRoughness,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,sheenRoughness:d}))}),(0,W.jsx)(Rn,{label:"Sheen roughness map path",placeholder:"materials/body-sheen-roughness.jpg",value:t?.sheenRoughnessMap?.path??"",onChange:d=>c(e,"sheenRoughnessMap",d)})]})}),(0,W.jsx)(Hr,{panelKey:"anisotropy",requiredTier:b,title:"Anisotropy",tooltip:"Stretches reflections in one direction for brushed or fiber-like surfaces.",controls:m,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(Ot,{label:"Intensity",value:t?.anisotropy,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,anisotropy:d}))}),(0,W.jsx)(kl,{label:"Tilt direction",value:w,options:["factor","texture"],onChange:M}),w==="factor"?(0,W.jsx)(Ot,{label:"Rotation (rad)",value:t?.anisotropyRotation,min:0,max:6.28,step:.01,onChange:d=>l(e,S=>({...S,anisotropyRotation:d}))}):(0,W.jsx)(Rn,{label:"Anisotropy map path",placeholder:"materials/body-anisotropy.jpg",value:t?.anisotropyMap?.path??"",onChange:d=>c(e,"anisotropyMap",d)})]})}),(0,W.jsx)(Hr,{panelKey:"transmission",requiredTier:b,title:"Transmission & Volume",tooltip:"Controls glass-like transmission and how light travels through volume.",toggleLabel:"Toggle Transmission and Volume",controls:m,children:(0,W.jsxs)("div",{className:"bb-grid",children:[(0,W.jsx)(Ot,{label:"Transmission",value:t?.transmission,min:0,max:1,step:.01,onChange:d=>l(e,S=>({...S,transmission:d}))}),(0,W.jsx)(Rn,{label:"Transmission map path",placeholder:"materials/body-transmission.jpg",value:t?.transmissionMap?.path??"",onChange:d=>c(e,"transmissionMap",d)}),(0,W.jsx)(Ot,{label:"Thickness",value:t?.thickness,min:0,max:5,step:.01,onChange:d=>l(e,S=>({...S,thickness:d}))}),(0,W.jsx)(Rn,{label:"Thickness map path",placeholder:"materials/body-thickness.jpg",value:t?.thicknessMap?.path??"",onChange:d=>c(e,"thicknessMap",d)}),(0,W.jsx)(_o,{label:"Volume tint",value:t?.attenuationColor??"#ffffff",onChange:d=>l(e,S=>({...S,attenuationColor:d}))}),(0,W.jsx)(cM,{label:"Attenuation distance",value:t?.attenuationDistance,min:0,step:.01,placeholder:"Infinity when unset",onChange:d=>l(e,S=>({...S,attenuationDistance:d}))})]})}),(0,W.jsx)(Hr,{panelKey:"faces",requiredTier:b,title:"Faces Rendering",tooltip:"Chooses which side of the mesh renders and how backfaces are handled.",controls:m,children:(0,W.jsx)("div",{className:"bb-grid",children:(0,W.jsx)(kl,{label:"Side",value:t?.side??"front",options:sM,onChange:d=>l(e,S=>({...S,side:d}))})})})]})}var mM=[{id:"wood",label:"Wood",swatch:"#8b5a2b",material:{baseColor:"#8b5a2b",metalness:0,roughness:.75,reflectivity:.04}},{id:"brushed-metal",label:"Brushed Metal",swatch:"linear-gradient(135deg, #cfcfcf, #8a8a8a)",material:{baseColor:"#c8c8c8",metalness:1,roughness:.35}},{id:"chrome",label:"Polished Chrome",swatch:"linear-gradient(135deg, #ffffff, #9aa0a6)",material:{baseColor:"#e8e8e8",metalness:1,roughness:.05}},{id:"gold",label:"Gold",swatch:"linear-gradient(135deg, #ffe9a8, #c89b2c)",material:{baseColor:"#e6b325",metalness:1,roughness:.2}},{id:"copper",label:"Copper",swatch:"linear-gradient(135deg, #e3a576, #8a4a26)",material:{baseColor:"#b87333",metalness:1,roughness:.3}},{id:"glass",label:"Glass",swatch:"linear-gradient(135deg, rgba(255,255,255,0.9), rgba(180,210,230,0.4))",material:{baseColor:"#ffffff",metalness:0,roughness:.02,reflectivity:.5,opacity:1,transmission:1,thickness:.5,attenuationColor:"#ffffff",attenuationDistance:1}},{id:"frosted-glass",label:"Frosted Glass",swatch:"linear-gradient(135deg, rgba(255,255,255,0.85), rgba(210,225,235,0.6))",material:{baseColor:"#ffffff",metalness:0,roughness:.4,reflectivity:.3,opacity:1,transmission:.9,thickness:.5}},{id:"plastic-glossy",label:"Glossy Plastic",swatch:"#dadada",material:{baseColor:"#dadada",metalness:0,roughness:.25,reflectivity:.5,clearcoat:.3,clearcoatRoughness:.1}},{id:"plastic-matte",label:"Matte Plastic",swatch:"#9a9a9a",material:{baseColor:"#9a9a9a",metalness:0,roughness:.85,reflectivity:.04}},{id:"rubber",label:"Rubber",swatch:"#1a1a1a",material:{baseColor:"#1a1a1a",metalness:0,roughness:.9,reflectivity:.02}},{id:"fabric",label:"Fabric",swatch:"#9c8a6b",material:{baseColor:"#9c8a6b",metalness:0,roughness:.95,sheen:.4,sheenColor:"#ffffff",sheenRoughness:.6}},{id:"ceramic",label:"Ceramic",swatch:"#f5f5f0",material:{baseColor:"#f5f5f0",metalness:0,roughness:.15,clearcoat:.6,clearcoatRoughness:.1}},{id:"concrete",label:"Concrete",swatch:"#9b9b93",material:{baseColor:"#9b9b93",metalness:0,roughness:.95,reflectivity:.03}}];var Ll=require("react/jsx-runtime");function hM({disabled:e,onApply:t}){return(0,Ll.jsx)("div",{className:"bb-presetGallery",children:mM.map(n=>(0,Ll.jsxs)("button",{type:"button",className:"bb-presetSwatch",disabled:e,title:`Apply ${n.label} preset`,onClick:()=>t(n.material),children:[(0,Ll.jsx)("span",{className:"bb-presetSwatchColor",style:{background:n.swatch}}),(0,Ll.jsx)("span",{className:"bb-presetSwatchLabel",children:n.label})]},n.id))})}var ai=require("react/jsx-runtime");function fM({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,idError:o}){return(0,ai.jsx)(dr,{title:"Identity",open:n,onToggle:i,children:(0,ai.jsxs)("div",{className:"bb-grid",children:[(0,ai.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,ai.jsx)("label",{className:"bb-label",children:"Model Node ID"}),(0,ai.jsx)("span",{className:"bb-note",children:"This is the exact mesh name from the imported model and stays locked."}),(0,ai.jsx)("input",{className:"bb-input bb-readonly",value:t.modelObjectId,readOnly:!0})]}),(0,ai.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,ai.jsx)("label",{className:"bb-label",children:"ID"}),(0,ai.jsx)("input",{className:`bb-input ${o?"bb-input--error":""}`,value:t.id,onChange:a=>r(e,s=>({...s,id:a.target.value}))}),o?(0,ai.jsx)("span",{className:"bb-status bb-status--error",children:o}):null]})]})})}var _d=require("react");var It=require("react/jsx-runtime");function gM({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[o,a]=(0,_d.useState)(t.group??""),[s,l]=(0,_d.useState)(t.tags?.join(", ")??"");(0,_d.useEffect)(()=>{a(t.group??""),l(t.tags?.join(", ")??"")},[e,t.group,t.tags]);let c=()=>{r(e,p=>({...p,group:o.trim()||void 0}))},h=()=>{let p=[...new Set(s.split(",").map(u=>u.trim()).filter(Boolean))];r(e,u=>({...u,tags:p.length>0?p:void 0}))};return(0,It.jsxs)(dr,{title:"Basics",open:n,onToggle:i,children:[(0,It.jsxs)("div",{className:"bb-grid",children:[(0,It.jsxs)("div",{className:"bb-field",children:[(0,It.jsx)("label",{className:"bb-label",children:"Label"}),(0,It.jsx)("input",{className:"bb-input",value:t.label??"",onChange:p=>r(e,u=>({...u,label:p.target.value}))})]}),(0,It.jsxs)("div",{className:"bb-field",children:[(0,It.jsx)("label",{className:"bb-label",children:"Type"}),(0,It.jsx)("input",{className:"bb-input",list:"binding-type-suggestions",value:t.type??"other",onChange:p=>r(e,u=>({...u,type:p.target.value}))}),(0,It.jsx)("datalist",{id:"binding-type-suggestions",children:Q_.map(p=>(0,It.jsx)("option",{value:p},p))})]}),(0,It.jsxs)("div",{className:"bb-field",children:[(0,It.jsx)("label",{className:"bb-label",children:"Status"}),(0,It.jsx)("select",{className:"bb-select",value:t.status??"normal",onChange:p=>r(e,u=>({...u,status:p.target.value})),children:ym.map(p=>(0,It.jsx)("option",{value:p,children:p},p))})]}),(0,It.jsxs)("div",{className:"bb-field",children:[(0,It.jsx)("label",{className:"bb-label",children:"Group"}),(0,It.jsx)("input",{className:"bb-input",placeholder:"paint",value:o,onChange:p=>a(p.target.value),onBlur:c,onKeyDown:p=>{p.key==="Enter"&&p.currentTarget.blur()}})]}),(0,It.jsxs)("div",{className:"bb-field",children:[(0,It.jsx)("label",{className:"bb-label",children:"Tags"}),(0,It.jsx)("input",{className:"bb-input",placeholder:"exterior, configurable",value:s,onChange:p=>l(p.target.value),onBlur:h,onKeyDown:p=>{p.key==="Enter"&&p.currentTarget.blur()}})]})]}),(0,It.jsxs)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:[(0,It.jsxs)("label",{className:"bb-checkbox",children:[(0,It.jsx)("input",{type:"checkbox",checked:t.selectable??!1,onChange:p=>r(e,u=>({...u,selectable:p.target.checked}))}),"selectable"]}),(0,It.jsxs)("label",{className:"bb-checkbox",children:[(0,It.jsx)("input",{type:"checkbox",checked:t.hoverable??!1,onChange:p=>r(e,u=>({...u,hoverable:p.target.checked}))}),"hoverable"]}),(0,It.jsxs)("label",{className:"bb-checkbox",children:[(0,It.jsx)("input",{type:"checkbox",checked:t.visible??!1,onChange:p=>r(e,u=>({...u,visible:p.target.checked}))}),"visible"]})]})]})}var Mm=require("react");var lt=require("react/jsx-runtime"),bM=Ia.filter(e=>e.handling==="viewer"),XR=Ia.filter(e=>e.handling==="host");function vM({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,takesImage:o=!0}){let[a,s]=(0,Mm.useState)(new Set);(0,Mm.useEffect)(()=>{s(new Set)},[e]);let l=t.actions??[],c=(u,m)=>r(e,f=>({...f,actions:(f.actions??[]).map((g,b)=>b===u?m(g):g)})),h=u=>{r(e,m=>({...m,actions:(m.actions??[]).filter((f,g)=>g!==u)})),s(m=>{let f=new Set;return m.forEach(g=>{g<u?f.add(g):g>u&&f.add(g-1)}),f})},p=(u,m)=>s(f=>{let g=new Set(f);return m?g.add(u):g.delete(u),g});return(0,lt.jsxs)(dr,{title:"Actions",open:n,onToggle:i,children:[(0,lt.jsx)("div",{className:"bb-actionList",children:l.map((u,m)=>{let f=hc(u.id),g=a.has(m)||!f,b=u.id.trim(),y=f?null:Ey(u.id),v=b.length>0&&l.some((w,M)=>M!==m&&w.id.trim()===b);return(0,lt.jsxs)("div",{className:"bb-actionCard",children:[(0,lt.jsxs)("div",{className:"bb-actionCardHeader",children:[(0,lt.jsxs)("div",{className:"bb-actionCardTitle",children:["Action ",m+1]}),(0,lt.jsx)("div",{className:"bb-actionCardMeta",children:u.type})]}),(0,lt.jsxs)("div",{className:"bb-actionGrid",children:[(0,lt.jsxs)("div",{className:"bb-field",children:[(0,lt.jsx)("label",{className:"bb-label",children:"Action ID"}),(0,lt.jsxs)("select",{className:"bb-select",value:g?fu:u.id,onChange:w=>{let M=w.target.value;if(M===fu){p(m,!0);return}p(m,!1);let _=hc(M);c(m,x=>({...x,id:M,label:_&&kh(x.label)?_.label:x.label}))},children:[(0,lt.jsx)("optgroup",{label:"Handled by the viewer",children:bM.map(w=>(0,lt.jsx)("option",{value:w.id,children:w.id},w.id))}),(0,lt.jsx)("optgroup",{label:"Handled by your app",children:XR.map(w=>(0,lt.jsx)("option",{value:w.id,children:w.id},w.id))}),(0,lt.jsx)("option",{value:fu,children:"Custom\u2026"})]})]}),g?(0,lt.jsxs)("div",{className:"bb-field",children:[(0,lt.jsx)("label",{className:"bb-label",children:"Custom action ID"}),(0,lt.jsx)("input",{className:"bb-input",value:u.id,placeholder:"open-datasheet",onChange:w=>{p(m,!0),c(m,M=>({...M,id:w.target.value}))}})]}):null,(0,lt.jsxs)("div",{className:"bb-field",children:[(0,lt.jsx)("label",{className:"bb-label",children:"Label"}),(0,lt.jsx)("input",{className:"bb-input",value:u.label,onChange:w=>c(m,M=>({...M,label:w.target.value}))})]}),f?.id==="change-material"&&!o?(0,lt.jsx)("span",{className:"bb-note",style:{color:"#fcd34d"},children:"This object has no texture coordinates, so an image picked here can't be placed on it, and the viewer says so. Change Color and Add Image work."}):f?(0,lt.jsx)("span",{className:"bb-note",children:f.description}):b.length===0?(0,lt.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"An action ID is required, the button renders but can never be identified in onAction."}):(0,lt.jsxs)("span",{className:"bb-note",style:{color:"#fcd34d"},children:["Unrecognised ID, the viewer has no built-in behavior for it. Add declarative effects and execute them with useViewerActions, or handle it in onAction.",y?(0,lt.jsxs)(lt.Fragment,{children:[" Did you mean ",(0,lt.jsx)("button",{type:"button",className:"bb-linkButton",onClick:()=>{p(m,!1);let w=hc(y);c(m,M=>({...M,id:y,label:w&&kh(M.label)?w.label:M.label}))},children:y}),"?"]}):null]}),u.effects?.length?(0,lt.jsxs)("span",{className:"bb-note",children:[u.effects.length," declarative effect",u.effects.length===1?"":"s",", execute with useViewerActions."]}):null,v?(0,lt.jsx)("span",{className:"bb-note",style:{color:"#fcd34d"},children:"Another action on this binding uses the same ID, they will render as two identical buttons."}):null]}),(0,lt.jsx)("div",{className:"bb-actionFooter",children:(0,lt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-actionRemove",onClick:()=>h(m),children:"Remove Action"})})]},m)})}),(0,lt.jsx)("div",{style:{marginTop:10},children:(0,lt.jsx)("button",{type:"button",className:"bb-button",onClick:()=>{let u=bM.find(m=>!l.some(f=>f.id===m.id));r(e,m=>({...m,actions:[...m.actions??[],{id:u?.id??"",label:u?.label??"New Action",type:"command"}]})),u||p(l.length,!0)},children:"Add Action"})})]})}var xM=require("react"),da=require("lucide-react");var it=require("react/jsx-runtime"),yM=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function wM({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,placement:o,onPlacementChange:a,defaultSize:s,onImageFile:l,onNudge:c}){let{tier:h}=Rr(),p=(0,xM.useRef)(null),u=t.decals??[],m=o?.nodeKey===e?o:null,f=y=>r(e,v=>({...v,decals:y.length>0?y:void 0})),g=(y,v)=>f(u.map(w=>w.id===y?{...w,...v}:w)),b=y=>{y.image&&yc(y.image),m?.decal.id===y.id&&a(null),f(u.filter(v=>v.id!==y.id))};return(0,it.jsx)(dr,{title:"Decals",open:n,onToggle:i,tooltip:"Print a logo, image, or text on the selected object's surface.",children:Ai(h,"starter")?(0,it.jsxs)(it.Fragment,{children:[(0,it.jsxs)("div",{className:"bb-decalActions",children:[(0,it.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:()=>p.current?.click(),children:[(0,it.jsx)(da.ImagePlus,{size:15})," Add image"]}),(0,it.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:()=>a({nodeKey:e,decal:{id:yM(),text:"Your text",color:"#ffffff",size:s}}),children:[(0,it.jsx)(da.Type,{size:15})," Add text"]}),(0,it.jsx)("input",{ref:p,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif,image/svg+xml",className:"bb-hiddenInput",onChange:y=>{let v=y.target.files?.[0];if(y.target.value="",!v)return;let w=Su(v);za(w,URL.createObjectURL(v)),l?.(w,v),a({nodeKey:e,decal:{id:yM(),image:w,size:s}})}})]}),u.length===0&&!m?(0,it.jsx)("div",{className:"bb-decalEmpty",children:"No decals on this object yet."}):null,u.map(y=>(0,it.jsxs)("div",{className:"bb-decalCard",children:[(0,it.jsxs)("div",{className:"bb-decalCardHeader",children:[(0,it.jsx)("span",{className:"bb-decalKind",children:y.image?"Image":"Text"}),(0,it.jsx)("span",{className:"bb-decalName",title:y.image??y.text,children:y.image??y.text}),(0,it.jsx)("button",{type:"button",className:"bb-iconButton",title:"Move: drag the decal in the preview","aria-label":"Move decal","aria-pressed":m?.decal.id===y.id,onClick:()=>{let{position:v,normal:w,...M}=y;a(m?.decal.id===y.id?null:{nodeKey:e,decal:M,moving:!0})},children:(0,it.jsx)(da.Move,{size:15})}),(0,it.jsx)("button",{type:"button",className:"bb-iconButton bb-iconButton--danger",title:"Delete decal","aria-label":"Delete decal",onClick:()=>b(y),children:(0,it.jsx)(da.Trash2,{size:15})})]}),(0,it.jsx)(gu,{onNudge:v=>c(y.id,v)}),(0,it.jsxs)("div",{className:"bb-grid",children:[y.image?null:(0,it.jsxs)(it.Fragment,{children:[(0,it.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,it.jsx)("label",{className:"bb-label",children:"Text"}),(0,it.jsx)("input",{className:"bb-input",value:y.text??"",onChange:v=>g(y.id,{text:v.target.value})})]}),(0,it.jsx)(_o,{label:"Colour",variant:"input",value:y.color??"#ffffff",onChange:v=>g(y.id,{color:v})}),(0,it.jsxs)("div",{className:"bb-field",children:[(0,it.jsx)("label",{className:"bb-label",children:"Weight"}),(0,it.jsxs)("select",{className:"bb-input bb-decalWeight",value:y.fontWeight??"bold",onChange:v=>g(y.id,{fontWeight:v.target.value}),children:[(0,it.jsx)("option",{value:"bold",children:"Bold"}),(0,it.jsx)("option",{value:"normal",children:"Regular"})]})]})]}),(0,it.jsx)(Ot,{label:"Size",value:Number(y.size.toFixed(4)),min:Number((s/20).toPrecision(2)),max:Number((s*6).toPrecision(2)),step:Number((s/50).toPrecision(1)),onChange:v=>v!==void 0&&v>0&&g(y.id,{size:v})}),(0,it.jsx)(Ot,{label:"Rotation (\xB0)",value:Math.round((y.rotation??0)*180/Math.PI),min:-180,max:180,step:1,onChange:v=>g(y.id,{rotation:(v??0)*Math.PI/180})}),(0,it.jsx)(Ot,{label:"Opacity",value:y.opacity??1,min:0,max:1,step:.05,onChange:v=>g(y.id,{opacity:v??1})})]})]},y.id))]}):(0,it.jsx)(ir,{requiredTier:"starter",feature:"Decals"})})}var Cm=require("lucide-react");var Bt=require("react/jsx-runtime");function SM({selectedBinding:e,open:t,onToggle:n,cameraState:i,formattedCameraState:r,savedCameraPosition:o,onSaveCameraPosition:a,onGoToSavedCamera:s,onClearSavedCamera:l,onResetView:c,onFitScene:h}){return(0,Bt.jsxs)(dr,{title:"Camera Position",open:t,onToggle:n,children:[(0,Bt.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Bt.jsx)("span",{className:"bb-cameraLiveBadge",children:"LIVE"}),(0,Bt.jsxs)("div",{className:"se-waypointBody",children:[(0,Bt.jsx)("div",{className:"bb-cameraWaypointLabel",children:"Current view"}),i?(0,Bt.jsxs)(Bt.Fragment,{children:[(0,Bt.jsxs)("div",{className:"se-waypointCoords",children:["pos ",r?.position]}),(0,Bt.jsxs)("div",{className:"se-waypointCoords",children:["look ",r?.target]})]}):(0,Bt.jsx)("div",{className:"se-waypointCoords",children:"Move the camera to see live position"})]})]}),(0,Bt.jsxs)("div",{className:"bb-cameraControls bb-cameraControls--centered",children:[(0,Bt.jsx)("button",{type:"button",className:"bb-button bb-button--primary",onClick:a,disabled:!i,children:"Save"}),(0,Bt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:c,children:"Reset View"}),(0,Bt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:h,children:"Fit Scene"})]}),o?.position&&o?.target&&(0,Bt.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Bt.jsx)("span",{className:"bb-cameraSavedBadge",children:"SAVED"}),(0,Bt.jsxs)("div",{className:"se-waypointBody",children:[(0,Bt.jsxs)("div",{className:"bb-cameraWaypointLabel",children:["For ",e.label]}),(0,Bt.jsxs)("div",{className:"se-waypointCoords",children:["pos [",o.position.map(p=>p.toFixed(1)).join(", "),"]"]}),(0,Bt.jsxs)("div",{className:"se-waypointCoords",children:["look [",o.target.map(p=>p.toFixed(1)).join(", "),"]"]})]}),(0,Bt.jsxs)("div",{className:"se-waypointActions",children:[(0,Bt.jsx)("button",{className:"se-waypointAction",onClick:s,title:"Fly camera to the saved position",children:(0,Bt.jsx)(Cm.MapPin,{size:15})}),(0,Bt.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:l,title:"Delete saved position",children:(0,Bt.jsx)(Cm.Trash2,{size:15})})]})]}),(0,Bt.jsx)("span",{className:"bb-note",children:'Tip: Position the camera how you want, then click "Save" to store this position for the selected object. The camera position updates in real-time as you navigate.'})]})}var Dl=require("react"),Tm=require("lucide-react");var ct=require("react/jsx-runtime"),_M=["X","Y","Z"];var qR=.1;function Gg(e){let t=e%360;return t<0?t+360:t}function MM(e){return Gg(e*180/Math.PI)}function CM(e){return e*Math.PI/180}function $R(e,t,n){let i=[...e],r=MM(e[t]);return i[t]=CM(Gg(r+n)),i}function TM({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:o,formatValue:a=c=>Number(c.toFixed(3)),ariaLabel:s,className:l}){let c=a(e),[h,p]=(0,Dl.useState)(String(c)),u=(0,Dl.useRef)(!1);return(0,Dl.useLayoutEffect)(()=>{u.current||p(String(c))},[c]),(0,ct.jsx)("input",{type:"number",className:l,step:i,min:t===-1/0?void 0:t,max:n===1/0?void 0:n,value:h,disabled:r,"aria-label":s,onFocus:()=>{u.current=!0},onChange:m=>{let f=m.target.value;if(p(f),f===""||f==="-")return;let g=Number(f);if(Number.isFinite(g)){let b=Math.max(t,Math.min(n,g));o(b)}},onBlur:()=>{u.current=!1,p(String(a(e)))}})}function YR({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:o,formatValue:a=l=>Number(l.toFixed(3)),label:s}){return(0,ct.jsx)("div",{className:"bb-transformAxesGrid",children:_M.map((l,c)=>(0,ct.jsxs)("div",{className:"bb-transformAxis",children:[(0,ct.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:l}),(0,ct.jsx)("div",{className:"bb-transformAxisControl",children:(0,ct.jsx)(TM,{className:"se-numberInput bb-transformNumberInput",step:i,min:t,max:n,value:e[c],disabled:r,formatValue:a,ariaLabel:`${l} ${s?.toLowerCase()||""}`,onChange:h=>{let p=[...e];p[c]=h,o(p)}})})]},l))})}function PM({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,moveModeEnabled:o,onToggleMoveMode:a,transformSpace:s,onTransformSpaceChange:l,originalTransform:c}){let h=t.transform?.rotation??c?.rotation??[0,0,0],p=t.transform?.position??c?.position??[0,0,0],u=(v,w)=>{let M=v.transform?.rotation??c?.rotation??[0,0,0],_=v.transform?.position??c?.position??[0,0,0],x=v.transform?.scale??c?.scale??[1,1,1],P=c?.pivotLocal??[0,0,0],d=mS(_,M,w,x,P,c?.rotationOrder??"XYZ");return{...v,transform:{...v.transform,position:d,rotation:w}}},m=(v,w)=>{e&&r(e,M=>{let _=M.transform?.rotation??c?.rotation??[0,0,0],x=$R(_,v,w);return u(M,x)})},f=(v,w)=>{e&&r(e,M=>{let x=[...M.transform?.rotation??c?.rotation??[0,0,0]];return x[v]=CM(Gg(w)),u(M,x)})},g=(v,w)=>{e&&r(e,M=>{let x=[...M.transform?.position??c?.position??[0,0,0]];return x[v]=w,{...M,transform:{...M.transform,position:x}}})},b=(v,w)=>{e&&g(v,p[v]+w)},y=()=>{!e||!c||r(e,v=>{let w={...v.transform};return delete w.position,delete w.rotation,{...v,transform:Object.keys(w).length>0?w:void 0}})};return(0,ct.jsxs)(dr,{title:"Move & Rotate",open:n,onToggle:i,tooltip:"Enable the transform gizmo to move or rotate the selected mesh on any axis. Rotation uses the object's visible center while exported position and rotation remain local GLTF transforms.",children:[(0,ct.jsxs)("div",{className:"se-field",children:[(0,ct.jsxs)("div",{className:"se-fieldLabel",children:[(0,ct.jsxs)("span",{children:[(0,ct.jsx)(Tm.Move3d,{size:14,style:{marginRight:6,verticalAlign:"-2px"}}),"Transform gizmo"]}),(0,ct.jsxs)("label",{className:"se-switch","aria-label":"Toggle move mode",children:[(0,ct.jsx)("input",{type:"checkbox",checked:o,onChange:v=>a(v.target.checked)}),(0,ct.jsx)("span",{className:"se-switchTrack",children:(0,ct.jsx)("span",{className:"se-switchThumb"})})]})]}),(0,ct.jsx)("span",{className:"bb-note",children:"Select a mesh \xB7 drag the colored arrows or planes to move"})]}),(0,ct.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,ct.jsx)("div",{className:"se-fieldLabel",children:(0,ct.jsx)("span",{children:"Axis space"})}),(0,ct.jsx)("div",{className:"se-segmentedControl",children:["world","local"].map(v=>(0,ct.jsx)("button",{type:"button",className:`se-segmentedOption ${s===v?"se-segmentedOption--active":""}`,onClick:()=>l(v),children:v},v))})]}),(0,ct.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,ct.jsx)("div",{className:"se-fieldLabel",children:(0,ct.jsx)("span",{children:"Rotation (degrees)"})}),(0,ct.jsx)("div",{className:"bb-transformAxesGrid",children:_M.map((v,w)=>{let M=Math.round(MM(h[w]));return(0,ct.jsxs)("div",{className:"bb-transformAxis",children:[(0,ct.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:v}),(0,ct.jsx)("div",{className:"bb-transformAxisControl",children:(0,ct.jsx)(TM,{className:"se-numberInput bb-transformNumberInput",step:1,min:0,max:359,value:M,disabled:!e,formatValue:_=>Math.round(_),ariaLabel:`${v} rotation in degrees`,onChange:_=>f(w,_)})})]},v)})})]}),(0,ct.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,ct.jsx)("div",{className:"se-fieldLabel",children:(0,ct.jsx)("span",{children:"Position"})}),(0,ct.jsx)(YR,{value:p,min:-1/0,max:1/0,step:qR,disabled:!e,label:"position",onChange:v=>{e&&r(e,w=>({...w,transform:{...w.transform,position:v}}))}})]}),(0,ct.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",style:{marginTop:10,display:"inline-flex",alignItems:"center",gap:6},disabled:!e||!c,onClick:y,title:"Restore this node's position and rotation to what they were in the original model",children:[(0,ct.jsx)(Tm.RotateCcw,{size:14}),"Restore original position & rotation"]})]})}var ps=require("react"),AM=require("lucide-react");var wn=require("react/jsx-runtime"),EM=(0,ps.memo)(KR);function KR({bindings:e,selectedItem:t,onSelect:n,onHover:i,isOpen:r=!0,onToggle:o,isolatedItem:a=null,onIsolate:s}){let[l,c]=(0,ps.useState)(""),h=(0,ps.useMemo)(()=>Object.keys(e),[e]),p=(0,ps.useMemo)(()=>{let u=l.trim().toLowerCase();return u?h.filter(m=>{let f=e[m];return m.toLowerCase().includes(u)||f.label?.toLowerCase().includes(u)||(f.type??"other").toLowerCase().includes(u)}):h},[e,h,l]);return(0,wn.jsxs)("aside",{className:`bb-sidebar bb-sidebar--right ${r?"":"bb-sidebar--collapsed"}`,children:[(0,wn.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!r&&(0,wn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>o?.(!0),"aria-label":"Open scene nodes sidebar",title:"Open scene nodes",children:"\u2190"}),r&&(0,wn.jsxs)(wn.Fragment,{children:[(0,wn.jsxs)("div",{children:[(0,wn.jsx)("div",{className:"bb-sectionKicker",children:"Scene Nodes"}),(0,wn.jsxs)("div",{className:"bb-sectionHeading",children:[p.length," visible entries"]})]}),(0,wn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>o?.(!1),"aria-label":"Close scene nodes sidebar",title:"Close scene nodes",children:"\u2192"})]})]}),r&&(0,wn.jsxs)("section",{className:"bb-nodeList",children:[(0,wn.jsx)("div",{className:"bb-search",children:(0,wn.jsx)("input",{className:"bb-input",placeholder:"Search nodes, labels, or types",value:l,onChange:u=>c(u.target.value)})}),(0,wn.jsx)("div",{className:"bb-nodeItems",children:p.map(u=>{let m=e[u],f=u===t,g=u===a;return(0,wn.jsxs)("div",{className:`bb-nodeRow ${a&&!g?"bb-nodeRow--setAside":""}`,children:[(0,wn.jsxs)("button",{type:"button",className:`bb-nodeButton ${f?"bb-nodeButton--active":""}`,onClick:()=>n(u),onMouseEnter:()=>i?.(u),onMouseLeave:()=>i?.(null),children:[(0,wn.jsx)("span",{className:"bb-nodeName",children:u}),(0,wn.jsxs)("span",{className:"bb-nodeMeta",children:[m.type??"other",m.label===bg(u)?"":m.label||"\xB7 Untitled"]})]}),s?(0,wn.jsx)("button",{type:"button",className:`bb-nodeIsolate ${g?"bb-nodeIsolate--active":""}`,onClick:()=>s(g?null:u),title:g?"Show all":"Isolate in the preview","aria-label":`${g?"Show all":"Isolate"} ${u}`,"aria-pressed":g,children:(0,wn.jsx)(AM.Focus,{size:14,"aria-hidden":"true"})}):null]},u)})})]})]})}var ua=require("react/jsx-runtime");function Hg({title:e,label:t,open:n,onToggle:i,draft:r,error:o,example:a,onDraftChange:s,onCommit:l}){return(0,ua.jsx)(dr,{title:e,open:n,onToggle:i,children:(0,ua.jsxs)("div",{className:"bb-field",children:[(0,ua.jsx)("label",{className:"bb-label",children:t}),(0,ua.jsx)("textarea",{className:"bb-textarea",value:r,onChange:c=>s(c.target.value),onBlur:l}),o?(0,ua.jsx)("span",{className:"bb-status bb-status--error",children:o}):(0,ua.jsxs)("span",{className:"bb-note",children:["Use a JSON object like ",a,"."]})]})})}function RM(e,t){let n=new Map(e.animations.clips.map(o=>[o.sourceName,o])),i=t.map(({sourceName:o})=>n.get(o)??{sourceName:o,displayName:o,hidden:!1,loopMode:"repeat",speed:1}),r=e.animations.autoplayClip&&i.some(o=>o.sourceName===e.animations.autoplayClip&&!o.hidden)?e.animations.autoplayClip:null;return{clips:i,autoplayClip:r}}function Pm(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Md(e,t){if(!Pm(e)||!Pm(t))return t??e;let n={...e};for(let[i,r]of Object.entries(t)){let o=n[i];n[i]=Pm(o)&&Pm(r)?Md(o,r):r}return n}var Hi=require("react"),ZR=100;function JR(e,t){switch(t.type){case"set":{let n=typeof t.updater=="function"?t.updater(e.present):t.updater;if(n===e.present)return e;let i=t.track?e.edits+1:e.edits,r=!t.track&&e.edits===0?n:e.baseline;return t.coalesce?{...e,present:n,future:[],edits:i,baseline:r}:{past:[...e.past,e.present].slice(-ZR),present:n,future:[],edits:i,baseline:r}}case"undo":{if(e.past.length===0)return e;let n=e.past[e.past.length-1];return{...e,past:e.past.slice(0,-1),present:n,future:[e.present,...e.future],edits:e.edits+1}}case"redo":{if(e.future.length===0)return e;let[n,...i]=e.future;return{...e,past:[...e.past,e.present],present:n,future:i,edits:e.edits+1}}case"reset":return{past:[],present:t.value,future:[],edits:t.track?e.edits+1:0,baseline:t.track?e.baseline:t.value}}}function Wg(e,t=600){let[n,i]=(0,Hi.useReducer)(JR,{past:[],present:e,future:[],edits:0,baseline:e}),r=(0,Hi.useRef)(0),o=(0,Hi.useCallback)(h=>{let p=Date.now(),u=p-r.current<t;r.current=p,i({type:"set",updater:h,coalesce:u,track:!0})},[t]),a=(0,Hi.useCallback)(h=>{let p=Date.now()-r.current<t;i({type:"set",updater:h,coalesce:p,track:!1})},[t]),s=(0,Hi.useCallback)(()=>{r.current=0,i({type:"undo"})},[]),l=(0,Hi.useCallback)(()=>{r.current=0,i({type:"redo"})},[]),c=(0,Hi.useCallback)((h,p)=>{r.current=0,i({type:"reset",value:h,track:p?.asEdit??!1})},[]);return{value:n.present,setValue:o,setValueUntracked:a,undo:s,redo:l,reset:c,canUndo:n.past.length>0,canRedo:n.future.length>0,edits:n.edits,baseline:n.baseline}}var Nl=require("react");var QR=500;function kM({autosaveEnabled:e,hasEdits:t,modelUrl:n,bindings:i,sceneConfig:r,onTextureUpload:o,modelSourceRef:a,pendingLoadRef:s,storedModelKeyRef:l,pendingAutosaveRef:c,autosaveFailureShownRef:h,setStatusMessage:p,setStatusTone:u}){let m=(0,Nl.useCallback)(async(f,g)=>{if(o)return o(f,g);let b=URL.createObjectURL(f);if(e)try{await mm(b,f)}catch(y){console.warn("[BindingBuilder] Could not store texture file for autosave:",y)}return b},[o,e]);return(0,Nl.useEffect)(()=>{if(!e||!t||!n)return;let f=a.current;if(!f)return;let g=()=>{if(c.current===g&&(c.current=null),s.current)return;let{model:y,file:v}=f,w=y.kind==="file"&&l.current!==y.key?v:void 0;h_({model:y,bindings:i,sceneConfig:r},w).then(()=>{l.current=y.kind==="file"?y.key:null,h.current=!1}).catch(M=>{console.warn("[BindingBuilder] Autosave failed:",M),!h.current&&(h.current=!0,p("Couldn't autosave this session \u2014 the browser refused to store it, possibly for lack of space. Export your work to keep it."),u("error"))})};c.current=g;let b=window.setTimeout(g,QR);return()=>window.clearTimeout(b)},[e,t,n,i,r]),(0,Nl.useEffect)(()=>{if(!e)return;let f=()=>c.current?.(),g=()=>{document.visibilityState==="hidden"&&f()};return window.addEventListener("pagehide",f),document.addEventListener("visibilitychange",g),()=>{window.removeEventListener("pagehide",f),document.removeEventListener("visibilitychange",g),f()}},[e]),(0,Nl.useEffect)(()=>{if(!e||!n||!t)return;let f=g=>{c.current?.(),g.preventDefault(),g.returnValue=""};return window.addEventListener("beforeunload",f),()=>window.removeEventListener("beforeunload",f)},[e,n,t]),{handleTextureUpload:m}}var ma=require("lucide-react");var Ol=require("react"),pa=require("lucide-react"),Ei=require("react/jsx-runtime");function LM({disabled:e,exporting:t,onExportJson:n,onExportTs:i}){let[r,o]=(0,Ol.useState)(!1),a=(0,Ol.useRef)(null);return(0,Ol.useEffect)(()=>{if(!r)return;let s=l=>{a.current?.contains(l.target)||o(!1)};return window.addEventListener("pointerdown",s),()=>window.removeEventListener("pointerdown",s)},[r]),(0,Ei.jsxs)("div",{className:"bb-exportMenuWrapper",ref:a,children:[(0,Ei.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:e||t,onClick:()=>o(s=>!s),title:"Export",children:[(0,Ei.jsx)(pa.Download,{size:14}),t?"Exporting\u2026":"Export",(0,Ei.jsx)(pa.ChevronDown,{size:12})]}),r&&(0,Ei.jsxs)("div",{className:"bb-exportMenu",children:[(0,Ei.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{o(!1),n()},children:[(0,Ei.jsx)(pa.FileJson,{size:14}),"JSON"]}),(0,Ei.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{o(!1),i()},children:[(0,Ei.jsx)(pa.FileCode2,{size:14}),"TypeScript"]})]})]})}var vr=require("react/jsx-runtime");function Xg({canUndo:e,canRedo:t,onUndo:n,onRedo:i,onReset:r,resetDisabled:o,resetTitle:a,onImport:s,importDisabled:l,importTitle:c,exportDisabled:h,exporting:p,onExportJson:u,onExportTs:m}){return(0,vr.jsxs)("div",{className:"bb-toolbar",children:[(0,vr.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,vr.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!e,onClick:n,title:"Undo (Cmd/Ctrl+Z)",children:(0,vr.jsx)(ma.Undo2,{size:16})}),(0,vr.jsx)("button",{type:"button",className:"bb-iconButton",disabled:o,onClick:r,title:a,children:(0,vr.jsx)(ma.ListRestart,{size:16})}),(0,vr.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!t,onClick:i,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,vr.jsx)(ma.Redo2,{size:16})})]}),(0,vr.jsx)("div",{className:"bb-toolbarDivider"}),(0,vr.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:l,onClick:s,title:c,children:[(0,vr.jsx)(ma.Upload,{size:14}),"Import"]}),(0,vr.jsx)("div",{className:"bb-toolbarDivider"}),(0,vr.jsx)(LM,{disabled:h,exporting:p,onExportJson:u,onExportTs:m})]})}var ms=require("lucide-react"),Et=require("react/jsx-runtime");function ek(e){let t=new Date(e);return t.toDateString()===new Date().toDateString()?`today at ${t.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})}`:t.toLocaleString([],{dateStyle:"medium",timeStyle:"short"})}function DM({target:e,onCancel:t,onConfirm:n}){return(0,Et.jsx)("div",{className:"bb-reset-overlay",onClick:t,children:(0,Et.jsxs)("div",{className:"bb-reset-dialog",onClick:i=>i.stopPropagation(),children:[(0,Et.jsxs)("div",{className:"bb-reset-header",children:[(0,Et.jsxs)("h3",{className:"bb-reset-title",children:[(0,Et.jsx)(ms.AlertTriangle,{size:20,className:"bb-icon-warning"}),"Confirm Reset"]}),(0,Et.jsx)("button",{className:"bb-reset-close",onClick:t,children:(0,Et.jsx)(ms.X,{size:20})})]}),(0,Et.jsxs)("div",{className:"bb-reset-body",children:[(0,Et.jsxs)("p",{className:"bb-reset-message",children:["Are you sure you want to reset"," ",(0,Et.jsx)("strong",{children:e==="bindings"?"Object Bindings":"Scene Config"}),"?"]}),(0,Et.jsx)("p",{className:"bb-reset-details",children:e==="bindings"?"This will remove all your custom changes to object properties, groups, tags, transforms, materials, actions, camera positions, metrics, and metadata.":"This will restore all scene settings (camera, lighting, environment, background, animations, annotations, etc.) to their default values."}),(0,Et.jsx)("p",{className:"bb-reset-warning",children:"This action cannot be undone!"})]}),(0,Et.jsxs)("div",{className:"bb-reset-footer",children:[(0,Et.jsx)("button",{className:"bb-reset-btn",onClick:t,children:"Cancel"}),(0,Et.jsx)("button",{className:"bb-reset-btn-danger",onClick:n,children:"Reset"})]})]})})}function NM({modelName:e,savedAt:t,onCancel:n,onConfirm:i}){return(0,Et.jsx)("div",{className:"bb-reset-overlay",onClick:n,children:(0,Et.jsxs)("div",{className:"bb-reset-dialog",onClick:r=>r.stopPropagation(),children:[(0,Et.jsxs)("div",{className:"bb-reset-header",children:[(0,Et.jsxs)("h3",{className:"bb-reset-title",children:[(0,Et.jsx)(ms.History,{size:20,className:"bb-icon-restore"}),"Restore Last Session"]}),(0,Et.jsx)("button",{className:"bb-reset-close",onClick:n,children:(0,Et.jsx)(ms.X,{size:20})})]}),(0,Et.jsxs)("div",{className:"bb-reset-body",children:[(0,Et.jsxs)("p",{className:"bb-reset-message",children:["Restore ",(0,Et.jsx)("strong",{children:e}),", saved ",ek(t),"?"]}),(0,Et.jsx)("p",{className:"bb-reset-details",children:"This reloads that model with its object bindings and scene settings, replacing what's in the editor now."})]}),(0,Et.jsxs)("div",{className:"bb-reset-footer",children:[(0,Et.jsx)("button",{className:"bb-reset-btn",onClick:n,children:"Cancel"}),(0,Et.jsx)("button",{className:"bb-reset-btn-restore",onClick:i,children:"Restore"})]})]})})}var UM=require("fflate");function OM(e){return JSON.stringify(e,null,2)}function IM(e){return['import { defineObjectBindings } from "@liveroom-tech/react-immersive/utils";',"",`export const objectBindings = defineObjectBindings(${JSON.stringify(e,null,2)});`,""].join(`
|
|
3696
|
+
`)}function BM(e){return JSON.stringify(e,null,2)}function zM(e){return['import type { SceneConfig } from "@liveroom-tech/react-immersive/utils";',"",`export const sceneConfig: SceneConfig = ${JSON.stringify(e,null,2)};`,""].join(`
|
|
3697
|
+
`)}function Cd(e,t,n){oo(new Blob([t],{type:n}),e)}function qg(e){return JSON.stringify(e??{},null,2)}function $g(e){return`[${e[0].toFixed(3)}, ${e[1].toFixed(3)}, ${e[2].toFixed(3)}]`}function tk(e){return(e.decals??[]).map(t=>t.image).filter(t=>!!t?.trim())}function nk(e){let t=e.style?.material;return t?Object.values(t).filter(n=>!!n&&typeof n=="object"&&typeof n.path=="string"&&n.path.trim().length>0).map(n=>n.path):[]}async function VM(e){let t=new Set;for(let r of Object.values(e)){for(let o of nk(r))t.add(o);for(let o of tk(r))t.add(o)}let n=[],i=[];return await Promise.all(Array.from(t).map(async r=>{let o=_u(r);if(o)try{let a=await fetch(o);if(!a.ok)throw new Error(String(a.status));n.push({path:r,blob:await a.blob()});return}catch{i.push(r);return}try{let a=await fd(r);a&&n.push({path:r,blob:a})}catch{}})),{assets:n,failedPaths:i}}async function Yg(e,t,n,i,r){if(r.length===0){Cd(e,t,n);return}let o={[e]:(0,UM.strToU8)(t)};for(let s of r)o[s.path]=new Uint8Array(await s.blob.arrayBuffer());let a=await Ru(o);oo(new Blob([a],{type:"application/zip"}),i)}async function Am(e){return await Promise.all(Object.entries(e).map(async([t,n])=>{for(let r of n.decals??[])if(r.image)try{let o=await fd(r.image);o&&za(r.image,URL.createObjectURL(o))}catch(o){console.warn(`[BindingBuilder] Could not rehydrate a decal image on "${t}":`,o)}let i=n.style?.material;if(i)for(let r of Bi){let a=i[r]?.path;if(a)try{let s=await fd(a);if(!s){console.warn(`[BindingBuilder] No stored texture found for "${t}"'s ${r} ("${a}"). If this is meant to be an uploaded file rather than a hosted URL, it was uploaded before texture autosave existed (or this browser's storage was cleared) \u2014 re-upload it once so it's stored for future restores.`);continue}let l=URL.createObjectURL(s);za(a,l)}catch(s){console.warn(`[BindingBuilder] Could not rehydrate "${t}"'s ${r}:`,s)}}})),e}function FM({bindings:e,setBindings:t,setSceneConfig:n,nodeKeys:i,sceneConfigInputRef:r,setIsExporting:o,setStatusMessage:a,setStatusTone:s}){let l=async f=>{o(!0);try{let{assets:g,failedPaths:b}=await VM(e);f==="json"?await Yg("objectBindings.json",OM(e),"application/json","objectBindings.zip",g):await Yg("objectBindings.ts",IM(e),"text/typescript","objectBindings-ts.zip",g),b.length>0?(a(`Exported, but ${b.length} uploaded image${b.length===1?"":"s"} couldn't be bundled: ${b.join(", ")}.`),s("error")):g.length>0&&(a(`Exported with ${g.length} uploaded image${g.length===1?"":"s"} bundled into the zip.`),s("success"))}catch(g){let b=g instanceof Error?g.message:"Unknown export error.";a(`Failed to export bindings: ${b}`),s("error")}finally{o(!1)}},c=async f=>{if(!i.length){a("Load a model before importing bindings."),s("error");return}let g;try{g=JSON.parse(await f.text())}catch{a(`${f.name} is not valid JSON.`),s("error");return}if(g===null||typeof g!="object"||Array.isArray(g)){a("Expected a JSON object mapping object IDs to bindings."),s("error");return}let b=new Map;for(let x of Object.values(g))if(x!==null&&typeof x=="object"&&typeof x.id=="string"&&typeof x.type=="string"&&typeof x.modelObjectId=="string"){let P=x;b.set(P.modelObjectId,P)}if(b.size===0){a(`${f.name} doesn't look like an exported bindings file.`),s("error");return}let y={...e},v={},w=0;for(let x of Object.keys(y)){let P=b.get(x);P&&(y[x]=P,v[x]=P,w++)}if(w===0){a(`None of the object IDs in ${f.name} match this model \u2014 nothing imported.`),s("error");return}let M=await Am(v);Object.assign(y,M),t(y);let _=b.size-w;a(_>0?`Imported ${w} binding${w===1?"":"s"} from ${f.name} (${_} skipped \u2014 not in this model).`:`Imported ${w} binding${w===1?"":"s"} from ${f.name}.`),s("success")},h=async f=>{let g=f.target.files?.[0];g&&(await c(g),f.target.value="")},p=()=>{r.current?.click()},u=async f=>{let g;try{g=JSON.parse(await f.text())}catch{a(`${f.name} is not valid JSON.`),s("error");return}if(g===null||typeof g!="object"||Array.isArray(g)){a("Expected a JSON object with scene config sections."),s("error");return}let b=["model","camera","lighting","wireframe","shadows","environment","background","groundShadows","postProcessing","animations","annotations","cinematic","styleRules","section"],y=g,v=b.filter(w=>y[w]!==void 0);if(v.length===0){a(`${f.name} doesn't look like an exported scene config file.`),s("error");return}n(w=>{let M={...w};for(let _ of v)M[_]=Md(w[_],y[_]);return M}),a(`Imported ${v.length} section${v.length===1?"":"s"} from ${f.name}.`),s("success")};return{handleExportBindings:l,importBindingsFile:c,handleImportBindingsChange:h,openSceneConfigImportPicker:p,importSceneConfigFile:u,handleImportSceneConfigChange:async f=>{let g=f.target.files?.[0];g&&(await u(g),f.target.value="")}}}var Kg={pbr:["texture","baseColor","metalness","metalnessMap","specularIntensity","specularIntensityMap","specularColor","specularColorMap","reflectivity"],roughness:["roughness","roughnessMap"],emission:["emissive","emissiveIntensity","emissiveMap"],opacity:["opacity","alphaMap","alphaTest","alphaHash","dithering","blendingMode"],normalBump:["normalMap","normalScale","flipNormalY","bumpMap","bumpScale"],displacement:["displacementMap","displacementScale","displacementBias"],ao:["aoMap","aoMapIntensity"],clearcoat:["clearcoat","clearcoatMap","clearcoatRoughness","clearcoatRoughnessMap","clearcoatNormalMap","clearcoatNormalScale","flipClearcoatNormalY"],sheen:["sheen","sheenColor","sheenColorMap","sheenRoughness","sheenRoughnessMap"],anisotropy:["anisotropy","anisotropyRotation","anisotropyMap"],transmission:["transmission","transmissionMap","thickness","thicknessMap","attenuationColor","attenuationDistance"],faces:["side"]},jM=Object.keys(Kg);function GM(e){if(e==null)return!1;if(typeof e=="string")return e.trim().length>0;if(typeof e=="number")return Number.isFinite(e);if(typeof e=="boolean")return e;if(typeof e=="object"&&"path"in e){let t=e.path;return typeof t=="string"&&t.trim().length>0}return!1}function Zg(e){if(e)return Object.values(e).some(GM)?e:void 0}function si(e,t){return e?Kg[t].some(n=>GM(e[n])):!1}function Jg(e){return{pbr:si(e,"pbr"),roughness:si(e,"roughness"),emission:si(e,"emission"),opacity:si(e,"opacity"),normalBump:si(e,"normalBump"),displacement:si(e,"displacement"),ao:si(e,"ao"),clearcoat:si(e,"clearcoat"),sheen:si(e,"sheen"),anisotropy:si(e,"anisotropy"),transmission:si(e,"transmission"),faces:si(e,"faces")}}function Qg(e,t){if(t)return{...e,style:{...e.style,material:t}};if(!e.style)return e;let{material:n,...i}=e.style;return{...e,style:Object.keys(i).length>0?i:void 0}}function HM(e,t){if(!e)return;let n={...e};for(let i of Kg[t])delete n[i];return n}var K=require("react/jsx-runtime"),WM="/room.glb";function rk(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function XM(e){return`Couldn't reload ${e} from your last session. It's still saved in this browser.`}function eb({licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,project:o,onProjectChange:a,projectChangeDebounceMs:s=350,onModelUpload:l,onTextureUpload:c,onEditLeaseChange:h,allowModelChange:p=!0}){let u=(0,G.useRef)(null),m=(0,G.useRef)(null),f=(0,G.useRef)(null),[g,b]=(0,G.useState)(o?.model.url??null),[y,v]=(0,G.useState)(o?.model.name??""),[w,M]=(0,G.useState)(o?.model??null),[_,x]=(0,G.useState)(null),P=Wg(o?.objectBindings??{}),d=P.value,S=P.setValue,[C,T]=(0,G.useState)(!1),[E,k]=(0,G.useState)(null),D=(0,G.useMemo)(()=>E?{target:E}:null,[E]),[B,L]=(0,G.useState)(null);(0,G.useEffect)(()=>L(null),[_,g]),(0,G.useEffect)(()=>Cn(null),[g]);let[X,O]=(0,G.useState)([]),[I,re]=(0,G.useState)(()=>new Set),[ke,te]=(0,G.useState)(null),[We,wt]=(0,G.useState)(!1),[be,ue]=(0,G.useState)("Load the demo model or upload a GLB, GLTF, OBJ, FBX, USDZ, STL, or PLY model to generate bindings."),[Ne,Te]=(0,G.useState)("default"),[bn,Oe]=(0,G.useState)(!1),[ot,mt]=(0,G.useState)("{}"),[vn,de]=(0,G.useState)("{}"),[ur,jt]=(0,G.useState)(null),[Gt,ce]=(0,G.useState)(null),[Ie,zt]=(0,G.useState)(!1),[gt,Ut]=(0,G.useState)(!1),[Ae,Ce]=(0,G.useState)(!1),[Pt,St]=(0,G.useState)({identity:!0,basics:!0,material:!1,decals:!1,actions:!1,camera:!1,transform:!1,metrics:!1,metadata:!1}),[dn,ae]=(0,G.useState)({pbr:!1,roughness:!1,emission:!1,opacity:!1,normalBump:!1,displacement:!1,ao:!1,clearcoat:!1,sheen:!1,anisotropy:!1,transmission:!1,faces:!1}),he=R=>St(j=>({...j,[R]:!j[R]})),Ee=R=>ae(j=>({...j,[R]:!j[R]})),[Be,_t]=(0,G.useState)("object"),[Je,et]=(0,G.useState)("General"),[ve,Qe]=(0,G.useState)("metalness"),[bt,un]=(0,G.useState)(Jg()),or=(0,G.useRef)(null),[yn,Vn]=(0,G.useState)(!1),[yr,Fn]=(0,G.useState)(!0),[li,ha]=(0,G.useState)(!0),[kn,Dr]=(0,G.useState)(!1),[z,U]=(0,G.useState)(null),[H,oe]=(0,G.useState)(null),[Q,fe]=(0,G.useState)(!1),[we,pn]=(0,G.useState)("world"),tt=(0,G.useRef)({}),$e=Wg(o?.sceneConfig??ja),Ye=$e.value,Vt=$e.setValue,Se=$e.setValueUntracked,[Ht,Ln]=(0,G.useState)(!1),[jn,xr]=(0,G.useState)(.5),[mn,Cn]=(0,G.useState)(null),Xi=mn??{bindings:P.baseline,sceneConfig:$e.baseline},[hs,Il]=(0,G.useState)("orbit"),[Td,Dn]=(0,G.useState)(!1),fs=(0,G.useRef)(void 0),Sn=(0,G.useCallback)(()=>{Dn(!0),clearTimeout(fs.current),fs.current=setTimeout(()=>Dn(!1),5e3)},[]);(0,G.useEffect)(()=>()=>clearTimeout(fs.current),[]),(0,G.useEffect)(()=>{g&&!C&&Sn()},[g,C,Sn]);let rn=hs==="pointerLock",[Bl,fa]=(0,G.useState)(null),ga=(0,G.useRef)(null),zl=Bl?.objectKey===_&&Bl?.textureKey==="texture",[Ul,Mo]=(0,G.useState)(null),[Em,Co]=(0,G.useState)(null),qi=Bp(e,t),Pd=w_(qi.tier),gs=(0,G.useMemo)(()=>({isInsideEditor:!0,activeTab:Be,activeSubTab:Je,tier:Pd,setActiveTab:_t,setActiveSubTab:et}),[Be,Je,Pd]),wr=(0,G.useRef)(null),ci=(0,G.useRef)(0),Wr=(0,G.useRef)(0),at=(0,G.useRef)(o?`${o.id}:${o.revision}`:null),To=(0,G.useRef)(null),bs=(0,G.useRef)(!1),Po=(0,G.useRef)(!1),vs=(0,G.useRef)(o?{modelUrl:o.model.url,bindings:o.objectBindings,sceneConfig:o.sceneConfig}:null),ba=(0,G.useRef)(void 0),Ri=(0,G.useRef)(0),Tn=(0,G.useRef)(null),pr=(0,G.useRef)(o?{requestId:0,modelName:o.model.name??"model",modelUrl:o.model.url,storedBindings:o.objectBindings,streaming:!!o.model.tilesetUrl}:null),ki=(0,G.useRef)(null),va=(0,G.useRef)(null),Ao=(0,G.useRef)(null),Vl=(0,G.useRef)(!1),di=(0,G.useRef)(null),ya=(0,G.useRef)(null),{cameraState:Wt,resetView:Fl,focusObject:jl,fitScene:ys,setCameraState:xa,handleCameraChange:Ad,handleViewerReady:Ed}=Tw(),wa=(0,G.useCallback)(R=>{rn||xa({position:R.position,target:R.target,fov:R.fov??Wt?.fov??null,zoom:R.zoom??Wt?.zoom??1,azimuthAngle:R.azimuthAngle,polarAngle:R.polarAngle},!0)},[rn,xa,Wt]),Eo=m_(),Rt=_?d[_]??null:null,xs=Rt?.style?.material,Gl=!I.has(Rt?.modelObjectId??_??""),Li=Rt?.cameraState,pt=Wt?{position:$g(Wt.position),target:$g(Wt.target)}:null,Rd=(0,G.useCallback)(R=>{Vt(j=>{let Z=j.annotations.map(Pe=>Pe.id).join(","),ne=R.map(Pe=>Pe.id).join(",");return Z===ne?j:{...j,annotations:R}})},[]),Rm=(0,G.useCallback)(R=>{Mo(R?{annotation:R}:null)},[]);(0,G.useEffect)(()=>{if(!Rt){mt("{}"),de("{}"),jt(null),ce(null);return}mt(qg(Rt.metrics)),de(qg(Rt.metadata)),jt(null),ce(null)},[Rt]),(0,G.useEffect)(()=>{let R=Jg(xs);if(or.current!==_){or.current=_,un(R);return}un(j=>{let Z=!1,ne={...j};for(let Pe of jM)R[Pe]&&!j[Pe]&&(ne[Pe]=!0,Z=!0);return Z?ne:j})},[_,xs]),(0,G.useEffect)(()=>()=>{wr.current?.cleanup(),Tn.current&&clearTimeout(Tn.current)},[]);let Sa=(0,G.useCallback)((R,j)=>{let Z=Wp(R);if(j){let ne=new Map(Object.values(j).map(Pe=>[Pe.modelObjectId,Pe]));for(let Pe of R){let Xe=ne.get(Pe);Xe&&(Z[Pe]=Xe)}}return Z},[]);(0,G.useEffect)(()=>{if(!o)return;let R=`${o.id}:${o.revision}`;if(at.current===R)return;at.current=R;let j=g!==o.model.url||w?.tilesetUrl!==o.model.tilesetUrl||w?.assetVersion!==o.model.assetVersion,Z=d!==o.objectBindings,ne=Ye!==o.sceneConfig;(j||Z||ne)&&(Po.current=!0),M(o.model),v(o.model.name??"model");let Pe=o.objectBindings;if(Z){let Xe=To.current;Pe=Xe?Sa(Xe,o.objectBindings):o.objectBindings,P.reset(Pe)}if(ne&&$e.reset(o.sceneConfig),j){let Xe=++Wr.current;pr.current={requestId:Xe,modelName:o.model.name??"model",modelUrl:o.model.url,storedBindings:o.objectBindings,streaming:!!o.model.tilesetUrl},di.current=null,x(null),T(!0),b(o.model.url)}vs.current={modelUrl:o.model.url,bindings:Pe,sceneConfig:o.sceneConfig}},[d,Sa,o,g,Ye,w,P,$e]);let ws=(0,G.useRef)(a);ws.current=a,(0,G.useEffect)(()=>{if(!o||!ws.current||!g)return;if(!bs.current){bs.current=!0;return}let R=vs.current;if(g===o.model.url&&d===o.objectBindings&&Ye===o.sceneConfig||R!==null&&g===R.modelUrl&&d===R.bindings&&Ye===R.sceneConfig){Po.current=!1;return}if(pr.current)return;if(Po.current){Po.current=!1;return}let j=window.setTimeout(()=>{ws.current?.({projectId:o.id,baseRevision:o.revision,model:{...w??o.model,url:g,name:y||o.model.name},objectBindings:d,sceneConfig:Ye},"local")},s);return()=>window.clearTimeout(j)},[d,y,g,o,s,w,Ye]),(0,G.useEffect)(()=>{let R=j=>{if(j.key.toLowerCase()!=="z"||!(j.metaKey||j.ctrlKey))return;let Z=j.target,ne=Z?.tagName;if(ne==="INPUT"||ne==="TEXTAREA"||Z?.isContentEditable)return;j.preventDefault();let Pe=Be==="scene"?$e:P;j.shiftKey?Pe.redo():Pe.undo()};return window.addEventListener("keydown",R),()=>window.removeEventListener("keydown",R)},[Be,P,$e]);let kd=!o&&p,$i=P.edits>0||$e.edits>0,{handleTextureUpload:Ss}=kM({autosaveEnabled:kd,hasEdits:$i,modelUrl:g,bindings:d,sceneConfig:Ye,onTextureUpload:c,modelSourceRef:ki,pendingLoadRef:pr,storedModelKeyRef:va,pendingAutosaveRef:Ao,autosaveFailureShownRef:Vl,setStatusMessage:ue,setStatusTone:Te});(0,G.useEffect)(()=>{if(C||Ne==="default"||Ne==="success")return;Oe(!0);let R=window.setTimeout(()=>Oe(!1),4e3);return()=>window.clearTimeout(R)},[be,Ne,C]);let mr=(0,G.useMemo)(()=>Object.keys(d),[d]),Ld=(0,G.useMemo)(()=>!_||!Rt?null:Rt.id.trim()?Object.entries(d).some(([Z,ne])=>Z!==_&&ne.id===Rt.id)?"Another binding already uses this ID.":null:"ID is required.",[d,_,Rt]),Ft=(R,j)=>{S(Z=>({...Z,[R]:j(Z[R])}))},Ro=(R,j)=>{Ft(R,Z=>{let ne=Zg(j(Z.style?.material));return Qg(Z,ne)})},_a=(R,j,Z)=>{Ro(R,ne=>({...ne,[j]:Z?{path:Z}:void 0}))},Dd=(R,j)=>{un(Z=>({...Z,[R]:j})),!j&&_&&Ft(_,Z=>{let ne=Zg(HM(Z.style?.material,R));return Qg(Z,ne)})},_s=(0,G.useCallback)((R,j,Z)=>{let ne=sd(R),Pe=Wp(ne,ad(R));if(Z){let Xt=new Map(Object.values(Z).map(Ge=>[Ge.modelObjectId,Ge]));for(let Ge of ne){let Jn=Xt.get(Ge);Jn&&(Pe[Ge]=Jn)}}R.updateMatrixWorld(!0);let Xe={};for(let Xt of ne){let Ge=yi(R,Xt);if(!Ge){Xe[Xt]={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],pivotLocal:[0,0,0],rotationOrder:"XYZ"};continue}let Jn=Zp(Ge);Xe[Xt]={position:[Ge.position.x,Ge.position.y,Ge.position.z],rotation:[Ge.rotation.x,Ge.rotation.y,Ge.rotation.z],scale:[Ge.scale.x,Ge.scale.y,Ge.scale.z],pivotLocal:[Jn.x,Jn.y,Jn.z],rotationOrder:Ge.rotation.order}}tt.current=Xe,P.reset(Pe),x(ne[0]??null),Z||Se(Xt=>({...Xt,annotations:[]})),ue(`Generated ${ne.length} bindings from ${j}.`),Te("success"),Ri.current=100,te(100),Tn.current&&clearTimeout(Tn.current),Tn.current=setTimeout(()=>{Tn.current=null,T(!1),te(null)},400)},[P,Se]),Ms=(R,j,Z,ne)=>{Ao.current?.();let Pe=++Wr.current;T(!0),te(null),Ri.current=0,Tn.current&&(clearTimeout(Tn.current),Tn.current=null),ba.current=Z;let Xe=Z?Z/1048576:0;ue(Xe>=100?`Reading ${j} (${Math.round(Xe)}MB \u2014 large file, this can take a while)...`:`Reading ${j} and generating starter bindings...`),Te("default"),v(j),M(ne??{url:R,name:j}),Mo(null);let Xt=di.current;if(R===g&&Xt?.url===R){pr.current=null,_s(Xt.scene,j);return}pr.current={requestId:Pe,modelName:j,modelUrl:R,streaming:!!ne?.tilesetUrl},b(R),P.reset({}),x(null)},Nd=(0,G.useCallback)(R=>{let j=pr.current;if(!(!j||j.requestId!==Wr.current)){if(pr.current=null,di.current={url:j.modelUrl,scene:R},L(null),O(al(R)),re(j.streaming?new Set:ad(R)),k(null),j.streaming){ue(`Streaming ${j.modelName}.`),Te("success"),T(!1);return}j.storedBindings&&(Po.current=!0),_s(R,j.modelName,j.storedBindings),j.restoring&&ue(`Restored your last session with ${j.modelName}.`)}},[_s]),km=(0,G.useCallback)(R=>{let j=R.map(ne=>ne.name);if(j.length===0)return;To.current=j,Po.current=!0;let Z=Sa(j,o?.objectBindings);if(P.reset(Z),o){let ne=vs.current;vs.current={modelUrl:ne?.modelUrl??o.model.url,bindings:Z,sceneConfig:ne?.sceneConfig??o.sceneConfig}}x(ne=>ne??j[0]??null),ue(`Streaming ${j.length} bindable objects.`),Te("success"),T(!1)},[Sa,P,o]),Sr=(0,G.useCallback)(R=>{let j=pr.current;!j||j.requestId!==Wr.current||(pr.current=null,console.error(R),j.restoring?(ki.current=null,b(null),ue(XM(j.modelName))):ue(hu(R)?`${j.modelName} is a point cloud: it has points but no faces. Turn it into a mesh first, for example with MeshLab or Blender.`:`Could not read ${j.modelName}. Make sure the file is a valid GLB, GLTF, OBJ, FBX, USDZ, STL, or PLY asset.`),Te("error"),Tn.current&&(clearTimeout(Tn.current),Tn.current=null),Ri.current=0,T(!1),te(null))},[]),Od=(0,G.useCallback)(R=>{let j=null;if(R.lengthComputable&&R.total>0)j=R.loaded/R.total*100;else{let ne=ba.current;ne&&ne>0&&(j=R.loaded/ne*100)}if(j===null)return;let Z=Math.min(90,Math.floor(j/10)*10);Z>Ri.current&&(Ri.current=Z,te(Z)),j>=99.5&&ue(ne=>ne.startsWith("Finalizing")?ne:"Finalizing model \u2014 parsing geometry and textures (large files can take a moment here)...")},[]),ar=(0,G.useCallback)(R=>{Eo.handleAnimationsReady(R);let j=R.clipDetails??R.clips.map(Z=>({sourceName:Z,duration:0}));Se(Z=>({...Z,animations:RM(Z,j)}))},[Eo,Se]),Ma=async()=>{wr.current?.cleanup(),wr.current=null,ki.current={model:{kind:"url",url:WM,name:"room.glb"}},await Ms(WM,"room.glb")},Id=async R=>{if(!p)return;if(l){try{T(!0),ue(`Uploading ${R.name}...`),Te("default");let Z=await l(R);ki.current={model:{kind:"url",url:Z.url,name:Z.name??R.name}},await Ms(Z.url,Z.name??R.name,R.size,Z)}catch(Z){T(!1),ue(Z instanceof Error?Z.message:`Could not upload ${R.name}.`),Te("error")}return}let j;try{j=await Ph(R)}catch(Z){ue(Z instanceof Error?Z.message:"Could not read model file. Upload a .glb, .gltf, .obj, .fbx, .usdz, .stl, .ply, or .zip asset."),Te("error");return}wr.current?.cleanup(),wr.current=j,ki.current={model:{kind:"file",key:rk(),name:j.name},file:R},await Ms(j.url,j.name,R.size,{url:j.url,name:j.name})},Bd=async R=>{let j=R.target.files?.[0];j&&(await Id(j),R.target.value="")},Cs=()=>{Ao.current?.(),wr.current?.cleanup(),wr.current=null,di.current=null,pr.current=null,ki.current=null,tt.current={},ci.current=0,zt(!1),Tn.current&&(clearTimeout(Tn.current),Tn.current=null),Ri.current=0,te(null),ba.current=void 0,b(null),v(""),M(null),x(null),Mo(null),P.reset({}),mt("{}"),de("{}"),jt(null),ce(null),Co(null),fe(!1),Se(R=>({...R,animations:ja.animations,annotations:[]})),ue("Load the demo model or upload a GLB, GLTF, OBJ, FBX, USDZ, STL, or PLY model to generate bindings."),Te("default")},zd=()=>{u.current?.click()},Ts=()=>{m.current?.click()},{handleExportBindings:Nr,handleImportBindingsChange:Hl,openSceneConfigImportPicker:Lm,handleImportSceneConfigChange:Dm}=FM({bindings:d,setBindings:S,setSceneConfig:Vt,nodeKeys:mr,sceneConfigInputRef:f,setIsExporting:wt,setStatusMessage:ue,setStatusTone:Te}),Wl=R=>{R.preventDefault(),R.stopPropagation(),!(C||g)&&(ci.current+=1,zt(!0))},Ud=R=>{R.preventDefault(),R.stopPropagation(),!(C||g)&&(R.dataTransfer.dropEffect="copy",zt(!0))},Vd=R=>{R.preventDefault(),R.stopPropagation(),!(C||g)&&(ci.current=Math.max(0,ci.current-1),ci.current===0&&zt(!1))},ko=async R=>{if(R.preventDefault(),R.stopPropagation(),ci.current=0,zt(!1),C||g)return;let j=R.dataTransfer.files?.[0];j&&await Id(j)},Ca=(R,j,Z)=>{if(!_)return;let ne;try{ne=JSON.parse(j)}catch{Z("Invalid JSON");return}if(ne===null||typeof ne!="object"||Array.isArray(ne)){Z("Expected a JSON object");return}if(R==="metrics"&&Object.values(ne).some(Xe=>typeof Xe!="number"||!Number.isFinite(Xe))){Z("Metrics values must be numbers");return}Ft(_,Pe=>({...Pe,[R]:ne})),Z(null)},Fd=(0,G.useCallback)((R,j)=>{kd&&mm(R,j).catch(Z=>console.warn("[BindingBuilder] Could not store decal image for autosave:",Z))},[kd]),Xl=(0,G.useMemo)(()=>{let R=di.current?.scene,Z=(R&&_?yi(R,_):null)?.geometry;if(!Z)return .2;Z.boundingBox||Z.computeBoundingBox();let ne=Z.boundingBox?.getSize(new qM.Vector3),Pe=ne?Math.max(ne.x,ne.y,ne.z):0;return Pe>0&&Number.isFinite(Pe)?Pe/3:.2},[_,g,C]),ql=(0,G.useMemo)(()=>{if(!B?.moving)return null;let{nodeKey:R,decal:j}=B,Z=d[R],ne=Z?.decals?.find(Pe=>Pe.id===j.id);return ne?{objectId:Z.modelObjectId??R,decal:ne,onCancel:()=>L(null),onCommit:Pe=>{S(Xe=>{let Xt=Xe[R];return Xt?{...Xe,[R]:{...Xt,decals:Xt.decals?.map(Ge=>Ge.id===ne.id?{...Ge,...Pe}:Ge)}}:Xe}),L(null)}}:null},[d,B,S]),$l=(0,G.useCallback)((R,j)=>{if(!_)return;let Z=d[_],ne=Z?.decals?.find(Ge=>Ge.id===R);if(!ne)return;let Pe=ya.current,Xe=Pe?.raw.nodes[Z.modelObjectId??_],Xt=nm(Xe,Pe?.raw.controls.camera,ne,j);if(!Xt){ue("No visible surface in that direction. Try another arrow or rotate the view."),Te("error"),Oe(!0);return}L(null),Oe(!1),Ft(_,Ge=>({...Ge,decals:Ge.decals?.map(Jn=>Jn.id===R?{...Jn,...Xt}:Jn)}))},[d,_,Ft]),Nm=(0,G.useCallback)(R=>{if(!R||R.moving){L(R);return}let j=ya.current,Z=d[R.nodeKey],ne=j?.raw.nodes[Z?.modelObjectId??R.nodeKey],Pe=tm(ne,j?.raw.controls.camera);if(!Pe){ue("Could not find a surface on this object for the decal."),Te("error"),Oe(!0);return}let Xe={...R.decal,...Pe};S(Xt=>{let Ge=Xt[R.nodeKey];if(!Ge)return Xt;let Jn=(Ge.decals??[]).filter(Yi=>Yi.id!==Xe.id);return{...Xt,[R.nodeKey]:{...Ge,decals:[...Jn,Xe]}}}),L({...R,moving:!0})},[d,S]),Om=(0,G.useCallback)(R=>{if(rn){Il("orbit");return}if(!R){x(null);return}let j=Object.entries(d).find(([Z,ne])=>ne===R||Z===R.modelObjectId||ne.modelObjectId===R.modelObjectId)?.[0]??null;x(j)},[rn,d]),Im=(0,G.useCallback)(async R=>{if(rn){Il("orbit");return}x(R),Co(null),await jl(R)},[rn,jl]),Bm=(0,G.useCallback)(R=>{Co(R?d[R]??null:null)},[d]),Or=(0,G.useCallback)(R=>Ce(!R),[]),jd=(0,G.useCallback)(()=>{if(rn){ue("Camera positions aren't available while Pointer Lock is the active camera controller."),Te("error");return}if(!_||!Wt)return;let R={position:Wt.position,target:Wt.target,...Wt.fov!=null?{fov:Wt.fov}:{},zoom:Wt.zoom};Ft(_,j=>({...j,cameraState:R}))},[rn,_,Wt]),zm=(0,G.useCallback)(()=>{if(rn){ue("Camera positions aren't available while Pointer Lock is the active camera controller."),Te("error");return}!Li?.position||!Li?.target||xa({position:Li.position,target:Li.target,fov:Li.fov??Wt?.fov??null,zoom:Li.zoom??Wt?.zoom??1},!0)},[rn,Li,xa,Wt]),Um=(0,G.useCallback)(()=>{rn||_&&Ft(_,R=>({...R,cameraState:void 0}))},[rn,_]),sr=(0,G.useCallback)(async()=>{if(rn){ue("Reset View isn't available while Pointer Lock is the active camera controller."),Te("error");return}await Fl()},[rn,Fl]),Ps=(0,G.useCallback)(async()=>{if(rn){ue("Fit Scene isn't available while Pointer Lock is the active camera controller."),Te("error");return}await ys()},[rn,ys]),Yl=(0,G.useCallback)(()=>{ue("Texture position saved."),Te("success"),ga.current?.()},[]),Kl=(0,G.useCallback)(R=>{U(R),Dr(!0)},[]),As=(0,G.useCallback)(()=>{Dr(!1),U(null)},[]),Vm=(0,G.useCallback)(()=>{if(z==="bindings"){if(!mr.length){As();return}let R=Wp(mr,I);P.reset(R,{asEdit:!0}),x(mr[0]??null),ue("Object bindings reset to default values."),Te("success")}else z==="scene"&&($e.reset(ja,{asEdit:!0}),ue("Scene config reset to default values."),Te("success"));As()},[z,mr,P,$e,As]),Xr=(0,G.useCallback)(()=>{oe(null)},[]),Ta=async()=>{let R;try{R=await f_()}catch(j){console.warn("[BindingBuilder] Could not read the saved session:",j),ue("Couldn't read the saved session from this browser."),Te("error");return}if(!R){ue("No saved session in this browser yet \u2014 one is saved as soon as you edit a model."),Te("error");return}oe(R)},Zl=async()=>{let R=H;if(oe(null),!R)return;let{session:j,file:Z}=R,{model:ne}=j;Ao.current=null;let Pe=Md(ja,j.sceneConfig),Xe=Wr.current,Xt=await Am(j.bindings);if(Wr.current!==Xe)return;let Ge;if(ne.kind==="file"){if(!Z)return;let Yi=Wr.current,Lo;try{Lo=await Ph(Z)}catch(Fm){console.warn("[BindingBuilder] Could not read the saved model:",Fm),ue(XM(ne.name)),Te("error");return}if(Wr.current!==Yi){Lo.cleanup();return}wr.current?.cleanup(),wr.current=Lo,Ge=Lo.url}else{Ge=ne.url;let Yi=di.current;if(Ge===g&&Yi?.url===Ge&&!pr.current){ki.current={model:ne},va.current=null,P.reset(Sa(sd(Yi.scene),Xt)),$e.reset(Pe),ue(`Restored your last session with ${ne.name}.`),Te("success");return}wr.current?.cleanup(),wr.current=null}ki.current={model:ne,file:Z??void 0},va.current=ne.kind==="file"?ne.key:null;let Jn=++Wr.current;T(!0),te(null),Ri.current=0,Tn.current&&(clearTimeout(Tn.current),Tn.current=null),ba.current=Z?.size,ue(`Restoring your last session with ${ne.name}...`),Te("default"),v(ne.name),M({url:Ge,name:ne.name}),Mo(null),x(null),di.current=null,P.reset({}),$e.reset(Pe),pr.current={requestId:Jn,modelName:ne.name,modelUrl:Ge,storedBindings:Xt,restoring:!0},b(Ge)};if(qi.status==="checking")return(0,K.jsx)("div",{className:"bb-root bb-root--licenseChecking",children:(0,K.jsx)(Na,{title:"Verifying License",message:"Checking your license key..."})});if(qi.status==="invalid")return(0,K.jsx)("div",{className:"bb-root bb-root--licenseInvalid",children:(0,K.jsx)(Na,{tone:"error",title:"Invalid License",message:qi.isLocalDomain?qi.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let _r=rn?(0,K.jsx)(K.Fragment,{children:"Click the preview to look around \xB7 Esc to release"}):Q?(0,K.jsx)(K.Fragment,{children:"Select a mesh \xB7 drag the colored arrows, planes, or rings"}):Td&&li?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)("kbd",{children:"W"}),(0,K.jsx)("kbd",{children:"A"}),(0,K.jsx)("kbd",{children:"S"}),(0,K.jsx)("kbd",{children:"D"})," move \xB7 ",(0,K.jsx)("kbd",{children:"Space"}),"/",(0,K.jsx)("kbd",{children:"C"})," up \xB7 down \xB7 drag to look"]}):null;return(0,K.jsxs)(gg.Provider,{value:gs,children:[(0,K.jsxs)("div",{className:"bb-root",children:[(0,K.jsx)("input",{ref:u,type:"file",accept:uy,className:"bb-hiddenInput",onChange:Bd,disabled:C}),(0,K.jsx)("input",{ref:m,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:Hl,disabled:C}),(0,K.jsx)("input",{ref:f,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:Dm,disabled:C}),(0,K.jsxs)("aside",{className:`bb-sidebar bb-sidebar--left ${gt?"bb-sidebar--collapsed":""}`,children:[(0,K.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!gt&&(0,K.jsx)("h1",{className:"bb-title",children:"Binding Builder"}),(0,K.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>Ut(R=>!R),"aria-label":gt?"Open editor sidebar":"Collapse editor sidebar",title:gt?"Open editor":"Collapse editor",children:gt?"\u2192":"\u2190"})]}),!gt&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)("div",{className:"bb-tabRow",children:[(0,K.jsx)("button",{type:"button",className:`bb-tab ${Be==="object"?"bb-tab--active":""}`,onClick:()=>_t("object"),children:"Object"}),(0,K.jsx)("button",{type:"button",className:`bb-tab ${Be==="scene"?"bb-tab--active":""}`,onClick:()=>_t("scene"),children:"Scene"})]}),(0,K.jsx)("section",{className:"bb-editor",children:Be==="scene"?(0,K.jsx)(K.Fragment,{children:g?(0,K.jsx)(Ug,{config:Ye,onChange:Vt,activeSubTab:Je,onActiveSubTabChange:et,cameraState:(Je==="Cinematic"||Je==="Annotations")&&Wt?{position:Wt.position,target:Wt.target,azimuthAngle:Wt.azimuthAngle,polarAngle:Wt.polarAngle,fov:Wt.fov,zoom:Wt.zoom}:null,onPreviewWaypoint:wa,animationClipDetails:Eo.clipDetails,animationPlayback:Eo,materialVariantGroups:X,objectBindings:d}):(0,K.jsx)("div",{className:"bb-emptyEditor",children:"Upload a model to edit its scene settings."})}):!Rt||!_?(0,K.jsx)("div",{className:"bb-emptyEditor",children:"Select a generated node binding to edit its values."}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)("div",{className:"bb-editorHeader",children:(0,K.jsxs)("div",{children:[(0,K.jsx)("div",{className:"bb-sectionKicker",children:"Editing Binding"}),(0,K.jsx)("h2",{className:"bb-editorTitle",children:Rt.label||_}),(0,K.jsxs)("div",{className:"bb-editorMeta",children:[(0,K.jsx)("span",{children:Rt.type}),(0,K.jsx)("span",{children:Rt.modelObjectId})]})]})}),(0,K.jsx)(fM,{selectedItem:_,selectedBinding:Rt,open:Pt.identity,onToggle:()=>he("identity"),updateBinding:Ft,idError:Ld}),(0,K.jsx)(gM,{selectedItem:_,selectedBinding:Rt,open:Pt.basics,onToggle:()=>he("basics"),updateBinding:Ft}),(0,K.jsxs)(dr,{title:"Material",open:Pt.material,onToggle:()=>he("material"),tooltip:"Edit the selected object's base material, textures, and surface properties.",children:[(0,K.jsx)(hM,{disabled:!_,onApply:R=>_&&Ro(_,j=>({...j,...R}))}),(0,K.jsx)(pM,{selectedItem:_,selectedMaterial:xs,pbrWorkflow:ve,onPbrWorkflowChange:Qe,openMaterialPanels:dn,materialPanelEnabled:bt,onToggleMaterialPanel:Ee,onSetMaterialPanelState:Dd,updateSelectedMaterial:Ro,setSelectedTexturePath:_a,isTexturePositioningEnabled:zl,onConfirmTexturePosition:Yl,takesImage:Gl})]}),(0,K.jsx)(wM,{selectedItem:_,selectedBinding:Rt,open:Pt.decals,onToggle:()=>he("decals"),updateBinding:Ft,placement:B,onPlacementChange:Nm,defaultSize:Xl,onImageFile:Fd,onNudge:$l}),(0,K.jsx)(vM,{selectedItem:_,selectedBinding:Rt,open:Pt.actions,onToggle:()=>he("actions"),updateBinding:Ft,takesImage:Gl}),(0,K.jsx)(SM,{selectedBinding:Rt,open:Pt.camera,onToggle:()=>he("camera"),cameraState:Wt,formattedCameraState:pt,savedCameraPosition:Li,onSaveCameraPosition:jd,onGoToSavedCamera:zm,onClearSavedCamera:Um,onResetView:sr,onFitScene:Ps}),(0,K.jsx)(PM,{selectedItem:_,selectedBinding:Rt,open:Pt.transform,onToggle:()=>he("transform"),updateBinding:Ft,moveModeEnabled:Q,onToggleMoveMode:fe,transformSpace:we,onTransformSpaceChange:pn,originalTransform:tt.current[_]??null}),(0,K.jsx)(Hg,{title:"Metrics",label:"Metrics JSON",open:Pt.metrics,onToggle:()=>he("metrics"),draft:ot,error:ur,example:'{"area": 42}',onDraftChange:mt,onCommit:()=>Ca("metrics",ot,jt)}),(0,K.jsx)(Hg,{title:"Metadata",label:"Metadata JSON",open:Pt.metadata,onToggle:()=>he("metadata"),draft:vn,error:Gt,example:'{"room": "kitchen"}',onDraftChange:de,onCommit:()=>Ca("metadata",vn,ce)})]})}),Be==="object"&&(0,K.jsx)(Xg,{canUndo:P.canUndo,canRedo:P.canRedo,onUndo:P.undo,onRedo:P.redo,onReset:()=>Kl("bindings"),resetDisabled:!mr.length,resetTitle:"Reset object bindings to default",onImport:Ts,importDisabled:!mr.length||C,importTitle:"Re-apply a previously exported objectBindings.json onto this model",exportDisabled:!mr.length||We,exporting:We,onExportJson:()=>Nr("json"),onExportTs:()=>Nr("ts")}),Be==="scene"&&(0,K.jsx)(Xg,{canUndo:$e.canUndo,canRedo:$e.canRedo,onUndo:$e.undo,onRedo:$e.redo,onReset:()=>Kl("scene"),resetTitle:"Reset scene config to default",onImport:Lm,importDisabled:!mr.length||C,importTitle:"Re-apply a previously exported sceneConfig.json",exportDisabled:!mr.length||C,onExportJson:()=>Cd("sceneConfig.json",BM(Ye),"application/json"),onExportTs:()=>Cd("sceneConfig.ts",zM(Ye),"text/typescript")})]})]}),(0,K.jsxs)("main",{className:"bb-previewShell",children:[(0,K.jsxs)("div",{className:"bb-previewHeader",children:[(0,K.jsx)(gh,{label:"View",icon:(0,K.jsx)(Wi.SlidersHorizontal,{size:14,"aria-hidden":"true"}),title:"Preview options",children:()=>(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)("label",{className:"bb-headerMenuItem",children:[(0,K.jsx)("input",{type:"checkbox",checked:yn,onChange:R=>Vn(R.target.checked)}),"Zoom on selected"]}),(0,K.jsxs)("label",{className:"bb-headerMenuItem",children:[(0,K.jsx)("input",{type:"checkbox",checked:yr,onChange:R=>Fn(R.target.checked)}),"Highlight on hover"]}),(0,K.jsxs)("label",{className:"bb-headerMenuItem",children:[(0,K.jsx)("input",{type:"checkbox",checked:li,onChange:R=>ha(R.target.checked)}),"Camera controller"]})]})}),(0,K.jsx)("div",{className:"bb-previewMeta",children:(0,K.jsx)("span",{title:_??void 0,children:_?`Focused: ${_}`:"Select a node to inspect it"})}),g&&(0,K.jsxs)("button",{type:"button",className:`bb-compareButton ${Ht?"bb-compareButton--active":""}`,onClick:()=>{Ln(R=>!R),Cn(null)},"aria-pressed":Ht,title:"Compare: drag a divider across the preview to see it before and after your changes",children:[(0,K.jsx)(Wi.SquareSplitHorizontal,{size:14}),"Compare"]}),p&&!o&&(0,K.jsx)(gh,{icon:(0,K.jsx)(Wi.Ellipsis,{size:16,"aria-hidden":"true"}),title:"More model actions",align:"right",children:R=>(0,K.jsx)(uv,{close:R,onRestore:Ta,restoreDisabled:C,onRemove:g?Cs:void 0})})]}),(0,K.jsxs)("div",{className:"bb-preview",onFocus:R=>{R.currentTarget.contains(R.relatedTarget)||Sn()},children:[(0,K.jsx)(Hp,{visible:C||bn,message:be,tone:Ne,progress:ke??void 0}),g&&(0,K.jsx)("div",{className:`bb-canvasHint ${_r?"bb-canvasHint--visible":""} ${Ht?"bb-canvasHint--belowCompare":""}`,"aria-hidden":!_r,children:_r}),g?(0,K.jsx)(sm,{loading:"eager",modelUrl:g,tilesetUrl:w?.tilesetUrl,objectBindings:d,selectedObject:Rt,onObjectSelect:Om,onObjectBindingsChange:S,onTextureUpload:Ss,onObjectEditLeaseChange:(R,j)=>h?.(R.modelObjectId||R.id,j),showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,onCameraChange:Ad,onViewerReady:R=>{ya.current=R,Ed(R)},onAnnotationsChange:Rd,activeAnnotation:Ul?.annotation??null,onActiveAnnotationChange:Rm,onAnimationsReady:ar,onSceneLoaded:Nd,onLoadError:Sr,onObjectCatalog:w?.tilesetUrl?km:void 0,onProgress:Od,onCameraControllerChange:Il,cameraControllerType:hs,onTexturePositioningChange:fa,endTexturePositioningRef:ga,licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,sceneConfig:Ye,onSceneConfigChange:Vt,preserveDrawingBuffer:!0,disableZoom:!1,zoomOnSelected:yn,highlightOnHover:yr,enableCameraControls:li,moveModeEnabled:Q,objectTransformSpace:we,enableKeyboardNavigation:!0,showViewGizmo:!0,showSectionTools:Ye.section?.enabled??!1,isolation:D,onIsolationChange:()=>k(null),showIsolateControls:!0,decalMove:ql,panelHoveredObject:yr?Em:null,showLoadingOverlay:!1,autoRotate:rn?!1:Ye.model.autoRotate??!1,autoRotateSpeed:Ye.model.autoRotateSpeed??1}):(0,K.jsx)("div",{className:`bb-previewPlaceholder ${Ie?"bb-previewPlaceholder--dragActive":""}`,onDragEnter:Wl,onDragOver:Ud,onDragLeave:Vd,onDrop:ko,children:(0,K.jsxs)("div",{children:[(0,K.jsx)("div",{children:"Upload a GLB, GLTF, OBJ, FBX, USDZ, STL, or PLY model, or drag a supported model/ZIP bundle here to generate editable object bindings."}),p?(0,K.jsx)("button",{type:"button",className:"bb-previewPlaceholderButton",onClick:zd,disabled:C,children:"Upload"}):null]})}),g&&Ht?(0,K.jsx)(u_,{liveViewerRef:ya,split:jn,onSplitChange:xr,labels:[mn?"Pinned":"Before","Now"],beforeAction:(0,K.jsxs)("button",{type:"button",className:"ri-compare__labelAction",onClick:()=>Cn(R=>R?null:{bindings:d,sceneConfig:Ye}),"aria-pressed":!!mn,title:mn?"Unpin: compare with the project as it was opened again":"Pin as before: compare later changes with how the preview looks now",children:[mn?(0,K.jsx)(Wi.PinOff,{size:12}):(0,K.jsx)(Wi.Pin,{size:12}),mn?"Unpin":"Pin"]}),renderBefore:R=>(0,K.jsx)(sm,{loading:"eager",modelUrl:g,tilesetUrl:w?.tilesetUrl,objectBindings:Xi.bindings,sceneConfig:Xi.sceneConfig,licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,preset:"minimal",showLoadingOverlay:!1,showObjectNavigator:!1,selectedObject:null,zoomOnSelected:!1,highlightOnHover:!1,autoRotate:!1,cinematic:!1,onViewerReady:R})}):null]})]}),(0,K.jsx)(EM,{bindings:d,selectedItem:_,onSelect:Im,onHover:Bm,isOpen:!Ae,onToggle:Or,isolatedItem:E,onIsolate:k})]}),kn&&(0,K.jsx)(DM,{target:z,onCancel:As,onConfirm:Vm}),H&&(0,K.jsx)(NM,{modelName:H.session.model.name,savedAt:H.session.savedAt,onCancel:Xr,onConfirm:Zl})]})}var $M={licenseKey:!0,dracoDecoderPath:!0,ktx2TranscoderPath:!0,meshopt:!0};function YM(e,t){let n={};for(let i of Object.keys(t))i in e&&(n[i]=e[i]);return n}var ZM=require("react"),ik={"model-viewer":"@liveroom-tech/react-immersive/styles.css","simple-model-viewer":"@liveroom-tech/react-immersive/simple-model-viewer.css","binding-builder":"@liveroom-tech/react-immersive/binding-builder.css"},tb=new Set,ok=1e3;function KM(e){return getComputedStyle(document.documentElement).getPropertyValue(`--ri-styles-${e}`).trim()!==""}function JM(e,t){(0,ZM.useEffect)(()=>{if(process.env.NODE_ENV==="production"||tb.has(e)||KM(e))return;let n,i=()=>{n=setTimeout(()=>{tb.has(e)||KM(e)||(tb.add(e),console.warn(`[react-immersive] ${t}'s styles aren't loaded, so it renders unstyled. Import them once, in your app's root:
|
|
3693
3698
|
|
|
3694
|
-
import "${
|
|
3699
|
+
import "${ik[e]}";`))},ok)};return document.readyState==="complete"?(i(),()=>clearTimeout(n)):(window.addEventListener("load",i,{once:!0}),()=>{window.removeEventListener("load",i),clearTimeout(n)})},[e,t])}var QM=require("react/jsx-runtime");function nb(e){return JM("binding-builder","BindingBuilder"),(0,QM.jsx)(eb,{...YM(e,$M)})}0&&(module.exports={BindingBuilder});
|