@liveroom-tech/react-immersive 4.0.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";"use client";var Uh=Object.create;var Ea=Object.defineProperty;var Vh=Object.getOwnPropertyDescriptor;var jh=Object.getOwnPropertyNames;var Fh=Object.getPrototypeOf,Hh=Object.prototype.hasOwnProperty;var Gh=(e,t)=>()=>(e&&(t=e(e=0)),t);var xd=(e,t)=>{for(var r in t)Ea(e,r,{get:t[r],enumerable:!0})},yd=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of jh(t))!Hh.call(e,n)&&n!==r&&Ea(e,n,{get:()=>t[n],enumerable:!(o=Vh(t,n))||o.enumerable});return e};var wd=(e,t,r)=>(r=e!=null?Uh(Fh(e)):{},yd(t||!e||!e.__esModule?Ea(r,"default",{value:e,enumerable:!0}):r,e)),Wh=e=>yd(Ea({},"__esModule",{value:!0}),e);var _d={};xd(_d,{bvhWorkerCode:()=>Xh});var Xh,Sd=Gh(()=>{"use strict";Xh=`(()=>{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 Qb=Object.create;var po=Object.defineProperty;var ev=Object.getOwnPropertyDescriptor;var tv=Object.getOwnPropertyNames;var nv=Object.getPrototypeOf,rv=Object.prototype.hasOwnProperty;var iv=(e,t,n)=>t in e?po(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var av=(e,t)=>()=>(e&&(t=e(e=0)),t);var $u=(e,t)=>{for(var n in t)po(e,n,{get:t[n],enumerable:!0})},qu=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of tv(t))!rv.call(e,r)&&r!==n&&po(e,r,{get:()=>t[r],enumerable:!(a=ev(t,r))||a.enumerable});return e};var Yu=(e,t,n)=>(n=e!=null?Qb(nv(e)):{},qu(t||!e||!e.__esModule?po(n,"default",{value:e,enumerable:!0}):n,e)),ov=e=>qu(po({},"__esModule",{value:!0}),e);var wc=(e,t,n)=>iv(e,typeof t!="symbol"?t+"":t,n);var Ku={};$u(Ku,{bvhWorkerCode:()=>sv});var sv,Zu=av(()=>{"use strict";sv=`(()=>{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,14 +3661,14 @@ 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 $v={};xd($v,{BindingBuilder:()=>Dc,DEFAULT_SCENE_CONFIG:()=>Wr,MATERIAL_BLENDING_MODES:()=>Ns,MATERIAL_SIDES:()=>Rs,ModelViewer:()=>Zo,SimpleModelViewer:()=>Vc,defineObjectBindings:()=>Nf,material:()=>Hs,patchBindings:()=>Ti,patchSceneConfig:()=>Gs,selectBindingKeys:()=>gr,selectBindings:()=>Fs,useObjectBinding:()=>Pf,useObjectBindingIds:()=>Tf,useObjectBindings:()=>Rf,useSceneConfig:()=>Bf,useShareableViewerState:()=>Wf,useViewerActions:()=>Df,useViewerAnimations:()=>Ss,useViewerCamera:()=>_s,useViewerConnection:()=>If,useViewerEffects:()=>jf,useViewerHover:()=>Lf,useViewerModel:()=>Of,useViewerSelection:()=>Mf});module.exports=Wh($v);var L=require("react");var Xi=require("three"),Hr=require("three-mesh-bvh"),Md=!1,Wi=new WeakMap,Lo=new WeakMap;function $h(){Md||(Xi.Mesh.prototype.raycast=Hr.acceleratedRaycast,Md=!0)}function Yh(e){let t=new Set;return e.traverse(r=>{let o=r.geometry;!o||!o.attributes?.position||t.add(o)}),[...t]}function Cd(e){let t=0;for(let r of e){let o=r.index?r.index.count:r.attributes.position.count;t+=o/3}return t}var fi=12e6;function ka(e){return Oo(e)>fi}function Oo(e){let t=new Set;return e.traverse(r=>{let o=r.geometry;o?.attributes?.position&&t.add(o)}),Cd([...t])}function Kh(e,t){return new Promise((r,o)=>{let n=u=>{let f=u.data;if(!f||!f.error&&!f.serialized)return;if(e.removeEventListener("message",n),e.removeEventListener("error",i),f.error){o(new Error(String(f.error)));return}let{serialized:d}=f,p=Hr.MeshBVH.deserialize(d,t,{setIndex:!1});d.index&&(t.index?t.index.array=d.index:t.setIndex(new Xi.BufferAttribute(d.index,1,!1))),t.boundingBox=p.getBoundingBox(new Xi.Box3),r(p)},i=u=>{e.removeEventListener("message",n),e.removeEventListener("error",i),o(new Error(u.message||"BVH worker error"))};e.addEventListener("message",n),e.addEventListener("error",i);let s=t.index?t.index.array.slice():null,l=t.attributes.position.array.slice(),a=[l,...s?[s]:[]].map(u=>u.buffer);e.postMessage({index:s,position:l,options:{groups:[...t.groups]}},a)})}async function qh(){if(typeof window>"u"||typeof Worker>"u")return null;try{let{bvhWorkerCode:e}=await Promise.resolve().then(()=>(Sd(),_d)),t=new Blob([e],{type:"text/javascript"}),r=URL.createObjectURL(t),o=new Worker(r);return{worker:o,dispose:()=>{o.terminate(),URL.revokeObjectURL(r)}}}catch{return null}}async function Jh(e,t){if(t)try{return await Kh(t,e)}catch{}let r=Hr.computeBoundsTree.call(e);return e.boundsTree=void 0,await new Promise(o=>setTimeout(o,0)),r}async function Zh(e,t,r){if(e.boundsTree)return;if(t.buildPromise)return t.buildPromise;let o=(async()=>{let n=await r();t.references>0&&!e.boundsTree&&(e.boundsTree=n,t.ownedTree=n)})();return t.buildPromise=o.finally(()=>{t.buildPromise=void 0,t.references===0&&Wi.delete(e)}),t.buildPromise}async function Ra(e,t){if(t?.aborted)return;let r=Lo.get(e);if(!r){if(r=Yh(e),Cd(r)>fi){Lo.set(e,[]);return}Lo.set(e,r);for(let n of r){let i=Wi.get(n)??{references:0};i.references+=1,Wi.set(n,i)}}if(r.length===0)return;$h();let o=await qh();if(t?.aborted){o?.dispose();return}try{for(let n of r){if(t?.aborted)return;let i=Wi.get(n);i&&await Zh(n,i,()=>Jh(n,o?.worker))}}finally{o?.dispose()}}function Na(e){let t=Lo.get(e);if(t){Lo.delete(e);for(let r of t){let o=Wi.get(r);o&&(o.references=Math.max(0,o.references-1),!(o.references>0)&&(o.ownedTree&&r.boundsTree===o.ownedTree&&(Hr.disposeBoundsTree.call(r),r.boundsTree=void 0),o.ownedTree=void 0,o.buildPromise||Wi.delete(r)))}}}var ys=require("@react-three/drei"),ws=require("@react-three/fiber"),em=require("qrcode.react"),gt=require("three");var Pd=require("lucide-react");var Gr=require("react/jsx-runtime");function hi({title:e,message:t,tone:r="default"}){return(0,Gr.jsxs)("div",{className:`ri-license-overlay${r==="error"?" ri-license-overlay--error":""}`,children:[(0,Gr.jsxs)("div",{className:"ri-license-overlay__header",children:[r==="error"?(0,Gr.jsx)(Pd.AlertTriangle,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):(0,Gr.jsx)("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),(0,Gr.jsx)("span",{className:"ri-license-overlay__title",children:e})]}),(0,Gr.jsx)("p",{className:"ri-license-overlay__message",children:t})]})}var Ad=require("react"),Ba=class extends Ad.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(r,o){this.props.onLoadError?.(r)}render(){return this.state.hasError?null:this.props.children}};var $i=require("three");var Td="riEditorGizmo";function Ed(e){return e.userData[Td]=!0,e}function kd(e){let t=[];return e.traverse(r=>{r.visible&&r.userData[Td]&&(r.visible=!1,t.push(r))}),()=>{for(let r of t)r.visible=!0}}function La(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:r,scene:o,camera:n,invalidate:i}=e;if(!r.getContextAttributes().preserveDrawingBuffer)return Promise.reject(new Error("Screenshot capture is disabled. Set preserveDrawingBuffer on ModelViewer to enable it."));let{transparent:s=!1}=t,l=r.getSize(new $i.Vector2),a=r.getPixelRatio(),u=n instanceof $i.PerspectiveCamera?n.aspect:null,f=o.background,d=t.width??l.x,p=t.height??l.y,v=d!==l.x||p!==l.y,x=kd(o);return s&&(o.background=null),v&&(r.setPixelRatio(1),r.setSize(d,p,!1),n instanceof $i.PerspectiveCamera&&(n.aspect=d/p,n.updateProjectionMatrix())),i(),new Promise((_,T)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let y,c;try{y=r.domElement.toDataURL("image/png")}catch(m){c=m}x(),s&&(o.background=f),v&&(r.setPixelRatio(a),r.setSize(l.x,l.y,!1),n instanceof $i.PerspectiveCamera&&u!==null&&(n.aspect=u,n.updateProjectionMatrix())),i(),c?T(c):_(y)})})})}var lr=require("react");var Rd=require("three-stdlib");function Br(e,t){let r=URL.createObjectURL(e),o=document.createElement("a");o.href=r,o.download=t,o.style.display="none";try{document.body.appendChild(o),o.click()}finally{o.remove(),window.setTimeout(()=>{URL.revokeObjectURL(r)},1e3)}}function Nd({scene:e,objectBindings:t,matRefs:r,downloadFilename:o,onComplete:n}){import("three").then(({Group:i,Mesh:s})=>{let l=new i,a=new Map;for(let[d,p]of Object.entries(t))a.set(p.modelObjectId??d,d);let u=d=>{let p=d;for(;p;){let v=p.name||p.uuid,x=a.get(v)??v,_=t[x];if(_?_.visible===!1:p.visible===!1)return!1;p=p.parent}return!0};e.traverse(d=>{let p=d;if(!p.isMesh||!p.geometry||!u(p))return;let v=p.name||p.uuid,x=a.get(v)??v,_=r[x]??p.material;if(!_)return;let T=new s(p.geometry,_);T.name=v,T.applyMatrix4(p.matrixWorld),l.add(T)}),new Rd.GLTFExporter().parse(l,d=>{let p=d instanceof ArrayBuffer?new Blob([d],{type:"model/gltf-binary"}):new Blob([JSON.stringify(d)],{type:"model/gltf+json"}),v=d instanceof ArrayBuffer?".glb":".gltf";Br(p,`${o}${v}`),n()},d=>{console.error("GLTFExporter error:",d),n()},{binary:!0})})}var Id=require("fflate");var Bd=require("fflate");function Oa(e,t=6){return new Promise((r,o)=>{(0,Bd.zip)(e,{level:t},(n,i)=>{n?o(n):r(i)})})}var Do=2048,Ld=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function Od(e){return e.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&apos;")}function bl(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function zd(e){return bl(e,"model")}function hl(e,t){return e.index?Math.round(e.index.getX(t)):t}function Qh(e,t,r){let o=hl(e,r),n=hl(e,r+1),i=hl(e,r+2);if(o>=t.count||n>=t.count||i>=t.count)return null;let s=[{index:o,u:t.getX(o),v:t.getY(o)},{index:n,u:t.getX(n),v:t.getY(n)},{index:i,u:t.getX(i),v:t.getY(i)}];return s.every(l=>Number.isFinite(l.u)&&Number.isFinite(l.v))?s:null}function Dd(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function gl(e,t,r,o){let n,i;o?(n=t.index,i=r.index):(n=Dd(t),i=Dd(r));let s=n<i?`${n}|${i}`:`${i}|${n}`,l=e.get(s);l?l.count+=1:e.set(s,{count:1,start:t,end:r})}function eg(e,t,r){gl(e,t[0],t[1],r),gl(e,t[1],t[2],r),gl(e,t[2],t[0],r)}function tg(e,t){return Array.isArray(e)?e[t]??null:e}function ng(e){let t=new Map,r=0,o=0,n=0;return e.traverse(i=>{let s=i;if(!s.isMesh||!s.geometry||!s.material)return;let l=s.geometry,a=l.getAttribute("uv");if(!a||a.itemSize<2||a.count<3)return;r+=1;let u=s.name||`Mesh ${r}`,f=l.index?.count??a.count,d=l.groups.length>0?l.groups:[{start:0,count:f,materialIndex:0}];for(let p of d){let v=p.materialIndex??0,x=tg(s.material,v);if(!x)continue;let _=t.get(x.uuid);_||(o+=1,_={name:x.name||`Material ${o}`,layers:new Map},t.set(x.uuid,_));let T=_.layers.get(s.uuid);T||(T={name:u,color:Ld[n%Ld.length],edges:new Map},n+=1,_.layers.set(s.uuid,T));let y=Math.max(0,p.start),c=Math.min(f,y+p.count);for(let m=y;m+2<c;m+=3){let S=Qh(l,a,m);S&&eg(T.edges,S,!!l.index)}}}),[...t.values()].filter(i=>[...i.layers.values()].some(s=>s.edges.size>0))}function Da(e){return(e*Do).toFixed(2)}function rg(e){return`M${Da(e.start.u)} ${Da(1-e.start.v)}L${Da(e.end.u)} ${Da(1-e.end.v)}`}function ig(e){let t=Od(e.name),r=[...e.layers.values()].filter(o=>o.edges.size>0).map((o,n)=>{let i=Od(o.name),s=`${bl(o.name,"mesh")}-${n+1}`,l=[...o.edges.values()],a=l.filter(d=>d.count===1),f=(a.length>0?a:l).map(rg).join("");return[` <g id="${s}" data-mesh="${i}" fill="none" stroke="${o.color}"`,' stroke-width="1" stroke-linejoin="round" vector-effect="non-scaling-stroke">',` <title>${i}</title>`,` <path d="${f}"/>`," </g>"].join(`
3664
+ `});var Hy={};$u(Hy,{BindingBuilder:()=>uu,DEFAULT_SCENE_CONFIG:()=>ci,MATERIAL_BLENDING_MODES:()=>Ul,MATERIAL_SIDES:()=>zl,ModelViewer:()=>Fo,SimpleModelViewer:()=>fu,defineObjectBindings:()=>qg,material:()=>Kl,patchBindings:()=>Ji,patchSceneConfig:()=>Zl,selectBindingKeys:()=>Tr,selectBindings:()=>Yl,useObjectBinding:()=>jg,useObjectBindingIds:()=>Gg,useObjectBindings:()=>$g,useSceneConfig:()=>Yg,useShareableViewerState:()=>sb,useViewerActions:()=>Jg,useViewerAnimations:()=>kl,useViewerCamera:()=>El,useViewerConnection:()=>Qg,useViewerEffects:()=>rb,useViewerHover:()=>Kg,useViewerModel:()=>Zg,useViewerSelection:()=>Fg});module.exports=ov(Hy);var I=require("react");var ba=require("three"),si=require("three-mesh-bvh"),Ju=!1,ga=new WeakMap,mo=new WeakMap;function lv(){Ju||(ba.Mesh.prototype.raycast=si.acceleratedRaycast,Ju=!0)}function cv(e){let t=new Set;return e.traverse(n=>{let a=n.geometry;!a||!a.attributes?.position||t.add(a)}),[...t]}function Qu(e){let t=0;for(let n of e){let a=n.index?n.index.count:n.attributes.position.count;t+=a/3}return t}var Di=12e6;function bs(e){return ho(e)>Di}function ho(e){let t=new Set;return e.traverse(n=>{let a=n.geometry;a?.attributes?.position&&t.add(a)}),Qu([...t])}function dv(e,t){return new Promise((n,a)=>{let r=c=>{let d=c.data;if(!d||!d.error&&!d.serialized)return;if(e.removeEventListener("message",r),e.removeEventListener("error",i),d.error){a(new Error(String(d.error)));return}let{serialized:p}=d,h=si.MeshBVH.deserialize(p,t,{setIndex:!1});p.index&&(t.index?t.index.array=p.index:t.setIndex(new ba.BufferAttribute(p.index,1,!1))),t.boundingBox=h.getBoundingBox(new ba.Box3),n(h)},i=c=>{e.removeEventListener("message",r),e.removeEventListener("error",i),a(new Error(c.message||"BVH worker error"))};e.addEventListener("message",r),e.addEventListener("error",i);let s=t.index?t.index.array.slice():null,l=t.attributes.position.array.slice(),o=[l,...s?[s]:[]].map(c=>c.buffer);e.postMessage({index:s,position:l,options:{groups:[...t.groups]}},o)})}async function uv(){if(typeof window>"u"||typeof Worker>"u")return null;try{let{bvhWorkerCode:e}=await Promise.resolve().then(()=>(Zu(),Ku)),t=new Blob([e],{type:"text/javascript"}),n=URL.createObjectURL(t),a=new Worker(n);return{worker:a,dispose:()=>{a.terminate(),URL.revokeObjectURL(n)}}}catch{return null}}async function pv(e,t){if(t)try{return await dv(t,e)}catch{}let n=si.computeBoundsTree.call(e);return e.boundsTree=void 0,await new Promise(a=>setTimeout(a,0)),n}async function mv(e,t,n){if(e.boundsTree)return;if(t.buildPromise)return t.buildPromise;let a=(async()=>{let r=await n();t.references>0&&!e.boundsTree&&(e.boundsTree=r,t.ownedTree=r)})();return t.buildPromise=a.finally(()=>{t.buildPromise=void 0,t.references===0&&ga.delete(e)}),t.buildPromise}async function vs(e,t){if(t?.aborted)return;let n=mo.get(e);if(!n){if(n=cv(e),Qu(n)>Di){mo.set(e,[]);return}mo.set(e,n);for(let r of n){let i=ga.get(r)??{references:0};i.references+=1,ga.set(r,i)}}if(n.length===0)return;lv();let a=await uv();if(t?.aborted){a?.dispose();return}try{for(let r of n){if(t?.aborted)return;let i=ga.get(r);i&&await mv(r,i,()=>pv(r,a?.worker))}}finally{a?.dispose()}}function xs(e){let t=mo.get(e);if(t){mo.delete(e);for(let n of t){let a=ga.get(n);a&&(a.references=Math.max(0,a.references-1),!(a.references>0)&&(a.ownedTree&&n.boundsTree===a.ownedTree&&(si.disposeBoundsTree.call(n),n.boundsTree=void 0),a.ownedTree=void 0,a.buildPromise||ga.delete(n)))}}}var Tl=require("@react-three/drei"),Al=require("@react-three/fiber"),bf=require("qrcode.react"),wt=require("three");var ep=require("lucide-react");var li=require("react/jsx-runtime");function Oi({title:e,message:t,tone:n="default"}){return(0,li.jsxs)("div",{className:`ri-license-overlay${n==="error"?" ri-license-overlay--error":""}`,children:[(0,li.jsxs)("div",{className:"ri-license-overlay__header",children:[n==="error"?(0,li.jsx)(ep.AlertTriangle,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):(0,li.jsx)("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),(0,li.jsx)("span",{className:"ri-license-overlay__title",children:e})]}),(0,li.jsx)("p",{className:"ri-license-overlay__message",children:t})]})}var tp=require("react"),ys=class extends tp.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,a){this.props.onLoadError?.(n)}render(){return this.state.hasError?null:this.props.children}};var va=require("three");var np="riEditorGizmo";function rp(e){return e.userData[np]=!0,e}function ip(e){let t=[];return e.traverse(n=>{n.visible&&n.userData[np]&&(n.visible=!1,t.push(n))}),()=>{for(let n of t)n.visible=!0}}function ws(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:n,scene:a,camera:r,invalidate:i}=e;if(!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 va.Vector2),o=n.getPixelRatio(),c=r instanceof va.PerspectiveCamera?r.aspect:null,d=a.background,p=t.width??l.x,h=t.height??l.y,f=p!==l.x||h!==l.y,b=ip(a);return s&&(a.background=null),f&&(n.setPixelRatio(1),n.setSize(p,h,!1),r instanceof va.PerspectiveCamera&&(r.aspect=p/h,r.updateProjectionMatrix())),i(),new Promise((w,k)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let x,u;try{x=n.domElement.toDataURL("image/png")}catch(m){u=m}b(),s&&(a.background=d),f&&(n.setPixelRatio(o),n.setSize(l.x,l.y,!1),r instanceof va.PerspectiveCamera&&c!==null&&(r.aspect=c,r.updateProjectionMatrix())),i(),u?k(u):w(x)})})})}var vr=require("react");var ap=require("three-stdlib");function qr(e,t){let n=URL.createObjectURL(e),a=document.createElement("a");a.href=n,a.download=t,a.style.display="none";try{document.body.appendChild(a),a.click()}finally{a.remove(),window.setTimeout(()=>{URL.revokeObjectURL(n)},1e3)}}function op({scene:e,objectBindings:t,matRefs:n,downloadFilename:a,onComplete:r}){import("three").then(({Group:i,Mesh:s})=>{let l=new i,o=new Map;for(let[p,h]of Object.entries(t))o.set(h.modelObjectId??p,p);let c=p=>{let h=p;for(;h;){let f=h.name||h.uuid,b=o.get(f)??f,w=t[b];if(w?w.visible===!1:h.visible===!1)return!1;h=h.parent}return!0};e.traverse(p=>{let h=p;if(!h.isMesh||!h.geometry||!c(h))return;let f=h.name||h.uuid,b=o.get(f)??f,w=n[b]??h.material;if(!w)return;let k=new s(h.geometry,w);k.name=f,k.applyMatrix4(h.matrixWorld),l.add(k)}),new ap.GLTFExporter().parse(l,p=>{let h=p instanceof ArrayBuffer?new Blob([p],{type:"model/gltf-binary"}):new Blob([JSON.stringify(p)],{type:"model/gltf+json"}),f=p instanceof ArrayBuffer?".glb":".gltf";qr(h,`${a}${f}`),r()},p=>{console.error("GLTFExporter error:",p),r()},{binary:!0})})}var up=require("fflate");var sp=require("fflate");function Ss(e,t=6){return new Promise((n,a)=>{(0,sp.zip)(e,{level:t},(r,i)=>{r?a(r):n(i)})})}var fo=2048,lp=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function cp(e){return e.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&apos;")}function Mc(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function pp(e){return Mc(e,"model")}function Sc(e,t){return e.index?Math.round(e.index.getX(t)):t}function hv(e,t,n){let a=Sc(e,n),r=Sc(e,n+1),i=Sc(e,n+2);if(a>=t.count||r>=t.count||i>=t.count)return null;let s=[{index:a,u:t.getX(a),v:t.getY(a)},{index:r,u:t.getX(r),v:t.getY(r)},{index:i,u:t.getX(i),v:t.getY(i)}];return s.every(l=>Number.isFinite(l.u)&&Number.isFinite(l.v))?s:null}function dp(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function _c(e,t,n,a){let r,i;a?(r=t.index,i=n.index):(r=dp(t),i=dp(n));let s=r<i?`${r}|${i}`:`${i}|${r}`,l=e.get(s);l?l.count+=1:e.set(s,{count:1,start:t,end:n})}function fv(e,t,n){_c(e,t[0],t[1],n),_c(e,t[1],t[2],n),_c(e,t[2],t[0],n)}function gv(e,t){return Array.isArray(e)?e[t]??null:e}function bv(e){let t=new Map,n=0,a=0,r=0;return e.traverse(i=>{let s=i;if(!s.isMesh||!s.geometry||!s.material)return;let l=s.geometry,o=l.getAttribute("uv");if(!o||o.itemSize<2||o.count<3)return;n+=1;let c=s.name||`Mesh ${n}`,d=l.index?.count??o.count,p=l.groups.length>0?l.groups:[{start:0,count:d,materialIndex:0}];for(let h of p){let f=h.materialIndex??0,b=gv(s.material,f);if(!b)continue;let w=t.get(b.uuid);w||(a+=1,w={name:b.name||`Material ${a}`,layers:new Map},t.set(b.uuid,w));let k=w.layers.get(s.uuid);k||(k={name:c,color:lp[r%lp.length],edges:new Map},r+=1,w.layers.set(s.uuid,k));let x=Math.max(0,h.start),u=Math.min(d,x+h.count);for(let m=x;m+2<u;m+=3){let _=hv(l,o,m);_&&fv(k.edges,_,!!l.index)}}}),[...t.values()].filter(i=>[...i.layers.values()].some(s=>s.edges.size>0))}function _s(e){return(e*fo).toFixed(2)}function vv(e){return`M${_s(e.start.u)} ${_s(1-e.start.v)}L${_s(e.end.u)} ${_s(1-e.end.v)}`}function xv(e){let t=cp(e.name),n=[...e.layers.values()].filter(a=>a.edges.size>0).map((a,r)=>{let i=cp(a.name),s=`${Mc(a.name,"mesh")}-${r+1}`,l=[...a.edges.values()],o=l.filter(p=>p.count===1),d=(o.length>0?o:l).map(vv).join("");return[` <g id="${s}" data-mesh="${i}" fill="none" stroke="${a.color}"`,' stroke-width="1" stroke-linejoin="round" vector-effect="non-scaling-stroke">',` <title>${i}</title>`,` <path d="${d}"/>`," </g>"].join(`
3665
3665
  `)}).join(`
3666
- `);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${Do}" height="${Do}" viewBox="0 0 ${Do} ${Do}">`,` <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"/>',r,"</svg>"].join(`
3667
- `)}function og(e,t="model"){let r=ng(e),o=zd(t);return r.map((n,i)=>{let s=bl(n.name,`material-${i+1}`);return{filename:r.length===1?`${o}-uv-layout.svg`:`${o}-uv-${s}-${i+1}.svg`,materialName:n.name,meshCount:[...n.layers.values()].filter(a=>a.edges.size>0).length,svg:ig(n)}})}async function Ud(e,t="model"){let r=og(e,t);if(r.length===0)return r;if(r.length===1)return Br(new Blob([r[0].svg],{type:"image/svg+xml;charset=utf-8"}),r[0].filename),r;let o=Object.fromEntries(r.map(i=>[i.filename,(0,Id.strToU8)(i.svg)])),n=await Oa(o);return Br(new Blob([n],{type:"application/zip"}),`${zd(t)}-uv-layouts.zip`),r}function Vd({sceneRef:e,materialRefs:t,rendererCaptureRef:r,objectBindings:o,downloadFilename:n}){let[i,s]=(0,lr.useState)(!1),[l,a]=(0,lr.useState)(!1),[u,f]=(0,lr.useState)(null);(0,lr.useEffect)(()=>{if(!l)return;let _=()=>a(!1);return window.addEventListener("pointerdown",_),()=>window.removeEventListener("pointerdown",_)},[l]);let d=(0,lr.useCallback)(()=>{f(null),a(_=>!_)},[]),p=(0,lr.useCallback)(()=>{let _=e.current;_&&(a(!1),s(!0),Nd({scene:_,objectBindings:o,matRefs:t.current,downloadFilename:n,onComplete:()=>s(!1)}))},[n,t,o,e]),v=(0,lr.useCallback)(()=>{a(!1),La(r.current).then(_=>{let T=document.createElement("a");T.href=_,T.download=`${n}.png`,document.body.appendChild(T),T.click(),document.body.removeChild(T)}).catch(_=>{console.error("Screenshot failed:",_)})},[n,r]),x=(0,lr.useCallback)(async()=>{let _=e.current;if(_)try{if((await Ud(_,n)).length===0){f("This model does not contain UV coordinates.");return}f(null),a(!1)}catch(T){console.error("UV layout export failed:",T),f("Could not create the UV layout archive.")}},[n,e]);return{isDownloading:i,downloadMenuOpen:l,uvExportError:u,toggleDownloadMenu:d,handleDownloadMesh:p,handleDownloadScreenshot:v,handleDownloadUvLayout:x}}var Jt=require("react"),cr=require("three");function ag(e){let t=new cr.Box3().setFromObject(e),r=new cr.Vector3;return t.getSize(r),{min:[t.min.x,t.min.y,t.min.z],max:[t.max.x,t.max.y,t.max.z],size:[r.x,r.y,r.z]}}function sg(e){let t=new cr.Box3().setFromObject(e);if(t.isEmpty())return null;let r=t.getCenter(new cr.Vector3),o=t.getSize(new cr.Vector3).length()/2;return!Number.isFinite(o)||o<=0?null:{center:[r.x,r.y,r.z],radius:o}}function jd({canvasAreaRef:e,controlsRef:t,sceneRef:r,modelUrl:o,modelRotation:n,bindingTransformSignature:i,modelLoaded:s}){let[l,a]=(0,Jt.useState)(!1),[u,f]=(0,Jt.useState)([]),[d,p]=(0,Jt.useState)(!1),[v,x]=(0,Jt.useState)(null),[_,T]=(0,Jt.useState)(null),y=(0,Jt.useRef)(!1),c=(0,Jt.useRef)(0),m=(0,Jt.useRef)(null);y.current=l;let S=(0,Jt.useCallback)(g=>{g.updateMatrixWorld(!0),x(ag(g)),T(sg(g))},[]),C=(0,Jt.useCallback)(()=>f([]),[]),N=(0,Jt.useCallback)(()=>a(g=>!g),[]),E=(0,Jt.useCallback)(()=>p(g=>!g),[]),h=(0,Jt.useCallback)(g=>{y.current&&(m.current={x:g.clientX,y:g.clientY})},[]),w=(0,Jt.useCallback)(g=>{if(!y.current)return;let M=m.current;if(m.current=null,M&&Math.hypot(g.clientX-M.x,g.clientY-M.y)>6||g.target.closest("button, input, textarea, .ri-measureTools"))return;let H=e.current,G=t.current?.camera,k=r.current;if(!H||!G||!k)return;let $=H.getBoundingClientRect(),j=(g.clientX-$.left)/$.width*2-1,P=-((g.clientY-$.top)/$.height)*2+1,A=new cr.Raycaster;A.setFromCamera(new cr.Vector2(j,P),G);let W=A.intersectObject(k,!0)[0];W&&(c.current+=1,f(F=>[...F,{id:c.current,position:[W.point.x,W.point.y,W.point.z]}]))},[e,t,r]);return(0,Jt.useEffect)(()=>{f([]),x(null),T(null)},[o]),(0,Jt.useEffect)(()=>{f([])},[n,i]),(0,Jt.useEffect)(()=>{let g=r.current;!s||!g||S(g)},[i,s,S,r]),{measureMode:l,measureModeRef:y,measurePoints:u,showDimensions:d,measureBox:v,modelBounds:_,refreshBounds:S,clearMeasurements:C,toggleMeasureMode:N,toggleDimensions:E,handleMeasurePointerDown:h,handleMeasureClick:w}}var Wd=require("react-dom"),Xd=require("@react-three/xr"),$d=require("lucide-react"),pt=require("react");function vl(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function xl(){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 Fd(){return vl()||xl()}function lg(){if(typeof window>"u"||typeof navigator>"u")return!1;let e=s=>typeof window.matchMedia=="function"&&window.matchMedia(s).matches,t=e("(pointer: coarse)")||e("(any-pointer: coarse)"),r=e("(hover: none)")||e("(any-hover: none)"),o=navigator.maxTouchPoints>0,n=typeof window.screen<"u"&&Math.min(window.screen.width,window.screen.height)<=1024,i=vl();return t||i||o&&r||o&&n}function yl(){if(!lg())return!1;if(vl())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function Hd(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return yl()}}var Vn=require("react/jsx-runtime"),Gd={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function Yd({enableXR:e,usdzUrl:t,mobileHandoffUrl:r}){let o=(0,pt.useRef)(null),n=(0,pt.useMemo)(()=>{if(!e||typeof navigator>"u")return null;let j=navigator.xr;if(!j||typeof j.isSessionSupported!="function"||typeof j.addEventListener!="function")return null;try{return(0,Xd.createXRStore)({emulate:!1})}catch{return null}},[e]),[i,s]=(0,pt.useState)(!1),[l,a]=(0,pt.useState)(!1),[u,f]=(0,pt.useState)(!0),[d,p]=(0,pt.useState)(null),[v,x]=(0,pt.useState)(!1),[_,T]=(0,pt.useState)(!1),[y,c]=(0,pt.useState)(Gd),[m,S]=(0,pt.useState)(!1),C=(0,pt.useMemo)(()=>e&&!!t?.trim()&&xl(),[e,t]);(0,pt.useEffect)(()=>{f(Fd())},[]);let N=(0,pt.useCallback)(()=>{if(typeof window>"u")return null;try{let j=new URL(r?.trim()||window.location.href,window.location.href);return j.protocol==="http:"||j.protocol==="https:"?j.toString():null}catch{return null}},[r]);(0,pt.useEffect)(()=>{if(!e||u){p(null),x(!1);return}p(N())},[e,u,N]),(0,pt.useEffect)(()=>{if(n)return n.subscribe(j=>T(j.session!=null&&j.mode==="immersive-ar"))},[n]),(0,pt.useEffect)(()=>{S(!1),c(Gd)},[_]),(0,pt.useEffect)(()=>{if(!e||typeof navigator>"u")return;let j=navigator.xr;if(!j?.isSessionSupported)return;let P=!1;return j.isSessionSupported("immersive-ar").then(A=>!P&&s(A)).catch(()=>{}),j.isSessionSupported("immersive-vr").then(A=>!P&&a(A)).catch(()=>{}),()=>{P=!0}},[e]);let E=(0,pt.useCallback)(()=>{let j=N();j&&(p(j),x(!0))},[N]),h=(0,pt.useCallback)(()=>x(!1),[]),w=(0,pt.useCallback)(()=>{let j=t?.trim();if(!j)return;let P=document.createElement("a");P.setAttribute("rel","ar"),P.href=j,P.style.display="none";let A=document.createElement("img");A.alt="",A.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",P.appendChild(A),document.body.appendChild(P),P.click(),P.remove()},[t]),g=(0,pt.useCallback)(j=>{c(j),j.isPlacementMode||S(!1)},[]),M=(0,pt.useCallback)(j=>{S(!1),j?o.current?.finishPlacementMode():o.current?.cancelPlacementMode()},[]),D=(0,pt.useCallback)(j=>{j.preventDefault(),S(!0),o.current?.startPlacementMode()},[]);(0,pt.useEffect)(()=>{if(!m)return;let j=()=>M(!0),P=()=>M(!1);return window.addEventListener("pointerup",j),window.addEventListener("pointercancel",P),()=>{window.removeEventListener("pointerup",j),window.removeEventListener("pointercancel",P)}},[M,m]);let H=y.isModelPlaced?y.isPlacementMode?y.canPlace?"Release to place":"Move your device over a flat surface":null:y.canPlace?null:"Move your device over a flat surface",G=y.isModelPlaced&&!y.isPlacementMode?"Pinch to resize \xB7 Twist to rotate":null,k=n?.getState().domOverlayRoot??null,$=_&&k?(0,Wd.createPortal)((0,Vn.jsxs)(Vn.Fragment,{children:[G&&(0,Vn.jsx)("div",{className:"ri-arHintOverlay",children:(0,Vn.jsx)("div",{className:"ri-arHint",children:G})}),(0,Vn.jsx)("div",{className:"ri-arOverlay",children:(0,Vn.jsxs)("div",{className:"ri-arControls",children:[H&&(0,Vn.jsx)("div",{className:"ri-arStatus",children:H}),y.isModelPlaced&&(0,Vn.jsxs)("button",{type:"button",className:`ri-arActionButton ${m?"ri-arActionButton--active":""}`,onPointerDown:j=>D(j.nativeEvent),"aria-pressed":m,children:[(0,Vn.jsx)($d.MapPin,{size:14}),"Relocate"]}),!y.isModelPlaced&&y.canPlace&&(0,Vn.jsx)("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>o.current?.placeCurrent(),children:"Tap to place"})]})})]}),k):null;return{xrStore:n,presenterRef:o,arSupported:i,vrSupported:l,quickLookSupported:C,resolvedMobileHandoffUrl:d,isMobileHandoffOpen:v,arOverlay:$,openMobileHandoff:E,closeMobileHandoff:h,openQuickLook:w,handleARStateChange:g}}var Ga=require("@react-three/fiber"),Wa=require("@react-three/drei"),Au=require("@react-three/xr"),Tu=require("three"),ur=require("react");function Ia(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var Kd=["none","directional","point","spot","hemisphere"],qd=["pbr","matcap","uv-checker"],Jd=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];var Zd=["sporadic","constantMild","constantWild"],Qd=["linear","radial","mirroredLinear"],Io=["verySmall","small","medium","large","veryLarge","huge"],cg={clips:[],autoplayClip:null},dg={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}},Wr={model:{rotation:[0,0,0],showAdvancedRotation:!1,renderer:"pbr",shading:"lit"},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:dg,animations:cg,annotations:[]};var Xn=require("@react-three/fiber"),wl=require("@react-three/xr"),za=require("three"),jn=require("react");function eu({renderMode:e}){let{scene:t}=(0,Xn.useThree)(),r=(0,Xn.useThree)(s=>s.setFrameloop),o=(0,wl.useXR)(s=>s.session!=null),n=(0,wl.useXR)(s=>s.mode==="immersive-ar"),i=(0,jn.useRef)(void 0);return(0,jn.useEffect)(()=>{r(o?"always":e)},[o,e,r]),(0,jn.useEffect)(()=>{n?(i.current=t.background,t.background=null):i.current!==void 0&&(t.background=i.current,i.current=void 0)},[n,t]),(0,Xn.useFrame)(()=>{n&&t.background!==null&&(t.background=null)}),null}function tu({onPresentingChange:e}){let t=(0,Xn.useThree)(n=>n.gl),r=(0,jn.useRef)(null);(0,jn.useEffect)(()=>{let n=t.xr;if(!n)return;let i=a=>{a?(r.current=t.shadowMap.enabled,t.shadowMap.enabled=!1):r.current!==null&&(t.shadowMap.enabled=r.current,r.current=null),e(a)},s=()=>i(!0),l=()=>i(!1);return n.addEventListener("sessionstart",s),n.addEventListener("sessionend",l),i(n.isPresenting),()=>{n.removeEventListener("sessionstart",s),n.removeEventListener("sessionend",l)}},[t,e]);let o=(0,jn.useRef)(0);return(0,Xn.useFrame)(()=>{if(!t.xr.isPresenting)return;let n=performance.now();if(n-o.current<1e3)return;o.current=n;let i=t.xr}),null}function nu({active:e}){let t=(0,Xn.useThree)(r=>r.invalidate);return(0,jn.useEffect)(()=>{e&&t()},[e,t]),(0,Xn.useFrame)(()=>{e&&t()}),null}function ru({color:e}){let{scene:t}=(0,Xn.useThree)();return(0,jn.useEffect)(()=>{let r=t.background;return t.background=e?new za.Color(e):null,()=>{t.background=r}},[t,e]),null}function iu({rotation:e}){let{scene:t}=(0,Xn.useThree)();return(0,jn.useLayoutEffect)(()=>{let r=e*Math.PI/180;t.environmentRotation.set(0,r,0),t.backgroundRotation.set(0,r,0)}),null}function ou({cameraConfig:e}){let{camera:t}=(0,Xn.useThree)();return(0,jn.useEffect)(()=>{if(!(t instanceof za.PerspectiveCamera))return;let r=e?.fov;typeof r=="number"&&t.fov!==r&&(t.fov=r,t.updateProjectionMatrix())},[t,e]),null}var El=require("@react-three/fiber"),Pe=require("@react-three/postprocessing"),$r=require("postprocessing"),dr=require("three"),Kn=require("react");var Zt=require("three"),Yi=new Map,Xr={color:"#93c5fd",intensity:.07},Cl=new Zt.Color(Xr.color).multiplyScalar(Xr.intensity),Ki=new Map,Ml=new Map;function ug(e){return`${e.name}|${e.size}|${e.lastModified}`}function au(e){let t=ug(e),r=e.name.lastIndexOf("."),o=r>0?e.name.slice(0,r):e.name,n=r>0?e.name.slice(r):"",i=`materials/${e.name}`,s=2;for(;;){let l=Ml.get(i);if(l===void 0||l===t)return Ml.set(i,t),i;i=`materials/${o}-${s}${n}`,s+=1}}function su(e){return Ki.get(e)}function lu(e,t){let r=++e.loadGeneration;e.loaded=!1;let o=()=>{if(e.loadGeneration!==r)return;e.loaded=!0;let n=e.pending;e.pending=[];for(let i of n)i()};new Zt.ImageLoader().load(t,n=>{e.loadGeneration===r&&(e.texture.image=n,e.texture.needsUpdate=!0,o())},void 0,()=>{e.loadGeneration===r&&(console.warn(`Failed to load texture: ${t}`),o())})}function cu(e,t){for(let r of[Zt.SRGBColorSpace,Zt.NoColorSpace]){let o=Yi.get(zo(e,r));o&&lu(o,t)}}function du(e,t){let r=Ki.get(e);r&&r!==t&&r.startsWith("blob:")&&URL.revokeObjectURL(r),Ki.set(e,t),cu(e,t)}function Pl(e){let t=Ki.get(e);t&&(t.startsWith("blob:")&&URL.revokeObjectURL(t),Ki.delete(e),Ml.delete(e),cu(e,e))}function zo(e,t){return`${t}|${e}`}function Qt(e,t=Zt.NoColorSpace,r){let o=zo(e,t),n=Yi.get(o);if(n)return r&&!n.loaded&&n.pending.push(r),n.texture;let i=Ki.get(e)??e,s={texture:new Zt.Texture,refCount:0,loaded:!1,pending:r?[r]:[],loadGeneration:0};return s.texture.flipY=!1,s.texture.colorSpace=t,Yi.set(o,s),lu(s,i),s.texture}function uu(e,t=Zt.NoColorSpace,r){let o=Qt(e,t,r);return Yi.get(zo(e,t)).refCount+=1,o}function Ua(e,t=Zt.NoColorSpace){let r=Yi.get(zo(e,t));r&&(r.refCount-=1,r.refCount<=0&&(r.loadGeneration+=1,r.pending=[],r.texture.dispose(),Yi.delete(zo(e,t))))}var _l=null;function pu(){if(_l)return _l;let e=256,t=document.createElement("canvas");t.width=e,t.height=e;let r=t.getContext("2d"),o=r.createRadialGradient(e*.35,e*.35,e*.02,e*.5,e*.5,e*.55);o.addColorStop(0,"#ffffff"),o.addColorStop(.4,"#b5b5b5"),o.addColorStop(1,"#3a3a3a"),r.fillStyle=o,r.fillRect(0,0,e,e);let n=new Zt.CanvasTexture(t);return n.colorSpace=Zt.SRGBColorSpace,_l=n,n}var Sl=null;function mu(){if(Sl)return Sl;let e=1024,t=8,r=e/t,o=["#ef4444","#f59e0b","#22c55e","#6366f1"],n=document.createElement("canvas");n.width=e,n.height=e;let i=n.getContext("2d");i.textAlign="center",i.textBaseline="middle";for(let l=0;l<t;l+=1)for(let a=0;a<t;a+=1){let u=a*r,f=l*r,d=(Math.floor(a/2)+Math.floor(l/2))%4;i.fillStyle=o[d],i.fillRect(u,f,r,r),i.strokeStyle="rgba(0, 0, 0, 0.28)",i.lineWidth=2;for(let c=1;c<4;c+=1){let m=c*r/4;i.beginPath(),i.moveTo(u+m,f),i.lineTo(u+m,f+r),i.moveTo(u,f+m),i.lineTo(u+r,f+m),i.stroke()}i.strokeStyle="#09090b",i.lineWidth=7,i.strokeRect(u,f,r,r);let p=u+r*.23,v=f+r*.72,x=u+r*.72,_=f+r*.23;i.lineCap="round",i.lineJoin="round",i.beginPath(),i.moveTo(p,v),i.lineTo(x,_),i.lineTo(x-r*.2,_),i.moveTo(x,_),i.lineTo(x,_+r*.2),i.stroke();let T=l*t+a+1;i.font=`700 ${Math.round(r*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,i.fillStyle="#ffffff",i.strokeStyle="rgba(0, 0, 0, 0.85)",i.lineWidth=6;let y=String(T).padStart(2,"0");i.strokeText(y,u+r/2,f+r*.82),i.fillText(y,u+r/2,f+r*.82)}let s=new Zt.CanvasTexture(n);return s.colorSpace=Zt.SRGBColorSpace,s.wrapS=Zt.RepeatWrapping,s.wrapT=Zt.RepeatWrapping,s.flipY=!1,s.anisotropy=8,s.needsUpdate=!0,Sl=s,s}var qi=require("react"),Va=require("postprocessing"),fu=require("three"),gu=require("react/jsx-runtime"),pg=`
3666
+ `);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${fo}" height="${fo}" viewBox="0 0 ${fo} ${fo}">`,` <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(`
3667
+ `)}function yv(e,t="model"){let n=bv(e),a=pp(t);return n.map((r,i)=>{let s=Mc(r.name,`material-${i+1}`);return{filename:n.length===1?`${a}-uv-layout.svg`:`${a}-uv-${s}-${i+1}.svg`,materialName:r.name,meshCount:[...r.layers.values()].filter(o=>o.edges.size>0).length,svg:xv(r)}})}async function mp(e,t="model"){let n=yv(e,t);if(n.length===0)return n;if(n.length===1)return qr(new Blob([n[0].svg],{type:"image/svg+xml;charset=utf-8"}),n[0].filename),n;let a=Object.fromEntries(n.map(i=>[i.filename,(0,up.strToU8)(i.svg)])),r=await Ss(a);return qr(new Blob([r],{type:"application/zip"}),`${pp(t)}-uv-layouts.zip`),n}function hp({sceneRef:e,materialRefs:t,rendererCaptureRef:n,objectBindings:a,downloadFilename:r}){let[i,s]=(0,vr.useState)(!1),[l,o]=(0,vr.useState)(!1),[c,d]=(0,vr.useState)(null);(0,vr.useEffect)(()=>{if(!l)return;let w=()=>o(!1);return window.addEventListener("pointerdown",w),()=>window.removeEventListener("pointerdown",w)},[l]);let p=(0,vr.useCallback)(()=>{d(null),o(w=>!w)},[]),h=(0,vr.useCallback)(()=>{let w=e.current;w&&(o(!1),s(!0),op({scene:w,objectBindings:a,matRefs:t.current,downloadFilename:r,onComplete:()=>s(!1)}))},[r,t,a,e]),f=(0,vr.useCallback)(()=>{o(!1),ws(n.current).then(w=>{let k=document.createElement("a");k.href=w,k.download=`${r}.png`,document.body.appendChild(k),k.click(),document.body.removeChild(k)}).catch(w=>{console.error("Screenshot failed:",w)})},[r,n]),b=(0,vr.useCallback)(async()=>{let w=e.current;if(w)try{if((await mp(w,r)).length===0){d("This model does not contain UV coordinates.");return}d(null),o(!1)}catch(k){console.error("UV layout export failed:",k),d("Could not create the UV layout archive.")}},[r,e]);return{isDownloading:i,downloadMenuOpen:l,uvExportError:c,toggleDownloadMenu:p,handleDownloadMesh:h,handleDownloadScreenshot:f,handleDownloadUvLayout:b}}var tn=require("react"),xr=require("three");function wv(e){let t=new xr.Box3().setFromObject(e),n=new xr.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 Sv(e){let t=new xr.Box3().setFromObject(e);if(t.isEmpty())return null;let n=t.getCenter(new xr.Vector3),a=t.getSize(new xr.Vector3).length()/2;return!Number.isFinite(a)||a<=0?null:{center:[n.x,n.y,n.z],radius:a}}function fp({canvasAreaRef:e,controlsRef:t,sceneRef:n,modelUrl:a,modelRotation:r,bindingTransformSignature:i,modelLoaded:s}){let[l,o]=(0,tn.useState)(!1),[c,d]=(0,tn.useState)([]),[p,h]=(0,tn.useState)(!1),[f,b]=(0,tn.useState)(null),[w,k]=(0,tn.useState)(null),x=(0,tn.useRef)(!1),u=(0,tn.useRef)(0),m=(0,tn.useRef)(null);x.current=l;let _=(0,tn.useCallback)(v=>{v.updateMatrixWorld(!0),b(wv(v)),k(Sv(v))},[]),M=(0,tn.useCallback)(()=>d([]),[]),C=(0,tn.useCallback)(()=>o(v=>!v),[]),A=(0,tn.useCallback)(()=>h(v=>!v),[]),g=(0,tn.useCallback)(v=>{x.current&&(m.current={x:v.clientX,y:v.clientY})},[]),S=(0,tn.useCallback)(v=>{if(!x.current)return;let P=m.current;if(m.current=null,P&&Math.hypot(v.clientX-P.x,v.clientY-P.y)>6||v.target.closest("button, input, textarea, .ri-measureTools"))return;let E=e.current,V=t.current?.camera,T=n.current;if(!E||!V||!T)return;let G=E.getBoundingClientRect(),W=(v.clientX-G.left)/G.width*2-1,R=-((v.clientY-G.top)/G.height)*2+1,N=new xr.Raycaster;N.setFromCamera(new xr.Vector2(W,R),V);let Z=N.intersectObject(T,!0)[0];Z&&(u.current+=1,d($=>[...$,{id:u.current,position:[Z.point.x,Z.point.y,Z.point.z]}]))},[e,t,n]);return(0,tn.useEffect)(()=>{d([]),b(null),k(null)},[a]),(0,tn.useEffect)(()=>{d([])},[r,i]),(0,tn.useEffect)(()=>{let v=n.current;!s||!v||_(v)},[i,s,_,n]),{measureMode:l,measureModeRef:x,measurePoints:c,showDimensions:p,measureBox:f,modelBounds:w,refreshBounds:_,clearMeasurements:M,toggleMeasureMode:C,toggleDimensions:A,handleMeasurePointerDown:g,handleMeasureClick:S}}var xp=require("react-dom"),yp=require("@react-three/xr"),wp=require("lucide-react"),ft=require("react");function Cc(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function Pc(){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 gp(){return Cc()||Pc()}function _v(){if(typeof window>"u"||typeof navigator>"u")return!1;let e=s=>typeof window.matchMedia=="function"&&window.matchMedia(s).matches,t=e("(pointer: coarse)")||e("(any-pointer: coarse)"),n=e("(hover: none)")||e("(any-hover: none)"),a=navigator.maxTouchPoints>0,r=typeof window.screen<"u"&&Math.min(window.screen.width,window.screen.height)<=1024,i=Cc();return t||i||a&&n||a&&r}function Tc(){if(!_v())return!1;if(Cc())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function bp(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return Tc()}}var Yn=require("react/jsx-runtime"),vp={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function Sp({enableXR:e,usdzUrl:t,mobileHandoffUrl:n}){let a=(0,ft.useRef)(null),r=(0,ft.useMemo)(()=>{if(!e||typeof navigator>"u")return null;let W=navigator.xr;if(!W||typeof W.isSessionSupported!="function"||typeof W.addEventListener!="function")return null;try{return(0,yp.createXRStore)({emulate:!1})}catch{return null}},[e]),[i,s]=(0,ft.useState)(!1),[l,o]=(0,ft.useState)(!1),[c,d]=(0,ft.useState)(!0),[p,h]=(0,ft.useState)(null),[f,b]=(0,ft.useState)(!1),[w,k]=(0,ft.useState)(!1),[x,u]=(0,ft.useState)(vp),[m,_]=(0,ft.useState)(!1),M=(0,ft.useMemo)(()=>e&&!!t?.trim()&&Pc(),[e,t]);(0,ft.useEffect)(()=>{d(gp())},[]);let C=(0,ft.useCallback)(()=>{if(typeof window>"u")return null;try{let W=new URL(n?.trim()||window.location.href,window.location.href);return W.protocol==="http:"||W.protocol==="https:"?W.toString():null}catch{return null}},[n]);(0,ft.useEffect)(()=>{if(!e||c){h(null),b(!1);return}h(C())},[e,c,C]),(0,ft.useEffect)(()=>{if(r)return r.subscribe(W=>k(W.session!=null&&W.mode==="immersive-ar"))},[r]),(0,ft.useEffect)(()=>{_(!1),u(vp)},[w]),(0,ft.useEffect)(()=>{if(!e||typeof navigator>"u")return;let W=navigator.xr;if(!W?.isSessionSupported)return;let R=!1;return W.isSessionSupported("immersive-ar").then(N=>!R&&s(N)).catch(()=>{}),W.isSessionSupported("immersive-vr").then(N=>!R&&o(N)).catch(()=>{}),()=>{R=!0}},[e]);let A=(0,ft.useCallback)(()=>{let W=C();W&&(h(W),b(!0))},[C]),g=(0,ft.useCallback)(()=>b(!1),[]),S=(0,ft.useCallback)(()=>{let W=t?.trim();if(!W)return;let R=document.createElement("a");R.setAttribute("rel","ar"),R.href=W,R.style.display="none";let N=document.createElement("img");N.alt="",N.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",R.appendChild(N),document.body.appendChild(R),R.click(),R.remove()},[t]),v=(0,ft.useCallback)(W=>{u(W),W.isPlacementMode||_(!1)},[]),P=(0,ft.useCallback)(W=>{_(!1),W?a.current?.finishPlacementMode():a.current?.cancelPlacementMode()},[]),U=(0,ft.useCallback)(W=>{W.preventDefault(),_(!0),a.current?.startPlacementMode()},[]);(0,ft.useEffect)(()=>{if(!m)return;let W=()=>P(!0),R=()=>P(!1);return window.addEventListener("pointerup",W),window.addEventListener("pointercancel",R),()=>{window.removeEventListener("pointerup",W),window.removeEventListener("pointercancel",R)}},[P,m]);let E=x.isModelPlaced?x.isPlacementMode?x.canPlace?"Release to place":"Move your device over a flat surface":null:x.canPlace?null:"Move your device over a flat surface",V=x.isModelPlaced&&!x.isPlacementMode?"Pinch to resize \xB7 Twist to rotate":null,T=r?.getState().domOverlayRoot??null,G=w&&T?(0,xp.createPortal)((0,Yn.jsxs)(Yn.Fragment,{children:[V&&(0,Yn.jsx)("div",{className:"ri-arHintOverlay",children:(0,Yn.jsx)("div",{className:"ri-arHint",children:V})}),(0,Yn.jsx)("div",{className:"ri-arOverlay",children:(0,Yn.jsxs)("div",{className:"ri-arControls",children:[E&&(0,Yn.jsx)("div",{className:"ri-arStatus",children:E}),x.isModelPlaced&&(0,Yn.jsxs)("button",{type:"button",className:`ri-arActionButton ${m?"ri-arActionButton--active":""}`,onPointerDown:W=>U(W.nativeEvent),"aria-pressed":m,children:[(0,Yn.jsx)(wp.MapPin,{size:14}),"Relocate"]}),!x.isModelPlaced&&x.canPlace&&(0,Yn.jsx)("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>a.current?.placeCurrent(),children:"Tap to place"})]})})]}),T):null;return{xrStore:r,presenterRef:a,arSupported:i,vrSupported:l,quickLookSupported:M,resolvedMobileHandoffUrl:p,isMobileHandoffOpen:f,arOverlay:G,openMobileHandoff:A,closeMobileHandoff:g,openQuickLook:S,handleARStateChange:v}}var Rs=require("@react-three/fiber"),Ns=require("@react-three/drei"),tm=require("@react-three/xr"),nm=require("three"),wr=require("react");function Ms(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var _p=["none","directional","point","spot","hemisphere"],Mp=["pbr","matcap","uv-checker"],Cp=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];var Pp=["sporadic","constantMild","constantWild"],Tp=["linear","radial","mirroredLinear"],go=["verySmall","small","medium","large","veryLarge","huge"],Mv={clips:[],autoplayClip:null},Cv={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}},ci={model:{rotation:[0,0,0],showAdvancedRotation:!1,renderer:"pbr",shading:"lit"},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:Cv,animations:Mv,annotations:[]};var nr=require("@react-three/fiber"),Ac=require("@react-three/xr"),Cs=require("three"),Kn=require("react");function Ap({renderMode:e}){let{scene:t}=(0,nr.useThree)(),n=(0,nr.useThree)(s=>s.setFrameloop),a=(0,Ac.useXR)(s=>s.session!=null),r=(0,Ac.useXR)(s=>s.mode==="immersive-ar"),i=(0,Kn.useRef)(void 0);return(0,Kn.useEffect)(()=>{n(a?"always":e)},[a,e,n]),(0,Kn.useEffect)(()=>{r?(i.current=t.background,t.background=null):i.current!==void 0&&(t.background=i.current,i.current=void 0)},[r,t]),(0,nr.useFrame)(()=>{r&&t.background!==null&&(t.background=null)}),null}function Ep({onPresentingChange:e}){let t=(0,nr.useThree)(r=>r.gl),n=(0,Kn.useRef)(null);(0,Kn.useEffect)(()=>{let r=t.xr;if(!r)return;let i=o=>{o?(n.current=t.shadowMap.enabled,t.shadowMap.enabled=!1):n.current!==null&&(t.shadowMap.enabled=n.current,n.current=null),e(o)},s=()=>i(!0),l=()=>i(!1);return r.addEventListener("sessionstart",s),r.addEventListener("sessionend",l),i(r.isPresenting),()=>{r.removeEventListener("sessionstart",s),r.removeEventListener("sessionend",l)}},[t,e]);let a=(0,Kn.useRef)(0);return(0,nr.useFrame)(()=>{if(!t.xr.isPresenting)return;let r=performance.now();if(r-a.current<1e3)return;a.current=r;let i=t.xr}),null}function kp({active:e}){let t=(0,nr.useThree)(n=>n.invalidate);return(0,Kn.useEffect)(()=>{e&&t()},[e,t]),(0,nr.useFrame)(()=>{e&&t()}),null}function Rp({color:e}){let{scene:t}=(0,nr.useThree)();return(0,Kn.useEffect)(()=>{let n=t.background;return t.background=e?new Cs.Color(e):null,()=>{t.background=n}},[t,e]),null}function Np({rotation:e}){let{scene:t}=(0,nr.useThree)();return(0,Kn.useLayoutEffect)(()=>{let n=e*Math.PI/180;t.environmentRotation.set(0,n,0),t.backgroundRotation.set(0,n,0)}),null}function Lp({cameraConfig:e}){let{camera:t}=(0,nr.useThree)();return(0,Kn.useEffect)(()=>{if(!(t instanceof Cs.PerspectiveCamera))return;let n=e?.fov;typeof n=="number"&&t.fov!==n&&(t.fov=n,t.updateProjectionMatrix())},[t,e]),null}var Oc=require("@react-three/fiber"),Ee=require("@react-three/postprocessing"),ui=require("postprocessing"),yr=require("three"),ar=require("react");var nn=require("three"),xa=new Map,di={color:"#93c5fd",intensity:.07},Nc=new nn.Color(di.color).multiplyScalar(di.intensity),ya=new Map,Rc=new Map;function Pv(e){return`${e.name}|${e.size}|${e.lastModified}`}function Bp(e){let t=Pv(e),n=e.name.lastIndexOf("."),a=n>0?e.name.slice(0,n):e.name,r=n>0?e.name.slice(n):"",i=`materials/${e.name}`,s=2;for(;;){let l=Rc.get(i);if(l===void 0||l===t)return Rc.set(i,t),i;i=`materials/${a}-${s}${r}`,s+=1}}function Dp(e){return ya.get(e)}function Op(e,t){let n=++e.loadGeneration;e.loaded=!1;let a=()=>{if(e.loadGeneration!==n)return;e.loaded=!0;let r=e.pending;e.pending=[];for(let i of r)i()};new nn.ImageLoader().load(t,r=>{e.loadGeneration===n&&(e.texture.image=r,e.texture.needsUpdate=!0,a())},void 0,()=>{e.loadGeneration===n&&(console.warn(`Failed to load texture: ${t}`),a())})}function Ip(e,t){for(let n of[nn.SRGBColorSpace,nn.NoColorSpace]){let a=xa.get(bo(e,n));a&&Op(a,t)}}function zp(e,t){let n=ya.get(e);n&&n!==t&&n.startsWith("blob:")&&URL.revokeObjectURL(n),ya.set(e,t),Ip(e,t)}function Lc(e){let t=ya.get(e);t&&(t.startsWith("blob:")&&URL.revokeObjectURL(t),ya.delete(e),Rc.delete(e),Ip(e,e))}function bo(e,t){return`${t}|${e}`}function rn(e,t=nn.NoColorSpace,n){let a=bo(e,t),r=xa.get(a);if(r)return n&&!r.loaded&&r.pending.push(n),r.texture;let i=ya.get(e)??e,s={texture:new nn.Texture,refCount:0,loaded:!1,pending:n?[n]:[],loadGeneration:0};return s.texture.flipY=!1,s.texture.colorSpace=t,xa.set(a,s),Op(s,i),s.texture}function Up(e,t=nn.NoColorSpace,n){let a=rn(e,t,n);return xa.get(bo(e,t)).refCount+=1,a}function Ps(e,t=nn.NoColorSpace){let n=xa.get(bo(e,t));n&&(n.refCount-=1,n.refCount<=0&&(n.loadGeneration+=1,n.pending=[],n.texture.dispose(),xa.delete(bo(e,t))))}var Ec=null;function Fp(){if(Ec)return Ec;let e=256,t=document.createElement("canvas");t.width=e,t.height=e;let n=t.getContext("2d"),a=n.createRadialGradient(e*.35,e*.35,e*.02,e*.5,e*.5,e*.55);a.addColorStop(0,"#ffffff"),a.addColorStop(.4,"#b5b5b5"),a.addColorStop(1,"#3a3a3a"),n.fillStyle=a,n.fillRect(0,0,e,e);let r=new nn.CanvasTexture(t);return r.colorSpace=nn.SRGBColorSpace,Ec=r,r}var kc=null;function Vp(){if(kc)return kc;let e=1024,t=8,n=e/t,a=["#ef4444","#f59e0b","#22c55e","#6366f1"],r=document.createElement("canvas");r.width=e,r.height=e;let i=r.getContext("2d");i.textAlign="center",i.textBaseline="middle";for(let l=0;l<t;l+=1)for(let o=0;o<t;o+=1){let c=o*n,d=l*n,p=(Math.floor(o/2)+Math.floor(l/2))%4;i.fillStyle=a[p],i.fillRect(c,d,n,n),i.strokeStyle="rgba(0, 0, 0, 0.28)",i.lineWidth=2;for(let u=1;u<4;u+=1){let m=u*n/4;i.beginPath(),i.moveTo(c+m,d),i.lineTo(c+m,d+n),i.moveTo(c,d+m),i.lineTo(c+n,d+m),i.stroke()}i.strokeStyle="#09090b",i.lineWidth=7,i.strokeRect(c,d,n,n);let h=c+n*.23,f=d+n*.72,b=c+n*.72,w=d+n*.23;i.lineCap="round",i.lineJoin="round",i.beginPath(),i.moveTo(h,f),i.lineTo(b,w),i.lineTo(b-n*.2,w),i.moveTo(b,w),i.lineTo(b,w+n*.2),i.stroke();let k=l*t+o+1;i.font=`700 ${Math.round(n*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,i.fillStyle="#ffffff",i.strokeStyle="rgba(0, 0, 0, 0.85)",i.lineWidth=6;let x=String(k).padStart(2,"0");i.strokeText(x,c+n/2,d+n*.82),i.fillText(x,c+n/2,d+n*.82)}let s=new nn.CanvasTexture(r);return s.colorSpace=nn.SRGBColorSpace,s.wrapS=nn.RepeatWrapping,s.wrapT=nn.RepeatWrapping,s.flipY=!1,s.anisotropy=8,s.needsUpdate=!0,kc=s,s}var wa=require("react"),Ts=require("postprocessing"),jp=require("three"),Gp=require("react/jsx-runtime"),Tv=`
3668
3668
  uniform float exposure;
3669
3669
  void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
3670
3670
  outputColor = vec4(inputColor.rgb * exposure, inputColor.a);
3671
3671
  }
3672
- `,Al=class extends Va.Effect{constructor(t=1){super("ExposureEffect",pg,{blendFunction:Va.BlendFunction.NORMAL,uniforms:new Map([["exposure",new fu.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},hu=(0,qi.forwardRef)(function({exposure:t},r){let o=(0,qi.useMemo)(()=>new Al(t),[]);return o.exposure=t,(0,qi.useImperativeHandle)(r,()=>o,[o]),(0,gu.jsx)("primitive",{object:o,dispose:null})});var gi=require("@react-three/fiber"),bu=wd(require("@react-three/postprocessing")),vu=require("postprocessing"),Yn=require("three"),$n=require("react"),yu=require("react/jsx-runtime"),mg=bu.LensFlareEffect;function xu({config:e}){let t=(0,gi.useThree)(p=>p.camera),r=(0,gi.useThree)(p=>p.raycaster),o=(0,gi.useThree)(p=>p.scene),n=(0,gi.useThree)(p=>p.viewport),i=(0,$n.useRef)(null),s=(0,$n.useRef)(new Yn.Vector3),l=(0,$n.useRef)(new Yn.Vector2),a=(0,$n.useMemo)(()=>new Yn.Vector3(...e.lensPosition),[e.lensPosition]),u=(0,$n.useMemo)(()=>new Yn.Color(e.colorGain??"#141414"),[e.colorGain]),f=(0,$n.useMemo)(()=>new Yn.Vector2(0,0),[]),d=(0,$n.useMemo)(()=>new mg({blendFunction:vu.BlendFunction.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:a,screenRes:f,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:u,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[u,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,a,f]);return(0,$n.useEffect)(()=>(i.current=d,()=>{d.dispose(),i.current=null}),[d]),(0,$n.useEffect)(()=>{let p=d.uniforms.get("screenRes");p&&(p.value.x=n.width,p.value.y=n.height)},[d,n]),(0,gi.useFrame)((p,v)=>{let x=i.current;if(!x)return;let _=x.uniforms.get("lensPosition"),T=x.uniforms.get("opacity");if(!_||!T)return;let y=1;if(s.current.copy(a).project(t),s.current.z>1)return;_.value.x=s.current.x,_.value.y=s.current.y,l.current.x=s.current.x,l.current.y=s.current.y,r.setFromCamera(l.current,t);let c=r.intersectObjects(o.children,!0),{object:m}=c[0]||{};m&&(m.userData?.lensflare==="no-occlusion"?y=0:m instanceof Yn.Mesh&&(m.material.uniforms?._transmission?.value>.2||m.material._transmission&&m.material._transmission>.2?y=.2:m.material.transparent&&(y=m.material.opacity))),T.value=Yn.MathUtils.damp(T.value,y,12,v)}),(0,yu.jsx)("primitive",{object:d,dispose:null})}var ja=require("@react-three/postprocessing"),kn=require("postprocessing"),wu=require("three");function _u(e){return e==="linear"?kn.ToneMappingMode.LINEAR:e==="reinhard"?kn.ToneMappingMode.REINHARD:kn.ToneMappingMode.ACES_FILMIC}function Fa(e){switch(e){case"verySmall":return kn.KernelSize.VERY_SMALL;case"small":return kn.KernelSize.SMALL;case"medium":return kn.KernelSize.MEDIUM;case"large":return kn.KernelSize.LARGE;case"veryLarge":return kn.KernelSize.VERY_LARGE;case"huge":return kn.KernelSize.HUGE}}function Su(e){switch(e){case"constantMild":return kn.GlitchMode.CONSTANT_MILD;case"constantWild":return kn.GlitchMode.CONSTANT_WILD;default:return kn.GlitchMode.SPORADIC}}function Tl(e){let t=new wu.Color(e);return[t.r,t.g,t.b,1]}function Mu(e){return e==="radial"?ja.RampType.Radial:e==="mirroredLinear"?ja.RampType.MirroredLinear:ja.RampType.Linear}var Ye=require("react/jsx-runtime"),bi={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new dr.Color(Xr.color).getHex(),hiddenEdgeColor:new dr.Color(Xr.color).multiplyScalar(.35).getHex(),kernelSize:$r.KernelSize.VERY_SMALL,blur:!1,xRay:!1};function fg(e){let t=[];return e.traverse(r=>{r.isMesh&&t.push(r)}),t}function Cu({sceneConfig:e,selectedObjectRef:t,hoveredObjectRef:r,highlightOnHover:o=!1,disabled:n=!1}){let i=(0,El.useThree)(C=>C.scene),s=(0,El.useThree)(C=>C.gl),l=(0,Kn.useRef)(null),a=e?.postProcessing,u=t??null,f=a?.outline.enabled===!0,d=f?fg(i):r?[r]:[],p=f||o,[v,x]=(0,Kn.useState)(()=>s.xr?.isPresenting??!1);(0,Kn.useEffect)(()=>{let C=s.xr;if(!C)return;let N=()=>x(!0),E=()=>x(!1);return C.addEventListener("sessionstart",N),C.addEventListener("sessionend",E),x(C.isPresenting),()=>{C.removeEventListener("sessionstart",N),C.removeEventListener("sessionend",E)}},[s]);let _=i.children.filter(C=>C.isLight),T=(0,Kn.useMemo)(()=>new dr.Vector2(a?.chromaticAberration.offsetX??.002,a?.chromaticAberration.offsetY??.002),[a?.chromaticAberration.offsetX,a?.chromaticAberration.offsetY]),y=(0,Kn.useMemo)(()=>new dr.Color(a?.outline.visibleEdgeColor??"#ffffff").getHex(),[a?.outline.visibleEdgeColor]),c=(0,Kn.useMemo)(()=>new dr.Color(a?.outline.hiddenEdgeColor??"#22090a").getHex(),[a?.outline.hiddenEdgeColor]),m=(0,Kn.useMemo)(()=>Tl(a?.ramp.startColor??"#000000"),[a?.ramp.startColor]),S=(0,Kn.useMemo)(()=>Tl(a?.ramp.endColor??"#ffffff"),[a?.ramp.endColor]);return!a||v||n?null:(0,Ye.jsxs)(Ye.Fragment,{children:[a.godRays.enabled===!0&&(0,Ye.jsxs)("mesh",{ref:l,position:a.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,Ye.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,Ye.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,Ye.jsxs)(Pe.EffectComposer,{multisampling:0,enableNormalPass:a.ssao.enabled===!0,autoClear:!1,children:[a.smaa.enabled===!0&&(0,Ye.jsx)(Pe.SMAA,{}),a.ssao.enabled===!0&&(0,Ye.jsx)(Pe.SSAO,{samples:a.ssao.samples,rings:a.ssao.rings,intensity:a.ssao.intensity,radius:a.ssao.radius,bias:a.ssao.bias,luminanceInfluence:a.ssao.luminanceInfluence,fade:a.ssao.fade,minRadiusScale:a.ssao.minRadiusScale,worldDistanceThreshold:a.ssao.worldDistanceThreshold,worldDistanceFalloff:a.ssao.worldDistanceFalloff,worldProximityThreshold:a.ssao.worldProximityThreshold,worldProximityFalloff:a.ssao.worldProximityFalloff}),a.autofocus.enabled===!0&&(0,Ye.jsx)(Pe.Autofocus,{focusDistance:a.autofocus.focusDistance,focusRange:a.autofocus.focusRange,focalLength:a.autofocus.focalLength,bokehScale:a.autofocus.bokehScale,target:a.autofocus.target,mouse:a.autofocus.mouse,debug:a.autofocus.debug||void 0,manual:a.autofocus.manual,smoothTime:a.autofocus.smoothTime}),a.autofocus.enabled!==!0&&a.depthOfField.enabled===!0&&(0,Ye.jsx)(Pe.DepthOfField,{focusDistance:a.depthOfField.focusDistance,focusRange:a.depthOfField.focusRange,focalLength:a.depthOfField.focalLength,bokehScale:a.depthOfField.bokehScale}),a.bloom.enabled===!0&&(0,Ye.jsx)(Pe.Bloom,{intensity:a.bloom.intensity,luminanceThreshold:a.bloom.luminanceThreshold,luminanceSmoothing:a.bloom.luminanceSmoothing,mipmapBlur:a.bloom.mipmapBlur,radius:a.bloom.radius,levels:a.bloom.levels}),a.selectiveBloom.enabled===!0&&(0,Ye.jsx)(Pe.SelectiveBloom,{selection:u??void 0,lights:_,selectionLayer:a.selectiveBloom.selectionLayer,intensity:a.selectiveBloom.intensity,luminanceThreshold:a.selectiveBloom.luminanceThreshold,luminanceSmoothing:a.selectiveBloom.luminanceSmoothing,kernelSize:Fa(a.selectiveBloom.kernelSize),mipmapBlur:a.selectiveBloom.mipmapBlur,inverted:a.selectiveBloom.inverted,ignoreBackground:a.selectiveBloom.ignoreBackground}),p&&(0,Ye.jsx)(Pe.Outline,{selection:d,selectionLayer:a.outline.selectionLayer,blendFunction:$r.BlendFunction.SCREEN,edgeStrength:f?a.outline.edgeStrength:bi.edgeStrength,pulseSpeed:f?a.outline.pulseSpeed:bi.pulseSpeed,visibleEdgeColor:f?y:bi.visibleEdgeColor,hiddenEdgeColor:f?c:bi.hiddenEdgeColor,kernelSize:f?Fa(a.outline.kernelSize):bi.kernelSize,blur:f?a.outline.blur:bi.blur,xRay:f?a.outline.xRay:bi.xRay}),a.chromaticAberration.enabled===!0&&(0,Ye.jsx)(Pe.ChromaticAberration,{offset:T,radialModulation:a.chromaticAberration.radialModulation,modulationOffset:a.chromaticAberration.modulationOffset}),a.colorAverage.enabled===!0&&(0,Ye.jsx)(Pe.ColorAverage,{}),a.dotScreen.enabled===!0&&(0,Ye.jsx)(Pe.DotScreen,{angle:a.dotScreen.angle,scale:a.dotScreen.scale}),a.glitch.enabled===!0&&(0,Ye.jsx)(Pe.Glitch,{mode:Su(a.glitch.mode),delay:new dr.Vector2(a.glitch.delay[0],a.glitch.delay[1]),duration:new dr.Vector2(a.glitch.duration[0],a.glitch.duration[1]),strength:new dr.Vector2(a.glitch.strength[0],a.glitch.strength[1]),chromaticAberrationOffset:new dr.Vector2(a.glitch.chromaticAberrationOffset[0],a.glitch.chromaticAberrationOffset[1]),columns:a.glitch.columns,ratio:a.glitch.ratio,active:!0}),a.grid.enabled===!0&&(0,Ye.jsx)(Pe.Grid,{scale:a.grid.scale,lineWidth:a.grid.lineWidth}),a.lensflare.enabled===!0&&(0,Ye.jsx)(xu,{config:a.lensflare}),a.godRays.enabled===!0&&(0,Ye.jsx)(Pe.GodRays,{sun:l,samples:a.godRays.samples,density:a.godRays.density,decay:a.godRays.decay,weight:a.godRays.weight,exposure:a.godRays.exposure,clampMax:a.godRays.clampMax,blur:a.godRays.blur,kernelSize:Fa(a.godRays.kernelSize)}),a.noise.enabled===!0&&(0,Ye.jsx)(Pe.Noise,{premultiply:a.noise.premultiply,opacity:a.noise.opacity,blendFunction:$r.BlendFunction.ADD}),a.brightnessContrast.enabled===!0&&(0,Ye.jsx)(Pe.BrightnessContrast,{brightness:a.brightnessContrast.brightness,contrast:a.brightnessContrast.contrast}),a.hueSaturation.enabled===!0&&(0,Ye.jsx)(Pe.HueSaturation,{hue:a.hueSaturation.hue,saturation:a.hueSaturation.saturation}),a.toneMapping.enabled===!0&&(0,Ye.jsx)(hu,{exposure:a.toneMapping.exposure}),a.vignette.enabled===!0&&(0,Ye.jsx)(Pe.Vignette,{eskil:a.vignette.eskil,offset:a.vignette.offset,darkness:a.vignette.darkness,blendFunction:$r.BlendFunction.NORMAL}),a.toneMapping.enabled===!0&&(0,Ye.jsx)(Pe.ToneMapping,{mode:_u(a.toneMapping.mode),resolution:a.toneMapping.resolution,whitePoint:a.toneMapping.whitePoint,middleGrey:a.toneMapping.middleGrey,minLuminance:a.toneMapping.minLuminance,averageLuminance:a.toneMapping.averageLuminance,adaptationRate:a.toneMapping.adaptationRate}),a.sepia.enabled===!0&&(0,Ye.jsx)(Pe.Sepia,{intensity:a.sepia.intensity,blendFunction:$r.BlendFunction.NORMAL}),a.scanline.enabled===!0&&(0,Ye.jsx)(Pe.Scanline,{density:a.scanline.density,blendFunction:$r.BlendFunction.OVERLAY}),a.pixelation.enabled===!0&&(0,Ye.jsx)(Pe.Pixelation,{granularity:a.pixelation.granularity}),a.ramp.enabled===!0&&(0,Ye.jsx)(Pe.Ramp,{rampType:Mu(a.ramp.rampType),rampStart:a.ramp.rampStart,rampEnd:a.ramp.rampEnd,startColor:m,endColor:S,opacity:a.ramp.rampMask?1:a.ramp.opacity??.5,rampBias:a.ramp.rampBias,rampGain:a.ramp.rampGain,rampMask:a.ramp.rampMask,rampInvert:a.ramp.rampInvert})]})]})}var Pu=require("react"),Ha=class extends Pu.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(r,o){this.props.onError?.(r)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};var pn=require("react/jsx-runtime"),hg=1.5;function gg({captureRef:e}){let{gl:t,scene:r,camera:o,invalidate:n}=(0,Ga.useThree)();return(0,ur.useEffect)(()=>{if(e)return e.current={gl:t,scene:r,camera:o,invalidate:n},()=>{e.current=null}},[e,t,r,o,n]),null}function kl({children:e,camera:t,backgroundColor:r,shadows:o=!0,sceneConfig:n,selectedObjectRef:i,hoveredObjectRef:s,highlightOnHover:l,renderMode:a="demand",maxDpr:u=2,xrStore:f,rendererCaptureRef:d,preserveDrawingBuffer:p=!1,reduceGpuLoad:v}){let x=v??yl(),_=x?Math.min(u,hg):u,T=o&&!x,y=(0,ur.useMemo)(()=>r?{background:r}:n?.background.enabled?n.background.type==="color"?{background:n.background.color}:n.background.type==="image"&&n.background.imageUrl.trim()?{backgroundImage:`url("${n.background.imageUrl}")`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}:{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}:{background:"transparent"},[r,n]),c=(0,ur.useMemo)(()=>{if(r)return r;let g=n?.background;if(g?.enabled){if(g.type==="color")return g.color;if(g.type==="image"&&g.imageUrl.trim()||g.type==="environment")return null}return"#1c1c1d"},[r,n]),m=(0,ur.useMemo)(()=>{let g=n?.postProcessing;return g?!!(g.glitch.enabled||g.noise.enabled||g.lensflare.enabled&&g.lensflare.animated):!1},[n?.postProcessing]),[S,C]=(0,ur.useState)(!1),N=n?.environment,E=n?.groundShadows,h=(0,ur.useMemo)(()=>{if(!N)return null;if(N.source==="custom"){let g=N.customEnvironmentUrl.trim();return Ia(g)?{files:g}:null}return{preset:N.preset}},[N]),w=(0,pn.jsxs)(pn.Fragment,{children:[(0,pn.jsx)(gg,{captureRef:d}),(0,pn.jsx)(ou,{cameraConfig:t}),(0,pn.jsx)(nu,{active:m}),(0,pn.jsx)(ru,{color:c}),h?(0,pn.jsx)(Ha,{onError:g=>console.warn("Failed to load environment map:",g),children:(0,pn.jsx)(ur.Suspense,{fallback:null,children:(0,pn.jsx)(Wa.Environment,{...h,environmentIntensity:N?.intensity??.25,backgroundIntensity:N?.intensity??.25,background:n?.background.enabled===!0&&n.background.type==="environment"})})}):null,(0,pn.jsx)(iu,{rotation:N?.rotation??0}),f&&(0,pn.jsx)(tu,{onPresentingChange:C}),E?.enabled&&E.mode==="shadowCatcher"&&!S&&(0,pn.jsx)(Wa.ContactShadows,{position:[0,E.height,0],scale:E.size,opacity:E.intensity,blur:E.borderFade,far:15,resolution:1024,color:"#000000"}),e,(0,pn.jsx)(Cu,{sceneConfig:n,selectedObjectRef:i,hoveredObjectRef:s,highlightOnHover:l,disabled:x})]});return(0,pn.jsx)(Ga.Canvas,{frameloop:a,dpr:[1,_],shadows:T?"soft":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:y,camera:t??{fov:50},gl:{preserveDrawingBuffer:p,toneMapping:Tu.NoToneMapping,toneMappingExposure:1},children:f?(0,pn.jsxs)(Au.XR,{store:f,children:[(0,pn.jsx)(eu,{renderMode:a}),w]}):w})}var Eu=require("@react-three/drei"),ku=require("react"),Ru=require("react/jsx-runtime");function Rl({controlsRef:e,onCameraChange:t}){return(0,ku.useEffect)(()=>{if(!t||!e||typeof e!="object"||!("current"in e))return;let r=e.current;if(!r)return;let o=()=>{t(r.camera,r)};return r.addEventListener("update",o),()=>{r.removeEventListener("update",o)}},[e,t]),(0,Ru.jsx)(Eu.CameraControls,{ref:e,makeDefault:!0,smoothTime:.3})}var mr=require("react"),Vo=require("@react-three/fiber"),Bu=require("three");function yn(e,t){if(e[t])return t;let r=Object.entries(e).find(([,n])=>n.id===t)?.[0];return r||(Object.entries(e).find(([,n])=>n.modelObjectId===t)?.[0]??null)}var Nl=Symbol("react-immersive.model-node-id");function bg(e,t){Object.defineProperty(e,Nl,{value:t,configurable:!0})}function Ji(e){let t=new Map;e.traverse(a=>{if(!a.name)return;let u=t.get(a.name);u?u.push(a):t.set(a.name,[a])});let r=Object.create(null),o=new WeakMap,n=new Map,i=new Set(Array.from(t,([a,u])=>u.length===1?a:null).filter(a=>a!==null)),s=new Set,l=(a,u)=>{bg(a,u),r[u]=a,o.set(a,u),s.add(u)};for(let[a,u]of t)u.length===1&&l(u[0],a);for(let[a,u]of t){if(u.length<2)continue;let f=[];u.forEach((d,p)=>{let v=`${a} [${p+1}]`,x=v,_=2;for(;i.has(x)||s.has(x);)x=`${v}.${_++}`;l(d,x),f.push(x)}),n.set(a,f)}return{nodesById:r,idByNode:o,duplicateNames:n}}function Uo(e){return e[Nl]??e.name??null}function pr(e,t){let r=null,o=[];return e.traverse(n=>{n[Nl]===t&&(r=n),n.name===t&&o.push(n)}),r??(o.length===1?o[0]:null)}var qn=require("react/jsx-runtime");function Lu(e,t){if(!t)return e;let r=t*Math.PI/180,o=Math.cos(r),n=Math.sin(r);return[e[0]*o+e[2]*n,e[1],-e[0]*n+e[2]*o]}function vg(e,t){let[r,o,n]=e.center,i=e.radius,s=Math.hypot(t[0],t[1],t[2]),l=s>1e-6?[t[0]/s,t[1]/s,t[2]/s]:[0,1,0],a=i*2;return{position:[r+l[0]*a,o+l[1]*a,n+l[2]*a],target:e.center,extent:i,near:Math.max(i/100,.001),far:a+i*2}}function xg(e,t){let r=t[0]-e.center[0],o=t[1]-e.center[1],n=t[2]-e.center[2],i=Math.hypot(r,o,n);return{near:Math.max(i-e.radius,i*.01,.001),far:i+e.radius*2}}function yg(e,t,r){return t&&r&&!e.attachedToCamera?r.center:[0,0,0]}var wg={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}]},_g={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function Nu({light:e,shadows:t,shadowsEnabled:r,environmentRotation:o,modelBounds:n,objectBindings:i,nodeRefs:s}){let l=(0,mr.useRef)(null),a=(0,mr.useRef)(null),u=(0,mr.useRef)(null),f=(0,Vo.useThree)(y=>y.camera),d=(0,Vo.useThree)(y=>y.scene),p=(0,mr.useMemo)(()=>new Bu.Vector3,[]),v=(0,mr.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:Lu(e.position,o),[e.position,e.attachedToCamera,e.attachment,o]);(0,Vo.useFrame)(()=>{let y=l.current??a.current??u.current;if(!y)return;if(e.attachedToCamera){y.position.copy(f.position);return}let c=e.attachment;if(!c)return;let m=i?yn(i,c.objectId):null,C=(m?i?.[m]:void 0)?.modelObjectId??c.objectId,N=(m?s?.current[m]:void 0)??pr(d,C);N&&(p.fromArray(c.offset),N.localToWorld(p),y.position.copy(p))});let x=r&&t.enabled&&e.castShadow,_=(0,mr.useMemo)(()=>e.type==="directional"&&x&&n&&!e.attachedToCamera?vg(n,v):null,[e.type,e.attachedToCamera,x,n,v]),T=(0,mr.useMemo)(()=>e.type==="spot"&&x&&n&&!e.attachedToCamera?xg(n,v):null,[e.type,e.attachedToCamera,x,n,v]);return(0,mr.useEffect)(()=>{let y=l.current??u.current;if(!y)return;let[c,m,S]=yg(e,x,n);y.target.position.set(c,m,S),y.target.updateMatrixWorld()},[e,x,n]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,qn.jsx)("directionalLight",{ref:l,color:e.color,intensity:e.intensity,position:_?.position??v,castShadow:x,"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":_?.near??.5,"shadow-camera-far":_?.far??40,"shadow-camera-left":-(_?.extent??8),"shadow-camera-right":_?.extent??8,"shadow-camera-top":_?.extent??8,"shadow-camera-bottom":-(_?.extent??8)}):e.type==="point"?(0,qn.jsx)("pointLight",{ref:a,color:e.color,intensity:e.intensity,position:v,distance:e.distance,decay:e.decay,castShadow:x,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?(0,qn.jsx)("spotLight",{ref:u,color:e.color,intensity:e.intensity,position:v,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:x,"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":T?.near??.5,"shadow-camera-far":T?.far??40}):e.type==="hemisphere"?(0,qn.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function Bl({lightingConfig:e,shadowConfig:t,shadowsEnabled:r=!0,environmentRotation:o=0,environmentConfig:n,modelBounds:i,objectBindings:s,nodeRefs:l}){let a=e??wg,u=t??_g,f=n?.shadowLight,d=Lu([5,10,5],o);return(0,qn.jsxs)(qn.Fragment,{children:[(0,qn.jsx)("ambientLight",{intensity:a.ambient.intensity,color:a.ambient.color}),a.lights.map(p=>(0,qn.jsx)(Nu,{light:p,shadows:u,shadowsEnabled:r,environmentRotation:o,modelBounds:i,objectBindings:s,nodeRefs:l},p.id)),f?.enabled&&(0,qn.jsx)(Nu,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:f.intensity,position:d,attachedToCamera:!1,castShadow:!0,shadowBias:f.bias,visible:!0},shadows:u,shadowsEnabled:r,environmentRotation:0,modelBounds:i,objectBindings:s,nodeRefs:l})]})}var me=require("react"),oo=require("@react-three/fiber");var Ho=require("@react-three/fiber"),eo=require("three"),Yr=require("three-stdlib"),Qu=require("three/examples/jsm/loaders/USDLoader.js");var Zi=require("fflate");var Ou;function Du(e){Ou=e}function jo(e){Ou?.(e)}var Sg=[".glb",".gltf",".obj",".fbx",".usdz",".zip"],Mg=["model/gltf-binary","model/gltf+json","model/vnd.usdz+zip","application/vnd.usdz+zip","application/zip","application/x-zip-compressed"],Fo=1024*1024,Iu=128*Fo,zu=1024,Uu=128*Fo,Vu=256*Fo,ju=200,Cg=Fo,Lr=new Map,Xa=".glb,.gltf,.obj,.fbx,.usdz,.zip,model/gltf-binary,model/gltf+json,model/vnd.usdz+zip,application/vnd.usdz+zip,application/zip";function Ol(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 Wu(e){return Lr.get(e)??{format:Ol(e)}}function Pg(e){let t=e.name.toLowerCase();return Sg.some(r=>t.endsWith(r))||Mg.includes(e.type)}async function $a(e){if(!Pg(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 Fu(e,"usdz");if(t.endsWith(".zip")||Ag(e.type))return Tg(e);if(t.endsWith(".gltf")||e.type==="model/gltf+json")return Hu(e);let r=Ol(e.name);return r==="gltf"?Hu(e):Fu(e,r)}function Fu(e,t){let r=URL.createObjectURL(e);return Lr.set(r,{format:t,entryPath:e.name}),{url:r,name:e.name,format:t,cleanup:()=>{jo(r),Lr.delete(r),URL.revokeObjectURL(r)}}}function Ag(e){return e==="application/zip"||e==="application/x-zip-compressed"}async function Hu(e){let t=await e.text(),r=Xu(t,e.name);for(let n of $u(r))if(!Dl(n))throw new Error(`${e.name} references external assets. Upload a .zip containing the .gltf file and its dependencies.`);let o=URL.createObjectURL(e);return Lr.set(o,{format:"gltf",entryPath:e.name}),{url:o,name:e.name,format:"gltf",cleanup:()=>{jo(o),Lr.delete(o),URL.revokeObjectURL(o)}}}async function Tg(e){if(e.size>Iu)throw new Error(`Model zip is too large. The compressed archive must be ${Ll(Iu)} or smaller.`);let t=await Eg(new Uint8Array(await e.arrayBuffer())),r=new Map;for(let[s,l]of Object.entries(t)){let a=Il(s);!a||Yu(a)||r.set(a,l)}let o=[...r.keys()].filter(s=>/\.(gltf|obj|fbx)$/i.test(s));if(o.length===0)throw new Error("Invalid model zip: no .gltf, .obj, or .fbx file found.");if(o.length>1)throw new Error("Invalid model zip: multiple model entry files found.");let n=o[0],i=Ol(n);if(i==="gltf")return Rg(e,n,r);if(i==="obj"||i==="fbx")return kg(e,n,i,r);throw new Error(`Unsupported model entry ${n}.`)}function Eg(e){return new Promise((t,r)=>{let o=0,n=0,i=null,s=a=>(i??(i=new Error(`Invalid model zip: ${a}`)),!1);(0,Zi.unzip)(e,{filter:a=>{if(i)return!1;if(o+=1,o>zu)return s(`archive contains more than ${zu.toLocaleString()} entries.`);if(a.originalSize>Uu)return s(`${a.name} expands beyond the ${Ll(Uu)} per-file limit.`);if(n+=a.originalSize,n>Vu)return s(`expanded contents exceed ${Ll(Vu)}.`);if(a.originalSize>=Cg&&(a.size===0||a.originalSize/a.size>ju))return s(`${a.name} exceeds the ${ju}:1 compression-ratio limit.`);let u=Il(a.name);return!!u&&!Yu(u)}},(a,u)=>{i?r(i):a?r(new Error(`Invalid model zip: ${a.message}`)):t(u)})})}function Ll(e){return`${e/Fo} MiB`}function kg(e,t,r,o){let n=[],i={};for(let[l,a]of o){let u=URL.createObjectURL(new Blob([a],{type:Ku(l)}));n.push(u),i[l]=u}let s=i[t];if(!s)throw n.forEach(l=>URL.revokeObjectURL(l)),new Error(`Invalid model zip: could not read ${t}.`);return Lr.set(s,{format:r,entryPath:t,resourceUrls:i}),{url:s,name:e.name,format:r,cleanup:()=>{jo(s),Lr.delete(s),n.forEach(l=>URL.revokeObjectURL(l))}}}function Rg(e,t,r){let o=r.get(t);if(!o)throw new Error("Invalid GLTF zip: no .gltf found.");let n=Xu((0,Zi.strFromU8)(o),t);Ng(n,t);let i=Bg(t),s=[];try{Gu(n.buffers,i,r,s),Gu(n.images,i,r,s);let l=new Blob([(0,Zi.strToU8)(JSON.stringify(n))],{type:"model/gltf+json"}),a=URL.createObjectURL(l);return s.push(a),Lr.set(a,{format:"gltf",entryPath:t}),{url:a,name:e.name,format:"gltf",cleanup:()=>{jo(a),Lr.delete(a),s.forEach(u=>URL.revokeObjectURL(u))}}}catch(l){throw s.forEach(a=>URL.revokeObjectURL(a)),l}}function Gu(e,t,r,o){for(let n of e??[]){if(typeof n.uri!="string"||Dl(n.uri))continue;let i=Lg(t,n.uri),s=r.get(i);if(!s)throw new Error(`Invalid GLTF zip: missing referenced asset ${n.uri}.`);let l=URL.createObjectURL(new Blob([s],{type:Ku(i)}));o.push(l),n.uri=l}}function Xu(e,t){try{return JSON.parse(e)}catch{throw new Error(`${t} is not a valid .gltf JSON file.`)}}function $u(e){return[...e.buffers??[],...e.images??[]].map(t=>t.uri).filter(t=>typeof t=="string"&&t.length>0)}function Ng(e,t){for(let r of $u(e)){if(Dl(r))continue;let o=/^[a-z][a-z0-9+.-]*:/i.test(r),n=r.startsWith("/")||r.startsWith("\\");if(o||n)throw new Error(`${t} references external assets. Include every dependency inside the uploaded .zip.`)}}function Dl(e){return e.startsWith("data:")}function Il(e){let t=[];for(let r of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(o=>o&&o!==".")){if(r===".."){t.pop();continue}t.push(r)}return t.join("/")}function Yu(e){let t=e.split("/");return e.endsWith("/")||t.includes("__MACOSX")||t.some(r=>r===".DS_Store"||r.startsWith("._"))}function Bg(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t)}function Lg(e,t){let r=t.split(/[?#]/)[0],o=Og(r);return Il(e?`${e}/${o}`:o)}function Og(e){try{return decodeURI(e)}catch{return e}}function Ku(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 Dg=require("@react-three/drei"),Ig=require("@react-three/fiber"),zg=require("react"),qu=require("three"),Qi=require("three-stdlib");function Ug(e){return{name:"RI_unlit_emissive_texture",async afterRoot(t){let r=e.json.materials??[],o=new Map;if(r.forEach(i=>{let s=!!i?.extensions?.KHR_materials_unlit,l=!!i?.pbrMetallicRoughness?.baseColorTexture;s&&!l&&i?.emissiveTexture&&i.name&&o.set(i.name,i.emissiveTexture.index)}),o.size===0||!t.scene)return;let n=new Map;await Promise.all([...o].map(async([i,s])=>{let l=await e.getDependency("texture",s);l&&(l.colorSpace=qu.SRGBColorSpace,n.set(i,l))})),t.scene.traverse(i=>{let s=Array.isArray(i.material)?i.material:i.material?[i.material]:[];for(let l of s){let a=l.name?n.get(l.name):void 0;a&&!l.map&&(l.map=a,l.needsUpdate=!0)}})}}}var Vg="https://assets.react-immersive.liveroom.dev/three-r184/draco/",jg="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function Ju(e,t={},r){let{dracoDecoderPath:o=Vg,ktx2TranscoderPath:n=jg,meshopt:i=!0}=t;if(o){let s=new Qi.DRACOLoader;s.setDecoderPath(o),e.setDRACOLoader(s)}if(i&&e.setMeshoptDecoder(Qi.MeshoptDecoder),n&&r){let s=new Qi.KTX2Loader().setTranscoderPath(n).detectSupport(r);e.setKTX2Loader(s)}e.register((s=>Ug(s)))}var Ya=class extends eo.Loader{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(r){return this.options=r,this}load(r,o,n,i){this.loadAsset(r,n).then(o).catch(i)}async loadAsset(r,o){let n=Hg(this.options.source),{format:i}=this.options.source;if(i==="obj")return Fg(r,n,this.options.source,o);if(i==="fbx"){let a=zl(this,new Yr.FBXLoader(n)),u=Xg(r,this.options.source);u&&a.setResourcePath(u);let f=await a.loadAsync(r,o);return Ul(f,"FBXMesh",!1),{scene:f,animations:f.animations??[]}}if(i==="usdz"){let u=await zl(this,new Qu.USDLoader(n)).loadAsync(r,o);return Ul(u,"USDZMesh",!1),{scene:u,animations:u.animations??[]}}let s=zl(this,new Yr.GLTFLoader(n));Ju(s,this.options.decoderConfig,this.options.renderer);let l=await s.loadAsync(r,o);return{scene:l.scene,animations:l.animations??[]}}};Du(e=>{Ho.useLoader.clear(Ya,e)});function Ja(e,t={},r){let o=(0,Ho.useThree)(s=>s.gl),n=Wu(e),i=r?{...n,format:r}:n;return(0,Ho.useLoader)(Ya,e,s=>{s.configure({source:i,decoderConfig:t,renderer:o})})}async function Fg(e,t,r,o){let n=await Zu(e,t,o),i=new Yr.OBJLoader(t),s=Gg(n);if(s){let a=Wg(s,e,r);if(a)try{let u=await Zu(a.url,t),d=new Yr.MTLLoader(t).parse(u,a.basePath);d.preload(),i.setMaterials(d)}catch(u){console.warn(`[react-immersive] Could not load OBJ material ${s}; rendering geometry with fallback materials.`,u)}}let l=i.parse(n);return Ul(l,"OBJMesh",!0),{scene:l,animations:[]}}function Ul(e,t,r){let o=new Set,n=0;e.traverse(i=>{if(!("isMesh"in i&&i.isMesh===!0)){i.name&&o.add(i.name);return}let l=i.name||`${t}_${++n}`;if(!r&&i.name){o.add(i.name);return}let a=l,u=2;for(;o.has(a);)a=`${l}_${u++}`;i.name=a,o.add(a)})}function Zu(e,t,r){let o=new eo.FileLoader(t);return o.setResponseType("text"),o.loadAsync(e,r)}function zl(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function Hg(e){let t=new eo.LoadingManager,r=e.resourceUrls;return r&&t.setURLModifier(o=>{if(/^(?:blob:|data:)/i.test(o))return o;let n=qa(tp(o).split(/[?#]/)[0]),i=r[n];if(i)return i;let s=Ka(e.entryPath??""),l=qa(s?`${s}/${n}`:n);return r[l]??o}),t}function Gg(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function Wg(e,t,r){if(r.resourceUrls&&r.entryPath){let o=qa(`${Ka(r.entryPath)}/${tp(e)}`),n=r.resourceUrls[o];if(!n)return null;let i=Ka(o);return{url:n,basePath:i?`${i}/`:""}}try{let o=new URL(e,t).href;return{url:o,basePath:ep(o)}}catch{return null}}function Xg(e,t){if(t.resourceUrls&&t.entryPath){let r=Ka(t.entryPath);return r?`${r}/`:""}return ep(e)}function ep(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function Ka(e){let t=qa(e),r=t.lastIndexOf("/");return r===-1?"":t.slice(0,r)}function qa(e){let t=[];for(let r of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(o=>o&&o!=="."))r===".."?t.pop():t.push(r);return t.join("/")}function tp(e){try{return decodeURI(e)}catch{return e}}var Ne=require("three"),hp=require("three-stdlib");function np(e){let t=new Map;return e.map((r,o)=>{let i=r.name.trim()||`Animation ${o+1}`,s=t.get(i)??0;return t.set(i,s+1),{clip:r,sourceName:s===0?i:`${i} (${s+1})`,duration:r.duration}})}var Sn=require("three");function rp(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function ip(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function Kr(e){return!!(e&&"isMesh"in e&&e.isMesh)}var op=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],$g=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function Za(e){return $g.has(e)?Sn.SRGBColorSpace:Sn.NoColorSpace}function Wt(e,t){return e?.[t]?.path}function ap(e){return e==="back"?Sn.BackSide:e==="double"?Sn.DoubleSide:Sn.FrontSide}function sp(e){return e==="additive"?Sn.AdditiveBlending:Sn.NormalBlending}function Or(e,t=1,r=t){if(e&&typeof e=="object"){let o=e;if(typeof o.x=="number"&&Number.isFinite(o.x)&&typeof o.y=="number"&&Number.isFinite(o.y))return new Sn.Vector2(o.x,o.y)}return new Sn.Vector2(t,r)}function Vl(e){return Number.isFinite(e)&&e>0?e:1}function Qa(e,t){return e?.animations.clips.find(r=>r.sourceName===t)}function lp(e){return e?.loopMode??"repeat"}var Jn=require("three");function es(e){if(rp(e))return e;if(!e||typeof e!="object")return null;let t=e,r=new Jn.MeshStandardMaterial;typeof t.name=="string"&&(r.name=t.name),r.metalness=0,r.roughness=1,t.type==="MeshBasicMaterial"||t.isMeshBasicMaterial===!0?(r.color.set(0),r.emissiveIntensity=1,t.map instanceof Jn.Texture?(r.emissiveMap=t.map,r.emissive.set(16777215)):t.color instanceof Jn.Color&&r.emissive.copy(t.color)):(t.color instanceof Jn.Color&&r.color.copy(t.color),t.map instanceof Jn.Texture&&(r.map=t.map),t.emissive instanceof Jn.Color&&r.emissive.copy(t.emissive),t.emissiveMap instanceof Jn.Texture&&(r.emissiveMap=t.emissiveMap));let n=["aoMap","aoMapIntensity","lightMap","lightMapIntensity","alphaMap","opacity","transparent","alphaTest","side","vertexColors","wireframe","depthTest","depthWrite","visible","toneMapped","fog"];for(let i of n)t[i]!==void 0&&(r[i]=t[i]);return r.needsUpdate=!0,r}function cp(e){if(ip(e))return e.clone();let t=new Jn.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(Or(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 dp(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=Or(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=Or(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 Rn=require("three");function up(e,t,r){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 Rn.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??Rn.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??Rn.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(Or(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(Or(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new Rn.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 Rn.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 Rn.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let o=Wt(t,"texture"),n=Wt(t,"metalnessMap"),i=Wt(t,"roughnessMap"),s=Wt(t,"emissiveMap"),l=Wt(t,"alphaMap"),a=Wt(t,"normalMap"),u=Wt(t,"bumpMap"),f=Wt(t,"aoMap"),d=Wt(t,"displacementMap"),p=Wt(t,"clearcoatMap"),v=Wt(t,"clearcoatRoughnessMap"),x=Wt(t,"clearcoatNormalMap"),_=Wt(t,"anisotropyMap"),T=Wt(t,"transmissionMap"),y=Wt(t,"thicknessMap"),c=Wt(t,"sheenColorMap"),m=Wt(t,"sheenRoughnessMap"),S=Wt(t,"specularIntensityMap"),C=Wt(t,"specularColorMap");if(o?(e.map=Qt(o,Rn.SRGBColorSpace),e.color.set(r??"#ffffff")):r&&(e.map=null,e.color.set(r)),n&&(e.metalnessMap=Qt(n)),t?.metalness!==void 0&&(e.metalness=t.metalness),i&&(e.roughnessMap=Qt(i)),t?.roughness!==void 0&&(e.roughness=t.roughness),t?.emissive?e.emissive.set(t.emissive):s&&e.emissive.set("#ffffff"),t?.emissiveIntensity!==void 0&&(e.emissiveIntensity=t.emissiveIntensity),s&&(e.emissiveMap=Qt(s,Rn.SRGBColorSpace)),t?.opacity!==void 0&&(e.opacity=t.opacity),l&&(e.alphaMap=Qt(l)),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=sp(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=ap(t.side)),a&&(e.normalMap=Qt(a)),a||t?.normalScale!==void 0){let N=t?.normalScale??Math.abs(Or(e.userData.baseNormalScale).x);e.normalScale.set(N,t?.flipNormalY?-N:N)}if(u&&(e.bumpMap=Qt(u)),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),f&&(e.aoMap=Qt(f)),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),d&&(e.displacementMap=Qt(d)),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),p&&(e.clearcoatMap=Qt(p)),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),v&&(e.clearcoatRoughnessMap=Qt(v)),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),x&&(e.clearcoatNormalMap=Qt(x)),x||t?.clearcoatNormalScale!==void 0){let N=t?.clearcoatNormalScale??Math.abs(Or(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(N,t?.flipClearcoatNormalY?-N:N)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),c&&(e.sheenColorMap=Qt(c,Rn.SRGBColorSpace)),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),m&&(e.sheenRoughnessMap=Qt(m)),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),_&&(e.anisotropyMap=Qt(_)),t?.transmission!==void 0&&(e.transmission=t.transmission),T&&(e.transmissionMap=Qt(T)),t?.thickness!==void 0&&(e.thickness=t.thickness),y&&(e.thicknessMap=Qt(y)),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),S&&(e.specularIntensityMap=Qt(S)),t?.specularColor&&e.specularColor.set(t.specularColor),C&&(e.specularColorMap=Qt(C,Rn.SRGBColorSpace)),e.transparent=e.opacity<1||e.transmission>0||e.blending!==Rn.NormalBlending||!!((l||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function Go(e){e.updateMatrixWorld(!0),e.traverse(t=>{let r=t;r.isSkinnedMesh&&(r.skeleton?.update(),r.computeBoundingBox?.(),r.computeBoundingSphere?.())})}var pp=require("three");function Yg(e){return e.isSkinnedMesh===!0}function to(e){let t=[];return e.traverse(r=>{Yg(r)&&t.push(r)}),t}var Wo="reactImmersiveSkinFreeze";function mp(e){return!!e.userData[Wo]}function ts(e,t){let r=e.userData,o=new pp.Matrix4().copy(t).invert(),n=r[Wo];if(n){n.frozenInverse.copy(o),e.bindMatrixInverse.copy(o);return}let i={frozenInverse:o,previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(o),e.onBeforeRender=function(s,l,a,u,f,d){i.previousOnBeforeRender.call(this,s,l,a,u,f,d),e.bindMatrixInverse.copy(i.frozenInverse)},r[Wo]=i}function no(e){let t=e.userData,r=t[Wo];r&&(e.onBeforeRender=r.previousOnBeforeRender,delete t[Wo],e.updateMatrixWorld(!0))}var vi=require("react"),fp=require("@react-three/fiber");function ns(){let e=(0,fp.useThree)(n=>n.gl.domElement),t=(0,vi.useRef)(void 0),r=(0,vi.useCallback)(n=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=n},[e]),o=(0,vi.useCallback)(()=>{let n=t.current;n!==void 0&&(e.style.cursor=n,t.current=void 0)},[e]);return(0,vi.useEffect)(()=>()=>{o()},[o]),{setCanvasCursor:r,restoreCanvasCursor:o}}var Fl=require("react/jsx-runtime");function rs(e,t,r){let o=r.get(e);o&&(t?.position?e.position.fromArray(t.position):e.position.copy(o.position),t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],o.rotation.order):e.rotation.copy(o.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(o.scale),e.updateMatrix())}function Kg(e){return e.material}function is(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function ro(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function jl(e,t){return Array.isArray(e)?e[t]:e}function rn(e,t=!1){if(!e||typeof e!="object")return"-";let r=e;return[r.channel??0,t?r.format??"":"",r.isVideoTexture?r.colorSpace??"":""].join(":")}function io(e){let t=e,r=Number(t.clearcoat)>0,o=Number(t.sheen)>0,n=Number(t.anisotropy)>0,i=Number(t.transmission)>0,s=t.transparent===!1&&t.blending===Ne.NormalBlending&&t.alphaToCoverage!==!0;return[rn(t.map),rn(t.aoMap),rn(t.lightMap),rn(t.bumpMap),rn(t.normalMap,!0),t.normalMap?t.normalMapType:"",rn(t.displacementMap),rn(t.emissiveMap),rn(t.metalnessMap),rn(t.roughnessMap),n,rn(n?t.anisotropyMap:null),r,rn(r?t.clearcoatMap:null),rn(r?t.clearcoatNormalMap:null,!0),rn(r?t.clearcoatRoughnessMap:null),o,rn(o?t.sheenColorMap:null),rn(o?t.sheenRoughnessMap:null),rn(t.specularColorMap),rn(t.specularIntensityMap),i,rn(i?t.transmissionMap:null),rn(i?t.thicknessMap:null),rn(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,t.side,s].join("|")}function Hl({url:e,objectBindings:t,selectedItem:r,itemMaterials:o,onItemClick:n,onItemHover:i,onModelLoaded:s,onAnimationsReady:l,nodeRefsOut:a,onNodeRefsChange:u,materialRefsOut:f,panelHoveredItem:d,sceneConfig:p,zoomOnSelected:v=!0,highlightOnHover:x=!0,decoderConfig:_,modelFormat:T,explodeFactor:y=0,suspendBindingTransforms:c=!1}){let m=Ja(e,_,T),S=(0,oo.useThree)(B=>B.invalidate),[C,N]=(0,me.useState)(null),E=(0,me.useRef)(null),{setCanvasCursor:h,restoreCanvasCursor:w}=ns();(0,me.useEffect)(()=>{x||(N(null),i?.(null),w())},[x,i,w]);let g=(0,me.useMemo)(()=>hp.SkeletonUtils.clone(m.scene),[m.scene]),M=(0,me.useMemo)(()=>Ji(g),[g]),D=M.nodesById;(0,me.useEffect)(()=>{M.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(M.duplicateNames))},[M]);let H=(0,me.useMemo)(()=>{let B=new WeakMap;return g.traverse(I=>{B.set(I,{position:I.position.clone(),rotation:I.rotation.clone(),scale:I.scale.clone()})}),B},[g]);(0,me.useEffect)(()=>{let B=!1,I=null,K=null,X=window,Z=Object.entries(D).filter(([,tt])=>Kr(tt)),se=new Ne.Box3,re=[],Se=0;g.traverse(tt=>{Kr(tt)&&(tt.castShadow=!1,tt.receiveShadow=!0)});let at=()=>{if(B)return;let tt=new Set,ge=se.getSize(new Ne.Vector3),Ot=new Ne.Vector3;for(let{name:bn,box:nn}of re)nn.getSize(Ot),Ot.x>ge.x*.7&&Ot.z>ge.z*.7&&Ot.y>ge.y*.4&&tt.add(bn);g.traverse(bn=>{if(!Kr(bn))return;let nn=Uo(bn);bn.castShadow=!nn||!tt.has(nn),bn.receiveShadow=!0}),S()},Lt=()=>{B||(X.requestIdleCallback?I=X.requestIdleCallback(We,{timeout:100}):K=window.setTimeout(()=>We(),0))},We=tt=>{if(I=null,K=null,B)return;let ge=performance.now(),Ot=0;for(;Se<Z.length&&!(Ot>0&&!(tt?tt.didTimeout?Ot<16:tt.timeRemaining()>1:performance.now()-ge<8));){let[bn,nn]=Z[Se];Se+=1,Ot+=1;let nt=new Ne.Box3().setFromObject(nn);nt.isEmpty()||(re.push({name:bn,box:nt}),se.union(nt))}Se<Z.length?Lt():at()};return Lt(),()=>{B=!0,I!==null&&X.cancelIdleCallback?.(I),K!==null&&window.clearTimeout(K)}},[S,D,g]),(0,me.useEffect)(()=>{Go(g)},[g]),(0,me.useEffect)(()=>{let B=new AbortController;return Ra(g,B.signal),()=>{B.abort(),Na(g)}},[g]);let G=(0,me.useMemo)(()=>{let B={};for(let[I,K]of Object.entries(t))B[K.modelObjectId??I]=I;return B},[t]),k=(0,me.useMemo)(()=>Object.entries(t).map(([B,I])=>`${B}${I.modelObjectId??B}`).sort().join(""),[t]),$=(0,me.useMemo)(()=>Object.entries(t).map(([B,I])=>JSON.stringify([B,I.modelObjectId??B,I.transform??null])).sort().join(""),[t]),j=(0,me.useRef)(new Map);(0,me.useEffect)(()=>{let B=new Map,I=new Map;for(let[Z,se]of Object.entries(t)){if(!se.transform)continue;let re=D[se.modelObjectId??Z];re&&(B.set(re,se.transform),I.set(re,to(re)))}let K=new Set([...j.current.keys(),...B.keys()]);for(let Z of K){rs(Z,void 0,H);for(let se of to(Z))no(se)}g.updateMatrixWorld(!0);let X=new Map;for(let Z of I.values())for(let se of Z)X.has(se)||X.set(se,se.matrixWorld.clone());for(let[Z,se]of B)rs(Z,se,H);j.current=B,g.updateMatrixWorld(!0);for(let[Z,se]of X)ts(Z,se);S()},[g,D,H,$,S]),(0,me.useEffect)(()=>()=>{for(let B of to(g))no(B)},[g]);let P=(0,me.useMemo)(()=>{let B={};for(let[I,K]of Object.entries(t)){let X=K.modelObjectId??I,Z=D[X];if(!Kr(Z))continue;let se=Kg(Z);se&&(B[I]=is(se,re=>{let Se=es(re),at=cp(Se??new Ne.MeshStandardMaterial);return dp(at),at}))}return B},[D,k]);(0,me.useEffect)(()=>{f&&(f.current=P)},[P,f]),(0,me.useEffect)(()=>()=>{for(let B of Object.values(P))ro(B,I=>I.dispose())},[P]);let A=p?.model.shading??"lit",W=p?.model.renderer??"pbr",F=p?.wireframe.enabled??!1,ae=p?.wireframe.color??"#93c5fd",Ee=p?.wireframe.opacity??1,le=(0,me.useMemo)(()=>{let B={};if(A!=="unlit")return B;for(let[I,K]of Object.entries(P))B[I]=is(K,X=>{let Z=new Ne.MeshBasicMaterial;return Z.color.copy(X.color),Z.map=X.map,Z.alphaMap=X.alphaMap,Z.alphaTest=X.alphaTest,Z.transparent=X.transparent,Z.opacity=X.opacity,Z.side=X.side,Z});return B},[P,A]),Ae=(0,me.useMemo)(()=>{let B={};if(A!=="normals")return B;for(let[I,K]of Object.entries(P))B[I]=is(K,()=>new Ne.MeshNormalMaterial);return B},[P,A]),ke=(0,me.useMemo)(()=>{let B={};if(A!=="lit"||W!=="matcap")return B;let I=pu();for(let[K,X]of Object.entries(P))B[K]=is(X,Z=>{let se=new Ne.MeshMatcapMaterial;return se.matcap=I,se.color.copy(Z.color),se.alphaMap=Z.alphaMap,se.alphaTest=Z.alphaTest,se.side=Z.side,se});return B},[P,A,W]);(0,me.useEffect)(()=>()=>{for(let B of Object.values(le))ro(B,I=>I.dispose());for(let B of Object.values(Ae))ro(B,I=>I.dispose());for(let B of Object.values(ke))ro(B,I=>I.dispose())},[le,Ae,ke]);let Oe=B=>A==="normals"?Ae[B]:A==="unlit"?le[B]:W==="matcap"?ke[B]:P[B],bt=(0,me.useRef)(s);bt.current=s,(0,me.useEffect)(()=>{bt.current?.(g)},[g]);let $t=(0,me.useMemo)(()=>{let B={};for(let[I,K]of Object.entries(t)){let X=K.modelObjectId??I,Z=D[X];Z&&(B[I]=Z)}return B},[D,k]);(0,me.useEffect)(()=>(a.current=$t,u?.(),()=>{a.current===$t&&(a.current={})}),[$t,a,u]);let Ue=(0,me.useRef)({});(0,me.useEffect)(()=>()=>{for(let B of Object.values(Ue.current))for(let[I,K]of Object.entries(B))K&&Ua(K,Za(I));Ue.current={}},[]);let Ve=(0,me.useMemo)(()=>{let B=new Map;for(let[I,K]of Object.entries(t)){let X=d===K||d?.id===K.id||d?.modelObjectId===K.modelObjectId,Z=x&&(C===I||X),se=Z||r===I;(Z||se)&&B.set(I,{emissive:Z,matcap:se})}return B},[t,x,C,r,d]),St=(0,me.useRef)(Ve);St.current=Ve,(0,me.useEffect)(()=>{let B=new Set;for(let[I,K]of Object.entries(t)){B.add(I);let X=K.modelObjectId??I,Z=D[X];if(!Kr(Z))continue;Z.visible=K.visible!==!1;let se=P[I];if(!se)continue;if(W!=="uv-checker"){let ge=Oe(I);ge&&(Z.material=ge)}if(K.visible===!1)continue;let re=le[I],Se=ke[I],at=o[I]??o[K.modelObjectId??I],Lt=K.style?.material,We=Ue.current[I]??{};for(let ge of op){let Ot=Wt(Lt,ge),bn=We[ge];if(bn===Ot)continue;let nn=Za(ge);bn&&Ua(bn,nn),Ot?(uu(Ot,nn,S),We[ge]=Ot):delete We[ge]}Object.keys(We).length>0?Ue.current[I]=We:delete Ue.current[I];let tt=at?.hex??Lt?.baseColor;ro(se,(ge,Ot)=>{let bn=io(ge);up(ge,Lt,tt);let nn=ge.userData.reactImmersiveConfiguredEmissive;nn?.isColor?nn.copy(ge.emissive):ge.userData.reactImmersiveConfiguredEmissive=ge.emissive.clone();let nt=St.current.get(I);nt?.emissive&&ge.emissive.add(Cl),bn!==io(ge)&&(ge.needsUpdate=!0);let xt=jl(re,Ot);if(xt){let ai=io(xt);xt.color.copy(ge.color),xt.map=ge.map,xt.alphaMap=ge.alphaMap,xt.alphaTest=ge.alphaTest,xt.transparent=ge.transparent,xt.opacity=ge.opacity,xt.side=ge.side,ai!==io(xt)&&(xt.needsUpdate=!0)}let yt=jl(Se,Ot);if(yt){let ai=io(yt);nt?.matcap?yt.color.set(Xr.color):yt.color.copy(ge.color),yt.map=ge.map,yt.alphaMap=ge.alphaMap,yt.alphaTest=ge.alphaTest,yt.transparent=ge.transparent,yt.opacity=ge.opacity,yt.side=ge.side,ai!==io(yt)&&(yt.needsUpdate=!0)}})}for(let I of Object.keys(Ue.current))if(!B.has(I)){for(let[K,X]of Object.entries(Ue.current[I]))X&&Ua(X,Za(K));delete Ue.current[I]}S()},[t,D,P,le,Ae,ke,o,A,W,S]);let Vt=(0,me.useRef)(new Map);(0,me.useEffect)(()=>{let B=Vt.current,I=new Set([...B.keys(),...Ve.keys()]),K=!1;for(let X of I){let Z=B.get(X),se=Ve.get(X),re=!!Z?.emissive!=!!se?.emissive,Se=!!Z?.matcap!=!!se?.matcap;if(!re&&!Se)continue;K=!0;let at=P[X],Lt=ke[X];at&&ro(at,(We,tt)=>{let ge=We.userData.reactImmersiveConfiguredEmissive;re&&ge?.isColor&&(We.emissive.copy(ge),se?.emissive&&We.emissive.add(Cl));let Ot=jl(Lt,tt);Se&&Ot&&(se?.matcap?Ot.color.set(Xr.color):Ot.color.copy(We.color))})}Vt.current=Ve,K&&S()},[Ve,P,ke,S]),(0,me.useEffect)(()=>{if(W!=="uv-checker")return;let B=mu(),I=[];return g.traverse(K=>{if(!Kr(K))return;let X=K.material,Z=Array.isArray(X)?X:[X],se=!!K.geometry.getAttribute("uv"),re=Z.map((at,Lt)=>{let We=new Ne.MeshBasicMaterial({color:se?"#ffffff":"#ff00ff",map:se?B:null,side:at.side});return We.name=`${K.name||"mesh"}-uv-checker-${Lt}`,We.toneMapped=!1,We}),Se=Array.isArray(X)?re:re[0];K.material=Se,I.push({node:K,original:X,diagnostic:Se})}),S(),()=>{for(let{node:K,original:X,diagnostic:Z}of I){K.material=X;let se=Array.isArray(Z)?Z:[Z];for(let re of se)re.dispose()}S()}},[g,W,S]),(0,me.useEffect)(()=>{if(!F)return;let B=[];for(let[I,K]of Object.entries(t)){let X=K.modelObjectId??I,Z=D[X];if(!Kr(Z))continue;let se=new Ne.MeshBasicMaterial({color:ae,wireframe:!0,transparent:!0,opacity:Ee,depthTest:!1,depthWrite:!1,side:Ne.DoubleSide,toneMapped:!1}),re=Z.clone(!1);re.name="",re.position.set(0,0,0),re.quaternion.identity(),re.scale.set(1,1,1),re.matrix.identity(),re.matrixAutoUpdate=!0,re.material=se,re.castShadow=!1,re.receiveShadow=!1,re.frustumCulled=!1,re.renderOrder=1,re.userData={isWireframeOverlay:!0},re.raycast=()=>{},Z.morphTargetInfluences&&(re.morphTargetInfluences=Z.morphTargetInfluences),Z.add(re),B.push({node:Z,overlay:re})}return S(),()=>{for(let{node:I,overlay:K}of B)I.remove(K),K.material.dispose()}},[F,ae,Ee,D,t,S]);let et=(0,me.useMemo)(()=>np(m.animations),[m.animations]),sn=(0,me.useRef)(l);sn.current=l;let Mt=(0,me.useRef)(p);Mt.current=p;let Ct=(0,me.useRef)(null),En=(0,me.useRef)({}),je=(0,me.useRef)(null),Et=(0,me.useRef)(null),ne=(0,me.useRef)(1),de=(0,me.useRef)(new Set),Gt=(0,me.useRef)(0),jt=()=>({currentClip:Et.current,isPlaying:je.current?.paused===!1,speed:ne.current,time:je.current?.time??0,duration:je.current?.getClip().duration??0}),ot=()=>{let B=jt();de.current.forEach(I=>I(B))},ut=(B,I)=>{let K=lp(I);B.setLoop(K==="once"?Ne.LoopOnce:Ne.LoopRepeat,K==="once"?1:1/0),B.clampWhenFinished=K==="once";let X=Vl(I?.speed??ne.current);ne.current=X,B.setEffectiveTimeScale(X)},ht=()=>{je.current?.stop(),je.current=null,Et.current=null,ot(),S()},Yt=()=>{je.current&&(je.current.paused=!0,ot(),S())},kt=B=>{let I=Vl(B);ne.current=I,je.current?.setEffectiveTimeScale(I),ot()},Bn=B=>{let I=je.current;if(!I)return;let K=I.getClip().duration;I.time=Math.min(Math.max(B,0),K),Ct.current?.update(0),ot(),S()},Cn=B=>{let I=En.current[B];if(!I)return;let K=Qa(Mt.current,B);if(!K?.hidden){if(je.current===I&&I.paused){ut(I,K),I.paused=!1,Et.current=B,ot(),S();return}je.current&&je.current!==I&&je.current.stop(),ut(I,K),I.paused=!1,I.enabled=!0,I.reset().play(),je.current=I,Et.current=B,ot(),S()}};(0,me.useEffect)(()=>{let B=new Ne.AnimationMixer(g);Ct.current=B;let I={};for(let{clip:re,sourceName:Se}of et)I[Se]=B.clipAction(re);En.current=I;let K=re=>{re.action&&re.action===je.current&&ht()};B.addEventListener("finished",K);let X=()=>{};sn.current?.({clips:et.map(({sourceName:re})=>re),clipDetails:et.map(({sourceName:re,duration:Se})=>({sourceName:re,duration:Se})),play:et.length?Cn:X,pause:et.length?Yt:X,stop:et.length?ht:X,setSpeed:et.length?kt:X,seek:et.length?Bn:X,getState:jt,subscribe:re=>(de.current.add(re),re(jt()),()=>{de.current.delete(re)})}),ne.current=1,ot();let Z=Mt.current?.animations.autoplayClip,se=Z?Qa(Mt.current,Z):void 0;return Z&&!se?.hidden&&Cn(Z),()=>{B.removeEventListener("finished",K),B.stopAllAction(),B.uncacheRoot(g),Ct.current=null,En.current={},je.current=null,Et.current=null,ne.current=1,ot()}},[g,et]),(0,me.useEffect)(()=>{let B=Et.current,I=je.current;if(!B||!I||!p?.animations)return;let K=Qa(p,B);if(K?.hidden){ht();return}K&&(ut(I,K),ot())},[p?.animations]),(0,oo.useFrame)((B,I)=>{if(Ct.current&&je.current?.paused===!1){if(Ct.current.update(I),!c)for(let[K,X]of j.current)rs(K,X,H);S(),Gt.current+=I,Gt.current>=.066&&(Gt.current=0,ot(),Go(g))}});let _e=(0,me.useMemo)(()=>(p?.model.rotation??[0,0,0]).map(B=>B*Math.PI/180),[p?.model.rotation]);(0,oo.useFrame)((B,I)=>{if(!E.current)return;let K=E.current.rotation;K.x=Ne.MathUtils.lerp(K.x,_e[0],1-Math.exp(-5*I)),K.y=Ne.MathUtils.lerp(K.y,_e[1],1-Math.exp(-5*I)),K.z=Ne.MathUtils.lerp(K.z,_e[2],1-Math.exp(-5*I)),Math.abs(K.x-_e[0])<1e-4&&Math.abs(K.y-_e[1])<1e-4&&Math.abs(K.z-_e[2])<1e-4||S()});let $e=(0,me.useRef)([]),De=(0,me.useRef)(0),Ie=(0,me.useRef)(0),be=(0,me.useMemo)(()=>new Ne.Vector3,[]);(0,me.useEffect)(()=>{let B=new Map;for(let[at,Lt]of Object.entries(t)){let We=D[Lt.modelObjectId??at];We&&B.set(We,Lt)}for(let at of $e.current)rs(at.node,B.get(at.node)?.transform,H);Ie.current=0,g.updateWorldMatrix(!0,!0);let I=new Ne.Box3().setFromObject(g),K=I.getCenter(new Ne.Vector3),X=I.getSize(new Ne.Vector3).length()*.5;De.current=Number.isFinite(X)?X:0;let Z=[...B.keys()],se=new Set(Z),re=[],Se=new Ne.Vector3;for(let at of Z){if(!at.parent)continue;let Lt=at.parent,We=!1;for(;Lt;){if(se.has(Lt)){We=!0;break}Lt=Lt.parent}if(We)continue;let tt=new Ne.Box3().setFromObject(at);if(tt.isEmpty())continue;tt.getCenter(Se);let ge=Se.clone().sub(K);ge.lengthSq()<1e-8||(ge.normalize(),re.push({node:at,restLocalPos:at.position.clone(),restWorldPos:at.getWorldPosition(new Ne.Vector3),worldDir:ge,parentInverse:new Ne.Matrix4().copy(at.parent.matrixWorld).invert()}))}$e.current=re,S()},[g,D,k,$,H,S]),(0,me.useEffect)(()=>{S()},[y,S]),(0,oo.useFrame)((B,I)=>{let K=$e.current;if(K.length===0)return;let X=Math.min(Math.max(y,0),1),Z=Ie.current;if(Math.abs(Z-X)<1e-4){if(Z===X)return;Ie.current=X}else Ie.current=Ne.MathUtils.lerp(Z,X,1-Math.exp(-6*I)),S();let se=Ie.current*De.current;for(let re of K)be.copy(re.worldDir).multiplyScalar(se).add(re.restWorldPos).applyMatrix4(re.parentInverse),re.node.position.copy(be)});let Rt=B=>{let I=B;for(;I;){let K=Uo(I),X=K?G[K]:void 0;if(X&&t[X])return[X,t[X]];I=I.parent}return null},Nt=B=>{let I=Rt(B.object);if(!I)return;let[,K]=I;K.selectable!==!1&&(B.stopPropagation(),n(K))},Bt=B=>{if(!x)return;let I=Rt(B.object);if(!I)return;let[K,X]=I;X.hoverable!==!1&&(B.stopPropagation(),h("pointer"),N(K),i?.(X))},ln=B=>{x&&(B.stopPropagation(),w(),N(null),i?.(null))},he=(0,me.useMemo)(()=>!ka(g),[g]);return(0,Fl.jsx)("group",{ref:E,children:(0,Fl.jsx)("primitive",{object:g,...he?{onClick:Nt,...x?{onPointerOver:Bt,onPointerOut:ln}:{}}:{}})})}var Le=require("react"),Gl=require("@react-three/drei"),xi=require("@react-three/fiber"),Mr=require("three");var Pn=require("react/jsx-runtime"),qg=.02;function gp(e,t){let r=(0,Le.useRef)(null),o=(0,xi.useThree)(u=>u.scene),n=(0,Le.useRef)(null),i=(0,Le.useMemo)(()=>new Mr.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),s=(0,Le.useMemo)(()=>new Mr.Vector3,[]),l=(0,Le.useMemo)(()=>new Mr.Vector3,[]),a=(0,Le.useMemo)(()=>new Mr.Vector3,[]);return(0,Le.useEffect)(()=>{n.current=null},[e.anchorNodeName]),(0,xi.useFrame)(({camera:u})=>{let f=r.current,d=f?.parent;if(!f||!d)return;let p=n.current;if(e.anchorNodeName&&(!p||!p.parent)&&(p=pr(o,e.anchorNodeName),n.current=p),p?(p.updateWorldMatrix(!0,!1),s.copy(i).applyMatrix4(p.matrixWorld)):(s.copy(i),d.localToWorld(s)),t){let v=t.current.get(e.id);v||(v=new Mr.Vector3,t.current.set(e.id,v)),v.copy(s)}a.copy(u.position).sub(s),a.lengthSq()>0?(a.normalize(),l.copy(s).addScaledVector(a,qg)):l.copy(s),d.worldToLocal(l),f.position.copy(l)}),r}function Jg({annotation:e,occluders:t,worldPositionsRef:r,onClick:o,onHover:n,showAnnotationOnHover:i}){let[s,l]=(0,Le.useState)(!1),a=gp(e,r),[u,f]=(0,Le.useState)(!1),[d,p]=(0,Le.useState)(1),v=(0,Le.useRef)(null),x=(0,Le.useRef)(null),_=(0,Le.useRef)(null);(0,Le.useEffect)(()=>()=>{v.current&&(clearTimeout(v.current),v.current=null),_.current&&(clearTimeout(_.current),_.current=null)},[]);let T=C=>{C.stopPropagation(),C.preventDefault(),v.current&&(clearTimeout(v.current),v.current=null),v.current=window.setTimeout(()=>{o?.(e),v.current=null},10)},y=C=>{C.stopPropagation(),f(!0),p(100),_.current&&(clearTimeout(_.current),_.current=null),n?.(e),i&&o?.(e)},c=C=>{C.stopPropagation(),f(!1),p(1),_.current&&clearTimeout(_.current),_.current=window.setTimeout(()=>{n?.(null),i&&n?.(null),_.current=null},50)},m=C=>{C.stopPropagation();let N=C.currentTarget;N.dataset.pointerX=String(C.clientX),N.dataset.pointerY=String(C.clientY)},S=C=>{C.stopPropagation();let N=C.currentTarget,E=parseFloat(N.dataset.pointerX||"0"),h=parseFloat(N.dataset.pointerY||"0"),w=C.clientX-E,g=C.clientY-h;Math.sqrt(w*w+g*g)<10&&T(C)};return(0,Pn.jsx)("group",{ref:a,children:(0,Pn.jsx)(Gl.Html,{center:!0,occlude:t,onOcclude:l,pointerEvents:s?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:s?"none":"auto",zIndex:d},className:"annotation-html-wrapper",transparent:!0,children:(0,Pn.jsx)("div",{ref:x,className:`ri-annotationMarker ${u?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:s?"none":"flex"},onPointerDown:m,onPointerUp:S,onPointerEnter:y,onPointerLeave:c,onDoubleClick:C=>{C.stopPropagation(),o?.(e)},role:"button",tabIndex:0,"aria-label":`Annotation ${e.id}`,children:(0,Pn.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function Zg({annotation:e,occluders:t,popupRef:r,onClose:o,hideCloseButton:n=!1}){let[i,s]=(0,Le.useState)(!1),l=gp(e),a=(0,Pn.jsxs)("div",{ref:r,className:"ri-viewAnnotationPopup",style:{display:i?"none":"block"},onPointerDown:u=>u.stopPropagation(),onClick:u=>u.stopPropagation(),children:[(0,Pn.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,Pn.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!n&&(0,Pn.jsx)("button",{onClick:u=>{u.stopPropagation(),o?.()},className:"ri-viewAnnotationClose","aria-label":"Close annotation",children:"\xD7"})]}),e.description&&(0,Pn.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description})]});return(0,Pn.jsx)("group",{ref:l,children:(0,Pn.jsx)(Gl.Html,{occlude:t,onOcclude:s,pointerEvents:i?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:i?"none":"auto",zIndex:1e3},transparent:!0,children:a})})}function Wl({annotations:e,sceneConfig:t,activeAnnotation:r,popupRef:o,canvasRootRef:n,worldPositionsRef:i,modelLoaded:s,onAnnotationClick:l,onAnnotationHover:a,onCloseAnnotation:u,hideCloseButton:f=!1,showAnnotationOnHover:d=!1}){let p=(0,xi.useThree)(k=>k.invalidate),v=(0,xi.useThree)(k=>k.scene),[x,_]=(0,Le.useState)(null),[T,y]=(0,Le.useState)(!1),c=(0,Le.useRef)(null),m=(0,Le.useRef)(null),S=(0,Le.useRef)(null),C=(0,Le.useMemo)(()=>{let k=[];return v.traverse($=>{let j=$;j.isMesh&&!j.isSkinnedMesh&&k.push({current:$})}),k},[v,e,s]),N=(0,Le.useCallback)(()=>{p();let k=()=>{p(),m.current=window.requestAnimationFrame(()=>{p(),m.current=null})};m.current=window.requestAnimationFrame(k)},[p]);(0,Le.useEffect)(()=>{N()},[e,N]),(0,Le.useEffect)(()=>{N()},[r,N]),(0,Le.useEffect)(()=>()=>{m.current!==null&&window.cancelAnimationFrame(m.current),S.current&&clearTimeout(S.current)},[]);let E=T?x:r||x,h=(0,Le.useMemo)(()=>E?e.find(k=>k.id===E.id)??E:null,[E,e]),w=(0,Le.useCallback)(k=>{if(T&&x?.id===k.id){y(!1),_(null),u?.();return}y(!0),_(k),l?.(k)},[T,x,l,u]),g=(0,Le.useCallback)(k=>{a?.(k),d&&!T&&(S.current&&(clearTimeout(S.current),S.current=null),k?_(k):S.current=window.setTimeout(()=>{_(null),u?.(),S.current=null},100))},[T,a,d,u]),M=(0,Le.useCallback)(()=>{y(!1),_(null),u?.()},[u]),D=(0,Le.useCallback)(k=>{let $=k.target;if($.closest?.(".ri-annotationMarker")||$.closest?.(".ri-viewAnnotationPopup")||$.closest?.(".annotation-html-wrapper"))return;let j=n.current;j&&j.contains($)&&(y(!1),_(null),u?.())},[n,u]),H=(0,Le.useCallback)(k=>{k.key==="Escape"&&T&&(y(!1),_(null),u?.())},[T,u]);(0,Le.useEffect)(()=>{let k=n.current;return k&&(k.addEventListener("click",D),k.addEventListener("pointerdown",D)),document.addEventListener("keydown",H),()=>{k&&(k.removeEventListener("click",D),k.removeEventListener("pointerdown",D)),document.removeEventListener("keydown",H)}},[n,D,H]);let G=(0,Le.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(k=>k*Math.PI/180),[t?.model.rotation]);return(0,xi.useFrame)((k,$)=>{c.current&&(c.current.rotation.x=Mr.MathUtils.lerp(c.current.rotation.x,G[0],1-Math.exp(-5*$)),c.current.rotation.y=Mr.MathUtils.lerp(c.current.rotation.y,G[1],1-Math.exp(-5*$)),c.current.rotation.z=Mr.MathUtils.lerp(c.current.rotation.z,G[2],1-Math.exp(-5*$)))}),(0,Pn.jsxs)("group",{ref:c,children:[e.map(k=>{let $=`${k.worldPosition.join(",")}-${k.title}-${k.id}`;return(0,Pn.jsx)(Jg,{annotation:k,occluders:C,worldPositionsRef:i,onClick:w,onHover:g,showAnnotationOnHover:d},$)}),h?(0,Pn.jsx)(Zg,{annotation:h,occluders:C,popupRef:o,onClose:M,hideCloseButton:f},`popup-${h.id}`):null]})}var Xo=require("react"),$o=require("@react-three/drei"),yi=require("three"),Mn=require("react/jsx-runtime"),Qg="#22d3ee",eb="#facc15";function os(e,t){let r=e<10?e.toFixed(3):e.toFixed(2);return t?`${r} ${t}`:r}function tb(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function as({position:e,children:t}){return(0,Mn.jsx)($o.Html,{center:!0,position:e,zIndexRange:[20,0],children:(0,Mn.jsx)("div",{className:"ri-measureLabel",children:t})})}function nb({box:e,unit:t}){let r=(0,Xo.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]),o=(0,Xo.useMemo)(()=>{let[l,a,u]=e.size;return new yi.EdgesGeometry(new yi.BoxGeometry(l||1e-4,a||1e-4,u||1e-4))},[e.size]);(0,Xo.useEffect)(()=>()=>{o.dispose()},[o]);let[n,i,s]=e.size;return(0,Mn.jsxs)("group",{position:r,children:[(0,Mn.jsx)("lineSegments",{geometry:o,children:(0,Mn.jsx)("lineBasicMaterial",{color:eb})}),(0,Mn.jsxs)(as,{position:[0,-i/2,s/2],children:["W ",os(n,t)]}),(0,Mn.jsxs)(as,{position:[-n/2,0,s/2],children:["H ",os(i,t)]}),(0,Mn.jsxs)(as,{position:[n/2,-i/2,0],children:["D ",os(s,t)]})]})}function Xl({points:e,unit:t,box:r,showDimensions:o}){return(0,Mn.jsxs)("group",{children:[e.map(n=>(0,Mn.jsx)($o.Html,{center:!0,position:n.position,zIndexRange:[15,0],children:(0,Mn.jsx)("div",{className:"ri-measureDot"})},n.id)),e.slice(1).map((n,i)=>{let s=e[i].position,l=n.position,a=new yi.Vector3(...s).distanceTo(new yi.Vector3(...l));return(0,Mn.jsxs)("group",{children:[(0,Mn.jsx)($o.Line,{points:[s,l],color:Qg,lineWidth:2}),(0,Mn.jsx)(as,{position:tb(s,l),children:os(a,t)})]},`${e[i].id}-${n.id}`)}),o&&r?(0,Mn.jsx)(nb,{box:r,unit:t}):null]})}var Ke=require("react"),wi=require("@react-three/xr"),yp=require("@react-three/fiber"),Yo=require("three"),fr=require("react/jsx-runtime"),rb=1,bp=1,ib=.1,ob=10;function ab(e,t){let[r,o,n]=e.size,i=(e.min[0]+e.max[0])/2,s=(e.min[2]+e.max[2])/2,l=Math.max(r,o,n)||1;return{scale:t==="real-world"?1:rb/l,offset:[-i,-e.min[1],-s]}}function vp(e){let t=e[0].clientX-e[1].clientX,r=e[0].clientY-e[1].clientY;return Math.hypot(t,r)}function xp(e){let t=e[0].clientX-e[1].clientX,r=e[0].clientY-e[1].clientY;return Math.atan2(r,t)}var sb=(0,Ke.forwardRef)(function({box:t,scaleMode:r,children:o,onARStateChange:n},i){let s=(0,Ke.useRef)(null),l=(0,Ke.useRef)(null),a=(0,Ke.useRef)(null),u=(0,wi.useXR)($=>$.session!=null),f=(0,wi.useXR)($=>$.mode==="immersive-ar"),d=(0,Ke.useMemo)(()=>t?ab(t,r):null,[t,r]),p=(0,Ke.useRef)(new Yo.Vector3(0,0,-bp)),v=(0,Ke.useRef)(1),x=(0,Ke.useRef)(0),_=(0,Ke.useRef)(!0),T=(0,Ke.useRef)(!1),y=(0,Ke.useMemo)(()=>new Yo.Matrix4,[]),c=(0,Ke.useRef)(new Yo.Vector3),m=(0,Ke.useRef)(!1),S=(0,Ke.useRef)(null),C=(0,Ke.useRef)(!1),N=(0,Ke.useRef)(0),E=(0,Ke.useRef)(0),h=(0,Ke.useRef)(1),w=(0,Ke.useRef)(0),g=(0,Ke.useCallback)(()=>{if(!n||!f)return;let $={canPlace:m.current,isPlacementMode:_.current,isModelPlaced:T.current},j=S.current;j&&j.canPlace===$.canPlace&&j.isPlacementMode===$.isPlacementMode&&j.isModelPlaced===$.isModelPlaced||(S.current=$,n($))},[f,n]),M=(0,Ke.useCallback)(()=>!f||!m.current?!1:(p.current.copy(c.current),T.current=!0,_.current=!1,g(),!0),[g,f]),D=(0,Ke.useCallback)(()=>{f&&(_.current=!0,g())},[g,f]),H=(0,Ke.useCallback)(()=>{let $=M();return!$&&f&&(_.current=!1,g()),$},[g,f,M]),G=(0,Ke.useCallback)(()=>{f&&(_.current=!1,g())},[g,f]);(0,Ke.useImperativeHandle)(i,()=>({placeCurrent:M,startPlacementMode:D,finishPlacementMode:H,cancelPlacementMode:G}),[G,H,M,D]),(0,Ke.useEffect)(()=>{if(!u){p.current.set(0,0,-bp),v.current=1,x.current=0,m.current=!1,C.current=!1,_.current=!0,T.current=!1,S.current=null;return}f&&(m.current=!1,C.current=!1,_.current=!0,T.current=!1,S.current=null,g())},[g,u,f]),(0,wi.useXRHitTest)(($,j)=>{if(!f||$.length===0){m.current&&(m.current=!1,g());return}j(y,$[0])&&(c.current.setFromMatrixPosition(y),m.current||(m.current=!0,g()))},"viewer"),(0,wi.useXRInputSourceEvent)("all","select",()=>{!f||C.current||!_.current||M()},[f,M]),(0,Ke.useEffect)(()=>{if(!f)return;let $=A=>{A.touches.length===2&&(C.current=!0,N.current=vp(A.touches),E.current=xp(A.touches),h.current=v.current,w.current=x.current)},j=A=>{if(!C.current||A.touches.length!==2)return;A.preventDefault();let W=vp(A.touches);if(N.current>0){let ae=W/N.current;v.current=Math.min(ob,Math.max(ib,h.current*ae))}let F=xp(A.touches);x.current=w.current-(F-E.current)},P=A=>{A.touches.length===0&&requestAnimationFrame(()=>{C.current=!1})};return window.addEventListener("touchstart",$),window.addEventListener("touchmove",j,{passive:!1}),window.addEventListener("touchend",P),window.addEventListener("touchcancel",P),()=>{window.removeEventListener("touchstart",$),window.removeEventListener("touchmove",j),window.removeEventListener("touchend",P),window.removeEventListener("touchcancel",P)}},[f]),(0,yp.useFrame)(()=>{let $=s.current,j=l.current;if(!$||!j)return;!u||!d?($.visible=!0,$.position.set(0,0,0),$.rotation.set(0,0,0),j.scale.setScalar(1)):($.visible=!f||T.current,$.position.copy(p.current),$.rotation.set(0,x.current,0),j.scale.setScalar(d.scale*v.current));let P=a.current;if(P){let A=f&&_.current&&m.current;P.visible=A,A&&P.position.copy(c.current)}});let k=u&&d?d.offset:[0,0,0];return(0,fr.jsxs)(fr.Fragment,{children:[(0,fr.jsxs)("mesh",{ref:a,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,fr.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,fr.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,fr.jsx)("group",{ref:s,children:(0,fr.jsx)("group",{ref:l,children:(0,fr.jsx)("group",{position:k,children:o})})})]})}),wp=sb;var At=require("react"),ss=require("@react-three/fiber"),wn=require("three"),lb=1.2;function $l({controlsRef:e,sceneRef:t,config:r,playing:o,resetOnPlay:n=!1,onFinished:i,onUserInteract:s,onStop:l}){let a=(0,ss.useThree)(G=>G.invalidate),u=(0,At.useMemo)(()=>r.waypoints??[],[r.waypoints]),f=u.length>=2,d=r.loop??!0,p=(0,At.useMemo)(()=>{if(u.length<2)return 24;let G=0;for(let k=0;k<u.length-1;k++)G+=u[k].segmentDuration??3.5;return d&&u.length>1&&(G+=u[u.length-1].segmentDuration??3.5),Math.max(G,4)},[u,d]),v=r.duration??p,x=(0,At.useMemo)(()=>u.map(G=>[...G.position,...G.target,G.azimuthAngle??"",G.polarAngle??"",G.segmentDuration??""].join(",")).join(";"),[u]),_=(0,At.useMemo)(()=>{let G=[];if(u.length<2)return G;let k=0;for(let $=0;$<u.length-1;$++)k+=u[$].segmentDuration??3.5,G.push(k);return d&&u.length>1&&(k+=u[u.length-1].segmentDuration??3.5,G.push(k)),G},[u,d]),T=(0,At.useMemo)(()=>G=>{if(u.length<2||_.length===0)return G/v;let k=_[_.length-1],$=d?G%v:Math.min(G,v),j=v>0?$/v*k:0;for(let P=0;P<_.length;P++)if(j<=_[P]){let A=P===0?0:_[P-1],W=_[P]-A,F=W>0?(j-A)/W:0,ae=d?u.length:u.length-1,Ee=P/ae,le=1/ae;return Ee+F*le}return 1},[u.length,_,v,d]),y=(0,At.useMemo)(()=>f?{position:new wn.CatmullRomCurve3(u.map(G=>new wn.Vector3(...G.position)),d,"catmullrom",.5),target:new wn.CatmullRomCurve3(u.map(G=>new wn.Vector3(...G.target)),d,"catmullrom",.5)}:null,[x,f,d]),c=(0,At.useMemo)(()=>{if(!f||!u.every(k=>Number.isFinite(k.azimuthAngle)&&Number.isFinite(k.polarAngle)))return null;let G=u.map(k=>({azimuth:k.azimuthAngle,polar:k.polarAngle,distance:new wn.Vector3(...k.position).distanceTo(new wn.Vector3(...k.target))}));for(let k=1;k<G.length;k+=1){let $=G[k-1].azimuth,j=G[k].azimuth;G[k].azimuth=j+Math.round(($-j)/(Math.PI*2))*Math.PI*2}return G},[x,f]),m=(0,At.useRef)(0),S=(0,At.useRef)(0),C=(0,At.useRef)(new wn.Vector3),N=(0,At.useRef)(new wn.Vector3),E=(0,At.useRef)(!1),h=(0,At.useRef)(0),w=(0,At.useRef)(!1),g=(0,At.useRef)(null),M=(0,At.useMemo)(()=>new wn.Vector3,[]),D=(0,At.useMemo)(()=>new wn.Vector3,[]),H=(0,At.useMemo)(()=>new wn.Spherical,[]);return(0,At.useEffect)(()=>{m.current=0,h.current=0,S.current=0,w.current=!1},[x,d,v]),(0,At.useEffect)(()=>{n&&(h.current=0,m.current=0,w.current=!1)},[n]),(0,At.useEffect)(()=>{if(!o){E.current=!1,m.current>0&&!n?h.current=m.current:n&&(h.current=0),(m.current>0||w.current)&&l?.();return}m.current>=v&&!d&&(m.current=0,h.current=0,w.current=!1);let G=e.current;if(G&&(G.getPosition(C.current),G.getTarget(N.current)),n||w.current||h.current===0?(m.current=0,h.current=0,w.current=!1):h.current>0&&h.current<v?m.current=h.current:(m.current=0,h.current=0),S.current=0,!f){let k=t.current;if(k){let $=new wn.Box3().setFromObject(k).getBoundingSphere(new wn.Sphere);g.current={center:$.center.clone(),radius:$.radius>0?$.radius:1}}}E.current=!0,a()},[o,f,e,t,a,v,d,x,n,l]),(0,At.useEffect)(()=>{if(!o||!s)return;let G=e.current;if(!G)return;let k=()=>{w.current||s()};return G.addEventListener("controlstart",k),()=>G.removeEventListener("controlstart",k)},[o,e,s]),(0,ss.useFrame)((G,k)=>{if(!o||!E.current)return;let $=e.current;if(!$)return;m.current+=k,S.current+=k;let j=T(m.current),P=!d&&m.current>=v;if(j=d?j%1:Math.min(j,1),y)if(y.target.getPoint(j,D),c){let W=d?c.length:c.length-1,F=Math.min(j,1)*W,ae=Math.min(Math.floor(F),W-1),Ee=(ae+1)%c.length,le=j>=1?1:F-ae,Ae=le*le*(3-2*le),ke=c[ae],Oe=c[Ee],bt=Oe.azimuth+Math.round((ke.azimuth-Oe.azimuth)/(Math.PI*2))*Math.PI*2,$t=ke.azimuth+(bt-ke.azimuth)*Ae,Ue=ke.polar+(Oe.polar-ke.polar)*Ae,Ve=ke.distance+(Oe.distance-ke.distance)*Ae;H.set(Math.max(Ve,1e-6),Math.min(Math.max(Ue,1e-6),Math.PI-1e-6),$t),M.setFromSpherical(H).add(D)}else y.position.getPoint(j,M);else{let W=g.current;if(!W)return;let F=j*Math.PI*2,ae=W.radius*2.2;M.set(W.center.x+Math.cos(F)*ae,W.center.y+W.radius*.6,W.center.z+Math.sin(F)*ae),D.copy(W.center)}let A=Math.min(S.current/lb,1);if(A<1){let W=A*A*(3-2*A);M.lerpVectors(C.current,M,W),D.lerpVectors(N.current,D,W)}if($.setLookAt(M.x,M.y,M.z,D.x,D.y,D.z,!1),P){E.current=!1,w.current=!0,m.current=0,h.current=0,i?.();return}a()}),null}var ls=require("react");var cb="ri:license-grant:v1",db={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},_p=new Map;function Mp(e){let t=atob(e);return Uint8Array.from(t,r=>r.charCodeAt(0)).buffer}function Sp(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return Mp(t.padEnd(Math.ceil(t.length/4)*4,"="))}function ub(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 Yl(e){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e.trim())),r=String.fromCharCode(...new Uint8Array(t));return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Kl(e,t){return`${cb}:${t}:${e}`}function pb(e,t){let r=_p.get(e);if(r)return r;let o=crypto.subtle.importKey("spki",Mp(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return _p.set(e,o),o}async function Cp(e,t,r){if(!globalThis.crypto?.subtle)return null;try{let[o,n,i,s,...l]=e.split("."),a=db[n];if(o!=="ri1"||!a||!i||!s||l.length>0)return null;let u=JSON.parse(new TextDecoder().decode(Sp(i)));if(!ub(u)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await pb(n,a),Sp(s),new TextEncoder().encode(`${o}.${n}.${i}`)))return null;let d=Math.floor(Date.now()/1e3),p=u.expiresAt-u.issuedAt;return u.licenseKeyHash!==t||u.domain!==r||u.expiresAt<=d||u.issuedAt>d+300||p<=0||p>43200?null:{environment:u.environment,tier:u.tier,expiresAt:u.expiresAt}}catch{return null}}async function Pp(e,t,r){try{let o=await Yl(t);return await Cp(e,o,r)?(localStorage.setItem(Kl(o,r),e),!0):!1}catch{return!1}}async function Ap(e,t){try{let r=await Yl(e),o=Kl(r,t),n=localStorage.getItem(o);if(!n)return null;let i=await Cp(n,r,t);return i||localStorage.removeItem(o),i}catch{return null}}async function ql(e,t){try{let r=await Yl(e);localStorage.removeItem(Kl(r,t))}catch{}}var mb=["localhost","127.0.0.1","0.0.0.0"],fb=e=>mb.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),hb="https://react-immersive.liveroom.dev/api/validate-license",gb=()=>typeof window<"u",bb=300*1e3,vb=5e3,Zl=new Map,Jl=new Map,_i=class extends Error{},xb=async(e,t,r)=>{let o=await Ap(e,t);return o?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:o.environment,tier:o.tier,isLocalDomain:r}):(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:r})},yb=e=>e==="development"||e==="production",wb=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&&!yb(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},_b=e=>{if(!e||typeof e!="object")return null;let t=e,r=t.reason??t.error;return typeof r=="string"&&r.trim()?r:null},Sb=(e,t)=>`${e}::${t}`,Mb=e=>{let t=Zl.get(e);return t?Date.now()-t.timestamp>bb?(Zl.delete(e),null):t.result:null},Cb=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),Pb=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function Ab(e,t,r){let o=Sb(e,t),n=Mb(o);if(n)return n;let i=Jl.get(o);if(i)return i;let s=(async()=>{try{return await Tb(e,t,r,o)}catch(l){if(l instanceof _i||l instanceof TypeError)return xb(e,t,r);throw l}})().finally(()=>{Jl.delete(o)});return Jl.set(o,s),s}async function Tb(e,t,r,o){let n=new AbortController,i=setTimeout(()=>n.abort(),vb),s;try{s=await fetch(hb,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:n.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(u){throw n.signal.aborted?new _i("License validation timed out"):u}finally{clearTimeout(i)}let l;try{l=await s.json()}catch{throw new _i(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new _i(`License server error (${s.status})`);let u=_b(l)??`License validation failed${s.status?` (${s.status})`:""}`;return await ql(e,t),Pb(u,r)}if(!wb(l))throw new _i("License server returned an unexpected payload");let a=Cb(l,r);return a.status==="valid"?(Zl.set(o,{result:a,timestamp:Date.now()}),l.offlineGrant&&(await Pp(l.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await ql(e,t),a}var cs=e=>{let[t,r]=(0,ls.useState)({status:"checking",isLocalDomain:!1});return(0,ls.useEffect)(()=>{if(!gb())return;let o=!1,n=u=>{o||r(u)},i=e.trim(),s=window.location.hostname.toLowerCase(),l=fb(s);return n({status:"checking",isLocalDomain:l}),i?((async()=>{try{n(await Ab(i,s,l))}catch(u){let f=u instanceof TypeError?"Could not reach license server":u instanceof Error?u.message:"License validation failed";n({status:"invalid",reason:f,isLocalDomain:l})}})(),()=>{o=!0}):(n({status:"invalid",reason:"No license key provided",isLocalDomain:l}),()=>{o=!0})},[e]),t};var Ht=require("react");var _n=require("react/jsx-runtime"),Eb={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},kb={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"},ds=({direction:e})=>{let t=Eb[e],r=kb[e];return(0,_n.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,_n.jsx)("polyline",{points:r,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,_n.jsx)("polyline",{points:r,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},Dr=16,Rb={"bottom-left":{bottom:Dr,left:Dr,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Dr,right:Dr,top:"auto",left:"auto",transform:"none"},"top-left":{top:Dr,left:Dr,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Dr,right:Dr,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:Dr,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},Nb=({controlsRef:e,enabled:t=!0,opacity:r=.9,moveSensitivity:o=.001,rotateSensitivity:n=.01,position:i="center-bottom"})=>{let s=(0,Ht.useRef)(null),[l,a]=(0,Ht.useState)({x:0,y:0}),u=(0,Ht.useRef)(!1),f=(0,Ht.useRef)({x:0,y:0}),d=(0,Ht.useRef)(),p=(0,Ht.useRef)(),v=(0,Ht.useRef)(null),x=(0,Ht.useRef)(0),_=()=>e.current,T=(H,G,k)=>{let $=Math.hypot(H,G);if($>k){let j=k/$;return{x:H*j,y:G*j}}return{x:H,y:G}},y=H=>{let k=Math.abs(H);return k<.12?0:Math.sign(H)*((k-.12)/(1-.12))},c=(0,Ht.useCallback)(()=>{let H=()=>{let{x:G,y:k}=f.current,$=y(G),j=y(k);if(t&&($!==0||j!==0)){let P=_();P&&P.rotate(-$*n,-j*n,!0)}d.current=requestAnimationFrame(H)};d.current=requestAnimationFrame(H)},[t,n]),m=(0,Ht.useCallback)(()=>{d.current&&cancelAnimationFrame(d.current)},[]),S=(0,Ht.useCallback)((H,G)=>{if(!s.current||!u.current)return;let k=s.current.getBoundingClientRect(),$=k.left+k.width/2,j=k.top+k.height/2,P=k.width/2-18,A=H-$,W=G-j,F=T(A,W,P);a(F),f.current={x:F.x/P,y:F.y/P}},[]),C=(0,Ht.useCallback)(H=>{if(!t)return;H.preventDefault(),H.stopPropagation(),u.current=!0,c();let G="touches"in H?H.touches[0]:H;S(G.clientX,G.clientY)},[t,c,S]),N=(0,Ht.useCallback)(H=>{if(!u.current)return;H.preventDefault();let G="touches"in H?H.touches[0]:H;S(G.clientX,G.clientY)},[S]),E=(0,Ht.useCallback)(()=>{u.current=!1,a({x:0,y:0}),f.current={x:0,y:0},m()},[m]),h=o*10,w=(0,Ht.useCallback)(H=>{t&&_()?.forward(H*h,!0)},[t,h]),g=(0,Ht.useCallback)(H=>{t&&_()?.truck(H*h,0,!0)},[t,h]),M=(0,Ht.useCallback)((H,G,k)=>{if(!t)return;p.current&&cancelAnimationFrame(p.current),v.current={control:H,amount:G,action:k},x.current=0,k(G);let $=j=>{if(!v.current)return;if(x.current===0){x.current=j,p.current=requestAnimationFrame($);return}if(j-x.current>200){let{amount:A,action:W}=v.current;W(A),x.current=j}p.current=requestAnimationFrame($)};p.current=requestAnimationFrame($)},[t]),D=(0,Ht.useCallback)(H=>{v.current?.control===H&&(p.current&&(cancelAnimationFrame(p.current),p.current=void 0),v.current=null,x.current=0)},[]);return(0,Ht.useEffect)(()=>(window.addEventListener("mousemove",N),window.addEventListener("mouseup",E),window.addEventListener("touchmove",N,{passive:!1}),window.addEventListener("touchend",E),window.addEventListener("touchcancel",E),()=>{window.removeEventListener("mousemove",N),window.removeEventListener("mouseup",E),window.removeEventListener("touchmove",N),window.removeEventListener("touchend",E),window.removeEventListener("touchcancel",E),m(),p.current&&cancelAnimationFrame(p.current)}),[N,E,m]),t?(0,_n.jsx)("div",{className:"mc__wrapper",style:{opacity:r,...Rb[i]},children:(0,_n.jsxs)("div",{className:"mc__dpad",children:[(0,_n.jsx)("button",{"aria-label":"Move forward",className:"mc__arrow mc__arrow--up",onMouseDown:()=>M("up",1,w),onMouseUp:()=>D("up"),onMouseLeave:()=>D("up"),onTouchStart:H=>{H.preventDefault(),M("up",1,w)},onTouchEnd:()=>D("up"),onTouchCancel:()=>D("up"),children:(0,_n.jsx)(ds,{direction:"up"})}),(0,_n.jsxs)("div",{className:"mc__middle-row",children:[(0,_n.jsx)("button",{"aria-label":"Move left",className:"mc__arrow mc__arrow--left",onMouseDown:()=>M("left",-1,g),onMouseUp:()=>D("left"),onMouseLeave:()=>D("left"),onTouchStart:H=>{H.preventDefault(),M("left",-1,g)},onTouchEnd:()=>D("left"),onTouchCancel:()=>D("left"),children:(0,_n.jsx)(ds,{direction:"left"})}),(0,_n.jsx)("div",{ref:s,className:"mc__joystick",onMouseDown:C,onTouchStart:C,children:(0,_n.jsx)("div",{className:"mc__knob",style:{transform:`translate(${l.x}px, ${l.y}px)`}})}),(0,_n.jsx)("button",{"aria-label":"Move right",className:"mc__arrow mc__arrow--right",onMouseDown:()=>M("right",1,g),onMouseUp:()=>D("right"),onMouseLeave:()=>D("right"),onTouchStart:H=>{H.preventDefault(),M("right",1,g)},onTouchEnd:()=>D("right"),onTouchCancel:()=>D("right"),children:(0,_n.jsx)(ds,{direction:"right"})})]}),(0,_n.jsx)("button",{"aria-label":"Move backward",className:"mc__arrow mc__arrow--down",onMouseDown:()=>M("down",-1,w),onMouseUp:()=>D("down"),onMouseLeave:()=>D("down"),onTouchStart:H=>{H.preventDefault(),M("down",-1,w)},onTouchEnd:()=>D("down"),onTouchCancel:()=>D("down"),children:(0,_n.jsx)(ds,{direction:"down"})})]})}):null},Tp=Nb;var Ep=require("react-colorful"),qr=require("react/jsx-runtime"),Ql=({colorPicker:e,onClose:t,itemMaterials:r,setItemMaterials:o,inline:n=!1})=>(0,qr.jsxs)("div",{className:`ri-popover${n?" ri-popover--inline":""}`,style:n?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:i=>i.stopPropagation(),children:[(0,qr.jsx)("p",{className:"ri-popoverLabel",children:"Color"}),(0,qr.jsx)(Ep.HexColorPicker,{color:r[e.objectId]?.hex??"#ffffff",onChange:i=>o(s=>({...s,[e.objectId]:{...s[e.objectId],hex:i}}))}),(0,qr.jsxs)("div",{className:"ri-inlineRow",children:[(0,qr.jsx)("span",{className:"ri-colorCode",children:r[e.objectId]?.hex??"#ffffff"}),(0,qr.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:"Done"})]})]});var Nn=require("react/jsx-runtime"),ec=({materialPopup:e,textureUrl:t,triggerFileUpload:r,clearTexture:o,inline:n=!1})=>(0,Nn.jsxs)("div",{className:`ri-popover${n?" ri-popover--inline":""}`,style:n?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:i=>i.stopPropagation(),children:[(0,Nn.jsx)("div",{className:"ri-popoverHeader",children:(0,Nn.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:"Material"})}),(0,Nn.jsxs)("div",{className:"ri-materialBody",children:[t?(0,Nn.jsx)("div",{className:"ri-previewFrame",children:(0,Nn.jsx)("img",{src:t,alt:"texture preview",className:"ri-previewImage"})}):(0,Nn.jsxs)("div",{className:"ri-emptyState",children:[(0,Nn.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,Nn.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,Nn.jsx)("span",{style:{fontSize:12},children:"No texture applied"})]}),(0,Nn.jsx)("button",{onClick:()=>r(e.objectId),className:"ri-uploadButton",children:t?"Replace image":"Upload image"}),t&&(0,Nn.jsx)("button",{onClick:()=>o(e.objectId),className:"ri-removeButton",children:"Remove texture"}),(0,Nn.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"})]})]});var Zn=require("react");var lt=require("react/jsx-runtime");function kp({entries:e}){return(0,lt.jsx)(lt.Fragment,{children:e.map(([t,r])=>{let o=r!==null&&typeof r=="object",n=o?Object.entries(r):[];return o&&n.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)(kp,{entries:n})})]},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 r}`,children:o?Array.isArray(r)?"[]":"{}":String(r)})]},t)})})}function Bb({content:e}){let t=e!=null,[r,o]=(0,Zn.useState)(t),[n,i]=(0,Zn.useState)(t),s=(0,Zn.useRef)(e);return t&&(s.current=e),(0,Zn.useEffect)(()=>{if(t){o(!0);return}if(r){i(!1);let l=setTimeout(()=>o(!1),300);return()=>clearTimeout(l)}},[t,r]),(0,Zn.useEffect)(()=>{if(r&&t){let l=requestAnimationFrame(()=>i(!0));return()=>cancelAnimationFrame(l)}},[r,t]),r?(0,lt.jsx)("div",{className:`left-panel__action-extra${n?" left-panel__action-extra--open":""}`,children:(0,lt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??s.current})}):null}function tc({isOpen:e,selectedObject:t,currentAction:r,onClose:o,onAction:n,renderActionExtra:i}){let[s,l]=(0,Zn.useState)(t);(0,Zn.useEffect)(()=>{t&&l(t)},[t]);let a=t??s,u=a?Object.entries(a).filter(([f])=>f!=="actions"):[];return(0,lt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:a&&(0,lt.jsxs)(lt.Fragment,{children:[(0,lt.jsxs)("div",{className:"left-panel__header",children:[(0,lt.jsx)("p",{className:"left-panel__title",children:a.label}),(0,lt.jsx)("button",{onClick:o,className:"left-panel__close-btn","aria-label":"Close panel",children:"\u2715"})]}),u.length>0&&(0,lt.jsx)("div",{className:"left-panel__data",children:(0,lt.jsx)(kp,{entries:u})}),(0,lt.jsx)("hr",{className:"left-panel__divider"}),a.actions&&a.actions.length>0&&(0,lt.jsxs)(lt.Fragment,{children:[(0,lt.jsx)("div",{className:"left-panel__actions-label",children:"Actions"}),(0,lt.jsx)("div",{className:"left-panel__actions-list",children:a.actions.map((f,d)=>{let p=r?.action.id===f.id&&(r.binding===a||r.binding?.id===a.id||r.binding?.modelObjectId===a.modelObjectId||r.objectId===a.id||r.objectId===a.modelObjectId),v=i?.(f.id);return(0,lt.jsxs)(Zn.Fragment,{children:[(0,lt.jsx)("button",{onClick:x=>n({objectId:a.modelObjectId||a.id||"",action:f,binding:a,screenX:x.clientX,screenY:x.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${f.id}`,p?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":f.id,"data-label":f.label,children:f.label}),(0,lt.jsx)(Bb,{content:v})]},d)})})]})]})})}var Ko=require("react"),Bp=require("lucide-react");var Rp=require("react");var An=require("react/jsx-runtime");function Np({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:r,title:o,searchValue:n,onSearchChange:i,searchPlaceholder:s,children:l,isOpen:a,onToggle:u,openButtonIcon:f,closeButtonIcon:d,closeButtonAriaLabel:p}){let[v,x]=(0,Rp.useState)(!1),_=a!==void 0?a:v,T=y=>{a===void 0&&x(y),u?.(y)};return(0,An.jsxs)("div",{className:`ri-sidepanel-wrap ${_?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!_&&(0,An.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>T(!0),"aria-label":t,title:"Open panel",children:[f,e?(0,An.jsx)("span",{children:e}):null]}),(0,An.jsxs)("div",{className:`ri-sidepanel ${_?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!_,children:[(0,An.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,An.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,An.jsx)("span",{className:"ri-sidepanel__eyebrow",children:r}),(0,An.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>T(!1),"aria-label":p,title:"Close",children:d??(0,An.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,An.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,An.jsx)("p",{className:"ri-sidepanel__title",children:o})]}),(0,An.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,An.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:s,value:n,onChange:y=>i(y.target.value)})}),(0,An.jsx)("div",{className:"ri-sidepanel__list",children:l})]})]})}var Cr=require("react/jsx-runtime");function nc({objectBindings:e,onAction:t,onFocus:r,onHover:o,isOpen:n,onToggle:i}){let[s,l]=(0,Ko.useState)(null),[a,u]=(0,Ko.useState)(""),f=(0,Ko.useMemo)(()=>Object.entries(e).filter(([d,p])=>{let v=a.toLowerCase();return d.toLowerCase().includes(v)||(p.label??"").toLowerCase().includes(v)}),[e,a]);return(0,Cr.jsx)(Np,{openButtonLabel:"",openButtonAriaLabel:"Open scene objects panel",openButtonIcon:(0,Cr.jsx)(Bp.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:"SCENE OBJECTS",title:`${f.length} visible entries`,searchValue:a,onSearchChange:u,searchPlaceholder:"Search nodes, labels",isOpen:n,onToggle:i,closeButtonAriaLabel:"Close scene objects panel",children:f.map(([d,p])=>{let v=p.visible!==!1,x=s===d;return(0,Cr.jsxs)("div",{onClick:()=>r(p),onMouseEnter:()=>{l(d),o?.(p)},onMouseLeave:()=>{l(null),o?.(null)},className:`ri-sidepanel__row${x?" ri-sidepanel__row--hovered":""}`,children:[(0,Cr.jsx)("span",{className:`ri-sidepanel__label${x?" ri-sidepanel__label--hovered":""}`,children:p.label??d}),(0,Cr.jsx)("button",{type:"button",onClick:_=>{_.stopPropagation(),t?.({objectId:d,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:p})},className:"ri-sidepanel__vis-btn",title:v?"Hide":"Show",children:(0,Cr.jsx)("span",{className:`ri-sidepanel__checkbox${v?" ri-sidepanel__checkbox--checked":""}`,children:v&&(0,Cr.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,Cr.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},d)})})}var Me=require("lucide-react");var us=require("react"),rc=(0,us.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var Qn=()=>(0,us.useContext)(rc);var qo=require("react/jsx-runtime");function ao({visible:e,message:t,tone:r="default",spinner:o=!0}){return e?(0,qo.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[o&&(0,qo.jsx)("span",{className:"bb-loadingSpinner","aria-hidden":"true"}),(0,qo.jsx)("span",{className:`bb-loadingMessage bb-status--${r}`,children:t})]}):null}var ic=new WeakSet;function so(e){ic.add(e)}function Lp(e){let t=ic.has(e);return t&&ic.delete(e),t}var Te=require("react"),gs=require("@react-three/fiber"),bs=require("@react-three/drei"),qe=require("three");var Op="data:image/png;base64,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";var Dp="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAACXBIWXMAAC4gAAAuIAHVHB4bAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAIABJREFUeJzt3Xd4HOXVBfBzZ1eSe6djYqoNwloZDJgaJ0AgIZ2IAJINIcS00D5CCASCCaQBAULHAWIsyQYEhEAILQ6mmRI3ych0MGCae5VVdud+f0gQbFyk3Zm5U87veXgSZM3MAaSZszPzvq+AiBJD761IYVjxN+DK4RDZFnBbAXkb6jwk5ZNmW+cjouCIdQAiCobWj9kPcO8ApHQj3/IYnOw4GX73B4EGIyITLABECaD1Y74O6CMAum3mWxchp6Nlr9p5QeQiIjssAEQxp40VA5AteQPAwE5u8jbWtAyXA+rW+pmLiGw51gGIyGe5bmej8xd/ANgZPYpP9ysOEYUDCwBR3Kn+sMvbiHOcD0mIKERYAIhiTBUCYGgeW5Z2bEtEMcUCQBRnDWN6ACjKY8tuHdsSUUyxABDFWbo5/0/xhWxLRKHHAkBERJRALABEREQJxAJARESUQCwARERECcQCQERElEAsAERERAnEAkBERJRALABEREQJxAJARESUQCwARERECcQCQERElEAsAERERAnEAkBERJRALABEREQJxAJARESUQCwARERECcQCQERElEAsAERERAnEAkBERJRALABEREQJxAJARESUQCwARERECcQCQERElEAsAERERAmUtg5A9rSxohjZ4uMAORaCDFRKIPo2VP8NOH+VTPW71hmJqGu04fidoHIyRA6Dys4QbYFiDoC7kW65W0rrWq0zki2xDkC2dO6xg6Hp+6HYZyPf0gLgtyir+YMINMhsVDhtrOiFbMmqvDZOt/SW0rrVHkcin6lCUF91MQS/BlCy4e+SlwH3aMnULgg0HIUKHwEkmDZWDICbfnITF3+g/QTyOzRU3hxULiIqQH3VrRD8Fhu9+AOA7gvIE9pwfP/AclHosAAkWVvJ1QCGdu6b5VSdU3mSr3mIqCA6p/IkCMZ18tt3hzpX+hqIQo0FIKG0vnJ7CMZ2aSNxrtJXxw70KRIRFUAbju8PkT91cbOTdO6xg30JRKHHApBYcjSAVNe20QFo1Yt9iUNEhdHUbwAM6uJWDnKp7/sRh8KPBSC5hue3mZ6h9VWdfGxAREFo/53UM/La2JFSj+NQRLAAJJYW57lhEQR/9jQKERWm/XeyKK9tXeR7LqCIYwFIKpH5eW+rOErrq470LgwR5UvrKw+F4qgC9jDfszAUKSwASaV4ssAdXK1PjeZEUkSGOn4H/1LYTjDVmzQUNSwACSWZmmcBmVnAHkoxcPAp3iUioi4bOPgUoJBn+DJTRtQ+710gihIWgCRz3bOBAmb3U72cwwKJbGjD8f2hOr6gnQjO8yYNRRELQILJiNrnIagrYBf9OSyQyIg6l6Lrw/6+QO6RsuqnPctDkcMCkHSq5wFYU8AOfq5zTuAwIqIAdQzFPb2AXaxFLneBV3komlgAEq5jMZCrC9hFGk6uq7OPEVFhrkG+w/7aXSl7TX7PqzAUTSwABKxp+ROA/E8GHBZIFBitrzwUwLcK2MUCQK7yKg9FFwsAQQ6oWwvgwgJ3c43OGFfIJxIi2gy9tyIFyHWF7UXOl0x1AY/9KC5YAAgAIJmaKQCeKWAXu6N4bWdXISOifAwrOQ3Annlvr5iOsup7vAtEUcYCQP+jzjkAcvlvz2GBRH5pH/aHSwvYhYuUnC1SwNBfihUWAPqclE+aDeBvBeyCwwKJ/FL4sL87ZHj1DM/yUOSxANB65NcAVuS/PYcFhsrCRc0A3Dy2zHVsSyGgDccNQ2HD/lYhnfqNV3koHlgAaB2SqV4I1csL2AWHBYaIfG1aFsBHeWz6Xse2FAaayn+1PwBQjJfSiZ94F4jigAWAvizb83oAr+e9PYcFhs3jeWzzsOcpKC8FD/tTvIWe/W/yLhHFBQsAfYmMnNAGt+A5wjksMDyuAtCVT/NrkXau8SsMdZ4nw/4cOVt2vaHFo0gUIywAtEEyouYRAI8WsAsOCwwJydS8DnT67XGF6jgpnfS+n5mokwof9veklFX/y7tAFCcsALRxaZwFoDXv7TksMDQkU/N7iFwAoG0T37YMqkdLeW1NULlo4zwY9tcGwZmeBaLYYQGgjZLSmregKOTZIYcFhoiUVV8J1y0F9HoI5qF9EajFAF4E5CKIu7OU1/7dOCZ9ptBhf4IbOu7+EG2QWAegcNMXK/ugu7wOYOs8d5GFpsql/K5GL3MRxZk2HDcMmmpA/m/+L4SbHiojJi73MhfFC+8A0CbJqNqVECnkNiSHBRJ1VaHD/kQv5sWfNocFgDZv+M63A8h/BjEOCyTqNA9W+5uD11rv9CoPxRcLAG2WyHgXrp4DFDSHOIcFEm2GPjU6XfCwP5Fz5Ji6/Nf0oMRgAaBOkRG1z0NQV8Audkdx0ymeBSKKo/7bFTbsD3KPlFU/7VkeijUWAOo81fPQ/uZ4ntvjtxwWSLRh2nB8f4gUMl//WuRyF3gWiGKPBYA6TTK1CwBcXcAuOCyQaGMKXu0PV8pek9/zKg7FHwsAdc2alj8BKOAkw9UCidbnwWp/CwC5yqs8lAwsANQlckDdWgAXFrALDgskWl+hw/4g50umOv/Hc5RInAiI8qL1VU8DOKSAXXxTMjWPeZWHKKrah/3Jv/PfAaYjU3OQSEGjdCiBeAeA8qPOOQAKGWrEYYGUeB4M+3ORkrN58ad8sABQXqR80mwAfytgFxwWSFT4sL87ZHh1/pN0UaKxAFAB5NcAVuS9OYcFUoJ5MOxvFdKpQranhGMBoLxJpnohgCsK2EV/tLqXeJWHKFJUxqOQYX+ql0npxE88y0OJwwJAhUm3XA+gkCVHz+CwQEqa9mF/clr+O8Bb6DngRg8jUQKxAFBBpLSuFS7OK2AXHBZIyVPosD9HzpZdb2jxLhAlEYcBkie0vupfAL6Z9w7EOVzKJuU/FIooInRu1eFw8UQBu3hUMjWFrBZIBIB3AMgrkvs/AG15b6/upd6FIQoxVy8rYOu2jt81ooLxDgB5RudUXQPBuflujnR6W77UlB+dUdEX3Uu2QFYGQjAQLgZC3IFQDIRICRR9AQCCEgA9OjbrjfbS1tzx9yugcCHIQbES0CY4zhIolsDRJci6i5B2l6ClzxIZOaEp+H/K6NNZx26LVPrDvHcguEbKagp55Eb0ubR1AIoRTf8Wkq0CsEUeWwvaWncHwAKwAfpiZR+UYChSzhCoDgEwBMCOX/jfbsgCgAKKjmov/6v4na3663y/ANoxv4wLwHEA1wGKmqD1VcsAzIdgPlzMh8h8AO8CeBfp5jektK61gH/c+EoX7wF18916EXLpy72MQ8nGAkCekRETl2vDmIuhelt+OxA+ksJnnxKL9gZ0bwB7QFAKxTAAzucXZHv9AfSHYkR7WfhCrmxJVuur3gdkHqAzIdII15mHzF3zEj9jnZtzIHneeBW5WEZMXO5tIEoyFgDy1mvNd2BoyWkAyvPYupDhhJGkr44diJbc/nCcA6F6IIC9AfRY54IavUtmGsBOgO4E4NtQBSQHNFQt03q8AOh0uPI8cj1eTtyjBFdfRyqvAjAHrzXf4XUcSja+A0Ce04bjD4E6T3dxs5ckUzPKl0AhonOP2wpu6ggABwM4EMAwJPf3MAvBbCimQ/VpNGOqjKpdaR3Kb9pQ9TIU+3RpI3G/KmWTn/EpEiVUUk885DOtr5oI4ITOfjugh0umdqqPkUzovRUpDCsqB5zDoPgOgP3B0TcbkwNkDqD/hLgPY/jkWXF8ZJDHMMC7JFNzol95KLlYAMgXWj+mJ6AvolMLnchFkqn+g++hAqKNFb2QLfkOgB8AOAztz8up6z4C8ChEHkBr9ydl5IT8h5mGTMe7Mp15oa8BkAMkU73G91CUOCwA5BttOL4/1KkBsJFJS2QpgDMkU313kLn8oO+e2A0rc4cDbgUgPwDQyzpTzCwH9GHAqUNb98fiUAa0vuo4QG4EdMAGv0HwCHLpKr74R35hASBfqUJQX3k4HDkVigyAAYC8DXWnQpw/dywoFEl6b0UKQ7t9C9DjAXwHQE/rTAmxGIoHIKiRTM2z1mEKofVjtgT0fABfB7ATgKUQ1ENwC/as+XccH4FQeLAAEHWRzhm7HRy3CorTAHzFOk/CvQHBnVD5W5TLJJEFFgCiTmh/ma/716DuOLQ/2+cQ2nBpBeQJCCbhteYH5Ji6nHUgorBjASDaBG2sGIBst1MgeiYU21jnoU5QvAXRa9HWc2Li5hkg6gIWAKIN0PoxOwLuOYD8FHy2H1UrAL0LwFWSqV1gHYYobFgAiL5A6ytHAfILAN8HkLLOQ55ogUgtsu6fZa/aedZhiMKCBYAIgM4dWwbXvRhAhXUW8o0L4H4Al0imJnHTThOtjwWAEk3rx+wJ6G8A/Aj8fUiK9iLgur+WEZPftA5DZIUnPEoknTtmd7h6GXjhT7I2AHch7VwupZPetw5DFDSe+ChR2mcnlPGAnA4O5aN2rYDeipKSi2XYnauswxAFhQWAEkGfGp3GwMEnQfUKAFtY56FQ+ggil2H4zreLjHetwxD5jQWAYk/rKw8F5FoAw62zUBTITKicI+WTnrNOQuQnFgCKLZ0zdjvAvRGC71tnochRqN6FotbzpLRuqXUYIj+wAFDsqELQUDWm/VP/RlZaI+qchQDOl0zNJOsgRF5jAaBY0bkn7Aw3NwHtq6sReeVfSDuncbQAxQkLAMWCPjU6jQHbXQDIxQC6WeehWFoFwUUYXnMTl+mlOGABoMjT2ScOgZOtBnCQdZZQSfcGUr06/uoGON3bv+4UAVLc/v+1FWj5BGh6B+A1rbOmQp0TpHzSh9ZBiArBAkCRpg1jKqA6AUA/6yyBcoqBkm2A4i2A4i2gRYOAokFA8ZZAug+Q7oUu/XpnV0AWPQIseQJQjoDrhOWAnCaZ6rutgxDliwWAIklnVPRFuuQmCCqts/gu3RfosRPQbQdoyfZA98FA8daAON4fa/U8yHvXAW6z9/uOJa1GuvV0Ka1bbZ2EqKtYAChytL7qYEBqAR1sncV7AnTbDui5G7T7rkDPXds/1Qdp5WzIe9cGe8xoewPAcZKpmWUdhKgrWAAoUrRhzDio3gigyDqLZ9K9gV7Dob2GA73L2v/emLx/PbBihnWMKGkB8HPJ1NxuHYSos1gAKBJ0ekV39Ci+GSInWmfxRMnWQN/9oL3L22/vh+1XcVU9ZP6frVNEkFZjTespckDdWuskRJsTsrMO0ZdpY9UuyOIBRH0q3+ItgH6joH32Bbp/xTrNpuWaIPNOtU4RVbPgpo+WERPnWwch2hQWAAo1nVP5bYjUAOhrnSUvTkn7Rb//V4Eeu1in6RJ55SeA5qxjRNUiuDhGRtRMsw5CtDEsABRaHc/7b0IUl+3tPgTafzTQb38g1d06TdfxDoAXslD8XMprbrMOQrQhLAAUOh1z+V8K4FLrLF0iDtB3H+jAI4EeO1unKQxHAnhIr0dZ7TmcPZDChgWAQkXrx/QE3FpAvmedpdOcbsCAQ6ADj2h/zh8DMv/PwKp66xhxUoc+6bGy40ROsEChwQJAoaGNJ26NXPYhKPaxztIpqR7tF/1B3wBSPa3TeGf5S5APbrJOEUdPI93yQy4vTGHBAkChoI1jd0CbOxWC8L8p53QDBn0DOujI9nn242Tl7PaLv9tqnSSuXoU6h3MdAQoDFgAyp/VjdgR0KoAdrbNskqSBQYdDB307FJP1eKp1IWTRw8DSZ8BFgXz3LsQ9TMomv2MdhJKNBYBM6dwxu8PVfwPY1jrLJvXZG7rNccFPy5sPtxVoWwJkVwG51UB2NZBbBcmtaf9zzQJuS/v/z64AWhcCzQvs8ibT+3Ddw2TE5Detg1BysQCQGa2v2gvA4wAGWWfZqG6DodscD/QqtU6yLs21L+Pb/AGk5QOgdVHHX4vbL+oUBZ/Ccb4hwyc1WAehZGIBIBNaXzkKkMcQ1gl+nG7QrX4EDDzMn1X3uqp1IbDmDUjTm8Dad9s/sWvWOhUVbknHOwGzrYNQ8rAAUOD0laoMcvIfQAdYZ9mg3hnoticAxYY3JtqWAqsaIKtfAZreANqW22Uhvy2GpkZL+V2N1kEoWVgAKFBaXzUUwNMAtrLO8iXp3tCtjwf6H2hwcAWa3oasnNU+/r75A4MMZGghgEMkU/O6dRBKDhYACkzHoj5PI4wv/PUZAd3up0C6T7DHXfsuZMVLwPKX2l/cowSTD+CmDuEiQhSUyBQAnXvcVlDpiVzxUhkxkfdDI0bnHjsYbuoZQIYYR1mXUwzd+jhg4NcR2K9DdiWw7FnIsqfbX+Qj+oziLbjZr8ped39kHYW6RuvHbAnJ9UJr2xIZWReJN3FDXQD0xco+6I5fATIWwHYdX3YBNEDkFnTvd5fsekOLYUTqBJ1x3CAUpaYD2NU6yzq6fwU6+DSgJIgbEgqsngdZNg1YMZMv8NGmvIK2loOichFJMn3zzBKsXfYzqJwB6LAv/NFciNyGJR/cJl+bFtpf9tAWAJ1VuQdSzmOADt7Et70NwS+krObBwIJRl+i7J3bDiuxUCA6wzrKOgV+HblPVPrmPnzQLLH8RsvhRPtenzhNMQ/f+R/IDTnhpQ9X3obgawKZW/pqBNnxXRtZ8HFSurghlAdBXxw5EmzsXim06uclUiJ4rZbVzfQ1GXdK+qt+YGkCPt87yOSlqf8N/wCH+HsdtBpZMhSx5Amhb5u+xKK6moKymkqsIhos2VA6HyrUADu3kJq9jre4ro2pX+pkrH+EsAPVjJgD6sy5ulgXwVxQ7l8juk/g2VQhofdWVAM63zvG5ooHQHX7u71K9mm1/vv/pA5yQh7wwXjI1l1mHoI4Ppq3u5QB+BqCrtw5vlkzNGT7EKkjoCoA2nrg1stn3ABTnuYtlAC5DW4+bZeSENg+jURdofdXJAP5qneNzPYdBdzjTvzn8NQssndY+nz4/8ZN3FNCfSKb2LusgSaUzxhWhqOl0AJcC6J/nblZhTctWckDdWg+jFSwEU5ytp63tMOR/8Qfa/wNdh6KmV3RO5bc9SkVdoHOrDgdwi3WOz/XdF7rj+f5d/Fc3Qt66BPLRJF78yWsCyAStrzrYOkgSacPYw1DUNAvAdcj/4g8AvdG9eC+PYnkmfAXAkd082tNuEHlYG6r+2TH5DAVAG8fuABeT0fVbZP4YdAR0hzMAKfJ+3y2fQN67FvLun4Bmru5KvikGUKdzxm632e8kT2h91VBtqPon1H0SwJ6e7DQlQzzZj4fCVwDU44nXFUcBmKtzqq7R2Sf283TftA5998RuyLr3IwyL+0gKut3J0G0q4fmTLm2DfHof5M0LgZWcwp0CsRXEvU/fPLPEOkic6ewT++mcqmsAzO24dsRa+AoA9A0fdloEwblwsm/onKpT9N6KlA/HoFW5mwCMtI4BSUMHn+HPm/5Nb0LevARY+FD7inxEwRmFpmXXWIeII723IqVzqk6Bk30DgnMBeH/L0HVDt/Rz+ApAsfMIAL/Gvm4Bwa0YWjJX66uO9OkYiaT1ladD9STrHHCKoV85B+jrcQ9xWyEfTYK8fQXQwknayMzpOqfS/vcsRnR21WjsVjITglsBbOHTYRbgjbaZPu07b6EbBQAAOqfqmo4W5jP5JyR3tpRNfsf/Y8WXzjl+X4jzLAp7ebNwTkn7xb9Xqbf7bV4A+eAWTuRDYbEWKewve9bUWweJso7pyX8HyBj/D6Y/lfLaO30/TheFswDMGNcDRU2PAzgogMM1A3ot0q2/l9K61QEcL1a0fkxPQGcB8Orlzfw43aA7/hLosYuHO1Vg0b8gn97PqXspXATz0NpjHxk5ock6StRoY0UvZIsvAuRcAN0COOTtKKsZF8YJncL3CACAjJzQhHTLNwH5K+D7v7RugFyIXMkbWl95gur4UP47CS3VG2B+8S+GDvk/by/+udWQ+VdDPrmHF38KH8UeSK+50jpGlKiOd7S+8gTkSt4A5EL4f/FfDdWzwnrxB0J6B+CLdHblPnDwF0D2D+aIMhMq50j5pOeCOV506ZwxP4To/aYhJA3d4SygT7l3+1z7HuT964HWRd7tk8h7CuD7kql5yDpI2Onsyn0gcl1Aa5IogPuQdn4hpZPeD+B4eQt9AQA+m1O+agyAPwHYOpijyj/hps7k2twbpnPGbgdx6wEMNAshDnTw6UDffb3b5/LpkA/vBNxW7/ZJ5J9FaEMmrIvNWGs/T+X+AEgVgrnezYI6Z0flA2QkCsBnOp43nw/gVwCCGA/bBMUNKGq5gu8H/I/qeAcNbz0J4OumObY72cOhfgr55F5g0SMe7Y8oMI+hrOZbYb3NbEGnV3RHr5KzoPg1AJ+mAF3HEgCX4/WWG+WYusiMD45UAfiMNlbtgix+D6AioEN+COAilNVU85cM0IYxZ0D1RtMQW30fuuUPvdmXZiELbgeWT/dmf0SBk5MlU32HdYow0Pox3wHc6wEZEsDh2gC9BW2tv5GRdZFb/SuSBeAzWl95KCDXwaupGjdLXobIOVI26YVgjhc+OuvYbZFKzwPQ1yxEv1HQwafBkx/f3GrIe9cDa14rfF9EdlZAnVIpn5TYOam1vmovtM/ZH9S6CVMBOUcy1a8EdDzPRboAAIA+NTqNgYNPgurvEMwUtApoDdJFv5TSiZ8EcLxQ0fqqfwD4rlmAnkOhO14AiAdLDWRXdMzjv6DwfRHZu18yNT+yDhE0nXHcIBQ5lwByBoAgZnl9GyIXSll1XQDH8lXkC8BntLFiALLFlwb4Q7AGwNXok/6j7DixOYDjmdOGyuOhUmsWoGggdJfferOqX9uS9ot/S+I6HMWZytFSXv2AdYwgfL5Mr+C3UPQJ4JBNAK6K0zk/NgXgMzp3zO5w3WsBOSKgQ74P4BLJ1EwK6Hgm9NWxA9HqzgOwpUkAKYLufDHQfcfC99W6GPLuH4HWhYXviyhcPoG4e0jZ5FivS93+nF+vBbBzEIdDRIb1dVXsCsBnOn5A/gLAgytGZ8hTcOQcGT6pIZjjBUvrqyYCOMHs+Nv/DOjvwaO91oWQd34HtMX6/EhJJrhNympOtY7hB204bhg0dQ2AbwZ0yEgN6+uq2BYAANDGimJkS04DcDmCGQriAloLOL+QTHVsPl5qw/F7Q52XYTVz5MBDodt60D3alkHeuYIT/FDcuRB3XymbHLrFZ/L1hUe8pwPw4AWgzYrksL6uinUB+IzWV24POH8C9DgE88+8DILfYHjNTVEfNtgxCdOzAA40CdD9K9CdLy38pb/sCsg7vwdaOF8KJcLzKKs5OPrnn/EO6t88AyKXAegfwCHbILgBrS2/jeKwvq5KRAH4jM6tOgAu/oKg1qxXPIie/Y+VXW/wa3lj3+mcMWMgavN+g1Pc/tJfybaF7Se3tv22f3OsHt8RbZrIMVF+U11nVPRFUcn9AA4N6IiPQ9xzpGxKYsYEJ2rhGxleMx1lu+wH1Z8C8P/1b8H3sWZZZCfn0BnjekD0CrPjb31c4Rd/zUE+uJEXf0oexZ91xrge1jHyoU+NTqOo5CEEcfFXvAXIdyVTe2SSLv5AwgoAAIiMd6W89k6s1aEArgLg76TvgkqdXXWUr8fwS3rNhQB2MDl27wwwsPCZhuXjGmDVXA8CEUWNDkbx2v+zTpGXAdufAcCreb43ZjVUL0TP/ntKpvphn48VSol6BLAhAU0r/B/J1AR0G8sbHTP+vQWge+AHT/eG7vrHwsf7L/pn+/z+RMm1GpCdo/RScsd7R28B2MmvQyCmw/q6KnF3ANYnpTVvSabmGEAPA+DXlI6jtbGil0/79oeTuggWF38Auk1l4Rf/1a9APr3Pm0BE0dULohdYh+iSOcfvAv8u/rOgziGSqTkm6Rd/gAXgc5KpnYq2HnsBOAeA14PEHWS7DfF4n77RxrE7QORkk4P3zgD9Clyyu3Ux5P2bAXW9yUQUZYrT20dCRYSTGuzDXj8F5GSU7bJPXMf054MF4Atk5IQ2ydT8BW253SC4DYB34z/Vic5wnKz7GwSz3PK6nBLotmML24e2Qd6/Hshx9WaiDt2g+JV1iE5z1MtpdtsguAZtLUMlU32HyHh+KviCxL8DsCkeTivchj7pPlGYP7rjnYh5AIoCP/Y2VcCgbxS0D1nwV2DZsx4lIoqNNkCGSqb6Xesgm6OvndQbLa3LUPiaLlOhqbOl/K5GL3LFEe8AbIIMr35VMrVHAvJdAIX84jwWhYs/ACCHS2Fw8Ue37YCBBb4nueK/vPgTbVgRoBdZh+gMGXbnKgBP5r0DxVsQOUYyNYfx4r9pLACdIJnqh7GmpRQil6B9FcCuaIW6ZmPpu0LnnrAzFMeZHHubSkAKKPxtSyEf/s27QETxc6I2jrUZ1ttV4v4B6PIshv8b1hfhCZCCxALQSXJA3Vopq74C0GGATEZnfzgVZ0n55Jf9TeeRXPZcBLOU8rr6jgR67VnADhSyYAKf+xNtWhpt7jnWITpDyiY/A8G1nfx2BbQauexQKa/9Y5RnXg0a3wHIUyemFV4FkZ9GpYm2L7ZR8j6AnoEeWNLQ3f4IFBewyvDixyAfT/YuE1F8rYKb3kFGTFxuHWRzVCGorzoXgj9h4wsAzYA4Z0nZpBeCzBYXQayqFEsyvGa6KvZFQ9VBUFRBkEH7uPn3AEyFuJMitSZ3rtvpgAZ78QfaX/or5OLfuhjy6f3e5SGKt95IZU8B8CfrIJvTvpBRzTVaX3kvICcDOgoig6FYDKAR6kxGZtLzUV/wyBLvABD0zTNLsHbZu1BsE+iBnW7QoVcD6T5570LmX8Wpfom65iOkW3aU0jp/p0Gn0OM7AAQ0LRsT+MUfAAYdUdDFH8ue48WfqOu2RbbY5GVfChcWAAKAMwM/YqoHdFAB0yu4zZBP7vEuD1GiyNnWCcgeC0DCaX3lKABlgR934BFAKv/lEWThg0B2hYeJiBJlhDYcv7d1CLLFApB04vws8GM63dpv/+erdSGw+Anv8hAlksHvPoUKC0CC6Wsn9YZm1+SxAAAgAElEQVSqn8sgb9iA0UCqR96by8eTAc16l4coiRSV+tpJBS67SVHGApBkzW2VAII9AYgDHXhY/ts3vQmsnOVdHqLk6oWWtmOsQ5AdFoAkEw3+FmDffQsa988x/0ReMjgHUGiwACSUzj6+HMBegR934JH5b7x6XvtfROSV/bR+TCHzcFOEsQAklUjw44C77wj02CnvzWXhgx6GISIAgLo/to5ANlgAkkrk6KAPqQNG57/x6nnAmtc8y0JEHSw+DFAosAAkkNaP2Q/AzoEe1OkG9B2V9+ay5DEPwxDRF+ys9VWBPw4keywASaQa/C2/fvsDqe75bdvyMbCy3ts8RPQ/FucEMscCkDCqEAiCv/3f/5C8t5XFjwFc8IvIPyLHqnJxuKRhAUiaOZUHANgh0GMWbwn0yPOJQ241sPx5b/MQ0fp2QMOYfa1DULBYAJJG5DuBH7Pf/vlvu+x5wOWqpUS+U/fb1hEoWCwASSP4ZtCH1L75f7CQZU97mISINkqcwM8NZIsFIEF0RtU2AIYHetCSbYBug/PbtulNoHmBt3mIaCN0r45zBCUEC0CSFMm3gIBf9Om3X96byrJnPAxCRJshKMLh1iEoOCwAiaLB3/7vVZ7nhjlgxUxvwxDR5vAxQIKwACSEPjU6DeDQQA+a7g302DG/bVc1tI8AIKIgHaH3VqSsQ1AwWACSYtD2+wLoF+gxe5ch3ycOsvJlb7MQUWf0x25Fe1uHoGCwACSF4uDAD9krz/cNNQusnO1tGCLqJOcg6wQUDBaApFAcGOwBBci3AKx+Fcg1eRuHiDpHNOBzBVlhAUiAjik+81+JJx/dtm9/ByAPsnqux2GIqPOEdwASggUgCeYeNxTAFoEes+du+W+7igv/EBnaUhurdrEOQf5jAUgCTQd+S0977Jrfhq2L2lf/IyI7Od4FSAIWgCQQHBD4MfMtAKt4+5/InPI9gCRgAUgC1X0CPV5Rf6A4vycOsvZNj8MQUR5GWgcg/7EAxJw2VhQDGBroQbvnOfkPAKxhASAKgd11xrgi6xDkLxaAuNOS3QEUB3rM7l/Jb7vsCqB1obdZiCgfJUi3FPAmL0UBC0DcZaUs6ENqyXb5bbjmDW+DEFH+JBf4uYOCxQIQd6LB/xJ32yGvzaR5vrc5iKgAGuzS4RQ4FoC4EwRbAJxioHjL/LZd+763WYgofxL83UMKFgtA3Cn2DPR4JdsBkuePVfMCb7MQUf6UBSDuWABiTOvH9ASwbaAHzXP4H3KrgbYl3mYhogLo9vruid2sU5B/WADiTJ0hgR+zeFB+2zV/6G0OIiqUYIWb3ws9FAksALGWLWBAfn60KM8CwOF/RCGkgZ9DKDgsAHHmyJDAj5nvI4DWRd7mICIvsADEGAtAnKkMCfyYed4BED7/JwohlwUgxlgAYs3gl7eoX37b8Q4AUfiIsADEGAtArDl5zsmbJ3GAVI/8tm1b6m0WIiqcYIh1BPIPC0Cs6VaBHi7VE4Dkt212padRiMgDijxn9aIoYAGIt4GBHi3VO7/tNAu4Ld5mISIvBHsOoUCxAMSUzhjXA0D3QA+a7pXfdtnVANTTKETkiV6cDCi+WADiqntzngPyC5Dv8//cam9zEJF3Vri8CxBTLABx1WZw606K8tvObfY2BxF5J8XHAHHFAhBXKTf4OwCSzm87t83bHETkHVeDP5dQIFgA4iqH/oEfM98CoFlvcxCRh9wB1gnIHywAcSUa7AuAAAsAURwp+BJgTLEAxJU4JcEfM5XfdiwAROFlcS6hQLAAxJYWB37IfF/my67yNgcRechlAYgpFoC4chF8AWj5JK/NpPUjj4MQkYeCP5dQIFgA4kok+Na+9h2gbVnXttEcsGKmP3mIqHAW5xIKBAtAbBk8AlAXsugfXdtm8eMAlwImCi9XWQBiigUgtvKdladAS54Clr/Yue9d/Qrk0/v8zUNEhRGHjwBiKs9xWxR+Vq/WK2TBrdDWT4Etjtrw0EDNAosfg3x6f/sjACIKMeVMXTHFAhBfrWZHVrf94r50GtBvFLTbkPaFgrKrIGvfAVa8DLQtNYtHRF2gyqU6Y4oFIK5UWyBim6FtCbDoERinIKJCOA4LQEzxHYD4srsDQETxoS4LQEyxAMQVWzsReYLnkrhiAYgrVa6xS0SFE55L4ooFIK5U+ZYdERXOlcXWEcgfLABxJeAvLREVTnSRdQTyBwtAXDlp/tISUeGcLM8lMcUCEFctTbwDQESFW5XjuSSmOEQ7xrS+qhkA5/EmonytlkxNb+sQ5A/eAYi3T60DEFGkfWwdgPzDAhBngnesIxBRpL1tHYD8wwIQa8ICQET5U7xlHYH8wwIQZ6ps70SUP+E5JM5YAGKNdwCIqAC8AxBrLABx5vCXl4gK4Lg8h8QYC0CcrWpuBJC1jkFEkdSE17JvWocg/7AAxJgcULcWwGvWOYgoghRz5Ji6nHUM8g8LQPzNsg5ARBHkyEzrCOQvFoDY09nWCYgoglyeO+KOBSDuRHkHgIi6Ls27h3HHAhB3rb1mAGixjkFEkbIc81pesQ5B/mIBiDkZOaEJwH+tcxBRhCim8QXA+GMBSALVadYRiChCRJ6yjkD+YwFIAsE06whEFCn/sQ5A/mMBSII1rdPB9wCIqHMWoqy60ToE+Y8FIAHaJwTiYwAi6gSRf4pArWOQ/1gAEkP+YZ2AiCJA8aB1BApGenPfoLNP7Adky5GSLYII5DlVF8BCQGZJpnqNdRwzuew/kErfBECsoxBRaK3GmuZ/W4ewpDOqtkFah8Nx+lpnyY+2QeVjLP1gpnxt2ibXgtnoxUDnjN0N4v4OwPcAFHkd0UAzFPcjlbpUht+VyDWutaHqZSj2sc5BRKF1n2RqKqxDWNA5Yw/quOYdjHh8UFoByO1IN/9eSuuWbugbNvgIQOeMOQLizgDwI8Tj4g8A3SCohJubrXMqv20dxgRv7RHRpoj+3TqCBZ1TeSbEnQbgEMTj4g8AfQE9D9mSWTp3bNmGvuFLBUDnjtkdovcB6O17PBu9IVKn9WP2sw4SODc9GeDLPUS0QauRan3IOkTQtL7quxD5C4CUdRaffAWu+6jOOnbb9f/gy3cAXFwJoFcQqQx1A/RW1fGJeglSRkycD+A56xxEFEIi90pp3WrrGEHSGeOKAFyL+Hzq35htkUr9cf0vrnMB1PoxWwL6reAymSrHK2+Nsg4RONFq6whEFEa5u6wTBK6kaTSAnaxjBEOO1caKAV/8yvqfgPfbwNfiK6eHWEcIXBPuAbDWOgYRhYnOx/DJz1qnCFwOSfoQWIRc8TqPvte92KsOCjSONXG2so4QNBlVuxKQRL7oQ0QbIc4diZz8RzDQOkKw1r3mrVsAHCwLNIs5d7F1AhOO3mQdgYhCowWS/at1CCPJuuYplnzxb9ctANnsy0jSW+Kq060jWJDhNdMBzLDOQUShcLcMn/KpdQgTbqLOgzkAL33xC+sUANnr7o8AmRZkIkNvYNlHyXvm9RnVW6wjEFEIuAm+I9gvPRWCj61jBELwkGSqF37xS19+4c/BLwG0BpXJSA7inLG5aRJjral1CrDu7SAiShp9QUbU/tc6hRXZcWIzXLnAOkcAlgHuL9b/4pcKgAyvngHRnyC+JaAVIidL2aREz3ctB9SthUhymz8RAZAvjQ1PGimvrgbkd9Y5fLQEwPekbPI76//BBof8SVntZKh7MIDn/U4WsKkQ9wApq55oHSQUUs1/AZCoiT+I6DPaiLJd/mmdIgwkU30xVH8I4A3rLB7KQVGLtLOXZGo2+Lh7s7Mf6dwTdobmRgGyJaDF3mf0maIZqp8glZsuw+/+wDpO2OicqmsgONc6BxEFTPVYKa+9xzpGmKhC0FA1AsCeALaERHJ64DWA+wFSbc9ubBGgz8R9+kPaDJ0zdjuI+zaAEussRBQQxVt4o2WYHFOXs45CdpIz6x9tkJRP+hDQv1nnIKIg6WW8+BMLAAG53OUAmqxjEFEg5iKz62TrEGSPBYA65n/AzdY5iCgAqheJjHetY5A9FgBqV+z8EYKV1jGIyFcvIVP7iHUICgcWAAIAyO6TlsDF1dY5iMg3CnV+kchFf2iDWADof5pargbwvnUMIvKDTJHySc9Zp6DwYAGgz8kBdWuh+mvrHETkudVQ+aV1CAoXFgBaV6a2FvGbAZIo2QRXtA/5JfofFgBahwi0Y0EoPickioc3kGq51joEhQ8LAH2JDK+ZDqDaOgcReUDkXCmti+viblQAFgDaCDkfwDLrFERUCP2HlFX/yzoFhRMLAG2QZKoXQuQS6xxElLcWuHq+dQgKLxYA2rjXmm8FMMM6BhHlQXCljJj8pnUMCi8WANqojsVCTgGQtc5CRF3yOnqnf28dgsKNBYA2STI1swC9yjoHEXWaC+BnsuPEZusgFG4sALR5PQZcBsE86xhE1AmKmyVT86x1DAo/FgDaLNn1hhao/hQA1w8nCrf30K34IusQFA0sANQpkql9EcCN1jmIaBNUTpFhd66yjkHRwAJAndfW4yIAb1vHIKINUPxNyqsft45B0cECQJ0mIyc0Qd2fgdMEE4XNJ3Dc86xDULSwAFCXSPnkpwC53ToHEX2ByhlSNpkzd1KXsABQ17U1nw/IB9YxiAiA4F4pr37AOgZFDwsAdZmMrFsBuD8BHwUQWVsElTOtQ1A0sQBQXiRTOxXQG6xzECWayqmSqV5oHYOiiQWA8ten6AJAG61jECVS+1v/vPVPeWMBoLy1TzUqYwG0WWchSpgP+dY/FYoFgArSvlYAuOgIUXAUwMl8658KxQJAhVu64ApAXraOQZQIqjdLpuYx6xgUfSwAVDD52rQsJHsCgLXWWYhi7l0Utf7KOgTFAwsAeULKprwG4ELrHEQx5kKdsVJat9o6CMUDCwB5p6zmeiietI5BFEuKq6R80nPWMSg+WADIMyJQaHocAK5GRuQpbUTf9HjrFBQvLADkKRkxcT6AC6xzEMVIC5zU8e3Dbom8wwJA3iuruRVQLktK5I2LZfikBusQFD8sAOS59kcBqZ8CWG6dhSjinsPrLddah6B4YgEgX0j5pA8h+kvrHESRJVgJNz1GjqnLWUeheGIBIN9IWe1fATxqnYMoklTP6ninhsgXLADkL3V+BoBTlhJ1if5DMrV3WaegeGMBIF9J+aQPofoL6xxEEbIIjnuKdQiKPxYA8p2U194JxYPWOYgiQfUkGT7lU+sYFH8sABQQ5+fgowCizblDymv/aR2CkoEFgALR/igAXL+caOM+hJvm4zIKjFgHoGTRhqrHofiGdQ6iEPoml/mlIPEOAAUr644DwNXMiNZ1By/+FDQWAAqU7DX5PUAvsc5BFCIfQdzzrUNQ8rAAUPDKdr0ewPPWMYhCQfRkKZvMF2QpcCwAFDiR8S5yOg5Aq3UWIltaLWW1nC2TTLAAkAnZq3YeIFdZ5yAytARw+NY/mWEBIDs9+l0O4HXrGEQ29DzJVC+0TkHJxWGAZErnVH4DIo9b5yAK2NMoq/maCNQ6CCUX7wCQKSmvfQLAFOscRAFqgeRO5cWfrLEAkD0ndy44TTAlhl4uZVNes05BxAJA5joWPvm1dQ6iALyOdCtffqVQYAGgcCjb5TYI/msdg8hXoudKaR2Hv1IosABQKIiMdyE4B+BzUYorfYBj/ilMWAAoNGR4zXQoJlvnIPLBWo75p7BhAaBwKUr/AoKV1jGIPKX4g2Sq37WOQfRFLAAUKlI68ROo/NE6B5GH3kHfNF/8o9BhAaDw6dHvGijeso5B5AnBebLjxGbrGETrYwGg0JFdb2iB4FfWOYg88KyU1TxoHYJoQ1gAKJQkU3M/uGQwRZvCYZGl8GIBoBDTX4DDAimy5F4ZXjPdOgXRxrAAUGhJpvZFKP5hnYMoD61I68XWIYg2hQWAwq39XYA26xhEXaK4SUpr+CIrhRoLAIWaZGpeB/QO6xxEXbAcJc7vrEMQbQ4LAIVfuugyAGusYxB1iuIa2X3SEusYRJvDAkChJ6UTPwFwi3UOok5YDk3fYB2CqDNYACga2nJ/ArDaOgbRZlwlIyYutw5B1BksABQJMnLKYvAuAIXbEpQU89M/RQYLAEVHW+5KAKusYxBtkOrVMuxO/nxSZLAAUGTIyCmLocq7ABRGi9Gt5CbrEERdwQJA0eIWXw2+C0BhI3IVP/1T1LAAUKTIXn9bBL4LQOGyAk3urdYhiLqKBYCiJ5e9DkCrdQwiAIDiVhlVu9I6BlFXsQBQ5Mhed38EYIp1DiIAbRC90ToEUT5YACii5GpwpUCyplormdoF1jGI8sECQJEkmepXADxmnYMSLi3XWUcgyhcLAEWYXG2dgBLtUdmzpt46BFG+WAAosiRT/R8As6xzUFKxgFK0sQBQ1PEkTBYaOgooUWSxAFC0tfW4D8BH1jEocTjunyKPBYAiTUZOaAMw0ToHJcpqrNVa6xBEhWIBoOhLO7cByFnHoKTQGk78Q3HAAkCRJ6WT3odwSCAFRf5qnYDICywAFA+u8pksBUBfkEwNR55QLLAAUDxkdv0XoPOtY1DcCYsmxQYLAMWCyHgX4txhnYNibXnHqBOiWGABoPhIpW4HkLWOQTGlqJGRE5qsYxB5hQWAYkNKJ34C4AnrHBRTIjXWEYi8xAJA8SIcn00+ULyFsuqXrWMQeYkFgOKlteeDAFZZx6CYEdSIcPlpihcWAIqVjme0D1jnoJhRZ4p1BCKvsQBQ/DjgYwDykL4g5ZPesE5B5DUWAIqfPXeZCmCBdQyKCXFYKCmWWAAodkTGuwDuts5BsdCG1uw91iGI/MACQPGUAodskReelJFTFluHIPIDCwDFkuxZUw/gdescFHXCF0optlgAKL5U/2EdgSLNRTr1iHUIIr+wAFB8OakHrSNQpD3fMbskUSyxAFB8Dd/pJQg+to5BEcU7SBRzLAAUWx2jAR6yzkERpcqfHYo1FgCKOX6Ko7zMlRGT37QOQeQnFgCKt+4D/gPBSusYFDECvj9CsccCQLEmu97QApVHrXNQ1Li8c0SxxwJAScBPc9QVH2H45FnWIYj8xgJA8Se5xwHkrGNQZDzJpX8pCVgAKPakbPIyALOtc1BEqEy1jkAUBBYASgh90joBRYX8xzoBURBYACgZlAWAOkMbpXzSh9YpiILAAkDJUNT2PIA11jEo7BwWRUoMFgBKBCmtawXwrHUOCjl1+fyfEoMFgJJD9d/WESjUsmjGM9YhiILCAkDJkUrx9i5tyosyqpazRlJisABQcuw5aS4ALu9KG8Pb/5QoLACUGB2TuzxlnYPCSnj7nxKFBYCSRTDdOgKFUg7p5petQxAFiQWAEsZ9wToBhVKDlNattg5BFCQWAEqWJR/VA+CJntbHYkiJwwJAiSJfm5YFMNM6B4WMKgsAJQ4LACWQ8j0AWlcqzQJAicMCQAnk8GRPX7RQht/1tnUIoqCxAFDytGVfALjeO32Gt/8pmVgAKHFk5JTFAN6yzkEhIcICQInEAkBJxZM+deDQUEomFgBKqhetA1AouEi1zbIOQWSBBYCSSZw51hEoFN7mBECUVCwAlEyqDQBc6xhkrt46AJEVFgBKJMlUr4HiHescZEx1rnUEIissAJRcwk9/iedIg3UEIissAJRc7Y8BKMlUWAIpsVgAKLkc5ck/2VahrHq+dQgiKywAlFy5YhaAZGsQ4YyQlFwsAJRc5RPfA7DcOgaZ4SMgSjQWAEqsjk9/r1jnICPKFwAp2VgAKNmU7wEkVoovgVKysQBQwgnHgSdVNj3POgKRJRYASjaRN60jkIlFMmIi3/+gRGMBoGRLC5cFTiTlf3dKPBYASrY9dloAYK11DAocCwAlHgsAJZrIeBeCd61zUNDkbesERNZYAIhU+R5A0gjvABCxABDB4cUgaVyXpY8SjwWASPlpMHGK2vjfnBKPBYBI+GkwYZZJad1S6xBE1lgAiHIcEpYsnPuBCGABIAJG7PYBOBQwSVj4iMACQMShgEkjyiGARGABIPoMC0BSqLxnHYEoDNLWAYiCUlFRkZq/0h0GV7ZOOSpf/LNH/pvFln1lY5tSjDz3mrvFqCOOPuyLX3PVdVWcT4f0cV6rq6vLWWUjChLPeBR7Bx11VP+2tuILIfITKAZZ56FQWwjVW9dKrysbnqheYx2GyE8sABRr+x7xg4yoPAxgsHUWig4BXtEUvvnSow8ssM5C5BcWAIqtA771w6/ksngZwJbWWSiKZI6zyjnghRfqOEKEYokvAVJs5bJyC3jxp7xpudvbPds6BZFfWAAolkZ+4wd7AvpN6xwUdXoWeKeUYooFgGIpLTjKOgPFwjb7H/a9Pa1DEPmBBYDiyXWGWEegeMilUjtYZyDyAwsAxZRmrRNQPIjrtFlnIPIDCwDFkuvI69YZKB5S6SynDqZYYgGgWBJHHwTAT25UqMbpjz7IAkCxxAJAsdQxgctN1jko2kTkt9YZiPzCAkCxNSC19lcKPG2dg6JJBbe/+Pj991rnIPILCwDF1qOPPtrSo7XPkRC5CQBfCqTOahXgspf3LzvFOgiRnzjBBSXCfocfvSscHAfV/QBsCciXf/YdZ0sRh2sGxFku+4oCLV/+A1UACwUyHU6u9sXHHpwfdDSioLEAEHU4+MfjzoHKtdY5yD850V2m3zOBL/URgY8AiIiIEokFgIiIKIFYAIiIiBKIBYCIiCiBWACIiIgSiAWAiIgogVgAiIiIEogFgIiIKIFYAIiIiBKIBYCIiCiBOBUwJcb+R1TsklP3QKhu5Tj6pZ99KSo5yEkVfdsiGwUj29J0lai7ZP2vu64oHP0Emn725Sfq3rXIRhQ0FgCKvX0PP3qkiP4ZwCHWWSgCBI/nJHX2jMfqXreOQuQnFgCKtf0OP7pKRW8XoMQ6C0XKCkf1ey88+fenrYMQ+YUFgGJrn8N/dKgj7mMA0tZZKJKWuMiN+O8T//jAOgiRH/gSIMXS3nuPK3LEvRW8+FP+BjpIXWEdgsgvLAAUS6mBi44AsIt1Doo2BX584He/29s6B5EfWAAolhyRg60zUPQJUNLanB5hnYPIDywAFE+KgdYRKB4c0f7WGYj8wAJA8ST41DoCxYOjqUXWGYj8wAJAsSTQZ60zUCysbS1pmWMdgsgPLAAUS62Lt5iqwNvWOSjiFPfNfPjhJusYRH5gAaBYmjlzQpuonAXAtc5CUaUrVVKXWqcg8kvKOgCRXz5859U3B+88bDkgR4CTXlEXKNDiwDnupSfue8k6C5FfWAAo1ha8/dpLg3ce+l9A9gU4MoA6Q+bC0R+99PgDU62TEPmJn4ooEUaPHp1eUzToqyLuQY7K1ir6pcdfTio9HKn0/hb5KBhutvVuuO7K9b8uKq46+FhEnhncW56tq6vLWeQjChILAFGHg3887hyoXGudg/yTE91l+j0T+HIoEfgSIBERUSKxABARESUQCwAREVECsQAQERElEAsAERFRArEAEBERJRALABERUQKxABARESUQCwAREVECsQAQERElEKcCpkQ46Kij+re2dfsuoPs5IoM29D2SSu0KJ1UedDYKjra1PQro6g39mau6WFSmI9300EuPPvql9QKI4oYFgOJORh3xg1+q4iJA+liHoUhYAsgvX3ri/jutgxD5icsBU3yNH+/sVzxgCiDnAFJiHYcioweA72238+748O1Xn7YOQ+QXFgCKrf2KBlwMwZnWOSiaBPjq9jsPm/7h26+9Y52FyA98CZBiae/R3xkEwa+sc1CkCSCXW4cg8gsLAMVSUVHR99F+K5eoEPvu980fbm8dgsgPLAAUSyoy3DoDxYKIK8OsQxD5gQWA4qq7dQCKCeXPEsUTCwDFkkDft85AMSH6oXUEIj+wAFAsKdxHrTNQDAgWD+6TqreOQeQHFgCKpZeeeHAmBI9b56Cokxvq6upy1imI/MACQLGlmjoNwKfWOSiaVDA7W9x6tXUOIr+wAFBsvfxE3bvi6tcAvGadhSLnBU2lvjXz4YebrIMQ+YUFgGLtxX///dUBqbXlUP05gJcAuNaZKLRcBaYrcPIOfVMH//dfdZ9YByLyExcDokSpqKhIvbMyt6WTk40O7Srq02+848iYIHORv9xc20ltq1ZvdF5/N6Vrd+qTWsjn/ZQkLABE6znkx6f8UBX3W+cgz7S5zW0Dn3/ozlXWQYjChI8AiNbTrbjpcQAbXDOeIulJXvyJvowFgGg9T1RXr4Ho361zkDcUqLHOQBRGLABEG+C4Um2dgTyxpkdJ00PWIYjCiAWAaAOeLt1mKoAPrHNQoeS+J6qr11inIAojFgCiDRk/3hXRSdYxqDDqYKJ1BqKwYgEg2gjHwXUA+Okxul5+7u5bp1mHIAorFgCijZg2ZcJigdxhnYPyo8AV1hmIwowFgGgTnGz2KgCt1jmoixSNz+2xzSPWMYjCLGUdgCjM5r86a+WQPUcOBrC3dRbqPAHOeu/mP79inYMozHgHgGgzWpzcbwAst85BnaQy/Zm62+61jkEUdiwARJvx0pTbP4XgN9Y5qFNyksLPAah1EKKwYwEg6oSt3aU3QzHbOgdt1s3P3H0r/zsRdQILAFEn1NXV5VzHOR1cTji0FPg01drCOzVEncSXAIk66YPGGQuG7Ll3MSCHWGehL1FHncqnH7i93joIUVTwDgBRFzyz+7a/AfAf6xy0HsHVz9Tdwjn/ibqABYCoK8aPd7MqYwEsto5Cn5H/LnWXXmydgihqWACIuuiFuls/VMUYADnrLIQlKQfHNNbVcbImoi7iOwBEeXh/3sy3dthj5Cci+I51lgRbq6pHPXPvbQ3WQYiiiAWAKE/vz5s5c4fSvSGQ0dZZEiinKsc+V3fbE9ZBiKKKBYCoAO83znx6SOk+AwDsZ50lQVQU456tu22ydRCiKOM7AEQF2kqX/J8KuGpgMFQU5z5Tdxv/fRMVSKwDEMWEHHLMqZcq9FLrIDGWVcgpz9176wgWYhIAAAIFSURBVJ3WQYjigI8AiDzyXuOMaV/Zc+RSAEeA5dprTQL88Nl7ucgPkVdYAIg89H7jzJeH7DHydQiOBFBsnScmFqijRz17z4Rp1kGI4oSfUoh8cGDFaUMd5O6FSJl1lkhTTG1N5ypfmnL7p9ZRiOKGdwCIfPDBvBlLdtp3+ES0FfUBRwjkIyeQy58t3ebkD2+8ZrV1GKI44h0AIp8d9ONxFaK4DpBtrbNExFxx3FOfufuv062DEMUZ7wAQ+ez9xpnzhu21x225XFEKwChw+O3GNAnk90t16ZgZ91bPtw5DFHe8A0AUoAMqflaeEucGAAdZZwkRFch9cJzznrn75g+swxAlBQsAkYGDKsYdJJALIPi2dRZDLhT/gqOXPnvPhFnWYYiShgWAyNDBx5x6IKAXATgSyXk00ALI3a7KH56vu+V16zBEScUCQBQC+1ecul0R9Ecq+AmAjHUen8wURbWT1tppUyYstg5DlHQsAEQhc3DFqfvC0R9BcSiAckT3zkALIC+q4sk0nHum1d38lnUgIvofFgCiEDv0B2cMbC3KjRbo11WxNwRDAfSzzrURHyvwGkReSrn6n9XN+vzMhyc0WYciog1jASCKmAN+cOqWqXRud4Uz1IEOgEg/AL1VtLeo083fo7urAGc1xF3lqqxyRBYIcm80p7u9/lLtDSv9PTYReen/AbeNKKToOb16AAAAAElFTkSuQmCC";var Ip="data:image/png;base64,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";var ve=require("react/jsx-runtime"),lo=-100,co=100,Xp=.03,Ib=.03,zb=.03,zp=.5,Ub=Op,Vb=Dp,jb=Ip,Fb=Math.PI/4,Up=.4,po=64,Vp=Xp*3,oc="#4d7dff",jp="#ffcc00",Fp=.02,$p=new qe.Vector3(0,1,0),ps=32,Hp="#ff9d3d",ms=4,Pr=1.4,fs=.35,Hb=.13,Gp=.12,Wp=.055,Gb={x:"#ff4444",y:"#44ff44",z:"#4444ff"};function Yp(e){return new qe.Vector3(e==="x"?1:0,e==="y"?1:0,e==="z"?1:0)}function Wb(e,t){let r=Yp(e);t.lengthSq()<1e-8&&(t=r.clone());let o=new qe.Vector3().crossVectors(r,new qe.Vector3().crossVectors(t,r));if(o.lengthSq()<1e-8){let n=Math.abs(r.y)<.9?$p:new qe.Vector3(1,0,0);o=new qe.Vector3().crossVectors(r,n)}return o.normalize()}function ac(e){let t=new Float32Array((po+1)*3);for(let r=0;r<=po;r++){let o=r/po*Math.PI*2,n=Math.cos(o)*Up,i=Math.sin(o)*Up,s=0,l=0,a=0;e==="x"?(l=n,a=i):e==="y"?(s=n,a=i):(s=n,l=i),t[r*3]=s,t[r*3+1]=l,t[r*3+2]=a}return t}function Xb(e){let t=Math.abs(e.y)<.99?new qe.Vector3(0,1,0):new qe.Vector3(1,0,0),r=new qe.Vector3().crossVectors(e,t).normalize(),o=new qe.Vector3().crossVectors(e,r).normalize();return[r,o]}function uo(e,t,r){return Math.min(Math.max(e,t),r)}var mo=null,sc=new Set;function Jo(e){mo!==e&&(mo=e,sc.forEach(t=>t()))}function lc(e){return sc.add(e),()=>sc.delete(e)}function hs(){return mo}function Kp({light:e,position:t,color:r,intensity:o,visible:n,onPositionChange:i,onDraggingChange:s}){let{activeTab:l,activeSubTab:a,setActiveTab:u,setActiveSubTab:f}=Qn(),{camera:d,gl:p,raycaster:v,invalidate:x}=(0,gs.useThree)(),_=(0,Te.useRef)(null),T=(0,Te.useRef)(null),y=(0,Te.useRef)(null),c=(0,Te.useRef)(null),m=(0,Te.useRef)(null),S=(0,Te.useRef)(null),C=(0,Te.useRef)(null),N=(0,Te.useRef)(null),E=(0,Te.useRef)(null),h=(0,Te.useRef)(null),w=(0,Te.useRef)(null),g=(0,Te.useRef)(null),M=(0,Te.useRef)(null),D=(0,Te.useRef)(null),H=(0,Te.useRef)(null),G=(0,Te.useRef)(null),k=(0,Te.useRef)(null),$=(0,Te.useRef)({dragging:!1,axis:null}),j=(0,Te.useRef)(new qe.Plane),P=(0,Te.useRef)(new qe.Vector3),A=(0,Te.useRef)(null),W=(0,Te.useRef)(null),F=(0,Te.useRef)(new qe.Vector3),ae=(0,Te.useRef)(!1),Ee=(0,Te.useRef)(new qe.Plane),le=(0,Te.useRef)(s);(0,Te.useEffect)(()=>{le.current=s},[s]);let Ae=(0,Te.useMemo)(()=>new qe.Vector3(t[0],t[1],t[2]),[t]),ke=(0,Te.useMemo)(()=>new Float32Array(6),[]),Oe=(0,Te.useMemo)(()=>new Float32Array(6),[]),bt=(0,Te.useMemo)(()=>ac("x"),[]),$t=(0,Te.useMemo)(()=>ac("y"),[]),Ue=(0,Te.useMemo)(()=>ac("z"),[]),Ve=(0,Te.useMemo)(()=>new Float32Array((ps+1)*3),[]),St=(0,Te.useMemo)(()=>new Float32Array(ms*2*3),[]),Vt=e?.type==="point",et=e?.type==="spot",sn=Vt?Vb:et?jb:Ub,Mt=Vt?Ib:et?zb:Xp,Ct=(0,Te.useMemo)(()=>new qe.TextureLoader().load(sn),[sn]),En=(0,Te.useSyncExternalStore)(lc,hs,hs),je=!!e&&En===e.id;if((0,Te.useEffect)(()=>{ae.current||(F.current.copy(Ae),x())},[Ae,x]),(0,Te.useEffect)(()=>{e&&mo===e.id&&!n&&Jo(null)},[e?.id,n]),(0,Te.useEffect)(()=>()=>{e&&mo===e.id&&Jo(null)},[e?.id]),(0,gs.useFrame)(()=>{if(_.current&&_.current.position.copy(F.current),y.current){y.current.lookAt(d.position);let ne=d,de;ne.isOrthographicCamera?de=Mt/ne.zoom:de=d.position.distanceTo(F.current)*Mt,y.current.scale.setScalar(de)}if(C.current){let ne=d,de;ne.isOrthographicCamera?de=Vp/ne.zoom:de=d.position.distanceTo(F.current)*Vp,C.current.scale.setScalar(de)}if(w.current){let ne=d,de;ne.isOrthographicCamera?de=Wp/ne.zoom:de=d.position.distanceTo(F.current)*Wp,w.current.scale.setScalar(de)}if(m.current){let ne=m.current.getAttribute("position"),de=ne.array;de[0]=0,de[1]=0,de[2]=0,de[3]=F.current.x,de[4]=F.current.y,de[5]=F.current.z,ne.needsUpdate=!0,m.current.computeBoundingSphere()}if(S.current){let ne=F.current,de=ne.length();S.current.visible=de>zp,de>1e-6&&(S.current.position.copy(ne).multiplyScalar(.5),S.current.scale.set(1,de,1),S.current.quaternion.setFromUnitVectors($p,ne.clone().normalize()))}if(c.current&&(c.current.visible=F.current.length()>zp),et&&N.current&&E.current&&h.current){let ne=F.current,de=ne.length();if(de>1e-6){N.current.visible=!0;let Gt=ne.clone().negate().normalize(),jt=de,ot=e?.angle??Math.PI/6,ut=jt*Math.tan(ot),ht=ne.clone().add(Gt.clone().multiplyScalar(jt)),[Yt,kt]=Xb(Gt),Bn=E.current.getAttribute("position"),Cn=Bn.array;for(let De=0;De<=ps;De++){let Ie=De/ps*Math.PI*2,be=ht.x+(Yt.x*Math.cos(Ie)+kt.x*Math.sin(Ie))*ut,Rt=ht.y+(Yt.y*Math.cos(Ie)+kt.y*Math.sin(Ie))*ut,Nt=ht.z+(Yt.z*Math.cos(Ie)+kt.z*Math.sin(Ie))*ut;Cn[De*3]=be,Cn[De*3+1]=Rt,Cn[De*3+2]=Nt}Bn.needsUpdate=!0,E.current.computeBoundingSphere();let _e=h.current.getAttribute("position"),$e=_e.array;for(let De=0;De<ms;De++){let Ie=De/ms*Math.PI*2,be=ht.x+(Yt.x*Math.cos(Ie)+kt.x*Math.sin(Ie))*ut,Rt=ht.y+(Yt.y*Math.cos(Ie)+kt.y*Math.sin(Ie))*ut,Nt=ht.z+(Yt.z*Math.cos(Ie)+kt.z*Math.sin(Ie))*ut,Bt=De*6;$e[Bt]=ne.x,$e[Bt+1]=ne.y,$e[Bt+2]=ne.z,$e[Bt+3]=be,$e[Bt+4]=Rt,$e[Bt+5]=Nt}_e.needsUpdate=!0,h.current.computeBoundingSphere()}else N.current.visible=!1}if(A.current&&(A.current.visible=$.current.dragging),W.current&&$.current.dragging){let ne=W.current.getAttribute("position"),de=ne.array;de[0]=P.current.x,de[1]=P.current.y,de[2]=P.current.z,de[3]=F.current.x,de[4]=F.current.y,de[5]=F.current.z,ne.needsUpdate=!0,W.current.computeBoundingSphere()}}),(0,Te.useEffect)(()=>{let ne=_e=>{let $e=p.domElement.getBoundingClientRect();return new qe.Vector2((_e.clientX-$e.left)/$e.width*2-1,-((_e.clientY-$e.top)/$e.height)*2+1)},de=_e=>!!_e.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Gt=()=>{let _e=[];return[g.current,H.current,M.current,G.current,D.current,k.current].forEach($e=>{$e&&_e.push($e)}),_e},jt=_e=>_e===g.current||_e===H.current?"x":_e===M.current||_e===G.current?"y":_e===D.current||_e===k.current?"z":null,ot=()=>{$.current.dragging&&($.current={dragging:!1,axis:null},A.current&&(A.current.visible=!1),p.domElement.style.cursor="default",le.current?.(!1))},ut=()=>{ae.current&&(ae.current=!1,p.domElement.style.cursor="default",le.current?.(!1))},ht=_e=>{if($.current.dragging&&$.current.axis){let Rt=$.current.axis,Nt=F.current,Bt=Yp(Rt),ln=new qe.Vector3().subVectors(d.position,Nt),he=Wb(Rt,ln);j.current.setFromNormalAndCoplanarPoint(he,Nt);let B=ne(_e);v.setFromCamera(B,d);let I=new qe.Vector3,K=v.ray.intersectPlane(j.current,I);if(!K)return;let Z=K.clone().sub(Nt).dot(Bt),se=Nt.clone().add(Bt.clone().multiplyScalar(Z)),re=[uo(Rt==="x"?se.x:Nt.x,lo,co),uo(Rt==="y"?se.y:Nt.y,lo,co),uo(Rt==="z"?se.z:Nt.z,lo,co)];F.current.set(re[0],re[1],re[2]),i?.(re),x();return}if(!ae.current)return;let $e=ne(_e);v.setFromCamera($e,d);let De=new qe.Vector3,Ie=v.ray.intersectPlane(Ee.current,De);if(!Ie)return;let be=[uo(Ie.x,lo,co),uo(Ie.y,lo,co),uo(Ie.z,lo,co)];F.current.set(be[0],be[1],be[2]),i?.(be),x()},Yt=_e=>{if(de(_e))return;let $e=ne(_e);if(v.setFromCamera($e,d),je){let be=Gt(),Rt=be.length?v.intersectObjects(be,!1):[];if(Rt.length>0){let Nt=Rt[0].object,Bt=jt(Nt);if(Bt){let ln=F.current;$.current={dragging:!0,axis:Bt},P.current.copy(ln),le.current?.(!0),p.domElement.style.cursor="grabbing",p.domElement.setPointerCapture(_e.pointerId),_e.preventDefault(),_e.stopPropagation();return}}}let De=[];if(T.current&&De.push(T.current),y.current&&De.push(y.current),De.length===0)return;if(v.intersectObjects(De,!1).length>0){let be=e?.id??null;mo!==be&&(Jo(be),u?.("scene"),f?.("Lighting"));let Rt=new qe.Vector3;d.getWorldDirection(Rt),Ee.current.setFromNormalAndCoplanarPoint(Rt,F.current),ae.current=!0,le.current?.(!0),p.domElement.style.cursor="grabbing",p.domElement.setPointerCapture(_e.pointerId),_e.preventDefault(),_e.stopPropagation()}},kt=_e=>{if($.current.dragging){ot();try{p.domElement.releasePointerCapture(_e.pointerId)}catch{}}if(ae.current){ut();try{p.domElement.releasePointerCapture(_e.pointerId)}catch{}}},Bn=()=>{ot(),ut()},Cn=()=>{ot(),ut()};return p.domElement.addEventListener("pointerdown",Yt),window.addEventListener("pointermove",ht),window.addEventListener("pointerup",kt),window.addEventListener("pointercancel",Bn),window.addEventListener("blur",Cn),()=>{p.domElement.removeEventListener("pointerdown",Yt),window.removeEventListener("pointermove",ht),window.removeEventListener("pointerup",kt),window.removeEventListener("pointercancel",Bn),window.removeEventListener("blur",Cn)}},[d,v,p,x,i,e,u,f,je]),l!=="scene"||a!=="Lighting"||!e||!n||e.type==="none"||e.type==="hemisphere")return null;let Et=["x","y","z"];return(0,ve.jsxs)("group",{ref:ne=>{ne&&Ed(ne)},children:[(0,ve.jsxs)("group",{ref:_,children:[(0,ve.jsx)("sprite",{ref:y,children:(0,ve.jsx)("spriteMaterial",{map:Ct,transparent:!0,opacity:.9,blending:qe.AdditiveBlending,depthWrite:!1,rotation:et?Fb:0},sn)}),(0,ve.jsx)(bs.Sphere,{ref:T,args:[.25,16,16],children:(0,ve.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),Vt&&(0,ve.jsxs)("group",{ref:C,children:[(0,ve.jsxs)("lineLoop",{renderOrder:999,children:[(0,ve.jsx)("bufferGeometry",{children:(0,ve.jsx)("bufferAttribute",{attach:"attributes-position",args:[bt,3],count:po+1})}),(0,ve.jsx)("lineBasicMaterial",{color:oc,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,ve.jsxs)("lineLoop",{renderOrder:999,children:[(0,ve.jsx)("bufferGeometry",{children:(0,ve.jsx)("bufferAttribute",{attach:"attributes-position",args:[$t,3],count:po+1})}),(0,ve.jsx)("lineBasicMaterial",{color:oc,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,ve.jsxs)("lineLoop",{renderOrder:999,children:[(0,ve.jsx)("bufferGeometry",{children:(0,ve.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ue,3],count:po+1})}),(0,ve.jsx)("lineBasicMaterial",{color:oc,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]}),je&&(0,ve.jsx)("group",{ref:w,children:Et.map(ne=>{let de=Gb[ne],Gt=new qe.Vector3(ne==="x"?Pr:0,ne==="y"?Pr:0,ne==="z"?Pr:0),jt=new qe.Vector3(ne==="x"?Pr-fs/2:0,ne==="y"?Pr-fs/2:0,ne==="z"?Pr-fs/2:0),ot=new qe.Vector3(ne==="x"?Pr/2:0,ne==="y"?Pr/2:0,ne==="z"?Pr/2:0),ut=ne==="x"?[0,0,-Math.PI/2]:ne==="y"?[0,0,0]:[Math.PI/2,0,0],ht=ne==="x"?g:ne==="y"?M:D,Yt=ne==="x"?H:ne==="y"?G:k;return(0,ve.jsxs)("group",{children:[(0,ve.jsx)(bs.Line,{points:[new qe.Vector3(0,0,0),Gt],color:de,transparent:!0,opacity:.9,lineWidth:2,depthTest:!1}),(0,ve.jsxs)("mesh",{ref:Yt,position:ot,rotation:ut,children:[(0,ve.jsx)("cylinderGeometry",{args:[Gp,Gp,Pr,8]}),(0,ve.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,ve.jsxs)("mesh",{ref:ht,position:jt,rotation:ut,children:[(0,ve.jsx)("coneGeometry",{args:[Hb,fs,8]}),(0,ve.jsx)("meshBasicMaterial",{color:de,depthTest:!1})]})]},ne)})})]}),!Vt&&!et&&(0,ve.jsxs)(ve.Fragment,{children:[(0,ve.jsxs)("mesh",{ref:S,children:[(0,ve.jsx)("cylinderGeometry",{args:[Fp,Fp,1,8,1,!0]}),(0,ve.jsx)("meshBasicMaterial",{color:jp,transparent:!0,opacity:.05,blending:qe.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,ve.jsxs)("line",{ref:c,children:[(0,ve.jsx)("bufferGeometry",{ref:m,children:(0,ve.jsx)("bufferAttribute",{attach:"attributes-position",args:[ke,3],count:2})}),(0,ve.jsx)("lineBasicMaterial",{color:jp,transparent:!0,opacity:.7,blending:qe.AdditiveBlending})]})]}),et&&(0,ve.jsxs)("group",{ref:N,children:[(0,ve.jsxs)("lineLoop",{renderOrder:999,children:[(0,ve.jsx)("bufferGeometry",{ref:E,children:(0,ve.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ve,3],count:ps+1})}),(0,ve.jsx)("lineBasicMaterial",{color:Hp,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,ve.jsxs)("lineSegments",{renderOrder:999,children:[(0,ve.jsx)("bufferGeometry",{ref:h,children:(0,ve.jsx)("bufferAttribute",{attach:"attributes-position",args:[St,3],count:ms*2})}),(0,ve.jsx)("lineBasicMaterial",{color:Hp,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),(0,ve.jsxs)("line",{ref:ne=>{A.current=ne,ne&&(ne.visible=!1)},children:[(0,ve.jsx)("bufferGeometry",{ref:W,children:(0,ve.jsx)("bufferAttribute",{attach:"attributes-position",args:[Oe,3],count:2})}),(0,ve.jsx)("lineBasicMaterial",{color:"#ffffff",transparent:!0,opacity:.6})]})]})}var wt=require("react"),Zp=require("@react-three/drei"),xs=require("@react-three/fiber"),fn=require("three");var mn=require("three");function vs(e){e.updateWorldMatrix(!0,!0);let t=new mn.Matrix4().copy(e.matrixWorld).invert(),r=new mn.Box3,o=new mn.Box3,n=!1;return e.traverse(i=>{let s=i;if(!s.isMesh||!s.geometry||(s.geometry.boundingBox||s.geometry.computeBoundingBox(),!s.geometry.boundingBox))return;let l=new mn.Matrix4().multiplyMatrices(t,i.matrixWorld);o.copy(s.geometry.boundingBox).applyMatrix4(l),r.union(o),n=!0}),n?r.getCenter(new mn.Vector3):new mn.Vector3}function qp(e,t="XYZ"){return new mn.Quaternion().setFromEuler(new mn.Euler(e[0],e[1],e[2],t))}function $b(e,t,r,o,n="XYZ"){let s=new mn.Vector3(...o).multiply(new mn.Vector3(...r)).applyQuaternion(qp(t,n)).add(new mn.Vector3(...e));return[s.x,s.y,s.z]}function Jp(e,t,r,o,n,i="XYZ"){let s=new mn.Vector3(...$b(e,t,o,n,i)),l=new mn.Vector3(...n).multiply(new mn.Vector3(...o)).applyQuaternion(qp(r,i)),a=s.sub(l);return[a.x,a.y,a.z]}var cc=require("react/jsx-runtime");function dc({node:e,space:t,onTransformChange:r,onDraggingChange:o}){let n=(0,xs.useThree)(g=>g.invalidate),i=(0,wt.useMemo)(()=>vs(e),[e]),s=(0,wt.useMemo)(()=>new fn.Matrix4,[]),l=(0,wt.useRef)(!1),a=(0,wt.useRef)(new fn.Matrix4),u=(0,wt.useRef)(new fn.Matrix4),f=(0,wt.useRef)(null),d=(0,wt.useRef)(0),p=(0,wt.useRef)([]),v=(0,wt.useRef)(null),x=(0,wt.useMemo)(()=>new fn.Vector3,[]),_=(0,wt.useMemo)(()=>new fn.Quaternion,[]),T=(0,wt.useMemo)(()=>new fn.Vector3,[]),y=(0,wt.useMemo)(()=>new fn.Quaternion,[]),c=(0,wt.useMemo)(()=>new fn.Vector3(1,1,1),[]),m=(0,wt.useMemo)(()=>new fn.Quaternion,[]),S=(0,wt.useMemo)(()=>new fn.Vector3,[]),C=(0,wt.useMemo)(()=>new fn.Vector3,[]),N=(0,wt.useRef)([0,0,0]),E=(0,wt.useCallback)(()=>{l.current||(e.updateWorldMatrix(!0,!1),x.copy(i).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(_),y.copy(_),t==="world"&&y.identity(),s.compose(x,y,c))},[x,s,y,c,e,i,t,_]);(0,wt.useLayoutEffect)(()=>(E(),()=>{v.current!==null&&(cancelAnimationFrame(v.current),v.current=null),o(!1);for(let g of p.current)no(g);p.current=[]}),[o,E]),(0,xs.useFrame)(()=>E());let h=(0,wt.useCallback)(()=>{v.current!==null&&(cancelAnimationFrame(v.current),v.current=null),e.updateWorldMatrix(!0,!0),p.current=[];for(let g of to(e))mp(g)||(ts(g,g.matrixWorld),p.current.push(g));e.updateWorldMatrix(!0,!1),x.copy(i).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(_),e.getWorldScale(T),a.current.compose(x,_,T),u.current.copy(s),N.current=[e.rotation.x,e.rotation.y,e.rotation.z],f.current=null,l.current=!0,o(!0)},[x,s,e,o,i,_,T]),w=(0,wt.useCallback)((g,M)=>{let D=a.current.clone().premultiply(M),H=u.current.clone().premultiply(M);D.decompose(S,_,C);let G=S.clone();H.decompose(x,y,c),t==="world"&&y.identity(),s.compose(x,y,c),g.decompose(S,m,C);let k=new fn.Euler().setFromQuaternion(m,e.rotation.order),[$,j,P]=N.current,A=[$+k.x,j+k.y,P+k.z],W=new fn.Quaternion().setFromEuler(new fn.Euler(A[0],A[1],A[2],e.rotation.order)),ae=(e.parent?.matrixWorld||new fn.Matrix4).clone().invert(),Ee=G.clone().applyMatrix4(ae),le=i.clone().multiply(e.scale).applyQuaternion(W),Ae=Ee.clone().sub(le),ke=[Ae.x,Ae.y,Ae.z];e.position.set(ke[0],ke[1],ke[2]),e.rotation.set(A[0],A[1],A[2],e.rotation.order),e.updateMatrixWorld(!0),n(),f.current={position:ke,rotation:A}},[x,m,s,y,c,n,e,i,S,C,t,_]);return(0,cc.jsx)("group",{children:(0,cc.jsx)(Zp.PivotControls,{matrix:s,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:h,onDrag:(g,M,D,H)=>w(M,H),onDragEnd:()=>{l.current=!1;let g=f.current;if(f.current=null,g)r(g),v.current=requestAnimationFrame(()=>{v.current=null,o(!1)});else if(p.current.length>0){for(let M of p.current)no(M);e.updateMatrixWorld(!0),n(),o(!1)}else o(!1);p.current=[]}})})}var O=require("react/jsx-runtime");function Yb(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let r=t.geometry,o=r.getAttribute("skinIndex"),n=r.getAttribute("skinWeight"),i=r.getAttribute("position");if(!o||!n||!i)return null;let s=t.worldToLocal(e.point.clone()),l=[e.face.a,e.face.b,e.face.c],a=new gt.Vector3,u=l[0],f=1/0;for(let v of l){a.fromBufferAttribute(i,v);let x=a.distanceToSquared(s);x<f&&(f=x,u=v)}let d=o.getComponent(u,0),p=n.getComponent(u,0);for(let v=1;v<4;v++){let x=n.getComponent(u,v);x>p&&(p=x,d=o.getComponent(u,v))}return t.skeleton.bones[d]??null}function Kb(e){let t=Yb(e)??e.object,r=Uo(t);if(!r)return null;t.updateWorldMatrix(!0,!1);let o=t.worldToLocal(e.point.clone());return{anchorNodeName:r,anchorLocalPosition:[o.x,o.y,o.z]}}function qb(e,t,r){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let o=pr(t,e.anchorNodeName);return o?(o.updateWorldMatrix(!0,!1),r.set(...e.anchorLocalPosition).applyMatrix4(o.matrixWorld),!0):!1}function Jb({annotation:e,enabled:t,controlsRef:r,offsetRef:o}){let n=(0,ws.useThree)(p=>p.scene),i=(0,L.useRef)(null),s=(0,L.useRef)(!1),l=(0,L.useMemo)(()=>new gt.Vector3,[]),a=(0,L.useMemo)(()=>new gt.Vector3,[]),u=(0,L.useMemo)(()=>new gt.Vector3,[]),f=e?.anchorNodeName,d=e?.anchorLocalPosition;return(0,L.useEffect)(()=>{i.current=null,s.current=!1},[f,e?.id]),(0,ws.useFrame)(()=>{let p=r.current,v=o.current;if(!t||!p||!v||!f||!d){s.current=!1;return}let x=i.current;if((!x||!x.parent)&&(x=pr(n,f),i.current=x),!x){s.current=!1;return}x.updateWorldMatrix(!0,!1),l.set(d[0],d[1],d[2]).applyMatrix4(x.matrixWorld),!(s.current&&l.distanceToSquared(a)<1e-8)&&(a.copy(l),s.current=!0,u.copy(l).add(v),p.setLookAt(u.x,u.y,u.z,l.x,l.y,l.z,!0))}),null}function Zb(e){let t={total:0,missing:0};return e.traverse(r=>{let o=r;!o.isMesh||!o.geometry||(t.total+=1,o.geometry.getAttribute("uv")||(t.missing+=1))}),t}function Qb(e,t){let r=t?.camera;if(!(r instanceof gt.PerspectiveCamera))return;let n=new gt.Box3().setFromObject(e).getSize(new gt.Vector3).length();!Number.isFinite(n)||n<=0||(r.near=n/100,r.far=n*100,r.updateProjectionMatrix(),t&&(t.maxDistance=n*10))}async function Qp(e,t,r=.6){let o=e.smoothTime;e.smoothTime=r;try{return await t()}finally{e.smoothTime=o}}function Zo({modelUrl:e,modelFormat:t,licenseKey:r,objectBindings:o,selectedObject:n,panelHoveredObject:i,onObjectBindingsChange:s,onObjectSelect:l,onObjectHover:a,onModelLoaded:u,onLoadError:f,onAction:d,onHiddenObjectsChange:p,onCameraChange:v,onViewerReady:x,onTextureUpload:_,onAnimationsReady:T,onAnnotationsChange:y,activeAnnotation:c,onActiveAnnotationChange:m,lights:S,camera:C,backgroundColor:N,shadows:E=!0,showObjectBindingDataPanel:h=!0,customObjectBindingDataPanel:w,customSceneObjectsPanel:g,showSceneObjectsPanel:M=!0,showDownloadButton:D=!0,downloadFilename:H="model",showResetButton:G=!0,showLoadingOverlay:k=!0,showMouseController:$=!1,mouseControllerPosition:j="center-bottom",mouseControllerOpacity:P=1,moveSensitivity:A=.08,zoomSensitivity:W=1,sceneConfig:F,onSceneConfigChange:ae,disableZoom:Ee=!1,zoomOnSelected:le=!0,highlightOnHover:Ae=!0,enableCameraControls:ke=!0,onAutoFit:Oe,refitOnResize:bt=!0,renderMode:$t="demand",maxDpr:Ue=2,preserveDrawingBuffer:Ve=!1,performanceProfile:St="auto",dracoDecoderPath:Vt,ktx2TranscoderPath:et,meshopt:sn=!0,showMeasureTools:Mt=!1,showUvCheckerButton:Ct=!1,showExplodeControls:En=!1,cinematic:je,measurementUnit:Et="m",enableXR:ne=!1,usdzUrl:de,arScaleMode:Gt="normalized",mobileHandoffUrl:jt,showAnnotationNavigation:ot=!0,showAnnotationOnHover:ut=!1,moveModeEnabled:ht=!1,objectTransformSpace:Yt="world",enableKeyboardNavigation:kt=!1,showViewGizmo:Bn=!1}){let{isInsideEditor:Cn,activeTab:_e,activeSubTab:$e}=Qn(),De=Cn&&_e==="scene"&&$e==="Lighting",Ie=cs(r),be=(0,L.useMemo)(()=>F??Wr,[F]),[Rt,Nt]=(0,L.useState)(null),Bt=be.model.renderer==="uv-checker",ln=Ct?Rt??Bt:Bt,he=(0,L.useMemo)(()=>{let b=ln?"uv-checker":Bt?"pbr":be.model.renderer;return b===be.model.renderer?be:{...be,model:{...be.model,renderer:b}}},[Bt,be,ln]);(0,L.useEffect)(()=>{Nt(null)},[e,be.model.renderer,Ct]);let B=(0,L.useMemo)(()=>{if(N)return N;let b=be.background;return b.enabled&&b.type==="color"?b.color:"#1c1c1d"},[N,be]),I=(0,L.useMemo)(()=>({dracoDecoderPath:Vt,ktx2TranscoderPath:et,meshopt:sn}),[Vt,et,sn]),K=(0,L.useMemo)(()=>Hd(St),[St]),X=(0,L.useRef)(null),[Z,se]=(0,L.useState)(!1);(0,L.useEffect)(()=>{X.current&&(X.current.dollySpeed=Math.max(W,0))},[W]),(0,L.useEffect)(()=>{X.current&&(X.current.enabled=ke&&!Z)},[ke,Z]);let re=(0,L.useRef)(null),Se=(0,L.useRef)(new Map),at=(0,L.useRef)(null),Lt=(0,L.useRef)(null),We=(0,L.useRef)(null),tt=(0,L.useRef)({});(0,L.useEffect)(()=>()=>{for(let b of Object.values(tt.current))URL.revokeObjectURL(b)},[]);let ge=(0,L.useRef)({}),[,Ot]=(0,L.useState)(0),bn=(0,L.useCallback)(()=>{Ot(b=>b+1)},[]),nn=(0,L.useRef)({}),nt=(0,L.useRef)(null),xt=(0,L.useRef)(null),[yt,ai]=(0,L.useState)(null),Js=(0,L.useCallback)(b=>{xt.current=b,ai(b)},[]),Ei=(0,L.useRef)(new Set),vn=(0,L.useRef)(null);(0,L.useEffect)(()=>{let b=yt;if(!b||!kt||!ke||ht)return;let R=new Set(["w","a","s","d"," ","c"]),ee=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),te=0,xe=Ze=>Ze.code==="Space"?" ":Ze.key.toLowerCase(),Xe=()=>{Ei.current.clear(),te=0,vn.current!==null&&(cancelAnimationFrame(vn.current),vn.current=null)},dn=Ze=>{let Ft=X.current,st=Ei.current;if(!Ft||st.size===0){vn.current=null,te=0;return}let Dn=te?Math.min((Ze-te)/1e3,.05):1/60;te=Ze;let un=Math.max(Ft.distance*.75,.01)*Dn;st.has("w")&&Ft.forward(un,!1),st.has("s")&&Ft.forward(-un,!1),st.has("a")&&Ft.truck(-un,0,!1),st.has("d")&&Ft.truck(un,0,!1),st.has(" ")&&Ft.truck(0,un,!1),st.has("c")&&Ft.truck(0,-un,!1),vn.current=requestAnimationFrame(dn)},On=Ze=>{if(Ze.target!==b){Xe();return}if(ee.has(Ze.key)){let st=X.current;if(!st)return;Ze.preventDefault();let Dn=Math.PI/90,un=Math.max(st.distance*.05,.01);Ze.key==="ArrowUp"?Ze.shiftKey?st.forward(un,!0):st.rotate(0,-Dn,!0):Ze.key==="ArrowDown"?Ze.shiftKey?st.forward(-un,!0):st.rotate(0,Dn,!0):Ze.key==="ArrowLeft"?st.rotate(-Dn,0,!0):st.rotate(Dn,0,!0);return}let Ft=xe(Ze);R.has(Ft)&&(Ze.preventDefault(),Ei.current.add(Ft),vn.current===null&&(vn.current=requestAnimationFrame(dn)))},qt=Ze=>{Ei.current.delete(xe(Ze))};return b.addEventListener("keydown",On),b.addEventListener("keyup",qt),b.addEventListener("blur",Xe),()=>{b.removeEventListener("keydown",On),b.removeEventListener("keyup",qt),b.removeEventListener("blur",Xe),Xe()}},[yt,ke,kt,ht]);let yo=(0,L.useRef)(null),[or,ki]=(0,L.useState)(o),[si,Ri]=(0,L.useState)({}),[Ni,Bi]=(0,L.useState)(null),[pa,ma]=(0,L.useState)(null),[Zs,Wc]=(0,L.useState)(null),[fa,Qs]=(0,L.useState)(null),[Un,ha]=(0,L.useState)(null),[br,Ur]=(0,L.useState)(null),xn=(0,L.useRef)(null),vr=(0,L.useRef)(!1),li=(0,L.useRef)(!1),wo=(0,L.useRef)(!!C);wo.current=!!C;let ar=(0,L.useRef)(null),[_o,ci]=(0,L.useState)(!!e),[Li,di]=(0,L.useState)(!e||!!Oe||!!C),[xr,ga]=(0,L.useState)(!1),[el,So]=(0,L.useState)(!1),[ba,Oi]=(0,L.useState)(!1),[va,xa]=(0,L.useState)(!1),[Mo,Vr]=(0,L.useState)(null),[tl,z]=(0,L.useState)(!1),[J,ce]=(0,L.useState)({total:0,missing:0}),[Be,Fe]=(0,L.useState)("Loading model..."),Dt=(0,L.useRef)({}),rt=(0,L.useCallback)(()=>{let b=X.current;if(!b||ar.current)return;let R=b.getPosition(new gt.Vector3),ee=b.getTarget(new gt.Vector3);ar.current={position:[R.x,R.y,R.z],target:[ee.x,ee.y,ee.z]}},[]),[cn,ya]=(0,L.useState)(!1),[nl,Xc]=(0,L.useState)(0),[rl,$c]=(0,L.useState)(!1);(0,L.useEffect)(()=>{Xc(0),$c(!1)},[e]);let Co=(0,L.useMemo)(()=>{let b=be.cinematic,R=b?.enabled?{waypoints:b.waypoints,duration:b.duration,loop:b.loop,autoPlay:b.autoPlay}:null;return je===void 0?R&&(R.waypoints?.length??0)>=2?R:null:je===!1?null:je===!0?R??{}:{...R??{},...je}},[je,be]),[ui,yr]=(0,L.useState)(!1),[Xf,Di]=(0,L.useState)(!1),il=(0,L.useRef)(!1);(0,L.useEffect)(()=>{yr(!1),Di(!1),il.current=!1},[e]),(0,L.useEffect)(()=>{!Co?.autoPlay||il.current||xr&&Li&&!_o&&(il.current=!0,yr(!0),Di(!1))},[Co,xr,Li,_o]);let{xrStore:pi,presenterRef:$f,arSupported:ol,vrSupported:Yc,quickLookSupported:Kc,resolvedMobileHandoffUrl:wa,isMobileHandoffOpen:qc,arOverlay:Yf,openMobileHandoff:Kf,closeMobileHandoff:Jc,openQuickLook:qf,handleARStateChange:Jf}=Yd({enableXR:ne,usdzUrl:de,mobileHandoffUrl:jt}),[wr,Zc]=(0,L.useState)(()=>F?.annotations??[]);(0,L.useEffect)(()=>{if(wr.length>0){let b=wr.reduce((R,ee)=>Math.max(R,ee.id),0);Ma.current=b}else Ma.current=0},[wr]);let[Ln,_a]=(0,L.useState)(null),[jr,Sa]=(0,L.useState)({title:"",description:""}),Ma=(0,L.useRef)(0),[Zf,Qc]=(0,L.useState)(null),[Gn,Ii]=(0,L.useState)(-1),[ed,Ca]=(0,L.useState)(!1),zi=(0,L.useRef)(null),Kt=(0,L.useMemo)(()=>[...wr].sort((b,R)=>b.id-R.id),[wr]),Pa=(0,L.useMemo)(()=>Gn<0||Gn>=Kt.length?null:Kt[Gn],[Gn,Kt]),_r=(0,L.useCallback)(b=>{if(c!==void 0){m?.(b);return}Qc(b?{annotation:b}:null)},[c,m]),Ui=(0,L.useCallback)(b=>{let R=X.current,ee=xn.current;if(!R)return;let te=new gt.Vector3,xe=Se.current.get(b.id);xe?te.copy(xe):ee&&qb(b,ee,te)||te.set(b.worldPosition[0],b.worldPosition[1],b.worldPosition[2]),re.current=null;let Xe=R.smoothTime;R.smoothTime=.6;let dn=b.worldNormal;if(ee){let On=new gt.Box3().setFromObject(ee),qt=new gt.Vector3;On.getCenter(qt);let Ze=new gt.Vector3;On.getSize(Ze);let Ft=Ze.length()*.2,st;dn?st=new gt.Vector3(dn[0],dn[1],dn[2]):st=te.clone().sub(qt),st.lengthSq()<1e-6&&st.set(0,0,1),st.normalize();let Dn=Math.max(Ft*.6,.3),un=te.clone().add(st.multiplyScalar(Dn));R.setPosition(un.x,un.y,un.z,!0),b.anchorNodeName&&b.anchorLocalPosition&&(re.current=un.clone().sub(te))}R.setTarget(te.x,te.y,te.z,!0),zi.current&&clearTimeout(zi.current),zi.current=setTimeout(()=>{R.smoothTime=Xe,zi.current=null},800),_r(b)},[_r]),Qf=(0,L.useCallback)(()=>{Kt.length!==0&&(ya(!0),Ii(0),Ui(Kt[0]))},[Kt,Ui]),eh=(0,L.useCallback)(()=>{if(Kt.length===0||Gn<0)return;Ca(!0);let b=(Gn-1+Kt.length)%Kt.length;Ii(b),Ui(Kt[b]),setTimeout(()=>Ca(!1),500)},[Gn,Kt,Ui]),th=(0,L.useCallback)(()=>{if(Kt.length===0||Gn<0)return;if(Gn===Kt.length-1){if(ya(!1),Ii(-1),_r(null),X.current&&ar.current){let R=ar.current;X.current.setLookAt(R.position[0],R.position[1],R.position[2],R.target[0],R.target[1],R.target[2],!0)}return}Ca(!0);let b=Gn+1;Ii(b),Ui(Kt[b]),setTimeout(()=>Ca(!1),500)},[Gn,Kt,Ui,_r]),nh=(0,L.useCallback)(()=>{if(ya(!1),Ii(-1),_r(null),X.current&&ar.current){let b=ar.current;X.current.setLookAt(b.position[0],b.position[1],b.position[2],b.target[0],b.target[1],b.target[2],!0)}},[_r]);(0,L.useEffect)(()=>{Ii(-1),ya(!1)},[Kt.length]),(0,L.useEffect)(()=>()=>{zi.current&&clearTimeout(zi.current)},[]),(0,L.useEffect)(()=>{Pa&&cn&&_r(Pa)},[Pa,_r,cn]),(0,L.useEffect)(()=>{if(F?.annotations===void 0)return;let b=F.annotations.map(R=>({...R,localPosition:R.localPosition??R.worldPosition}));Zc(b)},[F?.annotations]);let Po=(0,L.useCallback)(()=>{if(c!==void 0){m?.(null);return}Qc(null)},[c,m]),Ao=c!==void 0?c:Zf?.annotation??null,To=(0,L.useMemo)(()=>Ao?wr.find(R=>R.id===Ao.id)??null:null,[Ao,wr]);(0,L.useEffect)(()=>{Ao&&!To&&Po()},[Ao,To,Po]);let Eo=s!==void 0,Pt=Eo?o:or;Dt.current=Pt;let rh=(0,L.useMemo)(()=>Object.entries(Pt).map(([b,R])=>JSON.stringify([b,R.modelObjectId,R.transform??null])).sort().join(""),[Pt]),{measureMode:ko,measureModeRef:ih,measurePoints:td,showDimensions:al,measureBox:nd,modelBounds:oh,refreshBounds:rd,clearMeasurements:ah,toggleMeasureMode:sh,toggleDimensions:lh,handleMeasurePointerDown:ch,handleMeasureClick:dh}=jd({canvasAreaRef:xt,controlsRef:X,sceneRef:xn,modelUrl:e,modelRotation:be.model.rotation,bindingTransformSignature:rh,modelLoaded:xr}),{isDownloading:sl,downloadMenuOpen:uh,uvExportError:id,toggleDownloadMenu:ph,handleDownloadMesh:mh,handleDownloadScreenshot:fh,handleDownloadUvLayout:hh}=Vd({sceneRef:xn,materialRefs:nn,rendererCaptureRef:We,objectBindings:Pt,downloadFilename:H}),od=(0,L.useMemo)(()=>Object.fromEntries(Object.entries(Pt).filter(([,b])=>b.visible===!1).map(([b])=>[b,!0])),[Pt]),Rr=(0,L.useMemo)(()=>{let b=new WeakMap,R=new Map,ee=new Map;for(let[te,xe]of Object.entries(Pt))b.set(xe,te),R.has(xe.id)||R.set(xe.id,te),ee.has(xe.modelObjectId)||ee.set(xe.modelObjectId,te);return{byReference:b,byId:R,byModelObjectId:ee}},[Pt]),Fr=(0,L.useCallback)(b=>b?Rr.byReference.get(b)??Rr.byModelObjectId.get(b.modelObjectId)??Rr.byId.get(b.id)??null:null,[Rr]),ll=n!==void 0,cl=ll?n??null:fa,Sr=Fr(cl),dl=Sr?ge.current[Sr]??null:null,ad=Fr(Ae?i??pa??Zs:null),gh=ad?ge.current[ad]??null:null,bh=(0,L.useCallback)(b=>{Wc(b),a?.(b)},[a]),sd=h&&cl!==null&&Sr!==null,ld=(Sr?Pt[Sr]:null)??cl;(0,L.useEffect)(()=>{Eo||ki(o)},[Eo,o]),(0,L.useEffect)(()=>{p?.(od)},[od,p]);let Vi=(0,L.useCallback)(b=>{ll||Qs(b),l?.(b)},[ll,l]),ji=(0,L.useCallback)(b=>{Eo||ki(b),s?.(b)},[Eo,s]),vh=(0,L.useCallback)(b=>{let R=Sr;if(!R||!b)return;let ee=Dt.current[R];ee&&ji({...Dt.current,[R]:{...ee,transform:{...ee.transform,...b}}})},[ji,Sr]),Nr=(0,L.useCallback)((b,R)=>Pt[b]?b:R?Fr(R):Rr.byId.get(b)??Rr.byModelObjectId.get(b)??null,[Pt,Fr,Rr]),Ro=(0,L.useCallback)((b,R)=>{let ee=Nr(b),te=ee?Pt[ee]:void 0;!ee||!te||ji({...Pt,[ee]:{...te,style:R(te.style)}})},[Nr,Pt,ji]),Wn=(0,L.useCallback)(()=>{if(Un){let b=si[Un.objectId]?.hex;b!==void 0&&(Ro(Un.objectId,R=>({...R,material:{...R?.material,baseColor:b}})),Ri(R=>({...R,[Un.objectId]:{}})))}ha(null)},[Un,si,Ro]),cd=(0,L.useCallback)(()=>{Vi(null),Bi(null),Wn(),Ur(null)},[Vi,Wn]),ul=(0,L.useCallback)((b,R,ee,te,xe)=>{let Xe=nt.current,dn=xt.current,On=X.current?.camera;if(!Xe)return{objectId:b,x:24,y:24};let qt=Xe.getBoundingClientRect(),Ze=12,Ft=qt.width-R-Ze,st=qt.height-ee-Ze,Dn=Math.max(Ze,(qt.width-R)/2),un=Math.max(Ze,(qt.height-ee)/2),Hi=Nr(b,te),vd=Hi?ge.current[Hi]:null,Ta=(Gi,mi)=>mi<=Ze?Ze:Math.min(Math.max(Gi,Ze),mi);if(dn&&On&&vd){let Gi=dn.getBoundingClientRect(),mi=new gt.Vector3;new gt.Box3().setFromObject(vd).getCenter(mi),mi.project(On);let Ih=(mi.x+1)/2*Gi.width+(Gi.left-qt.left),zh=(1-mi.y)/2*Gi.height+(Gi.top-qt.top);return{objectId:b,x:Ta(Ih+24,Ft),y:Ta(zh-ee/2,st)}}let Oh=typeof xe?.screenX=="number"?xe.screenX-qt.left:Dn,Dh=typeof xe?.screenY=="number"?xe.screenY-qt.top:un;return{objectId:b,x:Ta(Oh,Ft),y:Ta(Dh,st)}},[Nr]),Aa=(0,L.useCallback)(b=>{let{objectId:R,action:ee,binding:te}=b;switch(Bi(b),ee.id){case"toggle-visibility":{let xe=R;te?.modelObjectId&&(xe=Rr.byModelObjectId.get(te.modelObjectId)??xe);let Xe=Pt[xe],dn=Xe?.visible===!1;Xe&&ji({...Pt,[xe]:{...Xe,visible:dn}});break}case"change-color":Wn(),Ur(null),Ri(xe=>{let Xe=Nr(R,te)??R,dn=xe[R]?.hex,On=Pt[Xe]?.style?.material?.baseColor;return{...xe,[R]:{...xe[R],hex:dn??On??"#ffffff"}}}),ha(ul(R,225,250,te,b));break;case"change-material":Wn(),Ur(ul(R,300,320,te,b));break;default:break}d?.(b)},[ji,Pt,ul,d,Wn,Nr,Rr]);(0,L.useEffect)(()=>{if(Un)return window.addEventListener("pointerdown",Wn),()=>window.removeEventListener("pointerdown",Wn)},[Un,Wn]),(0,L.useEffect)(()=>{if(!br)return;let b=()=>Ur(null);return window.addEventListener("pointerdown",b),()=>window.removeEventListener("pointerdown",b)},[br]),(0,L.useEffect)(()=>{if(!To)return;let b=R=>{if(yo.current&&!yo.current.contains(R.target)){if(R.target.closest?.(".ri-annotationMarker"))return;Po()}};return document.addEventListener("mousedown",b),document.addEventListener("touchstart",b),()=>{document.removeEventListener("mousedown",b),document.removeEventListener("touchstart",b)}},[To,Po]),(0,L.useEffect)(()=>{if(!Ln)return;let b=R=>{let ee=R.target;if(ee.closest?.(".ri-annotationPopup")||ee.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let te=xt.current;!te||!te.contains(ee)||(_a(null),Sa({title:"",description:""}))};return document.addEventListener("mousedown",b,!0),document.addEventListener("touchstart",b,!0),()=>{document.removeEventListener("mousedown",b,!0),document.removeEventListener("touchstart",b,!0)}},[Ln]);let dd=(0,L.useCallback)((b,R)=>{let ee=tt.current[b];ee&&URL.revokeObjectURL(ee),R.startsWith("blob:")?tt.current[b]=R:delete tt.current[b],Ro(b,te=>({...te,material:{...te?.material,texture:{path:R}}}))},[Ro]),xh=b=>{let R=b.target.files?.[0],ee=Lt.current;if(!R||!ee)return;let te=Nr(ee);te&&(_?_(R,te).then(xe=>dd(te,xe),xe=>console.error("onTextureUpload failed:",xe)):dd(te,URL.createObjectURL(R)),b.target.value="")},ud=b=>{Lt.current=b,at.current?.click()},pd=b=>{let R=Nr(b);if(!R)return;Ro(R,te=>te?.material?.texture?{...te,material:{...te.material,texture:void 0}}:te);let ee=tt.current[R];ee&&(URL.revokeObjectURL(ee),delete tt.current[R])},pl=(0,L.useRef)(x);pl.current=x;let sr=(0,L.useCallback)(()=>{let b=X.current;!b||!pl.current||pl.current({controls:b,scene:xn.current,objectBindings:Dt.current,nodeRefs:ge.current,homeCameraState:ar.current,captureImage:R=>La(We.current,R),invalidate:()=>We.current?.invalidate()})},[]),Fi=(0,L.useCallback)(async(b=!1)=>{let R=X.current,ee=xn.current;if(!R||!ee)return!1;try{if(b){let te=R.getTarget(new gt.Vector3),Xe=R.getPosition(new gt.Vector3).clone().sub(te);Xe.lengthSq()<1e-6&&Xe.set(0,0,1),Xe.normalize();let dn=new gt.Box3().setFromObject(ee).getBoundingSphere(new gt.Sphere),On=Math.max(dn.radius*10,20),qt=te.clone().add(Xe.multiplyScalar(On));await R.setLookAt(qt.x,qt.y,qt.z,te.x,te.y,te.z,!1)}return di(!0),await Qp(R,()=>R.fitToBox(ee,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(te=>{let xe=performance.now(),Xe=()=>{R.active===!1||performance.now()-xe>8e3?(R.dispatchEvent({type:"update"}),We.current?.invalidate(),te()):(We.current?.invalidate(),setTimeout(Xe,100))};setTimeout(Xe,100)}),vr.current=!0,rt(),sr(),!0}catch(te){return console.error("Fit scene error:",te),!1}},[rt,sr]);(0,L.useEffect)(()=>{if(vr.current=!1,li.current=!1,ar.current=null,xn.current=null,ga(!1),So(!1),Oi(!1),ce({total:0,missing:0}),Fe("Loading model..."),!e){ci(!1),di(!0);return}ci(!0),di(!!Oe||wo.current);let b=!1,R=null,ee=xe=>{R=setTimeout(te,xe)},te=()=>{if(b||vr.current||li.current)return;if(!X.current||!xn.current){ee(100);return}if(Qb(xn.current,X.current),Lp(X.current)){vr.current=!0,rt(),sr(),ci(!1),di(!0),We.current?.invalidate();return}li.current=!0,(Oe?Oe():wo.current?Promise.resolve(!0):Fi(!0)).then(Xe=>{vr.current=Xe!==!1,vr.current?(rt(),sr(),ci(!1)):b||ee(100)}).catch(()=>{vr.current=!1,b||ee(100)}).finally(()=>{li.current=!1})};return ee(50),()=>{b=!0,R&&clearTimeout(R)}},[rt,Fi,e,sr,Oe]),(0,L.useEffect)(()=>{if(!bt)return;let b=yt;if(!b)return;let R=null,ee=new ResizeObserver(()=>{!vr.current||li.current||(R&&clearTimeout(R),R=setTimeout(()=>{Fi()},150))});return ee.observe(b),()=>{ee.disconnect(),R&&clearTimeout(R)}},[yt,Fi,bt]);let yh=(0,L.useCallback)(b=>{if(ih.current||(yr(!1),Wn(),Ur(null),Bi(null),Vi(b),Ee||!le))return;let R=X.current,ee=Fr(b),te=ee?ge.current[ee]:null;R&&b.cameraState?.position&&b.cameraState?.target?(R.setPosition(b.cameraState.position[0],b.cameraState.position[1],b.cameraState.position[2],!0),R.setTarget(b.cameraState.target[0],b.cameraState.target[1],b.cameraState.target[2],!0)):R&&te&&R.fitToBox(te,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[Vi,Wn,Fr,Ee,le]),md=(0,L.useCallback)(b=>{if(Vi(b),Ee)return;let R=X.current,ee=Fr(b),te=ee?ge.current[ee]:null;if(!R||!te)return;let xe=b.cameraState;xe?.position&&xe?.target?(R.setPosition(xe.position[0],xe.position[1],xe.position[2],!0),R.setTarget(xe.target[0],xe.target[1],xe.target[2],!0)):R.fitToBox(te,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[Vi,Fr,Ee]);(0,L.useEffect)(()=>{sr()},[sr]);let fd=(0,L.useCallback)((b,R)=>{v?.(b,R),sr()},[sr,v]),wh=(0,L.useCallback)(b=>{xn.current=b,rd(b),ce(Zb(b));let R=Oo(b);Vr(R>fi?R:null),z(!1),R>fi&&Fe(`Preparing large model (${Math.round(R/1e6)}M triangles) \u2014 the first display can take a while on this device...`),ga(!0),So(!1),xa(!1),u?.(b),sr()},[sr,u,rd]),_h=(0,L.useCallback)(b=>{ci(!1),di(!0),So(!0),f?.(b)},[f]),Sh=(0,L.useCallback)((b,R)=>{if(!ae)return;let ee={...be,lighting:{...be.lighting,lights:be.lighting.lights.map(te=>te.id===b?{...te,position:R}:te)}};ae(ee)},[be,ae]);(0,L.useEffect)(()=>{let b=xn.current;if(!xr||!b){Oi(!1);return}let R=Object.entries(Pt);if(R.length===0){Oi(!1);return}let ee=new Set(Object.keys(Ji(b).nodesById)),te=R.some(([xe,Xe])=>!ee.has(Xe.modelObjectId??xe));Oi(te)},[xr,Pt]);let ml=(0,L.useCallback)(async()=>{if(Oe){await Oe();return}let b=X.current;if(!b)return;let R=ar.current;try{R?await Qp(b,()=>b.setLookAt(R.position[0],R.position[1],R.position[2],R.target[0],R.target[1],R.target[2],!0)):await Fi()}catch(ee){console.error("Reset camera error:",ee)}},[Oe,Fi]),Kv=(0,L.useCallback)(()=>{Di(!1),yr(!0)},[]),qv=(0,L.useCallback)(()=>{yr(!1)},[]),Mh=(0,L.useCallback)(()=>{yr(!1),Di(!0),setTimeout(()=>{ml()},100)},[ml]),Ch=(0,L.useCallback)((b,R)=>{fd(b,R)},[fd]),Ph=(0,L.useCallback)(b=>{if(_e!=="scene"||$e!=="Annotations"||b.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let ee=xt.current,te=X.current?.camera,xe=xn.current;if(!ee||!te||!xe)return;let Xe=ee.getBoundingClientRect(),dn=(b.clientX-Xe.left)/Xe.width*2-1,On=-((b.clientY-Xe.top)/Xe.height)*2+1,qt=new gt.Raycaster;qt.setFromCamera(new gt.Vector2(dn,On),te);let Ze=qt.intersectObject(xe,!0);if(Ze.length===0)return;let Ft=Ze[0],st=Ft.point,Dn=xe.worldToLocal(Ft.point.clone()),un=[0,0,1];if(Ft.face){let Hi=Ft.face.normal.clone().transformDirection(Ft.object.matrixWorld).normalize();un=[Hi.x,Hi.y,Hi.z]}_a({worldPosition:[st.x,st.y,st.z],localPosition:[Dn.x,Dn.y,Dn.z],worldNormal:un,anchor:Kb(Ft),screenX:b.clientX-Xe.left,screenY:b.clientY-Xe.top}),Sa({title:"",description:""})},[_e,$e]),hd=(0,L.useCallback)(()=>{if(!Ln||!jr.title.trim())return;Ma.current+=1;let R={id:Ma.current,worldPosition:Ln.worldPosition,localPosition:Ln.localPosition,worldNormal:Ln.worldNormal,anchorNodeName:Ln.anchor?.anchorNodeName,anchorLocalPosition:Ln.anchor?.anchorLocalPosition,title:jr.title.trim(),description:jr.description},ee=[...wr,R];Zc(ee),y?.(ee),_a(null)},[Ln,jr,wr,y]),fl=(0,L.useCallback)(()=>_a(null),[]),Ah=(0,L.useCallback)(b=>{_r(b)},[_r]);if(Ie.status==="checking")return(0,O.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,O.jsx)(hi,{title:"Verifying License",message:"Checking your license key..."})});if(Ie.status==="invalid")return(0,O.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,O.jsx)(hi,{tone:"error",title:"Invalid License",message:Ie.isLocalDomain?Ie.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let gd=br?Nr(br.objectId):null,bd=gd?Pt[gd]?.style?.material?.texture?.path:void 0,Th=xt.current?.offsetWidth??600,Eh=xt.current?.offsetHeight??400,kh=350,Rh=290,Nh=Ln?Math.min(Ln.screenX+12,Th-kh-8):0,Bh=Ln?Math.min(Ln.screenY,Eh-Rh-8):0,Lh=k&&!!e&&!el&&(!xr||!Li||_o),No=ne&&(pi&&(ol||Yc)||Kc||!!wa),Bo=b=>16+b*42;return(0,O.jsxs)("div",{className:"ri-viewer",style:{background:B},children:[(0,O.jsxs)("div",{className:"ri-viewerLeft",ref:nt,children:[w?w({isOpen:sd,selectedObject:ld,currentAction:Ni,onClose:cd,onAction:Aa}):(0,O.jsx)(tc,{isOpen:sd,selectedObject:ld,currentAction:Ni,onClose:cd,onAction:Aa,renderActionExtra:b=>b==="change-color"&&Un?(0,O.jsx)(Ql,{inline:!0,colorPicker:Un,onClose:Wn,itemMaterials:si,setItemMaterials:Ri}):b==="change-material"&&br?(0,O.jsx)(ec,{inline:!0,triggerFileUpload:ud,materialPopup:br,textureUrl:bd,clearTexture:pd}):null}),(0,O.jsxs)("div",{className:`ri-canvasArea ${ko?"ri-canvasArea--measuring":""} ${Li?"":"ri-canvasArea--positioning"} ${ht?"ri-canvasArea--moveMode":""}`,ref:Js,tabIndex:kt?0:void 0,onDoubleClick:Ph,onPointerDown:b=>{kt&&xt.current?.focus({preventScroll:!0}),ch(b)},onClick:dh,children:[ba&&!va&&(0,O.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,O.jsx)(Me.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,O.jsx)("span",{children:"Object bindings data don't match this model"}),(0,O.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:b=>{b.stopPropagation(),xa(!0)},"aria-label":"Dismiss",children:(0,O.jsx)(Me.X,{size:12})})]}),Mo!==null&&!tl&&(0,O.jsxs)("div",{className:`ri-largeModelBanner ${ba&&!va?"ri-largeModelBanner--offset":""}`,children:[(0,O.jsx)(Me.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,O.jsxs)("span",{children:["Very large model (",Math.round(Mo/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,O.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:b=>{b.stopPropagation(),z(!0)},"aria-label":"Dismiss",children:(0,O.jsx)(Me.X,{size:12})})]}),he.model.renderer==="uv-checker"&&J.missing>0&&(0,O.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,O.jsx)(Me.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,O.jsxs)("span",{children:[J.missing===J.total?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${J.missing} of ${J.total} meshes have no UV0 coordinates.`," ","Missing UVs are shown in magenta."]})]}),(0,O.jsx)("input",{ref:at,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:xh}),(0,O.jsxs)(kl,{camera:C,backgroundColor:N,shadows:E&&be.shadows.enabled,sceneConfig:he,selectedObjectRef:dl,hoveredObjectRef:gh,highlightOnHover:Ae,renderMode:$t,maxDpr:Ue,reduceGpuLoad:K,xrStore:pi,rendererCaptureRef:We,preserveDrawingBuffer:Ve,children:[S??(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(Bl,{lightingConfig:be.lighting,shadowConfig:be.shadows,shadowsEnabled:E,environmentRotation:be.environment.rotation,environmentConfig:be.environment,modelBounds:oh,objectBindings:Pt,nodeRefs:ge}),De&&be.lighting.lights.map(b=>!b.visible||b.type==="none"||b.type==="hemisphere"||b.attachment?null:(0,O.jsx)(Kp,{light:b,position:b.position,color:b.color,intensity:b.intensity,visible:b.visible,onPositionChange:R=>Sh(b.id,R)},b.id))]}),(0,O.jsx)(Rl,{controlsRef:X,onCameraChange:Ch}),Bn&&(0,O.jsx)(ys.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{X.current?.update(0),We.current?.invalidate()},children:(0,O.jsx)(ys.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),ht&&dl&&Sr&&(0,O.jsx)(dc,{node:dl,space:Yt,onTransformChange:vh,onDraggingChange:se},Sr),(0,O.jsx)(Ba,{onLoadError:_h,children:(0,O.jsx)(L.Suspense,{fallback:null,children:(()=>{let b=(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(Hl,{url:e,modelFormat:t,objectBindings:Pt,selectedItem:Sr,itemMaterials:si,onItemClick:yh,onItemHover:bh,onModelLoaded:wh,onAnimationsReady:T,nodeRefsOut:ge,onNodeRefsChange:bn,materialRefsOut:nn,panelHoveredItem:i??pa,sceneConfig:he,zoomOnSelected:le,highlightOnHover:Ae,decoderConfig:I,explodeFactor:nl,suspendBindingTransforms:Z}),(0,O.jsx)(Wl,{annotations:wr,sceneConfig:be,activeAnnotation:To,popupRef:yo,canvasRootRef:xt,worldPositionsRef:Se,modelLoaded:xr,onAnnotationClick:Ah,onCloseAnnotation:Po,hideCloseButton:cn,showAnnotationOnHover:ut}),(0,O.jsx)(Jb,{annotation:Pa,enabled:cn,controlsRef:X,offsetRef:re}),Co&&(0,O.jsx)($l,{controlsRef:X,sceneRef:xn,config:Co,playing:ui,resetOnPlay:Xf,onFinished:()=>{yr(!1),Di(!1)},onUserInteract:()=>{yr(!1)}}),Mt&&(0,O.jsx)(Xl,{points:td,unit:Et,box:nd,showDimensions:al})]});return pi?(0,O.jsx)(wp,{ref:$f,box:nd,scaleMode:Gt,onARStateChange:Jf,children:b}):b})()})},e)]}),(0,O.jsx)(ao,{visible:Lh,message:Be}),No&&(0,O.jsxs)("div",{className:"ri-xrTools",style:{top:`${Bo(0)}px`},children:[!ol&&Kc&&(0,O.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:qf,title:"View this model in AR with Apple Quick Look",children:[(0,O.jsx)(Me.Box,{size:16}),"View in AR"]}),wa&&(0,O.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:Kf,title:"Open this experience on a phone for AR","aria-haspopup":"dialog","aria-expanded":qc,children:[(0,O.jsx)(Me.QrCode,{size:16}),(0,O.jsx)("span",{children:"Open on phone"})]}),pi&&ol&&(0,O.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>pi.enterAR().catch(b=>{console.error("Failed to enter AR session:",b)}),title:"View this model in your space",children:[(0,O.jsx)(Me.Smartphone,{size:16}),(0,O.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,O.jsx)("span",{children:"AR"})]}),pi&&Yc&&(0,O.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>pi.enterVR().catch(b=>{console.error("Failed to enter VR session:",b)}),title:"View this model in VR",children:[(0,O.jsx)(Me.RectangleGoggles,{size:16}),(0,O.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,O.jsx)("span",{children:"VR"})]})]}),Yf,qc&&wa&&(0,O.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:b=>{b.target===b.currentTarget&&Jc()},children:(0,O.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,O.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:Jc,"aria-label":"Close phone handoff",children:(0,O.jsx)(Me.X,{size:18})}),(0,O.jsx)(Me.Smartphone,{size:22,"aria-hidden":"true"}),(0,O.jsx)("h2",{id:"ri-mobileHandoffTitle",children:"View in AR"}),(0,O.jsx)("p",{children:"Scan the code and choose AR."}),(0,O.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,O.jsx)(em.QRCodeSVG,{value:wa,size:208,level:"M",marginSize:4,title:"QR code to open this model on a phone"})})]})}),Ct&&(0,O.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${Bo(No?1:0)}px`},children:(0,O.jsx)("button",{type:"button",className:`ri-measureButton ${ln?"ri-measureButton--active":""}`,onClick:()=>Nt(b=>!(b??Bt)),title:ln?"Disable UV checker":"Enable UV checker","aria-label":ln?"Disable UV checker":"Enable UV checker","aria-pressed":ln,children:(0,O.jsx)(Me.Grid3X3,{size:16})})}),Mt&&(0,O.jsxs)("div",{className:"ri-measureTools",style:{top:`${Bo((No?1:0)+(Ct?1:0))}px`},children:[(0,O.jsx)("button",{type:"button",className:`ri-measureButton ${ko?"ri-measureButton--active":""}`,onClick:sh,title:ko?"Stop measuring":"Measure distance","aria-pressed":ko,children:(0,O.jsx)(Me.PencilRuler,{size:16})}),(0,O.jsx)("button",{type:"button",className:`ri-measureButton ${al?"ri-measureButton--active":""}`,onClick:lh,title:"Toggle bounding dimensions","aria-pressed":al,children:(0,O.jsx)(Me.RulerDimensionLine,{size:16})}),td.length>0&&(0,O.jsx)("button",{type:"button",className:"ri-measureButton",onClick:ah,title:"Clear measurements",children:(0,O.jsx)(Me.Eraser,{size:16})}),ko&&(0,O.jsx)("span",{className:"ri-measureHint",children:"Click points on the model to measure"})]}),En&&(0,O.jsxs)("div",{className:"ri-explodeTools",style:{top:`${Bo((No?1:0)+(Ct?1:0)+(Mt?1:0))}px`},children:[(0,O.jsx)("button",{type:"button",className:`ri-measureButton ${rl||nl>0?"ri-measureButton--active":""}`,onClick:()=>$c(b=>!b),title:"Exploded view","aria-pressed":rl,children:(0,O.jsx)(Me.Expand,{size:16})}),rl&&(0,O.jsx)("div",{className:"ri-explodeSlider",onPointerDown:b=>b.stopPropagation(),children:(0,O.jsx)("input",{type:"range",min:0,max:100,value:Math.round(nl*100),onChange:b=>Xc(Number(b.target.value)/100),"aria-label":"Explode amount"})})]}),Co&&(0,O.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${Bo((No?1:0)+(Ct?1:0)+(Mt?1:0)+(En?1:0))}px`},children:[(0,O.jsx)("button",{type:"button",className:`ri-measureButton ${ui?"ri-measureButton--active":""}`,onClick:()=>{ui?yr(!1):(Di(!1),yr(!0))},title:ui?"Pause cinematic":"Play cinematic","aria-pressed":ui,children:ui?(0,O.jsx)(Me.Pause,{size:16}):(0,O.jsx)(Me.Play,{size:16})}),ui&&(0,O.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:Mh,title:"Stop cinematic and reset camera",children:(0,O.jsx)(Me.Square,{size:16})})]}),(G||D||ot&&Kt.length>0)&&(0,O.jsxs)("div",{className:"ri-buttonContainer",children:[(0,O.jsx)("div",{className:"ri-tourControls",children:ot&&Kt.length>0&&(0,O.jsx)(O.Fragment,{children:cn?(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)("button",{className:"ri-tourButton",onClick:eh,disabled:ed||Kt.length===0||Gn<=0,title:"Previous annotation",children:[(0,O.jsx)(Me.ChevronLeft,{size:16}),(0,O.jsx)("span",{children:"Prev"})]}),(0,O.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:nh,title:"Stop guided tour",children:(0,O.jsx)(Me.Square,{size:16})}),(0,O.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:th,disabled:ed||Kt.length===0,title:"Next annotation",children:[(0,O.jsx)("span",{children:"Next"}),(0,O.jsx)(Me.ChevronRight,{size:16})]})]}):(0,O.jsx)("button",{className:"ri-navButtonSingle",onClick:Qf,disabled:Kt.length===0,title:"Start guided tour",children:"Guided Tour"})})}),(0,O.jsxs)("div",{className:"ri-rightControls",children:[G&&(0,O.jsx)("button",{className:"ri-resetButton",onClick:ml,title:"Reset camera view",children:(0,O.jsx)(Me.RotateCcw,{})}),D&&(0,O.jsxs)("div",{className:"ri-downloadWrapper",onPointerDown:b=>b.stopPropagation(),children:[uh&&(0,O.jsxs)("div",{className:"ri-downloadMenu",children:[(0,O.jsxs)("button",{className:"ri-downloadMenuItem",onClick:mh,disabled:sl||!xn.current,children:[(0,O.jsx)(Me.Box,{size:14}),"Download GLB"]}),(0,O.jsx)("div",{className:"ri-downloadMenuDivider"}),Ve&&(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)("button",{className:"ri-downloadMenuItem",onClick:fh,disabled:!xn.current,children:[(0,O.jsx)(Me.Camera,{size:14}),"Download PNG"]}),(0,O.jsx)("div",{className:"ri-downloadMenuDivider"})]}),(0,O.jsxs)("button",{className:"ri-downloadMenuItem",onClick:hh,disabled:!xn.current,children:[(0,O.jsx)(Me.FileImage,{size:14}),"Download UV Layout"]}),id&&(0,O.jsx)("div",{className:"ri-downloadMenuNotice",role:"status","aria-live":"polite",children:id})]}),(0,O.jsx)("button",{className:"ri-downloadButton",onClick:ph,disabled:sl||!xn.current,title:"Download options",children:sl?(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)("span",{className:"ri-downloadButton__spinner"}),"Exporting\u2026"]}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(Me.Download,{size:15}),"Download"]})})]})]})]}),Ln&&(0,O.jsxs)("div",{className:"ri-annotationPopup",style:{left:Nh,top:Bh},onPointerDown:b=>b.stopPropagation(),onClick:b=>b.stopPropagation(),children:[(0,O.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:"Title *",value:jr.title,onChange:b=>Sa(R=>({...R,title:b.target.value})),onKeyDown:b=>{b.key==="Enter"&&hd(),b.key==="Escape"&&fl()}}),(0,O.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:"Description",value:jr.description,onChange:b=>Sa(R=>({...R,description:b.target.value})),onKeyDown:b=>{b.key==="Escape"&&fl()},rows:5}),(0,O.jsxs)("div",{className:"ri-annotationActions",children:[(0,O.jsx)("button",{onClick:hd,className:`ri-annotationOkBtn ${jr.title.trim()?"":"disabled"}`,disabled:!jr.title.trim(),children:"OK"}),(0,O.jsx)("button",{onClick:fl,className:"ri-annotationCancelBtn",children:"Cancel"}),(0,O.jsx)("div",{className:"ri-annotationIcons"})]})]})]}),w&&Un&&(0,O.jsx)(Ql,{colorPicker:Un,onClose:Wn,itemMaterials:si,setItemMaterials:Ri}),w&&br&&(0,O.jsx)(ec,{triggerFileUpload:ud,materialPopup:br,textureUrl:bd,clearTexture:pd})]}),M&&(0,O.jsx)("div",{className:"ri-viewerRight",children:g?g({objectBindings:Pt,onAction:Aa,onFocus:md,onHover:ma}):(0,O.jsx)(nc,{objectBindings:Pt,onAction:Aa,onFocus:md,onHover:ma})}),$&&(0,O.jsx)(Tp,{controlsRef:X,enabled:!0,opacity:P,moveSensitivity:A,position:j})]})}var ie=require("react"),Tn=require("lucide-react");var Tt=require("react"),uc=require("three");function tm(e){return[e.x,e.y,e.z]}function Jr(e,t){let r=new uc.Vector3,o=new uc.Vector3;return t.getPosition(r),t.getTarget(o),{position:tm(r),target:tm(o),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 ev(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 Qo(e,t,r=.6){let o=e.smoothTime;e.smoothTime=r;try{return await t()}finally{e.smoothTime=o}}function _s(e={}){let t=(0,Tt.useRef)(e);t.current=e;let r=(0,Tt.useRef)(null),[o,n]=(0,Tt.useState)(null),[i,s]=(0,Tt.useState)(()=>({...e.presets})),l=(0,Tt.useRef)(i);l.current=i;let a=(0,Tt.useCallback)(w=>{n(g=>ev(g,w)?g:w)},[]),u=(0,Tt.useCallback)((w,g)=>{a(Jr(w,g))},[a]),f=(0,Tt.useRef)(null),d=(0,Tt.useRef)(null),p=(0,Tt.useRef)(null),v=(0,Tt.useCallback)(w=>{r.current=w;let g=Jr(w.controls.camera,w.controls);a(g),w.scene!==d.current&&(d.current=w.scene,f.current=null,p.current=null),w.homeCameraState&&!f.current&&(f.current=w.homeCameraState);let{initialPosition:M,initialTarget:D,initialTransition:H=!1}=t.current;if((M||D)&&w.scene&&(M||w.homeCameraState)&&p.current!==w.controls){p.current=w.controls,w.homeCameraState||so(w.controls);let G=M??g.position,k=D??g.target;w.controls.setLookAt(G[0],G[1],G[2],k[0],k[1],k[2],H).then(()=>{if(r.current?.controls!==w.controls)return;let $=Jr(w.controls.camera,w.controls);f.current={position:$.position,target:$.target},a($)}).catch(()=>{})}},[a]),x=(0,Tt.useCallback)(async()=>{let w=r.current,g=w?.controls;if(!g)return!1;try{let M=f.current;return M?await Qo(g,()=>g.setLookAt(M.position[0],M.position[1],M.position[2],M.target[0],M.target[1],M.target[2],!0)):w?.scene?await Qo(g,()=>g.fitToBox(w.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await Qo(g,()=>g.reset(!0)),!0}catch{return!1}},[]),_=(0,Tt.useCallback)(async()=>{let w=r.current;if(!w?.controls||!w.scene)return!1;try{return await Qo(w.controls,()=>w.controls.fitToBox(w.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),T=(0,Tt.useCallback)(async w=>{let g=r.current;if(!g?.controls)return!1;let M=yn(g.objectBindings,w);if(!M)return!1;let D=g.nodeRefs[M];if(!D)return!1;try{return await Qo(g.controls,()=>g.controls.fitToBox(D,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),y=(0,Tt.useCallback)(async(w,g=!0)=>{let M=r.current?.controls;if(!M)return!1;try{return r.current?.homeCameraState||so(M),await M.setTarget(w[0],w[1],w[2],g),a(Jr(M.camera,M)),!0}catch{return!1}},[a]),c=(0,Tt.useCallback)(async(w,g=!0)=>{let M=r.current?.controls;if(!M)return!1;try{r.current?.homeCameraState||so(M);let D=[M.setLookAt(w.position[0],w.position[1],w.position[2],w.target[0],w.target[1],w.target[2],g)];w.azimuthAngle!=null&&w.polarAngle!=null&&D.push(M.rotateTo(w.azimuthAngle,w.polarAngle,g)),await Promise.all(D);let H=M.camera,G=!1;return w.fov!=null&&"fov"in H&&typeof H.fov=="number"&&(H.fov=w.fov,G=!0),w.zoom!=null&&"zoom"in H&&typeof H.zoom=="number"&&(H.zoom=w.zoom,G=!0),G&&"updateProjectionMatrix"in H&&H.updateProjectionMatrix(),a(Jr(H,M)),!0}catch{return!1}},[a]),m=(0,Tt.useCallback)((w,g=!0)=>c(w,g),[c]),S=(0,Tt.useCallback)((w,g,M=!0)=>c({position:w,target:g},M),[c]),C=(0,Tt.useCallback)(async(w,g,M=!0)=>{let D=r.current?.controls;if(!D)return!1;try{return r.current?.homeCameraState||so(D),await D.rotateTo(w,g,M),a(Jr(D.camera,D)),!0}catch{return!1}},[a]),N=(0,Tt.useCallback)(async(w,g=!0)=>{let M=r.current?.controls;if(!M)return!1;try{return r.current?.homeCameraState||so(M),await M.dollyTo(w,g),a(Jr(M.camera,M)),!0}catch{return!1}},[a]),E=(0,Tt.useCallback)(w=>{let g=r.current?.controls,M=w.trim();if(!g||!M)return null;let D=Jr(g.camera,g);return l.current={...l.current,[M]:D},s(H=>({...H,[M]:D})),a(D),D},[a]),h=(0,Tt.useCallback)((w,g=!0)=>{let M=l.current[w];return M?c(M,g):Promise.resolve(!1)},[c]);return{cameraState:o,cameraPresets:i,resetView:x,focusObject:T,fitScene:_,setCameraTarget:y,setCameraState:m,lookAt:S,orbitTo:C,dollyTo:N,savePreset:E,goToPreset:h,handleCameraChange:u,handleViewerReady:v}}var on=require("react");function Ss(){let e=(0,on.useRef)(null),[t,r]=(0,on.useState)([]),o=(0,on.useRef)(null),[n,i]=(0,on.useState)([]),[s,l]=(0,on.useState)(null),[a,u]=(0,on.useState)(!1),[f,d]=(0,on.useState)(1),[p,v]=(0,on.useState)(0),[x,_]=(0,on.useState)(0);(0,on.useEffect)(()=>()=>{o.current?.()},[]);let T=(0,on.useCallback)(N=>{o.current?.(),e.current=N,r(N.clips),i(N.clipDetails??N.clips.map(h=>({sourceName:h,duration:0})));let E=N.getState?.()??{currentClip:null,isPlaying:!1,speed:1,time:0,duration:0};l(E.currentClip),u(E.isPlaying),d(E.speed),v(E.time),_(E.duration),N.subscribe?o.current=N.subscribe(h=>{l(h.currentClip),u(h.isPlaying),d(h.speed),v(h.time),_(h.duration)}):o.current=null},[]),y=(0,on.useCallback)(N=>{e.current?.play(N),l(N),u(!0)},[]),c=(0,on.useCallback)(()=>{e.current?.pause(),u(!1)},[]),m=(0,on.useCallback)(()=>{e.current?.stop(),l(null),u(!1),v(0)},[]),S=(0,on.useCallback)(N=>{e.current?.setSpeed(N),d(N)},[]),C=(0,on.useCallback)(N=>{e.current?.seek?.(N),v(N)},[]);return{clips:t,clipDetails:n,currentClip:s,isPlaying:a,speed:f,time:p,duration:x,play:y,pause:c,stop:m,setSpeed:S,seek:C,handleAnimationsReady:T}}var ks=require("react");var dm=require("react"),ei=require("lucide-react"),As=require("react-colorful");var Zr=require("react"),im=require("react-dom"),Ms=require("lucide-react"),Cs=require("react-colorful");function fo(e){let t=e.replace("#","").match(/.{2}/g).map(o=>parseInt(o,16)/255).map(o=>o<=.03928?o/12.92:Math.pow((o+.055)/1.055,2.4));return .2126*t[0]+.7152*t[1]+.0722*t[2]>.179?"#000":"#fff"}var nm=require("react");function rm(e,t,r){(0,nm.useEffect)(()=>{if(!r)return;let o=Array.isArray(e)?e:[e],n=i=>{let s=i.target;o.some(a=>a.current?.contains(s))||t()};return document.addEventListener("pointerdown",n,!0),()=>{document.removeEventListener("pointerdown",n,!0)}},[e,t,r])}var we=require("react/jsx-runtime");function pc({anchorRef:e,onClose:t,children:r}){let o=(0,Zr.useRef)(null),[n,i]=(0,Zr.useState)(null);return rm([o,e],t,!0),(0,Zr.useLayoutEffect)(()=>{let s=e.current;if(!s)return;let l=s.getBoundingClientRect(),a=222,u=8,f=Math.min(Math.max(l.right-a,u),window.innerWidth-a-u),d=Math.min(l.bottom+6,window.innerHeight-200);i({top:d,left:f})},[e]),n?(0,im.createPortal)((0,we.jsx)("div",{ref:o,className:"se-colorPickerPopover",style:{position:"fixed",top:n.top,left:n.left},children:r}),document.body):null}function tv(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 Si({title:e,children:t}){return(0,we.jsxs)("section",{className:"se-section",children:[(0,we.jsx)("h3",{className:"se-sectionTitle",children:e}),(0,we.jsx)("div",{className:"se-sectionBody",children:t})]})}function Je({title:e,open:t,onToggle:r,trailing:o,children:n,disabled:i,tooltip:s}){let l=s?`${s}`:e;return(0,we.jsxs)("section",{className:"se-panel",children:[(0,we.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:r,"aria-expanded":t,title:l,children:[(0,we.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,we.jsx)(Ms.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,we.jsx)("span",{className:"se-panelTitle",children:e}),s?(0,we.jsx)("span",{className:"se-panelHelp",title:l,"aria-label":l,role:"img",onClick:a=>a.stopPropagation(),children:(0,we.jsx)(Ms.Info,{size:13})}):null]}),o?(0,we.jsx)("span",{className:"se-panelTrailing",onClick:a=>a.stopPropagation(),children:o}):null]}),t?(0,we.jsx)("div",{className:"se-panelBody",style:i?{opacity:.45,pointerEvents:"none"}:void 0,children:n}):null]})}function it({checked:e,onChange:t,label:r}){return(0,we.jsxs)("label",{className:"se-switch","aria-label":r,children:[(0,we.jsx)("input",{type:"checkbox",checked:e,onChange:o=>t(o.target.checked)}),(0,we.jsx)("span",{className:"se-switchTrack",children:(0,we.jsx)("span",{className:"se-switchThumb"})})]})}function q({label:e,value:t,min:r,max:o,step:n,formatValue:i,onChange:s,disabled:l=!1}){return(0,we.jsxs)("label",{className:`se-field ${l?"se-field--disabled":""}`,children:[(0,we.jsxs)("span",{className:"se-fieldLabel",children:[e,(0,we.jsx)("span",{className:"se-fieldValue",children:i?i(t):t})]}),(0,we.jsx)("input",{className:"se-slider",type:"range",min:r,max:o,step:n,value:t,onChange:a=>s(Number(a.target.value)),disabled:l})]})}function ct({label:e,checked:t,onChange:r}){return(0,we.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,we.jsx)("span",{className:"se-fieldLabel",children:e}),(0,we.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:o=>r(o.target.checked)})]})}function Fn({label:e,value:t,options:r,onChange:o}){return(0,we.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,we.jsx)("span",{className:"se-fieldLabel",children:e}),(0,we.jsx)("select",{className:"se-select",value:t,onChange:n=>o(n.target.value),children:r.map(n=>(0,we.jsx)("option",{value:n,children:tv(n)},n))})]})}function er({label:e,value:t,onChange:r}){let[o,n]=(0,Zr.useState)(!1),i=(0,Zr.useRef)(null);return(0,we.jsxs)("div",{className:"se-field",children:[(0,we.jsxs)("div",{className:"se-fieldInline",children:[(0,we.jsx)("span",{className:"se-fieldLabel",children:e}),(0,we.jsx)("span",{ref:i,style:{display:"inline-flex"},children:(0,we.jsx)(Cs.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>n(s=>!s),style:{background:t,color:fo(t)},color:t,onChange:r})})]}),o?(0,we.jsx)(pc,{anchorRef:i,onClose:()=>n(!1),children:(0,we.jsx)(Cs.HexColorPicker,{color:t,onChange:r})}):null]})}function Qr({label:e,value:t,min:r,max:o,step:n,onChange:i}){return(0,we.jsxs)("div",{className:"se-field",children:[(0,we.jsx)("span",{className:"se-fieldLabel",children:e}),(0,we.jsx)("div",{className:"se-vectorRow",children:["X","Y","Z"].map((l,a)=>(0,we.jsxs)("label",{className:"se-vectorAxis",children:[(0,we.jsx)("span",{children:l}),(0,we.jsx)("input",{type:"number",className:"se-numberInput",min:r,max:o,step:n,value:t[a],onChange:u=>{let f=[...t];f[a]=Number(u.target.value),i(f)}})]},l))})]})}function Mi({label:e,value:t,min:r,max:o,step:n,onChange:i}){return(0,we.jsxs)("div",{className:"se-field",children:[(0,we.jsx)("span",{className:"se-fieldLabel",children:e}),(0,we.jsx)("div",{className:"se-vectorRow",children:["X","Y"].map((l,a)=>(0,we.jsxs)("label",{className:"se-vectorAxis",children:[(0,we.jsx)("span",{children:l}),(0,we.jsx)("input",{type:"number",className:"se-numberInput",min:r,max:o,step:n,value:t[a],onChange:u=>{let f=[...t];f[a]=Number(u.target.value),i(f)}})]},l))})]})}var om={free:0,starter:1,growth:2};function am(e){return e==="starter"||e==="growth"||e==="scale"?e==="scale"?"growth":e:"free"}function Ir(e,t){return om[e]>=om[t]}var sm={free:"Free",starter:"Starter",growth:"Growth"};var lm=require("lucide-react");var ea=require("react/jsx-runtime");function In({requiredTier:e,feature:t}){return(0,ea.jsxs)("div",{className:"bb-tierLock",children:[(0,ea.jsx)(lm.Lock,{size:16}),(0,ea.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",sm[e]," plan or higher."]})]})}var Q=require("react/jsx-runtime"),nv=["lit","unlit","normals"],rv=["color","image","environment"];function cm(e){let t=e%360;return t<0?t+360:t}function Ps({title:e,open:t,onToggle:r,children:o,trailing:n}){return(0,Q.jsxs)("section",{className:"se-panel",children:[(0,Q.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:r,"aria-expanded":t,children:[(0,Q.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Q.jsx)(ei.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,Q.jsx)("span",{className:"se-panelTitle",children:e})]}),n?(0,Q.jsx)("span",{className:"se-panelTrailing",onClick:i=>i.stopPropagation(),children:n}):null]}),t?(0,Q.jsx)("div",{className:"se-panelBody",children:o}):null]})}function mc({config:e,onChange:t}){let{model:r,camera:o,wireframe:n,background:i,environment:s}=e,{tier:l}=Qn(),a=Ir(l,"starter"),[u,f]=(0,dm.useState)({general:!0,camera:!0,wireframe:!1,background:!1}),d=c=>f(m=>({...m,[c]:!m[c]})),p=c=>t({...e,model:c}),v=c=>t({...e,camera:c}),x=c=>t({...e,wireframe:c}),_=c=>t({...e,background:c}),T=c=>t({...e,environment:c}),y=c=>{T({...s,source:"preset",preset:c})};return(0,Q.jsxs)("div",{className:"se-generalContent",children:[(0,Q.jsxs)(Ps,{title:"General",open:u.general,onToggle:()=>d("general"),children:[(0,Q.jsxs)("div",{className:"se-field",children:[(0,Q.jsxs)("div",{className:"se-fieldLabel",children:[(0,Q.jsx)("span",{children:"Straighten model"}),(0,Q.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>p({...r,rotation:[0,0,0]}),"aria-label":"Reset model rotation",children:(0,Q.jsx)(ei.RotateCcw,{size:16})})]}),(0,Q.jsx)("div",{className:"se-axisStepperGrid",children:["X","Y","Z"].map((c,m)=>(0,Q.jsxs)("div",{className:"se-axisStepper",children:[(0,Q.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let S=[...r.rotation];S[m]=cm(S[m]-90),p({...r,rotation:S})},"aria-label":`Rotate ${c} axis backward`,children:(0,Q.jsx)(ei.ChevronLeft,{size:16})}),(0,Q.jsx)("span",{className:"se-axisStepperLabel",children:c}),(0,Q.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let S=[...r.rotation];S[m]=cm(S[m]+90),p({...r,rotation:S})},"aria-label":`Rotate ${c} axis forward`,children:(0,Q.jsx)(ei.ChevronRight,{size:16})})]},c))})]}),(0,Q.jsx)(Qr,{label:"Rotation",value:r.rotation,min:0,max:360,step:1,onChange:c=>p({...r,rotation:c})}),(0,Q.jsxs)("div",{className:"se-field",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Renderer"}),(0,Q.jsx)("div",{className:"se-segmentedControl se-segmentedControl--renderer",children:qd.map(c=>(0,Q.jsx)("button",{type:"button",className:`se-segmentedOption ${r.renderer===c?"se-segmentedOption--active":""}`,onClick:()=>p({...r,renderer:c}),children:c==="uv-checker"?"UV CHECKER":c.toUpperCase()},c))})]}),(0,Q.jsx)(Fn,{label:"Shading",value:r.shading,options:nv,onChange:c=>p({...r,shading:c})})]}),(0,Q.jsx)(Ps,{title:"Camera",open:u.camera,onToggle:()=>d("camera"),children:(0,Q.jsx)(q,{label:"Field Of View",value:o.fieldOfView,min:20,max:100,step:.1,formatValue:c=>`${c.toFixed(3)}\xB0`,onChange:c=>v({...o,fieldOfView:c})})}),(0,Q.jsx)(Ps,{title:"Wireframe",open:u.wireframe,onToggle:()=>d("wireframe"),trailing:(0,Q.jsxs)("label",{className:"se-switch","aria-label":"Toggle wireframe preview",children:[(0,Q.jsx)("input",{type:"checkbox",checked:a&&n.enabled,disabled:!a,onChange:c=>x({...n,enabled:c.target.checked})}),(0,Q.jsx)("span",{className:"se-switchTrack",children:(0,Q.jsx)("span",{className:"se-switchThumb"})})]}),children:a?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(q,{label:"Opacity",value:n.opacity,min:0,max:1,step:.01,onChange:c=>x({...n,opacity:c})}),(0,Q.jsx)(er,{label:"Wire color",value:n.color,onChange:c=>x({...n,color:c})})]}):(0,Q.jsx)(In,{requiredTier:"starter",feature:"Wireframe preview"})}),(0,Q.jsx)(Ps,{title:"Background",open:u.background,onToggle:()=>d("background"),trailing:(0,Q.jsxs)("label",{className:"se-switch","aria-label":"Toggle scene background",children:[(0,Q.jsx)("input",{type:"checkbox",checked:i.enabled,onChange:c=>_({...i,enabled:c.target.checked})}),(0,Q.jsx)("span",{className:"se-switchTrack",children:(0,Q.jsx)("span",{className:"se-switchThumb"})})]}),children:i.enabled?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)("div",{className:"se-field",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Background type"}),(0,Q.jsx)("div",{className:"se-segmentedControl",children:rv.map(c=>(0,Q.jsx)("button",{type:"button",className:`se-segmentedOption ${i.type===c?"se-segmentedOption--active":""}`,onClick:()=>_({...i,type:c}),children:c},c))})]}),i.type==="environment"?a?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)("div",{className:"se-field",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Environment source"}),(0,Q.jsxs)("div",{className:"se-segmentedControl",children:[(0,Q.jsx)("button",{type:"button",className:`se-segmentedOption ${s.source==="preset"?"se-segmentedOption--active":""}`,onClick:()=>T({...s,source:"preset"}),children:"PRESET"}),(0,Q.jsx)("button",{type:"button",className:`se-segmentedOption ${s.source==="custom"?"se-segmentedOption--active":""}`,onClick:()=>T({...s,source:"custom"}),children:"CUSTOM"})]})]}),s.source==="preset"?(0,Q.jsx)(Fn,{label:"Environment preset",value:s.preset,options:Jd,onChange:y}):(0,Q.jsxs)("label",{className:"se-field",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Custom environment URL"}),(0,Q.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/environment.hdr",value:s.customEnvironmentUrl,onChange:c=>T({...s,customEnvironmentUrl:c.target.value})}),(0,Q.jsx)("span",{className:"bb-note",children:"Enter a HDR, EXR, JPG, JPEG, PNG, or WEBP URL."}),s.customEnvironmentUrl.trim()&&!Ia(s.customEnvironmentUrl)?(0,Q.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"Invalid image/HDRI URL."}):null]}),(0,Q.jsx)(q,{label:"Environment intensity",value:s.intensity,min:0,max:3,step:.05,onChange:c=>T({...s,intensity:c})})]}):(0,Q.jsx)(In,{requiredTier:"starter",feature:"Environment backgrounds"}):null,i.type==="image"?(0,Q.jsxs)("label",{className:"se-field",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Background image URL"}),(0,Q.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/background.jpg",value:i.imageUrl,onChange:c=>_({...i,imageUrl:c.target.value})})]}):null,i.type==="color"?(0,Q.jsxs)("div",{className:"se-field",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Background color"}),(0,Q.jsx)("div",{className:"se-inlineColorPicker",children:(0,Q.jsx)(As.HexColorPicker,{color:i.color,onChange:c=>_({...i,color:c})})}),(0,Q.jsx)("div",{className:"se-fieldInline",children:(0,Q.jsx)(As.HexColorInput,{prefixed:!0,className:"se-swatch",style:{background:i.color,color:fo(i.color)},color:i.color,onChange:c=>_({...i,color:c})})})]}):null]}):(0,Q.jsx)("div",{className:"se-placeholder",children:"Background rendering is disabled for this scene preset."})})]})}var Lm=require("react");var ue=require("react/jsx-runtime");function um({pp:e,set:t,open:r,toggle:o}){let{ssao:n}=e;return(0,ue.jsxs)(Je,{title:"SSAO",tooltip:"Adds soft contact shadows in corners, creases, and tight spaces.",open:r.ssao,onToggle:()=>o("ssao"),disabled:!n.enabled,trailing:(0,ue.jsx)(it,{checked:n.enabled,onChange:i=>t("ssao",{...n,enabled:i}),label:"Toggle SSAO"}),children:[(0,ue.jsx)(q,{label:"Samples",value:n.samples,min:1,max:64,step:1,onChange:i=>t("ssao",{...n,samples:i})}),(0,ue.jsx)(q,{label:"Rings",value:n.rings,min:1,max:12,step:1,onChange:i=>t("ssao",{...n,rings:i})}),(0,ue.jsx)(q,{label:"Intensity",value:n.intensity,min:0,max:20,step:.5,onChange:i=>t("ssao",{...n,intensity:i})}),(0,ue.jsx)(q,{label:"Radius",value:n.radius,min:.01,max:1,step:.01,onChange:i=>t("ssao",{...n,radius:i})}),(0,ue.jsx)(q,{label:"Bias",value:n.bias,min:0,max:.1,step:.001,onChange:i=>t("ssao",{...n,bias:i})}),(0,ue.jsx)(q,{label:"Luminance Influence",value:n.luminanceInfluence,min:0,max:1,step:.01,onChange:i=>t("ssao",{...n,luminanceInfluence:i})}),(0,ue.jsx)(q,{label:"Fade",value:n.fade,min:0,max:.1,step:.001,onChange:i=>t("ssao",{...n,fade:i})}),(0,ue.jsx)(q,{label:"Min Radius Scale",value:n.minRadiusScale,min:0,max:1,step:.01,onChange:i=>t("ssao",{...n,minRadiusScale:i})}),(0,ue.jsx)(q,{label:"World Distance Threshold",value:n.worldDistanceThreshold,min:0,max:100,step:.1,onChange:i=>t("ssao",{...n,worldDistanceThreshold:i})}),(0,ue.jsx)(q,{label:"World Distance Falloff",value:n.worldDistanceFalloff,min:0,max:20,step:.1,onChange:i=>t("ssao",{...n,worldDistanceFalloff:i})}),(0,ue.jsx)(q,{label:"World Proximity Threshold",value:n.worldProximityThreshold,min:0,max:100,step:.1,onChange:i=>t("ssao",{...n,worldProximityThreshold:i})}),(0,ue.jsx)(q,{label:"World Proximity Falloff",value:n.worldProximityFalloff,min:0,max:20,step:.1,onChange:i=>t("ssao",{...n,worldProximityFalloff:i})})]})}function pm({pp:e,set:t,open:r,toggle:o}){let{autofocus:n}=e;return(0,ue.jsxs)(Je,{title:"Auto focus",tooltip:"Keeps the focus plane tracking a subject so the image stays sharp where you want it.",open:r.autofocus,onToggle:()=>o("autofocus"),disabled:!n.enabled,trailing:(0,ue.jsx)(it,{checked:n.enabled,onChange:i=>t("autofocus",{...n,enabled:i}),label:"Toggle Autofocus"}),children:[(0,ue.jsx)(q,{label:"Focus Distance",value:n.focusDistance,min:0,max:50,step:.1,onChange:i=>t("autofocus",{...n,focusDistance:i})}),(0,ue.jsx)(q,{label:"Focus Range",value:n.focusRange,min:.1,max:50,step:.1,onChange:i=>t("autofocus",{...n,focusRange:i})}),(0,ue.jsx)(q,{label:"Focal Length",value:n.focalLength,min:0,max:1,step:.01,onChange:i=>t("autofocus",{...n,focalLength:i})}),(0,ue.jsx)(q,{label:"Bokeh Scale",value:n.bokehScale,min:0,max:20,step:.1,onChange:i=>t("autofocus",{...n,bokehScale:i})}),(0,ue.jsx)(Qr,{label:"Target",value:n.target,min:-100,max:100,step:.1,onChange:i=>t("autofocus",{...n,target:i})}),(0,ue.jsx)(ct,{label:"Mouse Follow",checked:n.mouse,onChange:i=>t("autofocus",{...n,mouse:i})}),(0,ue.jsx)(ct,{label:"Manual Update",checked:n.manual,onChange:i=>t("autofocus",{...n,manual:i})}),(0,ue.jsx)(q,{label:"Debug",value:n.debug,min:0,max:1,step:.01,onChange:i=>t("autofocus",{...n,debug:i})}),(0,ue.jsx)(q,{label:"Smooth Time",value:n.smoothTime,min:0,max:2,step:.01,onChange:i=>t("autofocus",{...n,smoothTime:i})})]})}function mm({pp:e,set:t,open:r,toggle:o}){let{godRays:n}=e;return(0,ue.jsxs)(Je,{title:"God Rays",tooltip:"Creates light shafts that streak outward from a bright sun or light source.",open:r.godRays,onToggle:()=>o("godRays"),disabled:!n.enabled,trailing:(0,ue.jsx)(it,{checked:n.enabled,onChange:i=>t("godRays",{...n,enabled:i}),label:"Toggle GodRays"}),children:[(0,ue.jsx)(Qr,{label:"Sun Position",value:n.sunPosition,min:-100,max:100,step:.1,onChange:i=>t("godRays",{...n,sunPosition:i})}),(0,ue.jsx)(q,{label:"Samples",value:n.samples,min:1,max:128,step:1,onChange:i=>t("godRays",{...n,samples:i})}),(0,ue.jsx)(q,{label:"Density",value:n.density,min:0,max:2,step:.01,onChange:i=>t("godRays",{...n,density:i})}),(0,ue.jsx)(q,{label:"Decay",value:n.decay,min:0,max:1,step:.01,onChange:i=>t("godRays",{...n,decay:i})}),(0,ue.jsx)(q,{label:"Weight",value:n.weight,min:0,max:2,step:.01,onChange:i=>t("godRays",{...n,weight:i})}),(0,ue.jsx)(q,{label:"Exposure",value:n.exposure,min:0,max:2,step:.01,onChange:i=>t("godRays",{...n,exposure:i})}),(0,ue.jsx)(q,{label:"Clamp Max",value:n.clampMax,min:0,max:2,step:.01,onChange:i=>t("godRays",{...n,clampMax:i})}),(0,ue.jsx)(ct,{label:"Blur",checked:n.blur,onChange:i=>t("godRays",{...n,blur:i})}),(0,ue.jsx)(Fn,{label:"Kernel Size",value:n.kernelSize,options:Io,onChange:i=>t("godRays",{...n,kernelSize:i})})]})}function fm({pp:e,set:t,open:r,toggle:o}){let{lensflare:n}=e;return(0,ue.jsxs)(Je,{title:"Lens Flare",tooltip:"Adds camera flare artifacts and glow from a bright light source.",open:r.lensflare,onToggle:()=>o("lensflare"),disabled:!n.enabled,trailing:(0,ue.jsx)(it,{checked:n.enabled,onChange:i=>t("lensflare",{...n,enabled:i}),label:"Toggle Lensflare"}),children:[(0,ue.jsx)(Qr,{label:"Lens Position",value:n.lensPosition,min:-100,max:100,step:.1,onChange:i=>t("lensflare",{...n,lensPosition:i})}),(0,ue.jsx)(q,{label:"Smooth Time",value:n.smoothTime,min:0,max:1,step:.01,onChange:i=>t("lensflare",{...n,smoothTime:i})}),(0,ue.jsx)(q,{label:"Glare Size",value:n.glareSize,min:0,max:1,step:.01,onChange:i=>t("lensflare",{...n,glareSize:i})}),(0,ue.jsx)(q,{label:"Flare Size",value:n.flareSize,min:0,max:.1,step:.001,onChange:i=>t("lensflare",{...n,flareSize:i})}),(0,ue.jsx)(q,{label:"Flare Speed",value:n.flareSpeed,min:0,max:.2,step:.001,onChange:i=>t("lensflare",{...n,flareSpeed:i})}),(0,ue.jsx)(q,{label:"Flare Shape",value:n.flareShape,min:0,max:.2,step:.001,onChange:i=>t("lensflare",{...n,flareShape:i})}),(0,ue.jsx)(ct,{label:"Animated",checked:n.animated,onChange:i=>t("lensflare",{...n,animated:i})}),(0,ue.jsx)(ct,{label:"Anamorphic",checked:n.anamorphic,onChange:i=>t("lensflare",{...n,anamorphic:i})}),(0,ue.jsx)(er,{label:"Color Gain",value:n.colorGain,onChange:i=>t("lensflare",{...n,colorGain:i})}),(0,ue.jsx)(q,{label:"Halo Scale",value:n.haloScale,min:0,max:2,step:.01,onChange:i=>t("lensflare",{...n,haloScale:i})}),(0,ue.jsx)(ct,{label:"Secondary Ghosts",checked:n.secondaryGhosts,onChange:i=>t("lensflare",{...n,secondaryGhosts:i})}),(0,ue.jsx)(ct,{label:"Additional Streaks",checked:n.aditionalStreaks,onChange:i=>t("lensflare",{...n,aditionalStreaks:i})}),(0,ue.jsx)(q,{label:"Ghost Scale",value:n.ghostScale,min:0,max:1,step:.01,onChange:i=>t("lensflare",{...n,ghostScale:i})}),(0,ue.jsx)(q,{label:"Opacity",value:n.opacity,min:0,max:1,step:.01,onChange:i=>t("lensflare",{...n,opacity:i})}),(0,ue.jsx)(ct,{label:"Star Burst",checked:n.starBurst,onChange:i=>t("lensflare",{...n,starBurst:i})})]})}function hm({pp:e,set:t,open:r,toggle:o}){let{depthOfField:n}=e;return(0,ue.jsxs)(Je,{title:"Depth Of Field",tooltip:"Blurs areas that sit away from the focal plane for a camera-like look.",open:r.depthOfField,onToggle:()=>o("depthOfField"),disabled:!n.enabled,trailing:(0,ue.jsx)(it,{checked:n.enabled,onChange:i=>t("depthOfField",{...n,enabled:i}),label:"Toggle DepthOfField"}),children:[(0,ue.jsx)(q,{label:"Focus Distance",value:n.focusDistance,min:0,max:50,step:.1,onChange:i=>t("depthOfField",{...n,focusDistance:i})}),(0,ue.jsx)(q,{label:"Focus Range",value:n.focusRange,min:.1,max:50,step:.1,onChange:i=>t("depthOfField",{...n,focusRange:i})}),(0,ue.jsx)(q,{label:"Focal Length",value:n.focalLength,min:0,max:1,step:.01,onChange:i=>t("depthOfField",{...n,focalLength:i})}),(0,ue.jsx)(q,{label:"Bokeh Scale",value:n.bokehScale,min:0,max:20,step:.1,onChange:i=>t("depthOfField",{...n,bokehScale:i})})]})}var Re=require("react/jsx-runtime"),iv=["linear","reinhard","aces"];function gm({pp:e,set:t,open:r,toggle:o}){let{colorAverage:n}=e;return(0,Re.jsx)(Je,{title:"Color Average",tooltip:"Blends the frame toward a single average color for a washed-out stylized look.",open:r.colorAverage,onToggle:()=>o("colorAverage"),disabled:!n.enabled,trailing:(0,Re.jsx)(it,{checked:n.enabled,onChange:i=>t("colorAverage",{...n,enabled:i}),label:"Toggle ColorAverage"}),children:(0,Re.jsx)("div",{className:"se-placeholder",children:"Averages the frame color using the docs default blend mode."})})}function bm({pp:e,set:t,open:r,toggle:o}){let{brightnessContrast:n}=e;return(0,Re.jsxs)(Je,{title:"Brightness Contrast",tooltip:"Raises or lowers overall brightness and contrast across the scene.",open:r.brightnessContrast,onToggle:()=>o("brightnessContrast"),disabled:!n.enabled,trailing:(0,Re.jsx)(it,{checked:n.enabled,onChange:i=>t("brightnessContrast",{...n,enabled:i}),label:"Toggle BrightnessContrast"}),children:[(0,Re.jsx)(q,{label:"Brightness",value:n.brightness,min:-1,max:1,step:.01,onChange:i=>t("brightnessContrast",{...n,brightness:i})}),(0,Re.jsx)(q,{label:"Contrast",value:n.contrast,min:-1,max:1,step:.01,onChange:i=>t("brightnessContrast",{...n,contrast:i})})]})}function vm({pp:e,set:t,open:r,toggle:o}){let{hueSaturation:n}=e;return(0,Re.jsxs)(Je,{title:"Hue Saturation",tooltip:"Shifts the hue and saturation to tint the whole image.",open:r.hueSaturation,onToggle:()=>o("hueSaturation"),disabled:!n.enabled,trailing:(0,Re.jsx)(it,{checked:n.enabled,onChange:i=>t("hueSaturation",{...n,enabled:i}),label:"Toggle HueSaturation"}),children:[(0,Re.jsx)(q,{label:"Hue",value:n.hue,min:-Math.PI,max:Math.PI,step:.01,formatValue:i=>`${i.toFixed(2)} rad`,onChange:i=>t("hueSaturation",{...n,hue:i})}),(0,Re.jsx)(q,{label:"Saturation",value:n.saturation,min:-1,max:1,step:.01,onChange:i=>t("hueSaturation",{...n,saturation:i})})]})}function xm({pp:e,set:t,open:r,toggle:o}){let{vignette:n}=e;return(0,Re.jsxs)(Je,{title:"Vignette",tooltip:"Darkens the edges of the screen so the center feels more focused.",open:r.vignette,onToggle:()=>o("vignette"),disabled:!n.enabled,trailing:(0,Re.jsx)(it,{checked:n.enabled,onChange:i=>t("vignette",{...n,enabled:i}),label:"Toggle Vignette"}),children:[(0,Re.jsx)(q,{label:"Offset",value:n.offset,min:0,max:1,step:.01,onChange:i=>t("vignette",{...n,offset:i})}),(0,Re.jsx)(q,{label:"Darkness",value:n.darkness,min:0,max:1,step:.01,onChange:i=>t("vignette",{...n,darkness:i})}),(0,Re.jsx)(ct,{label:"Eskil",checked:n.eskil,onChange:i=>t("vignette",{...n,eskil:i})})]})}function ym({pp:e,set:t,open:r,toggle:o}){let{bloom:n}=e;return(0,Re.jsxs)(Je,{title:"Bloom",tooltip:"Makes bright areas glow and bleed softly into nearby pixels.",open:r.bloom,onToggle:()=>o("bloom"),disabled:!n.enabled,trailing:(0,Re.jsx)(it,{checked:n.enabled,onChange:i=>t("bloom",{...n,enabled:i}),label:"Toggle Bloom"}),children:[(0,Re.jsx)(q,{label:"Threshold",value:n.luminanceThreshold,min:0,max:1,step:.01,onChange:i=>t("bloom",{...n,luminanceThreshold:i})}),(0,Re.jsx)(q,{label:"Smoothing",value:n.luminanceSmoothing,min:0,max:1,step:.01,onChange:i=>t("bloom",{...n,luminanceSmoothing:i})}),(0,Re.jsx)(q,{label:"Intensity",value:n.intensity,min:0,max:3,step:.05,onChange:i=>t("bloom",{...n,intensity:i})}),(0,Re.jsx)(ct,{label:"Mipmap Blur",checked:n.mipmapBlur,onChange:i=>t("bloom",{...n,mipmapBlur:i})}),(0,Re.jsx)(q,{label:"Radius",value:n.radius,min:0,max:1,step:.01,onChange:i=>t("bloom",{...n,radius:i})}),(0,Re.jsx)(q,{label:"Levels",value:n.levels,min:1,max:16,step:1,onChange:i=>t("bloom",{...n,levels:i})})]})}function wm({pp:e,set:t,open:r,toggle:o}){let{toneMapping:n}=e;return(0,Re.jsxs)(Je,{title:"Tone Mapping",tooltip:"Remaps HDR lighting to screen output and controls exposure style.",open:r.toneMapping,onToggle:()=>o("toneMapping"),disabled:!n.enabled,trailing:(0,Re.jsx)(it,{checked:n.enabled,onChange:i=>t("toneMapping",{...n,enabled:i}),label:"Toggle ToneMapping"}),children:[(0,Re.jsxs)("div",{className:"se-field",children:[(0,Re.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,Re.jsx)("div",{className:"se-segmentedControl",children:iv.map(i=>(0,Re.jsx)("button",{type:"button",className:`se-segmentedOption ${n.mode===i?"se-segmentedOption--active":""}`,onClick:()=>t("toneMapping",{...n,mode:i}),children:i==="aces"?"Filmic":i.charAt(0).toUpperCase()+i.slice(1)},i))})]}),(0,Re.jsx)(q,{label:"Resolution",value:n.resolution,min:64,max:4096,step:64,onChange:i=>t("toneMapping",{...n,resolution:i})}),(0,Re.jsx)(q,{label:"White Point",value:n.whitePoint,min:0,max:16,step:.01,onChange:i=>t("toneMapping",{...n,whitePoint:i})}),(0,Re.jsx)(q,{label:"Middle Grey",value:n.middleGrey,min:0,max:1,step:.01,onChange:i=>t("toneMapping",{...n,middleGrey:i})}),(0,Re.jsx)(q,{label:"Min Luminance",value:n.minLuminance,min:0,max:1,step:.01,onChange:i=>t("toneMapping",{...n,minLuminance:i})}),(0,Re.jsx)(q,{label:"Average Luminance",value:n.averageLuminance,min:0,max:4,step:.01,onChange:i=>t("toneMapping",{...n,averageLuminance:i})}),(0,Re.jsx)(q,{label:"Adaptation Rate",value:n.adaptationRate,min:0,max:10,step:.01,onChange:i=>t("toneMapping",{...n,adaptationRate:i})}),(0,Re.jsx)(q,{label:"Exposure",value:n.exposure,min:0,max:3,step:.01,onChange:i=>t("toneMapping",{...n,exposure:i})})]})}function _m({pp:e,set:t,open:r,toggle:o}){let{sepia:n}=e;return(0,Re.jsx)(Je,{title:"Sepia",tooltip:"Adds a warm vintage brown tint to the entire image.",open:r.sepia,onToggle:()=>o("sepia"),disabled:!n.enabled,trailing:(0,Re.jsx)(it,{checked:n.enabled,onChange:i=>t("sepia",{...n,enabled:i}),label:"Toggle Sepia"}),children:(0,Re.jsx)(q,{label:"Intensity",value:n.intensity,min:0,max:1,step:.01,onChange:i=>t("sepia",{...n,intensity:i})})})}var Ce=require("react/jsx-runtime");function Sm({pp:e,set:t,open:r,toggle:o}){let{dotScreen:n}=e;return(0,Ce.jsxs)(Je,{title:"Dot Screen",tooltip:"Overlays a halftone dot pattern for a printed or retro look.",open:r.dotScreen,onToggle:()=>o("dotScreen"),disabled:!n.enabled,trailing:(0,Ce.jsx)(it,{checked:n.enabled,onChange:i=>t("dotScreen",{...n,enabled:i}),label:"Toggle DotScreen"}),children:[(0,Ce.jsx)(q,{label:"Angle",value:n.angle,min:0,max:Math.PI*2,step:.01,formatValue:i=>`${i.toFixed(2)} rad`,onChange:i=>t("dotScreen",{...n,angle:i})}),(0,Ce.jsx)(q,{label:"Scale",value:n.scale,min:.1,max:10,step:.05,onChange:i=>t("dotScreen",{...n,scale:i})})]})}function Mm({pp:e,set:t,open:r,toggle:o}){let{glitch:n}=e;return(0,Ce.jsxs)(Je,{title:"Glitch",tooltip:"Introduces digital distortion, tearing, and scan noise.",open:r.glitch,onToggle:()=>o("glitch"),disabled:!n.enabled,trailing:(0,Ce.jsx)(it,{checked:n.enabled,onChange:i=>t("glitch",{...n,enabled:i}),label:"Toggle Glitch"}),children:[(0,Ce.jsx)(Fn,{label:"Mode",value:n.mode,options:Zd,onChange:i=>t("glitch",{...n,mode:i})}),(0,Ce.jsx)(Mi,{label:"Delay",value:n.delay,min:0,max:10,step:.01,onChange:i=>t("glitch",{...n,delay:i})}),(0,Ce.jsx)(Mi,{label:"Duration",value:n.duration,min:0,max:5,step:.01,onChange:i=>t("glitch",{...n,duration:i})}),(0,Ce.jsx)(Mi,{label:"Strength",value:n.strength,min:0,max:2,step:.01,onChange:i=>t("glitch",{...n,strength:i})}),(0,Ce.jsx)(Mi,{label:"Chromatic Aberration Offset",value:n.chromaticAberrationOffset,min:0,max:.02,step:1e-4,onChange:i=>t("glitch",{...n,chromaticAberrationOffset:i})}),(0,Ce.jsx)(q,{label:"Columns",value:n.columns,min:0,max:.5,step:.001,onChange:i=>t("glitch",{...n,columns:i})}),(0,Ce.jsx)(q,{label:"Ratio",value:n.ratio,min:0,max:1,step:.01,onChange:i=>t("glitch",{...n,ratio:i})})]})}function Cm({pp:e,set:t,open:r,toggle:o}){let{grid:n}=e;return(0,Ce.jsxs)(Je,{title:"Grid",tooltip:"Adds a visual grid overlay that feels retro or debug-like.",open:r.grid,onToggle:()=>o("grid"),disabled:!n.enabled,trailing:(0,Ce.jsx)(it,{checked:n.enabled,onChange:i=>t("grid",{...n,enabled:i}),label:"Toggle Grid"}),children:[(0,Ce.jsx)(q,{label:"Scale",value:n.scale,min:.1,max:10,step:.05,onChange:i=>t("grid",{...n,scale:i})}),(0,Ce.jsx)(q,{label:"Line Width",value:n.lineWidth,min:0,max:1,step:.01,onChange:i=>t("grid",{...n,lineWidth:i})})]})}function Pm({pp:e,set:t,open:r,toggle:o}){let{chromaticAberration:n}=e;return(0,Ce.jsxs)(Je,{title:"Chromatic Aberration",tooltip:"Separates color channels slightly to mimic lens fringing.",open:r.chromaticAberration,onToggle:()=>o("chromaticAberration"),disabled:!n.enabled,trailing:(0,Ce.jsx)(it,{checked:n.enabled,onChange:i=>t("chromaticAberration",{...n,enabled:i}),label:"Toggle ChromaticAberration"}),children:[(0,Ce.jsx)(q,{label:"Offset X",value:n.offsetX,min:0,max:.02,step:1e-4,onChange:i=>t("chromaticAberration",{...n,offsetX:i})}),(0,Ce.jsx)(q,{label:"Offset Y",value:n.offsetY,min:0,max:.02,step:1e-4,onChange:i=>t("chromaticAberration",{...n,offsetY:i})}),(0,Ce.jsx)(ct,{label:"Radial Modulation",checked:n.radialModulation,onChange:i=>t("chromaticAberration",{...n,radialModulation:i})}),(0,Ce.jsx)(q,{label:"Modulation Offset",value:n.modulationOffset,min:0,max:1,step:.01,onChange:i=>t("chromaticAberration",{...n,modulationOffset:i})})]})}function Am({pp:e,set:t,open:r,toggle:o}){let{noise:n}=e;return(0,Ce.jsxs)(Je,{title:"Noise",tooltip:"Adds film grain or static noise to the rendered image.",open:r.noise,onToggle:()=>o("noise"),disabled:!n.enabled,trailing:(0,Ce.jsx)(it,{checked:n.enabled,onChange:i=>t("noise",{...n,enabled:i}),label:"Toggle Noise"}),children:[(0,Ce.jsx)(q,{label:"Amount",value:n.opacity,min:0,max:1,step:.01,onChange:i=>t("noise",{...n,opacity:i})}),(0,Ce.jsx)(ct,{label:"Premultiply",checked:n.premultiply,onChange:i=>t("noise",{...n,premultiply:i})})]})}function Tm({pp:e,set:t,open:r,toggle:o}){let{scanline:n}=e;return(0,Ce.jsx)(Je,{title:"Scan Line",tooltip:"Draws horizontal CRT-style scan lines over the frame.",open:r.scanline,onToggle:()=>o("scanline"),disabled:!n.enabled,trailing:(0,Ce.jsx)(it,{checked:n.enabled,onChange:i=>t("scanline",{...n,enabled:i}),label:"Toggle Scanline"}),children:(0,Ce.jsx)(q,{label:"Density",value:n.density,min:0,max:10,step:.25,onChange:i=>t("scanline",{...n,density:i})})})}function Em({pp:e,set:t,open:r,toggle:o}){let{pixelation:n}=e;return(0,Ce.jsx)(Je,{title:"Pixelation",tooltip:"Reduces detail into larger pixels for a blocky stylized effect.",open:r.pixelation,onToggle:()=>o("pixelation"),disabled:!n.enabled,trailing:(0,Ce.jsx)(it,{checked:n.enabled,onChange:i=>t("pixelation",{...n,enabled:i}),label:"Toggle Pixelation"}),children:(0,Ce.jsx)(q,{label:"Granularity",value:n.granularity,min:0,max:20,step:1,onChange:i=>t("pixelation",{...n,granularity:i})})})}function km({pp:e,set:t,open:r,toggle:o}){let{ramp:n}=e;return(0,Ce.jsxs)(Je,{title:"Ramp",tooltip:"Adds a screen-space color gradient, or masks effects earlier in the stack.",open:r.ramp,onToggle:()=>o("ramp"),disabled:!n.enabled,trailing:(0,Ce.jsx)(it,{checked:n.enabled,onChange:i=>t("ramp",{...n,enabled:i}),label:"Toggle Ramp"}),children:[(0,Ce.jsx)(Fn,{label:"Ramp Type",value:n.rampType,options:Qd,onChange:i=>t("ramp",{...n,rampType:i})}),(0,Ce.jsx)(Mi,{label:"Ramp Start",value:n.rampStart,min:0,max:1,step:.01,onChange:i=>t("ramp",{...n,rampStart:i})}),(0,Ce.jsx)(Mi,{label:"Ramp End",value:n.rampEnd,min:0,max:1,step:.01,onChange:i=>t("ramp",{...n,rampEnd:i})}),(0,Ce.jsx)(er,{label:"Start Color",value:n.startColor,onChange:i=>t("ramp",{...n,startColor:i})}),(0,Ce.jsx)(er,{label:"End Color",value:n.endColor,onChange:i=>t("ramp",{...n,endColor:i})}),!n.rampMask&&(0,Ce.jsx)(q,{label:"Gradient Opacity",value:n.opacity??.5,min:0,max:1,step:.01,onChange:i=>t("ramp",{...n,opacity:i})}),(0,Ce.jsx)(q,{label:"Bias",value:n.rampBias,min:0,max:1,step:.01,onChange:i=>t("ramp",{...n,rampBias:i})}),(0,Ce.jsx)(q,{label:"Gain",value:n.rampGain,min:0,max:1,step:.01,onChange:i=>t("ramp",{...n,rampGain:i})}),(0,Ce.jsx)(ct,{label:"Mask Earlier Effects",checked:n.rampMask,onChange:i=>t("ramp",{...n,rampMask:i})}),(0,Ce.jsx)(ct,{label:"Invert",checked:n.rampInvert,onChange:i=>t("ramp",{...n,rampInvert:i})})]})}var vt=require("react/jsx-runtime");function Rm({pp:e,set:t,open:r,toggle:o}){let{outline:n}=e;return(0,vt.jsxs)(Je,{title:"Outline",tooltip:"Draws a visible edge around the selected object binding.",open:r.outline,onToggle:()=>o("outline"),disabled:!n.enabled,trailing:(0,vt.jsx)(it,{checked:n.enabled,onChange:i=>t("outline",{...n,enabled:i}),label:"Toggle Outline"}),children:[(0,vt.jsx)("div",{className:"se-placeholder",children:"Outlines the currently selected object binding in the model editor."}),(0,vt.jsx)(q,{label:"Selection Layer",value:n.selectionLayer,min:0,max:20,step:1,onChange:i=>t("outline",{...n,selectionLayer:i})}),(0,vt.jsx)(q,{label:"Edge Strength",value:n.edgeStrength,min:0,max:10,step:.1,onChange:i=>t("outline",{...n,edgeStrength:i})}),(0,vt.jsx)(q,{label:"Pulse Speed",value:n.pulseSpeed,min:0,max:10,step:.1,onChange:i=>t("outline",{...n,pulseSpeed:i})}),(0,vt.jsx)(er,{label:"Visible Edge Color",value:n.visibleEdgeColor,onChange:i=>t("outline",{...n,visibleEdgeColor:i})}),(0,vt.jsx)(er,{label:"Hidden Edge Color",value:n.hiddenEdgeColor,onChange:i=>t("outline",{...n,hiddenEdgeColor:i})}),(0,vt.jsx)(Fn,{label:"Kernel Size",value:n.kernelSize,options:Io,onChange:i=>t("outline",{...n,kernelSize:i})}),(0,vt.jsx)(ct,{label:"Blur",checked:n.blur,onChange:i=>t("outline",{...n,blur:i})}),(0,vt.jsx)(ct,{label:"X-Ray",checked:n.xRay,onChange:i=>t("outline",{...n,xRay:i})})]})}function Nm({pp:e,set:t,open:r,toggle:o}){let{selectiveBloom:n}=e;return(0,vt.jsxs)(Je,{title:"Selective Bloom",tooltip:"Applies bloom only to objects assigned to the selected layer.",open:r.selectiveBloom,onToggle:()=>o("selectiveBloom"),disabled:!n.enabled,trailing:(0,vt.jsx)(it,{checked:n.enabled,onChange:i=>t("selectiveBloom",{...n,enabled:i}),label:"Toggle SelectiveBloom"}),children:[(0,vt.jsx)("div",{className:"se-placeholder",children:"Applies bloom to the currently selected object binding."}),(0,vt.jsx)(q,{label:"Selection Layer",value:n.selectionLayer,min:0,max:20,step:1,onChange:i=>t("selectiveBloom",{...n,selectionLayer:i})}),(0,vt.jsx)(q,{label:"Intensity",value:n.intensity,min:0,max:5,step:.05,onChange:i=>t("selectiveBloom",{...n,intensity:i})}),(0,vt.jsx)(q,{label:"Threshold",value:n.luminanceThreshold,min:0,max:1,step:.01,onChange:i=>t("selectiveBloom",{...n,luminanceThreshold:i})}),(0,vt.jsx)(q,{label:"Smoothing",value:n.luminanceSmoothing,min:0,max:1,step:.01,onChange:i=>t("selectiveBloom",{...n,luminanceSmoothing:i})}),(0,vt.jsx)(Fn,{label:"Kernel Size",value:n.kernelSize,options:Io,onChange:i=>t("selectiveBloom",{...n,kernelSize:i})}),(0,vt.jsx)(ct,{label:"Mipmap Blur",checked:n.mipmapBlur,onChange:i=>t("selectiveBloom",{...n,mipmapBlur:i})}),(0,vt.jsx)(ct,{label:"Inverted",checked:n.inverted,onChange:i=>t("selectiveBloom",{...n,inverted:i})}),(0,vt.jsx)(ct,{label:"Ignore Background",checked:n.ignoreBackground,onChange:i=>t("selectiveBloom",{...n,ignoreBackground:i})})]})}function Bm({pp:e,set:t,open:r,toggle:o}){let{smaa:n}=e;return(0,vt.jsx)(Je,{title:"SMAA",tooltip:"Reduces jagged edges with subpixel anti-aliasing.",open:r.smaa,onToggle:()=>o("smaa"),trailing:(0,vt.jsx)(it,{checked:n.enabled,onChange:i=>t("smaa",{...n,enabled:i}),label:"Toggle SMAA"}),children:(0,vt.jsx)("div",{className:"se-placeholder",children:"Subpixel Morphological Anti-Aliasing smooths jagged edges in post-process."})})}var _t=require("react/jsx-runtime");function fc({config:e,onChange:t}){let[r,o]=(0,Lm.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}),n=a=>o(u=>({...u,[a]:!u[a]})),i=e.postProcessing,l={pp:i,set:(a,u)=>t({...e,postProcessing:{...i,[a]:u}}),open:r,toggle:n};return(0,_t.jsxs)("div",{className:"se-generalContent",children:[(0,_t.jsx)(um,{...l}),(0,_t.jsx)(pm,{...l}),(0,_t.jsx)(gm,{...l}),(0,_t.jsx)(Sm,{...l}),(0,_t.jsx)(Mm,{...l}),(0,_t.jsx)(mm,{...l}),(0,_t.jsx)(Cm,{...l}),(0,_t.jsx)(fm,{...l}),(0,_t.jsx)(Rm,{...l}),(0,_t.jsx)(Nm,{...l}),(0,_t.jsx)(bm,{...l}),(0,_t.jsx)(vm,{...l}),(0,_t.jsx)(hm,{...l}),(0,_t.jsx)(Pm,{...l}),(0,_t.jsx)(xm,{...l}),(0,_t.jsx)(ym,{...l}),(0,_t.jsx)(wm,{...l}),(0,_t.jsx)(Am,{...l}),(0,_t.jsx)(_m,{...l}),(0,_t.jsx)(Tm,{...l}),(0,_t.jsx)(Em,{...l}),(0,_t.jsx)(km,{...l}),(0,_t.jsx)(Bm,{...l})]})}var ta=require("react"),ti=require("lucide-react");var pe=require("react/jsx-runtime"),ov=["512","1024","2048","4096"],Om={none:"None",directional:"Direction",point:"Point",spot:"Spot",hemisphere:"Hemi"};function av({index:e,light:t,selected:r,onSelect:o,onToggleVisible:n}){return(0,pe.jsxs)("div",{className:`se-lightRow ${r?"se-lightRow--active":""}`,onClick:o,children:[(0,pe.jsxs)("span",{className:"se-lightRowLabel",children:[e+1,": ",Om[t.type]]}),(0,pe.jsx)("button",{type:"button",className:"se-iconButton","aria-label":t.visible?"Hide light":"Show light",onClick:i=>{i.stopPropagation(),n()},children:t.visible?(0,pe.jsx)(ti.Eye,{size:14}):(0,pe.jsx)(ti.EyeOff,{size:14})})]})}function sv(){return{id:crypto.randomUUID(),type:"directional",color:"#ffffff",intensity:1,position:[5,10,5],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}}function hc({config:e,onChange:t}){let[r,o]=(0,ta.useState)({lights:!0,shadows:!1,groundShadows:!1,environment:!1,envShadow:!1}),n=(0,ta.useSyncExternalStore)(lc,hs),[i,s]=(0,ta.useState)(e.lighting.lights[0]?.id??null),l=n??i,a=h=>{s(h),Jo(h)},u=h=>o(w=>({...w,[h]:!w[h]})),{tier:f}=Qn(),d=Ir(f,"starter"),{lighting:p,shadows:v,groundShadows:x,environment:_}=e,T=h=>t({...e,lighting:h}),y=h=>t({...e,shadows:h}),c=h=>t({...e,groundShadows:h}),m=h=>t({...e,environment:h}),S=(h,w)=>{T({...p,lights:p.lights.map(g=>g.id===h?{...g,...w}:g)})},C=p.lights.find(h=>h.id===l)??null,N=()=>{let h=sv();T({...p,lights:[...p.lights,h]}),a(h.id)},E=()=>{if(!C)return;let h=p.lights.filter(w=>w.id!==C.id);T({...p,lights:h}),a(h[0]?.id??null)};return(0,pe.jsxs)("div",{className:"se-generalContent",children:[(0,pe.jsxs)(Je,{title:"Lights",open:r.lights,onToggle:()=>u("lights"),children:[(0,pe.jsx)("div",{className:"se-lightList",children:p.lights.map((h,w)=>(0,pe.jsx)(av,{index:w,light:h,selected:h.id===l,onSelect:()=>a(h.id),onToggleVisible:()=>S(h.id,{visible:!h.visible})},h.id))}),(0,pe.jsxs)("div",{className:"se-lightActions",children:[(0,pe.jsx)("button",{type:"button",className:"se-iconButton",onClick:N,title:"Add light",children:(0,pe.jsx)(ti.Plus,{size:14})}),C&&p.lights.length>1&&(0,pe.jsx)("button",{type:"button",className:"se-iconButton",onClick:E,title:"Remove selected light",children:(0,pe.jsx)(ti.Trash2,{size:14})})]}),C?(0,pe.jsxs)("div",{className:"se-lightProps",children:[(0,pe.jsxs)("div",{className:"se-field",children:[(0,pe.jsx)("span",{className:"se-fieldLabel",children:"Type"}),(0,pe.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:Kd.map(h=>(0,pe.jsx)("button",{type:"button",className:`se-segmentedOption ${C.type===h?"se-segmentedOption--active":""}`,onClick:()=>S(C.id,{type:h}),children:Om[h]},h))})]}),(0,pe.jsx)(er,{label:"Color",value:C.color,onChange:h=>S(C.id,{color:h})}),(0,pe.jsx)(q,{label:"Intensity",value:C.intensity,min:0,max:10,step:.1,onChange:h=>S(C.id,{intensity:h})}),C.type!=="hemisphere"&&C.type!=="none"&&(0,pe.jsx)(Qr,{label:"Position",value:C.position,min:-100,max:100,step:.05,onChange:h=>S(C.id,{position:h})}),C.type==="spot"&&(0,pe.jsxs)(pe.Fragment,{children:[(0,pe.jsx)(q,{label:"Angle",value:C.angle??Math.PI/6,min:0,max:Math.PI/2,step:.01,formatValue:h=>`${Math.round(h*180/Math.PI)}\xB0`,onChange:h=>S(C.id,{angle:h})}),(0,pe.jsx)(q,{label:"Penumbra",value:C.penumbra??.2,min:0,max:1,step:.01,onChange:h=>S(C.id,{penumbra:h})}),(0,pe.jsx)(q,{label:"Distance",value:C.distance??0,min:0,max:100,step:.5,onChange:h=>S(C.id,{distance:h})}),(0,pe.jsx)(q,{label:"Decay",value:C.decay??2,min:0,max:4,step:.1,onChange:h=>S(C.id,{decay:h})})]}),(0,pe.jsx)(ct,{label:"Attached to camera",checked:C.attachedToCamera,onChange:h=>S(C.id,{attachedToCamera:h})}),(0,pe.jsx)(ct,{label:"Cast shadows",checked:C.castShadow,onChange:h=>S(C.id,{castShadow:h})}),(0,pe.jsx)(q,{label:"Shadow bias",value:C.shadowBias,min:-.01,max:.01,step:1e-4,onChange:h=>S(C.id,{shadowBias:h})})]}):null]}),(0,pe.jsxs)(Je,{title:"Shadows",open:r.shadows,onToggle:()=>u("shadows"),disabled:!v.enabled,trailing:(0,pe.jsx)(it,{checked:v.enabled,onChange:h=>y({...v,enabled:h}),label:"Toggle shadows"}),children:[(0,pe.jsx)(Fn,{label:"Map size",value:String(v.mapSize),options:ov,onChange:h=>y({...v,mapSize:Number(h)})}),(0,pe.jsx)(q,{label:"Bias",value:v.bias,min:-.01,max:.01,step:1e-4,onChange:h=>y({...v,bias:h})}),(0,pe.jsx)(q,{label:"Normal bias",value:v.normalBias,min:0,max:.2,step:.01,onChange:h=>y({...v,normalBias:h})}),(0,pe.jsx)(q,{label:"Radius (softness)",value:v.radius,min:0,max:20,step:.5,onChange:h=>y({...v,radius:h})})]}),(0,pe.jsxs)(Je,{title:"Ground Shadows",open:r.groundShadows,onToggle:()=>u("groundShadows"),disabled:!x.enabled,trailing:(0,pe.jsx)(it,{checked:x.enabled,onChange:h=>c({...x,enabled:h}),label:"Toggle ground shadows"}),children:[(0,pe.jsxs)("div",{className:"se-field",children:[(0,pe.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,pe.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:["shadowCatcher"].map(h=>(0,pe.jsx)("button",{type:"button",className:`se-segmentedOption ${x.mode===h?"se-segmentedOption--active":""}`,onClick:()=>c({...x,mode:h}),children:h==="shadowCatcher"?"Shadow Catcher":"Baked AO"},h))})]}),x.mode==="bakedAO"&&(0,pe.jsx)("div",{className:"se-placeholder",children:"Requires pre-baked AO textures \u2014 not yet available."}),(0,pe.jsx)(q,{label:"Intensity",value:x.intensity,min:0,max:1,step:.01,onChange:h=>c({...x,intensity:h})}),(0,pe.jsx)(q,{label:"Border fade",value:x.borderFade,min:0,max:10,step:.1,onChange:h=>c({...x,borderFade:h})}),(0,pe.jsx)(q,{label:"Height",value:x.height,min:-5,max:5,step:.1,onChange:h=>c({...x,height:h})}),(0,pe.jsx)(q,{label:"Size",value:x.size,min:1,max:50,step:.5,onChange:h=>c({...x,size:h})})]}),(0,pe.jsx)(Je,{title:"Environment",open:r.environment,onToggle:()=>u("environment"),children:d?(0,pe.jsxs)(pe.Fragment,{children:[(0,pe.jsx)(q,{label:"Orientation",value:_.rotation,min:0,max:360,step:1,formatValue:h=>`${h}\xB0`,onChange:h=>m({..._,rotation:h})}),(0,pe.jsx)(q,{label:"Brightness",value:_.intensity,min:0,max:3,step:.05,onChange:h=>m({..._,intensity:h})}),(0,pe.jsxs)(Je,{title:"Shadow",open:r.envShadow,onToggle:()=>u("envShadow"),trailing:(0,pe.jsx)(it,{checked:_.shadowLight.enabled,onChange:h=>m({..._,shadowLight:{..._.shadowLight,enabled:h}}),label:"Toggle environment shadow light"}),disabled:!_.shadowLight.enabled,children:[(0,pe.jsx)(q,{label:"Light intensity",value:_.shadowLight.intensity,min:0,max:20,step:.1,onChange:h=>m({..._,shadowLight:{..._.shadowLight,intensity:h}})}),(0,pe.jsx)(q,{label:"Shadow bias",value:_.shadowLight.bias,min:-.01,max:.01,step:1e-4,onChange:h=>m({..._,shadowLight:{..._.shadowLight,bias:h}})})]})]}):(0,pe.jsx)(In,{requiredTier:"starter",feature:"Environment lighting"})})]})}var Ts=require("react"),Ar=require("lucide-react");var fe=require("react/jsx-runtime");function lv(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 r=Math.floor(t/60),o=(t%60).toFixed(1).padStart(4,"0");return`${r}:${o}`}function Dm(e){let t=Number.isFinite(e)&&e>0?e:0;if(t<60)return`${t.toFixed(1)}s`;let r=Math.floor(t/60),o=(t%60).toFixed(1).padStart(4,"0");return`${r}:${o}`}function cv(e){return Number.isFinite(e)?Math.min(3,Math.max(.1,Number(e.toFixed(2)))):1}function gc({config:e,onChange:t,clipDetails:r,currentClip:o,isPlaying:n,time:i,play:s,pause:l,stop:a,setSpeed:u,seek:f}){let[d,p]=(0,Ts.useState)(!1),v=(0,Ts.useMemo)(()=>new Map(r.map(h=>[h.sourceName,h.duration])),[r]),x=e.animations.clips.filter(h=>!h.hidden),_=e.animations.clips.filter(h=>h.hidden),T=(h,w=e.animations.autoplayClip)=>{t({...e,animations:{clips:h(e.animations.clips),autoplayClip:w}})},y=(h,w)=>{T(g=>g.map(M=>M.sourceName===h?w(M):M))},c=(h,w)=>{y(h,g=>({...g,loopMode:w}))},m=(h,w)=>{let g=cv(w);y(h,M=>({...M,speed:g})),o===h&&u(g)},S=(h,w)=>{y(h,g=>({...g,displayName:w}))},C=h=>{let w=e.animations.autoplayClip===h?null:h;t({...e,animations:{...e.animations,autoplayClip:w}})},N=h=>{T(w=>w.map(g=>g.sourceName===h?{...g,hidden:!0}:g),e.animations.autoplayClip===h?null:e.animations.autoplayClip),o===h&&a()},E=h=>{T(w=>w.map(g=>g.sourceName===h?{...g,hidden:!1}:g))};return e.animations.clips.length===0?(0,fe.jsx)(Si,{title:"Animations",children:(0,fe.jsx)("div",{className:"se-helperCard",children:"Upload a model with embedded animations to manage playback, naming, autoplay, and per-clip speed here."})}):(0,fe.jsxs)(Si,{title:"Animations",children:[x.length===0&&(0,fe.jsx)("div",{className:"se-helperCard",children:(0,fe.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."})}),x.length===0?(0,fe.jsx)("div",{className:"se-placeholder",children:"All animations are currently removed. Restore a clip below to make it available again."}):(0,fe.jsx)("div",{className:"se-animationList",children:x.map(h=>{let w=o===h.sourceName,g=v.get(h.sourceName)??0;return(0,fe.jsxs)("article",{className:`se-animationCard ${w?"se-animationCard--active":""}`,children:[(0,fe.jsxs)("div",{className:"se-animationHeader",children:[(0,fe.jsxs)("div",{className:"se-animationHeading",children:[(0,fe.jsxs)("div",{className:"se-animationTitleRow",children:[(0,fe.jsx)("span",{className:"se-animationStatus",children:w?n?"Playing":"Paused":"Ready"}),e.animations.autoplayClip===h.sourceName?(0,fe.jsx)("span",{className:"se-animationBadge",children:"Autoplay"}):null]}),(0,fe.jsx)("div",{className:"se-animationSource",children:h.sourceName})]}),(0,fe.jsx)("button",{type:"button",className:"se-animationDangerButton",onClick:()=>N(h.sourceName),title:"Remove animation",children:(0,fe.jsx)(Ar.Trash2,{size:16})})]}),(0,fe.jsxs)("div",{className:"se-field",children:[(0,fe.jsx)("span",{className:"se-fieldLabel",children:"Display name"}),(0,fe.jsx)("input",{className:"se-textInput",value:h.displayName,onChange:D=>S(h.sourceName,D.target.value),placeholder:"Animation name"})]}),(0,fe.jsxs)("div",{className:"se-animationMeta",children:[(0,fe.jsx)("span",{children:lv(g)}),(0,fe.jsx)("span",{children:h.loopMode==="once"?"Play once":"Looping"}),(0,fe.jsxs)("span",{children:[h.speed.toFixed(2),"x"]})]}),(0,fe.jsxs)("div",{className:"se-animationButtonRow",children:[(()=>{let D=w&&n;return(0,fe.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>D?l():s(h.sourceName),"aria-label":D?"Pause":"Play",title:D?"Pause":"Play",children:D?(0,fe.jsx)(Ar.Pause,{size:16}):(0,fe.jsx)(Ar.Play,{size:16})})})(),(0,fe.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:a,disabled:!w,"aria-label":"Stop",title:"Stop",children:(0,fe.jsx)(Ar.Square,{size:16})})]}),(0,fe.jsxs)("div",{className:"se-animationSeekRow",children:[(0,fe.jsx)("input",{className:"se-slider se-animationSeek",type:"range",min:0,max:Math.max(g,.001),step:.01,value:w?Math.min(i,g):0,disabled:!w||g<=0,onChange:D=>f(Number(D.target.value)),"aria-label":"Seek"}),(0,fe.jsxs)("span",{className:"se-animationSeekTime",children:[Dm(w?Math.min(i,g):0)," / ",Dm(g)]})]}),(0,fe.jsxs)("div",{className:"se-animationGrid",children:[(0,fe.jsxs)("label",{className:"se-field",children:[(0,fe.jsx)("span",{className:"se-fieldLabel",children:"Loop mode"}),(0,fe.jsxs)("select",{className:"se-select",value:h.loopMode,onChange:D=>c(h.sourceName,D.target.value),children:[(0,fe.jsx)("option",{value:"repeat",children:"Loop"}),(0,fe.jsx)("option",{value:"once",children:"Play Once"})]})]}),(0,fe.jsxs)("label",{className:"se-field",children:[(0,fe.jsxs)("span",{className:"se-fieldLabel",children:["Speed",(0,fe.jsxs)("span",{className:"se-fieldValue",children:[h.speed.toFixed(2),"x"]})]}),(0,fe.jsxs)("div",{className:"se-animationSpeedRow",children:[(0,fe.jsx)("input",{className:"se-slider",type:"range",min:.1,max:3,step:.1,value:h.speed,onChange:D=>m(h.sourceName,Number(D.target.value))}),(0,fe.jsx)("input",{className:"se-numberInput se-animationSpeedInput",type:"number",min:.1,max:3,step:.1,value:h.speed,onChange:D=>m(h.sourceName,Number(D.target.value))})]})]})]}),(0,fe.jsx)("button",{type:"button",className:`se-animationAutoplayButton ${e.animations.autoplayClip===h.sourceName?"se-animationAutoplayButton--active":""}`,onClick:()=>C(h.sourceName),children:e.animations.autoplayClip===h.sourceName?"Disable autoplay":"Set as autoplay"})]},h.sourceName)})}),_.length>0?(0,fe.jsxs)("section",{className:"se-removedAnimations",children:[(0,fe.jsx)("button",{type:"button",className:"se-panelHeader",onClick:()=>p(h=>!h),children:(0,fe.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,fe.jsx)(Ar.ChevronDown,{size:16,className:`se-panelChevron ${d?"se-panelChevron--open":""}`}),(0,fe.jsxs)("span",{className:"se-panelTitle",children:["Removed Animations (",_.length,")"]})]})}),d?(0,fe.jsx)("div",{className:"se-removedAnimationList",children:_.map(h=>(0,fe.jsxs)("div",{className:"se-removedAnimationRow",children:[(0,fe.jsxs)("div",{children:[(0,fe.jsx)("div",{className:"se-removedAnimationName",children:h.displayName||h.sourceName}),(0,fe.jsx)("div",{className:"se-animationSource",children:h.sourceName})]}),(0,fe.jsx)("button",{type:"button",className:"se-animationButton",onClick:()=>E(h.sourceName),children:"Restore"})]},h.sourceName))}):null]}):null]})}var bc=require("react"),Es=require("lucide-react");var Qe=require("react/jsx-runtime");function vc({config:e,onChange:t}){let[r,o]=(0,bc.useState)(null),[n,i]=(0,bc.useState)({title:"",description:""}),s=e.annotations,l=d=>{o(d),i({title:d.title,description:d.description||""})},a=()=>{if(!r||!n.title.trim())return;let d=s.map(p=>p.id===r.id?{...p,title:n.title.trim(),description:n.description||""}:p);t({...e,annotations:d}),o(null),i({title:"",description:""})},u=d=>{if(window.confirm("Delete this annotation?")){let v=s.filter(x=>x.id!==d).map((x,_)=>({...x,id:_+1}));t({...e,annotations:v}),o(null),i({title:"",description:""})}},f=()=>{o(null),i({title:"",description:""})};return(0,Qe.jsxs)(Si,{title:"Annotations",children:[e.annotations.length===0?(0,Qe.jsx)("div",{className:"bb-emptyAnnotations",children:"No annotations yet. Double-click on the model to add one."}):(0,Qe.jsx)("div",{className:"bb-annotationsList",children:e.annotations.map(d=>(0,Qe.jsxs)("div",{className:"bb-annotationCard",children:[(0,Qe.jsxs)("div",{className:"bb-annotationHeader",children:[(0,Qe.jsxs)("div",{className:"bb-annotationBadge",children:["#",d.id]}),(0,Qe.jsxs)("div",{className:"bb-annotationActions",children:[(0,Qe.jsx)("button",{className:"bb-annotationAction bb-annotationAction--edit",onClick:()=>l(d),title:"Edit annotation",children:(0,Qe.jsx)(Es.Pencil,{size:16})}),(0,Qe.jsx)("button",{className:"bb-annotationAction bb-annotationAction--delete",onClick:()=>u(d.id),title:"Delete annotation",children:(0,Qe.jsx)(Es.Trash2,{size:16})})]})]}),(0,Qe.jsx)("div",{className:"bb-annotationTitle",children:d.title}),d.description&&(0,Qe.jsx)("div",{className:"bb-annotationDescription",children:d.description}),(0,Qe.jsxs)("div",{className:"bb-annotationPosition",children:["Position: [",d.worldPosition[0].toFixed(2),","," ",d.worldPosition[1].toFixed(2),","," ",d.worldPosition[2].toFixed(2),"]"]})]},d.id))}),r&&(0,Qe.jsx)("div",{className:"bb-editAnnotationOverlay",onClick:f,children:(0,Qe.jsxs)("div",{className:"bb-editAnnotationPopup",onClick:d=>d.stopPropagation(),children:[(0,Qe.jsxs)("div",{className:"bb-editAnnotationHeader",children:[(0,Qe.jsx)("h3",{className:"bb-editAnnotationTitle",children:"Edit Annotation"}),(0,Qe.jsx)("button",{className:"bb-editAnnotationClose",onClick:f,children:"\xD7"})]}),(0,Qe.jsxs)("div",{className:"bb-editAnnotationBody",children:[(0,Qe.jsxs)("div",{className:"bb-field",children:[(0,Qe.jsx)("label",{className:"bb-label",children:"Title"}),(0,Qe.jsx)("input",{className:"bb-input",value:n.title,onChange:d=>i({...n,title:d.target.value}),placeholder:"Enter annotation title"})]}),(0,Qe.jsxs)("div",{className:"bb-field",children:[(0,Qe.jsx)("label",{className:"bb-label",children:"Description"}),(0,Qe.jsx)("textarea",{className:"bb-textarea",value:n.description,onChange:d=>i({...n,description:d.target.value}),placeholder:"Enter annotation description",rows:3})]}),(0,Qe.jsxs)("div",{className:"bb-editAnnotationActions",children:[(0,Qe.jsx)("button",{className:"bb-button",onClick:f,children:"Cancel"}),(0,Qe.jsx)("button",{className:"bb-button bb-button--primary",onClick:a,disabled:!n.title.trim(),children:"Save"}),(0,Qe.jsx)("button",{className:"bb-button bb-button--danger",onClick:()=>u(r.id),children:"Delete"})]})]})]})})]})}var Tr=require("react"),tr=require("lucide-react");var ye=require("react/jsx-runtime"),dv={enabled:!0,waypoints:[],loop:!0,autoPlay:!1},Ci=3.5;function xc({config:e,onChange:t,cameraState:r,onPreviewWaypoint:o}){let n=e.cinematic??dv,{waypoints:i}=n,s=(0,Tr.useCallback)((y,c)=>{if(y.length<2)return 0;let m=0;for(let S=0;S<y.length-1;S++){let C=y[S].segmentDuration??Ci;m+=C}return c&&y.length>1&&(m+=y[y.length-1].segmentDuration??Ci),Math.max(m,0)},[]),l=(0,Tr.useCallback)(y=>{t({...e,cinematic:{...n,...y}})},[e,n,t]),a=(0,Tr.useCallback)(()=>{if(!r)return;let y={position:[...r.position],target:[...r.target],...r.azimuthAngle!=null?{azimuthAngle:r.azimuthAngle}:{},...r.polarAngle!=null?{polarAngle:r.polarAngle}:{},segmentDuration:Ci},c=[...i,y],m=s(c,n.loop);l({waypoints:c,duration:m})},[r,i,n.loop,s,l]),u=(0,Tr.useCallback)(y=>{let c=i.filter((S,C)=>C!==y),m=s(c,n.loop);l({waypoints:c,duration:m})},[i,n.loop,s,l]),f=(0,Tr.useCallback)((y,c)=>{let m=y+c;if(m<0||m>=i.length)return;let S=[...i];[S[y],S[m]]=[S[m],S[y]];let C=s(S,n.loop);l({waypoints:S,duration:C})},[i,n.loop,s,l]),d=(0,Tr.useCallback)((y,c)=>{let m=i.map((C,N)=>N===y?{...C,...c}:C),S=s(m,n.loop);l({waypoints:m,duration:S})},[i,n.loop,s,l]),[p,v]=(0,Tr.useState)(!1),x=i.some(y=>y.segmentDuration!==void 0),_=(0,Tr.useCallback)(y=>y>=i.length-1?Ci:i[y]?.segmentDuration??Ci,[i]),T=i.length>=2;return(0,ye.jsxs)(Si,{title:"Cinematic Camera",children:[(0,ye.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,ye.jsxs)("button",{type:"button",className:"bb-button bb-button--primary se-cinematicAdd",onClick:a,disabled:!r,title:"Capture the current camera view as a waypoint",children:[(0,ye.jsx)(tr.Plus,{size:15}),"Add waypoint from current view"]}),(0,ye.jsxs)("div",{className:"se-customizeToggle",children:[(0,ye.jsxs)("label",{className:"se-toggleLabel",children:[(0,ye.jsx)("input",{type:"checkbox",checked:p,onChange:y=>v(y.target.checked)}),(0,ye.jsx)(tr.Settings,{size:14}),(0,ye.jsx)("span",{children:"Customize durations between waypoints"})]}),p&&(0,ye.jsxs)("span",{className:"se-toggleHint",children:["Set duration for each segment between waypoints: 1\u21922, 2\u21923, etc. Default: ",Ci,"s"]})]}),i.length===0?(0,ye.jsx)("div",{className:"bb-emptyAnnotations",children:"No waypoints yet. Position the camera and add your first one."}):(0,ye.jsxs)(ye.Fragment,{children:[(0,ye.jsx)("div",{className:"se-waypointList",children:i.map((y,c)=>{let m=_(c),S=c===i.length-1,C=y.segmentDuration!==void 0&&y.segmentDuration!==Ci;return(0,ye.jsxs)("div",{children:[(0,ye.jsxs)("div",{className:"se-waypointCard",children:[(0,ye.jsx)("div",{className:"se-waypointBadge",children:c+1}),(0,ye.jsxs)("div",{className:"se-waypointBody",children:[(0,ye.jsxs)("div",{className:"se-waypointCoords",children:["pos [",y.position.map(N=>N.toFixed(1)).join(", "),"]"]}),(0,ye.jsxs)("div",{className:"se-waypointCoords",children:["look [",y.target.map(N=>N.toFixed(1)).join(", "),"]"]}),p&&!S&&(0,ye.jsxs)("div",{className:`se-customBadge ${C?"se-customBadge--custom":"se-customBadge--default"}`,children:[m.toFixed(1),"s",!C&&" (default)"]})]}),(0,ye.jsxs)("div",{className:"se-waypointActions",children:[(0,ye.jsx)("button",{className:"se-waypointAction",onClick:()=>o?.(y),title:"Fly camera to this waypoint",disabled:!o,children:(0,ye.jsx)(tr.MapPin,{size:15})}),(0,ye.jsx)("button",{className:"se-waypointAction",onClick:()=>f(c,-1),title:"Move up",disabled:c===0,children:(0,ye.jsx)(tr.ArrowUp,{size:15})}),(0,ye.jsx)("button",{className:"se-waypointAction",onClick:()=>f(c,1),title:"Move down",disabled:S,children:(0,ye.jsx)(tr.ArrowDown,{size:15})}),(0,ye.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:()=>u(c),title:"Delete waypoint",children:(0,ye.jsx)(tr.Trash2,{size:15})})]})]}),p&&!S&&(0,ye.jsxs)("div",{className:"se-segmentBetween",children:[(0,ye.jsxs)("div",{className:"se-segmentLabel",children:[c+1," \u2192 ",c+2,!y.segmentDuration&&" (default)"]}),(0,ye.jsxs)("div",{className:"se-segmentControls",children:[(0,ye.jsx)("span",{className:"se-durationLabel",children:"Duration:"}),(0,ye.jsx)("input",{type:"range",className:"se-segmentSlider",min:1,max:20,step:.5,value:m,onChange:N=>{let E=parseFloat(N.target.value);d(c,{segmentDuration:E})}}),(0,ye.jsxs)("span",{className:"se-segmentValue",children:[m.toFixed(1),"s"]}),(0,ye.jsxs)("div",{className:"se-presetButtons",children:[[2,4,6,8].map(N=>(0,ye.jsxs)("button",{className:"se-presetButton",onClick:()=>d(c,{segmentDuration:N}),children:[N,"s"]},`preset-${c}-${N}`)),(0,ye.jsx)("button",{className:"se-presetButton se-presetButton--default",onClick:()=>{let N=i.map((h,w)=>{if(w===c){let{segmentDuration:g,...M}=h;return M}return h}),E=s(N,n.loop);l({waypoints:N,duration:E})},children:"Reset"})]})]})]})]},`waypoint-wrapper-${c}`)})}),(0,ye.jsxs)("div",{className:"se-totalDuration",children:[(0,ye.jsx)("span",{className:"se-totalLabel",children:"Total duration:"}),(0,ye.jsx)("span",{className:"se-totalValue",children:T?(n.duration??s(i,n.loop)).toFixed(1)+"s":"-"}),!T&&(0,ye.jsx)("span",{className:"se-totalHint",children:"(need at least 2 waypoints)"})]})]}),(0,ye.jsx)(ct,{label:"Enable cinematic camera",checked:n.enabled,onChange:y=>l({enabled:y})}),(0,ye.jsx)(ct,{label:"Loop",checked:n.loop,onChange:y=>{let c=y,m=s(i,c);l({loop:c,duration:m})}}),(0,ye.jsx)(ct,{label:"Auto-play on load",checked:n.autoPlay,onChange:y=>l({autoPlay:y})}),!p&&T&&(0,ye.jsx)(q,{label:"Duration",value:n.duration??s(i,n.loop),min:4,max:120,step:1,formatValue:y=>`${y}s`,onChange:y=>l({duration:y})})]})}var nr=require("lucide-react");var en=require("react/jsx-runtime"),uv=[{label:"General",icon:(0,en.jsx)(nr.Box,{})},{label:"Lighting",icon:(0,en.jsx)(nr.Spotlight,{})},{label:"Animations",icon:(0,en.jsx)(nr.Clapperboard,{})},{label:"Post Processing",icon:(0,en.jsx)(nr.Sparkles,{})},{label:"Annotations",icon:(0,en.jsx)(nr.MessageSquareText,{})},{label:"Cinematic",icon:(0,en.jsx)(nr.Video,{})}],Im={currentClip:null,isPlaying:!1,time:0,duration:0,play:()=>{},pause:()=>{},stop:()=>{},setSpeed:()=>{},seek:()=>{}};function yc({config:e,onChange:t,activeSubTab:r,onActiveSubTabChange:o,cameraState:n=null,onPreviewWaypoint:i,animationClipDetails:s=[],animationPlayback:l=Im}){let[a,u]=(0,ks.useState)("General"),f=r??a,d=l??Im,{tier:p}=Qn(),v=Ir(p,"starter"),x=Ir(p,"growth");(0,ks.useEffect)(()=>{r!==void 0&&u(r)},[r]);let _=T=>{r===void 0&&u(T),o?.(T)};return(0,en.jsxs)("div",{className:"se-tabContent",children:[(0,en.jsx)("div",{className:"se-subTabRow",children:uv.map(T=>(0,en.jsx)("button",{type:"button",title:T.label,className:`se-subTab ${f===T.label?"se-subTab--active":""}`,onClick:()=>_(T.label),children:T.icon},T.label))}),f==="General"&&(0,en.jsx)(mc,{config:e,onChange:t}),f==="Lighting"&&(0,en.jsx)(hc,{config:e,onChange:t}),f==="Animations"&&(v?(0,en.jsx)(gc,{config:e,onChange:t,clipDetails:s,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,en.jsx)(In,{requiredTier:"starter",feature:"Animation configuration"})),f==="Post Processing"&&(x?(0,en.jsx)(fc,{config:e,onChange:t}):(0,en.jsx)(In,{requiredTier:"growth",feature:"Post-processing effects"})),f==="Annotations"&&(v?(0,en.jsx)(vc,{config:e,onChange:t}):(0,en.jsx)(In,{requiredTier:"starter",feature:"Annotations"})),f==="Cinematic"&&(v?(0,en.jsx)(xc,{config:e,onChange:t,cameraState:n,onPreviewWaypoint:i}):(0,en.jsx)(In,{requiredTier:"starter",feature:"Cinematic camera"}))]})}var ho=require("lucide-react"),It=require("react/jsx-runtime");function zm({title:e,trailing:t,children:r,disabled:o,open:n,onToggle:i,tooltip:s}){let l=s?`${s}`:e;return(0,It.jsxs)("div",{className:"bb-materialPanel",children:[(0,It.jsxs)("button",{type:"button",className:"bb-materialPanelHeader",onClick:i,"aria-expanded":n,title:l,children:[(0,It.jsxs)("div",{className:"bb-materialPanelTitleWrap",children:[(0,It.jsx)(ho.ChevronDown,{size:14,className:`bb-materialPanelChevron ${n?"bb-materialPanelChevron--open":""}`}),(0,It.jsx)("span",{className:"bb-materialPanelTitle",children:e}),s?(0,It.jsx)("span",{className:"bb-materialPanelHelp",title:l,"aria-label":l,role:"img",onClick:a=>a.stopPropagation(),children:(0,It.jsx)(ho.Info,{size:12})}):null]}),t?(0,It.jsx)("div",{onClick:a=>a.stopPropagation(),children:t}):null]}),n?(0,It.jsx)("div",{className:"bb-materialPanelBody",style:o?{opacity:.45,pointerEvents:"none"}:void 0,children:r}):null]})}function zn({title:e,open:t,onToggle:r,trailing:o,children:n,tooltip:i}){let s=i?`${e}: ${i}`:e;return(0,It.jsxs)("div",{className:"bb-section",children:[(0,It.jsxs)("button",{type:"button",className:"bb-sectionHeaderButton",onClick:r,"aria-expanded":t,title:s,children:[(0,It.jsxs)("span",{className:"bb-sectionHeaderMain",children:[(0,It.jsx)(ho.ChevronDown,{size:15,className:`bb-sectionChevron ${t?"bb-sectionChevron--open":""}`}),(0,It.jsx)("h2",{className:"bb-sectionTitle",children:e}),i?(0,It.jsx)("span",{className:"bb-sectionHelp",title:s,"aria-label":s,role:"img",onClick:l=>l.stopPropagation(),children:(0,It.jsx)(ho.Info,{size:13})}):null]}),o?(0,It.jsx)("span",{onClick:l=>l.stopPropagation(),children:o}):null]}),t?(0,It.jsx)("div",{className:"bb-sectionBody",children:n}):null]})}function Um({checked:e,onChange:t,label:r}){return(0,It.jsxs)("label",{className:"se-switch","aria-label":r,children:[(0,It.jsx)("input",{type:"checkbox",checked:e,onChange:o=>t(o.target.checked)}),(0,It.jsx)("span",{className:"se-switchTrack",children:(0,It.jsx)("span",{className:"se-switchThumb"})})]})}var wc=require("react");var Rs=["front","back","double"],Ns=["normal","additive"];var Bs=require("react/jsx-runtime");function Hn({panelKey:e,title:t,tooltip:r,toggleLabel:o,controls:n,children:i,requiredTier:s}){let{openMaterialPanels:l,materialPanelEnabled:a,onToggleMaterialPanel:u,onSetMaterialPanelState:f}=n,d=s?.locked??!1;return(0,Bs.jsx)(zm,{title:t,tooltip:r,disabled:d||!a[e],open:l[e],onToggle:()=>u(e),trailing:(0,Bs.jsx)(Um,{checked:!d&&a[e],onChange:d?()=>{}:p=>f(e,p),label:o??`Toggle ${t}`}),children:d&&s?(0,Bs.jsx)(In,{requiredTier:s.tier,feature:t}):i})}var na=require("react"),Ls=require("react-colorful"),Vm=require("lucide-react");var dt=require("react/jsx-runtime");function an({label:e,value:t,placeholder:r,onChange:o}){let n=(0,na.useRef)(null);return(0,dt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,dt.jsx)("label",{className:"bb-label",children:e}),(0,dt.jsxs)("div",{className:"bb-fileField",children:[(0,dt.jsx)("input",{className:"bb-input bb-fileField-input",placeholder:r,value:t,onChange:i=>{let s=i.target.value;!s&&t&&Pl(t),o(s)}}),(0,dt.jsx)("button",{type:"button",className:"bb-fileFieldButton",onClick:()=>n.current?.click(),"aria-label":`Select file for ${e}`,title:`Select file for ${e}`,children:(0,dt.jsx)(Vm.FileUp,{size:20})}),(0,dt.jsx)("input",{ref:n,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif",className:"bb-hiddenInput",onChange:i=>{let s=i.target.files?.[0];if(!s)return;let l=au(s);t&&t!==l&&Pl(t),du(l,URL.createObjectURL(s)),o(l),i.target.value=""}})]})]})}function Pi({label:e,value:t,fallback:r="#ffffff",onChange:o}){let[n,i]=(0,na.useState)(!1),s=t||r,l=(0,na.useRef)(null);return(0,dt.jsxs)("div",{className:"bb-field",children:[(0,dt.jsx)("span",{className:"bb-label",children:e}),(0,dt.jsx)("div",{className:"se-fieldInline",children:(0,dt.jsx)("span",{ref:l,style:{display:"inline-flex"},children:(0,dt.jsx)(Ls.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>i(a=>!a),style:{background:s,color:fo(s)},color:s,onChange:o})})}),n?(0,dt.jsx)(pc,{anchorRef:l,onClose:()=>i(!1),children:(0,dt.jsx)(Ls.HexColorPicker,{color:s,onChange:o})}):null]})}function ra({label:e,checked:t,onChange:r}){return(0,dt.jsxs)("label",{className:"bb-checkbox",children:[(0,dt.jsx)("input",{type:"checkbox",checked:t,onChange:o=>r(o.target.checked)}),e]})}function jm({label:e,value:t,min:r,max:o,step:n,placeholder:i,onChange:s}){return(0,dt.jsxs)("div",{className:"bb-field",children:[(0,dt.jsx)("label",{className:"bb-label",children:e}),(0,dt.jsx)("input",{className:"bb-input",type:"number",min:r,max:o,step:n,placeholder:i,value:t??"",onChange:l=>s(l.target.value===""?void 0:Number(l.target.value))})]})}function go({label:e,value:t,options:r,onChange:o}){return(0,dt.jsxs)("div",{className:"bb-field",children:[(0,dt.jsx)("label",{className:"bb-label",children:e}),(0,dt.jsx)("select",{className:"bb-select",value:t,onChange:n=>o(n.target.value),children:r.map(n=>(0,dt.jsx)("option",{value:n,children:n},n))})]})}function zt({label:e,value:t,min:r,max:o,step:n,onChange:i}){return(0,dt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,dt.jsx)("label",{className:"bb-label",children:e}),(0,dt.jsxs)("div",{className:"bb-sliderField",children:[(0,dt.jsx)("input",{className:`bb-slider ${t===void 0?"bb-slider--unset":""}`,type:"range",min:r,max:o,step:n,value:t??r,onChange:l=>i(Number(l.target.value))}),(0,dt.jsx)("input",{className:"bb-input bb-input--compact",type:"number",min:r,max:o,step:n,value:t??"",onChange:l=>i(l.target.value===""?void 0:Number(l.target.value))})]})]})}var Y=require("react/jsx-runtime");function Fm({selectedItem:e,selectedMaterial:t,pbrWorkflow:r,onPbrWorkflowChange:o,openMaterialPanels:n,materialPanelEnabled:i,onToggleMaterialPanel:s,onSetMaterialPanelState:l,updateSelectedMaterial:a,setSelectedTexturePath:u}){let f={openMaterialPanels:n,materialPanelEnabled:i,onToggleMaterialPanel:s,onSetMaterialPanelState:l},{tier:d}=Qn(),p=Ir(d,"starter"),v={tier:"starter",locked:!p},[x,_]=(0,wc.useState)("roughness"),[T,y]=(0,wc.useState)("factor");return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Hn,{panelKey:"pbr",title:"PBR Maps",tooltip:"Controls the base color and workflow used for physically based shading.",controls:f,children:p?(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(go,{label:"Workflow",value:r,options:["metalness","specular"],onChange:o}),(0,Y.jsx)("div",{className:"bb-field bb-field--full",children:(0,Y.jsx)("p",{className:"bb-note",style:{margin:0},children:r==="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,Y.jsx)(an,{label:r==="specular"?"Albedo texture path":"Base color texture path",placeholder:"materials/oak-wood.jpg",value:t?.texture?.path??"",onChange:c=>u(e,"texture",c)}),(0,Y.jsx)(Pi,{label:r==="specular"?"Albedo color":"Base color",value:t?.baseColor??"#ffffff",onChange:c=>a(e,m=>({...m,baseColor:c}))}),r==="metalness"?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(zt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,metalness:c}))}),(0,Y.jsx)(an,{label:"Metalness map path",placeholder:"materials/body-metalness.jpg",value:t?.metalnessMap?.path??"",onChange:c=>u(e,"metalnessMap",c)})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(zt,{label:"Specular intensity",value:t?.specularIntensity,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,specularIntensity:c}))}),(0,Y.jsx)(Pi,{label:"Specular color",value:t?.specularColor??"#ffffff",onChange:c=>a(e,m=>({...m,specularColor:c}))}),(0,Y.jsx)(an,{label:"Specular intensity map path",placeholder:"materials/body-specular-intensity.jpg",value:t?.specularIntensityMap?.path??"",onChange:c=>u(e,"specularIntensityMap",c)}),(0,Y.jsx)(an,{label:"Specular color map path",placeholder:"materials/body-specular-color.jpg",value:t?.specularColorMap?.path??"",onChange:c=>u(e,"specularColorMap",c)})]}),(0,Y.jsx)(zt,{label:"Specular F0 / reflectivity",value:t?.reflectivity,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,reflectivity:c}))})]}):(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Pi,{label:"Base color",value:t?.baseColor??"#ffffff",onChange:c=>a(e,m=>({...m,baseColor:c}))}),(0,Y.jsx)(zt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,metalness:c}))}),(0,Y.jsx)("div",{className:"bb-field bb-field--full",children:(0,Y.jsx)(In,{requiredTier:"starter",feature:"Texture maps, the specular workflow, and reflectivity"})})]})}),(0,Y.jsx)(Hn,{panelKey:"roughness",requiredTier:v,title:"Roughness / Glossiness",tooltip:"Adjusts how matte or shiny the surface appears.",toggleLabel:"Toggle Roughness and Glossiness",controls:f,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(go,{label:"Mode",value:x,options:["roughness","glossiness"],onChange:_}),(0,Y.jsx)("div",{className:"bb-field bb-field--full",children:(0,Y.jsx)("p",{className:"bb-note",style:{margin:0},children:x==="roughness"?"Roughness: 0 is glossy, 1 is matte.":"Glossiness is the inverse of roughness (glossiness = 1 \u2212 roughness)"})}),x==="roughness"?(0,Y.jsx)(zt,{label:"Roughness",value:t?.roughness,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,roughness:c}))}):(0,Y.jsx)(zt,{label:"Glossiness",value:t?.roughness===void 0?void 0:1-t.roughness,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,roughness:c===void 0?void 0:1-c}))}),(0,Y.jsx)(an,{label:x==="glossiness"?"Glossiness map path (applied as roughness)":"Roughness map path",placeholder:"materials/body-roughness.jpg",value:t?.roughnessMap?.path??"",onChange:c=>u(e,"roughnessMap",c)})]})}),(0,Y.jsx)(Hn,{panelKey:"emission",requiredTier:v,title:"Emission",tooltip:"Makes the material self-illuminated with emissive color and intensity.",controls:f,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Pi,{label:"Emissive color",value:t?.emissive??"#000000",fallback:"#000000",onChange:c=>a(e,m=>({...m,emissive:c}))}),(0,Y.jsx)(zt,{label:"Emissive intensity",value:t?.emissiveIntensity,min:0,max:10,step:.1,onChange:c=>a(e,m=>({...m,emissiveIntensity:c}))}),(0,Y.jsx)(an,{label:"Emissive map path",placeholder:"materials/body-emissive.jpg",value:t?.emissiveMap?.path??"",onChange:c=>u(e,"emissiveMap",c)})]})}),(0,Y.jsx)(Hn,{panelKey:"opacity",requiredTier:v,title:"Opacity",tooltip:"Controls transparency, alpha testing, and blending behavior.",controls:f,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(zt,{label:"Opacity",value:t?.opacity,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,opacity:c}))}),(0,Y.jsx)(zt,{label:"Alpha test",value:t?.alphaTest,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,alphaTest:c}))}),(0,Y.jsx)(an,{label:"Alpha map path",placeholder:"materials/body-alpha.png",value:t?.alphaMap?.path??"",onChange:c=>u(e,"alphaMap",c)}),(0,Y.jsx)(go,{label:"Blending mode",value:t?.blendingMode??"normal",options:Ns,onChange:c=>a(e,m=>({...m,blendingMode:c}))}),(0,Y.jsxs)("div",{className:"bb-field",children:[(0,Y.jsx)("label",{className:"bb-label",children:"Alpha hash"}),(0,Y.jsx)("div",{className:"bb-checkboxRow",children:(0,Y.jsx)(ra,{label:"Use alpha hash",checked:t?.alphaHash??!1,onChange:c=>a(e,m=>({...m,alphaHash:c}))})})]}),(0,Y.jsxs)("div",{className:"bb-field",children:[(0,Y.jsx)("label",{className:"bb-label",children:"Dithering"}),(0,Y.jsx)("div",{className:"bb-checkboxRow",children:(0,Y.jsx)(ra,{label:"Use dithering",checked:t?.dithering??!1,onChange:c=>a(e,m=>({...m,dithering:c}))})})]})]})}),(0,Y.jsxs)(Hn,{panelKey:"normalBump",requiredTier:v,title:"Normal & Bump",tooltip:"Adds surface detail without changing the actual mesh shape.",toggleLabel:"Toggle Normal and Bump",controls:f,children:[(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(an,{label:"Normal map path",placeholder:"materials/body-normal.jpg",value:t?.normalMap?.path??"",onChange:c=>u(e,"normalMap",c)}),(0,Y.jsx)(zt,{label:"Normal scale",value:t?.normalScale,min:0,max:5,step:.01,onChange:c=>a(e,m=>({...m,normalScale:c}))}),(0,Y.jsx)(an,{label:"Bump map path",placeholder:"materials/body-bump.jpg",value:t?.bumpMap?.path??"",onChange:c=>u(e,"bumpMap",c)}),(0,Y.jsx)(zt,{label:"Bump scale",value:t?.bumpScale,min:0,max:5,step:.01,onChange:c=>a(e,m=>({...m,bumpScale:c}))})]}),(0,Y.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Y.jsx)(ra,{label:"Flip normal Y",checked:t?.flipNormalY??!1,onChange:c=>a(e,m=>({...m,flipNormalY:c}))})})]}),(0,Y.jsx)(Hn,{panelKey:"displacement",requiredTier:v,title:"Displacement",tooltip:"Offsets geometry using a texture to create real surface height.",controls:f,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(an,{label:"Displacement map path",placeholder:"materials/body-displacement.jpg",value:t?.displacementMap?.path??"",onChange:c=>u(e,"displacementMap",c)}),(0,Y.jsx)(zt,{label:"Displacement scale",value:t?.displacementScale,min:-5,max:5,step:.01,onChange:c=>a(e,m=>({...m,displacementScale:c}))}),(0,Y.jsx)(zt,{label:"Displacement bias",value:t?.displacementBias,min:-5,max:5,step:.01,onChange:c=>a(e,m=>({...m,displacementBias:c}))})]})}),(0,Y.jsx)(Hn,{panelKey:"ao",requiredTier:v,title:"Ambient Occlusion",tooltip:"Darkens creases and contact areas to add depth.",controls:f,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(an,{label:"AO map path",placeholder:"materials/body-ao.jpg",value:t?.aoMap?.path??"",onChange:c=>u(e,"aoMap",c)}),(0,Y.jsx)(zt,{label:"AO intensity",value:t?.aoMapIntensity,min:0,max:5,step:.01,onChange:c=>a(e,m=>({...m,aoMapIntensity:c}))})]})}),(0,Y.jsxs)(Hn,{panelKey:"clearcoat",requiredTier:v,title:"Clearcoat",tooltip:"Adds a glossy protective layer on top of the base material.",controls:f,children:[(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(an,{label:"Clearcoat map path",placeholder:"materials/body-clearcoat.jpg",value:t?.clearcoatMap?.path??"",onChange:c=>u(e,"clearcoatMap",c)}),(0,Y.jsx)(zt,{label:"Clearcoat",value:t?.clearcoat,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,clearcoat:c}))}),(0,Y.jsx)(an,{label:"Clearcoat roughness map path",placeholder:"materials/body-clearcoat-roughness.jpg",value:t?.clearcoatRoughnessMap?.path??"",onChange:c=>u(e,"clearcoatRoughnessMap",c)}),(0,Y.jsx)(zt,{label:"Clearcoat roughness",value:t?.clearcoatRoughness,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,clearcoatRoughness:c}))}),(0,Y.jsx)(an,{label:"Clearcoat normal map path",placeholder:"materials/body-clearcoat-normal.jpg",value:t?.clearcoatNormalMap?.path??"",onChange:c=>u(e,"clearcoatNormalMap",c)}),(0,Y.jsx)(zt,{label:"Clearcoat normal scale",value:t?.clearcoatNormalScale,min:0,max:5,step:.01,onChange:c=>a(e,m=>({...m,clearcoatNormalScale:c}))})]}),(0,Y.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Y.jsx)(ra,{label:"Flip clearcoat normal Y",checked:t?.flipClearcoatNormalY??!1,onChange:c=>a(e,m=>({...m,flipClearcoatNormalY:c}))})})]}),(0,Y.jsx)(Hn,{panelKey:"sheen",requiredTier:v,title:"Sheen",tooltip:"Adds a soft fabric-like sheen on grazing angles.",controls:f,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(zt,{label:"Sheen",value:t?.sheen,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,sheen:c}))}),(0,Y.jsx)(Pi,{label:"Sheen color",value:t?.sheenColor??"#ffffff",onChange:c=>a(e,m=>({...m,sheenColor:c}))}),(0,Y.jsx)(an,{label:"Sheen color map path",placeholder:"materials/body-sheen-color.jpg",value:t?.sheenColorMap?.path??"",onChange:c=>u(e,"sheenColorMap",c)}),(0,Y.jsx)(zt,{label:"Sheen roughness",value:t?.sheenRoughness,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,sheenRoughness:c}))}),(0,Y.jsx)(an,{label:"Sheen roughness map path",placeholder:"materials/body-sheen-roughness.jpg",value:t?.sheenRoughnessMap?.path??"",onChange:c=>u(e,"sheenRoughnessMap",c)})]})}),(0,Y.jsx)(Hn,{panelKey:"anisotropy",requiredTier:v,title:"Anisotropy",tooltip:"Stretches reflections in one direction for brushed or fiber-like surfaces.",controls:f,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(zt,{label:"Intensity",value:t?.anisotropy,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,anisotropy:c}))}),(0,Y.jsx)(go,{label:"Tilt direction",value:T,options:["factor","texture"],onChange:y}),T==="factor"?(0,Y.jsx)(zt,{label:"Rotation (rad)",value:t?.anisotropyRotation,min:0,max:6.28,step:.01,onChange:c=>a(e,m=>({...m,anisotropyRotation:c}))}):(0,Y.jsx)(an,{label:"Anisotropy map path",placeholder:"materials/body-anisotropy.jpg",value:t?.anisotropyMap?.path??"",onChange:c=>u(e,"anisotropyMap",c)})]})}),(0,Y.jsx)(Hn,{panelKey:"transmission",requiredTier:v,title:"Transmission & Volume",tooltip:"Controls glass-like transmission and how light travels through volume.",toggleLabel:"Toggle Transmission and Volume",controls:f,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(zt,{label:"Transmission",value:t?.transmission,min:0,max:1,step:.01,onChange:c=>a(e,m=>({...m,transmission:c}))}),(0,Y.jsx)(an,{label:"Transmission map path",placeholder:"materials/body-transmission.jpg",value:t?.transmissionMap?.path??"",onChange:c=>u(e,"transmissionMap",c)}),(0,Y.jsx)(zt,{label:"Thickness",value:t?.thickness,min:0,max:5,step:.01,onChange:c=>a(e,m=>({...m,thickness:c}))}),(0,Y.jsx)(an,{label:"Thickness map path",placeholder:"materials/body-thickness.jpg",value:t?.thicknessMap?.path??"",onChange:c=>u(e,"thicknessMap",c)}),(0,Y.jsx)(Pi,{label:"Volume tint",value:t?.attenuationColor??"#ffffff",onChange:c=>a(e,m=>({...m,attenuationColor:c}))}),(0,Y.jsx)(jm,{label:"Attenuation distance",value:t?.attenuationDistance,min:0,step:.01,placeholder:"Infinity when unset",onChange:c=>a(e,m=>({...m,attenuationDistance:c}))})]})}),(0,Y.jsx)(Hn,{panelKey:"faces",requiredTier:v,title:"Faces Rendering",tooltip:"Chooses which side of the mesh renders and how backfaces are handled.",controls:f,children:(0,Y.jsx)("div",{className:"bb-grid",children:(0,Y.jsx)(go,{label:"Side",value:t?.side??"front",options:Rs,onChange:c=>a(e,m=>({...m,side:c}))})})})]})}var Hm=[{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 bo=require("react/jsx-runtime");function Gm({disabled:e,onApply:t}){return(0,bo.jsx)("div",{className:"bb-presetGallery",children:Hm.map(r=>(0,bo.jsxs)("button",{type:"button",className:"bb-presetSwatch",disabled:e,title:`Apply ${r.label} preset`,onClick:()=>t(r.material),children:[(0,bo.jsx)("span",{className:"bb-presetSwatchColor",style:{background:r.swatch}}),(0,bo.jsx)("span",{className:"bb-presetSwatchLabel",children:r.label})]},r.id))})}var vo=require("react"),ni=require("lucide-react"),hr=require("react/jsx-runtime");function _c({disabled:e,exporting:t,onExportJson:r,onExportTs:o}){let[n,i]=(0,vo.useState)(!1),s=(0,vo.useRef)(null);return(0,vo.useEffect)(()=>{if(!n)return;let l=a=>{s.current?.contains(a.target)||i(!1)};return window.addEventListener("pointerdown",l),()=>window.removeEventListener("pointerdown",l)},[n]),(0,hr.jsxs)("div",{className:"bb-exportMenuWrapper",ref:s,children:[(0,hr.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:e||t,onClick:()=>i(l=>!l),title:"Export",children:[(0,hr.jsx)(ni.Download,{size:14}),t?"Exporting\u2026":"Export",(0,hr.jsx)(ni.ChevronDown,{size:12})]}),n&&(0,hr.jsxs)("div",{className:"bb-exportMenu",children:[(0,hr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{i(!1),r()},children:[(0,hr.jsx)(ni.FileJson,{size:14}),"JSON"]}),(0,hr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{i(!1),o()},children:[(0,hr.jsx)(ni.FileCode2,{size:14}),"TypeScript"]})]})]})}var rr=require("react/jsx-runtime");function Wm({selectedItem:e,selectedBinding:t,open:r,onToggle:o,updateBinding:n,idError:i}){return(0,rr.jsx)(zn,{title:"Identity",open:r,onToggle:o,children:(0,rr.jsxs)("div",{className:"bb-grid",children:[(0,rr.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,rr.jsx)("label",{className:"bb-label",children:"Model Node ID"}),(0,rr.jsx)("span",{className:"bb-note",children:"This is the exact mesh name from the imported model and stays locked."}),(0,rr.jsx)("input",{className:"bb-input bb-readonly",value:t.modelObjectId,readOnly:!0})]}),(0,rr.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,rr.jsx)("label",{className:"bb-label",children:"ID"}),(0,rr.jsx)("input",{className:`bb-input ${i?"bb-input--error":""}`,value:t.id,onChange:s=>n(e,l=>({...l,id:s.target.value}))}),i?(0,rr.jsx)("span",{className:"bb-status bb-status--error",children:i}):null]})]})})}var ia=require("react");var Xm=["other","body","light","wheel","glass","interior","floor","wall","door","furniture","decor","electronics","seat","table","chair","window","sofa","bed","engine","headlight"],$m=["normal","hidden","selected","disabled"];var mt=require("react/jsx-runtime");function Ym({selectedItem:e,selectedBinding:t,open:r,onToggle:o,updateBinding:n}){let[i,s]=(0,ia.useState)(t.group??""),[l,a]=(0,ia.useState)(t.tags?.join(", ")??"");(0,ia.useEffect)(()=>{s(t.group??""),a(t.tags?.join(", ")??"")},[e,t.group,t.tags]);let u=()=>{n(e,d=>({...d,group:i.trim()||void 0}))},f=()=>{let d=[...new Set(l.split(",").map(p=>p.trim()).filter(Boolean))];n(e,p=>({...p,tags:d.length>0?d:void 0}))};return(0,mt.jsxs)(zn,{title:"Basics",open:r,onToggle:o,children:[(0,mt.jsxs)("div",{className:"bb-grid",children:[(0,mt.jsxs)("div",{className:"bb-field",children:[(0,mt.jsx)("label",{className:"bb-label",children:"Label"}),(0,mt.jsx)("input",{className:"bb-input",value:t.label??"",onChange:d=>n(e,p=>({...p,label:d.target.value}))})]}),(0,mt.jsxs)("div",{className:"bb-field",children:[(0,mt.jsx)("label",{className:"bb-label",children:"Type"}),(0,mt.jsx)("input",{className:"bb-input",list:"binding-type-suggestions",value:t.type,onChange:d=>n(e,p=>({...p,type:d.target.value}))}),(0,mt.jsx)("datalist",{id:"binding-type-suggestions",children:Xm.map(d=>(0,mt.jsx)("option",{value:d},d))})]}),(0,mt.jsxs)("div",{className:"bb-field",children:[(0,mt.jsx)("label",{className:"bb-label",children:"Status"}),(0,mt.jsx)("select",{className:"bb-select",value:t.status??"normal",onChange:d=>n(e,p=>({...p,status:d.target.value})),children:$m.map(d=>(0,mt.jsx)("option",{value:d,children:d},d))})]}),(0,mt.jsxs)("div",{className:"bb-field",children:[(0,mt.jsx)("label",{className:"bb-label",children:"Group"}),(0,mt.jsx)("input",{className:"bb-input",placeholder:"paint",value:i,onChange:d=>s(d.target.value),onBlur:u,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]}),(0,mt.jsxs)("div",{className:"bb-field",children:[(0,mt.jsx)("label",{className:"bb-label",children:"Tags"}),(0,mt.jsx)("input",{className:"bb-input",placeholder:"exterior, configurable",value:l,onChange:d=>a(d.target.value),onBlur:f,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]})]}),(0,mt.jsxs)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:[(0,mt.jsxs)("label",{className:"bb-checkbox",children:[(0,mt.jsx)("input",{type:"checkbox",checked:t.selectable??!1,onChange:d=>n(e,p=>({...p,selectable:d.target.checked}))}),"selectable"]}),(0,mt.jsxs)("label",{className:"bb-checkbox",children:[(0,mt.jsx)("input",{type:"checkbox",checked:t.hoverable??!1,onChange:d=>n(e,p=>({...p,hoverable:d.target.checked}))}),"hoverable"]}),(0,mt.jsxs)("label",{className:"bb-checkbox",children:[(0,mt.jsx)("input",{type:"checkbox",checked:t.visible??!1,onChange:d=>n(e,p=>({...p,visible:d.target.checked}))}),"visible"]})]})]})}var Ds=require("react");var Ai=[{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:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."},{id:"change-light-color",label:"Change Light Color",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."},{id:"set-brightness",label:"Set Brightness",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."}],Os="__custom__";function oa(e){return Ai.find(t=>t.id===e)}var b_=Ai.filter(e=>e.handling==="viewer").map(e=>e.id),pv=new Set(["","New Action",...Ai.map(e=>e.label)]);function Sc(e){return pv.has(e.trim())}function Km(e,t){let r=Array.from({length:t.length+1},(o,n)=>n);for(let o=1;o<=e.length;o+=1){let n=[o];for(let i=1;i<=t.length;i+=1){let s=r[i-1]+(e[o-1]===t[i-1]?0:1);n[i]=Math.min(n[i-1]+1,r[i]+1,s)}r=n}return r[t.length]}function qm(e){if(oa(e))return null;let t=e.trim().toLowerCase();if(!t)return null;let r=t.replace(/[^a-z0-9]/g,""),o=null;for(let n of Ai){let i=Math.min(Km(t,n.id),Km(r,n.id.replace(/[^a-z0-9]/g,"")));(!o||i<o.distance)&&(o={id:n.id,distance:i})}return o&&o.distance<=2?o.id:null}var He=require("react/jsx-runtime"),Jm=Ai.filter(e=>e.handling==="viewer"),mv=Ai.filter(e=>e.handling==="host");function Zm({selectedItem:e,selectedBinding:t,open:r,onToggle:o,updateBinding:n}){let[i,s]=(0,Ds.useState)(new Set);(0,Ds.useEffect)(()=>{s(new Set)},[e]);let l=t.actions??[],a=(d,p)=>n(e,v=>({...v,actions:(v.actions??[]).map((x,_)=>_===d?p(x):x)})),u=d=>{n(e,p=>({...p,actions:(p.actions??[]).filter((v,x)=>x!==d)})),s(p=>{let v=new Set;return p.forEach(x=>{x<d?v.add(x):x>d&&v.add(x-1)}),v})},f=(d,p)=>s(v=>{let x=new Set(v);return p?x.add(d):x.delete(d),x});return(0,He.jsxs)(zn,{title:"Actions",open:r,onToggle:o,children:[(0,He.jsx)("div",{className:"bb-actionList",children:l.map((d,p)=>{let v=oa(d.id),x=i.has(p)||!v,_=d.id.trim(),T=v?null:qm(d.id),y=_.length>0&&l.some((c,m)=>m!==p&&c.id.trim()===_);return(0,He.jsxs)("div",{className:"bb-actionCard",children:[(0,He.jsxs)("div",{className:"bb-actionCardHeader",children:[(0,He.jsxs)("div",{className:"bb-actionCardTitle",children:["Action ",p+1]}),(0,He.jsx)("div",{className:"bb-actionCardMeta",children:d.type})]}),(0,He.jsxs)("div",{className:"bb-actionGrid",children:[(0,He.jsxs)("div",{className:"bb-field",children:[(0,He.jsx)("label",{className:"bb-label",children:"Action ID"}),(0,He.jsxs)("select",{className:"bb-select",value:x?Os:d.id,onChange:c=>{let m=c.target.value;if(m===Os){f(p,!0);return}f(p,!1);let S=oa(m);a(p,C=>({...C,id:m,label:S&&Sc(C.label)?S.label:C.label}))},children:[(0,He.jsx)("optgroup",{label:"Handled by the viewer",children:Jm.map(c=>(0,He.jsx)("option",{value:c.id,children:c.id},c.id))}),(0,He.jsx)("optgroup",{label:"Handled by your app",children:mv.map(c=>(0,He.jsx)("option",{value:c.id,children:c.id},c.id))}),(0,He.jsx)("option",{value:Os,children:"Custom\u2026"})]})]}),x?(0,He.jsxs)("div",{className:"bb-field",children:[(0,He.jsx)("label",{className:"bb-label",children:"Custom action ID"}),(0,He.jsx)("input",{className:"bb-input",value:d.id,placeholder:"open-datasheet",onChange:c=>{f(p,!0),a(p,m=>({...m,id:c.target.value}))}})]}):null,(0,He.jsxs)("div",{className:"bb-field",children:[(0,He.jsx)("label",{className:"bb-label",children:"Label"}),(0,He.jsx)("input",{className:"bb-input",value:d.label,onChange:c=>a(p,m=>({...m,label:c.target.value}))})]}),v?(0,He.jsx)("span",{className:"bb-note",children:v.description}):_.length===0?(0,He.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,He.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.",T?(0,He.jsxs)(He.Fragment,{children:[" Did you mean ",(0,He.jsx)("button",{type:"button",className:"bb-linkButton",onClick:()=>{f(p,!1);let c=oa(T);a(p,m=>({...m,id:T,label:c&&Sc(m.label)?c.label:m.label}))},children:T}),"?"]}):null]}),d.effects?.length?(0,He.jsxs)("span",{className:"bb-note",children:[d.effects.length," declarative effect",d.effects.length===1?"":"s",", execute with useViewerActions."]}):null,y?(0,He.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,He.jsx)("div",{className:"bb-actionFooter",children:(0,He.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-actionRemove",onClick:()=>u(p),children:"Remove Action"})})]},p)})}),(0,He.jsx)("div",{style:{marginTop:10},children:(0,He.jsx)("button",{type:"button",className:"bb-button",onClick:()=>{let d=Jm.find(p=>!l.some(v=>v.id===p.id));n(e,p=>({...p,actions:[...p.actions??[],{id:d?.id??"",label:d?.label??"New Action",type:"command"}]})),d||f(l.length,!0)},children:"Add Action"})})]})}var Is=require("lucide-react");var ft=require("react/jsx-runtime");function Qm({selectedBinding:e,open:t,onToggle:r,cameraState:o,formattedCameraState:n,savedCameraPosition:i,onSaveCameraPosition:s,onGoToSavedCamera:l,onClearSavedCamera:a,onResetView:u,onFitScene:f}){return(0,ft.jsxs)(zn,{title:"Camera Position",open:t,onToggle:r,children:[(0,ft.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,ft.jsx)("span",{className:"bb-cameraLiveBadge",children:"LIVE"}),(0,ft.jsxs)("div",{className:"se-waypointBody",children:[(0,ft.jsx)("div",{className:"bb-cameraWaypointLabel",children:"Current view"}),o?(0,ft.jsxs)(ft.Fragment,{children:[(0,ft.jsxs)("div",{className:"se-waypointCoords",children:["pos ",n?.position]}),(0,ft.jsxs)("div",{className:"se-waypointCoords",children:["look ",n?.target]})]}):(0,ft.jsx)("div",{className:"se-waypointCoords",children:"Move the camera to see live position"})]})]}),(0,ft.jsxs)("div",{className:"bb-cameraControls bb-cameraControls--centered",children:[(0,ft.jsx)("button",{type:"button",className:"bb-button bb-button--primary",onClick:s,disabled:!o,children:"Save"}),(0,ft.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:u,children:"Reset View"}),(0,ft.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:f,children:"Fit Scene"})]}),i?.position&&i?.target&&(0,ft.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,ft.jsx)("span",{className:"bb-cameraSavedBadge",children:"SAVED"}),(0,ft.jsxs)("div",{className:"se-waypointBody",children:[(0,ft.jsxs)("div",{className:"bb-cameraWaypointLabel",children:["For ",e.label]}),(0,ft.jsxs)("div",{className:"se-waypointCoords",children:["pos [",i.position.map(d=>d.toFixed(1)).join(", "),"]"]}),(0,ft.jsxs)("div",{className:"se-waypointCoords",children:["look [",i.target.map(d=>d.toFixed(1)).join(", "),"]"]})]}),(0,ft.jsxs)("div",{className:"se-waypointActions",children:[(0,ft.jsx)("button",{className:"se-waypointAction",onClick:l,title:"Fly camera to the saved position",children:(0,ft.jsx)(Is.MapPin,{size:15})}),(0,ft.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:a,title:"Delete saved position",children:(0,ft.jsx)(Is.Trash2,{size:15})})]})]}),(0,ft.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 zs=require("lucide-react");var Ge=require("react/jsx-runtime"),ef=["X","Y","Z"];var fv=.1;function Mc(e){let t=e%360;return t<0?t+360:t}function tf(e){return Mc(e*180/Math.PI)}function nf(e){return e*Math.PI/180}function hv(e,t,r){let o=[...e],n=tf(e[t]);return o[t]=nf(Mc(n+r)),o}function gv({value:e,min:t=-1/0,max:r=1/0,step:o=.1,disabled:n=!1,onChange:i,formatValue:s=a=>Number(a.toFixed(3)),label:l}){return(0,Ge.jsx)("div",{className:"bb-transformAxesGrid",children:ef.map((a,u)=>(0,Ge.jsxs)("div",{className:"bb-transformAxis",children:[(0,Ge.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:a}),(0,Ge.jsx)("div",{className:"bb-transformAxisControl",children:(0,Ge.jsx)("input",{type:"number",className:"se-numberInput bb-transformNumberInput",step:o,min:t,max:r,value:s(e[u]),disabled:n,"aria-label":`${a} ${l?.toLowerCase()||""}`,onChange:f=>{let d=Number(f.target.value);if(Number.isFinite(d)){let p=Math.max(t,Math.min(r,d)),v=[...e];v[u]=p,i(v)}}})})]},a))})}function rf({selectedItem:e,selectedBinding:t,open:r,onToggle:o,updateBinding:n,moveModeEnabled:i,onToggleMoveMode:s,transformSpace:l,onTransformSpaceChange:a,originalTransform:u}){let f=t.transform?.rotation??u?.rotation??[0,0,0],d=t.transform?.position??u?.position??[0,0,0],p=(c,m)=>{let S=c.transform?.rotation??u?.rotation??[0,0,0],C=c.transform?.position??u?.position??[0,0,0],N=c.transform?.scale??u?.scale??[1,1,1],E=u?.pivotLocal??[0,0,0],h=Jp(C,S,m,N,E,u?.rotationOrder??"XYZ");return{...c,transform:{...c.transform,position:h,rotation:m}}},v=(c,m)=>{e&&n(e,S=>{let C=S.transform?.rotation??u?.rotation??[0,0,0],N=hv(C,c,m);return p(S,N)})},x=(c,m)=>{e&&n(e,S=>{let N=[...S.transform?.rotation??u?.rotation??[0,0,0]];return N[c]=nf(Mc(m)),p(S,N)})},_=(c,m)=>{e&&n(e,S=>{let N=[...S.transform?.position??u?.position??[0,0,0]];return N[c]=m,{...S,transform:{...S.transform,position:N}}})},T=(c,m)=>{e&&_(c,d[c]+m)},y=()=>{!e||!u||n(e,c=>{let m={...c.transform};return delete m.position,delete m.rotation,{...c,transform:Object.keys(m).length>0?m:void 0}})};return(0,Ge.jsxs)(zn,{title:"Move & Rotate",open:r,onToggle:o,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,Ge.jsxs)("div",{className:"se-field",children:[(0,Ge.jsxs)("div",{className:"se-fieldLabel",children:[(0,Ge.jsxs)("span",{children:[(0,Ge.jsx)(zs.Move3d,{size:14,style:{marginRight:6,verticalAlign:"-2px"}}),"Transform gizmo"]}),(0,Ge.jsxs)("label",{className:"se-switch","aria-label":"Toggle move mode",children:[(0,Ge.jsx)("input",{type:"checkbox",checked:i,onChange:c=>s(c.target.checked)}),(0,Ge.jsx)("span",{className:"se-switchTrack",children:(0,Ge.jsx)("span",{className:"se-switchThumb"})})]})]}),(0,Ge.jsx)("span",{className:"bb-note",children:"Select a mesh \xB7 drag the colored arrows or planes to move"})]}),(0,Ge.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,Ge.jsx)("div",{className:"se-fieldLabel",children:(0,Ge.jsx)("span",{children:"Axis space"})}),(0,Ge.jsx)("div",{className:"se-segmentedControl",children:["world","local"].map(c=>(0,Ge.jsx)("button",{type:"button",className:`se-segmentedOption ${l===c?"se-segmentedOption--active":""}`,onClick:()=>a(c),children:c},c))})]}),(0,Ge.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,Ge.jsx)("div",{className:"se-fieldLabel",children:(0,Ge.jsx)("span",{children:"Rotation (degrees)"})}),(0,Ge.jsx)("div",{className:"bb-transformAxesGrid",children:ef.map((c,m)=>{let S=Math.round(tf(f[m]));return(0,Ge.jsxs)("div",{className:"bb-transformAxis",children:[(0,Ge.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:c}),(0,Ge.jsx)("div",{className:"bb-transformAxisControl",children:(0,Ge.jsx)("input",{type:"number",className:"se-numberInput bb-transformNumberInput",step:1,min:0,max:359,value:S,disabled:!e,"aria-label":`${c} rotation in degrees`,onChange:C=>{let N=Number(C.target.value);Number.isFinite(N)&&x(m,N)}})})]},c)})})]}),(0,Ge.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,Ge.jsx)("div",{className:"se-fieldLabel",children:(0,Ge.jsx)("span",{children:"Position"})}),(0,Ge.jsx)(gv,{value:d,min:-1/0,max:1/0,step:fv,disabled:!e,label:"position",onChange:c=>{e&&n(e,m=>({...m,transform:{...m.transform,position:c}}))}})]}),(0,Ge.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",style:{marginTop:10,display:"inline-flex",alignItems:"center",gap:6},disabled:!e||!u,onClick:y,title:"Restore this node's position and rotation to what they were in the original model",children:[(0,Ge.jsx)(zs.RotateCcw,{size:14}),"Restore original position & rotation"]})]})}var aa=require("react");function bv(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 Cc(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 vv(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 xv(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 yv(e){let t=vv(e);return{id:bv(e),modelObjectId:e,type:t,label:Cc(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:xv(t),metrics:{},metadata:{}}}function Pc(e){return Object.fromEntries(e.map(t=>[t,yv(t)]))}function of(e){let{nodesById:t}=Ji(e),r=[];for(let[o,n]of Object.entries(t)){let i=n;i.isMesh&&i.geometry&&n.name&&r.push(o)}return r.sort((o,n)=>o.localeCompare(n))}var hn=require("react/jsx-runtime");function af({bindings:e,selectedItem:t,onSelect:r,onHover:o,isOpen:n=!0,onToggle:i}){let[s,l]=(0,aa.useState)(""),a=(0,aa.useMemo)(()=>Object.keys(e),[e]),u=(0,aa.useMemo)(()=>{let f=s.trim().toLowerCase();return f?a.filter(d=>{let p=e[d];return d.toLowerCase().includes(f)||p.label?.toLowerCase().includes(f)||p.type.toLowerCase().includes(f)}):a},[e,a,s]);return(0,hn.jsxs)("aside",{className:`bb-sidebar bb-sidebar--right ${n?"":"bb-sidebar--collapsed"}`,children:[(0,hn.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!n&&(0,hn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>i?.(!0),"aria-label":"Open scene nodes sidebar",title:"Open scene nodes",children:"\u2190"}),n&&(0,hn.jsxs)(hn.Fragment,{children:[(0,hn.jsxs)("div",{children:[(0,hn.jsx)("div",{className:"bb-sectionKicker",children:"Scene Nodes"}),(0,hn.jsxs)("div",{className:"bb-sectionHeading",children:[u.length," visible entries"]})]}),(0,hn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>i?.(!1),"aria-label":"Close scene nodes sidebar",title:"Close scene nodes",children:"\u2192"})]})]}),n&&(0,hn.jsxs)("section",{className:"bb-nodeList",children:[(0,hn.jsx)("div",{className:"bb-search",children:(0,hn.jsx)("input",{className:"bb-input",placeholder:"Search nodes, labels, or types",value:s,onChange:f=>l(f.target.value)})}),(0,hn.jsx)("div",{className:"bb-nodeItems",children:u.map(f=>{let d=e[f];return(0,hn.jsxs)("button",{type:"button",className:`bb-nodeButton ${f===t?"bb-nodeButton--active":""}`,onClick:()=>r(f),onMouseEnter:()=>o?.(f),onMouseLeave:()=>o?.(null),children:[(0,hn.jsx)("span",{className:"bb-nodeName",children:f}),(0,hn.jsxs)("span",{className:"bb-nodeMeta",children:[d.type,d.label===Cc(f)?"":d.label||"\xB7 Untitled"]})]},f)})})]})]})}var ri=require("react/jsx-runtime");function Ac({title:e,label:t,open:r,onToggle:o,draft:n,error:i,example:s,onDraftChange:l,onCommit:a}){return(0,ri.jsx)(zn,{title:e,open:r,onToggle:o,children:(0,ri.jsxs)("div",{className:"bb-field",children:[(0,ri.jsx)("label",{className:"bb-label",children:t}),(0,ri.jsx)("textarea",{className:"bb-textarea",value:n,onChange:u=>l(u.target.value),onBlur:a}),i?(0,ri.jsx)("span",{className:"bb-status bb-status--error",children:i}):(0,ri.jsxs)("span",{className:"bb-note",children:["Use a JSON object like ",s,"."]})]})})}function sf(e,t){let r=new Map(e.animations.clips.map(i=>[i.sourceName,i])),o=t.map(({sourceName:i})=>r.get(i)??{sourceName:i,displayName:i,hidden:!1,loopMode:"repeat",speed:1}),n=e.animations.autoplayClip&&o.some(i=>i.sourceName===e.animations.autoplayClip&&!i.hidden)?e.animations.autoplayClip:null;return{clips:o,autoplayClip:n}}var zr=require("react"),wv=100;function _v(e,t){switch(t.type){case"set":{let r=typeof t.updater=="function"?t.updater(e.present):t.updater;return r===e.present?e:t.coalesce?{...e,present:r,future:[]}:{past:[...e.past,e.present].slice(-wv),present:r,future:[]}}case"undo":{if(e.past.length===0)return e;let r=e.past[e.past.length-1];return{past:e.past.slice(0,-1),present:r,future:[e.present,...e.future]}}case"redo":{if(e.future.length===0)return e;let[r,...o]=e.future;return{past:[...e.past,e.present],present:r,future:o}}case"reset":return{past:[],present:t.value,future:[]}}}function Tc(e,t=600){let[r,o]=(0,zr.useReducer)(_v,{past:[],present:e,future:[]}),n=(0,zr.useRef)(0),i=(0,zr.useCallback)(u=>{let f=Date.now(),d=f-n.current<t;n.current=f,o({type:"set",updater:u,coalesce:d})},[t]),s=(0,zr.useCallback)(()=>{n.current=0,o({type:"undo"})},[]),l=(0,zr.useCallback)(()=>{n.current=0,o({type:"redo"})},[]),a=(0,zr.useCallback)(u=>{n.current=0,o({type:"reset",value:u})},[]);return{value:r.present,setValue:i,undo:s,redo:l,reset:a,canUndo:r.past.length>0,canRedo:r.future.length>0}}var pf=require("fflate");function lf(e){return JSON.stringify(e,null,2)}function cf(e){return['import { defineObjectBindings } from "@liveroom-tech/react-immersive/utils";',"",`export const objectBindings = defineObjectBindings(${JSON.stringify(e,null,2)});`,""].join(`
3673
- `)}function df(e){return JSON.stringify(e,null,2)}function uf(e){return['import type { SceneConfig } from "@liveroom-tech/react-immersive/utils";',"",`export const sceneConfig: SceneConfig = ${JSON.stringify(e,null,2)};`,""].join(`
3674
- `)}function sa(e,t,r){Br(new Blob([t],{type:r}),e)}function Ec(e){return JSON.stringify(e??{},null,2)}function kc(e){return`[${e[0].toFixed(3)}, ${e[1].toFixed(3)}, ${e[2].toFixed(3)}]`}function Sv(e){let t=e.style?.material;return t?Object.values(t).filter(r=>!!r&&typeof r=="object"&&typeof r.path=="string"&&r.path.trim().length>0).map(r=>r.path):[]}async function mf(e){let t=new Set;for(let n of Object.values(e))for(let i of Sv(n))t.add(i);let r=[],o=[];return await Promise.all(Array.from(t).map(async n=>{let i=su(n);if(i)try{let s=await fetch(i);if(!s.ok)throw new Error(String(s.status));r.push({path:n,blob:await s.blob()})}catch{o.push(n)}})),{assets:r,failedPaths:o}}async function Rc(e,t,r,o,n){if(n.length===0){sa(e,t,r);return}let i={[e]:(0,pf.strToU8)(t)};for(let l of n)i[l.path]=new Uint8Array(await l.blob.arrayBuffer());let s=await Oa(i);Br(new Blob([s],{type:"application/zip"}),o)}var Nc={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"]},ff=Object.keys(Nc);function hf(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 Bc(e){if(e)return Object.values(e).some(hf)?e:void 0}function ir(e,t){return e?Nc[t].some(r=>hf(e[r])):!1}function Lc(e){return{pbr:ir(e,"pbr"),roughness:ir(e,"roughness"),emission:ir(e,"emission"),opacity:ir(e,"opacity"),normalBump:ir(e,"normalBump"),displacement:ir(e,"displacement"),ao:ir(e,"ao"),clearcoat:ir(e,"clearcoat"),sheen:ir(e,"sheen"),anisotropy:ir(e,"anisotropy"),transmission:ir(e,"transmission"),faces:ir(e,"faces")}}function Oc(e,t){if(t)return{...e,style:{...e.style,material:t}};if(!e.style)return e;let{material:r,...o}=e.style;return{...e,style:Object.keys(o).length>0?o:void 0}}function gf(e,t){if(!e)return;let r={...e};for(let o of Nc[t])delete r[o];return r}var U=require("react/jsx-runtime"),Mv="/room.glb";function Us(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function bf(e,t){if(!Us(e)||!Us(t))return t??e;let r={...e};for(let[o,n]of Object.entries(t)){let i=r[o];r[o]=Us(i)&&Us(n)?bf(i,n):n}return r}function Dc({licenseKey:e,dracoDecoderPath:t,ktx2TranscoderPath:r,meshopt:o}){let n=(0,ie.useRef)(null),i=(0,ie.useRef)(null),s=(0,ie.useRef)(null),[l,a]=(0,ie.useState)(null),[u,f]=(0,ie.useState)(""),[d,p]=(0,ie.useState)(null),v=Tc({}),x=v.value,_=v.setValue,[T,y]=(0,ie.useState)(!1),[c,m]=(0,ie.useState)(!1),[S,C]=(0,ie.useState)("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),[N,E]=(0,ie.useState)("default"),[h,w]=(0,ie.useState)(!1),[g,M]=(0,ie.useState)("{}"),[D,H]=(0,ie.useState)("{}"),[G,k]=(0,ie.useState)(null),[$,j]=(0,ie.useState)(null),[P,A]=(0,ie.useState)(!1),[W,F]=(0,ie.useState)(!1),[ae,Ee]=(0,ie.useState)(!1),[le,Ae]=(0,ie.useState)({identity:!0,basics:!0,material:!1,actions:!1,camera:!1,transform:!1,metrics:!1,metadata:!1}),[ke,Oe]=(0,ie.useState)({pbr:!0,roughness:!1,emission:!1,opacity:!1,normalBump:!1,displacement:!1,ao:!1,clearcoat:!1,sheen:!1,anisotropy:!1,transmission:!1,faces:!1}),bt=z=>Ae(J=>({...J,[z]:!J[z]})),$t=z=>Oe(J=>({...J,[z]:!J[z]})),[Ue,Ve]=(0,ie.useState)("object"),[St,Vt]=(0,ie.useState)("General"),[et,sn]=(0,ie.useState)("metalness"),[Mt,Ct]=(0,ie.useState)(Lc()),En=(0,ie.useRef)(null),[je,Et]=(0,ie.useState)(!1),[ne,de]=(0,ie.useState)(!0),[Gt,jt]=(0,ie.useState)(!0),[ot,ut]=(0,ie.useState)(!1),[ht,Yt]=(0,ie.useState)(null),[kt,Bn]=(0,ie.useState)(!1),[Cn,_e]=(0,ie.useState)("world"),$e=(0,ie.useRef)({}),De=Tc(Wr),Ie=De.value,be=De.setValue,[Rt,Nt]=(0,ie.useState)(null),[Bt,ln]=(0,ie.useState)(null),he=cs(e),B=am(he.tier),I=(0,ie.useMemo)(()=>({isInsideEditor:!0,activeTab:Ue,activeSubTab:St,tier:B,setActiveTab:Ve,setActiveSubTab:Vt}),[Ue,St,B]),K=(0,ie.useRef)(null),X=(0,ie.useRef)(0),Z=(0,ie.useRef)(0),se=(0,ie.useRef)(null),re=(0,ie.useRef)(null),{cameraState:Se,resetView:at,focusObject:Lt,fitScene:We,setCameraState:tt,handleCameraChange:ge,handleViewerReady:Ot}=_s(),bn=(0,ie.useCallback)(z=>{tt({position:z.position,target:z.target,fov:Se?.fov??null,zoom:Se?.zoom??1,azimuthAngle:z.azimuthAngle,polarAngle:z.polarAngle},!0)},[tt,Se]),nn=Ss(),nt=d?x[d]??null:null,xt=nt?.style?.material,yt=nt?.cameraState,ai=Se?{position:kc(Se.position),target:kc(Se.target)}:null,Js=(0,ie.useCallback)(z=>{be(J=>{let ce=J.annotations.map(Fe=>Fe.id).join(","),Be=z.map(Fe=>Fe.id).join(",");return ce===Be?J:{...J,annotations:z}})},[]),Ei=(0,ie.useCallback)(z=>{Nt(z?{annotation:z}:null)},[]);(0,ie.useEffect)(()=>{if(!nt){M("{}"),H("{}"),k(null),j(null);return}M(Ec(nt.metrics)),H(Ec(nt.metadata)),k(null),j(null)},[nt]),(0,ie.useEffect)(()=>{let z=Lc(xt);if(En.current!==d){En.current=d,Ct(z);return}Ct(J=>{let ce=!1,Be={...J};for(let Fe of ff)z[Fe]&&!J[Fe]&&(Be[Fe]=!0,ce=!0);return ce?Be:J})},[d,xt]),(0,ie.useEffect)(()=>()=>{K.current?.cleanup()},[]),(0,ie.useEffect)(()=>{let z=J=>{if(J.key.toLowerCase()!=="z"||!(J.metaKey||J.ctrlKey))return;let ce=J.target,Be=ce?.tagName;if(Be==="INPUT"||Be==="TEXTAREA"||ce?.isContentEditable)return;J.preventDefault();let Fe=Ue==="scene"?De:v;J.shiftKey?Fe.redo():Fe.undo()};return window.addEventListener("keydown",z),()=>window.removeEventListener("keydown",z)},[Ue,v,De]),(0,ie.useEffect)(()=>{if(T||N==="default"||N==="success")return;w(!0);let z=window.setTimeout(()=>w(!1),4e3);return()=>window.clearTimeout(z)},[S,N,T]);let vn=(0,ie.useMemo)(()=>Object.keys(x),[x]),yo=(0,ie.useMemo)(()=>!d||!nt?null:nt.id.trim()?Object.entries(x).some(([ce,Be])=>ce!==d&&Be.id===nt.id)?"Another binding already uses this ID.":null:"ID is required.",[x,d,nt]),or=(z,J)=>{_(ce=>({...ce,[z]:J(ce[z])}))},ki=(z,J)=>{or(z,ce=>{let Be=Bc(J(ce.style?.material));return Oc(ce,Be)})},si=(z,J,ce)=>{ki(z,Be=>({...Be,[J]:ce?{path:ce}:void 0}))},Ri=(z,J)=>{Ct(ce=>({...ce,[z]:J})),!J&&d&&or(d,ce=>{let Be=Bc(gf(ce.style?.material,z));return Oc(ce,Be)})},Ni=(0,ie.useCallback)((z,J)=>{let ce=of(z),Be=Pc(ce);z.updateMatrixWorld(!0);let Fe={};for(let Dt of ce){let rt=pr(z,Dt);if(!rt){Fe[Dt]={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],pivotLocal:[0,0,0],rotationOrder:"XYZ"};continue}let cn=vs(rt);Fe[Dt]={position:[rt.position.x,rt.position.y,rt.position.z],rotation:[rt.rotation.x,rt.rotation.y,rt.rotation.z],scale:[rt.scale.x,rt.scale.y,rt.scale.z],pivotLocal:[cn.x,cn.y,cn.z],rotationOrder:rt.rotation.order}}$e.current=Fe,v.reset(Be),p(ce[0]??null),be(Dt=>({...Dt,annotations:[]})),C(`Generated ${ce.length} bindings from ${J}.`),E("success"),y(!1)},[v,be]),Bi=(z,J,ce)=>{let Be=++Z.current;y(!0);let Fe=ce?ce/1048576:0;C(Fe>=100?`Reading ${J} (${Math.round(Fe)}MB \u2014 large file, this can take a while)...`:`Reading ${J} and generating starter bindings...`),E("default"),f(J),Nt(null);let Dt=re.current;if(z===l&&Dt?.url===z){se.current=null,Ni(Dt.scene,J);return}se.current={requestId:Be,modelName:J,modelUrl:z},a(z),v.reset({}),p(null)},pa=(0,ie.useCallback)(z=>{let J=se.current;!J||J.requestId!==Z.current||(se.current=null,re.current={url:J.modelUrl,scene:z},Ni(z,J.modelName))},[Ni]),ma=(0,ie.useCallback)(z=>{let J=se.current;!J||J.requestId!==Z.current||(se.current=null,console.error(z),C(`Could not read ${J.modelName}. Make sure the file is a valid GLB, GLTF, OBJ, FBX, or USDZ asset.`),E("error"),y(!1))},[]),Zs=(0,ie.useCallback)(z=>{nn.handleAnimationsReady(z);let J=z.clipDetails??z.clips.map(ce=>({sourceName:ce,duration:0}));be(ce=>({...ce,animations:sf(ce,J)}))},[nn,be]),Wc=async()=>{K.current?.cleanup(),K.current=null,await Bi(Mv,"room.glb")},fa=async z=>{let J;try{J=await $a(z)}catch(ce){C(ce instanceof Error?ce.message:"Could not read model file. Upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset."),E("error");return}K.current?.cleanup(),K.current=J,await Bi(J.url,J.name,z.size)},Qs=async z=>{let J=z.target.files?.[0];J&&(await fa(J),z.target.value="")},Un=()=>{K.current?.cleanup(),K.current=null,re.current=null,se.current=null,$e.current={},X.current=0,A(!1),a(null),f(""),p(null),Nt(null),v.reset({}),M("{}"),H("{}"),k(null),j(null),ln(null),Bn(!1),be(z=>({...z,animations:Wr.animations,annotations:[]})),C("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),E("default")},ha=()=>{n.current?.click()},br=()=>{i.current?.click()},Ur=async z=>{m(!0);try{let{assets:J,failedPaths:ce}=await mf(x);z==="json"?await Rc("objectBindings.json",lf(x),"application/json","objectBindings.zip",J):await Rc("objectBindings.ts",cf(x),"text/typescript","objectBindings-ts.zip",J),ce.length>0?(C(`Exported, but ${ce.length} uploaded image${ce.length===1?"":"s"} couldn't be bundled: ${ce.join(", ")}.`),E("error")):J.length>0&&(C(`Exported with ${J.length} uploaded image${J.length===1?"":"s"} bundled into the zip.`),E("success"))}catch(J){let ce=J instanceof Error?J.message:"Unknown export error.";C(`Failed to export bindings: ${ce}`),E("error")}finally{m(!1)}},xn=async z=>{if(!vn.length){C("Load a model before importing bindings."),E("error");return}let J;try{J=JSON.parse(await z.text())}catch{C(`${z.name} is not valid JSON.`),E("error");return}if(J===null||typeof J!="object"||Array.isArray(J)){C("Expected a JSON object mapping object IDs to bindings."),E("error");return}let ce=new Map;for(let rt of Object.values(J))if(rt!==null&&typeof rt=="object"&&typeof rt.id=="string"&&typeof rt.type=="string"&&typeof rt.modelObjectId=="string"){let cn=rt;ce.set(cn.modelObjectId,cn)}if(ce.size===0){C(`${z.name} doesn't look like an exported bindings file.`),E("error");return}let Be={...x},Fe=0;for(let rt of Object.keys(Be)){let cn=ce.get(rt);cn&&(Be[rt]=cn,Fe++)}if(Fe===0){C(`None of the object IDs in ${z.name} match this model \u2014 nothing imported.`),E("error");return}_(Be);let Dt=ce.size-Fe;C(Dt>0?`Imported ${Fe} binding${Fe===1?"":"s"} from ${z.name} (${Dt} skipped \u2014 not in this model).`:`Imported ${Fe} binding${Fe===1?"":"s"} from ${z.name}.`),E("success")},vr=async z=>{let J=z.target.files?.[0];J&&(await xn(J),z.target.value="")},li=()=>{s.current?.click()},wo=async z=>{let J;try{J=JSON.parse(await z.text())}catch{C(`${z.name} is not valid JSON.`),E("error");return}if(J===null||typeof J!="object"||Array.isArray(J)){C("Expected a JSON object with scene config sections."),E("error");return}let ce=["model","camera","lighting","wireframe","shadows","environment","background","groundShadows","postProcessing","animations","annotations","cinematic"],Be=J,Fe=ce.filter(Dt=>Be[Dt]!==void 0);if(Fe.length===0){C(`${z.name} doesn't look like an exported scene config file.`),E("error");return}be(Dt=>{let rt={...Dt};for(let cn of Fe)rt[cn]=bf(Dt[cn],Be[cn]);return rt}),C(`Imported ${Fe.length} section${Fe.length===1?"":"s"} from ${z.name}.`),E("success")},ar=async z=>{let J=z.target.files?.[0];J&&(await wo(J),z.target.value="")},_o=z=>{z.preventDefault(),z.stopPropagation(),!(T||l)&&(X.current+=1,A(!0))},ci=z=>{z.preventDefault(),z.stopPropagation(),!(T||l)&&(z.dataTransfer.dropEffect="copy",A(!0))},Li=z=>{z.preventDefault(),z.stopPropagation(),!(T||l)&&(X.current=Math.max(0,X.current-1),X.current===0&&A(!1))},di=async z=>{if(z.preventDefault(),z.stopPropagation(),X.current=0,A(!1),T||l)return;let J=z.dataTransfer.files?.[0];J&&await fa(J)},xr=(z,J,ce)=>{if(!d)return;let Be;try{Be=JSON.parse(J)}catch{ce("Invalid JSON");return}if(Be===null||typeof Be!="object"||Array.isArray(Be)){ce("Expected a JSON object");return}if(z==="metrics"&&Object.values(Be).some(Dt=>typeof Dt!="number"||!Number.isFinite(Dt))){ce("Metrics values must be numbers");return}or(d,Fe=>({...Fe,[z]:Be})),ce(null)},ga=(0,ie.useCallback)(z=>{if(!z){p(null);return}let J=Object.entries(x).find(([ce,Be])=>Be===z||ce===z.modelObjectId||Be.modelObjectId===z.modelObjectId)?.[0]??null;p(J)},[x]),el=(0,ie.useCallback)(async z=>{p(z),ln(null),await Lt(z)},[Lt]),So=(0,ie.useCallback)(()=>{if(!d||!Se)return;let z={position:Se.position,target:Se.target,...Se.fov!=null?{fov:Se.fov}:{},zoom:Se.zoom};or(d,J=>({...J,cameraState:z}))},[d,Se]),ba=(0,ie.useCallback)(()=>{!yt?.position||!yt?.target||tt({position:yt.position,target:yt.target,fov:yt.fov??Se?.fov??null,zoom:yt.zoom??Se?.zoom??1},!0)},[yt,tt,Se]),Oi=(0,ie.useCallback)(()=>{d&&or(d,z=>({...z,cameraState:void 0}))},[d]),va=(0,ie.useCallback)(async()=>{await at()},[at]),xa=(0,ie.useCallback)(async()=>{await We()},[We]),Mo=(0,ie.useCallback)(z=>{Yt(z),ut(!0)},[]),Vr=(0,ie.useCallback)(()=>{ut(!1),Yt(null)},[]),tl=(0,ie.useCallback)(()=>{if(ht==="bindings"){if(!vn.length){Vr();return}let z=Pc(vn);v.reset(z),p(vn[0]??null),C("Object bindings reset to default values."),E("success")}else ht==="scene"&&(De.reset(Wr),C("Scene config reset to default values."),E("success"));Vr()},[ht,vn,v,De,Vr]);return he.status==="checking"?(0,U.jsx)("div",{className:"bb-root bb-root--licenseChecking",children:(0,U.jsx)(hi,{title:"Verifying License",message:"Checking your license key..."})}):he.status==="invalid"?(0,U.jsx)("div",{className:"bb-root bb-root--licenseInvalid",children:(0,U.jsx)(hi,{tone:"error",title:"Invalid License",message:he.isLocalDomain?he.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})}):(0,U.jsxs)(rc.Provider,{value:I,children:[(0,U.jsxs)("div",{className:"bb-root",children:[(0,U.jsx)("input",{ref:n,type:"file",accept:Xa,className:"bb-hiddenInput",onChange:Qs,disabled:T}),(0,U.jsx)("input",{ref:i,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:vr,disabled:T}),(0,U.jsx)("input",{ref:s,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:ar,disabled:T}),(0,U.jsxs)("aside",{className:`bb-sidebar bb-sidebar--left ${W?"bb-sidebar--collapsed":""}`,children:[(0,U.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!W&&(0,U.jsx)("h1",{className:"bb-title",children:"Binding Builder"}),(0,U.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>F(z=>!z),"aria-label":W?"Open editor sidebar":"Collapse editor sidebar",title:W?"Open editor":"Collapse editor",children:W?"\u2192":"\u2190"})]}),!W&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)("div",{className:"bb-tabRow",children:[(0,U.jsx)("button",{type:"button",className:`bb-tab ${Ue==="object"?"bb-tab--active":""}`,onClick:()=>Ve("object"),children:"Object"}),(0,U.jsx)("button",{type:"button",className:`bb-tab ${Ue==="scene"?"bb-tab--active":""}`,onClick:()=>Ve("scene"),children:"Scene"})]}),(0,U.jsx)("section",{className:"bb-editor",children:Ue==="scene"?(0,U.jsx)(U.Fragment,{children:l?(0,U.jsx)(yc,{config:Ie,onChange:be,activeSubTab:St,onActiveSubTabChange:Vt,cameraState:St==="Cinematic"&&Se?{position:Se.position,target:Se.target,azimuthAngle:Se.azimuthAngle,polarAngle:Se.polarAngle}:null,onPreviewWaypoint:bn,animationClipDetails:nn.clipDetails,animationPlayback:nn}):(0,U.jsx)("div",{className:"bb-emptyEditor",children:"Upload a model to edit its scene settings."})}):!nt||!d?(0,U.jsx)("div",{className:"bb-emptyEditor",children:"Select a generated node binding to edit its values."}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)("div",{className:"bb-editorHeader",children:(0,U.jsxs)("div",{children:[(0,U.jsx)("div",{className:"bb-sectionKicker",children:"Editing Binding"}),(0,U.jsx)("h2",{className:"bb-editorTitle",children:nt.label||d}),(0,U.jsxs)("div",{className:"bb-editorMeta",children:[(0,U.jsx)("span",{children:nt.type}),(0,U.jsx)("span",{children:nt.modelObjectId})]})]})}),(0,U.jsx)(Wm,{selectedItem:d,selectedBinding:nt,open:le.identity,onToggle:()=>bt("identity"),updateBinding:or,idError:yo}),(0,U.jsx)(Ym,{selectedItem:d,selectedBinding:nt,open:le.basics,onToggle:()=>bt("basics"),updateBinding:or}),(0,U.jsxs)(zn,{title:"Material",open:le.material,onToggle:()=>bt("material"),tooltip:"Edit the selected object's base material, textures, and surface properties.",children:[(0,U.jsx)(Gm,{disabled:!d,onApply:z=>d&&ki(d,J=>({...J,...z}))}),(0,U.jsx)(Fm,{selectedItem:d,selectedMaterial:xt,pbrWorkflow:et,onPbrWorkflowChange:sn,openMaterialPanels:ke,materialPanelEnabled:Mt,onToggleMaterialPanel:$t,onSetMaterialPanelState:Ri,updateSelectedMaterial:ki,setSelectedTexturePath:si})]}),(0,U.jsx)(Zm,{selectedItem:d,selectedBinding:nt,open:le.actions,onToggle:()=>bt("actions"),updateBinding:or}),(0,U.jsx)(Qm,{selectedBinding:nt,open:le.camera,onToggle:()=>bt("camera"),cameraState:Se,formattedCameraState:ai,savedCameraPosition:yt,onSaveCameraPosition:So,onGoToSavedCamera:ba,onClearSavedCamera:Oi,onResetView:va,onFitScene:xa}),(0,U.jsx)(rf,{selectedItem:d,selectedBinding:nt,open:le.transform,onToggle:()=>bt("transform"),updateBinding:or,moveModeEnabled:kt,onToggleMoveMode:Bn,transformSpace:Cn,onTransformSpaceChange:_e,originalTransform:$e.current[d]??null}),(0,U.jsx)(Ac,{title:"Metrics",label:"Metrics JSON",open:le.metrics,onToggle:()=>bt("metrics"),draft:g,error:G,example:'{"area": 42}',onDraftChange:M,onCommit:()=>xr("metrics",g,k)}),(0,U.jsx)(Ac,{title:"Metadata",label:"Metadata JSON",open:le.metadata,onToggle:()=>bt("metadata"),draft:D,error:$,example:'{"room": "kitchen"}',onDraftChange:H,onCommit:()=>xr("metadata",D,j)})]})}),Ue==="object"&&(0,U.jsxs)("div",{className:"bb-toolbar",children:[(0,U.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,U.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!v.canUndo,onClick:v.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,U.jsx)(Tn.Undo2,{size:16})}),(0,U.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!vn.length,onClick:()=>Mo("bindings"),title:"Reset object bindings to default",children:(0,U.jsx)(Tn.ListRestart,{size:16})}),(0,U.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!v.canRedo,onClick:v.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,U.jsx)(Tn.Redo2,{size:16})})]}),(0,U.jsx)("div",{className:"bb-toolbarDivider"}),(0,U.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!vn.length||T,onClick:br,title:"Re-apply a previously exported objectBindings.json onto this model",children:[(0,U.jsx)(Tn.Upload,{size:14}),"Import"]}),(0,U.jsx)("div",{className:"bb-toolbarDivider"}),(0,U.jsx)(_c,{disabled:!vn.length||c,exporting:c,onExportJson:()=>Ur("json"),onExportTs:()=>Ur("ts")})]}),Ue==="scene"&&(0,U.jsxs)("div",{className:"bb-toolbar",children:[(0,U.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,U.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!De.canUndo,onClick:De.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,U.jsx)(Tn.Undo2,{size:16})}),(0,U.jsx)("button",{type:"button",className:"bb-iconButton",onClick:()=>Mo("scene"),title:"Reset scene config to default",children:(0,U.jsx)(Tn.ListRestart,{size:16})}),(0,U.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!De.canRedo,onClick:De.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,U.jsx)(Tn.Redo2,{size:16})})]}),(0,U.jsx)("div",{className:"bb-toolbarDivider"}),(0,U.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!vn.length||T,onClick:li,title:"Re-apply a previously exported sceneConfig.json",children:[(0,U.jsx)(Tn.Upload,{size:14}),"Import"]}),(0,U.jsx)("div",{className:"bb-toolbarDivider"}),(0,U.jsx)(_c,{disabled:!vn.length||T,onExportJson:()=>sa("sceneConfig.json",df(Ie),"application/json"),onExportTs:()=>sa("sceneConfig.ts",uf(Ie),"text/typescript")})]})]})]}),(0,U.jsxs)("main",{className:"bb-previewShell",children:[(0,U.jsxs)("div",{className:"bb-previewHeader",children:[(0,U.jsxs)("div",{className:"bb-previewToggles",children:[(0,U.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,U.jsx)("input",{type:"checkbox",checked:je,onChange:z=>Et(z.target.checked)}),"Zoom on selected"]}),(0,U.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,U.jsx)("input",{type:"checkbox",checked:ne,onChange:z=>de(z.target.checked)}),"Highlight on hover"]}),(0,U.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,U.jsx)("input",{type:"checkbox",checked:Gt,onChange:z=>jt(z.target.checked)}),"Camera controller"]})]}),(0,U.jsxs)("div",{className:"bb-previewControlsColumn",children:[(0,U.jsxs)("div",{className:"bb-previewControls",children:[(0,U.jsx)("div",{className:"bb-previewMeta",children:(0,U.jsx)("span",{children:d?`Focused: ${d}`:"Select a node to inspect it"})}),l&&(0,U.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-removeModelButton",onClick:Un,children:"Remove model"})]}),l&&(0,U.jsx)("div",{className:"bb-moveHint",children:kt?(0,U.jsx)(U.Fragment,{children:"Select a mesh \xB7 drag the colored arrows, planes, or rings"}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)("kbd",{children:"W"}),(0,U.jsx)("kbd",{children:"A"}),(0,U.jsx)("kbd",{children:"S"}),(0,U.jsx)("kbd",{children:"D"})," move \xB7 ",(0,U.jsx)("kbd",{children:"Space"}),"/",(0,U.jsx)("kbd",{children:"C"})," up \xB7 down \xB7 drag to look"]})})]})]}),(0,U.jsxs)("div",{className:"bb-preview",children:[(0,U.jsx)(ao,{visible:T||h,message:S,tone:N,spinner:T}),l?(0,U.jsx)(Zo,{modelUrl:l,objectBindings:x,selectedObject:nt,onObjectSelect:ga,onObjectBindingsChange:_,showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,onCameraChange:ge,onViewerReady:Ot,onAnnotationsChange:Js,activeAnnotation:Rt?.annotation??null,onActiveAnnotationChange:Ei,onAnimationsReady:Zs,onModelLoaded:pa,onLoadError:ma,licenseKey:e,dracoDecoderPath:t,ktx2TranscoderPath:r,meshopt:o,sceneConfig:Ie,onSceneConfigChange:be,renderMode:"always",preserveDrawingBuffer:!0,disableZoom:!1,zoomOnSelected:je,highlightOnHover:ne,enableCameraControls:Gt,moveModeEnabled:kt,objectTransformSpace:Cn,enableKeyboardNavigation:!0,showViewGizmo:!0,panelHoveredObject:ne?Bt:null,showLoadingOverlay:!1}):(0,U.jsx)("div",{className:`bb-previewPlaceholder ${P?"bb-previewPlaceholder--dragActive":""}`,onDragEnter:_o,onDragOver:ci,onDragLeave:Li,onDrop:di,children:(0,U.jsxs)("div",{children:[(0,U.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."}),(0,U.jsx)("button",{type:"button",className:"bb-previewPlaceholderButton",onClick:ha,disabled:T,children:T?"Loading model...":"Upload"})]})})]})]}),(0,U.jsx)(af,{bindings:x,selectedItem:d,onSelect:el,onHover:z=>{if(!z){ln(null);return}ln(x[z]??null)},isOpen:!ae,onToggle:z=>Ee(!z)})]}),ot&&(0,U.jsx)("div",{className:"bb-reset-overlay",onClick:Vr,children:(0,U.jsxs)("div",{className:"bb-reset-dialog",onClick:z=>z.stopPropagation(),children:[(0,U.jsxs)("div",{className:"bb-reset-header",children:[(0,U.jsxs)("h3",{className:"bb-reset-title",children:[(0,U.jsx)(Tn.AlertTriangle,{size:20,className:"bb-icon-warning"}),"Confirm Reset"]}),(0,U.jsx)("button",{className:"bb-reset-close",onClick:Vr,children:(0,U.jsx)(Tn.X,{size:20})})]}),(0,U.jsxs)("div",{className:"bb-reset-body",children:[(0,U.jsxs)("p",{className:"bb-reset-message",children:["Are you sure you want to reset"," ",(0,U.jsx)("strong",{children:ht==="bindings"?"Object Bindings":"Scene Config"}),"?"]}),(0,U.jsx)("p",{className:"bb-reset-details",children:ht==="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,U.jsx)("p",{className:"bb-reset-warning",children:"This action cannot be undone!"})]}),(0,U.jsxs)("div",{className:"bb-reset-footer",children:[(0,U.jsx)("button",{className:"bb-reset-btn",onClick:Vr,children:"Cancel"}),(0,U.jsx)("button",{className:"bb-reset-btn-danger",onClick:tl,children:"Yes, Reset"})]})]})})]})}var oe=require("react"),js=require("@react-three/drei"),Er=require("@react-three/fiber"),_f=require("@react-three/fiber");var ii=require("three"),Sf=require("three-stdlib");var tn=require("lucide-react");var V=require("react/jsx-runtime"),vf={color:"#93c5fd",intensity:.05},Cv=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];function Pv(e){return!!(e&&"isMesh"in e&&e.isMesh)}function xf(e,t){Array.isArray(e)?e.forEach(t):t(e)}function Av(e,t){if(!t)return;let r=t.camera;if(!(r instanceof ii.PerspectiveCamera))return;let o=new ii.Box3().setFromObject(e).getSize(new ii.Vector3).length();!Number.isFinite(o)||o<=0||(r.near=o/100,r.far=o*100,r.updateProjectionMatrix(),t.maxDistance=o*10)}var Uc=class extends oe.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(r){this.props.onLoadError?.(r)}render(){return this.state.hasError?null:this.props.children}};function Tv({url:e,format:t,dracoDecoderPath:r,ktx2TranscoderPath:o,meshopt:n,hiddenKeys:i,selectedKey:s,panelHoveredKey:l,nodeRefsOut:a,onMeshesReady:u,onModelLoaded:f,onMeshClick:d,highlightOnHover:p}){let{scene:v}=Ja(e,{dracoDecoderPath:r,ktx2TranscoderPath:o,meshopt:n},t),x=(0,Er.useThree)(g=>g.invalidate),{setCanvasCursor:_,restoreCanvasCursor:T}=ns(),[y,c]=(0,oe.useState)(null),m=(0,oe.useMemo)(()=>Sf.SkeletonUtils.clone(v),[v]),S=(0,oe.useMemo)(()=>{let g={};return m.traverse(M=>{if(!Pv(M))return;let D=M.name||M.uuid;g[D]={key:D,label:M.name||M.type,ref:M}}),g},[m]),C=(0,oe.useMemo)(()=>{let g={};for(let[M,{ref:D}]of Object.entries(S)){let G=(Array.isArray(D.material)?D.material:[D.material]).map(k=>{let j=(es(k)??new ii.MeshStandardMaterial).clone();return j.userData.baseColor=j.color.clone(),j.userData.baseMap=j.map,j.userData.baseEmissive=j.emissive.clone(),j.userData.baseEmissiveMap=j.emissiveMap,j.userData.baseEmissiveIntensity=j.emissiveIntensity,j});g[M]=Array.isArray(D.material)?G:G[0]}return g},[S]);(0,oe.useEffect)(()=>()=>{Object.values(C).forEach(g=>xf(g,M=>M.dispose()))},[C]);let N=(0,oe.useRef)(null);(0,oe.useEffect)(()=>{N.current!==e&&(N.current=e,m.updateWorldMatrix(!0,!0),Go(m),u(S),f(m))},[e,m,S,u,f]),(0,oe.useEffect)(()=>{let g=new AbortController;return Ra(m,g.signal),()=>{g.abort(),Na(m)}},[m]);let E=(0,oe.useMemo)(()=>!ka(m),[m]);(0,oe.useEffect)(()=>{for(let[g,{ref:M}]of Object.entries(S))a.current[g]=M},[S,a]),(0,oe.useEffect)(()=>{!p&&y!==null&&(c(null),T())},[p,y,T]),(0,oe.useEffect)(()=>{for(let[g,{ref:M}]of Object.entries(S)){M.visible=!i.has(g);let D=C[g];if(!D)continue;M.material=D;let H=p&&y===g,G=p&&l===g;xf(D,k=>{if(k.color.copy(k.userData.baseColor),k.map=k.userData.baseMap??null,k.emissive.copy(k.userData.baseEmissive),k.emissiveMap=k.userData.baseEmissiveMap??null,k.emissiveIntensity=k.userData.baseEmissiveIntensity,G||H){let $=!!k.userData.baseEmissiveMap;k.emissive.set(vf.color),k.emissiveIntensity=$?k.userData.baseEmissiveIntensity:vf.intensity}k.needsUpdate=!0})}x()},[S,C,y,s,l,p,i,x]);let h=g=>{let M=g;for(;M;){let D=M.name||M.uuid;if(S[D])return D;M=M.parent}return null},w=E?{onClick:g=>{let M=h(g.object);M&&(g.stopPropagation(),d(M))},...p?{onPointerOver:g=>{let M=h(g.object);M&&(g.stopPropagation(),_("pointer"),c(M))},onPointerOut:g=>{g.stopPropagation(),T(),c(null)}}:{}}:{};return(0,V.jsx)("primitive",{object:m,...w})}function Ev({scene:e,controlsRef:t,refitOnResize:r,onInitialFitComplete:o}){let n=(0,oe.useRef)(!1),i=(0,Er.useThree)(a=>a.invalidate),s=(0,Er.useThree)(a=>a.size),l=(0,oe.useRef)(null);return(0,oe.useEffect)(()=>{n.current=!1,i()},[i,e]),(0,Er.useFrame)(()=>{if(!n.current){if(!e||!t.current){i();return}n.current=!0,Av(e,t.current),t.current.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}).finally(o)}}),(0,oe.useEffect)(()=>{if(!(!r||!n.current||!e||!t.current))return l.current&&clearTimeout(l.current),l.current=setTimeout(()=>{t.current?.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}),i()},150),()=>{l.current&&clearTimeout(l.current)}},[s.width,s.height,r]),null}function kv({exposure:e}){let t=(0,Er.useThree)(o=>o.gl),r=(0,Er.useThree)(o=>o.invalidate);return(0,oe.useEffect)(()=>{t.toneMappingExposure=e,r()},[t,e,r]),null}function Rv({enabled:e,controlsRef:t}){let r=(0,Er.useThree)(o=>o.invalidate);return(0,Er.useFrame)((o,n)=>{!e||!t.current||(t.current.rotate(n*.2,0,!1),r())}),null}function Vs(e){return Array.from(e.types).includes("Files")}function yf({label:e,checked:t,onChange:r}){return(0,V.jsxs)("div",{className:"env-row",children:[(0,V.jsx)("span",{className:"env-row__label",children:e}),(0,V.jsx)("div",{className:"env-row__value",children:(0,V.jsx)("button",{className:"env-checkbox-btn",onClick:()=>r(!t),children:(0,V.jsx)("span",{className:`env-checkbox${t?" env-checkbox--checked":""}`,children:t&&(0,V.jsx)(tn.Check,{size:9,strokeWidth:2,color:"white"})})})})]})}function Ic({label:e,value:t,onChange:r}){return(0,V.jsxs)("div",{className:"env-row",children:[(0,V.jsx)("span",{className:"env-row__label",children:e}),(0,V.jsx)("div",{className:"env-row__value",children:(0,V.jsxs)("div",{className:"env-color-swatch",style:{background:t},children:[(0,V.jsx)("span",{className:"env-color-swatch__hex",children:t}),(0,V.jsx)("input",{type:"color",className:"env-color-swatch__input",value:t,onChange:o=>r(o.target.value)})]})})]})}function zc({label:e,value:t,min:r,max:o,step:n,onChange:i}){return(0,V.jsxs)("div",{className:"env-row",children:[(0,V.jsx)("span",{className:"env-row__label",children:e}),(0,V.jsxs)("div",{className:"env-row__value env-row__value--slider",children:[(0,V.jsx)("input",{type:"range",className:"env-slider",min:r,max:o,step:n,value:t,onChange:s=>i(Number(s.target.value))}),(0,V.jsx)("span",{className:"env-slider__value",children:t.toFixed(2)})]})]})}function Nv({label:e,value:t,options:r,onChange:o}){return(0,V.jsxs)("div",{className:"env-row",children:[(0,V.jsx)("span",{className:"env-row__label",children:e}),(0,V.jsx)("div",{className:"env-row__value",children:(0,V.jsx)("select",{className:"env-select",value:t,onChange:n=>o(n.target.value),children:r.map(n=>(0,V.jsx)("option",{value:n,children:n},n))})})]})}function wf({title:e,children:t}){let[r,o]=(0,oe.useState)(!1);return(0,V.jsxs)("div",{className:"env-section",children:[(0,V.jsxs)("button",{className:"env-section__header",onClick:()=>o(n=>!n),children:[(0,V.jsx)(tn.ChevronDown,{size:12,strokeWidth:2,className:`env-section__chevron${r?" env-section__chevron--collapsed":""}`}),(0,V.jsx)("span",{children:e})]}),!r&&(0,V.jsx)("div",{className:"env-section__body",children:t})]})}function Bv({isOpen:e,onToggle:t,settings:r,onChange:o}){return(0,V.jsxs)("div",{className:`left-panel-wrapper ${e?"left-panel-wrapper--open":"left-panel-wrapper--closed"}`,children:[!e&&(0,V.jsx)("button",{className:"side-panel__open-btn side-panel__open-btn--left",onClick:()=>t(!0),children:(0,V.jsx)(tn.Settings,{size:20,strokeWidth:1.8})}),(0,V.jsxs)("div",{className:`side-panel side-panel--left ${e?"side-panel--open-left":"side-panel--closed-left"}`,"aria-hidden":!e,children:[(0,V.jsx)("div",{className:"side-panel__header",children:(0,V.jsxs)("div",{className:"side-panel__header-top",children:[(0,V.jsx)("span",{className:"side-panel__eyebrow",children:"Scene Settings"}),(0,V.jsx)("button",{className:"side-panel__close-btn",onClick:()=>t(!1),title:"Close",children:(0,V.jsx)(tn.X,{size:12,strokeWidth:1.6})})]})}),(0,V.jsxs)("div",{className:"env-controls",children:[(0,V.jsxs)(wf,{title:"Background",children:[(0,V.jsx)(yf,{label:"Background",checked:r.backgroundEnabled,onChange:n=>o("backgroundEnabled",n)}),(0,V.jsx)(Ic,{label:"Background Color",value:r.backgroundColor,onChange:n=>o("backgroundColor",n)}),(0,V.jsx)(Nv,{label:"Environment",value:r.envPreset,options:Cv,onChange:n=>o("envPreset",n)}),(0,V.jsx)(yf,{label:"Auto Rotate",checked:r.autoRotate,onChange:n=>o("autoRotate",n)})]}),(0,V.jsxs)(wf,{title:"Lighting",children:[(0,V.jsx)(zc,{label:"Exposure",value:r.exposure,min:0,max:2,step:.05,onChange:n=>o("exposure",n)}),(0,V.jsx)(zc,{label:"Ambient Light Intensity",value:r.ambientIntensity,min:0,max:3,step:.05,onChange:n=>o("ambientIntensity",n)}),(0,V.jsx)(Ic,{label:"Ambient Light Color",value:r.ambientColor,onChange:n=>o("ambientColor",n)}),(0,V.jsx)(zc,{label:"Direct Light Intensity",value:r.directionalIntensity,min:0,max:5,step:.05,onChange:n=>o("directionalIntensity",n)}),(0,V.jsx)(Ic,{label:"Direct Light Color",value:r.directionalColor,onChange:n=>o("directionalColor",n)})]})]})]})]})}function Lv({meshKeys:e,hiddenKeys:t,selectedKey:r,isOpen:o,onToggle:n,onFocus:i,onHover:s,onToggleVisibility:l}){let[a,u]=(0,oe.useState)(""),[f,d]=(0,oe.useState)(null),p=Object.values(e).filter(v=>v.label.toLowerCase().includes(a.toLowerCase()));return(0,V.jsxs)("div",{className:`right-panel-wrapper ${o?"right-panel-wrapper--open":"right-panel-wrapper--closed"}`,children:[!o&&(0,V.jsx)("button",{className:"side-panel__open-btn",onClick:()=>n(!0),children:(0,V.jsx)(tn.Boxes,{size:20,strokeWidth:1.8})}),(0,V.jsxs)("div",{className:`side-panel ${o?"side-panel--open":"side-panel--closed"}`,"aria-hidden":!o,children:[(0,V.jsxs)("div",{className:"side-panel__header",children:[(0,V.jsxs)("div",{className:"side-panel__header-top",children:[(0,V.jsx)("span",{className:"side-panel__eyebrow",children:"SCENE OBJECTS"}),(0,V.jsx)("button",{className:"side-panel__close-btn",onClick:()=>n(!1),title:"Close",children:(0,V.jsx)(tn.X,{size:12,strokeWidth:1.6})})]}),(0,V.jsxs)("p",{className:"side-panel__title",children:[p.length," objects"]})]}),(0,V.jsx)("div",{className:"side-panel__search-wrap",children:(0,V.jsx)("input",{className:"side-panel__search",type:"text",placeholder:"Search objects",value:a,onChange:v=>u(v.target.value)})}),(0,V.jsx)("div",{className:"side-panel__list",children:p.map(({key:v,label:x})=>{let _=!t.has(v),T=r===v,y=f===v;return(0,V.jsxs)("div",{onClick:()=>i(v),onMouseEnter:()=>{d(v),s(v)},onMouseLeave:()=>{d(null),s(null)},className:["side-panel__row",y?"side-panel__row--hovered":"",T?"side-panel__row--selected":""].filter(Boolean).join(" "),children:[(0,V.jsx)("span",{className:`side-panel__label${y||T?" side-panel__label--hovered":""}`,children:x}),(0,V.jsx)("button",{className:"side-panel__vis-btn",title:_?"Hide":"Show",onClick:c=>{c.stopPropagation(),l(v)},children:(0,V.jsx)("span",{className:`side-panel__checkbox${_?" side-panel__checkbox--checked":""}`,children:_&&(0,V.jsx)(tn.Check,{size:9,strokeWidth:5,color:"white"})})})]},v)})})]})]})}function Vc({modelUrl:e,modelFormat:t,dracoDecoderPath:r,ktx2TranscoderPath:o,meshopt:n=!0,backgroundColor:i="#1a1a1a",showSceneObjectsPanel:s=!0,showSceneSettingsPanel:l=!0,enableModelUpload:a=!1,zoomOnSelected:u=!1,highlightOnHover:f=!1,showLoadingOverlay:d=!0,refitOnResize:p=!0,backgroundEnabled:v=!1,autoRotate:x=!1,envPreset:_="city",exposure:T=1,ambientIntensity:y=.6,ambientColor:c="#ffffff",directionalIntensity:m=1.2,directionalColor:S="#ffffff",onModelLoaded:C,onLoadError:N}){let E=(0,oe.useRef)(null),h=(0,oe.useRef)({}),w=(0,oe.useRef)(null),g=(0,oe.useRef)(null),M=(0,oe.useRef)(0),[D,H]=(0,oe.useState)(null),[G,k]=(0,oe.useState)(null),[$,j]=(0,oe.useState)(!1),[P,A]=(0,oe.useState)({}),[W,F]=(0,oe.useState)(new Set),[ae,Ee]=(0,oe.useState)(null),[le,Ae]=(0,oe.useState)(null),[ke,Oe]=(0,oe.useState)(null),[bt,$t]=(0,oe.useState)(null),[Ue,Ve]=(0,oe.useState)(!1),[St,Vt]=(0,oe.useState)(!1),[et,sn]=(0,oe.useState)(!1),[Mt,Ct]=(0,oe.useState)(!1),[En,je]=(0,oe.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[Et,ne]=(0,oe.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[de,Gt]=(0,oe.useState)({backgroundEnabled:v,backgroundColor:i,autoRotate:x,envPreset:_,exposure:T,ambientIntensity:y,ambientColor:c,directionalIntensity:m,directionalColor:S}),jt=a?ke:e,ot=(0,oe.useCallback)(()=>{H(null),k(null),j(!1),A({}),F(new Set),Ee(null),Ae(null),Ve(!1),sn(!1)},[]),ut=(0,oe.useCallback)(()=>{g.current?.cleanup(),g.current=null},[]),ht=(0,oe.useCallback)(()=>{ut(),Oe(null),$t(null),ot(),Gt({backgroundEnabled:v,backgroundColor:i,autoRotate:x,envPreset:_,exposure:T,ambientIntensity:y,ambientColor:c,directionalIntensity:m,directionalColor:S})},[c,y,x,i,v,S,m,_,T,ot,ut]),Yt=(0,oe.useCallback)(async he=>{Vt(!0);try{let B=await $a(he);ut(),g.current=B,Oe(B.url),$t(B.name),ot()}catch(B){Ve(!0),N?.(B)}finally{Vt(!1)}},[N,ot,ut]),kt=(0,oe.useCallback)(he=>{let B=he?.[0];B&&Yt(B)},[Yt]);(0,oe.useEffect)(()=>()=>{ut()},[ut]);let Bn=(0,oe.useCallback)((he,B)=>{Gt(I=>({...I,[he]:B}))},[]);(0,oe.useEffect)(()=>{Gt(he=>({...he,backgroundColor:i}))},[i]),(0,oe.useEffect)(()=>{ot()},[jt,ot]);let Cn=(0,oe.useCallback)(he=>{A(he),F(new Set),Ee(null)},[]),_e=(0,oe.useCallback)(he=>{H(he),Ve(!1);let B=Oo(he);k(B>fi?B:null),j(!1),C?.(he)},[C]),$e=(0,oe.useCallback)(he=>{Ve(!0),N?.(he)},[N]),De=(0,oe.useCallback)(he=>{if(Ee(he),!u)return;let B=h.current[he];!B||!E.current||E.current.fitToBox(B,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[u]),Ie=(0,oe.useCallback)(he=>{F(B=>{let I=new Set(B);return I.has(he)?I.delete(he):I.add(he),I})},[]),be=(0,oe.useCallback)(he=>{!a||!Vs(he.dataTransfer)||(he.preventDefault(),he.stopPropagation(),M.current+=1,Ct(!0))},[a]),Rt=(0,oe.useCallback)(he=>{!a||!Vs(he.dataTransfer)||(he.preventDefault(),he.stopPropagation(),he.dataTransfer.dropEffect="copy",Ct(!0))},[a]),Nt=(0,oe.useCallback)(he=>{!a||!Vs(he.dataTransfer)||(he.preventDefault(),he.stopPropagation(),M.current=Math.max(0,M.current-1),M.current===0&&Ct(!1))},[a]),Bt=(0,oe.useCallback)(he=>{!a||!Vs(he.dataTransfer)||(he.preventDefault(),he.stopPropagation(),M.current=0,Ct(!1),kt(he.dataTransfer.files))},[a,kt]),ln=d&&(St||!!(jt&&!Ue&&(!D||!et)));return(0,V.jsxs)("div",{className:"smv-root",style:{background:de.backgroundColor},onDragEnter:be,onDragOver:Rt,onDragLeave:Nt,onDrop:Bt,children:[l&&jt&&(0,V.jsx)(Bv,{isOpen:Et,onToggle:ne,settings:de,onChange:Bn}),(0,V.jsxs)("div",{className:"smv-canvasArea",children:[G!==null&&!$&&(0,V.jsxs)("div",{className:"smv-largeModelBanner",children:[(0,V.jsx)(tn.AlertTriangle,{size:14,className:"smv-largeModelBanner__icon"}),(0,V.jsxs)("span",{children:["Very large model detected (",Math.round(G/1e6),"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."]}),(0,V.jsx)("button",{type:"button",className:"smv-largeModelBanner__dismiss",onClick:()=>j(!0),"aria-label":"Dismiss",children:(0,V.jsx)(tn.X,{size:12})})]}),a?(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)("input",{ref:w,type:"file",accept:Xa,className:"smv-upload-input",onChange:he=>{kt(he.target.files),he.currentTarget.value=""}}),jt?(0,V.jsx)("div",{className:"smv-upload-toolbar",children:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)("span",{className:"smv-upload-toolbar__name",children:bt??"Uploaded model"}),(0,V.jsxs)("button",{type:"button",className:"smv-upload-toolbar__button smv-upload-toolbar__button--ghost",onClick:ht,children:[(0,V.jsx)(tn.Trash2,{size:14}),"Clear"]})]})}):null]}):null,jt?(0,V.jsx)(_f.Canvas,{dpr:[1,2],frameloop:"demand",resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:{background:de.backgroundColor},camera:{position:[0,0,5],fov:45,near:.1,far:1e3},children:(0,V.jsxs)(oe.Suspense,{fallback:null,children:[(0,V.jsx)("ambientLight",{intensity:de.ambientIntensity,color:de.ambientColor}),(0,V.jsx)("directionalLight",{position:[-4,5,7],intensity:de.directionalIntensity,color:de.directionalColor,castShadow:!0}),(0,V.jsx)("directionalLight",{position:[-5,5,5],intensity:.5}),(0,V.jsx)(oe.Suspense,{fallback:null,children:(0,V.jsx)(js.Environment,{preset:de.envPreset,background:de.backgroundEnabled})}),(0,V.jsx)(kv,{exposure:de.exposure}),(0,V.jsx)(Rv,{enabled:de.autoRotate,controlsRef:E}),(0,V.jsx)(Uc,{onLoadError:$e,children:(0,V.jsx)(oe.Suspense,{fallback:null,children:(0,V.jsx)(Tv,{url:jt,format:ke?void 0:t,dracoDecoderPath:r,ktx2TranscoderPath:o,meshopt:n,hiddenKeys:W,selectedKey:ae,panelHoveredKey:le,nodeRefsOut:h,onMeshesReady:Cn,onModelLoaded:_e,onMeshClick:De,highlightOnHover:f})})},jt),(0,V.jsx)(Ev,{scene:D,controlsRef:E,refitOnResize:p,onInitialFitComplete:()=>sn(!0)}),(0,V.jsx)(js.CameraControls,{ref:E,makeDefault:!0,smoothTime:.3})]})}):(0,V.jsx)("div",{className:"smv-upload-empty-state",style:{background:de.backgroundColor},children:(0,V.jsxs)("div",{className:"smv-upload-empty-state__card",children:[(0,V.jsx)("div",{className:"smv-upload-empty-state__icon",children:(0,V.jsx)(tn.Upload,{size:24})}),(0,V.jsxs)("p",{className:"smv-upload-empty-state__body",children:["Drag and drop ",(0,V.jsx)("code",{children:".glb"}),", ",(0,V.jsx)("code",{children:".gltf"}),","," ",(0,V.jsx)("code",{children:".obj"}),", ",(0,V.jsx)("code",{children:".fbx"}),", ",(0,V.jsx)("code",{children:".usdz"}),", or"," ",(0,V.jsx)("code",{children:".zip"})," here"]}),(0,V.jsxs)("button",{type:"button",className:"smv-upload-empty-state__button",onClick:()=>w.current?.click(),children:[(0,V.jsx)(tn.Upload,{size:15}),"Choose model"]})]})}),(0,V.jsx)(ao,{visible:ln,message:St?"Preparing model...":"Loading model..."}),a&&Mt?(0,V.jsx)("div",{className:"smv-upload-drop-overlay",children:(0,V.jsxs)("div",{className:"smv-upload-drop-overlay__card",children:[(0,V.jsx)(tn.Upload,{size:20}),(0,V.jsx)("span",{children:"Release to load your model"})]})}):null]}),s&&jt&&(0,V.jsx)(Lv,{meshKeys:P,hiddenKeys:W,selectedKey:ae,isOpen:En,onToggle:je,onFocus:De,onHover:Ae,onToggleVisibility:Ie})]})}var la=require("react");function Mf(e=null){let[t,r]=(0,la.useState)(e),o=(0,la.useCallback)(i=>{r(i)},[r]),n=(0,la.useCallback)(()=>{r(null)},[]);return{selectedObjectBinding:t,setSelectedObjectBinding:r,handleObjectSelect:o,clearSelection:n}}var Cf=require("react");function Pf(e,t){return(0,Cf.useMemo)(()=>{if(!t)return null;let r=e[t];return r||(Object.values(e).find(o=>o.id===t||o.modelObjectId===t)??null)},[e,t])}var Af=require("react");function Tf(e){return(0,Af.useMemo)(()=>Object.values(e).map(t=>t.modelObjectId),[e])}var Ut=require("react");function jc(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function ca(e,t){if(!jc(t))return t;let r=jc(e)?{...e}:{};for(let o of Object.keys(t)){let n=t[o];r[o]=jc(n)?ca(r[o],n):n}return r}function Ov(e){return typeof e=="object"&&!Array.isArray(e)}function Dv(e,t){return"group"in t?e.group===t.group:"tag"in t?e.tags?.includes(t.tag)??!1:e.type===t.type}function gr(e,t){if(Ov(t))return Object.entries(e).filter(([,n])=>Dv(n,t)).map(([n])=>n);let o=(typeof t=="string"?[t]:t).map(n=>yn(e,n)).filter(n=>n!==null);return[...new Set(o)]}function Fs(e,t){return gr(e,t).map(r=>e[r]).filter(r=>r!==void 0)}function Iv(e){return Array.isArray(e)&&e.length>0&&typeof e[0]!="string"}function Ti(e,t,r){let o=Iv(t)?t:[{ids:t,patch:r??{}}],n=e;for(let i of o)for(let s of gr(n,i.ids)){let l=n[s];if(!l)continue;let a=ca(l,i.patch);n===e&&(n={...e}),n[s]=a}return n}function Hs(e){return{style:{material:e}}}var Ef={baseColor:"texture",metalness:"metalnessMap",roughness:"roughnessMap",emissive:"emissiveMap",alpha:"alphaMap",normal:"normalMap",bump:"bumpMap",ao:"aoMap",displacement:"displacementMap",clearcoat:"clearcoatMap",clearcoatRoughness:"clearcoatRoughnessMap",clearcoatNormal:"clearcoatNormalMap",anisotropy:"anisotropyMap",transmission:"transmissionMap",thickness:"thicknessMap",sheenColor:"sheenColorMap",sheenRoughness:"sheenRoughnessMap",specularIntensity:"specularIntensityMap",specularColor:"specularColorMap"};function kf(e){if(e)return Object.fromEntries(Object.entries(e).map(([t,r])=>[t,r&&typeof r=="object"?{...r}:r]))}function zv(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t.visible===!1).map(([t])=>[t,!0]))}function Rf(e){let[t,r]=(0,Ut.useState)(e),o=(0,Ut.useCallback)((E,h)=>{r(w=>h===void 0?Ti(w,E):Ti(w,E,h))},[]),n=(0,Ut.useCallback)((E,h)=>o(E,Hs(h)),[o]),i=(0,Ut.useCallback)((E,h)=>n(E,{baseColor:h}),[n]),s=(0,Ut.useCallback)((E,h,w="baseColor")=>{let g=Ef[w],M=typeof h=="string"?{path:h}:h;o(E,{style:{material:{[g]:M}}})},[o]),l=(0,Ut.useCallback)((E,h="baseColor")=>{let w=Ef[h];o(E,{style:{material:{[w]:void 0}}})},[o]),a=(0,Ut.useCallback)((E,h)=>{r(w=>{let g=yn(w,E);if(!g)return w;let M=kf(w[g]?.style?.material),D=gr(w,h);if(D.length===0)return w;let H=w;for(let G of D){let k=w[G];k&&(H===w&&(H={...w}),H[G]={...k,style:{...k.style,material:kf(M)}})}return H})},[]),u=(0,Ut.useCallback)(E=>o(E,{style:{material:void 0}}),[o]),f=(0,Ut.useCallback)((E,h)=>o(E,{transform:h}),[o]),d=(0,Ut.useCallback)(E=>o(E,{transform:void 0}),[o]),p=(0,Ut.useCallback)((E,h)=>o(E,{metadata:h}),[o]),v=(0,Ut.useCallback)(E=>Fs(t,E),[t]),x=(0,Ut.useCallback)(E=>gr(t,E).map(h=>t[h]?.id??h),[t]),_=(0,Ut.useCallback)(E=>{let h=yn(t,E);return h?t[h]?.style?.material??null:null},[t]),T=(0,Ut.useCallback)(E=>o(E,{visible:!1}),[o]),y=(0,Ut.useCallback)(E=>o(E,{visible:!0}),[o]),c=(0,Ut.useCallback)(E=>{r(h=>{let w=gr(h,E).reduce((g,M)=>{let D=h[M];return D&&g.push({ids:M,patch:{visible:D.visible===!1}}),g},[]);return Ti(h,w)})},[r]),m=(0,Ut.useCallback)(()=>{r(E=>Ti(E,Object.keys(E),{visible:!0}))},[r]),S=(0,Ut.useMemo)(()=>zv(t),[t]),C=(0,Ut.useMemo)(()=>Object.keys(S).map(E=>t[E]?.id??E),[S,t]),N=(0,Ut.useCallback)(E=>{let h=yn(t,E);return h?t[h]?.visible===!1:!1},[t]);return{objectBindings:t,setObjectBindings:r,updateObjectBindings:o,setMaterial:n,setBaseColor:i,setTexture:s,clearTexture:l,copyMaterial:a,resetMaterial:u,getMaterial:_,setTransform:f,resetTransform:d,updateMetadata:p,selectObjectBindings:v,selectObjectBindingIds:x,hiddenObjects:S,hiddenObjectIds:C,hideObject:T,showObject:y,toggleObjectVisibility:c,isObjectHidden:N,clearHiddenObjects:m}}function Nf(e){return e}var gn=require("react");function Gs(e,t){return ca(e,t)}var Uv={type:"point",color:"#ffffff",intensity:1,position:[0,0,0],distance:0,decay:2,attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0};function Bf(e){let t=(0,gn.useRef)(null),[r,o]=(0,gn.useState)(()=>{let y=typeof e=="function"?e():e;return t.current=y,y}),n=(0,gn.useCallback)(y=>{o(c=>{let m=typeof y=="function"?y(c):y;return Gs(c,m)})},[]),i=(0,gn.useCallback)(()=>{let y=t.current;y&&o(y)},[]),s=(0,gn.useCallback)((y,c)=>{n(m=>({lighting:{lights:m.lighting.lights.map(S=>S.id===y?{...S,...c}:S)}}))},[n]),l=(0,gn.useCallback)(y=>{n(c=>c.lighting.lights.some(m=>m.id===y.id)?{}:{lighting:{lights:[...c.lighting.lights,{...Uv,...y}]}})},[n]),a=(0,gn.useCallback)(y=>{n(c=>({lighting:{lights:c.lighting.lights.filter(m=>m.id!==y)}}))},[n]),u=(0,gn.useCallback)((y,c)=>s(y,{intensity:c}),[s]),f=(0,gn.useCallback)((y,c)=>s(y,{color:c}),[s]),d=(0,gn.useCallback)(y=>s(y,{visible:!0}),[s]),p=(0,gn.useCallback)(y=>s(y,{visible:!1}),[s]),v=(0,gn.useCallback)(y=>{n(c=>({lighting:{lights:c.lighting.lights.map(m=>m.id===y?{...m,visible:!m.visible}:m)}}))},[n]),x=(0,gn.useCallback)((y,c)=>s(y,{attachment:c,attachedToCamera:!1}),[s]),_=(0,gn.useCallback)(y=>s(y,{attachment:void 0}),[s]),T=(0,gn.useMemo)(()=>({items:r.lighting.lights,get:y=>r.lighting.lights.find(c=>c.id===y),add:l,update:s,remove:a,setIntensity:u,setColor:f,show:d,hide:p,toggle:v,attach:x,detach:_}),[r.lighting.lights,l,s,a,u,f,d,p,v,x,_]);return{sceneConfig:r,setSceneConfig:o,updateSceneConfig:n,resetSceneConfig:i,lights:T}}var Ws=require("react");function Lf(){let[e,t]=(0,Ws.useState)(null),r=(0,Ws.useCallback)(o=>{t(o)},[t]);return{hoveredObjectBinding:e,handleHoveredObject:r}}var kr=require("react"),da=require("three");function Xs(e){return[e.x,e.y,e.z]}function Of(){let[e,t]=(0,kr.useState)(!0),[r,o]=(0,kr.useState)(!1),[n,i]=(0,kr.useState)(null),[s,l]=(0,kr.useState)(null),[a,u]=(0,kr.useState)(0),f=(0,kr.useCallback)(v=>{let x=new da.Box3().setFromObject(v),_=x.min.clone(),T=x.max.clone(),y=new da.Vector3,c=new da.Vector3,m=0;v.traverse(S=>{"isMesh"in S&&S.isMesh&&(m+=1)}),x.getCenter(y),x.getSize(c),l({min:Xs(_),max:Xs(T),center:Xs(y),size:Xs(c)}),u(m),i(null),t(!1),o(!0)},[]),d=(0,kr.useCallback)(v=>{i(v),l(null),u(0),t(!1),o(!1)},[]),p=(0,kr.useCallback)(()=>{t(!0),o(!1),i(null),l(null),u(0)},[]);return{isLoading:e,isReady:r,error:n,bounds:s,objectCount:a,handleModelLoaded:f,handleLoadError:d,resetModelState:p}}var $s=require("react");function Df({bindings:e,scene:t,camera:r,animations:o,onAction:n}){let{objectBindings:i,updateObjectBindings:s,showObject:l,hideObject:a,toggleObjectVisibility:u}=e,f=t?.updateSceneConfig,d=r?.focusObject,p=r?.fitScene,v=r?.resetView,x=r?.setCameraTarget,_=r?.setCameraState,T=o?.play,y=o?.pause,c=o?.stop,m=o?.setSpeed,S=o?.seek,C=(0,$s.useCallback)(h=>{let w=yn(i,h);return w?i[w]?.actions??[]:[]},[i]),N=(0,$s.useCallback)(async h=>{for(let w of h.action.effects??[]){if("objectBindings"in w){s(w.target,w.objectBindings);continue}if("sceneConfig"in w){f?.(w.sceneConfig);continue}if("visibility"in w){w.visibility==="show"?l(w.target):w.visibility==="hide"?a(w.target):u(w.target);continue}if("camera"in w){let M=w.camera;M.type==="focus-object"?await d?.(M.objectId??h.objectId):M.type==="fit-scene"?await p?.():M.type==="reset"?await v?.():M.type==="set-target"?await x?.(M.target,M.transition??!0):await _?.(M.state,M.transition??!0);continue}let g=w.animation;g.type==="play"?T?.(g.clip):g.type==="pause"?y?.():g.type==="stop"?c?.():g.type==="set-speed"?m?.(g.speed):S?.(g.time)}await n?.(h)},[p,d,a,n,y,T,v,S,m,_,x,l,c,u,s,f]),E=(0,$s.useCallback)(async(h,w)=>{let g=yn(i,h);if(!g)return null;let M=i[g],D=M?.actions?.find(G=>G.id===w);if(!M||!D)return null;let H={objectId:g,action:D,binding:M};return await N(H),H},[N,i]);return{getActionsForObject:C,handleAction:N,runAction:E}}var oi=require("react");function Vv(e){return typeof e=="function"?e:e?.handleViewerReady??null}function If(...e){let t=(0,oi.useRef)(null),r=(0,oi.useRef)(e);r.current=e;let o=(0,oi.useCallback)(l=>{t.current=l;let a=new Set;for(let u of r.current){let f=Vv(u);f&&!a.has(f)&&(a.add(f),f(l))}},[]),n=(0,oi.useCallback)(()=>t.current,[]),i=(0,oi.useCallback)(l=>{let a=t.current;return a?a.captureImage(l):Promise.reject(new Error("ModelViewer is not ready yet."))},[]),s=(0,oi.useCallback)(()=>{let l=t.current;return l?(l.invalidate(),!0):!1},[]);return{handleViewerReady:o,getViewer:n,captureImage:i,invalidate:s}}var ze=require("react"),xo=require("three");var Gc=["emissiveIntensity","opacity","metalness","roughness","transmission","clearcoat","clearcoatRoughness","ior","thickness"],Ys=1;function Ks(e){return typeof e=="string"?[e]:e}function qs(e,t=0,r=1){return Math.min(r,Math.max(t,e))}function Fc(e,t){return e+Math.random()*(t-e)}function zf([e,t],r){return e+(t-e)*r}function Hc([e,t],r){return[e[0]+(t[0]-e[0])*r,e[1]+(t[1]-e[1])*r,e[2]+(t[2]-e[2])*r]}function Uf(e,t){let r=qs(e);switch(t){case"ease-in":return r*r;case"ease-out":return 1-(1-r)*(1-r);case"ease-in-out":return r<.5?2*r*r:1-Math.pow(-2*r+2,2)/2;default:return r}}function jv(e){let t=e.material;return t?(Array.isArray(t)?t:[t]).filter(r=>r instanceof xo.Material):[]}function Fv(e){let t={opacity:e.opacity,transparent:e.transparent};e.color&&(t.baseColor=`#${e.color.getHexString()}`),e.emissive&&(t.emissive=`#${e.emissive.getHexString()}`);for(let r of Gc){let o=e[r];typeof o=="number"&&(t[r]=o)}return t}function Vf(e,t){t.baseColor!==void 0&&e.color&&e.color.set(t.baseColor),t.emissive!==void 0&&e.emissive&&e.emissive.set(t.emissive);for(let r of Gc){let o=t[r];o!==void 0&&typeof e[r]=="number"&&(e[r]=o)}t.transparent!==void 0&&(e.transparent=t.transparent),e.needsUpdate=!0}function Hv(e){return{position:[e.position.x,e.position.y,e.position.z],rotation:[e.rotation.x,e.rotation.y,e.rotation.z],scale:[e.scale.x,e.scale.y,e.scale.z],visible:e.visible}}function Gv(e,t){if(t.position&&e.position.set(...t.position),t.rotation&&e.rotation.set(...t.rotation),t.scale!==void 0){let r=typeof t.scale=="number"?[t.scale,t.scale,t.scale]:t.scale;e.scale.set(...r)}t.visible!==void 0&&(e.visible=t.visible),e.updateMatrix(),e.updateMatrixWorld(!0)}function jf(e={}){let t=(0,ze.useRef)(e);t.current=e;let r=(0,ze.useRef)(null),o=(0,ze.useRef)(null),n=(0,ze.useRef)(null),i=(0,ze.useRef)(new Map),s=(0,ze.useRef)(new Map),l=(0,ze.useRef)(new Map),a=(0,ze.useRef)(new Map),u=(0,ze.useCallback)(P=>{let A=r.current;if(!A)return null;let W=yn(A.objectBindings,P);return A.nodeRefs[P]??(W?A.nodeRefs[W]:null)??(A.scene?pr(A.scene,P):null)??null},[]),f=(0,ze.useCallback)(P=>{let A=r.current;return A?typeof P=="object"&&!Array.isArray(P)?gr(A.objectBindings,P):Ks(P).map(W=>yn(A.objectBindings,W)??W):typeof P=="string"?[P]:Array.isArray(P)?P:[]},[]),d=(0,ze.useCallback)(()=>{r.current?.invalidate()},[]),p=(0,ze.useCallback)((P,A)=>{let W=!1;for(let F of f(P)){let ae=u(F);if(ae)for(let Ee of jv(ae))l.current.has(Ee)||l.current.set(Ee,Fv(Ee)),Vf(Ee,A),W=!0}return W},[u,f]),v=(0,ze.useCallback)((P,A)=>{let W=p(P,A);return W&&d(),W},[d,p]),x=(0,ze.useCallback)((P,A)=>{let W=!1;for(let F of f(P)){let ae=u(F);ae&&(a.current.has(ae)||a.current.set(ae,Hv(ae)),Gv(ae,A),W=!0)}return W},[u,f]),_=(0,ze.useCallback)((P,A)=>{let W=x(P,A);return W&&d(),W},[d,x]),T=(0,ze.useCallback)(P=>{let A=u(P);if(!A)return null;A.updateWorldMatrix(!0,!1);let W=A.getWorldPosition(new xo.Vector3);return[W.x,W.y,W.z]},[u]),y=(0,ze.useCallback)(P=>{let A=s.current.get(P);return A?(A.light.removeFromParent(),A.light.dispose(),s.current.delete(P),d(),!0):!1},[d]),c=(0,ze.useCallback)(P=>{let A=u(P.target);if(!A)return!1;let W=s.current.get(P.id),F=W?.light??new xo.PointLight;return W&&W.target!==P.target&&F.removeFromParent(),F.name=`react-immersive-runtime-light:${P.id}`,F.color.set(P.color??"#ffffff"),F.intensity=P.intensity??1,F.distance=P.distance??0,F.decay=P.decay??2,F.castShadow=P.castShadow??!1,F.position.set(...P.offset??[0,0,0]),F.parent!==A&&A.add(F),s.current.set(P.id,{light:F,target:P.target}),d(),!0},[d,u]),m=(0,ze.useCallback)((P,A)=>{let W=s.current.get(P);if(!W)return!1;if(A.target&&A.target!==W.target){let F=u(A.target);if(!F)return!1;W.light.removeFromParent(),F.add(W.light),W.target=A.target}return A.color!==void 0&&W.light.color.set(A.color),A.intensity!==void 0&&(W.light.intensity=A.intensity),A.distance!==void 0&&(W.light.distance=A.distance),A.decay!==void 0&&(W.light.decay=A.decay),A.offset!==void 0&&W.light.position.set(...A.offset),A.castShadow!==void 0&&(W.light.castShadow=A.castShadow),d(),!0},[d,u]),S=(0,ze.useCallback)((P,A)=>{let W=F=>A[F%A.length]??0;for(let F of P.materials??[])f(F.targets).forEach((ae,Ee)=>{let le=W(Ee),Ae={};for(let ke of Gc){let Oe=F.values[ke];Oe&&(Ae[ke]=zf(Oe,le))}p(ae,Ae)});for(let F of P.transforms??[])f(F.targets).forEach((ae,Ee)=>{let le=W(Ee),Ae={};F.values.position&&(Ae.position=Hc(F.values.position,le)),F.values.rotation&&(Ae.rotation=Hc(F.values.rotation,le)),F.values.scale&&(Ae.scale=Hc(F.values.scale,le)),x(ae,Ae)});for(let F of P.lights??[])Ks(F.lights).forEach((ae,Ee)=>{let le=s.current.get(ae);le&&(le.light.intensity=zf(F.intensity,W(Ee)))})},[f,p,x]),C=(0,ze.useRef)(()=>{}),N=(0,ze.useRef)(()=>{});N.current=P=>{n.current=null;let A=!1;for(let[W,F]of i.current){F.startedAt===null&&(F.startedAt=P);let ae=F.lastFrameAt??P;F.lastFrameAt=P;let Ee=F.override&&F.override.until>P?F.override.level:null;F.override&&Ee===null&&(F.override=null);let le=F.update(P,P-F.startedAt,Math.min(100,P-ae),Ee);A=!0,le||(i.current.delete(W),F.onComplete?.())}A&&d(),i.current.size>0&&C.current()},C.current=()=>{n.current!==null||typeof requestAnimationFrame>"u"||(n.current=requestAnimationFrame(P=>N.current(P)))};let E=(0,ze.useCallback)(P=>(i.current.set(P.id,P),C.current(),P.id),[]),h=(0,ze.useCallback)((P,A={})=>{let W=A.id??`transition-${Ys++}`,F=Math.max(1,A.duration??400),ae=A.easing??"ease-in-out";return E({id:W,startedAt:null,lastFrameAt:null,override:null,onComplete:A.onComplete,update:(Ee,le,Ae,ke)=>{let Oe=ke??Uf(le/F,ae);return S(P,[Oe]),le<F}})},[S,E]),w=(0,ze.useCallback)((P,A={})=>{let W=A.id??`pulse-${Ys++}`,F=Math.max(1,A.duration??1e3),ae=A.minLevel??0,Ee=A.maxLevel??1,le=A.repeat??1/0,Ae=A.synchronized??!0,ke=Math.max(1,...[...P.materials??[],...P.transforms??[]].map(Oe=>f(Oe.targets).length),...(P.lights??[]).map(Oe=>Ks(Oe.lights).length));return E({id:W,startedAt:null,lastFrameAt:null,override:null,onComplete:A.onComplete,update:(Oe,bt,$t,Ue)=>{let Ve=bt/F,St=Array.from({length:Ae?1:ke},(Vt,et)=>{if(Ue!==null)return Ue;let sn=Ve+(Ae?0:et/ke),Mt=.5-Math.cos(sn%1*Math.PI*2)/2;return ae+(Ee-ae)*Mt});return S(P,St),le===1/0||Ve<le}})},[S,E,f]),g=(0,ze.useCallback)((P,A={})=>{let W=A.id??`timeline-${Ys++}`,F=A.repeat??1,ae=P.map(le=>({...le,duration:Math.max(1,le.duration),hold:Math.max(0,le.hold??0)})),Ee=Math.max(1,ae.reduce((le,Ae)=>le+Ae.duration+Ae.hold,0));return E({id:W,startedAt:null,lastFrameAt:null,override:null,onComplete:A.onComplete,update:(le,Ae,ke,Oe)=>{if(ae.length===0||F<=0)return!1;let bt=Ae/Ee;if(F!==1/0&&bt>=F){for(let Ve of ae)S(Ve.channels,[1]);return!1}let $t=Ae%Ee,Ue=0;for(let Ve of ae){let St=Ue+Ve.duration,Vt=St+Ve.hold;if($t>=St){S(Ve.channels,[Oe??1]),Ue=Vt;continue}if($t>=Ue){let et=Oe??Uf(($t-Ue)/Ve.duration,Ve.easing??"ease-in-out");S(Ve.channels,[et]);break}}return!0}})},[S,E]),M=(0,ze.useCallback)((P,A={})=>{let W=A.id??`flicker-${Ys++}`,F=A.synchronized??!0,ae=A.minLevel??.15,Ee=A.maxLevel??1,le=A.interval??[45,160],Ae=typeof le=="number"?[le,le]:le,ke=[Math.max(1,Math.min(...Ae)),Math.max(1,Math.max(...Ae))],Oe=qs(A.response??.7,.01,1),bt=qs(A.blackoutChance??.08),$t=qs(A.flashChance??.12),Ue=A.flashLevel??1.15,Ve=Math.max(1,...[...P.materials??[],...P.transforms??[]].map(Mt=>f(Mt.targets).length),...(P.lights??[]).map(Mt=>Ks(Mt.lights).length)),St=F?1:Ve,Vt=Array.from({length:St},()=>ae),et=Array.from({length:St},()=>ae),sn=Array.from({length:St},()=>0);return E({id:W,startedAt:null,lastFrameAt:null,override:null,onComplete:A.onComplete,update:(Mt,Ct,En,je)=>{for(let Et=0;Et<St;Et+=1){if(je!==null)et[Et]=je;else if(Mt>=sn[Et]){let de=Math.random();et[Et]=de<bt?Fc(0,Math.min(.04,ae)):de<bt+$t?Ue:Fc(ae,Ee),sn[Et]=Mt+Fc(...ke)}let ne=1-Math.pow(1-Oe,Math.max(1,En)/16.67);Vt[Et]+=(et[Et]-Vt[Et])*ne}return S(P,Vt),A.duration===void 0||Ct<A.duration}})},[S,E,f]),D=(0,ze.useCallback)((P,A,W)=>{let F=i.current.get(P);if(!F)return!1;let ae=typeof performance>"u"?Date.now():performance.now();return F.override={level:A,until:ae+Math.max(0,W)},C.current(),!0},[]),H=(0,ze.useCallback)(P=>i.current.delete(P),[]),G=(0,ze.useCallback)(()=>{i.current.clear(),n.current!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(n.current),n.current=null)},[]),k=(0,ze.useCallback)(()=>{for(let[P,A]of l.current)Vf(P,A);l.current.clear();for(let[P,A]of a.current)P.position.set(...A.position),P.rotation.set(...A.rotation),P.scale.set(...A.scale),P.visible=A.visible,P.updateMatrix(),P.updateMatrixWorld(!0);a.current.clear();for(let P of s.current.values())P.light.removeFromParent(),P.light.dispose();s.current.clear(),d()},[d]),$=(0,ze.useCallback)(()=>{G(),k()},[k,G]),j=(0,ze.useCallback)(P=>{o.current&&o.current!==P.scene&&k(),r.current=P,o.current=P.scene,t.current.onViewerReady?.(P)},[k]);return(0,ze.useEffect)(()=>()=>{$(),r.current=null,o.current=null},[$]),{handleViewerReady:j,setMaterial:v,setTransform:_,getWorldPosition:T,addPointLight:c,updatePointLight:m,removePointLight:y,transition:h,timeline:g,pulse:w,flicker:M,overrideEffect:D,stopEffect:H,stopAllEffects:G,resetRuntime:$}}var Xt=require("react");function Gf(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ua(e){return typeof e=="number"&&Number.isFinite(e)}function Ff(e){return Array.isArray(e)&&e.length===3&&e.every(ua)}function Wv(e){return!Gf(e)||!Ff(e.position)||!Ff(e.target)||e.fov!==null&&!ua(e.fov)||!ua(e.zoom)||e.zoom<=0||e.azimuthAngle!==void 0&&!ua(e.azimuthAngle)||e.polarAngle!==void 0&&!ua(e.polarAngle)?null:{position:e.position,target:e.target,fov:e.fov,zoom:e.zoom,azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle}}function Xv(e){if(!Gf(e))return null;let t;if(e.camera!==void 0){let n=Wv(e.camera);if(!n)return null;t=n}let r;if(e.hidden!==void 0){if(!Array.isArray(e.hidden)||!e.hidden.every(n=>typeof n=="string"))return null;r=e.hidden}let o;if(e.selected===null||typeof e.selected=="string")o=e.selected;else if(e.selected!==void 0)return null;return{camera:t,hidden:r,selected:o}}function Hf(e,t,r){let o=Object.values(t).filter(n=>n.visible===!1).map(n=>n.id);return{camera:e??void 0,hidden:o,selected:r?.id??null}}function Wf({cameraState:e,setCameraState:t,objectBindings:r,onObjectBindingsChange:o,selectedObjectBinding:n,setSelectedObjectBinding:i,paramKey:s="view",debounceMs:l=400,autoSync:a=!0}){let u=(0,Xt.useRef)(null),f=(0,Xt.useRef)(null),d=(0,Xt.useRef)(null),p=(0,Xt.useRef)(null),v=(0,Xt.useRef)(null),x=(0,Xt.useCallback)(()=>{v.current!==null&&(window.clearTimeout(v.current),v.current=null),d.current=null,p.current=null},[]),_=(0,Xt.useCallback)(()=>{let w=Hf(e,r,n);return`${s}=${encodeURIComponent(JSON.stringify(w))}`},[e,r,n,s]),T=(0,Xt.useCallback)(()=>{let w=new URL(window.location.href);return w.hash=_(),w.toString()},[_]),y=(0,Xt.useCallback)(w=>{let g=new URL(window.location.href);g.hash=w,window.history.replaceState(null,"",g.toString()),f.current=w,u.current=new URLSearchParams(g.hash.slice(1)).get(s)},[s]),c=(0,Xt.useCallback)(()=>{x(),y(_())},[_,x,y]),m=(0,Xt.useRef)({cameraState:e,objectBindings:r,selectedObjectBinding:n});m.current={cameraState:e,objectBindings:r,selectedObjectBinding:n};let[S,C]=(0,Xt.useState)(!1);(0,Xt.useEffect)(()=>{if(!a||!S){x();return}let w=m.current,g=Hf(w.cameraState,w.objectBindings,w.selectedObjectBinding),M=`${s}=${encodeURIComponent(JSON.stringify(g))}`;if(M===f.current){x();return}M===d.current&&l===p.current||(x(),d.current=M,p.current=l,v.current=window.setTimeout(()=>{v.current=null,d.current=null,p.current=null,y(M)},Math.max(0,l)))},[a,e,x,l,r,s,S,n,y]),(0,Xt.useEffect)(()=>x,[x]);let N=(0,Xt.useRef)(null),E=(0,Xt.useRef)(null),h=(0,Xt.useCallback)(async()=>{C(!0);let w=window.location.hash.startsWith("#")?window.location.hash.slice(1):window.location.hash,g=new URLSearchParams(w).get(s);if(!g)return N.current=null,!1;if(g===u.current||g===N.current||g===E.current)return!1;let M;try{M=JSON.parse(g)}catch{return!1}let D=Xv(M);if(!D)return!1;E.current=g;try{if(D.camera&&await t(D.camera,!1),D.hidden){let H=new Set(D.hidden);o(Object.fromEntries(Object.entries(r).map(([G,k])=>[G,{...k,visible:!H.has(k.id)}])))}if(D.selected!==void 0){let H=D.selected?yn(r,D.selected):null;i(H?r[H]:null)}return N.current=g,!0}finally{E.current===g&&(E.current=null)}},[r,o,s,t,i]);return(0,Xt.useEffect)(()=>{let w=()=>{h().catch(()=>{})};return window.addEventListener("hashchange",w),()=>{window.removeEventListener("hashchange",w)}},[h]),{getShareUrl:T,syncUrl:c,restoreFromUrl:h}}0&&(module.exports={BindingBuilder,DEFAULT_SCENE_CONFIG,MATERIAL_BLENDING_MODES,MATERIAL_SIDES,ModelViewer,SimpleModelViewer,defineObjectBindings,material,patchBindings,patchSceneConfig,selectBindingKeys,selectBindings,useObjectBinding,useObjectBindingIds,useObjectBindings,useSceneConfig,useShareableViewerState,useViewerActions,useViewerAnimations,useViewerCamera,useViewerConnection,useViewerEffects,useViewerHover,useViewerModel,useViewerSelection});
3672
+ `,Bc=class extends Ts.Effect{constructor(t=1){super("ExposureEffect",Tv,{blendFunction:Ts.BlendFunction.NORMAL,uniforms:new Map([["exposure",new jp.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},Hp=(0,wa.forwardRef)(function({exposure:t},n){let a=(0,wa.useMemo)(()=>new Bc(t),[]);return a.exposure=t,(0,wa.useImperativeHandle)(n,()=>a,[a]),(0,Gp.jsx)("primitive",{object:a,dispose:null})});var Ii=require("@react-three/fiber"),Wp=Yu(require("@react-three/postprocessing")),Xp=require("postprocessing"),ir=require("three"),rr=require("react"),qp=require("react/jsx-runtime"),Av=Wp.LensFlareEffect;function $p({config:e}){let t=(0,Ii.useThree)(h=>h.camera),n=(0,Ii.useThree)(h=>h.raycaster),a=(0,Ii.useThree)(h=>h.scene),r=(0,Ii.useThree)(h=>h.viewport),i=(0,rr.useRef)(null),s=(0,rr.useRef)(new ir.Vector3),l=(0,rr.useRef)(new ir.Vector2),o=(0,rr.useMemo)(()=>new ir.Vector3(...e.lensPosition),[e.lensPosition]),c=(0,rr.useMemo)(()=>new ir.Color(e.colorGain??"#141414"),[e.colorGain]),d=(0,rr.useMemo)(()=>new ir.Vector2(0,0),[]),p=(0,rr.useMemo)(()=>new Av({blendFunction:Xp.BlendFunction.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:o,screenRes:d,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,o,d]);return(0,rr.useEffect)(()=>(i.current=p,()=>{p.dispose(),i.current=null}),[p]),(0,rr.useEffect)(()=>{let h=p.uniforms.get("screenRes");h&&(h.value.x=r.width,h.value.y=r.height)},[p,r]),(0,Ii.useFrame)((h,f)=>{let b=i.current;if(!b)return;let w=b.uniforms.get("lensPosition"),k=b.uniforms.get("opacity");if(!w||!k)return;let x=1;if(s.current.copy(o).project(t),s.current.z>1)return;w.value.x=s.current.x,w.value.y=s.current.y,l.current.x=s.current.x,l.current.y=s.current.y,n.setFromCamera(l.current,t);let u=n.intersectObjects(a.children,!0),{object:m}=u[0]||{};m&&(m.userData?.lensflare==="no-occlusion"?x=0:m instanceof ir.Mesh&&(m.material.uniforms?._transmission?.value>.2||m.material._transmission&&m.material._transmission>.2?x=.2:m.material.transparent&&(x=m.material.opacity))),k.value=ir.MathUtils.damp(k.value,x,12,f)}),(0,qp.jsx)("primitive",{object:p,dispose:null})}var As=require("@react-three/postprocessing"),Rn=require("postprocessing"),Yp=require("three");function Kp(e){return e==="linear"?Rn.ToneMappingMode.LINEAR:e==="reinhard"?Rn.ToneMappingMode.REINHARD:Rn.ToneMappingMode.ACES_FILMIC}function Es(e){switch(e){case"verySmall":return Rn.KernelSize.VERY_SMALL;case"small":return Rn.KernelSize.SMALL;case"medium":return Rn.KernelSize.MEDIUM;case"large":return Rn.KernelSize.LARGE;case"veryLarge":return Rn.KernelSize.VERY_LARGE;case"huge":return Rn.KernelSize.HUGE}}function Zp(e){switch(e){case"constantMild":return Rn.GlitchMode.CONSTANT_MILD;case"constantWild":return Rn.GlitchMode.CONSTANT_WILD;default:return Rn.GlitchMode.SPORADIC}}function Dc(e){let t=new Yp.Color(e);return[t.r,t.g,t.b,1]}function Jp(e){return e==="radial"?As.RampType.Radial:e==="mirroredLinear"?As.RampType.MirroredLinear:As.RampType.Linear}var Ye=require("react/jsx-runtime"),zi={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new yr.Color(di.color).getHex(),hiddenEdgeColor:new yr.Color(di.color).multiplyScalar(.35).getHex(),kernelSize:ui.KernelSize.VERY_SMALL,blur:!1,xRay:!1};function Ev(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}function Qp({sceneConfig:e,selectedObjectRef:t,hoveredObjectRef:n,highlightOnHover:a=!1,disabled:r=!1}){let i=(0,Oc.useThree)(M=>M.scene),s=(0,Oc.useThree)(M=>M.gl),l=(0,ar.useRef)(null),o=e?.postProcessing,c=t??null,d=o?.outline.enabled===!0,p=d?Ev(i):n?[n]:[],h=d||a,[f,b]=(0,ar.useState)(()=>s.xr?.isPresenting??!1);(0,ar.useEffect)(()=>{let M=s.xr;if(!M)return;let C=()=>b(!0),A=()=>b(!1);return M.addEventListener("sessionstart",C),M.addEventListener("sessionend",A),b(M.isPresenting),()=>{M.removeEventListener("sessionstart",C),M.removeEventListener("sessionend",A)}},[s]);let w=i.children.filter(M=>M.isLight),k=(0,ar.useMemo)(()=>new yr.Vector2(o?.chromaticAberration.offsetX??.002,o?.chromaticAberration.offsetY??.002),[o?.chromaticAberration.offsetX,o?.chromaticAberration.offsetY]),x=(0,ar.useMemo)(()=>new yr.Color(o?.outline.visibleEdgeColor??"#ffffff").getHex(),[o?.outline.visibleEdgeColor]),u=(0,ar.useMemo)(()=>new yr.Color(o?.outline.hiddenEdgeColor??"#22090a").getHex(),[o?.outline.hiddenEdgeColor]),m=(0,ar.useMemo)(()=>Dc(o?.ramp.startColor??"#000000"),[o?.ramp.startColor]),_=(0,ar.useMemo)(()=>Dc(o?.ramp.endColor??"#ffffff"),[o?.ramp.endColor]);return!o||f||r?null:(0,Ye.jsxs)(Ye.Fragment,{children:[o.godRays.enabled===!0&&(0,Ye.jsxs)("mesh",{ref:l,position:o.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,Ye.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,Ye.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,Ye.jsxs)(Ee.EffectComposer,{multisampling:0,enableNormalPass:o.ssao.enabled===!0,autoClear:!1,children:[o.smaa.enabled===!0&&(0,Ye.jsx)(Ee.SMAA,{}),o.ssao.enabled===!0&&(0,Ye.jsx)(Ee.SSAO,{samples:o.ssao.samples,rings:o.ssao.rings,intensity:o.ssao.intensity,radius:o.ssao.radius,bias:o.ssao.bias,luminanceInfluence:o.ssao.luminanceInfluence,fade:o.ssao.fade,minRadiusScale:o.ssao.minRadiusScale,worldDistanceThreshold:o.ssao.worldDistanceThreshold,worldDistanceFalloff:o.ssao.worldDistanceFalloff,worldProximityThreshold:o.ssao.worldProximityThreshold,worldProximityFalloff:o.ssao.worldProximityFalloff}),o.autofocus.enabled===!0&&(0,Ye.jsx)(Ee.Autofocus,{focusDistance:o.autofocus.focusDistance,focusRange:o.autofocus.focusRange,focalLength:o.autofocus.focalLength,bokehScale:o.autofocus.bokehScale,target:o.autofocus.target,mouse:o.autofocus.mouse,debug:o.autofocus.debug||void 0,manual:o.autofocus.manual,smoothTime:o.autofocus.smoothTime}),o.autofocus.enabled!==!0&&o.depthOfField.enabled===!0&&(0,Ye.jsx)(Ee.DepthOfField,{focusDistance:o.depthOfField.focusDistance,focusRange:o.depthOfField.focusRange,focalLength:o.depthOfField.focalLength,bokehScale:o.depthOfField.bokehScale}),o.bloom.enabled===!0&&(0,Ye.jsx)(Ee.Bloom,{intensity:o.bloom.intensity,luminanceThreshold:o.bloom.luminanceThreshold,luminanceSmoothing:o.bloom.luminanceSmoothing,mipmapBlur:o.bloom.mipmapBlur,radius:o.bloom.radius,levels:o.bloom.levels}),o.selectiveBloom.enabled===!0&&(0,Ye.jsx)(Ee.SelectiveBloom,{selection:c??void 0,lights:w,selectionLayer:o.selectiveBloom.selectionLayer,intensity:o.selectiveBloom.intensity,luminanceThreshold:o.selectiveBloom.luminanceThreshold,luminanceSmoothing:o.selectiveBloom.luminanceSmoothing,kernelSize:Es(o.selectiveBloom.kernelSize),mipmapBlur:o.selectiveBloom.mipmapBlur,inverted:o.selectiveBloom.inverted,ignoreBackground:o.selectiveBloom.ignoreBackground}),h&&(0,Ye.jsx)(Ee.Outline,{selection:p,selectionLayer:o.outline.selectionLayer,blendFunction:ui.BlendFunction.SCREEN,edgeStrength:d?o.outline.edgeStrength:zi.edgeStrength,pulseSpeed:d?o.outline.pulseSpeed:zi.pulseSpeed,visibleEdgeColor:d?x:zi.visibleEdgeColor,hiddenEdgeColor:d?u:zi.hiddenEdgeColor,kernelSize:d?Es(o.outline.kernelSize):zi.kernelSize,blur:d?o.outline.blur:zi.blur,xRay:d?o.outline.xRay:zi.xRay}),o.chromaticAberration.enabled===!0&&(0,Ye.jsx)(Ee.ChromaticAberration,{offset:k,radialModulation:o.chromaticAberration.radialModulation,modulationOffset:o.chromaticAberration.modulationOffset}),o.colorAverage.enabled===!0&&(0,Ye.jsx)(Ee.ColorAverage,{}),o.dotScreen.enabled===!0&&(0,Ye.jsx)(Ee.DotScreen,{angle:o.dotScreen.angle,scale:o.dotScreen.scale}),o.glitch.enabled===!0&&(0,Ye.jsx)(Ee.Glitch,{mode:Zp(o.glitch.mode),delay:new yr.Vector2(o.glitch.delay[0],o.glitch.delay[1]),duration:new yr.Vector2(o.glitch.duration[0],o.glitch.duration[1]),strength:new yr.Vector2(o.glitch.strength[0],o.glitch.strength[1]),chromaticAberrationOffset:new yr.Vector2(o.glitch.chromaticAberrationOffset[0],o.glitch.chromaticAberrationOffset[1]),columns:o.glitch.columns,ratio:o.glitch.ratio,active:!0}),o.grid.enabled===!0&&(0,Ye.jsx)(Ee.Grid,{scale:o.grid.scale,lineWidth:o.grid.lineWidth}),o.lensflare.enabled===!0&&(0,Ye.jsx)($p,{config:o.lensflare}),o.godRays.enabled===!0&&(0,Ye.jsx)(Ee.GodRays,{sun:l,samples:o.godRays.samples,density:o.godRays.density,decay:o.godRays.decay,weight:o.godRays.weight,exposure:o.godRays.exposure,clampMax:o.godRays.clampMax,blur:o.godRays.blur,kernelSize:Es(o.godRays.kernelSize)}),o.noise.enabled===!0&&(0,Ye.jsx)(Ee.Noise,{premultiply:o.noise.premultiply,opacity:o.noise.opacity,blendFunction:ui.BlendFunction.ADD}),o.brightnessContrast.enabled===!0&&(0,Ye.jsx)(Ee.BrightnessContrast,{brightness:o.brightnessContrast.brightness,contrast:o.brightnessContrast.contrast}),o.hueSaturation.enabled===!0&&(0,Ye.jsx)(Ee.HueSaturation,{hue:o.hueSaturation.hue,saturation:o.hueSaturation.saturation}),o.toneMapping.enabled===!0&&(0,Ye.jsx)(Hp,{exposure:o.toneMapping.exposure}),o.vignette.enabled===!0&&(0,Ye.jsx)(Ee.Vignette,{eskil:o.vignette.eskil,offset:o.vignette.offset,darkness:o.vignette.darkness,blendFunction:ui.BlendFunction.NORMAL}),o.toneMapping.enabled===!0&&(0,Ye.jsx)(Ee.ToneMapping,{mode:Kp(o.toneMapping.mode),resolution:o.toneMapping.resolution,whitePoint:o.toneMapping.whitePoint,middleGrey:o.toneMapping.middleGrey,minLuminance:o.toneMapping.minLuminance,averageLuminance:o.toneMapping.averageLuminance,adaptationRate:o.toneMapping.adaptationRate}),o.sepia.enabled===!0&&(0,Ye.jsx)(Ee.Sepia,{intensity:o.sepia.intensity,blendFunction:ui.BlendFunction.NORMAL}),o.scanline.enabled===!0&&(0,Ye.jsx)(Ee.Scanline,{density:o.scanline.density,blendFunction:ui.BlendFunction.OVERLAY}),o.pixelation.enabled===!0&&(0,Ye.jsx)(Ee.Pixelation,{granularity:o.pixelation.granularity}),o.ramp.enabled===!0&&(0,Ye.jsx)(Ee.Ramp,{rampType:Jp(o.ramp.rampType),rampStart:o.ramp.rampStart,rampEnd:o.ramp.rampEnd,startColor:m,endColor:_,opacity:o.ramp.rampMask?1:o.ramp.opacity??.5,rampBias:o.ramp.rampBias,rampGain:o.ramp.rampGain,rampMask:o.ramp.rampMask,rampInvert:o.ramp.rampInvert})]})]})}var em=require("react"),ks=class extends em.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,a){this.props.onError?.(n)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};var gn=require("react/jsx-runtime"),kv=1.5;function Rv({captureRef:e}){let{gl:t,scene:n,camera:a,invalidate:r}=(0,Rs.useThree)();return(0,wr.useEffect)(()=>{if(e)return e.current={gl:t,scene:n,camera:a,invalidate:r},()=>{e.current=null}},[e,t,n,a,r]),null}function Ic({children:e,camera:t,backgroundColor:n,shadows:a=!0,sceneConfig:r,selectedObjectRef:i,hoveredObjectRef:s,highlightOnHover:l,renderMode:o="demand",maxDpr:c=2,xrStore:d,rendererCaptureRef:p,preserveDrawingBuffer:h=!1,reduceGpuLoad:f}){let b=f??Tc(),w=b?Math.min(c,kv):c,k=a&&!b,x=(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]),u=(0,wr.useMemo)(()=>{if(n)return n;let v=r?.background;if(v?.enabled){if(v.type==="color")return v.color;if(v.type==="image"&&v.imageUrl.trim()||v.type==="environment")return null}return"#1c1c1d"},[n,r]),m=(0,wr.useMemo)(()=>{let v=r?.postProcessing;return v?!!(v.glitch.enabled||v.noise.enabled||v.lensflare.enabled&&v.lensflare.animated):!1},[r?.postProcessing]),[_,M]=(0,wr.useState)(!1),C=r?.environment,A=r?.groundShadows,g=(0,wr.useMemo)(()=>{if(!C)return null;if(C.source==="custom"){let v=C.customEnvironmentUrl.trim();return Ms(v)?{files:v}:null}return{preset:C.preset}},[C]),S=(0,gn.jsxs)(gn.Fragment,{children:[(0,gn.jsx)(Rv,{captureRef:p}),(0,gn.jsx)(Lp,{cameraConfig:t}),(0,gn.jsx)(kp,{active:m}),(0,gn.jsx)(Rp,{color:u}),g?(0,gn.jsx)(ks,{onError:v=>console.warn("Failed to load environment map:",v),children:(0,gn.jsx)(wr.Suspense,{fallback:null,children:(0,gn.jsx)(Ns.Environment,{...g,environmentIntensity:C?.intensity??.25,backgroundIntensity:C?.intensity??.25,background:r?.background.enabled===!0&&r.background.type==="environment"})})}):null,(0,gn.jsx)(Np,{rotation:C?.rotation??0}),d&&(0,gn.jsx)(Ep,{onPresentingChange:M}),A?.enabled&&A.mode==="shadowCatcher"&&!_&&(0,gn.jsx)(Ns.ContactShadows,{position:[0,A.height,0],scale:A.size,opacity:A.intensity,blur:A.borderFade,far:15,resolution:1024,color:"#000000"}),e,(0,gn.jsx)(Qp,{sceneConfig:r,selectedObjectRef:i,hoveredObjectRef:s,highlightOnHover:l,disabled:b})]});return(0,gn.jsx)(Rs.Canvas,{frameloop:o,dpr:[1,w],shadows:k?"soft":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:x,camera:t??{fov:50},gl:{preserveDrawingBuffer:h,toneMapping:nm.NoToneMapping,toneMappingExposure:1},children:d?(0,gn.jsxs)(tm.XR,{store:d,children:[(0,gn.jsx)(Ap,{renderMode:o}),S]}):S})}var rm=require("@react-three/drei"),im=require("react"),am=require("react/jsx-runtime");function zc({controlsRef:e,onCameraChange:t}){return(0,im.useEffect)(()=>{if(!t||!e||typeof e!="object"||!("current"in e))return;let n=e.current;if(!n)return;let a=()=>{t(n.camera,n)};return n.addEventListener("update",a),()=>{n.removeEventListener("update",a)}},[e,t]),(0,am.jsx)(rm.CameraControls,{ref:e,makeDefault:!0,smoothTime:.3})}var _r=require("react"),xo=require("@react-three/fiber"),sm=require("three");function Sn(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)}var Uc=Symbol("react-immersive.model-node-id");function Nv(e,t){Object.defineProperty(e,Uc,{value:t,configurable:!0})}function Sa(e){let t=new Map;e.traverse(o=>{if(!o.name)return;let c=t.get(o.name);c?c.push(o):t.set(o.name,[o])});let n=Object.create(null),a=new WeakMap,r=new Map,i=new Set(Array.from(t,([o,c])=>c.length===1?o:null).filter(o=>o!==null)),s=new Set,l=(o,c)=>{Nv(o,c),n[c]=o,a.set(o,c),s.add(c)};for(let[o,c]of t)c.length===1&&l(c[0],o);for(let[o,c]of t){if(c.length<2)continue;let d=[];c.forEach((p,h)=>{let f=`${o} [${h+1}]`,b=f,w=2;for(;i.has(b)||s.has(b);)b=`${f}.${w++}`;l(p,b),d.push(b)}),r.set(o,d)}return{nodesById:n,idByNode:a,duplicateNames:r}}function vo(e){return e[Uc]??e.name??null}function Sr(e,t){let n=null,a=[];return e.traverse(r=>{r[Uc]===t&&(n=r),r.name===t&&a.push(r)}),n??(a.length===1?a[0]:null)}var or=require("react/jsx-runtime");function lm(e,t){if(!t)return e;let n=t*Math.PI/180,a=Math.cos(n),r=Math.sin(n);return[e[0]*a+e[2]*r,e[1],-e[0]*r+e[2]*a]}function Lv(e,t){let[n,a,r]=e.center,i=e.radius,s=Math.hypot(t[0],t[1],t[2]),l=s>1e-6?[t[0]/s,t[1]/s,t[2]/s]:[0,1,0],o=i*2;return{position:[n+l[0]*o,a+l[1]*o,r+l[2]*o],target:e.center,extent:i,near:Math.max(i/100,.001),far:o+i*2}}function Bv(e,t){let n=t[0]-e.center[0],a=t[1]-e.center[1],r=t[2]-e.center[2],i=Math.hypot(n,a,r);return{near:Math.max(i-e.radius,i*.01,.001),far:i+e.radius*2}}function Dv(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var Ov={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}]},Iv={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function om({light:e,shadows:t,shadowsEnabled:n,environmentRotation:a,modelBounds:r,objectBindings:i,nodeRefs:s}){let l=(0,_r.useRef)(null),o=(0,_r.useRef)(null),c=(0,_r.useRef)(null),d=(0,xo.useThree)(x=>x.camera),p=(0,xo.useThree)(x=>x.scene),h=(0,_r.useMemo)(()=>new sm.Vector3,[]),f=(0,_r.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:lm(e.position,a),[e.position,e.attachedToCamera,e.attachment,a]);(0,xo.useFrame)(()=>{let x=l.current??o.current??c.current;if(!x)return;if(e.attachedToCamera){x.position.copy(d.position);return}let u=e.attachment;if(!u)return;let m=i?Sn(i,u.objectId):null,M=(m?i?.[m]:void 0)?.modelObjectId??u.objectId,C=(m?s?.current[m]:void 0)??Sr(p,M);C&&(h.fromArray(u.offset),C.localToWorld(h),x.position.copy(h))});let b=n&&t.enabled&&e.castShadow,w=(0,_r.useMemo)(()=>e.type==="directional"&&b&&r&&!e.attachedToCamera?Lv(r,f):null,[e.type,e.attachedToCamera,b,r,f]),k=(0,_r.useMemo)(()=>e.type==="spot"&&b&&r&&!e.attachedToCamera?Bv(r,f):null,[e.type,e.attachedToCamera,b,r,f]);return(0,_r.useEffect)(()=>{let x=l.current??c.current;if(!x)return;let[u,m,_]=Dv(e,b,r);x.target.position.set(u,m,_),x.target.updateMatrixWorld()},[e,b,r]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,or.jsx)("directionalLight",{ref:l,color:e.color,intensity:e.intensity,position:w?.position??f,castShadow:b,"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":w?.near??.5,"shadow-camera-far":w?.far??40,"shadow-camera-left":-(w?.extent??8),"shadow-camera-right":w?.extent??8,"shadow-camera-top":w?.extent??8,"shadow-camera-bottom":-(w?.extent??8)}):e.type==="point"?(0,or.jsx)("pointLight",{ref:o,color:e.color,intensity:e.intensity,position:f,distance:e.distance,decay:e.decay,castShadow:b,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?(0,or.jsx)("spotLight",{ref:c,color:e.color,intensity:e.intensity,position:f,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:b,"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":k?.near??.5,"shadow-camera-far":k?.far??40}):e.type==="hemisphere"?(0,or.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function Fc({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:a=0,environmentConfig:r,modelBounds:i,objectBindings:s,nodeRefs:l}){let o=e??Ov,c=t??Iv,d=r?.shadowLight,p=lm([5,10,5],a);return(0,or.jsxs)(or.Fragment,{children:[(0,or.jsx)("ambientLight",{intensity:o.ambient.intensity,color:o.ambient.color}),o.lights.map(h=>(0,or.jsx)(om,{light:h,shadows:c,shadowsEnabled:n,environmentRotation:a,modelBounds:i,objectBindings:s,nodeRefs:l},h.id)),d?.enabled&&(0,or.jsx)(om,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:d.intensity,position:p,attachedToCamera:!1,castShadow:!0,shadowBias:d.bias,visible:!0},shadows:c,shadowsEnabled:n,environmentRotation:0,modelBounds:i,objectBindings:s,nodeRefs:l})]})}var me=require("react"),ka=require("@react-three/fiber");var So=require("@react-three/fiber"),Ca=require("three"),pi=require("three-stdlib"),Tm=require("three/examples/jsm/loaders/USDLoader.js");var _a=require("fflate");var cm;function dm(e){cm=e}function yo(e){cm?.(e)}var zv=[".glb",".gltf",".obj",".fbx",".usdz",".zip"],Uv=["model/gltf-binary","model/gltf+json","model/vnd.usdz+zip","application/vnd.usdz+zip","application/zip","application/x-zip-compressed"],wo=1024*1024,um=128*wo,pm=1024,mm=128*wo,hm=256*wo,fm=200,Fv=wo,Yr=new Map,Ls=".glb,.gltf,.obj,.fbx,.usdz,.zip,model/gltf-binary,model/gltf+json,model/vnd.usdz+zip,application/vnd.usdz+zip,application/zip";function jc(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 Yr.get(e)??{format:jc(e)}}function Vv(e){let t=e.name.toLowerCase();return zv.some(n=>t.endsWith(n))||Uv.includes(e.type)}async function Bs(e){if(!Vv(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 gm(e,"usdz");if(t.endsWith(".zip")||jv(e.type))return Hv(e);if(t.endsWith(".gltf")||e.type==="model/gltf+json")return bm(e);let n=jc(e.name);return n==="gltf"?bm(e):gm(e,n)}function gm(e,t){let n=URL.createObjectURL(e);return Yr.set(n,{format:t,entryPath:e.name}),{url:n,name:e.name,format:t,cleanup:()=>{yo(n),Yr.delete(n),URL.revokeObjectURL(n)}}}function jv(e){return e==="application/zip"||e==="application/x-zip-compressed"}async function bm(e){let t=await e.text(),n=ym(t,e.name);for(let r of wm(n))if(!Hc(r))throw new Error(`${e.name} references external assets. Upload a .zip containing the .gltf file and its dependencies.`);let a=URL.createObjectURL(e);return Yr.set(a,{format:"gltf",entryPath:e.name}),{url:a,name:e.name,format:"gltf",cleanup:()=>{yo(a),Yr.delete(a),URL.revokeObjectURL(a)}}}async function Hv(e){if(e.size>um)throw new Error(`Model zip is too large. The compressed archive must be ${Vc(um)} or smaller.`);let t=await Gv(new Uint8Array(await e.arrayBuffer())),n=new Map;for(let[s,l]of Object.entries(t)){let o=Gc(s);!o||Sm(o)||n.set(o,l)}let a=[...n.keys()].filter(s=>/\.(gltf|obj|fbx)$/i.test(s));if(a.length===0)throw new Error("Invalid model zip: no .gltf, .obj, or .fbx file found.");if(a.length>1)throw new Error("Invalid model zip: multiple model entry files found.");let r=a[0],i=jc(r);if(i==="gltf")return Xv(e,r,n);if(i==="obj"||i==="fbx")return Wv(e,r,i,n);throw new Error(`Unsupported model entry ${r}.`)}function Gv(e){return new Promise((t,n)=>{let a=0,r=0,i=null,s=o=>(i??(i=new Error(`Invalid model zip: ${o}`)),!1);(0,_a.unzip)(e,{filter:o=>{if(i)return!1;if(a+=1,a>pm)return s(`archive contains more than ${pm.toLocaleString()} entries.`);if(o.originalSize>mm)return s(`${o.name} expands beyond the ${Vc(mm)} per-file limit.`);if(r+=o.originalSize,r>hm)return s(`expanded contents exceed ${Vc(hm)}.`);if(o.originalSize>=Fv&&(o.size===0||o.originalSize/o.size>fm))return s(`${o.name} exceeds the ${fm}:1 compression-ratio limit.`);let c=Gc(o.name);return!!c&&!Sm(c)}},(o,c)=>{i?n(i):o?n(new Error(`Invalid model zip: ${o.message}`)):t(c)})})}function Vc(e){return`${e/wo} MiB`}function Wv(e,t,n,a){let r=[],i={};for(let[l,o]of a){let c=URL.createObjectURL(new Blob([o],{type:_m(l)}));r.push(c),i[l]=c}let s=i[t];if(!s)throw r.forEach(l=>URL.revokeObjectURL(l)),new Error(`Invalid model zip: could not read ${t}.`);return Yr.set(s,{format:n,entryPath:t,resourceUrls:i}),{url:s,name:e.name,format:n,cleanup:()=>{yo(s),Yr.delete(s),r.forEach(l=>URL.revokeObjectURL(l))}}}function Xv(e,t,n){let a=n.get(t);if(!a)throw new Error("Invalid GLTF zip: no .gltf found.");let r=ym((0,_a.strFromU8)(a),t);$v(r,t);let i=qv(t),s=[];try{vm(r.buffers,i,n,s),vm(r.images,i,n,s);let l=new Blob([(0,_a.strToU8)(JSON.stringify(r))],{type:"model/gltf+json"}),o=URL.createObjectURL(l);return s.push(o),Yr.set(o,{format:"gltf",entryPath:t}),{url:o,name:e.name,format:"gltf",cleanup:()=>{yo(o),Yr.delete(o),s.forEach(c=>URL.revokeObjectURL(c))}}}catch(l){throw s.forEach(o=>URL.revokeObjectURL(o)),l}}function vm(e,t,n,a){for(let r of e??[]){if(typeof r.uri!="string"||Hc(r.uri))continue;let i=Yv(t,r.uri),s=n.get(i);if(!s)throw new Error(`Invalid GLTF zip: missing referenced asset ${r.uri}.`);let l=URL.createObjectURL(new Blob([s],{type:_m(i)}));a.push(l),r.uri=l}}function ym(e,t){try{return JSON.parse(e)}catch{throw new Error(`${t} is not a valid .gltf JSON file.`)}}function wm(e){return[...e.buffers??[],...e.images??[]].map(t=>t.uri).filter(t=>typeof t=="string"&&t.length>0)}function $v(e,t){for(let n of wm(e)){if(Hc(n))continue;let a=/^[a-z][a-z0-9+.-]*:/i.test(n),r=n.startsWith("/")||n.startsWith("\\");if(a||r)throw new Error(`${t} references external assets. Include every dependency inside the uploaded .zip.`)}}function Hc(e){return e.startsWith("data:")}function Gc(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(a=>a&&a!==".")){if(n===".."){t.pop();continue}t.push(n)}return t.join("/")}function Sm(e){let t=e.split("/");return e.endsWith("/")||t.includes("__MACOSX")||t.some(n=>n===".DS_Store"||n.startsWith("._"))}function qv(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t)}function Yv(e,t){let n=t.split(/[?#]/)[0],a=Kv(n);return Gc(e?`${e}/${a}`:a)}function Kv(e){try{return decodeURI(e)}catch{return e}}function _m(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 Zv=require("@react-three/drei"),Jv=require("@react-three/fiber"),Qv=require("react"),Mm=require("three"),Ma=require("three-stdlib");function e0(e){return{name:"RI_unlit_emissive_texture",async afterRoot(t){let n=e.json.materials??[],a=new Map;if(n.forEach(i=>{let s=!!i?.extensions?.KHR_materials_unlit,l=!!i?.pbrMetallicRoughness?.baseColorTexture;s&&!l&&i?.emissiveTexture&&i.name&&a.set(i.name,i.emissiveTexture.index)}),a.size===0||!t.scene)return;let r=new Map;await Promise.all([...a].map(async([i,s])=>{let l=await e.getDependency("texture",s);l&&(l.colorSpace=Mm.SRGBColorSpace,r.set(i,l))})),t.scene.traverse(i=>{let s=Array.isArray(i.material)?i.material:i.material?[i.material]:[];for(let l of s){let o=l.name?r.get(l.name):void 0;o&&!l.map&&(l.map=o,l.needsUpdate=!0)}})}}}var t0="https://assets.react-immersive.liveroom.dev/three-r184/draco/",n0="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function Cm(e,t={},n){let{dracoDecoderPath:a=t0,ktx2TranscoderPath:r=n0,meshopt:i=!0}=t;if(a){let s=new Ma.DRACOLoader;s.setDecoderPath(a),e.setDRACOLoader(s)}if(i&&e.setMeshoptDecoder(Ma.MeshoptDecoder),r&&n){let s=new Ma.KTX2Loader().setTranscoderPath(r).detectSupport(n);e.setKTX2Loader(s)}e.register((s=>e0(s)))}var Ds=class extends Ca.Loader{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(n){return this.options=n,this}load(n,a,r,i){this.loadAsset(n,r).then(a).catch(i)}async loadAsset(n,a){let r=i0(this.options.source),{format:i}=this.options.source;if(i==="obj")return r0(n,r,this.options.source,a);if(i==="fbx"){let o=Wc(this,new pi.FBXLoader(r)),c=s0(n,this.options.source);c&&o.setResourcePath(c);let d=await o.loadAsync(n,a);return Xc(d,"FBXMesh",!1),{scene:d,animations:d.animations??[]}}if(i==="usdz"){let c=await Wc(this,new Tm.USDLoader(r)).loadAsync(n,a);return Xc(c,"USDZMesh",!1),{scene:c,animations:c.animations??[]}}let s=Wc(this,new pi.GLTFLoader(r));Cm(s,this.options.decoderConfig,this.options.renderer);let l=await s.loadAsync(n,a);return{scene:l.scene,animations:l.animations??[]}}};dm(e=>{So.useLoader.clear(Ds,e)});function zs(e,t={},n){let a=(0,So.useThree)(s=>s.gl),r=xm(e),i=n?{...r,format:n}:r;return(0,So.useLoader)(Ds,e,s=>{s.configure({source:i,decoderConfig:t,renderer:a})})}async function r0(e,t,n,a){let r=await Pm(e,t,a),i=new pi.OBJLoader(t),s=a0(r);if(s){let o=o0(s,e,n);if(o)try{let c=await Pm(o.url,t),p=new pi.MTLLoader(t).parse(c,o.basePath);p.preload(),i.setMaterials(p)}catch(c){console.warn(`[react-immersive] Could not load OBJ material ${s}; rendering geometry with fallback materials.`,c)}}let l=i.parse(r);return Xc(l,"OBJMesh",!0),{scene:l,animations:[]}}function Xc(e,t,n){let a=new Set,r=0;e.traverse(i=>{if(!("isMesh"in i&&i.isMesh===!0)){i.name&&a.add(i.name);return}let l=i.name||`${t}_${++r}`;if(!n&&i.name){a.add(i.name);return}let o=l,c=2;for(;a.has(o);)o=`${l}_${c++}`;i.name=o,a.add(o)})}function Pm(e,t,n){let a=new Ca.FileLoader(t);return a.setResponseType("text"),a.loadAsync(e,n)}function Wc(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function i0(e){let t=new Ca.LoadingManager,n=e.resourceUrls;return n&&t.setURLModifier(a=>{if(/^(?:blob:|data:)/i.test(a))return a;let r=Is(Em(a).split(/[?#]/)[0]),i=n[r];if(i)return i;let s=Os(e.entryPath??""),l=Is(s?`${s}/${r}`:r);return n[l]??a}),t}function a0(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function o0(e,t,n){if(n.resourceUrls&&n.entryPath){let a=Is(`${Os(n.entryPath)}/${Em(e)}`),r=n.resourceUrls[a];if(!r)return null;let i=Os(a);return{url:r,basePath:i?`${i}/`:""}}try{let a=new URL(e,t).href;return{url:a,basePath:Am(a)}}catch{return null}}function s0(e,t){if(t.resourceUrls&&t.entryPath){let n=Os(t.entryPath);return n?`${n}/`:""}return Am(e)}function Am(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function Os(e){let t=Is(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function Is(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(a=>a&&a!=="."))n===".."?t.pop():t.push(n);return t.join("/")}function Em(e){try{return decodeURI(e)}catch{return e}}var Be=require("three"),Hm=require("three-stdlib");function km(e){let t=new Map;return e.map((n,a)=>{let i=n.name.trim()||`Animation ${a+1}`,s=t.get(i)??0;return t.set(i,s+1),{clip:n,sourceName:s===0?i:`${i} (${s+1})`,duration:n.duration}})}var Cn=require("three");function Rm(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function Nm(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function mi(e){return!!(e&&"isMesh"in e&&e.isMesh)}var Lm=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],l0=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function Us(e){return l0.has(e)?Cn.SRGBColorSpace:Cn.NoColorSpace}function qt(e,t){return e?.[t]?.path}function Bm(e){return e==="back"?Cn.BackSide:e==="double"?Cn.DoubleSide:Cn.FrontSide}function Dm(e){return e==="additive"?Cn.AdditiveBlending:Cn.NormalBlending}function Kr(e,t=1,n=t){if(e&&typeof e=="object"){let a=e;if(typeof a.x=="number"&&Number.isFinite(a.x)&&typeof a.y=="number"&&Number.isFinite(a.y))return new Cn.Vector2(a.x,a.y)}return new Cn.Vector2(t,n)}function $c(e){return Number.isFinite(e)&&e>0?e:1}function Fs(e,t){return e?.animations.clips.find(n=>n.sourceName===t)}function Om(e){return e?.loopMode??"repeat"}var sr=require("three");function Vs(e){if(Rm(e))return e;if(!e||typeof e!="object")return null;let t=e,n=new sr.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 sr.Texture?(n.emissiveMap=t.map,n.emissive.set(16777215)):t.color instanceof sr.Color&&n.emissive.copy(t.color)):(t.color instanceof sr.Color&&n.color.copy(t.color),t.map instanceof sr.Texture&&(n.map=t.map),t.emissive instanceof sr.Color&&n.emissive.copy(t.emissive),t.emissiveMap instanceof sr.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 i of r)t[i]!==void 0&&(n[i]=t[i]);return n.needsUpdate=!0,n}function Im(e){if(Nm(e))return e.clone();let t=new sr.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(Kr(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 zm(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=Kr(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=Kr(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 Nn=require("three");function Um(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 Nn.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??Nn.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??Nn.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(Kr(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(Kr(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new Nn.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 Nn.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 Nn.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let a=qt(t,"texture"),r=qt(t,"metalnessMap"),i=qt(t,"roughnessMap"),s=qt(t,"emissiveMap"),l=qt(t,"alphaMap"),o=qt(t,"normalMap"),c=qt(t,"bumpMap"),d=qt(t,"aoMap"),p=qt(t,"displacementMap"),h=qt(t,"clearcoatMap"),f=qt(t,"clearcoatRoughnessMap"),b=qt(t,"clearcoatNormalMap"),w=qt(t,"anisotropyMap"),k=qt(t,"transmissionMap"),x=qt(t,"thicknessMap"),u=qt(t,"sheenColorMap"),m=qt(t,"sheenRoughnessMap"),_=qt(t,"specularIntensityMap"),M=qt(t,"specularColorMap");if(a?(e.map=rn(a,Nn.SRGBColorSpace),e.color.set(n??"#ffffff")):n&&(e.map=null,e.color.set(n)),r&&(e.metalnessMap=rn(r)),t?.metalness!==void 0&&(e.metalness=t.metalness),i&&(e.roughnessMap=rn(i)),t?.roughness!==void 0&&(e.roughness=t.roughness),t?.emissive?e.emissive.set(t.emissive):s&&e.emissive.set("#ffffff"),t?.emissiveIntensity!==void 0&&(e.emissiveIntensity=t.emissiveIntensity),s&&(e.emissiveMap=rn(s,Nn.SRGBColorSpace)),t?.opacity!==void 0&&(e.opacity=t.opacity),l&&(e.alphaMap=rn(l)),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=Dm(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=Bm(t.side)),o&&(e.normalMap=rn(o)),o||t?.normalScale!==void 0){let C=t?.normalScale??Math.abs(Kr(e.userData.baseNormalScale).x);e.normalScale.set(C,t?.flipNormalY?-C:C)}if(c&&(e.bumpMap=rn(c)),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),d&&(e.aoMap=rn(d)),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),p&&(e.displacementMap=rn(p)),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),h&&(e.clearcoatMap=rn(h)),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),f&&(e.clearcoatRoughnessMap=rn(f)),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),b&&(e.clearcoatNormalMap=rn(b)),b||t?.clearcoatNormalScale!==void 0){let C=t?.clearcoatNormalScale??Math.abs(Kr(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(C,t?.flipClearcoatNormalY?-C:C)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),u&&(e.sheenColorMap=rn(u,Nn.SRGBColorSpace)),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),m&&(e.sheenRoughnessMap=rn(m)),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),w&&(e.anisotropyMap=rn(w)),t?.transmission!==void 0&&(e.transmission=t.transmission),k&&(e.transmissionMap=rn(k)),t?.thickness!==void 0&&(e.thickness=t.thickness),x&&(e.thicknessMap=rn(x)),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),_&&(e.specularIntensityMap=rn(_)),t?.specularColor&&e.specularColor.set(t.specularColor),M&&(e.specularColorMap=rn(M,Nn.SRGBColorSpace)),e.transparent=e.opacity<1||e.transmission>0||e.blending!==Nn.NormalBlending||!!((l||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function _o(e){e.updateMatrixWorld(!0),e.traverse(t=>{let n=t;n.isSkinnedMesh&&(n.skeleton?.update(),n.computeBoundingBox?.(),n.computeBoundingSphere?.())})}var Fm=require("three");function c0(e){return e.isSkinnedMesh===!0}function Pa(e){let t=[];return e.traverse(n=>{c0(n)&&t.push(n)}),t}var Mo="reactImmersiveSkinFreeze";function Vm(e){return!!e.userData[Mo]}function js(e,t){let n=e.userData,a=new Fm.Matrix4().copy(t).invert(),r=n[Mo];if(r){r.frozenInverse.copy(a),e.bindMatrixInverse.copy(a);return}let i={frozenInverse:a,previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(a),e.onBeforeRender=function(s,l,o,c,d,p){i.previousOnBeforeRender.call(this,s,l,o,c,d,p),e.bindMatrixInverse.copy(i.frozenInverse)},n[Mo]=i}function Ta(e){let t=e.userData,n=t[Mo];n&&(e.onBeforeRender=n.previousOnBeforeRender,delete t[Mo],e.updateMatrixWorld(!0))}var Ui=require("react"),jm=require("@react-three/fiber");function Hs(){let e=(0,jm.useThree)(r=>r.gl.domElement),t=(0,Ui.useRef)(void 0),n=(0,Ui.useCallback)(r=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=r},[e]),a=(0,Ui.useCallback)(()=>{let r=t.current;r!==void 0&&(e.style.cursor=r,t.current=void 0)},[e]);return(0,Ui.useEffect)(()=>()=>{a()},[a]),{setCanvasCursor:n,restoreCanvasCursor:a}}var Yc=require("react/jsx-runtime");function Gs(e,t,n){let a=n.get(e);a&&(t?.position?e.position.fromArray(t.position):e.position.copy(a.position),t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],a.rotation.order):e.rotation.copy(a.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(a.scale),e.updateMatrix())}function d0(e){return e.material}function Ws(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function Aa(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function qc(e,t){return Array.isArray(e)?e[t]:e}function cn(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 Ea(e){let t=e,n=Number(t.clearcoat)>0,a=Number(t.sheen)>0,r=Number(t.anisotropy)>0,i=Number(t.transmission)>0,s=t.transparent===!1&&t.blending===Be.NormalBlending&&t.alphaToCoverage!==!0;return[cn(t.map),cn(t.aoMap),cn(t.lightMap),cn(t.bumpMap),cn(t.normalMap,!0),t.normalMap?t.normalMapType:"",cn(t.displacementMap),cn(t.emissiveMap),cn(t.metalnessMap),cn(t.roughnessMap),r,cn(r?t.anisotropyMap:null),n,cn(n?t.clearcoatMap:null),cn(n?t.clearcoatNormalMap:null,!0),cn(n?t.clearcoatRoughnessMap:null),a,cn(a?t.sheenColorMap:null),cn(a?t.sheenRoughnessMap:null),cn(t.specularColorMap),cn(t.specularIntensityMap),i,cn(i?t.transmissionMap:null),cn(i?t.thicknessMap:null),cn(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,t.side,s].join("|")}function Kc({url:e,objectBindings:t,selectedItem:n,itemMaterials:a,onItemClick:r,onItemHover:i,onModelLoaded:s,onAnimationsReady:l,nodeRefsOut:o,onNodeRefsChange:c,materialRefsOut:d,panelHoveredItem:p,sceneConfig:h,zoomOnSelected:f=!0,highlightOnHover:b=!0,decoderConfig:w,modelFormat:k,explodeFactor:x=0,suspendBindingTransforms:u=!1}){let m=zs(e,w,k),_=(0,ka.useThree)(L=>L.invalidate),[M,C]=(0,me.useState)(null),A=(0,me.useRef)(null),{setCanvasCursor:g,restoreCanvasCursor:S}=Hs();(0,me.useEffect)(()=>{b||(C(null),i?.(null),S())},[b,i,S]);let v=(0,me.useMemo)(()=>Hm.SkeletonUtils.clone(m.scene),[m.scene]),P=(0,me.useMemo)(()=>Sa(v),[v]),U=P.nodesById;(0,me.useEffect)(()=>{P.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(P.duplicateNames))},[P]);let E=(0,me.useMemo)(()=>{let L=new WeakMap;return v.traverse(O=>{L.set(O,{position:O.position.clone(),rotation:O.rotation.clone(),scale:O.scale.clone()})}),L},[v]);(0,me.useEffect)(()=>{let L=!1,O=null,q=null,J=window,Q=Object.entries(U).filter(([,lt])=>mi(lt)),he=new Be.Box3,le=[],ht=0;v.traverse(lt=>{mi(lt)&&(lt.castShadow=!1,lt.receiveShadow=!0)});let ge=()=>{if(L)return;let lt=new Set,ve=he.getSize(new Be.Vector3),Pt=new Be.Vector3;for(let{name:ln,box:Mt}of le)Mt.getSize(Pt),Pt.x>ve.x*.7&&Pt.z>ve.z*.7&&Pt.y>ve.y*.4&&lt.add(ln);v.traverse(ln=>{if(!mi(ln))return;let Mt=vo(ln);ln.castShadow=!Mt||!lt.has(Mt),ln.receiveShadow=!0}),_()},Ot=()=>{L||(J.requestIdleCallback?O=J.requestIdleCallback(qe,{timeout:100}):q=window.setTimeout(()=>qe(),0))},qe=lt=>{if(O=null,q=null,L)return;let ve=performance.now(),Pt=0;for(;ht<Q.length&&!(Pt>0&&!(lt?lt.didTimeout?Pt<16:lt.timeRemaining()>1:performance.now()-ve<8));){let[ln,Mt]=Q[ht];ht+=1,Pt+=1;let Vt=new Be.Box3().setFromObject(Mt);Vt.isEmpty()||(le.push({name:ln,box:Vt}),he.union(Vt))}ht<Q.length?Ot():ge()};return Ot(),()=>{L=!0,O!==null&&J.cancelIdleCallback?.(O),q!==null&&window.clearTimeout(q)}},[_,U,v]),(0,me.useEffect)(()=>{_o(v)},[v]),(0,me.useEffect)(()=>{let L=new AbortController;return vs(v,L.signal),()=>{L.abort(),xs(v)}},[v]);let V=(0,me.useMemo)(()=>{let L={};for(let[O,q]of Object.entries(t))L[q.modelObjectId??O]=O;return L},[t]),T=(0,me.useMemo)(()=>Object.entries(t).map(([L,O])=>`${L}${O.modelObjectId??L}`).sort().join(""),[t]),G=(0,me.useMemo)(()=>Object.entries(t).map(([L,O])=>JSON.stringify([L,O.modelObjectId??L,O.transform??null])).sort().join(""),[t]),W=(0,me.useRef)(new Map);(0,me.useEffect)(()=>{let L=new Map,O=new Map;for(let[Q,he]of Object.entries(t)){if(!he.transform)continue;let le=U[he.modelObjectId??Q];le&&(L.set(le,he.transform),O.set(le,Pa(le)))}let q=new Set([...W.current.keys(),...L.keys()]);for(let Q of q){Gs(Q,void 0,E);for(let he of Pa(Q))Ta(he)}v.updateMatrixWorld(!0);let J=new Map;for(let Q of O.values())for(let he of Q)J.has(he)||J.set(he,he.matrixWorld.clone());for(let[Q,he]of L)Gs(Q,he,E);W.current=L,v.updateMatrixWorld(!0);for(let[Q,he]of J)js(Q,he);_()},[v,U,E,G,_]),(0,me.useEffect)(()=>()=>{for(let L of Pa(v))Ta(L)},[v]);let R=(0,me.useMemo)(()=>{let L={};for(let[O,q]of Object.entries(t)){let J=q.modelObjectId??O,Q=U[J];if(!mi(Q))continue;let he=d0(Q);he&&(L[O]=Ws(he,le=>{let ht=Vs(le),ge=Im(ht??new Be.MeshStandardMaterial);return zm(ge),ge}))}return L},[U,T]);(0,me.useEffect)(()=>{d&&(d.current=R)},[R,d]),(0,me.useEffect)(()=>()=>{for(let L of Object.values(R))Aa(L,O=>O.dispose())},[R]);let N=h?.model.shading??"lit",Z=h?.model.renderer??"pbr",$=h?.wireframe.enabled??!1,de=h?.wireframe.color??"#93c5fd",Ne=h?.wireframe.opacity??1,be=(0,me.useMemo)(()=>{let L={};if(N!=="unlit")return L;for(let[O,q]of Object.entries(R))L[O]=Ws(q,J=>{let Q=new Be.MeshBasicMaterial;return Q.color.copy(J.color),Q.map=J.map,Q.alphaMap=J.alphaMap,Q.alphaTest=J.alphaTest,Q.transparent=J.transparent,Q.opacity=J.opacity,Q.side=J.side,Q});return L},[R,N]),Ce=(0,me.useMemo)(()=>{let L={};if(N!=="normals")return L;for(let[O,q]of Object.entries(R))L[O]=Ws(q,()=>new Be.MeshNormalMaterial);return L},[R,N]),ke=(0,me.useMemo)(()=>{let L={};if(N!=="lit"||Z!=="matcap")return L;let O=Fp();for(let[q,J]of Object.entries(R))L[q]=Ws(J,Q=>{let he=new Be.MeshMatcapMaterial;return he.matcap=O,he.color.copy(Q.color),he.alphaMap=Q.alphaMap,he.alphaTest=Q.alphaTest,he.side=Q.side,he});return L},[R,N,Z]);(0,me.useEffect)(()=>()=>{for(let L of Object.values(be))Aa(L,O=>O.dispose());for(let L of Object.values(Ce))Aa(L,O=>O.dispose());for(let L of Object.values(ke))Aa(L,O=>O.dispose())},[be,Ce,ke]);let ze=L=>N==="normals"?Ce[L]:N==="unlit"?be[L]:Z==="matcap"?ke[L]:R[L],St=(0,me.useRef)(s);St.current=s,(0,me.useEffect)(()=>{St.current?.(v)},[v]);let Ft=(0,me.useMemo)(()=>{let L={};for(let[O,q]of Object.entries(t)){let J=q.modelObjectId??O,Q=U[J];Q&&(L[O]=Q)}return L},[U,T]);(0,me.useEffect)(()=>(o.current=Ft,c?.(),()=>{o.current===Ft&&(o.current={})}),[Ft,o,c]);let it=(0,me.useRef)({});(0,me.useEffect)(()=>()=>{for(let L of Object.values(it.current))for(let[O,q]of Object.entries(L))q&&Ps(q,Us(O));it.current={}},[]);let Ue=(0,me.useMemo)(()=>{let L=new Map;for(let[O,q]of Object.entries(t)){let J=p===q||p?.id===q.id||p?.modelObjectId===q.modelObjectId,Q=b&&(M===O||J),he=Q||n===O;(Q||he)&&L.set(O,{emissive:Q,matcap:he})}return L},[t,b,M,n,p]),He=(0,me.useRef)(Ue);He.current=Ue,(0,me.useEffect)(()=>{let L=new Set;for(let[O,q]of Object.entries(t)){L.add(O);let J=q.modelObjectId??O,Q=U[J];if(!mi(Q))continue;Q.visible=q.visible!==!1;let he=R[O];if(!he)continue;if(Z!=="uv-checker"){let ve=ze(O);ve&&(Q.material=ve)}if(q.visible===!1)continue;let le=be[O],ht=ke[O],ge=a[O]??a[q.modelObjectId??O],Ot=q.style?.material,qe=it.current[O]??{};for(let ve of Lm){let Pt=qt(Ot,ve),ln=qe[ve];if(ln===Pt)continue;let Mt=Us(ve);ln&&Ps(ln,Mt),Pt?(Up(Pt,Mt,_),qe[ve]=Pt):delete qe[ve]}Object.keys(qe).length>0?it.current[O]=qe:delete it.current[O];let lt=ge?.hex??Ot?.baseColor;Aa(he,(ve,Pt)=>{let ln=Ea(ve);Um(ve,Ot,lt);let Mt=ve.userData.reactImmersiveConfiguredEmissive;Mt?.isColor?Mt.copy(ve.emissive):ve.userData.reactImmersiveConfiguredEmissive=ve.emissive.clone();let Vt=He.current.get(O);Vt?.emissive&&ve.emissive.add(Nc),ln!==Ea(ve)&&(ve.needsUpdate=!0);let Tt=qc(le,Pt);if(Tt){let ii=Ea(Tt);Tt.color.copy(ve.color),Tt.map=ve.map,Tt.alphaMap=ve.alphaMap,Tt.alphaTest=ve.alphaTest,Tt.transparent=ve.transparent,Tt.opacity=ve.opacity,Tt.side=ve.side,ii!==Ea(Tt)&&(Tt.needsUpdate=!0)}let Oe=qc(ht,Pt);if(Oe){let ii=Ea(Oe);Vt?.matcap?Oe.color.set(di.color):Oe.color.copy(ve.color),Oe.map=ve.map,Oe.alphaMap=ve.alphaMap,Oe.alphaTest=ve.alphaTest,Oe.transparent=ve.transparent,Oe.opacity=ve.opacity,Oe.side=ve.side,ii!==Ea(Oe)&&(Oe.needsUpdate=!0)}})}for(let O of Object.keys(it.current))if(!L.has(O)){for(let[q,J]of Object.entries(it.current[O]))J&&Ps(J,Us(q));delete it.current[O]}_()},[t,U,R,be,Ce,ke,a,N,Z,_]);let Gt=(0,me.useRef)(new Map);(0,me.useEffect)(()=>{let L=Gt.current,O=new Set([...L.keys(),...Ue.keys()]),q=!1;for(let J of O){let Q=L.get(J),he=Ue.get(J),le=!!Q?.emissive!=!!he?.emissive,ht=!!Q?.matcap!=!!he?.matcap;if(!le&&!ht)continue;q=!0;let ge=R[J],Ot=ke[J];ge&&Aa(ge,(qe,lt)=>{let ve=qe.userData.reactImmersiveConfiguredEmissive;le&&ve?.isColor&&(qe.emissive.copy(ve),he?.emissive&&qe.emissive.add(Nc));let Pt=qc(Ot,lt);ht&&Pt&&(he?.matcap?Pt.color.set(di.color):Pt.color.copy(qe.color))})}Gt.current=Ue,q&&_()},[Ue,R,ke,_]),(0,me.useEffect)(()=>{if(Z!=="uv-checker")return;let L=Vp(),O=[];return v.traverse(q=>{if(!mi(q))return;let J=q.material,Q=Array.isArray(J)?J:[J],he=!!q.geometry.getAttribute("uv"),le=Q.map((ge,Ot)=>{let qe=new Be.MeshBasicMaterial({color:he?"#ffffff":"#ff00ff",map:he?L:null,side:ge.side});return qe.name=`${q.name||"mesh"}-uv-checker-${Ot}`,qe.toneMapped=!1,qe}),ht=Array.isArray(J)?le:le[0];q.material=ht,O.push({node:q,original:J,diagnostic:ht})}),_(),()=>{for(let{node:q,original:J,diagnostic:Q}of O){q.material=J;let he=Array.isArray(Q)?Q:[Q];for(let le of he)le.dispose()}_()}},[v,Z,_]),(0,me.useEffect)(()=>{if(!$)return;let L=[];for(let[O,q]of Object.entries(t)){let J=q.modelObjectId??O,Q=U[J];if(!mi(Q))continue;let he=new Be.MeshBasicMaterial({color:de,wireframe:!0,transparent:!0,opacity:Ne,depthTest:!1,depthWrite:!1,side:Be.DoubleSide,toneMapped:!1}),le=Q.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=he,le.castShadow=!1,le.receiveShadow=!1,le.frustumCulled=!1,le.renderOrder=1,le.userData={isWireframeOverlay:!0},le.raycast=()=>{},Q.morphTargetInfluences&&(le.morphTargetInfluences=Q.morphTargetInfluences),Q.add(le),L.push({node:Q,overlay:le})}return _(),()=>{for(let{node:O,overlay:q}of L)O.remove(q),q.material.dispose()}},[$,de,Ne,U,t,_]);let at=(0,me.useMemo)(()=>km(m.animations),[m.animations]),wn=(0,me.useRef)(l);wn.current=l;let ot=(0,me.useRef)(h);ot.current=h;let pn=(0,me.useRef)(null),Wt=(0,me.useRef)({}),We=(0,me.useRef)(null),vt=(0,me.useRef)(null),ie=(0,me.useRef)(1),ce=(0,me.useRef)(new Set),Xt=(0,me.useRef)(0),_t=()=>({currentClip:vt.current,isPlaying:We.current?.paused===!1,speed:ie.current,time:We.current?.time??0,duration:We.current?.getClip().duration??0}),nt=()=>{let L=_t();ce.current.forEach(O=>O(L))},st=(L,O)=>{let q=Om(O);L.setLoop(q==="once"?Be.LoopOnce:Be.LoopRepeat,q==="once"?1:1/0),L.clampWhenFinished=q==="once";let J=$c(O?.speed??ie.current);ie.current=J,L.setEffectiveTimeScale(J)},$t=()=>{We.current?.stop(),We.current=null,vt.current=null,nt(),_()},sn=()=>{We.current&&(We.current.paused=!0,nt(),_())},Kt=L=>{let O=$c(L);ie.current=O,We.current?.setEffectiveTimeScale(O),nt()},On=L=>{let O=We.current;if(!O)return;let q=O.getClip().duration;O.time=Math.min(Math.max(L,0),q),pn.current?.update(0),nt(),_()},Tn=L=>{let O=Wt.current[L];if(!O)return;let q=Fs(ot.current,L);if(!q?.hidden){if(We.current===O&&O.paused){st(O,q),O.paused=!1,vt.current=L,nt(),_();return}We.current&&We.current!==O&&We.current.stop(),st(O,q),O.paused=!1,O.enabled=!0,O.reset().play(),We.current=O,vt.current=L,nt(),_()}};(0,me.useEffect)(()=>{let L=new Be.AnimationMixer(v);pn.current=L;let O={};for(let{clip:le,sourceName:ht}of at)O[ht]=L.clipAction(le);Wt.current=O;let q=le=>{le.action&&le.action===We.current&&$t()};L.addEventListener("finished",q);let J=()=>{};wn.current?.({clips:at.map(({sourceName:le})=>le),clipDetails:at.map(({sourceName:le,duration:ht})=>({sourceName:le,duration:ht})),play:at.length?Tn:J,pause:at.length?sn:J,stop:at.length?$t:J,setSpeed:at.length?Kt:J,seek:at.length?On:J,getState:_t,subscribe:le=>(ce.current.add(le),le(_t()),()=>{ce.current.delete(le)})}),ie.current=1,nt();let Q=ot.current?.animations.autoplayClip,he=Q?Fs(ot.current,Q):void 0;return Q&&!he?.hidden&&Tn(Q),()=>{L.removeEventListener("finished",q),L.stopAllAction(),L.uncacheRoot(v),pn.current=null,Wt.current={},We.current=null,vt.current=null,ie.current=1,nt()}},[v,at]),(0,me.useEffect)(()=>{let L=vt.current,O=We.current;if(!L||!O||!h?.animations)return;let q=Fs(h,L);if(q?.hidden){$t();return}q&&(st(O,q),nt())},[h?.animations]),(0,ka.useFrame)((L,O)=>{if(pn.current&&We.current?.paused===!1){if(pn.current.update(O),!u)for(let[q,J]of W.current)Gs(q,J,E);_(),Xt.current+=O,Xt.current>=.066&&(Xt.current=0,nt(),_o(v))}});let _e=(0,me.useMemo)(()=>(h?.model.rotation??[0,0,0]).map(L=>L*Math.PI/180),[h?.model.rotation]);(0,ka.useFrame)((L,O)=>{if(!A.current)return;let q=A.current.rotation;q.x=Be.MathUtils.lerp(q.x,_e[0],1-Math.exp(-5*O)),q.y=Be.MathUtils.lerp(q.y,_e[1],1-Math.exp(-5*O)),q.z=Be.MathUtils.lerp(q.z,_e[2],1-Math.exp(-5*O)),Math.abs(q.x-_e[0])<1e-4&&Math.abs(q.y-_e[1])<1e-4&&Math.abs(q.z-_e[2])<1e-4||_()});let mt=(0,me.useRef)([]),Qe=(0,me.useRef)(0),Ge=(0,me.useRef)(0),Bt=(0,me.useMemo)(()=>new Be.Vector3,[]);(0,me.useEffect)(()=>{let L=new Map;for(let[ge,Ot]of Object.entries(t)){let qe=U[Ot.modelObjectId??ge];qe&&L.set(qe,Ot)}for(let ge of mt.current)Gs(ge.node,L.get(ge.node)?.transform,E);Ge.current=0,v.updateWorldMatrix(!0,!0);let O=new Be.Box3().setFromObject(v),q=O.getCenter(new Be.Vector3),J=O.getSize(new Be.Vector3).length()*.5;Qe.current=Number.isFinite(J)?J:0;let Q=[...L.keys()],he=new Set(Q),le=[],ht=new Be.Vector3;for(let ge of Q){if(!ge.parent)continue;let Ot=ge.parent,qe=!1;for(;Ot;){if(he.has(Ot)){qe=!0;break}Ot=Ot.parent}if(qe)continue;let lt=new Be.Box3().setFromObject(ge);if(lt.isEmpty())continue;lt.getCenter(ht);let ve=ht.clone().sub(q);ve.lengthSq()<1e-8||(ve.normalize(),le.push({node:ge,restLocalPos:ge.position.clone(),restWorldPos:ge.getWorldPosition(new Be.Vector3),worldDir:ve,parentInverse:new Be.Matrix4().copy(ge.parent.matrixWorld).invert()}))}mt.current=le,_()},[v,U,T,G,E,_]),(0,me.useEffect)(()=>{_()},[x,_]),(0,ka.useFrame)((L,O)=>{let q=mt.current;if(q.length===0)return;let J=Math.min(Math.max(x,0),1),Q=Ge.current;if(Math.abs(Q-J)<1e-4){if(Q===J)return;Ge.current=J}else Ge.current=Be.MathUtils.lerp(Q,J,1-Math.exp(-6*O)),_();let he=Ge.current*Qe.current;for(let le of q)Bt.copy(le.worldDir).multiplyScalar(he).add(le.restWorldPos).applyMatrix4(le.parentInverse),le.node.position.copy(Bt)});let xt=L=>{let O=L;for(;O;){let q=vo(O),J=q?V[q]:void 0;if(J&&t[J])return[J,t[J]];O=O.parent}return null},Dt=L=>{let O=xt(L.object);if(!O)return;let[,q]=O;q.selectable!==!1&&(L.stopPropagation(),r(q))},Zt=L=>{if(!b)return;let O=xt(L.object);if(!O)return;let[q,J]=O;J.hoverable!==!1&&(L.stopPropagation(),g("pointer"),C(q),i?.(J))},In=L=>{b&&(L.stopPropagation(),S(),C(null),i?.(null))},te=(0,me.useMemo)(()=>!bs(v),[v]);return(0,Yc.jsx)("group",{ref:A,children:(0,Yc.jsx)("primitive",{object:v,...te?{onClick:Dt,...b?{onPointerOver:Zt,onPointerOut:In}:{}}:{}})})}var Ba=require("react"),ul=require("@react-three/fiber");function u0(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function Gm(e){if(!e)return null;let t=e.length,n=e.indexOf("?"),a=e.indexOf("#");n!==-1&&(t=Math.min(t,n)),a!==-1&&(t=Math.min(t,a));let r=e.lastIndexOf(".",t),i=e.lastIndexOf("/",t),s=e.indexOf("://");return s!==-1&&s+2===i||r===-1||r<i?null:e.substring(r+1,t)||null}var $s,qs=($s=class{static setXRSession(e){e!==this.session&&(this.flushPending(),this.session=e)}static requestAnimationFrame(e){let{session:t,pending:n}=this,a,r=()=>{n.delete(a),e()};return a=t?t.requestAnimationFrame(r):requestAnimationFrame(r),n.set(a,e),a}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)})}},wc($s,"pending",new Map),wc($s,"session",null),$s),Wm=2**30,p0=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 a=e(t),r=e(n);return a<r?-1:+(a>r)}):this._unloadPriorityCallback=e}constructor(){this.minSize=6e3,this.maxSize=8e3,this.minBytesSize=.3*Wm,this.maxBytesSize=.4*Wm,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:a}=this;a.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 a=this.usedSet,r=this.itemList,i=this.callbacks;return r.push(e),a.add(e),n.set(e,Date.now()),i.set(e,t),!0}has(e){return this.itemSet.has(e)}remove(e){let t=this.usedSet,n=this.itemSet,a=this.itemList,r=this.bytesMap,i=this.callbacks,s=this.loadedSet;if(n.has(e)){this.cachedBytes-=r.get(e)||0,r.delete(e),i.get(e)(e);let l=a.indexOf(e);return a.splice(l,1),t.delete(e),n.delete(e),i.delete(e),s.delete(e),!0}return!1}setLoaded(e,t){let{itemSet:n,loadedSet:a}=this;n.has(e)&&(t===!0?a.add(e):a.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:a,itemSet:r,usedSet:i,loadedSet:s,callbacks:l,bytesMap:o,minBytesSize:c,maxBytesSize:d}=this,p=a.length-i.size,h=a.length-s.size,f=Math.max(Math.min(a.length-t,p),0),b=this.cachedBytes-c,w=this.unloadPriorityCallback||this.defaultPriorityCallback,k=!1,x=f>0&&p>0||h&&a.length>n;if(p&&this.cachedBytes>c||h&&this.cachedBytes>d||x){a.sort((g,S)=>{let v=i.has(g);if(v===i.has(S)){let P=s.has(g);return P===s.has(S)?-w(g,S):P?1:-1}else return v?1:-1});let u=Math.max(t*e,f*e),m=Math.ceil(Math.min(u,p,f)),_=Math.max(e*b,e*c),M=Math.min(_,b),C=0,A=0;for(;this.cachedBytes-A>d||a.length-C>n;){let g=a[C],S=o.get(g)||0;if(i.has(g)&&s.has(g)||this.cachedBytes-A-S<d&&a.length-C<=n)break;A+=S,C++}for(;A<M||C<m;){let g=a[C],S=o.get(g)||0;if(i.has(g)||this.cachedBytes-A-S<c&&C>=m)break;A+=S,C++}a.splice(0,C).forEach(g=>{this.cachedBytes-=o.get(g)||0,l.get(g)(g),o.delete(g),r.delete(g),l.delete(g),s.delete(g),i.delete(g)}),k=C<f||A<b&&C<p,k&&(k=C>0)}k&&(this.unloadingHandle=qs.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){qs.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},m0=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},Ks=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=>{qs.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((a,r)=>{let i=this.items,s=this.callbacks;n.resolve=a,n.reject=r,i.unshift(e),s.set(e,n),this.autoUpdate&&this.scheduleJobRun()}),n.promise}remove(e){let t=this.items,n=this.callbacks,a=t.indexOf(e);if(a!==-1){let r=n.get(e);r.promise.catch(i=>{if(i.name!=="AbortError")throw i}),r.reject(new m0),t.splice(a,1),n.delete(e)}}removeByFilter(e){let{items:t}=this;for(let n=0;n<t.length;n++){let a=t[n];e(a)&&(this.remove(a),n--)}}tryRunJobs(){this.sort();let e=this.items,t=this.callbacks,n=this.maxJobs,a=0,r=()=>{this.currJobs--,this.autoUpdate&&this.scheduleJobRun()};for(;n>this.currJobs&&e.length>0&&a<n;){this.currJobs++,a++;let i=e.pop(),{callback:s,resolve:l,reject:o}=t.get(i);t.delete(i);let c;try{c=s(i)}catch(d){o(d),r();continue}c instanceof Promise?c.then(l).catch(o).finally(r):(l(c),r())}}flush(e){let{items:t,callbacks:n}=this,a=t.indexOf(e);if(!n.has(e))return;let{callback:r,resolve:i,reject:s}=n.get(e);n.delete(e),t.splice(a,1);let l;try{l=r(e)}catch(o){s(o);return}return l instanceof Promise?l.then(i).catch(s):i(l),l}scheduleJobRun(){this.scheduled||(this.scheduled=(this._schedulingCallback(this._runjobs),!0))}},h0=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,a=null){this.originQueues.forEach((o,c)=>{o.running||this.originQueues.delete(c)});let r=e===null?null:u0(e),i=this.originQueues.get(r);i||(i=new Ks,i.maxJobs=this._maxJobsPerOrigin,i.priorityCallback=this._priorityCallback,this.originQueues.set(r,i));let s=this._itemQueues.get(t);if(s&&s!==i&&s.has(t))throw Error("DownloadPriorityQueue: Item is already queued with a different url origin.");this._itemQueues.set(t,i);let l=i.add(t,n);return a!==null&&(a.aborted?this.remove(t):a.addEventListener("abort",()=>this.remove(t),{once:!0})),l}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 td=6378137,Hw=1/298.257223563,qm=6356752314245179e-9,Xs={inView:!1,error:1/0,distanceFromCamera:1/0};function Zs(e){return e===4||e===-1}function Zr(e,t){return Js(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function Js(e){return!!e.traversal}function Po(e){let{children:t}=e,n=t.length===0||Js(t[t.length-1]),a=!e.internal.hasUnrenderableContent||Zs(e.internal.loadingState);return n&&a}function Fi(e){return e.traversal.unconditionallyRefine}function Co(e,t){if(Js(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,Xs),e.traversal.inFrustum=Xs.inView,e.traversal.error=Xs.error,e.traversal.distanceFromCamera=Xs.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 Zc(e,t,n=!1){if(Co(e,t),n?t.markTileUsed(e):Ys(e),Fi(e)&&Po(e)){let a=e.children;for(let r=0,i=a.length;r<i;r++)Zc(a[r],t,n)}}function Ym(e,t){if(Co(e,t),e.traversal.usedLastFrame&&(Ys(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||Fi(e))&&Po(e))){let n=e.children;for(let a=0,r=n.length;a<r;a++)Ym(n[a],t)}}function Ys(e){e.traversal.used=!0}function f0(e,t){return!(e.traversal.error<=t.errorTarget&&!Fi(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!Po(e))}function Km(e,t){let{frameCount:n}=t,{children:a}=e;for(let r=0,i=a.length;r<i;r++){let s=a[r];Zr(s,n)&&(s.traversal.active&&(s.traversal.kicked=!0,s.traversal.active=!1),Km(s,t))}}function Xm(e){return!Fi(e)&&(!e.internal.hasContent||Zs(e.internal.loadingState))}function Zm(e,t){if(Co(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(!f0(e,t)){Ys(e);return}let a=!1,r=!1,i=e.children;for(let s=0,l=i.length;s<l;s++){let o=i[s];Zm(o,t),a||(a=Zr(o,t.frameCount)),r||(r=o.traversal.inFrustum)}if(e.refine==="REPLACE"&&!r&&i.length!==0){e.traversal.inFrustum=!1,t.markTileUsed(e);for(let s=0,l=i.length;s<l;s++)Zc(i[s],t,!0);return}if(Ys(e),e.refine==="REPLACE"&&a&&(t.loadSiblings||t.loadAncestors))for(let s=0,l=i.length;s<l;s++)Zc(i[s],t)}function Jm(e,t){let n=t.frameCount;if(!Zr(e,n))return;let a=e.children,r=!1;for(let s=0,l=a.length;s<l;s++){let o=a[s];r||(r=Zr(o,n))}if(!r)e.traversal.isLeaf=!0;else{for(let l=0,o=a.length;l<o;l++)Jm(a[l],t);let s=!0;for(let l=0,o=a.length;l<o;l++){let c=a[l];if(Zr(c,n)){let d=!Fi(c),p=!c.internal.hasContent||Zs(c.internal.loadingState);d&&p||c.traversal.allChildrenLoaded||(s=!1)}}e.traversal.allChildrenLoaded=s}let i=!0;for(let s=0,l=a.length;s<l;s++){let o=a[s];Zr(o,t.frameCount)&&!o.traversal.allUsedChildrenProcessed&&(i=!1)}e.traversal.allUsedChildrenProcessed=i&&Po(e)}function Qm(e,t){if(!Zr(e,t.frameCount))return;let n=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!Fi(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!Fi(e)&&(e.traversal.active=!0,Po(e)&&e.internal.hasContent&&!Zs(e.internal.loadingState)))for(let r=0,i=n.length;r<i;r++)Ym(n[r],t);return}let a=n.length>0;for(let r=0,i=n.length;r<i;r++){let s=n[r];Qm(s,t),Zr(s,t.frameCount)&&!(s.traversal.active&&Xm(s))&&!s.traversal.allChildrenReady&&(a=!1)}e.traversal.allChildrenReady=a,e.refine==="REPLACE"&&!a&&e.traversal.wasSetActive&&Xm(e)&&(e.traversal.active=!0,Km(e,t))}function eh(e,t){Co(e,t);let n=Zr(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||Js(e)&&e.traversal.usedLastFrame){let a=!1,r=!1;n?(a=e.traversal.active,r=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):Co(e,t),e.internal.hasRenderableContent&&e.internal.loadingState===4?(a&&t.stats.active++,r&&t.stats.visible++,e.traversal.wasSetActive!==a&&t.invokeOnePlugin(s=>s.setTileActive&&s.setTileActive(e,a)),e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(s=>s.setTileVisible&&s.setTileVisible(e,r))):e.internal.hasRenderableContent||(r=e.traversal.isLeaf,e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(s=>s.setEmptyTileVisible&&s.setEmptyTileVisible(e,r))),e.traversal.visible=r,e.traversal.active=a;let i=e.children;for(let s=0,l=i.length;s<l;s++){let o=i[s];eh(o,t)}}}function g0(e,t){Zm(e,t),Jm(e,t),Qm(e,t),eh(e,t)}function b0(e){let t=null;return()=>{t===null&&(t=qs.requestAnimationFrame(()=>{t=null,e()}))}}function v0(e,t=null,n=null){let a=[];for(a.push(e),a.push(null),a.push(0);a.length>0;){let r=a.pop(),i=a.pop(),s=a.pop();if(t&&t(s,i,r)){n&&n(s,i,r);return}let l=s.children;if(l)for(let o=l.length-1;o>=0;o--)a.push(l[o]),a.push(s),a.push(r+1);n&&n(s,i,r)}}var $m=Symbol("PLUGIN_REGISTERED"),hi={inView:!0,error:0,distance:1/0},x0=(e,t)=>{let n=e.priority||0,a=t.priority||0;return n===a?!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>a?1:-1},y0=(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,w0=(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,nd=(e,t)=>{let n=e.priority??1/0,a=t.priority??1/0;if(n!==a)return n>a?1:-1;if(!e.internal||!t.internal)return 0;let r=e.internal.renderer,i=t.internal.renderer,s=!r.loadAncestors,l=!i.loadAncestors;return s&&l?y0(e,t):x0(e,t)},th=new p0;th.unloadPriorityCallback=w0;var Jc=new h0;Jc.maxJobsPerOrigin=25,Jc.priorityCallback=nd;var Qc=new Ks;Qc.maxJobs=5,Qc.priorityCallback=nd;var ed=new Ks;ed.maxJobs=25,ed.priorityCallback=(e,t)=>{let n=e.parent,a=t.parent;return n===a?0:n?a?nd(n,a):-1:1};var nh=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,a=e.inCacheSinceLoad+ +!!t;return a===0?1:1-n/a}get downloadQueue(){return this._downloadQueue}set downloadQueue(e){if(e instanceof Ks){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=th,this.downloadQueue=Jc,this.parseQueue=Qc,this.processNodeQueue=ed,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=b0(()=>{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[$m]===!0)throw Error("TilesRendererBase: A plugin can only be registered to a single tileset");let t=this.plugins,n=e.priority||0,a=t.length;for(let r=0;r<t.length;r++)if((t[r].priority||0)>n){a=r;break}t.splice(a,0,e),e[$m]=!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 a=e(t[n]);if(a)return a}return null}invokeAllPlugins(e){let t=[...this.plugins,this],n=[];for(let a=0;a<t.length;a++){let r=e(t[a]);r&&n.push(r)}return n.length===0?null:Promise.all(n)}traverse(e,t,n=!0){this.root&&v0(this.root,(a,...r)=>(n&&this.ensureChildrenArePreprocessed(a,!0),e?e(a,...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:a,downloadQueue:r,parseQueue:i,processNodeQueue:s}=this;if(this.rootLoadingState===0&&(this.rootLoadingState=2,this.invokeOnePlugin(c=>c.loadRootTileset&&c.loadRootTileset()).then(c=>{let d=this.rootURL;d!==null&&this.invokeAllPlugins(p=>d=p.preprocessURL?p.preprocessURL(d,null):d),this.rootLoadingState=4,this.rootTileset=c,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:c,url:d}),this.dispatchEvent({type:"load-root-tileset",tileset:c,url:d})}).catch(c=>{this.rootLoadingState=-1,console.error(c),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:c,url:this.rootURL})})),!a)return;let l=null;if(this.invokeAllPlugins(c=>{if(c.doTilesNeedUpdate){let d=c.doTilesNeedUpdate();l=l===null?d:!!(l||d)}}),l===!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(),g0(a,this),this.removeUnusedPendingTiles();let o=this.queuedTiles;o.sort(e.unloadPriorityCallback);for(let c=0,d=o.length;c<d&&!e.isFull();c++)this.requestTileContents(o[c]);o.length=0,e.scheduleUnload(),(r.running||i.running||s.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:a}=this;if(n>0&&Number.isFinite(t.distanceFromCamera)){let l=t.distanceFromCamera*a;t.error-=n*(1-Math.exp(-l*l))}let r=null,i=0,s=1/0;this.invokeAllPlugins(l=>{l!==this&&l.calculateTileViewError&&(hi.inView=!0,hi.error=0,hi.distance=1/0,l.calculateTileViewError(e,hi)&&(r===null&&(r=!0),r&&(r=hi.inView),hi.inView&&(s=Math.min(s,hi.distance),i=Math.max(i,hi.error))))}),t.inView&&r!==!1?(t.error=Math.max(t.error,i),t.distanceFromCamera=Math.min(t.distanceFromCamera,s)):r?(t.inView=!0,t.error=i,t.distanceFromCamera=s):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,a=t.length;n<a;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 a=Gm(e.content.uri),r=!!(a&&/json$/.test(a));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(a=>{a!==this&&a.preprocessNode&&a.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 a of t)!e.isUsed(a)&&a.internal.loadingState===1&&n.push(a);for(let a=0;a<n.length;a++)e.remove(n[a])}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 a=r=>{for(let i=0,s=r.length;i<s;i++){let l=r[i];l&&!l.traversal&&this.preprocessNode(l,e.internal.basePath,e)}};t?(this.processNodeQueue.remove(e),a(n)):this.processNodeQueue.has(e)||this.processNodeQueue.add(e,r=>{a(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(a=>{n.has(a)&&t.setMemoryUsage(a,this.getBytesUsed(a))}):t.setMemoryUsage(e,this.getBytesUsed(e))}preprocessTileset(e,t,n=null){let[a,r]=e.asset.version.split(".").map(s=>parseInt(s));console.assert(a<=1,"TilesRenderer: asset.version is expected to be a 1.x or a compatible version."),a===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 i=t.replace(/\/[^/]*$/,"");i=new URL(i,window.location.href).toString(),this.preprocessNode(e.root,i,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,a=new URL(e.content.uri,e.internal.basePath+"/").toString();this.invokeAllPlugins(h=>a=h.preprocessURL?h.preprocessURL(a,e):a);let r=this.stats,i=this.lruCache,s=this.downloadQueue,l=this.parseQueue,o=this.loadingTiles,c=Gm(a),d=new AbortController,p=d.signal;if(i.add(e,h=>{d.abort(),t?h.children.length=0:this.invokeAllPlugins(f=>{f.disposeTile&&f.disposeTile(h)}),r.inCache--,this.cachedSinceLoadComplete.has(e)&&(this.cachedSinceLoadComplete.delete(e),r.inCacheSinceLoad--),h.internal.loadingState===1?r.queued--:h.internal.loadingState===2?r.downloading--:h.internal.loadingState===3?r.parsing--:h.internal.loadingState===4&&r.loaded--,h.internal.loadingState=0,l.remove(h),s.remove(h),o.delete(h)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),i.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),r.inCacheSinceLoad++,r.inCache++,r.queued++,e.internal.loadingState=1,o.add(e),s.add(a,e,h=>{if(p.aborted)return Promise.resolve();e.internal.loadingState=2,r.downloading++,r.queued--;let f=this.invokeOnePlugin(b=>b.fetchData&&b.fetchData(a,{...this.fetchOptions,signal:p}));return this.dispatchEvent({type:"tile-download-start",tile:e,url:a,get uri(){return console.warn('tile-download-start event: "uri" has been renamed to "url".'),this.url}}),f}).then(h=>{if(!p.aborted){if(!(h instanceof Response))return h;if(h.ok)return c==="json"?h.json():h.arrayBuffer();throw Error(`Failed to load model with error code ${h.status}`)}}).then(h=>{if(!p.aborted)return r.downloading--,r.parsing++,e.internal.loadingState=3,l.add(e,f=>p.aborted?Promise.resolve():c==="json"&&h.root?(this.preprocessTileset(h,a,e),e.children.push(h.root),n=h,t=!0,Promise.resolve()):this.invokeOnePlugin(b=>b.parseTile&&b.parseTile(h,f,c,a,p)))}).then(()=>{if(p.aborted)return;r.parsing--,r.loaded++,e.internal.loadingState=4,o.delete(e),i.setLoaded(e,!0);let h=this.getBytesUsed(e);if(i.getMemoryUsage(e)===0&&h>0&&i.isFull()){i.remove(e);return}i.setMemoryUsage(e,h),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:n,url:a}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:a})}).catch(h=>{p.aborted||(h.name==="AbortError"?i.remove(e):(l.remove(e),s.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(h),e.internal.loadingState=-1,o.delete(e),i.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:h,url:a})))})}};function Vi(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 a=0;a<4;a++)n+=String.fromCharCode(t.getUint8(a));return n}var S0=new TextDecoder;function rh(e){return S0.decode(e)}function Qs(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var el=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=Qs(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function ih(e,t,n,a,r,i){let s;switch(a){case"SCALAR":s=1;break;case"VEC2":s=2;break;case"VEC3":s=3;break;case"VEC4":s=4;break;default:throw Error(`FeatureTable : Feature type not provided for "${i}".`)}let l,o=n*s;switch(r){case"BYTE":l=new Int8Array(e,t,o);break;case"UNSIGNED_BYTE":l=new Uint8Array(e,t,o);break;case"SHORT":l=new Int16Array(e,t,o);break;case"UNSIGNED_SHORT":l=new Uint16Array(e,t,o);break;case"INT":l=new Int32Array(e,t,o);break;case"UNSIGNED_INT":l=new Uint32Array(e,t,o);break;case"FLOAT":l=new Float32Array(e,t,o);break;case"DOUBLE":l=new Float64Array(e,t,o);break;default:throw Error(`FeatureTable : Feature component type not provided for "${i}".`)}return l}var tl=class{constructor(e,t,n,a){this.buffer=e,this.binOffset=t+n,this.binLength=a;let r=null;if(n!==0){let i=new Uint8Array(e,t,n);r=JSON.parse(rh(i))}else r={};this.header=r}getKeys(){return Object.keys(this.header).filter(e=>e!=="extensions")}getData(e,t,n=null,a=null){let r=this.header;if(!(e in r))return null;let i=r[e];if(!(i instanceof Object)||Array.isArray(i))return i;{let{buffer:s,binOffset:l,binLength:o}=this,c=i.byteOffset||0,d=i.type||a,p=i.componentType||n;if("type"in i&&a&&i.type!==a)throw Error("FeatureTable: Specified type does not match expected type.");let h=l+c,f=ih(s,h,t,d,p,e);if(h+f.byteLength>l+o)throw Error("FeatureTable: Feature data read outside binary body length.");return f}}getBuffer(e,t){let{buffer:n,binOffset:a}=this;return n.slice(a+e,a+e+t)}},_0=class{constructor(e){this.batchTable=e;let t=e.header.extensions["3DTILES_batch_table_hierarchy"];this.classes=t.classes;for(let a of this.classes){let r=a.instances;for(let i in r)a.instances[i]=this._parseProperty(r[i],a.length,i)}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 a=this.parentCounts.reduce((r,i)=>r+i,0);this.parentIds=this._parseProperty(t.parentIds,a,"parentIds")}else this.parentIds=null;this.instancesIds=[];let n={};for(let a of this.classIds)n[a]=n[a]??0,this.instancesIds.push(n[a]),n[a]++}_parseProperty(e,t,n){if(Array.isArray(e))return e;{let{buffer:a,binOffset:r}=this.batchTable,i=e.byteOffset,s=e.componentType||"UNSIGNED_SHORT";return ih(a,r+i,t,"SCALAR",s,n)}}getDataFromId(e,t={}){let n=this.parentCounts[e];if(this.parentIds&&n>0){let l=0;for(let o=0;o<e;o++)l+=this.parentCounts[o];for(let o=0;o<n;o++){let c=this.parentIds[l+o];c!==e&&this.getDataFromId(c,t)}}let a=this.classIds[e],r=this.classes[a].instances,i=this.classes[a].name,s=this.instancesIds[e];for(let l in r)t[i]=t[i]||{},t[i][l]=r[l][s];return t}},rd=class extends tl{constructor(e,t,n,a,r){super(e,n,a,r),this.count=t,this.extensions={};let i=this.header.extensions;i&&i["3DTILES_batch_table_hierarchy"]&&(this.extensions["3DTILES_batch_table_hierarchy"]=new _0(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 a=this.extensions[n];a.getDataFromId instanceof Function&&(t[n]=t[n]||{},a.getDataFromId(e,t[n]))}return t}getPropertyArray(e){return super.getData(e,this.count)}},ah=class extends el{parse(e){let t=new DataView(e),n=Vi(t);console.assert(n==="b3dm");let a=t.getUint32(4,!0);console.assert(a===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let i=t.getUint32(12,!0),s=t.getUint32(16,!0),l=t.getUint32(20,!0),o=t.getUint32(24,!0),c=new tl(e.slice(28,28+i+s),0,i,s),d=28+i+s,p=new rd(e.slice(d,d+l+o),c.getData("BATCH_LENGTH"),0,l,o),h=d+l+o;return{version:a,featureTable:c,batchTable:p,glbBytes:new Uint8Array(e,h,r-h)}}},oh=class extends el{parse(e){let t=new DataView(e),n=Vi(t);console.assert(n==="i3dm");let a=t.getUint32(4,!0);console.assert(a===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let i=t.getUint32(12,!0),s=t.getUint32(16,!0),l=t.getUint32(20,!0),o=t.getUint32(24,!0),c=t.getUint32(28,!0),d=new tl(e.slice(32,32+i+s),0,i,s),p=32+i+s,h=new rd(e.slice(p,p+l+o),d.getData("INSTANCES_LENGTH"),0,l,o),f=p+l+o,b=new Uint8Array(e,f,r-f),w=null,k=null,x=null;if(c)w=b,k=Promise.resolve();else{let u=this.resolveExternalURL(rh(b));x=Qs(u),k=fetch(u,this.fetchOptions).then(m=>{if(!m.ok)throw Error(`I3DMLoaderBase : Failed to load file "${u}" with status ${m.status} : ${m.statusText}`);return m.arrayBuffer()}).then(m=>{w=new Uint8Array(m)})}return k.then(()=>({version:a,featureTable:d,batchTable:h,glbBytes:w,gltfWorkingPath:x}))}},sh=class extends el{parse(e){let t=new DataView(e),n=Vi(t);console.assert(n==="pnts");let a=t.getUint32(4,!0);console.assert(a===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let i=t.getUint32(12,!0),s=t.getUint32(16,!0),l=t.getUint32(20,!0),o=t.getUint32(24,!0),c=new tl(e.slice(28,28+i+s),0,i,s),d=28+i+s,p=new rd(e.slice(d,d+l+o),c.getData("BATCH_LENGTH")||c.getData("POINTS_LENGTH"),0,l,o);return Promise.resolve({version:a,featureTable:c,batchTable:p})}},lh=class extends el{parse(e){let t=new DataView(e),n=Vi(t);console.assert(n==="cmpt",'CMPTLoader: The magic bytes equal "cmpt".');let a=t.getUint32(4,!0);console.assert(a===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 i=t.getUint32(12,!0),s=[],l=16;for(let o=0;o<i;o++){let c=new DataView(e,l,12),d=Vi(c),p=c.getUint32(4,!0),h=c.getUint32(8,!0),f=new Uint8Array(e,l,h);s.push({type:d,buffer:f,version:p}),l+=h}return{version:a,tiles:s}}};var F=require("three"),dl=require("three/addons/loaders/GLTFLoader.js"),Mh=require("three/addons/utils/BufferGeometryUtils.js"),md=class extends ah{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((a,r)=>{let i=this.manager,s=this.fetchOptions,l=i.getHandler("path.gltf")||new dl.GLTFLoader(i);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 o=this.workingPath;!/[\\/]$/.test(o)&&o.length&&(o+="/");let c=this.adjustmentTransform;l.parse(n,o,d=>{let{batchTable:p,featureTable:h}=t,{scene:f}=d,b=h.getData("RTC_CENTER",1,"FLOAT","VEC3");b&&(f.position.x+=b[0],f.position.y+=b[1],f.position.z+=b[2]),d.scene.updateMatrix(),d.scene.matrix.multiply(c),d.scene.matrix.decompose(d.scene.position,d.scene.quaternion,d.scene.scale),d.batchTable=p,d.featureTable=h,f.batchTable=p,f.featureTable=h,a(d)},r)})}};function M0(e){let t=e>>11,n=e>>5&63,a=e&31;return[Math.round(t/31*255),Math.round(n/63*255),Math.round(a/31*255)]}var To=new F.Vector2;function C0(e,t,n=new F.Vector3){To.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),n.set(To.x,To.y,1-Math.abs(To.x)-Math.abs(To.y));let a=F.MathUtils.clamp(-n.z,0,1);return n.x>=0?n.setX(n.x-a):n.setX(n.x+a),n.y>=0?n.setY(n.y-a):n.setY(n.y+a),n.normalize(),n}var ch={RGB:"color",POSITION:"position"},hd=class extends sh{constructor(e=F.DefaultLoadingManager){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:n,batchTable:a}=t,r=new F.PointsMaterial,i=n.header.extensions,s=new F.Vector3,l;if(i&&i["3DTILES_draco_point_compression"]){let{byteOffset:d,byteLength:p,properties:h}=i["3DTILES_draco_point_compression"],f=this.manager.getHandler("draco.drc");if(f==null)throw Error("PNTSLoader: dracoLoader not available.");let b={};for(let x in h)if(x in ch&&x in h){let u=ch[x];b[u]=h[x]}let w={attributeIDs:b,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},k=n.getBuffer(d,p);l=await f.decodeGeometry(k,w),l.attributes.color&&(r.vertexColors=!0)}else{let d=n.getData("POINTS_LENGTH"),p=n.getData("POSITION",d,"FLOAT","VEC3"),h=n.getData("NORMAL",d,"FLOAT","VEC3"),f=n.getData("NORMAL",d,"UNSIGNED_BYTE","VEC2"),b=n.getData("RGB",d,"UNSIGNED_BYTE","VEC3"),w=n.getData("RGBA",d,"UNSIGNED_BYTE","VEC4"),k=n.getData("RGB565",d,"UNSIGNED_SHORT","SCALAR"),x=n.getData("CONSTANT_RGBA",d,"UNSIGNED_BYTE","VEC4"),u=n.getData("POSITION_QUANTIZED",d,"UNSIGNED_SHORT","VEC3"),m=n.getData("QUANTIZED_VOLUME_SCALE",d,"FLOAT","VEC3"),_=n.getData("QUANTIZED_VOLUME_OFFSET",d,"FLOAT","VEC3");if(l=new F.BufferGeometry,u){let M=new Float32Array(d*3);for(let C=0;C<d;C++)for(let A=0;A<3;A++){let g=3*C+A;M[g]=u[g]/65535*m[A]}s.x=_[0],s.y=_[1],s.z=_[2],l.setAttribute("position",new F.BufferAttribute(M,3,!1))}else l.setAttribute("position",new F.BufferAttribute(p,3,!1));if(h!==null)l.setAttribute("normal",new F.BufferAttribute(h,3,!1));else if(f!==null){let M=new Float32Array(d*3),C=new F.Vector3;for(let A=0;A<d;A++){let g=f[A*2],S=f[A*2+1],v=C0(g,S,C);M[A*3]=v.x,M[A*3+1]=v.y,M[A*3+2]=v.z}l.setAttribute("normal",new F.BufferAttribute(M,3,!1))}if(w!==null)l.setAttribute("color",new F.BufferAttribute(w,4,!0)),r.vertexColors=!0,r.transparent=!0,r.depthWrite=!1;else if(b!==null)l.setAttribute("color",new F.BufferAttribute(b,3,!0)),r.vertexColors=!0;else if(k!==null){let M=new Uint8Array(d*3);for(let C=0;C<d;C++){let A=M0(k[C]);for(let g=0;g<3;g++){let S=3*C+g;M[S]=A[g]}}l.setAttribute("color",new F.BufferAttribute(M,3,!0)),r.vertexColors=!0}else if(x!==null){r.color=new F.Color(x[0],x[1],x[2]);let M=x[3]/255;M<1&&(r.opacity=M,r.transparent=!0,r.depthWrite=!1)}}let o=new F.Points(l,r);o.position.copy(s),t.scene=o,t.scene.featureTable=n,t.scene.batchTable=a;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 P0(e){let{x:t,y:n,z:a}=e;e.x=a,e.y=t,e.z=n}function T0(e){return-e+Math.PI/2}var dh=new F.Spherical,fi=new F.Vector3,Ln=new F.Vector3,id=new F.Vector3,lr=new F.Matrix4,Dr=new F.Matrix4,ad=new F.Sphere,Hn=new F.Euler,uh=new F.Vector3,ph=new F.Vector3,mh=new F.Vector3,Ao=new F.Vector3,nl=new F.Ray,A0=1e-12,E0=.1;var fd=class{constructor(e=1,t=1,n=1){this.name="",this.radius=new F.Vector3(e,t,n)}intersectRay(e,t){return lr.makeScale(...this.radius).invert(),ad.center.set(0,0,0),ad.radius=1,nl.copy(e).applyMatrix4(lr),nl.intersectSphere(ad,t)?(lr.makeScale(...this.radius),t.applyMatrix4(lr),t):null}getEastNorthUpFrame(e,t,n,a){return n.isMatrix4&&(a=n,n=0,console.warn('Ellipsoid: The signature for "getEastNorthUpFrame" has changed.')),this.getEastNorthUpAxes(e,t,uh,ph,mh),this.getCartographicToPosition(e,t,n,Ao),a.makeBasis(uh,ph,mh).setPosition(Ao)}getOrientedEastNorthUpFrame(e,t,n,a,r,i,s){return this.getObjectFrame(e,t,n,a,r,i,s,0)}getObjectFrame(e,t,n,a,r,i,s,l=2){return this.getEastNorthUpFrame(e,t,n,lr),Hn.set(r,i,-a,"ZXY"),s.makeRotationFromEuler(Hn).premultiply(lr),l===1?(Hn.set(Math.PI/2,0,0,"XYZ"),Dr.makeRotationFromEuler(Hn),s.multiply(Dr)):l===2&&(Hn.set(-Math.PI/2,0,Math.PI,"XYZ"),Dr.makeRotationFromEuler(Hn),s.multiply(Dr)),s}getCartographicFromObjectFrame(e,t,n=2){return n===1?(Hn.set(-Math.PI/2,0,0,"XYZ"),Dr.makeRotationFromEuler(Hn).premultiply(e)):n===2?(Hn.set(-Math.PI/2,0,Math.PI,"XYZ"),Dr.makeRotationFromEuler(Hn).premultiply(e)):Dr.copy(e),Ao.setFromMatrixPosition(Dr),this.getPositionToCartographic(Ao,t),this.getEastNorthUpFrame(t.lat,t.lon,0,lr).invert(),Dr.premultiply(lr),Hn.setFromRotationMatrix(Dr,"ZXY"),t.azimuth=-Hn.z,t.elevation=Hn.x,t.roll=Hn.y,t}getEastNorthUpAxes(e,t,n,a,r,i=Ao){this.getCartographicToPosition(e,t,0,i),this.getCartographicToNormal(e,t,r),n.set(-i.y,i.x,0).normalize(),a.crossVectors(r,n).normalize()}getCartographicToPosition(e,t,n,a){this.getCartographicToNormal(e,t,fi);let r=this.radius;Ln.copy(fi),Ln.x*=r.x**2,Ln.y*=r.y**2,Ln.z*=r.z**2;let i=Math.sqrt(fi.dot(Ln));return Ln.divideScalar(i),a.copy(Ln).addScaledVector(fi,n)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,Ln),this.getPositionToNormal(Ln,fi);let n=id.subVectors(e,Ln);return t.lon=Math.atan2(fi.y,fi.x),t.lat=Math.asin(fi.z),t.height=Math.sign(n.dot(e))*n.length(),t}getCartographicToNormal(e,t,n){return dh.set(1,T0(e),t),n.setFromSpherical(dh).normalize(),P0(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,a=1/n.x**2,r=1/n.y**2,i=1/n.z**2,s=e.x*e.x*a,l=e.y*e.y*r,o=e.z*e.z*i,c=s+l+o,d=Math.sqrt(1/c),p=Ln.copy(e).multiplyScalar(d);if(c<E0)return isFinite(d)?t.copy(p):null;let h=id.set(p.x*a*2,p.y*r*2,p.z*i*2),f=(1-d)*e.length()/(.5*h.length()),b=0,w,k,x,u,m,_,M,C,A,g,S;do{f-=b,x=1/(1+f*a),u=1/(1+f*r),m=1/(1+f*i),_=x*x,M=u*u,C=m*m,A=_*x,g=M*u,S=C*m,w=s*_+l*M+o*C-1,k=s*A*a+l*g*r+o*S*i;let v=-2*k;b=w/v}while(Math.abs(w)>A0);return t.set(e.x*x,e.y*u,e.z*m)}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,a=e*F.MathUtils.DEG2RAD,r=Math.sin(a)**2;return t/Math.sqrt(1-n*r)}getPositionElevation(e){this.getPositionToSurfacePoint(e,Ln);let t=id.subVectors(e,Ln);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(lr.makeScale(...this.radius).invert(),nl.copy(e).applyMatrix4(lr),Ln.set(0,0,0),nl.closestPointToPoint(Ln,t).normalize(),lr.makeScale(...this.radius),t.applyMatrix4(lr))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},Lo=new fd(td,td,qm);Lo.name="WGS84 Earth";var rl=new F.Vector3,Ra=new F.Vector3,Na=new F.Vector3,od=new F.Vector3,il=new F.Quaternion,al=new F.Vector3,La=new F.Matrix4,hh=new F.Matrix4,fh=new F.Vector3,gh=new F.Matrix4,sd=new F.Quaternion,ld={};function bh(e,t,n,a){if(e=e/n*2-1,t=t/n*2-1,a.x=e,a.y=t,a.z=1-Math.abs(e)-Math.abs(t),a.z<0){let r=a.x;a.x=(1-Math.abs(a.y))*(r>=0?1:-1),a.y=(1-Math.abs(r))*(a.y>=0?1:-1)}return a.normalize(),a}var gd=class extends oh{constructor(e=F.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new F.Matrix4,this.ellipsoid=Lo.clone()}resolveExternalURL(e){return this.manager.resolveURL(super.resolveExternalURL(e))}parse(e){return super.parse(e).then(t=>{let{featureTable:n,batchTable:a}=t,r=t.glbBytes.slice().buffer;return new Promise((i,s)=>{let l=this.fetchOptions,o=this.manager,c=o.getHandler("path.gltf")||new dl.GLTFLoader(o);l.credentials==="include"&&l.mode==="cors"&&c.setCrossOrigin("use-credentials"),"credentials"in l&&c.setWithCredentials(l.credentials==="include"),l.headers&&c.setRequestHeader(l.headers);let d=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(d)||(d+="/");let p=this.adjustmentTransform;c.parse(r,d,h=>{let f=n.getData("INSTANCES_LENGTH"),b=n.getData("POSITION",f,"FLOAT","VEC3"),w=n.getData("POSITION_QUANTIZED",f,"UNSIGNED_SHORT","VEC3"),k=n.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),x=n.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),u=n.getData("NORMAL_UP",f,"FLOAT","VEC3"),m=n.getData("NORMAL_RIGHT",f,"FLOAT","VEC3"),_=n.getData("NORMAL_UP_OCT32P",f,"UNSIGNED_SHORT","VEC2"),M=n.getData("NORMAL_RIGHT_OCT32P",f,"UNSIGNED_SHORT","VEC2"),C=n.getData("SCALE_NON_UNIFORM",f,"FLOAT","VEC3"),A=n.getData("SCALE",f,"FLOAT","SCALAR"),g=n.getData("RTC_CENTER",1,"FLOAT","VEC3"),S=n.getData("EAST_NORTH_UP");if(!b&&w){b=new Float32Array(f*3);for(let E=0;E<f;E++)b[E*3+0]=k[0]+w[E*3+0]/65535*x[0],b[E*3+1]=k[1]+w[E*3+1]/65535*x[1],b[E*3+2]=k[2]+w[E*3+2]/65535*x[2]}let v=new F.Vector3;for(let E=0;E<f;E++)v.x+=b[E*3+0]/f,v.y+=b[E*3+1]/f,v.z+=b[E*3+2]/f;let P=[],U=[];h.scene.updateMatrixWorld(),h.scene.traverse(E=>{if(E.isMesh){U.push(E);let{geometry:V,material:T}=E,G=new F.InstancedMesh(V,T,f);G.position.copy(v),g&&(G.position.x+=g[0],G.position.y+=g[1],G.position.z+=g[2]),P.push(G)}});for(let E=0;E<f;E++){od.set(b[E*3+0]-v.x,b[E*3+1]-v.y,b[E*3+2]-v.z),il.identity(),u&&m?(Ra.set(u[E*3+0],u[E*3+1],u[E*3+2]),Na.set(m[E*3+0],m[E*3+1],m[E*3+2]),rl.crossVectors(Na,Ra).normalize(),La.makeBasis(Na,Ra,rl),il.setFromRotationMatrix(La)):_&&M&&(bh(_[E*2+0],_[E*2+1],65535,Ra),bh(M[E*2+0],M[E*2+1],65535,Na),rl.crossVectors(Na,Ra).normalize(),La.makeBasis(Na,Ra,rl),il.setFromRotationMatrix(La)),al.set(1,1,1),C&&al.set(C[E*3+0],C[E*3+1],C[E*3+2]),A&&al.multiplyScalar(A[E]);for(let V=0,T=P.length;V<T;V++){let G=P[V];sd.copy(il),S&&(G.updateMatrixWorld(),fh.copy(od).applyMatrix4(G.matrixWorld),this.ellipsoid.getPositionToCartographic(fh,ld),this.ellipsoid.getEastNorthUpFrame(ld.lat,ld.lon,gh),sd.setFromRotationMatrix(gh)),La.compose(od,sd,al).multiply(p);let W=U[V];hh.multiplyMatrices(La,W.matrixWorld),G.setMatrixAt(E,hh)}}h.scene.clear(),h.scene.add(...P),h.batchTable=a,h.featureTable=n,h.scene.batchTable=a,h.scene.featureTable=n,i(h)},s)})})}},Ch=class extends lh{constructor(e=F.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new F.Matrix4,this.ellipsoid=Lo.clone()}parse(e){let t=super.parse(e),{manager:n,ellipsoid:a,adjustmentTransform:r}=this,i=[];for(let s in t.tiles){let{type:l,buffer:o}=t.tiles[s];switch(l){case"b3dm":{let c=o.slice(),d=new md(n);d.workingPath=this.workingPath,d.fetchOptions=this.fetchOptions,d.adjustmentTransform.copy(r);let p=d.parse(c.buffer);i.push(p);break}case"pnts":{let c=o.slice(),d=new hd(n);d.workingPath=this.workingPath,d.fetchOptions=this.fetchOptions;let p=d.parse(c.buffer);i.push(p);break}case"i3dm":{let c=o.slice(),d=new gd(n);d.workingPath=this.workingPath,d.fetchOptions=this.fetchOptions,d.ellipsoid.copy(a),d.adjustmentTransform.copy(r);let p=d.parse(c.buffer);i.push(p);break}}}return Promise.all(i).then(s=>{let l=new F.Group;return s.forEach(o=>{l.add(o.scene)}),{tiles:s,scene:l}})}},Eo=new F.Matrix4,k0=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?Eo.copy(this.matrix):Eo.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=Eo.elements,n=this.matrixWorld.elements,a=!1;for(let r=0;r<16;r++){let i=t[r],s=n[r];if(Math.abs(i-s)>2**-52){a=!0;break}}if(a){this.matrixWorld.copy(Eo),this.matrixWorldInverse.copy(Eo).invert();let r=this.children;for(let o=0,c=r.length;o<c;o++)r[o].updateMatrixWorld();let{tilesRenderer:i}=this,{activeTiles:s,visibleTiles:l}=i;s.forEach(o=>{l.has(o)||o.engineData.scene.updateMatrixWorld(!0)})}}}updateWorldMatrix(e,t){this.parent&&e&&this.parent.updateWorldMatrix(e,!1),this.updateMatrixWorld(!0)}},R0=new F.Ray;function N0(e,t,n,a){let{scene:r}=e.engineData;n.invokeOnePlugin(i=>i.raycastTile&&i.raycastTile(e,r,t,a))||t.intersectObject(r,!0,a)}function L0(e){return"traversal"in e}function Ph(e,t,n,a,r=null){if(!L0(t))return;let{group:i,activeTiles:s}=e,{boundingVolume:l}=t.engineData;if(r===null&&(r=R0,r.copy(n.ray).applyMatrix4(i.matrixWorldInverse)),!t.traversal.used||!l.intersectsRay(r))return;s.has(t)&&N0(t,n,e,a);let o=t.children;for(let c=0,d=o.length;c<d;c++)Ph(e,o[c],n,a,r)}var ol=new F.Vector3,sl=new F.Vector3,Gn=new F.Vector3,ll=new F.Ray,ud=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,Gn).distanceTo(e)}containsPoint(e){return Gn.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(Gn)}intersectsRay(e){return ll.copy(e).applyMatrix4(this.inverseTransform),ll.intersectsBox(this.box)}intersectRay(e,t){return ll.copy(e).applyMatrix4(this.inverseTransform),ll.intersectBox(this.box,t)?(t.applyMatrix4(this.transform),t):null}update(){let{points:e,inverseTransform:t,transform:n,box:a}=this;t.copy(n).invert();let{min:r,max:i}=a,s=0;for(let l=-1;l<=1;l+=2)for(let o=-1;o<=1;o+=2)for(let c=-1;c<=1;c+=2)e[s].set(l<0?r.x:i.x,o<0?r.y:i.y,c<0?r.z:i.z).applyMatrix4(n),s++;this.updatePlanes()}updatePlanes(){ol.copy(this.box.min).applyMatrix4(this.transform),sl.copy(this.box.max).applyMatrix4(this.transform),Gn.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(Gn,ol),this.planes[1].setFromNormalAndCoplanarPoint(Gn,sl).negate(),Gn.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(Gn,ol),this.planes[3].setFromNormalAndCoplanarPoint(Gn,sl).negate(),Gn.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(Gn,ol),this.planes[5].setFromNormalAndCoplanarPoint(Gn,sl).negate()}intersectsSphere(e){return this.clampPoint(e.center,Gn),Gn.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,a=this.planes;for(let r=0;r<6;r++){let i=e[r],s=-1/0;for(let l=0;l<8;l++){let o=n[l],c=i.distanceToPoint(o);s=s<c?c:s}if(s<0)return!1}for(let r=0;r<6;r++){let i=a[r],s=-1/0;for(let l=0;l<8;l++){let o=t[l],c=i.distanceToPoint(o);s=s<c?c:s}if(s<0)return!1}return!0}},No=Math.PI,cd=No/2,ko=new F.Vector3,ji=new F.Vector3,Mr=new F.Vector3,Pe=new F.Vector3,Bn=new F.Matrix4,B0=new F.Box3,vh=new F.Matrix4;function gi(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function xh(e){return e.x!==e.y}var Th=class extends fd{constructor(e=1,t=1,n=1,a=-cd,r=cd,i=0,s=2*No,l=0,o=0){super(e,t,n),this.latStart=a,this.latEnd=r,this.lonStart=i,this.lonEnd=s,this.heightStart=l,this.heightEnd=o}getBoundingBox(e,t){xh(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported.");let{latStart:n,latEnd:a,lonStart:r,lonEnd:i,heightStart:s,heightEnd:l}=this,o=(n+a)*.5,c=(r+i)*.5,d=n>0,p=a<0,h;h=d?n:p?a:0;let{min:f,max:b}=e;f.setScalar(1/0),b.setScalar(-1/0),i-r<=No?(this.getCartographicToNormal(o,c,Mr),ji.set(0,0,1),ko.crossVectors(ji,Mr).normalize(),ji.crossVectors(Mr,ko).normalize(),t.makeBasis(ko,ji,Mr),Bn.copy(t).invert(),this.getCartographicToPosition(h,r,l,Pe).applyMatrix4(Bn),b.x=Math.abs(Pe.x),f.x=-b.x,this.getCartographicToPosition(a,r,l,Pe).applyMatrix4(Bn),b.y=Pe.y,this.getCartographicToPosition(a,c,l,Pe).applyMatrix4(Bn),b.y=Math.max(Pe.y,b.y),this.getCartographicToPosition(n,r,l,Pe).applyMatrix4(Bn),f.y=Pe.y,this.getCartographicToPosition(n,c,l,Pe).applyMatrix4(Bn),f.y=Math.min(Pe.y,f.y),this.getCartographicToPosition(o,c,l,Pe).applyMatrix4(Bn),b.z=Pe.z,this.getCartographicToPosition(n,r,s,Pe).applyMatrix4(Bn),f.z=Pe.z,this.getCartographicToPosition(a,r,s,Pe).applyMatrix4(Bn),f.z=Math.min(Pe.z,f.z)):(this.getCartographicToPosition(h,c,l,Mr),Mr.z=0,Mr.length()<1e-10?Mr.set(1,0,0):Mr.normalize(),ji.set(0,0,1),ko.crossVectors(Mr,ji).normalize(),t.makeBasis(ko,ji,Mr),Bn.copy(t).invert(),this.getCartographicToPosition(h,c+cd,l,Pe).applyMatrix4(Bn),b.x=Math.abs(Pe.x),f.x=-b.x,this.getCartographicToPosition(a,0,p?s:l,Pe).applyMatrix4(Bn),b.y=Pe.y,this.getCartographicToPosition(n,0,d?s:l,Pe).applyMatrix4(Bn),f.y=Pe.y,this.getCartographicToPosition(h,c,l,Pe).applyMatrix4(Bn),b.z=Pe.z,this.getCartographicToPosition(h,i,l,Pe).applyMatrix4(Bn),f.z=Pe.z),e.getCenter(Pe),e.min.sub(Pe).multiplyScalar(1.0000000000001),e.max.sub(Pe).multiplyScalar(1.0000000000001),Pe.applyMatrix4(t),t.setPosition(Pe)}getBoundingSphere(e){xh(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(B0,vh),e.center.setFromMatrixPosition(vh),e.radius=0;let{latStart:t,latEnd:n,lonStart:a,lonEnd:r,heightStart:i,heightEnd:s}=this,l=(t+n)*.5,o=(a+r)*.5,c=t>0,d=n<0,p;p=c?t:d?n:0,this.getCartographicToPosition(p,a,s,Pe),gi(Pe,e),this.getCartographicToPosition(n,a,s,Pe),gi(Pe,e),this.getCartographicToPosition(n,o,s,Pe),gi(Pe,e),this.getCartographicToPosition(t,a,s,Pe),gi(Pe,e),this.getCartographicToPosition(t,o,s,Pe),gi(Pe,e),this.getCartographicToPosition(l,o,s,Pe),gi(Pe,e),this.getCartographicToPosition(t,a,i,Pe),gi(Pe,e),r-a>No&&(this.getCartographicToPosition(p,o+No,s,Pe),gi(Pe,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},Jr=new F.Vector3,Qr=new F.Vector3,ei=new F.Vector3,yh=new F.Vector3,wh=new F.Vector3,D0=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,a=this.obb||this.regionObb,r=-1/0,i=-1/0;n&&e.intersectSphere(n,yh)&&(r=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(yh)),a&&a.intersectRay(e,wh)&&(i=a.containsPoint(e.origin)?0:e.origin.distanceToSquared(wh));let s=Math.max(r,i);return s===-1/0?null:(e.at(Math.sqrt(s),t),t)}distanceToPoint(e){let t=this.sphere,n=this.obb||this.regionObb,a=-1/0,r=-1/0;return t&&(a=Math.max(t.distanceToPoint(e),0)),n&&(r=n.distanceToPoint(e)),a>r?a: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 ud;Jr.set(e[3],e[4],e[5]),Qr.set(e[6],e[7],e[8]),ei.set(e[9],e[10],e[11]);let a=Jr.length(),r=Qr.length(),i=ei.length();Jr.normalize(),Qr.normalize(),ei.normalize(),a===0&&Jr.crossVectors(Qr,ei),r===0&&Qr.crossVectors(Jr,ei),i===0&&ei.crossVectors(Jr,Qr),n.transform.set(Jr.x,Qr.x,ei.x,e[0],Jr.y,Qr.y,ei.y,e[1],Jr.z,Qr.z,ei.z,e[2],0,0,0,1).premultiply(t),n.box.min.set(-a,-r,-i),n.box.max.set(a,r,i),n.update(),this.obb=n}setSphereData(e,t,n,a,r){let i=new F.Sphere;i.center.set(e,t,n),i.radius=a,i.applyMatrix4(r),this.sphere=i}setRegionData(e,t,n,a,r,i,s){let l=new Th(...e.radius,n,r,t,a,i,s),o=new ud;l.getBoundingBox(o.box,o.transform),o.update(),this.region=l,this.regionObb=o}},O0=new F.Matrix3;function I0(e,t,n,a){let r=O0.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 a.set(-e.constant,-t.constant,-n.constant),a.applyMatrix3(r.invert()),a}var z0=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,a)=>{I0(n[0],n[1],n[2],t[a])})}};var pd=0;function Sh(e,t,n,a){try{return F.TextureUtils.getByteLength(e,t,n,a)}catch{return pd}}function U0(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??pd;let{format:t,type:n,image:a,mipmaps:r}=e;if(e.isCompressedTexture&&Array.isArray(r)&&r.length>0){let s=0;for(let l of r)l?.data?.byteLength?s+=l.data.byteLength:s+=Sh(l.width,l.height,t,n);return s}if(!a)return pd;let i=Sh(a.width,a.height,t,n);return i*=e.generateMipmaps?4/3:1,i}function F0(e){let t=new Set,n=0;return e.traverse(a=>{if(a.geometry&&!t.has(a.geometry)&&(n+=(0,Mh.estimateBytesUsed)(a.geometry),t.add(a.geometry)),a.material){let r=a.material;for(let i in r){let s=r[i];s&&s.isTexture&&!t.has(s)&&(n+=U0(s),t.add(s))}}}),n}var Ah=Symbol("INITIAL_FRUSTUM_CULLED"),cl=new F.Matrix4,Ro=new F.Vector3,dd=new F.Vector2,V0=new F.Vector3(1,0,0),j0=new F.Vector3(0,1,0),H0=()=>null;function _h(e,t){e.traverse(n=>{n.frustumCulled=n[Ah]&&t})}var bd=class extends nh{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{_h(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new k0(this),this.ellipsoid=Lo.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)Ph(this,this.root,e,t);else{let n=e.firstHitOnly?[]:t;for(let a of this.activeTiles){let{scene:r}=a.engineData;this.invokeOnePlugin(i=>i.raycastTile&&i.raycastTile(a,r,e,n))||e.intersectObject(r,!0,n)}e.firstHitOnly&&n.length>0&&(n.sort((a,r)=>a.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 a=this.cameraMap;if(!a.has(e))return!1;let r=t.isVector2?t.x:t,i=t.isVector2?t.y:n,s=a.get(e);return(s.width!==r||s.height!==i)&&(s.set(r,i),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(dd),this.setResolution(e,dd.x,dd.y)}deleteCamera(e){let t=this.cameras,n=this.cameraMap;if(n.has(e)){let a=t.indexOf(e);return t.splice(a,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:a={}}=t;switch((n&&n.gltfUpAxis||"y").toLowerCase()){case"x":this._upRotationMatrix.makeRotationAxis(j0,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(V0,Math.PI/2);break}if("3DTILES_ellipsoid"in a){let r=a["3DTILES_ellipsoid"],{ellipsoid:i}=this;i.name=r.body,r.radii?i.radius.set(...r.radii):i.radius.set(1,1,1)}return t})}prepareForTraversal(){let e=this.group,t=this.cameras,n=this.cameraMap,a=this.cameraInfo;for(;a.length>t.length;)a.pop();for(;a.length<t.length;)a.push({frustum:new z0,isOrthographic:!1,sseDenominator:-1,position:new F.Vector3,invScale:-1,pixelSize:0});Ro.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(Ro.x-Ro.y,Ro.x-Ro.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,i=a.length;r<i;r++){let s=t[r],l=a[r],o=l.frustum,c=l.position,d=n.get(s);(d.width===0||d.height===0)&&console.warn("TilesRenderer: resolution for camera error calculation is not set.");let p=s.projectionMatrix.elements;if(l.isOrthographic=p[15]===1,l.isOrthographic){let h=2/p[0],f=2/p[5];l.pixelSize=Math.max(f/d.height,h/d.width)}else l.sseDenominator=2/p[5]/d.height;cl.copy(e.matrixWorld),cl.premultiply(s.matrixWorldInverse),cl.premultiply(s.projectionMatrix),o.setFromProjectionMatrix(cl,s.coordinateSystem,s.reversedDepth),c.set(0,0,0),c.applyMatrix4(s.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 a=new F.Matrix4;if(e.transform){let s=e.transform;for(let l=0;l<16;l++)a.elements[l]=s[l]}n&&a.premultiply(n.engineData.transform);let r=new F.Matrix4().copy(a).invert(),i=new D0;"sphere"in e.boundingVolume&&i.setSphereData(...e.boundingVolume.sphere,a),"box"in e.boundingVolume&&i.setObbData(e.boundingVolume.box,a),"region"in e.boundingVolume&&i.setRegionData(this.ellipsoid,...e.boundingVolume.region),e.engineData.transform=a,e.engineData.transformInverse=r,e.engineData.boundingVolume=i,e.engineData.geometry=null,e.engineData.materials=null,e.engineData.textures=null,e.toJSON=H0}async parseTile(e,t,n,a,r){let i=t.engineData,s=Qs(a),l=this.fetchOptions,o=this.manager,c=null,d=i.transform,p=this._upRotationMatrix,h=(Vi(e)||n).toLowerCase();switch(h){case"b3dm":{let m=new md(o);m.workingPath=s,m.fetchOptions=l,m.adjustmentTransform.copy(p),c=m.parse(e);break}case"pnts":{let m=new hd(o);m.workingPath=s,m.fetchOptions=l,c=m.parse(e);break}case"i3dm":{let m=new gd(o);m.workingPath=s,m.fetchOptions=l,m.adjustmentTransform.copy(p),m.ellipsoid.copy(this.ellipsoid),c=m.parse(e);break}case"cmpt":{let m=new Ch(o);m.workingPath=s,m.fetchOptions=l,m.adjustmentTransform.copy(p),m.ellipsoid.copy(this.ellipsoid),c=m.parse(e).then(_=>_.scene);break}case"gltf":case"glb":{let m=o.getHandler("path.gltf")||o.getHandler("path.glb")||new dl.GLTFLoader(o);m.setWithCredentials(l.credentials==="include"),m.setRequestHeader(l.headers||{}),l.credentials==="include"&&l.mode==="cors"&&m.setCrossOrigin("use-credentials");let _=m.resourcePath||m.path||s;!/[\\/]$/.test(_)&&_.length&&(_+="/"),c=m.parseAsync(e,_).then(M=>{M.scene=M.scene||new F.Group;let{scene:C}=M;return C.updateMatrix(),C.matrix.multiply(p).decompose(C.position,C.quaternion,C.scale),M});break}default:c=this.invokeOnePlugin(m=>m.parseToMesh&&m.parseToMesh(e,t,n,a,r));break}let f=await c;if(f===null)throw Error(`TilesRenderer: Content type "${h}" not supported.`);let b,w;f.isObject3D?(b=f,w=null):(b=f.scene,w=f),b.updateMatrix(),b.matrix.premultiply(d),b.matrix.decompose(b.position,b.quaternion,b.scale),await this.invokeAllPlugins(m=>m.processTileModel&&m.processTileModel(b,t)),b.traverse(m=>{m[Ah]=m.frustumCulled,m.userData.tile=t}),_h(b,!this.autoDisableRendererCulling);let k=[],x=[],u=[];if(b.traverse(m=>{if(m.geometry&&x.push(m.geometry),m.material){let _=m.material;k.push(m.material);for(let M in _){let C=_[M];C&&C.isTexture&&u.push(C)}}}),r.aborted){for(let m=0,_=u.length;m<_;m++){let M=u[m];M.image instanceof ImageBitmap&&M.image.close(),M.dispose()}return}i.materials=k,i.geometry=x,i.textures=u,i.scene=b,i.metadata=w}disposeTile(e){super.disposeTile(e);let t=e.engineData;if(t.scene){let n=t.materials,a=t.geometry,r=t.textures,i=t.scene.parent;t.scene.traverse(s=>{s.userData.meshFeatures&&s.userData.meshFeatures.dispose(),s.userData.structuralMetadata&&s.userData.structuralMetadata.dispose()});for(let s=0,l=a.length;s<l;s++)a[s].dispose();for(let s=0,l=n.length;s<l;s++)n[s].dispose();for(let s=0,l=r.length;s<l;s++){let o=r[s];o.image instanceof ImageBitmap&&o.image.close(),o.dispose()}i&&i.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:a,group:r}=this;n&&(t?r.add(n):(r.remove(n),a.has(e)&&(n.parent=r))),super.setTileVisible(e,t)}calculateBytesUsed(e,t){let n=this._bytesUsed;return!n.has(e)&&t&&n.set(e,F0(t)),n.get(e)??null}calculateTileViewError(e,t){let n=e.engineData,a=this.cameras,r=this.cameraInfo,i=n.boundingVolume,s=!1,l=0,o=1/0,c=0,d=1/0;for(let p=0,h=a.length;p<h;p++){let f=r[p],b,w;if(f.isOrthographic){let x=f.pixelSize;b=e.geometricError/x,w=1/0}else{let x=f.sseDenominator;w=i.distanceToPoint(f.position),b=w===0?1/0:e.geometricError/(w*x)}let k=r[p].frustum;i.intersectsFrustum(k)&&(s=!0,l=Math.max(l,b),o=Math.min(o,w)),c=Math.max(c,b),d=Math.min(d,w)}s?(t.inView=!0,t.error=l,t.distanceFromCamera=o):(t.inView=!1,t.error=c,t.distanceFromCamera=d)}dispose(){super.dispose(),this.group.removeFromParent()}};var Eh=require("react/jsx-runtime");function vd({url:e,rotation:t=[0,0,0],errorTarget:n=8,cacheSize:a=800,onModelLoaded:r,onLoadError:i}){let{camera:s,gl:l,invalidate:o}=(0,ul.useThree)(),c=(0,Ba.useRef)(!1),d=(0,Ba.useMemo)(()=>{let p=new bd(e);return p.errorTarget=n,p.lruCache.maxSize=a,p},[a,n,e]);return(0,Ba.useEffect)(()=>{c.current=!1;let p=()=>o(),h=()=>{c.current||(c.current=!0,r?.(d.group),o())},f=b=>{i?.(b.error)};return d.setCamera(s),d.setResolutionFromRenderer(s,l),d.addEventListener("needs-update",p),d.addEventListener("load-model",h),d.addEventListener("load-error",f),()=>{d.removeEventListener("needs-update",p),d.removeEventListener("load-model",h),d.removeEventListener("load-error",f),d.deleteCamera(s),d.dispose()}},[s,l,o,i,r,d]),(0,ul.useFrame)(()=>{d.setResolutionFromRenderer(s,l),d.update()}),(0,Eh.jsx)("primitive",{object:d.group,rotation:t})}var De=require("react"),xd=require("@react-three/drei"),Hi=require("@react-three/fiber"),Or=require("three");var An=require("react/jsx-runtime"),G0=.02;function kh(e,t){let n=(0,De.useRef)(null),a=(0,Hi.useThree)(c=>c.scene),r=(0,De.useRef)(null),i=(0,De.useMemo)(()=>new Or.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),s=(0,De.useMemo)(()=>new Or.Vector3,[]),l=(0,De.useMemo)(()=>new Or.Vector3,[]),o=(0,De.useMemo)(()=>new Or.Vector3,[]);return(0,De.useEffect)(()=>{r.current=null},[e.anchorNodeName]),(0,Hi.useFrame)(({camera:c})=>{let d=n.current,p=d?.parent;if(!d||!p)return;let h=r.current;if(e.anchorNodeName&&(!h||!h.parent)&&(h=Sr(a,e.anchorNodeName),r.current=h),h?(h.updateWorldMatrix(!0,!1),s.copy(i).applyMatrix4(h.matrixWorld)):(s.copy(i),p.localToWorld(s)),t){let f=t.current.get(e.id);f||(f=new Or.Vector3,t.current.set(e.id,f)),f.copy(s)}o.copy(c.position).sub(s),o.lengthSq()>0?(o.normalize(),l.copy(s).addScaledVector(o,G0)):l.copy(s),p.worldToLocal(l),d.position.copy(l)}),n}function W0({annotation:e,occluders:t,worldPositionsRef:n,onClick:a,onHover:r,showAnnotationOnHover:i}){let[s,l]=(0,De.useState)(!1),o=kh(e,n),[c,d]=(0,De.useState)(!1),[p,h]=(0,De.useState)(1),f=(0,De.useRef)(null),b=(0,De.useRef)(null),w=(0,De.useRef)(null);(0,De.useEffect)(()=>()=>{f.current&&(clearTimeout(f.current),f.current=null),w.current&&(clearTimeout(w.current),w.current=null)},[]);let k=M=>{M.stopPropagation(),M.preventDefault(),f.current&&(clearTimeout(f.current),f.current=null),f.current=window.setTimeout(()=>{a?.(e),f.current=null},10)},x=M=>{M.stopPropagation(),d(!0),h(100),w.current&&(clearTimeout(w.current),w.current=null),r?.(e),i&&a?.(e)},u=M=>{M.stopPropagation(),d(!1),h(1),w.current&&clearTimeout(w.current),w.current=window.setTimeout(()=>{r?.(null),i&&r?.(null),w.current=null},50)},m=M=>{M.stopPropagation();let C=M.currentTarget;C.dataset.pointerX=String(M.clientX),C.dataset.pointerY=String(M.clientY)},_=M=>{M.stopPropagation();let C=M.currentTarget,A=parseFloat(C.dataset.pointerX||"0"),g=parseFloat(C.dataset.pointerY||"0"),S=M.clientX-A,v=M.clientY-g;Math.sqrt(S*S+v*v)<10&&k(M)};return(0,An.jsx)("group",{ref:o,children:(0,An.jsx)(xd.Html,{center:!0,occlude:t,onOcclude:l,pointerEvents:s?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:s?"none":"auto",zIndex:p},className:"annotation-html-wrapper",transparent:!0,children:(0,An.jsx)("div",{ref:b,className:`ri-annotationMarker ${c?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:s?"none":"flex"},onPointerDown:m,onPointerUp:_,onPointerEnter:x,onPointerLeave:u,onDoubleClick:M=>{M.stopPropagation(),a?.(e)},role:"button",tabIndex:0,"aria-label":`Annotation ${e.id}`,children:(0,An.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function X0({annotation:e,occluders:t,popupRef:n,onClose:a,hideCloseButton:r=!1}){let[i,s]=(0,De.useState)(!1),l=kh(e),o=(0,An.jsxs)("div",{ref:n,className:"ri-viewAnnotationPopup",style:{display:i?"none":"block"},onPointerDown:c=>c.stopPropagation(),onClick:c=>c.stopPropagation(),children:[(0,An.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,An.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!r&&(0,An.jsx)("button",{onClick:c=>{c.stopPropagation(),a?.()},className:"ri-viewAnnotationClose","aria-label":"Close annotation",children:"\xD7"})]}),e.description&&(0,An.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description})]});return(0,An.jsx)("group",{ref:l,children:(0,An.jsx)(xd.Html,{occlude:t,onOcclude:s,pointerEvents:i?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:i?"none":"auto",zIndex:1e3},transparent:!0,children:o})})}function yd({annotations:e,sceneConfig:t,activeAnnotation:n,popupRef:a,canvasRootRef:r,worldPositionsRef:i,modelLoaded:s,onAnnotationClick:l,onAnnotationHover:o,onCloseAnnotation:c,hideCloseButton:d=!1,showAnnotationOnHover:p=!1}){let h=(0,Hi.useThree)(T=>T.invalidate),f=(0,Hi.useThree)(T=>T.scene),[b,w]=(0,De.useState)(null),[k,x]=(0,De.useState)(!1),u=(0,De.useRef)(null),m=(0,De.useRef)(null),_=(0,De.useRef)(null),M=(0,De.useMemo)(()=>{let T=[];return f.traverse(G=>{let W=G;W.isMesh&&!W.isSkinnedMesh&&T.push({current:G})}),T},[f,e,s]),C=(0,De.useCallback)(()=>{h();let T=()=>{h(),m.current=window.requestAnimationFrame(()=>{h(),m.current=null})};m.current=window.requestAnimationFrame(T)},[h]);(0,De.useEffect)(()=>{C()},[e,C]),(0,De.useEffect)(()=>{C()},[n,C]),(0,De.useEffect)(()=>()=>{m.current!==null&&window.cancelAnimationFrame(m.current),_.current&&clearTimeout(_.current)},[]);let A=k?b:n||b,g=(0,De.useMemo)(()=>A?e.find(T=>T.id===A.id)??A:null,[A,e]),S=(0,De.useCallback)(T=>{if(k&&b?.id===T.id){x(!1),w(null),c?.();return}x(!0),w(T),l?.(T)},[k,b,l,c]),v=(0,De.useCallback)(T=>{o?.(T),p&&!k&&(_.current&&(clearTimeout(_.current),_.current=null),T?w(T):_.current=window.setTimeout(()=>{w(null),c?.(),_.current=null},100))},[k,o,p,c]),P=(0,De.useCallback)(()=>{x(!1),w(null),c?.()},[c]),U=(0,De.useCallback)(T=>{let G=T.target;if(G.closest?.(".ri-annotationMarker")||G.closest?.(".ri-viewAnnotationPopup")||G.closest?.(".annotation-html-wrapper"))return;let W=r.current;W&&W.contains(G)&&(x(!1),w(null),c?.())},[r,c]),E=(0,De.useCallback)(T=>{T.key==="Escape"&&k&&(x(!1),w(null),c?.())},[k,c]);(0,De.useEffect)(()=>{let T=r.current;return T&&(T.addEventListener("click",U),T.addEventListener("pointerdown",U)),document.addEventListener("keydown",E),()=>{T&&(T.removeEventListener("click",U),T.removeEventListener("pointerdown",U)),document.removeEventListener("keydown",E)}},[r,U,E]);let V=(0,De.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(T=>T*Math.PI/180),[t?.model.rotation]);return(0,Hi.useFrame)((T,G)=>{u.current&&(u.current.rotation.x=Or.MathUtils.lerp(u.current.rotation.x,V[0],1-Math.exp(-5*G)),u.current.rotation.y=Or.MathUtils.lerp(u.current.rotation.y,V[1],1-Math.exp(-5*G)),u.current.rotation.z=Or.MathUtils.lerp(u.current.rotation.z,V[2],1-Math.exp(-5*G)))}),(0,An.jsxs)("group",{ref:u,children:[e.map(T=>{let G=`${T.worldPosition.join(",")}-${T.title}-${T.id}`;return(0,An.jsx)(W0,{annotation:T,occluders:M,worldPositionsRef:i,onClick:S,onHover:v,showAnnotationOnHover:p},G)}),g?(0,An.jsx)(X0,{annotation:g,occluders:M,popupRef:a,onClose:P,hideCloseButton:d},`popup-${g.id}`):null]})}var Bo=require("react"),Do=require("@react-three/drei"),Gi=require("three"),Pn=require("react/jsx-runtime"),$0="#22d3ee",q0="#facc15";function pl(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function Y0(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function ml({position:e,children:t}){return(0,Pn.jsx)(Do.Html,{center:!0,position:e,zIndexRange:[20,0],children:(0,Pn.jsx)("div",{className:"ri-measureLabel",children:t})})}function K0({box:e,unit:t}){let n=(0,Bo.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]),a=(0,Bo.useMemo)(()=>{let[l,o,c]=e.size;return new Gi.EdgesGeometry(new Gi.BoxGeometry(l||1e-4,o||1e-4,c||1e-4))},[e.size]);(0,Bo.useEffect)(()=>()=>{a.dispose()},[a]);let[r,i,s]=e.size;return(0,Pn.jsxs)("group",{position:n,children:[(0,Pn.jsx)("lineSegments",{geometry:a,children:(0,Pn.jsx)("lineBasicMaterial",{color:q0})}),(0,Pn.jsxs)(ml,{position:[0,-i/2,s/2],children:["W ",pl(r,t)]}),(0,Pn.jsxs)(ml,{position:[-r/2,0,s/2],children:["H ",pl(i,t)]}),(0,Pn.jsxs)(ml,{position:[r/2,-i/2,0],children:["D ",pl(s,t)]})]})}function wd({points:e,unit:t,box:n,showDimensions:a}){return(0,Pn.jsxs)("group",{children:[e.map(r=>(0,Pn.jsx)(Do.Html,{center:!0,position:r.position,zIndexRange:[15,0],children:(0,Pn.jsx)("div",{className:"ri-measureDot"})},r.id)),e.slice(1).map((r,i)=>{let s=e[i].position,l=r.position,o=new Gi.Vector3(...s).distanceTo(new Gi.Vector3(...l));return(0,Pn.jsxs)("group",{children:[(0,Pn.jsx)(Do.Line,{points:[s,l],color:$0,lineWidth:2}),(0,Pn.jsx)(ml,{position:Y0(s,l),children:pl(o,t)})]},`${e[i].id}-${r.id}`)}),a&&n?(0,Pn.jsx)(K0,{box:n,unit:t}):null]})}var Ke=require("react"),Wi=require("@react-three/xr"),Bh=require("@react-three/fiber"),Oo=require("three"),Cr=require("react/jsx-runtime"),Z0=1,Rh=1,J0=.1,Q0=10;function ex(e,t){let[n,a,r]=e.size,i=(e.min[0]+e.max[0])/2,s=(e.min[2]+e.max[2])/2,l=Math.max(n,a,r)||1;return{scale:t==="real-world"?1:Z0/l,offset:[-i,-e.min[1],-s]}}function Nh(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function Lh(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var tx=(0,Ke.forwardRef)(function({box:t,scaleMode:n,children:a,onARStateChange:r},i){let s=(0,Ke.useRef)(null),l=(0,Ke.useRef)(null),o=(0,Ke.useRef)(null),c=(0,Wi.useXR)(G=>G.session!=null),d=(0,Wi.useXR)(G=>G.mode==="immersive-ar"),p=(0,Ke.useMemo)(()=>t?ex(t,n):null,[t,n]),h=(0,Ke.useRef)(new Oo.Vector3(0,0,-Rh)),f=(0,Ke.useRef)(1),b=(0,Ke.useRef)(0),w=(0,Ke.useRef)(!0),k=(0,Ke.useRef)(!1),x=(0,Ke.useMemo)(()=>new Oo.Matrix4,[]),u=(0,Ke.useRef)(new Oo.Vector3),m=(0,Ke.useRef)(!1),_=(0,Ke.useRef)(null),M=(0,Ke.useRef)(!1),C=(0,Ke.useRef)(0),A=(0,Ke.useRef)(0),g=(0,Ke.useRef)(1),S=(0,Ke.useRef)(0),v=(0,Ke.useCallback)(()=>{if(!r||!d)return;let G={canPlace:m.current,isPlacementMode:w.current,isModelPlaced:k.current},W=_.current;W&&W.canPlace===G.canPlace&&W.isPlacementMode===G.isPlacementMode&&W.isModelPlaced===G.isModelPlaced||(_.current=G,r(G))},[d,r]),P=(0,Ke.useCallback)(()=>!d||!m.current?!1:(h.current.copy(u.current),k.current=!0,w.current=!1,v(),!0),[v,d]),U=(0,Ke.useCallback)(()=>{d&&(w.current=!0,v())},[v,d]),E=(0,Ke.useCallback)(()=>{let G=P();return!G&&d&&(w.current=!1,v()),G},[v,d,P]),V=(0,Ke.useCallback)(()=>{d&&(w.current=!1,v())},[v,d]);(0,Ke.useImperativeHandle)(i,()=>({placeCurrent:P,startPlacementMode:U,finishPlacementMode:E,cancelPlacementMode:V}),[V,E,P,U]),(0,Ke.useEffect)(()=>{if(!c){h.current.set(0,0,-Rh),f.current=1,b.current=0,m.current=!1,M.current=!1,w.current=!0,k.current=!1,_.current=null;return}d&&(m.current=!1,M.current=!1,w.current=!0,k.current=!1,_.current=null,v())},[v,c,d]),(0,Wi.useXRHitTest)((G,W)=>{if(!d||G.length===0){m.current&&(m.current=!1,v());return}W(x,G[0])&&(u.current.setFromMatrixPosition(x),m.current||(m.current=!0,v()))},"viewer"),(0,Wi.useXRInputSourceEvent)("all","select",()=>{!d||M.current||!w.current||P()},[d,P]),(0,Ke.useEffect)(()=>{if(!d)return;let G=N=>{N.touches.length===2&&(M.current=!0,C.current=Nh(N.touches),A.current=Lh(N.touches),g.current=f.current,S.current=b.current)},W=N=>{if(!M.current||N.touches.length!==2)return;N.preventDefault();let Z=Nh(N.touches);if(C.current>0){let de=Z/C.current;f.current=Math.min(Q0,Math.max(J0,g.current*de))}let $=Lh(N.touches);b.current=S.current-($-A.current)},R=N=>{N.touches.length===0&&requestAnimationFrame(()=>{M.current=!1})};return window.addEventListener("touchstart",G),window.addEventListener("touchmove",W,{passive:!1}),window.addEventListener("touchend",R),window.addEventListener("touchcancel",R),()=>{window.removeEventListener("touchstart",G),window.removeEventListener("touchmove",W),window.removeEventListener("touchend",R),window.removeEventListener("touchcancel",R)}},[d]),(0,Bh.useFrame)(()=>{let G=s.current,W=l.current;if(!G||!W)return;!c||!p?(G.visible=!0,G.position.set(0,0,0),G.rotation.set(0,0,0),W.scale.setScalar(1)):(G.visible=!d||k.current,G.position.copy(h.current),G.rotation.set(0,b.current,0),W.scale.setScalar(p.scale*f.current));let R=o.current;if(R){let N=d&&w.current&&m.current;R.visible=N,N&&R.position.copy(u.current)}});let T=c&&p?p.offset:[0,0,0];return(0,Cr.jsxs)(Cr.Fragment,{children:[(0,Cr.jsxs)("mesh",{ref:o,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,Cr.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,Cr.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,Cr.jsx)("group",{ref:s,children:(0,Cr.jsx)("group",{ref:l,children:(0,Cr.jsx)("group",{position:T,children:a})})})]})}),Dh=tx;var Nt=require("react"),hl=require("@react-three/fiber"),_n=require("three"),nx=1.2;function Sd({controlsRef:e,sceneRef:t,config:n,playing:a,resetOnPlay:r=!1,onFinished:i,onUserInteract:s,onStop:l}){let o=(0,hl.useThree)(V=>V.invalidate),c=(0,Nt.useMemo)(()=>n.waypoints??[],[n.waypoints]),d=c.length>=2,p=n.loop??!0,h=(0,Nt.useMemo)(()=>{if(c.length<2)return 24;let V=0;for(let T=0;T<c.length-1;T++)V+=c[T].segmentDuration??3.5;return p&&c.length>1&&(V+=c[c.length-1].segmentDuration??3.5),Math.max(V,4)},[c,p]),f=n.duration??h,b=(0,Nt.useMemo)(()=>c.map(V=>[...V.position,...V.target,V.azimuthAngle??"",V.polarAngle??"",V.segmentDuration??""].join(",")).join(";"),[c]),w=(0,Nt.useMemo)(()=>{let V=[];if(c.length<2)return V;let T=0;for(let G=0;G<c.length-1;G++)T+=c[G].segmentDuration??3.5,V.push(T);return p&&c.length>1&&(T+=c[c.length-1].segmentDuration??3.5,V.push(T)),V},[c,p]),k=(0,Nt.useMemo)(()=>V=>{if(c.length<2||w.length===0)return V/f;let T=w[w.length-1],G=p?V%f:Math.min(V,f),W=f>0?G/f*T:0;for(let R=0;R<w.length;R++)if(W<=w[R]){let N=R===0?0:w[R-1],Z=w[R]-N,$=Z>0?(W-N)/Z:0,de=p?c.length:c.length-1,Ne=R/de,be=1/de;return Ne+$*be}return 1},[c.length,w,f,p]),x=(0,Nt.useMemo)(()=>d?{position:new _n.CatmullRomCurve3(c.map(V=>new _n.Vector3(...V.position)),p,"catmullrom",.5),target:new _n.CatmullRomCurve3(c.map(V=>new _n.Vector3(...V.target)),p,"catmullrom",.5)}:null,[b,d,p]),u=(0,Nt.useMemo)(()=>{if(!d||!c.every(T=>Number.isFinite(T.azimuthAngle)&&Number.isFinite(T.polarAngle)))return null;let V=c.map(T=>({azimuth:T.azimuthAngle,polar:T.polarAngle,distance:new _n.Vector3(...T.position).distanceTo(new _n.Vector3(...T.target))}));for(let T=1;T<V.length;T+=1){let G=V[T-1].azimuth,W=V[T].azimuth;V[T].azimuth=W+Math.round((G-W)/(Math.PI*2))*Math.PI*2}return V},[b,d]),m=(0,Nt.useRef)(0),_=(0,Nt.useRef)(0),M=(0,Nt.useRef)(new _n.Vector3),C=(0,Nt.useRef)(new _n.Vector3),A=(0,Nt.useRef)(!1),g=(0,Nt.useRef)(0),S=(0,Nt.useRef)(!1),v=(0,Nt.useRef)(null),P=(0,Nt.useMemo)(()=>new _n.Vector3,[]),U=(0,Nt.useMemo)(()=>new _n.Vector3,[]),E=(0,Nt.useMemo)(()=>new _n.Spherical,[]);return(0,Nt.useEffect)(()=>{m.current=0,g.current=0,_.current=0,S.current=!1},[b,p,f]),(0,Nt.useEffect)(()=>{r&&(g.current=0,m.current=0,S.current=!1)},[r]),(0,Nt.useEffect)(()=>{if(!a){A.current=!1,m.current>0&&!r?g.current=m.current:r&&(g.current=0),(m.current>0||S.current)&&l?.();return}m.current>=f&&!p&&(m.current=0,g.current=0,S.current=!1);let V=e.current;if(V&&(V.getPosition(M.current),V.getTarget(C.current)),r||S.current||g.current===0?(m.current=0,g.current=0,S.current=!1):g.current>0&&g.current<f?m.current=g.current:(m.current=0,g.current=0),_.current=0,!d){let T=t.current;if(T){let G=new _n.Box3().setFromObject(T).getBoundingSphere(new _n.Sphere);v.current={center:G.center.clone(),radius:G.radius>0?G.radius:1}}}A.current=!0,o()},[a,d,e,t,o,f,p,b,r,l]),(0,Nt.useEffect)(()=>{if(!a||!s)return;let V=e.current;if(!V)return;let T=()=>{S.current||s()};return V.addEventListener("controlstart",T),()=>V.removeEventListener("controlstart",T)},[a,e,s]),(0,hl.useFrame)((V,T)=>{if(!a||!A.current)return;let G=e.current;if(!G)return;m.current+=T,_.current+=T;let W=k(m.current),R=!p&&m.current>=f;if(W=p?W%1:Math.min(W,1),x)if(x.target.getPoint(W,U),u){let Z=p?u.length:u.length-1,$=Math.min(W,1)*Z,de=Math.min(Math.floor($),Z-1),Ne=(de+1)%u.length,be=W>=1?1:$-de,Ce=be*be*(3-2*be),ke=u[de],ze=u[Ne],St=ze.azimuth+Math.round((ke.azimuth-ze.azimuth)/(Math.PI*2))*Math.PI*2,Ft=ke.azimuth+(St-ke.azimuth)*Ce,it=ke.polar+(ze.polar-ke.polar)*Ce,Ue=ke.distance+(ze.distance-ke.distance)*Ce;E.set(Math.max(Ue,1e-6),Math.min(Math.max(it,1e-6),Math.PI-1e-6),Ft),P.setFromSpherical(E).add(U)}else x.position.getPoint(W,P);else{let Z=v.current;if(!Z)return;let $=W*Math.PI*2,de=Z.radius*2.2;P.set(Z.center.x+Math.cos($)*de,Z.center.y+Z.radius*.6,Z.center.z+Math.sin($)*de),U.copy(Z.center)}let N=Math.min(_.current/nx,1);if(N<1){let Z=N*N*(3-2*N);P.lerpVectors(M.current,P,Z),U.lerpVectors(C.current,U,Z)}if(G.setLookAt(P.x,P.y,P.z,U.x,U.y,U.z,!1),R){A.current=!1,S.current=!0,m.current=0,g.current=0,i?.();return}o()}),null}var fl=require("react");var rx="ri:license-grant:v1",ix={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},Oh=new Map;function zh(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function Ih(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return zh(t.padEnd(Math.ceil(t.length/4)*4,"="))}function ax(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 _d(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 Md(e,t){return`${rx}:${t}:${e}`}function ox(e,t){let n=Oh.get(e);if(n)return n;let a=crypto.subtle.importKey("spki",zh(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return Oh.set(e,a),a}async function Uh(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[a,r,i,s,...l]=e.split("."),o=ix[r];if(a!=="ri1"||!o||!i||!s||l.length>0)return null;let c=JSON.parse(new TextDecoder().decode(Ih(i)));if(!ax(c)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await ox(r,o),Ih(s),new TextEncoder().encode(`${a}.${r}.${i}`)))return null;let p=Math.floor(Date.now()/1e3),h=c.expiresAt-c.issuedAt;return c.licenseKeyHash!==t||c.domain!==n||c.expiresAt<=p||c.issuedAt>p+300||h<=0||h>43200?null:{environment:c.environment,tier:c.tier,expiresAt:c.expiresAt}}catch{return null}}async function Fh(e,t,n){try{let a=await _d(t);return await Uh(e,a,n)?(localStorage.setItem(Md(a,n),e),!0):!1}catch{return!1}}async function Vh(e,t){try{let n=await _d(e),a=Md(n,t),r=localStorage.getItem(a);if(!r)return null;let i=await Uh(r,n,t);return i||localStorage.removeItem(a),i}catch{return null}}async function Cd(e,t){try{let n=await _d(e);localStorage.removeItem(Md(n,t))}catch{}}var sx=["localhost","127.0.0.1","0.0.0.0"],lx=e=>sx.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),cx="https://react-immersive.liveroom.dev/api/validate-license",dx=()=>typeof window<"u",ux=300*1e3,px=5e3,mx=400,Td=new Map,Pd=new Map,Xi=class extends Error{},Hh=async(e,t,n)=>{let a=await Vh(e,t);return a?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:a.environment,tier:a.tier,isLocalDomain:n}):null},jh=async(e,t,n)=>{let a=await Hh(e,t,n);return a||(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})},hx=e=>e instanceof Xi||e instanceof TypeError,fx=()=>new Promise(e=>setTimeout(e,mx)),gx=e=>e==="development"||e==="production",bx=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&&!gx(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},vx=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},xx=(e,t,n)=>`${n}::${e}::${t}`,yx=e=>{let t=Td.get(e);return t?Date.now()-t.timestamp>ux?(Td.delete(e),null):t.result:null},wx=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),Sx=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function _x(e,t,n,a){let r=xx(e,t,a),i=yx(r);if(i)return i;let s=Pd.get(r);if(s)return s;let l=(async()=>{for(let o=0;o<2;o+=1)try{return await Mx(e,t,n,r,a)}catch(c){if(!hx(c))throw c;if(o===0){let d=await Hh(e,t,n);if(d)return d;await fx();continue}return jh(e,t,n)}return jh(e,t,n)})().finally(()=>{Pd.delete(r)});return Pd.set(r,l),l}async function Mx(e,t,n,a,r){let i=new AbortController,s=setTimeout(()=>i.abort(),px),l;try{l=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:i.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(d){throw i.signal.aborted?new Xi("License validation timed out"):d}finally{clearTimeout(s)}let o;try{o=await l.json()}catch{throw new Xi(`License server returned a non-JSON response${l.status?` (${l.status})`:""}`)}if(!l.ok){if(l.status===429||l.status>=500)throw new Xi(`License server error (${l.status})`);let d=vx(o)??`License validation failed${l.status?` (${l.status})`:""}`;return await Cd(e,t),Sx(d,n)}if(!bx(o))throw new Xi("License server returned an unexpected payload");let c=wx(o,n);return c.status==="valid"?(Td.set(a,{result:c,timestamp:Date.now()}),o.offlineGrant&&(await Fh(o.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await Cd(e,t),c}var gl=(e,t=cx)=>{let[n,a]=(0,fl.useState)({status:"checking",isLocalDomain:!1});return(0,fl.useEffect)(()=>{if(!dx())return;let r=!1,i=d=>{r||a(d)},s=e.trim(),l=window.location.hostname.toLowerCase(),o=lx(l);return i({status:"checking",isLocalDomain:o}),s?((async()=>{try{i(await _x(s,l,o,t))}catch(d){let p=d instanceof TypeError?"Could not reach license server":d instanceof Error?d.message:"License validation failed";i({status:"invalid",reason:p,isLocalDomain:o})}})(),()=>{r=!0}):(i({status:"invalid",reason:"No license key provided",isLocalDomain:o}),()=>{r=!0})},[e,t]),n};var Ht=require("react");var Mn=require("react/jsx-runtime"),Cx={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},Px={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"},bl=({direction:e})=>{let t=Cx[e],n=Px[e];return(0,Mn.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,Mn.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,Mn.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},ti=16,Tx={"bottom-left":{bottom:ti,left:ti,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:ti,right:ti,top:"auto",left:"auto",transform:"none"},"top-left":{top:ti,left:ti,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:ti,right:ti,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:ti,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},Ax=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:a=.001,rotateSensitivity:r=.01,position:i="center-bottom"})=>{let s=(0,Ht.useRef)(null),[l,o]=(0,Ht.useState)({x:0,y:0}),c=(0,Ht.useRef)(!1),d=(0,Ht.useRef)({x:0,y:0}),p=(0,Ht.useRef)(),h=(0,Ht.useRef)(),f=(0,Ht.useRef)(null),b=(0,Ht.useRef)(0),w=()=>e.current,k=(E,V,T)=>{let G=Math.hypot(E,V);if(G>T){let W=T/G;return{x:E*W,y:V*W}}return{x:E,y:V}},x=E=>{let T=Math.abs(E);return T<.12?0:Math.sign(E)*((T-.12)/(1-.12))},u=(0,Ht.useCallback)(()=>{let E=()=>{let{x:V,y:T}=d.current,G=x(V),W=x(T);if(t&&(G!==0||W!==0)){let R=w();R&&R.rotate(-G*r,-W*r,!0)}p.current=requestAnimationFrame(E)};p.current=requestAnimationFrame(E)},[t,r]),m=(0,Ht.useCallback)(()=>{p.current&&cancelAnimationFrame(p.current)},[]),_=(0,Ht.useCallback)((E,V)=>{if(!s.current||!c.current)return;let T=s.current.getBoundingClientRect(),G=T.left+T.width/2,W=T.top+T.height/2,R=T.width/2-18,N=E-G,Z=V-W,$=k(N,Z,R);o($),d.current={x:$.x/R,y:$.y/R}},[]),M=(0,Ht.useCallback)(E=>{if(!t)return;E.preventDefault(),E.stopPropagation(),c.current=!0,u();let V="touches"in E?E.touches[0]:E;_(V.clientX,V.clientY)},[t,u,_]),C=(0,Ht.useCallback)(E=>{if(!c.current)return;E.preventDefault();let V="touches"in E?E.touches[0]:E;_(V.clientX,V.clientY)},[_]),A=(0,Ht.useCallback)(()=>{c.current=!1,o({x:0,y:0}),d.current={x:0,y:0},m()},[m]),g=a*10,S=(0,Ht.useCallback)(E=>{t&&w()?.forward(E*g,!0)},[t,g]),v=(0,Ht.useCallback)(E=>{t&&w()?.truck(E*g,0,!0)},[t,g]),P=(0,Ht.useCallback)((E,V,T)=>{if(!t)return;h.current&&cancelAnimationFrame(h.current),f.current={control:E,amount:V,action:T},b.current=0,T(V);let G=W=>{if(!f.current)return;if(b.current===0){b.current=W,h.current=requestAnimationFrame(G);return}if(W-b.current>200){let{amount:N,action:Z}=f.current;Z(N),b.current=W}h.current=requestAnimationFrame(G)};h.current=requestAnimationFrame(G)},[t]),U=(0,Ht.useCallback)(E=>{f.current?.control===E&&(h.current&&(cancelAnimationFrame(h.current),h.current=void 0),f.current=null,b.current=0)},[]);return(0,Ht.useEffect)(()=>(window.addEventListener("mousemove",C),window.addEventListener("mouseup",A),window.addEventListener("touchmove",C,{passive:!1}),window.addEventListener("touchend",A),window.addEventListener("touchcancel",A),()=>{window.removeEventListener("mousemove",C),window.removeEventListener("mouseup",A),window.removeEventListener("touchmove",C),window.removeEventListener("touchend",A),window.removeEventListener("touchcancel",A),m(),h.current&&cancelAnimationFrame(h.current)}),[C,A,m]),t?(0,Mn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...Tx[i]},children:(0,Mn.jsxs)("div",{className:"mc__dpad",children:[(0,Mn.jsx)("button",{"aria-label":"Move forward",className:"mc__arrow mc__arrow--up",onMouseDown:()=>P("up",1,S),onMouseUp:()=>U("up"),onMouseLeave:()=>U("up"),onTouchStart:E=>{E.preventDefault(),P("up",1,S)},onTouchEnd:()=>U("up"),onTouchCancel:()=>U("up"),children:(0,Mn.jsx)(bl,{direction:"up"})}),(0,Mn.jsxs)("div",{className:"mc__middle-row",children:[(0,Mn.jsx)("button",{"aria-label":"Move left",className:"mc__arrow mc__arrow--left",onMouseDown:()=>P("left",-1,v),onMouseUp:()=>U("left"),onMouseLeave:()=>U("left"),onTouchStart:E=>{E.preventDefault(),P("left",-1,v)},onTouchEnd:()=>U("left"),onTouchCancel:()=>U("left"),children:(0,Mn.jsx)(bl,{direction:"left"})}),(0,Mn.jsx)("div",{ref:s,className:"mc__joystick",onMouseDown:M,onTouchStart:M,children:(0,Mn.jsx)("div",{className:"mc__knob",style:{transform:`translate(${l.x}px, ${l.y}px)`}})}),(0,Mn.jsx)("button",{"aria-label":"Move right",className:"mc__arrow mc__arrow--right",onMouseDown:()=>P("right",1,v),onMouseUp:()=>U("right"),onMouseLeave:()=>U("right"),onTouchStart:E=>{E.preventDefault(),P("right",1,v)},onTouchEnd:()=>U("right"),onTouchCancel:()=>U("right"),children:(0,Mn.jsx)(bl,{direction:"right"})})]}),(0,Mn.jsx)("button",{"aria-label":"Move backward",className:"mc__arrow mc__arrow--down",onMouseDown:()=>P("down",-1,S),onMouseUp:()=>U("down"),onMouseLeave:()=>U("down"),onTouchStart:E=>{E.preventDefault(),P("down",-1,S)},onTouchEnd:()=>U("down"),onTouchCancel:()=>U("down"),children:(0,Mn.jsx)(bl,{direction:"down"})})]})}):null},Gh=Ax;var Wh=require("react-colorful"),bi=require("react/jsx-runtime"),Ad=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:a,inline:r=!1})=>(0,bi.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:i=>i.stopPropagation(),children:[(0,bi.jsx)("p",{className:"ri-popoverLabel",children:"Color"}),(0,bi.jsx)(Wh.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:i=>a(s=>({...s,[e.objectId]:{...s[e.objectId],hex:i}}))}),(0,bi.jsxs)("div",{className:"ri-inlineRow",children:[(0,bi.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,bi.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:"Done"})]})]});var Dn=require("react/jsx-runtime"),Ed=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:a,inline:r=!1})=>(0,Dn.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:i=>i.stopPropagation(),children:[(0,Dn.jsx)("div",{className:"ri-popoverHeader",children:(0,Dn.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:"Material"})}),(0,Dn.jsxs)("div",{className:"ri-materialBody",children:[t?(0,Dn.jsx)("div",{className:"ri-previewFrame",children:(0,Dn.jsx)("img",{src:t,alt:"texture preview",className:"ri-previewImage"})}):(0,Dn.jsxs)("div",{className:"ri-emptyState",children:[(0,Dn.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,Dn.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,Dn.jsx)("span",{style:{fontSize:12},children:"No texture applied"})]}),(0,Dn.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:t?"Replace image":"Upload image"}),t&&(0,Dn.jsx)("button",{onClick:()=>a(e.objectId),className:"ri-removeButton",children:"Remove texture"}),(0,Dn.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"})]})]});var cr=require("react");var dt=require("react/jsx-runtime");function Xh({entries:e}){return(0,dt.jsx)(dt.Fragment,{children:e.map(([t,n])=>{let a=n!==null&&typeof n=="object",r=a?Object.entries(n):[];return a&&r.length>0?(0,dt.jsxs)("div",{className:"left-panel__data-group",children:[(0,dt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,dt.jsx)("div",{className:"left-panel__data-children",children:(0,dt.jsx)(Xh,{entries:r})})]},t):(0,dt.jsxs)("div",{className:"left-panel__data-row",children:[(0,dt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,dt.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:a?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function Ex({content:e}){let t=e!=null,[n,a]=(0,cr.useState)(t),[r,i]=(0,cr.useState)(t),s=(0,cr.useRef)(e);return t&&(s.current=e),(0,cr.useEffect)(()=>{if(t){a(!0);return}if(n){i(!1);let l=setTimeout(()=>a(!1),300);return()=>clearTimeout(l)}},[t,n]),(0,cr.useEffect)(()=>{if(n&&t){let l=requestAnimationFrame(()=>i(!0));return()=>cancelAnimationFrame(l)}},[n,t]),n?(0,dt.jsx)("div",{className:`left-panel__action-extra${r?" left-panel__action-extra--open":""}`,children:(0,dt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??s.current})}):null}function kd({isOpen:e,selectedObject:t,currentAction:n,onClose:a,onAction:r,renderActionExtra:i}){let[s,l]=(0,cr.useState)(t);(0,cr.useEffect)(()=>{t&&l(t)},[t]);let o=t??s,c=o?Object.entries(o).filter(([d])=>d!=="actions"):[];return(0,dt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:o&&(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsxs)("div",{className:"left-panel__header",children:[(0,dt.jsx)("p",{className:"left-panel__title",children:o.label}),(0,dt.jsx)("button",{onClick:a,className:"left-panel__close-btn","aria-label":"Close panel",children:"\u2715"})]}),c.length>0&&(0,dt.jsx)("div",{className:"left-panel__data",children:(0,dt.jsx)(Xh,{entries:c})}),(0,dt.jsx)("hr",{className:"left-panel__divider"}),o.actions&&o.actions.length>0&&(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsx)("div",{className:"left-panel__actions-label",children:"Actions"}),(0,dt.jsx)("div",{className:"left-panel__actions-list",children:o.actions.map((d,p)=>{let h=n?.action.id===d.id&&(n.binding===o||n.binding?.id===o.id||n.binding?.modelObjectId===o.modelObjectId||n.objectId===o.id||n.objectId===o.modelObjectId),f=i?.(d.id);return(0,dt.jsxs)(cr.Fragment,{children:[(0,dt.jsx)("button",{onClick:b=>r({objectId:o.modelObjectId||o.id||"",action:d,binding:o,screenX:b.clientX,screenY:b.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${d.id}`,h?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":d.id,"data-label":d.label,children:d.label}),(0,dt.jsx)(Ex,{content:f})]},p)})})]})]})})}var Io=require("react"),Yh=require("lucide-react");var $h=require("react");var En=require("react/jsx-runtime");function qh({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:a,searchValue:r,onSearchChange:i,searchPlaceholder:s,children:l,isOpen:o,onToggle:c,openButtonIcon:d,closeButtonIcon:p,closeButtonAriaLabel:h}){let[f,b]=(0,$h.useState)(!1),w=o!==void 0?o:f,k=x=>{o===void 0&&b(x),c?.(x)};return(0,En.jsxs)("div",{className:`ri-sidepanel-wrap ${w?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!w&&(0,En.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>k(!0),"aria-label":t,title:"Open panel",children:[d,e?(0,En.jsx)("span",{children:e}):null]}),(0,En.jsxs)("div",{className:`ri-sidepanel ${w?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!w,children:[(0,En.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,En.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,En.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,En.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>k(!1),"aria-label":h,title:"Close",children:p??(0,En.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,En.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,En.jsx)("p",{className:"ri-sidepanel__title",children:a})]}),(0,En.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,En.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:s,value:r,onChange:x=>i(x.target.value)})}),(0,En.jsx)("div",{className:"ri-sidepanel__list",children:l})]})]})}var Ir=require("react/jsx-runtime");function Rd({objectBindings:e,onAction:t,onFocus:n,onHover:a,isOpen:r,onToggle:i}){let[s,l]=(0,Io.useState)(null),[o,c]=(0,Io.useState)(""),d=(0,Io.useMemo)(()=>Object.entries(e).filter(([p,h])=>{let f=o.toLowerCase();return p.toLowerCase().includes(f)||(h.label??"").toLowerCase().includes(f)}),[e,o]);return(0,Ir.jsx)(qh,{openButtonLabel:"",openButtonAriaLabel:"Open scene objects panel",openButtonIcon:(0,Ir.jsx)(Yh.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:"SCENE OBJECTS",title:`${d.length} visible entries`,searchValue:o,onSearchChange:c,searchPlaceholder:"Search nodes, labels",isOpen:r,onToggle:i,closeButtonAriaLabel:"Close scene objects panel",children:d.map(([p,h])=>{let f=h.visible!==!1,b=s===p;return(0,Ir.jsxs)("div",{onClick:()=>n(h),onMouseEnter:()=>{l(p),a?.(h)},onMouseLeave:()=>{l(null),a?.(null)},className:`ri-sidepanel__row${b?" ri-sidepanel__row--hovered":""}`,children:[(0,Ir.jsx)("span",{className:`ri-sidepanel__label${b?" ri-sidepanel__label--hovered":""}`,children:h.label??p}),(0,Ir.jsx)("button",{type:"button",onClick:w=>{w.stopPropagation(),t?.({objectId:p,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:h})},className:"ri-sidepanel__vis-btn",title:f?"Hide":"Show",children:(0,Ir.jsx)("span",{className:`ri-sidepanel__checkbox${f?" ri-sidepanel__checkbox--checked":""}`,children:f&&(0,Ir.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,Ir.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},p)})})}var Te=require("lucide-react");var vl=require("react"),Nd=(0,vl.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var dr=()=>(0,vl.useContext)(Nd);var zo=require("react/jsx-runtime");function Da({visible:e,message:t,tone:n="default",spinner:a=!0}){return e?(0,zo.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[a&&(0,zo.jsx)("span",{className:"bb-loadingSpinner","aria-hidden":"true"}),(0,zo.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]}):null}var Ld=new WeakSet;function Oa(e){Ld.add(e)}function Kh(e){let t=Ld.has(e);return t&&Ld.delete(e),t}var Re=require("react"),_l=require("@react-three/fiber"),Ml=require("@react-three/drei"),Ze=require("three");var Zh="data:image/png;base64,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";var Jh="data:image/png;base64,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";var Qh="data:image/png;base64,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";var xe=require("react/jsx-runtime"),Ia=-100,za=100,cf=.03,Lx=.03,Bx=.03,ef=.5,Dx=Zh,Ox=Jh,Ix=Qh,zx=Math.PI/4,tf=.4,Fa=64,nf=cf*3,Bd="#4d7dff",rf="#ffcc00",af=.02,df=new Ze.Vector3(0,1,0),xl=32,of="#ff9d3d",yl=4,zr=1.4,wl=.35,Ux=.13,sf=.12,lf=.055,Fx={x:"#ff4444",y:"#44ff44",z:"#4444ff"};function uf(e){return new Ze.Vector3(e==="x"?1:0,e==="y"?1:0,e==="z"?1:0)}function Vx(e,t){let n=uf(e);t.lengthSq()<1e-8&&(t=n.clone());let a=new Ze.Vector3().crossVectors(n,new Ze.Vector3().crossVectors(t,n));if(a.lengthSq()<1e-8){let r=Math.abs(n.y)<.9?df:new Ze.Vector3(1,0,0);a=new Ze.Vector3().crossVectors(n,r)}return a.normalize()}function Dd(e){let t=new Float32Array((Fa+1)*3);for(let n=0;n<=Fa;n++){let a=n/Fa*Math.PI*2,r=Math.cos(a)*tf,i=Math.sin(a)*tf,s=0,l=0,o=0;e==="x"?(l=r,o=i):e==="y"?(s=r,o=i):(s=r,l=i),t[n*3]=s,t[n*3+1]=l,t[n*3+2]=o}return t}function jx(e){let t=Math.abs(e.y)<.99?new Ze.Vector3(0,1,0):new Ze.Vector3(1,0,0),n=new Ze.Vector3().crossVectors(e,t).normalize(),a=new Ze.Vector3().crossVectors(e,n).normalize();return[n,a]}function Ua(e,t,n){return Math.min(Math.max(e,t),n)}var Va=null,Od=new Set;function Uo(e){Va!==e&&(Va=e,Od.forEach(t=>t()))}function Id(e){return Od.add(e),()=>Od.delete(e)}function Sl(){return Va}function pf({light:e,position:t,color:n,intensity:a,visible:r,onPositionChange:i,onDraggingChange:s}){let{activeTab:l,activeSubTab:o,setActiveTab:c,setActiveSubTab:d}=dr(),{camera:p,gl:h,raycaster:f,invalidate:b}=(0,_l.useThree)(),w=(0,Re.useRef)(null),k=(0,Re.useRef)(null),x=(0,Re.useRef)(null),u=(0,Re.useRef)(null),m=(0,Re.useRef)(null),_=(0,Re.useRef)(null),M=(0,Re.useRef)(null),C=(0,Re.useRef)(null),A=(0,Re.useRef)(null),g=(0,Re.useRef)(null),S=(0,Re.useRef)(null),v=(0,Re.useRef)(null),P=(0,Re.useRef)(null),U=(0,Re.useRef)(null),E=(0,Re.useRef)(null),V=(0,Re.useRef)(null),T=(0,Re.useRef)(null),G=(0,Re.useRef)({dragging:!1,axis:null}),W=(0,Re.useRef)(new Ze.Plane),R=(0,Re.useRef)(new Ze.Vector3),N=(0,Re.useRef)(null),Z=(0,Re.useRef)(null),$=(0,Re.useRef)(new Ze.Vector3),de=(0,Re.useRef)(!1),Ne=(0,Re.useRef)(new Ze.Plane),be=(0,Re.useRef)(s);(0,Re.useEffect)(()=>{be.current=s},[s]);let Ce=(0,Re.useMemo)(()=>new Ze.Vector3(t[0],t[1],t[2]),[t]),ke=(0,Re.useMemo)(()=>new Float32Array(6),[]),ze=(0,Re.useMemo)(()=>new Float32Array(6),[]),St=(0,Re.useMemo)(()=>Dd("x"),[]),Ft=(0,Re.useMemo)(()=>Dd("y"),[]),it=(0,Re.useMemo)(()=>Dd("z"),[]),Ue=(0,Re.useMemo)(()=>new Float32Array((xl+1)*3),[]),He=(0,Re.useMemo)(()=>new Float32Array(yl*2*3),[]),Gt=e?.type==="point",at=e?.type==="spot",wn=Gt?Ox:at?Ix:Dx,ot=Gt?Lx:at?Bx:cf,pn=(0,Re.useMemo)(()=>new Ze.TextureLoader().load(wn),[wn]),Wt=(0,Re.useSyncExternalStore)(Id,Sl,Sl),We=!!e&&Wt===e.id;if((0,Re.useEffect)(()=>{de.current||($.current.copy(Ce),b())},[Ce,b]),(0,Re.useEffect)(()=>{e&&Va===e.id&&!r&&Uo(null)},[e?.id,r]),(0,Re.useEffect)(()=>()=>{e&&Va===e.id&&Uo(null)},[e?.id]),(0,_l.useFrame)(()=>{if(w.current&&w.current.position.copy($.current),x.current){x.current.lookAt(p.position);let ie=p,ce;ie.isOrthographicCamera?ce=ot/ie.zoom:ce=p.position.distanceTo($.current)*ot,x.current.scale.setScalar(ce)}if(M.current){let ie=p,ce;ie.isOrthographicCamera?ce=nf/ie.zoom:ce=p.position.distanceTo($.current)*nf,M.current.scale.setScalar(ce)}if(S.current){let ie=p,ce;ie.isOrthographicCamera?ce=lf/ie.zoom:ce=p.position.distanceTo($.current)*lf,S.current.scale.setScalar(ce)}if(m.current){let ie=m.current.getAttribute("position"),ce=ie.array;ce[0]=0,ce[1]=0,ce[2]=0,ce[3]=$.current.x,ce[4]=$.current.y,ce[5]=$.current.z,ie.needsUpdate=!0,m.current.computeBoundingSphere()}if(_.current){let ie=$.current,ce=ie.length();_.current.visible=ce>ef,ce>1e-6&&(_.current.position.copy(ie).multiplyScalar(.5),_.current.scale.set(1,ce,1),_.current.quaternion.setFromUnitVectors(df,ie.clone().normalize()))}if(u.current&&(u.current.visible=$.current.length()>ef),at&&C.current&&A.current&&g.current){let ie=$.current,ce=ie.length();if(ce>1e-6){C.current.visible=!0;let Xt=ie.clone().negate().normalize(),_t=ce,nt=e?.angle??Math.PI/6,st=_t*Math.tan(nt),$t=ie.clone().add(Xt.clone().multiplyScalar(_t)),[sn,Kt]=jx(Xt),On=A.current.getAttribute("position"),Tn=On.array;for(let Qe=0;Qe<=xl;Qe++){let Ge=Qe/xl*Math.PI*2,Bt=$t.x+(sn.x*Math.cos(Ge)+Kt.x*Math.sin(Ge))*st,xt=$t.y+(sn.y*Math.cos(Ge)+Kt.y*Math.sin(Ge))*st,Dt=$t.z+(sn.z*Math.cos(Ge)+Kt.z*Math.sin(Ge))*st;Tn[Qe*3]=Bt,Tn[Qe*3+1]=xt,Tn[Qe*3+2]=Dt}On.needsUpdate=!0,A.current.computeBoundingSphere();let _e=g.current.getAttribute("position"),mt=_e.array;for(let Qe=0;Qe<yl;Qe++){let Ge=Qe/yl*Math.PI*2,Bt=$t.x+(sn.x*Math.cos(Ge)+Kt.x*Math.sin(Ge))*st,xt=$t.y+(sn.y*Math.cos(Ge)+Kt.y*Math.sin(Ge))*st,Dt=$t.z+(sn.z*Math.cos(Ge)+Kt.z*Math.sin(Ge))*st,Zt=Qe*6;mt[Zt]=ie.x,mt[Zt+1]=ie.y,mt[Zt+2]=ie.z,mt[Zt+3]=Bt,mt[Zt+4]=xt,mt[Zt+5]=Dt}_e.needsUpdate=!0,g.current.computeBoundingSphere()}else C.current.visible=!1}if(N.current&&(N.current.visible=G.current.dragging),Z.current&&G.current.dragging){let ie=Z.current.getAttribute("position"),ce=ie.array;ce[0]=R.current.x,ce[1]=R.current.y,ce[2]=R.current.z,ce[3]=$.current.x,ce[4]=$.current.y,ce[5]=$.current.z,ie.needsUpdate=!0,Z.current.computeBoundingSphere()}}),(0,Re.useEffect)(()=>{let ie=_e=>{let mt=h.domElement.getBoundingClientRect();return new Ze.Vector2((_e.clientX-mt.left)/mt.width*2-1,-((_e.clientY-mt.top)/mt.height)*2+1)},ce=_e=>!!_e.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Xt=()=>{let _e=[];return[v.current,E.current,P.current,V.current,U.current,T.current].forEach(mt=>{mt&&_e.push(mt)}),_e},_t=_e=>_e===v.current||_e===E.current?"x":_e===P.current||_e===V.current?"y":_e===U.current||_e===T.current?"z":null,nt=()=>{G.current.dragging&&(G.current={dragging:!1,axis:null},N.current&&(N.current.visible=!1),h.domElement.style.cursor="default",be.current?.(!1))},st=()=>{de.current&&(de.current=!1,h.domElement.style.cursor="default",be.current?.(!1))},$t=_e=>{if(G.current.dragging&&G.current.axis){let xt=G.current.axis,Dt=$.current,Zt=uf(xt),In=new Ze.Vector3().subVectors(p.position,Dt),te=Vx(xt,In);W.current.setFromNormalAndCoplanarPoint(te,Dt);let L=ie(_e);f.setFromCamera(L,p);let O=new Ze.Vector3,q=f.ray.intersectPlane(W.current,O);if(!q)return;let Q=q.clone().sub(Dt).dot(Zt),he=Dt.clone().add(Zt.clone().multiplyScalar(Q)),le=[Ua(xt==="x"?he.x:Dt.x,Ia,za),Ua(xt==="y"?he.y:Dt.y,Ia,za),Ua(xt==="z"?he.z:Dt.z,Ia,za)];$.current.set(le[0],le[1],le[2]),i?.(le),b();return}if(!de.current)return;let mt=ie(_e);f.setFromCamera(mt,p);let Qe=new Ze.Vector3,Ge=f.ray.intersectPlane(Ne.current,Qe);if(!Ge)return;let Bt=[Ua(Ge.x,Ia,za),Ua(Ge.y,Ia,za),Ua(Ge.z,Ia,za)];$.current.set(Bt[0],Bt[1],Bt[2]),i?.(Bt),b()},sn=_e=>{if(ce(_e))return;let mt=ie(_e);if(f.setFromCamera(mt,p),We){let Bt=Xt(),xt=Bt.length?f.intersectObjects(Bt,!1):[];if(xt.length>0){let Dt=xt[0].object,Zt=_t(Dt);if(Zt){let In=$.current;G.current={dragging:!0,axis:Zt},R.current.copy(In),be.current?.(!0),h.domElement.style.cursor="grabbing",h.domElement.setPointerCapture(_e.pointerId),_e.preventDefault(),_e.stopPropagation();return}}}let Qe=[];if(k.current&&Qe.push(k.current),x.current&&Qe.push(x.current),Qe.length===0)return;if(f.intersectObjects(Qe,!1).length>0){let Bt=e?.id??null;Va!==Bt&&(Uo(Bt),c?.("scene"),d?.("Lighting"));let xt=new Ze.Vector3;p.getWorldDirection(xt),Ne.current.setFromNormalAndCoplanarPoint(xt,$.current),de.current=!0,be.current?.(!0),h.domElement.style.cursor="grabbing",h.domElement.setPointerCapture(_e.pointerId),_e.preventDefault(),_e.stopPropagation()}},Kt=_e=>{if(G.current.dragging){nt();try{h.domElement.releasePointerCapture(_e.pointerId)}catch{}}if(de.current){st();try{h.domElement.releasePointerCapture(_e.pointerId)}catch{}}},On=()=>{nt(),st()},Tn=()=>{nt(),st()};return h.domElement.addEventListener("pointerdown",sn),window.addEventListener("pointermove",$t),window.addEventListener("pointerup",Kt),window.addEventListener("pointercancel",On),window.addEventListener("blur",Tn),()=>{h.domElement.removeEventListener("pointerdown",sn),window.removeEventListener("pointermove",$t),window.removeEventListener("pointerup",Kt),window.removeEventListener("pointercancel",On),window.removeEventListener("blur",Tn)}},[p,f,h,b,i,e,c,d,We]),l!=="scene"||o!=="Lighting"||!e||!r||e.type==="none"||e.type==="hemisphere")return null;let vt=["x","y","z"];return(0,xe.jsxs)("group",{ref:ie=>{ie&&rp(ie)},children:[(0,xe.jsxs)("group",{ref:w,children:[(0,xe.jsx)("sprite",{ref:x,children:(0,xe.jsx)("spriteMaterial",{map:pn,transparent:!0,opacity:.9,blending:Ze.AdditiveBlending,depthWrite:!1,rotation:at?zx:0},wn)}),(0,xe.jsx)(Ml.Sphere,{ref:k,args:[.25,16,16],children:(0,xe.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),Gt&&(0,xe.jsxs)("group",{ref:M,children:[(0,xe.jsxs)("lineLoop",{renderOrder:999,children:[(0,xe.jsx)("bufferGeometry",{children:(0,xe.jsx)("bufferAttribute",{attach:"attributes-position",args:[St,3],count:Fa+1})}),(0,xe.jsx)("lineBasicMaterial",{color:Bd,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,xe.jsxs)("lineLoop",{renderOrder:999,children:[(0,xe.jsx)("bufferGeometry",{children:(0,xe.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ft,3],count:Fa+1})}),(0,xe.jsx)("lineBasicMaterial",{color:Bd,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,xe.jsxs)("lineLoop",{renderOrder:999,children:[(0,xe.jsx)("bufferGeometry",{children:(0,xe.jsx)("bufferAttribute",{attach:"attributes-position",args:[it,3],count:Fa+1})}),(0,xe.jsx)("lineBasicMaterial",{color:Bd,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]}),We&&(0,xe.jsx)("group",{ref:S,children:vt.map(ie=>{let ce=Fx[ie],Xt=new Ze.Vector3(ie==="x"?zr:0,ie==="y"?zr:0,ie==="z"?zr:0),_t=new Ze.Vector3(ie==="x"?zr-wl/2:0,ie==="y"?zr-wl/2:0,ie==="z"?zr-wl/2:0),nt=new Ze.Vector3(ie==="x"?zr/2:0,ie==="y"?zr/2:0,ie==="z"?zr/2:0),st=ie==="x"?[0,0,-Math.PI/2]:ie==="y"?[0,0,0]:[Math.PI/2,0,0],$t=ie==="x"?v:ie==="y"?P:U,sn=ie==="x"?E:ie==="y"?V:T;return(0,xe.jsxs)("group",{children:[(0,xe.jsx)(Ml.Line,{points:[new Ze.Vector3(0,0,0),Xt],color:ce,transparent:!0,opacity:.9,lineWidth:2,depthTest:!1}),(0,xe.jsxs)("mesh",{ref:sn,position:nt,rotation:st,children:[(0,xe.jsx)("cylinderGeometry",{args:[sf,sf,zr,8]}),(0,xe.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,xe.jsxs)("mesh",{ref:$t,position:_t,rotation:st,children:[(0,xe.jsx)("coneGeometry",{args:[Ux,wl,8]}),(0,xe.jsx)("meshBasicMaterial",{color:ce,depthTest:!1})]})]},ie)})})]}),!Gt&&!at&&(0,xe.jsxs)(xe.Fragment,{children:[(0,xe.jsxs)("mesh",{ref:_,children:[(0,xe.jsx)("cylinderGeometry",{args:[af,af,1,8,1,!0]}),(0,xe.jsx)("meshBasicMaterial",{color:rf,transparent:!0,opacity:.05,blending:Ze.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,xe.jsxs)("line",{ref:u,children:[(0,xe.jsx)("bufferGeometry",{ref:m,children:(0,xe.jsx)("bufferAttribute",{attach:"attributes-position",args:[ke,3],count:2})}),(0,xe.jsx)("lineBasicMaterial",{color:rf,transparent:!0,opacity:.7,blending:Ze.AdditiveBlending})]})]}),at&&(0,xe.jsxs)("group",{ref:C,children:[(0,xe.jsxs)("lineLoop",{renderOrder:999,children:[(0,xe.jsx)("bufferGeometry",{ref:A,children:(0,xe.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ue,3],count:xl+1})}),(0,xe.jsx)("lineBasicMaterial",{color:of,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,xe.jsxs)("lineSegments",{renderOrder:999,children:[(0,xe.jsx)("bufferGeometry",{ref:g,children:(0,xe.jsx)("bufferAttribute",{attach:"attributes-position",args:[He,3],count:yl*2})}),(0,xe.jsx)("lineBasicMaterial",{color:of,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),(0,xe.jsxs)("line",{ref:ie=>{N.current=ie,ie&&(ie.visible=!1)},children:[(0,xe.jsx)("bufferGeometry",{ref:Z,children:(0,xe.jsx)("bufferAttribute",{attach:"attributes-position",args:[ze,3],count:2})}),(0,xe.jsx)("lineBasicMaterial",{color:"#ffffff",transparent:!0,opacity:.6})]})]})}var Et=require("react"),ff=require("@react-three/drei"),Pl=require("@react-three/fiber"),vn=require("three");var bn=require("three");function Cl(e){e.updateWorldMatrix(!0,!0);let t=new bn.Matrix4().copy(e.matrixWorld).invert(),n=new bn.Box3,a=new bn.Box3,r=!1;return e.traverse(i=>{let s=i;if(!s.isMesh||!s.geometry||(s.geometry.boundingBox||s.geometry.computeBoundingBox(),!s.geometry.boundingBox))return;let l=new bn.Matrix4().multiplyMatrices(t,i.matrixWorld);a.copy(s.geometry.boundingBox).applyMatrix4(l),n.union(a),r=!0}),r?n.getCenter(new bn.Vector3):new bn.Vector3}function mf(e,t="XYZ"){return new bn.Quaternion().setFromEuler(new bn.Euler(e[0],e[1],e[2],t))}function Hx(e,t,n,a,r="XYZ"){let s=new bn.Vector3(...a).multiply(new bn.Vector3(...n)).applyQuaternion(mf(t,r)).add(new bn.Vector3(...e));return[s.x,s.y,s.z]}function hf(e,t,n,a,r,i="XYZ"){let s=new bn.Vector3(...Hx(e,t,a,r,i)),l=new bn.Vector3(...r).multiply(new bn.Vector3(...a)).applyQuaternion(mf(n,i)),o=s.sub(l);return[o.x,o.y,o.z]}var zd=require("react/jsx-runtime");function Ud({node:e,space:t,onTransformChange:n,onDraggingChange:a}){let r=(0,Pl.useThree)(v=>v.invalidate),i=(0,Et.useMemo)(()=>Cl(e),[e]),s=(0,Et.useMemo)(()=>new vn.Matrix4,[]),l=(0,Et.useRef)(!1),o=(0,Et.useRef)(new vn.Matrix4),c=(0,Et.useRef)(new vn.Matrix4),d=(0,Et.useRef)(null),p=(0,Et.useRef)(0),h=(0,Et.useRef)([]),f=(0,Et.useRef)(null),b=(0,Et.useMemo)(()=>new vn.Vector3,[]),w=(0,Et.useMemo)(()=>new vn.Quaternion,[]),k=(0,Et.useMemo)(()=>new vn.Vector3,[]),x=(0,Et.useMemo)(()=>new vn.Quaternion,[]),u=(0,Et.useMemo)(()=>new vn.Vector3(1,1,1),[]),m=(0,Et.useMemo)(()=>new vn.Quaternion,[]),_=(0,Et.useMemo)(()=>new vn.Vector3,[]),M=(0,Et.useMemo)(()=>new vn.Vector3,[]),C=(0,Et.useRef)([0,0,0]),A=(0,Et.useCallback)(()=>{l.current||(e.updateWorldMatrix(!0,!1),b.copy(i).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(w),x.copy(w),t==="world"&&x.identity(),s.compose(b,x,u))},[b,s,x,u,e,i,t,w]);(0,Et.useLayoutEffect)(()=>(A(),()=>{f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),a(!1);for(let v of h.current)Ta(v);h.current=[]}),[a,A]),(0,Pl.useFrame)(()=>A());let g=(0,Et.useCallback)(()=>{f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),e.updateWorldMatrix(!0,!0),h.current=[];for(let v of Pa(e))Vm(v)||(js(v,v.matrixWorld),h.current.push(v));e.updateWorldMatrix(!0,!1),b.copy(i).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(w),e.getWorldScale(k),o.current.compose(b,w,k),c.current.copy(s),C.current=[e.rotation.x,e.rotation.y,e.rotation.z],d.current=null,l.current=!0,a(!0)},[b,s,e,a,i,w,k]),S=(0,Et.useCallback)((v,P)=>{let U=o.current.clone().premultiply(P),E=c.current.clone().premultiply(P);U.decompose(_,w,M);let V=_.clone();E.decompose(b,x,u),t==="world"&&x.identity(),s.compose(b,x,u),v.decompose(_,m,M);let T=new vn.Euler().setFromQuaternion(m,e.rotation.order),[G,W,R]=C.current,N=[G+T.x,W+T.y,R+T.z],Z=new vn.Quaternion().setFromEuler(new vn.Euler(N[0],N[1],N[2],e.rotation.order)),de=(e.parent?.matrixWorld||new vn.Matrix4).clone().invert(),Ne=V.clone().applyMatrix4(de),be=i.clone().multiply(e.scale).applyQuaternion(Z),Ce=Ne.clone().sub(be),ke=[Ce.x,Ce.y,Ce.z];e.position.set(ke[0],ke[1],ke[2]),e.rotation.set(N[0],N[1],N[2],e.rotation.order),e.updateMatrixWorld(!0),r(),d.current={position:ke,rotation:N}},[b,m,s,x,u,r,e,i,_,M,t,w]);return(0,zd.jsx)("group",{children:(0,zd.jsx)(ff.PivotControls,{matrix:s,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:g,onDrag:(v,P,U,E)=>S(P,E),onDragEnd:()=>{l.current=!1;let v=d.current;if(d.current=null,v)n(v),f.current=requestAnimationFrame(()=>{f.current=null,a(!1)});else if(h.current.length>0){for(let P of h.current)Ta(P);e.updateMatrixWorld(!0),r(),a(!1)}else a(!1);h.current=[]}})})}var z=require("react/jsx-runtime");function Gx(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,a=n.getAttribute("skinIndex"),r=n.getAttribute("skinWeight"),i=n.getAttribute("position");if(!a||!r||!i)return null;let s=t.worldToLocal(e.point.clone()),l=[e.face.a,e.face.b,e.face.c],o=new wt.Vector3,c=l[0],d=1/0;for(let f of l){o.fromBufferAttribute(i,f);let b=o.distanceToSquared(s);b<d&&(d=b,c=f)}let p=a.getComponent(c,0),h=r.getComponent(c,0);for(let f=1;f<4;f++){let b=r.getComponent(c,f);b>h&&(h=b,p=a.getComponent(c,f))}return t.skeleton.bones[p]??null}function Wx(e){let t=Gx(e)??e.object,n=vo(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let a=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[a.x,a.y,a.z]}}function Xx(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let a=Sr(t,e.anchorNodeName);return a?(a.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(a.matrixWorld),!0):!1}function $x({annotation:e,enabled:t,controlsRef:n,offsetRef:a}){let r=(0,Al.useThree)(h=>h.scene),i=(0,I.useRef)(null),s=(0,I.useRef)(!1),l=(0,I.useMemo)(()=>new wt.Vector3,[]),o=(0,I.useMemo)(()=>new wt.Vector3,[]),c=(0,I.useMemo)(()=>new wt.Vector3,[]),d=e?.anchorNodeName,p=e?.anchorLocalPosition;return(0,I.useEffect)(()=>{i.current=null,s.current=!1},[d,e?.id]),(0,Al.useFrame)(()=>{let h=n.current,f=a.current;if(!t||!h||!f||!d||!p){s.current=!1;return}let b=i.current;if((!b||!b.parent)&&(b=Sr(r,d),i.current=b),!b){s.current=!1;return}b.updateWorldMatrix(!0,!1),l.set(p[0],p[1],p[2]).applyMatrix4(b.matrixWorld),!(s.current&&l.distanceToSquared(o)<1e-8)&&(o.copy(l),s.current=!0,c.copy(l).add(f),h.setLookAt(c.x,c.y,c.z,l.x,l.y,l.z,!0))}),null}function qx(e){let t={total:0,missing:0};return e.traverse(n=>{let a=n;!a.isMesh||!a.geometry||(t.total+=1,a.geometry.getAttribute("uv")||(t.missing+=1))}),t}function Yx(e,t){let n=t?.camera;if(!(n instanceof wt.PerspectiveCamera))return;let r=new wt.Box3().setFromObject(e).getSize(new wt.Vector3).length();!Number.isFinite(r)||r<=0||(n.near=r/100,n.far=r*100,n.updateProjectionMatrix(),t&&(t.maxDistance=r*10))}async function gf(e,t,n=.6){let a=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=a}}function Fo({modelUrl:e,tilesetUrl:t,tilesErrorTarget:n=8,tilesCacheSize:a=800,modelFormat:r,licenseKey:i,licenseValidationUrl:s,objectBindings:l,selectedObject:o,panelHoveredObject:c,onObjectBindingsChange:d,onObjectSelect:p,onObjectHover:h,onObjectEditLeaseChange:f,onModelLoaded:b,onLoadError:w,onAction:k,onHiddenObjectsChange:x,onCameraChange:u,onViewerReady:m,onTextureUpload:_,onAnimationsReady:M,onAnnotationsChange:C,activeAnnotation:A,onActiveAnnotationChange:g,lights:S,camera:v,backgroundColor:P,shadows:U=!0,showObjectBindingDataPanel:E=!0,customObjectBindingDataPanel:V,customSceneObjectsPanel:T,showSceneObjectsPanel:G=!0,showDownloadButton:W=!0,downloadFilename:R="model",showResetButton:N=!0,showLoadingOverlay:Z=!0,showMouseController:$=!1,mouseControllerPosition:de="center-bottom",mouseControllerOpacity:Ne=1,moveSensitivity:be=.08,zoomSensitivity:Ce=1,sceneConfig:ke,onSceneConfigChange:ze,disableZoom:St=!1,zoomOnSelected:Ft=!0,highlightOnHover:it=!0,enableCameraControls:Ue=!0,onAutoFit:He,refitOnResize:Gt=!0,renderMode:at="demand",maxDpr:wn=2,preserveDrawingBuffer:ot=!1,performanceProfile:pn="auto",dracoDecoderPath:Wt,ktx2TranscoderPath:We,meshopt:vt=!0,showMeasureTools:ie=!1,showUvCheckerButton:ce=!1,showExplodeControls:Xt=!1,cinematic:_t,measurementUnit:nt="m",enableXR:st=!1,usdzUrl:$t,arScaleMode:sn="normalized",mobileHandoffUrl:Kt,showAnnotationNavigation:On=!0,showAnnotationOnHover:Tn=!1,moveModeEnabled:_e=!1,objectTransformSpace:mt="world",enableKeyboardNavigation:Qe=!1,showViewGizmo:Ge=!1}){let{isInsideEditor:Bt,activeTab:xt,activeSubTab:Dt}=dr(),Zt=Bt&&xt==="scene"&&Dt==="Lighting",In=gl(i,s),te=(0,I.useMemo)(()=>ke??ci,[ke]),[L,O]=(0,I.useState)(null),q=te.model.renderer==="uv-checker",J=ce?L??q:q,Q=(0,I.useMemo)(()=>{let y=J?"uv-checker":q?"pbr":te.model.renderer;return y===te.model.renderer?te:{...te,model:{...te.model,renderer:y}}},[q,te,J]);(0,I.useEffect)(()=>{O(null)},[e,te.model.renderer,ce,t]);let he=(0,I.useMemo)(()=>{if(P)return P;let y=te.background;return y.enabled&&y.type==="color"?y.color:"#1c1c1d"},[P,te]),le=(0,I.useMemo)(()=>({dracoDecoderPath:Wt,ktx2TranscoderPath:We,meshopt:vt}),[Wt,We,vt]),ht=(0,I.useMemo)(()=>bp(pn),[pn]),ge=(0,I.useRef)(null),[Ot,qe]=(0,I.useState)(!1);(0,I.useEffect)(()=>{ge.current&&(ge.current.dollySpeed=Math.max(Ce,0))},[Ce]),(0,I.useEffect)(()=>{ge.current&&(ge.current.enabled=Ue&&!Ot)},[Ue,Ot]);let lt=(0,I.useRef)(null),ve=(0,I.useRef)(new Map),Pt=(0,I.useRef)(null),ln=(0,I.useRef)(null),Mt=(0,I.useRef)(null),Vt=(0,I.useRef)({});(0,I.useEffect)(()=>()=>{for(let y of Object.values(Vt.current))URL.revokeObjectURL(y)},[]);let Tt=(0,I.useRef)({}),[,Oe]=(0,I.useState)(0),ii=(0,I.useCallback)(()=>{Oe(y=>y+1)},[]),qa=(0,I.useRef)({}),Ya=(0,I.useRef)(null),zn=(0,I.useRef)(null),[Qi,ic]=(0,I.useState)(null),ac=(0,I.useCallback)(y=>{zn.current=y,ic(y)},[]),Hr=(0,I.useRef)(new Set),yt=(0,I.useRef)(null);(0,I.useEffect)(()=>{let y=Qi;if(!y||!Qe||!Ue||_e)return;let D=new Set(["w","a","s","d"," ","c"]),re=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),oe=0,ye=et=>et.code==="Space"?" ":et.key.toLowerCase(),$e=()=>{Hr.current.clear(),oe=0,yt.current!==null&&(cancelAnimationFrame(yt.current),yt.current=null)},hn=et=>{let jt=ge.current,ct=Hr.current;if(!jt||ct.size===0){yt.current=null,oe=0;return}let jn=oe?Math.min((et-oe)/1e3,.05):1/60;oe=et;let fn=Math.max(jt.distance*.75,.01)*jn;ct.has("w")&&jt.forward(fn,!1),ct.has("s")&&jt.forward(-fn,!1),ct.has("a")&&jt.truck(-fn,0,!1),ct.has("d")&&jt.truck(fn,0,!1),ct.has(" ")&&jt.truck(0,fn,!1),ct.has("c")&&jt.truck(0,-fn,!1),yt.current=requestAnimationFrame(hn)},Vn=et=>{if(et.target!==y){$e();return}if(re.has(et.key)){let ct=ge.current;if(!ct)return;et.preventDefault();let jn=Math.PI/90,fn=Math.max(ct.distance*.05,.01);et.key==="ArrowUp"?et.shiftKey?ct.forward(fn,!0):ct.rotate(0,-jn,!0):et.key==="ArrowDown"?et.shiftKey?ct.forward(-fn,!0):ct.rotate(0,jn,!0):et.key==="ArrowLeft"?ct.rotate(-jn,0,!0):ct.rotate(jn,0,!0);return}let jt=ye(et);D.has(jt)&&(et.preventDefault(),Hr.current.add(jt),yt.current===null&&(yt.current=requestAnimationFrame(hn)))},en=et=>{Hr.current.delete(ye(et))};return y.addEventListener("keydown",Vn),y.addEventListener("keyup",en),y.addEventListener("blur",$e),()=>{y.removeEventListener("keydown",Vn),y.removeEventListener("keyup",en),y.removeEventListener("blur",$e),$e()}},[Qi,Ue,Qe,_e]);let Ti=(0,I.useRef)(null),[Ar,es]=(0,I.useState)(l),[Ai,ea]=(0,I.useState)({}),[$n,Ka]=(0,I.useState)(null),[Qn,ta]=(0,I.useState)(null),[oc,sc]=(0,I.useState)(null),[Za,Ja]=(0,I.useState)(null),[qn,ts]=(0,I.useState)(null),[Er,na]=(0,I.useState)(null),mn=(0,I.useRef)(null),kr=(0,I.useRef)(!1),Ei=(0,I.useRef)(!1),Qa=(0,I.useRef)(!!v);Qa.current=!!v;let gr=(0,I.useRef)(null),[ra,ki]=(0,I.useState)(!!e),[ia,Ri]=(0,I.useState)(!e||!!He||!!v),[Gr,ns]=(0,I.useState)(!1),[lc,eo]=(0,I.useState)(!1),[rs,aa]=(0,I.useState)(!1),[to,is]=(0,I.useState)(!1),[as,cc]=(0,I.useState)(null),[dc,os]=(0,I.useState)(!1),[Ni,ss]=(0,I.useState)({total:0,missing:0}),[ls,Wr]=(0,I.useState)("Loading model..."),oa=(0,I.useRef)({}),B=(0,I.useCallback)(()=>{let y=ge.current;if(!y||gr.current)return;let D=y.getPosition(new wt.Vector3),re=y.getTarget(new wt.Vector3);gr.current={position:[D.x,D.y,D.z],target:[re.x,re.y,re.z]}},[]),[X,ae]=(0,I.useState)(!1),[Me,Fe]=(0,I.useState)(0),[Jt,At]=(0,I.useState)(!1);(0,I.useEffect)(()=>{Fe(0),At(!1)},[e,t]);let Xe=(0,I.useMemo)(()=>{let y=te.cinematic,D=y?.enabled?{waypoints:y.waypoints,duration:y.duration,loop:y.loop,autoPlay:y.autoPlay}:null;return _t===void 0?D&&(D.waypoints?.length??0)>=2?D:null:_t===!1?null:_t===!0?D??{}:{...D??{},..._t}},[_t,te]),[Un,Rr]=(0,I.useState)(!1),[lb,sa]=(0,I.useState)(!1),uc=(0,I.useRef)(!1);(0,I.useEffect)(()=>{Rr(!1),sa(!1),uc.current=!1},[e,t]),(0,I.useEffect)(()=>{!Xe?.autoPlay||uc.current||Gr&&ia&&!ra&&(uc.current=!0,Rr(!0),sa(!1))},[Xe,Gr,ia,ra]);let{xrStore:Li,presenterRef:cb,arSupported:pc,vrSupported:yu,quickLookSupported:wu,resolvedMobileHandoffUrl:cs,isMobileHandoffOpen:Su,arOverlay:db,openMobileHandoff:ub,closeMobileHandoff:_u,openQuickLook:pb,handleARStateChange:mb}=Sp({enableXR:st,usdzUrl:$t,mobileHandoffUrl:Kt}),[Nr,Mu]=(0,I.useState)(()=>ke?.annotations??[]);(0,I.useEffect)(()=>{if(Nr.length>0){let y=Nr.reduce((D,re)=>Math.max(D,re.id),0);ps.current=y}else ps.current=0},[Nr]);let[Fn,ds]=(0,I.useState)(null),[ai,us]=(0,I.useState)({title:"",description:""}),ps=(0,I.useRef)(0),[hb,Cu]=(0,I.useState)(null),[er,la]=(0,I.useState)(-1),[Pu,ms]=(0,I.useState)(!1),ca=(0,I.useRef)(null),Qt=(0,I.useMemo)(()=>[...Nr].sort((y,D)=>y.id-D.id),[Nr]),hs=(0,I.useMemo)(()=>er<0||er>=Qt.length?null:Qt[er],[er,Qt]),Lr=(0,I.useCallback)(y=>{if(A!==void 0){g?.(y);return}Cu(y?{annotation:y}:null)},[A,g]),da=(0,I.useCallback)(y=>{let D=ge.current,re=mn.current;if(!D)return;let oe=new wt.Vector3,ye=ve.current.get(y.id);ye?oe.copy(ye):re&&Xx(y,re,oe)||oe.set(y.worldPosition[0],y.worldPosition[1],y.worldPosition[2]),lt.current=null;let $e=D.smoothTime;D.smoothTime=.6;let hn=y.worldNormal;if(re){let Vn=new wt.Box3().setFromObject(re),en=new wt.Vector3;Vn.getCenter(en);let et=new wt.Vector3;Vn.getSize(et);let jt=et.length()*.2,ct;hn?ct=new wt.Vector3(hn[0],hn[1],hn[2]):ct=oe.clone().sub(en),ct.lengthSq()<1e-6&&ct.set(0,0,1),ct.normalize();let jn=Math.max(jt*.6,.3),fn=oe.clone().add(ct.multiplyScalar(jn));D.setPosition(fn.x,fn.y,fn.z,!0),y.anchorNodeName&&y.anchorLocalPosition&&(lt.current=fn.clone().sub(oe))}D.setTarget(oe.x,oe.y,oe.z,!0),ca.current&&clearTimeout(ca.current),ca.current=setTimeout(()=>{D.smoothTime=$e,ca.current=null},800),Lr(y)},[Lr]),fb=(0,I.useCallback)(()=>{Qt.length!==0&&(ae(!0),la(0),da(Qt[0]))},[Qt,da]),gb=(0,I.useCallback)(()=>{if(Qt.length===0||er<0)return;ms(!0);let y=(er-1+Qt.length)%Qt.length;la(y),da(Qt[y]),setTimeout(()=>ms(!1),500)},[er,Qt,da]),bb=(0,I.useCallback)(()=>{if(Qt.length===0||er<0)return;if(er===Qt.length-1){if(ae(!1),la(-1),Lr(null),ge.current&&gr.current){let D=gr.current;ge.current.setLookAt(D.position[0],D.position[1],D.position[2],D.target[0],D.target[1],D.target[2],!0)}return}ms(!0);let y=er+1;la(y),da(Qt[y]),setTimeout(()=>ms(!1),500)},[er,Qt,da,Lr]),vb=(0,I.useCallback)(()=>{if(ae(!1),la(-1),Lr(null),ge.current&&gr.current){let y=gr.current;ge.current.setLookAt(y.position[0],y.position[1],y.position[2],y.target[0],y.target[1],y.target[2],!0)}},[Lr]);(0,I.useEffect)(()=>{la(-1),ae(!1)},[Qt.length]),(0,I.useEffect)(()=>()=>{ca.current&&clearTimeout(ca.current)},[]),(0,I.useEffect)(()=>{hs&&X&&Lr(hs)},[hs,Lr,X]),(0,I.useEffect)(()=>{if(ke?.annotations===void 0)return;let y=ke.annotations.map(D=>({...D,localPosition:D.localPosition??D.worldPosition}));Mu(y)},[ke?.annotations]);let no=(0,I.useCallback)(()=>{if(A!==void 0){g?.(null);return}Cu(null)},[A,g]),ro=A!==void 0?A:hb?.annotation??null,io=(0,I.useMemo)(()=>ro?Nr.find(D=>D.id===ro.id)??null:null,[ro,Nr]);(0,I.useEffect)(()=>{ro&&!io&&no()},[ro,io,no]);let ao=d!==void 0,Rt=ao?l:Ar;oa.current=Rt;let xb=(0,I.useMemo)(()=>Object.entries(Rt).map(([y,D])=>JSON.stringify([y,D.modelObjectId,D.transform??null])).sort().join(""),[Rt]),{measureMode:oo,measureModeRef:yb,measurePoints:Tu,showDimensions:mc,measureBox:Au,modelBounds:wb,refreshBounds:Eu,clearMeasurements:Sb,toggleMeasureMode:_b,toggleDimensions:Mb,handleMeasurePointerDown:Cb,handleMeasureClick:Pb}=fp({canvasAreaRef:zn,controlsRef:ge,sceneRef:mn,modelUrl:e,modelRotation:te.model.rotation,bindingTransformSignature:xb,modelLoaded:Gr}),{isDownloading:hc,downloadMenuOpen:Tb,uvExportError:ku,toggleDownloadMenu:Ab,handleDownloadMesh:Eb,handleDownloadScreenshot:kb,handleDownloadUvLayout:Rb}=hp({sceneRef:mn,materialRefs:qa,rendererCaptureRef:Mt,objectBindings:Rt,downloadFilename:R}),Ru=(0,I.useMemo)(()=>Object.fromEntries(Object.entries(Rt).filter(([,y])=>y.visible===!1).map(([y])=>[y,!0])),[Rt]),Xr=(0,I.useMemo)(()=>{let y=new WeakMap,D=new Map,re=new Map;for(let[oe,ye]of Object.entries(Rt))y.set(ye,oe),D.has(ye.id)||D.set(ye.id,oe),re.has(ye.modelObjectId)||re.set(ye.modelObjectId,oe);return{byReference:y,byId:D,byModelObjectId:re}},[Rt]),oi=(0,I.useCallback)(y=>y?Xr.byReference.get(y)??Xr.byModelObjectId.get(y.modelObjectId)??Xr.byId.get(y.id)??null:null,[Xr]),fc=o!==void 0,so=fc?o??null:Za,Br=oi(so),gc=Br?Tt.current[Br]??null:null,Nu=oi(it?c??Qn??oc:null),Nb=Nu?Tt.current[Nu]??null:null,Lb=(0,I.useCallback)(y=>{sc(y),h?.(y)},[h]),Lu=E&&so!==null&&Br!==null,Bu=(Br?Rt[Br]:null)??so;(0,I.useEffect)(()=>{ao||es(l)},[ao,l]),(0,I.useEffect)(()=>{x?.(Ru)},[Ru,x]);let ua=(0,I.useCallback)(y=>{fc||Ja(y),p?.(y)},[fc,p]),pa=(0,I.useCallback)(y=>{ao||es(y),d?.(y)},[ao,d]),Bb=(0,I.useCallback)(y=>{let D=Br;if(!D||!y)return;let re=oa.current[D];re&&pa({...oa.current,[D]:{...re,transform:{...re.transform,...y}}})},[pa,Br]),$r=(0,I.useCallback)((y,D)=>Rt[y]?y:D?oi(D):Xr.byId.get(y)??Xr.byModelObjectId.get(y)??null,[Rt,oi,Xr]),lo=(0,I.useCallback)((y,D)=>{let re=$r(y),oe=re?Rt[re]:void 0;!re||!oe||pa({...Rt,[re]:{...oe,style:D(oe.style)}})},[$r,Rt,pa]),tr=(0,I.useCallback)(()=>{if(qn){let y=Ai[qn.objectId]?.hex;y!==void 0&&(lo(qn.objectId,D=>({...D,material:{...D?.material,baseColor:y}})),ea(D=>({...D,[qn.objectId]:{}})))}ts(null)},[qn,Ai,lo]),Du=(0,I.useCallback)(()=>{ua(null),Ka(null),tr(),na(null)},[ua,tr]),bc=(0,I.useCallback)((y,D,re,oe,ye)=>{let $e=Ya.current,hn=zn.current,Vn=ge.current?.camera;if(!$e)return{objectId:y,x:24,y:24};let en=$e.getBoundingClientRect(),et=12,jt=en.width-D-et,ct=en.height-re-et,jn=Math.max(et,(en.width-D)/2),fn=Math.max(et,(en.height-re)/2),ha=$r(y,oe),Xu=ha?Tt.current[ha]:null,gs=(fa,Bi)=>Bi<=et?et:Math.min(Math.max(fa,et),Bi);if(hn&&Vn&&Xu){let fa=hn.getBoundingClientRect(),Bi=new wt.Vector3;new wt.Box3().setFromObject(Xu).getCenter(Bi),Bi.project(Vn);let Zb=(Bi.x+1)/2*fa.width+(fa.left-en.left),Jb=(1-Bi.y)/2*fa.height+(fa.top-en.top);return{objectId:y,x:gs(Zb+24,jt),y:gs(Jb-re/2,ct)}}let Yb=typeof ye?.screenX=="number"?ye.screenX-en.left:jn,Kb=typeof ye?.screenY=="number"?ye.screenY-en.top:fn;return{objectId:y,x:gs(Yb,jt),y:gs(Kb,ct)}},[$r]),fs=(0,I.useCallback)(y=>{let{objectId:D,action:re,binding:oe}=y;switch(Ka(y),re.id){case"toggle-visibility":{let ye=D;oe?.modelObjectId&&(ye=Xr.byModelObjectId.get(oe.modelObjectId)??ye);let $e=Rt[ye],hn=$e?.visible===!1;$e&&pa({...Rt,[ye]:{...$e,visible:hn}});break}case"change-color":tr(),na(null),ea(ye=>{let $e=$r(D,oe)??D,hn=ye[D]?.hex,Vn=Rt[$e]?.style?.material?.baseColor;return{...ye,[D]:{...ye[D],hex:hn??Vn??"#ffffff"}}}),ts(bc(D,225,250,oe,y));break;case"change-material":tr(),na(bc(D,300,320,oe,y));break;default:break}k?.(y)},[pa,Rt,bc,k,tr,$r,Xr]);(0,I.useEffect)(()=>{if(qn)return window.addEventListener("pointerdown",tr),()=>window.removeEventListener("pointerdown",tr)},[qn,tr]),(0,I.useEffect)(()=>{if(!Er)return;let y=()=>na(null);return window.addEventListener("pointerdown",y),()=>window.removeEventListener("pointerdown",y)},[Er]),(0,I.useEffect)(()=>{if(!io)return;let y=D=>{if(Ti.current&&!Ti.current.contains(D.target)){if(D.target.closest?.(".ri-annotationMarker"))return;no()}};return document.addEventListener("mousedown",y),document.addEventListener("touchstart",y),()=>{document.removeEventListener("mousedown",y),document.removeEventListener("touchstart",y)}},[io,no]),(0,I.useEffect)(()=>{if(!Fn)return;let y=D=>{let re=D.target;if(re.closest?.(".ri-annotationPopup")||re.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let oe=zn.current;!oe||!oe.contains(re)||(ds(null),us({title:"",description:""}))};return document.addEventListener("mousedown",y,!0),document.addEventListener("touchstart",y,!0),()=>{document.removeEventListener("mousedown",y,!0),document.removeEventListener("touchstart",y,!0)}},[Fn]);let Ou=(0,I.useCallback)((y,D)=>{let re=Vt.current[y];re&&URL.revokeObjectURL(re),D.startsWith("blob:")?Vt.current[y]=D:delete Vt.current[y],lo(y,oe=>({...oe,material:{...oe?.material,texture:{path:D}}}))},[lo]),Db=y=>{let D=y.target.files?.[0],re=ln.current;if(!D||!re)return;let oe=$r(re);oe&&(_?_(D,oe).then(ye=>Ou(oe,ye),ye=>console.error("onTextureUpload failed:",ye)):Ou(oe,URL.createObjectURL(D)),y.target.value="")},Iu=y=>{ln.current=y,Pt.current?.click()},zu=y=>{let D=$r(y);if(!D)return;lo(D,oe=>oe?.material?.texture?{...oe,material:{...oe.material,texture:void 0}}:oe);let re=Vt.current[D];re&&(URL.revokeObjectURL(re),delete Vt.current[D])},vc=(0,I.useRef)(m);vc.current=m;let br=(0,I.useCallback)(()=>{let y=ge.current;!y||!vc.current||vc.current({controls:y,scene:mn.current,objectBindings:oa.current,nodeRefs:Tt.current,homeCameraState:gr.current,captureImage:D=>ws(Mt.current,D),invalidate:()=>Mt.current?.invalidate()})},[]),ma=(0,I.useCallback)(async(y=!1)=>{let D=ge.current,re=mn.current;if(!D||!re)return!1;try{if(y){let oe=D.getTarget(new wt.Vector3),$e=D.getPosition(new wt.Vector3).clone().sub(oe);$e.lengthSq()<1e-6&&$e.set(0,0,1),$e.normalize();let hn=new wt.Box3().setFromObject(re).getBoundingSphere(new wt.Sphere),Vn=Math.max(hn.radius*10,20),en=oe.clone().add($e.multiplyScalar(Vn));await D.setLookAt(en.x,en.y,en.z,oe.x,oe.y,oe.z,!1)}return Ri(!0),await gf(D,()=>D.fitToBox(re,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(oe=>{let ye=performance.now(),$e=()=>{D.active===!1||performance.now()-ye>8e3?(D.dispatchEvent({type:"update"}),Mt.current?.invalidate(),oe()):(Mt.current?.invalidate(),setTimeout($e,100))};setTimeout($e,100)}),kr.current=!0,B(),br(),!0}catch(oe){return console.error("Fit scene error:",oe),!1}},[B,br]);(0,I.useEffect)(()=>{if(kr.current=!1,Ei.current=!1,gr.current=null,mn.current=null,ns(!1),eo(!1),aa(!1),ss({total:0,missing:0}),Wr("Loading model..."),!e){ki(!1),Ri(!0);return}ki(!0),Ri(!!He||Qa.current);let y=!1,D=null,re=ye=>{D=setTimeout(oe,ye)},oe=()=>{if(y||kr.current||Ei.current)return;if(!ge.current||!mn.current){re(100);return}if(Yx(mn.current,ge.current),Kh(ge.current)){kr.current=!0,B(),br(),ki(!1),Ri(!0),Mt.current?.invalidate();return}Ei.current=!0,(He?He():Qa.current?Promise.resolve(!0):ma(!0)).then($e=>{kr.current=$e!==!1,kr.current?(B(),br(),ki(!1)):y||re(100)}).catch(()=>{kr.current=!1,y||re(100)}).finally(()=>{Ei.current=!1})};return re(50),()=>{y=!0,D&&clearTimeout(D)}},[B,ma,e,br,He,t]),(0,I.useEffect)(()=>{if(!Gt)return;let y=Qi;if(!y)return;let D=null,re=new ResizeObserver(()=>{!kr.current||Ei.current||(D&&clearTimeout(D),D=setTimeout(()=>{ma()},150))});return re.observe(y),()=>{re.disconnect(),D&&clearTimeout(D)}},[Qi,ma,Gt]);let Ob=(0,I.useCallback)(y=>{if(yb.current||(Rr(!1),tr(),na(null),Ka(null),ua(y),St||!Ft))return;let D=ge.current,re=oi(y),oe=re?Tt.current[re]:null;D&&y.cameraState?.position&&y.cameraState?.target?(D.setPosition(y.cameraState.position[0],y.cameraState.position[1],y.cameraState.position[2],!0),D.setTarget(y.cameraState.target[0],y.cameraState.target[1],y.cameraState.target[2],!0)):D&&oe&&D.fitToBox(oe,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[ua,tr,oi,St,Ft]),Uu=(0,I.useCallback)(y=>{if(ua(y),St)return;let D=ge.current,re=oi(y),oe=re?Tt.current[re]:null;if(!D||!oe)return;let ye=y.cameraState;ye?.position&&ye?.target?(D.setPosition(ye.position[0],ye.position[1],ye.position[2],!0),D.setTarget(ye.target[0],ye.target[1],ye.target[2],!0)):D.fitToBox(oe,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[ua,oi,St]);(0,I.useEffect)(()=>{br()},[br]);let Fu=(0,I.useCallback)((y,D)=>{u?.(y,D),br()},[br,u]),Vu=(0,I.useCallback)(y=>{mn.current=y,Eu(y),ss(qx(y));let D=ho(y);cc(D>Di?D:null),os(!1),D>Di&&Wr(`Preparing large model (${Math.round(D/1e6)}M triangles) \u2014 the first display can take a while on this device...`),ns(!0),eo(!1),is(!1),b?.(y),br()},[br,b,Eu]),ju=(0,I.useCallback)(y=>{ki(!1),Ri(!0),eo(!0),w?.(y)},[w]),Ib=(0,I.useCallback)((y,D)=>{if(!ze)return;let re={...te,lighting:{...te.lighting,lights:te.lighting.lights.map(oe=>oe.id===y?{...oe,position:D}:oe)}};ze(re)},[te,ze]);(0,I.useEffect)(()=>{let y=mn.current;if(!Gr||!y){aa(!1);return}let D=Object.entries(Rt);if(D.length===0){aa(!1);return}let re=new Set(Object.keys(Sa(y).nodesById)),oe=D.some(([ye,$e])=>!re.has($e.modelObjectId??ye));aa(oe)},[Gr,Rt]);let xc=(0,I.useCallback)(async()=>{if(He){await He();return}let y=ge.current;if(!y)return;let D=gr.current;try{D?await gf(y,()=>y.setLookAt(D.position[0],D.position[1],D.position[2],D.target[0],D.target[1],D.target[2],!0)):await ma()}catch(re){console.error("Reset camera error:",re)}},[He,ma]),Wy=(0,I.useCallback)(()=>{sa(!1),Rr(!0)},[]),Xy=(0,I.useCallback)(()=>{Rr(!1)},[]),zb=(0,I.useCallback)(()=>{Rr(!1),sa(!0),setTimeout(()=>{xc()},100)},[xc]),Ub=(0,I.useCallback)((y,D)=>{Fu(y,D)},[Fu]),Fb=(0,I.useCallback)(y=>{if(xt!=="scene"||Dt!=="Annotations"||y.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let re=zn.current,oe=ge.current?.camera,ye=mn.current;if(!re||!oe||!ye)return;let $e=re.getBoundingClientRect(),hn=(y.clientX-$e.left)/$e.width*2-1,Vn=-((y.clientY-$e.top)/$e.height)*2+1,en=new wt.Raycaster;en.setFromCamera(new wt.Vector2(hn,Vn),oe);let et=en.intersectObject(ye,!0);if(et.length===0)return;let jt=et[0],ct=jt.point,jn=ye.worldToLocal(jt.point.clone()),fn=[0,0,1];if(jt.face){let ha=jt.face.normal.clone().transformDirection(jt.object.matrixWorld).normalize();fn=[ha.x,ha.y,ha.z]}ds({worldPosition:[ct.x,ct.y,ct.z],localPosition:[jn.x,jn.y,jn.z],worldNormal:fn,anchor:Wx(jt),screenX:y.clientX-$e.left,screenY:y.clientY-$e.top}),us({title:"",description:""})},[xt,Dt]),Hu=(0,I.useCallback)(()=>{if(!Fn||!ai.title.trim())return;ps.current+=1;let D={id:ps.current,worldPosition:Fn.worldPosition,localPosition:Fn.localPosition,worldNormal:Fn.worldNormal,anchorNodeName:Fn.anchor?.anchorNodeName,anchorLocalPosition:Fn.anchor?.anchorLocalPosition,title:ai.title.trim(),description:ai.description},re=[...Nr,D];Mu(re),C?.(re),ds(null)},[Fn,ai,Nr,C]),yc=(0,I.useCallback)(()=>ds(null),[]),Vb=(0,I.useCallback)(y=>{Lr(y)},[Lr]);if(In.status==="checking")return(0,z.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,z.jsx)(Oi,{title:"Verifying License",message:"Checking your license key..."})});if(In.status==="invalid")return(0,z.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,z.jsx)(Oi,{tone:"error",title:"Invalid License",message:In.isLocalDomain?In.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let Gu=Er?$r(Er.objectId):null,Wu=Gu?Rt[Gu]?.style?.material?.texture?.path:void 0,jb=zn.current?.offsetWidth??600,Hb=zn.current?.offsetHeight??400,Gb=350,Wb=290,Xb=Fn?Math.min(Fn.screenX+12,jb-Gb-8):0,$b=Fn?Math.min(Fn.screenY,Hb-Wb-8):0,qb=Z&&!!e&&!lc&&(!Gr||!ia||ra),co=st&&(Li&&(pc||yu)||wu||!!cs),uo=y=>16+y*42;return(0,z.jsxs)("div",{className:"ri-viewer",style:{background:he},children:[(0,z.jsxs)("div",{className:"ri-viewerLeft",ref:Ya,children:[V?V({isOpen:Lu,selectedObject:Bu,currentAction:$n,onClose:Du,onAction:fs}):(0,z.jsx)(kd,{isOpen:Lu,selectedObject:Bu,currentAction:$n,onClose:Du,onAction:fs,renderActionExtra:y=>y==="change-color"&&qn?(0,z.jsx)(Ad,{inline:!0,colorPicker:qn,onClose:tr,itemMaterials:Ai,setItemMaterials:ea}):y==="change-material"&&Er?(0,z.jsx)(Ed,{inline:!0,triggerFileUpload:Iu,materialPopup:Er,textureUrl:Wu,clearTexture:zu}):null}),(0,z.jsxs)("div",{className:`ri-canvasArea ${oo?"ri-canvasArea--measuring":""} ${ia?"":"ri-canvasArea--positioning"} ${_e?"ri-canvasArea--moveMode":""}`,ref:ac,tabIndex:Qe?0:void 0,onDoubleClick:Fb,onPointerDown:y=>{Qe&&zn.current?.focus({preventScroll:!0}),Cb(y)},onClick:Pb,children:[rs&&!to&&(0,z.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,z.jsx)(Te.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,z.jsx)("span",{children:"Object bindings data don't match this model"}),(0,z.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:y=>{y.stopPropagation(),is(!0)},"aria-label":"Dismiss",children:(0,z.jsx)(Te.X,{size:12})})]}),as!==null&&!dc&&(0,z.jsxs)("div",{className:`ri-largeModelBanner ${rs&&!to?"ri-largeModelBanner--offset":""}`,children:[(0,z.jsx)(Te.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,z.jsxs)("span",{children:["Very large model (",Math.round(as/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,z.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:y=>{y.stopPropagation(),os(!0)},"aria-label":"Dismiss",children:(0,z.jsx)(Te.X,{size:12})})]}),Q.model.renderer==="uv-checker"&&Ni.missing>0&&(0,z.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,z.jsx)(Te.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,z.jsxs)("span",{children:[Ni.missing===Ni.total?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${Ni.missing} of ${Ni.total} meshes have no UV0 coordinates.`," ","Missing UVs are shown in magenta."]})]}),(0,z.jsx)("input",{ref:Pt,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:Db}),(0,z.jsxs)(Ic,{camera:v,backgroundColor:P,shadows:U&&te.shadows.enabled,sceneConfig:Q,selectedObjectRef:gc,hoveredObjectRef:Nb,highlightOnHover:it,renderMode:at,maxDpr:wn,reduceGpuLoad:ht,xrStore:Li,rendererCaptureRef:Mt,preserveDrawingBuffer:ot,children:[S??(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Fc,{lightingConfig:te.lighting,shadowConfig:te.shadows,shadowsEnabled:U,environmentRotation:te.environment.rotation,environmentConfig:te.environment,modelBounds:wb,objectBindings:Rt,nodeRefs:Tt}),Zt&&te.lighting.lights.map(y=>!y.visible||y.type==="none"||y.type==="hemisphere"||y.attachment?null:(0,z.jsx)(pf,{light:y,position:y.position,color:y.color,intensity:y.intensity,visible:y.visible,onPositionChange:D=>Ib(y.id,D)},y.id))]}),(0,z.jsx)(zc,{controlsRef:ge,onCameraChange:Ub}),Ge&&(0,z.jsx)(Tl.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{ge.current?.update(0),Mt.current?.invalidate()},children:(0,z.jsx)(Tl.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),_e&&gc&&Br&&(0,z.jsx)(Ud,{node:gc,space:mt,onTransformChange:Bb,onDraggingChange:y=>{qe(y),so&&f?.(so,y)}},Br),(0,z.jsx)(ys,{onLoadError:ju,children:(0,z.jsx)(I.Suspense,{fallback:null,children:(()=>{let y=(0,z.jsxs)(z.Fragment,{children:[t?(0,z.jsx)(vd,{url:t,rotation:Q.model.rotation,errorTarget:n,cacheSize:a,onModelLoaded:Vu,onLoadError:ju}):(0,z.jsx)(Kc,{url:e,modelFormat:r,objectBindings:Rt,selectedItem:Br,itemMaterials:Ai,onItemClick:Ob,onItemHover:Lb,onModelLoaded:Vu,onAnimationsReady:M,nodeRefsOut:Tt,onNodeRefsChange:ii,materialRefsOut:qa,panelHoveredItem:c??Qn,sceneConfig:Q,zoomOnSelected:Ft,highlightOnHover:it,decoderConfig:le,explodeFactor:Me,suspendBindingTransforms:Ot}),(0,z.jsx)(yd,{annotations:Nr,sceneConfig:te,activeAnnotation:io,popupRef:Ti,canvasRootRef:zn,worldPositionsRef:ve,modelLoaded:Gr,onAnnotationClick:Vb,onCloseAnnotation:no,hideCloseButton:X,showAnnotationOnHover:Tn}),(0,z.jsx)($x,{annotation:hs,enabled:X,controlsRef:ge,offsetRef:lt}),Xe&&(0,z.jsx)(Sd,{controlsRef:ge,sceneRef:mn,config:Xe,playing:Un,resetOnPlay:lb,onFinished:()=>{Rr(!1),sa(!1)},onUserInteract:()=>{Rr(!1)}}),ie&&(0,z.jsx)(wd,{points:Tu,unit:nt,box:Au,showDimensions:mc})]});return Li?(0,z.jsx)(Dh,{ref:cb,box:Au,scaleMode:sn,onARStateChange:mb,children:y}):y})()})},t??e)]}),(0,z.jsx)(Da,{visible:qb,message:ls}),co&&(0,z.jsxs)("div",{className:"ri-xrTools",style:{top:`${uo(0)}px`},children:[!pc&&wu&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:pb,title:"View this model in AR with Apple Quick Look",children:[(0,z.jsx)(Te.Box,{size:16}),"View in AR"]}),cs&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:ub,title:"Open this experience on a phone for AR","aria-haspopup":"dialog","aria-expanded":Su,children:[(0,z.jsx)(Te.QrCode,{size:16}),(0,z.jsx)("span",{children:"Open on phone"})]}),Li&&pc&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>Li.enterAR().catch(y=>{console.error("Failed to enter AR session:",y)}),title:"View this model in your space",children:[(0,z.jsx)(Te.Smartphone,{size:16}),(0,z.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,z.jsx)("span",{children:"AR"})]}),Li&&yu&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>Li.enterVR().catch(y=>{console.error("Failed to enter VR session:",y)}),title:"View this model in VR",children:[(0,z.jsx)(Te.RectangleGoggles,{size:16}),(0,z.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,z.jsx)("span",{children:"VR"})]})]}),db,Su&&cs&&(0,z.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:y=>{y.target===y.currentTarget&&_u()},children:(0,z.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,z.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:_u,"aria-label":"Close phone handoff",children:(0,z.jsx)(Te.X,{size:18})}),(0,z.jsx)(Te.Smartphone,{size:22,"aria-hidden":"true"}),(0,z.jsx)("h2",{id:"ri-mobileHandoffTitle",children:"View in AR"}),(0,z.jsx)("p",{children:"Scan the code and choose AR."}),(0,z.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,z.jsx)(bf.QRCodeSVG,{value:cs,size:208,level:"M",marginSize:4,title:"QR code to open this model on a phone"})})]})}),ce&&(0,z.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${uo(co?1:0)}px`},children:(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${J?"ri-measureButton--active":""}`,onClick:()=>O(y=>!(y??q)),title:J?"Disable UV checker":"Enable UV checker","aria-label":J?"Disable UV checker":"Enable UV checker","aria-pressed":J,children:(0,z.jsx)(Te.Grid3X3,{size:16})})}),ie&&(0,z.jsxs)("div",{className:"ri-measureTools",style:{top:`${uo((co?1:0)+(ce?1:0))}px`},children:[(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${oo?"ri-measureButton--active":""}`,onClick:_b,title:oo?"Stop measuring":"Measure distance","aria-pressed":oo,children:(0,z.jsx)(Te.PencilRuler,{size:16})}),(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${mc?"ri-measureButton--active":""}`,onClick:Mb,title:"Toggle bounding dimensions","aria-pressed":mc,children:(0,z.jsx)(Te.RulerDimensionLine,{size:16})}),Tu.length>0&&(0,z.jsx)("button",{type:"button",className:"ri-measureButton",onClick:Sb,title:"Clear measurements",children:(0,z.jsx)(Te.Eraser,{size:16})}),oo&&(0,z.jsx)("span",{className:"ri-measureHint",children:"Click points on the model to measure"})]}),Xt&&(0,z.jsxs)("div",{className:"ri-explodeTools",style:{top:`${uo((co?1:0)+(ce?1:0)+(ie?1:0))}px`},children:[(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${Jt||Me>0?"ri-measureButton--active":""}`,onClick:()=>At(y=>!y),title:"Exploded view","aria-pressed":Jt,children:(0,z.jsx)(Te.Expand,{size:16})}),Jt&&(0,z.jsx)("div",{className:"ri-explodeSlider",onPointerDown:y=>y.stopPropagation(),children:(0,z.jsx)("input",{type:"range",min:0,max:100,value:Math.round(Me*100),onChange:y=>Fe(Number(y.target.value)/100),"aria-label":"Explode amount"})})]}),Xe&&(0,z.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${uo((co?1:0)+(ce?1:0)+(ie?1:0)+(Xt?1:0))}px`},children:[(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${Un?"ri-measureButton--active":""}`,onClick:()=>{Un?Rr(!1):(sa(!1),Rr(!0))},title:Un?"Pause cinematic":"Play cinematic","aria-pressed":Un,children:Un?(0,z.jsx)(Te.Pause,{size:16}):(0,z.jsx)(Te.Play,{size:16})}),Un&&(0,z.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:zb,title:"Stop cinematic and reset camera",children:(0,z.jsx)(Te.Square,{size:16})})]}),(N||W||On&&Qt.length>0)&&(0,z.jsxs)("div",{className:"ri-buttonContainer",children:[(0,z.jsx)("div",{className:"ri-tourControls",children:On&&Qt.length>0&&(0,z.jsx)(z.Fragment,{children:X?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)("button",{className:"ri-tourButton",onClick:gb,disabled:Pu||Qt.length===0||er<=0,title:"Previous annotation",children:[(0,z.jsx)(Te.ChevronLeft,{size:16}),(0,z.jsx)("span",{children:"Prev"})]}),(0,z.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:vb,title:"Stop guided tour",children:(0,z.jsx)(Te.Square,{size:16})}),(0,z.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:bb,disabled:Pu||Qt.length===0,title:"Next annotation",children:[(0,z.jsx)("span",{children:"Next"}),(0,z.jsx)(Te.ChevronRight,{size:16})]})]}):(0,z.jsx)("button",{className:"ri-navButtonSingle",onClick:fb,disabled:Qt.length===0,title:"Start guided tour",children:"Guided Tour"})})}),(0,z.jsxs)("div",{className:"ri-rightControls",children:[N&&(0,z.jsx)("button",{className:"ri-resetButton",onClick:xc,title:"Reset camera view",children:(0,z.jsx)(Te.RotateCcw,{})}),W&&(0,z.jsxs)("div",{className:"ri-downloadWrapper",onPointerDown:y=>y.stopPropagation(),children:[Tb&&(0,z.jsxs)("div",{className:"ri-downloadMenu",children:[(0,z.jsxs)("button",{className:"ri-downloadMenuItem",onClick:Eb,disabled:hc||!mn.current,children:[(0,z.jsx)(Te.Box,{size:14}),"Download GLB"]}),(0,z.jsx)("div",{className:"ri-downloadMenuDivider"}),ot&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)("button",{className:"ri-downloadMenuItem",onClick:kb,disabled:!mn.current,children:[(0,z.jsx)(Te.Camera,{size:14}),"Download PNG"]}),(0,z.jsx)("div",{className:"ri-downloadMenuDivider"})]}),(0,z.jsxs)("button",{className:"ri-downloadMenuItem",onClick:Rb,disabled:!mn.current,children:[(0,z.jsx)(Te.FileImage,{size:14}),"Download UV Layout"]}),ku&&(0,z.jsx)("div",{className:"ri-downloadMenuNotice",role:"status","aria-live":"polite",children:ku})]}),(0,z.jsx)("button",{className:"ri-downloadButton",onClick:Ab,disabled:hc||!mn.current,title:"Download options",children:hc?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)("span",{className:"ri-downloadButton__spinner"}),"Exporting\u2026"]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Te.Download,{size:15}),"Download"]})})]})]})]}),Fn&&(0,z.jsxs)("div",{className:"ri-annotationPopup",style:{left:Xb,top:$b},onPointerDown:y=>y.stopPropagation(),onClick:y=>y.stopPropagation(),children:[(0,z.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:"Title *",value:ai.title,onChange:y=>us(D=>({...D,title:y.target.value})),onKeyDown:y=>{y.key==="Enter"&&Hu(),y.key==="Escape"&&yc()}}),(0,z.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:"Description",value:ai.description,onChange:y=>us(D=>({...D,description:y.target.value})),onKeyDown:y=>{y.key==="Escape"&&yc()},rows:5}),(0,z.jsxs)("div",{className:"ri-annotationActions",children:[(0,z.jsx)("button",{onClick:Hu,className:`ri-annotationOkBtn ${ai.title.trim()?"":"disabled"}`,disabled:!ai.title.trim(),children:"OK"}),(0,z.jsx)("button",{onClick:yc,className:"ri-annotationCancelBtn",children:"Cancel"}),(0,z.jsx)("div",{className:"ri-annotationIcons"})]})]})]}),V&&qn&&(0,z.jsx)(Ad,{colorPicker:qn,onClose:tr,itemMaterials:Ai,setItemMaterials:ea}),V&&Er&&(0,z.jsx)(Ed,{triggerFileUpload:Iu,materialPopup:Er,textureUrl:Wu,clearTexture:zu})]}),G&&(0,z.jsx)("div",{className:"ri-viewerRight",children:T?T({objectBindings:Rt,onAction:fs,onFocus:Uu,onHover:ta}):(0,z.jsx)(Rd,{objectBindings:Rt,onAction:fs,onFocus:Uu,onHover:ta})}),$&&(0,z.jsx)(Gh,{controlsRef:ge,enabled:!0,opacity:Ne,moveSensitivity:be,position:de})]})}var ne=require("react"),kn=require("lucide-react");var Lt=require("react"),Fd=require("three");function vf(e){return[e.x,e.y,e.z]}function vi(e,t){let n=new Fd.Vector3,a=new Fd.Vector3;return t.getPosition(n),t.getTarget(a),{position:vf(n),target:vf(a),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 Kx(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 Vo(e,t,n=.6){let a=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=a}}function El(e={}){let t=(0,Lt.useRef)(e);t.current=e;let n=(0,Lt.useRef)(null),[a,r]=(0,Lt.useState)(null),[i,s]=(0,Lt.useState)(()=>({...e.presets})),l=(0,Lt.useRef)(i);l.current=i;let o=(0,Lt.useCallback)(S=>{r(v=>Kx(v,S)?v:S)},[]),c=(0,Lt.useCallback)((S,v)=>{o(vi(S,v))},[o]),d=(0,Lt.useRef)(null),p=(0,Lt.useRef)(null),h=(0,Lt.useRef)(null),f=(0,Lt.useCallback)(S=>{n.current=S;let v=vi(S.controls.camera,S.controls);o(v),S.scene!==p.current&&(p.current=S.scene,d.current=null,h.current=null),S.homeCameraState&&!d.current&&(d.current=S.homeCameraState);let{initialPosition:P,initialTarget:U,initialTransition:E=!1}=t.current;if((P||U)&&S.scene&&(P||S.homeCameraState)&&h.current!==S.controls){h.current=S.controls,S.homeCameraState||Oa(S.controls);let V=P??v.position,T=U??v.target;S.controls.setLookAt(V[0],V[1],V[2],T[0],T[1],T[2],E).then(()=>{if(n.current?.controls!==S.controls)return;let G=vi(S.controls.camera,S.controls);d.current={position:G.position,target:G.target},o(G)}).catch(()=>{})}},[o]),b=(0,Lt.useCallback)(async()=>{let S=n.current,v=S?.controls;if(!v)return!1;try{let P=d.current;return P?await Vo(v,()=>v.setLookAt(P.position[0],P.position[1],P.position[2],P.target[0],P.target[1],P.target[2],!0)):S?.scene?await Vo(v,()=>v.fitToBox(S.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await Vo(v,()=>v.reset(!0)),!0}catch{return!1}},[]),w=(0,Lt.useCallback)(async()=>{let S=n.current;if(!S?.controls||!S.scene)return!1;try{return await Vo(S.controls,()=>S.controls.fitToBox(S.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),k=(0,Lt.useCallback)(async S=>{let v=n.current;if(!v?.controls)return!1;let P=Sn(v.objectBindings,S);if(!P)return!1;let U=v.nodeRefs[P];if(!U)return!1;try{return await Vo(v.controls,()=>v.controls.fitToBox(U,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),x=(0,Lt.useCallback)(async(S,v=!0)=>{let P=n.current?.controls;if(!P)return!1;try{return n.current?.homeCameraState||Oa(P),await P.setTarget(S[0],S[1],S[2],v),o(vi(P.camera,P)),!0}catch{return!1}},[o]),u=(0,Lt.useCallback)(async(S,v=!0)=>{let P=n.current?.controls;if(!P)return!1;try{n.current?.homeCameraState||Oa(P);let U=[P.setLookAt(S.position[0],S.position[1],S.position[2],S.target[0],S.target[1],S.target[2],v)];S.azimuthAngle!=null&&S.polarAngle!=null&&U.push(P.rotateTo(S.azimuthAngle,S.polarAngle,v)),await Promise.all(U);let E=P.camera,V=!1;return S.fov!=null&&"fov"in E&&typeof E.fov=="number"&&(E.fov=S.fov,V=!0),S.zoom!=null&&"zoom"in E&&typeof E.zoom=="number"&&(E.zoom=S.zoom,V=!0),V&&"updateProjectionMatrix"in E&&E.updateProjectionMatrix(),o(vi(E,P)),!0}catch{return!1}},[o]),m=(0,Lt.useCallback)((S,v=!0)=>u(S,v),[u]),_=(0,Lt.useCallback)((S,v,P=!0)=>u({position:S,target:v},P),[u]),M=(0,Lt.useCallback)(async(S,v,P=!0)=>{let U=n.current?.controls;if(!U)return!1;try{return n.current?.homeCameraState||Oa(U),await U.rotateTo(S,v,P),o(vi(U.camera,U)),!0}catch{return!1}},[o]),C=(0,Lt.useCallback)(async(S,v=!0)=>{let P=n.current?.controls;if(!P)return!1;try{return n.current?.homeCameraState||Oa(P),await P.dollyTo(S,v),o(vi(P.camera,P)),!0}catch{return!1}},[o]),A=(0,Lt.useCallback)(S=>{let v=n.current?.controls,P=S.trim();if(!v||!P)return null;let U=vi(v.camera,v);return l.current={...l.current,[P]:U},s(E=>({...E,[P]:U})),o(U),U},[o]),g=(0,Lt.useCallback)((S,v=!0)=>{let P=l.current[S];return P?u(P,v):Promise.resolve(!1)},[u]);return{cameraState:a,cameraPresets:i,resetView:b,focusObject:k,fitScene:w,setCameraTarget:x,setCameraState:m,lookAt:_,orbitTo:M,dollyTo:C,savePreset:A,goToPreset:g,handleCameraChange:c,handleViewerReady:f}}var dn=require("react");function kl(){let e=(0,dn.useRef)(null),[t,n]=(0,dn.useState)([]),a=(0,dn.useRef)(null),[r,i]=(0,dn.useState)([]),[s,l]=(0,dn.useState)(null),[o,c]=(0,dn.useState)(!1),[d,p]=(0,dn.useState)(1),[h,f]=(0,dn.useState)(0),[b,w]=(0,dn.useState)(0);(0,dn.useEffect)(()=>()=>{a.current?.()},[]);let k=(0,dn.useCallback)(C=>{a.current?.(),e.current=C,n(C.clips),i(C.clipDetails??C.clips.map(g=>({sourceName:g,duration:0})));let A=C.getState?.()??{currentClip:null,isPlaying:!1,speed:1,time:0,duration:0};l(A.currentClip),c(A.isPlaying),p(A.speed),f(A.time),w(A.duration),C.subscribe?a.current=C.subscribe(g=>{l(g.currentClip),c(g.isPlaying),p(g.speed),f(g.time),w(g.duration)}):a.current=null},[]),x=(0,dn.useCallback)(C=>{e.current?.play(C),l(C),c(!0)},[]),u=(0,dn.useCallback)(()=>{e.current?.pause(),c(!1)},[]),m=(0,dn.useCallback)(()=>{e.current?.stop(),l(null),c(!1),f(0)},[]),_=(0,dn.useCallback)(C=>{e.current?.setSpeed(C),p(C)},[]),M=(0,dn.useCallback)(C=>{e.current?.seek?.(C),f(C)},[]);return{clips:t,clipDetails:r,currentClip:s,isPlaying:o,speed:d,time:h,duration:b,play:x,pause:u,stop:m,setSpeed:_,seek:M,handleAnimationsReady:k}}var Il=require("react");var Tf=require("react"),wi=require("lucide-react"),Bl=require("react-colorful");var xi=require("react"),wf=require("react-dom"),Rl=require("lucide-react"),Nl=require("react-colorful");function ja(e){let t=e.replace("#","").match(/.{2}/g).map(a=>parseInt(a,16)/255).map(a=>a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4));return .2126*t[0]+.7152*t[1]+.0722*t[2]>.179?"#000":"#fff"}var xf=require("react");function yf(e,t,n){(0,xf.useEffect)(()=>{if(!n)return;let a=Array.isArray(e)?e:[e],r=i=>{let s=i.target;a.some(o=>o.current?.contains(s))||t()};return document.addEventListener("pointerdown",r,!0),()=>{document.removeEventListener("pointerdown",r,!0)}},[e,t,n])}var Se=require("react/jsx-runtime");function Vd({anchorRef:e,onClose:t,children:n}){let a=(0,xi.useRef)(null),[r,i]=(0,xi.useState)(null);return yf([a,e],t,!0),(0,xi.useLayoutEffect)(()=>{let s=e.current;if(!s)return;let l=s.getBoundingClientRect(),o=222,c=8,d=Math.min(Math.max(l.right-o,c),window.innerWidth-o-c),p=Math.min(l.bottom+6,window.innerHeight-200);i({top:p,left:d})},[e]),r?(0,wf.createPortal)((0,Se.jsx)("div",{ref:a,className:"se-colorPickerPopover",style:{position:"fixed",top:r.top,left:r.left},children:n}),document.body):null}function Zx(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 $i({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 Je({title:e,open:t,onToggle:n,trailing:a,children:r,disabled:i,tooltip:s}){let l=s?`${s}`: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:l,children:[(0,Se.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Se.jsx)(Rl.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,Se.jsx)("span",{className:"se-panelTitle",children:e}),s?(0,Se.jsx)("span",{className:"se-panelHelp",title:l,"aria-label":l,role:"img",onClick:o=>o.stopPropagation(),children:(0,Se.jsx)(Rl.Info,{size:13})}):null]}),a?(0,Se.jsx)("span",{className:"se-panelTrailing",onClick:o=>o.stopPropagation(),children:a}):null]}),t?(0,Se.jsx)("div",{className:"se-panelBody",style:i?{opacity:.45,pointerEvents:"none"}:void 0,children:r}):null]})}function rt({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:a=>t(a.target.checked)}),(0,Se.jsx)("span",{className:"se-switchTrack",children:(0,Se.jsx)("span",{className:"se-switchThumb"})})]})}function K({label:e,value:t,min:n,max:a,step:r,formatValue:i,onChange:s,disabled:l=!1}){return(0,Se.jsxs)("label",{className:`se-field ${l?"se-field--disabled":""}`,children:[(0,Se.jsxs)("span",{className:"se-fieldLabel",children:[e,(0,Se.jsx)("span",{className:"se-fieldValue",children:i?i(t):t})]}),(0,Se.jsx)("input",{className:"se-slider",type:"range",min:n,max:a,step:r,value:t,onChange:o=>s(Number(o.target.value)),disabled:l})]})}function ut({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:a=>n(a.target.checked)})]})}function Zn({label:e,value:t,options:n,onChange:a}){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=>a(r.target.value),children:n.map(r=>(0,Se.jsx)("option",{value:r,children:Zx(r)},r))})]})}function ur({label:e,value:t,onChange:n}){let[a,r]=(0,xi.useState)(!1),i=(0,xi.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:i,style:{display:"inline-flex"},children:(0,Se.jsx)(Nl.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>r(s=>!s),style:{background:t,color:ja(t)},color:t,onChange:n})})]}),a?(0,Se.jsx)(Vd,{anchorRef:i,onClose:()=>r(!1),children:(0,Se.jsx)(Nl.HexColorPicker,{color:t,onChange:n})}):null]})}function yi({label:e,value:t,min:n,max:a,step:r,onChange:i}){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((l,o)=>(0,Se.jsxs)("label",{className:"se-vectorAxis",children:[(0,Se.jsx)("span",{children:l}),(0,Se.jsx)("input",{type:"number",className:"se-numberInput",min:n,max:a,step:r,value:t[o],onChange:c=>{let d=[...t];d[o]=Number(c.target.value),i(d)}})]},l))})]})}function qi({label:e,value:t,min:n,max:a,step:r,onChange:i}){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((l,o)=>(0,Se.jsxs)("label",{className:"se-vectorAxis",children:[(0,Se.jsx)("span",{children:l}),(0,Se.jsx)("input",{type:"number",className:"se-numberInput",min:n,max:a,step:r,value:t[o],onChange:c=>{let d=[...t];d[o]=Number(c.target.value),i(d)}})]},l))})]})}var Sf={free:0,starter:1,growth:2};function _f(e){return e==="starter"||e==="growth"||e==="scale"?e==="scale"?"growth":e:"free"}function ni(e,t){return Sf[e]>=Sf[t]}var Mf={free:"Free",starter:"Starter",growth:"Growth"};var Cf=require("lucide-react");var jo=require("react/jsx-runtime");function Wn({requiredTier:e,feature:t}){return(0,jo.jsxs)("div",{className:"bb-tierLock",children:[(0,jo.jsx)(Cf.Lock,{size:16}),(0,jo.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",Mf[e]," plan or higher."]})]})}var ee=require("react/jsx-runtime"),Jx=["lit","unlit","normals"],Qx=["color","image","environment"];function Pf(e){let t=e%360;return t<0?t+360:t}function Ll({title:e,open:t,onToggle:n,children:a,trailing:r}){return(0,ee.jsxs)("section",{className:"se-panel",children:[(0,ee.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:[(0,ee.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ee.jsx)(wi.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,ee.jsx)("span",{className:"se-panelTitle",children:e})]}),r?(0,ee.jsx)("span",{className:"se-panelTrailing",onClick:i=>i.stopPropagation(),children:r}):null]}),t?(0,ee.jsx)("div",{className:"se-panelBody",children:a}):null]})}function jd({config:e,onChange:t}){let{model:n,camera:a,wireframe:r,background:i,environment:s}=e,{tier:l}=dr(),o=ni(l,"starter"),[c,d]=(0,Tf.useState)({general:!0,camera:!0,wireframe:!1,background:!1}),p=u=>d(m=>({...m,[u]:!m[u]})),h=u=>t({...e,model:u}),f=u=>t({...e,camera:u}),b=u=>t({...e,wireframe:u}),w=u=>t({...e,background:u}),k=u=>t({...e,environment:u}),x=u=>{k({...s,source:"preset",preset:u})};return(0,ee.jsxs)("div",{className:"se-generalContent",children:[(0,ee.jsxs)(Ll,{title:"General",open:c.general,onToggle:()=>p("general"),children:[(0,ee.jsxs)("div",{className:"se-field",children:[(0,ee.jsxs)("div",{className:"se-fieldLabel",children:[(0,ee.jsx)("span",{children:"Straighten model"}),(0,ee.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>h({...n,rotation:[0,0,0]}),"aria-label":"Reset model rotation",children:(0,ee.jsx)(wi.RotateCcw,{size:16})})]}),(0,ee.jsx)("div",{className:"se-axisStepperGrid",children:["X","Y","Z"].map((u,m)=>(0,ee.jsxs)("div",{className:"se-axisStepper",children:[(0,ee.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let _=[...n.rotation];_[m]=Pf(_[m]-90),h({...n,rotation:_})},"aria-label":`Rotate ${u} axis backward`,children:(0,ee.jsx)(wi.ChevronLeft,{size:16})}),(0,ee.jsx)("span",{className:"se-axisStepperLabel",children:u}),(0,ee.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let _=[...n.rotation];_[m]=Pf(_[m]+90),h({...n,rotation:_})},"aria-label":`Rotate ${u} axis forward`,children:(0,ee.jsx)(wi.ChevronRight,{size:16})})]},u))})]}),(0,ee.jsx)(yi,{label:"Rotation",value:n.rotation,min:0,max:360,step:1,onChange:u=>h({...n,rotation:u})}),(0,ee.jsxs)("div",{className:"se-field",children:[(0,ee.jsx)("span",{className:"se-fieldLabel",children:"Renderer"}),(0,ee.jsx)("div",{className:"se-segmentedControl se-segmentedControl--renderer",children:Mp.map(u=>(0,ee.jsx)("button",{type:"button",className:`se-segmentedOption ${n.renderer===u?"se-segmentedOption--active":""}`,onClick:()=>h({...n,renderer:u}),children:u==="uv-checker"?"UV CHECKER":u.toUpperCase()},u))})]}),(0,ee.jsx)(Zn,{label:"Shading",value:n.shading,options:Jx,onChange:u=>h({...n,shading:u})})]}),(0,ee.jsx)(Ll,{title:"Camera",open:c.camera,onToggle:()=>p("camera"),children:(0,ee.jsx)(K,{label:"Field Of View",value:a.fieldOfView,min:20,max:100,step:.1,formatValue:u=>`${u.toFixed(3)}\xB0`,onChange:u=>f({...a,fieldOfView:u})})}),(0,ee.jsx)(Ll,{title:"Wireframe",open:c.wireframe,onToggle:()=>p("wireframe"),trailing:(0,ee.jsxs)("label",{className:"se-switch","aria-label":"Toggle wireframe preview",children:[(0,ee.jsx)("input",{type:"checkbox",checked:o&&r.enabled,disabled:!o,onChange:u=>b({...r,enabled:u.target.checked})}),(0,ee.jsx)("span",{className:"se-switchTrack",children:(0,ee.jsx)("span",{className:"se-switchThumb"})})]}),children:o?(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsx)(K,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:u=>b({...r,opacity:u})}),(0,ee.jsx)(ur,{label:"Wire color",value:r.color,onChange:u=>b({...r,color:u})})]}):(0,ee.jsx)(Wn,{requiredTier:"starter",feature:"Wireframe preview"})}),(0,ee.jsx)(Ll,{title:"Background",open:c.background,onToggle:()=>p("background"),trailing:(0,ee.jsxs)("label",{className:"se-switch","aria-label":"Toggle scene background",children:[(0,ee.jsx)("input",{type:"checkbox",checked:i.enabled,onChange:u=>w({...i,enabled:u.target.checked})}),(0,ee.jsx)("span",{className:"se-switchTrack",children:(0,ee.jsx)("span",{className:"se-switchThumb"})})]}),children:i.enabled?(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsxs)("div",{className:"se-field",children:[(0,ee.jsx)("span",{className:"se-fieldLabel",children:"Background type"}),(0,ee.jsx)("div",{className:"se-segmentedControl",children:Qx.map(u=>(0,ee.jsx)("button",{type:"button",className:`se-segmentedOption ${i.type===u?"se-segmentedOption--active":""}`,onClick:()=>w({...i,type:u}),children:u},u))})]}),i.type==="environment"?o?(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsxs)("div",{className:"se-field",children:[(0,ee.jsx)("span",{className:"se-fieldLabel",children:"Environment source"}),(0,ee.jsxs)("div",{className:"se-segmentedControl",children:[(0,ee.jsx)("button",{type:"button",className:`se-segmentedOption ${s.source==="preset"?"se-segmentedOption--active":""}`,onClick:()=>k({...s,source:"preset"}),children:"PRESET"}),(0,ee.jsx)("button",{type:"button",className:`se-segmentedOption ${s.source==="custom"?"se-segmentedOption--active":""}`,onClick:()=>k({...s,source:"custom"}),children:"CUSTOM"})]})]}),s.source==="preset"?(0,ee.jsx)(Zn,{label:"Environment preset",value:s.preset,options:Cp,onChange:x}):(0,ee.jsxs)("label",{className:"se-field",children:[(0,ee.jsx)("span",{className:"se-fieldLabel",children:"Custom environment URL"}),(0,ee.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/environment.hdr",value:s.customEnvironmentUrl,onChange:u=>k({...s,customEnvironmentUrl:u.target.value})}),(0,ee.jsx)("span",{className:"bb-note",children:"Enter a HDR, EXR, JPG, JPEG, PNG, or WEBP URL."}),s.customEnvironmentUrl.trim()&&!Ms(s.customEnvironmentUrl)?(0,ee.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"Invalid image/HDRI URL."}):null]}),(0,ee.jsx)(K,{label:"Environment intensity",value:s.intensity,min:0,max:3,step:.05,onChange:u=>k({...s,intensity:u})})]}):(0,ee.jsx)(Wn,{requiredTier:"starter",feature:"Environment backgrounds"}):null,i.type==="image"?(0,ee.jsxs)("label",{className:"se-field",children:[(0,ee.jsx)("span",{className:"se-fieldLabel",children:"Background image URL"}),(0,ee.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/background.jpg",value:i.imageUrl,onChange:u=>w({...i,imageUrl:u.target.value})})]}):null,i.type==="color"?(0,ee.jsxs)("div",{className:"se-field",children:[(0,ee.jsx)("span",{className:"se-fieldLabel",children:"Background color"}),(0,ee.jsx)("div",{className:"se-inlineColorPicker",children:(0,ee.jsx)(Bl.HexColorPicker,{color:i.color,onChange:u=>w({...i,color:u})})}),(0,ee.jsx)("div",{className:"se-fieldInline",children:(0,ee.jsx)(Bl.HexColorInput,{prefixed:!0,className:"se-swatch",style:{background:i.color,color:ja(i.color)},color:i.color,onChange:u=>w({...i,color:u})})})]}):null]}):(0,ee.jsx)("div",{className:"se-placeholder",children:"Background rendering is disabled for this scene preset."})})]})}var Zf=require("react");var ue=require("react/jsx-runtime");function Af({pp:e,set:t,open:n,toggle:a}){let{ssao:r}=e;return(0,ue.jsxs)(Je,{title:"SSAO",tooltip:"Adds soft contact shadows in corners, creases, and tight spaces.",open:n.ssao,onToggle:()=>a("ssao"),disabled:!r.enabled,trailing:(0,ue.jsx)(rt,{checked:r.enabled,onChange:i=>t("ssao",{...r,enabled:i}),label:"Toggle SSAO"}),children:[(0,ue.jsx)(K,{label:"Samples",value:r.samples,min:1,max:64,step:1,onChange:i=>t("ssao",{...r,samples:i})}),(0,ue.jsx)(K,{label:"Rings",value:r.rings,min:1,max:12,step:1,onChange:i=>t("ssao",{...r,rings:i})}),(0,ue.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:20,step:.5,onChange:i=>t("ssao",{...r,intensity:i})}),(0,ue.jsx)(K,{label:"Radius",value:r.radius,min:.01,max:1,step:.01,onChange:i=>t("ssao",{...r,radius:i})}),(0,ue.jsx)(K,{label:"Bias",value:r.bias,min:0,max:.1,step:.001,onChange:i=>t("ssao",{...r,bias:i})}),(0,ue.jsx)(K,{label:"Luminance Influence",value:r.luminanceInfluence,min:0,max:1,step:.01,onChange:i=>t("ssao",{...r,luminanceInfluence:i})}),(0,ue.jsx)(K,{label:"Fade",value:r.fade,min:0,max:.1,step:.001,onChange:i=>t("ssao",{...r,fade:i})}),(0,ue.jsx)(K,{label:"Min Radius Scale",value:r.minRadiusScale,min:0,max:1,step:.01,onChange:i=>t("ssao",{...r,minRadiusScale:i})}),(0,ue.jsx)(K,{label:"World Distance Threshold",value:r.worldDistanceThreshold,min:0,max:100,step:.1,onChange:i=>t("ssao",{...r,worldDistanceThreshold:i})}),(0,ue.jsx)(K,{label:"World Distance Falloff",value:r.worldDistanceFalloff,min:0,max:20,step:.1,onChange:i=>t("ssao",{...r,worldDistanceFalloff:i})}),(0,ue.jsx)(K,{label:"World Proximity Threshold",value:r.worldProximityThreshold,min:0,max:100,step:.1,onChange:i=>t("ssao",{...r,worldProximityThreshold:i})}),(0,ue.jsx)(K,{label:"World Proximity Falloff",value:r.worldProximityFalloff,min:0,max:20,step:.1,onChange:i=>t("ssao",{...r,worldProximityFalloff:i})})]})}function Ef({pp:e,set:t,open:n,toggle:a}){let{autofocus:r}=e;return(0,ue.jsxs)(Je,{title:"Auto focus",tooltip:"Keeps the focus plane tracking a subject so the image stays sharp where you want it.",open:n.autofocus,onToggle:()=>a("autofocus"),disabled:!r.enabled,trailing:(0,ue.jsx)(rt,{checked:r.enabled,onChange:i=>t("autofocus",{...r,enabled:i}),label:"Toggle Autofocus"}),children:[(0,ue.jsx)(K,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:i=>t("autofocus",{...r,focusDistance:i})}),(0,ue.jsx)(K,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:i=>t("autofocus",{...r,focusRange:i})}),(0,ue.jsx)(K,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:i=>t("autofocus",{...r,focalLength:i})}),(0,ue.jsx)(K,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:i=>t("autofocus",{...r,bokehScale:i})}),(0,ue.jsx)(yi,{label:"Target",value:r.target,min:-100,max:100,step:.1,onChange:i=>t("autofocus",{...r,target:i})}),(0,ue.jsx)(ut,{label:"Mouse Follow",checked:r.mouse,onChange:i=>t("autofocus",{...r,mouse:i})}),(0,ue.jsx)(ut,{label:"Manual Update",checked:r.manual,onChange:i=>t("autofocus",{...r,manual:i})}),(0,ue.jsx)(K,{label:"Debug",value:r.debug,min:0,max:1,step:.01,onChange:i=>t("autofocus",{...r,debug:i})}),(0,ue.jsx)(K,{label:"Smooth Time",value:r.smoothTime,min:0,max:2,step:.01,onChange:i=>t("autofocus",{...r,smoothTime:i})})]})}function kf({pp:e,set:t,open:n,toggle:a}){let{godRays:r}=e;return(0,ue.jsxs)(Je,{title:"God Rays",tooltip:"Creates light shafts that streak outward from a bright sun or light source.",open:n.godRays,onToggle:()=>a("godRays"),disabled:!r.enabled,trailing:(0,ue.jsx)(rt,{checked:r.enabled,onChange:i=>t("godRays",{...r,enabled:i}),label:"Toggle GodRays"}),children:[(0,ue.jsx)(yi,{label:"Sun Position",value:r.sunPosition,min:-100,max:100,step:.1,onChange:i=>t("godRays",{...r,sunPosition:i})}),(0,ue.jsx)(K,{label:"Samples",value:r.samples,min:1,max:128,step:1,onChange:i=>t("godRays",{...r,samples:i})}),(0,ue.jsx)(K,{label:"Density",value:r.density,min:0,max:2,step:.01,onChange:i=>t("godRays",{...r,density:i})}),(0,ue.jsx)(K,{label:"Decay",value:r.decay,min:0,max:1,step:.01,onChange:i=>t("godRays",{...r,decay:i})}),(0,ue.jsx)(K,{label:"Weight",value:r.weight,min:0,max:2,step:.01,onChange:i=>t("godRays",{...r,weight:i})}),(0,ue.jsx)(K,{label:"Exposure",value:r.exposure,min:0,max:2,step:.01,onChange:i=>t("godRays",{...r,exposure:i})}),(0,ue.jsx)(K,{label:"Clamp Max",value:r.clampMax,min:0,max:2,step:.01,onChange:i=>t("godRays",{...r,clampMax:i})}),(0,ue.jsx)(ut,{label:"Blur",checked:r.blur,onChange:i=>t("godRays",{...r,blur:i})}),(0,ue.jsx)(Zn,{label:"Kernel Size",value:r.kernelSize,options:go,onChange:i=>t("godRays",{...r,kernelSize:i})})]})}function Rf({pp:e,set:t,open:n,toggle:a}){let{lensflare:r}=e;return(0,ue.jsxs)(Je,{title:"Lens Flare",tooltip:"Adds camera flare artifacts and glow from a bright light source.",open:n.lensflare,onToggle:()=>a("lensflare"),disabled:!r.enabled,trailing:(0,ue.jsx)(rt,{checked:r.enabled,onChange:i=>t("lensflare",{...r,enabled:i}),label:"Toggle Lensflare"}),children:[(0,ue.jsx)(yi,{label:"Lens Position",value:r.lensPosition,min:-100,max:100,step:.1,onChange:i=>t("lensflare",{...r,lensPosition:i})}),(0,ue.jsx)(K,{label:"Smooth Time",value:r.smoothTime,min:0,max:1,step:.01,onChange:i=>t("lensflare",{...r,smoothTime:i})}),(0,ue.jsx)(K,{label:"Glare Size",value:r.glareSize,min:0,max:1,step:.01,onChange:i=>t("lensflare",{...r,glareSize:i})}),(0,ue.jsx)(K,{label:"Flare Size",value:r.flareSize,min:0,max:.1,step:.001,onChange:i=>t("lensflare",{...r,flareSize:i})}),(0,ue.jsx)(K,{label:"Flare Speed",value:r.flareSpeed,min:0,max:.2,step:.001,onChange:i=>t("lensflare",{...r,flareSpeed:i})}),(0,ue.jsx)(K,{label:"Flare Shape",value:r.flareShape,min:0,max:.2,step:.001,onChange:i=>t("lensflare",{...r,flareShape:i})}),(0,ue.jsx)(ut,{label:"Animated",checked:r.animated,onChange:i=>t("lensflare",{...r,animated:i})}),(0,ue.jsx)(ut,{label:"Anamorphic",checked:r.anamorphic,onChange:i=>t("lensflare",{...r,anamorphic:i})}),(0,ue.jsx)(ur,{label:"Color Gain",value:r.colorGain,onChange:i=>t("lensflare",{...r,colorGain:i})}),(0,ue.jsx)(K,{label:"Halo Scale",value:r.haloScale,min:0,max:2,step:.01,onChange:i=>t("lensflare",{...r,haloScale:i})}),(0,ue.jsx)(ut,{label:"Secondary Ghosts",checked:r.secondaryGhosts,onChange:i=>t("lensflare",{...r,secondaryGhosts:i})}),(0,ue.jsx)(ut,{label:"Additional Streaks",checked:r.aditionalStreaks,onChange:i=>t("lensflare",{...r,aditionalStreaks:i})}),(0,ue.jsx)(K,{label:"Ghost Scale",value:r.ghostScale,min:0,max:1,step:.01,onChange:i=>t("lensflare",{...r,ghostScale:i})}),(0,ue.jsx)(K,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:i=>t("lensflare",{...r,opacity:i})}),(0,ue.jsx)(ut,{label:"Star Burst",checked:r.starBurst,onChange:i=>t("lensflare",{...r,starBurst:i})})]})}function Nf({pp:e,set:t,open:n,toggle:a}){let{depthOfField:r}=e;return(0,ue.jsxs)(Je,{title:"Depth Of Field",tooltip:"Blurs areas that sit away from the focal plane for a camera-like look.",open:n.depthOfField,onToggle:()=>a("depthOfField"),disabled:!r.enabled,trailing:(0,ue.jsx)(rt,{checked:r.enabled,onChange:i=>t("depthOfField",{...r,enabled:i}),label:"Toggle DepthOfField"}),children:[(0,ue.jsx)(K,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:i=>t("depthOfField",{...r,focusDistance:i})}),(0,ue.jsx)(K,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:i=>t("depthOfField",{...r,focusRange:i})}),(0,ue.jsx)(K,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:i=>t("depthOfField",{...r,focalLength:i})}),(0,ue.jsx)(K,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:i=>t("depthOfField",{...r,bokehScale:i})})]})}var Le=require("react/jsx-runtime"),ey=["linear","reinhard","aces"];function Lf({pp:e,set:t,open:n,toggle:a}){let{colorAverage:r}=e;return(0,Le.jsx)(Je,{title:"Color Average",tooltip:"Blends the frame toward a single average color for a washed-out stylized look.",open:n.colorAverage,onToggle:()=>a("colorAverage"),disabled:!r.enabled,trailing:(0,Le.jsx)(rt,{checked:r.enabled,onChange:i=>t("colorAverage",{...r,enabled:i}),label:"Toggle ColorAverage"}),children:(0,Le.jsx)("div",{className:"se-placeholder",children:"Averages the frame color using the docs default blend mode."})})}function Bf({pp:e,set:t,open:n,toggle:a}){let{brightnessContrast:r}=e;return(0,Le.jsxs)(Je,{title:"Brightness Contrast",tooltip:"Raises or lowers overall brightness and contrast across the scene.",open:n.brightnessContrast,onToggle:()=>a("brightnessContrast"),disabled:!r.enabled,trailing:(0,Le.jsx)(rt,{checked:r.enabled,onChange:i=>t("brightnessContrast",{...r,enabled:i}),label:"Toggle BrightnessContrast"}),children:[(0,Le.jsx)(K,{label:"Brightness",value:r.brightness,min:-1,max:1,step:.01,onChange:i=>t("brightnessContrast",{...r,brightness:i})}),(0,Le.jsx)(K,{label:"Contrast",value:r.contrast,min:-1,max:1,step:.01,onChange:i=>t("brightnessContrast",{...r,contrast:i})})]})}function Df({pp:e,set:t,open:n,toggle:a}){let{hueSaturation:r}=e;return(0,Le.jsxs)(Je,{title:"Hue Saturation",tooltip:"Shifts the hue and saturation to tint the whole image.",open:n.hueSaturation,onToggle:()=>a("hueSaturation"),disabled:!r.enabled,trailing:(0,Le.jsx)(rt,{checked:r.enabled,onChange:i=>t("hueSaturation",{...r,enabled:i}),label:"Toggle HueSaturation"}),children:[(0,Le.jsx)(K,{label:"Hue",value:r.hue,min:-Math.PI,max:Math.PI,step:.01,formatValue:i=>`${i.toFixed(2)} rad`,onChange:i=>t("hueSaturation",{...r,hue:i})}),(0,Le.jsx)(K,{label:"Saturation",value:r.saturation,min:-1,max:1,step:.01,onChange:i=>t("hueSaturation",{...r,saturation:i})})]})}function Of({pp:e,set:t,open:n,toggle:a}){let{vignette:r}=e;return(0,Le.jsxs)(Je,{title:"Vignette",tooltip:"Darkens the edges of the screen so the center feels more focused.",open:n.vignette,onToggle:()=>a("vignette"),disabled:!r.enabled,trailing:(0,Le.jsx)(rt,{checked:r.enabled,onChange:i=>t("vignette",{...r,enabled:i}),label:"Toggle Vignette"}),children:[(0,Le.jsx)(K,{label:"Offset",value:r.offset,min:0,max:1,step:.01,onChange:i=>t("vignette",{...r,offset:i})}),(0,Le.jsx)(K,{label:"Darkness",value:r.darkness,min:0,max:1,step:.01,onChange:i=>t("vignette",{...r,darkness:i})}),(0,Le.jsx)(ut,{label:"Eskil",checked:r.eskil,onChange:i=>t("vignette",{...r,eskil:i})})]})}function If({pp:e,set:t,open:n,toggle:a}){let{bloom:r}=e;return(0,Le.jsxs)(Je,{title:"Bloom",tooltip:"Makes bright areas glow and bleed softly into nearby pixels.",open:n.bloom,onToggle:()=>a("bloom"),disabled:!r.enabled,trailing:(0,Le.jsx)(rt,{checked:r.enabled,onChange:i=>t("bloom",{...r,enabled:i}),label:"Toggle Bloom"}),children:[(0,Le.jsx)(K,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:i=>t("bloom",{...r,luminanceThreshold:i})}),(0,Le.jsx)(K,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:i=>t("bloom",{...r,luminanceSmoothing:i})}),(0,Le.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:3,step:.05,onChange:i=>t("bloom",{...r,intensity:i})}),(0,Le.jsx)(ut,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:i=>t("bloom",{...r,mipmapBlur:i})}),(0,Le.jsx)(K,{label:"Radius",value:r.radius,min:0,max:1,step:.01,onChange:i=>t("bloom",{...r,radius:i})}),(0,Le.jsx)(K,{label:"Levels",value:r.levels,min:1,max:16,step:1,onChange:i=>t("bloom",{...r,levels:i})})]})}function zf({pp:e,set:t,open:n,toggle:a}){let{toneMapping:r}=e;return(0,Le.jsxs)(Je,{title:"Tone Mapping",tooltip:"Remaps HDR lighting to screen output and controls exposure style.",open:n.toneMapping,onToggle:()=>a("toneMapping"),disabled:!r.enabled,trailing:(0,Le.jsx)(rt,{checked:r.enabled,onChange:i=>t("toneMapping",{...r,enabled:i}),label:"Toggle ToneMapping"}),children:[(0,Le.jsxs)("div",{className:"se-field",children:[(0,Le.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,Le.jsx)("div",{className:"se-segmentedControl",children:ey.map(i=>(0,Le.jsx)("button",{type:"button",className:`se-segmentedOption ${r.mode===i?"se-segmentedOption--active":""}`,onClick:()=>t("toneMapping",{...r,mode:i}),children:i==="aces"?"Filmic":i.charAt(0).toUpperCase()+i.slice(1)},i))})]}),(0,Le.jsx)(K,{label:"Resolution",value:r.resolution,min:64,max:4096,step:64,onChange:i=>t("toneMapping",{...r,resolution:i})}),(0,Le.jsx)(K,{label:"White Point",value:r.whitePoint,min:0,max:16,step:.01,onChange:i=>t("toneMapping",{...r,whitePoint:i})}),(0,Le.jsx)(K,{label:"Middle Grey",value:r.middleGrey,min:0,max:1,step:.01,onChange:i=>t("toneMapping",{...r,middleGrey:i})}),(0,Le.jsx)(K,{label:"Min Luminance",value:r.minLuminance,min:0,max:1,step:.01,onChange:i=>t("toneMapping",{...r,minLuminance:i})}),(0,Le.jsx)(K,{label:"Average Luminance",value:r.averageLuminance,min:0,max:4,step:.01,onChange:i=>t("toneMapping",{...r,averageLuminance:i})}),(0,Le.jsx)(K,{label:"Adaptation Rate",value:r.adaptationRate,min:0,max:10,step:.01,onChange:i=>t("toneMapping",{...r,adaptationRate:i})}),(0,Le.jsx)(K,{label:"Exposure",value:r.exposure,min:0,max:3,step:.01,onChange:i=>t("toneMapping",{...r,exposure:i})})]})}function Uf({pp:e,set:t,open:n,toggle:a}){let{sepia:r}=e;return(0,Le.jsx)(Je,{title:"Sepia",tooltip:"Adds a warm vintage brown tint to the entire image.",open:n.sepia,onToggle:()=>a("sepia"),disabled:!r.enabled,trailing:(0,Le.jsx)(rt,{checked:r.enabled,onChange:i=>t("sepia",{...r,enabled:i}),label:"Toggle Sepia"}),children:(0,Le.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:1,step:.01,onChange:i=>t("sepia",{...r,intensity:i})})})}var Ae=require("react/jsx-runtime");function Ff({pp:e,set:t,open:n,toggle:a}){let{dotScreen:r}=e;return(0,Ae.jsxs)(Je,{title:"Dot Screen",tooltip:"Overlays a halftone dot pattern for a printed or retro look.",open:n.dotScreen,onToggle:()=>a("dotScreen"),disabled:!r.enabled,trailing:(0,Ae.jsx)(rt,{checked:r.enabled,onChange:i=>t("dotScreen",{...r,enabled:i}),label:"Toggle DotScreen"}),children:[(0,Ae.jsx)(K,{label:"Angle",value:r.angle,min:0,max:Math.PI*2,step:.01,formatValue:i=>`${i.toFixed(2)} rad`,onChange:i=>t("dotScreen",{...r,angle:i})}),(0,Ae.jsx)(K,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:i=>t("dotScreen",{...r,scale:i})})]})}function Vf({pp:e,set:t,open:n,toggle:a}){let{glitch:r}=e;return(0,Ae.jsxs)(Je,{title:"Glitch",tooltip:"Introduces digital distortion, tearing, and scan noise.",open:n.glitch,onToggle:()=>a("glitch"),disabled:!r.enabled,trailing:(0,Ae.jsx)(rt,{checked:r.enabled,onChange:i=>t("glitch",{...r,enabled:i}),label:"Toggle Glitch"}),children:[(0,Ae.jsx)(Zn,{label:"Mode",value:r.mode,options:Pp,onChange:i=>t("glitch",{...r,mode:i})}),(0,Ae.jsx)(qi,{label:"Delay",value:r.delay,min:0,max:10,step:.01,onChange:i=>t("glitch",{...r,delay:i})}),(0,Ae.jsx)(qi,{label:"Duration",value:r.duration,min:0,max:5,step:.01,onChange:i=>t("glitch",{...r,duration:i})}),(0,Ae.jsx)(qi,{label:"Strength",value:r.strength,min:0,max:2,step:.01,onChange:i=>t("glitch",{...r,strength:i})}),(0,Ae.jsx)(qi,{label:"Chromatic Aberration Offset",value:r.chromaticAberrationOffset,min:0,max:.02,step:1e-4,onChange:i=>t("glitch",{...r,chromaticAberrationOffset:i})}),(0,Ae.jsx)(K,{label:"Columns",value:r.columns,min:0,max:.5,step:.001,onChange:i=>t("glitch",{...r,columns:i})}),(0,Ae.jsx)(K,{label:"Ratio",value:r.ratio,min:0,max:1,step:.01,onChange:i=>t("glitch",{...r,ratio:i})})]})}function jf({pp:e,set:t,open:n,toggle:a}){let{grid:r}=e;return(0,Ae.jsxs)(Je,{title:"Grid",tooltip:"Adds a visual grid overlay that feels retro or debug-like.",open:n.grid,onToggle:()=>a("grid"),disabled:!r.enabled,trailing:(0,Ae.jsx)(rt,{checked:r.enabled,onChange:i=>t("grid",{...r,enabled:i}),label:"Toggle Grid"}),children:[(0,Ae.jsx)(K,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:i=>t("grid",{...r,scale:i})}),(0,Ae.jsx)(K,{label:"Line Width",value:r.lineWidth,min:0,max:1,step:.01,onChange:i=>t("grid",{...r,lineWidth:i})})]})}function Hf({pp:e,set:t,open:n,toggle:a}){let{chromaticAberration:r}=e;return(0,Ae.jsxs)(Je,{title:"Chromatic Aberration",tooltip:"Separates color channels slightly to mimic lens fringing.",open:n.chromaticAberration,onToggle:()=>a("chromaticAberration"),disabled:!r.enabled,trailing:(0,Ae.jsx)(rt,{checked:r.enabled,onChange:i=>t("chromaticAberration",{...r,enabled:i}),label:"Toggle ChromaticAberration"}),children:[(0,Ae.jsx)(K,{label:"Offset X",value:r.offsetX,min:0,max:.02,step:1e-4,onChange:i=>t("chromaticAberration",{...r,offsetX:i})}),(0,Ae.jsx)(K,{label:"Offset Y",value:r.offsetY,min:0,max:.02,step:1e-4,onChange:i=>t("chromaticAberration",{...r,offsetY:i})}),(0,Ae.jsx)(ut,{label:"Radial Modulation",checked:r.radialModulation,onChange:i=>t("chromaticAberration",{...r,radialModulation:i})}),(0,Ae.jsx)(K,{label:"Modulation Offset",value:r.modulationOffset,min:0,max:1,step:.01,onChange:i=>t("chromaticAberration",{...r,modulationOffset:i})})]})}function Gf({pp:e,set:t,open:n,toggle:a}){let{noise:r}=e;return(0,Ae.jsxs)(Je,{title:"Noise",tooltip:"Adds film grain or static noise to the rendered image.",open:n.noise,onToggle:()=>a("noise"),disabled:!r.enabled,trailing:(0,Ae.jsx)(rt,{checked:r.enabled,onChange:i=>t("noise",{...r,enabled:i}),label:"Toggle Noise"}),children:[(0,Ae.jsx)(K,{label:"Amount",value:r.opacity,min:0,max:1,step:.01,onChange:i=>t("noise",{...r,opacity:i})}),(0,Ae.jsx)(ut,{label:"Premultiply",checked:r.premultiply,onChange:i=>t("noise",{...r,premultiply:i})})]})}function Wf({pp:e,set:t,open:n,toggle:a}){let{scanline:r}=e;return(0,Ae.jsx)(Je,{title:"Scan Line",tooltip:"Draws horizontal CRT-style scan lines over the frame.",open:n.scanline,onToggle:()=>a("scanline"),disabled:!r.enabled,trailing:(0,Ae.jsx)(rt,{checked:r.enabled,onChange:i=>t("scanline",{...r,enabled:i}),label:"Toggle Scanline"}),children:(0,Ae.jsx)(K,{label:"Density",value:r.density,min:0,max:10,step:.25,onChange:i=>t("scanline",{...r,density:i})})})}function Xf({pp:e,set:t,open:n,toggle:a}){let{pixelation:r}=e;return(0,Ae.jsx)(Je,{title:"Pixelation",tooltip:"Reduces detail into larger pixels for a blocky stylized effect.",open:n.pixelation,onToggle:()=>a("pixelation"),disabled:!r.enabled,trailing:(0,Ae.jsx)(rt,{checked:r.enabled,onChange:i=>t("pixelation",{...r,enabled:i}),label:"Toggle Pixelation"}),children:(0,Ae.jsx)(K,{label:"Granularity",value:r.granularity,min:0,max:20,step:1,onChange:i=>t("pixelation",{...r,granularity:i})})})}function $f({pp:e,set:t,open:n,toggle:a}){let{ramp:r}=e;return(0,Ae.jsxs)(Je,{title:"Ramp",tooltip:"Adds a screen-space color gradient, or masks effects earlier in the stack.",open:n.ramp,onToggle:()=>a("ramp"),disabled:!r.enabled,trailing:(0,Ae.jsx)(rt,{checked:r.enabled,onChange:i=>t("ramp",{...r,enabled:i}),label:"Toggle Ramp"}),children:[(0,Ae.jsx)(Zn,{label:"Ramp Type",value:r.rampType,options:Tp,onChange:i=>t("ramp",{...r,rampType:i})}),(0,Ae.jsx)(qi,{label:"Ramp Start",value:r.rampStart,min:0,max:1,step:.01,onChange:i=>t("ramp",{...r,rampStart:i})}),(0,Ae.jsx)(qi,{label:"Ramp End",value:r.rampEnd,min:0,max:1,step:.01,onChange:i=>t("ramp",{...r,rampEnd:i})}),(0,Ae.jsx)(ur,{label:"Start Color",value:r.startColor,onChange:i=>t("ramp",{...r,startColor:i})}),(0,Ae.jsx)(ur,{label:"End Color",value:r.endColor,onChange:i=>t("ramp",{...r,endColor:i})}),!r.rampMask&&(0,Ae.jsx)(K,{label:"Gradient Opacity",value:r.opacity??.5,min:0,max:1,step:.01,onChange:i=>t("ramp",{...r,opacity:i})}),(0,Ae.jsx)(K,{label:"Bias",value:r.rampBias,min:0,max:1,step:.01,onChange:i=>t("ramp",{...r,rampBias:i})}),(0,Ae.jsx)(K,{label:"Gain",value:r.rampGain,min:0,max:1,step:.01,onChange:i=>t("ramp",{...r,rampGain:i})}),(0,Ae.jsx)(ut,{label:"Mask Earlier Effects",checked:r.rampMask,onChange:i=>t("ramp",{...r,rampMask:i})}),(0,Ae.jsx)(ut,{label:"Invert",checked:r.rampInvert,onChange:i=>t("ramp",{...r,rampInvert:i})})]})}var Ct=require("react/jsx-runtime");function qf({pp:e,set:t,open:n,toggle:a}){let{outline:r}=e;return(0,Ct.jsxs)(Je,{title:"Outline",tooltip:"Draws a visible edge around the selected object binding.",open:n.outline,onToggle:()=>a("outline"),disabled:!r.enabled,trailing:(0,Ct.jsx)(rt,{checked:r.enabled,onChange:i=>t("outline",{...r,enabled:i}),label:"Toggle Outline"}),children:[(0,Ct.jsx)("div",{className:"se-placeholder",children:"Outlines the currently selected object binding in the model editor."}),(0,Ct.jsx)(K,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:i=>t("outline",{...r,selectionLayer:i})}),(0,Ct.jsx)(K,{label:"Edge Strength",value:r.edgeStrength,min:0,max:10,step:.1,onChange:i=>t("outline",{...r,edgeStrength:i})}),(0,Ct.jsx)(K,{label:"Pulse Speed",value:r.pulseSpeed,min:0,max:10,step:.1,onChange:i=>t("outline",{...r,pulseSpeed:i})}),(0,Ct.jsx)(ur,{label:"Visible Edge Color",value:r.visibleEdgeColor,onChange:i=>t("outline",{...r,visibleEdgeColor:i})}),(0,Ct.jsx)(ur,{label:"Hidden Edge Color",value:r.hiddenEdgeColor,onChange:i=>t("outline",{...r,hiddenEdgeColor:i})}),(0,Ct.jsx)(Zn,{label:"Kernel Size",value:r.kernelSize,options:go,onChange:i=>t("outline",{...r,kernelSize:i})}),(0,Ct.jsx)(ut,{label:"Blur",checked:r.blur,onChange:i=>t("outline",{...r,blur:i})}),(0,Ct.jsx)(ut,{label:"X-Ray",checked:r.xRay,onChange:i=>t("outline",{...r,xRay:i})})]})}function Yf({pp:e,set:t,open:n,toggle:a}){let{selectiveBloom:r}=e;return(0,Ct.jsxs)(Je,{title:"Selective Bloom",tooltip:"Applies bloom only to objects assigned to the selected layer.",open:n.selectiveBloom,onToggle:()=>a("selectiveBloom"),disabled:!r.enabled,trailing:(0,Ct.jsx)(rt,{checked:r.enabled,onChange:i=>t("selectiveBloom",{...r,enabled:i}),label:"Toggle SelectiveBloom"}),children:[(0,Ct.jsx)("div",{className:"se-placeholder",children:"Applies bloom to the currently selected object binding."}),(0,Ct.jsx)(K,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:i=>t("selectiveBloom",{...r,selectionLayer:i})}),(0,Ct.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:5,step:.05,onChange:i=>t("selectiveBloom",{...r,intensity:i})}),(0,Ct.jsx)(K,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:i=>t("selectiveBloom",{...r,luminanceThreshold:i})}),(0,Ct.jsx)(K,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:i=>t("selectiveBloom",{...r,luminanceSmoothing:i})}),(0,Ct.jsx)(Zn,{label:"Kernel Size",value:r.kernelSize,options:go,onChange:i=>t("selectiveBloom",{...r,kernelSize:i})}),(0,Ct.jsx)(ut,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:i=>t("selectiveBloom",{...r,mipmapBlur:i})}),(0,Ct.jsx)(ut,{label:"Inverted",checked:r.inverted,onChange:i=>t("selectiveBloom",{...r,inverted:i})}),(0,Ct.jsx)(ut,{label:"Ignore Background",checked:r.ignoreBackground,onChange:i=>t("selectiveBloom",{...r,ignoreBackground:i})})]})}function Kf({pp:e,set:t,open:n,toggle:a}){let{smaa:r}=e;return(0,Ct.jsx)(Je,{title:"SMAA",tooltip:"Reduces jagged edges with subpixel anti-aliasing.",open:n.smaa,onToggle:()=>a("smaa"),trailing:(0,Ct.jsx)(rt,{checked:r.enabled,onChange:i=>t("smaa",{...r,enabled:i}),label:"Toggle SMAA"}),children:(0,Ct.jsx)("div",{className:"se-placeholder",children:"Subpixel Morphological Anti-Aliasing smooths jagged edges in post-process."})})}var kt=require("react/jsx-runtime");function Hd({config:e,onChange:t}){let[n,a]=(0,Zf.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=o=>a(c=>({...c,[o]:!c[o]})),i=e.postProcessing,l={pp:i,set:(o,c)=>t({...e,postProcessing:{...i,[o]:c}}),open:n,toggle:r};return(0,kt.jsxs)("div",{className:"se-generalContent",children:[(0,kt.jsx)(Af,{...l}),(0,kt.jsx)(Ef,{...l}),(0,kt.jsx)(Lf,{...l}),(0,kt.jsx)(Ff,{...l}),(0,kt.jsx)(Vf,{...l}),(0,kt.jsx)(kf,{...l}),(0,kt.jsx)(jf,{...l}),(0,kt.jsx)(Rf,{...l}),(0,kt.jsx)(qf,{...l}),(0,kt.jsx)(Yf,{...l}),(0,kt.jsx)(Bf,{...l}),(0,kt.jsx)(Df,{...l}),(0,kt.jsx)(Nf,{...l}),(0,kt.jsx)(Hf,{...l}),(0,kt.jsx)(Of,{...l}),(0,kt.jsx)(If,{...l}),(0,kt.jsx)(zf,{...l}),(0,kt.jsx)(Gf,{...l}),(0,kt.jsx)(Uf,{...l}),(0,kt.jsx)(Wf,{...l}),(0,kt.jsx)(Xf,{...l}),(0,kt.jsx)($f,{...l}),(0,kt.jsx)(Kf,{...l})]})}var Ho=require("react"),Si=require("lucide-react");var pe=require("react/jsx-runtime"),ty=["512","1024","2048","4096"],Jf={none:"None",directional:"Direction",point:"Point",spot:"Spot",hemisphere:"Hemi"};function ny({index:e,light:t,selected:n,onSelect:a,onToggleVisible:r}){return(0,pe.jsxs)("div",{className:`se-lightRow ${n?"se-lightRow--active":""}`,onClick:a,children:[(0,pe.jsxs)("span",{className:"se-lightRowLabel",children:[e+1,": ",Jf[t.type]]}),(0,pe.jsx)("button",{type:"button",className:"se-iconButton","aria-label":t.visible?"Hide light":"Show light",onClick:i=>{i.stopPropagation(),r()},children:t.visible?(0,pe.jsx)(Si.Eye,{size:14}):(0,pe.jsx)(Si.EyeOff,{size:14})})]})}function ry(){return{id:crypto.randomUUID(),type:"directional",color:"#ffffff",intensity:1,position:[5,10,5],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}}function Gd({config:e,onChange:t}){let[n,a]=(0,Ho.useState)({lights:!0,shadows:!1,groundShadows:!1,environment:!1,envShadow:!1}),r=(0,Ho.useSyncExternalStore)(Id,Sl),[i,s]=(0,Ho.useState)(e.lighting.lights[0]?.id??null),l=r??i,o=g=>{s(g),Uo(g)},c=g=>a(S=>({...S,[g]:!S[g]})),{tier:d}=dr(),p=ni(d,"starter"),{lighting:h,shadows:f,groundShadows:b,environment:w}=e,k=g=>t({...e,lighting:g}),x=g=>t({...e,shadows:g}),u=g=>t({...e,groundShadows:g}),m=g=>t({...e,environment:g}),_=(g,S)=>{k({...h,lights:h.lights.map(v=>v.id===g?{...v,...S}:v)})},M=h.lights.find(g=>g.id===l)??null,C=()=>{let g=ry();k({...h,lights:[...h.lights,g]}),o(g.id)},A=()=>{if(!M)return;let g=h.lights.filter(S=>S.id!==M.id);k({...h,lights:g}),o(g[0]?.id??null)};return(0,pe.jsxs)("div",{className:"se-generalContent",children:[(0,pe.jsxs)(Je,{title:"Lights",open:n.lights,onToggle:()=>c("lights"),children:[(0,pe.jsx)("div",{className:"se-lightList",children:h.lights.map((g,S)=>(0,pe.jsx)(ny,{index:S,light:g,selected:g.id===l,onSelect:()=>o(g.id),onToggleVisible:()=>_(g.id,{visible:!g.visible})},g.id))}),(0,pe.jsxs)("div",{className:"se-lightActions",children:[(0,pe.jsx)("button",{type:"button",className:"se-iconButton",onClick:C,title:"Add light",children:(0,pe.jsx)(Si.Plus,{size:14})}),M&&h.lights.length>1&&(0,pe.jsx)("button",{type:"button",className:"se-iconButton",onClick:A,title:"Remove selected light",children:(0,pe.jsx)(Si.Trash2,{size:14})})]}),M?(0,pe.jsxs)("div",{className:"se-lightProps",children:[(0,pe.jsxs)("div",{className:"se-field",children:[(0,pe.jsx)("span",{className:"se-fieldLabel",children:"Type"}),(0,pe.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:_p.map(g=>(0,pe.jsx)("button",{type:"button",className:`se-segmentedOption ${M.type===g?"se-segmentedOption--active":""}`,onClick:()=>_(M.id,{type:g}),children:Jf[g]},g))})]}),(0,pe.jsx)(ur,{label:"Color",value:M.color,onChange:g=>_(M.id,{color:g})}),(0,pe.jsx)(K,{label:"Intensity",value:M.intensity,min:0,max:10,step:.1,onChange:g=>_(M.id,{intensity:g})}),M.type!=="hemisphere"&&M.type!=="none"&&(0,pe.jsx)(yi,{label:"Position",value:M.position,min:-100,max:100,step:.05,onChange:g=>_(M.id,{position:g})}),M.type==="spot"&&(0,pe.jsxs)(pe.Fragment,{children:[(0,pe.jsx)(K,{label:"Angle",value:M.angle??Math.PI/6,min:0,max:Math.PI/2,step:.01,formatValue:g=>`${Math.round(g*180/Math.PI)}\xB0`,onChange:g=>_(M.id,{angle:g})}),(0,pe.jsx)(K,{label:"Penumbra",value:M.penumbra??.2,min:0,max:1,step:.01,onChange:g=>_(M.id,{penumbra:g})}),(0,pe.jsx)(K,{label:"Distance",value:M.distance??0,min:0,max:100,step:.5,onChange:g=>_(M.id,{distance:g})}),(0,pe.jsx)(K,{label:"Decay",value:M.decay??2,min:0,max:4,step:.1,onChange:g=>_(M.id,{decay:g})})]}),(0,pe.jsx)(ut,{label:"Attached to camera",checked:M.attachedToCamera,onChange:g=>_(M.id,{attachedToCamera:g})}),(0,pe.jsx)(ut,{label:"Cast shadows",checked:M.castShadow,onChange:g=>_(M.id,{castShadow:g})}),(0,pe.jsx)(K,{label:"Shadow bias",value:M.shadowBias,min:-.01,max:.01,step:1e-4,onChange:g=>_(M.id,{shadowBias:g})})]}):null]}),(0,pe.jsxs)(Je,{title:"Shadows",open:n.shadows,onToggle:()=>c("shadows"),disabled:!f.enabled,trailing:(0,pe.jsx)(rt,{checked:f.enabled,onChange:g=>x({...f,enabled:g}),label:"Toggle shadows"}),children:[(0,pe.jsx)(Zn,{label:"Map size",value:String(f.mapSize),options:ty,onChange:g=>x({...f,mapSize:Number(g)})}),(0,pe.jsx)(K,{label:"Bias",value:f.bias,min:-.01,max:.01,step:1e-4,onChange:g=>x({...f,bias:g})}),(0,pe.jsx)(K,{label:"Normal bias",value:f.normalBias,min:0,max:.2,step:.01,onChange:g=>x({...f,normalBias:g})}),(0,pe.jsx)(K,{label:"Radius (softness)",value:f.radius,min:0,max:20,step:.5,onChange:g=>x({...f,radius:g})})]}),(0,pe.jsxs)(Je,{title:"Ground Shadows",open:n.groundShadows,onToggle:()=>c("groundShadows"),disabled:!b.enabled,trailing:(0,pe.jsx)(rt,{checked:b.enabled,onChange:g=>u({...b,enabled:g}),label:"Toggle ground shadows"}),children:[(0,pe.jsxs)("div",{className:"se-field",children:[(0,pe.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,pe.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:["shadowCatcher"].map(g=>(0,pe.jsx)("button",{type:"button",className:`se-segmentedOption ${b.mode===g?"se-segmentedOption--active":""}`,onClick:()=>u({...b,mode:g}),children:g==="shadowCatcher"?"Shadow Catcher":"Baked AO"},g))})]}),b.mode==="bakedAO"&&(0,pe.jsx)("div",{className:"se-placeholder",children:"Requires pre-baked AO textures \u2014 not yet available."}),(0,pe.jsx)(K,{label:"Intensity",value:b.intensity,min:0,max:1,step:.01,onChange:g=>u({...b,intensity:g})}),(0,pe.jsx)(K,{label:"Border fade",value:b.borderFade,min:0,max:10,step:.1,onChange:g=>u({...b,borderFade:g})}),(0,pe.jsx)(K,{label:"Height",value:b.height,min:-5,max:5,step:.1,onChange:g=>u({...b,height:g})}),(0,pe.jsx)(K,{label:"Size",value:b.size,min:1,max:50,step:.5,onChange:g=>u({...b,size:g})})]}),(0,pe.jsx)(Je,{title:"Environment",open:n.environment,onToggle:()=>c("environment"),children:p?(0,pe.jsxs)(pe.Fragment,{children:[(0,pe.jsx)(K,{label:"Orientation",value:w.rotation,min:0,max:360,step:1,formatValue:g=>`${g}\xB0`,onChange:g=>m({...w,rotation:g})}),(0,pe.jsx)(K,{label:"Brightness",value:w.intensity,min:0,max:3,step:.05,onChange:g=>m({...w,intensity:g})}),(0,pe.jsxs)(Je,{title:"Shadow",open:n.envShadow,onToggle:()=>c("envShadow"),trailing:(0,pe.jsx)(rt,{checked:w.shadowLight.enabled,onChange:g=>m({...w,shadowLight:{...w.shadowLight,enabled:g}}),label:"Toggle environment shadow light"}),disabled:!w.shadowLight.enabled,children:[(0,pe.jsx)(K,{label:"Light intensity",value:w.shadowLight.intensity,min:0,max:20,step:.1,onChange:g=>m({...w,shadowLight:{...w.shadowLight,intensity:g}})}),(0,pe.jsx)(K,{label:"Shadow bias",value:w.shadowLight.bias,min:-.01,max:.01,step:1e-4,onChange:g=>m({...w,shadowLight:{...w.shadowLight,bias:g}})})]})]}):(0,pe.jsx)(Wn,{requiredTier:"starter",feature:"Environment lighting"})})]})}var Dl=require("react"),Ur=require("lucide-react");var fe=require("react/jsx-runtime");function iy(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),a=(t%60).toFixed(1).padStart(4,"0");return`${n}:${a}`}function Qf(e){let t=Number.isFinite(e)&&e>0?e:0;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),a=(t%60).toFixed(1).padStart(4,"0");return`${n}:${a}`}function ay(e){return Number.isFinite(e)?Math.min(3,Math.max(.1,Number(e.toFixed(2)))):1}function Wd({config:e,onChange:t,clipDetails:n,currentClip:a,isPlaying:r,time:i,play:s,pause:l,stop:o,setSpeed:c,seek:d}){let[p,h]=(0,Dl.useState)(!1),f=(0,Dl.useMemo)(()=>new Map(n.map(g=>[g.sourceName,g.duration])),[n]),b=e.animations.clips.filter(g=>!g.hidden),w=e.animations.clips.filter(g=>g.hidden),k=(g,S=e.animations.autoplayClip)=>{t({...e,animations:{clips:g(e.animations.clips),autoplayClip:S}})},x=(g,S)=>{k(v=>v.map(P=>P.sourceName===g?S(P):P))},u=(g,S)=>{x(g,v=>({...v,loopMode:S}))},m=(g,S)=>{let v=ay(S);x(g,P=>({...P,speed:v})),a===g&&c(v)},_=(g,S)=>{x(g,v=>({...v,displayName:S}))},M=g=>{let S=e.animations.autoplayClip===g?null:g;t({...e,animations:{...e.animations,autoplayClip:S}})},C=g=>{k(S=>S.map(v=>v.sourceName===g?{...v,hidden:!0}:v),e.animations.autoplayClip===g?null:e.animations.autoplayClip),a===g&&o()},A=g=>{k(S=>S.map(v=>v.sourceName===g?{...v,hidden:!1}:v))};return e.animations.clips.length===0?(0,fe.jsx)($i,{title:"Animations",children:(0,fe.jsx)("div",{className:"se-helperCard",children:"Upload a model with embedded animations to manage playback, naming, autoplay, and per-clip speed here."})}):(0,fe.jsxs)($i,{title:"Animations",children:[b.length===0&&(0,fe.jsx)("div",{className:"se-helperCard",children:(0,fe.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."})}),b.length===0?(0,fe.jsx)("div",{className:"se-placeholder",children:"All animations are currently removed. Restore a clip below to make it available again."}):(0,fe.jsx)("div",{className:"se-animationList",children:b.map(g=>{let S=a===g.sourceName,v=f.get(g.sourceName)??0;return(0,fe.jsxs)("article",{className:`se-animationCard ${S?"se-animationCard--active":""}`,children:[(0,fe.jsxs)("div",{className:"se-animationHeader",children:[(0,fe.jsxs)("div",{className:"se-animationHeading",children:[(0,fe.jsxs)("div",{className:"se-animationTitleRow",children:[(0,fe.jsx)("span",{className:"se-animationStatus",children:S?r?"Playing":"Paused":"Ready"}),e.animations.autoplayClip===g.sourceName?(0,fe.jsx)("span",{className:"se-animationBadge",children:"Autoplay"}):null]}),(0,fe.jsx)("div",{className:"se-animationSource",children:g.sourceName})]}),(0,fe.jsx)("button",{type:"button",className:"se-animationDangerButton",onClick:()=>C(g.sourceName),title:"Remove animation",children:(0,fe.jsx)(Ur.Trash2,{size:16})})]}),(0,fe.jsxs)("div",{className:"se-field",children:[(0,fe.jsx)("span",{className:"se-fieldLabel",children:"Display name"}),(0,fe.jsx)("input",{className:"se-textInput",value:g.displayName,onChange:U=>_(g.sourceName,U.target.value),placeholder:"Animation name"})]}),(0,fe.jsxs)("div",{className:"se-animationMeta",children:[(0,fe.jsx)("span",{children:iy(v)}),(0,fe.jsx)("span",{children:g.loopMode==="once"?"Play once":"Looping"}),(0,fe.jsxs)("span",{children:[g.speed.toFixed(2),"x"]})]}),(0,fe.jsxs)("div",{className:"se-animationButtonRow",children:[(()=>{let U=S&&r;return(0,fe.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>U?l():s(g.sourceName),"aria-label":U?"Pause":"Play",title:U?"Pause":"Play",children:U?(0,fe.jsx)(Ur.Pause,{size:16}):(0,fe.jsx)(Ur.Play,{size:16})})})(),(0,fe.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:o,disabled:!S,"aria-label":"Stop",title:"Stop",children:(0,fe.jsx)(Ur.Square,{size:16})})]}),(0,fe.jsxs)("div",{className:"se-animationSeekRow",children:[(0,fe.jsx)("input",{className:"se-slider se-animationSeek",type:"range",min:0,max:Math.max(v,.001),step:.01,value:S?Math.min(i,v):0,disabled:!S||v<=0,onChange:U=>d(Number(U.target.value)),"aria-label":"Seek"}),(0,fe.jsxs)("span",{className:"se-animationSeekTime",children:[Qf(S?Math.min(i,v):0)," / ",Qf(v)]})]}),(0,fe.jsxs)("div",{className:"se-animationGrid",children:[(0,fe.jsxs)("label",{className:"se-field",children:[(0,fe.jsx)("span",{className:"se-fieldLabel",children:"Loop mode"}),(0,fe.jsxs)("select",{className:"se-select",value:g.loopMode,onChange:U=>u(g.sourceName,U.target.value),children:[(0,fe.jsx)("option",{value:"repeat",children:"Loop"}),(0,fe.jsx)("option",{value:"once",children:"Play Once"})]})]}),(0,fe.jsxs)("label",{className:"se-field",children:[(0,fe.jsxs)("span",{className:"se-fieldLabel",children:["Speed",(0,fe.jsxs)("span",{className:"se-fieldValue",children:[g.speed.toFixed(2),"x"]})]}),(0,fe.jsxs)("div",{className:"se-animationSpeedRow",children:[(0,fe.jsx)("input",{className:"se-slider",type:"range",min:.1,max:3,step:.1,value:g.speed,onChange:U=>m(g.sourceName,Number(U.target.value))}),(0,fe.jsx)("input",{className:"se-numberInput se-animationSpeedInput",type:"number",min:.1,max:3,step:.1,value:g.speed,onChange:U=>m(g.sourceName,Number(U.target.value))})]})]})]}),(0,fe.jsx)("button",{type:"button",className:`se-animationAutoplayButton ${e.animations.autoplayClip===g.sourceName?"se-animationAutoplayButton--active":""}`,onClick:()=>M(g.sourceName),children:e.animations.autoplayClip===g.sourceName?"Disable autoplay":"Set as autoplay"})]},g.sourceName)})}),w.length>0?(0,fe.jsxs)("section",{className:"se-removedAnimations",children:[(0,fe.jsx)("button",{type:"button",className:"se-panelHeader",onClick:()=>h(g=>!g),children:(0,fe.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,fe.jsx)(Ur.ChevronDown,{size:16,className:`se-panelChevron ${p?"se-panelChevron--open":""}`}),(0,fe.jsxs)("span",{className:"se-panelTitle",children:["Removed Animations (",w.length,")"]})]})}),p?(0,fe.jsx)("div",{className:"se-removedAnimationList",children:w.map(g=>(0,fe.jsxs)("div",{className:"se-removedAnimationRow",children:[(0,fe.jsxs)("div",{children:[(0,fe.jsx)("div",{className:"se-removedAnimationName",children:g.displayName||g.sourceName}),(0,fe.jsx)("div",{className:"se-animationSource",children:g.sourceName})]}),(0,fe.jsx)("button",{type:"button",className:"se-animationButton",onClick:()=>A(g.sourceName),children:"Restore"})]},g.sourceName))}):null]}):null]})}var Xd=require("react"),Ol=require("lucide-react");var tt=require("react/jsx-runtime");function $d({config:e,onChange:t}){let[n,a]=(0,Xd.useState)(null),[r,i]=(0,Xd.useState)({title:"",description:""}),s=e.annotations,l=p=>{a(p),i({title:p.title,description:p.description||""})},o=()=>{if(!n||!r.title.trim())return;let p=s.map(h=>h.id===n.id?{...h,title:r.title.trim(),description:r.description||""}:h);t({...e,annotations:p}),a(null),i({title:"",description:""})},c=p=>{if(window.confirm("Delete this annotation?")){let f=s.filter(b=>b.id!==p).map((b,w)=>({...b,id:w+1}));t({...e,annotations:f}),a(null),i({title:"",description:""})}},d=()=>{a(null),i({title:"",description:""})};return(0,tt.jsxs)($i,{title:"Annotations",children:[e.annotations.length===0?(0,tt.jsx)("div",{className:"bb-emptyAnnotations",children:"No annotations yet. Double-click on the model to add one."}):(0,tt.jsx)("div",{className:"bb-annotationsList",children:e.annotations.map(p=>(0,tt.jsxs)("div",{className:"bb-annotationCard",children:[(0,tt.jsxs)("div",{className:"bb-annotationHeader",children:[(0,tt.jsxs)("div",{className:"bb-annotationBadge",children:["#",p.id]}),(0,tt.jsxs)("div",{className:"bb-annotationActions",children:[(0,tt.jsx)("button",{className:"bb-annotationAction bb-annotationAction--edit",onClick:()=>l(p),title:"Edit annotation",children:(0,tt.jsx)(Ol.Pencil,{size:16})}),(0,tt.jsx)("button",{className:"bb-annotationAction bb-annotationAction--delete",onClick:()=>c(p.id),title:"Delete annotation",children:(0,tt.jsx)(Ol.Trash2,{size:16})})]})]}),(0,tt.jsx)("div",{className:"bb-annotationTitle",children:p.title}),p.description&&(0,tt.jsx)("div",{className:"bb-annotationDescription",children:p.description}),(0,tt.jsxs)("div",{className:"bb-annotationPosition",children:["Position: [",p.worldPosition[0].toFixed(2),","," ",p.worldPosition[1].toFixed(2),","," ",p.worldPosition[2].toFixed(2),"]"]})]},p.id))}),n&&(0,tt.jsx)("div",{className:"bb-editAnnotationOverlay",onClick:d,children:(0,tt.jsxs)("div",{className:"bb-editAnnotationPopup",onClick:p=>p.stopPropagation(),children:[(0,tt.jsxs)("div",{className:"bb-editAnnotationHeader",children:[(0,tt.jsx)("h3",{className:"bb-editAnnotationTitle",children:"Edit Annotation"}),(0,tt.jsx)("button",{className:"bb-editAnnotationClose",onClick:d,children:"\xD7"})]}),(0,tt.jsxs)("div",{className:"bb-editAnnotationBody",children:[(0,tt.jsxs)("div",{className:"bb-field",children:[(0,tt.jsx)("label",{className:"bb-label",children:"Title"}),(0,tt.jsx)("input",{className:"bb-input",value:r.title,onChange:p=>i({...r,title:p.target.value}),placeholder:"Enter annotation title"})]}),(0,tt.jsxs)("div",{className:"bb-field",children:[(0,tt.jsx)("label",{className:"bb-label",children:"Description"}),(0,tt.jsx)("textarea",{className:"bb-textarea",value:r.description,onChange:p=>i({...r,description:p.target.value}),placeholder:"Enter annotation description",rows:3})]}),(0,tt.jsxs)("div",{className:"bb-editAnnotationActions",children:[(0,tt.jsx)("button",{className:"bb-button",onClick:d,children:"Cancel"}),(0,tt.jsx)("button",{className:"bb-button bb-button--primary",onClick:o,disabled:!r.title.trim(),children:"Save"}),(0,tt.jsx)("button",{className:"bb-button bb-button--danger",onClick:()=>c(n.id),children:"Delete"})]})]})]})})]})}var Fr=require("react"),pr=require("lucide-react");var we=require("react/jsx-runtime"),oy={enabled:!0,waypoints:[],loop:!0,autoPlay:!1},Yi=3.5;function qd({config:e,onChange:t,cameraState:n,onPreviewWaypoint:a}){let r=e.cinematic??oy,{waypoints:i}=r,s=(0,Fr.useCallback)((x,u)=>{if(x.length<2)return 0;let m=0;for(let _=0;_<x.length-1;_++){let M=x[_].segmentDuration??Yi;m+=M}return u&&x.length>1&&(m+=x[x.length-1].segmentDuration??Yi),Math.max(m,0)},[]),l=(0,Fr.useCallback)(x=>{t({...e,cinematic:{...r,...x}})},[e,r,t]),o=(0,Fr.useCallback)(()=>{if(!n)return;let x={position:[...n.position],target:[...n.target],...n.azimuthAngle!=null?{azimuthAngle:n.azimuthAngle}:{},...n.polarAngle!=null?{polarAngle:n.polarAngle}:{},segmentDuration:Yi},u=[...i,x],m=s(u,r.loop);l({waypoints:u,duration:m})},[n,i,r.loop,s,l]),c=(0,Fr.useCallback)(x=>{let u=i.filter((_,M)=>M!==x),m=s(u,r.loop);l({waypoints:u,duration:m})},[i,r.loop,s,l]),d=(0,Fr.useCallback)((x,u)=>{let m=x+u;if(m<0||m>=i.length)return;let _=[...i];[_[x],_[m]]=[_[m],_[x]];let M=s(_,r.loop);l({waypoints:_,duration:M})},[i,r.loop,s,l]),p=(0,Fr.useCallback)((x,u)=>{let m=i.map((M,C)=>C===x?{...M,...u}:M),_=s(m,r.loop);l({waypoints:m,duration:_})},[i,r.loop,s,l]),[h,f]=(0,Fr.useState)(!1),b=i.some(x=>x.segmentDuration!==void 0),w=(0,Fr.useCallback)(x=>x>=i.length-1?Yi:i[x]?.segmentDuration??Yi,[i]),k=i.length>=2;return(0,we.jsxs)($i,{title:"Cinematic Camera",children:[(0,we.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,we.jsxs)("button",{type:"button",className:"bb-button bb-button--primary se-cinematicAdd",onClick:o,disabled:!n,title:"Capture the current camera view as a waypoint",children:[(0,we.jsx)(pr.Plus,{size:15}),"Add waypoint from current view"]}),(0,we.jsxs)("div",{className:"se-customizeToggle",children:[(0,we.jsxs)("label",{className:"se-toggleLabel",children:[(0,we.jsx)("input",{type:"checkbox",checked:h,onChange:x=>f(x.target.checked)}),(0,we.jsx)(pr.Settings,{size:14}),(0,we.jsx)("span",{children:"Customize durations between waypoints"})]}),h&&(0,we.jsxs)("span",{className:"se-toggleHint",children:["Set duration for each segment between waypoints: 1\u21922, 2\u21923, etc. Default: ",Yi,"s"]})]}),i.length===0?(0,we.jsx)("div",{className:"bb-emptyAnnotations",children:"No waypoints yet. Position the camera and add your first one."}):(0,we.jsxs)(we.Fragment,{children:[(0,we.jsx)("div",{className:"se-waypointList",children:i.map((x,u)=>{let m=w(u),_=u===i.length-1,M=x.segmentDuration!==void 0&&x.segmentDuration!==Yi;return(0,we.jsxs)("div",{children:[(0,we.jsxs)("div",{className:"se-waypointCard",children:[(0,we.jsx)("div",{className:"se-waypointBadge",children:u+1}),(0,we.jsxs)("div",{className:"se-waypointBody",children:[(0,we.jsxs)("div",{className:"se-waypointCoords",children:["pos [",x.position.map(C=>C.toFixed(1)).join(", "),"]"]}),(0,we.jsxs)("div",{className:"se-waypointCoords",children:["look [",x.target.map(C=>C.toFixed(1)).join(", "),"]"]}),h&&!_&&(0,we.jsxs)("div",{className:`se-customBadge ${M?"se-customBadge--custom":"se-customBadge--default"}`,children:[m.toFixed(1),"s",!M&&" (default)"]})]}),(0,we.jsxs)("div",{className:"se-waypointActions",children:[(0,we.jsx)("button",{className:"se-waypointAction",onClick:()=>a?.(x),title:"Fly camera to this waypoint",disabled:!a,children:(0,we.jsx)(pr.MapPin,{size:15})}),(0,we.jsx)("button",{className:"se-waypointAction",onClick:()=>d(u,-1),title:"Move up",disabled:u===0,children:(0,we.jsx)(pr.ArrowUp,{size:15})}),(0,we.jsx)("button",{className:"se-waypointAction",onClick:()=>d(u,1),title:"Move down",disabled:_,children:(0,we.jsx)(pr.ArrowDown,{size:15})}),(0,we.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:()=>c(u),title:"Delete waypoint",children:(0,we.jsx)(pr.Trash2,{size:15})})]})]}),h&&!_&&(0,we.jsxs)("div",{className:"se-segmentBetween",children:[(0,we.jsxs)("div",{className:"se-segmentLabel",children:[u+1," \u2192 ",u+2,!x.segmentDuration&&" (default)"]}),(0,we.jsxs)("div",{className:"se-segmentControls",children:[(0,we.jsx)("span",{className:"se-durationLabel",children:"Duration:"}),(0,we.jsx)("input",{type:"range",className:"se-segmentSlider",min:1,max:20,step:.5,value:m,onChange:C=>{let A=parseFloat(C.target.value);p(u,{segmentDuration:A})}}),(0,we.jsxs)("span",{className:"se-segmentValue",children:[m.toFixed(1),"s"]}),(0,we.jsxs)("div",{className:"se-presetButtons",children:[[2,4,6,8].map(C=>(0,we.jsxs)("button",{className:"se-presetButton",onClick:()=>p(u,{segmentDuration:C}),children:[C,"s"]},`preset-${u}-${C}`)),(0,we.jsx)("button",{className:"se-presetButton se-presetButton--default",onClick:()=>{let C=i.map((g,S)=>{if(S===u){let{segmentDuration:v,...P}=g;return P}return g}),A=s(C,r.loop);l({waypoints:C,duration:A})},children:"Reset"})]})]})]})]},`waypoint-wrapper-${u}`)})}),(0,we.jsxs)("div",{className:"se-totalDuration",children:[(0,we.jsx)("span",{className:"se-totalLabel",children:"Total duration:"}),(0,we.jsx)("span",{className:"se-totalValue",children:k?(r.duration??s(i,r.loop)).toFixed(1)+"s":"-"}),!k&&(0,we.jsx)("span",{className:"se-totalHint",children:"(need at least 2 waypoints)"})]})]}),(0,we.jsx)(ut,{label:"Enable cinematic camera",checked:r.enabled,onChange:x=>l({enabled:x})}),(0,we.jsx)(ut,{label:"Loop",checked:r.loop,onChange:x=>{let u=x,m=s(i,u);l({loop:u,duration:m})}}),(0,we.jsx)(ut,{label:"Auto-play on load",checked:r.autoPlay,onChange:x=>l({autoPlay:x})}),!h&&k&&(0,we.jsx)(K,{label:"Duration",value:r.duration??s(i,r.loop),min:4,max:120,step:1,formatValue:x=>`${x}s`,onChange:x=>l({duration:x})})]})}var mr=require("lucide-react");var an=require("react/jsx-runtime"),sy=[{label:"General",icon:(0,an.jsx)(mr.Box,{})},{label:"Lighting",icon:(0,an.jsx)(mr.Spotlight,{})},{label:"Animations",icon:(0,an.jsx)(mr.Clapperboard,{})},{label:"Post Processing",icon:(0,an.jsx)(mr.Sparkles,{})},{label:"Annotations",icon:(0,an.jsx)(mr.MessageSquareText,{})},{label:"Cinematic",icon:(0,an.jsx)(mr.Video,{})}],eg={currentClip:null,isPlaying:!1,time:0,duration:0,play:()=>{},pause:()=>{},stop:()=>{},setSpeed:()=>{},seek:()=>{}};function Yd({config:e,onChange:t,activeSubTab:n,onActiveSubTabChange:a,cameraState:r=null,onPreviewWaypoint:i,animationClipDetails:s=[],animationPlayback:l=eg}){let[o,c]=(0,Il.useState)("General"),d=n??o,p=l??eg,{tier:h}=dr(),f=ni(h,"starter"),b=ni(h,"growth");(0,Il.useEffect)(()=>{n!==void 0&&c(n)},[n]);let w=k=>{n===void 0&&c(k),a?.(k)};return(0,an.jsxs)("div",{className:"se-tabContent",children:[(0,an.jsx)("div",{className:"se-subTabRow",children:sy.map(k=>(0,an.jsx)("button",{type:"button",title:k.label,className:`se-subTab ${d===k.label?"se-subTab--active":""}`,onClick:()=>w(k.label),children:k.icon},k.label))}),d==="General"&&(0,an.jsx)(jd,{config:e,onChange:t}),d==="Lighting"&&(0,an.jsx)(Gd,{config:e,onChange:t}),d==="Animations"&&(f?(0,an.jsx)(Wd,{config:e,onChange:t,clipDetails:s,currentClip:p.currentClip,isPlaying:p.isPlaying,time:p.time,duration:p.duration,play:p.play,pause:p.pause,stop:p.stop,setSpeed:p.setSpeed,seek:p.seek}):(0,an.jsx)(Wn,{requiredTier:"starter",feature:"Animation configuration"})),d==="Post Processing"&&(b?(0,an.jsx)(Hd,{config:e,onChange:t}):(0,an.jsx)(Wn,{requiredTier:"growth",feature:"Post-processing effects"})),d==="Annotations"&&(f?(0,an.jsx)($d,{config:e,onChange:t}):(0,an.jsx)(Wn,{requiredTier:"starter",feature:"Annotations"})),d==="Cinematic"&&(f?(0,an.jsx)(qd,{config:e,onChange:t,cameraState:r,onPreviewWaypoint:i}):(0,an.jsx)(Wn,{requiredTier:"starter",feature:"Cinematic camera"}))]})}var Ha=require("lucide-react"),It=require("react/jsx-runtime");function tg({title:e,trailing:t,children:n,disabled:a,open:r,onToggle:i,tooltip:s}){let l=s?`${s}`:e;return(0,It.jsxs)("div",{className:"bb-materialPanel",children:[(0,It.jsxs)("button",{type:"button",className:"bb-materialPanelHeader",onClick:i,"aria-expanded":r,title:l,children:[(0,It.jsxs)("div",{className:"bb-materialPanelTitleWrap",children:[(0,It.jsx)(Ha.ChevronDown,{size:14,className:`bb-materialPanelChevron ${r?"bb-materialPanelChevron--open":""}`}),(0,It.jsx)("span",{className:"bb-materialPanelTitle",children:e}),s?(0,It.jsx)("span",{className:"bb-materialPanelHelp",title:l,"aria-label":l,role:"img",onClick:o=>o.stopPropagation(),children:(0,It.jsx)(Ha.Info,{size:12})}):null]}),t?(0,It.jsx)("div",{onClick:o=>o.stopPropagation(),children:t}):null]}),r?(0,It.jsx)("div",{className:"bb-materialPanelBody",style:a?{opacity:.45,pointerEvents:"none"}:void 0,children:n}):null]})}function Xn({title:e,open:t,onToggle:n,trailing:a,children:r,tooltip:i}){let s=i?`${e}: ${i}`:e;return(0,It.jsxs)("div",{className:"bb-section",children:[(0,It.jsxs)("button",{type:"button",className:"bb-sectionHeaderButton",onClick:n,"aria-expanded":t,title:s,children:[(0,It.jsxs)("span",{className:"bb-sectionHeaderMain",children:[(0,It.jsx)(Ha.ChevronDown,{size:15,className:`bb-sectionChevron ${t?"bb-sectionChevron--open":""}`}),(0,It.jsx)("h2",{className:"bb-sectionTitle",children:e}),i?(0,It.jsx)("span",{className:"bb-sectionHelp",title:s,"aria-label":s,role:"img",onClick:l=>l.stopPropagation(),children:(0,It.jsx)(Ha.Info,{size:13})}):null]}),a?(0,It.jsx)("span",{onClick:l=>l.stopPropagation(),children:a}):null]}),t?(0,It.jsx)("div",{className:"bb-sectionBody",children:r}):null]})}function ng({checked:e,onChange:t,label:n}){return(0,It.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,It.jsx)("input",{type:"checkbox",checked:e,onChange:a=>t(a.target.checked)}),(0,It.jsx)("span",{className:"se-switchTrack",children:(0,It.jsx)("span",{className:"se-switchThumb"})})]})}var Kd=require("react");var zl=["front","back","double"],Ul=["normal","additive"];var Fl=require("react/jsx-runtime");function Jn({panelKey:e,title:t,tooltip:n,toggleLabel:a,controls:r,children:i,requiredTier:s}){let{openMaterialPanels:l,materialPanelEnabled:o,onToggleMaterialPanel:c,onSetMaterialPanelState:d}=r,p=s?.locked??!1;return(0,Fl.jsx)(tg,{title:t,tooltip:n,disabled:p||!o[e],open:l[e],onToggle:()=>c(e),trailing:(0,Fl.jsx)(ng,{checked:!p&&o[e],onChange:p?()=>{}:h=>d(e,h),label:a??`Toggle ${t}`}),children:p&&s?(0,Fl.jsx)(Wn,{requiredTier:s.tier,feature:t}):i})}var Go=require("react"),Vl=require("react-colorful"),rg=require("lucide-react");var pt=require("react/jsx-runtime");function un({label:e,value:t,placeholder:n,onChange:a}){let r=(0,Go.useRef)(null);return(0,pt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,pt.jsx)("label",{className:"bb-label",children:e}),(0,pt.jsxs)("div",{className:"bb-fileField",children:[(0,pt.jsx)("input",{className:"bb-input bb-fileField-input",placeholder:n,value:t,onChange:i=>{let s=i.target.value;!s&&t&&Lc(t),a(s)}}),(0,pt.jsx)("button",{type:"button",className:"bb-fileFieldButton",onClick:()=>r.current?.click(),"aria-label":`Select file for ${e}`,title:`Select file for ${e}`,children:(0,pt.jsx)(rg.FileUp,{size:20})}),(0,pt.jsx)("input",{ref:r,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif",className:"bb-hiddenInput",onChange:i=>{let s=i.target.files?.[0];if(!s)return;let l=Bp(s);t&&t!==l&&Lc(t),zp(l,URL.createObjectURL(s)),a(l),i.target.value=""}})]})]})}function Ki({label:e,value:t,fallback:n="#ffffff",onChange:a}){let[r,i]=(0,Go.useState)(!1),s=t||n,l=(0,Go.useRef)(null);return(0,pt.jsxs)("div",{className:"bb-field",children:[(0,pt.jsx)("span",{className:"bb-label",children:e}),(0,pt.jsx)("div",{className:"se-fieldInline",children:(0,pt.jsx)("span",{ref:l,style:{display:"inline-flex"},children:(0,pt.jsx)(Vl.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>i(o=>!o),style:{background:s,color:ja(s)},color:s,onChange:a})})}),r?(0,pt.jsx)(Vd,{anchorRef:l,onClose:()=>i(!1),children:(0,pt.jsx)(Vl.HexColorPicker,{color:s,onChange:a})}):null]})}function Wo({label:e,checked:t,onChange:n}){return(0,pt.jsxs)("label",{className:"bb-checkbox",children:[(0,pt.jsx)("input",{type:"checkbox",checked:t,onChange:a=>n(a.target.checked)}),e]})}function ig({label:e,value:t,min:n,max:a,step:r,placeholder:i,onChange:s}){return(0,pt.jsxs)("div",{className:"bb-field",children:[(0,pt.jsx)("label",{className:"bb-label",children:e}),(0,pt.jsx)("input",{className:"bb-input",type:"number",min:n,max:a,step:r,placeholder:i,value:t??"",onChange:l=>s(l.target.value===""?void 0:Number(l.target.value))})]})}function Ga({label:e,value:t,options:n,onChange:a}){return(0,pt.jsxs)("div",{className:"bb-field",children:[(0,pt.jsx)("label",{className:"bb-label",children:e}),(0,pt.jsx)("select",{className:"bb-select",value:t,onChange:r=>a(r.target.value),children:n.map(r=>(0,pt.jsx)("option",{value:r,children:r},r))})]})}function zt({label:e,value:t,min:n,max:a,step:r,onChange:i}){return(0,pt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,pt.jsx)("label",{className:"bb-label",children:e}),(0,pt.jsxs)("div",{className:"bb-sliderField",children:[(0,pt.jsx)("input",{className:`bb-slider ${t===void 0?"bb-slider--unset":""}`,type:"range",min:n,max:a,step:r,value:t??n,onChange:l=>i(Number(l.target.value))}),(0,pt.jsx)("input",{className:"bb-input bb-input--compact",type:"number",min:n,max:a,step:r,value:t??"",onChange:l=>i(l.target.value===""?void 0:Number(l.target.value))})]})]})}var Y=require("react/jsx-runtime");function ag({selectedItem:e,selectedMaterial:t,pbrWorkflow:n,onPbrWorkflowChange:a,openMaterialPanels:r,materialPanelEnabled:i,onToggleMaterialPanel:s,onSetMaterialPanelState:l,updateSelectedMaterial:o,setSelectedTexturePath:c}){let d={openMaterialPanels:r,materialPanelEnabled:i,onToggleMaterialPanel:s,onSetMaterialPanelState:l},{tier:p}=dr(),h=ni(p,"starter"),f={tier:"starter",locked:!h},[b,w]=(0,Kd.useState)("roughness"),[k,x]=(0,Kd.useState)("factor");return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Jn,{panelKey:"pbr",title:"PBR Maps",tooltip:"Controls the base color and workflow used for physically based shading.",controls:d,children:h?(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Ga,{label:"Workflow",value:n,options:["metalness","specular"],onChange:a}),(0,Y.jsx)("div",{className:"bb-field bb-field--full",children:(0,Y.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,Y.jsx)(un,{label:n==="specular"?"Albedo texture path":"Base color texture path",placeholder:"materials/oak-wood.jpg",value:t?.texture?.path??"",onChange:u=>c(e,"texture",u)}),(0,Y.jsx)(Ki,{label:n==="specular"?"Albedo color":"Base color",value:t?.baseColor??"#ffffff",onChange:u=>o(e,m=>({...m,baseColor:u}))}),n==="metalness"?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(zt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,metalness:u}))}),(0,Y.jsx)(un,{label:"Metalness map path",placeholder:"materials/body-metalness.jpg",value:t?.metalnessMap?.path??"",onChange:u=>c(e,"metalnessMap",u)})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(zt,{label:"Specular intensity",value:t?.specularIntensity,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,specularIntensity:u}))}),(0,Y.jsx)(Ki,{label:"Specular color",value:t?.specularColor??"#ffffff",onChange:u=>o(e,m=>({...m,specularColor:u}))}),(0,Y.jsx)(un,{label:"Specular intensity map path",placeholder:"materials/body-specular-intensity.jpg",value:t?.specularIntensityMap?.path??"",onChange:u=>c(e,"specularIntensityMap",u)}),(0,Y.jsx)(un,{label:"Specular color map path",placeholder:"materials/body-specular-color.jpg",value:t?.specularColorMap?.path??"",onChange:u=>c(e,"specularColorMap",u)})]}),(0,Y.jsx)(zt,{label:"Specular F0 / reflectivity",value:t?.reflectivity,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,reflectivity:u}))})]}):(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Ki,{label:"Base color",value:t?.baseColor??"#ffffff",onChange:u=>o(e,m=>({...m,baseColor:u}))}),(0,Y.jsx)(zt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,metalness:u}))}),(0,Y.jsx)("div",{className:"bb-field bb-field--full",children:(0,Y.jsx)(Wn,{requiredTier:"starter",feature:"Texture maps, the specular workflow, and reflectivity"})})]})}),(0,Y.jsx)(Jn,{panelKey:"roughness",requiredTier:f,title:"Roughness / Glossiness",tooltip:"Adjusts how matte or shiny the surface appears.",toggleLabel:"Toggle Roughness and Glossiness",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Ga,{label:"Mode",value:b,options:["roughness","glossiness"],onChange:w}),(0,Y.jsx)("div",{className:"bb-field bb-field--full",children:(0,Y.jsx)("p",{className:"bb-note",style:{margin:0},children:b==="roughness"?"Roughness: 0 is glossy, 1 is matte.":"Glossiness is the inverse of roughness (glossiness = 1 \u2212 roughness)"})}),b==="roughness"?(0,Y.jsx)(zt,{label:"Roughness",value:t?.roughness,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,roughness:u}))}):(0,Y.jsx)(zt,{label:"Glossiness",value:t?.roughness===void 0?void 0:1-t.roughness,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,roughness:u===void 0?void 0:1-u}))}),(0,Y.jsx)(un,{label:b==="glossiness"?"Glossiness map path (applied as roughness)":"Roughness map path",placeholder:"materials/body-roughness.jpg",value:t?.roughnessMap?.path??"",onChange:u=>c(e,"roughnessMap",u)})]})}),(0,Y.jsx)(Jn,{panelKey:"emission",requiredTier:f,title:"Emission",tooltip:"Makes the material self-illuminated with emissive color and intensity.",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Ki,{label:"Emissive color",value:t?.emissive??"#000000",fallback:"#000000",onChange:u=>o(e,m=>({...m,emissive:u}))}),(0,Y.jsx)(zt,{label:"Emissive intensity",value:t?.emissiveIntensity,min:0,max:10,step:.1,onChange:u=>o(e,m=>({...m,emissiveIntensity:u}))}),(0,Y.jsx)(un,{label:"Emissive map path",placeholder:"materials/body-emissive.jpg",value:t?.emissiveMap?.path??"",onChange:u=>c(e,"emissiveMap",u)})]})}),(0,Y.jsx)(Jn,{panelKey:"opacity",requiredTier:f,title:"Opacity",tooltip:"Controls transparency, alpha testing, and blending behavior.",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(zt,{label:"Opacity",value:t?.opacity,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,opacity:u}))}),(0,Y.jsx)(zt,{label:"Alpha test",value:t?.alphaTest,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,alphaTest:u}))}),(0,Y.jsx)(un,{label:"Alpha map path",placeholder:"materials/body-alpha.png",value:t?.alphaMap?.path??"",onChange:u=>c(e,"alphaMap",u)}),(0,Y.jsx)(Ga,{label:"Blending mode",value:t?.blendingMode??"normal",options:Ul,onChange:u=>o(e,m=>({...m,blendingMode:u}))}),(0,Y.jsxs)("div",{className:"bb-field",children:[(0,Y.jsx)("label",{className:"bb-label",children:"Alpha hash"}),(0,Y.jsx)("div",{className:"bb-checkboxRow",children:(0,Y.jsx)(Wo,{label:"Use alpha hash",checked:t?.alphaHash??!1,onChange:u=>o(e,m=>({...m,alphaHash:u}))})})]}),(0,Y.jsxs)("div",{className:"bb-field",children:[(0,Y.jsx)("label",{className:"bb-label",children:"Dithering"}),(0,Y.jsx)("div",{className:"bb-checkboxRow",children:(0,Y.jsx)(Wo,{label:"Use dithering",checked:t?.dithering??!1,onChange:u=>o(e,m=>({...m,dithering:u}))})})]})]})}),(0,Y.jsxs)(Jn,{panelKey:"normalBump",requiredTier:f,title:"Normal & Bump",tooltip:"Adds surface detail without changing the actual mesh shape.",toggleLabel:"Toggle Normal and Bump",controls:d,children:[(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(un,{label:"Normal map path",placeholder:"materials/body-normal.jpg",value:t?.normalMap?.path??"",onChange:u=>c(e,"normalMap",u)}),(0,Y.jsx)(zt,{label:"Normal scale",value:t?.normalScale,min:0,max:5,step:.01,onChange:u=>o(e,m=>({...m,normalScale:u}))}),(0,Y.jsx)(un,{label:"Bump map path",placeholder:"materials/body-bump.jpg",value:t?.bumpMap?.path??"",onChange:u=>c(e,"bumpMap",u)}),(0,Y.jsx)(zt,{label:"Bump scale",value:t?.bumpScale,min:0,max:5,step:.01,onChange:u=>o(e,m=>({...m,bumpScale:u}))})]}),(0,Y.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Y.jsx)(Wo,{label:"Flip normal Y",checked:t?.flipNormalY??!1,onChange:u=>o(e,m=>({...m,flipNormalY:u}))})})]}),(0,Y.jsx)(Jn,{panelKey:"displacement",requiredTier:f,title:"Displacement",tooltip:"Offsets geometry using a texture to create real surface height.",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(un,{label:"Displacement map path",placeholder:"materials/body-displacement.jpg",value:t?.displacementMap?.path??"",onChange:u=>c(e,"displacementMap",u)}),(0,Y.jsx)(zt,{label:"Displacement scale",value:t?.displacementScale,min:-5,max:5,step:.01,onChange:u=>o(e,m=>({...m,displacementScale:u}))}),(0,Y.jsx)(zt,{label:"Displacement bias",value:t?.displacementBias,min:-5,max:5,step:.01,onChange:u=>o(e,m=>({...m,displacementBias:u}))})]})}),(0,Y.jsx)(Jn,{panelKey:"ao",requiredTier:f,title:"Ambient Occlusion",tooltip:"Darkens creases and contact areas to add depth.",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(un,{label:"AO map path",placeholder:"materials/body-ao.jpg",value:t?.aoMap?.path??"",onChange:u=>c(e,"aoMap",u)}),(0,Y.jsx)(zt,{label:"AO intensity",value:t?.aoMapIntensity,min:0,max:5,step:.01,onChange:u=>o(e,m=>({...m,aoMapIntensity:u}))})]})}),(0,Y.jsxs)(Jn,{panelKey:"clearcoat",requiredTier:f,title:"Clearcoat",tooltip:"Adds a glossy protective layer on top of the base material.",controls:d,children:[(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(un,{label:"Clearcoat map path",placeholder:"materials/body-clearcoat.jpg",value:t?.clearcoatMap?.path??"",onChange:u=>c(e,"clearcoatMap",u)}),(0,Y.jsx)(zt,{label:"Clearcoat",value:t?.clearcoat,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,clearcoat:u}))}),(0,Y.jsx)(un,{label:"Clearcoat roughness map path",placeholder:"materials/body-clearcoat-roughness.jpg",value:t?.clearcoatRoughnessMap?.path??"",onChange:u=>c(e,"clearcoatRoughnessMap",u)}),(0,Y.jsx)(zt,{label:"Clearcoat roughness",value:t?.clearcoatRoughness,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,clearcoatRoughness:u}))}),(0,Y.jsx)(un,{label:"Clearcoat normal map path",placeholder:"materials/body-clearcoat-normal.jpg",value:t?.clearcoatNormalMap?.path??"",onChange:u=>c(e,"clearcoatNormalMap",u)}),(0,Y.jsx)(zt,{label:"Clearcoat normal scale",value:t?.clearcoatNormalScale,min:0,max:5,step:.01,onChange:u=>o(e,m=>({...m,clearcoatNormalScale:u}))})]}),(0,Y.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Y.jsx)(Wo,{label:"Flip clearcoat normal Y",checked:t?.flipClearcoatNormalY??!1,onChange:u=>o(e,m=>({...m,flipClearcoatNormalY:u}))})})]}),(0,Y.jsx)(Jn,{panelKey:"sheen",requiredTier:f,title:"Sheen",tooltip:"Adds a soft fabric-like sheen on grazing angles.",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(zt,{label:"Sheen",value:t?.sheen,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,sheen:u}))}),(0,Y.jsx)(Ki,{label:"Sheen color",value:t?.sheenColor??"#ffffff",onChange:u=>o(e,m=>({...m,sheenColor:u}))}),(0,Y.jsx)(un,{label:"Sheen color map path",placeholder:"materials/body-sheen-color.jpg",value:t?.sheenColorMap?.path??"",onChange:u=>c(e,"sheenColorMap",u)}),(0,Y.jsx)(zt,{label:"Sheen roughness",value:t?.sheenRoughness,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,sheenRoughness:u}))}),(0,Y.jsx)(un,{label:"Sheen roughness map path",placeholder:"materials/body-sheen-roughness.jpg",value:t?.sheenRoughnessMap?.path??"",onChange:u=>c(e,"sheenRoughnessMap",u)})]})}),(0,Y.jsx)(Jn,{panelKey:"anisotropy",requiredTier:f,title:"Anisotropy",tooltip:"Stretches reflections in one direction for brushed or fiber-like surfaces.",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(zt,{label:"Intensity",value:t?.anisotropy,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,anisotropy:u}))}),(0,Y.jsx)(Ga,{label:"Tilt direction",value:k,options:["factor","texture"],onChange:x}),k==="factor"?(0,Y.jsx)(zt,{label:"Rotation (rad)",value:t?.anisotropyRotation,min:0,max:6.28,step:.01,onChange:u=>o(e,m=>({...m,anisotropyRotation:u}))}):(0,Y.jsx)(un,{label:"Anisotropy map path",placeholder:"materials/body-anisotropy.jpg",value:t?.anisotropyMap?.path??"",onChange:u=>c(e,"anisotropyMap",u)})]})}),(0,Y.jsx)(Jn,{panelKey:"transmission",requiredTier:f,title:"Transmission & Volume",tooltip:"Controls glass-like transmission and how light travels through volume.",toggleLabel:"Toggle Transmission and Volume",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(zt,{label:"Transmission",value:t?.transmission,min:0,max:1,step:.01,onChange:u=>o(e,m=>({...m,transmission:u}))}),(0,Y.jsx)(un,{label:"Transmission map path",placeholder:"materials/body-transmission.jpg",value:t?.transmissionMap?.path??"",onChange:u=>c(e,"transmissionMap",u)}),(0,Y.jsx)(zt,{label:"Thickness",value:t?.thickness,min:0,max:5,step:.01,onChange:u=>o(e,m=>({...m,thickness:u}))}),(0,Y.jsx)(un,{label:"Thickness map path",placeholder:"materials/body-thickness.jpg",value:t?.thicknessMap?.path??"",onChange:u=>c(e,"thicknessMap",u)}),(0,Y.jsx)(Ki,{label:"Volume tint",value:t?.attenuationColor??"#ffffff",onChange:u=>o(e,m=>({...m,attenuationColor:u}))}),(0,Y.jsx)(ig,{label:"Attenuation distance",value:t?.attenuationDistance,min:0,step:.01,placeholder:"Infinity when unset",onChange:u=>o(e,m=>({...m,attenuationDistance:u}))})]})}),(0,Y.jsx)(Jn,{panelKey:"faces",requiredTier:f,title:"Faces Rendering",tooltip:"Chooses which side of the mesh renders and how backfaces are handled.",controls:d,children:(0,Y.jsx)("div",{className:"bb-grid",children:(0,Y.jsx)(Ga,{label:"Side",value:t?.side??"front",options:zl,onChange:u=>o(e,m=>({...m,side:u}))})})})]})}var og=[{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 Wa=require("react/jsx-runtime");function sg({disabled:e,onApply:t}){return(0,Wa.jsx)("div",{className:"bb-presetGallery",children:og.map(n=>(0,Wa.jsxs)("button",{type:"button",className:"bb-presetSwatch",disabled:e,title:`Apply ${n.label} preset`,onClick:()=>t(n.material),children:[(0,Wa.jsx)("span",{className:"bb-presetSwatchColor",style:{background:n.swatch}}),(0,Wa.jsx)("span",{className:"bb-presetSwatchLabel",children:n.label})]},n.id))})}var Xa=require("react"),_i=require("lucide-react"),Pr=require("react/jsx-runtime");function Zd({disabled:e,exporting:t,onExportJson:n,onExportTs:a}){let[r,i]=(0,Xa.useState)(!1),s=(0,Xa.useRef)(null);return(0,Xa.useEffect)(()=>{if(!r)return;let l=o=>{s.current?.contains(o.target)||i(!1)};return window.addEventListener("pointerdown",l),()=>window.removeEventListener("pointerdown",l)},[r]),(0,Pr.jsxs)("div",{className:"bb-exportMenuWrapper",ref:s,children:[(0,Pr.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:e||t,onClick:()=>i(l=>!l),title:"Export",children:[(0,Pr.jsx)(_i.Download,{size:14}),t?"Exporting\u2026":"Export",(0,Pr.jsx)(_i.ChevronDown,{size:12})]}),r&&(0,Pr.jsxs)("div",{className:"bb-exportMenu",children:[(0,Pr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{i(!1),n()},children:[(0,Pr.jsx)(_i.FileJson,{size:14}),"JSON"]}),(0,Pr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{i(!1),a()},children:[(0,Pr.jsx)(_i.FileCode2,{size:14}),"TypeScript"]})]})]})}var hr=require("react/jsx-runtime");function lg({selectedItem:e,selectedBinding:t,open:n,onToggle:a,updateBinding:r,idError:i}){return(0,hr.jsx)(Xn,{title:"Identity",open:n,onToggle:a,children:(0,hr.jsxs)("div",{className:"bb-grid",children:[(0,hr.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,hr.jsx)("label",{className:"bb-label",children:"Model Node ID"}),(0,hr.jsx)("span",{className:"bb-note",children:"This is the exact mesh name from the imported model and stays locked."}),(0,hr.jsx)("input",{className:"bb-input bb-readonly",value:t.modelObjectId,readOnly:!0})]}),(0,hr.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,hr.jsx)("label",{className:"bb-label",children:"ID"}),(0,hr.jsx)("input",{className:`bb-input ${i?"bb-input--error":""}`,value:t.id,onChange:s=>r(e,l=>({...l,id:s.target.value}))}),i?(0,hr.jsx)("span",{className:"bb-status bb-status--error",children:i}):null]})]})})}var Xo=require("react");var cg=["other","body","light","wheel","glass","interior","floor","wall","door","furniture","decor","electronics","seat","table","chair","window","sofa","bed","engine","headlight"],dg=["normal","hidden","selected","disabled"];var gt=require("react/jsx-runtime");function ug({selectedItem:e,selectedBinding:t,open:n,onToggle:a,updateBinding:r}){let[i,s]=(0,Xo.useState)(t.group??""),[l,o]=(0,Xo.useState)(t.tags?.join(", ")??"");(0,Xo.useEffect)(()=>{s(t.group??""),o(t.tags?.join(", ")??"")},[e,t.group,t.tags]);let c=()=>{r(e,p=>({...p,group:i.trim()||void 0}))},d=()=>{let p=[...new Set(l.split(",").map(h=>h.trim()).filter(Boolean))];r(e,h=>({...h,tags:p.length>0?p:void 0}))};return(0,gt.jsxs)(Xn,{title:"Basics",open:n,onToggle:a,children:[(0,gt.jsxs)("div",{className:"bb-grid",children:[(0,gt.jsxs)("div",{className:"bb-field",children:[(0,gt.jsx)("label",{className:"bb-label",children:"Label"}),(0,gt.jsx)("input",{className:"bb-input",value:t.label??"",onChange:p=>r(e,h=>({...h,label:p.target.value}))})]}),(0,gt.jsxs)("div",{className:"bb-field",children:[(0,gt.jsx)("label",{className:"bb-label",children:"Type"}),(0,gt.jsx)("input",{className:"bb-input",list:"binding-type-suggestions",value:t.type,onChange:p=>r(e,h=>({...h,type:p.target.value}))}),(0,gt.jsx)("datalist",{id:"binding-type-suggestions",children:cg.map(p=>(0,gt.jsx)("option",{value:p},p))})]}),(0,gt.jsxs)("div",{className:"bb-field",children:[(0,gt.jsx)("label",{className:"bb-label",children:"Status"}),(0,gt.jsx)("select",{className:"bb-select",value:t.status??"normal",onChange:p=>r(e,h=>({...h,status:p.target.value})),children:dg.map(p=>(0,gt.jsx)("option",{value:p,children:p},p))})]}),(0,gt.jsxs)("div",{className:"bb-field",children:[(0,gt.jsx)("label",{className:"bb-label",children:"Group"}),(0,gt.jsx)("input",{className:"bb-input",placeholder:"paint",value:i,onChange:p=>s(p.target.value),onBlur:c,onKeyDown:p=>{p.key==="Enter"&&p.currentTarget.blur()}})]}),(0,gt.jsxs)("div",{className:"bb-field",children:[(0,gt.jsx)("label",{className:"bb-label",children:"Tags"}),(0,gt.jsx)("input",{className:"bb-input",placeholder:"exterior, configurable",value:l,onChange:p=>o(p.target.value),onBlur:d,onKeyDown:p=>{p.key==="Enter"&&p.currentTarget.blur()}})]})]}),(0,gt.jsxs)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:[(0,gt.jsxs)("label",{className:"bb-checkbox",children:[(0,gt.jsx)("input",{type:"checkbox",checked:t.selectable??!1,onChange:p=>r(e,h=>({...h,selectable:p.target.checked}))}),"selectable"]}),(0,gt.jsxs)("label",{className:"bb-checkbox",children:[(0,gt.jsx)("input",{type:"checkbox",checked:t.hoverable??!1,onChange:p=>r(e,h=>({...h,hoverable:p.target.checked}))}),"hoverable"]}),(0,gt.jsxs)("label",{className:"bb-checkbox",children:[(0,gt.jsx)("input",{type:"checkbox",checked:t.visible??!1,onChange:p=>r(e,h=>({...h,visible:p.target.checked}))}),"visible"]})]})]})}var Hl=require("react");var Zi=[{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:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."},{id:"change-light-color",label:"Change Light Color",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."},{id:"set-brightness",label:"Set Brightness",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."}],jl="__custom__";function $o(e){return Zi.find(t=>t.id===e)}var r2=Zi.filter(e=>e.handling==="viewer").map(e=>e.id),ly=new Set(["","New Action",...Zi.map(e=>e.label)]);function Jd(e){return ly.has(e.trim())}function pg(e,t){let n=Array.from({length:t.length+1},(a,r)=>r);for(let a=1;a<=e.length;a+=1){let r=[a];for(let i=1;i<=t.length;i+=1){let s=n[i-1]+(e[a-1]===t[i-1]?0:1);r[i]=Math.min(r[i-1]+1,n[i]+1,s)}n=r}return n[t.length]}function mg(e){if($o(e))return null;let t=e.trim().toLowerCase();if(!t)return null;let n=t.replace(/[^a-z0-9]/g,""),a=null;for(let r of Zi){let i=Math.min(pg(t,r.id),pg(n,r.id.replace(/[^a-z0-9]/g,"")));(!a||i<a.distance)&&(a={id:r.id,distance:i})}return a&&a.distance<=2?a.id:null}var Ve=require("react/jsx-runtime"),hg=Zi.filter(e=>e.handling==="viewer"),cy=Zi.filter(e=>e.handling==="host");function fg({selectedItem:e,selectedBinding:t,open:n,onToggle:a,updateBinding:r}){let[i,s]=(0,Hl.useState)(new Set);(0,Hl.useEffect)(()=>{s(new Set)},[e]);let l=t.actions??[],o=(p,h)=>r(e,f=>({...f,actions:(f.actions??[]).map((b,w)=>w===p?h(b):b)})),c=p=>{r(e,h=>({...h,actions:(h.actions??[]).filter((f,b)=>b!==p)})),s(h=>{let f=new Set;return h.forEach(b=>{b<p?f.add(b):b>p&&f.add(b-1)}),f})},d=(p,h)=>s(f=>{let b=new Set(f);return h?b.add(p):b.delete(p),b});return(0,Ve.jsxs)(Xn,{title:"Actions",open:n,onToggle:a,children:[(0,Ve.jsx)("div",{className:"bb-actionList",children:l.map((p,h)=>{let f=$o(p.id),b=i.has(h)||!f,w=p.id.trim(),k=f?null:mg(p.id),x=w.length>0&&l.some((u,m)=>m!==h&&u.id.trim()===w);return(0,Ve.jsxs)("div",{className:"bb-actionCard",children:[(0,Ve.jsxs)("div",{className:"bb-actionCardHeader",children:[(0,Ve.jsxs)("div",{className:"bb-actionCardTitle",children:["Action ",h+1]}),(0,Ve.jsx)("div",{className:"bb-actionCardMeta",children:p.type})]}),(0,Ve.jsxs)("div",{className:"bb-actionGrid",children:[(0,Ve.jsxs)("div",{className:"bb-field",children:[(0,Ve.jsx)("label",{className:"bb-label",children:"Action ID"}),(0,Ve.jsxs)("select",{className:"bb-select",value:b?jl:p.id,onChange:u=>{let m=u.target.value;if(m===jl){d(h,!0);return}d(h,!1);let _=$o(m);o(h,M=>({...M,id:m,label:_&&Jd(M.label)?_.label:M.label}))},children:[(0,Ve.jsx)("optgroup",{label:"Handled by the viewer",children:hg.map(u=>(0,Ve.jsx)("option",{value:u.id,children:u.id},u.id))}),(0,Ve.jsx)("optgroup",{label:"Handled by your app",children:cy.map(u=>(0,Ve.jsx)("option",{value:u.id,children:u.id},u.id))}),(0,Ve.jsx)("option",{value:jl,children:"Custom\u2026"})]})]}),b?(0,Ve.jsxs)("div",{className:"bb-field",children:[(0,Ve.jsx)("label",{className:"bb-label",children:"Custom action ID"}),(0,Ve.jsx)("input",{className:"bb-input",value:p.id,placeholder:"open-datasheet",onChange:u=>{d(h,!0),o(h,m=>({...m,id:u.target.value}))}})]}):null,(0,Ve.jsxs)("div",{className:"bb-field",children:[(0,Ve.jsx)("label",{className:"bb-label",children:"Label"}),(0,Ve.jsx)("input",{className:"bb-input",value:p.label,onChange:u=>o(h,m=>({...m,label:u.target.value}))})]}),f?(0,Ve.jsx)("span",{className:"bb-note",children:f.description}):w.length===0?(0,Ve.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,Ve.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.",k?(0,Ve.jsxs)(Ve.Fragment,{children:[" Did you mean ",(0,Ve.jsx)("button",{type:"button",className:"bb-linkButton",onClick:()=>{d(h,!1);let u=$o(k);o(h,m=>({...m,id:k,label:u&&Jd(m.label)?u.label:m.label}))},children:k}),"?"]}):null]}),p.effects?.length?(0,Ve.jsxs)("span",{className:"bb-note",children:[p.effects.length," declarative effect",p.effects.length===1?"":"s",", execute with useViewerActions."]}):null,x?(0,Ve.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,Ve.jsx)("div",{className:"bb-actionFooter",children:(0,Ve.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-actionRemove",onClick:()=>c(h),children:"Remove Action"})})]},h)})}),(0,Ve.jsx)("div",{style:{marginTop:10},children:(0,Ve.jsx)("button",{type:"button",className:"bb-button",onClick:()=>{let p=hg.find(h=>!l.some(f=>f.id===h.id));r(e,h=>({...h,actions:[...h.actions??[],{id:p?.id??"",label:p?.label??"New Action",type:"command"}]})),p||d(l.length,!0)},children:"Add Action"})})]})}var Gl=require("lucide-react");var bt=require("react/jsx-runtime");function gg({selectedBinding:e,open:t,onToggle:n,cameraState:a,formattedCameraState:r,savedCameraPosition:i,onSaveCameraPosition:s,onGoToSavedCamera:l,onClearSavedCamera:o,onResetView:c,onFitScene:d}){return(0,bt.jsxs)(Xn,{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"}),a?(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:s,disabled:!a,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:d,children:"Fit Scene"})]}),i?.position&&i?.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 [",i.position.map(p=>p.toFixed(1)).join(", "),"]"]}),(0,bt.jsxs)("div",{className:"se-waypointCoords",children:["look [",i.target.map(p=>p.toFixed(1)).join(", "),"]"]})]}),(0,bt.jsxs)("div",{className:"se-waypointActions",children:[(0,bt.jsx)("button",{className:"se-waypointAction",onClick:l,title:"Fly camera to the saved position",children:(0,bt.jsx)(Gl.MapPin,{size:15})}),(0,bt.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:o,title:"Delete saved position",children:(0,bt.jsx)(Gl.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 Wl=require("lucide-react");var je=require("react/jsx-runtime"),bg=["X","Y","Z"];var dy=.1;function Qd(e){let t=e%360;return t<0?t+360:t}function vg(e){return Qd(e*180/Math.PI)}function xg(e){return e*Math.PI/180}function uy(e,t,n){let a=[...e],r=vg(e[t]);return a[t]=xg(Qd(r+n)),a}function py({value:e,min:t=-1/0,max:n=1/0,step:a=.1,disabled:r=!1,onChange:i,formatValue:s=o=>Number(o.toFixed(3)),label:l}){return(0,je.jsx)("div",{className:"bb-transformAxesGrid",children:bg.map((o,c)=>(0,je.jsxs)("div",{className:"bb-transformAxis",children:[(0,je.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:o}),(0,je.jsx)("div",{className:"bb-transformAxisControl",children:(0,je.jsx)("input",{type:"number",className:"se-numberInput bb-transformNumberInput",step:a,min:t,max:n,value:s(e[c]),disabled:r,"aria-label":`${o} ${l?.toLowerCase()||""}`,onChange:d=>{let p=Number(d.target.value);if(Number.isFinite(p)){let h=Math.max(t,Math.min(n,p)),f=[...e];f[c]=h,i(f)}}})})]},o))})}function yg({selectedItem:e,selectedBinding:t,open:n,onToggle:a,updateBinding:r,moveModeEnabled:i,onToggleMoveMode:s,transformSpace:l,onTransformSpaceChange:o,originalTransform:c}){let d=t.transform?.rotation??c?.rotation??[0,0,0],p=t.transform?.position??c?.position??[0,0,0],h=(u,m)=>{let _=u.transform?.rotation??c?.rotation??[0,0,0],M=u.transform?.position??c?.position??[0,0,0],C=u.transform?.scale??c?.scale??[1,1,1],A=c?.pivotLocal??[0,0,0],g=hf(M,_,m,C,A,c?.rotationOrder??"XYZ");return{...u,transform:{...u.transform,position:g,rotation:m}}},f=(u,m)=>{e&&r(e,_=>{let M=_.transform?.rotation??c?.rotation??[0,0,0],C=uy(M,u,m);return h(_,C)})},b=(u,m)=>{e&&r(e,_=>{let C=[..._.transform?.rotation??c?.rotation??[0,0,0]];return C[u]=xg(Qd(m)),h(_,C)})},w=(u,m)=>{e&&r(e,_=>{let C=[..._.transform?.position??c?.position??[0,0,0]];return C[u]=m,{..._,transform:{..._.transform,position:C}}})},k=(u,m)=>{e&&w(u,p[u]+m)},x=()=>{!e||!c||r(e,u=>{let m={...u.transform};return delete m.position,delete m.rotation,{...u,transform:Object.keys(m).length>0?m:void 0}})};return(0,je.jsxs)(Xn,{title:"Move & Rotate",open:n,onToggle:a,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,je.jsxs)("div",{className:"se-field",children:[(0,je.jsxs)("div",{className:"se-fieldLabel",children:[(0,je.jsxs)("span",{children:[(0,je.jsx)(Wl.Move3d,{size:14,style:{marginRight:6,verticalAlign:"-2px"}}),"Transform gizmo"]}),(0,je.jsxs)("label",{className:"se-switch","aria-label":"Toggle move mode",children:[(0,je.jsx)("input",{type:"checkbox",checked:i,onChange:u=>s(u.target.checked)}),(0,je.jsx)("span",{className:"se-switchTrack",children:(0,je.jsx)("span",{className:"se-switchThumb"})})]})]}),(0,je.jsx)("span",{className:"bb-note",children:"Select a mesh \xB7 drag the colored arrows or planes to move"})]}),(0,je.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,je.jsx)("div",{className:"se-fieldLabel",children:(0,je.jsx)("span",{children:"Axis space"})}),(0,je.jsx)("div",{className:"se-segmentedControl",children:["world","local"].map(u=>(0,je.jsx)("button",{type:"button",className:`se-segmentedOption ${l===u?"se-segmentedOption--active":""}`,onClick:()=>o(u),children:u},u))})]}),(0,je.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,je.jsx)("div",{className:"se-fieldLabel",children:(0,je.jsx)("span",{children:"Rotation (degrees)"})}),(0,je.jsx)("div",{className:"bb-transformAxesGrid",children:bg.map((u,m)=>{let _=Math.round(vg(d[m]));return(0,je.jsxs)("div",{className:"bb-transformAxis",children:[(0,je.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:u}),(0,je.jsx)("div",{className:"bb-transformAxisControl",children:(0,je.jsx)("input",{type:"number",className:"se-numberInput bb-transformNumberInput",step:1,min:0,max:359,value:_,disabled:!e,"aria-label":`${u} rotation in degrees`,onChange:M=>{let C=Number(M.target.value);Number.isFinite(C)&&b(m,C)}})})]},u)})})]}),(0,je.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,je.jsx)("div",{className:"se-fieldLabel",children:(0,je.jsx)("span",{children:"Position"})}),(0,je.jsx)(py,{value:p,min:-1/0,max:1/0,step:dy,disabled:!e,label:"position",onChange:u=>{e&&r(e,m=>({...m,transform:{...m.transform,position:u}}))}})]}),(0,je.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",style:{marginTop:10,display:"inline-flex",alignItems:"center",gap:6},disabled:!e||!c,onClick:x,title:"Restore this node's position and rotation to what they were in the original model",children:[(0,je.jsx)(Wl.RotateCcw,{size:14}),"Restore original position & rotation"]})]})}var qo=require("react");function my(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 eu(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 hy(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 fy(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 gy(e){let t=hy(e);return{id:my(e),modelObjectId:e,type:t,label:eu(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:fy(t),metrics:{},metadata:{}}}function tu(e){return Object.fromEntries(e.map(t=>[t,gy(t)]))}function wg(e){let{nodesById:t}=Sa(e),n=[];for(let[a,r]of Object.entries(t)){let i=r;i.isMesh&&i.geometry&&r.name&&n.push(a)}return n.sort((a,r)=>a.localeCompare(r))}var xn=require("react/jsx-runtime");function Sg({bindings:e,selectedItem:t,onSelect:n,onHover:a,isOpen:r=!0,onToggle:i}){let[s,l]=(0,qo.useState)(""),o=(0,qo.useMemo)(()=>Object.keys(e),[e]),c=(0,qo.useMemo)(()=>{let d=s.trim().toLowerCase();return d?o.filter(p=>{let h=e[p];return p.toLowerCase().includes(d)||h.label?.toLowerCase().includes(d)||h.type.toLowerCase().includes(d)}):o},[e,o,s]);return(0,xn.jsxs)("aside",{className:`bb-sidebar bb-sidebar--right ${r?"":"bb-sidebar--collapsed"}`,children:[(0,xn.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!r&&(0,xn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>i?.(!0),"aria-label":"Open scene nodes sidebar",title:"Open scene nodes",children:"\u2190"}),r&&(0,xn.jsxs)(xn.Fragment,{children:[(0,xn.jsxs)("div",{children:[(0,xn.jsx)("div",{className:"bb-sectionKicker",children:"Scene Nodes"}),(0,xn.jsxs)("div",{className:"bb-sectionHeading",children:[c.length," visible entries"]})]}),(0,xn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>i?.(!1),"aria-label":"Close scene nodes sidebar",title:"Close scene nodes",children:"\u2192"})]})]}),r&&(0,xn.jsxs)("section",{className:"bb-nodeList",children:[(0,xn.jsx)("div",{className:"bb-search",children:(0,xn.jsx)("input",{className:"bb-input",placeholder:"Search nodes, labels, or types",value:s,onChange:d=>l(d.target.value)})}),(0,xn.jsx)("div",{className:"bb-nodeItems",children:c.map(d=>{let p=e[d];return(0,xn.jsxs)("button",{type:"button",className:`bb-nodeButton ${d===t?"bb-nodeButton--active":""}`,onClick:()=>n(d),onMouseEnter:()=>a?.(d),onMouseLeave:()=>a?.(null),children:[(0,xn.jsx)("span",{className:"bb-nodeName",children:d}),(0,xn.jsxs)("span",{className:"bb-nodeMeta",children:[p.type,p.label===eu(d)?"":p.label||"\xB7 Untitled"]})]},d)})})]})]})}var Mi=require("react/jsx-runtime");function nu({title:e,label:t,open:n,onToggle:a,draft:r,error:i,example:s,onDraftChange:l,onCommit:o}){return(0,Mi.jsx)(Xn,{title:e,open:n,onToggle:a,children:(0,Mi.jsxs)("div",{className:"bb-field",children:[(0,Mi.jsx)("label",{className:"bb-label",children:t}),(0,Mi.jsx)("textarea",{className:"bb-textarea",value:r,onChange:c=>l(c.target.value),onBlur:o}),i?(0,Mi.jsx)("span",{className:"bb-status bb-status--error",children:i}):(0,Mi.jsxs)("span",{className:"bb-note",children:["Use a JSON object like ",s,"."]})]})})}function _g(e,t){let n=new Map(e.animations.clips.map(i=>[i.sourceName,i])),a=t.map(({sourceName:i})=>n.get(i)??{sourceName:i,displayName:i,hidden:!1,loopMode:"repeat",speed:1}),r=e.animations.autoplayClip&&a.some(i=>i.sourceName===e.animations.autoplayClip&&!i.hidden)?e.animations.autoplayClip:null;return{clips:a,autoplayClip:r}}var ri=require("react"),by=100;function vy(e,t){switch(t.type){case"set":{let n=typeof t.updater=="function"?t.updater(e.present):t.updater;return n===e.present?e:t.coalesce?{...e,present:n,future:[]}:{past:[...e.past,e.present].slice(-by),present:n,future:[]}}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]}}case"redo":{if(e.future.length===0)return e;let[n,...a]=e.future;return{past:[...e.past,e.present],present:n,future:a}}case"reset":return{past:[],present:t.value,future:[]}}}function ru(e,t=600){let[n,a]=(0,ri.useReducer)(vy,{past:[],present:e,future:[]}),r=(0,ri.useRef)(0),i=(0,ri.useCallback)(c=>{let d=Date.now(),p=d-r.current<t;r.current=d,a({type:"set",updater:c,coalesce:p})},[t]),s=(0,ri.useCallback)(()=>{r.current=0,a({type:"undo"})},[]),l=(0,ri.useCallback)(()=>{r.current=0,a({type:"redo"})},[]),o=(0,ri.useCallback)(c=>{r.current=0,a({type:"reset",value:c})},[]);return{value:n.present,setValue:i,undo:s,redo:l,reset:o,canUndo:n.past.length>0,canRedo:n.future.length>0}}var Ag=require("fflate");function Mg(e){return JSON.stringify(e,null,2)}function Cg(e){return['import { defineObjectBindings } from "@liveroom-tech/react-immersive/utils";',"",`export const objectBindings = defineObjectBindings(${JSON.stringify(e,null,2)});`,""].join(`
3673
+ `)}function Pg(e){return JSON.stringify(e,null,2)}function Tg(e){return['import type { SceneConfig } from "@liveroom-tech/react-immersive/utils";',"",`export const sceneConfig: SceneConfig = ${JSON.stringify(e,null,2)};`,""].join(`
3674
+ `)}function Yo(e,t,n){qr(new Blob([t],{type:n}),e)}function iu(e){return JSON.stringify(e??{},null,2)}function au(e){return`[${e[0].toFixed(3)}, ${e[1].toFixed(3)}, ${e[2].toFixed(3)}]`}function xy(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 Eg(e){let t=new Set;for(let r of Object.values(e))for(let i of xy(r))t.add(i);let n=[],a=[];return await Promise.all(Array.from(t).map(async r=>{let i=Dp(r);if(i)try{let s=await fetch(i);if(!s.ok)throw new Error(String(s.status));n.push({path:r,blob:await s.blob()})}catch{a.push(r)}})),{assets:n,failedPaths:a}}async function ou(e,t,n,a,r){if(r.length===0){Yo(e,t,n);return}let i={[e]:(0,Ag.strToU8)(t)};for(let l of r)i[l.path]=new Uint8Array(await l.blob.arrayBuffer());let s=await Ss(i);qr(new Blob([s],{type:"application/zip"}),a)}var su={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"]},kg=Object.keys(su);function Rg(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 lu(e){if(e)return Object.values(e).some(Rg)?e:void 0}function fr(e,t){return e?su[t].some(n=>Rg(e[n])):!1}function cu(e){return{pbr:fr(e,"pbr"),roughness:fr(e,"roughness"),emission:fr(e,"emission"),opacity:fr(e,"opacity"),normalBump:fr(e,"normalBump"),displacement:fr(e,"displacement"),ao:fr(e,"ao"),clearcoat:fr(e,"clearcoat"),sheen:fr(e,"sheen"),anisotropy:fr(e,"anisotropy"),transmission:fr(e,"transmission"),faces:fr(e,"faces")}}function du(e,t){if(t)return{...e,style:{...e.style,material:t}};if(!e.style)return e;let{material:n,...a}=e.style;return{...e,style:Object.keys(a).length>0?a:void 0}}function Ng(e,t){if(!e)return;let n={...e};for(let a of su[t])delete n[a];return n}var j=require("react/jsx-runtime"),yy="/room.glb";function Xl(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function Lg(e,t){if(!Xl(e)||!Xl(t))return t??e;let n={...e};for(let[a,r]of Object.entries(t)){let i=n[a];n[a]=Xl(i)&&Xl(r)?Lg(i,r):r}return n}function uu({licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:a,meshopt:r,project:i,onProjectChange:s,projectChangeDebounceMs:l=350,onModelUpload:o,onEditLeaseChange:c}){let d=(0,ne.useRef)(null),p=(0,ne.useRef)(null),h=(0,ne.useRef)(null),[f,b]=(0,ne.useState)(i?.model.url??null),[w,k]=(0,ne.useState)(i?.model.name??""),[x,u]=(0,ne.useState)(i?.model??null),[m,_]=(0,ne.useState)(null),M=ru(i?.objectBindings??{}),C=M.value,A=M.setValue,[g,S]=(0,ne.useState)(!1),[v,P]=(0,ne.useState)(!1),[U,E]=(0,ne.useState)("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),[V,T]=(0,ne.useState)("default"),[G,W]=(0,ne.useState)(!1),[R,N]=(0,ne.useState)("{}"),[Z,$]=(0,ne.useState)("{}"),[de,Ne]=(0,ne.useState)(null),[be,Ce]=(0,ne.useState)(null),[ke,ze]=(0,ne.useState)(!1),[St,Ft]=(0,ne.useState)(!1),[it,Ue]=(0,ne.useState)(!1),[He,Gt]=(0,ne.useState)({identity:!0,basics:!0,material:!1,actions:!1,camera:!1,transform:!1,metrics:!1,metadata:!1}),[at,wn]=(0,ne.useState)({pbr:!0,roughness:!1,emission:!1,opacity:!1,normalBump:!1,displacement:!1,ao:!1,clearcoat:!1,sheen:!1,anisotropy:!1,transmission:!1,faces:!1}),ot=B=>Gt(X=>({...X,[B]:!X[B]})),pn=B=>wn(X=>({...X,[B]:!X[B]})),[Wt,We]=(0,ne.useState)("object"),[vt,ie]=(0,ne.useState)("General"),[ce,Xt]=(0,ne.useState)("metalness"),[_t,nt]=(0,ne.useState)(cu()),st=(0,ne.useRef)(null),[$t,sn]=(0,ne.useState)(!1),[Kt,On]=(0,ne.useState)(!0),[Tn,_e]=(0,ne.useState)(!0),[mt,Qe]=(0,ne.useState)(!1),[Ge,Bt]=(0,ne.useState)(null),[xt,Dt]=(0,ne.useState)(!1),[Zt,In]=(0,ne.useState)("world"),te=(0,ne.useRef)({}),L=ru(i?.sceneConfig??ci),O=L.value,q=L.setValue,[J,Q]=(0,ne.useState)(null),[he,le]=(0,ne.useState)(null),ht=gl(e,t),ge=_f(ht.tier),Ot=(0,ne.useMemo)(()=>({isInsideEditor:!0,activeTab:Wt,activeSubTab:vt,tier:ge,setActiveTab:We,setActiveSubTab:ie}),[Wt,vt,ge]),qe=(0,ne.useRef)(null),lt=(0,ne.useRef)(0),ve=(0,ne.useRef)(0),Pt=(0,ne.useRef)(i?`${i.id}:${i.revision}`:null),ln=(0,ne.useRef)(!1),Mt=(0,ne.useRef)(!1),Vt=(0,ne.useRef)(i?{requestId:0,modelName:i.model.name??"model",modelUrl:i.model.url,storedBindings:i.objectBindings,streaming:!!i.model.tilesetUrl}:null),Tt=(0,ne.useRef)(null),{cameraState:Oe,resetView:ii,focusObject:qa,fitScene:Ya,setCameraState:zn,handleCameraChange:Qi,handleViewerReady:ic}=El(),ac=(0,ne.useCallback)(B=>{zn({position:B.position,target:B.target,fov:Oe?.fov??null,zoom:Oe?.zoom??1,azimuthAngle:B.azimuthAngle,polarAngle:B.polarAngle},!0)},[zn,Oe]),Hr=kl(),yt=m?C[m]??null:null,Ti=yt?.style?.material,Ar=yt?.cameraState,es=Oe?{position:au(Oe.position),target:au(Oe.target)}:null,Ai=(0,ne.useCallback)(B=>{q(X=>{let ae=X.annotations.map(Fe=>Fe.id).join(","),Me=B.map(Fe=>Fe.id).join(",");return ae===Me?X:{...X,annotations:B}})},[]),ea=(0,ne.useCallback)(B=>{Q(B?{annotation:B}:null)},[]);(0,ne.useEffect)(()=>{if(!yt){N("{}"),$("{}"),Ne(null),Ce(null);return}N(iu(yt.metrics)),$(iu(yt.metadata)),Ne(null),Ce(null)},[yt]),(0,ne.useEffect)(()=>{let B=cu(Ti);if(st.current!==m){st.current=m,nt(B);return}nt(X=>{let ae=!1,Me={...X};for(let Fe of kg)B[Fe]&&!X[Fe]&&(Me[Fe]=!0,ae=!0);return ae?Me:X})},[m,Ti]),(0,ne.useEffect)(()=>()=>{qe.current?.cleanup()},[]),(0,ne.useEffect)(()=>{if(!i)return;let B=`${i.id}:${i.revision}`;if(Pt.current===B)return;Pt.current=B;let X=f!==i.model.url||x?.tilesetUrl!==i.model.tilesetUrl||x?.assetVersion!==i.model.assetVersion,ae=C!==i.objectBindings,Me=O!==i.sceneConfig;if((X||ae||Me)&&(Mt.current=!0),u(i.model),k(i.model.name??"model"),ae&&M.reset(i.objectBindings),Me&&L.reset(i.sceneConfig),X){let Fe=++ve.current;Vt.current={requestId:Fe,modelName:i.model.name??"model",modelUrl:i.model.url,storedBindings:i.objectBindings,streaming:!!i.model.tilesetUrl},Tt.current=null,_(null),S(!0),b(i.model.url)}},[C,i,f,O,x,M,L]),(0,ne.useEffect)(()=>{if(!i||!s||!f)return;if(!ln.current){ln.current=!0;return}if(f===i.model.url&&C===i.objectBindings&&O===i.sceneConfig)return;if(Mt.current){Mt.current=!1;return}let B=window.setTimeout(()=>{s({projectId:i.id,baseRevision:i.revision,model:{...x??i.model,url:f,name:w||i.model.name},objectBindings:C,sceneConfig:O},"local")},l);return()=>window.clearTimeout(B)},[C,w,f,s,i,l,x,O]),(0,ne.useEffect)(()=>{let B=X=>{if(X.key.toLowerCase()!=="z"||!(X.metaKey||X.ctrlKey))return;let ae=X.target,Me=ae?.tagName;if(Me==="INPUT"||Me==="TEXTAREA"||ae?.isContentEditable)return;X.preventDefault();let Fe=Wt==="scene"?L:M;X.shiftKey?Fe.redo():Fe.undo()};return window.addEventListener("keydown",B),()=>window.removeEventListener("keydown",B)},[Wt,M,L]),(0,ne.useEffect)(()=>{if(g||V==="default"||V==="success")return;W(!0);let B=window.setTimeout(()=>W(!1),4e3);return()=>window.clearTimeout(B)},[U,V,g]);let $n=(0,ne.useMemo)(()=>Object.keys(C),[C]),Ka=(0,ne.useMemo)(()=>!m||!yt?null:yt.id.trim()?Object.entries(C).some(([ae,Me])=>ae!==m&&Me.id===yt.id)?"Another binding already uses this ID.":null:"ID is required.",[C,m,yt]),Qn=(B,X)=>{A(ae=>({...ae,[B]:X(ae[B])}))},ta=(B,X)=>{Qn(B,ae=>{let Me=lu(X(ae.style?.material));return du(ae,Me)})},oc=(B,X,ae)=>{ta(B,Me=>({...Me,[X]:ae?{path:ae}:void 0}))},sc=(B,X)=>{nt(ae=>({...ae,[B]:X})),!X&&m&&Qn(m,ae=>{let Me=lu(Ng(ae.style?.material,B));return du(ae,Me)})},Za=(0,ne.useCallback)((B,X,ae)=>{let Me=wg(B),Fe=tu(Me);if(ae){let At=new Map(Object.values(ae).map(Xe=>[Xe.modelObjectId,Xe]));for(let Xe of Me){let Un=At.get(Xe);Un&&(Fe[Xe]=Un)}}B.updateMatrixWorld(!0);let Jt={};for(let At of Me){let Xe=Sr(B,At);if(!Xe){Jt[At]={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],pivotLocal:[0,0,0],rotationOrder:"XYZ"};continue}let Un=Cl(Xe);Jt[At]={position:[Xe.position.x,Xe.position.y,Xe.position.z],rotation:[Xe.rotation.x,Xe.rotation.y,Xe.rotation.z],scale:[Xe.scale.x,Xe.scale.y,Xe.scale.z],pivotLocal:[Un.x,Un.y,Un.z],rotationOrder:Xe.rotation.order}}te.current=Jt,M.reset(Fe),_(Me[0]??null),ae||q(At=>({...At,annotations:[]})),E(`Generated ${Me.length} bindings from ${X}.`),T("success"),S(!1)},[M,q]),Ja=(B,X,ae,Me)=>{let Fe=++ve.current;S(!0);let Jt=ae?ae/1048576:0;E(Jt>=100?`Reading ${X} (${Math.round(Jt)}MB \u2014 large file, this can take a while)...`:`Reading ${X} and generating starter bindings...`),T("default"),k(X),u(Me??{url:B,name:X}),Q(null);let At=Tt.current;if(B===f&&At?.url===B){Vt.current=null,Za(At.scene,X);return}Vt.current={requestId:Fe,modelName:X,modelUrl:B,streaming:!!Me?.tilesetUrl},b(B),M.reset({}),_(null)},qn=(0,ne.useCallback)(B=>{let X=Vt.current;if(!(!X||X.requestId!==ve.current)){if(Vt.current=null,Tt.current={url:X.modelUrl,scene:B},X.streaming){X.storedBindings&&(Mt.current=!0,M.reset(X.storedBindings)),E(`Streaming ${X.modelName}. Scene settings are editable; per-part bindings require a stable object catalog from the ingestion worker.`),T("success"),S(!1);return}X.storedBindings&&(Mt.current=!0),Za(B,X.modelName,X.storedBindings)}},[Za,M]),ts=(0,ne.useCallback)(B=>{let X=Vt.current;!X||X.requestId!==ve.current||(Vt.current=null,console.error(B),E(`Could not read ${X.modelName}. Make sure the file is a valid GLB, GLTF, OBJ, FBX, or USDZ asset.`),T("error"),S(!1))},[]),Er=(0,ne.useCallback)(B=>{Hr.handleAnimationsReady(B);let X=B.clipDetails??B.clips.map(ae=>({sourceName:ae,duration:0}));q(ae=>({...ae,animations:_g(ae,X)}))},[Hr,q]),na=async()=>{qe.current?.cleanup(),qe.current=null,await Ja(yy,"room.glb")},mn=async B=>{if(o){try{S(!0),E(`Uploading ${B.name}...`),T("default");let ae=await o(B);await Ja(ae.url,ae.name??B.name,B.size,ae)}catch(ae){S(!1),E(ae instanceof Error?ae.message:`Could not upload ${B.name}.`),T("error")}return}let X;try{X=await Bs(B)}catch(ae){E(ae instanceof Error?ae.message:"Could not read model file. Upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset."),T("error");return}qe.current?.cleanup(),qe.current=X,await Ja(X.url,X.name,B.size,{url:X.url,name:X.name})},kr=async B=>{let X=B.target.files?.[0];X&&(await mn(X),B.target.value="")},Ei=()=>{qe.current?.cleanup(),qe.current=null,Tt.current=null,Vt.current=null,te.current={},lt.current=0,ze(!1),b(null),k(""),u(null),_(null),Q(null),M.reset({}),N("{}"),$("{}"),Ne(null),Ce(null),le(null),Dt(!1),q(B=>({...B,animations:ci.animations,annotations:[]})),E("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),T("default")},Qa=()=>{d.current?.click()},gr=()=>{p.current?.click()},ra=async B=>{P(!0);try{let{assets:X,failedPaths:ae}=await Eg(C);B==="json"?await ou("objectBindings.json",Mg(C),"application/json","objectBindings.zip",X):await ou("objectBindings.ts",Cg(C),"text/typescript","objectBindings-ts.zip",X),ae.length>0?(E(`Exported, but ${ae.length} uploaded image${ae.length===1?"":"s"} couldn't be bundled: ${ae.join(", ")}.`),T("error")):X.length>0&&(E(`Exported with ${X.length} uploaded image${X.length===1?"":"s"} bundled into the zip.`),T("success"))}catch(X){let ae=X instanceof Error?X.message:"Unknown export error.";E(`Failed to export bindings: ${ae}`),T("error")}finally{P(!1)}},ki=async B=>{if(!$n.length){E("Load a model before importing bindings."),T("error");return}let X;try{X=JSON.parse(await B.text())}catch{E(`${B.name} is not valid JSON.`),T("error");return}if(X===null||typeof X!="object"||Array.isArray(X)){E("Expected a JSON object mapping object IDs to bindings."),T("error");return}let ae=new Map;for(let At of Object.values(X))if(At!==null&&typeof At=="object"&&typeof At.id=="string"&&typeof At.type=="string"&&typeof At.modelObjectId=="string"){let Xe=At;ae.set(Xe.modelObjectId,Xe)}if(ae.size===0){E(`${B.name} doesn't look like an exported bindings file.`),T("error");return}let Me={...C},Fe=0;for(let At of Object.keys(Me)){let Xe=ae.get(At);Xe&&(Me[At]=Xe,Fe++)}if(Fe===0){E(`None of the object IDs in ${B.name} match this model \u2014 nothing imported.`),T("error");return}A(Me);let Jt=ae.size-Fe;E(Jt>0?`Imported ${Fe} binding${Fe===1?"":"s"} from ${B.name} (${Jt} skipped \u2014 not in this model).`:`Imported ${Fe} binding${Fe===1?"":"s"} from ${B.name}.`),T("success")},ia=async B=>{let X=B.target.files?.[0];X&&(await ki(X),B.target.value="")},Ri=()=>{h.current?.click()},Gr=async B=>{let X;try{X=JSON.parse(await B.text())}catch{E(`${B.name} is not valid JSON.`),T("error");return}if(X===null||typeof X!="object"||Array.isArray(X)){E("Expected a JSON object with scene config sections."),T("error");return}let ae=["model","camera","lighting","wireframe","shadows","environment","background","groundShadows","postProcessing","animations","annotations","cinematic"],Me=X,Fe=ae.filter(Jt=>Me[Jt]!==void 0);if(Fe.length===0){E(`${B.name} doesn't look like an exported scene config file.`),T("error");return}q(Jt=>{let At={...Jt};for(let Xe of Fe)At[Xe]=Lg(Jt[Xe],Me[Xe]);return At}),E(`Imported ${Fe.length} section${Fe.length===1?"":"s"} from ${B.name}.`),T("success")},ns=async B=>{let X=B.target.files?.[0];X&&(await Gr(X),B.target.value="")},lc=B=>{B.preventDefault(),B.stopPropagation(),!(g||f)&&(lt.current+=1,ze(!0))},eo=B=>{B.preventDefault(),B.stopPropagation(),!(g||f)&&(B.dataTransfer.dropEffect="copy",ze(!0))},rs=B=>{B.preventDefault(),B.stopPropagation(),!(g||f)&&(lt.current=Math.max(0,lt.current-1),lt.current===0&&ze(!1))},aa=async B=>{if(B.preventDefault(),B.stopPropagation(),lt.current=0,ze(!1),g||f)return;let X=B.dataTransfer.files?.[0];X&&await mn(X)},to=(B,X,ae)=>{if(!m)return;let Me;try{Me=JSON.parse(X)}catch{ae("Invalid JSON");return}if(Me===null||typeof Me!="object"||Array.isArray(Me)){ae("Expected a JSON object");return}if(B==="metrics"&&Object.values(Me).some(Jt=>typeof Jt!="number"||!Number.isFinite(Jt))){ae("Metrics values must be numbers");return}Qn(m,Fe=>({...Fe,[B]:Me})),ae(null)},is=(0,ne.useCallback)(B=>{if(!B){_(null);return}let X=Object.entries(C).find(([ae,Me])=>Me===B||ae===B.modelObjectId||Me.modelObjectId===B.modelObjectId)?.[0]??null;_(X)},[C]),as=(0,ne.useCallback)(async B=>{_(B),le(null),await qa(B)},[qa]),cc=(0,ne.useCallback)(()=>{if(!m||!Oe)return;let B={position:Oe.position,target:Oe.target,...Oe.fov!=null?{fov:Oe.fov}:{},zoom:Oe.zoom};Qn(m,X=>({...X,cameraState:B}))},[m,Oe]),dc=(0,ne.useCallback)(()=>{!Ar?.position||!Ar?.target||zn({position:Ar.position,target:Ar.target,fov:Ar.fov??Oe?.fov??null,zoom:Ar.zoom??Oe?.zoom??1},!0)},[Ar,zn,Oe]),os=(0,ne.useCallback)(()=>{m&&Qn(m,B=>({...B,cameraState:void 0}))},[m]),Ni=(0,ne.useCallback)(async()=>{await ii()},[ii]),ss=(0,ne.useCallback)(async()=>{await Ya()},[Ya]),ls=(0,ne.useCallback)(B=>{Bt(B),Qe(!0)},[]),Wr=(0,ne.useCallback)(()=>{Qe(!1),Bt(null)},[]),oa=(0,ne.useCallback)(()=>{if(Ge==="bindings"){if(!$n.length){Wr();return}let B=tu($n);M.reset(B),_($n[0]??null),E("Object bindings reset to default values."),T("success")}else Ge==="scene"&&(L.reset(ci),E("Scene config reset to default values."),T("success"));Wr()},[Ge,$n,M,L,Wr]);return ht.status==="checking"?(0,j.jsx)("div",{className:"bb-root bb-root--licenseChecking",children:(0,j.jsx)(Oi,{title:"Verifying License",message:"Checking your license key..."})}):ht.status==="invalid"?(0,j.jsx)("div",{className:"bb-root bb-root--licenseInvalid",children:(0,j.jsx)(Oi,{tone:"error",title:"Invalid License",message:ht.isLocalDomain?ht.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})}):(0,j.jsxs)(Nd.Provider,{value:Ot,children:[(0,j.jsxs)("div",{className:"bb-root",children:[(0,j.jsx)("input",{ref:d,type:"file",accept:Ls,className:"bb-hiddenInput",onChange:kr,disabled:g}),(0,j.jsx)("input",{ref:p,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:ia,disabled:g}),(0,j.jsx)("input",{ref:h,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:ns,disabled:g}),(0,j.jsxs)("aside",{className:`bb-sidebar bb-sidebar--left ${St?"bb-sidebar--collapsed":""}`,children:[(0,j.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!St&&(0,j.jsx)("h1",{className:"bb-title",children:"Binding Builder"}),(0,j.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>Ft(B=>!B),"aria-label":St?"Open editor sidebar":"Collapse editor sidebar",title:St?"Open editor":"Collapse editor",children:St?"\u2192":"\u2190"})]}),!St&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)("div",{className:"bb-tabRow",children:[(0,j.jsx)("button",{type:"button",className:`bb-tab ${Wt==="object"?"bb-tab--active":""}`,onClick:()=>We("object"),children:"Object"}),(0,j.jsx)("button",{type:"button",className:`bb-tab ${Wt==="scene"?"bb-tab--active":""}`,onClick:()=>We("scene"),children:"Scene"})]}),(0,j.jsx)("section",{className:"bb-editor",children:Wt==="scene"?(0,j.jsx)(j.Fragment,{children:f?(0,j.jsx)(Yd,{config:O,onChange:q,activeSubTab:vt,onActiveSubTabChange:ie,cameraState:vt==="Cinematic"&&Oe?{position:Oe.position,target:Oe.target,azimuthAngle:Oe.azimuthAngle,polarAngle:Oe.polarAngle}:null,onPreviewWaypoint:ac,animationClipDetails:Hr.clipDetails,animationPlayback:Hr}):(0,j.jsx)("div",{className:"bb-emptyEditor",children:"Upload a model to edit its scene settings."})}):!yt||!m?(0,j.jsx)("div",{className:"bb-emptyEditor",children:"Select a generated node binding to edit its values."}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("div",{className:"bb-editorHeader",children:(0,j.jsxs)("div",{children:[(0,j.jsx)("div",{className:"bb-sectionKicker",children:"Editing Binding"}),(0,j.jsx)("h2",{className:"bb-editorTitle",children:yt.label||m}),(0,j.jsxs)("div",{className:"bb-editorMeta",children:[(0,j.jsx)("span",{children:yt.type}),(0,j.jsx)("span",{children:yt.modelObjectId})]})]})}),(0,j.jsx)(lg,{selectedItem:m,selectedBinding:yt,open:He.identity,onToggle:()=>ot("identity"),updateBinding:Qn,idError:Ka}),(0,j.jsx)(ug,{selectedItem:m,selectedBinding:yt,open:He.basics,onToggle:()=>ot("basics"),updateBinding:Qn}),(0,j.jsxs)(Xn,{title:"Material",open:He.material,onToggle:()=>ot("material"),tooltip:"Edit the selected object's base material, textures, and surface properties.",children:[(0,j.jsx)(sg,{disabled:!m,onApply:B=>m&&ta(m,X=>({...X,...B}))}),(0,j.jsx)(ag,{selectedItem:m,selectedMaterial:Ti,pbrWorkflow:ce,onPbrWorkflowChange:Xt,openMaterialPanels:at,materialPanelEnabled:_t,onToggleMaterialPanel:pn,onSetMaterialPanelState:sc,updateSelectedMaterial:ta,setSelectedTexturePath:oc})]}),(0,j.jsx)(fg,{selectedItem:m,selectedBinding:yt,open:He.actions,onToggle:()=>ot("actions"),updateBinding:Qn}),(0,j.jsx)(gg,{selectedBinding:yt,open:He.camera,onToggle:()=>ot("camera"),cameraState:Oe,formattedCameraState:es,savedCameraPosition:Ar,onSaveCameraPosition:cc,onGoToSavedCamera:dc,onClearSavedCamera:os,onResetView:Ni,onFitScene:ss}),(0,j.jsx)(yg,{selectedItem:m,selectedBinding:yt,open:He.transform,onToggle:()=>ot("transform"),updateBinding:Qn,moveModeEnabled:xt,onToggleMoveMode:Dt,transformSpace:Zt,onTransformSpaceChange:In,originalTransform:te.current[m]??null}),(0,j.jsx)(nu,{title:"Metrics",label:"Metrics JSON",open:He.metrics,onToggle:()=>ot("metrics"),draft:R,error:de,example:'{"area": 42}',onDraftChange:N,onCommit:()=>to("metrics",R,Ne)}),(0,j.jsx)(nu,{title:"Metadata",label:"Metadata JSON",open:He.metadata,onToggle:()=>ot("metadata"),draft:Z,error:be,example:'{"room": "kitchen"}',onDraftChange:$,onCommit:()=>to("metadata",Z,Ce)})]})}),Wt==="object"&&(0,j.jsxs)("div",{className:"bb-toolbar",children:[(0,j.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,j.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!M.canUndo,onClick:M.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,j.jsx)(kn.Undo2,{size:16})}),(0,j.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!$n.length,onClick:()=>ls("bindings"),title:"Reset object bindings to default",children:(0,j.jsx)(kn.ListRestart,{size:16})}),(0,j.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!M.canRedo,onClick:M.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,j.jsx)(kn.Redo2,{size:16})})]}),(0,j.jsx)("div",{className:"bb-toolbarDivider"}),(0,j.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!$n.length||g,onClick:gr,title:"Re-apply a previously exported objectBindings.json onto this model",children:[(0,j.jsx)(kn.Upload,{size:14}),"Import"]}),(0,j.jsx)("div",{className:"bb-toolbarDivider"}),(0,j.jsx)(Zd,{disabled:!$n.length||v,exporting:v,onExportJson:()=>ra("json"),onExportTs:()=>ra("ts")})]}),Wt==="scene"&&(0,j.jsxs)("div",{className:"bb-toolbar",children:[(0,j.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,j.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!L.canUndo,onClick:L.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,j.jsx)(kn.Undo2,{size:16})}),(0,j.jsx)("button",{type:"button",className:"bb-iconButton",onClick:()=>ls("scene"),title:"Reset scene config to default",children:(0,j.jsx)(kn.ListRestart,{size:16})}),(0,j.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!L.canRedo,onClick:L.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,j.jsx)(kn.Redo2,{size:16})})]}),(0,j.jsx)("div",{className:"bb-toolbarDivider"}),(0,j.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!$n.length||g,onClick:Ri,title:"Re-apply a previously exported sceneConfig.json",children:[(0,j.jsx)(kn.Upload,{size:14}),"Import"]}),(0,j.jsx)("div",{className:"bb-toolbarDivider"}),(0,j.jsx)(Zd,{disabled:!$n.length||g,onExportJson:()=>Yo("sceneConfig.json",Pg(O),"application/json"),onExportTs:()=>Yo("sceneConfig.ts",Tg(O),"text/typescript")})]})]})]}),(0,j.jsxs)("main",{className:"bb-previewShell",children:[(0,j.jsxs)("div",{className:"bb-previewHeader",children:[(0,j.jsxs)("div",{className:"bb-previewToggles",children:[(0,j.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,j.jsx)("input",{type:"checkbox",checked:$t,onChange:B=>sn(B.target.checked)}),"Zoom on selected"]}),(0,j.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,j.jsx)("input",{type:"checkbox",checked:Kt,onChange:B=>On(B.target.checked)}),"Highlight on hover"]}),(0,j.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,j.jsx)("input",{type:"checkbox",checked:Tn,onChange:B=>_e(B.target.checked)}),"Camera controller"]})]}),(0,j.jsxs)("div",{className:"bb-previewControlsColumn",children:[(0,j.jsxs)("div",{className:"bb-previewControls",children:[(0,j.jsx)("div",{className:"bb-previewMeta",children:(0,j.jsx)("span",{children:m?`Focused: ${m}`:"Select a node to inspect it"})}),f&&(0,j.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-removeModelButton",onClick:Ei,children:"Remove model"})]}),f&&(0,j.jsx)("div",{className:"bb-moveHint",children:xt?(0,j.jsx)(j.Fragment,{children:"Select a mesh \xB7 drag the colored arrows, planes, or rings"}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("kbd",{children:"W"}),(0,j.jsx)("kbd",{children:"A"}),(0,j.jsx)("kbd",{children:"S"}),(0,j.jsx)("kbd",{children:"D"})," move \xB7 ",(0,j.jsx)("kbd",{children:"Space"}),"/",(0,j.jsx)("kbd",{children:"C"})," up \xB7 down \xB7 drag to look"]})})]})]}),(0,j.jsxs)("div",{className:"bb-preview",children:[(0,j.jsx)(Da,{visible:g||G,message:U,tone:V,spinner:g}),f?(0,j.jsx)(Fo,{modelUrl:f,tilesetUrl:x?.tilesetUrl,objectBindings:C,selectedObject:yt,onObjectSelect:is,onObjectBindingsChange:A,onObjectEditLeaseChange:(B,X)=>c?.(B.modelObjectId||B.id,X),showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,onCameraChange:Qi,onViewerReady:ic,onAnnotationsChange:Ai,activeAnnotation:J?.annotation??null,onActiveAnnotationChange:ea,onAnimationsReady:Er,onModelLoaded:qn,onLoadError:ts,licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:a,meshopt:r,sceneConfig:O,onSceneConfigChange:q,renderMode:"always",preserveDrawingBuffer:!0,disableZoom:!1,zoomOnSelected:$t,highlightOnHover:Kt,enableCameraControls:Tn,moveModeEnabled:xt,objectTransformSpace:Zt,enableKeyboardNavigation:!0,showViewGizmo:!0,panelHoveredObject:Kt?he:null,showLoadingOverlay:!1}):(0,j.jsx)("div",{className:`bb-previewPlaceholder ${ke?"bb-previewPlaceholder--dragActive":""}`,onDragEnter:lc,onDragOver:eo,onDragLeave:rs,onDrop:aa,children:(0,j.jsxs)("div",{children:[(0,j.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."}),(0,j.jsx)("button",{type:"button",className:"bb-previewPlaceholderButton",onClick:Qa,disabled:g,children:g?"Loading model...":"Upload"})]})})]})]}),(0,j.jsx)(Sg,{bindings:C,selectedItem:m,onSelect:as,onHover:B=>{if(!B){le(null);return}le(C[B]??null)},isOpen:!it,onToggle:B=>Ue(!B)})]}),mt&&(0,j.jsx)("div",{className:"bb-reset-overlay",onClick:Wr,children:(0,j.jsxs)("div",{className:"bb-reset-dialog",onClick:B=>B.stopPropagation(),children:[(0,j.jsxs)("div",{className:"bb-reset-header",children:[(0,j.jsxs)("h3",{className:"bb-reset-title",children:[(0,j.jsx)(kn.AlertTriangle,{size:20,className:"bb-icon-warning"}),"Confirm Reset"]}),(0,j.jsx)("button",{className:"bb-reset-close",onClick:Wr,children:(0,j.jsx)(kn.X,{size:20})})]}),(0,j.jsxs)("div",{className:"bb-reset-body",children:[(0,j.jsxs)("p",{className:"bb-reset-message",children:["Are you sure you want to reset"," ",(0,j.jsx)("strong",{children:Ge==="bindings"?"Object Bindings":"Scene Config"}),"?"]}),(0,j.jsx)("p",{className:"bb-reset-details",children:Ge==="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,j.jsx)("p",{className:"bb-reset-warning",children:"This action cannot be undone!"})]}),(0,j.jsxs)("div",{className:"bb-reset-footer",children:[(0,j.jsx)("button",{className:"bb-reset-btn",onClick:Wr,children:"Cancel"}),(0,j.jsx)("button",{className:"bb-reset-btn-danger",onClick:oa,children:"Yes, Reset"})]})]})})]})}var se=require("react"),ql=require("@react-three/drei"),Vr=require("@react-three/fiber"),zg=require("@react-three/fiber");var Ci=require("three"),Ug=require("three-stdlib");var on=require("lucide-react");var H=require("react/jsx-runtime"),Bg={color:"#93c5fd",intensity:.05},wy=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];function Sy(e){return!!(e&&"isMesh"in e&&e.isMesh)}function Dg(e,t){Array.isArray(e)?e.forEach(t):t(e)}function _y(e,t){if(!t)return;let n=t.camera;if(!(n instanceof Ci.PerspectiveCamera))return;let a=new Ci.Box3().setFromObject(e).getSize(new Ci.Vector3).length();!Number.isFinite(a)||a<=0||(n.near=a/100,n.far=a*100,n.updateProjectionMatrix(),t.maxDistance=a*10)}var hu=class extends se.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n){this.props.onLoadError?.(n)}render(){return this.state.hasError?null:this.props.children}};function My({url:e,format:t,dracoDecoderPath:n,ktx2TranscoderPath:a,meshopt:r,hiddenKeys:i,selectedKey:s,panelHoveredKey:l,nodeRefsOut:o,onMeshesReady:c,onModelLoaded:d,onMeshClick:p,highlightOnHover:h}){let{scene:f}=zs(e,{dracoDecoderPath:n,ktx2TranscoderPath:a,meshopt:r},t),b=(0,Vr.useThree)(v=>v.invalidate),{setCanvasCursor:w,restoreCanvasCursor:k}=Hs(),[x,u]=(0,se.useState)(null),m=(0,se.useMemo)(()=>Ug.SkeletonUtils.clone(f),[f]),_=(0,se.useMemo)(()=>{let v={};return m.traverse(P=>{if(!Sy(P))return;let U=P.name||P.uuid;v[U]={key:U,label:P.name||P.type,ref:P}}),v},[m]),M=(0,se.useMemo)(()=>{let v={};for(let[P,{ref:U}]of Object.entries(_)){let V=(Array.isArray(U.material)?U.material:[U.material]).map(T=>{let W=(Vs(T)??new Ci.MeshStandardMaterial).clone();return W.userData.baseColor=W.color.clone(),W.userData.baseMap=W.map,W.userData.baseEmissive=W.emissive.clone(),W.userData.baseEmissiveMap=W.emissiveMap,W.userData.baseEmissiveIntensity=W.emissiveIntensity,W});v[P]=Array.isArray(U.material)?V:V[0]}return v},[_]);(0,se.useEffect)(()=>()=>{Object.values(M).forEach(v=>Dg(v,P=>P.dispose()))},[M]);let C=(0,se.useRef)(null);(0,se.useEffect)(()=>{C.current!==e&&(C.current=e,m.updateWorldMatrix(!0,!0),_o(m),c(_),d(m))},[e,m,_,c,d]),(0,se.useEffect)(()=>{let v=new AbortController;return vs(m,v.signal),()=>{v.abort(),xs(m)}},[m]);let A=(0,se.useMemo)(()=>!bs(m),[m]);(0,se.useEffect)(()=>{for(let[v,{ref:P}]of Object.entries(_))o.current[v]=P},[_,o]),(0,se.useEffect)(()=>{!h&&x!==null&&(u(null),k())},[h,x,k]),(0,se.useEffect)(()=>{for(let[v,{ref:P}]of Object.entries(_)){P.visible=!i.has(v);let U=M[v];if(!U)continue;P.material=U;let E=h&&x===v,V=h&&l===v;Dg(U,T=>{if(T.color.copy(T.userData.baseColor),T.map=T.userData.baseMap??null,T.emissive.copy(T.userData.baseEmissive),T.emissiveMap=T.userData.baseEmissiveMap??null,T.emissiveIntensity=T.userData.baseEmissiveIntensity,V||E){let G=!!T.userData.baseEmissiveMap;T.emissive.set(Bg.color),T.emissiveIntensity=G?T.userData.baseEmissiveIntensity:Bg.intensity}T.needsUpdate=!0})}b()},[_,M,x,s,l,h,i,b]);let g=v=>{let P=v;for(;P;){let U=P.name||P.uuid;if(_[U])return U;P=P.parent}return null},S=A?{onClick:v=>{let P=g(v.object);P&&(v.stopPropagation(),p(P))},...h?{onPointerOver:v=>{let P=g(v.object);P&&(v.stopPropagation(),w("pointer"),u(P))},onPointerOut:v=>{v.stopPropagation(),k(),u(null)}}:{}}:{};return(0,H.jsx)("primitive",{object:m,...S})}function Cy({scene:e,controlsRef:t,refitOnResize:n,onInitialFitComplete:a}){let r=(0,se.useRef)(!1),i=(0,Vr.useThree)(o=>o.invalidate),s=(0,Vr.useThree)(o=>o.size),l=(0,se.useRef)(null);return(0,se.useEffect)(()=>{r.current=!1,i()},[i,e]),(0,Vr.useFrame)(()=>{if(!r.current){if(!e||!t.current){i();return}r.current=!0,_y(e,t.current),t.current.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}).finally(a)}}),(0,se.useEffect)(()=>{if(!(!n||!r.current||!e||!t.current))return l.current&&clearTimeout(l.current),l.current=setTimeout(()=>{t.current?.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}),i()},150),()=>{l.current&&clearTimeout(l.current)}},[s.width,s.height,n]),null}function Py({exposure:e}){let t=(0,Vr.useThree)(a=>a.gl),n=(0,Vr.useThree)(a=>a.invalidate);return(0,se.useEffect)(()=>{t.toneMappingExposure=e,n()},[t,e,n]),null}function Ty({enabled:e,controlsRef:t}){let n=(0,Vr.useThree)(a=>a.invalidate);return(0,Vr.useFrame)((a,r)=>{!e||!t.current||(t.current.rotate(r*.2,0,!1),n())}),null}function $l(e){return Array.from(e.types).includes("Files")}function Og({label:e,checked:t,onChange:n}){return(0,H.jsxs)("div",{className:"env-row",children:[(0,H.jsx)("span",{className:"env-row__label",children:e}),(0,H.jsx)("div",{className:"env-row__value",children:(0,H.jsx)("button",{className:"env-checkbox-btn",onClick:()=>n(!t),children:(0,H.jsx)("span",{className:`env-checkbox${t?" env-checkbox--checked":""}`,children:t&&(0,H.jsx)(on.Check,{size:9,strokeWidth:2,color:"white"})})})})]})}function pu({label:e,value:t,onChange:n}){return(0,H.jsxs)("div",{className:"env-row",children:[(0,H.jsx)("span",{className:"env-row__label",children:e}),(0,H.jsx)("div",{className:"env-row__value",children:(0,H.jsxs)("div",{className:"env-color-swatch",style:{background:t},children:[(0,H.jsx)("span",{className:"env-color-swatch__hex",children:t}),(0,H.jsx)("input",{type:"color",className:"env-color-swatch__input",value:t,onChange:a=>n(a.target.value)})]})})]})}function mu({label:e,value:t,min:n,max:a,step:r,onChange:i}){return(0,H.jsxs)("div",{className:"env-row",children:[(0,H.jsx)("span",{className:"env-row__label",children:e}),(0,H.jsxs)("div",{className:"env-row__value env-row__value--slider",children:[(0,H.jsx)("input",{type:"range",className:"env-slider",min:n,max:a,step:r,value:t,onChange:s=>i(Number(s.target.value))}),(0,H.jsx)("span",{className:"env-slider__value",children:t.toFixed(2)})]})]})}function Ay({label:e,value:t,options:n,onChange:a}){return(0,H.jsxs)("div",{className:"env-row",children:[(0,H.jsx)("span",{className:"env-row__label",children:e}),(0,H.jsx)("div",{className:"env-row__value",children:(0,H.jsx)("select",{className:"env-select",value:t,onChange:r=>a(r.target.value),children:n.map(r=>(0,H.jsx)("option",{value:r,children:r},r))})})]})}function Ig({title:e,children:t}){let[n,a]=(0,se.useState)(!1);return(0,H.jsxs)("div",{className:"env-section",children:[(0,H.jsxs)("button",{className:"env-section__header",onClick:()=>a(r=>!r),children:[(0,H.jsx)(on.ChevronDown,{size:12,strokeWidth:2,className:`env-section__chevron${n?" env-section__chevron--collapsed":""}`}),(0,H.jsx)("span",{children:e})]}),!n&&(0,H.jsx)("div",{className:"env-section__body",children:t})]})}function Ey({isOpen:e,onToggle:t,settings:n,onChange:a}){return(0,H.jsxs)("div",{className:`left-panel-wrapper ${e?"left-panel-wrapper--open":"left-panel-wrapper--closed"}`,children:[!e&&(0,H.jsx)("button",{className:"side-panel__open-btn side-panel__open-btn--left",onClick:()=>t(!0),children:(0,H.jsx)(on.Settings,{size:20,strokeWidth:1.8})}),(0,H.jsxs)("div",{className:`side-panel side-panel--left ${e?"side-panel--open-left":"side-panel--closed-left"}`,"aria-hidden":!e,children:[(0,H.jsx)("div",{className:"side-panel__header",children:(0,H.jsxs)("div",{className:"side-panel__header-top",children:[(0,H.jsx)("span",{className:"side-panel__eyebrow",children:"Scene Settings"}),(0,H.jsx)("button",{className:"side-panel__close-btn",onClick:()=>t(!1),title:"Close",children:(0,H.jsx)(on.X,{size:12,strokeWidth:1.6})})]})}),(0,H.jsxs)("div",{className:"env-controls",children:[(0,H.jsxs)(Ig,{title:"Background",children:[(0,H.jsx)(Og,{label:"Background",checked:n.backgroundEnabled,onChange:r=>a("backgroundEnabled",r)}),(0,H.jsx)(pu,{label:"Background Color",value:n.backgroundColor,onChange:r=>a("backgroundColor",r)}),(0,H.jsx)(Ay,{label:"Environment",value:n.envPreset,options:wy,onChange:r=>a("envPreset",r)}),(0,H.jsx)(Og,{label:"Auto Rotate",checked:n.autoRotate,onChange:r=>a("autoRotate",r)})]}),(0,H.jsxs)(Ig,{title:"Lighting",children:[(0,H.jsx)(mu,{label:"Exposure",value:n.exposure,min:0,max:2,step:.05,onChange:r=>a("exposure",r)}),(0,H.jsx)(mu,{label:"Ambient Light Intensity",value:n.ambientIntensity,min:0,max:3,step:.05,onChange:r=>a("ambientIntensity",r)}),(0,H.jsx)(pu,{label:"Ambient Light Color",value:n.ambientColor,onChange:r=>a("ambientColor",r)}),(0,H.jsx)(mu,{label:"Direct Light Intensity",value:n.directionalIntensity,min:0,max:5,step:.05,onChange:r=>a("directionalIntensity",r)}),(0,H.jsx)(pu,{label:"Direct Light Color",value:n.directionalColor,onChange:r=>a("directionalColor",r)})]})]})]})]})}function ky({meshKeys:e,hiddenKeys:t,selectedKey:n,isOpen:a,onToggle:r,onFocus:i,onHover:s,onToggleVisibility:l}){let[o,c]=(0,se.useState)(""),[d,p]=(0,se.useState)(null),h=Object.values(e).filter(f=>f.label.toLowerCase().includes(o.toLowerCase()));return(0,H.jsxs)("div",{className:`right-panel-wrapper ${a?"right-panel-wrapper--open":"right-panel-wrapper--closed"}`,children:[!a&&(0,H.jsx)("button",{className:"side-panel__open-btn",onClick:()=>r(!0),children:(0,H.jsx)(on.Boxes,{size:20,strokeWidth:1.8})}),(0,H.jsxs)("div",{className:`side-panel ${a?"side-panel--open":"side-panel--closed"}`,"aria-hidden":!a,children:[(0,H.jsxs)("div",{className:"side-panel__header",children:[(0,H.jsxs)("div",{className:"side-panel__header-top",children:[(0,H.jsx)("span",{className:"side-panel__eyebrow",children:"SCENE OBJECTS"}),(0,H.jsx)("button",{className:"side-panel__close-btn",onClick:()=>r(!1),title:"Close",children:(0,H.jsx)(on.X,{size:12,strokeWidth:1.6})})]}),(0,H.jsxs)("p",{className:"side-panel__title",children:[h.length," objects"]})]}),(0,H.jsx)("div",{className:"side-panel__search-wrap",children:(0,H.jsx)("input",{className:"side-panel__search",type:"text",placeholder:"Search objects",value:o,onChange:f=>c(f.target.value)})}),(0,H.jsx)("div",{className:"side-panel__list",children:h.map(({key:f,label:b})=>{let w=!t.has(f),k=n===f,x=d===f;return(0,H.jsxs)("div",{onClick:()=>i(f),onMouseEnter:()=>{p(f),s(f)},onMouseLeave:()=>{p(null),s(null)},className:["side-panel__row",x?"side-panel__row--hovered":"",k?"side-panel__row--selected":""].filter(Boolean).join(" "),children:[(0,H.jsx)("span",{className:`side-panel__label${x||k?" side-panel__label--hovered":""}`,children:b}),(0,H.jsx)("button",{className:"side-panel__vis-btn",title:w?"Hide":"Show",onClick:u=>{u.stopPropagation(),l(f)},children:(0,H.jsx)("span",{className:`side-panel__checkbox${w?" side-panel__checkbox--checked":""}`,children:w&&(0,H.jsx)(on.Check,{size:9,strokeWidth:5,color:"white"})})})]},f)})})]})]})}function fu({modelUrl:e,modelFormat:t,dracoDecoderPath:n,ktx2TranscoderPath:a,meshopt:r=!0,backgroundColor:i="#1a1a1a",showSceneObjectsPanel:s=!0,showSceneSettingsPanel:l=!0,enableModelUpload:o=!1,zoomOnSelected:c=!1,highlightOnHover:d=!1,showLoadingOverlay:p=!0,refitOnResize:h=!0,backgroundEnabled:f=!1,autoRotate:b=!1,envPreset:w="city",exposure:k=1,ambientIntensity:x=.6,ambientColor:u="#ffffff",directionalIntensity:m=1.2,directionalColor:_="#ffffff",onModelLoaded:M,onLoadError:C}){let A=(0,se.useRef)(null),g=(0,se.useRef)({}),S=(0,se.useRef)(null),v=(0,se.useRef)(null),P=(0,se.useRef)(0),[U,E]=(0,se.useState)(null),[V,T]=(0,se.useState)(null),[G,W]=(0,se.useState)(!1),[R,N]=(0,se.useState)({}),[Z,$]=(0,se.useState)(new Set),[de,Ne]=(0,se.useState)(null),[be,Ce]=(0,se.useState)(null),[ke,ze]=(0,se.useState)(null),[St,Ft]=(0,se.useState)(null),[it,Ue]=(0,se.useState)(!1),[He,Gt]=(0,se.useState)(!1),[at,wn]=(0,se.useState)(!1),[ot,pn]=(0,se.useState)(!1),[Wt,We]=(0,se.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[vt,ie]=(0,se.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[ce,Xt]=(0,se.useState)({backgroundEnabled:f,backgroundColor:i,autoRotate:b,envPreset:w,exposure:k,ambientIntensity:x,ambientColor:u,directionalIntensity:m,directionalColor:_}),_t=o?ke:e,nt=(0,se.useCallback)(()=>{E(null),T(null),W(!1),N({}),$(new Set),Ne(null),Ce(null),Ue(!1),wn(!1)},[]),st=(0,se.useCallback)(()=>{v.current?.cleanup(),v.current=null},[]),$t=(0,se.useCallback)(()=>{st(),ze(null),Ft(null),nt(),Xt({backgroundEnabled:f,backgroundColor:i,autoRotate:b,envPreset:w,exposure:k,ambientIntensity:x,ambientColor:u,directionalIntensity:m,directionalColor:_})},[u,x,b,i,f,_,m,w,k,nt,st]),sn=(0,se.useCallback)(async te=>{Gt(!0);try{let L=await Bs(te);st(),v.current=L,ze(L.url),Ft(L.name),nt()}catch(L){Ue(!0),C?.(L)}finally{Gt(!1)}},[C,nt,st]),Kt=(0,se.useCallback)(te=>{let L=te?.[0];L&&sn(L)},[sn]);(0,se.useEffect)(()=>()=>{st()},[st]);let On=(0,se.useCallback)((te,L)=>{Xt(O=>({...O,[te]:L}))},[]);(0,se.useEffect)(()=>{Xt(te=>({...te,backgroundColor:i}))},[i]),(0,se.useEffect)(()=>{nt()},[_t,nt]);let Tn=(0,se.useCallback)(te=>{N(te),$(new Set),Ne(null)},[]),_e=(0,se.useCallback)(te=>{E(te),Ue(!1);let L=ho(te);T(L>Di?L:null),W(!1),M?.(te)},[M]),mt=(0,se.useCallback)(te=>{Ue(!0),C?.(te)},[C]),Qe=(0,se.useCallback)(te=>{if(Ne(te),!c)return;let L=g.current[te];!L||!A.current||A.current.fitToBox(L,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[c]),Ge=(0,se.useCallback)(te=>{$(L=>{let O=new Set(L);return O.has(te)?O.delete(te):O.add(te),O})},[]),Bt=(0,se.useCallback)(te=>{!o||!$l(te.dataTransfer)||(te.preventDefault(),te.stopPropagation(),P.current+=1,pn(!0))},[o]),xt=(0,se.useCallback)(te=>{!o||!$l(te.dataTransfer)||(te.preventDefault(),te.stopPropagation(),te.dataTransfer.dropEffect="copy",pn(!0))},[o]),Dt=(0,se.useCallback)(te=>{!o||!$l(te.dataTransfer)||(te.preventDefault(),te.stopPropagation(),P.current=Math.max(0,P.current-1),P.current===0&&pn(!1))},[o]),Zt=(0,se.useCallback)(te=>{!o||!$l(te.dataTransfer)||(te.preventDefault(),te.stopPropagation(),P.current=0,pn(!1),Kt(te.dataTransfer.files))},[o,Kt]),In=p&&(He||!!(_t&&!it&&(!U||!at)));return(0,H.jsxs)("div",{className:"smv-root",style:{background:ce.backgroundColor},onDragEnter:Bt,onDragOver:xt,onDragLeave:Dt,onDrop:Zt,children:[l&&_t&&(0,H.jsx)(Ey,{isOpen:vt,onToggle:ie,settings:ce,onChange:On}),(0,H.jsxs)("div",{className:"smv-canvasArea",children:[V!==null&&!G&&(0,H.jsxs)("div",{className:"smv-largeModelBanner",children:[(0,H.jsx)(on.AlertTriangle,{size:14,className:"smv-largeModelBanner__icon"}),(0,H.jsxs)("span",{children:["Very large model detected (",Math.round(V/1e6),"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."]}),(0,H.jsx)("button",{type:"button",className:"smv-largeModelBanner__dismiss",onClick:()=>W(!0),"aria-label":"Dismiss",children:(0,H.jsx)(on.X,{size:12})})]}),o?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)("input",{ref:S,type:"file",accept:Ls,className:"smv-upload-input",onChange:te=>{Kt(te.target.files),te.currentTarget.value=""}}),_t?(0,H.jsx)("div",{className:"smv-upload-toolbar",children:(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)("span",{className:"smv-upload-toolbar__name",children:St??"Uploaded model"}),(0,H.jsxs)("button",{type:"button",className:"smv-upload-toolbar__button smv-upload-toolbar__button--ghost",onClick:$t,children:[(0,H.jsx)(on.Trash2,{size:14}),"Clear"]})]})}):null]}):null,_t?(0,H.jsx)(zg.Canvas,{dpr:[1,2],frameloop:"demand",resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:{background:ce.backgroundColor},camera:{position:[0,0,5],fov:45,near:.1,far:1e3},children:(0,H.jsxs)(se.Suspense,{fallback:null,children:[(0,H.jsx)("ambientLight",{intensity:ce.ambientIntensity,color:ce.ambientColor}),(0,H.jsx)("directionalLight",{position:[-4,5,7],intensity:ce.directionalIntensity,color:ce.directionalColor,castShadow:!0}),(0,H.jsx)("directionalLight",{position:[-5,5,5],intensity:.5}),(0,H.jsx)(se.Suspense,{fallback:null,children:(0,H.jsx)(ql.Environment,{preset:ce.envPreset,background:ce.backgroundEnabled})}),(0,H.jsx)(Py,{exposure:ce.exposure}),(0,H.jsx)(Ty,{enabled:ce.autoRotate,controlsRef:A}),(0,H.jsx)(hu,{onLoadError:mt,children:(0,H.jsx)(se.Suspense,{fallback:null,children:(0,H.jsx)(My,{url:_t,format:ke?void 0:t,dracoDecoderPath:n,ktx2TranscoderPath:a,meshopt:r,hiddenKeys:Z,selectedKey:de,panelHoveredKey:be,nodeRefsOut:g,onMeshesReady:Tn,onModelLoaded:_e,onMeshClick:Qe,highlightOnHover:d})})},_t),(0,H.jsx)(Cy,{scene:U,controlsRef:A,refitOnResize:h,onInitialFitComplete:()=>wn(!0)}),(0,H.jsx)(ql.CameraControls,{ref:A,makeDefault:!0,smoothTime:.3})]})}):(0,H.jsx)("div",{className:"smv-upload-empty-state",style:{background:ce.backgroundColor},children:(0,H.jsxs)("div",{className:"smv-upload-empty-state__card",children:[(0,H.jsx)("div",{className:"smv-upload-empty-state__icon",children:(0,H.jsx)(on.Upload,{size:24})}),(0,H.jsxs)("p",{className:"smv-upload-empty-state__body",children:["Drag and drop ",(0,H.jsx)("code",{children:".glb"}),", ",(0,H.jsx)("code",{children:".gltf"}),","," ",(0,H.jsx)("code",{children:".obj"}),", ",(0,H.jsx)("code",{children:".fbx"}),", ",(0,H.jsx)("code",{children:".usdz"}),", or"," ",(0,H.jsx)("code",{children:".zip"})," here"]}),(0,H.jsxs)("button",{type:"button",className:"smv-upload-empty-state__button",onClick:()=>S.current?.click(),children:[(0,H.jsx)(on.Upload,{size:15}),"Choose model"]})]})}),(0,H.jsx)(Da,{visible:In,message:He?"Preparing model...":"Loading model..."}),o&&ot?(0,H.jsx)("div",{className:"smv-upload-drop-overlay",children:(0,H.jsxs)("div",{className:"smv-upload-drop-overlay__card",children:[(0,H.jsx)(on.Upload,{size:20}),(0,H.jsx)("span",{children:"Release to load your model"})]})}):null]}),s&&_t&&(0,H.jsx)(ky,{meshKeys:R,hiddenKeys:Z,selectedKey:de,isOpen:Wt,onToggle:We,onFocus:Qe,onHover:Ce,onToggleVisibility:Ge})]})}var Ko=require("react");function Fg(e=null){let[t,n]=(0,Ko.useState)(e),a=(0,Ko.useCallback)(i=>{n(i)},[n]),r=(0,Ko.useCallback)(()=>{n(null)},[]);return{selectedObjectBinding:t,setSelectedObjectBinding:n,handleObjectSelect:a,clearSelection:r}}var Vg=require("react");function jg(e,t){return(0,Vg.useMemo)(()=>{if(!t)return null;let n=e[t];return n||(Object.values(e).find(a=>a.id===t||a.modelObjectId===t)??null)},[e,t])}var Hg=require("react");function Gg(e){return(0,Hg.useMemo)(()=>Object.values(e).map(t=>t.modelObjectId),[e])}var Ut=require("react");function gu(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Zo(e,t){if(!gu(t))return t;let n=gu(e)?{...e}:{};for(let a of Object.keys(t)){let r=t[a];n[a]=gu(r)?Zo(n[a],r):r}return n}function Ry(e){return typeof e=="object"&&!Array.isArray(e)}function Ny(e,t){return"group"in t?e.group===t.group:"tag"in t?e.tags?.includes(t.tag)??!1:e.type===t.type}function Tr(e,t){if(Ry(t))return Object.entries(e).filter(([,r])=>Ny(r,t)).map(([r])=>r);let a=(typeof t=="string"?[t]:t).map(r=>Sn(e,r)).filter(r=>r!==null);return[...new Set(a)]}function Yl(e,t){return Tr(e,t).map(n=>e[n]).filter(n=>n!==void 0)}function Ly(e){return Array.isArray(e)&&e.length>0&&typeof e[0]!="string"}function Ji(e,t,n){let a=Ly(t)?t:[{ids:t,patch:n??{}}],r=e;for(let i of a)for(let s of Tr(r,i.ids)){let l=r[s];if(!l)continue;let o=Zo(l,i.patch);r===e&&(r={...e}),r[s]=o}return r}function Kl(e){return{style:{material:e}}}var Wg={baseColor:"texture",metalness:"metalnessMap",roughness:"roughnessMap",emissive:"emissiveMap",alpha:"alphaMap",normal:"normalMap",bump:"bumpMap",ao:"aoMap",displacement:"displacementMap",clearcoat:"clearcoatMap",clearcoatRoughness:"clearcoatRoughnessMap",clearcoatNormal:"clearcoatNormalMap",anisotropy:"anisotropyMap",transmission:"transmissionMap",thickness:"thicknessMap",sheenColor:"sheenColorMap",sheenRoughness:"sheenRoughnessMap",specularIntensity:"specularIntensityMap",specularColor:"specularColorMap"};function Xg(e){if(e)return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,n&&typeof n=="object"?{...n}:n]))}function By(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t.visible===!1).map(([t])=>[t,!0]))}function $g(e){let[t,n]=(0,Ut.useState)(e),a=(0,Ut.useCallback)((A,g)=>{n(S=>g===void 0?Ji(S,A):Ji(S,A,g))},[]),r=(0,Ut.useCallback)((A,g)=>a(A,Kl(g)),[a]),i=(0,Ut.useCallback)((A,g)=>r(A,{baseColor:g}),[r]),s=(0,Ut.useCallback)((A,g,S="baseColor")=>{let v=Wg[S],P=typeof g=="string"?{path:g}:g;a(A,{style:{material:{[v]:P}}})},[a]),l=(0,Ut.useCallback)((A,g="baseColor")=>{let S=Wg[g];a(A,{style:{material:{[S]:void 0}}})},[a]),o=(0,Ut.useCallback)((A,g)=>{n(S=>{let v=Sn(S,A);if(!v)return S;let P=Xg(S[v]?.style?.material),U=Tr(S,g);if(U.length===0)return S;let E=S;for(let V of U){let T=S[V];T&&(E===S&&(E={...S}),E[V]={...T,style:{...T.style,material:Xg(P)}})}return E})},[]),c=(0,Ut.useCallback)(A=>a(A,{style:{material:void 0}}),[a]),d=(0,Ut.useCallback)((A,g)=>a(A,{transform:g}),[a]),p=(0,Ut.useCallback)(A=>a(A,{transform:void 0}),[a]),h=(0,Ut.useCallback)((A,g)=>a(A,{metadata:g}),[a]),f=(0,Ut.useCallback)(A=>Yl(t,A),[t]),b=(0,Ut.useCallback)(A=>Tr(t,A).map(g=>t[g]?.id??g),[t]),w=(0,Ut.useCallback)(A=>{let g=Sn(t,A);return g?t[g]?.style?.material??null:null},[t]),k=(0,Ut.useCallback)(A=>a(A,{visible:!1}),[a]),x=(0,Ut.useCallback)(A=>a(A,{visible:!0}),[a]),u=(0,Ut.useCallback)(A=>{n(g=>{let S=Tr(g,A).reduce((v,P)=>{let U=g[P];return U&&v.push({ids:P,patch:{visible:U.visible===!1}}),v},[]);return Ji(g,S)})},[n]),m=(0,Ut.useCallback)(()=>{n(A=>Ji(A,Object.keys(A),{visible:!0}))},[n]),_=(0,Ut.useMemo)(()=>By(t),[t]),M=(0,Ut.useMemo)(()=>Object.keys(_).map(A=>t[A]?.id??A),[_,t]),C=(0,Ut.useCallback)(A=>{let g=Sn(t,A);return g?t[g]?.visible===!1:!1},[t]);return{objectBindings:t,setObjectBindings:n,updateObjectBindings:a,setMaterial:r,setBaseColor:i,setTexture:s,clearTexture:l,copyMaterial:o,resetMaterial:c,getMaterial:w,setTransform:d,resetTransform:p,updateMetadata:h,selectObjectBindings:f,selectObjectBindingIds:b,hiddenObjects:_,hiddenObjectIds:M,hideObject:k,showObject:x,toggleObjectVisibility:u,isObjectHidden:C,clearHiddenObjects:m}}function qg(e){return e}var yn=require("react");function Zl(e,t){return Zo(e,t)}var Dy={type:"point",color:"#ffffff",intensity:1,position:[0,0,0],distance:0,decay:2,attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0};function Yg(e){let t=(0,yn.useRef)(null),[n,a]=(0,yn.useState)(()=>{let x=typeof e=="function"?e():e;return t.current=x,x}),r=(0,yn.useCallback)(x=>{a(u=>{let m=typeof x=="function"?x(u):x;return Zl(u,m)})},[]),i=(0,yn.useCallback)(()=>{let x=t.current;x&&a(x)},[]),s=(0,yn.useCallback)((x,u)=>{r(m=>({lighting:{lights:m.lighting.lights.map(_=>_.id===x?{..._,...u}:_)}}))},[r]),l=(0,yn.useCallback)(x=>{r(u=>u.lighting.lights.some(m=>m.id===x.id)?{}:{lighting:{lights:[...u.lighting.lights,{...Dy,...x}]}})},[r]),o=(0,yn.useCallback)(x=>{r(u=>({lighting:{lights:u.lighting.lights.filter(m=>m.id!==x)}}))},[r]),c=(0,yn.useCallback)((x,u)=>s(x,{intensity:u}),[s]),d=(0,yn.useCallback)((x,u)=>s(x,{color:u}),[s]),p=(0,yn.useCallback)(x=>s(x,{visible:!0}),[s]),h=(0,yn.useCallback)(x=>s(x,{visible:!1}),[s]),f=(0,yn.useCallback)(x=>{r(u=>({lighting:{lights:u.lighting.lights.map(m=>m.id===x?{...m,visible:!m.visible}:m)}}))},[r]),b=(0,yn.useCallback)((x,u)=>s(x,{attachment:u,attachedToCamera:!1}),[s]),w=(0,yn.useCallback)(x=>s(x,{attachment:void 0}),[s]),k=(0,yn.useMemo)(()=>({items:n.lighting.lights,get:x=>n.lighting.lights.find(u=>u.id===x),add:l,update:s,remove:o,setIntensity:c,setColor:d,show:p,hide:h,toggle:f,attach:b,detach:w}),[n.lighting.lights,l,s,o,c,d,p,h,f,b,w]);return{sceneConfig:n,setSceneConfig:a,updateSceneConfig:r,resetSceneConfig:i,lights:k}}var Jl=require("react");function Kg(){let[e,t]=(0,Jl.useState)(null),n=(0,Jl.useCallback)(a=>{t(a)},[t]);return{hoveredObjectBinding:e,handleHoveredObject:n}}var jr=require("react"),Jo=require("three");function Ql(e){return[e.x,e.y,e.z]}function Zg(){let[e,t]=(0,jr.useState)(!0),[n,a]=(0,jr.useState)(!1),[r,i]=(0,jr.useState)(null),[s,l]=(0,jr.useState)(null),[o,c]=(0,jr.useState)(0),d=(0,jr.useCallback)(f=>{let b=new Jo.Box3().setFromObject(f),w=b.min.clone(),k=b.max.clone(),x=new Jo.Vector3,u=new Jo.Vector3,m=0;f.traverse(_=>{"isMesh"in _&&_.isMesh&&(m+=1)}),b.getCenter(x),b.getSize(u),l({min:Ql(w),max:Ql(k),center:Ql(x),size:Ql(u)}),c(m),i(null),t(!1),a(!0)},[]),p=(0,jr.useCallback)(f=>{i(f),l(null),c(0),t(!1),a(!1)},[]),h=(0,jr.useCallback)(()=>{t(!0),a(!1),i(null),l(null),c(0)},[]);return{isLoading:e,isReady:n,error:r,bounds:s,objectCount:o,handleModelLoaded:d,handleLoadError:p,resetModelState:h}}var ec=require("react");function Jg({bindings:e,scene:t,camera:n,animations:a,onAction:r}){let{objectBindings:i,updateObjectBindings:s,showObject:l,hideObject:o,toggleObjectVisibility:c}=e,d=t?.updateSceneConfig,p=n?.focusObject,h=n?.fitScene,f=n?.resetView,b=n?.setCameraTarget,w=n?.setCameraState,k=a?.play,x=a?.pause,u=a?.stop,m=a?.setSpeed,_=a?.seek,M=(0,ec.useCallback)(g=>{let S=Sn(i,g);return S?i[S]?.actions??[]:[]},[i]),C=(0,ec.useCallback)(async g=>{for(let S of g.action.effects??[]){if("objectBindings"in S){s(S.target,S.objectBindings);continue}if("sceneConfig"in S){d?.(S.sceneConfig);continue}if("visibility"in S){S.visibility==="show"?l(S.target):S.visibility==="hide"?o(S.target):c(S.target);continue}if("camera"in S){let P=S.camera;P.type==="focus-object"?await p?.(P.objectId??g.objectId):P.type==="fit-scene"?await h?.():P.type==="reset"?await f?.():P.type==="set-target"?await b?.(P.target,P.transition??!0):await w?.(P.state,P.transition??!0);continue}let v=S.animation;v.type==="play"?k?.(v.clip):v.type==="pause"?x?.():v.type==="stop"?u?.():v.type==="set-speed"?m?.(v.speed):_?.(v.time)}await r?.(g)},[h,p,o,r,x,k,f,_,m,w,b,l,u,c,s,d]),A=(0,ec.useCallback)(async(g,S)=>{let v=Sn(i,g);if(!v)return null;let P=i[v],U=P?.actions?.find(V=>V.id===S);if(!P||!U)return null;let E={objectId:v,action:U,binding:P};return await C(E),E},[C,i]);return{getActionsForObject:M,handleAction:C,runAction:A}}var Pi=require("react");function Oy(e){return typeof e=="function"?e:e?.handleViewerReady??null}function Qg(...e){let t=(0,Pi.useRef)(null),n=(0,Pi.useRef)(e);n.current=e;let a=(0,Pi.useCallback)(l=>{t.current=l;let o=new Set;for(let c of n.current){let d=Oy(c);d&&!o.has(d)&&(o.add(d),d(l))}},[]),r=(0,Pi.useCallback)(()=>t.current,[]),i=(0,Pi.useCallback)(l=>{let o=t.current;return o?o.captureImage(l):Promise.reject(new Error("ModelViewer is not ready yet."))},[]),s=(0,Pi.useCallback)(()=>{let l=t.current;return l?(l.invalidate(),!0):!1},[]);return{handleViewerReady:a,getViewer:r,captureImage:i,invalidate:s}}var Ie=require("react"),$a=require("three");var xu=["emissiveIntensity","opacity","metalness","roughness","transmission","clearcoat","clearcoatRoughness","ior","thickness"],tc=1;function nc(e){return typeof e=="string"?[e]:e}function rc(e,t=0,n=1){return Math.min(n,Math.max(t,e))}function bu(e,t){return e+Math.random()*(t-e)}function eb([e,t],n){return e+(t-e)*n}function vu([e,t],n){return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n,e[2]+(t[2]-e[2])*n]}function tb(e,t){let n=rc(e);switch(t){case"ease-in":return n*n;case"ease-out":return 1-(1-n)*(1-n);case"ease-in-out":return n<.5?2*n*n:1-Math.pow(-2*n+2,2)/2;default:return n}}function Iy(e){let t=e.material;return t?(Array.isArray(t)?t:[t]).filter(n=>n instanceof $a.Material):[]}function zy(e){let t={opacity:e.opacity,transparent:e.transparent};e.color&&(t.baseColor=`#${e.color.getHexString()}`),e.emissive&&(t.emissive=`#${e.emissive.getHexString()}`);for(let n of xu){let a=e[n];typeof a=="number"&&(t[n]=a)}return t}function nb(e,t){t.baseColor!==void 0&&e.color&&e.color.set(t.baseColor),t.emissive!==void 0&&e.emissive&&e.emissive.set(t.emissive);for(let n of xu){let a=t[n];a!==void 0&&typeof e[n]=="number"&&(e[n]=a)}t.transparent!==void 0&&(e.transparent=t.transparent),e.needsUpdate=!0}function Uy(e){return{position:[e.position.x,e.position.y,e.position.z],rotation:[e.rotation.x,e.rotation.y,e.rotation.z],scale:[e.scale.x,e.scale.y,e.scale.z],visible:e.visible}}function Fy(e,t){if(t.position&&e.position.set(...t.position),t.rotation&&e.rotation.set(...t.rotation),t.scale!==void 0){let n=typeof t.scale=="number"?[t.scale,t.scale,t.scale]:t.scale;e.scale.set(...n)}t.visible!==void 0&&(e.visible=t.visible),e.updateMatrix(),e.updateMatrixWorld(!0)}function rb(e={}){let t=(0,Ie.useRef)(e);t.current=e;let n=(0,Ie.useRef)(null),a=(0,Ie.useRef)(null),r=(0,Ie.useRef)(null),i=(0,Ie.useRef)(new Map),s=(0,Ie.useRef)(new Map),l=(0,Ie.useRef)(new Map),o=(0,Ie.useRef)(new Map),c=(0,Ie.useCallback)(R=>{let N=n.current;if(!N)return null;let Z=Sn(N.objectBindings,R);return N.nodeRefs[R]??(Z?N.nodeRefs[Z]:null)??(N.scene?Sr(N.scene,R):null)??null},[]),d=(0,Ie.useCallback)(R=>{let N=n.current;return N?typeof R=="object"&&!Array.isArray(R)?Tr(N.objectBindings,R):nc(R).map(Z=>Sn(N.objectBindings,Z)??Z):typeof R=="string"?[R]:Array.isArray(R)?R:[]},[]),p=(0,Ie.useCallback)(()=>{n.current?.invalidate()},[]),h=(0,Ie.useCallback)((R,N)=>{let Z=!1;for(let $ of d(R)){let de=c($);if(de)for(let Ne of Iy(de))l.current.has(Ne)||l.current.set(Ne,zy(Ne)),nb(Ne,N),Z=!0}return Z},[c,d]),f=(0,Ie.useCallback)((R,N)=>{let Z=h(R,N);return Z&&p(),Z},[p,h]),b=(0,Ie.useCallback)((R,N)=>{let Z=!1;for(let $ of d(R)){let de=c($);de&&(o.current.has(de)||o.current.set(de,Uy(de)),Fy(de,N),Z=!0)}return Z},[c,d]),w=(0,Ie.useCallback)((R,N)=>{let Z=b(R,N);return Z&&p(),Z},[p,b]),k=(0,Ie.useCallback)(R=>{let N=c(R);if(!N)return null;N.updateWorldMatrix(!0,!1);let Z=N.getWorldPosition(new $a.Vector3);return[Z.x,Z.y,Z.z]},[c]),x=(0,Ie.useCallback)(R=>{let N=s.current.get(R);return N?(N.light.removeFromParent(),N.light.dispose(),s.current.delete(R),p(),!0):!1},[p]),u=(0,Ie.useCallback)(R=>{let N=c(R.target);if(!N)return!1;let Z=s.current.get(R.id),$=Z?.light??new $a.PointLight;return Z&&Z.target!==R.target&&$.removeFromParent(),$.name=`react-immersive-runtime-light:${R.id}`,$.color.set(R.color??"#ffffff"),$.intensity=R.intensity??1,$.distance=R.distance??0,$.decay=R.decay??2,$.castShadow=R.castShadow??!1,$.position.set(...R.offset??[0,0,0]),$.parent!==N&&N.add($),s.current.set(R.id,{light:$,target:R.target}),p(),!0},[p,c]),m=(0,Ie.useCallback)((R,N)=>{let Z=s.current.get(R);if(!Z)return!1;if(N.target&&N.target!==Z.target){let $=c(N.target);if(!$)return!1;Z.light.removeFromParent(),$.add(Z.light),Z.target=N.target}return N.color!==void 0&&Z.light.color.set(N.color),N.intensity!==void 0&&(Z.light.intensity=N.intensity),N.distance!==void 0&&(Z.light.distance=N.distance),N.decay!==void 0&&(Z.light.decay=N.decay),N.offset!==void 0&&Z.light.position.set(...N.offset),N.castShadow!==void 0&&(Z.light.castShadow=N.castShadow),p(),!0},[p,c]),_=(0,Ie.useCallback)((R,N)=>{let Z=$=>N[$%N.length]??0;for(let $ of R.materials??[])d($.targets).forEach((de,Ne)=>{let be=Z(Ne),Ce={};for(let ke of xu){let ze=$.values[ke];ze&&(Ce[ke]=eb(ze,be))}h(de,Ce)});for(let $ of R.transforms??[])d($.targets).forEach((de,Ne)=>{let be=Z(Ne),Ce={};$.values.position&&(Ce.position=vu($.values.position,be)),$.values.rotation&&(Ce.rotation=vu($.values.rotation,be)),$.values.scale&&(Ce.scale=vu($.values.scale,be)),b(de,Ce)});for(let $ of R.lights??[])nc($.lights).forEach((de,Ne)=>{let be=s.current.get(de);be&&(be.light.intensity=eb($.intensity,Z(Ne)))})},[d,h,b]),M=(0,Ie.useRef)(()=>{}),C=(0,Ie.useRef)(()=>{});C.current=R=>{r.current=null;let N=!1;for(let[Z,$]of i.current){$.startedAt===null&&($.startedAt=R);let de=$.lastFrameAt??R;$.lastFrameAt=R;let Ne=$.override&&$.override.until>R?$.override.level:null;$.override&&Ne===null&&($.override=null);let be=$.update(R,R-$.startedAt,Math.min(100,R-de),Ne);N=!0,be||(i.current.delete(Z),$.onComplete?.())}N&&p(),i.current.size>0&&M.current()},M.current=()=>{r.current!==null||typeof requestAnimationFrame>"u"||(r.current=requestAnimationFrame(R=>C.current(R)))};let A=(0,Ie.useCallback)(R=>(i.current.set(R.id,R),M.current(),R.id),[]),g=(0,Ie.useCallback)((R,N={})=>{let Z=N.id??`transition-${tc++}`,$=Math.max(1,N.duration??400),de=N.easing??"ease-in-out";return A({id:Z,startedAt:null,lastFrameAt:null,override:null,onComplete:N.onComplete,update:(Ne,be,Ce,ke)=>{let ze=ke??tb(be/$,de);return _(R,[ze]),be<$}})},[_,A]),S=(0,Ie.useCallback)((R,N={})=>{let Z=N.id??`pulse-${tc++}`,$=Math.max(1,N.duration??1e3),de=N.minLevel??0,Ne=N.maxLevel??1,be=N.repeat??1/0,Ce=N.synchronized??!0,ke=Math.max(1,...[...R.materials??[],...R.transforms??[]].map(ze=>d(ze.targets).length),...(R.lights??[]).map(ze=>nc(ze.lights).length));return A({id:Z,startedAt:null,lastFrameAt:null,override:null,onComplete:N.onComplete,update:(ze,St,Ft,it)=>{let Ue=St/$,He=Array.from({length:Ce?1:ke},(Gt,at)=>{if(it!==null)return it;let wn=Ue+(Ce?0:at/ke),ot=.5-Math.cos(wn%1*Math.PI*2)/2;return de+(Ne-de)*ot});return _(R,He),be===1/0||Ue<be}})},[_,A,d]),v=(0,Ie.useCallback)((R,N={})=>{let Z=N.id??`timeline-${tc++}`,$=N.repeat??1,de=R.map(be=>({...be,duration:Math.max(1,be.duration),hold:Math.max(0,be.hold??0)})),Ne=Math.max(1,de.reduce((be,Ce)=>be+Ce.duration+Ce.hold,0));return A({id:Z,startedAt:null,lastFrameAt:null,override:null,onComplete:N.onComplete,update:(be,Ce,ke,ze)=>{if(de.length===0||$<=0)return!1;let St=Ce/Ne;if($!==1/0&&St>=$){for(let Ue of de)_(Ue.channels,[1]);return!1}let Ft=Ce%Ne,it=0;for(let Ue of de){let He=it+Ue.duration,Gt=He+Ue.hold;if(Ft>=He){_(Ue.channels,[ze??1]),it=Gt;continue}if(Ft>=it){let at=ze??tb((Ft-it)/Ue.duration,Ue.easing??"ease-in-out");_(Ue.channels,[at]);break}}return!0}})},[_,A]),P=(0,Ie.useCallback)((R,N={})=>{let Z=N.id??`flicker-${tc++}`,$=N.synchronized??!0,de=N.minLevel??.15,Ne=N.maxLevel??1,be=N.interval??[45,160],Ce=typeof be=="number"?[be,be]:be,ke=[Math.max(1,Math.min(...Ce)),Math.max(1,Math.max(...Ce))],ze=rc(N.response??.7,.01,1),St=rc(N.blackoutChance??.08),Ft=rc(N.flashChance??.12),it=N.flashLevel??1.15,Ue=Math.max(1,...[...R.materials??[],...R.transforms??[]].map(ot=>d(ot.targets).length),...(R.lights??[]).map(ot=>nc(ot.lights).length)),He=$?1:Ue,Gt=Array.from({length:He},()=>de),at=Array.from({length:He},()=>de),wn=Array.from({length:He},()=>0);return A({id:Z,startedAt:null,lastFrameAt:null,override:null,onComplete:N.onComplete,update:(ot,pn,Wt,We)=>{for(let vt=0;vt<He;vt+=1){if(We!==null)at[vt]=We;else if(ot>=wn[vt]){let ce=Math.random();at[vt]=ce<St?bu(0,Math.min(.04,de)):ce<St+Ft?it:bu(de,Ne),wn[vt]=ot+bu(...ke)}let ie=1-Math.pow(1-ze,Math.max(1,Wt)/16.67);Gt[vt]+=(at[vt]-Gt[vt])*ie}return _(R,Gt),N.duration===void 0||pn<N.duration}})},[_,A,d]),U=(0,Ie.useCallback)((R,N,Z)=>{let $=i.current.get(R);if(!$)return!1;let de=typeof performance>"u"?Date.now():performance.now();return $.override={level:N,until:de+Math.max(0,Z)},M.current(),!0},[]),E=(0,Ie.useCallback)(R=>i.current.delete(R),[]),V=(0,Ie.useCallback)(()=>{i.current.clear(),r.current!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(r.current),r.current=null)},[]),T=(0,Ie.useCallback)(()=>{for(let[R,N]of l.current)nb(R,N);l.current.clear();for(let[R,N]of o.current)R.position.set(...N.position),R.rotation.set(...N.rotation),R.scale.set(...N.scale),R.visible=N.visible,R.updateMatrix(),R.updateMatrixWorld(!0);o.current.clear();for(let R of s.current.values())R.light.removeFromParent(),R.light.dispose();s.current.clear(),p()},[p]),G=(0,Ie.useCallback)(()=>{V(),T()},[T,V]),W=(0,Ie.useCallback)(R=>{a.current&&a.current!==R.scene&&T(),n.current=R,a.current=R.scene,t.current.onViewerReady?.(R)},[T]);return(0,Ie.useEffect)(()=>()=>{G(),n.current=null,a.current=null},[G]),{handleViewerReady:W,setMaterial:f,setTransform:w,getWorldPosition:k,addPointLight:u,updatePointLight:m,removePointLight:x,transition:g,timeline:v,pulse:S,flicker:P,overrideEffect:U,stopEffect:E,stopAllEffects:V,resetRuntime:G}}var Yt=require("react");function ob(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Qo(e){return typeof e=="number"&&Number.isFinite(e)}function ib(e){return Array.isArray(e)&&e.length===3&&e.every(Qo)}function Vy(e){return!ob(e)||!ib(e.position)||!ib(e.target)||e.fov!==null&&!Qo(e.fov)||!Qo(e.zoom)||e.zoom<=0||e.azimuthAngle!==void 0&&!Qo(e.azimuthAngle)||e.polarAngle!==void 0&&!Qo(e.polarAngle)?null:{position:e.position,target:e.target,fov:e.fov,zoom:e.zoom,azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle}}function jy(e){if(!ob(e))return null;let t;if(e.camera!==void 0){let r=Vy(e.camera);if(!r)return null;t=r}let n;if(e.hidden!==void 0){if(!Array.isArray(e.hidden)||!e.hidden.every(r=>typeof r=="string"))return null;n=e.hidden}let a;if(e.selected===null||typeof e.selected=="string")a=e.selected;else if(e.selected!==void 0)return null;return{camera:t,hidden:n,selected:a}}function ab(e,t,n){let a=Object.values(t).filter(r=>r.visible===!1).map(r=>r.id);return{camera:e??void 0,hidden:a,selected:n?.id??null}}function sb({cameraState:e,setCameraState:t,objectBindings:n,onObjectBindingsChange:a,selectedObjectBinding:r,setSelectedObjectBinding:i,paramKey:s="view",debounceMs:l=400,autoSync:o=!0}){let c=(0,Yt.useRef)(null),d=(0,Yt.useRef)(null),p=(0,Yt.useRef)(null),h=(0,Yt.useRef)(null),f=(0,Yt.useRef)(null),b=(0,Yt.useCallback)(()=>{f.current!==null&&(window.clearTimeout(f.current),f.current=null),p.current=null,h.current=null},[]),w=(0,Yt.useCallback)(()=>{let S=ab(e,n,r);return`${s}=${encodeURIComponent(JSON.stringify(S))}`},[e,n,r,s]),k=(0,Yt.useCallback)(()=>{let S=new URL(window.location.href);return S.hash=w(),S.toString()},[w]),x=(0,Yt.useCallback)(S=>{let v=new URL(window.location.href);v.hash=S,window.history.replaceState(null,"",v.toString()),d.current=S,c.current=new URLSearchParams(v.hash.slice(1)).get(s)},[s]),u=(0,Yt.useCallback)(()=>{b(),x(w())},[w,b,x]),m=(0,Yt.useRef)({cameraState:e,objectBindings:n,selectedObjectBinding:r});m.current={cameraState:e,objectBindings:n,selectedObjectBinding:r};let[_,M]=(0,Yt.useState)(!1);(0,Yt.useEffect)(()=>{if(!o||!_){b();return}let S=m.current,v=ab(S.cameraState,S.objectBindings,S.selectedObjectBinding),P=`${s}=${encodeURIComponent(JSON.stringify(v))}`;if(P===d.current){b();return}P===p.current&&l===h.current||(b(),p.current=P,h.current=l,f.current=window.setTimeout(()=>{f.current=null,p.current=null,h.current=null,x(P)},Math.max(0,l)))},[o,e,b,l,n,s,_,r,x]),(0,Yt.useEffect)(()=>b,[b]);let C=(0,Yt.useRef)(null),A=(0,Yt.useRef)(null),g=(0,Yt.useCallback)(async()=>{M(!0);let S=window.location.hash.startsWith("#")?window.location.hash.slice(1):window.location.hash,v=new URLSearchParams(S).get(s);if(!v)return C.current=null,!1;if(v===c.current||v===C.current||v===A.current)return!1;let P;try{P=JSON.parse(v)}catch{return!1}let U=jy(P);if(!U)return!1;A.current=v;try{if(U.camera&&await t(U.camera,!1),U.hidden){let E=new Set(U.hidden);a(Object.fromEntries(Object.entries(n).map(([V,T])=>[V,{...T,visible:!E.has(T.id)}])))}if(U.selected!==void 0){let E=U.selected?Sn(n,U.selected):null;i(E?n[E]:null)}return C.current=v,!0}finally{A.current===v&&(A.current=null)}},[n,a,s,t,i]);return(0,Yt.useEffect)(()=>{let S=()=>{g().catch(()=>{})};return window.addEventListener("hashchange",S),()=>{window.removeEventListener("hashchange",S)}},[g]),{getShareUrl:k,syncUrl:u,restoreFromUrl:g}}0&&(module.exports={BindingBuilder,DEFAULT_SCENE_CONFIG,MATERIAL_BLENDING_MODES,MATERIAL_SIDES,ModelViewer,SimpleModelViewer,defineObjectBindings,material,patchBindings,patchSceneConfig,selectBindingKeys,selectBindings,useObjectBinding,useObjectBindingIds,useObjectBindings,useSceneConfig,useShareableViewerState,useViewerActions,useViewerAnimations,useViewerCamera,useViewerConnection,useViewerEffects,useViewerHover,useViewerModel,useViewerSelection});